ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWxvZwoKTWljaGFsIE1hcmVrICgxMyBOb3YgMjAwOCkKLSBGaXhlZCBhIHBvdGVudGlhbCBkYXRhIGxvc3MgaW4gQ3VybF9jbGllbnRfd3JpdGUoKSB3aGVuIHRoZSB0cmFuc2ZlciBpcwogIHBhdXNlZC4KCkRhbmllbCBTdGVuYmVyZyAoMTEgTm92IDIwMDgpCi0gUmFpbmVyIENhbmF2YW4gZmlsZWQgYnVnICMyMjU1NjI3CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTIyNTU2MjcpIHdoaWNoIHBvaW50ZWQgb3V0IHRoYXQgYQogIHByb2dyYW0gdXNpbmcgbGliY3VybCdzIG11bHRpIGludGVyZmFjZSB0byBkb3dubG9hZCBhIEhUVFBTIHBhZ2Ugd2l0aCBhCiAgbGliY3VybCBidWlsdCBwb3dlcmVkIGJ5IE9wZW5TU0wsIHdvdWxkIGVhc2lseSBnZXQgc2lsbHkgYW5kIGluc3RlYWQgaGFuZAogIG92ZXIgU1NMIGRldGFpbHMgYXMgZGF0YSBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgSFRUUCBoZWFkZXJzIGFuZCBib2R5LiBUaGlzCiAgaGFwcGVuZWQgYmVjYXVzZSBsaWJjdXJsIHdvdWxkIGNvbnNpZGVyIHRoZSBjb25uZWN0aW9uIGhhbmRzaGFrZSBkb25lIHRvbwogIGVhcmx5LiBUaGlzIHByb2JsZW0gd2FzIGludHJvZHVjZWQgYXQgU2VwdGVtYmVyIDIybmQgMjAwOCB3aXRoIG15IGZpeCBvZiB0aGUKICBidWcgIzIxMDczNzcKCiAgVGhlIGNvcnJlY3QgZml4IGlzIG5vdyBpbnN0ZWFkIGRvbmUgd2l0aGluIHRoZSBHbnVUTFMtaGFuZGxpbmcgY29kZSwgYXMgYm90aAogIHRoZSBPcGVuU1NMIGFuZCB0aGUgTlNTIGNvZGUgYWxyZWFkeSBkZWFsIHdpdGggdGhpcyBzaXR1YXRpb24gaW4gc2ltaWxhcgogIGZhc2hpb24uIEkgYWRkZWQgdGVzdCBjYXNlIDU2MCBpbiBhbiBhdHRlbXB0IHRvIHZlcmlmeSB0aGlzIGZpeCwgYnV0CiAgdW5mb3J0dW5hdGVseSBpdCBkaWRuJ3QgdHJpZ2dlciBpdCBldmVuIGJlZm9yZSB0aGlzIGZpeCEKCllhbmcgVHNlICgxMSBOb3YgMjAwOCkKLSBSZWxhdGVkIHdpdGggYnVnICMyMjMwNTM1IChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMjMwNTM1KQogIERhbmllbCBGYW5kcmljaCBub3RpY2VkIHRoYXQgY3VybF9hZGRyaW5mbyB3YXMgYWxzbyBtaXNzaW5nIGluIHRoZSBidWlsZAogIHByb2Nlc3Mgb2Ygb3RoZXIgZm91ciBub24tY29uZmlndXJlIHBsYXRmb3Jtcy4gQWRkZWQgbm93LgoKRGFuaWVsIEZhbmRyaWNoICg3IE5vdiAyMDA4KQotIFRoZSBnZXRpZmFkZHJzKCkgdmVyc2lvbiBvZiBDdXJsX2lmMmlwKCkgY3Jhc2hlZCB3aGVuIHVzZWQgb24gYSBMaW51eAogIHN5c3RlbSB3aXRoIGEgVEVRTCBsb2FkLWJhbGFuY2luZyBkZXZpY2UgY29uZmlndXJlZCwgd2hpY2ggZG9lc24ndAogIGhhdmUgYW4gYWRkcmVzcy4gIFRoYW5rcyB0byBBZGFtIFNhbXBzb24gZm9yIHNwb3R0aW5nIHRoaXMgKGJ1ZyAjMjIzNDkyMykuCgpZYW5nIFRzZSAoNiBOb3YgMjAwOCkKLSBNZXJnZWQgZXhpc3RpbmcgSVB2NCBhbmQgSVB2NiBDdXJsX2lwMmFkZHIgZnVuY3Rpb25zIGludG8gYSBzaW5nbGUgb25lCiAgd2hpY2ggbm93IGFsc28gdGFrZXMgYSBwcm90b2NvbCBhZGRyZXNzIGZhbWlseSBhcmd1bWVudC4KCi0gQnVnICMyMjMwNTM1IChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMjMwNTM1KSBwb2ludGVkIG91dCBhCiAgcHJvYmxlbSB3aXRoIE1TVkMgNiBtYWtlZmlsZSB0aGF0IGNhdXNlZCBhIGJ1aWxkIGZhaWx1cmUuIEl0IHdhcyBub3RlZCB0aGF0CiAgdGhlIGN1cmxfYWRkcmluZm8ub2JqIHJlZmVyZW5jZSB3YXMgbWlzc2luZy4gSSB0b29rIHRoZSBvcHBvcnR1bml0eSB0byBzb3J0CiAgdGhlIGxpc3QgaW4gd2hpY2ggdGhpcyB3YXMgbWlzc2luZy4gSXNzdWUgc3VibWl0dGVkIGJ5IEpvaG4gV2lsa2luc29uLgoKVmVyc2lvbiA3LjE5LjEgKDUgTm92ZW1iZXIgMjAwOCkKCkRhbmllbCBTdGVuYmVyZyAoNCBOb3YgMjAwOCkKLSBDVVJMSU5GT19GSUxFVElNRSBub3cgd29ya3MgZm9yIGZpbGU6Ly8gdHJhbnNmZXJzIGFzIHdlbGwKCkRhbmllbCBTdGVuYmVyZyAoMyBOb3YgMjAwOCkKLSBCdWcgIzIyMTg0ODAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTIyMTg0ODApIHBvaW50ZWQgb3V0IGEKICBwcm9ibGVtIHdpdGggbXkgQ1VSTElORk9fUFJJTUFSWV9JUCBmaXggZnJvbSBPY3RvYmVyIDd0aCB0aGF0IGNhdXNlZCBhIE5VTEwKICBwb2ludGVyIHJlYWQuIEkgYWxzbyB0b29rIHRoZSBvcHBvcnR1bml0eSB0byBjbGVhbiB1cCB0aGlzIGxvZ2ljIChzdG9yaW5nIG9mCiAgdGhlIGNvbm5lY3Rpb24ncyBJUCBhZGRyZXNzKSBzb21ld2hhdCBhcyB3ZSBoYWQgaXQgc3RvcmVkIGluIHR3byBkaWZmZXJlbnQKICBwbGFjZXMgYW5kIHdheXMgcHJldmlvdXNseSBhbmQgdGhleSBhcmUgbm93IHVuaWZpZWQuCgpZYW5nIFRzZSAoMyBOb3YgMjAwOCkKLSBGaXggdW5kZXJzaXplZCBJUHY2IGFkZHJlc3MgaW50ZXJuYWwgYnVmZmVyLiBJUHY2IGFkZHJlc3Mgc3RyaW5ncyBsb25nZXIKICB0aGFuIDM1IGNoYXJhY3RlcnMgd291bGQgYmUgdHJ1bmNhdGVkLgoKRGFuaWVsIFN0ZW5iZXJnICgyIE5vdiAyMDA4KQotIERhbmllbCBKb2huc29uIHJlcG9ydGVkIGFuZCBmaXhlZDoKCiAgV2hlbiBjLWFyZXMgaXNuJ3QgZW5hYmxlZCwgbGliY3VybCBieSBkZWZhdWx0IGNhbGxzIGdldGFkZHJpbmZvIHdpdGggZmFtaWx5CiAgc2V0IHRvIFBGX1VOU1BFQyB3aGljaCBjYXVzZXMgZ2V0YWRkcmluZm8gdG8gcmV0dXJuIGFsbCBhdmFpbGFibGUgYWRkcmVzc2VzLAogIGJvdGggSVB2NCBhbmQgSVB2Ni4gTGliY3VybCB0aGVuIHRyaWVzIGVhY2ggb25lIHVudGlsIGl0IGNhbiBjb25uZWN0LiBJZiB0aGUKICBuZXQgY29ubmVjdGlvbiBkb2Vzbid0IHN1cHBvcnQgSVB2NiwgbGliY3VybCBjYW4gc3RpbGwgZmFsbCBiYWNrIHRvIElQdjQuCgogIEhvd2V2ZXIsIHNpbmNlIGMtYXJlcyBkb2Vzbid0IHN1cHBvcnQgUEZfVU5TUEVDLCB3aGVuIGl0J3MgdXNlZCBpdCBkZWZhdWx0cwogIHRvIHVzaW5nIGZhbWlseT1QRl9JTkVUNiBhbmQgdGhlcmVmb3JlIG9ubHkgcmV0dXJucyBJUHY2IGFkZHJlc3NlcyB3aGVuIEFBQUEKICByZWNvcmRzIGFyZSBhdmFpbGFibGUsIGV2ZW4gaWYgSVB2NCBhZGRyZXNzZXMgYXJlIGFsc28gYXZhaWxhYmxlLiBUaGUgZWZmZWN0CiAgaXMgdGhhdCBzaW5jZSBteSBJU1AgZG9lc24ndCBkbyBJUHY2LCBsaWJjdXJsIGNhbid0IGNvbm5lY3QgYXQgYWxsIHRvIGEgc2l0ZQogIHRoYXQgaGFzIEFBQUEgcmVjb3Jkcy4gSXQgd2lsbCB3b3JrIGlmIEkgZXhwbGljaXRseSB1c2UgQ1VSTF9JUFJFU09MVkVfVjQgb3IKICAtLWlwdjQgd2l0aCB0aGUgY3VybCB0b29sLiBJIGRpc2NvdmVyZWQgdGhpcyB3aGVuIGN1cmwgd291bGQgZmFpbCB0byBjb25uZWN0CiAgdG8gc2VlbWluZ2x5IHJhbmRvbSBzaXRlcy4gSXQgdHVybnMgb3V0IHRoZXkgd2VyZW4ndCByYW5kb20sIHRoZXkgd2VyZSBzaXRlcwogIHdpdGggQUFBQSByZWNvcmRzLgoKICBTbyBub3cgbGliY3VybCBkZWZhdWx0cyB0byBQRl9JTkVULi4uIHVudGlsIGMtYXJlcyBoYXMgYmVlbiB0b3VnaHQgdG8gb2ZmZXIKICBib3RoLgoKWWFuZyBUc2UgKDMxIE9jdCAyMDA4KQotIFRlc3RzIDU1OCBhbmQgNTU5IGFyZSBzdGFiaWxpemVkLiBUaGVzZSB0d28gdGVzdHMgd2VyZSBpbml0aWFsbHkgaW50cm9kdWNlZAogIHRvIGFpZCBpbiB0aGUgbG9jYXRpb24gb2YgYSBzZWctZmF1bHQgd2hpY2ggd2FzIG9ubHkgdHJpZ2dlcmVkIG9uIG5vbi1kZWJ1ZwogIGJ1aWxkcyBkb25lIHdpdGggdGhlIGljYyA5LjEgSW50ZWwgY29tcGlsZXIuIFRlc3QgNTU4IGRvZXMgbm90IHRyaWdnZXIgdGhlCiAgcHJvYmxlbSwgYnV0IHRlc3QgNTU5IGRvZXMgdHJpZ2dlciBpdC4gQXMgb2YgdG9kYXksIGl0IGlzbid0IHlldCBhYnNvbHV0ZWx5CiAgY2xlYXIgaWYgaXQgaXMgYSBjb21waWxlciBvcHRpbWl6ZXIgaXNzdWUgb3IgYSBtZW1vcnkgY29ycnVwdGlvbiBvbmUuCgpZYW5nIFRzZSAoMzAgT2N0IDIwMDgpCi0gVXNlIG91ciBDdXJsX2FkZHJpbmZvIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRvIGhhbmRsZSBhZGRyZXNzIGluZm8gZGF0YSBldmVuCiAgd2hlbiBhIHN5c3RlbSBhZGRyaW5mbyBzdHJ1Y3QgaXMgYXZhaWxhYmxlLiBQcm92aWRlIGFuZCB1c2UgYSB3cmFwcGVyIGFyb3VuZAogIHN5c3RlbXMgZ2V0YWRkcmluZm8gZnVuY3Rpb24sIEN1cmxfZ2V0YWRkcmluZm9fZXggd2hpY2ggcmV0dXJucyBhIHBvaW50ZXIgdG8KICBhIGxpc3Qgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIEN1cmxfYWRkcmluZm8gc3RydWN0cy4KCiAgQ29uZmlndXJlIHdpbGwgY2hlY2sgZnJlZWFkZHJpbmZvIGFuZCBnZXRhZGRyaW5mbyBmdW5jdGlvbnMgYW5kIGRlZmluZQogIHByZXByb2Nlc3NvciBzeW1ib2xzIEhBVkVfRlJFRUFERFJJTkZPIGFuZCBIQVZFX0dFVEFERFJJTkZPIHdoZW4gYXBwcm9wcmlhdGUuCgpEYW5pZWwgRmFuZHJpY2ggKDI5IE9jdCAyMDA4KQotIEZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIGEgZmV3IGJ5dGVzIG9mIGdhcmJhZ2UgdG8gYmUgc2VudCBhZnRlciBhCiAgY3VybF9lYXN5X3BhdXNlKCkgZHVyaW5nIGEgY2h1bmt5IHVwbG9hZC4gUmVwb3J0ZWQgYnkgU3RldmUgUm9za293c2tpLgoKRGFuaWVsIEZhbmRyaWNoICgyOCBPY3QgMjAwOCkKLSBDaGFuZ2VkIHRoZSAicmVzb2x2ZSIgdGVzdCBwcmVjaGVjayBwcm9ncmFtIHRvIHZlcmlmeSB0aGF0IGFuIElQdjYgc29ja2V0CiAgY2FuIGJlIGNyZWF0ZWQgYmVmb3JlIHJlc29sdmluZyB0aGUgSVB2NiBuYW1lLiAgSW4gdGhlIGNvbnRleHQgb2YgcnVubmluZwogIGEgdGVzdCwgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHJ1biBhbiBJUHY2IHRlc3Qgd2hlbiBhIGhvc3QgaXMgcmVzb2x2YWJsZQogIGJ1dCBJUHY2IGlzbid0IHVzYWJsZS4gIFRoaXMgc2hvdWxkIGZpeCBmYWlsdXJlcyBvZiB0ZXN0IDEwODUgb24gaG9zdHMgd2l0aAogIGxpYnJhcnkgYW5kIEROUyBzdXBwb3J0IGZvciBJUHY2IGJ1dCB3aGVyZSBhY3R1YWwgdXNlIG9mIElQdjYgaGFzIGJlZW4KICBhZG1pbmlzdHJhdGl2ZWx5IGRpc2FibGVkLgoKRGFuaWVsIEZhbmRyaWNoICgyNCBPY3QgMjAwOCkKLSBBZGRlZCBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgemxpYiBhbmQgT3BlblNTTCBvbiBTeW1iaWFuIE9TLgoKRGFuaWVsIEZhbmRyaWNoICgyMSBPY3QgMjAwOCkKLSBGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggU0ZUUCByYW5nZSBzdXBwb3J0IHRvIGZpeCB0ZXN0IGNhc2VzIDYzNCB0aHJvdWdoCiAgNjM3LgoKRGFuaWVsIEZhbmRyaWNoICgxNyBPY3QgMjAwOCkKLSBGaXhlZCBhIGNvbXBpbGUgZXJyb3IgcmVwb3J0ZWQgYnkgQWxiZXJ0IENoaW4gb24gQUlYIGFuZCBJUklYIHdoZW4gdXNpbmcKICBHVExTLgoKRGFuaWVsIFN0ZW5iZXJnICgxNiBPY3QgMjAwOCkKLSBJZ29yIE5vdm9zZWx0c2V2IGFkZGVkIENVUkxPUFRfUFJPWFlVU0VSIGFuZCBDVVJMT1BUX1BST1hZUEFTU1dPUkQgdGhhdCB0aGVuCiAgbWFrZSBDVVJMT1BUX1BST1hZVVNFUlBXRCBzb3J0IG9mIGRlcHJlY2F0ZWQuIFRoZSBwcmltYXJ5IG1vdGl2ZSBmb3IgYWRkaW5nCiAgdGhlc2UgbmV3IG9wdGlvbnMgaXMgdGhhdCB0aGV5IGhhdmUgbm8gcHJvYmxlbXMgd2l0aCB0aGUgY29sb24gc2VwYXJhdG9yCiAgdGhhdCB0aGUgQ1VSTE9QVF9QUk9YWVVTRVJQV0Qgb3B0aW9uIGRvZXMuCgpEYW5pZWwgU3RlbmJlcmcgKDE1IE9jdCAyMDA4KQotIFBhc2NhbCBUZXJqYW4gZmlsZWQgYnVnICMyMTU0NjI3CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTIxNTQ2MjcpIHdoaWNoIHBvaW50ZWQgb3V0IHRoYXQgbGliY3VybAogIHVzZXMgc3RyY2FzZWNtcCgpIGluIG11bHRpcGxlIHBsYWNlcyB3aGVyZSBpdCBjYXVzZXMgZmFpbHVyZXMgd2hlbiB0aGUKICBUdXJraXNoIGxvY2FsZSBpcyB1c2VkLiBUaGlzIGlzIGJlY2F1c2UgJ2knIGFuZCAnSScgaXNuJ3QgdGhlIHNhbWUgbGV0dGVyIHNvCiAgc3RyY2FzZWNtcCgpIG9uIHRob3NlIGxldHRlcnMgYXJlIGRpZmZlcmVudCBpbiBUdXJraXNoIHRoYW4gaW4gRW5nbGlzaCAob3IKICBqdXN0IGFib3V0IGFsbCBvdGhlciBsYW5ndWFnZXMpLiBJIHRodXMgaW50cm9kdWNlZCBhIHRvdGFsbHkgbmV3IGludGVybmFsCiAgZnVuY3Rpb24gaW4gbGliY3VybCAoY2FsbGVkIEN1cmxfcmF3X2VxdWFsKSBmb3IgZG9pbmcgY2FzZSBpbnNlbnRpdmUKICBjb21wYXJpc29ucyBmb3IgZW5nbGlzaC0oYXNjaWk/KSBzdHlsZSBzdHJpbmdzIHRoYXQgdGh1cyB3aWxsIG1ha2UgImZpbGUiCiAgYW5kICJGSUxFIiBtYXRjaCBldmVuIGlmIHRoZSBUdXJraXNoIGxvY2FsZSBpcyBzZWxlY3RlZC4KCkRhbmllbCBGYW5kcmljaCAoMTUgT2N0IDIwMDgpCi0gQSA8cHJlY2hlY2s+IGNvbW1hbmQgaXMgY29uc2lkZXJlZCB0byBoYXZlIGZhaWxlZCBpZiBpdCByZXR1cm5zIGEgbm9uLXplcm8KICByZXR1cm4gY29kZS4gIFRoaXMgd2F5LCBpZiB0aGUgcHJlY2hlY2sgY29tbWFuZCBjYW4ndCBiZSBydW4gYXQgYWxsIGZvcgogIHdoYXRldmVyIHJlYXNvbiwgaXQncyB0cmVhdGVkIGFzIGEgcHJlY2hlY2sgZmFpbHVyZSB3aGljaCBjYXVzZXMgdGhlCiAgdGVzdCB0byBiZSBza2lwcGVkLgoKRGFuaWVsIFN0ZW5iZXJnICgxNSBPY3QgMjAwOCkKLSBKb2huIFdpbGtpbnNvbiBmaWxlZCBidWcgIzIxNTU0OTYKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjE1NTQ5NikgcG9pbnRpbmcgb3V0IGFuIGVycm9yIGNhc2UKICB3aXRob3V0IGEgcHJvcGVyIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuIFdoZW4gYSByZWFkIGNhbGxiYWNrIHJldHVybnMKICBhIHRvbyBsYXJnZSB2YWx1ZSAobGlrZSB3aGVuIHRyeWluZyB0byByZXR1cm4gYSBuZWdhdGl2ZSBudW1iZXIpIGl0IHdvdWxkCiAgdHJpZ2dlciBhbmQgdGhlIGdlbmVyaWMgZXJyb3IgbWVzc2FnZSB0aGVuIG1ha2VzIHRoZSBwcm9wbGVtIHNsaWdodGx5CiAgZGlmZmVyZW50IHRvIHRyYWNrIGRvd24uIEkndmUgYWRkZWQgYW4gZXJyb3IgbWVzc2FnZSBmb3IgdGhpcyBub3cuCgpEYW5pZWwgRmFuZHJpY2ggKDkgT2N0IDIwMDgpCi0gRml4ZWQgdGhlIC0taW50ZXJmYWNlIG9wdGlvbiB0byB3b3JrIHdpdGggSVB2NiBjb25uZWN0aW9ucyBvbiBnbGliYwogIHN5c3RlbXMgc3VwcG9ydGluZyBnZXRpZmFkZHJzKCkuIEFsc28gZml4ZWQgYSBwcm9ibGVtIHdoZXJlIGFuIElQdjYKICBhZGRyZXNzIGNvdWxkIGJlIGNob3NlbiBpbnN0ZWFkIG9mIGFuIElQdjQgb25lIGZvciAtLWludGVyZmFjZSB3aGVuIGl0CiAgaW52b2x2ZWQgYSBuYW1lIGxvb2t1cC4KCkRhbmllbCBGYW5kcmljaCAoOCBPY3QgMjAwOCkKLSBBZGRlZCB0ZXN0cyAxMDgyIHRocm91Z2ggMTA4NSB0byB0ZXN0IHN5bWJvbGljIC0taW50ZXJmYWNlIHBhcmFtZXRlcnMKCi0gQWRkZWQgdGVzdHMgNjMzIHRocm91Z2ggNjM3IHRvIHRlc3QgdGhlIG5ldyBmaWxlIHJhbmdlIHN1cHBvcnQgZm9yIFNGVFAuCiAgQWxsIGJ1dCB0aGUgZmlyc3QgdGVzdCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIG9yIG90aGVyIGZhaWx1cmUgYW5kIHNvCiAgYXJlIGFkZGVkIHRvIERJU0FCTEVELgoKRGFuaWVsIFN0ZW5iZXJnICg4IE9jdCAyMDA4KQotIEpvaG4gV2lsa2luc29uIGZpbGVkIGJ1ZyAjMjE1MjI3MAogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMTUyMjcwKSB3aGljaCBpZGVudGlmaWVkIGFuZCBmaXhlZCBhCiAgQ1VSTElORk9fUkVESVJFQ1RfVVJMIG1lbW9yeSBsZWFrIGFuZCBhbiBhZGRpdGlvbmFsIHdyb25nLWRvaW5nOgoKICBBbnkgc3Vic2VxdWVudCB0cmFuc2ZlciB3aXRoIGEgcmVkaXJlY3QgbGVha3MgbWVtb3J5LCBldmVudHVhbGx5IGNyYXNoaW5nCiAgdGhlIHByb2Nlc3MgcG90ZW50aWFsbHkuCgogIEFueSBzdWJzZXF1ZW50IHRyYW5zZmVyIFdJVEhPVVQgYSByZWRpcmVjdCBjYXVzZXMgdGhlIG1vc3QgcmVjZW50IHJlZGlyZWN0CiAgdGhhdCBESUQgb2NjdXIgb24gc29tZSBwcmV2aW91cyB0cmFuc2ZlciB0byBzdGlsbCBiZSByZXBvcnRlZC4KCi0gSWdvciBOb3Zvc2VsdHNldiBmaWxlZCBidWcgIzIxMTE2MTMKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjExMTYxMykgdGhhdCBldmVudHVhbGx5IGlkZW50aWZpZWQgYQogIGZsYXcgaW4gaG93IHRoZSBtdWx0aV9zb2NrZXQgaW50ZXJmYWNlIGluIHNvbWUgY2FzZXMgbWlzc2VkIHRvIGNhbGwgdGhlCiAgdGltZW91dCBjYWxsYmFjayB3aGVuIGVhc3kgaW50ZXJmYWNlcyBhcmUgcmVtb3ZlZCBhbmQgYWRkZWQgd2l0aGluIHRoZSBzYW1lCiAgbWlsbGlzZWNvbmQuCgotIElnb3IgTm92b3NlbHRzZXYgYnJvdWdodCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlZCB0d28gbmV3IG9wdGlvbnMgdG8KICBjdXJsX2Vhc3lfc2V0b3B0OiBDVVJMT1BUX1VTRVJOQU1FIGFuZCBDVVJMT1BUX1BBU1NXT1JEIHRoYXQgc29ydCBvZgogIGRlcHJlY2F0ZXMgdGhlIGdvb2Qgb2xkIENVUkxPUFRfVVNFUlBXRCBzaW5jZSB0aGV5IGFsbG93IGFwcGxpY2F0aW9ucyB0byBzZXQKICB0aGUgdXNlciBuYW1lIGFuZCBwYXNzd29yZCBpbmRlcGVuZGVudGx5IGFuZCBwZXJoYXBzIG1vcmUgaW1wb3J0YW50bHkgYWxsb3cKICBib3RoIHRvIGNvbnRhaW4gY29sb24ocykgd2hpY2ggQ1VSTE9QVF9VU0VSUFdEIGRvZXNuJ3QgZnVsbHkgc3VwcG9ydC4KCkRhbmllbCBGYW5kcmljaCAoNyBPY3QgMjAwOCkKLSBDaGFuZ2VkIHRoZSBoYW5kbGluZyBvZiByZWFkL3dyaXRlIGVycm9ycyBpbiBDdXJsX3BlcmZvcm0oKSB0byBhbGxvdyBhCiAgYSBmcmVzaCBjb25uZWN0aW9uIHRvIGJlIG1hZGUgaW4gc3VjaCBjYXNlcyBhbmQgdGhlIHJlcXVlc3QgcmV0cmFuc21pdHRlZC4KICBUaGlzIHNob3VsZCBmaXggdGVzdCBjYXNlIDE2MC4gIEFkZGVkIHRlc3QgY2FzZSAxMDc5IGluIGFuIGF0dGVtcHQgdG8KICB0ZXN0IGEgc2ltaWxhciBjb25uZWN0aW9uIGRyb3BwaW5nIHNjZW5hcmlvLCBidXQgYXMgYSByYWNlIGNvbmRpdGlvbiwgaXQncwogIGhhcmQgdG8gdGVzdCByZWxpYWJseS4KCi0gQ3JlYXRlZCB0ZXN0IGNhc2VzIDEwODAgYW5kIDEwODEgdG8gcmVwcm9kdWNlIGEgcHJvYmxlbSBvZgogIENVUkxJTkZPX1JFRElSRUNUX1VSTCBsZWFraW5nIG1lbW9yeSBhbmQgcmV0dXJuaW5nIGluY29ycmVjdCByZXN1bHRzIHdoZW4KICB0d28gVVJMcyBhcmUgcmVxdWVzdGVkLiBSZXBvcnRlZCBieSB2bXBkZW1vIGluIGJ1ZyAjMjE1MjI3MAoKRGFuaWVsIFN0ZW5iZXJnICg3IE9jdCAyMDA4KQotIEZpeGVkIENVUkxJTkZPX1BSSU1BUllfSVA6IFdoZW4gbGliY3VybCBjcmVhdGVkIGEgY29ubmVjdGlvbiB0byBob3N0IEEgdGhlbgogIHRoZSBhcHAgcmUtdXNlZCB0aGUgaGFuZGxlIHRvIGRvIGEgY29ubmVjdGlvbiB0byBob3N0IEIgYW5kIHRoZW4gYWdhaW4KICByZS11c2VkIHRoZSBoYW5kbGUgdG8gaG9zdCBBLCBpdCB3b3VsZCBub3QgdXBkYXRlIHRoZSBpbmZvIHdpdGggaG9zdCBBJ3MgSVAKICBhZGRyZXNzIChkdWUgdG8gdGhlIGNvbm5lY3Rpb24gYmVpbmcgcmUtdXNlZCkgYnV0IGl0IHdvdWxkIGluc3RlYWQgcmVwb3J0CiAgdGhlIGluZm8gZnJvbSBob3N0IEIuCgpZYW5nIFRzZSAoNyBPY3QgMjAwOCkKLSBBZGRlZCAtLWVuYWJsZS1vcHRpbWl6ZSBjb25maWd1cmUgb3B0aW9uIHRvIGVuYWJsZSBhbmQgZGlzYWJsZSBjb21waWxlcgogIG9wdGltaXphdGlvbnMgdG8gYWxsb3cgZGVjb3VwbGVkIHNldHRpbmcgZnJvbSAtLWVuYWJsZS1kZWJ1Zy4KCllhbmcgVHNlICgyIE9jdCAyMDA4KQotIEFkZGVkIC0tZW5hYmxlLXdhcm5pbmdzIGNvbmZpZ3VyZSBvcHRpb24gdG8gZW5hYmxlIGFuZCBkaXNhYmxlIHN0cmljdAogIGNvbXBpbGVyIHdhcm5pbmdzIHRvIGFsbG93IGRlY291cGxlZCBzZXR0aW5nIGZyb20gLS1lbmFibGUtZGVidWcuCgogIHJ1bnRlc3RzLnBsIHdpbGwgbm93IHJ1biB3aXRoIHBpY2t5IGNvbXBpbGVyIHdhcm5pbmdzIGVuYWJsZWQgdW5sZXNzCiAgZXhwbGljaXRseSBkaXNhYmxlZC4KICAKRGFuaWVsIEZhbmRyaWNoICgxIE9jdCAyMDA4KQotICJtYWtlIGNsZWFuIiBub3cgY2xlYW5zIG91dCB0aGUgZG9jcyBhbmQgdGVzdHMgZGlyZWN0b3JpZXMsIHRvby4KCkRhbmllbCBTdGVuYmVyZyAoMzAgU2VwIDIwMDgpCi0gVGhlIGxpYmN1cmwgRlRQIGNvZGUgbm93IHJldHVybnMgQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EIGVycm9yIHdoZW4gU0laRQogIGdldHMgYSA1NTAgcmVzcG9uc2UgYmFjayBmb3IgdGhlIGNhc2VzIHdoZXJlIGEgZG93bmxvYWQgKG9yIE5PQk9EWSkgaXMKICB3YW50ZWQuIEl0IHN0aWxsIGFsbG93cyBhIDU1MCBhcyByZXNwb25zZSBpZiB0aGUgU0laRSBpcyB1c2VkIGFzIHBhcnQgb2YgYW4KICB1cGxvYWQgcHJvY2VzcyAobGlrZSBpZiByZXN1bWluZyBhbiB1cGxvYWQgaXMgcmVxdWVzdGVkIGFuZCB0aGUgZmlsZSBpc24ndAogIHRoZXJlIGJlZm9yZSB0aGUgdXBsb2FkKS4gSSBhbHNvIG1vZGlmaWVkIHRoZSBGVFAgdGVzdCBzZXJ2ZXIgYW5kIGEgZmV3IHRlc3QKICBjYXNlcyBhY2NvcmRpbmdseSB0byBtYXRjaCB0aGlzIG1vZGlmaWVkIGJlaGF2aW9yLgoKRGFuaWVsIFN0ZW5iZXJnICgyOSBTZXAgMjAwOCkKLSBEYW5pZWwgRWdnZXIgcHJvdmlkZWQgYSBwYXRjaCB0aGF0IGFsbG93cyB5b3UgdG8gZGlzYWJsZSBwcm94eSBzdXBwb3J0IGluCiAgbGliY3VybCB0byBzb21ld2hhdCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGJpbmFyeS4gUnVuIGNvbmZpZ3VyZQogIC0tZGlzYWJsZS1wcm94eS4KICAKRGFuaWVsIEZhbmRyaWNoICgyOSBTZXAgMjAwOCkKLSBNb3ZlZCBhbGwgc2lnbmFsLWJhc2VkIG5hbWUgcmVzb2x1dGlvbiB0aW1lb3V0IGhhbmRsaW5nIGludG8gYSBzaW5nbGUgbmV3CiAgQ3VybF9yZXNvbHZfdGltZW91dCBmdW5jdGlvbiB0byByZWR1Y2UgY291cGxpbmcuCgpEYW5pZWwgU3RlbmJlcmcgKDI5IFNlcCAyMDA4KQotIElhbiBMeW5hZ2ggcHJvdmlkZWQgYSBwYXRjaCB0aGF0IG5vdyBtYWtlcyBDVVJMT1BUX1JBTkdFIHdvcmsgZmluZSBmb3IgU0ZUUAogIGRvd25sb2FkcyEKCi0gTWF4aW0gSXZhbm92IGZpbGVkIGJ1ZyByZXBvcnQgIzIxMDc4MDMKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjEwNzgwMykgIm5vIENVUkxJTkZPX1JFRElSRUNUX1VSTCBpbgogIG11bHRpIG1vZGUiIHRvZ2V0aGVyIHdpdGggYSBwYXRjaCB0aGF0IGZpeGVkIHRoZSBwcm9ibGVtLgogIApEYW5pZWwgU3RlbmJlcmcgKDI1IFNlcCAyMDA4KQotIEVtYW51ZWxlIEJvdmlzaW8gc3VibWl0dGVkIGJ1ZyByZXBvcnQgIzIxMjY0MzUuIFdlIGZpeGVkIHRoZSBIVFRQIERpZ2VzdAogIGF1dGggY29kZSB0byBub3QgYmVoYXZlIGJhZGx5IHdoZW4gZ2V0dGluZyBhIGJsYW5rIHJlYWxtIHdpdGgKICByZWFsbT0iIi4gaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjEyNjQzNQoKRGFuaWVsIEZhbmRyaWNoICgyMyBTZXAgMjAwOCkKLSBNYWtlIHN1cmUgbm90IHRvIGRlcmVmZXJlbmNlIHRoZSB3cm9uZyBVcmxTdGF0ZSBwcm90byB1bmlvbiBtZW1iZXIgd2hlbgogIHN3aXRjaGluZyBmcm9tIG9uZSBwcm90b2NvbCB0byBhbm90aGVyIGluIGEgc2luZ2xlIHJlcXVlc3QgKGUuZy4KICByZWRpcmVjdGluZyBmcm9tIEhUVFAgdG8gRlRQIGFzIGluIHRlc3QgMTA1NSkgYnkgcmVzZXR0aW5nCiAgc3RhdGUuZXhwZWN0MTAwaGVhZGVyIGJlZm9yZSBldmVyeSByZXF1ZXN0LgoKRGFuaWVsIFN0ZW5iZXJnICgyMyBTZXAgMjAwOCkKLSBJbnRyb2R1Y2luZyBKYW1pZSBMb2tpZXIncyBmdW5jdGlvbiBmb3IgZGF0ZSB0byBlcG9jaCBjb252ZXJzaW9uIHVzZWQgaW4gdGhlCiAgZGF0ZSBwYXJzZXIgZnVuY3Rpb24uIFRoaXMgbWFrZXMgb3VyIGZ1bmN0aW9uIGxlc3MgZGVwZW5kZW50IG9uIHN5c3RlbS0KICBwcm92aWRlZCBmdW5jdGlvbnMgYW5kIGluc3RlYWQgd2UgZG8gYWxsIHRoZSBtYWdpYyBvdXJzZWx2ZXMuIFdlIGFsc28gbm8KICBsb25nZXIgZGVwZW5kIG9uIHRoZSBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gU3dpdGNoaW5nIHRvIG91ciBvd24gY29udmVydGVyCiAgaGFzIHNvbWUgc2lkZS1lZmZlY3QgYW5kIHRoZXkgYXJlIG5vdGVkIGhlcmUgZm9yIGZ1dHVyZSByZWZlcmVuY2UgKHRha2VuCiAgZnJvbSBhIG1haWwgYnkgbXIgTG9raWVyKToKCiAgdGltZV90IGlzIG5vdCBtZWFzdXJlZCBpbiBzZWNvbmRzIGluIHRoZSBBTlNJIEMgc3RhbmRhcmQgLSBvciBldmVuIGNvdW50ZWQKICB1bmlmb3JtbHkgLSB3ZWlyZCBwbGF0Zm9ybXMgY2FuIHVzZSBvdGhlciBudW1lcmljIHJlcHJlc2VudGF0aW9ucyBvZiBkYXRlcwogIGluIHRpbWVfdCAtIGhlbmNlIHRoZSBkaWZmdGltZSgpIGZ1bmN0aW9uLgoKICBPbiBQT1NJWCB0aW1lX3QgaXMgbWVhc3VyZWQgaW4gVVRDIHNlY29uZHMsIHdoaWNoIG1lYW5zIG5vdCBpbmNsdWRpbmcgbGVhcAogIHNlY29uZHMuICBCdXQgaXQncyBtZW50aW9uZWQgaW4gYSBmZXcgcGxhY2VzIHRoYXQgc29tZSBvbGQgUE9TSVgtaXNoCiAgZW52aXJvbm1lbnRzIGluY2x1ZGUgbGVhcCBzZWNvbmRzIGluIHRoZWlyIHRpbWVfdCBjb3VudHMuLi4KCiAgSSdtIHByZXR0eSBzdXJlIFt0aGUgbmV3IGltcGxlbWVudGF0aW9uIGlzXSBjb3JyZWN0IG9uIGFueXRoaW5nIHRydWx5IFBPU0lYLgogIEFuZCBpdCdzIG9idmlvdXNseSBhIGxvdCBsZXNzIGRlcGVuZGVudCBvbiBwbGF0Zm9ybSBxdWlya3MgYW5kIGNvcm5lciBjYXNlcwogIGluIG1hbnkgd2F5cyB0aGFuIHRoZSBta3RpbWUoKSB2ZXJzaW9uLgoKLSBSb2IgQ3JpdHRlbmRlbiBicm91Z2h0IGEgcGF0Y2ggdG8gImFkZCBzb21lIGxvY2tpbmcgZm9yIHRocmVhZC1zYWZldHkgdG8gTlNTCiAgaW1wbGVtZW50YXRpb24iLgoKRGFuaWVsIFN0ZW5iZXJnICgyMiBTZXAgMjAwOCkKLSBNYWRlIHRoZSBTT0NLUyBjb2RlIHVzZSB0aGUgbmV3IEN1cmxfcmVhZF9wbGFpbigpIGZ1bmN0aW9uIHRvIGZpeCB0aGUgYnVnCiAgTWFya3VzIE1vZWxsZXIgcmVwb3J0ZWQ6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9hcmNoaXZlLTIwMDgtMDkvMDAxNi5odG1sCgotIHJlY3YoKSBlcnJvcnMgb3RoZXIgdGhhbiB0aG9zZSBlcXVhbCB0byBFQUdBSU4gbm93IGNhdXNlIHByb3BlcgogIENVUkxFX1JFQ1ZfRVJST1IgdG8gZ2V0IHJldHVybmVkLiBUaGlzIG1hZGUgdGVzdCBjYXNlIDE2MCBmYWlsIHNvIEkndmUgbm93CiAgZGlzYWJsZWQgaXQgdW50aWwgd2UgY2FuIGZpZ3VyZSBvdXQgYW5vdGhlciB3YXkgdG8gZXhlcmNpc2UgdGhhdCBsb2dpYy4KCi0gTWljaGFlbCBHb2ZmaW91bCBmaWxlZCBidWcgcmVwb3J0ICMyMTA3Mzc3ICJQcm9ibGVtIHdpdGggbXVsdGkgKyBHbnVUTFMgKwogIHByb3h5IiAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjEwNzM3NykgdGhhdCBzaG93ZWQgaG93IGEgbXVsdGkKICBpbnRlcmZhY2UgdXNpbmcgcHJvZ3JhbSBkaWRuJ3Qgd29yayB3aGVuIGJ1aWx0IHdpdGggR251VExTIGFuZCBhIENPTk5FQ1QKICByZXF1ZXN0IHdhcyBkb25lIG92ZXIgYSBwcm94eSAoYmFzaWNhbGx5IHRlc3QgNTAyIG92ZXIgYSBwcm94eSB0byBhIEhUVFBTCiAgc2l0ZSkuIEl0IHR1cm5lZCBvdXQgdGhlIHNzbCBjb25uZWN0IGZ1bmN0aW9uIHdvdWxkIGdldCBjYWxsZWQgdHdpY2Ugd2hpY2gKICBjYXVzZWQgdGhlIHNlY29uZCBjYWxsIHRvIGZhaWwuCgpEYW5pZWwgRmFuZHJpY2ggKDIyIFNlcCAyMDA4KQotIEZpeGVkIHRlc3QgNTM5IHRvIGhhbmRsZSBhbiBvdXQgb2YgbWVtb3J5IGNvbmRpdGlvbiB0aGF0IHNob3dzIHVwIG5vdwogIHRoYXQgbWVtZGVidWcuaCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVzdCBwcm9ncmFtcy4KCllhbmcgVHNlICgyMCBTZXAgMjAwOCkKLSBGaXggcmVncmVzc2lvbiBpbiBjb25maWd1cmUgc2NyaXB0IHdoaWNoIGFmZmVjdGVkIE9wZW5TU0wgYnVpbGRzIG9uIE1TWVMuCgpZYW5nIFRzZSAoMTkgU2VwIDIwMDgpCi0gY29uZmlndXJlIHNjcmlwdCBub3cgY2hlY2tzIGF2YWlsYWJpbGl0eSBvZiB0aGUgYWxhcm0oKSBmdW5jdGlvbi4KCkRhbmllbCBGYW5kcmljaCAoMTggU2VwIDIwMDgpCi0gRG9uJ3QgYm90aGVyIHRvIGluc3RhbGwgYSBTSUdBTFJNIGhhbmRsZXIgdW5sZXNzIGFsYXJtKCkgaXMgYXZhaWxhYmxlLgogIEFsc28sIGxlYXZlIHRoZSBleGlzdGluZyBTSUdBTFJNIGhhbmRsZXIgYWxvbmUgaWYgdGhlIHRpbWVvdXQgaXMgdG9vIHNtYWxsCiAgdG8gaGFuZGxlLgoKRGFuaWVsIEZhbmRyaWNoICgxNyBTZXAgMjAwOCkKLSBSZW1vdmVkIHJlZmVyZW5jZSB0byBjdXJsLWNhLWJ1bmRsZS5jcnQgaW4gdGhlIGhvc3QgdmVyaWZpY2F0aW9uIGZhaWx1cmUKICBlcnJvciBtZXNzYWdlLgoKWWFuZyBUc2UgKDE3IFNlcCAyMDA4KQotIEltcHJvdmUgY29uZmlndXJlIGRldGVjdGlvbiBvZiBnZXRob3N0bmFtZSgpLCBsb2NhbHRpbWVfcigpLCBzdHJzdHIoKSwKICBnZXRzZXJ2Ynlwb3J0X3IoKSwgZ2V0aG9zdGJ5YWRkcl9yKCkgYW5kIGdldGhvc3RieW5hbWVfcigpLgoKWWFuZyBUc2UgKDE0IFNlcCAyMDA4KQotIEltcHJvdmUgY29uZmlndXJlIGRldGVjdGlvbiBvZiBzdHJjYXNlY21wKCksIHN0cmNhc2VzdHIoKSwgc3RyY21waSgpLAogIHN0cmljbXAoKSwgc3RybGNhdCgpLCBzdHJuY2FzZWNtcCgpLCBzdHJuY21waSgpIGFuZCBzdHJuaWNtcCgpLgoKWWFuZyBUc2UgKDEzIFNlcCAyMDA4KQotIERpc2FibGUgdHJhY2tpbmcgb2YgZmRvcGVuKCkgY2FsbHMgaW4gdGhlIGxvdy1sZXZlbCBtZW1vcnkgbGVhayB0cmFja2luZwogIGNvZGUgd2hlbiBmZG9wZW4oKSBpcyBub3QgYXZhaWxhYmxlLCB0byBhdm9pZCBjb21waWxlciBlcnJvci4KCllhbmcgVHNlICgxMiBTZXAgMjAwOCkKLSBGdXJ0aGVyIGFkanVzdCBkZXRlY3Rpb24gb2Ygc3RyZXJyb3JfcigpIGluIHRoZSBjb25maWd1cmUgcHJvY2VzcywgYW5kCiAgZW5zdXJlIHRoYXQgZXJybm8gaXMgbm90IG1vZGlmaWVkIGluc2lkZSBDdXJsX3N0cmVycm9yKCkuCgpZYW5nIFRzZSAoMTAgU2VwIDIwMDgpCi0gSW1wcm92ZSBkZXRlY3Rpb24gb2YgZ210aW1lX3IoKSwgc3RydG9sbCgpLCBzaWdhY3Rpb24oKSwgc3RydG9rX3IoKSwKICBzdHJkdXAoKSBhbmQgZnRydW5jYXRlKCkgaW4gdGhlIGNvbmZpZ3VyZSBwcm9jZXNzLgoKRGFuaWVsIEZhbmRyaWNoICg5IFNlcCAyMDA4KQotIE1pa2UgUmV2aSBkaXNjb3ZlcmVkIHNvbWUgc3dhcHBlZCBzcGVlZCBzd2l0Y2hlcyBkb2N1bWVudGVkIGluIHRoZSBjdXJsIG1hbgogIHBhZ2UuCgotIENoZWNrZWQgaW4gc29tZSBkb2N1bWVudGF0aW9uIGFuZCBjb2RlIGltcHJvdmVtZW50cyBhbmQgZml4ZXMgdGhhdCBJCiAgZGlzY292ZXJlZCBpbiB0aGUgRnJlZUJTRCBwb3J0cyBzeXN0ZW0uCgpEYW5pZWwgU3RlbmJlcmcgKDggU2VwIDIwMDgpCi0gRG1pdHJ5IEt1cm9jaGtpbiBwYXRjaGVkIGEgcHJvYmxlbTogSSBoYXZlIGZvdW5kIGJ1ZyBpbiBwaXBlbGluaW5nIHRocm91Z2gKICBwcm94eS4gSSBoYXZlIGEgdHJhbnNwYXJlbnQgcHJveHkuIFdoZW4gcnVubmluZyB3aXRoIGh0dHBfcHJveHkgZW52aXJvbm1lbnQKICB2YXJpYWJsZSBub3Qgc2V0IG15IHRlc3QgY29tcGxldGVzIGZpbmUgKGl0IGdvZXMgdGhyb3VnaCB0cmFuc3BhcmVudAogIHByb3h5KS4gV2hlbiBJIHNldCBodHRwX3Byb3h5IHZhcmlhYmxlIG15IHRlc3QgaGFuZ3MgYWZ0ZXIgdGhlIGZpcnN0CiAgZG93bmxvYWRlZCBpcyBjb21wbGV0ZS4gTG9va3MgbGlrZSB0aGUgc2Vjb25kIGhhbmRsZSBuZXZlciBnZXRzIG91dCBmcm9tCiAgV0FJVERPIHN0YXRlLgoKICBUaGUgZml4OiBJdCBtYWtlcyBjaGVja1BlbmRQaXBlbGluZSBtb3ZlIDEgaGFuZGxlciBmcm9tIHBlbmQgcGlwZSB0byBzZW5kCiAgcGlwZSBpZiBwaXBlbGluaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyIGJ1dCB0aGVyZSBhcmUgbm8gaGFuZGxlcyBpbgogIHNlbmQgYW5kIHJlY3YgcGlwZXMuCgotIFN0ZWZhbiBLcmF1c2UgcG9pbnRlZCBvdXQgdGhhdCBsaWJjdXJsIHdvdWxkIHdyb25nbHkgc2VuZCBhd2F5IGNvb2tpZXMgdG8KICBzaXRlcyBpbiBjYXNlcyB3aGVyZSB0aGUgY29va2llIGNsZWFybHkgaGFzIGEgdmVyeSBvbGQgZXhwaXJ5IGRhdGUuIFRoZQogIGNvbmRpdGlvbiB3YXMgc2ltcGx5IHRoYXQgbGliY3VybCdzIGRhdGUgcGFyc2VyIHdvdWxkIGZhaWwgdG8gY29udmVydCB0aGUKICBkYXRlIGFuZCBpdCB3b3VsZCB0aGVuIGNvdW50IGFzIGEgKHRpbWVkLWJhc2VkKSBtYXRjaC4gU3RhcnRpbmcgbm93LCBhCiAgbWlzc2VkIGRhdGUgZHVlIHRvIGFuIHVuc3VwcG9ydGVkIGRhdGUgZm9ybWF0IG9yIGRhdGUgcmFuZ2Ugd2lsbCBub3cgY2F1c2UKICB0aGUgY29va2llIHRvIG5vdCBtYXRjaC4KCkRhbmllbCBGYW5kcmljaCAoNSBTZXAgMjAwOCkKLSBJbXByb3ZlZCB0aGUgbG9naWMgdGhhdCBkZWNpZGVzIHdoZXRoZXIgdG8gdXNlIEhUVFAgMS4xIGZlYXR1cmVzIG9yIG5vdCBpbiBhCiAgcmVxdWVzdC4gIFNldHRpbmcgYSBzcGVjaWZpYyB2ZXJzaW9uIHdpdGggQ1VSTE9QVF9IVFRQX1ZFUlNJT04gb3ZlcnJpZGVzCiAgYWxsIG90aGVyIGNoZWNrcywgYnV0IG90aGVyd2lzZSwgYSAxLjAgcmVxdWVzdCB3aWxsIGJlIG1hZGUgaWYgdGhlIHNlcnZlcgogIGlzIGtub3duIHRvIHN1cHBvcnQgb25seSAxLjAgYmVjYXVzZSBpdCBwcmV2aW91c2x5IHJlc3BvbmRlZCBzbyBhbmQgdGhlCiAgY29ubmVjdGlvbiB3YXMga2VwdCBhbGl2ZSwgb3IgYSByZXNwb25zZSB0byBhIHByZXZpb3VzIHJlcXVlc3Qgb24gdGhpcyBoYW5kbGUKICBjYW1lIGJhY2sgYXMgMS4wLiBUaGUgbGF0dGVyIGNvdWxkIHRha2UgcGxhY2UgaW4gY2FzZXMgbGlrZSByZWRpcmVjdGlvbiBvcgogIGF1dGhlbnRpY2F0aW9uIHdoZXJlIHNldmVyYWwgcmVxdWVzdHMgaGF2ZSB0byBiZSBtYWRlIGJlZm9yZSB0aGUgb3BlcmF0aW9uCiAgaXMgY29tcGxldGUuICBJZiBhbnkgb25lIG9mIHRoZSBzZXJ2ZXJzIGluIGEgcmVkaXJlY3Rpb24gY2hhaW4gc3VwcG9ydHMgb25seQogIDEuMCwgdGhlbiByZW1haW5pbmcgcmVxdWVzdHMgd2lsbCBiZSBzZW50IGluIDEuMCBtb2RlLgoKLSBEZXRlY3QgY2FzZXMgd2hlcmUgYW4gdXBsb2FkIG11c3QgYmUgc2VudCBjaHVua2VkIGFuZCB0aGUgc2VydmVyIHN1cHBvcnRzCiAgb25seSBIVFRQIDEuMCBhbmQgcmV0dXJuIENVUkxFX1VQTE9BRF9GQUlMRUQuCgpEYW5pZWwgU3RlbmJlcmcgKDUgU2VwIDIwMDgpCi0gTWFydGluIERyYXNhciBwcm92aWRlZCB0aGUgQ1VSTE9QVF9QT1NUUkVESVIgcGF0Y2guIEl0IHJlbmFtZXMKICBDVVJMT1BUX1BPU1QzMDEgKGJ1dCBhZGRzIGEgZGVmaW5lIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgeW91IHdobwogIGRvbid0IGRlZmluZSBDVVJMX05PX09MRElFUykuIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gbm93IGFsc28gY2hhbmdlIHRoZQogIGxpYmN1cmwgYmVoYXZpb3IgZm9yIGEgSFRUUCByZXNwb25zZSAzMDIgYWZ0ZXIgYSBQT1NUIHRvIG5vdCB1c2UgR0VUIGluIHRoZQogIHN1YnNlcXVlbnQgcmVxdWVzdCAod2hlbiBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OIGlzIGVuYWJsZWQpLiBJIGVkaXRlZCB0aGUKICBwYXRjaCBzb21ld2hhdCBiZWZvcmUgY29tbWl0LiBUaGUgY3VybCB0b29sIGdvdCBhIG1hdGNoaW5nIC0tcG9zdDMwMgogIG9wdGlvbi4gVGVzdCBjYXNlIDEwNzYgd2FzIGFkZGVkIHRvIHZlcmlmeSB0aGlzLgoKLSBJbnRyb2R1Y2luZyBDVVJMT1BUX0NFUlRJTkZPIGFuZCB0aGUgY29ycmVzcG9uZGluZyBDVVJMSU5GT19DRVJUSU5GTy4gQnkKICBlbmFibGluZyB0aGlzIGZlYXR1cmUgd2l0aCBDVVJMT1BUX0NFUlRJTkZPIGZvciBhIHJlcXVlc3QgdXNpbmcgU1NMIChIVFRQUwogIG9yIEZUUFMpLCBsaWJjdXJsIHdpbGwgZ2F0aGVyIGxvdHMgb2Ygc2VydmVyIGNlcnRpZmljYXRlIGluZm8gYW5kIHRoYXQgaW5mbwogIGNhbiB0aGVuIGdldCBleHRyYWN0ZWQgYnkgYSBjbGllbnQgYWZ0ZXIgdGhlIHJlcXVlc3QgaGFzIGNvbXBsZXRlZCB3aXRoCiAgY3VybF9lYXN5X2dldGluZm8oKSdzIENVUkxJTkZPX0NFUlRJTkZPIG9wdGlvbi4gTGludXMgTmllbHNlbiBGZWx0emluZwogIGhlbHBlZCBtZSB0ZXN0IGFuZCBzbW9vdGhlbiBvdXQgdGhpcyBmZWF0dXJlLgoKICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGZlYXR1cmUgY3VycmVudGx5IG9ubHkgd29ya3Mgd2l0aCBsaWJjdXJsIGJ1aWx0IHRvIHVzZQogIE9wZW5TU0wuCgogIFRoaXMgZmVhdHVyZSB3YXMgc3BvbnNvcmVkIGJ5IG5ldHdvcmtpbmc0YWxsLmNvbSAtIHRoYW5rcyEKCi0gRG1pdHJpeSBTZXJnZXlldiBwb2ludGVkIG91dCB0aGF0IGN1cmxfZWFzeV9wYXVzZSgpIGRpZG4ndCB1bnBhdXNlIHByb3Blcmx5CiAgZHVyaW5nIGNlcnRhaW4gY29uZGl0aW9ucy4gSSBhbHNvIGNoYW5nZWQgdGhpcyBjb2RlIHRvIHVzZSByZWFsbG9jKCkgYmFzZWQKICBvbiBEYW5pZWwgRmFuZHJpY2gncyBzdWdnZXN0aW9uLgoKR3VlbnRlciBLbmF1ZiAoNCBTZXAgMjAwOCkKLSBNaW5nVzMyIG5vbi1jb25maWd1cmUgYnVpbGRzIGFyZSBub3cgbGFyZ2VmaWxlIGZlYXR1cmUgZW5hYmxlZCBieSBkZWZhdWx0LgogIE5ldFdhcmUgTElCQyBidWlsZHMgYXJlIGFsc28gbm93IGxhcmdlZmlsZSBmZWF0dXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KCllhbmcgVHNlICg0IFNlcCAyMDA4KQotIFNldmVyYWwgZml4ZXMgcmVsYXRlZCB3aXRoIHByaW50IGZvcm1hdHRpbmcgc3RyaW5nIGRpcmVjdGl2ZXMuCgpEYW5pZWwgRmFuZHJpY2ggKDMgU2VwIDIwMDgpCi0gU2VhcmNoIGZvciB0aGUgRnJlZUJTRCBDQSBjZXJ0IGZpbGUgL3Vzci9sb2NhbC9zaGFyZS9jZXJ0cy9jYS1yb290LmNydAoKRGFuaWVsIEZhbmRyaWNoICgyIFNlcCAyMDA4KQotIEZpeGVkIGFuIG91dCBvZiBtZW1vcnkgcHJvYmxlbSB0aGF0IGNhdXNlZCB0b3J0dXJlIHRlc3QgZmFpbHVyZXMgaW4gdGVzdHMKICA3MDYgYW5kIDcwNy4KCkRhbmllbCBTdGVuYmVyZyAoMiBTZXAgMjAwOCkKLSBLZWl0aCBNb2sgYWRkZWQgc3VwcG9ydGVkX3Byb3RvY29scyBhbmQgc3VwcG9ydGVkX2ZlYXR1cmVzIHRvIHRoZSBwa2ctY29uZmlnCiAgZmlsZSBmb3IgbGliY3VybCwgYW5kIHdoaWxlIGRvaW5nIHRoYXQgZml4IGhlIHVuaWZpZWQgd2l0aCBjdXJsLWNvbmZpZy5pbgogIGhvdyB0aGUgc3VwcG9ydGVkIHByb3RvY29scyBhbmQgZmVhdHVyZXMgYXJlIGV4dHJhY3RlZCBhbmQgdXNlZCwgc28gYm90aCB0aG9zZQogIHRvb2xzIHNob3VsZCBub3cgYWx3YXlzIGJlIHN5bmNlZC4KClZlcnNpb24gNy4xOS4wICgxIFNlcHRlbWJlciAyMDA4KQoKRGFuaWVsIEZhbmRyaWNoICgyOSBBdWcgMjAwOCkKLSBBZGRlZCB0ZXN0cyAxMDcxIHRocm91Z2ggMTA3NCB0byB0ZXN0IGF1dG9tYXRpYyBkb3duZ3JhZGluZyBmcm9tIEhUVFAgMS4xCiAgdG8gSFRUUCAxLjAgdXBvbiByZWNlaXZpbmcgYSByZXNwb25zZSBmcm9tIHRoZSBIVFRQIHNlcnZlci4gIFRlc3RzIDEwNzIKICBhbmQgMTA3MyBhcmUgc2ltaWxhciB0byB0ZXN0IDEwNjkgaW4gdGhhdCB0aGV5IGludm9sdmUgdGhlIGltcG9zc2libGUKICBzY2VuYXJpbyBvZiBzZW5kaW5nIGNodW5rZWQgZGF0YSB0byBhIEhUVFAgMS4wIHNlcnZlci4gIEFsbCB0aGVzZSBmYWlsCiAgYW5kIGFyZSBhZGRlZCB0byBESVNBQkxFRC4KCi0gQWRkZWQgdGVzdCAxMDc1IHRvIHRlc3QgLS1hbnlhdXRoIHdpdGggQmFzaWMgYXV0aGVudGljYXRpb24uCgpEYW5pZWwgU3RlbmJlcmcgKDI5IEF1ZyAyMDA4KQotIFdoZW4gbGliY3VybCB3YXMgZG9pbmcgYSBIVFRQIFBPU1QgYW5kIHRoZSBzZXJ2ZXIgd291bGQgcmVzcG9uZCB3aXRoCiAgIkNvbm5lY3Rpb246IGNsb3NlIiBhbmQgYWN0dWFsbHkgY2xvc2UgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhlCiAgcmVzcG9uc2UtYm9keSwgbGliY3VybCBjb3VsZCBzdGlsbCBoYXZlIG91dHN0YW5kaW5nIGRhdGEgdG8gc2VuZCBhbmQgaXQKICB3b3VsZCBub3QgcHJvcGVybHkgbm90aWNlIHRoaXMgYW5kIHN0b3Agc2VuZGluZy4gVGhpcyBjYXVzZWQgd2VpcmRuZXNzIGFuZAogIHNhZCBmYWNlcy4gaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjA4MDIyMgoKICBOb3RlIHRoYXQgdGhlcmUgYXJlIHN0aWxsIHJlYXNvbnMgdG8gY29uc2lkZXIgbGliY3VybCdzIGJlaGF2aW9yIHdoZW4KICBnZXR0aW5nIGEgPj0gNDAwIHJlc3BvbnNlIGNvZGUgd2hpbGUgc2VuZGluZyBkYXRhLCBhcyBDcmFpZyBQZXJyYXMnIG5vdGUKICAiaHR0cCB1cGxvYWQ6IGhvdyB0byBzdG9wIG9uIGVycm9yIiBzcGVjaWZpZXM6CiAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2FyY2hpdmUtMjAwOC0wOC8wMTM4Lmh0bWwKCkRhbmllbCBTdGVuYmVyZyAoMjggQXVnIDIwMDgpCi0gRGVuZ21pbndlbiByZXBvcnRlZCB0aGF0IGxpYmN1cmwgd291bGQgbG9jayBhIChjb29raWUpIHNoYXJlIHR3aWNlICh3aXRob3V0CiAgYW4gdW5sb2NrIGluIGJldHdlZW4pIGZvciBhIGNlcnRhaW4gY2FzZSBhbmQgdGhhdCBpbiBmYWN0IHdvcmtzIHdoZW4gdXNpbmcKICByZWd1bGFyIHdpbmRvd3MgbXV0ZXhlcyBidXQgbm90IHdpdGggcHRocmVhZHMnISBMb2NrcyBzaG91bGQgb2YgY291cnNlIG5vdAogIGdldCBsb2NrZWQgYWdhaW4gc28gdGhpcyBpcyBub3cgZml4ZWQuCiAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA4LTA4LzA0MjIuaHRtbAoKLSBJJ20gYWJhbmRvbmluZyB0aGUgc3lzdGVtIHdpdGggdGhlIHdlYiBzaXRlIG1pcnJvcnMgKGJ1dCBrZWVwaW5nIGRvd25sb2FkCiAgZmlsZXMgYmluZyBtaXJyb3JlZCkgYW5kIHRodXMgSSd2ZSBjaGFuZ2VkIHRoZSBVUkwgaW4gdGhlIGNvb2tpZWphciBoZWFkZXIKICB0byBubyBsb25nZXIgdXNlIGN1cmxtLmhheHguc2UgYnV0IGluc3RlYWQgdXNlIHRoZSBtYWluIHNpdGUgY3VybC5oYXh4LnNlCgpEYW5pZWwgRmFuZHJpY2ggKDI3IEF1ZyAyMDA4KQotIEZpeGVkIHRlc3QgY2FzZSAxMDY1IGJ5IGNoYW5naW5nIHRoZSBoYW5kbGluZyBvZiBDVVJMT1BUX1VQTE9BRCB0byBzZXQKICB0aGUgSFRUUCBtZXRob2QgdG8gR0VUIChvciBIRUFEKSB3aGVuIGdpdmVuIGEgdmFsdWUgb2YgMC4KCi0gQWRkZWQgdGVzdCBjYXNlcyAxMDY4IGFuZCAxMDY5IHRvIHRlc3QgYSBzaW1wbGUgSFRUUCBQVVQgZnJvbSBzdGRpbi4gIFRlc3QKICBjYXNlIDEwNjkgZmFpbHMgaW4gYSBzaW1pbGFyIG1hbm5lciB0byB0ZXN0IDEwNjUgc28gaXMgYWRkZWQgdG8gRElTQUJMRUQuCgpZYW5nIFRzZSAoMjcgQXVnIDIwMDgpCi0gRml4IGdlbmVyYXRpb24gb2YgTVMgVkM2IC5kc3AgZmlsZSB0byBtYWtlIGl0IHN1cHBvcnQgY29tcGlsYXRpb24gb2YgZWl0aGVyCiAgZHluYW1pYyAoRExMKSBvciBzdGF0aWMgKExJQikgbGliY3VybCBsaWJyYXJpZXMgaW4gZGVidWcgYW5kIHJlbGVhc2UgbW9kZXMuCgpEYW5pZWwgRmFuZHJpY2ggKDI2IEF1ZyAyMDA4KQotIEZpeGVkIG91dCBvZiBtZW1vcnkgcHJvYmxlbXMgdGhhdCBjYXVzZWQgdG9ydHVyZSB0ZXN0IGZhaWx1cmVzIGluIHRlc3RzCiAgMTAyMSBhbmQgMTA2Ny4KCllhbmcgVHNlICgyNiBBdWcgMjAwOCkKLSBBZGRlZCBjaGVjayBhbmQgc3ltYm9sIGRlZmluaXRpb24gZm9yIFdJTjMyIGZpbGUgQVBJIHVzYWdlIGluIGNvbmZpZ3VyZSwKICBzdXBwb3J0aW5nIGNvbmZpZ3VyZSdzIC0tZGlzYWJsZS1sYXJnZWZpbGUgb3B0aW9uIGZvciBXSU4zMiB0YXJnZXRzIGFsc28uCgotIE5vbi1jb25maWd1cmUgc3lzdGVtcyB3aGljaCBkbyBub3QgdXNlIGNvbmZpZy13aW4zMi5oIGNvbmZpZ3VyYXRpb24gZmlsZSwKICBhbmQgd2FudCB0byB1c2UgdGhlIFdJTjMyIGZpbGUgQVBJLCBtdXN0IGRlZmluZSBVU0VfV0lOMzJfTEFSR0VfRklMRVMgb3IKICBVU0VfV0lOMzJfU01BTExfRklMRVMgYXMgYXBwcm9wcmlhdGUgaW4gdGhlaXIgb3duIGNvbmZpZ3VyYXRpb24gZmlsZXMuCgpEYW5pZWwgU3RlbmJlcmcgKDIzIEF1ZyAyMDA4KQotIFJ1bm5pbmcgJ21ha2UgY2EtZmlyZWZveCcgaW4gdGhlIHJvb3QgYnVpbGQgZGlyIHdpbGwgbm93IHJ1biB0aGUgbmV3CiAgZmlyZWZveC1kYjJwZW0uc2ggY29udmVyc2lvbiBzY3JpcHQgdGhhdCBjb252ZXJ0cyBhIGxvY2FsIEZpcmVmb3ggZGIgb2YgY2EKICBjZXJ0cyBpbnRvIFBFTSBmb3JtYXQsIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCBhIE9wZW5TU0wgb3IgR251VExTIGJ1aWx0CiAgbGliY3VybC4KCi0gQ29uc3RhbnRpbmUgU2FwdW50emFraXMgZml4ZWQgYSBidWcgd2hlbiBkb2luZyBwcm94eSBDT05ORUNUIHdpdGggdGhlIG11bHRpCiAgaW50ZXJmYWNlLCBhbmQgdGhlIHByb3h5IHdvdWxkIHNlbmQgQ29ubmVjdGlvbjogY2xvc2UgZHVyaW5nIHRoZQogIGF1dGhlbnRpY2F0aW9uIHBoYXNlLiAgaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjA2OTA0NwoKRGFuaWVsIEZhbmRyaWNoICgyMiBBdWcgMjAwOCkKLSBGaXhlZCBhIHByb2JsZW0gd2hlbiAtLWR1bXAtaGVhZGVyIC0gd2FzIGdpdmVuIHdpdGggbW9yZSB0aGFuIG9uZSBVUkwsCiAgd2hpY2ggY2F1c2VkIGFuIGVycm9yIHdoZW4gdGhlIHNlY29uZCBoZWFkZXIgd2FzIGR1bXBlZCBkdWUgdG8gc3Rkb3V0CiAgYmVpbmcgY2xvc2VkLiAgQWRkZWQgdGVzdCBjYXNlIDEwNjYgdG8gdmVyaWZ5LiAgQWxzbyBmaXhlZCBhIHBvdGVudGlhbAogIHByb2JsZW0gd2hlcmUgYSBjbG9zZWQgZmlsZSBkZXNjcmlwdG9yIG1pZ2h0IGJlIHVzZWQgZm9yIGFuIHVwbG9hZAogIHdoZW4gbW9yZSB0aGFuIG9uZSBVUkwgaXMgZ2l2ZW4uCgpZYW5nIFRzZSAoMjIgQXVnIDIwMDgpCi0gSW1wcm92ZWQgbGliY3VybCdzIGludGVybmFsIGN1cmxfbSpwcmludGYoKSBmdW5jdGlvbnMgaW50ZWdyYWwgZGF0YSB0eXBlCiAgc2l6ZSBhbmQgc2lnbmVkbmVzcyBoYW5kbGluZy4KCi0gSW50ZXJuYWwgYWRqdXN0bWVudHMgdG8gYmV0dGVyIHNlbGVjdC9kaWZmZXJlbnRpYXRlIHdoZW4gbGFyZ2Uvc21hbGwgZmlsZQogIHN1cHBvcnQgaXMgcHJvdmlkZWQgdXNpbmcgV0lOMzIgZnVuY3Rpb25zIGRpcmVjdGx5LgoKRGFuaWVsIEZhbmRyaWNoICgyMCBBdWcgMjAwOCkKLSBBZGRlZCBhbiBlZGl0ZWQgdmVyc2lvbiBvZiBWaW5jZW50IExlIE5vcm1hbmQncyBkb2N1bWVudGF0aW9uIG9mIFNGVFAgcXVvdGUKICBjb21tYW5kcyB0byB0aGUgbWFuIHBhZ2VzLgoKRGFuaWVsIFN0ZW5iZXJnICgyMCBBdWcgMjAwOCkKLSBQaGlsIFBlbGxvdWNob3VkIHBvaW50ZWQgb3V0IHRoYXQgdGhlIHdpbmRvd3MgdmVyc2lvbiBvZiBsaWJjdXJsIGhhZCBhCiAgbWVtb3J5IGxlYWsgYmVjYXVzZSBpdCBuZXZlciBjYWxsZWQgdGhlIE9wZW5TU0wgZnVuY3Rpb24KICBDUllQVE9fY2xlYW51cF9hbGxfZXhfZGF0YSgpIGFzIGl0IHdhcyBzdXBwb3NlZCB0by4gVGhpcyB3YXMgYmVjYXVzZSBvZiBhCiAgbWlzc2luZyBkZWZpbmUgaW4gY29uZmlnLXdpbjMyLmghCgpHaXNsZSBWYW5lbSAoMTggQXVnIDIwMDgpCi0gVXBkYXRlZCBsaWIvTWFrZWZpbGUuV2F0Y29tIHdpdGggdGhlIG9wdGlvbiB0byB1c2UgYy1hcmVzIChVU0VfQVJFUz0xKS4KCllhbmcgVHNlICgxOCBBdWcgMjAwOCkKLSBBZGRlZCB0ZXN0IGNhc2UgNTU3IHRvIHZlcmlmeSBsaWJjdXJsJ3MgaW50ZXJuYWwgY3VybF9tKnByaW50ZigpIGZ1bmN0aW9ucwogIGZvcm1hdHRpbmcgZnVuY3Rpb25hbGl0eSB3aGVuIGhhbmRsaW5nIHNpZ25lZCBhbmQgdW5zaWduZWQgbG9uZ3MsIGFzIHdlbGwgYXMKICBvdXIgY3VybF9vZmZfdCBkYXRhIHR5cGUuCgpZYW5nIFRzZSAoMTcgQXVnIDIwMDgpCi0gT3BlblNTbCBlbmFibGVkIE5ldFdhcmUgYnVpbGRzIGFyZSBjaGFuZ2VkIHRvIHVzZSB0aGUgJ29wZW5zc2wnIHN1YmRpcmVjdG9yeQogIHdoZW4gaW5jbHVkaW5nIHRoZSBPcGVuU1NMIGhlYWRlciBmaWxlcy4gVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgc2V0dGluZywgdGhpcwogIHByZXZlbnRzIHRoZSB1bmRlc2lyZWQgaW5jbHVzaW9uIG9mIGhlYWRlciBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhvc2UKICBvZiBPcGVuU1NMIGJ1dCB3aGljaCBkbyBub3QgYmVsb25nIHRvIHRoZSBPcGVuU1NMIHBhY2thZ2UuIFRoZSB2aXNpYmxlIGNoYW5nZQogIGZyb20gcHJldmlvdXNseSByZWxlYXNlZCBsaWJjdXJsIHZlcnNpb25zIGlzIHRoYXQgbm93IE9wZW5TU2wgZW5hYmxlZCBOZXRXYXJlCiAgYnVpbGRzIGFsc28gZGVmaW5lIFVTRV9PUEVOU1NMIGluIGNvbmZpZyBmaWxlcywgYW5kIHRoYXQgT3BlblNTTCBoZWFkZXIgZmlsZXMKICBtdXN0IGJlIGxvY2F0ZWQgaW4gYSBzdWJkaXJlY3RvcnkgbmFtZWQgJ29wZW5zc2wnLgoKWWFuZyBUc2UgKDE2IEF1ZyAyMDA4KQotIExpYnJhcnkgaW50ZXJuYWwgb25seSBDIHByZXByb2Nlc3NvciBtYWNyb3MgRk9STUFUX09GRl9UIGFuZCBGT1JNQVRfT0ZGX1RVCiAgcmVtYWluIGluIHVzZSBhcyBpbnRlcm5hbCBjdXJsX29mZl90IHByaW50IGZvcm1hdHRpbmcgc3RyaW5ncyBmb3IgdGhlIGludGVybmFsCiAgKnByaW50ZiBmdW5jdGlvbnMgd2hpY2ggc3RpbGwgY2Fubm90IGhhbmRsZSBwcmludCBmb3JtYXR0aW5nIHN0cmluZyBkaXJlY3RpdmVzCiAgc3VjaCBhcyAiSTY0ZCIsICJJNjR1IiwgYW5kIG90aGVycyBhdmFpbGFibGUgb24gTVNWQywgTWluR1csIEludGVsJ3MgSUNDLCBhbmQKICBvdGhlciBET1MvV2luZG93cyBjb21waWxlcnMuCgpEYW5pZWwgRmFuZHJpY2ggKDE1IEF1ZyAyMDA4KQotIEFkZGVkIHRlc3QgY2FzZSAxMDYzIHRvIHRlc3QgaW52YWxpZCBsb25nIGZpbGUgcmFuZ2VzIHdpdGggZmlsZTogVVJMcyBhbmQKICAxMDY0IHRvIHRlc3QgbXVsdGlwbGUgaHR0cCBQVVRzLgoKLSBBZGRlZCB0ZXN0IGNhc2UgMTA2NSB0byB0ZXN0IGEgUFVUIHdpdGggYSBzaW5nbGUgZmlsZSBidXQgdHdvIFVSTHMuIFRoaXMKICB3YXMgZGlzY292ZXJlZCB0byBiZSBwcm9ibGVtYXRpYyB3aGlsZSBpbnZlc3RpZ2F0aW5nIGFuIGluY2lkZW50IHJlcG9ydGVkIGJ5CiAgVm9uIGJhY2sgaW4gTWF5LiAgY3VybCBpbiB0aGlzIGNhc2UgZG9lc24ndCBpbmNsdWRlIGEgQ29udGVudC1MZW5ndGg6IG9yCiAgVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQgaGVhZGVyIHdoaWNoIGlzIGlsbGVnYWwuIFRoaXMgdGVzdCBjYXNlIGlzCiAgYWRkZWQgdG8gRElTQUJMRUQgdW50aWwgYSBzb2x1dGlvbiBpcyBmb3VuZC4KCllhbmcgVHNlICgxNSBBdWcgMjAwOCkKLSBDIHByZXByb2Nlc3NvciBtYWNyb3MgdXNlZCBpbnRlcm5hbGx5IGFuZCBlcXVhbGx5IGF2YWlsYWJsZSBleHRlcm5hbGx5IHdoaWNoCiAgYWlkIGluIHRoZSB1c2Ugb2YgdGhlIGN1cmxfb2ZmX3QgZGF0YSB0eXBlIGFyZSBuYW1lZDogQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCwKICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UVSwgQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCwgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCwKICBDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSwgQ1VSTF9PRkZfVF9DIGFuZCBDVVJMX09GRl9UVV9DLgoKWWFuZyBUc2UgKDEzIEF1ZyAyMDA4KQotIFRoZSBzaXplIG9mIGxvbmcgaXMgYSBidWlsZCB0aW1lIGNoYXJhY3RlcmlzdGljIGFuZCBhcyBzdWNoIGl0IGlzIG5vdyByZWNvcmRlZAogIGluIGN1cmxidWlsZC5oIGFzIENVUkxfU0laRU9GX0xPTkcuIERlZmluaXRpb24gbm93IGRvbmUgZnJvbSBjb25maWd1cmUgcHJvY2VzcwogIGFuZCBpbiBDVlMgY3VybGJ1aWxkLmguZGlzdCBmb3Igbm9uLWNvbmZpZ3VyZSBzeXN0ZW1zLgoKRGFuaWVsIEZhbmRyaWNoICgxMiBBdWcgMjAwOCkKLSBGaXhlZCBhIGJ1ZmZlciBvdmVyZmxvdyBwcm9ibGVtIGluIEN1cmxfcHJveHlDT05ORUNUIHRoYXQgY291bGQgb2NjdXIKICB3aGVuIGEgc2VydmVyIHJlc3BvbmRlZCB3aXRoIGxvbmcgaGVhZGVycyBhbmQgZGF0YS4gIEx1Y2tpbHksIHRoZSBidWZmZXIKICBvdmVyZmxvd2VkIGludG8gYW5vdGhlciB1bnVzZWQgYnVmZmVyLCBzbyBubyBhY3R1YWwgaGFybSB3YXMgZG9uZS4KICBBZGRlZCB0ZXN0IGNhc2VzIDEwNjAgYW5kIDEwNjEgdG8gdmVyaWZ5LgoKRGFuaWVsIFN0ZW5iZXJnICgxMiBBdWcgMjAwOCkKLSBBbmR5IFRzb3VsYWR6ZSBmaXhlZCBydW50ZXN0cy5wbCB0byBub3QgYXR0ZW1wdCB0byBleGVjdXRlIHRoZSBzdHVubmVsCiAgX2RpcmVjdG9yeV8gaWYgdGhhdCBoYXBwZW5lZCB0byBhcHBlYXIgaW4gdGhlIHBhdGghCgpZYW5nIFRzZSAoMTIgQXVnIDIwMDgpCi0gQWRkZWQgbWFjcm9zIGZvciBtaW5pbXVtLXdpZHRoIHNpZ25lZCBhbmQgdW5zaWduZWQgY3VybF9vZmZfdCBpbnRlZ2VyCiAgY29uc3RhbnRzIENVUkxfT0ZGX1RfQyBhbmQgQ1VSTF9PRkZfVFVfQy4gVGhlIGNsZXZlciBkb3VibGUgaGVscGVyIG1hY3JvCiAgdXNlZCBpbnRlcm5hbGx5IHRvIHByb3ZpZGUgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgdGhhbmtzIHRvIExhcnMgTmlsc3Nvbi4KCkRhbmllbCBGYW5kcmljaCAoMTEgQXVnIDIwMDgpCi0gRml4ZWQgYSBib3VuZGFyeSBjb25kaXRpb24gZXJyb3IgaW4gZnRwX3JlYWRyZXNwKCkgd2hlcmVieSBhIG5vbi10ZXJtaW5hbAogIGxpbmUgb2YgYSBtdWx0aWxpbmUgRlRQIHJlc3BvbnNlIHdob3NlIGxhc3QgYnl0ZSBsYW5kZWQgZXhhY3RseSBhdCB0aGUgZW5kCiAgb2YgdGhlIEJVRlNJWkUtbGVuZ3RoIGJ1ZmZlciB3b3VsZCBiZSB0cmVhdGVkIGFzIHRoZSB0ZXJtaW5hbCByZXNwb25zZQogIGxpbmUuICBUaGUgZm9sbG93aW5nIHJlc3BvbnNlIGNvZGUgcmVhZCBpbiB3b3VsZCB0aGVuIGFjdHVhbGx5IGJlIHRoZQogIGVuZCBvZiB0aGUgcHJldmlvdXMgcmVzcG9uc2UgbGluZSwgYW5kIGFsbCByZXNwb25zZXMgZnJvbSB0aGVuIG9uIHdvdWxkCiAgY29ycmVzcG9uZCB0byB0aGUgd3JvbmcgY29tbWFuZC4gVGVzdCBjYXNlIDEwNjIgdmVyaWZpZXMgdGhpcy4KCi0gU3RvcCBjbG9zaW5nIGEgbmV2ZXItb3BlbmVkIGZ0cCBzb2NrZXQuCgpEYW5pZWwgU3RlbmJlcmcgKDExIEF1ZyAyMDA4KQotIENvbnN0YW50aW5lIFNhcHVudHpha2lzIGZpbGVkIGJ1ZyByZXBvcnQgIzIwNDI0MzAKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjA0MjQzMCkgd2l0aCBhIHBhdGNoLiAiTlRMTSBXaW5kb3dzCiAgU1NQSSBjb2RlIGlzIG5vdCB0aHJlYWQgc2FmZSIuIFRoaXMgd2FzIGR1ZSB0byBsaWJjdXJsIHVzaW5nIHN0YXRpYwogIHZhcmlhYmxlcyB0byB0ZWxsIHdldGhlciB0byBsb2FkIHRoZSBuZWNlc3NhcnkgU1NQSSBETEwsIGJ1dCBub3cgdGhlIGxvYWRpbmcKICBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgbW9yZSBzdWl0YWJsZSBjdXJsX2dsb2JhbF9pbml0KCkgY2FsbC4KCi0gQ29uc3RhbnRpbmUgU2FwdW50emFraXMgZmlsZWQgYnVnIHJlcG9ydCAjMjA0MjQ0MAogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMDQyNDQwKSB3aXRoIGEgcGF0Y2guIEhlIGlkZW50aWZpZWQgYQogIHByb2JsZW0gd2hlbiB1c2luZyBOVExNIG92ZXIgYSBwcm94eSBidXQgdGhlIGVuZC1wb2ludCBkb2VzIEJhc2ljLCBhbmQgdGhlbgogIGxpYmN1cmwgd291bGQgZG8gd3Jvbmcgd2hlbiB0aGUgaG9zdCBzZW50ICJDb25uZWN0aW9uOiBjbG9zZSIgYXMgdGhlIHByb3h5J3MKICBOVExNIHN0YXRlIHdhcyBlcnJvbmVvdXNseSBjbGVhcmVkLgoKWWFuZyBUc2UgKDExIEF1ZyAyMDA4KQotIEFkZGVkIG1pc3Npbmcgc2lnbmVkIGFuZCB1bnNpZ25lZCBjdXJsX29mZl90IGludGVnZXIgY29uc3RhbnQgc3VmZml4ZXMgZm9yCiAgaW50ZXJuYWwgYW5kIGV4dGVybmFsIHVzZS4gQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCwgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUuCgpEYW5pZWwgRmFuZHJpY2ggKDcgQXVnIDIwMDgpCi0gRml4ZWQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpbiBtdWx0aV9ydW5zaW5nbGUoKSB0aGF0IGNvdWxkIGNhdXNlIGEKICByZXF1ZXN0IHRvIHByZW1hdHVyZWx5IGVuZC4KCi0gQWRkZWQgdGVzdDEwNTkgdG8gdGVzdCB0aGUgRlRQIHByb3h5IHR1bm5lbCBwcm9ibGVtIGZpeGVkIEp1bHkgMTEuCgpZYW5nIFRzZSAoNyBBdWcgMjAwOCkKLSBBZGRlZCBjdXJsYnVpbGQuaCBhbmQgY3VybHJ1bGVzLmggaGVhZGVyIGZpbGVzIHRvIGxpYmN1cmwncyBwdWJsaWMgaGVhZGVycy4KICBGaWxlIGN1cmxidWlsZC5oIGlzIGEgZ2VuZXJhdGVkIGZpbGUgb24gY29uZmlndXJlLWNhcGFibGUgc3lzdGVtcy4gVGhpcyBpcwogIGEgZmlyc3Qgc3RlcCB0b3dhcmRzIGNvbmZpZ3VyZS1iYXNlZCBpbmZvIGluIHB1YmxpYyBoZWFkZXJzLiBDdXJyZW50bHkgb25seQogIHVzZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBhIGN1cmxfb2ZmX3QgZGF0YSB0eXBlIHdoaWNoIGlzIG5vdCBnYXRlZCB0bwogIG9mZl90LiBGdXJ0aGVyIGRldGFpbHMgYXJlIGRvY3VtZW50ZWQgaW5zaWRlIHRoZXNlIG1lbnRpb25lZCBoZWFkZXIgZmlsZXMuCgotIEZpeCBDVVJMX0NIRUNLX0RFRiBzbyB0aGF0IHdoZW4gdGhlIGV4cGFuc2lvbiBvZiB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbAogIHJlc3VsdHMgaW4gYSBzZXQgb2YgZG91YmxlLXF1b3RlZCBzdHJpbmdzLCB0aGlzIG1hY3JvIHdpbGwgbm93IHJldHVybiBhbgogIGV4cGFuc2lvbiB3aGljaCBjb25zaXN0cyBvZiBhIHNpbmdsZSBkb3VibGUtcXVvdGVkIHN0cmluZyBhcyB0aGUgcmVzdWx0IG9mCiAgY29uY2F0ZW5hdGluZyBhbGwgb2YgdGhlbS4KCi0gU2tpcCBkYXRhIHR5cGUgY2hlY2sgaW4gRE9fQ1VSTF9PRkZfVF9DSEVDSyBtYWNybyB3aGVuIGFyZ3VtZW50IGlzIGVtcHR5LgoKLSBBZGp1c3RlZCB0ZXN0Y3VybC5wbCB0byBjb3B5IGNoZWNrZWQgb3V0IGN1cmxidWlsZC5oLmRpc3QgYXMgY3VybGJ1aWxkLmgKICBmb3Igbm9uLWNvbmZpZ3VyZSB0YXJnZXRzIHdoZW4gdGhlIGhvc3Qgc3lzdGVtIGRvZXNuJ3QgcnVuIGJ1aWxkY29uZi5iYXQuCgotIFByZXZlbnQgYnVpbGRjb25mIGZyb20gcmVtb3ZpbmcgJ01ha2VmaWxlJyBhbmQgJ21pc3NpbmcnIGZpbGVzLiBUaGlzIHdvdWxkCiAgYmxvdyBhd2F5IG91ciBDVlMgY2hlY2tlZCBmaWxlcyAnbWlzc2luZycgYW5kICdoaXBlci9NYWtlZmlsZScuCgotIFJlbW92ZSBhZGp1c3RtZW50IGRvbmUgdG8gdGVzdGN1cmwucGwgdG8gdmVyaWZ5IGlmIGNoYW5nZSBpbnRyb2R1Y2VkIGJ5CiAgR3VlbnRlciBLbmF1ZiBpbiBsaWIvTWFrZWZpbGUubmV0d2FyZSBpcyBlbm91Z2ggdG8gZ2V0IHRoZSBuZXR3YXJlIGF1dG9idWlsZHMKICBnb2luZyBhZ2Fpbi4KCllhbmcgVHNlICg1IEF1ZyAyMDA4KQotIENoYW5nZXMgZG9uZSB0byBidWlsZGNvbmYgc2NyaXB0LiBWYWxpZGF0ZSB0aGF0IGF1dG9tNHRlIGFuZCBhdXRvY29uZiwgYXMKICB3ZWxsIGFzIGFjbG9jYWwgYW5kIGF1dG9tYWtlLCB2ZXJzaW9ucyBtYXRjaC4gSW1wcm92ZSByZW1vdmFsIG9mIHByZXZpb3VzCiAgcnVuIGdlbmVyYXRlZCBmaWxlcy4gUmVtb3ZlIHZlcmJvc2UgZGVidWcgbG9nZ2luZyBvZiBhY2xvY2FsIG9uIFNvbGFyaXMuCgpEYW5pZWwgU3RlbmJlcmcgKDUgQXVnIDIwMDgpCi0gWWVob3NodWEgSGVyc2hiZXJnIGZvdW5kIGEgcHJvYmxlbSB0aGF0IHdvdWxkIG1ha2UgbGliY3VybCByZS11c2UgYQogIGNvbm5lY3Rpb24gd2l0aCB0aGUgbXVsdGkgaW50ZXJmYWNlIGV2ZW4gaWYgYSBwcmV2aW91cyB1c2Ugb2YgaXQgY2F1c2VkIGEKICBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT04gdG8gZ2V0IHJldHVybmVkLiBJIG5vdyBtYWtlIHN1cmUgdGhhdCBmYWlsZWQKICBTU0wgY29ubmVjdGlvbnMgcHJvcGVybHkgY2xvc2UgdGhlIGNvbm5lY3Rpb25zLgoKRGFuaWVsIFN0ZW5iZXJnICg0IEF1ZyAyMDA4KQotIFRlc3QgY2FzZXMgMTA1MSwgMTA1MiBhbmQgMTA1NSB3ZXJlIGFkZGVkIGJ5IERhbmllbCBGYW5kcmljaCBvbiBKdWx5IDMwIGFuZAogIHByb3ZlZCBob3cgUFVUIGFuZCBQT1NUIHdpdGggYSByZWRpcmVjdCBjb3VsZCBsZWFkIHRvIGEgImhhbmciIGR1ZSB0byB0aGUKICBkYXRhIHN0cmVhbSBub3QgYmVpbmcgcmV3b3VuZCBwcm9wZXJseSB3aGVuIGl0IGhhZCB0byBpbiBvcmRlciB0byBnZXQgc2VudAogIHByb3Blcmx5IChhZ2FpbikgdG8gdGhlIHN1YnNlcXVlbnQgVVJMLiBUaGlzIGlzIG5vdyBmaXhlZCBhbmQgdGhlc2UgdGVzdAogIGNhc2VzIGFyZSBubyBsb25nZXIgZGlzYWJsZWQuCgpZYW5nIFRzZSAoNCBBdWcgMjAwOCkKLSBBdXRvY29uZiAyLjYyIGhhcyBjaGFuZ2VkIHRoZSBiZWhhdmlvdXIgb2YgdGhlIEFDX0FJWCBtYWNybyB3aGljaCB3ZSB1c2UuCiAgUHJpb3IgdmVyc2lvbnMgb2YgYXV0b2NvbmYgZGVmaW5lZCBfQUxMX1NPVVJDRSBpZiBfQUlYIHdhcyBkZWZpbmVkLiAyLjYyCiAgdmVyc2lvbiBvZiBBQ19BSVggZGVmaW5lcyBfQUxMX1NPVVJDRSBhbmQgb3RoZXIgZm91ciBwcmVwcm9jZXNzb3Igc3ltYm9scwogIG5vIG1hdHRlciBpZiB0aGUgc3lzdGVtIGlzIEFJWCBvciBub3QuIFRvIGtlZXAgdGhlIHRyYWRpdGlvbmFsIGJlaGF2aW91ciwKICBhbmQgYW4gdW5pZm9ybSBvbmUgYWNyb3NzIGF1dG9jb25mIHZlcnNpb25zIEFDX0FJWCBpcyByZXBsYWNlZCB3aXRoIG91cgogIG93biBpbnRlcm5hbCBtYWNybyBDVVJMX0NIRUNLX0FJWF9BTExfU09VUkNFLgoKRGFuaWVsIFN0ZW5iZXJnICg0IEF1ZyAyMDA4KQotIFRlc3QgY2FzZSAxMDQxIChhZGRlZCBieSBEYW5pZWwgRmFuZHJpY2ggSnVseSAxNHRoKSBwcm92ZWQgYSBidWcgd2hlcmUgUFVUCiAgd2l0aCAtQyAtIHNlbnQgZ2FyYmFnZSBpbiB0aGUgQ29udGVudC1SYW5nZTogaGVhZGVyLiBJIGZpeGVkIHRoaXMgcHJvYmxlbSBieQogIG1ha2luZyBzdXJlIGxpYmN1cmwgYWx3YXlzIHNldHMgdGhlIHNpemUgb2YgdGhlIF9lbnRpcmVfIHVwbG9hZCBpZiBhbiBhcHAKICBhdHRlbXBzIHRvIGRvIHJlc3VtZWQgdXBsb2FkcyBzaW5jZSBsaWJjdXJsIHNpbXBseSBjYW5ub3Qga25vdyB0aGUgc2l6ZSBvZgogIHdoYXQgaXMgY3VycmVudGx5IGF0IHRoZSBzZXJ2ZXIgZW5kLiBUZXN0IDEwNDEgaXMgbm8gbG9uZ2VyIGRpc2FibGVkLgoKWWFuZyBUc2UgKDIgQXVnIDIwMDgpCi0gTm8gbG9uZ2VyIHRlc3QgYXZhaWxhYmlsaXR5IG9mIHRoZSBnZGkzMiBsaWJyYXJ5LCBub3IgdXNlIGl0IGZvciBsaW5raW5nLCBldmVuCiAgd2hlbiB3ZSBoYXZlIGJlZW4gZG9pbmcgdGhpcyBzaW5jZSByZXZpc2lvbiAxLjQ3IG9mIGNvbmZpZ3VyZS5hYyA0IHllYXJzIGFuZAogIDUgbW9udGhzIGFnbyB3aGVuIGNyb3NzLWNvbXBpbGluZyBhIFdpbmRvd3MgdGFyZ2V0LiBXZSBhY3R1YWxseSBkb24ndCB1c2UgYW55CiAgZnVuY3Rpb24gZnJvbSB0aGUgV2luZG93cyBHREkgKEdyYXBoaWNzIERldmljZSBJbnRlcmZhY2UpIHJlbGF0ZWQgd2l0aCBkcmF3aW5nCiAgb3IgZ3JhcGhpY3MtcmVsYXRlZCBvcGVyYXRpb25zLgoKRGFuaWVsIEZhbmRyaWNoICgxIEF1ZyAyMDA4KQotIEFkZGVkIHN1cHBvcnQgZm9yIC0tYXBwZW5kIG9uIFNGVFAgdXBsb2Fkcy4gVW5mb3J0dW5hdGVseSwgT3BlblNTSCBkb2Vzbid0CiAgc3VwcG9ydCB0aGlzIHNvIGl0IGdvZXMgdW50ZXN0ZWQuCgpZYW5nIFRzZSAoMSBBdWcgMjAwOCkKLSBDb25maWd1cmUgcHJvY2VzcyBub3cgY2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1JFRU5UUkFOVCBzeW1ib2wgaXMgYWxyZWFkeQogIGRlZmluZWQuIElmIGl0IGlzbid0IGN1cnJlbnRseSBkZWZpbmVkIGEgc2V0IG9mIGNoZWNrcyBhcmUgcGVyZm9ybWVkIHRvIHRlc3QKICBpZiBpdHMgZGVmaW5pdGlvbiBpcyByZXF1aXJlZCB0byBtYWtlIHZpc2libGUgdG8gdGhlIGNvbXBpbGVyIGEgc2V0IG9mICpfcgogIGZ1bmN0aW9ucy4gRmluYWxseSwgaWYgX1JFRU5UUkFOVCBpcyBhbHJlYWR5IGRlZmluZWQgb3IgbmVlZGVkIGl0IHRha2VzIGNhcmUKICBvZiBtYWtpbmcgYWRqdXN0bWVudHMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IGl0IGlzIGRlZmluZWQgZXF1YWxseSBmb3IgdGhlCiAgY29uZmlndXJlIHByb2Nlc3MgdGVzdHMgYW5kIGdlbmVyYXRlZCBjb25maWcgZmlsZS4KCi0gUmVtb3ZlZCBkZWZpbml0aW9uIG9mIENVUkxfQ0hFQ0tfV09SS0lOR19SRVNPTFZFUiBmcm9tIGFjaW5jbHVkZS5tNCBpdCBoYXMKICBub3QgYmVlbiBpbiB1c2Ugc2luY2UgcmV2aXNpb24gMS44MSBvZiBjb25maWd1cmUuaW4gNiB5ZWFycywgOSBtb250aHMgYWdvLgoKRGFuaWVsIEZhbmRyaWNoICgzMSBKdWwgMjAwOCkKLSBGaXhlZCBwYXJzaW5nIG9mIGFuIElQdjYgcHJveHkgYWRkcmVzcyB0byBzdXBwb3J0IGEgc2NvcGUgaWRlbnRpZmllciwKICBhcyB3ZWxsIGFzIElQdjQgYWRkcmVzc2VzIGluIElQdjYgZm9ybWF0LiBBbHNvLCBiZXR0ZXIgaGFuZGxlIHRoZSBjYXNlCiAgb2YgYSBtYWxmb3JtYXR0ZWQgSVB2NiBhZGRyZXNzIChhdm9pZCBlbXB0eSBhbmQgTlVMTCBzdHJpbmdzKS4KCi0gRml4ZWQgYSBwcm9ibGVtIHdpdGggYW55IEZUUCBVUkwgb3IgYW55IFVSTHMgY29udGFpbmluZyBhbiBJUHY2IGFkZHJlc3MKICBiZWluZyBtYW5nbGVkIHdoZW4gcGFzc2VkIHRvIHByb3hpZXMgd2hlbiBDVVJMT1BUX1BPUlQgaXMgYWxzbyBzZXQKICAocmVwb3J0ZWQgYnkgUHJhbW9kIFNoYXJtYSkuCgotIFVzZXIgbmFtZXMgZW1iZWRkZWQgaW4gcHJveHkgVVJMcyB3aXRob3V0IGEgcGFzc3dvcmQgd2VyZSBwYXJzZWQKICBpbmNvcnJlY3RseS0tdGhlIGhvc3QgbmFtZSBpcyB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIHVzZXIgbmFtZSBhbmQgdGhlCiAgcG9ydCBudW1iZXIgYmVjb21lcyB0aGUgcGFzc3dvcmQuICBUaGlzIGNhbiBiZSBvYnNlcnZlZCBpbiB0ZXN0IDI3OQogICh3YXMgS05PV05fSVNTVUUgIzU0KS4KCkRhbmllbCBTdGVuYmVyZyAoMzAgSnVsIDIwMDgpCi0gUGhpbCBCbHVuZGVsbCBhZGRlZCB0aGUgQ1VSTE9QVF9BRERSRVNTX1NDT1BFIG9wdGlvbiwgYXMgd2VsbCBhcyBhZGp1c3RlZAogIHRoZSBVUkwgcGFyc2VyIHRvIGFsbG93IG51bWVyaWNhbCBJUHY2LWFkZHJlc3NlcyB0byBiZSBzcGVjaWZpZWQgd2l0aCB0aGUKICBzY29wZSBnaXZlbiwgYXMgcGVyIFJGQzQwMDcgLSB3aXRoIGEgcGVyY2VudCBsZXR0ZXIgdGhhdCBpdHNlbGYgbmVlZHMgdG8gYmUKICBVUkwgZXNjYXBlZC4gRm9yIGV4YW1wbGUsIGZvciBhbiBhZGRyZXNzIG9mIGZlODA6OjEyMzQlMSB0aGUgSFRUUCBVUkwgaXM6CiAgImh0dHA6Ly9bZmU4MDo6MTIzNCUyNTFdLyIKCi0gUEhQJ3MgYnVnIHJlcG9ydCAjNDMxNTggKGh0dHA6Ly9idWdzLnBocC5uZXQvYnVnLnBocD9pZD00MzE1OCkgaWRlbnRpZmllcyBhCiAgdHJ1ZSBidWcgaW4gbGliY3VybCBidWlsdCB3aXRoIE9wZW5TU0wuIEl0IG1hZGUgY3VybF9lYXN5X2dldGluZm8oKSBtb3JlIG9yCiAgbGVzcyBhbHdheXMgcmV0dXJuIDAgZm9yIENVUkxJTkZPX1NTTF9WRVJJRllSRVNVTFQgYmVjYXVzZSB0aGUgZnVuY3Rpb24gdGhhdAogIHdvdWxkIHNldCBpdCB0byBzb21ldGhpbmcgbm9uLXplcm8gd291bGQgcmV0dXJuIGJlZm9yZSB0aGUgYXNzaWduIGluIGFsbW9zdAogIGFsbCBlcnJvciBjYXNlcy4gVGhlIGludGVybmFsIHZhcmlhYmxlIGlzIG5vdyBzZXQgdG8gbm9uLXplcm8gZnJvbSB0aGUgc3RhcnQKICBvZiB0aGUgZnVuY3Rpb24gb25seSB0byBnZXQgY2xlYXJlZCBsYXRlciBvbiBpZiB0aGluZ3Mgd29yayBvdXQgZmluZS4KCi0gTWFkZSB0aGUgY3VybCB0b29sJ3MgLXcgb3B0aW9uIHN1cHBvcnQgdGhlICV7c3NsX3ZlcmlmeV9yZXN1bHR9IHZhcmlhYmxlCgpEYW5pZWwgRmFuZHJpY2ggKDMwIEp1bCAyMDA4KQotIEFkZGVkIHRlc3QgY2FzZXMgMTA1MiB0aHJvdWdoIDEwNTUgdG8gdGVzdCB1cGxvYWRpbmcgZGF0YSBmcm9tIGZpbGVzCiAgZHVyaW5nIHJlZGlyZWN0cy4gIFRlc3QgY2FzZXMgMTA1MiBhbmQgMTA1NSBzaG93IHByb2JsZW1zIChtYXliZSB0aGUgc2FtZQogIHJvb3QgY2F1c2UgYXMgMTA1MSkgYW5kIGFyZSBkaXNhYmxlZC4KCi0gRml4ZWQgYSBjb3VwbGUgb2YgYnVmZmVyIG92ZXJmbG93cyBpbiB0aGUgTVMtRE9TIHBvcnQgb2YgdGhlIGN1cmwgdG9vbC4KCkRhbmllbCBGYW5kcmljaCAoMjkgSnVsIDIwMDgpCi0gRml4ZWQgLS11c2UtYXNjaWkgdG8gcHJvcGVybHkgY29udmVydCB0ZXh0IGZpbGVzIG9uIFN5bWJpYW4gT1MsIE1TLURPUwogIGFuZCBPUy8yLgoKLSBBZGRlZCB0ZXN0IGNhc2UgMTA1MSB0byB0ZXN0IExvY2F0aW9uOiBmb2xsb3dpbmcgd2l0aCBQVVQsIGFzIHJlcG9ydGVkCiAgYnkgQmVuIFN1dGNsaWZmZS4gIFRoZSB0ZXN0IHdoZW4gcnVuIG1hbnVhbGx5IHNob3dzIGEgcHJvYmxlbSBpbiBjdXJsCiAgc28gaXQncyBkaXNhYmxlZC4KCkRhbmllbCBGYW5kcmljaCAoMjggSnVsIDIwMDgpCi0gRml4ZWQgZGlzcGxheSBvZiB0aGUgaW50ZXJmYWNlIGJpbmQgYWRkcmVzcyBpbiB0aGUgdHJhY2Ugb3V0cHV0IHdoZW4gaXQncwogIGFuIElQdjYgYWRkcmVzcy4KCi0gQWRkZWQgdGVzdCBjYXNlcyAxMDQ1IHRocm91Z2ggMTA0OSBhcyBzaW1wbGUgdGVzdHMgb2YgLS1pbnRlcmZhY2UgdXNpbmcgdGhlCiAgbG9jYWxob3N0IGludGVyZmFjZS4KCi0gQWRkZWQgdGVzdCBjYXNlIDEwNTAgdG8gdGVzdCAtLWZ0cC1wb3J0IHdpdGggYW4gSVB2NiBhZGRyZXNzCgpEYW5pZWwgU3RlbmJlcmcgKDI2IEp1bCAyMDA4KQotIERhdmlkIEJhdSBmaWxlZCBidWcgcmVwb3J0ICMyMDI2MjQwICJDVVJMX1JFQURGVU5DX1BBVVNFIGxlYWRzIHRvIGJ1ZmZlcgogIG92ZXJydW4iIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMDI2MjQwKSBpZGVudGlmeWluZyB0d28KICBwcm9ibGVtcywgYW5kIHByb3ZpZGluZyB0aGUgZml4IGZvciB0aGVtOgoKICAtIENVUkxfUkVBREZVTkNfUEFVU0UgZGlkIGluIGZhY3Qgbm90IHBhdXNlIHRoZSBfc2VuZGluZ18gb2YgZGF0YSB0aGF0IGl0IGlzCiAgICBkZXNpZ25lZCBmb3IgYnV0IHBhdXNlZCBfcmVjZWl2aW5nXyBvZiBkYXRhIQoKICAtIGxpYmN1cmwgZGlkbid0IGludGVybmFsbHkgc2V0IHRoZSByZWFkIGNvdW50ZXIgdG8gemVybyB3aGVuIHRoaXMgcmV0dXJuCiAgICBjb2RlIHdhcyBkZXRlY3RlZCwgd2hpY2ggd291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBqdW5rIGdldHRpbmcgc2VudCB0bwogICAgdGhlIHNlcnZlci4KCkRhbmllbCBGYW5kcmljaCAoMjYgSnVsIDIwMDgpCi0gQWRkZWQgdGVzdCAxMDQ0IHRvIHRlc3QgbGFyZ2UgZmlsZSBzdXBwb3J0IGluIGZ0cCB3aXRoIC1JLgoKLSBFbGltaW5hdGUgYSB1bm5lY2Vzc2FyeSBzb2NrZXQgY3JlYXRpb24gaW4gQ3VybF9nZXRhZGRyaW5mbyBmb3IgYW4gSVB2NAogIGFkZHJlc3MgaW4gYW4gSVB2NiBjYXBhYmxlIGxpYmN1cmwuCgotIEFkZGVkIGZlYXR1cmUgaW4gcnVudGVzdHMucGwgdG8gc2VsZWN0IHRlc3RzIGJhc2VkIG9uIGtleSB3b3JkLgoKRGFuaWVsIEZhbmRyaWNoICgyMyBKdWwgMjAwOCkKLSBDaGFuZ2VkIHRoZSBsb25nIGxvZ2ZpbGUgZWxpc2lvbiBjb2RlIGluIHJ1bnRlc3RzLnBsIHRvIHByb3Blcmx5IGhhbmRsZQogIGxpbmVzIGVuZGluZyBpbiBcci4KCi0gQ2hhbmdlZCByZWZlcmVuY2VzIHRvIFRSVUUgYW5kIEZBTFNFIGluIHRoZSBjdXJsX2Vhc3lfc2V0b3B0IG1hbiBwYWdlIHRvCiAgMSBhbmQgemVybywgcmVzcGVjdGl2ZWx5LCBzaW5jZSBUUlVFIGFuZCBGQUxTRSBhcmVuJ3QgcGFydCBvZiB0aGUKICBsaWJjdXJsIEFQSS4KCkRhbmllbCBTdGVuYmVyZyAoMjMgSnVsIDIwMDgpCi0gSSB3ZW50IG92ZXIgdGhlIGN1cmxfZWFzeV9zZXRvcHQgbWFuIHBhZ2UgYW5kIHJlcGxhY2VkIG1vc3QgcmVmZXJlbmNlcyB0bwogIG5vbi16ZXJvIHdpdGggdGhlIGZpeGVkIHZhbHVlIG9mIDEuIFdlIHNob3VsZCBzdHJpdmUgYXQgbWFraW5nIG9wdGlvbnMKICBzdXBwb3J0ICcxJyBmb3IgZW5hYmxpbmcgdGhlbSBtZW50aW9uZWQgZXhwbGljaXRseSwgYXMgdGhhdCB0aGVuIHdpbGwgYWxsb3cKICB1cyBmb3IgdG8gZXh0ZW5kIHRoZW0gaW4gdGhlIGZ1dHVyZSB3aXRob3V0IGJyZWFraW5nIG9sZGVyIHByb2dyYW1zLgoKICBQb3NzaWJseSB3ZSBzaG91bGQgZXZlbiBpbnRyb2R1Y2UgYSBmYW5jeSBkZWZpbmUgdG8gdXNlIGluc3RlYWQgb2YgJzEnIGFsbAogIG92ZXIuLi4KCllhbmcgVHNlICgyMSBKdWwgMjAwOCkKLSBVc2UgdGhlIHNyZWFkZnJvbSgpIHdyYXBwZXIgdG8gcmVwbGFjZSByZWN2ZnJvbSgpIGluIG91ciBjb2RlLgoKWWFuZyBUc2UgKDIwIEp1bCAyMDA4KQotIHdoZW4gcmVjdmZyb20gcHJvdG90eXBlIHVzZXMgYSB2b2lkIHBvaW50ZXIgZm9yIGFyZ3VtZW50cyAyLCA1IG9yIDYgdGhpcyB3aWxsCiAgbm93IGNhdXNlIHRoZSBkZWZpbml0aW9uLCBhcyBhcHByb3ByaWF0ZSwgb2YgUkVDVkZST01fVFlQRV9BUkcyX0lTX1ZPSUQsCiAgUkVDVkZST01fVFlQRV9BUkc1X0lTX1ZPSUQgb3IgUkVDVkZST01fVFlQRV9BUkc2X0lTX1ZPSUQuCgpZYW5nIFRzZSAoMTcgSnVsIDIwMDgpCi0gUkVDVkZST01fVFlQRV9BUkcyLCBSRUNWRlJPTV9UWVBFX0FSRzUgYW5kIFJFQ1ZGUk9NX1RZUEVfQVJHNiBhcmUgbm93IGRlZmluZWQKICB0byB0aGUgZGF0YSB0eXBlIHBvaW50ZWQgYnkgaXRzIHJlc3BlY3RpdmUgYXJndW1lbnQgYW5kIG5vdCB0aGUgcG9pbnRlciB0eXBlLgoKWWFuZyBUc2UgKDE2IEp1bCAyMDA4KQotIENvbmZpZ3VyZSBwcm9jZXNzIG5vdyBjaGVja3MgYXZhaWxhYmlsaXR5IG9mIHJlY3Zmcm9tKCkgc29ja2V0IGZ1bmN0aW9uIGFuZAogIGZpbmRzIG91dCBpdHMgcmV0dXJuIHR5cGUgYW5kIHRoZSB0eXBlcyBvZiBpdHMgYXJndW1lbnRzLiBBZGRlZCBkZWZpbml0aW9ucwogIGZvciBub24tY29uZmlndXJlIHN5c3RlbXMgY29uZmlnIGZpbGVzLCBhbmQgaW50cm9kdWNlZCBtYWNybyBzcmVhZGZyb20gd2hpY2gKICB3aWxsIGJlIHVzZWQgb24gdWRwIHNvY2tldHMgYXMgYSByZWN2ZnJvbSgpIHdyYXBwZXIuCgpZYW5nIFRzZSAoMTUgSnVsIDIwMDgpCi0gQWRkZWQgZGVzY3JpcHRpb24vY29tbWVudCB0byBpbmNsdWRlIHBhdGhzIHVzZWQgaW4gc2V2ZXJhbCBNYWtlZmlsZS5hbSBmaWxlcy4KICBBZGRlZCBhdXRvbWFrZSBvcHRpb24gbm9zdGRpbmMgdG8gdGVzdCBzZXJ2ZXJzIG1ha2VmaWxlIGFuZCBtb2RpZmllZCBsaWJjdXJsCiAgZXh0ZXJuYWwgaGVhZGVycyBpbmNsdWRlIHBhdGggZm9yIGxpYnRlc3QgcHJvZ3JhbXMuCgpEYW5pZWwgRmFuZHJpY2ggKDE0IEp1bCAyMDA4KQotIEFkZGVkIHRlc3QxMDQwIHRocm91Z2ggdGVzdDEwNDMgdG8gdGVzdCAtQyAtIG9uIEhUVFAuIFRlc3QgMTA0MSBmYWlsZWQgc28KICBpdCdzIGFkZGVkIHRvIERJU0FCTEVELgoKWWFuZyBUc2UgKDE0IEp1bCAyMDA4KQotIEhUVFBfT05MWSBkZWZpbml0aW9uIGNoZWNrIGluIGxpYi9zZXR1cC5oIGlzIG5vdyBkb25lIG9uY2UgdGhhdCBjb25maWd1cmF0aW9uCiAgZmlsZSBoYXMgYmVlbiBpbmNsdWRlZC4gSW4gdGhpcyB3YXkgaWYgc3ltYm9sIGlzIGRlZmluZWQgaW4gdGhlIGNvbmZpZyBmaWxlCiAgaXQgd2lsbCBubyBsb25nZXIgYmUgaWdub3JlZC4gIFJlbW92ZWQgaW5jbHVzaW9uIG9mIHJlbWFpbmluZyBzeXN0ZW0gaGVhZGVyCiAgZmlsZXMgZnJvbSBjb25maWd1cmF0aW9uIGZpbGVzLiBNb3ZlZCBfUkVFTlRSQU5UIGRlZmluaXRpb24gdXAvZWFybGllciBpbgogIGxpYi9zZXR1cC5oCgpZYW5nIFRzZSAoMTEgSnVsIDIwMDgpCi0gQWRkZWQgbWlzc2luZyBtdWx0aXBsZSBoZWFkZXIgaW5jbHVzaW9uIHByZXZlbnRpb24gZGVmaW5pdGlvbiBmb3IgaGVhZGVyCiAgZmlsZSBjb250ZW50X2VuY29kaW5nLmgKCkRhbmllbCBGYW5kcmljaCAoMTEgSnVsIDIwMDgpCi0gRml4ZWQgdGVzdCA1NTMgdG8gcGFzcyB0aGUgdG9ydHVyZSB0ZXN0LgoKRGFuaWVsIFN0ZW5iZXJnICgxMSBKdWwgMjAwOCkKLSBEYW5pZWwgRmFuZHJpY2ggZm91bmQgb3V0IHdlIGRpZG4ndCBwYXNzIG9uIHRoZSB1c2VyLWFnZW50IHByb3Blcmx5IHdoZW4KICBkb2luZyAicHJveHktdHVubmVscyIgd2l0aCBub24tSFRUUCBwcm90b3RvbHMgYW5kIHRoYXQgd2FzIHNpbXBseSBiZWNhdXNlCiAgdGhlIGNvZGUgYXNzdW1lZCB0aGUgdXNlci1hZ2VudCB3YXMgb25seSBuZWVkZWQgZm9yIEhUVFAuCgpEYW5pZWwgRmFuZHJpY2ggKDEwIEp1bCAyMDA4KQotIENoYW5nZWQgc2xpZ2h0bHkgdGhlIFNGVFAgcXVvdGUgY29tbWFuZHMgY2htb2QsIGNob3duIGFuZCBjaGdycCB0byBvbmx5CiAgc2V0IHRoZSBhdHRyaWJ1dGUgdGhhdCBoYXMgY2hhbmdlZCBpbnN0ZWFkIG9mIGFsbCBwb3NzaWJsZSBvbmVzLiBIb3BlZnVsbHksCiAgdGhpcyB3aWxsIHNvbHZlIHRoZSAiUGVybWlzc2lvbiBkZW5pZWQiIHByb2JsZW0gdGhhdCBOYWdhcmFqYW4gU3JlZW5pdmFzYW4KICByZXBvcnRlZCB3aGVuIHNldHRpbmcgc29tZSBtb2RlcywgYnV0IHJlZ2FyZGxlc3MsIGl0IHNhdmVzIGEgcHJvdG9jb2wKICByb3VuZCB0cmlwIGluIHRoZSBjaG1vZCBjYXNlLgoKLSBBZGRlZCB0ZXN0IGNhc2VzIDEwMzggYW5kIDEwMzkgdG8gdGVzdCBBZHJpYW4gS3JlaGVyJ3MgcmVwb3J0IHRoYXQgZnRwCiAgdXBsb2FkcyB3aXRoIC1DIC0gZGlkbid0IHJlc3VtZSBwcm9wZXJseSwgYnV0IHRoZSB0ZXN0cyBwYXNzLgoKWWFuZyBUc2UgKDEwIEp1bCAyMDA4KQotIFBldGVyIExhbWJlcmcgZmlsZWQgYnVnIHJlcG9ydCAjMjAxNTEyNjogInBvbGwgZ2l2ZXMgV1NBRUlOVkFMIHdoZW4gUE9MTFBSSQogIGlzIHNldCBpbiBmZHNldC5ldmVudHMiIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMDE1MTI2KSB3aGljaAogIGV4YWN0bHkgcGlucG9pbnRlZCB0aGUgcHJvYmxlbSBvbmx5IHRyaWdnZXJlZCBvbiBXaW5kb3dzIFZpc3RhLCBwcm92aWRlZAogIHJlZmVyZW5jZSB0byBkb2NzIGFuZCBhbHNvIGEgZml4LiBUaGVyZSBpcyBtdWNoIHdvcmsgYmVoaW5kIFBldGVyIExhbWJlcmcncwogIGV4Y2VsbGVudCBidWcgcmVwb3J0LiBUaGFuayBZb3UhCgpEYW5pZWwgRmFuZHJpY2ggKDkgSnVsIDIwMDgpCi0gQWRkZWQgdGVzdHMgMTAzNiBhbmQgMTAzNyB0byB2ZXJpZnkgcmVzdW1lZCBmdHAgZG93bmxvYWRzIHdpdGggLUMgLQoKRGFuaWVsIFN0ZW5iZXJnICg5IEp1bCAyMDA4KQotIEFuZHJlYXMgU2NodWxkZWkgaW1wcm92ZWQgUGhpbCBCbHVuZGVsbCdzIHBhdGNoIGZvciBJUHY2IHVzaW5nIGMtYXJlcywgYW5kIEkKICBlZGl0ZWQgaXQgc2xpZ2h0bHkuIE5vdyB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIElQdjYgYWRkcmVzc2VzIGZpbmUgZXZlbgogIHdpdGggbGliY3VybCBidWlsdCB0byB1c2UgYy1hcmVzLgoKRGFuaWVsIEZhbmRyaWNoICg5IEp1bCAyMDA4KQotIEZpeGVkIGFuIE9PTSBoYW5kbGluZyBwcm9ibGVtIHRoYXQgY2F1c2UgdGVzdCAxMSB0byBmYWlsIHRoZSB0b3J0dXJlIHRlc3QuCgpEYW5pZWwgRmFuZHJpY2ggKDggSnVsIDIwMDgpCi0gRml4ZWQgdGVzdCA1NTQgdG8gcGFzcyB0aGUgdG9ydHVyZSB0ZXN0LgoKRGFuaWVsIEZhbmRyaWNoICg3IEp1bCAyMDA4KQotIEFkZGVkIHRlc3QgY2FzZXMgMTAzNCAmIDEwMzUgdG8gdGVzdCBJRE4gbmFtZSBjb252ZXJzaW9uIGZhaWx1cmVzLgoKRGFuaWVsIFN0ZW5iZXJnICg3IEp1bCAyMDA4KQotIFNjb3R0IEJhcnJldHQgcHJvdmlkZWQgYSB0ZXN0IGNhc2UgZm9yIGEgc2VnZmF1bHQgaW4gdGhlIEZUUCBjb2RlIGFuZCB0aGUKICBmaXggZm9yIGl0LiBJdCBvY2N1cmVkIHdoZW4geW91IGRpZCBhIEZUUCB0cmFuc2ZlciB1c2luZwogIENVUkxGVFBNRVRIT0RfU0lOR0xFQ1dEIGFuZCB0aGVuIGRpZCBhbm90aGVyIG9uZSBvbiB0aGUgc2FtZSBlYXN5IGhhbmRsZSBidXQKICBzd2l0Y2hlZCB0byBDVVJMRlRQTUVUSE9EX05PQ1dELiBEdWUgdG8gdGhlICJkaXIgZGVwdGgiIHZhcmlhYmxlIG5vdCBiZWluZwogIGNsZWFyZWQgcHJvcGVybHkuICBTY290dCdzIHRlc3QgY2FzZSBpcyBub3cga25vd24gYXMgdGVzdCA1MzkgYW5kIGl0CiAgdmVyaWZpZXMgdGhlIGZpeC4KCkRhbmllbCBTdGVuYmVyZyAoMyBKdWwgMjAwOCkKLSBQaGlsIEJsdW5kZWxsIHByb3ZpZGVkIGEgZml4IGZvciBsaWJjdXJsJ3MgdHJlYXRtZW50IG9mIHVuZXhwZWN0ZWQgMXh4CiAgcmVzcG9uc2UgY29kZXMuIFByZXZpb3VzbHkgbGliY3VybCB3b3VsZCBoYW5nIG9uIHN1Y2ggb2NjdXJhbmNlcy4gSSBhZGRlZAogIHRlc3QgY2FzZSAxMDMzIHRvIHZlcmlmeS4KCi0gSW50cm9jdWRpbmcgYSBuZXcgdGltZXN0YW1wIGZvciBjdXJsX2Vhc3lfZ2V0aW5mbygpOgogIENVUkxJTkZPX0FQUENPTk5FQ1RfVElNRS4gVGhpcyBpcyBzZXQgd2l0aCB0aGUgImFwcGxpY2F0aW9uIGxheWVyIgogIGhhbmRzaGFrZS9jb25uZWN0aW9uIGlzIGNvbXBsZXRlZC4gV2hpY2ggdHlwaWNhbGx5IGlzIFNTTCwgVExTIG9yIFNTSCBhbmQgYnkKICB1c2luZyB0aGlzIHlvdSBjYW4gZmlndXJlIG91dCB0aGUgYXBwbGljYXRpb24gbGF5ZXIncyBvd24gY29ubmVjdCB0aW1lLiBZb3UKICBjYW4gZXh0cmFjdCB0aGUgdGltZSBzdGFtcCB1c2luZyBjdXJsJ3MgLXcgb3B0aW9uIGFuZCB0aGUgbmV3IHZhcmlhYmxlIG5hbWVkCiAgJ3RpbWVfYXBwY29ubmVjdCcuIFRoaXMgZmVhdHVyZSB3YXMgc3BvbnNvcmVkIGJ5IExlbm55IFJhY2hpdHNreSBhdCBOZXVTdGFyLgoKRGFuaWVsIEZhbmRyaWNoICgyIEp1bCAyMDA4KQotIFN1cHBvcnQgT3BlbiBXYXRjb20gQyBvbiBMaW51eCAoYXMgd2VsbCBhcyBXaW5kb3dzKS4KCllhbmcgVHNlICgyIEp1bCAyMDA4KQotIFRoZSBwcmV2aW91c2x5IGNvbW1pdHRlZCBmaXggZm9yIGJ1ZyByZXBvcnQgIzE5OTkxODEgcHJldmVudGVkIHVzaW5nIHRoZQogIG1vbm90b25pYyBjbG9jayBvbiBhbnkgc3lzdGVtIHdpdGhvdXQgYW4gYWx3YXlzIHN1cHBvcnRlZCBQT1NJWCBjb21wbGlhbnQKICBpbXBsZW1lbnRhdGlvbi4gTm93IHRoZSBQT1NJWCBjb21wbGlhbnQgY29uZmlndXJhdGlvbiBjaGVjayBpcyByZW1vdmVkIGFuZAogIHdpbGwgZmFsbGJhY2sgdG8gZ2V0dGltZW9mZGF5IHdoZW4gdGhlIG1vbm90b25pYyBjbG9jayBpcyB1bmF2YWlsYWJsZSBhdAogIHJ1bi10aW1lLgoKLSBUaGUgY29uZmlndXJlIHByb2Nlc3Mgd2lsbCBub3cgaGFsdCB3aGVuIHNlZCwgZ3JlcCwgZWdyZXAgb3IgYXIgcHJvZ3JhbXMKICBjYW4gbm90IGJlIGZvdW5kIGFtb25nIHRoZSBkaXJlY3RvcmllcyBpbiBQQVRIIHZhcmlhYmxlLgoKRGFuaWVsIFN0ZW5iZXJnICgxIEp1bCAyMDA4KQotIFJvbGxhbmQgRHVkZW1haW5lIHByb3ZpZGVkIGZpeGVzIHRvIGdldCBsaWJjdXJsIHRvIGJ1aWxkIGZvciB0aGUgSU5URUdSSVRZCiAgb3BlcmF0aW5nIHN5c3RlbS4KCkRhbmllbCBTdGVuYmVyZyAoMzAgSnVuIDIwMDgpCi0gTWFkZSB0aGUgaW50ZXJuYWwgcHJpbnRmKCkgc3VwcG9ydCAlbGx1IHByb3Blcmx5IHRvIHByaW50IHVuc2lnbmVkIGxvbmcgbG9uZ3MuCgotIFN0ZXBoZW4gQ29sbHllciBhbmQgVG9yIEFybnRzZW4gaGVscGVkIGlkZW50aWZ5IGEgZmxhdyBpbiB0aGUgcmFuZ2UgY29kZQogIHdoaWNoIG91dHB1dCB0aGUgcmFuZ2UgdXNpbmcgYSBzaWduZWQgdmFyaWFibGUgd2hlcmUgaXQgc2hvdWxkIHJhdGhlciB1c2UKICB1bnNpZ25lZC4KCllhbmcgVHNlICgyOSBKdW4gMjAwOCkKLSBKb2huIExpZ2h0c2V5IGZpbGVkIGJ1ZyByZXBvcnQgIzE5OTkxODE6ICJDTE9DS19NT05PVE9OSUMgYWx3YXlzIGZhaWxzIG9uCiAgc29tZSBzeXN0ZW1zIiAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTk5OTE4MSkuIFRoZSBwcm9ibGVtIHdhcwogIHRoYXQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZGlkIG5vdCB1c2UgdGhlIF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0sgZmVhdHVyZSB0ZXN0CiAgbWFjcm8gd2hlbiBjaGVja2luZyBtb25vdG9uaWMgY2xvY2sgYXZhaWxhYmlsaXR5LiBUaGlzIGlzIG5vdyBmaXhlZCBhbmQgdGhlCiAgbW9ub3RvbmljIGNsb2NrIHdpbGwgbm90IGJlIHVzZWQgdW5sZXNzIHRoZSBmZWF0dXJlIHRlc3QgbWFjcm8gaXMgZGVmaW5lZAogIHdpdGggYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBpbmRpY2F0aW5nIGFsd2F5cyBzdXBwb3J0ZWQuCgpEYW5pZWwgRmFuZHJpY2ggKDI1IEp1biAyMDA4KQotIEhvbm91ciAtLXN0ZGVyciB3aXRoIHRoZSAtdiBvcHRpb24uCgotIEZpeGVkIGEgZmlsZSBoYW5kbGUgbGVhayBpbiB0aGUgY29tbWFuZCBsaW5lIGNsaWVudCBpZiBtb3JlIHRoYW4gb25lCiAgLS1zdGRlcnIgb3B0aW9uIHdhcyBnaXZlbi4KCkRhbmllbCBTdGVuYmVyZyAoMjIgSnVuIDIwMDgpCi0gRWR1YXJkIEJsb2NoIGZpbGVkIHRoZSBkZWJpYW4gYnVnIHJlcG9ydCAjNDg3NTY3CiAgKGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz00ODc1NjcpIHBvaW50aW5nIG91dCB0aGF0CiAgbGliY3VybCB1c2VkIENvbnRlbnQtUmFuZ2U6IGluc3RlYWQgb2YgUmFuZ2Ugd2hlbiBkb2luZyBhIHJhbmdlIHJlcXVlc3Qgd2l0aAogIC0taGVhZCAoQ1VSTE9QVF9OT0JPRFkpLiBUaGlzIGlzIG5vdyBmaXhlZCBhbmQgdGVzdCBjYXNlIDEwMzIgd2FzIGFkZGVkIHRvCiAgdmVyaWZ5LgogIApEYW5pZWwgRmFuZHJpY2ggKDIxIEp1biAyMDA4KQotIFN0b3BwZWQgdXNpbmcgcmFuZ2VzIGluIHNjYW5mIGNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJVthLXpdKSBzaW5jZSB0aGF0CiAgaXMgbm90IEFOU0kgQywganVzdCBhIGNvbW1vbiBleHRlbnNpb24uICBUaGlzIGNhdXNlZCBwcm9ibGVtcyBvbgogIGF0IGxlYXN0IE9wZW4gV2F0Y29tIEMuCgpZYW5nIFRzZSAoMjAgSnVuIDIwMDgpCi0gTW9kaWZpZWQgY29uZmlndXJhdGlvbiBzY3JpcHQgdG8gYWN0dWFsbHkgdmVyaWZ5IGlmIHRoZSBjb21waWxlciBpcyBnb29kCiAgZW5vdWdoIGF0IGRldGVjdGluZyBjb21waWxhdGlvbiBlcnJvcnMgb3IgYXQgbGVhc3QgaXQgaGFzIGJlZW4gcHJvcGVybHkKICBjb25maWd1cmVkIHRvIGRvIHNvLiBDb25maWd1cmF0aW9uIGhlYXZpbHkgZGVwZW5kcyBvbiB0aGlzIGNhcGFiaWxpdHksIHNvCiAgaWYgdGhpcyBjb21waWxlciBzYW5pdHkgY2hlY2sgZmFpbHMgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB3aWxsIG5vdyBmYWlsLgoKRGFuaWVsIFN0ZW5iZXJnICgyMCBKdW4gMjAwOCkKLSBQaGlsIFBlbGxvdWNob3VkIGZvdW5kIGEgY2FzZSB3aGVyZSBsaWJjdXJsIGJ1aWx0IHdpdGggTlNTIGZhaWxlZCB0bwogIGhhbmRzaGFrZSB3aXRoIGEgU1NMdjIgc2VydmVyLCBhbmQgaXQgdHVybmVkIG91dCB0byBiZSBiZWNhdXNlIGl0IGRpZG4ndAogIHJlY29nbml6ZSB0aGUgY2lwaGVyIG5hbWVkICJyYzQtbWQ1Ii4gSW4gb3VyIGxpc3QgdGhhdCBjaXBoZXIgd2FzIG5hbWVkCiAgcGxhaW5seSAicmM0Ii4gSSd2ZSBub3cgYWRkZWQgcmM0LW1kNSB0byB3b3JrIGFzIGFuIGFsaWFzIGFzIFBoaWwgcmVwb3J0ZWQKICB0aGF0IGl0IG1hZGUgdGhpbmdzIHdvcmsgZm9yIGhpbSBhZ2Fpbi4KCi0gSGFucy1KdXJnZW4gTWF5IHBvaW50ZWQgb3V0IHRoYXQgdHJ5aW5nIFNDUCBvciBTRlRQIG92ZXIgYSBTT0NLUyBwcm94eQogIGNyYXNoZWQgbGliY3VybC4gVGhpcyBpcyBub3cgYWRkcmVzc2VkIGJ5IG1ha2luZyBzdXJlIHdlIHVzZSAicGxhaW4gc2VuZCIKICBpbnRlcm5hbGx5IHdoZW4gZG9pbmcgdGhlIHNvY2tzIGhhbmRzaGFrZSBpbnN0ZWFkIG9mIHRoZSBDdXJsX3dyaXRlKCkKICBmdW5jdGlvbiB3aGljaCBpcyBkZXNpZ25lZCB0byB1c2UgdGhlICJ0YXJnZXQiIHByb3RvY29sLiBUaGF0J3MgdGhlbiBTQ1Agb3IKICBTRlRQIGluIHRoaXMgY2FzZS4gSSBhbHNvIHRvb2sgdGhlIG9wcG9ydHVuaXR5IGFuZCBjbGVhbmVkIHVwIHNvbWUgc3NoLQogIHJlbGF0ZWQgI2lmZGVmcyBpbiB0aGUgY29kZSBmb3IgcmVhZGFiaWxpdHkuCgpEYW5pZWwgU3RlbmJlcmcgKDE5IEp1biAyMDA4KQotIENocmlzdG9waGVyIFBhbG93IGZpeGVkIGEgY3VybF9tdWx0aV9zb2NrZXQoKSBpc3N1ZSB3aGljaCBwcmV2aW91c2x5IGNhdXNlZAogIGxpYmN1cmwgdG8gbm90IHRlbGwgdGhlIGFwcCBwcm9wZXJseSB3aGVuIGEgc29ja2V0IHdhcyBjbG9zZWQgKHdoZW4gdGhlIG5hbWUKICByZXNvbHZlIGRvbmUgYnkgYy1hcmVzIGlzIGNvbXBsZXRlZCkgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmUtY3JlYXRlZCBhbmQgcHV0CiAgdG8gdXNlIGFnYWluIChmb3IgdGhlIGFjdHVhbCBjb25uZWN0aW9uKS4gU2luY2UgdGhlIGNsb3N1cmUgd2lsbCBtYWtlIHRoZQogICJ3YXRjaCBzdGF0dXMiIGdldCBsb3N0IGluIHNldmVyYWwgZXZlbnQtYmFzZWQgc3lzdGVtcyBsaWJjdXJsIHdpbGwgbmVlZCB0bwogIHRlbGwgdGhlIGFwcCBhYm91dCB0aGlzIGNsb3NlL3JlLWNyZWF0ZSBjYXNlLgoKLSBEZW5nbWlud2VuIGZvdW5kIGEgYnVnIGluIHRoZSBjb25uZWN0aW9uIHJlLXVzZSBmdW5jdGlvbiB3aGVuIHVzaW5nIHRoZQogIG11bHRpIGludGVyZmFjZSB3aXRoIHBpcGVsaW5pbmcgZW5hYmxlZCBhcyBpdCB3b3VsZCB3cm9uZ2x5IGNoZWNrIGZvciwKICBkZXRlY3QgYW5kIGNsb3NlICJkZWFkIGNvbm5lY3Rpb25zIiBldmVuIHRob3VnaCB0aGF0IGNvbm5lY3Rpb24gd2FzIGFscmVhZHkKICBpbiB1c2UhCgpEYW5pZWwgRmFuZHJpY2ggKDE4IEp1biAyMDA4KQotIEFkZGVkIFNTSCBmYWlsdXJlIHRlc3QgY2FzZXMgNjI4LTYzMgoKLSBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBjb21tYW5kLWxpbmUgdG9vbCB0aGF0IGNhdXNlZCBhIHZhbGdyaW5kIGVycm9yLgoKRGFuaWVsIFN0ZW5iZXJnICgxOCBKdW4gMjAwOCkKLSBSb2IgQ3JpdHRlbmRlbiBicm91Z2h0IGEgZml4IGZvciB0aGUgTlNTIGxheWVyIHRoYXQgbWFrZXMgbGliY3VybCBubyBsb25nZXIKICBhbHdheXMgZmlyZSB1cCBhIG5ldyBjb25uZWN0aW9uIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBleGlzdGluZyBvbmUgd2hlbiB0aGUKICBtdWx0aSBpbnRlcmZhY2UgaXMgdXNlZC4gT3JpZ2luYWwgYnVnIHJlcG9ydDoKICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTQ1MDE0MAoKWWFuZyBUc2UgKDE4IEp1biAyMDA4KQotIEludGVybmFsIGNvbmZpZ3VyZSBzY3JpcHQgaW1wcm92ZW1lbnQuIE5vIGxvbmdlciBicmVhayBvdXQgb2Ygc2hlbGwgImZvciIKICBzdGF0ZW1lbnRzIGZyb20gaW5zaWRlIEFDX0ZPT19JRkVMU0UgbWFjcm9zLCBvdGhlcndpc2UgdGVtcG9yYXJ5IG1hY3JvIGZpbGVzCiAgYXJlIG5vdCBwcm9wZXJseSByZW1vdmVkLgoKRGFuaWVsIEZhbmRyaWNoICgxMiBKdW4gMjAwOCkKLSBGaXhlZCBjdXJsLWNvbmZpZyAtLWNhIHdoaWNoIHdhc24ndCBiZWluZyBleHBvcnRlZCBieSBjb25maWd1cmUuCgpEYW5pZWwgU3RlbmJlcmcgKDExIEp1biAyMDA4KQotIEkgZGlkIGEgY2xlYW51cCBvZiB0aGUgaW50ZXJuYWwgZ2VuZXJpYyBTU0wgbGF5ZXIgYW5kIGhvdyB0aGUgdmFyaW91cyBTU0wKICBsaWJyYXJpZXMgYXJlIHN1cHBvcnRlZC4gU3RhcnRpbmcgbm93LCBlYWNoIHVuZGVybHlpbmcgU1NMIGxpYnJhcnkgc3VwcG9ydAogIGNvZGUgZG9lcyBhIHNldCBvZiBkZWZpbmVzIGZvciB0aGUgMTYgZnVuY3Rpb25zIHRoZSBnZW5lcmljIGxheWVyIChzc2xnZW4uYykKICB1c2VzIChhbGwgdGhlc2UgbmV3IGZ1bmN0aW9uIGRlZmluZXMgdXNlIHRoZSBwcmVmaXggImN1cmxzc2xfIikuIFRoaXMKICBncmVhdGx5IHNpbXBsaWZpZWQgdGhlIGdlbmVyaWMgbGF5ZXIgaW4gcmVhZGFiaWxpdHkgYnkgaW52b2x2aW5nIG11Y2ggbGVzcwogICNpZmRlZnMgYW5kIG90aGVyIHByZXByb2Nlc3NvciBzdHVmZiBhbmQgc2hvdWxkIG1ha2UgaXQgZWFzaWVyIGZvciBwZW9wbGUgdG8KICBtYWtlIGxpYmN1cmwgd29yayB3aXRoIG5ldyBTU0wgbGlicmFyaWVzLgoKICBIb3BlZnVsbHkgSSBjYW4gbGF0ZXIgb24gZG9jdW1lbnQgdGhlc2UgMTYgZnVuY3Rpb25zIHNvbWV3aGF0IGFzIHdlbGwuCgogIEkgYWxzbyBtYWRlIG1vc3Qgb2YgdGhlIGludGVybmFsIFNTTC1kZXBlbmRlbnQgZnVuY3Rpb25zICh1c2luZyBDdXJsX3NzbF8KICBwcmVmaXgpICNkZWZpbmVkIHRvIG5vdGhpbmcgd2hlbiBubyBTU0wgc3VwcG9ydCBpcyByZXF1ZXN0ZWQgLSBwcmV2aW91c2x5CiAgdGhleSB3b3VsZCB1bm5lY2Vzc2FyaWx5IGNhbGwgbW9zdGx5IGVtcHR5IGZ1bmN0aW9ucy4KCiAgSSd2ZSBidWlsdCBsaWJjdXJsIHdpdGggT3BlblNTTCBhbmQgR251VExTIGFuZCB3aXRob3V0IFNTTCB0byB0ZXN0IHRoaXMgYW5kCiAgSSd2ZSBhbHNvIHRyaWVkIGJ1aWxkaW5nIHdpdGggTlNTIGJ1dCB0aGUgTlNTIHN1cHBvcnQgaXMgYSBteXN0ZXJ5IHRvIG1lIGFuZAogIEkgZmFpbGVkIHRvIGJ1aWxkIGxpYmN1cmwgd2l0aCB0aGUgTlNTIGxpYnJhcmllcyBJIGhhdmUgaW5zdGFsbGVkLiBXZSByZWFsbHkKICBzaG91bGQgQSkgaW1wcm92ZSBvdXIgY29uZmlndXJlIHNjcmlwdCB0byBkZXRlY3QgdW5zdWl0YWJsZSBOU1MgdmVyc2lvbnMKICBhbHJlYWR5IGF0IGNvbmZpZ3VyZSB0aW1lIGFuZCBCKSBkb2N1bWVudCBvdXIgcmVxdWlyZW1lbnRzIGJldHRlciBmb3IgdGhlCiAgU1NMIGxpYnJhcmllcy4KCkRhbmllbCBTdGVuYmVyZyAoMTAgSnVuIDIwMDgpCi0gSSBtYWRlIHRoZSBPcGVuU1NMIGNvZGUgYnVpbGQgYWdhaW4gd2l0aCBPcGVuU1NMIDAuOS42LiBUaGUgQ1JMRklMRQogIGZ1bmN0aW9uYWxpdHkga2lsbGVkIGl0IGR1ZSB0byBpdHMgdW5jb25kaXRpb25hbCB1c2Ugb2YKICBYNTA5X1NUT1JFX3NldF9mbGFncy4uLgoKRGFuaWVsIFN0ZW5iZXJnICg4IEp1biAyMDA4KQotIER1ZSB0byB0aGUgdGhyZWUgbmV3IGxpYmN1cmwgY2hhbmdlcyBhbmQgdGhlIG1hc3NpdmUgY29tbWFuZCBsaW5lIG9wdGlvbgogIGNoYW5nZSBJIGRlY2lkZWQgd2UnbGwgbWFyayBpdCBieSBidW1waW5nIHRoZSBuZXh0IHJlbGVhc2UgbnVtYmVyIHRvIDcuMTkuMCEKCi0gY3VybCB0aGUgdG9vbCBub3cgZGVhbHMgd2l0aCBpdHMgY29tbWFuZCBsaW5lIG9wdGlvbnMgc29tZXdoYXQgZGlmZmVyZW50bHkhCiAgQWxsIGJvb2xlYW4gb3B0aW9ucyAoc3VjaCBhcyAtTywgLUksIC12IGV0YyksIGJvdGggc2hvcnQgYW5kIGxvbmcgdmVyc2lvbnMsCiAgbm93IGFsd2F5cyBzd2l0Y2ggb24vZW5hYmxlIHRoZSBvcHRpb24gbmFtZWQuIFVzaW5nIHRoZSBzYW1lIG9wdGlvbiBtdWx0aXBsZQogIHRpbWVzIHRodXMgbWFrZSBubyBkaWZmZXJlbmNlLiBUbyBzd2l0Y2ggb2ZmIG9uZSBvZiB0aG9zZSBvcHRpb25zLCB5b3UgbmVlZAogIHRvIHVzZSB0aGUgbG9uZyB2ZXJzaW9uIG9mIHRoZSBvcHRpb24gYW5kIHR5cGUgLS1uby1PUFRJT04uIExpa2UgdG8gZGlzYWJsZQogIHZlcmJvc2UgbW9kZSB5b3UgdXNlIC0tbm8tdmVyYm9zZSEKCi0gQWRkZWQgLS1yZW1vdGUtbmFtZS1hbGwgdG8gY3VybCwgd2hpY2ggaWYgdXNlZCBjaGFuZ2VzIHRoZSBkZWZhdWx0IGZvciBhbGwKICBnaXZlbiBVUkxzIHRvIGJlIGRlYWx0IHdpdGggYXMgaWYgLU8gaXMgdXNlZC4gU28gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0aGF0CiAgZm9yIGEgc3BlY2lmaWMgVVJMIGFmdGVyIC0tcmVtb3RlLW5hbWUtYWxsIGhhcyBiZWVuIHVzZWQsIHlvdSBtdXNlIHVzZSAtbyAtCiAgb3IgLS1uby1yZW1vdGUtbmFtZS4KCkRhbmllbCBTdGVuYmVyZyAoNiBKdW4gMjAwOCkKLSBBeGVsIFRpbGxlcXVpbiBhbmQgQXJuYXVkIEViYWxhcmQgYWRkZWQgc3VwcG9ydCBmb3IgQ1VSTE9QVF9JU1NVRVJDRVJULCBmb3IKICBPcGVuU1NMLCBOU1MgYW5kIEdudVRMUy1idWlsdCBsaWJjdXJscy4KCi0gQXhlbCBUaWxsZXF1aW4gYW5kIEFybmF1ZCBFYmFsYXJkIGFkZGVkIHN1cHBvcnQgZm9yIENVUkxPUFRfQ1JMRklMRSwgZm9yCiAgT3BlblNTTCwgTlNTIGFuZCBHbnVUTFMtYnVpbHQgbGliY3VybHMuCgotIEFkZGVkIENVUkxJTkZPX1BSSU1BUllfSVAgYXMgYSBuZXcgaW5mb3JtYXRpb24gcmV0cmlldmFibGUgd2l0aAogIGN1cmxfZWFzeV9nZXRpbmZvLiBJdCByZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cmluZyB3aXRoIHRoZSBtb3N0IHJlY2VudGx5CiAgdXNlZCBJUCBhZGRyZXNzLiBNb2RpZmllZCB0ZXN0IGNhc2UgNTAwIHRvIGFsc28gdmVyaWZ5IHRoaXMgZmVhdHVyZS4gVGhlCiAgaW1wbGVtZW50aW5nIG9mIHRoaXMgZmVhdHVyZSB3YXMgc3BvbnNvcmVkIGJ5IExlbm55IFJhY2hpdHNreSBhdCBOZXVTdGFyLgoKVmVyc2lvbiA3LjE4LjIgKDQgSnVuZSAyMDA4KQoKRGFuaWVsIEZhbmRyaWNoICgzIEp1biAyMDA4KQotIEZpeGVkIGEgcHJvYmxlbSB3aGVyZSB0ZWxuZXQgZGF0YSB3b3VsZCBiZSBsb3N0IGlmIGFuIEVXT1VMREJMT0NLCiAgY29uZGl0aW9uIHdlcmUgZW5jb3VudGVyZWQuCgpNYXJ0eSBLdWhydCAoMSBKdW4gMjAwOCkKLSBVcGRhdGVkIG1haW4uYyB0byByZXR1cm4gQ1VSTEVfT0sgaWYgUEFSQU1fSEVMUF9SRVFVRVNURUQgd2FzIHJldHVybmVkCiAgZnJvbSBnZXRwYXJhbWV0ZXIgaW5zdGVhZCBvZiBDVVJMRV9GQUlMRURfSU5JVC4gIE5vIHBvaW50IGluIHJldHVybmluZwogIGFuIGVycm9yIGlmIC0taGVscCBvciAtLXZlcnNpb24gd2VyZSByZXF1ZXN0ZWQuCgpEYW5pZWwgU3RlbmJlcmcgKDI4IE1heSAyMDA4KQotIEVtaWwgUm9tYW51cyBmb3VuZCBhIHByb2JsZW0gYW5kIGhlbHBlZCBtZSByZXBlYXQgaXQuIEl0IG9jY3VyZWQgd2hlbiB1c2luZwogIHRoZSBjdXJsX211bHRpX3NvY2tldCgpIEFQSSB3aXRoIEhUVFAgcGlwZWxpbmluZyBlbmFibGVkIGFuZCBjb3VsZCBsZWFkIHRvCiAgdGhlIHBpcGVsaW5lIGJhc2ljYWxseSBzdGFsbGluZyBmb3IgYSB2ZXJ5IGxvbmcgcGVyaW9kIG9mIHRpbWUgdW50aWwgaXQgdG9vawogIG9mZiBhZ2Fpbi4KCi0gSmVmZiBXZWJlciByZXBvcnRlZCBtZW1vcnkgbGVha3Mgd2l0aCBhYm9ydGVkIFNDUCBhbmQgU0ZUUCB0cmFuc2ZlcnMgYW5kCiAgcHJvdmlkZWQgZXhjZWxsZW50IHJlcGVhdCByZWNpcGVzLiBJIGZpeGVkIHRoZSBjYXNlcyBJIG1hbmFnZWQgdG8gcmVwcm9kdWNlCiAgYnV0IEplZmYgc3RpbGwgZ290IHNvbWUgKFNDUCkgcHJvYmxlbXMgZXZlbiBhZnRlciB0aGVzZSBmaXhlczoKICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDgtMDUvMDM0Mi5odG1sCgpEYW5pZWwgU3RlbmJlcmcgKDI2IE1heSAyMDA4KQotIEJ1ZyByZXBvcnQgIzE5NzMzNTIgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE5NzMzNTIpIGlkZW50aWZpZWQKICBob3cgdGhlIEhUVFAgcmVkaXJlY3QgZm9sbG93aW5nIGNvZGUgZGlkbid0IHByb3Blcmx5IGZvbGxvdyB0byBhIG5ldyBVUkwgaWYKICB0aGUgbmV3IHVybCB3YXMgYnV0IGEgcXVlcnkgc3RyaW5nIHN1Y2ggYXMgIkxvY2F0aW9uOiA/bW9vPWZvbyIuIFRlc3QgY2FzZQogIDEwMzEgd2FzIGFkZGVkIHRvIHZlcmlmeSB0aGlzIGZpeC4KCi0gQW5kcmVhcyBGYWVyYmVyIGFuZCBTY290dCBNY0NyZWFyeSBtYWRlIChsaWIpY3VybCBidWlsZCBmb3IgdGhlIEhhaWt1IE9TLiAKCllhbmcgVHNlICgyNiBNYXkgMjAwOCkKLSBEYXZpZCBSb3NlbnN0cmF1Y2ggcmVwb3J0ZWQgdGhhdCBoZWFkZXIgZmlsZXMgc3BuZWdvaGVscC5oIGFuZAogIG9wZW5zc2wvb2JqZWN0cy5oIHdlcmUgbmVlZGVkIHRvIGNvbXBpbGUgU1BORUdPIHN1cHBvcnQuCgpEYW5pZWwgRmFuZHJpY2ggKDIyIE1heSAyMDA4KQotIE1hZGUgc3VyZSB0byBwYXNzIGxvbmdzIGluIHRvIGN1cmxfZWFzeV9zZXRvcHQgd2hlcmUgbmVjZXNzYXJ5IGluIHRoZQogIGV4YW1wbGUgcHJvZ3JhbXMgYW5kIGxpYnRlc3QgY29kZS4KCkRhbmllbCBTdGVuYmVyZyAoMTkgTWF5IDIwMDgpCi0gV2hlbiB0cnlpbmcgdG8gcmVwZWF0IGEgbXVsdGkgaW50ZXJmYWNlIHByb2JsZW0gSSBmZWxsIG92ZXIgYSBmZXcgbXVsdGkKICBpbnRlcmZhY2UgcHJvYmxlbXM6CgogIG8gd2l0aCBwaXBlbGluaW5nIGRpc2FibGVkLCB0aGUgc3RhdGUgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBXQUlURE8gYnV0CiAgICByYXRoZXIgZ28gc3RyYWlnaHQgdG8gRE8KCiAgbyB3ZSBoYWQgbXVsdGlwbGUgc3RhdGVzIGZvciB3aGljaCB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gcmV0dXJuZWQgbm8gc29ja2V0CiAgICBhdCBhbGwgdG8gd2FpdCBmb3IsIHdpdGggdGhlIGVmZmVjdCB0aGF0IGxpYmN1cmwgY2FsbHMgdGhlIHNvY2tldCBjYWxsYmFjawogICAgKHdoZW4gY3VybF9tdWx0aV9zb2NrZXQoKSBpcyB1c2VkKSB3aXRoIFJFTU9WRSBwcmVtYXR1cmVseSAoYXMgaXQgd291bGQgYmUKICAgIGFkZGVkIGFnYWluIHdpdGhpbiB2ZXJ5IHNob3J0bHkpCgogIG8gd2hlbiBpbiBETyBhbmQgRE9JTkcgc3RhdGVzLCB0aGUgSFRUUCBhbmQgSFRUUFMgcHJvdG9jb2wgaGFuZGxlciBmdW5jdGlvbnMKICAgIGRpZG4ndCByZXR1cm4gdGhhdCB0aGUgc29ja2V0IHNob3VsZCBiZSB3YWl0ZWQgZm9yIHdyaXRpbmcsIGJ1dCBpbnN0ZWFkIGl0CiAgICB3YXMgdHJlYXRlZCBhcyBpZiBubyBzb2NrZXQgd2FzIG5lZWRpbmcgbW9uaXRvcmluZyBzbyBhZ2FpbiBSRU1PVkUgd2FzCiAgICBjYWxsZWQgcHJlbWF0dXJlbHkuCgpEYW5pZWwgU3RlbmJlcmcgKDEzIE1heSAyMDA4KQotIEFkZGVkIHRlc3QgY2FzZSA1NTYgdGhhdCB1c2VzIGN1cmxfZWFzeV9zZW5kKCkgYW5kIGN1cmxfZWFzeV9yZWN2KCkKCkRhbmllbCBTdGVuYmVyZyAoOSBNYXkgMjAwOCkKLSBJbnRyb2R1Y2luZyBjdXJsX2Vhc3lfc2VuZCgpIGFuZCBjdXJsX2Vhc3lfcmVjdigpLiBUaGV5IGNhbiBiZSB1c2VkIHRvIHNlbmQKICBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgYSBjb25uZWN0aW9uIHByZXZpb3VzbHkgc2V0dXAgd2l0aCBjdXJsX2Vhc3lfcGVyZm9ybSgpCiAgYW5kIGl0cyBDVVJMT1BUX0NPTk5FQ1RfT05MWSBvcHRpb24uIFRoZSBzZW5kcmVjdi5jIGV4YW1wbGUgd2FzIGFkZGVkIHRvCiAgc2hvdyBob3cgdGhleSBjYW4gYmUgdXNlZC4KCllhbmcgVHNlICg5IE1heSAyMDA4KQotIEludGVybmFsIHRpbWUgZGlmZmVyZW5jZXMgbm93IHVzZSBtb25vdG9uaWMgdGltZSBzb3VyY2UgaWYgYXZhaWxhYmxlLgogIFRoaXMgYWxzbyBpbXBsaWVzIHRoZSByZW1vdmFsIG9mIHRoZSB3aW5tbS5saWIgZGVwZW5kZW5jeSBmb3IgV0lOMzIuCgpEYW5pZWwgU3RlbmJlcmcgKDkgTWF5IDIwMDgpCi0gU3RlZmFuIEtyYXVzZSByZXBvcnRlZCBhIGJ1c3ktbG9vcGluZyBjYXNlIHdoZW4gdXNpbmcgdGhlIG11bHRpIGludGVyZmFjZQogIGFuZCBkb2luZyBDT05ORUNUIHRvIGEgcHJveHkuIFRoZSBhcHAgd291bGQgdGhlbiBidXN5LWxvb3AgdW50aWwgdGhlIHByb3h5CiAgY29tcGxldGVkIGl0cyByZXNwb25zZS4KCk1pY2hhbCBNYXJlayAoOSBNYXkgMjAwOCkKLSBNYWtlIEN1cmxfd3JpdGUgYW5kIGl0J3MgY2FsbGVlcyBhY2NlcHQgYSBjb25zdCBwb2ludGVyLCBpbiBwcmVwYXJhdGlvbgogIG9mIHRldGV0ZXN0J3MgcGF0Y2ggZm9yIGN1cmxfZWFzeV9zZW5kKCkKCkRhbmllbCBTdGVuYmVyZyAoNyBNYXkgMjAwOCkKLSBMaWFtIEhlYWx5IGZpbGVkIHRoZSBkZWJpYW4gYnVnIHJlcG9ydCAjNDgwMDQ0CiAgKGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz00ODAwNDQpIGlkZW50aWZ5aW5nIGEKICBzZWdmYXVsdCB3aGVuIHVzaW5nIGtyYjUgZnRwLCBidXQgdGhlIGtyYjQgY29kZSBoYWQgdGhlIHNhbWUgcHJvYmxlbS4KCllhbmcgVHNlICg3IE1heSAyMDA4KQotIENocmlzdG9waGVyIFBhbG93IHByb3ZpZGVkIHRoZSBwYXRjaCAoZWRpdGVkIGJ5IG1lKSB0aGF0IGludHJvZHVjZXMgdGhlCiAgdXNlIG9mIG1pY3Jvc2Vjb25kIHJlc29sdXRpb24ga2V5cyBmb3IgaW50ZXJuYWwgc3BsYXkgdHJlZXMuCgpEYW5pZWwgU3RlbmJlcmcgKDQgTWF5IDIwMDgpCi0gWXVyaXkgU29zb3YgcG9pbnRlZCBvdXQgYSBjb25maWd1cmUgZml4IGZvciBkZXRlY3RpbmcgYy1hcmVzIHdoZW4gdGhhdCBpcwogIGJ1aWx0IGRlYnVnLWVuYWJsZWQuCgpEYW5pZWwgU3RlbmJlcmcgKDMgTWF5IDIwMDgpCi0gQmVuIFZhbiBIb2YgZmlsZWQgYnVnIHJlcG9ydCAjMTk0NTI0MDogImxpYmN1cmwgc29tZXRpbWVzIHNlbmRzIGJvZHkgdHdpY2UKICB3aGVuIHVzaW5nIENVUkxfQVVUSF9BTlkiIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xOTQ1MjQwKS4KICBUaGUgcHJvYmxlbSB3YXMgdGhhdCB3aGVuIGxpYmN1cmwgcmV3b3VuZCBhIHN0cmVhbSBtZWFudCBmb3IgdXBsb2FkIHdoZW4gaXQKICB3b3VsZCBwcmVwYXJlIGZvciBhIHNlY29uZCByZXF1ZXN0LCBpdCBjb3VsZCBhY2NpZGVudGFsbHkgY29udGludWUgdGhlCiAgc2VuZGluZyBvZiB0aGUgcmV3b3VuZCBkYXRhIG9uIHRoZSBmaXJzdCByZXF1ZXN0IGluc3RlYWQgb2Ygb24gdGhlIHNlY29uZC4KICBCZW4gYWxzbyBwcm92aWRlZCB0ZXN0IGNhc2UgMTAzMCB0aGF0IHZlcmlmaWVzIHRoaXMgZml4LgoKRGFuaWVsIFN0ZW5iZXJnICgzIE1heSAyMDA4KQotIEplYW4tRnJhbmNvaXMgQmVydHJhbmQgcmVwb3J0ZWQgYSBsaWJjdXJsIGNyYXNoIHdpdGggQ1VSTE9QVF9UQ1BfTk9ERUxBWQogIHNpbmNlIGxpYmN1cmwgdXNlZCBnZXRwcm90b2J5bmFtZSgpIGFuZCB0aGF0IGlzbid0IHRocmVhZC1zYWZlLiBXZSBub3cKICBzd2l0Y2hlZCB0byB1c2UgSVBQUk9UT19UQ1AgdW5jb25kaXRpb25hbGx5LCBidXQgcGVyaGFwcyB0aGUgcHJvcGVyIGZpeCBpcwogIHRvIGRldGVjdCB0aGUgdGhyZWFkLXNhZmUgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gYW5kIHVzZSB0aGF0LgogIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwOC0wNS8wMDExLmh0bWwKCkRhbmllbCBTdGVuYmVyZyAoMSBNYXkgMjAwOCkKLSBCYXJ0IFdoaXRlbGV5IHByb3ZpZGVkIGEgcGF0Y2ggdGhhdCBtYWRlIGxpYmN1cmwgd29yayBwcm9wZXJseSB3aGVuIGFuIGFwcAogIHVzZXMgdGhlIENVUkxPUFRfT1BFTlNPQ0tFVEZVTkNUSU9OIGNhbGxiYWNrIHRvIGNyZWF0ZSBhIHVuaXggZG9tYWluIHNvY2tldAogIHRvIGEgaHR0cCBzZXJ2ZXIuCgpEYW5pZWwgU3RlbmJlcmcgKDI5IEFwciAyMDA4KQotIFRvIG1ha2UgaXQgZWFzaWVyIGZvciBhcHBsaWNhdGlvbnMgdGhhdCB3YW50IGxvdHMgb2YgbWFnaWMgc3R1ZmYgZG9uZSBvbgogIHJlZGlyZWN0aW9ucyBhbmQgdGh1cyBjYW5ub3QgdXNlIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gZWFzaWx5LCB3ZSBub3cKICBpbnRyb2R1Y2UgdGhlIG5ldyBDVVJMSU5GT19SRURJUkVDVF9VUkwgb3B0aW9uIHRoYXQgbGV0cyBhcHBsaWNhdGlvbnMKICBleHRyYWN0IHRoZSBVUkwgbGliY3VybCB3b3VsZCd2ZSByZWRpcmVjdGVkIHRvIGlmIGl0IGhhZCBiZWVuIHRvbGQgdG8uIFRoaXMKICB0aGVuIGVuYWJsZXMgdGhlIGFwcGxpY2F0aW9uIHRvIGNvbnRpbnVlIHRvIHRoYXQgVVJMIGFzIGl0IHRoaW5rcyBpcwogIHN1aXRhYmxlLCB3aXRob3V0IGhhdmluZyB0byByZS1pbXBsZW1lbnQgdGhlIG1hZ2ljIG9mIGNyZWF0aW5nIHRoZSBuZXcgVVJMCiAgZnJvbSB0aGUgTG9jYXRpb246IGhlYWRlciBldGMuIFRlc3QgMTAyOSB2ZXJpZmllcyBpdC4KCllhbmcgVHNlICgyOSBBcHIgMjAwOCkKLSBJbXByb3ZlZCBlYXN5IGludGVyZmFjZSByZXNvbHZpbmcgdGltZW91dCBoYW5kbGluZyBpbiBjLWFyZXMgZW5hYmxlZCBidWlsZHMKCkRhbmllbCBGYW5kcmljaCAoMjggQXByIDIwMDgpCi0gQWRkZWQgdGVzdCAxMDI4IHRvIHRlc3QgYW4gSFRUUCByZWRpcmVjdCB0byBhIEZUUCBVUkwuCgpEYW5pZWwgU3RlbmJlcmcgKDI4IEFwciAyMDA4KQotIE5vcmJlcnQgRnJlc2UgZmlsZWQgYnVnIHJlcG9ydCAjMTk1MTU4ODogIlByb2JsZW0gd2l0aCBjdXJsZnRwZnMgYW5kCiAgbGliY3VybCIgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE5NTE1ODgpIHdoaWNoIHNlZW1zIHRvIGJlIGFuCiAgaWRlbnRpY2FsIHJlcG9ydCB0byB3aGF0IERlbmlzIEdvbG92YW4gcmVwb3J0ZWQgaW4KICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDgtMDIvMDEwOC5odG1sIFRoZSBGVFAgY29kZSBkaWRuJ3QgcmVzZXQgdGhlCiAgdXNlci9wYXNzd29yZCBwb2ludGVycyBwcm9wZXJseSBldmVuIHRob3VnaCB0aGVyZSBtaWdodCd2ZSBiZWVuIGEgbmV3CiAgc3RydWN0L2Njb25uZWN0aW9uIGdldHRpbmcgdXNlZC4KCkRhbmllbCBTdGVuYmVyZyAoMjYgQXByIDIwMDgpCi0gUmV2ZXJ0ZWQgYmFjayB0byB1c2UgYXV0b21ha2UgMS45LjYgaW4gdGhlIG5leHQgcmVsZWFzZSAoZnJvbSBhdXRvbWFrZQogIDEuMTAuMSkgc2luY2UgaXQgKnN0aWxsKiBzdWZmZXJzIGZyb20gU29sYXJpcy1yZWxhdGVkIGJ1Z3MuIE91ciBwcmV2aW91cwogIGF1dG9tYWtlIDEuMTAgcHJvYmxlbSB3YXMgcmVwb3J0ZWQgaW4gYnVnICMxNzAxMzYwCiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE3MDEzNjApIGFuZCB0aGlzIHJlY2VudCBwcm9ibGVtIHdhcwogIGJ1ZyAjMTk0NDgyNSAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTk0NDgyNSkuIEkgaGF2ZSBub3QKICBwZXJzb25hbGx5IGFwcHJvYWNoZWQgdGhlIGF1dG9tYWtlIHRlYW0gYWJvdXQgZWl0aGVyIG9uZSBvZiB0aGVzZSBidXQgSQogIGZpZ3VyZSB3ZSBuZWVkIGEgU29sYXJpcyAxMCBndXkgdG8gZG8gaXQhCiAgCllhbmcgVHNlICgyNSBBcHIgMjAwOCkKLSBBZGRlZCAndGltZW91dCcgYW5kICdkZWxheScgYXR0cmlidXRlcyBzdXBwb3J0IGZvciB0aGUgdGVzdCBoYXJuZXNzCiAgPGNvbW1hbmQ+IHN1YnNlY3Rpb24uCgpEYW5pZWwgRmFuZHJpY2ggKDI0IEFwciAyMDA4KQotIE1hZGUgLS1zdGRlcnIgYWJsZSB0byByZWRpcmVjdCBhbGwgc3RkZXJyIG1lc3NhZ2VzLgoKWWFuZyBUc2UgKDIzIEFwciAyMDA4KQotIEltcHJvdmUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGVzdCBoYXJuZXNzIHJ1bnRlc3RzLnBsIHNjcmlwdAogIGFuZCB0ZXN0IGhhcm5lc3Mgc2VydmVycyB0byBtaW5pbWl6ZSByaXNrIG9mIGZhbHNlIHRlc3QgZmFpbHVyZXMuCgpEYW5pZWwgRmFuZHJpY2ggKDIyIEFwciAyMDA4KQotIEFkZGVkIHN1cHBvcnQgZm9yIHJ1bm5pbmcgb24gU3ltYmlhbiBPUy4KCkRhbmllbCBGYW5kcmljaCAoMTggQXByIDIwMDgpCi0gQWRkZWQgdGVzdCBjYXNlcyAxMDI2IGFuZCAxMDI3IHRvIGRvIHNvbWUgcnVkaW1lbnRhcnkgdGVzdHMgb24gdGhlIC0tbWFudWFsCiAgYW5kIC0taGVscCBvcHRpb25zLgoKTWljaGFsIE1hcmVrICgxNCBBcHIgMjAwOCkKLSBhbGxvdyBkaXNhYmxpbmcgdGhlIHR5cGVjaGVja2VyIGJ5IGRlZmluaW5nIENVUkxfRElTQUJMRV9UWVBFQ0hFQ0ssIGFzCiAgZGlzY3Vzc2VkIGluIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwOC0wNC8wMjkxLmh0bWwKCkRhbmllbCBTdGVuYmVyZyAoMTQgQXByIDIwMDgpCi0gU3RlZmFuIEtyYXVzZSByZXBvcnRlZCBhIGNhc2Ugd2hlcmUgdGhlIE9wZW5TU0wgaGFuZHNoYWtlIHBoYXNlIHdhc24ndAogIHByb3Blcmx5IGFja25vd2xlZGdpbmcgdGhlIHRpbWVvdXQgdmFsdWVzLCBsaWtlIGlmIHlvdSBwdWxsZWQgdGhlIG5ldHdvcmsKICBwbHVnIGluIHRoZSBtaWRzdCBvZiBpdC4KCi0gQW5kcmUgR3VpYmVydCBkZSBCcnVldCBmaXhlZCBhIHNlY29uZCBjYXNlIG9mIG5vdCBjaGVja2luZyB0aGUgbWFsbG9jKCkKICByZXR1cm4gY29kZSBpbiB0aGUgTmVnb3RpYXRlIGNvZGUuCgotIFNhbmRvciBGZWxkaSByZXBvcnRlZCBidWcgIzE5NDIwMjIKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTk0MjAyMikgcG9pbnRpbmcgb3V0IGEgbWlzdGFrZSBpbiB0aGUKICBsaWIvTWFrZWZpbGUudmNbNjhdIG1ha2VmaWxlcycgcmVsZWFzZS1zc2wtZGxsIHRhcmdldC4KCi0gQnJvY2sgTm9sYW5kIHJlcG9ydGVkIHRoYXQgY3VybCBiZWhhdmVkIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGljaCBvcmRlcgogIHlvdSB1c2VkIC1pIGFuZCAtSS4KCkRhbmllbCBTdGVuYmVyZyAoMTIgQXByIDIwMDgpCi0gQW5kcmUgR3VpYmVydCBkZSBCcnVldCBmb3VuZCBhbmQgZml4ZWQgYSBjYXNlIHdoZXJlIG1hbGxvYygpIHdhcyBjYWxsZWQgYnV0CiAgd2FzIG5vdCBjaGVja2VkIGZvciBhIE5VTEwgcmV0dXJuLCBpbiB0aGUgTmVnb3RpYXRlIGNvZGUuCgpEYW5pZWwgRmFuZHJpY2ggKDkgQXByIDIwMDgpCi0gQWRkZWQgdGVzdCBjYXNlcyAxMDI0ICYgMTAyNSB0byB0ZXN0IGEgc2NlbmFyaW8gc2ltaWxhciB0byB0aGUgb25lIHJlcG9ydGVkCiAgYnkgQmVuIENvbWJlZSB3aGVyZSBsaWJjdXJsIHdvdWxkIHNlbmQgdGhlIHdyb25nIGNvb2tpZSB0byBhIHJlZGlyZWN0ZWQKICBzZXJ2ZXIuICBsaWJjdXJsIHdhcyBkb2luZyB0aGUgcmlnaHQgdGhpbmcgaW4gdGhlc2UgdGVzdCBjYXNlcy4KCk1pY2hhbCBNYXJlayAoNyBBcHIgMjAwOCkKLSBGaXggdGhlIE1JVCAvIEhlaW1kYWwgY2hlY2sgZm9yIGdvb2Q6CiAgRGVmaW5lIEhBVkVfR1NTTUlUIGlmIDxnc3NhcGkve2dzc2FwaS5oLGdzc2FwaV9nZW5lcmljLmgsZ3NzYXBpX2tyYjUuaH0+IGFyZQogIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGRlZmluZSBIQVZFX0dTU0hFSU1EQUwgaWYgPGdzc2FwaS5oPiBpcyBhdmFpbGFibGUuCiAgCiAgT25seSBkZWZpbmUgR1NTX0NfTlRfSE9TVEJBU0VEX1NFUlZJQ0UgdG8gZ3NzX250X3NlcnZpY2VfbmFtZSBpZgogIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFIGlzbid0IGRlY2xhcmVkIGJ5IHRoZSBnc3NhcGkgaGVhZGVycy4gVGhpcyBzaG91bGQKICBhdm9pZCBicmVha2FnZSBpbiBjYXNlIHdlIHdyb25nbHkgcmVjb2duaXplIEhlaW1kYWwgYXMgTUlUIGFnYWluLgoKRGFuaWVsIFN0ZW5iZXJnICg1IEFwciAyMDA4KQotIEFsZXhleSBTaW1hayBmaXhlZCBjdXJsX2Vhc3lfcmVzZXQoKSB0byByZXNldCB0aGUgbWF4IHJlZGlyZWN0IGxpbWl0IHByb3Blcmx5CgotIEJhc2VkIG9uIHRoZSBEZWJpYW4gYnVnIHJlcG9ydCAjNDc0MjI0IHRoYXQgY29tcGxhaW5lZCBhYm91dCB0aGUgRlRQIGVycm9yCiAgbWVzc2FnZSB3aGVuIGxpYmN1cmwgZG9lc24ndCBnZXQgYSAyMjAgYmFjayBpbW1lZGlhdGVseSBvbiBjb25uZWN0LCBJIG5vdwogIGNoYW5nZWQgaXQgdG8gYmUgbW9yZSBzcGVjaWZpYyBvbiB3aGF0IHRoZSBwcm9ibGVtIGlzLiBBbHNvIHdvcnRoIG5vdGljaW5nOgogIHdoaWxlIHRoZSBidWcgcmVwb3J0IGNvbnRhaW5zIGFuIGV4YW1wbGUgd2hlcmUgdGhlIHJlc3BvbnNlIGlzOgoKICAgIDQyMSBUaGVyZSBhcmUgdG9vIG1hbnkgY29ubmVjdGVkIHVzZXJzLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyCgogIHdlIGNhbm5vdCBhc3N1bWUgdGhhdCB0aGUgZXJyb3IgbWVzc2FnZSB3aWxsIGFsd2F5cyBiZSB0aGlzIHJlYWRhYmxlIG5vcgogIHRoYXQgaXQgZml0cyB3aXRoaW4gYSBwYXJ0aWN1bGFyIGJvdW5kYXJ5IGV0Yy4KCkRhbmllbCBGYW5kcmljaCAoMyBBcHIgMjAwOCkKLSBBZGRlZCB0ZXN0NjI3IHRvIHRlc3QgU0ZUUCB3aXRoIENVUkxPUFRfTk9CT0RZCgpEYW5pZWwgU3RlbmJlcmcgKDMgQXByIDIwMDgpCi0gU2V0dGluZyBDVVJMT1BUX05PQk9EWSB0byBGQUxTRSB3aWxsIG5vdyBzd2l0Y2ggdGhlIEhUVFAgcmVxdWVzdCBtZXRob2QgdG8KICBHRVQgc2ltcGx5IGJlY2F1c2UgcHJldmlvdXNseSB3aGVuIHlvdSBzZXQgQ1VSTE9QVF9OT0JPRFkgdG8gVFJVRSBmaXJzdCBhbmQKICB0aGVuIEZBTFNFIHlvdSdkIGVuZCB1cCBpbiBhIGJyb2tlbiBzdGF0ZSB3aGVyZSBhIEhUVFAgcmVxdWVzdCB3b3VsZCBkbyBhCiAgSEVBRCBieSBzdGlsbCBhY3QgYSBsb3QgbGlrZSBmb3IgYSBHRVQgYW5kIGhhbmcgd2FpdGluZyBmb3IgdGhlIGNvbnRlbnQgZXRjLgoKLSBTY290dCBCYXJyZXR0IGFkZGVkIHN1cHBvcnQgZm9yIENVUkxPUFRfTk9CT0RZIG92ZXIgU0ZUUAoKRGFuaWVsIEZhbmRyaWNoICgzIEFwciAyMDA4KQotIE1hZGUgc3VyZSB0aGF0IGN1cmxfZ2xvYmFsX2luaXQgaXMgY2FsbGVkIGluIGFsbCB0aGUgbXVsdGl0aHJlYWRlZAogIGV4YW1wbGUgcHJvZ3JhbXMuCgpNaWNoYWwgTWFyZWsgKDMxIE1hciAyMDA4KQotIFJlbW92ZWQgdGhlIGdlbmVyYXRlZCBjYS1idW5kbGUuaCBmaWxlLiBUaGUgdmVyYmF0aW0gdmFsdWUgb2YgJGNhIGFuZAogICRjYXBhdGggaXMga25vd24gdG8gY29uZmlndXJlLCBzbyBpdCBjYW4gYmUgZGVmaW5lZCBpbiBjb25maWcuaCBpbnN0ZWFkLgoKRGFuaWVsIFN0ZW5iZXJnICgzMSBNYXIgMjAwOCkKLSBBZGRlZCBDVVJMRk9STV9TVFJFQU0gYXMgYSBzdXBwb3J0ZWQgb3B0aW9uIHRvIGN1cmxfZm9ybWFkZCgpIHRvIGFsbG93IGFuCiAgYXBwbGljYXRpb24gdG8gcHJvdmlkZSBkYXRhIGZvciBhIG11bHRpcGFydCB3aXRoIHRoZSByZWFkIGNhbGxiYWNrLiBOb3RlCiAgdGhhdCB0aGUgc2l6ZSBuZWVkcyB0byBiZSBwcm92aWRlZCB3aXRoIENVUkxGT1JNX0NPTlRFTlRTTEVOR1RIIHdoZW4gdGhlCiAgc3RyZWFtIG9wdGlvbiBpcyB1c2VkLiBUaGlzIGZlYXR1cmUgaXMgdmVyaWZpZWQgYnkgdGhlIG5ldyB0ZXN0IGNhc2UKICA1NTQuIFRoaXMgZmVhdHVyZSB3YXMgc3BvbnNvcmVkIGJ5IFhwb25hdXQuCgpEYW5pZWwgRmFuZHJpY2ggKDMwIE1hciAyMDA4KQotIENoYW5nZWQgdGhlIG1ha2VmaWxlIHNvIHRoZSBkb2MvZXhhbXBsZXMvIHByb2dyYW1zIGFyZSBuZXZlciBidWlsdCBpbiBhCiAgbm9ybWFsIGJ1aWxkL2luc3RhbGwgKG9ubHkgd2l0aCB0aGUgJ21ha2UgY2hlY2snIHRhcmdldCksIHNvIHRoYXQgYQogIGJ1aWxkIGZhaWx1cmUgaW4gdGhlIGV4YW1wbGVzIGlzbid0IGZhdGFsLgoKVmVyc2lvbiA3LjE4LjEgKDMwIE1hcmNoIDIwMDgpCgpEYW5pZWwgU3RlbmJlcmcgKDI4IE1hciAyMDA4KQotIFN0ZXBoZW4gQ29sbHllciBwb2ludGVkIG91dCB0aGF0IGNvbmZpZ3VyZSAtLXdpdGgtbGlic3NoMiB3aXRob3V0IGEgZ2l2ZW4KICBwYXRoIGRpZG4ndCB3b3JrIHByb3Blcmx5LgoKRGFuaWVsIFN0ZW5iZXJnICgyNyBNYXIgMjAwOCkKLSBBcyBmb3VuZCBvdXQgYW5kIHJlcG9ydGVkIGJ5IERhbiBQZXRpdHQsIGxpYmN1cmwgZGlkbid0IHNob3cgcHJvZ3Jlc3MvY2FsbAogIHRoZSBwcm9ncmVzcyBjYWxsYmFjayBmb3IgdGhlIGZpcnN0IChwb3RlbnRpYWxseSBodWdlKSBwaWVjZSBvZiBib2R5IGRhdGEKICBzZW50IHRvZ2V0aGVyIHdpdGggdGhlIFBPU1QgcmVxdWVzdCBoZWFkZXJzIGluIHRoZSBpbml0aWFsIHNlbmQoKS4KCkRhbmllbCBTdGVuYmVyZyAoMjUgTWFyIDIwMDgpCi0gTWFkZSBzZXR0aW5nIHRoZSBDVVJMT1BUX1NTTF9DVFhfRlVOQ1RJT04gb3B0aW9uIHJldHVybiBhIGZhaWx1cmUgaW4gY2FzZQogIGxpYmN1cmwgd2Fzbid0IGJ1aWx0IHRvIHVzZSBPcGVuU1NMIGFzIHRoYXQgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIHRoaXMKICBvcHRpb24gdG8gZnVuY3Rpb24hCgpEYW5pZWwgU3RlbmJlcmcgKDIyIE1hciAyMDA4KQotIEZpeGVkIHRoZSBwcm9ibGVtIHdpdGggZG9pbmcgYSB6ZXJvIGJ5dGUgU0NQIHRyYW5zZmVyLCB2ZXJpZmllZCB3aXRoIHRlc3QKICBjYXNlIDYxNyAod2hpY2ggd2FzIGFkZGVkIGJ5IERhbmllbCBGYW5kcmljaCA1IE1hciAyMDA4KS4KCkRhbmllbCBGYW5kcmljaCAoMjAgTWFyIDIwMDgpCi0gRml4ZWQgYSBwcm9ibGVtIHdoZXJlIGN1cmwtY29uZmlnIC0tcHJvdG9jb2xzIGNvdWxkIGVycm9uZW91c2x5IHNob3cgTERBUFMKICBzdXBwb3J0IHdoZW4gY3VybCBkaWRuJ3QgZXZlbiBoYXZlIHJlZ3VsYXIgTERBUCBzdXBwb3J0LiAgSXQgbG9va3MgbGlrZQogIHRoaXMgY291bGQgaGFwcGVuIHdoZW4gdGhlIC0tZW5hYmxlLWxkYXBzIGNvbmZpZ3VyZSBzd2l0Y2ggaXMgZ2l2ZW4gYnV0CiAgY29uZmlndXJlIGNvdWxkbid0IGZpbmQgdGhlIExEQVAgaGVhZGVycyBvciBsaWJyYXJpZXMuCgpNaWNoYWwgTWFyZWsgKDIwIE1hciAyMDA4KQotIEFkZGVkIC0td2l0aC1jYS1wYXRoPURJUkVDVE9SWSBjb25maWd1cmUgb3B0aW9uIHRvIHVzZSBhbiBvcGVuU1NMIENBcGF0aCBieQogIGRlZmF1bHQgaW5zdGVhZCBvZiBhIGNhIGJ1bmRsZS4gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgd2lsbCBhbHNvIGxvb2sgZm9yIGEKICBjYSBwYXRoIGlmIG5vIGNhIGJ1bmRsZSBpcyBmb3VuZCBhbmQgbm8gb3B0aW9uIGdpdmVuLgoKLSBGaXhlZCBkZXRlY3Rpb24gb2YgcHJldmlvdXNseSBpbnN0YWxsZWQgY3VybC1jYS1idW5kbGUuY3J0CgpEYW5pZWwgRmFuZHJpY2ggKDE4IE1hciAyMDA4KQotIEFkZGVkIHRlc3QgNjI2IHRvIHJlcHJvZHVjZSBhbiBpbmZpbml0ZSBsb29wIHdoZW4gZ2l2ZW4gYW4gaW52YWxpZAogIFNGVFAgcXVvdGUgY29tbWFuZCByZXBvcnRlZCBieSBWaW5jZW50IExlIE5vcm1hbmQsIGFuZCBmaXhlZCBpdC4KCk1pY2hhbCBNYXJlayAoMTggTWFyIDIwMDgpCi0gQWRkZWQgY3VybF9lYXN5X2dldGluZm8gdHlwZWNoZWNrZXIuCgotIEFkZGVkIG1hY3JvcyBmb3IgY3VybF9zaGFyZV9zZXRvcHQgYW5kIGN1cmxfbXVsdGlfc2V0b3B0IHRvIGNoZWNrIGF0IGxlYXN0CiAgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cy4KCkRhbmllbCBGYW5kcmljaCAoMTMgTWFyIDIwMDgpCi0gQWRkZWQgdGVzdHMgNjIyLTYyNSB0byB0ZXN0IFNGVFAvU0NQIHVwbG9hZHMuIFRlc3QgNjI1IHdhcyBhbiBhdHRlbXB0IHRvCiAgcmVwcm9kdWNlIHRoZSAtLWZ0cC1jcmVhdGUtZGlycyBwcm9ibGVtIHJlcG9ydGVkIGJ5IEJyaWFuIFVsbSwgYnV0IHRoYXQKICBzZWVtcyB0byBuZWVkIGEgY2FsbCBjdXJsX2Vhc3lfcmVzZXQoKSB3aGljaCB0aGlzIHRlc3QgY2FzZSBkb2Vzbid0IGRvLgoKRGFuaWVsIFN0ZW5iZXJnICgxMyBNYXIgMjAwOCkKLSBCcmlhbiBVbG0gZmlndXJlZCBvdXQgdGhhdCBpZiB5b3UgZGlkIGFuIFNGVFAgdXBsb2FkIHdpdGgKICBDVVJMT1BUX0ZUUF9DUkVBVEVfTUlTU0lOR19ESVJTIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSwgYW5kIHRoZW4gcmUtdXNlZCB0aGUKICBoYW5kbGUgYW5kIHVwbG9hZGVkIGFub3RoZXIgZmlsZSB0byBhbm90aGVyIGRpcmVjdG9yeSB0aGF0IG5lZWRlZCB0byBiZQogIGNyZWF0ZWQsIHRoZSBzZWNvbmQgdXBsb2FkIHdvdWxkIGZhaWwuIEFub3RoZXIgY2FzZSBvZiBhIHN0YXRlIHZhcmlhYmxlIHRoYXQKICB3YXNuJ3QgcHJvcGVybHkgcmVzZXQgYmV0d2VlbiByZXF1ZXN0cy4KCi0gSSByZXdyb3RlIHRoZSAxMDAtY29udGludWUgY29kZSB0byB1c2UgYSBzaW5nbGUgc3RhdGUgdmFyaWFibGUgaW5zdGVhZCBvZgogIHRoZSBwcmV2aW91cyB0d28gb25lcy4gSSB0aGluayBpdCBtYWRlIHRoZSBsb2dpYyBzb21ld2hhdCBjbGVhcmVyLgoKRGFuaWVsIFN0ZW5iZXJnICgxMSBNYXIgMjAwOCkKLSBEbWl0cnkgUG9wb3YgZmlsZWQgYnVnIHJlcG9ydCAjMTkxMTA2OQogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xOTExMDY5KSB0aGF0IGlkZW50aWZpZWQgYSByYWNlCiAgY29uZGl0aW9uIGluIHRoZSBuYW1lIHJlc29sdmVyIGNvZGUgd2hlbiB0aGUgRE5TIGNhY2hlIGlzIHNoYXJlZCBiZXR3ZWVuCiAgbXVsdGlwbGUgZWFzeSBoYW5kbGVzLCBlYWNoIHJ1bm5pbmcgaW4gc2ltdWx0YW5lb3VzIHRocmVhZHMgdGhhdCBjb3VsZCBjYXVzZQogIGNyYXNoZXMuCgotIEFkZGVkIGEgbWFjcm8gZm9yIGN1cmxfZWFzeV9zZXRvcHQoKSB0aGF0IGFjY2VwdHMgdGhyZWUgYXJndW1lbnRzIGFuZCBzaW1wbHkKICBkb2VzIG5vdGhpbmcgd2l0aCB0aGVtLCBqdXN0IHRvIG1ha2Ugc3VyZSBsaWJjdXJsIHVzZXJzIGFsd2F5cyB1c2UgdGhyZWUKICBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbi4gRHVlIHRvIGl0cyB1c2Ugb2YgLi4uIGZvciB0aGUgdGhpcmQgYXJndW1lbnQsIGl0CiAgaXMgb3RoZXJ3aXNlIGhhcmQgdG8gZGV0ZWN0IGFidXNlLgoKTWljaGFsIE1hcmVrICgxMSBNYXIgMjAwOCkKLSBBZGRlZCBhIHR5cGUgY2hlY2tpbmcgbWFjcm8gZm9yIGN1cmxfZWFzeV9zZXRvcHQoKSwgbmVlZHMgZ2NjLTQuMyBhbmQgb25seQogIHdvcmtzIGluIEMgbW9kZSBhdG0gKGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwOC0wMi8wMjY3Lmh0bWwgLAogIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwOC0wMi8wMjkyLmh0bWwgKQoKRGFuaWVsIEZhbmRyaWNoICgxMCBNYXIgMjAwOCkKLSBBZGRlZCB0ZXN0cyA2MTgtNjIxIHRvIHRlc3QgU0ZUUC9TQ1AgdHJhbnNmZXJzIG9mIG1vcmUgdGhhbiBvbmUgZmlsZQogICh0ZXN0IDYyMCB0ZXN0cyB0aGUganVzdC1maXhlZCBwcm9ibGVtIHJlcG9ydGVkIGJ5IEJyaWFuIFVsbSkuCgpEYW5pZWwgU3RlbmJlcmcgKDkgTWFyIDIwMDgpCi0gQnJpYW4gVWxtIHJlcG9ydGVkIGEgY3Jhc2ggd2hlbiBkb2luZyBhIHNlY29uZCBTRlRQIHRyYW5zZmVyIG9uIGEgcmUtdXNlZAogIGVhc3kgaGFuZGxlIGlmIGN1cmxfZWFzeV9yZXNldCgpIHdhcyB1c2VkIGJldHdlZW4gdGhlbS4gSSBmaXhlZCBpdCBhbmQgQnJpYW4KICB2ZXJpZmllZCB0aGF0IGl0IGN1cmVkIGhpcyBwcm9ibGVtLgoKLSBCcmlhbiBVbG0gcmVwb3J0ZWQgdGhhdCBpZiB5b3UgZmlyc3QgdHJpZWQgdG8gZG93bmxvYWQgYSBub24tZXhpc3RpbmcgU0ZUUAogIGZpbGUgYW5kIHRoZW4gZmV0Y2hlZCBhbiBleGlzdGluZyBvbmUgYW5kIHJlLXVzZWQgdGhlIGhhbmRsZSwgbGliY3VybCB3b3VsZAogIHN0aWxsIHJlcG9ydCB0aGUgc2Vjb25kIG9uZSBhcyBub24tZXhpc3RpbmcgYXMgd2VsbCEgSSBmaXhlZCBpdCBhbmQgQnJpYW4KICB2ZXJpZmllZCB0aGF0IGl0IGN1cmVkIGhpcyBwcm9ibGVtLgoKTWljaGFsIE1hcmVrICg2IE1hciAyMDA4KQotIEZpeCB0aGUgZ3NzYXBpIGNvbmZpZ3VyZSBjaGVjayB0byBkZXRlY3QgbmV3ZXIgTUlUIEtlcmJlcm9zIChwYXRjaCBieQogIE1pY2hhZWwgQ2FsbWVyKQoKWWFuZyBUc2UgKDYgTWFyIDIwMDgpCi0gRml4IHJlZ3Jlc3Npb24gb24gQ3VybF9zb2NrZXRfcmVhZHkoKSBhbmQgQ3VybF9wb2xsKCkgc28gdGhhdCB0aGVzZSB3aWxsCiAgYWdhaW4gZmFpbCBvbiBzZWxlY3QvcG9sbCBlcnJvcnMgZGlmZmVyZW50IHRoYW4gRUlOVFIuCgpEYW5pZWwgRmFuZHJpY2ggKDUgTWFyIDIwMDgpCi0gRml4ZWQgdGhlIHRlc3QgaGFybmVzcyBzbyBpdCB3aWxsIHdyaXRlIG91dCB6ZXJvLWxlbmd0aCBkYXRhIGZpbGVzLgoKLSBBZGRlZCB0ZXN0cyA2MTYgYW5kIDYxNyB0byBzZWUgaG93IFNGVFAgYW5kIFNDUCBjb3BlIHdpdGggemVyby1sZW5ndGgKICBmaWxlcywgYXMgcXVlc3Rpb25lZCBieSBNaWtlIFByb3R0cy4gU0ZUUCBkb2VzIGZvciBtZSBidXQgU0NQIGRvZXNuJ3QKICBzbyB0ZXN0IDYxNyBpcyBkaXNhYmxlZCBmb3Igbm93LgoKRGFuaWVsIFMgKDQgTWFyIDIwMDgpCi0gTWlrZSBQcm90dHMgYnJvdWdodCBhIHBhdGNoIHRoYXQgbWFrZXMgcmVzdW1lZCB0cmFuc2ZlcnMgd29yayB3aXRoIFNGVFAuCgpEYW5pZWwgUyAoMSBNYXIgMjAwOCkKLSBBbmF0b2xpIFR1Ym1hbiBmb3VuZCBhbmQgZml4ZWQgYSBjcmFzaCB3aXRoIE5lZ290aWF0ZSBhdXRoZW50aWNhdGlvbiB1c2VkIG9uCiAgYSByZS11c2VkIGNvbm5lY3Rpb24gd2hlcmUgYm90aCByZXF1ZXN0cyB1c2VkIE5lZ290aWF0ZS4KCkd1ZW50ZXIgS25hdWYgKDI2IEZlYiAyMDA4KQotIEthc3BhciBCcmFuZCBwcm92aWRlZCBhIHBhdGNoIHRvIHN1cHBvcnQgc2VydmVyIG5hbWUgaW5kaWNhdGlvbiAoUkZDIDQzNjYpLgoKRGFuaWVsIFMgKDI1IEZlYiAyMDA4KQotIEthc3BhciBCcmFuZCBtYWRlIEdudVRMUy1idWlsdCBsaWJjdXJsIHByb3Blcmx5IGFja25vd2xlZGdlIHRoZSBvcHRpb24gdGhhdAogIGZvcmNlcyBpdCB0byBwcmVmZXIgU1NMdjMuCgpEYW5pZWwgUyAoMjMgRmViIDIwMDgpCi0gU2FtIExpc3RvcGFkIHByb3ZpZGVkIGEgcGF0Y2ggaW4gZmVhdHVyZS1yZXF1ZXN0ICMxOTAwMDE0CiAgaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvZmVhdHVyZS5jZ2k/aWQ9MTkwMDAxNCB0aGF0IG1ha2VzIGxpYmN1cmwgKGJ1aWx0IHRvCiAgdXNlIE9wZW5TU0wpIHN1cHBvcnQgYSBmdWxsIGNoYWluIG9mIGNlcnRpZmljYXRlcyBpbiBhIGdpdmVuIFBLQ1MxMgogIGNlcnRpZmljYXRlLgoKRGFuaWVsIFMgKDIyIEZlYiAyMDA4KQotIEdlb3JnIExpcHBpdHNjaCBtYWRlIHRoZSBzcmMvTWFrZWZpbGUudmM2IG1ha2VmaWxlIHVzZSB0aGUgc2FtZSBtZW1vcnkgbW9kZWwKICBvcHRpb25zIGFzIHRoZSBsaWIvTWFrZWZpbGUudmM2IGFscmVhZHkgZGlkLgoKRGFuaWVsIFMgKDIxIEZlYiAyMDA4KQotIFptZXkgUGV0cm9mZiBmb3VuZCBhIGNyYXNoIHdoZW4gbGliY3VybCBhY2Nlc3NlZCBhIE5VTEwgcG9pbnRlciwgd2hpY2gKICBoYXBwZW5lZCBpZiB5b3Ugc2V0IHRoZSBjb25uZWN0aW9uIGNhY2hlIHNpemUgdG8gMSBhbmQgZm9yIGV4YW1wbGUgZmFpbGVkIHRvCiAgbG9naW4gdG8gYW4gRlRQIHNpdGUuIEJ1ZyByZXBvcnQgIzE4OTY2OTgKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTg5NjY5OCkKCkRhbmllbCBTICgyMCBGZWIgMjAwOCkKLSBGaXhlZCB0ZXN0IGNhc2UgNDA1IHRvIG5vdCBmYWlsIHdoZW4gbGliY3VybCBpcyBidWlsdCB3aXRoIEdudVRMUwoKLSBCYXNlZCBvbiBpbml0aWFsIHdvcmsgZG9uZSBieSBHYXV0YW0gS2FjaHJvbyB0byBhZGRyZXNzIGEgYnVnLCB3ZSBub3cga2VlcAogIGJldHRlciBjb250cm9sIGF0IHRoZSBleGFjdCBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbidzIFNTTCBzdGF0dXMgc28gdGhhdCB3ZQogIGtub3cgZXhhY3RseSB3aGVuIGl0IGhhcyBjb21wbGV0ZWQgdGhlIFNTTCBuZWdvdGlhdGlvbiBvciBub3Qgc28gdGhhdCB0aGVyZQogIHdvbid0IGJlIGFjY2lkZW50YWwgcmUtdXNlcyBvZiBjb25uZWN0aW9ucyB0aGF0IGFyZSB3cm9uZ2x5IGJlbGlldmVkIHRvIGJlCiAgaW4gU1NMLWNvbXBsZXRlZC1uZWdvdGlhdGUgc3RhdGUuCgotIFdlIG5vIGxvbmdlciBzdXBwb3J0IHNldHRpbmcgdGhlIENVUkxPUFRfVVJMIG9wdGlvbiBmcm9tIGluc2lkZSBhIGNhbGxiYWNrCiAgc3VjaCBhcyB0aGUgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OIG9uZSB0cmVhdCB0aGF0IGFzIGlmIGl0IHdhcyBhIExvY2F0aW9uOgogIGZvbGxvd2luZy4gVGhlIHBhdGNoIHRoYXQgaW50cm9kdWNlZCB0aGlzIGZlYXR1cmUgd2FzIGRvbmUgZm9yIDcuMTEuMCwgYnV0CiAgdGhpcyBjb2RlIGFuZCBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIGJyb2tlbiBzaW5jZSBhYm91dCA3LjE1LjQgKE1hcmNoIDIwMDYpCiAgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIG5vbi1ibG9ja2luZyBPcGVuU1NMICJjb25uZWN0cyIuCgogIEl0IHdhcyBhIGhhY2sgdG8gYmVnaW4gd2l0aCBhbmQgc2luY2UgaXQgZG9lc24ndCB3b3JrIGFuZCBoYXNuJ3Qgd29ya2VkCiAgY29ycmVjdGx5IGZvciBhIGxvbmcgdGltZSBhbmQgbm9ib2R5IGhhcyBldmVuIG5vdGljZWQsIEkgY29uc2lkZXIgaXQgYSB2ZXJ5CiAgc3VpdGFibGUgc3ViamVjdCBmb3IgcGxhaW4gcmVtb3ZhbC4gQW5kIHNvIGl0IHdhcyBkb25lLgoKR3VlbnRlciBLbmF1ZiAoMTkgRmViIDIwMDgpCi0gV2UgZG8gbm8gbG9uZ2VyIHN1cHBvcnQgU1NMdjIgYnkgZGVmYXVsdCBzaW5jZSBpdCBoYXMga25vd24gZmxhd3MuCiAgS2FzcGFyIEJyYW5kIHByb3ZpZGVkIGEgcGF0Y2ggZm9yIGFsbCBzdXBwb3J0ZWQgU1NMIHRvb2xraXRzLgogCkRhbmllbCBGYW5kcmljaCAoMTkgRmViIDIwMDgpCi0gQWRkZWQgdGVzdDMwOSB0byB0ZXN0IEhUVFAgcmVkaXJlY3QgdG8gSFRUUFMgVVJMCgpEYW5pZWwgUyAoMTggRmViIDIwMDgpCi0gV2UncmUgbm8gbG9uZ2VyIHByb3ZpZGluZyBhIHZlcnkgb2xkIGNhLWJ1bmRsZSBpbiB0aGUgY3VybCB0YXJiYWxsLiBZb3UgY2FuCiAgZ2V0IGEgZnJlc2ggb25lIGRvd25sb2FkZWQgYW5kIGNyZWF0ZWQgd2l0aCAnbWFrZSBjYS1idW5kbGUnIG9yIHlvdSBjYW4gZ2V0CiAgb25lIGZyb20gaGVyZSA9PiBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY2FleHRyYWN0Lmh0bWwgaWYgeW91IHdhbnQgYSBmcmVzaAogIG5ldyBvbmUgZXh0cmFjdGVkIGZyb20gTW96aWxsYSdzIHJlY2VudCBsaXN0IG9mIGNhIGNlcnRzLgoKICBUaGUgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtY2EtYnVuZGxlIG5vdyBsZXRzIHlvdSBzcGVjaWZ5IHdoYXQgZmlsZSB0byB1c2UKICBhcyBkZWZhdWx0IGNhIGJ1bmRsZSBmb3IgeW91ciBidWlsZC4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQKICB3aWxsIGNoZWNrIGEgZmV3IGtub3duIHN0YW5kYXJkIHBsYWNlcyBmb3IgYSBnbG9iYWwgY2EgY2VydCB0byB1c2UuCgpEYW5pZWwgUyAoMTcgRmViIDIwMDgpCi0gSmVyb21lIE11ZmZhdC1NZXJpZG9sIGhlbHBlZCBtZSBmaXggQ3VybF9kb25lKCkgdG8gY2xvc2UgdGhlIGN1cnJlbnQKICBjb25uZWN0aW9uIGJ5IGZvcmNlIHdoZW4gaXQgd2FzIGNhbGxlZCBiZWZvcmUgdGhlIGVudGlyZSByZXF1ZXN0IGlzCiAgY29tcGxldGVkLCBzaW1wbHkgYmVjYXVzZSB3ZSBjYW4ndCBrbm93IGlmIHRoZSBjb25uZWN0aW9uIHJlYWxseSBjYW4gYmUKICByZS11c2VkIHNhZmVseSBhdCB0aGF0IHBvaW50LgoKLSBCYXNlZCBvbiB0aGUgc2FtZSBkZWJ1Z2dpbmcgbG9naWMsIEkndmUgYWxzbyBtYWRlIEN1cmxfaHR0cF9kb25lKCkgbm90CiAgcmV0dXJuIENVUkxFX0dPVF9OT1RISU5HIGlmIGNhbGxlZCAicHJlbWF0dXJlbHkiLiBUaGlzIHNob3VsZCBoYXZlIG5vIHJlYWwKICBlZmZlY3QgdG8gYW55dGhpbmcgYnV0IHRoZSBjb2RlIG1ha2VzIG1vcmUgc2Vuc2UgbGlrZSB0aGlzLgogIApEYW5pZWwgUyAoMTUgRmViIDIwMDgpCi0gTWFkZSB0aGUgZ251dGxzIGNvZGUgcGF0aCBub3QgZXZlbiB0cnkgdG8gZ2V0IHRoZSBzZXJ2ZXIgY2VydCBpZiBubyBwZWVyCiAgdmVyaWZpY2F0aW9uIGlzIHJlcXVlc3RlZC4gUHJldmlvdXNseSBpdCB3b3VsZCBldmVuIHJldHVybiBmYWlsdXJlIGlmIGdudXRscwogIGZhaWxlZCB0byBnZXQgdGhlIHNlcnZlciBjZXJ0IGV2ZW4gdGhvdWdoIG5vIHZlcmlmaWNhdGlvbiB3YXMgYXNrZWQgZm9yLgogIFB1YmxpYyBzZXJ2ZXIgc2hvd2luZyB0aGUgcHJvYmxlbTogaHR0cHM6Ly93d3cubmV0MjIyLmNhaXNzZS1lcGFyZ25lLmZyCgotIEZpeCBteSBDdXJsX3RpbWVsZWZ0KCkgbGVmdG92ZXIgbWlzdGFrZSBpbiB0aGUgZ251dGxzIGNvZGUKCi0gUG9veWFuIE1jU3BvcnJhbiBmb3VuZCBhbmQgZml4ZWQgYSBmbGF3IHdoZXJlIHlvdSBmaXJzdCB3b3VsZCBkbyBhIG5vcm1hbAogIGh0dHAgcmVxdWVzdCBhbmQgdGhlbiB5b3UnZCByZXVzZSB0aGUgaGFuZGxlIGFuZCByZXBsYWNlIHRoZSBBY2NlcHQ6IGhlYWRlciwKICBhcyB0aGVuIGxpYmN1cmwgd291bGQgc2VuZCB0d28gQWNjZXB0OiBoZWFkZXJzIQoKRGFuaWVsIFMgKDExIEZlYiAyMDA4KQotIFlhbmcgVHNlIHBvaW50ZWQgb3V0IGEgZmV3IHJlbWFpbmluZyBxdWlya3MgZnJvbSBteSB0aW1lb3V0IHJlZmFjdG9yaW5nIGZyb20KICBGZWIgNyB0aGF0IGRpZG4ndCBhYm9ydCBwcm9wZXJseSBvbiB0aW1lb3V0cy4gVGhlc2UgYXJlIGFjdHVhbGx5IG9sZAogIHByb2JsZW1zIGJ1dCBub3cgdGhleSBzaG91bGQgYmUgZml4ZWQuCgpZYW5nIFRzZSAoMTAgRmViIDIwMDgpCi0gQnVnIHJlcG9ydCAjMTg4ODkzMiAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTg4ODkzMikgcG9pbnRzIG91dAogIGFuZCBwcm92aWRlcyB0ZXN0IHByb2dyYW0gdGhhdCBkZW1vbnN0cmF0ZXMgdGhhdCBsaWJjdXJsIG1pZ2h0IG5vdCBzZXQgZXJyb3IKICBkZXNjcmlwdGlvbiBtZXNzYWdlIGZvciBlcnJvciBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVCBmb3IgV2luZG93cyB0aHJlYWRlZAogIG5hbWUgcmVzb2x2ZXIgYnVpbGRzLiBGaXhlZCBub3cuCgpEYW5pZWwgRmFuZHJpY2ggKDggRmViIDIwMDgpCi0gQWRkZWQga2V5IHdvcmRzIHRvIGFsbCBTU0wtdXNpbmcgdGVzdHMgc28gdGhleSBjYW4gYmUgc2tpcHBlZCBpZiBuZWNlc3NhcnkuCiAgUmVtb3ZlZCBhIGZldyB1bm5lY2Vzc2FyeSByZXF1aXJlcyBTU0wgc3RhdGVtZW50cy4KCkRhbmllbCBTICg4IEZlYiAyMDA4KQotIE1pa2UgSG9tbWV5IGZpbGVkIGFuZCBmaXhlZCBidWcgcmVwb3J0ICMxODg5ODU2CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE4ODk4NTYpOiBXaGVuIHVzaW5nIHRoZSBnbnV0bHMgc3NsCiAgbGF5ZXIsIGNsZWFuaW5nLXVwIGFuZCByZWluaXRpYWxpemluZyBjdXJsIGVuZHMgdXAgd2l0aCBodHRwcyByZXF1ZXN0cwogIGZhaWxpbmcgd2l0aCAiQVNOMSBwYXJzZXI6IEVsZW1lbnQgd2FzIG5vdCBmb3VuZCIgZXJyb3JzLiBPYnZpb3VzbHkgYQogIHJlZ3Jlc3Npb24gYWRkZWQgaW4gNy4xNi4zLgoKWWFuZyBUc2UgKDggRmViIDIwMDgpCi0gSW1wcm92ZWQgdGVzdCBoYXJuZXNzIFNDUC9TRlRQIHN0YXJ0IHVwIHNlcnZlciB2ZXJpZmljYXRpb24sIGRvaW5nIGEgcmVhbAogIGNvbm5lY3Rpb24gdG8gdGhlIHNmdHAgc2VydmVyLCBhdXRoZW50aWNhdGluZyBhbmQgcnVubmluZyBhIHNpbXBsZSBzZnRwCiAgcHdkIGNvbW1hbmQgdXNpbmcgdGhlIHRlc3QgaGFybmVzcyBnZW5lcmF0ZWQgY29uZmlndXJhdGlvbiBhbmQga2V5IGZpbGVzLgoKRGFuaWVsIFMgKDggRmViIDIwMDgpCi0gR/xudGVyIEtuYXVmIGFkZGVkIGxpYi9tay1jYS1idW5kbGUucGwgd2hpY2ggZ2V0cyB0aGUgRmlyZWZveCBjYSBidW5kbGUgYW5kCiAgY3JlYXRlcyBhIHN1aXRhYmxlIGNhLWJ1bmRsZS5jcnQgZmlsZSBpbiBQRU0gZm9ybWF0IGZvciB1c2Ugd2l0aCBjdXJsLiBUaGUKICByZWNvbW1lbmRlZCB3YXkgdG8gcnVuIGl0IGlzIHRvIHVzZSAnbWFrZSBjYS1idW5kbGUnIGluIHRoZSBidWlsZCB0cmVlIHJvb3QuCgpEYW5pZWwgRmFuZHJpY2ggKDcgRmViIDIwMDgpCi0gQWRkZWQgdGVzdHMgMTAyMiBhbmQgMTAyMyB0byB2YWxpZGF0ZSBvdXRwdXQgb2YgY3VybC1jb25maWcgLS12ZXJzaW9uIGFuZAogIC0tdmVybnVtCgpEYW5pZWwgUyAoNyBGZWIgMjAwOCkKLSBSZWZhY3RvcmVkIGEgbG90IG9mIHRpbWVvdXQgY29kZSBpbnRvIGEgZmV3IGZ1bmN0aW9ucyBpbiBhbiBhdHRlbXB0IHRvIG1ha2UKICB0aGVtIGFsbCB1c2UgdGhlIHNhbWUgKGhvcGVmdWxseSBjb3JyZWN0KSBsb2dpYyB0byBtYWtlIGl0IGxlc3MgZXJyb3ItcHJvbmUKICBhbmQgZWFzaWVyIHRvIGludHJvZHVjZSBsaWJyYXJ5LXdpZGUgd2hlcmUgaXQgc2hvdWxkIGJlIHVzZWQuCgpZYW5nIFRzZSAoNiBGZWIgMjAwOCkKLSBGaXggYW4gaXNzdWUgaW4gc3RyZHVwIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHdoZW4gZGVhbGluZyB3aXRoIGFic29sdXRlbHkKICBodWdlIHN0cmluZ3MuIE9ubHkgc3lzdGVtcyB3aXRob3V0IGEgc3RhbmRhcmQgc3RyZHVwIHdvdWxkIGJlIGFmZmVjdGVkLgoKRGFuaWVsIFMgKDMgRmViIDIwMDgpCi0gRG1pdHJ5IEt1cm9jaGtpbiBjbGVhbmVkIHVwIHRoZSBwaXBlbGluaW5nIGNvZGUgYW5kIHJlbW92ZWQgdGhlIG5lZWQgZm9yIGFuZAogIHVzZSBvZiB0aGUgImlzX2luX3BpcGVsaW5lIiBzdHJ1Y3QgZmllbGQuCgotIEkgd3JvdGUgdXAgYW5kIGFkZGVkIHRoZSB0aHJlYWRlZC1zc2wuYyBleGFtcGxlIHNvdXJjZSBjb2RlIHRoYXQgc2hvd3MgaG93CiAgdG8gZG8gbXVsdGktdGhyZWFkZWQgZG93bmxvYWRzIG9mIEhUVFBTIGZpbGVzIHdpdGggYSBsaWJjdXJsIHRoYXQgaXMgYnVpbHQKICB3aXRoIE9wZW5TU0wuIEl0IHVzZXMgcHRocmVhZHMgZm9yIHRoZSB0aHJlYWRpbmcuCgpEYW5pZWwgUyAoMzEgSmFuIDIwMDgpCi0gTmlrbGFzIEFuZ2VicmFuZCBtYWRlIHRoZSBjb29raWUgc3VwcG9ydCBpbiBsaWJjdXJsIHByb3Blcmx5IGRlYWwgd2l0aCB0aGUKICAiSHR0cE9ubHkiIGZlYXR1cmUgaW50cm9kdWNlZCBieSBNaWNyb3NvZnQgYW5kIGFwcGFyZW50bHkgYWxzbyBzdXBwb3J0ZWQgYnkKICBGaXJlZm94OiBodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTMzMDQ2LmFzcHggLiBIdHRwT25seQogIGlzIG5vdyBzdXBwb3J0ZWQgd2hlbiByZWNlaXZlZCBmcm9tIHNlcnZlcnMgaW4gSFRUUCBoZWFkZXJzLCB3aGVuIHdyaXR0ZW4gdG8KICBjb29raWUgamFycyBhbmQgd2hlbiByZWFkIGZyb20gZXhpc3RpbmcgY29va2llIGphcnMuCgogIEkgbW9kaWZpZWQgdGVzdCBjYXNlIDMxIGFuZCA0NiB0byBhbHNvIGRvIHNvbWUgYmFzaWMgSHR0cE9ubHkgdGVzdGluZy4KCi0gRG1pdHJ5IEt1cm9jaGtpbiBtb3ZlZCBzZXZlcmFsIHN0cnVjdCBmaWVsZHMgZnJvbSB0aGUgY29ubmVjdGRhdGEgc3RydWN0IHRvCiAgdGhlIFNpbmdsZVJlcXVlc3Qgb25lIHRvIG1ha2UgcGlwZWxpbmluZyBiZXR0ZXIuIEl0IGlzIGEgYml0IHRyaWNreSB0byBrZWVwCiAgdGhlbSBpbiB0aGUgcmlnaHQgcGxhY2UsIHRvIGtlZXAgdGhpbmdzIHJlbGF0ZWQgdG8gdGhlIGFjdHVhbCByZXF1ZXN0IG9yIHRvCiAgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIHRoZSByaWdodCBwbGFjZS4KCkRhbmllbCBTICgyOSBKYW4gMjAwOCkKLSBEbWl0cnkgS3Vyb2Noa2luIGZpeGVkIEN1cmxfZG9uZSgpIGZvciBwaXBlbGluaW5nLCBhcyBpdCBjb3VsZCBwcmV2aW91c2x5CiAgY3Jhc2ghCgotIE1pY2hhbCBNYXJlayBmaXhlZCBtaW5vciBtaXN0YWtlIGluIHRlc3QgY2FzZSA1NTMgdGhhdCBwcmV2ZW50ZWQgaXQgZnJvbQogIHdvcmtpbmcgb24gb3RoZXIgSVAtYWRkcmVzc2VzIG9yIHBvcnQgbnVtYmVycy4KClZlcnNpb24gNy4xOC4wICgyOCBKYW51YXJ5IDIwMDgpCgpEYW5pZWwgUyAoMjcgSmFuIDIwMDgpCi0gRG1pdHJ5IEt1cm9jaGtpbjogSW4gInJlYWwgd29ybGQiIHRlc3RpbmcgSSBmb3VuZCBtb3JlIGJ1Z3MgaW4KICBwaXBlbGluaW5nLiBCcm9rZW4gY29ubmVjdGlvbiBpcyBub3QgcmVzdG9yZWQgYW5kIHdlIGdldCBpbnRvIGluZmluaXRlCiAgbG9vcC4gSXQgaGFwcGVucyBiZWNhdXNlIG9mIHdyb25nIGlzX2luX3BpcGVsaW5lIHZhbHVlcy4KCkRhbmllbCBTICgyNiBKYW4gMjAwOCkKLSBLZXZpbiBSZWVkIGZpbGVkIGJ1ZyByZXBvcnQgIzE4NzkzNzUKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTg3OTM3NSkgd2hpY2ggZGVzY3JpYmVzIGhvdyBsaWJjdXJsCiAgZ290IGxvc3QgaW4gdGhpcyBzY2VuYXJpbzogcHJveHkgdHVubmVsIChvciBIVFRQUyBvdmVyIHByb3h5KSwgYXNrIHRvIGRvIGFueQogIHByb3h5IGF1dGhlbnRpY2F0aW9uIGFuZCB0aGUgcHJveHkgcmVwbGllcyB3aXRoIGFuIGF1dGggKGxpa2UgTlRMTSkgYW5kIHRoZW4KICBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhhdCBpbml0aWFsIGluZm9ybWF0aW9uYWwgcmVzcG9uc2UuCgogIGxpYmN1cmwgd291bGQgbm90IHByb3Blcmx5IHJlLWluaXRpYWxpemUgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IGFuZAogIGNvbnRpbnVlIHRoZSBhdXRoIG5lZ290aWF0aW9uIGxpa2Ugc3VwcG9zZWQuIEl0IGRvZXMgbm93IGhvd2V2ZXIsIGFzIGl0IHdpbGwKICBub3cgZGV0ZWN0IGlmIG9uZSBvciBtb3JlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgd2VyZSBhdmFpbGFibGUgYW5kIGFza2VkCiAgZm9yLCBhbmQgd2lsbCB0aHVzIHJldHJ5IHRoZSBjb25uZWN0aW9uIGFuZCBjb250aW51ZSBmcm9tIHRoZXJlLgoKLSBJIG1hZGUgdGhlIHByb2dyZXNzIGNhbGxiYWNrIGdldCBjYWxsZWQgcHJvcGVybHkgZHVyaW5nIHByb3h5IENPTk5FQ1QuCgpEYW5pZWwgUyAoMjMgSmFuIDIwMDgpCi0gSWdvciBGcmFuY2h1ayBwb2ludGVkIG91dCB0aGF0IENVUkxPUFRfQ09PS0lFTElTVCBzZXQgdG8gIkFMTCIgbGVha2VkCiAgbWVtb3J5LCBhbmQgc28gZGlkICJTRVNTIi4gRml4ZWQgbm93LgoKWWFuZyBUc2UgKDIyIEphbiAyMDA4KQotIENoZWNrIHBvbGwuaCBhdCBjb25maWd1cmF0aW9uIHRpbWUsIGFuZCB1c2UgaXQgd2hlbiBzeXMvcG9sbC5oIHVuYXZhaWxhYmxlCgpEYW5pZWwgUyAoMjIgSmFuIDIwMDgpCi0gRG1pdHJ5IEt1cm9jaGtpbiByZW1vdmVkIHRoZSBjYW5jZWxsZWQgc3RhdGUgZm9yIHBpcGVsaW5pbmcsIGFzIHdlIGFncmVlZAogIHRoYXQgaXQgaXMgYmFkIGFueXdheS4gU3RhcnRpbmcgbm93LCByZW1vdmluZyBhIGhhbmRsZSB0aGF0IGlzIGluIHVzZWQgaW4gYQogIHBpcGVsaW5lIHdpbGwgYnJlYWsgdGhlIHBpcGVsaW5lIC0gaXQnbGwgYmUgc2V0IGJhY2sgdXAgYWdhaW4gYnV0IHN0aWxsLi4uCgpZYW5nIFRzZSAoMjEgSmFuIDIwMDgpCi0gRGlzYWJsZSBsZGFwIHN1cHBvcnQgZm9yIGN5Z3dpbiBidWlsZHMsIHNpbmNlIGl0IGJyZWFrcyB3aG9sZSBidWlsZCBwcm9jZXNzLgogIEZpeGluZyBpdCB3aWxsIGFmZmVjdCBvdGhlciBwbGF0Zm9ybXMsIHNvIGl0IGlzIHBvc3Rwb25lZCBmb3IgYW5vdGhlciByZWxlYXNlLgoKRGFuaWVsIFMgKDE4IEphbiAyMDA4KQotIExhdSBIYW5nIEtpbiBmb3VuZCBhbmQgZml4ZWQgYSBwcm9ibGVtIHdpdGggdGhlIG11bHRpIGludGVyZmFjZSB3aGVuIGRvaW5nCiAgQ09OTkVDVCBvdmVyIGEgcHJveHkuIGN1cmxfbXVsdGlfZmRzZXQoKSBkaWRuJ3QgcmVwb3J0IGJhY2sgdGhlIHNvY2tldAogIHByb3Blcmx5IGR1cmluZyB0aGF0IHN0YXRlLCBkdWUgdG8gYSBtaXNzaW5nIGNhc2UgaW4gdGhlIHN3aXRjaCBpbiB0aGUKICBtdWx0aV9nZXRzb2NrKCkgZnVuY3Rpb24uCgpZYW5nIFRzZSAoMTcgSmFuIDIwMDgpCi0gRG9uJ3QgYWJvcnQgdGVzdHMgNTE4IGFuZCA1Mzcgd2hlbiB1bmFibGUgdG8gcmFpc2UgdGhlIG9wZW4tZmlsZSBzb2Z0IGxpbWl0LgoKRGFuaWVsIFMgKDE2IEphbiAyMDA4KQotIE5hdGhhbiBDb3VsdGVyJ3MgcGF0Y2ggdGhhdCBtYWtlcyBydW50ZXN0cy5wbCByZXNwZWN0IHRoZSBQQVRIIHdoZW4gZmlndXJpbmcKICBvdXQgd2hhdCB2YWxncmluZCB0byBydW4uCgpZYW5nIFRzZSAoMTYgSmFuIDIwMDgpCi0gSW1wcm92ZWQgaGFuZGxpbmcgb2Ygb3V0IG9mIG1lbW9yeSBpbiB0aGUgY29tbWFuZCBsaW5lIHRvb2wgdGhhdCBhZmVjdGVkCiAgZGF0YSB1cmwgZW5jb2RlZCBIVFRQIFBPU1RzIHdoZW4gcmVhZGluZyBpdCBmcm9tIGEgZmlsZS4KCkRhbmllbCBTICgxNiBKYW4gMjAwOCkKLSBEbWl0cnkgS3Vyb2Noa2luIHdvcmtlZCBhIGxvdCBvbiBpbXByb3ZpbmcgdGhlIEhUVFAgUGlwZWxpbmluZyBzdXBwb3J0IHRoYXQKICBwcmV2aW91c2x5IGhhZCBhIG51bWJlciBvZiBmbGF3cywgcGVyaGFwcyBtb3N0IG5vdGFibHkgd2hlbiBhbiBhcHBsaWNhdGlvbgogIGZpcmVkIHVwIE4gdHJhbnNmZXJzIGF0IG9uY2UgYXMgdGhlbiB0aGV5IHdvdWxkbid0IHBpcGVsaW5lIGF0IGFsbCB0aGF0CiAgbmljZWx5IGFzIGFueW9uZSB3b3VsZCB0aGluay4uLiBUZXN0IGNhc2UgNTMwIHdhcyBhbHNvIHVwZGF0ZWQgdG8gdGFrZSB0aGUKICBpbXByb3ZlZCBmdW5jdGlvbmFsaXR5IGludG8gYWNjb3VudC4KCi0gQ2FsbHMgdG8gQ3VybF9mYWlsZigpIGFyZSBub3Qgc3VwcG9zZWQgdG8gcHJvdmlkZSBhIHRyYWlsaW5nIG5ld2xpbmUgYXMgdGhlCiAgZnVuY3Rpb24gaXRzZWxmIGFkZHMgdGhhdC4gRml4ZWQgb24gNTAgb3Igc29tZXRoaW5nIHN0cmluZ3MhCgpEYW5pZWwgUyAoMTUgSmFuIDIwMDgpCi0gSSBtYWRlIHRoZSB0b3J0dXJlIHRlc3Qgb24gdGVzdCA1MzAgZ28gdGhyb3VnaC4gVGhpcyB3YXMgYWN0dWFsbHkgZHVlIHRvCiAgc2lsbHkgY29kZSBsZWZ0IGZyb20gd2hlbiB3ZSBzd2l0Y2hlZCB0byBsZXQgdGhlIG11bHRpIGhhbmRsZSAiaG9sZCIgdGhlIGRucwogIGNhY2hlIHdoZW4gdXNpbmcgdGhlIG11bHRpIGludGVyZmFjZS4uLiBPZiBjb3Vyc2UgdGhpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIGEKICBjZXJ0YWluIGZ1bmN0aW9uIGNhbGwgcmV0dXJuZWQgZXJyb3IgYXQgdGhlIGNvcnJlY3QgbW9tZW50LgoKRGFuaWVsIFMgKDE0IEphbiAyMDA4KQotIEpvZSBNYWxpY2tpIGZpbGVkIGJ1ZyByZXBvcnQgIzE4NzEyNjkKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTg3MTI2OSkgYW5kIHdlIGNvdWxkIGZpeCBoaXMgaGFuZy0KICBwcm9ibGVtIHRoYXQgb2NjdXJyZWQgd2hlbiBkb2luZyBhIGxhcmdlIEhUVFAgUE9TVCByZXF1ZXN0IHdpdGggdGhlCiAgcmVzcG9uc2UtYm9keSByZWFkIGZyb20gYSBjYWxsYmFjay4KCkRhbmllbCBTICgxMiBKYW4gMjAwOCkKLSBJIHJlLWFycmFuZ2VkIHRoZSBjdXJsIC0taGVscCBvdXRwdXQuIEFsbCB0aGUgb3B0aW9ucyBhcmUgbm93IHNvcnRlZCBvbgogIHRoZWlyIGxvbmcgb3B0aW9uIG5hbWVzIGFuZCBhbGwgZGVzY3JpcHRpb25zIGFyZSBvbmUtbGluZXJzLgoKLSBFcmljIExhbmRlcyBwcm92aWRlZCB0aGUgcGF0Y2ggKGVkaXRlZCBieSBtZSkgdGhhdCBpbnRyb2R1Y2VzIHRoZQogIC0ta2VlcGFsaXZlLXRpbWUgdG8gY3VybCB0byBzZXQgdGhlIGtlZXBhbGl2ZSBwcm9iZSBpbnRlcnZhbC4gSSBhbHNvIHRvb2sKICB0aGUgb3Bwb3J0dW5pdHkgdG8gcmVuYW1lIHRoZSByZWNlbnRseSBhZGRlZCBuby1rZWVwLWFsaXZlIG9wdGlvbiB0bwogIG5vLWtlZXBhbGl2ZSB0byBrZWVwIGEgY29uc2lzdGVudCBuYW1pbmcgYW5kIHRvIGF2b2lkIGdldHRpbmcgdHdvIGRhc2hlcyBpbgogIHRoZXNlIG9wdGlvbiBuYW1lcy4gRXJpYyBhbHNvIHByb3ZpZGVkIGFuIHVwZGF0ZSB0byB0aGUgbWFuIHBhZ2UgZm9yIHRoZSBuZXcKICBvcHRpb24uCgpEYW5pZWwgUyAoMTEgSmFuIDIwMDgpCi0gRGFuaWVsIEVnZ2VyIG1hZGUgQ1VSTE9QVF9SQU5HRSB3b3JrIG9uIGZpbGU6Ly8gVVJMcyB0aGUgdmVyeSBzYW1lIHdheSBpdAogIGFscmVhZHkgd29ya2VkIGZvciBGVFA6Ly8gVVJMcy4KCi0gSSBtYWRlIHRoZSBjdXJsIHRvb2wgc3dpdGNoIGZyb20gdXNpbmcgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OIHRvIG5vdyB1c2UgdGhlCiAgc3BhbmtpbmcgbmV3IENVUkxPUFRfU0VFS0ZVTkNUSU9OIHNpbXBseSB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgaW1wcm92ZWQKICBwZXJmb3JtYW5jZSBmb3IgdGhlIHVwbG9hZCByZXN1bWUgY2FzZXMgd2hlcmUgeW91IHdhbnQgdG8gdXBsb2FkIHRoZSBsYXN0CiAgZmV3IGJ5dGVzIG9mIGEgdmVyeSBsYXJnZSBmaWxlLiBUbyBpbXBsZW1lbnQgdGhpcyBkZWNlbnRseSwgSSBoYWQgdG8gc3dpdGNoCiAgdGhlIGNsaWVudCBjb2RlIGZvciB1cGxvYWRpbmcgZnJvbSBmb3BlbigpL2ZyZWFkKCkgdG8gcGxhaW4gb3BlbigpL3JlYWQoKSBzbwogIHRoYXQgd2UgY2FuIHVzZSBsc2VlaygpIHRvIGRvID4zMmJpdCBzZWVrcyAoYXMgZnNlZWsoKSBkb2Vzbid0IGFsbG93IHRoYXQpCiAgb24gc3lzdGVtcyB0aGF0IG9mZmVyIHN1cHBvcnQgZm9yIHRoYXQuCgpEYW5pZWwgUyAoMTAgSmFuIDIwMDgpCi0gTWljaGFsIE1hcmVrIG1hZGUgY3VybC1jb25maWcgLS1saWJzIG5vdCBpbmNsdWRlIC91c3IvbGliNjQgaW4gdGhlIG91dHB1dAogIChpdCBhbHJlYWR5IGJlZm9yZSBza2lwcGVkIC91c3IvbGliKS4gIC91c3IvbGliNjQgaXMgdGhlIGRlZmF1bHQgbGlicmFyeQogIGRpcmVjdG9yeSBvbiBtYW55IDY0Yml0IHN5c3RlbXMgYW5kIGl0J3MgdW5saWtlbHkgdGhhdCBhbnlvbmUgd291bGQgdXNlIHRoZQogIHBhdGggcHJpdmF0ZWx5IG9uIHN5c3RlbXMgd2hlcmUgaXQncyBub3QuCgotIEdlb3JnIExpcHBpdHNjaCBicm91Z2h0IENVUkxPUFRfU0VFS0ZVTkNUSU9OIGFuZCBDVVJMT1BUX1NFRUtEQVRBIHRvIGFsbG93CiAgbGliY3VybCB0byBzZWVrIGluIGEgZ2l2ZW4gaW5wdXQgc3RyZWFtLiBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgd2hlbgogIGRvaW5nIHVwbG9hZCByZXN1bWVzIHdoZW4gdGhlcmUncyBhbHJlYWR5IGEgaHVnZSBwYXJ0IG9mIHRoZSBmaWxlIHByZXNlbnQKICByZW1vdGVseS4gQmVmb3JlLCBhbmQgc3RpbGwgaWYgdGhpcyBjYWxsYmFjayBpc24ndCB1c2VkLCBsaWJjdXJsIHdpbGwgcmVhZAogIGFuZCB0aHJvdWdoIGF3YXkgdGhlIGVudGlyZSBmaWxlIHVwIHRvIHRoZSBwb2ludCB0byB3aGVyZSB0aGUgcmVzdW1pbmcKICBiZWdpbnMgKHdoaWNoIG9mIGNvdXJzZSBjYW4gYmUgYSBzbG93IG9wZXJlcmF0aW9uIGRlcGVuZGluZyBvbiBmaWxlIHNpemUsCiAgSS9PIGJhbmR3aWR0aCBhbmQgbW9yZSkuIFRoaXMgbmV3IGZ1bmN0aW9uIHdpbGwgYWxzbyBiZSBwcmVmZXJyZWQgdG8gZ2V0CiAgdXNlZCBpbnN0ZWFkIG9mIHRoZSBDVVJMT1BUX0lPQ1RMRlVOQ1RJT04gZm9yIHNlZWtpbmcgYmFjayBpbiBhIHN0cmVhbSB3aGVuCiAgZG9pbmcgbXVsdGktc3RhZ2UgSFRUUCBhdXRoIHdpdGggUE9TVC9QVVQuCgotIE5pa2l0aW5za2l0IERtaXRyaXkgZmlsZWQgYnVnIHJlcG9ydCAjMTg2ODI1NQogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xODY4MjU1KSB3aXRoIGEgcGF0Y2guIEl0IGlkZW50aWZpZXMKICBhbmQgZml4ZXMgYSBwcm9ibGVtIHdpdGggcGFyc2luZyBXV1ctQXV0aGVudGljYXRlOiBoZWFkZXJzIHdpdGggYWRkaXRpb25hbAogIHNwYWNlcyBpbiB0aGUgbGluZSB0aGF0IHRoZSBwYXJzZXIgd2Fzbid0IHdyaXR0ZW4gdG8gZGVhbCB3aXRoLgoKRGFuaWVsIFMgKDggSmFuIDIwMDgpCi0gSW50cm9kdWNpbmcgY3VybF9lYXN5X3BhdXNlKCkgYW5kIG5ldyBtYWdpYyByZXR1cm4gY29kZXMgZm9yIGJvdGggdGhlIHJlYWQKICBhbmQgdGhlIHdyaXRlIGNhbGxiYWNrcyB0aGF0IG5vdyBjYW4gbWFrZSBhIGNvbm5lY3Rpb24ncyByZWFkaW5nIGFuZC9vcgogIHdyaXRpbmcgZ2V0IHBhdXNlZC4KCkRhbmllbCBTICg2IEphbiAyMDA4KQotIEplZmYgSm9obnNvbiBmaWxlZCBidWcgcmVwb3J0ICMxODYzMTcxCiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE4NjMxNzEpIHdoZXJlIGhlIHBvaW50ZWQgb3V0IHRoYXQKICBsaWJjdXJsJ3MgZGF0ZSBwYXJzZXIgZGlkbid0IGFjY2VwdCBhICsxMzAwIHRpbWUgem9uZSB3aGljaCBhY3R1YWxseSBpcyB1c2VkCiAgZmFpcmx5IG9mdGVuIChsaWtlIE5ldyBaZWFsYW5kJ3MgRGFpbGlnaHQgU2F2aW5ncyBUaW1lKSwgc28gSSBtb2RpZmllZCB0aGUKICBwYXJzZXIgdG8gbm93IGFjY2VwdCB1cCB0byBhbmQgaW5jbHVkaW5nIC0xNDAwIHRvICsxNDAwLgoKRGFuaWVsIFMgKDUgSmFuIDIwMDgpCi0gQmFzZWQgb24gZnVydGhlciBkaXNjdXNzaW9uIG9uIGN1cmwtbGlicmFyeSwgSSByZXZlcnRlZCB5ZXN0ZXJkYXkncyBTT0NLUzUKICBjb2RlIHRvIGluc3RlYWQgaW50cm9kdWNlIHN1cHBvcnQgZm9yIGEgbmV3IHByb3h5IHR5cGUgY2FsbGVkCiAgQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRSB0aGF0IGlzIHVzZWQgdG8gc2VuZCB0aGUgaG9zdCBuYW1lIHRvIHRoZSBwcm94eQogIGluc3RlYWQgb2YgSVAgYWRkcmVzcyBhbmQgdGhlcmUncyB0aHVzIG5vIGxvbmdlciBhbnkgbmVlZCBmb3IgYSBuZXcKICBjdXJsX2Vhc3lfc2V0b3B0KCkgb3B0aW9uLgoKICBUaGUgZGVmYXVsdCBTT0NLUzUgcHJveHkgaXMgYWdhaW4gYmFjayB0byBzZW5kaW5nIHRoZSBJUCBhZGRyZXNzIHRvIHRoZQogIHByb3h5LiAgVGhlIG5ldyBjdXJsIGNvbW1hbmQgbGluZSBvcHRpb24gZm9yIGVuYWJsaW5nIHNlbmRpbmcgaG9zdCBuYW1lIHRvIGEKICBTT0NLUzUgcHJveHkgaXMgbm93IC0tc29ja3M1LWhvc3RuYW1lLgoKRGFuaWVsIFMgKDQgSmFuIDIwMDgpCi0gQmFzZWQgb24gTWF4aW0gUGVyZW5lc2Vua28ncyBwYXRjaCwgd2Ugbm93IGRvIFNPQ0tTNSBvcGVyYXRpb25zIGFuZCBsZXQgdGhlCiAgcHJveHkgZG8gdGhlIGhvc3QgbmFtZSByZXNvbHZpbmcgYW5kIG9ubHkgaWYgLS1zb2NrczVpcCAob3IKICBDVVJMT1BUX1NPQ0tTNV9SRVNPTFZFX0xPQ0FMKSBpcyB1c2VkIHdlIHJlc29sdmUgdGhlIGhvc3QgbmFtZSBsb2NhbGx5IGFuZAogIHBhc3Mgb24gdGhlIElQIGFkZHJlc3Mgb25seSB0byB0aGUgcHJveHkuCgpZYW5nIFRzZSAoMyBKYW4gMjAwOCkKLSBNb2RpZmllZCB0ZXN0IGhhcm5lc3MgdG8gYWxsb3cgU0NQLCBTRlRQIGFuZCBTT0NLUzQgdGVzdHMgdG8gcnVuIHdpdGgKICBPcGVuU1NIIDIuOS45LCBTdW5TU0ggMS4wIG9yIGxhdGVyIHZlcnNpb25zLiBTT0NLUzUgdGVzdHMgbmVlZCBPcGVuU1NICiAgMy43LCBTdW5TU0ggMS4wIG9yIGxhdGVyLgoKRGFuaWVsIFMgKDIgSmFuIDIwMDgpCi0gSSBmaXhlZCB0d28gY2FzZXMgb2YgbWlzc2luZyByZXR1cm4gY29kZSBjaGVja3Mgd2hlbiBoYW5kbGluZyBjaHVua2VkCiAgZGVjb2Rpbmcgd2hlcmUgYSB3cml0ZSBlcnJvciAob3IgYWJvcnQgcmV0dXJuIGZyb20gYSBjYWxsYmFjaykgZGlkbid0IHN0b3AKICBsaWJjdXJsJ3MgcHJvY2Vzc2luZy4KCi0gSSByZW1vdmVkIHRoZSBzb2NrbGVuX3QgdXNlIGZyb20gdGhlIHB1YmxpYyBjdXJsL2N1cmwuaCBoZWFkZXIgYW5kIGluc3RlYWQKICBtYWRlIGl0IGFuIHVuc2lnbmVkIGludC4gVGhlIHR5cGUgd2FzIG9ubHkgdXNlZCBpbiB0aGUgY3VybF9zb2NrYWRkciBzdHJ1Y3QKICBkZWZpbml0aW9uIChvbmx5IHVzZWQgYnkgdGhlIGN1cmxfb3BlbnNvY2tldF9jYWxsYmFjaykuIE9uIGFsbCBwbGF0Zm9ybXMgSQogIGNvdWxkIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQsIHNvY2tsZW5fdCBpcyAzMiB1bnNpZ25lZCBiaXRzIGxhcmdlIHNvIEkgZG9uJ3QKICB0aGluayB0aGlzIHdpbGwgYnJlYWsgdGhlIEFQSSBvciBBQkkuIFRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcyBjaGFuZ2UgaXMgb2YKICBjb3Vyc2UgZm9yIGFsbCB0aGUgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSBhIHNvY2tsZW5fdCBkZWZpbml0aW9uIGluIHRoZWlyCiAgaGVhZGVycyB0byBidWlsZCBmaW5lIGFnYWluLiBQcm92aWRpbmcgb3VyIG93biBjb25maWd1cmUgbWFnaWMgYW5kIGN1c3RvbQogIGRlZmluaXRpb24gb2Ygc29ja2xlbl90IG9uIHRob3NlIHN5c3RlbXMgcHJvdmVkIHRvIHdvcmsgYnV0IHdhcyBhIGxvdCBvZgogIGNydWZ0LCBjb2RlIGFuZCBleHRyYSBtYWdpYyBuZWVkZWQgLSB3aGVuIHRoaXMgdmVyeSBzbWFsbCBjaGFuZ2Ugb2YgdHlwZQogIHNlZW1zIGhhcm1sZXNzIGFuZCBzdGlsbCBzb2x2ZXMgdGhlIG1pc3Npbmcgc29ja2xlbl90IHByb2JsZW0uCgotIFJpY2hhcmQgQXR0ZXJlciBicm91Z2h0IGEgcGF0Y2ggdGhhdCBhZGRlZCBzdXBwb3J0IGZvciBTT0NLUzRhIHByb3hpZXMsCiAgd2hpY2ggaXMgYW4gaW5vZmZpY2lhbCBQUk9YWTQgdmFyaWFudCB0aGF0IHNlbmRzIHRoZSBob3N0bmFtZSB0byB0aGUgcHJveHkKICBpbnN0ZWFkIG9mIHRoZSByZXNvbHZlZCBhZGRyZXNzICh3aGljaCBpcyBhbHJlYWR5IHN1cHBvcnRlZCBieSBTT0NLUzUpLgogIC0tc29ja3M0YSBpcyB0aGUgY3VybCBjb21tYW5kIGxpbmUgb3B0aW9uIGZvciBpdCBhbmQgQ1VSTE9QVF9QUk9YWVRZUEUgY2FuCiAgbm93IGJlIHNldCB0byBDVVJMUFJPWFlfU09DS1M0QSBhcyB3ZWxsLgoKRGFuaWVsIFMgKDEgSmFuIDIwMDgpCi0gTW9odW4gQmlzd2FzIHBvaW50ZWQgb3V0IHRoYXQgLS1saWJjdXJsIGdlbmVyYXRlZCBhIHNvdXJjZSBjb2RlIHdpdGggYW4gaW50CiAgZnVuY3Rpb24gYnV0IHdpdGhvdXQgYSByZXR1cm4gc3RhdGVtZW50LiBXaGlsZSBmaXhpbmcgdGhhdCwgSSBhbHNvIHRvb2sgY2FyZQogIGFib3V0IGFkZGluZyBzb21lIGJldHRlciBjb21tZW50cyBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlLgoK