PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KPEhUTUw+CjxIRUFEPgo8VElUTEU+IFBvcnRhYmlsaXR5IEd1aWRlIDwvVElUTEU+CjxNRVRBIE5BTUU9IkF1dGhvciIgQ09OVEVOVD0iTGlsYW50aGEiPgo8TUVUQSBOQU1FPSJLZXl3b3JkcyIgQ09OVEVOVD0iIj4KPE1FVEEgTkFNRT0iRGVzY3JpcHRpb24iIENPTlRFTlQ9IiI+CjwvSEVBRD4KCjxCT0RZPgo8aDE+UG9ydGFiaWxpdHkgR3VpZGU8L2gxPgo8UD4KVGhpcyBkb2N1bWVudCBwcm92aWRlcyBnZW5lcmFsIGd1aWRlbGluZXMgZm9yIHdyaXRpbmcgQy9DKysgY29kZSBpbiBhIHBvcnRhYmxlIGZhc2hpb24gZm9yIEFYSVMgQysrIHByb2plY3QuIE5ldyBkZXZlbG9wbWVudCBtdXN0IGFkaGVyZSB0byB0aGVzZSBndWlkZWxpbmVzIHRvIGVuc3VyZSBwb3J0YWJpbGl0eSBhbmQgdGh1cyBhdm9pZCByZXdvcmsuIE5vdGUgdGhhdCB0aGVzZSBndWlkZWxpbmVzIGFyZSBub3QgaW50ZW5kZWQgdG8gcmVwbGFjZSBtb3JlIGdlbmVyYWwgZ3VpZGVsaW5lcyBmb3Igd3JpdGluZyBnb29kIGNvZGUsIGJ1dCB0byBzdXBwbGVtZW50IGFuZCBleHRlbmQgdGhlbS4gIAo8UD4KVGhlc2UgYXJlIHRoZSBnZW5lcmFsIGd1aWRlbGluZXMgZm9yIGVuZ2luZWVyaW5nIGFuZCByZS1lbmdpbmVlcmluZyBjb2RlIHRvIGJlIHBvcnRhYmxlLCBhbmQgZm9yIGtlZXBpbmcgaXQgdGhhdCB3YXkuCjxVTD4KCTxMST5GaXJzdCwgZG8gbm8gaGFybS4gVGhhdCBpcywgZG9uJ3QgZG8gbW9yZSB0aGFuIHlvdSBuZWVkIHRvIGRvIC0ga2VlcCBjaGFuZ2VzIHNtYWxsIGFuZCBsb2NhbC4KCTxMST5JZiB5b3Ugc2VlIHRoZSBuZWVkIHRvIGdlbmVyYWxpemUgYSBzb2x1dGlvbiwgZG8gaXQuIElmIHlvdSBzb2x2ZSBhIHByb2JsZW0gb25jZSwgKGFsbW9zdCkgYW55IHNvbHV0aW9uIGlzIGZpbmUuIElmIHlvdSBzb2x2ZSBpdCB0d2ljZSwgeW91IHNob3VsZCB0aGluayBhYm91dCBhIGdlbmVyYWwgc29sdXRpb24uIElmIHlvdSBoYXZlIHRvIHNvbHZlIGl0IGEgdGhpcmQgdGltZSwgeW91IHNob3VsZCBnbyBmb3IgYSBnZW5lcmFsIHNvbHV0aW9uLgoJPExJPkNvbmRpdGlvbmFsaXplICh2aWEgPFRUPiNpZmRlZjwvVFQ+KSBzcGVjaWZpYyBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMgLgo8L1VMPgo8UD4KVGhlIGZvbGxvd2luZyBndWlkZWxpbmVzIHNob3VsZCBiZSBmb2xsb3dlZCB0byBtYXhpbWl6ZSBwb3J0YWJpbGl0eS4gVGhlIGxpc3Qgb2YgZ3VpZGVsaW5lcyBpcyBvcGVuIGZvciBleHRlbnNpb24gLSBpZiB5b3UgZmluZCBhIG5vbi1wb3J0YWJsZSBjb25zdHJ1Y3QgaW4gYW55IGNvZGUsIHJhaXNlIHRoZSBpc3N1ZSBhbmQgaXQgd2lsbCBiZSBhZGRyZXNzZWQuPEJSPgoKPFA+Cgo8VUw+CjxMST5Vc2UgQU5TSSBDL0MrKyBhbHdheXMgcG9zc2libGUuIERpZmZlcmVudCBjb21waWxlcnMgc3VwcG9ydCBkaWZmZXJlbnQgdmFyaWFudHMgb2YgQysrLiBUaGUgYmVzdCBjaGFuY2UgZm9yIHBvcnRhYmlsaXR5IGlzIHRvIGF2b2lkIG5vbi1zdGFuZGFyZCBjb25zdHJ1Y3RzIC0gZXZlbiB0aG91Z2ggdGhleSBtYXkgYmUgImNvbnZlbmllbnQiIGluIHRoZSBzaG9ydCB0ZXJtLiA8QlI+CjxMST5Vbml4IGlzIGNhc2Ugc2Vuc2l0aXZlLiBXaW5kb3dzIGlzIG5vdC4gPGJyPgpUaGVyZSBhcmUgc2V2ZXJhbCBwbGFjZXMgd2hlcmUgdGhpcyBjb21lcyB1cC4gVGhlIG1vc3QgZnJlcXVlbnQgaXMgaW4gdGhlICNpbmNsdWRlIGZvciBTdGRBZnguaCAtIGl0IHdvbid0IHdvcmsgaWYgeW91IHR5cGUgInN0ZGFmeC5oIiBpbnN0ZWFkLgo8TEk+IEFsd2F5cyBwdXQgYSBuZXcgbGluZSBhdCB0aGUgZW5kIG9mIGFsbCBzb3VyY2UgZmlsZXMuIE5vdCBoYXZpbmcgYSBuZXctbGluZSBjaGFyIGF0IHRoZSBlbmQgb2YgZmlsZSBicmVha3MgLmggZmlsZXMgd2l0aCB0aGUgU3VuIFdvcmtTaG9wIGNvbXBpbGVyIGFuZCBpdCBicmVha3MgLmNwcCBmaWxlcyBvbiBIUC4gCjxMST5TY29wZSBvZiBsb29wIHZhcmlhYmxlcwo8YnI+ClRoZSBjb25zdHJ1Y3Rpb246IDxicj4KPGJyPjxUVD4KJm5ic3A7Zm9yKGludCBpID0gMDtpJmx0OzEwO2krKyk8YnI+CiZuYnNwO3s8YnI+CiZuYnNwOwmFPGJyPgombmJzcDt9PGJyPgo8YnI+CiZuYnNwO3ggPSBpOyA8L1RUPi8vdHJ5aW5nIHRvIHVzZSB0aGUgbG9vcCB2YXJpYWJsZSBpcyBubyBsb25nZXIgdmFsaWQgQysrIC0gdGhlIHN0YW5kYXJkIHdhcyBjaGFuZ2VkLCB0aGVuIGNoYW5nZWQgYmFjay4gSXQgc3RpbGwgd29ya3Mgd2l0aCBWQysrLCBidXQgaXQgd29uJmFwb3M7dCB3b3JrIHdpdGggb3RoZXIgY29tcGlsZXJzLiBUaGUgU29sYXJpcyBjb21waWxlciB3aWxsIGNvbXBsYWluIHdoZW4geW91IHRyeSB0byB1c2UgdGhlIHZhcmlhYmxlIGFmdGVyIHRoZSBsb29wIC0gYmUgcmVhZHkgZm9yIGl0LiBZb3Ugc2hvdWxkIHByb2JhYmx5IGNoYW5nZSBpdCB0byBzb21ldGhpbmcgbGlrZSB0aGlzOjxicj4KPGJyPjxUVD4KJm5ic3A7aW50IGk7PGJyPgombmJzcDtmb3IoaSA9IDA7aTwxMDtpKyspPGJyPgombmJzcDt7PGJyPgombmJzcDsJhTxicj4KJm5ic3A7fTxicj4KPGJyPgombmJzcDt4ID0gaTs8YnI+Cjxicj48L1RUPgo8TEk+UmVnaXN0ZXIgZGVjbGFyYXRpb24gd2l0aG91dCB0eXBlCjxwPgpWQysrIGFuZCBTb2xhcmlzIEMrKyBjb21waWxlcnMgYWxsb3cgcmVnaXN0ZXIgZGVjbGFyYXRpb25zIHdpdGhvdXQgYSB0eXBlIC0gdGhleSBhbGxvdyBhICJkZWZhdWx0IiB0eXBlIG9mIGludCB0byBiZSBpbmZlcnJlZC4gVGhpcyBpcyBub3Qgc3RhbmRhcmQgQysrLCBhbmQgc2hvdWxkIGJlIGF2b2lkZWQuIAo8YnI+CjxMST5QcmVmZXIgbG9jYWx0aW1lX3IoKSB0byBsb2NhbHRpbWUoKQo8cD4KVGhlIE1pY3Jvc29mdCBpbXBsZW1lbnRhdGlvbiBvZiBsb2NhbHRpbWUgaXMgdGhyZWFkIHNhZmUsIHdoaWxlIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgKGFuZCBtb3N0IFVuaXgpIGltcGxlbWVudGF0aW9uIGlzIG5vdC4gVXNlIGxvY2FsdGltZV9yKCkgYXMgYSBkaXJlY3QgcmVwbGFjZW1lbnQgZm9yIGxvY2FsdGltZSgpLjxicj48YnI+CjxMST5QcmVmZXIgc3RydG9rX3IoKSB0byBzdHJ0b2soKQo8cD4KVGhlIE1pY3Jvc29mdCBpbXBsZW1lbnRhdGlvbiBvZiBzdHJ0b2soKSBpcyB0aHJlYWQtc2FmZSwgd2hpbGUgdGhlIFVuaXggaW1wbGVtZW50YXRpb24gaXMgbm90LiBUaGUgTWljcm9zb2Z0IHZlcnNpb24gYWNoaWV2ZXMgdGhyZWFkLXNhZmV0eSBieSB1c2luZyB0aHJlYWQtbG9jYWwtc3RvcmFnZSwgd2hpY2ggaXMgcmVsYXRpdmVseSBpbmVmZmljaWVudC4gVG8gY3JlYXRlIGVmZmljaWVudCwgcG9ydGFibGUsIHRocmVhZC1zYWZlIGNvZGUsIHVzZSB0aGUgc3RydG9rX3IoKSBmdW5jdGlvbiBpbnN0ZWFkLiA8YnI+Cjxicj4KPExJPkxhbmd1YWdlCjxQPgo8VUw+Cgk8TEk+UHJlcHJvY2Vzc29ycyBEaXJlY3RpdmVzIGFyZSB2ZXJ5IG11Y2ggdGhlIHNhbWUgaW4gYWxsIHByZXByb2Nlc3NvcnMsIGV4Y2VwdCB0aGF0IHNvbWUgcHJlcHJvY2Vzc29ycyBtYXkgbm90IAoJICAgIGtub3cgYWJvdXQgdGhlIGRlZmluZWQgb3BlcmF0b3IgaW4gYSA8VFQ+I2lmPC9UVD5kaXJlY3RpdmUgbm9yIGFib3V0IHRoZSA8VFQ+I3ByYWdtYTwvVFQ+IGRpcmVjdGl2ZS4gCgkJVGhlIDxUVD4jcHJhZ21hPC9UVD4gZGlyZWN0aXZlIHNob3VsZCBwb3NlIG5vIHByb2JsZW1zIGV2ZW4gdG8gb2xkIHByZXByb2Nlc3NvcnMgaWYgaXQgY29tZXMgaW5kZW50ZWQuIEZ1cnRoZXJtb3JlLCBpdCBpcyBhZHZpc2FibGUgdG8gZW5jbG9zZSB0aGVtIHdpdGggPFRUPiNpZmRlZjwvVFQ+J3MgaW4gb3JkZXIgdG8gZG9jdW1lbnQgdW5kZXIgd2hpY2ggcGxhdGZvcm0gdGhleSBtYWtlIHNlbnNlOiA8QlI+PEJSPgoJCTxUVD4KCQkjaWZkZWYgJmx0O3BsYXRmb3JtLXNwZWNpZmljLXN5bWJvbCZndDs8QlI+CgkJICAgI3ByYWdtYSAuLi48QlI+CgkJI2VuZGlmPEJSPgoJCTwvVFQ+PEJSPgoJPExJPiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIDxCPi1JPC9CPiBjb21tYW5kIG9wdGlvbiBjYW4gZGlmZmVyIGZyb20gb25lIHN5c3RlbSB0byBhbm90aGVyLiBCZXNpZGVzLCBpdCBpcyBub3QgY292ZXJlZCBieSB0aGUgU3RhbmRhcmQuIEZvciBleGFtcGxlLCB0aGUgZGlyZWN0aXZlIDxUVD4jaW5jbHVkZSAiZGlyL2ZpbGUuaCIgPC9UVD4gaW4gY29uanVuY3Rpb24gd2l0aCA8Qj4tSS4uPC9CPiB3b3VsZCBjYXVzZSBtb3N0IHByZXByb2Nlc3NvcnMgaW4gYSBVbml4LWxpa2UgZW52aXJvbm1lbnQgdG8gc2VhcmNoIGZvciA8VFQ+ZmlsZS5oPC9UVD4gaW4gPFRUPi4uL2RpcjwvVFQ+IGJ1dCB1bmRlciBWTVMgPFRUPmZpbGUuaDwvVFQ+IGlzIG9ubHkgc2VhcmNoZWQgZm9yIGluIHRoZSBzdWJkaXJlY3RvcnkgPFRUPmRpcjwvVFQ+IGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgoJPExJPkFsbCBVbml4IGZsYXZvdXJzIGRpZmZlciBzaWduaWZpY2FudGx5IGluIHRoZWlyIHJhdyBpL28gaW50ZXJmYWNlICh0aGF0IGlzLCA8VFQ+aW9jdGw8L1RUPiBzeXN0ZW0gY2FsbCkgd2hpY2ggc2hvdWxkIGJlIGF2b2lkZWQgaWYgcG9zc2libGUuIAoJPExJPiBQcmVmZXIgbmV3LXN0eWxlICNpbmNsdWRlcy4gVXNlPFRUPjxicj4KI2luY2x1ZGUgJmx0O2NzdHJpbmcmZ3Q7PGJyPgpyYXRoZXIgdGhhbjxicj4KI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0Ozxicj4KCjxMST5JZiB5b3UgbXVzdCAjaWZkZWaFCjxwPgpGb3IgY29kZSB0aGF0IGlzIHNwZWNpZmljIHRvIFdJTjMyLCB0aGUgVkMrKyBjb21waWxlciBkZWZpbmVzIHRoZSBXSU4zMiBzeW1ib2wgYXV0b21hdGljYWxseS4gU28geW91IGNhbiB1c2U6PGJyPgo8dHQ+CiNpZmRlZiBXSU4zMjxicj4KI2VuZGlmPGJyPgo8L3R0Pjxicj4KdG8gaXNvbGF0ZSB0aGlzIGNvZGUuIEZvciBjb2RlIHRoYXQgaXMgc3BlY2lmaWMgdG8gVU5JWCBidXQgaXMgbm90IGFwcGxpY2FibGUgdW5kZXIgV0lOMzIsIHVzZTxicj4KPHR0PgojaWZkZWYgVU5JWDxicj4KI2VuZGlmPGJyPgo8L3R0Pgo8TEk+QXZvaWQgdXNpbmcgUlRUSQo8cD4KPGJyPgo8TEk+TmVzdGVkIENsYXNzIEFjY2Vzcwo8UD4KVkMrKyBkaWZmZXJzIGZyb20gc3RhbmRhcmQgQysrIGluIHRoZSBhY2Nlc3MgZ3JhbnRlZCB0byBuZXN0ZWQgY2xhc3Nlcy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSBpcyBsZWdhbCBpbiBWQysrLCBidXQgaWxsZWdhbCBpbiBDKys6CjxQPgo8VFQ+CmNsYXNzIE91dGVyPEJSPgp7PEJSPgombmJzcDsmbmJzcDtwcml2YXRlOjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7ZW51bSBPdXRlclN0YXR1cyB7IEdPT0QsIEJBRCwgVkVSWUJBRH07PEJSPgombmJzcDsmbmJzcDsmbmJzcDsghTxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Y2xhc3MgSW5uZXIgPEJSPgombmJzcDsmbmJzcDsmbmJzcDt7PEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtwdWJsaWM6PEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtPdXRlclN0YXR1cyBzdGF0dXM7PEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDuFPEJSPgombmJzcDsmbmJzcDsmbmJzcDt9PEJSPgp9OzxCUj4KPC9UVD4KPFA+VGhlIHByb2JsZW0gaXMgdGhhdCBPdXRlclN0YXR1cyBpcyBub3QgYXZhaWxhYmxlIHRvIGNsYXNzIElubmVyIC0gYmVpbmcgYSBuZXN0ZWQgY2xhc3MgZG9lc24ndCBnaXZlIElubmVyIHJpZ2h0cyB0byBwcml2YXRlIG1lbWJlcnMuIE9uZSBzb2x1dGlvbiBpcyBmb3IgSW5uZXIgY2xhc3MgdG8gYmUgYSBmcmllbmQgb2YgdGhlIE91dGVyIGNsYXNzOiAKPFA+CjxUVD4KY2xhc3MgT3V0ZXI8QlI+Cns8QlI+CiZuYnNwOyZuYnNwO3ByaXZhdGU6PEJSPgombmJzcDsmbmJzcDsmbmJzcDtlbnVtIE91dGVyU3RhdHVzIHsgR09PRCwgQkFELCBWRVJZQkFEfTs8QlI+CiZuYnNwOyZuYnNwOyZuYnNwO4U8QlI+CiZuYnNwOyZuYnNwOyZuYnNwO2NsYXNzIElubmVyOyAvLyBmb3J3YXJkIGRlY2w8QlI+CiZuYnNwOyZuYnNwOyZuYnNwO2ZyaWVuZCBjbGFzcyBJbm5lcjs8QlI+CjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Y2xhc3MgSW5uZXIgPEJSPgombmJzcDsmbmJzcDsmbmJzcDt7PEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtwdWJsaWM6PEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtPdXRlclN0YXR1cyBzdGF0dXM7CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO4U8QlI+CiZuYnNwOyZuYnNwOyZuYnNwO308QlI+Cn07PEJSPgo8L1RUPgo8YnI+CjxMST4gVXNlIGV4dGVybiAiQyIgdG8gYWNjZXNzIDNyZCBwYXJ0eSBDIGxpYnJhcmllcyBsaWtlOgo8cD4KJm5ic3A7I2lmZGVmIF9fY3BsdXNwbHVzIDxicj4KJm5ic3A7ZXh0ZXJuICJDIiB7PGJyPgombmJzcDsjZW5kaWYgPGJyPgombmJzcDsuLi4uPGJyPgombmJzcDsjaWZkZWYgX19jcGx1c3BsdXM8YnI+CiZuYnNwO308YnI+CiZuYnNwOyNlbmRpZjxicj4KCgo8YnI+PGJyPgo8L1VMPgo8QlI+PEJSPgo8Yj4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvYj4KCjxIMT5CZXN0IFByYWN0aWNlczwvSDE+CjxwPgo8T0w+Cgk8TEk+QWx3YXlzIHRlc3QgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcyA8PSBvciA+PSwgbmV2ZXIgdXNlIGFuIGV4YWN0IGNvbXBhcmlzb24gKD09IG9yICE9KS4KCTxMST5UaGUgcmVhZGFiaWxpdHkgb2YgbmFtZXMgb2YgIGZ1bmN0aW9ucywgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgcGFyYW1ldGVycyBtdXN0IGJlIHN1cHBvcnRlZCBieSB0aGUgdXNlIG9mIGNhcGl0YWxpemluZy4gVGhpcyBtZWFucyB0aGF0IJF3b3Jkc5IgaW4gYSBuYW1lIGFsd2F5cyBzdGFydCB3aXRoIGEgY2FwaXRhbCBhbmQgY29udGludWUgd2l0aCBsb3dlciBjYXNlLiAKCTxMST5JdCBpcyBwcmVmZXJyZWQgdGhhdCB0aGUgbGluZSB3aWR0aCBkb2VzIG5vdCBleGNlZWQgdGhlIHdpZHRoIG9mIHRoZSBDb21tZW50IEJsb2NrcyBpbiBvcmRlciB0byBrZWVwIHRoZSBjb2RlIHJlYWRhYmxlIG9uIHNjcmVlbiBhbmQgb24gdGhlIHByaW50ZXIuIEluIHNvbWUgY2FzZXMgaG93ZXZlciBpdCBpcyBkaWZmaWN1bHQgdG8gYXZvaWQuCgk8TEk+V2hlbiB0ZXN0aW5nIGluY3JlbWVudGluZyBvciBkZWNyZW1lbnRpbmcgY291bnRlcnMgdHJ5IHRvIHVzZSB0aGUgJmd0Oz0gb3IgJmx0Oz0gaW5zdGVhZCBvZiA9PSBpbiBpZi1zdGF0ZW1lbnRzLiBUaGlzIGlzIG9uZSBvZiB0aGUgaW1wb3J0YW50IGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBydWxlcy4gSWYgZm9yIHNvbWUgcmVhc29uIHRoZSB2YWx1ZSBvZiB0aGUgY291bnRlciBnZXRzIGhpZ2hlciBvciBsb3dlciB0aGFuIGV4cGVjdGVkIGluIHRoZSB0ZXN0IGZvciBlcXVhbCB5b3Ugd291bGQgcnVuIGludG8gcHJvYmxlbXMuCgk8TEk+VGhlIGFzdGVyaXNrICiRKpIpIGluIGEgcG9pbnRlciBkZWNsYXJhdGlvbiBzdGlja3MgdG8gdGhlIHZhcmlhYmxlIG5hbWUgb3IgcGFyYW1ldGVyIG5hbWUuPEJSPgoJCWVnOiBmbG9hdCAqUmVhbFZhbHVlUHRyOwo8L09MPgo8YnI+PGJyPjxicj4KPFVMPgo8TEk+PEI+RnVuY3Rpb25zPC9CPjxCUj4KPFA+CkZ1bmN0aW9ucyBzaG91bGQgYmUgc2hvcnQgYW5kIHN3ZWV0LCBhbmQgZG8ganVzdCBvbmUgdGhpbmcuICBUaGV5IHNob3VsZApmaXQgb24gb25lIG9yIHR3byBzY3JlZW5mdWxzIG9mIHRleHQgKHRoZSBJU08vQU5TSSBzY3JlZW4gc2l6ZSBpcyA4MHgyNCwKYXMgd2UgYWxsIGtub3cpLCBhbmQgZG8gb25lIHRoaW5nIGFuZCBkbyB0aGF0IHdlbGwuPEJSPiAKPEJSPgpUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBmdW5jdGlvbiBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZQpjb21wbGV4aXR5IGFuZCBpbmRlbnRhdGlvbiBsZXZlbCBvZiB0aGF0IGZ1bmN0aW9uLiAgU28sIGlmIHlvdSBoYXZlIGEKY29uY2VwdHVhbGx5IHNpbXBsZSBmdW5jdGlvbiB0aGF0IGlzIGp1c3Qgb25lIGxvbmcgKGJ1dCBzaW1wbGUpCmNhc2Utc3RhdGVtZW50LCB3aGVyZSB5b3UgaGF2ZSB0byBkbyBsb3RzIG9mIHNtYWxsIHRoaW5ncyBmb3IgYSBsb3Qgb2YKZGlmZmVyZW50IGNhc2VzLCBpdCdzIE9LIHRvIGhhdmUgYSBsb25nZXIgZnVuY3Rpb24uIDxCUj4KPEJSPgpIb3dldmVyLCBpZiB5b3UgaGF2ZSBhIGNvbXBsZXggZnVuY3Rpb24sIGFuZCB5b3Ugc3VzcGVjdCB0aGF0IGEKbGVzcy10aGFuLWdpZnRlZCBmaXJzdC15ZWFyIGhpZ2gtc2Nob29sIHN0dWRlbnQgbWlnaHQgbm90IGV2ZW4KdW5kZXJzdGFuZCB3aGF0IHRoZSBmdW5jdGlvbiBpcyBhbGwgYWJvdXQsIHlvdSBzaG91bGQgYWRoZXJlIHRvIHRoZQptYXhpbXVtIGxpbWl0cyBhbGwgdGhlIG1vcmUgY2xvc2VseS4gIFVzZSBoZWxwZXIgZnVuY3Rpb25zIHdpdGgKZGVzY3JpcHRpdmUgbmFtZXMgKHlvdSBjYW4gYXNrIHRoZSBjb21waWxlciB0byBpbi1saW5lIHRoZW0gaWYgeW91IHRoaW5rCml0J3MgcGVyZm9ybWFuY2UtY3JpdGljYWwsIGFuZCBpdCB3aWxsIHByb2JhYmx5IGRvIGEgYmV0dGVyIGpvYiBvZiBpdAp0aGF0IHlvdSB3b3VsZCBoYXZlIGRvbmUpLiA8QlI+CjxCUj4KQW5vdGhlciBtZWFzdXJlIG9mIHRoZSBmdW5jdGlvbiBpcyB0aGUgbnVtYmVyIG9mIGxvY2FsIHZhcmlhYmxlcy4gIFRoZXkKc2hvdWxkbid0IGV4Y2VlZCA1LTEwLCBvciB5b3UncmUgZG9pbmcgc29tZXRoaW5nIHdyb25nLiAgUmUtdGhpbmsgdGhlCmZ1bmN0aW9uLCBhbmQgc3BsaXQgaXQgaW50byBzbWFsbGVyIHBpZWNlcy4gIEEgaHVtYW4gYnJhaW4gY2FuCmdlbmVyYWxseSBlYXNpbHkga2VlcCB0cmFjayBvZiBhYm91dCA3IGRpZmZlcmVudCB0aGluZ3MsIGFueXRoaW5nIG1vcmUKYW5kIGl0IGdldHMgY29uZnVzZWQuICBZb3Uga25vdyB5b3UncmUgYnJpbGxpYW50LCBidXQgbWF5YmUgeW91J2QgbGlrZQp0byB1bmRlcnN0YW5kIHdoYXQgeW91IGRpZCAyIHdlZWtzIGZyb20gbm93LiAKPEJSPgo8QlI+CjxCUj48QlI+Cgo8TEk+PEI+TmFtaW5nPC9CPgo8QlI+PFA+CkMgaXMgYSBTcGFydGFuIGxhbmd1YWdlLCBhbmQgc28gc2hvdWxkIHlvdXIgbmFtaW5nIGJlLiAgQyBwcm9ncmFtbWVycyAKZG8gbm90IHVzZSBjdXRlIG5hbWVzIGxpa2UgVGhpc1ZhcmlhYmxlSXNBVGVtcG9yYXJ5Q291bnRlci4gIEEgQyAKcHJvZ3JhbW1lciB3b3VsZCBjYWxsIHRoYXQgdmFyaWFibGUgInRtcCIsIHdoaWNoIGlzIG11Y2ggZWFzaWVyIHRvIAp3cml0ZSwgYW5kIG5vdCB0aGUgbGVhc3QgbW9yZSBkaWZmaWN1bHQgdG8gdW5kZXJzdGFuZC4gPEJSPgo8QlI+CkhPV0VWRVIsIHdoaWxlIG1peGVkLWNhc2UgbmFtZXMgYXJlIGZyb3duZWQgdXBvbiwgZGVzY3JpcHRpdmUgbmFtZXMgZm9yCmdsb2JhbCB2YXJpYWJsZXMgYXJlIGEgbXVzdC4gIFRvIGNhbGwgYSBnbG9iYWwgZnVuY3Rpb24gImZvbyIgaXMgYQpzaG9vdGluZyBvZmZlbnNlLiA8QlI+CjxCUj4KR0xPQkFMIHZhcmlhYmxlcyAodG8gYmUgdXNlZCBvbmx5IGlmIHlvdSBfcmVhbGx5XyBuZWVkIHRoZW0pIG5lZWQgdG8KaGF2ZSBkZXNjcmlwdGl2ZSBuYW1lcywgYXMgZG8gZ2xvYmFsIGZ1bmN0aW9ucy4gIElmIHlvdSBoYXZlIGEgZnVuY3Rpb24KdGhhdCBjb3VudHMgdGhlIG51bWJlciBvZiBhY3RpdmUgdXNlcnMsIHlvdSBzaG91bGQgY2FsbCB0aGF0CiJjb3VudF9hY3RpdmVfdXNlcnMoKSIgb3Igc2ltaWxhciwgeW91IHNob3VsZCBfbm90XyBjYWxsIGl0ICJjbnR1c3IoKSIuIDxCUj4KPEJSPgpFbmNvZGluZyB0aGUgdHlwZSBvZiBhIGZ1bmN0aW9uIGludG8gdGhlIG5hbWUgKHNvLWNhbGxlZCBIdW5nYXJpYW4Kbm90YXRpb24pIGlzIGJyYWluIGRhbWFnZWQgLSB0aGUgY29tcGlsZXIga25vd3MgdGhlIHR5cGVzIGFueXdheSBhbmQgY2FuCmNoZWNrIHRob3NlLCBhbmQgaXQgb25seSBjb25mdXNlcyB0aGUgcHJvZ3JhbW1lci4gIE5vIHdvbmRlciBNaWNyb1NvZnQKbWFrZXMgYnVnZ3kgcHJvZ3JhbXMuIDxCUj4KPEJSPgpMT0NBTCB2YXJpYWJsZSBuYW1lcyBzaG91bGQgYmUgc2hvcnQsIGFuZCB0byB0aGUgcG9pbnQuICBJZiB5b3UgaGF2ZQpzb21lIHJhbmRvbSBpbnRlZ2VyIGxvb3AgY291bnRlciwgaXQgc2hvdWxkIHByb2JhYmx5IGJlIGNhbGxlZCAiaSIuIApDYWxsaW5nIGl0ICJsb29wX2NvdW50ZXIiIGlzIG5vbi1wcm9kdWN0aXZlLCBpZiB0aGVyZSBpcyBubyBjaGFuY2Ugb2YgaXQKYmVpbmcgbWlzLXVuZGVyc3Rvb2QuICBTaW1pbGFybHksICJ0bXAiIGNhbiBiZSBqdXN0IGFib3V0IGFueSB0eXBlIG9mCnZhcmlhYmxlIHRoYXQgaXMgdXNlZCB0byBob2xkIGEgdGVtcG9yYXJ5IHZhbHVlLiA8QlI+CjxCUj4KSWYgeW91IGFyZSBhZnJhaWQgdG8gbWl4IHVwIHlvdXIgbG9jYWwgdmFyaWFibGUgbmFtZXMsIHlvdSBoYXZlIGFub3RoZXIKcHJvYmxlbSwgd2hpY2ggaXMgY2FsbGVkIHRoZSBmdW5jdGlvbi1ncm93dGgtaG9ybW9uZS1pbWJhbGFuY2Ugc3luZHJvbWUuIApTZWUgbmV4dCBjaGFwdGVyLgo8QlI+PEJSPjxCUj4KPExJPjxCPlRlc3Rpbmc8L0I+IAo8UD4gVGhlIGdvYWwgb2YgYW55IHNvZnR3YXJlIGRldmVsb3BtZW50IGVmZm9ydCBpcyB0byBwcm9kdWNlIGNvZGUgdGhhdCB3b3JrcyBhcyBpbnRlbmRlZC4gVGhlIG9ubHkgd2F5IHRvIGVuc3VyZSB0aGF0IGlzIHRvIHRlc3QgaXQuIEdpdmVuIHRoYXQgaHVtYW5zIGxlYXJuIG1vc3QgZWZmaWNpZW50bHksIGFuZCBwZXJjZWl2ZSBwYXR0ZXJucyBiZXN0LCB3aGVuIHN0aW11bHVzIGFuZCByZXNwb25zZSBhcmUgY2xvc2UgaW4gdGltZSwgaXQgZm9sbG93cyB0aGF0IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gbG9jYXRlIGFuZCBmaXggZGVmZWN0cyBpcyB0byB0ZXN0IGNvZGUgYXMgc29vbiBhcyBpdCBpcyB3cml0dGVuLiA8QlI+PEJSPgoKPFVMPgo8TEk+UGxhbiBhaGVhZCB0byB0ZXN0IHlvdXIgY2hhbmdlcy4gSWYgeW91IGRvbid0IGhhdmUgYSB0ZXN0IGhhcm5lc3MsIGJ1aWxkIG9uZS4gSWYgeW91IGNhbid0IHRlc3QgeW91ciBjaGFuZ2VzLCB5b3UncmUgaGFja2luZy4KPExJPllvdXIgdGVzdCBoYXJuZXNzIGlzIHBhcnQgb2YgdGhlIGNvZGUgZGVsaXZlcmFibGVzLiBJdCBuZWVkcyB0byBiZSBjb21taXRlZCwgYWxvbmcgd2l0aCBhbnkgZGF0YSBuZWVkZWQsIHNvIHRoYXQgc29tZWJvZHkgZWxzZSBjYW4gdGVzdCB5b3VyIGNvZGUgd2hlbiB0aGV5IG5lZWQgdG8gbWFrZSBhIGNoYW5nZS4gCjxMST5NYWtlIHN1cmUgeW91ciB0ZXN0aW5nIGV4ZXJjaXNlcyB0aGUgY3JpdGljYWwgcGF0aHMuIFlvdSBkb24ndCBoYXZlIHRvIGdvIGNyYXp5IGJ1aWxkaW5nIHRlc3QgaGFybmVzc2VzLCBidXQgeW91IG5lZWQgdG8ga25vdyB0aGF0IHlvdSdyZSB3cml0aW5nIGdvb2QgY29kZS4gCjxMST5NYWtlIHN1cmUgeW91ciB0ZXN0IGhhcm5lc3MgaXMgdW5kZXIgeW91ciBjb250cm9sLiAgSWYgeW91IGRlcGVuZCBvbiBvdGhlciBlbGVtZW50cyBmb3IgdGVzdGluZyB5b3VyIGNvbXBvbmVudHMsIHlvdSBpbnRyb2R1Y2UgYSBkZXZlbG9wbWVudCBkZXBlbmRlbmN5IHRoYXQgd2lsbCBpbmplY3QgZGVsYXkgaW50byB0aGUgZGV2ZWxvcG1lbnQgYW5kIHRlc3Rpbmcgb2YgYm90aCB0aGUgbGlicmFyeSBhbmQgdGhlIGNsaWVudC4KPExJPk1ha2Ugc3VyZSB5b3VyIHRlc3QgaGFybmVzcyBpcyBwb3J0YWJsZSB0b28uIE5lZWRsZXNzIHRvIHNheSwgaWYgY29kZSBpcyB0byBiZSBwb3J0YWJsZSwgaXQgbXVzdCBiZSBidWlsdCBhbmQgdGVzdGVkIGluIGFsbCB0YXJnZXQgZW52aXJvbm1lbnRzLiBLZWVwIGl0IHNpbXBsZSwgYW5kIHBsYW4gZm9yIGl0IHRvIGJlIHNjcmlwdGFibGUuIFRoYXQgbWVhbnMgLSBjb21tYW5kIGxpbmVzCjwvVUw+CjwvVUw+CjwvVUw+Cjxicj48YnI+PGJyPgpMaW5rczo8YnI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuZ290ZG90bmV0LmNvbS90ZWFtL2NwbHVzcGx1cy9hcnRpY2xlcy9jb21wbWlnLmRvYyI+TWljcm9zb2Z0IFZpc3VhbCBDKysgLk5FVCBDb21waWxlciBNaWdyYXRpb24gR3VpZGU8L2E+Cgo8YnI+PGJyPjxicj4KPC9CT0RZPgo8L0hUTUw+Cg==