-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathuserjs-base64.js
More file actions
3 lines (3 loc) · 105 KB
/
userjs-base64.js
File metadata and controls
3 lines (3 loc) · 105 KB
1
2
3
// 20251104 v140.1 user.js as base64 from main repo
// place this in a file named "userjs-base64.js"
const userjsbase64="LyoqKioqKgoqICAgIG5hbWU6IGFya2VuZm94IHVzZXIuanMKKiAgICBkYXRlOiA0IE5vdmVtYmVyIDIwMjUKKiB2ZXJzaW9uOiAxNDAKKiAgICB1cmxzOiBodHRwczovL2dpdGh1Yi5jb20vYXJrZW5mb3gvdXNlci5qcyBbcmVwb10KKiAgICAgICAgOiBodHRwczovL2Fya2VuZm94LmdpdGh1Yi5pby9ndWkvIFtpbnRlcmFjdGl2ZV0KKiBsaWNlbnNlOiBNSVQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcmtlbmZveC91c2VyLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UudHh0CgoqIFJFQURNRToKCiAgMS4gQ29uc2lkZXIgdXNpbmcgVG9yIEJyb3dzZXIgaWYgaXQgbWVldHMgeW91ciBuZWVkcyBvciBmaXRzIHlvdXIgdGhyZWF0IG1vZGVsCiAgICAgICAqIGh0dHBzOi8vMjAxOS53d3cudG9ycHJvamVjdC5vcmcvYWJvdXQvdG9ydXNlcnMuaHRtbAogIDIuIFJlYWQgdGhlIGVudGlyZSB3aWtpCiAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmtlbmZveC91c2VyLmpzL3dpa2kKICAzLiBJZiB5b3Ugc2tpcHBlZCBzdGVwIDIsIHJldHVybiB0byBzdGVwIDIKICA0LiBNYWtlIGNoYW5nZXMgaW4gYSB1c2VyLW92ZXJyaWRlcy5qcwogICAgICAgKiBUaGVyZSBhcmUgb2Z0ZW4gdHJhZGUtb2ZmcyBhbmQgY29uZmxpY3RzIGJldHdlZW4gc2VjdXJpdHkgdnMgcHJpdmFjeSB2cyBhbnRpLXRyYWNraW5nCiAgICAgICAgIGFuZCB0aGVzZSBuZWVkIHRvIGJlIGJhbGFuY2VkIGFnYWluc3QgZnVuY3Rpb25hbGl0eSAmIGNvbnZlbmllbmNlICYgYnJlYWthZ2UKICAgICAgICogU29tZSBzaXRlIGJyZWFrYWdlIGFuZCB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyB3aWxsIGhhcHBlbi4gRXZlcnlvbmUncyBleHBlcmllbmNlIHdpbGwgZGlmZmVyCiAgICAgICAgIGUuZy4gc29tZSB1c2VyIGRhdGEgaXMgZXJhc2VkIG9uIGV4aXQgKHNlY3Rpb24gMjgwMCksIGNoYW5nZSB0aGlzIHRvIHN1aXQgeW91ciBuZWVkcwogICAgICAgKiBXaGlsZSBub3QgMTAwJSBkZWZpbml0aXZlLCBzZWFyY2ggZm9yICJbU0VUVVAiIHRhZ3MKICA1LiBTb21lIHRhZyBpbmZvCiAgICAgICBbU0VUVVAtU0VDVVJJVFldIGl0J3Mgb25lIGl0ZW0sIHJlYWQgaXQKICAgICAgICAgICAgW1NFVFVQLVdFQl0gY2FuIGNhdXNlIHNvbWUgd2Vic2l0ZXMgdG8gYnJlYWsKICAgICAgICAgW1NFVFVQLUNIUk9NRV0gY2hhbmdlcyBob3cgRmlyZWZveCBpdHNlbGYgYmVoYXZlcyAoaS5lLiBub3QgZGlyZWN0bHkgd2Vic2l0ZSByZWxhdGVkKQogICAgICAgICBbU0VUVVAtSEFSREVOXSBwcmVmcyB5b3UgbWF5IGxpa2UgdG8gYWRkIHRvIG92ZXJyaWRlcwogIDYuIE92ZXJyaWRlIFJlY2lwZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcmtlbmZveC91c2VyLmpzL2lzc3Vlcy8xMDgwCgoqIFJFTEVBU0VTOiBodHRwczovL2dpdGh1Yi5jb20vYXJrZW5mb3gvdXNlci5qcy9yZWxlYXNlcwoKICAqIFVzZSB0aGUgYXJrZW5mb3ggcmVsZWFzZSB0aGF0IG1hdGNoZXMgeW91ciBGaXJlZm94IHZlcnNpb24KICAgIC0gRE9OJ1Qgd2FpdCBmb3IgYXJrZW5mb3ggdG8gdXBkYXRlIEZpcmVmb3gsIG5vdGhpbmcgbWFqb3IgY2hhbmdlcyB0aGVzZSBkYXlzCiAgKiBFYWNoIHJlbGVhc2UKICAgIC0gcnVuIHByZWZzQ2xlYW5lciB0byByZXNldCBwcmVmcyBtYWRlIGluYWN0aXZlLCBpbmNsdWRpbmcgZGVwcmVjYXRlZCAoOTk5OSkKICAqIEVTUiAoRXh0ZW5kZWQgU3VwcG9ydCBSZWxlYXNlKQogICAgLSBJdCBpcyByZWNvbW1lbmRlZCB0byBub3QgdXNlIHRoZSB1cGRhdGVyLCBvciB5b3Ugd2lsbCBnZXQgYSBsYXRlciB2ZXJzaW9uIHdoaWNoIG1heSBjYXVzZSBpc3N1ZXMuCiAgICAgIFNvIHlvdSBzaG91bGQgbWFudWFsbHkgYXBwZW5kIHlvdXIgb3ZlcnJpZGVzIChhbmQga2VlcCBhIGNvcHkpLCBhbmQgbWFudWFsbHkgdXBkYXRlIHdoZW4geW91CiAgICAgIGNoYW5nZSBFU1IgcmVsZWFzZXMgKGFya2VuZm94IGlzIGFscmVhZHkgcGFzdCB0aGF0IHJlbGVhc2UpCiAgICAtIElmIHlvdSBkZWNpZGUgdG8ga2VlcCB1cGRhdGluZywgdGhlbiB0aGUgb251cyBpcyBvbiB5b3UgLSBhbHNvIHNlZSBzZWN0aW9uIDk5OTkKCiogSU5ERVg6CgogIDAxMDA6IFNUQVJUVVAKICAwMjAwOiBHRU9MT0NBVElPTgogIDAzMDA6IFFVSUVURVIgRk9YCiAgMDQwMDogU0FGRSBCUk9XU0lORwogIDA2MDA6IEJMT0NLIElNUExJQ0lUIE9VVEJPVU5ECiAgMDcwMDogRE5TIC8gRG9IIC8gUFJPWFkgLyBTT0NLUwogIDA4MDA6IExPQ0FUSU9OIEJBUiAvIFNFQVJDSCBCQVIgLyBTVUdHRVNUSU9OUyAvIEhJU1RPUlkgLyBGT1JNUwogIDA5MDA6IFBBU1NXT1JEUwogIDEwMDA6IERJU0sgQVZPSURBTkNFCiAgMTIwMDogSFRUUFMgKFNTTC9UTFMgLyBPQ1NQIC8gQ0VSVFMgLyBIUEtQKQogIDE2MDA6IFJFRkVSRVJTCiAgMTcwMDogQ09OVEFJTkVSUwogIDIwMDA6IFBMVUdJTlMgLyBNRURJQSAvIFdFQlJUQwogIDI0MDA6IERPTSAoRE9DVU1FTlQgT0JKRUNUIE1PREVMKQogIDI2MDA6IE1JU0NFTExBTkVPVVMKICAyNzAwOiBFVFAgKEVOSEFOQ0VEIFRSQUNLSU5HIFBST1RFQ1RJT04pCiAgMjgwMDogU0hVVERPV04gJiBTQU5JVElaSU5HCiAgNDAwMDogRlBQIChmaW5nZXJwcmludGluZ1Byb3RlY3Rpb24pCiAgNDUwMDogT1BUSU9OQUwgUkZQIChyZXNpc3RGaW5nZXJwcmludGluZykKICA1MDAwOiBPUFRJT05BTCBPUFNFQwogIDU1MDA6IE9QVElPTkFMIEhBUkRFTklORwogIDYwMDA6IERPTidUIFRPVUNICiAgNzAwMDogRE9OJ1QgQk9USEVSCiAgODAwMDogRE9OJ1QgQk9USEVSOiBGSU5HRVJQUklOVElORwogIDg1MDA6IFRFTEVNRVRSWQogIDkwMDA6IE5PTi1QUk9KRUNUIFJFTEFURUQKICA5OTk5OiBERVBSRUNBVEVEIC8gUkVOQU1FRAoKKioqKioqLwoKLyogU1RBUlQ6IGludGVybmFsIGN1c3RvbSBwcmVmIHRvIHRlc3QgZm9yIHN5bnRheCBlcnJvcnMKICogW05PVEVdIE5vdCBhbGwgc3ludGF4IGVycm9ycyBjYXVzZSBwYXJzaW5nIHRvIGFib3J0IGkuZS4gcmVhY2hpbmcgdGhlIGxhc3QgZGVidWcgcHJlZgogKiBubyBsb25nZXIgbmVjZXNzYXJpbHkgbWVhbnMgdGhhdCBhbGwgcHJlZnMgaGF2ZSBiZWVuIGFwcGxpZWQuIENoZWNrIHRoZSBjb25zb2xlIHJpZ2h0CiAqIGFmdGVyIHN0YXJ0dXAgZm9yIGFueSB3YXJuaW5ncy9lcnJvciBtZXNzYWdlcyByZWxhdGVkIHRvIG5vbi1hcHBsaWVkIHByZWZzCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvbm5ldGhlcmNvdGUvMjAxOC8wMy8wOS9hLW5ldy1wcmVmZXJlbmNlcy1wYXJzZXItZm9yLWZpcmVmb3gvICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiU1RBUlQ6IE9oIHllcywgdGhlIE5vcndlZ2lhbiBCbHVlLi4uIHdoYXQncyB3cm9uZyB3aXRoIGl0PyIpOwoKLyogMDAwMDogZGlzYWJsZSBhYm91dDpjb25maWcgd2FybmluZyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5hYm91dENvbmZpZy5zaG93V2FybmluZyIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gMDEwMF06IFNUQVJUVVAgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIwMTAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGRlYWQhIik7Ci8qIDAxMDI6IHNldCBzdGFydHVwIHBhZ2UgW1NFVFVQLUNIUk9NRV0KICogMD1ibGFuaywgMT1ob21lLCAyPWxhc3QgdmlzaXRlZCBwYWdlLCAzPXJlc3VtZSBwcmV2aW91cyBzZXNzaW9uCiAqIFtOT1RFXSBTZXNzaW9uIFJlc3RvcmUgaXMgY2xlYXJlZCBpZiBoaXN0b3J5IGlzIGFsc28gY2xlYXJlZCAoMjgxMSspLCBhbmQgbm90IHVzZWQgaW4gUHJpdmF0ZSBCcm93c2luZyBtb2RlCiAqIFtTRVRUSU5HXSBHZW5lcmFsPlN0YXJ0dXA+UmVzdG9yZSBwcmV2aW91cyBzZXNzaW9uICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnN0YXJ0dXAucGFnZSIsIDApOwovKiAwMTAzOiBzZXQgSE9NRStORVdXSU5ET1cgcGFnZQogKiBhYm91dDpob21lPUZpcmVmb3ggSG9tZSAoZGVmYXVsdCwgc2VlIDAxMDUpLCBjdXN0b20gVVJMcy4uLiwgQmxhbmsgUGFnZQogKiBbU0VUVElOR10gSG9tZT5OZXcgV2luZG93cyBhbmQgVGFicz5Ib21lcGFnZSBhbmQgbmV3IHdpbmRvd3MgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc3RhcnR1cC5ob21lcGFnZSIsICJjaHJvbWU6Ly9icm93c2VyL2NvbnRlbnQvYmxhbmt0YWIuaHRtbCIpOwovKiAwMTA0OiBzZXQgTkVXVEFCIHBhZ2UKICogdHJ1ZT1GaXJlZm94IEhvbWUgKGRlZmF1bHQsIHNlZSAwMTA1KSwgZmFsc2U9YmxhbmsgcGFnZQogKiBbU0VUVElOR10gSG9tZT5OZXcgV2luZG93cyBhbmQgVGFicz5OZXcgdGFicyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDAxMDU6IGRpc2FibGUgc3BvbnNvcmVkIGNvbnRlbnQgb24gRmlyZWZveCBIb21lIChBY3Rpdml0eSBTdHJlYW0pCiAqIFtTRVRUSU5HXSBIb21lPkZpcmVmb3ggSG9tZSBDb250ZW50ICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLnNob3dTcG9uc29yZWQiLCBmYWxzZSk7IC8vIFtGRjU4K10gU3BvbnNvcmVkIHN0b3JpZXMKdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLnNob3dTcG9uc29yZWRUb3BTaXRlcyIsIGZhbHNlKTsgLy8gW0ZGODMrXSBTcG9uc29yZWQgc2hvcnRjdXRzCnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5zaG93U3BvbnNvcmVkQ2hlY2tib3hlcyIsIGZhbHNlKTsgLy8gW0ZGMTQwK10gU3VwcG9ydCBGaXJlZm94Ci8qIDAxMDY6IGNsZWFyIGRlZmF1bHQgdG9wc2l0ZXMKICogW05PVEVdIFRoaXMgZG9lcyBub3QgYmxvY2sgeW91IGZyb20gYWRkaW5nIHlvdXIgb3duICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLmRlZmF1bHQuc2l0ZXMiLCAiIik7CgovKioqIFtTRUNUSU9OIDAyMDBdOiBHRU9MT0NBVElPTiAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjAyMDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgZGVmaW5pdGVseSBkZWNlYXNlZCEiKTsKLyogMDIwMjogZGlzYWJsZSB1c2luZyB0aGUgT1MncyBnZW9sb2NhdGlvbiBzZXJ2aWNlICoqKi8KdXNlcl9wcmVmKCJnZW8ucHJvdmlkZXIubXMtd2luZG93cy1sb2NhdGlvbiIsIGZhbHNlKTsgLy8gW1dJTkRPV1NdCnVzZXJfcHJlZigiZ2VvLnByb3ZpZGVyLnVzZV9jb3JlbG9jYXRpb24iLCBmYWxzZSk7IC8vIFtNQUNdCnVzZXJfcHJlZigiZ2VvLnByb3ZpZGVyLnVzZV9nZW9jbHVlIiwgZmFsc2UpOyAvLyBbRkYxMDIrXSBbTElOVVhdCgovKioqIFtTRUNUSU9OIDAzMDBdOiBRVUlFVEVSIEZPWCAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjAzMDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3Mgbm90IHBpbmluJyBmb3IgdGhlIGZqb3JkcyEiKTsKLyoqIFJFQ09NTUVOREFUSU9OUyAqKiovCi8qIDAzMjA6IGRpc2FibGUgcmVjb21tZW5kYXRpb24gcGFuZSBpbiBhYm91dDphZGRvbnMgKHVzZXMgR29vZ2xlIEFuYWx5dGljcykgKioqLwp1c2VyX3ByZWYoImV4dGVuc2lvbnMuZ2V0QWRkb25zLnNob3dQYW5lIiwgZmFsc2UpOyAvLyBbSElEREVOIFBSRUZdCi8qIDAzMjE6IGRpc2FibGUgcmVjb21tZW5kYXRpb25zIGluIGFib3V0OmFkZG9ucycgRXh0ZW5zaW9ucyBhbmQgVGhlbWVzIHBhbmVzIFtGRjY4K10gKioqLwp1c2VyX3ByZWYoImV4dGVuc2lvbnMuaHRtbGFib3V0YWRkb25zLnJlY29tbWVuZGF0aW9ucy5lbmFibGVkIiwgZmFsc2UpOwovKiAwMzIyOiBkaXNhYmxlIHBlcnNvbmFsaXplZCBFeHRlbnNpb24gUmVjb21tZW5kYXRpb25zIGluIGFib3V0OmFkZG9ucyBhbmQgQU1PIFtGRjY1K10KICogW05PVEVdIFRoaXMgcHJlZiBoYXMgbm8gZWZmZWN0IHdoZW4gSGVhbHRoIFJlcG9ydHMgKDg1MDEpIGFyZSBkaXNhYmxlZAogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkZpcmVmb3ggRGF0YSBDb2xsZWN0aW9uIGFuZCBVc2U+QWxsb3cgcGVyc29uYWxpemVkIGV4dGVuc2lvbiByZWNvbW1lbmRhdGlvbnMKICogWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi9wZXJzb25hbGl6ZWQtZXh0ZW5zaW9uLXJlY29tbWVuZGF0aW9ucyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5kaXNjb3ZlcnkuZW5hYmxlZCIsIGZhbHNlKTsKCi8qKiBBQ1RJVklUWSBTVFJFQU0gKioqLwovKiAwMzM1OiBkaXNhYmxlIEZpcmVmb3ggSG9tZSAoQWN0aXZpdHkgU3RyZWFtKSB0ZWxlbWV0cnkgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0uZmVlZHMudGVsZW1ldHJ5IiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0udGVsZW1ldHJ5IiwgZmFsc2UpOwoKLyoqIFNUVURJRVMgKioqLwovKiAwMzQwOiBkaXNhYmxlIFN0dWRpZXMKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5GaXJlZm94IERhdGEgQ29sbGVjdGlvbiBhbmQgVXNlPkluc3RhbGwgYW5kIHJ1biBzdHVkaWVzICoqKi8KdXNlcl9wcmVmKCJhcHAuc2hpZWxkLm9wdG91dHN0dWRpZXMuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDM0MTogZGlzYWJsZSBOb3JtYW5keS9TaGllbGQgW0ZGNjArXQogKiBTaGllbGQgaXMgYSB0ZWxlbWV0cnkgc3lzdGVtIHRoYXQgY2FuIHB1c2ggYW5kIHRlc3QgInJlY2lwZXMiCiAqIFsxXSBodHRwczovL21vemlsbGEuZ2l0aHViLmlvL25vcm1hbmR5LyAqKiovCnVzZXJfcHJlZigiYXBwLm5vcm1hbmR5LmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiYXBwLm5vcm1hbmR5LmFwaV91cmwiLCAiIik7CgovKiogQ1JBU0ggUkVQT1JUUyAqKiovCi8qIDAzNTA6IGRpc2FibGUgQ3Jhc2ggUmVwb3J0cyAqKiovCnVzZXJfcHJlZigiYnJlYWtwYWQucmVwb3J0VVJMIiwgIiIpOwp1c2VyX3ByZWYoImJyb3dzZXIudGFicy5jcmFzaFJlcG9ydGluZy5zZW5kUmVwb3J0IiwgZmFsc2UpOyAvLyBbRkY0NCtdCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5jcmFzaFJlcG9ydHMudW5zdWJtaXR0ZWRDaGVjay5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1MStdIFtERUZBVUxUOiBmYWxzZV0KLyogMDM1MTogZW5mb3JjZSBubyBzdWJtaXNzaW9uIG9mIGJhY2tsb2dnZWQgQ3Jhc2ggUmVwb3J0cyBbRkY1OCtdCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+RmlyZWZveCBEYXRhIENvbGxlY3Rpb24gYW5kIFVzZT5TZW5kIGJhY2tsb2dnZWQgY3Jhc2ggcmVwb3J0cyAgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuY3Jhc2hSZXBvcnRzLnVuc3VibWl0dGVkQ2hlY2suYXV0b1N1Ym1pdDIiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KCi8qKiBPVEhFUiAqKiovCi8qIDAzNjA6IGRpc2FibGUgQ2FwdGl2ZSBQb3J0YWwgZGV0ZWN0aW9uCiAqIFsxXSBodHRwczovL3d3dy5lZmYub3JnL2RlZXBsaW5rcy8yMDE3LzA4L2hvdy1jYXB0aXZlLXBvcnRhbHMtaW50ZXJmZXJlLXdpcmVsZXNzLXNlY3VyaXR5LWFuZC1wcml2YWN5ICoqKi8KdXNlcl9wcmVmKCJjYXB0aXZlZGV0ZWN0LmNhbm9uaWNhbFVSTCIsICIiKTsKdXNlcl9wcmVmKCJuZXR3b3JrLmNhcHRpdmUtcG9ydGFsLXNlcnZpY2UuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTIrXQovKiAwMzYxOiBkaXNhYmxlIE5ldHdvcmsgQ29ubmVjdGl2aXR5IGNoZWNrcyBbRkY2NStdCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE0NjA1MzcgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsuY29ubmVjdGl2aXR5LXNlcnZpY2UuZW5hYmxlZCIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gMDQwMF06IFNBRkUgQlJPV1NJTkcgKFNCKQogICBTQiBoYXMgdGFrZW4gbWFueSBzdGVwcyB0byBwcmVzZXJ2ZSBwcml2YWN5LiBJZiByZXF1aXJlZCwgYSBmdWxsIHVybCBpcyBuZXZlciBzZW50CiAgIHRvIEdvb2dsZSwgb25seSBhIHBhcnQtaGFzaCBvZiB0aGUgcHJlZml4LCBoaWRkZW4gd2l0aCBub2lzZSBvZiBvdGhlciByZWFsIHBhcnQtaGFzaGVzLgogICBGaXJlZm94IHRha2VzIG1lYXN1cmVzIHN1Y2ggYXMgc3RyaXBwaW5nIG91dCBpZGVudGlmeWluZyBwYXJhbWV0ZXJzIGFuZCBzaW5jZSBTQnY0IChGRjU3KykKICAgZG9lc24ndCBldmVuIHVzZSBjb29raWVzLiAoI1R1cm4gb24gYnJvd3Nlci5zYWZlYnJvd3NpbmcuZGVidWcgdG8gbW9uaXRvciB0aGlzIGFjdGl2aXR5KQoKICAgWzFdIGh0dHBzOi8vZmVlZGluZy5jbG91ZC5nZWVrLm56L3Bvc3RzL2hvdy1zYWZlLWJyb3dzaW5nLXdvcmtzLWluLWZpcmVmb3gvCiAgIFsyXSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvU2VjdXJpdHkvU2FmZV9Ccm93c2luZwogICBbM10gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL2hvdy1kb2VzLXBoaXNoaW5nLWFuZC1tYWx3YXJlLXByb3RlY3Rpb24td29yawogICBbNF0gaHR0cHM6Ly9lZHVjYXRlZGd1ZXNzd29yay5vcmcvcG9zdHMvc2FmZS1icm93c2luZy1wcml2YWN5LwoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjA0MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgcGFzc2VkIG9uISIpOwovKiAwNDAxOiBkaXNhYmxlIFNCIChTYWZlIEJyb3dzaW5nKQogKiBbV0FSTklOR10gRG8gdGhpcyBhdCB5b3VyIG93biByaXNrISBUaGVzZSBhcmUgdGhlIG1hc3RlciBzd2l0Y2hlcwogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PlNlY3VyaXR5Pi4uLiBCbG9jayBkYW5nZXJvdXMgYW5kIGRlY2VwdGl2ZSBjb250ZW50ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5tYWx3YXJlLmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcucGhpc2hpbmcuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDQwMjogZGlzYWJsZSBTQiBjaGVja3MgZm9yIGRvd25sb2FkcyAoYm90aCBsb2NhbCBsb29rdXBzICsgcmVtb3RlKQogKiBUaGlzIGlzIHRoZSBtYXN0ZXIgc3dpdGNoIGZvciB0aGUgc2FmZWJyb3dzaW5nLmRvd25sb2FkcyogcHJlZnMgKDA0MDMsIDA0MDQpCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+U2VjdXJpdHk+Li4uICJCbG9jayBkYW5nZXJvdXMgZG93bmxvYWRzIiAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcuZG93bmxvYWRzLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDA0MDM6IGRpc2FibGUgU0IgY2hlY2tzIGZvciBkb3dubG9hZHMgKHJlbW90ZSkKICogVG8gdmVyaWZ5IHRoZSBzYWZldHkgb2YgY2VydGFpbiBleGVjdXRhYmxlIGZpbGVzLCBGaXJlZm94IG1heSBzdWJtaXQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICogZmlsZSwgaW5jbHVkaW5nIHRoZSBuYW1lLCBvcmlnaW4sIHNpemUgYW5kIGEgY3J5cHRvZ3JhcGhpYyBoYXNoIG9mIHRoZSBjb250ZW50cywgdG8gdGhlIEdvb2dsZQogKiBTYWZlIEJyb3dzaW5nIHNlcnZpY2Ugd2hpY2ggaGVscHMgRmlyZWZveCBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIGZpbGUgc2hvdWxkIGJlIGJsb2NrZWQKICogW1NFVFVQLVNFQ1VSSVRZXSBJZiB5b3UgZG8gbm90IHVuZGVyc3RhbmQgdGhpcywgb3IgeW91IHdhbnQgdGhpcyBwcm90ZWN0aW9uLCB0aGVuIG92ZXJyaWRlIHRoaXMgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmRvd25sb2Fkcy5yZW1vdGUuZW5hYmxlZCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5kb3dubG9hZHMucmVtb3RlLnVybCIsICIiKTsgLy8gRGVmZW5zZS1pbi1kZXB0aAovKiAwNDA0OiBkaXNhYmxlIFNCIGNoZWNrcyBmb3IgdW53YW50ZWQgc29mdHdhcmUKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5TZWN1cml0eT4uLi4gIldhcm4geW91IGFib3V0IHVud2FudGVkIGFuZCB1bmNvbW1vbiBzb2Z0d2FyZSIgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmRvd25sb2Fkcy5yZW1vdGUuYmxvY2tfcG90ZW50aWFsbHlfdW53YW50ZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcuZG93bmxvYWRzLnJlbW90ZS5ibG9ja191bmNvbW1vbiIsIGZhbHNlKTsKLyogMDQwNTogZGlzYWJsZSAiaWdub3JlIHRoaXMgd2FybmluZyIgb24gU0Igd2FybmluZ3MgW0ZGNDUrXQogKiBJZiBjbGlja2VkLCBpdCBieXBhc3NlcyB0aGUgYmxvY2sgZm9yIHRoYXQgc2Vzc2lvbi4gVGhpcyBpcyBhIG1lYW5zIGZvciBhZG1pbnMgdG8gZW5mb3JjZSBTQgogKiBbVEVTVF0gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmtlbmZveC91c2VyLmpzL3dpa2kvQXBwZW5kaXgtQS1UZXN0LVNpdGVzIy1tb3ppbGxhCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzEyMjY0OTAgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmFsbG93T3ZlcnJpZGUiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDA2MDBdOiBCTE9DSyBJTVBMSUNJVCBPVVRCT1VORCBbbm90IGV4cGxpY2l0bHkgYXNrZWQgZm9yIC0gZS5nLiBjbGlja2VkIG9uXSAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjA2MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3Mgbm8gbW9yZSEiKTsKLyogMDYwMTogZGlzYWJsZSBsaW5rIHByZWZldGNoaW5nCiAqIFsxXSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVFRQL0xpbmtfcHJlZmV0Y2hpbmdfRkFRICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLnByZWZldGNoLW5leHQiLCBmYWxzZSk7Ci8qIDA2MDI6IGRpc2FibGUgRE5TIHByZWZldGNoaW5nCiAqIFsxXSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvWC1ETlMtUHJlZmV0Y2gtQ29udHJvbCAqKiovCnVzZXJfcHJlZigibmV0d29yay5kbnMuZGlzYWJsZVByZWZldGNoIiwgdHJ1ZSk7CnVzZXJfcHJlZigibmV0d29yay5kbnMuZGlzYWJsZVByZWZldGNoRnJvbUhUVFBTIiwgdHJ1ZSk7Ci8qIDA2MDM6IGRpc2FibGUgcHJlZGljdG9yIC8gcHJlZmV0Y2hpbmcgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsucHJlZGljdG9yLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigibmV0d29yay5wcmVkaWN0b3IuZW5hYmxlLXByZWZldGNoIiwgZmFsc2UpOyAvLyBbRkY0OCtdIFtERUZBVUxUOiBmYWxzZV0KLyogMDYwNDogZGlzYWJsZSBsaW5rLW1vdXNlb3ZlciBvcGVuaW5nIGNvbm5lY3Rpb24gdG8gbGlua2VkIHNlcnZlcgogKiBbMV0gaHR0cHM6Ly9uZXdzLnNsYXNoZG90Lm9yZy9zdG9yeS8xNS8wOC8xNC8yMzIxMjAyL2hvdy10by1xdWFzaC1maXJlZm94cy1zaWxlbnQtcmVxdWVzdHMgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5zcGVjdWxhdGl2ZS1wYXJhbGxlbC1saW1pdCIsIDApOwovKiAwNjA1OiBkaXNhYmxlIG1vdXNlZG93biBzcGVjdWxhdGl2ZSBjb25uZWN0aW9ucyBvbiBib29rbWFya3MgYW5kIGhpc3RvcnkgW0ZGOTgrXSAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5wbGFjZXMuc3BlY3VsYXRpdmVDb25uZWN0LmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDA2MTA6IGVuZm9yY2Ugbm8gIkh5cGVybGluayBBdWRpdGluZyIgKGNsaWNrIHRyYWNraW5nKQogKiBbMV0gaHR0cHM6Ly93d3cuYmxlZXBpbmdjb21wdXRlci5jb20vbmV3cy9zb2Z0d2FyZS9tYWpvci1icm93c2Vycy10by1wcmV2ZW50LWRpc2FibGluZy1vZi1jbGljay10cmFja2luZy1wcml2YWN5LXJpc2svICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNlbmRfcGluZ3MiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KCi8qKiogW1NFQ1RJT04gMDcwMF06IEROUyAvIERvSCAvIFBST1hZIC8gU09DS1MgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIwNzAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGdpdmVuIHVwIHRoZSBnaG9zdCEiKTsKLyogMDcwMjogc2V0IHRoZSBwcm94eSBzZXJ2ZXIgdG8gZG8gYW55IEROUyBsb29rdXBzIHdoZW4gdXNpbmcgU09DS1MKICogZS5nLiBpbiBUb3IsIHRoaXMgc3RvcHMgeW91ciBsb2NhbCBETlMgc2VydmVyIGZyb20ga25vd2luZyB5b3VyIFRvciBkZXN0aW5hdGlvbgogKiBhcyBhIHJlbW90ZSBUb3Igbm9kZSB3aWxsIGhhbmRsZSB0aGUgRE5TIHJlcXVlc3QKICogWzFdIGh0dHBzOi8vdHJhYy50b3Jwcm9qZWN0Lm9yZy9wcm9qZWN0cy90b3Ivd2lraS9kb2MvVG9yaWZ5SE9XVE8vV2ViQnJvd3NlcnMgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsucHJveHkuc29ja3NfcmVtb3RlX2RucyIsIHRydWUpOwovKiAwNzAzOiBkaXNhYmxlIHVzaW5nIFVOQyAoVW5pZm9ybSBOYW1pbmcgQ29udmVudGlvbikgcGF0aHMgW0ZGNjErXQogKiBbU0VUVVAtQ0hST01FXSBDYW4gYnJlYWsgZXh0ZW5zaW9ucyBmb3IgcHJvZmlsZXMgb24gbmV0d29yayBzaGFyZXMKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTQxMzg2OCAqKiovCnVzZXJfcHJlZigibmV0d29yay5maWxlLmRpc2FibGVfdW5jX3BhdGhzIiwgdHJ1ZSk7IC8vIFtISURERU4gUFJFRl0KLyogMDcwNDogZGlzYWJsZSBHSU8gYXMgYSBwb3RlbnRpYWwgcHJveHkgYnlwYXNzIHZlY3RvcgogKiBHdmZzL0dJTyBoYXMgYSBzZXQgb2Ygc3VwcG9ydGVkIHByb3RvY29scyBsaWtlIG9iZXgsIG5ldHdvcmssIGFyY2hpdmUsIGNvbXB1dGVyLAogKiBkYXYsIGNkZGEsIGdwaG90bzIsIHRyYXNoLCBldGMuIEZyb20gRkY4Ny0xMTcsIGJ5IGRlZmF1bHQgb25seSBzZnRwIHdhcyBhY2NlcHRlZAogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xNDMzNTA3CiAqIFsyXSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HVmZzCiAqIFszXSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HSU9fKHNvZnR3YXJlKSAqKiovCnVzZXJfcHJlZigibmV0d29yay5naW8uc3VwcG9ydGVkLXByb3RvY29scyIsICIiKTsgLy8gW0hJRERFTiBQUkVGXSBbREVGQVVMVDogIiJdCi8qIDA3MDU6IGRpc2FibGUgcHJveHkgZGlyZWN0IGZhaWxvdmVyIGZvciBzeXN0ZW0gcmVxdWVzdHMgW0ZGOTErXQogKiBbV0FSTklOR10gRGVmYXVsdCB0cnVlIGlzIGEgc2VjdXJpdHkgZmVhdHVyZSBhZ2FpbnN0IG1hbGljaW91cyBleHRlbnNpb25zIFsxXQogKiBbU0VUVVAtQ0hST01FXSBJZiB5b3UgdXNlIGEgcHJveHkgYW5kIHlvdSB0cnVzdCB5b3VyIGV4dGVuc2lvbnMKICogWzFdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9zZWN1cml0eS8yMDIxLzEwLzI1L3NlY3VyaW5nLXRoZS1wcm94eS1hcGktZm9yLWZpcmVmb3gtYWRkLW9ucy8gKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsucHJveHkuZmFpbG92ZXJfZGlyZWN0IiwgZmFsc2UpOwovKiAwNzA2OiBkaXNhYmxlIHByb3h5IGJ5cGFzcyBmb3Igc3lzdGVtIHJlcXVlc3QgZmFpbHVyZXMgW0ZGOTUrXQogKiBSZW1vdGVTZXR0aW5ncywgVXBkYXRlU2VydmljZSwgVGVsZW1ldHJ5IFsxXQogKiBbV0FSTklOR10gSWYgZmFsc2UsIHRoaXMgd2lsbCBicmVhayB0aGUgZmFsbGJhY2sgZm9yIHNvbWUgc2VjdXJpdHkgZmVhdHVyZXMKICogW1NFVFVQLUNIUk9NRV0gSWYgeW91IHVzZSBhIHByb3h5IGFuZCB5b3UgdW5kZXJzdGFuZCB0aGUgc2VjdXJpdHkgaW1wYWN0CiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL2J1Z2xpc3QuY2dpP2J1Z19pZD0xNzMyNzkyLDE3MzM5OTQsMTczMzQ4MSAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5wcm94eS5hbGxvd19ieXBhc3MiLCBmYWxzZSk7Ci8qIDA3MTA6IGVuYWJsZSBETlMtb3Zlci1IVFRQUyAoRG9IKSBbRkY2MCtdCiAqIDA9ZGVmYXVsdCwgMj1pbmNyZWFzZWQgKFRSUiAoVHJ1c3RlZCBSZWN1cnNpdmUgUmVzb2x2ZXIpIGZpcnN0KSwgMz1tYXggKFRSUiBvbmx5KSwgNT1vZmYgKG5vIHJvbGxvdXQpCiAqIHNlZSAiZG9oLXJvbGxvdXQuaG9tZS1yZWdpb24iOiBVU0EgMjAxOSwgQ2FuYWRhIDIwMjEsIFJ1c3NpYS9Va3JhaW5lIDIwMjIgWzNdCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+RE5TIG92ZXIgSFRUUFMKICogWzFdIGh0dHBzOi8vaGFja3MubW96aWxsYS5vcmcvMjAxOC8wNS9hLWNhcnRvb24taW50cm8tdG8tZG5zLW92ZXItaHR0cHMvCiAqIFsyXSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvU2VjdXJpdHkvRE9ILXJlc29sdmVyLXBvbGljeQogKiBbM10gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL2ZpcmVmb3gtZG5zLW92ZXItaHR0cHMKICogWzRdIGh0dHBzOi8vd3d3LmVmZi5vcmcvZGVlcGxpbmtzLzIwMjAvMTIvZG5zLWRvaC1hbmQtb2RvaC1vaC1teS15ZWFyLXJldmlldy0yMDIwICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLnRyci5tb2RlIiwgMyk7Ci8qIDA3MTI6IHNldCBEb0ggcHJvdmlkZXIKICogVGhlIGN1c3RvbSB1cmkgaXMgdGhlIHZhbHVlIHNob3duIHdoZW4geW91ICJDaG9vc2UgcHJvdmlkZXI+Q3VzdG9tPiIKICogW05PVEVdIElmIHlvdSBVU0UgY3VzdG9tIHRoZW4gIm5ldHdvcmsudHJyLnVyaSIgc2hvdWxkIGJlIHNldCB0aGUgc2FtZQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkROUyBvdmVyIEhUVFBTPkluY3JlYXNlZC9NYXg+Q2hvb3NlIHByb3ZpZGVyICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLnRyci51cmkiLCAiaHR0cHM6Ly9leGFtcGxlLmRucyIpOwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsudHJyLmN1c3RvbV91cmkiLCAiaHR0cHM6Ly9leGFtcGxlLmRucyIpOwoKLyoqKiBbU0VDVElPTiAwODAwXTogTE9DQVRJT04gQkFSIC8gU0VBUkNIIEJBUiAvIFNVR0dFU1RJT05TIC8gSElTVE9SWSAvIEZPUk1TICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMDgwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBjZWFzZWQgdG8gYmUhIik7Ci8qIDA4MDE6IGRpc2FibGUgbG9jYXRpb24gYmFyIG1ha2luZyBzcGVjdWxhdGl2ZSBjb25uZWN0aW9ucyBbRkY1NitdCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzEzNDgyNzUgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnNwZWN1bGF0aXZlQ29ubmVjdC5lbmFibGVkIiwgZmFsc2UpOwovKiAwODAyOiBkaXNhYmxlIGxvY2F0aW9uIGJhciBjb250ZXh0dWFsIHN1Z2dlc3Rpb25zCiAqIFtOT1RFXSBUaGUgVUkgaXMgY29udHJvbGxlZCBieSB0aGUgLmVuYWJsZWQgcHJlZgogKiBbU0VUVElOR10gU2VhcmNoPkFkZHJlc3MgQmFyPlN1Z2dlc3Rpb25zIGZyb20uLi4KICogWzFdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9kYXRhLzIwMjEvMDkvMTUvZGF0YS1hbmQtZmlyZWZveC1zdWdnZXN0LyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIucXVpY2tzdWdnZXN0LmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjkyK10KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zdWdnZXN0LnF1aWNrc3VnZ2VzdC5ub25zcG9uc29yZWQiLCBmYWxzZSk7IC8vIFtGRjk1K10KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zdWdnZXN0LnF1aWNrc3VnZ2VzdC5zcG9uc29yZWQiLCBmYWxzZSk7IC8vIFtGRjkyK10KLyogMDgwMzogZGlzYWJsZSBsaXZlIHNlYXJjaCBzdWdnZXN0aW9ucwogKiBbTk9URV0gQm90aCBtdXN0IGJlIHRydWUgZm9yIGxpdmUgc2VhcmNoIHRvIHdvcmsgaW4gdGhlIGxvY2F0aW9uIGJhcgogKiBbU0VUVVAtQ0hST01FXSBPdmVycmlkZSB0aGVzZSBpZiB5b3UgdHJ1c3QgYW5kIHVzZSBhIHByaXZhY3kgcmVzcGVjdGluZyBzZWFyY2ggZW5naW5lCiAqIFtTRVRUSU5HXSBTZWFyY2g+U2hvdyBzZWFyY2ggc3VnZ2VzdGlvbnMgfCBTaG93IHNlYXJjaCBzdWdnZXN0aW9ucyBpbiBhZGRyZXNzIGJhciByZXN1bHRzICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnNlYXJjaC5zdWdnZXN0LmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc3VnZ2VzdC5zZWFyY2hlcyIsIGZhbHNlKTsKLyogMDgwNTogZGlzYWJsZSB1cmxiYXIgdHJlbmRpbmcgc2VhcmNoIHN1Z2dlc3Rpb25zIFtGRjExOCtdCiAqIFtTRVRUSU5HXSBTZWFyY2g+U2VhcmNoIFN1Z2dlc3Rpb25zPlNob3cgdHJlbmRpbmcgc2VhcmNoIHN1Z2dlc3Rpb25zIChGRjExOSkgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnRyZW5kaW5nLmZlYXR1cmVHYXRlIiwgZmFsc2UpOwovKiAwODA2OiBkaXNhYmxlIHVybGJhciBzdWdnZXN0aW9ucyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuYWRkb25zLmZlYXR1cmVHYXRlIiwgZmFsc2UpOyAvLyBbRkYxMTUrXQp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLmFtcC5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsgLy8gW0ZGMTQxK10gYWRNYXJrZXRwbGFjZQp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLmZha2VzcG90LmZlYXR1cmVHYXRlIiwgZmFsc2UpOyAvLyBbRkYxMzArXSBbREVGQVVMVDogZmFsc2VdCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIubWRuLmZlYXR1cmVHYXRlIiwgZmFsc2UpOyAvLyBbRkYxMTcrXQp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLndlYXRoZXIuZmVhdHVyZUdhdGUiLCBmYWxzZSk7IC8vIFtGRjEwOCtdCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIud2lraXBlZGlhLmZlYXR1cmVHYXRlIiwgZmFsc2UpOyAvLyBbRkYxNDErXQp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnllbHAuZmVhdHVyZUdhdGUiLCBmYWxzZSk7IC8vIFtGRjEyNCtdCi8qIDA4MDc6IGRpc2FibGUgdXJsYmFyIGNsaXBib2FyZCBzdWdnZXN0aW9ucyBbRkYxMTgrXSAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuY2xpcGJvYXJkLmZlYXR1cmVHYXRlIiwgZmFsc2UpOwovKiAwODA4OiBkaXNhYmxlIHJlY2VudCBzZWFyY2hlcyBbRkYxMjArXQogKiBbTk9URV0gUmVjZW50IHNlYXJjaGVzIGFyZSBjbGVhcmVkIGlmIGhpc3RvcnkgaXMgY2xlYXJlZCAoMjgxMSspCiAqIFsxXSBodHRwczovL3N1cHBvcnQubW96aWxsYS5vcmcva2Ivc2VhcmNoLXN1Z2dlc3Rpb25zLWZpcmVmb3ggKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnJlY2VudHNlYXJjaGVzLmZlYXR1cmVHYXRlIiwgZmFsc2UpOwovKiAwODEwOiBkaXNhYmxlIHNlYXJjaCBhbmQgZm9ybSBoaXN0b3J5CiAqIFtOT1RFXSBXZSBhbHNvIGNsZWFyIGZvcm1kYXRhIG9uIGV4aXQgKDI4MTErKQogKiBbU0VUVVAtV0VCXSBCZSBhd2FyZSB0aGF0IGF1dG9jb21wbGV0ZSBmb3JtIGRhdGEgY2FuIGJlIHJlYWQgYnkgdGhpcmQgcGFydGllcyBbMV1bMl0KICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5IaXN0b3J5PkN1c3RvbSBTZXR0aW5ncz5SZW1lbWJlciBzZWFyY2ggYW5kIGZvcm0gaGlzdG9yeQogKiBbMV0gaHR0cHM6Ly9ibG9nLm1pbmRlZHNlY3VyaXR5LmNvbS8yMDExLzEwL2F1dG9jb21wbGV0ZWFnYWluLmh0bWwKICogWzJdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMzgxNjgxICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmZvcm1maWxsLmVuYWJsZSIsIGZhbHNlKTsKLyogMDgxNTogZGlzYWJsZSB0YWItdG8tc2VhcmNoIFtGRjg1K10KICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBleGNsdWRlIG9uIGEgcGVyLWVuZ2luZSBiYXNpcyBieSB1bmNoZWNraW5nIHRoZW0gaW4gT3B0aW9ucz5TZWFyY2gKICogW1NFVFRJTkddIFNlYXJjaD5BZGRyZXNzIEJhcj5XaGVuIHVzaW5nIHRoZSBhZGRyZXNzIGJhciwgc3VnZ2VzdD5TZWFyY2ggZW5naW5lcyAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc3VnZ2VzdC5lbmdpbmVzIiwgZmFsc2UpOwovKiAwODIwOiBkaXNhYmxlIGNvbG9yaW5nIG9mIHZpc2l0ZWQgbGlua3MKICogW1NFVFVQLUhBUkRFTl0gQnVsayByYXBpZCBoaXN0b3J5IHNuaWZmaW5nIHdhcyBtaXRpZ2F0ZWQgaW4gMjAxMCBbMV1bMl0uIFNsb3dlciBhbmQgbW9yZSBleHBlbnNpdmUKICogcmVkcmF3IHRpbWluZyBhdHRhY2tzIHdlcmUgbGFyZ2VseSBtaXRpZ2F0ZWQgaW4gRkY3NysgWzNdLiBVc2luZyBSRlAgKDQ1MDEpIGZ1cnRoZXIgaGFtcGVycyB0aW1pbmcKICogYXR0YWNrcy4gSGlzdG9yeSBjYW4gYWxzbyBiZSBjbGVhcmVkIG9uIGV4aXQgKDI4MTErKS4gSG93ZXZlciwgc29jaWFsIGVuZ2luZWVyaW5nIFsyI2xpbWl0c11bNF1bNV0KICogYW5kIGFkdmFuY2VkIHRhcmdldGVkIHRpbWluZyBhdHRhY2tzIGNvdWxkIHN0aWxsIHByb2R1Y2UgdXNhYmxlIHJlc3VsdHMKICogWzFdIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0NTUy9Qcml2YWN5X2FuZF90aGVfOnZpc2l0ZWRfc2VsZWN0b3IKICogWzJdIGh0dHBzOi8vZGJhcm9uLm9yZy9tb3ppbGxhL3Zpc2l0ZWQtcHJpdmFjeQogKiBbM10gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xNjMyNzY1CiAqIFs0XSBodHRwczovL2VhcnRobG5nLmdpdGh1Yi5pby90ZXN0cGFnZXMvdmlzaXRlZF9saW5rcy5odG1sIChzZWUgZ2l0aHViIHdpa2kgQVBQRU5ESVggQSBvbiBob3cgdG8gdXNlKQogKiBbNV0gaHR0cHM6Ly9sY2FtdHVmLmJsb2dzcG90LmNvbS8yMDE2LzA4L2Nzcy1taXgtYmxlbmQtbW9kZS1pcy1iYWQtZm9yLWtlZXBpbmcuaHRtbCAqKiovCiAgIC8vIHVzZXJfcHJlZigibGF5b3V0LmNzcy52aXNpdGVkX2xpbmtzX2VuYWJsZWQiLCBmYWxzZSk7Ci8qIDA4MzA6IGVuYWJsZSBzZXBhcmF0ZSBkZWZhdWx0IHNlYXJjaCBlbmdpbmUgaW4gUHJpdmF0ZSBXaW5kb3dzIGFuZCBpdHMgVUkgc2V0dGluZwogKiBbU0VUVElOR10gU2VhcmNoPkRlZmF1bHQgU2VhcmNoIEVuZ2luZT5DaG9vc2UgYSBkaWZmZXJlbnQgZGVmYXVsdCBzZWFyY2ggZW5naW5lIGZvciBQcml2YXRlIFdpbmRvd3Mgb25seSAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5zZWFyY2guc2VwYXJhdGVQcml2YXRlRGVmYXVsdCIsIHRydWUpOyAvLyBbRkY3MCtdCnVzZXJfcHJlZigiYnJvd3Nlci5zZWFyY2guc2VwYXJhdGVQcml2YXRlRGVmYXVsdC51aS5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtGRjcxK10KCi8qKiogW1NFQ1RJT04gMDkwMF06IFBBU1NXT1JEUwogICBbMV0gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL3VzZS1wcmltYXJ5LXBhc3N3b3JkLXByb3RlY3Qtc3RvcmVkLWxvZ2lucy1hbmQtcGFzCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMDkwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBleHBpcmVkISIpOwovKiAwOTAzOiBkaXNhYmxlIGF1dG8tZmlsbGluZyB1c2VybmFtZSAmIHBhc3N3b3JkIGZvcm0gZmllbGRzCiAqIGNhbiBsZWFrIGluIGNyb3NzLXNpdGUgZm9ybXMgKmFuZCogYmUgc3Bvb2ZlZAogKiBbTk9URV0gVXNlcm5hbWUgJiBwYXNzd29yZCBpcyBzdGlsbCBhdmFpbGFibGUgd2hlbiB5b3UgZW50ZXIgdGhlIGZpZWxkCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+UGFzc3dvcmRzPkF1dG9maWxsIGxvZ2lucyBhbmQgcGFzc3dvcmRzCiAqIFsxXSBodHRwczovL2ZyZWVkb20tdG8tdGlua2VyLmNvbS8yMDE3LzEyLzI3L25vLWJvdW5kYXJpZXMtZm9yLXVzZXItaWRlbnRpdGllcy13ZWItdHJhY2tlcnMtZXhwbG9pdC1icm93c2VyLWxvZ2luLW1hbmFnZXJzLwogKiBbMl0gaHR0cHM6Ly9ob21lcy5lc2F0Lmt1bGV1dmVuLmJlL35hc2Vub2wvbGVha3ktZm9ybXMvICoqKi8KdXNlcl9wcmVmKCJzaWdub24uYXV0b2ZpbGxGb3JtcyIsIGZhbHNlKTsKLyogMDkwNDogZGlzYWJsZSBmb3JtbGVzcyBsb2dpbiBjYXB0dXJlIGZvciBQYXNzd29yZCBNYW5hZ2VyIFtGRjUxK10gKioqLwp1c2VyX3ByZWYoInNpZ25vbi5mb3JtbGVzc0NhcHR1cmUuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDkwNTogbGltaXQgKG9yIGRpc2FibGUpIEhUVFAgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgZGlhbG9ncyB0cmlnZ2VyZWQgYnkgc3ViLXJlc291cmNlcyBbRkY0MStdCiAqIGhhcmRlbnMgYWdhaW5zdCBwb3RlbnRpYWwgY3JlZGVudGlhbHMgcGhpc2hpbmcKICogMCA9IGRvbid0IGFsbG93IHN1Yi1yZXNvdXJjZXMgdG8gb3BlbiBIVFRQIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIGRpYWxvZ3MKICogMSA9IGRvbid0IGFsbG93IGNyb3NzLW9yaWdpbiBzdWItcmVzb3VyY2VzIHRvIG9wZW4gSFRUUCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyBkaWFsb2dzCiAqIDIgPSBhbGxvdyBzdWItcmVzb3VyY2VzIHRvIG9wZW4gSFRUUCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyBkaWFsb2dzIChkZWZhdWx0KSAqKiovCnVzZXJfcHJlZigibmV0d29yay5hdXRoLnN1YnJlc291cmNlLWh0dHAtYXV0aC1hbGxvdyIsIDEpOwovKiAwOTA2OiBlbmZvcmNlIG5vIGF1dG9tYXRpYyBhdXRoZW50aWNhdGlvbiBvbiBNaWNyb3NvZnQgc2l0ZXMgW0ZGOTErXSBbV0lORE9XUyAxMCtdCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+TG9naW5zIGFuZCBQYXNzd29yZHM+QWxsb3cgV2luZG93cyBzaW5nbGUgc2lnbi1vbiBmb3IuLi4KICogWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi93aW5kb3dzLXNzbyAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLndpbmRvd3Mtc3NvLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KLyogMDkwNzogZW5mb3JjZSBubyBhdXRvbWF0aWMgYXV0aGVudGljYXRpb24gb24gTWljcm9zb2Z0IHNpdGVzIFtGRjEzMStdIFtNQUNdCiAqIE9uIG1hY09TLCBTU08gb25seSB3b3JrcyBvbiBjb3Jwb3JhdGUgZGV2aWNlcyAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLm1pY3Jvc29mdC1lbnRyYS1zc28uZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQoKLyoqKiBbU0VDVElPTiAxMDAwXTogRElTSyBBVk9JREFOQ0UgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIxMDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGdvbmUgdG8gbWVldCAnaXMgbWFrZXIhIik7Ci8qIDEwMDE6IGRpc2FibGUgZGlzayBjYWNoZQogKiBbTk9URV0gV2UgYWxzbyBjbGVhciBjYWNoZSBvbiBleGl0ICgyODExKykKICogW1NFVFVQLUNIUk9NRV0gSWYgeW91IHRoaW5rIGRpc2sgY2FjaGUgaGVscHMgcGVyZiwgdGhlbiBmZWVsIGZyZWUgdG8gb3ZlcnJpZGUgdGhpcyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5jYWNoZS5kaXNrLmVuYWJsZSIsIGZhbHNlKTsKLyogMTAwMjogc2V0IG1lZGlhIGNhY2hlIGluIFByaXZhdGUgQnJvd3NpbmcgdG8gaW4tbWVtb3J5IGFuZCBpbmNyZWFzZSBpdHMgbWF4aW11bSBzaXplCiAqIFtOT1RFXSBNU0UgKE1lZGlhIFNvdXJjZSBFeHRlbnNpb25zKSBhcmUgYWxyZWFkeSBzdG9yZWQgaW4tbWVtb3J5IGluIFBCICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnByaXZhdGVicm93c2luZy5mb3JjZU1lZGlhTWVtb3J5Q2FjaGUiLCB0cnVlKTsgLy8gW0ZGNzUrXQp1c2VyX3ByZWYoIm1lZGlhLm1lbW9yeV9jYWNoZV9tYXhfc2l6ZSIsIDY1NTM2KTsKLyogMTAwMzogZGlzYWJsZSBzdG9yaW5nIGV4dHJhIHNlc3Npb24gZGF0YSBbU0VUVVAtQ0hST01FXQogKiBkZWZpbmUgb24gd2hpY2ggc2l0ZXMgdG8gc2F2ZSBleHRyYSBzZXNzaW9uIGRhdGEgc3VjaCBhcyBmb3JtIGNvbnRlbnQsIGNvb2tpZXMgYW5kIFBPU1QgZGF0YQogKiAwPWV2ZXJ5d2hlcmUsIDE9dW5lbmNyeXB0ZWQgc2l0ZXMsIDI9bm93aGVyZSAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5zZXNzaW9uc3RvcmUucHJpdmFjeV9sZXZlbCIsIDIpOwovKiAxMDA1OiBkaXNhYmxlIGF1dG9tYXRpYyBGaXJlZm94IHN0YXJ0IGFuZCBzZXNzaW9uIHJlc3RvcmUgYWZ0ZXIgcmVib290IFtGRjYyK10gW1dJTkRPV1NdCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzYwMzkwMyAqKiovCnVzZXJfcHJlZigidG9vbGtpdC53aW5SZWdpc3RlckFwcGxpY2F0aW9uUmVzdGFydCIsIGZhbHNlKTsKLyogMTAwNjogZGlzYWJsZSBmYXZpY29ucyBpbiBzaG9ydGN1dHMgW1dJTkRPV1NdCiAqIFVSTCBzaG9ydGN1dHMgdXNlIGEgY2FjaGVkIHJhbmRvbWx5IG5hbWVkIC5pY28gZmlsZSB3aGljaCBpcyBzdG9yZWQgaW4geW91cgogKiBwcm9maWxlL3Nob3J0Y3V0Q2FjaGUgZGlyZWN0b3J5LiBUaGUgLmljbyByZW1haW5zIGFmdGVyIHRoZSBzaG9ydGN1dCBpcyBkZWxldGVkCiAqIElmIHNldCB0byBmYWxzZSB0aGVuIHRoZSBzaG9ydGN1dHMgdXNlIGEgZ2VuZXJpYyBGaXJlZm94IGljb24gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc2hlbGwuc2hvcnRjdXRGYXZpY29ucyIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gMTIwMF06IEhUVFBTIChTU0wvVExTIC8gT0NTUCAvIENFUlRTIC8gSFBLUCkKICAgWW91ciBjaXBoZXIgYW5kIG90aGVyIHNldHRpbmdzIGNhbiBiZSB1c2VkIGluIHNlcnZlciBzaWRlIGZpbmdlcnByaW50aW5nCiAgIFtURVNUXSBodHRwczovL3d3dy5zc2xsYWJzLmNvbS9zc2x0ZXN0L3ZpZXdNeUNsaWVudC5odG1sCiAgIFtURVNUXSBodHRwczovL2Jyb3dzZXJsZWFrcy5jb20vc3NsCiAgIFtURVNUXSBodHRwczovL2phM2VyLmNvbS8KICAgWzFdIGh0dHBzOi8vd3d3LnNlY3VyaXR5YXJ0d29yay5lcy8yMDE3LzAyLzAyL3Rscy1jbGllbnQtZmluZ2VycHJpbnRpbmctd2l0aC1icm8vCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMTIwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBhIHN0aWZmISIpOwovKiogU1NMIChTZWN1cmUgU29ja2V0cyBMYXllcikgLyBUTFMgKFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSkgKioqLwovKiAxMjAxOiByZXF1aXJlIHNhZmUgbmVnb3RpYXRpb24KICogQmxvY2tzIGNvbm5lY3Rpb25zIHRvIHNlcnZlcnMgdGhhdCBkb24ndCBzdXBwb3J0IFJGQyA1NzQ2IFsyXSBhcyB0aGV5J3JlIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gYQogKiBNaVRNIGF0dGFjayBbM10uIEEgc2VydmVyIHdpdGhvdXQgUkZDIDU3NDYgY2FuIGJlIHNhZmUgZnJvbSB0aGUgYXR0YWNrIGlmIGl0IGRpc2FibGVzIHJlbmVnb3RpYXRpb25zCiAqIGJ1dCB0aGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBicm93c2VyIGNhbid0IGtub3cgdGhhdC4gU2V0dGluZyB0aGlzIHByZWYgdG8gdHJ1ZSBpcyB0aGUgb25seSB3YXkgZm9yIHRoZQogKiBicm93c2VyIHRvIGVuc3VyZSB0aGVyZSB3aWxsIGJlIG5vIHVuc2FmZSByZW5lZ290aWF0aW9ucyBvbiB0aGUgY2hhbm5lbCBiZXR3ZWVuIHRoZSBicm93c2VyIGFuZCB0aGUgc2VydmVyCiAqIFtTRVRVUC1XRUJdIFNTTF9FUlJPUl9VTlNBRkVfTkVHT1RJQVRJT046IGlzIGl0IHdvcnRoIG92ZXJyaWRpbmcgdGhpcyBmb3IgdGhhdCBvbmUgc2l0ZT8KICogW1NUQVRTXSBTU0wgTGFicyAoTWF5IDIwMjQpIHJlcG9ydHMgb3ZlciA5OS43JSBvZiB0b3Agc2l0ZXMgaGF2ZSBzZWN1cmUgcmVuZWdvdGlhdGlvbiBbNF0KICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9TZWN1cml0eTpSZW5lZ290aWF0aW9uCiAqIFsyXSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzU3NDYKICogWzNdIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMDktMzU1NQogKiBbNF0gaHR0cHM6Ly93d3cuc3NsbGFicy5jb20vc3NsLXB1bHNlLyAqKiovCnVzZXJfcHJlZigic2VjdXJpdHkuc3NsLnJlcXVpcmVfc2FmZV9uZWdvdGlhdGlvbiIsIHRydWUpOwovKiAxMjA2OiBkaXNhYmxlIFRMUzEuMyAwLVJUVCAocm91bmQtdHJpcCB0aW1lKSBbRkY1MStdCiAqIFRoaXMgZGF0YSBpcyBub3QgZm9yd2FyZCBzZWNyZXQsIGFzIGl0IGlzIGVuY3J5cHRlZCBzb2xlbHkgdW5kZXIga2V5cyBkZXJpdmVkIHVzaW5nCiAqIHRoZSBvZmZlcmVkIFBTSy4gVGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgb2Ygbm9uLXJlcGxheSBiZXR3ZWVuIGNvbm5lY3Rpb25zCiAqIFsxXSBodHRwczovL2dpdGh1Yi5jb20vdGxzd2cvdGxzMTMtc3BlYy9pc3N1ZXMvMTAwMQogKiBbMl0gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkwMDEuaHRtbCNuYW1lLXJlcGxheS1hdHRhY2tzLXdpdGgtMC1ydHQKICogWzNdIGh0dHBzOi8vYmxvZy5jbG91ZGZsYXJlLmNvbS90bHMtMS0zLW92ZXJ2aWV3LWFuZC1xLWFuZC1hLyAqKiovCnVzZXJfcHJlZigic2VjdXJpdHkudGxzLmVuYWJsZV8wcnR0X2RhdGEiLCBmYWxzZSk7CgovKiogT0NTUCAoT25saW5lIENlcnRpZmljYXRlIFN0YXR1cyBQcm90b2NvbCkKICAgWzFdIGh0dHBzOi8vc2NvdHRoZWxtZS5jby51ay9yZXZvY2F0aW9uLWlzLWJyb2tlbi8KICAgWzJdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9zZWN1cml0eS8yMDEzLzA3LzI5L29jc3Atc3RhcGxpbmctaW4tZmlyZWZveC8KKioqLwovKiAxMjExOiBlbmZvcmNlIE9DU1AgZmV0Y2hpbmcgdG8gY29uZmlybSBjdXJyZW50IHZhbGlkaXR5IG9mIGNlcnRpZmljYXRlcwogKiAwPWRpc2FibGVkLCAxPWVuYWJsZWQgKGRlZmF1bHQpLCAyPWVuYWJsZWQgZm9yIEVWIGNlcnRpZmljYXRlcyBvbmx5CiAqIE9DU1AgKG5vbi1zdGFwbGVkKSBsZWFrcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2l0ZXMgeW91IHZpc2l0IHRvIHRoZSBDQSAoY2VydCBhdXRob3JpdHkpCiAqIEl0J3MgYSB0cmFkZS1vZmYgYmV0d2VlbiBzZWN1cml0eSAoY2hlY2tpbmcpIGFuZCBwcml2YWN5IChsZWFraW5nIGluZm8gdG8gdGhlIENBKQogKiBbTk9URV0gVGhpcyBwcmVmIG9ubHkgY29udHJvbHMgT0NTUCBmZXRjaGluZyBhbmQgZG9lcyBub3QgYWZmZWN0IE9DU1Agc3RhcGxpbmcKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5TZWN1cml0eT5DZXJ0aWZpY2F0ZXM+UXVlcnkgT0NTUCByZXNwb25kZXIgc2VydmVycy4uLgogKiBbMV0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT2NzcCAqKiovCnVzZXJfcHJlZigic2VjdXJpdHkuT0NTUC5lbmFibGVkIiwgMSk7IC8vIFtERUZBVUxUOiAxXQovKiAxMjEyOiBzZXQgT0NTUCBmZXRjaCBmYWlsdXJlcyAobm9uLXN0YXBsZWQsIHNlZSAxMjExKSB0byBoYXJkLWZhaWwKICogW1NFVFVQLVdFQl0gU0VDX0VSUk9SX09DU1BfU0VSVkVSX0VSUk9SIHwgU0VDX0VSUk9SX09DU1BfVU5BVVRIT1JJWkVEX1JFUVVFU1QKICogV2hlbiBhIENBIGNhbm5vdCBiZSByZWFjaGVkIHRvIHZhbGlkYXRlIGEgY2VydCwgRmlyZWZveCBqdXN0IGNvbnRpbnVlcyB0aGUgY29ubmVjdGlvbiAoPXNvZnQtZmFpbCkKICogU2V0dGluZyB0aGlzIHByZWYgdG8gdHJ1ZSB0ZWxscyBGaXJlZm94IHRvIGluc3RlYWQgdGVybWluYXRlIHRoZSBjb25uZWN0aW9uICg9aGFyZC1mYWlsKQogKiBJdCBpcyBwb2ludGxlc3MgdG8gc29mdC1mYWlsIHdoZW4gYW4gT0NTUCBmZXRjaCBmYWlsczogeW91IGNhbm5vdCBjb25maXJtIGEgY2VydCBpcyBzdGlsbCB2YWxpZCAoaXQKICogY291bGQgaGF2ZSBiZWVuIHJldm9rZWQpIGFuZC9vciB5b3UgY291bGQgYmUgdW5kZXIgYXR0YWNrIChlLmcuIG1hbGljaW91cyBibG9ja2luZyBvZiBPQ1NQIHNlcnZlcnMpCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAxMy8wNy8yOS9vY3NwLXN0YXBsaW5nLWluLWZpcmVmb3gvCiAqIFsyXSBodHRwczovL3d3dy5pbXBlcmlhbHZpb2xldC5vcmcvMjAxNC8wNC8xOS9yZXZjaGVja2luZy5odG1sCiAqIFszXSBodHRwczovL2xldHNlbmNyeXB0Lm9yZy8yMDI0LzEyLzA1L2VuZGluZy1vY3NwLyAqKiovCnVzZXJfcHJlZigic2VjdXJpdHkuT0NTUC5yZXF1aXJlIiwgdHJ1ZSk7CgovKiogQ0VSVFMgLyBIUEtQIChIVFRQIFB1YmxpYyBLZXkgUGlubmluZykgKioqLwovKiAxMjIzOiBlbmFibGUgc3RyaWN0IFBLUCAoUHVibGljIEtleSBQaW5uaW5nKQogKiAwPWRpc2FibGVkLCAxPWFsbG93IHVzZXIgTWlUTSAoZGVmYXVsdDsgc3VjaCBhcyB5b3VyIGFudGl2aXJ1cyksIDI9c3RyaWN0CiAqIFtTRVRVUC1XRUJdIE1PWklMTEFfUEtJWF9FUlJPUl9LRVlfUElOTklOR19GQUlMVVJFICoqKi8KdXNlcl9wcmVmKCJzZWN1cml0eS5jZXJ0X3Bpbm5pbmcuZW5mb3JjZW1lbnRfbGV2ZWwiLCAyKTsKLyogMTIyNDogZW5hYmxlIENSTGl0ZSBbRkY3MytdCiAqIDAgPSBkaXNhYmxlZAogKiAxID0gY29uc3VsdCBDUkxpdGUgYnV0IG9ubHkgY29sbGVjdCB0ZWxlbWV0cnkKICogMiA9IGNvbnN1bHQgQ1JMaXRlIGFuZCBlbmZvcmNlIGJvdGggIlJldm9rZWQiIGFuZCAiTm90IFJldm9rZWQiIHJlc3VsdHMKICogMyA9IGNvbnN1bHQgQ1JMaXRlIGFuZCBlbmZvcmNlICJOb3QgUmV2b2tlZCIgcmVzdWx0cywgYnV0IGRlZmVyIHRvIE9DU1AgZm9yICJSZXZva2VkIiAoZGVmYXVsdCkKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvYnVnbGlzdC5jZ2k/YnVnX2lkPTE0Mjk4MDAsMTY3MDk4NSwxNzUzMDcxCiAqIFsyXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvdGFnL2NybGl0ZS8gKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LnJlbW90ZV9zZXR0aW5ncy5jcmxpdGVfZmlsdGVycy5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlIEZGMTM3K10KdXNlcl9wcmVmKCJzZWN1cml0eS5wa2kuY3JsaXRlX21vZGUiLCAyKTsKCi8qKiBNSVhFRCBDT05URU5UICoqKi8KLyogMTI0MTogZGlzYWJsZSBpbnNlY3VyZSBwYXNzaXZlIGNvbnRlbnQgKHN1Y2ggYXMgaW1hZ2VzKSBvbiBodHRwcyBwYWdlcyAqKiovCiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkubWl4ZWRfY29udGVudC5ibG9ja19kaXNwbGF5X2NvbnRlbnQiLCB0cnVlKTsgLy8gRGVmZW5zZS1pbi1kZXB0aCAoc2VlIDEyNDQpCi8qIDEyNDQ6IGVuYWJsZSBIVFRQUy1Pbmx5IG1vZGUgaW4gYWxsIHdpbmRvd3MKICogV2hlbiB0aGUgdG9wLWxldmVsIGlzIEhUVFBTLCBpbnNlY3VyZSBzdWJyZXNvdXJjZXMgYXJlIGFsc28gdXBncmFkZWQgKHNpbGVudCBmYWlsKQogKiBbU0VUVElOR10gdG8gYWRkIHNpdGUgZXhjZXB0aW9uczogUGFkbG9jaz5IVFRQUy1Pbmx5IG1vZGU+T24gKGFmdGVyICJDb250aW51ZSB0byBIVFRQIFNpdGUiKQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkhUVFBTLU9ubHkgTW9kZSAoYW5kIG1hbmFnZSBleGNlcHRpb25zKQogKiBbVEVTVF0gaHR0cDovL2V4YW1wbGUuY29tIFt1cGdyYWRlXQogKiBbVEVTVF0gaHR0cDovL2h0dHBmb3JldmVyLmNvbS8gfCBodHRwOi8vaHR0cC5yaXAgW25vIHVwZ3JhZGVdICoqKi8KdXNlcl9wcmVmKCJkb20uc2VjdXJpdHkuaHR0cHNfb25seV9tb2RlIiwgdHJ1ZSk7IC8vIFtGRjc2K10KICAgLy8gdXNlcl9wcmVmKCJkb20uc2VjdXJpdHkuaHR0cHNfb25seV9tb2RlX3BibSIsIHRydWUpOyAvLyBbRkY4MCtdCi8qIDEyNDU6IGVuYWJsZSBIVFRQUy1Pbmx5IG1vZGUgZm9yIGxvY2FsIHJlc291cmNlcyBbRkY3NytdICoqKi8KICAgLy8gdXNlcl9wcmVmKCJkb20uc2VjdXJpdHkuaHR0cHNfb25seV9tb2RlLnVwZ3JhZGVfbG9jYWwiLCB0cnVlKTsKLyogMTI0NjogZGlzYWJsZSBIVFRQIGJhY2tncm91bmQgcmVxdWVzdHMgW0ZGODIrXQogKiBXaGVuIGF0dGVtcHRpbmcgdG8gdXBncmFkZSwgaWYgdGhlIHNlcnZlciBkb2Vzbid0IHJlc3BvbmQgd2l0aGluIDMgc2Vjb25kcywgRmlyZWZveCBzZW5kcwogKiBhIHRvcC1sZXZlbCBIVFRQIHJlcXVlc3Qgd2l0aG91dCBwYXRoIGluIG9yZGVyIHRvIGNoZWNrIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgSFRUUFMgb3Igbm90CiAqIFRoaXMgaXMgZG9uZSB0byBhdm9pZCB3YWl0aW5nIGZvciBhIHRpbWVvdXQgd2hpY2ggdGFrZXMgOTAgc2Vjb25kcwogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9idWdsaXN0LmNnaT9idWdfaWQ9MTY0MjM4NywxNjYwOTQ1ICoqKi8KdXNlcl9wcmVmKCJkb20uc2VjdXJpdHkuaHR0cHNfb25seV9tb2RlX3NlbmRfaHR0cF9iYWNrZ3JvdW5kX3JlcXVlc3QiLCBmYWxzZSk7CgovKiogVUkgKFVzZXIgSW50ZXJmYWNlKSAqKiovCi8qIDEyNzA6IGRpc3BsYXkgd2FybmluZyBvbiB0aGUgcGFkbG9jayBmb3IgImJyb2tlbiBzZWN1cml0eSIgKGlmIDEyMDEgaXMgZmFsc2UpCiAqIEJ1Zzogd2FybmluZyBwYWRsb2NrIG5vdCBpbmRpY2F0ZWQgZm9yIHN1YnJlc291cmNlcyBvbiBhIHNlY3VyZSBwYWdlISBbMl0KICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9TZWN1cml0eTpSZW5lZ290aWF0aW9uCiAqIFsyXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzEzNTM3MDUgKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LnNzbC50cmVhdF91bnNhZmVfbmVnb3RpYXRpb25fYXNfYnJva2VuIiwgdHJ1ZSk7Ci8qIDEyNzI6IGRpc3BsYXkgYWR2YW5jZWQgaW5mb3JtYXRpb24gb24gSW5zZWN1cmUgQ29ubmVjdGlvbiB3YXJuaW5nIHBhZ2VzCiAqIG9ubHkgd29ya3Mgd2hlbiBpdCdzIHBvc3NpYmxlIHRvIGFkZCBhbiBleGNlcHRpb24KICogaS5lLiBpdCBkb2Vzbid0IHdvcmsgZm9yIEhTVFMgZGlzY3JlcGFuY2llcyAoaHR0cHM6Ly9zdWJkb21haW4ucHJlbG9hZGVkLWhzdHMuYmFkc3NsLmNvbS8pCiAqIFtURVNUXSBodHRwczovL2V4cGlyZWQuYmFkc3NsLmNvbS8gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIueHVsLmVycm9yX3BhZ2VzLmV4cGVydF9iYWRfY2VydCIsIHRydWUpOwoKLyoqKiBbU0VDVElPTiAxNjAwXTogUkVGRVJFUlMKICAgICAgICAgICAgICAgICAgZnVsbCBVUkk6IGh0dHBzOi8vZXhhbXBsZS5jb206ODg4OC9mb28vYmFyLmh0bWw/aWQ9MTIzNAogICAgIHNjaGVtZStob3N0K3BvcnQrcGF0aDogaHR0cHM6Ly9leGFtcGxlLmNvbTo4ODg4L2Zvby9iYXIuaHRtbAogICAgICAgICAgc2NoZW1lK2hvc3QrcG9ydDogaHR0cHM6Ly9leGFtcGxlLmNvbTo4ODg4CiAgIFsxXSBodHRwczovL2ZlZWRpbmcuY2xvdWQuZ2Vlay5uei9wb3N0cy90d2Vha2luZy1yZWZlcnJlci1mb3ItcHJpdmFjeS1pbi1maXJlZm94LwoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjE2MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90IHJlc3RzIGluIHBlYWNlISIpOwovKiAxNjAyOiBjb250cm9sIHRoZSBhbW91bnQgb2YgY3Jvc3Mtb3JpZ2luIGluZm9ybWF0aW9uIHRvIHNlbmQgW0ZGNTIrXQogKiAwPXNlbmQgZnVsbCBVUkkgKGRlZmF1bHQpLCAxPXNjaGVtZStob3N0K3BvcnQrcGF0aCwgMj1zY2hlbWUraG9zdCtwb3J0ICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAucmVmZXJlci5YT3JpZ2luVHJpbW1pbmdQb2xpY3kiLCAyKTsKCi8qKiogW1NFQ1RJT04gMTcwMF06IENPTlRBSU5FUlMgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIxNzAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGJpdCB0aGUgZHVzdCEiKTsKLyogMTcwMTogZW5hYmxlIENvbnRhaW5lciBUYWJzIGFuZCBpdHMgVUkgc2V0dGluZyBbRkY1MCtdCiAqIFtTRVRUSU5HXSBHZW5lcmFsPlRhYnM+RW5hYmxlIENvbnRhaW5lciBUYWJzCiAqIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9TZWN1cml0eS9Db250ZXh0dWFsX0lkZW50aXR5X1Byb2plY3QvQ29udGFpbmVycyAqKiovCnVzZXJfcHJlZigicHJpdmFjeS51c2VyQ29udGV4dC5lbmFibGVkIiwgdHJ1ZSk7CnVzZXJfcHJlZigicHJpdmFjeS51c2VyQ29udGV4dC51aS5lbmFibGVkIiwgdHJ1ZSk7Ci8qIDE3MDI6IHNldCBiZWhhdmlvciBvbiAiKyBUYWIiIGJ1dHRvbiB0byBkaXNwbGF5IGNvbnRhaW5lciBtZW51IG9uIGxlZnQgY2xpY2sgW0ZGNzQrXQogKiBbTk9URV0gVGhlIG1lbnUgaXMgYWx3YXlzIHNob3duIG9uIGxvbmcgcHJlc3MgYW5kIHJpZ2h0IGNsaWNrCiAqIFtTRVRUSU5HXSBHZW5lcmFsPlRhYnM+RW5hYmxlIENvbnRhaW5lciBUYWJzPlNldHRpbmdzPlNlbGVjdCBhIGNvbnRhaW5lciBmb3IgZWFjaCBuZXcgdGFiICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnVzZXJDb250ZXh0Lm5ld1RhYkNvbnRhaW5lck9uTGVmdENsaWNrLmVuYWJsZWQiLCB0cnVlKTsKLyogMTcwMzogc2V0IGV4dGVybmFsIGxpbmtzIHRvIG9wZW4gaW4gc2l0ZS1zcGVjaWZpYyBjb250YWluZXJzIFtGRjEyMytdCiAqIFtTRVRVUC1XRUJdIERlcGVuZGluZyBvbiB5b3VyIGNvbnRhaW5lciBleHRlbnNpb24ocykgYW5kIHRoZWlyIHNldHRpbmdzCiAqIHRydWU9RmlyZWZveCB3aWxsIG5vdCBjaG9vc2UgYSBjb250YWluZXIgKHNvIHlvdXIgZXh0ZW5zaW9uIGNhbikKICogZmFsc2U9RmlyZWZveCB3aWxsIGNob29zZSB0aGUgY29udGFpbmVyL25vLWNvbnRhaW5lciAoZGVmYXVsdCkKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTg3NDU5OSAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5saW5rLmZvcmNlX2RlZmF1bHRfdXNlcl9jb250ZXh0X2lkX2Zvcl9leHRlcm5hbF9vcGVucyIsIHRydWUpOwoKLyoqKiBbU0VDVElPTiAyMDAwXTogUExVR0lOUyAvIE1FRElBIC8gV0VCUlRDICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMjAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBzbnVmZmVkIGl0ISIpOwovKiAyMDAyOiBmb3JjZSBXZWJSVEMgaW5zaWRlIHRoZSBwcm94eSBbRkY3MCtdICoqKi8KdXNlcl9wcmVmKCJtZWRpYS5wZWVyY29ubmVjdGlvbi5pY2UucHJveHlfb25seV9pZl9iZWhpbmRfcHJveHkiLCB0cnVlKTsKLyogMjAwMzogZm9yY2UgYSBzaW5nbGUgbmV0d29yayBpbnRlcmZhY2UgZm9yIElDRSBjYW5kaWRhdGVzIGdlbmVyYXRpb24gW0ZGNDIrXQogKiBXaGVuIHVzaW5nIGEgc3lzdGVtLXdpZGUgcHJveHksIGl0IHVzZXMgdGhlIHByb3h5IGludGVyZmFjZQogKiBbMV0gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1JUQ0ljZUNhbmRpZGF0ZQogKiBbMl0gaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL01lZGlhL1dlYlJUQy9Qcml2YWN5ICoqKi8KdXNlcl9wcmVmKCJtZWRpYS5wZWVyY29ubmVjdGlvbi5pY2UuZGVmYXVsdF9hZGRyZXNzX29ubHkiLCB0cnVlKTsKLyogMjAwNDogZm9yY2UgZXhjbHVzaW9uIG9mIHByaXZhdGUgSVBzIGZyb20gSUNFIGNhbmRpZGF0ZXMgW0ZGNTErXQogKiBbU0VUVVAtSEFSREVOXSBUaGlzIHdpbGwgcHJvdGVjdCB5b3VyIHByaXZhdGUgSVAgZXZlbiBpbiBUUlVTVEVEIHNjZW5hcmlvcyBhZnRlciB5b3UKICogZ3JhbnQgZGV2aWNlIGFjY2VzcywgYnV0IG9mdGVuIHJlc3VsdHMgaW4gYnJlYWthZ2Ugb24gdmlkZW8tY29uZmVyZW5jaW5nIHBsYXRmb3JtcyAqKiovCiAgIC8vIHVzZXJfcHJlZigibWVkaWEucGVlcmNvbm5lY3Rpb24uaWNlLm5vX2hvc3QiLCB0cnVlKTsKLyogMjAyMDogZGlzYWJsZSBHTVAgKEdlY2tvIE1lZGlhIFBsdWdpbnMpCiAqIFsxXSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvR2Vja29NZWRpYVBsdWdpbnMgKioqLwogICAvLyB1c2VyX3ByZWYoIm1lZGlhLmdtcC1wcm92aWRlci5lbmFibGVkIiwgZmFsc2UpOwoKLyoqKiBbU0VDVElPTiAyNDAwXTogRE9NIChET0NVTUVOVCBPQkpFQ1QgTU9ERUwpICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMjQwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBraWNrZWQgdGhlIGJ1Y2tldCEiKTsKLyogMjQwMjogcHJldmVudCBzY3JpcHRzIGZyb20gbW92aW5nIGFuZCByZXNpemluZyBvcGVuIHdpbmRvd3MgKioqLwp1c2VyX3ByZWYoImRvbS5kaXNhYmxlX3dpbmRvd19tb3ZlX3Jlc2l6ZSIsIHRydWUpOwoKLyoqKiBbU0VDVElPTiAyNjAwXTogTUlTQ0VMTEFORU9VUyAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjI2MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgcnVuIGRvd24gdGhlIGN1cnRhaW4hIik7Ci8qIDI2MDM6IHJlbW92ZSB0ZW1wIGZpbGVzIG9wZW5lZCBmcm9tIG5vbi1QQiB3aW5kb3dzIHdpdGggYW4gZXh0ZXJuYWwgYXBwbGljYXRpb24KICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvYnVnbGlzdC5jZ2k/YnVnX2lkPTMwMjQzMywxNzM4NTc0ICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmRvd25sb2FkLnN0YXJ0X2Rvd25sb2Fkc19pbl90bXBfZGlyIiwgdHJ1ZSk7IC8vIFtGRjEwMitdCnVzZXJfcHJlZigiYnJvd3Nlci5oZWxwZXJBcHBzLmRlbGV0ZVRlbXBGaWxlT25FeGl0IiwgdHJ1ZSk7Ci8qIDI2MDY6IGRpc2FibGUgVUlUb3VyIGJhY2tlbmQgc28gdGhlcmUgaXMgbm8gY2hhbmNlIHRoYXQgYSByZW1vdGUgcGFnZSBjYW4gdXNlIGl0ICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnVpdG91ci5lbmFibGVkIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudWl0b3VyLnVybCIsICIiKTsgLy8gRGVmZW5zZS1pbi1kZXB0aAovKiAyNjA4OiByZXNldCByZW1vdGUgZGVidWdnaW5nIHRvIGRpc2FibGVkCiAqIFsxXSBodHRwczovL2dpdGxhYi50b3Jwcm9qZWN0Lm9yZy90cG8vYXBwbGljYXRpb25zL3Rvci1icm93c2VyLy0vaXNzdWVzLzE2MjIyICoqKi8KdXNlcl9wcmVmKCJkZXZ0b29scy5kZWJ1Z2dlci5yZW1vdGUtZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiAyNjE1OiBkaXNhYmxlIHdlYnNpdGVzIG92ZXJyaWRpbmcgRmlyZWZveCdzIGtleWJvYXJkIHNob3J0Y3V0cyBbRkY1OCtdCiAqIDAgKGRlZmF1bHQpIG9yIDE9YWxsb3csIDI9YmxvY2sKICogW1NFVFRJTkddIHRvIGFkZCBzaXRlIGV4Y2VwdGlvbnM6IEN0cmwrST5QZXJtaXNzaW9ucz5PdmVycmlkZSBLZXlib2FyZCBTaG9ydGN1dHMgKioqLwogICAvLyB1c2VyX3ByZWYoInBlcm1pc3Npb25zLmRlZmF1bHQuc2hvcnRjdXRzIiwgMik7Ci8qIDI2MTY6IHJlbW92ZSBzcGVjaWFsIHBlcm1pc3Npb25zIGZvciBjZXJ0YWluIG1vemlsbGEgZG9tYWlucyBbRkYzNStdCiAqIFsxXSByZXNvdXJjZTovL2FwcC9kZWZhdWx0cy9wZXJtaXNzaW9ucyAqKiovCnVzZXJfcHJlZigicGVybWlzc2lvbnMubWFuYWdlci5kZWZhdWx0c1VybCIsICIiKTsKLyogMjYxOTogdXNlIFB1bnljb2RlIGluIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyB0byBlbGltaW5hdGUgcG9zc2libGUgc3Bvb2ZpbmcKICogW1NFVFVQLVdFQl0gTWlnaHQgYmUgdW5kZXNpcmFibGUgZm9yIG5vbi1sYXRpbiBhbHBoYWJldCB1c2VycyBzaW5jZSBsZWdpdGltYXRlIElETidzIGFyZSBhbHNvIHB1bnljb2RlZAogKiBbVEVTVF0gaHR0cHM6Ly93d3cueG4tLTgwYWs2YWE5MmUuY29tLyAod3d3LmFwcGxlLmNvbSkKICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9JRE5fRGlzcGxheV9BbGdvcml0aG0KICogWzJdIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lETl9ob21vZ3JhcGhfYXR0YWNrCiAqIFszXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9cHVueWNvZGUrZmlyZWZveAogKiBbNF0gaHR0cHM6Ly93d3cueHVkb25nei5jb20vYmxvZy8yMDE3L2lkbi1waGlzaGluZy8gKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsuSUROX3Nob3dfcHVueWNvZGUiLCB0cnVlKTsKLyogMjYyMDogZW5mb3JjZSBQREZKUywgZGlzYWJsZSBQREZKUyBzY3JpcHRpbmcKICogVGhpcyBzZXR0aW5nIGNvbnRyb2xzIGlmIHRoZSBvcHRpb24gIkRpc3BsYXkgaW4gRmlyZWZveCIgaXMgYXZhaWxhYmxlIGluIHRoZSBzZXR0aW5nIGJlbG93CiAqICAgYW5kIGJ5IGVmZmVjdCBjb250cm9scyB3aGV0aGVyIFBERnMgYXJlIGhhbmRsZWQgaW4tYnJvd3NlciBvciBleHRlcm5hbGx5ICgiQXNrIiBvciAiT3BlbiBXaXRoIikKICogW1dIWV0gcGRmanMgaXMgbGlnaHR3ZWlnaHQsIG9wZW4gc291cmNlLCBhbmQgc2VjdXJlOiB0aGUgbGFzdCBleHBsb2l0IHdhcyBKdW5lIDIwMTUgWzFdCiAqICAgSXQgZG9lc24ndCBicmVhayAic3RhdGUgc2VwYXJhdGlvbiIgb2YgYnJvd3NlciBjb250ZW50IChieSBub3Qgc2hhcmluZyB3aXRoIE9TLCBpbmRlcGVuZGVudCBhcHBzKS4KICogICBJdCBtYWludGFpbnMgZGlzayBhdm9pZGFuY2UgYW5kIGFwcGxpY2F0aW9uIGRhdGEgaXNvbGF0aW9uLiBJdCdzIGNvbnZlbmllbnQuIFlvdSBjYW4gc3RpbGwgc2F2ZSB0byBkaXNrLgogKiBbTk9URV0gSlMgY2FuIHN0aWxsIGZvcmNlIGEgcGRmIHRvIG9wZW4gaW4tYnJvd3NlciBieSBidW5kbGluZyBpdHMgb3duIGNvZGUKICogW1NFVFVQLUNIUk9NRV0gWW91IG1heSBwcmVmZXIgYSBkaWZmZXJlbnQgcGRmIHJlYWRlciBmb3Igc2VjdXJpdHkvd29ya2Zsb3cgcmVhc29ucwogKiBbU0VUVElOR10gR2VuZXJhbD5BcHBsaWNhdGlvbnM+UG9ydGFibGUgRG9jdW1lbnQgRm9ybWF0IChQREYpCiAqIFsxXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9cGRmLmpzK2ZpcmVmb3ggKioqLwp1c2VyX3ByZWYoInBkZmpzLmRpc2FibGVkIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCnVzZXJfcHJlZigicGRmanMuZW5hYmxlU2NyaXB0aW5nIiwgZmFsc2UpOyAvLyBbRkY4NitdCi8qIDI2MjQ6IGRpc2FibGUgbWlkZGxlIGNsaWNrIG9uIG5ldyB0YWIgYnV0dG9uIG9wZW5pbmcgVVJMcyBvciBzZWFyY2hlcyB1c2luZyBjbGlwYm9hcmQgW0ZGMTE1K10gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIudGFicy5zZWFyY2hjbGlwYm9hcmRmb3IubWlkZGxlY2xpY2siLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZSBOT04tTElOVVhdCi8qIDI2MzA6IGRpc2FibGUgY29udGVudCBhbmFseXNpcyBieSBETFAgKERhdGEgTG9zcyBQcmV2ZW50aW9uKSBhZ2VudHMKICogRExQIGFnZW50cyBhcmUgYmFja2dyb3VuZCBwcm9jZXNzZXMgb24gbWFuYWdlZCBjb21wdXRlcnMgdGhhdCBhbGxvdyBlbnRlcnByaXNlcyB0byBtb25pdG9yIGxvY2FsbHkgcnVubmluZwogKiBhcHBsaWNhdGlvbnMgZm9yIGRhdGEgZXhmaWx0cmF0aW9uIGV2ZW50cywgd2hpY2ggdGhleSBjYW4gYWxsb3cvYmxvY2sgYmFzZWQgb24gY3VzdG9tZXIgZGVmaW5lZCBETFAgcG9saWNpZXMuCiAqIDA9QmxvY2sgYWxsIHJlcXVlc3RzLCAxPVdhcm4gb24gYWxsIHJlcXVlc3RzICh3aGljaCBsZXRzIHRoZSB1c2VyIGRlY2lkZSksIDI9QWxsb3cgYWxsIHJlcXVlc3RzCiAqIFsxXSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY29udGVudF9hbmFseXNpc19zZGsgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuY29udGVudGFuYWx5c2lzLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjEyMStdIFtERUZBVUxUOiBmYWxzZV0KdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRhbmFseXNpcy5kZWZhdWx0X3Jlc3VsdCIsIDApOyAvLyBbRkYxMjcrXSBbREVGQVVMVDogMF0KLyogMjYzNTogZGlzYWJsZSByZWZlcnJlciBhbmQgc3RvcmFnZSBhY2Nlc3MgZm9yIHJlc291cmNlcyBpbmplY3RlZCBieSBjb250ZW50IHNjcmlwdHMgW0ZGMTM5K10gKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuYW50aXRyYWNraW5nLmlzb2xhdGVDb250ZW50U2NyaXB0UmVzb3VyY2VzIiwgdHJ1ZSk7Ci8qIDI2NDA6IGRpc2FibGUgQ1NQIExldmVsIDIgUmVwb3J0aW5nIFtGRjE0MCtdICoqKi8KdXNlcl9wcmVmKCJzZWN1cml0eS5jc3AucmVwb3J0aW5nLmVuYWJsZWQiLCBmYWxzZSk7CgovKiogRE9XTkxPQURTICoqKi8KLyogMjY1MTogZW5hYmxlIHVzZXIgaW50ZXJhY3Rpb24gZm9yIHNlY3VyaXR5IGJ5IGFsd2F5cyBhc2tpbmcgd2hlcmUgdG8gZG93bmxvYWQKICogW1NFVFVQLUNIUk9NRV0gT24gQW5kcm9pZCB0aGlzIGJsb2NrcyBsb25ndGFwcGluZyBhbmQgc2F2aW5nIGltYWdlcwogKiBbU0VUVElOR10gR2VuZXJhbD5Eb3dubG9hZHM+QWx3YXlzIGFzayB5b3Ugd2hlcmUgdG8gc2F2ZSBmaWxlcyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5kb3dubG9hZC51c2VEb3dubG9hZERpciIsIGZhbHNlKTsKLyogMjY1MjogZGlzYWJsZSBkb3dubG9hZHMgcGFuZWwgb3BlbmluZyBvbiBldmVyeSBkb3dubG9hZCBbRkY5NitdICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmRvd25sb2FkLmFsd2F5c09wZW5QYW5lbCIsIGZhbHNlKTsKLyogMjY1MzogZGlzYWJsZSBhZGRpbmcgZG93bmxvYWRzIHRvIHRoZSBzeXN0ZW0ncyAicmVjZW50IGRvY3VtZW50cyIgbGlzdCAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5kb3dubG9hZC5tYW5hZ2VyLmFkZFRvUmVjZW50RG9jcyIsIGZhbHNlKTsKLyogMjY1NDogZW5hYmxlIHVzZXIgaW50ZXJhY3Rpb24gZm9yIHNlY3VyaXR5IGJ5IGFsd2F5cyBhc2tpbmcgaG93IHRvIGhhbmRsZSBuZXcgbWltZXR5cGVzIFtGRjEwMStdCiAqIFtTRVRUSU5HXSBHZW5lcmFsPkZpbGVzIGFuZCBBcHBsaWNhdGlvbnM+V2hhdCBzaG91bGQgRmlyZWZveCBkbyB3aXRoIG90aGVyIGZpbGVzICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmRvd25sb2FkLmFsd2F5c19hc2tfYmVmb3JlX2hhbmRsaW5nX25ld190eXBlcyIsIHRydWUpOwoKLyoqIEVYVEVOU0lPTlMgKioqLwovKiAyNjYwOiBsaW1pdCBhbGxvd2VkIGV4dGVuc2lvbiBkaXJlY3RvcmllcwogKiAxPXByb2ZpbGUsIDI9dXNlciwgND1hcHBsaWNhdGlvbiwgOD1zeXN0ZW0sIDE2PXRlbXBvcmFyeSwgMzE9YWxsCiAqIFRoZSBwcmVmIHZhbHVlIHJlcHJlc2VudHMgdGhlIHN1bTogZS5nLiA1IHdvdWxkIGJlIHByb2ZpbGUgYW5kIGFwcGxpY2F0aW9uIGRpcmVjdG9yaWVzCiAqIFtTRVRVUC1DSFJPTUVdIEJyZWFrcyB1c2FnZSBvZiBmaWxlcyB3aGljaCBhcmUgaW5zdGFsbGVkIG91dHNpZGUgYWxsb3dlZCBkaXJlY3RvcmllcwogKiBbMV0gaHR0cHM6Ly9hcmNoaXZlLmlzL0RZakFNICoqKi8KdXNlcl9wcmVmKCJleHRlbnNpb25zLmVuYWJsZWRTY29wZXMiLCA1KTsgLy8gW0hJRERFTiBQUkVGXQogICAvLyB1c2VyX3ByZWYoImV4dGVuc2lvbnMuYXV0b0Rpc2FibGVTY29wZXMiLCAxNSk7IC8vIFtERUZBVUxUOiAxNV0KLyogMjY2MTogZGlzYWJsZSBieXBhc3NpbmcgM3JkIHBhcnR5IGV4dGVuc2lvbiBpbnN0YWxsIHByb21wdHMgW0ZGODIrXQogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9idWdsaXN0LmNnaT9idWdfaWQ9MTY1OTUzMCwxNjgxMzMxICoqKi8KdXNlcl9wcmVmKCJleHRlbnNpb25zLnBvc3REb3dubG9hZFRoaXJkUGFydHlQcm9tcHQiLCBmYWxzZSk7Ci8qIDI2NjI6IGRpc2FibGUgd2ViZXh0ZW5zaW9uIHJlc3RyaWN0aW9ucyBvbiBjZXJ0YWluIG1vemlsbGEgZG9tYWlucyAoeW91IGFsc28gbmVlZCA0NTAzKSBbRkY2MCtdCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL2J1Z2xpc3QuY2dpP2J1Z19pZD0xMzg0MzMwLDE0MDY3OTUsMTQxNTY0NCwxNDUzOTg4ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJleHRlbnNpb25zLndlYmV4dGVuc2lvbnMucmVzdHJpY3RlZERvbWFpbnMiLCAiIik7CgovKioqIFtTRUNUSU9OIDI3MDBdOiBFVFAgKEVOSEFOQ0VEIFRSQUNLSU5HIFBST1RFQ1RJT04pICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMjcwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBqb2luZWQgdGhlIGJsZWVkaW4nIGNob2lyIGludmlzaWJsZSEiKTsKLyogMjcwMTogZW5hYmxlIEVUUCBTdHJpY3QgTW9kZSBbRkY4NitdCiAqIEVUUCBTdHJpY3QgTW9kZSBlbmFibGVzIFRvdGFsIENvb2tpZSBQcm90ZWN0aW9uIChUQ1ApCiAqIFtOT1RFXSBBZGRpbmcgc2l0ZSBleGNlcHRpb25zIGRpc2FibGVzIGFsbCBFVFAgcHJvdGVjdGlvbnMgZm9yIHRoYXQgc2l0ZSBhbmQgaW5jcmVhc2VzIHRoZSByaXNrIG9mCiAqIGNyb3NzLXNpdGUgc3RhdGUgdHJhY2tpbmcgZS5nLiBleGNlcHRpb25zIGZvciBTaXRlQSBhbmQgU2l0ZUIgbWVhbnMgUGFydHlDIG9uIGJvdGggc2l0ZXMgaXMgc2hhcmVkCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAyMS8wMi8yMy90b3RhbC1jb29raWUtcHJvdGVjdGlvbi8KICogW1NFVFRJTkddIHRvIGFkZCBzaXRlIGV4Y2VwdGlvbnM6IFVybGJhcj5FVFAgU2hpZWxkCiAqIFtTRVRUSU5HXSB0byBtYW5hZ2Ugc2l0ZSBleGNlcHRpb25zOiBPcHRpb25zPlByaXZhY3kgJiBTZWN1cml0eT5FbmhhbmNlZCBUcmFja2luZyBQcm90ZWN0aW9uPk1hbmFnZSBFeGNlcHRpb25zICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRibG9ja2luZy5jYXRlZ29yeSIsICJzdHJpY3QiKTsgLy8gW0hJRERFTiBQUkVGXQovKiAyNzAyOiBkaXNhYmxlIEVUUCB3ZWIgY29tcGF0IGZlYXR1cmVzIFtGRjkzK10KICogW1NFVFVQLUhBUkRFTl0gSW5jbHVkZXMgc2tpcCBsaXN0cywgaGV1cmlzdGljcyAoU21hcnRCbG9jaykgYW5kIGF1dG9tYXRpYyBncmFudHMKICogT3BlbmVyIGFuZCByZWRpcmVjdCBoZXVyaXN0aWNzIGFyZSBncmFudGVkIGZvciAzMCBkYXlzLCBzZWUgWzNdCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAyMS8wNy8xMy9zbWFydGJsb2NrLXYyLwogKiBbMl0gaHR0cHM6Ly9oZy5tb3ppbGxhLm9yZy9tb3ppbGxhLWNlbnRyYWwvcmV2L2U1NDgzZmQ0NjlhYiNsNC4xMgogKiBbM10gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvUHJpdmFjeS9TdGF0ZV9QYXJ0aXRpb25pbmcjc3RvcmFnZV9hY2Nlc3NfaGV1cmlzdGljcyAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5hbnRpdHJhY2tpbmcuZW5hYmxlV2ViY29tcGF0IiwgZmFsc2UpOwoKLyoqKiBbU0VDVElPTiAyODAwXTogU0hVVERPV04gJiBTQU5JVElaSU5HCiAgIFdlIGVuYWJsZSBzYW5pdGl6ZU9uU2h1dGRvd24gdG8gaGVscCBwcmV2ZW50IDFzdCBwYXJ0eSB3ZWJzaXRlIHRyYWNraW5nIGFjcm9zcyBzZXNzaW9ucy4KICAgV2UgY29uc2lkZXIgaGlzdG9yeS9kb3dubG9hZHMsIHdoaWNoIGFyZSBub3QgYWNjZXNzaWJsZSB0byB3ZWJzaXRlcywgYXMgb3J0aG9nb25hbCBhbmQgZXhlbXB0IHRoZXNlCgogICBbU0VUVVAtSEFSREVOXSB0byBjbGVhciBhbGwgaGlzdG9yeS9kb3dubG9hZHMgb24gY2xvc2UsIGFkZCB0aGUgYXBwcm9wcmlhdGUgb3ZlcnJpZGVzIGZyb20gMjgwMCdzCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMjgwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBibGVlZGluJyBkZW1pc2VkISIpOwovKiAyODEwOiBlbmFibGUgRmlyZWZveCB0byBjbGVhciBpdGVtcyBvbiBzaHV0ZG93bgogKiBbTk9URV0gSW4gRkYxMjkrIGNsZWFyaW5nICJzaXRlU2V0dGluZ3MiIG9uIHNodXRkb3duICgyODExKyksIG9yIG1hbnVhbGx5IHZpYSBzaXRlIGRhdGEgKDI4MjArKSBhbmQKICogdmlhIGhpc3RvcnkgKDI4MzApLCB3aWxsIG5vIGxvbmdlciByZW1vdmUgc2FuaXRpemUgb24gc2h1dGRvd24gImNvb2tpZSBhbmQgc2l0ZSBkYXRhIiBzaXRlIGV4Y2VwdGlvbnMgKDI4MTUpCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+SGlzdG9yeT5DdXN0b20gU2V0dGluZ3M+Q2xlYXIgaGlzdG9yeSB3aGVuIEZpcmVmb3ggY2xvc2VzIHwgU2V0dGluZ3MgKioqLwp1c2VyX3ByZWYoInByaXZhY3kuc2FuaXRpemUuc2FuaXRpemVPblNodXRkb3duIiwgdHJ1ZSk7CgovKiogU0FOSVRJWkUgT04gU0hVVERPV046IElHTk9SRVMgIkFMTE9XIiBTSVRFIEVYQ0VQVElPTlMgKioqLwovKiAyODExOiBzZXQvZW5mb3JjZSBjbGVhck9uU2h1dGRvd24gaXRlbXMgKGlmIDI4MTAgaXMgdHJ1ZSkgW1NFVFVQLUNIUk9NRV0gW0ZGMTI4K10gKioqLwp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duX3YyLmNhY2hlIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duX3YyLmhpc3RvcnlGb3JtRGF0YUFuZERvd25sb2FkcyIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IHRydWVdCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd25fdjIuc2l0ZVNldHRpbmdzIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCi8qIDI4MTI6IHNldC9lbmZvcmNlIGNsZWFyT25TaHV0ZG93biBpdGVtcyBbRkYxMzYrXSAqKiovCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd25fdjIuYnJvd3NpbmdIaXN0b3J5QW5kRG93bmxvYWRzIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogdHJ1ZV0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bl92Mi5kb3dubG9hZHMiLCBmYWxzZSk7IC8vIFtISURERU5dCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd25fdjIuZm9ybWRhdGEiLCB0cnVlKTsKLyogMjgxMzogc2V0IFNlc3Npb24gUmVzdG9yZSB0byBjbGVhciBvbiBzaHV0ZG93biAoaWYgMjgxMCBpcyB0cnVlKSBbRkYzNCtdCiAqIFtOT1RFXSBOb3QgbmVlZGVkIGlmIFNlc3Npb24gUmVzdG9yZSBpcyBub3QgdXNlZCAoMDEwMikgb3IgaXQgaXMgYWxyZWFkeSBjbGVhcmVkIHdpdGggaGlzdG9yeSAoMjgxMSspCiAqIFtOT1RFXSBJZiB0cnVlLCB0aGlzIHByZXZlbnRzIHJlc3VtaW5nIGZyb20gY3Jhc2hlcyAoYWxzbyBzZWUgNTAwOCkgKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duLm9wZW5XaW5kb3dzIiwgdHJ1ZSk7CgovKiogU0FOSVRJWkUgT04gU0hVVERPV046IFJFU1BFQ1RTICJBTExPVyIgU0lURSBFWENFUFRJT05TICoqKi8KLyogMjgxNTogc2V0ICJDb29raWVzIiBhbmQgIlNpdGUgRGF0YSIgdG8gY2xlYXIgb24gc2h1dGRvd24gKGlmIDI4MTAgaXMgdHJ1ZSkgW1NFVFVQLUNIUk9NRV0gW0ZGMTI4K10KICogW05PVEVdIEV4Y2VwdGlvbnM6IEZvciBjcm9zcy1kb21haW4gbG9naW5zLCBhZGQgZXhjZXB0aW9ucyBmb3IgYm90aCBzaXRlcwogKiBlLmcuIGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tIChzaXRlKSArIGh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbSAoc2luZ2xlIHNpZ24gb24pCiAqIFtXQVJOSU5HXSBCZSBzZWxlY3RpdmUgd2l0aCB3aGF0IHNpdGVzIHlvdSAiQWxsb3ciLCBhcyB0aGV5IGFsc28gZGlzYWJsZSBwYXJ0aXRpb25pbmcgKDE3NjcyNzEpCiAqIFtTRVRUSU5HXSB0byBhZGQgc2l0ZSBleGNlcHRpb25zOiBDdHJsK0k+UGVybWlzc2lvbnM+Q29va2llcz5BbGxvdyAod2hlbiBvbiB0aGUgd2Vic2l0ZSBpbiBxdWVzdGlvbikKICogW1NFVFRJTkddIHRvIG1hbmFnZSBzaXRlIGV4Y2VwdGlvbnM6IE9wdGlvbnM+UHJpdmFjeSAmIFNlY3VyaXR5PlBlcm1pc3Npb25zPlNldHRpbmdzICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bl92Mi5jb29raWVzQW5kU3RvcmFnZSIsIHRydWUpOwoKLyoqIFNBTklUSVpFIFNJVEUgREFUQTogSUdOT1JFUyAiQUxMT1ciIFNJVEUgRVhDRVBUSU9OUyAqKiovCi8qIDI4MjA6IHNldCBtYW51YWwgIkNsZWFyIERhdGEiIGl0ZW1zIFtTRVRVUC1DSFJPTUVdIFtGRjEyOCtdCiAqIEZpcmVmb3ggcmVtZW1iZXJzIHlvdXIgbGFzdCBjaG9pY2VzLiBUaGlzIHdpbGwgcmVzZXQgdGhlbSB3aGVuIHlvdSBzdGFydCBGaXJlZm94CiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+QnJvd3NlciBQcml2YWN5PkNvb2tpZXMgYW5kIFNpdGUgRGF0YT5DbGVhciBEYXRhICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyU2l0ZURhdGEuY2FjaGUiLCB0cnVlKTsKdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyU2l0ZURhdGEuY29va2llc0FuZFN0b3JhZ2UiLCBmYWxzZSk7IC8vIGtlZXAgZmFsc2UgdW50aWwgaXQgcmVzcGVjdHMgImFsbG93IiBzaXRlIGV4Y2VwdGlvbnMKdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyU2l0ZURhdGEuaGlzdG9yeUZvcm1EYXRhQW5kRG93bmxvYWRzIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJTaXRlRGF0YS5zaXRlU2V0dGluZ3MiLCBmYWxzZSk7Ci8qIDI4MjE6IHNldCBtYW51YWwgIkNsZWFyIERhdGEiIGl0ZW1zIFtGRjEzNitdICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyU2l0ZURhdGEuYnJvd3NpbmdIaXN0b3J5QW5kRG93bmxvYWRzIiwgZmFsc2UpOwp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJTaXRlRGF0YS5mb3JtZGF0YSIsIHRydWUpOwoKLyoqIFNBTklUSVpFIEhJU1RPUlk6IElHTk9SRVMgIkFMTE9XIiBTSVRFIEVYQ0VQVElPTlMgKioqLwovKiAyODMwOiBzZXQgbWFudWFsICJDbGVhciBIaXN0b3J5IiBpdGVtcywgYWxzbyB2aWEgQ3RybC1TaGlmdC1EZWwgW1NFVFVQLUNIUk9NRV0gW0ZGMTI4K10KICogRmlyZWZveCByZW1lbWJlcnMgeW91ciBsYXN0IGNob2ljZXMuIFRoaXMgd2lsbCByZXNldCB0aGVtIHdoZW4geW91IHN0YXJ0IEZpcmVmb3gKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5IaXN0b3J5PkN1c3RvbSBTZXR0aW5ncz5DbGVhciBIaXN0b3J5ICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFySGlzdG9yeS5jYWNoZSIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFySGlzdG9yeS5jb29raWVzQW5kU3RvcmFnZSIsIGZhbHNlKTsKdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFySGlzdG9yeS5oaXN0b3J5Rm9ybURhdGFBbmREb3dubG9hZHMiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiB0cnVlXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJIaXN0b3J5LnNpdGVTZXR0aW5ncyIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiAyODMxOiBzZXQgbWFudWFsICJDbGVhciBIaXN0b3J5IiBpdGVtcyBbRkYxMzYrXSAqKiovCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhckhpc3RvcnkuYnJvd3NpbmdIaXN0b3J5QW5kRG93bmxvYWRzIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogdHJ1ZV0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFySGlzdG9yeS5mb3JtZGF0YSIsIHRydWUpOwoKLyoqIFNBTklUSVpFIE1BTlVBTDogVElNRVJBTkdFICoqKi8KLyogMjg0MDogc2V0ICJUaW1lIHJhbmdlIHRvIGNsZWFyIiBmb3IgIkNsZWFyIERhdGEiICgyODIwKykgYW5kICJDbGVhciBIaXN0b3J5IiAoMjgzMCspCiAqIEZpcmVmb3ggcmVtZW1iZXJzIHlvdXIgbGFzdCBjaG9pY2UuIFRoaXMgd2lsbCByZXNldCB0aGUgdmFsdWUgd2hlbiB5b3Ugc3RhcnQgRmlyZWZveAogKiAwPWV2ZXJ5dGhpbmcsIDE9bGFzdCBob3VyLCAyPWxhc3QgdHdvIGhvdXJzLCAzPWxhc3QgZm91ciBob3VycywgND10b2RheQogKiBbTk9URV0gVmFsdWVzIDUgKGxhc3QgNSBtaW51dGVzKSBhbmQgNiAobGFzdCAyNCBob3VycykgYXJlIG5vdCBsaXN0ZWQgaW4gdGhlIGRyb3Bkb3duLAogKiB3aGljaCB3aWxsIGRpc3BsYXkgYSBibGFuayB2YWx1ZSwgYW5kIGFyZSBub3QgZ3VhcmFudGVlZCB0byB3b3JrICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LnNhbml0aXplLnRpbWVTcGFuIiwgMCk7CgovKioqIFtTRUNUSU9OIDQwMDBdOiBGUFAgKGZpbmdlcnByaW50aW5nUHJvdGVjdGlvbikKICAgUkZQICg0NTAxKSBvdmVycmlkZXMgRlBQCgogICBJbiBGRjExOCsgRlBQIGlzIG9uIGJ5IGRlZmF1bHQgaW4gcHJpdmF0ZSB3aW5kb3dzICg0MDAxKSBhbmQgaW4gRkYxMTkrIGlzIGNvbnRyb2xsZWQKICAgYnkgRVRQICgyNzAxKS4gRlBQIHdpbGwgYWxzbyB1c2UgUmVtb3RlIFNlcnZpY2VzIGluIGZ1dHVyZSB0byByZWxheCBGUFAgcHJvdGVjdGlvbnMKICAgb24gYSBwZXIgc2l0ZSBiYXNpcyBmb3IgY29tcGF0aWJpbGl0eSAoNDAwNCkuCgogICBodHRwczovL3NlYXJjaGZveC5vcmcvbW96aWxsYS1jZW50cmFsL3NvdXJjZS90b29sa2l0L2NvbXBvbmVudHMvcmVzaXN0ZmluZ2VycHJpbnRpbmcvUkZQVGFyZ2V0c0RlZmF1bHQuaW5jCgogICBbTk9URV0gUkZQVGFyZ2V0cyArIGdyYW51bGFyIG92ZXJyaWRlcyBhcmUgc29tZXdoYXQgZXhwZXJpbWVudGFsIGFuZCBtYXkgcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMKICAgLSBlLmcuIEZyYW1lUmF0ZSBjYW4gb25seSBiZSBjb250cm9sbGVkIHBlciBwcm9jZXNzLCBub3QgcGVyIG9yaWdpbgoKICAgMTgyNjQwOCAtIHJlc3RyaWN0IHRvIHN5c3RlbSBmb250cyAoa0Jhc2VGb250cyArIGtMYW5nUGFja0ZvbnRzKSAoV2luZG93cywgTWFjLCBzb21lIExpbnV4KSAoRkYxMTkrKQogICAgICAxOTI4NzA1OiBhbmRyb2lkIChGRjEzNCspCiAgICAgIGh0dHBzOi8vc2VhcmNoZm94Lm9yZy9tb3ppbGxhLWNlbnRyYWwvc2VhcmNoP3BhdGg9U3RhbmRhcmRGb250cyouaW5jCiAgIDE4NTgxODEgLSBzdWJ0bHkgcmFuZG9taXplIGNhbnZhcyBwZXIgZVRMRCsxLCBwZXIgc2Vzc2lvbiBhbmQgcGVyIHdpbmRvdy1tb2RlIChGRjEyMCspCiAgIDE4ODc2ODIgLSB1c2UgZmRsaWJtJ3Mgc2luLCBjb3MgYW5kIHRhbiBpbiBqc21hdGggKEZGMTM0KykKICAgMTk1NDE5NCAtIGF2YWlsYWJsZSBzY3JlZW4gcmVzb2x1dGlvbjogcmV0dXJuIGEgZml4ZWQgb2Zmc2V0IGhlaWdodCBmcm9tIHNjcmVlbiBwZXIgcGxhdGZvcm0gd2hlbiBub3QgZnVsbCBzY3JlZW4gKEZGMTQzKykKICAgMTk4NDMzMyAtIGhhcmR3YXJlQ29uY3VycmVuY3k6IGxlc3MgdGhhbiA4IHJldHVybiA0IGVsc2UgcmV0dXJuIDggKEZGMTQzKykKICAgMTk3NzgzNiAtIG1heFRvdWNoUG9pbnRzOiByZXR1cm4gbXVsdGktdG91Y2ggYXMgNSAoRkYxNDMrKQogICAxOTE3NjA3IC0gc3VidGx5IHJhbmRvbWl6ZSBXZWJHTCdzIHJlYWRQaXhlbHMgKEZGMTQ1KykKKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI0MDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGJlcmVmdCBvZiBsaWZlISIpOwovKiA0MDAxOiBlbmFibGUgRlBQIGluIFBCIG1vZGUgW0ZGMTE0K10KICogW05PVEVdIEluIEZGMTE5KywgRlBQIGZvciBhbGwgbW9kZXMgKDcwMTYpIGlzIGVuYWJsZWQgd2l0aCBFVFAgU3RyaWN0ICgyNzAxKSAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5maW5nZXJwcmludGluZ1Byb3RlY3Rpb24ucGJtb2RlIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQovKiA0MDAyOiBzZXQgZ2xvYmFsIEZQUCBvdmVycmlkZXMgW0ZGMTE0K10KICogdXNlcyAiUkZQVGFyZ2V0cyIgWzFdIHdoaWNoIGRlc3BpdGUgdGhlIG5hbWUgdGhlc2UgYXJlIG5vdCB1c2VkIGJ5IFJGUAogKiBlLmcuICIrQWxsVGFyZ2V0cywtQ1NTUHJlZmVyc0NvbG9yU2NoZW1lLC1KU0RhdGVUaW1lVVRDIiA9IGFsbCB0YXJnZXRzIGJ1dCBhbGxvdyBwcmVmZXJzLWNvbG9yLXNjaGVtZSBhbmQgZG8gbm90IGNoYW5nZSB0aW1lem9uZQogKiBlLmcuICItQWxsVGFyZ2V0cywrQ2FudmFzUmFuZG9taXphdGlvbiwrSlNEYXRlVGltZVVUQyIgPSBubyB0YXJnZXRzIGJ1dCBkbyB1c2UgRlBQIGNhbnZhcyBhbmQgY2hhbmdlIHRpbWV6b25lCiAqIFtOT1RFXSBOb3Qgc3VwcG9ydGVkIGJ5IGFya2VuZm94LiBFaXRoZXIgdXNlIFJGUCBvciBGUFAgYXQgZGVmYXVsdHMKICogWzFdIGh0dHBzOi8vc2VhcmNoZm94Lm9yZy9tb3ppbGxhLWNlbnRyYWwvc291cmNlL3Rvb2xraXQvY29tcG9uZW50cy9yZXNpc3RmaW5nZXJwcmludGluZy9SRlBUYXJnZXRzLmluYyAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5maW5nZXJwcmludGluZ1Byb3RlY3Rpb24ub3ZlcnJpZGVzIiwgIiIpOwovKiA0MDAzOiBzZXQgZ3JhbnVsYXIgRlBQIG92ZXJyaWRlcwogKiBKU09OIGZvcm1hdDogZS5nLiJbe1wiZmlyc3RQYXJ0eURvbWFpblwiOiBcIm5ldGZsaXguY29tXCIsIFwib3ZlcnJpZGVzXCI6IFwiLUNhbnZhc1JhbmRvbWl6YXRpb24sLUZyYW1lUmF0ZSxcIn1dIgogKiBbTk9URV0gTm90IHN1cHBvcnRlZCBieSBhcmtlbmZveC4gRWl0aGVyIHVzZSBSRlAgb3IgRlBQIGF0IGRlZmF1bHRzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmZpbmdlcnByaW50aW5nUHJvdGVjdGlvbi5ncmFudWxhck92ZXJyaWRlcyIsICIiKTsKLyogNDAwNDogZGlzYWJsZSByZW1vdGUgRlBQIG92ZXJyaWRlcyBbRkYxMjcrXSAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5maW5nZXJwcmludGluZ1Byb3RlY3Rpb24ucmVtb3RlT3ZlcnJpZGVzLmVuYWJsZWQiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDQ1MDBdOiBPUFRJT05BTCBSRlAgKHJlc2lzdEZpbmdlcnByaW50aW5nKQogICBSRlAgb3ZlcnJpZGVzIEZQUCAoNDAwMCkKCiAgIEZGMTI4KyBBcmtlbmZveCBieSBkZWZhdWx0IHVzZXMgRlBQIChhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2l0aCBFVFAgU3RyaWN0KS4gRm9yIG1vc3QgcGVvcGxlCiAgIHRoaXMgaXMgYWxsIHlvdSBuZWVkLiBUbyB1c2UgUkZQIGluc3RlYWQsIGFkZCBSRlAgKDQ1MDEpIHRvIHlvdXIgb3ZlcnJpZGVzLCBhbmQgb3B0aW9uYWxseQogICBhZGQgbGV0dGVyYm94aW5nICg0NTA0KSwgc3Bvb2ZfZW5nbGlzaCAoNDUwNiksIGFuZCBXZWJHTCAoNDUyMCkuCgogICBSRlAgaXMgYW4gYWxsLW9yLW5vdGhpbmcgYnV5IGluOiB5b3UgY2Fubm90IHBpY2sgYW5kIGNob29zZSB3aGF0IHBhcnRzIHlvdSB3YW50CgogICBbV0FSTklOR10gRE8gTk9UIFVTRSBleHRlbnNpb25zIHRvIGFsdGVyIFJGUCBwcm90ZWN0ZWQgbWV0cmljcwoKICAgIDQxODk4NiAtIGxpbWl0IHdpbmRvdy5zY3JlZW4gJiBDU1MgbWVkaWEgcXVlcmllcyAoRkY0MSkKIEZGNTYKICAgMTMzMzY1MSAtIHNwb29mIFVzZXIgQWdlbnQgJiBOYXZpZ2F0b3IgQVBJCiAgICAgIEpTOiBzcG9vZmVkIGFzIFdpbmRvd3MgMTAsIE9TIFggMTAuMTUsIEFuZHJvaWQgMTAsIG9yIExpbnV4CiAgICAgIEhUVFAgSGVhZGVyOiBzcG9vZmVkIGFzIFdpbmRvd3MgMTAgb3IgQW5kcm9pZCAxMCB1bnRpbCBGRjEzNiB0aGVuIG1hdGNoZXMgSlMgc3Bvb2YKICAgMTM2OTMxOSAtIGRpc2FibGUgZGV2aWNlIHNlbnNvciBBUEkKICAgMTM2OTM1NyAtIGRpc2FibGUgc2l0ZSBzcGVjaWZpYyB6b29tCiAgIDEzMzcxNjEgLSBoaWRlIGdhbWVwYWRzIGZyb20gY29udGVudAogICAxMzcyMDcyIC0gc3Bvb2YgbmV0d29yayBpbmZvcm1hdGlvbiBBUEkgYXMgInVua25vd24iIHdoZW4gZG9tLm5ldGluZm8uZW5hYmxlZCA9IHRydWUKICAgMTMzMzY0MSAtIHJlZHVjZSBmaW5nZXJwcmludGluZyBpbiBXZWJTcGVlY2ggQVBJCiBGRjU3CiAgIDEzNjkzMDkgLSBzcG9vZiBtZWRpYSBzdGF0aXN0aWNzCiAgIDEzODI0OTkgLSByZWR1Y2Ugc2NyZWVuIGNvLW9yZGluYXRlIGZpbmdlcnByaW50aW5nIGluIFRvdWNoIEFQSQogICAxMjE3MjkwICYgMTQwOTY3NyAtIGVuYWJsZSBzb21lIGZpbmdlcnByaW50aW5nIHJlc2lzdGFuY2UgZm9yIFdlYkdMCiAgIDEzNTQ2MzMgLSBsaW1pdCBNZWRpYUVycm9yLm1lc3NhZ2UgdG8gYSB3aGl0ZWxpc3QKIEZGNTgrCiAgIDEzNzIwNzMgLSBzcG9vZi9ibG9jayBmaW5nZXJwcmludGluZyBpbiBNZWRpYURldmljZXMgQVBJIChGRjU5KQogICAgICBTcG9vZjogZW51bWVyYXRlIGRldmljZXMgYXMgb25lICJJbnRlcm5hbCBDYW1lcmEiIGFuZCBvbmUgIkludGVybmFsIE1pY3JvcGhvbmUiCiAgICAgIEJsb2NrOiBzdXBwcmVzc2VzIHRoZSBvbmRldmljZWNoYW5nZSBldmVudAogICAxMDM5MDY5IC0gd2FybiB3aGVuIGxhbmd1YWdlIHByZWZzIGFyZSBub3Qgc2V0IHRvICJlbioiIChGRjU5KQogICAxMjIyMjg1ICYgMTQzMzU5MiAtIHNwb29mIGtleWJvYXJkIGV2ZW50cyBhbmQgc3VwcHJlc3Mga2V5Ym9hcmQgbW9kaWZpZXIgZXZlbnRzIChGRjU5KQogICAgICBTcG9vZmluZyBtaW1pY3MgdGhlIGNvbnRlbnQgbGFuZ3VhZ2Ugb2YgdGhlIGRvY3VtZW50LiBDdXJyZW50bHkgaXQgb25seSBzdXBwb3J0cyBlbi1VUy4KICAgICAgTW9kaWZpZXIgZXZlbnRzIHN1cHByZXNzZWQgYXJlIFNISUZUIGFuZCBib3RoIEFMVCBrZXlzLiBDaHJvbWUgaXMgbm90IGFmZmVjdGVkLgogICAxNDU5MDg5IC0gZGlzYWJsZSBPUyBsb2NhbGUgaW4gSFRUUCBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVycyAoQU5EUk9JRCkgKEZGNjIpCiAgIDE0NzkyMzkgLSByZXR1cm4gIm5vLXByZWZlcmVuY2UiIHdpdGggcHJlZmVycy1yZWR1Y2VkLW1vdGlvbiAoRkY2MykKICAgMTM2MzUwOCAmIDE4MjYwNTEgJiAxOTU3NjU4IC0gc3Bvb2Yvc3VwcHJlc3MgUG9pbnRlciBFdmVudHMsIHNwb29mIG1heFRvdWNoUG9pbnRzIChGRjY0LCBGRjEzMiwgRkYxNDMsIEVTUjE0MC4yKQogICAgICAgRkY2NDogbWF4VG91Y2hQb2ludHM6IDAgPSBkZXNrdG9wCiAgICAgIEZGMTMyOiBtYXhUb3VjaFBvaW50czogMCA9IG1hYyB8IDEwID0gd2luZG93cywgbGludXgsIG1vYmlsZQogICAgICBGRjE0My8xNDAuMjogbWF4VG91Y2hQb2ludHM6IDAgPSBtYWMsIGxpbnV4IHwgMTAgPSB3aW5kb3dzIHwgNSA9IG1vYmlsZQogICAxNDkyNzY2IC0gc3Bvb2YgcG9pbnRlckV2ZW50LnBvaW50ZXJpZCAoRkY2NSkKICAgMTQ4NTI2NiAtIGRpc2FibGUgZXhwb3N1cmUgb2Ygc3lzdGVtIGNvbG9ycyB0byBDU1Mgb3IgY2FudmFzIChGRjY3KQogICAxNDk0MDM0IC0gcmV0dXJuICJsaWdodCIgd2l0aCBwcmVmZXJzLWNvbG9yLXNjaGVtZSAoRkY2NykKICAgMTU2NDQyMiAtIHNwb29mIGF1ZGlvQ29udGV4dCBvdXRwdXRMYXRlbmN5IChGRjcwKQogICAxNTk1ODIzIC0gcmV0dXJuIGF1ZGlvQ29udGV4dCBzYW1wbGVSYXRlIGFzIDQ0MTAwIChGRjcyKQogICAxNjA3MzE2IC0gc3Bvb2YgcG9pbnRlciBhcyBjb2Fyc2UgYW5kIGhvdmVyIGFzIG5vbmUgKEFORFJPSUQpIChGRjc0KQogICAxNjIxNDMzIC0gcmFuZG9taXplIGNhbnZhcyAocHJldmlvdXNseSBGRjU4KyByZXR1cm5lZCBhbiBhbGwtd2hpdGUgY2FudmFzKSAoRkY3OCkKICAgMTUwNjM2NCAtIHJldHVybiAibm8tcHJlZmVyZW5jZSIgd2l0aCBwcmVmZXJzLWNvbnRyYXN0IChGRjgwKQogICAxNjUzOTg3IC0gbGltaXQgZm9udCB2aXNpYmlsaXR5IHRvIGJ1bmRsZWQgYW5kICJCYXNlIEZvbnRzIiAoV2luZG93cywgTWFjLCBzb21lIExpbnV4KSAoRkY4MCkKICAgMTQ2MTQ1NCAtIHNwb29mIHNtb290aD10cnVlIGFuZCBwb3dlckVmZmljaWVudD1mYWxzZSBmb3Igc3VwcG9ydGVkIG1lZGlhIGluIE1lZGlhQ2FwYWJpbGl0aWVzIChGRjgyKQogICAgNTMxOTE1IC0gdXNlIGZkbGlibSdzIHNpbiwgY29zIGFuZCB0YW4gaW4ganNtYXRoIChGRjkzLCBFU1I5MS4xKQogICAxNjkyNjA5IC0gcmVkdWNlIEpTIHRpbWluZyBwcmVjaXNpb24gdG8gMTYuNjdtcyAocHJldmlvdXNseSBGRjU1KyB3YXMgMTAwbXMpIChGRjEwMikKICAgMTQyMjIzNyAtIHJldHVybiAic3JnYiIgd2l0aCBjb2xvci1nYW11dCAoRkYxMTApCiAgIDE3OTQ2MjggLSByZXR1cm4gIm5vbmUiIHdpdGggaW52ZXJ0ZWQtY29sb3JzIChGRjExNCkKICAgMTc4Nzc5MCAtIG5vcm1hbGl6ZSBzeXN0ZW0gZm9udHMgKEZGMTI4KQogICAxODM1OTg3IC0gc3Bvb2YgdGltZXpvbmUgYXMgQXRsYW50aWMvUmV5a2phdmlrIChwcmV2aW91c2x5IEZGNTUrIHdhcyBVVEMpIChGRjEyOCkKICAgMTY1NjM3NyAtIHNwb29mIHBvaW50ZXJFdmVudHMgYXppbXV0aEFuZ2xlIGFuZCBhbHRpdHVkZUFuZ2xlIChGRjEzMSkKICAgMTgzNDMwNyAtIGFsd2F5cyB1c2Ugc21vb3RoIHNjcm9sbGluZyAoRkYxMzIpCiAgIDE5MTgyMDIgLSBzcG9vZiBzY3JlZW4gb3JpZW50YXRpb24gYmFzZWQgb24gc3Bvb2ZlZCBzY3JlZW4gc2l6ZSBhbmQgcGxhdGZvcm0gKEZGMTMyKQogICAgICBwcmV2aW91c2x5IEZGNTArIGl0IGFsd2F5cyByZXR1cm5lZCBsYW5kc2NhcGUtcHJpbWFyeSBhbmQgYW4gYW5nbGUgb2YgMAogICAxMzkwNDY1IC0gbG9hZCBhbGwgc3VidGl0bGVzIGluIFdlYlZUVCAoVmlkZW8gVGV4dCBUcmFja3MpIChGRjEzMykKICAgMTg3MzM4MiAtIG1ha2Ugc3Bvb2ZlZCBkZXZpY2VQaXhlbFJhdGlvIGFuZCBDU1MgbWVkaWEgcXVlcmllcyBtYXRjaCAoRkYxMzMpCiAgICAgIHByZXZpb3VzbHkgRkY0MSsgZGV2aWNlUGl4ZWxSYXRpbyB3YXMgaGFyZGNvZGVkIGFzIDEgYW5kIEZGMTI3KyBhcyAyCiAgICAgIHByZXZpb3VzbHkgRkY0MSsgQ1NTIG1lZGlhIHF1ZXJpZXMgd2VyZSBzcG9vZmVkIGFzIHpvb20gbGV2ZWwgYXQgYSBkZXZpY2VQaXhlbFJhdGlvIG9mIDEKICAgMTk1NTQyNSAtIHJldHVybiAxMjggZm9yIFdlYkdQVSBzdWJncm91cE1heFNpemUgKEZGMTM4KQogICAxOTY2ODYwIC0gc3Bvb2YgV2ViR0wgZGVidWcgcmVuZGVyZXIgaW5mbyAoRkYxNDApCiAgICAgIHByZXZpb3VzbHkgRkY2MCsgaXQgd2FzIGRpc2FibGVkCiAgIDE3ODEyNzcgLSByZXR1cm4gMTBHaUIgZm9yIHN0b3JhZ2UgZXN0aW1hdGUgdW50aWwgcGVyc2lzdGVudC1zdG9yYWdlIGdyYW50ZWQgKEZGMTQyLCBFU1IxNDAuMSkKICAgMTk3MjYwMCAtIHNwb29mIG5ldHdvcmsgY29ubmVjdGlvbiBmb3IgSFRNTE1lZGlhRWxlbWVudCBwcmVsb2FkIChGRjE0MiwgRVNSMTQwLjEpCiAgIDE5NzU4NTEgLSByZXR1cm4gdHJ1ZSBmb3IgbmF2aWdhdG9yLm9uTGluZSAoRkYxNDIsIEVTUjE0MC4xKQogICAxOTczMjY1IC0gZGlzYWJsZSBXZWJDb2RlY3MgQVBJIChGRjE0MikKICAgMTk4NDMzMyAtIHNwb29mIG5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5IGFzIDQgZXhjZXB0IG1hYyByZXR1cm4gOCAoRkYxNDMrKQogICAgICAgcHJldmlvdXNseSBGRjU1KyBpdCByZXR1cm5lZCAyCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiNDUwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBwb3BwZWQgJ2lzIGNsb2dzIik7Ci8qIDQ1MDE6IGVuYWJsZSBSRlAKICogW05PVEVdIHBibW9kZSBhcHBsaWVzIGlmIHRydWUgYW5kIHRoZSBvcmlnaW5hbCBwcmVmIGlzIGZhbHNlCiAqIFtTRVRVUC1XRUJdIFJGUCBjYW4gY2F1c2Ugc29tZSB3ZWJzaXRlIGJyZWFrYWdlOiBtYWlubHkgY2FudmFzLCB1c2UgYSBjYW52YXMgc2l0ZSBleGNlcHRpb24gdmlhIHRoZSB1cmxiYXIuCiAqIFJGUCBhbHNvIGhhcyBhIGZldyBzaWRlIGVmZmVjdHM6IG1haW5seSB0aGF0IHRpbWV6b25lIGlzIEdNVCwgYW5kIHdlYnNpdGVzIHdpbGwgcHJlZmVyIGxpZ2h0IHRoZW1lICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnJlc2lzdEZpbmdlcnByaW50aW5nIiwgdHJ1ZSk7IC8vIFtGRjQxK10KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnJlc2lzdEZpbmdlcnByaW50aW5nLnBibW9kZSIsIHRydWUpOyAvLyBbRkYxMTQrXQovKiA0NTAyOiBzZXQgUkZQIG5ldyB3aW5kb3cgc2l6ZSBtYXggcm91bmRlZCB2YWx1ZXMgW0ZGNTUrXQogKiBbU0VUVVAtQ0hST01FXSBzaXplcyByb3VuZCBkb3duIGluIGh1bmRyZWRzOiB3aWR0aCB0byAyMDBzIGFuZCBoZWlnaHQgdG8gMTAwcywgdG8gZml0IHlvdXIgc2NyZWVuCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzEzMzA4ODIgKioqLwp1c2VyX3ByZWYoInByaXZhY3kud2luZG93Lm1heElubmVyV2lkdGgiLCAxNjAwKTsKdXNlcl9wcmVmKCJwcml2YWN5LndpbmRvdy5tYXhJbm5lckhlaWdodCIsIDkwMCk7Ci8qIDQ1MDM6IGRpc2FibGUgbW96QWRkb25NYW5hZ2VyIFdlYiBBUEkgW0ZGNTcrXQogKiBbTk9URV0gVG8gYWxsb3cgZXh0ZW5zaW9ucyB0byB3b3JrIG9uIEFNTywgeW91IGFsc28gbmVlZCAyNjYyCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL2J1Z2xpc3QuY2dpP2J1Z19pZD0xMzg0MzMwLDE0MDY3OTUsMTQxNTY0NCwxNDUzOTg4ICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LnJlc2lzdEZpbmdlcnByaW50aW5nLmJsb2NrX21vekFkZG9uTWFuYWdlciIsIHRydWUpOwovKiA0NTA0OiBlbmFibGUgbGV0dGVyYm94aW5nIFtGRjY3K10KICogRHluYW1pY2FsbHkgcmVzaXplcyB0aGUgaW5uZXIgd2luZG93IGJ5IGFwcGx5aW5nIG1hcmdpbnMgaW4gc3RlcHBlZCByYW5nZXMgWzJdCiAqIElmIHlvdSB1c2UgdGhlIGRpbWVuc2lvbiBwcmVmLCB0aGVuIGl0IHdpbGwgb25seSBhcHBseSB0aG9zZSByZXNvbHV0aW9ucy4KICogVGhlIGZvcm1hdCBpcyAid2lkdGgxeGhlaWdodDEsIHdpZHRoMnhoZWlnaHQyLCAuLi4iIChlLmcuICI4MDB4NjAwLCAxMDAweDEwMDAiKQogKiBbU0VUVVAtV0VCXSBUaGlzIGlzIGluZGVwZW5kZW50IG9mIFJGUCAoNDUwMSkuIElmIHlvdSdyZSB1c2luZyBSRlAsIGJ1dCBkaXNsaWtlIHRoZQogKiBtYXJnaW5zLCB0aGVuIGRvbid0IGVuYWJsZSB0aGlzIHByZWYsIGtlZXBpbmcgaW4gbWluZCB0aGF0IGl0IGlzIGVmZmVjdGl2ZWx5IGZpbmdlcnByaW50YWJsZQogKiBbV0FSTklOR10gRE8gTk9UIFVTRTogdGhlIGRpbWVuc2lvbiBwcmVmIGlzIG9ubHkgbWVhbnQgZm9yIHRlc3RpbmcKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTQwNzM2NgogKiBbMl0gaHR0cHM6Ly9oZy5tb3ppbGxhLm9yZy9tb3ppbGxhLWNlbnRyYWwvcmV2LzcyMTFjYjRmNThmZiNsNS4xMyAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5yZXNpc3RGaW5nZXJwcmludGluZy5sZXR0ZXJib3hpbmciLCB0cnVlKTsgLy8gW0hJRERFTiBQUkVGXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucmVzaXN0RmluZ2VycHJpbnRpbmcubGV0dGVyYm94aW5nLmRpbWVuc2lvbnMiLCAiIik7IC8vIFtISURERU4gUFJFRl0KLyogNDUwNTogZGlzYWJsZSBSRlAgYnkgZG9tYWluIFtGRjkxK10KICogW05PVEVdOiBUaGUgcHJlZiB0YWtlcyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzOiBlLmcuICIqZG9tYWluMS50bGQsICpkb21haW4yLnRsZCIKICogV29ya2luZyBkb21haW4gZXhhbXBsZXM6ICJhcmtlbmZveC5naXRodWIuaW8iLCAiKmdpdGh1Yi5pbyIKICogTm9uLXdvcmtpbmcgZG9tYWluIGV4YW1wbGVzOiAiaHR0cHM6Ly9hcmtlbmZveC5naXRodWIuaW8iLCAiZ2l0aHViLmlvIiwgIiphcmtlbmZveC5naXRodWIuaW8iICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnJlc2lzdEZpbmdlcnByaW50aW5nLmV4ZW1wdGVkRG9tYWlucyIsICIqLmV4YW1wbGUuaW52YWxpZCIpOwovKiA0NTA2OiBkaXNhYmxlIFJGUCBzcG9vZiBlbmdsaXNoIHByb21wdCBbRkY1OStdCiAqIDA9cHJvbXB0LCAxPWRpc2FibGVkLCAyPWVuYWJsZWQKICogW05PVEVdIFdoZW4gY2hhbmdpbmcgZnJvbSB2YWx1ZSAyLCBwcmVmZXJyZWQgbGFuZ3VhZ2VzICgnaW50bC5hY2NlcHRfbGFuZ3VhZ2VzJykgaXMgbm90IHJlc2V0LgogKiBbU0VUVVAtV0VCXSB3aGVuIGVuYWJsZWQsIHNldHMgJ2VuLVVTLCBlbicgZm9yIGRpc3BsYXlpbmcgcGFnZXMgYW5kICdlbi1VUycgYXMgbG9jYWxlLgogKiBbU0VUVElOR10gR2VuZXJhbD5MYW5ndWFnZT5DaG9vc2UgeW91ciBwcmVmZXJyZWQgbGFuZ3VhZ2UgZm9yIGRpc3BsYXlpbmcgcGFnZXM+Q2hvb3NlPlJlcXVlc3QgRW5nbGlzaC4uLiAqKiovCnVzZXJfcHJlZigicHJpdmFjeS5zcG9vZl9lbmdsaXNoIiwgMSk7Ci8qIDQ1MDc6IHNraXAgYnJvd3Nlci5zdGFydHVwLmJsYW5rV2luZG93IGlmIFJGUCBpcyB1c2VkIFtGRjEzNitdICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnJlc2lzdEZpbmdlcnByaW50aW5nLnNraXBFYXJseUJsYW5rRmlyc3RQYWludCIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KLyogNDUxMDogZW5mb3JjZSBDb250cmFzdCBDb250cm9sIG9mZiBbRkYxMzgrXQogKiAwPWF1dG9tYXRpYywgMT1vZmYsIDI9Y3VzdG9tCiAqIFtTRVRUSU5HXSBHZW5lcmFsPkxhbmd1YWdlIGFuZCBBcHBlYXJhbmNlPkNvbnRyYXN0IENvbnRyb2wgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuZGlzcGxheS5kb2N1bWVudF9jb2xvcl91c2UiLCAxKTsgLy8gW0RFRkFVTFQ6IDEgTk9OLVdJTkRPV1NdCi8qIDQ1MTE6IGRpc2FibGUgdXNpbmcgc3lzdGVtIGFjY2VudCBjb2xvcnMgKioqLwp1c2VyX3ByZWYoIndpZGdldC5ub24tbmF0aXZlLXRoZW1lLnVzZS10aGVtZS1hY2NlbnQiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZSBXSU5ET1dTXQovKiA0NTEyOiBlbmZvcmNlIGxpbmtzIHRhcmdldGluZyBuZXcgd2luZG93cyB0byBvcGVuIGluIGEgbmV3IHRhYiBpbnN0ZWFkCiAqIDE9bW9zdCByZWNlbnQgd2luZG93IG9yIHRhYiwgMj1uZXcgd2luZG93LCAzPW5ldyB0YWIKICogU3RvcHMgbWFsaWNpb3VzIHdpbmRvdyBzaXplcyBhbmQgc29tZSBzY3JlZW4gcmVzb2x1dGlvbiBsZWFrcy4KICogWW91IGNhbiBzdGlsbCByaWdodC1jbGljayBhIGxpbmsgYW5kIG9wZW4gaW4gYSBuZXcgd2luZG93CiAqIFtTRVRUSU5HXSBHZW5lcmFsPlRhYnM+T3BlbiBsaW5rcyBpbiB0YWJzIGluc3RlYWQgb2YgbmV3IHdpbmRvd3MKICogWzFdIGh0dHBzOi8vZ2l0bGFiLnRvcnByb2plY3Qub3JnL3Rwby9hcHBsaWNhdGlvbnMvdG9yLWJyb3dzZXIvLS9pc3N1ZXMvOTg4MSAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5saW5rLm9wZW5fbmV3d2luZG93IiwgMyk7IC8vIFtERUZBVUxUOiAzXQovKiA0NTEzOiBzZXQgYWxsIG9wZW4gd2luZG93IG1ldGhvZHMgdG8gYWJpZGUgYnkgImJyb3dzZXIubGluay5vcGVuX25ld3dpbmRvdyIgKDQ1MTIpCiAqIFsxXSBodHRwczovL3NlYXJjaGZveC5vcmcvbW96aWxsYS1jZW50cmFsL3NvdXJjZS9kb20vdGVzdHMvYnJvd3Nlci9icm93c2VyX3Rlc3RfbmV3X3dpbmRvd19mcm9tX2NvbnRlbnQuanMgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIubGluay5vcGVuX25ld3dpbmRvdy5yZXN0cmljdGlvbiIsIDApOwovKiA0NTIwOiBkaXNhYmxlIFdlYkdMIChXZWIgR3JhcGhpY3MgTGlicmFyeSkgKioqLwogICAvLyB1c2VyX3ByZWYoIndlYmdsLmRpc2FibGVkIiwgdHJ1ZSk7CgovKioqIFtTRUNUSU9OIDUwMDBdOiBPUFRJT05BTCBPUFNFQwogICBEaXNrIGF2b2lkYW5jZSwgYXBwbGljYXRpb24gZGF0YSBpc29sYXRpb24sIGV5ZWJhbGxzLi4uCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiNTAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyB0YWtlbiAnaXMgbGFzdCBib3ciKTsKLyogNTAwMTogc3RhcnQgRmlyZWZveCBpbiBQQiAoUHJpdmF0ZSBCcm93c2luZykgbW9kZQogKiBbTk9URV0gSW4gdGhpcyBtb2RlIGFsbCB3aW5kb3dzIGFyZSAicHJpdmF0ZSB3aW5kb3dzIiBhbmQgdGhlIFBCIG1vZGUgaWNvbiBpcyBub3QgZGlzcGxheWVkCiAqIFtOT1RFXSBUaGUgUCBpbiBQQiBtb2RlIGNhbiBiZSBtaXNsZWFkaW5nOiBpdCBtZWFucyBubyAicGVyc2lzdGVudCIgZGlzayBzdGF0ZSBzdWNoIGFzIGhpc3RvcnksCiAqIGNhY2hlcywgc2VhcmNoZXMsIGNvb2tpZXMsIGxvY2FsU3RvcmFnZSwgSW5kZXhlZERCIGV0YyAod2hpY2ggeW91IGNhbiBhY2hpZXZlIGluIG5vcm1hbCBtb2RlKS4KICogSW4gZmFjdCwgUEIgbW9kZSBsaW1pdHMgb3IgcmVtb3ZlcyB0aGUgYWJpbGl0eSB0byBjb250cm9sIHNvbWUgb2YgdGhlc2UsIGFuZCB5b3UgbmVlZCB0byBxdWl0CiAqIEZpcmVmb3ggdG8gY2xlYXIgdGhlbS4gUEIgaXMgYmVzdCB1c2VkIGFzIGEgb25lIG9mZiB3aW5kb3cgKE1lbnU+TmV3IFByaXZhdGUgV2luZG93KSB0byBwcm92aWRlCiAqIGEgdGVtcG9yYXJ5IHNlbGYtY29udGFpbmVkIG5ldyBzZXNzaW9uLiBDbG9zZSBhbGwgcHJpdmF0ZSB3aW5kb3dzIHRvIGNsZWFyIHRoZSBQQiBzZXNzaW9uLgogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5Pkhpc3Rvcnk+Q3VzdG9tIFNldHRpbmdzPkFsd2F5cyB1c2UgcHJpdmF0ZSBicm93c2luZyBtb2RlCiAqIFsxXSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvUHJpdmF0ZV9Ccm93c2luZwogKiBbMl0gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL2NvbW1vbi1teXRocy1hYm91dC1wcml2YXRlLWJyb3dzaW5nICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnByaXZhdGVicm93c2luZy5hdXRvc3RhcnQiLCB0cnVlKTsKLyogNTAwMjogZGlzYWJsZSBtZW1vcnkgY2FjaGUKICogY2FwYWNpdHk6IC0xPWRldGVybWluZSBkeW5hbWljYWxseSAoZGVmYXVsdCksIDA9bm9uZSwgbj1tZW1vcnkgY2FwYWNpdHkgaW4ga2liaWJ5dGVzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLmNhY2hlLm1lbW9yeS5lbmFibGUiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5jYWNoZS5tZW1vcnkuY2FwYWNpdHkiLCAwKTsKLyogNTAwMzogZGlzYWJsZSBzYXZpbmcgcGFzc3dvcmRzCiAqIFtOT1RFXSBUaGlzIGRvZXMgbm90IGNsZWFyIGFueSBwYXNzd29yZHMgYWxyZWFkeSBzYXZlZAogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkxvZ2lucyBhbmQgUGFzc3dvcmRzPkFzayB0byBzYXZlIGxvZ2lucyBhbmQgcGFzc3dvcmRzIGZvciB3ZWJzaXRlcyAqKiovCiAgIC8vIHVzZXJfcHJlZigic2lnbm9uLnJlbWVtYmVyU2lnbm9ucyIsIGZhbHNlKTsKLyogNTAwNDogZGlzYWJsZSBwZXJtaXNzaW9ucyBtYW5hZ2VyIGZyb20gd3JpdGluZyB0byBkaXNrIFtGRjQxK10gW1JFU1RBUlRdCiAqIFtOT1RFXSBUaGlzIG1lYW5zIGFueSBwZXJtaXNzaW9uIGNoYW5nZXMgYXJlIHNlc3Npb24gb25seQogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy85Njc4MTIgKioqLwogICAvLyB1c2VyX3ByZWYoInBlcm1pc3Npb25zLm1lbW9yeV9vbmx5IiwgdHJ1ZSk7IC8vIFtISURERU4gUFJFRl0KLyogNTAwNTogZGlzYWJsZSBpbnRlcm1lZGlhdGUgY2VydGlmaWNhdGUgY2FjaGluZyBbRkY0MStdIFtSRVNUQVJUXQogKiBbTk9URV0gVGhpcyBhZmZlY3RzIGxvZ2luL2NlcnQva2V5IGRicy4gVGhlIGVmZmVjdCBpcyBhbGwgY3JlZGVudGlhbHMgYXJlIHNlc3Npb24tb25seS4KICogU2F2ZWQgbG9naW5zIGFuZCBwYXNzd29yZHMgYXJlIG5vdCBhdmFpbGFibGUuIFJlc2V0IHRoZSBwcmVmIGFuZCByZXN0YXJ0IHRvIHJldHVybiB0aGVtICoqKi8KICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5ub2NlcnRkYiIsIHRydWUpOwovKiA1MDA2OiBkaXNhYmxlIGZhdmljb25zIGluIGhpc3RvcnkgYW5kIGJvb2ttYXJrcwogKiBbTk9URV0gU3RvcmVkIGFzIGRhdGEgYmxvYnMgaW4gZmF2aWNvbnMuc3FsaXRlLCB0aGVzZSBkb24ndCByZXZlYWwgYW55dGhpbmcgdGhhdCB5b3VyCiAqIGFjdHVhbCBoaXN0b3J5IChhbmQgYm9va21hcmtzKSBhbHJlYWR5IGRvLiBZb3VyIGhpc3RvcnkgaXMgbW9yZSBkZXRhaWxlZCwgc28KICogY29udHJvbCB0aGF0IGluc3RlYWQ7IGUuZy4gZGlzYWJsZSBoaXN0b3J5LCBjbGVhciBoaXN0b3J5IG9uIGV4aXQsIHVzZSBQQiBtb2RlCiAqIFtOT1RFXSBmYXZpY29ucy5zcWxpdGUgaXMgc2FuaXRpemVkIG9uIEZpcmVmb3ggY2xvc2UgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuY2hyb21lLnNpdGVfaWNvbnMiLCBmYWxzZSk7Ci8qIDUwMDc6IGV4Y2x1ZGUgIlVuZG8gQ2xvc2VkIFRhYnMiIGluIFNlc3Npb24gUmVzdG9yZSAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zZXNzaW9uc3RvcmUubWF4X3RhYnNfdW5kbyIsIDApOwovKiA1MDA4OiBkaXNhYmxlIHJlc3VtaW5nIHNlc3Npb24gZnJvbSBjcmFzaAogKiBbVEVTVF0gYWJvdXQ6Y3Jhc2hwYXJlbnQgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuc2Vzc2lvbnN0b3JlLnJlc3VtZV9mcm9tX2NyYXNoIiwgZmFsc2UpOwovKiA1MDA5OiBkaXNhYmxlICJvcGVuIHdpdGgiIGluIGRvd25sb2FkIGRpYWxvZyBbRkY1MCtdCiAqIEFwcGxpY2F0aW9uIGRhdGEgaXNvbGF0aW9uIFsxXQogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xMjgxOTU5ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLmRvd25sb2FkLmZvcmJpZF9vcGVuX3dpdGgiLCB0cnVlKTsKLyogNTAxMDogZGlzYWJsZSBsb2NhdGlvbiBiYXIgc3VnZ2VzdGlvbiB0eXBlcwogKiBbU0VUVElOR10gU2VhcmNoPkFkZHJlc3MgQmFyPldoZW4gdXNpbmcgdGhlIGFkZHJlc3MgYmFyLCBzdWdnZXN0ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zdWdnZXN0Lmhpc3RvcnkiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc3VnZ2VzdC5ib29rbWFyayIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zdWdnZXN0Lm9wZW5wYWdlIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnN1Z2dlc3QudG9wc2l0ZXMiLCBmYWxzZSk7IC8vIFtGRjc4K10KLyogNTAxMTogZGlzYWJsZSBsb2NhdGlvbiBiYXIgZHJvcGRvd24KICogVGhpcyB2YWx1ZSBjb250cm9scyB0aGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgdG8gYXBwZWFyIGluIHRoZSBsb2NhdGlvbiBiYXIgZHJvcGRvd24gKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLm1heFJpY2hSZXN1bHRzIiwgMCk7Ci8qIDUwMTI6IGRpc2FibGUgbG9jYXRpb24gYmFyIGF1dG9maWxsCiAqIFsxXSBodHRwczovL3N1cHBvcnQubW96aWxsYS5vcmcva2IvYWRkcmVzcy1iYXItYXV0b2NvbXBsZXRlLWZpcmVmb3gjd191cmwtYXV0b2NvbXBsZXRlICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5hdXRvRmlsbCIsIGZhbHNlKTsKLyogNTAxMzogZGlzYWJsZSBicm93c2luZyBhbmQgZG93bmxvYWQgaGlzdG9yeQogKiBbTk9URV0gV2UgYWxzbyBjbGVhciBoaXN0b3J5IGFuZCBkb3dubG9hZHMgb24gZXhpdCAoMjgxMSspCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+SGlzdG9yeT5DdXN0b20gU2V0dGluZ3M+UmVtZW1iZXIgYnJvd3NpbmcgYW5kIGRvd25sb2FkIGhpc3RvcnkgKioqLwogICAvLyB1c2VyX3ByZWYoInBsYWNlcy5oaXN0b3J5LmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDUwMTQ6IGRpc2FibGUgV2luZG93cyBqdW1wbGlzdCBbV0lORE9XU10gKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudGFza2Jhci5saXN0cy5lbmFibGVkIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudGFza2Jhci5saXN0cy5mcmVxdWVudC5lbmFibGVkIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudGFza2Jhci5saXN0cy5yZWNlbnQuZW5hYmxlZCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnRhc2tiYXIubGlzdHMudGFza3MuZW5hYmxlZCIsIGZhbHNlKTsKLyogNTAxNjogZGlzY291cmFnZSBkb3dubG9hZGluZyB0byBkZXNrdG9wCiAqIDA9ZGVza3RvcCwgMT1kb3dubG9hZHMgKGRlZmF1bHQpLCAyPWN1c3RvbQogKiBbU0VUVElOR10gVG8gc2V0IHlvdXIgY3VzdG9tIGRlZmF1bHQgImRvd25sb2FkcyI6IEdlbmVyYWw+RG93bmxvYWRzPlNhdmUgZmlsZXMgdG8gKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuZG93bmxvYWQuZm9sZGVyTGlzdCIsIDIpOwovKiA1MDE3OiBkaXNhYmxlIEZvcm0gQXV0b2ZpbGwKICogSWYgLnN1cHBvcnRlZENvdW50cmllcyBpbmNsdWRlcyB5b3VyIHJlZ2lvbiAoYnJvd3Nlci5zZWFyY2gucmVnaW9uKSBhbmQgLnN1cHBvcnRlZAogKiBpcyAiZGV0ZWN0IiAoZGVmYXVsdCksIHRoZW4gdGhlIFVJIHdpbGwgc2hvdy4gU3RvcmVkIGRhdGEgaXMgbm90IHNlY3VyZSwgdXNlcyBKU09OCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+Rm9ybXMgYW5kIEF1dG9maWxsPkF1dG9maWxsIGFkZHJlc3NlcwogKiBbMV0gaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL0ZpcmVmb3gvRmVhdHVyZXMvRm9ybV9BdXRvZmlsbCAqKiovCiAgIC8vIHVzZXJfcHJlZigiZXh0ZW5zaW9ucy5mb3JtYXV0b2ZpbGwuYWRkcmVzc2VzLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjU1K10KICAgLy8gdXNlcl9wcmVmKCJleHRlbnNpb25zLmZvcm1hdXRvZmlsbC5jcmVkaXRDYXJkcy5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1NitdCi8qIDUwMTg6IGxpbWl0IGV2ZW50cyB0aGF0IGNhbiBjYXVzZSBhIHBvcC11cCAqKiovCiAgIC8vIHVzZXJfcHJlZigiZG9tLnBvcHVwX2FsbG93ZWRfZXZlbnRzIiwgImNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBwb2ludGVyZG93biIpOwovKiA1MDE5OiBkaXNhYmxlIHBhZ2UgdGh1bWJuYWlsIGNvbGxlY3Rpb24gKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIucGFnZXRodW1ibmFpbHMuY2FwdHVyaW5nX2Rpc2FibGVkIiwgdHJ1ZSk7IC8vIFtISURERU4gUFJFRl0KLyogNTAyMDogZGlzYWJsZSBXaW5kb3dzIG5hdGl2ZSBub3RpZmljYXRpb25zIGFuZCB1c2UgYXBwIG5vdGljYXRpb25zIGluc3RlYWQgW0ZGMTExK10gW1dJTkRPV1NdICoqKi8KICAgLy8gdXNlcl9wcmVmKCJhbGVydHMudXNlU3lzdGVtQmFja2VuZC53aW5kb3dzLm5vdGlmaWNhdGlvbnNlcnZlci5lbmFibGVkIiwgZmFsc2UpOwovKiA1MDIxOiBkaXNhYmxlIGxvY2F0aW9uIGJhciB1c2luZyBzZWFyY2gKICogRG9uJ3QgbGVhayBVUkwgdHlwb3MgdG8gYSBzZWFyY2ggZW5naW5lLCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgaW5zdGVhZAogKiBFeGFtcGxlczogInNlY3JldHBsYWNlLGNvbSIsICJzZWNyZXRwbGFjZS9jb20iLCAic2VjcmV0cGxhY2UgY29tIiwgInNlY3JldCBwbGFjZS5jb20iCiAqIFtOT1RFXSBUaGlzIGRvZXMgbm90IGFmZmVjdCBleHBsaWNpdCB1c2VyIGFjdGlvbiBzdWNoIGFzIHVzaW5nIHNlYXJjaCBidXR0b25zIGluIHRoZQogKiBkcm9wZG93biwgb3IgdXNpbmcga2V5d29yZCBzZWFyY2ggc2hvcnRjdXRzIHlvdSBjb25maWd1cmUgaW4gb3B0aW9ucyAoZS5nLiAiZCIgZm9yIER1Y2tEdWNrR28pICoqKi8KICAgLy8gdXNlcl9wcmVmKCJrZXl3b3JkLmVuYWJsZWQiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDU1MDBdOiBPUFRJT05BTCBIQVJERU5JTkcKICAgTm90IHJlY29tbWVuZGVkLiBPdmVycmlkaW5nIHRoZXNlIGNhbiBjYXVzZSBicmVha2FnZSBhbmQgcGVyZm9ybWFuY2UgaXNzdWVzLAogICB0aGV5IGFyZSBtb3N0bHkgZmluZ2VycHJpbnRhYmxlLCBhbmQgdGhlIHRocmVhdCBtb2RlbCBpcyBwcmFjdGljYWxseSBub25leGlzdGVudAoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjU1MDAgc3ludGF4IGVycm9yOiB0aGlzIGlzIGFuIGV4LXBhcnJvdCEiKTsKLyogNTUwMTogZGlzYWJsZSBNYXRoTUwgKE1hdGhlbWF0aWNhbCBNYXJrdXAgTGFuZ3VhZ2UpIFtGRjUxK10KICogWzFdIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZWtleS5jZ2k/a2V5d29yZD1tYXRobWwgKioqLwogICAvLyB1c2VyX3ByZWYoIm1hdGhtbC5kaXNhYmxlZCIsIHRydWUpOyAvLyAxMTczMTk5Ci8qIDU1MDI6IGRpc2FibGUgaW4tY29udGVudCBTVkcgKFNjYWxhYmxlIFZlY3RvciBHcmFwaGljcykgW0ZGNTMrXQogKiBbMV0gaHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3Zla2V5LmNnaT9rZXl3b3JkPWZpcmVmb3grc3ZnICoqKi8KICAgLy8gdXNlcl9wcmVmKCJzdmcuZGlzYWJsZWQiLCB0cnVlKTsgLy8gMTIxNjg5MwovKiA1NTAzOiBkaXNhYmxlIGdyYXBoaXRlCiAqIFsxXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9ZmlyZWZveCtncmFwaGl0ZQogKiBbMl0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JhcGhpdGVfKFNJTCkgKioqLwogICAvLyB1c2VyX3ByZWYoImdmeC5mb250X3JlbmRlcmluZy5ncmFwaGl0ZS5lbmFibGVkIiwgZmFsc2UpOwovKiA1NTA0OiBkaXNhYmxlIGFzbS5qcyBbRkYyMitdCiAqIFsxXSBodHRwOi8vYXNtanMub3JnLwogKiBbMl0gaHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3Zla2V5LmNnaT9rZXl3b3JkPWFzbS5qcwogKiBbM10gaHR0cHM6Ly9yaDBkZXYuZ2l0aHViLmlvL2Jsb2cvMjAxNy90aGUtcmV0dXJuLW9mLXRoZS1qaXQvICoqKi8KICAgLy8gdXNlcl9wcmVmKCJqYXZhc2NyaXB0Lm9wdGlvbnMuYXNtanMiLCBmYWxzZSk7Ci8qIDU1MDU6IGRpc2FibGUgSW9uIGFuZCBiYXNlbGluZSBKSVQgdG8gaGFyZGVuIGFnYWluc3QgSlMgZXhwbG9pdHMgW1JFU1RBUlRdCiAqIFtOT1RFXSBXaGVuIGJvdGggSW9uIGFuZCBKSVQgYXJlIGRpc2FibGVkLCBhbmQgdHJ1c3RlZHByaW5jaXBhbHMKICogaXMgZW5hYmxlZCwgdGhlbiBJb24gY2FuIHN0aWxsIGJlIHVzZWQgYnkgZXh0ZW5zaW9ucyAoMTU5OTIyNikKICogWzFdIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZWtleS5jZ2k/a2V5d29yZD1maXJlZm94K2ppdAogKiBbMl0gaHR0cHM6Ly9taWNyb3NvZnRlZGdlLmdpdGh1Yi5pby9lZGdldnIvcG9zdHMvU3VwZXItRHVwZXItU2VjdXJlLU1vZGUvICoqKi8KICAgLy8gdXNlcl9wcmVmKCJqYXZhc2NyaXB0Lm9wdGlvbnMuaW9uIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImphdmFzY3JpcHQub3B0aW9ucy5iYXNlbGluZWppdCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJqYXZhc2NyaXB0Lm9wdGlvbnMuaml0X3RydXN0ZWRwcmluY2lwYWxzIiwgdHJ1ZSk7IC8vIFtGRjc1K10gW0hJRERFTiBQUkVGXQovKiA1NTA2OiBkaXNhYmxlIFdlYkFzc2VtYmx5IFtGRjUyK10KICogVnVsbmVyYWJpbGl0aWVzIFsxXSBoYXZlIGluY3JlYXNpbmdseSBiZWVuIGZvdW5kLCBpbmNsdWRpbmcgdGhvc2Uga25vd24gYW5kIGZpeGVkCiAqIGluIG5hdGl2ZSBwcm9ncmFtcyB5ZWFycyBhZ28gWzJdLiBXQVNNIGhhcyBwb3dlcmZ1bCBsb3ctbGV2ZWwgYWNjZXNzLCBtYWtpbmcKICogY2VydGFpbiBhdHRhY2tzIChicnV0ZS1mb3JjZSkgYW5kIHZ1bG5lcmFiaWxpdGllcyBtb3JlIHBvc3NpYmxlCiAqIFtTVEFUU10gfjAuMiUgb2Ygd2Vic2l0ZXMsIGFib3V0IGhhbGYgb2Ygd2hpY2ggYXJlIGZvciBjcnlwdG9taW5pbmcgLyBtYWx2ZXJ0aXNpbmcgWzJdWzNdCiAqIFsxXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9d2FzbQogKiBbMl0gaHR0cHM6Ly9zcGVjdHJ1bS5pZWVlLm9yZy90ZWNoLXRhbGsvdGVsZWNvbS9zZWN1cml0eS9tb3JlLXdvcnJpZXMtb3Zlci10aGUtc2VjdXJpdHktb2Ytd2ViLWFzc2VtYmx5CiAqIFszXSBodHRwczovL3d3dy56ZG5ldC5jb20vYXJ0aWNsZS9oYWxmLW9mLXRoZS13ZWJzaXRlcy11c2luZy13ZWJhc3NlbWJseS11c2UtaXQtZm9yLW1hbGljaW91cy1wdXJwb3NlcyAqKiovCiAgIC8vIHVzZXJfcHJlZigiamF2YXNjcmlwdC5vcHRpb25zLndhc20iLCBmYWxzZSk7Ci8qIDU1MDc6IGRpc2FibGUgcmVuZGVyaW5nIG9mIFNWRyBPcGVuVHlwZSBmb250cyAqKiovCiAgIC8vIHVzZXJfcHJlZigiZ2Z4LmZvbnRfcmVuZGVyaW5nLm9wZW50eXBlX3N2Zy5lbmFibGVkIiwgZmFsc2UpOwovKiA1NTA4OiBkaXNhYmxlIGFsbCBEUk0gKERpZ2l0YWwgUmlnaHRzIE1hbmFnZW1lbnQpIGNvbnRlbnQgKEVNRTogRW5jcnlwdGlvbiBNZWRpYSBFeHRlbnNpb24pCiAqIE9wdGlvbmFsbHkgaGlkZSB0aGUgVUkgc2V0dGluZyB3aGljaCBhbHNvIGRpc2FibGVzIHRoZSBEUk0gcHJvbXB0CiAqIFtTRVRUSU5HXSBHZW5lcmFsPkRSTSBDb250ZW50PlBsYXkgRFJNLWNvbnRyb2xsZWQgY29udGVudAogKiBbVEVTVF0gaHR0cHM6Ly9iaXRtb3Zpbi5jb20vZGVtb3MvZHJtCiAqIFsxXSBodHRwczovL3d3dy5lZmYub3JnL2RlZXBsaW5rcy8yMDE3LzEwL2RybXMtZGVhZC1jYW5hcnktaG93LXdlLWp1c3QtbG9zdC13ZWItd2hhdC13ZS1sZWFybmVkLWl0LWFuZC13aGF0LXdlLW5lZWQtZG8tbmV4dCAqKiovCiAgIC8vIHVzZXJfcHJlZigibWVkaWEuZW1lLmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5lbWUudWkuZW5hYmxlZCIsIGZhbHNlKTsKLyogNTUwOTogZGlzYWJsZSBJUHY2IGlmIHVzaW5nIGEgVlBOCiAqIFRoaXMgaXMgYW4gYXBwbGljYXRpb24gbGV2ZWwgZmFsbGJhY2suIERpc2FibGluZyBJUHY2IGlzIGJlc3QgZG9uZSBhdCBhbiBPUy9uZXR3b3JrCiAqIGxldmVsLCBhbmQvb3IgY29uZmlndXJlZCBwcm9wZXJseSBpbiBzeXN0ZW0gd2lkZSBWUE4gc2V0dXBzLgogKiBbTk9URV0gUEhQIGRlZmF1bHRzIHRvIElQdjYgd2l0aCAibG9jYWxob3N0Ii4gVXNlICJwaHAgLVMgMTI3LjAuMC4xOlBPUlQiCiAqIFtTRVRVUC1XRUJdIFBSX0NPTk5FQ1RfUkVTRVRfRVJST1IKICogW1RFU1RdIGh0dHBzOi8vaXBsZWFrLm9yZy8KICogWzFdIGh0dHBzOi8vd3d3LmludGVybmV0c29jaWV0eS5vcmcvdGFnL2lwdjYtc2VjdXJpdHkvIChNeXRocyAyLDQsNSw2KSAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5kbnMuZGlzYWJsZUlQdjYiLCB0cnVlKTsKLyogNTUxMDogY29udHJvbCB3aGVuIHRvIHNlbmQgYSBjcm9zcy1vcmlnaW4gcmVmZXJlcgogKiAwPWFsd2F5cyAoZGVmYXVsdCksIDE9b25seSBpZiBiYXNlIGRvbWFpbnMgbWF0Y2gsIDI9b25seSBpZiBob3N0cyBtYXRjaAogKiBbTk9URV0gV2lsbCBjYXVzZSBicmVha2FnZTogb2xkZXIgbW9kZW1zL3JvdXRlcnMgYW5kIHNvbWUgc2l0ZXMgZS5nIGJhbmtzLCB2aW1lbywgaWNsb3VkLCBpbnN0YWdyYW0gKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLlhPcmlnaW5Qb2xpY3kiLCAyKTsKLyogNTUxMTogc2V0IERvSCBib290c3RyYXAgYWRkcmVzcyBbRkY4OStdCiAqIEZpcmVmb3ggdXNlcyB0aGUgc3lzdGVtIEROUyB0byBpbml0aWFsbHkgcmVzb2x2ZSB0aGUgSVAgYWRkcmVzcyBvZiB5b3VyIERvSCBzZXJ2ZXIuCiAqIFdoZW4gc2V0IHRvIGEgdmFsaWQsIHdvcmtpbmcgdmFsdWUgdGhhdCBtYXRjaGVzIHlvdXIgIm5ldHdvcmsudHJyLnVyaSIgKDA3MTIpIEZpcmVmb3gKICogd29uJ3QgdXNlIHRoZSBzeXN0ZW0gRE5TLiBJZiB0aGUgSVAgZG9lc24ndCBtYXRjaCB0aGVuIERvSCB3b24ndCB3b3JrICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLnRyci5ib290c3RyYXBBZGRyIiwgIjEwLjAuMC4xIik7IC8vIFtISURERU4gUFJFRl0KCi8qKiogW1NFQ1RJT04gNjAwMF06IERPTidUIFRPVUNIICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiNjAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyAnaXN0b3J5ISIpOwovKiA2MDAxOiBlbmZvcmNlIEZpcmVmb3ggYmxvY2tsaXN0CiAqIFtXSFldIEl0IGluY2x1ZGVzIHVwZGF0ZXMgZm9yICJyZXZva2VkIGNlcnRpZmljYXRlcyIKICogWzFdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9zZWN1cml0eS8yMDE1LzAzLzAzL3Jldm9raW5nLWludGVybWVkaWF0ZS1jZXJ0aWZpY2F0ZXMtaW50cm9kdWNpbmctb25lY3JsLyAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5ibG9ja2xpc3QuZW5hYmxlZCIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KLyogNjAwMjogZW5mb3JjZSBubyByZWZlcmVyIHNwb29maW5nCiAqIFtXSFldIFNwb29maW5nIGNhbiBhZmZlY3QgQ1NSRiAoQ3Jvc3MtU2l0ZSBSZXF1ZXN0IEZvcmdlcnkpIHByb3RlY3Rpb25zICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAucmVmZXJlci5zcG9vZlNvdXJjZSIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiA2MDA0OiBlbmZvcmNlIGEgc2VjdXJpdHkgZGVsYXkgb24gc29tZSBjb25maXJtYXRpb24gZGlhbG9ncyBzdWNoIGFzIGluc3RhbGwsIG9wZW4vc2F2ZQogKiBbMV0gaHR0cHM6Ly93d3cuc3F1YXJlZnJlZS5jb20vMjAwNC8wNy8wMS9yYWNlLWNvbmRpdGlvbnMtaW4tc2VjdXJpdHktZGlhbG9ncy8gKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LmRpYWxvZ19lbmFibGVfZGVsYXkiLCAxMDAwKTsgLy8gW0RFRkFVTFQ6IDEwMDBdCi8qIDYwMDg6IGVuZm9yY2Ugbm8gRmlyc3QgUGFydHkgSXNvbGF0aW9uIFtGRjUxK10KICogW1dBUk5JTkddIFJlcGxhY2VkIHdpdGggbmV0d29yayBwYXJ0aXRpb25pbmcgKEZGODUrKSBhbmQgVENQICgyNzAxKSwgYW5kIGVuYWJsaW5nIEZQSQogKiBkaXNhYmxlcyB0aG9zZS4gRlBJIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGV4Y2VwdCBhdCBUb3IgUHJvamVjdCBmb3IgVG9yIEJyb3dzZXIncyBjb25maWcgKioqLwp1c2VyX3ByZWYoInByaXZhY3kuZmlyc3RwYXJ0eS5pc29sYXRlIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCi8qIDYwMDk6IGVuZm9yY2UgU21hcnRCbG9jayBzaGltcyAoYWJvdXQ6Y29tcGF0KSBbRkY4MStdCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAyMS8wMy8yMy9pbnRyb2R1Y2luZy1zbWFydGJsb2NrLyAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy53ZWJjb21wYXQuZW5hYmxlX3NoaW1zIiwgdHJ1ZSk7IC8vIFtISURERU4gUFJFRl0gW0RFRkFVTFQ6IHRydWVdCi8qIDYwMTA6IGVuZm9yY2Ugbm8gVExTIDEuMC8xLjEgZG93bmdyYWRlcwogKiBbVEVTVF0gaHR0cHM6Ly90bHMtdjEtMS5iYWRzc2wuY29tOjEwMTAvICoqKi8KdXNlcl9wcmVmKCJzZWN1cml0eS50bHMudmVyc2lvbi5lbmFibGUtZGVwcmVjYXRlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiA2MDExOiBlbmZvcmNlIGRpc2FibGluZyBvZiBXZWIgQ29tcGF0aWJpbGl0eSBSZXBvcnRlciBbRkY1NitdCiAqIFdlYiBDb21wYXRpYmlsaXR5IFJlcG9ydGVyIGFkZHMgYSAiUmVwb3J0IFNpdGUgSXNzdWUiIGJ1dHRvbiB0byBzZW5kIGRhdGEgdG8gTW96aWxsYQogKiBbV0hZXSBUbyBwcmV2ZW50IHdhc3RpbmcgTW96aWxsYSdzIHRpbWUgd2l0aCBhIGN1c3RvbSBzZXR1cCAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy53ZWJjb21wYXQtcmVwb3J0ZXIuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiA2MDEyOiBlbmZvcmNlIFF1YXJhbnRpbmVkIERvbWFpbnMgW0ZGMTE1K10KICogW1dIWV0gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL3F1YXJhbnRpbmVkLWRvbWFpbnMgKioqLwp1c2VyX3ByZWYoImV4dGVuc2lvbnMucXVhcmFudGluZWREb21haW5zLmVuYWJsZWQiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWVdCi8qIDYwNTA6IHByZWZzQ2xlYW5lcjogcmVzZXQgcHJldmlvdXNseSBhY3RpdmUgaXRlbXMgcmVtb3ZlZCBmcm9tIGFya2VuZm94IEZGMTI4KyAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd24uY2FjaGUiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd24uY29va2llcyIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bi5kb3dubG9hZHMiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd24uZm9ybWRhdGEiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd24uaGlzdG9yeSIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bi5vZmZsaW5lQXBwcyIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bi5zZXNzaW9ucyIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNwZC5jYWNoZSIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNwZC5jb29raWVzIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY3BkLmZvcm1kYXRhIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY3BkLmhpc3RvcnkiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jcGQub2ZmbGluZUFwcHMiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jcGQuc2Vzc2lvbnMiLCAiIik7Ci8qIDYwNTE6IHByZWZzQ2xlYW5lcjogcmVzZXQgcHJldmlvdXNseSBhY3RpdmUgaXRlbXMgcmVtb3ZlZCBmcm9tIGFya2VuZm94IEZGMTQwKyAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5kaXNwbGF5LnVzZV9zeXN0ZW1fY29sb3JzIiwgIiIpOwoKLyoqKiBbU0VDVElPTiA3MDAwXTogRE9OJ1QgQk9USEVSICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiNzAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBwdXNoaW5nIHVwIGRhaXNpZXMhIik7Ci8qIDcwMDE6IGRpc2FibGUgQVBJcwogKiBMb2NhdGlvbi1Bd2FyZSBCcm93c2luZywgRnVsbCBTY3JlZW4KICogW1dIWV0gVGhlIEFQSSBzdGF0ZSBpcyBlYXNpbHkgZmluZ2VycHJpbnRhYmxlLgogKiBHZW8gaXMgYmVoaW5kIGEgcHJvbXB0ICg3MDAyKS4gRnVsbCBzY3JlZW4gcmVxdWlyZXMgdXNlciBpbnRlcmFjdGlvbiAqKiovCiAgIC8vIHVzZXJfcHJlZigiZ2VvLmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiZnVsbC1zY3JlZW4tYXBpLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDcwMDI6IHNldCBkZWZhdWx0IHBlcm1pc3Npb25zCiAqIExvY2F0aW9uLCBDYW1lcmEsIE1pY3JvcGhvbmUsIE5vdGlmaWNhdGlvbnMgW0ZGNTgrXSBWaXJ0dWFsIFJlYWxpdHkgW0ZGNzMrXQogKiAwPWFsd2F5cyBhc2sgKGRlZmF1bHQpLCAxPWFsbG93LCAyPWJsb2NrCiAqIFtXSFldIFRoZXNlIGFyZSBmaW5nZXJwcmludGFibGUgdmlhIFBlcm1pc3Npb25zIEFQSSwgZXhjZXB0IFZSLiBKdXN0IGFkZCBzaXRlCiAqIGV4Y2VwdGlvbnMgYXMgYWxsb3cvYmxvY2sgZm9yIGZyZXF1ZW50bHkgdmlzaXRlZC9hbm5veWluZyBzaXRlczogaS5lLiBub3QgZ2xvYmFsCiAqIFtTRVRUSU5HXSB0byBhZGQgc2l0ZSBleGNlcHRpb25zOiBDdHJsK0k+UGVybWlzc2lvbnM+CiAqIFtTRVRUSU5HXSB0byBtYW5hZ2Ugc2l0ZSBleGNlcHRpb25zOiBPcHRpb25zPlByaXZhY3kgJiBTZWN1cml0eT5QZXJtaXNzaW9ucz5TZXR0aW5ncyAqKiovCiAgIC8vIHVzZXJfcHJlZigicGVybWlzc2lvbnMuZGVmYXVsdC5nZW8iLCAwKTsKICAgLy8gdXNlcl9wcmVmKCJwZXJtaXNzaW9ucy5kZWZhdWx0LmNhbWVyYSIsIDApOwogICAvLyB1c2VyX3ByZWYoInBlcm1pc3Npb25zLmRlZmF1bHQubWljcm9waG9uZSIsIDApOwogICAvLyB1c2VyX3ByZWYoInBlcm1pc3Npb25zLmRlZmF1bHQuZGVza3RvcC1ub3RpZmljYXRpb24iLCAwKTsKICAgLy8gdXNlcl9wcmVmKCJwZXJtaXNzaW9ucy5kZWZhdWx0LnhyIiwgMCk7IC8vIFZpcnR1YWwgUmVhbGl0eQovKiA3MDAzOiBkaXNhYmxlIG5vbi1tb2Rlcm4gY2lwaGVyIHN1aXRlcyBbMV0KICogW1dIWV0gUGFzc2l2ZSBmaW5nZXJwcmludGluZy4gTWluaW1hbC9ub24tZXhpc3RlbnQgdGhyZWF0IG9mIGRvd25ncmFkZSBhdHRhY2tzCiAqIFsxXSBodHRwczovL2Jyb3dzZXJsZWFrcy5jb20vc3NsICoqKi8KICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wzLmVjZGhlX2VjZHNhX2Flc18xMjhfc2hhIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnNzbDMuZWNkaGVfZWNkc2FfYWVzXzI1Nl9zaGEiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkuc3NsMy5lY2RoZV9yc2FfYWVzXzEyOF9zaGEiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkuc3NsMy5lY2RoZV9yc2FfYWVzXzI1Nl9zaGEiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkuc3NsMy5yc2FfYWVzXzEyOF9nY21fc2hhMjU2IiwgZmFsc2UpOyAvLyBubyBQRlMKICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wzLnJzYV9hZXNfMjU2X2djbV9zaGEzODQiLCBmYWxzZSk7IC8vIG5vIFBGUwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnNzbDMucnNhX2Flc18xMjhfc2hhIiwgZmFsc2UpOyAvLyBubyBQRlMKICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wzLnJzYV9hZXNfMjU2X3NoYSIsIGZhbHNlKTsgLy8gbm8gUEZTCi8qIDcwMDQ6IGNvbnRyb2wgVExTIHZlcnNpb25zCiAqIFtXSFldIFBhc3NpdmUgZmluZ2VycHJpbnRpbmcgYW5kIHNlY3VyaXR5ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS50bHMudmVyc2lvbi5taW4iLCAzKTsgLy8gW0RFRkFVTFQ6IDNdCiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkudGxzLnZlcnNpb24ubWF4IiwgNCk7Ci8qIDcwMDU6IGRpc2FibGUgU1NMIHNlc3Npb24gSURzIFtGRjM2K10KICogW1dIWV0gUGFzc2l2ZSBmaW5nZXJwcmludGluZyBhbmQgcGVyZiBjb3N0cy4gVGhlc2UgYXJlIHNlc3Npb24tb25seQogKiBhbmQgaXNvbGF0ZWQgd2l0aCBuZXR3b3JrIHBhcnRpdGlvbmluZyAoRkY4NSspIGFuZC9vciBjb250YWluZXJzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wuZGlzYWJsZV9zZXNzaW9uX2lkZW50aWZpZXJzIiwgdHJ1ZSk7Ci8qIDcwMDc6IHJlZmVyZXJzCiAqIFtXSFldIE9ubHkgY3Jvc3Mtb3JpZ2luIHJlZmVyZXJzICgxNjAyLCA1NTEwKSBtYXR0ZXIgKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5zZW5kUmVmZXJlckhlYWRlciIsIDIpOwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLnRyaW1taW5nUG9saWN5IiwgMCk7Ci8qIDcwMDg6IHNldCB0aGUgZGVmYXVsdCBSZWZlcnJlciBQb2xpY3kgW0ZGNTkrXQogKiAwPW5vLXJlZmVyZXIsIDE9c2FtZS1vcmlnaW4sIDI9c3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiwgMz1uby1yZWZlcnJlci13aGVuLWRvd25ncmFkZQogKiBbV0hZXSBEZWZhdWx0cyBhcmUgZmluZS4gVGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIHNpdGUtY29udHJvbGxlZCBSZWZlcnJlciBQb2xpY3kgKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLmRlZmF1bHRQb2xpY3kiLCAyKTsgLy8gW0RFRkFVTFQ6IDJdCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLnJlZmVyZXIuZGVmYXVsdFBvbGljeS5wYm1vZGUiLCAyKTsgLy8gW0RFRkFVTFQ6IDJdCi8qIDcwMTA6IGRpc2FibGUgSFRUUCBBbHRlcm5hdGl2ZSBTZXJ2aWNlcyBbRkYzNytdCiAqIFtXSFldIEFscmVhZHkgaXNvbGF0ZWQgd2l0aCBuZXR3b3JrIHBhcnRpdGlvbmluZyAoRkY4NSspICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAuYWx0c3ZjLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDcwMTE6IGRpc2FibGUgd2Vic2l0ZSBjb250cm9sIG92ZXIgYnJvd3NlciByaWdodC1jbGljayBjb250ZXh0IG1lbnUKICogW1dIWV0gSnVzdCB1c2UgU2hpZnQtUmlnaHQtQ2xpY2sgKioqLwogICAvLyB1c2VyX3ByZWYoImRvbS5ldmVudC5jb250ZXh0bWVudS5lbmFibGVkIiwgZmFsc2UpOwovKiA3MDEyOiBkaXNhYmxlIGljb24gZm9udHMgKGdseXBocykgYW5kIGxvY2FsIGZhbGxiYWNrIHJlbmRlcmluZwogKiBbV0hZXSBCcmVha2FnZSwgZm9udCBmYWxsYmFjayBpcyBlcXVpdmFsZW5jeSwgYWxzbyBSRlAKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvNzg5Nzg4CiAqIFsyXSBodHRwczovL2dpdGxhYi50b3Jwcm9qZWN0Lm9yZy9sZWdhY3kvdHJhYy8tL2lzc3Vlcy84NDU1ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJnZnguZG93bmxvYWRhYmxlX2ZvbnRzLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjQxK10KICAgLy8gdXNlcl9wcmVmKCJnZnguZG93bmxvYWRhYmxlX2ZvbnRzLmZhbGxiYWNrX2RlbGF5IiwgLTEpOwovKiA3MDEzOiBkaXNhYmxlIENsaXBib2FyZCBBUEkKICogW1dIWV0gRmluZ2VycHJpbnRhYmxlLiBCcmVha2FnZS4gQ3V0L2NvcHkvcGFzdGUgcmVxdWlyZSB1c2VyCiAqIGludGVyYWN0aW9uLCBhbmQgcGFzdGUgaXMgbGltaXRlZCB0byBmb2N1c2VkIGVkaXRhYmxlIGZpZWxkcyAqKiovCiAgIC8vIHVzZXJfcHJlZigiZG9tLmV2ZW50LmNsaXBib2FyZGV2ZW50cy5lbmFibGVkIiwgZmFsc2UpOwovKiA3MDE0OiBkaXNhYmxlIFN5c3RlbSBBZGQtb24gdXBkYXRlcwogKiBbV0hZXSBJdCBjYW4gY29tcHJvbWlzZSBzZWN1cml0eS4gU3lzdGVtIGFkZG9ucyBzaGlwIHdpdGggcHJlZnMsIHVzZSB0aG9zZSAqKiovCiAgIC8vIHVzZXJfcHJlZigiZXh0ZW5zaW9ucy5zeXN0ZW1BZGRvbi51cGRhdGUuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNjIrXQogICAvLyB1c2VyX3ByZWYoImV4dGVuc2lvbnMuc3lzdGVtQWRkb24udXBkYXRlLnVybCIsICIiKTsgLy8gW0ZGNDQrXQovKiA3MDE1OiBlbmFibGUgdGhlIEROVCAoRG8gTm90IFRyYWNrKSBIVFRQIGhlYWRlcgogKiBbV0hZXSBETlQgaXMgZW5mb3JjZWQgd2l0aCBUcmFja2luZyBQcm90ZWN0aW9uIHdoaWNoIGlzIHVzZWQgaW4gRVRQIFN0cmljdCAoMjcwMSkgKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuZG9ub3R0cmFja2hlYWRlci5lbmFibGVkIiwgdHJ1ZSk7Ci8qIDcwMTY6IGN1c3RvbWl6ZSBFVFAgc2V0dGluZ3MKICogW05PVEVdIEZQUCAoZmluZ2VycHJpbnRpbmdQcm90ZWN0aW9uKSBpcyBpZ25vcmVkIHdoZW4gUkZQICg0NTAxKSBpcyBlbmFibGVkCiAqIFtXSFldIEFya2VuZm94IG9ubHkgc3VwcG9ydHMgc3RyaWN0ICgyNzAxKSB3aGljaCBzZXRzIHRoZXNlIGF0IHJ1bnRpbWUgKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuY29va2llLmNvb2tpZUJlaGF2aW9yIiwgNSk7IC8vIFtERUZBVUxUOiA1XQogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuY29va2llLmNvb2tpZUJlaGF2aW9yLm9wdEluUGFydGl0aW9uaW5nIiwgdHJ1ZSk7IC8vIFtFVFAgRkYxMzIrXQogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLmRpc2FsbG93Q3Jvc3NTaXRlUmVsYXhpbmdEZWZhdWx0IiwgdHJ1ZSk7CiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLnJlZmVyZXIuZGlzYWxsb3dDcm9zc1NpdGVSZWxheGluZ0RlZmF1bHQudG9wX25hdmlnYXRpb24iLCB0cnVlKTsgLy8gW0ZGMTAwK10KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmJvdW5jZVRyYWNraW5nUHJvdGVjdGlvbi5tb2RlIiwgMSk7IC8vIFtGRjEzMStdIFtFVFAgRkYxMzMrXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuZmluZ2VycHJpbnRpbmdQcm90ZWN0aW9uIiwgdHJ1ZSk7IC8vIFtGRjExNCtdIFtFVFAgRkYxMTkrXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucGFydGl0aW9uLm5ldHdvcmtfc3RhdGUub2NzcF9jYWNoZSIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnF1ZXJ5X3N0cmlwcGluZy5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtGRjEwMStdCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS50cmFja2luZ3Byb3RlY3Rpb24uZW5hYmxlZCIsIHRydWUpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kudHJhY2tpbmdwcm90ZWN0aW9uLnNvY2lhbHRyYWNraW5nLmVuYWJsZWQiLCB0cnVlKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnRyYWNraW5ncHJvdGVjdGlvbi5jcnlwdG9taW5pbmcuZW5hYmxlZCIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnRyYWNraW5ncHJvdGVjdGlvbi5maW5nZXJwcmludGluZy5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQovKiA3MDE3OiBkaXNhYmxlIHNlcnZpY2Ugd29ya2VycwogKiBbV0hZXSBBbHJlYWR5IGlzb2xhdGVkIHdpdGggVENQICgyNzAxKSBiZWhpbmQgYSBwcmVmICoqKi8KICAgLy8gdXNlcl9wcmVmKCJkb20uc2VydmljZVdvcmtlcnMuZW5hYmxlZCIsIGZhbHNlKTsKLyogNzAxODogZGlzYWJsZSBXZWIgTm90aWZpY2F0aW9ucyBbRkYyMitdCiAqIFtXSFldIFdlYiBOb3RpZmljYXRpb25zIGFyZSBiZWhpbmQgYSBwcm9tcHQgKDcwMDIpCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvZW4vcHJvZHVjdHMvZmlyZWZveC9ibG9jay1ub3RpZmljYXRpb24tcmVxdWVzdHMvICoqKi8KICAgLy8gdXNlcl9wcmVmKCJkb20ud2Vibm90aWZpY2F0aW9ucy5lbmFibGVkIiwgZmFsc2UpOwovKiA3MDE5OiBkaXNhYmxlIFB1c2ggTm90aWZpY2F0aW9ucyBbRkY0NCtdCiAqIFtXSFldIFdlYnNpdGUgInB1c2giIHJlcXVpcmVzIHN1YnNjcmlwdGlvbiwgYW5kIHRoZSBBUEkgaXMgcmVxdWlyZWQgZm9yIENSTGl0ZSAoMTIyNCkKICogW05PVEVdIFRvIHJlbW92ZSBhbGwgc3Vic2NyaXB0aW9ucywgcmVzZXQgImRvbS5wdXNoLnVzZXJBZ2VudElEIgogKiBbMV0gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL3B1c2gtbm90aWZpY2F0aW9ucy1maXJlZm94ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJkb20ucHVzaC5lbmFibGVkIiwgZmFsc2UpOwovKiA3MDIwOiBkaXNhYmxlIFdlYlJUQyAoV2ViIFJlYWwtVGltZSBDb21tdW5pY2F0aW9uKQogKiBbV0hZXSBGaXJlZm94IGRlc2t0b3AgdXNlcyBtRE5TIGhvc3RuYW1lIG9iZnVzY2F0aW9uIGFuZCB0aGUgcHJpdmF0ZSBJUCBpcyBuZXZlciBleHBvc2VkIHVudGlsCiAqIHJlcXVpcmVkIGluIFRSVVNURUQgc2NlbmFyaW9zOyBpLmUuIGFmdGVyIHlvdSBncmFudCBkZXZpY2UgKG1pY3JvcGhvbmUgb3IgY2FtZXJhKSBhY2Nlc3MKICogW1RFU1RdIGh0dHBzOi8vYnJvd3NlcmxlYWtzLmNvbS93ZWJydGMKICogWzFdIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZy9kaXNjdXNzLXdlYnJ0Yy9jLzZzdFFYaTcyQkVVL20vMkZ3WmQyNFVBUUFKCiAqIFsyXSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtbW11c2ljLW1kbnMtaWNlLWNhbmRpZGF0ZXMjc2VjdGlvbi0zLjEuMSAqKiovCiAgIC8vIHVzZXJfcHJlZigibWVkaWEucGVlcmNvbm5lY3Rpb24uZW5hYmxlZCIsIGZhbHNlKTsKLyogNzAyMTogZW5hYmxlIEdQQyAoR2xvYmFsIFByaXZhY3kgQ29udHJvbCkgaW4gbm9uLVBCIHdpbmRvd3MKICogW1dIWV0gUGFzc2l2ZSBhbmQgYWN0aXZlIGZpbmdlcnByaW50aW5nLiBNb3N0bHkgcmVkdW5kYW50IHdpdGggVHJhY2tpbmcgUHJvdGVjdGlvbgogKiBpbiBFVFAgU3RyaWN0ICgyNzAxKSBhbmQgc2FuaXRpemluZyBvbiBjbG9zZSAoMjgwMHMpICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5Lmdsb2JhbHByaXZhY3ljb250cm9sLmVuYWJsZWQiLCB0cnVlKTsKCi8qKiogW1NFQ1RJT04gODAwMF06IERPTidUIEJPVEhFUjogRklOR0VSUFJJTlRJTkcKICAgW1dIWV0gVGhleSBhcmUgaW5zdWZmaWNpZW50IHRvIGhlbHAgYW50aS1maW5nZXJwcmludGluZyBhbmQgZG8gbW9yZSBoYXJtIHRoYW4gZ29vZAogICBbV0FSTklOR10gRE8gTk9UIFVTRSB3aXRoIFJGUC4gUkZQIGFscmVhZHkgY292ZXJzIHRoZXNlIGFuZCB0aGV5IGNhbiBpbnRlcmZlcmUKKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI4MDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGNyb3NzZWQgdGhlIEpvcmRhbiIpOwovKiA4MDAxOiBwcmVmc0NsZWFuZXI6IHJlc2V0IGl0ZW1zIHVzZWxlc3MgZm9yIGFudGktZmluZ2VycHJpbnRpbmcgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuZGlzcGxheS51c2VfZG9jdW1lbnRfZm9udHMiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci56b29tLnNpdGVTcGVjaWZpYyIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJkZXZpY2Uuc2Vuc29ycy5lbmFibGVkIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImRvbS5lbmFibGVfcGVyZm9ybWFuY2UiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZG9tLmVuYWJsZV9yZXNvdXJjZV90aW1pbmciLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZG9tLmdhbWVwYWQuZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJkb20ubWF4SGFyZHdhcmVDb25jdXJyZW5jeSIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJkb20udzNjX3RvdWNoX2V2ZW50cy5lbmFibGVkIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImRvbS53ZWJhdWRpby5lbmFibGVkIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImZvbnQuc3lzdGVtLndoaXRlbGlzdCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJnZW5lcmFsLmFwcG5hbWUub3ZlcnJpZGUiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZ2VuZXJhbC5hcHB2ZXJzaW9uLm92ZXJyaWRlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImdlbmVyYWwuYnVpbGRJRC5vdmVycmlkZSIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJnZW5lcmFsLm9zY3B1Lm92ZXJyaWRlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImdlbmVyYWwucGxhdGZvcm0ub3ZlcnJpZGUiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZ2VuZXJhbC51c2VyYWdlbnQub3ZlcnJpZGUiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigibWVkaWEubmF2aWdhdG9yLmVuYWJsZWQiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigibWVkaWEudmlkZW9fc3RhdHMuZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJtZWRpYS53ZWJzcGVlY2guc3ludGguZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJ1aS51c2Vfc3RhbmRpbnNfZm9yX25hdGl2ZV9jb2xvcnMiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigid2ViZ2wuZW5hYmxlLWRlYnVnLXJlbmRlcmVyLWluZm8iLCAiIik7CgovKioqIFtTRUNUSU9OIDg1MDBdOiBURUxFTUVUUlkKICAgQXJrZW5mb3ggZG9lcyBub3QgY29uc2lkZXIgRmlyZWZveCB0ZWxlbWV0cnkgdG8gYmUgYSBwcml2YWN5IG9yIHNlY3VyaXR5IGNvbmNlcm4gLSBjb21tZW50cyBiZWxvdy4KICAgQnV0IHNpbmNlIG1vc3QgYXJrZW5mb3ggdXNlcnMgcHJlZmVyIGl0IGRpc2FibGVkLCB3ZSdsbCBkbyB0aGF0IHJhdGhlciB0aGFuIGNhdXNlIG92ZXJyaWRlcy4KCiAgIE9wdC1vdXQKICAgLSBUZWxlbWV0cnkgaXMgZXNzZW50aWFsOiBhIGJyb3dzZXIgZW5naW5lIGlzIGEgX3ZlcnlfIGxhcmdlIGNvbXBsZXggYmVhc3QgY29zdGluZyBiaWxsaW9ucyB0byBtYWludGFpbgogICAtIE9wdC1pbiB0ZWxlbWV0cnkgX2RvZXMgbm90XyB3b3JrIGFuZCByZXN1bHRzIGluIGRhdGEgdGhhdCBpcyB1bnJlcHJlc2VudGF0aXZlIGFuZCBtYXkgYmUgbWlzbGVhZGluZwogICBDaG9pY2UKICAgLSBFdmVyeSBuZXcgcHJvZmlsZSBvbiBmaXJzdCB1c2UgcHJvdmlkZXMgZGF0YSBjb2xsZWN0aW9uL3VzZSBwb2xpY3kgYW5kIHRoZSBhYmlsbHR5IHRvIG9wdC1vdXQKICAgLSBJdCBjYW4gYmUgZGlzYWJsZWQgYXQgYW55IHRpbWUgKFNldHRpbmdzPlByaXZhY3kgJiBTZWN1cml0eT5EYXRhIENvbGxlY3Rpb24gYW5kIFVzZSkKICAgRGF0YQogICAtIG5vIFBJSSAoUGVyc29uYWxseSBJZGVudGlmaWFibGUgSW5mb3JtYXRpb24pCiAgIC0gY2FuIGJlIHZpZXdlZCBpbiBhYm91dDp0ZWxlbWV0cnkKICAgLSB1c2VzIFByaW8gWzFdWzJdWzNdLCBHbGVhbiBbNF0sIE9ibGl2aW91cyBIVFRQIFs1XVs2XQoKICAgWzFdIGh0dHBzOi8vY3J5cHRvLnN0YW5mb3JkLmVkdS9wcmlvLwogICBbMl0gaHR0cHM6Ly9oYWNrcy5tb3ppbGxhLm9yZy8yMDE4LzEwL3Rlc3RpbmctcHJpdmFjeS1wcmVzZXJ2aW5nLXRlbGVtZXRyeS13aXRoLXByaW8vCiAgIFszXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAxOS8wNi8wNi9uZXh0LXN0ZXBzLWluLXByaXZhY3ktcHJlc2VydmluZy10ZWxlbWV0cnktd2l0aC1wcmlvLwogICBbNF0gaHR0cHM6Ly9maXJlZm94LXNvdXJjZS1kb2NzLm1vemlsbGEub3JnL3Rvb2xraXQvY29tcG9uZW50cy9nbGVhbi9pbmRleC5odG1sCiAgIFs1XSBodHRwczovL2ZpcmVmb3gtc291cmNlLWRvY3MubW96aWxsYS5vcmcvdG9vbGtpdC9jb21wb25lbnRzL2dsZWFuL3VzZXIvb2h0dHAuaHRtbAogICBbNl0gaHR0cHM6Ly9ibG9nLm1vemlsbGEub3JnL2VuL3RhZy9vYmxpdmlvdXMtaHR0cC8KKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI4NTAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIG9mZiB0aGUgdHdpZyEiKTsKLyogODUwMDogZGlzYWJsZSBuZXcgZGF0YSBzdWJtaXNzaW9uIFtGRjQxK10KICogSWYgZGlzYWJsZWQsIG5vIHBvbGljeSBpcyBzaG93biBvciB1cGxvYWQgdGFrZXMgcGxhY2UsIGV2ZXIKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTE5NTU1MiAqKiovCnVzZXJfcHJlZigiZGF0YXJlcG9ydGluZy5wb2xpY3kuZGF0YVN1Ym1pc3Npb25FbmFibGVkIiwgZmFsc2UpOwovKiA4NTAxOiBkaXNhYmxlIEhlYWx0aCBSZXBvcnRzCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+RmlyZWZveCBEYXRhIENvbGxlY3Rpb24gYW5kIFVzZT5TZW5kIHRlY2huaWNhbC4uLiBkYXRhICoqKi8KdXNlcl9wcmVmKCJkYXRhcmVwb3J0aW5nLmhlYWx0aHJlcG9ydC51cGxvYWRFbmFibGVkIiwgZmFsc2UpOwovKiAwODAyOiBkaXNhYmxlIHRlbGVtZXRyeQogKiBUaGUgInVuaWZpZWQiIHByZWYgYWZmZWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlICJlbmFibGVkIiBwcmVmCiAqIC0gSWYgInVuaWZpZWQiIGlzIGZhbHNlIHRoZW4gImVuYWJsZWQiIGNvbnRyb2xzIHRoZSB0ZWxlbWV0cnkgbW9kdWxlCiAqIC0gSWYgInVuaWZpZWQiIGlzIHRydWUgdGhlbiAiZW5hYmxlZCIgb25seSBjb250cm9scyB3aGV0aGVyIHRvIHJlY29yZCBleHRlbmRlZCBkYXRhCiAqIFtOT1RFXSAidG9vbGtpdC50ZWxlbWV0cnkuZW5hYmxlZCIgaXMgbm93IExPQ0tFRCB0byByZWZsZWN0IHByZXJlbGVhc2UgKHRydWUpIG9yIHJlbGVhc2UgYnVpbGRzIChmYWxzZSkgWzJdCiAqIFsxXSBodHRwczovL2ZpcmVmb3gtc291cmNlLWRvY3MubW96aWxsYS5vcmcvdG9vbGtpdC9jb21wb25lbnRzL3RlbGVtZXRyeS90ZWxlbWV0cnkvaW50ZXJuYWxzL3ByZWZlcmVuY2VzLmh0bWwKICogWzJdIGh0dHBzOi8vbWVkaXVtLmNvbS9nZW9yZy1mcml0enNjaGUvZGF0YS1wcmVmZXJlbmNlLWNoYW5nZXMtaW4tZmlyZWZveC01OC0yZDVkZjljNDI4YjUgKioqLwp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LnVuaWZpZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigidG9vbGtpdC50ZWxlbWV0cnkuZW5hYmxlZCIsIGZhbHNlKTsgLy8gc2VlIFtOT1RFXQp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LnNlcnZlciIsICJkYXRhOiwiKTsKdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5hcmNoaXZlLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigidG9vbGtpdC50ZWxlbWV0cnkubmV3UHJvZmlsZVBpbmcuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTUrXQp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LnNodXRkb3duUGluZ1NlbmRlci5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1NStdCnVzZXJfcHJlZigidG9vbGtpdC50ZWxlbWV0cnkudXBkYXRlUGluZy5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1NitdCnVzZXJfcHJlZigidG9vbGtpdC50ZWxlbWV0cnkuYmhyUGluZy5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1NytdIEJhY2tncm91bmQgSGFuZyBSZXBvcnRlcgp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LmZpcnN0U2h1dGRvd25QaW5nLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjU3K10KLyogODUwMzogZGlzYWJsZSBUZWxlbWV0cnkgQ292ZXJhZ2UKICogWzFdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9kYXRhLzIwMTgvMDgvMjAvZWZmZWN0aXZlbHktbWVhc3VyaW5nLXNlYXJjaC1pbi1maXJlZm94LyAqKiovCnVzZXJfcHJlZigidG9vbGtpdC50ZWxlbWV0cnkuY292ZXJhZ2Uub3B0LW91dCIsIHRydWUpOyAvLyBbSElEREVOIFBSRUZdCnVzZXJfcHJlZigidG9vbGtpdC5jb3ZlcmFnZS5vcHQtb3V0IiwgdHJ1ZSk7IC8vIFtGRjY0K10gW0hJRERFTiBQUkVGXQp1c2VyX3ByZWYoInRvb2xraXQuY292ZXJhZ2UuZW5kcG9pbnQuYmFzZSIsICIiKTsKCi8qKiogW1NFQ1RJT04gOTAwMF06IE5PTi1QUk9KRUNUIFJFTEFURUQgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI5MDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGNhc2hlZCBpbiAnaXMgY2hpcHMhIik7Ci8qIDkwMDE6IGRpc2FibGUgd2VsY29tZSBub3RpY2VzICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnN0YXJ0dXAuaG9tZXBhZ2Vfb3ZlcnJpZGUubXN0b25lIiwgImlnbm9yZSIpOyAvLyBbSElEREVOIFBSRUZdCi8qIDkwMDI6IGRpc2FibGUgR2VuZXJhbD5Ccm93c2luZz5SZWNvbW1lbmQgZXh0ZW5zaW9ucy9mZWF0dXJlcyBhcyB5b3UgYnJvd3NlIFtGRjY3K10gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0uYXNyb3V0ZXIudXNlcnByZWZzLmNmci5hZGRvbnMiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5hc3JvdXRlci51c2VycHJlZnMuY2ZyLmZlYXR1cmVzIiwgZmFsc2UpOwovKiA5MDA0OiBkaXNhYmxlIHNlYXJjaCB0ZXJtcyBbRkYxMTArXQogKiBbU0VUVElOR10gU2VhcmNoPlNlYXJjaCBCYXI+VXNlIHRoZSBhZGRyZXNzIGJhciBmb3Igc2VhcmNoIGFuZCBuYXZpZ2F0aW9uPlNob3cgc2VhcmNoIHRlcm1zIGluc3RlYWQgb2YgVVJMLi4uICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zaG93U2VhcmNoVGVybXMuZW5hYmxlZCIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gOTk5OV06IERFUFJFQ0FURUQgLyBSRU5BTUVEICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiOTk5OSBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBzaHVmZmxlZCBvZmYgJ2lzIG1vcnRhbCBjb2lsISIpOwovKiBFU1IxMjgueCBzdGlsbCB1c2VzIGFsbCB0aGUgZm9sbG93aW5nIHByZWZzCi8vIFtOT1RFXSByZXBsYWNlIHRoZSAqIHdpdGggYSBzbGFzaCBpbiB0aGUgbGluZSBhYm92ZSB0byByZS1lbmFibGUgYWN0aXZlIG9uZXMKLy8gRkYxMzIKLy8gMjYxNzogcmVtb3ZlIHdlYmNoYW5uZWwgd2hpdGVsaXN0CiAgIC8vIFstXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzEyNzU2MTIKICAgLy8gdXNlcl9wcmVmKCJ3ZWJjaGFubmVsLmFsbG93T2JqZWN0LnVybFdoaXRlbGlzdCIsICIiKTsKLy8gRkYxNDAKLy8gMDMyMzogZGlzYWJsZSBzaG9wcGluZyBleHBlcmllbmNlIFtGRjExNitdCiAgIC8vIFstXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE5NjQ4NDUKICAgLy8gWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDAxNTYjYzAKdXNlcl9wcmVmKCJicm93c2VyLnNob3BwaW5nLmV4cGVyaWVuY2UyMDIzLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KLy8gMDgwNjogZGlzYWJsZSB1cmxiYXIgc3VnZ2VzdGlvbnMKICAgLy8gWy1dIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTk1OTQ5Nwp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnBvY2tldC5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsgLy8gW0ZGMTE2K10gW0RFRkFVTFQ6IGZhbHNlXQovLyAqKiovCgovKiBFTkQ6IGludGVybmFsIGN1c3RvbSBwcmVmIHRvIHRlc3QgZm9yIHN5bnRheCBlcnJvcnMgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICJTVUNDRVNTOiBObyBubyBoZSdzIG5vdCBkZWFkLCBoZSdzLCBoZSdzIHJlc3RpbichIik7Cg=="