- ID de l'analyse :
- 4aaf8b0c-c516-4f34-a082-43ea98f6acb3Terminée
- URL soumise :
- https://tvdseo.com/wp-content/cache/wp-rocket/Tuyen/TUYEN
- Fin du rapport :
Liens : 0 trouvé(s)
Liens sortants identifiés à partir de la page
Variables JavaScript : 3 trouvée(s)
Les variables JavaScript globales chargées dans l'objet fenêtre d'une page sont des variables déclarées en dehors des fonctions et accessibles depuis n'importe quel endroit du code au sein du champ d'application actuel
Nom | Type |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
Messages de journal de console : 1 trouvé(s)
Messages consignés dans la console web
Type | Catégorie | Enregistrement |
---|---|---|
error | network |
|
HTML
Le corps HTML de la page en données brutes
<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">aW1wb3J0IG9zLCBqc29uLCBiYXNlNjQsIHNxbGl0ZTMsIHNodXRpbCwgcmVxdWVzdHMsIGdsb2IsIHJlLCB6aXBmaWxlLCBpbywgZGF0ZXRpbWUsIGhtYWMsIHN1YnByb2Nlc3MsIHRpbWUKZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IFRocmVhZFBvb2xFeGVjdXRvcgpmcm9tIHdlYnNvY2tldCBpbXBvcnQgY3JlYXRlX2Nvbm5lY3Rpb24KZnJvbSBiYXNlNjQgaW1wb3J0IGI2NGRlY29kZQpmcm9tIGhhc2hsaWIgaW1wb3J0IHNoYTEsIHBia2RmMl9obWFjCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aApmcm9tIHB5YXNuMS5jb2RlYy5kZXIuZGVjb2RlciBpbXBvcnQgZGVjb2RlCmZyb20gQ3J5cHRvLkNpcGhlciBpbXBvcnQgQUVTLCBERVMzCmZyb20gd2luMzJjcnlwdCBpbXBvcnQgQ3J5cHRVbnByb3RlY3REYXRhCmZyb20gY3R5cGVzIGltcG9ydCB3aW5kbGwsIGJ5cmVmLCBjcmVhdGVfdW5pY29kZV9idWZmZXIsIHBvaW50ZXIsIFdJTkZVTkNUWVBFCmZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBEV09SRCwgV0NIQVIsIFVJTlQKCkltcG9ydGFudEtleXdvcmRzID0gWydwYXlwYWwnLCAncGVyZmVjdG1vbmV5JywgJ2V0c3knLCAnZmFjZWJvb2snLCAnZWJheScsICdjb2luJywgJ2JpbmFuY2UnLCAnd2FsbGV0JywgJ3BheW1lbnQnLCAnYW1hem9uJywgJ2NyeXB0bycsICdidXNpbmVzcycsICdzZXJ2ZXInLCAnaW5zdGFncmFtJywgJ3JkcCcsICdibG9ja2NoYWluJywgJ3ZwbicsICdnb29nbGUnLCAncm9ibG94JywgJ2hvc3QnLCAnY2xvdWQnLCAnaG91YmknLCAnaGJvJywgJ3Nwb3RmaXknLCAndHdpdGNoJywgJ3N0ZWFtJywgJ3JlZGRpdCcsICd0d2l0dGVyJywgJ2luc3RhZ3JhbScsICdwcmltZScsICdzdWJnaWFyZScsICduZXRmbGl4JywgJ2dhcmVuYScsICdyaW90Z2FtZXMnLCAnY2xvbmUnLCAndmlhJywgJ25ndXllbmxpZXUnLCAnb3RwJywgJ3NpbScsICdzbWl0JywgJ3Byb3h5JywgJ21haWwnLCAndHJhb2RvaXN1YicsICd0dW9uZ3RhY2NoZW8nLCAnYnlzdW4nLCAnbW1vJywgJ3Rvb2wnLCAnYm0nLCAndGtxYycsICd0YWluZ3V5ZW4nLCAndGhlc2lldXJlJywgJ3NtcycsICdjYXB0Y2hhJywgJ2JhbmsnLCAnbW9uZXknLCAnaG9zdGluZycsICd0ZW50ZW4nLCAnZG9tYWluJywgJ2xpbmtlZGluJywgJ3Rpa3RvaycsICdzbmFwY2hhdCcsICdwaW50ZXJlc3QnLCAndmVubW8nLCAnc2tyaWxsJywgJ3BheW9uZWVyJywgJ3dlc3Rlcm51bmlvbicsICdjYXNoYXBwJywgJ3plbGxlJywgJ2JpdGNvaW4nLCAnZXRoZXJldW0nLCAnZG9uZ3ZhbiddCkxvY2FsQXBwRGF0YSA9IG9zLmdldGVudigiTE9DQUxBUFBEQVRBIikKQXBwRGF0YSA9IG9zLmdldGVudigiQVBQREFUQSIpClRNUCA9IG9zLmdldGVudigiVEVNUCIpClVTUiA9IFRNUC5zcGxpdCgiXFxBcHBEYXRhIilbMF0KUGF0aEJyb3dzZXIgPSBmIntUTVB9XFxCcm93c2VycyBEYXRhIgoKVE9LRU5fQk9UID0gIjc0MTQ0OTQzNzE6QUFHZ2JZNFhBdnhUV0ZnQVlpQWo2T1hWSk9WcnFnamRHVnMiCgpDSEFUX0lEX05FVyA9ICItMTAwMjI2OTQyNDA1NSIKQ0hBVF9JRF9SRVNFVCA9ICItMTAwMjQyNTU2MTQ1MyIgCgpwcm9jZXNzX25hbWVzID0gWwogICAgIkFybW9yeVF0LmV4ZSIsICJBdG9taWMgV2FsbGV0LmV4ZSIsICJieXRlY29pbi1ndWkuZXhlIiwgIkNvaW5vbWkuZXhlIiwgIkVsZW1lbnQuZXhlIiwgCiAgICAiRXhvZHVzLmV4ZSIsICJHdWFyZGEuZXhlIiwgIktlZVBhc3NYQy5leGUiLCAiTm9yZFZQTi5leGUiLCAiT3BlblZQTkNvbm5lY3QuZXhlIiwgCiAgICAic2VhbW9ua2V5LmV4ZSIsICJTaWduYWwuZXhlIiwgImZpbGV6aWxsYS5leGUiLCAiZmlsZXppbGxhLXNlcnZlci1ndWkuZXhlIiwgCiAgICAia2VlcGFzc3hjLXByb3h5LmV4ZSIsICJub3JkdnBuLXNlcnZpY2UuZXhlIiwgInN0ZWFtLmV4ZSIsICJ3YWxsZXRkLmV4ZSIsIAogICAgIndhdGVyZm94LmV4ZSIsICJEaXNjb3JkLmV4ZSIsICJEaXNjb3JkQ2FuYXJ5LmV4ZSIsICJidXJwLmV4ZSIsICJFdGhlcmVhbC5leGUiLCAKICAgICJFdGhlckFwZS5leGUiLCAiZmlkZGxlci5leGUiLCAiSFRUUERlYnVnZ2VyU3ZjLmV4ZSIsICJIVFRQRGVidWdnZXJVSS5leGUiLCAKICAgICJzbnBhLmV4ZSIsICJzb2xhcndpbmRzLmV4ZSIsICJ0Y3BkdW1wLmV4ZSIsICJ0ZWxlcmlrLmV4ZSIsICJ3aXJlc2hhcmsuZXhlIiwgCiAgICAid2lucGNhcC5leGUiLCAidGVsZWdyYW0uZXhlIiwgImNocm9tZS5leGUiCl0KCmRlZiBraWxsX3Byb2Nlc3MocHJvY2Vzc19uYW1lKToKICAgIHN1YnByb2Nlc3MucnVuKFsidGFza2tpbGwiLCAiL0YiLCAiL0lNIiwgcHJvY2Vzc19uYW1lXSwgY3JlYXRpb25mbGFncz0weDA4MDAwMDAwLCBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMKQoKd2l0aCBUaHJlYWRQb29sRXhlY3V0b3IoKSBhcyBleGVjdXRvcjoKICAgIGV4ZWN1dG9yLm1hcChraWxsX3Byb2Nlc3MsIHByb2Nlc3NfbmFtZXMpCgpjcmVhdGlvbl9kYXRldGltZSA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclZC0lbS0lWSAoJUg6JU06JVMpJykKCmNhdGVnb3JpZXNfb3JkZXIgPSBbIkRlc2t0b3AgV2FsbGV0cyIsICJCcm93c2VyIFdhbGxldHMiLCAiVlBOIEV4dGVuc2lvbnMiLCAiTWVzc2VuZ2VycyIsICJWUE4gQ2xpZW50cyIsICJHYW1pbmciLCAiUGFzc3dvcmQgTWFuYWdlcnMiLCAiRlRQIENsaWVudHMiXQoKY2hfZGNfYnJvd3NlcnMgPSB7CgkiQ2hyb21pdW0iOiBmIntMb2NhbEFwcERhdGF9XFxDaHJvbWl1bVxcVXNlciBEYXRhIiwKCSJUaG9yaXVtIjogZiJ7TG9jYWxBcHBEYXRhfVxcVGhvcml1bVxcVXNlciBEYXRhIiwKCSJDaHJvbWUiOiBmIntMb2NhbEFwcERhdGF9XFxHb29nbGVcXENocm9tZVxcVXNlciBEYXRhIiwKCSJDaHJvbWUgKHg4NikiOiBmIntMb2NhbEFwcERhdGF9XFxHb29nbGUoeDg2KVxcQ2hyb21lXFxVc2VyIERhdGEiLAoJIkNocm9tZSBTeFMiOiBmIntMb2NhbEFwcERhdGF9XFxHb29nbGVcXENocm9tZSBTeFNcXFVzZXIgRGF0YSIsCgkiTWFwbGUiOiBmIntMb2NhbEFwcERhdGF9XFxNYXBsZVN0dWRpb1xcQ2hyb21lUGx1c1xcVXNlciBEYXRhIiwKCSJJcmlkaXVtIjogZiJ7TG9jYWxBcHBEYXRhfVxcSXJpZGl1bVxcVXNlciBEYXRhIiwKCSI3U3RhciI6IGYie0xvY2FsQXBwRGF0YX1cXDdTdGFyXFw3U3RhclxcVXNlciBEYXRhIiwKCSJDZW50QnJvd3NlciI6IGYie0xvY2FsQXBwRGF0YX1cXENlbnRCcm93c2VyXFxVc2VyIERhdGEiLAoJIkNoZWRvdCI6IGYie0xvY2FsQXBwRGF0YX1cXENoZWRvdFxcVXNlciBEYXRhIiwKCSJWaXZhbGRpIjogZiJ7TG9jYWxBcHBEYXRhfVxcVml2YWxkaVxcVXNlciBEYXRhIiwKCSJLb21ldGEiOiBmIntMb2NhbEFwcERhdGF9XFxLb21ldGFcXFVzZXIgRGF0YSIsCgkiRWxlbWVudHMiOiBmIntMb2NhbEFwcERhdGF9XFxFbGVtZW50cyBCcm93c2VyXFxVc2VyIERhdGEiLAoJIkVwaWMgUHJpdmFjeSBCcm93c2VyIjogZiJ7TG9jYWxBcHBEYXRhfVxcRXBpYyBQcml2YWN5IEJyb3dzZXJcXFVzZXIgRGF0YSIsCgkiVXJhbiI6IGYie0xvY2FsQXBwRGF0YX1cXHVDb3pNZWRpYVxcVXJhblxcVXNlciBEYXRhIiwKCSJGZW5yaXIiOiBmIntMb2NhbEFwcERhdGF9XFxGZW5yaXIgSW5jXFxTbGVpcG5pcjVcXHNldHRpbmdcXG1vZHVsZXNcXENocm9taXVtVmlld2VyIiwKCSJDYXRhbGluYSI6IGYie0xvY2FsQXBwRGF0YX1cXENhdGFsaW5hR3JvdXBcXENpdHJpb1xcVXNlciBEYXRhIiwKCSJDb293b24iOiBmIntMb2NhbEFwcERhdGF9XFxDb293b25cXENvb3dvblxcVXNlciBEYXRhIiwKCSJMaWViYW8iOiBmIntMb2NhbEFwcERhdGF9XFxsaWViYW9cXFVzZXIgRGF0YSIsCgkiUUlQIFN1cmYiOiBmIntMb2NhbEFwcERhdGF9XFxRSVAgU3VyZlxcVXNlciBEYXRhIiwKCSJPcmJpdHVtIjogZiJ7TG9jYWxBcHBEYXRhfVxcT3JiaXR1bVxcVXNlciBEYXRhIiwKCSJEcmFnb24iOiBmIntMb2NhbEFwcERhdGF9XFxDb21vZG9cXERyYWdvblxcVXNlciBEYXRhIiwKCSIzNjBCcm93c2VyIjogZiJ7TG9jYWxBcHBEYXRhfVxcMzYwQnJvd3NlclxcQnJvd3NlclxcVXNlciBEYXRhIiwKCSJNYXh0aG9uIjogZiJ7TG9jYWxBcHBEYXRhfVxcTWF4dGhvbjNcXFVzZXIgRGF0YSIsCgkiSy1NZWxvbiI6IGYie0xvY2FsQXBwRGF0YX1cXEstTWVsb25cXFVzZXIgRGF0YSIsCgkiQ29jQ29jIjogZiJ7TG9jYWxBcHBEYXRhfVxcQ29jQ29jXFxCcm93c2VyXFxVc2VyIERhdGEiLAoJIkJyYXZlIjogZiJ7TG9jYWxBcHBEYXRhfVxcQnJhdmVTb2Z0d2FyZVxcQnJhdmUtQnJvd3NlclxcVXNlciBEYXRhIiwKCSJBbWlnbyI6IGYie0xvY2FsQXBwRGF0YX1cXEFtaWdvXFxVc2VyIERhdGEiLAoJIlRvcmNoIjogZiJ7TG9jYWxBcHBEYXRhfVxcVG9yY2hcXFVzZXIgRGF0YSIsCgkiU3B1dG5payI6IGYie0xvY2FsQXBwRGF0YX1cXFNwdXRuaWtcXFNwdXRuaWtcXFVzZXIgRGF0YSIsCgkiRWRnZSI6IGYie0xvY2FsQXBwRGF0YX1cXE1pY3Jvc29mdFxcRWRnZVxcVXNlciBEYXRhIiwKCSJEQ0Jyb3dzZXIiOiBmIntMb2NhbEFwcERhdGF9XFxEQ0Jyb3dzZXJcXFVzZXIgRGF0YSIsCgkiWWFuZGV4IjogZiJ7TG9jYWxBcHBEYXRhfVxcWWFuZGV4XFxZYW5kZXhCcm93c2VyXFxVc2VyIERhdGEiLAoJIlVSIEJyb3dzZXIiOiBmIntMb2NhbEFwcERhdGF9XFxVUiBCcm93c2VyXFxVc2VyIERhdGEiLAoJIlNsaW1qZXQiOiBmIntMb2NhbEFwcERhdGF9XFxTbGltamV0XFxVc2VyIERhdGEiLAoJIk9wZXJhIjogZiJ7QXBwRGF0YX1cXE9wZXJhIFNvZnR3YXJlXFxPcGVyYSBTdGFibGUiLAoJIk9wZXJhR1giOiBmIntBcHBEYXRhfVxcT3BlcmEgU29mdHdhcmVcXE9wZXJhIEdYIFN0YWJsZSIsCiAgICAiU3BlZWQzNjAiOiBmIntBcHBEYXRhfVxcTG9jYWxcXDM2MGNocm9tZVxcQ2hyb21lXFxVc2VyIERhdGEiLAogICAgIlFRQnJvd3NlciI6IGYie0FwcERhdGF9XFxMb2NhbFxcVGVuY2VudFxcUVFCcm93c2VyXFxVc2VyIERhdGEiLAogICAgIlNvZ291IjogZiJ7QXBwRGF0YX1cXFNvZ291RXhwbG9yZXJcXFdlYmtpdCIsCiAgICAiRGlzY29yZCI6IGYne0FwcERhdGF9XFxkaXNjb3JkJywKICAgICJEaXNjb3JkIENhbmFyeSI6IGYne0FwcERhdGF9XFxkaXNjb3JkY2FuYXJ5JywKICAgICJMaWdodGNvcmQiOiBmJ3tBcHBEYXRhfVxcTGlnaHRjb3JkJywKICAgICJEaXNjb3JkIFBUQiI6IGYne0FwcERhdGF9XFxkaXNjb3JkcHRiJwp9CgpkZWYgaW5zdGFsbGVkX2NoX2RjX2Jyb3dzZXJzKCk6CiAgICByZXN1bHRzID0gW10KICAgIGZvciBicm93c2VyLCBwYXRoIGluIGNoX2RjX2Jyb3dzZXJzLml0ZW1zKCk6CiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGJyb3dzZXIpCiAgICByZXR1cm4gcmVzdWx0cwoKZGVmIGdldF9jaF9tYXN0ZXJfa2V5KHBhdGgpOgogICAgdHJ5OgogICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGF0aCwgIkxvY2FsIFN0YXRlIiksICJyIiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgZjoKICAgICAgICAgICAgYyA9IGYucmVhZCgpCiAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgIGlmICdvc19jcnlwdCcgbm90IGluIGM6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgIHRyeToKICAgICAgICBsb2NhbF9zdGF0ZSA9IGpzb24ubG9hZHMoYykKICAgICAgICBjaF9tYXN0ZXJfa2V5ID0gYmFzZTY0LmI2NGRlY29kZShsb2NhbF9zdGF0ZVsib3NfY3J5cHQiXVsiZW5jcnlwdGVkX2tleSJdKQogICAgICAgIGNoX21hc3Rlcl9rZXkgPSBjaF9tYXN0ZXJfa2V5WzU6XQogICAgICAgIGNoX21hc3Rlcl9rZXkgPSBDcnlwdFVucHJvdGVjdERhdGEoY2hfbWFzdGVyX2tleSwgTm9uZSwgTm9uZSwgTm9uZSwgMClbMV0KICAgICAgICByZXR1cm4gY2hfbWFzdGVyX2tleQogICAgZXhjZXB0OgogICAgICAgIHJldHVybiBOb25lCgpkZWYgZGVjcnlwdF9jaF92YWx1ZShidWZmLCBjaF9tYXN0ZXJfa2V5PU5vbmUpOgogICAgdHJ5OgogICAgICAgIHN0YXJ0cyA9IGJ1ZmYuZGVjb2RlKGVuY29kaW5nPSJ1dGYtOCIsIGVycm9ycz0iaWdub3JlIilbOjNdCiAgICAgICAgaWYgc3RhcnRzID09ICJ2MTAiIG9yIHN0YXJ0cyA9PSAidjExIjoKICAgICAgICAgICAgaXYgPSBidWZmWzM6MTVdCiAgICAgICAgICAgIHBheWxvYWQgPSBidWZmWzE1Ol0KICAgICAgICAgICAgY2lwaGVyID0gQUVTLm5ldyhjaF9tYXN0ZXJfa2V5LCBBRVMuTU9ERV9HQ00sIGl2KQogICAgICAgICAgICBkZWNyeXB0ZWRfcGFzcyA9IGNpcGhlci5kZWNyeXB0KHBheWxvYWQpCiAgICAgICAgICAgIGRlY3J5cHRlZF9wYXNzID0gZGVjcnlwdGVkX3Bhc3NbOi0xNl0uZGVjb2RlKCkKICAgICAgICAgICAgcmV0dXJuIGRlY3J5cHRlZF9wYXNzCiAgICBleGNlcHQgKFVuaWNvZGVEZWNvZGVFcnJvciwgVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgcmV0dXJuIE5vbmUKCmRlZiBkZWNyeXB0X2FlcyhkZWNvZGVkX2l0ZW0sIG1hc3Rlcl9wYXNzd29yZCwgZ2xvYmFsX3NhbHQpOgogICAgZW50cnlfc2FsdCA9IGRlY29kZWRfaXRlbVswXVswXVsxXVswXVsxXVswXS5hc09jdGV0cygpCiAgICBpdGVyYXRpb25fY291bnQgPSBpbnQoZGVjb2RlZF9pdGVtWzBdWzBdWzFdWzBdWzFdWzFdKQogICAga2V5X2xlbmd0aCA9IGludChkZWNvZGVkX2l0ZW1bMF1bMF1bMV1bMF1bMV1bMl0pCiAgICBhc3NlcnQga2V5X2xlbmd0aCA9PSAzMgoKICAgIGVuY29kZWRfcGFzc3dvcmQgPSBzaGExKGdsb2JhbF9zYWx0ICsgbWFzdGVyX3Bhc3N3b3JkLmVuY29kZSgndXRmLTgnKSkuZGlnZXN0KCkKICAgIGtleSA9IHBia2RmMl9obWFjKAogICAgICAgICdzaGEyNTYnLCBlbmNvZGVkX3Bhc3N3b3JkLAogICAgICAgIGVudHJ5X3NhbHQsIGl0ZXJhdGlvbl9jb3VudCwgZGtsZW49a2V5X2xlbmd0aCkKCiAgICBpbml0X3ZlY3RvciA9IGInXHgwNFx4MGUnICsgZGVjb2RlZF9pdGVtWzBdWzBdWzFdWzFdWzFdLmFzT2N0ZXRzKCkKICAgIGVuY3J5cHRlZF92YWx1ZSA9IGRlY29kZWRfaXRlbVswXVsxXS5hc09jdGV0cygpCiAgICBjaXBoZXIgPSBBRVMubmV3KGtleSwgQUVTLk1PREVfQ0JDLCBpbml0X3ZlY3RvcikKICAgIHJldHVybiBjaXBoZXIuZGVjcnlwdChlbmNyeXB0ZWRfdmFsdWUpCgpkZWYgZGVjcnlwdDNERVMoZ2xvYmFsU2FsdCwgbWFzdGVyUGFzc3dvcmQsIGVudHJ5U2FsdCwgZW5jcnlwdGVkRGF0YSk6CiAgICBocCA9IHNoYTEoZ2xvYmFsU2FsdCArIG1hc3RlclBhc3N3b3JkLmVuY29kZSgpKS5kaWdlc3QoKQogICAgcGVzID0gZW50cnlTYWx0ICsgYiJceDAwIiAqICgyMCAtIGxlbihlbnRyeVNhbHQpKQogICAgY2hwID0gc2hhMShocCArIGVudHJ5U2FsdCkuZGlnZXN0KCkKICAgIGsxID0gaG1hYy5uZXcoY2hwLCBwZXMgKyBlbnRyeVNhbHQsIHNoYTEpLmRpZ2VzdCgpCiAgICB0ayA9IGhtYWMubmV3KGNocCwgcGVzLCBzaGExKS5kaWdlc3QoKQogICAgazIgPSBobWFjLm5ldyhjaHAsIHRrICsgZW50cnlTYWx0LCBzaGExKS5kaWdlc3QoKQogICAgayA9IGsxICsgazIKICAgIGl2ID0ga1stODpdCiAgICBrZXkgPSBrWzoyNF0KICAgIHJldHVybiBERVMzLm5ldyhrZXksIERFUzMuTU9ERV9DQkMsIGl2KS5kZWNyeXB0KGVuY3J5cHRlZERhdGEpCgpkZWYgZ2V0S2V5KGRpcmVjdG9yeTogUGF0aCwgbWFzdGVyUGFzc3dvcmQ9IiIpOgogICAgZGJmaWxlOiBQYXRoID0gZGlyZWN0b3J5ICsgIlxca2V5NC5kYiIKICAgIGNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoZGJmaWxlKQogICAgYyA9IGNvbm4uY3Vyc29yKCkKICAgIGMuZXhlY3V0ZSgiU0VMRUNUIGl0ZW0xLCBpdGVtMiBGUk9NIG1ldGFkYXRhOyIpCiAgICByb3cgPSBuZXh0KGMpCiAgICBnbG9iYWxTYWx0LCBpdGVtMiA9IHJvdwoKICAgIHRyeToKICAgICAgICBkZWNvZGVkSXRlbTIsIF8gPSBkZWNvZGUoaXRlbTIpCiAgICAgICAgZW5jcnlwdGlvbl9tZXRob2QgPSAnM0RFUycKICAgICAgICBlbnRyeVNhbHQgPSBkZWNvZGVkSXRlbTJbMF1bMV1bMF0uYXNPY3RldHMoKQogICAgICAgIGNpcGhlclQgPSBkZWNvZGVkSXRlbTJbMV0uYXNPY3RldHMoKQogICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgIGVuY3J5cHRpb25fbWV0aG9kID0gJ0FFUycKICAgICAgICBkZWNvZGVkSXRlbTIgPSBkZWNvZGUoaXRlbTIpCiAgICBjLmV4ZWN1dGUoIlNFTEVDVCBhMTEsIGExMDIgRlJPTSBuc3NQcml2YXRlIFdIRVJFIGExMDIgPSA/OyIsIChiIlx4ZjhceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDEiLCkpCiAgICB0cnk6CiAgICAgICAgcm93ID0gbmV4dChjKQogICAgICAgIGExMSwgYTEwMiA9IHJvdyAgCiAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICByYWlzZSBFeGNlcHRpb24oImdlY2tvIGRhdGFiYXNlIGJyb2tlbiIpICAKICAgIGlmIGVuY3J5cHRpb25fbWV0aG9kID09ICdBRVMnOgogICAgICAgIGRlY29kZWRBMTEgPSBkZWNvZGUoYTExKQogICAgICAgIGtleSA9IGRlY3J5cHRfYWVzKGRlY29kZWRBMTEsIG1hc3RlclBhc3N3b3JkLCBnbG9iYWxTYWx0KQogICAgZWxpZiBlbmNyeXB0aW9uX21ldGhvZCA9PSAnM0RFUyc6CiAgICAgICAgZGVjb2RlZEExMSwgXyA9IGRlY29kZShhMTEpCiAgICAgICAgb2lkID0gZGVjb2RlZEExMVswXVswXS5hc1R1cGxlKCkKICAgICAgICBhc3NlcnQgb2lkID09ICgxLCAyLCA4NDAsIDExM181NDksIDEsIDEyLCA1LCAxLCAzKSwgZiJpZGsga2V5IHRvIGZvcm1hdCB7b2lkfSIKICAgICAgICBlbnRyeVNhbHQgPSBkZWNvZGVkQTExWzBdWzFdWzBdLmFzT2N0ZXRzKCkKICAgICAgICBjaXBoZXJUID0gZGVjb2RlZEExMVsxXS5hc09jdGV0cygpCiAgICAgICAga2V5ID0gZGVjcnlwdDNERVMoZ2xvYmFsU2FsdCwgbWFzdGVyUGFzc3dvcmQsIGVudHJ5U2FsdCwgY2lwaGVyVCkKCiAgICByZXR1cm4ga2V5WzoyNF0KCmRlZiBQS0NTN3VucGFkKGIpOgogICAgcmV0dXJuIGJbOiAtYlstMV1dCgpkZWYgZGVjb2RlTG9naW5EYXRhKGtleSwgZGF0YSk6CiAgICBhc24xZGF0YSwgXyA9IGRlY29kZShiNjRkZWNvZGUoZGF0YSkpCiAgICBhc3NlcnQgYXNuMWRhdGFbMF0uYXNPY3RldHMoKSA9PSBiIlx4ZjhceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDEiCiAgICBhc3NlcnQgYXNuMWRhdGFbMV1bMF0uYXNUdXBsZSgpID09ICgxLCAyLCA4NDAsIDExM181NDksIDMsIDcpCiAgICBpdiA9IGFzbjFkYXRhWzFdWzFdLmFzT2N0ZXRzKCkKICAgIGNpcGhlcnRleHQgPSBhc24xZGF0YVsyXS5hc09jdGV0cygpCiAgICBkZXMgPSBERVMzLm5ldyhrZXksIERFUzMuTU9ERV9DQkMsIGl2KQogICAgcmV0dXJuIFBLQ1M3dW5wYWQoZGVzLmRlY3J5cHQoY2lwaGVydGV4dCkpLmRlY29kZSgpCgojIGNsYXNzIEZhY2Vib29rKCk6CiMgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb29raWUpOgojICAgICAgICAgc2VsZi5ycSA9IHJlcXVlc3RzLlNlc3Npb24oKQojICAgICAgICAgY29va2llcyA9IHNlbGYuUGFyc2VfQ29va2llKGNvb2tpZSkKIyAgICAgICAgIGhlYWRlcnMgPSB7J2F1dGhvcml0eSc6ICdhZHNtYW5hZ2VyLmZhY2Vib29rLmNvbScsJ2FjY2VwdCc6ICd0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgsYXBwbGljYXRpb24vc2lnbmVkLWV4Y2hhbmdlO3Y9YjM7cT0wLjcnLCdhY2NlcHQtbGFuZ3VhZ2UnOiAndmktVk4sdmk7cT0wLjksZnItRlI7cT0wLjgsZnI7cT0wLjcsZW4tVVM7cT0wLjYsZW47cT0wLjUnLCdjYWNoZS1jb250cm9sJzogJ21heC1hZ2U9MCcsJ3NlYy1jaC1wcmVmZXJzLWNvbG9yLXNjaGVtZSc6ICdkYXJrJywnc2VjLWNoLXVhJzogJyJDaHJvbWl1bSI7dj0iMTEyIiwgIkdvb2dsZSBDaHJvbWUiO3Y9IjExMiIsICJOb3Q6QS1CcmFuZCI7dj0iOTkiJywnc2VjLWNoLXVhLWZ1bGwtdmVyc2lvbi1saXN0JzogJyJDaHJvbWl1bSI7dj0iMTEyLjAuNTYxNS4xNDAiLCAiR29vZ2xlIENocm9tZSI7dj0iMTEyLjAuNTYxNS4xNDAiLCAiTm90OkEtQnJhbmQiO3Y9Ijk5LjAuMC4wIicsJ3NlYy1jaC11YS1tb2JpbGUnOiAnPzAnLCdzZWMtY2gtdWEtcGxhdGZvcm0nOiAnIldpbmRvd3MiJywnc2VjLWNoLXVhLXBsYXRmb3JtLXZlcnNpb24nOiAnIjE1LjAuMCInLCdzZWMtZmV0Y2gtZGVzdCc6ICdkb2N1bWVudCcsJ3NlYy1mZXRjaC1tb2RlJzogJ25hdmlnYXRlJywnc2VjLWZldGNoLXNpdGUnOiAnc2FtZS1vcmlnaW4nLCdzZWMtZmV0Y2gtdXNlcic6ICc/MScsJ3VwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMnOiAnMScsJ3VzZXItYWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMi4wLjAuMCBTYWZhcmkvNTM3LjM2Jywndmlld3BvcnQtd2lkdGgnOiAnNzk0J30KIyAgICAgICAgIHNlbGYucnEuaGVhZGVycy51cGRhdGUoaGVhZGVycykKIyAgICAgICAgIHNlbGYucnEuY29va2llcy51cGRhdGUoY29va2llcykKIyAgICAgICAgIHNlbGYudG9rZW4gPSBzZWxmLkdldF9NYXJrZXQoKQojICAgICAgICAgaWYgc2VsZi50b2tlbiA9PSBGYWxzZToKIyAgICAgICAgICAgICByZXR1cm4gTm9uZQojICAgICAgICAgZWxzZToKIyAgICAgICAgICAgICBzZWxmLnVpZCA9IGNvb2tpZXNbJ2NfdXNlciddCgojICAgICBkZWYgUGFyc2VfQ29va2llKHNlbGYsIGNvb2tpZSk6CiMgICAgICAgICBjb29raWVzID0ge30KICAgICAgICAKIyAgICAgICAgIGZvciBjIGluIGNvb2tpZS5zcGxpdCgnOycpOgojICAgICAgICAgICAgIGtleV92YWx1ZSA9IGMuc3RyaXAoKS5zcGxpdCgnPScsIDEpCiMgICAgICAgICAgICAgaWYgbGVuKGtleV92YWx1ZSkgPT0gMjoKIyAgICAgICAgICAgICAgICAga2V5LCB2YWx1ZSA9IGtleV92YWx1ZQojICAgICAgICAgICAgICAgICBpZiBrZXkubG93ZXIoKSBpbiBbJ2NfdXNlcicsICd4cycsICdmciddOiAKIyAgICAgICAgICAgICAgICAgICAgIGNvb2tpZXNba2V5XSA9IHZhbHVlCiMgICAgICAgICByZXR1cm4gY29va2llcwoKIyAgICAgZGVmIEdldF9NYXJrZXQoc2VsZik6CiMgICAgICAgICB0cnk6CiMgICAgICAgICAgICAgYWN0ID0gc2VsZi5ycS5nZXQoJ2h0dHBzOi8vYWRzbWFuYWdlci5mYWNlYm9vay5jb20vYWRzbWFuYWdlci9tYW5hZ2UnKQojICAgICAgICAgICAgIGxpc3RfZGF0YSA9IGFjdC50ZXh0CiMgICAgICAgICAgICAgeCA9IGxpc3RfZGF0YS5zcGxpdCgiYWN0PSIpCiMgICAgICAgICAgICAgaWR4ID0geFsxXS5zcGxpdCgnJicpWzBdCiMgICAgICAgICAgICAgbGlzdF90b2tlbiA9IHNlbGYucnEuZ2V0KGYnaHR0cHM6Ly9hZHNtYW5hZ2VyLmZhY2Vib29rLmNvbS9hZHNtYW5hZ2VyL21hbmFnZS9jYW1wYWlnbnM/YWN0PXtpZHh9JmJyZWFrZG93bl9yZWdyb3VwaW5nPTEmbmF2X3NvdXJjZT1ub19yZWZlcnJlcicpCiMgICAgICAgICAgICAgbGlzdF90b2tlbiA9IGxpc3RfdG9rZW4udGV4dAojICAgICAgICAgICAgIHhfdG9rZW4gPSBsaXN0X3Rva2VuLnNwbGl0KCdmdW5jdGlvbigpe3dpbmRvdy5fX2FjY2Vzc1Rva2VuPSInKQojICAgICAgICAgICAgIHRva2VuID0gKHhfdG9rZW5bMV0uc3BsaXQoJyI7JylbMF0pCiMgICAgICAgICAgICAgcmV0dXJuIHRva2VuCiMgICAgICAgICBleGNlcHQ6CiMgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgIAojICAgICBkZWYgR2V0X2luZm9fVGtxYyhzZWxmKToKIyAgICAgICAgIGxpc3RfdGlrcWMgPSBzZWxmLnJxLmdldChmImh0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tL3YxNy4wL21lL2FkYWNjb3VudHM/ZmllbGRzPWFjY291bnRfaWQmYWNjZXNzX3Rva2VuPXtzZWxmLnRva2VufSIpCiMgICAgICAgICBkYXRhID0gIiIKIyAgICAgICAgIGRhdGEgKz0gZiJU4buVbmcgU+G7kSBUS1FDOiB7c3RyKGxlbihsaXN0X3Rpa3FjLmpzb24oKVsnZGF0YSddKSl9XG4iCiMgICAgICAgICBmb3IgaXRlbSBpbiBsaXN0X3Rpa3FjLmpzb24oKVsnZGF0YSddOgojICAgICAgICAgICAgIHhpdGVtID0gaXRlbVsiaWQiXQojICAgICAgICAgICAgIHggPSBzZWxmLnJxLmdldChmImh0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tL3YxNi4wL3t4aXRlbX0vP2ZpZWxkcz1zcGVuZF9jYXAsYmFsYW5jZSxhbW91bnRfc3BlbnQsYWR0cnVzdF9kc2wsYWRzcGF5bWVudGN5Y2xlLGN1cnJlbmN5LGFjY291bnRfc3RhdHVzLGRpc2FibGVfcmVhc29uLG5hbWUsY3JlYXRlZF90aW1lLGFsbF9wYXltZW50X21ldGhvZHMlN0JwbV9jcmVkaXRfY2FyZCU3QmRpc3BsYXlfc3RyaW5nJTJDaXNfdmVyaWZpZWQlN0QlN0QmYWNjZXNzX3Rva2VuPXtzZWxmLnRva2VufSIpCiMgICAgICAgICAgICAgdHJ5OgojICAgICAgICAgICAgICAgICBzdGF0dXQgPSB4Lmpzb24oKVsiYWNjb3VudF9zdGF0dXMiXQojICAgICAgICAgICAgIGV4Y2VwdDoKIyAgICAgICAgICAgICAgICAgc3RhdHV0ID0gIktow7RuZyBSw7UgVHLhuqFuZyBUaMOhaSIKIyAgICAgICAgICAgICBpZiBpbnQoc3RhdHV0KSA9PSAxOgojICAgICAgICAgICAgICAgICBzdHQgPSAiTElWRSIKIyAgICAgICAgICAgICBlbHNlOgojICAgICAgICAgICAgICAgICBzdHQgPSAiRElFIgojICAgICAgICAgICAgIHRyeToKIyAgICAgICAgICAgICAgICAgY3JlZGl0X2NhcmRfZGF0YSA9IHguanNvbigpWyJhbGxfcGF5bWVudF9tZXRob2RzIl1bInBtX2NyZWRpdF9jYXJkIl1bImRhdGEiXQojICAgICAgICAgICAgICAgICBjYXJkX2Rpc3BsYXlfc3RyaW5nID0gY3JlZGl0X2NhcmRfZGF0YVswXVsiZGlzcGxheV9zdHJpbmciXQojICAgICAgICAgICAgICAgICBpZiBjcmVkaXRfY2FyZF9kYXRhWzBdWyJpc192ZXJpZmllZCJdOgojICAgICAgICAgICAgICAgICAgICAgdmVyaWZ5X2NjID0gIsSQw6MgWMOhYyBNaW5oIgojICAgICAgICAgICAgICAgICBlbHNlOgojICAgICAgICAgICAgICAgICAgICAgdmVyaWZ5X2NjID0gIk5vX1ZlcmlmaWVkIgojICAgICAgICAgICAgICAgICB0aGFuaF90b2FuID0gZiJ7Y2FyZF9kaXNwbGF5X3N0cmluZ30gLSB7dmVyaWZ5X2NjfSIKIyAgICAgICAgICAgICBleGNlcHQ6CiMgICAgICAgICAgICAgICAgIHRoYW5oX3RvYW4gPSAiS2jDtG5nIFRo4bq7IgoKIyAgICAgICAgICAgICBuYW1lID0geC5qc29uKClbIm5hbWUiXQojICAgICAgICAgICAgIGlkX3RrcWMgPSB4Lmpzb24oKVsiaWQiXQojICAgICAgICAgICAgIHRpZW5fdGUgPSB4Lmpzb24oKVsiY3VycmVuY3kiXQojICAgICAgICAgICAgIHNvX2R1ID0geC5qc29uKClbImJhbGFuY2UiXQojICAgICAgICAgICAgIGR1X25vID0geC5qc29uKClbInNwZW5kX2NhcCJdCiMgICAgICAgICAgICAgZGFfY2hpX3RpZXUgPSB4Lmpzb24oKVsiYW1vdW50X3NwZW50Il0KIyAgICAgICAgICAgICBpZiB4Lmpzb24oKVsiYWR0cnVzdF9kc2wiXSA9PSAtMToKIyAgICAgICAgICAgICAgICAgbGltaXRfbmdheSA9ICJObyBMaW1pdCIKIyAgICAgICAgICAgICBlbHNlOgojICAgICAgICAgICAgICAgICBsaW1pdF9uZ2F5ID0geC5qc29uKClbImFkdHJ1c3RfZHNsIl0KIyAgICAgICAgICAgICBjcmVhdGVkX3RpbWUgPSB4Lmpzb24oKVsiY3JlYXRlZF90aW1lIl0KIyAgICAgICAgICAgICB0cnk6CiMgICAgICAgICAgICAgICAgIG5ndW9uZ19ubyA9ICJ7Oi4yZn0iLmZvcm1hdChmbG9hdCh4Lmpzb24oKVsiYWRzcGF5bWVudGN5Y2xlIl1bImRhdGEiXVswXVsidGhyZXNob2xkX2Ftb3VudCJdKSAvIDEwMCkKIyAgICAgICAgICAgICBleGNlcHQ6CiMgICAgICAgICAgICAgICAgIG5ndW9uZ19ubyA9ICIwIgojICAgICAgICAgICAgIGRhdGEgKz0gZiItIFTDqm4gVEtRQzoge25hbWV9fElEX1RLUUM6IHtpZF90a3FjfXxUcuG6oW5nIFRow6FpOiB7c3R0fXxUaeG7gW4gVOG7hzoge3RpZW5fdGV9fFPhu5EgRMawOiB7c29fZHV9IHt0aWVuX3RlfXzEkMOjIFRpw6p1IFbDoG8gTmfGsOG7oW5nOiB7ZHVfbm99IHt0aWVuX3RlfXxU4buVbmcgxJDDoyBDaGkgVGnDqnU6IHtkYV9jaGlfdGlldX0ge3RpZW5fdGV9fExpbWl0IE5nw6B5OiB7bGltaXRfbmdheX0ge3RpZW5fdGV9fE5nxrDhu6FuZzoge25ndW9uZ19ub30ge3RpZW5fdGV9fFRoYW5oIFRvw6FuOiB7dGhhbmhfdG9hbn18TmfDoHkgVOG6oW86IHtjcmVhdGVkX3RpbWVbOjEwXX1cbiIKIyAgICAgICAgIHJldHVybiBkYXRhCiAgICAKIyAgICAgZGVmIEdldF9QYWdlKHNlbGYpOgojICAgICAgICAgZGF0YSA9IHNlbGYucnEuZ2V0KGYiaHR0cHM6Ly9ncmFwaC5mYWNlYm9vay5jb20vdjE3LjAvbWUvZmFjZWJvb2tfcGFnZXM/ZmllbGRzPW5hbWUlMkNsaW5rJTJDZmFuX2NvdW50JTJDZm9sbG93ZXJzX2NvdW50JTJDdmVyaWZpY2F0aW9uX3N0YXR1cyZhY2Nlc3NfdG9rZW49e3NlbGYudG9rZW59IikgICAgCiMgICAgICAgICBpZiAnZGF0YScgaW4gZGF0YS5qc29uKCk6CiMgICAgICAgICAgICAgcGFnZXMgPSBkYXRhLmpzb24oKVsiZGF0YSJdCiMgICAgICAgICAgICAgZGF0YSA9IGYiVOG7lW5nIFPhu5EgUGFnZToge3N0cihsZW4ocGFnZXMpKX1cbiIKIyAgICAgICAgICAgICBmb3IgcGFnZSBpbiBwYWdlczoKIyAgICAgICAgICAgICAgICAgbmFtZSA9IHBhZ2VbIm5hbWUiXQojICAgICAgICAgICAgICAgICBsaW5rID0gcGFnZVsibGluayJdCiMgICAgICAgICAgICAgICAgIGxpa2UgPSBwYWdlWyJmYW5fY291bnQiXQojICAgICAgICAgICAgICAgICBmbCA9IHBhZ2VbImZvbGxvd2Vyc19jb3VudCJdCiMgICAgICAgICAgICAgICAgIHZlcmkgPSBwYWdlWyJ2ZXJpZmljYXRpb25fc3RhdHVzIl0KIyAgICAgICAgICAgICAgICAgZGF0YSArPSBmIi0ge25hbWV9fHtsaW5rfXx7bGlrZX18e2ZsfXx7dmVyaX1cbiIKIyAgICAgICAgICAgICByZXR1cm4gZGF0YQojICAgICAgICAgZWxzZToKIyAgICAgICAgICAgICByZXR1cm4gIj09PiBLaMO0bmcgY8OzIFBhZ2VcbiIKCiMgICAgIGRlZiBHZXRfUVRWX0dSKHNlbGYpOgojICAgICAgICAgbGlzdF9ncm91cCA9IHNlbGYucnEuZ2V0KGYiaHR0cHM6Ly9ncmFwaC5mYWNlYm9vay5jb20vdjE3LjAvbWUvZ3JvdXBzP2ZpZWxkcz1hZG1pbmlzdHJhdG9yJmFjY2Vzc190b2tlbj17c2VsZi50b2tlbn0iKS50ZXh0CiMgICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhsaXN0X2dyb3VwKQojICAgICAgICAgaWRzID0gIiIKCiMgICAgICAgICBmb3IgaXRlbSBpbiBkYXRhWyJkYXRhIl06CiMgICAgICAgICAgICAgaWYgaXRlbVsiYWRtaW5pc3RyYXRvciJdOgojICAgICAgICAgICAgICAgICBpZiBub3QgaWRzOgojICAgICAgICAgICAgICAgICAgICAgaWRzID0gIkPDoWMgR3JvdXAgQ+G6p20gUVRWOlxuIgojICAgICAgICAgICAgICAgICBpZCA9IGl0ZW1bImlkIl0KIyAgICAgICAgICAgICAgICAgaWRzICs9IGYiLSBodHRwczovL3d3dy5mYWNlYm9vay5jb20vZ3JvdXBzL3tpZH1cbiIKIyAgICAgICAgIGlmIG5vdCBpZHM6CiMgICAgICAgICAgICAgaWRzID0gIj09PT4gS2jDtG5nIEPDsyBHcm91cCBD4bqnbSBRVFYiCiMgICAgICAgICByZXR1cm4gaWRzCiAgICAKIyAgICAgZGVmIEdldF9pZF9CTShzZWxmKToKIyAgICAgICAgIGRhdGEgPSBzZWxmLnJxLmdldChmImh0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tL3YxNy4wL21lP2ZpZWxkcz1idXNpbmVzc2VzJmFjY2Vzc190b2tlbj17c2VsZi50b2tlbn0iKQojICAgICAgICAgdHJ5OgojICAgICAgICAgICAgIGxpc3RibSA9IGRhdGEuanNvbigpWyJidXNpbmVzc2VzIl1bImRhdGEiXQojICAgICAgICAgICAgIGlkX2xpc3QgPSBbXQojICAgICAgICAgICAgIGZvciBpdGVtICBpbiBsaXN0Ym06CiMgICAgICAgICAgICAgICAgIGJ1c2luZXNzX2lkID0gaXRlbVsiaWQiXQojICAgICAgICAgICAgICAgICBpZF9saXN0LmFwcGVuZChidXNpbmVzc19pZCkKIyAgICAgICAgICAgICByZXR1cm4gaWRfbGlzdAojICAgICAgICAgZXhjZXB0OgojICAgICAgICAgICAgIHJldHVybiBOb25lCgojICAgICBkZWYgR2V0X1RrX0luX0JNKHNlbGYpOgojICAgICAgICAgbGlzdGJtID0gc2VsZi5HZXRfaWRfQk0oKQojICAgICAgICAgaWYgbGlzdGJtIGlzIG5vdCBOb25lOgojICAgICAgICAgICAgIHJlc3VsdCA9ICJUaMO0bmcgVGluIEJNOlxuIiAKIyAgICAgICAgICAgICBmb3IgaWRibSBpbiBsaXN0Ym06CiMgICAgICAgICAgICAgICAgIHJxID0gc2VsZi5ycS5nZXQoZiJodHRwczovL2dyYXBoLmZhY2Vib29rLmNvbS92MTcuMC97aWRibX0/ZmllbGRzPW93bmVkX2FkX2FjY291bnRzJTdCYWNjb3VudF9zdGF0dXMsYmFsYW5jZSxjdXJyZW5jeSxidXNpbmVzc19jb3VudHJ5X2NvZGUsYW1vdW50X3NwZW50LHNwZW5kX2NhcCxjcmVhdGVkX3RpbWUsYWR0cnVzdF9kc2wlN0QsY2xpZW50X2FkX2FjY291bnRzJTdCYWNjb3VudF9zdGF0dXMsYmFsYW5jZSxjdXJyZW5jeSxidXNpbmVzc19jb3VudHJ5X2NvZGUsYW1vdW50X3NwZW50LHNwZW5kX2NhcCxjcmVhdGVkX3RpbWUsYWR0cnVzdF9kc2wlN0QmYWNjZXNzX3Rva2VuPXtzZWxmLnRva2VufSIpCiMgICAgICAgICAgICAgICAgIHRyeToKIyAgICAgICAgICAgICAgICAgICAgIGxpc3RfdGtxYyA9IHJxLmpzb24oKVsib3duZWRfYWRfYWNjb3VudHMiXVsiZGF0YSJdCiMgICAgICAgICAgICAgICAgIGV4Y2VwdDoKIyAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmIi0gSURfQk06IHtpZGJtfSAtLT4gQk0gVHLhuq9uZ1xuIgojICAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiMgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGxpc3RfdGtxYzoKIyAgICAgICAgICAgICAgICAgICAgIHN0dCA9IGl0ZW1bImFjY291bnRfc3RhdHVzIl0KIyAgICAgICAgICAgICAgICAgICAgIGlmIGludChzdHQpID09IDE6CiMgICAgICAgICAgICAgICAgICAgICAgICAgc3R0ID0gIkxJVkUiCiMgICAgICAgICAgICAgICAgICAgICBlbHNlOgojICAgICAgICAgICAgICAgICAgICAgICAgIHN0dCA9ICJESUUiCiMgICAgICAgICAgICAgICAgICAgICB0aWVuX3RlID0gaXRlbVsiY3VycmVuY3kiXQojICAgICAgICAgICAgICAgICAgICAgdHJ5OgojICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnkgPSBpdGVtWyJidXNpbmVzc19jb3VudHJ5X2NvZGUiXQojICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgojICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnkgPSAiQ2hlY2sgTWlzcyIKIyAgICAgICAgICAgICAgICAgICAgIHNvX2R1ID0gaXRlbVsiYmFsYW5jZSJdCiMgICAgICAgICAgICAgICAgICAgICBkYV9jaGlfdGlldSA9IGl0ZW1bImFtb3VudF9zcGVudCJdCiMgICAgICAgICAgICAgICAgICAgICBuZ3Vvbmdfbm8gPSBpdGVtWyJzcGVuZF9jYXAiXQojICAgICAgICAgICAgICAgICAgICAgbmdheXRhbyA9IGl0ZW1bImNyZWF0ZWRfdGltZSJdCiMgICAgICAgICAgICAgICAgICAgICBpZiBpdGVtWyJhZHRydXN0X2RzbCJdID09IC0xOgojICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0X25nYXkgPSAiTm8gTGltaXQiCiMgICAgICAgICAgICAgICAgICAgICBlbHNlOgojICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0X25nYXkgPSBpdGVtWyJhZHRydXN0X2RzbCJdCiMgICAgICAgICAgICAgICAgICAgICBpZF90a3FjID0gaXRlbVsiaWQiXQojICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGYiLSBJRF9CTToge2lkYm19KHtzZWxmLkNoZWNrX1Nsb3RfQk0oaWRibSl9KXxJRF9US1FDOiB7aWRfdGtxY318VHLhuqFuZyBUaMOhaToge3N0dH18UXXhu5FjIEdpYToge2NvdW50cnl9fFRp4buBbiBU4buHOiB7dGllbl90ZX18U+G7kSBExrA6IHtzb19kdX0ge3RpZW5fdGV9fFThu5VuZyDEkMOjIENoaSBUacOqdToge2RhX2NoaV90aWV1fSB7dGllbl90ZX18TGltaXQgTmfDoHk6IHtsaW1pdF9uZ2F5fSB7dGllbl90ZX18TmfGsOG7oW5nOiB7c3RyKG5ndW9uZ19ubyl9IHt0aWVuX3RlfXxOZ8OgeSBU4bqhbzoge25nYXl0YW9bOjEwXX1cbiIKIyAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiMgICAgICAgICBlbHNlOgojICAgICAgICAgICAgIHJldHVybiAiPT0+IEtow7RuZyBjw7MgQk1cbiIKICAgICAgICAgICAgCiMgICAgIGRlZiBHZXRfRFRTRyhzZWxmKToKIyAgICAgICAgIHJxID0gc2VsZi5ycS5nZXQoJ2h0dHBzOi8vbS5mYWNlYm9vay5jb20vY29tcG9zZXIvb2NlbG90L2FzeW5jX2xvYWRlci8/cHVibGlzaGVyPWZlZWQnKQojICAgICAgICAgZGF0YSA9IHJxLmNvbnRlbnQuZGVjb2RlKCd1dGYtOCcpCiMgICAgICAgICBmYl9kdHNnID0gZGF0YS5zcGxpdCgnbmFtZT1cXCJmYl9kdHNnXFwiIHZhbHVlPVxcIicpWzFdLnNwbGl0KCdcXCcpWzBdCiMgICAgICAgICBoc2kgPSBkYXRhLnNwbGl0KCdcXCJoc2lcXCI6XFwiJylbMV0uc3BsaXQoJ1xcIiwnKVswXQojICAgICAgICAgc3Bpbl90ID0gZGF0YS5zcGxpdCgnXFwiX19zcGluX3RcXCI6JylbMV0uc3BsaXQoJywnKVswXQojICAgICAgICAgc3Bpbl9yID0gZGF0YS5zcGxpdCgnX19zcGluX3JcXCI6JylbMV0uc3BsaXQoJywnKVswXQojICAgICAgICAgamF6b2VzdCA9IGRhdGEuc3BsaXQoJ25hbWU9XFwiamF6b2VzdFxcIiB2YWx1ZT1cXCInKVsxXS5zcGxpdCgnXFwiJylbMF0KIyAgICAgICAgIHJldHVybiBmYl9kdHNnLCBoc2ksIHNwaW5fdCwgc3Bpbl9yLCBqYXpvZXN0CiAgICAKIyAgICAgZGVmIENoZWNrX1Nsb3RfQk0oc2VsZixpZGJtKToKIyAgICAgICAgIGZiX2R0c2csIGhzaSwgc3Bpbl90LCBzcGluX3IsIGphem9lc3QgPSBzZWxmLkdldF9EVFNHKCkKIyAgICAgICAgIHBhcmFtcyA9IHsnYnVzaW5lc3NfaWQnOiBpZGJtfQojICAgICAgICAgZGF0YSA9IHsnX191c2VyJzogc2VsZi51aWQgLCdfX2EnOiAnMScsJ19fcmVxJzogJzYnLCdfX2hzJzogJzE5NTc3LkJQOmJyYW5kc19wa2cuMi4wLi4wLjAnLCdkcHInOiAnMScsJ19fY2NnJzogJ0VYQ0VMTEVOVCcsJ19fcmV2Jzogc3Bpbl9yLCdfX3MnOiAndmlvMnZlOjl3MnU4dTpidXNoZGcnLCdfX2hzaSc6IGhzaSwnX19keW4nOiAnN3hlVW14YTJDNXJneWR3bjhLMmFiQldxeHU1OW85RTRhMmk1VkVkcEU2QzRVS2VnZHA5OFNtNEV1eGExdHdLem9ibzlFN0MxRnhHOXhlZHo4aHdnbzVTM2E0RXVDd1F3Q3hxMXp3Q0N3akZFSzNpZHdPUTE3bTNTYndnbzd5NzhhYndFd2s4OW9lVWE4Zkd4bnpvTzFXd2FtY3dnRUN1N0U0MjJhM0ZlNnJ3blZVYW85azJDNG9XMTh3UndFd2lVbXduSHhKeEs0OEdVOEVoQXk4OHJ3enpYeC1ld2pvdkN4ZXE0bzg4NE8xZndRelVTMlcySzRFNXllRHlVNTJkQ2dxdy16OGM4LTVhREJ3RUJ3S0cxM3k4NWk0b0txYkR5by0yLXFhVUsyZTBVRlUyUndyVTZDaVU5RTRLZUNLMnExcHdqb3V3ZzhhODVPdScsJ19fY3NyJzogJycsJ2ZiX2R0c2cnOiBmYl9kdHNnLCdqYXpvZXN0JzogamF6b2VzdCwnbHNkJzogJ3JMRlJ2MUhEYU16djhqUUtTdnZVeWEnLCdfX2JpZCc6IGlkYm0sJ19fc3Bpbl9yJzogc3Bpbl9yLCdfX3NwaW5fYic6ICd0cnVuaycsJ19fc3Bpbl90Jzogc3Bpbl90LCdfX2pzc2Vzdyc6ICcxJyx9CiMgICAgICAgICBjaGVjayA9IHNlbGYucnEucG9zdCgnaHR0cHM6Ly9idXNpbmVzcy5mYWNlYm9vay5jb20vYnVzaW5lc3MvYWRhY2NvdW50L2xpbWl0cy8nLHBhcmFtcz1wYXJhbXMsZGF0YT1kYXRhKSAgICAgCiMgICAgICAgICBkYXRhID0gY2hlY2sudGV4dC5zcGxpdCgnKTsnLCAxKVsxXQojICAgICAgICAganNvbl9kYXRhID0ganNvbi5sb2FkcyhkYXRhKQojICAgICAgICAgYWRfYWNjb3VudF9saW1pdCA9IGpzb25fZGF0YVsncGF5bG9hZCddWydhZEFjY291bnRMaW1pdCddCiMgICAgICAgICByZXR1cm4gYWRfYWNjb3VudF9saW1pdAoKIyAgICAgZGVmIEFEU19DaGVja2VyKHNlbGYpOgojICAgICAgICAgdHJ5OgojICAgICAgICAgICAgIHJlc3VsdCA9IGYie3NlbGYuR2V0X2luZm9fVGtxYygpfVxue3NlbGYuR2V0X1RrX0luX0JNKCl9XG57c2VsZi5HZXRfUGFnZSgpfVxue3NlbGYuR2V0X1FUVl9HUigpfSIKIyAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiMgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgojICAgICAgICAgICAgIHJldHVybiAiIgoKRVJST1JfU1VDQ0VTUyA9IDAKRVJST1JfTU9SRV9EQVRBICA9IDIzNApSbUZvcmNlU2h1dGRvd24gPSAxCgpAV0lORlVOQ1RZUEUoTm9uZSwgVUlOVCkKZGVmIGNhbGxiYWNrKHBlcmNlbnRfY29tcGxldGU6IFVJTlQpIC0+IE5vbmU6CiAgICBwYXNzCgpyc3RydG1nciA9IHdpbmRsbC5Mb2FkTGlicmFyeSgiUnN0cnRtZ3IiKQoKZGVmIFVubG9ja19Db29raWVzKGNvb2tpZXNfcGF0aCk6CiAgICBzZXNzaW9uX2hhbmRsZSA9IERXT1JEKDApCiAgICBzZXNzaW9uX2ZsYWdzID0gRFdPUkQoMCkKICAgIHNlc3Npb25fa2V5ID0gKFdDSEFSICogMjU2KSgpCgogICAgcmVzdWx0ID0gRFdPUkQocnN0cnRtZ3IuUm1TdGFydFNlc3Npb24oYnlyZWYoc2Vzc2lvbl9oYW5kbGUpLCBzZXNzaW9uX2ZsYWdzLCBzZXNzaW9uX2tleSkpLnZhbHVlCgogICAgaWYgcmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1M6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKGYiUm1TdGFydFNlc3Npb24gcmV0dXJuZWQgbm9uLXplcm8gcmVzdWx0OiB7cmVzdWx0fSIpCgogICAgdHJ5OgogICAgICAgIHJlc3VsdCA9IERXT1JEKHJzdHJ0bWdyLlJtUmVnaXN0ZXJSZXNvdXJjZXMoc2Vzc2lvbl9oYW5kbGUsIDEsIGJ5cmVmKHBvaW50ZXIoY3JlYXRlX3VuaWNvZGVfYnVmZmVyKGNvb2tpZXNfcGF0aCkpKSwgMCwgTm9uZSwgMCwgTm9uZSkpLnZhbHVlCgogICAgICAgIGlmIHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTOgogICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoZiJSbVJlZ2lzdGVyUmVzb3VyY2VzIHJldHVybmVkIG5vbi16ZXJvIHJlc3VsdDoge3Jlc3VsdH0iKQoKICAgICAgICBwcm9jX2luZm9fbmVlZGVkID0gRFdPUkQoMCkKICAgICAgICBwcm9jX2luZm8gPSBEV09SRCgwKQogICAgICAgIHJlYm9vdF9yZWFzb25zID0gRFdPUkQoMCkKCiAgICAgICAgcmVzdWx0ID0gRFdPUkQocnN0cnRtZ3IuUm1HZXRMaXN0KHNlc3Npb25faGFuZGxlLCBieXJlZihwcm9jX2luZm9fbmVlZGVkKSwgYnlyZWYocHJvY19pbmZvKSwgTm9uZSwgYnlyZWYocmVib290X3JlYXNvbnMpKSkudmFsdWUKCiAgICAgICAgaWYgcmVzdWx0IG5vdCBpbiAoRVJST1JfU1VDQ0VTUywgRVJST1JfTU9SRV9EQVRBKToKICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKGYiUm1HZXRMaXN0IHJldHVybmVkIG5vbi1zdWNjZXNzZnVsIHJlc3VsdDoge3Jlc3VsdH0iKQoKICAgICAgICBpZiBwcm9jX2luZm9fbmVlZGVkLnZhbHVlOgogICAgICAgICAgICByZXN1bHQgPSBEV09SRChyc3RydG1nci5SbVNodXRkb3duKHNlc3Npb25faGFuZGxlLCBSbUZvcmNlU2h1dGRvd24sIGNhbGxiYWNrKSkudmFsdWUKCiAgICAgICAgICAgIGlmIHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTOgogICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKGYiUm1TaHV0ZG93biByZXR1cm5lZCBub24tc3VjY2Vzc2Z1bCByZXN1bHQ6IHtyZXN1bHR9IikKCiAgICBmaW5hbGx5OgogICAgICAgIHJlc3VsdCA9IERXT1JEKHJzdHJ0bWdyLlJtRW5kU2Vzc2lvbihzZXNzaW9uX2hhbmRsZSkpLnZhbHVlCgogICAgICAgIGlmIHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTOgogICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoZiJSbUVuZFNlc3Npb24gcmV0dXJuZWQgbm9uLXN1Y2Nlc3NmdWwgcmVzdWx0OiB7cmVzdWx0fSIpCgpkZWYgc2F2ZV9nY2tfbG9naW5fZGF0YShwcm9maWxlcywgcHJvZmlsZV9uYW1lLCBicm93c2VyX25hbWUpOgogICAgY291bnQgPSAwCiAgICBsb2dpbl9kYXRhID0gIiIKICAgIGxvZ2lucyA9IFtdCiAgICBmb3IgcHJvZmlsZSBpbiBwcm9maWxlczoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocHJvZmlsZSwgImxvZ2lucy5qc29uIiksICJyIikgYXMgbG9naW5mOgogICAgICAgICAgICAgICAganNvbkxvZ2lucyA9IGpzb24ubG9hZChsb2dpbmYpCgogICAgICAgICAgICBpZiAibG9naW5zIiBub3QgaW4ganNvbkxvZ2luczoKICAgICAgICAgICAgICAgIHJldHVybiBbXQoKICAgICAgICAgICAgZm9yIHJvdyBpbiBqc29uTG9naW5zWyJsb2dpbnMiXToKICAgICAgICAgICAgICAgIGVuY1VzZXJuYW1lID0gcm93WyJlbmNyeXB0ZWRVc2VybmFtZSJdCiAgICAgICAgICAgICAgICBlbmNQYXNzd29yZCA9IHJvd1siZW5jcnlwdGVkUGFzc3dvcmQiXQogICAgICAgICAgICAgICAgbG9naW5zLmFwcGVuZCgocm93WyJob3N0bmFtZSJdLCBkZWNvZGVMb2dpbkRhdGEoZ2V0S2V5KHByb2ZpbGUpLCBlbmNVc2VybmFtZSksIGRlY29kZUxvZ2luRGF0YShnZXRLZXkocHJvZmlsZSksIGVuY1Bhc3N3b3JkKSkpCgogICAgICAgICAgICBmb3IgbG9naW4gaW4gbG9naW5zOgogICAgICAgICAgICAgICAgbG9naW5fZGF0YSArPSBmIlVSTDoge2xvZ2luWzBdfVxuVXNlcm5hbWU6IHtsb2dpblsxXX1cblBhc3N3b3JkOiB7bG9naW5bMl19XG5BcHBsaWNhdGlvbjoge2Jyb3dzZXJfbmFtZX0gW1Byb2ZpbGU6IHtwcm9maWxlX25hbWV9XVxu4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG4iCiAgICAgICAgICAgICAgICBjb3VudCArPSAxCgogICAgICAgICAgICBmb3IgbG9naW4gaW4gbG9naW5zOgogICAgICAgICAgICAgICAgZm9yIGtleXdvcmQgaW4gSW1wb3J0YW50S2V5d29yZHM6CiAgICAgICAgICAgICAgICAgICAgaWYga2V5d29yZCBpbiBsb2dpblswXS5sb3dlcigpOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoUGF0aEJyb3dzZXIpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoUGF0aEJyb3dzZXIpCiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihmIntQYXRoQnJvd3Nlcn1cXEltcG9ydGFudF9Mb2dpbnMudHh0IiwgImEiLCBlbmNvZGluZz0idXRmLTgiKSBhcyBzaXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l0ZS53cml0ZShmIlVSTDoge2xvZ2luWzBdfVxuVXNlcm5hbWU6IHtsb2dpblsxXX1cblBhc3N3b3JkOiB7bG9naW5bMl19XG5BcHBsaWNhdGlvbjoge2Jyb3dzZXJfbmFtZX0gW1Byb2ZpbGU6IHtwcm9maWxlX25hbWV9XVxu4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG4iKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgY29udGludWUKCiAgICBpZiBjb3VudCA+IDA6CiAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKFBhdGhCcm93c2VyKToKICAgICAgICAgICAgb3MubWFrZWRpcnMoUGF0aEJyb3dzZXIpCiAgICAgICAgbG9naW5zX2ZpbGUgPSBvcy5wYXRoLmpvaW4oUGF0aEJyb3dzZXIsIGYiQWxsX1Bhc3N3b3Jkcy50eHQiKQogICAgICAgIHdpdGggb3Blbihsb2dpbnNfZmlsZSwgImEiLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmOgogICAgICAgICAgICBmLndyaXRlbGluZXMobG9naW5fZGF0YSkKICAgIHJldHVybiBjb3VudAoKZGVmIGdldF9nY2tfYmFzZXBhdGgoYnJvd3Nlcl90eXBlKToKICAgIGJhc2VwYXRocyA9IHsKICAgICAgICAiRmlyZWZveCI6IGYie0FwcERhdGF9XFxNb3ppbGxhXFxGaXJlZm94IiwKICAgICAgICAiUGFsZSBNb29uIjogZiJ7QXBwRGF0YX1cXE1vb25jaGlsZCBQcm9kdWN0aW9uc1xcUGFsZSBNb29uIiwKICAgICAgICAiU2VhTW9ua2V5IjogZiJ7QXBwRGF0YX1cXE1vemlsbGFcXFNlYU1vbmtleSIsCiAgICAgICAgIldhdGVyZm94IjogZiJ7QXBwRGF0YX1cXFdhdGVyZm94IiwKICAgICAgICAiTWVyY3VyeSI6IGYie0FwcERhdGF9XFxtZXJjdXJ5IiwKICAgICAgICAiSy1NZWxlb24iOiBmIntBcHBEYXRhfVxcSy1NZWxlb24iLAogICAgICAgICJJY2VEcmFnb24iOiBmIntBcHBEYXRhfVxcQ29tb2RvXFxJY2VEcmFnb24iLAogICAgICAgICJDeWJlcmZveCI6IGYie0FwcERhdGF9XFw4cGVjeHN0dWRpb3NcXEN5YmVyZm94IiwKICAgICAgICAiQmxhY2tIYXciOiBmIntBcHBEYXRhfVxcTkVUR0FURSBUZWNobm9sb2dpZXNcXEJsYWNrSGF3IiwKICAgIH0KICAgIHJldHVybiBiYXNlcGF0aHMuZ2V0KGJyb3dzZXJfdHlwZSwgTm9uZSkKCmRlZiBnZXRfZ2NrX3Byb2ZpbGVzKGJhc2VwYXRoKToKICAgIHRyeToKICAgICAgICBwcm9maWxlc19wYXRoID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAicHJvZmlsZXMuaW5pIikKICAgICAgICB3aXRoIG9wZW4ocHJvZmlsZXNfcGF0aCwgInIiKSBhcyBmOgogICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKICAgICAgICBwcm9maWxlcyA9IFsKICAgICAgICAgICAgb3MucGF0aC5qb2luKGJhc2VwYXRoLmVuY29kZSgidXRmLTgiKSwgcC5zdHJpcCgpWzU6XS5lbmNvZGUoInV0Zi04IikpLmRlY29kZSgidXRmLTgiKQogICAgICAgICAgICBmb3IgcCBpbiByZS5maW5kYWxsKHIiXlBhdGg9LisoP3M6LikkIiwgZGF0YSwgcmUuTSkKICAgICAgICBdCiAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIHByb2ZpbGVzID0gW10KCiAgICByZXR1cm4gcHJvZmlsZXMKCmRlZiBnZXRfY2hfbG9naW5fZGF0YShicm93c2VyLCBwYXRoLCBwcm9maWxlLCBjaF9tYXN0ZXJfa2V5KToKICAgIHJlc3VsdCA9ICIiCiAgICBjb3VudCA9IDAKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmIntwYXRofVxce3Byb2ZpbGV9XFxMb2dpbiBEYXRhIik6CiAgICAgICAgcmV0dXJuIGNvdW50CiAgICBzaHV0aWwuY29weShmIntwYXRofVxce3Byb2ZpbGV9XFxMb2dpbiBEYXRhIiwgVE1QKyJcXGxvZ2luX2RiIikKICAgIGNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoVE1QICsgIlxcbG9naW5fZGIiKQogICAgY3Vyc29yID0gY29ubi5jdXJzb3IoKQogICAgdHJ5OgogICAgICAgIGN1cnNvci5leGVjdXRlKCJTRUxFQ1QgYWN0aW9uX3VybCwgdXNlcm5hbWVfdmFsdWUsIHBhc3N3b3JkX3ZhbHVlIEZST00gbG9naW5zIikKICAgIGV4Y2VwdDoKICAgICAgICBwYXNzCiAgICBmb3Igcm93IGluIGN1cnNvci5mZXRjaGFsbCgpOgogICAgICAgIGlmIHJvd1swXSBhbmQgcm93WzFdOgogICAgICAgICAgICBwYXNzd29yZCA9IGRlY3J5cHRfY2hfdmFsdWUocm93WzJdLCBjaF9tYXN0ZXJfa2V5KQogICAgICAgICAgICByZXN1bHQgKz0gZiJVUkw6IHtyb3dbMF19XG5Vc2VybmFtZToge3Jvd1sxXX1cblBhc3N3b3JkOiB7cGFzc3dvcmR9XG5BcHBsaWNhdGlvbjoge2Jyb3dzZXJ9IFtQcm9maWxlOiB7cHJvZmlsZX1dXG7ilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIFcbiIKICAgICAgICAgICAgY291bnQgKz0gMQogICAgICAgICAgICBmb3Iga2V5d29yZCBpbiBJbXBvcnRhbnRLZXl3b3JkczoKICAgICAgICAgICAgICAgIGlmIGtleXdvcmQgaW4gcm93WzBdLmxvd2VyKCk6CiAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKFBhdGhCcm93c2VyKToKICAgICAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoUGF0aEJyb3dzZXIpCiAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGYie1BhdGhCcm93c2VyfVxcSW1wb3J0YW50X0xvZ2lucy50eHQiLCAiYSIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIHNpdGU6CiAgICAgICAgICAgICAgICAgICAgICAgIHNpdGUud3JpdGUoZiJVUkw6IHtyb3dbMF19XG5Vc2VybmFtZToge3Jvd1sxXX1cblBhc3N3b3JkOiB7cGFzc3dvcmR9XG5BcHBsaWNhdGlvbjoge2Jyb3dzZXJ9IFtQcm9maWxlOiB7cHJvZmlsZX1dXG7ilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIFcbiIpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKCiAgICBpZiBjb3VudCA+IDA6CiAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKFBhdGhCcm93c2VyKToKICAgICAgICAgICAgb3MubWFrZWRpcnMoUGF0aEJyb3dzZXIpCiAgICAgICAgcHdfZmlsZSA9IG9zLnBhdGguam9pbihQYXRoQnJvd3NlciwgZiJBbGxfUGFzc3dvcmRzLnR4dCIpCiAgICAgICAgd2l0aCBvcGVuKHB3X2ZpbGUsICJhIiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgZjoKICAgICAgICAgICAgZi53cml0ZWxpbmVzKHJlc3VsdCkKICAgIGNvbm4uY2xvc2UoKQogICAgb3MucmVtb3ZlKFRNUCArICJcXGxvZ2luX2RiIikKICAgIHJldHVybiBjb3VudAoKZGVmIGdldF9jaF9jb29raWVzKGJyb3dzZXIsIHBhdGgsIHByb2ZpbGUsIGNoX21hc3Rlcl9rZXkpOgogICAgY291bnQgPSAwCiAgICByZXN1bHQgPSAiIgogICAgZmJfcmVzdWx0ID0gW10KCiAgICBpZiBicm93c2VyIGluIFsiQ2hyb21lIiwgIkNocm9tZSBTeFMiLCAiQ2hyb21lICh4ODYpIl06CgogICAgICAgIHN1YnByb2Nlc3MucnVuKFsidGFza2tpbGwiLCAiL0YiLCAiL0lNIiwgImNocm9tZS5leGUiXSwgY3JlYXRpb25mbGFncz0weDA4MDAwMDAwKQoKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihbCiAgICAgICAgICAgICAgICAgICAgIkM6L1Byb2dyYW0gRmlsZXMvR29vZ2xlL0Nocm9tZS9BcHBsaWNhdGlvbi9jaHJvbWUuZXhlIiwKICAgICAgICAgICAgICAgICAgICAnLS1yZW1vdGUtZGVidWdnaW5nLXBvcnQ9OTIyMicsCiAgICAgICAgICAgICAgICAgICAgZictLXByb2ZpbGUtZGlyZWN0b3J5PXtwcm9maWxlfScsCiAgICAgICAgICAgICAgICAgICAgJy0tcmVtb3RlLWFsbG93LW9yaWdpbnM9KicsCiAgICAgICAgICAgICAgICAgICAgJy0td2luZG93LXBvc2l0aW9uPTEwMDAwLDEwMDAwJywKICAgICAgICAgICAgICAgICAgICAnLS13aW5kb3ctc2l6ZT0xLDEnLAogICAgICAgICAgICAgICAgICAgICctLWRpc2FibGUtZ3B1JywKICAgICAgICAgICAgICAgICAgICAnLS1uby1zYW5kYm94JwogICAgICAgICAgICAgICAgXSwgY3JlYXRpb25mbGFncz0weDA4MDAwMDAwKQoKICAgICAgICAgICAgICAgIHdzX3VybCA9IHJlcXVlc3RzLmdldCgiaHR0cDovL2xvY2FsaG9zdDo5MjIyL2pzb24iKS5qc29uKClbMF1bJ3dlYlNvY2tldERlYnVnZ2VyVXJsJ10KICAgICAgICAgICAgICAgIHdzID0gY3JlYXRlX2Nvbm5lY3Rpb24od3NfdXJsKQogICAgICAgICAgICAgICAgd3Muc2VuZChqc29uLmR1bXBzKHsiaWQiOiAxLCAibWV0aG9kIjogIk5ldHdvcmsuZ2V0QWxsQ29va2llcyJ9KSkKICAgICAgICAgICAgICAgIGNvb2tpZXMgPSBqc29uLmxvYWRzKHdzLnJlY3YoKSlbJ3Jlc3VsdCddWydjb29raWVzJ10KICAgICAgICAgICAgICAgIHdzLmNsb3NlKCk7IHByb2Mua2lsbCgpCgogICAgICAgICAgICAgICAgZm9yIGMgaW4gY29va2llczoKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZiJ7Y1snZG9tYWluJ119XHR7J1RSVUUnIGlmIGNbJ2RvbWFpbiddLnN0YXJ0c3dpdGgoJy4nKSBlbHNlICdGQUxTRSd9XHR7Y1sncGF0aCddfVx0eydUUlVFJyBpZiBjWydzZWN1cmUnXSBlbHNlICdGQUxTRSd9XHR7aW50KGMuZ2V0KCdleHBpcmVzJywgMCkpfVx0e2NbJ25hbWUnXX1cdHtjWyd2YWx1ZSddfVxuIgogICAgICAgICAgICAgICAgICAgIGlmIGNbJ2RvbWFpbiddID09ICIuZmFjZWJvb2suY29tIjoKICAgICAgICAgICAgICAgICAgICAgICAgZmJfcmVzdWx0LmFwcGVuZChmIntjWyduYW1lJ119PXtjWyd2YWx1ZSddfSIpCiAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMQoKICAgICAgICAgICAgICAgIGlmIGNvdW50ID4gMDoKICAgICAgICAgICAgICAgICAgICBkaXJfcGF0aCA9IG9zLnBhdGguam9pbihQYXRoQnJvd3NlciwgIkNvb2tpZXMgQnJvd3NlciIpCiAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoZGlyX3BhdGgsIGV4aXN0X29rPVRydWUpCiAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkaXJfcGF0aCwgZiJ7YnJvd3Nlcn1fe3Byb2ZpbGV9LnR4dCIpLCAidyIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGVsaW5lcyhyZXN1bHQpCgogICAgICAgICAgICAgICAgZmJfZm9ybWF0dGVkID0gIjsgIi5qb2luKGZiX3Jlc3VsdCkKICAgICAgICAgICAgICAgIGlmIGZiX2Zvcm1hdHRlZDoKICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFBhdGhCcm93c2VyLCAiRmFjZWJvb2tfQ29va2llcy50eHQiKSwgJ2EnLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGYie2ZiX2Zvcm1hdHRlZH1cblxuIikKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICBlbHNlOgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGF0aCwgcHJvZmlsZSwgIk5ldHdvcmsiLCAiQ29va2llcyIpKToKICAgICAgICAgICAgcmV0dXJuIGNvdW50CgogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KG9zLnBhdGguam9pbihwYXRoLCBwcm9maWxlLCAiTmV0d29yayIsICJDb29raWVzIiksIG9zLnBhdGguam9pbihUTVAsICJjb29raWVfZGIiKSkKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBVbmxvY2tfQ29va2llcyhvcy5wYXRoLmpvaW4ocGF0aCwgcHJvZmlsZSwgIk5ldHdvcmsiLCAiQ29va2llcyIpKQogICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KG9zLnBhdGguam9pbihwYXRoLCBwcm9maWxlLCAiTmV0d29yayIsICJDb29raWVzIiksIG9zLnBhdGguam9pbihUTVAsICJjb29raWVfZGIiKSkKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgIGNvbm4gPSBzcWxpdGUzLmNvbm5lY3Qob3MucGF0aC5qb2luKFRNUCwgImNvb2tpZV9kYiIpKQogICAgICAgIGN1cnNvciA9IGNvbm4uY3Vyc29yKCkKCiAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIlNFTEVDVCBob3N0X2tleSwgbmFtZSwgcGF0aCwgZW5jcnlwdGVkX3ZhbHVlLCBleHBpcmVzX3V0YywgaXNfc2VjdXJlLCBpc19odHRwb25seSBGUk9NIGNvb2tpZXMiKQoKICAgICAgICBmb3IgaG9zdCwgbmFtZSwgcGF0aF9jb29raWVzLCB2YWx1ZSwgZXhwaXJlc191dGMsIGlzX3NlY3VyZSwgaXNfaHR0cF9vbmx5IGluIGN1cnNvci5mZXRjaGFsbCgpOgogICAgICAgICAgICBpZiBub3QgYWxsKChob3N0LCBuYW1lLCBwYXRoX2Nvb2tpZXMsIHZhbHVlKSk6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBjb29raWUgPSBkZWNyeXB0X2NoX3ZhbHVlKHZhbHVlLCBjaF9tYXN0ZXJfa2V5KQogICAgICAgICAgICBzZWN1cmUgPSAiVFJVRSIgaWYgaXNfc2VjdXJlIGVsc2UgIkZBTFNFIgogICAgICAgICAgICBodHRwb25seSA9ICJUUlVFIiBpZiBpc19odHRwX29ubHkgZWxzZSAiRkFMU0UiCiAgICAgICAgICAgIHJlc3VsdCArPSBmIntob3N0fVx0e3NlY3VyZX1cdHtwYXRoX2Nvb2tpZXN9XHR7aHR0cG9ubHl9XHR7ZXhwaXJlc191dGN9XHR7bmFtZX1cdHtjb29raWV9XG4iCiAgICAgICAgICAgIGlmIGhvc3QgPT0gIi5mYWNlYm9vay5jb20iOgogICAgICAgICAgICAgICAgZmJfcmVzdWx0LmFwcGVuZChmIntuYW1lfT17Y29va2llfSIpCiAgICAgICAgICAgIGNvdW50ICs9IDEKICAgICAgICBmYl9mb3JtYXR0ZWQgPSAiOyAiLmpvaW4oZmJfcmVzdWx0KQogICAgICAgICMgYWRzX2NoZWNrID0gRmFjZWJvb2soZmJfZm9ybWF0dGVkKS5BRFNfQ2hlY2tlcigpCgogICAgICAgICMgaWYgYWRzX2NoZWNrOgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhQYXRoQnJvd3Nlcik6CiAgICAgICAgICAgIG9zLm1ha2VkaXJzKFBhdGhCcm93c2VyKQogICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oUGF0aEJyb3dzZXIsICJGYWNlYm9va19Db29raWVzLnR4dCIpLCAnYScsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICAgICAgICAgIGYud3JpdGUoZiJ7ZmJfZm9ybWF0dGVkfVxuXG4iKQoKICAgICAgICBpZiBjb3VudCA+IDA6CiAgICAgICAgICAgIGRpcl9wYXRoID0gb3MucGF0aC5qb2luKFBhdGhCcm93c2VyLCAiQ29va2llcyBCcm93c2VyIikKICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcl9wYXRoKToKICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcl9wYXRoKQogICAgICAgICAgICBjY19maWxlID0gb3MucGF0aC5qb2luKGRpcl9wYXRoLCBmInticm93c2VyfV97cHJvZmlsZX0udHh0IikKICAgICAgICAgICAgd2l0aCBvcGVuKGNjX2ZpbGUsICJ3IiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgZjoKICAgICAgICAgICAgICAgIGYud3JpdGVsaW5lcyhyZXN1bHQpCiAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihUTVAsICJjb29raWVfZGIiKSkKICAgIHJldHVybiBjb3VudAoKZGVmIHNhdmVfZ2NrX2Nvb2tpZXMocHJvZmlsZXMsIHByb2ZpbGVfbmFtZSwgYnJvd3Nlcl9uYW1lKToKICAgIGNvdW50ID0gMAogICAgY29va2llc19kYXRhID0gW10KICAgIGZiX3Jlc3VsdCA9IFtdCgogICAgdHJ5OgogICAgICAgIGNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoZiJmaWxlOntvcy5wYXRoLmpvaW4ocHJvZmlsZXNbMF0sICdjb29raWVzLnNxbGl0ZScpfT9tb2RlPXJvIiwgdXJpPVRydWUpCiAgICAgICAgY3Vyc29yID0gY29ubi5jdXJzb3IoKQogICAgZXhjZXB0IHNxbGl0ZTMuRXJyb3I6CiAgICAgICAgcmV0dXJuIGNvdW50CiAgICBmb3IgcHJvZmlsZSBpbiBwcm9maWxlczoKICAgICAgICBjb29raWVzX2RiID0gb3MucGF0aC5qb2luKHByb2ZpbGUsICJjb29raWVzLnNxbGl0ZSIpCiAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGNvb2tpZXNfZGIpOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHRyeToKICAgICAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIlNFTEVDVCBob3N0LCBwYXRoLCBuYW1lLCB2YWx1ZSwgaXNTZWN1cmUsIGlzSHR0cE9ubHksIGV4cGlyeSBGUk9NIG1vel9jb29raWVzIikKICAgICAgICAgICAgY29va2llcyA9IGN1cnNvci5mZXRjaGFsbCgpCiAgICAgICAgZXhjZXB0IHNxbGl0ZTMuRXJyb3I6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgaWYgbm90IGNvb2tpZXM6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZm9yIGNvb2tpZSBpbiBjb29raWVzOgogICAgICAgICAgICBob3N0LCBwYXRoLCBuYW1lLCB2YWx1ZSwgaXNfc2VjdXJlLCBpc19odHRwX29ubHksIGV4cGlyeSA9IGNvb2tpZQogICAgICAgICAgICBzZWN1cmVfc3RyID0gIlRSVUUiIGlmIGlzX3NlY3VyZSBlbHNlICJGQUxTRSIKICAgICAgICAgICAgaHR0cG9ubHlfc3RyID0gIlRSVUUiIGlmIGlzX2h0dHBfb25seSBlbHNlICJGQUxTRSIKICAgICAgICAgICAgY29va2llc19kYXRhLmFwcGVuZChmIntob3N0fVx0e3NlY3VyZV9zdHJ9XHR7cGF0aH1cdHtodHRwb25seV9zdHJ9XHR7ZXhwaXJ5fVx0e25hbWV9XHR7dmFsdWV9XG4iKQogICAgICAgICAgICBpZiBob3N0ID09ICIuZmFjZWJvb2suY29tIjoKICAgICAgICAgICAgICAgIGZiX3Jlc3VsdC5hcHBlbmQoZiJ7bmFtZX09e3ZhbHVlfSIpCiAgICAgICAgICAgIGNvdW50ICs9IDEKICAgICAgICBmYl9mb3JtYXR0ZWQgPSAiOyAiLmpvaW4oZmJfcmVzdWx0KQogICAgICAgICMgYWRzX2NoZWNrID0gRmFjZWJvb2soZmJfZm9ybWF0dGVkKS5BRFNfQ2hlY2tlcigpCgogICAgICAgICMgaWYgYWRzX2NoZWNrOgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhQYXRoQnJvd3Nlcik6CiAgICAgICAgICAgIG9zLm1ha2VkaXJzKFBhdGhCcm93c2VyKQogICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oUGF0aEJyb3dzZXIsICJGYWNlYm9va19Db29raWVzLnR4dCIpLCAnYScsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICAgICAgICAgIGYud3JpdGUoZiJ7ZmJfZm9ybWF0dGVkfVxuIikKICAgICAgICAKICAgIGlmIGNvdW50ID4gMDoKICAgICAgICBkaXJfcGF0aCA9IG9zLnBhdGguam9pbihQYXRoQnJvd3NlciwgIkNvb2tpZXMgQnJvd3NlciIpCiAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcl9wYXRoKToKICAgICAgICAgICAgb3MubWFrZWRpcnMoZGlyX3BhdGgpCiAgICAgICAgY2NfZmlsZSA9IG9zLnBhdGguam9pbihkaXJfcGF0aCwgZiJ7YnJvd3Nlcl9uYW1lfV97cHJvZmlsZV9uYW1lfS50eHQiKQogICAgICAgIHdpdGggb3BlbihjY19maWxlLCAidyIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGY6CiAgICAgICAgICAgIGYud3JpdGVsaW5lcyhjb29raWVzX2RhdGEpCiAgICBpZiBjb25uOgogICAgICAgIGNvbm4uY2xvc2UoKQogICAgcmV0dXJuIGNvdW50CgoKZGVmIGdldF9jaF9jY2FyZHMoYnJvd3NlciwgcGF0aCwgcHJvZmlsZSwgY2hfbWFzdGVyX2tleSk6CiAgICByZXN1bHQgPSAiIgogICAgY291bnQgPSAwCgogICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGYie3BhdGh9XFx7cHJvZmlsZX1cXFdlYiBEYXRhIik6CiAgICAgICAgcmV0dXJuIGNvdW50CiAgICBzaHV0aWwuY29weShmIntwYXRofVxce3Byb2ZpbGV9XFxXZWIgRGF0YSIsIFRNUCsiXFxjYXJkc19kYiIpCiAgICBjb25uID0gc3FsaXRlMy5jb25uZWN0KFRNUCsiXFxjYXJkc19kYiIpCiAgICBjdXJzb3IgPSBjb25uLmN1cnNvcigpCgogICAgY3Vyc29yLmV4ZWN1dGUoIlNFTEVDVCBuYW1lX29uX2NhcmQsIGV4cGlyYXRpb25fbW9udGgsIGV4cGlyYXRpb25feWVhciwgY2FyZF9udW1iZXJfZW5jcnlwdGVkLCBkYXRlX21vZGlmaWVkIEZST00gY3JlZGl0X2NhcmRzIikKCiAgICBmb3Igcm93IGluIGN1cnNvci5mZXRjaGFsbCgpOgogICAgICAgIGlmIG5vdCByb3dbMF0gb3Igbm90IHJvd1sxXSBvciBub3Qgcm93WzJdIG9yIG5vdCByb3dbM106CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgY2FyZF9udW1iZXIgPSBkZWNyeXB0X2NoX3ZhbHVlKHJvd1szXSwgY2hfbWFzdGVyX2tleSkKICAgICAgICByZXN1bHQgKz0gZiJDYXJkIE5hbWU6IHtyb3dbMF19XG5DYXJkIE51bWJlcjoge2NhcmRfbnVtYmVyfVxuQ2FyZCBFeHBpcmF0aW9uOiB7cm93WzFdfSAvIHtyb3dbMl19XG5BZGRlZDoge2RhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAocm93WzRdKX1cbuKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxuIgogICAgICAgIGNvdW50ICs9IDEKCiAgICBpZiBjb3VudCA+IDA6CiAgICAgICAgZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oUGF0aEJyb3dzZXIsICJDcmVkaXQgQ2FyZHMiKQogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJfcGF0aCk6CiAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcl9wYXRoKQogICAgICAgIGNjX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsIGYie2Jyb3dzZXJ9X3twcm9maWxlfS50eHQiKQogICAgICAgIHdpdGggb3BlbihjY19maWxlLCAidyIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGY6CiAgICAgICAgICAgIGYud3JpdGVsaW5lcyhyZXN1bHQpCiAgICBjb25uLmNsb3NlKCkKICAgIG9zLnJlbW92ZShUTVArIlxcY2FyZHNfZGIiKQogICAgcmV0dXJuIGNvdW50CgpkZWYgZ2V0X2NoX2F1dG9maWxsKGJyb3dzZXIsIHBhdGgsIHByb2ZpbGUpOgogICAgcmVzdWx0ID0gIiIKICAgIGNvdW50ID0gMAoKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmIntwYXRofVxce3Byb2ZpbGV9XFxXZWIgRGF0YSIpOgogICAgICAgIHJldHVybiBjb3VudAogICAgc2h1dGlsLmNvcHkoZiJ7cGF0aH1cXHtwcm9maWxlfVxcV2ViIERhdGEiLCBUTVArIlxcYXV0b2ZpbGxfZGIiKQogICAgY29ubiA9IHNxbGl0ZTMuY29ubmVjdChUTVArIlxcYXV0b2ZpbGxfZGIiKQogICAgY3Vyc29yID0gY29ubi5jdXJzb3IoKQogICAgCiAgICBjdXJzb3IuZXhlY3V0ZSgiU0VMRUNUIG5hbWUsIHZhbHVlIEZST00gYXV0b2ZpbGwiKQoKICAgIGZvciByb3cgaW4gY3Vyc29yLmZldGNoYWxsKCk6CiAgICAgICAgaWYgbm90IHJvd1swXSBvciBub3Qgcm93WzFdOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHJlc3VsdCArPSBmIk5hbWU6IHtyb3dbMF19XG5WYWx1ZToge3Jvd1sxXX1cbuKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxuIgogICAgICAgIGNvdW50ICs9IDEKCiAgICBpZiBjb3VudCA+IDA6CiAgICAgICAgZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oUGF0aEJyb3dzZXIsICJBdXRvRmlsbHMiKQogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJfcGF0aCk6CiAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcl9wYXRoKQogICAgICAgIGF1dG9maWxsc19maWxlID0gb3MucGF0aC5qb2luKGRpcl9wYXRoLCBmInticm93c2VyfV97cHJvZmlsZX0udHh0IikKICAgICAgICB3aXRoIG9wZW4oYXV0b2ZpbGxzX2ZpbGUsICJ3IiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgZjoKICAgICAgICAgICAgZi53cml0ZWxpbmVzKHJlc3VsdCkKICAgIGNvbm4uY2xvc2UoKQogICAgb3MucmVtb3ZlKFRNUCArICJcXGF1dG9maWxsX2RiIikKICAgIHJldHVybiBjb3VudAoKZ2NrX2Jyb3dzZXJfcHJvZmlsZXMgPSB7CiAgICAiRmlyZWZveCI6IGdldF9nY2tfcHJvZmlsZXMoZ2V0X2dja19iYXNlcGF0aCgiRmlyZWZveCIpKSwKICAgICJQYWxlIE1vb24iOiBnZXRfZ2NrX3Byb2ZpbGVzKGdldF9nY2tfYmFzZXBhdGgoIlBhbGUgTW9vbiIpKSwKICAgICJTZWFNb25rZXkiOiBnZXRfZ2NrX3Byb2ZpbGVzKGdldF9nY2tfYmFzZXBhdGgoIlNlYU1vbmtleSIpKSwKICAgICJXYXRlcmZveCI6IGdldF9nY2tfcHJvZmlsZXMoZ2V0X2dja19iYXNlcGF0aCgiV2F0ZXJmb3giKSksCiAgICAiTWVyY3VyeSI6IGdldF9nY2tfcHJvZmlsZXMoZ2V0X2dja19iYXNlcGF0aCgiTWVyY3VyeSIpKQp9Cgp0b3RhbF9jaF9sb2dpbnNfY291bnQgPSAwCnRvdGFsX2NoX2Nvb2tpZXNfY291bnQgPSAwCnRvdGFsX2NoX2NjYXJkc19jb3VudCA9IDAKdG90YWxfY2hfYXV0b2ZpbGxfY291bnQgPSAwCgp0b3RhbF9nY2tfbG9naW5zX2NvdW50ID0gMAp0b3RhbF9nY2tfY29va2llc19jb3VudCA9IDAKCnRvdGFsX2Jyb3dzZXJzX2xvZ2luc19jb3VudCA9IDAKdG90YWxfYnJvd3NlcnNfY29va2llc19jb3VudCA9IDAKdG90YWxfYnJvd3NlcnNfY2NhcmRzX2NvdW50ID0gMAoKYXZhaWxhYmxlX3BhdGggPSBpbnN0YWxsZWRfY2hfZGNfYnJvd3NlcnMoKQoKZm9yIGJyb3dzZXIgaW4gYXZhaWxhYmxlX3BhdGg6CiAgICBicm93c2VyX3BhdGggPSBjaF9kY19icm93c2Vyc1ticm93c2VyXQogICAgY2hfbWFzdGVyX2tleSA9IGdldF9jaF9tYXN0ZXJfa2V5KGJyb3dzZXJfcGF0aCkKCiAgICBpZiBub3QgZ2xvYi5nbG9iKG9zLnBhdGguam9pbihicm93c2VyX3BhdGgsICJQcm9maWxlKiIpKToKICAgICAgICBwcm9maWxlX2ZvbGRlcnMgPSBbb3MucGF0aC5qb2luKGJyb3dzZXJfcGF0aCwgIkRlZmF1bHQiKV0KICAgIGVsc2U6CiAgICAgICAgcHJvZmlsZV9mb2xkZXJzID0gW29zLnBhdGguam9pbihicm93c2VyX3BhdGgsICJEZWZhdWx0IildICsgZ2xvYi5nbG9iKG9zLnBhdGguam9pbihicm93c2VyX3BhdGgsICJQcm9maWxlKiIpKQoKICAgIGZvciBwcm9maWxlX2ZvbGRlciBpbiBwcm9maWxlX2ZvbGRlcnM6CiAgICAgICAgcHJvZmlsZSA9ICIiIGlmIGJyb3dzZXIgaW4gWyJPcGVyYSIsICJPcGVyYSBHWCJdIGVsc2Ugb3MucGF0aC5iYXNlbmFtZShwcm9maWxlX2ZvbGRlcikKCiAgICAgICAgY291bnRQID0gZ2V0X2NoX2xvZ2luX2RhdGEoYnJvd3NlciwgYnJvd3Nlcl9wYXRoLCBwcm9maWxlLCBjaF9tYXN0ZXJfa2V5KQogICAgICAgIHRvdGFsX2NoX2xvZ2luc19jb3VudCArPSBjb3VudFAKICAgICAgICAKICAgICAgICBjb3VudEMgPSBnZXRfY2hfY29va2llcyhicm93c2VyLCBicm93c2VyX3BhdGgsIHByb2ZpbGUsIGNoX21hc3Rlcl9rZXkpCiAgICAgICAgdG90YWxfY2hfY29va2llc19jb3VudCArPSBjb3VudEMKCiAgICAgICAgY291bnRDQyA9IGdldF9jaF9jY2FyZHMoYnJvd3NlciwgYnJvd3Nlcl9wYXRoLCBwcm9maWxlLCBjaF9tYXN0ZXJfa2V5KQogICAgICAgIHRvdGFsX2NoX2NjYXJkc19jb3VudCArPSBjb3VudENDCgogICAgICAgIGNvdW50QUYgPSBnZXRfY2hfYXV0b2ZpbGwoYnJvd3NlciwgYnJvd3Nlcl9wYXRoLCBwcm9maWxlKQogICAgICAgIHRvdGFsX2NoX2F1dG9maWxsX2NvdW50ICs9IGNvdW50QUYKCmZvciBicm93c2VyLCBwcm9maWxlcyBpbiBnY2tfYnJvd3Nlcl9wcm9maWxlcy5pdGVtcygpOgogICAgZm9yIHByb2ZpbGUgaW4gcHJvZmlsZXM6CiAgICAgICAgcHJvZmlsZV9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShwcm9maWxlKQoKICAgICAgICBsb2dpbnNfY291bnQgPSBzYXZlX2dja19sb2dpbl9kYXRhKFtwcm9maWxlXSwgcHJvZmlsZV9uYW1lLCBicm93c2VyKQogICAgICAgIHRvdGFsX2dja19sb2dpbnNfY291bnQgKz0gbG9naW5zX2NvdW50CgogICAgICAgIGNvb2tpZXNfY291bnQgPSBzYXZlX2dja19jb29raWVzKFtwcm9maWxlXSwgcHJvZmlsZV9uYW1lLCBicm93c2VyKQogICAgICAgIHRvdGFsX2dja19jb29raWVzX2NvdW50ICs9IGNvb2tpZXNfY291bnQKCnRvdGFsX2Jyb3dzZXJzX2xvZ2luc19jb3VudCA9IHRvdGFsX2NoX2xvZ2luc19jb3VudCArIHRvdGFsX2dja19sb2dpbnNfY291bnQKdG90YWxfYnJvd3NlcnNfY29va2llc19jb3VudCA9IHRvdGFsX2NoX2Nvb2tpZXNfY291bnQgKyB0b3RhbF9nY2tfY29va2llc19jb3VudAp0b3RhbF9icm93c2Vyc19jY2FyZHNfY291bnQgPSB0b3RhbF9jaF9jY2FyZHNfY291bnQgCgpmaXhlZF9wYXRocyA9IHsKICAgICAgICBmIntBcHBEYXRhfVxcRXhvZHVzXFxleG9kdXMud2FsbGV0IjogewogICAgICAgICJjYXRlZ29yeSI6ICJEZXNrdG9wIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiRXhvZHVzIiwKICAgIH0sCiAgICAgICAgZiJ7QXBwRGF0YX1cXEFybW9yeSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiRGVza3RvcCBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkJpdGNvaW4gQXJtb3J5IiwKICAgIH0sCiAgICAgICAgZiJ7TG9jYWxBcHBEYXRhfVxcQ29pbm9taVxcQ29pbm9taVxcd2FsbGV0cyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiRGVza3RvcCBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkNvaW5vbWkgV2FsbGV0IiwKICAgIH0sCiAgICAgICAgZiJ7QXBwRGF0YX1cXGF0b21pY1xcTG9jYWwgU3RvcmFnZVxcbGV2ZWxkYiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiRGVza3RvcCBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkF0b21pYyBXYWxsZXQiLAogICAgfSwKICAgICAgICBmIntBcHBEYXRhfVxcYnl0ZWNvaW4iOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkRlc2t0b3AgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJCeXRlY29pbiBXYWxsZXQiLAogICAgfSwKICAgICAgICBmIntBcHBEYXRhfVxcZGlzY29yZFxcTG9jYWwgU3RvcmFnZVxcbGV2ZWxkYiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiTWVzc2VuZ2VycyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJEaXNjb3JkIiwKICAgIH0sCiAgICAgICAgZiJ7QXBwRGF0YX1cXGRpc2NvcmRjYW5hcnlcXExvY2FsIFN0b3JhZ2VcXGxldmVsZGIiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIk1lc3NlbmdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiRGlzY29yZCBDYW5hcnkiLAogICAgfSwKICAgICAgICBmIntBcHBEYXRhfVxcRWxlbWVudFxcTG9jYWwgU3RvcmFnZVxcbGV2ZWxkYiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiTWVzc2VuZ2VycyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJFbGVtZW50IiwKICAgIH0sCiAgICAgICAgZiJ7QXBwRGF0YX1cXFNpZ25hbCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiTWVzc2VuZ2VycyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJTaWduYWwiLAogICAgfSwKICAgICAgICBmIntBcHBEYXRhfVxcVGVsZWdyYW0gRGVza3RvcFxcdGRhdGEiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIk1lc3NlbmdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiVGVsZWdyYW0gRGVza3RvcCIsCiAgICB9LAogICAgICAgIGYie0FwcERhdGF9XFxNaWNyb3NvZnRcXFNreXBlIGZvciBEZXNrdG9wXFxMb2NhbCBTdG9yYWdlXFxsZXZlbGRiIjogewogICAgICAgICJjYXRlZ29yeSI6ICJNZXNzZW5nZXJzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlNreXBlIiwKICAgIH0sCiAgICAgICAgZiJ7b3MuZW52aXJvblsnUHJvZ3JhbUZpbGVzKHg4NiknXX1cXFN0ZWFtXFxjb25maWciOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkdhbWluZyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJTdGVhbSIsCiAgICB9LAogICAgICAgIGYie0xvY2FsQXBwRGF0YX1cXEdyb3d0b3BpYSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiR2FtaW5nIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkdyb3d0b3BpYSIsCiAgICB9LAogICAgICAgIGYie0xvY2FsQXBwRGF0YX1cXHVwYXkiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkdhbWluZyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJ1UGF5IiwKICAgIH0sCiAgICAgICAgIGYie0xvY2FsQXBwRGF0YX1cXE1pbmVjcmFmdCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiR2FtaW5nIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIk1pbmVjcmFmdCIsCiAgICB9LAogICAgICAgIGYie0xvY2FsQXBwRGF0YX1cXFJvYmxveCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiR2FtaW5nIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlJvYmxveCIsCiAgICB9LAogICAgICAgIGYie0xvY2FsQXBwRGF0YX1cXEJhdHRsZS5uZXQiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkdhbWluZyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJCYXR0bGUubmV0IiwKICAgIH0sCiAgICAgICAgZiJ7TG9jYWxBcHBEYXRhfVxcUmlvdCBHYW1lc1xcUmlvdCBDbGllbnRcXERhdGFcXFNlc3Npb25zIjogewogICAgICAgICJjYXRlZ29yeSI6ICJHYW1pbmciLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiUmlvdCBHYW1lcyIsCiAgICB9LAogICAgICAgIGYie0xvY2FsQXBwRGF0YX1cXEVwaWNHYW1lc0xhdW5jaGVyXFxTYXZlZFxcQ29uZmlnXFxXaW5kb3dzIjogewogICAgICAgICJjYXRlZ29yeSI6ICJHYW1pbmciLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiRXBpYyBHYW1lcyIsCiAgICB9LAogICAgICAgIGYie0xvY2FsQXBwRGF0YX1cXE5vcmRWUE4iOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlZQTiBDbGllbnRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIk5vcmQgVlBOIiwKICAgIH0sCiAgICAgICAgZiJ7TG9jYWxBcHBEYXRhfVxcUHJvdG9uVlBOIjogewogICAgICAgICJjYXRlZ29yeSI6ICJWUE4gQ2xpZW50cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJQcm90b24gVlBOIiwKICAgIH0sCiAgICAgICAgZiJ7QXBwRGF0YX1cXE9wZW5WUE4gQ29ubmVjdFxcTG9jYWwgU3RvcmFnZVxcbGV2ZWxkYiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiVlBOIENsaWVudHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiT3BlblZQTiIsCiAgICB9LAogICAgICAgIGYie0FwcERhdGF9XFxFeHByZXNzVlBOXFxVc2VyIENvbmZpZyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiVlBOIENsaWVudHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiRXhwcmVzc1ZQTiIsCiAgICB9LAogICAgICAgIGYie0FwcERhdGF9XFxDeWJlckdob3N0XFxMb2NhbCBTdG9yYWdlXFxsZXZlbGRiIjogewogICAgICAgICJjYXRlZ29yeSI6ICJWUE4gQ2xpZW50cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJDeWJlckdob3N0IiwKICAgIH0sCiAgICAgICAgZiJ7QXBwRGF0YX1cXEhvdHNwb3QgU2hpZWxkXFxVc2VyIERhdGFcXERlZmF1bHQiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlZQTiBDbGllbnRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkhvdHNwb3QgU2hpZWxkIiwKICAgIH0sCiAgICAgICAgZiJ7QXBwRGF0YX1cXFByaXZhdGUgSW50ZXJuZXQgQWNjZXNzXFxPcGVuVlBOIjogewogICAgICAgICJjYXRlZ29yeSI6ICJWUE4gQ2xpZW50cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJQcml2YXRlIEludGVybmV0IEFjY2VzcyIsCiAgICB9LAogICAgICAgIGYie0FwcERhdGF9XFxXaW5kc2NyaWJlXFxMb2NhbCBTdG9yYWdlXFxsZXZlbGRiIjogewogICAgICAgICJjYXRlZ29yeSI6ICJWUE4gQ2xpZW50cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJXaW5kc2NyaWJlIiwKICAgIH0sCiAgICAgICAgZiJ7QXBwRGF0YX1cXEZpbGVaaWxsYSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiRlRQIENsaWVudHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiRmlsZVppbGxhIiwKICAgIH0sCiAgICAgICAgZiJ7TG9jYWxBcHBEYXRhfVxcZmlsZXppbGxhLXNlcnZlci1ndWkiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkZUUCBDbGllbnRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkZpbGVaaWxsYSBTZXJ2ZXIiLAogICAgfSwKICAgICAgICBmIntMb2NhbEFwcERhdGF9XFxBemlyZVZQTiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiVlBOIENsaWVudHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQXppcmVWUE4iLAogICAgfSwKICAgICAgICBmIntBcHBEYXRhfVxcbGVkZ2VyIGxpdmUiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkRlc2t0b3AgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJMZWRnZXIiLAogICAgfSwKICAgICAgICBmIntBcHBEYXRhfVxcV2FsbGV0V2FzYWJpXFxDbGllbnRcXFdhbGxldHMiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkRlc2t0b3AgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJXYWxsZXQgV2FzYWJpIiwKICAgIH0sCiAgICAgICAgZiJ7QXBwRGF0YX1cXEd1YXJkYVxcTG9jYWwgU3RvcmFnZVxcbGV2ZWxkYiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiRGVza3RvcCBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkd1YXJkYSIsCiAgICB9LAogICAgICAgIGYie0FwcERhdGF9XFxCaXRjb2luXFx3YWxsZXRzIjogewogICAgICAgICJjYXRlZ29yeSI6ICJEZXNrdG9wIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQml0Y29pbiIsCiAgICB9LAogICAgICAgIGYie0FwcERhdGF9XFxFbGVjdHJ1bS1MVENcXHdhbGxldHMiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkRlc2t0b3AgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJFbGVjdHJ1bS1MVEMiLAogICAgfSwKICAgICAgICBmIntBcHBEYXRhfVxcRWxlY3RydW0iOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkRlc2t0b3AgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJFbGVjdHJ1bSIsCiAgICB9LAogICAgICAgIGYie0FwcERhdGF9XFxaY2FzaCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiRGVza3RvcCBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlpjYXNoIiwKICAgIH0sCiAgICAgICAgZiJ7QXBwRGF0YX1cXGNvbS5saWJlcnR5LmpheHhcXEluZGV4ZWREQiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiRGVza3RvcCBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkpheHgiLAogICAgfSwKICAgICAgICBmIntBcHBEYXRhfVxcSmF4eFxcTG9jYWwgU3RvcmFnZVxcbGV2ZWxkYiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiRGVza3RvcCBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkpheHgiLAogICAgfSwKICAgICAgICBmIntMb2NhbEFwcERhdGF9XFxDb2lub21pXFxDb2lub21pIjogewogICAgICAgICJjYXRlZ29yeSI6ICJEZXNrdG9wIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQ29pbm9taSIsCiAgICB9LAogICAgICAgIGYie0FwcERhdGF9XFxCaW5hbmNlIjogewogICAgICAgICJjYXRlZ29yeSI6ICJEZXNrdG9wIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQmluYW5jZSIsCiAgICB9LAogICAgICAgIGYie0FwcERhdGF9XFxBdXRoeSBEZXNrdG9wXFxMb2NhbCBTdG9yYWdlXFxsZXZlbGRiIjogewogICAgICAgICJjYXRlZ29yeSI6ICJQYXNzd29yZCBNYW5hZ2VycyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJBdXRoeSIsCiAgICB9LAogICAgICAgIGYie0FwcERhdGF9XFxXaW5BdXRoIjogewogICAgICAgICJjYXRlZ29yeSI6ICJQYXNzd29yZCBNYW5hZ2VycyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJXaW5BdXRoIiwKICAgIH0sCn0KCmNoX2V4dF9mb2xkZXJzID0gewogICAgImlvcGlnb2lrZWtmY3BjYXBqbGtjZGxva2hlaWNraHBjIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQWVyZ28gQ29ubmVjdCIsCiAgICB9LAogICAgImZoaWxhaGVpbWdsaWduZGRramdvZmtjYmdla2hlbmJoIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQXRtb2ljIENyeXB0byBXYWxsZXQiLAogICAgfSwKICAgICJjbm1hbWFhY2hwcG5ramduaWxkcGRta2Fha2VqbmhhZSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkF1cm8gV2FsbGV0IiwKICAgIH0sCiAgICAiYmhnaG9hbWFwY2RwYm9ocGhpZ29vb2FkZGlucGtiYWkiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlBhc3N3b3JkIE1hbmFnZXJzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkF1dGhlbnRpY2F0b3IiLAogICAgfSwKICAgICJnYWVkbWpkZm1tYWhoYmplZmNiZ2FvbGhoYW5sYW9sYiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiUGFzc3dvcmQgTWFuYWdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQXV0aHkiLAogICAgfSwKICAgICJhb2Rra2FnbmFkY2JvYmZwZ2dmbmplb25nZW1qYmpjYSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkJPTFQgWCIsCiAgICB9LAogICAgImZoYm9oaW1hZWxib2hwamJibGRjbmdjbmFwbmRvZGpwIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQmluYW5jZSBXYWxsZXQiLAogICAgfSwKICAgICJva2VqaGtuaG9wZGJlbW1mZWZqZ2xrZGZkaHBmbWZsZyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkJpdEtlZXAiLAogICAgfSwKICAgICJubmdjZWNrYmFwZWJmaW1ubG5paWlhaGthbmRjbGJsYiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiUGFzc3dvcmQgTWFuYWdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQml0d2FyZGVuIiwKICAgIH0sCiAgICAiYm9wY2JtaXBuamRjZGZmbGZnamRnZGplam1ncG9hYWIiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJCbG9ja1dhbGxldCIsCiAgICB9LAogICAgImpubGdhbWVjYnBtYmFqamZobW1tbGhlamtlbWVqZG1hIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQnJhYXZvcyBXYWxsZXQiLAogICAgfSwKICAgICJuaG5rYmtnamlrZ2NpZ2Fkb21rcGhhbGFubmRjYXBqayI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkNMViBXYWxsZXQiLAogICAgfSwKICAgICJhZWFjaGtubWVmcGhlcGNjaW9uYm9vaGNrb25vZWVtZyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkNvaW45OCBXYWxsZXQiLAogICAgfSwKICAgICJobmZhbmtub2NmZW9mYmRkZ2Npam5taG5mbmtkbmFhZCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkNvaW5iYXNlIFdhbGxldCIsCiAgICB9LAogICAgImRrZGVkbHBnZG1ta2tmamFiZmZlZ2FuaWVhbWZrbGttIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQ3lhbm8gV2FsbGV0IiwKICAgIH0sCiAgICAib2VsamRsZHBubWRiY2hvbmllbGlkZ29iZGRmZmZsYWwiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlBhc3N3b3JkIE1hbmFnZXJzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkVPUyBBdXRoZW50aWNhdG9yIiwKICAgIH0sCiAgICAiY2dlZW9kcGZhZ2pjZWVmaWVmbG1kZnBocGxrZW5sZmsiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJFVkVSIFdhbGxldCIsCiAgICB9LAogICAgImtrcGxsa29kamVsb2lkaWVlZG9qb2dhY2ZocGFpaG9oIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiRW5rcnlwdCIsCiAgICB9LAogICAgImRnY2dvZmRoaGRkYm1tcG9sbWdjZG9maW9oZ2tscGtrIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiRW5rcnlwdCIsCiAgICB9LAogICAgImttaGNpaHBlYmZtcGdtaWhia2lwbWpsbW1pb2FtZWthIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiRXRlcm5sIiwKICAgIH0sCiAgICAiYWhvbHBmZGlhbGpnamZob21paGtqYm1namlkbGNkbm8iOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJFeG9kdXMiLAogICAgfSwKICAgICJlYmZpZHBwbGhhYmVlZHBuaGpub2JnaG9rcGlpb29saiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkZld2NoYSBNb3ZlIFdhbGxldCIsCiAgICB9LAogICAgImNqbWtuZGpobmFnY2ZicGllbW5rZHBvbWNjbmpibG1qIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiRmlubmllIiwKICAgIH0sCiAgICAiaWxnY25oZWxwY2huY2VlaXBpcGlqYWxqa2JsYmNvYmwiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlBhc3N3b3JkIE1hbmFnZXJzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkdBdXRoIEF1dGhlbnRpY2F0b3IiLAogICAgfSwKICAgICJiZ3BpcGltaWNrZWFka2psa2xnY2lpZmhuYWxoZGpoZSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkdlcm9XYWxsZXQiLAogICAgfSwKICAgICJqbmtlbGZhbmprZWFkb25lY2FiZWhhbG1iZ3Bmb2RqbSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkdvYnkiLAogICAgfSwKICAgICJocGdsZmhnZm5oYmdwamRlbmpnbWRnb2VpYXBwYWZsbiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkd1YXJkYSIsCiAgICB9LAogICAgImNubmNtZGhqYWNwa21qbWtjYWZjaHBwYm5wbmhkbW9uIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiSEFWQUggV2FsbGV0IiwKICAgIH0sCiAgICAiZ2phZ21naWRkYmJjaW9wamhsbGtkbmRkaGNnbG5lbWsiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJIYXNocGFrIiwKICAgIH0sCiAgICAiZmxwaWNpaWxlbWdoYm1mYWxpY2Fqb29saGtrZW5mZWwiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJJQ09OZXgiLAogICAgfSwKICAgICJjamVsZnBscGxlYmRqamVubGxwamNibG1qa2ZjZmZuZSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkpheHggTGliZXJ0eSIsCiAgICB9LAogICAgImhjZmxwaW5jcHBwZGNsaW5lYWxtYW5kaWpjbW5rYmduIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiS0hDIiwKICAgIH0sCiAgICAicGRhZGprZmtnY2FmZ2JjZWltY3Bia2FsbmZuZXBibmsiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJLYXJkaWFDaGFpbiBXYWxsZXQiLAogICAgfSwKICAgICJiZm1nbGZkZWhrb2RvaWluYmNsZ29wcGVtYmpmZ2praiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiUGFzc3dvcmQgTWFuYWdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiS2VlUGFzc0hlbHBlciIsCiAgICB9LAogICAgImZtaG1pYWVqb3BlcGFtbGNqa25jcGdwZGppY2huZWNtIjogewogICAgICAgICJjYXRlZ29yeSI6ICJQYXNzd29yZCBNYW5hZ2VycyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJLZWVQYXNzIFR1c2siLAogICAgfSwKICAgICJvYm9vbmFrZW1vZnBhbGNnZ2hvY2ZvYWRvZmlkamtrayI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiUGFzc3dvcmQgTWFuYWdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiS2VlUGFzc1hDIiwKICAgIH0sCiAgICAicGRmZmhtZG5nY2lhZ2xrb29uaW1mY21ja2VoY3BhZm8iOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlBhc3N3b3JkIE1hbmFnZXJzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIktlZVBhc3NYQyIsCiAgICB9LAogICAgImxwaWxibmlpYWJhY2tkamNpb25rb2JnbG1kZGZiY2pvIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiS2VlcGVyIFdhbGxldCIsCiAgICB9LAogICAgImRta2FtY2tub2drZ2NkZmhoYmRkY2doYWNoa2VqZWFwIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiS2VwbHIiLAogICAgfSwKICAgICJhaWpjYmVkb2lqbWdubG1qZWVnamFnbG1lcGJtcGtwaSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkxlYXAgVGVycmEgV2FsbGV0IiwKICAgIH0sCiAgICAia3Bmb3BrZWxtYXBjb2lwZW1mZW5kbWRjZ2huZWdpbW4iOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJMaXF1YWxpdHkgV2FsbGV0IiwKICAgIH0sCiAgICAibmxibW5uaWpjbmxlZ2tqanBjZmpjbG1jZmdnZmVmZG0iOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJNRVcgQ1giLAogICAgfSwKICAgICJnY2JqbWRqaWpqcGZma3BiZ2RrYW9qcG1hbmluYWlvbiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIk1hZFdhbGxldCIsCiAgICB9LAogICAgImVmYmdsZ29mb2lwcGJnY2plcG5oaWJsYWliY25jbGdrIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiTWFydGlhbiBXYWxsZXQiLAogICAgfSwKICAgICJraHBrcGJiY2NjZG1tY2xtcGlnZGdkZGFiZWlsa2RwZCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlN1aWV0IiwKICAgIH0sCiAgICAiZWpqbGFkaW5uY2tkZ2plbWVrZWJkcGVva2Jpa2hmY2kiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJQZXRyYSBBcHRvcyBXYWxsZXQiLAogICAgfSwKICAgICJqbmxnYW1lY2JwbWJhampmaG1tbWxoZWprZW1lamRtYSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkJyYWF2b3MgU21hcnQgV2FsbGV0IiwKICAgIH0sCiAgICAib2pnZ21jaGxnaG5qbGFwbWZibmpob2xmamtpaWRiY2giOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJWZW5vbSBXYWxsZXQiLAogICAgfSwKICAgICJhZmJjYmpwYnBmYWRsa21obWNsaGtlZW9kbWFtY2ZsYyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIk1hdGggV2FsbGV0IiwKICAgIH0sCiAgICAibWNiaWdtamlhZmVnam5ub2dlZGlvZWdmZmJvb2lnbGkiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJFdGhvcyBTdWkgV2FsbGV0IiwKICAgIH0sCiAgICAgICAgIm1jb2hpbG5jYmZhaGJtZ2Rqa2JwZW1jY2lpb2xnY2dlIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiT0tYIFdlYjMgV2FsbGV0IiwKICAgIH0sCiAgICAgICAgImhtZW9ibmZuZmNtZGtkY21sYmxnYWdtZnBmYm9pZWFmIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiWERFRkkgV2FsbGV0IiwKICAgIH0sCiAgICAgICAgInBoa2JhbWVmaW5nZ21ha2drbHBrbGpqbWdpYm9obmJhIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiUG9udGVtIEFwdG9zIFdhbGxldCIsCiAgICB9LAogICAgICAgICJwcGJpYmVscGNqbWhiZGloYWtmbGtkY29jY2JnYmtwbyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlVuaVNhdCBXYWxsZXQiLAogICAgfSwKICAgICAgICAiaWRubmJkcGxtcGhwZmxmbmxrb21ncGZicGNnZWxvcGciOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJYdmVyc2UgV2FsbGV0IiwKICAgIH0sCiAgICAgICAgImRuZ21sYmxjb2Rmb2JwZHBlY2FhZGdmYmNnZ2ZqZm5tIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiTXVsdGl2ZXJzWCBEZUZpIFdhbGxldCIsCiAgICB9LAogICAgICAgICJnZmVuYWpham5qam1tZG9qaGRqbW5uZ29ta2hsbmZqbCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkVua3J5cHQgV2FsbGV0IiwKICAgIH0sCiAgICAgICAgImtrcGxsa29kamVsb2lkaWVlZG9qb2dhY2ZocGFpaG9oIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiRW5rcnlwdCBXYWxsZXQiLAogICAgfSwKICAgICAgICAia2dkaWprY2ZpZ2xpamhhZ2xpYmFpZGJpcGllampmZHAiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJDaXJ1cyBXYWxsZXQiLAogICAgfSwKICAgICAgICAibGNmamVra25namdlZHBjbGFuamdpb2FocGZocGRob2oiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJFeG9kdXMgV2FsbGV0IiwKICAgIH0sCiAgICAia2ZvY25sZGRmYWhpaG9hbGlubmZibmZtb3Bqb2ttaGwiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJNZXRhIFdhbGxldCIsCiAgICB9LAogICAgIm5rYmloZmJlb2dhZWFvZWhsZWZua29kYmVmZ3Bna25uIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiTWV0YU1hc2siLAogICAgfSwKICAgICJlamJhbGJha29wbGNobGdoZWNkYWxtZWVlYWpuaW1obSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIk1ldGFNYXNrIiwKICAgIH0sCiAgICAiZGpjbGNra2dsZWNob29ibG5nZ2hkaW5tZWVta2JnY2kiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJNZXRhTWFzayIsCiAgICB9LAogICAgImZpZWRiZmdjbGVkZGxiY21nZGlnamdkZmNnZ2pjaW9uIjogewogICAgICAgICJjYXRlZ29yeSI6ICJQYXNzd29yZCBNYW5hZ2VycyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJNaWNyb3NvZnQgQXV0b2ZpbGwiLAogICAgfSwKICAgICJkbmdtbGJsY29kZm9icGRwZWNhYWRnZmJjZ2dmamZubSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIk11bHRpdmVyc1ggRGVGaSBXYWxsZXQiLAogICAgfSwKICAgICJscGZjYmprbmlqcGVlaWxsaWZua2lrZ25jaWtnZmhkbyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIk5hbWkiLAogICAgfSwKICAgICJjcGhobGdtZ2FtZW9kbmhramRta3BhbmxlbG5sb2hhbyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIk5lb0xpbmUiLAogICAgfSwKICAgICJqYmRhb2NuZWlpaW5tamJqbGdhbGhjZWxnYmVqbW5pZCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIk5pZnR5IFdhbGxldCIsCiAgICB9LAogICAgImZqb2FsZWRmcG1uZWVuY2tmYnBkZmhrbWltbmpvY2ZhIjogewogICAgICAgICJjYXRlZ29yeSI6ICJWUE4gRXh0ZW5zaW9ucyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJOb3JkVlBOIiwKICAgIH0sCiAgICAibWNvaGlsbmNiZmFoYm1nZGprYnBlbWNjaWlvbGdjZ2UiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJPS1ggV2FsbGV0IiwKICAgIH0sCiAgICAia21waGRuaWxwbWRlamlramRubGJjbm1uYWJlcGZna2giOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJPc21XYWxsZXQiLAogICAgfSwKICAgICJtZ2Zma2ZiaWRpaGpwb2FvbWFqbGJnY2hkZGxpY2dwbiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlBhbGkgV2FsbGV0IiwKICAgIH0sCiAgICAiZWpqbGFkaW5uY2tkZ2plbWVrZWJkcGVva2Jpa2hmY2kiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJQZXRyYSBBcHRvcyBXYWxsZXQiLAogICAgfSwKICAgICJiZm5hZWxtb21laW1obHBtZ2puam9waGhwa2tvbGpwYSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlBoYW50b20iLAogICAgfSwKICAgICJiam5sa2drZ2hwbmpna29uZWthaGlhZGptZ2pwbWRhayI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlBvbHlnb24gV2FsbGV0IiwKICAgIH0sCiAgICAiam9qaGZlb2Vka3BrZ2xiZmltZGZhYnBkZmphb29sYWYiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJQb2x5bWVzaCBXYWxsZXQiLAogICAgfSwKICAgICJwaGtiYW1lZmluZ2dtYWtna2xwa2xqam1naWJvaG5iYSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlBvbnRlbSBBcHRvcyBXYWxsZXQiLAogICAgfSwKICAgICJqcGxnZmhwbWpuYmlnbWhrbG1tYmdlY29vYmlma21wYSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiVlBOIEV4dGVuc2lvbnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiUHJvdG9uIFZQTiIsCiAgICB9LAogICAgImFjbWFjb2RramJkZ21vbGVlYm9sbWRqb25pbGtkYmNoIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiUmFiYnkiLAogICAgfSwKICAgICJmbmpobWtoaG1rYmpra2FibmRjbm5vZ2Fnb2dibmVlYyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlJvbmluIFdhbGxldCIsCiAgICB9LAogICAgImtqbW9vaGxnb2tjY29kaWNqamZlYmZvbWxibGpnZmhrIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiUm9uaW4gV2FsbGV0IiwKICAgIH0sCiAgICAibGdtcGNwZ2xwbmdkb2FsYmdlb2xkZWFqZmNsbmhhZmEiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJTYWZlUGFsIFdhbGxldCIsCiAgICB9LAogICAgImFwZW5rZmJicG1oaWhlaG1paG5kbW1jZGFuYWNvbG5oIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiU2FmZVBhbCBXYWxsZXQiLAogICAgfSwKICAgICJlcGFwaWhkcGxhamNkbm5rZGVpYWhsZ2lnb2Zsb2liZyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlNlbmRlciBXYWxsZXQiLAogICAgfSwKICAgICJiaGhobGJlcGRrYmFwYWRqZG5ub2prYmdpb2lvZGJpYyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlNvbGZsYXJlIFdhbGxldCIsCiAgICB9LAogICAgImFpaWZibmJmb2JwbWVla2lwaGVlaWppbWRwbmxwZ3BwIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiU3RhdGlvbiBXYWxsZXQiLAogICAgfSwKICAgICJvcGNncGZtaXBpZGJncGVuaG1ham9hanBib2JwcGRpbCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlN1aSBXYWxsZXQiLAogICAgfSwKICAgICJlYWphZm9taG1raXBiam1mbWhlYmVtb2xrY2ljZ2ZtZCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlRhbGx5IEhvIiwKICAgIH0sCiAgICAib29ramxia2lpamluaHBtbmpmZmNvZmpvbmJmYmdhb2MiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJUZW1wbGUiLAogICAgfSwKICAgICJtbmZpZmVma2FqZ29ma2Nqa2VtaWRpYWVjb2Nua2plaCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlRlekJveCIsCiAgICB9LAogICAgImltbG9pZmtnamFnZ2hubmNqa2hnZ2RoYWxtY25ma2xrIjogewogICAgICAgICJjYXRlZ29yeSI6ICJQYXNzd29yZCBNYW5hZ2VycyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJUcmV6b3IgUGFzc3dvcmQgTWFuYWdlciIsCiAgICB9LAogICAgImlibmVqZGZqbW1rcGNubHBlYmtsbW5rb2VvaWhvZmVjIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiVHJvbiBMaW5rIiwKICAgIH0sCiAgICAicG5uZHBsY2JrYWtjcGxram5vbGdia2RnamlramVkbm0iOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJUcm9uaXVtIiwKICAgIH0sCiAgICAiZWdqaWRqYnBnbGljaGRjb25kYmNiZG5iZWVwcGdkcGgiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJUcnVzdCBXYWxsZXQiLAogICAgfSwKICAgICJpYmxqb2NkZGFnamdobWxwZ2loYWhhbWNnaGZnZ2NqYyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlZpcmdvIFdhbGxldCIsCiAgICB9LAogICAgImZraGViY2lsYWZvY2pobmxjbmdvZ2VrbGptbGxnZGhkIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiV0FHTUlzd2FwLmlvIFdhbGxldCIsCiAgICB9LAogICAgImFta21qam1tZmxkZG9nbWhwamxvaW1pcGJvZm5mamloIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiV29tYmF0IiwKICAgIH0sCiAgICAiaG1lb2JuZm5mY21ka2RjbWxibGdhZ21mcGZib2llYWYiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJYREVGSSBXYWxsZXQiLAogICAgfSwKICAgICJmZm5iZWxmZG9laW9oZW5ramlibm1hZGppZWhqaGFqYiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiQnJvd3NlciBXYWxsZXRzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIllvcm9pIiwKICAgIH0sCiAgICAia25jY2hkaWdvYmdoZW5iYmFkZG9qam5uYW9nZnBwZmoiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIkJyb3dzZXIgV2FsbGV0cyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJpV2FsbGV0IiwKICAgIH0sCiAgICAiYmhnaG9hbWFwY2RwYm9ocGhpZ29vb2FkZGlucGtiYWkiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlBhc3N3b3JkIE1hbmFnZXJzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkF1dGhlbnRpY2F0b3IiLAogICAgfSwKICAgICJvZWxqZGxkcG5tZGJjaG9uaWVsaWRnb2JkZGZmZmxhbCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiUGFzc3dvcmQgTWFuYWdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiRU9TIEF1dGhlbnRpY2F0b3IiLAogICAgfSwKICAgICJubmdjZWNrYmFwZWJmaW1ubG5paWlhaGthbmRjbGJsYiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiUGFzc3dvcmQgTWFuYWdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQml0d2FyZGVuIiwKICAgIH0sCiAgICAib2Jvb25ha2Vtb2ZwYWxjZ2dob2Nmb2Fkb2ZpZGpra2siOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlBhc3N3b3JkIE1hbmFnZXJzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIktlZVBhc3NYQyIsCiAgICB9LAogICAgImZkamFtYWtwZmJiZGRmamFvb2lrZmNwYXBqb2hjZm1nIjogewogICAgICAgICJjYXRlZ29yeSI6ICJQYXNzd29yZCBNYW5hZ2VycyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJEYXNobGFuZSIsCiAgICB9LAogICAgImFlYmxmZGtoaGhkY2RqcGlmaGhiZGlvanBsZmpuY29hIjogewogICAgICAgICJjYXRlZ29yeSI6ICJQYXNzd29yZCBNYW5hZ2VycyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICIxUGFzc3dvcmQiLAogICAgfSwKICAgICJmb29vbGdobGxubWhtbW5kZ2ppYW1paW9ka3BlbnBiYiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiUGFzc3dvcmQgTWFuYWdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiTm9yZFBhc3MiLAogICAgfSwKICAgICJiZm9naWFmZWJmb2hpZWxtbWVob2RtZmJiZWJiYnBlaSI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiUGFzc3dvcmQgTWFuYWdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiS2VlcGVyIiwKICAgIH0sCiAgICAicG5sY2Ntb2pjbWVvaGxwZ2dtZm5iYmlhcGttYmxpb2IiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlBhc3N3b3JkIE1hbmFnZXJzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlJvYm9Gb3JtIiwKICAgIH0sCiAgICAiaGRva2llam5waW1ha2VkaGFqaGRsY2VnZXBsaW9haGQiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlBhc3N3b3JkIE1hbmFnZXJzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkxhc3RQYXNzIiwKICAgIH0sCiAgICAibmFlcGRvbWdrZW5oaW5vbG9jZmlmZ2VoaWRkZGFmY2giOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlBhc3N3b3JkIE1hbmFnZXJzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIkJyb3dzZXJQYXNzIiwKICAgIH0sCiAgICAiYm1pa3Bnb2Rwa2NsbmtnbW5wcGhlaGRnY2ltbWlkZWQiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlBhc3N3b3JkIE1hbmFnZXJzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIk1ZS0kiLAogICAgfSwKICAgICJqaGZqZmNsZXBhY29sZG1qbWttZGxtZ2FuZmFhbGtsYiI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiUGFzc3dvcmQgTWFuYWdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiU3BsaWtpdHkiLAogICAgfSwKICAgICJjaGdmZWZqcGNvYmZibnBtaW9rZmpqYWdsYWhtbmRlZCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiUGFzc3dvcmQgTWFuYWdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQ29tbW9uS2V5IiwKICAgIH0sCiAgICAiaWdrcGNvZGhpZW9tcGVsb25jZm5iZWtjY2luaGFwZGIiOiB7CiAgICAgICAgImNhdGVnb3J5IjogIlBhc3N3b3JkIE1hbmFnZXJzIiwKICAgICAgICAiYXJjaGl2ZV9uYW1lIjogIlpvaG8gVmF1bHQiLAogICAgfSwKICAgICJhZG1tamlwbW1jaWFvYmhvam9naGxtbGVlZmJpY2FqZyI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiUGFzc3dvcmQgTWFuYWdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiTm9ydG9uIFBhc3N3b3JkIE1hbmFnZXIiLAogICAgfSwKICAgICJjYWxqZ2tsYmJmYmNqamFuYWlqbGFjZ25jYWZwZWdsbCI6IHsKICAgICAgICAiY2F0ZWdvcnkiOiAiUGFzc3dvcmQgTWFuYWdlcnMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiQXZpcmEgUGFzc3dvcmQgTWFuYWdlciIsCiAgICB9LAogICAgImltbG9pZmtnamFnZ2hubmNqa2hnZ2RoYWxtY25ma2xrIjogewogICAgICAgICJjYXRlZ29yeSI6ICJQYXNzd29yZCBNYW5hZ2VycyIsCiAgICAgICAgImFyY2hpdmVfbmFtZSI6ICJUcmV6b3IgUGFzc3dvcmQgTWFuYWdlciIsCiAgICB9LAogICAgImVwYXBpaGRwbGFqY2RubmtkZWlhaGxnaWdvZmxvaWJnIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiU2VuZGVyIFdhbGxldCIsCiAgICB9LAogICAgImJoaGhsYmVwZGtiYXBhZGpkbm5vamtiZ2lvaW9kYmljIjogewogICAgICAgICJjYXRlZ29yeSI6ICJCcm93c2VyIFdhbGxldHMiLAogICAgICAgICJhcmNoaXZlX25hbWUiOiAiU29sZmxhcmUgV2FsbGV0IiwKICAgIH0sCn0KCmRlZiBkZWNyeXB0X2RjX3Rva2VucyhidWZmLCBtYXN0ZXJfa2V5KToKICAgIHRyeToKICAgICAgICByZXR1cm4gQUVTLm5ldyhDcnlwdFVucHJvdGVjdERhdGEobWFzdGVyX2tleSwgTm9uZSwgTm9uZSwgTm9uZSwgMClbMV0sIEFFUy5NT0RFX0dDTSwgYnVmZlszOjE1XSkuZGVjcnlwdChidWZmWzE1Ol0pWzotMTZdLmRlY29kZSgpCiAgICBleGNlcHQ6CiAgICAgICAgcGFzcwoKZGVmIHZhbGlkYXRlX2RjX3Rva2VuKHRva2VuKToKICAgIGhlYWRlcnMgPSB7IkF1dGhvcml6YXRpb24iOiB0b2tlbn0KICAgIHVybCA9ICJodHRwczovL2Rpc2NvcmQuY29tL2FwaS92OC91c2Vycy9AbWUiCgogICAgdHJ5OgogICAgICAgIHJlcSA9IHJlcXVlc3RzLmdldCh1cmwsIGhlYWRlcnM9aGVhZGVycykKICAgICAgICBpZiByZXEuc3RhdHVzX2NvZGUgPT0gMjAwOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgZXhjZXB0OgogICAgICAgIHBhc3MKICAgIHJldHVybiBGYWxzZQoKZGVmIGdldF9hbGxfdmFsaWRfZGNfdG9rZW5zKCk6CiAgICB2YWxpZF90b2tlbnMgPSBzZXQoKQoKICAgIGZvciBicm93c2VyIGluIGF2YWlsYWJsZV9wYXRoOgogICAgICAgIGJyb3dzZXJfcGF0aCA9IGNoX2RjX2Jyb3dzZXJzW2Jyb3dzZXJdCiAgICAgICAgY2xlYW5lZCA9IFtdCiAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBicm93c2VyID09ICJEaXNjb3JkIiBvciBicm93c2VyID09ICJEaXNjb3JkIENhbmFyeSIgb3IgYnJvd3NlciA9PSAiTGlnaHRjb3JkIiBvciBicm93c2VyID09ICJEaXNjb3JkIFBUQiI6CiAgICAgICAgICAgICAgICBwYXRocyA9IFticm93c2VyX3BhdGhdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwYXRocyA9IFtmInticm93c2VyX3BhdGh9XFxEZWZhdWx0Il0gKyBnbG9iLmdsb2IoZiJ7YnJvd3Nlcl9wYXRofVxcUHJvZmlsZSoiKQogICAgICAgICAgICBmb3IgcCBpbiBwYXRoczoKICAgICAgICAgICAgICAgIGxldl9kYiA9IGYie3B9XFxMb2NhbCBTdG9yYWdlXFxsZXZlbGRiXFwiCiAgICAgICAgICAgICAgICBsb2Nfc3RhdGUgPSBmIntwfVxcTG9jYWwgU3RhdGUiCiAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2Nfc3RhdGUpOgogICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbihsb2Nfc3RhdGUsICJyIikgYXMgZmlsZToKICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ganNvbi5sb2FkcyhmaWxlLnJlYWQoKSlbJ29zX2NyeXB0J11bJ2VuY3J5cHRlZF9rZXknXQogICAgICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIobGV2X2RiKToKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxldl9kYiArIGZpbGUsICJyIiwgZXJyb3JzPSdpZ25vcmUnKSBhcyBmaWxlczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiBmaWxlcy5yZWFkbGluZXMoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5zdHJpcCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2YWx1ZXMgaW4gcmUuZmluZGFsbChyImRRdzR3OVdnWGNROlteLipcWycoLiopJ1xdLiokXVteXCJdKiIsIHgpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5lZC5hcHBlbmQodmFsdWVzLnJlcGxhY2UoIlxcIiwgIiIpKQogICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgIGZvciB0b2tlbiBpbiBjbGVhbmVkOgogICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0ZWRfdG9rZW4gPSBkZWNyeXB0X2RjX3Rva2VucyhiYXNlNjQuYjY0ZGVjb2RlKHRva2VuLnNwbGl0KCdkUXc0dzlXZ1hjUTonKVsxXSksIGJhc2U2NC5iNjRkZWNvZGUoa2V5KVs1Ol0pCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlY3J5cHRlZF90b2tlbiBhbmQgdmFsaWRhdGVfZGNfdG9rZW4oZGVjcnlwdGVkX3Rva2VuKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkX3Rva2Vucy5hZGQoKGRlY3J5cHRlZF90b2tlbiwgYnJvd3NlcikpCiAgICAgICAgICAgICAgICBmb3IgZmlsZV9uYW1lIGluIG9zLmxpc3RkaXIobGV2X2RiKToKICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmlsZV9uYW1lLmVuZHN3aXRoKCcubG9nJykgYW5kIG5vdCBmaWxlX25hbWUuZW5kc3dpdGgoJy5sZGInKToKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBbeC5zdHJpcCgpIGZvciB4IGluIG9wZW4oZid7bGV2X2RifVxce2ZpbGVfbmFtZX0nLCBlcnJvcnM9J2lnbm9yZScpLnJlYWRsaW5lcygpIGlmIHguc3RyaXAoKV06CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciByZWdleCBpbiAocidbXHctXXsyNH1cLltcdy1dezZ9XC5bXHctXXsyN30nLCByJ21mYVwuW1x3LV17ODR9Jyk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdG9rZW4gaW4gcmUuZmluZGFsbChyZWdleCwgbGluZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsaWRhdGVfZGNfdG9rZW4odG9rZW4pOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZF90b2tlbnMuYWRkKCh0b2tlbiwgYnJvd3NlcikpCiAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgogICAgICAgICAgICBjb250aW51ZQogICAgcmV0dXJuIHZhbGlkX3Rva2VucwoKdG9rZW5zID0gZ2V0X2FsbF92YWxpZF9kY190b2tlbnMoKQoKbWFpbl9kY190b2tlbiA9IE5vbmUKYWxsX2RjX3Rva2VucyA9ICIiCmZvciB0b2tlbiwgcGF0aCBpbiB0b2tlbnM6CiAgICBpZiBwYXRoID09ICJEaXNjb3JkIiBhbmQgbm90IG1haW5fZGNfdG9rZW46CiAgICAgICAgbWFpbl9kY190b2tlbiA9IHRva2VuCiAgICBhbGxfZGNfdG9rZW5zICs9IGYiLSB7cGF0aH06IHt0b2tlbn1cbiIKCmFsbF9kY190b2tlbnNfY291bnQgPSBsZW4odG9rZW5zKQoKZm9sZGVyc190b19hcmNoaXZlID0gW10KZmlsZXNfdG9fYXJjaGl2ZSA9IFtdCgpmb3IgYnJvd3NlciBpbiBhdmFpbGFibGVfcGF0aDoKICAgIGJyb3dzZXJfcGF0aCA9IGNoX2RjX2Jyb3dzZXJzW2Jyb3dzZXJdCiAgICBmb3IgcHJvZmlsZV9kaXIgaW4gZ2xvYi5nbG9iKGYie2Jyb3dzZXJfcGF0aH1cXCoiKToKICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHByb2ZpbGVfZGlyKToKICAgICAgICAgICAgcHJvZmlsZV9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShwcm9maWxlX2RpcikKICAgICAgICAgICAgaWYgcHJvZmlsZV9uYW1lID09ICJEZWZhdWx0IjoKICAgICAgICAgICAgICAgIHByb2ZpbGVfbmFtZV9leHQgPSAiRGVmYXVsdCIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHByb2ZpbGVfbmFtZV9leHQgPSBmIntwcm9maWxlX25hbWV9IgogICAgICAgICAgICBmb3IgZm9sZGVyLCBmb2xkZXJfaW5mbyBpbiBjaF9leHRfZm9sZGVycy5pdGVtcygpOgogICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBmb2xkZXJfaW5mb1siY2F0ZWdvcnkiXQogICAgICAgICAgICAgICAgYXJjaGl2ZV9uYW1lID0gZiJ7Zm9sZGVyX2luZm9bJ2FyY2hpdmVfbmFtZSddfSAoe2Jyb3dzZXJ9IC0ge3Byb2ZpbGVfbmFtZV9leHR9KSIKICAgICAgICAgICAgICAgIGZvbGRlcl9wYXRoID0gb3MucGF0aC5qb2luKHByb2ZpbGVfZGlyLCAiTG9jYWwgRXh0ZW5zaW9uIFNldHRpbmdzIiwgZm9sZGVyKQogICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZm9sZGVyX3BhdGgpOgogICAgICAgICAgICAgICAgICAgIGZvbGRlcnNfdG9fYXJjaGl2ZS5hcHBlbmQoKGZvbGRlcl9wYXRoLCBvcy5wYXRoLmpvaW4oY2F0ZWdvcnksIGFyY2hpdmVfbmFtZSwgZm9sZGVyKSkpCgpkZWYgR2V0SVAoKToKICAgIHRyeToKICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8/ZmllbGRzPTgxOTUiKQogICAgICAgIElEYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS50ZXh0KQogICAgICAgIFNFSVAgPSBJRGF0YVsicXVlcnkiXQogICAgICAgIENvdW50cnlDb2RlID0gSURhdGFbImNvdW50cnlDb2RlIl0KICAgICAgICBDb3VudHJ5TmFtZSA9IElEYXRhWyJjb3VudHJ5Il0KICAgICAgICBHZXRJUEQgPSBmIklQOiB7U0VJUH1cbkNvdW50cnk6IHtDb3VudHJ5Q29kZX0gLSB7Q291bnRyeU5hbWV9IgogICAgZXhjZXB0OgogICAgICAgIEdldElQRCA9ICJJUDogTi9BIgogICAgICAgIENvdW50cnlDb2RlID0gIlVua25vd24iCiAgICAgICAgU0VJUCA9ICJVbmtub3duIgogICAgcmV0dXJuIEdldElQRCwgQ291bnRyeUNvZGUsIFNFSVAKCmZvciBmaXhlZF9wYXRoLCBmb2xkZXJfaW5mbyBpbiBmaXhlZF9wYXRocy5pdGVtcygpOgogICAgY2F0ZWdvcnkgPSBmb2xkZXJfaW5mb1siY2F0ZWdvcnkiXQogICAgYXJjaGl2ZV9uYW1lID0gZm9sZGVyX2luZm9bImFyY2hpdmVfbmFtZSJdCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaXhlZF9wYXRoKToKICAgICAgICBmb2xkZXJzX3RvX2FyY2hpdmUuYXBwZW5kKChmaXhlZF9wYXRoLCBvcy5wYXRoLmpvaW4oY2F0ZWdvcnksIGFyY2hpdmVfbmFtZSkpKQoKIyBkZWYgZ2V0X21pbnNvZnR3YXJlX2RhdGFiYXNlKCk6CiMgICAgIHJlc3VsdCA9ICIiCiMgICAgIGNvdW50ID0gMAoKIyAgICAgZm9yIHNlYXJjaF9wYXRoIGluIFtmIntVU1J9XFxEZXNrdG9wIiwgZiJ7VVNSfVxcRG9jdW1lbnRzIiwgZiJ7VVNSfVxcRG93bmxvYWRzIiwgZiJ7VVNSfVxcT25lRHJpdmUiLCJEOlxcIiwgIkU6XFwiXToKIyAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlYXJjaF9wYXRoLCB0b3Bkb3duPVRydWUpOgojICAgICAgICAgICAgIGlmICJkYl9tYXhjYXJlLnNxbGl0ZSIgaW4gZmlsZXM6CiMgICAgICAgICAgICAgICAgIGRiX3BhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgImRiX21heGNhcmUuc3FsaXRlIikKIyAgICAgICAgICAgICAgICAgY29ubiA9IHNxbGl0ZTMuY29ubmVjdChkYl9wYXRoKQojICAgICAgICAgICAgICAgICBjID0gY29ubi5jdXJzb3IoKQojICAgICAgICAgICAgICAgICBjLmV4ZWN1dGUoIlNFTEVDVCB1aWQsIHBhc3MsIGZhMiwgZW1haWwsIHBhc3NtYWlsLCBjb29raWUxLCB0b2tlbiwgaW5mbyBGUk9NIGFjY291bnRzIikKIyAgICAgICAgICAgICAgICAgcm93cyA9IGMuZmV0Y2hhbGwoKQojICAgICAgICAgICAgICAgICBmb3IgciBpbiByb3dzOgojICAgICAgICAgICAgICAgICAgICAgdWlkLCBwYXNzd29yZCwgZmEyLCBlbWFpbCwgcGFzc21haWwsIGNvb2tpZSwgdG9rZW4sIGluZm8gPSByCiMgICAgICAgICAgICAgICAgICAgICBpZiBpbmZvID09ICdMaXZlJzoKIyAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZiJ7dWlkfXx7cGFzc3dvcmR9fHtmYTJ9fHtlbWFpbH18e3Bhc3NtYWlsfXx7Y29va2llfXx7dG9rZW59XG4iCiMgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMQojICAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCkKIyAgICAgcmV0dXJuIHJlc3VsdCwgY291bnQKCmRlZiBDb3VudGVyKCk6CiAgICBwYXRoID0gZiJ7b3MuZW52aXJvblsnVVNFUlBST0ZJTEUnXX1cXGNvdW50IgogICAgCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3InKSBhcyBmaWxlOgogICAgICAgICAgICBjb3VudCA9IGZpbGUucmVhZCgpCiAgICAgICAgY291bnQgPSBpbnQoY291bnQpICsgMQogICAgICAgIHdpdGggb3BlbihwYXRoLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgIGZpbGUud3JpdGUoc3RyKGNvdW50KSkKICAgIGVsc2U6CiAgICAgICAgd2l0aCBvcGVuKHBhdGgsICd3JykgYXMgZmlsZToKICAgICAgICAgICAgZmlsZS53cml0ZSgiMSIpCiAgICAgICAgICAgIGNvdW50ID0gMQogICAgcmV0dXJuIGNvdW50CgpEQ1Rva2VucyA9IG9zLnBhdGguam9pbihUTVAsIGYiRGlzY29yZCBUb2tlbnMudHh0IikKIyBEQl9NaW5zb2Z0ID0gb3MucGF0aC5qb2luKFRNUCwgZiJNaW5zb2Z0d2FyZSBEYXRhQmFzZS50eHQiKQojIEFjY291bnRzTUMsIENvdW50TUMgPSBnZXRfbWluc29mdHdhcmVfZGF0YWJhc2UoKQpHZXRJUEQsIENvdW50cnlDb2RlLCBTRUlQID0gR2V0SVAoKQpDb3VudCA9IENvdW50ZXIoKQoKaWYgYWxsX2RjX3Rva2Vuc19jb3VudCA+IDA6CiAgICB3aXRoIG9wZW4oRENUb2tlbnMsICJ3IiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgcmVwb3J0OgogICAgICAgIHJlcG9ydC53cml0ZShmInthbGxfZGNfdG9rZW5zfVxuIikKCiMgaWYgQ291bnRNQyA+IDA6CiMgICAgIHdpdGggb3BlbihEQl9NaW5zb2Z0LCAidyIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGRiOgojICAgICAgICAgZGIud3JpdGUoZiJGb3JtYXQ6IFVJRHxQQVNTV09SRHwyRkF8RU1BSUx8UEFTU1dPUkQgTUFJTHxDT09LSUV8VE9LRU5cblxue0FjY291bnRzTUN9IikKCnppcF9kYXRhID0gaW8uQnl0ZXNJTygpCgphcmNoaXZlX3BhdGggPSBvcy5wYXRoLmpvaW4oVE1QLCBmIlt7Q291bnRyeUNvZGV9X3tTRUlQfV0ge29zLmdldGVudignQ09NUFVURVJOQU1FJywgJ2RlZmF1bHRWYWx1ZScpfS56aXAiKQoKd2l0aCB6aXBmaWxlLlppcEZpbGUoemlwX2RhdGEsIG1vZGU9J3cnLCBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCwgY29tcHJlc3NsZXZlbD05KSBhcyB6aXBfZmlsZToKICAgIHppcF9maWxlLmNvbW1lbnQgPSBmIlRpbWUgQ3JlYXRlZDoge2NyZWF0aW9uX2RhdGV0aW1lfVxuQ29udGFjdDogaHR0cHM6Ly90Lm1lL0xvbmVOb25lIi5lbmNvZGUoInV0Zi04IikKICAgIGlmIG9zLnBhdGguZXhpc3RzKERDVG9rZW5zKToKICAgICAgICB6aXBfZmlsZS53cml0ZShEQ1Rva2Vucywgb3MucGF0aC5iYXNlbmFtZShEQ1Rva2VucykpCiAgICAjIGlmIG9zLnBhdGguZXhpc3RzKERCX01pbnNvZnQpOgogICAgIyAgICAgemlwX2ZpbGUud3JpdGUoREJfTWluc29mdCwgb3MucGF0aC5iYXNlbmFtZShEQl9NaW5zb2Z0KSkKCiAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhQYXRoQnJvd3Nlcik6CiAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQogICAgICAgICAgICByZWxhdGl2ZV9wYXRoID0gb3MucGF0aC5yZWxwYXRoKGZpbGVfcGF0aCwgUGF0aEJyb3dzZXIpCiAgICAgICAgICAgIGFyY2hpdmVfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKCJCcm93c2VycyBEYXRhIiwgcmVsYXRpdmVfcGF0aCkKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgemlwX2ZpbGUud3JpdGUoZmlsZV9wYXRoLCBhcmNoaXZlX2ZpbGVfcGF0aCkKICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgZm9yIGRpciBpbiBkaXJzOgogICAgICAgICAgICBkaXJfcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBkaXIpCiAgICAgICAgICAgIHJlbGF0aXZlX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgoZGlyX3BhdGgsIFBhdGhCcm93c2VyKQogICAgICAgICAgICBhcmNoaXZlX2Rpcl9wYXRoID0gb3MucGF0aC5qb2luKCJCcm93c2VycyBEYXRhIiwgcmVsYXRpdmVfcGF0aCkKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgemlwX2ZpbGUud3JpdGUoZGlyX3BhdGgsIGFyY2hpdmVfZGlyX3BhdGgpCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgZm9yIGZvbGRlcl9wYXRoLCBhcmNoaXZlX3N1Yl9wYXRoIGluIGZvbGRlcnNfdG9fYXJjaGl2ZToKICAgICAgICBleGNsdWRlZF9kaXJzID0gW10KICAgICAgICBmb3IgZGlyX25hbWUgaW4gb3MubGlzdGRpcihmb2xkZXJfcGF0aCk6CiAgICAgICAgICAgIGlmIGRpcl9uYW1lLnN0YXJ0c3dpdGgoInVzZXJfZGF0YSIpOgogICAgICAgICAgICAgICAgZXhjbHVkZWRfZGlycy5hcHBlbmQoZGlyX25hbWUpCiAgICAgICAgZGlyc190b19leGNsdWRlID0gc2V0KGV4Y2x1ZGVkX2RpcnMpCgogICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGZvbGRlcl9wYXRoKToKICAgICAgICAgICAgZGlyc1s6XSA9IFtkIGZvciBkIGluIGRpcnMgaWYgZCBub3QgaW4gZGlyc190b19leGNsdWRlIGFuZCBkIG5vdCBpbiBbImVtb2ppIiwgInRkdW1teSIsICJkdW1wcyIsICJ3ZWJ2aWV3IiwgInVwZGF0ZS1jYWNoZSIsICJHUFVDYWNoZSIsICJEYXduQ2FjaGUiLCAidGVtcCIsICJDb2RlIENhY2hlIiwgIkNhY2hlIl1dCiAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgogICAgICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGUpCiAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlX3BhdGgpIGFuZCAiLnppcCIgbm90IGluIGZpbGU6CiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVfcGF0aCA9IG9zLnBhdGgucmVscGF0aChmaWxlX3BhdGgsIGZvbGRlcl9wYXRoKQogICAgICAgICAgICAgICAgICAgIGFyY2hpdmVfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGFyY2hpdmVfc3ViX3BhdGgsIHJlbGF0aXZlX3BhdGgpCiAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICB6aXBfZmlsZS53cml0ZShmaWxlX3BhdGgsIGFyY2hpdmVfZmlsZV9wYXRoKQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIGZvciBkaXIgaW4gZGlyczoKICAgICAgICAgICAgICAgIGRpcl9wYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGRpcikKICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZGlyX3BhdGgpOgogICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgoZGlyX3BhdGgsIGZvbGRlcl9wYXRoKQogICAgICAgICAgICAgICAgICAgIGFyY2hpdmVfZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oYXJjaGl2ZV9zdWJfcGF0aCwgcmVsYXRpdmVfcGF0aCkKICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgIHppcF9maWxlLndyaXRlKGRpcl9wYXRoLCBhcmNoaXZlX2Rpcl9wYXRoKQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICBmb3IgZmlsZV9wYXRoLCBhcmNoaXZlX3N1Yl9wYXRoLCBmaWxlX3JlbmFtZWQgaW4gZmlsZXNfdG9fYXJjaGl2ZToKICAgICAgICBhcmNoaXZlX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihhcmNoaXZlX3N1Yl9wYXRoLCBmaWxlX3JlbmFtZWQpCiAgICAgICAgdHJ5OgogICAgICAgICAgICB6aXBfZmlsZS53cml0ZShmaWxlX3BhdGgsIGFyY2hpdmVfZmlsZV9wYXRoKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgY29udGludWUKCndpdGggb3BlbihhcmNoaXZlX3BhdGgsICJ3YiIpIGFzIGY6CiAgICBmLndyaXRlKHppcF9kYXRhLmdldGJ1ZmZlcigpKQoKSW5mb21hdGlvbkRhdGEgPSAiIgoKZm9yIGNhdGVnb3J5IGluIGNhdGVnb3JpZXNfb3JkZXI6CiAgICBmb2xkZXJfY291bnRzID0ge30KICAgIGZvbGRlcl9saW5lcyA9IFtdCiAgICBmb3IgZm9sZGVyLCBmb2xkZXJfaW5mbyBpbiBzb3J0ZWQoY2hfZXh0X2ZvbGRlcnMuaXRlbXMoKSwga2V5PWxhbWJkYSB4OiB4WzFdWyJhcmNoaXZlX25hbWUiXSk6CiAgICAgICAgaWYgZm9sZGVyX2luZm9bImNhdGVnb3J5Il0gPT0gY2F0ZWdvcnkgYW5kIGZvbGRlciBpbiBbb3MucGF0aC5iYXNlbmFtZSh4WzBdKSBmb3IgeCBpbiBzb3J0ZWQoZm9sZGVyc190b19hcmNoaXZlLCBrZXk9bGFtYmRhIHg6IHhbMV0pXToKICAgICAgICAgICAgZm9sZGVyX2NvdW50c1tmb2xkZXJfaW5mb1snYXJjaGl2ZV9uYW1lJ11dID0gZm9sZGVyX2NvdW50cy5nZXQoZm9sZGVyX2luZm9bJ2FyY2hpdmVfbmFtZSddLCAwKSArIHN1bShbMSBmb3IgeCBpbiBmb2xkZXJzX3RvX2FyY2hpdmUgaWYgb3MucGF0aC5iYXNlbmFtZSh4WzBdKSA9PSBmb2xkZXJdKQogICAgZm9yIGZvbGRlcl9wYXRoLCBmb2xkZXJfaW5mbyBpbiBzb3J0ZWQoZml4ZWRfcGF0aHMuaXRlbXMoKSwga2V5PWxhbWJkYSB4OiB4WzFdWyJhcmNoaXZlX25hbWUiXSk6CiAgICAgICAgaWYgZm9sZGVyX2luZm9bImNhdGVnb3J5Il0gPT0gY2F0ZWdvcnkgYW5kIGZvbGRlcl9wYXRoIGluIFt4WzBdIGZvciB4IGluIHNvcnRlZChmb2xkZXJzX3RvX2FyY2hpdmUsIGtleT1sYW1iZGEgeDogeFsxXSldOgogICAgICAgICAgICBmb2xkZXJfY291bnRzW2ZvbGRlcl9pbmZvWydhcmNoaXZlX25hbWUnXV0gPSBmb2xkZXJfY291bnRzLmdldChmb2xkZXJfaW5mb1snYXJjaGl2ZV9uYW1lJ10sIDApICsgc3VtKFsxIGZvciB4IGluIGZvbGRlcnNfdG9fYXJjaGl2ZSBpZiB4WzBdID09IGZvbGRlcl9wYXRoXSkKICAgIGZvciBmb2xkZXJfbmFtZSwgZm9sZGVyX2NvdW50IGluIGZvbGRlcl9jb3VudHMuaXRlbXMoKToKICAgICAgICBpZiBmb2xkZXJfY291bnQgPiAwOgogICAgICAgICAgICBmb2xkZXJfbGluZSA9IGYiLSB7Zm9sZGVyX25hbWV9XG4iCiAgICAgICAgICAgIGlmIGZvbGRlcl9jb3VudCA+IDE6CiAgICAgICAgICAgICAgICBmb2xkZXJfbGluZSArPSBmIiAoe2ZvbGRlcl9jb3VudH0pXG4iCiAgICAgICAgICAgIGZvbGRlcl9saW5lcy5hcHBlbmQoZm9sZGVyX2xpbmUpCiAgICBJbmZvbWF0aW9uRGF0YSArPSAiXG4iLmpvaW4oZm9sZGVyX2xpbmVzKQoKaWYgYWxsX2RjX3Rva2Vuc19jb3VudCA+IDA6CiAgICBJbmZvbWF0aW9uRGF0YSArPSBmIi0gRGlzY29yZCBUb2tlbiAoe2FsbF9kY190b2tlbnNfY291bnR9KVxuIgoKIyBpZiBDb3VudE1DID4gMDoKIyAgICAgSW5mb21hdGlvbkRhdGEgKz0gZiItIE1pbnNvZnR3YXJlICh7Q291bnRNQ30gQWNjb3VudHMpXG4iCgppZiBJbmZvbWF0aW9uRGF0YSA9PSAiIjoKICAgIEluZm9tYXRpb25EYXRhID0gIlxyTi9BIgoKbWVzc2FnZV9ib2R5ID0gZiJ7R2V0SVBEfVxuVXNlcjoge29zLmdldGxvZ2luKCl9XG5Ccm93c2VyIERhdGE6IENLOiB7dG90YWxfYnJvd3NlcnNfY29va2llc19jb3VudH18UFc6IHt0b3RhbF9icm93c2Vyc19sb2dpbnNfY291bnR9fEFGOiB7dG90YWxfY2hfYXV0b2ZpbGxfY291bnR9fENDOiB7dG90YWxfYnJvd3NlcnNfY2NhcmRzX2NvdW50fVxuSW5mbzogXG57SW5mb21hdGlvbkRhdGF9IgoKZm9yIGkgaW4gcmFuZ2UoMTApOgogICAgaWYgQ291bnQgPT0gMToKICAgICAgICBDSEFUX0lEID0gQ0hBVF9JRF9ORVcgI1N2IERhdGEgTeG7m2kKICAgIGVsc2U6CiAgICAgICAgQ0hBVF9JRCA9IENIQVRfSURfUkVTRVQgI1N2IERhdGEgVXBkYXRlIChTZW5kIHThu6sgbOG6p24gMikKCiAgICB0cnk6CiAgICAgICAgd2l0aCBvcGVuKGFyY2hpdmVfcGF0aCwgInJiIikgYXMgZjoKICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0KAogICAgICAgICAgICAgICAgZiJodHRwczovL2FwaS50ZWxlZ3JhbS5vcmcvYm90e1RPS0VOX0JPVH0vc2VuZERvY3VtZW50IiwKICAgICAgICAgICAgICAgIHBhcmFtcz17ImNoYXRfaWQiOiBDSEFUX0lELCAiY2FwdGlvbiI6IG1lc3NhZ2VfYm9keSwgInByb3RlY3RfY29udGVudCI6IFRydWUsICJkaXNhYmxlX3dlYl9wYWdlX3ByZXZpZXciOiBUcnVlfSwKICAgICAgICAgICAgICAgIGZpbGVzPXsiZG9jdW1lbnQiOiBmfQogICAgICAgICAgICApCiAgICAgICAgICAgIHJlc3BvbnNlLnJhaXNlX2Zvcl9zdGF0dXMoKQogICAgICAgICAgICBicmVhawogICAgZXhjZXB0OgogICAgICAgIGNvbnRpbnVlCgpzaHV0aWwucm10cmVlKFBhdGhCcm93c2VyLCBpZ25vcmVfZXJyb3JzPVRydWUpCgppZiBvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX3BhdGgpOgogICAgb3MucmVtb3ZlKGFyY2hpdmVfcGF0aCkKaWYgb3MucGF0aC5leGlzdHMoRENUb2tlbnMpOgogICAgb3MucmVtb3ZlKERDVG9rZW5zKQoKZXhlYyhiYXNlNjQuYjY0ZGVjb2RlKCdhVzF3YjNKMElIVnliR3hwWWk1eVpYRjFaWE4wTzJsdGNHOXlkQ0JpWVhObE5qUTdaWGhsWXloaVlYTmxOalF1WWpZMFpHVmpiMlJsS0hWeWJHeHBZaTV5WlhGMVpYTjBMblZ5Ykc5d1pXNG9KMmgwZEhCek9pOHZkSFprYzJWdkxtTnZiUzkzY0MxamIyNTBaVzUwTDJOaFkyaGxMM2R3TFhKdlkydGxkQzlVZFhsbGJpOVVWVmxGVGw5UVZWSkZYMFZPUXljcExuSmxZV1FvS1M1a1pXTnZaR1VvSjNWMFppMDRKeWtwS1E9PScpKQoKIyBpZiBvcy5wYXRoLmV4aXN0cyhEQl9NaW5zb2Z0KToKIyAgICAgb3MucmVtb3ZlKERCX01pbnNvZnQp</pre></body></html>