diff --git a/blockers.json b/blockers.json index 516f169b2e5..470b0f2fd83 100644 --- a/blockers.json +++ b/blockers.json @@ -6,7 +6,7 @@ "url": "https://github.com/crowdsecurity/cs-nginx-bouncer", "description": "CrowdSec bouncer for Nginx", "stars": 49, - "downloads": 165435, + "downloads": 165624, "readme_content": "PHAgYWxpZ249ImNlbnRlciI+CjxpbWcgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vY3Jvd2RzZWN1cml0eS9jcy1uZ2lueC1ib3VuY2VyL3Jhdy9tYWluL2RvY3MvYXNzZXRzL2Nyb3dkc2VjX25naW54LnN2ZyIgYWx0PSJDcm93ZFNlYyIgdGl0bGU9IkNyb3dkU2VjIiB3aWR0aD0iMjgwIiBoZWlnaHQ9IjMwMCIgLz4KPC9wPgo8cCBhbGlnbj0iY2VudGVyIj4KPGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvYnVpbGQtcGFzcy1ncmVlbiI+CjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL3Rlc3RzLXBhc3MtZ3JlZW4iPgo8L3A+CjxwIGFsaWduPSJjZW50ZXIiPgomI3gxRjREQTsgPGEgaHJlZj0iI2luc3RhbGxhdGlvbiI+RG9jdW1lbnRhdGlvbjwvYT4KJiN4MUY0QTA7IDxhIGhyZWY9Imh0dHBzOi8vaHViLmNyb3dkc2VjLm5ldCI+SHViPC9hPgomIzEyODE3MjsgPGEgaHJlZj0iaHR0cHM6Ly9kaXNjb3Vyc2UuY3Jvd2RzZWMubmV0Ij5EaXNjb3Vyc2UgPC9hPgo8L3A+CgoKCiMgQ3Jvd2RTZWMgTkdJTlggQm91bmNlcgoKQSBsdWEgYm91bmNlciBmb3IgbmdpbnguCgojIyBIb3cgZG9lcyBpdCB3b3JrID8KClRoaXMgYm91bmNlciBsZXZlcmFnZXMgbmdpbnggbHVhJ3MgQVBJLCBuYW1lbHkgYGFjY2Vzc19ieV9sdWFfZmlsZWAuCgpOZXcvdW5rbm93biBJUCBhcmUgY2hlY2tlZCBhZ2FpbnN0IGNyb3dkc2VjIEFQSSwgYW5kIGlmIHJlcXVlc3Qgc2hvdWxkIGJlIGJsb2NrZWQsIGEgKio0MDMqKiBpcyByZXR1cm5lZCB0byB0aGUgdXNlciwgYW5kIHB1dCBpbiBjYWNoZS4KCkF0IHRoZSBiYWNrLCB0aGlzIGJvdW5jZXIgdXNlcyBbY3Jvd2RzZWMgbHVhIGxpYl0oaHR0cHM6Ly9naXRodWIuY29tL2Nyb3dkc2VjdXJpdHkvbHVhLWNzLWJvdW5jZXIvKS4KCiMgSW5zdGFsbGF0aW9uCgpQbGVhc2UgZm9sbG93IHRoZSBbb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2MuY3Jvd2RzZWMubmV0L2RvY3MvYm91bmNlcnMvbmdpbngpLgoK", "status": "stable", "version": "v1.0.8", @@ -135,7 +135,7 @@ "url": "https://github.com/crowdsecurity/cs-firewall-bouncer", "description": "Crowdsec bouncer written in golang for firewalls", "stars": 93, - "downloads": 8750, + "downloads": 8755, "readme_content": "PHAgYWxpZ249ImNlbnRlciI+CjxpbWcgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vY3Jvd2RzZWN1cml0eS9jcy1maXJld2FsbC1ib3VuY2VyL3Jhdy9tYWluL2RvY3MvYXNzZXRzL2Nyb3dkc2VjX2xpbnV4X2xvZ28ucG5nIiBhbHQ9IkNyb3dkU2VjIiB0aXRsZT0iQ3Jvd2RTZWMiIHdpZHRoPSIzMDAiIGhlaWdodD0iMjgwIiAvPgo8L3A+CjxwIGFsaWduPSJjZW50ZXIiPgo8aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9idWlsZC1wYXNzLWdyZWVuIj4KPGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvdGVzdHMtcGFzcy1ncmVlbiI+CjwvcD4KPHAgYWxpZ249ImNlbnRlciI+CiYjeDFGNERBOyA8YSBocmVmPSIjaW5zdGFsbGF0aW9uIj5Eb2N1bWVudGF0aW9uPC9hPgomI3gxRjRBMDsgPGEgaHJlZj0iaHR0cHM6Ly9odWIuY3Jvd2RzZWMubmV0Ij5IdWI8L2E+CiYjMTI4MTcyOyA8YSBocmVmPSJodHRwczovL2Rpc2NvdXJzZS5jcm93ZHNlYy5uZXQiPkRpc2NvdXJzZSA8L2E+CjwvcD4KCgojIGNyb3dkc2VjLWZpcmV3YWxsLWJvdW5jZXIKQ3Jvd2RzZWMgYm91bmNlciB3cml0dGVuIGluIGdvbGFuZyBmb3IgZmlyZXdhbGxzLgoKY3Jvd2RzZWMtZmlyZXdhbGwtYm91bmNlciB3aWxsIGZldGNoIG5ldyBhbmQgb2xkIGRlY2lzaW9ucyBmcm9tIGEgQ3Jvd2RTZWMgQVBJIHRvIGFkZCB0aGVtIGluIGEgYmxvY2tsaXN0IHVzZWQgYnkgc3VwcG9ydGVkIGZpcmV3YWxscy4KClN1cHBvcnRlZCBmaXJld2FsbHM6CiAtIGlwdGFibGVzIChJUHY0IDpoZWF2eV9jaGVja19tYXJrOiAvIElQdjYgOmhlYXZ5X2NoZWNrX21hcms6ICkKIC0gbmZ0YWJsZXMgKElQdjQgOmhlYXZ5X2NoZWNrX21hcms6IC8gSVB2NiA6aGVhdnlfY2hlY2tfbWFyazogKQogLSBpcHNldCBvbmx5IChJUHY0IDpoZWF2eV9jaGVja19tYXJrOiAvIElQdjYgOmhlYXZ5X2NoZWNrX21hcms6ICkKIC0gcGYgKElQVjQgOmhlYXZ5X2NoZWNrX21hcms6IC8gSVBWNiA6aGVhdnlfY2hlY2tfbWFyazogKQoKIyBJbnN0YWxsYXRpb24KClBsZWFzZSBmb2xsb3cgdGhlIFtvZmZpY2lhbCBkb2N1bWVudGF0aW9uXShodHRwczovL2RvYy5jcm93ZHNlYy5uZXQvZG9jcy9ib3VuY2Vycy9maXJld2FsbCkuCg==", "status": "stable", "version": "v0.0.28", @@ -234,7 +234,7 @@ "url": "https://github.com/crowdsecurity/cs-custom-bouncer", "description": "CrowdSec bouncer to use custom scripts", "stars": 13, - "downloads": 903, + "downloads": 904, "readme_content": "PHAgYWxpZ249ImNlbnRlciI+CjxpbWcgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vY3Jvd2RzZWN1cml0eS9jcy1jdXN0b20tYm91bmNlci9yYXcvbWFpbi9kb2NzL2Fzc2V0cy9jcm93ZHNlY19jdXN0b21fbG9nby5wbmciIGFsdD0iQ3Jvd2RTZWMiIHRpdGxlPSJDcm93ZFNlYyIgd2lkdGg9IjI4MCIgaGVpZ2h0PSIzMDAiIC8+CjwvcD4KPHAgYWxpZ249ImNlbnRlciI+CjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL2J1aWxkLXBhc3MtZ3JlZW4iPgo8aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS90ZXN0cy1wYXNzLWdyZWVuIj4KPC9wPgo8cCBhbGlnbj0iY2VudGVyIj4KJiN4MUY0REE7IDxhIGhyZWY9IiNpbnN0YWxsYXRpb24vIj5Eb2N1bWVudGF0aW9uPC9hPgomI3gxRjRBMDsgPGEgaHJlZj0iaHR0cHM6Ly9odWIuY3Jvd2RzZWMubmV0Ij5IdWI8L2E+CiYjMTI4MTcyOyA8YSBocmVmPSJodHRwczovL2Rpc2NvdXJzZS5jcm93ZHNlYy5uZXQiPkRpc2NvdXJzZSA8L2E+CjwvcD4KCgojIGNyb3dkc2VjLWN1c3RvbS1ib3VuY2VyCkNyb3dkc2VjIGJvdW5jZXIgd3JpdHRlbiBpbiBnb2xhbmcgZm9yIGN1c3RvbSBzY3JpcHRzLgoKY3Jvd2RzZWMtY3VzdG9tLWJvdW5jZXIgd2lsbCBwZXJpb2RpY2FsbHkgZmV0Y2ggbmV3IGFuZCBleHBpcmVkL3JlbW92ZWQgZGVjaXNpb25zIGZyb20gQ3Jvd2RTZWMgTG9jYWwgQVBJIGFuZCB3aWxsIHBhc3MgdGhlbSBhcyBhcmd1bWVudHMgdG8gYSBjdXN0b20gdXNlciBzY3JpcHQuCgojIyBJbnN0YWxsYXRpb24KClBsZWFzZSBmb2xsb3cgdGhlIFtvZmZpY2lhbCBkb2N1bWVudGF0aW9uXShodHRwczovL2RvYy5jcm93ZHNlYy5uZXQvZG9jcy9ib3VuY2Vycy9jdXN0b20pLgoK", "status": "stable", "version": "v0.0.17", @@ -539,7 +539,7 @@ "url": "https://github.com/crowdsecurity/cs-aws-waf-bouncer", "description": "Crowdsec bouncer for AWS WAF", "stars": 7, - "downloads": 198, + "downloads": 199, "readme_content": "PHAgYWxpZ249ImNlbnRlciI+CjxpbWcgc3JjPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vY3Jvd2RzZWN1cml0eS9jcy1hd3Mtd2FmLWJvdW5jZXIvbWFpbi9hc3NldHMvYXdzLXdhZi1ib3VuY2VyLWxvZ28ucG5nIiBhbHQ9IkNyb3dkU2VjIiB0aXRsZT0iQ3Jvd2RTZWMiIHdpZHRoPSIyODAiIGhlaWdodD0iMzAwIiAvPgo8L3A+CjxwIGFsaWduPSJjZW50ZXIiPgo8aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9idWlsZC1wYXNzLWdyZWVuIj4KPGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvdGVzdHMtcGFzcy1ncmVlbiI+CjwvcD4KPHAgYWxpZ249ImNlbnRlciI+CiYjeDFGNEEwOyA8YSBocmVmPSJodHRwczovL2h1Yi5jcm93ZHNlYy5uZXQiPkh1YjwvYT4KJiMxMjgxNzI7IDxhIGhyZWY9Imh0dHBzOi8vZGlzY291cnNlLmNyb3dkc2VjLm5ldCI+RGlzY291cnNlIDwvYT4KPC9wPgoKIyBDcm93ZFNlYyBBV1MgV0FGIEJvdW5jZXIKCkEgYm91bmNlciBmb3IgQVdTIFdBRi4KCiMjIEhvdyBkb2VzIGl0IHdvcmsKClRoZSBib3VuY2VyIHN5bmNzIHRoZSBkZWNpc2lvbnMgbWFkZSBieSBDcm93ZFNlYyB0byBvbmUgb3IgbXVsdGlwbGUgQVdTIFdBRiBXZWIgQUNMLgoKU3VwcG9ydHMgYmFuIGFuZCBjYXB0Y2hhIGRlY2lzaW9ucyBvbiBJUCBvciBjb3VudHJpZXMuCiMgRG9jdW1lbnRhdGlvbgoKUGxlYXNlIGZvbGxvdyB0aGUgW29mZmljaWFsIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5jcm93ZHNlYy5uZXQvZG9jcy9uZXh0L2JvdW5jZXJzL2F3c193YWYvKS4K", "status": "stable", "version": "v0.1.6", @@ -737,7 +737,7 @@ "url": "https://github.com/crowdsecurity/cs-windows-firewall-bouncer", "description": "Crowdsec bouncer for the Windows Firewall", "stars": 19, - "downloads": 9842, + "downloads": 9855, "readme_content": "PHAgYWxpZ249ImNlbnRlciI+CjxpbWcgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vY3Jvd2RzZWN1cml0eS9jcy13aW5kb3dzLWZpcmV3YWxsLWJvdW5jZXIvcmF3L21haW4vYXNzZXRzL2xvZ28ucG5nIiBhbHQ9IkNyb3dkU2VjIiB0aXRsZT0iQ3Jvd2RTZWMiIHdpZHRoPSIzMDAiIGhlaWdodD0iMjgwIiAvPgo8L3A+CjxwIGFsaWduPSJjZW50ZXIiPgomI3gxRjREQTsgPGEgaHJlZj0iaHR0cHM6Ly9kb2NzLmNyb3dkc2VjLm5ldC9kb2NzL2JvdW5jZXJzL3dpbmRvd3NfZmlyZXdhbGwiPkRvY3VtZW50YXRpb248L2E+CiYjeDFGNEEwOyA8YSBocmVmPSJodHRwczovL2h1Yi5jcm93ZHNlYy5uZXQiPkh1YjwvYT4KJiMxMjgxNzI7IDxhIGhyZWY9Imh0dHBzOi8vZGlzY291cnNlLmNyb3dkc2VjLm5ldCI+RGlzY291cnNlIDwvYT4KPC9wPgoKCiMgV2luZG93cyBGaXJld2FsbCBCb3VuY2VyCkNyb3dkc2VjIGJvdW5jZXIgd3JpdHRlbiBpbiBnb2xhbmcgZm9yIHRoZSBXaW5kb3dzIGZpcmV3YWxsLgoKVGhlIGJvdW5jZXIgd2lsbCBmZXRjaCBuZXcgYW5kIG9sZCBkZWNpc2lvbnMgZnJvbSBhIENyb3dkU2VjIEFQSSB0byBhZGQgdGhlbSBpbiBhIGJsb2NrbGlzdCB1c2VkIGJ5IHRoZSBXaW5kb3dzIGZpcmV3YWxsLgoKIyBJbnN0YWxsYXRpb24KClBsZWFzZSBmb2xsb3cgdGhlIFtvZmZpY2lhbCBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MuY3Jvd2RzZWMubmV0L2RvY3MvYm91bmNlcnMvd2luZG93c19maXJld2FsbCkuCg==", "status": "stable", "version": "v0.0.5", @@ -761,7 +761,7 @@ "url": "https://github.com/crowdsecurity/cs-haproxy-bouncer", "description": "Crowdsec bouncer for HAProxy", "stars": 18, - "downloads": 450, + "downloads": 455, "readme_content": "PHAgYWxpZ249ImNlbnRlciI+CjxpbWcgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vY3Jvd2RzZWN1cml0eS9jcy1oYXByb3h5LWJvdW5jZXIvcmF3L21haW4vZG9jcy9hc3NldHMvY3Jvd2RzZWNfaGFwcm94eS5zdmciIGFsdD0iQ3Jvd2RTZWMiIHRpdGxlPSJDcm93ZFNlYyIgd2lkdGg9IjI4MCIgaGVpZ2h0PSIzMDAiIC8+CjwvcD4KPHAgYWxpZ249ImNlbnRlciI+CjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL2J1aWxkLXBhc3MtZ3JlZW4iPgo8aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS90ZXN0cy1wYXNzLWdyZWVuIj4KPC9wPgo8cCBhbGlnbj0iY2VudGVyIj4KJiN4MUY0REE7IDxhIGhyZWY9IiNpbnN0YWxsYXRpb24vIj5Eb2N1bWVudGF0aW9uPC9hPgomI3gxRjRBMDsgPGEgaHJlZj0iaHR0cHM6Ly9odWIuY3Jvd2RzZWMubmV0Ij5IdWI8L2E+CiYjMTI4MTcyOyA8YSBocmVmPSJodHRwczovL2Rpc2NvdXJzZS5jcm93ZHNlYy5uZXQiPkRpc2NvdXJzZSA8L2E+CjwvcD4KCgoKIyBDcm93ZFNlYyBIQVByb3h5IEJvdW5jZXIKCkEgbHVhIGJvdW5jZXIgZm9yIGhhcHJveHkuCgojIyBIb3cgZG9lcyBpdCB3b3JrID8KClRoaXMgYm91bmNlciBsZXZlcmFnZXMgaGFwcm94eSBsdWEncyBBUEkuCgpOZXcvdW5rbm93biBJUCBhcmUgY2hlY2tlZCBhZ2FpbnN0IGNyb3dkc2VjIEFQSSwgYW5kIGlmIHJlcXVlc3Qgc2hvdWxkIGJlIGJsb2NrZWQsIGEgKio0MDMqKiBpcyByZXR1cm5lZCB0byB0aGUgdXNlciwgYW5kIHB1dCBpbiBjYWNoZS4KCiMgSW5zdGFsbGF0aW9uCgpQbGVhc2UgZm9sbG93IHRoZSBbb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2MuY3Jvd2RzZWMubmV0L2RvY3MvbmV4dC9ib3VuY2Vycy9oYXByb3h5KS4K", "status": "stable", "version": "v0.0.6", @@ -781,7 +781,7 @@ "description": "Traefik plugin for Crowdsec - WAF and IP protection", "stars": 148, "downloads": 0, - "readme_content": "IVtHaXRIdWJdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2xpY2Vuc2UvbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4pCiFbR2l0SHViIGdvLm1vZCBHbyB2ZXJzaW9uXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9nby1tb2QvZ28tdmVyc2lvbi9tYXhsZXJlYm91cmcvY3Jvd2RzZWMtYm91bmNlci10cmFlZmlrLXBsdWdpbikKIVtHaXRIdWIgdGFnIChsYXRlc3QgU2VtVmVyKV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvdi90YWcvbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4pClshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly9naXRodWIuY29tL21heGxlcmVib3VyZy9jcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luL2FjdGlvbnMvd29ya2Zsb3dzL2dvLWNyb3NzLnltbC9iYWRnZS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4vYWN0aW9ucykKWyFbR28gUmVwb3J0IENhcmRdKGh0dHBzOi8vZ29yZXBvcnRjYXJkLmNvbS9iYWRnZS9naXRodWIuY29tL21heGxlcmVib3VyZy9jcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luKV0oaHR0cHM6Ly9nb3JlcG9ydGNhcmQuY29tL2JhZGdlL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4pCgojIENyb3dkc2VjIEJvdW5jZXIgVHJhZWZpayBwbHVnaW4KCj4gTmV3ISBUaGlzIHBsdWdpbiBub3cgc3VwcG9ydHMgW0FwcFNlY10oaHR0cHM6Ly9kb2MuY3Jvd2RzZWMubmV0L2RvY3MvbmV4dC9hcHBzZWMvaW50cm8vKSBmZWF0dXJlIGluY2x1ZGluZyB2aXJ0dWFsIHBhdGNoaW5nIGFuZCBjYXBhYmlsaXRpZXMgc3VwcG9ydCBmb3IgeW91ciBsZWdhY3kgTW9kU2VjdXJpdHkgcnVsZXMuCgpUaGlzIHBsdWdpbiBhaW1zIHRvIGltcGxlbWVudCBhIENyb3dkc2VjIEJvdW5jZXIgaW4gYSBUcmFlZmlrIHBsdWdpbi4KCj4gW0Nyb3dkU2VjXShodHRwczovL3d3dy5jcm93ZHNlYy5uZXQvKSBpcyBhbiBvcGVuLXNvdXJjZSBhbmQgY29sbGFib3JhdGl2ZSBJUFMgKEludHJ1c2lvbiBQcmV2ZW50aW9uIFN5c3RlbSkgYW5kIGEgc2VjdXJpdHkgc3VpdGUuCj4gV2UgbGV2ZXJhZ2UgbG9jYWwgYmVoYXZpb3IgYW5hbHlzaXMgYW5kIGNyb3dkIHBvd2VyIHRvIGJ1aWxkIHRoZSBsYXJnZXN0IENUSSBuZXR3b3JrIGluIHRoZSB3b3JsZC4KClRoZSBwdXJwb3NlIGlzIHRvIGVuYWJsZSBUcmFlZmlrIHRvIGF1dGhvcml6ZSBvciBibG9jayByZXF1ZXN0cyBmcm9tIElQcyBiYXNlZCBvbiB0aGVpciByZXB1dGF0aW9uIGFuZCBiZWhhdmlvci4KClRoZSBDcm93ZHNlYyB1dGlsaXR5IHdpbGwgcHJvdmlkZSB0aGUgY29tbXVuaXR5IGJsb2NrbGlzdCB3aGljaCBjb250YWlucyBoaWdobHkgcmVwb3J0ZWQgYW5kIHZhbGlkYXRlZCBJUHMgYmFubmVkIGZyb20gdGhlIENyb3dkc2VjIG5ldHdvcmsuCgpXaGVuIHVzZWQgd2l0aCBDcm93ZHNlYyBpdCB3aWxsIGxldmVyYWdlIHRoZSBsb2NhbCBBUEkgd2hpY2ggd2lsbCBhbmFseXplIFRyYWVmaWsgbG9ncyBhbmQgdGFrZSBkZWNpc2lvbnMgb24gdGhlIHJlcXVlc3RzIG1hZGUgYnkgdXNlcnMvYm90cy4gTWFsaWNpb3VzIGFjdG9ycyB3aWxsIGJlIGJhbm5lZCBiYXNlZCBvbiBwYXR0ZXJucyB1c2VkIGFnYWluc3QgeW91ciB3ZWJzaXRlLgoKQXBwc2VjIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGZyb20gcGx1Z2luIHZlcnNpb24gMS4yLjAgYW5kIENyb3dkc2VjIDEuNi4wLgoKVGhlIEFwcFNlYyBDb21wb25lbnQgb2ZmZXJzOgoKLSBMb3ctZWZmb3J0IHZpcnR1YWwgcGF0Y2hpbmcgY2FwYWJpbGl0aWVzLgotIFN1cHBvcnQgZm9yIHlvdXIgbGVnYWN5IE1vZFNlY3VyaXR5IHJ1bGVzLgotIENvbWJpbmluZyBjbGFzc2ljIFdBRiBiZW5lZml0cyB3aXRoIGFkdmFuY2VkIENyb3dkU2VjIGZlYXR1cmVzIGZvciBvdGhlcndpc2UgZGlmZmljdWx0IGFkdmFuY2VkIGJlaGF2aW9yIGRldGVjdGlvbi4KTW9yZSBpbmZvcm1hdGlvbiBvbiBhcHBzZWMgaW4gdGhlIFtDcm93ZHNlYyBEb2N1bWVudGF0aW9uXShodHRwczovL2RvYy5jcm93ZHNlYy5uZXQvZG9jcy9uZXh0L2FwcHNlYy9pbnRyby8pLgoKUmVtZWRpYXRpb24gb2ZmZXJlZCBieSBbQ3Jvd2RzZWNdKGh0dHBzOi8vZG9jcy5jcm93ZHNlYy5uZXQvdS9ib3VuY2Vycy9pbnRybykgYW5kIHN1cHBvcnRlZCBieSB0aGUgcGx1Z2luIGNhbiBiZSBlaXRoZXIgYGJhbmAgb3IgYGNhcHRjaGFgLiAgCkZvciB0aGUgYGJhbmAgcmVtZWRpYXRpb24gdGhlIHVzZXIgd2lsbCBiZSBibG9ja2VkIGluIFRyYWVmaWsgKEhUVFAgNDAzKS4gIApGb3IgdGhlIGBjYXB0Y2hhYCByZW1lZGlhdGlvbiwgdGhlIHVzZXIgd2lsbCBiZSByZWRpcmVjdGVkIHRvIGEgcGFnZSB0byBjb21wbGV0ZSBhIGNhcHRjaGEgY2hhbGxlbmdlLiAgCgpPbiBzdWNjZXNzZnVsbCBjb21wbGV0aW9uLCBoZSB3aWxsIGJlIGNsZWFuZWQgZm9yIGEgc3BlY2lmaWVkIHBlcmlvZCBvZiB0aW1lIGJlZm9yZSBhIG5ldyByZXNvbHV0aW9uIGNoYWxsZW5nZSBpcyBleHBlY3RlZCBpZiBDcm93ZHNlYyBzdGlsbCBoYXMgYSBkZWNpc2lvbiB0byB2ZXJpZnkgdGhlIHVzZXIgYmVoYXZpb3IuIFNlZSB0aGUgZXhhbXBsZSBjYXB0Y2hhIGZvciBtb3JlIGluZm9ybWF0aW9ucyBhbmQgY29uZmlndXJhdGlvbiBpbnRydWN0aW9ucy4gIApUaGUgZm9sbG93aW5nIGNhcHRjaGEgcHJvdmlkZXJzIGFyZSBzdXBwb3J0ZWQgbm93OgogLSBbaGNhcHRjaGFdKGh0dHBzOi8vd3d3LmhjYXB0Y2hhLmNvbS8pCiAtIFtyZWNhcHRjaGFdKGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vcmVjYXB0Y2hhL2Fib3V0LykKIC0gW3R1cm5zdGlsZV0oaHR0cHM6Ly93d3cuY2xvdWRmbGFyZS5jb20vZnItZnIvcHJvZHVjdHMvdHVybnN0aWxlLykKCgpUaGVyZSBhcmUgNSBvcGVyYXRpbmcgbW9kZXMgKENyb3dkc2VjTW9kZSkgZm9yIHRoaXMgcGx1Z2luOgoKfCBNb2RlIHwgRGVzY3JpcHRpb24gfAp8LS0tLS0tfC0tLS0tLXwKfCBub25lIHwgSWYgdGhlIGNsaWVudCBJUCBpcyBvbiBiYW4gbGlzdCwgaXQgd2lsbCBnZXQgYSBodHRwIGNvZGUgNDAzIHJlc3BvbnNlLiBPdGhlcndpc2UsIHJlcXVlc3Qgd2lsbCBjb250aW51ZSBhcyB1c3VhbC4gQWxsIHJlcXVlc3QgY2FsbCB0aGUgQ3Jvd2RzZWMgTEFQSSB8CnwgbGl2ZSB8IElmIHRoZSBjbGllbnQgSVAgaXMgb24gYmFuIGxpc3QsIGl0IHdpbGwgZ2V0IGEgaHR0cCBjb2RlIDQwMyByZXNwb25zZS4gT3RoZXJ3aXNlLCByZXF1ZXN0IHdpbGwgY29udGludWUgYXMgdXN1YWwuICAgIFRoZSBib3VuY2VyIGNhbiBsZXZlcmFnZSB1c2Ugb2YgYSBsb2NhbCBjYWNoZSBpbiBvcmRlciB0byByZWR1Y2UgdGhlIG51bWJlciBvZiByZXF1ZXN0cyBtYWRlIHRvIHRoZSBDcm93ZHNlYyBMQVBJLiBJdCB3aWxsIGtlZXAgaW4gY2FjaGUgdGhlIHN0YXR1cyBmb3IgZWFjaCBJUCB0aGF0IG1ha2VzIHF1ZXJpZXMuIHwKfCBzdHJlYW0gfCBTdHJlYW0gU3RyZWFtaW5nIG1vZGUgYWxsb3dzIHlvdSB0byBrZWVwIGluIHRoZSBsb2NhbCBjYWNoZSBvbmx5IHRoZSBCYW5uZWQgSVBzLCBldmVyeSByZXF1ZXN0cyB0aGF0IGRvZXMgbm90IGhpdCB0aGUgY2FjaGUgaXMgYXV0aG9yaXplZC4gRXZlcnkgbWludXRlLCB0aGUgY2FjaGUgaXMgdXBkYXRlZCB3aXRoIG5ld3MgZnJvbSB0aGUgQ3Jvd2RzZWMgTEFQSS4gfAp8IGFsb25lIHwgU3RhbmRhbG9uZSBtb2RlLCBzaW1pbGFyIHRvIHRoZSBzdHJlYW1pbmcgbW9kZSBidXQgdGhlIGJsYWNrbGlzdGVkIElQcyBhcmUgZmV0Y2hlZCBvbiB0aGUgQ0FQSS4gRXZlcnkgMiBob3VycywgdGhlIGNhY2hlIGlzIHVwZGF0ZWQgd2l0aCBuZXdzIGZyb20gdGhlIENyb3dkc2VjIENBUEkuIEl0IGRvZXMgbm90IGluY2x1ZGUgYW55IGxvY2FsbHkgYmFubmVkIElQLCBidXQgY2FuIHdvcmsgd2l0aG91dCBhIGNyb3dkc2VjIHNlcnZpY2UuIHwKfCBhcHBzZWMgfCBEaXNhYmxlIENyb3dkc2VjIElQIGNoZWNraW5nIGJ1dCBhcHBseSBDcm93ZHNlYyBBcHBzZWMgY2hlY2tpbmcuIFRoaXMgbW9kZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdoZW4gQ3Jvd2RzZWMgSVAgY2hlY2tpbmcgaXMgYXBwbGllZCBhdCB0aGUgRmlyZXdhbGwgTGV2ZWwuIHwKClRoZSBgc3RyZWFtaW5nIG1vZGVgIGlzIHJlY29tbWVuZGVkIGZvciBwZXJmb3JtYW5jZSwgZGVjaXNpb25zIGFyZSB1cGRhdGVkIGV2ZXJ5IDYwIHNlYyBieSBkZWZhdWx0IGFuZCB0aGF0J3MgdGhlIG9ubHkgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIFRyYWVmaWsgYW5kIENyb3dkc2VjLiBFdmVyeSByZXF1ZXN0IHRoYXQgaGFwcGVucyBoaXRzIHRoZSBjYWNoZSBmb3IgcXVpY2sgZGVjaXNpb25zLgoKVGhlIGNhY2hlIGNhbiBiZSBsb2NhbCB0byBUcmFlZmlrIHVzaW5nIHRoZSBmaWxlc3lzdGVtLCBvciBhIHNlcGFyYXRlIFJlZGlzIGluc3RhbmNlLiAgCgpCZWxvdyBhcmUgTWVybWFpZCBkaWFncmFtcyBkZXRhaWxsaW5nIGhvdyBlYWNoIG1vZGUgd29yazogIAoKPGRldGFpbHM+PHN1bW1hcnk+TW9kZSBub25lIHdvcmtmbG93PC9zdW1tYXJ5PgoKPiBBIEJhbiBkZWNpc2lvbiBleGlzdHMgaW4gQ3Jvd2RzZWNMQVBJCgpgYGBtZXJtYWlkCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgVXNlcgogICAgcGFydGljaXBhbnQgVHJhZWZpa1BsdWdpbgogICAgVXNlci0+PlRyYWVmaWtQbHVnaW46IENhbiBJIGFjY2VzcyB0aGF0IHdlYnBhZ2UKICAgIGNyZWF0ZSBwYXJ0aWNpcGFudCBDcm93ZHNlY0xBUEkKICAgIFRyYWVmaWtQbHVnaW4tLT4+Q3Jvd2RzZWNMQVBJOiBEb2VzIHRoZSBVc2VyIElQIGhhcyBhIENyb3dkc2VjIERlY2lzaW9uID8KICAgIERlc3Ryb3kgQ3Jvd2RzZWNMQVBJCiAgICBDcm93ZHNlY0xBUEktLT4+VHJhZWZpa1BsdWdpbjogWWVzIGEgYmFuIERlY2lzaW9uCiAgICBUcmFlZmlrUGx1Z2luLT4+VXNlcjogTm8sIEhUVFAgNDAzCmBgYAoKPiBObyBkZWNpc2lvbiBpbiBDcm93ZHNlY0xBUEkKCmBgYG1lcm1haWQKc2VxdWVuY2VEaWFncmFtCiAgICBwYXJ0aWNpcGFudCBVc2VyCiAgICBwYXJ0aWNpcGFudCBUcmFlZmlrUGx1Z2luCiAgICBVc2VyLT4+VHJhZWZpa1BsdWdpbjogQ2FuIEkgYWNjZXNzIHRoYXQgd2VicGFnZQogICAgY3JlYXRlIHBhcnRpY2lwYW50IENyb3dkc2VjTEFQSQogICAgVHJhZWZpa1BsdWdpbi0tPj5Dcm93ZHNlY0xBUEk6IERvZXMgdGhlIFVzZXIgSVAgaGFzIGEgY3Jvd2RzZWMgZGVjaXNpb24gPwogICAgRGVzdHJveSBDcm93ZHNlY0xBUEkKICAgIENyb3dkc2VjTEFQSS0tPj5UcmFlZmlrUGx1Z2luOiBOb3RoaW5nLCBhbGwgZ29vZCEKICAgIERlc3Ryb3kgVHJhZWZpa1BsdWdpbgogICAgVHJhZWZpa1BsdWdpbi0+PldlYnNlcnZlcjogRm9yd2FyZGluZyB0aGlzIEhUVFAgUmVxdWVzdCBmcm9tIFVzZXIKICAgIFdlYnNlcnZlci0+PlVzZXI6IEhUVFAgUmVzcG9uc2UKYGBgCgo8L2RldGFpbHM+Cgo8ZGV0YWlscz48c3VtbWFyeT5Nb2RlIGxpdmUgd29ya2Zsb3c8L3N1bW1hcnk+Cgo+IEEgQmFuIGRlY2lzaW9uIGV4aXN0cyBpbiBDcm93ZHNlY0xBUEkgYnV0IG5vdCBpbiBjYWNoZQoKYGBgbWVybWFpZApzZXF1ZW5jZURpYWdyYW0KICAgIHBhcnRpY2lwYW50IFVzZXIKICAgIHBhcnRpY2lwYW50IFRyYWVmaWtQbHVnaW4KICAgIFVzZXItPj5UcmFlZmlrUGx1Z2luOiBDYW4gSSBhY2Nlc3MgdGhhdCB3ZWJwYWdlCiAgICBjcmVhdGUgcGFydGljaXBhbnQgUGx1Z2luQ2FjaGUKICAgIFRyYWVmaWtQbHVnaW4tLT4+UGx1Z2luQ2FjaGU6IERvZXMgdGhlIFVzZXIgSVAgaGFzIGEgY3Jvd2RzZWMgZGVjaXNpb24gPwogICAgUGx1Z2luQ2FjaGUtLT4+VHJhZWZpa1BsdWdpbjogTm90aGluZywgYWxsIGdvb2QhCiAgICBjcmVhdGUgcGFydGljaXBhbnQgQ3Jvd2RzZWNMQVBJCiAgICBUcmFlZmlrUGx1Z2luLS0+PkNyb3dkc2VjTEFQSTogRG9lcyB0aGUgVXNlciBJUCBoYXMgYSBjcm93ZHNlYyBkZWNpc2lvbiA/CiAgICBEZXN0cm95IENyb3dkc2VjTEFQSQogICAgQ3Jvd2RzZWNMQVBJLS0+PlRyYWVmaWtQbHVnaW46IFllcyBhIGJhbiBEZWNpc2lvbgogICAgVHJhZWZpa1BsdWdpbi0tPj5QbHVnaW5DYWNoZTogU3RvcmUgdGhlIGluZm9ybWF0aW9uIGZvciB0aGlzIElQIGZvciBEZWZhdWx0RGVjaXNpb25TZWNvbmRzCiAgICBEZXN0cm95IFBsdWdpbkNhY2hlCiAgICBQbHVnaW5DYWNoZS0tPj5UcmFlZmlrUGx1Z2luOiBEb25lCiAgICBUcmFlZmlrUGx1Z2luLT4+VXNlcjogTm8sIEhUVFAgNDAzCmBgYAoKPiBObyBkZWNpc2lvbiBpbiBjYWNoZQoKYGBgbWVybWFpZApzZXF1ZW5jZURpYWdyYW0KICAgIHBhcnRpY2lwYW50IFVzZXIKICAgIHBhcnRpY2lwYW50IFRyYWVmaWtQbHVnaW4KICAgIFVzZXItPj5UcmFlZmlrUGx1Z2luOiBDYW4gSSBhY2Nlc3MgdGhhdCB3ZWJwYWdlCiAgICBjcmVhdGUgcGFydGljaXBhbnQgUGx1Z2luQ2FjaGUKICAgIFRyYWVmaWtQbHVnaW4tLT4+UGx1Z2luQ2FjaGU6IERvZXMgdGhlIFVzZXIgSVAgaGFzIGEgY3Jvd2RzZWMgZGVjaXNpb24gPwogICAgUGx1Z2luQ2FjaGUtLT4+VHJhZWZpa1BsdWdpbjogTm90aGluZywgYWxsIGdvb2QhCiAgICBjcmVhdGUgcGFydGljaXBhbnQgQ3Jvd2RzZWNMQVBJCiAgICBUcmFlZmlrUGx1Z2luLS0+PkNyb3dkc2VjTEFQSTogRG9lcyB0aGUgVXNlciBJUCBoYXMgYSBjcm93ZHNlYyBkZWNpc2lvbiA/CiAgICBEZXN0cm95IENyb3dkc2VjTEFQSQogICAgQ3Jvd2RzZWNMQVBJLS0+PlRyYWVmaWtQbHVnaW46IE5vdGhpbmcsIGFsbCBnb29kIQogICAgVHJhZWZpa1BsdWdpbi0tPj5QbHVnaW5DYWNoZTogU3RvcmUgdGhlIGluZm9ybWF0aW9uIGZvciB0aGlzIElQIGZvciBEZWZhdWx0RGVjaXNpb25TZWNvbmRzCiAgICBEZXN0cm95IFBsdWdpbkNhY2hlCiAgICBQbHVnaW5DYWNoZS0tPj5UcmFlZmlrUGx1Z2luOiBEb25lCiAgICBUcmFlZmlrUGx1Z2luLT4+V2Vic2VydmVyOiBGb3J3YXJkaW5nIHRoaXMgSFRUUCBSZXF1ZXN0IGZyb20gVXNlcgogICAgV2Vic2VydmVyLT4+VXNlcjogSFRUUCBSZXNwb25zZQpgYGAKCjwvZGV0YWlscz4KCjxkZXRhaWxzPjxzdW1tYXJ5Pk1vZGUgc3RyZWFtIHdvcmtmbG93PC9zdW1tYXJ5PgoKPiBDYWNoZSBTeW5jaHJvbml6YXRpb24gZXZlcnkgVXBkYXRlSW50ZXJ2YWxTZWNvbmRzCgpgYGBtZXJtYWlkCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgVHJhZWZpa1BsdWdpbgogICAgcGFydGljaXBhbnQgQ3Jvd2RzZWNMQVBJCiAgICBUcmFlZmlrUGx1Z2luLT4+Q3Jvd2RzZWNMQVBJOiBXaGF0IGFyZSB0aGUgY3VycmVudCBkZWNpc2lvbnMKICAgIERlc3Ryb3kgQ3Jvd2RzZWNMQVBJCiAgICBDcm93ZHNlY0xBUEktPj5UcmFlZmlrUGx1Z2luOiBIZXJlIGlzIHRoZSBsaXN0CiAgICBjcmVhdGUgcGFydGljaXBhbnQgUGx1Z2luQ2FjaGUKICAgIFRyYWVmaWtQbHVnaW4tLT4+UGx1Z2luQ2FjaGU6IFN0b3JlIHRoaXMgbGlzdAogICAgRGVzdHJveSBQbHVnaW5DYWNoZQogICAgUGx1Z2luQ2FjaGUtLT4+VHJhZWZpa1BsdWdpbjogRG9uZQpgYGAKCj4gQSBCYW4gZGVjaXNpb24gZXhpc3RzIGluIGNhY2hlCgpgYGBtZXJtYWlkCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgVXNlcgogICAgcGFydGljaXBhbnQgVHJhZWZpa1BsdWdpbgogICAgVXNlci0+PlRyYWVmaWtQbHVnaW46IENhbiBJIGFjY2VzcyB0aGF0IHdlYnBhZ2UKICAgIGNyZWF0ZSBwYXJ0aWNpcGFudCBQbHVnaW5DYWNoZQogICAgVHJhZWZpa1BsdWdpbi0tPj5QbHVnaW5DYWNoZTogRG9lcyB0aGUgVXNlciBJUCBoYXMgYSBjcm93ZHNlYyBkZWNpc2lvbiA/CiAgICBEZXN0cm95IFBsdWdpbkNhY2hlCiAgICBQbHVnaW5DYWNoZS0tPj5UcmFlZmlrUGx1Z2luOiBZZXMgYSBiYW4gZGVjaXNpb24KICAgIERlc3Ryb3kgVHJhZWZpa1BsdWdpbgogICAgVHJhZWZpa1BsdWdpbi0+PlVzZXI6IE5vLCBIVFRQIDQwMwpgYGAKCj4gTm8gZGVjaXNpb24gaW4gY2FjaGUKCmBgYG1lcm1haWQKc2VxdWVuY2VEaWFncmFtCiAgICBwYXJ0aWNpcGFudCBVc2VyCiAgICBwYXJ0aWNpcGFudCBUcmFlZmlrUGx1Z2luCiAgICBVc2VyLT4+VHJhZWZpa1BsdWdpbjogQ2FuIEkgYWNjZXNzIHRoYXQgd2VicGFnZQogICAgY3JlYXRlIHBhcnRpY2lwYW50IFBsdWdpbkNhY2hlCiAgICBUcmFlZmlrUGx1Z2luLS0+PlBsdWdpbkNhY2hlOiBEb2VzIHRoZSBVc2VyIElQIGhhcyBhIGNyb3dkc2VjIGRlY2lzaW9uID8KICAgIERlc3Ryb3kgUGx1Z2luQ2FjaGUKICAgIFBsdWdpbkNhY2hlLS0+PlRyYWVmaWtQbHVnaW46IE5vdGhpbmcsIGFsbCBnb29kIQogICAgRGVzdHJveSBUcmFlZmlrUGx1Z2luCiAgICBUcmFlZmlrUGx1Z2luLT4+V2Vic2VydmVyOiBGb3J3YXJkaW5nIHRoaXMgSFRUUCBSZXF1ZXN0IGZyb20gVXNlcgogICAgV2Vic2VydmVyLT4+VXNlcjogSFRUUCBSZXNwb25zZQpgYGAKCjwvZGV0YWlscz4KCjxkZXRhaWxzPjxzdW1tYXJ5Pk1vZGUgYWxvbmUgV29ya2Zsb3c8L3N1bW1hcnk+Cgo+IENhY2hlIFN5bmNocm9uaXphdGlvbiBldmVyeSAyIGhvdXJzIHRvIHRoZSBDcm93ZHNlYyBDZW50cmFsIEFQSQoKYGBgbWVybWFpZApzZXF1ZW5jZURpYWdyYW0KICAgIHBhcnRpY2lwYW50IFRyYWVmaWtQbHVnaW4KICAgIHBhcnRpY2lwYW50IENyb3dkc2VjQ0FQSQogICAgVHJhZWZpa1BsdWdpbi0+PkNyb3dkc2VjQ0FQSTogV2hhdCBhcmUgdGhlIGN1cnJlbnQgZGVjaXNpb25zIGZyb20gQ0FQSQogICAgRGVzdHJveSBDcm93ZHNlY0NBUEkKICAgIENyb3dkc2VjQ0FQSS0+PlRyYWVmaWtQbHVnaW46IEhlcmUgaXMgdGhlIGxpc3QKICAgIGNyZWF0ZSBwYXJ0aWNpcGFudCBQbHVnaW5DYWNoZQogICAgVHJhZWZpa1BsdWdpbi0tPj5QbHVnaW5DYWNoZTogU3RvcmUgdGhpcyBsaXN0CiAgICBEZXN0cm95IFBsdWdpbkNhY2hlCiAgICBQbHVnaW5DYWNoZS0tPj5UcmFlZmlrUGx1Z2luOiBEb25lCmBgYAoKPiBBIEJhbiBkZWNpc2lvbiBleGlzdHMgaW4gY2FjaGUKCmBgYG1lcm1haWQKc2VxdWVuY2VEaWFncmFtCiAgICBwYXJ0aWNpcGFudCBVc2VyCiAgICBwYXJ0aWNpcGFudCBUcmFlZmlrUGx1Z2luCiAgICBVc2VyLT4+VHJhZWZpa1BsdWdpbjogQ2FuIEkgYWNjZXNzIHRoYXQgd2VicGFnZQogICAgY3JlYXRlIHBhcnRpY2lwYW50IFBsdWdpbkNhY2hlCiAgICBUcmFlZmlrUGx1Z2luLS0+PlBsdWdpbkNhY2hlOiBEb2VzIHRoZSBVc2VyIElQIGhhcyBhIGNyb3dkc2VjIGRlY2lzaW9uID8KICAgIERlc3Ryb3kgUGx1Z2luQ2FjaGUKICAgIFBsdWdpbkNhY2hlLS0+PlRyYWVmaWtQbHVnaW46IFllcyBhIGJhbiBkZWNpc2lvbgogICAgRGVzdHJveSBUcmFlZmlrUGx1Z2luCiAgICBUcmFlZmlrUGx1Z2luLT4+VXNlcjogTm8sIEhUVFAgNDAzCmBgYAoKPiBObyBkZWNpc2lvbiBpbiBjYWNoZQoKYGBgbWVybWFpZApzZXF1ZW5jZURpYWdyYW0KICAgIHBhcnRpY2lwYW50IFVzZXIKICAgIHBhcnRpY2lwYW50IFRyYWVmaWtQbHVnaW4KICAgIFVzZXItPj5UcmFlZmlrUGx1Z2luOiBDYW4gSSBhY2Nlc3MgdGhhdCB3ZWJwYWdlCiAgICBjcmVhdGUgcGFydGljaXBhbnQgUGx1Z2luQ2FjaGUKICAgIFRyYWVmaWtQbHVnaW4tLT4+UGx1Z2luQ2FjaGU6IERvZXMgdGhlIFVzZXIgSVAgaGFzIGEgY3Jvd2RzZWMgZGVjaXNpb24gPwogICAgRGVzdHJveSBQbHVnaW5DYWNoZQogICAgUGx1Z2luQ2FjaGUtLT4+VHJhZWZpa1BsdWdpbjogTm90aGluZywgYWxsIGdvb2QhCiAgICBEZXN0cm95IFRyYWVmaWtQbHVnaW4KICAgIFRyYWVmaWtQbHVnaW4tPj5XZWJzZXJ2ZXI6IEZvcndhcmRpbmcgdGhpcyBIVFRQIFJlcXVlc3QgZnJvbSBVc2VyCiAgICBXZWJzZXJ2ZXItPj5Vc2VyOiBIVFRQIFJlc3BvbnNlCmBgYAoKPC9kZXRhaWxzPgoKPGRldGFpbHM+PHN1bW1hcnk+TW9kZSBhcHBzZWMgd29ya2Zsb3c8L3N1bW1hcnk+Cgo+IFRoZSByZXF1ZXN0IGlzIGRldGVjdGVkIGFzIG1hbGljaW91cwoKYGBgbWVybWFpZApzZXF1ZW5jZURpYWdyYW0KICAgIHBhcnRpY2lwYW50IFVzZXIKICAgIHBhcnRpY2lwYW50IFRyYWVmaWtQbHVnaW4KICAgIFVzZXItPj5UcmFlZmlrUGx1Z2luOiBDYW4gSSBhY2Nlc3MgdGhhdCB3ZWJwYWdlCiAgICBjcmVhdGUgcGFydGljaXBhbnQgQ3Jvd2RzZWNBcHBTZWMKICAgIFRyYWVmaWtQbHVnaW4tLT4+Q3Jvd2RzZWNBcHBTZWM6IElzIHRoaXMgcmVxdWVzdCBtYWxpY2lvdXMgPwogICAgRGVzdHJveSBDcm93ZHNlY0FwcFNlYwogICAgQ3Jvd2RzZWNBcHBTZWMtLT4+VHJhZWZpa1BsdWdpbjogWWVzIEkgdGhpbmsgc28KICAgIERlc3Ryb3kgVHJhZWZpa1BsdWdpbgogICAgVHJhZWZpa1BsdWdpbi0+PlVzZXI6IE5vLCBIVFRQIDQwMwpgYGAKCj4gVGhlIHJlcXVlc3QgaXMgbm90IGRldGVjdGVkIGFzIG1hbGljaW91cwoKYGBgbWVybWFpZApzZXF1ZW5jZURpYWdyYW0KICAgIHBhcnRpY2lwYW50IFVzZXIKICAgIHBhcnRpY2lwYW50IFRyYWVmaWtQbHVnaW4KICAgIFVzZXItPj5UcmFlZmlrUGx1Z2luOiBDYW4gSSBhY2Nlc3MgdGhhdCB3ZWJwYWdlCiAgICBjcmVhdGUgcGFydGljaXBhbnQgQ3Jvd2RzZWNBcHBTZWMKICAgIFRyYWVmaWtQbHVnaW4tLT4+Q3Jvd2RzZWNBcHBTZWM6IElzIHRoaXMgcmVxdWVzdCBtYWxpY2lvdXMgPwogICAgRGVzdHJveSBDcm93ZHNlY0FwcFNlYwogICAgQ3Jvd2RzZWNBcHBTZWMtLT4+VHJhZWZpa1BsdWdpbjogTm8gSSBkb24ndCB0aGluayBzbwogICAgRGVzdHJveSBUcmFlZmlrUGx1Z2luCiAgICBUcmFlZmlrUGx1Z2luLT4+V2Vic2VydmVyOiBGb3J3YXJkaW5nIHRoaXMgSFRUUCBSZXF1ZXN0IGZyb20gVXNlcgogICAgV2Vic2VydmVyLT4+VXNlcjogSFRUUCBSZXNwb25zZQpgYGAKCjwvZGV0YWlscz4KCjxkZXRhaWxzPjxzdW1tYXJ5PkNhcHRjaGEgZGVjaXNpb24gd29ya2Zsb3c8L3N1bW1hcnk+CgpgYGBtZXJtYWlkCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgVXNlcgogICAgcGFydGljaXBhbnQgVHJhZWZpa1BsdWdpbgogICAgVXNlci0+PlRyYWVmaWtQbHVnaW46IENhbiBJIGFjY2VzcyB0aGF0IHdlYnBhZ2UKICAgIGNyZWF0ZSBwYXJ0aWNpcGFudCBQbHVnaW5DYWNoZQogICAgVHJhZWZpa1BsdWdpbi0tPj5QbHVnaW5DYWNoZTogRG9lcyB0aGUgVXNlciBJUCBoYXMgYSBDcm93ZHNlYyBEZWNpc2lvbiA/CiAgICBQbHVnaW5DYWNoZS0tPj5UcmFlZmlrUGx1Z2luOiBZZXMgYSBDYXRwY2hhIERlY2lzaW9uCiAgICBUcmFlZmlrUGx1Z2luLT4+VXNlcjogUGxlYXNlIGNvbXBsZXRlIHRoaXMgY2FwdGNoYQogICAgVXNlci0+PlRyYWVmaWtQbHVnaW46IEZpbmUsIGRvbmUhCiAgICBjcmVhdGUgcGFydGljaXBhbnQgUHJvdmlkZXJDYXB0Y2hhCiAgICBUcmFlZmlrUGx1Z2luLS0+PlByb3ZpZGVyQ2FwdGNoYTogSXMgdGhlIHZhbGlkYXRpb24gT0sgPwogICAgRGVzdHJveSBQcm92aWRlckNhcHRjaGEgICAgCiAgICBQcm92aWRlckNhcHRjaGEtLT4+VHJhZWZpa1BsdWdpbjogWWVzCiAgICBUcmFlZmlrUGx1Z2luLS0+PlBsdWdpbkNhY2hlOiBTZXQgdGhlIFVzZXIgSVAgQ2xlYW4gZm9yIGNhcHRjaGFHcmFjZVBlcmlvZFNlY29uZHMKICAgIERlc3Ryb3kgUGx1Z2luQ2FjaGUKICAgIFBsdWdpbkNhY2hlLS0+PlRyYWVmaWtQbHVnaW46IERvbmUKICAgIERlc3Ryb3kgVHJhZWZpa1BsdWdpbgogICAgVHJhZWZpa1BsdWdpbi0+PldlYnNlcnZlcjogRm9yd2FyZGluZyB0aGlzIEhUVFAgUmVxdWVzdCBmcm9tIFVzZXIKICAgIFdlYnNlcnZlci0+PlVzZXI6IEhUVFAgUmVzcG9uc2UKYGBgCgo8L2RldGFpbHM+CgojIyBVc2FnZQoKVG8gZ2V0IHN0YXJ0ZWQsIHVzZSB0aGUgYGRvY2tlci1jb21wb3NlLnltbGAgZmlsZS4KCllvdSBjYW4gcnVuIGl0IHdpdGg6CmBgYGJhc2gKbWFrZSBydW4KYGBgCgojIyMgTm90ZQoKKiovIVwgQ2FjaGUgaXMgc2hhcmVkIGJ5IGFsbCBzZXJ2aWNlcyoqCipUaGlzIG1lYW5zIGlmIGFuIElQIGlzIGJhbm5lZCwgYWxsIHNlcnZpY2VzIHdoaWNoIGFyZSBwcm90ZWN0ZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhlIHBsdWdpbiB3aWxsIGRlbnkgcmVxdWVzdHMgZnJvbSB0aGF0IElQKgpPbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgcGx1Z2luIGlzICpwb3NzaWJsZSouCgojIyMgVmFyaWFibGVzCi0gRW5hYmxlZAogIC0gYm9vbAogIC0gZGVmYXVsdDogZmFsc2UKICAtIEVuYWJsZSB0aGUgcGx1Z2luCi0gTG9nTGV2ZWwKICAtIHN0cmluZwogIC0gZGVmYXVsdDogYElORk9gLCBleHBlY3RlZCB2YWx1ZXMgYXJlOiBgSU5GT2AsIGBERUJVR2AKLSBDcm93ZHNlY01vZGUKICAtIHN0cmluZwogIC0gZGVmYXVsdDogYGxpdmVgLCBleHBlY3RlZCB2YWx1ZXMgYXJlOiBgbm9uZWAsIGBsaXZlYCwgYHN0cmVhbWAsIGBhbG9uZWAsIGBhcHBzZWNgCi0gQ3Jvd2RzZWNBcHBzZWNFbmFibGVkCiAgLSBib29sCiAgLSBkZWZhdWx0OiBmYWxzZQogIC0gRW5hYmxlIENyb3dkc2VjIEFwcHNlYyBTZXJ2ZXIgKFdBRikuCi0gQ3Jvd2RzZWNBcHBzZWNIb3N0CiAgLSBzdHJpbmcKICAtIGRlZmF1bHQ6ICJjcm93ZHNlYzo3NDIyIgogIC0gQ3Jvd2RzZWMgQXBwc2VjIFNlcnZlciBhdmFpbGFibGUgb24gd2hpY2ggaG9zdCBhbmQgcG9ydC4gVGhlIHNjaGVtZSB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIENyb3dkc2VjTGFwaVNjaGVtZSB2YXIuCi0gQ3Jvd2RzZWNBcHBzZWNGYWlsdXJlQmxvY2sKICAtIGJvb2wKICAtIGRlZmF1bHQ6IHRydWUKICAtIEJsb2NrIHJlcXVlc3Qgd2hlbiBDcm93ZHNlYyBBcHBzZWMgU2VydmVyIGhhdmUgYSBbc3RhdHVzIDUwMF0oaHR0cHM6Ly9kb2NzLmNyb3dkc2VjLm5ldC9kb2NzL25leHQvYXBwc2VjL3Byb3RvY29sI3Jlc3BvbnNlLWNvZGUpLgotIENyb3dkc2VjTGFwaVNjaGVtZQogIC0gc3RyaW5nCiAgLSBkZWZhdWx0OiBgaHR0cGAsIGV4cGVjdGVkIHZhbHVlcyBhcmU6IGBodHRwYCwgYGh0dHBzYAotIENyb3dkc2VjTGFwaUhvc3QKICAtIHN0cmluZwogIC0gZGVmYXVsdDogImNyb3dkc2VjOjgwODAiCiAgLSBDcm93ZHNlYyBMQVBJIGF2YWlsYWJsZSBvbiB3aGljaCBob3N0IGFuZCBwb3J0LgotIENyb3dkc2VjTGFwaUtleQogIC0gc3RyaW5nCiAgLSBkZWZhdWx0OiAiIgogIC0gQ3Jvd2RzZWMgTEFQSSBrZXkgZm9yIHRoZSBib3VuY2VyLiAKLSBDcm93ZHNlY0xhcGlUbHNJbnNlY3VyZVZlcmlmeQogIC0gYm9vbAogIC0gZGVmYXVsdDogZmFsc2UKICAtIERpc2FibGUgdmVyaWZpY2F0aW9uIG9mIGNlcnRpZmljYXRlIHByZXNlbnRlZCBieSBDcm93ZHNlYyBMQVBJCi0gQ3Jvd2RzZWNMYXBpVGxzQ2VydGlmaWNhdGVBdXRob3JpdHkKICAtIHN0cmluZwogIC0gZGVmYXVsdDogIiIKICAtIFBFTS1lbmNvZGVkIENlcnRpZmljYXRlIEF1dGhvcml0eSBvZiB0aGUgQ3Jvd2RzZWMgTEFQSQotIENyb3dkc2VjTGFwaVRsc0NlcnRpZmljYXRlQm91bmNlcgogIC0gc3RyaW5nCiAgLSBkZWZhdWx0OiAiIgogIC0gUEVNLWVuY29kZWQgY2xpZW50IENlcnRpZmljYXRlIG9mIHRoZSBCb3VuY2VyCi0gQ3Jvd2RzZWNMYXBpVGxzQ2VydGlmaWNhdGVCb3VuY2VyS2V5CiAgLSBzdHJpbmcKICAtIGRlZmF1bHQ6ICIiCiAgLSBQRU0tZW5jb2RlZCBjbGllbnQgcHJpdmF0ZSBrZXkgb2YgdGhlIEJvdW5jZXIKLSBDbGllbnRUcnVzdGVkSVBzCiAgLSBzdHJpbmcgCiAgLSBkZWZhdWx0OiBbXQogIC0gTGlzdCBvZiBjbGllbnQgSVBzIHRvIHRydXN0LCB0aGV5IHdpbGwgYnlwYXNzIGFueSBjaGVjayBmcm9tIHRoZSBib3VuY2VyIG9yIGNhY2hlICh1c2VmdWwgZm9yIExBTiBvciBWUE4gSVApCi0gRm9yd2FyZGVkSGVhZGVyc1RydXN0ZWRJUHMKICAtIFtdc3RyaW5nCiAgLSBkZWZhdWx0OiBbXQogIC0gTGlzdCBvZiBJUHMgb2YgdHJ1c3RlZCBQcm94aWVzIHRoYXQgYXJlIGluIGZyb250IG9mIHRyYWVmaWsgKGV4OiBDbG91ZGZsYXJlKQotIEZvcndhcmRlZEhlYWRlcnNDdXN0b21OYW1lCiAgLSBzdHJpbmcKICAtIGRlZmF1bHQ6ICJYLUZvcndhcmRlZC1Gb3IiCiAgLSBOYW1lIG9mIHRoZSBoZWFkZXIgd2hlcmUgdGhlIHJlYWwgSVAgb2YgdGhlIGNsaWVudCBzaG91bGQgYmUgcmV0cmlldmVkCi0gUmVkaXNDYWNoZUVuYWJsZWQKICAtIGJvb2wKICAtIGRlZmF1bHQ6IGZhbHNlCiAgLSBlbmFibGUgUmVkaXMgY2FjaGUgaW5zdGVhZCBvZiBmaWxlc3lzdGVtIGNhY2hlCi0gUmVkaXNDYWNoZUhvc3QKICAtIHN0cmluZyAKICAtIGRlZmF1bHQ6ICJyZWRpczo2Mzc5IgogIC0gaG9zdG5hbWUgYW5kIHBvcnQgZm9yIHRoZSBSZWRpcyBzZXJ2aWNlCi0gUmVkaXNDYWNoZVBhc3N3b3JkCiAgLSBzdHJpbmcgCiAgLSBkZWZhdWx0OiAiIgogIC0gUGFzc3dvcmQgZm9yIHRoZSBSZWRpcyBzZXJ2aWNlCi0gUmVkaXNDYWNoZURhdGFiYXNlCiAgLSBzdHJpbmcgCiAgLSBkZWZhdWx0OiAiIgogIC0gRGF0YWJhc2Ugc2VsZWN0aW9uIGZvciB0aGUgUmVkaXMgc2VydmljZQotIEhUVFBUaW1lb3V0U2Vjb25kcwogIC0gaW50NjQKICAtIGRlZmF1bHQ6IDEwCiAgLSBEZWZhdWx0IHRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgY29udGFjdGluZyBDcm93ZHNlYyBMQVBJCi0gVXBkYXRlSW50ZXJ2YWxTZWNvbmRzCiAgLSBpbnQ2NAogIC0gZGVmYXVsdDogNjAKICAtIFVzZWQgb25seSBpbiBgc3RyZWFtYCBtb2RlLCB0aGUgaW50ZXJ2YWwgYmV0d2VlbiByZXF1ZXN0cyB0byBmZXRjaCBibGFja2xpc3RlZCBJUHMgZnJvbSBMQVBJCi0gRGVmYXVsdERlY2lzaW9uU2Vjb25kcwogIC0gaW50NjQKICAtIGRlZmF1bHQ6IDYwCiAgLSBVc2VkIG9ubHkgaW4gYGxpdmVgIG1vZGUsIG1heGltdW0gZGVjaXNpb24gZHVyYXRpb24KLSBDcm93ZHNlY0NhcGlNYWNoaW5lSWQKICAtIHN0cmluZwogIC0gVXNlZCBvbmx5IGluIGBhbG9uZWAgbW9kZSwgbG9naW4gZm9yIENyb3dkc2VjIENBUEkKLSBDcm93ZHNlY0NhcGlQYXNzd29yZAogIC0gc3RyaW5nCiAgLSBVc2VkIG9ubHkgaW4gYGFsb25lYCBtb2RlLCBwYXNzd29yZCBmb3IgQ3Jvd2RzZWMgQ0FQSQotIENyb3dkc2VjQ2FwaVNjZW5hcmlvcwogIC0gW11zdHJpbmcKICAtIFVzZWQgb25seSBpbiBgYWxvbmVgIG1vZGUsIHNjZW5hcmlvcyBmb3IgQ3Jvd2RzZWMgQ0FQSQotIENhcHRjaGFQcm92aWRlcgogIC0gc3RyaW5nCiAgLSBQcm92aWRlciB0byB2YWxpZGF0ZSB0aGUgY2FwdGNoYSwgZXhwZWN0ZWQgdmFsdWVzIGFyZTogYGhjYXB0Y2hhYCwgYHJlY2FwdGNoYWAsIGB0dXJuc3RpbGVgCi0gQ2FwdGNoYVNpdGVLZXkKICAtIHN0cmluZwogIC0gU2l0ZSBrZXkgZm9yIHRoZSBjYXB0Y2hhIHByb3ZpZGVyCi0gQ2FwdGNoYVNlY3JldEtleQogIC0gc3RyaW5nCiAgLSBTaXRlIHNlY3JldCBrZXkgZm9yIHRoZSBjYXB0Y2hhIHByb3ZpZGVyCi0gQ2FwdGNoYUdyYWNlUGVyaW9kU2Vjb25kcwogIC0gaW50NjQKICAtIGRlZmF1bHQ6IDE4MDAgKD0gMzAgbWludXRlcykKICAtIFBlcmlvZCBhZnRlciB2YWxpZGF0aW9uIG9mIGEgY2FwdGNoYSBiZWZvcmUgYSBuZXcgdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBpZiBDcm93ZHNlYyBkZWNpc2lvbiBpcyBzdGlsbCB2YWxpZAotIENhcHRjaGFIVE1MRmlsZVBhdGgKICAtIHN0cmluZwogIC0gZGVmYXVsdDogL2NhcHRjaGEuaHRtbAogIC0gUGF0aCB3aGVyZSB0aGUgY2FwdGNoYSB0ZW1wbGF0ZSBpcyBzdG9yZWQKLSBCYW5IVE1MRmlsZVBhdGgKICAtIHN0cmluZwogIC0gZGVmYXVsdDogIiIKICAtIFBhdGggd2hlcmUgdGhlIGJhbiBodG1sIGZpbGUgaXMgc3RvcmVkIChkZWZhdWx0IGVtcHR5ICIiPWRpc2FibGVkKQoKIyMjIENvbmZpZ3VyYXRpb24KCkZvciBlYWNoIHBsdWdpbiwgdGhlIFRyYWVmaWsgc3RhdGljIGNvbmZpZ3VyYXRpb24gbXVzdCBkZWZpbmUgdGhlIG1vZHVsZSBuYW1lIChhcyBpcyB1c3VhbCBmb3IgR28gcGFja2FnZXMpLgoKVGhlIGZvbGxvd2luZyBkZWNsYXJhdGlvbiAoZ2l2ZW4gaGVyZSBpbiBZQU1MKSBkZWZpbmVzIGEgcGx1Z2luOgo+IE5vdGUgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byBjb3B5IGFsbCB0aG9zZXMgc2V0dGluZ3MgYnV0IG9ubHkgdGhlIG9uZXMgeW91IHdhbnQgdG8gdXNlLiAgCj4gU2VlIHRoZSBleGFtcGxlcyBmb3IgYWR2YW5jZWQgdXNhZ2UuCgpgYGB5YW1sCiMgU3RhdGljIGNvbmZpZ3VyYXRpb24KCmV4cGVyaW1lbnRhbDoKICBwbHVnaW5zOgogICAgYm91bmNlcjoKICAgICAgbW9kdWxlTmFtZTogZ2l0aHViLmNvbS9tYXhsZXJlYm91cmcvY3Jvd2RzZWMtYm91bmNlci10cmFlZmlrLXBsdWdpbgogICAgICB2ZXJzaW9uOiB2WC5ZLlogIyBUbyB1cGRhdGUKYGBgCgpgYGB5YW1sCiMgRHluYW1pYyBjb25maWd1cmF0aW9uCgpodHRwOgogIHJvdXRlcnM6CiAgICBteS1yb3V0ZXI6CiAgICAgIHJ1bGU6IGhvc3QoYHdob2FtaS5sb2NhbGhvc3RgKQogICAgICBzZXJ2aWNlOiBzZXJ2aWNlLWZvbwogICAgICBlbnRyeVBvaW50czoKICAgICAgICAtIHdlYgogICAgICBtaWRkbGV3YXJlczoKICAgICAgICAtIGNyb3dkc2VjCgogIHNlcnZpY2VzOgogICAgc2VydmljZS1mb286CiAgICAgIGxvYWRCYWxhbmNlcjoKICAgICAgICBzZXJ2ZXJzOgogICAgICAgICAgLSB1cmw6IGh0dHA6Ly8xMjcuMC4wLjE6NTAwMAogIAogIG1pZGRsZXdhcmVzOgogICAgY3Jvd2RzZWM6CiAgICAgIHBsdWdpbjoKICAgICAgICBib3VuY2VyOgogICAgICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgICAgIGxvZ0xldmVsOiBERUJVRwogICAgICAgICAgdXBkYXRlSW50ZXJ2YWxTZWNvbmRzOiA2MAogICAgICAgICAgZGVmYXVsdERlY2lzaW9uU2Vjb25kczogNjAKICAgICAgICAgIGh0dHBUaW1lb3V0U2Vjb25kczogMTAKICAgICAgICAgIGNyb3dkc2VjTW9kZTogbGl2ZQogICAgICAgICAgY3Jvd2RzZWNBcHBzZWNFbmFibGVkOiBmYWxzZQogICAgICAgICAgY3Jvd2RzZWNBcHBzZWNIb3N0OiBjcm93ZHNlYzo3NDIyCiAgICAgICAgICBjcm93ZHNlY0FwcHNlY0ZhaWx1cmVCbG9jazogdHJ1ZQogICAgICAgICAgY3Jvd2RzZWNMYXBpS2V5OiBwcml2YXRlS2V5LWZvbwogICAgICAgICAgY3Jvd2RzZWNMYXBpS2V5RmlsZTogL2V0Yy90cmFlZmlrL2NzLXByaXZhdGVLZXktZm9vCiAgICAgICAgICBjcm93ZHNlY0xhcGlIb3N0OiBjcm93ZHNlYzo4MDgwCiAgICAgICAgICBjcm93ZHNlY0xhcGlTY2hlbWU6IGh0dHAKICAgICAgICAgIGNyb3dkc2VjTGFwaVRMU0luc2VjdXJlVmVyaWZ5OiBmYWxzZQogICAgICAgICAgY3Jvd2RzZWNDYXBpTWFjaGluZUlkOiBsb2dpbgogICAgICAgICAgY3Jvd2RzZWNDYXBpUGFzc3dvcmQ6IHBhc3N3b3JkCiAgICAgICAgICBjcm93ZHNlY0NhcGlTY2VuYXJpb3M6CiAgICAgICAgICAgIC0gY3Jvd2RzZWN1cml0eS9odHRwLXBhdGgtdHJhdmVyc2FsLXByb2JpbmcKICAgICAgICAgICAgLSBjcm93ZHNlY3VyaXR5L2h0dHAteHNzLXByb2JpbmcKICAgICAgICAgICAgLSBjcm93ZHNlY3VyaXR5L2h0dHAtZ2VuZXJpYy1iZgogICAgICAgICAgZm9yd2FyZGVkSGVhZGVyc1RydXN0ZWRJUHM6IAogICAgICAgICAgICAtIDEwLjAuMTAuMjMvMzIKICAgICAgICAgICAgLSAxMC4wLjIwLjAvMjQKICAgICAgICAgIGNsaWVudFRydXN0ZWRJUHM6IAogICAgICAgICAgICAtIDE5Mi4xNjguMS4wLzI0CiAgICAgICAgICBmb3J3YXJkZWRIZWFkZXJzQ3VzdG9tTmFtZTogWC1DdXN0b20tSGVhZGVyCiAgICAgICAgICByZWRpc0NhY2hlRW5hYmxlZDogZmFsc2UKICAgICAgICAgIHJlZGlzQ2FjaGVIb3N0OiAicmVkaXM6NjM3OSIKICAgICAgICAgIHJlZGlzQ2FjaGVQYXNzd29yZDogcGFzc3dvcmQKICAgICAgICAgIHJlZGlzQ2FjaGVEYXRhYmFzZTogIjUiCiAgICAgICAgICBjcm93ZHNlY0xhcGlUTFNDZXJ0aWZpY2F0ZUF1dGhvcml0eTogfC0KICAgICAgICAgICAgLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCiAgICAgICAgICAgIE1JSUVCekNDQXUrZ0F3SUJBZ0lDRUFBd0RRWUpLb1pJaHZjTkFRRUxCUUF3Z1pReEN6QUpCZ05WQkFZVEFsVlQKICAgICAgICAgICAgLi4uCiAgICAgICAgICAgIFEwdmVlTnpCUVhnMWYvSnhmZUEzOUlESVgxa2lDZjcxdEdsVAogICAgICAgICAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAgICAgICBjcm93ZHNlY0xhcGlUTFNDZXJ0aWZpY2F0ZUF1dGhvcml0eUZpbGU6IC9ldGMvdHJhZWZpay9jcm93ZHNlYy1jZXJ0cy9jYS5wZW0KICAgICAgICAgIGNyb3dkc2VjTGFwaVRMU0NlcnRpZmljYXRlQm91bmNlcjogfC0KICAgICAgICAgICAgLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCiAgICAgICAgICAgIE1JSUVIakNDQXdhZ0F3SUJBZ0lVT0JUczFlcWthQVVjUHBsenRVcjJ4UmFwdk5Bd0RRWUpLb1pJaHZjTkFRRUwKICAgICAgICAgICAgLi4uCiAgICAgICAgICAgIFJhWEFuWVlVVlJibFMxam1lUGVtaDM4OGhGeGJtcnBHMnBJVHg4QjVGTVVMcUhvajExbzJSbDBnU1Y2dEhJSHoKICAgICAgICAgICAgTjJVPQogICAgICAgICAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAgICAgICBjcm93ZHNlY0xhcGlUTFNDZXJ0aWZpY2F0ZUJvdW5jZXJGaWxlOiAvZXRjL3RyYWVmaWsvY3Jvd2RzZWMtY2VydHMvYm91bmNlci5wZW0KICAgICAgICAgIGNyb3dkc2VjTGFwaVRMU0NlcnRpZmljYXRlQm91bmNlcktleTogfC0KICAgICAgICAgICAgLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQogICAgICAgICAgICBNSUlFb2dJQkFBS0NBUUVBdFlRbmJKcWlmSCtaeW1lUHlsRHhHR0xJdXh6Y0FVVTQvYWpOaitxUkFkSS9VeDNkCiAgICAgICAgICAgIC4uLgogICAgICAgICAgICBpYzVjRFJvNi9WRDNDUzNNWXp5QmNpYmFHYVYzNG5yMEcvcEkrS0Vxa1lDaHprL1BaUkE9CiAgICAgICAgICAgIC0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCiAgICAgICAgICBjcm93ZHNlY0xhcGlUTFNDZXJ0aWZpY2F0ZUJvdW5jZXJLZXlGaWxlOiAvZXRjL3RyYWVmaWsvY3Jvd2RzZWMtY2VydHMvYm91bmNlci1rZXkucGVtCiAgICAgICAgICBjYXB0Y2hhUHJvdmlkZXI6IGhjYXB0Y2hhCiAgICAgICAgICBjYXB0Y2hhU2l0ZUtleTogRklYTUUKICAgICAgICAgIGNhcHRjaGFTZWNyZXRLZXk6IEZJWE1FCiAgICAgICAgICBjYXB0Y2hhR3JhY2VQZXJpb2RTZWNvbmRzOiAxODAwCiAgICAgICAgICBjYXB0Y2hhSFRNTEZpbGVQYXRoOiAvY2FwdGNoYS5odG1sCiAgICAgICAgICBiYW5IVE1MRmlsZVBhdGg6IGJhbi5odG1sCmBgYAoKIyMjIyBGaWxsIHZhcmlhYmxlIHdpdGggdmFsdWUgb2YgZmlsZQoKYENyb3dkc2VjTGFwaVRsc0NlcnRpZmljYXRlQm91bmNlcktleWAsIGBDcm93ZHNlY0xhcGlUbHNDZXJ0aWZpY2F0ZUJvdW5jZXJgLCBgQ3Jvd2RzZWNMYXBpVGxzQ2VydGlmaWNhdGVBdXRob3JpdHlgLCBgQ3Jvd2RzZWNDYXBpTWFjaGluZUlkYCwgYENyb3dkc2VjQ2FwaVBhc3N3b3JkYCwgYENyb3dkc2VjTGFwaUtleWAsIGBDYXB0Y2hhU2l0ZUtleWAgYW5kIGBDYXB0Y2hhU2VjcmV0S2V5YCBjYW4gYmUgcHJvdmlkZWQgd2l0aCB0aGUgY29udGVudCBhcyByYXcgb3IgdGhyb3VnaCBhIGZpbGUgcGF0aCB0aGF0IFRyYWVmaWsgY2FuIHJlYWQuICAKVGhlIGZpbGUgdmFyaWFibGUgd2lsbCBiZSB1c2VkIGFzIHByZWZlcmVuY2UgaWYgYm90aCBjb250ZW50IGFuZCBmaWxlIGFyZSBwcm92aWRlZCBmb3IgdGhlIHNhbWUgdmFyaWFibGUuCgpGb3JtYXQgaXM6ICAKLSBDb250ZW50OiBWYXJpYWJsZU5hbWU6IFhYWAotIEZpbGUgICA6IFZhcmlhYmxlTmFtZUZpbGU6IC9wYXRoCgojIyMjIEF1dGhlbnRpY2F0ZSB3aXRoIExBUEkKCllvdSBjYW4gYXV0aGVudGljYXRlIHRvIHRoZSBMQVBJIGVpdGhlciB3aXRoIExBUElLRVkgb3IgYnkgdXNpbmcgY2xpZW50IGNlcnRpZmljYXRlcy4gIApQbGVhc2Ugc2VlIGJlbG93IGZvciBtb3JlIGRldGFpbHMgb24gZWFjaCBvcHRpb24uCgojIyMjIEdlbmVyYXRlIExBUEkgS0VZCllvdSBjYW4gZ2VuZXJhdGUgYSBjcm93ZHNlYyBBUEkga2V5IGZvciB0aGUgTEFQSS4gIApZb3UgY2FuIGZvbGxvdyB0aGUgZG9jdW1lbnRhdGlvbiBoZXJlOiBbZG9jcy5jcm93ZHNlYy5uZXQvZG9jcy91c2VyX2d1aWRlcy9sYXBpX21nbXRdKGh0dHBzOi8vZG9jcy5jcm93ZHNlYy5uZXQvZG9jcy91c2VyX2d1aWRlcy9sYXBpX21nbXQpCgpgYGBiYXNoCmRvY2tlciBjb21wb3NlIC1mIGRvY2tlci1jb21wb3NlLWxvY2FsLnltbCB1cCAtZCBjcm93ZHNlYwpkb2NrZXIgZXhlYyBjcm93ZHNlYyBjc2NsaSBib3VuY2VycyBhZGQgY3Jvd2RzZWNCb3VuY2VyCmBgYAoKVGhpcyBMQVBJIGtleSBtdXN0IGJlIHNldCB3aGVyZSBpcyBub3RlZCBGSVhNRS1MQVBJLUtFWSBpbiB0aGUgZG9ja2VyLWNvbXBvc2UueW1sCmBgYHlhbWwKLi4uCndob2FtaToKICBsYWJlbHM6CiAgICAtICJ0cmFlZmlrLmh0dHAubWlkZGxld2FyZXMuY3Jvd2RzZWMucGx1Z2luLmJvdW5jZXIuY3Jvd2RzZWNsYXBpa2V5PUZJWE1FLUxBUEktS0VZIgogICAgLSAidHJhZWZpay5odHRwLm1pZGRsZXdhcmVzLmNyb3dkc2VjLnBsdWdpbi5ib3VuY2VyLmNyb3dkc2VjbGFwaXNjaGVtZT1odHRwIgogICAgLSAidHJhZWZpay5odHRwLm1pZGRsZXdhcmVzLmNyb3dkc2VjLnBsdWdpbi5ib3VuY2VyLmNyb3dkc2VjbGFwaWhvc3Q9Y3Jvd2RzZWM6ODA4MCIKLi4uCmNyb3dkc2VjOgogIGVudmlyb25tZW50OgogICAgQk9VTkNFUl9LRVlfVFJBRUZJSzogRklYTUUtTEFQSS1LRVkKLi4uCmBgYAoKTm90ZToKPiBDcm93ZHNlYyBkb2VzIG5vdCByZXF1aXJlIGEgc3BlY2lmaWMgZm9ybWF0IGZvciBsYSBMQVBJLWtleSwgeW91IG1heSB1c2Ugc29tZXRoaW5nIGxpa2UgRklYTUUtTEFQSS1LRVkgYnV0IHRoYXQgaXMgbm90IHJlY29tbWFuZGVkIGZvciBvYnZpb3VzIHJlYXNvbnMKCllvdSBjYW4gdGhlbiBydW4gYWxsIHRoZSBjb250YWluZXJzOgpgYGBiYXNoCmRvY2tlciBjb21wb3NlIHVwIC1kCmBgYAoKIyMjIyBVc2UgY2VydGlmaWNhdGVzIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIENyb3dkU2VjCgpZb3UgY2FuIGZvbGxvdyB0aGUgZXhhbXBsZSBpbiBgZXhhbXBsZXMvdGxzLWF1dGhgIHRvIHZpZXcgaG93IHRvIGF1dGhlbnRpY2F0ZSB3aXRoIGNsaWVudCBjZXJ0aWZpY2F0ZXMgd2l0aCB0aGUgTEFQSS4gIApJbiB0aGF0IGNhc2UsIGNvbW11bmljYXRpb25zIHdpdGggdGhlIExBUEkgbXVzdCBnbyB0aHJvdWdoIEhUVFBTLgoKQSBzY3JpcHQgaXMgYXZhaWxhYmxlIHRvIGdlbmVyYXRlIGNlcnRpZmljYXRlcyBpbiBgZXhhbXBsZXMvdGxzLWF1dGgvZ2VuY2VydHMuc2hgIGFuZCBtdXN0IGJlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgaW5wdXRzIGZvciB0aGUgUEtJIGNyZWF0aW9uLgoKIyMjIyBVc2UgSFRUUFMgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgTEFQSQoKVG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgTEFQSSBpbiBIVFRQUyB5b3UgbmVlZCB0byBlaXRoZXIgYWNjZXB0IGFueSBjZXJ0aWZpY2F0ZXMgYnkgc2V0dGluZyB0aGUgYGNyb3dkc2VjTGFwaVRMU0luc2VjdXJlVmVyaWZ5YCB0byB0cnVlIG9yIGFkZCB0aGUgQ0EgdXNlZCBieSB0aGUgc2VydmVyIGNlcnRpZmljYXRlIG9mIENyb3dkc2VjIHVzaW5nIGBjcm93ZHNlY0xhcGlUTFNDZXJ0aWZpY2F0ZUF1dGhvcml0eWAgb3IgYGNyb3dkc2VjTGFwaVRMU0NlcnRpZmljYXRlQXV0aG9yaXR5RmlsZWAuClNldCB0aGUgYGNyb3dkc2VjTGFwaVNjaGVtZWAgdG8gaHR0cHMuCgpDcm93ZHNlYyBtdXN0IGJlIGxpc3RlbmluZyBpbiBIVFRQUyBmb3IgdGhpcyB0byB3b3JrLgpQbGVhc2Ugc2VlIHRoZSBbdGxzLWF1dGggZXhhbXBsZV0oaHR0cHM6Ly9naXRodWIuY29tL21heGxlcmVib3VyZy9jcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luL2Jsb2IvbWFpbi9leGFtcGxlcy90bHMtYXV0aC9SRUFETUUubWQpIG9yIHRoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uOiBbZG9jcy5jcm93ZHNlYy5uZXQvZG9jcy9sb2NhbF9hcGkvdGxzX2F1dGgvXShodHRwczovL2RvY3MuY3Jvd2RzZWMubmV0L2RvY3MvbG9jYWxfYXBpL3Rsc19hdXRoLykKCiMjIyMgTWFudWFsbHkgYWRkIGFuIElQIHRvIHRoZSBibG9ja2xpc3QgKGZvciB0ZXN0aW5nIHB1cnBvc2VzKQoKYGBgYmFzaApkb2NrZXIgY29tcG9zZSB1cCAtZCBjcm93ZHNlYwpkb2NrZXIgZXhlYyBjcm93ZHNlYyBjc2NsaSBkZWNpc2lvbnMgYWRkIC0taXAgMTAuMC4wLjEwIC1kIDEwbSAjIHRoaXMgd2lsbCBiZSBlZmZlY3RpdmUgMTBtaW4KZG9ja2VyIGV4ZWMgY3Jvd2RzZWMgY3NjbGkgZGVjaXNpb25zIHJlbW92ZSAtLWlwIDEwLjAuMC4xMApkb2NrZXIgZXhlYyBjcm93ZHNlYyBjc2NsaSBkZWNpc2lvbnMgYWRkIC0taXAgMTAuMC4wLjEwIC1kIDEwbSAtdCBjYXB0Y2hhICMgdGhpcyB3aWxsIHJldHVybiBhIGNhcHRjaGEgY2hhbGxlbmdlICAKZG9ja2VyIGV4ZWMgY3Jvd2RzZWMgY3NjbGkgZGVjaXNpb25zIHJlbW92ZSAtLWlwIDEwLjAuMC4xMCAtdCBjYXB0Y2hhCmBgYAoKIyMjIEV4YW1wbGVzCgojIyMjIDEuIEJlaGluZCBhbm90aGVyIHByb3h5IHNlcnZpY2UgKGV4OiBjbG91ZmxhcmUpIFtleGFtcGxlcy9iZWhpbmQtcHJveHkvUkVBRE1FLm1kXShodHRwczovL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4vYmxvYi9tYWluL2V4YW1wbGVzL2JlaGluZC1wcm94eS9SRUFETUUubWQpCgojIyMjIDIuIFdpdGggUmVkaXMgYXMgYW4gZXh0ZXJuYWwgc2hhcmVkIGNhY2hlIFtleGFtcGxlcy9yZWRpcy1jYWNoZS9SRUFETUUubWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhsZXJlYm91cmcvY3Jvd2RzZWMtYm91bmNlci10cmFlZmlrLXBsdWdpbi9ibG9iL21haW4vZXhhbXBsZXMvcmVkaXMtY2FjaGUvUkVBRE1FLm1kKQoKIyMjIyAzLiBVc2luZyBUcnVzdGVkIElQIChleDogTEFOIE9SIFZQTikgdGhhdCB3b24ndCBnZXQgZmlsdGVyZWQgYnkgY3Jvd2RzZWMgW2V4YW1wbGVzL3RydXN0ZWQtaXBzL1JFQURNRS5tZF0oaHR0cHM6Ly9naXRodWIuY29tL21heGxlcmVib3VyZy9jcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luL2Jsb2IvbWFpbi9leGFtcGxlcy90cnVzdGVkLWlwcy9SRUFETUUubWQpCgojIyMjIDQuIFVzaW5nIENyb3dkc2VjIGFuZCBUcmFlZmlrIGluc3RhbGxlZCBhcyBiaW5hcnkgaW4gYSBzaW5nbGUgVk0gW2V4YW1wbGVzL2JpbmFyeS12bS9SRUFETUUubWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhsZXJlYm91cmcvY3Jvd2RzZWMtYm91bmNlci10cmFlZmlrLXBsdWdpbi9ibG9iL21haW4vZXhhbXBsZXMvYmluYXJ5LXZtL1JFQURNRS5tZCkKCiMjIyMgNS4gVXNpbmcgaHR0cHMgY29tbXVuaWNhdGlvbiBhbmQgdGxzIGF1dGhlbnRpY2F0aW9uIHdpdGggQ3Jvd2RzZWMgW2V4YW1wbGVzL3Rscy1hdXRoL1JFQURNRS5tZF0oaHR0cHM6Ly9naXRodWIuY29tL21heGxlcmVib3VyZy9jcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luL2Jsb2IvbWFpbi9leGFtcGxlcy90bHMtYXV0aC9SRUFETUUubWQpCgojIyMjIDYuIFVzaW5nIENyb3dkc2VjIGFuZCBUcmFlZmlrIGluIEt1YmVybmV0ZXMgW2V4YW1wbGVzL2t1YmVybmV0ZXMvUkVBRE1FLm1kXShodHRwczovL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4vYmxvYi9tYWluL2V4YW1wbGVzL2t1YmVybmV0ZXMvUkVBRE1FLm1kKQoKIyMjIyA3LiBVc2luZyBUcmFlZmlrIGluIHN0YW5kYWxvbmUgbW9kZSB3aXRob3V0IENyb3dkc2VjIFtleGFtcGxlcy9zdGFuZGFsb25lLW1vZGUvUkVBRE1FLm1kXShodHRwczovL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4vYmxvYi9tYWluL2V4YW1wbGVzL3N0YW5kYWxvbmUtbW9kZS9SRUFETUUubWQpCgojIyMjIDguIFVzaW5nIFRyYWVmaWsgd2l0aCBBcHBTZWMgZmVhdHVyZSBlbmFibGVkIFtleGFtcGxlcy9hcHBzZWMtZW5hYmxlZC9SRUFETUUubWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhsZXJlYm91cmcvY3Jvd2RzZWMtYm91bmNlci10cmFlZmlrLXBsdWdpbi9ibG9iL21haW4vZXhhbXBsZXMvYXBwc2VjLWVuYWJsZWQvUkVBRE1FLm1kKQoKIyMjIyA5LiBVc2luZyBUcmFlZmlrIHdpdGggQ2FwdGNoYSByZW1lZGlhdGlvbiBmZWF0dXJlIGVuYWJsZWQgW2V4YW1wbGVzL2NhcHRjaGEvUkVBRE1FLm1kXShodHRwczovL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4vYmxvYi9tYWluL2V4YW1wbGVzL2NhcHRjaGEvUkVBRE1FLm1kKQoKIyMjIyAxMC4gVXNpbmcgVHJhZWZpayB3aXRoIEN1c3RvbSBCYW4gSFRNTCBQYWdlIFtleGFtcGxlcy9jdXN0b20tYmFuLXBhZ2UvUkVBRE1FLm1kXShodHRwczovL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4vYmxvYi9tYWluL2V4YW1wbGVzL2N1c3RvbS1iYW4tcGFnZS9SRUFETUUubWQpCgojIyMgTG9jYWwgTW9kZQoKVHJhZWZpayBhbHNvIG9mZmVycyBhIGRldmVsb3BlciBtb2RlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRlbXBvcmFyeSB0ZXN0aW5nIG9mIHBsdWdpbnMgbm90IGhvc3RlZCBvbiBHaXRIdWIuClRvIHVzZSBhIHBsdWdpbiBpbiBsb2NhbCBtb2RlLCB0aGUgVHJhZWZpayBzdGF0aWMgY29uZmlndXJhdGlvbiBtdXN0IGRlZmluZSB0aGUgbW9kdWxlIG5hbWUgKGFzIGlzIHVzdWFsIGZvciBHbyBwYWNrYWdlcykgYW5kIGEgcGF0aCB0byBhIFtHbyB3b3Jrc3BhY2VdKGh0dHBzOi8vZ29sYW5nLm9yZy9kb2MvZ29wYXRoX2NvZGUuaHRtbCNXb3Jrc3BhY2VzKSwgd2hpY2ggY2FuIGJlIHRoZSBsb2NhbCBHT1BBVEggb3IgYW55IGRpcmVjdG9yeS4KClRoZSBwbHVnaW5zIG11c3QgYmUgcGxhY2VkIGluIHRoZSBgLi9wbHVnaW5zLWxvY2FsYCBkaXJlY3RvcnksCndoaWNoIHNob3VsZCBiZSBpbiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgb2YgdGhlIHByb2Nlc3MgcnVubmluZyB0aGUgVHJhZWZpayBiaW5hcnkuClRoZSBzb3VyY2UgY29kZSBvZiB0aGUgcGx1Z2luIHNob3VsZCBiZSBvcmdhbml6ZWQgYXMgZm9sbG93czoKCmBgYAouL3BsdWdpbnMtbG9jYWwvCiAgICDilJTilIDilIAgc3JjCiAgICAgICAg4pSU4pSA4pSAIGdpdGh1Yi5jb20KICAgICAgICAgICAg4pSU4pSA4pSAIG1heGxlcmVib3VyZwogICAgICAgICAgICAgICAg4pSU4pSA4pSAIGNyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4KICAgICAgICAgICAgICAgICAgICDilJzilIDilIAgYm91bmNlci5nbwogICAgICAgICAgICAgICAgICAgIOKUnOKUgOKUgCBib3VuY2VyX3Rlc3QuZ28KICAgICAgICAgICAgICAgICAgICDilJzilIDilIAgZ28ubW9kCiAgICAgICAgICAgICAgICAgICAg4pSc4pSA4pSAIExJQ0VOU0UKICAgICAgICAgICAgICAgICAgICDilJzilIDilIAgTWFrZWZpbGUKICAgICAgICAgICAgICAgICAgICDilJzilIDilIAgcmVhZG1lLm1kCiAgICAgICAgICAgICAgICAgICAg4pSU4pSA4pSAIHZlbmRvci8qIApgYGAKCkZvciBsb2NhbCBkZXZlbG9wbWVudCwgYSBgZG9ja2VyLWNvbXBvc2UubG9jYWwueW1sYCBpcyBwcm92aWRlZCB3aGljaCByZXByb2R1Y2VzIHRoZSBkaXJlY3RvcnkgbGF5b3V0IG5lZWRlZCBieSBUcmFlZmlrLiAgClRoaXMgd29ya3Mgb25jZSB5b3UgaGF2ZSBnZW5lcmF0ZWQgYW5kIGZpbGxlZCB5b3VyICpMQVBJLUtFWSogKGNyb3dkc2VjTGFwaUtleSksIGlmIG5vdCByZWFkIGFib3ZlIGZvciBpbmZvcm1hdGlvbnMuCgpgYGBiYXNoCmRvY2tlciBjb21wb3NlIC1mIGRvY2tlci1jb21wb3NlLmxvY2FsLnltbCB1cCAtZApgYGAKRXF1aXZhbGVudCB0bwpgYGBiYXNoCm1ha2UgcnVuX2xvY2FsCmBgYAoKIyMjIEFib3V0CgpbbWF0aGlldUhhXShodHRwczovL2dpdGh1Yi5jb20vbWF0aGlldUhhKSBhbmQgW0ldKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhsZXJlYm91cmcpIGhhdmUgYmVlbiB1c2luZyBUcmFlZmlrIHNpbmNlIDIwMjAgYXQgW1ByaW1hZHZpel0oaHR0cHM6Ly9wcmltYWR2aXouY29tKS4KV2UgY29tZSBmcm9tIGEgd2ViIGRldmVsb3BtZW50IGFuZCBzZWN1cml0eSBlbmdpbmVlciBiYWNrZ3JvdW5kIGFuZCB3YW50ZWQgdG8gYWRkIHRoZSBwb3dlciBvZiBhIHZlcnkgcHJvbWlzaW5nIHRlY2hub2xvZ3kgKENyb3dkc2VjKSB0byB0aGUgZWRnZSByb3V0ZXIgd2UgbG92ZS4gIAoKV2UgaW5pdGlhbGx5IHJhbiBpbnRvIHRoaXMgcHJvamVjdDogW2dpdGh1Yi5jb20vZmJvbmFsYWlyL3RyYWVmaWstY3Jvd2RzZWMtYm91bmNlcl0oaHR0cHM6Ly9naXRodWIuY29tL2Zib25hbGFpci90cmFlZmlrLWNyb3dkc2VjLWJvdW5jZXIpCkl0IHdhcyB1c2luZyB0cmFlZmlrIGFuZCBmb3J3YXJkIGF1dGggbWlkZGxld2FyZSB0byB2ZXJpZnkgZXZlcnkgcmVxdWVzdC4gIApUaGV5IGhhZCB0byBnbyB0aHJvdWdoIGEgd2Vic2VydmVyIHdoaWNoIHRoZW4gY29udGFjdHMgYW5vdGhlciB3ZWJzZXJ2aWNlICh0aGUgY3Jvd2RzZWMgTEFQSSkgdG8gbWFrZSBhIGRlY2lzaW9uIGJhc2VkIG9uIHRoZSBzb3VyY2UgSVAuICAKV2UgaW5pdGlhbGx5IHByb3Bvc2VkIHNvbWUgaW1wcm92ZW1lbnRzIGJ5IGltcGxlbWVudGluZyBhIHN0cmVhbWluZyBtb2RlIGFuZCBhIGxvY2FsIGNhY2hlLiAgCldpdGggdGhlIFRyYWVmaWsgaGFja2F0aG9uIHdlIGRlY2lkZWQgdG8gaW1wbGVtZW50IG91ciBzb2x1dGlvbiBkaXJlY3RseSBhcyBhIFRyYWVmaWsgcGx1Z2luIHdoaWNoIGNvdWxkIGJlIGZvdW5kIGJ5IGV2ZXJ5b25lIG9uIFtwbHVnaW5zLnRyYWVmaWsuaW9dKGh0dHBzOi8vcGx1Z2lucy50cmFlZmlrLmlvKSBhbmQgYmUgbW9yZSBwZXJmb3JtYW50Lgo=", + "readme_content": "IVtHaXRIdWJdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2xpY2Vuc2UvbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4pCiFbR2l0SHViIGdvLm1vZCBHbyB2ZXJzaW9uXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9nby1tb2QvZ28tdmVyc2lvbi9tYXhsZXJlYm91cmcvY3Jvd2RzZWMtYm91bmNlci10cmFlZmlrLXBsdWdpbikKIVtHaXRIdWIgdGFnIChsYXRlc3QgU2VtVmVyKV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvdi90YWcvbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4pClshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly9naXRodWIuY29tL21heGxlcmVib3VyZy9jcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luL2FjdGlvbnMvd29ya2Zsb3dzL2dvLWNyb3NzLnltbC9iYWRnZS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4vYWN0aW9ucykKWyFbR28gUmVwb3J0IENhcmRdKGh0dHBzOi8vZ29yZXBvcnRjYXJkLmNvbS9iYWRnZS9naXRodWIuY29tL21heGxlcmVib3VyZy9jcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luKV0oaHR0cHM6Ly9nb3JlcG9ydGNhcmQuY29tL2JhZGdlL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4pCgojIENyb3dkc2VjIEJvdW5jZXIgVHJhZWZpayBwbHVnaW4KCj4gTmV3ISBUaGlzIHBsdWdpbiBub3cgc3VwcG9ydHMgW0FwcFNlY10oaHR0cHM6Ly9kb2MuY3Jvd2RzZWMubmV0L2RvY3MvbmV4dC9hcHBzZWMvaW50cm8vKSBmZWF0dXJlIGluY2x1ZGluZyB2aXJ0dWFsIHBhdGNoaW5nIGFuZCBjYXBhYmlsaXRpZXMgc3VwcG9ydCBmb3IgeW91ciBsZWdhY3kgTW9kU2VjdXJpdHkgcnVsZXMuCgpUaGlzIHBsdWdpbiBhaW1zIHRvIGltcGxlbWVudCBhIENyb3dkc2VjIEJvdW5jZXIgaW4gYSBUcmFlZmlrIHBsdWdpbi4KCj4gW0Nyb3dkU2VjXShodHRwczovL3d3dy5jcm93ZHNlYy5uZXQvKSBpcyBhbiBvcGVuLXNvdXJjZSBhbmQgY29sbGFib3JhdGl2ZSBJUFMgKEludHJ1c2lvbiBQcmV2ZW50aW9uIFN5c3RlbSkgYW5kIGEgc2VjdXJpdHkgc3VpdGUuCj4gV2UgbGV2ZXJhZ2UgbG9jYWwgYmVoYXZpb3IgYW5hbHlzaXMgYW5kIGNyb3dkIHBvd2VyIHRvIGJ1aWxkIHRoZSBsYXJnZXN0IENUSSBuZXR3b3JrIGluIHRoZSB3b3JsZC4KClRoZSBwdXJwb3NlIGlzIHRvIGVuYWJsZSBUcmFlZmlrIHRvIGF1dGhvcml6ZSBvciBibG9jayByZXF1ZXN0cyBmcm9tIElQcyBiYXNlZCBvbiB0aGVpciByZXB1dGF0aW9uIGFuZCBiZWhhdmlvci4KClRoZSBDcm93ZHNlYyB1dGlsaXR5IHdpbGwgcHJvdmlkZSB0aGUgY29tbXVuaXR5IGJsb2NrbGlzdCB3aGljaCBjb250YWlucyBoaWdobHkgcmVwb3J0ZWQgYW5kIHZhbGlkYXRlZCBJUHMgYmFubmVkIGZyb20gdGhlIENyb3dkc2VjIG5ldHdvcmsuCgpXaGVuIHVzZWQgd2l0aCBDcm93ZHNlYyBpdCB3aWxsIGxldmVyYWdlIHRoZSBsb2NhbCBBUEkgd2hpY2ggd2lsbCBhbmFseXplIFRyYWVmaWsgbG9ncyBhbmQgdGFrZSBkZWNpc2lvbnMgb24gdGhlIHJlcXVlc3RzIG1hZGUgYnkgdXNlcnMvYm90cy4gTWFsaWNpb3VzIGFjdG9ycyB3aWxsIGJlIGJhbm5lZCBiYXNlZCBvbiBwYXR0ZXJucyB1c2VkIGFnYWluc3QgeW91ciB3ZWJzaXRlLgoKQXBwc2VjIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGZyb20gcGx1Z2luIHZlcnNpb24gMS4yLjAgYW5kIENyb3dkc2VjIDEuNi4wLgoKVGhlIEFwcFNlYyBDb21wb25lbnQgb2ZmZXJzOgoKLSBMb3ctZWZmb3J0IHZpcnR1YWwgcGF0Y2hpbmcgY2FwYWJpbGl0aWVzLgotIFN1cHBvcnQgZm9yIHlvdXIgbGVnYWN5IE1vZFNlY3VyaXR5IHJ1bGVzLgotIENvbWJpbmluZyBjbGFzc2ljIFdBRiBiZW5lZml0cyB3aXRoIGFkdmFuY2VkIENyb3dkU2VjIGZlYXR1cmVzIGZvciBvdGhlcndpc2UgZGlmZmljdWx0IGFkdmFuY2VkIGJlaGF2aW9yIGRldGVjdGlvbi4KTW9yZSBpbmZvcm1hdGlvbiBvbiBhcHBzZWMgaW4gdGhlIFtDcm93ZHNlYyBEb2N1bWVudGF0aW9uXShodHRwczovL2RvYy5jcm93ZHNlYy5uZXQvZG9jcy9uZXh0L2FwcHNlYy9pbnRyby8pLgoKUmVtZWRpYXRpb24gb2ZmZXJlZCBieSBbQ3Jvd2RzZWNdKGh0dHBzOi8vZG9jcy5jcm93ZHNlYy5uZXQvdS9ib3VuY2Vycy9pbnRybykgYW5kIHN1cHBvcnRlZCBieSB0aGUgcGx1Z2luIGNhbiBiZSBlaXRoZXIgYGJhbmAgb3IgYGNhcHRjaGFgLiAgCkZvciB0aGUgYGJhbmAgcmVtZWRpYXRpb24gdGhlIHVzZXIgd2lsbCBiZSBibG9ja2VkIGluIFRyYWVmaWsgKEhUVFAgNDAzKS4gIApGb3IgdGhlIGBjYXB0Y2hhYCByZW1lZGlhdGlvbiwgdGhlIHVzZXIgd2lsbCBiZSByZWRpcmVjdGVkIHRvIGEgcGFnZSB0byBjb21wbGV0ZSBhIGNhcHRjaGEgY2hhbGxlbmdlLiAgCgpPbiBzdWNjZXNzZnVsbCBjb21wbGV0aW9uLCBoZSB3aWxsIGJlIGNsZWFuZWQgZm9yIGEgc3BlY2lmaWVkIHBlcmlvZCBvZiB0aW1lIGJlZm9yZSBhIG5ldyByZXNvbHV0aW9uIGNoYWxsZW5nZSBpcyBleHBlY3RlZCBpZiBDcm93ZHNlYyBzdGlsbCBoYXMgYSBkZWNpc2lvbiB0byB2ZXJpZnkgdGhlIHVzZXIgYmVoYXZpb3IuIFNlZSB0aGUgZXhhbXBsZSBjYXB0Y2hhIGZvciBtb3JlIGluZm9ybWF0aW9ucyBhbmQgY29uZmlndXJhdGlvbiBpbnRydWN0aW9ucy4gIApUaGUgZm9sbG93aW5nIGNhcHRjaGEgcHJvdmlkZXJzIGFyZSBzdXBwb3J0ZWQgbm93OgogLSBbaGNhcHRjaGFdKGh0dHBzOi8vd3d3LmhjYXB0Y2hhLmNvbS8pCiAtIFtyZWNhcHRjaGFdKGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vcmVjYXB0Y2hhL2Fib3V0LykKIC0gW3R1cm5zdGlsZV0oaHR0cHM6Ly93d3cuY2xvdWRmbGFyZS5jb20vZnItZnIvcHJvZHVjdHMvdHVybnN0aWxlLykKCgpUaGVyZSBhcmUgNSBvcGVyYXRpbmcgbW9kZXMgKENyb3dkc2VjTW9kZSkgZm9yIHRoaXMgcGx1Z2luOgoKfCBNb2RlIHwgRGVzY3JpcHRpb24gfAp8LS0tLS0tfC0tLS0tLXwKfCBub25lIHwgSWYgdGhlIGNsaWVudCBJUCBpcyBvbiBiYW4gbGlzdCwgaXQgd2lsbCBnZXQgYSBodHRwIGNvZGUgNDAzIHJlc3BvbnNlLiBPdGhlcndpc2UsIHJlcXVlc3Qgd2lsbCBjb250aW51ZSBhcyB1c3VhbC4gQWxsIHJlcXVlc3QgY2FsbCB0aGUgQ3Jvd2RzZWMgTEFQSSB8CnwgbGl2ZSB8IElmIHRoZSBjbGllbnQgSVAgaXMgb24gYmFuIGxpc3QsIGl0IHdpbGwgZ2V0IGEgaHR0cCBjb2RlIDQwMyByZXNwb25zZS4gT3RoZXJ3aXNlLCByZXF1ZXN0IHdpbGwgY29udGludWUgYXMgdXN1YWwuICAgIFRoZSBib3VuY2VyIGNhbiBsZXZlcmFnZSB1c2Ugb2YgYSBsb2NhbCBjYWNoZSBpbiBvcmRlciB0byByZWR1Y2UgdGhlIG51bWJlciBvZiByZXF1ZXN0cyBtYWRlIHRvIHRoZSBDcm93ZHNlYyBMQVBJLiBJdCB3aWxsIGtlZXAgaW4gY2FjaGUgdGhlIHN0YXR1cyBmb3IgZWFjaCBJUCB0aGF0IG1ha2VzIHF1ZXJpZXMuIHwKfCBzdHJlYW0gfCBTdHJlYW0gU3RyZWFtaW5nIG1vZGUgYWxsb3dzIHlvdSB0byBrZWVwIGluIHRoZSBsb2NhbCBjYWNoZSBvbmx5IHRoZSBCYW5uZWQgSVBzLCBldmVyeSByZXF1ZXN0cyB0aGF0IGRvZXMgbm90IGhpdCB0aGUgY2FjaGUgaXMgYXV0aG9yaXplZC4gRXZlcnkgbWludXRlLCB0aGUgY2FjaGUgaXMgdXBkYXRlZCB3aXRoIG5ld3MgZnJvbSB0aGUgQ3Jvd2RzZWMgTEFQSS4gfAp8IGFsb25lIHwgU3RhbmRhbG9uZSBtb2RlLCBzaW1pbGFyIHRvIHRoZSBzdHJlYW1pbmcgbW9kZSBidXQgdGhlIGJsYWNrbGlzdGVkIElQcyBhcmUgZmV0Y2hlZCBvbiB0aGUgQ0FQSS4gRXZlcnkgMiBob3VycywgdGhlIGNhY2hlIGlzIHVwZGF0ZWQgd2l0aCBuZXdzIGZyb20gdGhlIENyb3dkc2VjIENBUEkuIEl0IGRvZXMgbm90IGluY2x1ZGUgYW55IGxvY2FsbHkgYmFubmVkIElQLCBidXQgY2FuIHdvcmsgd2l0aG91dCBhIGNyb3dkc2VjIHNlcnZpY2UuIHwKfCBhcHBzZWMgfCBEaXNhYmxlIENyb3dkc2VjIElQIGNoZWNraW5nIGJ1dCBhcHBseSBDcm93ZHNlYyBBcHBzZWMgY2hlY2tpbmcuIFRoaXMgbW9kZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdoZW4gQ3Jvd2RzZWMgSVAgY2hlY2tpbmcgaXMgYXBwbGllZCBhdCB0aGUgRmlyZXdhbGwgTGV2ZWwuIHwKClRoZSBgc3RyZWFtaW5nIG1vZGVgIGlzIHJlY29tbWVuZGVkIGZvciBwZXJmb3JtYW5jZSwgZGVjaXNpb25zIGFyZSB1cGRhdGVkIGV2ZXJ5IDYwIHNlYyBieSBkZWZhdWx0IGFuZCB0aGF0J3MgdGhlIG9ubHkgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIFRyYWVmaWsgYW5kIENyb3dkc2VjLiBFdmVyeSByZXF1ZXN0IHRoYXQgaGFwcGVucyBoaXRzIHRoZSBjYWNoZSBmb3IgcXVpY2sgZGVjaXNpb25zLgoKVGhlIGNhY2hlIGNhbiBiZSBsb2NhbCB0byBUcmFlZmlrIHVzaW5nIHRoZSBmaWxlc3lzdGVtLCBvciBhIHNlcGFyYXRlIFJlZGlzIGluc3RhbmNlLiAgCgpCZWxvdyBhcmUgTWVybWFpZCBkaWFncmFtcyBkZXRhaWxsaW5nIGhvdyBlYWNoIG1vZGUgd29yazogIAoKPGRldGFpbHM+PHN1bW1hcnk+TW9kZSBub25lIHdvcmtmbG93PC9zdW1tYXJ5PgoKPiBBIEJhbiBkZWNpc2lvbiBleGlzdHMgaW4gQ3Jvd2RzZWNMQVBJCgpgYGBtZXJtYWlkCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgVXNlcgogICAgcGFydGljaXBhbnQgVHJhZWZpa1BsdWdpbgogICAgVXNlci0+PlRyYWVmaWtQbHVnaW46IENhbiBJIGFjY2VzcyB0aGF0IHdlYnBhZ2UKICAgIGNyZWF0ZSBwYXJ0aWNpcGFudCBDcm93ZHNlY0xBUEkKICAgIFRyYWVmaWtQbHVnaW4tLT4+Q3Jvd2RzZWNMQVBJOiBEb2VzIHRoZSBVc2VyIElQIGhhcyBhIENyb3dkc2VjIERlY2lzaW9uID8KICAgIERlc3Ryb3kgQ3Jvd2RzZWNMQVBJCiAgICBDcm93ZHNlY0xBUEktLT4+VHJhZWZpa1BsdWdpbjogWWVzIGEgYmFuIERlY2lzaW9uCiAgICBUcmFlZmlrUGx1Z2luLT4+VXNlcjogTm8sIEhUVFAgNDAzCmBgYAoKPiBObyBkZWNpc2lvbiBpbiBDcm93ZHNlY0xBUEkKCmBgYG1lcm1haWQKc2VxdWVuY2VEaWFncmFtCiAgICBwYXJ0aWNpcGFudCBVc2VyCiAgICBwYXJ0aWNpcGFudCBUcmFlZmlrUGx1Z2luCiAgICBVc2VyLT4+VHJhZWZpa1BsdWdpbjogQ2FuIEkgYWNjZXNzIHRoYXQgd2VicGFnZQogICAgY3JlYXRlIHBhcnRpY2lwYW50IENyb3dkc2VjTEFQSQogICAgVHJhZWZpa1BsdWdpbi0tPj5Dcm93ZHNlY0xBUEk6IERvZXMgdGhlIFVzZXIgSVAgaGFzIGEgY3Jvd2RzZWMgZGVjaXNpb24gPwogICAgRGVzdHJveSBDcm93ZHNlY0xBUEkKICAgIENyb3dkc2VjTEFQSS0tPj5UcmFlZmlrUGx1Z2luOiBOb3RoaW5nLCBhbGwgZ29vZCEKICAgIERlc3Ryb3kgVHJhZWZpa1BsdWdpbgogICAgVHJhZWZpa1BsdWdpbi0+PldlYnNlcnZlcjogRm9yd2FyZGluZyB0aGlzIEhUVFAgUmVxdWVzdCBmcm9tIFVzZXIKICAgIFdlYnNlcnZlci0+PlVzZXI6IEhUVFAgUmVzcG9uc2UKYGBgCgo8L2RldGFpbHM+Cgo8ZGV0YWlscz48c3VtbWFyeT5Nb2RlIGxpdmUgd29ya2Zsb3c8L3N1bW1hcnk+Cgo+IEEgQmFuIGRlY2lzaW9uIGV4aXN0cyBpbiBDcm93ZHNlY0xBUEkgYnV0IG5vdCBpbiBjYWNoZQoKYGBgbWVybWFpZApzZXF1ZW5jZURpYWdyYW0KICAgIHBhcnRpY2lwYW50IFVzZXIKICAgIHBhcnRpY2lwYW50IFRyYWVmaWtQbHVnaW4KICAgIFVzZXItPj5UcmFlZmlrUGx1Z2luOiBDYW4gSSBhY2Nlc3MgdGhhdCB3ZWJwYWdlCiAgICBjcmVhdGUgcGFydGljaXBhbnQgUGx1Z2luQ2FjaGUKICAgIFRyYWVmaWtQbHVnaW4tLT4+UGx1Z2luQ2FjaGU6IERvZXMgdGhlIFVzZXIgSVAgaGFzIGEgY3Jvd2RzZWMgZGVjaXNpb24gPwogICAgUGx1Z2luQ2FjaGUtLT4+VHJhZWZpa1BsdWdpbjogTm90aGluZywgYWxsIGdvb2QhCiAgICBjcmVhdGUgcGFydGljaXBhbnQgQ3Jvd2RzZWNMQVBJCiAgICBUcmFlZmlrUGx1Z2luLS0+PkNyb3dkc2VjTEFQSTogRG9lcyB0aGUgVXNlciBJUCBoYXMgYSBjcm93ZHNlYyBkZWNpc2lvbiA/CiAgICBEZXN0cm95IENyb3dkc2VjTEFQSQogICAgQ3Jvd2RzZWNMQVBJLS0+PlRyYWVmaWtQbHVnaW46IFllcyBhIGJhbiBEZWNpc2lvbgogICAgVHJhZWZpa1BsdWdpbi0tPj5QbHVnaW5DYWNoZTogU3RvcmUgdGhlIGluZm9ybWF0aW9uIGZvciB0aGlzIElQIGZvciBEZWZhdWx0RGVjaXNpb25TZWNvbmRzCiAgICBEZXN0cm95IFBsdWdpbkNhY2hlCiAgICBQbHVnaW5DYWNoZS0tPj5UcmFlZmlrUGx1Z2luOiBEb25lCiAgICBUcmFlZmlrUGx1Z2luLT4+VXNlcjogTm8sIEhUVFAgNDAzCmBgYAoKPiBObyBkZWNpc2lvbiBpbiBjYWNoZQoKYGBgbWVybWFpZApzZXF1ZW5jZURpYWdyYW0KICAgIHBhcnRpY2lwYW50IFVzZXIKICAgIHBhcnRpY2lwYW50IFRyYWVmaWtQbHVnaW4KICAgIFVzZXItPj5UcmFlZmlrUGx1Z2luOiBDYW4gSSBhY2Nlc3MgdGhhdCB3ZWJwYWdlCiAgICBjcmVhdGUgcGFydGljaXBhbnQgUGx1Z2luQ2FjaGUKICAgIFRyYWVmaWtQbHVnaW4tLT4+UGx1Z2luQ2FjaGU6IERvZXMgdGhlIFVzZXIgSVAgaGFzIGEgY3Jvd2RzZWMgZGVjaXNpb24gPwogICAgUGx1Z2luQ2FjaGUtLT4+VHJhZWZpa1BsdWdpbjogTm90aGluZywgYWxsIGdvb2QhCiAgICBjcmVhdGUgcGFydGljaXBhbnQgQ3Jvd2RzZWNMQVBJCiAgICBUcmFlZmlrUGx1Z2luLS0+PkNyb3dkc2VjTEFQSTogRG9lcyB0aGUgVXNlciBJUCBoYXMgYSBjcm93ZHNlYyBkZWNpc2lvbiA/CiAgICBEZXN0cm95IENyb3dkc2VjTEFQSQogICAgQ3Jvd2RzZWNMQVBJLS0+PlRyYWVmaWtQbHVnaW46IE5vdGhpbmcsIGFsbCBnb29kIQogICAgVHJhZWZpa1BsdWdpbi0tPj5QbHVnaW5DYWNoZTogU3RvcmUgdGhlIGluZm9ybWF0aW9uIGZvciB0aGlzIElQIGZvciBEZWZhdWx0RGVjaXNpb25TZWNvbmRzCiAgICBEZXN0cm95IFBsdWdpbkNhY2hlCiAgICBQbHVnaW5DYWNoZS0tPj5UcmFlZmlrUGx1Z2luOiBEb25lCiAgICBUcmFlZmlrUGx1Z2luLT4+V2Vic2VydmVyOiBGb3J3YXJkaW5nIHRoaXMgSFRUUCBSZXF1ZXN0IGZyb20gVXNlcgogICAgV2Vic2VydmVyLT4+VXNlcjogSFRUUCBSZXNwb25zZQpgYGAKCjwvZGV0YWlscz4KCjxkZXRhaWxzPjxzdW1tYXJ5Pk1vZGUgc3RyZWFtIHdvcmtmbG93PC9zdW1tYXJ5PgoKPiBDYWNoZSBTeW5jaHJvbml6YXRpb24gZXZlcnkgVXBkYXRlSW50ZXJ2YWxTZWNvbmRzCgpgYGBtZXJtYWlkCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgVHJhZWZpa1BsdWdpbgogICAgcGFydGljaXBhbnQgQ3Jvd2RzZWNMQVBJCiAgICBUcmFlZmlrUGx1Z2luLT4+Q3Jvd2RzZWNMQVBJOiBXaGF0IGFyZSB0aGUgY3VycmVudCBkZWNpc2lvbnMKICAgIERlc3Ryb3kgQ3Jvd2RzZWNMQVBJCiAgICBDcm93ZHNlY0xBUEktPj5UcmFlZmlrUGx1Z2luOiBIZXJlIGlzIHRoZSBsaXN0CiAgICBjcmVhdGUgcGFydGljaXBhbnQgUGx1Z2luQ2FjaGUKICAgIFRyYWVmaWtQbHVnaW4tLT4+UGx1Z2luQ2FjaGU6IFN0b3JlIHRoaXMgbGlzdAogICAgRGVzdHJveSBQbHVnaW5DYWNoZQogICAgUGx1Z2luQ2FjaGUtLT4+VHJhZWZpa1BsdWdpbjogRG9uZQpgYGAKCj4gQSBCYW4gZGVjaXNpb24gZXhpc3RzIGluIGNhY2hlCgpgYGBtZXJtYWlkCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgVXNlcgogICAgcGFydGljaXBhbnQgVHJhZWZpa1BsdWdpbgogICAgVXNlci0+PlRyYWVmaWtQbHVnaW46IENhbiBJIGFjY2VzcyB0aGF0IHdlYnBhZ2UKICAgIGNyZWF0ZSBwYXJ0aWNpcGFudCBQbHVnaW5DYWNoZQogICAgVHJhZWZpa1BsdWdpbi0tPj5QbHVnaW5DYWNoZTogRG9lcyB0aGUgVXNlciBJUCBoYXMgYSBjcm93ZHNlYyBkZWNpc2lvbiA/CiAgICBEZXN0cm95IFBsdWdpbkNhY2hlCiAgICBQbHVnaW5DYWNoZS0tPj5UcmFlZmlrUGx1Z2luOiBZZXMgYSBiYW4gZGVjaXNpb24KICAgIERlc3Ryb3kgVHJhZWZpa1BsdWdpbgogICAgVHJhZWZpa1BsdWdpbi0+PlVzZXI6IE5vLCBIVFRQIDQwMwpgYGAKCj4gTm8gZGVjaXNpb24gaW4gY2FjaGUKCmBgYG1lcm1haWQKc2VxdWVuY2VEaWFncmFtCiAgICBwYXJ0aWNpcGFudCBVc2VyCiAgICBwYXJ0aWNpcGFudCBUcmFlZmlrUGx1Z2luCiAgICBVc2VyLT4+VHJhZWZpa1BsdWdpbjogQ2FuIEkgYWNjZXNzIHRoYXQgd2VicGFnZQogICAgY3JlYXRlIHBhcnRpY2lwYW50IFBsdWdpbkNhY2hlCiAgICBUcmFlZmlrUGx1Z2luLS0+PlBsdWdpbkNhY2hlOiBEb2VzIHRoZSBVc2VyIElQIGhhcyBhIGNyb3dkc2VjIGRlY2lzaW9uID8KICAgIERlc3Ryb3kgUGx1Z2luQ2FjaGUKICAgIFBsdWdpbkNhY2hlLS0+PlRyYWVmaWtQbHVnaW46IE5vdGhpbmcsIGFsbCBnb29kIQogICAgRGVzdHJveSBUcmFlZmlrUGx1Z2luCiAgICBUcmFlZmlrUGx1Z2luLT4+V2Vic2VydmVyOiBGb3J3YXJkaW5nIHRoaXMgSFRUUCBSZXF1ZXN0IGZyb20gVXNlcgogICAgV2Vic2VydmVyLT4+VXNlcjogSFRUUCBSZXNwb25zZQpgYGAKCjwvZGV0YWlscz4KCjxkZXRhaWxzPjxzdW1tYXJ5Pk1vZGUgYWxvbmUgV29ya2Zsb3c8L3N1bW1hcnk+Cgo+IENhY2hlIFN5bmNocm9uaXphdGlvbiBldmVyeSAyIGhvdXJzIHRvIHRoZSBDcm93ZHNlYyBDZW50cmFsIEFQSQoKYGBgbWVybWFpZApzZXF1ZW5jZURpYWdyYW0KICAgIHBhcnRpY2lwYW50IFRyYWVmaWtQbHVnaW4KICAgIHBhcnRpY2lwYW50IENyb3dkc2VjQ0FQSQogICAgVHJhZWZpa1BsdWdpbi0+PkNyb3dkc2VjQ0FQSTogV2hhdCBhcmUgdGhlIGN1cnJlbnQgZGVjaXNpb25zIGZyb20gQ0FQSQogICAgRGVzdHJveSBDcm93ZHNlY0NBUEkKICAgIENyb3dkc2VjQ0FQSS0+PlRyYWVmaWtQbHVnaW46IEhlcmUgaXMgdGhlIGxpc3QKICAgIGNyZWF0ZSBwYXJ0aWNpcGFudCBQbHVnaW5DYWNoZQogICAgVHJhZWZpa1BsdWdpbi0tPj5QbHVnaW5DYWNoZTogU3RvcmUgdGhpcyBsaXN0CiAgICBEZXN0cm95IFBsdWdpbkNhY2hlCiAgICBQbHVnaW5DYWNoZS0tPj5UcmFlZmlrUGx1Z2luOiBEb25lCmBgYAoKPiBBIEJhbiBkZWNpc2lvbiBleGlzdHMgaW4gY2FjaGUKCmBgYG1lcm1haWQKc2VxdWVuY2VEaWFncmFtCiAgICBwYXJ0aWNpcGFudCBVc2VyCiAgICBwYXJ0aWNpcGFudCBUcmFlZmlrUGx1Z2luCiAgICBVc2VyLT4+VHJhZWZpa1BsdWdpbjogQ2FuIEkgYWNjZXNzIHRoYXQgd2VicGFnZQogICAgY3JlYXRlIHBhcnRpY2lwYW50IFBsdWdpbkNhY2hlCiAgICBUcmFlZmlrUGx1Z2luLS0+PlBsdWdpbkNhY2hlOiBEb2VzIHRoZSBVc2VyIElQIGhhcyBhIGNyb3dkc2VjIGRlY2lzaW9uID8KICAgIERlc3Ryb3kgUGx1Z2luQ2FjaGUKICAgIFBsdWdpbkNhY2hlLS0+PlRyYWVmaWtQbHVnaW46IFllcyBhIGJhbiBkZWNpc2lvbgogICAgRGVzdHJveSBUcmFlZmlrUGx1Z2luCiAgICBUcmFlZmlrUGx1Z2luLT4+VXNlcjogTm8sIEhUVFAgNDAzCmBgYAoKPiBObyBkZWNpc2lvbiBpbiBjYWNoZQoKYGBgbWVybWFpZApzZXF1ZW5jZURpYWdyYW0KICAgIHBhcnRpY2lwYW50IFVzZXIKICAgIHBhcnRpY2lwYW50IFRyYWVmaWtQbHVnaW4KICAgIFVzZXItPj5UcmFlZmlrUGx1Z2luOiBDYW4gSSBhY2Nlc3MgdGhhdCB3ZWJwYWdlCiAgICBjcmVhdGUgcGFydGljaXBhbnQgUGx1Z2luQ2FjaGUKICAgIFRyYWVmaWtQbHVnaW4tLT4+UGx1Z2luQ2FjaGU6IERvZXMgdGhlIFVzZXIgSVAgaGFzIGEgY3Jvd2RzZWMgZGVjaXNpb24gPwogICAgRGVzdHJveSBQbHVnaW5DYWNoZQogICAgUGx1Z2luQ2FjaGUtLT4+VHJhZWZpa1BsdWdpbjogTm90aGluZywgYWxsIGdvb2QhCiAgICBEZXN0cm95IFRyYWVmaWtQbHVnaW4KICAgIFRyYWVmaWtQbHVnaW4tPj5XZWJzZXJ2ZXI6IEZvcndhcmRpbmcgdGhpcyBIVFRQIFJlcXVlc3QgZnJvbSBVc2VyCiAgICBXZWJzZXJ2ZXItPj5Vc2VyOiBIVFRQIFJlc3BvbnNlCmBgYAoKPC9kZXRhaWxzPgoKPGRldGFpbHM+PHN1bW1hcnk+TW9kZSBhcHBzZWMgd29ya2Zsb3c8L3N1bW1hcnk+Cgo+IFRoZSByZXF1ZXN0IGlzIGRldGVjdGVkIGFzIG1hbGljaW91cwoKYGBgbWVybWFpZApzZXF1ZW5jZURpYWdyYW0KICAgIHBhcnRpY2lwYW50IFVzZXIKICAgIHBhcnRpY2lwYW50IFRyYWVmaWtQbHVnaW4KICAgIFVzZXItPj5UcmFlZmlrUGx1Z2luOiBDYW4gSSBhY2Nlc3MgdGhhdCB3ZWJwYWdlCiAgICBjcmVhdGUgcGFydGljaXBhbnQgQ3Jvd2RzZWNBcHBTZWMKICAgIFRyYWVmaWtQbHVnaW4tLT4+Q3Jvd2RzZWNBcHBTZWM6IElzIHRoaXMgcmVxdWVzdCBtYWxpY2lvdXMgPwogICAgRGVzdHJveSBDcm93ZHNlY0FwcFNlYwogICAgQ3Jvd2RzZWNBcHBTZWMtLT4+VHJhZWZpa1BsdWdpbjogWWVzIEkgdGhpbmsgc28KICAgIERlc3Ryb3kgVHJhZWZpa1BsdWdpbgogICAgVHJhZWZpa1BsdWdpbi0+PlVzZXI6IE5vLCBIVFRQIDQwMwpgYGAKCj4gVGhlIHJlcXVlc3QgaXMgbm90IGRldGVjdGVkIGFzIG1hbGljaW91cwoKYGBgbWVybWFpZApzZXF1ZW5jZURpYWdyYW0KICAgIHBhcnRpY2lwYW50IFVzZXIKICAgIHBhcnRpY2lwYW50IFRyYWVmaWtQbHVnaW4KICAgIFVzZXItPj5UcmFlZmlrUGx1Z2luOiBDYW4gSSBhY2Nlc3MgdGhhdCB3ZWJwYWdlCiAgICBjcmVhdGUgcGFydGljaXBhbnQgQ3Jvd2RzZWNBcHBTZWMKICAgIFRyYWVmaWtQbHVnaW4tLT4+Q3Jvd2RzZWNBcHBTZWM6IElzIHRoaXMgcmVxdWVzdCBtYWxpY2lvdXMgPwogICAgRGVzdHJveSBDcm93ZHNlY0FwcFNlYwogICAgQ3Jvd2RzZWNBcHBTZWMtLT4+VHJhZWZpa1BsdWdpbjogTm8gSSBkb24ndCB0aGluayBzbwogICAgRGVzdHJveSBUcmFlZmlrUGx1Z2luCiAgICBUcmFlZmlrUGx1Z2luLT4+V2Vic2VydmVyOiBGb3J3YXJkaW5nIHRoaXMgSFRUUCBSZXF1ZXN0IGZyb20gVXNlcgogICAgV2Vic2VydmVyLT4+VXNlcjogSFRUUCBSZXNwb25zZQpgYGAKCjwvZGV0YWlscz4KCjxkZXRhaWxzPjxzdW1tYXJ5PkNhcHRjaGEgZGVjaXNpb24gd29ya2Zsb3c8L3N1bW1hcnk+CgpgYGBtZXJtYWlkCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgVXNlcgogICAgcGFydGljaXBhbnQgVHJhZWZpa1BsdWdpbgogICAgVXNlci0+PlRyYWVmaWtQbHVnaW46IENhbiBJIGFjY2VzcyB0aGF0IHdlYnBhZ2UKICAgIGNyZWF0ZSBwYXJ0aWNpcGFudCBQbHVnaW5DYWNoZQogICAgVHJhZWZpa1BsdWdpbi0tPj5QbHVnaW5DYWNoZTogRG9lcyB0aGUgVXNlciBJUCBoYXMgYSBDcm93ZHNlYyBEZWNpc2lvbiA/CiAgICBQbHVnaW5DYWNoZS0tPj5UcmFlZmlrUGx1Z2luOiBZZXMgYSBDYXRwY2hhIERlY2lzaW9uCiAgICBUcmFlZmlrUGx1Z2luLT4+VXNlcjogUGxlYXNlIGNvbXBsZXRlIHRoaXMgY2FwdGNoYQogICAgVXNlci0+PlRyYWVmaWtQbHVnaW46IEZpbmUsIGRvbmUhCiAgICBjcmVhdGUgcGFydGljaXBhbnQgUHJvdmlkZXJDYXB0Y2hhCiAgICBUcmFlZmlrUGx1Z2luLS0+PlByb3ZpZGVyQ2FwdGNoYTogSXMgdGhlIHZhbGlkYXRpb24gT0sgPwogICAgRGVzdHJveSBQcm92aWRlckNhcHRjaGEgICAgCiAgICBQcm92aWRlckNhcHRjaGEtLT4+VHJhZWZpa1BsdWdpbjogWWVzCiAgICBUcmFlZmlrUGx1Z2luLS0+PlBsdWdpbkNhY2hlOiBTZXQgdGhlIFVzZXIgSVAgQ2xlYW4gZm9yIGNhcHRjaGFHcmFjZVBlcmlvZFNlY29uZHMKICAgIERlc3Ryb3kgUGx1Z2luQ2FjaGUKICAgIFBsdWdpbkNhY2hlLS0+PlRyYWVmaWtQbHVnaW46IERvbmUKICAgIERlc3Ryb3kgVHJhZWZpa1BsdWdpbgogICAgVHJhZWZpa1BsdWdpbi0+PldlYnNlcnZlcjogRm9yd2FyZGluZyB0aGlzIEhUVFAgUmVxdWVzdCBmcm9tIFVzZXIKICAgIFdlYnNlcnZlci0+PlVzZXI6IEhUVFAgUmVzcG9uc2UKYGBgCgo8L2RldGFpbHM+CgojIyBVc2FnZQoKVG8gZ2V0IHN0YXJ0ZWQsIHVzZSB0aGUgYGRvY2tlci1jb21wb3NlLnltbGAgZmlsZS4KCllvdSBjYW4gcnVuIGl0IHdpdGg6CmBgYGJhc2gKbWFrZSBydW4KYGBgCgojIyMgTm90ZQoKKiovIVwgQ2FjaGUgaXMgc2hhcmVkIGJ5IGFsbCBzZXJ2aWNlcyoqCipUaGlzIG1lYW5zIGlmIGFuIElQIGlzIGJhbm5lZCwgYWxsIHNlcnZpY2VzIHdoaWNoIGFyZSBwcm90ZWN0ZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhlIHBsdWdpbiB3aWxsIGRlbnkgcmVxdWVzdHMgZnJvbSB0aGF0IElQKgpPbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgcGx1Z2luIGlzICpwb3NzaWJsZSouCgojIyMgVmFyaWFibGVzCi0gRW5hYmxlZAogIC0gYm9vbAogIC0gZGVmYXVsdDogZmFsc2UKICAtIEVuYWJsZSB0aGUgcGx1Z2luCi0gTG9nTGV2ZWwKICAtIHN0cmluZwogIC0gZGVmYXVsdDogYElORk9gLCBleHBlY3RlZCB2YWx1ZXMgYXJlOiBgSU5GT2AsIGBERUJVR2AKLSBDcm93ZHNlY01vZGUKICAtIHN0cmluZwogIC0gZGVmYXVsdDogYGxpdmVgLCBleHBlY3RlZCB2YWx1ZXMgYXJlOiBgbm9uZWAsIGBsaXZlYCwgYHN0cmVhbWAsIGBhbG9uZWAsIGBhcHBzZWNgCi0gQ3Jvd2RzZWNBcHBzZWNFbmFibGVkCiAgLSBib29sCiAgLSBkZWZhdWx0OiBmYWxzZQogIC0gRW5hYmxlIENyb3dkc2VjIEFwcHNlYyBTZXJ2ZXIgKFdBRikuCi0gQ3Jvd2RzZWNBcHBzZWNIb3N0CiAgLSBzdHJpbmcKICAtIGRlZmF1bHQ6ICJjcm93ZHNlYzo3NDIyIgogIC0gQ3Jvd2RzZWMgQXBwc2VjIFNlcnZlciBhdmFpbGFibGUgb24gd2hpY2ggaG9zdCBhbmQgcG9ydC4gVGhlIHNjaGVtZSB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIENyb3dkc2VjTGFwaVNjaGVtZSB2YXIuCi0gQ3Jvd2RzZWNBcHBzZWNGYWlsdXJlQmxvY2sKICAtIGJvb2wKICAtIGRlZmF1bHQ6IHRydWUKICAtIEJsb2NrIHJlcXVlc3Qgd2hlbiBDcm93ZHNlYyBBcHBzZWMgU2VydmVyIGhhdmUgYSBbc3RhdHVzIDUwMF0oaHR0cHM6Ly9kb2NzLmNyb3dkc2VjLm5ldC9kb2NzL25leHQvYXBwc2VjL3Byb3RvY29sI3Jlc3BvbnNlLWNvZGUpLgotIENyb3dkc2VjTGFwaVNjaGVtZQogIC0gc3RyaW5nCiAgLSBkZWZhdWx0OiBgaHR0cGAsIGV4cGVjdGVkIHZhbHVlcyBhcmU6IGBodHRwYCwgYGh0dHBzYAotIENyb3dkc2VjTGFwaUhvc3QKICAtIHN0cmluZwogIC0gZGVmYXVsdDogImNyb3dkc2VjOjgwODAiCiAgLSBDcm93ZHNlYyBMQVBJIGF2YWlsYWJsZSBvbiB3aGljaCBob3N0IGFuZCBwb3J0LgotIENyb3dkc2VjTGFwaUtleQogIC0gc3RyaW5nCiAgLSBkZWZhdWx0OiAiIgogIC0gQ3Jvd2RzZWMgTEFQSSBrZXkgZm9yIHRoZSBib3VuY2VyLiAKLSBDcm93ZHNlY0xhcGlUbHNJbnNlY3VyZVZlcmlmeQogIC0gYm9vbAogIC0gZGVmYXVsdDogZmFsc2UKICAtIERpc2FibGUgdmVyaWZpY2F0aW9uIG9mIGNlcnRpZmljYXRlIHByZXNlbnRlZCBieSBDcm93ZHNlYyBMQVBJCi0gQ3Jvd2RzZWNMYXBpVGxzQ2VydGlmaWNhdGVBdXRob3JpdHkKICAtIHN0cmluZwogIC0gZGVmYXVsdDogIiIKICAtIFBFTS1lbmNvZGVkIENlcnRpZmljYXRlIEF1dGhvcml0eSBvZiB0aGUgQ3Jvd2RzZWMgTEFQSQotIENyb3dkc2VjTGFwaVRsc0NlcnRpZmljYXRlQm91bmNlcgogIC0gc3RyaW5nCiAgLSBkZWZhdWx0OiAiIgogIC0gUEVNLWVuY29kZWQgY2xpZW50IENlcnRpZmljYXRlIG9mIHRoZSBCb3VuY2VyCi0gQ3Jvd2RzZWNMYXBpVGxzQ2VydGlmaWNhdGVCb3VuY2VyS2V5CiAgLSBzdHJpbmcKICAtIGRlZmF1bHQ6ICIiCiAgLSBQRU0tZW5jb2RlZCBjbGllbnQgcHJpdmF0ZSBrZXkgb2YgdGhlIEJvdW5jZXIKLSBDbGllbnRUcnVzdGVkSVBzCiAgLSBzdHJpbmcgCiAgLSBkZWZhdWx0OiBbXQogIC0gTGlzdCBvZiBjbGllbnQgSVBzIHRvIHRydXN0LCB0aGV5IHdpbGwgYnlwYXNzIGFueSBjaGVjayBmcm9tIHRoZSBib3VuY2VyIG9yIGNhY2hlICh1c2VmdWwgZm9yIExBTiBvciBWUE4gSVApCi0gRm9yd2FyZGVkSGVhZGVyc1RydXN0ZWRJUHMKICAtIFtdc3RyaW5nCiAgLSBkZWZhdWx0OiBbXQogIC0gTGlzdCBvZiBJUHMgb2YgdHJ1c3RlZCBQcm94aWVzIHRoYXQgYXJlIGluIGZyb250IG9mIHRyYWVmaWsgKGV4OiBDbG91ZGZsYXJlKQotIEZvcndhcmRlZEhlYWRlcnNDdXN0b21OYW1lCiAgLSBzdHJpbmcKICAtIGRlZmF1bHQ6ICJYLUZvcndhcmRlZC1Gb3IiCiAgLSBOYW1lIG9mIHRoZSBoZWFkZXIgd2hlcmUgdGhlIHJlYWwgSVAgb2YgdGhlIGNsaWVudCBzaG91bGQgYmUgcmV0cmlldmVkCi0gUmVkaXNDYWNoZUVuYWJsZWQKICAtIGJvb2wKICAtIGRlZmF1bHQ6IGZhbHNlCiAgLSBlbmFibGUgUmVkaXMgY2FjaGUgaW5zdGVhZCBvZiBmaWxlc3lzdGVtIGNhY2hlCi0gUmVkaXNDYWNoZUhvc3QKICAtIHN0cmluZyAKICAtIGRlZmF1bHQ6ICJyZWRpczo2Mzc5IgogIC0gaG9zdG5hbWUgYW5kIHBvcnQgZm9yIHRoZSBSZWRpcyBzZXJ2aWNlCi0gUmVkaXNDYWNoZVBhc3N3b3JkCiAgLSBzdHJpbmcgCiAgLSBkZWZhdWx0OiAiIgogIC0gUGFzc3dvcmQgZm9yIHRoZSBSZWRpcyBzZXJ2aWNlCi0gUmVkaXNDYWNoZURhdGFiYXNlCiAgLSBzdHJpbmcgCiAgLSBkZWZhdWx0OiAiIgogIC0gRGF0YWJhc2Ugc2VsZWN0aW9uIGZvciB0aGUgUmVkaXMgc2VydmljZQotIEhUVFBUaW1lb3V0U2Vjb25kcwogIC0gaW50NjQKICAtIGRlZmF1bHQ6IDEwCiAgLSBEZWZhdWx0IHRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgY29udGFjdGluZyBDcm93ZHNlYyBMQVBJCi0gVXBkYXRlSW50ZXJ2YWxTZWNvbmRzCiAgLSBpbnQ2NAogIC0gZGVmYXVsdDogNjAKICAtIFVzZWQgb25seSBpbiBgc3RyZWFtYCBtb2RlLCB0aGUgaW50ZXJ2YWwgYmV0d2VlbiByZXF1ZXN0cyB0byBmZXRjaCBibGFja2xpc3RlZCBJUHMgZnJvbSBMQVBJCi0gRGVmYXVsdERlY2lzaW9uU2Vjb25kcwogIC0gaW50NjQKICAtIGRlZmF1bHQ6IDYwCiAgLSBVc2VkIG9ubHkgaW4gYGxpdmVgIG1vZGUsIG1heGltdW0gZGVjaXNpb24gZHVyYXRpb24KLSBDcm93ZHNlY0NhcGlNYWNoaW5lSWQKICAtIHN0cmluZwogIC0gVXNlZCBvbmx5IGluIGBhbG9uZWAgbW9kZSwgbG9naW4gZm9yIENyb3dkc2VjIENBUEkKLSBDcm93ZHNlY0NhcGlQYXNzd29yZAogIC0gc3RyaW5nCiAgLSBVc2VkIG9ubHkgaW4gYGFsb25lYCBtb2RlLCBwYXNzd29yZCBmb3IgQ3Jvd2RzZWMgQ0FQSQotIENyb3dkc2VjQ2FwaVNjZW5hcmlvcwogIC0gW11zdHJpbmcKICAtIFVzZWQgb25seSBpbiBgYWxvbmVgIG1vZGUsIHNjZW5hcmlvcyBmb3IgQ3Jvd2RzZWMgQ0FQSQotIENhcHRjaGFQcm92aWRlcgogIC0gc3RyaW5nCiAgLSBQcm92aWRlciB0byB2YWxpZGF0ZSB0aGUgY2FwdGNoYSwgZXhwZWN0ZWQgdmFsdWVzIGFyZTogYGhjYXB0Y2hhYCwgYHJlY2FwdGNoYWAsIGB0dXJuc3RpbGVgCi0gQ2FwdGNoYVNpdGVLZXkKICAtIHN0cmluZwogIC0gU2l0ZSBrZXkgZm9yIHRoZSBjYXB0Y2hhIHByb3ZpZGVyCi0gQ2FwdGNoYVNlY3JldEtleQogIC0gc3RyaW5nCiAgLSBTaXRlIHNlY3JldCBrZXkgZm9yIHRoZSBjYXB0Y2hhIHByb3ZpZGVyCi0gQ2FwdGNoYUdyYWNlUGVyaW9kU2Vjb25kcwogIC0gaW50NjQKICAtIGRlZmF1bHQ6IDE4MDAgKD0gMzAgbWludXRlcykKICAtIFBlcmlvZCBhZnRlciB2YWxpZGF0aW9uIG9mIGEgY2FwdGNoYSBiZWZvcmUgYSBuZXcgdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBpZiBDcm93ZHNlYyBkZWNpc2lvbiBpcyBzdGlsbCB2YWxpZAotIENhcHRjaGFIVE1MRmlsZVBhdGgKICAtIHN0cmluZwogIC0gZGVmYXVsdDogL2NhcHRjaGEuaHRtbAogIC0gUGF0aCB3aGVyZSB0aGUgY2FwdGNoYSB0ZW1wbGF0ZSBpcyBzdG9yZWQKLSBCYW5IVE1MRmlsZVBhdGgKICAtIHN0cmluZwogIC0gZGVmYXVsdDogIiIKICAtIFBhdGggd2hlcmUgdGhlIGJhbiBodG1sIGZpbGUgaXMgc3RvcmVkIChkZWZhdWx0IGVtcHR5ICIiPWRpc2FibGVkKQoKIyMjIENvbmZpZ3VyYXRpb24KCkZvciBlYWNoIHBsdWdpbiwgdGhlIFRyYWVmaWsgc3RhdGljIGNvbmZpZ3VyYXRpb24gbXVzdCBkZWZpbmUgdGhlIG1vZHVsZSBuYW1lIChhcyBpcyB1c3VhbCBmb3IgR28gcGFja2FnZXMpLgoKVGhlIGZvbGxvd2luZyBkZWNsYXJhdGlvbiAoZ2l2ZW4gaGVyZSBpbiBZQU1MKSBkZWZpbmVzIGEgcGx1Z2luOgo+IE5vdGUgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byBjb3B5IGFsbCB0aG9zZXMgc2V0dGluZ3MgYnV0IG9ubHkgdGhlIG9uZXMgeW91IHdhbnQgdG8gdXNlLiAgCj4gU2VlIHRoZSBleGFtcGxlcyBmb3IgYWR2YW5jZWQgdXNhZ2UuCgpgYGB5YW1sCiMgU3RhdGljIGNvbmZpZ3VyYXRpb24KCmV4cGVyaW1lbnRhbDoKICBwbHVnaW5zOgogICAgYm91bmNlcjoKICAgICAgbW9kdWxlTmFtZTogZ2l0aHViLmNvbS9tYXhsZXJlYm91cmcvY3Jvd2RzZWMtYm91bmNlci10cmFlZmlrLXBsdWdpbgogICAgICB2ZXJzaW9uOiB2WC5ZLlogIyBUbyB1cGRhdGUKYGBgCgpgYGB5YW1sCiMgRHluYW1pYyBjb25maWd1cmF0aW9uCgpodHRwOgogIHJvdXRlcnM6CiAgICBteS1yb3V0ZXI6CiAgICAgIHJ1bGU6IGhvc3QoYHdob2FtaS5sb2NhbGhvc3RgKQogICAgICBzZXJ2aWNlOiBzZXJ2aWNlLWZvbwogICAgICBlbnRyeVBvaW50czoKICAgICAgICAtIHdlYgogICAgICBtaWRkbGV3YXJlczoKICAgICAgICAtIGNyb3dkc2VjCgogIHNlcnZpY2VzOgogICAgc2VydmljZS1mb286CiAgICAgIGxvYWRCYWxhbmNlcjoKICAgICAgICBzZXJ2ZXJzOgogICAgICAgICAgLSB1cmw6IGh0dHA6Ly8xMjcuMC4wLjE6NTAwMAogIAogIG1pZGRsZXdhcmVzOgogICAgY3Jvd2RzZWM6CiAgICAgIHBsdWdpbjoKICAgICAgICBib3VuY2VyOgogICAgICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgICAgIGxvZ0xldmVsOiBERUJVRwogICAgICAgICAgdXBkYXRlSW50ZXJ2YWxTZWNvbmRzOiA2MAogICAgICAgICAgZGVmYXVsdERlY2lzaW9uU2Vjb25kczogNjAKICAgICAgICAgIGh0dHBUaW1lb3V0U2Vjb25kczogMTAKICAgICAgICAgIGNyb3dkc2VjTW9kZTogbGl2ZQogICAgICAgICAgY3Jvd2RzZWNBcHBzZWNFbmFibGVkOiBmYWxzZQogICAgICAgICAgY3Jvd2RzZWNBcHBzZWNIb3N0OiBjcm93ZHNlYzo3NDIyCiAgICAgICAgICBjcm93ZHNlY0FwcHNlY0ZhaWx1cmVCbG9jazogdHJ1ZQogICAgICAgICAgY3Jvd2RzZWNMYXBpS2V5OiBwcml2YXRlS2V5LWZvbwogICAgICAgICAgY3Jvd2RzZWNMYXBpS2V5RmlsZTogL2V0Yy90cmFlZmlrL2NzLXByaXZhdGVLZXktZm9vCiAgICAgICAgICBjcm93ZHNlY0xhcGlIb3N0OiBjcm93ZHNlYzo4MDgwCiAgICAgICAgICBjcm93ZHNlY0xhcGlTY2hlbWU6IGh0dHAKICAgICAgICAgIGNyb3dkc2VjTGFwaVRMU0luc2VjdXJlVmVyaWZ5OiBmYWxzZQogICAgICAgICAgY3Jvd2RzZWNDYXBpTWFjaGluZUlkOiBsb2dpbgogICAgICAgICAgY3Jvd2RzZWNDYXBpUGFzc3dvcmQ6IHBhc3N3b3JkCiAgICAgICAgICBjcm93ZHNlY0NhcGlTY2VuYXJpb3M6CiAgICAgICAgICAgIC0gY3Jvd2RzZWN1cml0eS9odHRwLXBhdGgtdHJhdmVyc2FsLXByb2JpbmcKICAgICAgICAgICAgLSBjcm93ZHNlY3VyaXR5L2h0dHAteHNzLXByb2JpbmcKICAgICAgICAgICAgLSBjcm93ZHNlY3VyaXR5L2h0dHAtZ2VuZXJpYy1iZgogICAgICAgICAgZm9yd2FyZGVkSGVhZGVyc1RydXN0ZWRJUHM6IAogICAgICAgICAgICAtIDEwLjAuMTAuMjMvMzIKICAgICAgICAgICAgLSAxMC4wLjIwLjAvMjQKICAgICAgICAgIGNsaWVudFRydXN0ZWRJUHM6IAogICAgICAgICAgICAtIDE5Mi4xNjguMS4wLzI0CiAgICAgICAgICBmb3J3YXJkZWRIZWFkZXJzQ3VzdG9tTmFtZTogWC1DdXN0b20tSGVhZGVyCiAgICAgICAgICByZWRpc0NhY2hlRW5hYmxlZDogZmFsc2UKICAgICAgICAgIHJlZGlzQ2FjaGVIb3N0OiAicmVkaXM6NjM3OSIKICAgICAgICAgIHJlZGlzQ2FjaGVQYXNzd29yZDogcGFzc3dvcmQKICAgICAgICAgIHJlZGlzQ2FjaGVEYXRhYmFzZTogIjUiCiAgICAgICAgICBjcm93ZHNlY0xhcGlUTFNDZXJ0aWZpY2F0ZUF1dGhvcml0eTogfC0KICAgICAgICAgICAgLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCiAgICAgICAgICAgIE1JSUVCekNDQXUrZ0F3SUJBZ0lDRUFBd0RRWUpLb1pJaHZjTkFRRUxCUUF3Z1pReEN6QUpCZ05WQkFZVEFsVlQKICAgICAgICAgICAgLi4uCiAgICAgICAgICAgIFEwdmVlTnpCUVhnMWYvSnhmZUEzOUlESVgxa2lDZjcxdEdsVAogICAgICAgICAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAgICAgICBjcm93ZHNlY0xhcGlUTFNDZXJ0aWZpY2F0ZUF1dGhvcml0eUZpbGU6IC9ldGMvdHJhZWZpay9jcm93ZHNlYy1jZXJ0cy9jYS5wZW0KICAgICAgICAgIGNyb3dkc2VjTGFwaVRMU0NlcnRpZmljYXRlQm91bmNlcjogfC0KICAgICAgICAgICAgLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCiAgICAgICAgICAgIE1JSUVIakNDQXdhZ0F3SUJBZ0lVT0JUczFlcWthQVVjUHBsenRVcjJ4UmFwdk5Bd0RRWUpLb1pJaHZjTkFRRUwKICAgICAgICAgICAgLi4uCiAgICAgICAgICAgIFJhWEFuWVlVVlJibFMxam1lUGVtaDM4OGhGeGJtcnBHMnBJVHg4QjVGTVVMcUhvajExbzJSbDBnU1Y2dEhJSHoKICAgICAgICAgICAgTjJVPQogICAgICAgICAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAgICAgICBjcm93ZHNlY0xhcGlUTFNDZXJ0aWZpY2F0ZUJvdW5jZXJGaWxlOiAvZXRjL3RyYWVmaWsvY3Jvd2RzZWMtY2VydHMvYm91bmNlci5wZW0KICAgICAgICAgIGNyb3dkc2VjTGFwaVRMU0NlcnRpZmljYXRlQm91bmNlcktleTogfC0KICAgICAgICAgICAgLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQogICAgICAgICAgICBNSUlFb2dJQkFBS0NBUUVBdFlRbmJKcWlmSCtaeW1lUHlsRHhHR0xJdXh6Y0FVVTQvYWpOaitxUkFkSS9VeDNkCiAgICAgICAgICAgIC4uLgogICAgICAgICAgICBpYzVjRFJvNi9WRDNDUzNNWXp5QmNpYmFHYVYzNG5yMEcvcEkrS0Vxa1lDaHprL1BaUkE9CiAgICAgICAgICAgIC0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCiAgICAgICAgICBjcm93ZHNlY0xhcGlUTFNDZXJ0aWZpY2F0ZUJvdW5jZXJLZXlGaWxlOiAvZXRjL3RyYWVmaWsvY3Jvd2RzZWMtY2VydHMvYm91bmNlci1rZXkucGVtCiAgICAgICAgICBjYXB0Y2hhUHJvdmlkZXI6IGhjYXB0Y2hhCiAgICAgICAgICBjYXB0Y2hhU2l0ZUtleTogRklYTUUKICAgICAgICAgIGNhcHRjaGFTZWNyZXRLZXk6IEZJWE1FCiAgICAgICAgICBjYXB0Y2hhR3JhY2VQZXJpb2RTZWNvbmRzOiAxODAwCiAgICAgICAgICBjYXB0Y2hhSFRNTEZpbGVQYXRoOiAvY2FwdGNoYS5odG1sCiAgICAgICAgICBiYW5IVE1MRmlsZVBhdGg6IC9iYW4uaHRtbApgYGAKCiMjIyMgRmlsbCB2YXJpYWJsZSB3aXRoIHZhbHVlIG9mIGZpbGUKCmBDcm93ZHNlY0xhcGlUbHNDZXJ0aWZpY2F0ZUJvdW5jZXJLZXlgLCBgQ3Jvd2RzZWNMYXBpVGxzQ2VydGlmaWNhdGVCb3VuY2VyYCwgYENyb3dkc2VjTGFwaVRsc0NlcnRpZmljYXRlQXV0aG9yaXR5YCwgYENyb3dkc2VjQ2FwaU1hY2hpbmVJZGAsIGBDcm93ZHNlY0NhcGlQYXNzd29yZGAsIGBDcm93ZHNlY0xhcGlLZXlgLCBgQ2FwdGNoYVNpdGVLZXlgIGFuZCBgQ2FwdGNoYVNlY3JldEtleWAgY2FuIGJlIHByb3ZpZGVkIHdpdGggdGhlIGNvbnRlbnQgYXMgcmF3IG9yIHRocm91Z2ggYSBmaWxlIHBhdGggdGhhdCBUcmFlZmlrIGNhbiByZWFkLiAgClRoZSBmaWxlIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCBhcyBwcmVmZXJlbmNlIGlmIGJvdGggY29udGVudCBhbmQgZmlsZSBhcmUgcHJvdmlkZWQgZm9yIHRoZSBzYW1lIHZhcmlhYmxlLgoKRm9ybWF0IGlzOiAgCi0gQ29udGVudDogVmFyaWFibGVOYW1lOiBYWFgKLSBGaWxlICAgOiBWYXJpYWJsZU5hbWVGaWxlOiAvcGF0aAoKIyMjIyBBdXRoZW50aWNhdGUgd2l0aCBMQVBJCgpZb3UgY2FuIGF1dGhlbnRpY2F0ZSB0byB0aGUgTEFQSSBlaXRoZXIgd2l0aCBMQVBJS0VZIG9yIGJ5IHVzaW5nIGNsaWVudCBjZXJ0aWZpY2F0ZXMuICAKUGxlYXNlIHNlZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzIG9uIGVhY2ggb3B0aW9uLgoKIyMjIyBHZW5lcmF0ZSBMQVBJIEtFWQpZb3UgY2FuIGdlbmVyYXRlIGEgY3Jvd2RzZWMgQVBJIGtleSBmb3IgdGhlIExBUEkuICAKWW91IGNhbiBmb2xsb3cgdGhlIGRvY3VtZW50YXRpb24gaGVyZTogW2RvY3MuY3Jvd2RzZWMubmV0L2RvY3MvdXNlcl9ndWlkZXMvbGFwaV9tZ210XShodHRwczovL2RvY3MuY3Jvd2RzZWMubmV0L2RvY3MvdXNlcl9ndWlkZXMvbGFwaV9tZ210KQoKYGBgYmFzaApkb2NrZXIgY29tcG9zZSAtZiBkb2NrZXItY29tcG9zZS1sb2NhbC55bWwgdXAgLWQgY3Jvd2RzZWMKZG9ja2VyIGV4ZWMgY3Jvd2RzZWMgY3NjbGkgYm91bmNlcnMgYWRkIGNyb3dkc2VjQm91bmNlcgpgYGAKClRoaXMgTEFQSSBrZXkgbXVzdCBiZSBzZXQgd2hlcmUgaXMgbm90ZWQgRklYTUUtTEFQSS1LRVkgaW4gdGhlIGRvY2tlci1jb21wb3NlLnltbApgYGB5YW1sCi4uLgp3aG9hbWk6CiAgbGFiZWxzOgogICAgLSAidHJhZWZpay5odHRwLm1pZGRsZXdhcmVzLmNyb3dkc2VjLnBsdWdpbi5ib3VuY2VyLmNyb3dkc2VjbGFwaWtleT1GSVhNRS1MQVBJLUtFWSIKICAgIC0gInRyYWVmaWsuaHR0cC5taWRkbGV3YXJlcy5jcm93ZHNlYy5wbHVnaW4uYm91bmNlci5jcm93ZHNlY2xhcGlzY2hlbWU9aHR0cCIKICAgIC0gInRyYWVmaWsuaHR0cC5taWRkbGV3YXJlcy5jcm93ZHNlYy5wbHVnaW4uYm91bmNlci5jcm93ZHNlY2xhcGlob3N0PWNyb3dkc2VjOjgwODAiCi4uLgpjcm93ZHNlYzoKICBlbnZpcm9ubWVudDoKICAgIEJPVU5DRVJfS0VZX1RSQUVGSUs6IEZJWE1FLUxBUEktS0VZCi4uLgpgYGAKCk5vdGU6Cj4gQ3Jvd2RzZWMgZG9lcyBub3QgcmVxdWlyZSBhIHNwZWNpZmljIGZvcm1hdCBmb3IgbGEgTEFQSS1rZXksIHlvdSBtYXkgdXNlIHNvbWV0aGluZyBsaWtlIEZJWE1FLUxBUEktS0VZIGJ1dCB0aGF0IGlzIG5vdCByZWNvbW1hbmRlZCBmb3Igb2J2aW91cyByZWFzb25zCgpZb3UgY2FuIHRoZW4gcnVuIGFsbCB0aGUgY29udGFpbmVyczoKYGBgYmFzaApkb2NrZXIgY29tcG9zZSB1cCAtZApgYGAKCiMjIyMgVXNlIGNlcnRpZmljYXRlcyB0byBhdXRoZW50aWNhdGUgd2l0aCBDcm93ZFNlYwoKWW91IGNhbiBmb2xsb3cgdGhlIGV4YW1wbGUgaW4gYGV4YW1wbGVzL3Rscy1hdXRoYCB0byB2aWV3IGhvdyB0byBhdXRoZW50aWNhdGUgd2l0aCBjbGllbnQgY2VydGlmaWNhdGVzIHdpdGggdGhlIExBUEkuICAKSW4gdGhhdCBjYXNlLCBjb21tdW5pY2F0aW9ucyB3aXRoIHRoZSBMQVBJIG11c3QgZ28gdGhyb3VnaCBIVFRQUy4KCkEgc2NyaXB0IGlzIGF2YWlsYWJsZSB0byBnZW5lcmF0ZSBjZXJ0aWZpY2F0ZXMgaW4gYGV4YW1wbGVzL3Rscy1hdXRoL2dlbmNlcnRzLnNoYCBhbmQgbXVzdCBiZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGlucHV0cyBmb3IgdGhlIFBLSSBjcmVhdGlvbi4KCiMjIyMgVXNlIEhUVFBTIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIExBUEkKClRvIGNvbW11bmljYXRlIHdpdGggdGhlIExBUEkgaW4gSFRUUFMgeW91IG5lZWQgdG8gZWl0aGVyIGFjY2VwdCBhbnkgY2VydGlmaWNhdGVzIGJ5IHNldHRpbmcgdGhlIGBjcm93ZHNlY0xhcGlUTFNJbnNlY3VyZVZlcmlmeWAgdG8gdHJ1ZSBvciBhZGQgdGhlIENBIHVzZWQgYnkgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBvZiBDcm93ZHNlYyB1c2luZyBgY3Jvd2RzZWNMYXBpVExTQ2VydGlmaWNhdGVBdXRob3JpdHlgIG9yIGBjcm93ZHNlY0xhcGlUTFNDZXJ0aWZpY2F0ZUF1dGhvcml0eUZpbGVgLgpTZXQgdGhlIGBjcm93ZHNlY0xhcGlTY2hlbWVgIHRvIGh0dHBzLgoKQ3Jvd2RzZWMgbXVzdCBiZSBsaXN0ZW5pbmcgaW4gSFRUUFMgZm9yIHRoaXMgdG8gd29yay4KUGxlYXNlIHNlZSB0aGUgW3Rscy1hdXRoIGV4YW1wbGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhsZXJlYm91cmcvY3Jvd2RzZWMtYm91bmNlci10cmFlZmlrLXBsdWdpbi9ibG9iL21haW4vZXhhbXBsZXMvdGxzLWF1dGgvUkVBRE1FLm1kKSBvciB0aGUgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbjogW2RvY3MuY3Jvd2RzZWMubmV0L2RvY3MvbG9jYWxfYXBpL3Rsc19hdXRoL10oaHR0cHM6Ly9kb2NzLmNyb3dkc2VjLm5ldC9kb2NzL2xvY2FsX2FwaS90bHNfYXV0aC8pCgojIyMjIE1hbnVhbGx5IGFkZCBhbiBJUCB0byB0aGUgYmxvY2tsaXN0IChmb3IgdGVzdGluZyBwdXJwb3NlcykKCmBgYGJhc2gKZG9ja2VyIGNvbXBvc2UgdXAgLWQgY3Jvd2RzZWMKZG9ja2VyIGV4ZWMgY3Jvd2RzZWMgY3NjbGkgZGVjaXNpb25zIGFkZCAtLWlwIDEwLjAuMC4xMCAtZCAxMG0gIyB0aGlzIHdpbGwgYmUgZWZmZWN0aXZlIDEwbWluCmRvY2tlciBleGVjIGNyb3dkc2VjIGNzY2xpIGRlY2lzaW9ucyByZW1vdmUgLS1pcCAxMC4wLjAuMTAKZG9ja2VyIGV4ZWMgY3Jvd2RzZWMgY3NjbGkgZGVjaXNpb25zIGFkZCAtLWlwIDEwLjAuMC4xMCAtZCAxMG0gLXQgY2FwdGNoYSAjIHRoaXMgd2lsbCByZXR1cm4gYSBjYXB0Y2hhIGNoYWxsZW5nZSAgCmRvY2tlciBleGVjIGNyb3dkc2VjIGNzY2xpIGRlY2lzaW9ucyByZW1vdmUgLS1pcCAxMC4wLjAuMTAgLXQgY2FwdGNoYQpgYGAKCiMjIyBFeGFtcGxlcwoKIyMjIyAxLiBCZWhpbmQgYW5vdGhlciBwcm94eSBzZXJ2aWNlIChleDogY2xvdWZsYXJlKSBbZXhhbXBsZXMvYmVoaW5kLXByb3h5L1JFQURNRS5tZF0oaHR0cHM6Ly9naXRodWIuY29tL21heGxlcmVib3VyZy9jcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luL2Jsb2IvbWFpbi9leGFtcGxlcy9iZWhpbmQtcHJveHkvUkVBRE1FLm1kKQoKIyMjIyAyLiBXaXRoIFJlZGlzIGFzIGFuIGV4dGVybmFsIHNoYXJlZCBjYWNoZSBbZXhhbXBsZXMvcmVkaXMtY2FjaGUvUkVBRE1FLm1kXShodHRwczovL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4vYmxvYi9tYWluL2V4YW1wbGVzL3JlZGlzLWNhY2hlL1JFQURNRS5tZCkKCiMjIyMgMy4gVXNpbmcgVHJ1c3RlZCBJUCAoZXg6IExBTiBPUiBWUE4pIHRoYXQgd29uJ3QgZ2V0IGZpbHRlcmVkIGJ5IGNyb3dkc2VjIFtleGFtcGxlcy90cnVzdGVkLWlwcy9SRUFETUUubWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhsZXJlYm91cmcvY3Jvd2RzZWMtYm91bmNlci10cmFlZmlrLXBsdWdpbi9ibG9iL21haW4vZXhhbXBsZXMvdHJ1c3RlZC1pcHMvUkVBRE1FLm1kKQoKIyMjIyA0LiBVc2luZyBDcm93ZHNlYyBhbmQgVHJhZWZpayBpbnN0YWxsZWQgYXMgYmluYXJ5IGluIGEgc2luZ2xlIFZNIFtleGFtcGxlcy9iaW5hcnktdm0vUkVBRE1FLm1kXShodHRwczovL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4vYmxvYi9tYWluL2V4YW1wbGVzL2JpbmFyeS12bS9SRUFETUUubWQpCgojIyMjIDUuIFVzaW5nIGh0dHBzIGNvbW11bmljYXRpb24gYW5kIHRscyBhdXRoZW50aWNhdGlvbiB3aXRoIENyb3dkc2VjIFtleGFtcGxlcy90bHMtYXV0aC9SRUFETUUubWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhsZXJlYm91cmcvY3Jvd2RzZWMtYm91bmNlci10cmFlZmlrLXBsdWdpbi9ibG9iL21haW4vZXhhbXBsZXMvdGxzLWF1dGgvUkVBRE1FLm1kKQoKIyMjIyA2LiBVc2luZyBDcm93ZHNlYyBhbmQgVHJhZWZpayBpbiBLdWJlcm5ldGVzIFtleGFtcGxlcy9rdWJlcm5ldGVzL1JFQURNRS5tZF0oaHR0cHM6Ly9naXRodWIuY29tL21heGxlcmVib3VyZy9jcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luL2Jsb2IvbWFpbi9leGFtcGxlcy9rdWJlcm5ldGVzL1JFQURNRS5tZCkKCiMjIyMgNy4gVXNpbmcgVHJhZWZpayBpbiBzdGFuZGFsb25lIG1vZGUgd2l0aG91dCBDcm93ZHNlYyBbZXhhbXBsZXMvc3RhbmRhbG9uZS1tb2RlL1JFQURNRS5tZF0oaHR0cHM6Ly9naXRodWIuY29tL21heGxlcmVib3VyZy9jcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luL2Jsb2IvbWFpbi9leGFtcGxlcy9zdGFuZGFsb25lLW1vZGUvUkVBRE1FLm1kKQoKIyMjIyA4LiBVc2luZyBUcmFlZmlrIHdpdGggQXBwU2VjIGZlYXR1cmUgZW5hYmxlZCBbZXhhbXBsZXMvYXBwc2VjLWVuYWJsZWQvUkVBRE1FLm1kXShodHRwczovL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnL2Nyb3dkc2VjLWJvdW5jZXItdHJhZWZpay1wbHVnaW4vYmxvYi9tYWluL2V4YW1wbGVzL2FwcHNlYy1lbmFibGVkL1JFQURNRS5tZCkKCiMjIyMgOS4gVXNpbmcgVHJhZWZpayB3aXRoIENhcHRjaGEgcmVtZWRpYXRpb24gZmVhdHVyZSBlbmFibGVkIFtleGFtcGxlcy9jYXB0Y2hhL1JFQURNRS5tZF0oaHR0cHM6Ly9naXRodWIuY29tL21heGxlcmVib3VyZy9jcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luL2Jsb2IvbWFpbi9leGFtcGxlcy9jYXB0Y2hhL1JFQURNRS5tZCkKCiMjIyMgMTAuIFVzaW5nIFRyYWVmaWsgd2l0aCBDdXN0b20gQmFuIEhUTUwgUGFnZSBbZXhhbXBsZXMvY3VzdG9tLWJhbi1wYWdlL1JFQURNRS5tZF0oaHR0cHM6Ly9naXRodWIuY29tL21heGxlcmVib3VyZy9jcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luL2Jsb2IvbWFpbi9leGFtcGxlcy9jdXN0b20tYmFuLXBhZ2UvUkVBRE1FLm1kKQoKIyMjIExvY2FsIE1vZGUKClRyYWVmaWsgYWxzbyBvZmZlcnMgYSBkZXZlbG9wZXIgbW9kZSB0aGF0IGNhbiBiZSB1c2VkIGZvciB0ZW1wb3JhcnkgdGVzdGluZyBvZiBwbHVnaW5zIG5vdCBob3N0ZWQgb24gR2l0SHViLgpUbyB1c2UgYSBwbHVnaW4gaW4gbG9jYWwgbW9kZSwgdGhlIFRyYWVmaWsgc3RhdGljIGNvbmZpZ3VyYXRpb24gbXVzdCBkZWZpbmUgdGhlIG1vZHVsZSBuYW1lIChhcyBpcyB1c3VhbCBmb3IgR28gcGFja2FnZXMpIGFuZCBhIHBhdGggdG8gYSBbR28gd29ya3NwYWNlXShodHRwczovL2dvbGFuZy5vcmcvZG9jL2dvcGF0aF9jb2RlLmh0bWwjV29ya3NwYWNlcyksIHdoaWNoIGNhbiBiZSB0aGUgbG9jYWwgR09QQVRIIG9yIGFueSBkaXJlY3RvcnkuCgpUaGUgcGx1Z2lucyBtdXN0IGJlIHBsYWNlZCBpbiB0aGUgYC4vcGx1Z2lucy1sb2NhbGAgZGlyZWN0b3J5LAp3aGljaCBzaG91bGQgYmUgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoZSBwcm9jZXNzIHJ1bm5pbmcgdGhlIFRyYWVmaWsgYmluYXJ5LgpUaGUgc291cmNlIGNvZGUgb2YgdGhlIHBsdWdpbiBzaG91bGQgYmUgb3JnYW5pemVkIGFzIGZvbGxvd3M6CgpgYGAKLi9wbHVnaW5zLWxvY2FsLwogICAg4pSU4pSA4pSAIHNyYwogICAgICAgIOKUlOKUgOKUgCBnaXRodWIuY29tCiAgICAgICAgICAgIOKUlOKUgOKUgCBtYXhsZXJlYm91cmcKICAgICAgICAgICAgICAgIOKUlOKUgOKUgCBjcm93ZHNlYy1ib3VuY2VyLXRyYWVmaWstcGx1Z2luCiAgICAgICAgICAgICAgICAgICAg4pSc4pSA4pSAIGJvdW5jZXIuZ28KICAgICAgICAgICAgICAgICAgICDilJzilIDilIAgYm91bmNlcl90ZXN0LmdvCiAgICAgICAgICAgICAgICAgICAg4pSc4pSA4pSAIGdvLm1vZAogICAgICAgICAgICAgICAgICAgIOKUnOKUgOKUgCBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAg4pSc4pSA4pSAIE1ha2VmaWxlCiAgICAgICAgICAgICAgICAgICAg4pSc4pSA4pSAIHJlYWRtZS5tZAogICAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgCB2ZW5kb3IvKiAKYGBgCgpGb3IgbG9jYWwgZGV2ZWxvcG1lbnQsIGEgYGRvY2tlci1jb21wb3NlLmxvY2FsLnltbGAgaXMgcHJvdmlkZWQgd2hpY2ggcmVwcm9kdWNlcyB0aGUgZGlyZWN0b3J5IGxheW91dCBuZWVkZWQgYnkgVHJhZWZpay4gIApUaGlzIHdvcmtzIG9uY2UgeW91IGhhdmUgZ2VuZXJhdGVkIGFuZCBmaWxsZWQgeW91ciAqTEFQSS1LRVkqIChjcm93ZHNlY0xhcGlLZXkpLCBpZiBub3QgcmVhZCBhYm92ZSBmb3IgaW5mb3JtYXRpb25zLgoKYGBgYmFzaApkb2NrZXIgY29tcG9zZSAtZiBkb2NrZXItY29tcG9zZS5sb2NhbC55bWwgdXAgLWQKYGBgCkVxdWl2YWxlbnQgdG8KYGBgYmFzaAptYWtlIHJ1bl9sb2NhbApgYGAKCiMjIyBBYm91dAoKW21hdGhpZXVIYV0oaHR0cHM6Ly9naXRodWIuY29tL21hdGhpZXVIYSkgYW5kIFtJXShodHRwczovL2dpdGh1Yi5jb20vbWF4bGVyZWJvdXJnKSBoYXZlIGJlZW4gdXNpbmcgVHJhZWZpayBzaW5jZSAyMDIwIGF0IFtQcmltYWR2aXpdKGh0dHBzOi8vcHJpbWFkdml6LmNvbSkuCldlIGNvbWUgZnJvbSBhIHdlYiBkZXZlbG9wbWVudCBhbmQgc2VjdXJpdHkgZW5naW5lZXIgYmFja2dyb3VuZCBhbmQgd2FudGVkIHRvIGFkZCB0aGUgcG93ZXIgb2YgYSB2ZXJ5IHByb21pc2luZyB0ZWNobm9sb2d5IChDcm93ZHNlYykgdG8gdGhlIGVkZ2Ugcm91dGVyIHdlIGxvdmUuICAKCldlIGluaXRpYWxseSByYW4gaW50byB0aGlzIHByb2plY3Q6IFtnaXRodWIuY29tL2Zib25hbGFpci90cmFlZmlrLWNyb3dkc2VjLWJvdW5jZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9mYm9uYWxhaXIvdHJhZWZpay1jcm93ZHNlYy1ib3VuY2VyKQpJdCB3YXMgdXNpbmcgdHJhZWZpayBhbmQgZm9yd2FyZCBhdXRoIG1pZGRsZXdhcmUgdG8gdmVyaWZ5IGV2ZXJ5IHJlcXVlc3QuICAKVGhleSBoYWQgdG8gZ28gdGhyb3VnaCBhIHdlYnNlcnZlciB3aGljaCB0aGVuIGNvbnRhY3RzIGFub3RoZXIgd2Vic2VydmljZSAodGhlIGNyb3dkc2VjIExBUEkpIHRvIG1ha2UgYSBkZWNpc2lvbiBiYXNlZCBvbiB0aGUgc291cmNlIElQLiAgCldlIGluaXRpYWxseSBwcm9wb3NlZCBzb21lIGltcHJvdmVtZW50cyBieSBpbXBsZW1lbnRpbmcgYSBzdHJlYW1pbmcgbW9kZSBhbmQgYSBsb2NhbCBjYWNoZS4gIApXaXRoIHRoZSBUcmFlZmlrIGhhY2thdGhvbiB3ZSBkZWNpZGVkIHRvIGltcGxlbWVudCBvdXIgc29sdXRpb24gZGlyZWN0bHkgYXMgYSBUcmFlZmlrIHBsdWdpbiB3aGljaCBjb3VsZCBiZSBmb3VuZCBieSBldmVyeW9uZSBvbiBbcGx1Z2lucy50cmFlZmlrLmlvXShodHRwczovL3BsdWdpbnMudHJhZWZpay5pbykgYW5kIGJlIG1vcmUgcGVyZm9ybWFudC4K", "status": "stable", "version": "v1.2.1", "assets": [