ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8gICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfCAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGlzdG9yeSBvZiBDaGFuZ2VzCgpWZXJzaW9uIDcuOS43LXByZTIKCkRhbmllbCAoNyBNYXkgMjAwMikKLSBVcGRhdGVkIHRoZSBtYW4gcGFnZSB3aXRoIC0tdHJhY2UtYXNjaWkgYW5kIC1qLy0tanVuay1zZXNzaW9uLWNvb2tpZXMuCgotIE1hZGUgLS10cmFjZS1hc2NpaSBkbyBwcmV0dHkgbXVjaCB0aGUgc2FtZSBhcyAtLXRyYWNlIGJ1dCB3aXRob3V0IHRoZSBoZXgKICBwYXJ0IGluIHRoZSBvdXRwdXQuCgotIEFkZGVkIENVUkxPUFRfQ09PS0lFU0VTU0lPTiB0aGF0IHdoZW4gZW5hYmxlZCBtYWtlcyBsaWJjdXJsIGlnbm9yZSBzZXNzaW9uCiAgY29va2llcyByZWFkIGZyb20gYSBmaWxlLiBUaGlzIG9wdGlvbiBpcyBlbmZvcmNlZCBieSB0aGUgY3VybCBjb21tYW5kIGxpbmUKICB0b29sIHVzaW5nIHRoZSBuZXcgLWovLS1qdW5rLXNlc3Npb24tY29va2llcyBvcHRpb24uIEFmdGVyIGRpc2N1c3Npb25zIHdpdGgKICBLZXZpbiBSb3RoLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0byB1c2UgY3VybCB0byBmdWxseSBlbXVsYXRlIGEgYnJvd3NlcidzCiAgYmVoYXZpb3IsIGV2ZW4gd2hlbiBpdCBjb21lcyB0byAic2Vzc2lvbiBjb29raWVzIi4gU2Vzc2lvbiBjb29raWVzIGFyZQogIGNvb2tpZXMgdGhhdCBhIG5vcm1hbCBicm93c2VyIGRpc2NhcmRzIHdoZW4gdGhlIGJyb3dzZXIgaXMgc2h1dAogIGRvd24uIFRoZXkncmUgaWRlbnRpZmllZCBieSBub3QgaGF2aW5nIGFueSBleHBpcmUgZGF0ZS90aW1lLgoKLSBXaGVuIENVUkxPUFRfREVCVUdEQVRBIHdhcyBzZXQsIGl0IHJ1aW5lZCB0aGUgQ1VSTE9QVF9TVERFUlIgc2V0dGluZyBhbmQKICB0aGlzIHdhcyBkaXNjb3ZlcmVkIHdoZW4gLS10cmFjZSB3YXMgbWFkZSB0byBjcmFzaC4KCi0gVXNpbmcgLXYgYW5kIC0tdHJhY2UgYXQgdGhlIHNhbWUgdGltZSBjb25mdXNlZCBtYXR0ZXJzLiAtdiBpcyBub3cgcHJldHR5CiAgbXVjaCBpZ25vcmVkIHdoZW4gLS10cmFjZSBvciAtLXRyYWNlLWFzY2lpIGlzIHVzZWQuCgotIE1hZGUgLS10cmFjZSAoYW5kIC0tdHJhY2UtYXNjaWkpIHN1cHBvcnQgLSBhcyBmaWxlIG5hbWUgdG8gcGFzcyBvdXRwdXQgdG8KICBzdGRvdXQgaW5zdGVhZC4gSXQgbWFrZXMgaXQgY29uc2lzdGVudCB3aXRoIGhvdyBvdGhlciBvcHRpb25zIHdvcmsuCgpWZXJzaW9uIDcuOS43LXByZTEKCkRhbmllbCAoNiBNYXkgMjAwMikKLSBBZGRlZCBtdWx0aS1wb3N0LmMgdG8gdGhlIGV4YW1wbGVzIGRpcmVjdG9yeS4gSSBnb3QgdGhlIGJhc2ljIHNvdXJjZSBmb3IKICB0aGlzIGZyb20gR3VzdGFmIEh1aS4KCkRhbmllbCAoMyBNYXkgMjAwMikKLSBDVVJMX01BWF9XUklURV9TSVpFIGlzIG5vdyBhbiBleHBvcnRlZCAjZGVmaW5lIGluIHRoZSBjdXJsL2N1cmwuaCBoZWFkZXIgYW5kCiAgY2FuIGJlIHVzZWQgdG8gZmlndXJlIG91dCB0aGUgbWF4aW11bSBidWZmZXIgc2l6ZSB5b3VyIHdyaXRlIGNhbGxiYWNrIGNhbgogIGdldC4KCi0gQ1VSTE9QVF9SRUFEREFUQSBpcyBub3cgYW4gYWxpYXMgZm9yIENVUkxPUFRfSU5GSUxFIGFuZCBDVVJMT1BUX1dSSVRFREFURSBpcwogIGFuIGFsaWFzIGZvciBDVVJMT1BUX0ZJTEUuIFRoZXNlIHR3byB3ZXJlIGFkZGVkIGZvciBjb25mb3JtaXR5LiBNb3N0IG90aGVyCiAgY2FsbGJhY2sgZnVuY3Rpb24ncyB1c2VyZGF0YSBhcmUgcHJvdmlkZWQgd2l0aCBvcHRpb25zIHVzaW5nIGEgc2ltaWxhciBuYW1lLQogIHNjaGVtZS4KCi0gQWRkZWQgIi0tdHJhY2UgW2ZpbGVdIiB0byB0aGUgY29tbWFuZCBsaW5lIHRvb2wuIEl0IG1ha2VzIGEgdmVyeSBkZXRhaWxlZAogIHRyYWNlIGR1bXAgZ2V0IHN0b3JlZCwgd2l0aCBhIGZ1bGwgcHJvdG9jb2wgZHVtcCB0aGF0IGluY2x1ZGVzIGFsbCByZWNlaXZlZAogIGFuZCB0cmFuc21pdHRlZCBkYXRhLiBUaGlzIGNvdWxkIGJlIGEgdmVyeSBlZmZlY3RpdmUgdG9vbCBmb3IgZGVidWdnaW5nIHdoYXQKICBnb2VzIHdyb25nLiBUaGlzIGR1bXAgaW5jbHVkZXMgZXZlcnkgYnl0ZSB0aGUgd2F5IGl0IGlzIHNlbnQgdG8vcmVjZWl2ZWQKICBmcm9tIHRoZSBzZXJ2ZXIuIFRoZSBkdW1wIGlzIHRoZSBwbGFpbi10ZXh0IHZlcnNpb24sIHNvIFNTTCB0cmFuc2ZlcnMgd2lsbAogIHN0aWxsIGJlIHJlYWRhYmxlLgoKLSBJIGZvdW5kIG91dCB0aGF0IHRoZSBERUJVR0ZVTkNUSU9OIHdhcyBub3QgY2FsbGVkIHByb3Blcmx5IGV2ZXJ5d2hlcmUgYXMgd2UKICB3YW50ZWQgaXQgdG8uIEkgZml4ZWQgaXQuCgotIC1EIG5vdyBzdG9yZXMgYWxsIGhlYWRlcnMgdG8gdGhlIHNhbWUgZmlsZSBpZiBtdWx0aXBsZSBVUkxzIGFyZSBnaXZlbiBvbiB0aGUKICBjb21tYW5kIGxpbmUhIEtldmluIFJvdGggbWFkZSBtZSBhd2FyZSBvZiB0aGF0IGl0IGRpZG4ndCBhbHJlYWR5IGRvIHRoaXMhCgotIEd1c3RhZiBIdWkgd3JvdGUgYW4gZXhjZWxsZW50IGZvcm1wb3N0IGV4YW1wbGUgdGhhdCB1c2VkIHRoZSBtdWx0aQogIGludGVyZmFjZS4gIFVuZm9ydHVuYXRlbHksIGl0IGRpZG4ndCB3b3JrIGR1ZSB0byBzZXZlcmFsIGJ1Z3MgaW4gaG93CiAgdHJhbnNmZXJzIHdlcmUgbWFkZSB3aGVuIHRoZSBtdWx0aSBpbnRlcmZhY2Ugd2FzIHVzZWQuCgpEYW5pZWwgKDIgTWF5IDIwMDIpCi0gSGFubm8gS3Jhbnpob2ZmIGZvdW5kIG91dCB0aGF0IHdoZW4gZG9pbmcgbXVsdGlwbGUgdHJhbnNmZXJzIG9uIHRoZSBzYW1lCiAgZWFzeSBoYW5kbGUsIHRoZSBwcm9ncmVzcyBtZXRlciB3b3VsZCBzaG93IGEgYmFkICJjdXJyZW50bHkgZG93bmxvYWRlZAogIHZhbHVlIiB3aGVuIHRoZSB0cmFuc2ZlciBzdGFydHMuCgpEYW5pZWwgKDEgTWF5IDIwMDIpCi0gQXBwbGllZCBhbm90aGVyIHBhdGNoIGJ5IEphY2t5IExhbSB0byBtYWtlIHRoZSBuYW1lIHJlc29sdmUgaW5mbyByZWFsbG9jKCkKICBzdHVmZiB3b3JrIHByb3Blcmx5LgoKRGFuaWVsICgyOCBBcHJpbCAyMDAyKQotIGN1cmxfbXVsdGlfaW5mb19yZWFkKCkgaXMgbm93IGltcGxlbWVudGVkIQoKRGFuaWVsICgyNyBBcHJpbCAyMDAyKQotIFVwZGF0ZWQgQlVHUywgVE9ETywgRkFRLCBJTlNUQUxMIGFuZCBhZGRlZCBCSU5ESU5HUy4KCi0gSSB0aGluayBJIGZpeGVkIHRoZSBETlMgY2FjaGUgcHJ1bmUgY3JhY2ggSmFja3kgTGFtIGZvdW5kIGFuZCByZXBvcnRlZC4KCi0gSSBjbGVhbmVkIHVwIHRoZSBuYW1lIHByZWZpeCBzdHVmZiBpbiB0aGUgaGFzaCBhbmQgbGxpc3QgbW9kdWxlcy4KCi0gRlRQIHJlc3BvbnNlcyBzaG91bGQgbm93IGJlIGJldHRlciBvbiB0aW1pbmcgb3V0IHByb3Blcmx5LiBUaGUgdGltZW91dCB2YWx1ZQogIGlzIG1heGltdW0gdGltZW91dCBmb3IgdGhlIGVudGlyZSByZXF1ZXN0IG9wZXJhdGlvbiwgYnV0IGJlZm9yZSB0aGlzLCB0aGUKICB0aW1lb3V0IHdhcyB1c2VkIGFzIGEgbWF4aW11bSBhbGxvd2VkIHRpbWUgYmV0d2VlbiB0d28gcmVhZHMuLi4KCkRhbmllbCAoMjYgQXByaWwgMjAwMikKLSBGaXhlZCB0aGUgdGVzdCBzdWl0ZSBodHRwIHNlcnZlciB0byBub3QgdXNlIHNucHJpbnRmKCkgYW55bW9yZSBkdWUgdG8gYmV0dGVyCiAgcG9ydGFiaWxpdHkuCgpEYW5pZWwgKDI1IEFwcmlsIDIwMDIpCi0gV2l0aCBTdGVybGluZyBIdWdoZXMnIG5ldyBETlMgcHJ1bmluZywgSmFja3kgTGFtIGFza2VkIGlmIHRoaXMgd291bGRuJ3QKICBjYXVzZSBwcm9ibGVtcyBzaW5jZSB0aGUgcHJ1bmluZyBpcyBvbmx5IGNoZWNraW5nIHRoZSBlbnRyeSB0aW1lLCBhbmQgaXQKICBzdXJlIGNvdWxkIGNhdXNlIHByb2JsZW1zLiBUaGVyZWZvciwgSSd2ZSBub3cgYWRkZWQgYW5kIGNoYW5nZWQgY29kZSBzbyB0aGF0CiAgdGhpcyBzaG91bGQgbm90IGJlIGEgcHJvYmxlbS4gTm93aGVyZSBpbiB0aGUgY29kZSB3aWxsIGJlIHN0b3JlIG5hbWUKICByZXNvbHZlZCBpbmZvcm1hdGlvbiBhcm91bmQgc28gdGhhdCBhIHN1bnNlcXVlbnQgRE5TIGNhY2hlIHBydW5lIHNob3VsZAogIGNhdXNlIGEgcHJvYmxlbS4gVGhpcyBvZiBjb3Vyc2UgY2FsbGVkIGZvciBzb21lIG1pbGQgaW50ZXJuYWwgY2hhbmdlcy4KCkRhbmllbCAoMjMgQXByaWwgMjAwMikKLSBJbXByb3ZlZCB0aGUgJ25vX3Byb3h5JyBjaGVjaywgYXMgdXNpbmcgcG9ydCBudW1iZXJzIGluIHRoZSBVUkwgY29uZnVzZWQgaXQKICBwcmV2aW91c2x5LiBSZXBvcnRlZCBieSBFcndhbiBMZWdyYW5kIGluIGJ1ZyByZXBvcnQgIzU0NzQ4NC4KCi0gVGhlIC0taW50ZXJmYWNlIG9wdGlvbiBub3cgd29ya3MgZXZlbiBvbiBJUHY2IGVuYWJsZWQgYnVpbGRzLiBSZXBvcnRlZCBieQogICd0aG9yJy4KCkRhbmllbCAoMjIgQXByaWwgMjAwMikKLSBUaGUgI2RlZmluZXMgbmFtZXMgc3RhcnRpbmcgd2l0aCBUSU1FQ09ORCBub3cgaGFzIENVUkxfIHByZWZpeGVzLiAoVGhlIG9sZAogIG5hbWVzIGFyZSBzdGlsbCAjZGVmaW5lZCB0b28uKSBQb2ludGVkIG91dCBieSBSb2JlcnQgT2xzb24uCgotIEphY2t5IExhbSBicm91Z2h0IGNvZGUgdGhhdCBsZXRzIHRoZSBuYW1lIHJlc29sdmUgZnVuY3Rpb24gb25seSB1c2UgYXMgbXVjaAogIG1lbW9yeSBhcyBpdCBhY3R1YWxseSBuZWVkcy4gVGhpcyBvbmx5IHdvcmtzIG9uIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMsCiAgYnV0IGlzIHRvdGFsbHkgdHJhbnNwYXJhbnQgdG8gYWxsIHVzZXJzLgoKRGFuaWVsICgxOSBBcHJpbCAyMDAyKQotIEJqb3JuIFJlZXNlIGZpeGVkIHBhY2tfaG9zdGVudCB0byB3b3JrIHByb3Blcmx5IHdpdGggNjQgYml0IHBvaW50ZXJzLgoKRGFuaWVsICgxOCBBcHJpbCAyMDAyKQotIFN0ZXJsaW5nIEh1Z2hlcyBhZGRlZCBjb2RlIHRvIHBydW5lIG9sZCBETlMgY2FjaGUgZW50cmllcywgc2luY2UgSmFja3kgTGFtCiAgZXhwZXJpZW5jZWQgdmVyeSBiaWcgY2FjaGVzLgoKRGFuaWVsICgxNyBBcHJpbCAyMDAyKQotIERpcmsgTWFuc2tlIHBhdGNoZWQgdGhlIDMwMSByZXNwb25zZSB0byB3b3JrIGFnYWluc3QgdGhlIFJGQyBidXQgbW9yZSBsaWtlCiAgY29tbW9uIGJyb3dzZXJzIGRvLiBJZiBhIFBPU1QgZ2V0IGEgMzAxIGJhY2ssIGl0J2xsIHN3aXRjaCB0byBHRVQgaW4gdGhlCiAgbmV4dCByZXF1ZXN0IChpZiBsb2NhdGlvbi1mb2xsb3dpbmcgaXMgZW5hYmxlZCkuCgpEYW5pZWwgKDE2IEFwcmlsIDIwMDIpCi0gRGlyayBNYW5za2UgcG9zdGVkIGEgcGF0Y2ggb3JpZ2luYWxseSB3cml0dGVuIGJ5IEluZ28gV2lsa2VuIHRoYXQgaW50cm9kdWNlZAogIHR3byBuZXcgQ1VSTElORk9fKiB2YWx1ZXM6IENVUkxJTkZPX1JFRElSRUNUX1RJTUUgYW5kCiAgQ1VSTElORk9fUkVESVJFQ1RfQ09VTlQuCgpEYW5pZWwgKDE1IEFwcmlsIDIwMDIpCi0gSm9uYXRhbiBMYW5kZXIgcGF0Y2hlZCB0aGUgdmVyYm9zZSB0ZXh0ICdEaXNhYmxlcyBQT1NULCBnb2VzIHdpdGggR0VUJyB0bwogIHJlZmxlY3QgcmVhbGl0eSBiZXR0ZXIsIGxpa2Ugd2hlbiB0aGUgZmlyc3QgcmVxdWVzdCBpc24ndCBQT1NUIGFuZCB3aGVuCiAgdGhlIHNlY29uZCBpc24ndCBHRVQuLi4gOi0pCgotIENyYWlnIERhdmlzb24gcG9pbnRlZCBvdXQgdGhhdCB3aGVuIGN1cmxfZm9ybWFkZCgpaW5nIGEgZmlsZSB0aGF0IGRvZXNuJ3QKICBleGlzdCwgbGliY3VybCBkb2Vzbid0IHJldHVybiBlcnJvci4gTm93LCBjdXJsX2Vhc3lfcGVyZm9ybSgpIHdpbGwgcmV0dXJuCiAgQ1VSTEVfUkVBRF9FUlJPUiBpZiB0aGF0IGlzIHRoZSBjYXNlLiBUZXN0IDQxIHdhcyBhZGRlZCB0byB2ZXJpZnkgdGhpcy4KClZlcnNpb24gNy45LjYKCkRhbmllbCAoMTQgQXByaWwgMjAwMikKLSBEaXJrIE1hbnNrZSBicm91Z2h0IGEgZml4IHRoYXQgbWFrZXMgbGliY3VybCBzdHJpcCBvZmYgd2hpdGUgc3BhY2VzIGZyb20gdGhlCiAgYmVnaW5uaW5nIG9mIGNvb2tpZSBjb250ZW50cy4KCi0gSGFkIHRvIHBhdGNoIGluY2x1ZGUvY3VybC9jdXJsLmggc2luY2UgTVNWQyBkb2Vzbid0IHNldCB0aGUgX19TVERDX18gZGVmaW5lLgogIE1vb25lc2FteSBwb2ludGVkIG91dCB0aGUgcHJvYmxlbSwgQmpvcm4gUmVlc2UgdGhlIHNvbHV0aW9uLgoKVmVyc2lvbiA3LjkuNi1wcmU1CgpEYW5pZWwgKDEyIEFwcmlsIDIwMDIpCi0gRml4ZWQgdGhlIFRJTUVSX0NPTk5FQ1QgdG8gYmUgbW9yZSBhY2N1cmF0ZSBmb3IgRlRQIHRyYW5zZmVycy4gUHJldmlvdXNseQogIEZUUCB0cmFuc2ZlcnMgZ290IHRoZSAiY29ubmVjdCBkb25lIiB0aW1lIHNldCBhZnRlciB0aGUgaW5pdGlhbCBGVFAgY29tbWFuZHMKICBhbmQgbm90IGRpcmVjdGx5IGFmdGVyIHRoZSBUQ1AvSVAgY29ubmVjdCBhcyBpdCBzaG91bGQuCgogIEkgYWxzbyBtYWRlIHRoZSB0aW1lIHN0YW1wIGdldCBzZXQgZXZlbiBpZiB0aGUgY29ubmVjdCBpdHNlbGYgZmFpbHMsIHdoaWNoCiAgaXQgZGlkbid0IGRvIHByZXZpb3VzbHkuCgotIEplYW4tUGhpbGlwcGUgQmFycmV0dGUtTGFQaWVycmUgcHJvdmlkZWQgaGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcwogIENVUkxPUFRfREVCVUdGVU5DVElPTiBhbmQgQ1VSTE9QVF9ERUJVR0RBVEEuIFRoZXkgYWxsb3cgYSBwcm9ncmFtIHRvIGEgc2V0IGEKICBjYWxsYmFjayB0byByZWNlaXZlIGRlYnVnL2luZm9ybWF0aW9uIGRhdGEuIFRoYXQgaW5jbHVkZXMgaGVhZGVycyBhbmQgZGF0YQogIHRoYXQgaXMgcmVjZWl2ZWQgYW5kIHNlbnQuIENVUkxPUFRfVkVSQk9TRSBzdGlsbCBjb250cm9scyBpdC4KCiAgQnkgZGVmYXVsdCwgdGhlcmUgaXMgYW4gaW50ZXJuYWwgZGVidWdmdW5jdGlvbiB0aGF0IHdpbGwgbWFrZSB0aGluZ3MgbG9vawogIGFuZCB3b3JrIGFzIGJlZm9yZSBpZiBub3QgY2hhbmdlZC4KCkRhbmllbCAoMTAgQXByaWwgMjAwMikKLSBTZWJhc3RpZW4gV2lsbGVtaWpucyBmb3VuZCBvdXQgdGhhdCAteCBkaWRuJ3QgdXNlIHRoZSBkZWZhdWx0IHBvcnQgbnVtYmVyIGFzCiAgaXMgZG9jdW1lbnRlZC4gSXQgZG9lcyBub3cuCgotIGxpYmN1cmwtZXJyb3JzLjMgaXMgYSBuZXcgbWFuIHBhZ2UgYXR0ZW1wdGluZyB0byBkb2N1bWVudCBhbGwgbGliY3VybCBlcnJvcgogIGNvZGVzCgotIEFkZGVkIHR3byBuZXcgZXJyb3IgY29kZXMgYW5kIGNoYW5nZWQgdGhlIGJlaGF2aW91ciBvZiB0d28gb2xkIG9uZXMKICBzbGlnaHRseToKCiAgQ1VSTEVfV1JJVEVfRVJST1IKICAgVGhpcyBlcnJvciB3YXMgcmV0dXJuZWQgKmJvdGgqIGZvciBlcnJvcnMgdGhhdCBvY2N1cmVkIHdoZW4gd3JpdGluZwogICByZWNlaXZlZCBkYXRhIHRvIGEgbG9jYWwgZmlsZSwgYXMgd2VsbCBhcyB3aGVuIHdlIGdldCBwcm9ibGVtcyB3cml0aW5nIGRhdGEKICAgdG8gYSByZW1vdGUgc2VydmVyLiBDVVJMRV9TRU5EX0VSUk9SIGhhcyBub3cgYmVlbiBhZGRlZCBmb3IgdGhlIGxhdHRlcgogICBlcnJvci4KCiAgQ1VSTEVfUkVBRF9FUlJPUgogICBUaGlzIGVycm9yIHdhcyBzaW1pbGFybHkgcmV0dXJuZWQgKmJvdGgqIGZvciBlcnJvcnMgd2hlbiByZWFkaW5nIGEgbG9jYWwKICAgZmlsZSwgYXMgd2VsbCBhcyB3aGVuIGdldHRpbmcgcHJvYmxlbXMgd2hlbiByZWFkaW5nIG5ldHdvcmsgZGF0YS4KICAgQ1VSTEVfUkVDVl9FUlJPUiBoYXMgbm93IGJlZW4gYWRkZWQgZm9yIHRoZSBsYXR0ZXIgZXJyb3IuCgogKFR3byB0ZXN0IGNhc2VzIHdlcmUgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuKQoKRGFuaWVsICg5IEFwcmlsIDIwMDIpCi0gcnVudGVzdHMucGwgbm93IHNldHMgdGhlIEhPTUUgdmFyaWFibGUgYmVmb3JlIHJ1bm5pbmcgY3VybCwgdG8gcHJldmVudCBhbnkKICBhY3R1YWwgfi8uY3VybHJjIGZpbGUgdG8gZm9vbCB0aGUgdGVzdHMhCgpWZXJzaW9uIDcuOS42LXByZTQKCkRhbmllbCAoOCBBcHJpbCAyMDAyKQotIE1pY2hhZWwgQ3VydGlzIHByb3ZpZGVkIG5ldyBmdW5jdGlvbmFsaXR5IGZvciBjdXJsIG9uIHNvbWUgcGxhdGZvcm1zLiBVc2luZwogIHRoZSAtLWVudmlyb25tZW50IG9wdGlvbiwgY3VybCB3aWxsICpzZXQqIGEgYnVuY2ggb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgdG8gdmFsdWVzLiBUaGUgbmFtZXMgYXJlIHRoZSBzYW1lIG9uZXMgYXMgZm9yIHRoZSAtdy8tLXdyaXRlb3V0IG9wdGlvbi4KCiAgRm9yIG5vdywgdGhpcyBvbmx5IHdvcmtzIG9uIHRoZSBSSVNDIE9TIHZlcnNpb24sIGFzIHRoaXMgZmVhdHVyZSByZWxpZXMgb24KICBib3RoIE9TIHN1cHBvcnQgYW5kIHRoYXQgaXQgbWF0Y2hlcyBPUyBwYXJhZGlnbXMuCgotIEphY2t5IExhbSBwcm92aWRlZCBhIGZpeCBmb3IgZ2V0dGluZyBoZWFkZXJzLW9ubHkgd2hlbiB0aGUgcmVwbHkgaXMgSFRUUC8xLjAKICBhbmQgMzA0LCBJIGVkaXRlZCBpdCBzbGlnaHRseS4KCkRhbmllbCAoNSBBcHJpbCAyMDAyKQotIEFzIHJlcXVlc3RlZCBieSBKYXkgR3JhdmVzLCB0aGUgJy5jdXJscmMnIGZpbGUgKG9yIF9jdXJscmMgYXMgaXQgaXMgY2FsbGVkCiAgd2hlbiB1c2VkIGluIHdpbmRvd3MpLCBpcyBub3cgbG9hZGVkIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlmIHRoZSBIT01FCiAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXNuJ3Qgc2V0IChvciBpZiBpdCBpcyB0b28gbG9uZykuIEkgYWxzbyBlbmxhcmdlZCB0aGUKICBhcnJheSB1c2VkIHRvIHN0b3JlIHRoZSBmdWxsIGZpbGUgcGF0aCBpbiwgdG8gNTEyIGJ5dGVzLgoKLSBLZXZpbiBSb3RoIHBvaW50ZWQgb3V0IHRvIG1lIHdoeSB0aGUgIjE5IE1hcmNoIiBjaGFuZ2UgcmVnYXJkaW5nIC1HIGFuZCAtSQogIHdhcyBzdHVwaWQgYW5kIHRoZSBjaGFuZ2Ugd2FzIHJldmVydGVkLiBBZGRlZCB0ZXN0IGNhc2UgNDggdG8gdmVyaWZ5IHRoZQogIGZ1bmN0aW9uYWxpdHkuCgpWZXJzaW9uIDcuOS42LXByZTMKCkRhbmllbCAoNCBBcHJpbCAyMDAyKQotIEpvbmF0YW4gTGFuZGVyIGJyb3VnaHQgYSBwYXRjaCB0aGF0IG1ha2VzIGN1cmwvY3VybC5oIGNvbXBpbGUgbmljZWx5IG9uCiAgcHJlLUlTTyBjb21waWxlcnMsIGxpa2Ugd2hlbiB1c2luZyBnY2MgLXRyYWRpdGlvbmFsLgoKRGFuaWVsICgzIEFwcmlsIDIwMDIpCi0gSmFja3kgTGFtIGlkZW50aWZpZWQgYSBnbGl0Y2ggd2hlbiBnZXR0aW5nIGhlYWRlcnMtb25seSwgd2hlcmUgbGliY3VybCB3b3VsZAogICJoYW5nIiAxIHNlY29uZCBpbiB2YWluIGluIHRoZSBzZWxlY3QoKSBsb29wIGJlZm9yZSByZXR1cm5pbmcgYmFjay4KCi0gVG9yIEFybnRzZW4gYnJvdWdodCBhIHBhdGNoIGZvciBtdWx0aXBhcnQgZm9ybXBvc3RzLiBJdCB0dXJuZWQgb3V0IHRoYXQgdGhlCiAgIkNHSV9MaXRlIFBlcmwgcGFja2FnZSIgbWFrZXMgc29tZSBiYWQgYXNzdW1wdGlvbnMgb24gd2hhdCBsZXR0ZXJzIHRoYXQgbWF5CiAgYmUgdXNlZCBpbiBib3VuZGFyeSBzdHJpbmdzIGFuZCB0aHVzIGN1cmwgY291bGQgY29uZnVzZSBpdCBieSBpbmNsdWRpbmcgJysnCiAgYW5kICcvJy4gV2hpbGUgdGhpcyBpcyBzdGFuZGFyZHMtY29tcGxpYW50LCB3ZSBjaGFuZ2UgdGhlIGJlaGF2aW9yIHRvIHdvcmsKICBzbW9vdGhseSB3aXRoIGV4aXN0aW5nIHNvZnR3YXJlIGJhc2VkIG9uIHRoYXQgcGFja2FnZS4KCkRhbmllbCAoMiBBcHJpbCAyMDAyKQotIEdlcmhhcmQgSGVycmUgZmlsZWQgYnVnIHJlcG9ydCAjNTM2MjM4IHdoZXJlIGhlIHBvaW50ZWQgb3V0IGEgY3Jhc2ggaW4KICB2ZXJib3NlIEZUUCBwYXNzaXZlIHRyYW5zZmVycyBmb3IgQUlYLgoKLSBDbGFyZW5jZSBHYXJkbmVyIHBvaW50ZWQgb3V0IGEgbWlub3IgZmxhdyBpbiBob3cgbGliY3VybCBkaWRuJ3QgcHJvcGVybHkKICB0YWtlIGNhcmUgb2YgYWxsIGVycm9ycyB0aGF0IFNTTF9yZWFkKCkgY291bGQgcmV0dXJuLgoKLSBKYWNreSBMYW0gZml4ZWQgYSBNQUxMT0NERUJVRyBwcm9ibGVtIGluIGxpYi9nZXRpbmZvLmMKCkRhbmllbCAoMjcgTWFyY2ggMjAwMikKLSBULiBCaGFyYXRoIHBvaW50ZWQgb3V0IGEgZmxhdyBpbiB0aGUgY29ubmVjdGlvbiByZS11c2UgZnVuY3Rpb24gdGhhdCBkaWRuJ3QKICBjaGVjayBwcm94eSBjb25uZWN0aW9ucyBwcm9wZXJseSBmb3IgImRlYWRuZXNzIiBiZWZvcmUgdGhleSB3ZXJlIHJlLXVzZWQuCgotIFBlZHJvIE5ldmVzIGZvdW5kIG91dCB0aGF0IEhUVFAgUE9TVGluZyB3aXRoIC0tZGF0YS1iaW5hcnkgZGlkIG5vdCBwcm9wZXJseQogIHdvcmsgdW5kZXIgV2luZG93cyBhcyB0aGUgZmlsZSBzcGVjaWZpZWQgd2Fzbid0IHJlYWQgZnVsbHkgYmluYXJ5IQoKRGFuaWVsICgyNSBNYXJjaCAyMDAyKQotIEphY2t5IExhbSBicm91Z2h0IGEgZml4IHRoYXQgaW1wcm92ZXMgdHJlYXRtZW50IG9mIGNvb2tpZXMgdXNpbmcgaWRlbnRpY2FsCiAgZG9tYWlucyBidXQgd2l0aCBsZWFkaW5nIGRvdHMgcHJvcGVybHkuCgpEYW5pZWwgKDIyIE1hcmNoIDIwMDIpCi0gTWlrbG9zIE5lbWV0aCB1cGRhdGVkIHRoZSB3aW5kb3dzIHNlY3Rpb24gb2YgdGhlIGRvY3MvSU5TVEFMTCBmaWxlIGFuZCB0aGUKICB3aW5kb3dzIG1ha2VmaWxlcy4KCi0gSm9uIERpbGxvbiBwcm92aWRlZCB1cyB3aXRoIHNldmVyYWwgZ29vZC1sb29raW5nIGN1cmwgaW1hZ2VzIGZvcgogIHByb21vdGlvbi4gVmlldyB0aGVtIGhlcmUgaHR0cDovL2N1cmwuaGF4eC5zZS9pY29ucy5odG1sCgpEYW5pZWwgKDIwIE1hcmNoIDIwMDIpCi0gUGV0ZXIgVmVyaGFzIGZvdW5kIG91dCB0aGF0IENSTEYgcmVwbGFjZW1lbnQgaW4gdXBsb2FkcyB3YXMgbm90IHdvcmtpbmcuIEkKICBmaXhlZCBpdCwgYW5kIGFkZGVkIHRlc3QgY2FzZSAxMjggdGhhdCB2ZXJpZmllcyB0aGUgZnVuY3Rpb25hbGl0eS4KCi0gVGhlIGxpc3QgZm9ybWVybHkga25vd24gYXMgY3VybC1tYWluIGlzIG5vdyBuYW1lZCBjdXJsLXVzZXJzIGFuZCBpcyBob3N0ZWQKICBieSBzb3VyY2Vmb3JnZS4gU3VzYmNyaWJlIHRvIHRoZSBuZXcgbGlzdCwgZ2V0IG9mZiB0aGUgb2xkIG9uZS4KClZlcnNpb24gNy45LjYtcHJlMgoKRGFuaWVsICgxOSBNYXJjaCAyMDAyKQotIE1hZGUgLUcgYW5kIC1JIG9uIHRoZSBzYW1lIGNvbW1hbmQgbGluZSBjYXVzZSBhbiBlcnJvci4KCi0gTW92ZWQgdGhlIG11bHRpLmggZmlsZSB0byB0aGUgInB1YmxpYyIgaW5jbHVkZSBkaXJlY3RvcnkgYW5kIG1hZGUgaXQgZ2V0CiAgaW5jbHVkZWQgYnkgY3VybC5oIHNvIHRoYXQgbm8gZXh0cmEgaW5jbHVkZSBmaWxlcyB3aWxsIGJlIG5lY2Vzc2FyeSB0byB1c2UKICBpdC4KCiAgQWRkZWQgZG9jcyBhbmQgbWFuIHBhZ2VzIGZvciB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIHRoZSByZWxlYXNlIGFyY2hpdmUuCiAgQWRkZWQgdGhlIHRocmVlIGV4YW1wbGUgc291cmNlIGNvZGVzIHRvby4KCiAgTmVjZXNzYXJ5IHN0ZXBzIGluIG15IGNhbXBhaWduIHRvIHNuZWFrIGluIHRoZSBtdWx0aSBpbnRlcmZhY2UuLi4gOy0pCgotIFVwZGF0ZWQgdGhlIHllYXIgaW4gYWxsIGNvcHlyaWdodCBub3RpY2VzIGluIGFsbCBDIGFuZCBIIGZpbGVzLgoKRGFuaWVsICgxOCBNYXJjaCAyMDAyKQotIFRvbWFzIFN6ZXBlIGZvdW5kIG91dCB0aGF0IC1kIGFuZCAtRyBkaWRuJ3QgbWl4IGFzIHRoZXkgc2hvdWxkLiBJIGJyb2tlIHRoaXMKICBpbiA3LjkuNS4uLiBBZGRlZCB0ZXN0IGNhc2UgMzIgZm9yIHRoaXMuCgpWZXJzaW9uIDcuOS42LXByZTEKCkRhbmllbCAoMTYgTWFyY2ggMjAwMikKLSBQZXRlciBWZXJoYXMgcG9pbnRlZCBvdXQgdGhhdCB0aGUgY3VybF9lc2NhcGUgYW5kIGN1cmxfdW5zY2FwZSBtYW4gcGFnZXMKICBjb250YWluZWQgZmFjdHVhbCBlcnJvcnMuCgotIEFsYmVydCBDaG95IGZvdW5kIGFuZCBjb3JyZWN0ZWQgYSBwcm9ibGVtIHdpdGggdGhlIHZlcmJvc2Ugb3V0cHV0IHdoZW4gZG9pbmcKICBQQVNWIGZ0cCB0cmFuc2ZlcnMuIEl0IGNvdWxkIG1ha2UgbGliY3VybCBjcmFzaC4KCiAgRGV0YWlscyBpbiBidWcgcmVwb3J0ICM1MzA1NjI6CiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhdGlkPTEwMDk3NiZhaWQ9NTMwNTYyJmdyb3VwX2lkPTk3NgoKRGFuaWVsICgxNSBNYXJjaCAyMDAyKQotIEp1bi1pY2hpcm8gaXRvanVuIEhhZ2lubyBmaWxlZCBidWcgcmVwb3J0ICM1MzAyMDQgdGhhdCBjbGVhcmx5IHBvaW50ZWQgb3V0CiAgdGhlIFBGX0lORVQgZml4IGZyb20gRmVicnVhcnkgMTkgYXMgYSBub3QtdmVyeS1nb29kIGZpeCBhcyBpdCBicm9rZSBJUHY2CiAgY2FwYWJpbGl0eSEgVGhhdCBwYXRjaCBpcyBub3cgcmV2ZXJ0ZWQuCgogIFRoZSBwcm9ibGVtIHdpdGggc2xvdyBuYW1lIGxvb2t1cHMgd2l0aCBnZXRhZGRyaW5mbygpIG9uIG5vbi1JUHY2IGVuYWJsZWQKICBob3N0cyBhcmUgaW5zdGVhZCBtYWRlIGJ5IGZpcnN0IGNoZWNraW5nIGlmIHRoZSBzdGFjayBpcyBJUHY2LWVuYWJsZWQgYW5kIGlmCiAgbm90LCB0aGUgUEZfSU5FVCBpcyB1c2VkIGFuZCBvdGhlcndpc2Ugd2UgZ28gd2l0aCB0aGUgZnVsbCBQRl9VTlNQRUMuCgotIFQuIEJoYXJhdGggcG9pbnRlZCBvdXQgdGhhdCB3aGVuIHdlIHJldHVybiBhbiAiZXJyb3IiIGZyb20gYSBXUklURUZVTkNUSU9OCiAgYXMgZGVzY3JpYmVkIGluIHRoZSBtYW4gcGFnZSwgbGliY3VybCBkaWQgbm90IHJldHVybiB0aGUgZG9jdW1lbnRlZCBlcnJvcgogIGNvZGUgKENVUkxFX1dSSVRFX0VSUk9SKSBidXQgd291bGQgaW5zdGVhZCByZXR1cm4gQ1VSTEVfUkVBRF9FUlJPUi4gVGhpcyBpcwogIG5vdyBjb3JyZWN0ZWQuCgpEYW5pZWwgKDE0IE1hcmNoIDIwMDIpCi0gU2V0dGluZyBDVVJMT1BUX1BPU1Qgd2l0aG91dCBzZXR0aW5nIENVUkxPUFRfUE9TVEZJRUxEUyBub3cgcmVhZCB0aGUgUE9TVC0KICBkYXRhIGZyb20gdGhlIGNhbGxiYWNrLgoKLSBUaGUgR09QSEVSIHN1cHBvcnQgc2VlbXMgdG8gYmUgYnJva2VuLiBJIGRvbid0IHRoaW5rIEknbGwgZXZlbiBzdGFydCBmaXhpbmcKICBpdCB1bnRpbCBzb21lb25lIGVsc2UgZmluZHMgb3V0Li4uIDotKQoKRGFuaWVsICgxMyBNYXJjaCAyMDAyKQotIFRyeWluZyAnY3VybCAtSSBmdHAuc3VuZXQuc2UnIG9yIHNpbWlsYXIgZGlkIGEgU0laRSBvbiBhIHNpbGx5ICIobmlsKSIKICBzdHJpbmcuIElmIHN1Y2ggYSBmaWxlIHdvdWxkIGJlIHByZXNlbnQsIGN1cmwgcmV0dXJuZWQgdGhlIHNpemUgb2YgaXQhIE5vdwogIHdlIHByZXZlbnQgdGhpcy4KCi0gQ3VybF9zZW5kZigpIHdhcyBmaXhlZCB0byBkZWFsIHdpdGggc2l0dWF0aW9uIHdoZXJlIEN1cmxfd3JpdGUoKSB3b3VsZCd2ZQogIGJsb2NrZWQgYW5kIHRodXMgcmV0dXJuIC0xLgoKLSBTZXR0aW5nIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiB0byBOVUxMIG5vdyByZXN0b3JlcyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24uCgotIEFsbCBDVVJMRk9STV8qIG9wdGlvbnMgY2FuIG5vdyBiZSB1c2VkIGluIGEgQ1VSTEZPUk1fQVJSQVkgZXhjZXB0IHRoZQogIENVUkxGT1JNX0FSUkFZIGl0c2VsZi4gVGhpcyB3YXMgbmVjZXNzYXJ5IHNpbmNlIHdlIGNvdWxkbid0IGV4cGFuZCB0aGUKICBDVVJMRk9STV8qIGxpc3QgcHJvcHJlbHkgYW5kIHVucmVzdHJpY3RlZCB1bnRpbCB0aGlzIHdhcyB0aGUgY2FzZS4gSXQgd2FzCiAgYWxzbyBhIGJpdCBwZWN1bGlhciB0byB1c2VycyB3aHkgc29tZSBvcHRpb25zIGNvdWxkIGJlIHVzZWQgaW4gYW4gYXJyYXkKICB3aGlsZSBvdGhlcnMgY291bGRuJ3QuCgotIFJlbW92ZWQgc29tZSBzaWxseSBDUkxGIGxpbmVzIHRoYXQgaGFkIGFjY2lkZW50YWxseSBzbGlwcGVkIGludG8gc3JjL21haW4uYwogIE5pY28gQmFnZ3VzIHBvaW50ZWQgdGhlbSBvdXQgdG8gbWUuCgpEYW5pZWwgKDExIE1hcmNoIDIwMDIpCi0gQ1VSTEZPUk1fRklMRU5BTUUgd2FzIGFkZGVkLiBUaGlzIGNhbiBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIGZpbGUgdXBsb2FkCiAgcGFydCwgdG8gc2V0IHRoZSAnZmlsZW5hbWUnIGZpZWxkIHRvIGEgY3VzdG9tIHZhbHVlLiBJZiB0aGlzIGlzbid0IHVzZWQsCiAgdGhlIGFjdHVhbGx5IHVzZWQgZmlsZW5hbWUgd2lsbCBiZSBpbmNsdWRlZCBpbnN0ZWFkIChhcyBsaWJjdXJsIGFsd2F5cyBoYXMKICBkb25lKS4gY3VybCB3YXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHksIGFuZCBub3cgLUYgYWNjZXB0cyBhICdmaWxlbmFtZT0nIGZpZWxkCiAgdG9vLCBhbmQgYWxsb3dzIGNvbnN0cnVjdHMgc3VjaCBhczoKCiAgICAtRiAnbmFtZT1AZmlsZW5hbWU7ZmlsZW5hbWU9L2Rldi9udWxsJwoKICBhbmQgdGhpcyBjYW4gYmUgY29tYmluZWQgd2l0aCB0eXBlPSB0b28sIGluIGEgbWFubmVyIHNpbWlsYXIgdG86CgogICAtRiAiZmlsZT1AbG9nL3Rlc3QzOS50eHQ7ZmlsZW5hbWU9ZmFrZXJmaWxlO3R5cGU9bW9vL2Zvb2JhciIKCiAgVGVzdCBjYXNlIDM5IHdhcyBhZGRlZCB0byB2ZXJpZnkgdGhpcyBmdW5jdGlvbmFsaXR5LgoKLSBUaGUgc3RydWN0IGZvcm1lcmx5IGtub3duIGFzIEh0dHBQb3N0IGlzIG5vdyBuYW1lZCBjdXJsX2h0dHBwb3N0IHRvIHByb3Blcmx5CiAgdXNlIHRoZSBjdXJsIG5hbWUgc3BhY2UuIEkgYWRkZWQgYSAjZGVmaW5lIGZvciB0aGUgb2xkIG5hbWUgdG8gbWFrZSBleGlzdGluZwogIHByb2dyYW1zIGNvbXBpbGUgZXZlbiB3aGVuIHRoaXMgbmV3IGluY2x1ZGUgZmlsZSBpcyB1c2VkLgoKRGFuaWVsICg4IE1hcmNoIDIwMDIpCi0gQ2xpZmZvcmQgYWxzbyBkaXNjb3ZlcmVkIHRoYXQgaWYgdGhlIGNsaWVudCBjb2RlIGZhaWxlZCBlYXJseSwgYXMgd2hlbiBkb2luZwogICJjdXJsIC1PIiBvbmx5LCBpdCB3b3VsZCBkbyBmY2xvc2UoTlVMTCkgd2hpY2ggY2F1c2VkIGEgc2VnbWVudGF0aW9uIGZhdWx0CiAgb24gc29tZSBzeXN0ZW1zLgoKLSBDbGlmZm9yZCBXb2xmIHByb3ZpZGVkIGEgcGF0Y2ggdGhhdCBtYWRlIC0tcHJvZ3Jlc3MtYmFyIHdvcmsgYWdhaW4uCgotIEkgY2xvc2VkIGJ1ZyByZXBvcnQgIzUyNzAzMiBieSBtYWtpbmcgc3VyZSB0aGF0IHdlIGFkZCBhIG5ld2xpbmUgYWZ0ZXIgYQogIHRyYW5zZmVyIHdoZW4gLS1wcm9ncmVzcy1iYXIgaGFzIGJlZW4gdXNlZC4gQmVmb3JlLCB3aXRob3V0IHRoZSBuZXdsaW5lLCBpdAogIG1hZGUgdGhlIHN1YnNlcXVlbnQgdGV4dCBjb21lIG91dCB3cm9uZy4KClZlcnNpb24gNy45LjUKCkRhbmllbCAoNyBNYXJjaCAyMDAyKQotIEFkZGVkIGRvY3MvS05PV05fQlVHUyB0byB0aGUgcmVsZWFzZSBhcmNoaXZlLgoKRGFuaWVsICg2IE1hcmNoIDIwMDIpCi0gS2V2aW4gUm90aCBjb3JyZWN0ZWQgYSBmbGF3IGluIHRoZSBjdXJsIGNsaWVudCBnbG9iYmluZyBjb2RlIHRoYXQgbWFkZSBpdAogIG1lc3MgdXAgYmFja3NsYXNoZXMuIFRoaXMgd2FzIG1vc3Qgbm90YWJsZSBvbiB3aW5kb3dzIChjeWd3aW4pIG1hY2hpbmVzIHdoZW4KICB1c2luZyBmaWxlOi8vLgoKLSBCcmFkIHByb3ZpZGVkIGFub3RoZXIgZml4IGZvciBidWlsZGluZyBvdXRzaWRlIHRoZSBzb3VyY2UtdHJlZS4KCi0gUmFscGggTWl0Y2hlbGwgcGF0Y2hlZCBhd2F5IGEgZmV3IGNvbXBpbGVyIHdhcm5pbmdzIGluIHRlc3RzL3NlcnZlci9zd3MuYwoKRGFuaWVsICg1IE1hcmNoIDIwMDIpCi0gSSBub3RpY2VkIHRoYXQgdGhlIHR5cGVkZWYgaW4gY3VybC5oIGZvciB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2sgcHJvdG90eXBlIHdhcwogIHdyb25nIGFuZCB0aHVzIGFwcGxpY2F0aW9ucyB0aGF0IHVzZWQgaXQgd291bGQgbm90IGdldCB0aGUgcHJvcGVyIGlucHV0CiAgZGF0YS4gSXQgdXNlZCBzaXplX3Qgd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5IHVzZXMgZG91YmxlcyEKCiAgSSB3aXNoIEkgY291bGQgYmxhbWUgc29tZW9uZSBlbHNlLCBidXQgdGhpcyB3YXMgbXkgZmF1bHQuIEFnYWluLgoKVmVyc2lvbiA3LjkuNS1wcmU2CgpEYW5pZWwgKDQgTWFyY2ggMjAwMikKLSBDdXQgb2ZmIHRoZSBjaGFuZ2VzIGRvbmUgZHVyaW5nIDIwMDEgZnJvbSB0aGlzIGNoYW5nZWxvZyBmaWxlIGFuZCBwdXQgdGhlbQogIGluIGEgc2VwYXJhdGUgZmlsZSAoQ0hBTkdFUy4yMDAxKSwgYXZhaWxhYmxlIGZyb20gQ1ZTIG9mIGNvdXJzZS4KCi0gSSByZW1vdmVkIHRoZSBtdWx0aSBkaXJlY3RvcnkuIFRoZSBleGFtcGxlIHNvdXJjZXMgd2VyZSBtb3ZlZCB0byB0aGUKICBkb2NzL2V4YW1wbGVzIGRpcmVjdG9yeSB3aGVyZSB0aGV5IGJlbG9uZy4KCi0gV3JvdGUgNyBuZXcgbWFuIHBhZ2VzIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbnMgaW4gdGhlIG5ldyBtdWx0aSBpbnRlcmZhY2UuCiAgVGhleSdyZSBhbGwgc3RpbGwgcHJldHR5IGJhc2ljLCBidXQgd2UgY2FuIHVzZSB0aGVtIGFzIGEgc3RhcnQgYW5kIGFkZCBtb3JlCiAgY29udGVudHMgdG8gdGhlbSB3aGVuIHdlIGZpZ3VyZSBvdXQgd2hhdCB0byB3cml0ZS4gVGhlIGxhcmdlIGFtb3VudCBvZiBtYW4KICBwYWdlcyBmb3IgbGliY3VybCBub3cgcHJlc2VudCBtYWRlIG1lIGRlY2lkZSB0byBwdXQgdGhlbSBpbiBhIG5ldyBzZXBhcmF0ZQogIHN1YmRpcmVjdG9yeSBpbiB0aGUgZG9jcyBkaXJlY3RvcnkuIE5hbWVkIGxpYmN1cmwuCgotIEdpdXNlcHBlIENvcmJlbGxpIHByb3ZpZGVkIGEgdGVtcGxhdGUgZmlsZSBmb3IgdGhlIEVQTSBwYWNrYWdlIG1hbmFnZXIsIGl0CiAgZ2V0cyBnZW5lcmF0ZWQgbmljZWx5IGJ5IHRoZSBjb25maWd1cmUgc2NyaXB0IG5vdy4KClZlcnNpb24gNy45LjUtcHJlNQoKRGFuaWVsICgxIE1hcmNoIDIwMDIpCi0gTW92ZWQgdGhlIG1lbWFuYWx5emUucGwgc2NyaXB0IGludG8gdGhlIHRlc3RzLyBkaXIgYW5kIGFkZGVkIGl0IHRvIHRoZQogIHJlbGVhc2UgYXJjaGl2ZXMuIEl0IHdhcyBwcmV2aW91c2x5IG9ubHkgcHJlc2VudCBpbiB0aGUgQ1ZTIHRyZWUuCgotIE1vZGlmaWVkIHRoZSBGZWJydWFyeSAxN3RoIEhvc3Q6IGZpeCwgYXMgYnVnIHJlcG9ydCAjNTIzNzE4IHBvaW50ZWQgb3V0IHRoYXQKICBpdCBjYXVzZWQgY3Jhc2hlcyEKCi0gTmljbyBCYWdndXMgYWRkZWQgbW9yZSBlcnJvciBjb2RlcyB0byB0aGUgVk1TIHN0dWZmLgoKLSBXZXNsZXkgTGF4dG9uIGJyb3VnaHQgdGhlIGNvZGUgdGhhdCBpbnRyb2R1Y2VkIHRoZSBuZXcgQ1VSTE9QVF9QUkVRVU9URQogIG9wdGlvbi4gSXQgaXMganVzdCBhbm90aGVyIEZUUCBxdW90ZSBvcHRpb24gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeQogIGEgbGlzdCBvZiBGVFAgY29tbWFuZHMgdG8gaXNzdWUgKmp1c3QgYmVmb3JlKiB0aGUgdHJhbnNmZXIgY29tbWFuZCAoUkVUUiBvcgogIFNUT1IgZXRjKS4gSXQgaGFzIHR1cm5lZCB1cCBhIGZldyBzeXN0ZW1zIHRoYXQgcmVhbGx5IG5lZWQgdGhpcy4KCiAgVGhlIGN1cmwgY29tbWFuZCBsaW5lIHRvb2wgY2FuIGFsc28gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBieSBwcmVmaXhpbmcgdGhlCiAgcXVvdGUgY29tbWFuZHMgd2l0aCBhIHBsdXMgKCspIGluIHNpbWlsYXIgc3R5bGUgdGhhdCBwb3N0IHRyYW5zZmVyIHF1b3RlCiAgY29tbWFuZHMgYXJlIHNwZWNpZmllZC4KCiAgVGhpcyBpcyBub3QgeWV0IGRvY3VtZW50ZWQuIFRoZXJlIGlzIG5vIHRlc3QgY2FzZSBmb3IgdGhpcyB5ZXQuCgpEYW5pZWwgKDI4IEZlYnJ1YXJ5IDIwMDIpCi0gUmFscGggTWl0Y2hlbGwgbWFkZSBzb21lIHNlcmlvdXMgZWZmb3J0cyBhbmQgcHV0IGEgbG90IG9mIHN3ZWF0IGluIHNldHRpbmcKICB1cCBzY3JpcHRzIGFuZCB0aGluZ3MgZm9yIG1lIHRvIGJlIGFibGUgdG8gcmVwZWF0IGhpcyBwcm9ibGVtcywgYW5kIEkKICBmaW5hbGx5IGNvdWxkLiAgSSBmb3VuZCBhIHByb2JsZW0gd2l0aCB0aGUgaGVhZGVyIGJ5dGUgY291bnRlciB0aGF0IHdhc24ndAogIGluY3JlYXNlZCBwcm9wZXJseSBhbmQgdGh1cyB3ZSBjb3VsZCByZXR1cm4gQ1VSTEVfR09UX05PVEhJTkcgd2hlbiB3ZSBpbgogIGZhY3QgaGFkIHJlY2VpdmVkIGRhdGEuCgpEYW5pZWwgKDI3IEZlYnJ1YXJ5IDIwMDIpCi0gSSBoYWQgdG8gcmV2ZXJ0IHRoZSBub24tc3BhY2UgcGFyc2luZyBjb29raWUgZml4IEkgcG9zdGVkIHRvIHRoZSBtYWlsaW5nCiAgbGlzdC4gRXhwaXJlIGRhdGVzIGRvIGhhdmUgc3BhY2VzIGFuZCBzdGlsbCBuZWVkIHRvIGdldCBwYXJzZWQgcHJvcGVybHkhCiAgSW5zdGVhZCB3ZSBqdXN0IGlnbm9yZSB0cmFpbGluZyB3aGl0ZSBzcGFjZSBhbmQgaXQgc2VlbXMgdG8gd29yay4uLgoKRGFuaWVsICgyNiBGZWJydWFyeSAyMDAyKQotIE1hZGUgdGhlIGNvb2tpZSBwcm9wZXJ0eSAnTWF4LUFnZScgd29yaywganVzdCBzaW5jZSB3ZSBhbHJlYWR5IHRyaWVkIHRvCiAgc3VwcG9ydCBpdCwgaXQgaXMgYmV0dGVyIHRvIGRvIGl0IHJpZ2h0LiBObyBvbmUgdXNlcyB0aGlzIGFueXdheS4KCi0gVGhlIGNvb2tpZSBwYXJzZXIgY291bGQgY3Jhc2ggaWYgYSByZWFsbHkgd2VpcmQgKGlsbGVnYWwpIGNvb2tpZSBsaW5lIHdhcwogIHJlY2VpdmVkLiBJIGFsc28gbWFkZSBpdCBiZXR0ZXIgZGlzY2FyZCByZWFsbHkgb2RkbHkgZm9ybWF0dGVkIGxpbmVzIGJldHRlci4KCiAgTWFkZSB0aGUgY29va2llIGphciBzdG9yZSB0aGUgc2Vjb25kIGZpZWxkIGZyb20gdGhlIGxlZnQgdXNpbmcgdGhlIHN5bnRheAogIHRoYXQgTmV0c2NhcGUgYW5kIE1vemlsbGEgcHJvYmFibHkgbGlrZS4gQ3VybCBpdHNlbGYgaWdub3JlcyBpdC4KCiAgQWRkZWQgdGVzdCBjYXNlIDMxIGZvciB0aGVzZSBjYXNlcy4KCiAgQ2xheSBMb3ZlbGVzcycgZW1haWwgcmVnYXJkaW5nIHNvbWUgY29va2llIGlzc3VlcyBzdGFydGVkIG15IGNsZWFudXAuCgotIEtldmluIFJvdGggcG9pbnRlZCBvdXQgdGhhdCBteSBhdXRvbWFrZSBmaWRkbGVzIGJyb2tlIHRoZSBhYmlsaXR5IHRvIGJ1aWxkCiAgb3V0c2lkZSB0aGUgc291cmNlLXRyZWUgYW5kIEkgcG9zdGVkIGEgcGF0Y2ggdG8gdGhlIG1haWxpbmcgbGlzdCB0aGF0IGJyaW5ncwogIHRoaXMgYWJpbGl0eSBiYWNrLgoKVmVyc2lvbiA3LjkuNS1wcmU0CgpEYW5pZWwgKDI1IEZlYnJ1YXJ5IDIwMDIpCi0gRmlkZGxlZCB3aXRoIHRoZSBhdXRvbWFrZSBmaWxlcyB0byBtYWtlIGFsbCBzb3VyY2UgZmlsZXMgaW4gdGhlIGxpYgogIGRpcmVjdG9yeSBub3QgaGF2ZSAuLi9zcmMgaW4gdGhlIGluY2x1ZGUgcGF0aCwgYW5kIHRoZSBzcmMgc291cmNlcyBzaG91bGRuJ3QKICBoYXZlIC4uL2xpYiEKCi0gQWxsIDc5IHRlc3QgY2FzZXMgcmFuIE9LIHVuZGVyIExpbnV4IGFuZCBTb2xhcmlzIHVzaW5nIHRoZSBuZXcgSFRUUCBzZXJ2ZXIKICBpbiB0aGUgdGVzdCBzdWl0ZS4gVGhlIG5ldyBIVFRQIHNlcnZlciB3YXMgZmlyc3QgZG9uYXRlZCBieSBHZW9yZyBIb3JuIGFuZAogIHN1YnNlcXVlbnRseSBtb2RpZmllZCB0byB3b3JrIHdpdGggdGhlIHRlc3Qgc3VpdGUuIEl0IGlzIGN1cnJlbnRseSBzdGlsbCBub3QKICBwb3J0YWJsZSBlbm91Z2ggdG8gcnVuIG9uICJhbGwgb3ZlciIgYnV0IHRoaXMgaXMgYSBzdGFydCBhbmQgSSBjYW4gcnVuIGFsbAogIGN1cmwgdGVzdHMgb24gbXkgbWFjaGluZXMuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHJlcXVpcmVtZW50IGZvciB0aGUgdXBjb21pbmcKICBwdWJsaWMgcmVsZWFzZS4KCi0gVXNpbmcgLWQgYW5kIC1JIG9uIHRoZSBzYW1lIGNvbW1hbmQgbGluZSBub3cgcmVwb3J0cyBhbiBlcnJvciwgYXMgaXQgaW1wbGllcwogIHR3byBkaWZmZXJlbnQgSFRUUCByZXF1ZXN0cyB0aGF0IGNhbid0IGJlIG1peGVkLgoKLSBKZWZmcmV5IFBvaGxtZXllciBwcm92aWRlZCBhIHBhdGNoIHRoYXQgbWFkZSB0aGUgLXcvLS13cml0ZS1vdXQgb3B0aW9uCiAgc3VwcG9ydCAle2NvbnRlbnRfdHlwZX0gdG8gZ2V0IHRoZSBjb250ZW50IHR5cGUgb2YgdGhlIHJlY2VudCBkb3dubG9hZC4KCi0gS2V2aW4gUm90aCByZXBvcnRlZCB0aGF0IHByZTIgYW5kIHByZTMgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkgb24gY3lnd2luLAogIGFuZCB0aGlzIHdhcyBiZWNhdXNlIEkgdXNlZCAjaWZkZWYgSEFWRV9XSU5TT0NLX0ggaW4gbGliL211bHRpLmggdG8gZmlndXJlCiAgb3V0IGlmIHdlIGNvdWxkIGluY2x1ZGUgd2luc29jay5oIHdoaWNoIHR1cm5zIG91dCBub3QgdG8gYmUgYSB3aXNlIGNob2ljZSB0bwogIGRvIG9uIGN5Z3dpbiBzaW5jZSBpdCBoYXMgdGhlIGZpbGUgYnV0IGNhbid0IGluY2x1ZGUgaXQhCgpEYW5pZWwgKDIyIEZlYnJ1YXJ5IDIwMDIpCi0gQWRkZWQgc3JjL2NvbmZpZy12bXMuaCB0byB0aGUgcmVsZWFzZSBhcmNoaXZlLgoKLSBGaXhlZCB0aGUgY29ubmVjdGlvbiB0aW1lb3V0IHZhbHVlIGFnYWluLCB0aGUgY2hhbmdlIGZyb20gRmVicnVhcnkgMTggd2Fzbid0CiAgY29tcGxldGUuCgpWZXJzaW9uIDcuOS41LXByZTMKCkRhbmllbCAoMjEgRmVicnVhcnkgMjAwMikKLSBLZXZpbiBSb3RoIGFuZCBBbmRy6XMgR2FyY+1hIGJvdGggZm91bmQgb3V0IHRoYXQgbGliL2NvbmZpZy5oLmluIHdhcyBtaXNzaW5nCiAgaW4gdGhlIHByZS1yZWxlYXNlIGFyY2hpdmUgYW5kIHRodXMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZmFpbGVkLgoKVmVyc2lvbiA3LjkuNS1wcmUyCgpEYW5pZWwgKDIwIEZlYnJ1YXJ5IDIwMDIpCi0gQW5kculzIEdhcmPtYSBwcm92aWRlZCBhIHNvbHV0aW9uIHRvIGJ1ZyByZXBvcnQgIzUxNTIyOC4gdGhlIHRvdGFsIHRpbWUKICBjb3VudGVyIHdhcyBub3Qgc2V0IGNvcnJlY3RseSB3aGVuIC1JIHdhcyB1c2VkIGR1cmluZyBzb21lIGNvbmRpdGlvbnMgKGFsbAogIGhlYWRlcnMgd2VyZSByZWFkIGluIG9uZSBzaW5nbGUgcmVhZCkuCgotIE5pY28gQmFnZ3VzIHByb3ZpZGVkIGEgaHVnZSBwYXRjaCB3aXRoIG1pbm9yIHR3ZWFrcyBhbGwgb3ZlciB0byBtYWtlIGN1cmwKICBjb21waWxlIG5pY2VseSBvbiBWTVMuCgpEYW5pZWwgKDE5IEZlYnJ1YXJ5IDIwMDIpCi0gUmljayBSaWNoYXJkc29uIGZvdW5kIG91dCB0aGF0IGJ5IHJlcGxhY2luZyBQRl9VTlNQRUMgd2l0aCBQRl9JTkVUIGluIHRoZQogIGdldGFkZHJpbmZvKCkgY2FsbHMsIGhlIGNvdWxkIHNwZWVkIHVwIHNvbWUgbmFtZSByZXNvbHZpbmcgY2FsbHMgd2l0aCBhbgogIG9yZGVyIG9mIG1hZ25pdHVkZXMgb24gaGlzIFJlZGhhdCBMaW51eCA3LjIuCgotIFBoaWxpcCBHbGFkc3RvbmUgZm91bmQgYSBzZWNvbmQgSU5BRERSX05PTkUgcHJvYmxlbSB3aGVyZSB3ZSB1c2VkIGxvbmcKICBpbnRlYWQgb2YgaW5fYWRkcl90IHdoaWNoIGNhdXNlZCA2NGJpdCBwcm9ibGVtb3MuIFdlIHJlYWxseSBzaG91bGRuJ3QgZGVmaW5lCiAgdGhhdCBvbiB0d28gZGlmZmVyZW50IHBsYWNlcy4KCkRhbmllbCAoMTggRmVicnVhcnkgMjAwMikKLSBQaGlsaXAgR2xhZHN0b25lIGZvdW5kIGEgcHJvYmxlbSBpbiBob3cgSFRUUCByZXF1ZXN0cyB3ZXJlIHNlbnQgaWYgdGhlCiAgcmVxdWVzdCBjb3VsZG4ndCBiZSBzZW50IGFsbCBhdCBvbmNlLgoKLSBFbWlsIGZvdW5kIGFuZCBjb3JyZWN0ZWQgYSBiYWQgY29ubmVjdGlvbiB0aW1lb3V0IGNvbXBhcmlzb24gdGhhdCBtYWRlIGN1cmwKICB1c2UgdGhlIGxvbmdlc3Qgb2YgY29ubmVjdC10aW1lb3V0IGFuZCB0aW1vdXQgYXMgYSB0aW1lb3V0IHZhbHVlLCBpbnN0ZWFkIG9mCiAgdGhlIHNob3J0ZXN0IGFzIGl0IHdhcyBzdXBwb3NlZCB0byEKCi0gQXJvbiBSb2JlcnRzIHByb3ZpZGVkIHVwZGF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgTERBUCBVUkwgc3ludGF4IHRvIGdvIGludG8KICB0aGUgbWFudWFsIGFzIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvbGQgcmVmZXJlbmNlcy4KCkRhbmllbCAoMTcgRmVicnVhcnkgMjAwMikKLSBQaGlsaXAgR2xhZHN0b25lIHBvaW50ZWQgb3V0IHR3byBtaXNzaW5nIGluY2x1ZGUgZmlsZXMgdGhhdCBtYWRlIGN1cmwgY29yZQogIGR1bXAgb24gNjRiaXQgYXJjaGl0ZWN0dXJlcy4gV2UgbmVlZCB0byBwYXkgbW9yZSBhdHRlbnRpb24gb24gdGhlc2UgZGV0YWlscy4KICBJdCBpcyAqbGV0aGFsKiB0byBmb3IgZXhhbXBsZSBmb3JnZXQgdGhlIG1hbGxvYygpIHByb3RvdHlwZSwgYXMgJ2ludCcgaXMKICAzMmJpdCBhbmQgbWFsbG9jKCkgbXVzdCByZXR1cm4gYSA2NGJpdCBwb2ludGVyIG9uIHRoZXNlIHBsYXRmb3Jtcy4KCi0gR2lhc2xhcyBHZW9yZ2lvcyBmaXhlZCBhIHByb2JsZW0gd2l0aCBIb3N0OiBoZWFkZXJzIG9uIHJlcGVhdGVkIHJlcXVlc3RzIG9uCiAgdGhlIHNhbWUgaGFuZGxlIHVzaW5nIGEgcHJveHkuCgpEYW5pZWwgKDggRmVicnVhcnkgMjAwMikKLSBIYW5ubyBMLiBLcmFuemhvZmYgYWNjdXJhdGVseSBmb3VuZCBvdXQgdGhhdCBkaXNhYmxpbmcgdGhlIEV4cGVjdDogaGVhZGVyCiAgd2hlbiBkb2luZyBtdWx0aXBhcnQgZm9ybXBvc3RzIGRpZG4ndCB3b3JrIHZlcnkgd2VsbC4gSXQgZGlzYWJsZWQgb3RoZXIKICBwYXJ0cyBvZiB0aGUgcmVxdWVzdCBoZWFkZXIgdG9vLCByZXN1bHRpbmcgaW4gYSBicm9rZW4gaGVhZGVyLiBXaGVuIEkgZml4ZWQKICB0aGlzLCBJIGFsc28gbm90aWNlZCB0aGF0IHRoZSBDb250ZW50LVR5cGUgd2Fzbid0IHBvc3NpYmxlIHRvIGRpc2FibGUuIEl0IGlzCiAgbm93LCBldmVuIHRob3VnaCBpdCBwcm9iYWJseSBpcyByZWFsbHkgc3R1cGlkIHRvIHRyeSB0byBkbyB0aGlzIChiZWNhdXNlIG9mCiAgdGhlIGJvdW5kYXJ5IHN0cmluZyB0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBpbnRlcm5hbGx5IGdlbmVyYXRlZCBoZWFkZXIsCiAgdXNlZCBhcyBmb3JtIHBhcnQgc2VwYXJhdG9yLikKCkRhbmllbCAoNyBGZWJydWFyeSAyMDAyKQotIEkgbW92ZWQgdGhlIGNvbmZpZyouaCBmaWxlcyBmcm9tIHRoZSByb290IGRpcmVjdG9yeSB0byB0aGUgbGliLyBkaXJlY3RvcnkuCgotIEkndmUgYWRkZWQgdGhlIG5ldyB0ZXN0IHN1aXRlIEhUVFAgc2VydmVyIHRvIHRoZSBDVlMgcmVwb3NpdG9yeSwgSXQgc2VlbXMgdG8KICB3b3JrIHByZXR0eSBnb29kIG5vdywgYnV0IHdlIG11c3QgbWFrZSBpdCBnZXQgdXNlZCBieSB0aGUgdGVzdCBzY3JpcHRzCiAgcHJvcGVybHkgYW5kIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBjb21waWxlcywgYnVpbGRzIGFuZCBydW5zIG9uCiAgbW9zdCBvcGVyYXRpbmcgc3lzdGVtcy4KClZlcnNpb24gNy45LjUtcHJlMQoKRGFuaWVsICg2IEZlYnJ1YXJ5IDIwMDIpCi0gTWlrbG9zIE5lbWV0aCBwcm92aWRlZCB1cGRhdGVkIHdpbmRvd3MgbWFrZWZpbGVzIGFuZCBJTlNUQUxMIGRvY3MuCgotIE1yIExhcnJ5IEZhaG5vZSBmb3VuZCBhIHByb2JsZW0gd2l0aCBmb3JtcG9zdHMgYW5kIEkgbWFuYWdlZCB0byB0cmFjayBkb3duCiAgYW5kIHBhdGNoIHRoaXMgYnVnLiBUaGlzIHdhcyBhY3R1YWxseSB0d28gYnVncywgYXMgdGhlIHBvc3RlZCBzaXplIHdhcyBhbHNvCiAgc2FpZCB0byBiZSB0d28gYnl0ZXMgdG9vIGxhcmdlLgoKLSBCcmVudCBCZWFyZHNsZXkgZm91bmQgb3V0IGFuZCBicm91Z2h0IGEgY29ycmVjdGlvbiBmb3IgdGhlCiAgQ1VSTElORk9fQ09OVEVOVF9UWVBFIHBhcnNlciB0aGF0IHdhcyBvZmYgb25lIGJ5dGUuIFRoaXMgd2FzIG15IGZhdWx0LCBJCiAgYWNjaWRlbnRhbHkgYnJva2UgR2lhc2xhcyBHZW9yZ2lvcycgcGF0Y2guCgpEYW5pZWwgKDUgRmVicnVhcnkgMjAwMikKLSBLZXZpbiBSb3RoIGZvdW5kIHlldCBhbm90aGVyIFNTTCBkb3dubG9hZCBwcm9ibGVtLgoKVmVyc2lvbiA3LjkuNAoKLSBubyBjaGFuZ2VzIHNpbmNlIHByZS1yZWxlYXNlCgpWZXJzaW9uIDcuOS40LXByZTIKCkRhbmllbCAoMyBGZWJydWFyeSAyMDAyKQotIEVyaWMgTWVsdmlsbGUgcHJvdmlkZWQgYSBmZXcgc3BlbGxpbmcgY29ycmVjdGlvbnMgaW4gdGhlIGN1cmwgbWFuIHBhZ2UuCgpEYW5pZWwgKDEgRmVicnVhcnkgMjAwMikKLSBBbmRyZWFzIERhbW0gY29ycmVjdGVkIHRoZSB1bmNvbmRpdGlvbmFsIHVzZSBvZiBnbXRpbWUoKSBpbiBnZXRkYXRlLCBpdCBub3cKICB1c2VzIGdtdGltZV9yKCkgb24gYWxsIGhvc3RzIHRoYXQgaGF2ZSBpdC4KCkRhbmllbCAoMzEgSmFudWFyeSAyMDAyKQotIEFuIGFub255bW91cyBidWcgcmVwb3J0IGlkZW50aWZpZWQgYSBwcm9ibGVtIGluIHRoZSBETlMgY2FjaGluZyB3aGljaCBtYWRlIGl0CiAgc29tZXRpbWVzIGFsbG9jYXRlIG9uZSBieXRlIHRvbyBsaXR0bGUgdG8gc3RvcmUgdGhlIGNhY2hlIGVudHJ5IGluLiBUaGlzCiAgaGFwcGVuZWQgd2hlbiB0aGUgcG9ydCBudW1iZXIgc3RhcnRlZCB3aXRoIDEhCgotIEFsYmVydCBDaGluIHByb3ZpZGVkIGEgcGF0Y2ggdGhhdCBpbXByb3ZlcyB0aGUgZ2V0aG9zdGJ5bmFtZV9yKCkgY29uZmlndXJlCiAgY2hlY2sgb24gSFAtVVggMTEuMDAuCgpWZXJzaW9uIDcuOS40LXByZTEKCkRhbmllbCAoMzAgSmFudWFyeSAyMDAyKQotIEdlb3JnIEhvcm4gZm91bmQgYW5vdGhlciB3YXkgdGhlIFNTTCByZWFkaW5nIGZhaWxlZCBkdWUgdG8gdGhlIG5vbi1ibG9ja2luZwogIHN0YXRlIG9mIHRoZSBzb2NrZXRzISBJIGZpeGVkLgoKRGFuaWVsICgyOSBKYW51YXJ5IDIwMDIpCi0gTXVsdGlwYXJ0IGZvcm1wb3N0cyBub3cgc2VuZCB0aGUgZnVsbCByZXF1ZXN0IHByb3Blcmx5LCBpbmNsdWRpbmcgdGhlIENSTEYuCiAgVGhleSB3ZXJlIHByZXZpb3VzbHkgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBwb3N0IGRhdGEuCgotIFRoZSB1cGxvYWQgYnl0ZSBjb3VudGVyIGJ1Z2dlZC4KCi0gVC4gQmhhcmF0aCBwb2ludGVkIG91dCB0aGF0IHdlIHNlZWQgU1NMIG9uIGV2ZXJ5IGNvbm5lY3QsIHdoaWNoIGlzIGEgdGltZS0KICBjb25zdW1pbmcgb3BlcmF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgbmVlZGVkIHRvIGRvIG9uY2UuIFdlIHBhdGNoZWQKICBsaWJjdXJsIHRvIG5vdyBvbmx5IHNlZWQgb24gdGhlIGZpcnN0IGNvbm5lY3Qgd2hlbiB1bnNlZWRlZC4gVGhlIHNlZWRlZAogIHN0YXR1cyBpcyBnbG9iYWwgc28gaXQnbGwgbm93IG9ubHkgaGFwcGVuIG9uY2UgZHVyaW5nIGEgcHJvZ3JhbSdzIGxpZmUgdGltZS4KCiAgSWYgdGhlIHJhbmRvbV9maWxlIG9yIGVnZHNvY2tldCBpcyBzZXQsIHRoZSBzZWVkIHdpbGwgYmUgcmUtbWFkZSB0aG91Z2guCgotIEdpYXNsYXMgR2Vvcmdpb3MgaW50cm9kdWNlZCBDVVJMSU5GT19DT05URU5UX1RZUEUgdGhhdCBsZXRzCiAgY3VybF9lYXN5X2dldGluZm8oKSByZWFkIHRoZSBjb250ZW50LXR5cGUgZnJvbSB0aGUgcHJldmlvdXMgcmVxdWVzdC4KCkRhbmllbCAoMjggSmFudWFyeSAyMDAyKQotIEtqZXRpbCBKYWNvYnNlbiBmb3VuZCBhIHdheSB0byBjcmFzaCBjdXJsIGFuZCBhZnRlciBtdWNoIGRlYnVnZ2luZywgaXQKICB0dXJuZWQgb3V0IGl0IHdhcyBhIElQdjQtbGludXggb25seSBwcm9ibGVtIGludHJvZHVjZWQgaW4gNy45LjMgcmVsYXRlZCB0bwogIG5hbWUgcmVzb2x2aW5nLgoKLSBBbmRyZWFzIERhbW0gcG9zdGVkIGEgaHVnZSBwYXRjaCB0aGF0IG1hZGUgdGhlIGN1cmxfZ2V0ZGF0ZSgpIGZ1bmN0aW9uIGZ1bGx5CiAgcmVlbnRyYW50IQoKLSBTdGV2ZSBNYXJ4IHBvaW50ZWQgb3V0IHRoYXQgeW91IGNvdWxkbid0IG1peCBDVVJMT1BUX0NVU1RPTVJFUVVFU1Qgd2l0aAogIENVUkxPUFRfUE9TVEZJRUxEUy4gWW91IGNhbiBub3chCgpEYW5pZWwgKDI1IEphbnVhcnkgMjAwMikKLSBLcmlzaG5lbmR1IE1hanVtZGFyIHBvaW50ZWQgb3V0IHRoYXQgdGhlIGhlYWRlciBsZW5ndGggY291bnRlciB3YXMgbm90IHJlc2V0CiAgYmV0d2VlbiBtdWx0aXBsZSByZXF1ZXN0cyBvbiB0aGUgc2FtZSBoYW5kbGUuCgotIFBlZHJvIE5ldmVzIHJpZ2h0ZnVsbHkgcXVlc3Rpb25lZCB3aHkgY3VybCBhbHdheXMgYXBwZW5kIFxyXG4gdG8gdGhlIGRhdGEKICB0aGF0IGlzIHNlbnQgaW4gSFRUUCBQT1NUIHJlcXVlc3RzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGJyb2tlIHRoZSB0ZXN0IHN1aXRlCiAgYXMgdGhlIHRlc3QgSFRUUCBzZXJ2ZXIgaXMgbGFtZSBlbm91Z2ggbm90IHRvIGRlYWwgd2l0aCB0aGlzLi4uIDotTwoKLSBGb2xsb3dpbmcgTG9jYXRpb246IGhlYWRlcnMgd2hlbiB0aGUgY29ubmVjdGlvbiBkaWRuJ3QgY2xvc2UgZGlkbid0IHdvcmsgYXMKICBsaWJjdXJsIGRpZG4ndCBwcm9wZXJseSBzdG9wIHJlYWRpbmcuIFRoaXMgcHJvYmxlbSB3YXMgYWRkZWQgaW4gNy45LjMgZHVlIHRvCiAgdGhlIHJlc3RydWN0dXJlZCBpbnRlcm5hbHMuICdGcmFuaycgcG9zdGVkIGEgYnVnIHJlcG9ydCBhYm91dCB0aGlzLgoKRGFuaWVsICgyNCBKYW51YXJ5IDIwMDIpCi0gS2V2aW4gUm90aCB2ZXJ5IHF1aWNrbHkgc3BvdHRlZCB0aGF0IHdlIHdyb25nbHkgaW5zdGFsbGVkIHRoZSBleGFtcGxlCiAgcHJvZ3JhbXMgdGhhdCB3ZXJlIGJ1aWx0IGluIHRoZSBtdWx0aSBkaXJlY3RvcnksIHdoZW4gJ21ha2UgaW5zdGFsbCcgd2FzCiAgdXNlZC4gOi0vCgpWZXJzaW9uIDcuOS4zCgpEYW5pZWwgKDIzIEphbnVhcnkgMjAwMikKLSBBbmRy6XMgR2FyY+1hIGZvdW5kIGEgcGVyc2lzdGFuY3kgcHJvYmxlbSB3aGVuIGRvaW5nIEhUVFAgSEVBRCwgdGhhdCBtYWRlCiAgY3VybCAiaGFuZyIgdW50aWwgdGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBieSB0aGUgc2VydmVyLiBUaGlzIHByb2JsZW0gaGFzCiAgYmVlbiBpbnRyb2R1Y2VkIGluIDcuOS4zIGR1ZSB0byBpbnRlcm5hbCByZXdyaXRlcywgdGhpcyB3YXMgbm90IHByZXNlbnQgaW4KICA3LjkuMi4KClZlcnNpb24gNy45LjMtcHJlNAoKRGFuaWVsICgxOSBKYW51YXJ5IDIwMDIpCi0gQW50b25pbyBmaWxlZCBidWcgcmVwb3J0ICM1MDU1MTQgYW5kIHByb3ZpZGVkIGEgZml4ISBXaGVuIGRvaW5nIG11bHRpcGFydAogIGZvcm1wb3N0cywgbGliY3VybCB3b3VsZCBpbmNsdWRlIGFuIGVycm9yIHRleHQgaW4gdGhlIGFjdHVhbCBwb3N0IGlmIGEKICBzcGVjaWZpZWQgZmlsZSB3YXNuJ3QgZm91bmQuIFRoaXMgaXMgbm90IGxpYmN1cmwncyBqb2IuIEluc3RlYWQgd2UgYWRkIGFuCiAgZW1wdHkgcGFydC4KCkRhbmllbCAoMTggSmFudWFyeSAyMDAyKQotIFBsYXllZCBhcm91bmQgd2l0aCBzdHJpY3RlciBjb21waWxlciB3YXJuaW5ncyBmb3IgZ2NjICh3aGVuIC4vY29uZmlndXJlCiAgLS1lbmFibGUtZGVidWcgaXMgdXNlZCkgYW5kIGNoYW5nZWQgc29tZSBtaW5vciB0aGluZ3MgdG8gc3RvcCB0aGUgd2FybmluZ3MuCgotIENvbW1lbnRlZCBvdXQgdGhlICdsb25nIGxvbmcnIGFuZCAnbG9uZyBkb3VibGUnIGNoZWNrcyBpbiBjb25maWd1cmUuaW4sIGFzCiAgd2UgZG9uJ3QgY3VycmVudGx5IHVzZSB0aGVtIGFueXdheSBhbmQgdGhlIGNvZGUgaW4gbGliL21wcmludGYuYyB0aGF0IHVzZQogIHRoZW0gY2F1c2VzIHdhcm5pbmdzLgoKLSBTYXVsIEdvb2QgYW5kIGpvbmF0YW4gcG9pbnRlZCBvdXQgTWFjIE9TIFggYnVpbGQgcHJvYmxlbXMgd2l0aCBwcmUzIGFuZCBob3cKICB0byBjb3JyZWN0IHRoZW0uIFR3byBjb21waWxlciB3YXJuaW5ncyB3ZXJlIHJlbW92ZWQgYXMgd2VsbC4KCi0gQW5kculzIEdhcmPtYSBmaXhlZCB0d28gbWlub3IgbWluZ3czMiBidWlsZGluZyBwcm9ibGVtcy4KClZlcnNpb24gNy45LjMtcHJlMwoKRGFuaWVsICgxNyBKYW51YXJ5IDIwMDIpCi0gZG9jcy9saWJjdXJsLXRoZS1ndWlkZSBpcyBhIG5ldyB0dXRvcmlhbCBmb3Igb3VyIGxpYmN1cmwgcHJvZ3JhbW1pbmcKICBmcmllbmRzLgoKLSBSaWNoYXJkIEFyY2hlciBicm91Z2h0IGJhY2sgdGhlIGFiaWxpdHkgdG8gY29tcGlsZSBhbmQgYnVpbGQgd2l0aCBPcGVuU1NMCiAgdmVyc2lvbnMgYmVmb3JlIDAuOS41LgogIFtodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmF0aWQ9MTAwOTc2JmFpZD01MDQxNjMmZ3JvdXBfaWQ9OTc2XQoKLSBUaGUgRE5TIGNhY2hlIGNvZGUgZGlkbid0IHRha2UgdGhlIHBvcnQgbnVtYmVyIGludG8gYWNjb3VudCwgd2hpY2ggbWFkZSBpdAogIHdvcmsgcmF0aGVyIGJhZCBvbiBJUHY2LWVuYWJsZWQgaG9zdHMgKGVzcGVjaWFsbHkgd2hlbiBkb2luZyBwYXNzaXZlCiAgRlRQKS4gU3RlcmxpbmcgZml4ZWQgaXQuCgpEYW5pZWwgKDE2IEphbnVhcnkgMjAwMikKLSBHZW9yZyBIb3JuIGNvdWxkIG1ha2UgYSB0cmFuc2ZlciB0aW1lLW91dCB3aXRob3V0IGVycm9yIHRleHQuIEkgZm91bmQgaXQgYW5kCiAgY29ycmVjdGVkIGl0LgoKLSBTU0wgd3JpdGVzIGRpZG4ndCB3b3JrLCB0aGV5IHJldHVybiBhbiB1bmluaXRpYWxpemVkIHZhbHVlIHRoYXQgY2F1c2VkCiAgaGF2b2MgYWxsIG92ZXIuIEdlb3JnIEhvcm4gZXhwZXJpZW5jZWQgdGhpcy4KCi0gS2V2aW4gUm90aCBwYXRjaGVkIHRoZSBjdXJsX3ZlcnNpb24oKSBmdW5jdGlvbiB0byB1c2UgdGhlIHByb3BlciBPcGVuU1NMCiAgZnVuY3Rpb24gZm9yIHZlcnNpb24gaW5mb3JtYXRpb24uIFRoaXMgd2F5LCBjdXJsIHdpbGwgcmVwb3J0IHRoZSB2ZXJzaW9uIG9mCiAgdGhlIFNTTCBsaWJyYXJ5IGFjdHVhbGx5IHJ1bm5pbmcgcmlnaHQgbm93LCBub3QgdGhlIG9uZSB0aGF0IGhhZCBpdHMgaGVhZGVycwogIGluc3RhbGxlZCB3aGVuIGxpYmN1cmwgd2FzIGJ1aWx0LiBNYWlubHkgaW50ZXJzdGluZyB3aGVuIHJ1bm5pbmcgd2l0aCBzaGFyZWQKICBPcGVuU1NMIGxpYnJhcmllcy4gIAoKVmVyc2lvbiA3LjkuMy1wcmUyCgpEYW5pZWwgKDE2IEphbnVhcnkgMjAwMikKLSBNb2ZpZWQgdGhlIG1haW4gdHJhbnNmZXIgbG9vcCBhbmQgcmVsYXRlZCBzdHVmZiB0byBkZWFsIHdpdGggbm9uLWJsb2NraW5nCiAgc29ja2V0cyBpbiB0aGUgdXBsb2FkIHNlY3Rpb24uIFdoaWxlIGRvaW5nIHRoaXMsIEkndmUgbm93IHNlcGFyYXRlZCB0aGUKICBjb25uZWN0aW9uIG9yaWVudGVkIGJ1ZmZlcnMgdG8gaGF2ZSBvbmUgZm9yIGRvd25sb2FkcyBhbmQgb25lIGZvciB1cGxvYWRzCiAgKGFzIHR3byBjYW4gaGFwcGVuIHNpbXVsdGFuZW91c2x5KS4gSSBhbHNvIHNocnVuayB0aGUgYnVmZmVycyB0byAyMEsKICBlYWNoLiBBcyB3ZSBoYXZlIGEgc2NyYXRjaCBidWZmZXIgdHdpY2UgdGhlIHNpemUgb2YgdGhlIHVwbG9hZCBidWZmZXIsIHdlCiAgYXJyaXZlZCBhdCA4MEsgZm9yIGJ1ZmZlcnMgY29tcGFyZWQgd2l0aCB0aGUgcHJldmlvdXMgMTUwSy4KCi0gQWRkZWQgdGhlIC0tY2Mgb3B0aW9uIHRvIGN1cmwtY29uZmlnIGNvbW1hbmQgYXMgaXQgZW5hYmxlcyBzbyB2ZXJ5IGNvb2wKICBvbmUtbGluZXJzLiBIYXZlIGEgZ28gYSB0aGlzIG9uZSwgYnVpbGRpbmcgdGhlIHNpbXBsZS5jIGV4YW1wbGU6CgogICAgICAgICQgYGN1cmwtY29uZmlnIC0tY2MgLS1jZmxhZ3MgLS1saWJzYCAtbyBleGFtcGxlIHNpbXBsZS5jCgpEYW5pZWwgKDE0IEphbnVhcnkgMjAwMikKLSBJIG1hZGUgYWxsIHNvY2tldCByZWFkcyAocmVjdikgaGFuZGxlIEVXT1VMREJMT0NLLiBJIGhvcGUgbmljZWx5LiBOb3cgd2UKICBvbmx5IG5lZWQgdG8gYWRkcmVzcyBhbGwgd3JpdGVzIChzZW5kKSB0b28gYW5kIHRoZW4gSSdtIHJlYWR5IGZvciBhbm90aGVyCiAgcHJlLXJlbGVhc2UuLi4KCi0gU3RvbmVkIEVsaXBvdCBwYXRjaGVkIHRoZSBpbl9hZGRyX3QgY29uZmlndXJlIHRlc3QgdG8gbWFrZSBpdCB3b3JrIGJldHRlciBvbgogIG1vcmUgcGxhdGZvcm1zLgoKRGFuaWVsICg5IEphbnVhcnkgMjAwMikKLSBDcmlzIEJhaWxpZmYgZm91bmQgb3V0IHRoYXQgZmlsbGluZyB1cCBjdXJsJ3MgU1NMIHNlc3Npb24gY2FjaGUgY2F1c2VkIGEKICBjcmFzaCEKCi0gUG9zdGVkIHRoZSBjdXJsIHF1ZXN0aW9ubmFpcmUgb24gdGhlIHdlYiBzaXRlLiBJZiB5b3UgaGF2ZW4ndCBwb3N0ZWQgeW91cgogIG9waW5pb25zIHRoZXJlIHlldCwgZ28gdGhlcmUgYW5kIGRvIGl0IG5vdyB3aGlsZSBpdCBpcyBzdGlsbCB0aGVyZToKCiAgICAgICAgaHR0cDovL2N1cmwuaGF4eC5zZS9xLwoKLSBHZW9yZyBIb3JuIHF1aWNrbHkgZm91bmQgb3V0IHRoYXQgdGhlIFNTTCByZWFkaW5nIG5vIGxvbmdlciB3b3JrZWQgYXMKICBzdXBwb3NlZCBzaW5jZSB0aGUgc3dpdGNoIHRvIG5vbi1ibG9ja2luZyBzb2NrZXRzLiBJJ3ZlIG1hZGUgYSBxdWljayBwYXRjaAogIChmb3IgcmVhZGluZyBvbmx5KSBidXQgd2Ugc2hvdWxkIGltcHJvdmUgaXQgZXZlbiBmdXJ0aGVyLgoKVmVyc2lvbiA3LjkuMy1wcmUxCgpEYW5pZWwgKDcgSmFudWFyeSAyMDAyKQotIEkgbWFkZSB0aGUgJ2Jvb2wnIHR5cGVkZWYgdXNlIGFuICJ1bnNpZ25lZCBjaGFyIi4gSXQgbWFrZXMgaXQgdGhlIHNhbWUgb24KICBhbGwgcGxhdGZvcm1zLCBubyBtYXR0ZXIgd2hhdCB0aGUgcGxhdGZvcm0gdGhpbmtzIHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IKICBjaGFyIGlzLiBUaGlzIHdhcyBub3RpY2VkIHNpbmNlIHdlIG1hZGUgYSBzaWxseSBjb21wYXJpc29uIGludm9sdmluZyBzdWNoIGEKICBib29sIHZhcmlhYmxlLCBhbmQgb25seSBvbmUgY29tcGlsZXIvcGxhdGZvcm0gY29tYmluYXRpb24gKG9uIERlYmlhbiBMaW51eCkKICBjb21wbGFpbmVkIGFib3V0IGl0ICh0aGF0IGhhcHBlbmVkIHRvIGhhdmUgaXRzIGNoYXIgdW5zaWduZWQgYnkgZGVmYXVsdCkuCgotIEJ1ZyByZXBvcnQgIzQ5NTI5MCBpZGVudGlmaWVkIGEgY29va2llIHBhcnNpbmcgcHJvYmxlbSB0aGF0IHdhcyBjb3JyZWN0ZWQuCiAgV2hlbiBhIFNldC1Db29raWU6IGxpbmUgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHRyYWlsaW5nIHNlbWljb2xvbiwgbGliY3VybAogIGRpZG4ndCByZWFkIHRoZSBsYXN0ICJuYW1lPXZhbHVlIiBwYWlyIG9mIHRoZSBsaW5lLCBsZWFkaW5nIHRvIGNvbmZ1c2lvbnMuLi4KCi0gU3RlcmxpbmcgY29tbWl0dGVkIGhpcyB1cGRhdGVkIEROUyBjYWNoZSBjb2RlLgoKLSBJIHdvcmtlZCB3aXRoIEdlb3JnIEhvcm4gYW5kIGNvbW1lbnRzIGZyb20gR/Z0eiBCYWJpbi1FYmVsbCBhbmQgc3dpdGNoZWQKICBjdXJsJ3Mgc29ja2V0IG9wZXJhdGlvbnMgY29tcGxldGVseSBvdmVyIHRvIG5vbi1ibG9ja2luZyBmb3IgdGhlIGVudGlyZQogIG9wZXJhdGlvbiAocHJldmlvdXNseSB3ZSB1c2VkIG5vbi1ibG9ja2luZyBvbmx5IGZvciB0aGUgY29ubmVjdGlvbiBwaGFzZSkuCiAgV2UgaGFkIHRvIGRvIHRoaXMgdG8gbWFrZSB0aGUgU1NMIGNvbm5lY3Rpb24gcGhhc2UgdGltZW91dCBwcm9wZXJseSB3aXRob3V0CiAgdGhlIHVzZSBvZiBzaWduYWxzLiBBIGxpdHRsZSBleHRyYSBjb2RlIHRvIGRlYWwgd2l0aCB0aGlzIHdhcyBhZGRlZC4KCi0gVC4gQmhhcmF0aCBwb2ludGVkIG91dCBhIHNsaWdodGx5IG9ic2N1cmUgY29va2llIGVuZ2luZSBmbGF3LgoKLSBQZXRlIFN1IHBvaW50ZWQgb3V0IHRoYXQgbGliY3VybCBkaWRuJ3QgdHJlYXQgSFRUUCBjb2RlIDIwNCBhcyBpdCBzaG91bGQuCiAgMjA0LXJlcGxpZXMgbmV2ZXIgcHJvdmlkZXMgYSByZXNwb25zZS1ib2R5LiBUaGlzIHJlc3VsdGVkIGluIGJhZCBwZXJzaXN0YW50CiAgYmVoYXZpb3Igd2hlbiAyMDQgd2FzIHJlY2VpdmVkLgoKRGFuaWVsICg1IEphbnVhcnkgMjAwMikKLSBTTSB1cGRhdGVkIHRoZSBWQysrIGxpYnJhcnkgTWFrZWZpbGVzIGZvciB0aGUgbmV3IHNvdXJjZSBmaWxlcy4KCkRhbmllbCAoNCBKYW51YXJ5IDIwMDIpCi0gSSBkaXNjb3ZlcmVkIHRoYXQgd2Ugd3JvbmdseSB1c2VkIGluZXRfbnRvYSgpIChpbnN0ZWFkIG9mIGluZXRfbnRvYV9yKCkgaW4KICB0d28gcGxhY2VzIGluIHRoZSBzb3VyY2UgY29kZSkuIE9uZSBoYXBwZW5lZCB3aXRoIFZFUkJPU0Ugc2V0IG9uIGNvbm5lY3RzLAogIGFuZCB0aGUgb3RoZXIgd2hlbiBWRVJCT1NFIHdhcyBvbiBhbmQga3JiNCBvdmVyIG5hdCB3YXMgdXNlZC4uLiBJIGhvbmVzdGx5CiAgZG9uJ3QgdGhpbmsgYW55b25lIGhhcyBzdWZmZXJlZCBmcm9tIHRoZXNlIG1pc3Rha2VzLgoKLSBJIHJlcGxhY2VkIGEgbG90IG9mIHNpbGx5IG9jY3VyYW5jZXMgb2YgcHJpbnRmKCkgdG8gaW5zdGVhZCB1c2UgdGhlIG1vcmUKICBhcHByb3ByaWF0ZSBDdXJsX2luZm9mKCkgb3IgQ3VybF9mYWlsZigpLiBUaGUga3JiNCBhbmQgdGVsbmV0IGNvZGUgd2VyZQogIGFmZmVjdGVkLgoKLSBQaGlsaXAgR2xhZHN0b25lIGZvdW5kIGEgZmV3IG1vcmUgcHJvYmxlbXMgd2l0aCA2NC1iaXQgYXJjaHMgKHRoZSA2NC1iaXQKICBzcGFyYyBvbiBzb2xhcmlzIDgpLgoKLSBBZnRlciBkaXNjdXNzaW9ucyBvbiB0aGUgbGliY3VybCBsaXN0IHdpdGggUmFvdWwgQ3JpZGxpZywgSSBqdXN0IG1hZGUgRlRQCiAgcmVzcG9uc2UgbGluZXMgZ2V0IHBhc3NlZCB0byB0aGUgaGVhZGVyIGNhbGxiYWNrIGlmIHN1Y2ggYSBvbmUgaXMKICByZWdpc3RlcmVkLiBJdCdsbCBtYWtlIGl0IHBvc3NpYmxlIGZvciBhbnkgYXBwbGljYXRpb24gdG8gZ2V0IGFsbCB0aGUKICByZXNwb25zZXMgYW4gRlRQIHNlcnZlciBzZW5kcyB0byBsaWJjdXJsLgoKRGFuaWVsICgzIEphbnVhcnkgMjAwMikKLSBTdGVybGluZyBIdWdoZXMgYnJvdWdodCBhIGZldyBidWNrZXRzIG9mIGNvZGUuIE5vdywgbGliY3VybCB3aWxsCiAgYXV0b21hdGljYWxseSBjYWNoZSBETlMgbG9va3VwcyBhbmQgcmUtdXNlIHRoZSBwcmV2aW91cyByZXN1bHRzIGZpcnN0IGlmIGFueQogIHN1Y2ggaXMgYXZhaWxhYmxlLiBJdCBncmVhdGx5IGltcHJvdmVzIHNwZWVkIHdoZW4gZG9pbmcgbWFueSByZXBlYXRlZAogIG9wZXJhdGlvbnMgdG8gdGhlIHNhbWUgaG9zdC4KCi0gQXMgdGhlIHRlc3QgY2FzZSB1c2VzIC0taW5jbHVkZSBhbmQgdGhlbiAtLWhlYWQsIEkgaGFkIHRvIG1vZGlmeSBzcmMvbWFpbi5jCiAgdG8gZGVhbCB3aXRoIHRoaXMgc2l0dWF0aW9uIHNsaWdodGx5IGJldHRlciB0aGFuIHByZXZpb3VzbHkuIFdoZW4gZG9uZSwgd2UKICBoYXZlIDEwMCUgZ29vZCB0ZXN0cyBhZ2FpbiBpbiB0aGUgbWFpbiBicmFuY2guCgpEYW5pZWwgKDIgSmFudWFyeSAyMDAyKQotIE1hZGUgdGVzdCBjYXNlIDI1IHJ1biBhZ2FpbiBpbiB0aGUgbXVsdGktZGV2IGJyYW5jaC4gQnV0IGl0IHNlZW1zIHRoYXQgdGhlCiAgY2hhbmdlcyBkb25lIG9uIGRlYy0yMCBtYWRlIHRlc3QgY2FzZSAxMDQgY2Vhc2UgdG8gd29yayAoaW4gYm90aCBicmFuY2hlcykuCgotIFBoaWxpcCBHbGFkc3RvbmUgcG9pbnRlZCBvdXQgYSBmZXcgcG9ydGFiaWxpdHkgcHJvYmxlbXMgaW4gdGhlIHNvdXJjZSBjb2RlCiAgdGhhdCBkaWRuJ3QgY29tcGlsZSBvbiA2NC1iaXQgc3BhcmNzIHVzaW5nIFN1bidzIG5hdGl2ZSA=