Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyyPP-000aN3-0d for pgsql-hackers@arkaria.postgresql.org; Sat, 07 Mar 2026 20:38:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vyyON-009VxA-1K for pgsql-hackers@arkaria.postgresql.org; Sat, 07 Mar 2026 20:36:55 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vys8q-008hIS-27 for pgsql-hackers@lists.postgresql.org; Sat, 07 Mar 2026 13:56:29 +0000 Received: from forward101d.mail.yandex.net ([178.154.239.212]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vys8m-00000001Ltv-0fxj for pgsql-hackers@postgresql.org; Sat, 07 Mar 2026 13:56:28 +0000 Received: from mail-nwsmtp-smtp-production-main-80.klg.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-80.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:3cca:0:640:f0e1:0]) by forward101d.mail.yandex.net (Yandex) with ESMTPS id EF4E1C0079 for ; Sat, 07 Mar 2026 16:56:22 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-80.klg.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id JurLsxLGr4Y0-r7Q5ikkR; Sat, 07 Mar 2026 16:56:21 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1772891782; bh=3eICUfuEPDtrxgoSKNyR68HVTyFvoDChO9WVUpCJOGQ=; h=Subject:To:Message-ID:Date:From; b=YSVGGghbo1Ffye2sXjp65UtdiIp0HUkzPnrkyR6l1X3y8D7+CDCBI6tdT2Rkf80hV 4qxMxHPZLOnz5lp43nhY2tKfIy6/SOiQ33/nCuqUofQU2sxi1S5a4AgRfH85tHqBaq n6cmq3+39WTMkBqUhPkElvwaG0n0pM7gNzCu+IUg= Authentication-Results: mail-nwsmtp-smtp-production-main-80.klg.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------lJZjohOnP3WxZVzV3LqV3g0v" Message-ID: Date: Sat, 7 Mar 2026 21:56:18 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: PostgreSQL Hackers From: Evgeny Voropaev Subject: Compress prune/freeze records with Delta Frame of Reference algorithm List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------lJZjohOnP3WxZVzV3LqV3g0v Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi hackers, A prune/freeze record contains four sequences of integers representing frozen, redirected, unused, and dead tuples. Currently, these sequences are uncompressed, which adds overhead. Eliminating empty leading bits in these offsets can reduce the size of the record, and applying bit-packing algorithms can reduce it even further. Reducing WAL record size also lessens the load on disk and network, which are heavily used for storing WAL and transmitting it to replicas. For example, with BLCKSZ equal to 8192, the maximum tuple offset is around 580. Despite this, all offsets are stored as 16-bit integers with no compression applied. In the proposed patch, using the customized Delta Frame of Reference (DFoR) algorithm, the unused and dead sequences are compressed. The frozen and redirected sequences cannot be compressed with DFoR because the order of their elements is significant, and DFoR does not yet support unsorted sequences. The theoretical compression ratio for dfor_u16 can reach up to 16. The new GUC wal_prune_dfor_compression controls (enables or disables) compression for prune/freeze records. An integral TAP test, 052_prune_dfor_compression.pl, has been implemented. It demonstrates an average compression ratio of at least 5 when analyzing prune/freeze records in practice. The patch series includes: 1. 0001-Implement-vect-and-uniqsortvect-containers-and-bitpack.patch - Introduces the vect and uniqsortvect containers and the bitpack unit used by DFoR. 2. 0002-Implement-Delta-Frame-of-Reference-compression.patch - Implements DFoR itself. 3. 0003-Use-Delta-Frame-of-Reference-DFoR-to-compress-prune.patch - Applies DFoR to prune/freeze records. Unit tests are included and integrated into the PostgreSQL build system. Using vect, bitpack, and DFoR for prune/freeze records is just one example of their application. Independently of prune/freeze, these algorithms can be effectively used by developers in other areas of PostgreSQL. Looking forward to discussion! Best regards, Evgeny Voropaev, Tantor Labs, LLC. --------------lJZjohOnP3WxZVzV3LqV3g0v Content-Type: text/x-patch; charset=UTF-8; name="v01-0001-Implement-vect-and-uniqsortvect-containers-and-b.patch" Content-Disposition: attachment; filename*0="v01-0001-Implement-vect-and-uniqsortvect-containers-and-b.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhYWU0MTRlODM2NTZiMzcwMTNkMjQxY2VhNzFhM2EyZjg5NjFlYjdiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IFNhdCwgNyBNYXIgMjAyNiAxODowNTozOSArMDgwMApTdWJqZWN0OiBbUEFU Q0ggdjAxIDEvM10gSW1wbGVtZW50IHZlY3QgYW5kIHVuaXFzb3J0dmVjdCBjb250YWluZXJz IGFuZAogYml0cGFjayBhbGdvcml0aG1zLgoKVGhlIHZlY3QgY29udGFpbmVyIHN0b3JlcyBh cnJheXMgb2YgaW50ZWdlcnMgYW5kIHByb3ZpZGVzIGEgc2V0IG9mCmFsZ29yaXRobXMgaW1w bGVtZW50aW5nIGVzc2VudGlhbCBvcGVyYXRpb25zIG9uIHRoZSBjb250YWluZWQgYXJyYXks CnN1Y2ggYXMgaW5pdGlhbGl6YXRpb24sIGFwcGVuZGluZywgaW5zZXJ0aW5nLCBhbmQgY2xl YXJpbmcuCgpUaGUgdW5pcXNvcnR2ZWN0IGNvbnRhaW5lciBpcyBiYXNlZCBvbiB0aGUgdmVj dCB0eXBlIGJ1dCBhc3N1bWVzIHRoYXQKaXRzIGVsZW1lbnRzIGFyZSBzb3J0ZWQgYW5kIHVu aXF1ZS4gSW4gYWRkaXRpb24gdG8gdGhlIGFsZ29yaXRobXMKcHJvdmlkZWQgYnkgdmVjdCwg dW5pcXNvcnR2ZWN0IGltcGxlbWVudHMgYmluYXJ5IHNlYXJjaCBhbmQgdGhlCnNwZWNpYWxp emVkIGluc2VydGlvbiByb3V0aW5lLgoKVGhlIGNvbnRhaW5lcnMgc3VwcG9ydCBib3RoIGV4 dGVybmFsIG1lbW9yeSBwcm92aWRlZCBieSBhIGNhbGxlciBhbmQKYXV0b21hdGljYWxseSBt YW5hZ2VkIG1lbW9yeSB1c2luZyBtYWxsb2MsIFBvc3RncmVzJ3MgcGFsbG9jLCBvciBzaW1p bGFyCmFsbG9jYXRpb24gZnVuY3Rpb25zLiBBIGNvbnRhaW5lcidzIHN0cmF0ZWd5IHJlZ2Fy ZGluZyBtZW1vcnkgbWFuYWdlbWVudAptdXN0IGJlIHNldCBhdCBjb250YWluZXIgaW5pdGlh bGl6YXRpb24sIGFuZCBhbGwgc3Vic2VxdWVudCBvcGVyYXRpb25zCmhvbm9yIHRoaXMgY29u ZmlndXJhdGlvbi4gRm9yIGV4YW1wbGUsIGEgY2FsbGVyIGNhbiBwbGFjZSBhIGJ1ZmZlciBv bgp0aGUgc3RhY2sgdG8gYXZvaWQgaGVhcCBhbGxvY2F0aW9uIGFuZCBwYXNzIHRoZSBidWZm ZXIgdG8gYSB2ZWN0b3IKaW5zdGFuY2UsIHdoaWNoIHJlc3VsdHMgaW4gdGhlIHZlY3RvciBw ZXJmb3JtcyBubyBkeW5hbWljIGFsbG9jYXRpb24uCgpUaGlzIGNvbW1pdCBhbHNvIGludHJv ZHVjZXMgdGhlIGJpdHBhY2sgdW5pdCwgd2hpY2ggcHJvdmlkZXMgYWxnb3JpdGhtcwpmb3Ig ZGVuc2UgYml0LWxldmVsIHBhY2tpbmcgYW5kIHVucGFja2luZy4gVGhlIGJpdHBhY2sgdW5p dCBkb2VzIG5vdAp1c2UgZHluYW1pYyBtZW1vcnkuCgpFYWNoIHVuaXQgKHZlY3QsIGJpdHBh Y2spIGlzIGltcGxlbWVudGVkIGFzIGEgc2V0IG9mIHRlbXBsYXRlcyB0aGF0CmFsbG93IGRl dmVsb3BlcnMgdG8gZ2VuZXJhdGUgc3BlY2lhbGl6ZWQgc29sdXRpb25zIGZvciBhbnkgaW50 ZWdlciB0eXBlCih1aW50OCwgaW50OCwgdWludDE2LCBpbnQxNiwgYW5kIHNvIG9uKS4gVGhl IHVuaXRzIGJpdHBhY2tfdTE2IGFuZAp2ZWN0X3UxNiBzdXBwb3J0aW5nIHRoZSB1aW50MTZf dCB0eXBlIGFyZSBhbHNvIHByb3ZpZGVkIGJ5IHRoaXMgY29tbWl0LgoKVW5pdCB0ZXN0cyBm b3IgdGhlIHByb3ZpZGVkIGltcGxlbWVudGF0aW9ucyBhcmUgaW5jbHVkZWQuIFVuaXQgdGVz dHMgYXJlCmltcGxlbWVudGVkIGFzIGJpbmFyeSBhcHBsaWNhdGlvbnMgd3JpdHRlbiBpbiBD IGxhbmd1YWdlCihFTEYgZXhlY3V0YWJsZXMpIHRoYXQgc3VwcG9ydCB0aGUgVEFQIHByb3Rv Y29sIGFuZCBhcmUgcnVuIHVzaW5nIHRoZQpQcm92ZSB1dGlsaXR5LgoKVGhlIG5ldyBNYWtl ZmlsZSB0YXJnZXQsIGNoZWNrLXVuaXQsIGlzIGludGVncmF0ZWQgaW50byB0aGUgUG9zdGdy ZVNRTApidWlsZCBzeXN0ZW0gYW5kIGFsbG93cyBydW5uaW5nIHRoZSB1bml0IHRlc3RzIHVz aW5nIHRoZSBjb21tYW5kICdtYWtlCmNoZWNrLXVuaXQnLgoKQXV0aG9yOiBFdmdlbnkgVm9y b3BhZXYgPGV2Z2VueS52b3JvcGFldkB0YW50b3JsYWJzLmNvbT4gPGV2b3JvcEBnbWFpbC5j b20+Ci0tLQogR05VbWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL01ha2VmaWxlLmdsb2JhbC5pbiAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNy Yy9iYWNrZW5kL2xpYi9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9iYWNr ZW5kL2xpYi9NYWtlZmlsZS5kZm9yICAgICAgICAgIHwgICA1ICsKIHNyYy9iYWNrZW5kL2xp Yi9iaXRwYWNrX3RlbXBsLmMgICAgICAgIHwgMTU2ICsrKysrKysrKwogc3JjL2JhY2tlbmQv bGliL2JpdHBhY2tfdTE2LmMgICAgICAgICAgfCAgIDggKwogc3JjL2JhY2tlbmQvbGliL3Zl Y3RfdGVtcGwuYyAgICAgICAgICAgfCAyOTMgKysrKysrKysrKysrKysrKysKIHNyYy9iYWNr ZW5kL2xpYi92ZWN0X3UxNi5jICAgICAgICAgICAgIHwgICA4ICsKIHNyYy9pbmNsdWRlL2Mu aCAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL2xpYi9iaXRw YWNrX3N0YXBsZV90ZW1wbC5oIHwgIDU3ICsrKysKIHNyYy9pbmNsdWRlL2xpYi9iaXRwYWNr X3RlbXBsLmggICAgICAgIHwgIDE0ICsKIHNyYy9pbmNsdWRlL2xpYi9iaXRwYWNrX3RlbXBs X3VuZGVmLmggIHwgICA1ICsKIHNyYy9pbmNsdWRlL2xpYi9iaXRwYWNrX3UxNi5oICAgICAg ICAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL2xpYi9iaXRwYWNrX3UxNl9jb25maWcuaCAgIHwg ICA2ICsKIHNyYy9pbmNsdWRlL2xpYi92ZWN0X3RlbXBsLmggICAgICAgICAgIHwgIDI3ICsr CiBzcmMvaW5jbHVkZS9saWIvdmVjdF90ZW1wbF9zdGFwbGUuaCAgICB8IDE0MCArKysrKysr KysKIHNyYy9pbmNsdWRlL2xpYi92ZWN0X3RlbXBsX3VuZGVmLmggICAgIHwgIDI1ICsrCiBz cmMvaW5jbHVkZS9saWIvdmVjdF91MTYuaCAgICAgICAgICAgICB8ICAzNCArKwogc3JjL2lu Y2x1ZGUvbGliL3ZlY3RfdTE2X2NvbmZpZy5oICAgICAgfCAgMTAgKwogc3JjL3Rlc3QvTWFr ZWZpbGUgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvZGZvci8uZ2l0 aWdub3JlICAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL3Rlc3QvZGZvci9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgfCAgNDggKysrCiBzcmMvdGVzdC9kZm9yL3Rlc3QuaCAgICAgICAg ICAgICAgICAgICB8ICAzMSArKwogc3JjL3Rlc3QvZGZvci90ZXN0X2JpdHBhY2tfdTE2LmMg ICAgICAgfCAzNTcgKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9kZm9yL3Rlc3Rf dW5pcXNvcnR2ZWN0X3UxNi5jICB8IDI2MyArKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9k Zm9yL3Rlc3RfdmVjdF91MTYuYyAgICAgICAgICB8IDE2OCArKysrKysrKysrCiBzcmMvdGVz dC9saWJ0YXAvLmdpdGlnbm9yZSAgICAgICAgICAgICB8ICAxMyArCiBzcmMvdGVzdC9saWJ0 YXAvLnRyYXZpcy55bWwgICAgICAgICAgICB8ICAxMyArCiBzcmMvdGVzdC9saWJ0YXAvQ09Q WUlORyAgICAgICAgICAgICAgICB8IDE2NSArKysrKysrKysrCiBzcmMvdGVzdC9saWJ0YXAv SU5TVEFMTCAgICAgICAgICAgICAgICB8ICA0MSArKysKIHNyYy90ZXN0L2xpYnRhcC9NYWtl ZmlsZSAgICAgICAgICAgICAgIHwgIDczICsrKysrCiBzcmMvdGVzdC9saWJ0YXAvTWFrZWZp bGUud2luICAgICAgICAgICB8ICAzNyArKysKIHNyYy90ZXN0L2xpYnRhcC9SRUFETUUubWQg ICAgICAgICAgICAgIHwgMjY4ICsrKysrKysrKysrKysrKysKIHNyYy90ZXN0L2xpYnRhcC90 YXAuYyAgICAgICAgICAgICAgICAgIHwgNDE3ICsrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy90ZXN0L2xpYnRhcC90YXAuaCAgICAgICAgICAgICAgICAgIHwgMTE1ICsrKysrKysK IDM1IGZpbGVzIGNoYW5nZWQsIDI4MjQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2xpYi9NYWtlZmlsZS5kZm9yCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvbGliL2JpdHBhY2tfdGVtcGwuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2xpYi9iaXRwYWNrX3UxNi5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2JhY2tlbmQvbGliL3ZlY3RfdGVtcGwuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9iYWNrZW5kL2xpYi92ZWN0X3UxNi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L2luY2x1ZGUvbGliL2JpdHBhY2tfc3RhcGxlX3RlbXBsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvaW5jbHVkZS9saWIvYml0cGFja190ZW1wbC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdGVtcGxfdW5kZWYuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9pbmNsdWRlL2xpYi9iaXRwYWNrX3UxNi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdTE2X2NvbmZpZy5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2luY2x1ZGUvbGliL3ZlY3RfdGVtcGwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9pbmNsdWRlL2xpYi92ZWN0X3RlbXBsX3N0YXBsZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2luY2x1ZGUvbGliL3ZlY3RfdGVtcGxfdW5kZWYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9pbmNsdWRlL2xpYi92ZWN0X3UxNi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2lu Y2x1ZGUvbGliL3ZlY3RfdTE2X2NvbmZpZy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvZGZvci8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvZGZvci9N YWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2Rmb3IvdGVzdC5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvZGZvci90ZXN0X2JpdHBhY2tfdTE2LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9kZm9yL3Rlc3RfdW5pcXNvcnR2ZWN0X3UxNi5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvZGZvci90ZXN0X3ZlY3RfdTE2LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9saWJ0YXAvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L2xpYnRhcC8udHJhdmlzLnltbAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L2xpYnRhcC9DT1BZSU5HCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv bGlidGFwL0lOU1RBTEwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9saWJ0YXAvTWFr ZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9saWJ0YXAvTWFrZWZpbGUud2lu CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbGlidGFwL1JFQURNRS5tZAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2xpYnRhcC90YXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L2xpYnRhcC90YXAuaAoKZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmluIGIv R05VbWFrZWZpbGUuaW4KaW5kZXggY2Y2ZTc1OTQ4NmUuLjNkOWE0MmQ2YWQ0IDEwMDY0NAot LS0gYS9HTlVtYWtlZmlsZS5pbgorKysgYi9HTlVtYWtlZmlsZS5pbgpAQCAtNjksNiArNjks NyBAQCBjaGVjayBjaGVjay10ZXN0cyBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLXBhcmFs bGVsIGluc3RhbGxjaGVjay10ZXN0czogc3VibWFrZQogCSQoTUFLRSkgLUMgc3JjL3Rlc3Qv cmVncmVzcyAkQAogCiAkKGNhbGwgcmVjdXJzZSxjaGVjay13b3JsZCxzcmMvdGVzdCBzcmMv cGwgc3JjL2ludGVyZmFjZXMgY29udHJpYiBzcmMvYmluIHNyYy90b29scy9wZ19ic2RfaW5k ZW50LGNoZWNrKQorJChjYWxsIHJlY3Vyc2UsY2hlY2stdW5pdCxzcmMvdGVzdCxjaGVjay11 bml0KQogJChjYWxsIHJlY3Vyc2UsY2hlY2twcmVwLCAgc3JjL3Rlc3Qgc3JjL3BsIHNyYy9p bnRlcmZhY2VzIGNvbnRyaWIgc3JjL2JpbikKIAogJChjYWxsIHJlY3Vyc2UsaW5zdGFsbGNo ZWNrLXdvcmxkLHNyYy90ZXN0IHNyYy9wbCBzcmMvaW50ZXJmYWNlcyBjb250cmliIHNyYy9i aW4saW5zdGFsbGNoZWNrKQpkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmdsb2JhbC5pbiBi L3NyYy9NYWtlZmlsZS5nbG9iYWwuaW4KaW5kZXggOTQ3YTJkNzllMjkuLmRmZDlkOWE3YmVi IDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUuZ2xvYmFsLmluCisrKyBiL3NyYy9NYWtlZmls ZS5nbG9iYWwuaW4KQEAgLTE5LDcgKzE5LDcgQEAKICMKICMgTWV0YSBjb25maWd1cmF0aW9u CiAKLXN0YW5kYXJkX3RhcmdldHMgPSBhbGwgaW5zdGFsbCBpbnN0YWxsZGlycyB1bmluc3Rh bGwgY2xlYW4gZGlzdGNsZWFuIGNvdmVyYWdlIGNoZWNrIGNoZWNrcHJlcCBpbnN0YWxsY2hl Y2sgaW5pdC1wbyB1cGRhdGUtcG8KK3N0YW5kYXJkX3RhcmdldHMgPSBhbGwgaW5zdGFsbCBp bnN0YWxsZGlycyB1bmluc3RhbGwgY2xlYW4gZGlzdGNsZWFuIGNvdmVyYWdlIGNoZWNrIGNo ZWNrcHJlcCBpbnN0YWxsY2hlY2sgY2hlY2stdW5pdCBpbml0LXBvIHVwZGF0ZS1wbwogIyB0 aGVzZSB0YXJnZXRzIHNob3VsZCByZWN1cnNlIGV2ZW4gaW50byBzdWJkaXJlY3RvcmllcyBu b3QgYmVpbmcgYnVpbHQ6CiBzdGFuZGFyZF9hbHdheXNfdGFyZ2V0cyA9IGNsZWFuIGRpc3Rj bGVhbgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWIvTWFrZWZpbGUgYi9zcmMvYmFj a2VuZC9saWIvTWFrZWZpbGUKaW5kZXggYjZjZWZkOWNjYTAuLjc0MTY3YmM5ZTRjIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9saWIvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvbGli L01ha2VmaWxlCkBAIC0xMiw2ICsxMiw4IEBAIHN1YmRpciA9IHNyYy9iYWNrZW5kL2xpYgog dG9wX2J1aWxkZGlyID0gLi4vLi4vLi4KIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9N YWtlZmlsZS5nbG9iYWwKIAoraW5jbHVkZSBNYWtlZmlsZS5kZm9yCisKIE9CSlMgPSBcCiAJ YmlwYXJ0aXRlX21hdGNoLm8gXAogCWJsb29tZmlsdGVyLm8gXApAQCAtMjIsNSArMjQsOCBA QCBPQkpTID0gXAogCWtuYXBzYWNrLm8gXAogCXBhaXJpbmdoZWFwLm8gXAogCXJidHJlZS5v IFwKKwkkKE9CSlNfREZPUikgXAorCitDUFBGTEFHUyA6PSAtSSQodG9wX3NyY2Rpcikvc3Jj L2JhY2tlbmQvbGliICQoQ1BQRkxBR1MpCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMv YmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi9NYWtlZmls ZS5kZm9yIGIvc3JjL2JhY2tlbmQvbGliL01ha2VmaWxlLmRmb3IKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI5M2M2ZTc4NjQ0Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvbGliL01ha2VmaWxlLmRmb3IKQEAgLTAsMCArMSw1IEBACisjIE1h a2VmaWxlLmRmb3IKKworT0JKU19ERk9SIDo9IFwKKwliaXRwYWNrX3UxNi5vIFwKKwl2ZWN0 X3UxNi5vCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWIvYml0cGFja190ZW1wbC5jIGIv c3JjL2JhY2tlbmQvbGliL2JpdHBhY2tfdGVtcGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZjg2YWJkNDg1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmFja2VuZC9saWIvYml0cGFja190ZW1wbC5jCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICog Yml0cGFja190ZW1wbC5jCisgKgorICogVGhlIEJJVFBBQ0sgdW5pdCBpbXBsZW1lbnRzIHJv dXRpbmVzIHBlcnRhaW5pbmcgdG8gYml0LXBhY2tpbmcuIFRoZSBiaXRwYWNrCisgKiB1bml0 IGFsbG93IGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgdG8gY3JlYXRlIGhpZ2gtZGVuc2l0eSBh cnJheXMgcGFja2VkCisgKiBiaXQtYnktYml0LiBJbiBnZW5lcmFsLCB3aWR0aCBvZiBlYWNo IGl0ZW0gaW4gYSBiaXRwYWNrZWQgYXJyYXkgY2FuIHZhcnkgYW5kCisgKiBoYXZlIG5vdCB0 byBiZSBvZiBmaXhlZCwgaXRlbXMgY2FuIGhhdmUgZGlmZmVyZW50IGxlbmd0aC4KKyAqLwor CisjaW5jbHVkZSAibGliL2JpdHBhY2tfc3RhcGxlX3RlbXBsLmgiCisKK2l0ZW1fdCB3aWR0 aF9mcm9tX3ZhbChpdGVtX3QgdmFsKTsKK2l0ZW1fdCB3aWR0aF90b19tYXNrKHNpemVfdCB3 aWR0aCk7CitzaXplX3QgYml0cGFja19wYWNrKHVpbnQ4X3QgKnBhY2ssIHNpemVfdCBjYXJl dCwgaXRlbV90IGl0ZW0sCisJCQkJCXNpemVfdCBzekl0ZW1XaWR0aCk7CitpdGVtX3QgYml0 cGFja191bnBhY2soY29uc3QgdWludDhfdCAqcGFjaywgc2l6ZV90ICpjYXJldCwgc2l6ZV90 IHN6SXRlbVdpZHRoKTsKKworLyoKKyAqIFNpbmNlIHdpZHRoIG9mIGl0ZW1fdCBjYW5ub3Qg YmUgbW9yZSB0aGFuIGxlbmd0aCBvZiBpdGVtX3QKKyAqIGxnKE1BWChpdGVtX3QpKSsxLCB3 ZSB1c2UgdGhlIGl0ZW1fdCB0eXBlIGZvciByZXR1cm5lZCB2YWx1ZQorICovCitpdGVtX3QK K3dpZHRoX2Zyb21fdmFsKGl0ZW1fdCB2YWwpCit7CisJaXRlbV90IHdpZHRoID0gMDsKKwor CXdoaWxlICh2YWwpIHsKKwkJd2lkdGgrKzsKKwkJdmFsID0gdmFsID4+IDE7CisJfQorCisJ cmV0dXJuIHdpZHRoID09IDAgPyAxIDogd2lkdGg7Cit9CisKK2l0ZW1fdAord2lkdGhfdG9f bWFzayhzaXplX3Qgd2lkdGgpCit7CisJc2l6ZV90IG1hc2sgPSAwOworCisJYXNzZXJ0KHdp ZHRoICE9IDApOworCWFzc2VydCh3aWR0aCA8PSBzaXplb2YoaXRlbV90KSAqIDgpOworCisJ aWYgKGxpa2VseSh3aWR0aCA8IHNpemVvZihzaXplX3QpKSkKKwkJbWFzayA9ICgxIDw8IHdp ZHRoKSAtIDE7CisJZWxzZQorCQl3aGlsZSAod2lkdGgtLSkKKwkJCW1hc2sgPSAobWFzayA8 PCAxKSB8IDE7CisKKwlyZXR1cm4gKGl0ZW1fdCltYXNrOworfQorCitzaXplX3QKK2JpdHBh Y2tfcGFjayh1aW50OF90ICpwYWNrLCBzaXplX3QgY2FyZXQsIGl0ZW1fdCBpdGVtLCBzaXpl X3Qgc3pJdGVtV2lkdGgpCit7CisJc2l6ZV90IHN6SXRlbVdpZHRoVG9HbyA9IHN6SXRlbVdp ZHRoOworCWl0ZW1fdCBpdG1NYXNrVG9HbyA9IHdpZHRoX3RvX21hc2soc3pJdGVtV2lkdGgp OworCisJd2hpbGUgKHN6SXRlbVdpZHRoVG9HbyA+IDApIHsKKwkJc2l6ZV90IGNudFNhdmVk Qml0czsKKwkJc2l6ZV90IGJ5dGUgPSBjYXJldCAvIDg7CisJCXNpemVfdCBvZmYgPSBjYXJl dCAlIDg7CisJCXVpbnQ4X3QgdWJDaHVuayA9ICh1aW50OF90KWl0ZW0gPDwgb2ZmOworCQlp dGVtX3QgaXRtQ2h1bmtNYXNrID0gaXRtTWFza1RvR28gPDwgb2ZmOworCQkvKgorCQkgKiBB cHBseWluZyBjaHVuayB1c2luZyB0aGUgbWFzay4gU2V0dGluZyBiaXRzIHRvIG9uZSBhbmQg cmVzZXR0aW5nIGJpdHMKKwkJICogdG8gemVybyBpcyBvbmx5IGluIHNjb3BlcyBkZWZpbmVk IGJ5IHRoZSBtYXNrLiBaZXJvaW5nIG9mIGJpdHMKKwkJICogYWNjb3JkaW5nIHRvIGEgbWFz aywgd2UgY2FuIHVzZSBldmVuIGEgcGFjayBub3QgYmVlbiBudWxsZWQgaW4KKwkJICogYWR2 YW5jZS4KKwkJICovCisJCXBhY2tbYnl0ZV0gfD0gKHViQ2h1bmsgJiBpdG1DaHVua01hc2sp OworCQlwYWNrW2J5dGVdICY9ICh1YkNodW5rIHwgfml0bUNodW5rTWFzayk7CisJCWNudFNh dmVkQml0cyA9ICg4IC0gb2ZmID4gc3pJdGVtV2lkdGhUb0dvKSA/CisJCQlzekl0ZW1XaWR0 aFRvR28gOgorCQkJOCAtIG9mZjsgLy8gbnVtYmVyIG9mIHNhdmVkIGJpdHMKKwkJc3pJdGVt V2lkdGhUb0dvIC09IGNudFNhdmVkQml0czsKKwkJY2FyZXQgKz0gY250U2F2ZWRCaXRzOwor CQlpdGVtID0gaXRlbSA+PiBjbnRTYXZlZEJpdHM7CisJCWl0bU1hc2tUb0dvID0gaXRtTWFz a1RvR28gPj4gY250U2F2ZWRCaXRzOworCX0KKwlyZXR1cm4gY2FyZXQ7Cit9CisKK2l0ZW1f dAorYml0cGFja191bnBhY2soY29uc3QgdWludDhfdCAqcGFjaywgc2l6ZV90ICpjYXJldCwg c2l6ZV90IHdpZEl0ZW0pCit7CisJc2l6ZV90IHN6SXRlbUNhcmV0OworCXNpemVfdCBzekl0 ZW1XaWR0aFRvR287CisJdWludDhfdCBpdGVtW3NpemVvZihpdGVtX3QpXTsgLyogc2l6ZSBv ZiBpdGVtIGFycmF5ICovCisKKwlzaXplX3Qgc3pQYWNrQnl0ZTsKKwlzaXplX3Qgc3pQYWNr T2ZmOworCXNpemVfdCBzekl0ZW1CeXRlOworCXNpemVfdCBzekl0ZW1PZmY7CisJdWludDhf dCB1YkNodW5rOworCisJc3pJdGVtQ2FyZXQgPSAwOworCXN6SXRlbVdpZHRoVG9HbyA9IHdp ZEl0ZW07CisJbWVtc2V0KGl0ZW0sIDAsIHNpemVvZihpdGVtX3QpKTsKKworCXdoaWxlIChz ekl0ZW1XaWR0aFRvR28gPiAwKSB7CisJCXNpemVfdCBzekNodW5rU2l6ZTsKKwkJc2l6ZV90 IHN6Q2h1bmtMb3dTaXplLCBzekNodW5rSGlnaFNpemU7CisKKwkJc3pQYWNrQnl0ZSA9ICpj YXJldCAvIDg7CisJCXN6UGFja09mZiA9ICpjYXJldCAlIDg7CisJCXN6SXRlbUJ5dGUgPSBz ekl0ZW1DYXJldCAvIDg7CisJCXN6SXRlbU9mZiA9IHN6SXRlbUNhcmV0ICUgODsKKworCQl1 YkNodW5rID0gcGFja1tzelBhY2tCeXRlXSA+PiBzelBhY2tPZmY7CisKKwkJc3pDaHVua1Np emUgPSA4IC0gc3pQYWNrT2ZmOworCQlpZiAoc3pJdGVtV2lkdGhUb0dvIDwgc3pDaHVua1Np emUpIHsKKwkJCXN6Q2h1bmtTaXplID0gc3pJdGVtV2lkdGhUb0dvOworCQkJdWJDaHVuayA9 IHViQ2h1bmsgJiAodWludDhfdCl3aWR0aF90b19tYXNrKHN6SXRlbVdpZHRoVG9Hbyk7CisJ CX0KKworCQlpZiAoc3pDaHVua1NpemUgPiAoOCAtIHN6SXRlbU9mZikpIC8qIEZyZWUgc3Bh Y2Ugb2YgaXRlbVtzekl0ZW1CeXRlXSAqLworCQl7CisJCQlzekNodW5rTG93U2l6ZSA9IDgg LSBzekl0ZW1PZmY7CisJCQlzekNodW5rSGlnaFNpemUgPSBzekNodW5rU2l6ZSAtIHN6Q2h1 bmtMb3dTaXplOworCQl9IGVsc2UgeworCQkJc3pDaHVua0xvd1NpemUgPSBzekNodW5rU2l6 ZTsKKwkJCXN6Q2h1bmtIaWdoU2l6ZSA9IDA7CisJCX0KKworCQlpdGVtW3N6SXRlbUJ5dGVd IHw9IHViQ2h1bmsgPDwgc3pJdGVtT2ZmOyAvKiBjaHVua19sb3cgKi8KKworCQlpZiAoc3pD aHVua0hpZ2hTaXplICE9IDApIHsKKwkJCWFzc2VydCgoc3pJdGVtQnl0ZSArIDEpIDwgc2l6 ZW9mKGl0ZW1fdCkpOyAvKiBzaXplIG9mIGl0ZW0gYXJyYXkgKi8KKwkJCWl0ZW1bc3pJdGVt Qnl0ZSArIDFdIHw9IHViQ2h1bmsgPj4gc3pDaHVua0xvd1NpemU7IC8qIGNodW5rX2hpZ2gg Ki8KKwkJfQorCisJCSpjYXJldCArPSBzekNodW5rU2l6ZTsKKwkJc3pJdGVtQ2FyZXQgKz0g c3pDaHVua1NpemU7CisJCXN6SXRlbVdpZHRoVG9HbyAtPSBzekNodW5rU2l6ZTsKKwl9CisK KwkvKgorCSAqIFJlb3JkZXJpbmcgYnl0ZXMgaW4gYWNjb3JkYW5jZSB3aXRoIGVuZGlhbm5l c3Mgb2YgdGhlIHN5c3RlbS4KKwkgKgorCSAqIEhlcmUgZm9yIGEgTGl0dGxlLWVuZGlhbiBz eXN0ZW0gd2UgY2FuIGF2b2lkIHJlb3JkZXJpbmcsIGJ1dCBpbiBzdWNoIGEKKwkgKiBjYXNl IHdlIG5lZWQgdG8ga2VlcCB0aGUgaXRlbSBhcnJheSBhbGlnbmVkIHdpdGggaXRlbV90IHR5 cGUsIGJ1dCB3ZSBkbworCSAqIG5vdCBrZWVwLgorCSAqLworCXsKKwkJc2l6ZV90IGogPSAx OworCQlpdGVtX3QgdmFsID0gaXRlbVtzaXplb2YoaXRlbV90KSAtIGpdOworCQl3aGlsZSAo KytqIDw9IHNpemVvZihpdGVtX3QpKSB7CisJCQl2YWwgPSB2YWwgPDwgODsKKwkJCXZhbCB8 PSBpdGVtW3NpemVvZihpdGVtX3QpIC0gal07CisJCX0KKwkJcmV0dXJuIHZhbDsKKwl9Cit9 CisKKyNpbmNsdWRlICJsaWIvYml0cGFja190ZW1wbF91bmRlZi5oIgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvbGliL2JpdHBhY2tfdTE2LmMgYi9zcmMvYmFja2VuZC9saWIvYml0cGFj a191MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWUyZWU2 ZDZiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9saWIvYml0cGFja191MTYu YwpAQCAtMCwwICsxLDggQEAKKy8qCisgKiBGaWxlOiBiaXRwYWNrX3UxNi5jCisgKi8KKwor LyogY2xhbmctZm9ybWF0IG9mZiAqLworI2luY2x1ZGUgImxpYi9iaXRwYWNrX3UxNl9jb25m aWcuaCIKKyNpbmNsdWRlICJiaXRwYWNrX3RlbXBsLmMiCisvKiBjbGFuZy1mb3JtYXQgb24g Ki8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi92ZWN0X3RlbXBsLmMgYi9zcmMvYmFj a2VuZC9saWIvdmVjdF90ZW1wbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5mMDI0YjllYmQ5OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2xp Yi92ZWN0X3RlbXBsLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBGaWxlOiB2ZWN0X3Rl bXBsLmMKKyAqLworCisjaW5jbHVkZSAibGliL3ZlY3RfdGVtcGxfc3RhcGxlLmgiCisKKy8q CisgKiBWZWN0b3IncyBmdW5jdGlvbnMKKyAqIEtlZXAgdGhpcyBzZWN0aW9uIGVxdWFsIHRv IHRoZSBzYW1lIHNlY3Rpb24gaW4gdmVjdF90ZW1wbC5oCisgKi8KKy8qCisgKiBDYWxsZXIg aGFzIHRvIGNvbnRyb2wgd2hldGhlciB2ZWN0b3IgdXNlIG91dGVyIG1lbW9yeSBwcm92aWRl ZCBieSBjYWxsZXIgb3IKKyAqIG1hbmFnZSBtZW1vcnkgYWxsb2NhdGlvbiBhdXRvbWF0aWNh bGx5LCB3aGljaCBkZWZpbmVzIHdoZXRoZXIgdmVjdF9pbnNlcnQsCisgKiB2ZWN0X2FwcGVu ZCBhbmQgb3RoZXIgZnVuY3Rpb25zIG9mIHRoZSB2ZWN0b3IgY29udGFpbmVyIGF1dG9tYXRp Y2FsbHkgbWFuZ2UKKyAqIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gb3Igbm90LgorICov CisKK2ludCB2ZWN0X2luaXQodmVjdF90ICp2LCBzaXplX3QgY2FwLCBpdGVtX3Qgb3V0ZXJf bWVtW10pOworaW50IHZlY3RfZmlsbCh2ZWN0X3QgKnYsIHNpemVfdCBjbnQsIGNvbnN0IGl0 ZW1fdCBpbltdKTsKK2ludCB2ZWN0X3Jlc2VydmUodmVjdF90ICp2LCBzaXplX3Qgc3pOZXdD YXApOworaW50IHZlY3RfYXBwZW5kKHZlY3RfdCAqdmVjdCwgaXRlbV90IHZhbCk7Cit2b2lk IHZlY3RfcHJpbnQoY29uc3QgdmVjdF90ICphKTsKK2ludCB2ZWN0X2NvbXBhcmUoY29uc3Qg dmVjdF90ICphLCBjb25zdCB2ZWN0X3QgKmIpOworaW50IHZlY3RfaW5zZXJ0KHZlY3RfdCAq diwgc2l6ZV90IHBvcywgaXRlbV90IHZhbCk7Cit2b2lkIHZlY3RfY2xlYXIodmVjdF90ICp2 KTsKKworLyoKKyAqIFVuaXF1ZSBzb3J0ZWQgdmVjdG9yJ3MgZnVuY3Rpb25zCisgKiBLZWVw IHRoaXMgc2VjdGlvbiBlcXVhbCB0byB0aGUgc2FtZSBzZWN0aW9uIGluIHZlY3RfdGVtcGwu aAorICovCit1c3ZfaW5zX3Jlc190IHVzdl9pbnNlcnQodW5pcXNvcnR2ZWN0X3QgKmEsIGl0 ZW1fdCB2YWwpOwordXN2X3NyY2hfcmVzX3QgdXN2X3NlYXJjaChjb25zdCB1bmlxc29ydHZl Y3RfdCAqdXN2LCBpdGVtX3QgdmFsKTsKKworaW50Cit2ZWN0X2luaXQodmVjdF90ICp2LCBz aXplX3QgY2FwLCBpdGVtX3Qgb3V0ZXJfbWVtW10pCit7CisJaWYgKHYgPT0gTlVMTCkKKwkJ Z290byB2ZWN0X2luaXRfZXJyb3I7CisKKwl2LT5jYXAgPSBjYXA7CisJdi0+Y250ID0gMDsK KworCWlmIChvdXRlcl9tZW0gIT0gTlVMTCkKKwl7CisJCXYtPm1lbV9pc19vdXRlciA9IHRy dWU7CisJCXYtPm0gPSBvdXRlcl9tZW07CisJfQorCWVsc2UKKwl7CisJCXYtPm1lbV9pc19v dXRlciA9IGZhbHNlOworCQlpZiAoY2FwID09IDApCisJCQl2LT5tID0gTlVMTDsKKwkJZWxz ZQorCQl7CisJCQl2LT5tID0gKGl0ZW1fdCAqKVZFQ1RfTUFMTE9DKGNhcCAqIHNpemVvZihp dGVtX3QpKTsKKwkJCWlmICh2LT5tID09IE5VTEwpCisJCQkJZ290byB2ZWN0X2luaXRfZXJy b3I7CisJCX0KKwl9CisKKwkvKiB2ZWN0X2luaXRfb2s6ICovCisJcmV0dXJuIDA7Cit2ZWN0 X2luaXRfZXJyb3I6CisJbWVtc2V0KCZ2LCAwLCBzaXplb2YodmVjdF90KSk7CisJcmV0dXJu IC0xOworfQorCitpbnQKK3ZlY3RfZmlsbCh2ZWN0X3QgKnYsIHNpemVfdCBjbnQsIGNvbnN0 IGl0ZW1fdCBpbltdKQoreworCWlmICh2ID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlm IChjbnQgPT0gMCkKKwl7CisJCXZlY3RfY2xlYXIodik7CisJCXJldHVybiAwOworCX0KKwor CWZvciAoc2l6ZV90IGogPSAwOyBqIDwgY250OyBqKyspCisJeworCQlpZiAodmVjdF9hcHBl bmQodiwgaW5bal0pICE9IDApCisJCXsKKwkJCXZlY3RfY2xlYXIodik7CisJCQlyZXR1cm4g LTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludAordmVjdF9yZXNlcnZlKHZlY3Rf dCAqdiwgc2l6ZV90IHN6TmV3Q2FwKQoreworCWl0ZW1fdCAqbU5ldzsKKworCWlmICh2LT5t ZW1faXNfb3V0ZXIpCisJCXJldHVybiAtMTsKKworCWlmIChzek5ld0NhcCA8PSB2LT5jYXAp CisJCXJldHVybiAwOworCisJbU5ldyA9IChpdGVtX3QgKikgVkVDVF9NQUxMT0Moc2l6ZW9m KGl0ZW1fdCkgKiBzek5ld0NhcCk7CisKKwlpZiAobU5ldyA9PSBOVUxMKQorCQlyZXR1cm4g LTE7CisKKwltZW1jcHkobU5ldywgdi0+bSwgdi0+Y250ICogc2l6ZW9mKGl0ZW1fdCkpOwor CVZFQ1RfRlJFRSh2LT5tKTsKKwl2LT5tID0gbU5ldzsKKwl2LT5jYXAgPSBzek5ld0NhcDsK KwlyZXR1cm4gMDsKK30KKworaW50Cit2ZWN0X2FwcGVuZCh2ZWN0X3QgKnZlY3QsIGl0ZW1f dCB2YWwpCit7CisJaWYgKHZlY3QgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHZl Y3QtPmNudCArIDEgPiB2ZWN0LT5jYXApCisJeworCQlpZiAodmVjdC0+bWVtX2lzX291dGVy KQorCQkJcmV0dXJuIC0xOworCQllbHNlCisJCQl2ZWN0X3Jlc2VydmUodmVjdCwgdmVjdC0+ Y2FwICsgVkVDVF9NRU1BTExPQ1NURVApOworCX0KKworCXZlY3QtPm1bdmVjdC0+Y250XSA9 IHZhbDsKKwl2ZWN0LT5jbnQrKzsKKwlyZXR1cm4gMDsKK30KKwordm9pZAordmVjdF9wcmlu dChjb25zdCB2ZWN0X3QgKmEpCit7CisJZm9yIChzaXplX3QgaiA9IDA7IGogPCBhLT5jbnQ7 IGorKykKKwkJcHJpbnRmKCIlIiBWRUNUX0lURU1fRk9STUFUX1NQRUNJRklFUiAiICIsIGEt Pm1bal0pOworCisJcHJpbnRmKCJcbiIpOworfQorCitpbnQKK3ZlY3RfY29tcGFyZShjb25z dCB2ZWN0X3QgKmEsIGNvbnN0IHZlY3RfdCAqYikKK3sKKwlpZiAoYSA9PSBOVUxMIHx8IGIg PT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGEtPmNudCAhPSBiLT5jbnQpCisJCXJl dHVybiAtMTsKKworCWZvciAoc2l6ZV90IGogPSAwOyBqIDwgYS0+Y250OyBqKyspCisJCWlm IChhLT5tW2pdICE9IGItPm1bal0pCisJCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30K KworaW50Cit2ZWN0X2luc2VydCh2ZWN0X3QgKnYsIHNpemVfdCBwb3MsIGl0ZW1fdCB2YWwp Cit7CisJaWYgKHYtPmNhcCA8IHYtPmNudCArIDEgJiYKKwkJKHYtPm1lbV9pc19vdXRlciB8 fCB2ZWN0X3Jlc2VydmUodiwgdi0+Y2FwICsgVkVDVF9NRU1BTExPQ1NURVApICE9IDApKQor CQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIElmIG5lZWQsIG1vdmUgcmlnaHQgZnJvbSBwb3Mg aW5jbHVkaW5nIHBvcy4gQmVjYXVzZQorCSAqIG5laXRoZXIgc3RkbGliJ3Mgbm9yIFBPU0lY J3MgZG9jdW1lbnRhdGlvbiBkZWZpbmVzIHRoZQorCSAqIGJlaGF2aW91ciBvZiBtZW1tb3Zl IGluIGNhc2Ugb2YgY291bnQ9MCwgd2UgY2hlY2sgaXQgYnkKKwkgKiBvdXJzZWx2ZXMuCisJ ICovCisJaWYgKHYtPmNudCAtIHBvcyA+IDApCisJCW1lbW1vdmUoJnYtPm1bcG9zICsgMV0s ICZ2LT5tW3Bvc10sICh2LT5jbnQgLSBwb3MpICogc2l6ZW9mKGl0ZW1fdCkpOworCisJdi0+ bVtwb3NdID0gdmFsOworCXYtPmNudCsrOworCXJldHVybiAwOworfQorCit2b2lkCit2ZWN0 X2NsZWFyKHZlY3RfdCAqdikKK3sKKwlpZiAodiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlp ZiAoIXYtPm1lbV9pc19vdXRlcikKKwkJVkVDVF9GUkVFKHYtPm0pOworCisJbWVtc2V0KHYs IDAsIHNpemVvZih2ZWN0X3QpKTsKK30KKwordXN2X3NyY2hfcmVzX3QKK3Vzdl9zZWFyY2go Y29uc3QgdW5pcXNvcnR2ZWN0X3QgKnVzdiwgaXRlbV90IHZhbCkKK3sKKwlzaXplX3QgaSwg bCwgZzsKKwl1c3Zfc3JjaF9yZXNfdCByZXM7CisKKwlpZiAodXN2ID09IE5VTEwgfHwgKHVz di0+bSA9PSBOVUxMICYmICgodXN2LT5jbnQgIT0gMCkgfHwgdXN2LT5jYXAgIT0gMCkpKSB7 CisJCXJlcy5zdCA9IFVTVl9TUkNIX0VSUk9SOworCQlyZXR1cm4gcmVzOworCX0KKworCWlm ICh1c3YtPmNudCA9PSAwKSB7CisJCXJlcy5wb3MgPSAwOworCQlyZXMuc3QgPSBVU1ZfU1JD SF9FTVBUWTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlpZiAodmFsIDwgdXN2LT5tWzBdKSB7 CisJCXJlcy5wb3MgPSAwOworCQlyZXMuc3QgPSBVU1ZfU1JDSF9OT1RfRk9VTkRfU01BTExF U1Q7CisJCXJldHVybiByZXM7CisJfQorCisJaWYgKHZhbCA+IHVzdi0+bVt1c3YtPmNudCAt IDFdKSB7CisJCXJlcy5wb3MgPSB1c3YtPmNudCAtIDE7CisJCXJlcy5zdCA9IFVTVl9TUkNI X05PVF9GT1VORF9MQVJHRVNUOworCQlyZXR1cm4gcmVzOworCX0KKworCWwgPSAwOworCWcg PSB1c3YtPmNudCAtIDE7CisKKwl3aGlsZSAoZyAtIGwgPiAxKSB7CisJCWkgPSBsICsgKGcg LSBsKSAvIDI7CisJCWlmICh2YWwgPT0gdXN2LT5tW2ldKSB7CisJCQlyZXMucG9zID0gaTsK KwkJCXJlcy5zdCA9IFVTVl9TUkNIX0ZPVU5EOworCQkJcmV0dXJuIHJlczsKKwkJfSBlbHNl IGlmICh2YWwgPiB1c3YtPm1baV0pIHsKKwkJCWwgPSBpOworCQl9IGVsc2UgLy8gdmFsIDw9 IHVzdi0+bVtpXQorCQl7CisJCQlnID0gaTsKKwkJfQorCX0KKwkvKgorCSAqIFdoZW4gc2Nv cGVzIGwgYW5kIGcgYXJlIG5laWdoYm91cnMgKCAgZy1sID0gMSkKKwkgKi8KKwlpZiAodmFs ID09IHVzdi0+bVtnXSkgeworCQlyZXMucG9zID0gZzsKKwkJcmVzLnN0ID0gVVNWX1NSQ0hf Rk9VTkQ7CisJCXJldHVybiByZXM7CisJfSBlbHNlIGlmICh2YWwgPT0gdXN2LT5tW2xdKSB7 CisJCXJlcy5wb3MgPSBsOworCQlyZXMuc3QgPSBVU1ZfU1JDSF9GT1VORDsKKwkJcmV0dXJu IHJlczsKKwl9CisKKwlyZXMucG9zID0gZzsKKwlyZXMuc3QgPSBVU1ZfU1JDSF9OT1RfRk9V TkQ7CisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIElOU0VSVAorICogcmVjZWl2ZXMgYSB2 YWx1ZSwgY2hlY2tzIHdoZXRoZXIgYW4gdW5pcXVlIHNvcnRlZCB2YWx1ZXMgdmVjdG9yIGNv bnRhaW5zCisgKiB0aGlzIHZhbHVlLiBJZiBub3QsIGluc2VydHMgbmV3IHZhbHVlLCByZXRh aW5pbmcgc29ydGVkIG9yZGVyLgorICovCit1c3ZfaW5zX3Jlc190Cit1c3ZfaW5zZXJ0KHVu aXFzb3J0dmVjdF90ICphLCBpdGVtX3QgdmFsKQoreworCXVzdl9zcmNoX3Jlc190IHNlYXJj aDsKKwl1c3ZfaW5zX3Jlc190IGluc2VydDsKKworCWFzc2VydChhICE9IE5VTEwpOworCisJ c2VhcmNoID0gdXN2X3NlYXJjaChhLCB2YWwpOworCWlmIChzZWFyY2guc3QgPT0gVVNWX1NS Q0hfRk9VTkQpIHsKKwkJaW5zZXJ0LnN0ID0gVVNWX0lOU19FWElTVFM7CisJCWluc2VydC5w b3MgPSBzZWFyY2gucG9zOworCQlyZXR1cm4gaW5zZXJ0OworCX0gZWxzZSBpZiAoc2VhcmNo LnN0ID09IFVTVl9TUkNIX05PVF9GT1VORF9TTUFMTEVTVCB8fAorCQkJICAgc2VhcmNoLnN0 ID09IFVTVl9TUkNIX05PVF9GT1VORCkgeworCQlpbnNlcnQucG9zID0gc2VhcmNoLnBvczsK Kwl9IGVsc2UgaWYgKHNlYXJjaC5zdCA9PSBVU1ZfU1JDSF9FTVBUWSB8fAorCQkJICAgc2Vh cmNoLnN0ID09IFVTVl9TUkNIX05PVF9GT1VORF9MQVJHRVNUKSB7CisJCS8qIEluIGNhc2Ug d2hlbiB2YWx1ZSBpcyBtb3JlIHRoYW4gbGFyZ2VzdDogcG9zID0gYS0+Y250ID0gc2VhcmNo LmcgKyAxLgorCQkgKi8KKwkJLyogSW4gY2FzZSBvZiBlbXB0eSB2ZWN0b3I6IHBvcyA9IGEt PmNudCA9IDAuICovCisJCWluc2VydC5wb3MgPSBhLT5jbnQ7CisJfSBlbHNlIC8qIFVTVl9T UkNIX0VSUk9SIG9yIHVua25vd24gcmVzdWx0ICovCisJeworCQlpbnNlcnQuc3QgPSBVU1Zf SU5TX0VSUk9SOworCQlyZXR1cm4gaW5zZXJ0OworCX0KKworCWluc2VydC5zdCA9IHZlY3Rf aW5zZXJ0KGEsIGluc2VydC5wb3MsIHZhbCkKKwk9PSAwID8gVVNWX0lOU19ORVcgOiBVU1Zf SU5TX0VSUk9SOworCisJcmV0dXJuIGluc2VydDsKK30KKworI2luY2x1ZGUgImxpYi92ZWN0 X3RlbXBsX3VuZGVmLmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWIvdmVjdF91MTYu YyBiL3NyYy9iYWNrZW5kL2xpYi92ZWN0X3UxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4wYWI4ZTIyNGM3YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i YWNrZW5kL2xpYi92ZWN0X3UxNi5jCkBAIC0wLDAgKzEsOCBAQAorLyoKKyAqIEZpbGU6IHZl Y3RfdTE2LmMKKyAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisjaW5jbHVkZSAibGli L3ZlY3RfdTE2X2NvbmZpZy5oIgorI2luY2x1ZGUgInZlY3RfdGVtcGwuYyIKKy8qIGNsYW5n LWZvcm1hdCBvbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYy5oIGIvc3JjL2luY2x1 ZGUvYy5oCmluZGV4IGY2NmM3NTJkNGEwLi44MTNhY2UxYzkxNyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYy5oCisrKyBiL3NyYy9pbmNsdWRlL2MuaApAQCAtNDYwLDYgKzQ2MCwxMCBA QAogI2RlZmluZSBDcHBBc1N0cmluZyhpZGVudGlmaWVyKSAjaWRlbnRpZmllcgogI2RlZmlu ZSBDcHBBc1N0cmluZzIoeCkJCQlDcHBBc1N0cmluZyh4KQogI2RlZmluZSBDcHBDb25jYXQo eCwgeSkJCQl4IyN5CisjZGVmaW5lIENwcENvbmNhdDIoeCwgeSkJCUNwcENvbmNhdCh4LCB5 KQorCisjZGVmaW5lIENwcENvbmNhdFRyaXBsZSh4LCB5LCB6KQl4IyN5IyN6CisjZGVmaW5l IENwcENvbmNhdFRyaXBsZTIoYSwgYiwgYykJQ3BwQ29uY2F0VHJpcGxlKGEsIGIsIGMpCiAK IC8qCiAgKiBWQV9BUkdTX05BUkdTCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIvYml0 cGFja19zdGFwbGVfdGVtcGwuaCBiL3NyYy9pbmNsdWRlL2xpYi9iaXRwYWNrX3N0YXBsZV90 ZW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41Yzk5NzJl MDhjYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2xpYi9iaXRwYWNrX3N0YXBs ZV90ZW1wbC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBGaWxlOiBiaXRwYWNrX3N0YXBs ZV90ZW1wbC5oLmgKKyAqLworCisjaW5jbHVkZSAiYy5oIgorCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKiBOT05SRVVTQUJMRSBDT0RFLCBhbGxvd2VkIHRvIGJlIGluY2x1ZGVk IG9ubHkgb25jZQorICoKKyAqIFRoaXMgY29kZSBzaG91bGQgYXBwZWFyIG9ubHkgb25jZSBp biBhIGZpbGUgKG9yIGluIGEgY2hhaW4gb2YgZmlsZXMpCisgKiBpbmNsdWRpbmcgdGhpcyBo ZWFkZXIgd2l0aCAjaW5jbHVkZS4gU28sIHdlIHByb3RlY3QgaXQgZnJvbSBkdXBsaWNhdGVz IGJ5CisgKiBtZWFucyBvZiBtYWNybworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KyNpZm5kZWYgX0JJVFBBQ0tfU1RBUExFX1RFTVBMX0hfVU5JUVVFX0NPREVfCisjZGVmaW5l IF9CSVRQQUNLX1NUQVBMRV9URU1QTF9IX1VOSVFVRV9DT0RFXworCisvKiBObyBjb2RlIGhl cmUgeWV0ICovCisKKyNlbmRpZiAvKiBfQklUUEFDS19TVEFQTEVfVEVNUExfSF9VTklRVUVf Q09ERV8gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW5kIG9mIENvZGUs IGFsbG93ZWQgdG8gYmUgaW5jbHVkZWQgb25seSBvbmNlCisgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJFVVNBQkxFIENPREUK KyAqCisgKiBUaGlzIGNvZGUgY2FuIGJlIHJldXNlZCB3aXRoICNpbmNsdWRlIGRpcmVjdGl2 ZSBpbiBhIGZpbGUgaWYgQklUUEFDS19NQVJLRVIKKyAqIHJlZGVmaW5lZC4gVGhpcyBhbGxv dyBjcmVhdGlvbiBvZiBzZXZlcmFsIHR5cGVzIG9mIHZlY3RvcnMgd2l0aCBkaWZmZXJlbnQK KyAqIHR5cGVzIG9mIG1lbWJlcnMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor CisjaWZuZGVmIEJJVFBBQ0tfSVRFTV9UWVBFCisjZXJyb3IgIkJJVFBBQ0tfSVRFTV9UWVBF IG1hY3JvIGlzIGluZGVmaW5lZC4iCisjZW5kaWYKKyNpZm5kZWYgQklUUEFDS19NQVJLRVIK KyNlcnJvciAiQklUUEFDS19NQVJLRVIgbWFjcm8gaXMgaW5kZWZpbmVkLiIKKyNlbmRpZgor CisjZGVmaW5lIGl0ZW1fdAkJICAgQklUUEFDS19JVEVNX1RZUEUKKyNkZWZpbmUgd2lkdGhf ZnJvbV92YWwgQ3BwQ29uY2F0VHJpcGxlMih3aWR0aF8sIEJJVFBBQ0tfTUFSS0VSLCBfZnJv bV92YWwpCisjZGVmaW5lIHdpZHRoX3RvX21hc2sgIENwcENvbmNhdFRyaXBsZTIod2lkdGhf LCBCSVRQQUNLX01BUktFUiwgX3RvX21hc2spCisjZGVmaW5lIGJpdHBhY2tfcGFjayAgIENw cENvbmNhdFRyaXBsZTIoYml0cGFja18sIEJJVFBBQ0tfTUFSS0VSLCBfcGFjaykKKyNkZWZp bmUgYml0cGFja191bnBhY2sgQ3BwQ29uY2F0VHJpcGxlMihiaXRwYWNrXywgQklUUEFDS19N QVJLRVIsIF91bnBhY2spCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVuZCBv ZiBSZXVzYWJsZSBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBE b24ndCBmb3JnZXQgdG8gaW5jbHVkZSB0aGlzIGNvZGUgaW4geW91ciBmaWxlIHRoYXQgdXNl cyB0aGlzIGhlYWRlcgorICoKKyAqICNpbmNsdWRlICJsaWIvYml0cGFja190ZW1wbF91bmRl Zi5oIgorICoKKyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdGVt cGwuaCBiL3NyYy9pbmNsdWRlL2xpYi9iaXRwYWNrX3RlbXBsLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIzYTZlMDZjMzI4Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdGVtcGwuaApAQCAtMCwwICsxLDE0IEBACisv KgorICogYml0cGFja190ZW1wbC5oCisgKgorICovCisKKyNpbmNsdWRlICJiaXRwYWNrX3N0 YXBsZV90ZW1wbC5oIgorCitleHRlcm4gaXRlbV90IHdpZHRoX2Zyb21fdmFsKGl0ZW1fdCB2 YWwpOworZXh0ZXJuIGl0ZW1fdCB3aWR0aF90b19tYXNrKHNpemVfdCB3aWR0aCk7CitleHRl cm4gc2l6ZV90IGJpdHBhY2tfcGFjayh1aW50OF90ICpwYWNrLCBzaXplX3QgY2FyZXQsIGl0 ZW1fdCBpdGVtLAorCQkJCQkJICAgc2l6ZV90IHN6SXRlbVdpZHRoKTsKK2V4dGVybiBpdGVt X3QgYml0cGFja191bnBhY2soY29uc3QgdWludDhfdCAqcGFjaywgc2l6ZV90ICpjYXJldCwg c2l6ZV90IHN6SXRlbVdpZHRoKTsKKworI2luY2x1ZGUgImJpdHBhY2tfdGVtcGxfdW5kZWYu aCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYi9iaXRwYWNrX3RlbXBsX3VuZGVmLmgg Yi9zcmMvaW5jbHVkZS9saWIvYml0cGFja190ZW1wbF91bmRlZi5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YmY4NjRmZmExNQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9pbmNsdWRlL2xpYi9iaXRwYWNrX3RlbXBsX3VuZGVmLmgKQEAgLTAsMCArMSw1 IEBACisjdW5kZWYgaXRlbV90CisjdW5kZWYgd2lkdGhfZnJvbV92YWwKKyN1bmRlZiB3aWR0 aF90b19tYXNrCisjdW5kZWYgYml0cGFja19wYWNrCisjdW5kZWYgYml0cGFja191bnBhY2sK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYi9iaXRwYWNrX3UxNi5oIGIvc3JjL2luY2x1 ZGUvbGliL2JpdHBhY2tfdTE2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjQ1ZmI2YzRiMTdiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbGli L2JpdHBhY2tfdTE2LmgKQEAgLTAsMCArMSwxMiBAQAorLyoKKyAqIGJpdHBhY2suaAorICov CisjaWZuZGVmIF9CSVRQQUNLX1UxNl9IXworI2RlZmluZSBfQklUUEFDS19VMTZfSF8KKwor LyogY2xhbmctZm9ybWF0IG9mZiAqLworI2luY2x1ZGUgImJpdHBhY2tfdTE2X2NvbmZpZy5o IgorI2luY2x1ZGUgImJpdHBhY2tfdGVtcGwuaCIKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLwor CisjZW5kaWYgLyogX0JJVFBBQ0tfVTE2X0hfICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9saWIvYml0cGFja191MTZfY29uZmlnLmggYi9zcmMvaW5jbHVkZS9saWIvYml0cGFja191 MTZfY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjll NmM2NGQ0ZmVlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tf dTE2X2NvbmZpZy5oCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAqIEZpbGU6IHZlY3RfdTE2X2Nv bmZpZy5oCisgKi8KKworI2RlZmluZSBCSVRQQUNLX0lURU1fVFlQRSB1aW50MTZfdAorI2Rl ZmluZSBCSVRQQUNLX01BUktFUgkgIHUxNgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGli L3ZlY3RfdGVtcGwuaCBiL3NyYy9pbmNsdWRlL2xpYi92ZWN0X3RlbXBsLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhlZWM2ZjA2NGIzCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2luY2x1ZGUvbGliL3ZlY3RfdGVtcGwuaApAQCAtMCwwICsxLDI3IEBA CisvKgorICogRmlsZTogdmVjdF90ZW1wbC5oCisgKi8KKworI2luY2x1ZGUgInZlY3RfdGVt cGxfc3RhcGxlLmgiCisKKy8qCisgKiBWZWN0b3IncyBmdW5jdGlvbnMKKyAqIEtlZXAgdGhp cyBzZWN0aW9uIGVxdWFsIHRvIHRoZSBzYW1lIHNlY3Rpb24gaW4gdmVjdF90ZW1wbC5jCisg Ki8KK2V4dGVybiBpbnQgdmVjdF9pbml0KHZlY3RfdCAqdiwgc2l6ZV90IGNhcCwgaXRlbV90 IGV4dGVybmFsX21lbW9yeVtdKTsKK2V4dGVybiBpbnQgdmVjdF9maWxsKHZlY3RfdCAqdiwg c2l6ZV90IGNudCwgY29uc3QgaXRlbV90ICppbik7CitleHRlcm4gaW50IHZlY3RfcmVzZXJ2 ZSh2ZWN0X3QgKnYsIHNpemVfdCBzek5ld0NhcCk7CitleHRlcm4gaW50IHZlY3RfYXBwZW5k KHZlY3RfdCAqdmVjdCwgaXRlbV90IHZhbCk7CitleHRlcm4gdm9pZCB2ZWN0X3ByaW50KGNv bnN0IHZlY3RfdCAqYSk7CitleHRlcm4gaW50IHZlY3RfY29tcGFyZShjb25zdCB2ZWN0X3Qg KmEsIGNvbnN0IHZlY3RfdCAqYik7CitleHRlcm4gaW50IHZlY3RfaW5zZXJ0KHZlY3RfdCAq diwgc2l6ZV90IHBvcywgaXRlbV90IHZhbCk7CitleHRlcm4gdm9pZCB2ZWN0X2NsZWFyKHZl Y3RfdCAqdik7CisKKy8qCisgKiBVbmlxdWUgc29ydGVkIHZlY3RvcidzIGZ1bmN0aW9ucwor ICogS2VlcCB0aGlzIHNlY3Rpb24gZXF1YWwgdG8gdGhlIHNhbWUgc2VjdGlvbiBpbiB2ZWN0 X3RlbXBsLmMKKyAqLworZXh0ZXJuIHVzdl9pbnNfcmVzX3QgdXN2X2luc2VydCh1bmlxc29y dHZlY3RfdCAqYSwgaXRlbV90IHZhbCk7CitleHRlcm4gdXN2X3NyY2hfcmVzX3QgdXN2X3Nl YXJjaChjb25zdCB1bmlxc29ydHZlY3RfdCAqdXN2LCBpdGVtX3QgdmFsKTsKKworI2luY2x1 ZGUgInZlY3RfdGVtcGxfdW5kZWYuaCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIvdmVjdF90ZW1wbF9zdGFwbGUuaCBiL3NyYy9p bmNsdWRlL2xpYi92ZWN0X3RlbXBsX3N0YXBsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5iMTkyYzZkODJhMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9p bmNsdWRlL2xpYi92ZWN0X3RlbXBsX3N0YXBsZS5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgor ICogRmlsZTogdmVjdF9zdGFwbGVfdGVtcGwuaAorICovCisKKyNpbmNsdWRlICJjLmgiCisK Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5PTlJFVVNBQkxFIENPREUsIGFsbG93 ZWQgdG8gYmUgaW5jbHVkZWQgb25seSBvbmNlCisgKgorICogVGhpcyBjb2RlIHNob3VsZCBh cHBlYXIgb25seSBvbmNlIGluIGEgZmlsZSAob3IgaW4gYSBjaGFpbiBvZiBmaWxlcykKKyAq IGluY2x1ZGluZyB0aGlzIGhlYWRlciB3aXRoICNpbmNsdWRlLiBTbywgd2UgcHJvdGVjdCBp dCBmcm9tIGR1cGxpY2F0ZXMgYnkKKyAqIG1lYW5zIG9mIG1hY3JvCisgKgorICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworI2lmbmRlZiBfVkVDVF9TVEFQTEVfVEVNUExfSF9VTklRVUVf Q09ERV8KKyNkZWZpbmUgX1ZFQ1RfU1RBUExFX1RFTVBMX0hfVU5JUVVFX0NPREVfCisKKy8q CisgKiBTRUFSQ0ggaW4gVmVjdG9yIG9mIFVuaXF1ZSBTb3J0ZWQgbWVtYmVycworICovCit0 eXBlZGVmIGVudW0KK3sKKwlVU1ZfU1JDSF9FUlJPUiA9IC0xLAorCVVTVl9TUkNIX0ZPVU5E ID0gMCwKKwlVU1ZfU1JDSF9FTVBUWSwKKwlVU1ZfU1JDSF9OT1RfRk9VTkQsCisJVVNWX1NS Q0hfTk9UX0ZPVU5EX1NNQUxMRVNULAorCVVTVl9TUkNIX05PVF9GT1VORF9MQVJHRVNUCit9 IHVzdl9zcmNoX3N0YXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwl1c3Zfc3JjaF9zdGF0 X3Qgc3Q7CisJc2l6ZV90IHBvczsgLyogcG9zaXRpb24gKGluZGV4KSBvZiBhIG1lbWJlciB0 aGF0IGlzIGVxdWFsIHRvIHNlYXJjaGVkIHZhbHVlCisJCQkJICogb3IgdGhhdCBpcyBuZWFy ZXN0IGdyZWF0ZXIgbWVtYmVyICovCit9IHVzdl9zcmNoX3Jlc190OworCisvKgorICogSU5T RVJUICBpbiBWZWN0b3Igb2YgVW5pcXVlIFNvcnRlZCBtZW1iZXJzCisgKi8KK3R5cGVkZWYg ZW51bQoreworCVVTVl9JTlNfRVJST1IgPSAtMSwKKwlVU1ZfSU5TX0VYSVNUUyA9IDAsCisJ VVNWX0lOU19ORVcKK30gdXN2X2luc19zdGF0X3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJ dXN2X2luc19zdGF0X3Qgc3Q7CisJc2l6ZV90IHBvczsgLyogcG9zaXRpb24gKGluZGV4KSBv ZiBhIG1lbWJlciB0aGF0IHdhcyBpbnNlcnRlZCBvciB0aGF0IHByb3ZlZAorCQkJCSAqIHRv IGJlIGVxdWFsIHRvIGluc2VydGVkIHZhbHVlCisJCQkJICovCit9IHVzdl9pbnNfcmVzX3Q7 CisKKyNlbmRpZiAvKiBfVkVDVF9TVEFQTEVfVEVNUExfSF9VTklRVUVfQ09ERV8gKi8KKwor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW5kIG9mIENvZGUsIGFsbG93ZWQgdG8g YmUgaW5jbHVkZWQgb25seSBvbmNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJFVVNBQkxFIENPREUKKyAqCisgKiBUaGlz IGNvZGUgY2FuIGJlIHJldXNlZCB3aXRoICNpbmNsdWRlIGRpcmVjdGl2ZSBpbiBhIGZpbGUg aWYgVkVDVF9NQVJLRVIKKyAqIHJlZGVmaW5lZC4gVGhpcyBhbGxvdyBjcmVhdGlvbiBvZiBz ZXZlcmFsIHR5cGVzIG9mIHZlY3RvcnMgd2l0aCBkaWZmZXJlbnQKKyAqIHR5cGVzIG9mIG1l bWJlcnMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFZFQ1Rf SVRFTV9UWVBFCisjZXJyb3IgIlZFQ1RfSVRFTV9UWVBFIG1hY3JvIGlzIGluZGVmaW5lZC4i CisjZW5kaWYKKworI2lmbmRlZiBWRUNUX0lURU1fRk9STUFUX1NQRUNJRklFUgorI2Vycm9y ICJWRUNUX0lURU1fRk9STUFUX1NQRUNJRklFUiBtYWNybyBpcyBpbmRlZmluZWQuIgorI2Vu ZGlmCisKKyNpZm5kZWYgVkVDVF9NQVJLRVIKKyNlcnJvciAiVkVDVF9NQVJLRVIgbWFjcm8g aXMgaW5kZWZpbmVkLiIKKyNlbmRpZgorCisjaWZuZGVmIFZFQ1RfTUVNQUxMT0NTVEVQCisj ZXJyb3IgIlZFQ1RfTUVNQUxMT0NTVEVQIG1hY3JvIGlzIGluZGVmaW5lZC4iCisjZW5kaWYK KworI2lmbmRlZiBWRUNUX01BTExPQworI2Vycm9yICJWRUNUX01BTExPQyBtYWNybyBpcyBp bmRlZmluZWQuIgorI2VuZGlmCisKKyNpZm5kZWYgVkVDVF9GUkVFCisjZXJyb3IgIlZFQ1Rf RlJFRSBtYWNybyBpcyBpbmRlZmluZWQuIgorI2VuZGlmCisKKy8qCisgKiBUaGUgVmVjdG9y IHR5cGUgaXRzZWxmLAorICogVGhlIFZlY3RvciBvZiBVbmlxdWUgU29ydGVkIEl0ZW1zIHR5 cGUKKyAqIGFuZCB0aGUgSXRlbSB0eXBlCisgKgorICogSW4gZmFjdCwgdmVjdG9ycydzIG5h bWVzIGxvb2tzIGxpa2UgdmVjdF91MTZfdCB3aGVyZToKKyAqICAgICB2ZWN0XyAtIGNvbW1v biBwcmVmaXgsCisgKiAgICAgdTE2IC0gbWFya2VyLAorICogICAgIF90IC0gc3VmZml4Cisg Ki8KKyNkZWZpbmUgdmVjdF90CQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3RfLCBWRUNUX01B UktFUiwgX3QpCisjZGVmaW5lIHVuaXFzb3J0dmVjdF90IENwcENvbmNhdFRyaXBsZTIodW5p cXNvcnR2ZWN0XywgVkVDVF9NQVJLRVIsIF90KQorI2RlZmluZSBpdGVtX3QJCSAgIFZFQ1Rf SVRFTV9UWVBFCisKK3R5cGVkZWYgc3RydWN0Cit7CisJc2l6ZV90IGNudDsJCSAgIC8qIG51 bWJlciBvZiBpdGVtcyAqLworCXNpemVfdCBjYXA7CQkgICAvKiBjYXBhY2l0eSAqLworCWJv b2wgbWVtX2lzX291dGVyOyAvKiBmbGFnIGFib3V0IGFuIGV4dGVybmFsIG1lbW9yeSBpcyB1 c2VkICovCisJaXRlbV90ICptOwkJICAgLyogaXRlbXMgKG1lbWJlcnMpICovCit9IHZlY3Rf dDsKKwordHlwZWRlZiB2ZWN0X3QgdW5pcXNvcnR2ZWN0X3Q7CisKKyNkZWZpbmUgdmVjdF9p bml0CQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3RfLCBWRUNUX01BUktFUiwgX2luaXQpCisj ZGVmaW5lIHZlY3RfZmlsbAkJICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgVkVDVF9NQVJL RVIsIF9maWxsKQorI2RlZmluZSB2ZWN0X3Jlc2VydmUJICAgQ3BwQ29uY2F0VHJpcGxlMih2 ZWN0XywgVkVDVF9NQVJLRVIsIF9yZXNlcnZlKQorI2RlZmluZSB2ZWN0X2FwcGVuZAkJICAg Q3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgVkVDVF9NQVJLRVIsIF9hcHBlbmQpCisjZGVmaW5l IHZlY3RfcHJpbnQJCSAgIENwcENvbmNhdFRyaXBsZTIodmVjdF8sIFZFQ1RfTUFSS0VSLCBf cHJpbnQpCisjZGVmaW5lIHZlY3RfY29tcGFyZQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3Rf LCBWRUNUX01BUktFUiwgX2NvbXBhcmUpCisjZGVmaW5lIHZlY3RfaW5zZXJ0CQkgICBDcHBD b25jYXRUcmlwbGUyKHZlY3RfLCBWRUNUX01BUktFUiwgX2luc2VydCkKKyNkZWZpbmUgdmVj dF9jbGVhcgkJICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgVkVDVF9NQVJLRVIsIF9jbGVh cikKKworI2RlZmluZSB1c3ZfaW5zZXJ0IENwcENvbmNhdFRyaXBsZTIodXN2XywgVkVDVF9N QVJLRVIsIF9pbnNlcnQpCisjZGVmaW5lIHVzdl9zZWFyY2ggQ3BwQ29uY2F0VHJpcGxlMih1 c3ZfLCBWRUNUX01BUktFUiwgX3NlYXJjaCkKKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICogRW5kIG9mIFJldXNhYmxlIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KworLyoKKyAqIERvbid0IGZvcmdldCB0byBpbmNsdWRlCisgKiAJCSNpbmNsdWRlICJ2ZWN0 X3RlbXBsX3VuZGVmLmgiCisgKiBpbiB5b3VyIGZpbGUgdGhhdCB1c2VzIHRoaXMgaGVhZGVy CisgKgorICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIvdmVjdF90ZW1wbF91bmRl Zi5oIGIvc3JjL2luY2x1ZGUvbGliL3ZlY3RfdGVtcGxfdW5kZWYuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTliNjlmMThiOTkKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvaW5jbHVkZS9saWIvdmVjdF90ZW1wbF91bmRlZi5oCkBAIC0wLDAgKzEsMjUg QEAKKy8qCisgKiBGaWxlOiB2ZWN0X3VuZGVmLmgKKyAqLworCisjdW5kZWYgdmVjdF90Cisj dW5kZWYgdW5pcXNvcnR2ZWN0X3QKKyN1bmRlZiBpdGVtX3QKKworI3VuZGVmIFZFQ1RfSVRF TV9UWVBFCisjdW5kZWYgVkVDVF9NQVJLRVIKKyN1bmRlZiBWRUNUX0NwcENvbmNhdFRyaXBs ZTIKKworI3VuZGVmIHZlY3RfaW5pdAorI3VuZGVmIHZlY3RfZmlsbAorI3VuZGVmIHZlY3Rf cmVzZXJ2ZQorI3VuZGVmIHZlY3RfYXBwZW5kCisjdW5kZWYgdmVjdF9wcmludAorI3VuZGVm IHZlY3RfY29tcGFyZQorI3VuZGVmIHZlY3RfaW5zZXJ0CisjdW5kZWYgdmVjdF9jbGVhcgor CisjdW5kZWYgdXN2X2luc2VydAorI3VuZGVmIHVzdl9zZWFyY2gKKworI3VuZGVmIFZFQ1Rf UFJJX0ZPUk1BVF9TUEVDSUZJRVIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9saWIvdmVjdF91MTYuaCBiL3NyYy9pbmNsdWRlL2xpYi92 ZWN0X3UxNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lZGY4 MWE0MTdmNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2xpYi92ZWN0X3UxNi5o CkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBGaWxlOiB2ZWN0X3UxNi5oCisgKi8KKworI2lm bmRlZiBfVkVDVF9VMTZfSF8KKyNkZWZpbmUgX1ZFQ1RfVTE2X0hfCisKKy8qIGNsYW5nLWZv cm1hdCBvZmYgKi8KKyNpbmNsdWRlICJ2ZWN0X3UxNl9jb25maWcuaCIKKyNpbmNsdWRlICJ2 ZWN0X3RlbXBsLmgiCisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyoKKyAqIFR5cGVzIGFy ZSBzdXBwb3NlZCB0byBiZSBjcmVhdGVkIGNyZWF0ZWQgYnkgdGhpcyBmaWxlCisgKiAgICAg dmVjdF91MTZfdAorICogICAgIGl0ZW1fdTE2X3QKKyAqICAgICB1bmlxc29ydHZlY3RfdTE2 X3QKKyAqLworLyoKKyAqIEZ1bmN0aW9ucyBhcmUgc3VwcG9zZWQgdG8gYmUgY3JlYXRlZCBi eSB0aGlzIGZpbGUKKyAqICAgICB2ZWN0X3UxNl9jcmVhdGUKKyAqICAgICB2ZWN0X3UxNl9j cmVhdGVfZmlsbGVkCisgKiAgICAgdmVjdF91MTZfcmVzZXJ2ZQorICogICAgIHZlY3RfdTE2 X2FwcGVuZAorICogICAgIHZlY3RfdTE2X2Rlc3Ryb3kKKyAqICAgICB2ZWN0X3UxNl9wcmlu dAorICogICAgIHZlY3RfdTE2X2NvbXBhcmUKKyAqICAgICB2ZWN0X3UxNl9pbnNlcnQKKyAq ICAgICB2ZWN0X3UxNl9jbGVhcgorICogICAgIHVzdl91MTZfaW5zZXJ0CisgKiAgICAgdXN2 X3UxNl9zZWFyY2gKKyAqLworCisjZW5kaWYgLy9fVkVDVF9VMTZfSF8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2xpYi92ZWN0X3UxNl9jb25maWcuaCBiL3NyYy9pbmNsdWRlL2xpYi92 ZWN0X3UxNl9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uMTNhOTMyODRlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIvdmVj dF91MTZfY29uZmlnLmgKQEAgLTAsMCArMSwxMCBAQAorLyoKKyAqIEZpbGU6IHZlY3RfdTE2 X2NvbmZpZy5oCisgKi8KKworI2RlZmluZSBWRUNUX0lURU1fVFlQRQkJCSAgIHVpbnQxNl90 CisjZGVmaW5lIFZFQ1RfSVRFTV9GT1JNQVRfU1BFQ0lGSUVSIFBSSXUxNgorI2RlZmluZSBW RUNUX01BUktFUgkJCQkgICB1MTYKKyNkZWZpbmUgVkVDVF9NRU1BTExPQ1NURVAJCSAgIDUK KyNkZWZpbmUgVkVDVF9NQUxMT0MJCQkJICAgbWFsbG9jCisjZGVmaW5lIFZFQ1RfRlJFRQkJ CQkgICBmcmVlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9NYWtlZmlsZSBiL3NyYy90ZXN0L01h a2VmaWxlCmluZGV4IDNlYjBhMDZhYmI0Li5hYmE4ZGIxZjQ4MyAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcg QEAgaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCiBTVUJE SVJTID0gXAogCWF1dGhlbnRpY2F0aW9uIFwKKwlkZm9yIFwKIAlpc29sYXRpb24gXAogCW1v ZHVsZXMgXAogCXBlcmwgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvZGZvci8uZ2l0aWdub3Jl IGIvc3JjL3Rlc3QvZGZvci8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi4wZDc3YTUxMjE2YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L2Rmb3IvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKK3Rlc3RfYml0cGFja191MTYKK3Rl c3RfdW5pcXNvcnR2ZWN0X3UxNgordGVzdF92ZWN0X3UxNgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvZGZvci9NYWtlZmlsZSBiL3NyYy90ZXN0L2Rmb3IvTWFrZWZpbGUKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcxN2JmY2RiNGI2Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvZGZvci9NYWtlZmlsZQpAQCAtMCwwICsxLDQ4IEBACisjLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIyBGaWxlOiBzcmMvdGVzdC9kZm9yL01ha2VmaWxlCisjLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCitzdWJkaXIgPSBzcmMvdGVzdC9kZm9yCit0b3BfYnVpbGRkaXIg PSAuLi8uLi8uLgorZGZvcl9kaXIgOj0gJCh0b3BfYnVpbGRkaXIpL3NyYy9iYWNrZW5kL2xp YgorCitpbmNsdWRlICQoZGZvcl9kaXIpL01ha2VmaWxlLmRmb3IKKworIyBFbnN1cmUgZGVw ZW5kZW5jeSB0cmFja2luZyB3b3JrcworT0JKUyArPSAkKE9CSlNfREZPUikKKworaW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAorCisjIE9iamVjdCBmaWxl cyBvZiB2ZWN0LCBiaXRwYWNrIGFuZCBkZm9yIHVzZWQgYnkgdGhpcyB1bml0LXRlc3RzIGFy ZSBpbiB0aGUgc2FtZQorIyBkaXJlY3RvcnkgYXMgdGhpcyBNYWtlZmlsZS4gVGVzdHMgZG9u J3QgdXNlIG9uZXMgZnJvbSBzcmMvYmFja2VuZC9saWIgYW5kIGNvbXBpbGUKKyMgZGlmZmVy ZW50IG9uZXMgZm9yIHRoZW1zZWx2ZXMuCiskKGluZm8gVXNlIE9CSlNfREZPUj0kKE9CSlNf REZPUikgZnJvbSBjdXJyZW50IGRpcmVjdG9yeSAkKHN1YmRpcikuIFwKKyAgICAgICBUaGV5 IGFyZSBidWlsdCBvbiBzb3VyY2VzIGZyb20gJChkZm9yX2RpcikpCisKKyQoT0JKU19ERk9S KTogJS5vOiAkKGRmb3JfZGlyKS8lLmMKKwlAaWYgdGVzdCAhIC1kICQoREVQRElSKTsgdGhl biBta2RpciAtcCAkKERFUERJUik7IGZpCisJJChDQykgJChDRkxBR1MpICQoQ1BQRkxBR1Mp IC1jICQ8IC1NTUQgLU1QIC1NRiAkKERFUERJUikvJCgqRikuUG8gLW8gJEAKKworTElCVEFQ X09CSlMgPSAkKHRvcF9idWlsZGRpcikvc3JjL3Rlc3QvbGlidGFwL3RhcC5vCisKK1RFU1RT PSB0ZXN0X3ZlY3RfdTE2IFwKKyAgICAgICB0ZXN0X3VuaXFzb3J0dmVjdF91MTYgXAorICAg ICAgIHRlc3RfYml0cGFja191MTYKKworJChURVNUUzolPSUubyk6IENQUEZMQUdTICs9IC1J JCh0b3BfYnVpbGRkaXIpL3NyYy90ZXN0CisKK2FsbDogJChURVNUUykKKworJChURVNUUyk6 ICU6ICUubyAkKExJQlRBUF9PQkpTKSAkKE9CSlNfREZPUikKKwkkKENDKSAkKENGTEFHUykg JChDUFBGTEFHUykgJF4gJChMREZMQUdTKSAkKExJQlMpIC1vICRAJChYKQorCitjaGVjay11 bml0OiAkKFRFU1RTKQorCWVjaG8gIiMgKysrIFVuaXQgdGVzdHMgaW4gJChzdWJkaXIpICsr KyIgJiYgXAorCWNkICQodG9wX2J1aWxkZGlyKS8kKHN1YmRpcikgJiYgXAorCSAgICQoUFJP VkUpICQoUFJPVkVfRkxBR1MpIFwKKwkgICAgLXYgJChhZGRwcmVmaXggLi8sJChpZiAkKFBS T1ZFX1RFU1RTKSwgJChQUk9WRV9URVNUUyksICQoVEVTVFMpKSkKKworY2hlY2s6IGNoZWNr LXVuaXQKKworY2xlYW4gZGlzdGNsZWFuOgorCXJtIC1yZiAkKFRFU1RTKSAqLm8KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L2Rmb3IvdGVzdC5oIGIvc3JjL3Rlc3QvZGZvci90ZXN0LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY2YzU0YWFkOTVmCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvZGZvci90ZXN0LmgKQEAgLTAsMCArMSwzMSBAQAor CisvKgorICogdGVzdC5oCisgKi8KKyNpZm5kZWYgX1RFU1RfSF8KKyNkZWZpbmUgX1RFU1Rf SF8KKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworc3Rh dGljIGlubGluZSB2b2lkCit0ZXN0X3ByaW50X3U4X2FycmF5KHNpemVfdCBjbnQsIHVpbnQ4 X3QgYXJyW10sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcHJpbnRmKCIlcyhoZXgpOiB7ICIs IG5hbWUpOworCWZvciAoc2l6ZV90IGogPSAwOyBqIDwgY250IC0gMTsgaisrKQorCQlwcmlu dGYoIiUwMiIgUFJJeDggIiwgIiwgYXJyW2pdKTsKKworCXByaW50ZigiJTAyIiBQUkl4OCAi IH1cbiIsIGFycltjbnQgLSAxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGVzdF9w cmludF91MTZfYXJyYXkoc2l6ZV90IGNudCwgdWludDE2X3QgYXJyW10sIGNvbnN0IGNoYXIg Km5hbWUpCit7CisJcHJpbnRmKCIlcyhoZXgpOiB7ICIsIG5hbWUpOworCWZvciAoc2l6ZV90 IGogPSAwOyBqIDwgY250IC0gMTsgaisrKQorCQlwcmludGYoIiUwNCIgUFJJeDE2ICIsICIs IGFycltqXSk7CisKKwlwcmludGYoIiUwNCIgUFJJeDE2ICJ9XG4iLCBhcnJbY250IC0gMV0p OworfQorCisjZW5kaWYgLyogX1RFU1RfSF8gKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9kZm9yL3Rlc3RfYml0cGFja191MTYuYyBiL3Ny Yy90ZXN0L2Rmb3IvdGVzdF9iaXRwYWNrX3UxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5kYTg0YmIyZjIyZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L2Rmb3IvdGVzdF9iaXRwYWNrX3UxNi5jCkBAIC0wLDAgKzEsMzU3IEBACisvKgorICog dGVzdF9iaXRwYWNrLmMKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxz dHJpbmcuaD4KKworI2luY2x1ZGUgImxpYi9iaXRwYWNrX3UxNi5oIgorI2luY2x1ZGUgImxp Yi92ZWN0X3UxNi5oIgorI2luY2x1ZGUgImxpYnRhcC90YXAuaCIKKworaW50CittYWluKHZv aWQpCit7CisJcGxhbigxOTUpOworCXByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PVxuIik7CisJcHJpbnRmKCJUZXN0IE1BU0sgQU5EIFdJRFRIIENB TENVTEFUSU9OXG4iKTsKKwl7CisJCWNtcF9vaygxLCAiPT0iLCAodWludDE2X3Qpd2lkdGhf dTE2X2Zyb21fdmFsKDB4MDApLAorCQkJICAgIldpZHRoIG9mIDAwIGlzIGVxdWFsIHRvIDEg Yml0LiIpOworCQljbXBfb2soMiwgIj09IiwgKHVpbnQxNl90KXdpZHRoX3UxNl9mcm9tX3Zh bCgweDAyKSwKKwkJCSAgICJXaWR0aCBvZiAwMiBpcyBlcXVhbCB0byAyIGJpdHMuIik7CisJ CWNtcF9vaygyLCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X2Zyb21fdmFsKDB4MDIpLAor CQkJICAgIldpZHRoIG9mIDAyIGlzIGVxdWFsIHRvIDIgYml0cy4iKTsKKwkJY21wX29rKDIs ICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZfZnJvbV92YWwoMHgwMyksCisJCQkgICAiV2lk dGggb2YgMDMgaXMgZXF1YWwgdG8gMiBiaXRzLiIpOworCQljbXBfb2soMywgIj09IiwgKHVp bnQxNl90KXdpZHRoX3UxNl9mcm9tX3ZhbCgweDA0KSwKKwkJCSAgICJXaWR0aCBvZiAwNCBp cyBlcXVhbCB0byAzIGJpdHMuIik7CisJCWNtcF9vaygzLCAiPT0iLCAodWludDE2X3Qpd2lk dGhfdTE2X2Zyb21fdmFsKDB4MDUpLAorCQkJICAgIldpZHRoIG9mIDA1IGlzIGVxdWFsIHRv IDMgYml0cy4iKTsKKwkJY21wX29rKDQsICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZfZnJv bV92YWwoMHgwOCksCisJCQkgICAiV2lkdGggb2YgMDggaXMgZXF1YWwgdG8gNCBiaXRzLiIp OworCQljbXBfb2soNCwgIj09IiwgKHVpbnQxNl90KXdpZHRoX3UxNl9mcm9tX3ZhbCgweDBB KSwKKwkJCSAgICJXaWR0aCBvZiAxMCBpcyBlcXVhbCB0byA0IGJpdHMuIik7CisJCWNtcF9v ayg0LCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X2Zyb21fdmFsKDB4MEYpLAorCQkJICAg IldpZHRoIG9mIDE1IGlzIGVxdWFsIHRvIDQgYml0cy4iKTsKKwkJY21wX29rKDUsICI9PSIs ICh1aW50MTZfdCl3aWR0aF91MTZfZnJvbV92YWwoMHgxMCksCisJCQkgICAiV2lkdGggb2Yg MTYgaXMgZXF1YWwgdG8gNSBiaXRzLiIpOworCQljbXBfb2soNSwgIj09IiwgKHVpbnQxNl90 KXdpZHRoX3UxNl9mcm9tX3ZhbCgweDFGKSwKKwkJCSAgICJXaWR0aCBvZiAzMSBpcyBlcXVh bCB0byA1IGJpdHMuIik7CisJCWNtcF9vayg2LCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2 X2Zyb21fdmFsKDB4MjApLAorCQkJICAgIldpZHRoIG9mIDMyIGlzIGVxdWFsIHRvIDYgYml0 cy4iKTsKKwkJY21wX29rKDcsICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZfZnJvbV92YWwo MHg0MCksCisJCQkgICAiV2lkdGggb2YgNjQgaXMgZXF1YWwgdG8gNyBiaXRzLiIpOworCQlj bXBfb2soOCwgIj09IiwgKHVpbnQxNl90KXdpZHRoX3UxNl9mcm9tX3ZhbCgweDgwKSwKKwkJ CSAgICJXaWR0aCBvZiAxMjggaXMgZXF1YWwgdG8gOCBiaXRzLiIpOworCQljbXBfb2soMTMs ICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZfZnJvbV92YWwoMHgxMDAwKSwKKwkJCSAgICJX aWR0aCBvZiAweDAxMDAwIGlzIGVxdWFsIHRvIDEzIGJpdHMuIik7CisJCWNtcF9vaygxNiwg Ij09IiwgKHVpbnQxNl90KXdpZHRoX3UxNl9mcm9tX3ZhbCgweDhBQkMpLAorCQkJICAgIldp ZHRoIG9mIDB4MDhBQkMgaXMgZXF1YWwgdG8gMTUgYml0cy4iKTsKKworCQljbXBfb2soMHgx LCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X3RvX21hc2soMSksCisJCQkgICAiTWFzayBm cm9tIHdpZHRoIDEgaXMgMDAwMDAwMDEoYmluKS4iKTsKKwkJY21wX29rKDB4MywgIj09Iiwg KHVpbnQxNl90KXdpZHRoX3UxNl90b19tYXNrKDIpLAorCQkJICAgIk1hc2sgZnJvbSB3aWR0 aCAyIGlzIDAwMDAwMDExKGJpbikuIik7CisJCWNtcF9vaygweDcsICI9PSIsICh1aW50MTZf dCl3aWR0aF91MTZfdG9fbWFzaygzKSwKKwkJCSAgICJNYXNrIGZyb20gd2lkdGggMyBpcyAw MDAwMDExMShiaW4pLiIpOworCQljbXBfb2soMHgzRkYsICI9PSIsICh1aW50MTZfdCl3aWR0 aF91MTZfdG9fbWFzaygxMCksCisJCQkgICAiTWFzayBmcm9tIHdpZHRoIDEwIGlzIDB4M0ZG KGJpbikuIik7CisJCWNtcF9vaygweDdGRkYsICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZf dG9fbWFzaygxNSksCisJCQkgICAiTWFzayBmcm9tIHdpZHRoIDE1IGlzIDB4N0ZGRihiaW4p LiIpOworCQljbXBfb2soMHhGRkZGLCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X3RvX21h c2soMTYpLAorCQkJICAgIk1hc2sgZnJvbSB3aWR0aCAxNiBpcyAweEZGRkYoYmluKS4iKTsK Kwl9CisJcHJpbnRmKCJUZXN0IE1BU0sgQU5EIFdJRFRIIENBTENVTEFUSU9OIFBBU1NFRFxu Iik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 XG5cbiIpOworCisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgQklUUEFDSyBQQUNLSU5HXG4iKTsKKwl7Cisj ZGVmaW5lIFNJWkVPRlBBQ0sgNjBVCisJCXVpbnQ4X3QgcGFja1tTSVpFT0ZQQUNLXTsKKwkJ c2l6ZV90IGNhcmV0ID0gMDsKKwkJbWVtc2V0KHBhY2ssIDAsIFNJWkVPRlBBQ0spOworCQkv KgorCQkgKiBTaW5jZSB3ZSBpbXBsZW1lbnRlZCB0aGUgbnVsaWZ5aW5nIG9mIGJpdHMgYWNj b3JkaW5nIHRvIGEgbWFzayAoc2VlCisJCSAqIHRoZSBiaXRwYWNrIGZ1bmN0aW9uKSwgd2Ug Y2FuIHVzZSBldmVuIGEgcGFjayBub3QgcHJlcGFyZWQgaW4gYWR2YW5jZQorCQkgKiBhbmQg Y29tcHJpc2luZyBnYXJiYWdlLiBCdXQgd2Ugd2FudCB0byBjaGVjayB2YWx1ZSBvZiBlYWNo IGJ5dGUgb2YKKwkJICogdGhlIHBhY2sgaW4gdGhpcyB0ZXN0IGFuZCB3ZSBzaW1wbGlmeSB0 aGlzIHRhc2sgYnkgdXNpbmcgYSB6ZXJvZWQKKwkJICogcGFjay4KKwkJICovCisKKwkJZm9y IChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCWNhcmV0ID0gYml0cGFja191MTZfcGFj ayhwYWNrLCBjYXJldCwgMSwgMSk7CisJCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFj aywgY2FyZXQsIDAsIDEpOworCQl9CisJCWNtcF9vaygxNiwgIj09IiwgY2FyZXQsICJDYXJl dCA9IDE2LiIpOworCQljbXBfb2soMHg1NSwgIj09IiwgcGFja1swXSwgIlNhdmVkIGJpdC1i eS1iaXQ6IGZpcnN0IGJ5dGUgaXMgMHg1NS4iKTsKKwkJY21wX29rKDB4NTUsICI9PSIsIHBh Y2tbMV0sICJTYXZlZCBiaXQtYnktYml0OiBzZWNvbmQgYnl0ZSBpcyAweDU1LiIpOworCisJ CWZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSB7CisJCQljYXJldCA9IGJpdHBhY2tfdTE2 X3BhY2socGFjaywgY2FyZXQsIDB4MDIgLyogMTAoYmluKSAqLywgMik7CisJCX0KKworCQlj bXBfb2soMzIsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSAzMi4iKTsKKwkJY21wX29rKDB4QUEs ICI9PSIsIHBhY2tbMl0sCisJCQkgICAiU2F2ZWQgd2l0aCB0d28tYml0IHdpZHRoOiBmaXJz dCBieXRlIGlzIDB4QUEuIik7CisJCWNtcF9vaygweEFBLCAiPT0iLCBwYWNrWzNdLAorCQkJ ICAgIlNhdmVkIHdpdGggdHdvLWJpdCB3aWR0aDogc2Vjb25kIGJ5dGUgaXMgMHhBQS4iKTsK KworCQlmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykgeworCQkJY2FyZXQgPSBiaXRwYWNr X3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDA1IC8qIDEwMShiaW4pICovLCAzKTsKKwkJCWNh cmV0ID0gYml0cGFja191MTZfcGFjayhwYWNrLCBjYXJldCwgMHgwMiAvKiAwMTAoYmluKSAq LywgMyk7CisJCX0KKworCQljbXBfb2soODAsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSA4MC4i KTsKKwkJY21wX29rKDB4NTUsICI9PSIsIHBhY2tbNF0sCisJCQkgICAiU2F2ZWQgd2l0aCB0 aHJlZS1iaXQgd2lkdGg6IGZpcnN0IGJ5dGUgaXMgMHg1NS4iKTsKKwkJY21wX29rKDB4NTUs ICI9PSIsIHBhY2tbNV0sCisJCQkgICAiU2F2ZWQgd2l0aCB0aHJlZS1iaXQgd2lkdGg6IHNl Y29uZCBieXRlIGlzIDB4NTUuIik7CisJCWNtcF9vaygweDU1LCAiPT0iLCBwYWNrWzZdLAor CQkJICAgIlNhdmVkIHdpdGggdGhyZWUtYml0IHdpZHRoOiBzZWNvbmQgYnl0ZSBpcyAweDU1 LiIpOworCQljbXBfb2soMHg1NSwgIj09IiwgcGFja1s3XSwKKwkJCSAgICJTYXZlZCB3aXRo IHRocmVlLWJpdCB3aWR0aDogZmlyc3QgYnl0ZSBpcyAweDU1LiIpOworCQljbXBfb2soMHg1 NSwgIj09IiwgcGFja1s4XSwKKwkJCSAgICJTYXZlZCB3aXRoIHRocmVlLWJpdCB3aWR0aDog c2Vjb25kIGJ5dGUgaXMgMHg1NS4iKTsKKwkJY21wX29rKDB4NTUsICI9PSIsIHBhY2tbOV0s CisJCQkgICAiU2F2ZWQgd2l0aCB0aHJlZS1iaXQgd2lkdGg6IHNlY29uZCBieXRlIGlzIDB4 NTUuIik7CisKKwkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDBC LCA0KTsKKwkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDBDLCA0 KTsKKwkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDBELCA0KTsK KwkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDBFLCA0KTsKKwor CQljbXBfb2soOTYsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSA5Ni4iKTsKKwkJY21wX29rKDB4 Q0IsICI9PSIsIHBhY2tbMTBdLAorCQkJICAgIlNhdmVkIHdpdGggZm91ci1iaXQgd2lkdGg6 IGZpcnN0IGJ5dGUgaXMgMHhDQi4iKTsKKwkJY21wX29rKDB4RUQsICI9PSIsIHBhY2tbMTFd LAorCQkJICAgIlNhdmVkIHdpdGggZm91ci1iaXQgd2lkdGg6IHNlY29uZCBieXRlIGlzIDB4 RUQuIik7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCWNhcmV0ID0g Yml0cGFja191MTZfcGFjayhwYWNrLCBjYXJldCwgMHgwNyAvKiAwMDExMWIgKi8sIDUpOwor CQl9CisKKwkJY21wX29rKDEzNiwgIj09IiwgY2FyZXQsICJDYXJldCA9IDEzNi4iKTsKKwkJ Y21wX29rKDB4RTcsICI9PSIsIHBhY2tbMTJdLAorCQkJICAgIlNhdmVkIHdpdGggZml2ZS1i aXQgd2lkdGg6IGZpcnN0IGJ5dGUgaXMgMHhFNy4iKTsKKwkJY21wX29rKDB4OUMsICI9PSIs IHBhY2tbMTNdLAorCQkJICAgIlNhdmVkIHdpdGggZml2ZS1iaXQgd2lkdGg6IHNlY29uZCBi eXRlIGlzIDB4OUMuIik7CisJCWNtcF9vaygweDczLCAiPT0iLCBwYWNrWzE0XSwKKwkJCSAg ICJTYXZlZCB3aXRoIGZpdmUtYml0IHdpZHRoOiB0aGlyZCBieXRlIGlzIDB4NzMuIik7CisJ CWNtcF9vaygweENFLCAiPT0iLCBwYWNrWzE1XSwKKwkJCSAgICJTYXZlZCB3aXRoIGZpdmUt Yml0IHdpZHRoOiBmb3VydGggYnl0ZSBpcyAweENFLiIpOworCQljbXBfb2soMHgzOSwgIj09 IiwgcGFja1sxNl0sCisJCQkgICAiU2F2ZWQgd2l0aCBmaXZlLWJpdCB3aWR0aDogZmlmdGgg Ynl0ZSBpcyAweDM5LiIpOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorCQkJ Y2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDA3IC8qIDAwMDExMWIg Ki8sIDYpOworCisJCWNtcF9vaygxNjAsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSAxNjAuIik7 CisJCWNtcF9vaygweEM3LCAiPT0iLCBwYWNrWzE3XSwKKwkJCSAgICJTYXZlZCB3aXRoIHNp eC1iaXQgd2lkdGg6IGZpcnN0IGJ5dGUgaXMgMHhDNy4iKTsKKwkJY21wX29rKDB4NzEsICI9 PSIsIHBhY2tbMThdLAorCQkJICAgIlNhdmVkIHdpdGggc2l4LWJpdCB3aWR0aDogc2Vjb25k IGJ5dGUgaXMgMHg3MS4iKTsKKwkJY21wX29rKDB4MUMsICI9PSIsIHBhY2tbMTldLAorCQkJ ICAgIlNhdmVkIHdpdGggc2l4LWJpdCB3aWR0aDogdGhpcmQgYnl0ZSBpcyAweDFDLiIpOwor CisJCWZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKQorCQkJY2FyZXQgPSBiaXRwYWNrX3Ux Nl9wYWNrKHBhY2ssIGNhcmV0LCAweDU3IC8qIDEwMTAxMTFiICovLCA3KTsKKworCQljbXBf b2soMjE2LCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gMjE2LiIpOworCQljbXBfb2soMHhENywg Ij09IiwgcGFja1syMF0sCisJCQkgICAiU2F2ZWQgd2l0aCBzZXZlbi1iaXQgd2lkdGg6IGJ5 dGUxIGlzIDB4RDcuIik7CisJCWNtcF9vaygweEVCLCAiPT0iLCBwYWNrWzIxXSwKKwkJCSAg ICJTYXZlZCB3aXRoIHNldmVuLWJpdCB3aWR0aDogYnl0ZTIgaXMgMHhFQi4iKTsKKwkJY21w X29rKDB4RjUsICI9PSIsIHBhY2tbMjJdLAorCQkJICAgIlNhdmVkIHdpdGggc2V2ZW4tYml0 IHdpZHRoOiBieXRlMyBpcyAweEY1LiIpOworCQljbXBfb2soMHg3QSwgIj09IiwgcGFja1sy M10sCisJCQkgICAiU2F2ZWQgd2l0aCBzZXZlbi1iaXQgd2lkdGg6IGJ5dGU0IGlzIDB4N0Eu Iik7CisJCWNtcF9vaygweEJELCAiPT0iLCBwYWNrWzI0XSwKKwkJCSAgICJTYXZlZCB3aXRo IHNldmVuLWJpdCB3aWR0aDogYnl0ZTUgaXMgMHhCRC4iKTsKKwkJY21wX29rKDB4NUUsICI9 PSIsIHBhY2tbMjVdLAorCQkJICAgIlNhdmVkIHdpdGggc2V2ZW4tYml0IHdpZHRoOiBieXRl NiBpcyAweDVFLiIpOworCQljbXBfb2soMHhBRiwgIj09IiwgcGFja1syNl0sCisJCQkgICAi U2F2ZWQgd2l0aCBzZXZlbi1iaXQgd2lkdGg6IGJ5dGU3IGlzIDB4QUYuIik7CisKKwkJY2Fy ZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweEJBLCA4KTsKKwkJY2FyZXQg PSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweERDLCA4KTsKKwkJY2FyZXQgPSBi aXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweEZFLCA4KTsKKworCQljbXBfb2soMjQw LCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gMjQwLiIpOworCQljbXBfb2soMHhCQSwgIj09Iiwg cGFja1syN10sCisJCQkgICAiU2F2ZWQgd2l0aCBlaWdodC1iaXQgd2lkdGg6IGJ5dGUxIGlz IDB4QkEuIik7CisJCWNtcF9vaygweERDLCAiPT0iLCBwYWNrWzI4XSwKKwkJCSAgICJTYXZl ZCB3aXRoIGVpZ2h0LWJpdCB3aWR0aDogYnl0ZTIgaXMgMHhEQy4iKTsKKwkJY21wX29rKDB4 RkUsICI9PSIsIHBhY2tbMjldLAorCQkJICAgIlNhdmVkIHdpdGggZWlnaHQtYml0IHdpZHRo OiBieXRlMyBpcyAweEZFLiIpOworCisJCWNhcmV0ID0gYml0cGFja191MTZfcGFjaygKKwkJ CXBhY2ssIGNhcmV0LCAweDAwLAorCQkJNCk7IC8qIG1vdmUgdG8gNCBiaXQgZm9yIGZ1biBh bmQgYWdhaW4gY29udGludWUgd2l0aCA4LWJpdCB3aWR0aCAqLworCQljYXJldCA9IGJpdHBh Y2tfdTE2X3BhY2socGFjaywgY2FyZXQsIDB4MzIsIDgpOworCQljYXJldCA9IGJpdHBhY2tf dTE2X3BhY2socGFjaywgY2FyZXQsIDB4NTQsIDgpOworCQljYXJldCA9IGJpdHBhY2tfdTE2 X3BhY2socGFjaywgY2FyZXQsIDB4NzYsIDgpOworCQljYXJldCA9IGJpdHBhY2tfdTE2X3Bh Y2socGFjaywgY2FyZXQsIDB4OTgsIDgpOworCisJCWNtcF9vaygyNzYsICI9PSIsIGNhcmV0 LCAiQ2FyZXQgPSAyNzYuIik7CisJCWNtcF9vaygweDIwLCAiPT0iLCBwYWNrWzMwXSwKKwkJ CSAgICJTYXZlZCB3aXRoIGVpZ2h0LWJpdCB3aWR0aCBidXQgc2hpZnRlZCBieSA0OiBpcyAw eDIwLiIpOworCQljbXBfb2soMHg0MywgIj09IiwgcGFja1szMV0sCisJCQkgICAiU2F2ZWQg d2l0aCBlaWdodC1iaXQgd2lkdGggYnV0IHNoaWZ0ZWQgYnkgNDogaXMgMHg0My4iKTsKKwkJ Y21wX29rKDB4NjUsICI9PSIsIHBhY2tbMzJdLAorCQkJICAgIlNhdmVkIHdpdGggZWlnaHQt Yml0IHdpZHRoIGJ1dCBzaGlmdGVkIGJ5IDQ6IGlzIDB4NjUuIik7CisJCWNtcF9vaygweDg3 LCAiPT0iLCBwYWNrWzMzXSwKKwkJCSAgICJTYXZlZCB3aXRoIGVpZ2h0LWJpdCB3aWR0aCBi dXQgc2hpZnRlZCBieSA0OiBpcyAweDg3LiIpOworCQljbXBfb2soMHgwOSwgIj09IiwgcGFj a1szNF0sCisJCQkgICAiU2F2ZWQgd2l0aCBlaWdodC1iaXQgd2lkdGggYnV0IHNoaWZ0ZWQg YnkgNDogaXMgMHgwOS4iKTsKKworCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2soCisJCQlw YWNrLCBjYXJldCwgMHgwMCwKKwkJCTQpOyAvKiBtb3ZlIHRvIDQgYml0IGZvciBmdW4gYW5k IGFnYWluIGNvbnRpbnVlIHdpdGggOC1iaXQgd2lkdGggKi8KKwkJY21wX29rKDI4MCwgIj09 IiwgY2FyZXQsICJDYXJldCA9IDI4MC4iKTsKKwkJY21wX29rKDB4MDksICI9PSIsIHBhY2tb MzRdLAorCQkJICAgIkFkZGVkIHBhZGRpbmcgMHgwLCB3aWR0aD00LiBCeXRlIGluIHBhY2sg aXMgc3RpbGwgMHgwOS4iKTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IDM7IGorKykKKwkJ CWNhcmV0ID0gYml0cGFja191MTZfcGFjayhwYWNrLCBjYXJldCwgMHgxNjcxIC8qIDEwMTEw MDExMTAwMDFiICovLAorCQkJCQkJCQkJIDEzKTsKKworCQljbXBfb2soMzE5LCAiPT0iLCBj YXJldCwgIkNhcmV0ID0gMzE5LiIpOworCQljbXBfb2soMHg3MSwgIj09IiwgcGFja1szNV0s ICJTYXZlZCB3aXRoIHRoaXJ0ZWVuLWJpdCB3aWR0aDogaXMgMHg3MS4iKTsKKwkJY21wX29r KDB4MzYsICI9PSIsIHBhY2tbMzZdLCAiU2F2ZWQgd2l0aCB0aGlydGVlbi1iaXQgd2lkdGg6 IGlzIDB4MzYuIik7CisJCWNtcF9vaygweENFLCAiPT0iLCBwYWNrWzM3XSwgIlNhdmVkIHdp dGggdGhpcnRlZW4tYml0IHdpZHRoOiBpcyAweENFLiIpOworCQljbXBfb2soMHhDNiwgIj09 IiwgcGFja1szOF0sICJTYXZlZCB3aXRoIHRoaXJ0ZWVuLWJpdCB3aWR0aDogaXMgMHhDNi4i KTsKKwkJY21wX29rKDB4NTksICI9PSIsIHBhY2tbMzldLCAiU2F2ZWQgd2l0aCB0aGlydGVl bi1iaXQgd2lkdGg6IGlzIDB4NTkuIik7CisKKwkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNr KHBhY2ssIGNhcmV0LCAweDEgLyogUEFERElORyAqLywgMSk7CisJCWNtcF9vaygzMjAsICI9 PSIsIGNhcmV0LCAiQ2FyZXQgPSAzMjAuIik7CisJCWNtcF9vaygweEQ5LCAiPT0iLCBwYWNr WzM5XSwKKwkJCSAgICJBZnRlciBwYWRkaW5nIHdpdGggMHgwMSwgdz0xOiAweDU5IC0+IDB4 RDkuIik7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCA1OyBqKyspCisJCQljYXJldCA9IGJp dHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQsIDB4Q0RFRiwgMTYpOworCisJCWNtcF9vayg0 MDAsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSA0MDAuIik7CisJCWZvciAoaW50IGkgPSA0MDsg aSA8IDUwOykgeworCQkJY21wX29rKDB4RUYsICI9PSIsIHBhY2tbaSsrXSwgIlBhY2tlZCB3 aXRoIHdpZHRoPTE2LiAweEVGLiIpOworCQkJY21wX29rKDB4Q0QsICI9PSIsIHBhY2tbaSsr XSwgIlBhY2tlZCB3aXRoIHdpZHRoPTE2LiAweEMuIik7CisJCX0KKworCQljYXJldCA9IGJp dHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQsCisJCQkJCQkJCSAweDAgLyogUEFERElORyBp biBvcmRlciB0byBzaGlmdCBieSAxIGJpdCovLAorCQkJCQkJCQkgMSk7CisJCWNtcF9vayg0 MDEsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSA0MDEuIik7CisKKwkJZm9yIChpbnQgaiA9IDA7 IGogPCAzOyBqKyspCisJCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQs IDB4NTU1NSwgMTYpOworCisJCWNtcF9vayg0NDksICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSA0 MDEuIik7CisJCWZvciAoaW50IGkgPSA1MDsgaSA8IDU2OykKKwkJCWNtcF9vaygweEFBLCAi PT0iLCBwYWNrW2krK10sCisJCQkJICAgIjE2LWJpdCB2YWx1ZSBzYXZlZCB3aXRoIHNoaWZ0 IGJ5IDEgYml0IDB4NTUtPjB4QUEuIik7CisKKwkJY21wX29rKDB4MCwgIj09IiwgcGFja1s1 Nl0sICIxIGhpZ2hlciBiaXQgaXMgYWxvbmUgLiIpOworCisJCXByaW50ZigiVGVzdCBCSVRQ QUNLIFBBQ0tJTkcgUEFTU0VEXG4iKTsKKwkJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG5cbiIpOworCisJCXByaW50ZigiPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJCXByaW50ZigiVGVzdCBCSVRQ QUNLIFVOUEFDS0lOR1xuIik7CisKKwkJY2FyZXQgPSAwOworCisJCWZvciAoaW50IGogPSAw OyBqIDwgODsgaisrKSB7CisJCQljbXBfb2soMHgwMSwgIj09IiwgYml0cGFja191MTZfdW5w YWNrKHBhY2ssICZjYXJldCwgMSkpOworCQkJY21wX29rKDB4MDAsICI9PSIsIGJpdHBhY2tf dTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDEpKTsKKwkJfQorCQljbXBfb2soY2FyZXQsICI9 PSIsIDE2KTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykKKwkJCWNtcF9vaygw eDAyLCAiPT0iLCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCAyKSk7CisKKwkJ Y21wX29rKDMyLCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gMzIuIik7CisKKwkJZm9yIChpbnQg aiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCWNtcF9vaygweDA1LCAiPT0iLCBiaXRwYWNrX3Ux Nl91bnBhY2socGFjaywgJmNhcmV0LCAzKSk7CisJCQljbXBfb2soMHgwMiwgIj09IiwgYml0 cGFja191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwgMykpOworCQl9CisJCWNtcF9vayg4MCwg Ij09IiwgY2FyZXQsICJDYXJldCA9IDgwLiIpOworCisJCWNtcF9vaygweDBCLCAiPT0iLCBi aXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA0KSk7CisJCWNtcF9vaygweDBDLCAi PT0iLCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA0KSk7CisJCWNtcF9vaygw eDBELCAiPT0iLCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA0KSk7CisJCWNt cF9vaygweDBFLCAiPT0iLCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA0KSk7 CisKKwkJY21wX29rKDk2LCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gOTYuIik7CisKKwkJZm9y IChpbnQgaiA9IDA7IGogPCA4OyBqKyspCisJCQljbXBfb2soMHgwNywgIj09IiwgYml0cGFj a191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwgNSksCisJCQkJICAgIndpZHRoPTUsIHZhbD0w MDExMWIiKTsKKworCQljbXBfb2soMTM2LCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gMTM2LiIp OworCisJCWZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorCQkJY21wX29rKDB4MDcsICI9 PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDYpLAorCQkJCSAgICJ3aWR0 aD02LCB2YWw9MDAwMTExYiIpOworCisJCWNtcF9vaygxNjAsICI9PSIsIGNhcmV0LCAiQ2Fy ZXQgPSAxNjAuIik7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspCisJCQljbXBf b2soMHg1NywgIj09IiwgYml0cGFja191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwgNyksCisJ CQkJICAgIndpZHRoPTcsIHZhbD0xMDEwMTExYiAoMHg1NykiKTsKKworCQljbXBfb2soMjE2 LCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gMjE2LiIpOworCisJCWNtcF9vaygweEJBLCAiPT0i LCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA4KSwKKwkJCSAgICJ3aWR0aD04 LCB2YWw9MHhCQSIpOworCQljbXBfb2soMHhEQywgIj09IiwgYml0cGFja191MTZfdW5wYWNr KHBhY2ssICZjYXJldCwgOCksCisJCQkgICAid2lkdGg9OCwgdmFsPTB4REMiKTsKKwkJY21w X29rKDB4RkUsICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDgpLAor CQkJICAgIndpZHRoPTgsIHZhbD0weEZFIik7CisKKwkJY21wX29rKDI0MCwgIj09IiwgY2Fy ZXQsICJDYXJldCA9IDI0MC4iKTsKKworCQljbXBfb2soMHgwLCAiPT0iLCBiaXRwYWNrX3Ux Nl91bnBhY2socGFjaywgJmNhcmV0LCA0KSwKKwkJCSAgICJ3aWR0aD00LCB2YWw9MHgwLCBm b3IgZnVuIik7CisKKwkJY21wX29rKDB4MzIsICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhw YWNrLCAmY2FyZXQsIDgpLAorCQkJICAgIndpZHRoPTgsIHZhbD0weDMyIik7CisJCWNtcF9v aygweDU0LCAiPT0iLCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA4KSwKKwkJ CSAgICJ3aWR0aD04LCB2YWw9MHg1NCIpOworCQljbXBfb2soMHg3NiwgIj09IiwgYml0cGFj a191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwgOCksCisJCQkgICAid2lkdGg9OCwgdmFsPTB4 NzYiKTsKKwkJY21wX29rKDB4OTgsICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAm Y2FyZXQsIDgpLAorCQkJICAgIndpZHRoPTgsIHZhbD0weDk4Iik7CisKKwkJY21wX29rKDB4 MCwgIj09IiwgYml0cGFja191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwgNCksCisJCQkgICAi d2lkdGg9NCwgdmFsPTB4MCwgZm9yIGZ1biBwYWRkaW5nIGFnYWluIik7CisKKwkJZm9yIChp bnQgaiA9IDA7IGogPCAzOyBqKyspCisJCQljbXBfb2soMHgxNjcxLCAiPT0iLCBiaXRwYWNr X3UxNl91bnBhY2socGFjaywgJmNhcmV0LCAxMyksCisJCQkJICAgIndpZHRoPTEzLCB2YWw9 MHgxNjcxICgxMDExMDAxMTEwMDAxYikiKTsKKworCQljbXBfb2soMzE5LCAiPT0iLCBjYXJl dCwgIkNhcmV0ID0gMzE5LiIpOworCisJCWNtcF9vaygweDEsICI9PSIsIGJpdHBhY2tfdTE2 X3VucGFjayhwYWNrLCAmY2FyZXQsIDEpLAorCQkJICAgIndpZHRoPTEsIHZhbD0weDEiKTsK KwkJY21wX29rKDMyMCwgIj09IiwgY2FyZXQsICJDYXJldCA9IDMyMC4iKTsKKworCQlmb3Ig KGludCBqID0gMDsgaiA8IDU7IGorKykKKwkJCWNtcF9vaygweENERUYsICI9PSIsIGJpdHBh Y2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDE2KSwKKwkJCQkgICAiMTgtYml0IHZhbHVl IGFsbGlnbmVkIHdpdGggYnl0ZXMgaW4gcGFjay4iKTsKKworCQljbXBfb2soNDAwLCAiPT0i LCBjYXJldCwgIkNhcmV0ID0gNDAwLiIpOworCQljbXBfb2soMHgwLCAiPT0iLCBiaXRwYWNr X3UxNl91bnBhY2socGFjaywgJmNhcmV0LCAxKSwKKwkJCSAgICIxLWJpdCB3aWR0aCB2YWx1 ZSAocGFkZGluZyBmb3Igc2hpZnQpLiIpOworCQljbXBfb2soNDAxLCAiPT0iLCBjYXJldCwg IkNhcmV0ID0gNDAxLiIpOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKQorCQkJ Y21wX29rKDB4NTU1NSwgIj09IiwgYml0cGFja191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwg MTYpLAorCQkJCSAgICIxNi1iaXQgd2lkdGggdmFsdWUgc2hpZnRlZCBieSAxIGJpdC4iKTsK KworCQljbXBfb2soNDQ5LCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gNDQ5LiIpOworCX0KKwor CWRvbmVfdGVzdGluZygpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvZGZvci90ZXN0X3Vu aXFzb3J0dmVjdF91MTYuYyBiL3NyYy90ZXN0L2Rmb3IvdGVzdF91bmlxc29ydHZlY3RfdTE2 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRkZGNlOGIwYjNk Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvZGZvci90ZXN0X3VuaXFzb3J0dmVjdF91 MTYuYwpAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIHRlc3RfdW5pcXNvcnR2ZWN0LmMKKyAq LworCisjaW5jbHVkZSAibGliL3ZlY3RfdTE2LmgiCisjaW5jbHVkZSAibGlidGFwL3RhcC5o IgorCitpbnQgdGVzdF91c3Yoc2l6ZV90IHNyY19jbnQsIHVpbnQxNl90ICpzcmNfaW4sIHNp emVfdCBleHBlY3RlZF9jbnQsCisJCQkgdWludDE2X3QgKmV4cGVjdGVkX2luKTsKKworaW50 Cit0ZXN0X3VzdihzaXplX3Qgc3JjX2NudCwgdWludDE2X3QgKnNyY19pbiwgc2l6ZV90IGV4 cGVjdGVkX2NudCwKKwkJIHVpbnQxNl90ICpleHBlY3RlZF9pbikKK3sKKwlpbnQgcmVzdWx0 ID0gLTE7CisJdmVjdF91MTZfdCBzcmM7CisJdmVjdF91MTZfdCBleHBlY3RlZDsKKwl1bmlx c29ydHZlY3RfdTE2X3QgeDsKKworCXZlY3RfdTE2X2luaXQoJnNyYywgc3JjX2NudCwgTlVM TCk7CisJdmVjdF91MTZfZmlsbCgmc3JjLCBzcmNfY250LCBzcmNfaW4pOworCisJdmVjdF91 MTZfaW5pdCgmZXhwZWN0ZWQsIDAsIE5VTEwpOworCXZlY3RfdTE2X2ZpbGwoJmV4cGVjdGVk LCBleHBlY3RlZF9jbnQsIGV4cGVjdGVkX2luKTsKKworCXZlY3RfdTE2X2luaXQoJngsIDAs IE5VTEwpOworCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzcmNfY250OyBpKyspCisJCXVz dl91MTZfaW5zZXJ0KCZ4LCBzcmMubVtpXSk7CisKKwlyZXN1bHQgPSB2ZWN0X3UxNl9jb21w YXJlKCZ4LCAmZXhwZWN0ZWQpOworCisJdmVjdF91MTZfY2xlYXIoJngpOworCXZlY3RfdTE2 X2NsZWFyKCZleHBlY3RlZCk7CisJdmVjdF91MTZfY2xlYXIoJnNyYyk7CisJcmV0dXJuIHJl c3VsdDsKK30KKworaW50CittYWluKHZvaWQpCit7CisJcGxhbig1Nik7CisKKwlwcmludGYo Ij09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50 ZigiVGVzdCBDUkVBVEUgQU5EIERFU1RST1kgU09SVEVEIFVOSVFVRSBWRUNUT1IgKEVNUFRZ KVxuIik7CisJeworCQl1bmlxc29ydHZlY3RfdTE2X3QgdXN2OworCQlzaXplX3QgY2FwYWNp dHkgPSAxMDsKKwkJdmVjdF91MTZfaW5pdCgmdXN2LCBjYXBhY2l0eSwgTlVMTCk7CisJCWNt cF9vayh1c3YuY2FwLCAiPT0iLCBjYXBhY2l0eSwKKwkJCSAgICJWZWN0b3JzIGNhcGFjaXR5 IGlzIGVxdWFsIHRvIHJlcXVlc3RlZCBvbmUiKTsKKwkJY21wX29rKHVzdi5jbnQsICI9PSIs IDAsICJObyBtZW1iZXJzIGluIHZlY3RvciIpOworCQlvayh1c3YubSAhPSBOVUxMLCAiQXJy YXkgZm9yIG1lbWJlcnMgaXMgcmVzZXJ2ZWQiKTsKKworCQl2ZWN0X3UxNl9jbGVhcigmdXN2 KTsKKwl9CisJcHJpbnRmKCJUZXN0IENSRUFURSBBTkQgREVTVFJPWSBTT1JURUQgVU5JUVVF IFZFQ1RPUiAoRU1QVFkpIFBBU1NFRFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiIpOworCisJcHJpbnRmKCI9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgU0VB UkNIIElOIFVOSVFVRSBTT1JUIFZFQ1RcbiIpOworCXsKKwkJdW5pcXNvcnR2ZWN0X3UxNl90 IHVzdjsKKwkJdXN2X3NyY2hfcmVzX3Qgc3JjaDsKKwkJdWludDE2X3QgaW5wdXRbNF0gPSB7 IDUsIDEwLCAyMCwgMzAgfTsKKworCQl2ZWN0X3UxNl9pbml0KCZ1c3YsIDAsIE5VTEwpOwor CisJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJdXN2X3UxNl9pbnNlcnQo JnVzdiwgaW5wdXRbaV0pOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCAwKTsK KwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX05PVF9GT1VORF9TTUFMTEVTVCwK KwkJCSAgICJOb3QgZm91bmQsIHNtYWxsZXN0Iik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09 IiwgMCwgIlBvcyA9MCIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCAxKTsK KwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX05PVF9GT1VORF9TTUFMTEVTVCwK KwkJCSAgICJOb3QgZm91bmQsIHNtYWxsZXN0Iik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09 IiwgMCwgIlBvcyA9MCIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCA1KTsK KwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX0ZPVU5ELCAiRm91bmQiKTsKKwkJ Y21wX29rKHNyY2gucG9zLCAiPT0iLCAwLCAiUG9zID0wIik7CisKKwkJc3JjaCA9IHVzdl91 MTZfc2VhcmNoKCZ1c3YsIDYpOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hf Tk9UX0ZPVU5ELCAiTm90IGZvdW5kIik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09IiwgMSwg IlBvcyA9MSIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCAxMCk7CisJCWNt cF9vayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9GT1VORCwgIkZvdW5kIik7CisJCWNtcF9v ayhzcmNoLnBvcywgIj09IiwgMSwgIlBvcyA9MSIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3Nl YXJjaCgmdXN2LCAxNSk7CisJCWNtcF9vayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9OT1Rf Rk9VTkQsICJOb3QgZm91bmQiKTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAyLCAiUG9z ID0yIik7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDIwKTsKKwkJY21wX29r KHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX0ZPVU5ELCAiRm91bmQiKTsKKwkJY21wX29rKHNy Y2gucG9zLCAiPT0iLCAyLCAiUG9zID0yIik7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNo KCZ1c3YsIDI1KTsKKwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX05PVF9GT1VO RCwgIk5vdCBmb3VuZCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDMsICJQb3MgPTMi KTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgMzApOworCQljbXBfb2soc3Jj aC5zdCwgIj09IiwgVVNWX1NSQ0hfRk9VTkQsICJGb3VuZCIpOworCQljbXBfb2soc3JjaC5w b3MsICI9PSIsIDMsICJQb3MgPTIiKTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVz diwgNDUpOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hfTk9UX0ZPVU5EX0xB UkdFU1QsICJOb3QgZm91bmQsIGxhcmdlc3QiKTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0i LCAzLCAiUG9zID0zIik7CisKKwkJdmVjdF91MTZfY2xlYXIoJnVzdik7CisJfQorCXsKKwkJ dW5pcXNvcnR2ZWN0X3UxNl90IHVzdjsKKwkJdXN2X3NyY2hfcmVzX3Qgc3JjaDsKKwkJdWlu dDE2X3QgaW5wdXRbM10gPSB7IDUsIDEwLCAyMCB9OworCQl1aW50MTZfdCBidWZbM107IC8q IG92ZXJpbmR1bGdlIGluIHRlc3RpbmcgdGhlIG91dGVyIG1lbW9yeSB2ZWN0b3IgKi8KKwor CQl2ZWN0X3UxNl9pbml0KCZ1c3YsIDMsIGJ1Zik7CisKKwkJZm9yIChzaXplX3QgaSA9IDA7 IGkgPCAzOyBpKyspCisJCQl1c3ZfdTE2X2luc2VydCgmdXN2LCBpbnB1dFtpXSk7CisKKwkJ c3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDApOworCQljbXBfb2soc3JjaC5zdCwgIj09 IiwgVVNWX1NSQ0hfTk9UX0ZPVU5EX1NNQUxMRVNULAorCQkJICAgIk5vdCBmb3VuZCwgc21h bGxlc3QiKTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAwLCAiUG9zID0wIik7CisKKwkJ c3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDUpOworCQljbXBfb2soc3JjaC5zdCwgIj09 IiwgVVNWX1NSQ0hfRk9VTkQsICJGb3VuZCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIs IDAsICJQb3MgPTAiKTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgNik7CisJ CWNtcF9vayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9OT1RfRk9VTkQsICJOb3QgZm91bmQi KTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAxLCAiUG9zID0xIik7CisKKwkJc3JjaCA9 IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDEwKTsKKwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVT Vl9TUkNIX0ZPVU5ELCAiRm91bmQiKTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAxLCAi UG9zID0xIik7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDE1KTsKKwkJY21w X29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX05PVF9GT1VORCwgIk5vdCBmb3VuZCIpOwor CQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDIsICJQb3MgPTIiKTsKKworCQkvKgorCQkgKiBX aGVuIHNjb3BlcyBsIGFuZCBnIGFyZSBuZWlnaGJvdXJzIChnLWw9MSkgYnV0CisJCSAqIHZh bD09bVtnXSBpbnN0ZWFkIG9mIHZhbD09bVtsXS4KKwkJICovCisJCXNyY2ggPSB1c3ZfdTE2 X3NlYXJjaCgmdXN2LCAyMCk7CisJCWNtcF9vayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9G T1VORCwgIkZvdW5kIik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09IiwgMiwgIlBvcyA9MiIp OworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCAyMSk7CisJCWNtcF9vayhzcmNo LnN0LCAiPT0iLCBVU1ZfU1JDSF9OT1RfRk9VTkRfTEFSR0VTVCwgIk5vdCBmb3VuZCwgbGFy Z2VzdCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDIsICJQb3MgPTIiKTsKKworCQl2 ZWN0X3UxNl9jbGVhcigmdXN2KTsKKwl9CisJeyAvKiBzaW5nbGUgbWVtYmVyKi8KKworCQl1 bmlxc29ydHZlY3RfdTE2X3QgdXN2OworCQl1c3Zfc3JjaF9yZXNfdCBzcmNoOworCisJCXZl Y3RfdTE2X2luaXQoJnVzdiwgMywgTlVMTCk7CisKKwkJdXN2X3UxNl9pbnNlcnQoJnVzdiwg NSk7IC8qIFRoZSBvbmx5IGl0ZW0gaW4gbGlzdCBpcyA1ICovCisKKwkJc3JjaCA9IHVzdl91 MTZfc2VhcmNoKCZ1c3YsIDApOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hf Tk9UX0ZPVU5EX1NNQUxMRVNULAorCQkJICAgIk5vdCBmb3VuZCwgc21hbGxlc3QiKTsKKwkJ Y21wX29rKHNyY2gucG9zLCAiPT0iLCAwLCAiUG9zID0wIik7CisKKwkJc3JjaCA9IHVzdl91 MTZfc2VhcmNoKCZ1c3YsIDUpOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hf Rk9VTkQsICJGb3VuZCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDAsICJQb3MgPTAi KTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgNik7CisJCWNtcF9vayhzcmNo LnN0LCAiPT0iLCBVU1ZfU1JDSF9OT1RfRk9VTkRfTEFSR0VTVCwgIk5vdCBmb3VuZCwgbGFy Z2VzdCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDAsICJQb3MgPTIiKTsKKworCQl2 ZWN0X3UxNl9jbGVhcigmdXN2KTsKKwl9CisJeyAvKiBlbXB0eSB2ZWN0b3IqLworCisJCXVu aXFzb3J0dmVjdF91MTZfdCB1c3Y7CisJCXVzdl9zcmNoX3Jlc190IHNyY2g7CisKKwkJdmVj dF91MTZfaW5pdCgmdXN2LCAxLCBOVUxMKTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2go JnVzdiwgMCk7CisJCWNtcF9vayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9FTVBUWSwgIlZl Y3RvciBpcyBlbXB0eS4iKTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAwLCAiUG9zID0w Iik7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDQpOworCQljbXBfb2soc3Jj aC5zdCwgIj09IiwgVVNWX1NSQ0hfRU1QVFksICJWZWN0b3IgaXMgZW1wdHkuIik7CisJCWNt cF9vayhzcmNoLnBvcywgIj09IiwgMCwgIlBvcyA9MCIpOworCisJCXNyY2ggPSB1c3ZfdTE2 X3NlYXJjaCgmdXN2LCA1KTsKKwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX0VN UFRZLCAiVmVjdG9yIGlzIGVtcHR5LiIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDAs ICJQb3MgPTAiKTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgNik7CisJCWNt cF9vayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9FTVBUWSwgIlZlY3RvciBpcyBlbXB0eS4i KTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAwLCAiUG9zID0wIik7CisKKwkJdmVjdF91 MTZfY2xlYXIoJnVzdik7CisJfQorCXByaW50ZigiVGVzdCBTRUFSQ0ggSU4gVU5JUVVFIFNP UlQgVkVDVCBQQVNTRUQuXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT1cblxuIik7CisKKwlwcmludGYoIj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ZigiVGVzdCBFUlJPUiBPTiBO TyBWRUNUT1IgRk9SIFNFQVJDSElOR1xuIik7CisJeworCQl1c3Zfc3JjaF9yZXNfdCBzcmNo OworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goTlVMTCwgMCk7CisJCWNtcF9vayhzcmNoLnN0 LCAiPT0iLCBVU1ZfU1JDSF9FUlJPUiwKKwkJCSAgICJFcnJvcjogbm8gdmVjdG9yIChlbXB0 eSBwb2ludGVyIG9uIHZlY3Ryb3IpLiIpOworCX0KKwl7CisJCXVuaXFzb3J0dmVjdF91MTZf dCB1c3Y7CisJCXVzdl9zcmNoX3Jlc190IHNyY2g7CisJCXZlY3RfdTE2X2luaXQoJnVzdiwg MCwgTlVMTCk7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDApOworCQljbXBf b2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hfRU1QVFksCisJCQkgICAiU2VhcmNoIGluIGVt cHR5IHZlY3RvciBpcyBub3QgYW4gZXJyb3IuIik7CisKKwkJdmVjdF91MTZfY2xlYXIoJnVz dik7CisJfQorCXByaW50ZigiVGVzdCBFUlJPUiBPTiBOTyBWRUNUT1IgRk9SIFNFQVJDSElO RyBQQVNTRURcbiIpOworCXByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PVxuXG4iKTsKKworCXByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PVxuIik7CisJcHJpbnRmKCJUZXN0IENSRUFURUQgVkVDVE9SUyBB UkUgU09SVEVEIEFORCBVTklRVUVcbiIpOworCXsKKwkJY21wX29rKAorCQkJMCwgIj09IiwK KwkJCXRlc3RfdXN2KDEwLCAodWludDE2X3RbXSkgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3 LCA4LCA5IH0sIC8vIHNyYworCQkJCQkgMTAsCisJCQkJCSAodWludDE2X3RbXSkgeyAwLCAx LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH0pLCAvLyBleHBlY3RlZAorCQkJIlVuaXF1ZSBz b3J0ZWQgdmVjdG9yIHJlbWFpbnMgdGhlIHNhbWUuIik7CisKKwkJY21wX29rKDAsICI9PSIs CisJCQkgICB0ZXN0X3VzdigxMCwKKwkJCQkJCSh1aW50MTZfdFtdKSB7IDAsIDEsIDIsIDMs IDQsIDUsIDMsIDcsIDUsIDkgfSwgLy8gc3JjCisJCQkJCQk4LCAodWludDE2X3RbXSkgeyAw LCAxLCAyLCAzLCA0LCA1LCA3LCA5IH0pLCAvLyBleHBlY3RlZAorCQkJICAgIkR1cGxpY2F0 ZXMgYXJlIHJlbW92ZWQuIik7CisKKwkJY21wX29rKAorCQkJMCwgIj09IiwKKwkJCXRlc3Rf dXN2KDEwLCAodWludDE2X3RbXSkgeyA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwIH0s IC8vIHNyYworCQkJCQkgMTAsCisJCQkJCSAodWludDE2X3RbXSkgeyAwLCAxLCAyLCAzLCA0 LCA1LCA2LCA3LCA4LCA5IH0pLCAvLyBleHBlY3RlZAorCQkJIlVuc29ydGVkIGJlY2FtZSBz b3J0ZWQuIik7CisJfQorCXByaW50ZigiVGVzdCBDUkVBVEVEIFZFQ1RPUlMgQVJFIFNPUlRF RCBBTkQgVU5JUVVFIFBBU1NFRFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG5cbiIpOworCisJZG9uZV90ZXN0aW5nKCk7Cit9CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9kZm9yL3Rlc3RfdmVjdF91MTYuYyBiL3NyYy90ZXN0L2Rm b3IvdGVzdF92ZWN0X3UxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi4wMGVmZTdkY2NiZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2Rmb3IvdGVz dF92ZWN0X3UxNi5jCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogdGVzdF92ZWN0X3UxNi5j CisgKi8KKworI2luY2x1ZGUgImxpYnRhcC90YXAuaCIKKyNpbmNsdWRlICJsaWIvdmVjdF91 MTYuaCIKKworaW50CittYWluKHZvaWQpCit7CisJcGxhbigzNSk7CisKKwlwcmludGYoIj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50Zigi VGVzdCBJTklUIEFORCBDTEVBUiBWRUNUT1JcbiIpOworCXsKKwkJdmVjdF91MTZfdCB2Owor CQlzaXplX3QgY2FwYWNpdHkgPSAxMDsKKwkJY21wX29rKDAsICI9PSIsIHZlY3RfdTE2X2lu aXQoJnYsIGNhcGFjaXR5LCBOVUxMKSwKKwkJCSAgICJSZXN1bHQgb2YgdmVjdF9pbml0IGlz IDAiKTsKKworCQljbXBfb2sodi5jYXAsICI9PSIsIGNhcGFjaXR5LAorCQkJICAgIlZlY3Rv cnMgY2FwYWNpdHkgaXMgZXF1YWwgdG8gcmVxdWVzdGVkIG9uZSIpOworCQljbXBfb2sodi5j bnQsICI9PSIsIDAsICJObyBtZW1iZXJzIGluIHZlY3RvciIpOworCQlvayh2Lm0gIT0gTlVM TCwgIkFycmF5IGZvciBtZW1iZXJzIGlzIHJlc2VydmVkIik7CisJCWNtcF9vayh2Lm1lbV9p c19vdXRlciwgIj09IiwgZmFsc2UsICJWZWN0b3IgZG9lcyBub3QgdXNlIG91dGVyIG1lbW9y eSIpOworCisJCXZlY3RfdTE2X2NsZWFyKCZ2KTsKKworCQljbXBfb2sodi5jYXAsICI9PSIs IDAsICJWZWN0b3JzIGNhcGFjaXR5IGlzIDAgYWZ0ZXIgY2xlYW51cCIpOworCQljbXBfb2so di5jbnQsICI9PSIsIDAsICJObyBtZW1iZXJzIGluIHZlY3RvciBhZnRlciBjbGVhbnVwIik7 CisJCW9rKHYubSA9PSBOVUxMLCAiQXJyYXkgZm9yIG1lbWJlcnMgaXMgYWJzZW50Iik7CisJ CWNtcF9vayh2Lm1lbV9pc19vdXRlciwgIj09IiwgZmFsc2UsICJWZWN0b3IgZG9lcyBub3Qg dXNlIG91dGVyIG1lbW9yeSIpOworCX0KKwlwcmludGYoIlRlc3QgSU5JVCBBTkQgQ0xFQVIg VkVDVE9SIFBBU1NFRFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09XG5cbiIpOworCisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgSU5JVCBBTkQgRklM TCBWRUNUT1JcbiIpOworCXsKKwkJdmVjdF91MTZfdCB2OworCQlzaXplX3QgY2FwYWNpdHkg PSAxMDsKKwkJY29uc3QgdWludDE2X3QgdmFsc1tdID0geyAwLCAxLCAyLCAzLCA0LCA1LCA2 LCA3LCA4LCA5IH07CisKKwkJY21wX29rKDAsICI9PSIsIHZlY3RfdTE2X2luaXQoJnYsIGNh cGFjaXR5LCBOVUxMKSwKKwkJCSAgICJSZXN1bHQgb2YgdmVjdF9pbml0IGlzIDAiKTsKKwkJ Y21wX29rKDAsICI9PSIsIHZlY3RfdTE2X2ZpbGwoJnYsIGNhcGFjaXR5LCB2YWxzKSwKKwkJ CSAgICJSZXN1bHQgb2YgdmVjdF9maWxsIGlzIDAiKTsKKworCQljbXBfb2sodi5jYXAsICI9 PSIsIGNhcGFjaXR5LAorCQkJICAgIlZlY3RvcnMgY2FwYWNpdHkgaXMgZXF1YWwgdG8gcmVx dWVzdGVkIG9uZSIpOworCQlvayh2Lm0gIT0gTlVMTCwgIkFycmF5IGZvciBtZW1iZXJzIGlz IHJlc2VydmVkIik7CisJCWNtcF9vayh2LmNudCwgIj09IiwgY2FwYWNpdHksICJNZW1iZXJz IGFyZSBpbiB2ZWN0b3IuIik7CisJCXsKKwkJCWludCBlcXVhbCA9IDA7CisJCQlmb3IgKHNp emVfdCBpID0gMDsgaSA8IGNhcGFjaXR5OyBpKyspIHsKKwkJCQlpZiAodi5tW2ldID09IGkp CisJCQkJCWVxdWFsID0gZXF1YWwgKyAxOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7CisJCQl9 CisJCQljbXBfb2soZXF1YWwsICI9PSIsIDEwLCAiTWVtYmVycyBhcmUgY29ycmVjdCIpOwor CQl9CisJCXZlY3RfdTE2X2NsZWFyKCZ2KTsKKwl9CisJcHJpbnRmKCJUZXN0IElOSVQgQU5E IEZJTEwgVkVDVE9SIFBBU1NFRFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG5cbiIpOworCisJcHJpbnRmKCI9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgSU5JVCBB TkQgRklMTCBWRUNUT1Igd2l0aCB6ZXJvIGNhcGNhaXR5XG4iKTsKKwl7CisJCXZlY3RfdTE2 X3QgdjsKKwkJc2l6ZV90IGNhcGFjaXR5ID0gMDsKKworCQljbXBfb2soMCwgIj09IiwgdmVj dF91MTZfaW5pdCgmdiwgY2FwYWNpdHksIE5VTEwpLAorCQkJICAgIlJlc3VsdCBvZiB2ZWN0 X2luaXQgaXMgMCIpOworCQljbXBfb2soMCwgIj09IiwgdmVjdF91MTZfZmlsbCgmdiwgY2Fw YWNpdHksIE5VTEwpLAorCQkJICAgIlJlc3VsdCBvZiB2ZWN0X2ZpbGwgaXMgMCIpOworCisJ CWNtcF9vayh2LmNhcCwgIj09IiwgMCwgIlZlY3RvcidzIGNhcGFjaXR5IGlzIHplcm8iKTsK KwkJb2sodi5tID09IE5VTEwsCisJCSAgICJQb2ludGVyIHRvIG1lbWJlcnMgaXMgTlVMTCAo YXJyYXkgZm9yIG1lbWJlcnMgaXMgbm90IHJlc2VydmVkKSIpOworCQlvayh2LmNudCA9PSAw LCAiQ291bnRlciBvZiBtZW1iZXJzIGlzIHplcm8uIik7CisJCXZlY3RfdTE2X2NsZWFyKCZ2 KTsKKwl9CisJeworCQl2ZWN0X3UxNl90IHY7CisJCXNpemVfdCBjYXBhY2l0eSA9IDEwOwor CQljb25zdCB1aW50MTZfdCB2YWxzW10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgs IDkgfTsKKworCQljbXBfb2soMCwgIj09IiwgdmVjdF91MTZfaW5pdCgmdiwgMCwgTlVMTCks ICJSZXN1bHQgb2YgdmVjdF9pbml0IGlzIDAiKTsKKwkJY21wX29rKDAsICI9PSIsIHZlY3Rf dTE2X2ZpbGwoJnYsIGNhcGFjaXR5LCB2YWxzKSwKKwkJCSAgICJSZXN1bHQgb2YgdmVjdF9m aWxsIGlzIDAiKTsKKworCQljbXBfb2sodi5jYXAsICI9PSIsIGNhcGFjaXR5LAorCQkJICAg IlZlY3RvcidzIGNhcGFjaXR5IGlzIG5vdCB6ZXJvIGFmdGVyIGZpbGxpbmciKTsKKwkJb2so di5tICE9IE5VTEwsCisJCSAgICJQb2ludGVyIHRvIG1lbWJlcnMgaXMgbm90IE5VTEwgZmF0 ZXIgZmlsbGluZyAoYXJyYXkgZm9yIG1lbWJlcnMgaGFzIGJlZW4gcmVzZXJ2ZWQpIik7CisJ CW9rKHYuY250ID09IGNhcGFjaXR5LCAiQ291bnRlciBvZiBtZW1iZXJzIGlzIG5vdCB6ZXJv IGFmdGVyIGZpbGxpbmcuIik7CisJCXZlY3RfdTE2X2NsZWFyKCZ2KTsKKwl9CisJcHJpbnRm KCJUZXN0IElOSVQgQU5EIEZJTEwgVkVDVE9SIHdpdGggemVybyBjYXBjYWl0eSBpcyBmaW5p c2hlZFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09XG5cbiIpOworCisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgQ09NUEFSRSBWRUNUT1JTXG4iKTsK Kwl7CisJCXZlY3RfdTE2X3QgYSwgYiwgYywgZDsKKworCQl1aW50MTZfdCBhdmFsc1tdID0g eyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH07CisJCXVpbnQxNl90IGJ2YWxzW10g PSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgfTsKKwkJdWludDE2X3QgY3ZhbHNb XSA9IHsgMSwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSB9OworCQl1aW50MTZfdCBkdmFs c1tdID0geyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4IH07CisKKwkJdmVjdF91MTZfaW5p dCgmYSwgMCwgTlVMTCk7CisJCXZlY3RfdTE2X2luaXQoJmIsIDAsIE5VTEwpOworCQl2ZWN0 X3UxNl9pbml0KCZjLCAwLCBOVUxMKTsKKwkJdmVjdF91MTZfaW5pdCgmZCwgMCwgTlVMTCk7 CisKKwkJdmVjdF91MTZfZmlsbCgmYSwgMTAsIGF2YWxzKTsKKwkJdmVjdF91MTZfZmlsbCgm YiwgMTAsIGJ2YWxzKTsKKwkJdmVjdF91MTZfZmlsbCgmYywgMTAsIGN2YWxzKTsKKwkJdmVj dF91MTZfZmlsbCgmZCwgOSwgZHZhbHMpOworCisJCWNtcF9vaygwLCAiPT0iLCB2ZWN0X3Ux Nl9jb21wYXJlKCZhLCAmYiksICJWZWN0b3JzIGFyZSBlcXVhbCIpOworCQljbXBfb2soLTEs ICI9PSIsIHZlY3RfdTE2X2NvbXBhcmUoJmEsICZjKSwKKwkJCSAgICJWZWN0b3JzIGFyZSBu b3QgZXF1YWwgYmVjYXVzZSBvZiB2YWx1ZSBvZiBtZW1iZXJzIik7CisJCWNtcF9vaygtMSwg Ij09IiwgdmVjdF91MTZfY29tcGFyZSgmYSwgJmQpLAorCQkJICAgIlZlY3RvcnMgYXJlIG5v dCBlcXVhbCBiZWNhdXNlIG9mIG51bWJlciBvZiBtZW1iZXJzIik7CisJfQorCXByaW50Zigi VGVzdCBDT01QQVJFIFZFQ1RPUlMgaXMgZmluaXNoZWQuIFxuIik7CisJcHJpbnRmKCI9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiIpOworCisJcHJpbnRm KCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmlu dGYoIlRlc3QgVkVDVE9SIFdJVEggT1VURVIgTUVNT1JZXG4iKTsKKwl7CisjZGVmaW5lIFZF Q1RfQ0FQIDEwMAorCQl2ZWN0X3UxNl90IHZlY3Q7CisJCXVpbnQxNl90IGJ1ZltWRUNUX0NB UF07IC8qIHVpbnQxNl90IGlzIHRoZSBpdGVtJ3MgdHlwZSAqLworCQl2ZWN0X3UxNl9pbml0 KCZ2ZWN0LCBWRUNUX0NBUCwgYnVmKTsKKwkJY21wX29rKAorCQkJdmVjdC5jYXAsICI9PSIs IFZFQ1RfQ0FQLAorCQkJIkluaXRpYWxpc2F0aW9uIG9mIHZlY3RvciBoYXZpbmcgZXh0ZXJu YWwgbWVtb3J5IHJlc3VsdGVkIGluIHByb3BlciBjYXBhY2l0eS4iKTsKKwkJY21wX29rKAor CQkJdmVjdC5jbnQsICI9PSIsIDAsCisJCQkiSW5pdGlhbGlzYXRpb24gb2YgdmVjdG9yIGhh dmluZyBleHRlcm5hbCBtZW1vcnkgcmVzdWx0ZWQgaW4gcHJvcGVyIG51bWJlciBvZiBpdGVt cy4iKTsKKwkJb2soKCh2b2lkICopdmVjdC5tID09ICh2b2lkICopYnVmKSwKKwkJICAgIklu aXRpYWxpc2F0aW9uIG9mIHZlY3RvciBoYXZpbmcgZXh0ZXJuYWwgbWVtb3J5IHNldCBidWYg dG8gdmVjdC0+bS4iKTsKKwkJb2sodmVjdC5tZW1faXNfb3V0ZXIsCisJCSAgICJJbml0aWFs aXNhdGlvbiBvZiB2ZWN0b3IgaGF2aW5nIGV4dGVybmFsIG1lbW9yeSBzZXQgbWVtX2lzX291 dGVyIGZsYWcuIik7CisKKwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBWRUNUX0NBUDsgaSsr KQorCQl7CisJCQlpZiAodmVjdF91MTZfYXBwZW5kKCZ2ZWN0LCBpKSAhPSAwKQorCQkJCWZh aWwoCisJCQkJCSJFUlJPUjogTmV3IHZhbHVlIGNhbid0IGJlIGFwcGVuZGVkIGludG8gdmVj dG9yIGhhdmluZyBleHRlcm5hbCBtZW1vcnkuIik7CisJCX0KKwkJcGFzcygKKwkJCSJBbGwg dmFsdWVzIGhhdmUgYmVlbiBhcHBlbmRlZCBpbnRvIHZlY3RvciBoYXZpbmcgZXh0ZXJuYWwg bWVtb3J5LiIpOworCisJCWNtcF9vayh2ZWN0LmNudCwgIj09IiwgVkVDVF9DQVAsICJWZWN0 b3IgaXMgZnVsbC4iKTsKKwkJY21wX29rKHZlY3RfdTE2X2FwcGVuZCgmdmVjdCwgVkVDVF9D QVApLCAiPT0iLCAtMSwKKwkJCSAgICJPbmNlIHZlY3RvciBpcyBmdWxsLCBleHRyYSBpdGVt IGNhbid0IGJlIGFwcGVuZGVkLiIpOworCX0KKwlwcmludGYoIlRlc3QgVkVDVE9SIFdJVEgg T1VURVIgTUVNT1JZIGlzIGZpbmlzaGVkXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCisJZG9uZV90ZXN0aW5nKCk7Cit9 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9saWJ0YXAvLmdpdGlnbm9yZSBiL3NyYy90ZXN0L2xp YnRhcC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li4yYzk1ZDA0NmM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2xpYnRhcC8uZ2l0 aWdub3JlCkBAIC0wLDAgKzEsMTMgQEAKKy90LyoKKyEvdC8qLioKKy90LyouZXhlCisvdC8q LmdvdAorKi5hCisqLmxvCisqLm8KKyouc28KKyoucGMKK3Vzci8KKyouc3c/CisvLmRlcHMK Ky8uZGlyc3RhbXAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2xpYnRhcC8udHJhdmlzLnltbCBi L3NyYy90ZXN0L2xpYnRhcC8udHJhdmlzLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uNmY5ODA5ZTFiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9saWJ0YXAvLnRyYXZpcy55bWwKQEAgLTAsMCArMSwxMyBAQAorbGFuZ3VhZ2U6IGMKKwor Y29tcGlsZXI6CisgIC0gZ2NjCisgIC0gY2xhbmcKKworYmVmb3JlX2luc3RhbGw6IHN1ZG8g YXB0LWdldCBpbnN0YWxsIC15IGxpYnRlc3QtZGlmZmVyZW5jZXMtcGVybAorCitpbnN0YWxs OiBtYWtlIENDPSRDQyBpbnN0YWxsCisKK3NjcmlwdDogbWFrZSBDQz0kQ0MgdGVzdAorCith ZnRlcl9zY3JpcHQ6IG1ha2UgdW5pbnN0YWxsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9saWJ0 YXAvQ09QWUlORyBiL3NyYy90ZXN0L2xpYnRhcC9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NWM1Y2E4OGE2NwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L2xpYnRhcC9DT1BZSU5HCkBAIC0wLDAgKzEsMTY1IEBACisgICAgICAgICAg ICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAg ICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CisKKyBDb3B5cmlnaHQgKEMp IDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+ CisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0 aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQg aXMgbm90IGFsbG93ZWQuCisKKworICBUaGlzIHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSB0ZXJtcyBhbmQgY29u ZGl0aW9ucyBvZiB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5z ZSwgc3VwcGxlbWVudGVkIGJ5IHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGxpc3RlZCBi ZWxvdy4KKworICAwLiBBZGRpdGlvbmFsIERlZmluaXRpb25zLgorCisgIEFzIHVzZWQgaGVy ZWluLCAidGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgTGVz c2VyCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlICJHTlUgR1BMIiByZWZlcnMg dG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAg IlRoZSBMaWJyYXJ5IiByZWZlcnMgdG8gYSBjb3ZlcmVkIHdvcmsgZ292ZXJuZWQgYnkgdGhp cyBMaWNlbnNlLAorb3RoZXIgdGhhbiBhbiBBcHBsaWNhdGlvbiBvciBhIENvbWJpbmVkIFdv cmsgYXMgZGVmaW5lZCBiZWxvdy4KKworICBBbiAiQXBwbGljYXRpb24iIGlzIGFueSB3b3Jr IHRoYXQgbWFrZXMgdXNlIG9mIGFuIGludGVyZmFjZSBwcm92aWRlZAorYnkgdGhlIExpYnJh cnksIGJ1dCB3aGljaCBpcyBub3Qgb3RoZXJ3aXNlIGJhc2VkIG9uIHRoZSBMaWJyYXJ5Lgor RGVmaW5pbmcgYSBzdWJjbGFzcyBvZiBhIGNsYXNzIGRlZmluZWQgYnkgdGhlIExpYnJhcnkg aXMgZGVlbWVkIGEgbW9kZQorb2YgdXNpbmcgYW4gaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRo ZSBMaWJyYXJ5LgorCisgIEEgIkNvbWJpbmVkIFdvcmsiIGlzIGEgd29yayBwcm9kdWNlZCBi eSBjb21iaW5pbmcgb3IgbGlua2luZyBhbgorQXBwbGljYXRpb24gd2l0aCB0aGUgTGlicmFy eS4gIFRoZSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpYnJhcnkKK3dpdGggd2hpY2gg dGhlIENvbWJpbmVkIFdvcmsgd2FzIG1hZGUgaXMgYWxzbyBjYWxsZWQgdGhlICJMaW5rZWQK K1ZlcnNpb24iLgorCisgIFRoZSAiTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSIgZm9y IGEgQ29tYmluZWQgV29yayBtZWFucyB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGZvciB0 aGUgQ29tYmluZWQgV29yaywgZXhjbHVkaW5nIGFueSBzb3VyY2UgY29kZQorZm9yIHBvcnRp b25zIG9mIHRoZSBDb21iaW5lZCBXb3JrIHRoYXQsIGNvbnNpZGVyZWQgaW4gaXNvbGF0aW9u LCBhcmUKK2Jhc2VkIG9uIHRoZSBBcHBsaWNhdGlvbiwgYW5kIG5vdCBvbiB0aGUgTGlua2Vk IFZlcnNpb24uCisKKyAgVGhlICJDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGUiIGZv ciBhIENvbWJpbmVkIFdvcmsgbWVhbnMgdGhlCitvYmplY3QgY29kZSBhbmQvb3Igc291cmNl IGNvZGUgZm9yIHRoZSBBcHBsaWNhdGlvbiwgaW5jbHVkaW5nIGFueSBkYXRhCithbmQgdXRp bGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZSBDb21iaW5lZCBXb3Jr IGZyb20gdGhlCitBcHBsaWNhdGlvbiwgYnV0IGV4Y2x1ZGluZyB0aGUgU3lzdGVtIExpYnJh cmllcyBvZiB0aGUgQ29tYmluZWQgV29yay4KKworICAxLiBFeGNlcHRpb24gdG8gU2VjdGlv biAzIG9mIHRoZSBHTlUgR1BMLgorCisgIFlvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3Jr IHVuZGVyIHNlY3Rpb25zIDMgYW5kIDQgb2YgdGhpcyBMaWNlbnNlCit3aXRob3V0IGJlaW5n IGJvdW5kIGJ5IHNlY3Rpb24gMyBvZiB0aGUgR05VIEdQTC4KKworICAyLiBDb252ZXlpbmcg TW9kaWZpZWQgVmVyc2lvbnMuCisKKyAgSWYgeW91IG1vZGlmeSBhIGNvcHkgb2YgdGhlIExp YnJhcnksIGFuZCwgaW4geW91ciBtb2RpZmljYXRpb25zLCBhCitmYWNpbGl0eSByZWZlcnMg dG8gYSBmdW5jdGlvbiBvciBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIEFwcGxpY2F0aW9u Cit0aGF0IHVzZXMgdGhlIGZhY2lsaXR5IChvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBh c3NlZCB3aGVuIHRoZQorZmFjaWxpdHkgaXMgaW52b2tlZCksIHRoZW4geW91IG1heSBjb252 ZXkgYSBjb3B5IG9mIHRoZSBtb2RpZmllZAordmVyc2lvbjoKKworICAgYSkgdW5kZXIgdGhp cyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IHlvdSBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQg dG8KKyAgIGVuc3VyZSB0aGF0LCBpbiB0aGUgZXZlbnQgYW4gQXBwbGljYXRpb24gZG9lcyBu b3Qgc3VwcGx5IHRoZQorICAgZnVuY3Rpb24gb3IgZGF0YSwgdGhlIGZhY2lsaXR5IHN0aWxs IG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMKKyAgIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBv c2UgcmVtYWlucyBtZWFuaW5nZnVsLCBvcgorCisgICBiKSB1bmRlciB0aGUgR05VIEdQTCwg d2l0aCBub25lIG9mIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9mCisgICB0aGlzIExp Y2Vuc2UgYXBwbGljYWJsZSB0byB0aGF0IGNvcHkuCisKKyAgMy4gT2JqZWN0IENvZGUgSW5j b3Jwb3JhdGluZyBNYXRlcmlhbCBmcm9tIExpYnJhcnkgSGVhZGVyIEZpbGVzLgorCisgIFRo ZSBvYmplY3QgY29kZSBmb3JtIG9mIGFuIEFwcGxpY2F0aW9uIG1heSBpbmNvcnBvcmF0ZSBt YXRlcmlhbCBmcm9tCithIGhlYWRlciBmaWxlIHRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFy eS4gIFlvdSBtYXkgY29udmV5IHN1Y2ggb2JqZWN0Citjb2RlIHVuZGVyIHRlcm1zIG9mIHlv dXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0LCBpZiB0aGUgaW5jb3Jwb3JhdGVkCittYXRlcmlh bCBpcyBub3QgbGltaXRlZCB0byBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YSBzdHJ1Y3R1 cmUKK2xheW91dHMgYW5kIGFjY2Vzc29ycywgb3Igc21hbGwgbWFjcm9zLCBpbmxpbmUgZnVu Y3Rpb25zIGFuZCB0ZW1wbGF0ZXMKKyh0ZW4gb3IgZmV3ZXIgbGluZXMgaW4gbGVuZ3RoKSwg eW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKKworICAgYSkgR2l2ZSBwcm9taW5lbnQg bm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBvYmplY3QgY29kZSB0aGF0IHRoZQorICAg TGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNl IGFyZQorICAgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgIGIpIEFjY29tcGFueSB0 aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGlj ZW5zZQorICAgZG9jdW1lbnQuCisKKyAgNC4gQ29tYmluZWQgV29ya3MuCisKKyAgWW91IG1h eSBjb252ZXkgYSBDb21iaW5lZCBXb3JrIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlIHRo YXQsCit0YWtlbiB0b2dldGhlciwgZWZmZWN0aXZlbHkgZG8gbm90IHJlc3RyaWN0IG1vZGlm aWNhdGlvbiBvZiB0aGUKK3BvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IGNvbnRhaW5lZCBpbiB0 aGUgQ29tYmluZWQgV29yayBhbmQgcmV2ZXJzZQorZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2lu ZyBzdWNoIG1vZGlmaWNhdGlvbnMsIGlmIHlvdSBhbHNvIGRvIGVhY2ggb2YKK3RoZSBmb2xs b3dpbmc6CisKKyAgIGEpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBv ZiB0aGUgQ29tYmluZWQgV29yayB0aGF0CisgICB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0 IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZQorICAgY292ZXJlZCBieSB0 aGlzIExpY2Vuc2UuCisKKyAgIGIpIEFjY29tcGFueSB0aGUgQ29tYmluZWQgV29yayB3aXRo IGEgY29weSBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlCisgICBkb2N1bWVudC4K KworICAgYykgRm9yIGEgQ29tYmluZWQgV29yayB0aGF0IGRpc3BsYXlzIGNvcHlyaWdodCBu b3RpY2VzIGR1cmluZworICAgZXhlY3V0aW9uLCBpbmNsdWRlIHRoZSBjb3B5cmlnaHQgbm90 aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZworICAgdGhlc2Ugbm90aWNlcywgYXMgd2VsbCBh cyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlCisgICBjb3BpZXMgb2Yg dGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC4KKworICAgZCkgRG8gb25l IG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAwKSBDb252ZXkgdGhlIE1pbmltYWwgQ29y cmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKKyAgICAgICBMaWNl bnNlLCBhbmQgdGhlIENvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29kZSBpbiBhIGZvcm0K KyAgICAgICBzdWl0YWJsZSBmb3IsIGFuZCB1bmRlciB0ZXJtcyB0aGF0IHBlcm1pdCwgdGhl IHVzZXIgdG8KKyAgICAgICByZWNvbWJpbmUgb3IgcmVsaW5rIHRoZSBBcHBsaWNhdGlvbiB3 aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZgorICAgICAgIHRoZSBMaW5rZWQgVmVyc2lvbiB0 byBwcm9kdWNlIGEgbW9kaWZpZWQgQ29tYmluZWQgV29yaywgaW4gdGhlCisgICAgICAgbWFu bmVyIHNwZWNpZmllZCBieSBzZWN0aW9uIDYgb2YgdGhlIEdOVSBHUEwgZm9yIGNvbnZleWlu ZworICAgICAgIENvcnJlc3BvbmRpbmcgU291cmNlLgorCisgICAgICAgMSkgVXNlIGEgc3Vp dGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCisg ICAgICAgTGlicmFyeS4gIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0IChhKSB1 c2VzIGF0IHJ1biB0aW1lCisgICAgICAgYSBjb3B5IG9mIHRoZSBMaWJyYXJ5IGFscmVhZHkg cHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyCisgICAgICAgc3lzdGVtLCBhbmQgKGIp IHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbgorICAgICAg IG9mIHRoZSBMaWJyYXJ5IHRoYXQgaXMgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUg TGlua2VkCisgICAgICAgVmVyc2lvbi4KKworICAgZSkgUHJvdmlkZSBJbnN0YWxsYXRpb24g SW5mb3JtYXRpb24sIGJ1dCBvbmx5IGlmIHlvdSB3b3VsZCBvdGhlcndpc2UKKyAgIGJlIHJl cXVpcmVkIHRvIHByb3ZpZGUgc3VjaCBpbmZvcm1hdGlvbiB1bmRlciBzZWN0aW9uIDYgb2Yg dGhlCisgICBHTlUgR1BMLCBhbmQgb25seSB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCBpbmZv cm1hdGlvbiBpcworICAgbmVjZXNzYXJ5IHRvIGluc3RhbGwgYW5kIGV4ZWN1dGUgYSBtb2Rp ZmllZCB2ZXJzaW9uIG9mIHRoZQorICAgQ29tYmluZWQgV29yayBwcm9kdWNlZCBieSByZWNv bWJpbmluZyBvciByZWxpbmtpbmcgdGhlCisgICBBcHBsaWNhdGlvbiB3aXRoIGEgbW9kaWZp ZWQgdmVyc2lvbiBvZiB0aGUgTGlua2VkIFZlcnNpb24uIChJZgorICAgeW91IHVzZSBvcHRp b24gNGQwLCB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIG11c3QgYWNjb21wYW55Cisg ICB0aGUgTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbmQgQ29ycmVzcG9uZGluZyBB cHBsaWNhdGlvbgorICAgQ29kZS4gSWYgeW91IHVzZSBvcHRpb24gNGQxLCB5b3UgbXVzdCBw cm92aWRlIHRoZSBJbnN0YWxsYXRpb24KKyAgIEluZm9ybWF0aW9uIGluIHRoZSBtYW5uZXIg c3BlY2lmaWVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTAorICAgZm9yIGNvbnZleWlu ZyBDb3JyZXNwb25kaW5nIFNvdXJjZS4pCisKKyAgNS4gQ29tYmluZWQgTGlicmFyaWVzLgor CisgIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBi YXNlZCBvbiB0aGUKK0xpYnJhcnkgc2lkZSBieSBzaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkg dG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CitmYWNpbGl0aWVzIHRoYXQgYXJlIG5vdCBB cHBsaWNhdGlvbnMgYW5kIGFyZSBub3QgY292ZXJlZCBieSB0aGlzCitMaWNlbnNlLCBhbmQg Y29udmV5IHN1Y2ggYSBjb21iaW5lZCBsaWJyYXJ5IHVuZGVyIHRlcm1zIG9mIHlvdXIKK2No b2ljZSwgaWYgeW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKKworICAgYSkgQWNjb21w YW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsg YmFzZWQKKyAgIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxp YnJhcnkgZmFjaWxpdGllcywKKyAgIGNvbnZleWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlz IExpY2Vuc2UuCisKKyAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21i aW5lZCBsaWJyYXJ5IHRoYXQgcGFydCBvZiBpdAorICAgaXMgYSB3b3JrIGJhc2VkIG9uIHRo ZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZyB3aGVyZSB0byBmaW5kIHRoZQorICAgYWNjb21w YW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCisgIDYuIFJldmlz ZWQgVmVyc2lvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4K KworICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQg YW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUg c2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlm ZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKwor ICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJl ci4gSWYgdGhlCitMaWJyYXJ5IGFzIHlvdSByZWNlaXZlZCBpdCBzcGVjaWZpZXMgdGhhdCBh IGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbgorb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iCithcHBsaWVzIHRvIGl0LCB5 b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRp b25zIGVpdGhlciBvZiB0aGF0IHB1Ymxpc2hlZCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2 ZXJzaW9uCitwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYg dGhlIExpYnJhcnkgYXMgeW91CityZWNlaXZlZCBpdCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVy c2lvbiBudW1iZXIgb2YgdGhlIEdOVSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2Us IHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyCitHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisKKyAgSWYgdGhlIExpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNp ZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZQord2hldGhlciBmdXR1cmUgdmVyc2lvbnMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBzaGFsbAorYXBwbHks IHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYW55IHZl cnNpb24gaXMKK3Blcm1hbmVudCBhdXRob3JpemF0aW9uIGZvciB5b3UgdG8gY2hvb3NlIHRo YXQgdmVyc2lvbiBmb3IgdGhlCitMaWJyYXJ5LgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbGli dGFwL0lOU1RBTEwgYi9zcmMvdGVzdC9saWJ0YXAvSU5TVEFMTApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWIyYzc2ZGYzZDcKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9saWJ0YXAvSU5TVEFMTApAQCAtMCwwICsxLDQxIEBACitUbyBpbnN0YWxs IGxpYnRhcCBvbiBhIFVuaXgtbGlrZSBzeXN0ZW06CisKKyAgICAkIG1ha2UKKyAgICAkIG1h a2UgY2hlY2sKKyAgICAkIG1ha2UgaW5zdGFsbAorCitUbyBjb21waWxlIHdpdGggZ2NjIC1h bnNpLCBydW46CisKKyAgICAkIEFOU0k9MSBtYWtlCisKK1RvIGluc3RhbGwgdG8gYSBkaWZm ZXJlbnQgZGlyZWN0b3J5IHRoYW4gL3Vzci9sb2NhbCwgc3VwcGx5IHRoZQorUFJFRklYIHZh cmlhYmxlIHRvIG1ha2U6CisKKyAgICAkIFBSRUZJWD0vdXNyIG1ha2UgaW5zdGFsbAorCitP biBXaW5kb3dzLCB0aGUgbGlicmFyeSBjYW4gYmUgY3JlYXRlZCBieSBmaXJzdCBzZXR0aW5n IHVwIHRoZQorY29ycmVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFVz dWFsbHkgdGhpcyBpcyBkb25lIGJ5CitydW5uaW5nIHZjdmFyczMyLmJhdCBpbmNsdWRlZCBp biB0aGUgVmlzdWFsIFN0dWRpbyBkaXN0cmlidXRpb24uCitZb3Ugc2hvdWxkIGFsc28gaW5z dGFsbCBnbnUgbWFrZSB3aGljaCBjYW4gYmUgZm91bmQgYXQKK2h0dHA6Ly9nbnV3aW4zMi5z b3VyY2Vmb3JnZS5uZXQvcGFja2FnZXMvbWFrZS5odG0uIE9uY2UgdGhpcyBpcworZG9uZSwg eW91IHNob3VsZCBiZSBhYmxlIHRvIHJ1biB0aGUgZm9sbG93aW5nOgorCisgICAgPiBtYWtl IC1mIE1ha2VmaWxlLndpbgorCitJZiB5b3Ugd2FudCB0byB1c2UgaXQgZGlyZWN0bHkgaW4g YW5vdGhlciBwcm9qZWN0LCB5b3UgY2FuIGNvcHkgdGFwLmMKK2FuZCB0YXAuaCB0aGVyZSBh bmQgaXQgc2hvdWxkbid0IGhhdmUgYSBwcm9ibGVtIGNvbXBpbGluZy4KKworICAgICQgbHMK KyAgICB0YXAuYyB0YXAuaCB0ZXN0LmMKKyAgICAkIGNhdCB0ZXN0LmMKKyAgICAjaW5jbHVk ZSAidGFwLmgiCisgICAgaW50IG1haW4gKCkgeworICAgICAgICBwbGFuKDEpOworICAgICAg ICBvayg1MCArIDUsICJmb28gJXMiLCAiYmFyIik7CisgICAgICAgIGRvbmVfdGVzdGluZygp OworICAgIH0KKyAgICAkIGdjYyB0ZXN0LmMgdGFwLmMKKyAgICAkIGEub3V0CisgICAgMS4u MQorICAgIG9rIDEgLSBmb28gYmFyCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2xpYnRhcC9N YWtlZmlsZSBiL3NyYy90ZXN0L2xpYnRhcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uZjAyMGMyODM5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9saWJ0YXAvTWFrZWZpbGUKQEAgLTAsMCArMSw3MyBAQAorQ0MgPz0gZ2NjCitD RkxBR1MgKz0gLVdhbGwgLUkuIC1mUElDCitQUkVGSVggPz0gJChERVNURElSKS91c3IvbG9j YWwKK1RFU1RTID0gJChwYXRzdWJzdCAlLmMsICUsICQod2lsZGNhcmQgdC8qLmMpKQorCitp ZmRlZiBBTlNJCisJIyAtRF9CU0RfU09VUkNFIGZvciBNQVBfQU5PTllNT1VTCisJQ0ZMQUdT ICs9IC1hbnNpIC1EX0JTRF9TT1VSQ0UKKwlMRExJQlMgKz0gLWxic2QtY29tcGF0CitlbmRp ZgorCislOgorCSQoQ0MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJChmaWx0ZXIgJS5v ICUuYSAlLnNvLCAkXikgJChMRExJQlMpIC1vICRACisKKyUubzoKKwkkKENDKSAkKENGTEFH UykgJChDUFBGTEFHUykgJChUQVJHRVRfQVJDSCkgLWMgJChmaWx0ZXIgJS5jLCAkXikgJChM RExJQlMpIC1vICRACisKKyUuYToKKwkkKEFSKSByY3MgJEAgJChmaWx0ZXIgJS5vLCAkXikK KworJS5zbzoKKwkkKENDKSAtc2hhcmVkICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJChm aWx0ZXIgJS5vLCAkXikgJChMRExJQlMpIC1vICRACisKK2FsbDogbGlidGFwLmEgbGlidGFw LnNvIHRhcC5wYyB0ZXN0cworCit0YXAucGM6CisJQGVjaG8gZ2VuZXJhdGluZyB0YXAucGMK KwlAZWNobyAncHJlZml4PSckKFBSRUZJWCkgPiB0YXAucGMKKwlAZWNobyAnZXhlY19wcmVm aXg9JCR7cHJlZml4fScgPj4gdGFwLnBjCisJQGVjaG8gJ2xpYmRpcj0kJHtwcmVmaXh9L2xp YicgPj4gdGFwLnBjCisJQGVjaG8gJ2luY2x1ZGVkaXI9JCR7cHJlZml4fS9pbmNsdWRlJyA+ PiB0YXAucGMKKwlAZWNobyAnJyA+PiB0YXAucGMKKwlAZWNobyAnTmFtZTogbGlidGFwJyA+ PiB0YXAucGMKKwlAZWNobyAnRGVzY3JpcHRpb246IFdyaXRlIHRlc3RzIGluIEMnID4+IHRh cC5wYworCUBlY2hvICdWZXJzaW9uOiAwLjEuMCcgPj4gdGFwLnBjCisJQGVjaG8gJ1VSTDog aHR0cHM6Ly9naXRodWIuY29tL3pvcmduYXgvbGlidGFwJyA+PiB0YXAucGMKKwlAZWNobyAn TGliczogLUwkJHtsaWJkaXJ9IC1sdGFwJyA+PiB0YXAucGMKKwlAZWNobyAnQ2ZsYWdzOiAt SSQke2luY2x1ZGVkaXJ9JyA+PiB0YXAucGMKKworbGlidGFwLmE6IHRhcC5vCisKK2xpYnRh cC5zbzogdGFwLm8KKwordGFwLm86IHRhcC5jIHRhcC5oCisKK3Rlc3RzOiAkKFRFU1RTKQor CiskKFRFU1RTKTogJTogJS5vIGxpYnRhcC5hCisKKyQocGF0c3Vic3QgJSwgJS5vLCAkKFRF U1RTKSk6ICUubzogJS5jIHRhcC5oCisJJChDQykgJChDRkxBR1MpIC1PMCAkKENQUEZMQUdT KSAkKFRBUkdFVF9BUkNIKSAtYyAkKGZpbHRlciAlLmMsICReKSAkKExETElCUykgLW8gJEAK KworY2xlYW46CisJcm0gLXJmICoubyB0LyoubyB0YXAucGMgbGlidGFwLmEgbGlidGFwLnNv ICQoVEVTVFMpCisKK2luc3RhbGw6IGxpYnRhcC5hIHRhcC5oIGxpYnRhcC5zbyB0YXAucGMK Kwlta2RpciAtcCAkKFBSRUZJWCkvbGliICQoUFJFRklYKS9pbmNsdWRlICQoUFJFRklYKS9s aWIvcGtnY29uZmlnCisJaW5zdGFsbCAtYyBsaWJ0YXAuYSAkKFBSRUZJWCkvbGliCisJaW5z dGFsbCAtYyBsaWJ0YXAuc28gJChQUkVGSVgpL2xpYgorCWluc3RhbGwgLWMgdGFwLnBjICQo UFJFRklYKS9saWIvcGtnY29uZmlnCisJaW5zdGFsbCAtYyB0YXAuaCAkKFBSRUZJWCkvaW5j bHVkZQorCit1bmluc3RhbGw6CisJcm0gJChQUkVGSVgpL2xpYi9saWJ0YXAuYSAkKFBSRUZJ WCkvbGliL2xpYnRhcC5zbyAkKFBSRUZJWCkvaW5jbHVkZS90YXAuaAorCitkaXN0OgorCXJt IGxpYnRhcC56aXAKKwl6aXAgLXIgbGlidGFwICoKKworY2hlY2sgdGVzdDogYWxsCisJLi90 L3Rlc3QKKworLlBIT05ZOiBhbGwgY2xlYW4gaW5zdGFsbCB1bmluc3RhbGwgZGlzdCBjaGVj ayB0ZXN0IHRlc3RzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9saWJ0YXAvTWFrZWZpbGUud2lu IGIvc3JjL3Rlc3QvbGlidGFwL01ha2VmaWxlLndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNjk0ZDY3OWExYjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9saWJ0YXAvTWFrZWZpbGUud2luCkBAIC0wLDAgKzEsMzcgQEAKK0NGTEFHUyA9IC9a aSAvV2FsbCAvd2Q0MjU1IC93ZDQ5OTYgL3dkNDEyNyAvd2Q0ODIwIC93ZDQxMDAgL3dkNDYx OSBcCisJCSAvd2Q0NTE0IC93ZDQ2NjggL0kuCitDQyA9IGNsIC9ub2xvZ28KK1RFU1RTID0g JChwYXRzdWJzdCAlLmMsICUuZXhlLCAkKHdpbGRjYXJkIHQvKi5jKSkKKworJS5leGU6CisJ JChDQykgJChMREZMQUdTKSAkKGZpbHRlciAlLm9iaiAlLmxpYiAlLmRsbCwgJF4pICQoTERM SUJTKSAvRmUgJEAKKworJS5vOgorCSQoQ0MpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAvYyAk KGZpbHRlciAlLmMsICReKSAkKExETElCUykgL0ZvICRACisKKyUubGliOgorCWxpYiAvbm9s b2dvIC9vdXQ6JEAgJChmaWx0ZXIgJS5vYmosICReKQorCislLmRsbDoKKwlsaWIgL25vbG9n byAvb3V0OiRAICQoZmlsdGVyICUub2JqLCAkXikKKworYWxsOiB0YXAubGliIHRlc3RzCisK K3RhcC5saWI6IHRhcC5vYmoKKwordGFwLm9iajogdGFwLmMgdGFwLmgKKwordGVzdHM6ICQo VEVTVFMpCisKKyQoVEVTVFMpOiAlLmV4ZTogJS5vYmogdGFwLmxpYgorCiskKHBhdHN1YnN0 ICUuZXhlLCAlLm9iaiwgJChURVNUUykpOiAlLm9iajogJS5jIHRhcC5oCisKK2NsZWFuOgor CXJtIC1yZiAqLm9iaiB0Lyoub2JqIHRhcC5saWIgJChURVNUUykKKworY2hlY2sgdGVzdDog YWxsCisJcHJvdmUKKworLlBIT05ZOiBhbGwgY2xlYW4gY2hlY2sgdGVzdCB0ZXN0cworCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9saWJ0YXAvUkVBRE1FLm1kIGIvc3JjL3Rlc3QvbGlidGFw L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTMz MmQ1MjZjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9saWJ0YXAvUkVBRE1FLm1k CkBAIC0wLDAgKzEsMjY4IEBACitOQU1FCis9PT09CisKK2xpYnRhcCAtIFdyaXRlIHRlc3Rz IGluIEMKKworU1lOT1BTSVMKKz09PT09PT09CisKKyAgICAjaW5jbHVkZSA8dGFwLmg+CisK KyAgICBpbnQgbWFpbiAoKSB7CisgICAgICAgIHBsYW4oNSk7CisgICAgICAgIGludCBicm9u emUgPSAxLCBzaWx2ZXIgPSAyLCBnb2xkID0gMzsKKyAgICAgICAgb2soYnJvbnplIDwgc2ls dmVyLCAiYnJvbnplIGlzIGxlc3MgdGhhbiBzaWx2ZXIiKTsKKyAgICAgICAgb2soYnJvbnpl ID4gc2lsdmVyLCAibm90IHF1aXRlIik7CisgICAgICAgIGlzKCJnb2xkIiwgImdvbGQiLCAi Z29sZCBpcyBnb2xkIik7CisgICAgICAgIGNtcF9vayhzaWx2ZXIsICI8IiwgZ29sZCwgIiVk IDw9ICVkIiwgc2lsdmVyLCBnb2xkKTsKKyAgICAgICAgbGlrZSgicGxhdGludW0iLCAiLipp bnVtIiwgInBsYXRpbnVtIG1hdGNoZXMgLippbnVtIik7CisgICAgICAgIGRvbmVfdGVzdGlu ZygpOworICAgIH0KKworcmVzdWx0cyBpbjoKKworICAgIDEuLjUKKyAgICBvayAxIC0gYnJv bnplIGlzIGxlc3MgdGhhbiBzaWx2ZXIKKyAgICBub3Qgb2sgMiAtIG5vdCBxdWl0ZQorICAg ICMgICBGYWlsZWQgdGVzdCAnbm90IHF1aXRlJworICAgICMgICBhdCB0L3N5bm9wc2lzLmMg bGluZSA3LgorICAgIG9rIDMgLSBnb2xkIGlzIGdvbGQKKyAgICBvayA0IC0gMiA8PSAzCisg ICAgb2sgNSAtIHBsYXRpbnVtIG1hdGNoZXMgLippbnVtCisgICAgIyBMb29rcyBsaWtlIHlv dSBmYWlsZWQgMSB0ZXN0IG9mIDUgcnVuLgorCitERVNDUklQVElPTgorPT09PT09PT09PT0K KwordGFwIGlzIGFuIGVhc3kgdG8gcmVhZCBhbmQgZWFzeSB0byB3cml0ZSB3YXkgb2YgY3Jl YXRpbmcgdGVzdHMgZm9yCit5b3VyIHNvZnR3YXJlLiBUaGlzIGxpYnJhcnkgY3JlYXRlcyBm dW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0bworZ2VuZXJhdGUgaXQgZm9yIHlvdXIgQyBw cm9ncmFtcy4gSXQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgbWFjcm9zCit0aGF0IGluY2x1ZGUg ZmlsZSBhbmQgbGluZSBpbmZvIGF1dG9tYXRpY2FsbHksIGFuZCBtYWtlcyBpdCBzbyB0aGF0 Cit0aGUgZm9ybWF0IG1lc3NhZ2Ugb2YgZWFjaCB0ZXN0IGlzIG9wdGlvbmFsLiBJdCBpcyBt b3N0bHkgYmFzZWQgb24KK3RoZSBUZXN0OjpNb3JlIFBlcmwgbW9kdWxlLgorCitJTlNUQUxM Cis9PT09PT09CisKK09uICoqVW5peCoqIHN5c3RlbXM6CisKKyAgICAkIG1ha2UKKyAgICAk IG1ha2UgaW5zdGFsbAorCitGb3IgbW9yZSBkZXRhaWxlZCBpbnN0YWxsYXRpb24gaW5zdHJ1 Y3Rpb25zIChlZywgZm9yICoqV2luZG93cyoqKSwgc2VlIGBJTlNUQUxMYC4KKworRlVOQ1RJ T05TCis9PT09PT09PT0KKworLSAgIHBsYW4odGVzdHMpCistICAgcGxhbihOT19QTEFOKQor LSAgIHBsYW4oU0tJUF9BTEwpOworLSAgIHBsYW4oU0tJUF9BTEwsIGZtdCwgLi4uKQorCisg ICAgVXNlIHRoaXMgdG8gc3RhcnQgYSBzZXJpZXMgb2YgdGVzdHMuIFdoZW4geW91IGtub3cg aG93IG1hbnkgdGVzdHMgdGhlcmUKKyAgICB3aWxsIGJlLCB5b3UgY2FuIHB1dCBhIG51bWJl ciBhcyBhIG51bWJlciBvZiB0ZXN0cyB5b3UgZXhwZWN0IHRvIHJ1bi4gSWYKKyAgICB5b3Ug ZG8gbm90IGtub3cgaG93IG1hbnkgdGVzdHMgdGhlcmUgd2lsbCBiZSwgeW91IGNhbiB1c2Ug cGxhbihOT19QTEFOKQorICAgIG9yIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24uIFdoZW4geW91 IHBhc3MgaXQgYSBudW1iZXIgb2YgdGVzdHMgdG8gcnVuLCBhCisgICAgbWVzc2FnZSBzaW1p bGFyIHRvIHRoZSBmb2xsb3dpbmcgd2lsbCBhcHBlYXIgaW4gdGhlIG91dHB1dDoKKworICAg ICAgICAxLi41CisKKyAgICBJZiB5b3UgcGFzcyBpdCBTS0lQX0FMTCwgdGhlIHdob2xlIHRl c3Qgd2lsbCBiZSBza2lwcGVkLgorCistICAgb2sodGVzdCkKKy0gICBvayh0ZXN0LCBmbXQs IC4uLikKKworICAgIFNwZWNpZnkgYSB0ZXN0LiB0aGUgdGVzdCBjYW4gYmUgYW55IHN0YXRl bWVudCByZXR1cm5pbmcgYSB0cnVlIG9yIGZhbHNlCisgICAgdmFsdWUuIFlvdSBtYXkgb3B0 aW9uYWxseSBwYXNzIGEgZm9ybWF0IHN0cmluZyBkZXNjcmliaW5nIHRoZSB0ZXN0LgorCisg ICAgICAgIG9rKHIgPSByZWFkZXJfbmV3KCJPZiBNaWNlIGFuZCBNZW4iKSwgImNyZWF0ZSBh IG5ldyByZWFkZXIiKTsKKyAgICAgICAgb2socmVhZGVyX2dvX3RvX3BhZ2UociwgNTUpLCAi Y2FuIHR1cm4gdGhlIHBhZ2UiKTsKKyAgICAgICAgb2soci0+cGFnZSA9PSA1NSwgInBhZ2Ug dHVybmVkIHRvIHRoZSByaWdodCBvbmUiKTsKKworICAgIFNob3VsZCBwcmludCBvdXQ6CisK KyAgICAgICAgb2sgMSAtIGNyZWF0ZSBhIG5ldyByZWFkZXIKKyAgICAgICAgb2sgMiAtIGNh biB0dXJuIHRoZSBwYWdlCisgICAgICAgIG9rIDMgLSBwYWdlIHR1cm5lZCB0byB0aGUgcmln aHQgb25lCisKKyAgICBPbiBmYWlsdXJlLCBhIGRpYWdub3N0aWMgbWVzc2FnZSB3aWxsIGJl IHByaW50ZWQgb3V0LgorCisgICAgICAgIG5vdCBvayAzIC0gcGFnZSB0dXJuZWQgdG8gdGhl IHJpZ2h0IG9uZQorICAgICAgICAjICAgRmFpbGVkIHRlc3QgJ3BhZ2UgdHVybmVkIHRvIHRo ZSByaWdodCBvbmUnCisgICAgICAgICMgICBhdCByZWFkZXIuYyBsaW5lIDEzLgorCistICAg aXMoZ290LCBleHBlY3RlZCkKKy0gICBpcyhnb3QsIGV4cGVjdGVkLCBmbXQsIC4uLikKKy0g ICBpc250KGdvdCwgdW5leHBlY3RlZCkKKy0gICBpc250KGdvdCwgdW5leHBlY3RlZCwgZm10 LCAuLi4pCisKKyAgICBUZXN0cyB0aGF0IHRoZSBzdHJpbmcgeW91IGdvdCBpcyB3aGF0IHlv dSBleHBlY3RlZC4gd2l0aCBpc250LCBpdCBpcyB0aGUKKyAgICByZXZlcnNlLgorCisgICAg ICAgIGlzKCJ0aGlzIiwgInRoYXQiLCAidGhpcyBpcyB0aGF0Iik7CisKKyAgICBwcmludHM6 CisKKyAgICAgICAgbm90IG9rIDEgLSB0aGlzIGlzIHRoYXQKKyAgICAgICAgIyAgIEZhaWxl ZCB0ZXN0ICd0aGlzIGlzIHRoYXQnCisgICAgICAgICMgICBhdCBpcy5jIGxpbmUgNi4KKyAg ICAgICAgIyAgICAgICAgICBnb3Q6ICd0aGlzJworICAgICAgICAjICAgICBleHBlY3RlZDog J3RoYXQnCisKKy0gICBjbXBfb2soYSwgb3AsIGIpCistICAgY21wX29rKGEsIG9wLCBiLCBm bXQsIC4uLikKKworICAgIENvbXBhcmVzIHR3byBpbnRzIHdpdGggYW55IGJpbmFyeSBvcGVy YXRvciB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBhbiBsdmFsdWUuCisgICAgVGhpcyBpcyBuaWNl IHRvIHVzZSBzaW5jZSBpdCBwcm92aWRlcyBhIGJldHRlciBlcnJvciBtZXNzYWdlIHRoYW4g YW4KKyAgICBlcXVpdmFsZW50IG9rLgorCisgICAgICAgIGNtcF9vayg0MjAsICI+IiwgNjY2 KTsKKworICAgIHByaW50czoKKworICAgICAgICBub3Qgb2sgMQorICAgICAgICAjICAgRmFp bGVkIHRlc3QgYXQgY21wb2suYyBsaW5lIDUuCisgICAgICAgICMgICAgIDQyMAorICAgICAg ICAjICAgICAgICAgPgorICAgICAgICAjICAgICA2NjYKKworLSAgIGNtcF9tZW0oZ290LCBl eHBlY3RlZCwgbikKKy0gICBjbXBfbWVtKGdvdCwgZXhwZWN0ZWQsIG4sIGZtdCwgLi4uKQor CisgICAgVGVzdHMgdGhhdCB0aGUgZmlyc3QgbiBieXRlcyBvZiB0aGUgbWVtb3J5IHlvdSBn b3QgaXMgd2hhdCB5b3UgZXhwZWN0ZWQuCisgICAgTlVMTCBwb2ludGVycyBmb3IgZ290IGFu ZCBleHBlY3RlZCBhcmUgaGFuZGxlZCAoaWYgZWl0aGVyIGlzIE5VTEwsCisgICAgdGhlIHRl c3QgZmFpbHMpLCBidXQgeW91IG5lZWQgdG8gZW5zdXJlIG4gaXMgbm90IHRvbyBsYXJnZS4K KworICAgICAgICBjaGFyICphID0gImZvbyI7CisgICAgICAgIGNoYXIgKmIgPSAiYmFyIjsK KyAgICAgICAgY21wX21lbShhLCBiLCAzKQorCisgICAgcHJpbnRzCisKKyAgICAgICAgbm90 IG9rIDEKKyAgICAgICAgIyAgIEZhaWxlZCB0ZXN0IGF0IHQvY21wX21lbS5jIGxpbmUgOS4K KyAgICAgICAgIyAgICAgRGlmZmVyZW5jZSBzdGFydHMgYXQgb2Zmc2V0IDAKKyAgICAgICAg IyAgICAgICAgICBnb3Q6IDB4NjYKKyAgICAgICAgIyAgICAgZXhwZWN0ZWQ6IDB4NjIKKwor LSAgIGxpa2UoZ290LCBleHBlY3RlZCkKKy0gICBsaWtlKGdvdCwgZXhwZWN0ZWQsIGZtdCwg Li4uKQorLSAgIHVubGlrZShnb3QsIHVuZXhwZWN0ZWQpCistICAgdW5saWtlKGdvdCwgdW5l eHBlY3RlZCwgZm10LCAuLi4pCisKKyAgICBUZXN0cyB0aGF0IHRoZSBzdHJpbmcgeW91IGdv dCBtYXRjaGVzIHRoZSBleHBlY3RlZCBleHRlbmRlZCBQT1NJWCByZWdleC4KKyAgICB1bmxp a2UgaXMgdGhlIHJldmVyc2UuIFRoZXNlIG1hY3JvcyBhcmUgdGhlIGVxdWl2YWxlbnQgb2Yg YSBza2lwIG9uCisgICAgV2luZG93cy4KKworICAgICAgICBsaWtlKCJzdHJhbmdlciIsICJe cy4ocikuKlxcMSQiLCAibWF0Y2hlcyB0aGUgcmVnZXgiKTsKKworICAgIHByaW50czoKKwor ICAgICAgICBvayAxIC0gbWF0Y2hlcyB0aGUgcmVnZXgKKworLSAgIHBhc3MoKQorLSAgIHBh c3MoZm10LCAuLi4pCistICAgZmFpbCgpCistICAgZmFpbChmbXQsIC4uLikKKworICAgIFNw ZWNpeSB0aGF0IGEgdGVzdCBzdWNjZWVkZWQgb3IgZmFpbGVkLiBVc2UgdGhlc2Ugd2hlbiB0 aGUgc3RhdGVtZW50IGlzCisgICAgbG9uZ2VyIHRoYW4geW91IGNhbiBmaXQgaW50byB0aGUg YXJndW1lbnQgZ2l2ZW4gdG8gYW4gb2soKSB0ZXN0LgorCistICAgZGllc19vayhjb2RlKQor LSAgIGRpZXNfb2soY29kZSwgZm10LCAuLi4pCistICAgbGl2ZXNfb2soY29kZSkKKy0gICBs aXZlc19vayhjb2RlLCBmbXQsIC4uLikKKworICAgIFRlc3RzIHdoZXRoZXIgdGhlIGdpdmVu IGNvZGUgY2F1c2VzIHlvdXIgcHJvZ3JhbSB0byBleGl0LiBUaGUgY29kZSBnZXRzCisgICAg cGFzc2VkIHRvIGEgbWFjcm8gdGhhdCB3aWxsIHRlc3QgaXQgaW4gYSBmb3JrZWQgcHJvY2Vz cy4gSWYgdGhlIGNvZGUKKyAgICBzdWNjZWVkcyBpdCB3aWxsIGJlIGV4ZWN1dGVkIGluIHRo ZSBwYXJlbnQgcHJvY2Vzcy4gWW91IGNhbiB0ZXN0IHRoaW5ncworICAgIGxpa2UgcGFzc2lu ZyBhIGZ1bmN0aW9uIGEgbnVsbCBwb2ludGVyIGFuZCBtYWtlIHN1cmUgaXQgZG9lc250Cisg ICAgZGVyZWZlcmVuY2UgaXQgYW5kIGNyYXNoLgorCisgICAgICAgIGRpZXNfb2soe2Fib3J0 KCk7fSwgImFib3J0IGRvZXMgY2xvc2UgeW91ciBwcm9ncmFtIik7CisgICAgICAgIGRpZXNf b2soe2ludCB4ID0gMC8wO30sICJkaXZpZGUgYnkgemVybyBjcmFzaCIpOworICAgICAgICBs aXZlc19vayh7cG93KDMuMCwgNS4wKTt9LCAibm90aGluZyB3cm9uZyB3aXRoIHRha2luZyAz Kio1Iik7CisKKyAgICBPbiBXaW5kb3dzLCB0aGVzZSBtYWNyb3MgYXJlIHRoZSBlcXVpdmFs ZW50IG9mIGEgc2tpcC4KKworLSAgIGRvbmVfdGVzdGluZygpCisKKyAgICBTdW1tYXJpemVz IHRoZSB0ZXN0cyB0aGF0IG9jY3VycmVkIGFuZCBleGl0cyB0aGUgbWFpbiBmdW5jdGlvbi4g SWYKKyAgICB0aGVyZSB3YXMgbm8gcGxhbiwgaXQgd2lsbCBwcmludCBvdXQgdGhlIG51bWJl ciBvZiB0ZXN0cyBhcy4KKworICAgICAgICAxLi41CisKKyAgICBJdCB3aWxsIGFsc28gcHJp bnQgYSBkaWFnbm9zdGljIG1lc3NhZ2UgYWJvdXQgaG93IG1hbnkKKyAgICBmYWlsdXJlcyB0 aGVyZSB3ZXJlLgorCisgICAgICAgICMgTG9va3MgbGlrZSB5b3UgZmFpbGVkIDIgdGVzdHMg b2YgMyBydW4uCisKKyAgICBJZiBhbGwgcGxhbm5lZCB0ZXN0cyB3ZXJlIHN1Y2Nlc3NmdWws IGl0IHdpbGwgcmV0dXJuIDAuIElmIGFueQorICAgIHRlc3QgZmFpbHMsIGl0IHdpbGwgcmV0 dXJuIDEuIElmIHRoZXkgYWxsIHBhc3NlZCwgYnV0IHRoZXJlCisgICAgd2VyZSBtaXNzaW5n IHRlc3RzLCBpdCB3aWxsIHJldHVybiAyLgorCistICAgZGlhZyhmbXQsIC4uLikKKworICAg IHByaW50IG91dCBhIG1lc3NhZ2UgdG8gdGhlIHRhcCBvdXRwdXQgb24gc3Rkb3V0LiBFYWNo IGxpbmUgaXMKKyAgICBwcmVjZWVkZWQgYnkgYSAiIyAiIHNvIHRoYXQgeW91IGtub3cgaXRz IGEgZGlhZ25vc3RpYyBtZXNzYWdlLgorCisgICAgICAgIGRpYWcoIlRoaXMgaXNcbmEgZGlh Z1xudG8gZGVzY3JpYmVcbnNvbWV0aGluZy4iKTsKKworICAgIHByaW50czoKKworICAgICAg ICAjIFRoaXMgaXMKKyAgICAgICAgIyBhIGRpYWcKKyAgICAgICAgIyB0byBkZXNjcmliZQor ICAgICAgICAjIHNvbWV0aGluZworCisgICAgb2soKSBhbmQgdGhpcyBmdW5jdGlvbiByZXR1 cm4gYW4gaW50IHNvIHlvdSBjYW4gdXNlIGl0IGxpa2U6CisKKyAgICAgICAgb2soMCkgfHwg ZGlhZygiZG9oISIpOworCistICAgc2tpcCh0ZXN0LCBuKQorLSAgIHNraXAodGVzdCwgbiwg Zm10LCAuLi4pCistICAgZW5kX3NraXAKKworICAgIFNraXAgYSBzZXJpZXMgb2YgbiB0ZXN0 cyBpZiB0ZXN0IGlzIHRydWUuIFlvdSBtYXkgZ2l2ZSBhIHJlYXNvbiB3aHkgeW91IGFyZQor ICAgIHNraXBwaW5nIHRoZW0gb3Igbm90LiBUaGUgKHBvc3NpYmx5KSBza2lwcGVkIHRlc3Rz IG11c3Qgb2NjdXIgYmV0d2VlbiB0aGUKKyAgICBza2lwIGFuZCBlbmRfc2tpcCBtYWNyb3Mu CisKKyAgICAgICAgc2tpcChUUlVFLCAyKTsKKyAgICAgICAgb2soMSk7CisgICAgICAgIG9r KDApOworICAgICAgICBlbmRfc2tpcDsKKworICAgIHByaW50czoKKworICAgICAgICBvayAx ICMgc2tpcAorICAgICAgICBvayAyICMgc2tpcAorCistICAgdG9kbygpCistICAgdG9kbyhm bXQsIC4uLikKKy0gICBlbmRfdG9kbworCisgICAgU3BlY2lmaWVzIGEgc2VyaWVzIG9mIHRl c3RzIHRoYXQgeW91IGV4cGVjdCB0byBmYWlsIGJlY2F1c2UgdGhleSBhcmUgbm90CisgICAg eWV0IGltcGxlbWVudGVkLgorCisgICAgICAgIHRvZG8oKQorICAgICAgICBvaygwKTsKKyAg ICAgICAgZW5kX3RvZG87CisKKyAgICBwcmludHM6CisKKyAgICAgICAgbm90IG9rIDEgIyBU T0RPCisgICAgICAgICMgICBGYWlsZWQgKFRPRE8pIHRlc3QgYXQgdG9kby5jIGxpbmUgNwor CistICAgQkFJTF9PVVQoKQorLSAgIEJBSUxfT1VUKGZtdCwgLi4uKQorCisgICAgSW1tZWRp YXRlbHkgc3RvcHMgYWxsIHRlc3RpbmcuCisKKyAgICAgICAgQkFJTF9PVVQoIkNhbid0IGdv IG5vIGZ1cnRoZXIiKTsKKworICAgIHByaW50cworCisgICAgICAgIEJhaWwgb3V0ISAgQ2Fu J3QgZ28gbm8gZnVydGhlcgorCisgICAgYW5kIGV4aXRzIHdpdGggMjU1LgorCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9saWJ0YXAvdGFwLmMgYi9zcmMvdGVzdC9saWJ0YXAvdGFwLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEzNGE5OTA1OTYzCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbGlidGFwL3RhcC5jCkBAIC0wLDAgKzEsNDE3IEBA CisvKgorbGlidGFwIC0gV3JpdGUgdGVzdHMgaW4gQworQ29weXJpZ2h0IDIwMTIgSmFrZSBH ZWxibWFuIDxnZWxibWFuQGdtYWlsLmNvbT4KK1RoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRl ciB0aGUgTEdQTAorKi8KKworI2RlZmluZSBfREVGQVVMVF9TT1VSQ0UgMQorCisjaW5jbHVk ZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K KyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInRhcC5oIgorCisjaWZuZGVmIF9X SU4zMgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgor I2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNpbmNsdWRlIDxyZWdleC5oPgorCisjaWZuZGVm IE1BUF9BTk9OWU1PVVMKKyNpZmRlZiBNQVBfQU5PTgorI2RlZmluZSBNQVBfQU5PTllNT1VT IE1BUF9BTk9OCisjZWxzZQorI2Vycm9yICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBtYXBw aW5nIGFub255bW91cyBwYWdlcyIKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworc3RhdGlj IGludCBleHBlY3RlZF90ZXN0cyA9IE5PX1BMQU47CitzdGF0aWMgaW50IGZhaWxlZF90ZXN0 czsKK3N0YXRpYyBpbnQgY3VycmVudF90ZXN0Oworc3RhdGljIGNoYXIgKnRvZG9fbWVzZzsK Kworc3RhdGljIGNoYXIgKnZzdHJkdXBmKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdz KQorCV9fYXR0cmlidXRlX18oKGZvcm1hdChnbnVfcHJpbnRmLCAxLCAwKSkpOworCit2b2lk IHRhcF9wbGFuKGludCB0ZXN0cywgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1 dGVfXygoZm9ybWF0KGdudV9wcmludGYsIDIsIDMpKSk7CisKK2ludCB2b2tfYXRfbG9jKGNv bnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgdGVzdCwgY29uc3QgY2hhciAqZm10LAor CQkJICAgdmFfbGlzdCBhcmdzKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoZ251X3ByaW50Ziwg NCwgMCkpKTsKKworaW50IG9rX2F0X2xvYyhjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwg aW50IHRlc3QsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1h dChnbnVfcHJpbnRmLCA0LCA1KSkpOworCitpbnQgaXNfYXRfbG9jKGNvbnN0IGNoYXIgKmZp bGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpnb3QsIGNvbnN0IGNoYXIgKmV4cGVjdGVkLAor CQkJICBjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KGdudV9w cmludGYsIDUsIDYpKSk7CisKK2ludCBpc250X2F0X2xvYyhjb25zdCBjaGFyICpmaWxlLCBp bnQgbGluZSwgY29uc3QgY2hhciAqZ290LAorCQkJCWNvbnN0IGNoYXIgKmV4cGVjdGVkLCBj b25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQoZ251X3ByaW50 ZiwgNSwgNikpKTsKKworaW50IGNtcF9va19hdF9sb2MoY29uc3QgY2hhciAqZmlsZSwgaW50 IGxpbmUsIGludCBhLCBjb25zdCBjaGFyICpvcCwgaW50IGIsCisJCQkJICBjb25zdCBjaGFy ICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQoZ251X3ByaW50ZiwgNiwgNykp KTsKKworaW50IGNtcF9tZW1fYXRfbG9jKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBj b25zdCB2b2lkICpnb3QsCisJCQkJICAgY29uc3Qgdm9pZCAqZXhwZWN0ZWQsIHNpemVfdCBu LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQoZ251X3By aW50ZiwgNiwgNykpKTsKKworaW50IGRpYWcoY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0 cmlidXRlX18oKGZvcm1hdChnbnVfcHJpbnRmLCAxLCAyKSkpOworCitpbnQgYmFpbF9vdXQo aW50IGlnbm9yZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9y bWF0KGdudV9wcmludGYsIDIsIDMpKSk7CisKK3ZvaWQgdGFwX3NraXAoaW50IG4sIGNvbnN0 IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdChnbnVfcHJpbnRmLCAy LCAzKSkpOworCit2b2lkIHRhcF90b2RvKGludCBpZ25vcmUsIGNvbnN0IGNoYXIgKmZtdCwg Li4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdChnbnVfcHJpbnRmLCAyLCAzKSkpOworCitp bnQgbGlrZV9hdF9sb2MoaW50IGZvcl9tYXRjaCwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxp bmUsIGNvbnN0IGNoYXIgKmdvdCwKKwkJCQljb25zdCBjaGFyICpleHBlY3RlZCwgY29uc3Qg Y2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0KGdudV9wcmludGYsIDYs IDcpKSk7CisKK3N0YXRpYyBjaGFyICoKK3ZzdHJkdXBmKGNvbnN0IGNoYXIgKmZtdCwgdmFf bGlzdCBhcmdzKQoreworCWNoYXIgKnN0cjsKKwlpbnQgc2l6ZTsKKwl2YV9saXN0IGFyZ3My OworCXZhX2NvcHkoYXJnczIsIGFyZ3MpOworCWlmICghZm10KQorCQlmbXQgPSAiIjsKKwlz aXplID0gdnNucHJpbnRmKE5VTEwsIDAsIGZtdCwgYXJnczIpICsgMjsKKwlzdHIgPSBtYWxs b2Moc2l6ZSk7CisJaWYgKCFzdHIpIHsKKwkJcGVycm9yKCJtYWxsb2MgZXJyb3IiKTsKKwkJ ZXhpdCgxKTsKKwl9CisJdnNwcmludGYoc3RyLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdz Mik7CisJcmV0dXJuIHN0cjsKK30KKwordm9pZAordGFwX3BsYW4oaW50IHRlc3RzLCBjb25z dCBjaGFyICpmbXQsIC4uLikKK3sKKwlleHBlY3RlZF90ZXN0cyA9IHRlc3RzOworCWlmICh0 ZXN0cyA9PSBTS0lQX0FMTCkgeworCQljaGFyICp3aHk7CisJCXZhX2xpc3QgYXJnczsKKwkJ dmFfc3RhcnQoYXJncywgZm10KTsKKwkJd2h5ID0gdnN0cmR1cGYoZm10LCBhcmdzKTsKKwkJ dmFfZW5kKGFyZ3MpOworCQlwcmludGYoIjEuLjAgIik7CisJCWRpYWcoIlNLSVAgJXNcbiIs IHdoeSk7CisJCWV4aXQoMCk7CisJfQorCWlmICh0ZXN0cyAhPSBOT19QTEFOKSB7CisJCXBy aW50ZigiMS4uJWRcbiIsIHRlc3RzKTsKKwl9Cit9CisKK2ludAordm9rX2F0X2xvYyhjb25z dCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHRlc3QsIGNvbnN0IGNoYXIgKmZtdCwgdmFf bGlzdCBhcmdzKQoreworCWNoYXIgKm5hbWUgPSB2c3RyZHVwZihmbXQsIGFyZ3MpOworCWlm ICghdGVzdCkgeworCQlwcmludGYoIm5vdCAiKTsKKwl9CisJcHJpbnRmKCJvayAlZCIsICsr Y3VycmVudF90ZXN0KTsKKwlpZiAoKm5hbWUpCisJCXByaW50ZigiIC0gJXMiLCBuYW1lKTsK KwlpZiAodG9kb19tZXNnKSB7CisJCXByaW50ZigiICMgVE9ETyIpOworCQlpZiAoKnRvZG9f bWVzZykKKwkJCXByaW50ZigiICVzIiwgdG9kb19tZXNnKTsKKwl9CisJcHJpbnRmKCJcbiIp OworCWlmICghdGVzdCkgeworCQlwcmludGYoIiMgICBGYWlsZWQgIik7CisJCWlmICh0b2Rv X21lc2cpCisJCQlwcmludGYoIihUT0RPKSAiKTsKKwkJcHJpbnRmKCJ0ZXN0ICIpOworCQlp ZiAoKm5hbWUpCisJCQlwcmludGYoIiclcydcbiMgICAiLCBuYW1lKTsKKwkJcHJpbnRmKCJh dCAlcyBsaW5lICVkLlxuIiwgZmlsZSwgbGluZSk7CisJCWlmICghdG9kb19tZXNnKQorCQkJ ZmFpbGVkX3Rlc3RzKys7CisJfQorCWZyZWUobmFtZSk7CisJcmV0dXJuIHRlc3Q7Cit9CisK K2ludAorb2tfYXRfbG9jKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgdGVzdCwg Y29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFy Z3MsIGZtdCk7CisJdm9rX2F0X2xvYyhmaWxlLCBsaW5lLCB0ZXN0LCBmbXQsIGFyZ3MpOwor CXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gdGVzdDsKK30KKworc3RhdGljIGludAorbXlzdHJj bXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKwlyZXR1cm4gYSA9PSBiID8g MCA6ICFhID8gLTEgOiAhYiA/IDEgOiBzdHJjbXAoYSwgYik7Cit9CisKKyNkZWZpbmUgZXEo YSwgYikgKCFteXN0cmNtcChhLCBiKSkKKyNkZWZpbmUgbmUoYSwgYikgKG15c3RyY21wKGEs IGIpKQorCitpbnQKK2lzX2F0X2xvYyhjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29u c3QgY2hhciAqZ290LCBjb25zdCBjaGFyICpleHBlY3RlZCwKKwkJICBjb25zdCBjaGFyICpm bXQsIC4uLikKK3sKKwlpbnQgdGVzdCA9IGVxKGdvdCwgZXhwZWN0ZWQpOworCXZhX2xpc3Qg YXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXZva19hdF9sb2MoZmlsZSwgbGluZSwg dGVzdCwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJaWYgKCF0ZXN0KSB7CisJCWRp YWcoIiAgICAgICAgIGdvdDogJyVzJyIsIGdvdCk7CisJCWRpYWcoIiAgICBleHBlY3RlZDog JyVzJyIsIGV4cGVjdGVkKTsKKwl9CisJcmV0dXJuIHRlc3Q7Cit9CisKK2ludAoraXNudF9h dF9sb2MoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmdvdCwgY29u c3QgY2hhciAqZXhwZWN0ZWQsCisJCQljb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQg dGVzdCA9IG5lKGdvdCwgZXhwZWN0ZWQpOworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChh cmdzLCBmbXQpOworCXZva19hdF9sb2MoZmlsZSwgbGluZSwgdGVzdCwgZm10LCBhcmdzKTsK Kwl2YV9lbmQoYXJncyk7CisJaWYgKCF0ZXN0KSB7CisJCWRpYWcoIiAgICAgICAgIGdvdDog JyVzJyIsIGdvdCk7CisJCWRpYWcoIiAgICBleHBlY3RlZDogYW55dGhpbmcgZWxzZSIpOwor CX0KKwlyZXR1cm4gdGVzdDsKK30KKworaW50CitjbXBfb2tfYXRfbG9jKGNvbnN0IGNoYXIg KmZpbGUsIGludCBsaW5lLCBpbnQgYSwgY29uc3QgY2hhciAqb3AsIGludCBiLAorCQkJICBj b25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgdGVzdCA9IGVxKG9wLCAifHwiKSA/IGEg fHwgYiA6CisJCWVxKG9wLCAiJiYiKQkJPyBhICYmIGIgOgorCQllcShvcCwgInwiKQkJCT8g YSB8IGIgOgorCQllcShvcCwgIl4iKQkJCT8gYSBeIGIgOgorCQllcShvcCwgIiYiKQkJCT8g YSAmIGIgOgorCQllcShvcCwgIj09IikJCT8gYSA9PSBiIDoKKwkJZXEob3AsICIhPSIpCQk/ IGEgIT0gYiA6CisJCWVxKG9wLCAiPCIpCQkJPyBhIDwgYiA6CisJCWVxKG9wLCAiPiIpCQkJ PyBhID4gYiA6CisJCWVxKG9wLCAiPD0iKQkJPyBhIDw9IGIgOgorCQllcShvcCwgIj49IikJ CT8gYSA+PSBiIDoKKwkJZXEob3AsICI8PCIpCQk/IGEgPDwgYiA6CisJCWVxKG9wLCAiPj4i KQkJPyBhID4+IGIgOgorCQllcShvcCwgIisiKQkJCT8gYSArIGIgOgorCQllcShvcCwgIi0i KQkJCT8gYSAtIGIgOgorCQllcShvcCwgIioiKQkJCT8gYSAqIGIgOgorCQllcShvcCwgIi8i KQkJCT8gYSAvIGIgOgorCQllcShvcCwgIiUiKQkJCT8gYSAlIGIgOgorCQkJCQkJCSAgZGlh ZygidW5yZWNvZ25pemVkIG9wZXJhdG9yICclcyciLCBvcCk7CisJdmFfbGlzdCBhcmdzOwor CXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdm9rX2F0X2xvYyhmaWxlLCBsaW5lLCB0ZXN0LCBm bXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlpZiAoIXRlc3QpIHsKKwkJZGlhZygiICAg ICVkIiwgYSk7CisJCWRpYWcoIiAgICAgICAgJXMiLCBvcCk7CisJCWRpYWcoIiAgICAlZCIs IGIpOworCX0KKwlyZXR1cm4gdGVzdDsKK30KKworc3RhdGljIGludAorZmluZF9tZW1fZGlm Zihjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCBzaXplX3Qgbiwgc2l6ZV90ICpvZmZz ZXQpCit7CisJc2l6ZV90IGk7CisJaWYgKGEgPT0gYikKKwkJcmV0dXJuIDA7CisJaWYgKCFh IHx8ICFiKQorCQlyZXR1cm4gMjsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlm IChhW2ldICE9IGJbaV0pIHsKKwkJCSpvZmZzZXQgPSBpOworCQkJcmV0dXJuIDE7CisJCX0K Kwl9CisJcmV0dXJuIDA7Cit9CisKK2ludAorY21wX21lbV9hdF9sb2MoY29uc3QgY2hhciAq ZmlsZSwgaW50IGxpbmUsIGNvbnN0IHZvaWQgKmdvdCwKKwkJCSAgIGNvbnN0IHZvaWQgKmV4 cGVjdGVkLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc2l6ZV90IG9m ZnNldDsKKwlpbnQgZGlmZiA9IGZpbmRfbWVtX2RpZmYoZ290LCBleHBlY3RlZCwgbiwgJm9m ZnNldCk7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdm9rX2F0 X2xvYyhmaWxlLCBsaW5lLCAhZGlmZiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJ aWYgKGRpZmYgPT0gMSkgeworCQlkaWFnKCIgICAgRGlmZmVyZW5jZSBzdGFydHMgYXQgb2Zm c2V0ICVsdSIsIG9mZnNldCk7CisJCWRpYWcoIiAgICAgICAgIGdvdDogMHglMDJ4IiwgKChj b25zdCB1bnNpZ25lZCBjaGFyICopZ290KVtvZmZzZXRdKTsKKwkJZGlhZygiICAgIGV4cGVj dGVkOiAweCUwMngiLCAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilleHBlY3RlZClbb2Zmc2V0 XSk7CisJfSBlbHNlIGlmIChkaWZmID09IDIpIHsKKwkJZGlhZygiICAgICAgICAgZ290OiAl cyIsIGdvdCA/ICJub3QgTlVMTCIgOiAiTlVMTCIpOworCQlkaWFnKCIgICAgZXhwZWN0ZWQ6 ICVzIiwgZXhwZWN0ZWQgPyAibm90IE5VTEwiIDogIk5VTEwiKTsKKwl9CisJcmV0dXJuICFk aWZmOworfQorCitpbnQKK2RpYWcoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlz dCBhcmdzOworCWNoYXIgKm1lc2csICpsaW5lOworCWludCBpOworCXZhX3N0YXJ0KGFyZ3Ms IGZtdCk7CisJaWYgKCFmbXQpIHsKKwkJdmFfZW5kKGFyZ3MpOworCQlyZXR1cm4gMDsKKwl9 CisJbWVzZyA9IHZzdHJkdXBmKGZtdCwgYXJncyk7CisJbGluZSA9IG1lc2c7CisJZm9yIChp ID0gMDsgKmxpbmU7IGkrKykgeworCQljaGFyIGMgPSBtZXNnW2ldOworCQlpZiAoIWMgfHwg YyA9PSAnXG4nKSB7CisJCQltZXNnW2ldID0gJ1wwJzsKKwkJCXByaW50ZigiIyAlc1xuIiwg bGluZSk7CisJCQlpZiAoIWMpCisJCQkJYnJlYWs7CisJCQltZXNnW2ldID0gYzsKKwkJCWxp bmUgPSBtZXNnICsgaSArIDE7CisJCX0KKwl9CisJZnJlZShtZXNnKTsKKwl2YV9lbmQoYXJn cyk7CisJcmV0dXJuIDA7Cit9CisKK2ludAorZXhpdF9zdGF0dXMoKQoreworCWludCByZXR2 YWwgPSAwOworCWlmIChleHBlY3RlZF90ZXN0cyA9PSBOT19QTEFOKSB7CisJCXByaW50Zigi MS4uJWRcbiIsIGN1cnJlbnRfdGVzdCk7CisJfSBlbHNlIGlmIChjdXJyZW50X3Rlc3QgIT0g ZXhwZWN0ZWRfdGVzdHMpIHsKKwkJZGlhZygiTG9va3MgbGlrZSB5b3UgcGxhbm5lZCAlZCB0 ZXN0JXMgYnV0IHJhbiAlZC4iLCBleHBlY3RlZF90ZXN0cywKKwkJCSBleHBlY3RlZF90ZXN0 cyA+IDEgPyAicyIgOiAiIiwgY3VycmVudF90ZXN0KTsKKwkJcmV0dmFsID0gMjsKKwl9CisJ aWYgKGZhaWxlZF90ZXN0cykgeworCQlkaWFnKCJMb29rcyBsaWtlIHlvdSBmYWlsZWQgJWQg dGVzdCVzIG9mICVkIHJ1bi4iLCBmYWlsZWRfdGVzdHMsCisJCQkgZmFpbGVkX3Rlc3RzID4g MSA/ICJzIiA6ICIiLCBjdXJyZW50X3Rlc3QpOworCQlyZXR2YWwgPSAxOworCX0KKwlyZXR1 cm4gcmV0dmFsOworfQorCitpbnQKK2JhaWxfb3V0KGludCBpZ25vcmUsIGNvbnN0IGNoYXIg KmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwkodm9pZClpZ25vcmU7CisJdmFfc3Rh cnQoYXJncywgZm10KTsKKwlwcmludGYoIkJhaWwgb3V0ISAgIik7CisJdnByaW50ZihmbXQs IGFyZ3MpOworCXByaW50ZigiXG4iKTsKKwl2YV9lbmQoYXJncyk7CisJZXhpdCgyNTUpOwor CXJldHVybiAwOworfQorCit2b2lkCit0YXBfc2tpcChpbnQgbiwgY29uc3QgY2hhciAqZm10 LCAuLi4pCit7CisJY2hhciAqd2h5OworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdz LCBmbXQpOworCXdoeSA9IHZzdHJkdXBmKGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOwor CXdoaWxlIChuLS0gPiAwKSB7CisJCXByaW50Zigib2sgJWQgIiwgKytjdXJyZW50X3Rlc3Qp OworCQlkaWFnKCJza2lwICVzXG4iLCB3aHkpOworCX0KKwlmcmVlKHdoeSk7Cit9CisKK3Zv aWQKK3RhcF90b2RvKGludCBpZ25vcmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZh X2xpc3QgYXJnczsKKwkodm9pZClpZ25vcmU7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwl0 b2RvX21lc2cgPSB2c3RyZHVwZihmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKK30KKwor dm9pZAordGFwX2VuZF90b2RvKCkKK3sKKwlmcmVlKHRvZG9fbWVzZyk7CisJdG9kb19tZXNn ID0gTlVMTDsKK30KKworI2lmbmRlZiBfV0lOMzIKKy8qIENyZWF0ZSBhIHNoYXJlZCBtZW1v cnkgaW50IHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBhIHBpZWNlIG9mIGNvZGUgZXhlY3V0 ZWQKK2RpZXMuIHRvIGJlIHVzZWQgaW4gdGhlIGRpZXNfb2sgYW5kIGxpdmVzX29rIG1hY3Jv cy4gICovCitpbnQKK3RhcF90ZXN0X2RpZWQoaW50IHN0YXR1cykKK3sKKwlzdGF0aWMgaW50 ICp0ZXN0X2RpZWQgPSBOVUxMOworCWludCBwcmV2OworCWlmICghdGVzdF9kaWVkKSB7CisJ CXRlc3RfZGllZCA9IG1tYXAoMCwgc2l6ZW9mKGludCksIFBST1RfUkVBRCB8IFBST1RfV1JJ VEUsCisJCQkJCQkgTUFQX1NIQVJFRCB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKwkJKnRl c3RfZGllZCA9IDA7CisJfQorCXByZXYgPSAqdGVzdF9kaWVkOworCSp0ZXN0X2RpZWQgPSBz dGF0dXM7CisJcmV0dXJuIHByZXY7Cit9CisKK2ludAorbGlrZV9hdF9sb2MoaW50IGZvcl9t YXRjaCwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmdvdCwKKwkJ CWNvbnN0IGNoYXIgKmV4cGVjdGVkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQg dGVzdDsKKwlyZWdleF90IHJlOworCXZhX2xpc3QgYXJnczsKKwlpbnQgZXJyID0gcmVnY29t cCgmcmUsIGV4cGVjdGVkLCBSRUdfRVhURU5ERUQpOworCWlmIChlcnIpIHsKKwkJY2hhciBl cnJidWZbMjU2XTsKKwkJcmVnZXJyb3IoZXJyLCAmcmUsIGVycmJ1Ziwgc2l6ZW9mIGVycmJ1 Zik7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGNvbXBpbGUgcmVnZXggJyVzJzog JXMgYXQgJXMgbGluZSAlZFxuIiwKKwkJCQlleHBlY3RlZCwgZXJyYnVmLCBmaWxlLCBsaW5l KTsKKwkJZXhpdCgyNTUpOworCX0KKwllcnIgPSByZWdleGVjKCZyZSwgZ290LCAwLCBOVUxM LCAwKTsKKwlyZWdmcmVlKCZyZSk7CisJdGVzdCA9IGZvcl9tYXRjaCA/ICFlcnIgOiBlcnI7 CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwl2b2tfYXRfbG9jKGZpbGUsIGxpbmUsIHRlc3Qs IGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWlmICghdGVzdCkgeworCQlpZiAoZm9y X21hdGNoKSB7CisJCQlkaWFnKCIgICAgICAgICAgICAgICAgICAgJyVzJyIsIGdvdCk7CisJ CQlkaWFnKCIgICAgZG9lc24ndCBtYXRjaDogJyVzJyIsIGV4cGVjdGVkKTsKKwkJfSBlbHNl IHsKKwkJCWRpYWcoIiAgICAgICAgICAgICAgICAgICAnJXMnIiwgZ290KTsKKwkJCWRpYWco IiAgICAgICAgICBtYXRjaGVzOiAnJXMnIiwgZXhwZWN0ZWQpOworCQl9CisJfQorCXJldHVy biB0ZXN0OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9saWJ0YXAvdGFwLmgg Yi9zcmMvdGVzdC9saWJ0YXAvdGFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmUzNjZhNmFmZmRjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbGli dGFwL3RhcC5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorbGlidGFwIC0gV3JpdGUgdGVzdHMg aW4gQworQ29weXJpZ2h0IDIwMTIgSmFrZSBHZWxibWFuIDxnZWxibWFuQGdtYWlsLmNvbT4K K1RoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTEdQTAorKi8KKworI2lmbmRlZiBf X1RBUF9IX18KKyNkZWZpbmUgX19UQVBfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0 ZXJuICJDIiB7CisjZW5kaWYKKworI2lmbmRlZiB2YV9jb3B5CisjaWZkZWYgX192YV9jb3B5 CisjZGVmaW5lIHZhX2NvcHkgX192YV9jb3B5CisjZWxzZQorI2RlZmluZSB2YV9jb3B5KGQs IHMpICgoZCkgPSAocykpCisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4K KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworaW50ICAgICB2 b2tfYXRfbG9jICAgICAgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgdGVzdCwg Y29uc3QgY2hhciAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJn cyk7CitpbnQgICAgIG9rX2F0X2xvYyAgICAgICAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxp bmUsIGludCB0ZXN0LCBjb25zdCBjaGFyICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgLi4uKTsKK2ludCAgICAgaXNfYXRfbG9jICAgICAgIChjb25zdCBjaGFyICpmaWxlLCBp bnQgbGluZSwgY29uc3QgY2hhciAqZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKmV4cGVjdGVkLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitpbnQgICAgIGlz bnRfYXRfbG9jICAgICAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIg KmdvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpleHBlY3RlZCwg Y29uc3QgY2hhciAqZm10LCAuLi4pOworaW50ICAgICBjbXBfb2tfYXRfbG9jICAgKGNvbnN0 IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgYSwgY29uc3QgY2hhciAqb3AsCisgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2ludCAg ICAgY21wX21lbV9hdF9sb2MgIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3Qg dm9pZCAqZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmV4cGVj dGVkLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50ICAgICBiYWlsX291 dCAgICAgICAgKGludCBpZ25vcmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgICAg dGFwX3BsYW4gICAgICAgIChpbnQgdGVzdHMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2lu dCAgICAgZGlhZyAgICAgICAgICAgIChjb25zdCBjaGFyICpmbXQsIC4uLik7CitpbnQgICAg IGV4aXRfc3RhdHVzICAgICAodm9pZCk7Cit2b2lkICAgIHRhcF9za2lwICAgICAgICAoaW50 IG4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgICAgdGFwX3RvZG8gICAgICAgIChp bnQgaWdub3JlLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkICAgIHRhcF9lbmRfdG9k byAgICAodm9pZCk7CisKKyNkZWZpbmUgTk9fUExBTiAgICAgICAgICAtMQorI2RlZmluZSBT S0lQX0FMTCAgICAgICAgIC0yCisjZGVmaW5lIG9rKC4uLikgICAgICAgICAgb2tfYXRfbG9j KF9fRklMRV9fLCBfX0xJTkVfXywgX19WQV9BUkdTX18sIE5VTEwpCisjZGVmaW5lIGlzKC4u LikgICAgICAgICAgaXNfYXRfbG9jKF9fRklMRV9fLCBfX0xJTkVfXywgX19WQV9BUkdTX18s IE5VTEwpCisjZGVmaW5lIGlzbnQoLi4uKSAgICAgICAgaXNudF9hdF9sb2MoX19GSUxFX18s IF9fTElORV9fLCBfX1ZBX0FSR1NfXywgTlVMTCkKKyNkZWZpbmUgY21wX29rKC4uLikgICAg ICBjbXBfb2tfYXRfbG9jKF9fRklMRV9fLCBfX0xJTkVfXywgX19WQV9BUkdTX18sIE5VTEwp CisjZGVmaW5lIGNtcF9tZW0oLi4uKSAgICAgY21wX21lbV9hdF9sb2MoX19GSUxFX18sIF9f TElORV9fLCBfX1ZBX0FSR1NfXywgTlVMTCkKKyNkZWZpbmUgcGxhbiguLi4pICAgICAgICB0 YXBfcGxhbihfX1ZBX0FSR1NfXywgTlVMTCkKKyNkZWZpbmUgZG9uZV90ZXN0aW5nKCkgICBy ZXR1cm4gZXhpdF9zdGF0dXMoKQorI2RlZmluZSBCQUlMX09VVCguLi4pICAgIGJhaWxfb3V0 KDAsICIiIF9fVkFfQVJHU19fLCBOVUxMKQorI2RlZmluZSBwYXNzKC4uLikgICAgICAgIG9r KDEsICIiIF9fVkFfQVJHU19fKQorI2RlZmluZSBmYWlsKC4uLikgICAgICAgIG9rKDAsICIi IF9fVkFfQVJHU19fKQorCisjZGVmaW5lIHNraXAodGVzdCwgLi4uKSAgZG8ge2lmICh0ZXN0 KSB7dGFwX3NraXAoX19WQV9BUkdTX18sIE5VTEwpOyBicmVhazt9CisjZGVmaW5lIGVuZF9z a2lwICAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSB0b2RvKC4uLikgICAgICAgIHRh cF90b2RvKDAsICIiIF9fVkFfQVJHU19fLCBOVUxMKQorI2RlZmluZSBlbmRfdG9kbyAgICAg ICAgIHRhcF9lbmRfdG9kbygpCisKKyNkZWZpbmUgZGllc19vayguLi4pICAgICBkaWVzX29r X2NvbW1vbigxLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgbGl2ZXNfb2soLi4uKSAgICBkaWVz X29rX2NvbW1vbigwLCBfX1ZBX0FSR1NfXykKKworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBs aWtlKC4uLikgICAgICAgIHRhcF9za2lwKDEsICJsaWtlIGlzIG5vdCBpbXBsZW1lbnRlZCBv biBXaW5kb3dzIikKKyNkZWZpbmUgdW5saWtlKC4uLikgICAgICB0YXBfc2tpcCgxLCAidW5s aWtlIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBXaW5kb3dzIikKKyNkZWZpbmUgZGllc19va19j b21tb24oLi4uKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX3NraXAoMSwgIkRl YXRoIGRldGVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MiKQorI2Vsc2UKKyNk ZWZpbmUgbGlrZSguLi4pICAgICAgICBsaWtlX2F0X2xvYygxLCBfX0ZJTEVfXywgX19MSU5F X18sIF9fVkFfQVJHU19fLCBOVUxMKQorI2RlZmluZSB1bmxpa2UoLi4uKSAgICAgIGxpa2Vf YXRfbG9jKDAsIF9fRklMRV9fLCBfX0xJTkVfXywgX19WQV9BUkdTX18sIE5VTEwpCitpbnQg ICAgIGxpa2VfYXRfbG9jICAgICAoaW50IGZvcl9tYXRjaCwgY29uc3QgY2hhciAqZmlsZSwg aW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZ290LCBj b25zdCBjaGFyICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpmbXQsIC4uLik7CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5 cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KK2ludCB0YXBfdGVzdF9kaWVkIChpbnQg c3RhdHVzKTsKKyNkZWZpbmUgZGllc19va19jb21tb24oZm9yX2RlYXRoLCBjb2RlLCAuLi4p ICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW50IGNwaWQ7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW50IGl0X2Rp ZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg dGFwX3Rlc3RfZGllZCgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgY3BpZCA9IGZvcmsoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgc3dpdGNoIChjcGlkKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY2FzZSAtMTogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBlcnJvcigiZm9yayBl cnJvciIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGV4aXQo MSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg Y2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgICAgIGNsb3NlKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgICAgIGNsb3NlKDIpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRhcF90ZXN0X2RpZWQo MCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGV4aXQo MCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgaWYgKHdhaXRwaWQoY3BpZCwgTlVMTCwgMCkgPCAwKSB7ICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgICAgIHBlcnJvcigid2FpdHBpZCBlcnJvciIpOyAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGV4aXQoMSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaXRfZGllZCA9 IHRhcF90ZXN0X2RpZWQoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg aWYgKCFpdF9kaWVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgICAgIHtjb2RlfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgb2soZm9yX2RlYXRoID8gaXRfZGllZCA6ICFpdF9kaWVkLCAi IiBfX1ZBX0FSR1NfXyk7IFwKKyAgICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBf X2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgotLSAKMi41My4wCgo= --------------lJZjohOnP3WxZVzV3LqV3g0v Content-Type: text/x-patch; charset=UTF-8; name="v01-0002-Implement-Delta-Frame-of-Reference-compression.patch" Content-Disposition: attachment; filename*0="v01-0002-Implement-Delta-Frame-of-Reference-compression.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSAzYjAxZDhjMjBhMzY5NmRjMGRjYTA4ZTA4MGU0YzY3ODVjYmFiNTlkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IFNhdCwgNyBNYXIgMjAyNiAxOToxMDo0MSArMDgwMApTdWJqZWN0OiBbUEFU Q0ggdjAxIDIvM10gSW1wbGVtZW50IERlbHRhIEZyYW1lIG9mIFJlZmVyZW5jZSBjb21wcmVz c2lvbi4KCkltcGxlbWVudCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGJhc2VkIG9uIHRo ZSBEZWx0YSBGcmFtZSBvZgpSZWZlcmVuY2UgdGVjaG5pcXVlIChERk9SKS4KCkRGb1Igc3Vw cG9ydHMgYm90aCBleHRlcm5hbCBtZW1vcnkgKG91dGVyIG1lbW9yeSkgcHJvdmlkZWQgYnkg YSBjYWxsZXIKYW5kIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCBtZW1vcnksIGFsbG9jYXRlZCBi eSBtZWFucyBvZiBtYWxsb2MsIHBhbGxvYwpvciBzaW1pbGFyIGZ1bmN0aW9ucy4gTWVtb3J5 IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBtdXN0IGJlIGRlZmluZWQKZHVyaW5nIGluaXRp YWxpemF0aW9uLiBBbGwgc3Vic2VxdWVudCBvcGVyYXRpb25zIGZvbGxvdyB0aGlzCmNvbmZp Z3VyYXRpb24uIEZvciBleGFtcGxlLCBhIGNhbGxlciBjYW4gcGxhY2UgYSBidWZmZXIgb24g dGhlIHN0YWNrIHRvCmF2b2lkIGhlYXAgYWxsb2NhdGlvbiBhbmQgcGFzcyB0aGUgYnVmZmVy IHRvIGEgREZvUiB1bml0LiBBcyBhIHJlc3VsdCwKdGhlIHBhY2tpbmcgYW5kIHVucGFja2lu ZyBwcm9jZXNzZXMgZXhjbHVkZSBkeW5hbWljIGFsbG9jYXRpb24uCgpUaGUgREZvUiB1bml0 IGlzIGltcGxlbWVudGVkIGFzIGEgc2V0IG9mIHRlbXBsYXRlcy4gRGV2ZWxvcGVycyBjYW4K Z2VuZXJhdGUgREZvUiBpbXBsZW1lbnRhdGlvbnMgZm9yIGFueSB1bnNpZ25lZCBpbnRlZ2Vy IHR5cGUgKHVpbnQ4X3QsCnVpbnQxNl90LCB1aW50MzJfdCwgdWludDY0X3QpLiBUaGUgZGZv cl91MTYgdW5pdCBpcyBpbXBsZW1lbnRlZC4KClRoZSB1bml0IHRlc3QgaXMgaW1wbGVtZW50 ZWQgYXMgYSBDIHByb2dyYW0gKEVMRiBleGVjdXRhYmxlKS4gVGhlIHRlc3QKY2FuIGJlIHJ1 biB3aXRoIHRoZSAnbWFrZSBjaGVjay11bml0Jy4gVGVzdHMgc3VwcG9ydCB0aGUgVEFQIHBy b3RvY29sCmFuZCBhcmUgZXhlY3V0ZWQgdXNpbmcgdGhlIFByb3ZlIHV0aWxpdHkuCgpBdXRo b3I6IEV2Z2VueSBWb3JvcGFldiA8ZXZnZW55LnZvcm9wYWV2QHRhbnRvcmxhYnMuY29tPiA8 ZXZvcm9wQGdtYWlsLmNvbT4KLS0tCiBzcmMvYmFja2VuZC9saWIvTWFrZWZpbGUuZGZvciAg ICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9saWIvZGZvcl90ZW1wbC5jICAgICAgICB8IDYx OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9saWIvZGZvcl91 MTYuYyAgICAgICAgICB8ICAgOCArCiBzcmMvaW5jbHVkZS9saWIvZGZvcl90ZW1wbC5oICAg ICAgICB8ICAyNyArKwogc3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVtcGxfc3RhcGxlLmggfCAx MjUgKysrKysrCiBzcmMvaW5jbHVkZS9saWIvZGZvcl90ZW1wbF91bmRlZi5oICB8ICAyOSAr Kwogc3JjL2luY2x1ZGUvbGliL2Rmb3JfdTE2LmggICAgICAgICAgfCAgMTMgKwogc3JjL2lu Y2x1ZGUvbGliL2Rmb3JfdTE2X2NvbmZpZy5oICAgfCAgIDQgKwogc3JjL3Rlc3QvZGZvci8u Z2l0aWdub3JlICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvZGZvci9NYWtlZmlsZSAg ICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy90ZXN0L2Rmb3IvdGVzdF9kZm9yX3UxNi5jICAg ICAgIHwgMzcxICsrKysrKysrKysrKysrKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMTk5IGlu c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFj a2VuZC9saWIvZGZvcl90ZW1wbC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQv bGliL2Rmb3JfdTE2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9saWIvZGZv cl90ZW1wbC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVt cGxfc3RhcGxlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9saWIvZGZvcl90 ZW1wbF91bmRlZi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvbGliL2Rmb3Jf dTE2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9saWIvZGZvcl91MTZfY29u ZmlnLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9kZm9yL3Rlc3RfZGZvcl91MTYu YwoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi9NYWtlZmlsZS5kZm9yIGIvc3JjL2Jh Y2tlbmQvbGliL01ha2VmaWxlLmRmb3IKaW5kZXggYjkzYzZlNzg2NDQuLmJlYjcwMzVmMTU1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWIvTWFrZWZpbGUuZGZvcgorKysgYi9zcmMv YmFja2VuZC9saWIvTWFrZWZpbGUuZGZvcgpAQCAtMiw0ICsyLDUgQEAKIAogT0JKU19ERk9S IDo9IFwKIAliaXRwYWNrX3UxNi5vIFwKKwlkZm9yX3UxNi5vIFwKIAl2ZWN0X3UxNi5vCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWIvZGZvcl90ZW1wbC5jIGIvc3JjL2JhY2tlbmQv bGliL2Rmb3JfdGVtcGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uYjRiZjA1OTMyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9saWIvZGZv cl90ZW1wbC5jCkBAIC0wLDAgKzEsNjE4IEBACisvKgorICogZGZvci5jCisgKgorICogREZP Ul9URU1QTCBpbXBsZW1lbnRzIHRoZSB2YXJpYW50IG9mIEZyYW1lIG9mIFJlZmVyZW5jZSB3 aXRoIERlbHRhCisgKiBjb250YWluZXIgYW5kIGNvcnJlc3BvbmRpbmcgYWxnb3JpdGhtLgor ICoKKyAqIFR5cGUgb2Ygb3JpZ2luYWwgaXRlbXMgZGVmaW5lZCB3aXRoIHRoZSBpdGVtX3Qg bWFjcm8uIGl0ZW1fdCBtdXN0IGJlCisgKiBhbiB1bnNpZ25lZCBpbnRlZ2VyICh1aW50OF90 LCB1aW50MTZfdCwgLi4uIHVpbnQ2NF90KQorICoKKyAqIEVhY2ggYml0IHZlY3RvciwgaGF2 aW5nIGJlZW4gc2VyaWFsaXNlZCwgcmVwcmVzZW50cyBuZXh0IHN0cnVjdHVyZToKKyAqCisg KiB8IGRlbHRhcyB8IGV4Y2VwdGlvbnMgfCBleGNlcHRpb25zIHBvc2l0aW9ucyB8CisgKgor ICogZGVsdGEgaXMgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IG1lbWJlciBhbmQg dGhlIHByZXZpb3VzIG9uZS4gVGhlCisgKiBkZWx0YSBmb3IgdGhlIGZpcnN0IG1lbWJlciAo aGF2aW5nIHRoZSB6ZXJvIGluZGV4KSBpcyBpdHMgYWN0dWFsIHZhbHVlOgorICogZGVsdGFb MF0gPSBtWzBdLTAgPSBtWzBdLiBBIGhhdmluZyBzZXJpYWxpc2VkIGRlbHRhIGlzIGEgc2Vx dWVuY2Ugb2YgdW5kZWZpbmVkCisgKiBiaXRzIG9mIGZpeGVkIHdpZHRoLgorICoKKyAqLwor CisjaW5jbHVkZSAibGliL2Rmb3JfdGVtcGxfc3RhcGxlLmgiCisKK2ludCBkZm9yX2NhbGNf ZGVsdGFzKHNpemVfdCBjbnQsIGNvbnN0IGl0ZW1fdCBhcnJbXSwgdmVjdF90ICp2RGVsdGFz LAorCQkJCQkgdW5pcXNvcnR2ZWN0X3QgKnVzdkRlbHRhV2lkdGhzLAorCQkJCQkgdmVjdF90 ICp2V2lkdGhDb3VudGVycyk7CisKK2ludCBkZm9yX2NhbGNfd2lkdGgoc2l6ZV90IGNudERl bHRhLAorCQkJCQljb25zdCB1bmlxc29ydHZlY3RfdCAqdXN2RGVsdGFXaWR0aHMsCisJCQkJ CWNvbnN0IHZlY3RfdCAqdldpZHRoQ291bnRlcnMsIHNpemVfdCAqd2lkdGgsCisJCQkJCXNp emVfdCAqY250RXhjZXB0aW9ucyk7CisKK2ludCBkZm9yX2FuYWx5emUoc2l6ZV90IGNudCwg Y29uc3QgaXRlbV90IGFycltdLAorCQkJIGRmb3JfbWV0YV90ICpkZm9yLCB2ZWN0X3QgKnZE ZWx0YXMsCisJCQkgdW5pcXNvcnR2ZWN0X3QgKnVzdkV4Y1Bvcyk7CisKK2ludCBkZm9yX3Bh Y2soc2l6ZV90IGNudCwgY29uc3QgaXRlbV90IGFycltdLCBleGNhbGdfdCBpc0V4Y1VzYWdl LAorCQkJICBkZm9yX21ldGFfdCAqZGZvciwgc2l6ZV90IGJ1ZlNpemUsIHVpbnQ4X3QgYnVm W10pOworCitpbnQgZGZvcl91bnBhY2soY29uc3QgZGZvcl9tZXRhX3QgKmRmb3IsIHVuaXFz b3J0dmVjdF90ICp2VmFscywgc2l6ZV90IGJ1ZlNpemUsCisJCQkJdWludDhfdCBidWZbXSk7 CisKK3ZvaWQgZGZvcl9jbGVhcl9tZXRhKGRmb3JfbWV0YV90ICpkZm9yKTsKKworZGZvcl9z dGF0c190IGRmb3JfY2FsY19zdGF0cyhkZm9yX21ldGFfdCBkZm9yKTsKKworc2l6ZV90IGRm b3JfY2FsY19uYnl0ZXMoZGZvcl9tZXRhX3QgZGZvcik7CisKKy8qCisgKiBDYWxjdWxhdGUg ZGVsdGFzCisgKgorICogdldpZHRoQ291bnRlcnMgYmVpbmcgZXF1YWwgdG8gTlVMTCBtZWFu cyAnRG9uJ3QgY2FsY3VsYXRlIGNvdW50cyBvZiB3aWR0aHMnLgorICogSW4gdGhpcyBjYXNl IHVzdkRlbHRhV2lkdGggY29tcHJpc2Ugb25seSBvbmUgbWVtYmVyIG1bMF0gd2hpY2ggc2F2 ZXMgbWF4CisgKiB3aWR0aCBvZiBkZWx0YSwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgY2FsbGVy LgorICoKKyAqLworaW50CitkZm9yX2NhbGNfZGVsdGFzKHNpemVfdCBjbnQsIGNvbnN0IGl0 ZW1fdCBhcnJbXSwgdmVjdF90ICp2RGVsdGFzLAorCQkJCSB1bmlxc29ydHZlY3RfdCAqdXN2 RGVsdGFXaWR0aHMsIHZlY3RfdCAqdldpZHRoQ291bnRlcnMpCit7CisJaXRlbV90IGRlbHRh OworCWl0ZW1fdCBwcmV2OyAvKiB2YWx1ZSBvZiBwcmV2aW91cyBudW1iZXIqLworCXNpemVf dCB3aWR0aDsKKwl1c3ZfaW5zX3Jlc190IGluc1dpZHRoSW5zZXJ0OworCisJaWYgKHZEZWx0 YXMgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHZXaWR0aENvdW50ZXJzID09IE5V TEwpCisJCXVzdl9pbnNlcnQodXN2RGVsdGFXaWR0aHMsIDApOworCisJcHJldiA9IDA7CisJ Zm9yIChzaXplX3QgaiA9IDA7IGogPCBjbnQ7IGorKykgeworCQlkZWx0YSA9IGFycltqXSAt IHByZXY7CisJCXZlY3RfYXBwZW5kKHZEZWx0YXMsIGRlbHRhKTsKKwkJcHJldiA9IGFycltq XTsKKwkJd2lkdGggPSB3aWR0aF9mcm9tX3ZhbChkZWx0YSk7CisKKwkJaWYgKHZXaWR0aENv dW50ZXJzID09IE5VTEwpIHsKKwkJCWlmICh1c3ZEZWx0YVdpZHRocy0+bVswXSA8IHdpZHRo KQorCQkJCXVzdkRlbHRhV2lkdGhzLT5tWzBdID0gd2lkdGg7CisJCX0gZWxzZSB7CisJCQlp bnNXaWR0aEluc2VydCA9IHVzdl9pbnNlcnQodXN2RGVsdGFXaWR0aHMsIHdpZHRoX2Zyb21f dmFsKGRlbHRhKSk7CisKKwkJCWlmIChpbnNXaWR0aEluc2VydC5zdCA9PSBVU1ZfSU5TX05F VykKKwkJCQl2ZWN0X2luc2VydCh2V2lkdGhDb3VudGVycywgaW5zV2lkdGhJbnNlcnQucG9z LCAoaXRlbV90KTEpOworCQkJZWxzZSBpZiAoaW5zV2lkdGhJbnNlcnQuc3QgPT0gVVNWX0lO U19FWElTVFMpCisJCQkJdldpZHRoQ291bnRlcnMtPm1baW5zV2lkdGhJbnNlcnQucG9zXSsr OworCQkJZWxzZQorCQkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwor LyoKKyAqIENhbGN1bGF0ZSB3aWR0aCBvZiBzaG9ydCBkZWx0YXMsIHdpZHRoIG9mIGV4Y2Vw dGlvbnMsIGFuZCBudW1iZXIgb2YKKyAqIGV4Y2VwdGlvbnMKKyAqLworaW50CitkZm9yX2Nh bGNfd2lkdGgoc2l6ZV90IGNudERlbHRhLCBjb25zdCB1bmlxc29ydHZlY3RfdCAqdXN2RGVs dGFXaWR0aHMsCisJCQkJY29uc3QgdmVjdF90ICp2V2lkdGhDb3VudGVycywgc2l6ZV90ICp3 aWR0aCwKKwkJCQlzaXplX3QgKmNudEV4Y2VwdGlvbnMpCit7CisjZGVmaW5lIE1JTl9ERUxU QVNfUVVBTlRJVFlfQUxMT1dJTkdfRVhDRVBUSU9OUyA0CisKKwlzaXplX3QgY250U2hvcnRE ZWx0YXM7IC8qIG51bWJlciBvZiBkZWx0YXMgcHJlc2VudGVkIHdpdGhvdXQgZXhjZXB0aW9u cyAqLworCXNpemVfdCBpbmR4V2lkdGg7CS8qIHRoZSB3aWR0aCBvZiBzaG9ydCBkZWx0YXMg KGluZGV4IGZyb20gdldpZHRoQ291bnRlcnMKKwkJCQkJCSAqIChhbmQgZnJvbSB2RGVsdGFX aWR0aCBhY2NvcmRpbmdseSkKKwkJCQkJCSAqLworCWlmICh1c3ZEZWx0YVdpZHRocyA9PSBO VUxMIHx8IHZXaWR0aENvdW50ZXJzID09IE5VTEwgfHwgd2lkdGggPT0gTlVMTCB8fAorCQlj bnRFeGNlcHRpb25zID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWNudFNob3J0RGVsdGFz ID0gY250RGVsdGE7CisJaW5keFdpZHRoID0gdXN2RGVsdGFXaWR0aHMtPmNudCAtIDE7IC8q IGNvdW50ZXIgaW50byBpbmRleCAqLworCSpjbnRFeGNlcHRpb25zID0gMDsKKworCS8qCisJ ICogSGVyZSB3ZSB0cnkgdG8gZGVjcmVhc2UgdGhlIHdpZHRoIG9mIHNob3J0IGRlbHRhcyBp biBvcmRlciB0byBjb21wcmVzcworCSAqIHRoZSBhcnJheSBvZiBkZWx0YXMgaW4gdGhlIG1l YW50aW1lIHdlIGFyZSBlYWdlciB0byBjb3ZlciBubyBsZXNzIHRoYW4KKwkgKiA5MCUgb2Yg ZGVsdGFzIHdlIGhhdmUuIEl0IGlzIGFuIGhldXJpc3RpYyBhbmFseXNpcyBiYXNlZCBvbiB0 aGUKKwkgKiBzdWdnZXN0aW9uICJubyBsZXNzIHRoYW4gOTAlIG9mIGRlbHRhcyB3ZSBoYXZl Ii4KKwkgKgorCSAqIFRPRE86IGFuYWx5emluZyB3ZSBtaWdodCB3YW50IGNhbHVsYXRlIHRo ZSBmdWxsIHNpemUgb2YgdGhlIHBhY2sgZm9yIGVhY2gKKwkgKiB2YXJpYW50IG9mIHRoZSB3 aWR0aC4KKwkgKi8KKwlpZiAoY250RGVsdGEgPj0gTUlOX0RFTFRBU19RVUFOVElUWV9BTExP V0lOR19FWENFUFRJT05TKSB7CisJCXNpemVfdCBzek1pbkNvdmVyYWdlOyAvKiB0aHJlc2hv bGQgKi8KKwkJc2l6ZV90IGo7CisKKwkJaWYgKGNudERlbHRhID49IDEwKQorCQkJc3pNaW5D b3ZlcmFnZSA9IGNudERlbHRhIC0gY250RGVsdGEgLyAxMDsKKwkJZWxzZQorCQkJc3pNaW5D b3ZlcmFnZSA9IGNudERlbHRhIC0gMTsKKworCQlqID0gaW5keFdpZHRoOworCisJCXdoaWxl IChqID4gMCkgeworCQkJaWYgKGNudFNob3J0RGVsdGFzIC0gdldpZHRoQ291bnRlcnMtPm1b al0gPCBzek1pbkNvdmVyYWdlKQorCQkJCWJyZWFrOworCisJCQljbnRTaG9ydERlbHRhcyAt PSB2V2lkdGhDb3VudGVycy0+bVtqXTsKKwkJCWotLTsKKwkJCWluZHhXaWR0aCA9IGo7CisJ CX0KKwkJKmNudEV4Y2VwdGlvbnMgPSBjbnREZWx0YSAtIGNudFNob3J0RGVsdGFzOworCX0K KworCSp3aWR0aCA9IHVzdkRlbHRhV2lkdGhzLT5tW2luZHhXaWR0aF07CisJcmV0dXJuIDA7 Cit9CisKKy8qCisgKiBkZm9yX2FuYWx5emUKKyAqIEFuYWx5emUgaW5wdXQgYXJyYXksIGNh bGN1bGF0ZSBkZWx0YXMgYW5kIHRoZWlyIHdpZHRoLCBkZWZpbmUgZXhjZXB0aW9ucyBhbmQK KyAqIHRoZWlyIHBvc2l0aW9ucy4gUmV0dXJucyB0aGVtIHRocm91Z2ggdGhlIGRmb3IsIHZE ZWx0YXMsIHVzdkV4Y1Bvcy4gSWYKKyAqIHVzdkV4Y1BvcyA9PSBOVUxMIC0gZG9uJ3QgY2Fs Y3VsYXRlIGV4Y2VwdGlvbnMuCisgKgorICogZGZvcl9hbmFseXplIGZ1bmN0aW9uIGRvZXMg bm90IHVzZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBpdHMKKyAqIGxvY2FsIGNv bnRhaW5lcnMuCisgKgorICogQSBjYWxsZXIgaGFzIHRvIGNvbnRyb2wgd2hldGhlciB2RGVs dGFzIGFuZCB1c3ZFeGNQb3MgdXNlIG91dGVyIG1lbW9yeQorICogcHJvdmlkZWQgYnkgY2Fs bGVyIG9yIG1hbmFnZSBtZW1vcnkgYWxsb2NhdGlvbiBhdXRvbWF0aWNhbGx5LCB3aGljaCBk ZWZpbmVzCisgKiB3aGV0aGVyIHZlY3RfaW5zZXJ0IGFuZCB2ZWN0X2FwcGVuZCBmdW5jdGlv bnMsIGludm9rZWQgZnJvbSBoZXJlLCB1c2UgZHluYW1pYworICogbWVtb3J5IG9yIG5vdC4K KyAqCisgKiBBIGNhbGxlciBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQgdGhhdCBkZm9yX21l dGFfdCBkZm9yIGFyZSBnb2luZyB0byBiZQorICogbnVsbGlmaWVkIGluIHRoaXMgZnVuY3Rp b24sIHNvIGl0IHNob3VsZCBub3QgaGF2ZSBhbnkgbWVhbmluZ2Z1bGwgZGF0YSBieQorICog c3RhcnQgb2YgZGZvcl9hbmFseXplLCBlc3BlY2lhbGx5IGl0cyBwYWNrIGZpZWxkIHNob3Vs ZCBub3QgYmUgdXNlZCBhcyBhCisgKiBwb2ludGVyIG9uIGR5bmFtaWMgbWVtb3J5LCBvdGhl cndpc2UgbWVtb3J5IGxlYWthZ2UgaXMgcG9zc2libGUuCisgKgorICovCitpbnQKK2Rmb3Jf YW5hbHl6ZShzaXplX3QgY250LCBjb25zdCBpdGVtX3QgYXJyW10sIC8qIGlucHV0ICovCisJ CQkgZGZvcl9tZXRhX3QgKmRmb3IsIHZlY3RfdCAqdkRlbHRhcywKKwkJCSB1bmlxc29ydHZl Y3RfdCAqdXN2RXhjUG9zKSAvKiBvdXRwdXQgKi8KK3sKKyNkZWZpbmUgREVMVEFfV0lEVEhf TUFYX05VTUJFUiAoc2l6ZW9mKGl0ZW1fdCkgKiA4KQorCWludCByZXM7CisJdW5pcXNvcnR2 ZWN0X3QgdXN2RGVsdGFXaWR0aHM7CisJaXRlbV90IGJ1ZkRlbHRhV2lkdGhbREVMVEFfV0lE VEhfTUFYX05VTUJFUl07CisJdmVjdF90IHZXaWR0aENvdW50ZXJzOworCWl0ZW1fdCBidWZX aWR0aENvdW50ZXJzW0RFTFRBX1dJRFRIX01BWF9OVU1CRVJdOworCisJaXRlbV90IG1hc2s7 CisKKwlleGNhbGdfdCBpc0V4Y1VzYWdlID0gKHVzdkV4Y1BvcyA9PSBOVUxMKSA/IERGT1Jf RVhDX0RPTlRfVVNFIDoKKwkJCQkJCQkJCQkJCURGT1JfRVhDX1VTRTsKKworCWlmIChkZm9y ID09IE5VTEwpCisJCWdvdG8gZGZvcl9hbmFseXplX2Vycm9yOworCisJbWVtc2V0KGRmb3Is IDAsIHNpemVvZihkZm9yX21ldGFfdCkpOworCisJaWYgKGNudCA9PSAwKQorCQkvKiBkZm9y LT5pdGVtX2NudCA9IDA7ICovIC8qIGl0J3MgYmVlbiBhbHJlYWR5IGRvbmUgd2l0aCBtZW1z ZXQgKi8KKwkJZ290byBkZm9yX2FuYWx5emVfcmV0OworCWVsc2UgaWYgKGFyciA9PSBOVUxM KQorCQlnb3RvIGRmb3JfYW5hbHl6ZV9lcnJvcjsKKworCWlmICgwICE9IHZlY3RfaW5pdCgm dXN2RGVsdGFXaWR0aHMsIERFTFRBX1dJRFRIX01BWF9OVU1CRVIsIGJ1ZkRlbHRhV2lkdGgp KQorCQlnb3RvIGRmb3JfYW5hbHl6ZV9lcnJvcjsKKworCWlmIChpc0V4Y1VzYWdlID09IERG T1JfRVhDX1VTRSkKKwl7CisJCWlmICgwICE9CisJCQl2ZWN0X2luaXQoJnZXaWR0aENvdW50 ZXJzLCBERUxUQV9XSURUSF9NQVhfTlVNQkVSLAorCQkJCQkgIGJ1ZldpZHRoQ291bnRlcnMp KQorCQkJZ290byBkZm9yX2FuYWx5emVfZXJyb3I7CisJfQorCisJZGZvci0+aXRlbV9jbnQg PSBjbnQ7CisKKwlpZiAoMCAhPQorCQlkZm9yX2NhbGNfZGVsdGFzKGRmb3ItPml0ZW1fY250 LCBhcnIsIHZEZWx0YXMsICZ1c3ZEZWx0YVdpZHRocywKKwkJCQkJCSAoaXNFeGNVc2FnZSA9 PSBERk9SX0VYQ19VU0UpID8gJnZXaWR0aENvdW50ZXJzIDogTlVMTCkpCisJCWdvdG8gZGZv cl9hbmFseXplX2Vycm9yOworCisJYXNzZXJ0KGNudCA9PSB2RGVsdGFzLT5jbnQpOworCWFz c2VydCh1c3ZEZWx0YVdpZHRocy5jbnQgPiAwKTsKKworCWlmIChpc0V4Y1VzYWdlID09IERG T1JfRVhDX1VTRSkKKwl7CisJCWlmICgwICE9CisJCQlkZm9yX2NhbGNfd2lkdGgodkRlbHRh cy0+Y250LCAmdXN2RGVsdGFXaWR0aHMsICZ2V2lkdGhDb3VudGVycywKKwkJCQkJCQkmZGZv ci0+ZGVsdGFfd2lkLCAmZGZvci0+ZXhjX2NudCkpCisJCQlnb3RvIGRmb3JfYW5hbHl6ZV9l cnJvcjsKKwl9CisJZWxzZQorCXsKKwkJZGZvci0+ZGVsdGFfd2lkID0KKwkJCXVzdkRlbHRh V2lkdGhzLm1bdXN2RGVsdGFXaWR0aHMuY250IC0gMV07IC8qIG1heCB3aWR0aCAqLworCQlk Zm9yLT5leGNfY250ID0gMDsKKwl9CisKKwlkZm9yLT5leGNfd2lkID0gdXN2RGVsdGFXaWR0 aHMubVt1c3ZEZWx0YVdpZHRocy5jbnQgLSAxXSAtIGRmb3ItPmRlbHRhX3dpZDsKKworCS8q IEEgbWFzayBsb29rcyBsaWtlIDAwMDExMTEuIEl0IGlzIGFsc28gdGhlIG1heCB2YWx1ZSBv ZiBhIHNob3J0IGRlbHRhICovCisJbWFzayA9IHdpZHRoX3RvX21hc2soZGZvci0+ZGVsdGFf d2lkKTsKKworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdkRlbHRhcy0+Y250OyBpKyspCisJ eworCQlpZiAodkRlbHRhcy0+bVtpXSA+IG1hc2spCisJCXsKKwkJCWFzc2VydChpc0V4Y1Vz YWdlID09IERGT1JfRVhDX1VTRSk7CisJCQlpZiAoMCAhPSB2ZWN0X2FwcGVuZCh1c3ZFeGNQ b3MsIChpdGVtX3QpaSkpCisJCQkJZ290byBkZm9yX2FuYWx5emVfZXJyb3I7CisJCX0KKwl9 CisJYXNzZXJ0KGRmb3ItPmRlbHRhX3dpZCArIGRmb3ItPmV4Y193aWQgPD0gc2l6ZW9mKGl0 ZW1fdCkgKiA4KTsKKwlyZXMgPSAwOworZGZvcl9hbmFseXplX3JldDoKKwlyZXR1cm4gcmVz OworZGZvcl9hbmFseXplX2Vycm9yOgorCS8qIGRmb3JfYW5hbHl6ZSBkb2Vzbid0IGFmZmVj dCB0aGUgcGFjayBmaWVsZCAoZG9lc24ndCBhbGxvY2F0ZSwgZGVsZXRlIG9yCisJICogb3Ro ZXJ3aXNlKSwgc28gd2UgY2FuIG51bGxpZnkgdGhlIHdob2xlIGRmb3IgYW5kIGl0CisJICog aXMgc2FmZSwgbm8gbGVha2FnZSAqLworCW1lbXNldChkZm9yLCAwLCBzaXplb2YoZGZvcl9t ZXRhX3QpKTsKKwlyZXMgPSAtMTsKKwlnb3RvIGRmb3JfYW5hbHl6ZV9yZXQ7Cit9CisKKy8q CisgKiBkZm9yX3BhY2sKKyAqCisgKiBUaGUgaW5wdXQgYXJyYXkgYXJyIGhhcyB0byBiZSBz b3J0ZWQuCisgKgorICogSWYgYSBjYWxsZXIgbmVlZHMgdG8gYXZvaWQgdXNpbmcgZHluYW1p YyBtZW1vcnkgYWxsb2NhdGlvbiwgdGhleSBoYXZlIHRvCisgKiBwcm92aWRlIHRoZSBleHRl cm5hbCBtZW1vcnkgYnVmZmVyLiBUaGUgc2l6ZSBvZiB0aGlzIGJ1ZmZlciBzaG91bGQgYmUg bm90CisgKiBsZXNzIHRoYW4gNCAqIGNudCAqIHNpemVvZihpdGVtX3QpLiBJdCB3aWxsIGJl IHVzZWQgZm9yIGFycmF5cyBwb2ludGVkIGJ5CisgKiAqKGRmb3ItPnBhY2spLCAqKHZEZWx0 YXMtPm0pLCAqKHZFeGNQb3NEZWx0YXMtPm0pLCAqKHVzdkV4Y1Bvcy0+bSkuCisgKgorICog SWYgZHluYW1pYyBhbGxvY2F0aW9uIGhhcyBiZWVuIHVzZWQgYnkgdGhlIGRmb3JfcGFjaywg YSBjYWxsZXIgaGFzIHRvIGZyZWUKKyAqIHRoZSBwaWVjZSBvZiBtZW1vcnkgcG9pbnRlZCBi eSBkZm9yLT5wYWNrLCBzaW5jZSBpdCBpcyBhbG9jYXRlZCBieSB0aGUKKyAqIGRmb3JfcGFj ayB3aXRoIERGT1JfTUFMTE9DLiBGcmVlaW5nIGhhcyB0byBiZSBwZXJmb3JtZWQgYnkgZnVu Y3Rpb24KKyAqIGNvbmZvcm1pbmcgdG8gREZPUl9NQUxMT0MgKHBhaXJlZCB3aXRoIGl0KS4g Rm9yIGluc3RhbmNlLCBpZiBERk9SX01BTExPQyBpcworICogbWFsbG9jLCB0aGFuIG1lbW9y eSBzaG91bGQgYmUgZnJlZWQgYnkgZnJlZS4KKyAqLworaW50CitkZm9yX3BhY2soc2l6ZV90 IGNudCwgY29uc3QgaXRlbV90IGFycltdLCBleGNhbGdfdCBpc0V4Y1VzYWdlLAorCQkgIGRm b3JfbWV0YV90ICpkZm9yLCBzaXplX3QgYnVmU2l6ZSwgdWludDhfdCBidWZbXSkKK3sKKwlp bnQgcmVzOworCXZlY3RfdCB2RGVsdGFzID0geyAwIH07CisJdmVjdF90IHZFeGNQb3NEZWx0 YXMgPSB7IDAgfTsKKwl1bmlxc29ydHZlY3RfdCB1c3ZFeGNQb3MgPSB7IDAgfTsKKworCWlm IChkZm9yID09IE5VTEwgfHwKKwkJKGJ1ZlNpemUgIT0gMCAmJiBidWZTaXplIDwgNCAqIGNu dCAqIHNpemVvZihpdGVtX3QpKSkKKwl7CisJCWdvdG8gZGZvcl9wYWNrX2Vycm9yOworCX0K KworCS8qCisJICogV2UgZG9uJ3QgbmVlZCBpdCBoZXJlOgorCSAqIAkJCW1lbXNldChkZm9y LCAwLCBzaXplb2YoZGZvcl9tZXRhX3QpKS4KKwkgKiBJdCBpcyBnb2luZyB0byBiZSBkb25l IGluIGRmb3JfYW5hbHl6ZS4KKwkgKi8KKworCXsKKwkJaXRlbV90ICpkZWx0YUJ1ZiA9IE5V TEw7CisJCWl0ZW1fdCAqZXhjUG9zRGVsdGFzQnVmID0gTlVMTDsKKwkJaXRlbV90ICpleGNQ b3NCdWYgPSBOVUxMOworCisJCWludCByZXMxID0gMDsKKwkJaW50IHJlczIgPSAwOworCQlp bnQgcmVzMyA9IDA7CisKKwkJaWYgKGJ1ZlNpemUgIT0gMCkKKwkJeworCQkJLyogU3RlcCBv dmVyIHRoZSBtYXhpbWFsIGFsbG93ZWQgREZvUiBwYWNrIHNpemUgKi8KKwkJCWRlbHRhQnVm ICAgICAgICA9IChpdGVtX3QqKShidWYgKyBjbnQgKiBzaXplb2YoaXRlbV90KSk7CisJCQll eGNQb3NEZWx0YXNCdWYgPSAoaXRlbV90KikoYnVmICsgY250ICogc2l6ZW9mKGl0ZW1fdCkg KiAyKTsKKwkJCWV4Y1Bvc0J1ZiAgICAgICA9IChpdGVtX3QqKShidWYgKyBjbnQgKiBzaXpl b2YoaXRlbV90KSAqIDMpOworCQl9CisKKwkJLyogU2V0dXAgY29udGFpbmVycyB3aXRoIG91 dGVyIG1lbW9yeSAqLworCQlyZXMxID0gdmVjdF9pbml0KCZ2RGVsdGFzLCBjbnQsIGRlbHRh QnVmKTsKKworCQlpZiAoaXNFeGNVc2FnZSkKKwkJeworCQkJcmVzMiA9IHZlY3RfaW5pdCgm dkV4Y1Bvc0RlbHRhcywgY250LCBleGNQb3NEZWx0YXNCdWYpOworCQkJcmVzMyA9IHZlY3Rf aW5pdCgmdXN2RXhjUG9zLCBjbnQsIGV4Y1Bvc0J1Zik7CisJCX0KKworCQlpZiAocmVzMSAh PSAwIHx8IHJlczIgIT0gMCB8fCByZXMzICE9IDApCisJCQlnb3RvIGRmb3JfcGFja19lcnJv cjsKKwl9CisKKwlpZiAoMCAhPQorCQlkZm9yX2FuYWx5emUoY250LCBhcnIsIGRmb3IsICZ2 RGVsdGFzLAorCQkJCQkgKGlzRXhjVXNhZ2UgPT0gREZPUl9FWENfVVNFKSA/ICZ1c3ZFeGNQ b3MgOiBOVUxMKSkKKwkJZ290byBkZm9yX3BhY2tfZXJyb3I7CisKKwlpZiAoZGZvci0+ZXhj X2NudCAhPSAwKQorCXsKKwkJLyogV2UgdHJlYXQgZXhjZXB0aW9uIHBvc2l0aW9ucyBhcyBh IHNvcnRlZCBzZXF1ZW5jZSwgYXBwbHkgdGhlCisJCSAqIERGb1IgYWxnb3JpdGhtIHRvIGl0 LCBhbmQgc2F2ZSBub3QgdGhlaXIgYWJzb2x1dGUgdmFsdWVzIGJ1dCB0aGVpcgorCQkgKiBk ZWx0YXMuICovCisJCWRmb3JfbWV0YV90IGRmb3JFeGNQb3M7CisJCWFzc2VydChkZm9yLT5l eGNfY250ID09IHVzdkV4Y1Bvcy5jbnQpOworCQlpZiAoMCAhPQorCQkJZGZvcl9hbmFseXpl KHVzdkV4Y1Bvcy5jbnQsIHVzdkV4Y1Bvcy5tLCAmZGZvckV4Y1BvcywKKwkJCQkJCSAmdkV4 Y1Bvc0RlbHRhcywgTlVMTCkpCisJCQlnb3RvIGRmb3JfcGFja19lcnJvcjsKKworCQlhc3Nl cnQoZGZvci0+ZXhjX2NudCA9PSB2RXhjUG9zRGVsdGFzLmNudCk7CisJCWFzc2VydChkZm9y LT5leGNfY250ID09IGRmb3JFeGNQb3MuaXRlbV9jbnQpOworCisJCWRmb3ItPmV4Y19wb3Nf d2lkID0gZGZvckV4Y1Bvcy5kZWx0YV93aWQ7CisJfQorCWVsc2UKKwl7CisJCWFzc2VydCh1 c3ZFeGNQb3MuY250ID09IDApOyAvKiB1c3ZFeGNQb3MgaGFzIHRvIHJlbWFpbiB6ZXJvZWQu ICovCisJCWFzc2VydChkZm9yLT5leGNfd2lkID09IDApOyAvKiBObyBleGNlcHRpb25zLCBu byBleGNlcHRpb25zJyB3aWR0aC4gKi8KKwkJYXNzZXJ0KGRmb3ItPmV4Y19wb3Nfd2lkID09 IDApOyAvKiBObyBleGNlcHRpb25zJyBwb3NpdGlvbnMgd2lkdGggdG9vLiAqLworCX0KKwor CS8qIGRmb3JfcGFjayBzZXJpYWxpc2F0aW9uIHBhY2tpbmcgKi8KKwl7CisJCS8qIGluZGV4 IG9mIHRoZSBuZXh0IGZyZWUgYml0IHRvIGJlIHVzZWQ6ICovCisJCXNpemVfdCBkOyAvKiAt IGJ5IGEgZGVsdGEgKi8KKwkJc2l6ZV90IGU7IC8qIC0gYnkgYW4gZXhjZXB0aW9uICovCisJ CXNpemVfdCBwOyAvKiAtIGJ5IGFuIGV4Y2VwdGlvbiBwb3NpdGlvbiAqLworCQlpdGVtX3Qg bWFzazsKKwkJZGZvcl9zdGF0c190IHN0YXRzOworCQlzaXplX3QgajsKKworCQlzdGF0cyA9 IGRmb3JfY2FsY19zdGF0cygqZGZvcik7CisJCWRmb3ItPm5ieXRlcyA9IGRmb3JfY2FsY19u Ynl0ZXMoKmRmb3IpOworCisJCWlmIChidWZTaXplICE9IDApCisJCXsKKwkJCS8qIE1heCBz aXplIG9mIHRoZSBkZm9yLT5wYWNrIGlzIGNudCAqIHNpemVvZihzaXplX3QpICovCisJCQlk Zm9yLT5wYWNrID0gYnVmOworCQkJZGZvci0+b3V0ZXJfbWVtID0gdHJ1ZTsKKwkJCWlmIChk Zm9yLT5uYnl0ZXMgPiBjbnQgKiBzaXplb2Yoc2l6ZV90KSkKKwkJCQlnb3RvIGRmb3JfcGFj a19lcnJvcjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIElmIGEgYnVmZmVyIHdhcyBub3Qg cHJvdmlkZWQgYnkgY2FsbGVyIHdlIGFsbG9jYXRlIGl0IGJ5CisJCQkgKiBvdXJzZWx2ZXMK KwkJCSAqLworCQkJZGZvci0+cGFjayA9ICh1aW50OF90ICopREZPUl9NQUxMT0MoKGRmb3It Pm5ieXRlcykpOworCisJCQlkZm9yLT5vdXRlcl9tZW0gPSBmYWxzZTsKKwkJfQorCisJCWlm IChkZm9yLT5wYWNrID09IE5VTEwpCisJCQlnb3RvIGRmb3JfcGFja19lcnJvcjsKKworCQlt ZW1zZXQoZGZvci0+cGFjaywgMCwgZGZvci0+bmJ5dGVzKTsKKworCQkvKiBpbmRleCBvZiB0 aGUgbmV4dCBmcmVlIGJpdCB0byBiZSB1c2VkOiAqLworCQlkID0gMDsJCQkgICAvKiAtIGJ5 IGEgZGVsdGEgKi8KKwkJZSA9IHN0YXRzLmRlbHRhX3BhY2tfbmJpdHM7ICAgLyogLSBieSBh biBleGNlcHRpb24gKi8KKwkJcCA9IGUgKyBzdGF0cy5leGNfcGFja19uYml0czsgLyogLSBi eSBhbiBleGNlcHRpb24gcG9zaXRpb24gaW5kZXggKi8KKwkJLyogQSBtYXNrIGxvb2tzIGxp a2UgMDAwMTExMS4gSXQgaXMgYWxzbyB0aGUKKwkJICogbWF4IHZhbHVlIG9mIGEgc2hvcnQg ZGVsdGEgKi8KKwkJbWFzayA9IHdpZHRoX3RvX21hc2soZGZvci0+ZGVsdGFfd2lkKTsKKwor CQlqID0gMDsKKwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2RGVsdGFzLmNudDsgaSsrKQor CQl7CisJCQlkID0gYml0cGFja19wYWNrKGRmb3ItPnBhY2ssIGQsIHZEZWx0YXMubVtpXSAm IG1hc2ssCisJCQkJCQkJIGRmb3ItPmRlbHRhX3dpZCk7CisKKwkJCWlmICh2RGVsdGFzLm1b aV0gPiBtYXNrKQorCQkJeworCQkJCWFzc2VydChpc0V4Y1VzYWdlID09IERGT1JfRVhDX1VT RSk7CisJCQkJYXNzZXJ0KHVzdkV4Y1Bvcy5tW2pdID09IGkpOworCQkJCWFzc2VydChqIDwg dXN2RXhjUG9zLmNudCk7CisJCQkJYXNzZXJ0KGogPCB2RXhjUG9zRGVsdGFzLmNudCk7CisJ CQkJYXNzZXJ0KGRmb3ItPmV4Y193aWQgIT0gMCk7CisJCQkJYXNzZXJ0KGRmb3ItPmV4Y19w b3Nfd2lkICE9IDApOworCisJCQkJZSA9IGJpdHBhY2tfcGFjayhkZm9yLT5wYWNrLCBlLCB2 RGVsdGFzLm1baV0gPj4gZGZvci0+ZGVsdGFfd2lkLAorCQkJCQkJCQkgZGZvci0+ZXhjX3dp ZCk7CisJCQkJcCA9IGJpdHBhY2tfcGFjayhkZm9yLT5wYWNrLCBwLCB2RXhjUG9zRGVsdGFz Lm1bal0sIGRmb3ItPmV4Y19wb3Nfd2lkKTsKKwkJCQlqKys7CisJCQl9CisJCX0KKworCQlp ZiAoaXNFeGNVc2FnZSA9PSBERk9SX0VYQ19VU0UpCisJCQlhc3NlcnQoaiA9PSB1c3ZFeGNQ b3MuY250KTsKKwkJZWxzZQorCQkJYXNzZXJ0KGogPT0gMCk7CisKKwkJYXNzZXJ0KGQgPT0g c3RhdHMuZGVsdGFfcGFja19uYml0cyk7CisJCWFzc2VydChlID09IHN0YXRzLmRlbHRhX3Bh Y2tfbmJpdHMgKyBzdGF0cy5leGNfcGFja19uYml0cyk7CisJCWFzc2VydChwID09CisJCQkg ICBzdGF0cy5kZWx0YV9wYWNrX25iaXRzICsgc3RhdHMuZXhjX3BhY2tfbmJpdHMgKworCQkJ CSAgIHN0YXRzLmV4Y19wb3NfcGFja19uYml0cyk7CisJCXJlcyA9IDA7CisJfQorZGZvcl9w YWNrX3JldDoKKwl2ZWN0X2NsZWFyKCZ1c3ZFeGNQb3MpOworCXZlY3RfY2xlYXIoJnZFeGNQ b3NEZWx0YXMpOworCXZlY3RfY2xlYXIoJnZEZWx0YXMpOworCXJldHVybiByZXM7CitkZm9y X3BhY2tfZXJyb3I6CisJaWYgKGRmb3IgIT0gTlVMTCkKKwkJZGZvcl9jbGVhcl9tZXRhKGRm b3IpOworCXJlcyA9IC0xOworCWdvdG8gZGZvcl9wYWNrX3JldDsKK30KKworLyoKKyAqIGRm b3JfdW5wYWNrCisgKgorICogSWYgYSBjYWxsZXIgbmVlZHMgdG8gYXZvaWQgdXNpbmcgZHlu YW1pYyBtZW1vcnkgYWxsb2NhdGlvbiwgdGhleSBoYXZlIHRvOgorICogMSkgcHJvdmlkZSB0 aGUgZXh0ZXJuYWwgbWVtb3J5IGJ1ZmZlci4gVGhlIHNpemUgb2YgdGhpcyBidWZmZXIgc2hv dWxkIGJlIG5vdAorICogICAgbGVzcyB0aGFuOgorICogICAgICAgIAkyICogZGZvci5pdGVt X2NudCAqIHNpemVvZihpdGVtX3QpICsgMiAqIGRmb3IuZXhjX2NudCAqIHNpemVvZihpdGVt X3QpCisgKgorICogMikgdGhlIHZWYWxzIHZlY3RvciBoYXMgdG8gYmUgY3JlYXRlZCBidXQg bXVzdCBub3QgYmUgaW5pdGlhbGlzZWQuIFRoZQorICogICAgZGZvcl91bnBhY2sgc2V0cyB2 VmFscyBpbiB0aGUgJ291dGVyIG1lbW9yeScgcmVnaW1lbiBhbmQgd2lsbCBzZXQgdlZhbC0+ bQorICogICAgdG8gYnVmLgorICoKKyAqIFByb3ZpZGVkIGR5bmFtaWMgYWxsb2NhdGlvbiBp cyB1c2VkIGJ5IHRoZSBkZm9yX3VucGFjaywgYSBjYWxsZXIgd2lsbCBoYXZlIHRvCisgKiBm cmVlIHRoZSBwaWVjZSBvZiBtZW1vcnkgcG9pbnRlZCBieSB2VmFscy0+bSwgdXNpbmcgdmVj dF9jbGVhcigmdlZhbHMpLgorICoKKyAqIEFyZSB0aGUgb3V0ZXIgbWVtb3J5IGlzIHVzZWQK KyAqLworaW50CitkZm9yX3VucGFjayhjb25zdCBkZm9yX21ldGFfdCAqZGZvciwgdW5pcXNv cnR2ZWN0X3QgKnZWYWxzLCBzaXplX3QgYnVmU2l6ZSwKKwkJCXVpbnQ4X3QgYnVmW10pCit7 CisJaW50IHJlcyA9IC0xOworCXNpemVfdCBzekRlbHRhUGFjazsKKwl2ZWN0X3QgdkV4Y3Mg PSB7IDAgfTsKKwl2ZWN0X3QgdkV4Y1Bvc3MgPSB7IDAgfTsKKwlleGNhbGdfdCBpc0V4Y1Vz YWdlID0gKGRmb3ItPmV4Y19jbnQgPT0gMCkgPyBERk9SX0VYQ19ET05UX1VTRSA6CisJCQkJ CQkJCQkJCQkgREZPUl9FWENfVVNFOworCisJaWYgKHZWYWxzID09IE5VTEwpCisJCWdvdG8g ZGZvcl91bnBhY2tfZXJyb3I7CisKKwlpZiAoYnVmU2l6ZSAhPSAwICYmCisJCWJ1ZlNpemUg PCAoMiAqIGRmb3ItPml0ZW1fY250ICogc2l6ZW9mKGl0ZW1fdCkgKworCQkJCSAgIDIgKiBk Zm9yLT5leGNfY250ICogc2l6ZW9mKGl0ZW1fdCkpKQorCQlnb3RvIGRmb3JfdW5wYWNrX2Vy cm9yOworCisJc3pEZWx0YVBhY2sgPSBkZm9yLT5kZWx0YV93aWQgKiBkZm9yLT5pdGVtX2Nu dDsKKworCXsKKwkJdWludDhfdCAqdmFsc0J1ZiA9IE5VTEw7CisJCWlmIChidWZTaXplICE9 IDApCisJCQl2YWxzQnVmID0gYnVmOworCisJCWlmICh2ZWN0X2luaXQodlZhbHMsIGRmb3It Pml0ZW1fY250LCAoaXRlbV90ICopdmFsc0J1ZikgIT0gMCkKKwkJCWdvdG8gZGZvcl91bnBh Y2tfZXJyb3I7CisJfQorCisJLyogQ2FsY3VsYXRlIGV4Y2VwdGlvbnMgKi8KKwlpZiAoaXNF eGNVc2FnZSA9PSBERk9SX0VYQ19VU0UpCisJeworCQlzaXplX3Qgc3pFeGNQYWNrOworCQlz aXplX3QgY3JFeGM7IC8qIGNhcmV0IChjdXJzb3IpICovCisJCXNpemVfdCBjclBvczsgLyog Y2FyZXQgKGN1cnNvcikgKi8KKworCQl1aW50OF90ICpleGNCdWYgPSBOVUxMOworCQl1aW50 OF90ICpleGNQb3NzQnVmID0gTlVMTDsKKworCQlpbnQgcmVzMSA9IDA7CisJCWludCByZXMy ID0gMDsKKworCQlzekV4Y1BhY2sgPSBkZm9yLT5leGNfY250ICogZGZvci0+ZXhjX3dpZDsK KwkJY3JFeGMgPSBzekRlbHRhUGFjazsKKwkJY3JQb3MgPSBjckV4YyArIHN6RXhjUGFjazsK KworCQlpZiAoYnVmU2l6ZSAhPSAwKQorCQl7CisJCQkvKiBzdGVwIG92ZXIgdGhlIG1lbW9y eSBvY2N1cGllZCBieSB2VmFscyAqLworCQkJZXhjQnVmID0gYnVmICsgZGZvci0+aXRlbV9j bnQgKiBzaXplb2YoaXRlbV90KTsKKwkJCWV4Y1Bvc3NCdWYgPSBleGNCdWYgKyBkZm9yLT5l eGNfY250ICogc2l6ZW9mKGl0ZW1fdCk7CisJCX0KKworCQlyZXMxID0gdmVjdF9pbml0KCZ2 RXhjcywgZGZvci0+ZXhjX2NudCwgKGl0ZW1fdCAqKWV4Y0J1Zik7CisJCXJlczIgPSB2ZWN0 X2luaXQoJnZFeGNQb3NzLCBkZm9yLT5leGNfY250LCAoaXRlbV90ICopZXhjUG9zc0J1Zik7 CisKKwkJaWYgKHJlczEgIT0gMCB8fCByZXMyICE9IDApCisJCQlnb3RvIGRmb3JfdW5wYWNr X2Vycm9yOworCisKKwkJZm9yIChzaXplX3QgcG9zRXhjID0gMCwgaiA9IDA7IGogPCBkZm9y LT5leGNfY250OyBqKyspCisJCXsKKwkJCWl0ZW1fdCBkZWx0YVBvczsKKwkJCXJlczEgPSB2 ZWN0X2FwcGVuZCgmdkV4Y3MsCisJCQkJCQkJICAgYml0cGFja191bnBhY2soZGZvci0+cGFj aywgJmNyRXhjLAorCQkJCQkJCQkJCQkgIGRmb3ItPmV4Y193aWQpKTsKKwkJCS8qIENhbGN1 bGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGV4Y2VwdGlvbiBmcm9tIHRoZSBkZWx0YSBvZiB0 aGUKKwkJCSAqIHBvc2l0aW9uIG9mIHRoZSBleGNlcHRpb24gKi8KKwkJCWRlbHRhUG9zID0g Yml0cGFja191bnBhY2soZGZvci0+cGFjaywgJmNyUG9zLCBkZm9yLT5leGNfcG9zX3dpZCk7 CisJCQlwb3NFeGMgKz0gZGVsdGFQb3M7CisJCQlyZXMyID0gdmVjdF9hcHBlbmQoJnZFeGNQ b3NzLCBwb3NFeGMpOworCQkJaWYgKHJlczEgIT0gMCB8fCByZXMyICE9IDApCisJCQkJZ290 byBkZm9yX3VucGFja19lcnJvcjsKKwkJfQorCQlhc3NlcnQoY3JFeGMgPT0gc3pEZWx0YVBh Y2sgKyBzekV4Y1BhY2spOworCQlhc3NlcnQoY3JQb3MgPT0KKwkJCSAgIHN6RGVsdGFQYWNr ICsgc3pFeGNQYWNrICsgZGZvci0+ZXhjX3Bvc193aWQgKiBkZm9yLT5leGNfY250KTsKKwl9 CisKKwl7IC8qIFVucGFjayBkZWx0YXMgYW5kIGNhbGN1bGF0ZSB0YXJnZXQgdmFsdWVzICov CisJCWl0ZW1fdCBtRGVsdGE7CisJCWl0ZW1fdCBtU3VtID0gMDsKKwkJc2l6ZV90IGogPSAw OyAvKiBpbmRleCBvZiBhbiBleGNlcHRpb24gYW5kIGl0cyBwb3NpdGlvbiBpbiB2ZWN0b3Jz ICovCisJCXNpemVfdCBjckRlbHRhID0gMDsKKwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBk Zm9yLT5pdGVtX2NudDsgaSsrKQorCQl7CisJCQltRGVsdGEgPSBiaXRwYWNrX3VucGFjayhk Zm9yLT5wYWNrLCAmY3JEZWx0YSwgZGZvci0+ZGVsdGFfd2lkKTsKKworCQkJaWYgKGlzRXhj VXNhZ2UgPT0gREZPUl9FWENfVVNFICYmCisJCQkJaiA8IHZFeGNzLmNudCAmJgorCQkJCWkg PT0gdkV4Y1Bvc3MubVtqXSkKKwkJCXsKKwkJCQlhc3NlcnQoaiA8IGRmb3ItPmV4Y19jbnQp OworCQkJCW1EZWx0YSB8PSB2RXhjcy5tW2pdIDw8IGRmb3ItPmRlbHRhX3dpZDsKKwkJCQlq Kys7CisJCQl9CisJCQltU3VtICs9IG1EZWx0YTsKKwkJCXZlY3RfYXBwZW5kKHZWYWxzLCBt U3VtKTsKKwkJfQorCQlhc3NlcnQoY3JEZWx0YSA9PSBzekRlbHRhUGFjayk7CisJCXJlcyA9 IDA7CisJfQorCitkZm9yX3VucGFja19yZXQ6CisJdmVjdF9jbGVhcigmdkV4Y1Bvc3MpOwor CXZlY3RfY2xlYXIoJnZFeGNzKTsKKwlyZXR1cm4gcmVzOworZGZvcl91bnBhY2tfZXJyb3I6 CisJdmVjdF9jbGVhcih2VmFscyk7CisJcmVzID0gLTE7CisJZ290byBkZm9yX3VucGFja19y ZXQ7Cit9CisKK3ZvaWQKK2Rmb3JfY2xlYXJfbWV0YShkZm9yX21ldGFfdCAqbWV0YSkKK3sK KwlpZiAobWV0YSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAobWV0YS0+cGFjayAhPSBO VUxMICYmICFtZXRhLT5vdXRlcl9tZW0pCisJCURGT1JfRlJFRShtZXRhLT5wYWNrKTsKKwor CW1lbXNldChtZXRhLCAwLCBzaXplb2YoZGZvcl9tZXRhX3QpKTsKK30KKworZGZvcl9zdGF0 c190CitkZm9yX2NhbGNfc3RhdHMoZGZvcl9tZXRhX3QgZGZvcikKK3sKKwlkZm9yX3N0YXRz X3Qgc3RhdDsKKwlzaXplX3QgbmJ5dGVzOworCXN0YXQuZGVsdGFfcGFja19uYml0cyA9IGRm b3IuZGVsdGFfd2lkICogZGZvci5pdGVtX2NudDsKKwlzdGF0LmV4Y19wYWNrX25iaXRzID0g ZGZvci5leGNfd2lkICogZGZvci5leGNfY250OworCXN0YXQuZXhjX3Bvc19wYWNrX25iaXRz ID0gZGZvci5leGNfcG9zX3dpZCAqIGRmb3IuZXhjX2NudDsKKworCXN0YXQubmJpdHMgPSBz dGF0LmRlbHRhX3BhY2tfbmJpdHMgKyBzdGF0LmV4Y19wYWNrX25iaXRzICsgc3RhdC5leGNf cG9zX3BhY2tfbmJpdHM7CisKKwkvKiBJZiB0aGUgZGl2aXNpb24gcmVzdWx0cyBpbiB0aGUg cmVtYWluZGVyLCB3ZSB1c2UgYW4gYWRkaXRpb25hbAorCSAqIGJ5dGUgKi8KKwluYnl0ZXMg PSAoc3RhdC5uYml0cyArIDcpIC8gODsKKwlzdGF0LnJhdGlvID0gKGZsb2F0KShzaXplb2Yo aXRlbV90KSAqIGRmb3IuaXRlbV9jbnQpIC8gKGZsb2F0KW5ieXRlczsKKworCXJldHVybiBz dGF0OworfQorCitzaXplX3QgZGZvcl9jYWxjX25ieXRlcyhkZm9yX21ldGFfdCBkZm9yKQor eworCWRmb3Jfc3RhdHNfdCBzdGF0OworCXN0YXQgPSBkZm9yX2NhbGNfc3RhdHMoZGZvcik7 CisJcmV0dXJuIChzdGF0Lm5iaXRzICsgNykgLyA4OworfQorCisjaW5jbHVkZSAibGliL2Rm b3JfdGVtcGxfdW5kZWYuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi9kZm9yX3Ux Ni5jIGIvc3JjL2JhY2tlbmQvbGliL2Rmb3JfdTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmY3MDUxZjU1OTI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2JhY2tlbmQvbGliL2Rmb3JfdTE2LmMKQEAgLTAsMCArMSw4IEBACisvKgorICogRmlsZTog ZGZvcl91MTYuYworICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyNpbmNsdWRlICJs aWIvZGZvcl91MTZfY29uZmlnLmgiCisjaW5jbHVkZSAiZGZvcl90ZW1wbC5jIgorLyogY2xh bmctZm9ybWF0IG9uICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIvZGZvcl90ZW1w bC5oIGIvc3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVtcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYjRjMWQ0MWMxZDMKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvaW5jbHVkZS9saWIvZGZvcl90ZW1wbC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBG aWxlOiBkZm9yX3RlbXBsLmgKKyAqLworI2luY2x1ZGUgImRmb3JfdGVtcGxfc3RhcGxlLmgi CisKK2V4dGVybiBpbnQgZGZvcl9jYWxjX2RlbHRhcyhzaXplX3QgY250LCBjb25zdCBpdGVt X3QgYXJyW10sIHZlY3RfdCAqdkRlbHRhcywKKwkJCQkJCQl1bmlxc29ydHZlY3RfdCAqdXN2 RGVsdGFXaWR0aHMsCisJCQkJCQkJdmVjdF90ICp2V2lkdGhDb3VudGVycyk7CisKK2V4dGVy biBpbnQgZGZvcl9jYWxjX3dpZHRoKHNpemVfdCBjbnREZWx0YSwKKwkJCQkJCSAgIGNvbnN0 IHVuaXFzb3J0dmVjdF90ICp1c3ZEZWx0YVdpZHRocywKKwkJCQkJCSAgIGNvbnN0IHZlY3Rf dCAqdldpZHRoQ291bnRlcnMsIHNpemVfdCAqd2lkdGgsCisJCQkJCQkgICBzaXplX3QgKmNu dEV4Y2VwdGlvbnMpOworCitleHRlcm4gaW50IGRmb3JfcGFjayhzaXplX3QgY250LCBjb25z dCBpdGVtX3QgYXJyW10sIGV4Y2FsZ190IGlzRXhjVXNhZ2UsCisJCQkJCSBkZm9yX21ldGFf dCAqZGZvciwgc2l6ZV90IGJ1ZlNpemUsIHVpbnQ4X3QgYnVmW10pOworCitleHRlcm4gaW50 IGRmb3JfdW5wYWNrKGNvbnN0IGRmb3JfbWV0YV90ICpkZm9yLCB1bmlxc29ydHZlY3RfdCAq dlZhbHMsCisJCQkJCSAgIHNpemVfdCBidWZTaXplLCB1aW50OF90IGJ1ZltdKTsKKworZXh0 ZXJuIHZvaWQgZGZvcl9jbGVhcl9tZXRhKGRmb3JfbWV0YV90ICpkZm9yKTsKKworZXh0ZXJu IGRmb3Jfc3RhdHNfdCBkZm9yX2NhbGNfc3RhdHMoZGZvcl9tZXRhX3QgZGZvcik7CisKK2V4 dGVybiBzaXplX3QgZGZvcl9jYWxjX25ieXRlcyhkZm9yX21ldGFfdCBkZm9yKTsKKworI2lu Y2x1ZGUgImRmb3JfdGVtcGxfdW5kZWYuaCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xp Yi9kZm9yX3RlbXBsX3N0YXBsZS5oIGIvc3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVtcGxfc3Rh cGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5M2M0MGFj MDM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVtcGxfc3Rh cGxlLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBGaWxlOiBkZm9yX3N0YXBsZV90ZW1w bC5oCisgKi8KKworI2luY2x1ZGUgImMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICogTk9OUkVVU0FCTEUgQ09ERSwgYWxsb3dlZCB0byBiZSBpbmNsdWRlZCBvbmx5IG9u Y2UKKyAqCisgKiBUaGlzIGNvZGUgc2hvdWxkIGFwcGVhciBvbmx5IG9uY2UgaW4gYSBmaWxl IChvciBpbiBhIGNoYWluIG9mIGZpbGVzKQorICogaW5jbHVkaW5nIHRoaXMgaGVhZGVyIHdp dGggI2luY2x1ZGUuIFNvLCB3ZSBwcm90ZWN0IGl0IGZyb20gZHVwbGljYXRlcyBieQorICog bWVhbnMgb2YgbWFjcm8KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVm IF9ERk9SX1NUQVBMRV9URU1QTF9IX1VOSVFVRV9DT0RFXworI2RlZmluZSBfREZPUl9TVEFQ TEVfVEVNUExfSF9VTklRVUVfQ09ERV8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXNpemVfdCBp dGVtX2NudDsKKwlzaXplX3QgZGVsdGFfd2lkOworCXNpemVfdCBleGNfY250OworCXNpemVf dCBleGNfd2lkOworCXNpemVfdCBleGNfcG9zX3dpZDsKKwlzaXplX3QgbmJ5dGVzOyAvKiBz aXplIG9mIHBhY2sgaW4gYnl0ZXMgKi8KKwl1aW50OF90ICpwYWNrOworCWJvb2wgb3V0ZXJf bWVtOworfSBkZm9yX21ldGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXNpemVfdCBuYml0 czsgIC8qIHNpemUgb2YgcGFjayBpbiBiaXRzIHVzZWQgaW4gZmFjdCAqLworCXNpemVfdCBk ZWx0YV9wYWNrX25iaXRzOyAvKiBpbiBiaXRzICovCisJc2l6ZV90IGV4Y19wYWNrX25iaXRz OyAvKiBpbiBiaXRzICovCisJc2l6ZV90IGV4Y19wb3NfcGFja19uYml0czsgLyogaW4gYml0 cyAqLworCWZsb2F0IHJhdGlvOyAgLyogY29tcHJlc3Npb24gcmF0aW8gKi8KK30gZGZvcl9z dGF0c190OworCit0eXBlZGVmIGVudW0geworCURGT1JfRVhDX0RPTlRfVVNFID0gMCwKKwlE Rk9SX0VYQ19VU0UgPSAxCit9IGV4Y2FsZ190OworCisjZW5kaWYgLyogX0RGT1JfU1RBUExF X1RFTVBMX0hfVU5JUVVFX0NPREVfICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAqIEVuZCBvZiBDb2RlLCBhbGxvd2VkIHRvIGJlIGluY2x1ZGVkIG9ubHkgb25jZQorICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg KiBSRVVTQUJMRSBDT0RFCisgKgorICogVGhpcyBjb2RlIGNhbiBiZSByZXVzZWQgd2l0aCAj aW5jbHVkZSBkaXJlY3RpdmUgaW4gYSBmaWxlIGlmIERGT1JfTUFSS0VSIGlzCisgKiByZWRl ZmluZWQuIFRoaXMgYWxsb3dzIGNyZWF0aW9uIG9mIHNldmVyYWwgdHlwZXMgb2YgdmVjdG9y cyB3aXRoIGRpZmZlcmVudAorICogdHlwZXMgb2YgbWVtYmVycy4KKyAqCisgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisKKyNpZm5kZWYgREZPUl9JVEVNX1RZUEUKKyNlcnJvciAiREZP Ul9JVEVNX1RZUEUgbWFjcm8gaXMgaW5kZWZpbmVkLiIKKyNlbmRpZgorCisjaWZuZGVmIERG T1JfTUFSS0VSCisjZXJyb3IgIkRGT1JfTUFSS0VSIG1hY3JvIGlzIGluZGVmaW5lZC4iCisj ZW5kaWYKKworI2lmbmRlZiBERk9SX01BTExPQworI2Vycm9yICJERk9SX01BTExPQyBtYWNy byBpcyBpbmRlZmluZWQuIgorI2VuZGlmCisKKyNpZm5kZWYgREZPUl9GUkVFCisjZXJyb3Ig IkRGT1JfRlJFRSBtYWNybyBpcyBpbmRlZmluZWQuIgorI2VuZGlmCisKKyNkZWZpbmUgTUFL RV9IRUFERVJfTkFNRSh2LCBtKSBDcHBBc1N0cmluZzIoQ3BwQ29uY2F0Mih2LCBtKS5oKQor CisvKgorICogSGVhZGVycyBmcm9tIHZlY3QgYW5kIGJpdHBhY2sgdW5pdHMKKyAqCisgKiBF eGFtcGxlOiBkZm9yX3UxNi5jIGFuZCBkZm9yX3UxNi5oIG5lZWQgdmVjdF91MTYuaCBhbmQg Yml0cGFja191MTYuaAorICovCisjaW5jbHVkZSBNQUtFX0hFQURFUl9OQU1FKGxpYi92ZWN0 XywgREZPUl9NQVJLRVIpCisjaW5jbHVkZSBNQUtFX0hFQURFUl9OQU1FKGxpYi9iaXRwYWNr XywgREZPUl9NQVJLRVIpCisKKy8qIFR5cGVzICovCisjZGVmaW5lIGl0ZW1fdAkJICAgREZP Ul9JVEVNX1RZUEUKKyNkZWZpbmUgdmVjdF90CQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3Rf LCBERk9SX01BUktFUiwgX3QpCisjZGVmaW5lIHVuaXFzb3J0dmVjdF90IENwcENvbmNhdFRy aXBsZTIodW5pcXNvcnR2ZWN0XywgREZPUl9NQVJLRVIsIF90KQorCisvKiBGdW5jdGlvbnMg Ki8KKyNkZWZpbmUgZGZvcl9jYWxjX2RlbHRhcyBDcHBDb25jYXRUcmlwbGUyKGRmb3JfLCBE Rk9SX01BUktFUiwgX2NhbGNfZGVsdGFzKQorI2RlZmluZSBkZm9yX2NhbGNfd2lkdGgJIENw cENvbmNhdFRyaXBsZTIoZGZvcl8sIERGT1JfTUFSS0VSLCBfY2FsY193aWR0aCkKKyNkZWZp bmUgZGZvcl9wYWNrCQkgQ3BwQ29uY2F0VHJpcGxlMihkZm9yXywgREZPUl9NQVJLRVIsIF9w YWNrKQorI2RlZmluZSBkZm9yX3VucGFjawkJIENwcENvbmNhdFRyaXBsZTIoZGZvcl8sIERG T1JfTUFSS0VSLCBfdW5wYWNrKQorI2RlZmluZSBkZm9yX2FuYWx5emUJIENwcENvbmNhdFRy aXBsZTIoZGZvcl8sIERGT1JfTUFSS0VSLCBfYW5hbHl6ZSkKKyNkZWZpbmUgZGZvcl9jbGVh cl9tZXRhCSBDcHBDb25jYXRUcmlwbGUyKGRmb3JfLCBERk9SX01BUktFUiwgX2NsZWFyX21l dGEpCisjZGVmaW5lIGRmb3JfY2FsY19zdGF0cwkgQ3BwQ29uY2F0VHJpcGxlMihkZm9yXywg REZPUl9NQVJLRVIsIF9jYWxjX3N0YXRzKQorI2RlZmluZSBkZm9yX2NhbGNfbmJ5dGVzIENw cENvbmNhdFRyaXBsZTIoZGZvcl8sIERGT1JfTUFSS0VSLCBfY2FsY19uYnl0ZXMpCisKKy8q IEZ1bmN0aW9ucyBvZiB0aGUgdmVjdCB1bml0ICovCisjZGVmaW5lIHZlY3RfaW5pdAkJICAg Q3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgREZPUl9NQVJLRVIsIF9pbml0KQorI2RlZmluZSB2 ZWN0X2ZpbGwJCSAgIENwcENvbmNhdFRyaXBsZTIodmVjdF8sIERGT1JfTUFSS0VSLCBfZmls bCkKKyNkZWZpbmUgdmVjdF9yZXNlcnZlCSAgIENwcENvbmNhdFRyaXBsZTIodmVjdF8sIERG T1JfTUFSS0VSLCBfcmVzZXJ2ZSkKKyNkZWZpbmUgdmVjdF9hcHBlbmQJCSAgIENwcENvbmNh dFRyaXBsZTIodmVjdF8sIERGT1JfTUFSS0VSLCBfYXBwZW5kKQorI2RlZmluZSB2ZWN0X3By aW50CQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3RfLCBERk9SX01BUktFUiwgX3ByaW50KQor I2RlZmluZSB2ZWN0X2NvbXBhcmUJICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgREZPUl9N QVJLRVIsIF9jb21wYXJlKQorI2RlZmluZSB2ZWN0X2luc2VydAkJICAgQ3BwQ29uY2F0VHJp cGxlMih2ZWN0XywgREZPUl9NQVJLRVIsIF9pbnNlcnQpCisjZGVmaW5lIHZlY3RfY2xlYXIJ CSAgIENwcENvbmNhdFRyaXBsZTIodmVjdF8sIERGT1JfTUFSS0VSLCBfY2xlYXIpCisKKyNk ZWZpbmUgdXN2X2luc2VydAkJICAgQ3BwQ29uY2F0VHJpcGxlMih1c3ZfLCBERk9SX01BUktF UiwgX2luc2VydCkKKyNkZWZpbmUgdXN2X3NlYXJjaAkJICAgQ3BwQ29uY2F0VHJpcGxlMih1 c3ZfLCBERk9SX01BUktFUiwgX3NlYXJjaCkKKworLyogRnVuY3Rpb25zIG9mIHRoZSBiaXRw YWNrIHVuaXQgKi8KKyNkZWZpbmUgd2lkdGhfZnJvbV92YWwgQ3BwQ29uY2F0VHJpcGxlMih3 aWR0aF8sIERGT1JfTUFSS0VSLCBfZnJvbV92YWwpCisjZGVmaW5lIHdpZHRoX3RvX21hc2sg IENwcENvbmNhdFRyaXBsZTIod2lkdGhfLCBERk9SX01BUktFUiwgX3RvX21hc2spCisjZGVm aW5lIGJpdHBhY2tfcGFjayAgIENwcENvbmNhdFRyaXBsZTIoYml0cGFja18sIERGT1JfTUFS S0VSLCBfcGFjaykKKyNkZWZpbmUgYml0cGFja191bnBhY2sgQ3BwQ29uY2F0VHJpcGxlMihi aXRwYWNrXywgREZPUl9NQVJLRVIsIF91bnBhY2spCisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKyAqIEVuZCBvZiBSZXVzYWJsZSBDb2RlCisgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisKKy8qCisgKiBEb24ndCBmb3JnZXQgdG8gaW5jbHVkZSB0aGlzIGNvZGUgaW4geW91 ciBmaWxlIHRoYXQgdXNlcyB0aGlzIGhlYWRlcgorICogICAgICNpbmNsdWRlICJkZm9yX3Rl bXBsX3VuZGVmLmgiCisgKgorICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIvZGZv cl90ZW1wbF91bmRlZi5oIGIvc3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVtcGxfdW5kZWYuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDYwZDM2MTkzMDgKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIvZGZvcl90ZW1wbF91bmRlZi5oCkBA IC0wLDAgKzEsMjkgQEAKKyN1bmRlZiBpdGVtX3QKKyN1bmRlZiB2ZWN0X3QKKyN1bmRlZiB1 bmlxc29ydHZlY3RfdAorCisjdW5kZWYgZGZvcl9jYWxjX2RlbHRhcworI3VuZGVmIGRmb3Jf Y2FsY193aWR0aAorI3VuZGVmIGRmb3JfcGFjaworI3VuZGVmIGRmb3JfdW5wYWNrCisjdW5k ZWYgZGZvcl9hbmFseXplCisjdW5kZWYgZGZvcl9jYWxjX3N0YXRzCisjdW5kZWYgZGZvcl9j YWxjX25ieXRlcworCisjdW5kZWYgdmVjdF9jcmVhdGUKKyN1bmRlZiB2ZWN0X2NyZWF0ZV9m aWxsZWQKKyN1bmRlZiB2ZWN0X3Jlc2VydmUKKyN1bmRlZiB2ZWN0X2FwcGVuZAorI3VuZGVm IHZlY3RfZGVzdHJveQorI3VuZGVmIHZlY3RfcHJpbnQKKyN1bmRlZiB2ZWN0X2NvbXBhcmUK KyN1bmRlZiB2ZWN0X2luc2VydAorI3VuZGVmIHZlY3RfY2xlYXIKKworI3VuZGVmIHVzdl9p bnNlcnQKKyN1bmRlZiB1c3Zfc2VhcmNoCisKKyN1bmRlZiB3aWR0aF9mcm9tX3ZhbAorI3Vu ZGVmIHdpZHRoX3RvX21hc2sKKyN1bmRlZiBiaXRwYWNrX3BhY2sKKyN1bmRlZiBiaXRwYWNr X3VucGFjawpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGliL2Rmb3JfdTE2LmggYi9zcmMv aW5jbHVkZS9saWIvZGZvcl91MTYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNzE2Yzk5ZGJjNTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9s aWIvZGZvcl91MTYuaApAQCAtMCwwICsxLDEzIEBACisvKgorICogRmlsZTogZGZvcl91MTYu aAorICovCisKKyNpZm5kZWYgX0RGT1JfVTE2X0hfCisjZGVmaW5lIF9ERk9SX1UxNl9IXwor CisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisjaW5jbHVkZSAiZGZvcl91MTZfY29uZmlnLmgi CisjaW5jbHVkZSAiZGZvcl90ZW1wbC5oIgorLyogY2xhbmctZm9ybWF0IG9uICovCisKKyNl bmRpZiAvKiBfREZPUl9VMTZfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYi9k Zm9yX3UxNl9jb25maWcuaCBiL3NyYy9pbmNsdWRlL2xpYi9kZm9yX3UxNl9jb25maWcuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzUxOTM3YWM1MTMKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIvZGZvcl91MTZfY29uZmlnLmgKQEAg LTAsMCArMSw0IEBACisjZGVmaW5lIERGT1JfSVRFTV9UWVBFIHVpbnQxNl90CisjZGVmaW5l IERGT1JfTUFSS0VSCSAgIHUxNgorI2RlZmluZSBERk9SX01BTExPQwkgICBtYWxsb2MKKyNk ZWZpbmUgREZPUl9GUkVFCSAgIGZyZWUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2Rmb3IvLmdp dGlnbm9yZSBiL3NyYy90ZXN0L2Rmb3IvLmdpdGlnbm9yZQppbmRleCAwZDc3YTUxMjE2Yi4u NDQ3ZTk1YzBjMDkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2Rmb3IvLmdpdGlnbm9yZQorKysg Yi9zcmMvdGVzdC9kZm9yLy5naXRpZ25vcmUKQEAgLTEsMyArMSw0IEBACiB0ZXN0X2JpdHBh Y2tfdTE2Cit0ZXN0X2Rmb3JfdTE2CiB0ZXN0X3VuaXFzb3J0dmVjdF91MTYKIHRlc3RfdmVj dF91MTYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2Rmb3IvTWFrZWZpbGUgYi9zcmMvdGVzdC9k Zm9yL01ha2VmaWxlCmluZGV4IDcxN2JmY2RiNGI2Li5mNzIwNGJhYTIwNyAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvZGZvci9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9kZm9yL01ha2VmaWxl CkBAIC0yNyw3ICsyNyw4IEBAIExJQlRBUF9PQkpTID0gJCh0b3BfYnVpbGRkaXIpL3NyYy90 ZXN0L2xpYnRhcC90YXAubwogCiBURVNUUz0gdGVzdF92ZWN0X3UxNiBcCiAgICAgICAgdGVz dF91bmlxc29ydHZlY3RfdTE2IFwKLSAgICAgICB0ZXN0X2JpdHBhY2tfdTE2CisgICAgICAg dGVzdF9iaXRwYWNrX3UxNiBcCisgICAgICAgdGVzdF9kZm9yX3UxNgogCiAkKFRFU1RTOiU9 JS5vKTogQ1BQRkxBR1MgKz0gLUkkKHRvcF9idWlsZGRpcikvc3JjL3Rlc3QKIApkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvZGZvci90ZXN0X2Rmb3JfdTE2LmMgYi9zcmMvdGVzdC9kZm9yL3Rl c3RfZGZvcl91MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MzIyYjcxNGJhMzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9kZm9yL3Rlc3RfZGZv cl91MTYuYwpAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIHRlc3RfZGZvci5jCisgKi8KKwor I2luY2x1ZGUgImxpYi9iaXRwYWNrX3UxNi5oIgorI2luY2x1ZGUgImxpYi9kZm9yX3UxNi5o IgorI2luY2x1ZGUgImxpYi92ZWN0X3UxNi5oIgorI2luY2x1ZGUgImxpYnRhcC90YXAuaCIK KyNpbmNsdWRlICJ0ZXN0LmgiCisKK3ZvaWQgdGVzdF9kZWx0YV9jYWxjdWxhdGlvbihzaXpl X3QgY250LCB1aW50MTZfdCBpbkFycltdLCBzaXplX3QgY250RGVsdGEsCisJCQkJCQkJdWlu dDE2X3QgbWFyRGVsdGFzRXhwZWN0ZWRbXSwgc2l6ZV90IGNudFdpZHRoLAorCQkJCQkJCXVp bnQxNl90IG1hcldpZHRoc0V4cGVjdGVkW10sIHNpemVfdCBjbnRTdGF0LAorCQkJCQkJCXVp bnQxNl90IG1hcldpZHRoc1N0YXRFeHBlY3RlZFtdKTsKKwordm9pZCB0ZXN0X2NhbGNfZXhj ZXB0aW9ucyhzaXplX3QgbnVtRGVsdGFzLCBzaXplX3QgbnVtV2lkdGhzLAorCQkJCQkJICB1 aW50MTZfdCBtYXJXaWR0aHNbXSwgc2l6ZV90IG51bUNvdW50cywKKwkJCQkJCSAgdWludDE2 X3QgbWFyQ291bnRzW10sIHNpemVfdCBzekF3YWl0ZWRXaWR0aCwKKwkJCQkJCSAgc2l6ZV90 IGNudEF3YWl0ZWRFeGNDb3VudCk7CisKK3ZvaWQgdGVzdF9kZm9yKHNpemVfdCBjbnQsIHVp bnQxNl90IGFycltdLCBleGNhbGdfdCBpc0V4Y1VzYWdlLAorCQkJICAgc2l6ZV90IHdpZERl bHRhQXdhaXRlZCwgc2l6ZV90IGNudEV4Y0NudEF3YWl0ZWQsCisJCQkgICBzaXplX3Qgd2lk RXhjV2lkQXdhaXRlZCwgc2l6ZV90IHdpZEV4Y1Bvc1dpZEF3YWl0ZWQsCisJCQkgICBzaXpl X3QgY250Qml0c0NvdW50QXdhaXRlZCwgc2l6ZV90IGNudEJ5dGVDb3VudEF3YWl0ZWQsCisJ CQkgICBmbG9hdCBmbE1pblJhdGlvQXdhaXRlZCwgdWludDhfdCB1OGFyUGFja0F3YWl0ZWRb XSk7CisKK3ZvaWQKK3Rlc3RfZGVsdGFfY2FsY3VsYXRpb24oc2l6ZV90IGNudCwgdWludDE2 X3QgaW5BcnJbXSwgc2l6ZV90IGNudERlbHRhLAorCQkJCQkgICB1aW50MTZfdCBtYXJEZWx0 YXNFeHBlY3RlZFtdLCBzaXplX3QgY250V2lkdGgsCisJCQkJCSAgIHVpbnQxNl90IG1hcldp ZHRoc0V4cGVjdGVkW10sIHNpemVfdCBjbnRTdGF0LAorCQkJCQkgICB1aW50MTZfdCBtYXJX aWR0aHNTdGF0RXhwZWN0ZWRbXSkKK3sKKwl2ZWN0X3UxNl90IHZEZWx0YXM7CisJdmVjdF91 MTZfdCB2V2lkdGhDb3VudGVyczsKKwl1bmlxc29ydHZlY3RfdTE2X3QgdXN2RGVsdGFXaWR0 aHM7CisJdmVjdF91MTZfdCBhd2FpdGVkOworCWludCByZXM7CisKKwlwcmludGYoIi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJcHJp bnRmKCJUZXN0XG4iKTsKKwlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisKKwlwcmludGYoIiAgaW5BcnI6Iik7CisJZm9y IChzaXplX3QgaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJcHJpbnRmKCIgJXUiLCAodWludDMy X3QpaW5BcnJbaV0pOworCXByaW50ZigiXG4iKTsKKworCXZlY3RfdTE2X2luaXQoJnZEZWx0 YXMsIDAsIE5VTEwpOworCXZlY3RfdTE2X2luaXQoJnVzdkRlbHRhV2lkdGhzLCAwLCBOVUxM KTsKKwl2ZWN0X3UxNl9pbml0KCZ2V2lkdGhDb3VudGVycywgMCwgTlVMTCk7CisKKwkvKiBU ZXN0ZWQgZnVuY3Rpb24gKi8KKwlyZXMgPSBkZm9yX3UxNl9jYWxjX2RlbHRhcyhjbnQsIGlu QXJyLCAmdkRlbHRhcywgJnVzdkRlbHRhV2lkdGhzLAorCQkJCQkJCSAgICZ2V2lkdGhDb3Vu dGVycyk7CisJY21wX29rKHJlcywgIj09IiwgMCk7CisKKwlwcmludGYoIiAgRGVsdGEgZXhw ZWN0ZWQ6Iik7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbnREZWx0YTsgaSsrKQorCQlw cmludGYoIiAldSIsICh1aW50MzJfdCltYXJEZWx0YXNFeHBlY3RlZFtpXSk7CisJcHJpbnRm KCJcbiIpOworCisJcHJpbnRmKCIgIERlbHRhIGZhY3Q6ICAgICIpOworCXZlY3RfdTE2X3By aW50KCZ2RGVsdGFzKTsKKworCWNtcF9vayh2RGVsdGFzLmNudCwgIj09IiwgY250LCAiVGhl IERlbHRhIGNvdW50IGlzIE9LLiIpOworCXZlY3RfdTE2X2luaXQoJmF3YWl0ZWQsIDAsIE5V TEwpOworCXZlY3RfdTE2X2ZpbGwoJmF3YWl0ZWQsIGNudCwgbWFyRGVsdGFzRXhwZWN0ZWQp OworCWNtcF9vayh2ZWN0X3UxNl9jb21wYXJlKCZ2RGVsdGFzLCAmYXdhaXRlZCksICI9PSIs IDAsCisJCSAgICJBbGwgZGVsdGFzIGFyZSBjYWxjdWxhdGVkIHByb3Blcmx5Iik7CisJdmVj dF91MTZfY2xlYXIoJmF3YWl0ZWQpOworCisJcHJpbnRmKCIgIFdpZHRoIGV4cGVjdGVkOiIp OworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY250V2lkdGg7IGkrKykKKwkJcHJpbnRmKCIg JXUiLCAodWludDMyX3QpbWFyV2lkdGhzRXhwZWN0ZWRbaV0pOworCXByaW50ZigiXG4iKTsK KworCXByaW50ZigiICBXaWR0aCBmYWN0OiAgICAiKTsKKwl2ZWN0X3UxNl9wcmludCgmdXN2 RGVsdGFXaWR0aHMpOworCisJY21wX29rKHVzdkRlbHRhV2lkdGhzLmNudCwgIj09IiwgY250 V2lkdGgsICJUaGUgV2lkdGggY291bnQgaXMgT0suIik7CisKKwkvKiBkb24ndCByZWFsbHkg bmVlZCBpbml0aWFsaXNhdGlvbiBhZnRlciB2ZWN0X2NsZWFuIGhhdmluZyBiZWVuIGRvbmUK KwkgKiBhYm92ZSovCisJLyogdmVjdF91MTZfaW5pdCgmYXdhaXRlZCwgMCwgTlVMTCk7ICov CisKKwl2ZWN0X3UxNl9maWxsKCZhd2FpdGVkLCBjbnRXaWR0aCwgbWFyV2lkdGhzRXhwZWN0 ZWQpOworCWNtcF9vayh2ZWN0X3UxNl9jb21wYXJlKCZ1c3ZEZWx0YVdpZHRocywgJmF3YWl0 ZWQpLCAiPT0iLCAwLAorCQkgICAiQWxsIGRlbHRhIHdpZHRocyBpcyBPSy4iKTsKKwl2ZWN0 X3UxNl9jbGVhcigmYXdhaXRlZCk7CisKKwlwcmludGYoIiAgU3RhdGlzdGljcyBleHBlY3Rl ZDoiKTsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNudFN0YXQ7IGkrKykKKwkJcHJpbnRm KCIgJXUiLCAodWludDMyX3QpbWFyV2lkdGhzU3RhdEV4cGVjdGVkW2ldKTsKKwlwcmludGYo IlxuIik7CisKKwlwcmludGYoIiAgU3RhdGlzdGljcyBmYWN0OiAgICAiKTsKKwl2ZWN0X3Ux Nl9wcmludCgmdldpZHRoQ291bnRlcnMpOworCisJY21wX29rKAorCQl1c3ZEZWx0YVdpZHRo cy5jbnQsICI9PSIsIHZXaWR0aENvdW50ZXJzLmNudCwKKwkJIlRoZSBjb3VudCBvZiBzdGF0 aXN0aWNzIG9mIHdpZHRocyBpcyBlcXVhbCB0byB0aGUgY291bnQgb2Ygd2lkdGhzLiIpOwor CisJLyogZG9uJ3QgcmVhbGx5IG5lZWQgaW5pdGlhbGlzYXRpb24gYWZ0ZXIgdmVjdF9jbGVh biBoYXZpbmcgYmVlbiBkb25lCisJICogYWJvdmUqLworCXZlY3RfdTE2X2ZpbGwoJmF3YWl0 ZWQsIGNudFN0YXQsIG1hcldpZHRoc1N0YXRFeHBlY3RlZCk7CisJY21wX29rKHZlY3RfdTE2 X2NvbXBhcmUoJnZXaWR0aENvdW50ZXJzLCAmYXdhaXRlZCksICI9PSIsIDAsCisJCSAgICJX aWR0aCBzdGF0aXN0aWNzIGlzIE9LLiIpOworCXZlY3RfdTE2X2NsZWFyKCZhd2FpdGVkKTsK KworCXZlY3RfdTE2X2NsZWFyKCZ2RGVsdGFzKTsKKwl2ZWN0X3UxNl9jbGVhcigmdXN2RGVs dGFXaWR0aHMpOworCXZlY3RfdTE2X2NsZWFyKCZ2V2lkdGhDb3VudGVycyk7Cit9CisKK3Zv aWQKK3Rlc3RfY2FsY19leGNlcHRpb25zKHNpemVfdCBudW1EZWx0YXMsIHNpemVfdCBudW1X aWR0aHMsIHVpbnQxNl90IG1hcldpZHRoc1tdLAorCQkJCQkgc2l6ZV90IG51bUNvdW50cywg dWludDE2X3QgbWFyQ291bnRzW10sCisJCQkJCSBzaXplX3Qgc3pBd2FpdGVkV2lkdGgsIHNp emVfdCBjbnRBd2FpdGVkRXhjQ291bnQpCit7CisJaW50IHJlczsKKwl2ZWN0X3UxNl90IHZX aWR0aENvdW50ZXJzOworCXVuaXFzb3J0dmVjdF91MTZfdCB1c3ZEZWx0YVdpZHRoczsKKwlz aXplX3Qgd2lkdGgsIGNudEV4Y2VwdGlvbnM7CisKKwl2ZWN0X3UxNl9pbml0KCZ1c3ZEZWx0 YVdpZHRocywgMCwgTlVMTCk7CisJdmVjdF91MTZfZmlsbCgmdXN2RGVsdGFXaWR0aHMsIG51 bVdpZHRocywgbWFyV2lkdGhzKTsKKworCXZlY3RfdTE2X2luaXQoJnZXaWR0aENvdW50ZXJz LCAwLCBOVUxMKTsKKwl2ZWN0X3UxNl9maWxsKCZ2V2lkdGhDb3VudGVycywgbnVtQ291bnRz LCBtYXJDb3VudHMpOworCisJcmVzID0gZGZvcl91MTZfY2FsY193aWR0aChudW1EZWx0YXMs ICZ1c3ZEZWx0YVdpZHRocywgJnZXaWR0aENvdW50ZXJzLAorCQkJCQkJCSAgJndpZHRoLCAm Y250RXhjZXB0aW9ucyk7CisJY21wX29rKHJlcywgIj09IiwgMCk7CisJY21wX29rKHdpZHRo LCAiPT0iLCBzekF3YWl0ZWRXaWR0aCwgIldpZHRoIGlzIE9LLiIpOworCWNtcF9vayhjbnRF eGNlcHRpb25zLCAiPT0iLCBjbnRBd2FpdGVkRXhjQ291bnQsICJFeGNlcHRpb25zIG51bSBp cyBPSyIpOworCisJdmVjdF91MTZfY2xlYXIoJnVzdkRlbHRhV2lkdGhzKTsKKwl2ZWN0X3Ux Nl9jbGVhcigmdldpZHRoQ291bnRlcnMpOworfQorCit2b2lkCit0ZXN0X2Rmb3Ioc2l6ZV90 IGNudCwgdWludDE2X3QgYXJyW10sIGV4Y2FsZ190IGlzRXhjVXNhZ2UsCisJCSAgc2l6ZV90 IHdpZERlbHRhV2lkdGhBd2FpdGVkLCBzaXplX3QgY250RXhjQ250QXdhaXRlZCwKKwkJICBz aXplX3Qgd2lkRXhjV2lkQXdhaXRlZCwgc2l6ZV90IHdpZEV4Y1Bvc1dpZEF3YWl0ZWQsCisJ CSAgc2l6ZV90IGNudEJpdHNDb3VudEF3YWl0ZWQsIHNpemVfdCBjbnRCeXRlQ291bnRBd2Fp dGVkLAorCQkgIGZsb2F0IGZsTWluUmF0aW9Bd2FpdGVkLCB1aW50OF90IHU4YXJQYWNrQXdh aXRlZFtdKQoreworCWludCByZXM7CisJZGZvcl9tZXRhX3QgZGZvcjsKKwlkZm9yX3N0YXRz X3Qgc3RhdHM7CisJdW5pcXNvcnR2ZWN0X3UxNl90IGV4dHJhY3RlZDsKKworCXJlcyA9IGRm b3JfdTE2X3BhY2soY250LCBhcnIsIGlzRXhjVXNhZ2UsICZkZm9yLCAwLCBOVUxMKTsKKwlj bXBfb2socmVzLCAiPT0iLCAwLCAiZGZvcl9wYWNrIGZ1bmMgaGFzIHByb2Nlc3NlZCBPSy4i KTsKKwljbXBfb2soZGZvci5pdGVtX2NudCwgIj09IiwgY250LCAiQ291bnQgb2YgZGVsdGFz IGlzIE9LLiIpOworCWNtcF9vayhkZm9yLmRlbHRhX3dpZCwgIj09Iiwgd2lkRGVsdGFXaWR0 aEF3YWl0ZWQsICJEZWx0YSB3aWR0aCBpcyBPSy4iKTsKKwljbXBfb2soZGZvci5leGNfY250 LCAiPT0iLCBjbnRFeGNDbnRBd2FpdGVkLCAiRXhjZXB0aW9uIGNvdW50IGlzIE9LLiIpOwor CWNtcF9vayhkZm9yLmV4Y193aWQsICI9PSIsIHdpZEV4Y1dpZEF3YWl0ZWQsICJFeGNlcHRp b24gd2lkdGggaXMgT0suIik7CisJY21wX29rKGRmb3IuZXhjX3Bvc193aWQsICI9PSIsIHdp ZEV4Y1Bvc1dpZEF3YWl0ZWQsCisJCSAgICJFeGNlcHRpb24gcG9zaXRpb24gd2lkdGggaXMg T0suIik7CisJb2soZGZvci5wYWNrICE9IE5VTEwsICJQYWNrIGlzIGNyZWF0ZWQgKG5vdCBO VUxMKS4iKTsKKworCXN0YXRzID0gZGZvcl91MTZfY2FsY19zdGF0cyhkZm9yKTsKKwljbXBf b2soc3RhdHMubmJpdHMsICI9PSIsIGNudEJpdHNDb3VudEF3YWl0ZWQsICJCaXRzIGNvdW50 IGlzIE9LLiIpOworCWNtcF9vayhkZm9yLm5ieXRlcywgIj09IiwgY250Qnl0ZUNvdW50QXdh aXRlZCwgIkJ5dGVzIGNvdW50IGlzIE9LLiIpOworCW9rKHN0YXRzLnJhdGlvID4gZmxNaW5S YXRpb0F3YWl0ZWQsICJDb21wcmVzc2lvbiByYXRpbyBpcyBPSy4iKTsKKworCWlmICh1OGFy UGFja0F3YWl0ZWQgIT0gTlVMTCkKKwkJb2soMCA9PSBtZW1jbXAoZGZvci5wYWNrLCB1OGFy UGFja0F3YWl0ZWQsIGNudEJ5dGVDb3VudEF3YWl0ZWQpLAorCQkgICAiUGFjayBjb250ZW50 IGlzIE9LLiIpOworCWVsc2UKKwkJb2soMCA9PSAwLCAiUGFjayBjb250ZW50IGNoZWNrIGlz IHNraXBwZWQuIik7CisKKwl0ZXN0X3ByaW50X3UxNl9hcnJheShjbnQsICh1aW50MTZfdCAq KWFyciwgIlxuXG5PcmlnaW5hbCBpbnRlZ2VyIGFycmF5Iik7CisJdGVzdF9wcmludF91OF9h cnJheShkZm9yLm5ieXRlcywgZGZvci5wYWNrLCAiQ29tcHJlc3NlZCBpbnRlZ2VyIGFycmF5 Iik7CisJcHJpbnRmKCJDb21wcmVzc2lvbiByYXRpbzolZlxuXG4iLCBzdGF0cy5yYXRpbyk7 CisKKwl2ZWN0X3UxNl9pbml0KCZleHRyYWN0ZWQsIDAsIE5VTEwpOworCisJZGZvcl91MTZf dW5wYWNrKCZkZm9yLCAmZXh0cmFjdGVkLCAwLCBOVUxMKTsKKwljbXBfb2soZXh0cmFjdGVk LmNudCwgIj09IiwgY250LCAiRXh0cmFjdGVkIGNvdW50IGlzIE9LIik7CisJY21wX29rKDAs ICI9PSIsIG1lbWNtcChhcnIsIGV4dHJhY3RlZC5tLCBjbnQpLAorCQkgICAiRXh0cmFjdGVk IGFycmF5IGlzIGVxdWFsIHRvIG9yaWdpbmFsIik7CisKKwlmcmVlKGRmb3IucGFjayk7CisJ dmVjdF91MTZfY2xlYXIoJmV4dHJhY3RlZCk7Cit9CisKK2ludAorbWFpbih2b2lkKQorewor CXBsYW4oMTMwKTsKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT1cbiIpOworCXByaW50ZigiVGVzdCBERUxUQSBDQUxDVUxBVElPTlxuIik7CisJ eworCQl0ZXN0X2RlbHRhX2NhbGN1bGF0aW9uKAorCQkJMTAsICh1aW50MTZfdFtdKSB7IDAs IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgfSwgLyogaW5BcnIgKi8KKwkJCTEwLAorCQkJ KHVpbnQxNl90W10pIHsgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKwkJCQkJCSAgIDEg fSwJICAgLyogbWFyRGVsdGFzRXhwZWN0ZWQqLworCQkJMSwgKHVpbnQxNl90W10pIHsgMSB9 LCAvKiBtYXJXaWR0aHNFeHBlY3RlZCAqLworCQkJMSwgKHVpbnQxNl90W10pIHsgMTAgfSAv KiBtYXJXaWR0aHNTdGF0RXhwZWN0ZWQgKi8pOworCisJCXRlc3RfZGVsdGFfY2FsY3VsYXRp b24oCisJCQkxMCwgKHVpbnQxNl90W10pIHsgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwg MTcsIDE5IH0sIC8qIGluQXJyICovCisJCQkxMCwKKwkJCSh1aW50MTZfdFtdKSB7IDEsIDIs IDIsIDIsIDIsIDIsIDIsIDIsIDIsCisJCQkJCQkgICAyIH0sCQkgIC8qIG1hckRlbHRhc0V4 cGVjdGVkKi8KKwkJCTIsICh1aW50MTZfdFtdKSB7IDEsIDIgfSwgLyogbWFyV2lkdGhzRXhw ZWN0ZWQgKi8KKwkJCTIsICh1aW50MTZfdFtdKSB7IDEsIDkgfSAvKiBtYXJXaWR0aHNTdGF0 RXhwZWN0ZWQgKi8pOworCisJCXRlc3RfZGVsdGFfY2FsY3VsYXRpb24oCisJCQkxNCwKKwkJ CSh1aW50MTZfdFtdKSB7IDEwMCwgMjAwLCAzMDAsIDQwMCwgNDAxLCA0MDIsIDQwMywgNDA0 LCA0MDYsIDQwOCwKKwkJCQkJCSAgIDQxMCwgNDEyLCA0MTQsIDQxNiB9LCAvKiBpbkFyciAq LworCQkJMTQsCisJCQkodWludDE2X3RbXSkgeyAxMDAsIDEwMCwgMTAwLCAxMDAsIDEsIDEs IDEsIDEsIDIsIDIsIDIsIDIsIDIsCisJCQkJCQkgICAyIH0sCQkJIC8qIG1hckRlbHRhc0V4 cGVjdGVkKi8KKwkJCTMsICh1aW50MTZfdFtdKSB7IDEsIDIsIDcgfSwgLyogbWFyV2lkdGhz RXhwZWN0ZWQgKi8KKwkJCTMsICh1aW50MTZfdFtdKSB7IDQsIDYsIDQgfSAvKiBtYXJXaWR0 aHNTdGF0RXhwZWN0ZWQgKi8pOworCisJCXRlc3RfZGVsdGFfY2FsY3VsYXRpb24oMSwgKHVp bnQxNl90W10pIHsgMTIzIH0sIC8qIGluQXJyICovCisJCQkJCQkJICAgMSwgKHVpbnQxNl90 W10pIHsgMTIzIH0sIC8qIG1hckRlbHRhc0V4cGVjdGVkKi8KKwkJCQkJCQkgICAxLCAodWlu dDE2X3RbXSkgeyA3IH0sCS8qIG1hcldpZHRoc0V4cGVjdGVkICovCisJCQkJCQkJICAgMSwK KwkJCQkJCQkgICAodWludDE2X3RbXSkgeyAxIH0gLyogbWFyV2lkdGhzU3RhdEV4cGVjdGVk ICovKTsKKworCQl0ZXN0X2RlbHRhX2NhbGN1bGF0aW9uKDAsIE5VTEwsIC8qIGluQXJyICov CisJCQkJCQkJICAgMCwgTlVMTCwgLyogbWFyRGVsdGFzRXhwZWN0ZWQqLworCQkJCQkJCSAg IDAsIE5VTEwsIC8qIG1hcldpZHRoc0V4cGVjdGVkICovCisJCQkJCQkJICAgMCwgTlVMTCAv KiBtYXJXaWR0aHNTdGF0RXhwZWN0ZWQgKi8pOworCX0KKwlwcmludGYoIlRlc3QgREVMVEEg Q0FMQ1VMQVRJT04gUEFTU0VEXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT1cblxuIik7CisKKwlwcmludGYoIj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ZigiVGVzdCBFWENFUFRJ T05TIENBTENVTEFUSU9OXG4iKTsKKwl7CisJCWludCByZXM7CisJCXZlY3RfdTE2X3Qgdldp ZHRoQ291bnRlcnM7CisJCXVuaXFzb3J0dmVjdF91MTZfdCB1c3ZEZWx0YVdpZHRoczsKKwkJ c2l6ZV90IHdpZHRoLCBjbnRFeGNlcHRpb25zOworCisJCXZlY3RfdTE2X2luaXQoJnVzdkRl bHRhV2lkdGhzLCAwLCBOVUxMKTsKKwkJdmVjdF91MTZfZmlsbCgmdXN2RGVsdGFXaWR0aHMs IDMsICh1aW50MTZfdFtdKSB7IDEsIDIsIDcgfSk7CisKKwkJdmVjdF91MTZfaW5pdCgmdldp ZHRoQ291bnRlcnMsIDAsIE5VTEwpOworCQl2ZWN0X3UxNl9maWxsKCZ2V2lkdGhDb3VudGVy cywgMywgKHVpbnQxNl90W10pIHsgNCwgNiwgNCB9KTsgLy8gNCs2KzQ9MTQKKworCQlyZXMg PSBkZm9yX3UxNl9jYWxjX3dpZHRoKDE0LCAmdXN2RGVsdGFXaWR0aHMsICZ2V2lkdGhDb3Vu dGVycywgJndpZHRoLAorCQkJCQkJCQkgICZjbnRFeGNlcHRpb25zKTsKKwkJY21wX29rKHJl cywgIj09IiwgMCk7CisJCWNtcF9vayh3aWR0aCwgIj09IiwgNywgIldpZHRocz17MSwyLDd9 LCBDb3VudGVycz17NCw2LDR9ID0+IHdpZHRoPTciKTsKKwkJY21wX29rKGNudEV4Y2VwdGlv bnMsICI9PSIsIDAsCisJCQkgICAiV2lkdGhzPXsxLDIsN30sIENvdW50ZXJzPXs0LDYsNH0g PT4gZXhjcHRpb25zX251bT0wIik7CisJfQorCisJdGVzdF9jYWxjX2V4Y2VwdGlvbnMoMTQs IDMsICh1aW50MTZfdFtdKSB7IDEsIDIsIDcgfSwgLyogd2lkdGhzIG9mIGRlbHRhcyovCisJ CQkJCQkgMywgKHVpbnQxNl90W10pIHsgNCwgNiwgNCB9LAkgIC8qIHN0YXRpc3RpY3MgKi8K KwkJCQkJCSA3LAkgLyogd2lkdGggb2Ygc2hvcnQgZGVsdGFzICovCisJCQkJCQkgMCk7IC8q IG51bWJlciBvZiBleGNlcHRpb25zKi8KKworCXRlc3RfY2FsY19leGNlcHRpb25zKDE0LCAz LCAodWludDE2X3RbXSkgeyAxLCAyLCA3IH0sIC8qIHdpZHRocyAqLworCQkJCQkJIDMsICh1 aW50MTZfdFtdKSB7IDYsIDcsIDEgfSwJICAvKiBzdGF0ICovCisJCQkJCQkgMiwgMSk7IC8q IHNob3J0IGRlbHRhcyB3aWR0aCwgZXhjZXB0aW9ucyBjb3VudCovCisKKwl0ZXN0X2NhbGNf ZXhjZXB0aW9ucyg0MCwgMywgKHVpbnQxNl90W10pIHsgNSwgNiwgMTIgfSwgLyogd2lkdGhz ICovCisJCQkJCQkgMywgKHVpbnQxNl90W10pIHsgMzYsIDIsIDIgfSwJICAgLyogc3RhdCAq LworCQkJCQkJIDUsIDQpOyAvKiBzaG9ydCBkZWx0YXMgd2lkdGgsIGV4Y2VwdGlvbnMgY291 bnQqLworCisJdGVzdF9jYWxjX2V4Y2VwdGlvbnMoNDAsIDQsICh1aW50MTZfdFtdKSB7IDUs IDYsIDcsIDEyIH0sIDQsCisJCQkJCQkgKHVpbnQxNl90W10pIHsgMzYsIDEsIDEsIDIgfSwg NSwgNCk7CisKKwl0ZXN0X2NhbGNfZXhjZXB0aW9ucyg0MCwgNCwgKHVpbnQxNl90W10pIHsg NSwgNiwgNywgMTIgfSwgNCwKKwkJCQkJCSAodWludDE2X3RbXSkgeyAzNSwgMSwgMiwgMiB9 LCA2LCA0KTsKKworCXRlc3RfY2FsY19leGNlcHRpb25zKDQwLCA0LCAodWludDE2X3RbXSkg eyA1LCA2LCA3LCAxMiB9LCA0LAorCQkJCQkJICh1aW50MTZfdFtdKSB7IDM0LCAxLCAyLCAz IH0sIDcsIDMpOworCisJdGVzdF9jYWxjX2V4Y2VwdGlvbnMoNDAsIDQsICh1aW50MTZfdFtd KSB7IDUsIDYsIDcsIDEyIH0sIDQsCisJCQkJCQkgKHVpbnQxNl90W10pIHsgMSwgMzQsIDIs IDMgfSwgNywgMyk7CisKKwl0ZXN0X2NhbGNfZXhjZXB0aW9ucyg0MCwgNCwgKHVpbnQxNl90 W10pIHsgNSwgNiwgNywgMTIgfSwgNCwKKwkJCQkJCSAodWludDE2X3RbXSkgeyAxLCAzMywg MiwgNCB9LCA3LCA0KTsKKworCXRlc3RfY2FsY19leGNlcHRpb25zKDQwLCA0LCAodWludDE2 X3RbXSkgeyA1LCA2LCA3LCAxMiB9LCA0LAorCQkJCQkJICh1aW50MTZfdFtdKSB7IDEsIDMy LCAyLCA1IH0sIDEyLCAwKTsKKworCXByaW50ZigiVGVzdCBFWENFUFRJT05TIENBTENVTEFU SU9OIFBBU1NFRFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09XG5cbiIpOworCisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgREVMVEEgRlJBTUUgT0Yg UkVGRVJFTkNFUyBQQUNLSU5HXG4iKTsKKworCXRlc3RfZGZvcigxNiwKKwkJCSAgKHVpbnQx Nl90W10pIHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMs IDE0LAorCQkJCQkJCSAxNSB9LCAvKiBjbnQsIGFycmF5ICovCisJCQkgIERGT1JfRVhDX0RP TlRfVVNFLCAgIC8qIGZsYWcgb24gdXNlIG9mIGV4Y2VwdGlvbnMgKi8KKwkJCSAgMSwJCQkJ ICAgLyogYXdhaXRlZCB3aWR0aCBvZiBzaG9ydCBkZWx0YXMgKi8KKwkJCSAgMCwJCQkJICAg LyogYXdhaXRlZCBjb3VudCBvZiBleGNlcHRpb25zICovCisJCQkgIDAsCQkJCSAgIC8qIGF3 YWl0ZWQgZXhjZXB0aW9uIHdpZHRoKi8KKwkJCSAgMCwJCQkJICAgLyogYXdhaXRlZCBleGNl cHRpb24gcG9zaXRpb24gd2lkdGgqLworCQkJICAxNiwJCQkJICAgLyogYXdhaXRlZCBiaXRz IGNvdW50ICovCisJCQkgIDIsCQkJCSAgIC8qIGNudEJ5dGVDb3VudEF3YWl0ZWQgKi8KKwkJ CSAgMTUuOTksIC8qIGF3YWl0ZWQgcmF0aW8gbWluIHZhbHVlIChyYXRpbyA+PSAxNS45OSkg Ki8KKwkJCSAgKHVpbnQ4X3RbXSkgeyAweEZFLCAweEZGIH0pOworCisJdGVzdF9kZm9yKDE2 LAorCQkJICAodWludDE2X3RbXSkgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx MCwgMTEsIDEyLCAxMywgMTQsCisJCQkJCQkJIDE1IH0sIC8qIGNudCwgYXJyYXkgKi8KKwkJ CSAgREZPUl9FWENfVVNFLCAvKiBmbGFnIG9uIHVzZSBvZiBleGNlcHRpb25zICovCisJCQkg IDEsCQkJLyogYXdhaXRlZCB3aWR0aCBvZiBzaG9ydCBkZWx0YXMgKi8KKwkJCSAgMCwJCQkv KiBhd2FpdGVkIGNvdW50IG9mIGV4Y2VwdGlvbnMgKi8KKwkJCSAgMCwJCQkvKiBhd2FpdGVk IGV4Y2VwdGlvbiB3aWR0aCovCisJCQkgIDAsCQkJLyogYXdhaXRlZCBleGNlcHRpb24gcG9z aXRpb24gd2lkdGgqLworCQkJICAxNiwJCQkvKiBhd2FpdGVkIGJpdHMgY291bnQgKi8KKwkJ CSAgMiwJCQkvKiBjbnRCeXRlQ291bnRBd2FpdGVkICovCisJCQkgIDE1Ljk5LAkJLyogYXdh aXRlZCByYXRpbyBtaW4gdmFsdWUgKHJhdGlvID49IDE1Ljk5KSAqLworCQkJICAodWludDhf dFtdKSB7IDB4RkUsIDB4RkYgfSk7CisKKwl0ZXN0X2Rmb3IoMTYsCisJCQkgICh1aW50MTZf dFtdKSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAx NCwKKwkJCQkJCQkgMTAyMyB9LCAvKiBjbnQsIGFycmF5ICovCisJCQkgIERGT1JfRVhDX0RP TlRfVVNFLAkgLyogZmxhZyBvbiB1c2Ugb2YgZXhjZXB0aW9ucyAqLworCQkJICAxMCwJCQkJ CSAvKiBhd2FpdGVkIHdpZHRoIG9mIHNob3J0IGRlbHRhcyAqLworCQkJICAwLAkJCQkJIC8q IGF3YWl0ZWQgY291bnQgb2YgZXhjZXB0aW9ucyAqLworCQkJICAwLAkJCQkJIC8qIGF3YWl0 ZWQgZXhjZXB0aW9uIHdpZHRoKi8KKwkJCSAgMCwJCQkJCSAvKiBhd2FpdGVkIGV4Y2VwdGlv biBwb3NpdGlvbiB3aWR0aCovCisJCQkgIDEwICogMTYsCQkJCSAvKiBhd2FpdGVkIGJpdHMg Y291bnQgKi8KKwkJCSAgMjAsCQkJCQkgLyogYXdhaXRlZCBieXRlcyBjb3VudCAqLworCQkJ ICAxLjUsCQkJCQkgLyogYXdhaXRlZCByYXRpbyBtaW4gdmFsdWUgKi8KKwkJCSAgKHVpbnQ4 X3RbXSkgeyAweDAwLCAweDA0LCAweDEwLCAweDQwLCAweDAwLCAweDAxLCAweDA0LAorCQkJ CQkJCTB4MTAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MTAsIDB4NDAsCisJCQkJCQkJ MHgwMCwgMHgwMSwgMHgwNCwgMHgxMCwgMHg0MCwgMHhGQyB9KTsKKworCXRlc3RfZGZvcigx NiwKKwkJCSAgKHVpbnQxNl90W10pIHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwg MTAsIDExLCAxMiwgMTMsIDE0LAorCQkJCQkJCSAxMDIzIH0sIC8qIGNudCwgYXJyYXkgKi8K KwkJCSAgREZPUl9FWENfVVNFLAkJCSAvKiBmbGFnIG9uIHVzZSBvZiBleGNlcHRpb25zICov CisJCQkgIDEsCQkJCQkgLyogYXdhaXRlZCB3aWR0aCBvZiBzaG9ydCBkZWx0YXMgKi8KKwkJ CSAgMSwJCQkJCSAvKiBhd2FpdGVkIGNvdW50IG9mIGV4Y2VwdGlvbnMgKi8KKwkJCSAgOSwJ CQkJCSAvKiBhd2FpdGVkIGV4Y2VwdGlvbiB3aWR0aCovCisJCQkgIDQsCQkJCQkgLyogYXdh aXRlZCBleGNlcHRpb24gcG9zaXRpb24gd2lkdGgqLworCQkJICAxNiAqIDEgKyA5ICsgNCwJ CSAvKiBhd2FpdGVkIGJpdHMgY291bnQgKi8KKwkJCSAgNCwJCQkJCSAvKiBhd2FpdGVkIGJ5 dGVzIGNvdW50ICovCisJCQkgIDcuOTksCQkJCQkgLyogYXdhaXRlZCByYXRpbyBtaW4gdmFs dWUgKi8KKwkJCSAgKHVpbnQ4X3RbXSkgeyAweEZFLCAweEZGLCAweEY4LCAweDFGIH0pOwor CisJdGVzdF9kZm9yKDMwLCAvKiBjbnQgKi8KKwkJCQkJICAodWludDE2X3RbXSkgeyAwLCAx LCAyLCAzLCA0LAorCQkJCQkJCQkJIDUsIDYsIDcsIDgsIDksCisgIC8qIGRlbHRhPTIsIHBv cz0xMCwgZGVsdGFwb3M9MTAgKi8gMTEsIDEyLCAxMywgMTQsIDE1LAorCQkJCQkJCQkJIDE2 LCAxNywgMTgsIDE5LCAyMCwKKwkJCQkJCQkJCSAyMSwgMjIsIDIzLCAyNCwgMjUsCisgIC8q IGRlbHRhPTMsIHBvcz0yNSwgZGVsdGFwb3M9MTUgKi8gMjgsIDI5LCAzMCwgMzEsCisgIC8q IGRlbHRhPTMsIHBvcz0yOSwgZGVsdGFwb3M9NCAqLwkgMzQgfSwgIAkJCQkvKiBhcnJheSAq LworCQkJICBERk9SX0VYQ19VU0UsCQkJICAvKiBmbGFnIG9uIHVzZSBvZiBleGNlcHRpb25z ICovCisJCQkgIDEsCQkJCQkgIC8qIGF3YWl0ZWQgd2lkdGggb2Ygc2hvcnQgZGVsdGFzICov CisJCQkgIDMsCQkJCQkgIC8qIGF3YWl0ZWQgY291bnQgb2YgZXhjZXB0aW9ucyAqLworCQkJ ICAxLAkJCQkJICAvKiBhd2FpdGVkIGV4Y2VwdGlvbiB3aWR0aCovCisJCQkgIDQsCQkJCQkg IC8qIGF3YWl0ZWQgZXhjZXB0aW9uIHBvc2l0aW9uIHdpZHRoKi8KKwkJCSAgMzAgKiAxICsg MyAqIDEgKyAzICogNCwgLyogYXdhaXRlZCBiaXRzIGNvdW50ICovCisJCQkgIDYsCQkJCQkg IC8qIGF3YWl0ZWQgYnl0ZXMgY291bnQgKi8KKwkJCSAgOS45OSwJCQkJCSAgLyogYXdhaXRl ZCByYXRpbyBtaW4gdmFsdWUgKi8KKwkJCSAgKHVpbnQ4X3RbXSkgeyAweEZFLCAweEZCLCAw eEZGLCAweEZGLCAweEY1LCAweDA5IH0pOworCisJcHJpbnRmKCJUZXN0IERFTFRBIEZSQU1F IE9GIFJFRkVSRU5DRVMgUEFDS0lORyBQQVNTRURcbiIpOworCXByaW50ZigiPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iKTsKKworCWRvbmVfdGVzdGlu ZygpOworfQotLSAKMi41My4wCgo= --------------lJZjohOnP3WxZVzV3LqV3g0v Content-Type: text/x-patch; charset=UTF-8; name="v01-0003-Use-Delta-Frame-of-Reference-DFoR-to-compress-pr.patch" Content-Disposition: attachment; filename*0="v01-0003-Use-Delta-Frame-of-Reference-DFoR-to-compress-pr.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4NTM2NWMzM2FhMGJkOTcwM2E1Mzc2ZmI5NGQxYWYxN2VhNWFjM2I2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IEZyaSwgNiBNYXIgMjAyNiAxNzozNTo0MCArMDgwMApTdWJqZWN0OiBbUEFU Q0ggdjAxIDMvM10gVXNlIERlbHRhIEZyYW1lIG9mIFJlZmVyZW5jZSAoREZvUikgdG8gY29t cHJlc3MKIHBydW5lL2ZyZWV6ZSByZWNvcmRzLgoKQSBwcnVuZS9mcmVlemUgcmVjb3JkIGNv bnRhaW5zIGZvdXIgc2VxdWVuY2VzIG9mIGludGVnZXJzIHJlcHJlc2VudGluZwpmcm96ZW4s IHJlZGlyZWN0ZWQsIHVudXNlZCwgYW5kIGRlYWQgdHVwbGVzLiBVc2luZyBERm9SIGFsZ29y aXRobXMsIHRoZQpgdW51c2VkYCBhbmQgYGRlYWRgIHNlcXVlbmNlcyBhcmUgbm93IGNvbXBy ZXNzZWQuIFRoZSBgZnJvemVuYAphbmQgYHJlZGlyZWN0ZWRgIHNlcXVlbmNlcyBjYW5ub3Qg YmUgY29tcHJlc3NlZCBiZWNhdXNlIHRoZSBvcmRlciBvZgp0aGVpciBlbGVtZW50cyBpcyBz aWduaWZpY2FudCwgYW5kIERGb1IgZG9lcyBub3Qgc3VwcG9ydCB1bnNvcnRlZApzZXF1ZW5j ZXMgeWV0LiBUaGUgdGhlb3JldGljYWwgY29tcHJlc3Npb24gcmF0aW8gZm9yIGRmb3JfdTE2 IGNhbiByZWFjaAp1cCB0byAxNi4KClRoZSBuZXcgR1VDIHdhbF9wcnVuZV9kZm9yX2NvbXBy ZXNzaW9uIGNvbnRyb2xzIChlbmFibGVzIG9yCmRpc2FibGVzKSBjb21wcmVzc2lvbiBmb3Ig cHJ1bmUvZnJlZXplIHJlY29yZHMuCgpBbiBpbnRlZ3JhbCBUQVAgdGVzdCwgMDUyX3BydW5l X2Rmb3JfY29tcHJlc3Npb24ucGwsIGhhcyBiZWVuCmltcGxlbWVudGVkLiBJdCBkZW1vbnN0 cmF0ZXMgYW4gYXZlcmFnZSBjb21wcmVzc2lvbiByYXRpbyBvZiBhdCBsZWFzdCA1CndoZW4g YW5hbHl6aW5nIHBydW5lL2ZyZWV6ZSByZWNvcmRzIGluIHByYWN0aWNlLgoKQXV0aG9yOiBF dmdlbnkgVm9yb3BhZXYgPGV2Z2VueS52b3JvcGFldkB0YW50b3JsYWJzLmNvbT4gPGV2b3Jv cEBnbWFpbC5jb20+Ci0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3hsb2cu YyAgICAgICAgIHwgIDEyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9wcnVuZWhlYXAu YyAgICAgICAgICAgfCAxMzQgKysrKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MvTWFrZWZpbGUgICAgICAgICAgfCAgIDEgKwogLi4uL2FjY2Vzcy9ybWdyZGVz Yy9oZWFwYW1feGxvZ19kZm9yLmMgICAgICAgIHwgMTA5ICsrKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2hlYXBkZXNjLmMgICAgICAgIHwgIDQ5ICsrKystLQog c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA3ICsK IHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMSAr CiBzcmMvYmluL3BnX3dhbGR1bXAvLmdpdGlnbm9yZSAgICAgICAgICAgICAgICAgfCAgIDkg Kwogc3JjL2Jpbi9wZ193YWxkdW1wL01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwgIDI2 ICsrLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nLmggICAgICAgICAgICAgIHwg ICA4ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtX3hsb2dfZGZvci5oICAgICAgICAg fCAxMzcgKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvZGZvci9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAyICsKIC4uLi9yZWNvdmVyeS90LzA1Ml9wcnVuZV9kZm9y X2NvbXByZXNzaW9uLnBsICB8IDE1NSArKysrKysrKysrKysrKysrKysKIDEzIGZpbGVzIGNo YW5nZWQsIDYxNiBpbnNlcnRpb25zKCspLCAzNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvaGVhcGFtX3hsb2dfZGZvci5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nX2Rm b3IuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlY292ZXJ5L3QvMDUyX3BydW5l X2Rmb3JfY29tcHJlc3Npb24ucGwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1feGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3hs b2cuYwppbmRleCA2ZDM5YTVmZmY3Yy4uYmJlOWQ0NzFmNGUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX3hsb2cuYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAi YWNjZXNzL2J1Zm1hc2suaCIKICNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCisjaW5jbHVk ZSAiYWNjZXNzL2hlYXBhbV94bG9nX2Rmb3IuaCIKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJp bGl0eW1hcC5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3hsb2d1dGlscy5oIgpAQCAtMTA1LDExICsxMDYsMjAgQEAgaGVhcF94bG9nX3BydW5lX2Zy ZWV6ZShYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJY2hhcgkgICAqZGF0YXB0ciA9IFhM b2dSZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAwLCAmZGF0YWxlbik7CiAJCWJvb2wJCWRvX3By dW5lOwogCisJCS8qCisJCSAqIERGb1IgdW5wYWNraW5nIG5lZWRzIG91dGVyIGJ1ZmZlcnMg Zm9yIHNhdmluZyByZXN1bHRzIGFuZCBmb3IKKwkJICogYWxsb2NhdGluZyBjb250YWluZXJz IHVzZWQgZHVyaW5nIGRlY29tcHJlc3Npb24uIDIgYnVmZmVyIHBhcnRzIGFyZQorCQkgKiBp bnRlbmRlZCBmb3Igc2F2aW5nIHNlcXVlbmNlcyBvZiBvZmZzZXRzIG9mIGRlYWQgYW5kIHVu dXNlZCB0dXBsZXMuCisJCSAqIEFkZGl0aW9uYWwgdGhyZWUgY2h1bmtzIGFyZSBuZWVkZWQg Zm9yIGludGVybmFsIG5lZWRzIG9mIHRoZQorCQkgKiBkZm9yX3VucGFjayBmdW5jdGlvbi4K KwkJICovCisJCXVpbnQ4IGRmb3JfYnVmWzUgKiBERk9SX0JVRl9QQVJUX1NJWkVdOworCiAJ CWhlYXBfeGxvZ19kZXNlcmlhbGl6ZV9wcnVuZV9hbmRfZnJlZXplKGRhdGFwdHIsIHhscmVj LmZsYWdzLAogCQkJCQkJCQkJCQkgICAmbnBsYW5zLCAmcGxhbnMsICZmcnpfb2Zmc2V0cywK IAkJCQkJCQkJCQkJICAgJm5yZWRpcmVjdGVkLCAmcmVkaXJlY3RlZCwKIAkJCQkJCQkJCQkJ ICAgJm5kZWFkLCAmbm93ZGVhZCwKLQkJCQkJCQkJCQkJICAgJm51bnVzZWQsICZub3d1bnVz ZWQpOworCQkJCQkJCQkJCQkgICAmbnVudXNlZCwgJm5vd3VudXNlZCwgZGZvcl9idWYpOwog CiAJCWRvX3BydW5lID0gbnJlZGlyZWN0ZWQgPiAwIHx8IG5kZWFkID4gMCB8fCBudW51c2Vk ID4gMDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcHJ1bmVoZWFw LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9wcnVuZWhlYXAuYwppbmRleCA2NWM5ZjM5 M2Y0MS4uN2U2Y2Q3OTNhZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L3BydW5laGVhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3BydW5laGVhcC5j CkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCiAjaW5j bHVkZSAiYWNjZXNzL2hlYXBhbV94bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbV94 bG9nX2Rmb3IuaCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL211bHRpeGFjdC5oIgogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCkBA IC0yMDIsNyArMjAzLDYgQEAgc3RhdGljIHZvaWQgcGFnZV92ZXJpZnlfcmVkaXJlY3RzKFBh Z2UgcGFnZSk7CiBzdGF0aWMgYm9vbCBoZWFwX3BhZ2Vfd2lsbF9mcmVlemUoYm9vbCBkaWRf dHVwbGVfaGludF9mcGksIGJvb2wgZG9fcHJ1bmUsIGJvb2wgZG9faGludF9wcnVuZSwKIAkJ CQkJCQkJICBQcnVuZVN0YXRlICpwcnN0YXRlKTsKIAotCiAvKgogICogT3B0aW9uYWxseSBw cnVuZSBhbmQgcmVwYWlyIGZyYWdtZW50YXRpb24gaW4gdGhlIHNwZWNpZmllZCBwYWdlLgog ICoKQEAgLTIxNDcsNiArMjE0NywxNyBAQCBoZWFwX2xvZ19mcmVlemVfcGxhbihIZWFwVHVw bGVGcmVlemUgKnR1cGxlcywgaW50IG50dXBsZXMsCiAJcmV0dXJuIG5wbGFuczsKIH0KIAor LyoKKyAqIENvbXBhcmF0b3IgZm9yIG9mZnNldHMuCisgKi8KK3N0YXRpYyBpbnQKK2hlYXBf bG9nX29mZnNldF9jbXAoY29uc3Qgdm9pZCAqYXJnMSwgY29uc3Qgdm9pZCAqYXJnMikKK3sK Kwljb25zdCBPZmZzZXROdW1iZXIgKm9mZnNldDEgPSBhcmcxOworCWNvbnN0IE9mZnNldE51 bWJlciAqb2Zmc2V0MiA9IGFyZzI7CisJcmV0dXJuICgqb2Zmc2V0MSA+ICpvZmZzZXQyKSAt ICgqb2Zmc2V0MSA8ICpvZmZzZXQyKTsKK30KKwogLyoKICAqIFdyaXRlIGFuIFhMT0dfSEVB UDJfUFJVTkUqIFdBTCByZWNvcmQKICAqCkBAIC0yMjAxLDExICsyMjEyLDM0IEBAIGxvZ19o ZWFwX3BydW5lX2FuZF9mcmVlemUoUmVsYXRpb24gcmVsYXRpb24sIEJ1ZmZlciBidWZmZXIs CiAJYm9vbAkJZG9fcHJ1bmUgPSBucmVkaXJlY3RlZCA+IDAgfHwgbmRlYWQgPiAwIHx8IG51 bnVzZWQgPiAwOwogCWJvb2wJCWRvX3NldF92bSA9IHZtZmxhZ3MgJiBWSVNJQklMSVRZTUFQ X1ZBTElEX0JJVFM7CiAKKwlkZm9yX21ldGFfdCBkZWFkX21ldGEgPSB7IDAgfTsKKwlkZm9y X21ldGFfdCB1bnVzZWRfbWV0YSA9IHsgMCB9OworCisJdWludDggZGVhZF9tZXRhX3BhY2tb TUFYX1BBQ0tFRF9NRVRBX1NJWkVdOworCXVpbnQ4IHVudXNlZF9tZXRhX3BhY2tbTUFYX1BB Q0tFRF9NRVRBX1NJWkVdOworCisJLyoKKwkgKiBTaW5jZSB0aGlzIGNvZGUgaXMgcnVuIGlu IGEgY3JpdGljYWwgc2VjdGlvbiB3ZSBjYW4ndCB1c2UgZHluYW1pYworCSAqIGFsbG9jYXRp b24gZHVyaW5nIERGb1IgcGFja2luZywgYnV0IHdlIGNhbiB1c2UgYnVmZmVycyBhbGxvY2F0 ZWQgaW4gdGhlCisJICogc3RhY2suIFdlIG5lZWQgYXQgbWF4aW11bToKKwkgKiAxKSAyICog REZPUl9CVUZfUEFSVF9TSVpFCisJICogICAgICAgIC0gZm9yIDIgcGFja2VkIHNlcXVlbmNl czogZGVhZCwgdW51c2VkCisJICogMikgMyAqIERGT1JfQlVGX1BBUlRfU0laRQorCSAqIAkJ ICAtIGZvciBpbnRlcm5hbCBuZWVkcyBvZiB0aGUgZGZvcl9wYWNrIGZ1bmN0aW9uLgorCSAq CisJICogT3ZlcmFsbCwgNSAqIERGT1JfQlVGX1BBUlRfU0laRQorCSAqLworCXVpbnQ4IGRm b3JfYnVmWzUgKiBERk9SX0JVRl9QQVJUX1NJWkVdOworCiAJQXNzZXJ0KCh2bWZsYWdzICYg VklTSUJJTElUWU1BUF9WQUxJRF9CSVRTKSA9PSB2bWZsYWdzKTsKIAogCXhscmVjLmZsYWdz ID0gMDsKIAlyZWdidWZfZmxhZ3NfaGVhcCA9IFJFR0JVRl9TVEFOREFSRDsKIAorCS8qIEhl dXJpc3RpY2FsbHkgZXN0aW1hdGVkIHRocmVzaG9sZCBmb3IgdHVybmluZyBvbiBERm9SIGNv bXByZXNzaW9uICovCisJaWYgKHdhbF9wcnVuZV9kZm9yX2NvbXByZXNzaW9uICYmIChuZGVh ZCA+IDkgfHwgbnVudXNlZCA+IDkpKQorCQl4bHJlYy5mbGFncyB8PSBYTEhQX0RGT1JfQ09N UFJFU1NFRDsKKwogCS8qCiAJICogV2UgY2FuIGF2b2lkIGFuIEZQSSBvZiB0aGUgaGVhcCBw YWdlIGlmIHRoZSBvbmx5IG1vZGlmaWNhdGlvbiB3ZSBhcmUKIAkgKiBtYWtpbmcgdG8gaXQg aXMgdG8gc2V0IFBEX0FMTF9WSVNJQkxFIGFuZCBjaGVja3N1bXMvd2FsX2xvZ19oaW50cyBh cmUKQEAgLTIyMzAsNiArMjI2NCwxMCBAQCBsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplKFJl bGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCWlmIChkb19zZXRfdm0pCiAJCVhM b2dSZWdpc3RlckJ1ZmZlcigxLCB2bWJ1ZmZlciwgMCk7CiAKKwkvKgorCSAqIHhsaHBfZnJl ZXplX3BsYW5zIGlzIGFycmF5IG9mIHN0cnVjdHVyZXMgYW5kIGlzIG5vdCBhIHNlcXVlbmNl CisJICogb2YgaW50ZWdlcnMsIHRoYXQgaXMgd2h5IHdlIGNhbm5vdCB1c2UgREZvUiBjb21w cmVzc2lvbiBoZXJlLgorCSAqLwogCWlmIChuZnJvemVuID4gMCkKIAl7CiAJCWludAkJCW5w bGFuczsKQEAgLTIyNTgsMjYgKzIyOTYsOTIgQEAgbG9nX2hlYXBfcHJ1bmVfYW5kX2ZyZWV6 ZShSZWxhdGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKIAkJWExvZ1JlZ2lzdGVyQnVm RGF0YSgwLCByZWRpcmVjdGVkLAogCQkJCQkJCXNpemVvZihPZmZzZXROdW1iZXJbMl0pICog bnJlZGlyZWN0ZWQpOwogCX0KLQlpZiAobmRlYWQgPiAwKQorCWlmICgoeGxyZWMuZmxhZ3Mg JiBYTEhQX0RGT1JfQ09NUFJFU1NFRCkgIT0gMCkKIAl7Ci0JCXhscmVjLmZsYWdzIHw9IFhM SFBfSEFTX0RFQURfSVRFTVM7CisJCWludCBkZWFkX3BhY2tfcmVzID0gMDsKKwkJaW50IHVu dXNlZF9wYWNrX3JlcyA9IDA7CiAKLQkJZGVhZF9pdGVtcy5udGFyZ2V0cyA9IG5kZWFkOwot CQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsICZkZWFkX2l0ZW1zLAotCQkJCQkJCW9mZnNldG9m KHhsaHBfcHJ1bmVfaXRlbXMsIGRhdGEpKTsKLQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCBk ZWFkLAotCQkJCQkJCXNpemVvZihPZmZzZXROdW1iZXIpICogbmRlYWQpOworCQkvKgorCQkg KiBEZWFkIHR1cGxlIG9mZnNldHMgYXJlIHN1YmplY3QgdG8gYmUgcGFja2VkIHdpdGggREZv Ui4KKwkJICogQWZ0ZXIgdGhhdCB3ZSBoYXZlOgorCQkgKiAJCWRlYWRfbWV0YS5wYWNrID0g ZGZvcl9idWYgKyBERk9SX0JVRl9QQVJUX1NJWkU7CisJCSAqLworCQlpZiAobmRlYWQgPiAw KQorCQl7CisJCQlxc29ydChkZWFkLCBuZGVhZCwgc2l6ZW9mKE9mZnNldE51bWJlciksIGhl YXBfbG9nX29mZnNldF9jbXApOworCQkJZGVhZF9wYWNrX3JlcyA9IGRmb3JfdTE2X3BhY2so bmRlYWQsIGRlYWQsIERGT1JfRVhDX1VTRSwgJmRlYWRfbWV0YSwKKwkJCQkJCQkJCQkgIDQg KiBERk9SX0JVRl9QQVJUX1NJWkUsIGRmb3JfYnVmKTsKKwkJfQorCisJCS8qCisJCSAqIFVu dXNlZCB0dXBsZSBvZmZzZXRzIGFyZSBzdWJqZWN0IHRvIGJlIHBhY2tlZCB3aXRoIERGb1Iu CisJCSAqIEFmdGVyIHRoYXQgd2UgaGF2ZToKKwkJICogCQl1bnVzZWRfbWV0YS5wYWNrID0g ZGZvcl9idWYgKyAyICogREZPUl9CVUZfUEFSVF9TSVpFOworCQkgKi8KKwkJaWYgKG51bnVz ZWQgPiAwKQorCQl7CisJCQlxc29ydCh1bnVzZWQsIG51bnVzZWQsIHNpemVvZihPZmZzZXRO dW1iZXIpLCBoZWFwX2xvZ19vZmZzZXRfY21wKTsKKwkJCXVudXNlZF9wYWNrX3JlcyA9IGRm b3JfdTE2X3BhY2sobnVudXNlZCwgdW51c2VkLCBERk9SX0VYQ19VU0UsCisJCQkJCQkJCQkJ CSZ1bnVzZWRfbWV0YSwKKwkJCQkJCQkJCQkJNCAqIERGT1JfQlVGX1BBUlRfU0laRSwKKwkJ CQkJCQkJCQkJZGZvcl9idWYgKyBERk9SX0JVRl9QQVJUX1NJWkUpOworCQl9CisKKwkJaWYg KGRlYWRfcGFja19yZXMgPT0gMCAmJiB1bnVzZWRfcGFja19yZXMgPT0gMCkKKwkJeworCQkJ LyogQWxsIHN0YWdlcyBvZiBwYWNraW5nIGhhdmUgc3VjY2VlZGVkLiBXZSBjYW4gc2F2ZSBE Rm9SIHBhY2tldHMKKwkJCSAqIGludG8gbG9nICovCisJCQlzaXplX3QgbWV0YV9wYWNrX3N6 OworCQkJaWYgKG5kZWFkID4gMCkKKwkJCXsKKwkJCQl4bHJlYy5mbGFncyB8PSBYTEhQX0hB U19ERUFEX0lURU1TOworCisJCQkJbWV0YV9wYWNrX3N6ID0gbG9nX2hlYXBfcHJ1bmVfYW5k X2ZyZWV6ZV9wYWNrX21ldGEoCisJCQkJCSZkZWFkX21ldGEsIGRlYWRfbWV0YV9wYWNrKTsK KworCQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgJmRlYWRfbWV0YV9wYWNrLCBtZXRhX3Bh Y2tfc3opOworCQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgZGVhZF9tZXRhLnBhY2ssIGRl YWRfbWV0YS5uYnl0ZXMpOworCQkJfQorCQkJaWYgKG51bnVzZWQgPiAwKQorCQkJeworCQkJ CXhscmVjLmZsYWdzIHw9IFhMSFBfSEFTX05PV19VTlVTRURfSVRFTVM7CisKKwkJCQltZXRh X3BhY2tfc3ogPSBsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplX3BhY2tfbWV0YSgKKwkJCQkJ JnVudXNlZF9tZXRhLCB1bnVzZWRfbWV0YV9wYWNrKTsKKworCQkJCVhMb2dSZWdpc3RlckJ1 ZkRhdGEoMCwgJnVudXNlZF9tZXRhX3BhY2ssIG1ldGFfcGFja19zeik7CisJCQkJWExvZ1Jl Z2lzdGVyQnVmRGF0YSgwLCB1bnVzZWRfbWV0YS5wYWNrLCB1bnVzZWRfbWV0YS5uYnl0ZXMp OworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJLyogT3RoZXJ3aXNlLCB3ZSBjYW4ndCB1 c2UgREZvUiBjb21wcmVzc2lvbiAqLworCQkJeGxyZWMuZmxhZ3MgJj0gflhMSFBfREZPUl9D T01QUkVTU0VEOworCQl9CiAJfQotCWlmIChudW51c2VkID4gMCkKKworCWlmICgoeGxyZWMu ZmxhZ3MgJiBYTEhQX0RGT1JfQ09NUFJFU1NFRCkgPT0gMCkKIAl7Ci0JCXhscmVjLmZsYWdz IHw9IFhMSFBfSEFTX05PV19VTlVTRURfSVRFTVM7CisJCWlmIChuZGVhZCA+IDApCisJCXsK KwkJCXhscmVjLmZsYWdzIHw9IFhMSFBfSEFTX0RFQURfSVRFTVM7CiAKLQkJdW51c2VkX2l0 ZW1zLm50YXJnZXRzID0gbnVudXNlZDsKLQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCAmdW51 c2VkX2l0ZW1zLAotCQkJCQkJCW9mZnNldG9mKHhsaHBfcHJ1bmVfaXRlbXMsIGRhdGEpKTsK LQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCB1bnVzZWQsCi0JCQkJCQkJc2l6ZW9mKE9mZnNl dE51bWJlcikgKiBudW51c2VkKTsKKwkJCWRlYWRfaXRlbXMubnRhcmdldHMgPSBuZGVhZDsK KwkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgJmRlYWRfaXRlbXMsCisJCQkJCQkJCW9mZnNl dG9mKHhsaHBfcHJ1bmVfaXRlbXMsIGRhdGEpKTsKKwkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEo MCwgZGVhZCwgc2l6ZW9mKE9mZnNldE51bWJlcikgKiBuZGVhZCk7CisJCX0KKwkJaWYgKG51 bnVzZWQgPiAwKQorCQl7CisJCQl4bHJlYy5mbGFncyB8PSBYTEhQX0hBU19OT1dfVU5VU0VE X0lURU1TOworCisJCQl1bnVzZWRfaXRlbXMubnRhcmdldHMgPSBudW51c2VkOworCQkJWExv Z1JlZ2lzdGVyQnVmRGF0YSgwLCAmdW51c2VkX2l0ZW1zLAorCQkJCQkJCQlvZmZzZXRvZih4 bGhwX3BydW5lX2l0ZW1zLCBkYXRhKSk7CisJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIHVu dXNlZCwgc2l6ZW9mKE9mZnNldE51bWJlcikgKiBudW51c2VkKTsKKwkJfQogCX0KKwogCWlm IChuZnJvemVuID4gMCkKIAkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCBmcnpfb2Zmc2V0cywK IAkJCQkJCQlzaXplb2YoT2Zmc2V0TnVtYmVyKSAqIG5mcm96ZW4pOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3JtZ3JkZXNjL01ha2VmaWxlCmluZGV4IGNkOTVlZWMzN2YxLi40OWU5YzQ2MTQ1ZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQpAQCAtMTcsNiArMTcsNyBA QCBPQkpTID0gXAogCWdpbmRlc2MubyBcCiAJZ2lzdGRlc2MubyBcCiAJaGFzaGRlc2MubyBc CisJaGVhcGFtX3hsb2dfZGZvci5vIFwKIAloZWFwZGVzYy5vIFwKIAlsb2dpY2FsbXNnZGVz Yy5vIFwKIAlteGFjdGRlc2MubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MvaGVhcGFtX3hsb2dfZGZvci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL2hlYXBhbV94bG9nX2Rmb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNDdmYTAwMGUzNjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvaGVhcGFtX3hsb2dfZGZvci5jCkBAIC0wLDAgKzEsMTA5IEBACisj aW5jbHVkZSAibGliL2JpdHBhY2tfdTE2LmgiCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbV94 bG9nX2Rmb3IuaCIKKworYm9vbCB3YWxfcHJ1bmVfZGZvcl9jb21wcmVzc2lvbiA9IHRydWU7 CisKK3NpemVfdAorbG9nX2hlYXBfcHJ1bmVfYW5kX2ZyZWV6ZV9wYWNrX21ldGEoY29uc3Qg ZGZvcl9tZXRhX3QgKm1ldGEsIHVpbnQ4IGJ1ZltdKQoreworCXNpemVfdCBjYXJldCA9IDA7 CisJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKGJ1ZiwgY2FyZXQsIG1ldGEtPml0ZW1fY250 LAorCQkJCQkJCSBYTEhQRl9NRVRBX0lURU1fQ09VTlRfU1opOworCWNhcmV0ID0gYml0cGFj a191MTZfcGFjayhidWYsIGNhcmV0LCBtZXRhLT5kZWx0YV93aWQsCisJCQkJCQkJIFhMSFBG X01FVEFfREVMVEFfV0lEVEhfU1opOworCWNhcmV0ID0gYml0cGFja191MTZfcGFjayhidWYs IGNhcmV0LCAobWV0YS0+ZXhjX2NudCA9PSAwKSA/IDAgOiAxLAorCQkJCQkJCSBYTEhQRl9N RVRBX0VYQ0VQVElPTl9GTEFHX1NaKTsKKwlpZiAobWV0YS0+ZXhjX2NudCAhPSAwKQorCXsK KwkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKGJ1ZiwgY2FyZXQsIG1ldGEtPmV4Y19jbnQs CisJCQkJCQkJCSBYTEhQRl9NRVRBX0VYQ0VQVElPTl9DT1VOVF9TWik7CisJCWNhcmV0ID0g Yml0cGFja191MTZfcGFjayhidWYsIGNhcmV0LCBtZXRhLT5leGNfd2lkLAorCQkJCQkJCQkg WExIUEZfTUVUQV9FWENFUFRJT05fV0lEVEhfU1opOworCQljYXJldCA9IGJpdHBhY2tfdTE2 X3BhY2soYnVmLCBjYXJldCwgbWV0YS0+ZXhjX3Bvc193aWQsCisJCQkJCQkJCSBYTEhQRl9N RVRBX0VYQ0VQVElPTl9QT1NJVElPTl9XSURUSF9TWik7CisJfQorCUFzc2VydChtZXRhLT5p dGVtX2NudCAhPSAwKTsKKwlBc3NlcnQobWV0YS0+ZGVsdGFfd2lkICE9IDApOworCUFzc2Vy dChtZXRhLT5uYnl0ZXMgIT0gMCk7CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJ eworCQlkZm9yX21ldGFfdCBjaGVja2VyOworCQlsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXpl X3VucGFja19tZXRhKCZjaGVja2VyLCBidWYpOworCQlBc3NlcnQobWV0YS0+aXRlbV9jbnQg PT0gY2hlY2tlci5pdGVtX2NudCk7CisJCUFzc2VydChtZXRhLT5kZWx0YV93aWQgPT0gY2hl Y2tlci5kZWx0YV93aWQpOworCQlBc3NlcnQobWV0YS0+ZXhjX2NudCA9PSBjaGVja2VyLmV4 Y19jbnQpOworCQlBc3NlcnQobWV0YS0+ZXhjX3dpZCA9PSBjaGVja2VyLmV4Y193aWQpOwor CQlBc3NlcnQobWV0YS0+ZXhjX3Bvc193aWQgPT0gY2hlY2tlci5leGNfcG9zX3dpZCk7CisJ fQorI2VuZGlmCisJcmV0dXJuIChjYXJldCArIDcpIC8gODsgLyogdGhlIGxlbmd0aCBvZiBw YWNrZWQgZGZvcl9tZXRhLCBpbiBieXRlcyovCit9CisKK3NpemVfdAorbG9nX2hlYXBfcHJ1 bmVfYW5kX2ZyZWV6ZV91bnBhY2tfbWV0YShkZm9yX21ldGFfdCAqbWV0YSwKKwkJCQkJCQkJ CSAgY29uc3QgdWludDggcGFja2VkX21ldGFbXSkKK3sKKwlzaXplX3QgY2FyZXQgPSAwOwor CWJvb2wgZXhjOworCisJbWV0YS0+aXRlbV9jbnQgPSBiaXRwYWNrX3UxNl91bnBhY2socGFj a2VkX21ldGEsICZjYXJldCwKKwkJCQkJCQkJCQlYTEhQRl9NRVRBX0lURU1fQ09VTlRfU1op OworCW1ldGEtPmRlbHRhX3dpZCA9IGJpdHBhY2tfdTE2X3VucGFjayhwYWNrZWRfbWV0YSwg JmNhcmV0LAorCQkJCQkJCQkJCSBYTEhQRl9NRVRBX0RFTFRBX1dJRFRIX1NaKTsKKwlleGMg PSBiaXRwYWNrX3UxNl91bnBhY2socGFja2VkX21ldGEsICZjYXJldCwgWExIUEZfTUVUQV9F WENFUFRJT05fRkxBR19TWik7CisKKwlpZiAoZXhjKQorCXsKKwkJbWV0YS0+ZXhjX2NudCA9 IGJpdHBhY2tfdTE2X3VucGFjayhwYWNrZWRfbWV0YSwgJmNhcmV0LAorCQkJCQkJCQkJCSBY TEhQRl9NRVRBX0VYQ0VQVElPTl9DT1VOVF9TWik7CisJCW1ldGEtPmV4Y193aWQgPSBiaXRw YWNrX3UxNl91bnBhY2socGFja2VkX21ldGEsICZjYXJldCwKKwkJCQkJCQkJCQkgWExIUEZf TUVUQV9FWENFUFRJT05fV0lEVEhfU1opOworCQltZXRhLT5leGNfcG9zX3dpZCA9CisJCQli aXRwYWNrX3UxNl91bnBhY2socGFja2VkX21ldGEsICZjYXJldCwKKwkJCQkJCQkgICBYTEhQ Rl9NRVRBX0VYQ0VQVElPTl9QT1NJVElPTl9XSURUSF9TWik7CisJfQorCWVsc2UKKwl7CisJ CW1ldGEtPmV4Y19jbnQgPSAwOworCQltZXRhLT5leGNfd2lkID0gMDsKKwkJbWV0YS0+ZXhj X3Bvc193aWQgPSAwOworCX0KKwltZXRhLT5uYnl0ZXMgPSBkZm9yX3UxNl9jYWxjX25ieXRl cygqbWV0YSk7CisKKwlBc3NlcnQobWV0YS0+aXRlbV9jbnQgIT0gMCk7CisJQXNzZXJ0KG1l dGEtPmRlbHRhX3dpZCAhPSAwKTsKKwlBc3NlcnQobWV0YS0+bmJ5dGVzICE9IDApOworCisJ cmV0dXJuIChjYXJldCArIDcpIC8gODsKK30KKwordm9pZAoraGVhcF94bG9nX2Rlc2VyaWFs aXplX2Rmb3IoY2hhciAqKmN1cnNvciwgaW50ICpuaXRlbXMsCisJCQkJCQkgICBPZmZzZXRO dW1iZXIgKippdGVtcywKKwkJCQkJCSAgIHVpbnQ4IGRmb3JfYnVmW10pCit7CisJZGZvcl9t ZXRhX3QgZGZvciA9IHswfTsKKwlzaXplX3QgcGFja2VkX21ldGFfbmJ5dGVzOworCXVuaXFz b3J0dmVjdF91MTZfdCB2ZWN0OworCisJcGFja2VkX21ldGFfbmJ5dGVzID0KKwkJbG9nX2hl YXBfcHJ1bmVfYW5kX2ZyZWV6ZV91bnBhY2tfbWV0YSgmZGZvciwgKHVpbnQ4KikgKmN1cnNv cik7CisKKwkqY3Vyc29yICs9IHBhY2tlZF9tZXRhX25ieXRlczsKKworCWRmb3IucGFjayA9 ICh1aW50OCAqKSpjdXJzb3I7CisJZGZvcl91MTZfdW5wYWNrKCZkZm9yLCAmdmVjdCwgNCAq IERGT1JfQlVGX1BBUlRfU0laRSwKKwkJCQkJZGZvcl9idWYpOworCisJKmN1cnNvciArPSBk Zm9yLm5ieXRlczsKKworCUFzc2VydChkZm9yLm5ieXRlcyAhPSAwKTsKKworCUFzc2VydCh2 ZWN0LmNudCAhPSAwKTsKKwlBc3NlcnQodmVjdC5tZW1faXNfb3V0ZXIgPT0gdHJ1ZSk7CisJ QXNzZXJ0KCh2b2lkKil2ZWN0Lm0gPT0gKHZvaWQqKWRmb3JfYnVmKTsKKworCSpuaXRlbXMg PSB2ZWN0LmNudDsKKwkqaXRlbXMgPSB2ZWN0Lm07Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3Mvcm1ncmRlc2MvaGVhcGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy9oZWFwZGVzYy5jCmluZGV4IDAyYWU5MTY1M2MxLi5lOGU3NTY5ZGE5YyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2hlYXBkZXNjLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2hlYXBkZXNjLmMKQEAgLTE1LDYgKzE1LDcg QEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbV94 bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbV94bG9nX2Rmb3IuaCIKICNpbmNsdWRl ICJhY2Nlc3Mvcm1ncmRlc2NfdXRpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0 eW1hcGRlZnMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N0YW5kYnlkZWZzLmgiCkBAIC0xMDgs NyArMTA5LDggQEAgaGVhcF94bG9nX2Rlc2VyaWFsaXplX3BydW5lX2FuZF9mcmVlemUoY2hh ciAqY3Vyc29yLCB1aW50MTYgZmxhZ3MsCiAJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgKipm cnpfb2Zmc2V0cywKIAkJCQkJCQkJCSAgIGludCAqbnJlZGlyZWN0ZWQsIE9mZnNldE51bWJl ciAqKnJlZGlyZWN0ZWQsCiAJCQkJCQkJCQkgICBpbnQgKm5kZWFkLCBPZmZzZXROdW1iZXIg Kipub3dkZWFkLAotCQkJCQkJCQkJICAgaW50ICpudW51c2VkLCBPZmZzZXROdW1iZXIgKipu b3d1bnVzZWQpCisJCQkJCQkJCQkgICBpbnQgKm51bnVzZWQsIE9mZnNldE51bWJlciAqKm5v d3VudXNlZCwKKwkJCQkJCQkJCSAgIHVpbnQ4IGRmb3JfYnVmW10pCiB7CiAJaWYgKGZsYWdz ICYgWExIUF9IQVNfRlJFRVpFX1BMQU5TKQogCXsKQEAgLTE0NiwxNCArMTQ4LDIyIEBAIGhl YXBfeGxvZ19kZXNlcmlhbGl6ZV9wcnVuZV9hbmRfZnJlZXplKGNoYXIgKmN1cnNvciwgdWlu dDE2IGZsYWdzLAogCiAJaWYgKGZsYWdzICYgWExIUF9IQVNfREVBRF9JVEVNUykKIAl7Ci0J CXhsaHBfcHJ1bmVfaXRlbXMgKnN1YnJlY29yZCA9ICh4bGhwX3BydW5lX2l0ZW1zICopIGN1 cnNvcjsKKwkJaWYoIShmbGFncyAmIFhMSFBfREZPUl9DT01QUkVTU0VEKSkKKwkJeworCQkJ eGxocF9wcnVuZV9pdGVtcyAqc3VicmVjb3JkID0gKHhsaHBfcHJ1bmVfaXRlbXMgKikgY3Vy c29yOwogCi0JCSpuZGVhZCA9IHN1YnJlY29yZC0+bnRhcmdldHM7Ci0JCUFzc2VydCgqbmRl YWQgPiAwKTsKLQkJKm5vd2RlYWQgPSBzdWJyZWNvcmQtPmRhdGE7CisJCQkqbmRlYWQgPSBz dWJyZWNvcmQtPm50YXJnZXRzOworCQkJQXNzZXJ0KCpuZGVhZCA+IDApOworCQkJKm5vd2Rl YWQgPSBzdWJyZWNvcmQtPmRhdGE7CiAKLQkJY3Vyc29yICs9IG9mZnNldG9mKHhsaHBfcHJ1 bmVfaXRlbXMsIGRhdGEpOwotCQljdXJzb3IgKz0gc2l6ZW9mKE9mZnNldE51bWJlcikgKiAq bmRlYWQ7CisJCQljdXJzb3IgKz0gb2Zmc2V0b2YoeGxocF9wcnVuZV9pdGVtcywgZGF0YSk7 CisJCQljdXJzb3IgKz0gc2l6ZW9mKE9mZnNldE51bWJlcikgKiAqbmRlYWQ7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQloZWFwX3hsb2dfZGVzZXJpYWxpemVfZGZvcigmY3Vyc29yLCBuZGVh ZCwgbm93ZGVhZCwKKwkJCQkJCQkJCSAgIGRmb3JfYnVmKTsKKwkJfQogCX0KIAllbHNlCiAJ ewpAQCAtMTYzLDE0ICsxNzMsMjIgQEAgaGVhcF94bG9nX2Rlc2VyaWFsaXplX3BydW5lX2Fu ZF9mcmVlemUoY2hhciAqY3Vyc29yLCB1aW50MTYgZmxhZ3MsCiAKIAlpZiAoZmxhZ3MgJiBY TEhQX0hBU19OT1dfVU5VU0VEX0lURU1TKQogCXsKLQkJeGxocF9wcnVuZV9pdGVtcyAqc3Vi cmVjb3JkID0gKHhsaHBfcHJ1bmVfaXRlbXMgKikgY3Vyc29yOworCQlpZighKGZsYWdzICYg WExIUF9ERk9SX0NPTVBSRVNTRUQpKQorCQl7CisJCQl4bGhwX3BydW5lX2l0ZW1zICpzdWJy ZWNvcmQgPSAoeGxocF9wcnVuZV9pdGVtcyAqKSBjdXJzb3I7CiAKLQkJKm51bnVzZWQgPSBz dWJyZWNvcmQtPm50YXJnZXRzOwotCQlBc3NlcnQoKm51bnVzZWQgPiAwKTsKLQkJKm5vd3Vu dXNlZCA9IHN1YnJlY29yZC0+ZGF0YTsKKwkJCSpudW51c2VkID0gc3VicmVjb3JkLT5udGFy Z2V0czsKKwkJCUFzc2VydCgqbnVudXNlZCA+IDApOworCQkJKm5vd3VudXNlZCA9IHN1YnJl Y29yZC0+ZGF0YTsKIAotCQljdXJzb3IgKz0gb2Zmc2V0b2YoeGxocF9wcnVuZV9pdGVtcywg ZGF0YSk7Ci0JCWN1cnNvciArPSBzaXplb2YoT2Zmc2V0TnVtYmVyKSAqICpudW51c2VkOwor CQkJY3Vyc29yICs9IG9mZnNldG9mKHhsaHBfcHJ1bmVfaXRlbXMsIGRhdGEpOworCQkJY3Vy c29yICs9IHNpemVvZihPZmZzZXROdW1iZXIpICogKm51bnVzZWQ7CisJCX0KKwkJZWxzZQor CQl7CisJCQloZWFwX3hsb2dfZGVzZXJpYWxpemVfZGZvcigmY3Vyc29yLCBudW51c2VkLCBu b3d1bnVzZWQsCisJCQkJCQkJCQkgICBkZm9yX2J1ZiArIERGT1JfQlVGX1BBUlRfU0laRSk7 CisJCX0KIAl9CiAJZWxzZQogCXsKQEAgLTMwOSwxMyArMzI3LDE2IEBAIGhlYXAyX2Rlc2Mo U3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkJeGxocF9mcmVl emVfcGxhbiAqcGxhbnM7CiAJCQlPZmZzZXROdW1iZXIgKmZyel9vZmZzZXRzOwogCisJCQl1 aW50OCBkZm9yX2J1Zls1ICogREZPUl9CVUZfUEFSVF9TSVpFXTsKKwogCQkJY2hhcgkgICAq Y3Vyc29yID0gWExvZ1JlY0dldEJsb2NrRGF0YShyZWNvcmQsIDAsICZkYXRhbGVuKTsKIAog CQkJaGVhcF94bG9nX2Rlc2VyaWFsaXplX3BydW5lX2FuZF9mcmVlemUoY3Vyc29yLCB4bHJl Yy0+ZmxhZ3MsCiAJCQkJCQkJCQkJCQkgICAmbnBsYW5zLCAmcGxhbnMsICZmcnpfb2Zmc2V0 cywKIAkJCQkJCQkJCQkJCSAgICZucmVkaXJlY3RlZCwgJnJlZGlyZWN0ZWQsCiAJCQkJCQkJ CQkJCQkgICAmbmRlYWQsICZub3dkZWFkLAotCQkJCQkJCQkJCQkJICAgJm51bnVzZWQsICZu b3d1bnVzZWQpOworCQkJCQkJCQkJCQkJICAgJm51bnVzZWQsICZub3d1bnVzZWQsCisJCQkJ CQkJCQkJCQkgICBkZm9yX2J1Zik7CiAKIAkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiLCBu cGxhbnM6ICV1LCBucmVkaXJlY3RlZDogJXUsIG5kZWFkOiAldSwgbnVudXNlZDogJXUiLAog CQkJCQkJCSBucGxhbnMsIG5yZWRpcmVjdGVkLCBuZGVhZCwgbnVudXNlZCk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IDVlZTg0YTYzOWQ4 Li5kZmQ3MWYyOTI0ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf cGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQKQEAgLTMzOTgsNiArMzM5OCwxMyBAQAogICBib290X3ZhbCA9PiAnZmFsc2Un LAogfSwKIAoreyBuYW1lID0+ICd3YWxfcHJ1bmVfZGZvcl9jb21wcmVzc2lvbicsIHR5cGUg PT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfU1VTRVQnLCBncm91cCA9PiAnV0FMX1NFVFRJ TkdTJywKKyAgc2hvcnRfZGVzYyA9PiAnQ29tcHJlc3MgZGVhZCBhbmQgdW51c2VkIG9mZnNl dCBhcnJheXMgYXQgUFJVTkUvRlJFRVpFIFdBTCByZWNvcmRzIHVzaW5nIERGT1IuJywKKyAg bG9uZ19kZXNjID0+ICdFbmFibGVzIGNvbXByZXNzaW9uIG9mIGRlYWQgYW5kIHVudXNlZCBP ZmZzZXROdW1iZXIgYXJyYXlzIHN0b3JlZCBpbiBoZWFwIFBSVU5FL0ZSRUVaRSBXQUwgcmVj b3JkcyB1c2luZyBjdXN0b21pc2VkIGRlbHRhIGZyYW1lLW9mLXJlZmVyZW5jZSBlbmNvZGlu Zy4nLAorICB2YXJpYWJsZSA9PiAnd2FsX3BydW5lX2Rmb3JfY29tcHJlc3Npb24nLAorICBi b290X3ZhbCA9PiAndHJ1ZScKK30sCisKIHsgbmFtZSA9PiAnd2FsX3JlY2VpdmVyX2NyZWF0 ZV90ZW1wX3Nsb3QnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1NJR0hVUCcs IGdyb3VwID0+ICdSRVBMSUNBVElPTl9TVEFOREJZJywKICAgc2hvcnRfZGVzYyA9PiAnU2V0 cyB3aGV0aGVyIGEgV0FMIHJlY2VpdmVyIHNob3VsZCBjcmVhdGUgYSB0ZW1wb3JhcnkgcmVw bGljYXRpb24gc2xvdCBpZiBubyBwZXJtYW5lbnQgc2xvdCBpcyBjb25maWd1cmVkLicsCiAg IHZhcmlhYmxlID0+ICd3YWxfcmVjZWl2ZXJfY3JlYXRlX3RlbXBfc2xvdCcsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IDM4YWFmODJmMTIwLi4xNWZlMjdlMTFl ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTMxLDYgKzMxLDcg QEAKIAogI2luY2x1ZGUgImFjY2Vzcy9jb21taXRfdHMuaCIKICNpbmNsdWRlICJhY2Nlc3Mv Z2luLmgiCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbV94bG9nX2Rmb3IuaCIKICNpbmNsdWRl ICJhY2Nlc3Mvc2xydS5oIgogI2luY2x1ZGUgImFjY2Vzcy90b2FzdF9jb21wcmVzc2lvbi5o IgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z193YWxkdW1wLy5naXRpZ25vcmUgYi9zcmMvYmluL3BnX3dhbGR1bXAvLmdpdGlnbm9yZQpp bmRleCBlYzUxZjQxYzc2Ny4uYTNjMDI0NDZiOWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf d2FsZHVtcC8uZ2l0aWdub3JlCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC8uZ2l0aWdub3Jl CkBAIC0xMCw2ICsxMCw3IEBACiAvZ2lzdGRlc2MuYwogL2hhc2hkZXNjLmMKIC9oZWFwZGVz Yy5jCisvaGVhcGFtX3hsb2dfZGZvci5jCiAvbG9naWNhbG1zZ2Rlc2MuYwogL214YWN0ZGVz Yy5jCiAvbmJ0ZGVzYy5jCkBAIC0yOCw1ICsyOSwxMyBAQAogL3hsb2dyZWFkZXIuYwogL3hs b2dzdGF0cy5jCiAKKyMgU291cmNlIGZpbGVzIGNvcGllZCBmcm9tIHNyYy9iYWNrZW5kL2xp YgorL2JpdHBhY2tfdGVtcGwuYworL2JpdHBhY2tfdTE2LmMKKy9kZm9yX3RlbXBsLmMKKy9k Zm9yX3UxNi5jCisvdmVjdF90ZW1wbC5jCisvdmVjdF91MTYuYworCiAjIEdlbmVyYXRlZCBi eSB0ZXN0IHN1aXRlCiAvdG1wX2NoZWNrLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxk dW1wL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ193YWxkdW1wL01ha2VmaWxlCmluZGV4IDRjMWVl NjQ5NTAxLi5mNmY4NGM5ODliOCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ193YWxkdW1wL01h a2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9NYWtlZmlsZQpAQCAtNSw4ICs1LDkg QEAgUEdBUFBJQ09OPXdpbjMyCiAKIHN1YmRpciA9IHNyYy9iaW4vcGdfd2FsZHVtcAogdG9w X2J1aWxkZGlyID0gLi4vLi4vLi4KLWluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtl ZmlsZS5nbG9iYWwKK2Rmb3JfZGlyIDo9ICQodG9wX2J1aWxkZGlyKS9zcmMvYmFja2VuZC9s aWIKIAoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogT0JK UyA9IFwKIAkkKFJNR1JERVNDT0JKUykgXAogCSQoV0lOMzJSRVMpIFwKQEAgLTE2LDkgKzE3 LDEyIEBAIE9CSlMgPSBcCiAJeGxvZ3JlYWRlci5vIFwKIAl4bG9nc3RhdHMubwogCitpbmNs dWRlICQoZGZvcl9kaXIpL01ha2VmaWxlLmRmb3IKK09CSlMgKz0gJChPQkpTX0RGT1IpCisK IG92ZXJyaWRlIENQUEZMQUdTIDo9IC1ERlJPTlRFTkQgJChDUFBGTEFHUykKIAotUk1HUkRF U0NTT1VSQ0VTID0gJChzb3J0ICQobm90ZGlyICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9z cmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvKmRlc2MqLmMpKSkKK1JNR1JERVNDU09VUkNF UyA9ICQoc29ydCAkKG5vdGRpciAkKHdpbGRjYXJkICQodG9wX3NyY2Rpcikvc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjLypkZXNjKi5jKSkpIGhlYXBhbV94bG9nX2Rmb3IuYwogUk1H UkRFU0NPQkpTID0gJChwYXRzdWJzdCAlLmMsJS5vLCQoUk1HUkRFU0NTT1VSQ0VTKSkKIAog CkBAIC0yNyw2ICszMSwyNCBAQCBhbGw6IHBnX3dhbGR1bXAKIHBnX3dhbGR1bXA6ICQoT0JK UykgfCBzdWJtYWtlLWxpYnBncG9ydAogCSQoQ0MpICQoQ0ZMQUdTKSAkXiAkKExERkxBR1Mp ICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAorYml0cGFja190ZW1wbC5jOiAl IDogJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9saWIvJQorCXJtIC1mICRAICYmICQoTE5f UykgJDwgLgorCitiaXRwYWNrX3UxNi5jOiAlIDogJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2Vu ZC9saWIvJSBiaXRwYWNrX3RlbXBsLmMKKwlybSAtZiAkQCAmJiAkKExOX1MpICQ8IC4KKwor ZGZvcl90ZW1wbC5jOiAlIDogJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9saWIvJQorCXJt IC1mICRAICYmICQoTE5fUykgJDwgLgorCitkZm9yX3UxNi5jOiAlIDogJCh0b3Bfc3JjZGly KS9zcmMvYmFja2VuZC9saWIvJSBkZm9yX3RlbXBsLmMKKwlybSAtZiAkQCAmJiAkKExOX1Mp ICQ8IC4KKwordmVjdF90ZW1wbC5jOiAlIDogJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9s aWIvJQorCXJtIC1mICRAICYmICQoTE5fUykgJDwgLgorCit2ZWN0X3UxNi5jOiAlIDogJCh0 b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9saWIvJSB2ZWN0X3RlbXBsLmMKKwlybSAtZiAkQCAm JiAkKExOX1MpICQ8IC4KKwogeGxvZ3JlYWRlci5jOiAlIDogJCh0b3Bfc3JjZGlyKS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS8lCiAJcm0gLWYgJEAgJiYgJChMTl9TKSAkPCAuCiAK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nLmgKaW5kZXggY2UzNTY2YmE5NDkuLmRkMWQwNjg2 MGJhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtX3hsb2cuaAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtX3hsb2cuaApAQCAtMTUsNiArMTUsNyBAQAog I2RlZmluZSBIRUFQQU1fWExPR19ICiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cC5oIgorI2lu Y2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3Jl YWRlci5oIgogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9idWYuaCIKQEAgLTMzOSw2ICszNDAsOCBAQCB0eXBlZGVmIHN0cnVjdCB4bF9oZWFwX3By dW5lCiAjZGVmaW5lCQlYTEhQX1ZNX0FMTF9WSVNJQkxFCQkJKDEgPDwgOCkKICNkZWZpbmUJ CVhMSFBfVk1fQUxMX0ZST1pFTgkJCSgxIDw8IDkpCiAKKyNkZWZpbmUJCVhMSFBfREZPUl9D T01QUkVTU0VECQkoMSA8PCAxMCkKKwogLyoKICAqIHhsaHBfZnJlZXplX3BsYW4gZGVzY3Jp YmVzIGhvdyB0byBmcmVlemUgYSBncm91cCBvZiBvbmUgb3IgbW9yZSBoZWFwIHR1cGxlcwog ICogKGFwcGVhcnMgaW4geGxfaGVhcF9wcnVuZSdzIHhsaHBfZnJlZXplX3BsYW5zIHN1Yi1y ZWNvcmQpCkBAIC01MTEsNiArNTE0LDcgQEAgZXh0ZXJuIHZvaWQgaGVhcF94bG9nX2Rlc2Vy aWFsaXplX3BydW5lX2FuZF9mcmVlemUoY2hhciAqY3Vyc29yLCB1aW50MTYgZmxhZ3MsCiAJ CQkJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgKipmcnpfb2Zmc2V0cywKIAkJCQkJCQkJCQkJ CSAgIGludCAqbnJlZGlyZWN0ZWQsIE9mZnNldE51bWJlciAqKnJlZGlyZWN0ZWQsCiAJCQkJ CQkJCQkJCQkgICBpbnQgKm5kZWFkLCBPZmZzZXROdW1iZXIgKipub3dkZWFkLAotCQkJCQkJ CQkJCQkJICAgaW50ICpudW51c2VkLCBPZmZzZXROdW1iZXIgKipub3d1bnVzZWQpOworCQkJ CQkJCQkJCQkJICAgaW50ICpudW51c2VkLCBPZmZzZXROdW1iZXIgKipub3d1bnVzZWQsCisJ CQkJCQkJCQkJCQkgICB1aW50OCBkZm9yX2J1ZltdKTsKIAotI2VuZGlmCQkJCQkJCS8qIEhF QVBBTV9YTE9HX0ggKi8KKyNlbmRpZgkJCQkJCQkvKiBIRUFQQU1fWExPR19IICovClwgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbV94bG9nX2Rmb3IuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZ19k Zm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI3NGIxNGU4 OTFlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9n X2Rmb3IuaApAQCAtMCwwICsxLDEzNyBAQAorI2lmbmRlZiBIRUFQQU1fWExPR19ERk9SX0gK KyNkZWZpbmUgSEVBUEFNX1hMT0dfREZPUl9ICisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgor CisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImxpYi9kZm9y X3UxNi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgorCisvKgorICogREZvUidz IG1ldGEgYmxvY2sgZm9yIFBSVU5FL0ZSRUVaRSByZWNvcmQKKyAqCisgKiBBIG1ldGEgYmxv Y2sgY29udGFpbnMgcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgZGVjb21wcmVzc2lvbiBvZiB0 aGUgZm9sbG93aW5nCisgKiBERm9SIHBhY2suIEl0IGlzIGRlbnNlbHkgYml0LXBhY2tlZC4g SWYgdGhlIGV4Y2VwdGlvbiBmbGFnIGlzIHplcm8sIGZpZWxkcworICogcGVydGFpbmluZyB0 byBleGNlcHRpb25zIGlzIGFic2VudCwgd2hpY2ggbWVhbnMgdGhhdCBERm9SIHBhY2sgZG9l cyBub3QKKyAqIGNvbnRhaW4gZXhjZXB0aW9ucy4gQ2FsY3VsYXRpb24gb2YgZmllbGQgd2lk dGhzIHRha2VzIGludG8gYWNjb3VudAorICogbmV4dCBjb25zaWRlcmF0aW9uczoKKyAqCisg KiBNYXggSXRlbSBDb3VudCBzaG91bGQgYmUgbW9yZSBvciBlcXVhbCB0byBNYXhIZWFwVHVw bGVzUGVyUGFnZS4gU2luY2Ugd2UKKyBjYW4ndCBjYWxjdWxhdGUKKyAqIE1heEhlYXBUdXBs ZXNQZXJQYWdlIG9uIHByZXByb2Nlc3NvciBzdGFnZSwgd2UgaW50ZW50aW9uYWxseSBvdmVy ZXN0aW1hdGUgaXQKKyAqIGFzOgorICogICAgICAgTWF4IEl0ZW0gQ291bnQgPiBCTENLU1og LyBNaW4gVHVwbGUgU2l6ZSA9IEJMQ0tTWiAvIDI0CisgKiB0byBwcm92aWRlIGEgbWFyZ2lu LiBJbiBnZW5lcmFsLCBkZXBlbmRpbmcgb24gQkxDS1NaLCBpdCBzaG91bGQgbm90IHJlc3Vs dCBpbgorICogREZvUiBtZXRhIGJsb2NrIG92ZXJoZWFkLgorICogRm9yIGluc3RhbmNlLCBm b3IgYSBibG9jayBzaXplIG9mIDMyNzY4LCB3ZSBoYXZlIE1heCBJdGVtIENvdW50ID0gMTM2 NiwgYW5kCisgKiBpdCBuZWVkcyAxMSBiaXRzIHdpZHRoIGZpZWxkLgorICoKKyAqIFNpemUg b2YgZmllbGQgSXRlbSBDb3VudDoKKyAqICAgICAgIElURU1fQ09VTlRfU1ogPSBsb2cyKE1h eEl0ZW1Db3VudCkuCisgKgorICogTWF4aW11bSBEZWx0YSBXaWR0aCBpcyBlcXVhbCB0byBJ VEVNX0NPVU5UX1NaLiBTbyBERUxUQV9XSURUSF9TWiBpbiBhIERGb1IKKyAqIG1ldGEgYmxv Y2sgY2FuIGJlIGNhbGN1bGF0ZWQgYXM6CisgKiAgICAgIERFTFRBX1dJRFRIX1NaID49IGxv ZzIoTWF4IERlbHRhIFdpZHRoKSA9IGxvZzIoSVRFTV9DT1VOVF9TWikKKyAqCisgKiBNYXgg RXhjZXB0aW9uIENvdW50ID0gMC4xICogTWF4SXRlbUNvdW50LCBhY2NvcmRpbmcgdG8gREZv UiBhbGdvcml0aG0gd2hpY2gKKyAqIGd1YXJhbnRlZXMgdGhhdCBub3QgbGVzcyB0aGFuIDkw JSBvZiBpdGVtcyB3aWxsIGJlIGNvdmVyZWQgd2l0aG91dCB1c2luZworICogZXhjZXB0aW9u cy4gU286CisgKiAgICAgIEVYQ0VQVElPTl9DT1VOVF9TWiA+PSBsb2cyKDAuMSAqIE1heEl0 ZW1Db3VudCkuCisgKgorICogQW4gZXhjZXB0aW9uIGlzIHBhcnQgb2YgYSBkZWx0YSwgZXhj ZWVkaW5nIGNob29zZW4gZGVsdGEgd2lkdGguIEV4Y2VwdGlvbiBpcworICogc2F2ZWQgaW4g c2VwYXJhdGVkIHBhcnQgb2YgREZvUiBwYWNrIGFuZCwgc2luY2UgZGVsdGEgd2lkdGggaXMg bm90IGxlc3MKKyAqIHRoYW4gMToKKyAqICAgIEVYQ0VQVElPTl9XSURUSF9TWiA+PSBsb2cy KE1heCBEZWx0YSBXaWR0aCAtIDEpID0gbG9nMihJVEVNX0NPVU5UX1NaIC0gMSkuCisgKgor ICogQW4gZXhjZXB0aW9uJ3MgcG9zaXRpb24gc2hvd3MgdGhlIHBvc2l0aW9uIG9mIG9mIGEg ZGVsdGEgdG8gd2ljaCB0aGUKKyAqIGV4Y2VwdGlvbiBoYXMgdG8gYmUgYXBwbGllZC4gVmFs dWVzIG9mIGFuIGV4Y2VwdGlvbiBwb3NpdGlvbiBtdXN0IGNvdmVyIHRoZQorICogc2FtZSB2 YWx1ZSByYW5nZSBhcyBhbiBJdGVtIENvdW50LCBzbyB0aGUgTWF4IFdpZHRoIG9mIGFuIEV4 Y2VwdGlvbiBQb3NpdGlvbgorICogaXMgZXF1YWwgdG8gd2lkdGggb2YgRGVsdGEuIENvbnNl cXVlbnRseSwgdGhlIHNpemUgb2YgRXhjZXB0aW9uIFBvc2l0aW9uCisgKiBXaWR0aCBjYWxj dWxhdGVkIGFzOgorICogICAgIEVYQ0VQVElPTl9QT1NJVElPTl9XSURUSF9TSVpFID0gbG9n MihNYXggRGVsdGEgV2lkdGgpID0gREVMVEFfV0lEVEhfU1oKKyAqCisgKiBGb3IgZXhhbXBs ZSwgTWV0YSBmb3IgQkxDS1NaIGVxdWFsIHRvIDMyNzY4IGhhcyBuZXh0IHNpemVzIG9mIGZp ZWxkCisgKiB8IHNlY3QuIHwgYnl0ZSB8IGJpdHMgICAgICB8ICAgcGFyYW0gICAgICAgICAg IHwgIHNpemUgIHwgcmFuZ2Ugb2YgdmFsdWVzIHwKKyAqIHwtLS0tLS0tfC0tLS0tLXwtLS0t LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0t fAorICogfCAgbWFpbiB8IDAsIDEgfCAwLTEwICAgICAgfCBpdGVtIGNvdW50ICAgICAgICB8 IDExIGJpdCB8IDEuLi4xMzY1ICAgICAgICB8CisgKiB8ICBtYWluIHwgICAgMSB8IDExLTE0 ICAgICB8IGRlbHRhIHdpZHRoICAgICAgIHwgIDQgYml0IHwgMS4uLjExICAgICAgICAgIHwK KyAqIHwgIG1haW4gfCAgICAxIHwgMTUgICAgICAgIHwgZXh0cmEgc2VjdC4gZmxhZyAgfCAg MSBiaXQgfCAwLi4uMSAgICAgICAgICAgfAorICogfCBleHRyYSB8ICAgIDIgfCAxNi0yMyAg ICAgfCBleGNlcHRpb24gY291bnQgICB8ICA4IGJpdCB8IDAuLi4xMzcgICAgICAgICB8Cisg KiB8IGV4dHJhIHwgICAgMyB8IDI0LTI3ICAgICB8IGV4Y2VwdGlvbiB3aWR0aCAgIHwgIDQg Yml0IHwgMC4uLjEwICAgICAgICAgIHwKKyAqIHwgZXh0cmEgfCAzLCA0IHwgMjgtMzUgICAg IHwgZXhjZXB0IHBvcy4gd2lkdGggfCAgNCBiaXQgfCAxLi4uMTEgICAgICAgICAgfAorICov CisKKy8qCisgKiBUaGUgc2l6ZXMgb2YgZmllbGRzIGluIHRoZSBjb21wcmVzc2VkIERGb1Ig TWV0YSBzdHJ1Y3R1cmUgb2YgYW4KKyAqIFhMT0dfSEVBUDJfUFJVTkUqIHJlY29yZC4KKyAq LworI2lmIEJMQ0tTWiA9PSAzMjc2OAorI2RlZmluZSBYTEhQRl9NRVRBX0lURU1fQ09VTlRf U1ogIDExCisjZGVmaW5lIFhMSFBGX01FVEFfREVMVEFfV0lEVEhfU1ogNAorI2VsaWYgQkxD S1NaID09IDE2Mzg0CisjZGVmaW5lIFhMSFBGX01FVEFfSVRFTV9DT1VOVF9TWiAgMTAKKyNk ZWZpbmUgWExIUEZfTUVUQV9ERUxUQV9XSURUSF9TWiA0CisjZWxpZiBCTENLU1ogPT0gODE5 MgorI2RlZmluZSBYTEhQRl9NRVRBX0lURU1fQ09VTlRfU1ogIDkKKyNkZWZpbmUgWExIUEZf TUVUQV9ERUxUQV9XSURUSF9TWiA0CisjZWxpZiBCTENLU1ogPT0gNDA5NgorI2RlZmluZSBY TEhQRl9NRVRBX0lURU1fQ09VTlRfU1ogIDgKKyNkZWZpbmUgWExIUEZfTUVUQV9ERUxUQV9X SURUSF9TWiA0CisjZWxpZiBCTENLU1ogPT0gMjA0OAorI2RlZmluZSBYTEhQRl9NRVRBX0lU RU1fQ09VTlRfU1ogIDcKKyNkZWZpbmUgWExIUEZfTUVUQV9ERUxUQV9XSURUSF9TWiAzCisj ZWxpZiBCTENLU1ogPT0gMTAyNAorI2RlZmluZSBYTEhQRl9NRVRBX0lURU1fQ09VTlRfU1og IDYKKyNkZWZpbmUgWExIUEZfTUVUQV9ERUxUQV9XSURUSF9TWiAzCisjZWxpZiBCTENLU1og PT0gNTEyCisjZGVmaW5lIFhMSFBGX01FVEFfSVRFTV9DT1VOVF9TWiAgNQorI2RlZmluZSBY TEhQRl9NRVRBX0RFTFRBX1dJRFRIX1NaIDMKKyNlbGlmIEJMQ0tTWiA9PSAyNTYKKyNkZWZp bmUgWExIUEZfTUVUQV9JVEVNX0NPVU5UX1NaICA0CisjZGVmaW5lIFhMSFBGX01FVEFfREVM VEFfV0lEVEhfU1ogMworI2VsaWYgQkxDS1NaID09IDEyOAorI2RlZmluZSBYTEhQRl9NRVRB X0lURU1fQ09VTlRfU1ogIDMKKyNkZWZpbmUgWExIUEZfTUVUQV9ERUxUQV9XSURUSF9TWiAy CisjZWxpZiBCTENLU1ogPT0gNjQKKyNkZWZpbmUgWExIUEZfTUVUQV9JVEVNX0NPVU5UX1Na ICAyCisjZGVmaW5lIFhMSFBGX01FVEFfREVMVEFfV0lEVEhfU1ogMgorI2Vsc2UKKyNlcnJv ciAiVW5zdXBwb3J0ZWQgQkxDS1NaIGluIFhMb2cgSGVhcCBBbmQgUHJ1bmUuIgorI2VuZGlm CisKKyNkZWZpbmUgWExIUEZfTUVUQV9FWENFUFRJT05fRkxBR19TWiAxIC8qIEZsYWcgYWJv dXQgRXh0cmEgU2VjdGlvbiBwcmVzZW5jZSAqLworCisvKiBTaXplIG9mIEV4Y2VwdGlvbiBD b3VudCBmaWVsZCAqLworI2lmIFhMSFBGX01FVEFfSVRFTV9DT1VOVF9TWiA+IDYKKyNkZWZp bmUgWExIUEZfTUVUQV9FWENFUFRJT05fQ09VTlRfU1ogWExIUEZfTUVUQV9JVEVNX0NPVU5U X1NaIC0gMworI2Vsc2UKKyNkZWZpbmUgWExIUEZfTUVUQV9FWENFUFRJT05fQ09VTlRfU1og WExIUEZfTUVUQV9JVEVNX0NPVU5UX1NaIDMKKyNlbmRpZgorCisjZGVmaW5lIFhMSFBGX01F VEFfRVhDRVBUSU9OX1dJRFRIX1NaIFwKKwlYTEhQRl9NRVRBX0RFTFRBX1dJRFRIX1NaIC8q IFNpemUgb2YgRXhjZXB0aW9uIFdpZHRoIGZpZWxkICovCisKKyNkZWZpbmUgWExIUEZfTUVU QV9FWENFUFRJT05fUE9TSVRJT05fV0lEVEhfU1ogXAorCVhMSFBGX01FVEFfREVMVEFfV0lE VEhfU1ogLyogU2l6ZSBvZiBFeGNlcHRpb24gUG9zaXRpb24gd2lkdGggZmllbGQgKi8KKwor LyogTWF4aW1hbCBzaXplIG9mIHBhY2tlZCBtZXRhICovCisjZGVmaW5lIE1BWF9QQUNLRURf TUVUQV9TSVpFIFwKKwkoWExIUEZfTUVUQV9JVEVNX0NPVU5UX1NaICsgWExIUEZfTUVUQV9E RUxUQV9XSURUSF9TWiArICAgICAgICAgICAgICAgICAgXAorCSBYTEhQRl9NRVRBX0VYQ0VQ VElPTl9GTEFHX1NaICsgWExIUEZfTUVUQV9FWENFUFRJT05fUE9TSVRJT05fV0lEVEhfU1og KyBcCisJIFhMSFBGX01FVEFfRVhDRVBUSU9OX1dJRFRIX1NaICsgWExIUEZfTUVUQV9FWENF UFRJT05fQ09VTlRfU1ogKyA3KSAvIDgKKworLyogVGhlIHNpemUgb2YgYSB0eXBpY2FsIGNo dW5rIG9mIG1lbW9yeSB1c2VkIGJ5IGRmb3JfcGFjayAqLworI2RlZmluZSBERk9SX0JVRl9Q QVJUX1NJWkUgTWF4SGVhcFR1cGxlc1BlclBhZ2UgKiBzaXplb2YodWludDE2KQorCitleHRl cm4gYm9vbCB3YWxfcHJ1bmVfZGZvcl9jb21wcmVzc2lvbjsgLyogR1VDICovCisKK2V4dGVy biBzaXplX3QgbG9nX2hlYXBfcHJ1bmVfYW5kX2ZyZWV6ZV9wYWNrX21ldGEoY29uc3QgZGZv cl9tZXRhX3QgKm1ldGEsCisJCQkJCQkJCQkJCQkgIHVpbnQ4IGJ1ZltdKTsKKworZXh0ZXJu IHNpemVfdCBsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplX3VucGFja19tZXRhKGRmb3JfbWV0 YV90ICptZXRhLAorCQkJCQkJCQkJCQkJCWNvbnN0IHVpbnQ4IHBhY2tlZF9tZXRhW10pOwor CitleHRlcm4gdm9pZCBoZWFwX3hsb2dfZGVzZXJpYWxpemVfZGZvcihjaGFyICoqY3Vyc29y LCBpbnQgKm5pdGVtcywKKwkJCQkJCQkJCSAgIE9mZnNldE51bWJlciAqKml0ZW1zLCB1aW50 OCBkZm9yX2J1ZltdKTsKKworI2VuZGlmCQkJCQkJCS8qIEhFQVBBTV9YTE9HX0RGT1JfSCAq LwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2Rm b3IvTWFrZWZpbGUgYi9zcmMvdGVzdC9kZm9yL01ha2VmaWxlCmluZGV4IGY3MjA0YmFhMjA3 Li41ZTMwYjUyZDU4NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvZGZvci9NYWtlZmlsZQorKysg Yi9zcmMvdGVzdC9kZm9yL01ha2VmaWxlCkBAIC00Miw2ICs0Miw4IEBAIGNoZWNrLXVuaXQ6 ICQoVEVTVFMpCiAJY2QgJCh0b3BfYnVpbGRkaXIpLyQoc3ViZGlyKSAmJiBcCiAJICAgJChQ Uk9WRSkgJChQUk9WRV9GTEFHUykgXAogCSAgICAtdiAkKGFkZHByZWZpeCAuLywkKGlmICQo UFJPVkVfVEVTVFMpLCAkKFBST1ZFX1RFU1RTKSwgJChURVNUUykpKQorIyBUaGUgZXhhbXBs ZSBvZiB1c2luZyB0aGUgY2hlY2stdW5pdCBydWxlOgorIwkJbWFrZSBjaGVjay11bml0IFBS T1ZFX1RFU1RTPSd0ZXN0X2Rmb3JfdTE2JyBQUk9WRV9GTEFHUz0nLS12ZXJib3NlJwogCiBj aGVjazogY2hlY2stdW5pdAogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA1 Ml9wcnVuZV9kZm9yX2NvbXByZXNzaW9uLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTJf cHJ1bmVfZGZvcl9jb21wcmVzc2lvbi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uODE5OTg0YWE1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9y ZWNvdmVyeS90LzA1Ml9wcnVuZV9kZm9yX2NvbXByZXNzaW9uLnBsCkBAIC0wLDAgKzEsMTU1 IEBACit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9y ZTsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyMgV29ya2xvYWQgZ2VuZXJhdGluZyBkZWFkIHR1cGxlcyBhbmQg UFJVTkUgV0FMCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIGdlbmVyYXRlX3BydW5lX3dvcmtsb2FkCit7Cisg ICAgbXkgKCRub2RlKSA9IEBfOworCisgICAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxeworICAgICAgICBDUkVBVEUgVEFCTEUgdF9wcnVuZSAoCisgICAgICAgICAgICBpZCBp bnQsCisgICAgICAgICAgICB2YWwgdGV4dAorICAgICAgICApIFdJVEggKGZpbGxmYWN0b3Ig PSAxMDApOworICAgIH0pOworCisgICAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx eworICAgICAgICBTRVQgdmFjdXVtX2ZyZWV6ZV9taW5fYWdlID0gMDsKKyAgICAgICAgU0VU IHZhY3V1bV9mcmVlemVfdGFibGVfYWdlID0gMDsKKyAgICB9KTsKKworICAgICMgSW5zZXJ0 IG1hbnkgdHVwbGVzCisgICAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworICAg ICAgICBJTlNFUlQgSU5UTyB0X3BydW5lCisgICAgICAgIFNFTEVDVCBnLCAneCcKKyAgICAg ICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwMDApIGc7CisgICAgfSk7CisKKyAgICAj IERlbGV0ZSA4MCUgb2YgcmVjb3JkcworICAgICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcXsKKyAgICAgICAgREVMRVRFIEZST00gdF9wcnVuZQorCQlXSEVSRSBpZCAlIDU1MCA8 PSA1NDA7CisgICAgfSk7CisKKyAgICAjIFZBQ1VVTSBjeWNsZXMgdG8gdHJpZ2dlciBQUlVO RQorICAgIGZvciBteSAkaSAoMS4uMykKKyAgICB7CisgICAgICAgICRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXsgVkFDVVVNIEZSRUVaRSB0X3BydW5lOyB9KTsKKyAgICB9Cit9 CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisjIFdBTCBhbmFseXplcgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBjb2xsZWN0X3By dW5lX3N0YXRzCit7CisgICAgbXkgKCRub2RlKSA9IEBfOworCisJbXkgJHdhbF9kaXIgPSAk bm9kZS0+ZGF0YV9kaXIgLiAiL3BnX3dhbCI7CisKKwlwcmludCAid2FsX2Rpcj0iIC4gJHdh bF9kaXIgLiJcbiI7CisKKyAgICAjIEZpbmQgdGhlIGZpcnN0IFdBTCBzZWdtZW50CisgICAg bXkgQHdhbF9maWxlcyA9IHNvcnQgZ2xvYigiJHdhbF9kaXIvWzAtOUEtRl0qIik7CisgICAg bXkgJHN0YXJ0X3NlZyA9ICR3YWxfZmlsZXNbMF07CisKKyAgICBkaWUgIk5vIFdBTCBmaWxl cyBmb3VuZCIgdW5sZXNzIGRlZmluZWQgJHN0YXJ0X3NlZzsKKworCSMgUnVuIHBnX3dhbGR1 bXAgb24gYWxsIHNlZ21lbnRzCisJbXkgJGNtZCA9ICJwZ193YWxkdW1wIC0tcm1ncj1IZWFw MiAtcCAkd2FsX2RpciAkc3RhcnRfc2VnIDI+L2Rldi9udWxsIjsKKworICAgIG15IEBsaW5l cyA9IGAkY21kYDsKKworcHJpbnQgImxpbmVzPSIgLiBAbGluZXMgLiAiXG4iOworCisgICAg bXkgJHJlY29yZHMgPSAwOworICAgIG15ICRieXRlcyAgID0gMDsKKworICAgIGZvcmVhY2gg bXkgJGxpbmUgKEBsaW5lcykKKyAgICB7CisgICAgICAgIG5leHQgdW5sZXNzICRsaW5lID1+ IC9QUlVORV9WQUNVVU1fU0NBTi87CisgICAgICAgICRyZWNvcmRzKys7CisgICAgICAgIGlm ICgkbGluZSA9fiAvbGVuIFwocmVjXC90b3RcKTpccypcZCtcL1xzKihcZCspLykKKyAgICAg ICAgeworICAgICAgICAgICAgJGJ5dGVzICs9ICQxOworICAgICAgICB9CisgICAgfQorCXBy aW50ICJyZWNvcmRzPSIgLiAkcmVjb3JkcyAuICI7IGJ5dGVzPSIgLiAkYnl0ZXMgLiJcbiI7 CisgICAgcmV0dXJuICgkcmVjb3JkcywgJGJ5dGVzKTsKK30KKworCisjIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBS dW4gdGVzdCBvbiBhIGZyZXNoIGNsdXN0ZXIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgcnVuX2NsdXN0ZXJf dGVzdAoreworICAgIG15ICgkbmFtZSwgJGNvbXByZXNzaW9uKSA9IEBfOworCisgICAgbXkg JG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJG5hbWUpOworCisgICAg JG5vZGUtPmluaXQ7CisKKyAgICAkbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsIHFxeworCQl3YWxfbGV2ZWwgPSByZXBsaWNhCisJCWF1dG92YWN1dW0gPSBvZmYKKwkJ d2FsX3BydW5lX2Rmb3JfY29tcHJlc3Npb24gPSAkY29tcHJlc3Npb24KKwl9KTsKKworICAg ICRub2RlLT5zdGFydDsKKworICAgIGdlbmVyYXRlX3BydW5lX3dvcmtsb2FkKCRub2RlKTsK KworICAgICRub2RlLT5zdG9wOworCisgICAgcmV0dXJuIGNvbGxlY3RfcHJ1bmVfc3RhdHMo JG5vZGUpOworfQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDbHVzdGVyIDE6IGNvbXByZXNzaW9uIE9GRgor IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KK215ICgkb2ZmX2NvdW50LCAkb2ZmX2J5dGVzKSA9IHJ1bl9jbHVzdGVyX3Rl c3QoCisgICAgInBydW5lX2Rmb3Jfb2ZmIiwKKyAgICAib2ZmIgorKTsKKworbm90ZSgiQ29t cHJlc3Npb24gT0ZGOiAkb2ZmX2NvdW50IHJlY29yZHMsICRvZmZfYnl0ZXMgYnl0ZXMiKTsK KworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyMgQ2x1c3RlciAyOiBjb21wcmVzc2lvbiBPTgorIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK215 ICgkb25fY291bnQsICRvbl9ieXRlcykgPSBydW5fY2x1c3Rlcl90ZXN0KAorICAgICJwcnVu ZV9kZm9yX29uIiwKKyAgICAib24iCispOworCitub3RlKCJDb21wcmVzc2lvbiBPTjogJG9u X2NvdW50IHJlY29yZHMsICRvbl9ieXRlcyBieXRlcyIpOworCisjIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21w cmVzc2lvbiByYXRpbworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK215ICRyYXRpbyA9ICJOL0EiOworCitpZiAoJG9u X2J5dGVzID4gMCkKK3sKKyAgICAkcmF0aW8gPSBzcHJpbnRmKCIlLjJmIiwgJG9mZl9ieXRl cyAvICRvbl9ieXRlcyk7Cit9CisKK25vdGUoIkNvbXByZXNzaW9uIHJhdGlvICh1bmNvbXBy ZXNzZWQvY29tcHJlc3NlZCk6ICRyYXRpbyIpOworbm90ZSgiTnVtZXJhdG9yICAgKHVuY29t cHJlc3NlZCBieXRlcyk6ICRvZmZfYnl0ZXMiKTsKK25vdGUoIkRlbm9taW5hdG9yIChjb21w cmVzc2VkIGJ5dGVzKTogICAkb25fYnl0ZXMiKTsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwZWN0IGNv bXByZXNzaW9uIGJlbmVmaXQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjbXBfb2soCisgICAgJHJhdGlvLCAnPj0n LCA1LAorICAgICdERk9SIGNvbXByZXNzaW9uIHNob3VsZCByZWR1Y2UgdGhlIHNpemUgb2Yg V0FMIGJ5IGF0IGxlYXN0IDUgdGltZXMuJworKTsKKworZG9uZV90ZXN0aW5nKCk7ClwgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQotLSAKMi41My4wCgo= --------------lJZjohOnP3WxZVzV3LqV3g0v--