ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2V2YWwudHh0IGIvcnVudGltZS9kb2MvZXZhbC50eHQKaW5kZXggOWNhNWQ3MS4uMzE3MWU5NiAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvZXZhbC50eHQKKysrIGIvcnVudGltZS9kb2MvZXZhbC50eHQKQEAgLTEsNCArMSw0IEBACi0qZXZhbC50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDYgTWFyIDEwCisqZXZhbC50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDYgTWFyIDE3CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0xNTEwLDYgKzE1MTAsNyBAQAogYnl0ZWlkeCgge2V4cHJ9LCB7bnJ9KQkJTnVtYmVyCWJ5dGUgaW5kZXggb2Yge25yfSd0aCBjaGFyIGluIHtleHByfQogY2FsbCgge2Z1bmN9LCB7YXJnbGlzdH0gWywge2RpY3R9XSkKIAkJCQlhbnkJY2FsbCB7ZnVuY30gd2l0aCBhcmd1bWVudHMge2FyZ2xpc3R9CitjaGFuZ2VucigpCQkJTnVtYmVyICBjdXJyZW50IGNoYW5nZSBudW1iZXIKIGNoYXIybnIoIHtleHByfSkJCU51bWJlcglBU0NJSSB2YWx1ZSBvZiBmaXJzdCBjaGFyIGluIHtleHByfQogY2luZGVudCgge2xudW19KQkJTnVtYmVyCUMgaW5kZW50IGZvciBsaW5lIHtsbnVtfQogY29sKCB7ZXhwcn0pCQkJTnVtYmVyCWNvbHVtbiBuciBvZiBjdXJzb3Igb3IgbWFyawpAQCAtMTkxNCw2ICsxOTE1LDE0IEBACiAJCXtkaWN0fSBpcyBmb3IgZnVuY3Rpb25zIHdpdGggdGhlICJkaWN0IiBhdHRyaWJ1dGUuICBJdCB3aWxsIGJlCiAJCXVzZWQgdG8gc2V0IHRoZSBsb2NhbCB2YXJpYWJsZSAic2VsZiIuIHxEaWN0aW9uYXJ5LWZ1bmN0aW9ufAogCitjaGFuZ2VucigpCQkJCQkJKmNoYW5nZW5yKCkqCisJCVJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBtb3N0IHJlY2VudCBjaGFuZ2UuICBUaGlzIGlzIHRoZSBzYW1lCisJCW51bWJlciBhcyB3aGF0IGlzIGRpc3BsYXllZCB3aXRoIHw6dW5kb2xpc3R8IGFuZCBjYW4gYmUgdXNlZAorCQl3aXRoIHRoZSB8OnVuZG98IGNvbW1hbmQuCisJCVdoZW4gYSBjaGFuZ2Ugd2FzIG1hZGUgaXQgaXMgdGhlIG51bWJlciBvZiB0aGF0IGNoYW5nZS4gIEFmdGVyCisJCXJlZG8gaXQgaXMgdGhlIG51bWJlciBvZiB0aGUgcmVkb25lIGNoYW5nZS4gIEFmdGVyIHVuZG8gaXQgaXMKKwkJb25lIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIHRoZSB1bmRvbmUgY2hhbmdlLgorCiBjaGFyMm5yKHtleHByfSkJCQkJCQkqY2hhcjJucigpKgogCQlSZXR1cm4gbnVtYmVyIHZhbHVlIG9mIHRoZSBmaXJzdCBjaGFyIGluIHtleHByfS4gIEV4YW1wbGVzOiA+CiAJCQljaGFyMm5yKCIgIikJCXJldHVybnMgMzIKQEAgLTU1NzQsOSArNTU4MywxMSBAQAogOmxldCB7dmFyLW5hbWV9CS4uCUxpc3QgdGhlIHZhbHVlIG9mIHZhcmlhYmxlIHt2YXItbmFtZX0uICBNdWx0aXBsZQogCQkJdmFyaWFibGUgbmFtZXMgbWF5IGJlIGdpdmVuLiAgU3BlY2lhbCBuYW1lcyByZWNvZ25pemVkCiAJCQloZXJlOgkJCQkqRTczOCoKLQkJCSAgZzoJZ2xvYmFsIHZhcmlhYmxlcy4KLQkJCSAgYjoJbG9jYWwgYnVmZmVyIHZhcmlhYmxlcy4KLQkJCSAgdzoJbG9jYWwgd2luZG93IHZhcmlhYmxlcy4KKwkJCSAgZzoJZ2xvYmFsIHZhcmlhYmxlcworCQkJICBiOglsb2NhbCBidWZmZXIgdmFyaWFibGVzCisJCQkgIHc6CWxvY2FsIHdpbmRvdyB2YXJpYWJsZXMKKwkJCSAgczoJc2NyaXB0LWxvY2FsIHZhcmlhYmxlcworCQkJICBsOglsb2NhbCBmdW5jdGlvbiB2YXJpYWJsZXMKIAkJCSAgdjoJVmltIHZhcmlhYmxlcy4KIAogOmxldAkJCUxpc3QgdGhlIHZhbHVlcyBvZiBhbGwgdmFyaWFibGVzLiAgVGhlIHR5cGUgb2YgdGhlCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9oZWxwLnR4dCBiL3J1bnRpbWUvZG9jL2hlbHAudHh0CmluZGV4IDMxOTJkZjUuLmU2ZTNiZmEgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL2hlbHAudHh0CisrKyBiL3J1bnRpbWUvZG9jL2hlbHAudHh0CkBAIC0xLDQgKzEsNCBAQAotKmhlbHAudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNiBGZWIgMjcKKypoZWxwLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDYgTWFyIDE3CiAKIAkJCVZJTSAtIG1haW4gaGVscCBmaWxlCiAJCQkJCQkJCQkgawpAQCAtODQsNyArODQsNyBAQAogfHVzcl85MC50eHR8ICBJbnN0YWxsaW5nIFZpbQogCiAKLVJFRkVSRU5DRSBNQU5VQUw6IFRoZXNlIGZpbGVzIGV4cGxhaW4gZXZlcnkgZGV0YWlsIG9mIFZpbS4KK1JFRkVSRU5DRSBNQU5VQUw6IFRoZXNlIGZpbGVzIGV4cGxhaW4gZXZlcnkgZGV0YWlsIG9mIFZpbS4JKnJlZi10b2MqCiAKIEdlbmVyYWwgc3ViamVjdHMgfgogfGludHJvLnR4dHwJZ2VuZXJhbCBpbnRyb2R1Y3Rpb24gdG8gVmltOyBub3RhdGlvbiB1c2VkIGluIGhlbHAgZmlsZXMKQEAgLTE5NCw2ICsxOTQsMTMgQEAKIHxwaV96aXAudHh0fAlaaXAgYXJjaGl2ZSBleHBsb3JlcgogCiBMT0NBTCBBRERJVElPTlM6CQkJCSpsb2NhbC1hZGRpdGlvbnMqCit8Y2VjdXRpbC50eHR8CURyQ2hpcCdzIFV0aWxpdGllcwkJCQlKdW4gMTEsIDIwMDQKK3xlbmdzcGNoay50eHR8CUVuZ2xpc2ggU3BlbGxpbmcgQ2hlY2tlciAgICh2NjEpCU1hciAxNCwgMjAwNQorfGV4YW1wbGUudHh0fAlFeGFtcGxlIGZvciBhIGxvY2FsbHkgYWRkZWQgaGVscCBmaWxlCit8bWF0Y2hpdC50eHR8ICAgRXh0ZW5kZWQgIiUiIG1hdGNoaW5nCit8dGVzdC50eHR8CVRlc3RpbmcgdGhlIGjpbHAgY/ZtbeVuZCBu9HcKK3x0eXBlY29yci50eHR8CVBsdWdpbiBmb3IgY29ycmVjdGluZyB0eXBpbmcgbWlzdGFrZXMKK3xoZWxwcC50eHR8CUR1bW15IGxpbmUgdG8gYXZvaWQgYW4gZXJyb3IgbWVzc2FnZQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICpiYXJzKgkJQmFycyBleGFtcGxlCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vcHRpb25zLnR4dCBiL3J1bnRpbWUvZG9jL29wdGlvbnMudHh0CmluZGV4IDBjYzliMzQuLjgyMjIwMGMgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL29wdGlvbnMudHh0CisrKyBiL3J1bnRpbWUvZG9jL29wdGlvbnMudHh0CkBAIC0xLDQgKzEsNCBAQAotKm9wdGlvbnMudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNiBNYXIgMTYKKypvcHRpb25zLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDYgTWFyIDE3CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTI1NTcsNiArMjU1Nyw5IEBACiAJZW52aXJvbm1lbnQuICBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciAnZW5jb2RpbmcnLiAgSXQgaXMgdXNlZnVsCiAJd2hlbiAnZW5jb2RpbmcnIGlzIHNldCB0byAidXRmLTgiIGFuZCB5b3VyIGVudmlyb25tZW50IHVzZXMgYQogCW5vbi1sYXRpbjEgZW5jb2RpbmcsIHN1Y2ggYXMgUnVzc2lhbi4KKwlXaGVuICdlbmNvZGluZycgaXMgInV0Zi04IiBhbmQgYSBmaWxlIGNvbnRhaW5zIGFuIGlsbGVnYWwgYnl0ZQorCXNlcXVlbmNlIGl0IHdvbid0IGJlIHJlY29nbml6ZWQgYXMgVVRGLTguICBZb3UgY2FuIHVzZSB0aGUgfDhnOHwKKwljb21tYW5kIHRvIGZpbmQgdGhlIGlsbGVnYWwgYnl0ZSBzZXF1ZW5jZS4KIAlXUk9ORyBWQUxVRVM6CQkJV0hBVCdTIFdST05HOgogCQlsYXRpbjEsdXRmLTgJCSJsYXRpbjEiIHdpbGwgYWx3YXlzIGJlIHVzZWQKIAkJdXRmLTgsdWNzLWJvbSxsYXRpbjEJQk9NIHdvbid0IGJlIHJlY29nbml6ZWQgaW4gYW4gdXRmLTgKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3RhZ3MgYi9ydW50aW1lL2RvYy90YWdzCmluZGV4IDM3MzQzODUuLjg0NTdiMTMgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3RhZ3MKKysrIGIvcnVudGltZS9kb2MvdGFncwpAQCAtMTY0Nyw2ICsxNjQ3LDcgQEAKIDQ1LjQJdXNyXzQ1LnR4dAkvKjQ1LjQqCiA0NS41CXVzcl80NS50eHQJLyo0NS41KgogNzU1CXNwZWxsLnR4dAkvKjc1NSoKKzhnOAl2YXJpb3VzLnR4dAkvKjhnOCoKIDkwLjEJdXNyXzkwLnR4dAkvKjkwLjEqCiA5MC4yCXVzcl85MC50eHQJLyo5MC4yKgogOTAuMwl1c3JfOTAudHh0CS8qOTAuMyoKQEAgLTQ2MDIsNiArNDYwMyw3IEBACiBjaGFuZ2VkLTYuNAl2ZXJzaW9uNi50eHQJLypjaGFuZ2VkLTYuNCoKIGNoYW5nZWxpc3QJbW90aW9uLnR4dAkvKmNoYW5nZWxpc3QqCiBjaGFuZ2Vsb2cudmltCXN5bnRheC50eHQJLypjaGFuZ2Vsb2cudmltKgorY2hhbmdlbnIoKQlldmFsLnR4dAkvKmNoYW5nZW5yKCkqCiBjaGFuZ2V0aWNrCWV2YWwudHh0CS8qY2hhbmdldGljayoKIGNoYW5naW5nCWNoYW5nZS50eHQJLypjaGFuZ2luZyoKIGNoYXIybnIoKQlldmFsLnR4dAkvKmNoYXIybnIoKSoKQEAgLTY1MjIsNiArNjUyNCw3IEBACiByZWRvCXVuZG8udHh0CS8qcmVkbyoKIHJlZG8tcmVnaXN0ZXIJdW5kby50eHQJLypyZWRvLXJlZ2lzdGVyKgogcmVmCWludHJvLnR4dAkvKnJlZioKK3JlZi10b2MJaGVscC50eHQJLypyZWYtdG9jKgogcmVmZXJlbmNlCWludHJvLnR4dAkvKnJlZmVyZW5jZSoKIHJlZ2V4cAlwYXR0ZXJuLnR4dAkvKnJlZ2V4cCoKIHJlZ2V4cC1jaGFuZ2VzLTUuNAl2ZXJzaW9uNS50eHQJLypyZWdleHAtY2hhbmdlcy01LjQqCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy90b2RvLnR4dCBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CmluZGV4IDE5NDg5MjcuLjY1ZTNjNzYgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3RvZG8udHh0CisrKyBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CkBAIC0xLDQgKzEsNCBAQAotKnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA2IE1hciAxNgorKnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA2IE1hciAxNwogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC00NCwxMyArNDQsOSBAQAogRU1CRURESU5HOiBNYWtlIGl0IHBvc3NpYmxlIHRvIHJ1biBWaW0gaW5zaWRlIGEgd2luZG93IG9mIGFub3RoZXIgcHJvZ3JhbS4KIEZvciBHVEsgTmVpbCBCaXJkIGhhcyBhIHBhdGNoIHRvIHVzZSBWaW0gbGlrZSBhIHdpZGdldC4KIAotV2luMzI6IFBhdGNoIGZvciBLb3JlYW4gSU1FLiAoWXVzdW5nLCAyMDA1IE1hcmNoIDIxKQotCiBTdXBwb3J0ICI6c2V0IHN5bnRheD1jcHAuZG94eWdlbiI/ICBTdWdnZXN0ZWQgcGF0Y2ggYnkgTWljaGFlbCBHZWRkZXMgKDkgQXVnCiAyMDA0KS4gIFNob3VsZCBhbHNvIHdvcmsgZm9yICdmaWxldHlwZScuCiAKLUFkZCBjb21tYW5kIHRvIHNlYXJjaCBmb3IgaWxsZWdhbCB1dGYtOCBieXRlIHNlcXVlbmNlLgotCiBBZGQgc3RydG9sKCkgdG8gYXZvaWQgdGhlIHByb2JsZW1zIHdpdGggbGVhZGluZyB6ZXJvIGNhdXNpbmcgb2N0YWwgY29udmVyc2lvbi4KIAogQWRkIGEgJ3Rvb2wnIHdpbmRvdzogYmVoYXZlcyBsaWtlIGEgcHJldmlldyB3aW5kb3cgYnV0IHRoZXJlIGNhbiBiZSBzZXZlcmFsLgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyX3RvYy50eHQgYi9ydW50aW1lL2RvYy91c3JfdG9jLnR4dAppbmRleCA1NTRhYjcwLi45MjQxMDFmIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy91c3JfdG9jLnR4dAorKysgYi9ydW50aW1lL2RvYy91c3JfdG9jLnR4dApAQCAtMSw0ICsxLDQgQEAKLSp1c3JfdG9jLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgRmViIDIyCisqdXNyX3RvYy50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA2IE1hciAxNwogCiAJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKIApAQCAtNDcsNiArNDcsOCBAQAogfHVzcl85MC50eHR8ICBJbnN0YWxsaW5nIFZpbQogCiAKK01vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gaW4gdGhlIHJlZmVyZW5jZSBtYW51YWw6IHxyZWYtdG9jfAorCiBUaGUgdXNlciBtYW51YWwgaXMgYXZhaWxhYmxlIGFzIGEgc2luZ2xlLCByZWFkeSB0byBwcmludCBIVE1MIGFuZCBQREYgZmlsZQogaGVyZToKIAlodHRwOi8vdmltZG9jLnNmLm5ldApkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmFyaW91cy50eHQgYi9ydW50aW1lL2RvYy92YXJpb3VzLnR4dAppbmRleCBjMTY1ODdmLi4zMGE3YTBiIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy92YXJpb3VzLnR4dAorKysgYi9ydW50aW1lL2RvYy92YXJpb3VzLnR4dApAQCAtMSw0ICsxLDQgQEAKLSp2YXJpb3VzLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNiBNYXIgMDUKKyp2YXJpb3VzLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNiBNYXIgMTcKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTY2LDcgKzY2LDI0IEBACiAJCQl2YWx1ZSBvZiAnbWF4Y29tYmluZScgZG9lc24ndCBtYXR0ZXIuCiAJCQlFeGFtcGxlIG9mIGEgY2hhcmFjdGVyIHdpdGggdHdvIGNvbXBvc2luZyBjaGFyYWN0ZXJzOgogCQkJCWUwIGI4IDgxICsgZTAgYjggYjkgKyBlMCBiOSA4OSB+Ci0JCQl7bm90IGluIFZpfQorCQkJe25vdCBpbiBWaX0ge29ubHkgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2J5dGV8CisJCQlmZWF0dXJlfQorCisJCQkJCQkJKjhnOCoKKzhnOAkJCUZpbmQgYW4gaWxsZWdhbCBVVEYtOCBieXRlIHNlcXVlbmNlIGF0IG9yIGFmdGVyIHRoZQorCQkJY3Vyc29yLiAgVGhpcyB3b3JrcyBpbiB0d28gc2l0dWF0aW9uczoKKwkJCTEuIHdoZW4gJ2VuY29kaW5nJyBpcyBhbnkgOC1iaXQgZW5jb2RpbmcKKwkJCTIuIHdoZW4gJ2VuY29kaW5nJyBpcyAidXRmLTgiIGFuZCAnZmlsZWVuY29kaW5nJyBpcworCQkJICAgYW55IDgtYml0IGVuY29kaW5nCisJCQlUaHVzIGl0IGNhbiBiZSB1c2VkIHdoZW4gZWRpdGluZyBhIGZpbGUgdGhhdCB3YXMKKwkJCXN1cHBvc2VkIHRvIGJlIFVURi04IGJ1dCB3YXMgcmVhZCBhcyBpZiBpdCBpcyBhbiA4LWJpdAorCQkJZW5jb2RpbmcgYmVjYXVzZSBpdCBjb250YWlucyBpbGxlZ2FsIGJ5dGVzLgorCQkJRG9lcyBub3Qgd3JhcCBhcm91bmQgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkJCU5vdGUgdGhhdCB3aGVuIHRoZSBjdXJzb3IgaXMgb24gYW4gaWxsZWdhbCBieXRlIG9yIHRoZQorCQkJY3Vyc29yIGlzIGhhbGZ3YXkgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciB0aGUgY29tbWFuZAorCQkJd29uJ3QgbW92ZSB0aGUgY3Vyc29yLgorCQkJe25vdCBpbiBWaX0ge29ubHkgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2J5dGV8CisJCQlmZWF0dXJlfQogCiAJCQkJCQkJKjpwKiAqOnByKiAqOnByaW50KgogOltyYW5nZV1wW3JpbnRdIFtmbGFnc10KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZlcnNpb243LnR4dCBiL3J1bnRpbWUvZG9jL3ZlcnNpb243LnR4dAppbmRleCA5YTM2ZmM2Li44YTdmMDE4IDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy92ZXJzaW9uNy50eHQKKysrIGIvcnVudGltZS9kb2MvdmVyc2lvbjcudHh0CkBAIC0xLDQgKzEsNCBAQAotKnZlcnNpb243LnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA2IE1hciAxNgorKnZlcnNpb243LnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA2IE1hciAxNwogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtMjg1LDcgKzI4NSw4IEBACiAKIFRoZSB8OnVuZG9saXN0fCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGdldCBhbiBpZGVhIG9mIHdoaWNoIHVuZG8gYnJhbmNoZXMKIGV4aXN0LiAgVGhlIHw6dW5kb3wgY29tbWFuZCBub3cgdGFrZXMgYW4gYXJndW1lbnQgdG8gZGlyZWN0bHkganVtcCB0byBhCi1zcGVjaWZpYyBwb3NpdGlvbiBpbiB0aGlzIGxpc3QuCitzcGVjaWZpYyBwb3NpdGlvbiBpbiB0aGlzIGxpc3QuICBUaGUgfGNoYW5nZW5yKCl8IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvCitvYnRhaW4gdGhlIGNoYW5nZSBudW1iZXIuCiAKIFRoZXJlIGlzIG5vIGdyYXBoaWNhbCBkaXNwbGF5IG9mIHRoZSB0cmVlIHdpdGggY2hhbmdlcywgbmF2aWdhdGlvbiBjYW4gYmUKIHF1aXRlIGNvbmZ1c2luZy4KQEAgLTMwNyw2ICszMDgsOCBAQAogRm9yIHBhdHRlcm4gbWF0Y2hpbmcgaXQgaXMgbm93IHBvc3NpYmxlIHRvIHNlYXJjaCBmb3IgaW5kaXZpZHVhbCBjb21wb3NpbmcKIGNoYXJhY3RlcnMuIHxwYXR0ZXJucy1jb21wb3Npbmd8CiAKK1RoZSB8OGc4fCBjb21tYW5kIHNlYXJjaGVzIGZvciBhbiBpbGxlZ2FsIFVURi04IGJ5dGUgc2VxdWVuY2UuCisKIAogTW9yZSBoaWdobGlnaHRpbmcJCQkJKm5ldy1tb3JlLWhpZ2hsaWdodGluZyoKIC0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDA2LDQgKzIwMDksOCBAQAogQWRkZWQgU09NRV9WQUxJRDogUmVkcmF3IHRoZSB3aG9sZSB3aW5kb3cgYnV0IGFsc28gdHJ5IHRvIHNjcm9sbCB0byBtaW5pbWl6ZQogcmVkcmF3aW5nLgogCitXaW4zMjogV2hlbiB1c2luZyBLb3JlYW4gSU1FIG1ha2luZyBpdCBhY3RpdmUgZGlkbid0IHdvcmsgcHJvcGVybHkuIChNb29uLAorWXUtc3VuZywgMjAwNSBNYXJjaCAyMSkKKworCiAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvc3JjL2dsb2JhbHMuaCBiL3NyYy9nbG9iYWxzLmgKaW5kZXggODZkOGFkOS4uYjA1MjNmYyAxMDA2NDQKLS0tIGEvc3JjL2dsb2JhbHMuaAorKysgYi9zcmMvZ2xvYmFscy5oCkBAIC0xNTA0LDYgKzE1MDQsOSBAQAogRVhURVJOIGludCB4c21wX2ljZWZkIElOSVQoPSAtMSk7ICAgLyogVGhlIGFjdHVhbCBjb25uZWN0aW9uICovCiAjZW5kaWYKIAorLyogRm9yIHVuZG8gd2UgbmVlZCB0byBrbm93IHRoZSBsb3dlc3QgdGltZSBwb3NzaWJsZS4gKi8KK0VYVEVSTiB0aW1lX3Qgc3RhcnR0aW1lOworCiAvKgogICogT3B0aW9uYWwgRmFyc2kgc3VwcG9ydC4gIEluY2x1ZGUgaXQgaGVyZSwgc28gRVhURVJOIGFuZCBJTklUIGFyZSBkZWZpbmVkLgogICovCmRpZmYgLS1naXQgYS9zcmMvZ3VpX3czMi5jIGIvc3JjL2d1aV93MzIuYwppbmRleCA0NmNhNTQ2Li42ZTM2MDgwIDEwMDY0NAotLS0gYS9zcmMvZ3VpX3czMi5jCisrKyBiL3NyYy9ndWlfdzMyLmMKQEAgLTMyMyw2ICszMjMsNyBAQAogc3RhdGljIEJPT0wgKFdJTkFQSSAqcEltbVNldENvbXBvc2l0aW9uRm9udCkoSElNQywgTFBMT0dGT05UQSk7CiBzdGF0aWMgQk9PTCAoV0lOQVBJICpwSW1tU2V0Q29tcG9zaXRpb25XaW5kb3cpKEhJTUMsIExQQ09NUE9TSVRJT05GT1JNKTsKIHN0YXRpYyBCT09MIChXSU5BUEkgKnBJbW1HZXRDb252ZXJzaW9uU3RhdHVzKShISU1DLCBMUERXT1JELCBMUERXT1JEKTsKK3N0YXRpYyBCT09MIChXSU5BUEkgKnBJbW1TZXRDb252ZXJzaW9uU3RhdHVzKShISU1DLCBEV09SRCwgRFdPUkQpOwogc3RhdGljIHZvaWQgZHluX2ltbV9sb2FkKHZvaWQpOwogI2Vsc2UKICMgZGVmaW5lIHBJbW1HZXRDb21wb3NpdGlvblN0cmluZ0EgSW1tR2V0Q29tcG9zaXRpb25TdHJpbmdBCkBAIC0zMzYsNiArMzM3LDcgQEAKICMgZGVmaW5lIHBJbW1TZXRDb21wb3NpdGlvbkZvbnQgICBJbW1TZXRDb21wb3NpdGlvbkZvbnRBCiAjIGRlZmluZSBwSW1tU2V0Q29tcG9zaXRpb25XaW5kb3cgSW1tU2V0Q29tcG9zaXRpb25XaW5kb3cKICMgZGVmaW5lIHBJbW1HZXRDb252ZXJzaW9uU3RhdHVzICBJbW1HZXRDb252ZXJzaW9uU3RhdHVzCisjIGRlZmluZSBwSW1tU2V0Q29udmVyc2lvblN0YXR1cyAgSW1tU2V0Q29udmVyc2lvblN0YXR1cwogI2VuZGlmCiAKICNpZm5kZWYgRVRPX0lHTk9SRUxBTkdVQUdFCkBAIC0xNzE0LDYgKzE3MTYsMzkgQEAKIAloSW1jID0gcEltbUdldENvbnRleHQoc19od25kKTsKIAlpZiAoaEltYykKIAl7CisJICAgIC8qCisJICAgICAqIGZvciBLb3JlYW4gaW1lCisJICAgICAqLworCSAgICBIS0wgaEtMID0gR2V0S2V5Ym9hcmRMYXlvdXQoMCk7CisKKwkgICAgaWYgKExPV09SRChoS0wpID09IE1BS0VMQU5HSUQoTEFOR19LT1JFQU4sIFNVQkxBTkdfS09SRUFOKSkKKwkgICAgeworCQlzdGF0aWMgRFdPUkQgZHdDb252ZXJzaW9uU2F2ZWQgPSAwLCBkd1NlbnRlbmNlU2F2ZWQgPSAwOworCQlzdGF0aWMgQk9PTCBiU2F2ZWQgPSBGQUxTRTsKKworCQlpZiAoYWN0aXZlKQorCQl7CisJCSAgICAvKiBpZiB3ZSBoYXZlIGEgc2F2ZWQgY29udmVyc2lvbiBzdGF0dXMsIHJlc3RvcmUgaXQgKi8KKwkJICAgIGlmIChiU2F2ZWQpCisJCQlwSW1tU2V0Q29udmVyc2lvblN0YXR1cyhoSW1jLCBkd0NvbnZlcnNpb25TYXZlZCwKKwkJCQkJCQkgICAgIGR3U2VudGVuY2VTYXZlZCk7CisJCSAgICBiU2F2ZWQgPSBGQUxTRTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIC8qIHNhdmUgY29udmVyc2lvbiBzdGF0dXMgYW5kIGRpc2FibGUga29yZWFuICovCisJCSAgICBpZiAocEltbUdldENvbnZlcnNpb25TdGF0dXMoaEltYywgJmR3Q29udmVyc2lvblNhdmVkLAorCQkJCQkJCSAgICAmZHdTZW50ZW5jZVNhdmVkKSkKKwkJICAgIHsKKwkJCWJTYXZlZCA9IFRSVUU7CisJCQlwSW1tU2V0Q29udmVyc2lvblN0YXR1cyhoSW1jLAorCQkJCWR3Q29udmVyc2lvblNhdmVkICYgfihJTUVfQ01PREVfTkFUSVZFCisJCQkJCQkgICAgICAgfCBJTUVfQ01PREVfRlVMTFNIQVBFKSwKKwkJCQlkd1NlbnRlbmNlU2F2ZWQpOworCQkgICAgfQorCQl9CisJICAgIH0KKwogCSAgICBwSW1tU2V0T3BlblN0YXR1cyhoSW1jLCBhY3RpdmUpOwogCSAgICBwSW1tUmVsZWFzZUNvbnRleHQoc19od25kLCBoSW1jKTsKIAl9CkBAIC0xNzg1LDcgKzE4MjAsNyBAQAogewogICAgIGludAkJYzsKIAotICAgIHdoaWxlIChsZW4tLSA+PSAwKQorICAgIHdoaWxlICgtLWxlbiA+PSAwKQogICAgIHsKIAljID0gKnRleHQrKzsKIAlzd2l0Y2ggKGMpCkBAIC0yMDIxLDI4ICsyMDU2LDI4IEBACiAgICAgewogCS8qIE91dHB1dCBVVEYtOCBjaGFyYWN0ZXJzLiAgQ2FsbGVyIGhhcyBhbHJlYWR5IHNlcGFyYXRlZAogCSAqIGNvbXBvc2luZyBjaGFyYWN0ZXJzLiAqLwotCWludAkJaSA9IDA7Ci0JaW50CQljbGVuOwkvKiBzdHJpbmcgbGVuZ3RoIHVwIHRvIGNvbXBvc2luZyBjaGFyICovCisJaW50CQlpOworCWludAkJd2xlbjsJLyogc3RyaW5nIGxlbmd0aCBpbiB3b3JkcyAqLworCWludAkJY2xlbjsJLyogc3RyaW5nIGxlbmd0aCBpbiBjaGFyYWN0ZXJzICovCiAJaW50CQljZWxsczsJLyogY2VsbCB3aWR0aCBvZiBzdHJpbmcgdXAgdG8gY29tcG9zaW5nIGNoYXIgKi8KIAlpbnQJCWN3OwkvKiB3aWR0aCBvZiBjdXJyZW50IGNlbGwgKi8KIAlpbnQJCWM7Ci0JaW50CQl4dHJhOwogCisJd2xlbiA9IDAKKwljbGVuID0gMDsKIAljZWxscyA9IDA7Ci0JZm9yIChjbGVuID0gMDsgaSA8IGxlbjsgKQorCWZvciAoaSA9IDA7IGkgPCBsZW47ICkKIAl7CiAJICAgIGMgPSB1dGZfcHRyMmNoYXIodGV4dCArIGkpOwogCSAgICBpZiAoYyA+PSAweDEwMDAwKQogCSAgICB7CiAJCS8qIFR1cm4gaW50byBVVEYtMTYgZW5jb2RpbmcuICovCi0JCXVuaWNvZGVidWZbY2xlbl0gPSAoKGMgLSAweDEwMDAwKSA+PiAxMCkgKyAweEQ4MDA7Ci0JCXVuaWNvZGVidWZbY2xlbiArIDFdID0gKChjIC0gMHgxMDAwMCkgJiAweDNmZikgKyAweERDMDA7Ci0JCXh0cmEgPSAxOworCQl1bmljb2RlYnVmW3dsZW4rK10gPSAoKGMgLSAweDEwMDAwKSA+PiAxMCkgKyAweEQ4MDA7CisJCXVuaWNvZGVidWZbd2xlbisrXSA9ICgoYyAtIDB4MTAwMDApICYgMHgzZmYpICsgMHhEQzAwOwogCSAgICB9CiAJICAgIGVsc2UKIAkgICAgewotCQl1bmljb2RlYnVmW2NsZW5dID0gYzsKLQkJeHRyYSA9IDA7CisJCXVuaWNvZGVidWZbd2xlbisrXSA9IGM7CiAJICAgIH0KIAkgICAgY3cgPSB1dGZfY2hhcjJjZWxscyhjKTsKIAkgICAgaWYgKGN3ID4gMikJCS8qIGRvbid0IHVzZSA0IGZvciB1bnByaW50YWJsZSBjaGFyICovCkBAIC0yMDUzLDE1ICsyMDg4LDEzIEBACiAJCSAqIHdoZW4gdGhlIGZvbnQgdXNlcyBkaWZmZXJlbnQgd2lkdGhzIChlLmcuLCBib2xkIGNoYXJhY3RlcgogCQkgKiBpcyB3aWRlcikuICAqLwogCQl1bmljb2RlcGR5W2NsZW5dID0gY3cgKiBndWkuY2hhcl93aWR0aDsKLQkJaWYgKHh0cmEgPT0gMSkKLQkJICAgIHVuaWNvZGVwZHlbY2xlbiArIDFdID0gY3cgKiBndWkuY2hhcl93aWR0aDsKIAkgICAgfQogCSAgICBjZWxscyArPSBjdzsKIAkgICAgaSArPSB1dGZjX3B0cjJsZW5fbGVuKHRleHQgKyBpLCBsZW4gLSBpKTsKLQkgICAgY2xlbiArPSB4dHJhICsgMTsKKwkgICAgKytjbGVuOwogCX0KIAlFeHRUZXh0T3V0VyhzX2hkYywgVEVYVF9YKGNvbCksIFRFWFRfWShyb3cpLAotCQkJICAgZm9wdGlvbnMsIHBjbGlwcmVjdCwgdW5pY29kZWJ1ZiwgY2xlbiwgdW5pY29kZXBkeSk7CisJCQkgICBmb3B0aW9ucywgcGNsaXByZWN0LCB1bmljb2RlYnVmLCB3bGVuLCB1bmljb2RlcGR5KTsKIAlsZW4gPSBjZWxsczsJLyogdXNlZCBmb3IgdW5kZXJsaW5pbmcgKi8KICAgICB9CiAgICAgZWxzZSBpZiAoKGVuY19jb2RlcGFnZSA+IDAgJiYgKGludClHZXRBQ1AoKSAhPSBlbmNfY29kZXBhZ2UpIHx8IGVuY19sYXRpbjkpCkBAIC0zODk0LDYgKzM5MjcsOCBAQAogCSAgICA9ICh2b2lkICopR2V0UHJvY0FkZHJlc3MoaExpYkltbSwgIkltbVNldENvbXBvc2l0aW9uV2luZG93Iik7CiAgICAgcEltbUdldENvbnZlcnNpb25TdGF0dXMKIAkgICAgPSAodm9pZCAqKUdldFByb2NBZGRyZXNzKGhMaWJJbW0sICJJbW1HZXRDb252ZXJzaW9uU3RhdHVzIik7CisgICAgcEltbVNldENvbnZlcnNpb25TdGF0dXMKKwkgICAgPSAodm9pZCAqKUdldFByb2NBZGRyZXNzKGhMaWJJbW0sICJJbW1TZXRDb252ZXJzaW9uU3RhdHVzIik7CiAKICAgICBpZiAoICAgICAgIHBJbW1HZXRDb21wb3NpdGlvblN0cmluZ0EgPT0gTlVMTAogCSAgICB8fCBwSW1tR2V0Q29tcG9zaXRpb25TdHJpbmdXID09IE5VTEwKQEAgLTM5MDUsNyArMzk0MCw4IEBACiAJICAgIHx8IHBJbW1HZXRDb21wb3NpdGlvbkZvbnQgPT0gTlVMTAogCSAgICB8fCBwSW1tU2V0Q29tcG9zaXRpb25Gb250ID09IE5VTEwKIAkgICAgfHwgcEltbVNldENvbXBvc2l0aW9uV2luZG93ID09IE5VTEwKLQkgICAgfHwgcEltbUdldENvbnZlcnNpb25TdGF0dXMgPT0gTlVMTCkKKwkgICAgfHwgcEltbUdldENvbnZlcnNpb25TdGF0dXMgPT0gTlVMTAorCSAgICB8fCBwSW1tU2V0Q29udmVyc2lvblN0YXR1cyA9PSBOVUxMKQogICAgIHsKIAlGcmVlTGlicmFyeShoTGliSW1tKTsKIAloTGliSW1tID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9tYWluLmMgYi9zcmMvbWFpbi5jCmluZGV4IDMyMDkxODMuLmFmZjhiM2YgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluLmMKKysrIGIvc3JjL21haW4uYwpAQCAtMjA4LDYgKzIwOCw3IEBACiAgICAgdGltZV9mZCA9IG1jaF9mb3BlbihTVEFSVFVQVElNRSwgImEiKTsKICAgICBUSU1FX01TRygiLS0tIFZJTSBTVEFSVElORyAtLS0iKTsKICNlbmRpZgorICAgIHN0YXJ0dGltZSA9IHRpbWUoTlVMTCk7CiAKICNpZmRlZiBfX0VNWF9fCiAgICAgX3dpbGRjYXJkKCZwYXJhbXMuYXJnYywgJnBhcmFtcy5hcmd2KTsKZGlmZiAtLWdpdCBhL3NyYy9taXNjMS5jIGIvc3JjL21pc2MxLmMKaW5kZXggODczMTU5Yy4uMDA5MjFkYyAxMDA2NDQKLS0tIGEvc3JjL21pc2MxLmMKKysrIGIvc3JjL21pc2MxLmMKQEAgLTIxNDcsOSArMjE0Nyw5IEBACiAgKi8KIC8qQVJHU1VTRUQqLwogICAgIGludAotZGVsX2J5dGVzKGNvdW50LCBmaXhwb3MsIHVzZV9kZWxjb21iaW5lKQorZGVsX2J5dGVzKGNvdW50LCBmaXhwb3NfYXJnLCB1c2VfZGVsY29tYmluZSkKICAgICBsb25nCWNvdW50OwotICAgIGludAkJZml4cG9zOworICAgIGludAkJZml4cG9zX2FyZzsKICAgICBpbnQJCXVzZV9kZWxjb21iaW5lOwkgICAgLyogJ2RlbGNvbWJpbmUnIG9wdGlvbiBhcHBsaWVzICovCiB7CiAgICAgY2hhcl91CSpvbGRwLCAqbmV3cDsKQEAgLTIxNTgsNiArMjE1OCw3IEBACiAgICAgY29sbnJfVAljb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKICAgICBpbnQJCXdhc19hbGxvY2VkOwogICAgIGxvbmcJbW92ZWxlbjsKKyAgICBpbnQJCWZpeHBvcyA9IGZpeHBvc19hcmc7CiAKICAgICBvbGRwID0gbWxfZ2V0KGxudW0pOwogICAgIG9sZGxlbiA9IChpbnQpU1RSTEVOKG9sZHApOwpAQCAtMjIwMSw5ICsyMjAyLDE0IEBACiAgICAgewogCS8qCiAJICogSWYgd2UganVzdCB0b29rIG9mZiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgYSBub24tYmxhbmsgbGluZSwgYW5kCi0JICogZml4cG9zIGlzIFRSVUUsIHdlIGRvbid0IHdhbnQgdG8gZW5kIHVwIHBvc2l0aW9uZWQgYXQgdGhlIE5VTC4KKwkgKiBmaXhwb3MgaXMgVFJVRSwgd2UgZG9uJ3Qgd2FudCB0byBlbmQgdXAgcG9zaXRpb25lZCBhdCB0aGUgTlVMLAorCSAqIHVubGVzcyAicmVzdGFydF9lZGl0IiBpcyBzZXQgb3IgJ3ZpcnR1YWxlZGl0JyBjb250YWlucyAib25lbW9yZSIuCiAJICovCi0JaWYgKGNvbCA+IDAgJiYgZml4cG9zKQorCWlmIChjb2wgPiAwICYmIGZpeHBvcyAmJiByZXN0YXJ0X2VkaXQgPT0gMAorI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKwkJCQkJICAgICAgJiYgKHZlX2ZsYWdzICYgVkVfT05FTU9SRSkgPT0gMAorI2VuZGlmCisJCQkJCSAgICAgICkKIAl7CiAJICAgIC0tY3Vyd2luLT53X2N1cnNvci5jb2w7CiAjaWZkZWYgRkVBVF9WSVJUVUFMRURJVApkaWZmIC0tZ2l0IGEvc3JjL29wcy5jIGIvc3JjL29wcy5jCmluZGV4IGZjZTk5NWYuLmExM2NlZTcgMTAwNjQ0Ci0tLSBhL3NyYy9vcHMuYworKysgYi9zcmMvb3BzLmMKQEAgLTE4NDMsOCArMTg0Myw3IEBACiAJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbGFkZCA9IDA7CiAJICAgIH0KICNlbmRpZgotCSAgICAodm9pZClkZWxfYnl0ZXMoKGxvbmcpbiwgcmVzdGFydF9lZGl0ID09IE5VTCAmJiAhdmlydHVhbF9vcCwKLQkJCQlvYXAtPm9wX3R5cGUgPT0gT1BfREVMRVRFCisJICAgICh2b2lkKWRlbF9ieXRlcygobG9uZyluLCAhdmlydHVhbF9vcCwgb2FwLT5vcF90eXBlID09IE9QX0RFTEVURQogI2lmZGVmIEZFQVRfVklTVUFMCiAJCQkJICAgICYmICFvYXAtPmlzX1ZJc3VhbAogI2VuZGlmCkBAIC0xODY4LDggKzE4NjcsNyBAQAogCSAgICAvKiBkZWxldGUgZnJvbSBzdGFydCBvZiBsaW5lIHVudGlsIG9wX2VuZCAqLwogCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IDA7CiAJICAgICh2b2lkKWRlbF9ieXRlcygobG9uZykob2FwLT5lbmQuY29sICsgMSAtICFvYXAtPmluY2x1c2l2ZSksCi0JCQkJCSAgIHJlc3RhcnRfZWRpdCA9PSBOVUwgJiYgIXZpcnR1YWxfb3AsCi0JCQkJb2FwLT5vcF90eXBlID09IE9QX0RFTEVURQorCQkJCQkhdmlydHVhbF9vcCwgb2FwLT5vcF90eXBlID09IE9QX0RFTEVURQogI2lmZGVmIEZFQVRfVklTVUFMCiAJCQkJCSYmICFvYXAtPmlzX1ZJc3VhbAogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vbWJ5dGUucHJvIGIvc3JjL3Byb3RvL21ieXRlLnBybwppbmRleCBlNWM5Mjk1Li4xNmEzNmM4IDEwMDY0NAotLS0gYS9zcmMvcHJvdG8vbWJ5dGUucHJvCisrKyBiL3NyYy9wcm90by9tYnl0ZS5wcm8KQEAgLTQ5LDYgKzQ5LDcgQEAKIHZvaWQgbWJfY29weV9jaGFyIF9fQVJHUygoY2hhcl91ICoqZnAsIGNoYXJfdSAqKnRwKSk7CiBpbnQgbWJfb2ZmX25leHQgX19BUkdTKChjaGFyX3UgKmJhc2UsIGNoYXJfdSAqcCkpOwogaW50IG1iX3RhaWxfb2ZmIF9fQVJHUygoY2hhcl91ICpiYXNlLCBjaGFyX3UgKnApKTsKK3ZvaWQgdXRmX2ZpbmRfaWxsZWdhbCBfX0FSR1MoKHZvaWQpKTsKIGludCB1dGZfdmFsaWRfc3RyaW5nIF9fQVJHUygoY2hhcl91ICpzLCBjaGFyX3UgKmVuZCkpOwogaW50IGRiY3Nfc2NyZWVuX3RhaWxfb2ZmIF9fQVJHUygoY2hhcl91ICpiYXNlLCBjaGFyX3UgKnApKTsKIHZvaWQgbWJfYWRqdXN0X2N1cnNvciBfX0FSR1MoKHZvaWQpKTsKZGlmZiAtLWdpdCBhL3NyYy9zY3JlZW4uYyBiL3NyYy9zY3JlZW4uYwppbmRleCA2ZGU3OTFkLi5mYmMzZmVlIDEwMDY0NAotLS0gYS9zcmMvc2NyZWVuLmMKKysrIGIvc3JjL3NjcmVlbi5jCkBAIC00Mjk2LDcgKzQyOTYsNyBAQAogCQkJU2NyZWVuTGluZXNVQ1tvZmZdID0gMDsKICNlbmRpZgogCQkgICAgKytjb2w7Ci0JCSAgICBpZiAodmNvbCA9PSB3cC0+d192aXJ0Y29sKQorCQkgICAgaWYgKHZjb2wgPT0gKGxvbmcpd3AtPndfdmlydGNvbCkKIAkJICAgIHsKIAkJCVNjcmVlbkF0dHJzW29mZl0gPSBobF9hdHRyKEhMRl9DVUMpOwogCQkJYnJlYWs7CkBAIC00MzYwLDcgKzQzNjAsNyBAQAogI2lmZGVmIEZFQVRfU1lOX0hMCiAJLyogSGlnaGxpZ2h0IHRoZSBjdXJzb3IgY29sdW1uIGlmICdjdXJzb3Jjb2x1bW4nIGlzIHNldC4gIEJ1dCBkb24ndAogCSAqIGhpZ2hsaWdodCB0aGUgY3Vyc29yIHBvc2l0aW9uIGl0c2VsZi4gKi8KLQlpZiAod3AtPndfcF9jdWMgJiYgdmNvbCA9PSB3cC0+d192aXJ0Y29sCisJaWYgKHdwLT53X3BfY3VjICYmIHZjb2wgPT0gKGxvbmcpd3AtPndfdmlydGNvbAogCQkmJiBsbnVtICE9IHdwLT53X2N1cnNvci5sbnVtCiAJCSYmIGRyYXdfc3RhdGUgPT0gV0xfTElORSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvc3RydWN0cy5oIGIvc3JjL3N0cnVjdHMuaAppbmRleCAyNmZlZTlhLi4xZTY2ZTZmIDEwMDY0NAotLS0gYS9zcmMvc3RydWN0cy5oCisrKyBiL3NyYy9zdHJ1Y3RzLmgKQEAgLTEyNTQsMTEgKzEyNTQsOSBAQAogICAgIHVfaGVhZGVyX1QJKmJfdV9jdXJoZWFkOwkvKiBwb2ludGVyIHRvIGN1cnJlbnQgaGVhZGVyICovCiAgICAgaW50CQliX3VfbnVtaGVhZDsJLyogY3VycmVudCBudW1iZXIgb2YgaGVhZGVycyAqLwogICAgIGludAkJYl91X3N5bmNlZDsJLyogZW50cnkgbGlzdHMgYXJlIHN5bmNlZCAqLwotICAgIGxvbmcJYl91X3NlcV9sYXN0OwkvKiBsYXN0IHVzZWQgdW5kbyBzZXF1ZW5jZSBudW1iZXIgcGx1cyAxICovCi0gICAgbG9uZwliX3Vfc2VxX2N1cjsJLyogdW5kbyBzZXF1ZW5jZSBudW1iZXIgb2YgbGFzdCBoZWFkZXIgdXNlZAotCQkJCSAgIHBsdXMgMSAqLwotICAgIHRpbWVfdAliX3Vfc2VxX3RpbWU7CS8qIHVoX3RpbWUgb2YgdGhlIGxhc3QgaGVhZGVyIHVzZWQgcGx1cyAxIG9yCi0JCQkJICAgdWhfdGltZSBvZiBjdXJyZW50IGhlYWRlciAqLworICAgIGxvbmcJYl91X3NlcV9sYXN0OwkvKiBsYXN0IHVzZWQgdW5kbyBzZXF1ZW5jZSBudW1iZXIgKi8KKyAgICBsb25nCWJfdV9zZXFfY3VyOwkvKiBodV9zZXEgb2YgaGVhZGVyIGJlbG93IHdoaWNoIHdlIGFyZSBub3cgKi8KKyAgICB0aW1lX3QJYl91X3NlcV90aW1lOwkvKiB1aF90aW1lIG9mIGhlYWRlciBiZWxvdyB3aGljaCB3ZSBhcmUgbm93ICovCiAKICAgICAvKgogICAgICAqIHZhcmlhYmxlcyBmb3IgIlUiIGNvbW1hbmQgaW4gdW5kby5jCmRpZmYgLS1naXQgYS9zcmMvdW5kby5jIGIvc3JjL3VuZG8uYwppbmRleCAzMzA5MTVkLi41NTVkOWU1IDEwMDY0NAotLS0gYS9zcmMvdW5kby5jCisrKyBiL3NyYy91bmRvLmMKQEAgLTg3LDcgKzg3LDcgQEAKIHN0YXRpYyBpbnQgdW5kb19hbGxvd2VkIF9fQVJHUygodm9pZCkpOwogc3RhdGljIGludCB1X3NhdmVjb21tb24gX19BUkdTKChsaW5lbnJfVCwgbGluZW5yX1QsIGxpbmVucl9UKSk7CiBzdGF0aWMgdm9pZCB1X2RvaXQgX19BUkdTKChpbnQgY291bnQpKTsKLXN0YXRpYyB2b2lkIHVfdW5kb3JlZG8gX19BUkdTKCh2b2lkKSk7CitzdGF0aWMgdm9pZCB1X3VuZG9yZWRvIF9fQVJHUygoaW50IHVuZG8pKTsKIHN0YXRpYyB2b2lkIHVfdW5kb19lbmQgX19BUkdTKCh2b2lkKSk7CiBzdGF0aWMgdm9pZCB1X2FkZF90aW1lIF9fQVJHUygoY2hhcl91ICpidWYsIHNpemVfdCBidWZsZW4sIHRpbWVfdCB0dCkpOwogc3RhdGljIHZvaWQgdV9mcmVlaGVhZGVyIF9fQVJHUygoYnVmX1QgKmJ1ZiwgdV9oZWFkZXJfVCAqdWhwLCB1X2hlYWRlcl9UICoqdWhwcCkpOwpAQCAtMzUwLDggKzM1MCw4IEBACiAJaWYgKGN1cmJ1Zi0+Yl91X25ld2hlYWQgIT0gTlVMTCkKIAkgICAgY3VyYnVmLT5iX3VfbmV3aGVhZC0+dWhfcHJldiA9IHVocDsKIAotCXVocC0+dWhfc2VxID0gY3VyYnVmLT5iX3Vfc2VxX2xhc3QrKzsKLQljdXJidWYtPmJfdV9zZXFfY3VyID0gY3VyYnVmLT5iX3Vfc2VxX2xhc3Q7CisJdWhwLT51aF9zZXEgPSArK2N1cmJ1Zi0+Yl91X3NlcV9sYXN0OworCWN1cmJ1Zi0+Yl91X3NlcV9jdXIgPSB1aHAtPnVoX3NlcTsKIAl1aHAtPnVoX3RpbWUgPSB0aW1lKE5VTEwpOwogCWN1cmJ1Zi0+Yl91X3NlcV90aW1lID0gdWhwLT51aF90aW1lICsgMTsKIApAQCAtNTc5LDkgKzU3OSwxMSBAQAogICogVW5kbyBvciByZWRvLCBkZXBlbmRpbmcgb24gJ3VuZG9fdW5kb2VzJywgJ2NvdW50JyB0aW1lcy4KICAqLwogICAgIHN0YXRpYyB2b2lkCi11X2RvaXQoY291bnQpCi0gICAgaW50IGNvdW50OwordV9kb2l0KHN0YXJ0Y291bnQpCisgICAgaW50IHN0YXJ0Y291bnQ7CiB7CisgICAgaW50IGNvdW50ID0gc3RhcnRjb3VudDsKKwogICAgIGlmICghdW5kb19hbGxvd2VkKCkpCiAJcmV0dXJuOwogCkBAIC02MDQsMjIgKzYwNiwzMCBAQAogCQkvKiBzdGljayBjdXJidWYtPmJfdV9jdXJoZWFkIGF0IGVuZCAqLwogCQljdXJidWYtPmJfdV9jdXJoZWFkID0gY3VyYnVmLT5iX3Vfb2xkaGVhZDsKIAkJYmVlcF9mbHVzaCgpOworCQlpZiAoY291bnQgPT0gc3RhcnRjb3VudCAtIDEpCisJCXsKKwkJICAgIE1TRyhfKCJBbHJlYWR5IGF0IG9sZGVzdCBjaGFuZ2UiKSk7CisJCSAgICByZXR1cm47CisJCX0KIAkJYnJlYWs7CiAJICAgIH0KIAotCSAgICB1X3VuZG9yZWRvKCk7CisJICAgIHVfdW5kb3JlZG8oVFJVRSk7CiAJfQogCWVsc2UKIAl7CiAJICAgIGlmIChjdXJidWYtPmJfdV9jdXJoZWFkID09IE5VTEwgfHwgcF91bCA8PSAwKQogCSAgICB7CiAJCWJlZXBfZmx1c2goKTsJLyogbm90aGluZyB0byByZWRvICovCisJCWlmIChjb3VudCA9PSBzdGFydGNvdW50IC0gMSkKKwkJeworCQkgICAgTVNHKF8oIkFscmVhZHkgYXQgbmV3ZXN0IGNoYW5nZSIpKTsKKwkJICAgIHJldHVybjsKKwkJfQogCQlicmVhazsKIAkgICAgfQogCi0JICAgIHVfdW5kb3JlZG8oKTsKLQkgICAgKytjdXJidWYtPmJfdV9zZXFfY3VyOwotCSAgICArK2N1cmJ1Zi0+Yl91X3NlcV90aW1lOworCSAgICB1X3VuZG9yZWRvKEZBTFNFKTsKIAogCSAgICAvKiBBZHZhbmNlIGZvciBuZXh0IHJlZG8uICBTZXQgIm5ld2hlYWQiIHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUKIAkgICAgICogcmVkb2FibGUgY2hhbmdlcy4gKi8KQEAgLTY1Miw3ICs2NjIsNiBAQAogICAgIGxvbmcJICAgIGNsb3Nlc3Rfc3RhcnQ7CiAgICAgbG9uZwkgICAgY2xvc2VzdF9zZXEgPSAwOwogICAgIGxvbmcJICAgIHZhbDsKLSAgICBsb25nCSAgICBsaW1pdDsKICAgICB1X2hlYWRlcl9UCSAgICAqdWhwOwogICAgIHVfaGVhZGVyX1QJICAgICpsYXN0OwogICAgIGludAkJICAgIG1hcms7CkBAIC02NzAsNDMgKzY3OSwzOSBAQAogICAgIGlmIChjdXJidWYtPmJfbWwubWxfZmxhZ3MgJiBNTF9FTVBUWSkKIAl1X29sZGNvdW50ID0gLTE7CiAKLSAgICAvKiAidGFyZ2V0IiBpcyB0aGUgbm9kZSBiZWxvdyB3aGljaCB3ZSB3YW50IHRvIGJlLiAgV2hlbiBnb2luZyBmb3J3YXJkCi0gICAgICogdGhlIGN1cnJlbnQgb25lIGFsc28gY291bnRzLCB0aHVzIGRvIG9uZSBsZXNzLiAqLworICAgIC8qICJ0YXJnZXQiIGlzIHRoZSBub2RlIGJlbG93IHdoaWNoIHdlIHdhbnQgdG8gYmUuCisgICAgICogSW5pdCAiY2xvc2VzdCIgdG8gYSB2YWx1ZSB3ZSBjYW4ndCByZWFjaC4gKi8KICAgICBpZiAoYWJzb2x1dGUpCiAgICAgewogCXRhcmdldCA9IHN0ZXA7Ci0JY2xvc2VzdCA9IC0yOworCWNsb3Nlc3QgPSAtMTsKICAgICB9Ci0gICAgZWxzZSBpZiAoc3RlcCA8IDApCisgICAgZWxzZQogICAgIHsKKwkvKiBXaGVuIGRvaW5nIGNvbXB1dGF0aW9ucyB3aXRoIHRpbWVfdCBzdWJ0cmFjdCBzdGFydHRpbWUsIGJlY2F1c2UKKwkgKiB0aW1lX3QgY29udmVydGVkIHRvIGEgbG9uZyBtYXkgcmVzdWx0IGluIGEgd3JvbmcgbnVtYmVyLiAqLwogCWlmIChzZWMpCi0JICAgIHRhcmdldCA9IChsb25nKWN1cmJ1Zi0+Yl91X3NlcV90aW1lICsgc3RlcDsKKwkgICAgdGFyZ2V0ID0gKGxvbmcpKGN1cmJ1Zi0+Yl91X3NlcV90aW1lIC0gc3RhcnR0aW1lKSArIHN0ZXA7CiAJZWxzZQogCSAgICB0YXJnZXQgPSBjdXJidWYtPmJfdV9zZXFfY3VyICsgc3RlcDsKLQlpZiAodGFyZ2V0IDwgMCkKLQkgICAgdGFyZ2V0ID0gLTE7Ci0JY2xvc2VzdCA9IC0yOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotCWlmIChzZWMpCisJaWYgKHN0ZXAgPCAwKQogCXsKLQkgICAgdGFyZ2V0ID0gY3VyYnVmLT5iX3Vfc2VxX3RpbWUgKyBzdGVwIC0gMTsKLQkgICAgY2xvc2VzdCA9IHRpbWUoTlVMTCkgKyAxOworCSAgICBpZiAodGFyZ2V0IDwgMCkKKwkJdGFyZ2V0ID0gMDsKKwkgICAgY2xvc2VzdCA9IC0xOwogCX0KIAllbHNlCiAJewotCSAgICB0YXJnZXQgPSBjdXJidWYtPmJfdV9zZXFfY3VyICsgc3RlcCAtIDE7Ci0JICAgIGNsb3Nlc3QgPSBjdXJidWYtPmJfdV9zZXFfbGFzdCArIDE7CisJICAgIGlmIChzZWMpCisJCWNsb3Nlc3QgPSB0aW1lKE5VTEwpIC0gc3RhcnR0aW1lICsgMTsKKwkgICAgZWxzZQorCQljbG9zZXN0ID0gY3VyYnVmLT5iX3Vfc2VxX2xhc3QgKyAyOworCSAgICBpZiAodGFyZ2V0ID49IGNsb3Nlc3QpCisJCXRhcmdldCA9IGNsb3Nlc3QgLSAxOwogCX0KLQlpZiAodGFyZ2V0ID49IGNsb3Nlc3QpCi0JICAgIHRhcmdldCA9IGNsb3Nlc3QgLSAxOwogICAgIH0KICAgICBjbG9zZXN0X3N0YXJ0ID0gY2xvc2VzdDsKLSAgICBpZiAoc2VjKQotCWxpbWl0ID0gY3VyYnVmLT5iX3Vfc2VxX3RpbWUgKyAoc3RlcCA+IDAgPyAtMSA6IDEpOwotICAgIGVsc2UKLQlsaW1pdCA9IGN1cmJ1Zi0+Yl91X3NlcV9jdXI7CisgICAgY2xvc2VzdF9zZXEgPSBjdXJidWYtPmJfdV9zZXFfY3VyOwogCiAgICAgLyoKICAgICAgKiBNYXkgZG8gdGhpcyB0d2ljZToKQEAgLTczMywyNyArNzM4LDI4IEBACiAJd2hpbGUgKHVocCAhPSBOVUxMKQogCXsKIAkgICAgdWhwLT51aF93YWxrID0gbWFyazsKLQkgICAgdmFsID0gKGRvc2VjID8gdWhwLT51aF90aW1lIDogdWhwLT51aF9zZXEpOworCSAgICB2YWwgPSAoZG9zZWMgPyAodWhwLT51aF90aW1lIC0gc3RhcnR0aW1lKSA6IHVocC0+dWhfc2VxKTsKIAogCSAgICBpZiAocm91bmQgPT0gMSkKIAkgICAgewogCQkvKiBSZW1lbWJlciB0aGUgaGVhZGVyIHRoYXQgaXMgY2xvc2VzdCB0byB0aGUgdGFyZ2V0LgogCQkgKiBJdCBtdXN0IGJlIGF0IGxlYXN0IGluIHRoZSByaWdodCBkaXJlY3Rpb24gKGNoZWNrZWQgd2l0aAotCQkgKiAibGltaXQiKS4gIFdoZW4gdGhlIHRpbWVzdGFtcCBpcyBlcXVhbCBmaW5kIHRoZQorCQkgKiAiYl91X3NlcV9jdXIiKS4gIFdoZW4gdGhlIHRpbWVzdGFtcCBpcyBlcXVhbCBmaW5kIHRoZQogCQkgKiBoaWdoZXN0L2xvd2VzdCBzZXF1ZW5jZSBudW1iZXIuICovCi0JCWlmICgoZG9zZWMgJiYgdmFsID09IGNsb3Nlc3QpCi0JCQk/IChzdGVwIDwgMAotCQkJICAgID8gdWhwLT51aF9zZXEgPCBjbG9zZXN0X3NlcQotCQkJICAgIDogdWhwLT51aF9zZXEgPiBjbG9zZXN0X3NlcSkKLQkJCTogKHN0ZXAgPCAwCi0JCQkgICAgPyAodmFsIDwgbGltaXQKLQkJCQkmJiAoY2xvc2VzdCA+IHRhcmdldAotCQkJCSAgICA/ICh2YWwgPD0gY2xvc2VzdCkKLQkJCQkgICAgOiAodmFsID49IGNsb3Nlc3QpKSkKLQkJCSAgICA6ICh2YWwgPiBsaW1pdAotCQkJCSYmIChjbG9zZXN0IDwgdGFyZ2V0Ci0JCQkJICAgID8gdmFsID49IGNsb3Nlc3QKLQkJCQkgICAgOiB2YWwgPD0gY2xvc2VzdCkpKSkKKwkJaWYgKChzdGVwIDwgMCA/IHVocC0+dWhfc2VxIDw9IGN1cmJ1Zi0+Yl91X3NlcV9jdXIKKwkJCSAgICAgIDogdWhwLT51aF9zZXEgPiBjdXJidWYtPmJfdV9zZXFfY3VyKQorCQkJJiYgKChkb3NlYyAmJiB2YWwgPT0gY2xvc2VzdCkKKwkJCSAgICA/IChzdGVwIDwgMAorCQkJCT8gdWhwLT51aF9zZXEgPCBjbG9zZXN0X3NlcQorCQkJCTogdWhwLT51aF9zZXEgPiBjbG9zZXN0X3NlcSkKKwkJCSAgICA6IGNsb3Nlc3QgPT0gY2xvc2VzdF9zdGFydAorCQkJCXx8ICh2YWwgPiB0YXJnZXQKKwkJCQkgICAgPyAoY2xvc2VzdCA+IHRhcmdldAorCQkJCQk/IHZhbCAtIHRhcmdldCA8PSBjbG9zZXN0IC0gdGFyZ2V0CisJCQkJCTogdmFsIC0gdGFyZ2V0IDw9IHRhcmdldCAtIGNsb3Nlc3QpCisJCQkJICAgIDogKGNsb3Nlc3QgPiB0YXJnZXQKKwkJCQkJPyB0YXJnZXQgLSB2YWwgPD0gY2xvc2VzdCAtIHRhcmdldAorCQkJCQk6IHRhcmdldCAtIHZhbCA8PSB0YXJnZXQgLSBjbG9zZXN0KSkpKQogCQl7CiAJCSAgICBjbG9zZXN0ID0gdmFsOwogCQkgICAgY2xvc2VzdF9zZXEgPSB1aHAtPnVoX3NlcTsKQEAgLTgzMCwxOSArODM2LDEyIEBACiAJICAgIGlmICh1aHAgPT0gTlVMTCkKIAkJdWhwID0gY3VyYnVmLT5iX3VfbmV3aGVhZDsKIAkgICAgZWxzZQotCSAgICB7Ci0JCXdoaWxlICh1aHAtPnVoX2FsdF9wcmV2ICE9IE5VTEwKLQkJCQkJICYmIHVocC0+dWhfYWx0X3ByZXYtPnVoX3dhbGsgPT0gbWFyaykKLQkJewotCQkgICAgdWhwLT51aF93YWxrID0gbm9tYXJrOwotCQkgICAgdWhwID0gdWhwLT51aF9hbHRfcHJldjsKLQkJfQogCQl1aHAgPSB1aHAtPnVoX25leHQ7Ci0JICAgIH0KLQkgICAgaWYgKHVocCA9PSBOVUxMIHx8IHVocC0+dWhfd2FsayAhPSBtYXJrKQorCSAgICBpZiAodWhwID09IE5VTEwgfHwgdWhwLT51aF93YWxrICE9IG1hcmsKKwkJCQkJIHx8ICh1aHAtPnVoX3NlcSA9PSB0YXJnZXQgJiYgIWFib3ZlKSkKIAkJYnJlYWs7CiAJICAgIGN1cmJ1Zi0+Yl91X2N1cmhlYWQgPSB1aHA7Ci0JICAgIHVfdW5kb3JlZG8oKTsKKwkgICAgdV91bmRvcmVkbyhUUlVFKTsKIAkgICAgdWhwLT51aF93YWxrID0gbm9tYXJrOwkvKiBkb24ndCBnbyBiYWNrIGRvd24gaGVyZSAqLwogCX0KIApAQCAtODUwLDcgKzg0OSw3IEBACiAJICogQW5kIG5vdyBnbyBkb3duIHRoZSB0cmVlIChyZWRvKSwgYnJhbmNoaW5nIG9mZiB3aGVyZSBuZWVkZWQuCiAJICovCiAJdWhwID0gY3VyYnVmLT5iX3VfY3VyaGVhZDsKLQlmb3IgKDs7KQorCXdoaWxlICh1aHAgIT0gTlVMTCkKIAl7CiAJICAgIC8qIEZpbmQgdGhlIGxhc3QgYnJhbmNoIHdpdGggYSBtYXJrLCB0aGF0J3MgdGhlIG9uZS4gKi8KIAkgICAgbGFzdCA9IHVocDsKQEAgLTg2OSwxMCArODY4LDEwIEBACiAJCXVocC0+dWhfYWx0X3ByZXYgPSBsYXN0OwogCiAJCXVocCA9IGxhc3Q7CisJCWlmICh1aHAtPnVoX25leHQgIT0gTlVMTCkKKwkJICAgIHVocC0+dWhfbmV4dC0+dWhfcHJldiA9IHVocDsKIAkgICAgfQogCSAgICBjdXJidWYtPmJfdV9jdXJoZWFkID0gdWhwOwotCSAgICBjdXJidWYtPmJfdV9zZXFfY3VyID0gdWhwLT51aF9zZXE7Ci0JICAgIGN1cmJ1Zi0+Yl91X3NlcV90aW1lID0gdWhwLT51aF90aW1lOwogCiAJICAgIGlmICh1aHAtPnVoX3dhbGsgIT0gbWFyaykKIAkJYnJlYWs7CSAgICAvKiBtdXN0IGhhdmUgcmVhY2hlZCB0aGUgdGFyZ2V0ICovCkBAIC04ODIsOSArODgxLDcgQEAKIAkgICAgaWYgKHVocC0+dWhfc2VxID09IHRhcmdldCAmJiBhYm92ZSkKIAkJYnJlYWs7CiAKLQkgICAgdV91bmRvcmVkbygpOwotCSAgICArK2N1cmJ1Zi0+Yl91X3NlcV9jdXI7Ci0JICAgICsrY3VyYnVmLT5iX3Vfc2VxX3RpbWU7CisJICAgIHVfdW5kb3JlZG8oRkFMU0UpOwogCiAJICAgIC8qIEFkdmFuY2UgImN1cmhlYWQiIHRvIGJlbG93IHRoZSBoZWFkZXIgd2UgbGFzdCB1c2VkLiAgSWYgaXQKIAkgICAgICogYmVjb21lcyBOVUxMIHRoZW4gd2UgbmVlZCB0byBzZXQgIm5ld2hlYWQiIHRvIHRoaXMgbGVhZi4gKi8KQEAgLTg5OCw2ICs4OTUsNyBAQAogCSAgICB1aHAgPSB1aHAtPnVoX3ByZXY7CiAJICAgIGlmICh1aHAgPT0gTlVMTCB8fCB1aHAtPnVoX3dhbGsgIT0gbWFyaykKIAkgICAgeworCQkvKiBOZWVkIHRvIHJlZG8gbW9yZSBidXQgY2FuJ3QgZmluZCBpdC4uLiAqLwogCQlFTVNHMihfKGVfaW50ZXJuMiksICJ1bmRvX3RpbWUoKSIpOwogCQlicmVhazsKIAkgICAgfQpAQCAtOTEyLDkgKzkxMCwxMiBAQAogICogVGhlIGxpbmVzIGluIHRoZSBmaWxlIGFyZSByZXBsYWNlZCBieSB0aGUgbGluZXMgaW4gdGhlIGVudHJ5IGxpc3QgYXQKICAqIGN1cmJ1Zi0+Yl91X2N1cmhlYWQuIFRoZSByZXBsYWNlZCBsaW5lcyBpbiB0aGUgZmlsZSBhcmUgc2F2ZWQgaW4gdGhlIGVudHJ5CiAgKiBsaXN0IGZvciB0aGUgbmV4dCB1bmRvL3JlZG8uCisgKgorICogV2hlbiAidW5kbyIgaXMgVFJVRSB3ZSBnbyB1cCBpbiB0aGUgdHJlZSwgd2hlbiBGQUxTRSB3ZSBnbyBkb3duLgogICovCiAgICAgc3RhdGljIHZvaWQKLXVfdW5kb3JlZG8oKQordV91bmRvcmVkbyh1bmRvKQorICAgIGludAkJdW5kbzsKIHsKICAgICBjaGFyX3UJKipuZXdhcnJheSA9IE5VTEw7CiAgICAgbGluZW5yX1QJb2xkc2l6ZTsKQEAgLTExNTcsNiArMTE1OCwxMyBAQAogCiAgICAgLyogUmVtZW1iZXIgd2hlcmUgd2UgYXJlIGZvciAiZy0iIGFuZCAiOmVhcmxpZXIgMTBzIi4gKi8KICAgICBjdXJidWYtPmJfdV9zZXFfY3VyID0gY3VyaGVhZC0+dWhfc2VxOworICAgIGlmICh1bmRvKQorCS8qIFdlIGFyZSBiZWxvdyB0aGUgcHJldmlvdXMgdW5kby4gIEhvd2V2ZXIsIHRvIG1ha2UgIjplYXJsaWVyIDFzIgorCSAqIHdvcmsgd2UgY29tcHV0ZSB0aGlzIGFzIGJlaW5nIGp1c3QgYWJvdmUgdGhlIGp1c3QgdW5kb25lIGNoYW5nZS4gKi8KKwktLWN1cmJ1Zi0+Yl91X3NlcV9jdXI7CisKKyAgICAvKiBUaGUgdGltZXN0YW1wIGNhbiBiZSB0aGUgc2FtZSBmb3IgbXVsdGlwbGUgY2hhbmdlcywganVzdCB1c2UgdGhlIG9uZSBvZgorICAgICAqIHRoZSB1bmRvbmUvcmVkb25lIGNoYW5nZS4gKi8KICAgICBjdXJidWYtPmJfdV9zZXFfdGltZSA9IGN1cmhlYWQtPnVoX3RpbWU7CiB9CiAKQEAgLTEyMTIsOCArMTIyMCw5IEBACiAgICAgZWxzZQogCXVfYWRkX3RpbWUobXNnYnVmLCBzaXplb2YobXNnYnVmKSwgdWhwLT51aF90aW1lKTsKIAotICAgIHNtc2coKGNoYXJfdSAqKV8oIiVsZCAlczsgIyVsZCAgJXMiKSwgdV9vbGRjb3VudCwgXyhtc2cpLAotCQkJCSAgICAgIHVocCA9PSBOVUxMID8gMEwgOiB1aHAtPnVoX3NlcSwgbXNnYnVmKTsKKyAgICBzbXNnKChjaGFyX3UgKilfKCIlbGQgJXM7ICMlbGQgICVzIiksCisJICAgIHVfb2xkY291bnQgPCAwID8gLXVfb2xkY291bnQgOiB1X29sZGNvdW50LAorCSAgICBfKG1zZyksIHVocCA9PSBOVUxMID8gMEwgOiB1aHAtPnVoX3NlcSwgbXNnYnVmKTsKIH0KIAogLyoKQEAgLTEyNjQsNyArMTI3Myw4IEBACiAgICAgdWhwID0gY3VyYnVmLT5iX3Vfb2xkaGVhZDsKICAgICB3aGlsZSAodWhwICE9IE5VTEwpCiAgICAgewotCWlmICh1aHAtPnVoX3ByZXYgPT0gTlVMTCkKKwlpZiAodWhwLT51aF9wcmV2ID09IE5VTEwgJiYgdWhwLT51aF93YWxrICE9IG5vbWFyaworCQkJCQkJICAgICAgJiYgdWhwLT51aF93YWxrICE9IG1hcmspCiAJewogCSAgICBpZiAoZ2FfZ3JvdygmZ2EsIDEpID09IEZBSUwpCiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL3ZlcnNpb24uaCBiL3NyYy92ZXJzaW9uLmgKaW5kZXggMTkzMzNmMi4uOTJmNzQxMSAxMDA2NDQKLS0tIGEvc3JjL3ZlcnNpb24uaAorKysgYi9zcmMvdmVyc2lvbi5oCkBAIC0zNiw1ICszNiw1IEBACiAjZGVmaW5lIFZJTV9WRVJTSU9OX05PRE9UCSJ2aW03MGFhIgogI2RlZmluZSBWSU1fVkVSU0lPTl9TSE9SVAkiNy4wYWEiCiAjZGVmaW5lIFZJTV9WRVJTSU9OX01FRElVTQkiNy4wYWEgQUxQSEEiCi0jZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkcJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGFhIEFMUEhBICgyMDA2IE1hciAxNikiCi0jZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkdfREFURQkiVklNIC0gVmkgSU1wcm92ZWQgNy4wYWEgQUxQSEEgKDIwMDYgTWFyIDE2LCBjb21waWxlZCAiCisjZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkcJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGFhIEFMUEhBICgyMDA2IE1hciAxNykiCisjZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkdfREFURQkiVklNIC0gVmkgSU1wcm92ZWQgNy4wYWEgQUxQSEEgKDIwMDYgTWFyIDE3LCBjb21waWxlZCAiCg==