ZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY3B1L20wL01ha2VmaWxlIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9jcHUvbTAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4MTkwYgotLS0gL2Rldi9udWxsCisrKyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY3B1L20wL01ha2VmaWxlCkBAIC0wLDAgKzEsNDAgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDMKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQ1BVKS5hCisKK1NUQVJUCT0gc3RhcnQubworT0JKUwk9IGNwdS5vIGNsay5vICB1ZGl2bW9kLm8gdWRpdm1vZHNpNC5vIGRpdm1vZC5vCisKK2FsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKKworJChMSUIpOgkkKE9CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY3B1L20wL2Nsay5jIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9jcHUvbTAvY2xrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmNDk2NwotLS0gL2Rldi9udWxsCisrKyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY3B1L20wL2Nsay5jCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMTYgWlhJQyBJbmMuCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC90b3BfY2xvY2suaD4KKyNpbmNsdWRlIDxib2FyZC5oPgorCisKK3ZvaWQgY2xrX2luaXQgKHZvaWQpCit7CisJX19SRUcoTVBMTF9DRkcwX1JFRykgPSAweDA4MDQwYzExOyAKKwkvL19fUkVHKEFQTExfQ0ZHMF9SRUcpID0gMHgwODA4MTAwOTsgLypBUExMICw4MzJNKi8KKwlfX1JFRyhVUExMX0NGRzBfUkVHKSA9IDB4MDgzNDc4MTE7IAorCV9fUkVHKEdQTExfQ0ZHMF9SRUcpID0gMHgwODM0N2QyOTsgCisJLy9fX1JFRyhEUExMX0NGRzBfUkVHKSA9IDB4MGEwNDBjMTk7IC8qRFBMTCwyNk0qLworCisJLy9fX1JFRyhQTExfTE9DS19DTlQwKSA9IDB4MDNlMDAzZTA7IC8qUExMX0xPQ0tfQ05UMCovCisJLy9fX1JFRyhQTExfTE9DS19DTlQxKSA9IDB4MDNlMDAzZTA7IC8qUExMX0xPQ0tfQ05UMSovCisJLy9fX1JFRyhSTUNPUkVfQ0xLX0NGR19SRUcpID0gMHg4MDAwMDEwMDsgLypybSBhcGIgZGl2IDQqLworICAgIHdoaWxlKCAhKF9fUkVHKE1QTExfQ0ZHMF9SRUcpICYgKDB4MSA8PCAzMCkgKSk7CisgICAgd2hpbGUoICEoX19SRUcoVVBMTF9DRkcwX1JFRykgJiAoMHgxIDw8IDMwKSApKTsKKyAgICB3aGlsZSggIShfX1JFRyhHUExMX0NGRzBfUkVHKSAmICgweDEgPDwgMzApICkpOworCQorCS8vTTAgc2VsZWN0IDEwNE0sIGJpdDAtMSwgMD0xMDQsIDE9MjYsIDI9NzgsIDM9MzJrCisJX19SRUcoTTBfQ09SRV9TRUwpID0gMHgwMDAwMDAwNTsgCisJLy9oc19haGJfY2xrIHNlbGVjdCAxMDRNLCBiaXQ0LTUsIDA9MTA0LCAxPTI2LCAyPTc4LCAzPTMyaworCV9fUkVHKEhTX0FIQl9DTEspID0gMHgwMDAwMDAxMDsgCisKKwlfX1JFRyhNQVRSSVhfQVhJX1NFTCkgPSAweDAwMDEwMDAxOyAvKkFYSSBzZWxlY3QgMTU2TSovCisJX19SRUcoUFNfQ09SRV9TRUwpIAk9IDB4MDAwMDAwMDE7IAkvKlI3IHNlbGVjdCA2MjRNKi8KKwlfX1JFRyhQSFlfQ09SRV9TRUwpID0gMHgwMDAwMDAwMTsJLypaU1A4ODAgc2VsZWN0IDQ5MU0qLworCV9fUkVHKEFQX0NPUkVfU0VMKSAJPSAweDAwMDAwMDAxOwkvKkFQIEE1MyBzZWxlY3QgNjI0TSovCisKKwkvL19fUkVHKFJNX01PRF9DTEtTRUwpID0gMHg4MDAwMDAzNDsvKmhpZ2ggc3BlZWQgYWNsayAxNTZNKi8JCit9CisKZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY3B1L20wL2NvbmZpZy5tayBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY3B1L20wL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjBlZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9jcHUvbTAvY29uZmlnLm1rCkBAIC0wLDAgKzEsNTAgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAyCisjIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKK1BMQVRGT1JNX1JFTEZMQUdTICs9IC1mbm8tc3RyaWN0LWFsaWFzaW5nICAtZm5vLWNvbW1vbiAKKworUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW1hcmNoPWFybXY2LW0gLW1jcHU9Y29ydGV4LW0wIC1tdHVuZT1jb3J0ZXgtbTAgLW1zb2Z0LWZsb2F0IC1tdGh1bWIKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTdXBwbHkgb3B0aW9ucyBhY2NvcmRpbmcgdG8gY29tcGlsZXIgdmVyc2lvbgorIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjUExBVEZPUk1fQ1BQRkxBR1MgKz0kKGNhbGwgY2Mtb3B0aW9uLC1tYXBjcy0zMiwtbWFiaT1hcGNzLWdudSkgIGdlYW5mZW5nCisKKyMgVHJ5IGlmIEVBQkkgaXMgc3VwcG9ydGVkLCBlbHNlIGZhbGwgYmFjayB0byBvbGQgQVBJLAorIyBpLiBlLiBmb3IgZXhhbXBsZToKKyMgLSB3aXRoIEVMREsgNC4yIChFQUJJIHN1cHBvcnRlZCksIHVzZToKKyMJLW1hYmk9YWFwY3MtbGludXggLW1uby10aHVtYi1pbnRlcndvcmsKKyMgLSB3aXRoIEVMREsgNC4xIChnY2MgNC54LCBubyBFQUJJKSwgdXNlOgorIwktbWFiaT1hcGNzLWdudSAtbW5vLXRodW1iLWludGVyd29yaworIyAtIHdpdGggRUxESyAzLjEgKGdjYyAzLngpLCB1c2U6CisjCS1tYXBjcy0zMiAtbW5vLXRodW1iLWludGVyd29yaworUExBVEZPUk1fQ1BQRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbixcCisJCQkJYWFwY3MtbGludXggLW1uby10aHVtYi1pbnRlcndvcmssXAorCQkJCSQoY2FsbCBjYy1vcHRpb24sXAorCQkJCQktbWFwY3MtMzIsXAorCQkJCQkkKGNhbGwgY2Mtb3B0aW9uLFwKKwkJCQkJCS1tYWJpPWFwY3MtZ251IC1tbm8tdGh1bWItaW50ZXJ3b3JrLFwKKwkJCQkJKVwKKwkJCQkpICQoY2FsbCBjYy1vcHRpb24sLW1uby10aHVtYi1pbnRlcndvcmssKVwKKwkJCSkKK1BMQVRGT1JNX1JFTEZMQUdTICs9JChjYWxsIGNjLW9wdGlvbiwtbXNob3J0LWxvYWQtYnl0ZXMsJChjYWxsIGNjLW9wdGlvbiwtbWFsaWdubWVudC10cmFwcywpKQorCmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2NwdS9tMC9jcHUuYyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY3B1L20wL2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NGJkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2NwdS9tMC9jcHUuYwpAQCAtMCwwICsxLDYyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDE2IFpYSUMgSW5jLgorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSAiLi4vLi4vZHJpdmVycy9jb25maWcuaCIKKworCisvLyDPtc2zyrHW0wordHlwZWRlZiBzdHJ1Y3QKK3sKKwl1MzIJCWN0cmw7CQkJCQkvLyDPtc2zyrHW07/Y1sYKKwl1MzIJCXJlbG9hZDsJCQkJCS8vINbY1NjWtQorCXUzMgkJY291bnQ7CQkJCQkvLyC1scew1rUKKwl1MzIJCWNhbGlicmF0aW9uOwkJCS8vINCj17zWtQorCit9IHRfdGljazsKKworCit2b2xhdGlsZSB0X3RpY2sJIGdfdGljazsgCisKKworLy8gyrHW07P1yry7rwordm9pZCB0aW1lcl9pbml0KHZvaWQpCit7CisJdm9sYXRpbGUgdF90aWNrCSp0aWNrIAk9ICh0X3RpY2sqKSgmZ190aWNrKTsKKwl0aWNrLT5jdHJsCQkJCT0gMDsKKwl0aWNrLT5jb3VudAkJICAgICAgICA9IDA7CisJdGljay0+cmVsb2FkCQkJPSAodTMyKS0xOworCXRpY2stPmN0cmwJCQkJPSAweDA1OworfQorCisvLyDXotLi1+6087zGyrEgMjTOuwordm9pZCB1c2RlbGF5KHUzMiB1cykKK3sKKwlpbnQgdDAsIHQxLCB0MiwgdDM7CisKKwl2b2xhdGlsZSB0X3RpY2sJKnRpY2sgCT0gKHRfdGljayopKCZnX3RpY2spOworCisJdDAgIAk9IHRpY2stPmNvdW50OworCXQxCQk9IHVzICogKFNZU19DUFVfRlJFUSAvIDEwMDAwMDApOworCisJaWYodDEgPD0gdDApCisJeworCQl0Mgk9IHQwIC0gdDE7CisJCXdoaWxlKCh0MyA9IHRpY2stPmNvdW50KSA+IHQyKQorCQl7CisJCQlpZih0MyA+IDB4RkZGRjAwKSBicmVhazsKKwkJfQorCX0KKwllbHNlCisJeworCQl0Mgk9IDB4MDBGRkZGRkYgKyB0MCAtIHQxOworCQl3aGlsZSgxKQorCQl7CisJCQl0MSA9IHRpY2stPmNvdW50OworCQkJaWYoKHQxID49IHQwKSAmJiAodDEgPD0gdDIpKSBicmVhazsKKwkJfQorCX0KK30KKwpkaWZmIC0tZ2l0IGEvYm9vdC9jb21tb24vc3JjL2xvYWRlci9jcHUvbTAvZGl2bW9kLmMgYi9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2NwdS9tMC9kaXZtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTc4ZjdhCi0tLSAvZGV2L251bGwKKysrIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9jcHUvbTAvZGl2bW9kLmMKQEAgLTAsMCArMSw1MiBAQAorCitleHRlcm4gdW5zaWduZWQgbG9uZyB1ZGl2bW9kc2k0KHVuc2lnbmVkIGxvbmcgbnVtLCB1bnNpZ25lZCBsb25nIGRlbiwgaW50IG1vZHdhbnRlZCk7CisKKworbG9uZworX19kaXZzaTMgKGxvbmcgYSwgbG9uZyBiKQoreworICBpbnQgbmVnID0gMDsKKyAgbG9uZyByZXM7CisKKyAgaWYgKGEgPCAwKQorICAgIHsKKyAgICAgIGEgPSAtYTsKKyAgICAgIG5lZyA9ICFuZWc7CisgICAgfQorCisgIGlmIChiIDwgMCkKKyAgICB7CisgICAgICBiID0gLWI7CisgICAgICBuZWcgPSAhbmVnOworICAgIH0KKworICByZXMgPSB1ZGl2bW9kc2k0IChhLCBiLCAwKTsKKworICBpZiAobmVnKQorICAgIHJlcyA9IC1yZXM7CisKKyAgcmV0dXJuIHJlczsKK30KKworbG9uZworX19tb2RzaTMgKGxvbmcgYSwgbG9uZyBiKQoreworICBpbnQgbmVnID0gMDsKKyAgbG9uZyByZXM7CisKKyAgaWYgKGEgPCAwKQorICAgIHsKKyAgICAgIGEgPSAtYTsKKyAgICAgIG5lZyA9IDE7CisgICAgfQorCisgIGlmIChiIDwgMCkKKyAgICBiID0gLWI7CisKKyAgcmVzID0gdWRpdm1vZHNpNCAoYSwgYiwgMSk7CisKKyAgaWYgKG5lZykKKyAgICByZXMgPSAtcmVzOworCisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2NwdS9tMC9zdGFydC5TIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9jcHUvbTAvc3RhcnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhiNWEwCi0tLSAvZGV2L251bGwKKysrIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9jcHUvbTAvc3RhcnQuUwpAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxNiBaWElDIEluYy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGJvYXJkLmg+CisjaW5jbHVkZSA8bG9hZF9tb2RlLmg+CisKKy5nbG9ibCBzdGFja19zZXR1cAorCitzdGFjazoKKyNpZiAoQ09ORklHX0RMX0RJU0FCTEUpCisJLndvcmQJMHgwNDVBMDAwMCAgICAvKiBETCBwb3J0OiAweDVBLT5EaXNhYmxlLiAqLworI2Vsc2UKKwkud29yZAkweDA0MDAwMDAwICAgIC8qIERMIHBvcnQ6IDB4MDAtPkVuYWJsZS4gKi8KKyNlbmRpZgorCS53b3JkCTB4MzUzNzU4NUEgICAgLyogPSBzdHJpbmcgIjU3WFoiICovCisJLndvcmQJMHgzMTU2MzEzMiAgICAvKiA9IHN0cmluZyAiMVYxMiIgKi8KKwkud29yZAkweDAwMDAxRTcwCSAgLyogemRhdGEgc2l6ZSA9IDhLIC0gSGRyU2l6ZSA9IDgxOTIgLSA0MDAgPSA3NzkyIEJ5dGVzID0gMHgxRTcwKi8KKworCS8qIE5PVCB1c2VkIG5vdywgSnVzdCByZXZlcnNlIG1lbW9yeSBmb3IgUlNBL0hBU0ggaW4gbmVhciBmdXR1cmUuICovCisJLndvcmQJMHgwMDAwMDAwMCAgICAvKnB1a19yc2FfZCovCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCisJLndvcmQJMHgwMDAwMDAwMCAgICAvKnB1a19yc2FfbiovCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCisJLndvcmQJMHgwMDAwMDAwMCAgICAvKmhhc2hfeSovCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAKKwkud29yZAkweDAwMDAwMDAwCisJLndvcmQJMHgwMDAwMDAwMAorCS53b3JkCTB4MDAwMDAwMDAJLyogVklEK1BJRCAqLworI2lmIGRlZmluZWQoQ0ZHX1pMT0FEKQorCS53b3JkCTB4MDAxMDI4MDAKKwkud29yZAlfc3RhcnQgLSAweDEwMDAwMCArIDB4OEEwMDEgICAgLyogVEJEOiBNQUNSTyBpbnN0ZWFkIG9mIG51bWJlci4gKi8KKyNlbHNlCisJLndvcmQJMHgwMDA4QTAwMAorCS53b3JkCV9zdGFydCArIDB4MQorI2VuZGlmCisJLndvcmQJbG9vcCArIDEKKwkud29yZAlsb29wICsgMQorCQorLmdsb2JsIF9ic3Nfc3RhcnQKK19ic3Nfc3RhcnQ6CisJLndvcmQgX19ic3Nfc3RhcnQKKwlub3AKKwlub3AKKworLmdsb2JsIF9ic3NfZW5kCitfYnNzX2VuZDoKKwkud29yZCBfX2Jzc19lbmQKKworLmdsb2JsIF9wYXJhX3N0YXJ0CitfcGFyYV9zdGFydDoKKwkud29yZCBfX3BhcmFfc3RhcnQKKworLmdsb2JsIF9wYXJhX2VuZAorX3BhcmFfZW5kOgorCS53b3JkIF9fcGFyYV9lbmQKKwkKKy5nbG9ibCBfc3RhcnQKK19zdGFydDoKKwkKKyNpZiBkZWZpbmVkKENGR19aTE9BRCkKKwkvKiBjaGVjayBzdGFnZTEgc3RhdGUgKi8KKwlsZHIJcjMsPUNGR19TVEFSVF9TVEFHRTFfQUREUgorCWxkcglyNCw9Q0ZHX1NUQVJUX1NUQUdFMV9TVEFURQorCWxkcglyNSwgW3IzXQorCWNtcCByNCwgcjUKKwliZXEgc2V0X3N0YWNrCisJCisJbGRyCXIwLCA9MHg4YTAwMAorCW1zcglNU1AsIHIwCisJCisJYmwgY29weV90b19pcmFtMQorCWxkcglyMyw9MHgxMDAxQjEgICAgLyogMHgxYjEgPSAweDE5NChoZWFkZXIgbGVuKSArIDB4MWMoZmlyc3QgSW5zLiBvZmZzZXQpICsgMHgxKDE2Yml0IHRodW1iIGluc3RydWN0aW9uKSAqLworCW1vdglwYyxyMworc2V0X3N0YWNrOgorCS8qIFNldCB1cCB0aGUgc3RhY2sgKi8KKwlsZHIJcjIsID0weDEwMDAwMAorCWxkcglyMyw9MHgxOTQgICAgLypoZWFkZXIgbGVuPTB4MTk0Ki8KKwlhZGQJcjIscjMKKwlsZHIJcjAsIFtyMl0KKwltc3IJTVNQLCByMAorCisjZWxzZQorCisJLyogU2V0IHVwIHRoZSBzdGFjayAqLworCWxkcglyMiwgPXN0YWNrCisJbGRyCXIzLD0weDE5NCAgICAvKmhlYWRlciBsZW49MHgxOTQqLworCWFkZAlyMixyMworCWxkcglyMCwgW3IyXQorCW1zcglNU1AsIHIwCisKKyNlbmRpZiAgICAvKiBDRkdfWkxPQUQgKi8JCisKKy8qIGNsZWFyIHRoZSBic3MgKi8KK2NsZWFyX2JzczoKKwlsZHIgCXIzLCA9X2Jzc19zdGFydAorCWxkcglyMCwgW3IzXSAgICAgICAvKiBmaW5kIHN0YXJ0IG9mIGJzcyBzZWdtZW50ICAgICAqLworCWxkciAJcjMsID1fYnNzX2VuZAorCWxkcglyMSwgW3IzXSAgICAgICAvKiBzdG9wIGhlcmUgICAgICAgICAgICAgICAgICAgICAqLworCWNtcAlyMCwgcjEKKwliZXEJY2xic3Nfb3ZlcgorCW1vdiAJcjIsICMweDAgICAvKiBjbGVhciB2YWx1ZSAgICAgICAgICAgICAgICAgICAqLworY2xic3NfbDoKKwlzdHIJcjIsIFtyMF0gICAgICAgLyogY2xlYXIgQlNTIGxvY2F0aW9uICAgICAgICAgICAgKi8KKwlhZGQJcjAsIHIwLCAjNCAgICAgLyogaW5jcmVtZW50IGNsZWFyIGluZGV4IHBvaW50ZXIgKi8KKwljbXAJcjAsIHIxICAgICAgICAgLyogYXJlIHdlIGF0IHRoZSBlbmQgeWV0ICAgICAgICAgKi8JCisJYm5lCWNsYnNzX2wgICAgICAgIC8qIGtlZXAgY2xlYXJpbmcgdGlsbCBhdCBlbmQgICAgICovCitjbGJzc19vdmVyOgorCisvKiByZW1vdmUgdGhlIHBhcmEgc2VjdGlvbiAqLworCWxkcglyMywgPV9wYXJhX3N0YXJ0CisJbGRyIAlyNCwgW3IzXQorCWxkcglyMywgPV9wYXJhX2VuZAorCWxkciAJcjEsIFtyM10KKwlzdWIJcjEsIHIxLCByNAorCWxkciAJcjMsID1fYnNzX2VuZAkKKwlsZHIJcjAsIFtyM10KKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMCwgcjEKKwliZXEJcmVtb3ZlX292ZXIKK3JlX21vdmU6CQorCWxkcglyMiwgW3IwXQorCXN0cglyMiwgW3I0XQorCWFkZCAJcjQsIHI0LCAjNAorCWFkZAlyMCwgcjAsICM0ICAgIC8qIGluY3JlbWVudCBjbGVhciBpbmRleCBwb2ludGVyICAgICovCisJY21wCXIwLCByMSAgICAgICAgLyogYXJlIHdlIGF0IHRoZSBlbmQgeWV0ICAgICAgICAgICAgKi8JCisJYm5lCXJlX21vdmUKK3JlbW92ZV9vdmVyOgorCisJYglzdGFydF9hcm1ib290CisKK2xvb3A6CisJYiBsb29wCisKZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY3B1L20wL3VkaXZtb2QuYyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY3B1L20wL3VkaXZtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDU5YTIyCi0tLSAvZGV2L251bGwKKysrIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9jcHUvbTAvdWRpdm1vZC5jCkBAIC0wLDAgKzEsMTYgQEAKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdWRpdm1vZHNpNCh1bnNpZ25lZCBsb25nIG51bSwgdW5zaWduZWQgbG9uZyBkZW4sIGludCBtb2R3YW50ZWQpOworCisKK2xvbmcKK19fdWRpdnNpMyAobG9uZyBhLCBsb25nIGIpCit7CisgIHJldHVybiB1ZGl2bW9kc2k0IChhLCBiLCAwKTsKK30KKworbG9uZworX191bW9kc2kzIChsb25nIGEsIGxvbmcgYikKK3sKKyAgcmV0dXJuIHVkaXZtb2RzaTQgKGEsIGIsIDEpOworfQorCmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2NwdS9tMC91ZGl2bW9kc2k0LmMgYi9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2NwdS9tMC91ZGl2bW9kc2k0LmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzU1NmE1MAotLS0gL2Rldi9udWxsCisrKyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY3B1L20wL3VkaXZtb2RzaTQuYwpAQCAtMCwwICsxLDI3IEBACisKK3Vuc2lnbmVkIGxvbmcgdWRpdm1vZHNpNCh1bnNpZ25lZCBsb25nIG51bSwgdW5zaWduZWQgbG9uZyBkZW4sIGludCBtb2R3YW50ZWQpCit7CisJdW5zaWduZWQgbG9uZyBiaXRzID0gMTsKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyB0bXBudW0gPSBudW07CisJdW5zaWduZWQgbG9uZyB0bXBkZW4gPSBkZW47CisKKwl3aGlsZSAodG1wZGVuIDwgdG1wbnVtICYmIGJpdHMgJiYgISh0bXBkZW4gJiAoMUw8PDMxKSkpCisJeworCQl0bXBkZW4gPDw9MTsKKwkJYml0cyA8PD0xOworCX0KKwl3aGlsZSAoYml0cykKKwl7CisJCWlmICh0bXBudW0gPj0gdG1wZGVuKQorCQl7CisJCQl0bXBudW0gLT0gdG1wZGVuOworCQkJcmV0IHw9IGJpdHM7CisJCX0KKwkJYml0cyA+Pj0xOworCQl0bXBkZW4gPj49MTsKKwl9CisJaWYgKG1vZHdhbnRlZCkgcmV0dXJuIHRtcG51bTsKKwkKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYm9vdC9jb21tb24vc3JjL2xvYWRlci9jcHUvbTAvei1sb2FkLmxkcyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY3B1L20wL3otbG9hZC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1ZGNmNgotLS0gL2Rldi9udWxsCisrKyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY3B1L20wL3otbG9hZC5sZHMKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIE5vdmVtYmVyIDIwMDYgLSBDaGFuZ2VkIHRvIHN1cHBvcnQgMzQzMHNkcCBkZXZpY2UgCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiBUZXhhcyBJbnN0cnVtZW50cyAKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworCS4gPSAweDAwMDAwMDAwOworCisJLiA9IEFMSUdOKDQpOworCS50ZXh0ICAgICAgOgorCXsKKwkgIGNwdS9tMC9zdGFydC5vCSgudGV4dCkKKwkgICooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9fYnNzX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJLnBhcmEgMHg4MjAwMDAwMCA6IEFUKF9fYnNzX2VuZCkKKwl7CisJCV9fcGFyYV9zdGFydCA9IC47CisJICAJKigucGFyYSkKKwkgIAlfX3BhcmFfZW5kID0gLjsKKwl9CisKKwlfX2VuZCA9IC47Cit9Cg==