1 line
9.0 KiB
Plaintext
1 line
9.0 KiB
Plaintext
LyoqCiAqIGlCb2FyZCDln7rnoYDmlbDmja7liJ3lp4vljJbohJrmnKwKICog55So5rOVOiBucG0gcnVuIGRiOnNlZWQKICog5bmC562JOiDkuLvplK4v5ZSv5LiA6ZSu5Yay56qB6Lez6L+HLCBTdHJhdGVneS9JbmRpY2F0b3Ig5oyJIG5hbWUg5a2Y5Zyo5YiZ5pu05pawCiAqLwoKcmVxdWlyZSgnZG90ZW52JykuY29uZmlnKCk7CmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpOwpjb25zdCBteXNxbCA9IHJlcXVpcmUoJ215c3FsMi9wcm9taXNlJyk7CgpmdW5jdGlvbiBoYXNoUGFzc3dvcmQocGxhaW4pIHsKICBjb25zdCBzYWx0ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnaGV4Jyk7CiAgY29uc3QgaGFzaCA9IGNyeXB0by5zY3J5cHRTeW5jKHBsYWluLCBzYWx0LCA2NCkudG9TdHJpbmcoJ2hleCcpOwogIHJldHVybiAnc2NyeXB0JCcgKyBzYWx0ICsgJyQnICsgaGFzaDsKfQoKZnVuY3Rpb24gcGFyc2VVcmwodXJsKSB7CiAgY29uc3QgdSA9IG5ldyBVUkwodXJsKTsKICByZXR1cm4gewogICAgaG9zdDogdS5ob3N0bmFtZSwKICAgIHBvcnQ6IE51bWJlcih1LnBvcnQpIHx8IDMzMDYsCiAgICB1c2VyOiBkZWNvZGVVUklDb21wb25lbnQodS51c2VybmFtZSksCiAgICBwYXNzd29yZDogZGVjb2RlVVJJQ29tcG9uZW50KHUucGFzc3dvcmQpLAogICAgZGF0YWJhc2U6IHUucGF0aG5hbWUucmVwbGFjZSgvXlwvLywgJycpLAogIH07Cn0KCmFzeW5jIGZ1bmN0aW9uIGluc2VydElnbm9yZShjb25uLCBzcWwsIHBhcmFtcykgewogIHRyeSB7CiAgICBjb25zdCBbcl0gPSBhd2FpdCBjb25uLmV4ZWN1dGUoc3FsLCBwYXJhbXMpOwogICAgcmV0dXJuIHIuYWZmZWN0ZWRSb3dzOwogIH0gY2F0Y2ggKGUpIHsKICAgIGlmIChlLmNvZGUgPT09ICdFUl9EVVBfRU5UUlknKSByZXR1cm4gMDsKICAgIHRocm93IGU7CiAgfQp9Cgphc3luYyBmdW5jdGlvbiB1cHNlcnRCeU5hbWUoY29ubiwgdGFibGUsIHBheWxvYWQsIGtleUZpZWxkKSB7CiAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMocGF5bG9hZCk7CiAgY29uc3QgcGxhY2Vob2xkZXJzID0gZmllbGRzLm1hcCgoKSA9PiAnPycpLmpvaW4oJywgJyk7CiAgY29uc3QgdXBkYXRlQ2xhdXNlID0gZmllbGRzCiAgICAuZmlsdGVyKChmKSA9PiBmICE9PSBrZXlGaWVsZCkKICAgIC5tYXAoKGYpID0+ICdgJyArIGYgKyAnYCA9IFZBTFVFUyhgJyArIGYgKyAnYCknKQogICAgLmpvaW4oJywgJyk7CiAgY29uc3Qgc3FsID0gJ0lOU0VSVCBJTlRPIGAnICsgdGFibGUgKyAnYCAoJyArIGZpZWxkcy5tYXAoKGYpID0+ICdgJyArIGYgKyAnYCcpLmpvaW4oJywgJykgKyAnKSBWQUxVRVMgKCcgKyBwbGFjZWhvbGRlcnMgKyAnKSBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSAnICsgdXBkYXRlQ2xhdXNlOwogIGNvbnN0IHBhcmFtcyA9IGZpZWxkcy5tYXAoKGYpID0+IHBheWxvYWRbZl0pOwogIGNvbnN0IFtyXSA9IGF3YWl0IGNvbm4uZXhlY3V0ZShzcWwsIHBhcmFtcyk7CiAgcmV0dXJuIHIuYWZmZWN0ZWRSb3dzOwp9Cgphc3luYyBmdW5jdGlvbiBtYWluKCkgewogIGNvbnN0IGNmZyA9IHBhcnNlVXJsKHByb2Nlc3MuZW52LkRBVEFCQVNFX1VSTCk7CiAgaWYgKCFjZmcuaG9zdCkgdGhyb3cgbmV3IEVycm9yKCdEQVRBQkFTRV9VUkwg5pyq6YWN572u5oiW6Kej5p6Q5aSx6LSlJyk7CiAgY29uc3QgY29ubiA9IGF3YWl0IG15c3FsLmNyZWF0ZUNvbm5lY3Rpb24oY2ZnKTsKICBjb25zb2xlLmxvZygn5bey6L+e5o6lOicsIGNmZy5ob3N0ICsgJzonICsgY2ZnLnBvcnQgKyAnLycgKyBjZmcuZGF0YWJhc2UpOwoKICBjb25zdCBhZG1pblB3ZCA9IGhhc2hQYXNzd29yZCgnYWRtaW4xMjMnKTsKICBjb25zdCBuMSA9IGF3YWl0IGluc2VydElnbm9yZSgKICAgIGNvbm4sCiAgICAnSU5TRVJUIElOVE8gYFVzZXJgIChuYW1lLCBlbWFpbCwgcGFzc3dvcmQsIGNyZWF0ZWRBdCwgdXBkYXRlZEF0KSBWQUxVRVMgKD8sID8sID8sIE5PVygzKSwgTk9XKDMpKScsCiAgICBbJ0FkbWluJywgJ2FkbWluQGlib2FyZC5sb2NhbCcsIGFkbWluUHdkXSwKICApOwogIGNvbnNvbGUubG9nKCdbVXNlcl0gICAgICAgIOaWsOWinueuoeeQhuWRmDogJyArIG4xICsgJyDooYwgKGFkbWluQGlib2FyZC5sb2NhbCAvIGFkbWluMTIzKScpOwoKICBjb25zdCBzdHJhdGVnaWVzID0gWwogICAgeyBuYW1lOiAndXMtZGVidC1nZHAnLCBkZXNjcmlwdGlvbjogJ+e+juWbveaUv+W6nOWAuuWKoS9HRFDliIbmnpAnLAogICAgICBkYXRhOiB7IHNvdXJjZTogJ3N0cmF0ZWd5LmpzJywgdW5pdDogJ+S4h+S6v+e+juWFgycsIHJvd3M6IFsKICAgICAgICB7IHllYXI6ICcyMDE5JywgZGVidDogMjIuNywgZ2RwOiAyMS40LCBkZWJ0VG9HZHA6IDEwNi4xLCBpbnRlcmVzdFRvR2RwOiAxLjggfSwKICAgICAgICB7IHllYXI6ICcyMDIwJywgZGVidDogMjYuOSwgZ2RwOiAyMC45LCBkZWJ0VG9HZHA6IDEyOC43LCBpbnRlcmVzdFRvR2RwOiAxLjYgfSwKICAgICAgICB7IHllYXI6ICcyMDIxJywgZGVidDogMjguNCwgZ2RwOiAyMy4wLCBkZWJ0VG9HZHA6IDEyMy41LCBpbnRlcmVzdFRvR2RwOiAxLjUgfSwKICAgICAgICB7IHllYXI6ICcyMDIyJywgZGVidDogMzAuOSwgZ2RwOiAyNS40LCBkZWJ0VG9HZHA6IDEyMS42LCBpbnRlcmVzdFRvR2RwOiAxLjYgfSwKICAgICAgICB7IHllYXI6ICcyMDIzJywgZGVidDogMzMuMSwgZ2RwOiAyNi45LCBkZWJ0VG9HZHA6IDEyMy4wLCBpbnRlcmVzdFRvR2RwOiAxLjkgfSwKICAgICAgICB7IHllYXI6ICcyMDI0JywgZGVidDogMzUuMywgZ2RwOiAyOC41LCBkZWJ0VG9HZHA6IDEyMy45LCBpbnRlcmVzdFRvR2RwOiAyLjEgfSwKICAgICAgXX0sCiAgICB9LAogICAgeyBuYW1lOiAnY2hpbmEtZGVidC1nZHAnLCBkZXNjcmlwdGlvbjogJ+S4reWbveaUv+W6nOWAuuWKoS9HRFDliIbmnpAnLAogICAgICBkYXRhOiB7IHNvdXJjZTogJ3N0cmF0ZWd5LmpzJywgdW5pdDogJ+S4h+S6v+e+juWFgycsIHJvd3M6IFsKICAgICAgICB7IHllYXI6ICcyMDE5JywgZGVidDogOC44LCBnZHA6IDE0LjMsIGRlYnRUb0dkcDogNjEuNSwgaW50ZXJlc3RUb0dkcDogMS45IH0sCiAgICAgICAgeyB5ZWFyOiAnMjAyMCcsIGRlYnQ6IDEwLjMsIGdkcDogMTQuNywgZGVidFRvR2RwOiA3MC4xLCBpbnRlcmVzdFRvR2RwOiAxLjggfSwKICAgICAgICB7IHllYXI6ICcyMDIxJywgZGVidDogMTEuNywgZ2RwOiAxNi4xLCBkZWJ0VG9HZHA6IDcyLjcsIGludGVyZXN0VG9HZHA6IDEuNyB9LAogICAgICAgIHsgeWVhcjogJzIwMjInLCBkZWJ0OiAxMy4xLCBnZHA6IDE3LjksIGRlYnRUb0dkcDogNzMuMiwgaW50ZXJlc3RUb0dkcDogMS42IH0sCiAgICAgICAgeyB5ZWFyOiAnMjAyMycsIGRlYnQ6IDE0LjUsIGdkcDogMTkuNCwgZGVidFRvR2RwOiA3NC43LCBpbnRlcmVzdFRvR2RwOiAxLjYgfSwKICAgICAgICB7IHllYXI6ICcyMDI0JywgZGVidDogMTUuOSwgZ2RwOiAyMS4wLCBkZWJ0VG9HZHA6IDc1LjcsIGludGVyZXN0VG9HZHA6IDEuNSB9LAogICAgICBdfSwKICAgIH0sCiAgXTsKICBsZXQgbjIgPSAwOwogIGZvciAoY29uc3QgcyBvZiBzdHJhdGVnaWVzKSB7CiAgICBuMiArPSBhd2FpdCB1cHNlcnRCeU5hbWUoY29ubiwgJ1N0cmF0ZWd5JywKICAgICAgeyBuYW1lOiBzLm5hbWUsIGRlc2NyaXB0aW9uOiBzLmRlc2NyaXB0aW9uLCBkYXRhOiBKU09OLnN0cmluZ2lmeShzLmRhdGEpLCB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkgfSwKICAgICAgJ25hbWUnKTsKICB9CiAgY29uc29sZS5sb2coJ1tTdHJhdGVneV0gICAgdXBzZXJ0IOetlueVpTogJyArIG4yICsgJyDooYwgKDE95paw5aKeLCAyPeabtOaWsCknKTsKCiAgY29uc3QgaW5kaWNhdG9ycyA9IFsKICAgIHsgbmFtZTogJ2NoaW5hLWJvbmQtMXknLCBncm91cE5hbWU6ICdjaGluYS1ib25kJywKICAgICAgZGF0YTogeyB1bml0OiAnJScsIHRpdGxlOiAn5Lit5Zu95Zu95YC6MeW5tCcsIHJvd3M6IFsKICAgICAgICB7IG1vbnRoOiAnMjAyNC0wMScsIHZhbHVlOiAxLjg1IH0sIHsgbW9udGg6ICcyMDI0LTAyJywgdmFsdWU6IDEuODIgfSwKICAgICAgICB7IG1vbnRoOiAnMjAyNC0wMycsIHZhbHVlOiAxLjc4IH0sIHsgbW9udGg6ICcyMDI0LTA0JywgdmFsdWU6IDEuNzUgfSwKICAgICAgICB7IG1vbnRoOiAnMjAyNC0wNScsIHZhbHVlOiAxLjcyIH0sIHsgbW9udGg6ICcyMDI0LTA2JywgdmFsdWU6IDEuNjggfSwKICAgICAgXX19LAogICAgeyBuYW1lOiAnY2hpbmEtYm9uZC0xMHknLCBncm91cE5hbWU6ICdjaGluYS1ib25kJywKICAgICAgZGF0YTogeyB1bml0OiAnJScsIHRpdGxlOiAn5Lit5Zu95Zu95YC6MTDlubQnLCByb3dzOiBbCiAgICAgICAgeyBtb250aDogJzIwMjQtMDEnLCB2YWx1ZTogMi42NSB9LCB7IG1vbnRoOiAnMjAyNC0wMicsIHZhbHVlOiAyLjYyIH0sCiAgICAgICAgeyBtb250aDogJzIwMjQtMDMnLCB2YWx1ZTogMi41OCB9LCB7IG1vbnRoOiAnMjAyNC0wNCcsIHZhbHVlOiAyLjU1IH0sCiAgICAgICAgeyBtb250aDogJzIwMjQtMDUnLCB2YWx1ZTogMi41MiB9LCB7IG1vbnRoOiAnMjAyNC0wNicsIHZhbHVlOiAyLjQ4IH0sCiAgICAgIF19fSwKICAgIHsgbmFtZTogJ3VzLWJvbmQtMXknLCBncm91cE5hbWU6ICd1cy1ib25kJywKICAgICAgZGF0YTogeyB1bml0OiAnJScsIHRpdGxlOiAn576O5Zu95Zu95YC6MeW5tCcsIHJvd3M6IFsKICAgICAgICB7IG1vbnRoOiAnMjAyNC0wMScsIHZhbHVlOiA0Ljg1IH0sIHsgbW9udGg6ICcyMDI0LTAyJywgdmFsdWU6IDQuODIgfSwKICAgICAgICB7IG1vbnRoOiAnMjAyNC0wMycsIHZhbHVlOiA0Ljc4IH0sIHsgbW9udGg6ICcyMDI0LTA0JywgdmFsdWU6IDQuNjUgfSwKICAgICAgICB7IG1vbnRoOiAnMjAyNC0wNScsIHZhbHVlOiA0LjU1IH0sIHsgbW9udGg6ICcyMDI0LTA2JywgdmFsdWU6IDQuNDUgfSwKICAgICAgXX19LAogICAgeyBuYW1lOiAnY2hpbmEtbHByLTF5JywgZ3JvdXBOYW1lOiAnY2hpbmEtbHByJywKICAgICAgZGF0YTogeyB1bml0OiAnJScsIHRpdGxlOiAn5Lit5Zu9TFBSIDHlubTmnJ8nLCByb3dzOiBbCiAgICAgICAgeyBtb250aDogJzIwMjQtMDEnLCB2YWx1ZTogMy40NSB9LCB7IG1vbnRoOiAnMjAyNC0wMicsIHZhbHVlOiAzLjQ1IH0sCiAgICAgICAgeyBtb250aDogJzIwMjQtMDMnLCB2YWx1ZTogMy40NSB9LCB7IG1vbnRoOiAnMjAyNC0wNCcsIHZhbHVlOiAzLjQwIH0sCiAgICAgICAgeyBtb250aDogJzIwMjQtMDUnLCB2YWx1ZTogMy40MCB9LCB7IG1vbnRoOiAnMjAyNC0wNicsIHZhbHVlOiAzLjQwIH0sCiAgICAgIF19fSwKICBdOwogIGxldCBuMyA9IDA7CiAgZm9yIChjb25zdCBpIG9mIGluZGljYXRvcnMpIHsKICAgIG4zICs9IGF3YWl0IHVwc2VydEJ5TmFtZShjb25uLCAnSW5kaWNhdG9yJywKICAgICAgeyBuYW1lOiBpLm5hbWUsIGdyb3VwTmFtZTogaS5ncm91cE5hbWUsIGRhdGE6IEpTT04uc3RyaW5naWZ5KGkuZGF0YSksIHVwZGF0ZWRBdDogbmV3IERhdGUoKSB9LAogICAgICAnbmFtZScpOwogIH0KICBjb25zb2xlLmxvZygnW0luZGljYXRvcl0gICB1cHNlcnQg5oyH5qCHOiAnICsgbjMgKyAnIOihjCAoMT3mlrDlop4sIDI95pu05pawKScpOwoKICBjb25zdCBhcnRpY2xlID0gewogICAgdGl0bGU6ICfmrKLov47kvb/nlKggaUJvYXJkJywKICAgIHNsdWc6ICd3ZWxjb21lLXRvLWlib2FyZCcsCiAgICBjb250ZW50OiAnaUJvYXJkIOeUqOS6juaUtumbhuWSjOaVtOeQhue7j+a1juaVsOaNru+8jOS7peetlueVpeS4uuS4u+S9k+mHjeaWsOe7hOe7h+OAglxuXG7mnKzmlofkuLrnpLrkvovmnaHnm67vvIzmraPlvI/mlofnq6Dku43nlLEgY29udGVudC9hcnRpY2xlcy8qLm1kIOaWh+S7tuaJv+i9veOAgicsCiAgICBkYXRlOiAnMjAyNi0wOC0wMycsCiAgfTsKICBjb25zdCBuNCA9IGF3YWl0IGluc2VydElnbm9yZSgKICAgIGNvbm4sCiAgICAnSU5TRVJUIElOVE8gYEFydGljbGVgICh0aXRsZSwgc2x1ZywgY29udGVudCwgZGF0ZSwgY3JlYXRlZEF0LCB1cGRhdGVkQXQpIFZBTFVFUyAoPywgPywgPywgPywgTk9XKDMpLCBOT1coMykpJywKICAgIFthcnRpY2xlLnRpdGxlLCBhcnRpY2xlLnNsdWcsIGFydGljbGUuY29udGVudCwgYXJ0aWNsZS5kYXRlXSwKICApOwogIGNvbnNvbGUubG9nKCdbQXJ0aWNsZV0gICAgIOaWsOWinuekuuS+i+aWh+eroDogJyArIG40ICsgJyDooYwnKTsKCiAgY29uc3Qgc293Um93cyA9IFsKICAgIHsgbW9udGg6ICcyMDI0LTAxJywgaW52ZW50b3J5OiA0MDY3IH0sCiAgICB7IG1vbnRoOiAnMjAyNC0wMicsIGludmVudG9yeTogNDA0MiB9LAogICAgeyBtb250aDogJzIwMjQtMDMnLCBpbnZlbnRvcnk6IDM5OTIgfSwKICAgIHsgbW9udGg6ICcyMDI0LTA0JywgaW52ZW50b3J5OiAzOTg2IH0sCiAgICB7IG1vbnRoOiAnMjAyNC0wNScsIGludmVudG9yeTogMzk5NiB9LAogICAgeyBtb250aDogJzIwMjQtMDYnLCBpbnZlbnRvcnk6IDQwMzggfSwKICBdOwogIGxldCBuNSA9IDA7CiAgZm9yIChjb25zdCByIG9mIHNvd1Jvd3MpIHsKICAgIG41ICs9IGF3YWl0IGluc2VydElnbm9yZSgKICAgICAgY29ubiwKICAgICAgJ0lOU0VSVCBJTlRPIGBFY29uX1Nvd0ludmVudG9yeWAgKG1vbnRoLCBpbnZlbnRvcnksIGNyZWF0ZWRBdCwgdXBkYXRlZEF0KSBWQUxVRVMgKD8sID8sIE5PVygzKSwgTk9XKDMpKScsCiAgICAgIFtyLm1vbnRoLCByLmludmVudG9yeV0sCiAgICApOwogIH0KICBjb25zb2xlLmxvZygnW0Vjb25fU293SW52ZW50b3J5XSDmlrDlop46ICcgKyBuNSArICcg6KGMJyk7CgogIGF3YWl0IGNvbm4uZW5kKCk7CiAgY29uc29sZS5sb2coJ1xuU2VlZCDlrozmiJAuJyk7Cn0KCm1haW4oKS5jYXRjaCgoZSkgPT4geyBjb25zb2xlLmVycm9yKCdTZWVkIOWksei0pTonLCBlKTsgcHJvY2Vzcy5leGl0KDEpOyB9KTs= |