LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIFN05HVibGkgRmF2ZXJnZXMgLSA8d3d3LnN0YXVibGkuY29tPgogKiBQaWVycmUgQVVCRVJUICBwLmF1YmVydEBzdGF1YmxpLmNvbQogKgogKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogKiBwcm9qZWN0LgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogKiBNQSAwMjExMS0xMzA3IFVTQQogKi8KLyogVmlkZW8gc3VwcG9ydCBmb3IgdGhlIEVDQ1ggZGF1Z2h0ZXIgYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKCiNpbmNsdWRlIDxjb21tb24uaD4KI2luY2x1ZGUgPGNvbmZpZy5oPgoKI2lmZGVmIENPTkZJR19WSURFT19TRUQxMzgwNgojaW5jbHVkZSA8c2VkMTM4MDYuaD4KCgovKiBTY3JlZW4gY29uZmlndXJhdGlvbnM6IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgU0QxMzgwNiBkZXBlbmRzIG9uCiAgIHNjcmVlbiBhbmQgb24gZGlzcGxheSBtb2RlLiBXZSBoYW5kbGUgb25seSA4YnBwIGFuZCAxNiBicHAgbW9kZXMgICAgICAgICAgKi8KCi8qIEVDQ1ggYm9hcmQgaXMgc3VwcGxpZWQgd2l0aCBhIE5FQyBOTDY0NDhCQzIwIHNjcmVlbiAgICAgICAgICAgICAgICAgICAgICAgKi8KI2lmZGVmIENPTkZJR19ORUNfTkw2NDQ4QkMyMAojZGVmaW5lIERJU1BMQVlfV0lEVEggICA2NDAKI2RlZmluZSBESVNQTEFZX0hFSUdIVCAgNDgwCgojaWZkZWYgQ09ORklHX1ZJREVPX1NFRDEzODA2XzhCUFAKc3RhdGljIGNvbnN0IFMxRF9SRUdTIGluaXRfcmVncyBbXSA9CnsKICAgIHsweDAwMDEsMHgwMH0sICAgLyogTWlzY2VsbGFuZW91cyBSZWdpc3RlciAqLwogICAgezB4MDFGQywweDAwfSwgICAvKiBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIgKi8KICAgIHsweDAwMDQsMHgxYn0sICAgLyogR2VuZXJhbCBJTyBQaW5zIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLwogICAgezB4MDAwNSwweDAwfSwgICAvKiBHZW5lcmFsIElPIFBpbnMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCiAgICB7MHgwMDA4LDB4ZTV9LCAgIC8qIEdlbmVyYWwgSU8gUGlucyBDb250cm9sIFJlZ2lzdGVyIDAgKi8KICAgIHsweDAwMDksMHgxZn0sICAgLyogR2VuZXJhbCBJTyBQaW5zIENvbnRyb2wgUmVnaXN0ZXIgMSAqLwogICAgezB4MDAxMCwweDAyfSwgICAvKiBNZW1vcnkgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwogICAgezB4MDAxNCwweDEwfSwgICAvKiBMQ0QgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwogICAgezB4MDAxOCwweDAyfSwgICAvKiBDUlQvVFYgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwogICAgezB4MDAxQywweDAyfSwgICAvKiBNZWRpYVBsdWcgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwogICAgezB4MDAxRSwweDAxfSwgICAvKiBDUFUgVG8gTWVtb3J5IFdhaXQgU3RhdGUgU2VsZWN0IFJlZ2lzdGVyICovCiAgICB7MHgwMDIxLDB4MDR9LCAgIC8qIERSQU0gUmVmcmVzaCBSYXRlIFJlZ2lzdGVyICovCiAgICB7MHgwMDJBLDB4MDB9LCAgIC8qIERSQU0gVGltaW5ncyBDb250cm9sIFJlZ2lzdGVyIDAgKi8KICAgIHsweDAwMkIsMHgwMX0sICAgLyogRFJBTSBUaW1pbmdzIENvbnRyb2wgUmVnaXN0ZXIgMSAqLwogICAgezB4MDAyMCwweDgwfSwgICAvKiBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwogICAgezB4MDAzMCwweDI1fSwgICAvKiBQYW5lbCBUeXBlIFJlZ2lzdGVyICovCiAgICB7MHgwMDMxLDB4MDB9LCAgIC8qIE1PRCBSYXRlIFJlZ2lzdGVyICovCiAgICB7MHgwMDMyLDB4NEZ9LCAgIC8qIExDRCBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIgKi8KICAgIHsweDAwMzQsMHgxM30sICAgLyogTENEIEhvcml6b250YWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyICovCiAgICB7MHgwMDM1LDB4MDF9LCAgIC8qIFRGVCBGUExJTkUgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIgKi8KICAgIHsweDAwMzYsMHgwQn0sICAgLyogVEZUIEZQTElORSBQdWxzZSBXaWR0aCBSZWdpc3RlciAqLwogICAgezB4MDAzOCwweERGfSwgICAvKiBMQ0QgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMCAqLwogICAgezB4MDAzOSwweDAxfSwgICAvKiBMQ0QgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMSAqLwogICAgezB4MDAzQSwweDJDfSwgICAvKiBMQ0QgVmVydGljYWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyICovCiAgICB7MHgwMDNCLDB4MDB9LCAgIC8qIFRGVCBGUEZSQU1FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyICovCiAgICB7MHgwMDNDLDB4MDF9LCAgIC8qIFRGVCBGUEZSQU1FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyICovCiAgICB7MHgwMDQwLDB4MDN9LCAgIC8qIExDRCBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIgKi8KICAgIHsweDAwNDEsMHgwMn0sICAgLyogTENEIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIgKi8KICAgIHsweDAwNDIsMHgwMH0sICAgLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwICovCiAgICB7MHgwMDQzLDB4MDB9LCAgIC8qIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSAqLwogICAgezB4MDA0NCwweDAwfSwgICAvKiBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KICAgIHsweDAwNDYsMHg0MH0sICAgLyogTENEIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwICovCiAgICB7MHgwMDQ3LDB4MDF9LCAgIC8qIExDRCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSAqLwogICAgezB4MDA0OCwweDAwfSwgICAvKiBMQ0QgUGl4ZWwgUGFubmluZyBSZWdpc3RlciAqLwogICAgezB4MDA0QSwweDAwfSwgICAvKiBMQ0QgRGlzcGxheSBGSUZPIEhpZ2ggVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIgKi8KICAgIHsweDAwNEIsMHgwMH0sICAgLyogTENEIERpc3BsYXkgRklGTyBMb3cgVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIgKi8KICAgIHsweDAwNTAsMHg0Rn0sICAgLyogQ1JUL1RWIEhvcml6b250YWwgRGlzcGxheSBXaWR0aCBSZWdpc3RlciAqLwogICAgezB4MDA1MiwweDEzfSwgICAvKiBDUlQvVFYgSG9yaXpvbnRhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgKi8KICAgIHsweDAwNTMsMHgwMX0sICAgLyogQ1JUL1RWIEhSVEMgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIgKi8KICAgIHsweDAwNTQsMHgwQn0sICAgLyogQ1JUL1RWIEhSVEMgUHVsc2UgV2lkdGggUmVnaXN0ZXIgKi8KICAgIHsweDAwNTYsMHhERn0sICAgLyogQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDAgKi8KICAgIHsweDAwNTcsMHgwMX0sICAgLyogQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEgKi8KICAgIHsweDAwNTgsMHgyQn0sICAgLyogQ1JUL1RWIFZlcnRpY2FsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciAqLwogICAgezB4MDA1OSwweDA5fSwgICAvKiBDUlQvVFYgVlJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciAqLwogICAgezB4MDA1QSwweDAxfSwgICAvKiBDUlQvVFYgVlJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciAqLwogICAgezB4MDA1QiwweDAwfSwgICAvKiBUViBPdXRwdXQgQ29udHJvbCBSZWdpc3RlciAqLwogICAgezB4MDA2MCwweDAzfSwgICAvKiBDUlQvVFYgRGlzcGxheSBNb2RlIFJlZ2lzdGVyICovCiAgICB7MHgwMDYyLDB4MDB9LCAgIC8qIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCAqLwogICAgezB4MDA2MywweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KICAgIHsweDAwNjQsMHgwMH0sICAgLyogQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyICovCiAgICB7MHgwMDY2LDB4NDB9LCAgIC8qIENSVC9UViBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMCAqLwogICAgezB4MDA2NywweDAxfSwgICAvKiBDUlQvVFYgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEgKi8KICAgIHsweDAwNjgsMHgwMH0sICAgLyogQ1JUL1RWIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIgKi8KICAgIHsweDAwNkEsMHgwMH0sICAgLyogQ1JUL1RWIERpc3BsYXkgRklGTyBIaWdoIFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyICovCiAgICB7MHgwMDZCLDB4MDB9LCAgIC8qIENSVC9UViBEaXNwbGF5IEZJRk8gTG93IFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyICovCiAgICB7MHgwMDcwLDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIgKi8KICAgIHsweDAwNzEsMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLwogICAgezB4MDA3MiwweDAwfSwgICAvKiBMQ0QgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMCAqLwogICAgezB4MDA3MywweDAwfSwgICAvKiBMQ0QgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMSAqLwogICAgezB4MDA3NCwweDAwfSwgICAvKiBMQ0QgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMCAqLwogICAgezB4MDA3NSwweDAwfSwgICAvKiBMQ0QgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMSAqLwogICAgezB4MDA3NiwweDAwfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIgKi8KICAgIHsweDAwNzcsMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMCBSZWdpc3RlciAqLwogICAgezB4MDA3OCwweDAwfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBSZWQgQ29sb3IgMCBSZWdpc3RlciAqLwogICAgezB4MDA3QSwweDFGfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIgKi8KICAgIHsweDAwN0IsMHgzRn0sICAgLyogTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMSBSZWdpc3RlciAqLwogICAgezB4MDA3QywweDFGfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBSZWQgQ29sb3IgMSBSZWdpc3RlciAqLwogICAgezB4MDA3RSwweDAwfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBGSUZPIFRocmVzaG9sZCBSZWdpc3RlciAqLwogICAgezB4MDA4MCwweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBDb250cm9sIFJlZ2lzdGVyICovCiAgICB7MHgwMDgxLDB4MDB9LCAgIC8qIENSVC9UViBJbmsvQ3Vyc29yIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KICAgIHsweDAwODIsMHgwMH0sICAgLyogQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAgKi8KICAgIHsweDAwODMsMHgwMH0sICAgLyogQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDEgKi8KICAgIHsweDAwODQsMHgwMH0sICAgLyogQ1JUL1RWIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDAgKi8KICAgIHsweDAwODUsMHgwMH0sICAgLyogQ1JUL1RWIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEgKi8KICAgIHsweDAwODYsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAwIFJlZ2lzdGVyICovCiAgICB7MHgwMDg3LDB4MDB9LCAgIC8qIENSVC9UViBJbmsvQ3Vyc29yIEdyZWVuIENvbG9yIDAgUmVnaXN0ZXIgKi8KICAgIHsweDAwODgsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIgKi8KICAgIHsweDAwOEEsMHgxRn0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAxIFJlZ2lzdGVyICovCiAgICB7MHgwMDhCLDB4M0Z9LCAgIC8qIENSVC9UViBJbmsvQ3Vyc29yIEdyZWVuIENvbG9yIDEgUmVnaXN0ZXIgKi8KICAgIHsweDAwOEMsMHgxRn0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIgKi8KICAgIHsweDAwOEUsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgRklGTyBUaHJlc2hvbGQgUmVnaXN0ZXIgKi8KICAgIHsweDAxMDAsMHgwMH0sICAgLyogQml0Qmx0IENvbnRyb2wgUmVnaXN0ZXIgMCAqLwogICAgezB4MDEwMSwweDAwfSwgICAvKiBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAxICovCiAgICB7MHgwMTAyLDB4MDB9LCAgIC8qIEJpdEJsdCBST1AgQ29kZS9Db2xvciBFeHBhbnNpb24gUmVnaXN0ZXIgKi8KICAgIHsweDAxMDMsMHgwMH0sICAgLyogQml0Qmx0IE9wZXJhdGlvbiBSZWdpc3RlciAqLwogICAgezB4MDEwNCwweDAwfSwgICAvKiBCaXRCbHQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCAqLwogICAgezB4MDEwNSwweDAwfSwgICAvKiBCaXRCbHQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSAqLwogICAgezB4MDEwNiwweDAwfSwgICAvKiBCaXRCbHQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMiAqLwogICAgezB4MDEwOCwweDAwfSwgICAvKiBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwICovCiAgICB7MHgwMTA5LDB4MDB9LCAgIC8qIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KICAgIHsweDAxMEEsMHgwMH0sICAgLyogQml0Qmx0IERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMiAqLwogICAgezB4MDEwQywweDAwfSwgICAvKiBCaXRCbHQgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAgKi8KICAgIHsweDAxMEQsMHgwMH0sICAgLyogQml0Qmx0IE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxICovCiAgICB7MHgwMTEwLDB4MDB9LCAgIC8qIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAwICovCiAgICB7MHgwMTExLDB4MDB9LCAgIC8qIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAxICovCiAgICB7MHgwMTEyLDB4MDB9LCAgIC8qIEJpdEJsdCBIZWlnaHQgUmVnaXN0ZXIgMCAqLwogICAgezB4MDExMywweDAwfSwgICAvKiBCaXRCbHQgSGVpZ2h0IFJlZ2lzdGVyIDEgKi8KICAgIHsweDAxMTQsMHgwMH0sICAgLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCAqLwogICAgezB4MDExNSwweDAwfSwgICAvKiBCaXRCbHQgQmFja2dyb3VuZCBDb2xvciBSZWdpc3RlciAxICovCiAgICB7MHgwMTE4LDB4MDB9LCAgIC8qIEJpdEJsdCBGb3JlZ3JvdW5kIENvbG9yIFJlZ2lzdGVyIDAgKi8KICAgIHsweDAxMTksMHgwMH0sICAgLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSAqLwogICAgezB4MDFFMCwweDAwfSwgICAvKiBMb29rLVVwIFRhYmxlIE1vZGUgUmVnaXN0ZXIgKi8KICAgIHsweDAxRTIsMHgwMH0sICAgLyogTG9vay1VcCBUYWJsZSBBZGRyZXNzIFJlZ2lzdGVyICovCiAgICB7MHgwMUU0LDB4MDB9LCAgIC8qIExvb2stVXAgVGFibGUgRGF0YSBSZWdpc3RlciAqLwogICAgezB4MDFGMCwweDEwfSwgICAvKiBQb3dlciBTYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KICAgIHsweDAxRjEsMHgwMH0sICAgLyogUG93ZXIgU2F2ZSBTdGF0dXMgUmVnaXN0ZXIgKi8KICAgIHsweDAxRjQsMHgwMH0sICAgLyogQ1BVLXRvLU1lbW9yeSBBY2Nlc3MgV2F0Y2hkb2cgVGltZXIgUmVnaXN0ZXIgKi8KICAgIHsweDAxRkMsMHgwMX0sICAgLyogRGlzcGxheSBNb2RlIFJlZ2lzdGVyICovCiAgICB7MCwgMH0KfTsKI2VuZGlmIC8qIENPTkZJR19WSURFT19TRUQxMzgwNl84QlBQICovCgojaWZkZWYgQ09ORklHX1ZJREVPX1NFRDEzODA2XzE2QlBQCgpzdGF0aWMgY29uc3QgUzFEX1JFR1MgaW5pdF9yZWdzIFtdID0KewogICAgezB4MDAwMSwweDAwfSwgICAvKiBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyICovCiAgICB7MHgwMUZDLDB4MDB9LCAgIC8qIERpc3BsYXkgTW9kZSBSZWdpc3RlciAqLwogICAgezB4MDAwNCwweDFifSwgICAvKiBHZW5lcmFsIElPIFBpbnMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCiAgICB7MHgwMDA1LDB4MDB9LCAgIC8qIEdlbmVyYWwgSU8gUGlucyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KICAgIHsweDAwMDgsMHhlNX0sICAgLyogR2VuZXJhbCBJTyBQaW5zIENvbnRyb2wgUmVnaXN0ZXIgMCAqLwogICAgezB4MDAwOSwweDFmfSwgICAvKiBHZW5lcmFsIElPIFBpbnMgQ29udHJvbCBSZWdpc3RlciAxICovCiAgICB7MHgwMDEwLDB4MDJ9LCAgIC8qIE1lbW9yeSBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCiAgICB7MHgwMDE0LDB4MTB9LCAgIC8qIExDRCBQaXhlbCBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCiAgICB7MHgwMDE4LDB4MDJ9LCAgIC8qIENSVC9UViBQaXhlbCBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCiAgICB7MHgwMDFDLDB4MDJ9LCAgIC8qIE1lZGlhUGx1ZyBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCiAgICB7MHgwMDFFLDB4MDF9LCAgIC8qIENQVSBUbyBNZW1vcnkgV2FpdCBTdGF0ZSBTZWxlY3QgUmVnaXN0ZXIgKi8KICAgIHsweDAwMjEsMHgwNH0sICAgLyogRFJBTSBSZWZyZXNoIFJhdGUgUmVnaXN0ZXIgKi8KICAgIHsweDAwMkEsMHgwMH0sICAgLyogRFJBTSBUaW1pbmdzIENvbnRyb2wgUmVnaXN0ZXIgMCAqLwogICAgezB4MDAyQiwweDAxfSwgICAvKiBEUkFNIFRpbWluZ3MgQ29udHJvbCBSZWdpc3RlciAxICovCiAgICB7MHgwMDIwLDB4ODB9LCAgIC8qIE1lbW9yeSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCiAgICB7MHgwMDMwLDB4MjV9LCAgIC8qIFBhbmVsIFR5cGUgUmVnaXN0ZXIgKi8KICAgIHsweDAwMzEsMHgwMH0sICAgLyogTU9EIFJhdGUgUmVnaXN0ZXIgKi8KICAgIHsweDAwMzIsMHg0Rn0sICAgLyogTENEIEhvcml6b250YWwgRGlzcGxheSBXaWR0aCBSZWdpc3RlciAqLwogICAgezB4MDAzNCwweDEzfSwgICAvKiBMQ0QgSG9yaXpvbnRhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgKi8KICAgIHsweDAwMzUsMHgwMX0sICAgLyogVEZUIEZQTElORSBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciAqLwogICAgezB4MDAzNiwweDBCfSwgICAvKiBURlQgRlBMSU5FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyICovCiAgICB7MHgwMDM4LDB4REZ9LCAgIC8qIExDRCBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAwICovCiAgICB7MHgwMDM5LDB4MDF9LCAgIC8qIExDRCBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAxICovCiAgICB7MHgwMDNBLDB4MkN9LCAgIC8qIExDRCBWZXJ0aWNhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgKi8KICAgIHsweDAwM0IsMHgwMH0sICAgLyogVEZUIEZQRlJBTUUgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIgKi8KICAgIHsweDAwM0MsMHgwMX0sICAgLyogVEZUIEZQRlJBTUUgUHVsc2UgV2lkdGggUmVnaXN0ZXIgKi8KICAgIHsweDAwNDAsMHgwNX0sICAgLyogTENEIERpc3BsYXkgTW9kZSBSZWdpc3RlciAqLwogICAgezB4MDA0MSwweDAyfSwgICAvKiBMQ0QgTWlzY2VsbGFuZW91cyBSZWdpc3RlciAqLwogICAgezB4MDA0MiwweDAwfSwgICAvKiBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KICAgIHsweDAwNDMsMHgwMH0sICAgLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxICovCiAgICB7MHgwMDQ0LDB4MDB9LCAgIC8qIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMiAqLwogICAgezB4MDA0NiwweDgwfSwgICAvKiBMQ0QgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAgKi8KICAgIHsweDAwNDcsMHgwMn0sICAgLyogTENEIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxICovCiAgICB7MHgwMDQ4LDB4MDB9LCAgIC8qIExDRCBQaXhlbCBQYW5uaW5nIFJlZ2lzdGVyICovCiAgICB7MHgwMDRBLDB4MDB9LCAgIC8qIExDRCBEaXNwbGF5IEZJRk8gSGlnaCBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciAqLwogICAgezB4MDA0QiwweDAwfSwgICAvKiBMQ0QgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciAqLwogICAgezB4MDA1MCwweDRGfSwgICAvKiBDUlQvVFYgSG9yaXpvbnRhbCBEaXNwbGF5IFdpZHRoIFJlZ2lzdGVyICovCiAgICB7MHgwMDUyLDB4MTN9LCAgIC8qIENSVC9UViBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciAqLwogICAgezB4MDA1MywweDAxfSwgICAvKiBDUlQvVFYgSFJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciAqLwogICAgezB4MDA1NCwweDBCfSwgICAvKiBDUlQvVFYgSFJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciAqLwogICAgezB4MDA1NiwweERGfSwgICAvKiBDUlQvVFYgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMCAqLwogICAgezB4MDA1NywweDAxfSwgICAvKiBDUlQvVFYgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMSAqLwogICAgezB4MDA1OCwweDJCfSwgICAvKiBDUlQvVFYgVmVydGljYWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyICovCiAgICB7MHgwMDU5LDB4MDl9LCAgIC8qIENSVC9UViBWUlRDIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyICovCiAgICB7MHgwMDVBLDB4MDF9LCAgIC8qIENSVC9UViBWUlRDIFB1bHNlIFdpZHRoIFJlZ2lzdGVyICovCiAgICB7MHgwMDVCLDB4MDB9LCAgIC8qIFRWIE91dHB1dCBDb250cm9sIFJlZ2lzdGVyICovCiAgICB7MHgwMDYwLDB4MDV9LCAgIC8qIENSVC9UViBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIgKi8KICAgIHsweDAwNjIsMHgwMH0sICAgLyogQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwICovCiAgICB7MHgwMDYzLDB4MDB9LCAgIC8qIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSAqLwogICAgezB4MDA2NCwweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KICAgIHsweDAwNjYsMHg4MH0sICAgLyogQ1JUL1RWIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwICovCiAgICB7MHgwMDY3LDB4MDJ9LCAgIC8qIENSVC9UViBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSAqLwogICAgezB4MDA2OCwweDAwfSwgICAvKiBDUlQvVFYgUGl4ZWwgUGFubmluZyBSZWdpc3RlciAqLwogICAgezB4MDA2QSwweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBGSUZPIEhpZ2ggVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIgKi8KICAgIHsweDAwNkIsMHgwMH0sICAgLyogQ1JUL1RWIERpc3BsYXkgRklGTyBMb3cgVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIgKi8KICAgIHsweDAwNzAsMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgQ29udHJvbCBSZWdpc3RlciAqLwogICAgezB4MDA3MSwweDAwfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCiAgICB7MHgwMDcyLDB4MDB9LCAgIC8qIExDRCBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAwICovCiAgICB7MHgwMDczLDB4MDB9LCAgIC8qIExDRCBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAxICovCiAgICB7MHgwMDc0LDB4MDB9LCAgIC8qIExDRCBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwICovCiAgICB7MHgwMDc1LDB4MDB9LCAgIC8qIExDRCBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAxICovCiAgICB7MHgwMDc2LDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMCBSZWdpc3RlciAqLwogICAgezB4MDA3NywweDAwfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyICovCiAgICB7MHgwMDc4LDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIFJlZCBDb2xvciAwIFJlZ2lzdGVyICovCiAgICB7MHgwMDdBLDB4MUZ9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMSBSZWdpc3RlciAqLwogICAgezB4MDA3QiwweDNGfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyICovCiAgICB7MHgwMDdDLDB4MUZ9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIFJlZCBDb2xvciAxIFJlZ2lzdGVyICovCiAgICB7MHgwMDdFLDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyICovCiAgICB7MHgwMDgwLDB4MDB9LCAgIC8qIENSVC9UViBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIgKi8KICAgIHsweDAwODEsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLwogICAgezB4MDA4MiwweDAwfSwgICAvKiBDUlQvVFYgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMCAqLwogICAgezB4MDA4MywweDAwfSwgICAvKiBDUlQvVFYgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMSAqLwogICAgezB4MDA4NCwweDAwfSwgICAvKiBDUlQvVFYgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMCAqLwogICAgezB4MDA4NSwweDAwfSwgICAvKiBDUlQvVFYgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMSAqLwogICAgezB4MDA4NiwweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIgKi8KICAgIHsweDAwODcsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMCBSZWdpc3RlciAqLwogICAgezB4MDA4OCwweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBSZWQgQ29sb3IgMCBSZWdpc3RlciAqLwogICAgezB4MDA4QSwweDFGfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIgKi8KICAgIHsweDAwOEIsMHgzRn0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMSBSZWdpc3RlciAqLwogICAgezB4MDA4QywweDFGfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBSZWQgQ29sb3IgMSBSZWdpc3RlciAqLwogICAgezB4MDA4RSwweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBGSUZPIFRocmVzaG9sZCBSZWdpc3RlciAqLwogICAgezB4MDEwMCwweDAwfSwgICAvKiBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAwICovCiAgICB7MHgwMTAxLDB4MDB9LCAgIC8qIEJpdEJsdCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KICAgIHsweDAxMDIsMHgwMH0sICAgLyogQml0Qmx0IFJPUCBDb2RlL0NvbG9yIEV4cGFuc2lvbiBSZWdpc3RlciAqLwogICAgezB4MDEwMywweDAwfSwgICAvKiBCaXRCbHQgT3BlcmF0aW9uIFJlZ2lzdGVyICovCiAgICB7MHgwMTA0LDB4MDB9LCAgIC8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwICovCiAgICB7MHgwMTA1LDB4MDB9LCAgIC8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxICovCiAgICB7MHgwMTA2LDB4MDB9LCAgIC8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyICovCiAgICB7MHgwMTA4LDB4MDB9LCAgIC8qIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KICAgIHsweDAxMDksMHgwMH0sICAgLyogQml0Qmx0IERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSAqLwogICAgezB4MDEwQSwweDAwfSwgICAvKiBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyICovCiAgICB7MHgwMTBDLDB4MDB9LCAgIC8qIEJpdEJsdCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMCAqLwogICAgezB4MDEwRCwweDAwfSwgICAvKiBCaXRCbHQgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEgKi8KICAgIHsweDAxMTAsMHgwMH0sICAgLyogQml0Qmx0IFdpZHRoIFJlZ2lzdGVyIDAgKi8KICAgIHsweDAxMTEsMHgwMH0sICAgLyogQml0Qmx0IFdpZHRoIFJlZ2lzdGVyIDEgKi8KICAgIHsweDAxMTIsMHgwMH0sICAgLyogQml0Qmx0IEhlaWdodCBSZWdpc3RlciAwICovCiAgICB7MHgwMTEzLDB4MDB9LCAgIC8qIEJpdEJsdCBIZWlnaHQgUmVnaXN0ZXIgMSAqLwogICAgezB4MDExNCwweDAwfSwgICAvKiBCaXRCbHQgQmFja2dyb3VuZCBDb2xvciBSZWdpc3RlciAwICovCiAgICB7MHgwMTE1LDB4MDB9LCAgIC8qIEJpdEJsdCBCYWNrZ3JvdW5kIENvbG9yIFJlZ2lzdGVyIDEgKi8KICAgIHsweDAxMTgsMHgwMH0sICAgLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCAqLwogICAgezB4MDExOSwweDAwfSwgICAvKiBCaXRCbHQgRm9yZWdyb3VuZCBDb2xvciBSZWdpc3RlciAxICovCiAgICB7MHgwMUUwLDB4MDF9LCAgIC8qIExvb2stVXAgVGFibGUgTW9kZSBSZWdpc3RlciAqLwogICAgezB4MDFFMiwweDAwfSwgICAvKiBMb29rLVVwIFRhYmxlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KICAgIHsweDAxRTQsMHgwMH0sICAgLyogTG9vay1VcCBUYWJsZSBEYXRhIFJlZ2lzdGVyICovCiAgICB7MHgwMUYwLDB4MTB9LCAgIC8qIFBvd2VyIFNhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwogICAgezB4MDFGMSwweDAwfSwgICAvKiBQb3dlciBTYXZlIFN0YXR1cyBSZWdpc3RlciAqLwogICAgezB4MDFGNCwweDAwfSwgICAvKiBDUFUtdG8tTWVtb3J5IEFjY2VzcyBXYXRjaGRvZyBUaW1lciBSZWdpc3RlciAqLwogICAgezB4MDFGQywweDAxfSwgICAvKiBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIgKi8KICAgIHswLCAwfQp9OwoKI2VuZGlmIC8qIENPTkZJR19WSURFT19TRUQxMzgwNl8xNkJQUCAqLwojZW5kaWYgLyogQ09ORklHX05FQ19OTDY0NDhCQzIwICovCgoKI2lmZGVmIENPTkZJR19DT05TT0xFX0VYVFJBX0lORk8KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogdmlkZW9fZ2V0X2luZm9fc3RyIC0tIHNldHVwIGEgYm9hcmQgc3RyaW5nOiB0eXBlLCBzcGVlZCwgZXRjLgogKiBsaW5lX251bWJlcj0gbG9jYXRpb24gdG8gcGxhY2UgaW5mbyBzdHJpbmcgYmVzaWRlIGxvZ28KICogaW5mbz0gYnVmZmVyIGZvciBpbmZvIHN0cmluZwogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwp2b2lkIHZpZGVvX2dldF9pbmZvX3N0ciAoaW50IGxpbmVfbnVtYmVyLCBjaGFyICppbmZvKQp7CiAgICBpZiAobGluZV9udW1iZXIgPT0gMSkgewoJc3RyY3B5IChpbmZvLCAiIFJQWENsYXNzaWMgYm9hcmQiKTsKICAgIH0KICAgIGVsc2UgewoJaW5mbyBbMF0gPSAnXDAnOwogICAgfQoKfQojZW5kaWYKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogYm9hcmRfdmlkZW9faW5pdCAtLSBpbml0IGRlIGwnRVBTT04sIGNvbmZpZyBkdSBDUwogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwp1bnNpZ25lZCBpbnQgYm9hcmRfdmlkZW9faW5pdCAodm9pZCkKewogICAgdm9sYXRpbGUgaW1tYXBfdCAgICAgKmltbWFwICA9IChpbW1hcF90ICopQ09ORklHX1NZU19JTU1SOwogICAgdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbWVtY3RsOwoKICAgIC8qIFByb2dyYW0gRUNDWCByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgKihFQ0NYX0NTUjEyKSB8PSBFQ0NYXzg2MDsKICAgICooRUNDWF9DU1I4KSB8PSBFQ0NYX0JFIHwgRUNDWF9DUzI7CiAgICAqKEVDQ1hfQ1NSOCkgfD0gRUNDWF9FTkVQU09OOwoKICAgIG1lbWN0bC0+bWVtY19vcjIgPSBTRUQxMzgwNl9PUjsKICAgIG1lbWN0bC0+bWVtY19icjIgPSBTRUQxMzgwNl9SRUdfQUREUiB8IFNFRDEzODA2X0FDQ0VTOwoKICAgIHJldHVybiAoU0VEMTM4MDZfUkVHX0FERFIpOwp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGJvYXJkX3ZhbGlkYXRlX3NjcmVlbiAtLQogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwp2b2lkIGJvYXJkX3ZhbGlkYXRlX3NjcmVlbiAodW5zaWduZWQgaW50IGJhc2UpCnsKICAgIC8qIEFjdGl2YXRlIHRoZSBwYW5lbCBiaWFzIHBvd2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGJhc2UgKyBSRUdfR1BJT19DVFJMKSA9IDB4ODA7Cn0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBib2FyZF9nZXRfcmVncyAtLQogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwpjb25zdCBTMURfUkVHUyAqYm9hcmRfZ2V0X3JlZ3MgKHZvaWQpCnsKICAgIHJldHVybiAoaW5pdF9yZWdzKTsKfQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGJvYXJkX2dldF93aWR0aCAtLQogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwppbnQgYm9hcmRfZ2V0X3dpZHRoICh2b2lkKQp7CiAgICByZXR1cm4gKERJU1BMQVlfV0lEVEgpOwp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGJvYXJkX2dldF9oZWlnaHQgLS0KICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KaW50IGJvYXJkX2dldF9oZWlnaHQgKHZvaWQpCnsKICAgIHJldHVybiAoRElTUExBWV9IRUlHSFQpOwp9CgojZW5kaWYgLyogQ09ORklHX1ZJREVPX1NFRDEzODA2ICovCg==