CiBPcGVuU1NMIENIQU5HRVMKIF9fX19fX19fX19fX19fXwoKCiBDaGFuZ2VzIGJldHdlZW4gMC45LjFjIGFuZCAwLjkuMgoKICAqKSBGaXggdGhlIGdlbmVyYXRpb24gb2YgdHdvIHBhcnQgYWRkcmVzc2VzIGluIHBlcmwuCiAgICAgW0tlbmppIE1peWFrZSA8a2VuamlAbWl5YWtlLm9yZz4sIGludGVncmF0ZWQgYnkgQmVuIExhdXJpZV0KCiAgKikgQWRkIGNvbmZpZyBlbnRyeSBmb3IgTGludXggb24gTUlQUy4KICAgICBbSm9obiBUb2JleSA8anRvYmV5QGNoYW5uZWwxLmNvbT5dCgogICopIE1ha2UgbGlua3Mgd2hlbmV2ZXIgQ29uZmlndXJlIGlzIHJ1biwgdW5sZXNzIHdlIGFyZSBvbiBXaW5kb3plLgogICAgIFtCZW4gTGF1cmllXQoKICAqKSBQZXJtaXQgZXh0ZW5zaW9ucyB0byBiZSBhZGRlZCB0byBDUkxzIHVzaW5nIGNybF9zZWN0aW9uIGluIG9wZW5zc2wuY25mLgogICAgIEN1cnJlbnRseSBvbmx5IGlzc3VlckFsdE5hbWUgYW5kIEF1dGhvcml0eUtleUlkZW50aWZpZXIgbWFrZSBhbnkgc2Vuc2UKICAgICBpbiBDUkxzLgoKICAqKSBBZGQgYSB1c2VmdWwga2x1ZGdlIHRvIGFsbG93IHBhY2thZ2UgbWFpbnRhaW5lcnMgdG8gc3BlY2lmeSBjb21waWxlciBhbmQKICAgICBvdGhlciBwbGF0Zm9ybXMgZGV0YWlscyBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGhvdXQgaGF2aW5nIHRvIHBhdGNoIHRoZQogICAgIENvbmZpZ3VyZSBzY3JpcHQgZXZlcnl0aW1lOiBPbmUgbm93IGNhbiB1c2UgYGBwZXJsIENvbmZpZ3VyZQogICAgIDxpZD46PGRldGFpbHM+JycsIGkuZS4gcGxhdGZvcm0gaWRzIGFyZSBhbGxvd2VkIHRvIGhhdmUgZGV0YWlscyBhcHBlbmRlZAogICAgIHRvIHRoZW0gKHNlcGVyYXRlZCBieSBjb2xvbnMpLiBUaGlzIGlzIHRyZWF0ZWQgYXMgdGhlcmUgd291bGQgYmUgYSBzdGF0aWMKICAgICBwcmUtY29uZmlndXJlZCBlbnRyeSBpbiBDb25maWd1cmUncyAldGFibGUgdW5kZXIga2V5IDxpZD4gd2l0aCB2YWx1ZQogICAgIDxkZXRhaWxzPiBhbmQgYGBwZXJsIENvbmZpZ3VyZSA8aWQ+JycgaXMgY2FsbGVkLiAgU28sIHdoZW4geW91IHdhbnQgdG8KICAgICBwZXJmb3JtIGEgcXVpY2sgdGVzdC1jb21waWxlIHVuZGVyIEZyZWVCU0QgMy4xIHdpdGggcGdjYyBhbmQgd2l0aG91dAogICAgIGFzc2VtYmxlciBzdHVmZiB5b3UgY2FuIHVzZSBgYHBlcmwgQ29uZmlndXJlICJGcmVlQlNELWVsZjpwZ2NjOi1PNjo6OiInJwogICAgIG5vdywgd2hpY2ggb3ZlcnJpZGVzIHRoZSBGcmVlQlNELWVsZiBlbnRyeSBvbi10aGUtZmx5LgogICAgIFtSYWxmIFMuIEVuZ2Vsc2NoYWxsXQoKICAqKSBEaXNhYmxlIG5ldyBUTFMxIGNpcGhlcnN1aXRlcyBieSBkZWZhdWx0OiB0aGV5IGFyZW4ndCBvZmZpY2lhbCB5ZXQuCiAgICAgW0JlbiBMYXVyaWVdCgogICopIEFsbG93IERTTyBmbGFncyBsaWtlIC1mcGljLCAtZlBJQywgLUtQSUMgZXRjLiB0byBiZSBzcGVjaWZpZWQKICAgICBvbiB0aGUgYHBlcmwgQ29uZmlndXJlIC4uLicgY29tbWFuZCBsaW5lLiBUaGlzIHdheSBvbmUgY2FuIGNvbXBpbGUKICAgICBPcGVuU1NMIGxpYnJhcmllcyB3aXRoIFBvc2l0aW9uIEluZGVwZW5kZW50IENvZGUgKFBJQykgd2hpY2ggaXMgbmVlZGVkCiAgICAgZm9yIGxpbmtpbmcgaXQgaW50byBEU09zLgogICAgIFtSYWxmIFMuIEVuZ2Vsc2NoYWxsXQoKICAqKSBSZW1hcmthYmx5LCBleHBvcnQgY2lwaGVycyB3ZXJlIHRvdGFsbHkgYnJva2VuIGFuZCBuby1vbmUgaGFkIG5vdGljZWQhCiAgICAgRml4ZWQuCiAgICAgW0JlbiBMYXVyaWVdCgogICopIENsZWFuZWQgdXAgdGhlIExJQ0VOU0UgZG9jdW1lbnQ6IFRoZSBvZmZpY2lhbCBjb250YWN0IGZvciBhbnkgbGljZW5zZQogICAgIHF1ZXN0aW9ucyBub3cgaXMgdGhlIE9wZW5TU0wgY29yZSB0ZWFtIHVuZGVyIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KICAgICBBbmQgYWRkIGEgcGFyYWdyYXBoIGFib3V0IHRoZSBkdWFsLWxpY2Vuc2Ugc2l0dWF0aW9uIHRvIG1ha2Ugc3VyZSBwZW9wbGUKICAgICByZWNvZ25pemUgdGhhdCBfQk9USF8gdGhlIE9wZW5TU0wgbGljZW5zZSBfQU5EXyB0aGUgU1NMZWF5IGxpY2Vuc2UgYXBwbHkKICAgICB0byB0aGUgT3BlblNTTCB0b29sa2l0LgogICAgIFtSYWxmIFMuIEVuZ2Vsc2NoYWxsXQoKICAqKSBHZW5lcmFsIHNvdXJjZSB0cmVlIG1ha2VmaWxlIGNsZWFudXBzOiBNYWRlIGBtYWtpbmcgeHh4IGluIHl5eS4uLicKICAgICBkaXNwbGF5IGNvbnNpc3RlbnQgaW4gdGhlIHNvdXJjZSB0cmVlIGFuZCByZXBsYWNlZCBgL2Jpbi9ybScgYnkgYHJtJy4KICAgICBBZGRpdG9uYWxseSBjbGVhbmVkIHVwIHRoZSBgbWFrZSBsaW5rcycgdGFyZ2V0OiBSZW1vdmUgdW5uZWNlc3NhcnkKICAgICBzZW1pY29sb25zLCBzdWJzZXF1ZW50IHJlZHVuZGFudCByZW1vdmVzLCBpbmxpbmUgcG9pbnQuc2ggaW50byBta2xpbmsuc2gKICAgICB0byBzcGVlZCBwcm9jZXNzaW5nIGFuZCBubyBsb25nZXIgY2x1dHRlciB0aGUgZGlzcGxheSB3aXRoIGNvbmZ1c2luZwogICAgIHN0dWZmLiBJbnN0ZWFkIG9ubHkgdGhlIGFjdHVhbGx5IGRvbmUgbGlua3MgYXJlIGRpc3BsYXllZC4KICAgICBbUmFsZiBTLiBFbmdlbHNjaGFsbF0KCiAgKikgUGVybWl0IG51bGwgZW5jcnlwdGlvbiBjaXBoZXJzdWl0ZXMsIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIG9ubHkuIEl0IHVzZWQKICAgICB0byBiZSBuZWNlc3NhcnkgdG8gc2V0IHRoZSBwcmVwcm9jZXNzb3IgZGVmaW5lIFNTTF9BTExPV19FTlVMTCB0byBkbyB0aGlzLgogICAgIEl0IGlzIG5vdyBuZWNlc3NhcnkgdG8gc2V0IFNTTF9GT1JCSURfRU5VTEwgdG8gcHJldmVudCB0aGUgdXNlIG9mIG51bGwKICAgICBlbmNyeXB0aW9uLgogICAgIFtCZW4gTGF1cmllXQoKICAqKSBBZGQgYSBidW5jaCBvZiBmaXhlcyB0byB0aGUgUEtDUyM3IHN0dWZmLiBJdCB1c2VkIHRvIHNvbWV0aW1lcyByZW9yZGVyCiAgICAgc2lnbmVkIGF0dHJpYnV0ZXMgd2hlbiB2ZXJpZnlpbmcgc2lnbmF0dXJlcyAodGhpcyB3b3VsZCBicmVhayB0aGVtKSwgCiAgICAgdGhlIGRldGFjaGVkIGRhdGEgZW5jb2Rpbmcgd2FzIHdyb25nIGFuZCBwdWJsaWMga2V5cyBvYnRhaW5lZCB1c2luZwogICAgIFg1MDlfZ2V0X3B1YmtleSgpIHdlcmVuJ3QgZnJlZWQuCiAgICAgW1N0ZXZlIEhlbnNvbl0KCiAgKikgQWRkIHRleHQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIEJVRkZFUiBmdW5jdGlvbnMuIEFsc28gYWRkZWQgYSB3b3JrIGFyb3VuZAogICAgIHRvIGEgV2luOTUgY29uc29sZSBidWcuIFRoaXMgd2FzIHRyaWdnZXJlZCBieSB0aGUgcGFzc3dvcmQgcmVhZCBzdHVmZjogdGhlCiAgICAgbGFzdCBjaGFyYWN0ZXIgdHlwZWQgZ2V0cyBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQgZnJlYWQoKS4gSWYgeW91IHdlcmUgCiAgICAgZ2VuZXJhdGluZyBhIG5ldyBjZXJ0IHJlcXVlc3QgdXNpbmcgJ3JlcScgZm9yIGV4YW1wbGUgdGhlbiB0aGUgbGFzdAogICAgIGNoYXJhY3RlciBvZiB0aGUgcGFzc3BocmFzZSB3b3VsZCBiZSBDUiB3aGljaCB3b3VsZCB0aGVuIGVudGVyIHRoZSBmaXJzdAogICAgIGZpZWxkIGFzIGJsYW5rLgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIEFkZGVkIHRoZSBuZXcgYEluY2x1ZGVzIE9wZW5TU0wgQ3J5cHRvZ3JhcGh5IFNvZnR3YXJlJyBidXR0b24gYXMKICAgICBkb2Mvb3BlbnNzbF9idXR0b24ue2dpZixodG1sfSB3aGljaCBpcyBzaW1pbGFyIGluIHN0eWxlIHRvIHRoZSBvbGQgU1NMZWF5CiAgICAgYnV0dG9uIGFuZCBjYW4gYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMgYmFzZWQgb24gT3BlblNTTCB0byBzaG93IHRoZQogICAgIHJlbGF0aW9uc2hpcCB0byB0aGUgT3BlblNTTCBwcm9qZWN0LiAgCiAgICAgW1JhbGYgUy4gRW5nZWxzY2hhbGxdCgogICopIFJlbW92ZSBjb25mdXNpbmcgdmFyaWFibGVzIGluIGZ1bmN0aW9uIHNpZ25hdHVyZXMgaW4gZmlsZXMKICAgICBzc2wvc3NsX2xpYi5jIGFuZCBzc2wvc3NsLmguCiAgICAgW0xlbm5hcnQgQm9uZyA8bG9iQGt1bHRoZWEuc3RhY2tlbi5rdGguc2U+XQoKICAqKSBEb24ndCBpbnN0YWxsIGJzc19maWxlLmMgdW5kZXIgUFJFRklYL2luY2x1ZGUvCiAgICAgW0xlbm5hcnQgQm9uZyA8bG9iQGt1bHRoZWEuc3RhY2tlbi5rdGguc2U+XQoKICAqKSBHZXQgdGhlIFdpbjMyIGNvbXBpbGUgd29ya2luZyBhZ2Fpbi4gTW9kaWZ5IG1rZGVmLnBsIHNvIGl0IGNhbiBoYW5kbGUKICAgICBmdW5jdGlvbnMgdGhhdCByZXR1cm4gZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGhhcyBzdXBwb3J0IGZvciBOVCBzcGVjaWZpYwogICAgIHN0dWZmLiBGaXggbWsxbWYucGwgYW5kIFZDLTMyLnBsIHRvIHN1cHBvcnQgTlQgZGlmZmVyZW5jZXMgYWxzby4gVmFyaW91cwogICAgICNpZmRlZiBXSU4zMiBhbmQgV0lOTlRzIHNwcmlua2xlZCBhYm91dCB0aGUgcGxhY2UgYW5kIHNvbWUgY2hhbmdlcyBmcm9tCiAgICAgdW5zaWduZWQgdG8gc2lnbmVkIHR5cGVzOiB0aGlzIHdhcyBraWxsaW5nIHRoZSBXaW4zMiBjb21waWxlLgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIEFkZCBuZXcgY2VydGlmaWNhdGUgZmlsZSB0byBzdGFjayBmdW5jdGlvbnMsIFNTTF9hZGRfY2VydF9maWxlX3RvX3N0YWNrKCkKICAgICBhbmQgU1NMX2FkZF9jZXJ0X2Rpcl90b19zdGFjaygpLiBUaGVzZSBsYXJnZWx5IHN1cHBsYW50CiAgICAgU1NMX2xvYWRfY2xpZW50X0NBX2ZpbGUoKSwgYW5kIGNhbiBiZSB1c2VkIHRvIGFkZCBtdWx0aXBsZSBjZXJ0cyBlYXNpbHkgdG8KICAgICBhIHN0YWNrICh1c3VhbGx5IHRoaXMgaXMgdGhlbiBoYW5kZWQgdG8gU1NMX0NUWF9zZXRfY2xpZW50X0NBX2xpc3QoKSkuCiAgICAgVGhpcyBtZWFucyB0aGF0IEFwYWNoZS1TU0wgYW5kIHNpbWlsYXIgcGFja2FnZXMgZG9uJ3QgaGF2ZSB0byBtZXNzIGFyb3VuZAogICAgIHRvIGFkZCBhcyBtYW55IENBcyBhcyB0aGV5IHdhbnQgdG8gdGhlIHByZWZlcnJlZCBsaXN0LgogICAgIFtCZW4gTGF1cmllXQoKICAqKSBFeHBlcmltZW50IHdpdGggZG94eWdlbiBkb2N1bWVudGF0aW9uLiBDdXJyZW50bHkgb25seSBwYXJ0aWFsbHkgYXBwbGllZCB0bwogICAgIHNzbC9zc2xfbGliLmMuCiAgICAgU2VlIGh0dHA6Ly93d3cuc3RhY2submwvfmRpbWl0cmkvZG94eWdlbi9pbmRleC5odG1sLCBhbmQgcnVuIGRveHlnZW4gd2l0aAogICAgIG9wZW5zc2wuZG94eSBhcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgogICAgIFtCZW4gTGF1cmllXQogIAogICopIEdldCByaWQgb2YgcmVtYWluaW5nIEMrKy1zdHlsZSBjb21tZW50cyB3aGljaCBzdHJpY3QgQyBjb21waWxlcnMgaGF0ZS4KICAgICBbUmFsZiBTLiBFbmdlbHNjaGFsbCwgcG9pbnRlZCBvdXQgYnkgQ2FybG9zIEFtZW5ndWFsXQoKICAqKSBDaGFuZ2VkIEJOX1JFQ1VSU0lPTiBpbiBibl9tb250LmMgdG8gQk5fUkVDVVJTSU9OX01PTlQgc28gaXQgaXMgbm90CiAgICAgY29tcGlsZWQgaW4gYnkgZGVmYXVsdDogaXQgaGFzIHByb2JsZW1zIHdpdGggbGFyZ2Uga2V5cy4KICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBBZGQgYSBidW5jaCBvZiBTU0xfeHh4KCkgZnVuY3Rpb25zIGZvciBjb25maWd1cmluZyB0aGUgdGVtcG9yYXJ5IFJTQSBhbmQKICAgICBESCBwcml2YXRlIGtleXMgYW5kL29yIGNhbGxiYWNrIGZ1bmN0aW9ucyB3aGljaCBkaXJlY3RseSBjb3JyZXNwb25kIHRvCiAgICAgdGhlaXIgU1NMX0NUWF94eHgoKSBjb3VudGVycGFydHMgYnV0IHdvcmsgb24gYSBwZXItY29ubmVjdGlvbiBiYXNpcy4gVGhpcwogICAgIGlzIG5lZWRlZCBmb3IgYXBwbGljYXRpb25zIHdoaWNoIGhhdmUgdG8gY29uZmlndXJlIGNlcnRpZmljYXRlcyBvbiBhCiAgICAgcGVyLWNvbm5lY3Rpb24gYmFzaXMgKGUuZy4gQXBhY2hlK21vZF9zc2wpIGluc3RlYWQgb2YgYSBwZXItY29udGV4dCBiYXNpcwogICAgIChlLmcuIHNfc2VydmVyKS4gCiAgICAgICAgRm9yIHRoZSBSU0EgY2VydGlmaWNhdGUgc2l0dWF0aW9uIGlzIG1ha2VzIG5vIGRpZmZlcmVuY2UsIGJ1dAogICAgIGZvciB0aGUgRFNBIGNlcnRpZmljYXRlIHNpdHVhdGlvbiB0aGlzIGZpeGVzIHRoZSAibm8gc2hhcmVkIGNpcGhlciIKICAgICBwcm9ibGVtIHdoZXJlIHRoZSBPcGVuU1NMIGNpcGhlciBzZWxlY3Rpb24gcHJvY2VkdXJlIGZhaWxlZCBiZWNhdXNlIHRoZQogICAgIHRlbXBvcmFyeSBrZXlzIHdlcmUgbm90IG92ZXJ0YWtlbiBmcm9tIHRoZSBjb250ZXh0IGFuZCB0aGUgQVBJIHByb3ZpZGVkCiAgICAgbm8gd2F5IHRvIHJlY29uZmlndXJlIHRoZW0uIAogICAgICAgIFRoZSBuZXcgZnVuY3Rpb25zIG5vdyBsZXQgYXBwbGljYXRpb25zIHJlY29uZmlndXJlIHRoZSBzdHVmZiBhbmQgdGhleQogICAgIGFyZSBpbiBkZXRhaWw6IFNTTF9uZWVkX3RtcF9SU0EsIFNTTF9zZXRfdG1wX3JzYSwgU1NMX3NldF90bXBfZGgsCiAgICAgU1NMX3NldF90bXBfcnNhX2NhbGxiYWNrIGFuZCBTU0xfc2V0X3RtcF9kaF9jYWxsYmFjay4gIEFkZGl0aW9uYWxseSBhIG5ldwogICAgIG5vbi1wdWJsaWMtQVBJIGZ1bmN0aW9uIHNzbF9jZXJ0X2luc3RhbnRpYXRlKCkgaXMgdXNlZCBhcyBhIGhlbHBlcgogICAgIGZ1bmN0aW9uIGFuZCBhbHNvIHRvIHJlZHVjZSBjb2RlIHJlZHVuZGFuY3kgaW5zaWRlIHNzbF9yc2EuYy4KICAgICBbUmFsZiBTLiBFbmdlbHNjaGFsbF0KCiAgKikgTW92ZSBzX3NlcnZlciAtZGNlcnQgYW5kIC1ka2V5IG9wdGlvbnMgb3V0IG9mIHRoZSB1bmRvY3VtZW50ZWQgZmVhdHVyZQogICAgIGFyZWEgYmVjYXVzZSB0aGV5IGFyZSB1c2VmdWwgZm9yIHRoZSBEU0Egc2l0dWF0aW9uIGFuZCBzaG91bGQgYmUKICAgICByZWNvZ25pemVkIGJ5IHRoZSB1c2Vycy4KICAgICBbUmFsZiBTLiBFbmdlbHNjaGFsbF0KCiAgKikgRml4IHRoZSBjaXBoZXIgZGVjaXNpb24gc2NoZW1lIGZvciBleHBvcnQgY2lwaGVyczogdGhlIGV4cG9ydCBiaXRzIGFyZQogICAgICpub3QqIHdpdGhpbiBTU0xfTUtFWV9NQVNLIG9yIFNTTF9BVVRIX01BU0ssIHRoZXkgYXJlIHdpdGhpbgogICAgIFNTTF9FWFBfTUFTSy4gIFNvLCB0aGUgb3JpZ2luYWwgdmFyaWFibGUgaGFzIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUKICAgICBhbHJlYWR5IG1hc2tlZCB2YXJpYWJsZS4KICAgICBbUmljaGFyZCBMZXZpdHRlIDxsZXZpdHRlQHN0YWNrZW4ua3RoLnNlPl0KCiAgKikgRml4ICdwb3J0JyB2YXJpYWJsZSBmcm9tIGBpbnQnIHRvIGB1bnNpZ25lZCBpbnQnIGluIGNyeXB0by9iaW8vYl9zb2NrLmMKICAgICBbUmljaGFyZCBMZXZpdHRlIDxsZXZpdHRlQHN0YWNrZW4ua3RoLnNlPl0KCiAgKikgQ2hhbmdlIHR5cGUgb2YgYW5vdGhlciBtZF9sZW4gdmFyaWFibGUgaW4gcGs3X2RvaXQuYzpQS0NTN19kYXRhRmluYWwoKQogICAgIGZyb20gYGludCcgdG8gYHVuc2lnbmVkIGludCcgYmVjYXVzZSBpdCdzIGEgbGVuZ3RoIGFuZCBpbml0aWFsaXplZCBieQogICAgIEVWUF9EaWdlc3RGaW5hbCgpIHdoaWNoIGV4cGVjdHMgYW4gYHVuc2lnbmVkIGludCAqJy4KICAgICBbUmljaGFyZCBMZXZpdHRlIDxsZXZpdHRlQHN0YWNrZW4ua3RoLnNlPl0KCiAgKikgRG9uJ3QgaGFyZC1jb2RlIHBhdGggdG8gUGVybCBpbnRlcnByZXRlciBvbiBzaGViYW5nIGxpbmUgb2YgQ29uZmlndXJlCiAgICAgc2NyaXB0LiBJbnN0ZWFkIHVzZSB0aGUgdXN1YWwgU2hlbGwtPlBlcmwgdHJhbnNpdGlvbiB0cmljay4KICAgICBbUmFsZiBTLiBFbmdlbHNjaGFsbF0KCiAgKikgTWFrZSBgb3BlbnNzbCB4NTA5IC1ub291dCAtbW9kdWx1cycgZnVuY3Rpb25hbCBhbHNvIGZvciBEU0EgY2VydGlmaWNhdGVzCiAgICAgKGluIGFkZGl0aW9uIHRvIFJTQSBjZXJ0aWZpY2F0ZXMpIHRvIG1hdGNoIHRoZSBiZWhhdmlvdXIgb2YgYG9wZW5zc2wgZHNhCiAgICAgLW5vb3V0IC1tb2R1bHVzJyBhcyBpdCdzIGFscmVhZHkgdGhlIGNhc2UgZm9yIGBvcGVuc3NsIHJzYSAtbm9vdXQKICAgICAtbW9kdWx1cycuICBGb3IgUlNBIHRoZSAtbW9kdWx1cyBpcyB0aGUgcmVhbCAibW9kdWx1cyIgd2hpbGUgZm9yIERTQQogICAgIGN1cnJlbnRseSB0aGUgcHVibGljIGtleSBpcyBwcmludGVkIChhIGRlY2lzaW9uIHdoaWNoIHdhcyBhbHJlYWR5IGRvbmUgYnkKICAgICBgb3BlbnNzbCBkc2EgLW1vZHVsdXMnIGluIHRoZSBwYXN0KSB3aGljaCBzZXJ2ZXMgYSBzaW1pbGFyIHB1cnBvc2UuCiAgICAgQWRkaXRpb25hbGx5IHRoZSBOT19SU0Egbm8gbG9uZ2VyIGNvbXBsZXRlbHkgcmVtb3ZlcyB0aGUgd2hvbGUgLW1vZHVsdXMKICAgICBvcHRpb247IGl0IG5vdyBvbmx5IGF2b2lkcyB1c2luZyB0aGUgUlNBIHN0dWZmLiBTYW1lIGFwcGxpZXMgdG8gTk9fRFNBCiAgICAgbm93LCB0b28uCiAgICAgW1JhbGYgUy4gIEVuZ2Vsc2NoYWxsXQoKICAqKSBBZGQgQXJuZSBBbnNwZXIncyByZWxpYWJsZSBCSU8gLSB0aGlzIGlzIGFuIGVuY3J5cHRlZCwgYmxvY2stZGlnZXN0ZWQKICAgICBCSU8uIFNlZSB0aGUgc291cmNlIChjcnlwdG8vZXZwL2Jpb19vay5jKSBmb3IgbW9yZSBpbmZvLgogICAgIFtBcm5lIEFuc3BlciA8YXJuZUBhdHMuY3liZXIuZWU+XQoKICAqKSBEdW1wIHRoZSBvbGQgeXVja3kgcmVxIGNvZGUgdGhhdCB0cmllZCAoYW5kIGZhaWxlZCkgdG8gYWxsb3cgcmF3IE9JRHMKICAgICB0byBiZSBhZGRlZC4gTm93IGJvdGggJ3JlcScgYW5kICdjYScgY2FuIHVzZSBuZXcgb2JqZWN0cyBkZWZpbmVkIGluIHRoZQogICAgIGNvbmZpZyBmaWxlLgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIEFkZCBjb29sIEJJTyB0aGF0IGRvZXMgc3lzbG9nIChvciBldmVudCBsb2cgb24gTlQpLgogICAgIFtBcm5lIEFuc3BlciA8YXJuZUBhdHMuY3liZXIuZWU+LCBpbnRlZ3JhdGVkIGJ5IEJlbiBMYXVyaWVdCgogICopIEFkZCBzdXBwb3J0IGZvciBuZXcgVExTIGNpcGhlcnN1aXRlcywgVExTX1JTQV9FWFBPUlQ1Nl9XSVRIX1JDNF81Nl9NRDUsCiAgICAgVExTX1JTQV9FWFBPUlQ1Nl9XSVRIX1JDMl9DQkNfNTZfTUQ1IGFuZAogICAgIFRMU19SU0FfRVhQT1JUNTZfV0lUSF9ERVNfQ0JDX1NIQSwgYXMgc3BlY2lmaWVkIGluICI1Ni1iaXQgRXhwb3J0IENpcGhlcgogICAgIFN1aXRlcyBGb3IgVExTIiwgZHJhZnQtaWV0Zi10bHMtNTYtYml0LWNpcGhlcnN1aXRlcy0wMC50eHQuCiAgICAgW0JlbiBMYXVyaWVdCgogICopIEFkZCBwcmVsaW1pbmFyeSBjb25maWcgaW5mbyBmb3IgbmV3IGV4dGVuc2lvbiBjb2RlLgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIE1ha2UgUlNBX05PX1BBRERJTkcgcmVhbGx5IHVzZSBubyBwYWRkaW5nLgogICAgIFtVbGYgTW9lbGxlciA8dWxmQGZpdHVnLmRlPl0KCiAgKikgR2VuZXJhdGUgZXJyb3JzIHdoZW4gcHJpdmF0ZS9wdWJsaWMga2V5IGNoZWNrIGlzIGRvbmUuCiAgICAgW0JlbiBMYXVyaWVdCgogICopIE92ZXJoYXVsIGZvciAnY3JsJyB1dGlsaXR5LiBOZXcgZnVuY3Rpb24gWDUwOV9DUkxfcHJpbnQuIFBhcnRpYWwgc3VwcG9ydAogICAgIGZvciBzb21lIENSTCBleHRlbnNpb25zIGFuZCBuZXcgb2JqZWN0cyBhZGRlZC4KICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBSZWFsbHkgZml4IHRoZSBBU04xIElNUExJQ0lUIGJ1ZyB0aGlzIHRpbWUuLi4gUGFydGlhbCBzdXBwb3J0IGZvciBwcml2YXRlCiAgICAga2V5IHVzYWdlIGV4dGVuc2lvbiBhbmQgZnVsbGVyIHN1cHBvcnQgZm9yIGF1dGhvcml0eSBrZXkgaWQuCiAgICAgW1N0ZXZlIEhlbnNvbl0KCiAgKikgQWRkIE9BRVAgZW5jcnlwdGlvbiBmb3IgdGhlIE9wZW5TU0wgY3J5cHRvIGxpYnJhcnkuIE9BRVAgaXMgdGhlIGltcHJvdmVkCiAgICAgcGFkZGluZyBtZXRob2QgZm9yIFJTQSwgd2hpY2ggaXMgcmVjb21tZW5kZWQgZm9yIG5ldyBhcHBsaWNhdGlvbnMgaW4gUEtDUwogICAgICMxIHYyLjAgKFJGQyAyNDM3LCBPY3RvYmVyIDE5OTgpLgogICAgIE9BRVAgKE9wdGltYWwgQXN5bW1ldHJpYyBFbmNyeXB0aW9uIFBhZGRpbmcpIGhhcyBiZXR0ZXIgdGhlb3JldGljYWwKICAgICBmb3VuZGF0aW9ucyB0aGFuIHRoZSBhZC1ob2MgcGFkZGluZyB1c2VkIGluIFBLQ1MgIzEgdjEuNS4gSXQgaXMgc2VjdXJlCiAgICAgYWdhaW5zdCBCbGVpY2hiYWNoZXIncyBhdHRhY2sgb24gUlNBLgogICAgIFtVbGYgTW9lbGxlciA8dWxmQGZpdHVnLmRlPiwgcmVmb3JtYXR0ZWQsIGNvcnJlY3RlZCBhbmQgaW50ZWdyYXRlZCBieQogICAgICBCZW4gTGF1cmllXQoKICAqKSBVcGRhdGVzIHRvIHRoZSBuZXcgU1NMIGNvbXByZXNzaW9uIGNvZGUKICAgICBbRXJpYyBBLiBZb3VuZywgKGZyb20gY2hhbmdlcyB0byBDMk5ldCBTU0xlYXksIGludGVncmF0ZWQgYnkgTWFyayBDb3gpXQoKICAqKSBGaXggc28gdGhhdCB0aGUgdmVyc2lvbiBudW1iZXIgaW4gdGhlIG1hc3RlciBzZWNyZXQsIHdoZW4gcGFzc2VkCiAgICAgdmlhIFJTQSwgY2hlY2tzIHRoYXQgaWYgVExTIHdhcyBwcm9wb3NlZCwgYnV0IHdlIHJvbGwgYmFjayB0byBTU0x2MwogICAgIChiZWNhdXNlIHRoZSBzZXJ2ZXIgd2lsbCBub3QgYWNjZXB0IGhpZ2hlciksIHRoYXQgdGhlIHZlcnNpb24gbnVtYmVyCiAgICAgaXMgMHgwMywweDAxLCBub3QgMHgwMywweDAwCiAgICAgW0VyaWMgQS4gWW91bmcsIChmcm9tIGNoYW5nZXMgdG8gQzJOZXQgU1NMZWF5LCBpbnRlZ3JhdGVkIGJ5IE1hcmsgQ294KV0KCiAgKikgUnVuIGV4dGVuc2l2ZSBtZW1vcnkgbGVhayBjaGVja3Mgb24gU1NMIGFwcHMuIEZpeGVkICpsb3RzKiBvZiBtZW1vcnkKICAgICBsZWFrcyBpbiBzc2wvIHJlbGF0aW5nIHRvIG5ldyBYNTA5X2dldF9wdWJrZXkoKSBiZWhhdmlvdXIuIEFsc28gZml4ZXMKICAgICBpbiBhcHBzLyBhbmQgYW4gdW5yZWxhdGVkIGxlYWsgaW4gY3J5cHRvL2RzYS9kc2FfdnJmLmMKICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBTdXBwb3J0IGZvciBSQVcgZXh0ZW5zaW9ucyB3aGVyZSBhbiBhcmJpdHJhcnkgZXh0ZW5zaW9uIGNhbiBiZQogICAgIGNyZWF0ZWQgYnkgaW5jbHVkaW5nIGl0cyBERVIgZW5jb2RpbmcuIFNlZSBhcHBzL29wZW5zc2wuY25mIGZvcgogICAgIGFuIGV4YW1wbGUuCiAgICAgW1N0ZXZlIEhlbnNvbl0KCiAgKikgTWFrZSBzdXJlIGxhdGVzdCBQZXJsIHZlcnNpb25zIGRvbid0IGludGVycHJldCBzb21lIGdlbmVyYXRlZCBDIGFycmF5CiAgICAgY29kZSBhcyBQZXJsIGFycmF5IGNvZGUgaW4gdGhlIGNyeXB0by9lcnIvZXJyX2dlbmMucGwgc2NyaXB0LgogICAgIFtMYXJzIFdlYmVyIDwzd2ViZXJAaW5mb3JtYXRpay51bmktaGFtYnVyZy5kZT5dCgogICopIE1vZGlmeSBtcy9kb19tcy5iYXQgdG8gbm90IGdlbmVyYXRlIGFzc2VtYmx5IGxhbmd1YWdlIG1ha2VmaWxlcyBzaW5jZQogICAgIG5vdCBtYW55IHBlb3BsZSBoYXZlIHRoZSBhc3NlbWJsZXIuIFZhcmlvdXMgV2luMzIgY29tcGlsYXRpb24gZml4ZXMgYW5kCiAgICAgdXBkYXRlIHRvIHRoZSBJTlNUQUxMLlczMiBmaWxlIHdpdGggKGhvcGVmdWxseSkgbW9yZSBhY2N1cmF0ZSBXaW4zMgogICAgIGJ1aWxkIGluc3RydWN0aW9ucy4KICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBNb2RpZnkgY29uZmlndXJlIHNjcmlwdCAnQ29uZmlndXJlJyB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBjcnlwdG8vZGF0ZS5oCiAgICAgZmlsZSB1bmRlciBXaW4zMiBhbmQgYWxzbyBidWlsZCBwZW0uaCBmcm9tIHBlbS5vcmcuIE5ldyBzY3JpcHQKICAgICB1dGlsL21rZmlsZXMucGwgdG8gY3JlYXRlIHRoZSBNSU5GTyBmaWxlIG9uIGVudmlyb25tZW50cyB0aGF0IGNhbid0IGRvIGEKICAgICAnbWFrZSBmaWxlcyc6IHBlcmwgdXRpbC9ta2ZpbGVzLnBsID5NSU5GTyBzaG91bGQgd29yay4KICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBNYWpvciByZXdvcmsgb2YgREVTIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucywgaW4gdGhlIHB1cnN1aXQgb2YgY29ycmVjdG5lc3MKICAgICBhbmQgcHVyaXR5LiBBcyBhIHJlc3VsdCwgbWFueSBldmlsIGNhc3RzIGV2YXBvcmF0ZWQsIGFuZCBzb21lIHdlaXJkbmVzcywKICAgICB0b28uIFlvdSBtYXkgZmluZCB0aGlzIGNhdXNlcyB3YXJuaW5ncyBpbiB5b3VyIGNvZGUuIFphcHBpbmcgeW91ciBldmlsCiAgICAgY2FzdHMgd2lsbCBwcm9iYWJseSBmaXggdGhlbS4gTW9zdGx5LgogICAgIFtCZW4gTGF1cmllXQoKICAqKSBGaXggZm9yIGEgdHlwbyBpbiBhc24xLmguIEJ1ZyBmaXggdG8gb2JqZWN0IGNyZWF0aW9uIHNjcmlwdAogICAgIG9ial9kYXQucGwuIEl0IGNvbnNpZGVyZWQgYSB6ZXJvIGluIGFuIG9iamVjdCBkZWZpbml0aW9uIHRvIG1lYW4KICAgICAiZW5kIG9mIG9iamVjdCI6IG5vbmUgb2YgdGhlIG9iamVjdHMgaW4gb2JqZWN0cy5oIGhhdmUgYW55IHplcm9zCiAgICAgc28gaXQgd2Fzbid0IHNwb3R0ZWQuCiAgICAgW1N0ZXZlIEhlbnNvbiwgcmVwb3J0ZWQgYnkgRXJ3YW5uIEFCQUxFQSA8ZWFiYWxlYUBjZXJ0cGx1cy5jb20+XQoKICAqKSBBZGQgc3VwcG9ydCBmb3IgVHJpcGxlIERFUyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgd2l0aCBPdXRwdXQgRmVlZGJhY2sKICAgICBNYXNraW5nIChDQkNNKS4gSW4gdGhlIGFic2VuY2Ugb2YgdGVzdCB2ZWN0b3JzLCB0aGUgYmVzdCBJIGhhdmUgYmVlbiBhYmxlCiAgICAgdG8gZG8gaXMgY2hlY2sgdGhhdCB0aGUgZGVjcnlwdCB1bmRvZXMgdGhlIGVuY3J5cHQsIHNvIGZhci4gU2VuZCBtZSB0ZXN0CiAgICAgdmVjdG9ycyBpZiB5b3UgaGF2ZSB0aGVtLgogICAgIFtCZW4gTGF1cmllXQoKICAqKSBDb3JyZWN0IGNhbGN1bGF0aW9uIG9mIGtleSBsZW5ndGggZm9yIGV4cG9ydCBjaXBoZXJzICh0b28gbXVjaCBzcGFjZSB3YXMKICAgICBhbGxvY2F0ZWQgZm9yIG51bGwgY2lwaGVycykuIFRoaXMgaGFzIG5vdCBiZWVuIHRlc3RlZCEKICAgICBbQmVuIExhdXJpZV0KCiAgKikgTW9kaWZpY2F0aW9ucyB0byB0aGUgbWtkZWYucGwgZm9yIFdpbjMyIERFRiBmaWxlIGNyZWF0aW9uLiBUaGUgdXNhZ2UKICAgICBtZXNzYWdlIGlzIG5vdyBjb3JyZWN0IChpdCB1bmRlcnN0YW5kcyAiY3J5cHRvIiBhbmQgInNzbCIgb24gaXRzCiAgICAgY29tbWFuZCBsaW5lKS4gVGhlcmUgaXMgYWxzbyBub3cgYW4gInVwZGF0ZSIgb3B0aW9uLiBUaGlzIHdpbGwgdXBkYXRlCiAgICAgdGhlIHV0aWwvc3NsZWF5Lm51bSBhbmQgdXRpbC9saWJlYXkubnVtIGZpbGVzIHdpdGggYW55IG5ldyBmdW5jdGlvbnMuCiAgICAgSWYgeW91IGRvIGE6IAogICAgIHBlcmwgdXRpbC9ta2RlZi5wbCBjcnlwdG8gc3NsIHVwZGF0ZQogICAgIGl0IHdpbGwgdXBkYXRlIHRoZW0uCiAgICAgW1N0ZXZlIEhlbnNvbl0KCiAgKikgT3ZlcmhhdWxlZCB0aGUgUGVybCBpbnRlcmZhY2UgKHBlcmwvKik6CiAgICAgLSBwb3J0ZWQgQk4gc3R1ZmYgdG8gT3BlblNTTCdzIGRpZmZlcmVudCBCTiBsaWJyYXJ5CiAgICAgLSBtYWRlIHRoZSBwZXJsLyBzb3VyY2UgdHJlZSBDVlMtYXdhcmUKICAgICAtIHJlbmFtZWQgdGhlIHBhY2thZ2UgZnJvbSBTU0xlYXkgdG8gT3BlblNTTCAodGhlIGZpbGVzIHN0aWxsIGNvbnRhaW4KICAgICAgIHRoZWlyIGhpc3RvcnkgYmVjYXVzZSBJJ3ZlIGNvcGllZCB0aGVtIGluIHRoZSByZXBvc2l0b3J5KQogICAgIC0gcmVtb3ZlZCBvYnNvbGV0ZSBmaWxlcyAodGhlIHRlc3Qgc2NyaXB0cyB3aWxsIGJlIHJlcGxhY2VkCiAgICAgICBieSBiZXR0ZXIgVGVzdDo6SGFybmVzcyB2YXJpYW50cyBpbiB0aGUgZnV0dXJlKQogICAgIFtSYWxmIFMuIEVuZ2Vsc2NoYWxsXQoKICAqKSBGaXJzdCBjdXQgZm9yIGEgdmVyeSBjb25zZXJ2YXRpdmUgc291cmNlIHRyZWUgY2xlYW51cDoKICAgICAxLiBtZXJnZSB2YXJpb3VzIG9ic29sZXRlIHJlYWRtZSB0ZXh0cyBpbnRvIGRvYy9zc2xlYXkudHh0CiAgICAgd2hlcmUgd2UgY29sbGVjdCB0aGUgb2xkIGRvY3VtZW50cyBhbmQgcmVhZG1lIHRleHRzLgogICAgIDIuIHJlbW92ZSB0aGUgZmlyc3QgcGFydCBvZiBmaWxlcyB3aGVyZSBJJ20gYWxyZWFkeSBzdXJlIHRoYXQgd2Ugbm8KICAgICBsb25nZXIgbmVlZCB0aGVtIGJlY2F1c2Ugb2YgdGhyZWUgcmVhc29uczogZWl0aGVyIHRoZXkgYXJlIGp1c3QgdGVtcG9yYXJ5CiAgICAgZmlsZXMgd2hpY2ggd2VyZSBsZWZ0IGJ5IEVyaWMgb3IgdGhleSBhcmUgcHJlc2VydmVkIG9yaWdpbmFsIGZpbGVzIHdoZXJlCiAgICAgSSd2ZSB2ZXJpZmllZCB0aGF0IHRoZSBkaWZmIGlzIGFsc28gYXZhaWxhYmxlIGluIHRoZSBDVlMgdmlhICJjdnMgZGlmZgogICAgIC1yU1NMZWF5XzBfOF8xYiIgb3IgdGhleSB3ZXJlIHJlbmFtZWQgKGFzIGl0IHdhcyBkZWZpbml0ZWx5IHRoZSBjYXNlIGZvcgogICAgIHRoZSBjcnlwdG8vbWQvIHN0dWZmKS4KICAgICBbUmFsZiBTLiBFbmdlbHNjaGFsbF0KCiAgKikgTW9yZSBleHRlbnNpb24gY29kZS4gSW5jb21wbGV0ZSBzdXBwb3J0IGZvciBzdWJqZWN0IGFuZCBpc3N1ZXIgYWx0CiAgICAgbmFtZSwgaXNzdWVyIGFuZCBhdXRob3JpdHkga2V5IGlkLiBDaGFuZ2UgdGhlIGkydiBmdW5jdGlvbiBwYXJhbWV0ZXJzCiAgICAgYW5kIGFkZCBhbiBleHRyYSAnY3JsJyBwYXJhbWV0ZXIgaW4gdGhlIFg1MDlWM19DVFggc3RydWN0dXJlOiBndWVzcwogICAgIHdoYXQgdGhhdCdzIGZvciA6LSkgRml4IHRvIEFTTjEgbWFjcm8gd2hpY2ggbWVzc2VkIHVwCiAgICAgSU1QTElDSVQgdGFnIGFuZCBhZGQgZl9lbnVtLmMgd2hpY2ggYWRkcyBhMmksIGkyYSBmb3IgRU5VTUVSQVRFRC4KICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBFTlVNRVJBVEVEIHR5cGUuIFRoaXMgaXMgbGFyZ2VseSBjb3BpZWQgZnJvbSB0aGUKICAgICBJTlRFR0VSIGNvZGUuCiAgICAgW1N0ZXZlIEhlbnNvbl0KCiAgKikgQWRkIG5ldyBmdW5jdGlvbiwgRVZQX01EX0NUWF9jb3B5KCkgdG8gcmVwbGFjZSBmcmVxdWVudCB1c2Ugb2YgbWVtY3B5LgogICAgIFtFcmljIEEuIFlvdW5nLCAoZnJvbSBjaGFuZ2VzIHRvIEMyTmV0IFNTTGVheSwgaW50ZWdyYXRlZCBieSBNYXJrIENveCldCgogICopIE1ha2Ugc3VyZSBgbWFrZSByZWhhc2gnIHRhcmdldCByZWFsbHkgZmluZHMgdGhlIGBvcGVuc3NsJyBwcm9ncmFtLgogICAgIFtSYWxmIFMuIEVuZ2Vsc2NoYWxsLCBNYXR0aGlhcyBMb2VwZmUgPE1hdHRoaWFzLkxvZXBmZUBhZG5vdnVtLmNoPl0KCiAgKikgU3F1ZWV6ZSBhbm90aGVyIDclIG9mIHNwZWVkIG91dCBvZiBNRDUgYXNzZW1ibGVyLCBhdCBsZWFzdCBvbiBhIFAyLiBJJ2QKICAgICBsaWtlIHRvIGhlYXIgYWJvdXQgaXQgaWYgdGhpcyBzbG93cyBkb3duIG90aGVyIHByb2Nlc3NvcnMuCiAgICAgW0JlbiBMYXVyaWVdCgogICopIEFkZCBDeWdXaW4zMiBwbGF0Zm9ybSBpbmZvcm1hdGlvbiB0byBDb25maWd1cmUgc2NyaXB0LgogICAgIFtBbGFuIEJhdGllIDxiYXRpZUBhYWh6LmpmLmludGVsLmNvbT5dCgogICopIEZpeGVkIG1zLzMyYWxsLmJhdCBzY3JpcHQ6IGBub19hc20nIC0+IGBuby1hc20nCiAgICAgW1JhaW5lciBXLiBHZXJsaW5nIDxnZXJsaW5nQG1wZy1ndi5tcGcuZGU+XQogIAogICopIE5ldyBwcm9ncmFtIG5zZXEgdG8gbWFuaXB1bGF0ZSBuZXRzY2FwZSBjZXJ0aWZpY2F0ZSBzZXF1ZW5jZXMKICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBNb2RpZnkgY3JsMnBrY3M3IHNvIGl0IHN1cHBvcnRzIG11bHRpcGxlIC1jZXJ0ZmlsZSBhcmd1bWVudHMuIEZpeCBhCiAgICAgZmV3IHR5cG9zLgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIEZpeGVzIHRvIEJOIGNvZGUuICBQcmV2aW91c2x5IHRoZSBkZWZhdWx0IHdhcyB0byBkZWZpbmUgQk5fUkVDVVJTSU9OCiAgICAgYnV0IHRoZSBCTiBjb2RlIGhhZCBzb21lIHByb2JsZW1zIHRoYXQgd291bGQgY2F1c2UgZmFpbHVyZXMgd2hlbgogICAgIGRvaW5nIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBhbmQgc29tZSBvdGhlciBmdW5jdGlvbnMuCiAgICAgW0VyaWMgQS4gWW91bmcsIChmcm9tIGNoYW5nZXMgdG8gQzJOZXQgU1NMZWF5LCBpbnRlZ3JhdGVkIGJ5IE1hcmsgQ294KV0KCiAgKikgQWRkIEFTTjEgYW5kIFBFTSBjb2RlIHRvIHN1cHBvcnQgbmV0c2NhcGUgY2VydGlmaWNhdGUgc2VxdWVuY2VzLgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIEFkZCBBU04xIGFuZCBQRU0gY29kZSB0byBzdXBwb3J0IG5ldHNjYXBlIGNlcnRpZmljYXRlIHNlcXVlbmNlcy4KICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBBZGQgc2V2ZXJhbCBQS0lYIGFuZCBwcml2YXRlIGV4dGVuZGVkIGtleSB1c2FnZSBPSURzLgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIE1vZGlmeSB0aGUgJ2NhJyBwcm9ncmFtIHRvIGhhbmRsZSB0aGUgbmV3IGV4dGVuc2lvbiBjb2RlLiBNb2RpZnkKICAgICBvcGVuc3NsLmNuZiBmb3IgbmV3IGV4dGVuc2lvbiBmb3JtYXQsIGFkZCBjb21tZW50cy4KICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBNb3JlIFg1MDkgVjMgY2hhbmdlcy4gRml4IHR5cG8gaW4gdjNfYml0c3RyLmMuIEFkZCBzdXBwb3J0IHRvICdyZXEnCiAgICAgYW5kIGFkZCBhIHNhbXBsZSB0byBvcGVuc3NsLmNuZiBzbyByZXEgLXg1MDkgbm93IGFkZHMgYXBwcm9wcmlhdGUKICAgICBDQSBleHRlbnNpb25zLgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIENvbnRpbnVlZCBYNTA5IFYzIGNoYW5nZXMuIEFkZCB0byBvdGhlciBtYWtlZmlsZXMsIGludGVncmF0ZSB3aXRoIHRoZQogICAgIGVycm9yIGNvZGUsIGFkZCBpbml0aWFsIHN1cHBvcnQgdG8gWDUwOV9wcmludCgpIGFuZCB4NTA5IGFwcGxpY2F0aW9uLgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIFRha2VzIGEgZGVlcCBicmVhdGggYW5kIHN0YXJ0IGFkZGRpbmcgWDUwOSBWMyBleHRlbnNpb24gc3VwcG9ydCBjb2RlLiBBZGQKICAgICBmaWxlcyBpbiBjcnlwdG8veDUwOXYzLiBNb3ZlIG9yaWdpbmFsIHN0dWZmIHRvIGNyeXB0by94NTA5djMvb2xkLiBBbGwgdGhpcwogICAgIHN0dWZmIGlzIGN1cnJlbnRseSBpc29sYXRlZCBhbmQgaXNuJ3QgZXZlbiBjb21waWxlZCB5ZXQuCiAgICAgW1N0ZXZlIEhlbnNvbl0KCiAgKikgQ29udGludWluZyBwYXRjaGVzIGZvciBHZW5lcmFsaXplZFRpbWUuIEZpeCB1cCBjZXJ0aWZpY2F0ZSBhbmQgQ1JMCiAgICAgQVNOMSB0byB1c2UgQVNOMV9USU1FIGFuZCBtb2RpZnkgcHJpbnQgcm91dGluZXMgdG8gdXNlIEFTTjFfVElNRV9wcmludC4KICAgICBSZW1vdmVkIHRoZSB2ZXJzaW9ucyBjaGVjayBmcm9tIFg1MDkgcm91dGluZXMgd2hlbiBsb2FkaW5nIGV4dGVuc2lvbnM6CiAgICAgdGhpcyBhbGxvd3MgY2VydGFpbiBicm9rZW4gY2VydGlmaWNhdGVzIHRoYXQgZG9uJ3Qgc2V0IHRoZSB2ZXJzaW9uCiAgICAgcHJvcGVybHkgdG8gYmUgcHJvY2Vzc2VkLgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIERlYWwgd2l0aCBpcnJpdGF0aW5nIHNoaXQgdG8gZG8gd2l0aCBkZXBlbmRlbmNpZXMsIGluIFlBQUhXIChZZXQgQW5vdGhlcgogICAgIEFkIEhvYyBXYXkpIC0gTWFrZWZpbGUuc3NscyBub3cgYWxsIGNvbnRhaW4gbG9jYWwgZGVwZW5kZW5jaWVzLCB3aGljaAogICAgIGNhbiBzdGlsbCBiZSByZWdlbmVyYXRlZCB3aXRoICJtYWtlIGRlcGVuZCIuCiAgICAgW0JlbiBMYXVyaWVdCgogICopIFNwZWxsaW5nIG1pc3Rha2UgaW4gQyB2ZXJzaW9uIG9mIENBU1QtMTI4LgogICAgIFtCZW4gTGF1cmllLCByZXBvcnRlZCBieSBKZXJlbXkgSHlsdG9uIDxqZXJlbXlAY25yaS5yZXN0b24udmEudXM+XQoKICAqKSBDaGFuZ2VzIHRvIHRoZSBlcnJvciBnZW5lcmF0aW9uIGNvZGUuIFRoZSBwZXJsIHNjcmlwdCBlcnItY29kZS5wbCAKICAgICBub3cgcmVhZHMgaW4gdGhlIG9sZCBlcnJvciBjb2RlcyBhbmQgcmV0YWlucyB0aGUgb2xkIG51bWJlcnMsIG9ubHkKICAgICBhZGRpbmcgbmV3IG9uZXMgaWYgbmVjZXNzYXJ5LiBJdCBhbHNvIG9ubHkgY2hhbmdlcyB0aGUgLmVyciBmaWxlcyBpZiBuZXcKICAgICBjb2RlcyBhcmUgYWRkZWQuIFRoZSBtYWtlZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIG9ubHkgaW5zZXJ0IGVycm9ycwogICAgIHdoZW4gbmVlZGVkICh0byBhdm9pZCBuZWVkbGVzc2x5IG1vZGlmeWluZyBoZWFkZXIgZmlsZXMpLiBUaGlzIGlzIGRvbmUKICAgICBieSBvbmx5IGluc2VydGluZyBlcnJvcnMgaWYgdGhlIC5lcnIgZmlsZSBpcyBuZXdlciB0aGFuIHRoZSBhdXRvIGdlbmVyYXRlZAogICAgIEMgZmlsZS4gVG8gcmVidWlsZCBhbGwgdGhlIGVycm9yIGNvZGVzIGZyb20gc2NyYXRjaCAodGhlIG9sZCBiZWhhdmlvdXIpCiAgICAgZWl0aGVyIG1vZGlmeSBjcnlwdG8vTWFrZWZpbGUuc3NsIHRvIHBhc3MgdGhlIC1yZWdlbiBmbGFnIHRvIGVycl9jb2RlLnBsCiAgICAgb3IgZGVsZXRlIGFsbCB0aGUgLmVyciBmaWxlcy4KICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBDQVNULTEyOCB3YXMgaW5jb3JyZWN0bHkgaW1wbGVtZW50ZWQgZm9yIHNob3J0IGtleXMuIFRoZSBDIHZlcnNpb24gaGFzCiAgICAgYmVlbiBmaXhlZCwgYnV0IGlzIHVudGVzdGVkLiBUaGUgYXNzZW1ibGVyIHZlcnNpb25zIGFyZSBhbHNvIGZpeGVkLCBidXQKICAgICBuZXcgYXNzZW1ibGVyIEhBUyBOT1QgQkVFTiBHRU5FUkFURUQgRk9SIFdJTjMyIC0gdGhlIE1ha2VmaWxlIG5lZWRzIGZpeGluZwogICAgIHRvIHJlZ2VuZXJhdGUgaXQgaWYgbmVlZGVkLgogICAgIFtCZW4gTGF1cmllLCByZXBvcnRlZCAod2l0aCBmaXggZm9yIEMgdmVyc2lvbikgYnkgSnVuLWljaGlybyBpdG9qdW4KICAgICAgSGFnaW5vIDxpdG9qdW5Aa2FtZS5uZXQ+XQoKICAqKSBGaWxlIHdhcyBvcGVuZWQgaW5jb3JyZWN0bHkgaW4gcmFuZGZpbGUuYy4KICAgICBbVWxmIE32bGxlciA8dWxmQGZpdHVnLmRlPl0KCiAgKikgQmVnaW5uaW5nIG9mIHN1cHBvcnQgZm9yIEdlbmVyYWxpemVkVGltZS4gZDJpLCBpMmQsIGNoZWNrIGFuZCBwcmludAogICAgIGZ1bmN0aW9ucy4gQWxzbyBBU04xX1RJTUUgc3VpdGUgd2hpY2ggaXMgYSBDSE9JQ0Ugb2YgVVRDVGltZSBvcgogICAgIEdlbmVyYWxpemVkVGltZS4gQVNOMV9USU1FIGlzIHRoZSBwcm9wZXIgdHlwZSB1c2VkIGluIGNlcnRpZmljYXRlcyBldAogICAgIGFsOiBpdCdzIGp1c3QgYWxtb3N0IGFsd2F5cyBhIFVUQ1RpbWUuIE5vdGUgdGhpcyBwYXRjaCBhZGRzIG5ldyBlcnJvcgogICAgIGNvZGVzIHNvIGRvIGEgIm1ha2UgZXJyb3JzIiBpZiB0aGVyZSBhcmUgcHJvYmxlbXMuCiAgICAgW1N0ZXZlIEhlbnNvbl0KCiAgKikgQ29ycmVjdCBMaW51eCAxIHJlY29nbml0aW9uIGluIGNvbmZpZy4KICAgICBbVWxmIE32bGxlciA8dWxmQGZpdHVnLmRlPl0KCiAgKikgUmVtb3ZlIHBvaW50bGVzcyBNRDUgaGFzaCB3aGVuIHVzaW5nIERTQSBrZXlzIGluIGNhLgogICAgIFtBbm9ueW1vdXMgPG5vYm9keUByZXBsYXkuY29tPl0KCiAgKikgR2VuZXJhdGUgYW4gZXJyb3IgaWYgZ2l2ZW4gYW4gZW1wdHkgc3RyaW5nIGFzIGEgY2VydCBkaXJlY3RvcnkuIEFsc28KICAgICBnZW5lcmF0ZSBhbiBlcnJvciBpZiBoYW5kZWQgTlVMTCAocHJldmlvdXNseSByZXR1cm5lZCAwIHRvIGluZGljYXRlIGFuCiAgICAgZXJyb3IsIGJ1dCBkaWRuJ3Qgc2V0IG9uZSkuCiAgICAgW0JlbiBMYXVyaWUsIHJlcG9ydGVkIGJ5IEFub255bW91cyA8bm9ib2R5QHJlcGxheS5jb20+XQoKICAqKSBBZGQgcHJvdG90eXBlcyB0byBTU0wgbWV0aG9kcy4gTWFrZSBTU0xfd3JpdGUncyBidWZmZXIgY29uc3QsIGF0IGxhc3QuCiAgICAgW0JlbiBMYXVyaWVdCgogICopIEZpeCB0aGUgZHVtbXkgZnVuY3Rpb24gQk5fcmVmX21vZF9leHAoKSBpbiByc2FyZWYuYyB0byBoYXZlIHRoZSBjb3JyZWN0CiAgICAgcGFyYW1ldGVycy4gVGhpcyB3YXMgY2F1c2luZyBhIHdhcm5pbmcgd2hpY2gga2lsbGVkIG9mZiB0aGUgV2luMzIgY29tcGlsZS4KICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBSZW1vdmUgQysrIHN0eWxlIGNvbW1lbnRzIGZyb20gY3J5cHRvL2JuL2JuX2xvY2FsLmguCiAgICAgW05laWwgQ29zdGlnYW4gPG5laWwuY29zdGlnYW5AY2Vsb2NvbS5jb20+XQoKICAqKSBUaGUgZnVuY3Rpb24gT0JKX3R4dDJuaWQgd2FzIGJyb2tlbi4gSXQgd2FzIHN1cHBvc2VkIHRvIHJldHVybiBhIG5pZAogICAgIGJhc2VkIG9uIGEgdGV4dCBzdHJpbmcsIGxvb2tpbmcgdXAgc2hvcnQgYW5kIGxvbmcgbmFtZXMgYW5kIGZpbmFsbHkKICAgICAiZG90IiBmb3JtYXQuIFRoZSAiZG90IiBmb3JtYXQgc3R1ZmYgZGlkbid0IHdvcmsuIEFkZGVkIG5ldyBmdW5jdGlvbgogICAgIE9CSl90eHQyb2JqIHRvIGRvIHRoZSBzYW1lIGJ1dCByZXR1cm4gYW4gQVNOMV9PQkpFQ1QgYW5kIHJld3JvdGUgCiAgICAgT0JKX3R4dDJuaWQgdG8gdXNlIGl0LiBPQkpfdHh0Mm9iaiBjYW4gYWxzbyByZXR1cm4gb2JqZWN0cyBldmVuIGlmIHRoZQogICAgIE9JRCBpcyBub3QgcGFydCBvZiB0aGUgdGFibGUuCiAgICAgW1N0ZXZlIEhlbnNvbl0KCiAgKikgQWRkIHByb3RvdHlwZXMgdG8gWDUwOSBsb29rdXAvdmVyaWZ5IG1ldGhvZHMsIGZpeGluZyBhIGJ1ZyBpbgogICAgIFg1MDlfTE9PS1VQX2J5X2FsaWFzKCkuCiAgICAgW0JlbiBMYXVyaWVdCgogICopIFNvcnQgb3BlbnNzbCBmdW5jdGlvbnMgYnkgbmFtZS4KICAgICBbQmVuIExhdXJpZV0KCiAgKikgR2V0IHRoZSBnZW5kc2EgcHJvZ3JhbSB3b3JraW5nIChob3BlZnVsbHkpIGFuZCBhZGQgaXQgdG8gYXBwIGxpc3QuIFJlbW92ZQogICAgIGVuY3J5cHRpb24gZnJvbSBzYW1wbGUgRFNBIGtleXMgKGluIGNhc2UgYW55b25lIGlzIGludGVyZXN0ZWQgdGhlIHBhc3N3b3JkCiAgICAgd2FzICIxMjM0IikuCiAgICAgW1N0ZXZlIEhlbnNvbl0KCiAgKikgTWFrZSBfYWxsXyAqX2ZyZWUgZnVuY3Rpb25zIGFjY2VwdCBhIE5VTEwgcG9pbnRlci4KICAgICBbRnJhbnMgSGV5bWFucyA8ZmhleW1hbnNAaXNhc2VydmVyLmJlPl0KCiAgKikgSWYgYSBESCBrZXkgaXMgZ2VuZXJhdGVkIGluIHMzX3NydnIuYywgZG9uJ3QgYmxvdyBpdCBieSB0cnlpbmcgdG8gdXNlCiAgICAgTlVMTCBwb2ludGVycy4KICAgICBbQW5vbnltb3VzIDxub2JvZHlAcmVwbGF5LmNvbT5dCgogICopIHNfc2VydmVyIHNob3VsZCBzZW5kIHRoZSBDQWZpbGUgYXMgYWNjZXB0YWJsZSBDQXMsIG5vdCBpdHMgb3duIGNlcnQuCiAgICAgW0JvZG8gTW9lbGxlciA8M21vZWxsZXJAaW5mb3JtYXRpay51bmktaGFtYnVyZy5kZT5dCgogICopIERvbid0IGJsb3cgaXQgZm9yIG51bWVyaWMgLW5ld2tleSBhcmd1bWVudHMgdG8gYXBwcy9yZXEuCiAgICAgW0JvZG8gTW9lbGxlciA8M21vZWxsZXJAaW5mb3JtYXRpay51bmktaGFtYnVyZy5kZT5dCgogICopIFRlbXAga2V5ICJmb3IgZXhwb3J0IiB0ZXN0cyB3ZXJlIHdyb25nIGluIHMzX3NydnIuYy4KICAgICBbQW5vbnltb3VzIDxub2JvZHlAcmVwbGF5LmNvbT5dCgogICopIEFkZCBwcm90b3R5cGUgZm9yIHRlbXAga2V5IGNhbGxiYWNrIGZ1bmN0aW9ucwogICAgIFNTTF9DVFhfc2V0X3RtcF97cnNhLGRofV9jYWxsYmFjaygpLgogICAgIFtCZW4gTGF1cmllXQoKICAqKSBNYWtlIERIX2ZyZWUoKSB0b2xlcmF0ZSBiZWluZyBwYXNzZWQgYSBOVUxMIHBvaW50ZXIgKGxpa2UgUlNBX2ZyZWUoKSBhbmQKICAgICBEU0FfZnJlZSgpKS4gTWFrZSBYNTA5X1BVQktFWV9zZXQoKSBjaGVjayBmb3IgZXJyb3JzIGluIGQyaV9QdWJsaWNLZXkoKS4KICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBYNTA5X25hbWVfYWRkX2VudHJ5KCkgZnJlZWQgdGhlIHdyb25nIHRoaW5nIGFmdGVyIGFuIGVycm9yLgogICAgIFtBcm5lIEFuc3BlciA8YXJuZUBhdHMuY3liZXIuZWU+XQoKICAqKSByc2FfZWF5LmMgd291bGQgYXR0ZW1wdCB0byBmcmVlIGEgTlVMTCBjb250ZXh0LgogICAgIFtBcm5lIEFuc3BlciA8YXJuZUBhdHMuY3liZXIuZWU+XQoKICAqKSBCSU9fc19zb2NrZXQoKSBoYWQgYSBicm9rZW4gc2hvdWxkX3JldHJ5KCkgb24gV2luZG96ZS4KICAgICBbQXJuZSBBbnNwZXIgPGFybmVAYXRzLmN5YmVyLmVlPl0KCiAgKikgQklPX2ZfYnVmZmVyKCkgZGlkbid0IHBhc3Mgb24gQklPX0NUUkxfRkxVU0guCiAgICAgW0FybmUgQW5zcGVyIDxhcm5lQGF0cy5jeWJlci5lZT5dCgogICopIE1ha2Ugc3VyZSB0aGUgYWxyZWFkeSBleGlzdGluZyBYNTA5X1NUT1JFLT5kZXB0aCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZAogICAgIGluIFg1MDlfU1RPUkVfbmV3KCksIGJ1dCBkb2N1bWVudCB0aGUgZmFjdCB0aGF0IHRoaXMgdmFyaWFibGUgaXMgc3RpbGwKICAgICB1bnVzZWQgaW4gdGhlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLgogICAgIFtSYWxmIFMuIEVuZ2Vsc2NoYWxsXQoKICAqKSBGaXggdGhlIHZhcmlvdXMgbGlicmFyeSBhbmQgYXBwcyBmaWxlcyB0byBmcmVlIHVwIHBrZXlzIG9idGFpbmVkIGZyb20KICAgICBYNTA5X1BVQktFWV9nZXQoKSBldCBhbC4gQWxzbyBhbGxvdyB4NTA5LmMgdG8gaGFuZGxlIG5ldHNjYXBlIGV4dGVuc2lvbnMuCiAgICAgW1N0ZXZlIEhlbnNvbl0KCiAgKikgRml4IHJlZmVyZW5jZSBjb3VudGluZyBpbiBYNTA5X1BVQktFWV9nZXQoKS4gVGhpcyBtYWtlcwogICAgIGRlbW9zL21hdXJpY2UvZXhhbXBsZTIuYyB3b3JrLCBhbW9uZ3N0IG90aGVycywgcHJvYmFibHkuCiAgICAgW1N0ZXZlIEhlbnNvbiBhbmQgQmVuIExhdXJpZV0KCiAgKikgRmlyc3QgY3V0IG9mIGEgY2xlYW51cCBmb3IgYXBwcy8uIEZpcnN0IHRoZSBgc3NsZWF5JyBwcm9ncmFtIGlzIG5vdyBuYW1lZAogICAgIGBvcGVuc3NsJyBhbmQgc2Vjb25kLCB0aGUgc2hvcnRjdXQgc3ltbGlua3MgZm9yIHRoZSBgb3BlbnNzbCA8Y29tbWFuZD4nCiAgICAgYXJlIG5vIGxvbmdlciBjcmVhdGVkLiBUaGlzIHdheSB3ZSBoYXZlIGEgc2luZ2xlIGFuZCBjb25zaXN0ZW50IGNvbW1hbmQKICAgICBsaW5lIGludGVyZmFjZSBgb3BlbnNzbCA8Y29tbWFuZD4nLCBzaW1pbGFyIHRvIGBjdnMgPGNvbW1hbmQ+Jy4KICAgICBbUmFsZiBTLiBFbmdlbHNjaGFsbCwgUGF1bCBTdXR0b24gYW5kIEJlbiBMYXVyaWVdCgogICopIGNhLmM6IG1vdmUgdGVzdCBmb3IgRFNBIGtleXMgaW5zaWRlICNpZm5kZWYgTk9fRFNBLiBNYWtlIHB1YmtleQogICAgIEJJVCBTVFJJTkcgd3JhcHBlciBhbHdheXMgaGF2ZSB6ZXJvIHVudXNlZCBiaXRzLgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIEFkZCBDQS5wbCwgcGVybCB2ZXJzaW9uIG9mIENBLnNoLCBhZGQgZXh0ZW5kZWQga2V5IHVzYWdlIE9JRC4KICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBNYWtlIHRoZSB0b3AtbGV2ZWwgSU5TVEFMTCBkb2N1bWVudGF0aW9uIGVhc2llciB0byB1bmRlcnN0YW5kLgogICAgIFtQYXVsIFN1dHRvbl0KCiAgKikgTWFrZWZpbGVzIHVwZGF0ZWQgdG8gZXhpdCBpZiBhbiBlcnJvciBvY2N1cnMgaW4gYSBzdWItZGlyZWN0b3J5CiAgICAgbWFrZSAoaW5jbHVkaW5nIGlmIHVzZXIgcHJlc3NlcyBeQykgW1BhdWwgU3V0dG9uXQoKICAqKSBNYWtlIE1vbnRnb21lcnkgY29udGV4dCBzdHVmZiBleHBsaWNpdCBpbiBSU0EgZGF0YSBzdHJ1Y3R1cmUuCiAgICAgW0JlbiBMYXVyaWVdCgogICopIEZpeCBidWlsZCBvcmRlciBvZiBwZW0gYW5kIGVyciB0byBhbGxvdyBmb3IgZ2VuZXJhdGVkIHBlbS5oLgogICAgIFtCZW4gTGF1cmllXQoKICAqKSBGaXggcmVudW1iZXJpbmcgYnVnIGluIFg1MDlfTkFNRV9kZWxldGVfZW50cnkoKS4KICAgICBbQmVuIExhdXJpZV0KCiAgKikgRW5oYW5jZWQgdGhlIGVyci1pbnMucGwgc2NyaXB0IHNvIGl0IG1ha2VzIHRoZSBlcnJvciBsaWJyYXJ5IG51bWJlciAKICAgICBnbG9iYWwgYW5kIGNhbiBhZGQgYSBsaWJyYXJ5IG5hbWUuIFRoaXMgaXMgbmVlZGVkIGZvciBleHRlcm5hbCBBU04xIGFuZAogICAgIG90aGVyIGVycm9yIGxpYnJhcmllcy4KICAgICBbU3RldmUgSGVuc29uXQoKICAqKSBGaXhlZCBza19pbnNlcnQgd2hpY2ggbmV2ZXIgd29ya2VkIHByb3Blcmx5LgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIEZpeCBBU04xIG1hY3JvcyBzbyB0aGV5IGNhbiBoYW5kbGUgaW5kZWZpbml0ZSBsZW5ndGggY29uc3RydXRlZCAKICAgICBFWFBMSUNJVCB0YWdzLiBTb21lIG5vbiBzdGFuZGFyZCBjZXJ0aWZpY2F0ZXMgdXNlIHRoZXNlOiB0aGV5IGNhbiBub3cKICAgICBiZSByZWFkIGluLgogICAgIFtTdGV2ZSBIZW5zb25dCgogICopIE1lcmdlZCB0aGUgdmFyaW91cyBvbGQvb2Jzb2xldGUgU1NMZWF5IGRvY3VtZW50YXRpb24gZmlsZXMgKGRvYy94eHguZG9jKQogICAgIGludG8gYSBzaW5nbGUgZG9jL3NzbGVheS50eHQgYnVuZGxlLiBUaGlzIHdheSB0aGUgaW5mb3JtYXRpb24gaXMgc3RpbGwKICAgICBwcmVzZXJ2ZWQgYnV0IG5vIGxvbmdlciBtZXNzZXMgdXAgdGhpcyBkaXJlY3RvcnkuIE5vdyBpdCdzIG5ldyByb29tIGZvcgogICAgIHRoZSBuZXcgc2V0IG9mIGRvY3VtZW5hdGlvbiBmaWxlcy4KICAgICBbUmFsZiBTLiBFbmdlbHNjaGFsbF0KCiAgKikgU0VUcyB3ZXJlIGluY29ycmVjdGx5IERFUiBlbmNvZGVkLiBUaGlzIHdhcyBhIG1ham9yIHBhaW4sIGJlY2F1c2UgdGhleQogICAgIHNoYXJlZCBjb2RlIHdpdGggU0VRVUVOQ0VzLCB3aGljaCBhcmVuJ3QgY29kZWQgdGhlIHNhbWUuIFRoaXMgbWVhbnMgdGhhdAogICAgIGFsbW9zdCBldmVyeXRoaW5nIHRvIGRvIHdpdGggU0VUcyBvciBTRVFVRU5DRXMgaGFzIGVpdGhlciBjaGFuZ2VkIG5hbWUgb3IKICAgICBudW1iZXIgb2YgYXJndW1lbnRzLgogICAgIFtCZW4gTGF1cmllLCBiYXNlZCBvbiBhIHBhcnRpYWwgZml4IGJ5IEdQIEpheWFuIDxncEBuc2ouY28uanA+XQoKICAqKSBGaXggdGVzdCBkYXRhIHRvIHdvcmsgd2l0aCB0aGUgYWJvdmUuCiAgICAgW0JlbiBMYXVyaWVdCgogICopIEZpeCB0aGUgUlNBIGhlYWRlciBkZWNsYXJhdGlvbnMgdGhhdCBoaWQgYSBidWcgSSBmaXhlZCBpbiAwLjkuMGIgYnV0CiAgICAgd2FzIGFscmVhZHkgZml4ZWQgYnkgRXJpYyBmb3IgMC45LjEgaXQgc2VlbXMuCiAgICAgW0JlbiBMYXVyaWUgLSBwb2ludGVkIG91dCBieSBVbGYgTfZsbGVyIDx1bGZAZml0dWcuZGU+XQoKICAqKSBBdXRvZGV0ZWN0IEZyZWVCU0QzLgogICAgIFtCZW4gTGF1cmllXQoKICAqKSBGaXggdmFyaW91cyBidWdzIGluIENvbmZpZ3VyZS4gVGhpcyBhZmZlY3RzIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOgogICAgIG5leHRzdGVwCiAgICAgbmNyLXNjZGUKICAgICB1bml4d2FyZS0yLjAKICAgICB1bml4d2FyZS0yLjAtcGVudGl1bQogICAgIHNjbzUtY2MuCiAgICAgW0JlbiBMYXVyaWVdCgogICopIEVsaW1pbmF0ZSBnZW5lcmF0ZWQgZmlsZXMgZnJvbSBDVlMuIFJlb3JkZXIgdGVzdHMgdG8gcmVnZW5lcmF0ZSBmaWxlcwogICAgIGJlZm9yZSB0aGV5IGFyZSBuZWVkZWQuCiAgICAgW0JlbiBMYXVyaWVdCgogICopIEdlbmVyYXRlIE1ha2VmaWxlLnNzbCBmcm9tIE1ha2VmaWxlLm9yZyAodG8ga2VlcCBDVlMgaGFwcHkpLgogICAgIFtCZW4gTGF1cmllXQoKIENoYW5nZXMgYmV0d2VlbiAwLjkuMWIgYW5kIDAuOS4xYwoKICAqKSBBZGRlZCBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIHRvIGNyeXB0by9jcnlwdG8uaCBhbmQgCiAgICAgY2hhbmdlZCBTU0xlYXkgdG8gT3BlblNTTCBpbiB2ZXJzaW9uIHN0cmluZ3MuCiAgICAgW1JhbGYgUy4gRW5nZWxzY2hhbGxdCiAgCiAgKikgU29tZSBmaXh1cHMgdG8gdGhlIHRvcC1sZXZlbCBkb2N1bWVudHMuCiAgICAgW1BhdWwgU3V0dG9uXQoKICAqKSBGaXhlZCB0aGUgbmFzdHkgYnVnIHdoZXJlIHJzYXJlZi5oIHdhcyBub3QgZm91bmQgdW5kZXIgY29tcGlsZS10aW1lCiAgICAgYmVjYXVzZSB0aGUgc3ltbGluayB0byBpbmNsdWRlLyB3YXMgbWlzc2luZy4KICAgICBbUmFsZiBTLiBFbmdlbHNjaGFsbF0KCiAgKikgSW5jb3Jwb3JhdGVkIHRoZSBwb3B1bGFyIG5vLVJTQS9EU0Etb25seSBwYXRjaGVzIAogICAgIHdoaWNoIGFsbG93IHRvIGNvbXBpbGUgYSBSU0EtZnJlZSBTU0xlYXkuCiAgICAgW0FuZHJldyBDb29rZSAvIEludGVycmFkZXIgTGR0LiwgUmFsZiBTLiBFbmdlbHNjaGFsbF0KCiAgKikgRml4ZWQgbmFzdHkgcmVoYXNoIHByb2JsZW0gdW5kZXIgYG1ha2UgLWYgTWFrZWZpbGUuc3NsIGxpbmtzJwogICAgIHdoZW4gInNzbGVheSIgaXMgc3RpbGwgbm90IGZvdW5kLgogICAgIFtSYWxmIFMuIEVuZ2Vsc2NoYWxsXQoKICAqKSBBZGRlZCBtb3JlIHBsYXRmb3JtcyB0byBDb25maWd1cmU6IENyYXkgVDNFLCBIUFVYIDExLCAKICAgICBbUmFsZiBTLiBFbmdlbHNjaGFsbCwgQmVja21hbm4gPGJlY2ttYW5AYWNsLmxhbmwuZ292Pl0KCiAgKikgVXBkYXRlZCB0aGUgUkVBRE1FIGZpbGUuCiAgICAgW1JhbGYgUy4gRW5nZWxzY2hhbGxdCgogICopIEFkZGVkIHZhcmlvdXMgLmN2c2lnbm9yZSBmaWxlcyBpbiB0aGUgQ1ZTIHJlcG9zaXRvcnkgc3ViZGlycwogICAgIHRvIG1ha2UgYSAiY3ZzIHVwZGF0ZSIgcmVhbGx5IHNpbGVudC4KICAgICBbUmFsZiBTLiBFbmdlbHNjaGFsbF0KCiAgKikgUmVjb21waWxlZCB0aGUgZXJyb3ItZGVmaW5pdGlvbiBoZWFkZXIgZmlsZXMgYW5kIGFkZGVkCiAgICAgbWlzc2luZyBzeW1ib2xzIHRvIHRoZSBXaW4zMiBsaW5rZXIgdGFibGVzLgogICAgIFtSYWxmIFMuIEVuZ2Vsc2NoYWxsXQoKICAqKSBDbGVhbmVkIHVwIHRoZSB0b3AtbGV2ZWwgZG9jdW1lbnRzOwogICAgIG8gbmV3IGZpbGVzOiBDSEFOR0VTIGFuZCBMSUNFTlNFCiAgICAgbyBtZXJnZWQgVkVSU0lPTiwgSElTVE9SWSogYW5kIFJFQURNRSogZmlsZXMgYSBDSEFOR0VTLlNTTGVheSAKICAgICBvIG1lcmdlZCBDT1BZUklHSFQgaW50byBMSUNFTlNFCiAgICAgbyByZW1vdmVkIG9ic29sZXRlIFRPRE8gZmlsZQogICAgIG8gcmVuYW1lZCBNSUNST1NPRlQgdG8gSU5TVEFMTC5XMzIKICAgICBbUmFsZiBTLiBFbmdlbHNjaGFsbF0KCiAgKikgUmVtb3ZlZCBkdW1teSBmaWxlcyBmcm9tIHRoZSAwLjkuMWIgc291cmNlIHRyZWU6IAogICAgIGNyeXB0by9hc24xL3ggY3J5cHRvL2Jpby9jZCBjcnlwdG8vYmlvL2ZnIGNyeXB0by9iaW8vZ3JlcCBjcnlwdG8vYmlvL3ZpCiAgICAgY3J5cHRvL2JuL2FzbS8uLi4uLi5hZGQuYyBjcnlwdG8vYm4vYXNtL2Eub3V0IGNyeXB0by9kc2EvZiBjcnlwdG8vbWQ1L2YKICAgICBjcnlwdG8vcGVtL2dtb24ub3V0IGNyeXB0by9wZXJsYXNtL2YgY3J5cHRvL3BrY3M3L2J1aWxkIGNyeXB0by9yc2EvZgogICAgIGNyeXB0by9zaGEvYXNtL2YgY3J5cHRvL3RocmVhZHMvZiBtcy96enogc3NsL2Ygc3NsL2YubWFrIHRlc3QvZgogICAgIHV0aWwvZi5tYWsgdXRpbC9wbC9mIHV0aWwvcGwvZi5tYWsgY3J5cHRvL2JmL2JmX2xvY2wub2xkIGFwcHMvZgogICAgIFtSYWxmIFMuIEVuZ2Vsc2NoYWxsXQoKICAqKSBBZGRlZCB2YXJpb3VzIHBsYXRmb3JtIHBvcnRhYmlsaXR5IGZpeGVzLgogICAgIFtNYXJrIEouIENveF0KCiAgKikgVGhlIEdlbmVzaXMgb2YgdGhlIE9wZW5TU0wgcnBqZWN0OgogICAgIFdlIHN0YXJ0IHdpdGggdGhlIGxhdGVzdCAodW5yZWxlYXNlZCkgU1NMZWF5IHZlcnNpb24gMC45LjFiIHdoaWNoIEVyaWMgQS4KICAgICBZb3VuZyBhbmQgVGltIEouIEh1ZHNvbiBjcmVhdGVkIHdoaWxlIHRoZXkgd2VyZSB3b3JraW5nIGZvciBDMk5ldCB1bnRpbAogICAgIHN1bW1lciAxOTk4LgogICAgIFtUaGUgT3BlblNTTCBQcm9qZWN0XQogCiBDaGFuZ2VzIGJldHdlZW4gMC45LjBiIGFuZCAwLjkuMWIKCiAgKikgVXBkYXRlZCBhIGZldyBDQSBjZXJ0aWZpY2F0ZXMgdW5kZXIgY2VydHMvCiAgICAgW0VyaWMgQS4gWW91bmddCgogICopIENoYW5nZWQgc29tZSBCSUdOVU0gYXBpIHN0dWZmLgogICAgIFtFcmljIEEuIFlvdW5nXQoKICAqKSBWYXJpb3VzIHBsYXRmb3JtIHBvcnRzOiBPcGVuQlNELCBVbHRyaXgsIElSSVggNjRiaXQsIE5ldEJTRCwgCiAgICAgREdVWCB4ODYsIExpbnV4IEFscGhhLCBldGMuCiAgICAgW0VyaWMgQS4gWW91bmddCgogICopIE5ldyBDT01QIGxpYnJhcnkgW2NyeXB0by9jb21wL10gZm9yIFNTTCBSZWNvcmQgTGF5ZXIgQ29tcHJlc3Npb246IAogICAgIFJMRSAoZHVtbXkgaW1wbGVtZW50ZWQpIGFuZCBaTElCIChyZWFsbHkgaW1wbGVtZW50ZWQgd2hlbiBaTElCIGlzCiAgICAgYXZhaWxhYmxlKS4KICAgICBbRXJpYyBBLiBZb3VuZ10KCiAgKikgQWRkIC1zdHJwYXJzZSBvcHRpb24gdG8gYXNuMXBhcnMgcHJvZ3JhbSB3aGljaCBwYXJzZXMgbmVzdGVkIAogICAgIGJpbmFyeSBzdHJ1Y3R1cmVzIAogICAgIFtEciBTdGVwaGVuIEhlbnNvbiA8c2hlbnNvbkBiaWdmb290LmNvbT5dCgogICopIEFkZGVkICJvaWRfZmlsZSIgdG8gc3NsZWF5LmNuZiBmb3IgImNhIiBhbmQgInJlcSIgcHJvZ3JhbXMuCiAgICAgW0VyaWMgQS4gWW91bmddCgogICopIERTQSBmaXggZm9yICJjYSIgcHJvZ3JhbS4KICAgICBbRXJpYyBBLiBZb3VuZ10KCiAgKikgQWRkZWQgIi1nZW5rZXkiIG9wdGlvbiB0byAiZHNhcGFyYW0iIHByb2dyYW0uCiAgICAgW0VyaWMgQS4gWW91bmddCgogICopIEFkZGVkIFJJUEUgTUQxNjAgKHJtZDE2MCkgbWVzc2FnZSBkaWdlc3QuCiAgICAgW0VyaWMgQS4gWW91bmddCgogICopIEFkZGVkIC1hIChhbGwpIG9wdGlvbiB0byAic3NsZWF5IHZlcnNpb24iIGNvbW1hbmQuCiAgICAgW0VyaWMgQS4gWW91bmddCgogICopIEFkZGVkIFBMQVRGT1JNIGRlZmluZSB3aGljaCBpcyB0aGUgaWQgZ2l2ZW4gdG8gQ29uZmlndXJlLgogICAgIFtFcmljIEEuIFlvdW5nXQoKICAqKSBBZGRlZCBNZW1DaGVja19YWFhYIGZ1bmN0aW9ucyB0byBjcnlwdG8vbWVtLmMgZm9yIG1lbW9yeSBjaGVja2luZy4KICAgICBbRXJpYyBBLiBZb3VuZ10KCiAgKikgRXh0ZW5kZWQgdGhlIEFTTi4xIHBhcnNlciByb3V0aW5lcy4KICAgICBbRXJpYyBBLiBZb3VuZ10KCiAgKikgRXh0ZW5kZWQgQklPIHJvdXRpbmVzIHRvIHN1cHBvcnQgUkVVU0VBRERSLCBzZWVrLCB0ZWxsLCBldGMuCiAgICAgW0VyaWMgQS4gWW91bmddCgogICopIEFkZGVkIGEgQk5fQ1RYIHRvIHRoZSBCTiBsaWJyYXJ5LgogICAgIFtFcmljIEEuIFlvdW5nXQoKICAqKSBGaXhlZCB0aGUgd2VhayBrZXkgdmFsdWVzIGluIERFUyBsaWJyYXJ5CiAgICAgW0VyaWMgQS4gWW91bmddCgogICopIENoYW5nZWQgQVBJIGluIEVWUCBsaWJyYXJ5IGZvciBjaXBoZXIgYWxpYXNlcy4KICAgICBbRXJpYyBBLiBZb3VuZ10KCiAgKikgQWRkZWQgc3VwcG9ydCBmb3IgUkMyLzY0Yml0IGNpcGhlci4KICAgICBbRXJpYyBBLiBZb3VuZ10KCiAgKikgQ29udmVydGVkIHRoZSBsaGFzaCBsaWJyYXJ5IHRvIHRoZSBjcnlwdG8vbWVtLmMgZnVuY3Rpb25zLgogICAgIFtFcmljIEEuIFlvdW5nXQoKICAqKSBBZGRlZCBtb3JlIHJlY29nbml6ZWQgQVNOLjEgb2JqZWN0IGlkcy4KICAgICBbRXJpYyBBLiBZb3VuZ10KCiAgKikgQWRkZWQgbW9yZSBSU0EgcGFkZGluZyBjaGVja3MgZm9yIFNTTC9UTFMuCiAgICAgW0VyaWMgQS4gWW91bmddCgogICopIEFkZGVkIEJJTyBwcm94eS9maWx0ZXIgZnVuY3Rpb25hbGl0eS4KICAgICBbRXJpYyBBLiBZb3VuZ10KCiAgKikgQWRkZWQgZXh0cmFfY2VydHMgdG8gU1NMX0NUWCB3aGljaCBjYW4gYmUgdXNlZAogICAgIHNlbmQgZXh0cmEgQ0EgY2VydGlmaWNhdGVzIHRvIHRoZSBjbGllbnQgaW4gdGhlIENBIGNlcnQgY2hhaW4gc2VuZGluZwogICAgIHByb2Nlc3MuIEl0IGNhbiBiZSBjb25maWd1cmVkIHdpdGggU1NMX0NUWF9hZGRfZXh0cmFfY2hhaW5fY2VydCgpLgogICAgIFtFcmljIEEuIFlvdW5nXQoKICAqKSBOb3cgRm9ydGV6emEgaXMgZGVuaWVkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBwaGFzZSBiZWNhdXNlCiAgICAgdGhpcyBpcyBrZXkgZXhjaGFuZ2UgbWVjaGFuaXNtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgU1NMZWF5IGF0IGFsbC4KICAgICBbRXJpYyBBLiBZb3VuZ10KCiAgKikgQWRkaXRpb25hbCBQS0NTMSBjaGVja3MuCiAgICAgW0VyaWMgQS4gWW91bmddCgogICopIFN1cHBvcnQgdGhlIHN0cmluZyAiVExTdjEiIGZvciBhbGwgVExTIHYxIGNpcGhlcnMuCiAgICAgW0VyaWMgQS4gWW91bmddCgogICopIEFkZGVkIGZ1bmN0aW9uIFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHgoKSB3aGljaCBnaXZlcyB0aGUKICAgICBleF9kYXRhIGluZGV4IG9mIHRoZSBTU0wgY29udGV4dCBpbiB0aGUgWDUwOV9TVE9SRV9DVFggZXhfZGF0YS4KICAgICBbRXJpYyBBLiBZb3VuZ10KCiAgKikgRml4ZWQgYSBmZXcgbWVtb3J5IGxlYWtzLgogICAgIFtFcmljIEEuIFlvdW5nXQoKICAqKSBGaXhlZCB2YXJpb3VzIGNvZGUgYW5kIGNvbW1lbnQgdHlwb3MuCiAgICAgW0VyaWMgQS4gWW91bmddCgogICopIEEgbWlub3IgYnVnIGluIHNzbC9zM19jbG50LmMgd2hlcmUgdGhlcmUgd291bGQgYWx3YXlzIGJlIDQgMCAKICAgICBieXRlcyBzZW50IGluIHRoZSBjbGllbnQgcmFuZG9tLgogICAgIFtFZHdhcmQgQmlzaG9wIDxlYmlzaG9wQHNweWdsYXNzLmNvbT5dCgo=