ZGlmZiAtLWdpdCBhL2NwdS83NHh4Xzd4eC9jcHUuYyBiL2NwdS83NHh4Xzd4eC9jcHUuYwppbmRleCAxOWY4ZmY4Li4zMGEyMDkxIDEwMDY0NAotLS0gYS9jcHUvNzR4eF83eHgvY3B1LmMKKysrIGIvY3B1Lzc0eHhfN3h4L2NwdS5jCkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAhZGVmaW5lZChDT05GSUdfRUxQUEMpCiAvKiBubyBnZW5lcmljIHdheSB0byBkbyBib2FyZCByZXNldC4gc2ltcGx5IGNhbGwgc29mdF9yZXNldC4gKi8KIHZvaWQKLWRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBiZF90ICpiZCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCitkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAgICAgCXVsb25nIGFkZHI7CiAJLyogZmx1c2ggYW5kIGRpc2FibGUgSS9EIGNhY2hlICovCmRpZmYgLS1naXQgYS9jcHUvNzR4eF83eHgvc3BlZWQuYyBiL2NwdS83NHh4Xzd4eC9zcGVlZC5jCmluZGV4IDIzYjcxZDQuLjEyYmRmMzcgMTAwNjQ0Ci0tLSBhL2NwdS83NHh4Xzd4eC9zcGVlZC5jCisrKyBiL2NwdS83NHh4Xzd4eC9zcGVlZC5jCkBAIC00OSwyOSArNDksMjkgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBpbnQgaGlkMV9meF9tdWx0aXBsaWVyc194XzEwW10gPSB7Ci0gICAgICAgIDAwLCAgICAgLyogMDAwMCAtIG9mZiAqLwotICAgICAgICAwMCwgICAgIC8qIDAwMDEgLSBvZmYgKi8KLSAgICAgICAgMTAsICAgICAvKiAwMDEwIC0gYnlwYXNzICovCi0gICAgICAgIDEwLCAgICAgLyogMDAxMSAtIGJ5cGFzcyAqLwotICAgICAgICAyMCwgICAgIC8qIDAxMDAgLSAyeCAqLwotICAgICAgICAyNSwgICAgIC8qIDAxMDEgLSAyLjV4ICovCi0gICAgICAgIDMwLCAgICAgLyogMDExMCAtIDN4ICovCi0gICAgICAgIDM1LCAgICAgLyogMDExMSAtIDMuNXggKi8KLSAgICAgICAgNDAsICAgICAvKiAxMDAwIC0gNHggKi8KLSAgICAgICAgNDUsICAgICAvKiAxMDAxIC0gNC41eCAqLwotICAgICAgICA1MCwgICAgIC8qIDEwMTAgLSA1eCAqLwotICAgICAgICA1NSwgICAgIC8qIDEwMTEgLSA1LjV4ICovCi0gICAgICAgIDYwLCAgICAgLyogMTEwMCAtIDZ4ICovCi0gICAgICAgIDY1LCAgICAgLyogMTEwMSAtIDYuNXggKi8KLSAgICAgICAgNzAsICAgICAvKiAxMTEwIC0gN3ggKi8KLSAgICAgICAgNzUsICAgICAvKiAxMTExIC0gNy41ICovCi0gICAgICAgIDgwLCAgICAgLyogMTAwMDAgLSA4eCAqLwotICAgICAgICA4NSwgICAgIC8qIDEwMDAxIC0gOC41eCAqLwotICAgICAgICA5MCwgICAgIC8qIDEwMDEwIC0gOXggKi8KLSAgICAgICAgOTUsICAgICAvKiAxMDAxMSAtIDkuNXggKi8KLSAgICAgICAgMTAwLCAgICAvKiAxMDEwMCAtIDEweCAqLwotICAgICAgICAxMTAsICAgIC8qIDEwMTAxIC0gMTF4ICovCi0gICAgICAgIDEyMCwgICAgLyogMTAxMTAgLSAxMnggKi8KKwkwMCwgICAgIC8qIDAwMDAgLSBvZmYgKi8KKwkwMCwgICAgIC8qIDAwMDEgLSBvZmYgKi8KKwkxMCwgICAgIC8qIDAwMTAgLSBieXBhc3MgKi8KKwkxMCwgICAgIC8qIDAwMTEgLSBieXBhc3MgKi8KKwkyMCwgICAgIC8qIDAxMDAgLSAyeCAqLworCTI1LCAgICAgLyogMDEwMSAtIDIuNXggKi8KKwkzMCwgICAgIC8qIDAxMTAgLSAzeCAqLworCTM1LCAgICAgLyogMDExMSAtIDMuNXggKi8KKwk0MCwgICAgIC8qIDEwMDAgLSA0eCAqLworCTQ1LCAgICAgLyogMTAwMSAtIDQuNXggKi8KKwk1MCwgICAgIC8qIDEwMTAgLSA1eCAqLworCTU1LCAgICAgLyogMTAxMSAtIDUuNXggKi8KKwk2MCwgICAgIC8qIDExMDAgLSA2eCAqLworCTY1LCAgICAgLyogMTEwMSAtIDYuNXggKi8KKwk3MCwgICAgIC8qIDExMTAgLSA3eCAqLworCTc1LCAgICAgLyogMTExMSAtIDcuNSAqLworCTgwLCAgICAgLyogMTAwMDAgLSA4eCAqLworCTg1LCAgICAgLyogMTAwMDEgLSA4LjV4ICovCisJOTAsICAgICAvKiAxMDAxMCAtIDl4ICovCisJOTUsICAgICAvKiAxMDAxMSAtIDkuNXggKi8KKwkxMDAsICAgIC8qIDEwMTAwIC0gMTB4ICovCisJMTEwLCAgICAvKiAxMDEwMSAtIDExeCAqLworCTEyMCwgICAgLyogMTAxMTAgLSAxMnggKi8KIH07CiAKIApAQCAtODcsOCArODcsOCBAQAogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogI2lmZGVmIENPTkZJR183NTBGWAotICAgICAgICB1bG9uZyBjbG9jayA9IENGR19CVVNfQ0xLICogXAotICAgICAgICAgICAgICAgICAgICAgIGhpZDFfZnhfbXVsdGlwbGllcnNfeF8xMFtnZXRfaGlkMSAoKSA+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+CiAKQEAgLTI0Miw4ICsyNDEsNiBAQAogCW1vdglwYywgbHIKIAogCi0KLQogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgo=