Lyo9PT09PT09PT09PT09PT09PT09PT0gYmVnaW5fY29weXJpZ2h0X25vdGljZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpJTlRFTCBDT05GSURFTlRJQUwKQ29weXJpZ2h0IDIwMDktMjAxMgpJbnRlbCBDb3Jwb3JhdGlvbiBBbGwgUmlnaHRzIFJlc2VydmVkLgoKVGhlIHNvdXJjZSBjb2RlIGNvbnRhaW5lZCBvciBkZXNjcmliZWQgaGVyZWluIGFuZCBhbGwgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gdGhlCnNvdXJjZSBjb2RlICgiTWF0ZXJpYWwiKSBhcmUgb3duZWQgYnkgSW50ZWwgQ29ycG9yYXRpb24gb3IgaXRzIHN1cHBsaWVycyBvcgpsaWNlbnNvcnMuIFRpdGxlIHRvIHRoZSBNYXRlcmlhbCByZW1haW5zIHdpdGggSW50ZWwgQ29ycG9yYXRpb24gb3IgaXRzIHN1cHBsaWVycwphbmQgbGljZW5zb3JzLiBUaGUgTWF0ZXJpYWwgY29udGFpbnMgdHJhZGUgc2VjcmV0cyBhbmQgcHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAppbmZvcm1hdGlvbiBvZiBJbnRlbCBvciBpdHMgc3VwcGxpZXJzIGFuZCBsaWNlbnNvcnMuIFRoZSBNYXRlcmlhbCBpcyBwcm90ZWN0ZWQgYnkKd29ybGR3aWRlIGNvcHlyaWdodCBhbmQgdHJhZGUgc2VjcmV0IGxhd3MgYW5kIHRyZWF0eSBwcm92aXNpb25zLiBObyBwYXJ0IG9mIHRoZQpNYXRlcmlhbCBtYXkgYmUgdXNlZCwgY29waWVkLCByZXByb2R1Y2VkLCBtb2RpZmllZCwgcHVibGlzaGVkLCB1cGxvYWRlZCwgcG9zdGVkLAp0cmFuc21pdHRlZCwgZGlzdHJpYnV0ZWQsIG9yIGRpc2Nsb3NlZCBpbiBhbnkgd2F5IHdpdGhvdXQgSW50ZWyScyBwcmlvciBleHByZXNzCndyaXR0ZW4gcGVybWlzc2lvbi4KCk5vIGxpY2Vuc2UgdW5kZXIgYW55IHBhdGVudCwgY29weXJpZ2h0LCB0cmFkZSBzZWNyZXQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsCnByb3BlcnR5IHJpZ2h0IGlzIGdyYW50ZWQgdG8gb3IgY29uZmVycmVkIHVwb24geW91IGJ5IGRpc2Nsb3N1cmUgb3IgZGVsaXZlcnkKb2YgdGhlIE1hdGVyaWFscywgZWl0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGluZHVjZW1lbnQsIGVzdG9wcGVsCm9yIG90aGVyd2lzZS4gQW55IGxpY2Vuc2UgdW5kZXIgc3VjaCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG11c3QgYmUKZXhwcmVzcyBhbmQgYXBwcm92ZWQgYnkgSW50ZWwgaW4gd3JpdGluZy4KCkZpbGUgTmFtZTogdmFfcHJpdmF0ZS5oCkFic3RyYWN0OiBsaWJ2YSBwcml2YXRlIEFQSSBoZWFkIGZpbGUKCkVudmlyb25tZW50OiBMaW51eC9BbmRyb2lkCgpOb3RlczoKCj09PT09PT09PT09PT09PT09PT09PT09IGVuZF9jb3B5cmlnaHRfbm90aWNlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwojaWZuZGVmIF9fVkFfUFJJVkFURV9IX18KI2RlZmluZSBfX1ZBX1BSSVZBVEVfSF9fCiNpbmNsdWRlIDx2YS92YS5oPgojZGVmaW5lIEVOQUJMRV9QQVZQX0xJTlVYICAgICAgICAgICAgICAgICAgIDEKLy8gTWlzYyBwYXJhbWV0ZXIgZm9yIGVuY29kZXIKI2RlZmluZSAgVkFFbmNNaXNjUGFyYW1ldGVyVHlwZVByaXZhdGUgICAgIC0yCi8vIGVuY3J5cHRpb24gcGFyYW1ldGVycyBmb3IgUEFWUAojZGVmaW5lICBWQUVuY3J5cHRpb25QYXJhbWV0ZXJCdWZmZXJUeXBlICAgLTMKCnR5cGVkZWYgc3RydWN0IF9WQUVuY01pc2NQYXJhbWV0ZXJQcml2YXRlCnsKICAgIHVuc2lnbmVkIGludCB0YXJnZXRfdXNhZ2U7IC8vIFZhbGlkIHZhbHVlcyAxLTcgZm9yIEFWQyAmIE1QRUcyLgogICAgdW5zaWduZWQgaW50IHJlc2VydmVkWzddOyAgLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCn0gVkFFbmNNaXNjUGFyYW1ldGVyUHJpdmF0ZTsKCi8qVkFFbmNyeXRwaW9uUGFyYW1ldGVyQnVmZmVyKi8KdHlwZWRlZiBzdHJ1Y3QgX1ZBRW5jcnlwdGlvblBhcmFtZXRlckJ1ZmZlcgp7CiAgICAvL05vdCB1c2VkIGN1cnJlbnRseQogICAgdW5zaWduZWQgaW50IGVuY3J5cHRpb25TdXBwb3J0OwogICAgLy9Ob3QgdXNlZCBjdXJyZW50bHkKICAgIHVuc2lnbmVkIGludCBob3N0RW5jcnlwdE1vZGU7CiAgICAvLyBGb3IgSVYsIENvdW50ZXIgaW5wdXQKICAgIHVuc2lnbmVkIGludCBwYXZwQWVzQ291bnRlclsyXVs0XTsKICAgIC8vIG5vdCB1c2VkIGN1cnJlbnRseQogICAgdW5zaWduZWQgaW50IHBhdnBJbmRleDsKICAgIC8vIFBBVlAgbW9kZSwgQ1RSLCBDQkMsIERFREUgZXRjCiAgICB1bnNpZ25lZCBpbnQgcGF2cENvdW50ZXJNb2RlOwogICAgdW5zaWduZWQgaW50IHBhdnBFbmNyeXB0aW9uVHlwZTsKICAgIC8vIG5vdCB1c2VkIGN1cnJlbnRseQogICAgdW5zaWduZWQgaW50IHBhdnBJbnB1dFNpemVbMl07CiAgICAvLyBub3QgdXNlZCBjdXJyZW50bHkKICAgIHVuc2lnbmVkIGludCBwYXZwQnVmZmVyU2l6ZVsyXTsKICAgIC8vIG5vdCB1c2VkIGN1cnJlbnRseQogICAgVkFCdWZmZXJJRCAgIHB2YXBfYnVmOwogICAgLy8gc2V0IHRvIFRSVUUgaWYgcHJvdGVjdGVkIG1lZGlhCiAgICB1bnNpZ25lZCBpbnQgcGF2cEhhc0JlZW5FbmFibGVkOwogICAgLy8gbm90IHVzZWQgY3VycmVudGx5CiAgICB1bnNpZ25lZCBpbnQgSW50ZXJtbWVkaWF0ZWRCdWZSZXE7CiAgICAvLyBub3QgdXNlZCBjdXJyZW50bHkKICAgIHVuc2lnbmVkIGludCB1aUNvdW50ZXJJbmNyZW1lbnQ7CiAgICAvLyBBcHBJZDogUEFWUCBzZXNzaW4gSW5kZXggZnJvbSBhcHBsaWNhdGlvbgogICAgdW5zaWduZWQgaW50IGFwcF9pZDsKCn0gVkFFbmNyeXB0aW9uUGFyYW1ldGVyQnVmZmVyOwoKI2VuZGlmCg==