ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2NtZGxpbmUudHh0IGIvcnVudGltZS9kb2MvY21kbGluZS50eHQKaW5kZXggMmNlZDIxYS4uNDNmNzIxOSAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvY21kbGluZS50eHQKKysrIGIvcnVudGltZS9kb2MvY21kbGluZS50eHQKQEAgLTEsNCArMSw0IEBACi0qY21kbGluZS50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgSmFuIDEzCisqY21kbGluZS50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgRmViIDE0CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0xNyw4ICsxNyw5IEBACiAyLiBDb21tYW5kLWxpbmUgY29tcGxldGlvbgl8Y21kbGluZS1jb21wbGV0aW9ufAogMy4gRXggY29tbWFuZC1saW5lcwkJfGNtZGxpbmUtbGluZXN8CiA0LiBFeCBjb21tYW5kLWxpbmUgcmFuZ2VzCXxjbWRsaW5lLXJhbmdlc3wKLTUuIEV4IHNwZWNpYWwgY2hhcmFjdGVycwl8Y21kbGluZS1zcGVjaWFsfAotNi4gQ29tbWFuZC1saW5lIHdpbmRvdwkJfGNtZGxpbmUtd2luZG93fAorNS4gRXggY29tbWFuZC1saW5lIGZsYWdzCXxleC1mbGFnc3wKKzYuIEV4IHNwZWNpYWwgY2hhcmFjdGVycwl8Y21kbGluZS1zcGVjaWFsfAorNy4gQ29tbWFuZC1saW5lIHdpbmRvdwkJfGNtZGxpbmUtd2luZG93fAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIDEuIENvbW1hbmQtbGluZSBlZGl0aW5nCQkJCQkqY21kbGluZS1lZGl0aW5nKgpAQCAtNjY4LDcgKzY2OSwyMCBAQAogCQlsaW5lcy4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci01LiBFeCBzcGVjaWFsIGNoYXJhY3RlcnMJCQkJKmNtZGxpbmUtc3BlY2lhbCoKKzUuIEV4IGNvbW1hbmQtbGluZSBmbGFncwkJCQkqZXgtZmxhZ3MqCisKK1RoZXNlIGZsYWdzIGFyZSBzdXBwb3J0ZWQgYnkgYSBzZWxlY3Rpb24gb2YgRXggY29tbWFuZHMuICBUaGV5IHByaW50IHRoZSBsaW5lCit0aGF0IHRoZSBjdXJzb3IgZW5kcyB1cCBhZnRlciBleGVjdXRpbmcgdGhlIGNvbW1hbmQ6CisKKwlsCW91dHB1dCBsaWtlIGZvciB8Omxpc3R8CisJIwlhZGQgbGluZSBudW1iZXIKKwlwCW91dHB1dCBsaWtlIGZvciB8OnByaW50fAorCitUaGUgZmxhZ3MgY2FuIGJlIGNvbWJpbmVkLCB0aHVzICJsIyIgdXNlcyBib3RoIGEgbGluZSBudW1iZXIgYW5kIHw6bGlzdHwgc3R5bGUKK291dHB1dC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBFeCBzcGVjaWFsIGNoYXJhY3RlcnMJCQkJKmNtZGxpbmUtc3BlY2lhbCoKIAogSW4gRXggY29tbWFuZHMsIGF0IHBsYWNlcyB3aGVyZSBhIGZpbGUgbmFtZSBjYW4gYmUgdXNlZCwgdGhlIGZvbGxvd2luZwogY2hhcmFjdGVycyBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nLiAgVGhlc2UgY2FuIGFsc28gYmUgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvZWRpdGluZy50eHQgYi9ydW50aW1lL2RvYy9lZGl0aW5nLnR4dAppbmRleCBhZTc1NDNlLi4zZmI0ZTU0IDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9lZGl0aW5nLnR4dAorKysgYi9ydW50aW1lL2RvYy9lZGl0aW5nLnR4dApAQCAtMSw0ICsxLDQgQEAKLSplZGl0aW5nLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNSBGZWIgMDcKKyplZGl0aW5nLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNSBGZWIgMTQKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTExNDMsMTMgKzExNDMsMTYgQEAKIHlvdSB3aWxsIG5vdCBoYXZlIHRvIHR5cGUgdGhhdCBkaXJlY3RvcnkgbmFtZSBpbiBmcm9udCBvZiB0aGUgZmlsZSBuYW1lcy4gIEl0CiBhbHNvIG1ha2VzIGEgZGlmZmVyZW5jZSBmb3IgZXhlY3V0aW5nIGV4dGVybmFsIGNvbW1hbmRzLCBlLmcuICI6IWxzIi4KIAorQ2hhbmdpbmcgZGlyZWN0b3J5IGZhaWxzIHdoZW4gdGhlIGN1cnJlbnQgYnVmZmVyIGlzIG1vZGlmaWVkLCB0aGUgJy4nIGZsYWcgaXMKK3ByZXNlbnQgaW4gJ2Nwb3B0aW9ucycgYW5kICIhIiBpcyBub3QgdXNlZCBpbiB0aGUgY29tbWFuZC4KKwogCQkJCQkJCSo6Y2QqICpFNDcyKgotOmNkCQkJT24gbm9uLVVuaXggc3lzdGVtczogUHJpbnQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5Cis6Y2RbIV0JCQlPbiBub24tVW5peCBzeXN0ZW1zOiBQcmludCB0aGUgY3VycmVudCBkaXJlY3RvcnkKIAkJCW5hbWUuICBPbiBVbml4IHN5c3RlbXM6IENoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkKIAkJCXRvIHRoZSBob21lIGRpcmVjdG9yeS4gIFVzZSB8OnB3ZHwgdG8gcHJpbnQgdGhlCiAJCQljdXJyZW50IGRpcmVjdG9yeSBvbiBhbGwgc3lzdGVtcy4KIAotOmNkIHtwYXRofQkJQ2hhbmdlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byB7cGF0aH0uCis6Y2RbIV0ge3BhdGh9CQlDaGFuZ2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRvIHtwYXRofS4KIAkJCUlmIHtwYXRofSBpcyByZWxhdGl2ZSwgaXQgaXMgc2VhcmNoZWQgZm9yIGluIHRoZQogCQkJZGlyZWN0b3JpZXMgbGlzdGVkIGluIHwnY2RwYXRoJ3wuCiAJCQlEb2VzIG5vdCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgYW4gYWxyZWFkeSBvcGVuZWQgZmlsZSwKQEAgLTExNjAsMTkgKzExNjMsMTkgQEAKIAkJCQk6Y2QgJTpoCiA8CiAJCQkJCQkJKjpjZC0qICpFMTg2KgotOmNkIC0JCQlDaGFuZ2UgdG8gdGhlIHByZXZpb3VzIGN1cnJlbnQgZGlyZWN0b3J5IChiZWZvcmUgdGhlCis6Y2RbIV0gLQkJQ2hhbmdlIHRvIHRoZSBwcmV2aW91cyBjdXJyZW50IGRpcmVjdG9yeSAoYmVmb3JlIHRoZQogCQkJcHJldmlvdXMgIjpjZCB7cGF0aH0iIGNvbW1hbmQpLiB7bm90IGluIFZpfQogCiAJCQkJCQkJKjpjaGQqICo6Y2hkaXIqCi06Y2hkW2lyXSBbcGF0aF0JCVNhbWUgYXMgfDpjZHwuCis6Y2hkW2lyXVshXSBbcGF0aF0JU2FtZSBhcyB8OmNkfC4KIAogCQkJCQkJCSo6bGMqICo6bGNkKgotOmxjW2RdIHtwYXRofQkJTGlrZSB8OmNkfCwgYnV0IG9ubHkgc2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlCis6bGNbZF1bIV0ge3BhdGh9CUxpa2UgfDpjZHwsIGJ1dCBvbmx5IHNldCB0aGUgY3VycmVudCBkaXJlY3RvcnkgZm9yIHRoZQogCQkJY3VycmVudCB3aW5kb3cuICBUaGUgY3VycmVudCBkaXJlY3RvcnkgZm9yIG90aGVyCiAJCQl3aW5kb3dzIGlzIG5vdCBjaGFuZ2VkLiB7bm90IGluIFZpfQogCiAJCQkJCQkJKjpsY2gqICo6bGNoZGlyKgotOmxjaFtkaXJdCQlTYW1lIGFzIHw6bGNkfC4ge25vdCBpbiBWaX0KKzpsY2hbZGlyXVshXQkJU2FtZSBhcyB8OmxjZHwuIHtub3QgaW4gVml9CiAKIAkJCQkJCQkqOnB3KiAqOnB3ZCogKkUxODcqCiA6cHdbZF0JCQlQcmludCB0aGUgY3VycmVudCBkaXJlY3RvcnkgbmFtZS4gIHtWaTogbm8gcHdkfQpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvZ3VpX3czMi50eHQgYi9ydW50aW1lL2RvYy9ndWlfdzMyLnR4dAppbmRleCA1ZGRlZDdhLi4wNzgxN2FiIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9ndWlfdzMyLnR4dAorKysgYi9ydW50aW1lL2RvYy9ndWlfdzMyLnR4dApAQCAtMSw0ICsxLDQgQEAKLSpndWlfdzMyLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNSBKYW4gMDcKKypndWlfdzMyLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNSBGZWIgMTQKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTIzNSw3ICsyMzUsNyBAQAogCiBDVFJMLVogaXMgdXNlZCBmb3IgdW5kby4gIFRoaXMgbWVhbnMgeW91IGNhbid0IHN1c3BlbmQgVmltLgogCi0JCQkJCQkJKkNUUkwtVi1hbHRlcm5hdGl2ZSoKKwkJCQkJCSpDVFJMLVYtYWx0ZXJuYXRpdmUqICpDVFJMLVEqCiBTaW5jZSBDVFJMLVYgaXMgdXNlZCB0byBwYXN0ZSwgeW91IGNhbid0IHVzZSBpdCB0byBzdGFydCBhIGJsb2Nrd2lzZSBWaXN1YWwKIHNlbGVjdGlvbi4gIFlvdSBjYW4gdXNlIENUUkwtUSBpbnN0ZWFkLiAgWW91IGNhbiBhbHNvIHVzZSBDVFJMLVEgaW4gSW5zZXJ0CiBtb2RlIGFuZCBDb21tYW5kLWxpbmUgbW9kZSB0byBnZXQgdGhlIG9sZCBtZWFuaW5nIG9mIENUUkwtVi4gIEJ1dCBDVFJMLVEKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2luc2VydC50eHQgYi9ydW50aW1lL2RvYy9pbnNlcnQudHh0CmluZGV4IGZhZDk2OGYuLjE5YjczNTcgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL2luc2VydC50eHQKKysrIGIvcnVudGltZS9kb2MvaW5zZXJ0LnR4dApAQCAtMSw0ICsxLDQgQEAKLSppbnNlcnQudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNSBGZWIgMDgKKyppbnNlcnQudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNSBGZWIgMjEKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTk3MCwxOCArOTcwLDI5IEBACiA5LiBFeCBpbnNlcnQgY29tbWFuZHMJCQkJCSppbnNlcnRpbmctZXgqCiAKIAkJCQkJCQkqOmEqICo6YXBwZW5kKgotOntyYW5nZX1hW3BwZW5kXQlJbnNlcnQgc2V2ZXJhbCBsaW5lcyBvZiB0ZXh0IGJlbG93IHRoZSBzcGVjaWZpZWQKKzp7cmFuZ2V9YVtwcGVuZF1bIV0JSW5zZXJ0IHNldmVyYWwgbGluZXMgb2YgdGV4dCBiZWxvdyB0aGUgc3BlY2lmaWVkCiAJCQlsaW5lLiAgSWYgdGhlIHtyYW5nZX0gaXMgbWlzc2luZywgdGhlIHRleHQgd2lsbCBiZQogCQkJaW5zZXJ0ZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZS4KKwkJCUFkZGluZyBbIV0gdG9nZ2xlcyAnYXV0b2luZGVudCcgZm9yIHRoZSB0aW1lIHRoaXMKKwkJCWNvbW1hbmQgaXMgZXhlY3V0ZWQuCiAKIAkJCQkJCQkqOmkqICo6aW4qICo6aW5zZXJ0KgotOntyYW5nZX1pW25zZXJ0XQlJbnNlcnQgc2V2ZXJhbCBsaW5lcyBvZiB0ZXh0IGFib3ZlIHRoZSBzcGVjaWZpZWQKKzp7cmFuZ2V9aVtuc2VydF1bIV0JSW5zZXJ0IHNldmVyYWwgbGluZXMgb2YgdGV4dCBhYm92ZSB0aGUgc3BlY2lmaWVkCiAJCQlsaW5lLiAgSWYgdGhlIHtyYW5nZX0gaXMgbWlzc2luZywgdGhlIHRleHQgd2lsbCBiZQogCQkJaW5zZXJ0ZWQgYmVmb3JlIHRoZSBjdXJyZW50IGxpbmUuCisJCQlBZGRpbmcgWyFdIHRvZ2dsZXMgJ2F1dG9pbmRlbnQnIGZvciB0aGUgdGltZSB0aGlzCisJCQljb21tYW5kIGlzIGV4ZWN1dGVkLgogCiBUaGVzZSB0d28gY29tbWFuZHMgd2lsbCBrZWVwIG9uIGFza2luZyBmb3IgbGluZXMsIHVudGlsIHlvdSB0eXBlIGEgbGluZQogY29udGFpbmluZyBvbmx5IGEgIi4iLiAgV2F0Y2ggb3V0IGZvciBsaW5lcyBzdGFydGluZyB3aXRoIGEgYmFja3NsYXNoLCBzZWUKIHxsaW5lLWNvbnRpbnVhdGlvbnwuCitXaGVuIHRoZXNlIGNvbW1hbmRzIGFyZSB1c2VkIHdpdGggfDpnbG9iYWx8IG9yIHw6dmdsb2JhbHwgdGhlbiB0aGUgbGluZXMgYXJlCitvYnRhaW5lZCBmcm9tIHRoZSB0ZXh0IGZvbGxvd2luZyB0aGUgY29tbWFuZC4gIFNlcGFyYXRlIGxpbmVzIHdpdGggYSBOTAorZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoOiA+CisJOmdsb2JhbC9hYmMvaW5zZXJ0XAorCW9uZSBsaW5lXAorCWFub3RoZXIgbGluZQorVGhlIGZpbmFsICIuIiBpcyBub3QgbmVlZGVkIHRoZW4uCiBOT1RFOiAiOmFwcGVuZCIgYW5kICI6aW5zZXJ0IiBkb24ndCB3b3JrIHByb3Blcmx5IGluIGJldHdlZW4gIjppZiIgYW5kCiAiOmVuZGlmIiwgIjpmb3IiIGFuZCAiOmVuZGZvciIsICI6d2hpbGUiIGFuZCAiOmVuZHdoaWxlIi4KIApkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvbWJ5dGUudHh0IGIvcnVudGltZS9kb2MvbWJ5dGUudHh0CmluZGV4IDFlMTNiY2YuLmJlNjM2NTggMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL21ieXRlLnR4dAorKysgYi9ydW50aW1lL2RvYy9tYnl0ZS50eHQKQEAgLTEsNCArMSw0IEBACi0qbWJ5dGUudHh0KiAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRGVjIDE5CisqbWJ5dGUudHh0KiAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgRmViIDEzCiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIgZXQgYWwuCkBAIC0xMzE5LDcgKzEzMTksNyBAQAogQ09NTUFORCBBUkdVTUVOVFMJCQkJCSp1dGYtOC1jaGFyLWFyZyoKIAogQ29tbWFuZHMgbGlrZSB8ZnwsIHxGfCwgfHR8IGFuZCB8cnwgdGFrZSBhbiBhcmd1bWVudCBvZiBvbmUgY2hhcmFjdGVyLiAgRm9yCi1VVEYtOCB0aGlzIGFyZ3VtZW50IG1heSBpbmNsdWRlIG9uZSBvciB0d28gY29tcG9zaW5nIGNoYXJhY3RlcnMuICBUaGVzZSBuZWVkcworVVRGLTggdGhpcyBhcmd1bWVudCBtYXkgaW5jbHVkZSBvbmUgb3IgdHdvIGNvbXBvc2luZyBjaGFyYWN0ZXJzLiAgVGhlc2UgbmVlZAogdG8gYmUgcHJvZHVjZWQgdG9nZXRoZXIgd2l0aCB0aGUgYmFzZSBjaGFyYWN0ZXIsIFZpbSBkb2Vzbid0IHdhaXQgZm9yIHRoZSBuZXh0CiBjaGFyYWN0ZXIgdG8gYmUgdHlwZWQgdG8gZmluZCBvdXQgaWYgaXQgaXMgYSBjb21wb3NpbmcgY2hhcmFjdGVyIG9yIG5vdC4KIFVzaW5nICdrZXltYXAnIG9yIHw6bG1hcHwgaXMgYSBuaWNlIHdheSB0byB0eXBlIHRoZXNlIGNoYXJhY3RlcnMuCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9tZXNzYWdlLnR4dCBiL3J1bnRpbWUvZG9jL21lc3NhZ2UudHh0CmluZGV4IGQwMTgzYjYuLjQyNWQ2ZmIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL21lc3NhZ2UudHh0CisrKyBiL3J1bnRpbWUvZG9jL21lc3NhZ2UudHh0CkBAIC0xLDQgKzEsNCBAQAotKm1lc3NhZ2UudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA1IEphbiAwOAorKm1lc3NhZ2UudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA1IEZlYiAxMwogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtMzY0LDcgKzM2NCw4IEBACiAKIFdoZW4gdXNpbmcgdGhlICd+JyBjaGFyYWN0ZXIgaW4gYSBwYXR0ZXJuLCBpdCBpcyByZXBsYWNlZCB3aXRoIHRoZSBwcmV2aW91c2x5CiB1c2VkIHBhdHRlcm4gaW4gYSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQuICBUaGlzIGZhaWxzIHdoZW4gbm8gc3VjaCBjb21tYW5kIGhhcwotYmVlbiB1c2VkIHlldC4gIFNlZSB8L358LgorYmVlbiB1c2VkIHlldC4gIFNlZSB8L358LiAgVGhpcyBhbHNvIGhhcHBlbnMgd2hlbiB1c2luZyAiOnMvcGF0LyUvIiwgd2hlcmUgdGhlCisiJSIgc3RhbmRzIGZvciB0aGUgcHJldmlvdXMgc3Vic3RpdHV0ZSBzdHJpbmcuCiAKIAkJCQkJCQkqRTM1KiAgPgogICBObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vc3FsLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vc3FsLnZpbQppbmRleCBhZmJkZjU1Li5lZmNjZWJkIDEwMDY0NAotLS0gYS9ydW50aW1lL2Z0cGx1Z2luL3NxbC52aW0KKysrIGIvcnVudGltZS9mdHBsdWdpbi9zcWwudmltCkBAIC0xLDM1ICsxLDE5OCBAQAotIiBWaW0gZmlsZXR5cGUgcGx1Z2luIGZpbGUKLSIgTGFuZ3VhZ2U6CVNRTCAoQ29tbW9uIGZvciBPcmFjbGUsIE1pY3Jvc29mdCBTUUwgU2VydmVyLCBTeWJhc2UpCi0iIFZlcnNpb246CTAuMDIKLSIgTWFpbnRhaW5lcjoJRGF2aWQgRmlzaGJ1cm4gPGZpc2hidXJuQGlhbnl3aGVyZS5jb20+Ci0iIExhc3QgQ2hhbmdlOglUdWUgTWF5IDI3IDIwMDMgMDk6MzM6MzEKKyIgU1FMIGZpbGV0eXBlIHBsdWdpbiBmaWxlCisiIExhbmd1YWdlOiAgICBTUUwgKENvbW1vbiBmb3IgT3JhY2xlLCBNaWNyb3NvZnQgU1FMIFNlcnZlciwgU3liYXNlKQorIiBWZXJzaW9uOiAgICAgMC4wOAorIiBNYWludGFpbmVyOiAgRGF2aWQgRmlzaGJ1cm4gPGZpc2hidXJuIGF0IGlhbnl3aGVyZSBkb3QgY29tPgorIiBMYXN0IENoYW5nZTogTW9uIEZlYiAyMSAyMDA1IDc6Mjc6MzYgQU0KKyIgRG93bmxvYWQ6ICAgIGh0dHA6Ly92aW0uc291cmNlZm9yZ2UubmV0L3NjcmlwdC5waHA/c2NyaXB0X2lkPTQ1NAogCiAiIFRoaXMgZmlsZSBzaG91bGQgb25seSBjb250YWluIHZhbHVlcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIFNRTCBsYW5ndWFnZXMKICIgT3JhY2xlLCBNaWNyb3NvZnQgU1FMIFNlcnZlciwgU3liYXNlIEFTQS9BU0UsIE15U1FMLCBhbmQgc28gb24KICIgSWYgYWRkaXRpb25hbCBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgY3JlYXRlOgotIiB2aW1maWxlcy9hZnRlci9mdHBsdWdpbi9zcWwudmltCi0iIHRvIG92ZXJyaWRlIGFuZCBhZGQgYW55IG9mIHlvdXIgb3duIHNldHRpbmdzCisiICAgICAgICB2aW1maWxlcy9hZnRlci9mdHBsdWdpbi9zcWwudmltIChXaW5kb3dzKQorIiAgICAgICAgLnZpbS9hZnRlci9mdHBsdWdpbi9zcWwudmltICAgICAoVW5peCkKKyIgdG8gb3ZlcnJpZGUgYW5kIGFkZCBhbnkgb2YgeW91ciBvd24gc2V0dGluZ3MuCiAKICIgT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgogaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCiAgIGZpbmlzaAogZW5kaWYKIAorbGV0IHM6c2F2ZV9jcG8gPSAmY3BvCitzZXQgY3BvPQorCiAiIERvbid0IGxvYWQgYW5vdGhlciBwbHVnaW4gZm9yIHRoaXMgYnVmZmVyCiBsZXQgYjpkaWRfZnRwbHVnaW4gPSAxCiAKKyIgU29tZSBzdGFuZGFyZCBleHByZXNzaW9ucyBmb3IgdXNlIHdpdGggdGhlIG1hdGNoaXQgc3RyaW5ncworbGV0IHM6bm90ZW5kID0gJ1wlKFw8ZW5kXHNcK1wpXEA8IScKK2xldCBzOndoZW5fbm9fbWF0Y2hlZF9vcl9vdGhlcnMgPSAnXCUoXDx3aGVuXD5cJShcc1wrXCUoXCUoXDxub3RcPlxzXCtcKVw/PG1hdGNoZWRcPlwpXHxcPG90aGVyc1w+XClcQCFcKScKK2xldCBzOm9yX3JlcGxhY2UgPSAnXCUob3Jcc1wrcmVwbGFjZVxzXCtcKVw/JworCiAiIERlZmluZSBwYXR0ZXJucyBmb3IgdGhlIG1hdGNoaXQgbWFjcm8KIGlmICFleGlzdHMoImI6bWF0Y2hfd29yZHMiKQogICAgICIgU1FMIGlzIGdlbmVyYWxseSBjYXNlIGluc2Vuc2l0aXZlCiAgICAgbGV0IGI6bWF0Y2hfaWdub3JlY2FzZSA9IDEKKworICAgICIgSGFuZGxlIHRoZSBmb2xsb3dpbmc6CisgICAgIiBpZgorICAgICIgZWxzZWlmIHwgZWxzaWYKKyAgICAiIGVsc2UgW2lmXQorICAgICIgZW5kIGlmCisgICAgIgorICAgICIgW3doaWxlIGNvbmRpdGlvbl0gbG9vcAorICAgICIgICAgIGxlYXZlCisgICAgIiAgICAgYnJlYWsKKyAgICAiICAgICBjb250aW51ZQorICAgICIgICAgIGV4aXQKKyAgICAiIGVuZCBsb29wCisgICAgIgorICAgICIgZm9yCisgICAgIiAgICAgbGVhdmUKKyAgICAiICAgICBicmVhaworICAgICIgICAgIGNvbnRpbnVlCisgICAgIiAgICAgZXhpdAorICAgICIgZW5kIGxvb3AKKyAgICAiCisgICAgIiBkbworICAgICIgICAgIHN0YXRlbWVudHMKKyAgICAiIGRvZW5kCisgICAgIgorICAgICIgY2FzZQorICAgICIgd2hlbiAKKyAgICAiIHdoZW4KKyAgICAiIGRlZmF1bHQKKyAgICAiIGVuZCBjYXNlCisgICAgIgorICAgICIgbWVyZ2UKKyAgICAiIHdoZW4gbm90IG1hdGNoZWQKKyAgICAiIHdoZW4gbWF0Y2hlZAorICAgICIKKyAgICAiIEVYQ0VQVElPTgorICAgICIgV0hFTiBjb2x1bW5fbm90X2ZvdW5kIFRIRU4KKyAgICAiIFdIRU4gT1RIRVJTIFRIRU4KKyAgICAiCisgICAgIiBjcmVhdGVbIG9yIHJlcGxhY2VdIHByb2NlZHVyZXxmdW5jdGlvbnxldmVudAorCiAgICAgbGV0IGI6bWF0Y2hfd29yZHMgPQotCQlcICdcPGJlZ2luXD46XDxlbmRcPlwoO1wpXD8kLCcuCi0JCVwgJ1w8aWZcPjpcPGVsc2lmXD46XDxlbHNlaWZcPjpcPGVsc2VcPjonLgotCQlcICdcJShcPGVuZFxzXCtcKVxAPCEnIC4gJ1w8aWZcPjpcPGVuZFxzXCtpZlw+LCcuCi0JCVwgJ1w8bG9vcFw+Olw8YnJlYWtcPjpcPGNvbnRpbnVlXD46Jy4KLQkJXCAnXCUoXDxlbmRcc1wrXClcQDwhJyAuICdcPGxvb3BcPjpcPGVuZFxzXCtsb29wXD4sJy4KLQkJXCAnXDxmb3JcPjpcPGJyZWFrXD46XDxjb250aW51ZVw+OicuCi0JCVwgJ1wlKFw8ZW5kXHNcK1wpXEA8IScgLiAnXDxmb3JcPjpcPGVuZFxzXCtmb3JcPiwnLgotCQlcICdcPGNhc2VcPjpcPHdoZW5cPjpcPGRlZmF1bHRcPjonLgotCQlcICdcJShcPGVuZFxzXCtcKVxAPCEnIC4gJ1w8Y2FzZVw+Olw8ZW5kXHNcK2Nhc2VcPicKKwkJXCAnXDxiZWdpblw+Olw8ZW5kXD5cVyokLCcuCisJCVwKKyAgICAgICAgICAgICAgICBcIHM6bm90ZW5kIC4gJ1w8aWZcPjonLgorICAgICAgICAgICAgICAgIFwgJ1w8ZWxzaWZcPlx8XDxlbHNlaWZcPlx8XDxlbHNlXD46Jy4KKyAgICAgICAgICAgICAgICBcICdcPGVuZFxzXCtpZlw+LCcuCisgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFwgJ1w8ZG9cPlx8Jy4KKyAgICAgICAgICAgICAgICBcICdcPHdoaWxlXD5cfCcuCisgICAgICAgICAgICAgICAgXCAnXCUoJyAuIHM6bm90ZW5kIC4gJ1w8bG9vcFw+XClcfCcuCisgICAgICAgICAgICAgICAgXCAnXCUoJyAuIHM6bm90ZW5kIC4gJ1w8Zm9yXD5cKTonLgorICAgICAgICAgICAgICAgIFwgJ1w8ZXhpdFw+XHxcPGxlYXZlXD5cfFw8YnJlYWtcPlx8XDxjb250aW51ZVw+OicuCisgICAgICAgICAgICAgICAgXCAnXCUoXDxlbmRcc1wrXCUoZm9yXHxsb29wXD5cKVwpXHxcPGRvZW5kXD4sJy4KKyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgXCAnXCUoJy4gczpub3RlbmQgLiAnXDxjYXNlXD5cKTonLgorICAgICAgICAgICAgICAgIFwgJ1wlKCcuczp3aGVuX25vX21hdGNoZWRfb3Jfb3RoZXJzLidcKTonLgorICAgICAgICAgICAgICAgIFwgJ1wlKFw8d2hlblxzXCtvdGhlcnNcPlx8XDxlbmRcc1wrY2FzZVw+XCksJyAuCisgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFwgJ1w8bWVyZ2VcPjonIC4KKyAgICAgICAgICAgICAgICBcICdcPHdoZW5cc1wrbm90XHNcK21hdGNoZWRcPjonIC4KKyAgICAgICAgICAgICAgICBcICdcPHdoZW5cc1wrbWF0Y2hlZFw+LCcgLgorICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBcICdcJShcPGNyZWF0ZVxzXCsnIC4gczpvcl9yZXBsYWNlIC4gJ1wpXD8nLgorICAgICAgICAgICAgICAgIFwgJ1wlKGZ1bmN0aW9uXHxwcm9jZWR1cmVcfGV2ZW50XCk6Jy4KKyAgICAgICAgICAgICAgICBcICdcPHJldHVybnNcP1w+JworICAgICAgICAgICAgICAgICIgXCAnXDxiZWdpblw+XHxcPHJldHVybnNcP1w+OicuCisgICAgICAgICAgICAgICAgIiBcICdcPGVuZFw+XCg7XClcP1xzKiQnCisgICAgICAgICAgICAgICAgIiBcICdcPGV4Y2VwdGlvblw+Oicuczp3aGVuX25vX21hdGNoZWRfb3Jfb3RoZXJzLgorICAgICAgICAgICAgICAgICIgXCAnOlw8d2hlblxzXCtvdGhlcnNcPiwnLgorCQkiCisgICAgICAgICAgICAgICAgIiBcICdcJShcPGV4Y2VwdGlvblw+XHxcJSgnLiBzOm5vdGVuZCAuICdcPGNhc2VcPlwpXCk6Jy4KKyAgICAgICAgICAgICAgICAiIFwgJ1wlKFw8ZGVmYXVsdFw+XHwnLnM6d2hlbl9ub19tYXRjaGVkX29yX290aGVycy4nXCk6Jy4KKyAgICAgICAgICAgICAgICAiIFwgJ1wlKFwlKFw8d2hlblxzXCtvdGhlcnNcPlwpXHxcPGVuZFxzXCtjYXNlXD5cKSwnIC4KIGVuZGlmCisKKyIgRGVmaW5lIGhvdyB0byBmaW5kIHRoZSBtYWNybyBkZWZpbml0aW9uIG9mIGEgdmFyaWFibGUgdXNpbmcgdGhlIHZhcmlvdXMKKyIgW2QsIFtELCBbX0NUUkxfRCBhbmQgc28gb24gZmVhdHVyZXMKKyIgTWF0Y2ggdGhlc2UgdmFsdWVzIGlnbm9yaW5nIGNhc2UKKyIgaWUgIERFQ0xBUkUgdmFybmFtZSBJTlRFR0VSCitsZXQgJmw6ZGVmaW5lID0gJ1xjXChERUNMQVJFXHxJTlx8T1VUXHxJTk9VVFwpXHMqJworCisKKyIgTWFwcGluZ3MgdG8gbW92ZSB0byB0aGUgbmV4dCBCRUdJTiAuLi4gRU5EIGJsb2NrCisiIFxXIC0gbm8gY2hhcmFjdGVycyBvciBkaWdpdHMKK25tYXAgPGJ1ZmZlcj4gPHNpbGVudD4gXV0gOmNhbGwgc2VhcmNoKCdcY15ccypiZWdpblw+JywgJ1cnICk8Q1I+CitubWFwIDxidWZmZXI+IDxzaWxlbnQ+IFtbIDpjYWxsIHNlYXJjaCgnXGNeXHMqYmVnaW5cPicsICdiVycgKTxDUj4KK25tYXAgPGJ1ZmZlcj4gPHNpbGVudD4gXVsgOmNhbGwgc2VhcmNoKCdcY15ccyplbmRcVyokJywgJ1cnICk8Q1I+CitubWFwIDxidWZmZXI+IDxzaWxlbnQ+IFtdIDpjYWxsIHNlYXJjaCgnXGNeXHMqZW5kXFcqJCcsICdiVycgKTxDUj4KK3ZtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gXV0gL1xjXlxzKmJlZ2luXD48Q1I+Cit2bWFwIDxidWZmZXI+IDxzaWxlbnQ+IFtbID9cY15ccypiZWdpbjxDUj4KK3ZtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gXVsgL1xjXlxzKmVuZFxXKiQ8Q1I+Cit2bWFwIDxidWZmZXI+IDxzaWxlbnQ+IFtdID9cY15ccyplbmRcVyokPENSPgorCisKKyIgUHJlZGVmaW5lZCBTUUwgb2JqZWN0cyB3aGF0IGFyZSB1c2VkIGJ5IHRoZSBiZWxvdyBtYXBwaW5ncyB1c2luZworIiB0aGUgXX0gc3R5bGUgbWFwcy4KKyIgVGhpcyBnbG9iYWwgdmFyaWFibGUgYWxsb3dzIHRoZSB1c2VycyB0byBvdmVycmlkZSBpdCdzIHZhbHVlCisiIGZyb20gd2l0aGluIHRoZWlyIHZpbXJjLgoraWYgIWV4aXN0cygnZzpmdHBsdWdpbl9zcWxfb2JqZWN0cycpCisgICAgbGV0IGc6ZnRwbHVnaW5fc3FsX29iamVjdHMgPSAnZnVuY3Rpb24scHJvY2VkdXJlLGV2ZW50LCcgLgorICAgICAgICAgICAgICAgIFwgJ1woZXhpc3RpbmdcXHxnbG9iYWxcc1wrdGVtcG9yYXJ5XHNcK1wpXD90YWJsZSx0cmlnZ2VyJyAuCisgICAgICAgICAgICAgICAgXCAnLHNjaGVtYSxzZXJ2aWNlLHB1YmxpY2F0aW9uLGRhdGFiYXNlLGRhdGF0eXBlLGRvbWFpbicgLgorICAgICAgICAgICAgICAgIFwgJyxpbmRleCxzdWJzY3JpcHRpb24sc3luY2hyb25pemF0aW9uLHZpZXcsdmFyaWFibGUnCitlbmRpZgorCitsZXQgczpmdHBsdWdpbl9zcWxfb2JqZWN0cyA9IAorICAgICAgICAgICAgXCAnXGNeXHMqJyAuCisgICAgICAgICAgICBcICdcKGNyZWF0ZVxzXCtcKG9yXHNcK3JlcGxhY2Vcc1wrXClcP1wpXD8nIC4KKyAgICAgICAgICAgIFwgJ1w8XCgnIC4KKyAgICAgICAgICAgIFwgc3Vic3RpdHV0ZShnOmZ0cGx1Z2luX3NxbF9vYmplY3RzLCAnLCcsICdcXFxcfCcsICdnJykgLgorICAgICAgICAgICAgXCAnXClcPicgCisKKyIgTWFwcGluZ3MgdG8gbW92ZSB0byB0aGUgbmV4dCBDUkVBVEUgLi4uIGJsb2NrCisiIG1hcCA8YnVmZmVyPiA8c2lsZW50PiBdfSA6Y2FsbCBzZWFyY2goZzpmdHBsdWdpbl9zcWxfb2JqZWN0cywgJ1cnICk8Q1I+CisiIG5tYXAgPGJ1ZmZlcj4gPHNpbGVudD4gW3sgOmNhbGwgc2VhcmNoKCdcY15ccypcKGNyZWF0ZVxzXCtcKG9yXHNcK3JlcGxhY2Vcc1wrXClcP1wpXD9cPFwoZnVuY3Rpb25cXHxwcm9jZWR1cmVcXHxldmVudFxcfHRhYmxlXFx8dHJpZ2dlclxcfHNjaGVtYVwpXD4nLCAnYlcnICk8Q1I+CisiIGV4ZWMgJ25tYXAgPGJ1ZmZlcj4gPHNpbGVudD4gXX0gLycuczpmdHBsdWdpbl9zcWxfb2JqZWN0cy4nPENSPicKK2V4ZWMgIm5tYXAgPGJ1ZmZlcj4gPHNpbGVudD4gXX0gOmNhbGwgc2VhcmNoKCciLnM6ZnRwbHVnaW5fc3FsX29iamVjdHMuIicsICdXJyk8Q1I+IgorZXhlYyAibm1hcCA8YnVmZmVyPiA8c2lsZW50PiBbeyA6Y2FsbCBzZWFyY2goJyIuczpmdHBsdWdpbl9zcWxfb2JqZWN0cy4iJywgJ2JXJyk8Q1I+IgorIiBDb3VsZCBub3QgZmlndXJlIG91dCBob3cgdG8gdXNlIGEgOmNhbGwgc2VhcmNoKCkgc3RyaW5nIGluIHZpc3VhbCBtb2RlCisiIHdpdGhvdXQgaXQgZW5kaW5nIHZpc3VhbCBtb2RlCitleGVjICd2bWFwIDxidWZmZXI+IDxzaWxlbnQ+IF19IC8nLnM6ZnRwbHVnaW5fc3FsX29iamVjdHMuJzxDUj4nCitleGVjICd2bWFwIDxidWZmZXI+IDxzaWxlbnQ+IFt7ID8nLnM6ZnRwbHVnaW5fc3FsX29iamVjdHMuJzxDUj4nCisiIHZtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gXX0gL1xjXlxzKlwoY3JlYXRlXHNcK1wob3Jcc1wrcmVwbGFjZVxzXCtcKVw/XClcP1w8XChmdW5jdGlvblxcfHByb2NlZHVyZVxcfGV2ZW50XFx8dGFibGVcXHx0cmlnZ2VyXFx8c2NoZW1hXClcPjxDUj4KKyIgdm1hcCA8YnVmZmVyPiA8c2lsZW50PiBbeyA/XGNeXHMqXChjcmVhdGVcc1wrXChvclxzXCtyZXBsYWNlXHNcK1wpXD9cKVw/XDxcKGZ1bmN0aW9uXFx8cHJvY2VkdXJlXFx8ZXZlbnRcXHx0YWJsZVxcfHRyaWdnZXJcXHxzY2hlbWFcKVw+PENSPgorCisiIE1hcHBpbmdzIHRvIG1vdmUgdG8gdGhlIG5leHQgQ09NTUVOVAorIgorIiBIYWQgdG8gZG91YmxlIHRoZSBcIGZvciB0aGUgXHwgc2VwYXJhdG9yIHNpbmNlIHRoaXMgaGFzIGEgc3BlY2lhbAorIiBtZWFuaW5nIG9uIG1hcHMKK2xldCBiOmNvbW1lbnRfbGVhZGVyID0gJ1woLS1cXHxcL1wvXFx8XCpcXHxcL1wqXFx8XCpcL1wpJworIiBGaW5kIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjb21tZW50CitsZXQgYjpjb21tZW50X3N0YXJ0ICA9ICdeXChccyonLmI6Y29tbWVudF9sZWFkZXIuJy4qXG5cKVxAPCEnLgorICAgICAgICAgICAgXCAnXChccyonLmI6Y29tbWVudF9sZWFkZXIuJ1wpJworIiBGaW5kIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGNvbW1lbnQKK2xldCBiOmNvbW1lbnRfZW5kID0gJ1woXlxzKicuYjpjb21tZW50X2xlYWRlci4nLipcblwpJy4KKyAgICAgICAgICAgIFwgJ1woXlxzKicuYjpjb21tZW50X2xlYWRlci4nXClcQCEnCisiIFNraXAgb3ZlciB0aGUgY29tbWVudAorbGV0IGI6Y29tbWVudF9qdW1wX292ZXIgID0gImNhbGwgc2VhcmNoKCciLgorICAgICAgICAgICAgXCAnXlwoXHMqJy5iOmNvbW1lbnRfbGVhZGVyLicuKlxuXClcQDwhJy4KKyAgICAgICAgICAgIFwgIicsICdXJykiCitsZXQgYjpjb21tZW50X3NraXBfYmFjayAgPSAiY2FsbCBzZWFyY2goJyIuCisgICAgICAgICAgICBcICdeXChccyonLmI6Y29tbWVudF9sZWFkZXIuJy4qXG5cKVxAPCEnLgorICAgICAgICAgICAgXCAiJywgJ2JXJykiCisiIE1vdmUgdG8gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgY29tbWVudHMKK2V4ZWMgJ25ub3JlbWFwIDxzaWxlbnQ+PGJ1ZmZlcj4gXSIgLycuYjpjb21tZW50X3N0YXJ0Lic8Q1I+JworZXhlYyAnbm5vcmVtYXAgPHNpbGVudD48YnVmZmVyPiBbIiAvJy5iOmNvbW1lbnRfZW5kLic8Q1I+JworZXhlYyAndm5vcmVtYXAgPHNpbGVudD48YnVmZmVyPiBdIiAvJy5iOmNvbW1lbnRfc3RhcnQuJzxDUj4nCitleGVjICd2bm9yZW1hcCA8c2lsZW50PjxidWZmZXI+IFsiIC8nLmI6Y29tbWVudF9lbmQuJzxDUj4nCisKKyIgQ29tbWVudHMgY2FuIGJlIG9mIHRoZSBmb3JtOgorIiAgIC8qCisiICAgICoKKyIgICAgKi8KKyIgb3IKKyIgICAvLyAKKyIgb3IKKyIgICAtLQorc2V0bG9jYWwgY29tbWVudHM9czE6LyosbWI6KixleDoqLyw6LS0sOi8vCisKK2xldCAmY3BvID0gczpzYXZlX2NwbworCisiIHZpbTpzdz00OmZmPXVuaXg6CisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2VzbXRwcmMudmltIGIvcnVudGltZS9zeW50YXgvZXNtdHByYy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2NzM5YQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2VzbXRwcmMudmltCkBAIC0wLDAgKzEsMzQgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOglFc210cCBzZXR1cCBmaWxlIChiYXNlZCBvbiBlc210cCAwLjUuMCkKKyIgTWFpbnRhaW5lcjoJS29ybmVsIEtpZWxjemV3c2tpIDxrb3JuZWxAZ2F6ZXRhLnBsPgorIiBMYXN0IENoYW5nZToJMTYgRmViIDIwMDUKKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiQWxsIG9wdGlvbnMKKzpzeW50YXgga2V5d29yZAllc210cHJjT3B0aW9ucyBob3N0bmFtZSB1c2VybmFtZSBwYXNzd29yZCBzdGFydHRscyBjZXJ0aWZpY2F0ZV9wYXNzcGhyYXNlIHByZWNvbm5lY3QgaWRlbnRpdHkgbWRhCisKKyJBbGwga2V5d29yZHMKKzpzeW50YXgga2V5d29yZCBlc210cHJjSWRlbnRpZmllciBkZWZhdWx0IGVuYWJsZWQgZGlzYWJsZWQgcmVxdWlyZWQKKworIldlJ3JlIHRyeWluZyB0byBiZSBzbWFyZXIgdGhhbiAvLiIqQC4qLyA6KQorOnN5bnRheCBtYXRjaCBlc210cHJjQWRkcmVzcyAvW2EtejAtOV8uLV0qW2EtejAtOV1cK0BbYS16MC05Xy4tXSpbYS16MC05XVwrXC5bYS16XVwrLworOnN5bnRheCBtYXRjaCBlc210cHJjRnVsbGFkZCAvW2EtejAtOV8uLV0qW2EtejAtOV1cK1wuW2Etel1cKzpbMC05XVwrLworIAorIlN0cmluZy4uCis6c3ludGF4IHJlZ2lvbiBlc210cHJjU3RyaW5nIHN0YXJ0PS8iLyBlbmQ9LyIvCisKKworOmhpZ2hsaWdodCBsaW5rIGVzbXRwcmNPcHRpb25zCQlMYWJlbAorOmhpZ2hsaWdodCBsaW5rIGVzbXRwcmNTdHJpbmcgCQlTdHJpbmcKKzpoaWdobGlnaHQgbGluayBlc210cHJjQWRkcmVzcwkJVHlwZQorOmhpZ2hsaWdodCBsaW5rIGVzbXRwcmNJZGVudGlmaWVyIAlJZGVudGlmaWVyCis6aGlnaGxpZ2h0IGxpbmsgZXNtdHByY0Z1bGxhZGQJCUluY2x1ZGUKKworbGV0IGI6Y3VycmVudF9zeW50YXg9ImVzbXRwcmMiCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zaC52aW0gYi9ydW50aW1lL3N5bnRheC9zaC52aW0KaW5kZXggODNiOGE1OS4uYTcxZWU0ZCAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvc2gudmltCisrKyBiL3J1bnRpbWUvc3ludGF4L3NoLnZpbQpAQCAtMiw4ICsyLDggQEAKICIgTGFuZ3VhZ2U6CQlzaGVsbCAoc2gpIEtvcm4gc2hlbGwgKGtzaCkgYmFzaCAoc2gpCiAiIE1haW50YWluZXI6CQlEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuICA8TmRyT2NoaXBTQFBjYW1wYmVsbEFmYW1pbHkuTWJpej4KICIgUHJldmlvdXMgTWFpbnRhaW5lcjoJTGVubmFydCBTY2h1bHR6IDxMZW5uYXJ0LlNjaHVsdHpAZWNtd2YuaW50PgotIiBMYXN0IENoYW5nZToJCURlYyAyOCwgMjAwNAotIiBWZXJzaW9uOgkJNzEKKyIgTGFzdCBDaGFuZ2U6CQlGZWIgMTYsIDIwMDUKKyIgVmVyc2lvbjoJCTcyCiAiIFVSTDoJCWh0dHA6Ly93d3cuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vaW5kZXguaHRtbCN2aW1saW5rc19zeW50YXgKICIKICIgVXNpbmcgdGhlIGZvbGxvd2luZyBWSU0gdmFyaWFibGVzOiB7e3sxCkBAIC02MywyNCArNjMsMjQgQEAKIAogIiBDbHVzdGVyczogY29udGFpbnM9QC4uLiBjbHVzdGVycyB7e3sxCiAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3luIGNsdXN0ZXIgc2hDYXNlRXNhY0xpc3QJY29udGFpbnM9c2hDYXNlU3RhcnQsc2hDYXNlLHNoQ2FzZUJhcixzaENhc2VJbixzaENvbW1lbnQsc2hEZXJlZixzaERlcmVmU2ltcGxlLHNoQ2FzZUNvbW1hbmRTdWIsc2hDYXNlU2luZ2xlUXVvdGUsc2hDYXNlRG91YmxlUXVvdGUsc2hTcGVjaWFsCitzeW4gY2x1c3RlciBzaENhc2VFc2FjTGlzdAljb250YWlucz1zaENhc2VTdGFydCxzaENhc2Usc2hDYXNlQmFyLHNoQ2FzZUluLHNoQ29tbWVudCxzaERlcmVmLHNoRGVyZWZTaW1wbGUsc2hDYXNlQ29tbWFuZFN1YixzaENhc2VFeFNpbmdsZVF1b3RlLHNoQ2FzZVNpbmdsZVF1b3RlLHNoQ2FzZURvdWJsZVF1b3RlLHNoU3BlY2lhbAogc3luIGNsdXN0ZXIgc2hDYXNlTGlzdAljb250YWlucz1Ac2hDb21tYW5kU3ViTGlzdCxzaENhc2VFc2FjLHNoQ29sb24sc2hDb21tYW5kU3ViLHNoQ29tbWFuZFN1YixzaENvbW1lbnQsc2hEbyxzaEVjaG8sc2hFeHByLHNoRm9yLHNoSGVyZURvYyxzaElmLHNoUmVkaXIsc2hTZXRMaXN0LHNoU291cmNlLHNoU3RhdGVtZW50LHNoVmFyaWFibGUsYmtzaEZ1bmN0aW9uLHNoU3BlY2lhbAogc3luIGNsdXN0ZXIgc2hDb2xvbkxpc3QJY29udGFpbnM9QHNoQ2FzZUxpc3QKLXN5biBjbHVzdGVyIHNoQ29tbWFuZFN1Ykxpc3QJY29udGFpbnM9c2hBcml0aG1ldGljLHNoRGVyZWYsc2hEZXJlZlNpbXBsZSxzaE51bWJlcixzaE9wZXJhdG9yLHNoUG9zblBhcm0sc2hTcGVjaWFsLHNoU2luZ2xlUXVvdGUsc2hEb3VibGVRdW90ZSxzaFN0YXRlbWVudCxzaFZhcmlhYmxlLHNoU3ViU2gsc2hBbGlhcyxzaFRlc3QKK3N5biBjbHVzdGVyIHNoQ29tbWFuZFN1Ykxpc3QJY29udGFpbnM9c2hBcml0aG1ldGljLHNoRGVyZWYsc2hEZXJlZlNpbXBsZSxzaE51bWJlcixzaE9wZXJhdG9yLHNoUG9zblBhcm0sc2hTcGVjaWFsLHNoRXhTaW5nbGVRdW90ZSxzaFNpbmdsZVF1b3RlLHNoRG91YmxlUXVvdGUsc2hTdGF0ZW1lbnQsc2hWYXJpYWJsZSxzaFN1YlNoLHNoQWxpYXMsc2hUZXN0CiBzeW4gY2x1c3RlciBzaERibFF1b3RlTGlzdAljb250YWlucz1zaENvbW1hbmRTdWIsc2hEZXJlZixzaERlcmVmU2ltcGxlLHNoU3BlY2lhbCxzaFBvc25QYXJtCiBzeW4gY2x1c3RlciBzaERlcmVmTGlzdAljb250YWlucz1zaERlcmVmLHNoRGVyZWZTaW1wbGUsc2hEZXJlZlZhcixzaERlcmVmU3BlY2lhbCxzaERlcmVmV29yZEVycm9yCiBzeW4gY2x1c3RlciBzaERlcmVmVmFyTGlzdAljb250YWlucz1zaERlcmVmT3Asc2hEZXJlZlZhckFycmF5LHNoRGVyZWZPcEVycm9yCi1zeW4gY2x1c3RlciBzaEVjaG9MaXN0CWNvbnRhaW5zPXNoQXJpdGhtZXRpYyxzaENvbW1hbmRTdWIsc2hEZXJlZixzaERlcmVmU2ltcGxlLHNoRXhwcixzaFNpbmdsZVF1b3RlLHNoRG91YmxlUXVvdGUsc2hTcGVjaWFsCi1zeW4gY2x1c3RlciBzaEV4cHJMaXN0MQljb250YWlucz1zaENoYXJDbGFzcyxzaE51bWJlcixzaE9wZXJhdG9yLHNoU2luZ2xlUXVvdGUsc2hEb3VibGVRdW90ZSxzaFNwZWNpYWwsc2hFeHByLHNoRGJsQnJhY2Usc2hEZXJlZixzaERlcmVmU2ltcGxlCitzeW4gY2x1c3RlciBzaEVjaG9MaXN0CWNvbnRhaW5zPXNoQXJpdGhtZXRpYyxzaENvbW1hbmRTdWIsc2hEZXJlZixzaERlcmVmU2ltcGxlLHNoRXhwcixzaEV4U2luZ2xlUXVvdGUsc2hTaW5nbGVRdW90ZSxzaERvdWJsZVF1b3RlLHNoU3BlY2lhbAorc3luIGNsdXN0ZXIgc2hFeHByTGlzdDEJY29udGFpbnM9c2hDaGFyQ2xhc3Msc2hOdW1iZXIsc2hPcGVyYXRvcixzaEV4U2luZ2xlUXVvdGUsc2hTaW5nbGVRdW90ZSxzaERvdWJsZVF1b3RlLHNoU3BlY2lhbCxzaEV4cHIsc2hEYmxCcmFjZSxzaERlcmVmLHNoRGVyZWZTaW1wbGUKIHN5biBjbHVzdGVyIHNoRXhwckxpc3QyCWNvbnRhaW5zPUBzaEV4cHJMaXN0MSxAc2hDYXNlTGlzdCxzaFRlc3QKIHN5biBjbHVzdGVyIHNoRnVuY3Rpb25MaXN0CWNvbnRhaW5zPUBzaENhc2VMaXN0LHNoT3BlcmF0b3IKIHN5biBjbHVzdGVyIHNoSGVyZUJlZ2luTGlzdAljb250YWlucz1Ac2hDb21tYW5kU3ViTGlzdAogc3luIGNsdXN0ZXIgc2hIZXJlTGlzdAljb250YWlucz1zaEJlZ2luSGVyZSxzaEhlcmVQYXlsb2FkCiBzeW4gY2x1c3RlciBzaEhlcmVMaXN0RFEJY29udGFpbnM9c2hCZWdpbkhlcmUsQHNoRGJsUXVvdGVMaXN0LHNoSGVyZVBheWxvYWQKLXN5biBjbHVzdGVyIHNoSWRMaXN0CWNvbnRhaW5zPXNoQ29tbWFuZFN1YixzaFdyYXBMaW5lT3BlcmF0b3Isc2hJZFdoaXRlU3BhY2Usc2hEZXJlZixzaERlcmVmU2ltcGxlLHNoU3BlY2lhbCxzaFJlZGlyLHNoU2luZ2xlUXVvdGUsc2hEb3VibGVRdW90ZSxzaEV4cHIKK3N5biBjbHVzdGVyIHNoSWRMaXN0CWNvbnRhaW5zPXNoQ29tbWFuZFN1YixzaFdyYXBMaW5lT3BlcmF0b3Isc2hJZFdoaXRlU3BhY2Usc2hEZXJlZixzaERlcmVmU2ltcGxlLHNoU3BlY2lhbCxzaFJlZGlyLHNoRXhTaW5nbGVRdW90ZSxzaFNpbmdsZVF1b3RlLHNoRG91YmxlUXVvdGUsc2hFeHByCiBzeW4gY2x1c3RlciBzaExvb3BMaXN0CWNvbnRhaW5zPUBzaENhc2VMaXN0LHNoVGVzdE9wcixzaEV4cHIsc2hEYmxCcmFjZSxzaENvbmRpdGlvbmFsLHNoQ2FzZUVzYWMsc2hUZXN0CiBzeW4gY2x1c3RlciBzaFN1YlNoTGlzdAljb250YWlucz1Ac2hDYXNlTGlzdAotc3luIGNsdXN0ZXIgc2hUZXN0TGlzdAljb250YWlucz1zaENoYXJDbGFzcyxzaENvbW1lbnQsc2hDb21tYW5kU3ViLHNoRGVyZWYsc2hEZXJlZlNpbXBsZSxzaERvdWJsZVF1b3RlLHNoRXhwcixzaEV4cHIsc2hOdW1iZXIsc2hPcGVyYXRvcixzaFNpbmdsZVF1b3RlLHNoU3BlY2lhbCxzaFRlc3RPcHIsc2hUZXN0CitzeW4gY2x1c3RlciBzaFRlc3RMaXN0CWNvbnRhaW5zPXNoQ2hhckNsYXNzLHNoQ29tbWVudCxzaENvbW1hbmRTdWIsc2hEZXJlZixzaERlcmVmU2ltcGxlLHNoRG91YmxlUXVvdGUsc2hFeHByLHNoRXhwcixzaE51bWJlcixzaE9wZXJhdG9yLHNoRXhTaW5nbGVRdW90ZSxzaFNpbmdsZVF1b3RlLHNoU3BlY2lhbCxzaFRlc3RPcHIsc2hUZXN0CiAKIAogIiBFY2hvOiB7e3sxCkBAIC05MCw3ICs5MCw3IEBACiBzeW4gcmVnaW9uIHNoRWNobyBtYXRjaGdyb3VwPXNoU3RhdGVtZW50IHN0YXJ0PSJcPHByaW50XD4iIHNraXA9IlxcJCIgbWF0Y2hncm91cD1zaE9wZXJhdG9yIGVuZD0iJCIgbWF0Y2hncm91cD1OT05FIGVuZD0iWzw+OyZ8KCldIm1lPWUtMSBlbmQ9IlxkWzw+XSJtZT1lLTIgZW5kPSIjIm1lPWUtMSBjb250YWlucz1Ac2hFY2hvTGlzdAogCiAiIFRoaXMgbXVzdCBiZSBhZnRlciB0aGUgc3RyaW5ncywgc28gdGhhdCBibGEgXCIgYmUgY29ycmVjdAotc3luIHJlZ2lvbiBzaEVtYmVkZGVkRWNobyBjb250YWluZWQgbWF0Y2hncm91cD1zaFN0YXRlbWVudCBzdGFydD0iXDxwcmludFw+IiBza2lwPSJcXCQiIG1hdGNoZ3JvdXA9c2hPcGVyYXRvciBlbmQ9IiQiIG1hdGNoZ3JvdXA9Tk9ORSBlbmQ9Ils8PjsmfGApXSJtZT1lLTEgZW5kPSJcZFs8Pl0ibWU9ZS0yIGVuZD0iIyJtZT1lLTEgY29udGFpbnM9c2hOdW1iZXIsc2hTaW5nbGVRdW90ZSxzaERlcmVmLHNoRGVyZWZTaW1wbGUsc2hTcGVjaWFsVmFyLHNoU3BlY2lhbCxzaE9wZXJhdG9yLHNoRG91YmxlUXVvdGUsc2hDaGFyQ2xhc3MKK3N5biByZWdpb24gc2hFbWJlZGRlZEVjaG8gY29udGFpbmVkIG1hdGNoZ3JvdXA9c2hTdGF0ZW1lbnQgc3RhcnQ9Ilw8cHJpbnRcPiIgc2tpcD0iXFwkIiBtYXRjaGdyb3VwPXNoT3BlcmF0b3IgZW5kPSIkIiBtYXRjaGdyb3VwPU5PTkUgZW5kPSJbPD47JnxgKV0ibWU9ZS0xIGVuZD0iXGRbPD5dIm1lPWUtMiBlbmQ9IiMibWU9ZS0xIGNvbnRhaW5zPXNoTnVtYmVyLHNoRXhTaW5nbGVRdW90ZSxzaFNpbmdsZVF1b3RlLHNoRGVyZWYsc2hEZXJlZlNpbXBsZSxzaFNwZWNpYWxWYXIsc2hTcGVjaWFsLHNoT3BlcmF0b3Isc2hEb3VibGVRdW90ZSxzaENoYXJDbGFzcwogCiAiIEFsaWFzOiB7e3sxCiAiID09PT09CkBAIC0xMjQsNyArMTI0LDcgQEAKIHN5biBtYXRjaCAgIHNoT3BlcmF0b3IJIlshJjt8XSIKIHN5biBtYXRjaCAgIHNoT3BlcmF0b3IJIlxbW1teOl1cfFxdXSIKIHN5biBtYXRjaCAgIHNoT3BlcmF0b3IJIiFcPT0iCQlza2lwd2hpdGUgbmV4dGdyb3VwPXNoUGF0dGVybgotc3luIG1hdGNoICAgc2hQYXR0ZXJuCSJcPFxTXCtcKCkpXClcQD0iCWNvbnRhaW5lZCBjb250YWlucz1zaFNpbmdsZVF1b3RlLHNoRG91YmxlUXVvdGUsc2hEZXJlZgorc3luIG1hdGNoICAgc2hQYXR0ZXJuCSJcPFxTXCtcKCkpXClcQD0iCWNvbnRhaW5lZCBjb250YWlucz1zaEV4U2luZ2xlUXVvdGUsc2hTaW5nbGVRdW90ZSxzaERvdWJsZVF1b3RlLHNoRGVyZWYKIAogIiBTdWJzaGVsbHM6IHt7ezEKICIgPT09PT09PT09PQpAQCAtMTYzLDEyICsxNjMsMTcgQEAKIAogIiBDYXNlOiBjYXNlLi4uZXNhYyB7e3sxCiAiID09PT0KLXN5biBtYXRjaCAgIHNoQ2FzZUJhcgljb250YWluZWQgc2tpcHdoaXRlICJbXnwiYCcoKV1cey19fCJocz1lCQluZXh0Z3JvdXA9c2hDYXNlLHNoQ2FzZVN0YXJ0LHNoQ2FzZUJhcixzaENvbW1lbnQsc2hDYXNlU2luZ2xlUXVvdGUsc2hDYXNlRG91YmxlUXVvdGUKK3N5biBtYXRjaCAgIHNoQ2FzZUJhcgljb250YWluZWQgc2tpcHdoaXRlICJbXnwiYCcoKV1cey19fCJocz1lCQluZXh0Z3JvdXA9c2hDYXNlLHNoQ2FzZVN0YXJ0LHNoQ2FzZUJhcixzaENvbW1lbnQsc2hDYXNlRXhTaW5nbGVRdW90ZSxzaENhc2VTaW5nbGVRdW90ZSxzaENhc2VEb3VibGVRdW90ZQogc3luIG1hdGNoICAgc2hDYXNlU3RhcnQJY29udGFpbmVkIHNraXB3aGl0ZSBza2lwbmwgIigiCQkJbmV4dGdyb3VwPXNoQ2FzZSxzaENhc2VCYXIKIHN5biByZWdpb24gIHNoQ2FzZQljb250YWluZWQgc2tpcHdoaXRlIHNraXBubCBtYXRjaGdyb3VwPXNoU25nbENhc2Ugc3RhcnQ9IlteJCgpXVx7LX0pIm1zPXMsaHM9ZSAgZW5kPSI7OyIgZW5kPSJlc2FjIm1lPXMtMSBjb250YWlucz1Ac2hDYXNlTGlzdCBuZXh0Z3JvdXA9c2hDYXNlU3RhcnQsc2hDYXNlLCxzaENvbW1lbnQKIHN5biByZWdpb24gIHNoQ2FzZUVzYWMJbWF0Y2hncm91cD1zaENvbmRpdGlvbmFsIHN0YXJ0PSJcPGNhc2VcPiIgZW5kPSJcPGVzYWNcPiIJY29udGFpbnM9QHNoQ2FzZUVzYWNMaXN0Ci1zeW4ga2V5d29yZCBzaENhc2VJbgljb250YWluZWQgc2tpcHdoaXRlIHNraXBubCBpbgkJCW5leHRncm91cD1zaENhc2Usc2hDYXNlU3RhcnQsc2hDYXNlQmFyLHNoQ29tbWVudCxzaENhc2VTaW5nbGVRdW90ZSxzaENhc2VEb3VibGVRdW90ZQotc3luIHJlZ2lvbiAgc2hDYXNlU2luZ2xlUXVvdGUJbWF0Y2hncm91cD1zaE9wZXJhdG9yIHN0YXJ0PSsnKyBza2lwPStcXFxcXHxcXC4rIGVuZD0rJysJY29udGFpbnM9c2hTdHJpbmdTcGVjaWFsCQlza2lwd2hpdGUgc2tpcG5sIG5leHRncm91cD1zaENhc2VCYXIJY29udGFpbmVkCitzeW4ga2V5d29yZCBzaENhc2VJbgljb250YWluZWQgc2tpcHdoaXRlIHNraXBubCBpbgkJCW5leHRncm91cD1zaENhc2Usc2hDYXNlU3RhcnQsc2hDYXNlQmFyLHNoQ29tbWVudCxzaENhc2VFeFNpbmdsZVF1b3RlLHNoQ2FzZVNpbmdsZVF1b3RlLHNoQ2FzZURvdWJsZVF1b3RlCitpZiBleGlzdHMoImI6aXNfYmFzaCIpCisgc3luIHJlZ2lvbiAgc2hDYXNlRXhTaW5nbGVRdW90ZQltYXRjaGdyb3VwPXNoT3BlcmF0b3Igc3RhcnQ9K1wkJysgc2tpcD0rXFxcXFx8XFwuKyBlbmQ9KycrCWNvbnRhaW5zPXNoU3RyaW5nU3BlY2lhbCxzaFNwZWNpYWwJc2tpcHdoaXRlIHNraXBubCBuZXh0Z3JvdXA9c2hDYXNlQmFyCWNvbnRhaW5lZAorZWxzZQorIHN5biByZWdpb24gIHNoQ2FzZUV4U2luZ2xlUXVvdGUJbWF0Y2hncm91cD1FcnJvciBzdGFydD0rXCQnKyBza2lwPStcXFxcXHxcXC4rIGVuZD0rJysJY29udGFpbnM9c2hTdHJpbmdTcGVjaWFsCXNraXB3aGl0ZSBza2lwbmwgbmV4dGdyb3VwPXNoQ2FzZUJhcgljb250YWluZWQKK2VuZGlmCitzeW4gcmVnaW9uICBzaENhc2VTaW5nbGVRdW90ZQltYXRjaGdyb3VwPXNoT3BlcmF0b3Igc3RhcnQ9KycrIGVuZD0rJysJY29udGFpbnM9c2hTdHJpbmdTcGVjaWFsCQlza2lwd2hpdGUgc2tpcG5sIG5leHRncm91cD1zaENhc2VCYXIJY29udGFpbmVkCiBzeW4gcmVnaW9uICBzaENhc2VEb3VibGVRdW90ZQltYXRjaGdyb3VwPXNoT3BlcmF0b3Igc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcLisgZW5kPSsiKwljb250YWlucz1Ac2hEYmxRdW90ZUxpc3Qsc2hTdHJpbmdTcGVjaWFsCXNraXB3aGl0ZSBza2lwbmwgbmV4dGdyb3VwPXNoQ2FzZUJhcgljb250YWluZWQKIHN5biByZWdpb24gIHNoQ2FzZUNvbW1hbmRTdWIJc3RhcnQ9K2ArIHNraXA9K1xcXFxcfFxcLisgZW5kPStgKwkJY29udGFpbnM9QHNoQ29tbWFuZFN1Ykxpc3QJCXNraXB3aGl0ZSBza2lwbmwgbmV4dGdyb3VwPXNoQ2FzZUJhcgljb250YWluZWQKIApAQCAtMTg4LDcgKzE5Myw3IEBACiAgc3luIHJlZ2lvbiBzaEFyaXRobWV0aWMgbWF0Y2hncm91cD1zaEFyaXRoUmVnaW9uICBzdGFydD0iXCQoKCIgc2tpcD0nXFxcXFx8XFwuJyBlbmQ9IikpIiBjb250YWlucz1Ac2hDb21tYW5kU3ViTGlzdAogIHN5biBtYXRjaCAgc2hTa2lwSW5pdFdTIGNvbnRhaW5lZAkiXlxzXCsiCiBlbHNlCi0gc3luIHJlZ2lvbiBzaENvbW1hbmRTdWIgbWF0Y2hncm91cD1FcnJvciBzdGFydD0iJCgiIGVuZD0iKSIgY29udGFpbnM9QHNoQ29tbWFuZFN1Ykxpc3QKKyBzeW4gcmVnaW9uIHNoQ29tbWFuZFN1YiBtYXRjaGdyb3VwPUVycm9yIHN0YXJ0PSJcJCgiIGVuZD0iKSIgY29udGFpbnM9QHNoQ29tbWFuZFN1Ykxpc3QKIGVuZGlmCiAKIGlmIGV4aXN0cygiYjppc19iYXNoIikKQEAgLTIxMyw3ICsyMTgsMTYgQEAKICIgU3RyaW5nIEFuZCBDaGFyYWN0ZXIgQ29uc3RhbnRzOiB7e3sxCiAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIHN5biBtYXRjaCAgIHNoTnVtYmVyCSItXD1cPFxkXCtcPiIKLXN5biBtYXRjaCAgIHNoU3BlY2lhbAkiXFxcZFxkXGRcfFxcW2FiY2ZucnR2MF0iCWNvbnRhaW5lZAoraWYgZXhpc3RzKCJiOmlzX2Jhc2giKQorIHN5biBtYXRjaCAgIHNoU3BlY2lhbAkiXFxcb1xvXG9cfFxceFx4XHhcfFxcYy5cfFxcW2FiZWZucnR2XSIJY29udGFpbmVkCitlbHNlCisgc3luIG1hdGNoICAgc2hTcGVjaWFsCSJcXFxkXGRcZFx8XFxbYWJjZm5ydHYwXSIJY29udGFpbmVkCitlbmRpZgoraWYgZXhpc3RzKCJiOmlzX2Jhc2giKQorIHN5biByZWdpb24gIHNoRXhTaW5nbGVRdW90ZQltYXRjaGdyb3VwPXNoT3BlcmF0b3Igc3RhcnQ9K1wkJysgc2tpcD0rXFxcXFx8XFwuKyBlbmQ9KycrCWNvbnRhaW5zPXNoU3RyaW5nU3BlY2lhbCxzaFNwZWNpYWwKK2Vsc2UKKyBzeW4gcmVnaW9uICBzaEV4U2luZ2xlUXVvdGUJbWF0Y2hHcm91cD1FcnJvciBzdGFydD0rXCQnKyBza2lwPStcXFxcXHxcXC4rIGVuZD0rJysJY29udGFpbnM9c2hTdHJpbmdTcGVjaWFsLHNoU3BlY2lhbAorZW5kaWYKIHN5biByZWdpb24gIHNoU2luZ2xlUXVvdGUJbWF0Y2hncm91cD1zaE9wZXJhdG9yIHN0YXJ0PSsnKyBlbmQ9KycrCQljb250YWlucz1zaFN0cmluZ1NwZWNpYWwKIHN5biByZWdpb24gIHNoRG91YmxlUXVvdGUJbWF0Y2hncm91cD1zaE9wZXJhdG9yIHN0YXJ0PSsiKyBza2lwPStcXCIrIGVuZD0rIisJY29udGFpbnM9QHNoRGJsUXVvdGVMaXN0LHNoU3RyaW5nU3BlY2lhbAogc3luIG1hdGNoICAgc2hTdHJpbmdTcGVjaWFsCSJbXls6cHJpbnQ6XV0iCWNvbnRhaW5lZApAQCAtMzE0LDcgKzMyOCw3IEBACiAiPT09PT09PT09PT09PQogc3luIG1hdGNoICBzaFZhcmlhYmxlICJcPFwoW2J3Z2xzYXZdOlwpXD1bYS16QS1aMC05LiFAXyUrLF0qXHplPSIJbmV4dGdyb3VwPXNoU2V0SWRlbnRpZmllcgogc3luIG1hdGNoICBzaElkV2hpdGVTcGFjZSAgY29udGFpbmVkCSJccyIKLXN5biBtYXRjaCAgc2hTZXRJZGVudGlmaWVyIGNvbnRhaW5lZAkiPSIJbmV4dGdyb3VwPXNoUGF0dGVybixzaERlcmVmLHNoRGVyZWZTaW1wbGUsc2hEb3VibGVRdW90ZSxzaFNpbmdsZVF1b3RlCitzeW4gbWF0Y2ggIHNoU2V0SWRlbnRpZmllciBjb250YWluZWQJIj0iCW5leHRncm91cD1zaFBhdHRlcm4sc2hEZXJlZixzaERlcmVmU2ltcGxlLHNoRG91YmxlUXVvdGUsc2hTaW5nbGVRdW90ZSxzaEV4U2luZ2xlUXVvdGUKIGlmIGV4aXN0cygiYjppc19iYXNoIikKICAgc3luIHJlZ2lvbiBzaFNldExpc3QgbWF0Y2hncm91cD1zaFNldCBzdGFydD0iXDxcKGRlY2xhcmVcfHR5cGVzZXRcfGxvY2FsXHxleHBvcnRcfHVuc2V0XClcPlx6ZVteL10iIGVuZD0iJCIgbWF0Y2hncm91cD1zaE9wZXJhdG9yIGVuZD0iWzsmXSJtZT1lLTEgbWF0Y2hncm91cD1OT05FIGVuZD0iI1x8PSJtZT1lLTEgY29udGFpbnM9QHNoSWRMaXN0CiAgIHN5biByZWdpb24gc2hTZXRMaXN0IG1hdGNoZ3JvdXA9c2hTZXQgc3RhcnQ9Ilw8c2V0XD5bXi9dIm1lPWUtMSBlbmQ9IiQiIGVuZD0iXFx6ZVt8KV0iCQkgbWF0Y2hncm91cD1zaE9wZXJhdG9yIGVuZD0iWzsmXSJtZT1lLTEgbWF0Y2hncm91cD1OT05FIGVuZD0iWyM9XSJtZT1lLTEgY29udGFpbnM9QHNoSWRMaXN0CkBAIC00NDgsMzIgKzQ2MiwzMCBAQAogIiBEZWZhdWx0IEhpZ2hsaWdodGluZzoge3t7MQogIiA9PT09PT09PT09PT09PT09PT09PT0KIGhpIGRlZiBsaW5rIHNoQXJpdGhSZWdpb24Jc2hTaGVsbFZhcmlhYmxlcworaGkgZGVmIGxpbmsgc2hCZWdpbkhlcmUJc2hSZWRpcgogaGkgZGVmIGxpbmsgc2hDYXNlQmFyCXNoQ29uZGl0aW9uYWwKLWhpIGRlZiBsaW5rIHNoQ2FzZUluCXNoQ29uZGl0aW9uYWwKIGhpIGRlZiBsaW5rIHNoQ2FzZUNvbW1hbmRTdWIJc2hDb21tYW5kU3ViCiBoaSBkZWYgbGluayBzaENhc2VEb3VibGVRdW90ZQlzaERvdWJsZVF1b3RlCitoaSBkZWYgbGluayBzaENhc2VJbglzaENvbmRpdGlvbmFsCiBoaSBkZWYgbGluayBzaENhc2VTaW5nbGVRdW90ZQlzaFNpbmdsZVF1b3RlCiBoaSBkZWYgbGluayBzaENhc2VTdGFydAlzaENvbmRpdGlvbmFsCiBoaSBkZWYgbGluayBzaENtZFN1YlJlZ2lvbglzaFNoZWxsVmFyaWFibGVzCiBoaSBkZWYgbGluayBzaENvbG9uCXNoU3RhdGVtZW50Ci0KLWhpIGRlZiBsaW5rIHNoRGVyZWYJc2hTaGVsbFZhcmlhYmxlcwogaGkgZGVmIGxpbmsgc2hEZXJlZk9wCXNoT3BlcmF0b3IKLQotaGkgZGVmIGxpbmsgc2hEZXJlZlZhcglzaERlcmVmCi1oaSBkZWYgbGluayBzaERlcmVmUE9MCXNoRGVyZWZPcAotaGkgZGVmIGxpbmsgc2hEZXJlZlBhdFN0cmluZwlzaERlcmVmUGF0dGVybgogaGkgZGVmIGxpbmsgc2hEZXJlZlBhdFN0cmluZ09wCXNoRGVyZWZPcAoraGkgZGVmIGxpbmsgc2hEZXJlZlBhdFN0cmluZwlzaERlcmVmUGF0dGVybgoraGkgZGVmIGxpbmsgc2hEZXJlZlBPTAlzaERlcmVmT3AKK2hpIGRlZiBsaW5rIHNoRGVyZWYJc2hTaGVsbFZhcmlhYmxlcwogaGkgZGVmIGxpbmsgc2hEZXJlZlNpbXBsZQlzaERlcmVmCiBoaSBkZWYgbGluayBzaERlcmVmU3BlY2lhbAlzaERlcmVmCiBoaSBkZWYgbGluayBzaERlcmVmU3RyaW5nCXNoRG91YmxlUXVvdGUKLWhpIGRlZiBsaW5rIHNoSGVyZVBheWxvYWQJc2hIZXJlRG9jCi1oaSBkZWYgbGluayBzaEJlZ2luSGVyZQlzaFJlZGlyCi0KK2hpIGRlZiBsaW5rIHNoRGVyZWZWYXIJc2hEZXJlZgogaGkgZGVmIGxpbmsgc2hEb3VibGVRdW90ZQlzaFN0cmluZwogaGkgZGVmIGxpbmsgc2hFY2hvCXNoU3RyaW5nCiBoaSBkZWYgbGluayBzaEVtYmVkZGVkRWNobwlzaFN0cmluZworaGkgZGVmIGxpbmsgc2hFeFNpbmdsZVF1b3RlCXNoU2luZ2xlUXVvdGUKIGhpIGRlZiBsaW5rIHNoSGVyZURvYwlzaFN0cmluZworaGkgZGVmIGxpbmsgc2hIZXJlUGF5bG9hZAlzaEhlcmVEb2MKIGhpIGRlZiBsaW5rIHNoTG9vcAlzaFN0YXRlbWVudAogaGkgZGVmIGxpbmsgc2hPcHRpb24Jc2hDb21tYW5kU3ViCiBoaSBkZWYgbGluayBzaFBhdHRlcm4Jc2hTdHJpbmcKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3ZpbS52aW0gYi9ydW50aW1lL3N5bnRheC92aW0udmltCmluZGV4IGUwOWIyMWIuLjhlNmY4ZDMgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvc3ludGF4L3ZpbS52aW0KKysrIGIvcnVudGltZS9zeW50YXgvdmltLnZpbQpAQCAtMSw4ICsxLDggQEAKICIgVmltIHN5bnRheCBmaWxlCiAiIExhbmd1YWdlOglWaW0gNy4wIHNjcmlwdAogIiBNYWludGFpbmVyOglEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxOZHJPY2hpcFNAUGNhbXBiZWxsQWZhbWlseS5NYml6PgotIiBMYXN0IENoYW5nZToJRmVicnVhcnkgMDksIDIwMDUKLSIgVmVyc2lvbjoJNy4wLTA0CisiIExhc3QgQ2hhbmdlOglGZWIgMTQsIDIwMDUKKyIgVmVyc2lvbjoJNy4wLTA1CiAiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGtleXdvcmQgbGlzdHM6IHt7ezEKIAogIiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQge3t7MgpAQCAtMTYsNyArMTYsNyBAQAogc3luIGNsdXN0ZXIgdmltQ29tbWVudEdyb3VwCWNvbnRhaW5zPXZpbVRvZG8KIAogIiByZWd1bGFyIHZpbSBjb21tYW5kcyB7e3syCi1zeW4ga2V5d29yZCB2aW1Db21tYW5kIGNvbnRhaW5lZAlhYlticmV2aWF0ZV0gYWJjW2xlYXJdIGFib1t2ZWxlZnRdIGFsW2xdIGFyZ2FbZGRdIGFyZ2RbZWxldGVdIGFyZ2RvIGFyZ2VbZGl0XSBhcmdnW2xvYmFsXSBhcmdsW29jYWxdIGFyW2dzXSBhcmd1W21lbnRdIGFzW2NpaV0gYmFkW2RdIGJhW2xsXSBiZFtlbGV0ZV0gYmUgYmVsW293cmlnaHRdIGJmW2lyc3RdIGJsW2FzdF0gYm1bb2RpZmllZF0gYm5bZXh0XSBiTltleHRdIGJvW3RyaWdodF0gYnBbcmV2aW91c10gYnJlYVtrXSBicmVha2FbZGRdIGJyZWFrZFtlbF0gYnJlYWtsW2lzdF0gYnJbZXdpbmRdIGJyb1t3c2VdIGJ1ZmRvIGJbdWZmZXJdIGJ1ZmZlcnMgYnVuW2xvYWRdIGJ3W2lwZW91dF0gY2FbYmJyZXZdIGNhYmNbbGVhcl0gY2FsW2xdIGNhdFtjaF0gY2JbdWZmZXJdIGNjIGNjbFtvc2VdIGNkIGNlW250ZXJdIGNmW2lsZV0gY2ZpcltzdF0gY2dbZXRmaWxlXSBjW2hhbmdlXSBjaGFuZ2VzIGNoZFtpcl0gY2hlW2NrcGF0aF0gY2hlY2t0W2ltZV0gY2xhW3N0XSBjbFtpc3RdIGNsb1tzZV0gY21hcGNbbGVhcl0gY25ld1tlcl0gY25bZXh0XSBjTltleHRdIGNuZltpbGVdIGNOZltpbGVdIGNub3JlYVtiYnJldl0gY29sW2Rlcl0gY29sb1tyc2NoZW1lXSBjb21jW2xlYXJdIGNvbXBbaWxlcl0gY29uZltpcm1dIGNvblt0aW51ZV0gY29wZVtuXSBjb1tweV0gY3BmW2lsZV0gY3BbcmV2aW91c10gY3FbdWl0XSBjcltld2luZF0gY3VuYVtiYnJldl0gY3Vbbm1hcF0gY3dbaW5kb3ddIGRlYnVnZ1tyZWVkeV0gZGVsY1tvbW1hbmRdIGRbZWxldGVdIERlbGV0ZUZpcnN0IGRlbGZbdW5jdGlvbl0gZGVsbVthcmtzXSBkaWZmZ1tldF0gZGlmZm9mZiBkaWZmcGF0Y2ggZGlmZnB1W3RdIGRpZmZzcGxpdCBkaWZmdGhpcyBkaWdbcmFwaHNdIGRpW3NwbGF5XSBkalt1bXBdIGRsW2lzdF0gZHJbb3BdIGRzW2VhcmNoXSBkc3BbbGl0XSBlY2hvZVtycl0gZWNob21bc2ddIGVjaG9uIGVbZGl0XSBlbFtzZV0gZWxzZWlbZl0gZW1bZW51XSBlbWVudSogZW5kZm9bcl0gZW5kZlt1bmN0aW9uXSBlbltkaWZdIGVuZHRbcnldIGVuZHdbaGlsZV0gZW5lW3ddIGV4IGV4aVt0XSBleHVbc2FnZV0gZltpbGVdIGZpbGVzIGZpbGV0eXBlIGZpbmFbbGx5XSBmaW5bZF0gZmluaVtzaF0gZmlyW3N0XSBmaXhbZGVsXSBmb1tsZF0gZm9sZGNbbG9zZV0gZm9sZGRvY1tsb3NlZF0gZm9sZGRbb29wZW5dIGZvbGRvW3Blbl0gZm9yIGZ1W25jdGlvbl0gZ1tsb2JhbF0gZ29bdG9dIGdyW2VwXSBncmVwYVtkZF0gaGFbcmRjb3B5XSBoW2VscF0gaGVscGZbaW5kXSBoZWxwZ1tyZXBdIGhlbHB0W2Fnc10gaGlkW2VdIGhpc1t0b3J5XSBJIGlhW2JicmV2XSBpYWJjW2xlYXJdIGlmIGlqW3VtcF0gaWxbaXN0XSBpbWFwY1tsZWFyXSBpbm9yZWFbYmJyZXZdIGlzW2VhcmNoXSBpc3BbbGl0XSBpdW5hW2JicmV2XSBpdVtubWFwXSBqW29pbl0ganVbbXBzXSBrIGtlZXBhbHQga2VlcGpbdW1wc10ga2VlW3BtYXJrc10gbGFuW2d1YWdlXSBsYVtzdF0gbGNbZF0gbGNoW2Rpcl0gbGVbZnRdIGxlZnRhW2JvdmVdIGxbaXN0XSBsbVthcF0gbG1hcGNbbGVhcl0gbG5bb3JlbWFwXSBsb1thZHZpZXddIGxvY1trbWFya3NdIGxvY2t2W2FyXSBscyBsdVtubWFwXSBtYWtbZV0gbWFbcmtdIG1hcmtzIG1hdFtjaF0gbWVudXRbcmFuc2xhdGVdIG1rW2V4cmNdIG1rc1tlc3Npb25dIG1rdmllW3ddIG1rdltpbXJjXSBtb2RbZV0gbVtvdmVdIG16ZltpbGVdIG16W3NjaGVtZV0gbmJrZXkgbmV3IG5bZXh0XSBOW2V4dF0gbm1hcGNbbGVhcl0gbm9oW2xzZWFyY2hdIG5vcmVhW2JicmV2XSBOcmVhZCBudVttYmVyXSBudW5bbWFwXSBOdyBvbWFwY1tsZWFyXSBvbltseV0gb1twZW5dIG9wdFtpb25zXSBvdVtubWFwXSBwY1tsb3NlXSBwZWRbaXRdIHBlW3JsXSBwZXJsZFtvXSBwb1twXSBwb3B1IHBvcHVbcF0gcHBbb3BdIHByZVtzZXJ2ZV0gcHJldltpb3VzXSBwW3JpbnRdIFBbcmludF0gcHJvbXB0IHByb21wdGZbaW5kXSBwcm9tcHRyW2VwbF0gcHNbZWFyY2hdIHB0YVtnXSBwdGZbaXJzdF0gcHRqW3VtcF0gcHRsW2FzdF0gcHRuW2V4dF0gcHROW2V4dF0gcHRwW3JldmlvdXNdIHB0cltld2luZF0gcHRzW2VsZWN0XSBwdVt0XSBwd1tkXSBweWZbaWxlXSBweVt0aG9uXSBxYVtsbF0gcVt1aXRdIHF1aXRhW2xsXSByW2VhZF0gcmVjW292ZXJdIHJlZGlbcl0gcmVkW29dIHJlZHJbYXddIHJlZHJhd3NbdGF0dXNdIHJlZ1tpc3RlcnNdIHJlc1tpemVdIHJldFthYl0gcmV0dVtybl0gcmV3W2luZF0gcmlbZ2h0XSByaWdodGJbZWxvd10gcnViW3ldIHJ1YnlkW29dIHJ1YnlmW2lsZV0gcnVbbnRpbWVdIHJ2W2ltaW5mb10gc2FsW2xdIHNhbmRib3ggc2Fbcmd1bWVudF0gc2F2W2Vhc10gc2JhW2xsXSBzYmZbaXJzdF0gc2JsW2FzdF0gc2JtW29kaWZpZWRdIHNibltleHRdIHNiTltleHRdIHNicFtyZXZpb3VzXSBzYnJbZXdpbmRdIHNiW3VmZmVyXSBzY3JpcHRlW25jb2RpbmddIHNjcmlwW3RuYW1lc10gc2VbdF0gc2V0ZltpbGV0eXBlXSBzZXRnW2xvYmFsXSBzZXRsW29jYWxdIHNmW2luZF0gc2ZpcltzdCBzaFtlbGxdIHNpZ24gc2lsW2VudF0gc2ltW2FsdF0gc2xhW3N0XSBzbFtlZXBdIHNtW2FnaWNdIHNuW2V4dF0gc05bZXh0XSBzbmlbZmZdIHNub1ttYWdpY10gc29bdXJjZV0gc3BbbGl0XSBzcHJbZXZpb3VzXSBzcmVbd2luZF0gc3RhW2ddIHN0YXJbdGluc2VydF0gc3RhcnRyW2VwbGFjZV0gc3RqW3VtcF0gc3Rbb3BdIHN0b3BpW25zZXJ0XSBzdHNbZWxlY3RdIHN1bltoaWRlXSBzdXNbcGVuZF0gc3ZbaWV3XSBzeW5jYmluZCB0IHRhW2ddIHRhZ3MgdGNbbF0gdGNsZFtvXSB0Y2xmW2lsZV0gdGVbYXJvZmZdIHRmW2lyc3RdIHRoZSB0aFtyb3ddIHRqW3VtcF0gdGxbYXN0XSB0bSB0bVtlbnVdIHRuW2V4dF0gdE5bZXh0XSB0b1twbGVmdF0gdHBbcmV2aW91c10gdHJbZXdpbmRdIHRyeSB0c1tlbGVjdF0gdHUgdHVbbm1lbnVdIHVuYVtiYnJldmlhdGVdIHVbbmRvXSB1bmhbaWRlXSB1bmxvW2NrdmFyXSB1bm1bYXBdIHVwW2RhdGVdIHZlcmJbb3NlXSB2ZVtyc2lvbl0gdmVydFtpY2FsXSB2W2dsb2JhbF0gdmllW3ddIHZpbVtncmVwXSB2aW1ncmVwYVtkZF0gdmlbc3VhbF0gdml1W3NhZ2VdIHZtYXBjW2xlYXJdIHZuZVt3XSB2c1twbGl0XSB2dVtubWFwXSB3YVtsbF0gd2hbaWxlXSB3aW5jW21kXSB3aW5kbyB3aW5wW29zXSB3aW5wb3MqIHdpbltzaXplXSB3bltleHRdIHdOW2V4dF0gd3BbcmV2aW91c10gd3Egd3FhW2xsXSB3W3JpdGVdIHdzW3ZlcmJdIHd2W2ltaW5mb10gWCB4YVtsbF0geFtpdF0geVthbmtdIAorc3luIGtleXdvcmQgdmltQ29tbWFuZCBjb250YWluZWQJYWJbYnJldmlhdGVdIGFiY1tsZWFyXSBhYm9bdmVsZWZ0XSBhbFtsXSBhcmdhW2RkXSBhcmdkW2VsZXRlXSBhcmdkbyBhcmdlW2RpdF0gYXJnZ1tsb2JhbF0gYXJnbFtvY2FsXSBhcltnc10gYXJndVttZW50XSBhc1tjaWldIGJhZFtkXSBiYVtsbF0gYmRbZWxldGVdIGJlIGJlbFtvd3JpZ2h0XSBiZltpcnN0XSBibFthc3RdIGJtW29kaWZpZWRdIGJuW2V4dF0gYk5bZXh0XSBib1t0cmlnaHRdIGJwW3JldmlvdXNdIGJyZWFba10gYnJlYWthW2RkXSBicmVha2RbZWxdIGJyZWFrbFtpc3RdIGJyW2V3aW5kXSBicm9bd3NlXSBidWZkbyBiW3VmZmVyXSBidWZmZXJzIGJ1bltsb2FkXSBid1tpcGVvdXRdIGNhW2JicmV2XSBjYWJjW2xlYXJdIGNhbFtsXSBjYXRbY2hdIGNiW3VmZmVyXSBjYyBjY2xbb3NlXSBjZCBjZVtudGVyXSBjZltpbGVdIGNmaXJbc3RdIGNnW2V0ZmlsZV0gY1toYW5nZV0gY2hhbmdlcyBjaGRbaXJdIGNoZVtja3BhdGhdIGNoZWNrdFtpbWVdIGNsYVtzdF0gY2xbaXN0XSBjbG9bc2VdIGNtYXBjW2xlYXJdIGNuZXdbZXJdIGNuW2V4dF0gY05bZXh0XSBjbmZbaWxlXSBjTmZbaWxlXSBjbm9yZWFbYmJyZXZdIGNvbFtkZXJdIGNvbG9bcnNjaGVtZV0gY29tY1tsZWFyXSBjb21wW2lsZXJdIGNvbmZbaXJtXSBjb25bdGludWVdIGNvcGVbbl0gY29bcHldIGNwZltpbGVdIGNwW3JldmlvdXNdIGNxW3VpdF0gY3JbZXdpbmRdIGN1bmFbYmJyZXZdIGN1W25tYXBdIGN3W2luZG93XSBkZWJ1Z2dbcmVlZHldIGRlbGNbb21tYW5kXSBkW2VsZXRlXSBEZWxldGVGaXJzdCBkZWxmW3VuY3Rpb25dIGRlbG1bYXJrc10gZGlmZmdbZXRdIGRpZmZvZmYgZGlmZnBhdGNoIGRpZmZwdVt0XSBkaWZmc3BsaXQgZGlmZnRoaXMgZGlnW3JhcGhzXSBkaVtzcGxheV0gZGpbdW1wXSBkbFtpc3RdIGRyW29wXSBkc1tlYXJjaF0gZHNwW2xpdF0gZWNob2VbcnJdIGVjaG9tW3NnXSBlY2hvbiBlW2RpdF0gZWxbc2VdIGVsc2VpW2ZdIGVtW2VudV0gZW1lbnUqIGVuZGZvW3JdIGVuZGZbdW5jdGlvbl0gZW5bZGlmXSBlbmR0W3J5XSBlbmR3W2hpbGVdIGVuZVt3XSBleCBleGlbdF0gZXh1W3NhZ2VdIGZbaWxlXSBmaWxlcyBmaWxldHlwZSBmaW5hW2xseV0gZmluW2RdIGZpbmlbc2hdIGZpcltzdF0gZml4W2RlbF0gZm9bbGRdIGZvbGRjW2xvc2VdIGZvbGRkb2NbbG9zZWRdIGZvbGRkW29vcGVuXSBmb2xkb1twZW5dIGZvciBmdVtuY3Rpb25dIGdbbG9iYWxdIGdvW3RvXSBncltlcF0gZ3JlcGFbZGRdIGhhW3JkY29weV0gaFtlbHBdIGhlbHBmW2luZF0gaGVscGdbcmVwXSBoZWxwdFthZ3NdIGhpZFtlXSBoaXNbdG9yeV0gSSBpYVtiYnJldl0gaWFiY1tsZWFyXSBpZiBpalt1bXBdIGlsW2lzdF0gaW1hcGNbbGVhcl0gaW5vcmVhW2JicmV2XSBpc1tlYXJjaF0gaXNwW2xpdF0gaXVuYVtiYnJldl0gaXVbbm1hcF0galtvaW5dIGp1W21wc10gayBrZWVwYWx0IGtlZXBqW3VtcHNdIGtlZVtwbWFya3NdIGxhbltndWFnZV0gbGFbc3RdIGxjW2RdIGxjaFtkaXJdIGxlW2Z0XSBsZWZ0YVtib3ZlXSBsW2lzdF0gbG1bYXBdIGxtYXBjW2xlYXJdIGxuW29yZW1hcF0gbG9bYWR2aWV3XSBsb2Nba21hcmtzXSBsb2Nrdlthcl0gbHMgbHVbbm1hcF0gbWFrW2VdIG1hW3JrXSBtYXJrcyBtYXRbY2hdIG1lbnV0W3JhbnNsYXRlXSBta1tleHJjXSBta3NbZXNzaW9uXSBta3ZpZVt3XSBta3ZbaW1yY10gbW9kW2VdIG1bb3ZlXSBtemZbaWxlXSBteltzY2hlbWVdIG5ia2V5IG5ldyBuW2V4dF0gTltleHRdIG5tYXBjW2xlYXJdIG5vaFtsc2VhcmNoXSBub3JlYVtiYnJldl0gTnJlYWQgbnVbbWJlcl0gbnVuW21hcF0gTncgb21hcGNbbGVhcl0gb25bbHldIG9bcGVuXSBvcHRbaW9uc10gb3Vbbm1hcF0gcGNbbG9zZV0gcGVkW2l0XSBwZVtybF0gcGVybGRbb10gcG9bcF0gcG9wdSBwb3B1W3BdIHBwW29wXSBwcmVbc2VydmVdIHByZXZbaW91c10gcFtyaW50XSBQW3JpbnRdIHByb21wdCBwcm9tcHRmW2luZF0gcHJvbXB0cltlcGxdIHBzW2VhcmNoXSBwdGFbZ10gcHRmW2lyc3RdIHB0alt1bXBdIHB0bFthc3RdIHB0bltleHRdIHB0TltleHRdIHB0cFtyZXZpb3VzXSBwdHJbZXdpbmRdIHB0c1tlbGVjdF0gcHVbdF0gcHdbZF0gcHlmW2lsZV0gcHlbdGhvbl0gcWFbbGxdIHFbdWl0XSBxdWl0YVtsbF0gcltlYWRdIHJlY1tvdmVyXSByZWRpW3JdIHJlZFtvXSByZWRyW2F3XSByZWRyYXdzW3RhdHVzXSByZWdbaXN0ZXJzXSByZXNbaXplXSByZXRbYWJdIHJldHVbcm5dIHJld1tpbmRdIHJpW2dodF0gcmlnaHRiW2Vsb3ddIHJ1Ylt5XSBydWJ5ZFtvXSBydWJ5ZltpbGVdIHJ1W250aW1lXSBydltpbWluZm9dIHNhbFtsXSBzYW5kYm94IHNhW3JndW1lbnRdIHNhdltlYXNdIHNiYVtsbF0gc2JmW2lyc3RdIHNibFthc3RdIHNibVtvZGlmaWVkXSBzYm5bZXh0XSBzYk5bZXh0XSBzYnBbcmV2aW91c10gc2JyW2V3aW5kXSBzYlt1ZmZlcl0gc2NyaXB0ZVtuY29kaW5nXSBzY3JpcFt0bmFtZXNdIHNlW3RdIHNldGZbaWxldHlwZV0gc2V0Z1tsb2JhbF0gc2V0bFtvY2FsXSBzZltpbmRdIHNmaXJbc3RdIHNoW2VsbF0gc2lnbiBzaWxbZW50XSBzaW1bYWx0XSBzbGFbc3RdIHNsW2VlcF0gc21bYWdpY10gc25bZXh0XSBzTltleHRdIHNuaVtmZl0gc25vW21hZ2ljXSBzb1t1cmNlXSBzcFtsaXRdIHNwcltldmlvdXNdIHNyZVt3aW5kXSBzdGFbZ10gc3Rhclt0aW5zZXJ0XSBzdGFydHJbZXBsYWNlXSBzdGpbdW1wXSBzdFtvcF0gc3RvcGlbbnNlcnRdIHN0c1tlbGVjdF0gc3VuW2hpZGVdIHN1c1twZW5kXSBzdltpZXddIHN5bmNiaW5kIHQgdGFbZ10gdGFncyB0Y1tsXSB0Y2xkW29dIHRjbGZbaWxlXSB0ZVthcm9mZl0gdGZbaXJzdF0gdGhlIHRoW3Jvd10gdGpbdW1wXSB0bFthc3RdIHRtIHRtW2VudV0gdG5bZXh0XSB0TltleHRdIHRvW3BsZWZ0XSB0cFtyZXZpb3VzXSB0cltld2luZF0gdHJ5IHRzW2VsZWN0XSB0dSB0dVtubWVudV0gdW5hW2JicmV2aWF0ZV0gdVtuZG9dIHVuaFtpZGVdIHVubG9bY2t2YXJdIHVubVthcF0gdXBbZGF0ZV0gdmVyYltvc2VdIHZlW3JzaW9uXSB2ZXJ0W2ljYWxdIHZbZ2xvYmFsXSB2aWVbd10gdmltW2dyZXBdIHZpbWdyZXBhW2RkXSB2aVtzdWFsXSB2aXVbc2FnZV0gdm1hcGNbbGVhcl0gdm5lW3ddIHZzW3BsaXRdIHZ1W25tYXBdIHdhW2xsXSB3aFtpbGVdIHdpbmNbbWRdIHdpbmRvIHdpbnBbb3NdIHdpbnBvcyogd2luW3NpemVdIHduW2V4dF0gd05bZXh0XSB3cFtyZXZpb3VzXSB3cSB3cWFbbGxdIHdbcml0ZV0gd3NbdmVyYl0gd3ZbaW1pbmZvXSBYIHhhW2xsXSB4W2l0XSB5W2Fua10gCiBzeW4gbWF0Y2ggICB2aW1Db21tYW5kIGNvbnRhaW5lZAkiXDx6Wy0rXi49XSIKIAogIiB2aW1PcHRpb25zIGFyZSBjYXVnaHQgb25seSB3aGVuIGNvbnRhaW5lZCBpbiBhIHZpbVNldCB7e3syCkBAIC0zODksMTMgKzM4OSwxNCBAQAogCiAiIFN5bnRheDogc3luYyB7e3syCiAiID09PT09PT09PT09PQotc3luIGtleXdvcmQgdmltU3luVHlwZQljb250YWluZWQJc3luYwlza2lwd2hpdGUJbmV4dGdyb3VwPXZpbVN5bmNDLHZpbVN5bmNMaW5lcyx2aW1TeW5jTWF0Y2gsdmltU3luY0Vycm9yLHZpbVN5bmNMaW5lY29udCx2aW1TeW5jUmVnaW9uCitzeW4ga2V5d29yZCB2aW1TeW5UeXBlCWNvbnRhaW5lZAlzeW5jCXNraXB3aGl0ZQluZXh0Z3JvdXA9dmltU3luY0MsdmltU3luY0xpbmVzLHZpbVN5bmNNYXRjaCx2aW1TeW5jRXJyb3IsdmltU3luY0xpbmVicmVhayx2aW1TeW5jTGluZWNvbnQsdmltU3luY1JlZ2lvbgogaWYgIWV4aXN0cygiZzp2aW1zeW50YXhfbm9lcnJvciIpCiAgc3luIG1hdGNoICAgdmltU3luY0Vycm9yCWNvbnRhaW5lZAkiXGlcKyIKIGVuZGlmCiBzeW4ga2V5d29yZCB2aW1TeW5jQwljb250YWluZWQJY2NvbW1lbnQJY2xlYXIJZnJvbXN0YXJ0CiBzeW4ga2V5d29yZCB2aW1TeW5jTWF0Y2gJY29udGFpbmVkCW1hdGNoCXNraXB3aGl0ZQluZXh0Z3JvdXA9dmltU3luY0dyb3VwTmFtZQogc3luIGtleXdvcmQgdmltU3luY1JlZ2lvbgljb250YWluZWQJcmVnaW9uCXNraXB3aGl0ZQluZXh0Z3JvdXA9dmltU3luUmVnCitzeW4gbWF0Y2ggICB2aW1TeW5jTGluZWJyZWFrCWNvbnRhaW5lZAkiXDxsaW5lYnJlYWtzPSIJc2tpcHdoaXRlCW5leHRncm91cD12aW1OdW1iZXIKIHN5biBrZXl3b3JkIHZpbVN5bmNMaW5lY29udAljb250YWluZWQJbGluZWNvbnQJc2tpcHdoaXRlCW5leHRncm91cD12aW1TeW5SZWdQYXQKIHN5biBtYXRjaCAgIHZpbVN5bmNMaW5lcwljb250YWluZWQJIlwobWluXHxtYXhcKVw9bGluZXM9IgluZXh0Z3JvdXA9dmltTnVtYmVyCiBzeW4gbWF0Y2ggICB2aW1TeW5jR3JvdXBOYW1lCWNvbnRhaW5lZAkiXGtcKyIJc2tpcHdoaXRlCW5leHRncm91cD12aW1TeW5jS2V5CmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUgYi9zcmMvTWFrZWZpbGUKaW5kZXggYjJkYzAxNS4uMGVhMzhmNyAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlCisrKyBiL3NyYy9NYWtlZmlsZQpAQCAtNTA1LDYgKzUwNSw3IEBACiAjIE9mdGVuIHVzZWQgZm9yIEdDQzogbWl4ZWQgb3B0aW1pemluZywgbG90IG9mIG9wdGltaXppbmcsIGRlYnVnZ2luZwogI0NGTEFHUyA9IC1nIC1PMiAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAtV2FsbCAtV3NoYWRvdyAtV21pc3NpbmctcHJvdG90eXBlcwogI0NGTEFHUyA9IC1nIC1PMiAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAtV2FsbCAtV21pc3NpbmctcHJvdG90eXBlcworI0NGTEFHUyA9IC1nIC1XYWxsIC1XbWlzc2luZy1wcm90b3R5cGVzCiAjQ0ZMQUdTID0gLU82IC1mbm8tc3RyZW5ndGgtcmVkdWNlIC1XYWxsIC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzCiAjQ0ZMQUdTID0gLWcgLURERUJVRyAtV2FsbCAtV3NoYWRvdyAtV21pc3NpbmctcHJvdG90eXBlcwogI0NGTEFHUyA9IC1nIC1PMiAnLURTVEFSVFVQVElNRT0idmltc3RhcnR1cCInIC1mbm8tc3RyZW5ndGgtcmVkdWNlIC1XYWxsIC1XbWlzc2luZy1wcm90b3R5cGVzCkBAIC0yNDEwLDYgKzI0MTEsMTEgQEAKIGJ1bmRsZS1kaXI6ICQoQVBQRElSKS9Db250ZW50cyAkKFZJTVRBUkdFVCkKIAktQHNyY2Rpcj1gcHdkYDsgY2QgJChIRUxQU09VUkNFKTsgJChNQUtFKSBWSU1FWEU9JCRzcmNkaXIvJChWSU1UQVJHRVQpIHZpbXRhZ3MKIAljcCAtUiAuLi9ydW50aW1lICQoQVBQRElSKQorIyBXaGVuIHVzaW5nIENWUyBzb21lIENWUyBkaXJlY3RvcmllcyBtaWdodCBoYXZlIGJlZW4gY29waWVkLgorCWN2cz1gZmluZCAkKEFQUERJUikgXCggLW5hbWUgQ1ZTIC1vIC1uYW1lIEFBUERJUiBcKSAtcHJpbnRgOyBcCisJICAgICAgaWYgdGVzdCAtbiAiJCRjdnMiOyB0aGVuIFwKKwkJIHJtIC1yZiAkJGN2czsgXAorCSAgICAgIGZpCiAKIGJ1bmRsZS1leGVjdXRhYmxlOiAkKFZJTVRBUkdFVCkKIAljcCAkKFZJTVRBUkdFVCkgJChBUFBESVIpL0NvbnRlbnRzL01hY09TLyQoVklNVEFSR0VUKQpkaWZmIC0tZ2l0IGEvc3JjL2V4X2RvY21kLmMgYi9zcmMvZXhfZG9jbWQuYwppbmRleCBkMmU5MzNhLi4yYmI1YWViIDEwMDY0NAotLS0gYS9zcmMvZXhfZG9jbWQuYworKysgYi9zcmMvZXhfZG9jbWQuYwpAQCAtMTI4LDYgKzEyOCw3IEBACiAKIHN0YXRpYyBpbnQJY2hlY2tfbW9yZSBfX0FSR1MoKGludCwgaW50KSk7CiBzdGF0aWMgbGluZW5yX1QgZ2V0X2FkZHJlc3MgX19BUkdTKChjaGFyX3UgKiosIGludCBza2lwLCBpbnQgdG9fb3RoZXJfZmlsZSkpOworc3RhdGljIHZvaWQJZ2V0X2ZsYWdzIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CiAjaWYgIWRlZmluZWQoRkVBVF9QRVJMKSB8fCAhZGVmaW5lZChGRUFUX1BZVEhPTikgfHwgIWRlZmluZWQoRkVBVF9UQ0wpIFwKIAl8fCAhZGVmaW5lZChGRUFUX1JVQlkpIHx8ICFkZWZpbmVkKEZFQVRfTVpTQ0hFTUUpCiBzdGF0aWMgdm9pZAlleF9zY3JpcHRfbmkgX19BUkdTKChleGFyZ19UICplYXApKTsKQEAgLTE4NSw2ICsxODYsNyBAQAogc3RhdGljIHZvaWQJZXhfbW9kZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogc3RhdGljIHZvaWQJZXhfd3Jvbmdtb2RpZmllciBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogc3RhdGljIHZvaWQJZXhfZmluZCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfb3BlbiBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogc3RhdGljIHZvaWQJZXhfZWRpdCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogI2lmICFkZWZpbmVkKEZFQVRfR1VJKSAmJiAhZGVmaW5lZChGRUFUX0NMSUVOVFNFUlZFUikKICMgZGVmaW5lIGV4X2Ryb3AJCWV4X25pCkBAIC0yNzEsNiArMjczLDcgQEAKIHN0YXRpYyB2b2lkCWV4X29wZXJhdG9ycyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogc3RhdGljIHZvaWQJZXhfcHV0IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CiBzdGF0aWMgdm9pZAlleF9jb3B5bW92ZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfbWF5X3ByaW50IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CiBzdGF0aWMgdm9pZAlleF9zdWJtYWdpYyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogc3RhdGljIHZvaWQJZXhfam9pbiBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogc3RhdGljIHZvaWQJZXhfYXQgX19BUkdTKChleGFyZ19UICplYXApKTsKQEAgLTU3MCwxOSArNTczLDIyIEBACiAgICAgaW50CQlzYXZlX21zZ19zY3JvbGw7CiAgICAgaW50CQlwcmV2X21zZ19yb3c7CiAgICAgbGluZW5yX1QJcHJldl9saW5lOworICAgIGludAkJY2hhbmdlZHRpY2s7CisKKyAgICBpZiAoaW1wcm92ZWQpCisJZXhtb2RlX2FjdGl2ZSA9IEVYTU9ERV9WSU07CisgICAgZWxzZQorCWV4bW9kZV9hY3RpdmUgPSBFWE1PREVfTk9STUFMOworICAgIFN0YXRlID0gTk9STUFMOworCisgICAgLyogV2hlbiB1c2luZyAiOmdsb2JhbCAvcGF0LyB2aXN1YWwiIGFuZCB0aGVuICJRIiB3ZSByZXR1cm4gdG8gY29udGludWUKKyAgICAgKiB0aGUgOmdsb2JhbCBjb21tYW5kLiAqLworICAgIGlmIChnbG9iYWxfYnVzeSkKKwlyZXR1cm47CiAKICAgICBzYXZlX21zZ19zY3JvbGwgPSBtc2dfc2Nyb2xsOwogICAgICsrUmVkcmF3aW5nRGlzYWJsZWQ7CSAgICAvKiBkb24ndCByZWRpc3BsYXkgdGhlIHdpbmRvdyAqLwogICAgICsrbm9fd2FpdF9yZXR1cm47CQkgICAgLyogZG9uJ3Qgd2FpdCBmb3IgcmV0dXJuICovCi0gICAgaWYgKGltcHJvdmVkKQotCWV4bW9kZV9hY3RpdmUgPSBFWE1PREVfVklNOwotICAgIGVsc2UKLSAgICB7Ci0Jc2V0dG1vZGUoVE1PREVfQ09PSyk7Ci0JZXhtb2RlX2FjdGl2ZSA9IEVYTU9ERV9OT1JNQUw7Ci0gICAgfQotCi0gICAgU3RhdGUgPSBOT1JNQUw7CiAjaWZkZWYgRkVBVF9HVUkKICAgICAvKiBJZ25vcmUgc2Nyb2xsYmFyIGFuZCBtb3VzZSBldmVudHMgaW4gRXggbW9kZSAqLwogICAgICsraG9sZF9ndWlfZXZlbnRzOwpAQCAtNjA2LDYgKzYxMiw3IEBACiAJbmVlZF93YWl0X3JldHVybiA9IEZBTFNFOwogCWV4X3ByZXNzZWRyZXR1cm4gPSBGQUxTRTsKIAlleF9ub19yZXByaW50ID0gRkFMU0U7CisJY2hhbmdlZHRpY2sgPSBjdXJidWYtPmJfY2hhbmdlZHRpY2s7CiAJcHJldl9tc2dfcm93ID0gbXNnX3JvdzsKIAlwcmV2X2xpbmUgPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CiAjaWZkZWYgRkVBVF9TTklGRgpAQCAtNjIwLDI5ICs2MjcsMzggQEAKIAkgICAgZG9fY21kbGluZShOVUxMLCBnZXRleG1vZGVsaW5lLCBOVUxMLCBET0NNRF9OT1dBSVQpOwogCWxpbmVzX2xlZnQgPSBSb3dzIC0gMTsKIAotCWlmIChwcmV2X2xpbmUgIT0gY3Vyd2luLT53X2N1cnNvci5sbnVtICYmICFleF9ub19yZXByaW50KQorCWlmICgocHJldl9saW5lICE9IGN1cndpbi0+d19jdXJzb3IubG51bQorCQkgICAgfHwgY2hhbmdlZHRpY2sgIT0gY3VyYnVmLT5iX2NoYW5nZWR0aWNrKSAmJiAhZXhfbm9fcmVwcmludCkKIAl7Ci0JICAgIGlmIChleF9wcmVzc2VkcmV0dXJuKQorCSAgICBpZiAoY3VyYnVmLT5iX21sLm1sX2ZsYWdzICYgTUxfRU1QVFkpCisJCUVNU0coXyhlX2VtcHR5YnVmKSk7CisJICAgIGVsc2UKIAkgICAgewotCQkvKiBnbyB1cCBvbmUgbGluZSwgdG8gb3ZlcndyaXRlIHRoZSAiOjxDUj4iIGxpbmUsIHNvIHRoZQotCQkgKiBvdXRwdXQgZG9lbnNuJ3QgY29udGFpbiBlbXB0eSBsaW5lcy4gKi8KLQkJbXNnX3JvdyA9IHByZXZfbXNnX3JvdzsKLQkJaWYgKHByZXZfbXNnX3JvdyA9PSBSb3dzIC0gMSkKLQkJICAgIG1zZ19yb3ctLTsKKwkJaWYgKGV4X3ByZXNzZWRyZXR1cm4pCisJCXsKKwkJICAgIC8qIGdvIHVwIG9uZSBsaW5lLCB0byBvdmVyd3JpdGUgdGhlICI6PENSPiIgbGluZSwgc28gdGhlCisJCSAgICAgKiBvdXRwdXQgZG9lbnNuJ3QgY29udGFpbiBlbXB0eSBsaW5lcy4gKi8KKwkJICAgIG1zZ19yb3cgPSBwcmV2X21zZ19yb3c7CisJCSAgICBpZiAocHJldl9tc2dfcm93ID09IFJvd3MgLSAxKQorCQkJbXNnX3Jvdy0tOworCQl9CisJCW1zZ19jb2wgPSAwOworCQlwcmludF9saW5lX25vX3ByZWZpeChjdXJ3aW4tPndfY3Vyc29yLmxudW0sIEZBTFNFLCBGQUxTRSk7CisJCW1zZ19jbHJfZW9zKCk7CiAJICAgIH0KLQkgICAgbXNnX2NvbCA9IDA7Ci0JICAgIHByaW50X2xpbmVfbm9fcHJlZml4KGN1cndpbi0+d19jdXJzb3IubG51bSwgRkFMU0UpOwotCSAgICBtc2dfY2xyX2VvcygpOwogCX0KLQllbHNlIGlmIChleF9wcmVzc2VkcmV0dXJuKQkvKiBtdXN0IGJlIGF0IEVPRiAqLwotCSAgICBFTVNHKF8oIkU1MDE6IEF0IGVuZC1vZi1maWxlIikpOworCWVsc2UgaWYgKGV4X3ByZXNzZWRyZXR1cm4gJiYgIWV4X25vX3JlcHJpbnQpCS8qIG11c3QgYmUgYXQgRU9GICovCisJeworCSAgICBpZiAoY3VyYnVmLT5iX21sLm1sX2ZsYWdzICYgTUxfRU1QVFkpCisJCUVNU0coXyhlX2VtcHR5YnVmKSk7CisJICAgIGVsc2UKKwkJRU1TRyhfKCJFNTAxOiBBdCBlbmQtb2YtZmlsZSIpKTsKKwl9CiAgICAgfQogCiAjaWZkZWYgRkVBVF9HVUkKICAgICAtLWhvbGRfZ3VpX2V2ZW50czsKICNlbmRpZgotICAgIGlmICghaW1wcm92ZWQpCi0Jc2V0dG1vZGUoVE1PREVfUkFXKTsKICAgICAtLVJlZHJhd2luZ0Rpc2FibGVkOwogICAgIC0tbm9fd2FpdF9yZXR1cm47CiAgICAgdXBkYXRlX3NjcmVlbihDTEVBUik7CkBAIC0xNjYzLDcgKzE2NzksOCBAQAogCS8qIGluIGV4IG1vZGUsIGFuIGVtcHR5IGxpbmUgd29ya3MgbGlrZSA6KyAqLwogCWlmICgqZWEuY21kID09IE5VTCAmJiBleG1vZGVfYWN0aXZlCiAJCQkmJiAoZ2V0bGluZV9lcXVhbChnZXRsaW5lLCBjb29raWUsIGdldGV4bW9kZWxpbmUpCi0JCQkgICAgfHwgZ2V0bGluZV9lcXVhbChnZXRsaW5lLCBjb29raWUsIGdldGV4bGluZSkpKQorCQkJICAgIHx8IGdldGxpbmVfZXF1YWwoZ2V0bGluZSwgY29va2llLCBnZXRleGxpbmUpKQorCQkJJiYgY3Vyd2luLT53X2N1cnNvci5sbnVtIDwgY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCiAJewogCSAgICBlYS5jbWQgPSAoY2hhcl91ICopIisiOwogCSAgICBleF9wcmVzc2VkcmV0dXJuID0gVFJVRTsKQEAgLTE2NzEsNyArMTY4OCwxMCBAQAogCiAJLyogaWdub3JlIGNvbW1lbnQgYW5kIGVtcHR5IGxpbmVzICovCiAJaWYgKCplYS5jbWQgPT0gJyInIHx8ICplYS5jbWQgPT0gTlVMKQorCXsKKwkgICAgZXhfcHJlc3NlZHJldHVybiA9IFRSVUU7CiAJICAgIGdvdG8gZG9lbmQ7CisJfQogCiAvKgogICogMi4gaGFuZGxlIGNvbW1hbmQgbW9kaWZpZXJzLgpAQCAtMTkzNiw3ICsxOTU2LDcgQEAKIAkgKi8KIAlpZiAoZWEuc2tpcCkJICAgIC8qIHNraXAgdGhpcyBpZiBpbnNpZGUgOmlmICovCiAJICAgIGdvdG8gZG9lbmQ7Ci0JaWYgKCplYS5jbWQgPT0gJ3wnKQorCWlmICgqZWEuY21kID09ICd8JyB8fCAoZXhtb2RlX2FjdGl2ZSAmJiBlYS5saW5lMSAhPSBlYS5saW5lMikpCiAJewogCSAgICBlYS5jbWRpZHggPSBDTURfcHJpbnQ7CiAJICAgIGVhLmFyZ3QgPSBSQU5HRStDT1VOVCtUUkxCQVI7CkBAIC0xOTQ4LDE0ICsxOTY4LDEyIEBACiAJfQogCWVsc2UgaWYgKGVhLmFkZHJfY291bnQgIT0gMCkKIAl7Ci0JICAgIGlmIChlYS5saW5lMiA8IDApCi0JCWVycm9ybXNnID0gaW52YWxpZF9yYW5nZSgmZWEpOworCSAgICBpZiAoZWEubGluZTIgPCAwIHx8IGVhLmxpbmUyID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisJCWVycm9ybXNnID0gKGNoYXJfdSAqKV8oZV9pbnZyYW5nZSk7CiAJICAgIGVsc2UKIAkgICAgewogCQlpZiAoZWEubGluZTIgPT0gMCkKIAkJICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IDE7Ci0JCWVsc2UgaWYgKGVhLmxpbmUyID4gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCi0JCSAgICBjdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKIAkJZWxzZQogCQkgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gZWEubGluZTI7CiAJCWJlZ2lubGluZShCTF9TT0wgfCBCTF9GSVgpOwpAQCAtMjA5MCw3ICsyMTA4LDcgQEAKIAkgKi8KIAlpZiAoIWdsb2JhbF9idXN5ICYmIGVhLmxpbmUxID4gZWEubGluZTIpCiAJewotCSAgICBpZiAoc291cmNpbmcpCisJICAgIGlmIChzb3VyY2luZyB8fCBleG1vZGVfYWN0aXZlKQogCSAgICB7CiAJCWVycm9ybXNnID0gKGNoYXJfdSAqKV8oIkU0OTM6IEJhY2t3YXJkcyByYW5nZSBnaXZlbiIpOwogCQlnb3RvIGRvZW5kOwpAQCAtMjI4MCw5ICsyMjk4LDEzIEBACiAKICAgICAvKgogICAgICAqIENoZWNrIGZvciA8bmV3bGluZT4gdG8gZW5kIGEgc2hlbGwgY29tbWFuZC4KLSAgICAgKiBBbHNvIGRvIHRoaXMgZm9yICI6cmVhZCAhY21kIiBhbmQgIjp3cml0ZSAhY21kIi4KKyAgICAgKiBBbHNvIGRvIHRoaXMgZm9yICI6cmVhZCAhY21kIiwgIjp3cml0ZSAhY21kIiBhbmQgIjpnbG9iYWwiLgorICAgICAqIEFueSBvdGhlcnM/CiAgICAgICovCi0gICAgZWxzZSBpZiAoZWEuY21kaWR4ID09IENNRF9iYW5nIHx8IGVhLnVzZWZpbHRlcikKKyAgICBlbHNlIGlmIChlYS5jbWRpZHggPT0gQ01EX2JhbmcKKwkgICAgfHwgZWEuY21kaWR4ID09IENNRF9nbG9iYWwKKwkgICAgfHwgZWEuY21kaWR4ID09IENNRF92Z2xvYmFsCisJICAgIHx8IGVhLnVzZWZpbHRlcikKICAgICB7CiAJZm9yIChwID0gZWEuYXJnOyAqcDsgKytwKQogCXsKQEAgLTIzNjcsNiArMjM4OSwxMiBAQAogCQllYS5saW5lMiA9IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OwogCX0KICAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBmbGFnczogJ2wnLCAncCcgYW5kICcjJy4KKyAgICAgKi8KKyAgICBpZiAoZWEuYXJndCAmIEVYRkxBR1MpCisJZ2V0X2ZsYWdzKCZlYSk7CiAJCQkJCQkvKiBubyBhcmd1bWVudHMgYWxsb3dlZCAqLwogICAgIGlmICghbmkgJiYgIShlYS5hcmd0ICYgRVhUUkEpICYmICplYS5hcmcgIT0gTlVMCiAJCQkgICAgICAmJiB2aW1fc3RyY2hyKChjaGFyX3UgKikifFwiIiwgKmVhLmFyZykgPT0gTlVMTCkKQEAgLTI2NjEsNiArMjY4OSw3IEBACiB7CiAgICAgaW50CQlsZW47CiAgICAgY2hhcl91CSpwOworICAgIGludAkJaTsKIAogICAgIC8qCiAgICAgICogSXNvbGF0ZSB0aGUgY29tbWFuZCBhbmQgc2VhcmNoIGZvciBpdCBpbiB0aGUgY29tbWFuZCB0YWJsZS4KQEAgLTI2NjksNiArMjY5OCw3IEBACiAgICAgICogLSB0aGUgJ3MnIGNvbW1hbmQgY2FuIGJlIGZvbGxvd2VkIGRpcmVjdGx5IGJ5ICdjJywgJ2cnLCAnaScsICdJJyBvciAncicKICAgICAgKgkgICAgYnV0IDpzcmVbd2luZF0gaXMgYW5vdGhlciBjb21tYW5kLCBhcyBhcmUgOnNjcmlwW3RuYW1lc10sCiAgICAgICoJICAgIDpzY3NbY29wZV0sIDpzaW1bYWx0XSwgOnNpZ1tuc10gYW5kIDpzaWxbZW50XS4KKyAgICAgKiAtIHRoZSAiZCIgY29tbWFuZCBjYW4gZGlyZWN0bHkgYmUgZm9sbG93ZWQgYnkgJ2wnIG9yICdwJyBmbGFnLgogICAgICAqLwogICAgIHAgPSBlYXAtPmNtZDsKICAgICBpZiAoKnAgPT0gJ2snKQpAQCAtMjY5NCw2ICsyNzI0LDIyIEBACiAJaWYgKHAgPT0gZWFwLT5jbWQgJiYgdmltX3N0cmNocigoY2hhcl91ICopIkAqIT0+PCZ+IyIsICpwKSAhPSBOVUxMKQogCSAgICArK3A7CiAJbGVuID0gKGludCkocCAtIGVhcC0+Y21kKTsKKwlpZiAoKmVhcC0+Y21kID09ICdkJyAmJiAocFstMV0gPT0gJ2wnIHx8IHBbLTFdID09ICdwJykpCisJeworCSAgICAvKiBDaGVjayBmb3IgIjpkbCIsICI6ZGVsbCIsIGV0Yy4gdG8gIjpkZWxldGVsIjogdGhhdCdzCisJICAgICAqIDpkZWxldGUgd2l0aCB0aGUgJ2wnIGZsYWcuICBTYW1lIGZvciAncCcuICovCisJICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKwkJaWYgKGVhcC0+Y21kW2ldICE9ICJkZWxldGUiW2ldKQorCQkgICAgYnJlYWs7CisJICAgIGlmIChpID09IGxlbiAtIDEpCisJICAgIHsKKwkJLS1sZW47CisJCWlmIChwWy0xXSA9PSAnbCcpCisJCSAgICBlYXAtPmZsYWdzIHw9IEVYRkxBR19MSVNUOworCQllbHNlCisJCSAgICBlYXAtPmZsYWdzIHw9IEVYRkxBR19QUklOVDsKKwkgICAgfQorCX0KIAogCWlmIChBU0NJSV9JU0xPV0VSKCplYXAtPmNtZCkpCiAJICAgIGVhcC0+Y21kaWR4ID0gY21kaWR4c1tDaGFyT3JkTG93KCplYXAtPmNtZCldOwpAQCAtMjkyOCw4ICsyOTc0LDYgQEAKIC8qCiAgKiA0LiBwYXJzZSBjb21tYW5kCiAgKi8KLQotICAgIGNtZCA9IHNraXB3aGl0ZShjbWQpOwogICAgIHhwLT54cF9wYXR0ZXJuID0gY21kOwogICAgIGlmICgqY21kID09IE5VTCkKIAlyZXR1cm4gTlVMTDsKQEAgLTMyODEsNiArMzMyNSw3IEBACiAJY2FzZSBDTURfYm90cmlnaHQ6CiAJY2FzZSBDTURfYnJvd3NlOgogCWNhc2UgQ01EX2NvbmZpcm06CisJY2FzZSBDTURfZGVidWc6CiAJY2FzZSBDTURfZm9sZGRvY2xvc2VkOgogCWNhc2UgQ01EX2ZvbGRkb29wZW46CiAJY2FzZSBDTURfaGlkZToKQEAgLTM2MzMsNiArMzY3OCw3IEBACiAgKiBCYWNrc2xhc2hlZCBkZWxpbWl0ZXJzIGFmdGVyIC8gb3IgPyB3aWxsIGJlIHNraXBwZWQsIGFuZCBjb21tYW5kcyB3aWxsCiAgKiBub3QgYmUgZXhwYW5kZWQgYmV0d2VlbiAvJ3MgYW5kID8ncyBvciBhZnRlciAiJyIuCiAgKgorICogQWxzbyBza2lwIHdoaXRlIHNwYWNlIGFuZCAiOiIgY2hhcmFjdGVycy4KICAqIFJldHVybnMgdGhlICJjbWQiIHBvaW50ZXIgYWR2YW5jZWQgdG8gYmV5b25kIHRoZSByYW5nZS4KICAqLwogICAgIGNoYXJfdSAqCkBAIC0zNjQyLDggKzM2ODgsNyBAQAogewogICAgIGludAkJZGVsaW07CiAKLSAgICB3aGlsZSAoKmNtZCAhPSBOVUwgJiYgKHZpbV9pc3NwYWNlKCpjbWQpIHx8IFZJTV9JU0RJR0lUKCpjbWQpIHx8Ci0JCQkgICAgdmltX3N0cmNocigoY2hhcl91ICopIi4kJScvPy0rLDsiLCAqY21kKSAhPSBOVUxMKSkKKyAgICB3aGlsZSAodmltX3N0cmNocigoY2hhcl91ICopIiBcdDAxMjM0NTY3ODkuJCUnLz8tKyw7IiwgKmNtZCkgIT0gTlVMTCkKICAgICB7CiAJaWYgKCpjbWQgPT0gJ1wnJykKIAl7CkBAIC0zNjYyLDYgKzM3MDcsMTEgQEAKIAlpZiAoKmNtZCAhPSBOVUwpCiAJICAgICsrY21kOwogICAgIH0KKworICAgIC8qIFNraXAgIjoiIGFuZCB3aGl0ZSBzcGFjZS4gKi8KKyAgICB3aGlsZSAoKmNtZCA9PSAnOicpCisJY21kID0gc2tpcHdoaXRlKGNtZCArIDEpOworCiAgICAgcmV0dXJuIGNtZDsKIH0KIApAQCAtMzg1Niw2ICszOTA2LDI1IEBACiB9CiAKIC8qCisgKiBHZXQgZmxhZ3MgZnJvbSBhbiBFeCBjb21tYW5kIGFyZ3VtZW50LgorICovCisgICAgc3RhdGljIHZvaWQKK2dldF9mbGFncyhlYXApCisgICAgZXhhcmdfVCAqZWFwOworeworICAgIHdoaWxlICh2aW1fc3RyY2hyKChjaGFyX3UgKikibHAjIiwgKmVhcC0+YXJnKSAhPSBOVUxMKQorICAgIHsKKwlpZiAoKmVhcC0+YXJnID09ICdsJykKKwkgICAgZWFwLT5mbGFncyB8PSBFWEZMQUdfTElTVDsKKwllbHNlIGlmICgqZWFwLT5hcmcgPT0gJ3AnKQorCSAgICBlYXAtPmZsYWdzIHw9IEVYRkxBR19QUklOVDsKKwllbHNlCisJICAgIGVhcC0+ZmxhZ3MgfD0gRVhGTEFHX05SOworCWVhcC0+YXJnID0gc2tpcHdoaXRlKGVhcC0+YXJnICsgMSk7CisgICAgfQorfQorCisvKgogICogRnVuY3Rpb24gY2FsbGVkIGZvciBjb21tYW5kIHdoaWNoIGlzIE5vdCBJbXBsZW1lbnRlZC4gIE5JIQogICovCiAgICAgdm9pZApAQCAtNDI4MCw3ICs0MzQ5LDcgQEAKIAogI2lmZGVmIEZFQVRfRVZBTAogCS8qIFNraXAgb3ZlciBgPWV4cHJgIHdoZW4gd2lsZGNhcmRzIGFyZSBleHBhbmRlZC4gKi8KLQllbHNlIGlmIChwWzBdID09ICdgJyAmJiBwWzFdID09ICc9JykKKwllbHNlIGlmIChwWzBdID09ICdgJyAmJiBwWzFdID09ICc9JyAmJiAoZWFwLT5hcmd0ICYgWEZJTEUpKQogCXsKIAkgICAgcCArPSAyOwogCSAgICAodm9pZClza2lwX2V4cHIoJnApOwpAQCAtNjExNiwzMSArNjE4NSwyNyBAQAogZXhfcHJpbnQoZWFwKQogICAgIGV4YXJnX1QJKmVhcDsKIHsKLSAgICBpbnQJCXNhdmVfbGlzdCA9IDA7CSAgICAvKiBpbml0IGZvciBHQ0MgKi8KLQotICAgIGlmIChlYXAtPmNtZGlkeCA9PSBDTURfbGlzdCkKKyAgICBpZiAoY3VyYnVmLT5iX21sLm1sX2ZsYWdzICYgTUxfRU1QVFkpCisJRU1TRyhfKGVfZW1wdHlidWYpKTsKKyAgICBlbHNlCiAgICAgewotCXNhdmVfbGlzdCA9IGN1cndpbi0+d19wX2xpc3Q7Ci0JY3Vyd2luLT53X3BfbGlzdCA9IDE7CisJZm9yICggOyFnb3RfaW50OyB1aV9icmVha2NoZWNrKCkpCisJeworCSAgICBwcmludF9saW5lKGVhcC0+bGluZTEsCisJCSAgICAoZWFwLT5jbWRpZHggPT0gQ01EX251bWJlciB8fCBlYXAtPmNtZGlkeCA9PSBDTURfcG91bmQKKwkJCQkJCSB8fCAoZWFwLT5mbGFncyAmIEVYRkxBR19OUikpLAorCQkgICAgZWFwLT5jbWRpZHggPT0gQ01EX2xpc3QgfHwgKGVhcC0+ZmxhZ3MgJiBFWEZMQUdfTElTVCkpOworCSAgICBpZiAoKytlYXAtPmxpbmUxID4gZWFwLT5saW5lMikKKwkJYnJlYWs7CisJICAgIG91dF9mbHVzaCgpOwkgICAgLyogc2hvdyBvbmUgbGluZSBhdCBhIHRpbWUgKi8KKwl9CisJc2V0cGNtYXJrKCk7CisJLyogcHV0IGN1cnNvciBhdCBsYXN0IGxpbmUgKi8KKwljdXJ3aW4tPndfY3Vyc29yLmxudW0gPSBlYXAtPmxpbmUyOworCWJlZ2lubGluZShCTF9TT0wgfCBCTF9GSVgpOwogICAgIH0KIAotICAgIGZvciAoIDshZ290X2ludDsgdWlfYnJlYWtjaGVjaygpKQotICAgIHsKLQlwcmludF9saW5lKGVhcC0+bGluZTEsCi0JCSAgIChlYXAtPmNtZGlkeCA9PSBDTURfbnVtYmVyIHx8IGVhcC0+Y21kaWR4ID09IENNRF9wb3VuZCkpOwotCWlmICgrK2VhcC0+bGluZTEgPiBlYXAtPmxpbmUyKQotCSAgICBicmVhazsKLQlvdXRfZmx1c2goKTsJICAgIC8qIHNob3cgb25lIGxpbmUgYXQgYSB0aW1lICovCi0gICAgfQotICAgIHNldHBjbWFyaygpOwotICAgIC8qIHB1dCBjdXJzb3IgYXQgbGFzdCBsaW5lICovCi0gICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gZWFwLT5saW5lMjsKLSAgICBiZWdpbmxpbmUoQkxfU09MIHwgQkxfRklYKTsKLQogICAgIGV4X25vX3JlcHJpbnQgPSBUUlVFOwotCi0gICAgaWYgKGVhcC0+Y21kaWR4ID09IENNRF9saXN0KQotCWN1cndpbi0+d19wX2xpc3QgPSBzYXZlX2xpc3Q7CiB9CiAKICNpZmRlZiBGRUFUX0JZVEVPRkYKQEAgLTY2ODksNyArNjc1NCw0NSBAQAogfQogCiAvKgotICogIjplZGl0IiwgIjpiYWRkIi4KKyAqICI6b3BlbiIgc2ltdWxhdGlvbjogZm9yIG5vdyBqdXN0IHdvcmsgbGlrZSAiOnZpc3VhbCIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfb3BlbihlYXApCisgICAgZXhhcmdfVAkqZWFwOworeworICAgIHJlZ21hdGNoX1QJcmVnbWF0Y2g7CisgICAgY2hhcl91CSpwOworCisgICAgY3Vyd2luLT53X2N1cnNvci5sbnVtID0gZWFwLT5saW5lMjsKKyAgICBiZWdpbmxpbmUoQkxfU09MIHwgQkxfRklYKTsKKyAgICBpZiAoKmVhcC0+YXJnID09ICcvJykKKyAgICB7CisJLyogIjpvcGVuIC9wYXR0ZXJuLyI6IHB1dCBjdXJzb3IgaW4gY29sdW1uIGZvdW5kIHdpdGggcGF0dGVybiAqLworCSsrZWFwLT5hcmc7CisJcCA9IHNraXBfcmVnZXhwKGVhcC0+YXJnLCAnLycsIHBfbWFnaWMsIE5VTEwpOworCSpwID0gTlVMOworCXJlZ21hdGNoLnJlZ3Byb2cgPSB2aW1fcmVnY29tcChlYXAtPmFyZywgcF9tYWdpYyA/IFJFX01BR0lDIDogMCk7CisJaWYgKHJlZ21hdGNoLnJlZ3Byb2cgIT0gTlVMTCkKKwl7CisJICAgIHJlZ21hdGNoLnJtX2ljID0gcF9pYzsKKwkgICAgcCA9IG1sX2dldF9jdXJsaW5lKCk7CisJICAgIGlmICh2aW1fcmVnZXhlYygmcmVnbWF0Y2gsIHAsIChjb2xucl9UKTApKQorCQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IHJlZ21hdGNoLnN0YXJ0cFswXSAtIHA7CisJICAgIGVsc2UKKwkJRU1TRyhfKGVfbm9tYXRjaCkpOworCSAgICB2aW1fZnJlZShyZWdtYXRjaC5yZWdwcm9nKTsKKwl9CisJLyogTW92ZSB0byB0aGUgTlVMLCBpZ25vcmUgYW55IG90aGVyIGFyZ3VtZW50cy4gKi8KKwllYXAtPmFyZyArPSBTVFJMRU4oZWFwLT5hcmcpOworICAgIH0KKyAgICBjaGVja19jdXJzb3IoKTsKKworICAgIGVhcC0+Y21kaWR4ID0gQ01EX3Zpc3VhbDsKKyAgICBkb19leGVkaXQoZWFwLCBOVUxMKTsKK30KKworLyoKKyAqICI6ZWRpdCIsICI6YmFkZCIsICI6dmlzdWFsIi4KICAqLwogICAgIHN0YXRpYyB2b2lkCiBleF9lZGl0KGVhcCkKQEAgLTY3MTEsNiArNjgxNCw3IEBACiAjaWZkZWYgRkVBVF9XSU5ET1dTCiAgICAgaW50CQluZWVkX2hpZGU7CiAjZW5kaWYKKyAgICBpbnQJCWV4bW9kZV93YXMgPSBleG1vZGVfYWN0aXZlOwogCiAgICAgLyoKICAgICAgKiAiOnZpIiBjb21tYW5kIGVuZHMgRXggbW9kZS4KQEAgLTY3MjAsNyArNjgyNCw0NSBAQAogICAgIHsKIAlleG1vZGVfYWN0aXZlID0gRkFMU0U7CiAJaWYgKCplYXAtPmFyZyA9PSBOVUwpCisJeworCSAgICAvKiBTcGVjaWFsIGNhc2U6ICAiOmdsb2JhbC9wYXQvdmlzdWFsXE5MdmktY29tbWFuZHMiICovCisJICAgIGlmIChnbG9iYWxfYnVzeSkKKwkgICAgeworCQlpbnQJcmQgPSBSZWRyYXdpbmdEaXNhYmxlZDsKKwkJaW50CW53ciA9IG5vX3dhaXRfcmV0dXJuOworCQlpbnQJbXMgPSBtc2dfc2Nyb2xsOworI2lmZGVmIEZFQVRfR1VJCisJCWludAloZSA9IGhvbGRfZ3VpX2V2ZW50czsKKyNlbmRpZgorCisJCWlmIChlYXAtPm5leHRjbWQgIT0gTlVMTCkKKwkJeworCQkgICAgc3R1ZmZSZWFkYnVmZihlYXAtPm5leHRjbWQpOworCQkgICAgZWFwLT5uZXh0Y21kID0gTlVMTDsKKwkJfQorCisJCWlmIChleG1vZGVfd2FzICE9IEVYTU9ERV9WSU0pCisJCSAgICBzZXR0bW9kZShUTU9ERV9SQVcpOworCQlSZWRyYXdpbmdEaXNhYmxlZCA9IDA7CisJCW5vX3dhaXRfcmV0dXJuID0gMDsKKwkJbmVlZF93YWl0X3JldHVybiA9IEZBTFNFOworCQltc2dfc2Nyb2xsID0gMDsKKyNpZmRlZiBGRUFUX0dVSQorCQlob2xkX2d1aV9ldmVudHMgPSAwOworI2VuZGlmCisJCW11c3RfcmVkcmF3ID0gQ0xFQVI7CisKKwkJbWFpbl9sb29wKEZBTFNFLCBUUlVFKTsKKworCQlSZWRyYXdpbmdEaXNhYmxlZCA9IHJkOworCQlub193YWl0X3JldHVybiA9IG53cjsKKwkJbXNnX3Njcm9sbCA9IG1zOworI2lmZGVmIEZFQVRfR1VJCisJCWhvbGRfZ3VpX2V2ZW50cyA9IGhlOworI2VuZGlmCisJICAgIH0KIAkgICAgcmV0dXJuOworCX0KICAgICB9CiAKICAgICBpZiAoKGVhcC0+Y21kaWR4ID09IENNRF9uZXcKQEAgLTY5NjEsNyArNzEwMyw5IEBACiBleF9yZWFkKGVhcCkKICAgICBleGFyZ19UCSplYXA7CiB7Ci0gICAgaW50CSAgICBpOworICAgIGludAkJaTsKKyAgICBpbnQJCWVtcHR5ID0gKGN1cmJ1Zi0+Yl9tbC5tbF9mbGFncyAmIE1MX0VNUFRZKTsKKyAgICBsaW5lbnJfVAlsbnVtOwogCiAgICAgaWYgKGVhcC0+dXNlZmlsdGVyKQkJCS8qIDpyIWNtZCAqLwogCWRvX2JhbmcoMSwgZWFwLCBGQUxTRSwgRkFMU0UsIFRSVUUpOwpAQCAtNzAxMSw3ICs3MTU1LDI1IEBACiAJCUVNU0cyKF8oZV9ub3RvcGVuKSwgZWFwLT5hcmcpOwogCX0KIAllbHNlCisJeworCSAgICBpZiAoZW1wdHkgJiYgZXhtb2RlX2FjdGl2ZSkKKwkgICAgeworCQkvKiBEZWxldGUgdGhlIGVtcHR5IGxpbmUgdGhhdCByZW1haW5zLiAgSGlzdG9yaWNhbGx5IGV4IGRvZXMKKwkJICogdGhpcyBidXQgdmkgZG9lc24ndC4gKi8KKwkJaWYgKGVhcC0+bGluZTIgPT0gMCkKKwkJICAgIGxudW0gPSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudDsKKwkJZWxzZQorCQkgICAgbG51bSA9IDE7CisJCWlmICgqbWxfZ2V0KGxudW0pID09IE5VTCkKKwkJeworCQkgICAgbWxfZGVsZXRlKGxudW0sIEZBTFNFKTsKKwkJICAgIGRlbGV0ZWRfbGluZXNfbWFyayhsbnVtLCAxTCk7CisJCSAgICBpZiAoY3Vyd2luLT53X2N1cnNvci5sbnVtID49IGxudW0pCisJCQktLWN1cndpbi0+d19jdXJzb3IubG51bTsKKwkJfQorCSAgICB9CiAJICAgIHJlZHJhd19jdXJidWZfbGF0ZXIoVkFMSUQpOworCX0KICAgICB9CiB9CiAKQEAgLTcwMzQsNiArNzE5NiwxMyBAQAogICAgIGVsc2UKICNlbmRpZgogICAgIHsKKwlpZiAodmltX3N0cmNocihwX2NwbywgQ1BPX0NIRElSKSAhPSBOVUxMICYmIGN1cmJ1ZklzQ2hhbmdlZCgpCisJCQkJCQkJICAgICAmJiAhZWFwLT5mb3JjZWl0KQorCXsKKwkgICAgRU1TRyhfKCJFNzQ3OiBDYW5ub3QgY2hhbmdlIGRpcmVjdG9yeSwgYnVmZmVyIGlzIG1vZGlmZWQgKGFkZCAhIHRvIG92ZXJyaWRlKSIpKTsKKwkgICAgcmV0dXJuOworCX0KKwogCS8qICI6Y2QgLSI6IENoYW5nZSB0byBwcmV2aW91cyBkaXJlY3RvcnkgKi8KIAlpZiAoU1RSQ01QKG5ld19kaXIsICItIikgPT0gMCkKIAl7CkBAIC03MTMyLDYgKzczMDEsNyBAQAogICAgIGV4YXJnX1QJKmVhcDsKIHsKICAgICBzbXNnKChjaGFyX3UgKikiJWxkIiwgKGxvbmcpZWFwLT5saW5lMik7CisgICAgZXhfbWF5X3ByaW50KGVhcCk7CiB9CiAKICAgICBzdGF0aWMgdm9pZApAQCAtNzM2MSw2ICs3NTMxLDcgQEAKICNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCiAgICAgdmlydHVhbF9vcCA9IE1BWUJFOwogI2VuZGlmCisgICAgZXhfbWF5X3ByaW50KGVhcCk7CiB9CiAKIC8qCkBAIC03Mzc3LDcgKzc1NDgsOCBAQAogCWVhcC0+Zm9yY2VpdCA9IFRSVUU7CiAgICAgfQogICAgIGN1cndpbi0+d19jdXJzb3IubG51bSA9IGVhcC0+bGluZTI7Ci0gICAgZG9fcHV0KGVhcC0+cmVnbmFtZSwgZWFwLT5mb3JjZWl0ID8gQkFDS1dBUkQgOiBGT1JXQVJELCAxTCwgUFVUX0xJTkUpOworICAgIGRvX3B1dChlYXAtPnJlZ25hbWUsIGVhcC0+Zm9yY2VpdCA/IEJBQ0tXQVJEIDogRk9SV0FSRCwgMUwsCisJCQkJCQkgICAgICAgUFVUX0xJTkV8UFVUX0NVUlNMSU5FKTsKIH0KIAogLyoKQEAgLTczOTUsNiArNzU2Nyw3IEBACiAJZWFwLT5uZXh0Y21kID0gTlVMTDsKIAlyZXR1cm47CiAgICAgfQorICAgIGdldF9mbGFncyhlYXApOwogCiAgICAgLyoKICAgICAgKiBtb3ZlIG9yIGNvcHkgbGluZXMgZnJvbSAnZWFwLT5saW5lMSctJ2VhcC0+bGluZTInIHRvIGJlbG93IGxpbmUgJ24nCkBAIC03NDE0LDYgKzc1ODcsMjIgQEAKIAlleF9jb3B5KGVhcC0+bGluZTEsIGVhcC0+bGluZTIsIG4pOwogICAgIHVfY2xlYXJsaW5lKCk7CiAgICAgYmVnaW5saW5lKEJMX1NPTCB8IEJMX0ZJWCk7CisgICAgZXhfbWF5X3ByaW50KGVhcCk7Cit9CisKKy8qCisgKiBQcmludCB0aGUgY3VycmVudCBsaW5lIGlmIGZsYWdzIHdlcmUgZ2l2ZW4gdG8gdGhlIEV4IGNvbW1hbmQuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorZXhfbWF5X3ByaW50KGVhcCkKKyAgICBleGFyZ19UCSplYXA7Cit7CisgICAgaWYgKGVhcC0+ZmxhZ3MgIT0gMCkKKyAgICB7CisJcHJpbnRfbGluZShjdXJ3aW4tPndfY3Vyc29yLmxudW0sIChlYXAtPmZsYWdzICYgRVhGTEFHX05SKSwKKwkJCQkJCSAgKGVhcC0+ZmxhZ3MgJiBFWEZMQUdfTElTVCkpOworCWV4X25vX3JlcHJpbnQgPSBUUlVFOworICAgIH0KIH0KIAogLyoKQEAgLTc0NTEsNiArNzY0MCw3IEBACiAgICAgfQogICAgIGRvX2RvX2pvaW4oZWFwLT5saW5lMiAtIGVhcC0+bGluZTEgKyAxLCAhZWFwLT5mb3JjZWl0KTsKICAgICBiZWdpbmxpbmUoQkxfV0hJVEUgfCBCTF9GSVgpOworICAgIGV4X21heV9wcmludChlYXApOwogfQogCiAvKgpAQCAtNzQ3NCw3ICs3NjY0LDkgQEAKIAljID0gJ0AnOwogICAgIC8qIHB1dCB0aGUgcmVnaXN0ZXIgaW4gbWFwYnVmICovCiAgICAgaWYgKGRvX2V4ZWNyZWcoYywgVFJVRSwgdmltX3N0cmNocihwX2NwbywgQ1BPX0VYRUNCVUYpICE9IE5VTEwpID09IEZBSUwpCisgICAgewogCWJlZXBfZmx1c2goKTsKKyAgICB9CiAgICAgZWxzZQogICAgIHsKIAlpbnQJc2F2ZV9lZnIgPSBleGVjX2Zyb21fcmVnOwpAQCAtNzYwMiwxOCArNzc5NCwzNiBAQAogCQkgICAgLyogbWFrZSByZWdpc3RlciBlbXB0eSAqLwogCQkgICAgd3JpdGVfcmVnX2NvbnRlbnRzKHJlZGlyX3JlZywgKGNoYXJfdSAqKSIiLCAtMSwgRkFMU0UpOwogCQl9Ci0JCWlmICgqYXJnICE9IE5VTCkKLQkJICAgIEVNU0cyKF8oZV9pbnZhcmcyKSwgZWFwLT5hcmcpOworCSAgICB9CisJICAgIGlmICgqYXJnICE9IE5VTCkKKwkgICAgeworCQlFTVNHMihfKGVfaW52YXJnMiksIGVhcC0+YXJnKTsKKwkJcmVkaXJfcmVnID0gMDsKKwkgICAgfQorCX0KKwllbHNlIGlmICgqYXJnID09ICc9JyAmJiBhcmdbMV0gPT0gJz4nKQorCXsKKwkgICAgaW50IGFwcGVuZDsKKworCSAgICAvKiByZWRpcmVjdCB0byBhIHZhcmlhYmxlICovCisJICAgIGNsb3NlX3JlZGlyKCk7CisJICAgIGFyZyArPSAyOworCisJICAgIGlmICgqYXJnID09ICc+JykKKwkgICAgeworCQkrK2FyZzsKKwkJYXBwZW5kID0gVFJVRTsKIAkgICAgfQogCSAgICBlbHNlCi0JCUVNU0cyKF8oZV9pbnZhcmcyKSwgZWFwLT5hcmcpOworCQlhcHBlbmQgPSBGQUxTRTsKKworCSAgICBpZiAodmFyX3JlZGlyX3N0YXJ0KHNraXB3aGl0ZShhcmcpLCBhcHBlbmQpID09IE9LKQorCQlyZWRpcl92bmFtZSA9IDE7CiAJfQogI2VuZGlmCiAKIAkvKiBUT0RPOiByZWRpcmVjdCB0byBhIGJ1ZmZlciAqLwogCi0JLyogVE9ETzogcmVkaXJlY3QgdG8gYW4gaW50ZXJuYWwgdmFyaWFibGUgKi8KLQogCWVsc2UKIAkgICAgRU1TRzIoXyhlX2ludmFyZzIpLCBlYXAtPmFyZyk7CiAgICAgfQpAQCAtNzY5MCw2ICs3OTAwLDExIEBACiAgICAgfQogI2lmZGVmIEZFQVRfRVZBTAogICAgIHJlZGlyX3JlZyA9IDA7CisgICAgaWYgKHJlZGlyX3ZuYW1lKQorICAgIHsKKwl2YXJfcmVkaXJfc3RvcCgpOworCXJlZGlyX3ZuYW1lID0gMDsKKyAgICB9CiAjZW5kaWYKIH0KIApAQCAtNzc3NCw4ICs3OTg5LDcgQEAKICNpZiBkZWZpbmVkKEZFQVRfU0VTU0lPTikgJiYgZGVmaW5lZCh2aW1fbWtkaXIpCiAgICAgLyogV2hlbiB1c2luZyAndmlld2RpcicgbWF5IGhhdmUgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkuICovCiAgICAgaWYgKHVzaW5nX3ZkaXIgJiYgIW1jaF9pc2RpcihwX3ZkaXIpKQotCWlmICh2aW1fbWtkaXIocF92ZGlyLCAwNzU1KSAhPSAwKQotCSAgICBFTVNHMihfKCJFNzM5OiBDYW5ub3QgY3JlYXRlIGRpcmVjdG9yeTogJXMiKSwgcF92ZGlyKTsKKwl2aW1fbWtkaXJfZW1zZyhwX3ZkaXIsIDA3NTUpOwogI2VuZGlmCiAKICAgICBmZCA9IG9wZW5fZXhmaWxlKGZuYW1lLCBlYXAtPmZvcmNlaXQsIFdSSVRFQklOKTsKQEAgLTc4OTMsNiArODEwNywyMiBAQAogI2VuZGlmCiB9CiAKKyNpZiAoKGRlZmluZWQoRkVBVF9TRVNTSU9OKSB8fCBkZWZpbmVkKEZFQVRfRVZBTCkpICYmIGRlZmluZWQodmltX21rZGlyKSkgXAorCXx8IGRlZmluZWQoUFJPVE8pCisgICAgaW50Cit2aW1fbWtkaXJfZW1zZyhuYW1lLCBwcm90KQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBpbnQJCXByb3Q7Cit7CisgICAgaWYgKHZpbV9ta2RpcihuYW1lLCBwcm90KSAhPSAwKQorICAgIHsKKwlFTVNHMihfKCJFNzM5OiBDYW5ub3QgY3JlYXRlIGRpcmVjdG9yeTogJXMiKSwgbmFtZSk7CisJcmV0dXJuIEZBSUw7CisgICAgfQorICAgIHJldHVybiBPSzsKK30KKyNlbmRpZgorCiAvKgogICogT3BlbiBhIGZpbGUgZm9yIHdyaXRpbmcgZm9yIGFuIEV4IGNvbW1hbmQsIHdpdGggc29tZSBjaGVja3MuCiAgKiBSZXR1cm4gZmlsZSBkZXNjcmlwdG9yLCBvciBOVUxMIG9uIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9zcmMvZmlsZWlvLmMgYi9zcmMvZmlsZWlvLmMKaW5kZXggOWRkMWQ0OS4uMDY0NDY4OCAxMDA2NDQKLS0tIGEvc3JjL2ZpbGVpby5jCisrKyBiL3NyYy9maWxlaW8uYwpAQCAtMTQwLDEwICsxNDAsNiBAQAogI2VuZGlmCiBzdGF0aWMgaW50IG1vdmVfbGluZXMgX19BUkdTKChidWZfVCAqZnJvbWJ1ZiwgYnVmX1QgKnRvYnVmKSk7CiAKLXN0YXRpYyBsaW5lbnJfVAl3cml0ZV9ub19lb2xfbG51bSA9IDA7CS8qIG5vbi16ZXJvIGxudW0gd2hlbiBsYXN0IGxpbmUgb2YKLQkJCQkJICAgbmV4dCBiaW5hcnkgd3JpdGUgc2hvdWxkIG5vdCBoYXZlCi0JCQkJCSAgIGFuIGVuZC1vZi1saW5lICovCi0KICAgICB2b2lkCiBmaWxlbWVzcyhidWYsIG5hbWUsIHMsIGF0dHIpCiAgICAgYnVmX1QJKmJ1ZjsKQEAgLTI4OCw5ICsyODQsNyBAQAogICAgIGludAkJY29udl9yZXN0bGVuID0gMDsJLyogbnIgb2YgYnl0ZXMgaW4gY29udl9yZXN0W10gKi8KICNlbmRpZgogCi0jaWZkZWYgRkVBVF9BVVRPQ01ECiAgICAgd3JpdGVfbm9fZW9sX2xudW0gPSAwOwkvKiBpbiBjYXNlIGl0IHdhcyBzZXQgYnkgdGhlIHByZXZpb3VzIHJlYWQgKi8KLSNlbmRpZgogCiAgICAgLyoKICAgICAgKiBJZiB0aGVyZSBpcyBubyBmaWxlIG5hbWUgeWV0LCB1c2UgdGhlIG9uZSBmb3IgdGhlIHJlYWQgZmlsZS4KQEAgLTMwOCw2ICszMDIsMTAgQEAKIAkgICAgY3VyYnVmLT5iX2ZsYWdzIHw9IEJGX05PVEVESVRFRDsKICAgICB9CiAKKyAgICAvKiBBZnRlciByZWFkaW5nIGEgZmlsZSB0aGUgY3Vyc29yIGxpbmUgY2hhbmdlcyBidXQgd2UgZG9uJ3Qgd2FudCB0bworICAgICAqIGRpc3BsYXkgdGhlIGxpbmUuICovCisgICAgZXhfbm9fcmVwcmludCA9IFRSVUU7CisKICAgICAvKgogICAgICAqIEZvciBVbml4OiBVc2UgdGhlIHNob3J0IGZpbGUgbmFtZSB3aGVuZXZlciBwb3NzaWJsZS4KICAgICAgKiBBdm9pZHMgcHJvYmxlbXMgd2l0aCBuZXR3b3JrcyBhbmQgd2hlbiBkaXJlY3RvcnkgbmFtZXMgYXJlIGNoYW5nZWQuCkBAIC0yMjMwLDcgKzIyMjgsNiBAQAogICAgIGNoZWNrX21hcmtzX3JlYWQoKTsKICNlbmRpZgogCi0jaWZkZWYgRkVBVF9BVVRPQ01ECiAgICAgLyoKICAgICAgKiBUcmljazogV2UgcmVtZW1iZXIgaWYgdGhlIGxhc3QgbGluZSBvZiB0aGUgcmVhZCBkaWRuJ3QgaGF2ZQogICAgICAqIGFuIGVvbCBmb3Igd2hlbiB3cml0aW5nIGl0IGFnYWluLiAgVGhpcyBpcyByZXF1aXJlZCBmb3IKQEAgLTIyMzgsNiArMjIzNSw3IEBACiAgICAgICovCiAgICAgd3JpdGVfbm9fZW9sX2xudW0gPSByZWFkX25vX2VvbF9sbnVtOwogCisjaWZkZWYgRkVBVF9BVVRPQ01ECiAgICAgaWYgKCFyZWFkX3N0ZGluICYmICFyZWFkX2J1ZmZlcikKICAgICB7CiAJaW50IG0gPSBtc2dfc2Nyb2xsOwpAQCAtMjYyOCw2ICsyNjI2LDEwIEBACiAjIGVuZGlmCiAjZW5kaWYKIAorICAgIC8qIEFmdGVyIHdyaXRpbmcgYSBmaWxlIGNoYW5nZWR0aWNrIGNoYW5nZXMgYnV0IHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheQorICAgICAqIHRoZSBsaW5lLiAqLworICAgIGV4X25vX3JlcHJpbnQgPSBUUlVFOworCiAgICAgLyoKICAgICAgKiBJZiB0aGVyZSBpcyBubyBmaWxlIG5hbWUgeWV0LCB1c2UgdGhlIG9uZSBmb3IgdGhlIHdyaXR0ZW4gZmlsZS4KICAgICAgKiBCRl9OT1RFRElURUQgaXMgc2V0IHRvIHJlZmxlY3QgdGhpcyAoaW4gY2FzZSB0aGUgd3JpdGUgZmFpbHMpLgpAQCAtNjI2Nyw3ICs2MjY5LDcgQEAKIHdyaXRlX2xudW1fYWRqdXN0KG9mZnNldCkKICAgICBsaW5lbnJfVAlvZmZzZXQ7CiB7Ci0gICAgaWYgKHdyaXRlX25vX2VvbF9sbnVtKQkJLyogb25seSBpZiB0aGVyZSBpcyBhIG1pc3NpbmcgZW9sICovCisgICAgaWYgKHdyaXRlX25vX2VvbF9sbnVtICE9IDApCQkvKiBvbmx5IGlmIHRoZXJlIGlzIGEgbWlzc2luZyBlb2wgKi8KIAl3cml0ZV9ub19lb2xfbG51bSArPSBvZmZzZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9nbG9iYWxzLmggYi9zcmMvZ2xvYmFscy5oCmluZGV4IDFkZjhiODcuLjJjMWM1M2EgMTAwNjQ0Ci0tLSBhL3NyYy9nbG9iYWxzLmgKKysrIGIvc3JjL2dsb2JhbHMuaApAQCAtMTU1LDYgKzE1NSw3IEBACiBFWFRFUk4gaW50CWRpZF9lbXNnOwkJICAgIC8qIHNldCBieSBlbXNnKCkgd2hlbiB0aGUgbWVzc2FnZQogCQkJCQkgICAgICAgaXMgZGlzcGxheWVkIG9yIHRocm93biAqLwogRVhURVJOIGludAljYWxsZWRfZW1zZzsJCSAgICAvKiBhbHdheXMgc2V0IGJ5IGVtc2coKSAqLworRVhURVJOIGludAlleF9leGl0dmFsIElOSVQoPSAwKTsJICAgIC8qIGV4aXQgdmFsdWUgZm9yIGV4IG1vZGUgKi8KIEVYVEVSTiBpbnQJZW1zZ19vbl9kaXNwbGF5IElOSVQoPSBGQUxTRSk7CS8qIHRoZXJlIGlzIGFuIGVycm9yIG1lc3NhZ2UgKi8KIEVYVEVSTiBpbnQJcmNfZGlkX2Vtc2cgSU5JVCg9IEZBTFNFKTsgIC8qIHZpbV9yZWdjb21wKCkgY2FsbGVkIGVtc2coKSAqLwogCkBAIC0xODEsNiArMTgyLDcgQEAKIAkJCQkJCSAgImV4Y2x1ZGUiIGluICdjbGlwYm9hcmQnLiAqLwogIyBlbmRpZgogI2VuZGlmCitFWFRFUk4gaW50CWV4X2tlZXBfaW5kZW50IElOSVQoPSBGQUxTRSk7IC8qIGdldGV4bW9kZWxpbmUoKToga2VlcCBpbmRlbnQgKi8KIEVYVEVSTiBpbnQJdmdldGNfYnVzeSBJTklUKD0gRkFMU0UpOyAgIC8qIGluc2lkZSB2Z2V0YygpIG5vdyAqLwogCiBFWFRFUk4gaW50CWRpZHNldF92aW0gSU5JVCg9IEZBTFNFKTsgICAvKiBkaWQgc2V0ICRWSU0gb3Vyc2VsdmVzICovCkBAIC05MjcsNiArOTI5LDEwIEBACiBFWFRFUk4gY2hhcl91CSphdXRvY21kX21hdGNoIElOSVQoPSBOVUxMKTsgLyogbmFtZSBmb3IgPGFtYXRjaD4gb24gY21kbGluZSAqLwogI2VuZGlmCiAKK0VYVEVSTiBsaW5lbnJfVAl3cml0ZV9ub19lb2xfbG51bSBJTklUKD0gMCk7IC8qIG5vbi16ZXJvIGxudW0gd2hlbiBsYXN0IGxpbmUKKwkJCQkJCW9mIG5leHQgYmluYXJ5IHdyaXRlIHNob3VsZAorCQkJCQkJbm90IGhhdmUgYW4gZW5kLW9mLWxpbmUgKi8KKwogI2lmZGVmIEZFQVRfV0lORE9XUwogRVhURVJOIGludAlwb3N0cG9uZWRfc3BsaXQgSU5JVCg9IDApOyAgLyogZm9yIENUUkwtVyBDVFJMLV0gY29tbWFuZCAqLwogRVhURVJOIGludAlwb3N0cG9uZWRfc3BsaXRfZmxhZ3MgSU5JVCg9IDApOyAgLyogYXJncyBmb3Igd2luX3NwbGl0KCkgKi8KQEAgLTk1Nyw2ICs5NjMsNyBAQAogRVhURVJOIEZJTEUgKnJlZGlyX2ZkIElOSVQoPSBOVUxMKTsJLyogbWVzc2FnZSByZWRpcmVjdGlvbiBmaWxlICovCiAjaWZkZWYgRkVBVF9FVkFMCiBFWFRFUk4gaW50ICByZWRpcl9yZWcgSU5JVCg9IDApOwkvKiBtZXNzYWdlIHJlZGlyZWN0aW9uIHJlZ2lzdGVyICovCitFWFRFUk4gaW50ICByZWRpcl92bmFtZSBJTklUKD0gMCk7CS8qIG1lc3NhZ2UgcmVkaXJlY3Rpb24gdmFyaWFibGUgKi8KICNlbmRpZgogCiAjaWZkZWYgRkVBVF9MQU5HTUFQCkBAIC0xMzk5LDE0ICsxNDA2LDEyIEBACiBFWFRFUk4gY2hhcl91IGVfZ3VhcmRlZFtdCUlOSVQoPU5fKCJFNDYzOiBSZWdpb24gaXMgZ3VhcmRlZCwgY2Fubm90IG1vZGlmeSIpKTsKIEVYVEVSTiBjaGFyX3UgZV9uYnJlYWRvbmx5W10JSU5JVCg9Tl8oIkU3NDQ6IE5ldEJlYW5zIGRvZXMgbm90IGFsbG93IGNoYW5nZXMgaW4gcmVhZC1vbmx5IGZpbGVzIikpOwogI2VuZGlmCi0jaWYgZGVmaW5lZChGRUFUX0VWQUwpIHx8IGRlZmluZWQoRkVBVF9TWU5fSEwpCiBFWFRFUk4gY2hhcl91IGVfaW50ZXJuMltdCUlOSVQoPU5fKCJFNjg1OiBJbnRlcm5hbCBlcnJvcjogJXMiKSk7Ci0jZW5kaWYKICNpZiBkZWZpbmVkKEhBVkVfU0VUSk1QX0gpIHx8IGRlZmluZWQoSEFWRV9UUllfRVhDRVBUKQogRVhURVJOIGNoYXJfdSBlX2NvbXBsZXhbXQlJTklUKD1OXygiRTM2MTogQ3Jhc2ggaW50ZXJjZXB0ZWQ7IHJlZ2V4cCB0b28gY29tcGxleD8iKSk7CiAjZW5kaWYKIEVYVEVSTiBjaGFyX3UgZV9vdXRvZnN0YWNrW10JSU5JVCg9Tl8oIkUzNjM6IHBhdHRlcm4gY2F1c2VkIG91dC1vZi1zdGFjayBlcnJvciIpKTsKLQorRVhURVJOIGNoYXJfdSBlX2VtcHR5YnVmW10JSU5JVCg9Tl8oIkU3NDk6IGVtcHR5IGJ1ZmZlciIpKTsKIAogI2lmZGVmIE1BQ09TX1hfVU5JWAogRVhURVJOIHNob3J0IGRpc2FsbG93X2d1aQlJTklUKD0gRkFMU0UpOwpkaWZmIC0tZ2l0IGEvc3JjL21ieXRlLmMgYi9zcmMvbWJ5dGUuYwppbmRleCBmMzA5MjU1Li44OWI1M2MyIDEwMDY0NAotLS0gYS9zcmMvbWJ5dGUuYworKysgYi9zcmMvbWJ5dGUuYwpAQCAtMjg3MSwxMiArMjg3MSwxNiBAQAogIyBpZmRlZiBIQVZFX05MX0xBTkdJTkZPX0NPREVTRVQKICAgICBpZiAoKHMgPSBubF9sYW5naW5mbyhDT0RFU0VUKSkgPT0gTlVMTCB8fCAqcyA9PSBOVUwpCiAjIGVuZGlmCi0jIGlmIGRlZmluZWQoSEFWRV9MT0NBTEVfSCkgfHwgZGVmaW5lZChYX0xPQ0FMRSkKKyMgaWZkZWYgTUFDT1MKKwlzID0gInV0Zi04IjsKKyMgZWxzZQorIyAgaWYgZGVmaW5lZChIQVZFX0xPQ0FMRV9IKSB8fCBkZWZpbmVkKFhfTE9DQUxFKQogCWlmICgocyA9IHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCkpID09IE5VTEwgfHwgKnMgPT0gTlVMKQotIyBlbmRpZgorIyAgZW5kaWYKIAkgICAgaWYgKChzID0gZ2V0ZW52KCJMQ19BTEwiKSkgPT0gTlVMTCB8fCAqcyA9PSBOVUwpCiAJCWlmICgocyA9IGdldGVudigiTENfQ1RZUEUiKSkgPT0gTlVMTCB8fCAqcyA9PSBOVUwpCiAJCSAgICBzID0gZ2V0ZW52KCJMQU5HIik7CisjIGVuZGlmCiAKICAgICBpZiAocyA9PSBOVUxMIHx8ICpzID09IE5VTCkKIAlyZXR1cm4gRkFJTDsKQEAgLTU1NzgsNiArNTU4Miw3IEBACiAjIGVuZGlmCiAgICAgaWYgKHZjcC0+dmNfdHlwZSA9PSBDT05WX05PTkUpCiAJcmV0dXJuIEZBSUw7CisKICAgICByZXR1cm4gT0s7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9tZXNzYWdlLmMgYi9zcmMvbWVzc2FnZS5jCmluZGV4IDZmMmU3YzEuLmY2NDk0ODQgMTAwNjQ0Ci0tLSBhL3NyYy9tZXNzYWdlLmMKKysrIGIvc3JjL21lc3NhZ2UuYwpAQCAtNTE4LDYgKzUxOCw3IEBACiAjZW5kaWYKIAogICAgIGNhbGxlZF9lbXNnID0gVFJVRTsKKyAgICBleF9leGl0dmFsID0gMTsKIAogICAgIC8qCiAgICAgICogSWYgImVtc2dfc2V2ZXJlIiBpcyBUUlVFOiBXaGVuIGFuIGVycm9yIGV4Y2VwdGlvbiBpcyB0byBiZSB0aHJvd24sCkBAIC01MzMsNyArNTM0LDcgQEAKICAgICAgKiBJZiAnZGVidWcnIGlzIHNldDogZG8gZXJyb3IgbWVzc2FnZSBhbnl3YXksIGJ1dCB3aXRob3V0IHNpZGUgZWZmZWN0cy4KICAgICAgKiBJZiAiZW1zZ19za2lwIiBpcyBzZXQ6IG5ldmVyIGRvIGVycm9yIG1lc3NhZ2VzLgogICAgICAqLwotICAgIGlmICgoZW1zZ19vZmYgPiAwICYmICpwX2RlYnVnID09IE5VTCkKKyAgICBpZiAoKGVtc2dfb2ZmID4gMCAmJiB2aW1fc3RyY2hyKHBfZGVidWcsICdtJykgPT0gTlVMTCkKICNpZmRlZiBGRUFUX0VWQUwKIAkgICAgfHwgZW1zZ19za2lwID4gMAogI2VuZGlmCkBAIC02MzgsNyArNjM5LDcgQEAKIGVtc2czKHMsIGExLCBhMikKICAgICBjaGFyX3UgKnMsICphMSwgKmEyOwogewotICAgIGlmICgoZW1zZ19vZmYgPiAwICYmICpwX2RlYnVnID09IE5VTCkKKyAgICBpZiAoKGVtc2dfb2ZmID4gMCAmJiB2aW1fc3RyY2hyKHBfZGVidWcsICdtJykgPT0gTlVMTCkKICNpZmRlZiBGRUFUX0VWQUwKIAkgICAgfHwgZW1zZ19za2lwID4gMAogI2VuZGlmCkBAIC02NjcsNyArNjY4LDcgQEAKICAgICBjaGFyX3UJKnM7CiAgICAgbG9uZwluOwogewotICAgIGlmICgoZW1zZ19vZmYgPiAwICYmICpwX2RlYnVnID09IE5VTCkKKyAgICBpZiAoKGVtc2dfb2ZmID4gMCAmJiB2aW1fc3RyY2hyKHBfZGVidWcsICdtJykgPT0gTlVMTCkKICNpZmRlZiBGRUFUX0VWQUwKIAkgICAgfHwgZW1zZ19za2lwID4gMAogI2VuZGlmCkBAIC02NzcsNiArNjc4LDEzIEBACiAgICAgcmV0dXJuIGVtc2coSU9idWZmKTsKIH0KIAorICAgIHZvaWQKK2Vtc2dfaW52cmVnKG5hbWUpCisgICAgaW50CSAgICBuYW1lOworeworICAgIEVNU0cyKF8oIkUzNTQ6IEludmFsaWQgcmVnaXN0ZXIgbmFtZTogJyVzJyIpLCB0cmFuc2NoYXIobmFtZSkpOworfQorCiAvKgogICogTGlrZSBtc2coKSwgYnV0IHRydW5jYXRlIHRvIGEgc2luZ2xlIGxpbmUgaWYgcF9zaG0gY29udGFpbnMgJ3QnLCBvciB3aGVuCiAgKiAiZm9yY2UiIGlzIFRSVUUuICBUaGlzIHRydW5jYXRlcyBpbiBhbm90aGVyIHdheSBhcyBmb3Igbm9ybWFsIG1lc3NhZ2VzLgpAQCAtMTQ4MSw4ICsxNDg5LDkgQEAKICAqIHByaW50IGxpbmUgZm9yIDpwcmludCBvciA6bGlzdCBjb21tYW5kCiAgKi8KICAgICB2b2lkCi1tc2dfcHJ0X2xpbmUocykKK21zZ19wcnRfbGluZShzLCBsaXN0KQogICAgIGNoYXJfdQkqczsKKyAgICBpbnQJCWxpc3Q7CiB7CiAgICAgaW50CQljOwogICAgIGludAkJY29sID0gMDsKQEAgLTE0OTcsOCArMTUwNiwxMSBAQAogICAgIGNoYXJfdQlidWZbTUJfTUFYQllURVMgKyAxXTsKICNlbmRpZgogCisgICAgaWYgKGN1cndpbi0+d19wX2xpc3QpCisJbGlzdCA9IFRSVUU7CisKICAgICAvKiBmaW5kIHN0YXJ0IG9mIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KLSAgICBpZiAoY3Vyd2luLT53X3BfbGlzdCAmJiBsY3NfdHJhaWwpCisgICAgaWYgKGxpc3QgJiYgbGNzX3RyYWlsKQogICAgIHsKIAl0cmFpbCA9IHMgKyBTVFJMRU4ocyk7CiAJd2hpbGUgKHRyYWlsID4gcyAmJiB2aW1faXN3aGl0ZSh0cmFpbFstMV0pKQpAQCAtMTUwNyw3ICsxNTE5LDcgQEAKIAogICAgIC8qIG91dHB1dCBhIHNwYWNlIGZvciBhbiBlbXB0eSBsaW5lLCBvdGhlcndpc2UgdGhlIGxpbmUgd2lsbCBiZQogICAgICAqIG92ZXJ3cml0dGVuICovCi0gICAgaWYgKCpzID09IE5VTCAmJiAhKGN1cndpbi0+d19wX2xpc3QgJiYgbGNzX2VvbCAhPSBOVUwpKQorICAgIGlmICgqcyA9PSBOVUwgJiYgIShsaXN0ICYmIGxjc19lb2wgIT0gTlVMKSkKIAltc2dfcHV0Y2hhcignICcpOwogCiAgICAgZm9yICg7OykKQEAgLTE1MzUsMTEgKzE1NDcsMTEgQEAKIAl7CiAJICAgIGF0dHIgPSAwOwogCSAgICBjID0gKnMrKzsKLQkgICAgaWYgKGMgPT0gVEFCICYmICghY3Vyd2luLT53X3BfbGlzdCB8fCBsY3NfdGFiMSkpCisJICAgIGlmIChjID09IFRBQiAmJiAoIWxpc3QgfHwgbGNzX3RhYjEpKQogCSAgICB7CiAJCS8qIHRhYiBhbW91bnQgZGVwZW5kcyBvbiBjdXJyZW50IGNvbHVtbiAqLwogCQluX2V4dHJhID0gY3VyYnVmLT5iX3BfdHMgLSBjb2wgJSBjdXJidWYtPmJfcF90cyAtIDE7Ci0JCWlmICghY3Vyd2luLT53X3BfbGlzdCkKKwkJaWYgKCFsaXN0KQogCQl7CiAJCSAgICBjID0gJyAnOwogCQkgICAgY19leHRyYSA9ICcgJzsKQEAgLTE1NTEsNyArMTU2Myw3IEBACiAJCSAgICBhdHRyID0gaGxfYXR0cihITEZfOCk7CiAJCX0KIAkgICAgfQotCSAgICBlbHNlIGlmIChjID09IE5VTCAmJiBjdXJ3aW4tPndfcF9saXN0ICYmIGxjc19lb2wgIT0gTlVMKQorCSAgICBlbHNlIGlmIChjID09IE5VTCAmJiBsaXN0ICYmIGxjc19lb2wgIT0gTlVMKQogCSAgICB7CiAJCXBfZXh0cmEgPSAoY2hhcl91ICopIiI7CiAJCWNfZXh0cmEgPSBOVUw7CkBAIC0yNTIxLDcgKzI1MzMsNyBAQAogCiAgICAgaWYgKChyZWRpcl9mZCAhPSBOVUxMCiAjaWZkZWYgRkVBVF9FVkFMCi0JCQkgIHx8IHJlZGlyX3JlZworCQkJICB8fCByZWRpcl9yZWcgfHwgcmVkaXJfdm5hbWUKICNlbmRpZgogCQkJCSAgICAgICApICYmICFyZWRpcl9vZmYpCiAgICAgewpAQCAtMjUzMyw2ICsyNTQ1LDggQEAKICNpZmRlZiBGRUFUX0VWQUwKIAkJaWYgKHJlZGlyX3JlZykKIAkJICAgIHdyaXRlX3JlZ19jb250ZW50cyhyZWRpcl9yZWcsIChjaGFyX3UgKikiICIsIC0xLCBUUlVFKTsKKwkJZWxzZSBpZiAocmVkaXJfdm5hbWUpCisJCSAgICB2YXJfcmVkaXJfc3RyKChjaGFyX3UgKikiICIsIC0xKTsKIAkJZWxzZSBpZiAocmVkaXJfZmQpCiAjZW5kaWYKIAkJICAgIGZwdXRzKCIgIiwgcmVkaXJfZmQpOwpAQCAtMjU0MywxMyArMjU1NywxNSBAQAogI2lmZGVmIEZFQVRfRVZBTAogCWlmIChyZWRpcl9yZWcpCiAJICAgIHdyaXRlX3JlZ19jb250ZW50cyhyZWRpcl9yZWcsIHMsIG1heGxlbiwgVFJVRSk7CisJaWYgKHJlZGlyX3ZuYW1lKQorCSAgICB2YXJfcmVkaXJfc3RyKHMsIG1heGxlbik7CiAjZW5kaWYKIAogCS8qIEFkanVzdCB0aGUgY3VycmVudCBjb2x1bW4gKi8KIAl3aGlsZSAoKnMgIT0gTlVMICYmIChtYXhsZW4gPCAwIHx8IChpbnQpKHMgLSBzdHIpIDwgbWF4bGVuKSkKIAl7CiAjaWZkZWYgRkVBVF9FVkFMCi0JICAgIGlmICghcmVkaXJfcmVnICYmIHJlZGlyX2ZkICE9IE5VTEwpCisJICAgIGlmICghcmVkaXJfcmVnICYmICFyZWRpcl92bmFtZSAmJiByZWRpcl9mZCAhPSBOVUxMKQogI2VuZGlmCiAJCXB1dGMoKnMsIHJlZGlyX2ZkKTsKIAkgICAgaWYgKCpzID09ICdccicgfHwgKnMgPT0gJ1xuJykKZGlmZiAtLWdpdCBhL3NyYy9uZXRiZWFucy5jIGIvc3JjL25ldGJlYW5zLmMKaW5kZXggZWQ3NTQ3MC4uM2VlZWIwNyAxMDA2NDQKLS0tIGEvc3JjL25ldGJlYW5zLmMKKysrIGIvc3JjL25ldGJlYW5zLmMKQEAgLTExNCwxNCArMTE0LDEyIEBACiAKICNpZmRlZiBGRUFUX0dVSV9NT1RJRgogc3RhdGljIHZvaWQgbmV0YmVhbnNfWHRfY29ubmVjdCBfX0FSR1MoKHZvaWQgKmNvbnRleHQpKTsKLSNlbHNlCi0jIGlmZGVmIEZFQVRfR1VJX0dUSworI2VuZGlmCisjaWZkZWYgRkVBVF9HVUlfR1RLCiBzdGF0aWMgdm9pZCBuZXRiZWFuc19ndGtfY29ubmVjdCBfX0FSR1MoKHZvaWQpKTsKLSMgZWxzZQotIyAgaWZkZWYgRkVBVF9HVUlfVzMyCisjZW5kaWYKKyNpZmRlZiBGRUFUX0dVSV9XMzIKIHN0YXRpYyB2b2lkIG5ldGJlYW5zX3czMl9jb25uZWN0IF9fQVJHUygodm9pZCkpOwotIyAgZW5kaWYKLSMgZW5kaWYKICNlbmRpZgogCiBzdGF0aWMgaW50IGRvc2V0dmlzaWJsZSA9IEZBTFNFOwpAQCAtMjU1OSw2ICsyNTU3LDEwIEBACiAjZWxzZQogIyBpZmRlZiBGRUFUX0dVSV9HVEsKIAluZXRiZWFuc19ndGtfY29ubmVjdCgpOworIyBlbHNlCisjICBpZmRlZiBGRUFUX0dVSV9XMzIKKwluZXRiZWFuc193MzJfY29ubmVjdCgpOworIyAgZW5kaWYKICMgZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zcmMvbm9ybWFsLmMgYi9zcmMvbm9ybWFsLmMKaW5kZXggZjEzYjQ1ZS4uMmJhM2Y3NCAxMDA2NDQKLS0tIGEvc3JjL25vcm1hbC5jCisrKyBiL3NyYy9ub3JtYWwuYwpAQCAtMjMyLDcgKzIzMiwxMSBAQAogICAgIHtDdHJsX04sCW52X2Rvd24sCU5WX1NUUywJCQlGQUxTRX0sCiAgICAge0N0cmxfTywJbnZfY3RybG8sCTAsCQkJMH0sCiAgICAge0N0cmxfUCwJbnZfdXAsCQlOVl9TVFMsCQkJRkFMU0V9LAorI2lmZGVmIEZFQVRfVklTVUFMCisgICAge0N0cmxfUSwJbnZfdmlzdWFsLAkwLAkJCUZBTFNFfSwKKyNlbHNlCiAgICAge0N0cmxfUSwJbnZfaWdub3JlLAkwLAkJCTB9LAorI2VuZGlmCiAgICAge0N0cmxfUiwJbnZfcmVkbywJMCwJCQkwfSwKICAgICB7Q3RybF9TLAludl9pZ25vcmUsCTAsCQkJMH0sCiAgICAge0N0cmxfVCwJbnZfdGFncG9wLAlOVl9OQ1csCQkJMH0sCkBAIC02ODUyLDExICs2ODU2LDE1IEBACiAgKiBIYW5kbGUgInYiLCAiViIgYW5kICJDVFJMLVYiIGNvbW1hbmRzLgogICogQWxzbyBmb3IgImdoIiwgImdIIiBhbmQgImdeSCIgY29tbWFuZHM6IEFsd2F5cyBzdGFydCBTZWxlY3QgbW9kZSwgY2FwLT5hcmcKICAqIGlzIFRSVUUuCisgKiBIYW5kbGUgQ1RSTC1RIGp1c3QgbGlrZSBDVFJMLVYuCiAgKi8KICAgICBzdGF0aWMgdm9pZAogbnZfdmlzdWFsKGNhcCkKICAgICBjbWRhcmdfVAkqY2FwOwogeworICAgIGlmIChjYXAtPmNtZGNoYXIgPT0gQ3RybF9RKQorCWNhcC0+Y21kY2hhciA9IEN0cmxfVjsKKwogICAgIC8qICd2JywgJ1YnIGFuZCBDVFJMLVYgY2FuIGJlIHVzZWQgd2hpbGUgYW4gb3BlcmF0b3IgaXMgcGVuZGluZyB0byBtYWtlIGl0CiAgICAgICogY2hhcmFjdGVyd2lzZSwgbGluZXdpc2UsIG9yIGJsb2Nrd2lzZS4gKi8KICAgICBpZiAoY2FwLT5vYXAtPm9wX3R5cGUgIT0gT1BfTk9QKQpkaWZmIC0tZ2l0IGEvc3JjL29zX3VuaXguYyBiL3NyYy9vc191bml4LmMKaW5kZXggZDg5NjM2ZC4uOTQ1MDkyZiAxMDA2NDQKLS0tIGEvc3JjL29zX3VuaXguYworKysgYi9zcmMvb3NfdW5peC5jCkBAIC0xNjUsNiArMTY1LDcgQEAKICNlbmRpZgogc3RhdGljIFJFVFNJR1RZUEUgZGVhdGh0cmFwIF9fQVJHUyhTSUdQUk9UT0FSRyk7CiAKK3N0YXRpYyB2b2lkIGNhdGNoX2ludF9zaWduYWwgX19BUkdTKCh2b2lkKSk7CiBzdGF0aWMgdm9pZCBzZXRfc2lnbmFscyBfX0FSR1MoKHZvaWQpKTsKIHN0YXRpYyB2b2lkIGNhdGNoX3NpZ25hbHMgX19BUkdTKChSRVRTSUdUWVBFICgqZnVuY19kZWFkbHkpKCksIFJFVFNJR1RZUEUgKCpmdW5jX290aGVyKSgpKSk7CiAjaWZuZGVmIF9fRU1YX18KQEAgLTE3NSw2ICsxNzYsMTQgQEAKICNpZm5kZWYgTk9fRVhQQU5EUEFUSAogc3RhdGljIGludAlwc3RyY21wIF9fQVJHUygoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKIHN0YXRpYyBpbnQJdW5peF9leHBhbmRwYXRoIF9fQVJHUygoZ2FycmF5X1QgKmdhcCwgY2hhcl91ICpwYXRoLCBpbnQgd2lsZG9mZiwgaW50IGZsYWdzKSk7CisjIGlmIGRlZmluZWQoTUFDT1NfWCkgJiYgZGVmaW5lZChGRUFUX01CWVRFKQorZXh0ZXJuIGNoYXJfdQkqbWFjX3ByZWNvbXBvc2VfcGF0aCBfX0FSR1MoKGNoYXJfdSAqZGVjb21wUGF0aCwgc2l6ZV90IGRlY29tcExlbiwgc2l6ZV90ICpwcmVjb21wTGVuKSk7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUFDT1NfWCkgJiYgZGVmaW5lZChGRUFUX01CWVRFKQorZXh0ZXJuIHZvaWQJbWFjX2NvbnZfaW5pdCBfX0FSR1MoKHZvaWQpKTsKK2V4dGVybiB2b2lkCW1hY19jb252X2NsZWFudXAgX19BUkdTKCh2b2lkKSk7CiAjZW5kaWYKIAogI2lmbmRlZiBfX0VNWF9fCkBAIC0xMDgzLDYgKzEwOTIsMTAgQEAKIAogICAgIG91dF9mbHVzaCgpOwogICAgIHNldF9zaWduYWxzKCk7CisKKyNpZiBkZWZpbmVkKE1BQ09TX1gpICYmIGRlZmluZWQoRkVBVF9NQllURSkKKyAgICBtYWNfY29udl9pbml0KCk7CisjZW5kaWYKIH0KIAogICAgIHN0YXRpYyB2b2lkCkBAIC0xMTEzLDExICsxMTI2LDggQEAKICAgICBzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7CiAjZW5kaWYKIAotICAgIC8qCi0gICAgICogV2Ugd2FudCB0byBjYXRjaCBDVFJMLUMgKG9ubHkgd29ya3Mgd2hpbGUgaW4gQ29va2VkIG1vZGUpLgotICAgICAqLwogI2lmZGVmIFNJR0lOVAotICAgIHNpZ25hbChTSUdJTlQsIChSRVRTSUdUWVBFICgqKSgpKWNhdGNoX3NpZ2ludCk7CisgICAgY2F0Y2hfaW50X3NpZ25hbCgpOwogI2VuZGlmCiAKICAgICAvKgpAQCAtMTE0OSw2ICsxMTU5LDE3IEBACiAjZW5kaWYKIH0KIAorI2lmIGRlZmluZWQoU0lHSU5UKSB8fCBkZWZpbmVkKFBST1RPKQorLyoKKyAqIENhdGNoIENUUkwtQyAob25seSB3b3JrcyB3aGlsZSBpbiBDb29rZWQgbW9kZSkuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorY2F0Y2hfaW50X3NpZ25hbCgpCit7CisgICAgc2lnbmFsKFNJR0lOVCwgKFJFVFNJR1RZUEUgKCopKCkpY2F0Y2hfc2lnaW50KTsKK30KKyNlbmRpZgorCiAgICAgdm9pZAogcmVzZXRfc2lnbmFscygpCiB7CkBAIC0yNjk0LDYgKzI3MTUsOCBAQAogICAgIHN0YXRpYyB2b2lkCiBleGl0X3Njcm9sbCgpCiB7CisgICAgaWYgKHNpbGVudF9tb2RlKQorCXJldHVybjsKICAgICBpZiAobmV3bGluZV9vbl9leGl0IHx8IG1zZ19kaWRvdXQpCiAgICAgewogCWlmIChtc2dfdXNlX3ByaW50ZigpKQpAQCAtMjc2NCw2ICsyNzg3LDExIEBACiAgICAgaWYgKGd1aS5pbl91c2UpCiAJZ3VpX2V4aXQocik7CiAjZW5kaWYKKworI2lmIGRlZmluZWQoTUFDT1NfWCkgJiYgZGVmaW5lZChGRUFUX01CWVRFKQorICAgIG1hY19jb252X2NsZWFudXAoKTsKKyNlbmRpZgorCiAjaWZkZWYgX19RTlhfXwogICAgIC8qIEEgY29yZSBkdW1wIHdvbid0IGJlIGNyZWF0ZWQgaWYgdGhlIHNpZ25hbCBoYW5kbGVyCiAgICAgICogZG9lc24ndCByZXR1cm4sIHNvIHdlIGNhbid0IGNhbGwgZXhpdCgpICovCkBAIC0zMjgyLDYgKzMzMTAsMjcgQEAKICAgICAvKiBOb3RoaW5nIHRvIGRvLiAqLwogfQogCisjaWZuZGVmIFVTRV9TWVNURU0KK3N0YXRpYyB2b2lkIGFwcGVuZF9nYV9saW5lIF9fQVJHUygoZ2FycmF5X1QgKmdhcCkpOworCisvKgorICogQXBwZW5kIHRoZSB0ZXh0IGluICJnYXAiIGJlbG93IHRoZSBjdXJzb3IgbGluZSBhbmQgY2xlYXIgImdhcCIuCisgKi8KKyAgICBzdGF0aWMgdm9pZAorYXBwZW5kX2dhX2xpbmUoZ2FwKQorICAgIGdhcnJheV9UCSpnYXA7Cit7CisgICAgLyogUmVtb3ZlIHRyYWlsaW5nIENSLiAqLworICAgIGlmIChnYXAtPmdhX2xlbiA+IDAKKwkgICAgJiYgIWN1cmJ1Zi0+Yl9wX2JpbgorCSAgICAmJiAoKGNoYXJfdSAqKWdhcC0+Z2FfZGF0YSlbZ2FwLT5nYV9sZW4gLSAxXSA9PSBDQVIpCisJLS1nYXAtPmdhX2xlbjsKKyAgICBnYV9hcHBlbmQoZ2FwLCBOVUwpOworICAgIG1sX2FwcGVuZChjdXJ3aW4tPndfY3Vyc29yLmxudW0rKywgZ2FwLT5nYV9kYXRhLCAwLCBGQUxTRSk7CisgICAgZ2FwLT5nYV9sZW4gPSAwOworfQorI2VuZGlmCisKICAgICBpbnQKIG1jaF9jYWxsX3NoZWxsKGNtZCwgb3B0aW9ucykKICAgICBjaGFyX3UJKmNtZDsKQEAgLTMzOTgsMTEgKzM0NDcsMTIgQEAKIAogI2Vsc2UgLyogVVNFX1NZU1RFTSAqLwkgICAgLyogZG9uJ3QgdXNlIHN5c3RlbSgpLCB1c2UgZm9yaygpL2V4ZWMoKSAqLwogCi0jZGVmaW5lIEVYRUNfRkFJTEVEIDEyMgkgICAgLyogRXhpdCBjb2RlIHdoZW4gc2hlbGwgZGlkbid0IGV4ZWN1dGUuICBEb24ndCB1c2UKLQkJCSAgICAgICAxMjcsIHNvbWUgc2hlbGwgdXNlIHRoYXQgYWxyZWFkeSAqLworIyBkZWZpbmUgRVhFQ19GQUlMRUQgMTIyICAgIC8qIEV4aXQgY29kZSB3aGVuIHNoZWxsIGRpZG4ndCBleGVjdXRlLiAgRG9uJ3QgdXNlCisJCQkgICAgICAgMTI3LCBzb21lIHNoZWxscyB1c2UgdGhhdCBhbHJlYWR5ICovCiAKICAgICBjaGFyX3UJKm5ld2NtZCA9IE5VTEw7CiAgICAgcGlkX3QJcGlkOworICAgIHBpZF90CXdwaWQgPSAwOwogICAgIHBpZF90CXdhaXRfcGlkID0gMDsKICMgaWZkZWYgSEFWRV9VTklPTl9XQUlUCiAgICAgdW5pb24gd2FpdAlzdGF0dXM7CkBAIC0zNDE1LDE5ICszNDY1LDE5IEBACiAgICAgaW50CQlpOwogICAgIGNoYXJfdQkqcDsKICAgICBpbnQJCWlucXVvdGU7Ci0jIGlmZGVmIEZFQVRfR1VJCiAgICAgaW50CQlwdHlfbWFzdGVyX2ZkID0gLTE7CSAgICAvKiBmb3IgcHR5J3MgKi8KKyMgaWZkZWYgRkVBVF9HVUkKICAgICBpbnQJCXB0eV9zbGF2ZV9mZCA9IC0xOwogICAgIGNoYXIJKnR0eV9uYW1lOworIyBlbmRpZgogICAgIGludAkJZmRfdG9zaGVsbFsyXTsJICAgIC8qIGZvciBwaXBlcyAqLwogICAgIGludAkJZmRfZnJvbXNoZWxsWzJdOwogICAgIGludAkJcGlwZV9lcnJvciA9IEZBTFNFOwotIyAgaWZkZWYgSEFWRV9TRVRFTlYKKyMgaWZkZWYgSEFWRV9TRVRFTlYKICAgICBjaGFyCWVudmJ1Zls1MF07Ci0jICBlbHNlCisjIGVsc2UKICAgICBzdGF0aWMgY2hhcgllbnZidWZfUm93c1syMF07CiAgICAgc3RhdGljIGNoYXIJZW52YnVmX0NvbHVtbnNbMjBdOwotIyAgZW5kaWYKICMgZW5kaWYKICAgICBpbnQJCWRpZF9zZXR0bW9kZSA9IEZBTFNFOyAvKiBUUlVFIHdoZW4gc2V0dG1vZGUoVE1PREVfUkFXKSBjYWxsZWQgKi8KIApAQCAtMzQ4MCwxOSArMzUzMCwyNCBAQAogICAgIH0KICAgICBhcmd2W2FyZ2NdID0gTlVMTDsKIAotIyBpZmRlZiBGRUFUX0dVSQogICAgIC8qCi0gICAgICogRm9yIHRoZSBHVUk6IFRyeSB1c2luZyBhIHBzZXVkby10dHkgdG8gZ2V0IHRoZSBzdGRpbi9zdGRvdXQgb2YgdGhlCi0gICAgICogZXhlY3V0ZWQgY29tbWFuZCBpbnRvIHRoZSBWaW0gd2luZG93LiAgT3IgdXNlIGEgcGlwZS4KKyAgICAgKiBGb3IgdGhlIEdVSSwgd2hlbiB3cml0aW5nIHRoZSBvdXRwdXQgaW50byB0aGUgYnVmZmVyIGFuZCB3aGVuIHJlYWRpbmcKKyAgICAgKiBpbnB1dCBmcm9tIHRoZSBidWZmZXI6IFRyeSB1c2luZyBhIHBzZXVkby10dHkgdG8gZ2V0IHRoZSBzdGRpbi9zdGRvdXQKKyAgICAgKiBvZiB0aGUgZXhlY3V0ZWQgY29tbWFuZCBpbnRvIHRoZSBWaW0gd2luZG93LiAgT3IgdXNlIGEgcGlwZS4KICAgICAgKi8KLSAgICBpZiAoZ3VpLmluX3VzZSAmJiBzaG93X3NoZWxsX21lc3MpCisgICAgaWYgKChvcHRpb25zICYgKFNIRUxMX1JFQUR8U0hFTExfV1JJVEUpKQorIyBpZmRlZiBGRUFUX0dVSQorCSAgICB8fCAoZ3VpLmluX3VzZSAmJiBzaG93X3NoZWxsX21lc3MpCisjIGVuZGlmCisJCSAgICApCiAgICAgeworIyBpZmRlZiBGRUFUX0dVSQogCS8qCiAJICogVHJ5IHRvIG9wZW4gYSBtYXN0ZXIgcHR5LgogCSAqIElmIHRoaXMgd29ya3MsIG9wZW4gdGhlIHNsYXZlIHB0eS4KIAkgKiBJZiB0aGUgc2xhdmUgY2FuJ3QgYmUgb3BlbmVkLCBjbG9zZSB0aGUgbWFzdGVyIHB0eS4KIAkgKi8KLQlpZiAocF9ndWlwdHkpCisJaWYgKHBfZ3VpcHR5ICYmICEob3B0aW9ucyAmIChTSEVMTF9SRUFEfFNIRUxMX1dSSVRFKSkpCiAJewogCSAgICBwdHlfbWFzdGVyX2ZkID0gT3BlblBUWSgmdHR5X25hbWUpOwkgICAgLyogb3BlbiBwdHkgKi8KIAkgICAgaWYgKHB0eV9tYXN0ZXJfZmQgPj0gMCAmJiAoKHB0eV9zbGF2ZV9mZCA9CkBAIC0zNTA2LDYgKzM1NjEsNyBAQAogCSAqIElmIG5vdCBvcGVuaW5nIGEgcHR5IG9yIGl0IGRpZG4ndCB3b3JrLCB0cnkgdXNpbmcgcGlwZXMuCiAJICovCiAJaWYgKHB0eV9tYXN0ZXJfZmQgPCAwKQorIyBlbmRpZgogCXsKIAkgICAgcGlwZV9lcnJvciA9IChwaXBlKGZkX3Rvc2hlbGwpIDwgMCk7CiAJICAgIGlmICghcGlwZV9lcnJvcikJCQkgICAgLyogcGlwZSBjcmVhdGUgT0sgKi8KQEAgLTM1MjYsOCArMzU4Miw2IEBACiAgICAgfQogCiAgICAgaWYgKCFwaXBlX2Vycm9yKQkJCS8qIHB0eSBvciBwaXBlIG9wZW5lZCBvciBub3QgdXNlZCAqLwotIyBlbmRpZgotCiAgICAgewogIyBpZmRlZiBfX0JFT1NfXwogCWJlb3NfY2xlYW51cF9yZWFkX3RocmVhZCgpOwpAQCAtMzUzNSwxNSArMzU4OSwyMCBAQAogCWlmICgocGlkID0gZm9yaygpKSA9PSAtMSkJLyogbWF5YmUgd2Ugc2hvdWxkIHVzZSB2Zm9yaygpICovCiAJewogCSAgICBNU0dfUFVUUyhfKCJcbkNhbm5vdCBmb3JrXG4iKSk7CisJICAgIGlmICgob3B0aW9ucyAmIChTSEVMTF9SRUFEfFNIRUxMX1dSSVRFKSkKICMgaWZkZWYgRkVBVF9HVUkKLQkgICAgaWYgKGd1aS5pbl91c2UgJiYgc2hvd19zaGVsbF9tZXNzKQorCQl8fCAoZ3VpLmluX3VzZSAmJiBzaG93X3NoZWxsX21lc3MpCisjIGVuZGlmCisJCSAgICApCiAJICAgIHsKKyMgaWZkZWYgRkVBVF9HVUkKIAkJaWYgKHB0eV9tYXN0ZXJfZmQgPj0gMCkJCS8qIGNsb3NlIHRoZSBwc2V1ZG8gdHR5ICovCiAJCXsKIAkJICAgIGNsb3NlKHB0eV9tYXN0ZXJfZmQpOwogCQkgICAgY2xvc2UocHR5X3NsYXZlX2ZkKTsKIAkJfQogCQllbHNlCQkJCS8qIGNsb3NlIHRoZSBwaXBlcyAqLworIyBlbmRpZgogCQl7CiAJCSAgICBjbG9zZShmZF90b3NoZWxsWzBdKTsKIAkJICAgIGNsb3NlKGZkX3Rvc2hlbGxbMV0pOwpAQCAtMzU1MSw3ICszNjEwLDYgQEAKIAkJICAgIGNsb3NlKGZkX2Zyb21zaGVsbFsxXSk7CiAJCX0KIAkgICAgfQotIyBlbmRpZgogCX0KIAllbHNlIGlmIChwaWQgPT0gMCkJLyogY2hpbGQgKi8KIAl7CkBAIC0zNTkzLDEzICszNjUxLDE3IEBACiAJCSAgICBjbG9zZShmZCk7CiAJCX0KIAkgICAgfQorCSAgICBlbHNlIGlmICgob3B0aW9ucyAmIChTSEVMTF9SRUFEfFNIRUxMX1dSSVRFKSkKICMgaWZkZWYgRkVBVF9HVUkKLQkgICAgZWxzZSBpZiAoZ3VpLmluX3VzZSkKKwkJICAgIHx8IGd1aS5pbl91c2UKKyMgZW5kaWYKKwkJICAgICkKIAkgICAgewogCi0jICBpZmRlZiBIQVZFX1NFVFNJRAorIyBpZmRlZiBIQVZFX1NFVFNJRAogCQkodm9pZClzZXRzaWQoKTsKLSMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIEZFQVRfR1VJCiAJCS8qIHB1c2ggc3RyZWFtIGRpc2NpcGxpbmUgbW9kdWxlcyAqLwogCQlpZiAob3B0aW9ucyAmIFNIRUxMX0NPT0tFRCkKIAkJICAgIFNldHVwU2xhdmVQVFkocHR5X3NsYXZlX2ZkKTsKQEAgLTM2MDgsOCArMzY3MCw5IEBACiAJCSAqIHVubGVzcyBydW4gYnkgcm9vdCkgKi8KIAkJaW9jdGwocHR5X3NsYXZlX2ZkLCBUSU9DU0NUVFksIChjaGFyICopTlVMTCk7CiAjICBlbmRpZgorIyBlbmRpZgogCQkvKiBTaW11bGF0ZSB0byBoYXZlIGEgZHVtYiB0ZXJtaW5hbCAoZm9yIG5vdykgKi8KLSMgIGlmZGVmIEhBVkVfU0VURU5WCisjIGlmZGVmIEhBVkVfU0VURU5WCiAJCXNldGVudigiVEVSTSIsICJkdW1iIiwgMSk7CiAJCXNwcmludGYoKGNoYXIgKillbnZidWYsICIlbGQiLCBSb3dzKTsKIAkJc2V0ZW52KCJST1dTIiwgKGNoYXIgKillbnZidWYsIDEpOwpAQCAtMzYxNyw3ICszNjgwLDcgQEAKIAkJc2V0ZW52KCJMSU5FUyIsIChjaGFyICopZW52YnVmLCAxKTsKIAkJc3ByaW50ZigoY2hhciAqKWVudmJ1ZiwgIiVsZCIsIENvbHVtbnMpOwogCQlzZXRlbnYoIkNPTFVNTlMiLCAoY2hhciAqKWVudmJ1ZiwgMSk7Ci0jICBlbHNlCisjIGVsc2UKIAkJLyoKIAkJICogUHV0ZW52IGRvZXMgbm90IGNvcHkgdGhlIHN0cmluZywgaXQgaGFzIHRvIHJlbWFpbiB2YWxpZC4KIAkJICogVXNlIGEgc3RhdGljIGFycmF5IHRvIGF2b2lkIGxvb3NpbmcgYWxsb2NhdGVkIG1lbW9yeS4KQEAgLTM2MjksOCArMzY5Miw5IEBACiAJCXB1dGVudihlbnZidWZfUm93cyk7CiAJCXNwcmludGYoZW52YnVmX0NvbHVtbnMsICJDT0xVTU5TPSVsZCIsIENvbHVtbnMpOwogCQlwdXRlbnYoZW52YnVmX0NvbHVtbnMpOwotIyAgZW5kaWYKKyMgZW5kaWYKIAorIyBpZmRlZiBGRUFUX0dVSQogCQlpZiAocHR5X21hc3Rlcl9mZCA+PSAwKQogCQl7CiAJCSAgICBjbG9zZShwdHlfbWFzdGVyX2ZkKTsgICAvKiBjbG9zZSBtYXN0ZXIgc2lkZSBvZiBwdHkgKi8KQEAgLTM2NDYsNiArMzcxMCw3IEBACiAJCSAgICBjbG9zZShwdHlfc2xhdmVfZmQpOyAgICAvKiBoYXMgYmVlbiBkdXBwZWQsIGNsb3NlIGl0IG5vdyAqLwogCQl9CiAJCWVsc2UKKyMgZW5kaWYKIAkJewogCQkgICAgLyogc2V0IHVwIHN0ZGluIGZvciB0aGUgY2hpbGQgKi8KIAkJICAgIGNsb3NlKGZkX3Rvc2hlbGxbMV0pOwpAQCAtMzY2NCw3ICszNzI5LDcgQEAKIAkJICAgIGR1cCgxKTsKIAkJfQogCSAgICB9Ci0jIGVuZGlmIC8qIEZFQVRfR1VJICovCisKIAkgICAgLyoKIAkgICAgICogVGhlcmUgaXMgbm8gdHlwZSBjYXN0IGZvciB0aGUgYXJndiwgYmVjYXVzZSB0aGUgdHlwZSBtYXkgYmUKIAkgICAgICogZGlmZmVyZW50IG9uIGRpZmZlcmVudCBtYWNoaW5lcy4gVGhpcyBtYXkgY2F1c2UgYSB3YXJuaW5nCkBAIC0zNjc5LDIxICszNzQ0LDI3IEBACiAJewogCSAgICAvKgogCSAgICAgKiBXaGlsZSBjaGlsZCBpcyBydW5uaW5nLCBpZ25vcmUgdGVybWluYXRpbmcgc2lnbmFscy4KKwkgICAgICogRG8gY2F0Y2ggQ1RSTC1DLCBzbyB0aGF0ICJnb3RfaW50IiBpcyBzZXQuCiAJICAgICAqLwogCSAgICBjYXRjaF9zaWduYWxzKFNJR19JR04sIFNJR19FUlIpOwotCi0jIGlmZGVmIEZFQVRfR1VJCisJICAgIGNhdGNoX2ludF9zaWduYWwoKTsKIAogCSAgICAvKgogCSAgICAgKiBGb3IgdGhlIEdVSSB3ZSByZWRpcmVjdCBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gb3VyIHdpbmRvdy4KKwkgICAgICogVGhpcyBpcyBhbHNvIHVzZWQgdG8gcGlwZSBzdGRpbi9zdGRvdXQgdG8vZnJvbSB0aGUgZXh0ZXJuYWwKKwkgICAgICogY29tbWFuZC4KIAkgICAgICovCi0JICAgIGlmIChndWkuaW5fdXNlICYmIHNob3dfc2hlbGxfbWVzcykKKwkgICAgaWYgKChvcHRpb25zICYgKFNIRUxMX1JFQUR8U0hFTExfV1JJVEUpKQorIyBpZmRlZiBGRUFUX0dVSQorCQkgICAgfHwgKGd1aS5pbl91c2UgJiYgc2hvd19zaGVsbF9tZXNzKQorIyBlbmRpZgorCSAgICAgICApCiAJICAgIHsKLSMgIGRlZmluZSBCVUZMRU4gMTAwCQkvKiBsZW5ndGggZm9yIGJ1ZmZlciwgcHNldWRvIHR0eSBsaW1pdCBpcyAxMjggKi8KKyMgZGVmaW5lIEJVRkxFTiAxMDAJCS8qIGxlbmd0aCBmb3IgYnVmZmVyLCBwc2V1ZG8gdHR5IGxpbWl0IGlzIDEyOCAqLwogCQljaGFyX3UJICAgIGJ1ZmZlcltCVUZMRU4gKyAxXTsKLSMgIGlmZGVmIEZFQVRfTUJZVEUKKyMgaWZkZWYgRkVBVF9NQllURQogCQlpbnQJICAgIGJ1ZmZlcl9vZmYgPSAwOwkvKiB2YWxpZCBieXRlcyBpbiBidWZmZXJbXSAqLwotIyAgZW5kaWYKKyMgZW5kaWYKIAkJY2hhcl91CSAgICB0YV9idWZbQlVGTEVOICsgMV07CS8qIFR5cGVBSGVhZCAqLwogCQlpbnQJICAgIHRhX2xlbiA9IDA7CQkvKiB2YWxpZCBieXRlcyBpbiB0YV9idWZbXSAqLwogCQlpbnQJICAgIGxlbjsKQEAgLTM3MDIsNyArMzc3MywxMCBAQAogCQlpbnQJICAgIGM7CiAJCWludAkgICAgdG9zaGVsbF9mZDsKIAkJaW50CSAgICBmcm9tc2hlbGxfZmQ7CisJCWdhcnJheV9UICAgIGdhOworCQlpbnQJICAgIG5vcmVhZF9jbnQ7CiAKKyMgaWZkZWYgRkVBVF9HVUkKIAkJaWYgKHB0eV9tYXN0ZXJfZmQgPj0gMCkKIAkJewogCQkgICAgY2xvc2UocHR5X3NsYXZlX2ZkKTsJLyogY2xvc2Ugc2xhdmUgc2lkZSBvZiBwdHkgKi8KQEAgLTM3MTAsNiArMzc4NCw3IEBACiAJCSAgICB0b3NoZWxsX2ZkID0gZHVwKHB0eV9tYXN0ZXJfZmQpOwogCQl9CiAJCWVsc2UKKyMgZW5kaWYKIAkJewogCQkgICAgY2xvc2UoZmRfdG9zaGVsbFswXSk7CiAJCSAgICBjbG9zZShmZF9mcm9tc2hlbGxbMV0pOwpAQCAtMzczOCw2ICszODEzLDc2IEBACiAJCW9sZF9TdGF0ZSA9IFN0YXRlOwogCQlTdGF0ZSA9IEVYVEVSTkNNRDsJLyogZG9uJ3QgcmVkcmF3IGF0IHdpbmRvdyByZXNpemUgKi8KIAorCQlpZiAob3B0aW9ucyAmIFNIRUxMX1dSSVRFICYmIHRvc2hlbGxfZmQgPj0gMCkKKwkJeworCQkgICAgLyogRm9yayBhIHByb2Nlc3MgdGhhdCB3aWxsIHdyaXRlIHRoZSBsaW5lcyB0byB0aGUKKwkJICAgICAqIGV4dGVybmFsIHByb2dyYW0uICovCisJCSAgICBpZiAoKHdwaWQgPSBmb3JrKCkpID09IC0xKQorCQkgICAgeworCQkJTVNHX1BVVFMoXygiXG5DYW5ub3QgZm9ya1xuIikpOworCQkgICAgfQorCQkgICAgZWxzZSBpZiAod3BpZCA9PSAwKQorCQkgICAgeworCQkJbGluZW5yX1QgICAgbG51bSA9IGN1cmJ1Zi0+Yl9vcF9zdGFydC5sbnVtOworCQkJaW50CSAgICB3cml0dGVuID0gMDsKKwkJCWNoYXJfdQkgICAgKnAgPSBtbF9nZXQobG51bSk7CisJCQljaGFyX3UJICAgICpzOworCQkJc2l6ZV90CSAgICBsOworCisJCQkvKiBjaGlsZCAqLworCQkJZm9yICg7OykKKwkJCXsKKwkJCSAgICBsID0gU1RSTEVOKHAgKyB3cml0dGVuKTsKKwkJCSAgICBpZiAobCA9PSAwKQorCQkJCWxlbiA9IDA7CisJCQkgICAgZWxzZSBpZiAocFt3cml0dGVuXSA9PSBOTCkKKwkJCQkvKiBOTCAtPiBOVUwgdHJhbnNsYXRpb24gKi8KKwkJCQlsZW4gPSB3cml0ZSh0b3NoZWxsX2ZkLCAiIiwgKHNpemVfdCkxKTsKKwkJCSAgICBlbHNlCisJCQkgICAgeworCQkJCXMgPSB2aW1fc3RyY2hyKHAgKyB3cml0dGVuLCBOTCk7CisJCQkJbGVuID0gd3JpdGUodG9zaGVsbF9mZCwgKGNoYXIgKilwICsgd3JpdHRlbiwKKwkJCQkJICAgcyA9PSBOVUxMID8gbCA6IHMgLSAocCArIHdyaXR0ZW4pKTsKKwkJCSAgICB9CisJCQkgICAgaWYgKGxlbiA9PSBsKQorCQkJICAgIHsKKwkJCQkvKiBGaW5pc2hlZCBhIGxpbmUsIGFkZCBhIE5MLCB1bmxlc3MgdGhpcyBsaW5lCisJCQkJICogc2hvdWxkIG5vdCBoYXZlIG9uZS4gKi8KKwkJCQlpZiAobG51bSAhPSBjdXJidWYtPmJfb3BfZW5kLmxudW0KKwkJCQkJfHwgIWN1cmJ1Zi0+Yl9wX2JpbgorCQkJCQl8fCAobG51bSAhPSB3cml0ZV9ub19lb2xfbG51bQorCQkJCQkgICAgJiYgKGxudW0gIT0KKwkJCQkJCSAgICBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudAorCQkJCQkJICAgIHx8IGN1cmJ1Zi0+Yl9wX2VvbCkpKQorCQkJCSAgICB3cml0ZSh0b3NoZWxsX2ZkLCAiXG4iLCAoc2l6ZV90KTEpOworCQkJCSsrbG51bTsKKwkJCQlpZiAobG51bSA+IGN1cmJ1Zi0+Yl9vcF9lbmQubG51bSkKKwkJCQl7CisJCQkJICAgIC8qIGZpbmlzaGVkIGFsbCB0aGUgbGluZXMsIGNsb3NlIHBpcGUgKi8KKwkJCQkgICAgY2xvc2UodG9zaGVsbF9mZCk7CisJCQkJICAgIHRvc2hlbGxfZmQgPSAtMTsKKwkJCQkgICAgYnJlYWs7CisJCQkJfQorCQkJCXAgPSBtbF9nZXQobG51bSk7CisJCQkJd3JpdHRlbiA9IDA7CisJCQkgICAgfQorCQkJICAgIGVsc2UgaWYgKGxlbiA+IDApCisJCQkJd3JpdHRlbiArPSBsZW47CisJCQl9CisJCQlfZXhpdCgwKTsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCWNsb3NlKHRvc2hlbGxfZmQpOworCQkJdG9zaGVsbF9mZCA9IC0xOworCQkgICAgfQorCQl9CisKKwkJaWYgKG9wdGlvbnMgJiBTSEVMTF9SRUFEKQorCQkgICAgZ2FfaW5pdDIoJmdhLCAxLCBCVUZMRU4pOworCisJCW5vcmVhZF9jbnQgPSAwOworCiAJCWZvciAoOzspCiAJCXsKIAkJICAgIC8qCkBAIC0zNzQ1LDEyICszODkwLDE1IEBACiAJCSAgICAgKiBpZiB0aGVyZSBhcmUgYW55LiAgRG9uJ3QgZG8gdGhpcyBpZiB3ZSBhcmUgZXhwYW5kaW5nCiAJCSAgICAgKiB3aWxkIGNhcmRzICh3b3VsZCBlYXQgdHlwZWFoZWFkKS4gIERvbid0IGdldCBleHRyYQogCQkgICAgICogY2hhcmFjdGVycyB3aGVuIHdlIGFscmVhZHkgaGF2ZSBvbmUuCisJCSAgICAgKiBEb24ndCByZWFkIGNoYXJhY3RlcnMgdW5sZXNzIHdlIGRpZG4ndCBnZXQgb3V0cHV0IGZvciBhCisJCSAgICAgKiB3aGlsZSwgYXZvaWRzIHRoYXQgIjpyICFscyIgZWF0cyB0eXBlYWhlYWQuCiAJCSAgICAgKi8KIAkJICAgIGxlbiA9IDA7CiAJCSAgICBpZiAoIShvcHRpb25zICYgU0hFTExfRVhQQU5EKQogCQkJICAgICYmICh0YV9sZW4gPiAwCi0JCQkJfHwgKGxlbiA9IHVpX2luY2hhcih0YV9idWYsIEJVRkxFTiwgMTBMLAotCQkJCQkJCQkgICAgIDApKSA+IDApKQorCQkJCXx8IChub3JlYWRfY250ID4gNAorCQkJCSAgICAmJiAobGVuID0gdWlfaW5jaGFyKHRhX2J1ZiwKKwkJCQkJCSAgICAgICBCVUZMRU4sIDEwTCwgMCkpID4gMCkpKQogCQkgICAgewogCQkJLyoKIAkJCSAqIEZvciBwaXBlczoKQEAgLTM3NTksMTkgKzM5MDcsMjMgQEAKIAkJCSAqLwogCQkJaWYgKGxlbiA9PSAxICYmIChwdHlfbWFzdGVyX2ZkIDwgMCB8fCBjbWQgIT0gTlVMTCkpCiAJCQl7Ci0jICBpZmRlZiBTSUdJTlQKKyMgaWZkZWYgU0lHSU5UCiAJCQkgICAgLyoKIAkJCSAgICAgKiBTZW5kIFNJR0lOVCB0byB0aGUgY2hpbGQncyBncm91cCBvciBhbGwKIAkJCSAgICAgKiBwcm9jZXNzZXMgaW4gb3VyIGdyb3VwLgogCQkJICAgICAqLwogCQkJICAgIGlmICh0YV9idWZbdGFfbGVuXSA9PSBDdHJsX0MKIAkJCQkJICAgICAgIHx8IHRhX2J1Zlt0YV9sZW5dID09IGludHJfY2hhcikKLSMgICBpZmRlZiBIQVZFX1NFVFNJRAorCQkJICAgIHsKKyMgIGlmZGVmIEhBVkVfU0VUU0lECiAJCQkJa2lsbCgtcGlkLCBTSUdJTlQpOwotIyAgIGVsc2UKKyMgIGVsc2UKIAkJCQlraWxsKDAsIFNJR0lOVCk7Ci0jICAgZW5kaWYKICMgIGVuZGlmCisJCQkJaWYgKHdwaWQgPiAwKQorCQkJCSAgICBraWxsKHdwaWQsIFNJR0lOVCk7CisJCQkgICAgfQorIyBlbmRpZgogCQkJICAgIGlmIChwdHlfbWFzdGVyX2ZkIDwgMCAmJiB0b3NoZWxsX2ZkID49IDAKIAkJCQkJICAgICAgICYmIHRhX2J1Zlt0YV9sZW5dID09IEN0cmxfRCkKIAkJCSAgICB7CkBAIC0zNzk5LDEwICszOTUxLDEwIEBACiAJCQkgICAgfQogCQkJICAgIGVsc2UgaWYgKHRhX2J1ZltpXSA9PSAnXHInKQogCQkJCXRhX2J1ZltpXSA9ICdcbic7Ci0jICBpZmRlZiBGRUFUX01CWVRFCisjIGlmZGVmIEZFQVRfTUJZVEUKIAkJCSAgICBpZiAoaGFzX21ieXRlKQogCQkJCWkgKz0gKCptYl9wdHIybGVuX2NoZWNrKSh0YV9idWYgKyBpKSAtIDE7Ci0jICBlbmRpZgorIyBlbmRpZgogCQkJfQogCiAJCQkvKgpAQCAtMzgxNSw3ICszOTY3LDcgQEAKIAkJCSAgICB7CiAJCQkJaWYgKHRhX2J1ZltpXSA9PSAnXG4nIHx8IHRhX2J1ZltpXSA9PSAnXGInKQogCQkJCSAgICBtc2dfcHV0Y2hhcih0YV9idWZbaV0pOwotIyAgaWZkZWYgRkVBVF9NQllURQorIyBpZmRlZiBGRUFUX01CWVRFCiAJCQkJZWxzZSBpZiAoaGFzX21ieXRlKQogCQkJCXsKIAkJCQkgICAgaW50IGwgPSAoKm1iX3B0cjJsZW5fY2hlY2spKHRhX2J1ZiArIGkpOwpAQCAtMzgyMyw3ICszOTc1LDcgQEAKIAkJCQkgICAgbXNnX291dHRyYW5zX2xlbih0YV9idWYgKyBpLCBsKTsKIAkJCQkgICAgaSArPSBsIC0gMTsKIAkJCQl9Ci0jICBlbmRpZgorIyBlbmRpZgogCQkJCWVsc2UKIAkJCQkgICAgbXNnX291dHRyYW5zX2xlbih0YV9idWYgKyBpLCAxKTsKIAkJCSAgICB9CkBAIC0zODM3LDE4ICszOTg5LDM3IEBACiAJCQkgKiBXcml0ZSB0aGUgY2hhcmFjdGVycyB0byB0aGUgY2hpbGQsIHVubGVzcyBFT0YgaGFzCiAJCQkgKiBiZWVuIHR5cGVkIGZvciBwaXBlcy4gIFdyaXRlIG9uZSBjaGFyYWN0ZXIgYXQgYQogCQkJICogdGltZSwgdG8gYXZvaWQgbG9vc2luZyB0b28gbXVjaCB0eXBlYWhlYWQuCisJCQkgKiBXaGVuIHdyaXRpbmcgYnVmZmVyIGxpbmVzLCBkcm9wIHRoZSB0eXBlZAorCQkJICogY2hhcmFjdGVycyAob25seSBjaGVjayBmb3IgQ1RSTC1DKS4KIAkJCSAqLwotCQkJaWYgKHRvc2hlbGxfZmQgPj0gMCkKKwkJCWlmIChvcHRpb25zICYgU0hFTExfV1JJVEUpCisJCQkgICAgdGFfbGVuID0gMDsKKwkJCWVsc2UgaWYgKHRvc2hlbGxfZmQgPj0gMCkKIAkJCXsKIAkJCSAgICBsZW4gPSB3cml0ZSh0b3NoZWxsX2ZkLCAoY2hhciAqKXRhX2J1ZiwgKHNpemVfdCkxKTsKIAkJCSAgICBpZiAobGVuID4gMCkKIAkJCSAgICB7CiAJCQkJdGFfbGVuIC09IGxlbjsKIAkJCQltY2hfbWVtbW92ZSh0YV9idWYsIHRhX2J1ZiArIGxlbiwgdGFfbGVuKTsKKwkJCQlub3JlYWRfY250ID0gMDsKIAkJCSAgICB9CiAJCQl9CiAJCSAgICB9CiAKKwkJICAgIGlmIChnb3RfaW50KQorCQkgICAgeworCQkJLyogQ1RSTC1DIHNlbmRzIGEgc2lnbmFsIHRvIHRoZSBjaGlsZCwgd2UgaWdub3JlIGl0CisJCQkgKiBvdXJzZWx2ZXMgKi8KKyMgIGlmZGVmIEhBVkVfU0VUU0lECisJCQlraWxsKC1waWQsIFNJR0lOVCk7CisjICBlbHNlCisJCQlraWxsKDAsIFNJR0lOVCk7CisjICBlbmRpZgorCQkJaWYgKHdwaWQgPiAwKQorCQkJICAgIGtpbGwod3BpZCwgU0lHSU5UKTsKKwkJCWdvdF9pbnQgPSBGQUxTRTsKKwkJICAgIH0KKwogCQkgICAgLyoKIAkJICAgICAqIENoZWNrIGlmIHRoZSBjaGlsZCBoYXMgYW55IGNoYXJhY3RlcnMgdG8gYmUgcHJpbnRlZC4KIAkJICAgICAqIFJlYWQgdGhlbSBhbmQgd3JpdGUgdGhlbSB0byBvdXIgd2luZG93LglSZXBlYXQgdGhpcyBhcwpAQCAtMzg1OCwyNCArNDAyOSw0MiBAQAogCQkgICAgICogVE9ETzogVGhpcyBzaG91bGQgaGFuZGxlIGVzY2FwZSBzZXF1ZW5jZXMsIGNvbXBhdGlibGUKIAkJICAgICAqIHRvIHNvbWUgdGVybWluYWwgKHZ0NTI/KS4KIAkJICAgICAqLworCQkgICAgKytub3JlYWRfY250OwogCQkgICAgd2hpbGUgKFJlYWxXYWl0Rm9yQ2hhcihmcm9tc2hlbGxfZmQsIDEwTCwgTlVMTCkpCiAJCSAgICB7CiAJCQlsZW4gPSByZWFkKGZyb21zaGVsbF9mZCwgKGNoYXIgKilidWZmZXIKLSMgIGlmZGVmIEZFQVRfTUJZVEUKKyMgaWZkZWYgRkVBVF9NQllURQogCQkJCSsgYnVmZmVyX29mZiwgKHNpemVfdCkoQlVGTEVOIC0gYnVmZmVyX29mZikKLSMgIGVsc2UKKyMgZWxzZQogCQkJCSwgKHNpemVfdClCVUZMRU4KLSMgIGVuZGlmCisjIGVuZGlmCiAJCQkJKTsKIAkJCWlmIChsZW4gPD0gMCkJCSAgICAvKiBlbmQgb2YgZmlsZSBvciBlcnJvciAqLwogCQkJICAgIGdvdG8gZmluaXNoZWQ7Ci0jICBpZmRlZiBGRUFUX01CWVRFCi0JCQlsZW4gKz0gYnVmZmVyX29mZjsKLQkJCWJ1ZmZlcltsZW5dID0gTlVMOwotCQkJaWYgKGhhc19tYnl0ZSkKKworCQkJbm9yZWFkX2NudCA9IDA7CisJCQlpZiAob3B0aW9ucyAmIFNIRUxMX1JFQUQpCisJCQl7CisJCQkgICAgLyogRG8gTlVMIC0+IE5MIHRyYW5zbGF0aW9uLCBhcHBlbmQgTkwgc2VwYXJhdGVkCisJCQkgICAgICogbGluZXMgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLiAqLworCQkJICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKwkJCSAgICB7CisJCQkJaWYgKGJ1ZmZlcltpXSA9PSBOTCkKKwkJCQkgICAgYXBwZW5kX2dhX2xpbmUoJmdhKTsKKwkJCQllbHNlIGlmIChidWZmZXJbaV0gPT0gTlVMKQorCQkJCSAgICBnYV9hcHBlbmQoJmdhLCBOTCk7CisJCQkJZWxzZQorCQkJCSAgICBnYV9hcHBlbmQoJmdhLCBidWZmZXJbaV0pOworCQkJICAgIH0KKwkJCX0KKyMgaWZkZWYgRkVBVF9NQllURQorCQkJZWxzZSBpZiAoaGFzX21ieXRlKQogCQkJewogCQkJICAgIGludAkJbDsKIAorCQkJICAgIGxlbiArPSBidWZmZXJfb2ZmOworCQkJICAgIGJ1ZmZlcltsZW5dID0gTlVMOworCiAJCQkgICAgLyogQ2hlY2sgaWYgdGhlIGxhc3QgY2hhcmFjdGVyIGluIGJ1ZmZlcltdIGlzCiAJCQkgICAgICogaW5jb21wbGV0ZSwga2VlcCB0aGVzZSBieXRlcyBmb3IgdGhlIG5leHQKIAkJCSAgICAgKiByb3VuZC4gKi8KQEAgLTM5MTMsOCArNDEwMiw4IEBACiAJCQkgICAgfQogCQkJICAgIGJ1ZmZlcl9vZmYgPSAwOwogCQkJfQorIyBlbmRpZiAvKiBGRUFUX01CWVRFICovCiAJCQllbHNlCi0jICBlbmRpZiAvKiBGRUFUX01CWVRFICovCiAJCQl7CiAJCQkgICAgYnVmZmVyW2xlbl0gPSBOVUw7CiAJCQkgICAgbXNnX3B1dHMoYnVmZmVyKTsKQEAgLTM5MzEsMTEgKzQxMjAsMTEgQEAKIAkJICAgICAqIENoZWNrIGlmIHRoZSBjaGlsZCBzdGlsbCBleGlzdHMsIGJlZm9yZSBjaGVja2luZyBmb3IKIAkJICAgICAqIHR5cGVkIGNoYXJhY3RlcnMgKG90aGVyd2lzZSB3ZSB3b3VsZCBsb29zZSB0eXBlYWhlYWQpLgogCQkgICAgICovCi0jICBpZmRlZiBfX05lWFRfXworIyBpZmRlZiBfX05lWFRfXwogCQkgICAgd2FpdF9waWQgPSB3YWl0NChwaWQsICZzdGF0dXMsIFdOT0hBTkcsIChzdHJ1Y3QgcnVzYWdlICopIDApOwotIyAgZWxzZQorIyBlbHNlCiAJCSAgICB3YWl0X3BpZCA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCBXTk9IQU5HKTsKLSMgIGVuZGlmCisjIGVuZGlmCiAJCSAgICBpZiAoKHdhaXRfcGlkID09IChwaWRfdCktMSAmJiBlcnJubyA9PSBFQ0hJTEQpCiAJCQkgICAgfHwgKHdhaXRfcGlkID09IHBpZCAmJiBXSUZFWElURUQoc3RhdHVzKSkpCiAJCSAgICB7CkBAIC0zOTQ2LDIwICs0MTM1LDI5IEBACiAJCX0KIGZpbmlzaGVkOgogCQlwX21vcmUgPSBwX21vcmVfc2F2ZTsKKwkJaWYgKG9wdGlvbnMgJiBTSEVMTF9SRUFEKQorCQl7CisJCSAgICBpZiAoZ2EuZ2FfbGVuID4gMCkKKwkJICAgIHsKKwkJCWFwcGVuZF9nYV9saW5lKCZnYSk7CisJCQkvKiByZW1lbWJlciB0aGF0IHRoZSBOTCB3YXMgbWlzc2luZyAqLworCQkJd3JpdGVfbm9fZW9sX2xudW0gPSBjdXJ3aW4tPndfY3Vyc29yLmxudW07CisJCSAgICB9CisJCSAgICBlbHNlCisJCQl3cml0ZV9ub19lb2xfbG51bSA9IDA7CisJCSAgICBnYV9jbGVhcigmZ2EpOworCQl9CiAKLSMgIGlmbmRlZiBNQUNPU19YX1VOSVggLyogVE9ETzogSXMgaXQgbmVlZGVkIGZvciBNQUNPU19YID8gKi8KIAkJLyoKIAkJICogR2l2ZSBhbGwgdHlwZWFoZWFkIHRoYXQgd2Fzbid0IHVzZWQgYmFjayB0byB1aV9pbmNoYXIoKS4KIAkJICovCiAJCWlmICh0YV9sZW4pCiAJCSAgICB1aV9pbmNoYXJfdW5kbyh0YV9idWYsIHRhX2xlbik7Ci0jICBlbmRpZgogCQlTdGF0ZSA9IG9sZF9TdGF0ZTsKIAkJaWYgKHRvc2hlbGxfZmQgPj0gMCkKIAkJICAgIGNsb3NlKHRvc2hlbGxfZmQpOwogCQljbG9zZShmcm9tc2hlbGxfZmQpOwogCSAgICB9Ci0jIGVuZGlmIC8qIEZFQVRfR1VJICovCiAKIAkgICAgLyoKIAkgICAgICogV2FpdCB1bnRpbCBvdXIgY2hpbGQgaGFzIGV4aXRlZC4KQEAgLTM5NzAsNyArNDE2OCw3IEBACiAJICAgICAqLwogCSAgICB3aGlsZSAod2FpdF9waWQgIT0gcGlkKQogCSAgICB7Ci0jaWZkZWYgX1RIUkVBRF9TQUZFCisjIGlmZGVmIF9USFJFQURfU0FGRQogCQkvKiBVZ2x5IGhhY2s6IHdoZW4gY29tcGlsZWQgd2l0aCBQeXRob24gdGhyZWFkcyBhcmUgcHJvYmFibHkKIAkJICogdXNlZCwgaW4gd2hpY2ggY2FzZSB3YWl0KCkgc29tZXRpbWVzIGhhbmdzIGZvciBubyBvYnZpb3VzCiAJCSAqIHJlYXNvbi4gIFVzZSB3YWl0cGlkKCkgaW5zdGVhZCBhbmQgbG9vcCAobGlrZSB0aGUgR1VJKS4gKi8KQEAgLTM5ODUsOSArNDE4Myw5IEBACiAJCSAgICBtY2hfZGVsYXkoMTBMLCBUUlVFKTsKIAkJICAgIGNvbnRpbnVlOwogCQl9Ci0jZWxzZQorIyBlbHNlCiAJCXdhaXRfcGlkID0gd2FpdCgmc3RhdHVzKTsKLSNlbmRpZgorIyBlbmRpZgogCQlpZiAod2FpdF9waWQgPD0gMAogIyBpZmRlZiBFQ0hJTEQKIAkJCSYmIGVycm5vID09IEVDSElMRApAQCAtMzk5Niw2ICs0MTk0LDExIEBACiAJCSAgICBicmVhazsKIAkgICAgfQogCisJICAgIC8qIE1ha2Ugc3VyZSB0aGUgY2hpbGQgdGhhdCB3cml0ZXMgdG8gdGhlIGV4dGVybmFsIHByb2dyYW0gaXMKKwkgICAgICogZGVhZC4gKi8KKwkgICAgaWYgKHdwaWQgPiAwKQorCQlraWxsKHdwaWQsIFNJR0tJTEwpOworCiAJICAgIC8qCiAJICAgICAqIFNldCB0byByYXcgbW9kZSByaWdodCBub3csIG90aGVyd2lzZSBhIENUUkwtQyBhZnRlcgogCSAgICAgKiBjYXRjaF9zaWduYWxzKCkgd2lsbCBraWxsIFZpbS4KQEAgLTQ2NTYsNyArNDg1OSwxOSBAQAogCQkgICAgaWYgKCpwYXRoX2VuZCAhPSBOVUwpCiAJCQliYWNrc2xhc2hfaGFsdmUoYnVmICsgbGVuICsgMSk7CiAJCSAgICBpZiAobWNoX2dldHBlcm0oYnVmKSA+PSAwKQkvKiBhZGQgZXhpc3RpbmcgZmlsZSAqLworCQkgICAgeworI2lmIGRlZmluZWQoTUFDT1NfWCkgJiYgZGVmaW5lZChGRUFUX01CWVRFKQorCQkJc2l6ZV90IHByZWNvbXBfbGVuID0gU1RSTEVOKGJ1ZikrMTsKKwkJCWNoYXJfdSAqcHJlY29tcF9idWYgPQorCQkJICAgIG1hY19wcmVjb21wb3NlX3BhdGgoYnVmLCBwcmVjb21wX2xlbiwgJnByZWNvbXBfbGVuKTsKKwkJCWlmIChwcmVjb21wX2J1ZikKKwkJCXsKKwkJCSAgICBtY2hfbWVtbW92ZShidWYsIHByZWNvbXBfYnVmLCBwcmVjb21wX2xlbik7CisJCQkgICAgdmltX2ZyZWUocHJlY29tcF9idWYpOworCQkJfQorI2VuZGlmCiAJCQlhZGRmaWxlKGdhcCwgYnVmLCBmbGFncyk7CisJCSAgICB9CiAJCX0KIAkgICAgfQogCX0KZGlmZiAtLWdpdCBhL3NyYy9wby9NYWtlX21pbmcubWFrIGIvc3JjL3BvL01ha2VfbWluZy5tYWsKaW5kZXggODEwZWZiMC4uZGI0MjcyMCAxMDA2NDQKLS0tIGEvc3JjL3BvL01ha2VfbWluZy5tYWsKKysrIGIvc3JjL3BvL01ha2VfbWluZy5tYWsKQEAgLTEwLDkgKzEwLDkgQEAKICMgbGFuZ3VhZ2UgKHh4KSBhbmQgYWRkIGl0IHRvIHRoZSBuZXh0IHRocmVlIGxpbmVzLgogIwogCi1MQU5HVUFHRVMgPQlhZiBjYSBjcyBkZSBlbl9HQiBlcyBmciBpdCBqYSBrbyBubyBwbCBydSBzayBzdiB1ayB6aF9UVyBcCitMQU5HVUFHRVMgPQlhZiBjYSBjcyBkZSBlbl9HQiBlcyBmciBnYSBpdCBqYSBrbyBubyBwbCBydSBzayBzdiB1ayB6aF9UVyBcCiAJCXpoX1RXLlVURi04IHpoX0NOIHpoX0NOLlVURi04Ci1NT0ZJTEVTID0JYWYubW8gY2EubW8gY3MubW8gZGUubW8gZW5fR0IubW8gZXMubW8gZnIubW8gaXQubW8gamEubW8gXAorTU9GSUxFUyA9CWFmLm1vIGNhLm1vIGNzLm1vIGRlLm1vIGVuX0dCLm1vIGVzLm1vIGZyLm1vIGdhLm1vIGl0Lm1vIGphLm1vIFwKIAkJa28ubW8gbm8ubW8gcGwubW8gcnUubW8gc2subW8gc3YubW8gdWsubW8gXAogCQl6aF9UVy5tbyB6aF9UVy5VVEYtOC5tbyB6aF9DTi5tbyB6aF9DTi5VVEYtOC5tbwogCmRpZmYgLS1naXQgYS9zcmMvcG8vTWFrZWZpbGUgYi9zcmMvcG8vTWFrZWZpbGUKaW5kZXggYzcxZGY4ZC4uZGM5NGVmZCAxMDA2NDQKLS0tIGEvc3JjL3BvL01ha2VmaWxlCisrKyBiL3NyYy9wby9NYWtlZmlsZQpAQCAtNCw5ICs0LDkgQEAKICMgTm90ZTogamEuc2ppcywgKi5jcDEyNTAgYW5kIHpoX0NOLmNwOTM2IGFyZSBvbmx5IGZvciBNUy1XaW5kb3dzLCB0aGV5IGFyZQogIyBub3QgaW5zdGFsbGVkIG9uIFVuaXgKIAotTEFOR1VBR0VTID0JYWYgY2EgY3MgZGUgZW5fR0IgZXMgZnIgaXQgamEga28gbm8gcGwgcnUgc2sgc3YgdWsgemhfVFcgXAorTEFOR1VBR0VTID0JYWYgY2EgY3MgZGUgZW5fR0IgZXMgZnIgZ2EgaXQgamEga28gbm8gcGwgcnUgc2sgc3YgdWsgemhfVFcgXAogCQl6aF9UVy5VVEYtOCB6aF9DTiB6aF9DTi5VVEYtOAotTU9GSUxFUyA9CWFmLm1vIGNhLm1vIGNzLm1vIGRlLm1vIGVuX0dCLm1vIGVzLm1vIGZyLm1vIGl0Lm1vIGphLm1vIFwKK01PRklMRVMgPQlhZi5tbyBjYS5tbyBjcy5tbyBkZS5tbyBlbl9HQi5tbyBlcy5tbyBmci5tbyBnYS5tbyBpdC5tbyBqYS5tbyBcCiAJCWtvLm1vIG5vLm1vIHBsLm1vIHJ1Lm1vIHNrLm1vIHN2Lm1vIHVrLm1vIFwKIAkJemhfVFcubW8gemhfVFcuVVRGLTgubW8gemhfQ04ubW8gemhfQ04uVVRGLTgubW8KIApkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2V4X2RvY21kLnBybyBiL3NyYy9wcm90by9leF9kb2NtZC5wcm8KaW5kZXggMGE4YjVkMy4uOWEwZmQyYiAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL2V4X2RvY21kLnBybworKysgYi9zcmMvcHJvdG8vZXhfZG9jbWQucHJvCkBAIC0zMyw2ICszMyw3IEBACiB2b2lkIGV4X3NwbGl0dmlldyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogdm9pZCBkb19leGVkaXQgX19BUkdTKChleGFyZ19UICplYXAsIHdpbl9UICpvbGRfY3Vyd2luKSk7CiB2b2lkIGRvX3NsZWVwIF9fQVJHUygobG9uZyBtc2VjKSk7CitpbnQgdmltX21rZGlyX2Vtc2cgX19BUkdTKChjaGFyX3UgKm5hbWUsIGludCBwcm90KSk7CiBGSUxFICpvcGVuX2V4ZmlsZSBfX0FSR1MoKGNoYXJfdSAqZm5hbWUsIGludCBmb3JjZWl0LCBjaGFyICptb2RlKSk7CiB2b2lkIHVwZGF0ZV90b3BsaW5lX2N1cnNvciBfX0FSR1MoKHZvaWQpKTsKIHZvaWQgZXhlY19ub3JtYWxfY21kIF9fQVJHUygoY2hhcl91ICpjbWQsIGludCByZW1hcCwgaW50IHNpbGVudCkpOwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2d1aV9tYWMucHJvIGIvc3JjL3Byb3RvL2d1aV9tYWMucHJvCmluZGV4IGI1YTQ2MzguLjlhMjk2ZmQgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90by9ndWlfbWFjLnBybworKysgYi9zcmMvcHJvdG8vZ3VpX21hYy5wcm8KQEAgLTM5LDYgKzM5LDcgQEAKIGludCBndWlfbWNoX2FkanVzdF9jaGFyc2l6ZSBfX0FSR1MoKHZvaWQpKTsKIGludCBndWlfbWNoX2luaXRfZm9udCBfX0FSR1MoKGNoYXJfdSAqZm9udF9uYW1lLCBpbnQgZm9udHNldCkpOwogR3VpRm9udCBndWlfbWNoX2dldF9mb250IF9fQVJHUygoY2hhcl91ICpuYW1lLCBpbnQgZ2l2ZUVycm9ySWZNaXNzaW5nKSk7CitjaGFyX3UgKmd1aV9tY2hfZ2V0X2ZvbnRuYW1lIF9fQVJHUygoR3VpRm9udCBmb250LCBjaGFyX3UgKm5hbWUpKTsKIEd1aUZvbnQgZ3VpX21hY19maW5kX2ZvbnQgX19BUkdTKChjaGFyX3UgKmZvbnRfbmFtZSkpOwogdm9pZCBndWlfbWNoX3NldF9mb250IF9fQVJHUygoR3VpRm9udCBmb250KSk7CiBpbnQgZ3VpX21jaF9zYW1lX2ZvbnQgX19BUkdTKChHdWlGb250IGYxLCBHdWlGb250IGYyKSk7CmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vbWFpbi5wcm8gYi9zcmMvcHJvdG8vbWFpbi5wcm8KaW5kZXggYmQ3NTE3NC4uMmVjY2U3OSAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL21haW4ucHJvCisrKyBiL3NyYy9wcm90by9tYWluLnBybwpAQCAtMSw1ICsxLDUgQEAKIC8qIG1haW4uYyAqLwotdm9pZCBtYWluX2xvb3AgX19BUkdTKChpbnQgY21kd2luKSk7Cit2b2lkIG1haW5fbG9vcCBfX0FSR1MoKGludCBjbWR3aW4sIGludCBub2V4bW9kZSkpOwogdm9pZCBnZXRvdXRfcHJlc2VydmVfbW9kaWZpZWQgX19BUkdTKChpbnQgZXhpdHZhbCkpOwogdm9pZCBnZXRvdXQgX19BUkdTKChpbnQgZXhpdHZhbCkpOwogaW50IHByb2Nlc3NfZW52IF9fQVJHUygoY2hhcl91ICplbnYsIGludCBpc192aW1pbml0KSk7CmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vbWVzc2FnZS5wcm8gYi9zcmMvcHJvdG8vbWVzc2FnZS5wcm8KaW5kZXggOTk1N2I3NS4uNjQ3YzhkMSAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL21lc3NhZ2UucHJvCisrKyBiL3NyYy9wcm90by9tZXNzYWdlLnBybwpAQCAtOSw2ICs5LDcgQEAKIGludCBlbXNnMiBfX0FSR1MoKGNoYXJfdSAqcywgY2hhcl91ICphMSkpOwogaW50IGVtc2czIF9fQVJHUygoY2hhcl91ICpzLCBjaGFyX3UgKmExLCBjaGFyX3UgKmEyKSk7CiBpbnQgZW1zZ24gX19BUkdTKChjaGFyX3UgKnMsIGxvbmcgbikpOwordm9pZCBlbXNnX2ludnJlZyBfX0FSR1MoKGludCBuYW1lKSk7CiBjaGFyX3UgKm1zZ190cnVuY19hdHRyIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgZm9yY2UsIGludCBhdHRyKSk7CiBjaGFyX3UgKm1zZ19tYXlfdHJ1bmMgX19BUkdTKChpbnQgZm9yY2UsIGNoYXJfdSAqcykpOwogdm9pZCBleF9tZXNzYWdlcyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwpAQCAtMzEsNyArMzIsNyBAQAogaW50IG1zZ19vdXR0cmFuc19zcGVjaWFsIF9fQVJHUygoY2hhcl91ICpzdHJzdGFydCwgaW50IGZyb20pKTsKIGNoYXJfdSAqc3RyMnNwZWNpYWwgX19BUkdTKChjaGFyX3UgKipzcCwgaW50IGZyb20pKTsKIHZvaWQgc3RyMnNwZWNpYWxidWYgX19BUkdTKChjaGFyX3UgKnNwLCBjaGFyX3UgKmJ1ZiwgaW50IGxlbikpOwotdm9pZCBtc2dfcHJ0X2xpbmUgX19BUkdTKChjaGFyX3UgKnMpKTsKK3ZvaWQgbXNnX3BydF9saW5lIF9fQVJHUygoY2hhcl91ICpzLCBpbnQgbGlzdCkpOwogdm9pZCBtc2dfcHV0cyBfX0FSR1MoKGNoYXJfdSAqcykpOwogdm9pZCBtc2dfcHV0c190aXRsZSBfX0FSR1MoKGNoYXJfdSAqcykpOwogdm9pZCBtc2dfcHV0c19sb25nIF9fQVJHUygoY2hhcl91ICpsb25nc3RyKSk7CmRpZmYgLS1naXQgYS9zcmMvcXVpY2tmaXguYyBiL3NyYy9xdWlja2ZpeC5jCmluZGV4IGE4NTQ0YjMuLjA3OWU2YzkgMTAwNjQ0Ci0tLSBhL3NyYy9xdWlja2ZpeC5jCisrKyBiL3NyYy9xdWlja2ZpeC5jCkBAIC0xNDU2LDcgKzE0NTYsNyBAQAogCQlxZl9mbXRfdGV4dCgoZm5hbWUgIT0gTlVMTCB8fCBxZnAtPnFmX2xudW0gIT0gMCkKIAkJCQkgICAgID8gc2tpcHdoaXRlKHFmcC0+cWZfdGV4dCkgOiBxZnAtPnFmX3RleHQsCiAJCQkJCQkJICAgICAgSU9idWZmLCBJT1NJWkUpOwotCQltc2dfcHJ0X2xpbmUoSU9idWZmKTsKKwkJbXNnX3BydF9saW5lKElPYnVmZiwgRkFMU0UpOwogCQlvdXRfZmx1c2goKTsJCS8qIHNob3cgb25lIGxpbmUgYXQgYSB0aW1lICovCiAJCW5lZWRfcmV0dXJuID0gVFJVRTsKIAkJbGFzdF9wcmludGVkID0gaTsKQEAgLTIyNzksNyArMjI3OSw2IEBACiAgICAgZXhhcmdfVAkqZWFwOwogewogICAgIHJlZ21tYXRjaF9UCXJlZ21hdGNoOwotICAgIGNoYXJfdQkqc2F2ZV9jcG87CiAgICAgaW50CQlmY291bnQ7CiAgICAgY2hhcl91CSoqZm5hbWVzOwogICAgIGNoYXJfdQkqczsKQEAgLTIzMTcsMTAgKzIzMTYsNiBAQAogICAgIH0KICNlbmRpZgogCi0gICAgLyogTWFrZSAnY3BvcHRpb25zJyBlbXB0eSwgdGhlICdsJyBmbGFnIHNob3VsZCBub3QgYmUgdXNlZCBoZXJlLiAqLwotICAgIHNhdmVfY3BvID0gcF9jcG87Ci0gICAgcF9jcG8gPSBlbXB0eV9vcHRpb247Ci0KICAgICAvKiBHZXQgdGhlIHNlYXJjaCBwYXR0ZXJuOiBlaXRoZXIgd2hpdGUtc2VwYXJhdGVkIG9yIGVuY2xvc2VkIGluIC8vICovCiAgICAgcmVnbWF0Y2gucmVncHJvZyA9IE5VTEw7CiAgICAgcCA9IHNraXBfdmltZ3JlcF9wYXQoZWFwLT5hcmcsICZzKTsKQEAgLTI1NDUsMTIgKzI1NDAsNiBAQAogCiB0aGVlbmQ6CiAgICAgdmltX2ZyZWUocmVnbWF0Y2gucmVncHJvZyk7Ci0KLSAgICAvKiBPbmx5IHJlc3R1cmUgJ2Nwbycgd2hlbiBpdCB3YXNuJ3Qgc2V0IGluIHRoZSBtZWFuIHRpbWUuICovCi0gICAgaWYgKHBfY3BvID09IGVtcHR5X29wdGlvbikKLQlwX2NwbyA9IHNhdmVfY3BvOwotICAgIGVsc2UKLQlmcmVlX3N0cmluZ19vcHRpb24oc2F2ZV9jcG8pOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL3JlZ2V4cC5jIGIvc3JjL3JlZ2V4cC5jCmluZGV4IGE5OTE1YTMuLmM0Zjg5MjAgMTAwNjQ0Ci0tLSBhL3NyYy9yZWdleHAuYworKysgYi9zcmMvcmVnZXhwLmMKQEAgLTc0LDExICs3NCwxMiBAQAogICogKEhlcmUgd2UgaGF2ZSBvbmUgb2YgdGhlIHN1YnRsZSBzeW50YXggZGVwZW5kZW5jaWVzOglhbiBpbmRpdmlkdWFsIEJSQU5DSAogICogKGFzIG9wcG9zZWQgdG8gYSBjb2xsZWN0aW9uIG9mIHRoZW0pIGlzIG5ldmVyIGNvbmNhdGVuYXRlZCB3aXRoIGFueXRoaW5nCiAgKiBiZWNhdXNlIG9mIG9wZXJhdG9yIHByZWNlZGVuY2UpLiAgVGhlICJuZXh0IiBwb2ludGVyIG9mIGEgQlJBQ0VTX0NPTVBMRVgKLSAqIG5vZGUgcG9pbnRzIHRvIHRoZSBub2RlIGFmdGVyIHRoZSBzdHVmZiB0byBiZSByZXBlYXRlZC4gIFRoZSBvcGVyYW5kIG9mIHNvbWUKLSAqIHR5cGVzIG9mIG5vZGUgaXMgYSBsaXRlcmFsIHN0cmluZzsgZm9yIG90aGVycywgaXQgaXMgYSBub2RlIGxlYWRpbmcgaW50byBhCi0gKiBzdWItRlNNLiAgSW4gcGFydGljdWxhciwgdGhlIG9wZXJhbmQgb2YgYSBCUkFOQ0ggbm9kZSBpcyB0aGUgZmlyc3Qgbm9kZSBvZgotICogdGhlIGJyYW5jaC4JKE5CIHRoaXMgaXMgKm5vdCogYSB0cmVlIHN0cnVjdHVyZTogdGhlIHRhaWwgb2YgdGhlIGJyYW5jaAotICogY29ubmVjdHMgdG8gdGhlIHRoaW5nIGZvbGxvd2luZyB0aGUgc2V0IG9mIEJSQU5DSGVzLikKKyAqIG5vZGUgcG9pbnRzIHRvIHRoZSBub2RlIGFmdGVyIHRoZSBzdHVmZiB0byBiZSByZXBlYXRlZC4KKyAqIFRoZSBvcGVyYW5kIG9mIHNvbWUgdHlwZXMgb2Ygbm9kZSBpcyBhIGxpdGVyYWwgc3RyaW5nOyBmb3Igb3RoZXJzLCBpdCBpcyBhCisgKiBub2RlIGxlYWRpbmcgaW50byBhIHN1Yi1GU00uICBJbiBwYXJ0aWN1bGFyLCB0aGUgb3BlcmFuZCBvZiBhIEJSQU5DSCBub2RlCisgKiBpcyB0aGUgZmlyc3Qgbm9kZSBvZiB0aGUgYnJhbmNoLgorICogKE5CIHRoaXMgaXMgKm5vdCogYSB0cmVlIHN0cnVjdHVyZTogdGhlIHRhaWwgb2YgdGhlIGJyYW5jaCBjb25uZWN0cyB0byB0aGUKKyAqIHRoaW5nIGZvbGxvd2luZyB0aGUgc2V0IG9mIEJSQU5DSGVzLikKICAqCiAgKiBwYXR0ZXJuCWlzIGNvZGVkIGxpa2U6CiAgKgpAQCAtOTcsNiArOTgsMTQgQEAKICAqCQkgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgKgogICoKKyAqCQkgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgkJICAgICAgIFYJCSAgICAgIHwKKyAqIDxhYT5cKwlCUkFOQ0ggPGFhPiAtLT4gQlJBTkNIIC0tPiBCQUNLIEJSQU5DSCAtLT4gTk9USElORyAtLT4gRU5ECisgKgkJICAgICB8CSAgICAgICAgICAgICB8CSAgICAgICAgXgkJICAgICAgIF4KKyAqCQkgICAgIHwJICAgICAgICAgICAgICstLS0tLS0tLS0tKwkJICAgICAgIHwKKyAqCQkgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoKKyAqCiAgKgkJCQkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgKgkJCQkJVgkJCSAgfAogICogPGFhPlx7fQlCUkFOQ0ggQlJBQ0VfTElNSVRTIC0tPiBCUkFDRV9DT01QTEVYIDxhYT4gLS0+IEJBQ0sgIEVORApAQCAtMzg2LDcgKzM5NSwxMCBAQAogc3RhdGljIGNoYXJfdSBSRUdFWFBfQUJCUltdID0gIm5ydGViZG94dVUiOwogCiBzdGF0aWMgaW50CWJhY2tzbGFzaF90cmFucyBfX0FSR1MoKGludCBjKSk7Ci1zdGF0aWMgaW50CXNraXBfY2xhc3NfbmFtZSBfX0FSR1MoKGNoYXJfdSAqKnBwKSk7CitzdGF0aWMgaW50CWdldF9jaGFyX2NsYXNzIF9fQVJHUygoY2hhcl91ICoqcHApKTsKK3N0YXRpYyBpbnQJZ2V0X2VxdWlfY2xhc3MgX19BUkdTKChjaGFyX3UgKipwcCkpOworc3RhdGljIHZvaWQJcmVnX2VxdWlfY2xhc3MgX19BUkdTKChpbnQgYykpOworc3RhdGljIGludAlnZXRfY29sbF9lbGVtZW50IF9fQVJHUygoY2hhcl91ICoqcHApKTsKIHN0YXRpYyBjaGFyX3UJKnNraXBfYW55b2YgX19BUkdTKChjaGFyX3UgKnApKTsKIHN0YXRpYyB2b2lkCWluaXRfY2xhc3NfdGFiIF9fQVJHUygodm9pZCkpOwogCkBAIC00MDgsMTIgKzQyMCwxMiBAQAogfQogCiAvKgotICogQ2hlY2sgZm9yIGEgY2hhcmFjdGVyIGNsYXNzIG5hbWUuICAicHAiIHBvaW50cyB0byB0aGUgJ1snLgorICogQ2hlY2sgZm9yIGEgY2hhcmFjdGVyIGNsYXNzIG5hbWUgIls6bmFtZTpdIi4gICJwcCIgcG9pbnRzIHRvIHRoZSAnWycuCiAgKiBSZXR1cm5zIG9uZSBvZiB0aGUgQ0xBU1NfIGl0ZW1zLiBDTEFTU19OT05FIG1lYW5zIHRoYXQgbm8gaXRlbSB3YXMKICAqIHJlY29nbml6ZWQuICBPdGhlcndpc2UgInBwIiBpcyBhZHZhbmNlZCB0byBhZnRlciB0aGUgaXRlbS4KICAqLwogICAgIHN0YXRpYyBpbnQKLXNraXBfY2xhc3NfbmFtZShwcCkKK2dldF9jaGFyX2NsYXNzKHBwKQogICAgIGNoYXJfdQkqKnBwOwogewogICAgIHN0YXRpYyBjb25zdCBjaGFyICooY2xhc3NfbmFtZXNbXSkgPQpAQCAtNDY3LDU1ICs0NzksNiBAQAogfQogCiAvKgotICogU2tpcCBvdmVyIGEgIltdIiByYW5nZS4KLSAqICJwIiBtdXN0IHBvaW50IHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlICdbJy4KLSAqIFRoZSByZXR1cm5lZCBwb2ludGVyIGlzIG9uIHRoZSBtYXRjaGluZyAnXScsIG9yIHRoZSB0ZXJtaW5hdGluZyBOVUwuCi0gKi8KLSAgICBzdGF0aWMgY2hhcl91ICoKLXNraXBfYW55b2YocCkKLSAgICBjaGFyX3UJKnA7Ci17Ci0gICAgaW50CQljcG9fbGl0OwkvKiAnY3BvcHRpb25zJyBjb250YWlucyAnbCcgZmxhZyAqLwotI2lmZGVmIEZFQVRfTUJZVEUKLSAgICBpbnQJCWw7Ci0jZW5kaWYKLQotICAgIGNwb19saXQgPSAoIXJlZ19zeW4gJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0xJVEVSQUwpICE9IE5VTEwpOwotCi0gICAgaWYgKCpwID09ICdeJykJLyogQ29tcGxlbWVudCBvZiByYW5nZS4gKi8KLQkrK3A7Ci0gICAgaWYgKCpwID09ICddJyB8fCAqcCA9PSAnLScpCi0JKytwOwotICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnAgIT0gJ10nKQotICAgIHsKLSNpZmRlZiBGRUFUX01CWVRFCi0JaWYgKGhhc19tYnl0ZSAmJiAobCA9ICgqbWJfcHRyMmxlbl9jaGVjaykocCkpID4gMSkKLQkgICAgcCArPSBsOwotCWVsc2UKLSNlbmRpZgotCSAgICBpZiAoKnAgPT0gJy0nKQotCSAgICB7Ci0JCSsrcDsKLQkJaWYgKCpwICE9ICddJyAmJiAqcCAhPSBOVUwpCi0JCSAgICBtYl9wdHJfYWR2KHApOwotCSAgICB9Ci0JZWxzZSBpZiAoKnAgPT0gJ1xcJwotCQkmJiAodmltX3N0cmNocihSRUdFWFBfSU5SQU5HRSwgcFsxXSkgIT0gTlVMTAotCQkgICAgfHwgKCFjcG9fbGl0ICYmIHZpbV9zdHJjaHIoUkVHRVhQX0FCQlIsIHBbMV0pICE9IE5VTEwpKSkKLQkgICAgcCArPSAyOwotCWVsc2UgaWYgKCpwID09ICdbJykKLQl7Ci0JICAgIGlmIChza2lwX2NsYXNzX25hbWUoJnApID09IENMQVNTX05PTkUpCi0JCSsrcDsgLyogSXQgd2FzIG5vdCBhIGNsYXNzIG5hbWUgKi8KLQl9Ci0JZWxzZQotCSAgICArK3A7Ci0gICAgfQotCi0gICAgcmV0dXJuIHA7Ci19Ci0KLS8qCiAgKiBTcGVjaWZpYyB2ZXJzaW9uIG9mIGNoYXJhY3RlciBjbGFzcyBmdW5jdGlvbnMuCiAgKiBVc2luZyBhIHRhYmxlIHRvIGtlZXAgdGhpcyBmYXN0LgogICovCkBAIC02OTUsNiArNjU4LDggQEAKIHN0YXRpYyB2b2lkCXJlZ2MgX19BUkdTKChpbnQgYikpOwogI2lmZGVmIEZFQVRfTUJZVEUKIHN0YXRpYyB2b2lkCXJlZ21iYyBfX0FSR1MoKGludCBjKSk7CisjZWxzZQorIyBkZWZpbmUgcmVnbWJjKGMpIHJlZ2MoYykKICNlbmRpZgogc3RhdGljIHZvaWQJcmVnaW5zZXJ0IF9fQVJHUygoaW50LCBjaGFyX3UgKikpOwogc3RhdGljIHZvaWQJcmVnaW5zZXJ0X2xpbWl0cyBfX0FSR1MoKGludCwgbG9uZywgbG9uZywgY2hhcl91ICopKTsKQEAgLTcyNSw2ICs2OTAsMjEwIEBACiB9CiAKIC8qCisgKiBDaGVjayBmb3IgYW4gZXF1aXZhbGVuY2UgY2xhc3MgbmFtZSAiWz1hPV0iLiAgInBwIiBwb2ludHMgdG8gdGhlICdbJy4KKyAqIFJldHVybnMgYSBjaGFyYWN0ZXIgcmVwcmVzZW50aW5nIHRoZSBjbGFzcy4gWmVybyBtZWFucyB0aGF0IG5vIGl0ZW0gd2FzCisgKiByZWNvZ25pemVkLiAgT3RoZXJ3aXNlICJwcCIgaXMgYWR2YW5jZWQgdG8gYWZ0ZXIgdGhlIGl0ZW0uCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfZXF1aV9jbGFzcyhwcCkKKyAgICBjaGFyX3UJKipwcDsKK3sKKyAgICBpbnQJCWM7CisgICAgaW50CQlsID0gMTsKKyAgICBjaGFyX3UJKnAgPSAqcHA7CisKKyAgICBpZiAocFsxXSA9PSAnPScpCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlKQorCSAgICBsID0gbWJfcHRyMmxlbl9jaGVjayhwICsgMik7CisjZW5kaWYKKwlpZiAocFtsICsgMl0gPT0gJz0nICYmIHBbbCArIDNdID09ICddJykKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCQljID0gbWJfcHRyMmNoYXIocCArIDIpOworCSAgICBlbHNlCisjZW5kaWYKKwkJYyA9IHBbMl07CisJICAgICpwcCArPSBsICsgNDsKKwkgICAgcmV0dXJuIGM7CisJfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIFByb2R1Y2UgdGhlIGJ5dGVzIGZvciBlcXVpdmFsZW5jZSBjbGFzcyAiYyIuCisgKiBDdXJyZW50bHkgb25seSBoYW5kbGVzIGxhdGluMSwgbGF0aW45IGFuZCB1dGYtOC4KKyAqLworICAgIHN0YXRpYyB2b2lkCityZWdfZXF1aV9jbGFzcyhjKQorICAgIGludAkgICAgYzsKK3sKKyNpZmRlZiBGRUFUX01CWVRFCisgICAgaWYgKGVuY191dGY4IHx8IFNUUkNNUChwX2VuYywgImxhdGluMSIpID09IDAKKwkJCQkJICAgICAgfHwgU1RSQ01QKHBfZW5jLCAibGF0aW45IikgPT0gMCkKKyNlbmRpZgorICAgIHsKKwlzd2l0Y2ggKGMpCisJeworCSAgICBjYXNlICdBJzogY2FzZSAnwCc6IGNhc2UgJ8EnOiBjYXNlICfCJzoKKwkgICAgY2FzZSAnwyc6IGNhc2UgJ8QnOiBjYXNlICfFJzoKKwkJICAgICAgcmVnbWJjKCdBJyk7IHJlZ21iYygnwCcpOyByZWdtYmMoJ8EnKTsgcmVnbWJjKCfCJyk7CisJCSAgICAgIHJlZ21iYygnwycpOyByZWdtYmMoJ8QnKTsgcmVnbWJjKCfFJyk7CisJCSAgICAgIHJldHVybjsKKwkgICAgY2FzZSAnQyc6IGNhc2UgJ8cnOgorCQkgICAgICByZWdtYmMoJ0MnKTsgcmVnbWJjKCfHJyk7CisJCSAgICAgIHJldHVybjsKKwkgICAgY2FzZSAnRSc6IGNhc2UgJ8gnOiBjYXNlICfJJzogY2FzZSAnyic6IGNhc2UgJ8snOgorCQkgICAgICByZWdtYmMoJ0UnKTsgcmVnbWJjKCfIJyk7IHJlZ21iYygnyScpOyByZWdtYmMoJ8onKTsKKwkJICAgICAgcmVnbWJjKCfLJyk7CisJCSAgICAgIHJldHVybjsKKwkgICAgY2FzZSAnSSc6IGNhc2UgJ8wnOiBjYXNlICfNJzogY2FzZSAnzic6IGNhc2UgJ88nOgorCQkgICAgICByZWdtYmMoJ0knKTsgcmVnbWJjKCfMJyk7IHJlZ21iYygnzScpOyByZWdtYmMoJ84nKTsKKwkJICAgICAgcmVnbWJjKCfPJyk7CisJCSAgICAgIHJldHVybjsKKwkgICAgY2FzZSAnTic6IGNhc2UgJ9EnOgorCQkgICAgICByZWdtYmMoJ04nKTsgcmVnbWJjKCfRJyk7CisJCSAgICAgIHJldHVybjsKKwkgICAgY2FzZSAnTyc6IGNhc2UgJ9InOiBjYXNlICfTJzogY2FzZSAn1Cc6IGNhc2UgJ9UnOiBjYXNlICfWJzoKKwkJICAgICAgcmVnbWJjKCdPJyk7IHJlZ21iYygn0icpOyByZWdtYmMoJ9MnKTsgcmVnbWJjKCfUJyk7CisJCSAgICAgIHJlZ21iYygn1ScpOyByZWdtYmMoJ9YnKTsKKwkJICAgICAgcmV0dXJuOworCSAgICBjYXNlICdVJzogY2FzZSAn2Sc6IGNhc2UgJ9onOiBjYXNlICfbJzogY2FzZSAn3Cc6CisJCSAgICAgIHJlZ21iYygnVScpOyByZWdtYmMoJ9knKTsgcmVnbWJjKCfaJyk7IHJlZ21iYygn2ycpOworCQkgICAgICByZWdtYmMoJ9wnKTsKKwkJICAgICAgcmV0dXJuOworCSAgICBjYXNlICdZJzogY2FzZSAn3Sc6CisJCSAgICAgIHJlZ21iYygnWScpOyByZWdtYmMoJ90nKTsKKwkJICAgICAgcmV0dXJuOworCSAgICBjYXNlICdhJzogY2FzZSAn4Cc6IGNhc2UgJ+EnOiBjYXNlICfiJzoKKwkgICAgY2FzZSAn4yc6IGNhc2UgJ+QnOiBjYXNlICflJzoKKwkJICAgICAgcmVnbWJjKCdhJyk7IHJlZ21iYygn4CcpOyByZWdtYmMoJ+EnKTsgcmVnbWJjKCfiJyk7CisJCSAgICAgIHJlZ21iYygn4ycpOyByZWdtYmMoJ+QnKTsgcmVnbWJjKCflJyk7CisJCSAgICAgIHJldHVybjsKKwkgICAgY2FzZSAnYyc6IGNhc2UgJ+cnOgorCQkgICAgICByZWdtYmMoJ2MnKTsgcmVnbWJjKCfnJyk7CisJCSAgICAgIHJldHVybjsKKwkgICAgY2FzZSAnZSc6IGNhc2UgJ+gnOiBjYXNlICfpJzogY2FzZSAn6ic6IGNhc2UgJ+snOgorCQkgICAgICByZWdtYmMoJ2UnKTsgcmVnbWJjKCfoJyk7IHJlZ21iYygn6ScpOyByZWdtYmMoJ+onKTsKKwkJICAgICAgcmVnbWJjKCfrJyk7CisJCSAgICAgIHJldHVybjsKKwkgICAgY2FzZSAnaSc6IGNhc2UgJ+wnOiBjYXNlICftJzogY2FzZSAn7ic6IGNhc2UgJ+8nOgorCQkgICAgICByZWdtYmMoJ2knKTsgcmVnbWJjKCfsJyk7IHJlZ21iYygn7ScpOyByZWdtYmMoJ+4nKTsKKwkJICAgICAgcmVnbWJjKCfvJyk7CisJCSAgICAgIHJldHVybjsKKwkgICAgY2FzZSAnbic6IGNhc2UgJ/EnOgorCQkgICAgICByZWdtYmMoJ24nKTsgcmVnbWJjKCfxJyk7CisJCSAgICAgIHJldHVybjsKKwkgICAgY2FzZSAnbyc6IGNhc2UgJ/InOiBjYXNlICfzJzogY2FzZSAn9Cc6IGNhc2UgJ/UnOiBjYXNlICf2JzoKKwkJICAgICAgcmVnbWJjKCdvJyk7IHJlZ21iYygn8icpOyByZWdtYmMoJ/MnKTsgcmVnbWJjKCf0Jyk7CisJCSAgICAgIHJlZ21iYygn9ScpOyByZWdtYmMoJ/YnKTsKKwkJICAgICAgcmV0dXJuOworCSAgICBjYXNlICd1JzogY2FzZSAn+Sc6IGNhc2UgJ/onOiBjYXNlICf7JzogY2FzZSAn/Cc6CisJCSAgICAgIHJlZ21iYygndScpOyByZWdtYmMoJ/knKTsgcmVnbWJjKCf6Jyk7IHJlZ21iYygn+ycpOworCQkgICAgICByZWdtYmMoJ/wnKTsKKwkJICAgICAgcmV0dXJuOworCSAgICBjYXNlICd5JzogY2FzZSAn/Sc6IGNhc2UgJ/8nOgorCQkgICAgICByZWdtYmMoJ3knKTsgcmVnbWJjKCf9Jyk7IHJlZ21iYygn/ycpOworCQkgICAgICByZXR1cm47CisJfQorICAgIH0KKyAgICByZWdtYmMoYyk7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgYSBjb2xsYXRpbmcgZWxlbWVudCAiWy5hLl0iLiAgInBwIiBwb2ludHMgdG8gdGhlICdbJy4KKyAqIFJldHVybnMgYSBjaGFyYWN0ZXIuIFplcm8gbWVhbnMgdGhhdCBubyBpdGVtIHdhcyByZWNvZ25pemVkLiAgT3RoZXJ3aXNlCisgKiAicHAiIGlzIGFkdmFuY2VkIHRvIGFmdGVyIHRoZSBpdGVtLgorICogQ3VycmVudGx5IG9ubHkgc2luZ2xlIGNoYXJhY3RlcnMgYXJlIHJlY29nbml6ZWQhCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRfY29sbF9lbGVtZW50KHBwKQorICAgIGNoYXJfdQkqKnBwOworeworICAgIGludAkJYzsKKyAgICBpbnQJCWwgPSAxOworICAgIGNoYXJfdQkqcCA9ICpwcDsKKworICAgIGlmIChwWzFdID09ICcuJykKKyAgICB7CisjaWZkZWYgRkVBVF9NQllURQorCWlmIChoYXNfbWJ5dGUpCisJICAgIGwgPSBtYl9wdHIybGVuX2NoZWNrKHAgKyAyKTsKKyNlbmRpZgorCWlmIChwW2wgKyAyXSA9PSAnLicgJiYgcFtsICsgM10gPT0gJ10nKQorCXsKKyNpZmRlZiBGRUFUX01CWVRFCisJICAgIGlmIChoYXNfbWJ5dGUpCisJCWMgPSBtYl9wdHIyY2hhcihwICsgMik7CisJICAgIGVsc2UKKyNlbmRpZgorCQljID0gcFsyXTsKKwkgICAgKnBwICs9IGwgKyA0OworCSAgICByZXR1cm4gYzsKKwl9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKKy8qCisgKiBTa2lwIG92ZXIgYSAiW10iIHJhbmdlLgorICogInAiIG11c3QgcG9pbnQgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgJ1snLgorICogVGhlIHJldHVybmVkIHBvaW50ZXIgaXMgb24gdGhlIG1hdGNoaW5nICddJywgb3IgdGhlIHRlcm1pbmF0aW5nIE5VTC4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgorc2tpcF9hbnlvZihwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICBpbnQJCWNwb19saXQ7CS8qICdjcG9wdGlvbnMnIGNvbnRhaW5zICdsJyBmbGFnICovCisgICAgaW50CQljcG9fYnNsOwkvKiAnY3BvcHRpb25zJyBjb250YWlucyAnXCcgZmxhZyAqLworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpbnQJCWw7CisjZW5kaWYKKworICAgIGNwb19saXQgPSAoIXJlZ19zeW4gJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0xJVEVSQUwpICE9IE5VTEwpOworICAgIGNwb19ic2wgPSAoIXJlZ19zeW4gJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0JBQ0tTTCkgIT0gTlVMTCk7CisKKyAgICBpZiAoKnAgPT0gJ14nKQkvKiBDb21wbGVtZW50IG9mIHJhbmdlLiAqLworCSsrcDsKKyAgICBpZiAoKnAgPT0gJ10nIHx8ICpwID09ICctJykKKwkrK3A7CisgICAgd2hpbGUgKCpwICE9IE5VTCAmJiAqcCAhPSAnXScpCisgICAgeworI2lmZGVmIEZFQVRfTUJZVEUKKwlpZiAoaGFzX21ieXRlICYmIChsID0gKCptYl9wdHIybGVuX2NoZWNrKShwKSkgPiAxKQorCSAgICBwICs9IGw7CisJZWxzZQorI2VuZGlmCisJICAgIGlmICgqcCA9PSAnLScpCisJICAgIHsKKwkJKytwOworCQlpZiAoKnAgIT0gJ10nICYmICpwICE9IE5VTCkKKwkJICAgIG1iX3B0cl9hZHYocCk7CisJICAgIH0KKwllbHNlIGlmICgqcCA9PSAnXFwnCisJCSYmICFjcG9fYnNsCisJCSYmICh2aW1fc3RyY2hyKFJFR0VYUF9JTlJBTkdFLCBwWzFdKSAhPSBOVUxMCisJCSAgICB8fCAoIWNwb19saXQgJiYgdmltX3N0cmNocihSRUdFWFBfQUJCUiwgcFsxXSkgIT0gTlVMTCkpKQorCSAgICBwICs9IDI7CisJZWxzZSBpZiAoKnAgPT0gJ1snKQorCXsKKwkgICAgaWYgKGdldF9jaGFyX2NsYXNzKCZwKSA9PSBDTEFTU19OT05FCisJCSAgICAmJiBnZXRfZXF1aV9jbGFzcygmcCkgPT0gMAorCQkgICAgJiYgZ2V0X2NvbGxfZWxlbWVudCgmcCkgPT0gMCkKKwkJKytwOyAvKiBJdCB3YXMgbm90IGEgY2xhc3MgbmFtZSAqLworCX0KKwllbHNlCisJICAgICsrcDsKKyAgICB9CisKKyAgICByZXR1cm4gcDsKK30KKworLyoKICAqIFNraXAgcGFzdCByZWd1bGFyIGV4cHJlc3Npb24uCiAgKiBTdG9wIGF0IGVuZCBvZiAic3RhcnRwIiBvciB3aGVyZSAiZGlyYyIgaXMgZm91bmQgKCcvJywgJz8nLCBldGMpLgogICogVGFrZSBjYXJlIG9mIGNoYXJhY3RlcnMgd2l0aCBhIGJhY2tzbGFzaCBpbiBmcm9udCBvZiBpdC4KQEAgLTEyNTEsMTYgKzE0MjAsNiBAQAogCSpmbGFncCA9IGZsYWdzOwogCXJldHVybiByZXQ7CiAgICAgfQotICAgIGlmICghKGZsYWdzICYgSEFTV0lEVEgpICYmIHJlX211bHRpX3R5cGUob3ApID09IE1VTFRJX01VTFQpCi0gICAgewotCWlmIChvcCA9PSBNYWdpYygnKicpKQotCSAgICBFTVNHX01fUkVUX05VTEwoXygiRTU2OiAlcyogb3BlcmFuZCBjb3VsZCBiZSBlbXB0eSIpLAotCQkJCQkJICAgICAgIHJlZ19tYWdpYyA+PSBNQUdJQ19PTik7Ci0JaWYgKG9wID09IE1hZ2ljKCcrJykpCi0JICAgIEVNU0dfTV9SRVRfTlVMTChfKCJFNTc6ICVzKyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IiksCi0JCQkJCQkgICAgICAgcmVnX21hZ2ljID09IE1BR0lDX0FMTCk7Ci0JLyogIlx7fSIgaXMgY2hlY2tlZCBiZWxvdywgaXQncyBhbGxvd2VkIHdoZW4gdGhlcmUgaXMgYW4gdXBwZXIgbGltaXQgKi8KLSAgICB9CiAgICAgLyogZGVmYXVsdCBmbGFncyAqLwogICAgICpmbGFncCA9IChXT1JTVCB8IFNQU1RBUlQgfCAoZmxhZ3MgJiAoSEFTTkwgfCBIQVNMT09LQkgpKSk7CiAKQEAgLTEzMzgsMTAgKzE0OTcsNiBAQAogCWNhc2UgTWFnaWMoJ3snKToKIAkgICAgaWYgKCFyZWFkX2xpbWl0cygmbWludmFsLCAmbWF4dmFsKSkKIAkJcmV0dXJuIE5VTEw7Ci0JICAgIGlmICghKGZsYWdzICYgSEFTV0lEVEgpICYmIChtYXh2YWwgPiBtaW52YWwKLQkJCQkgPyBtYXh2YWwgPj0gTUFYX0xJTUlUIDogbWludmFsID49IE1BWF9MSU1JVCkpCi0JCUVNU0dfTV9SRVRfTlVMTChfKCJFNTg6ICVzeyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IiksCi0JCQkJCQkgICAgICByZWdfbWFnaWMgPT0gTUFHSUNfQUxMKTsKIAkgICAgaWYgKGZsYWdzICYgU0lNUExFKQogCSAgICB7CiAJCXJlZ2luc2VydChCUkFDRV9TSU1QTEUsIHJldCk7CkBAIC0xMzkxLDYgKzE1NDYsNyBAQAogICAgIGNoYXJfdQkgICAgKnJldDsKICAgICBpbnQJCSAgICBmbGFnczsKICAgICBpbnQJCSAgICBjcG9fbGl0OwkgICAgLyogJ2Nwb3B0aW9ucycgY29udGFpbnMgJ2wnIGZsYWcgKi8KKyAgICBpbnQJCSAgICBjcG9fYnNsOwkgICAgLyogJ2Nwb3B0aW9ucycgY29udGFpbnMgJ1wnIGZsYWcgKi8KICAgICBpbnQJCSAgICBjOwogICAgIHN0YXRpYyBjaGFyX3UgICAqY2xhc3NjaGFycyA9IChjaGFyX3UgKikiLmlJa0tmRnBQc1NkRHhYb093V2hIYUFsTHVVIjsKICAgICBzdGF0aWMgaW50CSAgICBjbGFzc2NvZGVzW10gPSB7QU5ZLCBJREVOVCwgU0lERU5ULCBLV09SRCwgU0tXT1JELApAQCAtMTQwNiw2ICsxNTYyLDcgQEAKIAogICAgICpmbGFncCA9IFdPUlNUOwkJLyogVGVudGF0aXZlbHkuICovCiAgICAgY3BvX2xpdCA9ICghcmVnX3N5biAmJiB2aW1fc3RyY2hyKHBfY3BvLCBDUE9fTElURVJBTCkgIT0gTlVMTCk7CisgICAgY3BvX2JzbCA9ICghcmVnX3N5biAmJiB2aW1fc3RyY2hyKHBfY3BvLCBDUE9fQkFDS1NMKSAhPSBOVUxMKTsKIAogICAgIGMgPSBnZXRjaHIoKTsKICAgICBzd2l0Y2ggKGMpCkBAIC0xODI3LDcgKzE5ODQsMTAgQEAKIAogCQkvKiBBdCB0aGUgc3RhcnQgJ10nIGFuZCAnLScgbWVhbiB0aGUgbGl0ZXJhbCBjaGFyYWN0ZXIuICovCiAJCWlmICgqcmVncGFyc2UgPT0gJ10nIHx8ICpyZWdwYXJzZSA9PSAnLScpCisJCXsKKwkJICAgIHN0YXJ0YyA9ICpyZWdwYXJzZTsKIAkJICAgIHJlZ2MoKnJlZ3BhcnNlKyspOworCQl9CiAKIAkJd2hpbGUgKCpyZWdwYXJzZSAhPSBOVUwgJiYgKnJlZ3BhcnNlICE9ICddJykKIAkJewpAQCAtMTg0NSwxNSArMjAwNSwyMiBAQAogCQkJfQogCQkJZWxzZQogCQkJeworCQkJICAgIC8qIEFsc28gYWNjZXB0ICJhLVsuei5dIiAqLworCQkJICAgIGVuZGMgPSAwOworCQkJICAgIGlmICgqcmVncGFyc2UgPT0gJ1snKQorCQkJCWVuZGMgPSBnZXRfY29sbF9lbGVtZW50KCZyZWdwYXJzZSk7CisJCQkgICAgaWYgKGVuZGMgPT0gMCkKKwkJCSAgICB7CiAjaWZkZWYgRkVBVF9NQllURQotCQkJICAgIGlmIChoYXNfbWJ5dGUpCi0JCQkJZW5kYyA9IG1iX3B0cjJjaGFyX2FkdigmcmVncGFyc2UpOwotCQkJICAgIGVsc2UKKwkJCQlpZiAoaGFzX21ieXRlKQorCQkJCSAgICBlbmRjID0gbWJfcHRyMmNoYXJfYWR2KCZyZWdwYXJzZSk7CisJCQkJZWxzZQogI2VuZGlmCi0JCQkJZW5kYyA9ICpyZWdwYXJzZSsrOworCQkJCSAgICBlbmRjID0gKnJlZ3BhcnNlKys7CisJCQkgICAgfQogCiAJCQkgICAgLyogSGFuZGxlIFxvNDAsIFx4MjAgYW5kIFx1MjBBQyBzdHlsZSBzZXF1ZW5jZXMgKi8KLQkJCSAgICBpZiAoZW5kYyA9PSAnXFwnICYmICFjcG9fbGl0KQorCQkJICAgIGlmIChlbmRjID09ICdcXCcgJiYgIWNwb19saXQgJiYgIWNwb19ic2wpCiAJCQkJZW5kYyA9IGNvbGxfZ2V0X2NoYXIoKTsKIAogCQkJICAgIGlmIChzdGFydGMgPiBlbmRjKQpAQCAtMTg5Miw4ICsyMDU5LDEwIEBACiAJCSAgICAgKiBPbmx5ICJcXSIsICJcXiIsICJcXSIgYW5kICJcXCIgYXJlIHNwZWNpYWwgaW4gVmkuICBWaW0KIAkJICAgICAqIGFjY2VwdHMgIlx0IiwgIlxlIiwgZXRjLiwgYnV0IG9ubHkgd2hlbiB0aGUgJ2wnIGZsYWcgaW4KIAkJICAgICAqICdjcG9wdGlvbnMnIGlzIG5vdCBpbmNsdWRlZC4KKwkJICAgICAqIFBvc2l4IGRvZXNuJ3QgcmVjb2duaXplIGJhY2tzbGFzaCBhdCBhbGwuCiAJCSAgICAgKi8KIAkJICAgIGVsc2UgaWYgKCpyZWdwYXJzZSA9PSAnXFwnCisJCQkgICAgJiYgIWNwb19ic2wKIAkJCSAgICAmJiAodmltX3N0cmNocihSRUdFWFBfSU5SQU5HRSwgcmVncGFyc2VbMV0pICE9IE5VTEwKIAkJCQl8fCAoIWNwb19saXQKIAkJCQkgICAgJiYgdmltX3N0cmNocihSRUdFWFBfQUJCUiwKQEAgLTE5NDIsMTUgKzIxMTEsMzAgQEAKIAkJCWludCBjX2NsYXNzOwogCQkJaW50IGN1OwogCi0JCQljX2NsYXNzID0gc2tpcF9jbGFzc19uYW1lKCZyZWdwYXJzZSk7CisJCQljX2NsYXNzID0gZ2V0X2NoYXJfY2xhc3MoJnJlZ3BhcnNlKTsKIAkJCXN0YXJ0YyA9IC0xOwogCQkJLyogQ2hhcmFjdGVycyBhc3N1bWVkIHRvIGJlIDggYml0cyEgKi8KIAkJCXN3aXRjaCAoY19jbGFzcykKIAkJCXsKIAkJCSAgICBjYXNlIENMQVNTX05PTkU6Ci0JCQkJLyogbGl0ZXJhbCAnWycsIGFsbG93IFtbLXhdIGFzIGEgcmFuZ2UgKi8KLQkJCQlzdGFydGMgPSAqcmVncGFyc2UrKzsKLQkJCQlyZWdjKHN0YXJ0Yyk7CisJCQkJY19jbGFzcyA9IGdldF9lcXVpX2NsYXNzKCZyZWdwYXJzZSk7CisJCQkJaWYgKGNfY2xhc3MgIT0gMCkKKwkJCQl7CisJCQkJICAgIC8qIHByb2R1Y2UgZXF1aXZhbGVuY2UgY2xhc3MgKi8KKwkJCQkgICAgcmVnX2VxdWlfY2xhc3MoY19jbGFzcyk7CisJCQkJfQorCQkJCWVsc2UgaWYgKChjX2NsYXNzID0KKwkJCQkJICAgIGdldF9jb2xsX2VsZW1lbnQoJnJlZ3BhcnNlKSkgIT0gMCkKKwkJCQl7CisJCQkJICAgIC8qIHByb2R1Y2UgYSBjb2xsYXRpbmcgZWxlbWVudCAqLworCQkJCSAgICByZWdtYmMoY19jbGFzcyk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJICAgIC8qIGxpdGVyYWwgJ1snLCBhbGxvdyBbWy14XSBhcyBhIHJhbmdlICovCisJCQkJICAgIHN0YXJ0YyA9ICpyZWdwYXJzZSsrOworCQkJCSAgICByZWdjKHN0YXJ0Yyk7CisJCQkJfQogCQkJCWJyZWFrOwogCQkJICAgIGNhc2UgQ0xBU1NfQUxOVU06CiAJCQkJZm9yIChjdSA9IDE7IGN1IDw9IDI1NTsgY3UrKykKQEAgLTIzNTQsNiArMjUzOCw4IEBACiAgICAgc3RhdGljIGludAogcGVla2NocigpCiB7CisgICAgc3RhdGljIGludAlhZnRlcl9zbGFzaCA9IEZBTFNFOworCiAgICAgaWYgKGN1cmNociA9PSAtMSkKICAgICB7CiAJc3dpdGNoIChjdXJjaHIgPSByZWdwYXJzZVswXSkKQEAgLTIzOTIsMTAgKzI1NzgsMTYgQEAKIAkJY3VyY2hyID0gTWFnaWMoY3VyY2hyKTsKIAkgICAgYnJlYWs7CiAJY2FzZSAnKic6Ci0JICAgIC8qICogaXMgbm90IG1hZ2ljIGFzIHRoZSB2ZXJ5IGZpcnN0IGNoYXJhY3RlciwgZWcgIj8qcHRyIiBhbmQgd2hlbgotCSAgICAgKiBhZnRlciAnXicsIGVnICIvXipwdHIiICovCi0JICAgIGlmIChyZWdfbWFnaWMgPj0gTUFHSUNfT04gJiYgIWF0X3N0YXJ0Ci0JCQkJICYmICEocHJldl9hdF9zdGFydCAmJiBwcmV2Y2hyID09IE1hZ2ljKCdeJykpKQorCSAgICAvKiAqIGlzIG5vdCBtYWdpYyBhcyB0aGUgdmVyeSBmaXJzdCBjaGFyYWN0ZXIsIGVnICI/KnB0ciIsIHdoZW4KKwkgICAgICogYWZ0ZXIgJ14nLCBlZyAiL14qcHRyIiBhbmQgd2hlbiBhZnRlciAiXCgiLCAiXHwiLCAiXCYiLiAgQnV0CisJICAgICAqICJcKFwqIiBpcyBub3QgbWFnaWMsIHRodXMgbXVzdCBiZSBtYWdpYyBpZiAiYWZ0ZXJfc2xhc2giICovCisJICAgIGlmIChyZWdfbWFnaWMgPj0gTUFHSUNfT04KKwkJICAgICYmICFhdF9zdGFydAorCQkgICAgJiYgIShwcmV2X2F0X3N0YXJ0ICYmIHByZXZjaHIgPT0gTWFnaWMoJ14nKSkKKwkJICAgICYmIChhZnRlcl9zbGFzaAorCQkJfHwgKHByZXZjaHIgIT0gTWFnaWMoJygnKQorCQkJICAgICYmIHByZXZjaHIgIT0gTWFnaWMoJyYnKQorCQkJICAgICYmIHByZXZjaHIgIT0gTWFnaWMoJ3wnKSkpKQogCQljdXJjaHIgPSBNYWdpYygnKicpOwogCSAgICBicmVhazsKIAljYXNlICdeJzoKQEAgLTI0NjAsOCArMjY1MiwxMCBAQAogCQkgICAgcHJldl9hdF9zdGFydCA9IGF0X3N0YXJ0OwogCQkgICAgYXRfc3RhcnQgPSBGQUxTRTsJLyogYmUgYWJsZSB0byBzYXkgIi9cKnB0ciIgKi8KIAkJICAgICsrcmVncGFyc2U7CisJCSAgICArK2FmdGVyX3NsYXNoOwogCQkgICAgcGVla2NocigpOwogCQkgICAgLS1yZWdwYXJzZTsKKwkJICAgIC0tYWZ0ZXJfc2xhc2g7CiAJCSAgICBjdXJjaHIgPSB0b2dnbGVfTWFnaWMoY3VyY2hyKTsKIAkJfQogCQllbHNlIGlmICh2aW1fc3RyY2hyKFJFR0VYUF9BQkJSLCBjKSkKQEAgLTI3MjMsNyArMjkxNyw3IEBACiAJKm1heHZhbCA9IE1BWF9MSU1JVDsJICAgIC8qIEl0IHdhcyBce30gb3IgXHstfSAqLwogICAgIGlmICgqcmVncGFyc2UgPT0gJ1xcJykKIAlyZWdwYXJzZSsrOwkvKiBBbGxvdyBlaXRoZXIgXHsuLi59IG9yIFx7Li4uXH0gKi8KLSAgICBpZiAoKnJlZ3BhcnNlICE9ICd9JyB8fCAoKm1heHZhbCA9PSAwICYmICptaW52YWwgPT0gMCkpCisgICAgaWYgKCpyZWdwYXJzZSAhPSAnfScpCiAgICAgewogCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIkU1NTQ6IFN5bnRheCBlcnJvciBpbiAlc3suLi59IiksCiAJCQkJCSAgcmVnX21hZ2ljID09IE1BR0lDX0FMTCA/ICIiIDogIlxcIik7CkBAIC0yODE1LDcgKzMwMDksNyBAQAogCSoocHApID0gKHNhdmVwKS0+c2VfdS5wdHI7IH0KIAogc3RhdGljIGludAlyZV9udW1fY21wIF9fQVJHUygobG9uZ191IHZhbCwgY2hhcl91ICpzY2FuKSk7Ci1zdGF0aWMgaW50CXJlZ21hdGNoIF9fQVJHUygoY2hhcl91ICpwcm9nKSk7CitzdGF0aWMgaW50CXJlZ21hdGNoIF9fQVJHUygoY2hhcl91ICpwcm9nLCByZWdzYXZlX1QgKnN0YXJ0cCkpOwogc3RhdGljIGludAlyZWdyZXBlYXQgX19BUkdTKChjaGFyX3UgKnAsIGxvbmcgbWF4Y291bnQpKTsKIAogI2lmZGVmIERFQlVHCkBAIC0zMjczLDcgKzM0NjcsNyBAQAogCW5lZWRfY2xlYXJfenN1YmV4cHIgPSBUUlVFOwogI2VuZGlmCiAKLSAgICBpZiAocmVnbWF0Y2gocHJvZy0+cHJvZ3JhbSArIDEpKQorICAgIGlmIChyZWdtYXRjaChwcm9nLT5wcm9ncmFtICsgMSwgTlVMTCkpCiAgICAgewogCWNsZWFudXBfc3ViZXhwcigpOwogCWlmIChSRUdfTVVMVEkpCkBAIC0zMzc5LDggKzM1NzMsOSBAQAogICogdW5kZWZpbmVkIHN0YXRlIQogICovCiAgICAgc3RhdGljIGludAotcmVnbWF0Y2goc2NhbikKK3JlZ21hdGNoKHNjYW4sIHN0YXJ0cCkKICAgICBjaGFyX3UJKnNjYW47CQkvKiBDdXJyZW50IG5vZGUuICovCisgICAgcmVnc2F2ZV9UCSpzdGFydHA7CS8qIHN0YXJ0IHBvc2l0aW9uIGZvciBCQUNLICovCiB7CiAgICAgY2hhcl91CSpuZXh0OwkJLyogTmV4dCBub2RlLiAqLwogICAgIGludAkJb3A7CkBAIC0zODAzLDYgKzM5OTgsMTAgQEAKIAkgICAgYnJlYWs7CiAKIAkgIGNhc2UgQkFDSzoKKwkgICAgLyogV2hlbiB3ZSBydW4gaW50byBCQUNLIHdpdGhvdXQgbWF0Y2hpbmcgc29tZXRoaW5nIG5vbi1lbXB0eSwgd2UKKwkgICAgICogZmFpbC4gKi8KKwkgICAgaWYgKHN0YXJ0cCAhPSBOVUxMICYmIHJlZ19zYXZlX2VxdWFsKHN0YXJ0cCkpCisJCXJldHVybiBGQUxTRTsKIAkgICAgYnJlYWs7CiAKIAkgIGNhc2UgTU9QRU4gKyAwOiAgIC8qIE1hdGNoIHN0YXJ0OiBcenMgKi8KQEAgLTM4MjMsNyArNDAyMiw3IEBACiAJCWNsZWFudXBfc3ViZXhwcigpOwogCQlzYXZlX3NlKCZzYXZlLCAmcmVnX3N0YXJ0cG9zW25vXSwgJnJlZ19zdGFydHBbbm9dKTsKIAotCQlpZiAocmVnbWF0Y2gobmV4dCkpCisJCWlmIChyZWdtYXRjaChuZXh0LCBzdGFydHApKQogCQkgICAgcmV0dXJuIFRSVUU7CiAKIAkJcmVzdG9yZV9zZSgmc2F2ZSwgJnJlZ19zdGFydHBvc1tub10sICZyZWdfc3RhcnRwW25vXSk7CkBAIC0zODMzLDcgKzQwMzIsNyBAQAogCiAJICBjYXNlIE5PUEVOOgkgICAgLyogXCUoICovCiAJICBjYXNlIE5DTE9TRToJICAgIC8qIFwpIGFmdGVyIFwlKCAqLwotCQlpZiAocmVnbWF0Y2gobmV4dCkpCisJCWlmIChyZWdtYXRjaChuZXh0LCBzdGFydHApKQogCQkgICAgcmV0dXJuIFRSVUU7CiAJCXJldHVybiBGQUxTRTsKIAkJLyogYnJlYWs7IE5vdCBSZWFjaGVkICovCkBAIC0zODU2LDcgKzQwNTUsNyBAQAogCQljbGVhbnVwX3pzdWJleHByKCk7CiAJCXNhdmVfc2UoJnNhdmUsICZyZWdfc3RhcnR6cG9zW25vXSwgJnJlZ19zdGFydHpwW25vXSk7CiAKLQkJaWYgKHJlZ21hdGNoKG5leHQpKQorCQlpZiAocmVnbWF0Y2gobmV4dCwgc3RhcnRwKSkKIAkJICAgIHJldHVybiBUUlVFOwogCiAJCXJlc3RvcmVfc2UoJnNhdmUsICZyZWdfc3RhcnR6cG9zW25vXSwgJnJlZ19zdGFydHpwW25vXSk7CkBAIC0zODgzLDcgKzQwODIsNyBAQAogCQljbGVhbnVwX3N1YmV4cHIoKTsKIAkJc2F2ZV9zZSgmc2F2ZSwgJnJlZ19lbmRwb3Nbbm9dLCAmcmVnX2VuZHBbbm9dKTsKIAotCQlpZiAocmVnbWF0Y2gobmV4dCkpCisJCWlmIChyZWdtYXRjaChuZXh0LCBzdGFydHApKQogCQkgICAgcmV0dXJuIFRSVUU7CiAKIAkJcmVzdG9yZV9zZSgmc2F2ZSwgJnJlZ19lbmRwb3Nbbm9dLCAmcmVnX2VuZHBbbm9dKTsKQEAgLTM5MDksNyArNDEwOCw3IEBACiAJCWNsZWFudXBfenN1YmV4cHIoKTsKIAkJc2F2ZV9zZSgmc2F2ZSwgJnJlZ19lbmR6cG9zW25vXSwgJnJlZ19lbmR6cFtub10pOwogCi0JCWlmIChyZWdtYXRjaChuZXh0KSkKKwkJaWYgKHJlZ21hdGNoKG5leHQsIHN0YXJ0cCkpCiAJCSAgICByZXR1cm4gVFJVRTsKIAogCQlyZXN0b3JlX3NlKCZzYXZlLCAmcmVnX2VuZHpwb3Nbbm9dLCAmcmVnX2VuZHpwW25vXSk7CkBAIC00MDc2LDcgKzQyNzUsNyBAQAogCQkgICAgZG8KIAkJICAgIHsKIAkJCXJlZ19zYXZlKCZzYXZlKTsKLQkJCWlmIChyZWdtYXRjaChPUEVSQU5EKHNjYW4pKSkKKwkJCWlmIChyZWdtYXRjaChPUEVSQU5EKHNjYW4pLCAmc2F2ZSkpCiAJCQkgICAgcmV0dXJuIFRSVUU7CiAJCQlyZWdfcmVzdG9yZSgmc2F2ZSk7CiAJCQlzY2FuID0gcmVnbmV4dChzY2FuKTsKQEAgLTQxMzQsNyArNDMzMyw3IEBACiAJCQkJICAgID8gYnJhY2VfbWluW25vXSA6IGJyYWNlX21heFtub10pKQogCQl7CiAJCSAgICByZWdfc2F2ZSgmc2F2ZSk7Ci0JCSAgICBpZiAocmVnbWF0Y2goT1BFUkFORChzY2FuKSkpCisJCSAgICBpZiAocmVnbWF0Y2goT1BFUkFORChzY2FuKSwgJnNhdmUpKQogCQkJcmV0dXJuIFRSVUU7CiAJCSAgICByZWdfcmVzdG9yZSgmc2F2ZSk7CiAJCSAgICAtLWJyYWNlX2NvdW50W25vXTsJLyogZmFpbGVkLCBkZWNyZW1lbnQgbWF0Y2ggY291bnQgKi8KQEAgLTQxNDgsMTEgKzQzNDcsMTEgQEAKIAkJICAgIGlmIChicmFjZV9jb3VudFtub10gPD0gYnJhY2VfbWF4W25vXSkKIAkJICAgIHsKIAkJCXJlZ19zYXZlKCZzYXZlKTsKLQkJCWlmIChyZWdtYXRjaChPUEVSQU5EKHNjYW4pKSkKKwkJCWlmIChyZWdtYXRjaChPUEVSQU5EKHNjYW4pLCAmc2F2ZSkpCiAJCQkgICAgcmV0dXJuIFRSVUU7CS8qIG1hdGNoZWQgc29tZSBtb3JlIHRpbWVzICovCiAJCQlyZWdfcmVzdG9yZSgmc2F2ZSk7CiAJCQktLWJyYWNlX2NvdW50W25vXTsgIC8qIG1hdGNoZWQganVzdCBlbm91Z2ggdGltZXMgKi8KLQkJCS8qIGNvbnRpbnVlIHdpdGggdGhlIGl0ZW1zIGFmdGVyIFx7fSAqLworCQkJLyogeyAgY29udGludWUgd2l0aCB0aGUgaXRlbXMgYWZ0ZXIgXHt9ICovCiAJCSAgICB9CiAJCX0KIAkJZWxzZQpAQCAtNDE2MSw3ICs0MzYwLDcgQEAKIAkJICAgIGlmIChicmFjZV9jb3VudFtub10gPD0gYnJhY2VfbWluW25vXSkKIAkJICAgIHsKIAkJCXJlZ19zYXZlKCZzYXZlKTsKLQkJCWlmIChyZWdtYXRjaChuZXh0KSkKKwkJCWlmIChyZWdtYXRjaChuZXh0LCAmc2F2ZSkpCiAJCQkgICAgcmV0dXJuIFRSVUU7CiAJCQlyZWdfcmVzdG9yZSgmc2F2ZSk7CiAJCQluZXh0ID0gT1BFUkFORChzY2FuKTsKQEAgLTQyMzQsNyArNDQzMyw3IEBACiAJCQkJCQkgICAgfHwgKnJlZ2lucHV0ID09IG5leHRiX2ljKQogCQkJewogCQkJICAgIHJlZ19zYXZlKCZzYXZlKTsKLQkJCSAgICBpZiAocmVnbWF0Y2gobmV4dCkpCisJCQkgICAgaWYgKHJlZ21hdGNoKG5leHQsIHN0YXJ0cCkpCiAJCQkJcmV0dXJuIFRSVUU7CiAJCQkgICAgcmVnX3Jlc3RvcmUoJnNhdmUpOwogCQkJfQpAQCAtNDI3MSw3ICs0NDcwLDcgQEAKIAkJCQkJCSAgICB8fCAqcmVnaW5wdXQgPT0gbmV4dGJfaWMpCiAJCQl7CiAJCQkgICAgcmVnX3NhdmUoJnNhdmUpOwotCQkJICAgIGlmIChyZWdtYXRjaChuZXh0KSkKKwkJCSAgICBpZiAocmVnbWF0Y2gobmV4dCwgJnNhdmUpKQogCQkJCXJldHVybiBUUlVFOwogCQkJICAgIHJlZ19yZXN0b3JlKCZzYXZlKTsKIAkJCX0KQEAgLTQyOTUsNyArNDQ5NCw3IEBACiAJCS8qIElmIHRoZSBvcGVyYW5kIG1hdGNoZXMsIHdlIGZhaWwuICBPdGhlcndpc2UgYmFja3VwIGFuZAogCQkgKiBjb250aW51ZSB3aXRoIHRoZSBuZXh0IGl0ZW0uICovCiAJCXJlZ19zYXZlKCZzYXZlKTsKLQkJaWYgKHJlZ21hdGNoKE9QRVJBTkQoc2NhbikpKQorCQlpZiAocmVnbWF0Y2goT1BFUkFORChzY2FuKSwgc3RhcnRwKSkKIAkJICAgIHJldHVybiBGQUxTRTsKIAkJcmVnX3Jlc3RvcmUoJnNhdmUpOwogCSAgICB9CkBAIC00MzA5LDcgKzQ1MDgsNyBAQAogCQkvKiBJZiB0aGUgb3BlcmFuZCBkb2Vzbid0IG1hdGNoLCB3ZSBmYWlsLiAgT3RoZXJ3aXNlIGJhY2t1cAogCQkgKiBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dCBpdGVtLiAqLwogCQlyZWdfc2F2ZSgmc2F2ZSk7Ci0JCWlmICghcmVnbWF0Y2goT1BFUkFORChzY2FuKSkpCisJCWlmICghcmVnbWF0Y2goT1BFUkFORChzY2FuKSwgc3RhcnRwKSkKIAkJICAgIHJldHVybiBGQUxTRTsKIAkJaWYgKG9wID09IE1BVENIKQkgICAgLyogemVyby13aWR0aCAqLwogCQkgICAgcmVnX3Jlc3RvcmUoJnNhdmUpOwpAQCAtNDMzMSw3ICs0NTMwLDcgQEAKIAkJICogZmFzdGVyLgogCQkgKi8KIAkJcmVnX3NhdmUoJnNhdmVfc3RhcnQpOwotCQlpZiAocmVnbWF0Y2gobmV4dCkpCisJCWlmIChyZWdtYXRjaChuZXh0LCBzdGFydHApKQogCQl7CiAJCSAgICAvKiBzYXZlIHRoZSBwb3NpdGlvbiBhZnRlciB0aGUgZm91bmQgbWF0Y2ggZm9yIG5leHQgKi8KIAkJICAgIHJlZ19zYXZlKCZzYXZlX2FmdGVyKTsKQEAgLTQzNDcsNyArNDU0Niw3IEBACiAJCSAgICBmb3IgKDs7KQogCQkgICAgewogCQkJcmVnX3Jlc3RvcmUoJnNhdmVfc3RhcnQpOwotCQkJaWYgKHJlZ21hdGNoKE9QRVJBTkQoc2NhbikpCisJCQlpZiAocmVnbWF0Y2goT1BFUkFORChzY2FuKSwgc3RhcnRwKQogCQkJCSYmIHJlZ19zYXZlX2VxdWFsKCZiZWhpbmRfcG9zKSkKIAkJCXsKIAkJCSAgICBiZWhpbmRfcG9zID0gc2F2ZV9iZWhpbmRfcG9zOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDExLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDExLmluCmluZGV4IDBlNzIxYjcuLjA2M2FlYjIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0ZGlyL3Rlc3QxMS5pbgorKysgYi9zcmMvdGVzdGRpci90ZXN0MTEuaW4KQEAgLTM4LDYgKzM4LDcgQEAKIDphdSBCdWZSZWFkUG9zdCAgICAgKi5neiAgICFnemlwIDxhZmlsZT46cgogOmUhIFh0ZXN0ZmlsZS5neiAgICAgICAgICAgICAgICAiIEVkaXQgY29tcHJlc3NlZCBmaWxlCiA6dz4+dGVzdC5vdXQgICAgICAgICAgICAgICAgICAgICIgQXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgZmlsZQorOnNldCBzaGVsbHRlbXAgICAgICAgICAgICAgICAgICAiIG5lZWQgdGVtcCBmaWxlcyBoZXJlCiA6YXUgRmlsdGVyUmVhZFByZSAgICoub3V0ICBjYWxsIHJlbmFtZShleHBhbmQoIjxhZmlsZT4iKSwgZXhwYW5kKCI8YWZpbGU+IikuIi50IikKIDphdSBGaWx0ZXJSZWFkUHJlICAgKi5vdXQgICFzZWQgcy9lL0UvIDxhZmlsZT4udCA+PGFmaWxlPgogOmF1IEZpbHRlclJlYWRQcmUgICAqLm91dCAgIXJtIDxhZmlsZT4udApkaWZmIC0tZ2l0IGEvc3JjL3ZpbS5oIGIvc3JjL3ZpbS5oCmluZGV4IDZkMmIyNDkuLmZhNTU0YjAgMTAwNjQ0Ci0tLSBhL3NyYy92aW0uaAorKysgYi9zcmMvdmltLmgKQEAgLTc4Miw2ICs3ODIsOCBAQAogI2RlZmluZSBTSEVMTF9DT09LRUQJNAkvKiBzZXQgdGVybSB0byBjb29rZWQgbW9kZSAqLwogI2RlZmluZSBTSEVMTF9ET09VVAk4CS8qIHJlZGlyZWN0aW5nIG91dHB1dCAqLwogI2RlZmluZSBTSEVMTF9TSUxFTlQJMTYJLyogZG9uJ3QgcHJpbnQgZXJyb3IgcmV0dXJuZWQgYnkgY29tbWFuZCAqLworI2RlZmluZSBTSEVMTF9SRUFECTMyCS8qIHJlYWQgbGluZXMgYW5kIGluc2VydCBpbnRvIGJ1ZmZlciAqLworI2RlZmluZSBTSEVMTF9XUklURQk2NAkvKiB3cml0ZSBsaW5lcyBmcm9tIGJ1ZmZlciAqLwogCiAvKiBWYWx1ZXMgcmV0dXJuZWQgYnkgbWNoX25vZGV0eXBlKCkgKi8KICNkZWZpbmUgTk9ERV9OT1JNQUwJMAkvKiBmaWxlIG9yIGRpcmVjdG9yeSwgY2hlY2sgd2l0aCBtY2hfaXNkaXIoKSovCkBAIC04ODUsOSArODg3LDEwIEBACiAvKiBmbGFncyBmb3IgZG9fcHV0KCkgKi8KICNkZWZpbmUgUFVUX0ZJWElOREVOVAkxCS8qIG1ha2UgaW5kZW50IGxvb2sgbmljZSAqLwogI2RlZmluZSBQVVRfQ1VSU0VORAkyCS8qIGxlYXZlIGN1cnNvciBhZnRlciBlbmQgb2YgbmV3IHRleHQgKi8KLSNkZWZpbmUgUFVUX0xJTkUJNAkvKiBwdXQgcmVnaXN0ZXIgYXMgbGluZXMgKi8KLSNkZWZpbmUgUFVUX0xJTkVfU1BMSVQJOAkvKiBzcGxpdCBsaW5lIGZvciBsaW5ld2lzZSByZWdpc3RlciAqLwotI2RlZmluZSBQVVRfTElORV9GT1JXQVJEIDE2CS8qIHB1dCBsaW5ld2lzZSByZWdpc3RlciBiZWxvdyBWaXN1YWwgc2VsLiAqLworI2RlZmluZSBQVVRfQ1VSU0xJTkUJNAkvKiBsZWF2ZSBjdXJzb3Igb24gbGFzdCBsaW5lIG9mIG5ldyB0ZXh0ICovCisjZGVmaW5lIFBVVF9MSU5FCTgJLyogcHV0IHJlZ2lzdGVyIGFzIGxpbmVzICovCisjZGVmaW5lIFBVVF9MSU5FX1NQTElUCTE2CS8qIHNwbGl0IGxpbmUgZm9yIGxpbmV3aXNlIHJlZ2lzdGVyICovCisjZGVmaW5lIFBVVF9MSU5FX0ZPUldBUkQgMzIJLyogcHV0IGxpbmV3aXNlIHJlZ2lzdGVyIGJlbG93IFZpc3VhbCBzZWwuICovCiAKIC8qIGZsYWdzIGZvciBzZXRfaW5kZW50KCkgKi8KICNkZWZpbmUgU0lOX0NIQU5HRUQJMQkvKiBjYWxsIGNoYW5nZWRfYnl0ZXMoKSB3aGVuIGxpbmUgY2hhbmdlZCAqLwo=