ZGlmZiAtLWdpdCBhL3NyYy9HdmltRXh0L01ha2VmaWxlIGIvc3JjL0d2aW1FeHQvTWFrZWZpbGUKaW5kZXggZDFiZDJkMS4uZjlkZGRmNiAxMDA2NDQKLS0tIGEvc3JjL0d2aW1FeHQvTWFrZWZpbGUKKysrIGIvc3JjL0d2aW1FeHQvTWFrZWZpbGUKQEAgLTE2LDggKzE2LDkgQEAKIAogZ3ZpbWV4dC5kbGw6ICAgIGd2aW1leHQub2JqCVwKIAkJZ3ZpbWV4dC5yZXMKLSAgJChpbXBsaWIpIC9OT0xPR08gLW1hY2hpbmU6JChDUFUpIC1kZWY6Z3ZpbWV4dC5kZWYgJCoqIC1vdXQ6Z3ZpbWV4dC5saWIKLSAgJChsaW5rKSAkKGRsbGxmbGFncykgLWJhc2U6MHgxQzAwMDAwMCAtb3V0OiQqLmRsbCAkKiogJChvbGVsaWJzZGxsKSBzaGVsbDMyLmxpYiBndmltZXh0LmxpYiBjb21jdGwzMi5saWIgZ3ZpbWV4dC5leHAKKyMgJChpbXBsaWIpIC9OT0xPR08gLW1hY2hpbmU6JChDUFUpIC1kZWY6Z3ZpbWV4dC5kZWYgJCoqIC1vdXQ6Z3ZpbWV4dC5saWIKKyMgJChsaW5rKSAkKGRsbGxmbGFncykgLWJhc2U6MHgxQzAwMDAwMCAtb3V0OiQqLmRsbCAkKiogJChvbGVsaWJzZGxsKSBzaGVsbDMyLmxpYiBndmltZXh0LmxpYiBjb21jdGwzMi5saWIgZ3ZpbWV4dC5leHAKKyAgJChsaW5rKSAkKGxmbGFncykgLWRsbCAtZGVmOmd2aW1leHQuZGVmIC1iYXNlOjB4MUMwMDAwMDAgLW91dDokKi5kbGwgJCoqICQob2xlbGlic2RsbCkgc2hlbGwzMi5saWIgY29tY3RsMzIubGliCiAKIGd2aW1leHQub2JqOiBndmltZXh0LmgKIApkaWZmIC0tZ2l0IGEvc3JjL0d2aW1FeHQvZ3ZpbWV4dC5oIGIvc3JjL0d2aW1FeHQvZ3ZpbWV4dC5oCmluZGV4IDVlYjUwMDQuLmQ2ODgwNzMgMTAwNjQ0Ci0tLSBhL3NyYy9HdmltRXh0L2d2aW1leHQuaAorKysgYi9zcmMvR3ZpbUV4dC9ndmltZXh0LmgKQEAgLTMzLDYgKzMzLDEyIEBACiAKICNkZWZpbmUgSU5DX09MRTIJLy8gV0lOMzIsIGdldCBvbGUyIGZyb20gd2luZG93cy5oCiAKKy8qIFZpc3VhbCBTdHVkaW8gMjAwNSBoYXMgJ2RlcHJlY2F0ZWQnIG1hbnkgb2YgdGhlIHN0YW5kYXJkIENSVCBmdW5jdGlvbnMgKi8KKyNpZiBfTVNDX1ZFUiA+PSAxNDAwCisjIGRlZmluZSBfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUKKyMgZGVmaW5lIF9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUKKyNlbmRpZgorCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHdpbmRvd3N4Lmg+CiAjaW5jbHVkZSA8c2hsb2JqLmg+CmRpZmYgLS1naXQgYS9zcmMvR3ZpbUV4dC9ndmltZXh0LnJjIGIvc3JjL0d2aW1FeHQvZ3ZpbWV4dC5yYwppbmRleCAxOWE1ZDBjLi4yMjEwMmRiIDEwMDY0NAotLS0gYS9zcmMvR3ZpbUV4dC9ndmltZXh0LnJjCisrKyBiL3NyYy9HdmltRXh0L2d2aW1leHQucmMKQEAgLTgsNyArOCw3IEBACiAvLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4KIC8vCiAjaWZuZGVmIF9fQk9STEFORENfXwotIyBpbmNsdWRlICJhZnhyZXMuaCIKKyMgaW5jbHVkZSAid2lucmVzcmMuaCIKICNlbmRpZgogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvc3JjL0lOU1RBTExwYy50eHQgYi9zcmMvSU5TVEFMTHBjLnR4dAppbmRleCBkMjIwZTBlLi4xMDZjNzY3IDEwMDY0NAotLS0gYS9zcmMvSU5TVEFMTHBjLnR4dAorKysgYi9zcmMvSU5TVEFMTHBjLnR4dApAQCAtMywzNSArMywzNDcgQEAKIFRoaXMgZmlsZSBjb250YWlucyBpbnN0cnVjdGlvbnMgZm9yIGNvbXBpbGluZyBWaW0uIElmIHlvdSBhbHJlYWR5IGhhdmUgYW4KIGV4ZWN1dGFibGUgdmVyc2lvbiBvZiBWaW0sIHlvdSBkb24ndCBuZWVkIHRoaXMuCiAKLU1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGhlcmU6CitNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBoZXJlOiAoVmVyeSBzdGFsZSBub3cuKQogCi0JaHR0cDovL215d2VicGFnZS5uZXRzY2FwZS5jb20vc2hhcnBwZW9wbGUvdmltL2hvd3RvLworICAgIGh0dHA6Ly9teXdlYnBhZ2UubmV0c2NhcGUuY29tL3NoYXJwcGVvcGxlL3ZpbS9ob3d0by8KIAogVGhlIGZpbGUgImZlYXR1cmUuaCIgY2FuIGJlIGVkaXRlZCB0byBtYXRjaCB5b3VyIHByZWZlcmVuY2VzLiBZb3UgY2FuIHNraXAKIHRoaXMsIHRoZW4geW91IHdpbGwgZ2V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFzIGlzIGRvY3VtZW50ZWQsIHdoaWNoIHNob3VsZAogYmUgZmluZSBmb3IgbW9zdCBwZW9wbGUuCiAKK1dpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgbGFzdCB0d28gc2VjdGlvbnMgKFdpbmRvd3MgMy4xIGFuZCBNUy1ET1MpLAordGhpcyBkb2N1bWVudCBhc3N1bWVzIHRoYXQgeW91IGFyZSBidWlsZGluZyBWaW0gZm9yIFdpbjMyCisoV2luZG93cyBOVC8yMDAwL1hQLzIwMDMvVmlzdGEgYW5kIFdpbmRvd3MgOTUvOTgvTWUpCisKIAogQ29udGVudHM6Ci0xLiBNUy1ET1MKLTIuIFdpbjMyIChXaW5kb3dzIFhQL05UIGFuZCBXaW5kb3dzIDk1Lzk4KQotMy4gV2luZG93cyBOVCB3aXRoIE9wZW5OVAotNC4gV2luZG93cyAzLjEKLTUuIFVzaW5nIE1pbmd3Ci02LiBDcm9zcyBjb21waWxpbmcgZm9yIFdpbjMyIGZyb20gYSBMaW51eCBtYWNoaW5lCi03LiBCdWlsZGluZyB3aXRoIFB5dGhvbiBzdXBwb3J0Ci04LiBCdWlsZGluZyB3aXRoIE16U2NoZW1lIHN1cHBvcnQKKzEuIE1pY3Jvc29mdCBWaXN1YWwgQysrCisyLiBVc2luZyBNaW5HVworMy4gQ3lnd2luCis0LiBCb3JsYW5kCis1LiBDcm9zcyBjb21waWxpbmcgZm9yIFdpbjMyIGZyb20gYSBMaW51eCBtYWNoaW5lCis2LiBCdWlsZGluZyB3aXRoIFB5dGhvbiBzdXBwb3J0Cis3LiBCdWlsZGluZyB3aXRoIE16U2NoZW1lIHN1cHBvcnQKKzguIFdpbmRvd3MgMy4xCis5LiBNUy1ET1MKKworVGhlIGN1cnJlbnRseSBwcmVmZXJyZWQgbWV0aG9kIGlzIHVzaW5nIHRoZSBmcmVlIFZpc3VhbCBDKysgVG9vbGtpdCAyMDAzLgogCiAKLTEuIE1TLURPUworMS4gTWljcm9zb2Z0IFZpc3VhbCBDKysKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1Zpc3VhbCBTdHVkaW8KKy0tLS0tLS0tLS0tLS0KKworQnVpbGRpbmcgd2l0aCBWaXN1YWwgU3R1ZGlvIChWUyA5OCwgVlMgLk5FVCwgVlMgLk5FVCAyMDAzLCBhbmQgVlMgLk5FVCAyMDA1KQoraXMgc3RyYWlnaHRmb3J3YXJkLiAoVGhlc2UgaW5zdHJ1Y3Rpb25zIHNob3VsZCBhbHNvIHdvcmsgZm9yIFZTIDQgYW5kIFZTIDUuKQorCitUbyBidWlsZCBWaW0gZnJvbSB0aGUgY29tbWFuZCBsaW5lIHdpdGggTVNWQywgdXNlIE1ha2VfbXZjLm1hay4KK1Zpc3VhbCBTdHVkaW8gaW5zdGFsbGVkIGEgYmF0Y2ggZmlsZSBjYWxsZWQgdmN2YXJzMzIuYmF0LCB3aGljaCB5b3UgbXVzdAorcnVuIHRvIHNldCB1cCBwYXRocyBmb3Igbm1ha2UgYW5kIE1TVkMuCisKK25tYWtlIC1mIE1ha2VfbXZjLm1hayAgICAgICAgICAgY29uc29sZSAgIFdpbjMyIFNESyBvciBNaWNyb3NvZnQgVmlzdWFsIEMrKworbm1ha2UgLWYgTWFrZV9tdmMubWFrIEdVST15ZXMgICBHVUkgICAgICAgTWljcm9zb2Z0IFZpc3VhbCBDKysKK25tYWtlIC1mIE1ha2VfbXZjLm1hayBPTEU9eWVzICAgT0xFICAgICAgIE1pY3Jvc29mdCBWaXN1YWwgQysrCitubWFrZSAtZiBNYWtlX212Yy5tYWsgUEVSTD1DOlxQZXJsIFBZVEhPTj1DOlxQeXRob24gZXRjLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZXJsLCBQeXRob24sIGV0Yy4KKworTWFrZV9tdmMubWFrIGFsbG93cyBhIFZpbSB0byBiZSBidWlsdCB3aXRoIHZhcmlvdXMgZGlmZmVyZW50IGZlYXR1cmVzIGFuZAorZGVidWcgc3VwcG9ydC4gIERlYnVnZ2luZyB3aXRoIE1TIERldnN0dWRpbyBpcyBwcm92aWRlZCBieSBNYWtlX2R2Yy5tYWsuCitGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdXNlIG9mIE1ha2VfZHZjLm1haywgbG9vayBpbiBNYWtlX212Yy5tYWsuCisKK0ZvciBjb21waWxpbmcgR3ZpbSB3aXRoIElNRSBzdXBwb3J0IG9uIGZhci1lYXN0IFdpbmRvd3MsIGFkZCBJTUU9eWVzCit0byB0aGUgcGFyYW1ldGVycyB5b3UgcGFzcyB0byBNYWtlX212Yy5tYWsuCisKK1RvIGJ1aWxkIFZpbSBmcm9tIHdpdGhpbiB0aGUgVmlzdWFsIFN0dWRpbyBJREUsIG9wZW4gdGhlIE1ha2VfaXZjLm1hayBwcm9qZWN0LgorKE5vdGU6IE1ha2VfaXZjLm1hayBpcyBub3QgYXMgcmljaCBhcyBNYWtlX212Yy5tYWssIHdoaWNoIGFsbG93cyBmb3IKK2ZhciBtb3JlIGNvbmZpZ3VyYXRpb24uKSBNYWtlX2l2Yy5tYWsgY2FuIGFsc28gYmUgYnVpbHQgd2l0aCBubWFrZS4KKworbm1ha2UgLWYgTWFrZV9pdmMubWFrIENGRz0iVmltIC0gV2luMzIgUmVsZWFzZSBndmltIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVUkgICAgICAgTWljcm9zb2Z0IFZpc3VhbCBDKysgNC54IG9yIGxhdGVyCitubWFrZSAtZiBNYWtlX2l2Yy5tYWsgQ0ZHPSJWaW0gLSBXaW4zMiBSZWxlYXNlIGd2aW0gT0xFIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTEUgICAgICAgTWljcm9zb2Z0IFZpc3VhbCBDKysgNC54IG9yIGxhdGVyCisKK1NlZSB0aGUgc3BlY2lmaWMgZmlsZXMgZm9yIGNvbW1lbnRzIGFuZCBvcHRpb25zLgorCitUaGVzZSBmaWxlcyBoYXZlIGJlZW4gc3VwcGxpZWQgYnkgR2VvcmdlIFYuIFJlaWxseSwgQmVuIFNpbmdlciwgS2VuIFNjb3R0IGFuZAorUm9uIEFhcm9uOyB0aGV5IGhhdmUgYmVlbiB0ZXN0ZWQuCisKKworVmlzdWFsIEMrKyBUb29sa2l0IDIwMDMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gZG93bmxvYWQgdGhlIE1pY3Jvc29mdCBWaXN1YWwgQysrIFRvb2xraXQgMjAwMyBmcm9tCisgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS92aXN1YWxjL3ZjdG9vbGtpdDIwMDMvCitUaGlzIGNvbnRhaW5zIHRoZSBjb21tYW5kLWxpbmUgdG9vbHMgKGNvbXBpbGVyLCBsaW5rZXIsIENSVCBoZWFkZXJzLAorYW5kIGxpYnJhcmllcykgZm9yIFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzLCBidXQgbm90IHRoZSBWaXN1YWwgU3R1ZGlvIElERS4KK1RvIGNvbXBpbGUgYW5kIGRlYnVnIFZpbSB3aXRoIHRoZSBWQzIwMDMgVG9vbGtpdCwgeW91IHdpbGwgYWxzbyBuZWVkCit8bXMtcGxhdGZvcm0tc2RrfCwgfGRvdG5ldC0xLjEtcmVkaXN0fCwgfGRvdG5ldC0xLjEtc2RrfCwKK2FuZCB8d2luZGJnLWRvd25sb2FkfC4KKworSXQncyBlYXNpZXIgdG8gZG93bmxvYWQgVmlzdWFsIEMrKyAyMDA1IEV4cHJlc3MgRWRpdGlvbiwgfG1zdmMtMjAwNS1leHByZXNzfC4KK1RoZSBhZHZhbnRhZ2Ugb2YgdGhlIFZDIDIwMDMgVG9vbGtpdCBpcyB0aGF0IGl0IHdpbGwgYmUgZnJlZWx5IGF2YWlsYWJsZQorbG9uZyBhZnRlciBWQyAyMDA1IEV4cHJlc3MgRWRpdGlvbiBzdG9wcyBiZWluZyBmcmVlIGluIE5vdmVtYmVyIDIwMDYuCisKK1RoZSBmcmVlIENvZGU6OkJsb2NrcyBJREUgd29ya3Mgd2l0aCB0aGUgVkMyMDAzIFRvb2xraXQsIGFzIGRlc2NyaWJlZCBhdAorICAgIGh0dHA6Ly93aWtpLmNvZGVibG9ja3Mub3JnL2luZGV4LnBocD90aXRsZT1JbnRlZ3JhdGluZ19NaWNyb3NvZnRfVmlzdWFsX1Rvb2xraXRfMjAwM193aXRoX0NvZGU6OkJsb2Nrc19JREUKKyhUaGlzIHNpdGUgYWxzbyB0YWtlcyB5b3UgdGhyb3VnaCBjb25maWd1cmluZyBhIG51bWJlciBvZiBvdGhlcgorZnJlZSBDIGNvbXBpbGVycyBmb3IgV2luMzIuKQorCitUbyBjb21waWxlIFZpbSB1c2luZyB0aGUgVkMyMDAzIFRvb2xraXQgYW5kIE1ha2VfbXZjLm1haywgeW91IG11c3QgZmlyc3QKK2V4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBpbiBhIGNtZC5leGUgd2luZG93ICh0aGUgbXN2Y3NldHVwLmJhdCBiYXRjaAorZmlsZSBjYW4gYmUgdXNlZCk6CisgICAgICAgCisgICAgc2V0IFBBVEg9JVN5c3RlbVJvb3QlXE1pY3Jvc29mdC5ORVRcRnJhbWV3b3JrXHYxLjEuNDMyMjslUEFUSCUKKyAgICBjYWxsICIlVkNUb29sa2l0SW5zdGFsbERpciV2Y3ZhcnMzMi5iYXQiCisgICAgc2V0IE1TVkNWZXI9Ny4xCisgICAgY2FsbCAiJVByb2dyYW1GaWxlcyVcTWljcm9zb2Z0IFBsYXRmb3JtIFNES1xTZXRFbnYuQ21kIgorICAgIHNldCBMSUI9JVByb2dyYW1GaWxlcyVcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzXFZjN1xsaWI7JUxJQiUKKworTm93IHlvdSBjYW4gYnVpbGQgVmltIHdpdGggTWFrZV9tdmMubWFrLgorCisKK0dldHRpbmcgdGhlIFdpbmRvd3MgUGxhdGZvcm0gU0RLICAgICAgICAgICAgKm1zLXBsYXRmb3JtLXNkayoKKworWW91IHdpbGwgYWxzbyBuZWVkIGEgY29weSBvZiB0aGUgV2luZG93cyBQbGF0Zm9ybSBTREsgZnJvbQorICAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9tc2Rvd25sb2FkL3BsYXRmb3Jtc2RrL3Nka3VwZGF0ZS8KK1NwZWNpZmljYWxseSwgeW91IG5lZWQgdGhlIFdpbmRvd3MgQ29yZSBTREsgc3Vic2V0IG9mIHRoZSBQbGF0Zm9ybSBTREssCit3aGljaCBjb250YWlucyB0aGUgV2luZG93cyBoZWFkZXJzIGFuZCBsaWJyYXJpZXMuCisKKworR2V0dGluZyB0aGUgLk5FVCBGcmFtZXdvcmsgMS4xIFJ1bnRpbWUgICAgICAqZG90bmV0LTEuMS1yZWRpc3QqCisKK1lvdSBuZWVkIHRoZSAuTkVUIEZyYW1ld29yayAxLjEgUmVkaXN0cmlidXRhYmxlIFBhY2thZ2UgZnJvbQorICAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9kb3dubG9hZHMvZGV0YWlscy5hc3B4P2ZhbWlseWlkPTI2MmQyNWUzLWY1ODktNDg0Mi04MTU3LTAzNGQxZTdjZjNhMworb3IgZnJvbSBXaW5kb3dzIFVwZGF0ZToKKyAgICBodHRwOi8vd2luZG93c3VwZGF0ZS5taWNyb3NvZnQuY29tLworVGhpcyBpcyBuZWVkZWQgdG8gaW5zdGFsbCB8ZG90bmV0LTEuMS1zZGt8LiBJdCBhbHNvIGNvbnRhaW5zIGN2dHJlcy5leGUsCit3aGljaCBpcyBuZWVkZWQgdG8gbGluayBWaW0uCisKKworR2V0dGluZyB0aGUgLk5FVCBGcmFtZXdvcmsgMS4xIFNESyAgICAgICAgICAqZG90bmV0LTEuMS1zZGsqCisKK1lvdSBuZWVkIHRoZSAuTkVUIEZyYW1ld29yayAxLjEgU0RLIGZyb20KKyAgICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZG93bmxvYWRzL2RldGFpbHMuYXNweD9mYW1pbHlpZD05YjNhMmNhNi0zNjQ3LTQwNzAtOWY0MS1hMzMzYzZiOTE4MWQKK1RoaXMgY29udGFpbnMgc29tZSBhZGRpdGlvbmFsIGxpYnJhcmllcyBuZWVkZWQgdG8gY29tcGlsZSBWaW0sCitzdWNoIGFzIG1zdmNydC5saWIuIFlvdSBtdXN0IGluc3RhbGwgfGRvdG5ldC0xLjEtcmVkaXN0fCBiZWZvcmUKK2luc3RhbGxpbmcgdGhlIC5ORVQgMS4xIFNESy4KKworCitHZXR0aW5nIHRoZSBXaW5EYmcgZGVidWdnZXIgICAgICAgICAgICAgICAgICp3aW5kYmctZG93bmxvYWQqCisKK1RoZSBEZWJ1Z2dpbmcgVG9vbHMgZm9yIFdpbmRvd3MgY2FuIGJlIGRvd25sb2FkZWQgZnJvbQorICAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS93aGRjL2RldnRvb2xzL2RlYnVnZ2luZy9kZWZhdWx0Lm1zcHgKK1RoaXMgaW5jbHVkZXMgdGhlIFdpbkRiZyBkZWJ1Z2dlciwgd2hpY2ggeW91IHdpbGwgd2FudCBpZiB5b3UgZXZlciBuZWVkCit0byBkZWJ1ZyBWaW0gaXRzZWxmLiBBbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhlIERlYnVnZ2luZyBUb29scworaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgUGxhdGZvcm0gU0RLLCB8bXMtcGxhdGZvcm0tc2RrfC4KKworCitWaXN1YWwgQysrIDIwMDUgRXhwcmVzcyBFZGl0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Zpc3VhbCBDKysgMjAwNSBFeHByZXNzIEVkaXRpb24gY2FuIGJlIGRvd25sb2FkZWQgZm9yIGZyZWUKK2JlZm9yZSBOb3ZlbWJlciAyMDA2IGZyb20KKyAgICBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL3ZzdHVkaW8vZXhwcmVzcy92aXN1YWxDL2RlZmF1bHQuYXNweAorVGhpcyBpbmNsdWRlcyB0aGUgSURFIGFuZCB0aGUgZGVidWdnZXIuIFlvdSB3aWxsIGFsc28gbmVlZAorfG1zLXBsYXRmb3JtLXNka3wuIFlvdSBjYW4gYnVpbGQgVmltIHdpdGggTWFrZV9tdmMubWFrLgorCitJbnN0cnVjdGlvbnMgZm9yIGludGVncmF0aW5nIHRoZSBQbGF0Zm9ybSBTREsgaW50byBWQyBFeHByZXNzOgorICAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vdnN0dWRpby9leHByZXNzL3Zpc3VhbGMvdXNpbmdwc2RrL2RlZmF1bHQuYXNweAorCisKKzIuIE1pbkdXCis9PT09PT09PQorCisod3JpdHRlbiBieSBSb24gQWFyb246IDxyb25haGFyb25AeWFob28uY29tPikKKworVGhpcyBpcyBhYm91dCBob3cgdG8gcHJvZHVjZSBhIFdpbjMyIGJpbmFyeSBvZiBndmltIHdpdGggTWluR1cuCisKK0ZpcnN0LCB5b3UgbmVlZCB0byBnZXQgdGhlICdtaW5ndzMyJyBjb21waWxlciwgd2hpY2ggaXMgZnJlZSBmb3IgdGhlIGRvd25sb2FkCithdDoKKworICAgIGh0dHA6Ly93d3cubWluZ3cub3JnLworCitPbmNlIHlvdSBoYXZlIGRvd25sb2FkZWQgdGhlIGNvbXBpbGVyIGJpbmFyaWVzLCB1bnBhY2sgdGhlbSBvbiB5b3VyIGhhcmQgZGlzaworc29tZXdoZXJlLCBhbmQgcHV0IHRoZW0gb24geW91ciBQQVRILiAgSWYgeW91IGFyZSBvbiBXaW45NS85OCB5b3UgY2FuIGVkaXQKK3lvdXIgQVVUT0VYRUMuQkFUIGZpbGUgd2l0aCBhIGxpbmUgbGlrZToKKworICAgIHNldCBQQVRIPUM6XEdDQy0yLjk1LjJcQklOOyVQQVRIJQorCitvciBvbiBOVC8yMDAwL1hQLCBnbyB0byB0aGUgQ29udHJvbCBQYW5lbCwgKFBlcmZvcm1hbmNlIGFuZCBNYWludGVuYW5jZSksCitTeXN0ZW0sIEFkdmFuY2VkLCBhbmQgZWRpdCB0aGUgZW52aXJvbm1lbnQgZnJvbSB0aGVyZS4KKworVGVzdCBpZiBnY2MgaXMgb24geW91ciBwYXRoLiAgRnJvbSBhIENNRCAob3IgQ09NTUFORCBvbiAnOTUvOTgpIHdpbmRvdzoKKworICAgIEM6XD4gZ2NjIC0tdmVyc2lvbgorICAgIDIuOTUuMgorCisgICAgQzpcPiBtYWtlIC0tdmVyc2lvbgorICAgIEdOVSBNYWtlIHZlcnNpb24gMy43NyAoLi4uZXRjLi4uKQorCitOb3cgeW91IGFyZSByZWFkeSB0byByb2NrICduJyByb2xsLiAgVW5wYWNrIHRoZSB2aW0gc291cmNlcyAobG9vayBvbgord3d3LnZpbS5vcmcgZm9yIGV4YWN0bHkgd2hpY2ggdmVyc2lvbiBvZiB0aGUgdmltIGZpbGVzIHlvdSBuZWVkKS4KKworQ2hhbmdlIGRpcmVjdG9yeSB0byAndmltXHNyYyc6CisKKyAgICBDOlw+IGNkIHZpbVxzcmMKKyAgICBDOlxWSU1cU1JDPgorCithbmQgeW91IHR5cGU6CisKKyAgICBtYWtlIC1mIE1ha2VfbWluZy5tYWsgZ3ZpbS5leGUKKworQWZ0ZXIgY2h1cm5pbmcgZm9yIGEgd2hpbGUsIHlvdSB3aWxsIGVuZCB1cCB3aXRoICdndmltLmV4ZScgaW4gdGhlICd2aW1cc3JjJworZGlyZWN0b3J5LgorCitZb3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGRvICphbnkqIGVkaXRpbmcgb2YgYW55IGZpbGVzIHRvIGdldCB2aW0gY29tcGlsZWQgdGhpcword2F5LiAgSWYsIGZvciBzb21lIHJlYXNvbiwgeW91IHdhbnQgdGhlIGNvbnNvbGUtbW9kZS1vbmx5IHZlcnNpb24gb2YgdmltICh0aGlzCitpcyBOT1QgcmVjb21tZW5kZWQgb24gV2luMzIsIGVzcGVjaWFsbHkgb24gJzk1Lyc5OCEhISksIHlvdSBuZWVkIG9ubHkgY2hhbmdlCit0aGUgJ2d2aW0uZXhlJyB0byAndmltLmV4ZScgaW4gdGhlICdtYWtlJyBjb21tYW5kcyBnaXZlbiBhYm92ZS4KKworSWYgeW91IGFyZSBkaXNtYXllZCBieSBob3cgYmlnIHRoZSBFWEUgaXMsIEkgc3Ryb25nbHkgcmVjb21tZW5kIHlvdSBnZXQgJ1VQWCcKKyhhbHNvIGZyZWUhKSBhbmQgY29tcHJlc3MgdGhlIGZpbGUgKHR5cGljYWwgY29tcHJlc3Npb24gaXMgNTAlKS4gVVBYIGNhbiBiZQorZm91bmQgYXQKKyAgICBodHRwOi8vd3d3LnVweC5vcmcvCisKK0FERElUSU9OOiBOTFMgc3VwcG9ydCB3aXRoIE1pbkdXCisKKyhieSBFZHVhcmRvIEYuIEFtYXRyaWEgPGVmZXJuYTFAcGxhdGVhLnBudGljLm1lYy5lcz4pCisKK0lmIHlvdSB3YW50IE5hdGlvbmFsIExhbmd1YWdlIFN1cHBvcnQsIHJlYWQgdGhlIGZpbGUgc3JjL3BvL1JFQURNRV9taW5ndy50eHQuCitZb3UgbmVlZCB0byB1bmNvbW1lbnQgbGluZXMgaW4gTWFrZV9taW5nLm1hayB0byBoYXZlIE5MUyBkZWZpbmVkLgorCisKKzMuIEN5Z3dpbgorPT09PT09PT09CisKK1VzZSBNYWtlX2N5Zy5tYWsgd2l0aCBDeWd3aW4ncyBHQ0MuIFNlZQorICAgIGh0dHA6Ly91c2Vycy5za3luZXQuYmUvYW50b2luZS5tZWNoZWx5bmNrL3ZpbS9jb21waWxlLmh0bQorCitUaGUgQ3lnbnVzIG9uZSBtYW55IG5vdCBmdWxseSB3b3JrIHlldC4KK1dpdGggQ3lnbnVzIGdjYyB5b3UgY2FuIHVzZSB0aGUgVW5peCBNYWtlZmlsZSBpbnN0ZWFkICh5b3UgbmVlZCB0byBnZXQgdGhlCitVbml4IGFyY2hpdmUgdGhlbikuICBUaGVuIHlvdSBnZXQgYSBDeWd3aW4gYXBwbGljYXRpb24gKGZlZWxzIGxpa2UgVmltIGlzCitydW5uaW4gb24gVW5peCksIHdoaWxlIHdpdGggTWFrZV9jeWcubWFrIHlvdSBnZXQgYSBXaW5kb3dzIGFwcGxpY2F0aW9uIChsaWtlCit3aXRoIHRoZSBvdGhlciBtYWtlZmlsZXMpLgorCisKKzQuIEJvcmxhbmQKKz09PT09PT09PT09CisKK1VzZSBNYWtlX2JjNS5tYWsgd2l0aCBCb3JsYW5kIEMrKyA1LnguIFNlZQorICAgIGh0dHA6Ly91c2Vycy5za3luZXQuYmUvYW50b2luZS5tZWNoZWx5bmNrL3ZpbS9jb21waWxlLmh0bQorCisKKzUuIENyb3NzIGNvbXBpbGluZyBmb3IgV2luMzIgZnJvbSBhIExpbnV4IG1hY2hpbmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworW1VwZGF0ZSBvZiAxKSBuZWVkcyB0byBiZSB2ZXJpZmllZF0KKworSWYgeW91IGxpa2UsIHlvdSBjYW4gY29tcGlsZSB0aGUgJ21pbmd3JyBXaW4zMiB2ZXJzaW9uIGZyb20gdGhlIGNvbWZvcnQgb2YKK3lvdXIgTGludXggKG9yIG90aGVyIHVuaXgpIGJveC4gIFRvIGRvIHRoaXMsIHlvdSBuZWVkIHRvIGZvbGxvdyBhIGZldyBzdGVwczoKKyAgICAxKSBJbnN0YWxsIHRoZSBtaW5ndzMyIGNyb3NzLWNvbXBpbGVyLiBTZWUKKyAgICAgICAgaHR0cDovL3d3dy5saWJzZGwub3JnL2V4dHJhcy93aW4zMi9jcm9zcy9SRUFETUUudHh0CisgICAgMikgZ2V0IHRoZSAqdW5peCogdmVyc2lvbiBvZiB0aGUgdmltIHNvdXJjZXMKKyAgICAzKSBpbiAnTWFrZV9taW5nLm1haycsIHNldCAnQ1JPU1MnIHRvICcxJyBpbnN0ZWFkIG9mICcwJy4KKyAgICA0KSBtYWtlIC1mIE1ha2VfbWluZy5tYWsgZ3ZpbS5leGUKKworTm93IHlvdSBoYXZlIGNyZWF0ZWQgdGhlIFdpbmRvd3MgYmluYXJ5IGZyb20geW91ciBMaW51eCBib3ghICBIYXZlIGZ1bi4uLgorCisKKzYuIEJ1aWxkaW5nIHdpdGggUHl0aG9uIHN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKHdyaXR0ZW4gYnkgUm9uIEFhcm9uOiA8cm9uYWhhcm9uQHlhaG9vLmNvbT4pCisKK1RoaXMgaGFzIGJlZW4gdGVzdGVkIHdpdGggdGhlIG1pbmd3MzIgY29tcGlsZXIsIGFuZCB0aGUgQWN0aXZlU3RhdGUKK0FjdGl2ZVB5dGhvbjoKKyAgICBodHRwOi8vd3d3LkFjdGl2ZVN0YXRlLmNvbS9Qcm9kdWN0cy9BY3RpdmVQeXRob24vCisKK0FmdGVyIGluc3RhbGxpbmcgdGhlIEFjdGl2ZVB5dGhvbiwgeW91IHdpbGwgaGF2ZSB0byBjcmVhdGUgYSAnbWluZ3czMicKKydsaWJweXRob24yMC5hJyB0byBsaW5rIHdpdGg6CisgICBjZCAkUFlUSE9OL2xpYnMKKyAgIHBleHBvcnRzIHB5dGhvbjIwLmRsbCA+IHB5dGhvbjIwLmRlZgorICAgZGxsdG9vbCAtZCBweXRob24yMC5kZWYgLWwgbGlicHl0aG9uMjAuYQorCitPbmNlIHRoYXQgaXMgZG9uZSwgZWRpdCB0aGUgJ01ha2VfbWluZy5tYWsnIHNvIHRoZSBQWVRIT04gdmFyaWFibGUgcG9pbnRzIHRvCit0aGUgcm9vdCBvZiB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiAoQzpcUHl0aG9uMjAsIGZvciBleGFtcGxlKS4gIElmIHlvdSBhcmUKK2Nyb3NzLWNvbXBpbGluZyBvbiBMaW51eCB3aXRoIHRoZSBtaW5ndzMyIHNldHVwLCB5b3UgbmVlZCB0byBhbHNvIGNvbnZlcnQgYWxsCit0aGUgJ0luY2x1ZGUnIGZpbGVzIHRvICp1bml4KiBsaW5lLWVuZGluZ3MuICBUaGlzIGJhc2ggY29tbWFuZCB3aWxsIGRvIGl0CitlYXNpbHk6CisgICBmb3IgZmlsIGluICouaCA7IGRvIHZpbSAtZSAtYyAnc2V0IGZmPXVuaXh8d3xxJyAkZmlsCisKK05vdyBqdXN0IGRvOgorICAgbWFrZSAtZiBNYWtlX21pbmcubWFrIGd2aW0uZXhlCisKK2FuZCB5b3Ugd2lsbCBlbmQgdXAgd2l0aCBhIFB5dGhvbi1lbmFibGVkLCBXaW4zMiB2ZXJzaW9uLiAgRW5qb3khCisKKworNy4gQnVpbGRpbmcgd2l0aCBNelNjaGVtZSBzdXBwb3J0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKHdyaXR0ZW4gYnkgU2VyZ2V5IEtob3JldiA8c2VyZ2V5Lmtob3JldkBnbWFpbC5jb20+KQorCitWaW0gd2l0aCBNelNjaGVtZSAoaHR0cDovL3d3dy5wbHQtc2NoZW1lLm9yZy9zb2Z0d2FyZS9tenNjaGVtZSkgc3VwcG9ydCBjYW4KK2JlIGJ1aWx0IHdpdGggZWl0aGVyIE1TVkMsIG9yIE1pbkdXLCBvciBDeWd3aW4uIFN1cHBvcnRlZCB2ZXJzaW9ucyBhcmUgMjA1IGFuZAorYWJvdmUgKGluY2x1ZGluZyAyOTkgYW5kIDMweCBzZXJpZXMpLgorCitUaGUgTVNWQyBidWlsZCBpcyBxdWl0ZSBzdHJhaWdodGZvcndhcmQuIFNpbXBseSBpbnZva2UgKGluIG9uZSBsaW5lKQorbm1ha2UgLWZNYWtlX212Yy5tYWsgTVpTQ0hFTUU9PFBhdGgtdG8tTXpTY2hlbWU+CisgICAgW01aU0NIRU1FX1ZFUj08TXpTY2hlbWUtdmVyc2lvbj5dIFtEWU5BTUlDX01aU0NIRU1FPTx5ZXMgb3Igbm8+XQord2hlcmUgPE16U2NoZW1lLXZlcnNpb24+IGlzIHRoZSBsYXN0IHNldmVuIGNoYXJhY3RlcnMgZnJvbSBNelNjaGVtZSBkbGwgbmFtZQorKGxpYm16c2NoWFhYWFhYWC5kbGwpLgorSWYgRFlOQU1JQ19NWlNDSEVNRT15ZXMsIHJlc3VsdGluZyBleGVjdXRhYmxlIHdpbGwgbm90IGRlcGVuZCBvbiBNelNjaGVtZQorRExMJ3MsIGJ1dCB3aWxsIGxvYWQgdGhlbSBpbiBydW50aW1lIG9uIGRlbWFuZC4KKworQnVpbGRpbmcgZHluYW1pYyBNelNjaGVtZSBzdXBwb3J0IG9uIE1pbkdXIGFuZCBDeWd3aW4gaXMgc2ltaWxhci4gVGFrZSBpbnRvCithY2NvdW50IHRoYXQgPFBhdGgtdG8tTXpTY2hlbWU+IHNob3VsZCBjb250YWluIHNsYXNoZXMgcmF0aGVyIHRoYW4gYmFja3NsYXNoZXMKKyhlLmcuIGQ6L0RldmVsb3AvTXpTY2hlbWUpCisKKyJTdGF0aWMiIE16U2NoZW1lIHN1cHBvcnQgKFZpbSBleGVjdXRhYmxlIHdpbGwgZGVwZW5kIG9uIE16U2NoZW1lIERMTHMKK2V4cGxpY2l0bHkpIG9uIE1pbkdXIGFuZCBDeWd3aW4gcmVxdWlyZXMgYWRkaXRpb25hbCBzdGVwLgorCitsaWJtenNjaFhYWFhYWFguZGxsIGFuZCBsaWJtemdjWFhYWFhYWC5kbGwgc2hvdWxkIGJlIGNvcGllZCBmcm9tCislV0lORE9XUyVcU3lzdGVtMzIgdG8gb3RoZXIgbG9jYXRpb24gKGVpdGhlciBidWlsZCBkaXJlY3RvcnksIHNvbWUgdGVtcG9yYXJ5CitkaXIgb3IgZXZlbiBNelNjaGVtZSBob21lKS4KKworUGFzcyB0aGF0IHBhdGggYXMgTVpTQ0hFTUVfRExMUyBwYXJhbWV0ZXIgZm9yIE1ha2UuIEUuZy4sCittYWtlIC1mIE1ha2VfY3lnLm1hayBNWlNDSEVNRT1kOi9EZXZlbG9wL016U2NoZW1lIE1aU0NIRU1FX1ZFUj0yMDlfMDAwCisgICAgTVpTQ0hFTUVfRExMUz1jOi9UZW1wIERZTkFNSUNfTVpTQ0hFTUU9bm8KKworQWZ0ZXIgYSBzdWNjZXNzZnVsIGJ1aWxkLCB0aGVzZSBkbGxzIGNhbiBiZSBmcmVlbHkgcmVtb3ZlZCwgbGVhdmluZyB0aGVtIGluCislV0lORE9XUyVcU3lzdGVtMzIgb25seS4KKworCis4LiBXaW5kb3dzIDMuMXgKKz09PT09PT09PT09PT09PQorCittYWtlIC1mIE1ha2VfdzE2Lm1hayAgICAgICAgICAgICAxNiBiaXQsIEJvcmxhbmQgQysrIDUuMAorCitXYXJuaW5nOiBCZSBzdXJlIHRvIHVzZSB0aGUgcmlnaHQgbWFrZS5leGUuICBJdCBzaG91bGQgYmUgQm9ybGFuZCBtYWtlLgorCitZb3Ugd2lsbCBhbG1vc3QgY2VydGFpbmx5IGhhdmUgdG8gY2hhbmdlIHRoZSBwYXRocyBmb3IgbGlicyBhbmQgaW5jbHVkZSBmaWxlcworaW4gdGhlIE1ha2VmaWxlLiAgTG9vayBmb3IgIkQ6XEJDNSIgYW5kICJjdGwzZHYyIi4gIFlvdSB3aWxsIGdldCBhIG51bWJlciBvZgord2FybmluZ3Mgd2hpY2ggY2FuIGJlIGlnbm9yZWQgKCBfY2htb2QsIHByZWNvbXBpbGVkIGhlYWRlciBmaWxlcywgYW5kCisicG9zc2libHkgaW5jb3JyZWN0IGFzc2lnbm1lbnQiKS4KKworVGhlIG1ha2VmaWxlIHNob3VsZCBhbHNvIHdvcmsgZm9yIEJDKysgNC4wIGFuZCA0LjUsIGJ1dCBtYXkgbmVlZCB0d2Vha2luZyB0bworcmVtb3ZlIHVuc3VwcG9ydGVkIGNvbXBpbGVyICYgbGlrZXIgb3B0aW9ucy4KKworRm9yIG1ha2luZyB0aGUgV2luMzJzIHZlcnNpb24sIHlvdSBuZWVkIE1pY3Jvc29mdCBWaXN1YWwgQysrIDQuMSBPUiBFQVJMSUVSLgorSW4gTVNWQyA0LjIgc3VwcG9ydCBmb3IgV2luMzJzIHdhcyBkcm9wcGVkISAgVXNlIHRoaXMgY29tbWFuZDoKKyAgICBubWFrZSAtZiBNYWtlX212Yy5tYWsgR1VJPXllcworCisKKzkuIE1TLURPUwogPT09PT09PT09CiAKIFN1bW1hcnk6Ci1yZW4gTWFrZV9iYzMubWFrIE1ha2VmaWxlOyBtYWtlICAgICAgMTYgYml0LCBCb3JsYW5kIEMrKyBhbmQgVHVyYm8gQysrCi1yZW4gTWFrZV90Y2MubWFrIE1ha2VmaWxlOyBtYWtlCSAgICAgMTYgYml0LCBUdXJibyBDCi1tYWtlIC1mIE1ha2VfZGpnLm1hawkJICAgICAzMiBiaXQsIERKR1BQIDIuMAotbWFrZSAtZiBNYWtlX2JjNS5tYWsJCSAgICAgMzIgYml0LCBCb3JsYW5kIEMrKyA1LnggKGVkaXQgaXQgdG8KLQkJCQkJICAgICBkZWZpbmUgRE9TKQorcmVuIE1ha2VfYmMzLm1hayBNYWtlZmlsZTsgbWFrZSAgICAgMTYgYml0LCBCb3JsYW5kIEMrKyBhbmQgVHVyYm8gQysrCityZW4gTWFrZV90Y2MubWFrIE1ha2VmaWxlOyBtYWtlICAgICAxNiBiaXQsIFR1cmJvIEMKK21ha2UgLWYgTWFrZV9kamcubWFrICAgICAgICAgICAgICAgIDMyIGJpdCwgREpHUFAgMi4wCittYWtlIC1mIE1ha2VfYmM1Lm1hayAgICAgICAgICAgICAgICAzMiBiaXQsIEJvcmxhbmQgQysrIDUueCAoZWRpdCBpdCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIERPUykKIAogV2FybmluZzogQmUgc3VyZSB0byB1c2UgdGhlIHJpZ2h0IG1ha2UuZXhlLiAgTWljcm9zb2Z0IEMgbWFrZSBkb2Vzbid0IHdvcms7CiBCb3JsYW5kIG1ha2Ugb25seSB3b3JrcyB3aXRoIE1ha2VfYmMzLm1haywgTWFrZV9iYzUubWFrIGFuZCBNYWtlX3RjYy5tYWs7CkBAIC02NCwyODUgKzM3NiwzIEBACiAKIElmIHlvdSBnZXQgYWxsIGtpbmRzIG9mIHN0cmFuZ2UgZXJyb3IgbWVzc2FnZXMgd2hlbiBjb21waWxpbmcsIHRyeSBhZGRpbmcKIGNoYW5naW5nIHRoZSBmaWxlIGZvcm1hdCBmcm9tICJ1bml4IiB0byAiZG9zIi4KLQotCi0yLiBXaW4zMiAoV2luZG93cyBOVC9YUCBhbmQgV2luZG93cyA5NS85OCkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1TdW1tYXJ5OgotdmN2YXJzMzIJCQkJICBTZXR1cCBwYXRocyBmb3Igbm1ha2UgYW5kIE1TVkMKLQotbm1ha2UgLWYgTWFrZV9tdmMubWFrCQljb25zb2xlICAgV2luMzIgU0RLIG9yIE1pY3Jvc29mdCBWaXN1YWwgQysrCi1ubWFrZSAtZiBNYWtlX212Yy5tYWsgR1VJPXllcwlHVUkJICBNaWNyb3NvZnQgVmlzdWFsIEMrKwotbm1ha2UgLWYgTWFrZV9tdmMubWFrIE9MRT15ZXMJT0xFCSAgTWljcm9zb2Z0IFZpc3VhbCBDKysKLW5tYWtlIC1mIE1ha2VfbXZjLm1hayBQRVJMPUM6XFBlcmwgUFlUSE9OPUM6XFB5dGhvbiBldGMuCi0JCQkJUGVybCwgUHl0aG9uLCBldGMuCi0JCQkJCSAgTWljcm9zb2Z0IFZpc3VhbCBDKysKLQotbWFrZSAgLWYgTWFrZV9iYzUubWFrCQlHVUkJICBCb3JsYW5kIEMrKyA1LngKLW1ha2UgIC1mIE1ha2VfYmM1Lm1hawkJY29uc29sZQkgIEJvcmxhbmQgQysrIDUueCAoY2hhbmdlIHRoZSBmaWxlKQotbm1ha2UgLWYgTWFrZV9pdmMubWFrIENGRz0iVmltIC0gV2luMzIgUmVsZWFzZSBndmltIgotCQkJCUdVSQkgIE1pY3Jvc29mdCBWaXN1YWwgQysrIDQueCBvciBsYXRlcgotbm1ha2UgLWYgTWFrZV9pdmMubWFrIENGRz0iVmltIC0gV2luMzIgUmVsZWFzZSBndmltIE9MRSIKLQkJCQlPTEUJICBNaWNyb3NvZnQgVmlzdWFsIEMrKyA0Lnggb3IgbGF0ZXIKLQotbWFrZSAgLWYgTWFrZV9jeWcubWFrCQl2YXJpb3VzICAgQ3lnbnVzIGdjYwotbWFrZSAgLWYgTWFrZV9taW5nLm1hawkJdmFyaW91cyAgIE1pbmdXIHdpdGggZ2NjCi0KLVNlZSB0aGUgc3BlY2lmaWMgZmlsZXMgZm9yIGNvbW1lbnRzIGFuZCBvcHRpb25zLgotCi1UaGVzZSBmaWxlcyBoYXZlIGJlZW4gc3VwcGxpZWQgYnkgR2VvcmdlIFYuIFJlaWxseSwgQmVuIFNpbmdlciwgS2VuIFNjb3R0IGFuZAotUm9uIEFhcm9uOyB0aGV5IGhhdmUgYmVlbiB0ZXN0ZWQuICBUaGUgQ3lnbnVzIG9uZSBtYW55IG5vdCBmdWxseSB3b3JrIHlldC4KLVdpdGggQ3lnbnVzIGdjYyB5b3UgY2FuIHVzZSB0aGUgVW5peCBNYWtlZmlsZSBpbnN0ZWFkICh5b3UgbmVlZCB0byBnZXQgdGhlCi1Vbml4IGFyY2hpdmUgdGhlbikuICBUaGVuIHlvdSBnZXQgYSBDeWd3aW4gYXBwbGljYXRpb24gKGZlZWxzIGxpa2UgVmltIGlzCi1ydW5uaW4gb24gVW5peCksIHdoaWxlIHdpdGggTWFrZV9jeWcubWFrIHlvdSBnZXQgYSBXaW5kb3dzIGFwcGxpY2F0aW9uIChsaWtlCi13aXRoIHRoZSBvdGhlciBtYWtlZmlsZXMpLgotCi1Zb3UgY2FuIGFsc28gdXNlIHRoZSBWaXN1YWwgQysrIElERTogdXNlIEZpbGUvT3BlbiB3b3Jrc3BhY2UsIHNlbGVjdCB0aGUKLU1ha2VfaXZjLm1hayBmaWxlLCB0aGVuIHNlbGVjdCBCdWlsZC9CdWlsZCBhbGwuICBUaGlzIGJ1aWxkcyB0aGUgR1VJIHZlcnNpb24KLWJ5IGRlZmF1bHQuCi0KLVZpbSBmb3IgV2luMzIgY29tcGlsZXMgd2l0aCB0aGUgTWljcm9zb2Z0IFZpc3VhbCBDKysgMi4wIGNvbXBpbGVyIGFuZCBsYXRlciwKLWFuZCB3aXRoIHRoZSBCb3JsYW5kIEMrKyA0LjUgMzItYml0IGNvbXBpbGVyIGFuZCBsYXRlci4gIEl0IGNvbXBpbGVzIG9uCi1XaW5kb3dzIDk1IGFuZCBhbGwgZm91ciBOVCBwbGF0Zm9ybXM6IGkzODYsIEFscGhhLCBNSVBTLCBhbmQgUG93ZXJQQy4gIFRoZQotTlQvaTM4NiBhbmQgdGhlIFdpbmRvd3MgOTUgYmluYXJpZXMgYXJlIGlkZW50aWNhbC4gIFVzZSBNYWtlX212Yy5tYWsgdG8KLWNvbXBpbGUgd2l0aCBWaXN1YWwgQysrIGFuZCBNYWtlX2JjNS5tYWsgdG8gY29tcGlsZSB3aXRoIEJvcmxhbmQgQysrLgotCi1NYWtlX212Yy5tYWsgYWxsb3dzIGEgVmltIHRvIGJlIGJ1aWx0IHdpdGggdmFyaW91cyBkaWZmZXJlbnQgZmVhdHVyZXMgYW5kCi1kZWJ1ZyBzdXBwb3J0LiAgRGVidWdnaW5nIHdpdGggTVMgRGV2c3R1ZGlvIGlzIHByb3ZpZGVkIGJ5IE1ha2VfZHZjLm1hay4KLUZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB1c2Ugb2YgTWFrZV9kdmMubWFrLCBsb29rIGluIE1ha2VfbXZjLm1hay4KLQotRm9yIGNvbXBpbGluZyBHdmltIHdpdGggSU1FIHN1cHBvcnQgb24gZmFyLWVhc3QgV2luZG93cywgdW5jb21tZW50IHRoZQotTVVMVElfQllURV9JTUUgZGVmaW5lIGluIHRoZSBzcmMvZmVhdHVyZS5oIGZpbGUgYmVmb3JlIGNvbXBpbGluZy4KLQotVGhlIFdpbjMyIGNvbnNvbGUgYmluYXJ5IHdhcyBjb21waWxlZCB3aXRoIFZpc3VhbCBDKysgdmVyc2lvbiA1LjAsIHVzaW5nCi1NYWtlX212Yy5tYWsgYW5kIE1ha2VfYmM1Lm1hayAoQm9ybGFuZCBDKS4gIE90aGVyIGNvbXBpbGVycyBzaG91bGQgYWxzbyB3b3JrLgotSWYgeW91IGdldCBhbGwga2luZHMgb2Ygc3RyYW5nZSBlcnJvciBtZXNzYWdlcyB3aGVuIGNvbXBpbGluZyAoeW91IHNob3VsZG4ndAotd2l0aCB0aGUgTWljcm9zb2Z0IG9yIEJvcmxhbmQgMzItYml0IGNvbXBpbGVycyksIHRyeSBhZGRpbmcgPENSPiBjaGFyYWN0ZXJzCi1hdCB0aGUgZW5kIG9mIGVhY2ggbGluZS4KLQotWW91IHByb2JhYmx5IG5lZWQgdG8gcnVuICJ2Y3ZhcnMzMiIgYmVmb3JlIHVzaW5nICJubWFrZSIuCi0KLUZvciBtYWtpbmcgdGhlIFdpbjMycyB2ZXJzaW9uLCB5b3UgbmVlZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyA0LjEgT1IgRUFSTElFUi4KLUluIHZlcnNpb24gNC4yIHN1cHBvcnQgZm9yIFdpbjMycyB3YXMgZHJvcHBlZCEgIFVzZSB0aGlzIGNvbW1hbmQ6Ci0Jbm1ha2UgLWYgTWFrZV9tdmMubWFrIEdVST15ZXMKLQotU2VlIHRoZSByZXNwZWN0aXZlIE1ha2VmaWxlcyBmb3IgbW9yZSBjb21tZW50cy4KLQotCi0zLiBXaW5kb3dzIE5UIHdpdGggT3Blbk5UCi09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLShjb250cmlidXRlZCBieSBNaWNoYWVsIEEuIEJlbnppbmdlcikKLQotQnVpbGRpbmcgVmltIG9uIE9wZW5OVCAyLjAgb24gV2luZG93cyBOVCA0LjAsIHdpdGggU29mdHdheSdzIHByZXJlbGVhc2UgZ2NjOgotMS4gZXhwb3J0IENPTkZJR19TSEVMTD0vL0QvT3Blbk5UL2Jpbi9zaAotMi4gTWFrZSB0aGUgZm9sbG93aW5nIGV4cG9ydHMgZm9yIG1vZGlmeWluZyBjb25maWcubWs6Ci0JZXhwb3J0IENGTEFHUz0tTyAtV3NoYWRvdwotCWV4cG9ydCBYX1BSRV9MSUJTPS1sWG11Ci0yLiBSdW4gY29uZmlndXJlIGFzIGZvbGxvd3M6Ci0JY29uZmlndXJlIC0tcHJlZml4PS92aW0gLS1iaW5kaXI9L2Jpbi9vcGVubnQgLS1lbmFibGUtZ3VpPU1vdGlmCi0gICBJZiB5b3UgZG9uJ3QgaGF2ZSBPcGVuTlRpZiAoTW90aWYgc3VwcG9ydCksIHVzZSB0aGlzOgotCWNvbmZpZ3VyZSAtLXByZWZpeD0vdmltIC0tYmluZGlyPS9iaW4vb3Blbm50IC0tZW5hYmxlLWd1aT1BdGhlbmEKLTMuIEVkaXQgTWFrZWZpbGUgdG8gcGVyZm9ybSB0aGUgZm9sbG93aW5nIHNpbmNlIHRoZSBNYWtlZmlsZSBpbmNsdWRlIHN5bnRheAotICAgZGlmZmVycyBmcm9tIHRoYXQgb2YgZ21ha2U6Ci0JI2luY2x1ZGUgY29uZmlnLm1rCi0JLmluY2x1ZGUgImNvbmZpZy5tayIKLTQuIENoYW5nZSBhbGwgaW5zdGFsbCBsaW5rcyB0byBiZSAibG4gLWYiIGFuZCBub3QgImxuIC1zIi4KLTUuIENoYW5nZSB0byB0aGUgJ2N0YWdzJyBkaXJlY3RvcnkgYW5kIGNvbmZpZ3VyZS4KLTYuIEVkaXQgdGhlIE1ha2VmaWxlIGFuZCByZW1vdmUgc3B1cmlvdXMgc3BhY2VzIGZyb20gbGluZXMgOTkgYW5kIDExNC4KLTcuIENoYW5nZSBzbGluayB0byAibG4gLWYiIGZyb20gImxuIC1zIi4KLTguIFJldHVybiB0byB0aGUgc3JjIGRpcmVjdG9yeS4KLTkuIG1ha2UKLQotCi00LiBXaW5kb3dzIDMuMXgKLT09PT09PT09PT09PT09PQotCi1tYWtlIC1mIE1ha2VfdzE2Lm1hawkJICAgICAxNiBiaXQsIEJvcmxhbmQgQysrIDUuMAotCi1XYXJuaW5nOiBCZSBzdXJlIHRvIHVzZSB0aGUgcmlnaHQgbWFrZS5leGUuICBJdCBzaG91bGQgYmUgQm9ybGFuZCBtYWtlLgotCi1Zb3Ugd2lsbCBhbG1vc3QgY2VydGFpbmx5IGhhdmUgdG8gY2hhbmdlIHRoZSBwYXRocyBmb3IgbGlicyBhbmQgaW5jbHVkZSBmaWxlcwotaW4gdGhlIE1ha2VmaWxlLiAgTG9vayBmb3IgIkQ6XEJDNSIgYW5kICJjdGwzZHYyIi4gIFlvdSB3aWxsIGdldCBhIG51bWJlciBvZgotd2FybmluZ3Mgd2hpY2ggY2FuIGJlIGlnbm9yZWQgKCBfY2htb2QsIHByZWNvbXBpbGVkIGhlYWRlciBmaWxlcywgYW5kCi0icG9zc2libHkgaW5jb3JyZWN0IGFzc2lnbm1lbnQiKS4KLQotVGhlIG1ha2VmaWxlIHNob3VsZCBhbHNvIHdvcmsgZm9yIEJDKysgNC4wIGFuZCA0LjUsIGJ1dCBtYXkgbmVlZCB0d2Vha2luZyB0bwotcmVtb3ZlIHVuc3VwcG9ydGVkIGNvbXBpbGVyICYgbGlrZXIgb3B0aW9ucy4KLQotCi01LiBNaW5ndwotPT09PT09PT0KLQotKHdyaXR0ZW4gYnkgUm9uIEFhcm9uOiA8cm9uYWhhcm9uQHlhaG9vLmNvbT4pCi0KLVRoaXMgaXMgYWJvdXQgaG93IHRvIHByb2R1Y2UgYSBXaW4zMiBiaW5hcnkgb2YgZ3ZpbSB3aXRoIE1pbmd3LgotCi1GaXJzdCwgeW91IG5lZWQgdG8gZ2V0IHRoZSAnbWluZ3czMicgY29tcGlsZXIsIHdoaWNoIGlzIGZyZWUgZm9yIHRoZSBkb3dubG9hZAotYXQ6Ci0KLQlodHRwOi8vd3d3Lm1pbmd3Lm9yZy8KLQotT25jZSB5b3UgaGF2ZSBkb3dubG9hZGVkIHRoZSBjb21waWxlciBiaW5hcmllcywgdW5wYWNrIHRoZW0gb24geW91ciBoYXJkIGRpc2sKLXNvbWV3aGVyZSwgYW5kIHB1dCB0aGVtIG9uIHlvdXIgUEFUSC4gIElmIHlvdSBhcmUgb24gV2luOTUvOTggeW91IGNhbiBlZGl0Ci15b3VyIEFVVE9FWEVDLkJBVCBmaWxlIHdpdGggYSBsaW5lIGxpa2U6Ci0KLQlzZXQgUEFUSD1DOlxHQ0MtMi45NS4yXEJJTjslUEFUSCUKLQotb3Igb24gTlQvMjAwMCwgZ28gdG8gdGhlIENvbnRyb2wgUGFuZWwsIFN5c3RlbSwgYW5kIGVkaXQgdGhlIGVudmlyb25tZW50IGZyb20KLXRoZXJlLgotCi1UZXN0IGlmIGdjYyBpcyBvbiB5b3VyIHBhdGguICBGcm9tIGEgQ01EIChvciBDT01NQU5EIG9uICc5NS85OCk6Ci0KLQlDOlw+IGdjYyAtLXZlcnNpb24KLQkyLjk1LjIKLQotCUM6XD4gbWFrZSAtLXZlcnNpb24KLQlHTlUgTWFrZSB2ZXJzaW9uIDMuNzcgKC4uLmV0Yy4uLikKLQotTm93IHlvdSBhcmUgcmVhZHkgdG8gcm9jayAnbicgcm9sbC4gIFVucGFjayB0aGUgdmltIHNvdXJjZXMgKGxvb2sgb24KLXd3dy52aW0ub3JnIGZvciBleGFjdGx5IHdoaWNoIHZlcnNpb24gb2YgdGhlIHZpbSBmaWxlcyB5b3UgbmVlZCkuCi0KLUNoYW5nZSBkaXJlY3RvcnkgdG8gJ3ZpbVxzcmMnOgotCi0JQzpcPiBjZCB2aW1cc3JjCi0JQzpcVklNXFNSQz4KLQotYW5kIHlvdSB0eXBlOgotCi0JbWFrZSAtZiBNYWtlX21pbmcubWFrIGd2aW0uZXhlCi0KLUFmdGVyIGNodXJuaW5nIGZvciBhIHdoaWxlLCB5b3Ugd2lsbCBlbmQgdXAgd2l0aCAnZ3ZpbS5leGUnIGluIHRoZSAndmltXHNyYycKLWRpcmVjdG9yeS4KLQotWW91IHNob3VsZCBub3QgbmVlZCB0byBkbyAqYW55KiBlZGl0aW5nIG9mIGFueSBmaWxlcyB0byBnZXQgdmltIGNvbXBpbGVkIHRoaXMKLXdheS4gIElmLCBmb3Igc29tZSByZWFzb24sIHlvdSB3YW50IHRoZSBjb25zb2xlLW1vZGUtb25seSB2ZXJzaW9uIG9mIHZpbSAodGhpcwotaXMgTk9UIHJlY29tbWVuZGVkIG9uIFdpbjMyLCBlc3BlY2lhbGx5IG9uICc5NS8nOTghISEpLCB5b3UgbmVlZCBvbmx5IGNoYW5nZQotdGhlICdndmltLmV4ZScgdG8gJ3ZpbS5leGUnIGluIHRoZSAnbWFrZScgY29tbWFuZHMgZ2l2ZW4gYWJvdmUuCi0KLUlmIHlvdSBhcmUgZGlzbWF5ZWQgYnkgaG93IGJpZyB0aGUgRVhFIGlzLCBJIHN0cm9uZ2x5IHJlY29tbWVuZCB5b3UgZ2V0ICdVUFgnCi0oYWxzbyBmcmVlISkgYW5kIGNvbXByZXNzIHRoZSBmaWxlICh0eXBpY2FsIGNvbXByZXNzaW9uIGlzIDUwJSkuIFVQWCBjYW4gYmUKLWZvdW5kIGF0Ci0JaHR0cDovL3VweC50c3gub3JnLwotCi0KLUFERElUSU9OOiBOTFMgc3VwcG9ydCB3aXRoIE1pbmd3Ci0KLShieSBFZHVhcmRvIEYuIEFtYXRyaWEgPGVmZXJuYTFAcGxhdGVhLnBudGljLm1lYy5lcz4pCi0KLUlmIHlvdSB3YW50IE5hdGlvbmFsIExhbmd1YWdlIFN1cHBvcnQsIHJlYWQgdGhlIGZpbGUgc3JjL3BvL1JFQURNRV9taW5ndy50eHQuCi1Zb3UgbmVlZCB0byB1bmNvbW1lbnQgbGluZXMgaW4gTWFrZV9taW5nLm1hayB0byBoYXZlIE5MUyBkZWZpbmVkLgotCi0KLTYuIENyb3NzIGNvbXBpbGluZyBmb3IgV2luMzIgZnJvbSBhIExpbnV4IG1hY2hpbmUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKHdyaXR0ZW4gYnkgUm9uIEFhcm9uOiA8cm9uYWhhcm9uQHlhaG9vLmNvbT4gd2l0aCBoZWxwIGZyb20KLU1hcnRpbiBLYWhsZXJ0IDxtYXJ0aW4ua2FobGVydEBpbmZpbmVvbi5jb20+KQotCi1JZiB5b3UgbGlrZSwgeW91IGNhbiBjb21waWxlIHRoZSAnbWluZ3cnIFdpbjMyIHZlcnNpb24gZnJvbSB0aGUgY29tZm9ydCBvZgoteW91ciBMaW51eCAob3Igb3RoZXIgdW5peCkgYm94LiAgVG8gZG8gdGhpcywgeW91IG5lZWQgdG8gZm9sbG93IGEgZmV3IHN0ZXBzOgotCi0JMSkgSW5zdGFsbCB0aGUgbWluZ3czMiBjcm9zcy1jb21waWxlciAoaWYgeW91IGhhdmUgaXQsIGdvIHRvIHN0ZXAgMikKLQkJMWEpIGZyb20gJ2Z0cDovL2Z0cC5uYW5vdGVjaC53aXNjLmVkdS9wdWIva2hhbi9nbnUtd2luMzIvbWluZ3czMi9zbmFwc2hvdHMvZ2NjLTIuOTUuMi0xJywKLQkJCWdldDoKLQkJCQliaW51dGlscy0xOTk5MDgxOC0xLXNyYy50YXIuZ3oKLQkJCQltaW5ndy1tc3ZjcnQtMjAwMDAyMDMuemlwCi0JCQkJZ2NjLTIuOTUuMi0xLXg4Ni13aW4zMi5kaWZmLmd6Ci0JCTFiKSBmcm9tICdodHRwOi8vZ2NjLmdudS5vcmcvJyBnZXQ6Ci0JCQkJZ2NjLTIuOTUuMi50YXIuZ3oKLQkJMWMpIGNyZWF0ZSBhIHBsYWNlIHRvIHB1dCB0aGUgY29tcGlsZXIgc291cmNlIGFuZCBiaW5hcmllczoKLQkJCShhc3N1bWluZyB5b3UgYXJlIGluIHRoZSBob21lIGRpcmVjdG9yeSkKLQkJCW1rZGlyIGdjYy1iaW4KLQkJCW1rZGlyIGdjYy1zcmMKLQkJMWQpIHVucGFjayB0aGUgc291cmNlczoKLQkJCWNkIGdjYy1zcmMKLQkJCXRhciB4emYgLi4vYmludXRpbHMtMTk5OTA4MTgtMS1zcmMudGFyLmd6Ci0JCQl0YXIgeHpmIC4uL2djYy0yLjk1LjIudGFyLmd6Ci0JCQl1bnppcCAuLi9taW5ndy1tc3ZjcnQtMjAwMDAyMDMKLQkJMWUpIGJ1aWxkIHRoZSBkaWZmZXJlbnQgdG9vbHM6Ci0JCQlleHBvcnQgUFJFRklYPX4vZ2NjLWJpbi8KLQkJCWNkIGdjYy0yLjk1LjIKLQkJCXpjYXQgLi4vZ2NjLTIuOTUuMi0xLXg4Ni13aW4zMi5kaWZmLmd6IHwgcGF0Y2ggLXAxIC1FCi0JCQljZCAuLi9iaW51dGlscy0xOTk5MDgxOAotCQkJLi9jb25maWd1cmUgLS10YXJnZXQ9aTU4Ni1wYy1taW5ndzMybXN2YyAtLXByZWZpeD0kUFJFRklYCi0JCQltYWtlCi0JCQltYWtlIGluc3RhbGwKLQkJCWNkIC4uL2djYy0yLjk1LjIKLQkJCS4vY29uZmlndXJlIC0tdGFyZ2V0PWk1ODYtcGMtbWluZ3czMm1zdmMgXAotCQkJCS0td2l0aC1saWJzPX4vZ2NjLWJpbi9pMzg2LW1pbmd3MzJtc3ZjL2xpYiBcCi0JCQkJLS13aXRoLWhlYWRlcnM9fi9nY2MtYmluL2kzODYtbWluZ3czMm1zdmMvaW5jbHVkZSBcCi0JCQkJLS1lbmFibGUtbGFuZ3VhZ2VzPWMrKyBcCi0JCQkJLS1wcmVmaXg9JFBSRUZJWAotCQkJbWFrZQotCQkJbWFrZSBpbnN0YWxsCi0JCTFmKSBBZGQgJFBSRUZJWC9iaW4gdG8geW91ciAkUEFUSC4KLQotCTIpIGdldCB0aGUgKnVuaXgqIHZlcnNpb24gb2YgdGhlIHZpbSBzb3VyY2VzCi0JMykgaW4gJ01ha2VfbWluZy5tYWsnLCBzZXQgJ0NST1NTJyB0byAnMScgaW5zdGVhZCBvZiAnMCcuCi0JNCkgbWFrZSAtZiBNYWtlX21pbmcubWFrIGd2aW0uZXhlCi0KLU5vdyB5b3UgaGF2ZSBjcmVhdGVkIHRoZSBXaW5kb3dzIGJpbmFyeSBmcm9tIHlvdXIgTGludXggYm94ISAgSGF2ZSBmdW4uLi4KLQotNy4gQnVpbGRpbmcgd2l0aCBQeXRob24gc3VwcG9ydAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0od3JpdHRlbiBieSBSb24gQWFyb246IDxyb25haGFyb25AeWFob28uY29tPikKLQotVGhpcyBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgbWluZ3czMiBjb21waWxlciwgYW5kIHRoZSBBY3RpdmVTdGF0ZQotQWN0aXZlUHl0aG9uOgotICAgIGh0dHA6Ly93d3cuQWN0aXZlU3RhdGUuY29tL1Byb2R1Y3RzL0FjdGl2ZVB5dGhvbi8KLQotQWZ0ZXIgaW5zdGFsbGluZyB0aGUgQWN0aXZlUHl0aG9uLCB5b3Ugd2lsbCBoYXZlIHRvIGNyZWF0ZSBhICdtaW5ndzMyJwotJ2xpYnB5dGhvbjIwLmEnIHRvIGxpbmsgd2l0aDoKLSAgIGNkICRQWVRIT04vbGlicwotICAgcGV4cG9ydHMgcHl0aG9uMjAuZGxsID4gcHl0aG9uMjAuZGVmCi0gICBkbGx0b29sIC1kIHB5dGhvbjIwLmRlZiAtbCBsaWJweXRob24yMC5hCi0KLU9uY2UgdGhhdCBpcyBkb25lLCBlZGl0IHRoZSAnTWFrZV9taW5nLm1haycgc28gdGhlIFBZVEhPTiB2YXJpYWJsZSBwb2ludHMgdG8KLXRoZSByb290IG9mIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uIChDOlxQeXRob24yMCwgZm9yIGV4YW1wbGUpLiAgSWYgeW91IGFyZQotY3Jvc3MtY29tcGlsaW5nIG9uIExpbnV4IHdpdGggdGhlIG1pbmd3MzIgc2V0dXAsIHlvdSBuZWVkIHRvIGFsc28gY29udmVydCBhbGwKLXRoZSAnSW5jbHVkZScgZmlsZXMgdG8gKnVuaXgqIGxpbmUtZW5kaW5ncy4gIFRoaXMgYmFzaCBjb21tYW5kIHdpbGwgZG8gaXQKLWVhc2lseToKLSAgIGZvciBmaWwgaW4gKi5oIDsgZG8gdmltIC1lIC1jICdzZXQgZmY9dW5peHx3fHEnICRmaWwKLQotTm93IGp1c3QgZG86Ci0gICBtYWtlIC1mIE1ha2VfbWluZy5tYWsgZ3ZpbS5leGUKLQotYW5kIHlvdSB3aWxsIGVuZCB1cCB3aXRoIGEgUHl0aG9uLWVuYWJsZWQsIFdpbjMyIHZlcnNpb24uICBFbmpveSEKLQotOC4gQnVpbGRpbmcgd2l0aCBNelNjaGVtZSBzdXBwb3J0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSh3cml0dGVuIGJ5IFNlcmdleSBLaG9yZXYgPHNlcmdleS5raG9yZXZAZ21haWwuY29tPikKLQotVmltIHdpdGggTXpTY2hlbWUgKGh0dHA6Ly93d3cucGx0LXNjaGVtZS5vcmcvc29mdHdhcmUvbXpzY2hlbWUpIHN1cHBvcnQgY2FuCi1iZSBidWlsdCB3aXRoIGVpdGhlciBNU1ZDLCBvciBNaW5HVywgb3IgQ3lnd2luLiBTdXBwb3J0ZWQgdmVyc2lvbnMgYXJlIDIwNSBhbmQKLWFib3ZlIChpbmNsdWRpbmcgMjk5IGFuZCAzMHggc2VyaWVzKS4KLQotVGhlIE1TVkMgYnVpbGQgaXMgcXVpdGUgc3RyYWlnaHRmb3J3YXJkLiBTaW1wbHkgaW52b2tlIChpbiBvbmUgbGluZSkKLW5tYWtlIC1mTWFrZV9tdmMubWFrIE1aU0NIRU1FPTxQYXRoLXRvLU16U2NoZW1lPgotICAgIFtNWlNDSEVNRV9WRVI9PE16U2NoZW1lLXZlcnNpb24+XSBbRFlOQU1JQ19NWlNDSEVNRT08eWVzIG9yIG5vPl0KLXdoZXJlIDxNelNjaGVtZS12ZXJzaW9uPiBpcyB0aGUgbGFzdCBzZXZlbiBjaGFyYWN0ZXJzIGZyb20gTXpTY2hlbWUgZGxsIG5hbWUKLShsaWJtenNjaFhYWFhYWFguZGxsKS4KLUlmIERZTkFNSUNfTVpTQ0hFTUU9eWVzLCByZXN1bHRpbmcgZXhlY3V0YWJsZSB3aWxsIG5vdCBkZXBlbmQgb24gTXpTY2hlbWUKLURMTCdzLCBidXQgd2lsbCBsb2FkIHRoZW0gaW4gcnVudGltZSBvbiBkZW1hbmQuCi0KLUJ1aWxkaW5nIGR5bmFtaWMgTXpTY2hlbWUgc3VwcG9ydCBvbiBNaW5HVyBhbmQgQ3lnd2luIGlzIHNpbWlsYXIuIFRha2UgaW50bwotYWNjb3VudCB0aGF0IDxQYXRoLXRvLU16U2NoZW1lPiBzaG91bGQgY29udGFpbiBzbGFzaGVzIHJhdGhlciB0aGFuIGJhY2tzbGFzaGVzCi0oZS5nLiBkOi9EZXZlbG9wL016U2NoZW1lKQotCi0iU3RhdGljIiBNelNjaGVtZSBzdXBwb3J0IChWaW0gZXhlY3V0YWJsZSB3aWxsIGRlcGVuZCBvbiBNelNjaGVtZSBETExzCi1leHBsaWNpdGx5KSBvbiBNaW5HVyBhbmQgQ3lnd2luIHJlcXVpcmVzIGFkZGl0aW9uYWwgc3RlcC4KLQotbGlibXpzY2hYWFhYWFhYLmRsbCBhbmQgbGlibXpnY1hYWFhYWFguZGxsIHNob3VsZCBiZSBjb3BpZWQgZnJvbQotJVdJTkRPV1MlXFN5c3RlbTMyIHRvIG90aGVyIGxvY2F0aW9uIChlaXRoZXIgYnVpbGQgZGlyZWN0b3J5LCBzb21lIHRlbXBvcmFyeQotZGlyIG9yIGV2ZW4gTXpTY2hlbWUgaG9tZSkuCi0KLVBhc3MgdGhhdCBwYXRoIGFzIE1aU0NIRU1FX0RMTFMgcGFyYW1ldGVyIGZvciBNYWtlLiBFLmcuLAotbWFrZSAtZk1ha2VfY3lnLm1hayBNWlNDSEVNRT1kOi9EZXZlbG9wL016U2NoZW1lIE1aU0NIRU1FX1ZFUj0yMDlfMDAwCi0gICAgTVpTQ0hFTUVfRExMUz1jOi9UZW1wIERZTkFNSUNfTVpTQ0hFTUU9bm8KLQotQWZ0ZXIgc3VjY2Vzc2Z1bCBidWlsZCB0aGVzZSBkbGxzIGNhbiBiZSBmcmVlbHkgcmVtb3ZlZCwgbGVhdmluZyB0aGVtIGluCi0lV0lORE9XUyVcU3lzdGVtMzIgb25seS4KZGlmZiAtLWdpdCBhL3NyYy9NYWtlX212Yy5tYWsgYi9zcmMvTWFrZV9tdmMubWFrCmluZGV4IGNhOTQzODYuLmU1NjliOWEgMTAwNjQ0Ci0tLSBhL3NyYy9NYWtlX212Yy5tYWsKKysrIGIvc3JjL01ha2VfbXZjLm1hawpAQCAtMTMxLDkgKzEzMSw5IEBACiAjIyMgU2VlIGZlYXR1cmUuaCBmb3IgYSBsaXN0IG9mIG9wdGlvbmFscy4KICMgSWYgeW91IHdhbnQgdG8gYnVpbGQgc29tZSBvcHRpb25hbCBmZWF0dXJlcyB3aXRob3V0IG1vZGlmeWluZyB0aGUgc291cmNlLAogIyB5b3UgY2FuIHNldCBERUZJTkVTIG9uIHRoZSBjb21tYW5kIGxpbmUsIGUuZy4sCi0jCW5tYWtlIC1mIG1ha2VmaWxlLm12YyAiREVGSU5FUz0tREVNQUNTX1RBR1MiCisjCW5tYWtlIC1mIE1ha2VfbXZjLm12YyAiREVGSU5FUz0tREVNQUNTX1RBR1MiCiAKLSMgQnVpbGQgb24gYm90aCBXaW5kb3dzIE5UIGFuZCBXaW5kb3dzIDk1CisjIEJ1aWxkIG9uIGJvdGggV2luZG93cyBOVC9YUCBhbmQgV2luZG93cyA5eAogCiBUQVJHRVRPUyA9IEJPVEgKIApAQCAtMTY3LDEyICsxNjcsMTIgQEAKIE9CSkRJUiA9ICQoT0JKRElSKWQKICFlbmRpZgogCi0jIG50d2luMzIubWFrIHJlcXVpcmVzIHRoYXQgQ1BVIGJlIHNldCBhcHByb3ByaWF0ZWx5CisjIFdpbjMyLm1hayByZXF1aXJlcyB0aGF0IENQVSBiZSBzZXQgYXBwcm9wcmlhdGVseQogCiAhaWZkZWYgUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRQotIyBXZSdyZSBvbiBXaW5kb3dzIE5UIG9yIHVzaW5nIFZDIDYKKyMgV2UncmUgb24gV2luZG93cyBOVCBvciB1c2luZyBWQyA2KwogQ1BVID0gJChQUk9DRVNTT1JfQVJDSElURUNUVVJFKQotISBpZiAiJChDUFUpIiA9PSAieDg2IgorISBpZiAoIiQoQ1BVKSIgPT0gIng4NiIpIHx8ICgiJChDUFUpIiA9PSAiWDg2IikKIENQVSA9IGkzODYKICEgZW5kaWYKICFlbHNlICAjICFQUk9DRVNTT1JfQVJDSElURUNUVVJFCkBAIC0xOTAsMTcgKzE5MCwxMiBAQAogIWVuZGlmCiAKIAotIyBCdWlsZCBhIG11bHRpdGhyZWFkZWQgdmVyc2lvbiBmb3IgdGhlIFdpbmRvd3MgOTUgZGVhZCBrZXlzIGhhY2sKLSMgQ29tbWVudGVkIG91dCBiZWNhdXNlIGl0IGRvZXNuJ3Qgd29yay4KLSMgTVVMVElUSFJFQURFRCA9IDEKLQotCiAjIEdldCBhbGwgc29ydHMgb2YgdXNlZnVsLCBzdGFuZGFyZCBtYWNyb3MgZnJvbSB0aGUgU0RLLiAgKE5vdGUgdGhhdAogIyBNU1ZDIDIuMiBkb2VzIG5vdCBpbnN0YWxsIDxudHdpbjMyLm1haz4gaW4gdGhlIFxtc3ZjMjBcaW5jbHVkZQogIyBkaXJlY3RvcnksIGJ1dCB5b3UgY2FuIGZpbmQgaXQgaW4gXG1zdmMyMFxpbmNsdWRlIG9uIHRoZSBDRC1ST00uCiAjIFlvdSBtYXkgYWxzbyBuZWVkIDx3aW4zMi5tYWs+IGZyb20gdGhlIHNhbWUgcGxhY2UuKQogCi0haW5jbHVkZSA8bnR3aW4zMi5tYWs+CishaW5jbHVkZSA8V2luMzIubWFrPgogCiAKICM+Pj4+PiBwYXRoIG9mIHRoZSBjb21waWxlciBhbmQgbGlua2VyOyBuYW1lIG9mIGluY2x1ZGUgYW5kIGxpYiBkaXJlY3RvcmllcwpAQCAtMjYzLDEyICsyNTgsMTQgQEAKICFlbmRpZgogIWVuZGlmCiAKKyMgU2V0IHdoaWNoIHZlcnNpb24gb2YgdGhlIENSVCB0byB1c2UKICFpZiBkZWZpbmVkKFVTRV9NU1ZDUlQpCiBDVkFSUyA9ICQoY3ZhcnNkbGwpCi0hZWxzZWlmIGRlZmluZWQoTVVMVElUSFJFQURFRCkKLUNWQVJTID0gJChjdmFyc210KQorIyAhZWxzZWlmIGRlZmluZWQoTVVMVElUSFJFQURFRCkKKyMgQ1ZBUlMgPSAkKGN2YXJzbXQpCiAhZWxzZQotQ1ZBUlMgPSAkKGN2YXJzKQorIyBDVkFSUyA9ICQoY3ZhcnMpCitDVkFSUyA9ICQoY3ZhcnNtdCkKICFlbmRpZgogCiAjIG5lZWQgYWR2YXBpMzIubGliIGZvciBHZXRVc2VyTmFtZSgpCkBAIC0yNzYsNyArMjczLDcgQEAKICMgZ2RpMzIubGliIGFuZCBjb21kbGczMi5saWIgZm9yIHByaW50aW5nIHN1cHBvcnQKICMgb2xlMzIubGliIGFuZCB1dWlkLmxpYiBhcmUgbmVlZGVkIGZvciBGRUFUX1NIT1JUQ1VUCiBDT05fTElCID0gYWR2YXBpMzIubGliIHNoZWxsMzIubGliIGdkaTMyLmxpYiBjb21kbGczMi5saWIgb2xlMzIubGliIHV1aWQubGliCi0haWYgIiQoVkM2KSIgPT0gInllcyIKKyFpZiAiJChERUxBWUxPQUQpIiA9PSAieWVzIgogQ09OX0xJQiA9ICQoQ09OX0xJQikgL0RFTEFZTE9BRDpjb21kbGczMi5kbGwgL0RFTEFZTE9BRDpvbGUzMi5kbGwgRGVsYXlJbXAubGliCiAhZW5kaWYKIApAQCAtMzQwLDEwICszMzcsMTQgQEAKICEgaWZkZWYgVVNFX01TVkNSVAogQ0ZMQUdTID0gJChDRkxBR1MpIC1NRAogTElCQyA9IG1zdmNydC5saWIKLSEgZWxzZWlmIGRlZmluZWQoTVVMVElUSFJFQURFRCkKLUxJQkMgPSBsaWJjbXQubGliCisjIENGTEFHUyA9ICQoQ0ZMQUdTKSAkKGN2YXJzZGxsKQorIyAhIGVsc2VpZiBkZWZpbmVkKE1VTFRJVEhSRUFERUQpCisjIExJQkMgPSBsaWJjbXQubGliCisjIENGTEFHUyA9ICQoQ0ZMQUdTKSAkKGN2YXJzbXQpCiAhIGVsc2UKLUxJQkMgPSBsaWJjLmxpYgorIyBMSUJDID0gbGliYy5saWIKK0xJQkMgPSBsaWJjbXQubGliCisjIENGTEFHUyA9ICQoQ0ZMQUdTKSAkKGN2YXJzKQogISBlbmRpZgogIWVsc2UgICMgREVCVUcKIFZJTSA9IHZpbWQKQEAgLTM1OCwxMCArMzU5LDE0IEBACiAhIGlmZGVmIFVTRV9NU1ZDUlQKIENGTEFHUyA9ICQoQ0ZMQUdTKSAtTURkCiBMSUJDID0gJChMSUJDKSBtc3ZjcnRkLmxpYgotISBlbHNlaWYgZGVmaW5lZChNVUxUSVRIUkVBREVEKQotTElCQyA9ICQoTElCQykgbGliY210ZC5saWIKKyMgQ0ZMQUdTID0gJChDRkxBR1MpICQoY3ZhcnNkbGwpCisjICEgZWxzZWlmIGRlZmluZWQoTVVMVElUSFJFQURFRCkKKyMgTElCQyA9ICQoTElCQykgbGliY210ZC5saWIKKyMgQ0ZMQUdTID0gJChDRkxBR1MpICQoY3ZhcnNtdCkKICEgZWxzZQotTElCQyA9ICQoTElCQykgbGliY2QubGliCisjIExJQkMgPSAkKExJQkMpIGxpYmNkLmxpYgorTElCQyA9ICQoTElCQykgbGliY210ZC5saWIKKyMgQ0ZMQUdTID0gJChDRkxBR1MpICQoY3ZhcnMpCiAhIGVuZGlmCiAhZW5kaWYgIyBERUJVRwogCkBAIC02NjYsNyArNjcxLDcgQEAKICMgb24gYSBjcmFzaCAoZG9lc24ndCBhZGQgb3ZlcmhlYWQgdG8gdGhlIGV4ZWN1dGFibGUpLgogIwogQ0ZMQUdTID0gJChDRkxBR1MpIC9aaSAvRmQkKE9VVERJUikvCi1MSU5LX1BEQiA9IC9QREI6JChPVVRESVIpLyQoVklNKS5wZGIgLWRlYnVnOmZ1bGwgLWRlYnVndHlwZTpjdixmaXh1cAorTElOS19QREIgPSAvUERCOiQoT1VURElSKS8kKFZJTSkucGRiIC1kZWJ1ZyAjIC1kZWJ1ZzpmdWxsIC1kZWJ1Z3R5cGU6Y3YsZml4dXAKIAogIwogIyBFbmQgZXh0cmEgZmVhdHVyZSBpbmNsdWRlCkBAIC0xMDA0LDQgKzEwMDksOCBAQAogCXByb3RvL3dpbmRvdy5wcm8gXAogCSQoTkVUQkVBTlNfUFJPKQogCisuY29kLmM6CisJJChDQykgJChDRkxBR1MpIC9GQWMgJDwKKworCiAjIHZpbTogc2V0IG5vZXQgc3c9OCB0cz04IHN0cz0wIHdtPTAgdHc9MDoKZGlmZiAtLWdpdCBhL3NyYy9kb3NpbnN0LmggYi9zcmMvZG9zaW5zdC5oCmluZGV4IDVmZjRkNjcuLjdiNTNlNTAgMTAwNjQ0Ci0tLSBhL3NyYy9kb3NpbnN0LmgKKysrIGIvc3JjL2Rvc2luc3QuaApAQCAtOSw2ICs5LDEzIEBACiAvKgogICogZG9zaW5zdC5oOiBDb21tb24gY29kZSBmb3IgZG9zaW5zdC5jIGFuZCB1bmluc3RhbC5jCiAgKi8KKworLyogVmlzdWFsIFN0dWRpbyAyMDA1IGhhcyAnZGVwcmVjYXRlZCcgbWFueSBvZiB0aGUgc3RhbmRhcmQgQ1JUIGZ1bmN0aW9ucyAqLworI2lmIF9NU0NfVkVSID49IDE0MDAKKyMgZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURQorIyBkZWZpbmUgX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURQorI2VuZGlmCisKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTYsNyArMjMsNyBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAKICNpZm5kZWYgVU5JWF9MSU5UCi0jIGluY2x1ZGUgPGlvLmg+CisjIGluY2x1ZGUgInZpbWlvLmgiCiAjIGluY2x1ZGUgPGN0eXBlLmg+CiAKICMgaWZuZGVmIF9fQ1lHV0lOX18KZGlmZiAtLWdpdCBhL3NyYy9lZGl0LmMgYi9zcmMvZWRpdC5jCmluZGV4IDNhZDEyYTcuLjNhN2E4Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9lZGl0LmMKKysrIGIvc3JjL2VkaXQuYwpAQCAtNzYwNCw3ICs3NjA0LDcgQEAKICAgICBpbnQJCWluX2luZGVudDsKICAgICBpbnQJCW9sZFN0YXRlOwogI2lmZGVmIEZFQVRfTUJZVEUKLSAgICBpbnQJCXAxLCBwMjsKKyAgICBpbnQJCWNwY1tNQVhfTUNPXTsJICAgIC8qIGNvbXBvc2luZyBjaGFyYWN0ZXJzICovCiAjZW5kaWYKIAogICAgIC8qCkBAIC03OTIwLDE2ICs3OTIwLDE2IEBACiAJICAgIHsKICNpZmRlZiBGRUFUX01CWVRFCiAJCWlmIChlbmNfdXRmOCAmJiBwX2RlY28pCi0JCSAgICAodm9pZCl1dGZjX3B0cjJjaGFyKG1sX2dldF9jdXJzb3IoKSwgJnAxLCAmcDIpOworCQkgICAgKHZvaWQpdXRmY19wdHIyY2hhcihtbF9nZXRfY3Vyc29yKCksIGNwYyk7CiAjZW5kaWYKIAkJKHZvaWQpZGVsX2NoYXIoRkFMU0UpOwogI2lmZGVmIEZFQVRfTUJZVEUKIAkJLyoKLQkJICogSWYgcDEgb3IgcDIgaXMgbm9uLXplcm8sIHRoZXJlIGFyZSBjb21iaW5pbmcgY2hhcmFjdGVycyB3ZQotCQkgKiBuZWVkIHRvIHRha2UgYWNjb3VudCBvZi4gIERvbid0IGJhY2sgdXAgYmVmb3JlIHRoZSBiYXNlCisJCSAqIElmIHRoZXJlIGFyZSBjb21iaW5pbmcgY2hhcmFjdGVycyBhbmQgJ2RlbGNvbWJpbmUnIGlzIHNldAorCQkgKiBtb3ZlIHRoZSBjdXJzb3IgYmFjay4gIERvbid0IGJhY2sgdXAgYmVmb3JlIHRoZSBiYXNlCiAJCSAqIGNoYXJhY3Rlci4KIAkJICovCi0JCWlmIChlbmNfdXRmOCAmJiBwX2RlY28gJiYgKHAxICE9IE5VTCB8fCBwMiAhPSBOVUwpKQorCQlpZiAoZW5jX3V0ZjggJiYgcF9kZWNvICYmIGNwY1swXSAhPSBOVUwpCiAJCSAgICBpbmNfY3Vyc29yKCk7CiAjZW5kaWYKICNpZmRlZiBGRUFUX1JJR0hUTEVGVApkaWZmIC0tZ2l0IGEvc3JjL2V2YWwuYyBiL3NyYy9ldmFsLmMKaW5kZXggMWM3ZDBmOC4uNDMzNmEyNiAxMDA2NDQKLS0tIGEvc3JjL2V2YWwuYworKysgYi9zcmMvZXZhbC5jCkBAIC0xMSw3ICsxMSw3IEBACiAgKiBldmFsLmM6IEV4cHJlc3Npb24gZXZhbHVhdGlvbi4KICAqLwogI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pCi0jIGluY2x1ZGUgPGlvLmg+CS8qIGZvciBtY2hfb3BlbigpLCBtdXN0IGJlIGJlZm9yZSB2aW0uaCAqLworIyBpbmNsdWRlICJ2aW1pby5oIgkvKiBmb3IgbWNoX29wZW4oKSwgbXVzdCBiZSBiZWZvcmUgdmltLmggKi8KICNlbmRpZgogCiAjaW5jbHVkZSAidmltLmgiCkBAIC03MTgsNyArNzE4LDcgQEAKIHN0YXRpYyB2b2lkIGFkZF9ucl92YXIgX19BUkdTKChkaWN0X1QgKmRwLCBkaWN0aXRlbV9UICp2LCBjaGFyICpuYW1lLCB2YXJudW1iZXJfVCBucikpOwogc3RhdGljIHdpbl9UICpmaW5kX3dpbl9ieV9uciBfX0FSR1MoKHR5cHZhbF9UICp2cCkpOwogc3RhdGljIGludCBzZWFyY2hwYWlyX2NtbiBfX0FSR1MoKHR5cHZhbF9UICphcmd2YXJzLCBwb3NfVCAqbWF0Y2hfcG9zKSk7Ci1zdGF0aWMgaW50IHNlYXJjaF9jbW4gX19BUkdTKCh0eXB2YWxfVCAqYXJndmFycywgcG9zX1QgKm1hdGNoX3BvcykpOworc3RhdGljIGludCBzZWFyY2hfY21uIF9fQVJHUygodHlwdmFsX1QgKmFyZ3ZhcnMsIHBvc19UICptYXRjaF9wb3MsIGludCAqZmxhZ3NwKSk7CiAKIC8qIENoYXJhY3RlciB1c2VkIGFzIHNlcGFyYXRlZCBpbiBhdXRvbG9hZCBmdW5jdGlvbi92YXJpYWJsZSBuYW1lcy4gKi8KICNkZWZpbmUgQVVUT0xPQURfQ0hBUiAnIycKQEAgLTExNzEsMTggKzExNzEsMjggQEAKICAqIFJldHVybiBwb2ludGVyIHRvIGFsbG9jYXRlZCBtZW1vcnksIG9yIE5VTEwgZm9yIGZhaWx1cmUuCiAgKi8KICAgICBjaGFyX3UgKgotZXZhbF90b19zdHJpbmcoYXJnLCBuZXh0Y21kKQorZXZhbF90b19zdHJpbmcoYXJnLCBuZXh0Y21kLCBkb2xpc3QpCiAgICAgY2hhcl91CSphcmc7CiAgICAgY2hhcl91CSoqbmV4dGNtZDsKKyAgICBpbnQJCWRvbGlzdDsJCS8qIHR1cm4gTGlzdCBpbnRvIHNlcXVlbmNlIG9mIGxpbmVzICovCiB7CiAgICAgdHlwdmFsX1QJdHY7CiAgICAgY2hhcl91CSpyZXR2YWw7CisgICAgZ2FycmF5X1QJZ2E7CiAKICAgICBpZiAoZXZhbDAoYXJnLCAmdHYsIG5leHRjbWQsIFRSVUUpID09IEZBSUwpCiAJcmV0dmFsID0gTlVMTDsKICAgICBlbHNlCiAgICAgewotCXJldHZhbCA9IHZpbV9zdHJzYXZlKGdldF90dl9zdHJpbmcoJnR2KSk7CisJaWYgKGRvbGlzdCAmJiB0di52X3R5cGUgPT0gVkFSX0xJU1QpCisJeworCSAgICBnYV9pbml0MigmZ2EsIChpbnQpc2l6ZW9mKGNoYXIpLCA4MCk7CisJICAgIGxpc3Rfam9pbigmZ2EsIHR2LnZ2YWwudl9saXN0LCAoY2hhcl91ICopIlxuIiwgVFJVRSwgMCk7CisJICAgIGdhX2FwcGVuZCgmZ2EsIE5VTCk7CisJICAgIHJldHZhbCA9IChjaGFyX3UgKilnYS5nYV9kYXRhOworCX0KKwllbHNlCisJICAgIHJldHZhbCA9IHZpbV9zdHJzYXZlKGdldF90dl9zdHJpbmcoJnR2KSk7CiAJY2xlYXJfdHYoJnR2KTsKICAgICB9CiAKQEAgLTEyMDYsNyArMTIxNiw3IEBACiAgICAgaWYgKHVzZV9zYW5kYm94KQogCSsrc2FuZGJveDsKICAgICArK3RleHRsb2NrOwotICAgIHJldHZhbCA9IGV2YWxfdG9fc3RyaW5nKGFyZywgbmV4dGNtZCk7CisgICAgcmV0dmFsID0gZXZhbF90b19zdHJpbmcoYXJnLCBuZXh0Y21kLCBGQUxTRSk7CiAgICAgaWYgKHVzZV9zYW5kYm94KQogCS0tc2FuZGJveDsKICAgICAtLXRleHRsb2NrOwpAQCAtMTMyNzMsMjUgKzEzMjgzLDI3IEBACiAgKiBTaGFyZWQgYnkgc2VhcmNoKCkgYW5kIHNlYXJjaHBvcygpIGZ1bmN0aW9ucwogICovCiAgICAgc3RhdGljIGludAotc2VhcmNoX2Ntbihhcmd2YXJzLCBtYXRjaF9wb3MpCitzZWFyY2hfY21uKGFyZ3ZhcnMsIG1hdGNoX3BvcywgZmxhZ3NwKQogICAgIHR5cHZhbF9UCSphcmd2YXJzOwogICAgIHBvc19UCSptYXRjaF9wb3M7CisgICAgaW50CQkqZmxhZ3NwOwogeworICAgIGludAkJZmxhZ3M7CiAgICAgY2hhcl91CSpwYXQ7CiAgICAgcG9zX1QJcG9zOwogICAgIHBvc19UCXNhdmVfY3Vyc29yOwogICAgIGludAkJc2F2ZV9wX3dzID0gcF93czsKICAgICBpbnQJCWRpcjsKLSAgICBpbnQJCWZsYWdzID0gMDsKICAgICBpbnQJCXJldHZhbCA9IDA7CS8qIGRlZmF1bHQ6IEZBSUwgKi8KICAgICBsb25nCWxudW1fc3RvcCA9IDA7CiAgICAgaW50CQlvcHRpb25zID0gU0VBUkNIX0tFRVA7CiAgICAgaW50CQlzdWJwYXRudW07CiAKICAgICBwYXQgPSBnZXRfdHZfc3RyaW5nKCZhcmd2YXJzWzBdKTsKLSAgICBkaXIgPSBnZXRfc2VhcmNoX2FyZygmYXJndmFyc1sxXSwgJmZsYWdzKTsJLyogbWF5IHNldCBwX3dzICovCisgICAgZGlyID0gZ2V0X3NlYXJjaF9hcmcoJmFyZ3ZhcnNbMV0sIGZsYWdzcCk7CS8qIG1heSBzZXQgcF93cyAqLwogICAgIGlmIChkaXIgPT0gMCkKIAlnb3RvIHRoZWVuZDsKKyAgICBmbGFncyA9ICpmbGFnc3A7CiAgICAgaWYgKGZsYWdzICYgU1BfU1RBUlQpCiAJb3B0aW9ucyB8PSBTRUFSQ0hfU1RBUlQ7CiAgICAgaWYgKGZsYWdzICYgU1BfRU5EKQpAQCAtMTMzNTksNyArMTMzNzEsOSBAQAogICAgIHR5cHZhbF9UCSphcmd2YXJzOwogICAgIHR5cHZhbF9UCSpyZXR0djsKIHsKLSAgICByZXR0di0+dnZhbC52X251bWJlciA9IHNlYXJjaF9jbW4oYXJndmFycywgTlVMTCk7CisgICAgaW50CQlmbGFncyA9IDA7CisKKyAgICByZXR0di0+dnZhbC52X251bWJlciA9IHNlYXJjaF9jbW4oYXJndmFycywgTlVMTCwgJmZsYWdzKTsKIH0KIAogLyoKQEAgLTEzNjQ5LDEzICsxMzY2MywxNiBAQAogICAgIHBvc19UCW1hdGNoX3BvczsKICAgICBpbnQJCWxudW0gPSAwOwogICAgIGludAkJY29sID0gMDsKKyAgICBpbnQJCW47CisgICAgaW50CQlmbGFncyA9IDA7CiAKICAgICByZXR0di0+dnZhbC52X251bWJlciA9IDA7CiAKICAgICBpZiAocmV0dHZfbGlzdF9hbGxvYyhyZXR0dikgPT0gRkFJTCkKIAlyZXR1cm47CiAKLSAgICBpZiAoc2VhcmNoX2Ntbihhcmd2YXJzLCAmbWF0Y2hfcG9zKSA+IDApCisgICAgbiA9IHNlYXJjaF9jbW4oYXJndmFycywgJm1hdGNoX3BvcywgJmZsYWdzKTsKKyAgICBpZiAobiA+IDApCiAgICAgewogCWxudW0gPSBtYXRjaF9wb3MubG51bTsKIAljb2wgPSBtYXRjaF9wb3MuY29sOwpAQCAtMTM2NjMsNyArMTM2ODAsOCBAQAogCiAgICAgbGlzdF9hcHBlbmRfbnVtYmVyKHJldHR2LT52dmFsLnZfbGlzdCwgKHZhcm51bWJlcl9UKWxudW0pOwogICAgIGxpc3RfYXBwZW5kX251bWJlcihyZXR0di0+dnZhbC52X2xpc3QsICh2YXJudW1iZXJfVCljb2wpOwotCisgICAgaWYgKGZsYWdzICYgU1BfU1VCUEFUKQorCWxpc3RfYXBwZW5kX251bWJlcihyZXR0di0+dnZhbC52X2xpc3QsICh2YXJudW1iZXJfVCluKTsKIH0KIAogCkBAIC0xNTY3NSw2ICsxNTY5Myw3IEBACiAJY3Vyd2luLT53X2N1cnNvci5jb2xhZGQgPSBnZXRfZGljdF9udW1iZXIoZGljdCwgKGNoYXJfdSAqKSJjb2xhZGQiKTsKICNlbmRpZgogCWN1cndpbi0+d19jdXJzd2FudCA9IGdldF9kaWN0X251bWJlcihkaWN0LCAoY2hhcl91ICopImN1cnN3YW50Iik7CisJY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IEZBTFNFOwogCiAJY3Vyd2luLT53X3RvcGxpbmUgPSBnZXRfZGljdF9udW1iZXIoZGljdCwgKGNoYXJfdSAqKSJ0b3BsaW5lIik7CiAjaWZkZWYgRkVBVF9ESUZGCkBAIC0xNjIwOCw3ICsxNjIyNyw3IEBACiAgICAgYzEgPSAqaW5fZW5kOwogICAgICppbl9lbmQgPSBOVUw7CiAKLSAgICB0ZW1wX3Jlc3VsdCA9IGV2YWxfdG9fc3RyaW5nKGV4cHJfc3RhcnQgKyAxLCAmbmV4dGNtZCk7CisgICAgdGVtcF9yZXN1bHQgPSBldmFsX3RvX3N0cmluZyhleHByX3N0YXJ0ICsgMSwgJm5leHRjbWQsIEZBTFNFKTsKICAgICBpZiAodGVtcF9yZXN1bHQgIT0gTlVMTCAmJiBuZXh0Y21kID09IE5VTEwpCiAgICAgewogCXJldHZhbCA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKHRlbXBfcmVzdWx0KSArIChleHByX3N0YXJ0IC0gaW5fc3RhcnQpCmRpZmYgLS1naXQgYS9zcmMvZXhfY21kcy5jIGIvc3JjL2V4X2NtZHMuYwppbmRleCA3MTc2NmI5Li4yMmJiZDQ1IDEwMDY0NAotLS0gYS9zcmMvZXhfY21kcy5jCisrKyBiL3NyYy9leF9jbWRzLmMKQEAgLTUyLDEyICs1MiwxMiBAQAogICAgIGNoYXIJYnVmMlsyMF07CiAgICAgY2hhcl91CWJ1ZjNbN107CiAjaWZkZWYgRkVBVF9NQllURQotICAgIGludAkJYzEgPSAwOwotICAgIGludAkJYzIgPSAwOworICAgIGludAkJY2NbTUFYX01DT107CisgICAgaW50CQljaSA9IDA7CiAgICAgaW50CQlsZW47CiAKICAgICBpZiAoZW5jX3V0ZjgpCi0JYyA9IHV0ZmNfcHRyMmNoYXIobWxfZ2V0X2N1cnNvcigpLCAmYzEsICZjMik7CisJYyA9IHV0ZmNfcHRyMmNoYXIobWxfZ2V0X2N1cnNvcigpLCBjYyk7CiAgICAgZWxzZQogI2VuZGlmCiAJYyA9IGdjaGFyX2N1cnNvcigpOwpAQCAtOTUsOSArOTUsNyBAQAogCQlfKCI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9jdGFsICUwM28iKSwKIAkJCQkJICAgdHJhbnNjaGFyKGMpLCBidWYxLCBidWYyLCBjLCBjLCBjKTsKICNpZmRlZiBGRUFUX01CWVRFCi0JYyA9IGMxOwotCWMxID0gYzI7Ci0JYzIgPSAwOworCWMgPSBjY1tjaSsrXTsKICNlbmRpZgogICAgIH0KIApAQCAtMTIwLDkgKzExOCw5IEBACiAJdmltX3NucHJpbnRmKChjaGFyICopSU9idWZmICsgbGVuLCBJT1NJWkUgLSBsZW4sCiAJCQljIDwgMHgxMDAwMCA/IF8oIj4gJWQsIEhleCAlMDR4LCBPY3RhbCAlbyIpCiAJCQkJICAgIDogXygiPiAlZCwgSGV4ICUwOHgsIE9jdGFsICVvIiksIGMsIGMsIGMpOwotCWMgPSBjMTsKLQljMSA9IGMyOwotCWMyID0gMDsKKwlpZiAoY2kgPT0gTUFYX01DTykKKwkgICAgYnJlYWs7CisJYyA9IGNjW2NpKytdOwogICAgIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9zcmMvZXhfY21kcy5oIGIvc3JjL2V4X2NtZHMuaAppbmRleCBmNjZhOTc0Li4zNjQ4MDM0IDEwMDY0NAotLS0gYS9zcmMvZXhfY21kcy5oCisrKyBiL3NyYy9leF9jbWRzLmgKQEAgLTgzMSwxNCArODMxLDE2IEBACiAJCQlCQU5HfEZJTEUxfFJBTkdFfE5PVEFEUnxFRElUQ01EfEFSR09QVHxUUkxCQVIpLAogRVgoQ01EX3NwZWxsZ29vZCwJInNwZWxsZ29vZCIsCWV4X3NwZWxsLAogCQkJQkFOR3xSQU5HRXxOT1RBRFJ8TkVFREFSR3xFWFRSQXxUUkxCQVIpLAotRVgoQ01EX3NwZWxsd3JvbmcsCSJzcGVsbHdyb25nIiwJZXhfc3BlbGwsCi0JCQlCQU5HfFJBTkdFfE5PVEFEUnxORUVEQVJHfEVYVFJBfFRSTEJBUiksCiBFWChDTURfc3BlbGxkdW1wLAkic3BlbGxkdW1wIiwJZXhfc3BlbGxkdW1wLAogCQkJQkFOR3xUUkxCQVIpLAorRVgoQ01EX3NwZWxsaW5mbywJInNwZWxsaW5mbyIsCWV4X3NwZWxsaW5mbywKKwkJCVRSTEJBUiksCiBFWChDTURfc3BlbGxyZXBhbGwsCSJzcGVsbHJlcGFsbCIsCWV4X3NwZWxscmVwYWxsLAogCQkJVFJMQkFSKSwKIEVYKENNRF9zcGVsbHVuZG8sCSJzcGVsbHVuZG8iLAlleF9zcGVsbCwKIAkJCUJBTkd8UkFOR0V8Tk9UQURSfE5FRURBUkd8RVhUUkF8VFJMQkFSKSwKK0VYKENNRF9zcGVsbHdyb25nLAkic3BlbGx3cm9uZyIsCWV4X3NwZWxsLAorCQkJQkFOR3xSQU5HRXxOT1RBRFJ8TkVFREFSR3xFWFRSQXxUUkxCQVIpLAogRVgoQ01EX3NwcmV2aW91cywJInNwcmV2aW91cyIsCWV4X3ByZXZpb3VzLAogCQkJRVhUUkF8UkFOR0V8Tk9UQURSfENPVU5UfEJBTkd8RURJVENNRHxBUkdPUFR8VFJMQkFSKSwKIEVYKENNRF9zcmV3aW5kLAkJInNyZXdpbmQiLAlleF9yZXdpbmQsCmRpZmYgLS1naXQgYS9zcmMvZXhfY21kczIuYyBiL3NyYy9leF9jbWRzMi5jCmluZGV4IDBkNzE4OGEuLjdkNmEwZWIgMTAwNjQ0Ci0tLSBhL3NyYy9leF9jbWRzMi5jCisrKyBiL3NyYy9leF9jbWRzMi5jCkBAIC0xMiw3ICsxMiw3IEBACiAgKi8KIAogI2lmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoRkVBVF9DU0NPUEUpCi0jIGluY2x1ZGUgPGlvLmg+CisjIGluY2x1ZGUgInZpbWlvLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInZpbS5oIgpkaWZmIC0tZ2l0IGEvc3JjL2V4X2RvY21kLmMgYi9zcmMvZXhfZG9jbWQuYwppbmRleCAyN2YyY2U3Li5lMWU1YTgzIDEwMDY0NAotLS0gYS9zcmMvZXhfZG9jbWQuYworKysgYi9zcmMvZXhfZG9jbWQuYwpAQCAtMjQwLDYgKzI0MCw3IEBACiAjIGRlZmluZSBleF9zcGVsbAkJZXhfbmkKICMgZGVmaW5lIGV4X21rc3BlbGwJCWV4X25pCiAjIGRlZmluZSBleF9zcGVsbGR1bXAJCWV4X25pCisjIGRlZmluZSBleF9zcGVsbGluZm8JCWV4X25pCiAjIGRlZmluZSBleF9zcGVsbHJlcGFsbAkJZXhfbmkKICNlbmRpZgogI2lmbmRlZiBGRUFUX01aU0NIRU1FCkBAIC0zMjg5LDEwICszMjkwLDE3IEBACiAJaWYgKGJvdyAhPSBOVUxMICYmIGluX3F1b3RlKQogCSAgICB4cC0+eHBfcGF0dGVybiA9IGJvdzsKIAl4cC0+eHBfY29udGV4dCA9IEVYUEFORF9GSUxFUzsKKwogI2lmbmRlZiBCQUNLU0xBU0hfSU5fRklMRU5BTUUKIAkvKiBGb3IgYSBzaGVsbCBjb21tYW5kIG1vcmUgY2hhcnMgbmVlZCB0byBiZSBlc2NhcGVkLiAqLwogCWlmICh1c2VmaWx0ZXIgfHwgZWEuY21kaWR4ID09IENNRF9iYW5nKQorCXsKIAkgICAgeHAtPnhwX3NoZWxsID0gVFJVRTsKKworCSAgICAvKiBXaGVuIHN0aWxsIGFmdGVyIHRoZSBjb21tYW5kIG5hbWUgZXhwYW5kIGV4ZWN1dGFibGVzLiAqLworCSAgICBpZiAoeHAtPnhwX3BhdHRlcm4gPT0gc2tpcHdoaXRlKGFyZykpCisJCSAgICB4cC0+eHBfY29udGV4dCA9IEVYUEFORF9TSEVMTENNRDsKKwl9CiAjZW5kaWYKIAogCS8qIENoZWNrIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZSAqLwpAQCAtNTA4OSw2ICs1MDk3LDcgQEAKICAgICB7RVhQQU5EX01BUFBJTkdTLCAibWFwcGluZyJ9LAogICAgIHtFWFBBTkRfTUVOVVMsICJtZW51In0sCiAgICAge0VYUEFORF9TRVRUSU5HUywgIm9wdGlvbiJ9LAorICAgIHtFWFBBTkRfU0hFTExDTUQsICJzaGVsbGNtZCJ9LAogICAgIHtFWFBBTkRfVEFHUywgInRhZyJ9LAogICAgIHtFWFBBTkRfVEFHU19MSVNURklMRVMsICJ0YWdfbGlzdGZpbGVzIn0sCiAgICAge0VYUEFORF9VU0VSX1ZBUlMsICJ2YXIifSwKZGlmZiAtLWdpdCBhL3NyYy9leF9nZXRsbi5jIGIvc3JjL2V4X2dldGxuLmMKaW5kZXggMDYxZjhjNC4uNGI3YTU4NCAxMDA2NDQKLS0tIGEvc3JjL2V4X2dldGxuLmMKKysrIGIvc3JjL2V4X2dldGxuLmMKQEAgLTUxOCw3ICs1MTgsOCBAQAogCQl4cGMueHBfY29udGV4dCA9IEVYUEFORF9OT1RISU5HOwogCSAgICB9CiAJfQotCWlmICh4cGMueHBfY29udGV4dCA9PSBFWFBBTkRfRklMRVMgJiYgcF93bW51KQorCWlmICgoeHBjLnhwX2NvbnRleHQgPT0gRVhQQU5EX0ZJTEVTCisJCQkgICAgICB8fCB4cGMueHBfY29udGV4dCA9PSBFWFBBTkRfU0hFTExDTUQpICYmIHBfd21udSkKIAl7CiAJICAgIGNoYXJfdSB1cHNlZ1s1XTsKIApAQCAtMjQ2Niw5ICsyNDY3LDkgQEAKIAlpbnQJCXBjLCBwYzE7CiAJaW50CQlwcmV2X2MgPSAwOwogCWludAkJcHJldl9jMSA9IDA7Ci0JaW50CQl1OGMsIHU4Y19jMSwgdThjX2MyOworCWludAkJdThjOworCWludAkJdThjY1tNQVhfTUNPXTsKIAlpbnQJCW5jID0gMDsKLQlpbnQJCWR1bW15OwogCiAJLyoKIAkgKiBEbyBhcmFiaWMgc2hhcGluZyBpbnRvIGEgdGVtcG9yYXJ5IGJ1ZmZlci4gIFRoaXMgaXMgdmVyeQpAQCAtMjQ5NSw3ICsyNDk2LDcgQEAKIAlmb3IgKGogPSBzdGFydDsgaiA8IHN0YXJ0ICsgbGVuOyBqICs9IG1iX2wpCiAJewogCSAgICBwID0gY2NsaW5lLmNtZGJ1ZmYgKyBqOwotCSAgICB1OGMgPSB1dGZjX3B0cjJjaGFyX2xlbihwLCAmdThjX2MxLCAmdThjX2MyLCBzdGFydCArIGxlbiAtIGopOworCSAgICB1OGMgPSB1dGZjX3B0cjJjaGFyX2xlbihwLCB1OGNjLCBzdGFydCArIGxlbiAtIGopOwogCSAgICBtYl9sID0gdXRmY19wdHIybGVuX2xlbihwLCBzdGFydCArIGxlbiAtIGopOwogCSAgICBpZiAoQVJBQklDX0NIQVIodThjKSkKIAkgICAgewpAQCAtMjUwNSw3ICsyNTA2LDcgQEAKIAkJICAgIC8qIGRpc3BsYXlpbmcgZnJvbSByaWdodCB0byBsZWZ0ICovCiAJCSAgICBwYyA9IHByZXZfYzsKIAkJICAgIHBjMSA9IHByZXZfYzE7Ci0JCSAgICBwcmV2X2MxID0gdThjX2MxOworCQkgICAgcHJldl9jMSA9IHU4Y2NbMF07CiAJCSAgICBpZiAoaiArIG1iX2wgPj0gc3RhcnQgKyBsZW4pCiAJCQluYyA9IE5VTDsKIAkJICAgIGVsc2UKQEAgLTI1MTcsMjAgKzI1MTgsMjUgQEAKIAkJICAgIGlmIChqICsgbWJfbCA+PSBzdGFydCArIGxlbikKIAkJCXBjID0gTlVMOwogCQkgICAgZWxzZQotCQkJcGMgPSB1dGZjX3B0cjJjaGFyX2xlbihwICsgbWJfbCwgJnBjMSwgJmR1bW15LAorCQkgICAgeworCQkJaW50CXBjY1tNQVhfTUNPXTsKKworCQkJcGMgPSB1dGZjX3B0cjJjaGFyX2xlbihwICsgbWJfbCwgcGNjLAogCQkJCQkJICAgICAgc3RhcnQgKyBsZW4gLSBqIC0gbWJfbCk7CisJCQlwYzEgPSBwY2NbMF07CisJCSAgICB9CiAJCSAgICBuYyA9IHByZXZfYzsKIAkJfQogCQlwcmV2X2MgPSB1OGM7CiAKLQkJdThjID0gYXJhYmljX3NoYXBlKHU4YywgTlVMTCwgJnU4Y19jMSwgcGMsIHBjMSwgbmMpOworCQl1OGMgPSBhcmFiaWNfc2hhcGUodThjLCBOVUxMLCAmdThjY1swXSwgcGMsIHBjMSwgbmMpOwogCiAJCW5ld2xlbiArPSAoKm1iX2NoYXIyYnl0ZXMpKHU4YywgYXJzaGFwZV9idWYgKyBuZXdsZW4pOwotCQlpZiAodThjX2MxICE9IDApCisJCWlmICh1OGNjWzBdICE9IDApCiAJCXsKLQkJICAgIG5ld2xlbiArPSAoKm1iX2NoYXIyYnl0ZXMpKHU4Y19jMSwgYXJzaGFwZV9idWYgKyBuZXdsZW4pOwotCQkgICAgaWYgKHU4Y19jMiAhPSAwKQotCQkJbmV3bGVuICs9ICgqbWJfY2hhcjJieXRlcykodThjX2MyLAorCQkgICAgbmV3bGVuICs9ICgqbWJfY2hhcjJieXRlcykodThjY1swXSwgYXJzaGFwZV9idWYgKyBuZXdsZW4pOworCQkgICAgaWYgKHU4Y2NbMV0gIT0gMCkKKwkJCW5ld2xlbiArPSAoKm1iX2NoYXIyYnl0ZXMpKHU4Y2NbMV0sCiAJCQkJCQkJYXJzaGFwZV9idWYgKyBuZXdsZW4pOwogCQl9CiAJICAgIH0KQEAgLTMzNTMsNiArMzM1OSw3IEBACiAjaWZkZWYgQ0FTRV9JTlNFTlNJVElWRV9GSUxFTkFNRQogCQlpZiAoeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0RJUkVDVE9SSUVTCiAJCQl8fCB4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfRklMRVMKKwkJCXx8IHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9TSEVMTENNRAogCQkJfHwgeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0JVRkZFUlMpCiAJCXsKIAkJICAgIGlmIChUT0xPV0VSX0xPQyh4cC0+eHBfZmlsZXNbaV1bbGVuXSkgIT0KQEAgLTM0NTQsNiArMzQ2MSw3IEBACiAgICAgaWYgKG9wdGlvbnMgJiBXSUxEX0VTQ0FQRSkKICAgICB7CiAJaWYgKHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9GSUxFUworCQl8fCB4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfU0hFTExDTUQKIAkJfHwgeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0JVRkZFUlMKIAkJfHwgeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0RJUkVDVE9SSUVTKQogCXsKQEAgLTM2NDgsNiArMzY1Niw3IEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9maWxlczsgKytpKQogCXsKIAkgICAgaWYgKCFzaG93dGFpbCAmJiAoeHAtPnhwX2NvbnRleHQgPT0gRVhQQU5EX0ZJTEVTCisJCQkgIHx8IHhwLT54cF9jb250ZXh0ID09IEVYUEFORF9TSEVMTENNRAogCQkJICB8fCB4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfQlVGRkVSUykpCiAJICAgIHsKIAkJaG9tZV9yZXBsYWNlKE5VTEwsIGZpbGVzX2ZvdW5kW2ldLCBOYW1lQnVmZiwgTUFYUEFUSEwsIFRSVUUpOwpAQCAtMzcwMCw2ICszNzA5LDcgQEAKIAkJZm9yIChqID0gbWF4bGVuIC0gbGFzdGxlbjsgLS1qID49IDA7ICkKIAkJICAgIG1zZ19wdXRjaGFyKCcgJyk7CiAJCWlmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfRklMRVMKKwkJCQkJICB8fCB4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfU0hFTExDTUQKIAkJCQkJICB8fCB4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfQlVGRkVSUykKIAkJewogCQkJICAgIC8qIGhpZ2hsaWdodCBkaXJlY3RvcmllcyAqLwpAQCAtMzc4OSw3ICszNzk5LDkgQEAKICAgICBjaGFyX3UJKmVuZDsKIAogICAgIC8qIFdoZW4gbm90IGNvbXBsZXRpbmcgZmlsZSBuYW1lcyBhICIvIiBtYXkgbWVhbiBzb21ldGhpbmcgZGlmZmVyZW50LiAqLwotICAgIGlmICh4cC0+eHBfY29udGV4dCAhPSBFWFBBTkRfRklMRVMgJiYgeHAtPnhwX2NvbnRleHQgIT0gRVhQQU5EX0RJUkVDVE9SSUVTKQorICAgIGlmICh4cC0+eHBfY29udGV4dCAhPSBFWFBBTkRfRklMRVMKKwkgICAgJiYgeHAtPnhwX2NvbnRleHQgIT0gRVhQQU5EX1NIRUxMQ01ECisJICAgICYmIHhwLT54cF9jb250ZXh0ICE9IEVYUEFORF9ESVJFQ1RPUklFUykKIAlyZXR1cm4gRkFMU0U7CiAKICAgICBlbmQgPSBnZXR0YWlsKHhwLT54cF9wYXR0ZXJuKTsKQEAgLTM4MjYsNyArMzgzOCw5IEBACiAgICAgaW50CQluZXdfbGVuOwogICAgIGNoYXJfdQkqdGFpbDsKIAotICAgIGlmIChjb250ZXh0ICE9IEVYUEFORF9GSUxFUyAmJiBjb250ZXh0ICE9IEVYUEFORF9ESVJFQ1RPUklFUykKKyAgICBpZiAoY29udGV4dCAhPSBFWFBBTkRfRklMRVMKKwkgICAgJiYgY29udGV4dCAhPSBFWFBBTkRfU0hFTExDTUQKKwkgICAgJiYgY29udGV4dCAhPSBFWFBBTkRfRElSRUNUT1JJRVMpCiAgICAgewogCS8qCiAJICogTWF0Y2hpbmcgd2lsbCBiZSBkb25lIGludGVybmFsbHkgKG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGZpbGVzKS4KQEAgLTM5NDMsNiArMzk1Nyw3IEBACiAgKiAgRVhQQU5EX0RJUkVDVE9SSUVTCSAgICBJbiBzb21lIGNhc2VzIHRoaXMgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBsYXR0ZXIKICAqCQkJICAgIHdoZW4gd2Uga25vdyBvbmx5IGRpcmVjdG9yaWVzIGFyZSBvZiBpbnRlcmVzdC4gIGVnCiAgKgkJCSAgICA6c2V0IGRpcj1eSQorICogIEVYUEFORF9TSEVMTENNRAkgICAgQWZ0ZXIgIjohY21kIiwgIjpyICFjbWQiICBvciAiOncgIWNtZCIuCiAgKiAgRVhQQU5EX1NFVFRJTkdTCSAgICBDb21wbGV0ZSB2YXJpYWJsZSBuYW1lcy4gIGVnIDpzZXQgZF5JCiAgKiAgRVhQQU5EX0JPT0xfU0VUVElOR1MgICAgQ29tcGxldGUgYm9vbGVhbiB2YXJpYWJsZXMgb25seSwgIGVnIDpzZXQgbm9eSQogICogIEVYUEFORF9UQUdTCQkgICAgQ29tcGxldGUgdGFncyBmcm9tIHRoZSBmaWxlcyBpbiBwX3RhZ3MuICBlZyA6dGEgYV5JCkBAIC00MTY1LDYgKzQxODAsOTMgQEAKIAlyZXR1cm4gcmV0OwogICAgIH0KIAorICAgIGlmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfU0hFTExDTUQpCisgICAgeworCS8qCisJICogRXhwYW5kIHNoZWxsIGNvbW1hbmQuCisJICovCisJaW50CSAgICBpOworCWNoYXJfdQkgICAgKnBhdGg7CisJaW50CSAgICBtdXN0ZnJlZSA9IEZBTFNFOworCWdhcnJheV9UICAgIGdhOworCWNoYXJfdQkgICAgKmJ1ZiA9IGFsbG9jKE1BWFBBVEhMKTsKKwlpbnQJICAgIGw7CisJY2hhcl91CSAgICAqcywgKmU7CisKKwlpZiAoYnVmID09IE5VTEwpCisJICAgIHJldHVybiBGQUlMOworCisJLyogZm9yICI6c2V0IHBhdGg9IiBhbmQgIjpzZXQgdGFncz0iIGhhbHZlIGJhY2tzbGFzaGVzIGZvciBlc2NhcGVkCisJICogc3BhY2UgKi8KKwlwYXQgPSB2aW1fc3Ryc2F2ZShwYXQpOworCWZvciAoaSA9IDA7IHBhdFtpXTsgKytpKQorCSAgICBpZiAocGF0W2ldID09ICdcXCcgJiYgcGF0W2kgKyAxXSA9PSAnICcpCisJCVNUUkNQWShwYXQgKyBpLCBwYXQgKyBpICsgMSk7CisKKwlmbGFncyB8PSBFV19GSUxFIHwgRVdfRVhFQzsKKwkvKiBGb3IgYW4gYWJzb2x1dGUgbmFtZSB3ZSBkb24ndCB1c2UgJFBBVEguICovCisJaWYgKChwYXRbMF0gPT0gJy4nICYmICh2aW1faXNwYXRoc2VwKHBhdFsxXSkKKwkJCQl8fCAocGF0WzFdID09ICcuJyAmJiB2aW1faXNwYXRoc2VwKHBhdFsyXSkpKSkpCisJICAgIHBhdGggPSAoY2hhcl91ICopIi4iOworCWVsc2UKKwkgICAgcGF0aCA9IHZpbV9nZXRlbnYoKGNoYXJfdSAqKSJQQVRIIiwgJm11c3RmcmVlKTsKKworCWdhX2luaXQyKCZnYSwgKGludClzaXplb2YoY2hhciAqKSwgMTApOworCWZvciAocyA9IHBhdGg7ICpzICE9IE5VTDsgcyA9IGUpCisJeworI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoT1MyKQorCSAgICBlID0gdmltX3N0cmNocihzLCAnOycpOworI2Vsc2UKKwkgICAgZSA9IHZpbV9zdHJjaHIocywgJzonKTsKKyNlbmRpZgorCSAgICBpZiAoZSA9PSBOVUxMKQorCQllID0gcyArIFNUUkxFTihzKTsKKworCSAgICBsID0gZSAtIHM7CisJICAgIGlmIChsID4gTUFYUEFUSEwgLSA1KQorCQlicmVhazsKKwkgICAgdmltX3N0cm5jcHkoYnVmLCBzLCBsKTsKKwkgICAgYWRkX3BhdGhzZXAoYnVmKTsKKwkgICAgbCA9IFNUUkxFTihidWYpOworCSAgICB2aW1fc3RybmNweShidWYgKyBsLCBwYXQsIE1BWFBBVEhMIC0gMSAtIGwpOworCisJICAgIC8qIEV4cGFuZCBtYXRjaGVzIGluIG9uZSBkaXJlY3Rvcnkgb2YgJFBBVEguICovCisJICAgIHJldCA9IGV4cGFuZF93aWxkY2FyZHMoMSwgJmJ1ZiwgbnVtX2ZpbGUsIGZpbGUsIGZsYWdzKTsKKwkgICAgaWYgKHJldCA9PSBPSykKKwkgICAgeworCQlpZiAoZ2FfZ3JvdygmZ2EsICpudW1fZmlsZSkgPT0gRkFJTCkKKwkJICAgIEZyZWVXaWxkKCpudW1fZmlsZSwgKmZpbGUpOworCQllbHNlCisJCXsKKwkJICAgIGZvciAoaSA9IDA7IGkgPCAqbnVtX2ZpbGU7ICsraSkKKwkJICAgIHsKKwkJCXMgPSAoKmZpbGUpW2ldOworCQkJaWYgKFNUUkxFTihzKSA+IGwpCisJCQl7CisJCQkgICAgLyogUmVtb3ZlIHRoZSBwYXRoIGFnYWluLiAqLworCQkJICAgIG1jaF9tZW1tb3ZlKHMsIHMgKyBsLCBTVFJMRU4ocyArIGwpICsgMSk7CisJCQkgICAgKChjaGFyX3UgKiopZ2EuZ2FfZGF0YSlbZ2EuZ2FfbGVuXSA9IHM7CisJCQkgICAgKytnYS5nYV9sZW47CisJCQl9CisJCQllbHNlCisJCQkgICAgdmltX2ZyZWUocyk7CisJCSAgICB9CisJCSAgICB2aW1fZnJlZSgqZmlsZSk7CisJCX0KKwkgICAgfQorCSAgICBpZiAoKmUgIT0gTlVMKQorCQkrK2U7CisJfQorCSpmaWxlID0gZ2EuZ2FfZGF0YTsKKwkqbnVtX2ZpbGUgPSBnYS5nYV9sZW47CisKKwl2aW1fZnJlZShidWYpOworCXZpbV9mcmVlKHBhdCk7CisJaWYgKG11c3RmcmVlKQorCSAgICB2aW1fZnJlZShwYXRoKTsKKwlyZXR1cm4gcmV0OworICAgIH0KKwogICAgICpmaWxlID0gKGNoYXJfdSAqKikiIjsKICAgICAqbnVtX2ZpbGUgPSAwOwogICAgIGlmICh4cC0+eHBfY29udGV4dCA9PSBFWFBBTkRfSEVMUCkKZGlmZiAtLWdpdCBhL3NyYy9mZWF0dXJlLmggYi9zcmMvZmVhdHVyZS5oCmluZGV4IDM0YjY3M2QuLjcyMzFiOTYgMTAwNjQ0Ci0tLSBhL3NyYy9mZWF0dXJlLmgKKysrIGIvc3JjL2ZlYXR1cmUuaApAQCAtNjA5LDYgKzYwOSwxMCBAQAogIyBkZWZpbmUgRkVBVF9NQllURQogI2VuZGlmCiAKKy8qIERlZmluZSB0aGlzIGlmIHlvdSB3YW50IHRvIHVzZSAxNiBiaXQgVW5pY29kZSBvbmx5LCByZWR1Y2VzIG1lbW9yeSB1c2VkIGZvcgorICogdGhlIHNjcmVlbiBzdHJ1Y3R1cmVzLiAqLworLyogI2RlZmluZSBVTklDT0RFMTYgKi8KKwogLyoKICAqICttdWx0aV9ieXRlX2ltZQlXaW4zMiBJTUUgaW5wdXQgbWV0aG9kLiAgUmVxdWlyZXMgK211bHRpX2J5dGUuCiAgKgkJCU9ubHkgZm9yIGZhci1lYXN0IFdpbmRvd3MsIHNvIElNRSBjYW4gYmUgdXNlZCB0byBpbnB1dApAQCAtNzMyLDcgKzczNiw3IEBACiAvKgogICogR1VJIHRhYmxpbmUKICAqLwotI2lmIGRlZmluZWQoRkVBVF9HVUlfR1RLKSAmJiBkZWZpbmVkKEhBVkVfR1RLMikgJiYgZGVmaW5lZChGRUFUX1dJTkRPV1MpCisjaWYgZGVmaW5lZChGRUFUX0dVSV9HVEspICYmIGRlZmluZWQoRkVBVF9XSU5ET1dTKQogIyBkZWZpbmUgRkVBVF9HVUlfVEFCTElORQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NyYy9maWxlaW8uYyBiL3NyYy9maWxlaW8uYwppbmRleCA1MDhkZTBiLi44MzMzZjczIDEwMDY0NAotLS0gYS9zcmMvZmlsZWlvLmMKKysrIGIvc3JjL2ZpbGVpby5jCkBAIC0xMiwxMSArMTIsMTEgQEAKICAqLwogCiAjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU4xNikgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lONjQpCi0jIGluY2x1ZGUgPGlvLmg+CS8qIGZvciBsc2VlaygpLCBtdXN0IGJlIGJlZm9yZSB2aW0uaCAqLworIyBpbmNsdWRlICJ2aW1pby5oIgkvKiBmb3IgbHNlZWsoKSwgbXVzdCBiZSBiZWZvcmUgdmltLmggKi8KICNlbmRpZgogCiAjaWYgZGVmaW5lZCBfX0VNWF9fCi0jIGluY2x1ZGUgPGlvLmg+CS8qIGZvciBta3RlbXAoKSwgQ0pXIDE5OTctMTItMDMgKi8KKyMgaW5jbHVkZSAidmltaW8uaCIJLyogZm9yIG1rdGVtcCgpLCBDSlcgMTk5Ny0xMi0wMyAqLwogI2VuZGlmCiAKICNpbmNsdWRlICJ2aW0uaCIKZGlmZiAtLWdpdCBhL3NyYy9nbG9iYWxzLmggYi9zcmMvZ2xvYmFscy5oCmluZGV4IDllMGYzZTQuLmQzMTEwOTUgMTAwNjQ0Ci0tLSBhL3NyYy9nbG9iYWxzLmgKKysrIGIvc3JjL2dsb2JhbHMuaApAQCAtNTMsOCArNTMsOSBAQAogICogTm90ZTogVGhlc2UgdGhyZWUgYXJlIG9ubHkgYWxsb2NhdGVkIHdoZW4gZW5jX3V0ZjggaXMgc2V0IQogICovCiBFWFRFUk4gdThjaGFyX1QJKlNjcmVlbkxpbmVzVUMgSU5JVCg9IE5VTEwpOwkvKiBkZWNvZGVkIFVURi04IGNoYXJhY3RlcnMgKi8KLUVYVEVSTiB1OGNoYXJfVAkqU2NyZWVuTGluZXNDMSBJTklUKD0gTlVMTCk7CS8qIGZpcnN0IGNvbXBvc2luZyBjaGFyICovCi1FWFRFUk4gdThjaGFyX1QJKlNjcmVlbkxpbmVzQzIgSU5JVCg9IE5VTEwpOwkvKiBzZWNvbmQgY29tcG9zaW5nIGNoYXIgKi8KK0VYVEVSTiB1OGNoYXJfVAkqU2NyZWVuTGluZXNDW01BWF9NQ09dOwkJLyogY29tcG9zaW5nIGNoYXJhY3RlcnMgKi8KK0VYVEVSTiBpbnQJU2NyZWVuX21jbyBJTklUKD0gMCk7CQkvKiB2YWx1ZSBvZiBwX21jbyB1c2VkIHdoZW4KKwkJCQkJCSAgIGFsbG9jYXRpbmcgU2NyZWVuTGluZXNDW10gKi8KIAogLyogT25seSB1c2VkIGZvciBldWMtanA6IFNlY29uZCBieXRlIG9mIGEgY2hhcmFjdGVyIHRoYXQgc3RhcnRzIHdpdGggMHg4ZS4KICAqIFRoZXNlIGFyZSBzaW5nbGUtd2lkdGguICovCmRpZmYgLS1naXQgYS9zcmMvZ3VpLmggYi9zcmMvZ3VpLmgKaW5kZXggOTAwNDdjMy4uNjU0NDI0NCAxMDA2NDQKLS0tIGEvc3JjL2d1aS5oCisrKyBiL3NyYy9ndWkuaApAQCAtMzkxLDYgKzM5MSw4IEBACiAgICAgUGFuZ29Db250ZXh0ICAgICAqdGV4dF9jb250ZXh0OyAvKiB0aGUgY29udGV4dCB1c2VkIGZvciBhbGwgdGV4dCAqLwogICAgIFBhbmdvRm9udAkgICAgICphc2NpaV9mb250OyAgIC8qIGNhY2hlZCBmb250IGZvciBBU0NJSSBzdHJpbmdzICovCiAgICAgUGFuZ29HbHlwaFN0cmluZyAqYXNjaWlfZ2x5cGhzOyAvKiBjYWNoZWQgY29kZSBwb2ludCAtPiBnbHlwaCBtYXAgKi8KKyMgZW5kaWYKKyMgaWZkZWYgRkVBVF9HVUlfVEFCTElORQogICAgIEd0a1dpZGdldAkqdGFibGluZTsJICAgIC8qIHRhYiBwYWdlcyBsaW5lIGhhbmRsZSAqLwogIyBlbmRpZgogCmRpZmYgLS1naXQgYS9zcmMvZ3VpX2JldmFsLmMgYi9zcmMvZ3VpX2JldmFsLmMKaW5kZXggMGJjZDAyMy4uYjc5ODg0ZSAxMDA2NDQKLS0tIGEvc3JjL2d1aV9iZXZhbC5jCisrKyBiL3NyYy9ndWlfYmV2YWwuYwpAQCAtNjEsNyArNjEsNyBAQAogCSsrdGV4dGxvY2s7CiAKIAl2aW1fZnJlZShyZXN1bHQpOwotCXJlc3VsdCA9IGV2YWxfdG9fc3RyaW5nKHBfYmV4cHIsIE5VTEwpOworCXJlc3VsdCA9IGV2YWxfdG9fc3RyaW5nKHBfYmV4cHIsIE5VTEwsIFRSVUUpOwogCiAJaWYgKHVzZV9zYW5kYm94KQogCSAgICAtLXNhbmRib3g7CmRpZmYgLS1naXQgYS9zcmMvZ3VpX2d0a194MTEuYyBiL3NyYy9ndWlfZ3RrX3gxMS5jCmluZGV4IDA0ZjEzNzIuLjA1OGU5MGMgMTAwNjQ0Ci0tLSBhL3NyYy9ndWlfZ3RrX3gxMS5jCisrKyBiL3NyYy9ndWlfZ3RrX3gxMS5jCkBAIC0zMTg3LDYgKzMxODcsMTAgQEAKICAgICB9CiB9CiAKKyNpZm5kZWYgSEFWRV9HVEsyCitzdGF0aWMgaW50IHNob3dpbmdfdGFibGluZSA9IDA7CisjZW5kaWYKKwogLyoKICAqIFNob3cgb3IgaGlkZSB0aGUgdGFibGluZS4KICAqLwpAQCAtMzE5NiwxMSArMzIwMCwxOSBAQAogICAgIGlmIChndWkudGFibGluZSA9PSBOVUxMKQogCXJldHVybjsKIAorI2lmZGVmIEhBVkVfR1RLMgorICAgIC8qIGd0a19ub3RlYm9va19nZXRfc2hvd190YWJzIGRvZXMgbm90IGV4aXN0IGluIGd0aystMS4yLjEwICovCiAgICAgaWYgKCFzaG93aXQgIT0gIWd0a19ub3RlYm9va19nZXRfc2hvd190YWJzKEdUS19OT1RFQk9PSyhndWkudGFibGluZSkpKQorI2Vsc2UKKyAgICBpZiAoIXNob3dpdCAhPSAhc2hvd2luZ190YWJsaW5lKQorI2VuZGlmCiAgICAgewogCS8qIE5vdGU6IHRoaXMgbWF5IGNhdXNlIGEgcmVzaXplIGV2ZW50ICovCiAJZ3RrX25vdGVib29rX3NldF9zaG93X3RhYnMoR1RLX05PVEVCT09LKGd1aS50YWJsaW5lKSwgc2hvd2l0KTsKIAl1cGRhdGVfd2luZG93X21hbmFnZXJfaGludHMoKTsKKyNpZm5kZWYgSEFWRV9HVEsyCisJc2hvd2luZ190YWJsaW5lID0gc2hvd2l0OworI2VuZGlmCiAgICAgfQogfQogCkBAIC0zMjExLDcgKzMyMjMsMTMgQEAKIGd1aV9tY2hfc2hvd2luZ190YWJsaW5lKHZvaWQpCiB7CiAgICAgcmV0dXJuIGd1aS50YWJsaW5lICE9IE5VTEwKLQkJICAgICAmJiBndGtfbm90ZWJvb2tfZ2V0X3Nob3dfdGFicyhHVEtfTk9URUJPT0soZ3VpLnRhYmxpbmUpKTsKKyNpZmRlZiBIQVZFX0dUSzIKKwkgICAgLyogZ3RrX25vdGVib29rX2dldF9zaG93X3RhYnMgZG9lcyBub3QgZXhpc3QgaW4gZ3RrKy0xLjIuMTAgKi8KKwkJICAgICAmJiBndGtfbm90ZWJvb2tfZ2V0X3Nob3dfdGFicyhHVEtfTk9URUJPT0soZ3VpLnRhYmxpbmUpKQorI2Vsc2UKKwkJICAgICAmJiBzaG93aW5nX3RhYmxpbmUKKyNlbmRpZgorCQkgICAgIDsKIH0KIAogLyoKQEAgLTQ0NTYsNyArNDQ3NCw5IEBACiAKICAgICBpZiAoZ3VpLmZvbnRuYW1lICE9IE5VTEwpCiAgICAgewotCWZvbnRuYW1lID0gdmltX3N0cnNhdmUoZ3VpLmZvbnRuYW1lKTsKKwkvKiBBcHBhcmVudGx5IHNvbWUgZm9udCBuYW1lcyBpbmNsdWRlIGEgY29tbWEsIG5lZWQgdG8gZXNjYXBlIHRoYXQsCisJICogYmVjYXVzZSBpbiAnZ3VpZm9udCcgaXQgc2VwYXJhdGVzIG5hbWVzLiAqLworCWZvbnRuYW1lID0gdmltX3N0cnNhdmVfZXNjYXBlZChndWkuZm9udG5hbWUsIChjaGFyX3UgKikiLCIpOwogCWdfZnJlZShndWkuZm9udG5hbWUpOwogCWd1aS5mb250bmFtZSA9IE5VTEw7CiAgICAgfQpAQCAtNDUyNiwxMSArNDU0NiwxOSBAQAogCQkJICAgIEdUS19GT05UX1NFTEVDVElPTl9ESUFMT0coZGlhbG9nKSk7CiAJaWYgKG5hbWUgIT0gTlVMTCkKIAl7Ci0JICAgIGlmIChpbnB1dF9jb252LnZjX3R5cGUgIT0gQ09OVl9OT05FKQotCQlmb250bmFtZSA9IHN0cmluZ19jb252ZXJ0KCZpbnB1dF9jb252LCAoY2hhcl91ICopbmFtZSwgTlVMTCk7Ci0JICAgIGVsc2UKLQkJZm9udG5hbWUgPSB2aW1fc3Ryc2F2ZSgoY2hhcl91ICopbmFtZSk7CisJICAgIGNoYXJfdSAgKnA7CisKKwkgICAgLyogQXBwYXJlbnRseSBzb21lIGZvbnQgbmFtZXMgaW5jbHVkZSBhIGNvbW1hLCBuZWVkIHRvIGVzY2FwZQorCSAgICAgKiB0aGF0LCBiZWNhdXNlIGluICdndWlmb250JyBpdCBzZXBhcmF0ZXMgbmFtZXMuICovCisJICAgIHAgPSB2aW1fc3Ryc2F2ZV9lc2NhcGVkKChjaGFyX3UgKiluYW1lLCAoY2hhcl91ICopIiwiKTsKIAkgICAgZ19mcmVlKG5hbWUpOworCSAgICBpZiAoaW5wdXRfY29udi52Y190eXBlICE9IENPTlZfTk9ORSkKKwkgICAgeworCQlmb250bmFtZSA9IHN0cmluZ19jb252ZXJ0KCZpbnB1dF9jb252LCBwLCBOVUxMKTsKKwkJdmltX2ZyZWUocCk7CisJICAgIH0KKwkgICAgZWxzZQorCQlmb250bmFtZSA9IHA7CiAJfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2d1aV93MzIuYyBiL3NyYy9ndWlfdzMyLmMKaW5kZXggMjM0YWZlMS4uNDZjYTU0NiAxMDA2NDQKLS0tIGEvc3JjL2d1aV93MzIuYworKysgYi9zcmMvZ3VpX3czMi5jCkBAIC0yMDI1LDEyICsyMDI1LDI2IEBACiAJaW50CQljbGVuOwkvKiBzdHJpbmcgbGVuZ3RoIHVwIHRvIGNvbXBvc2luZyBjaGFyICovCiAJaW50CQljZWxsczsJLyogY2VsbCB3aWR0aCBvZiBzdHJpbmcgdXAgdG8gY29tcG9zaW5nIGNoYXIgKi8KIAlpbnQJCWN3OwkvKiB3aWR0aCBvZiBjdXJyZW50IGNlbGwgKi8KKwlpbnQJCWM7CisJaW50CQl4dHJhOwogCiAJY2VsbHMgPSAwOwogCWZvciAoY2xlbiA9IDA7IGkgPCBsZW47ICkKIAl7Ci0JICAgIHVuaWNvZGVidWZbY2xlbl0gPSB1dGZfcHRyMmNoYXIodGV4dCArIGkpOwotCSAgICBjdyA9IHV0Zl9jaGFyMmNlbGxzKHVuaWNvZGVidWZbY2xlbl0pOworCSAgICBjID0gdXRmX3B0cjJjaGFyKHRleHQgKyBpKTsKKwkgICAgaWYgKGMgPj0gMHgxMDAwMCkKKwkgICAgeworCQkvKiBUdXJuIGludG8gVVRGLTE2IGVuY29kaW5nLiAqLworCQl1bmljb2RlYnVmW2NsZW5dID0gKChjIC0gMHgxMDAwMCkgPj4gMTApICsgMHhEODAwOworCQl1bmljb2RlYnVmW2NsZW4gKyAxXSA9ICgoYyAtIDB4MTAwMDApICYgMHgzZmYpICsgMHhEQzAwOworCQl4dHJhID0gMTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJdW5pY29kZWJ1ZltjbGVuXSA9IGM7CisJCXh0cmEgPSAwOworCSAgICB9CisJICAgIGN3ID0gdXRmX2NoYXIyY2VsbHMoYyk7CiAJICAgIGlmIChjdyA+IDIpCQkvKiBkb24ndCB1c2UgNCBmb3IgdW5wcmludGFibGUgY2hhciAqLwogCQljdyA9IDE7CiAJICAgIGlmICh1bmljb2RlcGR5ICE9IE5VTEwpCkBAIC0yMDM5LDEwICsyMDUzLDEyIEBACiAJCSAqIHdoZW4gdGhlIGZvbnQgdXNlcyBkaWZmZXJlbnQgd2lkdGhzIChlLmcuLCBib2xkIGNoYXJhY3RlcgogCQkgKiBpcyB3aWRlcikuICAqLwogCQl1bmljb2RlcGR5W2NsZW5dID0gY3cgKiBndWkuY2hhcl93aWR0aDsKKwkJaWYgKHh0cmEgPT0gMSkKKwkJICAgIHVuaWNvZGVwZHlbY2xlbiArIDFdID0gY3cgKiBndWkuY2hhcl93aWR0aDsKIAkgICAgfQogCSAgICBjZWxscyArPSBjdzsKIAkgICAgaSArPSB1dGZjX3B0cjJsZW5fbGVuKHRleHQgKyBpLCBsZW4gLSBpKTsKLQkgICAgKytjbGVuOworCSAgICBjbGVuICs9IHh0cmEgKyAxOwogCX0KIAlFeHRUZXh0T3V0VyhzX2hkYywgVEVYVF9YKGNvbCksIFRFWFRfWShyb3cpLAogCQkJICAgZm9wdGlvbnMsIHBjbGlwcmVjdCwgdW5pY29kZWJ1ZiwgY2xlbiwgdW5pY29kZXBkeSk7CmRpZmYgLS1naXQgYS9zcmMvaWZfY3Njb3BlLmMgYi9zcmMvaWZfY3Njb3BlLmMKaW5kZXggZjkyMTk2NS4uYWVmNDhkMCAxMDA2NDQKLS0tIGEvc3JjL2lmX2NzY29wZS5jCisrKyBiL3NyYy9pZl9jc2NvcGUuYwpAQCAtMjIsNyArMjIsNyBAQAogIyBpbmNsdWRlIDxzeXMvd2FpdC5oPgogI2Vsc2UKICAgICAvKiBub3QgVU5JWCwgbXVzdCBiZSBXSU4zMiAqLwotIyBpbmNsdWRlIDxpby5oPgorIyBpbmNsdWRlICJ2aW1pby5oIgogIyBpbmNsdWRlIDxmY250bC5oPgogIyBpbmNsdWRlIDxwcm9jZXNzLmg+CiAjIGRlZmluZSBTVERJTl9GSUxFTk8gICAgMApkaWZmIC0tZ2l0IGEvc3JjL2lmX216c2NoLmMgYi9zcmMvaWZfbXpzY2guYwppbmRleCA5ZWI1MjRhLi42YTM0YWQzIDEwMDY0NAotLS0gYS9zcmMvaWZfbXpzY2guYworKysgYi9zcmMvaWZfbXpzY2guYwpAQCAtMTI0OSw3ICsxMjQ5LDcgQEAKIAogICAgIGV4cHIgPSBTQ0hFTUVfU1RSX1ZBTChHVUFSQU5URUVfU1RSSU5HKHByaW0tPm5hbWUsIDApKTsKIAotICAgIHN0ciA9IChjaGFyICopZXZhbF90b19zdHJpbmcoKGNoYXJfdSAqKWV4cHIsIE5VTEwpOworICAgIHN0ciA9IChjaGFyICopZXZhbF90b19zdHJpbmcoKGNoYXJfdSAqKWV4cHIsIE5VTEwsIFRSVUUpOwogCiAgICAgaWYgKHN0ciA9PSBOVUxMKQogCXJhaXNlX3ZpbV9leG4oXygiaW52YWxpZCBleHByZXNzaW9uIikpOwpkaWZmIC0tZ2l0IGEvc3JjL2lmX29sZS5jcHAgYi9zcmMvaWZfb2xlLmNwcAppbmRleCA1NDRlYTE2Li41OWM3ODZhIDEwMDY0NAotLS0gYS9zcmMvaWZfb2xlLmNwcAorKysgYi9zcmMvaWZfb2xlLmNwcApAQCAtMzY4LDcgKzM2OCw3IEBACiAKICAgICAvKiBFdmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiAqLwogICAgICsrZW1zZ19za2lwOwotICAgIHN0ciA9IChjaGFyICopZXZhbF90b19zdHJpbmcoKGNoYXJfdSAqKWJ1ZmZlciwgTlVMTCk7CisgICAgc3RyID0gKGNoYXIgKilldmFsX3RvX3N0cmluZygoY2hhcl91ICopYnVmZmVyLCBOVUxMLCBUUlVFKTsKICAgICAtLWVtc2dfc2tpcDsKICAgICB2aW1fZnJlZShidWZmZXIpOwogICAgIGlmIChzdHIgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL3NyYy9pZl9wZXJsLnhzIGIvc3JjL2lmX3BlcmwueHMKaW5kZXggMGYxZGNkMi4uMTRjYjg2ZiAxMDA2NDQKLS0tIGEvc3JjL2lmX3BlcmwueHMKKysrIGIvc3JjL2lmX3BlcmwueHMKQEAgLTQyNyw5ICs0MjcsMTAgQEAKICAqIHdvcmsgcHJvcGVybHkuCiAgKi8KICAgICBjaGFyX3UgKgotZXZhbF90b19zdHJpbmcoYXJnLCBuZXh0Y21kKQorZXZhbF90b19zdHJpbmcoYXJnLCBuZXh0Y21kLCBkb2xpc3QpCiAgICAgY2hhcl91CSphcmc7CiAgICAgY2hhcl91CSoqbmV4dGNtZDsKKyAgICBpbnQJCWRvbGlzdDsKIHsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTgyNyw3ICs4MjgsNyBAQAogICAgIFBSRUlOSVQ6CiAJY2hhcl91ICp2YWx1ZTsKICAgICBQUENPREU6Ci0JdmFsdWUgPSBldmFsX3RvX3N0cmluZygoY2hhcl91ICopc3RyLCAoY2hhcl91KiopMCk7CisJdmFsdWUgPSBldmFsX3RvX3N0cmluZygoY2hhcl91ICopc3RyLCAoY2hhcl91ICoqKTAsIFRSVUUpOwogCWlmICh2YWx1ZSA9PSBOVUxMKQogCXsKIAkgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZpdigwKSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2lmX3J1YnkuYyBiL3NyYy9pZl9ydWJ5LmMKaW5kZXggYmFjZDZjNy4uNmU5Zjk1ZCAxMDA2NDQKLS0tIGEvc3JjL2lmX3J1YnkuYworKysgYi9zcmMvaWZfcnVieS5jCkBAIC01MTksNyArNTE5LDcgQEAKIHN0YXRpYyBWQUxVRSB2aW1fZXZhbHVhdGUoVkFMVUUgc2VsZiwgVkFMVUUgc3RyKQogewogI2lmZGVmIEZFQVRfRVZBTAotICAgIGNoYXJfdSAqdmFsdWUgPSBldmFsX3RvX3N0cmluZygoY2hhcl91ICopU1RSMkNTVFIoc3RyKSwgTlVMTCk7CisgICAgY2hhcl91ICp2YWx1ZSA9IGV2YWxfdG9fc3RyaW5nKChjaGFyX3UgKilTVFIyQ1NUUihzdHIpLCBOVUxMLCBUUlVFKTsKIAogICAgIGlmICh2YWx1ZSkKICAgICB7CmRpZmYgLS1naXQgYS9zcmMvaWZfc25pZmYuYyBiL3NyYy9pZl9zbmlmZi5jCmluZGV4IDE0ODVkNWUuLmFiN2EzZjAgMTAwNjQ0Ci0tLSBhL3NyYy9pZl9zbmlmZi5jCisrKyBiL3NyYy9pZl9zbmlmZi5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaWZkZWYgV0lOMzIKICMgaW5jbHVkZSA8c3RkaW8uaD4KICMgaW5jbHVkZSA8ZmNudGwuaD4KLSMgaW5jbHVkZSA8aW8uaD4KKyMgaW5jbHVkZSAidmltaW8uaCIKICMgaW5jbHVkZSA8cHJvY2Vzcy5oPgogIyBpbmNsdWRlIDxzdHJpbmcuaD4KICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CmRpZmYgLS1naXQgYS9zcmMvaWZfdGNsLmMgYi9zcmMvaWZfdGNsLmMKaW5kZXggMzBmN2Q5OC4uZmU0M2QyMyAxMDA2NDQKLS0tIGEvc3JjL2lmX3RjbC5jCisrKyBiL3NyYy9pZl90Y2wuYwpAQCAtMTQwNyw3ICsxNDA3LDcgQEAKIAogI2lmZGVmIEZFQVRfRVZBTAogICAgIGV4cHIgPSBUY2xfR2V0U3RyaW5nRnJvbU9iaihvYmp2W29iam5dLCBOVUxMKTsKLSAgICBzdHIgPSAoY2hhciAqKWV2YWxfdG9fc3RyaW5nKChjaGFyX3UgKilleHByLCBOVUxMKTsKKyAgICBzdHIgPSAoY2hhciAqKWV2YWxfdG9fc3RyaW5nKChjaGFyX3UgKilleHByLCBOVUxMLCBUUlVFKTsKICAgICBpZiAoc3RyID09IE5VTEwpCiAJVGNsX1NldFJlc3VsdChpbnRlcnAsIF8oImludmFsaWQgZXhwcmVzc2lvbiIpLCBUQ0xfU1RBVElDKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi5jIGIvc3JjL21haW4uYwppbmRleCAxYTE2ZjQ0Li5iZDMxZTUwIDEwMDY0NAotLS0gYS9zcmMvbWFpbi5jCisrKyBiL3NyYy9tYWluLmMKQEAgLTgsNyArOCw3IEBACiAgKi8KIAogI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQotIyBpbmNsdWRlIDxpby5oPgkJLyogZm9yIGNsb3NlKCkgYW5kIGR1cCgpICovCisjIGluY2x1ZGUgInZpbWlvLmgiCQkvKiBmb3IgY2xvc2UoKSBhbmQgZHVwKCkgKi8KICNlbmRpZgogCiAjZGVmaW5lIEVYVEVSTgpAQCAtMzYwMiw3ICszNjAyLDcgQEAKICAgICByZWRpcl9vZmYgPSAwOwogICAgICsrZW1zZ19za2lwOwogCi0gICAgcmVzID0gZXZhbF90b19zdHJpbmcoZXhwciwgTlVMTCk7CisgICAgcmVzID0gZXZhbF90b19zdHJpbmcoZXhwciwgTlVMTCwgVFJVRSk7CiAKICAgICBkZWJ1Z19icmVha19sZXZlbCA9IHNhdmVfZGJsOwogICAgIHJlZGlyX29mZiA9IHNhdmVfcm87CmRpZmYgLS1naXQgYS9zcmMvbWJ5dGUuYyBiL3NyYy9tYnl0ZS5jCmluZGV4IDA2MmQ1ODQuLjRjZDdlOTYgMTAwNjQ0Ci0tLSBhL3NyYy9tYnl0ZS5jCisrKyBiL3NyYy9tYnl0ZS5jCkBAIC0xNDg2LDU1ICsxNDg2LDU5IEBACiAjZW5kaWYKIAogLyoKLSAqIENvbnZlcnQgYSBVVEYtOCBieXRlIHN0cmluZyB0byBhIHdpZGUgY2hhcmFyYWN0ZXIuICBBbHNvIGdldCB1cCB0byB0d28KKyAqIENvbnZlcnQgYSBVVEYtOCBieXRlIHN0cmluZyB0byBhIHdpZGUgY2hhcmFyYWN0ZXIuICBBbHNvIGdldCB1cCB0byBNQVhfTUNPCiAgKiBjb21wb3NpbmcgY2hhcmFjdGVycy4KICAqLwogICAgIGludAotdXRmY19wdHIyY2hhcihwLCBwMSwgcDIpCit1dGZjX3B0cjJjaGFyKHAsIHBjYykKICAgICBjaGFyX3UJKnA7Ci0gICAgaW50CQkqcDE7CS8qIHJldHVybjogZmlyc3QgY29tcG9zaW5nIGNoYXIgb3IgMCAqLwotICAgIGludAkJKnAyOwkvKiByZXR1cm46IHNlY29uZCBjb21wb3NpbmcgY2hhciBvciAwICovCisgICAgaW50CQkqcGNjOwkvKiByZXR1cm46IGNvbXBvc2luZyBjaGFycywgbGFzdCBvbmUgaXMgMCAqLwogewogICAgIGludAkJbGVuOwogICAgIGludAkJYzsKICAgICBpbnQJCWNjOworICAgIGludAkJaSA9IDA7CiAKICAgICBjID0gdXRmX3B0cjJjaGFyKHApOwogICAgIGxlbiA9IHV0Zl9wdHIybGVuKHApOworCiAgICAgLyogT25seSBhY2NlcHQgYSBjb21wb3NpbmcgY2hhciB3aGVuIHRoZSBmaXJzdCBjaGFyIGlzbid0IGlsbGVnYWwuICovCiAgICAgaWYgKChsZW4gPiAxIHx8ICpwIDwgMHg4MCkKIAkgICAgJiYgcFtsZW5dID49IDB4ODAKIAkgICAgJiYgVVRGX0NPTVBPU0lOR0xJS0UocCwgcCArIGxlbikpCiAgICAgewotCSpwMSA9IHV0Zl9wdHIyY2hhcihwICsgbGVuKTsKLQlsZW4gKz0gdXRmX3B0cjJsZW4ocCArIGxlbik7Ci0JaWYgKHBbbGVuXSA+PSAweDgwICYmIHV0Zl9pc2NvbXBvc2luZyhjYyA9IHV0Zl9wdHIyY2hhcihwICsgbGVuKSkpCi0JICAgICpwMiA9IGNjOwotCWVsc2UKLQkgICAgKnAyID0gMDsKKwljYyA9IHV0Zl9wdHIyY2hhcihwICsgbGVuKTsKKwlmb3IgKDs7KQorCXsKKwkgICAgcGNjW2krK10gPSBjYzsKKwkgICAgaWYgKGkgPT0gTUFYX01DTykKKwkJYnJlYWs7CisJICAgIGxlbiArPSB1dGZfcHRyMmxlbihwICsgbGVuKTsKKwkgICAgaWYgKHBbbGVuXSA8IDB4ODAgfHwgIXV0Zl9pc2NvbXBvc2luZyhjYyA9IHV0Zl9wdHIyY2hhcihwICsgbGVuKSkpCisJCWJyZWFrOworCX0KICAgICB9Ci0gICAgZWxzZQotICAgIHsKLQkqcDEgPSAwOwotCSpwMiA9IDA7Ci0gICAgfQorCisgICAgaWYgKGkgPCBNQVhfTUNPKQkvKiBsYXN0IGNvbXBvc2luZyBjaGFyIG11c3QgYmUgMCAqLworCXBjY1tpXSA9IDA7CisKICAgICByZXR1cm4gYzsKIH0KIAogLyoKLSAqIENvbnZlcnQgYSBVVEYtOCBieXRlIHN0cmluZyB0byBhIHdpZGUgY2hhcmFyYWN0ZXIuICBBbHNvIGdldCB1cCB0byB0d28KKyAqIENvbnZlcnQgYSBVVEYtOCBieXRlIHN0cmluZyB0byBhIHdpZGUgY2hhcmFyYWN0ZXIuICBBbHNvIGdldCB1cCB0byBNQVhfTUNPCiAgKiBjb21wb3NpbmcgY2hhcmFjdGVycy4gIFVzZSBubyBtb3JlIHRoYW4gcFttYXhsZW5dLgogICovCiAgICAgaW50Ci11dGZjX3B0cjJjaGFyX2xlbihwLCBwMSwgcDIsIG1heGxlbikKK3V0ZmNfcHRyMmNoYXJfbGVuKHAsIHBjYywgbWF4bGVuKQogICAgIGNoYXJfdQkqcDsKLSAgICBpbnQJCSpwMTsJLyogcmV0dXJuOiBmaXJzdCBjb21wb3NpbmcgY2hhciBvciAwICovCi0gICAgaW50CQkqcDI7CS8qIHJldHVybjogc2Vjb25kIGNvbXBvc2luZyBjaGFyIG9yIDAgKi8KKyAgICBpbnQJCSpwY2M7CS8qIHJldHVybjogY29tcG9zaW5nIGNoYXJzLCBsYXN0IG9uZSBpcyAwICovCiAgICAgaW50CQltYXhsZW47CiB7CiAgICAgaW50CQlsZW47CiAgICAgaW50CQljOwogICAgIGludAkJY2M7CisgICAgaW50CQlpID0gMDsKIAogICAgIGMgPSB1dGZfcHRyMmNoYXIocCk7CiAgICAgbGVuID0gdXRmX3B0cjJsZW5fbGVuKHAsIG1heGxlbik7CkBAIC0xNTQ0LDIwICsxNTQ4LDIzIEBACiAJICAgICYmIHBbbGVuXSA+PSAweDgwCiAJICAgICYmIFVURl9DT01QT1NJTkdMSUtFKHAsIHAgKyBsZW4pKQogICAgIHsKLQkqcDEgPSB1dGZfcHRyMmNoYXIocCArIGxlbik7Ci0JbGVuICs9IHV0Zl9wdHIybGVuX2xlbihwICsgbGVuLCBtYXhsZW4gLSBsZW4pOwotCWlmIChsZW4gPCBtYXhsZW4KLQkJJiYgcFtsZW5dID49IDB4ODAKLQkJJiYgdXRmX2lzY29tcG9zaW5nKGNjID0gdXRmX3B0cjJjaGFyKHAgKyBsZW4pKSkKLQkgICAgKnAyID0gY2M7Ci0JZWxzZQotCSAgICAqcDIgPSAwOworCWNjID0gdXRmX3B0cjJjaGFyKHAgKyBsZW4pOworCWZvciAoOzspCisJeworCSAgICBwY2NbaSsrXSA9IGNjOworCSAgICBpZiAoaSA9PSBNQVhfTUNPKQorCQlicmVhazsKKwkgICAgbGVuICs9IHV0Zl9wdHIybGVuX2xlbihwICsgbGVuLCBtYXhsZW4gLSBsZW4pOworCSAgICBpZiAobGVuID49IG1heGxlbgorCQkgICAgfHwgcFtsZW5dIDwgMHg4MAorCQkgICAgfHwgIXV0Zl9pc2NvbXBvc2luZyhjYyA9IHV0Zl9wdHIyY2hhcihwICsgbGVuKSkpCisJCWJyZWFrOworCX0KICAgICB9Ci0gICAgZWxzZQotICAgIHsKLQkqcDEgPSAwOwotCSpwMiA9IDA7Ci0gICAgfQorCisgICAgaWYgKGkgPCBNQVhfTUNPKQkvKiBsYXN0IGNvbXBvc2luZyBjaGFyIG11c3QgYmUgMCAqLworCXBjY1tpXSA9IDA7CisKICAgICByZXR1cm4gYzsKIH0KIApAQCAtMTU3MywxMyArMTU4MCwxNCBAQAogICAgIGNoYXJfdQkqYnVmOwogewogICAgIGludAkJbGVuOworICAgIGludAkJaTsKIAogICAgIGxlbiA9IHV0Zl9jaGFyMmJ5dGVzKFNjcmVlbkxpbmVzVUNbb2ZmXSwgYnVmKTsKLSAgICBpZiAoU2NyZWVuTGluZXNDMVtvZmZdICE9IDApCisgICAgZm9yIChpID0gMDsgaSA8IFNjcmVlbl9tY287ICsraSkKICAgICB7Ci0JbGVuICs9IHV0Zl9jaGFyMmJ5dGVzKFNjcmVlbkxpbmVzQzFbb2ZmXSwgYnVmICsgbGVuKTsKLQlpZiAoU2NyZWVuTGluZXNDMltvZmZdICE9IDApCi0JICAgIGxlbiArPSB1dGZfY2hhcjJieXRlcyhTY3JlZW5MaW5lc0MyW29mZl0sIGJ1ZiArIGxlbik7CisJaWYgKFNjcmVlbkxpbmVzQ1tpXVtvZmZdID09IDApCisJICAgIGJyZWFrOworCWxlbiArPSB1dGZfY2hhcjJieXRlcyhTY3JlZW5MaW5lc0NbaV1bb2ZmXSwgYnVmICsgbGVuKTsKICAgICB9CiAgICAgcmV0dXJuIGxlbjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9tZW1maWxlLmMgYi9zcmMvbWVtZmlsZS5jCmluZGV4IGJhYzg0ZmUuLmFlZWI4Y2IgMTAwNjQ0Ci0tLSBhL3NyYy9tZW1maWxlLmMKKysrIGIvc3JjL21lbWZpbGUuYwpAQCAtMzMsNyArMzMsNyBAQAogICovCiAKICNpZiBkZWZpbmVkIE1TRE9TIHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQotIyBpbmNsdWRlIDxpby5oPgkvKiBmb3IgbHNlZWsoKSwgbXVzdCBiZSBiZWZvcmUgdmltLmggKi8KKyMgaW5jbHVkZSAidmltaW8uaCIJLyogZm9yIGxzZWVrKCksIG11c3QgYmUgYmVmb3JlIHZpbS5oICovCiAjZW5kaWYKIAogI2luY2x1ZGUgInZpbS5oIgpkaWZmIC0tZ2l0IGEvc3JjL21lbWxpbmUuYyBiL3NyYy9tZW1saW5lLmMKaW5kZXggNDUxYWNlMy4uYjg3NjI2MSAxMDA2NDQKLS0tIGEvc3JjL21lbWxpbmUuYworKysgYi9zcmMvbWVtbGluZS5jCkBAIC00Myw3ICs0Myw3IEBACiAgKi8KIAogI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQotIyBpbmNsdWRlIDxpby5oPgorIyBpbmNsdWRlICJ2aW1pby5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ2aW0uaCIKZGlmZiAtLWdpdCBhL3NyYy9tZXNzYWdlLmMgYi9zcmMvbWVzc2FnZS5jCmluZGV4IDBjYmEyY2MuLmMzYWNjNDAgMTAwNjQ0Ci0tLSBhL3NyYy9tZXNzYWdlLmMKKysrIGIvc3JjL21lc3NhZ2UuYwpAQCAtMjkzLDEwICsyOTMsMTIgQEAKICAgICBlbHNlIGlmIChlbmNfdXRmOCkKICAgICB7CiAJLyogRm9yIFVURi04IHdlIGNhbiBnbyBiYWNrd2FyZHMgZWFzaWx5LiAqLwotCWkgPSAoaW50KVNUUkxFTihzKTsKKwloYWxmID0gaSA9IChpbnQpU1RSTEVOKHMpOwogCWZvciAoOzspCiAJewotCSAgICBoYWxmID0gaSAtICgqbWJfaGVhZF9vZmYpKHMsIHMgKyBpIC0gMSkgLSAxOworCSAgICBkbworCQloYWxmID0gaGFsZiAtICgqbWJfaGVhZF9vZmYpKHMsIHMgKyBoYWxmIC0gMSkgLSAxOworCSAgICB3aGlsZSAodXRmX2lzY29tcG9zaW5nKHV0Zl9wdHIyY2hhcihzICsgaGFsZikpICYmIGhhbGYgPiAwKTsKIAkgICAgbiA9IHB0cjJjZWxscyhzICsgaGFsZik7CiAJICAgIGlmIChsZW4gKyBuID4gcm9vbSkKIAkJYnJlYWs7CkBAIC0xNzIzLDcgKzE3MjUsNyBAQAogICAgIGNoYXJfdQkqbG9uZ3N0cjsKICAgICBpbnQJCWF0dHI7CiB7Ci0gICAgbXNnX3B1dHNfbG9uZ19sZW5fYXR0cihsb25nc3RyLCAoaW50KXN0cmxlbigoY2hhciAqKWxvbmdzdHIpLCBhdHRyKTsKKyAgICBtc2dfcHV0c19sb25nX2xlbl9hdHRyKGxvbmdzdHIsIChpbnQpU1RSTEVOKGxvbmdzdHIpLCBhdHRyKTsKIH0KIAogICAgIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9taXNjMS5jIGIvc3JjL21pc2MxLmMKaW5kZXggYzlkZWI4NS4uZjk1ZDkzZCAxMDA2NDQKLS0tIGEvc3JjL21pc2MxLmMKKysrIGIvc3JjL21pc2MxLmMKQEAgLTIxNzcsMTEgKzIxNzcsMTEgQEAKICAgICBpZiAocF9kZWNvICYmIHVzZV9kZWxjb21iaW5lICYmIGVuY191dGY4CiAJCQkJCSAmJiB1dGZjX3B0cjJsZW4ob2xkcCArIGNvbCkgPj0gY291bnQpCiAgICAgewotCWludAljMSwgYzI7CisJaW50CWNjW01BWF9NQ09dOwogCWludAluOwogCi0JKHZvaWQpdXRmY19wdHIyY2hhcihvbGRwICsgY29sLCAmYzEsICZjMik7Ci0JaWYgKGMxICE9IE5VTCkKKwkodm9pZCl1dGZjX3B0cjJjaGFyKG9sZHAgKyBjb2wsIGNjKTsKKwlpZiAoY2NbMF0gIT0gTlVMKQogCXsKIAkgICAgLyogRmluZCB0aGUgbGFzdCBjb21wb3NpbmcgY2hhciwgdGhlcmUgY2FuIGJlIHNldmVyYWwuICovCiAJICAgIG4gPSBjb2w7CkBAIC04MDU2LDYgKzgwNTYsNyBAQAogLyoKICAqIEV4cGFuZCB3aWxkY2FyZHMuICBDYWxscyBnZW5fZXhwYW5kX3dpbGRjYXJkcygpIGFuZCByZW1vdmVzIGZpbGVzIG1hdGNoaW5nCiAgKiAnd2lsZGlnbm9yZScuCisgKiBSZXR1cm5zIE9LIG9yIEZBSUwuCiAgKi8KICAgICBpbnQKIGV4cGFuZF93aWxkY2FyZHMobnVtX3BhdCwgcGF0LCBudW1fZmlsZSwgZmlsZSwgZmxhZ3MpCkBAIC04ODk4LDcgKzg4OTksNyBAQAogCiAjaWZkZWYgRkVBVF9FVkFMCiAgICAgaWYgKCpjbWQgPT0gJz0nKQkgICAgLyogYD17ZXhwcn1gOiBFeHBhbmQgZXhwcmVzc2lvbiAqLwotCWJ1ZmZlciA9IGV2YWxfdG9fc3RyaW5nKGNtZCArIDEsICZwKTsKKwlidWZmZXIgPSBldmFsX3RvX3N0cmluZyhjbWQgKyAxLCAmcCwgVFJVRSk7CiAgICAgZWxzZQogI2VuZGlmCiAJYnVmZmVyID0gZ2V0X2NtZF9vdXRwdXQoY21kLCBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL21zdmNzZXR1cC5iYXQgYi9zcmMvbXN2Y3NldHVwLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTc3MDIwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21zdmNzZXR1cC5iYXQKQEAgLTAsMCArMSwxMiBAQAorcmVtIFRvIGJlIHVzZWQgb24gTVMtV2luZG93cyB3aGVuIHVzaW5nIHRoZSBWaXN1YWwgQysrIFRvb2xraXQgMjAwMworcmVtIFNlZSBJTlNUQUxMcGMudHh0IGZvciBpbmZvcm1hdGlvbi4KKworc2V0IFBBVEg9JVN5c3RlbVJvb3QlXE1pY3Jvc29mdC5ORVRcRnJhbWV3b3JrXHYxLjEuNDMyMjslUEFUSCUKK2NhbGwgIiVWQ1Rvb2xraXRJbnN0YWxsRGlyJXZjdmFyczMyLmJhdCIKK3NldCBNU1ZDVmVyPTcuMQorCityZW0gVGhlIHBsYXRmb3JtIFNESyBjYW4gYmUgaW5zdGFsbGVkIGVsc2V3aGVyZSwgYWRqdXN0IHRoZSBwYXRoLgorY2FsbCAiJVByb2dyYW1GaWxlcyVcTWljcm9zb2Z0IFBsYXRmb3JtIFNES1xTZXRFbnYuQ21kIgorcmVtIGNhbGwgImU6XE1pY3Jvc29mdCBQbGF0Zm9ybSBTREtcU2V0RW52LkNtZCIKKworc2V0IExJQj0lUHJvZ3JhbUZpbGVzJVxNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDNcVmM3XGxpYjslTElCJQpkaWZmIC0tZ2l0IGEvc3JjL25ldGJlYW5zLmMgYi9zcmMvbmV0YmVhbnMuYwppbmRleCBlYjkxNDZiLi5jMjg0NjI0IDEwMDY0NAotLS0gYS9zcmMvbmV0YmVhbnMuYworKysgYi9zcmMvbmV0YmVhbnMuYwpAQCAtMjYsNyArMjYsNyBAQAogIyBpZmRlZiBERUJVRwogIyAgaW5jbHVkZSA8dGNoYXIuaD4JLyogZm9yIF9UIGRlZmluaXRpb24gZm9yIFRSQUNFbiBtYWNyb3MgKi8KICMgZW5kaWYKLSMgaW5jbHVkZSA8aW8uaD4KKyMgaW5jbHVkZSAidmltaW8uaCIKIC8qIFdpblNvY2sgQVBJIGlzIHNlcGFyYXRlZCBmcm9tIEMgQVBJLCB0aHVzIHdlIGNhbid0IHVzZSByZWFkKCksIHdyaXRlKCksCiAgKiBlcnJuby4uLiAqLwogIyBkZWZpbmUgc29ja19lcnJubyBXU0FHZXRMYXN0RXJyb3IoKQpkaWZmIC0tZ2l0IGEvc3JjL25vcm1hbC5jIGIvc3JjL25vcm1hbC5jCmluZGV4IDczODEyNTYuLmM1OWIwMWYgMTAwNjQ0Ci0tLSBhL3NyYy9ub3JtYWwuYworKysgYi9zcmMvbm9ybWFsLmMKQEAgLTU2OTEsOSArNTY5MSw5IEBACiAJCXx8IChQQVNUX0xJTkUgJiYgKm1sX2dldF9jdXJzb3IoKSA9PSBOVUwpKQogCXsKIAkgICAgLyoKLQkgICAgICoJICA8U3BhY2U+IHdyYXBzIHRvIG5leHQgbGluZSBpZiAnd2hpY2h3cmFwJyBiaXQgMSBzZXQuCi0JICAgICAqCSAgICAgICdsJyB3cmFwcyB0byBuZXh0IGxpbmUgaWYgJ3doaWNod3JhcCcgYml0IDIgc2V0LgotCSAgICAgKiBDVVJTX1JJR0hUIHdyYXBzIHRvIG5leHQgbGluZSBpZiAnd2hpY2h3cmFwJyBiaXQgMyBzZXQKKwkgICAgICoJICA8U3BhY2U+IHdyYXBzIHRvIG5leHQgbGluZSBpZiAnd2hpY2h3cmFwJyBoYXMgJ3MnLgorCSAgICAgKgkgICAgICAnbCcgd3JhcHMgdG8gbmV4dCBsaW5lIGlmICd3aGljaHdyYXAnIGhhcyAnbCcuCisJICAgICAqIENVUlNfUklHSFQgd3JhcHMgdG8gbmV4dCBsaW5lIGlmICd3aGljaHdyYXAnIGhhcyAnPicuCiAJICAgICAqLwogCSAgICBpZiAoICAgICAgICgoY2FwLT5jbWRjaGFyID09ICcgJwogCQkJICAgICYmIHZpbV9zdHJjaHIocF93dywgJ3MnKSAhPSBOVUxMKQpAQCAtNTcwNiw4ICs1NzA2LDcgQEAKIAkJLyogV2hlbiBkZWxldGluZyB3ZSBhbHNvIGNvdW50IHRoZSBOTCBhcyBhIGNoYXJhY3Rlci4KIAkJICogU2V0IGNhcC0+b2FwLT5pbmNsdXNpdmUgd2hlbiBsYXN0IGNoYXIgaW4gdGhlIGxpbmUgaXMKIAkJICogaW5jbHVkZWQsIG1vdmUgdG8gbmV4dCBsaW5lIGFmdGVyIHRoYXQgKi8KLQkJaWYgKAkgICAoY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfREVMRVRFCi0JCQkgICAgfHwgY2FwLT5vYXAtPm9wX3R5cGUgPT0gT1BfQ0hBTkdFKQorCQlpZiAoCSAgIGNhcC0+b2FwLT5vcF90eXBlICE9IE9QX05PUAogCQkJJiYgIWNhcC0+b2FwLT5pbmNsdXNpdmUKIAkJCSYmICFsaW5lZW1wdHkoY3Vyd2luLT53X2N1cnNvci5sbnVtKSkKIAkJICAgIGNhcC0+b2FwLT5pbmNsdXNpdmUgPSBUUlVFOwpkaWZmIC0tZ2l0IGEvc3JjL29wcy5jIGIvc3JjL29wcy5jCmluZGV4IDk2OTVkOWQuLjgyYTc1OTUgMTAwNjQ0Ci0tLSBhL3NyYy9vcHMuYworKysgYi9zcmMvb3BzLmMKQEAgLTc4MCw3ICs3ODAsNyBAQAogICAgIGlmIChleHByX2NvcHkgPT0gTlVMTCkKIAlyZXR1cm4gTlVMTDsKIAotICAgIHJ2ID0gZXZhbF90b19zdHJpbmcoZXhwcl9jb3B5LCBOVUxMKTsKKyAgICBydiA9IGV2YWxfdG9fc3RyaW5nKGV4cHJfY29weSwgTlVMTCwgVFJVRSk7CiAgICAgdmltX2ZyZWUoZXhwcl9jb3B5KTsKICAgICByZXR1cm4gcnY7CiB9CmRpZmYgLS1naXQgYS9zcmMvb3B0aW9uLmMgYi9zcmMvb3B0aW9uLmMKaW5kZXggMjNiNmJlOC4uNWM5NTdlNSAxMDA2NDQKLS0tIGEvc3JjL29wdGlvbi5jCisrKyBiL3NyYy9vcHRpb24uYwpAQCAtNDE0LDYgKzQxNCw4IEBACiAjZGVmaW5lIFBfTkZOQU1FICAgICAgIDB4MjAwMDAwTC8qIG9ubHkgbm9ybWFsIGZpbGUgbmFtZSBjaGFycyBhbGxvd2VkICovCiAjZGVmaW5lIFBfSU5TRUNVUkUgICAgIDB4NDAwMDAwTC8qIG9wdGlvbiB3YXMgc2V0IGZyb20gYSBtb2RlbGluZSAqLwogCisjZGVmaW5lIElTS19MQVRJTjEgIChjaGFyX3UgKikiQCw0OC01NyxfLDE5Mi0yNTUiCisKIC8qCiAgKiBvcHRpb25zW10gaXMgaW5pdGlhbGl6ZWQgaGVyZS4KICAqIFRoZSBvcmRlciBvZiB0aGUgb3B0aW9ucyBNVVNUIGJlIGFscGhhYmV0aWMgZm9yICI6c2V0IGFsbCIgYW5kIGZpbmRvcHRpb24oKS4KQEAgLTg0OCw4ICs4NTAsNyBAQAogI2Vsc2UKIAkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKICNlbmRpZgotCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH0KLQkJCSAgICB9LAorCQkJICAgIHsoY2hhcl91ICopRkFMU0UsIChjaGFyX3UgKikwTH19LAogICAgIHsiZGljdGlvbmFyeSIsICAiZGljdCIsIFBfU1RSSU5HfFBfRVhQQU5EfFBfVklfREVGfFBfQ09NTUF8UF9OT0RVUCwKICNpZmRlZiBGRUFUX0lOU19FWFBBTkQKIAkJCSAgICAoY2hhcl91ICopJnBfZGljdCwgUFZfRElDVCwKQEAgLTE0MjMsNyArMTQyNCw3IEBACiAjIGlmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoTVNXSU4pIHx8IGRlZmluZWQoT1MyKQogCQkJCShjaGFyX3UgKikiQCw0OC01NyxfLDEyOC0xNjcsMjI0LTIzNSIKICMgZWxzZQotCQkJCShjaGFyX3UgKikiQCw0OC01NyxfLDE5Mi0yNTUiCisJCQkJSVNLX0xBVElOMQogIyBlbmRpZgogI2VuZGlmCiAJCQkJfX0sCkBAIC0xNjAyLDYgKzE2MDMsMTMgQEAKICAgICB7Im1hdGNodGltZSIsICAgIm1hdCIsICBQX05VTXxQX1ZJX0RFRiwKIAkJCSAgICAoY2hhcl91ICopJnBfbWF0LCBQVl9OT05FLAogCQkJICAgIHsoY2hhcl91ICopNUwsIChjaGFyX3UgKikwTH19LAorICAgIHsibWF4Y29tYmluZSIsICAibWNvIiwgIFBfTlVNfFBfVklfREVGLAorI2lmZGVmIEZFQVRfTUJZVEUKKwkJCSAgICAoY2hhcl91ICopJnBfbWNvLCBQVl9OT05FLAorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKyNlbmRpZgorCQkJICAgIHsoY2hhcl91ICopMiwgKGNoYXJfdSAqKTBMfX0sCiAgICAgeyJtYXhmdW5jZGVwdGgiLCAibWZkIiwgUF9OVU18UF9WSV9ERUYsCiAjaWZkZWYgRkVBVF9FVkFMCiAJCQkgICAgKGNoYXJfdSAqKSZwX21mZCwgUFZfTk9ORSwKQEAgLTMxOTgsOSArMzIwNiwxNyBAQAogIyBlbmRpZgogCQkgICAgKQogCSAgICB7Ci0JCS8qIEFkanVzdCB0aGUgZGVmYXVsdCBmb3IgJ2lzcHJpbnQnIHRvIG1hdGNoIGxhdGluMS4gKi8KKwkJLyogQWRqdXN0IHRoZSBkZWZhdWx0IGZvciAnaXNwcmludCcgYW5kICdpc2tleXdvcmQnIHRvIG1hdGNoCisJCSAqIGxhdGluMS4gIEFsc28gc2V0IHRoZSBkZWZhdWx0cyBmb3Igd2hlbiAnbm9jb21wYXRpYmxlJyBpcworCQkgKiBzZXQuICovCiAJCXNldF9zdHJpbmdfb3B0aW9uX2RpcmVjdCgoY2hhcl91ICopImlzcCIsIC0xLAogCQkJCSAgIChjaGFyX3UgKikiQCwxNjEtMjU1IiwgT1BUX0ZSRUUsIFNJRF9OT05FKTsKKwkJc2V0X3N0cmluZ19vcHRpb25fZGlyZWN0KChjaGFyX3UgKikiaXNrIiwgLTEsCisJCQkJCSAgICAgIElTS19MQVRJTjEsIE9QVF9GUkVFLCBTSURfTk9ORSk7CisJCW9wdF9pZHggPSBmaW5kb3B0aW9uKChjaGFyX3UgKikiaXNwIik7CisJCW9wdGlvbnNbb3B0X2lkeF0uZGVmX3ZhbFtWSU1fREVGQVVMVF0gPSAoY2hhcl91ICopIkAsMTYxLTI1NSI7CisJCW9wdF9pZHggPSBmaW5kb3B0aW9uKChjaGFyX3UgKikiaXNrIik7CisJCW9wdGlvbnNbb3B0X2lkeF0uZGVmX3ZhbFtWSU1fREVGQVVMVF0gPSBJU0tfTEFUSU4xOwogCQkodm9pZClpbml0X2NoYXJ0YWIoKTsKIAkgICAgfQogI2VuZGlmCkBAIC03NTY0LDYgKzc1ODAsMTggQEAKICAgICB9CiAjZW5kaWYgLyogRkVBVF9GT0xESU5HICovCiAKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgLyogJ21heGNvbWJpbmUnICovCisgICAgZWxzZSBpZiAocHAgPT0gJnBfbWNvKQorICAgIHsKKwlpZiAocF9tY28gPiBNQVhfTUNPKQorCSAgICBwX21jbyA9IE1BWF9NQ087CisJZWxzZSBpZiAocF9tY28gPCAwKQorCSAgICBwX21jbyA9IDA7CisJc2NyZWVuY2xlYXIoKTsJICAgIC8qIHdpbGwgcmUtYWxsb2NhdGUgdGhlIHNjcmVlbiAqLworICAgIH0KKyNlbmRpZgorCiAgICAgZWxzZSBpZiAocHAgPT0gJmN1cmJ1Zi0+Yl9wX2ltaW5zZXJ0KQogICAgIHsKIAlpZiAoY3VyYnVmLT5iX3BfaW1pbnNlcnQgPCAwIHx8IGN1cmJ1Zi0+Yl9wX2ltaW5zZXJ0ID4gQl9JTU9ERV9MQVNUKQpkaWZmIC0tZ2l0IGEvc3JjL29wdGlvbi5oIGIvc3JjL29wdGlvbi5oCmluZGV4IDFlZDJhNGYuLmZhNWRlNTYgMTAwNjQ0Ci0tLSBhL3NyYy9vcHRpb24uaAorKysgYi9zcmMvb3B0aW9uLmgKQEAgLTU4Myw2ICs1ODMsOSBAQAogRVhURVJOIGNoYXJfdQkqcF9tcDsJCS8qICdtYWtlcHJnJyAqLwogI2VuZGlmCiBFWFRFUk4gbG9uZwlwX21hdDsJCS8qICdtYXRjaHRpbWUnICovCisjaWZkZWYgRkVBVF9NQllURQorRVhURVJOIGxvbmcJcF9tY287CQkvKiAnbWF4Y29tYmluZScgKi8KKyNlbmRpZgogI2lmZGVmIEZFQVRfRVZBTAogRVhURVJOIGxvbmcJcF9tZmQ7CQkvKiAnbWF4ZnVuY2RlcHRoJyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvb3NfbXNkb3MuYyBiL3NyYy9vc19tc2Rvcy5jCmluZGV4IGJkMThjODQuLjQ1NjNiZjEgMTAwNjQ0Ci0tLSBhL3NyYy9vc19tc2Rvcy5jCisrKyBiL3NyYy9vc19tc2Rvcy5jCkBAIC0yMSw3ICsyMSw3IEBACiAgKiBTb21lIGZ1bmN0aW9ucyBhcmUgYWxzbyB1c2VkIGZvciBXaW4xNiAoTVMtV2luZG93cyAzLjEpLgogICovCiAKLSNpbmNsdWRlIDxpby5oPgorI2luY2x1ZGUgInZpbWlvLmgiCiAjaW5jbHVkZSAidmltLmgiCiAKICNpbmNsdWRlIDxjb25pby5oPgpkaWZmIC0tZ2l0IGEvc3JjL29zX21zd2luLmMgYi9zcmMvb3NfbXN3aW4uYwppbmRleCA5OThkMjdiLi4zZDhhMDg0IDEwMDY0NAotLS0gYS9zcmMvb3NfbXN3aW4uYworKysgYi9zcmMvb3NfbXN3aW4uYwpAQCAtMjIsNyArMjIsNyBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSNpbmNsdWRlIDxpby5oPgorI2luY2x1ZGUgInZpbWlvLmgiCiAjaW5jbHVkZSAidmltLmgiCiAKICNpZmRlZiBIQVZFX0ZDTlRMX0gKZGlmZiAtLWdpdCBhL3NyYy9vc193aW4xNi5jIGIvc3JjL29zX3dpbjE2LmMKaW5kZXggYjBhNGY3MS4uZTkyMDM0YyAxMDA2NDQKLS0tIGEvc3JjL29zX3dpbjE2LmMKKysrIGIvc3JjL29zX3dpbjE2LmMKQEAgLTIwLDcgKzIwLDcgQEAKICMgcHJhZ21hIHdhcm4gLW9icwogI2VuZGlmCiAKLSNpbmNsdWRlIDxpby5oPgorI2luY2x1ZGUgInZpbWlvLmgiCiAjaW5jbHVkZSAidmltLmgiCiAKICNpbmNsdWRlIDxmY250bC5oPgpkaWZmIC0tZ2l0IGEvc3JjL29zX3dpbjMyLmMgYi9zcmMvb3Nfd2luMzIuYwppbmRleCAzYWVjNmFjLi5hNDUyNTVjIDEwMDY0NAotLS0gYS9zcmMvb3Nfd2luMzIuYworKysgYi9zcmMvb3Nfd2luMzIuYwpAQCAtMjAsNyArMjAsNyBAQAogICogUm9nZXIgS25vYmJlIDxyb2dlcmtAd29uZGVyd2FyZS5jb20+IGRpZCB0aGUgaW5pdGlhbCBwb3J0IG9mIFZpbSAzLjAuCiAgKi8KIAotI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSAidmltaW8uaCIKICNpbmNsdWRlICJ2aW0uaCIKIAogI2lmZGVmIEZFQVRfTVpTQ0hFTUUKQEAgLTE5MjYsNiArMTkyNiw3IEBACiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKKyNkZWZpbmUgRkVBVF9SRVNUT1JFX09SSUdfU0NSRUVOCiAjaWZkZWYgRkVBVF9SRVNUT1JFX09SSUdfU0NSRUVOCiBzdGF0aWMgQ29uc29sZUJ1ZmZlciBnX2NiT3JpZyA9IHsgMCB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZXZhbC5wcm8gYi9zcmMvcHJvdG8vZXZhbC5wcm8KaW5kZXggMzExODI4Mi4uYTBlODY4NSAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL2V2YWwucHJvCisrKyBiL3NyYy9wcm90by9ldmFsLnBybwpAQCAtMTcsNyArMTcsNyBAQAogaW50IGV2YWxfdG9fYm9vbCBfX0FSR1MoKGNoYXJfdSAqYXJnLCBpbnQgKmVycm9yLCBjaGFyX3UgKipuZXh0Y21kLCBpbnQgc2tpcCkpOwogY2hhcl91ICpldmFsX3RvX3N0cmluZ19za2lwIF9fQVJHUygoY2hhcl91ICphcmcsIGNoYXJfdSAqKm5leHRjbWQsIGludCBza2lwKSk7CiBpbnQgc2tpcF9leHByIF9fQVJHUygoY2hhcl91ICoqcHApKTsKLWNoYXJfdSAqZXZhbF90b19zdHJpbmcgX19BUkdTKChjaGFyX3UgKmFyZywgY2hhcl91ICoqbmV4dGNtZCkpOworY2hhcl91ICpldmFsX3RvX3N0cmluZyBfX0FSR1MoKGNoYXJfdSAqYXJnLCBjaGFyX3UgKipuZXh0Y21kLCBpbnQgZG9saXN0KSk7CiBjaGFyX3UgKmV2YWxfdG9fc3RyaW5nX3NhZmUgX19BUkdTKChjaGFyX3UgKmFyZywgY2hhcl91ICoqbmV4dGNtZCwgaW50IHVzZV9zYW5kYm94KSk7CiBpbnQgZXZhbF90b19udW1iZXIgX19BUkdTKChjaGFyX3UgKmV4cHIpKTsKIGxpc3RfVCAqZXZhbF9zcGVsbF9leHByIF9fQVJHUygoY2hhcl91ICpiYWR3b3JkLCBjaGFyX3UgKmV4cHIpKTsKZGlmZiAtLWdpdCBhL3NyYy9wcm90by9tYnl0ZS5wcm8gYi9zcmMvcHJvdG8vbWJ5dGUucHJvCmluZGV4IDliZmY0ZDMuLmU1YzkyOTUgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90by9tYnl0ZS5wcm8KKysrIGIvc3JjL3Byb3RvL21ieXRlLnBybwpAQCAtMjIsOCArMjIsOCBAQAogaW50IGFyYWJpY19jb21iaW5lIF9fQVJHUygoaW50IG9uZSwgaW50IHR3bykpOwogaW50IGFyYWJpY19tYXljb21iaW5lIF9fQVJHUygoaW50IHR3bykpOwogaW50IHV0Zl9jb21wb3NpbmdsaWtlIF9fQVJHUygoY2hhcl91ICpwMSwgY2hhcl91ICpwMikpOwotaW50IHV0ZmNfcHRyMmNoYXIgX19BUkdTKChjaGFyX3UgKnAsIGludCAqcDEsIGludCAqcDIpKTsKLWludCB1dGZjX3B0cjJjaGFyX2xlbiBfX0FSR1MoKGNoYXJfdSAqcCwgaW50ICpwMSwgaW50ICpwMiwgaW50IG1heGxlbikpOworaW50IHV0ZmNfcHRyMmNoYXIgX19BUkdTKChjaGFyX3UgKnAsIGludCAqcGNjKSk7CitpbnQgdXRmY19wdHIyY2hhcl9sZW4gX19BUkdTKChjaGFyX3UgKnAsIGludCAqcGNjLCBpbnQgbWF4bGVuKSk7CiBpbnQgdXRmY19jaGFyMmJ5dGVzIF9fQVJHUygoaW50IG9mZiwgY2hhcl91ICpidWYpKTsKIGludCB1dGZfcHRyMmxlbiBfX0FSR1MoKGNoYXJfdSAqcCkpOwogaW50IHV0Zl9ieXRlMmxlbiBfX0FSR1MoKGludCBiKSk7CmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vc3BlbGwucHJvIGIvc3JjL3Byb3RvL3NwZWxsLnBybwppbmRleCA5ZmM3YTc0Li5kOTRiOTU5IDEwMDY0NAotLS0gYS9zcmMvcHJvdG8vc3BlbGwucHJvCisrKyBiL3NyYy9wcm90by9zcGVsbC5wcm8KQEAgLTE2LDYgKzE2LDcgQEAKIHZvaWQgZXhfc3BlbGxyZXBhbGwgX19BUkdTKChleGFyZ19UICplYXApKTsKIHZvaWQgc3BlbGxfc3VnZ2VzdF9saXN0IF9fQVJHUygoZ2FycmF5X1QgKmdhcCwgY2hhcl91ICp3b3JkLCBpbnQgbWF4Y291bnQsIGludCBuZWVkX2NhcCwgaW50IGludGVyYWN0aXZlKSk7CiBjaGFyX3UgKmV2YWxfc291bmRmb2xkIF9fQVJHUygoY2hhcl91ICp3b3JkKSk7Cit2b2lkIGV4X3NwZWxsaW5mbyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogdm9pZCBleF9zcGVsbGR1bXAgX19BUkdTKChleGFyZ19UICplYXApKTsKIHZvaWQgc3BlbGxfZHVtcF9jb21wbCBfX0FSR1MoKGJ1Zl9UICpidWYsIGNoYXJfdSAqcGF0LCBpbnQgaWMsIGludCAqZGlyLCBpbnQgZHVtcGZsYWdzX2FyZykpOwogY2hhcl91ICpzcGVsbF90b193b3JkX2VuZCBfX0FSR1MoKGNoYXJfdSAqc3RhcnQsIGJ1Zl9UICpidWYpKTsKZGlmZiAtLWdpdCBhL3NyYy9yZWdleHAuYyBiL3NyYy9yZWdleHAuYwppbmRleCBkZjU1ODljLi5hMTQzNzE5IDEwMDY0NAotLS0gYS9zcmMvcmVnZXhwLmMKKysrIGIvc3JjL3JlZ2V4cC5jCkBAIC02NjUsNiArNjY1LDkgQEAKIHN0YXRpYyBjaGFyX3UJKnJlZ3BpZWNlIF9fQVJHUygoaW50ICopKTsKIHN0YXRpYyBjaGFyX3UJKnJlZ2F0b20gX19BUkdTKChpbnQgKikpOwogc3RhdGljIGNoYXJfdQkqcmVnbm9kZSBfX0FSR1MoKGludCkpOworI2lmZGVmIEZFQVRfTUJZVEUKK3N0YXRpYyBpbnQJdXNlX211bHRpYnl0ZWNvZGUgX19BUkdTKChpbnQgYykpOworI2VuZGlmCiBzdGF0aWMgaW50CXByb2dfbWFnaWNfd3JvbmcgX19BUkdTKCh2b2lkKSk7CiBzdGF0aWMgY2hhcl91CSpyZWduZXh0IF9fQVJHUygoY2hhcl91ICopKTsKIHN0YXRpYyB2b2lkCXJlZ2MgX19BUkdTKChpbnQgYikpOwpAQCAtMTY2Miw2ICsxNjY1LDE1IEBACiAJcCA9IHZpbV9zdHJjaHIoY2xhc3NjaGFycywgbm9fTWFnaWMoYykpOwogCWlmIChwID09IE5VTEwpCiAJICAgIEVNU0dfUkVUX05VTEwoXygiRTYzOiBpbnZhbGlkIHVzZSBvZiBcXF8iKSk7CisjaWZkZWYgRkVBVF9NQllURQorCS8qIFdoZW4gJy4nIGlzIGZvbGxvd2VkIGJ5IGEgY29tcG9zaW5nIGNoYXIgaWdub3JlIHRoZSBkb3QsIHNvIHRoYXQKKwkgKiB0aGUgY29tcG9zaW5nIGNoYXIgaXMgbWF0Y2hlZCBoZXJlLiAqLworCWlmIChlbmNfdXRmOCAmJiBjID09IE1hZ2ljKCcuJykgJiYgdXRmX2lzY29tcG9zaW5nKHBlZWtjaHIoKSkpCisJeworCSAgICBjID0gZ2V0Y2hyKCk7CisJICAgIGdvdG8gZG9fbXVsdGlieXRlOworCX0KKyNlbmRpZgogCXJldCA9IHJlZ25vZGUoY2xhc3Njb2Rlc1twIC0gY2xhc3NjaGFyc10gKyBleHRyYSk7CiAJKmZsYWdwIHw9IEhBU1dJRFRIIHwgU0lNUExFOwogCWJyZWFrOwpAQCAtMTkyMSw3ICsxOTMzLDEyIEBACiAJCQkgICAgICAgICAgRU1TR19NX1JFVF9OVUxMKAogCQkJCQlfKCJFNjc4OiBJbnZhbGlkIGNoYXJhY3RlciBhZnRlciAlcyUlW2R4b3VVXSIpLAogCQkJCQlyZWdfbWFnaWMgPT0gTUFHSUNfQUxMKTsKLQkJCSAgICAgIHJldCA9IHJlZ25vZGUoRVhBQ1RMWSk7CisjaWZkZWYgRkVBVF9NQllURQorCQkJICAgICAgaWYgKHVzZV9tdWx0aWJ5dGVjb2RlKGkpKQorCQkJCSAgcmV0ID0gcmVnbm9kZShNVUxUSUJZVEVDT0RFKTsKKwkJCSAgICAgIGVsc2UKKyNlbmRpZgorCQkJCSAgcmV0ID0gcmVnbm9kZShFWEFDVExZKTsKIAkJCSAgICAgIGlmIChpID09IDApCiAJCQkJICByZWdjKDB4MGEpOwogCQkJICAgICAgZWxzZQpAQCAtMjI4OSwxMCArMjMwNiwxMCBAQAogCiAjaWZkZWYgRkVBVF9NQllURQogCSAgICAvKiBBIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGlzIGhhbmRsZWQgYXMgYSBzZXBhcmF0ZSBhdG9tIGlmIGl0J3MKLQkgICAgICogYmVmb3JlIGEgbXVsdGkuICovCi0JICAgIGlmIChoYXNfbWJ5dGUgJiYgKCptYl9jaGFyMmxlbikoYykgPiAxCi0JCQkJICAgICAmJiByZV9tdWx0aV90eXBlKHBlZWtjaHIoKSkgIT0gTk9UX01VTFRJKQorCSAgICAgKiBiZWZvcmUgYSBtdWx0aSBhbmQgd2hlbiBpdCdzIGEgY29tcG9zaW5nIGNoYXIuICovCisJICAgIGlmICh1c2VfbXVsdGlieXRlY29kZShjKSkKIAkgICAgeworZG9fbXVsdGlieXRlOgogCQlyZXQgPSByZWdub2RlKE1VTFRJQllURUNPREUpOwogCQlyZWdtYmMoYyk7CiAJCSpmbGFncCB8PSBIQVNXSURUSCB8IFNJTVBMRTsKQEAgLTIzMjMsMjcgKzIzNDAsMTcgQEAKIAkJICAgIHJlZ21iYyhjKTsKIAkJICAgIGlmIChlbmNfdXRmOCkKIAkJICAgIHsKLQkJCWludAlvZmY7CiAJCQlpbnQJbDsKIAotCQkJLyogTmVlZCB0byBnZXQgY29tcG9zaW5nIGNoYXJhY3RlciB0b28sIGRpcmVjdGx5Ci0JCQkgKiBhY2Nlc3MgcmVncGFyc2UgZm9yIHRoYXQsIGJlY2F1c2Ugc2tpcGNocigpIHNraXBzCi0JCQkgKiBvdmVyIGNvbXBvc2luZyBjaGFycy4gKi8KLQkJCXVuZ2V0Y2hyKCk7Ci0JCQlpZiAoKnJlZ3BhcnNlID09ICdcXCcgJiYgcmVncGFyc2VbMV0gIT0gTlVMKQotCQkJICAgIG9mZiA9IDE7Ci0JCQllbHNlCi0JCQkgICAgb2ZmID0gMDsKKwkJCS8qIE5lZWQgdG8gZ2V0IGNvbXBvc2luZyBjaGFyYWN0ZXIgdG9vLiAqLwogCQkJZm9yICg7OykKIAkJCXsKLQkJCSAgICBsID0gdXRmX3B0cjJsZW4ocmVncGFyc2UgKyBvZmYpOwotCQkJICAgIGlmICghVVRGX0NPTVBPU0lOR0xJS0UocmVncGFyc2UgKyBvZmYsCi0JCQkJCQkJICByZWdwYXJzZSArIG9mZiArIGwpKQorCQkJICAgIGwgPSB1dGZfcHRyMmxlbihyZWdwYXJzZSk7CisJCQkgICAgaWYgKCFVVEZfQ09NUE9TSU5HTElLRShyZWdwYXJzZSwgcmVncGFyc2UgKyBsKSkKIAkJCQlicmVhazsKLQkJCSAgICBvZmYgKz0gbDsKLQkJCSAgICByZWdtYmModXRmX3B0cjJjaGFyKHJlZ3BhcnNlICsgb2ZmKSk7CisJCQkgICAgcmVnbWJjKHV0Zl9wdHIyY2hhcihyZWdwYXJzZSkpOworCQkJICAgIHNraXBjaHIoKTsKIAkJCX0KLQkJCXNraXBjaHIoKTsKIAkJICAgIH0KIAkJfQogCQllbHNlCkBAIC0yMzY0LDYgKzIzNzEsMjEgQEAKICAgICByZXR1cm4gcmV0OwogfQogCisjaWZkZWYgRkVBVF9NQllURQorLyoKKyAqIFJldHVybiBUUlVFIGlmIE1VTFRJQllURUNPREUgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBFWEFDVExZIGZvcgorICogY2hhcmFjdGVyICJjIi4KKyAqLworICAgIHN0YXRpYyBpbnQKK3VzZV9tdWx0aWJ5dGVjb2RlKGMpCisgICAgaW50IGM7Cit7CisgICAgcmV0dXJuIGhhc19tYnl0ZSAmJiAoKm1iX2NoYXIybGVuKShjKSA+IDEKKwkJICAgICAmJiAocmVfbXVsdGlfdHlwZShwZWVrY2hyKCkpICE9IE5PVF9NVUxUSQorCQkJICAgICB8fCAoZW5jX3V0ZjggJiYgdXRmX2lzY29tcG9zaW5nKGMpKSk7Cit9CisjZW5kaWYKKwogLyoKICAqIGVtaXQgYSBub2RlCiAgKiBSZXR1cm4gcG9pbnRlciB0byBnZW5lcmF0ZWQgY29kZS4KQEAgLTI3NDcsNyArMjc2OSw5IEBACiAgICAgaWYgKHJlZ3BhcnNlW3ByZXZjaHJfbGVuXSAhPSBOVUwpCiAgICAgewogI2lmZGVmIEZFQVRfTUJZVEUKLQlpZiAoaGFzX21ieXRlKQorCWlmIChlbmNfdXRmOCkKKwkgICAgcHJldmNocl9sZW4gKz0gdXRmX2NoYXIybGVuKG1iX3B0cjJjaGFyKHJlZ3BhcnNlICsgcHJldmNocl9sZW4pKTsKKwllbHNlIGlmIChoYXNfbWJ5dGUpCiAJICAgIHByZXZjaHJfbGVuICs9ICgqbWJfcHRyMmxlbikocmVncGFyc2UgKyBwcmV2Y2hyX2xlbik7CiAJZWxzZQogI2VuZGlmCkBAIC00MjI5LDYgKzQyNTMsNyBAQAogCSAgICB7CiAJCWludAlpLCBsZW47CiAJCWNoYXJfdQkqb3BuZDsKKwkJaW50CW9wbmRjLCBpbnBjOwogCiAJCW9wbmQgPSBPUEVSQU5EKHNjYW4pOwogCQkvKiBTYWZldHkgY2hlY2sgKGp1c3QgaW4gY2FzZSAnZW5jb2RpbmcnIHdhcyBjaGFuZ2VkIHNpbmNlCkBAIC00MjM4LDEyICs0MjYzLDM3IEBACiAJCSAgICBzdGF0dXMgPSBSQV9OT01BVENIOwogCQkgICAgYnJlYWs7CiAJCX0KLQkJZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQotCQkgICAgaWYgKG9wbmRbaV0gIT0gcmVnaW5wdXRbaV0pCisJCWlmIChlbmNfdXRmOCkKKwkJICAgIG9wbmRjID0gbWJfcHRyMmNoYXIob3BuZCk7CisJCWlmIChlbmNfdXRmOCAmJiB1dGZfaXNjb21wb3Npbmcob3BuZGMpKQorCQl7CisJCSAgICAvKiBXaGVuIG9ubHkgYSBjb21wb3NpbmcgY2hhciBpcyBnaXZlbiBtYXRjaCBhdCBhbnkKKwkJICAgICAqIHBvc2l0aW9uIHdoZXJlIHRoYXQgY29tcG9zaW5nIGNoYXIgYXBwZWFycy4gKi8KKwkJICAgIHN0YXR1cyA9IFJBX05PTUFUQ0g7CisJCSAgICBmb3IgKGkgPSAwOyByZWdpbnB1dFtpXSAhPSBOVUw7IGkgKz0gdXRmX2NoYXIybGVuKGlucGMpKQogCQkgICAgewotCQkJc3RhdHVzID0gUkFfTk9NQVRDSDsKLQkJCWJyZWFrOworCQkJaW5wYyA9IG1iX3B0cjJjaGFyKHJlZ2lucHV0ICsgaSk7CisJCQlpZiAoIXV0Zl9pc2NvbXBvc2luZyhpbnBjKSkKKwkJCXsKKwkJCSAgICBpZiAoaSA+IDApCisJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlIGlmIChvcG5kYyA9PSBpbnBjKQorCQkJeworCQkJICAgIC8qIEluY2x1ZGUgYWxsIGZvbGxvd2luZyBjb21wb3NpbmcgY2hhcnMuICovCisJCQkgICAgbGVuID0gaSArIG1iX3B0cjJsZW4ocmVnaW5wdXQgKyBpKTsKKwkJCSAgICBzdGF0dXMgPSBSQV9NQVRDSDsKKwkJCSAgICBicmVhazsKKwkJCX0KIAkJICAgIH0KKwkJfQorCQllbHNlCisJCSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisJCQlpZiAob3BuZFtpXSAhPSByZWdpbnB1dFtpXSkKKwkJCXsKKwkJCSAgICBzdGF0dXMgPSBSQV9OT01BVENIOworCQkJICAgIGJyZWFrOworCQkJfQogCQlyZWdpbnB1dCArPSBsZW47CiAJICAgIH0KIAkgICAgZWxzZQpAQCAtNjc0NSw3ICs2Nzk1LDcgQEAKIAkgICAgc2F2ZV9pcmVnX2ljID0gaXJlZ19pYzsKIAkgICAgY2FuX2Zfc3VibWF0Y2ggPSBUUlVFOwogCi0JICAgIGV2YWxfcmVzdWx0ID0gZXZhbF90b19zdHJpbmcoc291cmNlICsgMiwgTlVMTCk7CisJICAgIGV2YWxfcmVzdWx0ID0gZXZhbF90b19zdHJpbmcoc291cmNlICsgMiwgTlVMTCwgVFJVRSk7CiAJICAgIGlmIChldmFsX3Jlc3VsdCAhPSBOVUxMKQogCSAgICB7CiAJCWZvciAocyA9IGV2YWxfcmVzdWx0OyAqcyAhPSBOVUw7IG1iX3B0cl9hZHYocykpCmRpZmYgLS1naXQgYS9zcmMvc2NyZWVuLmMgYi9zcmMvc2NyZWVuLmMKaW5kZXggYzUzZmVjYS4uNzgxYzE5MiAxMDA2NDQKLS0tIGEvc3JjL3NjcmVlbi5jCisrKyBiL3NyYy9zY3JlZW4uYwpAQCAtMjcsNyArMjcsNyBAQAogICogU2NyZWVuTGluZXNVQ1tdLiAgU2NyZWVuTGluZXNbXSBjb250YWlucyB0aGUgZmlyc3QgYnl0ZSBvbmx5LiAgRm9yIGFuIEFTQ0lJCiAgKiBjaGFyYWN0ZXIgd2l0aG91dCBjb21wb3NpbmcgY2hhcnMgU2NyZWVuTGluZXNVQ1tdIHdpbGwgYmUgMC4gIFdoZW4gdGhlCiAgKiBjaGFyYWN0ZXIgb2NjdXBpZXMgdHdvIGRpc3BsYXkgY2VsbHMgdGhlIG5leHQgYnl0ZSBpbiBTY3JlZW5MaW5lc1tdIGlzIDAuCi0gKiBTY3JlZW5MaW5lc0MxW10gYW5kIFNjcmVlbkxpbmVzQzJbXSBjb250YWluIHVwIHRvIHR3byBjb21wb3NpbmcgY2hhcmFjdGVycworICogU2NyZWVuTGluZXNDW11bXSBjb250YWluIHVwIHRvICdtYXhjb21iaW5lJyBjb21wb3NpbmcgY2hhcmFjdGVycwogICogKGRyYXduIG9uIHRvcCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyKS4gIFRoZXkgYXJlIDAgd2hlbiBub3QgdXNlZC4KICAqIFNjcmVlbkxpbmVzMltdIGlzIG9ubHkgdXNlZCBmb3IgZXVjLWpwIHRvIHN0b3JlIHRoZSBzZWNvbmQgYnl0ZSBpZiB0aGUKICAqIGZpcnN0IGJ5dGUgaXMgMHg4ZSAoc2luZ2xlLXdpZHRoIGNoYXJhY3RlcikuCkBAIC0yMTg3LDcgKzIxODcsOCBAQAogICAgIGlmIChoYXNfbWJ5dGUpCiAgICAgewogCWludAljZWxsczsKLQlpbnQJdThjLCB1OGNfYzEsIHU4Y19jMjsKKwlpbnQJdThjLCB1OGNjW01BWF9NQ09dOworCWludAlpOwogCWludAlpZHg7CiAJaW50CWNfbGVuOwogCWNoYXJfdQkqcDsKQEAgLTIyMTcsOCArMjIxOCw4IEBACiAJICAgIFNjcmVlbkxpbmVzW2lkeF0gPSAqcDsKIAkgICAgaWYgKGVuY191dGY4KQogCSAgICB7Ci0JCXU4YyA9IHV0ZmNfcHRyMmNoYXIocCwgJnU4Y19jMSwgJnU4Y19jMik7Ci0JCWlmICgqcCA8IDB4ODAgJiYgdThjX2MxID09IDAgJiYgdThjX2MyID09IDApCisJCXU4YyA9IHV0ZmNfcHRyMmNoYXIocCwgdThjYyk7CisJCWlmICgqcCA8IDB4ODAgJiYgdThjY1swXSA9PSAwKQogCQl7CiAJCSAgICBTY3JlZW5MaW5lc1VDW2lkeF0gPSAwOwogI2lmZGVmIEZFQVRfQVJBQklDCkBAIC0yMjMxLDcgKzIyMzIsOCBAQAogCQkgICAgaWYgKHBfYXJzaGFwZSAmJiAhcF90YmlkaSAmJiBBUkFCSUNfQ0hBUih1OGMpKQogCQkgICAgewogCQkJLyogRG8gQXJhYmljIHNoYXBpbmcuICovCi0JCQlpbnQJcGMsIHBjMSwgbmMsIGR1bW15OworCQkJaW50CXBjLCBwYzEsIG5jOworCQkJaW50CXBjY1tNQVhfTUNPXTsKIAkJCWludAlmaXJzdGJ5dGUgPSAqcDsKIAogCQkJLyogVGhlIGlkZWEgb2Ygd2hhdCBpcyB0aGUgcHJldmlvdXMgYW5kIG5leHQKQEAgLTIyNDEsMTYgKzIyNDMsMTcgQEAKIAkJCSAgICBwYyA9IHByZXZfYzsKIAkJCSAgICBwYzEgPSBwcmV2X2MxOwogCQkJICAgIG5jID0gdXRmX3B0cjJjaGFyKHAgKyBjX2xlbik7Ci0JCQkgICAgcHJldl9jMSA9IHU4Y19jMTsKKwkJCSAgICBwcmV2X2MxID0gdThjY1swXTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCSAgICBwYyA9IHV0ZmNfcHRyMmNoYXIocCArIGNfbGVuLCAmcGMxLCAmZHVtbXkpOworCQkJICAgIHBjID0gdXRmY19wdHIyY2hhcihwICsgY19sZW4sIHBjYyk7CiAJCQkgICAgbmMgPSBwcmV2X2M7CisJCQkgICAgcGMxID0gcGNjWzBdOwogCQkJfQogCQkJcHJldl9jID0gdThjOwogCi0JCQl1OGMgPSBhcmFiaWNfc2hhcGUodThjLCAmZmlyc3RieXRlLCAmdThjX2MxLAorCQkJdThjID0gYXJhYmljX3NoYXBlKHU4YywgJmZpcnN0Ynl0ZSwgJnU4Y2NbMF0sCiAJCQkJCQkJCSBwYywgcGMxLCBuYyk7CiAJCQlTY3JlZW5MaW5lc1tpZHhdID0gZmlyc3RieXRlOwogCQkgICAgfQpAQCAtMjI2Miw4ICsyMjY1LDEyIEBACiAJCQlTY3JlZW5MaW5lc1VDW2lkeF0gPSAoY2VsbHMgPT0gMikgPyAweGZmMWYgOiAoaW50KSc/JzsKIAkJICAgIGVsc2UKIAkJCVNjcmVlbkxpbmVzVUNbaWR4XSA9IHU4YzsKLQkJICAgIFNjcmVlbkxpbmVzQzFbaWR4XSA9IHU4Y19jMTsKLQkJICAgIFNjcmVlbkxpbmVzQzJbaWR4XSA9IHU4Y19jMjsKKwkJICAgIGZvciAoaSA9IDA7IGkgPCBTY3JlZW5fbWNvOyArK2kpCisJCSAgICB7CisJCQlTY3JlZW5MaW5lc0NbaV1baWR4XSA9IHU4Y2NbaV07CisJCQlpZiAodThjY1tpXSA9PSAwKQorCQkJICAgIGJyZWFrOworCQkgICAgfQogCQl9CiAJCWlmIChjZWxscyA+IDEpCiAJCSAgICBTY3JlZW5MaW5lc1tpZHggKyAxXSA9IDA7CkBAIC0yMzE1LDggKzIzMjIsNyBAQAogCSAgICBpZiAoZmlsbF9mb2xkID49IDB4ODApCiAJICAgIHsKIAkJU2NyZWVuTGluZXNVQ1tvZmYgKyBjb2xdID0gZmlsbF9mb2xkOwotCQlTY3JlZW5MaW5lc0MxW29mZiArIGNvbF0gPSAwOwotCQlTY3JlZW5MaW5lc0MyW29mZiArIGNvbF0gPSAwOworCQlTY3JlZW5MaW5lc0NbMF1bb2ZmICsgY29sXSA9IDA7CiAJICAgIH0KIAkgICAgZWxzZQogCQlTY3JlZW5MaW5lc1VDW29mZiArIGNvbF0gPSAwOwpAQCAtMjU2MSw4ICsyNTY3LDcgQEAKICAgICBpbnQJCW1iX2wgPSAxOwkJLyogbXVsdGktYnl0ZSBieXRlIGxlbmd0aCAqLwogICAgIGludAkJbWJfYyA9IDA7CQkvKiBkZWNvZGVkIG11bHRpLWJ5dGUgY2hhcmFjdGVyICovCiAgICAgaW50CQltYl91dGY4ID0gRkFMU0U7CS8qIHNjcmVlbiBjaGFyIGlzIFVURi04IGNoYXIgKi8KLSAgICBpbnQJCXU4Y19jMSA9IDA7CQkvKiBmaXJzdCBjb21wb3NpbmcgVVRGLTggY2hhciAqLwotICAgIGludAkJdThjX2MyID0gMDsJCS8qIHNlY29uZCBjb21wb3NpbmcgVVRGLTggY2hhciAqLworICAgIGludAkJdThjY1tNQVhfTUNPXTsJCS8qIGNvbXBvc2luZyBVVEYtOCBjaGFycyAqLwogI2VuZGlmCiAjaWZkZWYgRkVBVF9ESUZGCiAgICAgaW50CQlmaWxsZXJfbGluZXM7CQkvKiBuciBvZiBmaWxsZXIgbGluZXMgdG8gYmUgZHJhd24gKi8KQEAgLTI1ODEsNiArMjU4Niw4IEBACiAjZW5kaWYKICNpZmRlZiBGRUFUX1NFQVJDSF9FWFRSQQogICAgIG1hdGNoX1QJKnNobDsJCQkvKiBwb2ludHMgdG8gc2VhcmNoX2hsIG9yIG1hdGNoX2hsICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZFQVRfU0VBUkNIX0VYVFJBKSB8fCBkZWZpbmVkKEZFQVRfTUJZVEUpCiAgICAgaW50CQlpOwogI2VuZGlmCiAjaWZkZWYgRkVBVF9BUkFCSUMKQEAgLTM0MzMsNyArMzQ0MCw3IEBACiAJCWlmIChlbmNfdXRmOCAmJiAoKm1iX2NoYXIybGVuKShjKSA+IDEpCiAJCXsKIAkJICAgIG1iX3V0ZjggPSBUUlVFOwotCQkgICAgdThjX2MxID0gdThjX2MyID0gMDsKKwkJICAgIHU4Y2NbMF0gPSAwOwogCQl9CiAJCWVsc2UKIAkJICAgIG1iX3V0ZjggPSBGQUxTRTsKQEAgLTM0NTYsNyArMzQ2Myw3IEBACiAJCQkgICAgbWJfbCA9IDE7CiAJCQllbHNlIGlmIChtYl9sID4gMSkKIAkJCXsKLQkJCSAgICBtYl9jID0gdXRmY19wdHIyY2hhcihwX2V4dHJhLCAmdThjX2MxLCAmdThjX2MyKTsKKwkJCSAgICBtYl9jID0gdXRmY19wdHIyY2hhcihwX2V4dHJhLCB1OGNjKTsKIAkJCSAgICBtYl91dGY4ID0gVFJVRTsKIAkJCX0KIAkJICAgIH0KQEAgLTM1MjAsNyArMzUyNyw3IEBACiAJCSAgICBtYl91dGY4ID0gRkFMU0U7CiAJCSAgICBpZiAobWJfbCA+IDEpCiAJCSAgICB7Ci0JCQltYl9jID0gdXRmY19wdHIyY2hhcihwdHIsICZ1OGNfYzEsICZ1OGNfYzIpOworCQkJbWJfYyA9IHV0ZmNfcHRyMmNoYXIocHRyLCB1OGNjKTsKIAkJCS8qIE92ZXJsb25nIGVuY29kZWQgQVNDSUkgb3IgQVNDSUkgd2l0aCBjb21wb3NpbmcgY2hhcgogCQkJICogaXMgZGlzcGxheWVkIG5vcm1hbGx5LCBleGNlcHQgYSBOVUwuICovCiAJCQlpZiAobWJfYyA8IDB4ODApCkBAIC0zNTMxLDggKzM1MzgsOSBAQAogCQkJICogRHJhdyBpdCBhcyBhIHNwYWNlIHdpdGggYSBjb21wb3NpbmcgY2hhci4gKi8KIAkJCWlmICh1dGZfaXNjb21wb3NpbmcobWJfYykpCiAJCQl7Ci0JCQkgICAgdThjX2MyID0gdThjX2MxOwotCQkJICAgIHU4Y19jMSA9IG1iX2M7CisJCQkgICAgZm9yIChpID0gU2NyZWVuX21jbyAtIDE7IGkgPiAwOyAtLWkpCisJCQkJdThjY1tpXSA9IHU4Y2NbaSAtIDFdOworCQkJICAgIHU4Y2NbMF0gPSBtYl9jOwogCQkJICAgIG1iX2MgPSAnICc7CiAJCQl9CiAJCSAgICB9CkBAIC0zNTQ5LDEwICszNTU3LDEwIEBACiAJCQlpZiAobWJfYyA8IDB4MTAwMDApCiAJCQl7CiAJCQkgICAgdHJhbnNjaGFyX2hleChleHRyYSwgbWJfYyk7Ci0jaWZkZWYgRkVBVF9SSUdIVExFRlQKKyMgaWZkZWYgRkVBVF9SSUdIVExFRlQKIAkJCSAgICBpZiAod3AtPndfcF9ybCkJCS8qIHJldmVyc2UgKi8KIAkJCQlybF9taXJyb3IoZXh0cmEpOwotI2VuZGlmCisjIGVuZGlmCiAJCQl9CiAJCQllbHNlIGlmICh1dGZfY2hhcjJjZWxscyhtYl9jKSAhPSAyKQogCQkJICAgIFNUUkNQWShleHRyYSwgIj8iKTsKQEAgLTM1NzksNyArMzU4Nyw4IEBACiAJCSAgICBlbHNlIGlmIChwX2Fyc2hhcGUgJiYgIXBfdGJpZGkgJiYgQVJBQklDX0NIQVIobWJfYykpCiAJCSAgICB7CiAJCQkvKiBEbyBBcmFiaWMgc2hhcGluZy4gKi8KLQkJCWludAlwYywgcGMxLCBuYywgZHVtbXk7CisJCQlpbnQJcGMsIHBjMSwgbmM7CisJCQlpbnQJcGNjW01BWF9NQ09dOwogCiAJCQkvKiBUaGUgaWRlYSBvZiB3aGF0IGlzIHRoZSBwcmV2aW91cyBhbmQgbmV4dAogCQkJICogY2hhcmFjdGVyIGRlcGVuZHMgb24gJ3JpZ2h0bGVmdCcuICovCkBAIC0zNTg4LDE2ICszNTk3LDE3IEBACiAJCQkgICAgcGMgPSBwcmV2X2M7CiAJCQkgICAgcGMxID0gcHJldl9jMTsKIAkJCSAgICBuYyA9IHV0Zl9wdHIyY2hhcihwdHIgKyBtYl9sKTsKLQkJCSAgICBwcmV2X2MxID0gdThjX2MxOworCQkJICAgIHByZXZfYzEgPSB1OGNjWzBdOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJICAgIHBjID0gdXRmY19wdHIyY2hhcihwdHIgKyBtYl9sLCAmcGMxLCAmZHVtbXkpOworCQkJICAgIHBjID0gdXRmY19wdHIyY2hhcihwdHIgKyBtYl9sLCBwY2MpOwogCQkJICAgIG5jID0gcHJldl9jOworCQkJICAgIHBjMSA9IHBjY1swXTsKIAkJCX0KIAkJCXByZXZfYyA9IG1iX2M7CiAKLQkJCW1iX2MgPSBhcmFiaWNfc2hhcGUobWJfYywgJmMsICZ1OGNfYzEsIHBjLCBwYzEsIG5jKTsKKwkJCW1iX2MgPSBhcmFiaWNfc2hhcGUobWJfYywgJmMsICZ1OGNjWzBdLCBwYywgcGMxLCBuYyk7CiAJCSAgICB9CiAJCSAgICBlbHNlCiAJCQlwcmV2X2MgPSBtYl9jOwpAQCAtMzcwNCw3ICszNzE0LDcgQEAKIAkJaWYgKGVuY191dGY4ICYmICgqbWJfY2hhcjJsZW4pKGMpID4gMSkKIAkJewogCQkgICAgbWJfdXRmOCA9IFRSVUU7Ci0JCSAgICB1OGNfYzEgPSB1OGNfYzIgPSAwOworCQkgICAgdThjY1swXSA9IDA7CiAJCX0KIAkJZWxzZQogCQkgICAgbWJfdXRmOCA9IEZBTFNFOwpAQCAtMzg2Niw3ICszODc2LDcgQEAKIAkJICAgIGlmIChlbmNfdXRmOCAmJiAoKm1iX2NoYXIybGVuKShjKSA+IDEpCiAJCSAgICB7CiAJCQltYl91dGY4ID0gVFJVRTsKLQkJCXU4Y19jMSA9IHU4Y19jMiA9IDA7CisJCQl1OGNjWzBdID0gMDsKIAkJICAgIH0KIAkJICAgIGVsc2UKIAkJCW1iX3V0ZjggPSBGQUxTRTsKQEAgLTM5MDQsNyArMzkxNCw3IEBACiAJCQlpZiAoZW5jX3V0ZjggJiYgKCptYl9jaGFyMmxlbikoYykgPiAxKQogCQkJewogCQkJICAgIG1iX3V0ZjggPSBUUlVFOwotCQkJICAgIHU4Y19jMSA9IHU4Y19jMiA9IDA7CisJCQkgICAgdThjY1swXSA9IDA7CiAJCQl9CiAjZW5kaWYKIAkJICAgIH0KQEAgLTM5NzgsNyArMzk4OCw3IEBACiAJCSAgICBpZiAoZW5jX3V0ZjggJiYgKCptYl9jaGFyMmxlbikoYykgPiAxKQogCQkgICAgewogCQkJbWJfdXRmOCA9IFRSVUU7Ci0JCQl1OGNfYzEgPSB1OGNfYzIgPSAwOworCQkJdThjY1swXSA9IDA7CiAJCSAgICB9CiAJCSAgICBlbHNlCiAJCQltYl91dGY4ID0gRkFMU0U7CS8qIGRvbid0IGRyYXcgYXMgVVRGLTggKi8KQEAgLTQxMTcsNyArNDEyNyw3IEBACiAJICAgIGlmIChlbmNfdXRmOCAmJiAoKm1iX2NoYXIybGVuKShjKSA+IDEpCiAJICAgIHsKIAkJbWJfdXRmOCA9IFRSVUU7Ci0JCXU4Y19jMSA9IHU4Y19jMiA9IDA7CisJCXU4Y2NbMF0gPSAwOwogCSAgICB9CiAJICAgIGVsc2UKIAkJbWJfdXRmOCA9IEZBTFNFOwkvKiBkb24ndCBkcmF3IGFzIFVURi04ICovCkBAIC00MjQ3LDcgKzQyNTcsNyBAQAogCSAgICBpZiAoZW5jX3V0ZjggJiYgKCptYl9jaGFyMmxlbikoYykgPiAxKQogCSAgICB7CiAJCW1iX3V0ZjggPSBUUlVFOwotCQl1OGNfYzEgPSB1OGNfYzIgPSAwOworCQl1OGNjWzBdID0gMDsKIAkgICAgfQogCSAgICBlbHNlCiAJCW1iX3V0ZjggPSBGQUxTRTsKQEAgLTQyODEsOCArNDI5MSwxMiBAQAogCQlpZiAobWJfdXRmOCkKIAkJewogCQkgICAgU2NyZWVuTGluZXNVQ1tvZmZdID0gbWJfYzsKLQkJICAgIFNjcmVlbkxpbmVzQzFbb2ZmXSA9IHU4Y19jMTsKLQkJICAgIFNjcmVlbkxpbmVzQzJbb2ZmXSA9IHU4Y19jMjsKKwkJICAgIGZvciAoaSA9IDA7IGkgPCBTY3JlZW5fbWNvOyArK2kpCisJCSAgICB7CisJCQlTY3JlZW5MaW5lc0NbaV1bb2ZmXSA9IHU4Y2NbaV07CisJCQlpZiAodThjY1tpXSA9PSAwKQorCQkJICAgIGJyZWFrOworCQkgICAgfQogCQl9CiAJCWVsc2UKIAkJICAgIFNjcmVlbkxpbmVzVUNbb2ZmXSA9IDA7CkBAIC00NTEyLDYgKzQ1MjYsMzAgQEAKICAgICByZXR1cm4gcm93OwogfQogCisjaWZkZWYgRkVBVF9NQllURQorc3RhdGljIGludCBjb21wX2NoYXJfZGlmZmVycyBfX0FSR1MoKGludCwgaW50KSk7CisKKy8qCisgKiBSZXR1cm4gaWYgdGhlIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGF0ICJvZmZfZnJvbSIgYW5kICJvZmZfdG8iIGRpZmZlci4KKyAqLworICAgIHN0YXRpYyBpbnQKK2NvbXBfY2hhcl9kaWZmZXJzKG9mZl9mcm9tLCBvZmZfdG8pCisgICAgaW50CSAgICBvZmZfZnJvbTsKKyAgICBpbnQJICAgIG9mZl90bzsKK3sKKyAgICBpbnQJICAgIGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgU2NyZWVuX21jbzsgKytpKQorICAgIHsKKwlpZiAoU2NyZWVuTGluZXNDW2ldW29mZl9mcm9tXSAhPSBTY3JlZW5MaW5lc0NbaV1bb2ZmX3RvXSkKKwkgICAgcmV0dXJuIFRSVUU7CisJaWYgKFNjcmVlbkxpbmVzQ1tpXVtvZmZfZnJvbV0gPT0gMCkKKwkgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgorCiAvKgogICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY2hhcmFjdGVyIG5lZWRzIHJlZHJhd2luZzoKICAqIC0gdGhlIChmaXJzdCBieXRlIG9mIHRoZSkgY2hhcmFjdGVyIGlzIGRpZmZlcmVudApAQCAtNDUzOCwxMCArNDU3Niw3IEBACiAJCXx8IChlbmNfdXRmOAogCQkgICAgJiYgKFNjcmVlbkxpbmVzVUNbb2ZmX2Zyb21dICE9IFNjcmVlbkxpbmVzVUNbb2ZmX3RvXQogCQkJfHwgKFNjcmVlbkxpbmVzVUNbb2ZmX2Zyb21dICE9IDAKLQkJCSAgICAmJiAoU2NyZWVuTGluZXNDMVtvZmZfZnJvbV0KLQkJCQkJCSAgICAgICE9IFNjcmVlbkxpbmVzQzFbb2ZmX3RvXQotCQkJCXx8IFNjcmVlbkxpbmVzQzJbb2ZmX2Zyb21dCi0JCQkJCQkgICE9IFNjcmVlbkxpbmVzQzJbb2ZmX3RvXSkpKSkKKwkJCSAgICAmJiBjb21wX2NoYXJfZGlmZmVycyhvZmZfZnJvbSwgb2ZmX3RvKSkpKQogI2VuZGlmCiAJICAgICAgICkpCiAJcmV0dXJuIFRSVUU7CkBAIC00NzUzLDggKzQ3ODgsMTAgQEAKIAkJU2NyZWVuTGluZXNVQ1tvZmZfdG9dID0gU2NyZWVuTGluZXNVQ1tvZmZfZnJvbV07CiAJCWlmIChTY3JlZW5MaW5lc1VDW29mZl9mcm9tXSAhPSAwKQogCQl7Ci0JCSAgICBTY3JlZW5MaW5lc0MxW29mZl90b10gPSBTY3JlZW5MaW5lc0MxW29mZl9mcm9tXTsKLQkJICAgIFNjcmVlbkxpbmVzQzJbb2ZmX3RvXSA9IFNjcmVlbkxpbmVzQzJbb2ZmX2Zyb21dOworCQkgICAgaW50CSAgICBpOworCisJCSAgICBmb3IgKGkgPSAwOyBpIDwgU2NyZWVuX21jbzsgKytpKQorCQkJU2NyZWVuTGluZXNDW2ldW29mZl90b10gPSBTY3JlZW5MaW5lc0NbaV1bb2ZmX2Zyb21dOwogCQl9CiAJICAgIH0KIAkgICAgaWYgKGNoYXJfY2VsbHMgPT0gMikKQEAgLTQ4OTIsOCArNDkyOSw4IEBACiAJICAgIGMgPSBmaWxsY2hhcl92c2VwKCZobCk7CiAJICAgIGlmIChTY3JlZW5MaW5lc1tvZmZfdG9dICE9IGMKICMgaWZkZWYgRkVBVF9NQllURQotCQkgICAgfHwgKGVuY191dGY4Ci0JCQkgICAgICAmJiBTY3JlZW5MaW5lc1VDW29mZl90b10gIT0gKGMgPj0gMHg4MCA/IGMgOiAwKSkKKwkJICAgIHx8IChlbmNfdXRmOCAmJiAoaW50KVNjcmVlbkxpbmVzVUNbb2ZmX3RvXQorCQkJCQkJICAgICAgICE9IChjID49IDB4ODAgPyBjIDogMCkpCiAjIGVuZGlmCiAJCSAgICB8fCBTY3JlZW5BdHRyc1tvZmZfdG9dICE9IGhsKQogCSAgICB7CkBAIC00OTA1LDggKzQ5NDIsNyBAQAogCQkgICAgaWYgKGMgPj0gMHg4MCkKIAkJICAgIHsKIAkJCVNjcmVlbkxpbmVzVUNbb2ZmX3RvXSA9IGM7Ci0JCQlTY3JlZW5MaW5lc0MxW29mZl90b10gPSAwOwotCQkJU2NyZWVuTGluZXNDMltvZmZfdG9dID0gMDsKKwkJCVNjcmVlbkxpbmVzQ1swXVtvZmZfdG9dID0gMDsKIAkJICAgIH0KIAkJICAgIGVsc2UKIAkJCVNjcmVlbkxpbmVzVUNbb2ZmX3RvXSA9IDA7CkBAIC01NTUzLDcgKzU1ODksNyBAQAogCWN1cndpbiA9IHdwOwogCVNUUkNQWShidWYsICJiOmtleW1hcF9uYW1lIik7CS8qIG11c3QgYmUgd3JpdGFibGUgKi8KIAkrK2Vtc2dfc2tpcDsKLQlzID0gcCA9IGV2YWxfdG9fc3RyaW5nKGJ1ZiwgTlVMTCk7CisJcyA9IHAgPSBldmFsX3RvX3N0cmluZyhidWYsIE5VTEwsIEZBTFNFKTsKIAktLWVtc2dfc2tpcDsKIAljdXJidWYgPSBvbGRfY3VyYnVmOwogCWN1cndpbiA9IG9sZF9jdXJ3aW47CkBAIC01ODA1LDYgKzU4NDEsMzEgQEAKICAgICB9CiB9CiAKKyNpZmRlZiBGRUFUX01CWVRFCitzdGF0aWMgaW50IHNjcmVlbl9jb21wX2RpZmZlcnMgX19BUkdTKChpbnQsIGludCopKTsKKworLyoKKyAqIFJldHVybiBUUlVFIGlmIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGZvciBzY3JlZW4gcG9zbiAib2ZmIiBkaWZmZXJzIGZyb20KKyAqIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGluICJ1OGNjIi4KKyAqLworICAgIHN0YXRpYyBpbnQKK3NjcmVlbl9jb21wX2RpZmZlcnMob2ZmLCB1OGNjKQorICAgIGludAkgICAgb2ZmOworICAgIGludAkgICAgKnU4Y2M7Cit7CisgICAgaW50CSAgICBpOworCisgICAgZm9yIChpID0gMDsgaSA8IFNjcmVlbl9tY287ICsraSkKKyAgICB7CisJaWYgKFNjcmVlbkxpbmVzQ1tpXVtvZmZdICE9ICh1OGNoYXJfVCl1OGNjW2ldKQorCSAgICByZXR1cm4gVFJVRTsKKwlpZiAodThjY1tpXSA9PSAwKQorCSAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorI2VuZGlmCisKIC8qCiAgKiBQdXQgc3RyaW5nICcqdGV4dCcgb24gdGhlIHNjcmVlbiBhdCBwb3NpdGlvbiAncm93JyBhbmQgJ2NvbCcsIHdpdGgKICAqIGF0dHJpYnV0ZXMgJ2F0dHInLCBhbmQgdXBkYXRlIFNjcmVlbkxpbmVzW10gYW5kIFNjcmVlbkF0dHJzW10uCkBAIC01ODQwLDEyICs1OTAxLDEyIEBACiAgICAgaW50CQltYnl0ZV9ibGVuID0gMTsKICAgICBpbnQJCW1ieXRlX2NlbGxzID0gMTsKICAgICBpbnQJCXU4YyA9IDA7Ci0gICAgaW50CQl1OGNfYzEgPSAwOwotICAgIGludAkJdThjX2MyID0gMDsKKyAgICBpbnQJCXU4Y2NbTUFYX01DT107CiAgICAgaW50CQljbGVhcl9uZXh0X2NlbGwgPSBGQUxTRTsKICMgaWZkZWYgRkVBVF9BUkFCSUMKICAgICBpbnQJCXByZXZfYyA9IDA7CQkvKiBwcmV2aW91cyBBcmFiaWMgY2hhcmFjdGVyICovCi0gICAgaW50CQlwYywgbmMsIG5jMSwgZHVtbXk7CisgICAgaW50CQlwYywgbmMsIG5jMTsKKyAgICBpbnQJCXBjY1tNQVhfTUNPXTsKICMgZW5kaWYKICNlbmRpZgogCkBAIC01ODcyLDEwICs1OTMzLDEwIEBACiAJICAgIGVsc2UJLyogZW5jX3V0ZjggKi8KIAkgICAgewogCQlpZiAobGVuID49IDApCi0JCSAgICB1OGMgPSB1dGZjX3B0cjJjaGFyX2xlbihwdHIsICZ1OGNfYzEsICZ1OGNfYzIsCisJCSAgICB1OGMgPSB1dGZjX3B0cjJjaGFyX2xlbihwdHIsIHU4Y2MsCiAJCQkJCQkgICAoaW50KSgodGV4dCArIGxlbikgLSBwdHIpKTsKIAkJZWxzZQotCQkgICAgdThjID0gdXRmY19wdHIyY2hhcihwdHIsICZ1OGNfYzEsICZ1OGNfYzIpOworCQkgICAgdThjID0gdXRmY19wdHIyY2hhcihwdHIsIHU4Y2MpOwogCQltYnl0ZV9jZWxscyA9IHV0Zl9jaGFyMmNlbGxzKHU4Yyk7CiAJCS8qIE5vbi1CTVAgY2hhcmFjdGVyOiBkaXNwbGF5IGFzID8gb3IgZnVsbHdpZHRoID8uICovCiAJCWlmICh1OGMgPj0gMHgxMDAwMCkKQEAgLTU4OTUsMTAgKzU5NTYsMTMgQEAKIAkJCW5jMSA9IE5VTDsKIAkJICAgIH0KIAkJICAgIGVsc2UKLQkJCW5jID0gdXRmY19wdHIyY2hhcihwdHIgKyBtYnl0ZV9ibGVuLCAmbmMxLCAmZHVtbXkpOworCQkgICAgeworCQkJbmMgPSB1dGZjX3B0cjJjaGFyKHB0ciArIG1ieXRlX2JsZW4sIHBjYyk7CisJCQluYzEgPSBwY2NbMF07CisJCSAgICB9CiAJCSAgICBwYyA9IHByZXZfYzsKIAkJICAgIHByZXZfYyA9IHU4YzsKLQkJICAgIHU4YyA9IGFyYWJpY19zaGFwZSh1OGMsICZjLCAmdThjX2MxLCBuYywgbmMxLCBwYyk7CisJCSAgICB1OGMgPSBhcmFiaWNfc2hhcGUodThjLCAmYywgJnU4Y2NbMF0sIG5jLCBuYzEsIHBjKTsKIAkJfQogCQllbHNlCiAJCSAgICBwcmV2X2MgPSB1OGM7CkBAIC01OTE1LDEwICs1OTc5LDggQEAKIAkJICAgICYmIGMgPT0gMHg4ZQogCQkgICAgJiYgU2NyZWVuTGluZXMyW29mZl0gIT0gcHRyWzFdKQogCQl8fCAoZW5jX3V0ZjgKLQkJICAgICYmIG1ieXRlX2JsZW4gPiAxCi0JCSAgICAmJiAoU2NyZWVuTGluZXNVQ1tvZmZdICE9IHU4YwotCQkJfHwgU2NyZWVuTGluZXNDMVtvZmZdICE9IHU4Y19jMQotCQkJfHwgU2NyZWVuTGluZXNDMltvZmZdICE9IHU4Y19jMikpCisJCSAgICAmJiAoU2NyZWVuTGluZXNVQ1tvZmZdICE9ICh1OGNoYXJfVCl1OGMKKwkJCXx8IHNjcmVlbl9jb21wX2RpZmZlcnMob2ZmLCB1OGNjKSkpCiAjZW5kaWYKIAkJfHwgU2NyZWVuQXR0cnNbb2ZmXSAhPSBhdHRyCiAJCXx8IGV4bW9kZV9hY3RpdmUKQEAgLTU5OTQsMTMgKzYwNTYsMTkgQEAKICNpZmRlZiBGRUFUX01CWVRFCiAJICAgIGlmIChlbmNfdXRmOCkKIAkgICAgewotCQlpZiAoYyA8IDB4ODAgJiYgdThjX2MxID09IDAgJiYgdThjX2MyID09IDApCisJCWlmIChjIDwgMHg4MCAmJiB1OGNjWzBdID09IDApCiAJCSAgICBTY3JlZW5MaW5lc1VDW29mZl0gPSAwOwogCQllbHNlCiAJCXsKKwkJICAgIGludAkgICAgaTsKKwogCQkgICAgU2NyZWVuTGluZXNVQ1tvZmZdID0gdThjOwotCQkgICAgU2NyZWVuTGluZXNDMVtvZmZdID0gdThjX2MxOwotCQkgICAgU2NyZWVuTGluZXNDMltvZmZdID0gdThjX2MyOworCQkgICAgZm9yIChpID0gMDsgaSA8IFNjcmVlbl9tY287ICsraSkKKwkJICAgIHsKKwkJCVNjcmVlbkxpbmVzQ1tpXVtvZmZdID0gdThjY1tpXTsKKwkJCWlmICh1OGNjW2ldID09IDApCisJCQkgICAgYnJlYWs7CisJCSAgICB9CiAJCX0KIAkJaWYgKG1ieXRlX2NlbGxzID09IDIpCiAJCXsKQEAgLTY3MTUsNyArNjc4Myw4IEBACiAJewogCSAgICBpZiAoU2NyZWVuTGluZXNbb2ZmXSAhPSBjCiAjaWZkZWYgRkVBVF9NQllURQotCQkgICAgfHwgKGVuY191dGY4ICYmIFNjcmVlbkxpbmVzVUNbb2ZmXSAhPSAoYyA+PSAweDgwID8gYyA6IDApKQorCQkgICAgfHwgKGVuY191dGY4ICYmIChpbnQpU2NyZWVuTGluZXNVQ1tvZmZdCisJCQkJCQkgICAgICAgIT0gKGMgPj0gMHg4MCA/IGMgOiAwKSkKICNlbmRpZgogCQkgICAgfHwgU2NyZWVuQXR0cnNbb2ZmXSAhPSBhdHRyCiAjaWYgZGVmaW5lZChGRUFUX0dVSSkgfHwgZGVmaW5lZChVTklYKQpAQCAtNjc1NSw4ICs2ODI0LDcgQEAKIAkJICAgIGlmIChjID49IDB4ODApCiAJCSAgICB7CiAJCQlTY3JlZW5MaW5lc1VDW29mZl0gPSBjOwotCQkJU2NyZWVuTGluZXNDMVtvZmZdID0gMDsKLQkJCVNjcmVlbkxpbmVzQzJbb2ZmXSA9IDA7CisJCQlTY3JlZW5MaW5lc0NbMF1bb2ZmXSA9IDA7CiAJCSAgICB9CiAJCSAgICBlbHNlCiAJCQlTY3JlZW5MaW5lc1VDW29mZl0gPSAwOwpAQCAtNjg0NSw5ICs2OTEzLDkgQEAKICAgICBzY2hhcl9UCSAgICAqbmV3X1NjcmVlbkxpbmVzOwogI2lmZGVmIEZFQVRfTUJZVEUKICAgICB1OGNoYXJfVAkgICAgKm5ld19TY3JlZW5MaW5lc1VDID0gTlVMTDsKLSAgICB1OGNoYXJfVAkgICAgKm5ld19TY3JlZW5MaW5lc0MxID0gTlVMTDsKLSAgICB1OGNoYXJfVAkgICAgKm5ld19TY3JlZW5MaW5lc0MyID0gTlVMTDsKKyAgICB1OGNoYXJfVAkgICAgKm5ld19TY3JlZW5MaW5lc0NbTUFYX01DT107CiAgICAgc2NoYXJfVAkgICAgKm5ld19TY3JlZW5MaW5lczIgPSBOVUxMOworICAgIGludAkJICAgIGk7CiAjZW5kaWYKICAgICBzYXR0cl9UCSAgICAqbmV3X1NjcmVlbkF0dHJzOwogICAgIHVuc2lnbmVkCSAgICAqbmV3X0xpbmVPZmZzZXQ7CkBAIC02ODcwLDYgKzY5MzgsNyBAQAogI2lmZGVmIEZFQVRfTUJZVEUKIAkJJiYgZW5jX3V0ZjggPT0gKFNjcmVlbkxpbmVzVUMgIT0gTlVMTCkKIAkJJiYgKGVuY19kYmNzID09IERCQ1NfSlBOVSkgPT0gKFNjcmVlbkxpbmVzMiAhPSBOVUxMKQorCQkmJiBwX21jbyA9PSBTY3JlZW5fbWNvCiAjZW5kaWYKIAkJKQogCSAgICB8fCBSb3dzID09IDAKQEAgLTY5MDcsMTMgKzY5NzYsMTMgQEAKICAgICBuZXdfU2NyZWVuTGluZXMgPSAoc2NoYXJfVCAqKWxhbGxvYygobG9uZ191KSgKIAkJCSAgICAgIChSb3dzICsgMSkgKiBDb2x1bW5zICogc2l6ZW9mKHNjaGFyX1QpKSwgRkFMU0UpOwogI2lmZGVmIEZFQVRfTUJZVEUKKyAgICB2aW1fbWVtc2V0KG5ld19TY3JlZW5MaW5lc0MsIDAsIHNpemVvZih1OGNoYXJfVCkgKiBNQVhfTUNPKTsKICAgICBpZiAoZW5jX3V0ZjgpCiAgICAgewogCW5ld19TY3JlZW5MaW5lc1VDID0gKHU4Y2hhcl9UICopbGFsbG9jKChsb25nX3UpKAogCQkJICAgICAoUm93cyArIDEpICogQ29sdW1ucyAqIHNpemVvZih1OGNoYXJfVCkpLCBGQUxTRSk7Ci0JbmV3X1NjcmVlbkxpbmVzQzEgPSAodThjaGFyX1QgKilsYWxsb2MoKGxvbmdfdSkoCi0JCQkgICAgIChSb3dzICsgMSkgKiBDb2x1bW5zICogc2l6ZW9mKHU4Y2hhcl9UKSksIEZBTFNFKTsKLQluZXdfU2NyZWVuTGluZXNDMiA9ICh1OGNoYXJfVCAqKWxhbGxvYygobG9uZ191KSgKKwlmb3IgKGkgPSAwOyBpIDwgcF9tY287ICsraSkKKwkgICAgbmV3X1NjcmVlbkxpbmVzQ1tpXSA9ICh1OGNoYXJfVCAqKWxhbGxvYygobG9uZ191KSgKIAkJCSAgICAgKFJvd3MgKyAxKSAqIENvbHVtbnMgKiBzaXplb2YodThjaGFyX1QpKSwgRkFMU0UpOwogICAgIH0KICAgICBpZiAoZW5jX2RiY3MgPT0gREJDU19KUE5VKQpAQCAtNjk0MCwxMCArNzAwOSwxNCBAQAogCX0KICAgICB9CiAKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgZm9yIChpID0gMDsgaSA8IHBfbWNvOyArK2kpCisJaWYgKG5ld19TY3JlZW5MaW5lc0NbaV0gPT0gTlVMTCkKKwkgICAgYnJlYWs7CisjZW5kaWYKICAgICBpZiAobmV3X1NjcmVlbkxpbmVzID09IE5VTEwKICNpZmRlZiBGRUFUX01CWVRFCi0JICAgIHx8IChlbmNfdXRmOCAmJiAobmV3X1NjcmVlbkxpbmVzVUMgPT0gTlVMTAotCQkgICB8fCBuZXdfU2NyZWVuTGluZXNDMSA9PSBOVUxMIHx8IG5ld19TY3JlZW5MaW5lc0MyID09IE5VTEwpKQorCSAgICB8fCAoZW5jX3V0ZjggJiYgKG5ld19TY3JlZW5MaW5lc1VDID09IE5VTEwgfHwgaSAhPSBwX21jbykpCiAJICAgIHx8IChlbmNfZGJjcyA9PSBEQkNTX0pQTlUgJiYgbmV3X1NjcmVlbkxpbmVzMiA9PSBOVUxMKQogI2VuZGlmCiAJICAgIHx8IG5ld19TY3JlZW5BdHRycyA9PSBOVUxMCkBAIC02OTY4LDEwICs3MDQxLDExIEBACiAjaWZkZWYgRkVBVF9NQllURQogCXZpbV9mcmVlKG5ld19TY3JlZW5MaW5lc1VDKTsKIAluZXdfU2NyZWVuTGluZXNVQyA9IE5VTEw7Ci0JdmltX2ZyZWUobmV3X1NjcmVlbkxpbmVzQzEpOwotCW5ld19TY3JlZW5MaW5lc0MxID0gTlVMTDsKLQl2aW1fZnJlZShuZXdfU2NyZWVuTGluZXNDMik7Ci0JbmV3X1NjcmVlbkxpbmVzQzIgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBwX21jbzsgKytpKQorCXsKKwkgICAgdmltX2ZyZWUobmV3X1NjcmVlbkxpbmVzQ1tpXSk7CisJICAgIG5ld19TY3JlZW5MaW5lc0NbaV0gPSBOVUxMOworCX0KIAl2aW1fZnJlZShuZXdfU2NyZWVuTGluZXMyKTsKIAluZXdfU2NyZWVuTGluZXMyID0gTlVMTDsKICNlbmRpZgpAQCAtNzAxMCw5ICs3MDg0LDkgQEAKIAkJewogCQkgICAgKHZvaWQpdmltX21lbXNldChuZXdfU2NyZWVuTGluZXNVQyArIG5ld19yb3cgKiBDb2x1bW5zLAogCQkJCSAgICAgICAwLCAoc2l6ZV90KUNvbHVtbnMgKiBzaXplb2YodThjaGFyX1QpKTsKLQkJICAgICh2b2lkKXZpbV9tZW1zZXQobmV3X1NjcmVlbkxpbmVzQzEgKyBuZXdfcm93ICogQ29sdW1ucywKLQkJCQkgICAgICAgMCwgKHNpemVfdClDb2x1bW5zICogc2l6ZW9mKHU4Y2hhcl9UKSk7Ci0JCSAgICAodm9pZCl2aW1fbWVtc2V0KG5ld19TY3JlZW5MaW5lc0MyICsgbmV3X3JvdyAqIENvbHVtbnMsCisJCSAgICBmb3IgKGkgPSAwOyBpIDwgcF9tY287ICsraSkKKwkJCSh2b2lkKXZpbV9tZW1zZXQobmV3X1NjcmVlbkxpbmVzQ1tpXQorCQkJCQkJCSAgKyBuZXdfcm93ICogQ29sdW1ucywKIAkJCQkgICAgICAgMCwgKHNpemVfdClDb2x1bW5zICogc2l6ZW9mKHU4Y2hhcl9UKSk7CiAJCX0KIAkJaWYgKGVuY19kYmNzID09IERCQ1NfSlBOVSkKQEAgLTcwMzAsMjMgKzcxMDQsMjQgQEAKIAkJCWxlbiA9IENvbHVtbnM7CiAjaWZkZWYgRkVBVF9NQllURQogCQkgICAgLyogV2hlbiBzd2l0Y2hpbmcgdG8gdXRmLTggZG9uJ3QgY29weSBjaGFyYWN0ZXJzLCB0aGV5Ci0JCSAgICAgKiBtYXkgYmUgaW52YWxpZCBub3cuICovCi0JCSAgICBpZiAoIShlbmNfdXRmOCAmJiBTY3JlZW5MaW5lc1VDID09IE5VTEwpKQorCQkgICAgICogbWF5IGJlIGludmFsaWQgbm93LiAgQWxzbyB3aGVuIHBfbWNvIGNoYW5nZXMuICovCisJCSAgICBpZiAoIShlbmNfdXRmOCAmJiBTY3JlZW5MaW5lc1VDID09IE5VTEwpCisJCQkJCQkgICAgICAgJiYgcF9tY28gPT0gU2NyZWVuX21jbykKICNlbmRpZgogCQkJbWNoX21lbW1vdmUobmV3X1NjcmVlbkxpbmVzICsgbmV3X0xpbmVPZmZzZXRbbmV3X3Jvd10sCiAJCQkJU2NyZWVuTGluZXMgKyBMaW5lT2Zmc2V0W29sZF9yb3ddLAogCQkJCShzaXplX3QpbGVuICogc2l6ZW9mKHNjaGFyX1QpKTsKICNpZmRlZiBGRUFUX01CWVRFCi0JCSAgICBpZiAoZW5jX3V0ZjggJiYgU2NyZWVuTGluZXNVQyAhPSBOVUxMKQorCQkgICAgaWYgKGVuY191dGY4ICYmIFNjcmVlbkxpbmVzVUMgIT0gTlVMTAorCQkJCQkJICAgICAgICYmIHBfbWNvID09IFNjcmVlbl9tY28pCiAJCSAgICB7CiAJCQltY2hfbWVtbW92ZShuZXdfU2NyZWVuTGluZXNVQyArIG5ld19MaW5lT2Zmc2V0W25ld19yb3ddLAogCQkJCVNjcmVlbkxpbmVzVUMgKyBMaW5lT2Zmc2V0W29sZF9yb3ddLAogCQkJCShzaXplX3QpbGVuICogc2l6ZW9mKHU4Y2hhcl9UKSk7Ci0JCQltY2hfbWVtbW92ZShuZXdfU2NyZWVuTGluZXNDMSArIG5ld19MaW5lT2Zmc2V0W25ld19yb3ddLAotCQkJCVNjcmVlbkxpbmVzQzEgKyBMaW5lT2Zmc2V0W29sZF9yb3ddLAotCQkJCShzaXplX3QpbGVuICogc2l6ZW9mKHU4Y2hhcl9UKSk7Ci0JCQltY2hfbWVtbW92ZShuZXdfU2NyZWVuTGluZXNDMiArIG5ld19MaW5lT2Zmc2V0W25ld19yb3ddLAotCQkJCVNjcmVlbkxpbmVzQzIgKyBMaW5lT2Zmc2V0W29sZF9yb3ddLAorCQkJZm9yIChpID0gMDsgaSA8IHBfbWNvOyArK2kpCisJCQkgICAgbWNoX21lbW1vdmUobmV3X1NjcmVlbkxpbmVzQ1tpXQorCQkJCQkJICAgICsgbmV3X0xpbmVPZmZzZXRbbmV3X3Jvd10sCisJCQkJU2NyZWVuTGluZXNDW2ldICsgTGluZU9mZnNldFtvbGRfcm93XSwKIAkJCQkoc2l6ZV90KWxlbiAqIHNpemVvZih1OGNoYXJfVCkpOwogCQkgICAgfQogCQkgICAgaWYgKGVuY19kYmNzID09IERCQ1NfSlBOVSAmJiBTY3JlZW5MaW5lczIgIT0gTlVMTCkKQEAgLTcwNjksOCArNzE0NCw5IEBACiAgICAgU2NyZWVuTGluZXMgPSBuZXdfU2NyZWVuTGluZXM7CiAjaWZkZWYgRkVBVF9NQllURQogICAgIFNjcmVlbkxpbmVzVUMgPSBuZXdfU2NyZWVuTGluZXNVQzsKLSAgICBTY3JlZW5MaW5lc0MxID0gbmV3X1NjcmVlbkxpbmVzQzE7Ci0gICAgU2NyZWVuTGluZXNDMiA9IG5ld19TY3JlZW5MaW5lc0MyOworICAgIGZvciAoaSA9IDA7IGkgPCBwX21jbzsgKytpKQorCVNjcmVlbkxpbmVzQ1tpXSA9IG5ld19TY3JlZW5MaW5lc0NbaV07CisgICAgU2NyZWVuX21jbyA9IHBfbWNvOwogICAgIFNjcmVlbkxpbmVzMiA9IG5ld19TY3JlZW5MaW5lczI7CiAjZW5kaWYKICAgICBTY3JlZW5BdHRycyA9IG5ld19TY3JlZW5BdHRyczsKQEAgLTcxMTgsMTMgKzcxOTQsMTUgQEAKICAgICB2b2lkCiBmcmVlX3NjcmVlbmxpbmVzKCkKIHsKLSAgICB2aW1fZnJlZShTY3JlZW5MaW5lcyk7CiAjaWZkZWYgRkVBVF9NQllURQorICAgIGludAkJaTsKKwogICAgIHZpbV9mcmVlKFNjcmVlbkxpbmVzVUMpOwotICAgIHZpbV9mcmVlKFNjcmVlbkxpbmVzQzEpOwotICAgIHZpbV9mcmVlKFNjcmVlbkxpbmVzQzIpOworICAgIGZvciAoaSA9IDA7IGkgPCBTY3JlZW5fbWNvOyArK2kpCisJdmltX2ZyZWUoU2NyZWVuTGluZXNDW2ldKTsKICAgICB2aW1fZnJlZShTY3JlZW5MaW5lczIpOwogI2VuZGlmCisgICAgdmltX2ZyZWUoU2NyZWVuTGluZXMpOwogICAgIHZpbV9mcmVlKFNjcmVlbkF0dHJzKTsKICAgICB2aW1fZnJlZShMaW5lT2Zmc2V0KTsKICAgICB2aW1fZnJlZShMaW5lV3JhcHMpOwpAQCAtNzI1MCwxMiArNzMyOCwxMyBAQAogIyBpZmRlZiBGRUFUX01CWVRFCiAgICAgaWYgKGVuY191dGY4KQogICAgIHsKKwlpbnQJaTsKKwogCW1jaF9tZW1tb3ZlKFNjcmVlbkxpbmVzVUMgKyBvZmZfdG8sIFNjcmVlbkxpbmVzVUMgKyBvZmZfZnJvbSwKIAkJd3AtPndfd2lkdGggKiBzaXplb2YodThjaGFyX1QpKTsKLQltY2hfbWVtbW92ZShTY3JlZW5MaW5lc0MxICsgb2ZmX3RvLCBTY3JlZW5MaW5lc0MxICsgb2ZmX2Zyb20sCi0JCXdwLT53X3dpZHRoICogc2l6ZW9mKHU4Y2hhcl9UKSk7Ci0JbWNoX21lbW1vdmUoU2NyZWVuTGluZXNDMiArIG9mZl90bywgU2NyZWVuTGluZXNDMiArIG9mZl9mcm9tLAotCQl3cC0+d193aWR0aCAqIHNpemVvZih1OGNoYXJfVCkpOworCWZvciAoaSA9IDA7IGkgPCBwX21jbzsgKytpKQorCSAgICBtY2hfbWVtbW92ZShTY3JlZW5MaW5lc0NbaV0gKyBvZmZfdG8sIFNjcmVlbkxpbmVzQ1tpXSArIG9mZl9mcm9tLAorCQkgICAgd3AtPndfd2lkdGggKiBzaXplb2YodThjaGFyX1QpKTsKICAgICB9CiAgICAgaWYgKGVuY19kYmNzID09IERCQ1NfSlBOVSkKIAltY2hfbWVtbW92ZShTY3JlZW5MaW5lczIgKyBvZmZfdG8sIFNjcmVlbkxpbmVzMiArIG9mZl9mcm9tLApkaWZmIC0tZ2l0IGEvc3JjL3NwZWxsLmMgYi9zcmMvc3BlbGwuYwppbmRleCBiYThlNjZhLi5mZTQ2MDA2IDEwMDY0NAotLS0gYS9zcmMvc3BlbGwuYworKysgYi9zcmMvc3BlbGwuYwpAQCAtMTE3LDYgKzExNywxMCBAQAogICogPHNlY3Rpb25lbmQ+CSAgMSBieXRlICAgIFNOX0VORAogICoKICAqCisgKiBzZWN0aW9uSUQgPT0gU05fSU5GTzogPGluZm90ZXh0PgorICogPGluZm90ZXh0PgkgTiBieXRlcyAgICBmcmVlIGZvcm1hdCB0ZXh0IHdpdGggc3BlbGwgZmlsZSBpbmZvICh2ZXJzaW9uLAorICoJCQkgICAgd2Vic2l0ZSwgZXRjKQorICoKICAqIHNlY3Rpb25JRCA9PSBTTl9SRUdJT046IDxyZWdpb25uYW1lPiAuLi4KICAqIDxyZWdpb25uYW1lPgkgMiBieXRlcyAgICBVcCB0byA4IHJlZ2lvbiBuYW1lczogY2EsIGF1LCBldGMuICBMb3dlciBjYXNlLgogICoJCQkgICAgRmlyc3QgPHJlZ2lvbm5hbWU+IGlzIHJlZ2lvbiAxLgpAQCAtMTg1LDcgKzE4OSw3IEBACiAgKiA8Y29tcG1heD4gICAgIDEgYnl0ZQkgICAgTWF4aW11bSBuciBvZiB3b3JkcyBpbiBjb21wb3VuZCB3b3JkLgogICogPGNvbXBtaW5sZW4+ICAxIGJ5dGUJICAgIE1pbmltYWwgd29yZCBsZW5ndGggZm9yIGNvbXBvdW5kaW5nLgogICogPGNvbXBzeWxtYXg+ICAxIGJ5dGUJICAgIE1heGltdW0gbnIgb2Ygc3lsbGFibGVzIGluIGNvbXBvdW5kIHdvcmQuCi0gKiA8Y29tcGZsYWdzPiAgIE4gYnl0ZXMgICAgRmxhZ3MgZnJvbSBDT01QT1VOREZMQUdTIGl0ZW1zLCBzZXBhcmF0ZWQgYnkKKyAqIDxjb21wZmxhZ3M+ICAgTiBieXRlcyAgICBGbGFncyBmcm9tIENPTVBPVU5EUlVMRSBpdGVtcywgc2VwYXJhdGVkIGJ5CiAgKgkJCSAgICBzbGFzaGVzLgogICoKICAqIHNlY3Rpb25JRCA9PSBTTl9OT0JSRUFLOiAoZW1wdHksIGl0cyBwcmVzZW5jZSBpcyBlbm91Z2gpCkBAIC0yOTAsNyArMjk0LDcgQEAKICAqLwogCiAjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU4xNikgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lONjQpCi0jIGluY2x1ZGUgPGlvLmg+CS8qIGZvciBsc2VlaygpLCBtdXN0IGJlIGJlZm9yZSB2aW0uaCAqLworIyBpbmNsdWRlICJ2aW1pby5oIgkvKiBmb3IgbHNlZWsoKSwgbXVzdCBiZSBiZWZvcmUgdmltLmggKi8KICNlbmRpZgogCiAjaW5jbHVkZSAidmltLmgiCkBAIC00MzEsNiArNDM1LDggQEAKICAgICBjaGFyX3UJKnNsX3BieXRzOwkvKiBwcmVmaXggdHJlZSB3b3JkIGJ5dGVzICovCiAgICAgaWR4X1QJKnNsX3BpZHhzOwkvKiBwcmVmaXggdHJlZSB3b3JkIGluZGV4ZXMgKi8KIAorICAgIGNoYXJfdQkqc2xfaW5mbzsJLyogaW5mb3RleHQgc3RyaW5nIG9yIE5VTEwgKi8KKwogICAgIGNoYXJfdQlzbF9yZWdpb25zWzE3XTsJLyogdGFibGUgd2l0aCB1cCB0byA4IHJlZ2lvbiBuYW1lcyBwbHVzIE5VTCAqLwogCiAgICAgY2hhcl91CSpzbF9taWR3b3JkOwkvKiBNSURXT1JEIHN0cmluZyBvciBOVUxMICovCkBAIC00NDAsNyArNDQ2LDcgQEAKICAgICBpbnQJCXNsX2NvbXBtYXg7CS8qIENPTVBPVU5ETUFYIChkZWZhdWx0OiBNQVhXTEVOKSAqLwogICAgIGludAkJc2xfY29tcG1pbmxlbjsJLyogQ09NUE9VTkRNSU4gKGRlZmF1bHQ6IDApICovCiAgICAgaW50CQlzbF9jb21wc3lsbWF4OwkvKiBDT01QT1VORFNZTE1BWCAoZGVmYXVsdDogTUFYV0xFTikgKi8KLSAgICByZWdwcm9nX1QJKnNsX2NvbXBwcm9nOwkvKiBDT01QT1VOREZMQUdTIHR1cm5lZCBpbnRvIGEgcmVnZXhwIHByb2dybQorICAgIHJlZ3Byb2dfVAkqc2xfY29tcHByb2c7CS8qIENPTVBPVU5EUlVMRSB0dXJuZWQgaW50byBhIHJlZ2V4cCBwcm9ncm0KIAkJCQkgKiAoTlVMTCB3aGVuIG5vIGNvbXBvdW5kaW5nKSAqLwogICAgIGNoYXJfdQkqc2xfY29tcHN0YXJ0ZmxhZ3M7IC8qIGZsYWdzIGZvciBmaXJzdCBjb21wb3VuZCB3b3JkICovCiAgICAgY2hhcl91CSpzbF9jb21wYWxsZmxhZ3M7IC8qIGFsbCBmbGFncyBmb3IgY29tcG91bmQgd29yZHMgKi8KQEAgLTUzNCw2ICs1NDAsNyBAQAogI2RlZmluZSBTTl9SRVBTQUwJMTIJLyogUkVQU0FMIGl0ZW1zIHNlY3Rpb24gKi8KICNkZWZpbmUgU05fV09SRFMJMTMJLyogY29tbW9uIHdvcmRzICovCiAjZGVmaW5lIFNOX05PU1BMSVRTVUdTCTE0CS8qIGRvbid0IHNwbGl0IHdvcmQgZm9yIHN1Z2dlc3Rpb25zICovCisjZGVmaW5lIFNOX0lORk8JCTE1CS8qIGluZm8gc2VjdGlvbiAqLwogI2RlZmluZSBTTl9FTkQJCTI1NQkvKiBlbmQgb2Ygc2VjdGlvbnMgKi8KIAogI2RlZmluZSBTTkZfUkVRVUlSRUQJMQkvKiA8c2VjdGlvbmZsYWdzPjogcmVxdWlyZWQgc2VjdGlvbiAqLwpAQCAtMTUyMCw3ICsxNTI3LDcgQEAKIAkJfQogCiAJCS8qIElmIHRoZSB3b3JkIGVuZHMgdGhlIHNlcXVlbmNlIG9mIGNvbXBvdW5kIGZsYWdzIG9mIHRoZQotCQkgKiB3b3JkcyBtdXN0IG1hdGNoIHdpdGggb25lIG9mIHRoZSBDT01QT1VOREZMQUdTIGl0ZW1zIGFuZAorCQkgKiB3b3JkcyBtdXN0IG1hdGNoIHdpdGggb25lIG9mIHRoZSBDT01QT1VORFJVTEUgaXRlbXMgYW5kCiAJCSAqIHRoZSBudW1iZXIgb2Ygc3lsbGFibGVzIG11c3Qgbm90IGJlIHRvbyBsYXJnZS4gKi8KIAkJbWlwLT5taV9jb21wZmxhZ3NbbWlwLT5taV9jb21wbGVuXSA9ICgodW5zaWduZWQpZmxhZ3MgPj4gMjQpOwogCQltaXAtPm1pX2NvbXBmbGFnc1ttaXAtPm1pX2NvbXBsZW4gKyAxXSA9IE5VTDsKQEAgLTIyODQsNiArMjI5MSw5IEBACiAJICAgIGJyZWFrOwogI2VuZGlmCiAJfQorI2lmZGVmIEZFQVRfQVVUT0NNRAorCWJyZWFrOworI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKHIgPT0gRkFJTCkKQEAgLTI0MzQsNiArMjQ0NCw5IEBACiAgICAgdmltX2ZyZWUobHAtPnNsX3ByZWZwcm9nKTsKICAgICBscC0+c2xfcHJlZnByb2cgPSBOVUxMOwogCisgICAgdmltX2ZyZWUobHAtPnNsX2luZm8pOworICAgIGxwLT5zbF9pbmZvID0gTlVMTDsKKwogICAgIHZpbV9mcmVlKGxwLT5zbF9taWR3b3JkKTsKICAgICBscC0+c2xfbWlkd29yZCA9IE5VTEw7CiAKQEAgLTI2MjAsNiArMjYzMywxMiBAQAogCXJlcyA9IDA7CiAJc3dpdGNoIChuKQogCXsKKwkgICAgY2FzZSBTTl9JTkZPOgorCQlscC0+c2xfaW5mbyA9IHJlYWRfc3RyaW5nKGZkLCBsZW4pOwkvKiA8aW5mb3RleHQ+ICovCisJCWlmIChscC0+c2xfaW5mbyA9PSBOVUxMKQorCQkgICAgZ290byBlbmRGQUlMOworCQlicmVhazsKKwogCSAgICBjYXNlIFNOX1JFR0lPTjoKIAkJcmVzID0gcmVhZF9yZWdpb25fc2VjdGlvbihmZCwgbHAsIGxlbik7CiAJCWJyZWFrOwpAQCAtMzM4Niw3ICszNDA1LDcgQEAKIAljID0gTUFYV0xFTjsKICAgICBzbGFuZy0+c2xfY29tcHN5bG1heCA9IGM7CiAKLSAgICAvKiBUdXJuIHRoZSBDT01QT1VOREZMQUdTIGl0ZW1zIGludG8gYSByZWdleHAgcGF0dGVybjoKKyAgICAvKiBUdXJuIHRoZSBDT01QT1VORFJVTEUgaXRlbXMgaW50byBhIHJlZ2V4cCBwYXR0ZXJuOgogICAgICAqICJhW2JjXS9hKmIrIiAtPiAiXlwoYVtiY11cfGEqYlwrXCkkIi4KICAgICAgKiBJbnNlcnRpbmcgYmFja3NsYXNoZXMgbWF5IGRvdWJsZSB0aGUgbGVuZ3RoLCAiXlwoXCkkPE51bD4iIGlzIDcgYnl0ZXMuCiAgICAgICogQ29udmVyc2lvbiB0byB1dGYtOCBtYXkgZG91YmxlIHRoZSBzaXplLiAqLwpAQCAtNDcxMSw2ICs0NzMwLDcgQEAKICAgICBpbnQJCXNpX21lbXRvdDsJLyogcnVudGltZSBtZW1vcnkgdXNlZCAqLwogICAgIGludAkJc2lfdmVyYm9zZTsJLyogdmVyYm9zZSBtZXNzYWdlcyAqLwogICAgIGludAkJc2lfbXNnX2NvdW50OwkvKiBudW1iZXIgb2Ygd29yZHMgYWRkZWQgc2luY2UgbGFzdCBtZXNzYWdlICovCisgICAgY2hhcl91CSpzaV9pbmZvOwkvKiBpbmZvIHRleHQgY2hhcnMgb3IgTlVMTCAgKi8KICAgICBpbnQJCXNpX3JlZ2lvbl9jb3VudDsgLyogbnVtYmVyIG9mIHJlZ2lvbnMgc3VwcG9ydGVkICgxIHdoZW4gdGhlcmUKIAkJCQkgICAgYXJlIG5vIHJlZ2lvbnMpICovCiAgICAgY2hhcl91CXNpX3JlZ2lvbl9uYW1lWzE2XTsgLyogcmVnaW9uIG5hbWVzOyB1c2VkIG9ubHkgaWYKQEAgLTQ3NDMsNiArNDc2Myw3IEBACiB9IHNwZWxsaW5mb19UOwogCiBzdGF0aWMgYWZmZmlsZV9UICpzcGVsbF9yZWFkX2FmZiBfX0FSR1MoKHNwZWxsaW5mb19UICpzcGluLCBjaGFyX3UgKmZuYW1lKSk7CitzdGF0aWMgaW50IHNwZWxsX2luZm9faXRlbSBfX0FSR1MoKGNoYXJfdSAqcykpOwogc3RhdGljIHVuc2lnbmVkIGFmZml0ZW0yZmxhZyBfX0FSR1MoKGludCBmbGFndHlwZSwgY2hhcl91ICppdGVtLCBjaGFyX3UJKmZuYW1lLCBpbnQgbG51bSkpOwogc3RhdGljIHVuc2lnbmVkIGdldF9hZmZpdGVtIF9fQVJHUygoaW50IGZsYWd0eXBlLCBjaGFyX3UgKipwcCkpOwogc3RhdGljIHZvaWQgcHJvY2Vzc19jb21wZmxhZ3MgX19BUkdTKChzcGVsbGluZm9fVCAqc3BpbiwgYWZmZmlsZV9UICphZmYsIGNoYXJfdSAqY29tcGZsYWdzKSk7CkBAIC00OTM2LDcgKzQ5NTcsNyBAQAogICAgIGludAkJY29tcG1pbmxlbiA9IDA7CQkvKiBDT01QT1VORE1JTiB2YWx1ZSAqLwogICAgIGludAkJY29tcHN5bG1heCA9IDA7CQkvKiBDT01QT1VORFNZTE1BWCB2YWx1ZSAqLwogICAgIGludAkJY29tcG1heCA9IDA7CQkvKiBDT01QT1VORE1BWCB2YWx1ZSAqLwotICAgIGNoYXJfdQkqY29tcGZsYWdzID0gTlVMTDsJLyogQ09NUE9VTkRGTEFHIGFuZCBDT01QT1VOREZMQUdTCisgICAgY2hhcl91CSpjb21wZmxhZ3MgPSBOVUxMOwkvKiBDT01QT1VOREZMQUcgYW5kIENPTVBPVU5EUlVMRQogCQkJCQkgICBjb25jYXRlbmF0ZWQgKi8KICAgICBjaGFyX3UJKm1pZHdvcmQgPSBOVUxMOwkvKiBNSURXT1JEIHZhbHVlICovCiAgICAgY2hhcl91CSpzeWxsYWJsZSA9IE5VTEw7CS8qIFNZTExBQkxFIHZhbHVlICovCkBAIC01MDIzLDggKzUwNDQsMTMgQEAKIAkgICAgaWYgKGl0ZW1jbnQgPT0gTUFYSVRFTUNOVCkJICAgIC8qIHRvbyBtYW55IGl0ZW1zICovCiAJCWJyZWFrOwogCSAgICBpdGVtc1tpdGVtY250KytdID0gcDsKLQkgICAgd2hpbGUgKCpwID4gJyAnKQkgICAgLyogc2tpcCB1bnRpbCB3aGl0ZSBzcGFjZSBvciBDUi9OTCAqLwotCQkrK3A7CisJICAgIC8qIEEgZmV3IGl0ZW1zIGhhdmUgYXJiaXRyYXJ5IHRleHQgYXJndW1lbnQsIGRvbid0IHNwbGl0IHRoZW0uICovCisJICAgIGlmIChpdGVtY250ID09IDIgJiYgc3BlbGxfaW5mb19pdGVtKGl0ZW1zWzBdKSkKKwkJd2hpbGUgKCpwID49ICcgJyB8fCAqcCA9PSBUQUIpICAgIC8qIHNraXAgdW50aWwgQ1IvTkwgKi8KKwkJICAgICsrcDsKKwkgICAgZWxzZQorCQl3aGlsZSAoKnAgPiAnICcpICAgIC8qIHNraXAgdW50aWwgd2hpdGUgc3BhY2Ugb3IgQ1IvTkwgKi8KKwkJICAgICsrcDsKIAkgICAgaWYgKCpwID09IE5VTCkKIAkJYnJlYWs7CiAJICAgICpwKysgPSBOVUw7CkBAIC01MDczLDYgKzUwOTksMjUgQEAKIAkJICAgIHNtc2coKGNoYXJfdSAqKV8oIkZMQUcgYWZ0ZXIgdXNpbmcgZmxhZ3MgaW4gJXMgbGluZSAlZDogJXMiKSwKIAkJCSAgICBmbmFtZSwgbG51bSwgaXRlbXNbMV0pOwogCSAgICB9CisJICAgIGVsc2UgaWYgKHNwZWxsX2luZm9faXRlbShpdGVtc1swXSkpCisJICAgIHsKKwkJICAgIHAgPSAoY2hhcl91ICopZ2V0cm9vbShzcGluLAorCQkJICAgIChzcGluLT5zaV9pbmZvID09IE5VTEwgPyAwIDogU1RSTEVOKHNwaW4tPnNpX2luZm8pKQorCQkJICAgICsgU1RSTEVOKGl0ZW1zWzBdKQorCQkJICAgICsgU1RSTEVOKGl0ZW1zWzFdKSArIDMsIEZBTFNFKTsKKwkJICAgIGlmIChwICE9IE5VTEwpCisJCSAgICB7CisJCQlpZiAoc3Bpbi0+c2lfaW5mbyAhPSBOVUxMKQorCQkJeworCQkJICAgIFNUUkNQWShwLCBzcGluLT5zaV9pbmZvKTsKKwkJCSAgICBTVFJDQVQocCwgIlxuIik7CisJCQl9CisJCQlTVFJDQVQocCwgaXRlbXNbMF0pOworCQkJU1RSQ0FUKHAsICIgIik7CisJCQlTVFJDQVQocCwgaXRlbXNbMV0pOworCQkJc3Bpbi0+c2lfaW5mbyA9IHA7CisJCSAgICB9CisJICAgIH0KIAkgICAgZWxzZSBpZiAoU1RSQ01QKGl0ZW1zWzBdLCAiTUlEV09SRCIpID09IDAgJiYgaXRlbWNudCA9PSAyCiAJCQkJCQkJICAgJiYgbWlkd29yZCA9PSBOVUxMKQogCSAgICB7CkBAIC01MTI1LDcgKzUxNzAsNyBAQAogCSAgICBlbHNlIGlmIChTVFJDTVAoaXRlbXNbMF0sICJDT01QT1VOREZMQUciKSA9PSAwICYmIGl0ZW1jbnQgPT0gMgogCQkJCQkJCSAmJiBjb21wZmxhZ3MgPT0gTlVMTCkKIAkgICAgewotCQkvKiBUdXJuIGZsYWcgImMiIGludG8gQ09NUE9VTkRGTEFHUyBjb21wYXRpYmxlIHN0cmluZyAiYysiLAorCQkvKiBUdXJuIGZsYWcgImMiIGludG8gQ09NUE9VTkRSVUxFIGNvbXBhdGlibGUgc3RyaW5nICJjKyIsCiAJCSAqICJOYSIgaW50byAiTmErIiwgIjEyMzQiIGludG8gIjEyMzQrIi4gKi8KIAkJcCA9IGdldHJvb20oc3BpbiwgU1RSTEVOKGl0ZW1zWzFdKSArIDIsIEZBTFNFKTsKIAkJaWYgKHAgIT0gTlVMTCkKQEAgLTUxMzUsNyArNTE4MCw3IEBACiAJCSAgICBjb21wZmxhZ3MgPSBwOwogCQl9CiAJICAgIH0KLQkgICAgZWxzZSBpZiAoU1RSQ01QKGl0ZW1zWzBdLCAiQ09NUE9VTkRGTEFHUyIpID09IDAgJiYgaXRlbWNudCA9PSAyKQorCSAgICBlbHNlIGlmIChTVFJDTVAoaXRlbXNbMF0sICJDT01QT1VORFJVTEUiKSA9PSAwICYmIGl0ZW1jbnQgPT0gMikKIAkgICAgewogCQkvKiBDb25jYXRlbmF0ZSB0aGlzIHN0cmluZyB0byBwcmV2aW91c2x5IGRlZmluZWQgb25lcywgdXNpbmcgYQogCQkgKiBzbGFzaCB0byBzZXBhcmF0ZSB0aGVtLiAqLwpAQCAtNTcyNiw2ICs1NzcxLDIxIEBACiB9CiAKIC8qCisgKiBSZXR1cm4gVFJVRSBpZiAicyIgaXMgdGhlIG5hbWUgb2YgYW4gaW5mbyBpdGVtIGluIHRoZSBhZmZpeCBmaWxlLgorICovCisgICAgc3RhdGljIGludAorc3BlbGxfaW5mb19pdGVtKHMpCisgICAgY2hhcl91CSpzOworeworICAgIHJldHVybiBTVFJDTVAocywgIk5BTUUiKSA9PSAwCisJfHwgU1RSQ01QKHMsICJIT01FIikgPT0gMAorCXx8IFNUUkNNUChzLCAiVkVSU0lPTiIpID09IDAKKwl8fCBTVFJDTVAocywgIkFVVEhPUiIpID09IDAKKwl8fCBTVFJDTVAocywgIkVNQUlMIikgPT0gMAorCXx8IFNUUkNNUChzLCAiQ09QWVJJR0hUIikgPT0gMDsKK30KKworLyoKICAqIFR1cm4gYW4gYWZmaXggZmxhZyBuYW1lIGludG8gYSBudW1iZXIsIGFjY29yZGluZyB0byB0aGUgRkxBRyB0eXBlLgogICogcmV0dXJucyB6ZXJvIGZvciBmYWlsdXJlLgogICovCkBAIC03MzY2LDYgKzc0MjYsMTQgQEAKIAlwdXRjKChpbnQpKG5yID4+IChpICogOCkpLCBmZCk7CiB9CiAKKyNpZmRlZiBfTVNDX1ZFUgorIyBpZiAoX01TQ19WRVIgPD0gMTIwMCkKKy8qIFRoaXMgbGluZSBpcyByZXF1aXJlZCBmb3IgVkM2IHdpdGhvdXQgdGhlIHNlcnZpY2UgcGFjay4gIEFsc28gc2VlIHRoZQorICogbWF0Y2hpbmcgI3ByYWdtYSBiZWxvdy4gKi8KKy8qICMgcHJhZ21hIG9wdGltaXplKCIiLCBvZmYpICovCisjIGVuZGlmCisjZW5kaWYKKwogLyoKICAqIFdyaXRlIHNwaW4tPnNpX3N1Z3RpbWUgdG8gZmlsZSAiZmQiLgogICovCkBAIC03MzkwLDYgKzc0NTgsMTIgQEAKIAl9CiB9CiAKKyNpZmRlZiBfTVNDX1ZFUgorIyBpZiAoX01TQ19WRVIgPD0gMTIwMCkKKy8qICMgcHJhZ21hIG9wdGltaXplKCIiLCBvbikgKi8KKyMgZW5kaWYKKyNlbmRpZgorCiBzdGF0aWMgaW50CiAjaWZkZWYgX19CT1JMQU5EQ19fCiBfUlRMRU5UUllGCkBAIC03NDU1LDYgKzc1MjksMTcgQEAKICAgICAgKiA8U0VDVElPTlM+OiA8c2VjdGlvbj4gLi4uIDxzZWN0aW9uZW5kPgogICAgICAqLwogCisgICAgLyogU05fSU5GTzogPGluZm90ZXh0PiAqLworICAgIGlmIChzcGluLT5zaV9pbmZvICE9IE5VTEwpCisgICAgeworCXB1dGMoU05fSU5GTywgZmQpOwkJCQkvKiA8c2VjdGlvbklEPiAqLworCXB1dGMoMCwgZmQpOwkJCQkJLyogPHNlY3Rpb25mbGFncz4gKi8KKworCWkgPSBTVFJMRU4oc3Bpbi0+c2lfaW5mbyk7CisJcHV0X2J5dGVzKGZkLCAobG9uZ191KWksIDQpOwkJCS8qIDxzZWN0aW9ubGVuPiAqLworCWZ3cml0ZShzcGluLT5zaV9pbmZvLCAoc2l6ZV90KWksIChzaXplX3QpMSwgZmQpOyAvKiA8aW5mb3RleHQ+ICovCisgICAgfQorCiAgICAgLyogU05fUkVHSU9OOiA8cmVnaW9ubmFtZT4gLi4uCiAgICAgICogV3JpdGUgdGhlIHJlZ2lvbiBuYW1lcyBvbmx5IGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUuICovCiAgICAgaWYgKHNwaW4tPnNpX3JlZ2lvbl9jb3VudCA+IDEpCkBAIC0xNDgyMyw2ICsxNDkwOCwzOCBAQAogfQogI2VuZGlmCiAKKy8qCisgKiAiOnNwZWxsaW5mbyIKKyAqLworLypBUkdTVVNFRCovCisgICAgdm9pZAorZXhfc3BlbGxpbmZvKGVhcCkKKyAgICBleGFyZ19UICplYXA7Cit7CisgICAgaW50CQlscGk7CisgICAgbGFuZ3BfVAkqbHA7CisgICAgY2hhcl91CSpwOworCisgICAgaWYgKG5vX3NwZWxsX2NoZWNraW5nKGN1cndpbikpCisJcmV0dXJuOworCisgICAgbXNnX3N0YXJ0KCk7CisgICAgZm9yIChscGkgPSAwOyBscGkgPCBjdXJidWYtPmJfbGFuZ3AuZ2FfbGVuICYmICFnb3RfaW50OyArK2xwaSkKKyAgICB7CisJbHAgPSBMQU5HUF9FTlRSWShjdXJidWYtPmJfbGFuZ3AsIGxwaSk7CisJbXNnX3B1dHMoKGNoYXJfdSAqKSJmaWxlOiAiKTsKKwltc2dfcHV0cyhscC0+bHBfc2xhbmctPnNsX2ZuYW1lKTsKKwltc2dfcHV0Y2hhcignXG4nKTsKKwlwID0gbHAtPmxwX3NsYW5nLT5zbF9pbmZvOworCWlmIChwICE9IE5VTEwpCisJeworCSAgICBtc2dfcHV0cyhwKTsKKwkgICAgbXNnX3B1dGNoYXIoJ1xuJyk7CisJfQorICAgIH0KKyAgICBtc2dfZW5kKCk7Cit9CisKICNkZWZpbmUgRFVNUEZMQUdfS0VFUENBU0UgICAxCS8qIHJvdW5kIDI6IGtlZXAtY2FzZSB0cmVlICovCiAjZGVmaW5lIERVTVBGTEFHX0NPVU5UCSAgICAyCS8qIGluY2x1ZGUgd29yZCBjb3VudCAqLwogI2RlZmluZSBEVU1QRkxBR19JQ0FTRQkgICAgNAkvKiBpZ25vcmUgY2FzZSB3aGVuIGZpbmRpbmcgbWF0Y2hlcyAqLwpAQCAtMTQ5MDIsOSArMTUwMTksOSBAQAogCQlkdW1wZmxhZ3MgfD0gRFVNUEZMQUdfT05FQ0FQOwogCSAgICBlbHNlIGlmIChuID09IFdGX0FMTENBUAogI2lmZGVmIEZFQVRfTUJZVEUKLQkJICAgICYmIFNUUkxFTihwYXQpID4gbWJfcHRyMmxlbihwYXQpCisJCSAgICAmJiAoaW50KVNUUkxFTihwYXQpID4gbWJfcHRyMmxlbihwYXQpCiAjZWxzZQotCQkgICAgJiYgU1RSTEVOKHBhdCkgPiAxCisJCSAgICAmJiAoaW50KVNUUkxFTihwYXQpID4gMQogI2VuZGlmCiAJCSAgICApCiAJCWR1bXBmbGFncyB8PSBEVU1QRkxBR19BTExDQVA7CmRpZmYgLS1naXQgYS9zcmMvdGFnLmMgYi9zcmMvdGFnLmMKaW5kZXggNjU3YzQ0Ni4uNTU2ZjhjNSAxMDA2NDQKLS0tIGEvc3JjL3RhZy5jCisrKyBiL3NyYy90YWcuYwpAQCAtMTIsNyArMTIsNyBAQAogICovCiAKICNpZiBkZWZpbmVkIE1TRE9TIHx8IGRlZmluZWQgV0lOMzIgfHwgZGVmaW5lZChfV0lONjQpCi0jIGluY2x1ZGUgPGlvLmg+CS8qIGZvciBsc2VlaygpLCBtdXN0IGJlIGJlZm9yZSB2aW0uaCAqLworIyBpbmNsdWRlICJ2aW1pby5oIgkvKiBmb3IgbHNlZWsoKSwgbXVzdCBiZSBiZWZvcmUgdmltLmggKi8KICNlbmRpZgogCiAjaW5jbHVkZSAidmltLmgiCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NTguaW4gYi9zcmMvdGVzdGRpci90ZXN0NTguaW4KaW5kZXggY2I4OTFhYy4uN2RiNmE5ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3RkaXIvdGVzdDU4LmluCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q1OC5pbgpAQCAtMzkwLDcgKzM5MCw3IEBACiBTRVQgSVNPODg1OS0xCiAKIENPTVBPVU5ETUlOIDMKLUNPTVBPVU5ERkxBR1MgbSoKK0NPTVBPVU5EUlVMRSBtKgogTkVFRENPTVBPVU5EIHgKIDNhZmZlbmQKIApAQCAtNDE2LDkgKzQxNiw5IEBACiBMT1cgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t//CiBVUFAgIMDBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3t//CiAKLUNPTVBPVU5ERkxBR1MgbSsKLUNPTVBPVU5ERkxBR1Mgc20qZQotQ09NUE9VTkRGTEFHUyBzbSsKK0NPTVBPVU5EUlVMRSBtKworQ09NUE9VTkRSVUxFIHNtKmUKK0NPTVBPVU5EUlVMRSBzbSsKIENPTVBPVU5ETUlOIDMKIENPTVBPVU5ETUFYIDMKIApAQCAtNDgzLDcgKzQ4Myw3IEBACiAKIE5FRURBRkZJWCAhIQogCi1DT01QT1VOREZMQUdTIHNzbW0qZWUKK0NPTVBPVU5EUlVMRSBzc21tKmVlCiAKIE5FRURDT01QT1VORCB4eAogCkBAIC01MjIsNyArNTIyLDcgQEAKIAogTkVFREFGRklYIEEhCiAKLUNPTVBPVU5ERkxBR1Mgc01tKkVlCitDT01QT1VORFJVTEUgc01tKkVlCiAKIE5FRURDT01QT1VORCBYeAogCkBAIC01NjEsNyArNTYxLDcgQEAKIAogTkVFREFGRklYIDk5OTkKIAotQ09NUE9VTkRGTEFHUyAyLDc3KjEyMworQ09NUE9VTkRSVUxFIDIsNzcqMTIzCiAKIE5FRURDT01QT1VORCAxCiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q1OS5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3Q1OS5pbgppbmRleCAzNjgxOTFjLi5kOGUwYTk3IDEwMDY0NAotLS0gYS9zcmMvdGVzdGRpci90ZXN0NTkuaW4KKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDU5LmluCkBAIC0zOTQsNyArMzk0LDcgQEAKIFNFVCBJU084ODU5LTEKIAogQ09NUE9VTkRNSU4gMwotQ09NUE9VTkRGTEFHUyBtKgorQ09NUE9VTkRSVUxFIG0qCiBORUVEQ09NUE9VTkQgeAogM2FmZmVuZAogCkBAIC00MjAsOSArNDIwLDkgQEAKIExPVyAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3/8KIFVQUCAgwMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbY2drb3N3e3/8KIAotQ09NUE9VTkRGTEFHUyBtKwotQ09NUE9VTkRGTEFHUyBzbSplCi1DT01QT1VOREZMQUdTIHNtKworQ09NUE9VTkRSVUxFIG0rCitDT01QT1VORFJVTEUgc20qZQorQ09NUE9VTkRSVUxFIHNtKwogQ09NUE9VTkRNSU4gMwogQ09NUE9VTkRNQVggMwogCkBAIC00OTAsNyArNDkwLDcgQEAKIAogTkVFREFGRklYICEhCiAKLUNPTVBPVU5ERkxBR1Mgc3NtbSplZQorQ09NUE9VTkRSVUxFIHNzbW0qZWUKIAogTkVFRENPTVBPVU5EIHh4CiAKQEAgLTUyOSw3ICs1MjksNyBAQAogCiBORUVEQUZGSVggQSEKIAotQ09NUE9VTkRGTEFHUyBzTW0qRWUKK0NPTVBPVU5EUlVMRSBzTW0qRWUKIAogTkVFRENPTVBPVU5EIFh4CiAKQEAgLTU3Miw3ICs1NzIsNyBAQAogCiBORUVEQUZGSVggOTk5OQogCi1DT01QT1VOREZMQUdTIDIsNzcqMTIzCitDT01QT1VORFJVTEUgMiw3NyoxMjMKIAogTkVFRENPTVBPVU5EIDEKIApkaWZmIC0tZ2l0IGEvc3JjL3VpLmMgYi9zcmMvdWkuYwppbmRleCBkMTAxM2VmLi4zNGZiM2Q3IDEwMDY0NAotLS0gYS9zcmMvdWkuYworKysgYi9zcmMvdWkuYwpAQCAtMTE3Myw3ICsxMTczLDcgQEAKICAgICBpZiAoZW5jX2RiY3MgIT0gMCkKIAlsZW4gKj0gMjsJLyogbWF4LiAyIGJ5dGVzIHBlciBkaXNwbGF5IGNlbGwgKi8KICAgICBlbHNlIGlmIChlbmNfdXRmOCkKLQlsZW4gKj0gOTsJLyogbWF4LiAzIGJ5dGVzIHBlciBkaXNwbGF5IGNlbGwgKyAyIGNvbXBvc2luZyBjaGFycyAqLworCWxlbiAqPSBNQl9NQVhCWVRFUzsKICNlbmRpZgogICAgIGJ1ZmZlciA9IGxhbGxvYygobG9uZ191KWxlbiwgVFJVRSk7CiAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQkgICAgLyogb3V0IG9mIG1lbW9yeSAqLwpAQCAtMTIzNCw2ICsxMjM0LDcgQEAKIAkgICAgZWxzZSBpZiAoZW5jX3V0ZjgpCiAJICAgIHsKIAkJaW50CW9mZjsKKwkJaW50CWk7CiAKIAkJb2ZmID0gTGluZU9mZnNldFtyb3ddOwogCQlmb3IgKGkgPSBzdGFydF9jb2w7IGkgPCBlbmRfY29sOyArK2kpCkBAIC0xMjQ1LDE0ICsxMjQ2LDEzIEBACiAJCSAgICBlbHNlCiAJCSAgICB7CiAJCQlidWZwICs9IHV0Zl9jaGFyMmJ5dGVzKFNjcmVlbkxpbmVzVUNbb2ZmICsgaV0sIGJ1ZnApOwotCQkJaWYgKFNjcmVlbkxpbmVzQzFbb2ZmICsgaV0gIT0gMCkKKwkJCWZvciAoaSA9IDA7IGkgPCBTY3JlZW5fbWNvOyArK2kpCiAJCQl7Ci0JCQkgICAgLyogQWRkIG9uZSBvciB0d28gY29tcG9zaW5nIGNoYXJhY3RlcnMuICovCi0JCQkgICAgYnVmcCArPSB1dGZfY2hhcjJieXRlcyhTY3JlZW5MaW5lc0MxW29mZiArIGldLAorCQkJICAgIC8qIEFkZCBhIGNvbXBvc2luZyBjaGFyYWN0ZXIuICovCisJCQkgICAgaWYgKFNjcmVlbkxpbmVzQ1tpXVtvZmYgKyBpXSA9PSAwKQorCQkJCWJyZWFrOworCQkJICAgIGJ1ZnAgKz0gdXRmX2NoYXIyYnl0ZXMoU2NyZWVuTGluZXNDW2ldW29mZiArIGldLAogCQkJCQkJCQkJYnVmcCk7Ci0JCQkgICAgaWYgKFNjcmVlbkxpbmVzQzJbb2ZmICsgaV0gIT0gMCkKLQkJCQlidWZwICs9IHV0Zl9jaGFyMmJ5dGVzKFNjcmVlbkxpbmVzQzJbb2ZmICsgaV0sCi0JCQkJCWJ1ZnApOwogCQkJfQogCQkgICAgfQogCQkgICAgLyogU2tpcCByaWdodCBoYWx2ZSBvZiBkb3VibGUtd2lkZSBjaGFyYWN0ZXIuICovCmRpZmYgLS1naXQgYS9zcmMvdmVyc2lvbi5oIGIvc3JjL3ZlcnNpb24uaAppbmRleCA1YzI4OGFhLi4xMzRlOGY1IDEwMDY0NAotLS0gYS9zcmMvdmVyc2lvbi5oCisrKyBiL3NyYy92ZXJzaW9uLmgKQEAgLTM2LDUgKzM2LDUgQEAKICNkZWZpbmUgVklNX1ZFUlNJT05fTk9ET1QJInZpbTcwYWEiCiAjZGVmaW5lIFZJTV9WRVJTSU9OX1NIT1JUCSI3LjBhYSIKICNkZWZpbmUgVklNX1ZFUlNJT05fTUVESVVNCSI3LjBhYSBBTFBIQSIKLSNkZWZpbmUgVklNX1ZFUlNJT05fTE9ORwkiVklNIC0gVmkgSU1wcm92ZWQgNy4wYWEgQUxQSEEgKDIwMDYgTWFyIDQpIgotI2RlZmluZSBWSU1fVkVSU0lPTl9MT05HX0RBVEUJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGFhIEFMUEhBICgyMDA2IE1hciA0LCBjb21waWxlZCAiCisjZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkcJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGFhIEFMUEhBICgyMDA2IE1hciA2KSIKKyNkZWZpbmUgVklNX1ZFUlNJT05fTE9OR19EQVRFCSJWSU0gLSBWaSBJTXByb3ZlZCA3LjBhYSBBTFBIQSAoMjAwNiBNYXIgNiwgY29tcGlsZWQgIgpkaWZmIC0tZ2l0IGEvc3JjL3ZpbS5oIGIvc3JjL3ZpbS5oCmluZGV4IDNhYmQ2NTkuLmZmNTc1NjEgMTAwNjQ0Ci0tLSBhL3NyYy92aW0uaAorKysgYi9zcmMvdmltLmgKQEAgLTkzLDYgKzkzLDEyIEBACiAjIGVuZGlmCiAjZW5kaWYKIAorLyogVmlzdWFsIFN0dWRpbyAyMDA1IGhhcyAnZGVwcmVjYXRlZCcgbWFueSBvZiB0aGUgc3RhbmRhcmQgQ1JUIGZ1bmN0aW9ucyAqLworI2lmIF9NU0NfVkVSID49IDE0MDAKKyMgZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURQorIyBkZWZpbmUgX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURQorI2VuZGlmCisKICNpZiBkZWZpbmVkKEZFQVRfR1VJX1czMikgfHwgZGVmaW5lZChGRUFUX0dVSV9XMTYpCiAjIGRlZmluZSBGRUFUX0dVSV9NU1dJTgogI2VuZGlmCkBAIC0zNTgsMTIgKzM2NCwyMCBAQAogCiAvKgogICogVGhlIHU4Y2hhcl9UIGNhbiBob2xkIG9uZSBkZWNvZGVkIFVURi04IGNoYXJhY3Rlci4KLSAqIFZpbSBhbHdheXMgdXNlIGFuIGludCAoMzIgYml0cykgZm9yIGNoYXJhY3RlcnMgbW9zdCBwbGFjZXMsIHNvIHRoYXQgd2UgY2FuCi0gKiBoYW5kbGUgMzIgYml0IGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUuICB1OGNoYXJfVCBpcyBvbmx5IHVzZWQgZm9yCi0gKiBkaXNwbGF5aW5nLiAgVGhhdCBzaG91bGQgYmUgZW5vdWdoLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGZvbnQgZm9yID4gMTYgYml0cy4KKyAqIFdlIG5vcm1hbGx5IHVzZSAzMiBiaXRzIG5vdywgc2luY2Ugc29tZSBBc2lhbiBjaGFyYWN0ZXJzIGRvbid0IGZpdCBpbiAxNgorICogYml0cy4gIHU4Y2hhcl9UIGlzIG9ubHkgdXNlZCBmb3IgZGlzcGxheWluZywgaXQgY291bGQgYmUgMTYgYml0cyB0byBzYXZlCisgKiBtZW1vcnkuCiAgKi8KICNpZmRlZiBGRUFUX01CWVRFCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IHU4Y2hhcl9UOworIyBpZmRlZiBVTklDT0RFMTYKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdThjaGFyX1Q7ICAgIC8qIHNob3J0IHNob3VsZCBiZSAxNiBiaXRzICovCisjIGVsc2UKKyMgIGlmIFNJWkVPRl9JTlQgPj0gNAordHlwZWRlZiB1bnNpZ25lZCBpbnQgdThjaGFyX1Q7CSAgICAvKiBpbnQgaXMgMzIgYml0cyAqLworIyAgZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIHU4Y2hhcl9UOwkgICAgLyogbG9uZyBzaG91bGQgYmUgMzIgYml0cyBvciBtb3JlICovCisjICBlbmRpZgorIyBlbmRpZgogI2VuZGlmCiAKICNpZm5kZWYgVU5JWAkJICAgIC8qIEZvciBVbml4IHRoaXMgaXMgaW5jbHVkZWQgaW4gb3NfdW5peC5oICovCkBAIC02NTIsNiArNjY2LDcgQEAKICNkZWZpbmUgRVhQQU5EX0NPTVBJTEVSCQkyOQogI2RlZmluZSBFWFBBTkRfVVNFUl9ERUZJTkVECTMwCiAjZGVmaW5lIEVYUEFORF9VU0VSX0xJU1QJMzEKKyNkZWZpbmUgRVhQQU5EX1NIRUxMQ01ECQkzMgogCiAvKiBWYWx1ZXMgZm9yIGV4bW9kZV9hY3RpdmUgKDAgaXMgbm8gZXhtb2RlKSAqLwogI2RlZmluZSBFWE1PREVfTk9STUFMCQkxCkBAIC02NzYsMTIgKzY5MSwxMyBAQAogI2RlZmluZSBXSUxEX0VTQ0FQRQkJMTI4CiAKIC8qIEZsYWdzIGZvciBleHBhbmRfd2lsZGNhcmRzKCkgKi8KLSNkZWZpbmUgRVdfRElSCQkxCS8qIGluY2x1ZGUgZGlyZWN0b3J5IG5hbWVzICovCi0jZGVmaW5lIEVXX0ZJTEUJCTIJLyogaW5jbHVkZSBmaWxlIG5hbWVzICovCi0jZGVmaW5lIEVXX05PVEZPVU5ECTQJLyogaW5jbHVkZSBub3QgZm91bmQgbmFtZXMgKi8KLSNkZWZpbmUgRVdfQUREU0xBU0gJOAkvKiBhcHBlbmQgc2xhc2ggdG8gZGlyZWN0b3J5IG5hbWUgKi8KLSNkZWZpbmUgRVdfS0VFUEFMTAkxNgkvKiBrZWVwIGFsbCBtYXRjaGVzICovCi0jZGVmaW5lIEVXX1NJTEVOVAkzMgkvKiBkb24ndCBwcmludCAiMSByZXR1cm5lZCIgZnJvbSBzaGVsbCAqLworI2RlZmluZSBFV19ESVIJCTB4MDEJLyogaW5jbHVkZSBkaXJlY3RvcnkgbmFtZXMgKi8KKyNkZWZpbmUgRVdfRklMRQkJMHgwMgkvKiBpbmNsdWRlIGZpbGUgbmFtZXMgKi8KKyNkZWZpbmUgRVdfTk9URk9VTkQJMHgwNAkvKiBpbmNsdWRlIG5vdCBmb3VuZCBuYW1lcyAqLworI2RlZmluZSBFV19BRERTTEFTSAkweDA4CS8qIGFwcGVuZCBzbGFzaCB0byBkaXJlY3RvcnkgbmFtZSAqLworI2RlZmluZSBFV19LRUVQQUxMCTB4MTAJLyoga2VlcCBhbGwgbWF0Y2hlcyAqLworI2RlZmluZSBFV19TSUxFTlQJMHgyMAkvKiBkb24ndCBwcmludCAiMSByZXR1cm5lZCIgZnJvbSBzaGVsbCAqLworI2RlZmluZSBFV19FWEVDCQkweDQwCS8qIGV4ZWN1dGFibGUgZmlsZXMgKi8KIC8qIE5vdGU6IG1vc3RseSBFV19OT1RGT1VORCBhbmQgRVdfU0lMRU5UIGFyZSBtdXR1YWxseSBleGNsdXNpdmU6IEVXX05PVEZPVU5ECiAgKiBpcyB1c2VkIHdoZW4gZXhlY3V0aW5nIGNvbW1hbmRzIGFuZCBFV19TSUxFTlQgZm9yIGludGVyYWN0aXZlIGV4cGFuZGluZy4gKi8KIApAQCAtMTQ4MCw2ICsxNDk2LDE1IEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2lmZGVmIEZFQVRfTUJZVEUKKyMgZGVmaW5lIE1BWF9NQ08JNgkvKiBtYXhpbXVtIHZhbHVlIGZvciAnbWF4Y29tYmluZScgKi8KKworLyogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBtdWx0aS1ieXRlIGNoYXJhY3Rlci4gIEl0IGNhbiBiZSBvbmUgMzItYml0CisgKiBjaGFyYWN0ZXIgb2YgdXAgdG8gNiBieXRlcywgb3Igb25lIDE2LWJpdCBjaGFyYWN0ZXIgb2YgdXAgdG8gdGhyZWUgYnl0ZXMKKyAqIHBsdXMgc2l4IGZvbGxvd2luZyBjb21wb3NpbmcgY2hhcmFjdGVycyBvZiB0aHJlZSBieXRlcyBlYWNoLiAqLworIyBkZWZpbmUgTUJfTUFYQllURVMJMjEKKyNlbmRpZgorCiAvKiBJbmNsdWRlIG9wdGlvbi5oIGJlZm9yZSBzdHJ1Y3RzLmgsIGJlY2F1c2UgdGhlIG51bWJlciBvZiB3aW5kb3ctbG9jYWwgYW5kCiAgKiBidWZmZXItbG9jYWwgb3B0aW9ucyBpcyB1c2VkIHRoZXJlLiAqLwogI2luY2x1ZGUgIm9wdGlvbi5oIgkgICAgLyogb3B0aW9ucyBhbmQgZGVmYXVsdCB2YWx1ZXMgKi8KQEAgLTE3ODMsMTEgKzE4MDgsNiBAQAogI2VuZGlmCiAKICNpZmRlZiBGRUFUX01CWVRFCi0vKiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLiAgSXQgY2FuIGJlIG9uZSAzMi1iaXQKLSAqIGNoYXJhY3RlciBvZiB1cCB0byA2IGJ5dGVzLCBvciBvbmUgMTYtYml0IGNoYXJhY3RlciBvZiB1cCB0byB0aHJlZSBieXRlcwotICogcGx1cyB0d28gZm9sbG93aW5nIGNvbXBvc2luZyBjaGFyYWN0ZXJzIG9mIHRocmVlIGJ5dGVzIGVhY2guICovCi0jIGRlZmluZSBNQl9NQVhCWVRFUwk5Ci0KIC8qCiAgKiBSZXR1cm4gYnl0ZSBsZW5ndGggb2YgY2hhcmFjdGVyIHRoYXQgc3RhcnRzIHdpdGggYnl0ZSAiYiIuCiAgKiBSZXR1cm5zIDEgZm9yIGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyLgpkaWZmIC0tZ2l0IGEvc3JjL3ZpbS5yYyBiL3NyYy92aW0ucmMKaW5kZXggZTUwYTljNC4uYWZmZGI5YSAxMDA2NDQKLS0tIGEvc3JjL3ZpbS5yYworKysgYi9zcmMvdmltLnJjCkBAIC0xMiwxMSArMTIsMTEgQEAKICNpbmNsdWRlIDx3aW52ZXIuaD4KICNpbmNsdWRlICJ2ZXJzaW9uLmgiCiAjaW5jbHVkZSAiZ3VpX3czMl9yYy5oIgotI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOMzJfXykgfHwgZGVmaW5lZChfX01JTkdXMzJfXykKKy8vICNpZiBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgZGVmaW5lZChfX0NZR1dJTjMyX18pIHx8IGRlZmluZWQoX19NSU5HVzMyX18pCiAjIGluY2x1ZGUgPHdpbnJlc3JjLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDx3aW5yZXMuaD4KLSNlbmRpZgorLy8gI2Vsc2UKKy8vICMgaW5jbHVkZSA8d2lucmVzLmg+CisvLyAjZW5kaWYKIAogLy8KIC8vIEljb25zCmRpZmYgLS1naXQgYS9zcmMvdmltaW8uaCBiL3NyYy92aW1pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYTUyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdmltaW8uaApAQCAtMCwwICsxLDE2IEBACisvKiB2aTpzZXQgdHM9OCBzdHM9NCBzdz00OgorICoKKyAqIFZJTSAtIFZpIElNcHJvdmVkCWJ5IEJyYW0gTW9vbGVuYWFyCisgKgorICogRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCisgKiBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KKyAqIFNlZSBSRUFETUUudHh0IGZvciBhbiBvdmVydmlldyBvZiB0aGUgVmltIHNvdXJjZSBjb2RlLgorICovCisKKy8qIFZpc3VhbCBTdHVkaW8gMjAwNSBoYXMgJ2RlcHJlY2F0ZWQnIG1hbnkgb2YgdGhlIHN0YW5kYXJkIENSVCBmdW5jdGlvbnMgKi8KKyNpZiBfTVNDX1ZFUiA+PSAxNDAwCisjIGRlZmluZSBfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUKKyMgZGVmaW5lIF9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUKKyNlbmRpZgorCisjaW5jbHVkZSA8aW8uaD4KZGlmZiAtLWdpdCBhL3NyYy94eGQvTWFrZV9tdmMubWFrIGIvc3JjL3h4ZC9NYWtlX212Yy5tYWsKaW5kZXggMGM5NDM4YS4uMzIyN2YwYyAxMDA2NDQKLS0tIGEvc3JjL3h4ZC9NYWtlX212Yy5tYWsKKysrIGIvc3JjL3h4ZC9NYWtlX212Yy5tYWsKQEAgLTQsNyArNCwxMCBAQAogeHhkOiB4eGQuZXhlCiAKIHh4ZC5leGU6IHh4ZC5jCi0gICAgIGNsIC9ub2xvZ28gLURXSU4zMiB4eGQuYyAvbGluayBzZXRhcmd2Lm9iagorICAgICBjbCAvbm9sb2dvIC1EV0lOMzIgeHhkLmMKKworIyBUaGlzIHdhcyBmb3IgYW4gb2xkZXIgY29tcGlsZXIKKyMgICAgY2wgL25vbG9nbyAtRFdJTjMyIHh4ZC5jIC9saW5rIHNldGFyZ3Yub2JqCiAKIGNsZWFuOgogICAgICAtIGlmIGV4aXN0IHh4ZC5vYmogZGVsIHh4ZC5vYmoKZGlmZiAtLWdpdCBhL3NyYy94eGQveHhkLmMgYi9zcmMveHhkL3h4ZC5jCmluZGV4IDJiNTUzZGQuLjJiM2VlOWMgMTAwNjQ0Ci0tLSBhL3NyYy94eGQveHhkLmMKKysrIGIvc3JjL3h4ZC94eGQuYwpAQCAtNTgsNiArNTgsMTMgQEAKICAqIG1ha2UgbW9uZXkgYW5kIHNoYXJlIHdpdGggbWUsCiAgKiBsb3NlIG1vbmV5IGFuZCBkb24ndCBhc2sgbWUuCiAgKi8KKworLyogVmlzdWFsIFN0dWRpbyAyMDA1IGhhcyAnZGVwcmVjYXRlZCcgbWFueSBvZiB0aGUgc3RhbmRhcmQgQ1JUIGZ1bmN0aW9ucyAqLworI2lmIF9NU0NfVkVSID49IDE0MDAKKyMgZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURQorIyBkZWZpbmUgX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURQorI2VuZGlmCisKICNpbmNsdWRlIDxzdGRpby5oPgogI2lmZGVmIFZBWEMKICMgaW5jbHVkZSA8ZmlsZS5oPgo=