ZGlmZiAtLWdpdCBhL2NwdS9hcm05MjV0L01ha2VmaWxlIGIvY3B1L2FybTkyNXQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkYjgxOAotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm05MjV0L01ha2VmaWxlCkBAIC0wLDAgKzEsNDMgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDMKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQ1BVKS5hCisKK1NUQVJUCT0gc3RhcnQubworT0JKUwk9IGludGVycnVwdHMubyBjcHUubyBvbWFwOTI1Lm8KKworYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorCiskKExJQik6CSQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy5kZXBlbmQ6CU1ha2VmaWxlICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykKKwkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCitzaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjV0L2NvbmZpZy5tayBiL2NwdS9hcm05MjV0L2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWY3ZDI2Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyNXQvY29uZmlnLm1rCkBAIC0wLDAgKzEsMjcgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAyCisjIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworUExBVEZPUk1fUkVMRkxBR1MgKz0gLWZuby1zdHJpY3QtYWxpYXNpbmcgIC1mbm8tY29tbW9uIC1mZml4ZWQtcjggXAorCS1tc2hvcnQtbG9hZC1ieXRlcyAtbXNvZnQtZmxvYXQKKworUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW1hcGNzLTMyIC1tYXJjaD1hcm12NApkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNXQvY3B1LmMgYi9jcHUvYXJtOTI1dC9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTVmYmM3Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyNXQvY3B1LmMKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBDUFUgc3BlY2lmaWMgY29kZQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8YXJtOTI1dC5oPgorCisvKiByZWFkIGNvLXByb2Nlc3NvciAxNSwgcmVnaXN0ZXIgIzEgKGNvbnRyb2wgcmVnaXN0ZXIpICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkX3AxNV9jMSAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJtcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAwICAgQCByZWFkIGNvbnRyb2wgcmVnXG4iCisJCTogIj1yIiAodmFsdWUpCisJCToKKwkJOiAibWVtb3J5Iik7CisKKyNpZmRlZiBNTVVfREVCVUcKKwlwcmludGYgKCJwMTUvYzEgaXMgPSAlMDhseFxuIiwgdmFsdWUpOworI2VuZGlmCisJcmV0dXJuIHZhbHVlOworfQorCisvKiB3cml0ZSB0byBjby1wcm9jZXNzb3IgMTUsIHJlZ2lzdGVyICMxIChjb250cm9sIHJlZ2lzdGVyKSAqLworc3RhdGljIHZvaWQgd3JpdGVfcDE1X2MxICh1bnNpZ25lZCBsb25nIHZhbHVlKQoreworI2lmZGVmIE1NVV9ERUJVRworCXByaW50ZiAoIndyaXRlICUwOGx4IHRvIHAxNS9jMVxuIiwgdmFsdWUpOworI2VuZGlmCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJtY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAwICAgQCB3cml0ZSBpdCBiYWNrXG4iCisJCToKKwkJOiAiciIgKHZhbHVlKQorCQk6ICJtZW1vcnkiKTsKKworCXJlYWRfcDE1X2MxICgpOworfQorCitzdGF0aWMgdm9pZCBjcF9kZWxheSAodm9pZCkKK3sKKwl2b2xhdGlsZSBpbnQgaTsKKworCS8qIE1hbnkgT01BUCByZWdzIG5lZWQgYXQgbGVhc3QgMiBub3BzICAqLworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKyk7Cit9CisKKy8qIFNlZSBhbHNvIEFSTSBSZWYuIE1hbi4gKi8KKyNkZWZpbmUgQzFfTU1VCQkoMTw8MCkJCS8qIG1tdSBvZmYvb24gKi8KKyNkZWZpbmUgQzFfQUxJR04JKDE8PDEpCQkvKiBhbGlnbm1lbnQgZmF1bHRzIG9mZi9vbiAqLworI2RlZmluZSBDMV9EQwkJKDE8PDIpCQkvKiBkY2FjaGUgb2ZmL29uICovCisjZGVmaW5lIEMxX1dCCQkoMTw8MykJCS8qIG1lcmdpbmcgd3JpdGUgYnVmZmVyIG9uL29mZiAqLworI2RlZmluZSBDMV9CSUdfRU5ESUFOCSgxPDw3KQkvKiBiaWcgZW5kaWFuIG9mZi9vbiAqLworI2RlZmluZSBDMV9TWVNfUFJPVAkoMTw8OCkJCS8qIHN5c3RlbSBwcm90ZWN0aW9uICovCisjZGVmaW5lIEMxX1JPTV9QUk9UCSgxPDw5KQkJLyogUk9NIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgQzFfSUMJCSgxPDwxMikJCS8qIGljYWNoZSBvZmYvb24gKi8KKyNkZWZpbmUgQzFfSElHSF9WRUNUT1JTCSgxPDwxMykJLyogbG9jYXRpb24gb2YgdmVjdG9yczogbG93L2hpZ2ggYWRkcmVzc2VzICovCisjZGVmaW5lIFJFU0VSVkVEXzEJKDB4ZiA8PCAzKQkvKiBtdXN0IGJlIDExMWIgZm9yIFIvVyAqLworCitpbnQgY3B1X2luaXQgKHZvaWQpCit7CisJLyoKKwkgKiBzZXR1cCB1cCBzdGFjayBpZiBuZWNlc3NhcnkKKwkgKi8KKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorCUlSUV9TVEFDS19TVEFSVCA9IF9hcm1ib290X2VuZCArCisJCQlDT05GSUdfU1RBQ0tTSVpFICsgQ09ORklHX1NUQUNLU0laRV9JUlEgLSA0OworCUZJUV9TVEFDS19TVEFSVCA9IElSUV9TVEFDS19TVEFSVCArIENPTkZJR19TVEFDS1NJWkVfRklROworCV9hcm1ib290X3JlYWxfZW5kID0gRklRX1NUQUNLX1NUQVJUICsgNDsKKyNlbHNlCisJX2FybWJvb3RfcmVhbF9lbmQgPSBfYXJtYm9vdF9lbmQgKyBDT05GSUdfU1RBQ0tTSVpFOworI2VuZGlmCS8qIENPTkZJR19VU0VfSVJRICovCisJcmV0dXJuICgwKTsKK30KKworaW50IGNsZWFudXBfYmVmb3JlX2xpbnV4ICh2b2lkKQoreworCS8qCisJICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQganVzdCBiZWZvcmUgd2UgY2FsbCBsaW51eAorCSAqIGl0IHByZXBhcmVzIHRoZSBwcm9jZXNzb3IgZm9yIGxpbnV4CisJICoKKwkgKiB3ZSB0dXJuIG9mZiBjYWNoZXMgZXRjIC4uLgorCSAqLworCisJdW5zaWduZWQgbG9uZyBpOworCisJZGlzYWJsZV9pbnRlcnJ1cHRzICgpOworCisJLyogdHVybiBvZmYgSS9ELWNhY2hlICovCisJYXNtICgibXJjIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCI6Ij1yIiAoaSkpOworCWkgJj0gfihDMV9EQyB8IEMxX0lDKTsKKwlhc20gKCJtY3IgcDE1LCAwLCAlMCwgYzEsIGMwLCAwIjogOiJyIiAoaSkpOworCisJLyogZmx1c2ggSS9ELWNhY2hlICovCisJaSA9IDA7CisJYXNtICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjNywgMCI6IDoiciIgKGkpKTsKKwlyZXR1cm4gKDApOworfQorCitpbnQgZG9fcmVzZXQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWV4dGVybiB2b2lkIHJlc2V0X2NwdSAodWxvbmcgYWRkcik7CisKKwlkaXNhYmxlX2ludGVycnVwdHMgKCk7CisJcmVzZXRfY3B1ICgwKTsKKwkvKk5PVFJFQUNIRUQqLworCXJldHVybiAoMCk7Cit9CisKK3ZvaWQgaWNhY2hlX2VuYWJsZSAodm9pZCkKK3sKKwl1bG9uZyByZWc7CisKKwlyZWcgPSByZWFkX3AxNV9jMSAoKTsJCS8qIGdldCBjb250cm9sIHJlZy4gKi8KKwljcF9kZWxheSAoKTsKKwl3cml0ZV9wMTVfYzEgKHJlZyB8IEMxX0lDKTsKK30KKwordm9pZCBpY2FjaGVfZGlzYWJsZSAodm9pZCkKK3sKKwl1bG9uZyByZWc7CisKKwlyZWcgPSByZWFkX3AxNV9jMSAoKTsKKwljcF9kZWxheSAoKTsKKwl3cml0ZV9wMTVfYzEgKHJlZyAmIH5DMV9JQyk7Cit9CisKK2ludCBpY2FjaGVfc3RhdHVzICh2b2lkKQoreworCXJldHVybiAocmVhZF9wMTVfYzEgKCkgJiBDMV9JQykgIT0gMDsKK30KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjV0L2ludGVycnVwdHMuYyBiL2NwdS9hcm05MjV0L2ludGVycnVwdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDhhMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyNXQvaW50ZXJydXB0cy5jCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogQWxleCBadWVwa2UgPGF6dUBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXJtOTI1dC5oPgorI2luY2x1ZGUgPGNvbmZpZ3Mvb21hcDE1MTAuaD4KKworI2luY2x1ZGUgPGFzbS9wcm9jLWFybXYvcHRyYWNlLmg+CisKK2V4dGVybiB2b2lkIHJlc2V0X2NwdSh1bG9uZyBhZGRyKTsKKyNkZWZpbmUgVElNRVJfTE9BRF9WQUwgMHhmZmZmZmZmZgorCisvKiBtYWNybyB0byByZWFkIHRoZSAzMiBiaXQgdGltZXIgKi8KKyNkZWZpbmUgUkVBRF9USU1FUiAoKih2b2xhdGlsZSB1bG9uZyAqKShDRkdfVElNRVJCQVNFKzgpKQorCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKy8qIGVuYWJsZSBJUlEgaW50ZXJydXB0cyAqLwordm9pZCBlbmFibGVfaW50ZXJydXB0cyAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1ycyAlMCwgY3BzclxuIgorCQkJICAgICAiYmljICUwLCAlMCwgIzB4ODBcbiIKKwkJCSAgICAgIm1zciBjcHNyX2MsICUwIgorCQkJICAgICA6ICI9ciIgKHRlbXApCisJCQkgICAgIDoKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKKworLyoKKyAqIGRpc2FibGUgSVJRL0ZJUSBpbnRlcnJ1cHRzCisgKiByZXR1cm5zIHRydWUgaWYgaW50ZXJydXB0cyBoYWQgYmVlbiBlbmFibGVkIGJlZm9yZSB3ZSBkaXNhYmxlZCB0aGVtCisgKi8KK2ludCBkaXNhYmxlX2ludGVycnVwdHMgKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBvbGQsdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJzICUwLCBjcHNyXG4iCisJCQkgICAgICJvcnIgJTEsICUwLCAjMHhjMFxuIgorCQkJICAgICAibXNyIGNwc3JfYywgJTEiCisJCQkgICAgIDogIj1yIiAob2xkKSwgIj1yIiAodGVtcCkKKwkJCSAgICAgOgorCQkJICAgICA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gKG9sZCAmIDB4ODApID09IDA7Cit9CisjZWxzZQordm9pZCBlbmFibGVfaW50ZXJydXB0cyAodm9pZCkKK3sKKwlyZXR1cm47Cit9CitpbnQgZGlzYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKworCit2b2lkIGJhZF9tb2RlICh2b2lkKQoreworCXBhbmljICgiUmVzZXR0aW5nIENQVSAuLi5cbiIpOworCXJlc2V0X2NwdSAoMCk7Cit9CisKK3ZvaWQgc2hvd19yZWdzIChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNvbnN0IGNoYXIgKnByb2Nlc3Nvcl9tb2Rlc1tdID0geworCSJVU0VSXzI2IiwJIkZJUV8yNiIsCSJJUlFfMjYiLAkiU1ZDXzI2IiwKKwkiVUs0XzI2IiwJIlVLNV8yNiIsCSJVSzZfMjYiLAkiVUs3XzI2IiwKKwkiVUs4XzI2IiwJIlVLOV8yNiIsCSJVSzEwXzI2IiwJIlVLMTFfMjYiLAorCSJVSzEyXzI2IiwJIlVLMTNfMjYiLAkiVUsxNF8yNiIsCSJVSzE1XzI2IiwKKwkiVVNFUl8zMiIsCSJGSVFfMzIiLAkiSVJRXzMyIiwJIlNWQ18zMiIsCisJIlVLNF8zMiIsCSJVSzVfMzIiLAkiVUs2XzMyIiwJIkFCVF8zMiIsCisJIlVLOF8zMiIsCSJVSzlfMzIiLAkiVUsxMF8zMiIsCSJVTkRfMzIiLAorCSJVSzEyXzMyIiwJIlVLMTNfMzIiLAkiVUsxNF8zMiIsCSJTWVNfMzIiLAorCX07CisKKwlmbGFncyA9IGNvbmRpdGlvbl9jb2RlcyAocmVncyk7CisKKwlwcmludGYgKCJwYyA6IFs8JTA4bHg+XSAgICBsciA6IFs8JTA4bHg+XVxuIgorCQkic3AgOiAlMDhseCAgaXAgOiAlMDhseCAgZnAgOiAlMDhseFxuIiwKKwkJaW5zdHJ1Y3Rpb25fcG9pbnRlciAocmVncyksCisJCXJlZ3MtPkFSTV9sciwgcmVncy0+QVJNX3NwLCByZWdzLT5BUk1faXAsIHJlZ3MtPkFSTV9mcCk7CisJcHJpbnRmICgicjEwOiAlMDhseCAgcjkgOiAlMDhseCAgcjggOiAlMDhseFxuIiwKKwkJcmVncy0+QVJNX3IxMCwgcmVncy0+QVJNX3I5LCByZWdzLT5BUk1fcjgpOworCXByaW50ZiAoInI3IDogJTA4bHggIHI2IDogJTA4bHggIHI1IDogJTA4bHggIHI0IDogJTA4bHhcbiIsCisJCXJlZ3MtPkFSTV9yNywgcmVncy0+QVJNX3I2LCByZWdzLT5BUk1fcjUsIHJlZ3MtPkFSTV9yNCk7CisJcHJpbnRmICgicjMgOiAlMDhseCAgcjIgOiAlMDhseCAgcjEgOiAlMDhseCAgcjAgOiAlMDhseFxuIiwKKwkJcmVncy0+QVJNX3IzLCByZWdzLT5BUk1fcjIsIHJlZ3MtPkFSTV9yMSwgcmVncy0+QVJNX3IwKTsKKwlwcmludGYgKCJGbGFnczogJWMlYyVjJWMiLAorCQlmbGFncyAmIENDX05fQklUID8gJ04nIDogJ24nLAorCQlmbGFncyAmIENDX1pfQklUID8gJ1onIDogJ3onLAorCQlmbGFncyAmIENDX0NfQklUID8gJ0MnIDogJ2MnLCBmbGFncyAmIENDX1ZfQklUID8gJ1YnIDogJ3YnKTsKKwlwcmludGYgKCIgIElSUXMgJXMgIEZJUXMgJXMgIE1vZGUgJXMlc1xuIiwKKwkJaW50ZXJydXB0c19lbmFibGVkIChyZWdzKSA/ICJvbiIgOiAib2ZmIiwKKwkJZmFzdF9pbnRlcnJ1cHRzX2VuYWJsZWQgKHJlZ3MpID8gIm9uIiA6ICJvZmYiLAorCQlwcm9jZXNzb3JfbW9kZXNbcHJvY2Vzc29yX21vZGUgKHJlZ3MpXSwKKwkJdGh1bWJfbW9kZSAocmVncykgPyAiIChUKSIgOiAiIik7Cit9CisKK3ZvaWQgZG9fdW5kZWZpbmVkX2luc3RydWN0aW9uIChzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlwcmludGYgKCJ1bmRlZmluZWQgaW5zdHJ1Y3Rpb25cbiIpOworCXNob3dfcmVncyAocHRfcmVncyk7CisJYmFkX21vZGUgKCk7Cit9CisKK3ZvaWQgZG9fc29mdHdhcmVfaW50ZXJydXB0IChzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlwcmludGYgKCJzb2Z0d2FyZSBpbnRlcnJ1cHRcbiIpOworCXNob3dfcmVncyAocHRfcmVncyk7CisJYmFkX21vZGUgKCk7Cit9CisKK3ZvaWQgZG9fcHJlZmV0Y2hfYWJvcnQgKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCXByaW50ZiAoInByZWZldGNoIGFib3J0XG4iKTsKKwlzaG93X3JlZ3MgKHB0X3JlZ3MpOworCWJhZF9tb2RlICgpOworfQorCit2b2lkIGRvX2RhdGFfYWJvcnQgKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCXByaW50ZiAoImRhdGEgYWJvcnRcbiIpOworCXNob3dfcmVncyAocHRfcmVncyk7CisJYmFkX21vZGUgKCk7Cit9CisKK3ZvaWQgZG9fbm90X3VzZWQgKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCXByaW50ZiAoIm5vdCB1c2VkXG4iKTsKKwlzaG93X3JlZ3MgKHB0X3JlZ3MpOworCWJhZF9tb2RlICgpOworfQorCit2b2lkIGRvX2ZpcSAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmICgiZmFzdCBpbnRlcnJ1cHQgcmVxdWVzdFxuIik7CisJc2hvd19yZWdzIChwdF9yZWdzKTsKKwliYWRfbW9kZSAoKTsKK30KKwordm9pZCBkb19pcnEgKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCXByaW50ZiAoImludGVycnVwdCByZXF1ZXN0XG4iKTsKKwlzaG93X3JlZ3MgKHB0X3JlZ3MpOworCWJhZF9tb2RlICgpOworfQorCitzdGF0aWMgdWxvbmcgdGltZXN0YW1wOworc3RhdGljIHVsb25nIGxhc3RkZWM7CisKKy8qIG5vdGhpbmcgcmVhbGx5IHRvIGRvIHdpdGggaW50ZXJydXB0cywganVzdCBzdGFydHMgdXAgYSBjb3VudGVyLiAqLworaW50IGludGVycnVwdF9pbml0ICh2b2lkKQoreworCWludDMyX3QgdmFsOworCisJKigoaW50MzJfdCAqKSAoQ0ZHX1RJTUVSQkFTRSArIExPQURfVElNKSkgPSBUSU1FUl9MT0FEX1ZBTDsKKwl2YWwgPSBNUFVUSU1fU1QgfCBNUFVUSU1fQVIgfCBNUFVUSU1fQ0xPQ0tfRU5BQkxFIHwgKENGR19QVlQgPDwgTVBVVElNX1BUVl9CSVQpOworCSooKGludDMyX3QgKikgKENGR19USU1FUkJBU0UgKyBDTlRMX1RJTUVSKSkgPSB2YWw7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIHRpbWVyIHdpdGhvdXQgaW50ZXJydXB0cworICovCisKK3ZvaWQgcmVzZXRfdGltZXIgKHZvaWQpCit7CisJcmVzZXRfdGltZXJfbWFza2VkICgpOworfQorCit1bG9uZyBnZXRfdGltZXIgKHVsb25nIGJhc2UpCit7CisJcmV0dXJuIGdldF90aW1lcl9tYXNrZWQgKCkgLSBiYXNlOworfQorCit2b2lkIHNldF90aW1lciAodWxvbmcgdCkKK3sKKwl0aW1lc3RhbXAgPSB0OworfQorCisvKiB2ZXJ5IHJvdWdoIHRpbWVyLi4uICovCit2b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQoreworI2lmZGVmIENPTkZJR19JTk5PVkFUT1JPTUFQMTUxMAorI2RlZmluZSBMT09QU19QRVJfTVNFQyA2MAkJLyogdHVuZWQgb24gb21hcDE1MTAgKi8KKwl2b2xhdGlsZSBpbnQgaSwgdGltZV9yZW1haW5pbmcgPSBMT09QU19QRVJfTVNFQyAqIHVzZWM7CisKKwlmb3IgKGkgPSB0aW1lX3JlbWFpbmluZzsgaSA+IDA7IGktLSkgeworCX0KKyNlbHNlCisKKwl1bG9uZyB0bW87CisKKwl0bW8gPSB1c2VjIC8gMTAwMDsKKwl0bW8gKj0gQ0ZHX0haOworCXRtbyAvPSAxMDAwOworCisJdG1vICs9IGdldF90aW1lciAoMCk7CisKKwl3aGlsZSAoZ2V0X3RpbWVyX21hc2tlZCAoKSA8IHRtbykKKwkJLypOT1AqLzsKKyNlbmRpZgorfQorCit2b2lkIHJlc2V0X3RpbWVyX21hc2tlZCAodm9pZCkKK3sKKwkvKiByZXNldCB0aW1lICovCisJbGFzdGRlYyA9IFJFQURfVElNRVI7CisJdGltZXN0YW1wID0gMDsKK30KKwordWxvbmcgZ2V0X3RpbWVyX21hc2tlZCAodm9pZCkKK3sKKwl1bG9uZyBub3cgPSBSRUFEX1RJTUVSOyAgICAgICAgICAgLyogY3VycmVudCB0aWNrIHZhbHVlICovCisKKwlpZiAobGFzdGRlYyA+PSBub3cpIHsgICAgICAgICAgICAgLyogZGlkIEkgcm9sbCAocmVtIGRlY3JlbWVudGVyKSAqLworCQkvKiBub3JtYWwgbW9kZSAqLworCQl0aW1lc3RhbXAgKz0gbGFzdGRlYyAtIG5vdzsgICAvKiByZWNvcmQgYW1vdW50IG9mIHRpbWUgc2luY2UgbGFzdCBjaGVjayAqLworCX0gZWxzZSB7CisJCS8qIHdlIGhhdmUgYW4gb3ZlcmZsb3cgLi4uICovCisJCXRpbWVzdGFtcCArPSBsYXN0ZGVjICsgVElNRVJfTE9BRF9WQUwgLSBub3c7CisJfQorCWxhc3RkZWMgPSBub3c7CisKKwlyZXR1cm4gdGltZXN0YW1wOworfQorCit2b2lkIHVkZWxheV9tYXNrZWQgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKyNpZmRlZiBDT05GSUdfSU5OT1ZBVE9ST01BUDE1MTAKKwkjZGVmaW5lIExPT1BTX1BFUl9NU0VDIDYwIC8qIHR1bmVkIG9uIG9tYXAxNTEwICovCisJdm9sYXRpbGUgaW50IGksIHRpbWVfcmVtYWluaW5nID0gTE9PUFNfUEVSX01TRUMqdXNlYzsKKyAgICBmb3IgKGk9dGltZV9yZW1haW5pbmc7IGk+MDsgaS0tKSB7IH0KKyNlbHNlCisKKwl1bG9uZyB0bW87CisKKwl0bW8gPSB1c2VjIC8gMTAwMDsKKwl0bW8gKj0gQ0ZHX0haOworCXRtbyAvPSAxMDAwOworCisJcmVzZXRfdGltZXJfbWFza2VkICgpOworCisJd2hpbGUgKGdldF90aW1lcl9tYXNrZWQgKCkgPCB0bW8pCisJCS8qTk9QKi87CisjZW5kaWYKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAocmVhZCB0aW1lYmFzZSBhcyBsb25nIGxvbmcpLgorICogT24gQVJNIGl0IGp1c3QgcmV0dXJucyB0aGUgdGltZXIgdmFsdWUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBnZXRfdGlja3Modm9pZCkKK3sKKwlyZXR1cm4gZ2V0X3RpbWVyKDApOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gUG93ZXJQQyBjb2RlICh0aW1lYmFzZSBjbG9jayBmcmVxdWVuY3kpLgorICogT24gQVJNIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lciB0aWNrcyBwZXIgc2Vjb25kLgorICovCit1bG9uZyBnZXRfdGJjbGsgKHZvaWQpCit7CS8qIHBvb3IgdGltZXIsIG1heSBuZWVkIHRvIGltcHJvdmUgZXNwZWNpYWxsIGZvciBib290cC4gKi8KKwl1bG9uZyB0YmNsazsKKworCXRiY2xrID0gQ0ZHX0haOworCXJldHVybiB0YmNsazsKK30KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjV0L29tYXA5MjUuYyBiL2NwdS9hcm05MjV0L29tYXA5MjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTY2Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyNXQvb21hcDkyNS5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIFRleGFzIEluc3RydW1lbnRzIDx3d3cudGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8YXJtOTI1dC5oPgorCit1c2hvcnQgZ3Bpb3Jlc2VydmVkOworCit2b2lkIGdwaW9yZXNlcnZlKHVzaG9ydCBtYXNrKQoreworCWdwaW9yZXNlcnZlZCB8PSBtYXNrOworfQorCit2b2lkIGdwaW9zZXRkaXIodXNob3J0IG1hc2ssIHVzaG9ydCBpbikKK3sKKwkqKHVzaG9ydCAqKUdQSU9fRElSX0NPTlRST0xfUkVHID0gKCoodXNob3J0ICopR1BJT19ESVJfQ09OVFJPTF9SRUcgJiB+bWFzaykgfCAoaW4gJiBtYXNrKTsKK30KKworCit2b2lkIGdwaW9zZXRvdXQodXNob3J0IG1hc2ssIHVzaG9ydCBvdXQpCit7CisJdXNob3J0ICpyX3B0ciwgcl92YWw7CisJCisJcl9wdHIgPSAodXNob3J0ICopR1BJT19EQVRBX09VVFBVVF9SRUc7CS8qIHNldCBwb2ludGVyICovCisJcl92YWwgPSAqcl9wdHIgJiB+bWFzazsJCS8qIGdldCBwcmV2aW91cyB2YWwsIGNsZWFyIGJpdHMgd2Ugd2FudCB0byBjaGFuZ2UgKi8KKwlyX3ZhbCB8PSAob3V0ICYgbWFzayk7CQkvKiBzZXQgc3BlY2lmaWVkIGJpdHMgaW4gdmFsdWUgKyBwbHVzIG9yaWdpb25hbCBvbmVzICovCisJKnJfcHRyID0gcl92YWw7CQkJLyogd3JpdGUgaXQgb3V0ICovCQorLyogCisgKiBnY2Mgc2NyZXdlZCB0aGlzIG9uZSB1cCA6KC4KKyAqIAorICogKih1c2hvcnQgKilHUElPX0RBVEFfT1VUUFVUX1JFRyA9ICgqKHVzaG9ydCAqKUdQSU9fREFUQV9PVVRQVVRfUkVHICYgfm1hc2spIHwgKG91dCAmIG1hc2spOworICovCisKK30KKwordm9pZCBncGlvaW5pdCh2b2lkKQoreworfQorCisKKyNkZWZpbmUgTUlGX0NPTkZJR19SRUcgMHhGRkZFQ0MwQworI2RlZmluZSBGTEFTSF9HTE9CQUxfQ1RSTF9OV1AgMQorCit2b2lkIGFyY2hmbGFzaHdwICh2b2lkICphcmNoZGF0YSwgaW50IHdwKQoreworCXVsb25nICpmZ2MgPSAodWxvbmcgKikgTUlGX0NPTkZJR19SRUc7CisKKwlpZiAod3AgPT0gMSkKKwkJKmZnYyAmPSB+RkxBU0hfR0xPQkFMX0NUUkxfTldQOworCWVsc2UKKwkJKmZnYyB8PSBGTEFTSF9HTE9CQUxfQ1RSTF9OV1A7Cit9CmRpZmYgLS1naXQgYS9jcHUvYXJtOTI1dC9zdGFydC5TIGIvY3B1L2FybTkyNXQvc3RhcnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTE1ZmIzCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyNXQvc3RhcnQuUwpAQCAtMCwwICsxLDQyNCBAQAorLyoKKyAqICBhcm1ib290IC0gU3RhcnR1cCBDb2RlIGZvciBBUk05MjUgQ1BVLWNvcmUKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAzICBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqICAtLS0tLSBBZGFwdGVkIGZvciBPTUFQMTUxMCBmcm9tIEFSTTkyMCBjb2RlIC0tLS0tLQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEJTWFyaXVzIEdy9mdlciA8bWFnQHN5c2dvLmRlPgorICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAyCUdhcnkgSmVubmVqb2huIDxnakBkZW54LmRlPgorICogIENvcHlyaWdodCAoYykgMjAwMwlSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAzCUtzaGl0aWogCSA8a3NoaXRpakB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQMTUxMCkKKyNpbmNsdWRlIDwuL2NvbmZpZ3Mvb21hcDE1MTAuaD4KKyNlbmRpZgorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBKdW1wIHZlY3RvciB0YWJsZSBhcyBpbiB0YWJsZSAzLjEgaW4gWzFdCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisKKy5nbG9ibCBfc3RhcnQKK19zdGFydDoJYiAgICAgICByZXNldAorCWxkcglwYywgX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgorCWxkcglwYywgX3NvZnR3YXJlX2ludGVycnVwdAorCWxkcglwYywgX3ByZWZldGNoX2Fib3J0CisJbGRyCXBjLCBfZGF0YV9hYm9ydAorCWxkcglwYywgX25vdF91c2VkCisJbGRyCXBjLCBfaXJxCisJbGRyCXBjLCBfZmlxCisKK191bmRlZmluZWRfaW5zdHJ1Y3Rpb246CS53b3JkIHVuZGVmaW5lZF9pbnN0cnVjdGlvbgorX3NvZnR3YXJlX2ludGVycnVwdDoJLndvcmQgc29mdHdhcmVfaW50ZXJydXB0CitfcHJlZmV0Y2hfYWJvcnQ6CS53b3JkIHByZWZldGNoX2Fib3J0CitfZGF0YV9hYm9ydDoJCS53b3JkIGRhdGFfYWJvcnQKK19ub3RfdXNlZDoJCS53b3JkIG5vdF91c2VkCitfaXJxOgkJCS53b3JkIGlycQorX2ZpcToJCQkud29yZCBmaXEKKworCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTdGFydHVwIENvZGUgKHJlc2V0IHZlY3RvcikKKyAqCisgKiBkbyBpbXBvcnRhbnQgaW5pdCBvbmx5IGlmIHdlIGRvbid0IHN0YXJ0IGZyb20gbWVtb3J5IQorICogc2V0dXAgTWVtb3J5IGFuZCBib2FyZCBzcGVjaWZpYyBiaXRzIHByaW9yIHRvIHJlbG9jYXRpb24uCisgKiByZWxvY2F0ZSBhcm1ib290IHRvIHJhbQorICogc2V0dXAgc3RhY2sKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qCisgKiBDRkdfTUVNX0VORCBpcyBpbiB0aGUgYm9hcmQgZGVwZW5kZW50IGNvbmZpZy1maWxlIChjb25maWdzL2NvbmZpZ19CT0FSRC5oKQorICovCitfVEVYVF9CQVNFOgorCS53b3JkCVRFWFRfQkFTRQorCisuZ2xvYmwgX2FybWJvb3Rfc3RhcnQKK19hcm1ib290X3N0YXJ0OgorCS53b3JkIF9zdGFydAorCisvKgorICogTm90ZTogX2FybWJvb3RfZW5kX2RhdGEgYW5kIF9hcm1ib290X2VuZCBhcmUgZGVmaW5lZAorICogYnkgdGhlIChib2FyZC1kZXBlbmRlbnQpIGxpbmtlciBzY3JpcHQuCisgKiBfYXJtYm9vdF9lbmRfZGF0YSBpcyB0aGUgZmlyc3QgdXNhYmxlIEZMQVNIIGFkZHJlc3MgYWZ0ZXIgYXJtYm9vdAorICovCisuZ2xvYmwgX2FybWJvb3RfZW5kX2RhdGEKK19hcm1ib290X2VuZF9kYXRhOgorCS53b3JkIGFybWJvb3RfZW5kX2RhdGEKKy5nbG9ibCBfYXJtYm9vdF9lbmQKK19hcm1ib290X2VuZDoKKwkud29yZCBhcm1ib290X2VuZAorCisvKgorICogX2FybWJvb3RfcmVhbF9lbmQgaXMgdGhlIGZpcnN0IHVzYWJsZSBSQU0gYWRkcmVzcyBiZWhpbmQgYXJtYm9vdAorICogYW5kIHRoZSB2YXJpb3VzIHN0YWNrcworICovCisuZ2xvYmwgX2FybWJvb3RfcmVhbF9lbmQKK19hcm1ib290X3JlYWxfZW5kOgorCS53b3JkIDB4MGJhZGMwZGUKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisvKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLworLmdsb2JsIElSUV9TVEFDS19TVEFSVAorSVJRX1NUQUNLX1NUQVJUOgorCS53b3JkCTB4MGJhZGMwZGUKKworLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KKy5nbG9ibCBGSVFfU1RBQ0tfU1RBUlQKK0ZJUV9TVEFDS19TVEFSVDoKKwkud29yZCAweDBiYWRjMGRlCisjZW5kaWYKKworCisvKgorICogdGhlIGFjdHVhbCByZXNldCBjb2RlCisgKi8KKworcmVzZXQ6CisJLyoKKwkgKiBzZXQgdGhlIGNwdSB0byBTVkMzMiBtb2RlCisJICovCisJbXJzCXIwLGNwc3IKKwliaWMJcjAscjAsIzB4MWYKKwlvcnIJcjAscjAsIzB4ZDMKKwltc3IJY3BzcixyMAorCQorCS8qCisJICogU2V0IHVwIDkyNVQgbW9kZQorCSAqLworCW1vdiByMSwgIzB4ODEgICAgICAgICAgICAgICAvKiBTZXQgQVJNOTI1VCBjb25maWd1cmF0aW9uLiAqLworCW1jciBwMTUsIDAsIHIxLCBjMTUsIGMxLCAwICAvKiBXcml0ZSBBUk05MjVUIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuICovCisKKwkvKiAKKwkgKiB0dXJuIG9mZiB0aGUgd2F0Y2hkb2csIHVubG9jay9kaWFibGUgc2VxdWVuY2UKKwkgKi8KKwltb3YgIHIxLCAjMHhGNQorCWxkciAgcjAsID1XRFRJTV9NT0RFCisJc3RyaCByMSwgW3IwXQorCW1vdiAgcjEsICMweEEwCisJc3RyaCByMSwgW3IwXQorCisJLyoKKwkgKiBtYXNrIGFsbCBJUlFzIGJ5IHNldHRpbmcgYWxsIGJpdHMgaW4gdGhlIElOVE1SIC0gZGVmYXVsdAorCSAqLworCW1vdiByMSwgIzB4ZmZmZmZmZmYKKwlsZHIgcjAsID1SRUdfSUhMMV9NSVIKKwlzdHIgcjEsIFtyMF0KKwlsZHIgcjAsID1SRUdfSUhMMl9NSVIKKwlzdHIgcjEsIFtyMF0KKworCS8qIAorCSAqIHdhaXQgZm9yIGRwbGwgdG8gbG9jaworCSAqLyAgICAgICAKKwlsZHIgIHIwLCA9Q0tfRFBMTDEKKwltb3YgIHIxLCAjMHgxMAorCXN0cmggcjEsIFtyMF0KK3BvbGwxOgorCWxkcmggcjEsIFtyMF0KKwlhbmRzIHIxLCByMSwgIzB4MDEKKwliZXEgcG9sbDEKKwlibCAgY3B1X2luaXRfY3JpdAorCityZWxvY2F0ZToKKwkvKgorCSAqIHJlbG9jYXRlIGFybWJvb3QgdG8gUkFNCisJICovCisJYWRyCXIwLCBfc3RhcnQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAqLworCWxkcglyMiwgX2FybWJvb3Rfc3RhcnQKKwlsZHIJcjMsIF9hcm1ib290X2VuZAorCXN1YglyMiwgcjMsIHIyCQkvKiByMiA8LSBzaXplIG9mIGFybWJvb3QgKi8KKwlsZHIJcjEsIF9URVhUX0JBU0UJCS8qIHIxIDwtIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwlhZGQJcjIsIHIwLCByMgkJLyogcjIgPC0gc291cmNlIGVuZCBhZGRyZXNzICovCisKKwkvKgorCSAqIHIwID0gc291cmNlIGFkZHJlc3MKKwkgKiByMSA9IHRhcmdldCBhZGRyZXNzCisJICogcjIgPSBzb3VyY2UgZW5kIGFkZHJlc3MKKwkgKi8KK2NvcHlfbG9vcDoKKwlsZG1pYQlyMCEsIHtyMy1yMTB9CisJc3RtaWEJcjEhLCB7cjMtcjEwfQorCWNtcAlyMCwgcjIKKwlibGUJY29weV9sb29wCisKKwkvKiBzZXQgdXAgdGhlIHN0YWNrICovCisJbGRyCXIwLCBfYXJtYm9vdF9lbmQKKwlhZGQJcjAsIHIwLCAjQ09ORklHX1NUQUNLU0laRQorCXN1YglzcCwgcjAsICMxMgkJLyogbGVhdmUgMyB3b3JkcyBmb3IgYWJvcnQtc3RhY2sgKi8KKworCWxkcglwYywgX3N0YXJ0X2FybWJvb3QKKworX3N0YXJ0X2FybWJvb3Q6CS53b3JkIHN0YXJ0X2FybWJvb3QKKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDUFVfaW5pdF9jcml0aWNhbCByZWdpc3RlcnMKKyAqCisgKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCisgKiBzZXR1cCBtZW1vcnkgdGltaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisKK2NwdV9pbml0X2NyaXQ6CisJLyoKKwkgKiBmbHVzaCB2NCBJL0QgY2FjaGVzCisJICovCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAJLyogZmx1c2ggdjMvdjQgY2FjaGUgKi8KKwltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCS8qIGZsdXNoIHY0IFRMQiAqLworCisJLyoKKwkgKiBkaXNhYmxlIE1NVSBzdHVmZiBhbmQgY2FjaGVzCisJICovCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAorCWJpYwlyMCwgcjAsICMweDAwMDAyMzAwCUAgY2xlYXIgYml0cyAxMywgOTo4ICgtLVYtIC0tUlMpCisJYmljCXIwLCByMCwgIzB4MDAwMDAwODcJQCBjbGVhciBiaXRzIDcsIDI6MCAoQi0tLSAtQ0FNKQorCW9ycglyMCwgcjAsICMweDAwMDAwMDAyCUAgc2V0IGJpdCAyIChBKSBBbGlnbgorCW9ycglyMCwgcjAsICMweDAwMDAxMDAwCUAgc2V0IGJpdCAxMiAoSSkgSS1DYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKworCS8qCisJICogR28gc2V0dXAgTWVtb3J5IGFuZCBib2FyZCBzcGVjaWZpYyBiaXRzIHByaW9yIHRvIHJlbG9jYXRpb24uCisJICovCisJbW92CWlwLCBsciAgICAgICAgICAvKiBwZXJzZXJ2ZSBsaW5rIHJlZyBhY3Jvc3MgY2FsbCAqLworCWJsCXBsYXRmb3Jtc2V0dXAgICAvKiBnbyBzZXR1cCBwbGwsbXV4LG1lbW9yeSAqLworCW1vdglsciwgaXAgICAgICAgICAgLyogcmVzdG9yZSBsaW5rICovCisJbW92CXBjLCBsciAgICAgICAgICAvKiBiYWNrIHRvIG15IGNhbGxlciAqLworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSW50ZXJydXB0IGhhbmRsaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitACitAIElSUSBzdGFjayBmcmFtZS4KK0AKKyNkZWZpbmUgU19GUkFNRV9TSVpFCTcyCisKKyNkZWZpbmUgU19PTERfUjAJNjgKKyNkZWZpbmUgU19QU1IJCTY0CisjZGVmaW5lIFNfUEMJCTYwCisjZGVmaW5lIFNfTFIJCTU2CisjZGVmaW5lIFNfU1AJCTUyCisKKyNkZWZpbmUgU19JUAkJNDgKKyNkZWZpbmUgU19GUAkJNDQKKyNkZWZpbmUgU19SMTAJCTQwCisjZGVmaW5lIFNfUjkJCTM2CisjZGVmaW5lIFNfUjgJCTMyCisjZGVmaW5lIFNfUjcJCTI4CisjZGVmaW5lIFNfUjYJCTI0CisjZGVmaW5lIFNfUjUJCTIwCisjZGVmaW5lIFNfUjQJCTE2CisjZGVmaW5lIFNfUjMJCTEyCisjZGVmaW5lIFNfUjIJCTgKKyNkZWZpbmUgU19SMQkJNAorI2RlZmluZSBTX1IwCQkwCisKKyNkZWZpbmUgTU9ERV9TVkMgMHgxMworI2RlZmluZSBJX0JJVAkgMHg4MAorCisvKgorICogdXNlIGJhZF9zYXZlX3VzZXJfcmVncyBmb3IgYWJvcnQvcHJlZmV0Y2gvdW5kZWYvc3dpIC4uLgorICogdXNlIGlycV9zYXZlX3VzZXJfcmVncyAvIGlycV9yZXN0b3JlX3VzZXJfcmVncyBmb3IgSVJRL0ZJUSBoYW5kbGluZworICovCisKKwkubWFjcm8JYmFkX3NhdmVfdXNlcl9yZWdzCisJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRSAgICAgICAgICAgQCBjYXJ2ZSBvdXQgYSBmcmFtZSBvbiBjdXJyZW50IHVzZXIgc3RhY2sKKwlzdG1pYQlzcCwge3IwIC0gcjEyfQkJCUAgU2F2ZSB1c2VyIHJlZ2lzdGVycyAobm93IGluIHN2YyBtb2RlKSByMC1yMTIKKworCWxkcglyMiwgX2FybWJvb3RfZW5kICAgICAgICAgICAgICAgIEAgZmluZCB0b3Agb2Ygc3RhY2sKKwlhZGQJcjIsIHIyLCAjQ09ORklHX1NUQUNLU0laRSAgICAgICBAIGZpbmQgYmFzZSBvZiBub3JtYWwgc3RhY2sKKwlzdWIJcjIsIHIyLCAjOCAgICAgICAgICAgICAgICAgICAgICBAIHNldCBiYXNlIDIgd29yZHMgaW50byBhYm9ydCBzdGFjaworCWxkbWlhCXIyLCB7cjIgLSByM30gICAgICAgICAgICAgICAgICAgQCBnZXQgdmFsdWVzIGZvciAiYWJvcnRlZCIgcGMgYW5kIGNwc3IgKGludG8gcGFybSByZWdzKQorCWFkZAlyMCwgc3AsICNTX0ZSQU1FX1NJWkUJCUAgZ3JhYiBwb2ludGVyIHRvIG9sZCBzdGFjaworCisJYWRkCXI1LCBzcCwgI1NfU1AKKwltb3YJcjEsIGxyCisJc3RtaWEJcjUsIHtyMCAtIHIzfSAgICAgICAgICAgICAgICAgICBAIHNhdmUgc3BfU1ZDLCBscl9TVkMsIHBjLCBjcHNyCisJbW92CXIwLCBzcCAgICAgICAgICAgICAgICAgICAgICAgICAgQCBzYXZlIGN1cnJlbnQgc3RhY2sgaW50byByMCAocGFyYW0gcmVnaXN0ZXIpCisJLmVuZG0KKworCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKKwlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCisJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIENhbGxpbmcgcjAtcjEyCisJYWRkICAgICByOCwgc3AsICNTX1BDICAgICAgICAgICAgICAgICAgIEAgISEhISBSOCBORUVEUyB0byBiZSBzYXZlZCAhISEhIGEgcmVzZXJ2ZWQgc3RhY2sgc3BvdCB3b3VsZCBiZSBnb29kLgorCXN0bWRiICAgcjgsIHtzcCwgbHJ9XiAgICAgICAgICAgICAgICAgICBAIENhbGxpbmcgU1AsIExSCisJc3RyICAgICBsciwgW3I4LCAjMF0gICAgICAgICAgICAgICAgICAgIEAgU2F2ZSBjYWxsaW5nIFBDCisJbXJzICAgICByNiwgc3BzcgorCXN0ciAgICAgcjYsIFtyOCwgIzRdICAgICAgICAgICAgICAgICAgICBAIFNhdmUgQ1BTUgorCXN0ciAgICAgcjAsIFtyOCwgIzhdICAgICAgICAgICAgICAgICAgICBAIFNhdmUgT0xEX1IwCisJbW92CXIwLCBzcAorCS5lbmRtCisKKwkubWFjcm8JaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCisJbGRtaWEJc3AsIHtyMCAtIGxyfV4JCQlAIENhbGxpbmcgcjAgLSBscgorCW1vdglyMCwgcjAKKwlsZHIJbHIsIFtzcCwgI1NfUENdCQkJQCBHZXQgUEMKKwlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFCisJc3VicwlwYywgbHIsICM0CQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgorCS5lbmRtCisKKwkubWFjcm8gZ2V0X2JhZF9zdGFjaworCWxkcglyMTMsIF9hcm1ib290X2VuZAkJQCBnZXQgYm90dG9tIG9mIHN0YWNrIChpbnRvIHNwIGJ5IGJ5IHVzZXIgc3RhY2sgcG9pbnRlcikuCisJYWRkCXIxMywgcjEzLCAjQ09ORklHX1NUQUNLU0laRQlAIGhlYWQgdG8gcmVzZXJ2ZWQgd29yZHMgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sKKwlzdWIJcjEzLCByMTMsICM4ICAgICAgICAgICAgICAgICAgICBAIHJlc2VydmVkIGEgY291cGxlIHNwb3RzIGluIGFib3J0IHN0YWNrCisKKwlzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGNhbGxlciBsciBpbiBwb3NpdGlvbiAwIG9mIHNhdmVkIHN0YWNrCisJbXJzCWxyLCBzcHNyICAgICAgICAgICAgICAgICAgICAgICAgQCBnZXQgdGhlIHNwc3IKKwlzdHIgICAgIGxyLCBbcjEzLCAjNF0gICAgICAgICAgICAgICAgICAgQCBzYXZlIHNwc3IgaW4gcG9zaXRpb24gMSBvZiBzYXZlZCBzdGFjaworCisJbW92CXIxMywgI01PREVfU1ZDCQkJQCBwcmVwYXJlIFNWQy1Nb2RlCisJQCBtc3IJc3Bzcl9jLCByMTMKKwltc3IJc3BzciwgcjEzICAgICAgICAgICAgICAgICAgICAgICBAIHN3aXRjaCBtb2RlcywgbWFrZSBzdXJlIG1vdmVzIHdpbGwgZXhlY3V0ZQorCW1vdglsciwgcGMgICAgICAgICAgICAgICAgICAgICAgICAgIEAgY2FwdHVyZSByZXR1cm4gcGMKKwltb3ZzCXBjLCBsciAgICAgICAgICAgICAgICAgICAgICAgICAgQCBqdW1wIHRvIG5leHQgaW5zdHJ1Y3Rpb24gJiBzd2l0Y2ggbW9kZXMuCisJLmVuZG0KKworCS5tYWNybyBnZXRfaXJxX3N0YWNrCQkJQCBzZXR1cCBJUlEgc3RhY2sKKwlsZHIJc3AsIElSUV9TVEFDS19TVEFSVAorCS5lbmRtCisKKwkubWFjcm8gZ2V0X2ZpcV9zdGFjawkJCUAgc2V0dXAgRklRIHN0YWNrCisJbGRyCXNwLCBGSVFfU1RBQ0tfU1RBUlQKKwkuZW5kbQorCisvKgorICogZXhjZXB0aW9uIGhhbmRsZXJzCisgKi8KKwkuYWxpZ24gIDUKK3VuZGVmaW5lZF9pbnN0cnVjdGlvbjoKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwgCWRvX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgorCisJLmFsaWduCTUKK3NvZnR3YXJlX2ludGVycnVwdDoKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwgCWRvX3NvZnR3YXJlX2ludGVycnVwdAorCisJLmFsaWduCTUKK3ByZWZldGNoX2Fib3J0OgorCWdldF9iYWRfc3RhY2sKKwliYWRfc2F2ZV91c2VyX3JlZ3MKKwlibCAJZG9fcHJlZmV0Y2hfYWJvcnQKKworCS5hbGlnbgk1CitkYXRhX2Fib3J0OgorCWdldF9iYWRfc3RhY2sKKwliYWRfc2F2ZV91c2VyX3JlZ3MKKwlibCAJZG9fZGF0YV9hYm9ydAorCisJLmFsaWduCTUKK25vdF91c2VkOgorCWdldF9iYWRfc3RhY2sKKwliYWRfc2F2ZV91c2VyX3JlZ3MKKwlibCAJZG9fbm90X3VzZWQKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisKKwkuYWxpZ24JNQoraXJxOgorCWdldF9pcnFfc3RhY2sKKwlpcnFfc2F2ZV91c2VyX3JlZ3MKKwlibCAJZG9faXJxCisJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCisKKwkuYWxpZ24JNQorZmlxOgorCWdldF9maXFfc3RhY2sKKwkvKiBzb21lb25lIG91Z2h0IHRvIHdyaXRlIGEgbW9yZSBlZmZpY3Rpb24gZmlxX3NhdmVfdXNlcl9yZWdzICovCisJaXJxX3NhdmVfdXNlcl9yZWdzCisJYmwgCWRvX2ZpcQorCWlycV9yZXN0b3JlX3VzZXJfcmVncworCisjZWxzZQorCisJLmFsaWduCTUKK2lycToKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwgCWRvX2lycQorCisJLmFsaWduCTUKK2ZpcToKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwgCWRvX2ZpcQorCisjZW5kaWYKKworCS5hbGlnbgk1CisuZ2xvYmwgcmVzZXRfY3B1CityZXNldF9jcHU6CisJbGRyCXIxLCByc3RjdGwxICAgICAvKiBnZXQgY2xrbTEgcmVzZXQgY3RsICovCisJbW92ICAgICByMywgIzB4MCAgICAgICAgCisJc3RyaAlyMywgW3IxXSAgICAgICAgLyogY2xlYXIgaXQgKi8KKwltb3YgICAgIHIzLCAjMHg4CisJc3RyaCAgICByMywgW3IxXSAgICAgICAgLyogZm9yY2UgZHNwK2FybSByZXNldCAqLworX2xvb3BfZm9yZXZlcjoKKwliCV9sb29wX2ZvcmV2ZXIKK3JzdGN0bDE6CisJLndvcmQJMHhmZmZlY2UxMAo=