From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: [PATCH v4] displif: add ABI for para-virtual display Date: Mon, 20 Mar 2017 10:56:32 +0200 Message-ID: <1490000192-17467-2-git-send-email-andr2000@gmail.com> References: <1490000192-17467-1-git-send-email-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cpt7Q-0003x7-82 for xen-devel@lists.xenproject.org; Mon, 20 Mar 2017 08:56:48 +0000 Received: by mail-wm0-f65.google.com with SMTP id n11so13049206wma.0 for ; Mon, 20 Mar 2017 01:56:46 -0700 (PDT) In-Reply-To: <1490000192-17467-1-git-send-email-andr2000@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: lars.kurth@citrix.com, vlad.babchuk@gmail.com, Oleksandr Andrushchenko , julien.grall@arm.com, andrii.anisov@gmail.com, olekstysh@gmail.com, andr2000@gmail.com, al1img@gmail.com, Oleksandr Grytsov , joculator@gmail.com List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVw YW0uY29tPgoKVGhpcyBpcyB0aGUgQUJJIGZvciB0aGUgdHdvIGhhbHZlcyBvZiBhIHBhcmEtdmly dHVhbGl6ZWQKZGlzcGxheSBkcml2ZXIuCgpUaGlzIHByb3RvY29sIGFpbXMgdG8gcHJvdmlkZSBh IHVuaWZpZWQgcHJvdG9jb2wgd2hpY2ggZml0cyBtb3JlCnNvcGhpc3RpY2F0ZWQgdXNlLWNhc2Vz IHRoYW4gYSBmcmFtZWJ1ZmZlciBkZXZpY2UgY2FuIGhhbmRsZS4gQXQgdGhlCm1vbWVudCBiYXNp YyBmdW5jdGlvbmFsaXR5IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBpbnRlbnRpb24gdG8gZXh0ZW5k OgogIG8gbXVsdGlwbGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkL2Rlc3Ryb3llZCBmcmFtZWJ1ZmZl cnMKICBvIGJ1ZmZlcnMgb2YgYXJiaXRyYXJ5IHNpemVzCiAgbyBiZXR0ZXIgY29uZmlndXJhdGlv biBvcHRpb25zIGluY2x1ZGluZyBtdWx0aXBsZSBkaXNwbGF5IHN1cHBvcnQKCk5vdGU6IGV4aXN0 aW5nIGZiaWYgY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBkaXNwbGlmIHJ1bm5pbmcgYXQgdGhl CnNhbWUgdGltZSwgZS5nLiBvbiBMaW51eCBvbmUgcHJvdmlkZXMgZnJhbWVidWZmZXIgYW5kIGFu b3RoZXIgRFJNL0tNUwoKRnV0dXJlIGV4dGVuc2lvbnMgdG8gdGhlIGV4aXN0aW5nIHByb3RvY29s IG1heSBpbmNsdWRlOgogIG8gYWxsb3cgZGlzcGxheS9jb25uZWN0b3IgY2xvbmluZwogIG8gYWxs b3cgYWxsb2NhdGluZyBvYmplY3RzIG90aGVyIHRoYW4gZGlzcGxheSBidWZmZXJzCiAgbyBhZGQg cGxhbmVzL292ZXJsYXlzIHN1cHBvcnQKICBvIHN1cHBvcnQgc2NhbGluZwogIG8gc3VwcG9ydCBy b3RhdGlvbgoKTm90ZSwgdGhhdCB0aGlzIHByb3RvY29sIGRvZXNuJ3QgdXNlIHJpbmcgbWFjcm9z IGZvcgpiaS1kaXJlY3Rpb25hbCBleGNoYW5nZSAoUFYgY2FsbHMvOXBmcykgYmFjYXVzZToKICBv IGl0IHN0YXRpY2FsbHkgZGVmaW5lcyB0aGUgdXNlIG9mIGEgc2luZ2xlIHBhZ2UKICAgIGZvciB0 aGUgcmluZyBidWZmZXIKICBvIGl0IHVzZXMgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgdG8gcmluZydz IGNvbnRlbnRzCiAgICB3L28gbWVtb3J5IGNvcHlpbmcKICBvIHJlLXVzZXMgdGhlIHNhbWUgaWRl YSB0aGF0IGtiZGlmL2ZiaWYgdXNlCiAgICB3aGljaCBmb3IgdGhpcyB1c2UtY2FzZSBzZWVtcyB0 byBiZSBhcHByb3ByaWF0ZQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUmF0aW9uYWxlIGZvciBpbnRyb2R1Y2luZyB0aGlzIHByb3RvY29sIGluc3Rl YWQgb2YKdXNpbmcgdGhlIGV4aXN0aW5nIGZiaWY6Cj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CgoxLiBJbi9vdXQgZXZlbnQgc2l6ZXMKICBvIGZiaWYg LSA0MCBvY3RldHMKICBvIGRpc3BsaWYgLSA0MCBvY3RldHMKVGhpcyBpcyBvbmx5IHRoZSBpbml0 aWFsIHZlcnNpb24gb2YgdGhlIGRpc3BsaWYgcHJvdG9jb2wKd2hpY2ggbWVhbnMgdGhhdCB0aGVy ZSBjb3VsZCBiZSByZXF1ZXN0cyB3aGljaCB3aWxsIG5vdCBmaXQKKFdSVCBpbnRyb2R1Y2luZyBz b21lIEdQVSByZWxhdGVkIGZ1bmN0aW9uYWxpdHkKbGF0ZXIgb24pLiBJbiB0aGF0IGNhc2Ugd2Ug Y2Fubm90IGFsdGVyIGZiaWYgc2l6ZXMgYXMgd2UgbmVlZCB0bwpiZSBiYWNrd2FyZCBjb21wYXRp YmxlIGFuIHdpbGwgYmUgZm9yY2VkIHRvIGhhbmRsZSB0aG9zZQphcGFydCBvZiBmYmlmLgoKMi4g U2hhcmVkIHBhZ2UKRGlzcGxpZiBkb2Vzbid0IHVzZSBhbnl0aGluZyBsaWtlIHN0cnVjdCB4ZW5m Yl9wYWdlLCBidXQKREVGSU5FX1JJTkdfVFlQRVMoeGVuX2Rpc3BsaWYsIHN0cnVjdCB4ZW5kaXNw bF9yZXEsIHN0cnVjdAp4ZW5kaXNwbF9yZXNwKSB3aGljaCBpcyBhIGJldHRlciBhbmQgbW9yZSBj b21tb24gd2F5LgpPdXRwdXQgZXZlbnRzIHVzZSBhIHNoYXJlZCBwYWdlIHdoaWNoIG9ubHkgaGFz IGluX2NvbnMgYW5kIGluX3Byb2QKYW5kIGFsbCB0aGUgcmVzdCBpcyB1c2VkIGZvciBpbmNvbWlu ZyBldmVudHMuIEhlcmUgc3RydWN0IHhlbmZiX3BhZ2UKY291bGQgcHJvYmFibHkgYmUgdXNlZCBh cyBpcyBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgaXQgb25seSBoYXMgYSBoYWxmCm9mIGEgcGFnZSBm b3IgaW5jb21pbmcgZXZlbnRzIHdoaWNoIGlzIG9ubHkgNTAgZXZlbnRzLiAoY29uc2lkZXIKc29t ZXRoaW5nIGxpa2UgNjBIeiBkaXNwbGF5KQoKMy4gQW1vdW50IG9mIGNoYW5nZXMuCmZiaWYgb25s eSBwcm92aWRlcyBYRU5GQl9UWVBFX1VQREFURSBhbmQgWEVORkJfVFlQRV9SRVNJWkUKZXZlbnRz LCBzbyBpdCBsb29rcyBsaWtlIGl0IGlzIGVhc2llciB0byBnZXQgZmIgc3VwcG9ydCBpbnRvIGRp c3BsaWYKdGhhbiB2aWNlIHZlcnNhLiBkaXNwbGlmIGF0IHRoZSBtb21lbnQgaGFzIDYgcmVxdWVz dHMgYW5kIDEgZXZlbnQsCm11bHRpcGxlIGNvbm5lY3RvciBzdXBwb3J0LCBldGMuCgotLS0KQ2hh bmdlcyBzaW5jZSB2MzoKICogYWRkIGNsYXJpZmljYXRpb24gb24gYnVmZmVyJ3Mgc2l6ZS9kZXB0 aC9mb3JtYXQgYW5kCiAgIGNvbm5lY3RvcidzIHJlc29sdXRpb24KICogbW92ZSBiZV9hbGxvYyBm ZWF0dXJlIGludG8gZG9tYWluJ3MgY29uZmlndXJhdGlvbgogICB0byBhbGxvdyBtb3JlIHVzZS1j YXNlcyBhbmQgZnJlZWRvbSAoZS5nLiBmb3IgMToxCiAgIG1hcHBlZCBkb21haW5zIHRoZXJlIG1h eSBiZSBubyBuZWVkIHRvIHJlcXVlc3QgYmFja2VuZAogICB0byBhbGxvY2F0ZSBidWZmZXJzLCB3 aGlsZSBmb3IgdGhlIHJlc3QgaXQgbWF5IG1ha2UgbW9yZQogICBzZW5zZSkKICogcmVuYW1lIFhl blN0b3JlIGVudHJpZXM6CiAgICAgY3RybC1yaW5nLXJlZiAtPiByZXEtcmluZy1yZWYKICAgICBj dHJsLWNoYW5uZWwgLT4gcmVxLWV2ZW50LWNoYW5uZWwKICAgICBldmVudC1yaW5nLXJlZiAtPiBl dnQtcmluZy1yZWYKICAgICBldmVudC1jaGFubmVsIC0+IGV2dC1ldmVudC1jaGFubmVsCiAqIGhh dmUgMiBzZXBhcmF0ZSBzZWN0aW9ucyBmb3IgcmVxL3Jlc3AgYW5kIGV2dCB0cmFuc3BvcnQKICAg cGFyYW1ldGVycwogKiBmaXggYW5kIGV4dGVuZCByZWNvdmVyeSBmbG93IGRlc2NyaXB0aW9uCiAq IHJlc2VydmUgcmVxdWVzdCBjb2RlcyBmb3IgZnV0dXJlIGZiaWYgaW50ZWdyYXRpb24gaWYgbmVl ZCBiZQogICAocmVxdWVzdCBjb2RlcyBbMDsgMTVdIGFyZSByZXNlcnZlZCkKICogZXJyb3Igb24g YXR0ZW1wdCB0byBjcmVhdGUgbXVsdGlwbGUgYnVmZmVycyB3aXRoIHNhbWUgY29va2llKHMpCiAq IGNsYXJpZmljYXRpb24gb2YgcGFnZSBkaXJlY3RvcnkgdXNhZ2UgZm9yIGJlX2FsbG9jIGZlYXR1 cmUKICogYWRkIGVkaXRvcidzIGJsb2NrCgpDaGFuZ2VzIHNpbmNlIHYyOgogKiB1cGRhdGVkIFhl blN0b3JlIGNvbmZpZ3VyYXRpb24gdGVtcGxhdGUvcGF0dGVybgogKiBhZGRlZCAiUmVjb3Zlcnkg ZmxvdyIgdG8gc3RhdGUgZGlhZ3JhbSBkZXNjcmlwdGlvbgogKiByZW5hbWVkIGdyZWZfZGlyZWN0 b3J5X3N0YXJ0IHRvIGdyZWZfZGlyZWN0b3J5CiAqIGFkZGVkIG1pc3NpbmcgInZlcnNpb25zIiBh bmQgInZlcnNpb24iIHN0cmluZyBjb25zdGFudHMKCkNoYW5nZXMgc2luY2UgdjE6CiAqIGZpeGVk IHhlbmRpc3BsX2V2ZW50X3BhZ2UgcGFkZGluZyBzaXplCiAqIGFkZGVkIHZlcnNpb25pbmcgc3Vw cG9ydAogKiBleHBsaWNpdGx5IGRlZmluZSB2YWx1ZSB0eXBlcyBmb3IgWGVuU3RvcmUgZmllbGRz CiAqIHRleHQgZGVjb3JhdGlvbiByZS13b3JrCiAqIGFkZGVkIG9mZnNldHMgdG8gQVNDSUkgYm94 IG5vdGF0aW9uCgpDaGFuZ2VzIHNpbmNlIGluaXRpYWw6CiAqIERSTSBjaGFuZ2VkIHRvIERJU1BM LCBwcm90b2NvbCBtYWRlIGdlbmVyaWMKICogbWFqb3IgcmUtd29yayBhZGRyZXNzaW5nIGlzc3Vl cyByYWlzZWQgZm9yIHNuZGlmCgpTaWduZWQtb2ZmLWJ5OiBPbGVrc2FuZHIgR3J5dHNvdiA8b2xl a3NhbmRyX2dyeXRzb3ZAZXBhbS5jb20+ClNpZ25lZC1vZmYtYnk6IE9sZWtzYW5kciBBbmRydXNo Y2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KLS0tCiB4ZW4vaW5jbHVk ZS9wdWJsaWMvaW8vZGlzcGxpZi5oIHwgODQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA4NDcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL3B1YmxpYy9pby9kaXNwbGlmLmgKCmRpZmYgLS1naXQgYS94 ZW4vaW5jbHVkZS9wdWJsaWMvaW8vZGlzcGxpZi5oIGIveGVuL2luY2x1ZGUvcHVibGljL2lvL2Rp c3BsaWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmFjNTVjNGZl OGJiZQotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9pbmNsdWRlL3B1YmxpYy9pby9kaXNwbGlmLmgK QEAgLTAsMCArMSw4NDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGRpc3BsaWYuaAor ICoKKyAqIFVuaWZpZWQgZGlzcGxheSBkZXZpY2UgSS9PIGludGVyZmFjZSBmb3IgWGVuIGd1ZXN0 IE9TZXMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisg KiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uIHRoZQorICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0 d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1Mg SU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEVQQU0gU3lz dGVtcyBJbmMuCisgKgorICogQXV0aG9yczogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtz YW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgorICogICAgICAgICAgT2xla3NhbmRyIEdyeXRz b3YgPG9sZWtzYW5kcl9ncnl0c292QGVwYW0uY29tPgorICovCisKKyNpZm5kZWYgX19YRU5fUFVC TElDX0lPX0RJU1BMSUZfSF9fCisjZGVmaW5lIF9fWEVOX1BVQkxJQ19JT19ESVNQTElGX0hfXwor CisjaW5jbHVkZSAicmluZy5oIgorI2luY2x1ZGUgIi4uL2dyYW50X3RhYmxlLmgiCisKKy8qCisg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgIE1haW4gZmVhdHVyZXMg cHJvdmlkZWQgYnkgdGhlIHByb3RvY29sCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlz IHByb3RvY29sIGFpbXMgdG8gcHJvdmlkZSBhIHVuaWZpZWQgcHJvdG9jb2wgd2hpY2ggZml0cyBt b3JlCisgKiBzb3BoaXN0aWNhdGVkIHVzZS1jYXNlcyB0aGFuIGEgZnJhbWVidWZmZXIgZGV2aWNl IGNhbiBoYW5kbGUuIEF0IHRoZQorICogbW9tZW50IGJhc2ljIGZ1bmN0aW9uYWxpdHkgaXMgc3Vw cG9ydGVkIHdpdGggdGhlIGludGVudGlvbiB0byBiZSBleHRlbmRlZDoKKyAqICBvIG11bHRpcGxl IGR5bmFtaWNhbGx5IGFsbG9jYXRlZC9kZXN0cm95ZWQgZnJhbWVidWZmZXJzCisgKiAgbyBidWZm ZXJzIG9mIGFyYml0cmFyeSBzaXplcworICogIG8gYnVmZmVyIGFsbG9jYXRpb24gYXQgZWl0aGVy IGJhY2sgb3IgZnJvbnQgZW5kCisgKiAgbyBiZXR0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGlu Y2x1ZGluZyBtdWx0aXBsZSBkaXNwbGF5IHN1cHBvcnQKKyAqCisgKiBOb3RlOiBleGlzdGluZyBm YmlmIGNhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggZGlzcGxpZiBydW5uaW5nIGF0IHRoZQorICog c2FtZSB0aW1lLCBlLmcuIG9uIExpbnV4IG9uZSBwcm92aWRlcyBmcmFtZWJ1ZmZlciBhbmQgYW5v dGhlciBEUk0vS01TCisgKgorICogTm90ZTogZGlzcGxheSByZXNvbHV0aW9uIChYZW5TdG9yZSdz ICJyZXNvbHV0aW9uIiBwcm9wZXJ0eSkgZGVmaW5lcworICogdmlzaWJsZSBhcmVhIG9mIHRoZSB2 aXJ0dWFsIGRpc3BsYXkuIEF0IHRoZSBzYW1lIHRpbWUgcmVzb2x1dGlvbiBvZgorICogdGhlIGRp c3BsYXkgYW5kIGZyYW1lIGJ1ZmZlcnMgbWF5IGRpZmZlcjogYnVmZmVycyBjYW4gYmUgc21hbGxl ciwgZXF1YWwKKyAqIG9yIGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlIGFyZWEuIFRoaXMgaXMgdG8g ZW5hYmxlIHVzZS1jYXNlcywgd2hlcmUgYmFja2VuZAorICogbWF5IGRvIHNvbWUgcG9zdC1wcm9j ZXNzaW5nIG9mIHRoZSBkaXNwbGF5IGFuZCBmcmFtZSBidWZmZXJzIHN1cHBsaWVkLAorICogZS5n LiB0aG9zZSBidWZmZXJzIGNhbiBiZSBqdXN0IGEgcGFydCBvZiB0aGUgZmluYWwgY29tcG9zaXRp b24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAg ICBEaXJlY3Rpb24gb2YgaW1wcm92ZW1lbnRzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBG dXR1cmUgZXh0ZW5zaW9ucyB0byB0aGUgZXhpc3RpbmcgcHJvdG9jb2wgbWF5IGluY2x1ZGU6Cisg KiAgbyBkaXNwbGF5L2Nvbm5lY3RvciBjbG9uaW5nCisgKiAgbyBhbGxvY2F0aW9uIG9mIG9iamVj dHMgb3RoZXIgdGhhbiBkaXNwbGF5IGJ1ZmZlcnMKKyAqICBvIHBsYW5lL292ZXJsYXkgc3VwcG9y dAorICogIG8gc2NhbGluZyBzdXBwb3J0CisgKiAgbyByb3RhdGlvbiBzdXBwb3J0CisgKgorICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICBGZWF0dXJlIGFuZCBQYXJh bWV0ZXIgTmVnb3RpYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGcm9udC0+ YmFjayBub3RpZmljYXRpb25zOiB3aGVuIGVucXVldWluZyBhIG5ldyByZXF1ZXN0LCBzZW5kaW5n IGEKKyAqIG5vdGlmaWNhdGlvbiBjYW4gYmUgbWFkZSBjb25kaXRpb25hbCBvbiB4ZW5kaXNwbF9y ZXEgKGkuZS4sIHRoZSBnZW5lcmljCisgKiBob2xkLW9mZiBtZWNoYW5pc20gcHJvdmlkZWQgYnkg dGhlIHJpbmcgbWFjcm9zKS4gQmFja2VuZHMgbXVzdCBzZXQKKyAqIHhlbmRpc3BsX3JlcSBhcHBy b3ByaWF0ZWx5IChlLmcuLCB1c2luZyBSSU5HX0ZJTkFMX0NIRUNLX0ZPUl9SRVFVRVNUUygpKS4K KyAqCisgKiBCYWNrLT5mcm9udCBub3RpZmljYXRpb25zOiB3aGVuIGVucXVldWluZyBhIG5ldyBy ZXNwb25zZSwgc2VuZGluZyBhCisgKiBub3RpZmljYXRpb24gY2FuIGJlIG1hZGUgY29uZGl0aW9u YWwgb24geGVuZGlzcGxfcmVzcCAoaS5lLiwgdGhlIGdlbmVyaWMKKyAqIGhvbGQtb2ZmIG1lY2hh bmlzbSBwcm92aWRlZCBieSB0aGUgcmluZyBtYWNyb3MpLiBGcm9udGVuZHMgbXVzdCBzZXQKKyAq IHhlbmRpc3BsX3Jlc3AgYXBwcm9wcmlhdGVseSAoZS5nLiwgdXNpbmcgUklOR19GSU5BTF9DSEVD S19GT1JfUkVTUE9OU0VTKCkpLgorICoKKyAqIFRoZSB0d28gaGFsdmVzIG9mIGEgcGFyYS12aXJ0 dWFsIGRpc3BsYXkgZHJpdmVyIHV0aWxpemUgbm9kZXMgd2l0aGluCisgKiBYZW5TdG9yZSB0byBj b21tdW5pY2F0ZSBjYXBhYmlsaXRpZXMgYW5kIHRvIG5lZ290aWF0ZSBvcGVyYXRpbmcgcGFyYW1l dGVycy4KKyAqIFRoaXMgc2VjdGlvbiBlbnVtZXJhdGVzIHRoZXNlIG5vZGVzIHdoaWNoIHJlc2lk ZSBpbiB0aGUgcmVzcGVjdGl2ZSBmcm9udCBhbmQKKyAqIGJhY2tlbmQgcG9ydGlvbnMgb2YgWGVu U3RvcmUsIGZvbGxvd2luZyB0aGUgWGVuQnVzIGNvbnZlbnRpb24uCisgKgorICogQWxsIGRhdGEg aW4gWGVuU3RvcmUgaXMgc3RvcmVkIGFzIHN0cmluZ3MuIE5vZGVzIHNwZWNpZnlpbmcgbnVtZXJp YworICogdmFsdWVzIGFyZSBlbmNvZGVkIGluIGRlY2ltYWwuIEludGVnZXIgdmFsdWUgcmFuZ2Vz IGxpc3RlZCBiZWxvdyBhcmUKKyAqIGV4cHJlc3NlZCBhcyBmaXhlZCBzaXplZCBpbnRlZ2VyIHR5 cGVzIGNhcGFibGUgb2Ygc3RvcmluZyB0aGUgY29udmVyc2lvbgorICogb2YgYSBwcm9wZXJseSBm b3JtYXRlZCBub2RlIHN0cmluZywgd2l0aG91dCBsb3NzIG9mIGluZm9ybWF0aW9uLgorICoKKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZSBj b25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTm90ZTogZGVwZW5k aW5nIG9uIHRoZSB1c2UtY2FzZSBiYWNrZW5kIGNhbiBleHBvc2UgbW9yZSBkaXNwbGF5IGNvbm5l Y3RvcnMKKyAqIHRoYW4gdGhlIHVuZGVybHlpbmcgSFcgcGh5c2ljYWxseSBoYXMgYnkgZW1wbG95 aW5nIFNXIGdyYXBoaWNzIGNvbXBvc2l0b3JzCisgKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9m IGJhY2tlbmQgYW5kIGZyb250ZW5kIGNvbmZpZ3VyYXRpb246CisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gQmFja2VuZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIC9sb2NhbC9kb21haW4vMC9iYWNrZW5kL3ZkaXNwbC8xLzAvZnJvbnRl bmQtaWQgPSAiMSIKKyAqIC9sb2NhbC9kb21haW4vMC9iYWNrZW5kL3ZkaXNwbC8xLzAvZnJvbnRl bmQgPSAiL2xvY2FsL2RvbWFpbi8xL2RldmljZS92ZGlzcGwvMCIKKyAqIC9sb2NhbC9kb21haW4v MC9iYWNrZW5kL3ZkaXNwbC8xLzAvc3RhdGUgPSAiNCIKKyAqIC9sb2NhbC9kb21haW4vMC9iYWNr ZW5kL3ZkaXNwbC8xLzAvdmVyc2lvbnMgPSAiMSwyIgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tIEZyb250ZW5kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZkaXNwbC8wL2JhY2tlbmQtaWQgPSAi MCIKKyAqIC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmRpc3BsLzAvYmFja2VuZCA9ICIvbG9jYWwv ZG9tYWluLzAvYmFja2VuZC92ZGlzcGwvMS8wIgorICogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92 ZGlzcGwvMC9zdGF0ZSA9ICI0IgorICogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92ZGlzcGwvMC92 ZXJzaW9uID0gIjEiCisgKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZkaXNwbC8wL2JlX2FsbG9j ID0gIjEiCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25uZWN0b3IgMCBjb25m aWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIC9sb2NhbC9kb21haW4v MS9kZXZpY2UvdmRpc3BsLzAvMC9yZXNvbHV0aW9uID0gIjE5MjB4MTA4MCIKKyAqIC9sb2NhbC9k b21haW4vMS9kZXZpY2UvdmRpc3BsLzAvMC9yZXEtcmluZy1yZWYgPSAiMjgzMiIKKyAqIC9sb2Nh bC9kb21haW4vMS9kZXZpY2UvdmRpc3BsLzAvMC9yZXEtZXZlbnQtY2hhbm5lbCA9ICIxNSIKKyAq IC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmRpc3BsLzAvMC9ldnQtcmluZy1yZWYgPSAiMzg3Igor ICogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92ZGlzcGwvMC8wL2V2dC1ldmVudC1jaGFubmVsID0g IjE2IgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29ubmVjdG9yIDEgY29uZmln dXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAvbG9jYWwvZG9tYWluLzEv ZGV2aWNlL3ZkaXNwbC8wLzEvcmVzb2x1dGlvbiA9ICI4MDB4NjAwIgorICogL2xvY2FsL2RvbWFp bi8xL2RldmljZS92ZGlzcGwvMC8xL3JlcS1yaW5nLXJlZiA9ICIyODMzIgorICogL2xvY2FsL2Rv bWFpbi8xL2RldmljZS92ZGlzcGwvMC8xL3JlcS1ldmVudC1jaGFubmVsID0gIjE3IgorICogL2xv Y2FsL2RvbWFpbi8xL2RldmljZS92ZGlzcGwvMC8xL2V2dC1yaW5nLXJlZiA9ICIzODgiCisgKiAv bG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZkaXNwbC8wLzEvZXZ0LWV2ZW50LWNoYW5uZWwgPSAiMTgi CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgQmFja2VuZCBYZW5CdXMgTm9kZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3RvY29sIHZlcnNpb24gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdmVyc2lvbnMKKyAqICAgICAgVmFsdWVzOiAgICAg ICAgIDxzdHJpbmc+CisgKgorICogICAgICBMaXN0IG9mIFhFTkRJU1BMX0xJU1RfU0VQQVJBVE9S IHNlcGFyYXRlZCBwcm90b2NvbCB2ZXJzaW9ucyBzdXBwb3J0ZWQKKyAqICAgICAgYnkgdGhlIGJh Y2tlbmQuIEZvciBleGFtcGxlICIxLDIsMyIuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmQgWGVuQnVzIE5vZGVzCisgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSBBZGRyZXNzaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRv bS1pZAorICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQxNl90PgorICoKKyAqICAgICAgRG9t YWluIGlkZW50aWZpZXIuCisgKgorICogZGV2LWlkCisgKiAgICAgIFZhbHVlczogICAgICAgICA8 dWludDE2X3Q+CisgKgorICogICAgICBEZXZpY2UgaWRlbnRpZmllci4KKyAqCisgKiBjb25uLWlk eAorICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQ4X3Q+CisgKgorICogICAgICBaZXJvIGJh c2VkIGNvbnRpZ291cyBpbmRleCBvZiB0aGUgY29ubmVjdG9yLgorICogICAgICAvbG9jYWwvZG9t YWluLzxkb20taWQ+L2RldmljZS92ZGlzcGwvPGRldi1pZD4vPGNvbm4taWR4Pi8uLi4KKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3RvY29sIHZlcnNpb24gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdmVyc2lvbgorICogICAgICBWYWx1ZXM6ICAg ICAgICAgPHN0cmluZz4KKyAqCisgKiAgICAgIFByb3RvY29sIHZlcnNpb24sIGNob3NlbiBhbW9u ZyB0aGUgb25lcyBzdXBwb3J0ZWQgYnkgdGhlIGJhY2tlbmQuCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tIEJhY2tlbmQgYnVmZmVyIGFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIGJlX2FsbG9jCisgKiAgICAgIFZhbHVlczogICAgICAgICAiMCIsICIx IgorICoKKyAqICAgICAgSWYgdmFsdWUgaXMgc2V0IHRvICIxIiwgdGhlbiBiYWNrZW5kIGNhbiBi ZSBhIGJ1ZmZlciBwcm92aWRlci9hbGxvY2F0b3IKKyAqICAgICAgZm9yIHRoaXMgZG9tYWluIGR1 cmluZyBYRU5ESVNQTF9PUF9EQlVGX0NSRUFURSBvcGVyYXRpb24gKHNlZSBiZWxvdworICogICAg ICBmb3IgbmVnb3RpYXRpb24pLgorICogICAgICBJZiB2YWx1ZSBpcyBub3QgIjEiIG9yIG9taXR0 ZWQgZnJvbnRlbmQgbXVzdCBhbGxvY2F0ZSBidWZmZXJzIGl0c2VsZi4KKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbm5lY3RvciBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogcmVzb2x1dGlvbgorICogICAgICBWYWx1ZXM6ICAgICAgICAg PHdpZHRoLCB1aW50MzJfdD54PGhlaWdodCwgdWludDMyX3Q+CisgKgorICogICAgICBXaWR0aCBh bmQgaGVpZ2h0IG9mIHRoZSBjb25uZWN0b3IgaW4gcGl4ZWxzIHNlcGFyYXRlZCBieQorICogICAg ICBYRU5ESVNQTF9SRVNPTFVUSU9OX1NFUEFSQVRPUi4gVGhpcyBkZWZpbmVzIHZpc2libGUgYXJl YSBvZiB0aGUKKyAqICAgICAgZGlzcGxheS4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLSBDb25u ZWN0b3IgUmVxdWVzdCBUcmFuc3BvcnQgUGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogVGhpcyBjb21tdW5pY2F0aW9uIHBhdGggaXMgdXNlZCB0byBkZWxpdmVyIHJlcXVlc3Rz IGZyb20gZnJvbnRlbmQgdG8gYmFja2VuZAorICogYW5kIGdldCB0aGUgY29ycmVzcG9uZGluZyBy ZXNwb25zZXMgZnJvbSBiYWNrZW5kIHRvIGZyb250ZW5kLAorICogc2V0IHVwIHBlciBjb25uZWN0 b3IuCisgKgorICogcmVxLWV2ZW50LWNoYW5uZWwKKyAqICAgICAgVmFsdWVzOiAgICAgICAgIDx1 aW50MzJfdD4KKyAqCisgKiAgICAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBYZW4gY29ubmVjdG9y J3MgY29udHJvbCBldmVudCBjaGFubmVsCisgKiAgICAgIHVzZWQgdG8gc2lnbmFsIGFjdGl2aXR5 IGluIHRoZSByaW5nIGJ1ZmZlci4KKyAqCisgKiByZXEtcmluZy1yZWYKKyAqICAgICAgVmFsdWVz OiAgICAgICAgIDx1aW50MzJfdD4KKyAqCisgKiAgICAgIFRoZSBYZW4gZ3JhbnQgcmVmZXJlbmNl IGdyYW50aW5nIHBlcm1pc3Npb24gZm9yIHRoZSBiYWNrZW5kIHRvIG1hcAorICogICAgICBhIHNv bGUgcGFnZSBpbiBhIHNpbmdsZSBwYWdlIHNpemVkIGNvbm5lY3RvcidzIGNvbnRyb2wgcmluZyBi dWZmZXIuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tIENvbm5lY3RvciBFdmVudCBUcmFuc3Bv cnQgUGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoaXMgY29tbXVuaWNh dGlvbiBwYXRoIGlzIHVzZWQgdG8gZGVsaXZlciBhc3luY2hyb25vdXMgZXZlbnRzIGZyb20gYmFj a2VuZAorICogdG8gZnJvbnRlbmQsIHNldCB1cCBwZXIgY29ubmVjdG9yLgorICoKKyAqIGV2dC1l dmVudC1jaGFubmVsCisgKiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMyX3Q+CisgKgorICog ICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgWGVuIGNvbm5lY3RvcidzIGV2ZW50IGNoYW5uZWwK KyAqICAgICAgdXNlZCB0byBzaWduYWwgYWN0aXZpdHkgaW4gdGhlIHJpbmcgYnVmZmVyLgorICoK KyAqIGV2dC1yaW5nLXJlZgorICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgorICoK KyAqICAgICAgVGhlIFhlbiBncmFudCByZWZlcmVuY2UgZ3JhbnRpbmcgcGVybWlzc2lvbiBmb3Ig dGhlIGJhY2tlbmQgdG8gbWFwCisgKiAgICAgIGEgc29sZSBwYWdlIGluIGEgc2luZ2xlIHBhZ2Ug c2l6ZWQgY29ubmVjdG9yJ3MgZXZlbnQgcmluZyBidWZmZXIuCisgKi8KKworLyoKKyAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRFIERJ QUdSQU1TCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVG9vbCBzdGFjayBjcmVhdGVz IGZyb250IGFuZCBiYWNrIHN0YXRlIG5vZGVzIHdpdGggaW5pdGlhbCBzdGF0ZQorICogWGVuYnVz U3RhdGVJbml0aWFsaXNpbmcuCisgKiBUb29sIHN0YWNrIGNyZWF0ZXMgYW5kIHNldHMgdXAgZnJv bnRlbmQgZGlzcGxheSBjb25maWd1cmF0aW9uCisgKiBub2RlcyBwZXIgZG9tYWluLgorICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTm9ybWFsIGZsb3cgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBGcm9udCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQmFjaworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFhlbmJ1c1N0YXRlSW5pdGlh bGlzaW5nICAgICAgICAgICAgICBYZW5idXNTdGF0ZUluaXRpYWxpc2luZworICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIFF1ZXJ5IGJhY2tlbmQgZGV2aWNlIGlkZW50 aWZpY2F0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0 YS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBPcGVuIGFuZCB2 YWxpZGF0ZSBiYWNrZW5kIGRldmljZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYZW5i dXNTdGF0ZUluaXRXYWl0CisgKgorICogbyBRdWVyeSBmcm9udGVuZCBjb25maWd1cmF0aW9uCisg KiBvIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplCisgKiAgIGV2ZW50IGNoYW5uZWxzIHBlciBjb25m aWd1cmVkCisgKiAgIGNvbm5lY3Rvci4KKyAqIG8gUHVibGlzaCB0cmFuc3BvcnQgcGFyYW1ldGVy cworICogICB0aGF0IHdpbGwgYmUgaW4gZWZmZWN0IGR1cmluZworICogICB0aGlzIGNvbm5lY3Rp b24uCisgKiAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAg ICBWCisgKiBYZW5idXNTdGF0ZUluaXRpYWxpc2VkCisgKgorICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvIFF1ZXJ5IGZyb250ZW5kIHRyYW5zcG9ydCBwYXJhbWV0ZXJz LgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIENvbm5lY3QgdG8g dGhlIGV2ZW50IGNoYW5uZWxzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhlbmJ1c1N0 YXRlQ29ubmVjdGVkCisgKgorICogIG8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIE9TCisgKiAgICB2 aXJ0dWFsIGRpc3BsYXkgY29ubmVjdG9ycworICogICAgYXMgcGVyIGNvbmZpZ3VyYXRpb24uCisg KiAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICBWCisg KiBYZW5idXNTdGF0ZUNvbm5lY3RlZAorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBYZW5idXNTdGF0ZVVua25vd24KKyAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBYZW5idXNTdGF0ZUNsb3NlZAorICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFhlbmJ1c1N0YXRlQ2xvc2luZworICogbyBSZW1vdmUgdmlydHVhbCBk aXNwbGF5IGRldmljZQorICogbyBSZW1vdmUgZXZlbnQgY2hhbm5lbHMKKyAqICAgICAgICAgICAg ICB8CisgKiAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgIFYKKyAqIFhlbmJ1c1N0YXRl Q2xvc2VkCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlY292ZXJ5IGZs b3cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEluIGNhc2Ugb2YgZnJv bnRlbmQgdW5yZWNvdmVyYWJsZSBlcnJvcnMgYmFja2VuZCBoYW5kbGVzIHRoYXQgYXMKKyAqIGlm IGZyb250ZW5kIGdvZXMgaW50byB0aGUgWGVuYnVzU3RhdGVDbG9zZWQgc3RhdGUuCisgKgorICog SW4gY2FzZSBvZiBiYWNrZW5kIHVucmVjb3ZlcmFibGUgZXJyb3JzIGZyb250ZW5kIHRyaWVzIHJl bW92aW5nCisgKiB0aGUgdmlydHVhbGl6ZWQgZGV2aWNlLiBJZiB0aGlzIGlzIHBvc3NpYmxlIGF0 IHRoZSBtb21lbnQgb2YgZXJyb3IsCisgKiB0aGVuIGZyb250ZW5kIGdvZXMgaW50byB0aGUgWGVu YnVzU3RhdGVJbml0aWFsaXNpbmcgc3RhdGUgYW5kIGlzIHJlYWR5IGZvcgorICogbmV3IGNvbm5l Y3Rpb24gd2l0aCBiYWNrZW5kLiBJZiB0aGUgdmlydHVhbGl6ZWQgZGV2aWNlIGlzIHN0aWxsIGlu IHVzZSBhbmQKKyAqIGNhbm5vdCBiZSByZW1vdmVkLCB0aGVuIGZyb250ZW5kIGdvZXMgaW50byB0 aGUgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyaW5nIHN0YXRlCisgKiB1bnRpbCBlaXRoZXIgdGhlIHZp cnR1YWxpemVkIGRldmljZSByZW1vdmVkIG9yIGJhY2tlbmQgaW5pdGlhdGVzIGEgbmV3CisgKiBj b25uZWN0aW9uLiBPbiB0aGUgdmlydHVhbGl6ZWQgZGV2aWNlIHJlbW92YWwgZnJvbnRlbmQgZ29l cyBpbnRvIHRoZQorICogWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcgc3RhdGUuCisgKgorICogTm90 ZSBvbiBYZW5idXNTdGF0ZVJlY29uZmlndXJpbmcgc3RhdGUgb2YgdGhlIGZyb250ZW5kOiBpZiBi YWNrZW5kIGhhcworICogdW5yZWNvdmVyYWJsZSBlcnJvcnMgdGhlbiBmcm9udGVuZCBjYW5ub3Qg c2VuZCByZXF1ZXN0cyB0byB0aGUgYmFja2VuZAorICogYW5kIHRodXMgY2Fubm90IHByb3ZpZGUg ZnVuY3Rpb25hbGl0eSBvZiB0aGUgdmlydHVhbGl6ZWQgZGV2aWNlIGFueW1vcmUuCisgKiBBZnRl ciBiYWNrZW5kIGlzIGJhY2sgdG8gbm9ybWFsIHRoZSB2aXJ0dWFsaXplZCBkZXZpY2UgbWF5IHN0 aWxsIGhvbGQgc29tZQorICogc3RhdGU6IGNvbmZpZ3VyYXRpb24gaW4gdXNlLCBhbGxvY2F0ZWQg YnVmZmVycywgY2xpZW50IGFwcGxpY2F0aW9uIHN0YXRlIGV0Yy4KKyAqIFNvLCBpbiBtb3N0IGNh c2VzLCB0aGlzIHdpbGwgcmVxdWlyZSBmcm9udGVuZCB0byBpbXBsZW1lbnQgY29tcGxleCByZWNv dmVyeQorICogcmVjb25uZWN0IGxvZ2ljLiBJbnN0ZWFkLCBieSBnb2luZyBpbnRvIFhlbmJ1c1N0 YXRlUmVjb25maWd1cmluZyBzdGF0ZSwKKyAqIGZyb250ZW5kIHdpbGwgbWFrZSBzdXJlIG5vIG5l dyBjbGllbnRzIG9mIHRoZSB2aXJ0dWFsaXplZCBkZXZpY2UgYXJlCisgKiBhY2NlcHRlZCwgYWxs b3cgZXhpc3RpbmcgY2xpZW50KHMpIHRvIGV4aXQgZ3JhY2VmdWxseSBieSBzaWduYWxpbmcgZXJy b3IKKyAqIHN0YXRlIGV0Yy4KKyAqIE9uY2UgYWxsIHRoZSBjbGllbnRzIGFyZSBnb25lIGZyb250 ZW5kIGNhbiByZWluaXRpYWxpemUgdGhlIHZpcnR1YWxpemVkCisgKiBkZXZpY2UgYW5kIGdldCBp bnRvIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nIHN0YXRlIGFnYWluIHNpZ25hbGluZyB0aGUKKyAq IGJhY2tlbmQgdGhhdCBhIG5ldyBjb25uZWN0aW9uIGNhbiBiZSBtYWRlLgorICoKKyAqIFRoZXJl IGFyZSBtdWx0aXBsZSBjb25kaXRpb25zIHBvc3NpYmxlIHVuZGVyIHdoaWNoIGZyb250ZW5kIHdp bGwgZ28gZnJvbQorICogWGVuYnVzU3RhdGVSZWNvbmZpZ3VyaW5nIGludG8gWGVuYnVzU3RhdGVJ bml0aWFsaXNpbmcsIHNvbWUgb2YgdGhlbSBhcmUgT1MKKyAqIHNwZWNpZmljLiBGb3IgZXhhbXBs ZToKKyAqIDEuIFRoZSB1bmRlcmx5aW5nIE9TIGZyYW1ld29yayBtYXkgcHJvdmlkZSBjYWxsYmFj a3MgdG8gc2lnbmFsIHRoYXQgdGhlIGxhc3QKKyAqICAgIGNsaWVudCBvZiB0aGUgdmlydHVhbGl6 ZWQgZGV2aWNlIGhhcyBnb25lIGFuZCB0aGUgZGV2aWNlIGNhbiBiZSByZW1vdmVkCisgKiAyLiBG cm9udGVuZCBjYW4gc2NoZWR1bGUgYSBkZWZlcnJlZCB3b3JrICh0aW1lci90YXNrbGV0L3dvcmtx dWV1ZSkKKyAqICAgIHRvIHBlcmlvZGljYWxseSBjaGVjayBpZiB0aGlzIGlzIHRoZSByaWdodCB0 aW1lIHRvIHJlLXRyeSByZW1vdmFsIG9mCisgKiAgICB0aGUgdmlydHVhbGl6ZWQgZGV2aWNlLgor ICogMy4gQnkgYW55IG90aGVyIG1lYW5zLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVRVNUIENPREVTCisgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKiBSZXF1ZXN0IGNvZGVzIFswOyAxNV0gYXJlIHJlc2VydmVkIGFuZCBtdXN0 IG5vdCBiZSB1c2VkCisgKi8KKworI2RlZmluZSBYRU5ESVNQTF9PUF9EQlVGX0NSRUFURSAgICAg ICAweDEwCisjZGVmaW5lIFhFTkRJU1BMX09QX0RCVUZfREVTVFJPWSAgICAgIDB4MTEKKyNkZWZp bmUgWEVORElTUExfT1BfRkJfQVRUQUNIICAgICAgICAgMHgxMgorI2RlZmluZSBYRU5ESVNQTF9P UF9GQl9ERVRBQ0ggICAgICAgICAweDEzCisjZGVmaW5lIFhFTkRJU1BMX09QX1NFVF9DT05GSUcg ICAgICAgIDB4MTQKKyNkZWZpbmUgWEVORElTUExfT1BfUEdfRkxJUCAgICAgICAgICAgMHgxNQor CisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBFVkVOVCBDT0RFUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjZGVmaW5l IFhFTkRJU1BMX0VWVF9QR19GTElQICAgICAgICAgIDB4MDAKKworLyoKKyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqICAgICAgICAgICAgICAgWEVOU1RPUkUgRklFTEQgQU5EIFBBVEggTkFNRSBT VFJJTkdTLCBIRUxQRVJTCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNkZWZpbmUgWEVO RElTUExfRFJJVkVSX05BTUUgICAgICAgICAgInZkaXNwbCIKKworI2RlZmluZSBYRU5ESVNQTF9M SVNUX1NFUEFSQVRPUiAgICAgICAiLCIKKyNkZWZpbmUgWEVORElTUExfUkVTT0xVVElPTl9TRVBB UkFUT1IgIngiCisKKyNkZWZpbmUgWEVORElTUExfRklFTERfQkVfVkVSU0lPTlMgICAgInZlcnNp b25zIgorI2RlZmluZSBYRU5ESVNQTF9GSUVMRF9GRV9WRVJTSU9OICAgICAidmVyc2lvbiIKKyNk ZWZpbmUgWEVORElTUExfRklFTERfUkVRX1JJTkdfUkVGICAgInJlcS1yaW5nLXJlZiIKKyNkZWZp bmUgWEVORElTUExfRklFTERfUkVRX0NIQU5ORUwgICAgInJlcS1ldmVudC1jaGFubmVsIgorI2Rl ZmluZSBYRU5ESVNQTF9GSUVMRF9FVlRfUklOR19SRUYgICAiZXZ0LXJpbmctcmVmIgorI2RlZmlu ZSBYRU5ESVNQTF9GSUVMRF9FVlRfQ0hBTk5FTCAgICAiZXZ0LWV2ZW50LWNoYW5uZWwiCisjZGVm aW5lIFhFTkRJU1BMX0ZJRUxEX1JFU09MVVRJT04gICAgICJyZXNvbHV0aW9uIgorI2RlZmluZSBY RU5ESVNQTF9GSUVMRF9CRV9BTExPQyAgICAgICAiYmVfYWxsb2MiCisKKy8qCisgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVFVTIFJFVFVSTiBD T0RFUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFN0YXR1cyByZXR1cm4gY29kZSBp cyB6ZXJvIG9uIHN1Y2Nlc3MgYW5kIC1YRU5fRVhYIG9uIGZhaWx1cmUuCisgKgorICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3N1bXB0aW9u cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICogbyB1c2FnZSBvZiBncmFudCByZWZlcmVuY2Ug MCBhcyBpbnZhbGlkIGdyYW50IHJlZmVyZW5jZToKKyAqICAgZ3JhbnQgcmVmZXJlbmNlIDAgaXMg dmFsaWQsIGJ1dCBuZXZlciBleHBvc2VkIHRvIGEgUFYgZHJpdmVyLAorICogICBiZWNhdXNlIG9m IHRoZSBmYWN0IGl0IGlzIGFscmVhZHkgaW4gdXNlL3Jlc2VydmVkIGJ5IHRoZSBQViBjb25zb2xl LgorICogbyBhbGwgcmVmZXJlbmNlcyBpbiB0aGlzIGRvY3VtZW50IHRvIHBhZ2Ugc2l6ZXMgbXVz dCBiZSB0cmVhdGVkCisgKiAgIGFzIHBhZ2VzIG9mIHNpemUgWEVOX1BBR0VfU0laRSB1bmxlc3Mg b3RoZXJ3aXNlIG5vdGVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgIERl c2NyaXB0aW9uIG9mIHRoZSBwcm90b2NvbCBiZXR3ZWVuIGZyb250ZW5kIGFuZCBiYWNrZW5kIGRy aXZlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoZSB0d28gaGFsdmVzIG9mIGEg UGFyYS12aXJ0dWFsIGRpc3BsYXkgZHJpdmVyIGNvbW11bmljYXRlIHdpdGgKKyAqIGVhY2ggb3Ro ZXIgdXNpbmcgc2hhcmVkIHBhZ2VzIGFuZCBldmVudCBjaGFubmVscy4KKyAqIFNoYXJlZCBwYWdl IGNvbnRhaW5zIGEgcmluZyB3aXRoIHJlcXVlc3QvcmVzcG9uc2UgcGFja2V0cy4KKyAqCisgKiBB bGwgcmVzZXJ2ZWQgZmllbGRzIGluIHRoZSBzdHJ1Y3R1cmVzIGJlbG93IG11c3QgYmUgMC4KKyAq IERpc3BsYXkgYnVmZmVycydzIGNvb2tpZSBvZiB2YWx1ZSAwIHRyZWF0ZWQgYXMgaW52YWxpZC4K KyAqIEZyYW1lYnVmZmVyJ3MgY29va2llIG9mIHZhbHVlIDAgdHJlYXRlZCBhcyBpbnZhbGlkLgor ICoKKyAqIEZvciBhbGwgcmVxdWVzdC9yZXNwb25zZS9ldmVudCBwYWNrZXRzIHRoYXQgdXNlIGNv b2tpZXM6CisgKiAgIGRidWZfY29va2llIC0gdWludDY0X3QsIHVuaXF1ZSB0byBndWVzdCBkb21h aW4gdmFsdWUgdXNlZCBieSB0aGUgYmFja2VuZAorICogICAgIHRvIG1hcCByZW1vdGUgZGlzcGxh eSBidWZmZXIgdG8gaXRzIGxvY2FsIG9uZQorICogICBmYl9jb29raWUgLSB1aW50NjRfdCwgdW5p cXVlIHRvIGd1ZXN0IGRvbWFpbiB2YWx1ZSB1c2VkIGJ5IHRoZSBiYWNrZW5kCisgKiAgICAgdG8g bWFwIHJlbW90ZSBmcmFtZWJ1ZmZlciB0byBpdHMgbG9jYWwgb25lCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlcXVlc3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIEFsbCByZXF1ZXN0cy9yZXNwb25zZXMsIHdoaWNoIGFyZSBub3Qg Y29ubmVjdG9yIHNwZWNpZmljLCBtdXN0IGJlIHNlbnQgb3ZlcgorICogY29udHJvbCByaW5nIG9m IHRoZSBjb25uZWN0b3Igd2l0aCBpbmRleCAwLgorICoKKyAqIEFsbCByZXF1ZXN0IHBhY2tldHMg aGF2ZSB0aGUgc2FtZSBsZW5ndGggKDY0IG9jdGV0cykKKyAqIEFsbCByZXF1ZXN0IHBhY2tldHMg aGF2ZSBjb21tb24gaGVhZGVyOgorICogICAgICAgICAwICAgICAgICAgICAgICAgIDEgICAgICAg ICAgICAgICAgIDIgICAgICAgICAgICAgICAzICAgICAgICBvY3RldAorICogKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r CisgKiB8ICAgICAgICAgICAgICAgaWQgICAgICAgICAgICAgICAgfCAgICBvcGVyYXRpb24gICB8 ICAgcmVzZXJ2ZWQgICAgIHwgNAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOAor ICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rCisgKiAgIGlkIC0gdWludDE2X3QsIHByaXZhdGUgZ3Vlc3QgdmFsdWUs IGVjaG9lZCBpbiByZXNwb25zZQorICogICBvcGVyYXRpb24gLSB1aW50OF90LCBvcGVyYXRpb24g Y29kZSwgWEVORElTUExfT1BfPz8/CisgKgorICogUmVxdWVzdCBkYnVmIGNyZWF0aW9uIC0gcmVx dWVzdCBjcmVhdGlvbiBvZiBhIGRpc3BsYXkgYnVmZmVyLgorICogICAgICAgICAwICAgICAgICAg ICAgICAgIDEgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAzICAgICAgICBvY3RldAor ICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgaWQgICAgICAgICAgICAgICAgfF9P UF9EQlVGX0NSRUFURSB8ICAgcmVzZXJ2ZWQgICAgIHwgNAorICogKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgOAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAg ICBkYnVmX2Nvb2tpZSBsb3cgMzItYml0ICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAqICst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgZGJ1Zl9jb29raWUgaGlnaCAz Mi1iaXQgICAgICAgICAgICAgICAgICAgICB8IDE2CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAyMAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGhlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjQKKyAqICstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnBwICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IDI4CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zeiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAzMgorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzYKKyAqICstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWZfZGlyZWN0b3J5ICAgICAg ICAgICAgICAgICAgICAgICAgICB8IDQwCisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCA0NAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL3wKKyAqICstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwor ICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDY0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiBNdXN0IGJlIHNlbnQg b3ZlciBjb250cm9sIHJpbmcgb2YgdGhlIGNvbm5lY3RvciB3aXRoIGluZGV4IDAuCisgKiBBbGwg dW51c2VkIGJpdHMgaW4gZmxhZ3MgZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4KKyAqCisgKiBBbiBh dHRlbXB0IHRvIGNyZWF0ZSBtdWx0aXBsZSBkaXNwbGF5IGJ1ZmZlcnMgd2l0aCB0aGUgc2FtZSBk YnVmX2Nvb2tpZSBpcworICogYW4gZXJyb3IuIGRidWZfY29va2llIGNhbiBiZSByZS11c2VkIGFm dGVyIGRlc3Ryb3lpbmcgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGRpc3BsYXkgYnVmZmVyLgorICoK KyAqIFdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGRpc3BsYXkgYnVmZmVycyBjYW4gYmUgc21hbGxl ciwgZXF1YWwgb3IgYmlnZ2VyCisgKiB0aGFuIHRoZSBjb25uZWN0b3IncyByZXNvbHV0aW9uLiBE ZXB0aC9waXhlbCBmb3JtYXQgb2YgdGhlIGluZGl2aWR1YWwKKyAqIGJ1ZmZlcnMgY2FuIGRpZmZl ciBhcyB3ZWxsLgorICoKKyAqIHdpZHRoIC0gdWludDMyX3QsIHdpZHRoIGluIHBpeGVscworICog aGVpZ2h0IC0gdWludDMyX3QsIGhlaWdodCBpbiBwaXhlbHMKKyAqIGJwcCAtIHVpbnQzMl90LCBi aXRzIHBlciBwaXhlbAorICogYnVmZmVyX3N6IC0gdWludDMyX3QsIGJ1ZmZlciBzaXplIHRvIGJl IGFsbG9jYXRlZCwgb2N0ZXRzCisgKiBmbGFncyAtIHVpbnQzMl90LCBmbGFncyBvZiB0aGUgb3Bl cmF0aW9uCisgKiAgIG8gWEVORElTUExfREJVRl9GTEdfUkVRX0FMTE9DIC0gaWYgc2V0LCB0aGVu IGJhY2tlbmQgaXMgcmVxdWVzdGVkCisgKiAgICAgdG8gYWxsb2NhdGUgdGhlIGJ1ZmZlciB3aXRo IHRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGluIHRoaXMgcmVxdWVzdC4KKyAqICAgICBQYWdlIGRp cmVjdG9yeSBpcyBoYW5kbGVkIGFzIGZvbGxvd3M6CisgKiAgICAgICBGcm9udGVuZCBvbiByZXF1 ZXN0OgorICogICAgICAgICBvIGFsbG9jYXRlcyBwYWdlcyBmb3IgdGhlIGRpcmVjdG9yeSAoZ3Jl Zl9kaXJlY3RvcnksCisgKiAgICAgICAgICAgZ3JlZl9kaXJfbmV4dF9wYWdlKHMpCisgKiAgICAg ICAgIG8gZ3JhbnRzIHBlcm1pc3Npb25zIGZvciB0aGUgcGFnZXMgb2YgdGhlIGRpcmVjdG9yeQor ICogICAgICAgICBvIHNldHMgZ3JlZl9kaXJfbmV4dF9wYWdlIGZpZWxkcworICogICAgICAgQmFj a2VuZCBvbiByZXNwb25zZToKKyAqICAgICAgICAgbyBncmFudHMgcGVybWlzc2lvbnMgZm9yIHRo ZSBwYWdlcyBvZiB0aGUgYnVmZmVyIGFsbG9jYXRlZAorICogICAgICAgICBvIGZpbGxzIGluIHBh Z2UgZGlyZWN0b3J5IHdpdGggZ3JhbnQgcmVmZXJlbmNlcworICogICAgICAgICAgIChncmVmW10g aW4gc3RydWN0IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5Z3JlZikKKyAqIGdyZWZfZGlyZWN0b3J5 IC0gZ3JhbnRfcmVmX3QsIGEgcmVmZXJlbmNlIHRvIHRoZSBmaXJzdCBzaGFyZWQgcGFnZQorICog ICBkZXNjcmliaW5nIHNoYXJlZCBidWZmZXIgcmVmZXJlbmNlcy4gQXQgbGVhc3Qgb25lIHBhZ2Ug ZXhpc3RzLiBJZiBzaGFyZWQKKyAqICAgYnVmZmVyIHNpemUgKGJ1ZmZlcl9zeikgZXhjZWVkcyB3 aGF0IGNhbiBiZSBhZGRyZXNzZWQgYnkgdGhpcyBzaW5nbGUgcGFnZSwKKyAqICAgdGhlbiByZWZl cmVuY2UgdG8gdGhlIG5leHQgcGFnZSBtdXN0IGJlIHN1cHBsaWVkIChzZWUgZ3JlZl9kaXJfbmV4 dF9wYWdlCisgKiAgIGJlbG93KQorICovCisKKyNkZWZpbmUgWEVORElTUExfREJVRl9GTEdfUkVR X0FMTE9DICAgICAgICgxIDw8IDApCisKK3N0cnVjdCB4ZW5kaXNwbF9kYnVmX2NyZWF0ZV9yZXEg eworICAgIHVpbnQ2NF90IGRidWZfY29va2llOworICAgIHVpbnQzMl90IHdpZHRoOworICAgIHVp bnQzMl90IGhlaWdodDsKKyAgICB1aW50MzJfdCBicHA7CisgICAgdWludDMyX3QgYnVmZmVyX3N6 OworICAgIHVpbnQzMl90IGZsYWdzOworICAgIGdyYW50X3JlZl90IGdyZWZfZGlyZWN0b3J5Owor fTsKKworLyoKKyAqIFNoYXJlZCBwYWdlIGZvciBYRU5ESVNQTF9PUF9EQlVGX0NSRUFURSBidWZm ZXIgZGVzY3JpcHRvciAoZ3JlZl9kaXJlY3RvcnkgaW4KKyAqIHRoZSByZXF1ZXN0KSBlbXBsb3lz IGEgbGlzdCBvZiBwYWdlcywgZGVzY3JpYmluZyBhbGwgcGFnZXMgb2YgdGhlIHNoYXJlZAorICog ZGF0YSBidWZmZXI6CisgKiAgICAgICAgIDAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAg ICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9jdGV0CisgKiArLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwg ICAgICAgICAgICAgICAgICAgICAgICBncmVmX2Rpcl9uZXh0X3BhZ2UgICAgICAgICAgICAgICAg ICAgICAgICAgfCA0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBncmVmWzBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4CisgKiArLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSsKKyAqIHwvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvfAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ3JlZltpXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgaSo0KzgKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC98CisgKiArLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWZbTiAtIDFdICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCBOKjQrOAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogZ3JlZl9k aXJfbmV4dF9wYWdlIC0gZ3JhbnRfcmVmX3QsIHJlZmVyZW5jZSB0byB0aGUgbmV4dCBwYWdlIGRl c2NyaWJpbmcKKyAqICAgcGFnZSBkaXJlY3RvcnkuIE11c3QgYmUgMCBpZiB0aGVyZSBhcmUgbm8g bW9yZSBwYWdlcyBpbiB0aGUgbGlzdC4KKyAqIGdyZWZbaV0gLSBncmFudF9yZWZfdCwgcmVmZXJl bmNlIHRvIGEgc2hhcmVkIHBhZ2Ugb2YgdGhlIGJ1ZmZlcgorICogICBhbGxvY2F0ZWQgYXQgWEVO RElTUExfT1BfREJVRl9DUkVBVEUKKyAqCisgKiBOdW1iZXIgb2YgZ3JhbnRfcmVmX3QgZW50cmll cyBpbiB0aGUgd2hvbGUgcGFnZSBkaXJlY3RvcnkgaXMgbm90CisgKiBwYXNzZWQsIGJ1dCBpbnN0 ZWFkIGNhbiBiZSBjYWxjdWxhdGVkIGFzOgorICogICBudW1fZ3JlZnNfdG90YWwgPSAoWEVORElT UExfT1BfREJVRl9DUkVBVEUuYnVmZmVyX3N6ICsgWEVOX1BBR0VfU0laRSAtIDEpIC8KKyAqICAg ICAgIFhFTl9QQUdFX1NJWkUKKyAqLworCitzdHJ1Y3QgeGVuZGlzcGxfcGFnZV9kaXJlY3Rvcnkg eworICAgIGdyYW50X3JlZl90IGdyZWZfZGlyX25leHRfcGFnZTsKKyAgICBncmFudF9yZWZfdCBn cmVmWzFdOyAvKiBWYXJpYWJsZSBsZW5ndGggKi8KK307CisKKy8qCisgKiBSZXF1ZXN0IGRidWYg ZGVzdHJ1Y3Rpb24gLSBkZXN0cm95IGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgZGlzcGxheSBidWZm ZXI6CisgKiAgICAgICAgIDAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgMiAgICAg ICAgICAgICAgIDMgICAgICAgIG9jdGV0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAg ICAgICBpZCAgICAgICAgICAgICAgICB8X09QX0RCVUZfREVTVFJPWXwgICByZXNlcnZlZCAgICAg fCA0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl c2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4CisgKiArLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsK KyAqIHwgICAgICAgICAgICAgICAgICAgICAgIGRidWZfY29va2llIGxvdyAzMi1iaXQgICAgICAg ICAgICAgICAgICAgICAgfCAxMgorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAg ICAgICAgICBkYnVmX2Nvb2tpZSBoaWdoIDMyLWJpdCAgICAgICAgICAgICAgICAgICAgIHwgMTYK KyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2 ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwCisgKiArLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAq IHwvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvfAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNjQKKyAqICst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKworICoKKyAqIE11c3QgYmUgc2VudCBvdmVyIGNvbnRyb2wgcmluZyBvZiB0aGUg Y29ubmVjdG9yIHdpdGggaW5kZXggMC4KKyAqLworCitzdHJ1Y3QgeGVuZGlzcGxfZGJ1Zl9kZXN0 cm95X3JlcSB7CisgICAgdWludDY0X3QgZGJ1Zl9jb29raWU7Cit9OworCisvKgorICogUmVxdWVz dCBmcmFtZWJ1ZmZlciBhdHRhY2htZW50IC0gcmVxdWVzdCBhdHRhY2htZW50IG9mIGEgZnJhbWVi dWZmZXIgdG8KKyAqIHByZXZpb3VzbHkgY3JlYXRlZCBkaXNwbGF5IGJ1ZmZlci4KKyAqICAgICAg ICAgMCAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgMyAg ICAgICAgb2N0ZXQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgIGlkICAgICAg ICAgICAgICAgIHwgX09QX0ZCX0FUVEFDSCAgfCAgIHJlc2VydmVkICAgICB8IDQKKyAqICstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IDgKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAg ICAgICAgICAgICAgICAgZGJ1Zl9jb29raWUgbG93IDMyLWJpdCAgICAgICAgICAgICAgICAgICAg ICB8IDEyCisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgIGRidWZf Y29va2llIGhpZ2ggMzItYml0ICAgICAgICAgICAgICAgICAgICAgfCAxNgorICogKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgZmJfY29va2llIGxvdyAzMi1iaXQgICAg ICAgICAgICAgICAgICAgICAgIHwgMjAKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAg ICAgICAgICAgICAgIGZiX2Nvb2tpZSBoaWdoIDMyLWJpdCAgICAgICAgICAgICAgICAgICAgICB8 IDI0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2lkdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyOAorICogKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgMzIKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwaXhlbF9mb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDM2 CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2Vy dmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0MAorICogKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisg KiB8L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL3wKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDY0CisgKiAr LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLSsKKyAqCisgKiBNdXN0IGJlIHNlbnQgb3ZlciBjb250cm9sIHJpbmcgb2YgdGhl IGNvbm5lY3RvciB3aXRoIGluZGV4IDAuCisgKiBXaWR0aCBhbmQgaGVpZ2h0IGNhbiBiZSBzbWFs bGVyLCBlcXVhbCBvciBiaWdnZXIgdGhhbiB0aGUgY29ubmVjdG9yJ3MKKyAqIHJlc29sdXRpb24u CisgKgorICogQW4gYXR0ZW1wdCB0byBjcmVhdGUgbXVsdGlwbGUgZnJhbWUgYnVmZmVycyB3aXRo IHRoZSBzYW1lIGZiX2Nvb2tpZSBpcworICogYW4gZXJyb3IuIGZiX2Nvb2tpZSBjYW4gYmUgcmUt dXNlZCBhZnRlciBkZXN0cm95aW5nIHRoZSBjb3JyZXNwb25kaW5nCisgKiBmcmFtZSBidWZmZXIu CisgKgorICogd2lkdGggLSB1aW50MzJfdCwgd2lkdGggaW4gcGl4ZWxzCisgKiBoZWlnaHQgLSB1 aW50MzJfdCwgaGVpZ2h0IGluIHBpeGVscworICogcGl4ZWxfZm9ybWF0IC0gdWludDMyX3QsIHBp eGVsIGZvcm1hdCBvZiB0aGUgZnJhbWVidWZmZXIsIEZPVVJDQyBjb2RlCisgKi8KKworc3RydWN0 IHhlbmRpc3BsX2ZiX2F0dGFjaF9yZXEgeworICAgIHVpbnQ2NF90IGRidWZfY29va2llOworICAg IHVpbnQ2NF90IGZiX2Nvb2tpZTsKKyAgICB1aW50MzJfdCB3aWR0aDsKKyAgICB1aW50MzJfdCBo ZWlnaHQ7CisgICAgdWludDMyX3QgcGl4ZWxfZm9ybWF0OworfTsKKworLyoKKyAqIFJlcXVlc3Qg ZnJhbWVidWZmZXIgZGV0YWNoIC0gZGV0YWNoIGEgcHJldmlvdXNseQorICogYXR0YWNoZWQgZnJh bWVidWZmZXIgZnJvbSB0aGUgZGlzcGxheSBidWZmZXIgaW4gcmVxdWVzdDoKKyAqICAgICAgICAg MCAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgMyAgICAg ICAgb2N0ZXQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgIGlkICAgICAgICAg ICAgICAgIHwgIF9PUF9GQl9ERVRBQ0ggfCAgIHJlc2VydmVkICAgICB8IDQKKyAqICstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IDgKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAg ICAgICAgICAgICAgIGZiX2Nvb2tpZSBsb3cgMzItYml0ICAgICAgICAgICAgICAgICAgICAgICB8 IDEyCisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICBmYl9jb29r aWUgaGlnaCAzMi1iaXQgICAgICAgICAgICAgICAgICAgICAgfCAxNgorICogKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgMjAKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC98Cisg KiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVk ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2NAorICogKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKgor ICogTXVzdCBiZSBzZW50IG92ZXIgY29udHJvbCByaW5nIG9mIHRoZSBjb25uZWN0b3Igd2l0aCBp bmRleCAwLgorICovCisKK3N0cnVjdCB4ZW5kaXNwbF9mYl9kZXRhY2hfcmVxIHsKKyAgICB1aW50 NjRfdCBmYl9jb29raWU7Cit9OworCisvKgorICogUmVxdWVzdCBjb25maWd1cmF0aW9uIHNldC9y ZXNldCAtIHJlcXVlc3QgdG8gc2V0IG9yIHJlc2V0CisgKiB0aGUgY29uZmlndXJhdGlvbi9tb2Rl IG9mIHRoZSBkaXNwbGF5OgorICogICAgICAgICAwICAgICAgICAgICAgICAgIDEgICAgICAgICAg ICAgICAgIDIgICAgICAgICAgICAgICAzICAgICAgICBvY3RldAorICogKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisg KiB8ICAgICAgICAgICAgICAgaWQgICAgICAgICAgICAgICAgfCBfT1BfU0VUX0NPTkZJRyB8ICAg cmVzZXJ2ZWQgICAgIHwgNAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOAorICog Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgZmJfY29va2llIGxvdyAz Mi1iaXQgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAg ICAgICAgICAgICAgICAgICAgICAgIGZiX2Nvb2tpZSBoaWdoIDMyLWJpdCAgICAgICAgICAgICAg ICAgICAgICB8IDE2CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMAorICogKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IDI4CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMgorICogKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicHAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgNDAKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IDQ0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvfAorICogKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgNjQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICoKKyAqIFBhc3MgYWxsIHpl cm9zIHRvIHJlc2V0LCBvdGhlcndpc2UgY29tbWFuZCBpcyB0cmVhdGVkIGFzCisgKiBjb25maWd1 cmF0aW9uIHNldC4KKyAqIEZyYW1lYnVmZmVyJ3MgY29va2llIGRlZmluZXMgd2hpY2ggZnJhbWVi dWZmZXIvZGJ1ZiBtdXN0IGJlCisgKiBkaXNwbGF5ZWQgd2hpbGUgZW5hYmxpbmcgZGlzcGxheSAo YXBwbHlpbmcgY29uZmlndXJhdGlvbikuCisgKiB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBi b3VuZCBieSB0aGUgY29ubmVjdG9yJ3MgcmVzb2x1dGlvbiBhbmQgbXVzdCBub3QKKyAqIGV4Y2Vl ZCBpdC4KKyAqCisgKiB4IC0gdWludDMyX3QsIHN0YXJ0aW5nIHBvc2l0aW9uIGluIHBpeGVscyBi eSBYIGF4aXMKKyAqIHkgLSB1aW50MzJfdCwgc3RhcnRpbmcgcG9zaXRpb24gaW4gcGl4ZWxzIGJ5 IFkgYXhpcworICogd2lkdGggLSB1aW50MzJfdCwgd2lkdGggaW4gcGl4ZWxzCisgKiBoZWlnaHQg LSB1aW50MzJfdCwgaGVpZ2h0IGluIHBpeGVscworICogYnBwIC0gdWludDMyX3QsIGJpdHMgcGVy IHBpeGVsCisgKi8KKworc3RydWN0IHhlbmRpc3BsX3NldF9jb25maWdfcmVxIHsKKyAgICB1aW50 NjRfdCBmYl9jb29raWU7CisgICAgdWludDMyX3QgeDsKKyAgICB1aW50MzJfdCB5OworICAgIHVp bnQzMl90IHdpZHRoOworICAgIHVpbnQzMl90IGhlaWdodDsKKyAgICB1aW50MzJfdCBicHA7Cit9 OworCisvKgorICogUmVxdWVzdCBwYWdlIGZsaXAgLSByZXF1ZXN0IHRvIGZsaXAgYSBwYWdlIGlk ZW50aWZpZWQgYnkgdGhlIGZyYW1lYnVmZmVyCisgKiBjb29raWU6CisgKiAgICAgICAgIDAgICAg ICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9j dGV0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICBpZCAgICAgICAgICAgICAg ICB8IF9PUF9QR19GTElQICAgIHwgICByZXNlcnZlZCAgICAgfCA0CisgKiArLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsK KyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCA4CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAg ICAgICAgICBmYl9jb29raWUgbG93IDMyLWJpdCAgICAgICAgICAgICAgICAgICAgICAgfCAxMgor ICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgZmJfY29va2llIGhp Z2ggMzItYml0ICAgICAgICAgICAgICAgICAgICAgIHwgMTYKKyAqICstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICog fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IDIwCisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvfAorICogKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgNjQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICovCisKK3N0 cnVjdCB4ZW5kaXNwbF9wYWdlX2ZsaXBfcmVxIHsKKyAgICB1aW50NjRfdCBmYl9jb29raWU7Cit9 OworCisvKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc3BvbnNlcyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEFsbCByZXNwb25zZSBwYWNr ZXRzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoICg2NCBvY3RldHMpCisgKgorICogQWxsIHJlc3BvbnNl IHBhY2tldHMgaGF2ZSBjb21tb24gaGVhZGVyOgorICogICAgICAgICAwICAgICAgICAgICAgICAg IDEgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAzICAgICAgICBvY3RldAorICogKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgaWQgICAgICAgICAgICAgICAgfCAgICAgICAg ICAgIHJlc2VydmVkICAgICAgICAgICAgIHwgNAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgOAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAqICstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKworICogfC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC98CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2 NAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogaWQgLSB1aW50MTZfdCwgcHJpdmF0ZSBndWVzdCB2 YWx1ZSwgZWNob2VkIGZyb20gcmVxdWVzdAorICogc3RhdHVzIC0gaW50MzJfdCwgcmVzcG9uc2Ug c3RhdHVzLCB6ZXJvIG9uIHN1Y2Nlc3MgYW5kIC1YRU5fRVhYIG9uIGZhaWx1cmUKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV2ZW50cyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogRXZlbnRzIGFyZSBzZW50IHZpYSBhIHNoYXJlZCBw YWdlIGFsbG9jYXRlZCBieSB0aGUgZnJvbnQgYW5kIHByb3BhZ2F0ZWQgYnkKKyAqICAgZXZ0LWV2 ZW50LWNoYW5uZWwvZXZ0LXJpbmctcmVmIFhlblN0b3JlIGVudHJpZXMKKyAqIEFsbCBldmVudCBw YWNrZXRzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoICg2NCBvY3RldHMpCisgKiBBbGwgZXZlbnQgcGFj a2V0cyBoYXZlIGNvbW1vbiBoZWFkZXI6CisgKiAgICAgICAgIDAgICAgICAgICAgICAgICAgMSAg ICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9jdGV0CisgKiArLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSsKKyAqIHwgICAgICAgICAgICAgICBpZCAgICAgICAgICAgICAgICB8ICAgICAgdHlwZSAg ICAgIHwgICByZXNlcnZlZCAgICAgfCA0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCA4CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiBpZCAtIHVpbnQxNl90LCBldmVudCBpZCwgbWF5 IGJlIHVzZWQgYnkgZnJvbnQKKyAqIHR5cGUgLSB1aW50OF90LCB0eXBlIG9mIHRoZSBldmVudAor ICoKKyAqCisgKiBQYWdlIGZsaXAgY29tcGxldGUgZXZlbnQgLSBldmVudCBmcm9tIGJhY2sgdG8g ZnJvbnQgb24gcGFnZSBmbGlwIGNvbXBsZXRlZDoKKyAqICAgICAgICAgMCAgICAgICAgICAgICAg ICAxICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgMyAgICAgICAgb2N0ZXQKKyAqICst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgIGlkICAgICAgICAgICAgICAgIHwgICBfRVZU X1BHX0ZMSVAgfCAgIHJlc2VydmVkICAgICB8IDQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IDgKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgIGZi X2Nvb2tpZSBsb3cgMzItYml0ICAgICAgICAgICAgICAgICAgICAgICB8IDEyCisgKiArLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICBmYl9jb29raWUgaGlnaCAzMi1iaXQg ICAgICAgICAgICAgICAgICAgICAgfCAxNgorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgMjAKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC98CisgKiArLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsK KyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCA2NAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKi8KKworc3RydWN0IHhlbmRp c3BsX3BnX2ZsaXBfZXZ0IHsKKyAgICB1aW50NjRfdCBmYl9jb29raWU7Cit9OworCitzdHJ1Y3Qg eGVuZGlzcGxfcmVxIHsKKyAgICB1aW50MTZfdCBpZDsKKyAgICB1aW50OF90IG9wZXJhdGlvbjsK KyAgICB1aW50OF90IHJlc2VydmVkWzVdOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHhl bmRpc3BsX2RidWZfY3JlYXRlX3JlcSBkYnVmX2NyZWF0ZTsKKyAgICAgICAgc3RydWN0IHhlbmRp c3BsX2RidWZfZGVzdHJveV9yZXEgZGJ1Zl9kZXN0cm95OworICAgICAgICBzdHJ1Y3QgeGVuZGlz cGxfZmJfYXR0YWNoX3JlcSBmYl9hdHRhY2g7CisgICAgICAgIHN0cnVjdCB4ZW5kaXNwbF9mYl9k ZXRhY2hfcmVxIGZiX2RldGFjaDsKKyAgICAgICAgc3RydWN0IHhlbmRpc3BsX3NldF9jb25maWdf cmVxIHNldF9jb25maWc7CisgICAgICAgIHN0cnVjdCB4ZW5kaXNwbF9wYWdlX2ZsaXBfcmVxIHBn X2ZsaXA7CisgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWRbNTZdOworICAgIH0gb3A7Cit9OworCitz dHJ1Y3QgeGVuZGlzcGxfcmVzcCB7CisgICAgdWludDE2X3QgaWQ7CisgICAgdWludDhfdCBvcGVy YXRpb247CisgICAgdWludDhfdCByZXNlcnZlZDsKKyAgICBpbnQzMl90IHN0YXR1czsKKyAgICB1 aW50OF90IHJlc2VydmVkMVs1Nl07Cit9OworCitzdHJ1Y3QgeGVuZGlzcGxfZXZ0IHsKKyAgICB1 aW50MTZfdCBpZDsKKyAgICB1aW50OF90IHR5cGU7CisgICAgdWludDhfdCByZXNlcnZlZFs1XTsK KyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB4ZW5kaXNwbF9wZ19mbGlwX2V2dCBwZ19mbGlw OworICAgICAgICB1aW50OF90IHJlc2VydmVkWzU2XTsKKyAgICB9IG9wOworfTsKKworREVGSU5F X1JJTkdfVFlQRVMoeGVuX2Rpc3BsaWYsIHN0cnVjdCB4ZW5kaXNwbF9yZXEsIHN0cnVjdCB4ZW5k aXNwbF9yZXNwKTsKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgQmFjayB0byBmcm9udCBldmVudHMgZGVsaXZlcnkKKyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqIEluIG9yZGVyIHRvIGRlbGl2ZXIgYXN5bmNocm9ub3VzIGV2ZW50cyBmcm9t IGJhY2sgdG8gZnJvbnQgYSBzaGFyZWQgcGFnZSBpcworICogYWxsb2NhdGVkIGJ5IGZyb250IGFu ZCBpdHMgZ3JhbnRlZCByZWZlcmVuY2UgcHJvcGFnYXRlZCB0byBiYWNrIHZpYQorICogWGVuU3Rv cmUgZW50cmllcyAoZXZlbnQtWFhYKS4KKyAqIFRoaXMgcGFnZSBoYXMgYSBjb21tb24gaGVhZGVy IHVzZWQgYnkgYm90aCBmcm9udCBhbmQgYmFjayB0byBzeW5jaHJvbml6ZQorICogYWNjZXNzIGFu ZCBjb250cm9sIGV2ZW50J3MgcmluZyBidWZmZXIsIHdoaWxlIGJhY2sgYmVpbmcgYSBwcm9kdWNl ciBvZiB0aGUKKyAqIGV2ZW50cyBhbmQgZnJvbnQgYmVpbmcgYSBjb25zdW1lci4gVGhlIHJlc3Qg b2YgdGhlIHBhZ2UgYWZ0ZXIgdGhlIGhlYWRlcgorICogaXMgdXNlZCBmb3IgZXZlbnQgcGFja2V0 cy4KKyAqCisgKiBVcG9uIHJlY2VwdGlvbiBvZiBhbiBldmVudChzKSBmcm9udCBtYXkgY29uZmly bSBpdHMgcmVjZXB0aW9uCisgKiBmb3IgZWl0aGVyIGVhY2ggZXZlbnQsIGdyb3VwIG9mIGV2ZW50 cyBvciBub25lLgorICovCisKK3N0cnVjdCB4ZW5kaXNwbF9ldmVudF9wYWdlIHsKKyAgICB1aW50 MzJfdCBpbl9jb25zOworICAgIHVpbnQzMl90IGluX3Byb2Q7CisgICAgdWludDhfdCByZXNlcnZl ZFs1Nl07Cit9OworCisjZGVmaW5lIFhFTkRJU1BMX0VWRU5UX1BBR0VfU0laRSA0MDk2CisjZGVm aW5lIFhFTkRJU1BMX0lOX1JJTkdfT0ZGUyAoc2l6ZW9mKHN0cnVjdCB4ZW5kaXNwbF9ldmVudF9w YWdlKSkKKyNkZWZpbmUgWEVORElTUExfSU5fUklOR19TSVpFIChYRU5ESVNQTF9FVkVOVF9QQUdF X1NJWkUgLSBYRU5ESVNQTF9JTl9SSU5HX09GRlMpCisjZGVmaW5lIFhFTkRJU1BMX0lOX1JJTkdf TEVOIChYRU5ESVNQTF9JTl9SSU5HX1NJWkUgLyBzaXplb2Yoc3RydWN0IHhlbmRpc3BsX2V2dCkp CisjZGVmaW5lIFhFTkRJU1BMX0lOX1JJTkcocGFnZSkgXAorCSgoc3RydWN0IHhlbmRpc3BsX2V2 dCAqKSgoY2hhciAqKShwYWdlKSArIFhFTkRJU1BMX0lOX1JJTkdfT0ZGUykpCisjZGVmaW5lIFhF TkRJU1BMX0lOX1JJTkdfUkVGKHBhZ2UsIGlkeCkgXAorCShYRU5ESVNQTF9JTl9SSU5HKChwYWdl KSlbKGlkeCkgJSBYRU5ESVNQTF9JTl9SSU5HX0xFTl0pCisKKyNlbmRpZiAvKiBfX1hFTl9QVUJM SUNfSU9fRElTUExJRl9IX18gKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6 IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWIt d2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCi0tIAoyLjcu NAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54 ZW4ub3JnL3hlbi1kZXZlbAo=