ZGlmZiAtLWdpdCBhL3NyYy9NYWtlX212Yy5tYWsgYi9zcmMvTWFrZV9tdmMubWFrCmluZGV4IGU3NDAxOWYuLjE0NGY5NTYgMTAwNjQ0Ci0tLSBhL3NyYy9NYWtlX212Yy5tYWsKKysrIGIvc3JjL01ha2VfbXZjLm1hawpAQCAtNjgzLDcgKzY4Myw3IEBACiAKICQoVklNKS5leGU6ICQoT1VURElSKSAkKE9CSikgJChHVUlfT0JKKSAkKE9MRV9PQkopICQoT0xFX0lETCkgJChNWlNDSEVNRV9PQkopICQoUEVSTF9PQkopICQoUFlUSE9OX09CSikgJChSVUJZX09CSikgJChUQ0xfT0JKKSAkKFNOSUZGX09CSikgJChDU0NPUEVfT0JKKSAkKE5FVEJFQU5TX09CSikgJChYUE1fT0JKKSB2ZXJzaW9uLmMgdmVyc2lvbi5oCiAJJChDQykgJChDRkxBR1MpICB2ZXJzaW9uLmMgL0ZvJChPVVRESVIpL3ZlcnNpb24ub2JqICQoUERCKQotCSQobGluaykgJChMSU5LQVJHUzEpIC1vdXQ6JCogJChPQkopICQoR1VJX09CSikgJChPTEVfT0JKKSBcCisJJChsaW5rKSAkKExJTktBUkdTMSkgLW91dDokKFZJTSkuZXhlICQoT0JKKSAkKEdVSV9PQkopICQoT0xFX09CSikgXAogCQkkKE1aU0NIRU1FX09CSikgJChQRVJMX09CSikgJChQWVRIT05fT0JKKSAkKFJVQllfT0JKKSAkKFRDTF9PQkopICQoU05JRkZfT0JKKSBcCiAJCSQoQ1NDT1BFX09CSikgJChORVRCRUFOU19PQkopICQoWFBNX09CSikgXAogCQkkKE9VVERJUilcdmVyc2lvbi5vYmogJChMSU5LQVJHUzIpCmRpZmYgLS1naXQgYS9zcmMvb3B0aW9uLmMgYi9zcmMvb3B0aW9uLmMKaW5kZXggNTdkMjk1MS4uZGZlMmUyYiAxMDA2NDQKLS0tIGEvc3JjL29wdGlvbi5jCisrKyBiL3NyYy9vcHRpb24uYwpAQCAtMjAzNiw3ICsyMDM2LDcgQEAKICAgICB7InNwZWxsY2FwY2hlY2siLCAic3BjIiwgUF9TVFJJTkd8UF9BTExPQ0VEfFBfVklfREVGfFBfU0VDVVJFfFBfUkJVRiwKICNpZmRlZiBGRUFUX1NZTl9ITAogCQkJICAgIChjaGFyX3UgKikmcF9zcGMsIFBWX1NQQywKLQkJCSAgICB7KGNoYXJfdSAqKSJbLj8hXVtdKSdcIiBcXHRcXG5dXFwrIiwgKGNoYXJfdSAqKTBMfQorCQkJICAgIHsoY2hhcl91ICopIlsuPyFdXFxfW1xcXSknXCIJIF1cXCsiLCAoY2hhcl91ICopMEx9CiAjZWxzZQogCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAogCQkJICAgIHsoY2hhcl91ICopMEwsIChjaGFyX3UgKikwTH0KQEAgLTI2MDUsNyArMjYwNSw3IEBACiBzdGF0aWMgY2hhcl91ICpjaGVja19jbGlwYm9hcmRfb3B0aW9uIF9fQVJHUygodm9pZCkpOwogI2VuZGlmCiAjaWZkZWYgRkVBVF9TWU5fSEwKLXN0YXRpYyBjaGFyX3UgKmNvbXBpbGVfY2FwX3Byb2cgX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgY2hhcl91ICpjb21waWxlX2NhcF9wcm9nIF9fQVJHUygoYnVmX1QgKmJ1ZikpOwogI2VuZGlmCiBzdGF0aWMgY2hhcl91ICpzZXRfYm9vbF9vcHRpb24gX19BUkdTKChpbnQgb3B0X2lkeCwgY2hhcl91ICp2YXJwLCBpbnQgdmFsdWUsIGludCBvcHRfZmxhZ3MpKTsKIHN0YXRpYyBjaGFyX3UgKnNldF9udW1fb3B0aW9uIF9fQVJHUygoaW50IG9wdF9pZHgsIGNoYXJfdSAqdmFycCwgbG9uZyB2YWx1ZSwgY2hhcl91ICplcnJidWYsIHNpemVfdCBlcnJidWZsZW4sIGludCBvcHRfZmxhZ3MpKTsKQEAgLTQ2MTAsNyArNDYxMCw3IEBACiAjZW5kaWYKICNpZmRlZiBGRUFUX1NZTl9ITAogICAgICh2b2lkKXNwZWxsX2NoZWNrX3NwcygpOwotICAgICh2b2lkKWNvbXBpbGVfY2FwX3Byb2coKTsKKyAgICAodm9pZCljb21waWxlX2NhcF9wcm9nKGN1cmJ1Zik7CiAjZW5kaWYKICNpZiBkZWZpbmVkKEZFQVRfVE9PTEJBUikgJiYgIWRlZmluZWQoRkVBVF9HVUlfVzMyKQogICAgICh2b2lkKW9wdF9zdHJpbmdzX2ZsYWdzKHBfdG9vbGJhciwgcF90b29sYmFyX3ZhbHVlcywgJnRvb2xiYXJfZmxhZ3MsIFRSVUUpOwpAQCAtNTc3NCw3ICs1Nzc0LDcgQEAKICAgICAvKiBXaGVuICdzcGVsbGNhcGNoZWNrJyBpcyBzZXQgY29tcGlsZSB0aGUgcmVnZXhwIHByb2dyYW0uICovCiAgICAgZWxzZSBpZiAodmFycCA9PSAmKGN1cmJ1Zi0+Yl9wX3NwYykpCiAgICAgewotCWVycm1zZyA9IGNvbXBpbGVfY2FwX3Byb2coKTsKKwllcnJtc2cgPSBjb21waWxlX2NhcF9wcm9nKGN1cmJ1Zik7CiAgICAgfQogICAgIC8qICdzcGVsbHN1Z2dlc3QnICovCiAgICAgZWxzZSBpZiAodmFycCA9PSAmcF9zcHMpCkBAIC02NDM3LDIzICs2NDM3LDI0IEBACiAgKiBSZXR1cm4gZXJyb3IgbWVzc2FnZSB3aGVuIGZhaWxlZCwgTlVMTCB3aGVuIE9LLgogICovCiAgICAgc3RhdGljIGNoYXJfdSAqCi1jb21waWxlX2NhcF9wcm9nKCkKK2NvbXBpbGVfY2FwX3Byb2coYnVmKQorICAgIGJ1Zl9UCSpidWY7CiB7Ci0gICAgcmVncHJvZ19UICAgKnJwID0gY3VyYnVmLT5iX2NhcF9wcm9nOworICAgIHJlZ3Byb2dfVCAgICpycCA9IGJ1Zi0+Yl9jYXBfcHJvZzsKIAotICAgIGlmICgqY3VyYnVmLT5iX3Bfc3BjID09IE5VTCkKKyAgICBpZiAoKmJ1Zi0+Yl9wX3NwYyA9PSBOVUwpCiAgICAgewotCWN1cmJ1Zi0+Yl9jYXBfcHJvZyA9IE5VTEw7CisJYnVmLT5iX2NhcF9wcm9nID0gTlVMTDsKIAl2aW1fZnJlZShycCk7CiAJcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyogUHJlcGVuZCBhIF4gc28gdGhhdCB3ZSBvbmx5IG1hdGNoIGF0IG9uZSBjb2x1bW4gKi8KLSAgICB2aW1fc25wcmludGYoKGNoYXIgKilJT2J1ZmYsIElPU0laRSwgIl4lcyIsIGN1cmJ1Zi0+Yl9wX3NwYyk7Ci0gICAgY3VyYnVmLT5iX2NhcF9wcm9nID0gdmltX3JlZ2NvbXAoSU9idWZmLCBSRV9NQUdJQyk7Ci0gICAgaWYgKGN1cmJ1Zi0+Yl9jYXBfcHJvZyA9PSBOVUxMKQorICAgIHZpbV9zbnByaW50ZigoY2hhciAqKUlPYnVmZiwgSU9TSVpFLCAiXiVzIiwgYnVmLT5iX3Bfc3BjKTsKKyAgICBidWYtPmJfY2FwX3Byb2cgPSB2aW1fcmVnY29tcChJT2J1ZmYsIFJFX01BR0lDKTsKKyAgICBpZiAoYnVmLT5iX2NhcF9wcm9nID09IE5VTEwpCiAgICAgewotCWN1cmJ1Zi0+Yl9jYXBfcHJvZyA9IHJwOworCWJ1Zi0+Yl9jYXBfcHJvZyA9IHJwOwogCXJldHVybiBlX2ludmFyZzsKICAgICB9CiAKQEAgLTg3NTgsNiArODc1OSw3IEBACiAJICAgIC8qIERvbid0IGNvcHkgJ3N5bnRheCcsIGl0IG11c3QgYmUgc2V0ICovCiAJICAgIGJ1Zi0+Yl9wX3N5biA9IGVtcHR5X29wdGlvbjsKIAkgICAgYnVmLT5iX3Bfc3BjID0gdmltX3N0cnNhdmUocF9zcGMpOworCSAgICAodm9pZCljb21waWxlX2NhcF9wcm9nKGJ1Zik7CiAJICAgIGJ1Zi0+Yl9wX3NwZiA9IHZpbV9zdHJzYXZlKHBfc3BmKTsKIAkgICAgYnVmLT5iX3Bfc3BsID0gdmltX3N0cnNhdmUocF9zcGwpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvcG8vTWFrZV9jeWcubWFrIGIvc3JjL3BvL01ha2VfY3lnLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzkzNjhmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BvL01ha2VfY3lnLm1hawpAQCAtMCwwICsxLDc2IEBACisjIE1ha2VmaWxlIGZvciB0aGUgVmltIG1lc3NhZ2UgdHJhbnNsYXRpb25zIGZvciBDeWd3aW4KKyMgYnkgVG9ueSBNZWNoZWx5bmNrIDxhbnRvaW5lLm1lY2hlbHluY2tAc2t5bmV0LmJlPgorIyBhZnRlciBNYWtlX21pbmcubWFrIGJ5CisjIEVkdWFyZG8gRi4gQW1hdHJpYSA8ZWZlcm5hMUBwbGF0ZWEucG50aWMubWVjLmVzPgorIworIyBSZWFkIHRoZSBSRUFETUVfbWluZy50eHQgZmlsZSBiZWZvcmUgdXNpbmcgaXQuCisjCisjIFVzZSBhdCB5b3VyIG93biByaXNrIGJ1dCB3aXRoIGNhcmUsIGl0IGNvdWxkIGV2ZW4ga2lsbCB5b3VyIGNhbmFyeS4KKyMKKworaWZuZGVmIFZJTVJVTlRJTUUKK1ZJTVJVTlRJTUUgPSAuLi8uLi9ydW50aW1lCitlbmRpZgorCitMQU5HVUFHRVMgPQlhZiBjYSBjcyBkZSBlbl9HQiBlcyBmciBnYSBpdCBqYSBrbyBubyBwbCBydSBzayBzdiB1ayB2aSB6aF9UVyBcCisJCXpoX1RXLlVURi04IHpoX0NOIHpoX0NOLlVURi04CitNT0ZJTEVTID0JYWYubW8gY2EubW8gY3MubW8gZGUubW8gZW5fR0IubW8gZXMubW8gZnIubW8gZ2EubW8gaXQubW8gamEubW8gXAorCQlrby5tbyBuby5tbyBwbC5tbyBydS5tbyBzay5tbyBzdi5tbyB1ay5tbyB2aS5tbyBcCisJCXpoX1RXLm1vIHpoX1RXLlVURi04Lm1vIHpoX0NOLm1vIHpoX0NOLlVURi04Lm1vCisKK1BBQ0tBR0UgPSB2aW0KKworIyBVbmNvbW1lbnQgb25lIG9mIHRoZSBsaW5lcyBiZWxvdyBvciBtb2RpZnkgaXQgdG8gcHV0IHRoZSBwYXRoIHRvIHlvdXIKKyMgZ2V0dGV4IGJpbmFyaWVzOyBJIHVzZSB0aGUgZmlyc3QKK2lmbmRlZiBHRVRURVhUX1BBVEgKKyNHRVRURVhUX1BBVEggPSBDOi9nZXR0ZXh0LndpbjMyL2Jpbi8KKyNHRVRURVhUX1BBVEggPSBDOi9nZXR0ZXh0LTAuMTAuMzUtdzMyL3dpbjMyL1JlbGVhc2UvCitHRVRURVhUX1BBVEggPSAvYmluLworZW5kaWYKKworTVNHRk1UID0gJChHRVRURVhUX1BBVEgpbXNnZm10CitYR0VUVEVYVCA9ICQoR0VUVEVYVF9QQVRIKXhnZXR0ZXh0CitNU0dNRVJHRSA9ICQoR0VUVEVYVF9QQVRIKW1zZ21lcmdlCisKKyMgTVYgPSBtb3ZlCisjIENQID0gY29weQorIyBSTSA9IGRlbAorIyBNS0QgPSBta2RpcgorTVYgPSBtdiAtZgorQ1AgPSBjcCAtZgorUk0gPSBybSAtZgorTUtEID0gbWtkaXIgLXAKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAucG8gLm1vIC5wb3QKKy5QSE9OWTogZmlyc3RfdGltZSBhbGwgaW5zdGFsbCBjbGVhbiAkKExBTkdVQUdFUykKKworLnBvLm1vOgorCSQoTVNHRk1UKSAtbyAkQCAkPAorCithbGw6ICQoTU9GSUxFUykKKworZmlyc3RfdGltZToKKwkkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoTEFOR1VBR0UpIFwKKwkJLS1hZGQtY29tbWVudHMgLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fICQod2lsZGNhcmQgLi4vKi5jKSAuLi9pZl9wZXJsLnhzICQod2lsZGNhcmQgLi4vZ2xvYmFscy5oKQorCiskKExBTkdVQUdFUyk6CisJJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKFBBQ0tBR0UpIFwKKwkJLS1hZGQtY29tbWVudHMgLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fICQod2lsZGNhcmQgLi4vKi5jKSAuLi9pZl9wZXJsLnhzICQod2lsZGNhcmQgLi4vZ2xvYmFscy5oKQorCSQoTVYpICQoUEFDS0FHRSkucG8gJChQQUNLQUdFKS5wb3QKKwkkKENQKSAkQC5wbyAkQC5wby5vcmlnCisJJChNVikgJEAucG8gJEAucG8ub2xkCisJJChNU0dNRVJHRSkgJEAucG8ub2xkICQoUEFDS0FHRSkucG90IC1vICRALnBvCisJJChSTSkgJEAucG8ub2xkCisKK2luc3RhbGw6ICQoTU9GSUxFUykKKwlmb3IgVEFSR0VUIGluICQoTEFOR1VBR0VTKTsgZG8gXAorCQkkKE1LRCkgJChWSU1SVU5USU1FKS9sYW5nLyQkVEFSR0VUL0xDX01FU1NBR0VTIDsgXAorCQkkKENQKSAkJFRBUkdFVC5tbyAkKFZJTVJVTlRJTUUpL2xhbmcvJCRUQVJHRVQvTENfTUVTU0FHRVMvJChQQUNLQUdFKS5tbyA7IFwKKwlkb25lCisKK2NsZWFuOgorCSQoUk0pICoubW8KKwkkKFJNKSAqLnBvdAorCisKZGlmZiAtLWdpdCBhL3NyYy9zcGVsbC5jIGIvc3JjL3NwZWxsLmMKaW5kZXggMDE1YTcxMC4uZjIzY2Y5OCAxMDA2NDQKLS0tIGEvc3JjL3NwZWxsLmMKKysrIGIvc3JjL3NwZWxsLmMKQEAgLTE5Miw3ICsxOTIsMTAgQEAKICAqIDxmbGFncz4JMSBieXRlCSAgICBiaXRtYXNrIG9mOgogICoJCQkgICAgV0ZfQUxMQ0FQCXdvcmQgbXVzdCBoYXZlIG9ubHkgY2FwaXRhbHMKICAqCQkJICAgIFdGX09ORUNBUCAgIGZpcnN0IGNoYXIgb2Ygd29yZCBtdXN0IGJlIGNhcGl0YWwKKyAqCQkJICAgIFdGX0tFRVBDQVAJa2VlcC1jYXNlIHdvcmQKKyAqCQkJICAgIFdGX0ZJWENBUCAgIGtlZXAtY2FzZSB3b3JkLCBhbGwgY2FwcyBub3QgYWxsb3dlZAogICoJCQkgICAgV0ZfUkFSRQlyYXJlIHdvcmQKKyAqCQkJICAgIFdGX0JBTk5FRAliYWQgd29yZAogICoJCQkgICAgV0ZfUkVHSU9OCTxyZWdpb24+IGZvbGxvd3MKICAqCQkJICAgIFdGX1BGWAk8cHJlZml4SUQ+IGZvbGxvd3MKICAqCkBAIC0yNDEsOSArMjQ0LDEwIEBACiAjZGVmaW5lIFdGX1JBUkUJICAgIDB4MDgJLyogcmFyZSB3b3JkICovCiAjZGVmaW5lIFdGX0JBTk5FRCAgIDB4MTAJLyogYmFkIHdvcmQgKi8KICNkZWZpbmUgV0ZfUEZYCSAgICAweDIwCS8qIHByZWZpeCBJRCBsaXN0IGZvbGxvd3MgKi8KKyNkZWZpbmUgV0ZfRklYQ0FQICAgMHg0MAkvKiBrZWVwLWNhc2Ugd29yZCwgYWxsY2FwIG5vdCBhbGxvd2VkICovCiAjZGVmaW5lIFdGX0tFRVBDQVAgIDB4ODAJLyoga2VlcC1jYXNlIHdvcmQgKi8KIAotI2RlZmluZSBXRl9DQVBNQVNLIChXRl9PTkVDQVAgfCBXRl9BTExDQVAgfCBXRl9LRUVQQ0FQKQorI2RlZmluZSBXRl9DQVBNQVNLIChXRl9PTkVDQVAgfCBXRl9BTExDQVAgfCBXRl9LRUVQQ0FQIHwgV0ZfRklYQ0FQKQogCiAjZGVmaW5lIFdGX1JBUkVQRlggIDB4MTAwMDAwMAkvKiBpbiBzbF9waWR4czogZmxhZyBmb3IgcmFyZSBwb3N0cG9uZWQKIAkJCQkgICBwcmVmaXg7IG11c3QgYmUgYWJvdmUgcHJlZml4SUQgKG9uZSBieXRlKQpAQCAtNTg0LDE0ICs1ODgsMTQgQEAKIHN0YXRpYyBpbnQgdmFsaWRfd29yZF9wcmVmaXggX19BUkdTKChpbnQgdG90cHJlZmNudCwgaW50IGFycmlkeCwgaW50IHByZWZpZCwgY2hhcl91ICp3b3JkLCBzbGFuZ19UICpzbGFuZykpOwogc3RhdGljIHZvaWQgZmluZF9wcmVmaXggX19BUkdTKChtYXRjaGluZl9UICptaXApKTsKIHN0YXRpYyBpbnQgZm9sZF9tb3JlIF9fQVJHUygobWF0Y2hpbmZfVCAqbWlwKSk7Ci1zdGF0aWMgaW50IHNwZWxsX3ZhbGlkX2Nhc2UgX19BUkdTKChpbnQgb3JpZ2ZsYWdzLCBpbnQgdHJlZWZsYWdzKSk7CitzdGF0aWMgaW50IHNwZWxsX3ZhbGlkX2Nhc2UgX19BUkdTKChpbnQgd29yZGZsYWdzLCBpbnQgdHJlZWZsYWdzKSk7CiBzdGF0aWMgaW50IG5vX3NwZWxsX2NoZWNraW5nIF9fQVJHUygodm9pZCkpOwogc3RhdGljIHZvaWQgc3BlbGxfbG9hZF9sYW5nIF9fQVJHUygoY2hhcl91ICpsYW5nKSk7CiBzdGF0aWMgY2hhcl91ICpzcGVsbF9lbmMgX19BUkdTKCh2b2lkKSk7CiBzdGF0aWMgdm9pZCBpbnRfd29yZGxpc3Rfc3BsIF9fQVJHUygoY2hhcl91ICpmbmFtZSkpOwogc3RhdGljIHZvaWQgc3BlbGxfbG9hZF9jYiBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIHZvaWQgKmNvb2tpZSkpOwogc3RhdGljIHNsYW5nX1QgKnNwZWxsX2xvYWRfZmlsZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIGNoYXJfdSAqbGFuZywgc2xhbmdfVCAqb2xkX2xwLCBpbnQgc2lsZW50KSk7Ci1zdGF0aWMgY2hhcl91ICpyZWFkX2NudF9zdHJpbmcgX19BUkdTKChGSUxFICpmZCwgaW50IGNudF9ieXRlcywgaW50ICplcnJwKSk7CitzdGF0aWMgY2hhcl91ICpyZWFkX2NudF9zdHJpbmcgX19BUkdTKChGSUxFICpmZCwgaW50IGNudF9ieXRlcywgaW50ICpsZW5wKSk7CiBzdGF0aWMgaW50IHNldF9zb2ZvIF9fQVJHUygoc2xhbmdfVCAqbHAsIGNoYXJfdSAqZnJvbSwgY2hhcl91ICp0bykpOwogc3RhdGljIHZvaWQgc2V0X3NhbF9maXJzdCBfX0FSR1MoKHNsYW5nX1QgKmxwKSk7CiAjaWZkZWYgRkVBVF9NQllURQpAQCAtNjAzLDcgKzYwNyw3IEBACiBzdGF0aWMgaW50IGZpbmRfcmVnaW9uIF9fQVJHUygoY2hhcl91ICpycCwgY2hhcl91ICpyZWdpb24pKTsKIHN0YXRpYyBpbnQgY2FwdHlwZSBfX0FSR1MoKGNoYXJfdSAqd29yZCwgY2hhcl91ICplbmQpKTsKIHN0YXRpYyB2b2lkIHNwZWxsX3JlbG9hZF9vbmUgX19BUkdTKChjaGFyX3UgKmZuYW1lLCBpbnQgYWRkZWRfd29yZCkpOwotc3RhdGljIGludCBzZXRfc3BlbGxfY2hhcmZsYWdzIF9fQVJHUygoY2hhcl91ICpmbGFncywgY2hhcl91ICp1cHApKTsKK3N0YXRpYyBpbnQgc2V0X3NwZWxsX2NoYXJmbGFncyBfX0FSR1MoKGNoYXJfdSAqZmxhZ3MsIGludCBjbnQsIGNoYXJfdSAqdXBwKSk7CiBzdGF0aWMgaW50IHNldF9zcGVsbF9jaGFydGFiIF9fQVJHUygoY2hhcl91ICpmb2wsIGNoYXJfdSAqbG93LCBjaGFyX3UgKnVwcCkpOwogc3RhdGljIHZvaWQgd3JpdGVfc3BlbGxfY2hhcnRhYiBfX0FSR1MoKEZJTEUgKmZkKSk7CiBzdGF0aWMgaW50IHNwZWxsX2Nhc2Vmb2xkIF9fQVJHUygoY2hhcl91ICpwLCBpbnQgbGVuLCBjaGFyX3UgKmJ1ZiwgaW50IGJ1ZmxlbikpOwpAQCAtMTI5MywxMyArMTI5NywxMyBAQAogICogY2FzZS4KICAqLwogICAgIHN0YXRpYyBpbnQKLXNwZWxsX3ZhbGlkX2Nhc2Uob3JpZ2ZsYWdzLCB0cmVlZmxhZ3MpCi0gICAgaW50CSAgICBvcmlnZmxhZ3M7CSAgICAvKiBmbGFncyBmb3IgdGhlIGNoZWNrZWQgd29yZC4gKi8KK3NwZWxsX3ZhbGlkX2Nhc2Uod29yZGZsYWdzLCB0cmVlZmxhZ3MpCisgICAgaW50CSAgICB3b3JkZmxhZ3M7CSAgICAvKiBmbGFncyBmb3IgdGhlIGNoZWNrZWQgd29yZC4gKi8KICAgICBpbnQJICAgIHRyZWVmbGFnczsJICAgIC8qIGZsYWdzIGZvciB0aGUgd29yZCBpbiB0aGUgc3BlbGwgdHJlZSAqLwogewotICAgIHJldHVybiAob3JpZ2ZsYWdzID09IFdGX0FMTENBUAorICAgIHJldHVybiAoKHdvcmRmbGFncyA9PSBXRl9BTExDQVAgJiYgKHRyZWVmbGFncyAmIFdGX0ZJWENBUCkgPT0gMCkKIAkgICAgfHwgKCh0cmVlZmxhZ3MgJiAoV0ZfQUxMQ0FQIHwgV0ZfS0VFUENBUCkpID09IDAKLQkJJiYgKCh0cmVlZmxhZ3MgJiBXRl9PTkVDQVApID09IDAgfHwgb3JpZ2ZsYWdzID09IFdGX09ORUNBUCkpKTsKKwkJJiYgKCh0cmVlZmxhZ3MgJiBXRl9PTkVDQVApID09IDAgfHwgd29yZGZsYWdzID09IFdGX09ORUNBUCkpKTsKIH0KIAogLyoKQEAgLTE4MzcsMTIgKzE4NDEsMTIgQEAKIAogICAgIC8qIDxjaGFyZmxhZ3NsZW4+IDxjaGFyZmxhZ3M+ICovCiAgICAgcCA9IHJlYWRfY250X3N0cmluZyhmZCwgMSwgJmNudCk7Ci0gICAgaWYgKGNudCA9PSBGQUlMKQorICAgIGlmIChjbnQgPCAwKQogCWdvdG8gZW5kRkFJTDsKIAogICAgIC8qIDxmY2hhcnNsZW4+IDxmY2hhcnM+ICovCi0gICAgZm9sID0gcmVhZF9jbnRfc3RyaW5nKGZkLCAyLCAmY250KTsKLSAgICBpZiAoY250ID09IEZBSUwpCisgICAgZm9sID0gcmVhZF9jbnRfc3RyaW5nKGZkLCAyLCAmY2NudCk7CisgICAgaWYgKGNjbnQgPCAwKQogICAgIHsKIAl2aW1fZnJlZShwKTsKIAlnb3RvIGVuZEZBSUw7CkBAIC0xODUwLDcgKzE4NTQsNyBAQAogCiAgICAgLyogU2V0IHRoZSB3b3JkLWNoYXIgZmxhZ3MgYW5kIGZpbGwgU1BFTExfSVNVUFBFUigpIHRhYmxlLiAqLwogICAgIGlmIChwICE9IE5VTEwgJiYgZm9sICE9IE5VTEwpCi0JaSA9IHNldF9zcGVsbF9jaGFyZmxhZ3MocCwgZm9sKTsKKwlpID0gc2V0X3NwZWxsX2NoYXJmbGFncyhwLCBjbnQsIGZvbCk7CiAKICAgICB2aW1fZnJlZShwKTsKICAgICB2aW1fZnJlZShmb2wpOwpAQCAtMTg2MSw3ICsxODY1LDcgQEAKIAogICAgIC8qIDxtaWR3b3JkbGVuPiA8bWlkd29yZD4gKi8KICAgICBscC0+c2xfbWlkd29yZCA9IHJlYWRfY250X3N0cmluZyhmZCwgMiwgJmNudCk7Ci0gICAgaWYgKGNudCA9PSBGQUlMKQorICAgIGlmIChjbnQgPCAwKQogCWdvdG8gZW5kRkFJTDsKIAogICAgIC8qIDxwcmVmY29uZGNudD4gPHByZWZjb25kPiAuLi4gKi8KQEAgLTE5MTIsMTAgKzE5MTYsMTAgQEAKICAgICB7CiAJZnRwID0gJigoZnJvbXRvX1QgKilnYXAtPmdhX2RhdGEpW2dhcC0+Z2FfbGVuXTsKIAlmdHAtPmZ0X2Zyb20gPSByZWFkX2NudF9zdHJpbmcoZmQsIDEsICZpKTsKLQlpZiAoaSA9PSBGQUlMKQorCWlmIChpIDw9IDApCiAJICAgIGdvdG8gZW5kRkFJTDsKIAlmdHAtPmZ0X3RvID0gcmVhZF9jbnRfc3RyaW5nKGZkLCAxLCAmaSk7Ci0JaWYgKGkgPT0gRkFJTCkKKwlpZiAoaSA8PSAwKQogCXsKIAkgICAgdmltX2ZyZWUoZnRwLT5mdF9mcm9tKTsKIAkgICAgZ290byBlbmRGQUlMOwpAQCAtMTk0Miw2ICsxOTQ2LDggQEAKIAlscC0+c2xfcmVtX2FjY2VudHMgPSBUUlVFOwogICAgIGlmIChpICYgU0FMX1NPRk8pCiAJbHAtPnNsX3NvZm8gPSBUUlVFOworICAgIGVsc2UKKwlscC0+c2xfc29mbyA9IEZBTFNFOwogCiAgICAgY250ID0gKGdldGMoZmQpIDw8IDgpICsgZ2V0YyhmZCk7CQkvKiA8c2FsY291bnQ+ICovCiAgICAgaWYgKGNudCA8IDApCkBAIC0xOTU3LDE5ICsxOTYzLDI0IEBACiAKIAkvKiA8c2FsZnJvbWxlbj4gPHNhbGZyb20+ICovCiAJYnAgPSByZWFkX2NudF9zdHJpbmcoZmQsIDIsICZjbnQpOwotCWlmIChjbnQgPT0gRkFJTCkKKwlpZiAoY250IDwgMCkKIAkgICAgZ290byBlbmRGQUlMOwogCiAJLyogPHNhbHRvbGVuPiA8c2FsdG8+ICovCiAJZm9sID0gcmVhZF9jbnRfc3RyaW5nKGZkLCAyLCAmY250KTsKLQlpZiAoY250ID09IEZBSUwpCisJaWYgKGNudCA8IDApCiAJewogCSAgICB2aW1fZnJlZShicCk7CiAJICAgIGdvdG8gZW5kRkFJTDsKIAl9CiAKIAkvKiBTdG9yZSB0aGUgaW5mbyBpbiBscC0+c2xfc2FsIGFuZC9vciBscC0+c2xfc2FsX2ZpcnN0LiAqLwotCWkgPSBzZXRfc29mbyhscCwgYnAsIGZvbCk7CisJaWYgKGJwICE9IE5VTEwgJiYgZm9sICE9IE5VTEwpCisJICAgIGkgPSBzZXRfc29mbyhscCwgYnAsIGZvbCk7CisJZWxzZSBpZiAoYnAgIT0gTlVMTCB8fCBmb2wgIT0gTlVMTCkKKwkgICAgaSA9IEZBSUw7CSAgICAvKiBvbmx5IG9uZSBvZiB0d28gc3RyaW5ncyBpcyBhbiBlcnJvciAqLworCWVsc2UKKwkgICAgaSA9IE9LOwogCiAJdmltX2ZyZWUoYnApOwogCXZpbV9mcmVlKGZvbCk7CkBAIC0yMDM2LDcgKzIwNDcsNyBAQAogCiAJICAgIC8qIDxzYWx0b2xlbj4gPHNhbHRvPiAqLwogCSAgICBzbXAtPnNtX3RvID0gcmVhZF9jbnRfc3RyaW5nKGZkLCAxLCAmY2NudCk7Ci0JICAgIGlmIChjY250ID09IEZBSUwpCisJICAgIGlmIChjY250IDwgMCkKIAkgICAgewogCQl2aW1fZnJlZShzbXAtPnNtX2xlYWQpOwogCQlnb3RvIGZvcm1lcnI7CkBAIC0yMDUyLDEwICsyMDYzLDEzIEBACiAJCSAgICBzbXAtPnNtX29uZW9mX3cgPSBOVUxMOwogCQllbHNlCiAJCSAgICBzbXAtPnNtX29uZW9mX3cgPSBtYl9zdHIyd2lkZShzbXAtPnNtX29uZW9mKTsKLQkJc21wLT5zbV90b193ID0gbWJfc3RyMndpZGUoc21wLT5zbV90byk7CisJCWlmIChzbXAtPnNtX3RvID09IE5VTEwpCisJCSAgICBzbXAtPnNtX3RvX3cgPSBOVUxMOworCQllbHNlCisJCSAgICBzbXAtPnNtX3RvX3cgPSBtYl9zdHIyd2lkZShzbXAtPnNtX3RvKTsKIAkJaWYgKHNtcC0+c21fbGVhZF93ID09IE5VTEwKIAkJCXx8IChzbXAtPnNtX29uZW9mX3cgPT0gTlVMTCAmJiBzbXAtPnNtX29uZW9mICE9IE5VTEwpCi0JCQl8fCBzbXAtPnNtX3RvX3cgPT0gTlVMTCkKKwkJCXx8IChzbXAtPnNtX3RvX3cgPT0gTlVMTCAmJiBzbXAtPnNtX3RvICE9IE5VTEwpKQogCQl7CiAJCSAgICB2aW1fZnJlZShzbXAtPnNtX2xlYWQpOwogCQkgICAgdmltX2ZyZWUoc21wLT5zbV90byk7CkBAIC0yMDc0LDExICsyMDg4LDEzIEBACiAKICAgICAvKiA8bWFwbGVuPiA8bWFwc3RyPiAqLwogICAgIHAgPSByZWFkX2NudF9zdHJpbmcoZmQsIDIsICZjbnQpOwotICAgIGlmIChjbnQgPT0gRkFJTCkKKyAgICBpZiAoY250IDwgMCkKIAlnb3RvIGVuZEZBSUw7Ci0gICAgc2V0X21hcF9zdHIobHAsIHApOwotICAgIHZpbV9mcmVlKHApOwotCisgICAgaWYgKHAgIT0gTlVMTCkKKyAgICB7CisJc2V0X21hcF9zdHIobHAsIHApOworCXZpbV9mcmVlKHApOworICAgIH0KIAogICAgIC8qIHJvdW5kIDE6IDxMV09SRFRSRUU+CiAgICAgICogcm91bmQgMjogPEtXT1JEVFJFRT4KQEAgLTIxNTUsMTMgKzIxNzEsMTMgQEAKICAqIFJlYWQgYSBsZW5ndGggZmllbGQgZnJvbSAiZmQiIGluICJjbnRfYnl0ZXMiIGJ5dGVzLgogICogQWxsb2NhdGUgbWVtb3J5LCByZWFkIHRoZSBzdHJpbmcgaW50byBpdCBhbmQgYWRkIGEgTlVMIGF0IHRoZSBlbmQuCiAgKiBSZXR1cm5zIE5VTEwgd2hlbiB0aGUgY291bnQgaXMgemVyby4KLSAqIFNldHMgIiplcnJwIiB0byBGQUlMIHdoZW4gdGhlcmUgaXMgYW4gZXJyb3IsIE9LIG90aGVyd2lzZS4KKyAqIFNldHMgIipjbnRwIiB0byAtMSB3aGVuIHRoZXJlIGlzIGFuIGVycm9yLCBsZW5ndGggb2YgdGhlIHJlc3VsdCBvdGhlcndpc2UuCiAgKi8KICAgICBzdGF0aWMgY2hhcl91ICoKLXJlYWRfY250X3N0cmluZyhmZCwgY250X2J5dGVzLCBlcnJwKQorcmVhZF9jbnRfc3RyaW5nKGZkLCBjbnRfYnl0ZXMsIGNudHApCiAgICAgRklMRQkqZmQ7CiAgICAgaW50CQljbnRfYnl0ZXM7Ci0gICAgaW50CQkqZXJycDsKKyAgICBpbnQJCSpjbnRwOwogewogICAgIGludAkJY250ID0gMDsKICAgICBpbnQJCWk7CkBAIC0yMTczLDE4ICsyMTg5LDIwIEBACiAgICAgaWYgKGNudCA8IDApCiAgICAgewogCUVNU0coXyhlX3NwZWxsX3RydW5jKSk7Ci0JKmVycnAgPSBGQUlMOworCSpjbnRwID0gLTE7CiAJcmV0dXJuIE5VTEw7CiAgICAgfQorICAgICpjbnRwID0gY250OworICAgIGlmIChjbnQgPT0gMCkKKwlyZXR1cm4gTlVMTDsJICAgIC8qIG5vdGhpbmcgdG8gcmVhZCwgcmV0dXJuIE5VTEwgKi8KIAogICAgIC8qIGFsbG9jYXRlIG1lbW9yeSAqLwogICAgIHN0ciA9IGFsbG9jKCh1bnNpZ25lZCljbnQgKyAxKTsKICAgICBpZiAoc3RyID09IE5VTEwpCiAgICAgewotCSplcnJwID0gRkFJTDsKKwkqY250cCA9IC0xOwogCXJldHVybiBOVUxMOwogICAgIH0KLSAgICAqZXJycCA9IE9LOwogCiAgICAgLyogUmVhZCB0aGUgc3RyaW5nLiAgRG9lc24ndCBjaGVjayBmb3IgdHJ1bmNhdGVkIGZpbGUuICovCiAgICAgZm9yIChpID0gMDsgaSA8IGNudDsgKytpKQpAQCAtMjUxMiw2ICsyNTMwLDggQEAKICAgICBjaGFyX3UJKnA7CiAgICAgaW50CQlyb3VuZDsKICAgICBjaGFyX3UJKnNwZjsKKyAgICBjaGFyX3UJKnVzZV9yZWdpb24gPSBOVUxMOworICAgIGludAkJZG9udF91c2VfcmVnaW9uID0gRkFMU0U7CiAKICAgICBnYV9pbml0MigmZ2EsIHNpemVvZihsYW5ncF9UKSwgMik7CiAgICAgY2xlYXJfbWlkd29yZChidWYpOwpAQCAtMjU0NSw3ICsyNTY1LDE1IEBACiAJCXJlZ2lvbiA9IGxhbmcgKyBsZW4gLSAyOwogCQlsZW4gLT0gMzsKIAkJbGFuZ1tsZW5dID0gTlVMOworCisJCS8qIElmIHRoZSByZWdpb24gZGlmZmVycyBmcm9tIHdoYXQgd2FzIHVzZWQgYmVmb3JlIHRoZW4gZG9uJ3QKKwkJICogdXNlIGl0IGZvciAnc3BlbGxmaWxlJy4gKi8KKwkJaWYgKHVzZV9yZWdpb24gIT0gTlVMTCAmJiBTVFJDTVAocmVnaW9uLCB1c2VfcmVnaW9uKSAhPSAwKQorCQkgICAgZG9udF91c2VfcmVnaW9uID0gVFJVRTsKKwkJdXNlX3JlZ2lvbiA9IHJlZ2lvbjsKIAkgICAgfQorCSAgICBlbHNlCisJCWRvbnRfdXNlX3JlZ2lvbiA9IFRSVUU7CiAKIAkgICAgLyogQ2hlY2sgaWYgd2UgbG9hZGVkIHRoaXMgbGFuZ3VhZ2UgYmVmb3JlLiAqLwogCSAgICBmb3IgKGxwID0gZmlyc3RfbGFuZzsgbHAgIT0gTlVMTDsgbHAgPSBscC0+c2xfbmV4dCkKQEAgLTI1NzYsNyArMjYwNCwxNSBAQAogCQkgICAgYyA9IGZpbmRfcmVnaW9uKGxwLT5zbF9yZWdpb25zLCByZWdpb24pOwogCQkgICAgaWYgKGMgPT0gUkVHSU9OX0FMTCkKIAkJICAgIHsKLQkJCWlmICghbHAtPnNsX2FkZCkKKwkJCWlmIChscC0+c2xfYWRkKQorCQkJeworCQkJICAgIGlmICgqbHAtPnNsX3JlZ2lvbnMgIT0gTlVMKQorCQkJCS8qIFRoaXMgYWRkaXRpb24gZmlsZSBpcyBmb3Igb3RoZXIgcmVnaW9ucy4gKi8KKwkJCQlyZWdpb25fbWFzayA9IDA7CisJCQl9CisJCQllbHNlCisJCQkgICAgLyogVGhpcyBpcyBwcm9iYWJseSBhbiBlcnJvci4gIEdpdmUgYSB3YXJuaW5nIGFuZAorCQkJICAgICAqIGFjY2VwdCB0aGUgd29yZHMgYW55d2F5LiAqLwogCQkJICAgIHNtc2coKGNoYXJfdSAqKQogCQkJCSAgICBfKCJXYXJuaW5nOiByZWdpb24gJXMgbm90IHN1cHBvcnRlZCIpLAogCQkJCQkJCQkgICAgICByZWdpb24pOwpAQCAtMjU4NSwxNSArMjYyMSwxOCBAQAogCQkJcmVnaW9uX21hc2sgPSAxIDw8IGM7CiAJCX0KIAotCQlpZiAoZ2FfZ3JvdygmZ2EsIDEpID09IEZBSUwpCisJCWlmIChyZWdpb25fbWFzayAhPSAwKQogCQl7Ci0JCSAgICBnYV9jbGVhcigmZ2EpOwotCQkgICAgcmV0dXJuIGVfb3V0b2ZtZW07CisJCSAgICBpZiAoZ2FfZ3JvdygmZ2EsIDEpID09IEZBSUwpCisJCSAgICB7CisJCQlnYV9jbGVhcigmZ2EpOworCQkJcmV0dXJuIGVfb3V0b2ZtZW07CisJCSAgICB9CisJCSAgICBMQU5HUF9FTlRSWShnYSwgZ2EuZ2FfbGVuKS0+bHBfc2xhbmcgPSBscDsKKwkJICAgIExBTkdQX0VOVFJZKGdhLCBnYS5nYV9sZW4pLT5scF9yZWdpb24gPSByZWdpb25fbWFzazsKKwkJICAgICsrZ2EuZ2FfbGVuOworCQkgICAgdXNlX21pZHdvcmQobHAsIGJ1Zik7CiAJCX0KLQkJTEFOR1BfRU5UUlkoZ2EsIGdhLmdhX2xlbiktPmxwX3NsYW5nID0gbHA7Ci0JCUxBTkdQX0VOVFJZKGdhLCBnYS5nYV9sZW4pLT5scF9yZWdpb24gPSByZWdpb25fbWFzazsKLQkJKytnYS5nYV9sZW47Ci0JCXVzZV9taWR3b3JkKGxwLCBidWYpOwogCSAgICB9CiAgICAgfQogCkBAIC0yNjQ5LDEwICsyNjg4LDI1IEBACiAJfQogCWlmIChscCAhPSBOVUxMICYmIGdhX2dyb3coJmdhLCAxKSA9PSBPSykKIAl7Ci0JICAgIExBTkdQX0VOVFJZKGdhLCBnYS5nYV9sZW4pLT5scF9zbGFuZyA9IGxwOwotCSAgICBMQU5HUF9FTlRSWShnYSwgZ2EuZ2FfbGVuKS0+bHBfcmVnaW9uID0gUkVHSU9OX0FMTDsKLQkgICAgKytnYS5nYV9sZW47Ci0JICAgIHVzZV9taWR3b3JkKGxwLCBidWYpOworCSAgICByZWdpb25fbWFzayA9IFJFR0lPTl9BTEw7CisJICAgIGlmICh1c2VfcmVnaW9uICE9IE5VTEwgJiYgIWRvbnRfdXNlX3JlZ2lvbikKKwkgICAgeworCQkvKiBmaW5kIHJlZ2lvbiBpbiBzbF9yZWdpb25zICovCisJCWMgPSBmaW5kX3JlZ2lvbihscC0+c2xfcmVnaW9ucywgdXNlX3JlZ2lvbik7CisJCWlmIChjICE9IFJFR0lPTl9BTEwpCisJCSAgICByZWdpb25fbWFzayA9IDEgPDwgYzsKKwkJZWxzZSBpZiAoKmxwLT5zbF9yZWdpb25zICE9IE5VTCkKKwkJICAgIC8qIFRoaXMgc3BlbGwgZmlsZSBpcyBmb3Igb3RoZXIgcmVnaW9ucy4gKi8KKwkJICAgIHJlZ2lvbl9tYXNrID0gMDsKKwkgICAgfQorCisJICAgIGlmIChyZWdpb25fbWFzayAhPSAwKQorCSAgICB7CisJCUxBTkdQX0VOVFJZKGdhLCBnYS5nYV9sZW4pLT5scF9zbGFuZyA9IGxwOworCQlMQU5HUF9FTlRSWShnYSwgZ2EuZ2FfbGVuKS0+bHBfcmVnaW9uID0gcmVnaW9uX21hc2s7CisJCSsrZ2EuZ2FfbGVuOworCQl1c2VfbWlkd29yZChscCwgYnVmKTsKKwkgICAgfQogCX0KICAgICB9CiAKQEAgLTI2OTcsNiArMjc1MSw5IEBACiB7CiAgICAgY2hhcl91CSpwOwogCisgICAgaWYgKGxwLT5zbF9taWR3b3JkID09IE5VTEwpCSAgICAvKiB0aGVyZSBhcmVuJ3QgYW55ICovCisJcmV0dXJuOworCiAgICAgZm9yIChwID0gbHAtPnNsX21pZHdvcmQ7ICpwICE9IE5VTDsgKQogI2lmZGVmIEZFQVRfTUJZVEUKIAlpZiAoaGFzX21ieXRlKQpAQCAtMzc5OSw3ICszODU2LDcgQEAKIAkgICAgICogZm9yIHJhcmUgd29yZCAoaWYgZGVmaW5lZCkuICovCiAJICAgIGlmIChhZmZpbGUtPmFmX2tlcCAhPSBOVUwKIAkJICAgICYmIHZpbV9zdHJjaHIoYWZmbGlzdCwgYWZmaWxlLT5hZl9rZXApICE9IE5VTEwpCi0JCWZsYWdzIHw9IFdGX0tFRVBDQVA7CisJCWZsYWdzIHw9IFdGX0tFRVBDQVAgfCBXRl9GSVhDQVA7CiAJICAgIGlmIChhZmZpbGUtPmFmX3JhciAhPSBOVUwKIAkJICAgICYmIHZpbV9zdHJjaHIoYWZmbGlzdCwgYWZmaWxlLT5hZl9yYXIpICE9IE5VTEwpCiAJCWZsYWdzIHw9IFdGX1JBUkU7CkBAIC00MTUwLDYgKzQyMDcsOSBAQAogCQkgICAgewogCQkJc3Bpbi0+c2lfcmVnaW9uX2NvdW50ID0gU1RSTEVOKGxpbmUpIC8gMjsKIAkJCVNUUkNQWShzcGluLT5zaV9yZWdpb25fbmFtZSwgbGluZSk7CisKKwkJCS8qIEFkanVzdCB0aGUgbWFzayBmb3IgYSB3b3JkIHZhbGlkIGluIGFsbCByZWdpb25zLiAqLworCQkJc3Bpbi0+c2lfcmVnaW9uID0gKDEgPDwgc3Bpbi0+c2lfcmVnaW9uX2NvdW50KSAtIDE7CiAJCSAgICB9CiAJCX0KIAkJY29udGludWU7CkBAIC00MTcxLDcgKzQyMzEsNyBAQAogCSAgICB3aGlsZSAoKnAgIT0gTlVMKQogCSAgICB7CiAJCWlmICgqcCA9PSAnPScpCQkvKiBrZWVwLWNhc2Ugd29yZCAqLwotCQkgICAgZmxhZ3MgfD0gV0ZfS0VFUENBUDsKKwkJICAgIGZsYWdzIHw9IFdGX0tFRVBDQVAgfCBXRl9GSVhDQVA7CiAJCWVsc2UgaWYgKCpwID09ICchJykJLyogQmFkLCBiYWQsIHdpY2tlZCB3b3JkLiAqLwogCQkgICAgZmxhZ3MgfD0gV0ZfQkFOTkVEOwogCQllbHNlIGlmICgqcCA9PSAnPycpCS8qIFJhcmUgd29yZC4gKi8KQEAgLTU2MDQsMzQgKzU2NjQsMzkgQEAKICAqIFNldCB0aGUgc3BlbGwgY2hhcmFjdGVyIHRhYmxlcyBmcm9tIHN0cmluZ3MgaW4gdGhlIC5zcGwgZmlsZS4KICAqLwogICAgIHN0YXRpYyBpbnQKLXNldF9zcGVsbF9jaGFyZmxhZ3MoZmxhZ3MsIHVwcCkKK3NldF9zcGVsbF9jaGFyZmxhZ3MoZmxhZ3MsIGNudCwgZm9sKQogICAgIGNoYXJfdQkqZmxhZ3M7Ci0gICAgY2hhcl91CSp1cHA7CisgICAgaW50CQljbnQ7CSAgICAvKiBsZW5ndGggb2YgImZsYWdzIiAqLworICAgIGNoYXJfdQkqZm9sOwogewogICAgIC8qIFdlIGJ1aWxkIHRoZSBuZXcgdGFibGVzIGhlcmUgZmlyc3QsIHNvIHRoYXQgd2UgY2FuIGNvbXBhcmUgd2l0aCB0aGUKICAgICAgKiBwcmV2aW91cyBvbmUuICovCiAgICAgc3BlbGx0YWJfVAluZXdfc3Q7CiAgICAgaW50CQlpOwotICAgIGNoYXJfdQkqcCA9IHVwcDsKKyAgICBjaGFyX3UJKnAgPSBmb2w7CiAgICAgaW50CQljOwogCiAgICAgY2xlYXJfc3BlbGxfY2hhcnRhYigmbmV3X3N0KTsKIAotICAgIGZvciAoaSA9IDA7IGZsYWdzW2ldICE9IE5VTDsgKytpKQorICAgIGZvciAoaSA9IDA7IGkgPCAxMjg7ICsraSkKICAgICB7Ci0JbmV3X3N0LnN0X2lzd1tpICsgMTI4XSA9IChmbGFnc1tpXSAmIENGX1dPUkQpICE9IDA7Ci0JbmV3X3N0LnN0X2lzdVtpICsgMTI4XSA9IChmbGFnc1tpXSAmIENGX1VQUEVSKSAhPSAwOworCWlmIChpIDwgY250KQorCXsKKwkgICAgbmV3X3N0LnN0X2lzd1tpICsgMTI4XSA9IChmbGFnc1tpXSAmIENGX1dPUkQpICE9IDA7CisJICAgIG5ld19zdC5zdF9pc3VbaSArIDEyOF0gPSAoZmxhZ3NbaV0gJiBDRl9VUFBFUikgIT0gMDsKKwl9CiAKLQlpZiAoKnAgPT0gTlVMKQotCSAgICByZXR1cm4gRkFJTDsKKwlpZiAoKnAgIT0gTlVMKQorCXsKICNpZmRlZiBGRUFUX01CWVRFCi0JYyA9IG1iX3B0cjJjaGFyX2FkdigmcCk7CisJICAgIGMgPSBtYl9wdHIyY2hhcl9hZHYoJnApOwogI2Vsc2UKLQljID0gKnArKzsKKwkgICAgYyA9ICpwKys7CiAjZW5kaWYKLQluZXdfc3Quc3RfZm9sZFtpICsgMTI4XSA9IGM7Ci0JaWYgKGkgKyAxMjggIT0gYyAmJiBuZXdfc3Quc3RfaXN1W2kgKyAxMjhdICYmIGMgPCAyNTYpCi0JICAgIG5ld19zdC5zdF91cHBlcltjXSA9IGkgKyAxMjg7CisJICAgIG5ld19zdC5zdF9mb2xkW2kgKyAxMjhdID0gYzsKKwkgICAgaWYgKGkgKyAxMjggIT0gYyAmJiBuZXdfc3Quc3RfaXN1W2kgKyAxMjhdICYmIGMgPCAyNTYpCisJCW5ld19zdC5zdF91cHBlcltjXSA9IGkgKyAxMjg7CisJfQogICAgIH0KIAogICAgIHJldHVybiBzZXRfc3BlbGxfZmluaXNoKCZuZXdfc3QpOwpAQCAtNzk5Miw2ICs4MDU3LDggQEAKIAkJewogCQkgICAgYnl0cyA9IGxwLT5scF9zbGFuZy0+c2xfa2J5dHM7CiAJCSAgICBpZHhzID0gbHAtPmxwX3NsYW5nLT5zbF9raWR4czsKKwkJICAgIGlmIChieXRzID09IE5VTEwpCSAgICAvKiBubyBrZWVwLWNhc2Ugd29yZHMgKi8KKwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJZGVwdGggPSAwOwpAQCAtODgzNiw2ICs4OTAzLDggQEAKIAogCQkgICAgLyogcmVwbGFjZSBzdHJpbmcgKi8KIAkJICAgIHMgPSBzbXBbbl0uc21fdG87CisJCSAgICBpZiAocyA9PSBOVUxMKQorCQkJcyA9IChjaGFyX3UgKikiIjsKIAkJICAgIHBmID0gc21wW25dLnNtX3J1bGVzOwogCQkgICAgcDAgPSAodmltX3N0cmNocihwZiwgJzwnKSAhPSBOVUxMKSA/IDEgOiAwOwogCQkgICAgaWYgKHAwID09IDEgJiYgeiA9PSAwKQpAQCAtOTEzOCwxOCArOTIwNywyMCBAQAogCQkgICAgaWYgKHAwID09IDEgJiYgeiA9PSAwKQogCQkgICAgewogCQkJLyogcnVsZSB3aXRoICc8JyBpcyB1c2VkICovCi0JCQlpZiAocmVzbGVuID4gMCAmJiAqd3MgIT0gTlVMICYmICh3cmVzW3Jlc2xlbiAtIDFdID09IGMKKwkJCWlmIChyZXNsZW4gPiAwICYmIHdzICE9IE5VTEwgJiYgKndzICE9IE5VTAorCQkJCSYmICh3cmVzW3Jlc2xlbiAtIDFdID09IGMKIAkJCQkJCSAgICB8fCB3cmVzW3Jlc2xlbiAtIDFdID09ICp3cykpCiAJCQkgICAgcmVzbGVuLS07CiAJCQl6MCA9IDE7CiAJCQl6ID0gMTsKIAkJCWswID0gMDsKLQkJCXdoaWxlICgqd3MgIT0gTlVMICYmIHdvcmRbaSArIGswXSAhPSBOVUwpCi0JCQl7Ci0JCQkgICAgd29yZFtpICsgazBdID0gKndzOwotCQkJICAgIGswKys7Ci0JCQkgICAgd3MrKzsKLQkJCX0KKwkJCWlmICh3cyAhPSBOVUxMKQorCQkJICAgIHdoaWxlICgqd3MgIT0gTlVMICYmIHdvcmRbaSArIGswXSAhPSBOVUwpCisJCQkgICAgeworCQkJCXdvcmRbaSArIGswXSA9ICp3czsKKwkJCQlrMCsrOworCQkJCXdzKys7CisJCQkgICAgfQogCQkJaWYgKGsgPiBrMCkKIAkJCSAgICBtY2hfbWVtbW92ZSh3b3JkICsgaSArIGswLCB3b3JkICsgaSArIGssCiAJCQkJICAgIHNpemVvZihpbnQpICogKFNUUkxFTih3b3JkICsgaSArIGspICsgMSkpOwpAQCAtOTE2MiwxNCArOTIzMywxOSBAQAogCQkJLyogbm8gJzwnIHJ1bGUgdXNlZCAqLwogCQkJaSArPSBrIC0gMTsKIAkJCXogPSAwOwotCQkJd2hpbGUgKCp3cyAhPSBOVUwgJiYgd3NbMV0gIT0gTlVMICYmIHJlc2xlbiA8IE1BWFdMRU4pCi0JCQl7Ci0JCQkgICAgaWYgKHJlc2xlbiA9PSAwIHx8IHdyZXNbcmVzbGVuIC0gMV0gIT0gKndzKQotCQkJCXdyZXNbcmVzbGVuKytdID0gKndzOwotCQkJICAgIHdzKys7Ci0JCQl9CisJCQlpZiAod3MgIT0gTlVMTCkKKwkJCSAgICB3aGlsZSAoKndzICE9IE5VTCAmJiB3c1sxXSAhPSBOVUwKKwkJCQkJCQkgICYmIHJlc2xlbiA8IE1BWFdMRU4pCisJCQkgICAgeworCQkJCWlmIChyZXNsZW4gPT0gMCB8fCB3cmVzW3Jlc2xlbiAtIDFdICE9ICp3cykKKwkJCQkgICAgd3Jlc1tyZXNsZW4rK10gPSAqd3M7CisJCQkJd3MrKzsKKwkJCSAgICB9CiAJCQkvKiBuZXcgImFjdHVhbCBsZXR0ZXIiICovCi0JCQljID0gKndzOworCQkJaWYgKHdzID09IE5VTEwpCisJCQkgICAgYyA9IE5VTDsKKwkJCWVsc2UKKwkJCSAgICBjID0gKndzOwogCQkJaWYgKHN0cnN0cigoY2hhciAqKXMsICJeXiIpICE9IE5VTEwpCiAJCQl7CiAJCQkgICAgaWYgKGMgIT0gTlVMKQpAQCAtOTcyMiw3ICs5Nzk4LDggQEAKICAgICBlbHNlCiAgICAgewogCXAgPSB3b3JkOwotCWlmIChyb3VuZCA9PSAyICYmIChjYXB0eXBlKHdvcmQsIE5VTEwpICYgV0ZfS0VFUENBUCkgPT0gMCkKKwlpZiAocm91bmQgPT0gMiAmJiAoKGNhcHR5cGUod29yZCwgTlVMTCkgJiBXRl9LRUVQQ0FQKSA9PSAwCisJCQkJCQkgfHwgKGZsYWdzICYgV0ZfRklYQ0FQKSAhPSAwKSkKIAkgICAga2VlcGNhcCA9IFRSVUU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9NYWtlX2FtaWdhLm1hayBiL3NyYy90ZXN0ZGlyL01ha2VfYW1pZ2EubWFrCmluZGV4IGNmZTIxMzQuLjFjOWQ0MjIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0ZGlyL01ha2VfYW1pZ2EubWFrCisrKyBiL3NyYy90ZXN0ZGlyL01ha2VfYW1pZ2EubWFrCkBAIC0yNCw3ICsyNCw3IEBACiAJCXRlc3QzOC5vdXQgdGVzdDM5Lm91dCB0ZXN0NDAub3V0IHRlc3Q0MS5vdXQgdGVzdDQyLm91dCBcCiAJCXRlc3Q0My5vdXQgdGVzdDQ0Lm91dCB0ZXN0NDUub3V0IHRlc3Q0Ni5vdXQgdGVzdDQ3Lm91dCBcCiAJCXRlc3Q0OC5vdXQgdGVzdDUxLm91dCB0ZXN0NTMub3V0IHRlc3Q1NC5vdXQgdGVzdDU1Lm91dCBcCi0JCXRlc3Q1Ni5vdXQgdGVzdDU3Lm91dAorCQl0ZXN0NTYub3V0IHRlc3Q1Ny5vdXQgdGVzdDU4Lm91dAogCiAuU1VGRklYRVM6IC5pbiAub3V0CiAKQEAgLTEwMSwzICsxMDEsNCBAQAogdGVzdDU1Lm91dDogdGVzdDU1LmluCiB0ZXN0NTYub3V0OiB0ZXN0NTYuaW4KIHRlc3Q1Ny5vdXQ6IHRlc3Q1Ny5pbgordGVzdDU4Lm91dDogdGVzdDU4LmluCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9NYWtlX2Rvcy5tYWsgYi9zcmMvdGVzdGRpci9NYWtlX2Rvcy5tYWsKaW5kZXggNmNhMWFjYy4uMWIzYzc3MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3RkaXIvTWFrZV9kb3MubWFrCisrKyBiL3NyYy90ZXN0ZGlyL01ha2VfZG9zLm1hawpAQCAtMTgsNyArMTgsNyBAQAogCQl0ZXN0MzUub3V0IHRlc3QzNi5vdXQgdGVzdDQzLm91dCBcCiAJCXRlc3Q0NC5vdXQgdGVzdDQ1Lm91dCB0ZXN0NDYub3V0IHRlc3Q0Ny5vdXQgXAogCQl0ZXN0NDgub3V0IHRlc3Q1MS5vdXQgdGVzdDUzLm91dCB0ZXN0NTQub3V0IFwKLQkJdGVzdDU1Lm91dCB0ZXN0NTYub3V0IHRlc3Q1Ny5vdXQKKwkJdGVzdDU1Lm91dCB0ZXN0NTYub3V0IHRlc3Q1Ny5vdXQgdGVzdDU4Lm91dAogCiBTQ1JJUFRTID0JdGVzdDMub3V0IHRlc3Q0Lm91dCB0ZXN0NS5vdXQgdGVzdDYub3V0IHRlc3Q3Lm91dCBcCiAJCXRlc3Q4Lm91dCB0ZXN0OS5vdXQgdGVzdDExLm91dCB0ZXN0MTMub3V0IHRlc3QxNC5vdXQgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvTWFrZV9vczIubWFrIGIvc3JjL3Rlc3RkaXIvTWFrZV9vczIubWFrCmluZGV4IDRkMzI5NmMuLmE3NzFlNmEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0ZGlyL01ha2Vfb3MyLm1haworKysgYi9zcmMvdGVzdGRpci9NYWtlX29zMi5tYWsKQEAgLTI0LDcgKzI0LDcgQEAKIAkJdGVzdDM4Lm91dCB0ZXN0Mzkub3V0IHRlc3Q0MC5vdXQgdGVzdDQxLm91dCB0ZXN0NDIub3V0IFwKIAkJdGVzdDQzLm91dCB0ZXN0NDQub3V0IHRlc3Q0NS5vdXQgdGVzdDQ2Lm91dCB0ZXN0NDcub3V0IFwKIAkJdGVzdDQ4Lm91dCB0ZXN0NTEub3V0IHRlc3Q1My5vdXQgdGVzdDU0Lm91dCB0ZXN0NTUub3V0IFwKLQkJdGVzdDU2Lm91dCB0ZXN0NTcub3V0CisJCXRlc3Q1Ni5vdXQgdGVzdDU3Lm91dCB0ZXN0NTgub3V0CiAKIC5TVUZGSVhFUzogLmluIC5vdXQKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvTWFrZV92bXMubW1zIGIvc3JjL3Rlc3RkaXIvTWFrZV92bXMubW1zCmluZGV4IDdkZjFkNTAuLjFjYTFlOGIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0ZGlyL01ha2Vfdm1zLm1tcworKysgYi9zcmMvdGVzdGRpci9NYWtlX3Ztcy5tbXMKQEAgLTQsNyArNCw3IEBACiAjIEF1dGhvcnM6CVpvbHRhbiBBcnBhZGZmeSwgPGFycGFkZmZ5QHBvbGFyaG9tZS5jb20+CiAjCQlTYW5kb3IgS29wYW55aSwgIDxzYW5kb3Iua29wYW55aUBtYWlsYm94Lmh1PgogIwotIyBMYXN0IGNoYW5nZTogIDIwMDUgTWF5IDE4CisjIExhc3QgY2hhbmdlOiAgMjAwNSBKdWwgMDQKICMKICMgVGhpcyBoYXMgYmVlbiB0ZXN0ZWQgb24gVk1TIDYuMiB0byA3LjIgb24gREVDIEFscGhhIGFuZCBWQVguCiAjIEVkaXQgdGhlIGxpbmVzIGluIHRoZSBDb25maWd1cmF0aW9uIHNlY3Rpb24gYmVsb3cgdG8gc2VsZWN0LgpAQCAtNTgsNyArNTgsNyBAQAogCSB0ZXN0Mzgub3V0IHRlc3QzOS5vdXQgdGVzdDQwLm91dCB0ZXN0NDEub3V0IHRlc3Q0Mi5vdXQgXAogCSB0ZXN0NDMub3V0IHRlc3Q0NC5vdXQgdGVzdDQ1Lm91dCB0ZXN0NDYub3V0IFwKIAkgdGVzdDQ4Lm91dCB0ZXN0NTEub3V0IHRlc3Q1My5vdXQgdGVzdDU0Lm91dCB0ZXN0NTUub3V0IFwKLQkgdGVzdDU2Lm91dAorCSB0ZXN0NTYub3V0IHRlc3Q1Ny5vdXQgdGVzdDU4Lm91dAogCiAuSUZERUYgV0FOVF9HVUkKIFNDUklQVF9HVUkgPSB0ZXN0MTYub3V0CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9NYWtlZmlsZSBiL3NyYy90ZXN0ZGlyL01ha2VmaWxlCmluZGV4IGRjM2RjY2IuLjdmYTMyNWYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0ZGlyL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0ZGlyL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAJCXRlc3QzOC5vdXQgdGVzdDM5Lm91dCB0ZXN0NDAub3V0IHRlc3Q0MS5vdXQgdGVzdDQyLm91dCBcCiAJCXRlc3Q0My5vdXQgdGVzdDQ0Lm91dCB0ZXN0NDUub3V0IHRlc3Q0Ni5vdXQgdGVzdDQ3Lm91dCBcCiAJCXRlc3Q0OC5vdXQgdGVzdDQ5Lm91dCB0ZXN0NTEub3V0IHRlc3Q1Mi5vdXQgdGVzdDUzLm91dCBcCi0JCXRlc3Q1NC5vdXQgdGVzdDU1Lm91dCB0ZXN0NTYub3V0IHRlc3Q1Ny5vdXQKKwkJdGVzdDU0Lm91dCB0ZXN0NTUub3V0IHRlc3Q1Ni5vdXQgdGVzdDU3Lm91dCB0ZXN0NTgub3V0CiAKIFNDUklQVFNfR1VJID0gdGVzdDE2Lm91dAogCkBAIC00Niw3ICs0Niw3IEBACiAJLXJtIC1yZiBYKiB2aW1pbmZvCiAKIC5pbi5vdXQ6Ci0JLXJtIC1mICQqLmZhaWxlZCB0ZXN0Lm9rIFgqIHZpbWluZm8KKwktcm0gLXJmICQqLmZhaWxlZCB0ZXN0Lm9rIFgqIHZpbWluZm8KIAljcCAkKi5vayB0ZXN0Lm9rCiAJIyBTbGVlcCBhIG1vbWVudCB0byBhdm9pZCB0aGF0IHRoZSB4dGVybSB0aXRsZSBpcyBtZXNzZWQgdXAKIAlALXNsZWVwIC4yCkBAIC01OCw3ICs1OCw4IEBACiAJCSAgZmkgXAogCQllbHNlIGVjaG8gJCogTk8gT1VUUFVUID4+dGVzdC5sb2c7IFwKIAkJZmkiCi0JLXJtIC1yZiBYKiB0ZXN0Lm9rIHZpbWluZm8KKwkjIEtlZXAgdGhlIGZpbGVzIHRvIG1ha2UgZGVidWdnaW5nIGVhc2llci4KKwkjIC1ybSAtcmYgWCogdGVzdC5vayB2aW1pbmZvCiAKIG5vbG9nOgogCS1lY2hvIFRlc3QgcmVzdWx0czogPnRlc3QubG9nCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NTguaW4gYi9zcmMvdGVzdGRpci90ZXN0NTguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNzVhMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q1OC5pbgpAQCAtMCwwICsxLDMyMCBAQAorVGVzdHMgZm9yIHNwZWxsIGNoZWNraW5nLiAgICAgdmltOiBzZXQgZnQ9dmltIDoKKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6IgorOiIgRmlyc3QgZ2VuZXJhdGUgYSAuc3BsIGZpbGUgZnJvbSBhIC5kaWMgYW5kIGEgLmFmZiBmaWxlLgorOnNldCBlbmM9bGF0aW4xCis6L15hZmZzdGFydDEvKzEsL2FmZmVuZDEvLTF3IFh0ZXN0LmFmZgorOi9eZGljc3RhcnQvKzEsL2RpY2VuZC8tMXcgWHRlc3QuZGljCis6bWtzcGVsbCBYdGVzdCBYdGVzdAorOiIKKzoiIHVzZSB0aGF0IHNwZWxsIGZpbGUKKzpzZXQgc3BsPVh0ZXN0LmxhdGluMS5zcGwKKzpzZXQgc3BlbGwKKy9edGVzdDE6Citdc21tOmxldCBzdHIgPSBzcGVsbGJhZHdvcmQoKQorOiRwdXQgPXN0cgorYG06bGV0IGxzdCA9IHNwZWxsc3VnZ2VzdChzdHIsIDQpCis6JHB1dCA9c3RyaW5nKGxzdCkKK2BtXXNtbTpsZXQgc3RyID0gc3BlbGxiYWR3b3JkKCkKKzokcHV0ID1zdHIKK2BtOmxldCBsc3QgPSBzcGVsbHN1Z2dlc3Qoc3RyLCAyKQorOiRwdXQgPXN0cmluZyhsc3QpCitgbV1zbW06bGV0IHN0ciA9IHNwZWxsYmFkd29yZCgpCis6JHB1dCA9c3RyCitgbTpsZXQgbHN0ID0gc3BlbGxzdWdnZXN0KHN0ciwgMikKKzokcHV0ID1zdHJpbmcobHN0KQorYG1dc21tOmxldCBzdHIgPSBzcGVsbGJhZHdvcmQoKQorOiRwdXQgPXN0cgorYG06bGV0IGxzdCA9IHNwZWxsc3VnZ2VzdChzdHIsIDIpCis6JHB1dCA9c3RyaW5nKGxzdCkKK2BtXXNtbTpsZXQgc3RyID0gc3BlbGxiYWR3b3JkKCkKKzokcHV0ID1zdHIKK2BtOmxldCBsc3QgPSBzcGVsbHN1Z2dlc3Qoc3RyLCAyKQorOiRwdXQgPXN0cmluZyhsc3QpCitgbV1zbW06bGV0IHN0ciA9IHNwZWxsYmFkd29yZCgpCis6JHB1dCA9c3RyCitgbTpsZXQgbHN0ID0gc3BlbGxzdWdnZXN0KHN0ciwgMikKKzokcHV0ID1zdHJpbmcobHN0KQorOnNwZWxsZHVtcAorMUd5RzpxCis6JHB1dAorOiRwdXQgPXNvdW5kZm9sZCgnZ29vYmxlZHlnb29vaycpCis6JHB1dCA9c291bmRmb2xkKCdr829w63L/bvR2ZW4nKQorOiRwdXQgPXNvdW5kZm9sZCgnb2V2ZXJsb29zIGdlendldHMgZWRhbGUnKQorOiIKKzoiIGFuZCBub3cgd2l0aCBTQUwgaW5zdGVhZCBvZiBTT0ZPIGl0ZW1zOyB0ZXN0IGF1dG9tYXRpYyByZWxvYWRpbmcKK2dnOi9eYWZmc3RhcnQyLysxLC9eYWZmZW5kMi8tMXchIFh0ZXN0LmFmZgorOm1rc3BlbGwhIFh0ZXN0IFh0ZXN0Cis6JHB1dCA9c291bmRmb2xkKCdnb29ibGVkeWdvb29rJykKKzokcHV0ID1zb3VuZGZvbGQoJ2vzb3Drcv9u9HZlbicpCis6JHB1dCA9c291bmRmb2xkKCdvZXZlcmxvb3MgZ2V6d2V0cyBlZGFsZScpCis6IgorOiIgYWxzbyB1c2UgYW4gYWRkaXRpb24gZmlsZQorZ2c6L15hZGRzdGFydC8rMSwvXmFkZGVuZC8tMXchIFh0ZXN0LmxhdGluMS5hZGQKKzpta3NwZWxsISBYdGVzdC5sYXRpbjEuYWRkLnNwbCBYdGVzdC5sYXRpbjEuYWRkCis6c2V0IHNwbD1lbgorOnNldCBzcGVsbGZpbGU9WHRlc3QubGF0aW4xLmFkZAorL150ZXN0MjoKK11zOmxldCBzdHIgPSBzcGVsbGJhZHdvcmQoKQorOiRwdXQgPXN0cgorOnNldCBzcGw9ZW5fdXMKKy9edGVzdDI6Citdc21tOmxldCBzdHIgPSBzcGVsbGJhZHdvcmQoKQorOiRwdXQgPXN0cgorYG1dczpsZXQgc3RyID0gc3BlbGxiYWR3b3JkKCkKKzokcHV0ID1zdHIKKzpzZXQgc3BsPWVuX2diCisvXnRlc3QyOgorXXNtbTpsZXQgc3RyID0gc3BlbGxiYWR3b3JkKCkKKzokcHV0ID1zdHIKK2BtXXM6bGV0IHN0ciA9IHNwZWxsYmFkd29yZCgpCis6JHB1dCA9c3RyCis6c2V0IHNwbD1lbl9uegorL150ZXN0MjoKK11zbW06bGV0IHN0ciA9IHNwZWxsYmFkd29yZCgpCis6JHB1dCA9c3RyCitgbV1zOmxldCBzdHIgPSBzcGVsbGJhZHdvcmQoKQorOiRwdXQgPXN0cgorOnNldCBzcGw9ZW5fY2EKKy9edGVzdDI6Citdc21tOmxldCBzdHIgPSBzcGVsbGJhZHdvcmQoKQorOiRwdXQgPXN0cgorYG1dczpsZXQgc3RyID0gc3BlbGxiYWR3b3JkKCkKKzokcHV0ID1zdHIKKzoiCitnZzovXnRlc3Qgb3V0cHV0Oi8sJHdxISB0ZXN0Lm91dAorRU5EVEVTVAorCithZmZzdGFydDEKK1NFVCBJU084ODU5LTEKK1RSWSBlc2lhbnJ0b2xjZHVnbXBoYnlmdmt3amtxeHot6+no6u/u5ODi9vz7J0VTSUFOUlRPTENEVUdNUEhCWUZWS1dKS1FYWgorCitGT0wgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t//CitMT1cgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t//CitVUFAgIMDBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3t//CisKK1NPRk9GUk9NIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVrg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7f/8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3r8KK1NPRk9UTyAgIGViY3RlZmdoZWprbG5uZXBrcnN0ZXZ2a2VzZWJjdGVmZ2hlamtsbm5lcGtyc3RldnZrZXNlZWVlZWVlY2VlZWVlZWVlZG5lZWVlZWVlZWVlZXBzZWVlZWVlZWVjZWVlZWVlZWVkbmVlZWVlZWVlZWVlcD8KKworTUlEV09SRAknLQorCitLRVAgPQorUkFSID8KK0JBRCAhCisKK05PU1BMSVRTVUdTCisKK1BGWCBJIE4gMQorUEZYIEkgMCBpbiAuCisKK1BGWCBPIFkgMQorUEZYIE8gMCBvdXQgLgorCitTRlggUyBZIDIKK1NGWCBTIDAgcyBbXnNdCitTRlggUyAwIGVzIHMKKworUkVQIDMKK1JFUCBnIGNoCitSRVAgY2ggZworUkVQIHN2cCBzLnYucC4KKworTUFQIDkKK01BUCBh4OHi4+TlCitNQVAgZejp6usKK01BUCBp7O3u7worTUFQIG/y8/T19gorTUFQIHX5+vv8CitNQVAgbvEKK01BUCBj5worTUFQIHn//QorTUFQIHPfCithZmZlbmQxCisKK2FmZnN0YXJ0MgorU0VUIElTTzg4NTktMQorVFJZIGVzaWFucnRvbGNkdWdtcGhieWZ2a3dqa3F4ei3r6ejq7+7k4OL2/PsnRVNJQU5SVE9MQ0RVR01QSEJZRlZLV0pLUVhaCisKK0ZPTCAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3/8KK0xPVyAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3/8KK1VQUCAgwMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbY2drb3N3e3/8KKworTUlEV09SRAknLQorCitLRVAgPQorUkFSID8KK0JBRCAhCisKK05PU1BMSVRTVUdTCisKK1BGWCBJIE4gMQorUEZYIEkgMCBpbiAuCisKK1BGWCBPIFkgMQorUEZYIE8gMCBvdXQgLgorCitTRlggUyBZIDIKK1NGWCBTIDAgcyBbXnNdCitTRlggUyAwIGVzIHMKKworUkVQIDMKK1JFUCBnIGNoCitSRVAgY2ggZworUkVQIHN2cCBzLnYucC4KKworTUFQIDkKK01BUCBh4OHi4+TlCitNQVAgZejp6usKK01BUCBp7O3u7worTUFQIG/y8/T19gorTUFQIHX5+vv8CitNQVAgbvEKK01BUCBj5worTUFQIHn//QorTUFQIHPfCisKK1NBTCBBSChBRUlPVVkpLV4gICAgICAgICAqSAorU0FMIEFSKEFFSU9VWSktXiAgICAgICAgICpSCitTQUwgQShIUileICAgICAgICAgICAgICAgKgorU0FMIEFeICAgICAgICAgICAgICAgICAgICoKK1NBTCBBSChBRUlPVVkpLSAgICAgICAgICBICitTQUwgQVIoQUVJT1VZKS0gICAgICAgICAgUgorU0FMIEEoSFIpICAgICAgICAgICAgICAgIF8KK1NBTCDAXiAgICAgICAgICAgICAgICAgICAqCitTQUwgxV4gICAgICAgICAgICAgICAgICAgKgorU0FMIEJCLSAgICAgICAgICAgICAgICAgIF8KK1NBTCBCICAgICAgICAgICAgICAgICAgICBCCitTQUwgQ1EtICAgICAgICAgICAgICAgICAgXworU0FMIENJQSAgICAgICAgICAgICAgICAgIFgKK1NBTCBDSCAgICAgICAgICAgICAgICAgICBYCitTQUwgQyhFSVkpLSAgICAgICAgICAgICAgUworU0FMIENLICAgICAgICAgICAgICAgICAgIEsKK1NBTCBDT1VHSF4gICAgICAgICAgICAgICBLRgorU0FMIENDPCAgICAgICAgICAgICAgICAgIEMKK1NBTCBDICAgICAgICAgICAgICAgICAgICBLCitTQUwgREcoRUlZKSAgICAgICAgICAgICAgSworU0FMIERELSAgICAgICAgICAgICAgICAgIF8KK1NBTCBEICAgICAgICAgICAgICAgICAgICBUCitTQUwgyTwgICAgICAgICAgICAgICAgICAgRQorU0FMIEVIKEFFSU9VWSktXiAgICAgICAgICpICitTQUwgRVIoQUVJT1VZKS1eICAgICAgICAgKlIKK1NBTCBFKEhSKV4gICAgICAgICAgICAgICAqCitTQUwgRU5PVUdIXiQgICAgICAgICAgICAgKk5GCitTQUwgRV4gICAgICAgICAgICAgICAgICAgKgorU0FMIEVIKEFFSU9VWSktICAgICAgICAgIEgKK1NBTCBFUihBRUlPVVkpLSAgICAgICAgICBSCitTQUwgRShIUikgICAgICAgICAgICAgICAgXworU0FMIEZGLSAgICAgICAgICAgICAgICAgIF8KK1NBTCBGICAgICAgICAgICAgICAgICAgICBGCitTQUwgR05eICAgICAgICAgICAgICAgICAgTgorU0FMIEdOJCAgICAgICAgICAgICAgICAgIE4KK1NBTCBHTlMkICAgICAgICAgICAgICAgICBOUworU0FMIEdORUQkICAgICAgICAgICAgICAgIE4KK1NBTCBHSChBRUlPVVkpLSAgICAgICAgICBLCitTQUwgR0ggICAgICAgICAgICAgICAgICAgXworU0FMIEdHOSAgICAgICAgICAgICAgICAgIEsKK1NBTCBHICAgICAgICAgICAgICAgICAgICBLCitTQUwgSCAgICAgICAgICAgICAgICAgICAgSAorU0FMIElIKEFFSU9VWSktXiAgICAgICAgICpICitTQUwgSVIoQUVJT1VZKS1eICAgICAgICAgKlIKK1NBTCBJKEhSKV4gICAgICAgICAgICAgICAqCitTQUwgSV4gICAgICAgICAgICAgICAgICAgKgorU0FMIElORzYgICAgICAgICAgICAgICAgIE4KK1NBTCBJSChBRUlPVVkpLSAgICAgICAgICBICitTQUwgSVIoQUVJT1VZKS0gICAgICAgICAgUgorU0FMIEkoSFIpICAgICAgICAgICAgICAgIF8KK1NBTCBKICAgICAgICAgICAgICAgICAgICBLCitTQUwgS05eICAgICAgICAgICAgICAgICAgTgorU0FMIEtLLSAgICAgICAgICAgICAgICAgIF8KK1NBTCBLICAgICAgICAgICAgICAgICAgICBLCitTQUwgTEFVR0heICAgICAgICAgICAgICAgTEYKK1NBTCBMTC0gICAgICAgICAgICAgICAgICBfCitTQUwgTCAgICAgICAgICAgICAgICAgICAgTAorU0FMIE1CJCAgICAgICAgICAgICAgICAgIE0KK1NBTCBNTSAgICAgICAgICAgICAgICAgICBNCitTQUwgTSAgICAgICAgICAgICAgICAgICAgTQorU0FMIE5OLSAgICAgICAgICAgICAgICAgIF8KK1NBTCBOICAgICAgICAgICAgICAgICAgICBOCitTQUwgT0goQUVJT1VZKS1eICAgICAgICAgKkgKK1NBTCBPUihBRUlPVVkpLV4gICAgICAgICAqUgorU0FMIE8oSFIpXiAgICAgICAgICAgICAgICoKK1NBTCBPXiAgICAgICAgICAgICAgICAgICAqCitTQUwgT0goQUVJT1VZKS0gICAgICAgICAgSAorU0FMIE9SKEFFSU9VWSktICAgICAgICAgIFIKK1NBTCBPKEhSKSAgICAgICAgICAgICAgICBfCitTQUwgUEggICAgICAgICAgICAgICAgICAgRgorU0FMIFBOXiAgICAgICAgICAgICAgICAgIE4KK1NBTCBQUC0gICAgICAgICAgICAgICAgICBfCitTQUwgUCAgICAgICAgICAgICAgICAgICAgUAorU0FMIFEgICAgICAgICAgICAgICAgICAgIEsKK1NBTCBSSF4gICAgICAgICAgICAgICAgICBSCitTQUwgUk9VR0heICAgICAgICAgICAgICAgUkYKK1NBTCBSUi0gICAgICAgICAgICAgICAgICBfCitTQUwgUiAgICAgICAgICAgICAgICAgICAgUgorU0FMIFNDSChFT1UpLSAgICAgICAgICAgIFNLCitTQUwgU0MoSUVZKS0gICAgICAgICAgICAgUworU0FMIFNIICAgICAgICAgICAgICAgICAgIFgKK1NBTCBTSShBTyktICAgICAgICAgICAgICBYCitTQUwgU1MtICAgICAgICAgICAgICAgICAgXworU0FMIFMgICAgICAgICAgICAgICAgICAgIFMKK1NBTCBUSShBTyktICAgICAgICAgICAgICBYCitTQUwgVEggICAgICAgICAgICAgICAgICAgQAorU0FMIFRDSC0tICAgICAgICAgICAgICAgIF8KK1NBTCBUT1VHSF4gICAgICAgICAgICAgICBURgorU0FMIFRULSAgICAgICAgICAgICAgICAgIF8KK1NBTCBUICAgICAgICAgICAgICAgICAgICBUCitTQUwgVUgoQUVJT1VZKS1eICAgICAgICAgKkgKK1NBTCBVUihBRUlPVVkpLV4gICAgICAgICAqUgorU0FMIFUoSFIpXiAgICAgICAgICAgICAgICoKK1NBTCBVXiAgICAgICAgICAgICAgICAgICAqCitTQUwgVUgoQUVJT1VZKS0gICAgICAgICAgSAorU0FMIFVSKEFFSU9VWSktICAgICAgICAgIFIKK1NBTCBVKEhSKSAgICAgICAgICAgICAgICBfCitTQUwgVl4gICAgICAgICAgICAgICAgICAgVworU0FMIFYgICAgICAgICAgICAgICAgICAgIEYKK1NBTCBXUl4gICAgICAgICAgICAgICAgICBSCitTQUwgV0heICAgICAgICAgICAgICAgICAgVworU0FMIFcoQUVJT1UpLSAgICAgICAgICAgIFcKK1NBTCBYXiAgICAgICAgICAgICAgICAgICBTCitTQUwgWCAgICAgICAgICAgICAgICAgICAgS1MKK1NBTCBZKEFFSU9VKS0gICAgICAgICAgICBZCitTQUwgWlotICAgICAgICAgICAgICAgICAgXworU0FMIFogICAgICAgICAgICAgICAgICAgIFMKK2FmZmVuZDIKKworZGljc3RhcnQKKzEyMzQ1NgordGVzdAorIyBjb21tZW50Cit3cm9uZworQ29tbWVudAorT0sKK3VrCitwdXQvSVNPCit0aGUgZW5kCitkZW9sCitk6fRyCitkaWNlbmQKKworYWRkc3RhcnQKKy9yZWdpb25zPXVzZ2JuegorZWxlcXVpbnQvMgorZWxla3dpbnQvMworYWRkZW5kCisKK3Rlc3QxOgoraW5wdXRzCXdyb25nCitjb21tZW50CXdyb25nCitwdXRzCU9LCitvawl3cm9uZworT2sJd3JvbmcKK3RoZSBlbmQuICB0ZXN0IHdyb25nCitk6fRsCisKK3Rlc3QyOgorZWxlcXVpbnQgdGVzdCBlbGVrd2ludCB0ZXN0IGVsZWt3ZW50IGFzZGYKKworCit0ZXN0IG91dHB1dDoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q1OC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q1OC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGU4NDg0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDU4Lm9rCkBAIC0wLDAgKzEsNDIgQEAKK3Rlc3Qgb3V0cHV0OgoraW5wdXRzCitbJ2lucHV0JywgJ3B1dHMnLCAnb3V0cHV0cycsICdwdXQnXQorY29tbWVudAorWydDb21tZW50J10KK29rCitbJ09LJywgJ3VrJ10KK09rCitbJ09LJywgJ1VrJ10KK3Rlc3QKK1sndGVzdCcsICdUZXN0J10KK2Tp9GwKK1snZGVvbCcsICdk6fRyJ10KKyMgZmlsZTogWHRlc3QubGF0aW4xLnNwbAorQ29tbWVudAorZGVvbAorZOn0cgoraW5wdXQKK09LCitvdXRwdXQKK291dHB1dHMKK3B1dAorcHV0cwordGVzdAordGhlIGVuZAordWsKK3dyb25nCitnZWJsZXRlZ2VrCitrZXBlcmVuZXZlbgorZXZlcmxlcyBnZXN2ZXRzIGV0ZWxlCitrYmx0eWtrCitrcHJuZm4KKypmbHMga3N3dHMgdGwKK2VsZWt3ZW50CitlbGVxdWludAorZWxla3dpbnQKK2VsZWt3aW50CitlbGVrd2VudAorZWxlcXVpbnQKK2VsZWt3ZW50CitlbGVxdWludAorZWxla3dpbnQKZGlmZiAtLWdpdCBhL3NyYy92ZXJzaW9uLmggYi9zcmMvdmVyc2lvbi5oCmluZGV4IGUxNjhkYjIuLjk2NTZiNWEgMTAwNjQ0Ci0tLSBhL3NyYy92ZXJzaW9uLmgKKysrIGIvc3JjL3ZlcnNpb24uaApAQCAtMzYsNSArMzYsNSBAQAogI2RlZmluZSBWSU1fVkVSU0lPTl9OT0RPVAkidmltNzBhYSIKICNkZWZpbmUgVklNX1ZFUlNJT05fU0hPUlQJIjcuMGFhIgogI2RlZmluZSBWSU1fVkVSU0lPTl9NRURJVU0JIjcuMGFhIEFMUEhBIgotI2RlZmluZSBWSU1fVkVSU0lPTl9MT05HCSJWSU0gLSBWaSBJTXByb3ZlZCA3LjBhYSBBTFBIQSAoMjAwNSBKdWwgMykiCi0jZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkdfREFURQkiVklNIC0gVmkgSU1wcm92ZWQgNy4wYWEgQUxQSEEgKDIwMDUgSnVsIDMsIGNvbXBpbGVkICIKKyNkZWZpbmUgVklNX1ZFUlNJT05fTE9ORwkiVklNIC0gVmkgSU1wcm92ZWQgNy4wYWEgQUxQSEEgKDIwMDUgSnVsIDQpIgorI2RlZmluZSBWSU1fVkVSU0lPTl9MT05HX0RBVEUJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGFhIEFMUEhBICgyMDA1IEp1bCA0LCBjb21waWxlZCAiCg==