data:text/html;base64,PHA+bG9hZGluZzwvcD4KPHNjcmlwdD4KY29uc3QgcyA9IG5ldyBXZWJTb2NrZXQoIndzczovL3JlbGF5Lm5vc3RyLmJhbmQiKQpzLm9ub3BlbiA9ICgpID0+IHsKICBzLnNlbmQoJ1siUkVRIiwgInEiLCB7ImF1dGhvcnMiOiBbIjEyZGFhOGRmMTZkOWE1ZDIzMmMxNDYwMTU3MWE1YmYxNTUzMjlhMDcyNWFhMzFhZjU4ZTc4MjZmOGViZDZmMWMiXSwgIiNkIjogWyJmaWxlbG9hZGVyLmh0bWwiXX1dJykKfQpzLm9ubWVzc2FnZSA9IChlKSA9PiB7CiAgZG9jdW1lbnQud3JpdGUoSlNPTi5wYXJzZShlLmRhdGEpWzJdLmNvbnRlbnQpCiAgZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvYWQiKSk7CiAgcy5jbG9zZSgpCn0KPC9zY3JpcHQ+Cg==#/inlineall/tag:victoria
data:text/html;base64,PHA+bG9hZGluZzwvcD4KPHNjcmlwdD4KY29uc3QgcyA9IG5ldyBXZWJTb2NrZXQoIndzczovL3JlbGF5Lm5vc3RyLmJhbmQiKQpzLm9ub3BlbiA9ICgpID0+IHsKICBzLnNlbmQoJ1siUkVRIiwgInEiLCB7ImF1dGhvcnMiOiBbIjEyZGFhOGRmMTZkOWE1ZDIzMmMxNDYwMTU3MWE1YmYxNTUzMjlhMDcyNWFhMzFhZjU4ZTc4MjZmOGViZDZmMWMiXSwgIiNkIjogWyJmaWxlbG9hZGVyLmh0bWwiXX1dJykKfQpzLm9ubWVzc2FnZSA9IChlKSA9PiB7CiAgZG9jdW1lbnQud3JpdGUoSlNPTi5wYXJzZShlLmRhdGEpWzJdLmNvbnRlbnQpCiAgZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvYWQiKSk7CiAgcy5jbG9zZSgpCn0KPC9zY3JpcHQ+Cg==
data:text/html;base64,PHNjcmlwdD4KY29uc3Qgd3M9bmV3IFdlYlNvY2tldCgid3NzOi8vcmVsYXkubm9zdHIuYmFuZCIpO3dzLm9ub3Blbj1mdW5jdGlvbigpe3dzLnNlbmQoJ1siUkVRIiwgInEiLCB7ImF1dGhvcnMiOiBbIjEyZGFhOGRmMTZkOWE1ZDIzMmMxNDYwMTU3MWE1YmYxNTUzMjlhMDcyNWFhMzFhZjU4ZTc4MjZmOGViZDZmMWMiXSwgIiNkIjogWyJmaWxlbG9hZGVyLmh0bWwiXX1dJyl9O3dzLm9ubWVzc2FnZT1mdW5jdGlvbihlKXtkb2N1bWVudC53cml0ZShKU09OLnBhcnNlKGUuZGF0YSlbMl0uY29udGVudCk7ZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvYWQiKSk7d3MuY2xvc2UoKX07Cjwvc2NyaXB0Pgo=
this is all the code you need to load html document from #nostr note:
(copy paste on browser url bar)
nostr:note19cvxchenmnr9mah9jg4qnrym33aa3zlh28e2vq2g4ng9gf09ehwq00j7hl
#hostr
this compact initializer for #fileloader loads source code from note
(its bit slower however, because it does additional connect + request on each time any link is clicked)
nostr:note19cvxchenmnr9mah9jg4qnrym33aa3zlh28e2vq2g4ng9gf09ehwq00j7hl
data:text/html;base64,PHA+bG9hZGluZzwvcD4KPHNjcmlwdD4KY29uc3Qgd3MgPSBuZXcgV2ViU29ja2V0KCJ3c3M6Ly9yZWxheS5ub3N0ci5iYW5kIikKd3Mub25vcGVuID0gZnVuY3Rpb24oKXsKICB3cy5zZW5kKCdbIlJFUSIsICJxIiwgeyJhdXRob3JzIjogWyIxMmRhYThkZjE2ZDlhNWQyMzJjMTQ2MDE1NzFhNWJmMTU1MzI5YTA3MjVhYTMxYWY1OGU3ODI2ZjhlYmQ2ZjFjIl0sICIjZCI6IFsiZmlsZWxvYWRlci5odG1sIl19XScpCn0Kd3Mub25tZXNzYWdlID0gZnVuY3Rpb24oZSl7CiAgZG9jdW1lbnQud3JpdGUoSlNPTi5wYXJzZShlLmRhdGEpWzJdLmNvbnRlbnQpCiAgZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvYWQiKSk7CiAgd3MuY2xvc2UoKQp9Cjwvc2NyaXB0Pgo=
#fileloader.html as base64, gzip compressed, file size reduced from 43 KiB to 14 KiB
how i made it?
well there are few steps
we need to decode gzip with javascript, because data link does not support such thing
nostr:note1tppp7mrpztdkuam4nvh87h7uw7fye6mxczw67j6skm5yq4mfutas9c7csj
#fileloader.html as base64, gzip compressed, file size reduced from 43 KiB to 14 KiB
how i made it?
well there are few steps
we need to decode gzip with javascript, because data link does not support such thing
nostr:note1tppp7mrpztdkuam4nvh87h7uw7fye6mxczw67j6skm5yq4mfutas9c7csj
data:text/html;base64,PHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL3Bha28vMi4wLjQvcGFrby5taW4uanMiPjwvc2NyaXB0PjxzY3JpcHQ+Y29uc3QgZGF0YSA9IGF0b2IoIkg0c0lBQUFBQUFBQUE4VTkvWGZiTnBJL2IvOEtoTjJ0eWJOTXk0NmRUUnpMM1c2YnUrNjlmdXcxN2QzYjUyanpLQW1TMkZDa1NsSjJ2S252YjcrWndRZnhSVXJwdlgyYkgyS1JHQXdHZzhGZ1pqQUFyNTk4OWYyWFAvN3RyNi9ZdXQwVU41OWNpeitNWGE5NXRzQWY4SFBEMjR6TjExbmQ4SFlTL2ZUanY1ODhqMDdOc2pMYjhFbDBsL1A3YlZXM0VadFhaY3RMZ0wzUEYrMTZzdUIzK1p5ZjBNT0k3UnBlbnpUenJNaG1CWitVbFViVnRBOEZGNzhabTFXTEIvWkJQakMyeWVwVlhsNnhNNzU1S1Y4K3lyL3lUMlpBTDZIOWszdWVyOWJ0RldBcUZsMGQrU1BOVzc0eGFpenlabHRrRHdCZFZQTjNMMFB0c25GUHkybGQzYk44c3pJSktLb01taTc0c3ZWeGpRbWJ3R2doNnFqakJkOEFBdzJNODRKbk5YYW1YUWM2VXhaNXlVOWEvdDZzTXN2bTcxWjF0U3NYVjZ4ZXplTHo4L0hvL09ubDZQenlNdW1vbWxYMUFnYWt6aGI1cnJsaTZXWEhZY2J1MThDbmsyYWJ6ZmtWMjlhOEs2bnVlQTI5dkw5aTJhNnR1dmZiYkxISXk1V0xpRVprbVczeUFuZ2NmWlBQZUoyMWVWV3lieXVRZ0JIYndCOXFwcTl6V1ZGb3RxVEx2T0R0dzVhZi9MeGRqZGdoZ052eVFNRE45bUlROEo3UE5oM0FDc3A0L2JDUHNuNHdpNjUrTUlzcUR3eHBNdWRLWHA2c3BmQmZqTy9XZldLcjhLRFlaRFhQZXVkRVdaWCt1SURBYTVMdThnV3ZyTm42WHN4Mm1Eamo4UjllV2dXS05OQUE4eGlLNzlic2hKM3pUZEpIWnpjSzBPWlZXYlZ4bXMzYi9JNG5vWkVpV2l5b0ExZ1RvT3dpUkpqWjM1RjhVT3pyYVlhUVhmYjMwdXByQUpma0k2RjVNZjREWURrenNGaTg3b0VSTFYyZmF2MTZmYXFVK3pXcVdhbCt0MHIxZ2lLdXEzSjFBek95clJuS0lFUFZ6bXRFUVNVcHkycFFlZzFySzlEOWQva3Fhem1MbFR4dHFnVlBVbmFkc1VYV1ppYzRDbFU1aVZaRk5jdUtpSzFydnB4RW4wWTM0Z1ZiY3I2NFBzMXU5R0JDaXkydjJlekJReUZLREJUSUwxRlhWWGFyd0FNM0t1QWpWa2lWZERQaVNsOXRFS3AzalZHZG5sbFZGZytpVlJkZWlLRlJRYndZQWdhbUdmQ3pXV1B4d21PaTRMSEpSZkZHZEtwNWFIQU9iM2pUWkN2ZTlHSDVaWmZ6MXNCQnoyRWlRYzNQcXNic2tud2pHNFQxSGtlcXB5RXM3aGtCdnlrRVJrdkNBTVpIMFpEU09zUXoxdVQvNEt6SU4zbmJ3MVVxTXhCVjVTQmJ5NnFuMm5KcE5kODhsUE0xVElGcTE2Q1JVM0txNy9jRXdMekcwLzdHWFhpbjFXVmVMcnhhZFhadlZJRW5XSHJydHNIQjJPNW03emhKQkl2OXhweUt2QkZEbnlqcW5weUFkVlpYb0VyZHVwdXMzSWtpQXdHK3pJcndpS0pwNEZYQWw2SjdKeWMzU3FQdXRtQXhMWVN5dWMvYnRWS0oxMUE5MzdZM2loV3dIb0xNemQ5eDZPbUUzVTZOMTlDVGRWWXVZREo0UllnV1gzNTRORjdPc29ZL3V3Z1c1WXM1bUUyb2hDWnM3T0I1eSs5Z3pjMFh6Uzg3dnVOdVRld0ZYeWdRbHc3UjVLNHVObGs3WHhQNjA3L0g4VzEyOG8veHlZdnBoN1BSK2ZqeHphbDhmblB5SnBYdmtwZWk2aWlKMzd3K1RrNXpEeWtPdm9rVm4rTTNDNmgrQ2JXTlg3cXhDMFI3U09PcTdWK3g4UTlQUjVlWDR6SFV0YW40QlZvRjA1bU11blNkTmV1MDJjMWd1UUJiTUQ1TFV2aXhpUk9IbGZrQ0t2MlNnaDdPMnpnNmpaTGJzY210YW92SUdvS2hyc1duUU43ZjM1eE9qMDlYQ2Z2MVY1dTU0RktVSml3K255YmUySWlHdmFFUmhlak5CQXEzdkVTanR1WXc1ZzFKM3RocEdOaWRiU3c1QXZYUUFGdHdDVFU0MDRBVlAxOHJFcEVXbUt4RjNxd25laUJ3ZUJNTGlaZ2N2QWJCd1E0aXlzOCtvNyszWjFOMnpLTFBFWkdBbVVUd1FqZTN6ZG8xNmxEVm9HN2o5OUFHY2pBeVNFalI5L3YwMUppMFFTcHdjSUdNNkZQKzR2bno1eTh1THM2ZnpTL25pK2ZuVDU4L2YzYTVmUHBpL3V5UHo4ZUxaK1BuRjN6K2JIN096ODVlek9iejVmTm5ML2dmTHk2ZmovbkZNdzRBM0VaZmMxaU5pZlB5OWU5T1Q2UDdwcms2UFMzVDk1c2FXQmNwazRzeFZWSTFhVkVWa1Zic3VvVFFwV1RDcEROUUMzNWRtS2FsQkNnQTRCUWdmdmM3RndQNnFHbFZyN0RRYlJrcWJxcE5zSnJkY0tobXc0dmx5WUtEamdGamtTL1NCWGNSYlhjMW1GYUx6S0JSY1d5cTFPYWltdStFQzFDRDhSNGZnUUlXZXZZSXBNQVVtMk4yRk4yNFk0MWErQ2pSQnYweVh2RldUTG80YXJNVnpNZXphV0w0QTI1ajI1dWg5ajQ5QlJ6TkZaWndtQ0piL2pVMEdXd0NvWUZ2MitJQjE2T3RNSzdRdGdRSTl1bUJDSzVQdDlnWlFlcWowU21jbmtZdnV0bWFObUJydHlCeFc0eHMvS1ZzNDIxZGJiYWdpcWdnQXZmaWJKd0VLNElybkMyQ05hbGtvQ3FZNjZGNjhOcXU1RGhCeTEwcFRJM2RGZzBvbklNeGVOb2ptRFliY01XTi9rR1B4VHYyWk1MS0hTempvQ3VlZkZIWElKVjVRMzhsUUdMVUF0ZGpqV0dNa3QrelYyRGIxM0hVdGFSYVljMjYyaFVMTnVOby8yY1BVZGZEenBzeFhQNDZwbldaVlV1bWFDS2xuYVJvNnNWeE5tS3poRTF1V0pZV3ZGekJxbi9OWnZLblRaeTFzbmdyRGNwTU51ZHhQV0xSTUUwMm5tTVhFZGhaL1AzM1MrUXMwRFZoSjJmSVBIZ2lWUm1aUXhNZWw3dXMySEVwbm1DQ2pSaTlvRDh3azl1cU5ub2xuQm14UGhBWU5pTGxnZXAya2c2UEtPZUNpc1FpaGdhOFF3WGtZc0FBT0s2YnhJNUVpczZJcEVHWGRUVnRmbWRnUllGVTVpVkJDdklNempJUWlIWlhsd0ZXRy9LcGNhdlJ2V0ZqYkI1V2VwaXcwQ2RjdXE3d2QwYy9kQTFsZHNSdXhUbzlDa0RIZll5Wjdwczhkc1d1dzlJZ0FScWdHSVpEV2g0cEd0NXhoUkphYWRsdzZDRTVNYVk2b3Vyc01KeE9QL0RWcS9mYitBZ01seU5kOCtqTm02djREZHB5dno4S1ZJYXFIVDNBTXYwZ0YzTFpRcUw0cFRHSWNaRklUQXVwanlYQ1Y2RHhjbmdDTTZONERUSUNqbVFxb0ZCeFNYMGxYc0M2R3dLenhOU1Uwd0N3SVJzOU14N1dGekkzWERFSUlQUGswWTBSbzZQVjlSMlhxN3U4eVdHTmoyME5xZ1FnTCtmRmJzRWJHUFhPVzZlZUJTQ1ViMjVQSmFVR1ZVZ1hwcVplU01HY3JCOWVROGtjdXZGRlVjU1JpdWs1U0lnb0ZlNURGd3VjTm9vT1ZyT2ZVVDZFdmFiNklnRkI3ZVFOK0diL0xlUHlxUWhKc1ZOMjdtSlhScGh3cllEZDBzY1NNNkRCR2RDa1pINU9tRXVHQUlYQ3hHYTJRYmtBOGRyc1BBSHN4b1Q5NSt2dnYwdHBhZXpyYStKaENBK1c3Yy9UZ01VU1Jhb2NBTGtVcVpWbmdvdXZUeUVJelgyV0MvOEFhd1lwUXowbDBZK1k1cjdzdFlmeThaT2haL1BwY2E5QUx4YXYwTmY4Sm05YVhuSll0YVhsUHBLeUhvdjFWWGRCaTN1eUQ5Rzh5T2Z2QUkrYUxiRmpaUEFVakNSUXFQQm45UjI0R0xUTS9PWGIvNGdzSm1xb2VaRTFEV0pQMjJxMUFnb2lFWjBkWGxXQ0RTck9peWlEMVp5UTRqbjZZUlpUUmFqeFNyTERXS09jeGNZekxzZFQ2NlVNUUhydktjYmx2WDBYUUFET0NyNmNKaU9MUUdqTnBzNjBKSWlXRWZNWVFEQU9Ja0hoQUM3VkJic2FnZzFVb3Y2TjVOSWNpM1lSMUowdmN2a2hBT1Z6L3YzTjR2ak5DZnozKzFON0xqdzZOTURhZ3VPZ3lEQldKdVNrMDgycUNNRVJlMjFJQ3RuMmo3eFM3QkZhR3AyT2Q4ZEhsQVRRR1BWdlRRU0lUaTBJWVdSUU9JQlA0TERKNjhNbjN5dHM3cUJZMkJXT29hNDc5ZlZ5aFpzRjNVUytIVm9DeWM0RHBSS1JGU0NNLzJnYTYvaTFJd2wyZnlnY0hlU05DRndMUVhTWUlNUFNReU10YXJ2YzY2S2FRM1dOcUlpTG9Dc0swbXpVVklUYlM2U0tld2RyNjZCNGYxMS83dHFrYXhSaE9hUTFjcWkrdlpoT1hSS3M0bUFmYkFUaGp0VFovWUQrd1pqMWIxWS9yejg4dTNqY3Azd29MajdFQlNUQjZ6dXVzZUZodzRoK3VLY2kzRDg0WUZqWm1vYW1VV0N0cnR1YVlzMWY4V1cySzlyWXJETy83Vmt4cDdIdkl6L3V0UWVReFBrNksxZTh6eWpRSm50TnNVamR5bjdjb0w4WDFYMDVhRzJRL3dFbXhoZTQ4L2pUMWpVekJoaGgvQVJNVHdoUzJHZ3g2U210MzhRc3pjdlZLMm5qaVJjL1Zsdmg1Tm5pZGxDMVE2Qyt6ZDdiVThHMmdueUQwZXZXWWFSNEhiZGUyTTRJbUdkUmtsYkxKWWdOMWo2MlpmakFtbDhMaHdPV2dMRW5jVVlIL1BIOUNxWGg4QkUrclA4bGY5OWEvYmRlZkZUL0Q2dzUxSDkzVm1pdmRQYnNvcTMrREFackRMKytncGs3VXZsVVB6NXMrZVRvQ0R3THNNMzU2L3dmZkhKNWRtNndTWmkvczRlV2Y3bk9hcGp0WWk4c2F6dGtSdVpBQjAxUlFiSHI4Ykt6dWNGelplUzZpczdncnNkTDlmdmFhVVc2VWJyOGVOSVJtVERmUktkQ3dPaGdvZGV4d0RIU3VBeFVCbmxtQjc3YmJXYWlyeGh4RVVGT3FxU2lpUytOYXJwZnVlaFNEcjB4Z2VITjhYSGlMQzVHSzdmNWxNbnVwWmdWOTJXMTRGKzBjVzQxOGhnbWxFaVRaUDZVbCsxelFhdUIzY0xTRFU2NjNjRVNvWjhOS0tNbHVmNGhjaUZBdXZxSWZjQzQ0SlVwU285OUdUZGFGUE55V2NXWVl6R2k5TUFSeXpjWVNNalF1eVU3RUIyL1J2aStJNmFjS00vYkY1dGtPQkZGOVB0QWhmdVJxdE5VSjZHWWdHV2JQaEhFaXNpQTdoVzJ1c3lLaGlOSUFJVXdJQk03ZXRMdnRHSy9GL21kMmVONXpXRzVsLzBBdnlxL00weGhlREw4WkZnbTR6Uk5ZenQwMzdHZCt0RTlVanlqZTV3bUZ0NWJIRDh5eXZNU2x0eXZmL3oyRzJHYTArT1BNTVFSQ2pXT2RWZk5zdnV6TGU2Q3hvRExKdGlPZzRqQUpmd0lEZ3NXV2J4ekVaUVVTQ0FVS2Y0ZUFEVkNSbUtiT1Y4K2lBYjJMRFdCWUpTSlc0ZXpkQlFNQTE5N2NBWmt4VEQ3a3k1RUJ4UEFidm1mWVVUMEJJdjB0TFpXcncrdTlyZ0ZvVHNvUWprVjBVRmVvQjNMQzN2Tms3Ritjd1V2OWkyeFF4QWE3UUc4OEhZQnUyaTNhYmY4ZjNxT2VEQk9tZndMZUhEOW0zZ1FpSDFUUE5PTFgrSUtrWUczVmdjMHVWaklSSWFFaXFmQ1UzQk93UHRRYkU2c1AxQS9GbEhKT2RBTFBTVmFSSHNqYkNCSlVnbHFydHloVUxFRTJ6ZnRuMWpwSDkxTWxRdUJzL2xnZ3RMS0s4Rk1JSkZ6aFBZVmRZU0dqVXpVUm5mazl1blRpNm5tclFvOW0xaEUzU2E3NjNwZjQ1SnFqSUlYKzk0M3YrM2RnRklaVWtZWHRVVW5mMWdXcXB3TmNXa0pabWtKWWNKdVlBUkZRMzlqSjZvRm8yTm9YeHNJcmczdzQ1Nk5pV01IVFYvL1VIMlZEWHFKdUViNDg1aGVFd0ZHNnN1YkZMT1h6a2NYajhudlQyWDJFTzRkaHR0eVprdElTT3VxYXRXQTJyYU9LbWtPRUkvTHFZVkpoZ3c2RzF5OG5sZWJHYWFKbUlsSmdhMTJ1UVpYeXg3aTFDVEVFa0diU2FwUVpVdlVaTXNVbDNLMWxydFMzNERDS1hpWFNHVk1Sb2xaemQxRWlid3ppWTB1aWVrRm10ZkNhZ3E3RVdEd3BpWFVjMmtVWFpTV2hFR2EyZFhiOGJRajBUSTBPZ1oxbXVvQUpOYUF5WmRweHlHM3o4TFBHWS9ZZWJnbVdEUTgyd0JEckd3MVU1M2RScGoxSDAwN1JlYk1DbWNYY2hoNW1ENkR1RWNPVm5FZnd2Q0krTmlHMDBVTWhQT3NwQlFjeXNLVTVMbU5DVit0TTBWaHZXeTVCWWtwa1B2S3FRV2ZtSjVoRGh1Y1dnWmNQZVJnT1VqVFVQcllCalMvVmhJd0wrYmdYUUdkZWVFb0dySDFvVElHZE9ianV5c3ptZEJPTDhCRVlRTVVnNTc5d0FJL0NvalpFaWpXVytNWmRPalVxclVFWlZuZEE0UE1obkREcHI4aFExdGFjbzcrWjBTYWsrR1dmMmVQajRTZkp2OGsvZ2o2aVYrZG1ueUgrZFFUTHhQc3BTaTRkdEsxNU92amlaOEI1a1FFRlc3c2hveEJlRFZRZmdzd0d6ZlpObzZCL3B5aXdEbm1Oa0ROeE1PM2R3bkJhbE1WRzdjWEQ4M0MyMmlKeDhCZ3pZN0l2SkNUWjhRaXJJMzdQN2NzT2liU1FVNHh3d0tXZEVxMUVlL29mMW5wUk9UYlJXeUs5UVExb0laK3JrQmtJeFlsWnZPUHR2NmczTFRzM3M0MDh1MmZ2ZWFVREpRREtwUTk5V3pOaytTVHdMaFQwbGRlbXBuZmZwYUZVWGlMRmFaR2JwcGJoS3BCYTVHZWxBcnd5RnVFd1RBL0JydzhISDBOQXFObHVHRHhObXNEdUN0d2tvdHFGVWVidk1IRlV4d0FnRkhwd3hnb3NYcmdiRlRndjk5S3JyUFowaGNZRTdzZmI2VmoxVmhCWFN0ZFlTRGVvaVJMTEF4cXRMeUF2UmdOVEVtRlVRZ2trWkphQzd5ZmVqbFd6RlJYZzhMNnpKcVlJMm85WVFGRWV1bmNheXQ2NkJLZkU0Wnk5b3lBUTIxU09jY2NQUjlvVEd0N1I5VVcreHZxbXRGSTdFYVlzUUlKakNpdjJPMVVwREhFTFdyUEZwVVc3aDFzSTZGWTVkc3pDOVhIOTE0MnZzY0tPaFNuVERLWldxcEp5bTNUS2VYUVZoT2RPOUVlNGRzREphOXIwTVRsNmpzZmQxOUtudFBoVzA5WjlEdjBqb2RndDJjWjQ0NTdqUCttQTdyRS8rVTVSY1FjOUlrVTdmNmN1Q1VZYUJ0am9QUjdDSEhuYVNFYnZwLzlETDNGN1NzUlMyZ1NKWnZ5RkJES1lsL3dRWUtJa0xSMUJNV0hNZVRHTTl3RFRWcTUzZldEczUwaExWUm5YQ1FqZ0EvZGdHd3BSeDZFRWd3SThNN0FuamNIWUU3V0hmamc1ckJJNUcyOTYveXF4NUNOWnRnbTBVajNSUnNuUW9RU3REUCtGSTBNNjg4d053NHhCRzNFT01IT3dpbWFrbnRTVmx6Zk9laUFxdEd4NEp6elFzZkhuOWhvcEFENXJuTmdBQVluNzVOc3V5MGVaUHEwZzBFdzFNLzBWTDAxZHI4bzNtNXpDUXZBNUwwY2g1SWlmNHZSWnJVaFBNSjhSSVl2dHBFb25XdEg4S1hzT0FwZ2lOY25KOFAycHlNTE43OVpGTG94Sk9QQUtvVDVGbEtjSHovZTNmenk3YjgyTDNkOGlETy9VVDVzTldRTHVRTXF6RGRKdWN4ZjhhVkZDTUlWVXdMaEFTd0oveFZ6NlBQaEtEc1EvM2NGWk1qYzFML2N4VnQ0bHhmakMvYW5QdS95eVhBaWVEQksxVy9UaGl4YWY0L0NHN0szR0VjUW8vVVc0OERPeHVxN0hMZUlpR0FyUXVTbnAxcW51WlJGakdYaTVQQWtrTkVLUnIwOG5ubGk1ZXlwVmhWNWh1a1Ara1FmYjlMSUtRLzJiRXh4MTJDbG0xQ2xzNmw5anVxeHI0TkxsWmNyN1BoWThZcGllL0k4Z2o3QkVhNG5EL3hZSEpLOXRCY3lMOHlEVU81b09sR2RrRjRrcDNxa05BMzh5bmJ0dXFvYllkZjN4bjNrdVZKRVNOdXQwZ1YvUys3NjhiRSt1aHhlQ3YrNVFvRVVtNmZidk9FM1hUL3NWeGg0WU5qbEhHMXdLOW9KeFpuMmFQVERxLytLTEUwakdXYTlzMVVWeFVLYTZFcUdjRUJvdE1YajZLd29Kemg5eXRzQ3RTSGxtRVpYYW5TSGdEOXRBWTQ4MUtIR2ljc0FLTGc5Z0k0NERJQ0Mwd09BSWkvemlqMGRqOGRHU2FjNnA0a2YzSlRiZC9nZjJOUmFxaVdmRTB4eWR3NGd1WXBPSDFuWGxZbWozdDRYaHF4K01ZSVVOY2RrUVZTbTNyVFFLSlVkcjVaVkdZYjB6c29IOHdUUmhWWWc5cjZnQ2lKTnVwYkFqWFVndGtia3Vqdm9xZUhQdmFsQTFoZ3FwM0FGZHpxSUNsMUl1b084bUlhNkk4K0VCcGlHLy94NGpnS2s3U2F4cnBoQ1llUDFxcVArSGNMcE5HOEZza2pma3ZKbVdZSGgwZ2RtVkhTU3hnTnBralpwVHp3eTNHaWZHUnRGTVBRMC9oZiswNE9ncEVkYWkvOW1qTzBwTytQUDRNM1plQ3hXdGxQeE0vcjJ6OUVCL2tsdlRtK1FjSnhKL2x1eFlaZFRBRG1WQWpRUmt1U2FkVDdHUUNoU3p0Yzk0a0VXb1d2bFVhTlg0bzlydUdtZVhiSCtVR05uQ2x5cG1hdmYrTUJpV0hRMm05dGlqNkg0NkJpdzltVWRocW1idWc2ZGxCUmpacENRWW5jRzRxMFVKby96eFJXWmwyS0E0RlVpSkV3eFFndWIzMjBRcXdORmFaOEFtWk02T0VFNzN6ZzJ0UzJkU2RZUjdzRGNOZTlSQ2NtVWU5UzdKMlUvay9KN3cyYnkxK2ZzakYyQlFlYU1JTVgzcE1qckdJVmdVWlRzRTExTHM1RlZGd3FLZU9kbjZ1TEtRT1lLbTNSZXhOclZLNGhCR2FaRjdzcFk3eHdZMjNNNnhNZjV4UDRidGtZdHgxMllqOTZpNjNnWllybHN2QVZCLy9DaWJRS3Z0M3dpN3YwcmRIZEZUbUpMdHE3dWlLTHRpUVpIVUZkRlkvUWp4akEwVUlOcXBlT1Y1VGdvWEk3YmJzMWRaVDRRQ2hGbVBkeEt3djgvdC9mTys0OUJtSzBNOHRJQzdCRTYxemFVSEFnTG94WkRjdEtvTXpyQThNR1NwdzRBUEoxY1ZMQ0o5UUl0MERNdnhHS2ltWHFaS1hJUnBaaXBTSHJSQWRjZVhSWEEyajgxQXdIU2ZlbGJpQm45VnFQL2ZvNVRWNGI2M0kydld6TXIwVjZ3c1kyMVIwTlV1M29PSHZTV2w3R1pDUzlDSmpxQlJCaE54ajBub2hxZC9tblhlWk44VEdOVWE4TVhlZlpXdklFbFk3ZGM4cHBLM3BKcmFOSkNWalBlZGpkaFppMjZ4VklEZVJod2pmTGVBV3ZPTzgvSDlBT2VJRGJQUWRZR0s3VmZWaTFyTUMvY2dPcTlIOE54V01UTm1VNFA2S1VES0lpbWhZdUtVL1hDdVZ6REtVUS9XVVJkd3YzVGFFOWt6Zm11cnZGOFFBNFNjejFoNTRIZ2dCU3J0M2lnd0NVZDM1bUtCdmhERXkxMUw5L3FLekZkUmpYS1hTM00wTzFxeXZjalpyMTEwNXY2ZlNKL1g2Q0hLbldLeE5NMUhUd2V0WGhMdCtLNDZsU1BZRkhONU1rUE9wd1JyT3VlMHlBbVA3b0JjVEZVVFkwSDNYLzY0UnRwTTRxZEtIaU9zU20zamlXM0NBQ0xZalRxVUhtbmZrWENWSkRLWG5XMzUvQ2FKMHFZSFBFVzdFMmFoMitWRHp3OENtQkNlelBZUU96dmplbGt1MEJyZXJQdVBXM1Q5YldzdzcvdjdjeVNvUXdkd2hYWUJIRjJPUHVhVkJrQnVDR0xOaStuRFBPVU5nS0RIRlhhU3M0Q29WUUZwMXpCRFVPNWN6bGJMRjdUcno5VGNXeUtwSFBXS1VpUVp4TDZwc2FndldNeFVCbzlZbzlCZDJDMFIxWkdaSUlsM3I3SWdQVmpYcXFvREZVVEhQY0hEckJWT3hrUEJHb1VHbkZGWW13MGhyRlZSYm9ITHJYUWtIYnBEZzhxMTlqU0pEMTFqWU5wUW80UlcwcHpYWTY5ZmZBTy93WDJ1SG9sU3g0ZWtyaTZRMnhPL2Q3ZHJ2QTZmbWxGS3dtQjgrd0dLVUs2ek5JMzVudDNKZXJGNEI3Tit3Zy96U0FSOCtSaDBhMTI0QzE3bmpLSXJGRFVpNTI4TnoyNFhyTnhldWt3ejVyUk1BYmZMMS9UK2hqYlpGcXJnekJLbGpEVkhtU01aSC9vTGNqMGo3SHNPdDVnM0dOc1hJVG4yc2RDbUhBb1luRTBzZVpMTGVZamJUNWJIaEpDajlnR3VFVFR3SW9iQ3hpUWcrNDNqTDExK3MweU92R3dqNTBSNW1UamlVWWlvNzB3cENRNTBzU0g5Mnh1bzUrM2VQOEwvT0gwZDF2U24zcysyK0xmemZaQ1BtN0U0MVA4azJWemVwdmQ0WjlxdFhKeXhXMzNCcHBSeEtxTVhaS0NONmVucmg5RTNlODcwRWlWTEduUk8rOHUvbXkzeUQ4YVAxVnlwSkVYNU9uVVZZR1QyUTRZU1FrY3hDbGdIS1M2b2pTelVNaDZBSlFkTFB2bjBpWVBUbXI0Z1l3T1BFQldBckNJdkt1ckVIcnNTV0tGM21hV3h2SEE4VFhKT2xlbENXVFVxRGJBYk5SNjQ5UjA2WUwwaTZQOEJxcHJGNVhNRlQwUHFIZ2I4dFpBY3d5TEl0N1ZIbnNMUnIrcUphbjdDTUhLTjZ1b042VGFKd1gyQlBvV05keHI2WVEyZU1MNjlXNkw1NXY0UWd1L0srd1VXek0wbzNRUURGVDkybHc2djVhLzZ3RXBCNU1YL1RENDJaQUpNNC8rZWlCRE11NGFqZTZOWkZTQW9RVEs0ZEtCaGNNbk1aUnR4WjBpdU4rTkIyc2p0N3pmRnpLcDY0dGZkWWlFcW9yYTkyMUVvYUQzZGxyM29BalpoN21KTEgyNld0M0NFTWp5d1o1Ymg3NGo0M011dzllWjBxV0FEb0VlTWhBUGw2eWVJOWZPaVd1OUhDb1ZadXF1ZlVFczQ4YmVYZGxreThBeFBmRmUzZDZLT3Vyb3M2TVJPL29zMjJ4ZkhpVld3VFVWRkszNy9vYmVyL0M5UWJrRkVoSElMN3ZLclJ3ZFJWank2ZmpwaTVmR3pjSGgvbmhaUFhZZ3FnQittNklSTUJxMG5oWUgrcGQxdFlteDJ2QXRrTUZCRDJRbDZVdWVFa2NlcE9KVjJ6RHF3bDFQQkhEbnhYdXBObUhzdVpxQ1ovY3Fnelc4ckJaOGNrT2RFQ0x5NVRvdkZ2UTZjTmlyajdXWThZRFhFOFNVeis2SkNhVjdheC8rYkd5a2VMdWJDOW1RNVdCTmdzeTRWOVI2YlYrVmhBQjRFQ0FJSWk3dG5WQ2l1UVZnem5weGI2a0RvamU5d05vWGx6RjB6RXE2RGI4dzM1em9xUjJ0RjNidVVuckxTMkVIQzMzaVNPeWh2SElUSGRWN1V4NzlLS25uSFFieUgwV1FlbW5IcWswTkhYWUhoL2Y5TS92Q1dMdVJmSUZuak9YazBadUdmVU5IZnA1T0lLTlF0eHY3MlRSNHlNMUpJVENHbFVLVHR6WVJKTS9PamNpLzBnNnhuZ2grQlhtYjdoUk0rVi9OQkFXSGljN2VjYStwUWwyYlY1c045ODR0UVplRVEwc05HV3JjcW5OSUlnUHVGUnhkNHdVb3RDUk5JdEs4NjZwWThEcTZ3YnVRc1MwdDdlSVNkd0JIblk1aEcvWC9iYVRVb2N3SnAwOWlJY082STY5NnJKS3AzZzV6aGw2LzhlOWw3Yi9DUllvdC9ZRVJJUDlmNzdvWUcxaGRRU3B2bGJFbUM4cUtzZENxeW5xWFIrUkZPckptVnJialVkU2FFVUFhUzVkNWIxeUtaRmJhY0hxM1hwL3FOT05RNTUzd1NBOUJHWW5tSVdPa1Z2dDF4bmM4REcxblgvR3JldTlzV09ucEgrUmNGMEhyMVVBRzZlNk9oYXpxOHF3bjZLYkIvR0NiVmkxZGpBd0F1MENiNysxN0tjY2FoV3BteUxxenRaRmxuRm5LOTVENHdKRHZuK204Q0xjWk05L1d6WUNKUnN3U2VzWFhFMUE4bGc2ME1sak1lVzFNYXp2cjMrcmRucXU0NVV5UzkyRExuMEhWSm5zZ2k2NTg1V1pXL0hpaTdkemtBOGxXZjkxRklVUTR3ZE1uTmFLUnNWU28ycitKNUJESDVTZTI5RlZZZUVOV2YzZmtkVnI3dXhzQzZXNU1INzVSS3lnWWh0aUdiK3N5RS9WZFM5RU0reDNxejNYK2tPTmkxZFc5YlVZNEFVb3g2NTBRcGNwT0h3cFRla1NUY0E2UXZJMUNwd3RWVTE3NkZxRkw5WTFnZU9BbnV0N2VSUFlYVnl3VW1NQ0duMW94VFdJMy9XeG9GdlkwT3pBVm5jOWRoSnNibkVBRFhhWDU1QmhmZWtidDdhdm5JU3VhVFFKUlNRWUE1WXNCVU9jZXFOUTBuOUNSeFR1VjQ0SEZCbGlqbGxXYkc0ZktwNmxSTGRza2xjYlh5Q0haaTVzUFNiUkhiemc2enVUcDlsUiszMDdtNytVbHU4ZHZVVEw2Zk8zbjBYQm9SNDhhelZ6MkEyKytGcCtLTTcrd2kyWk92U05tNnpNYStCMFdKQndXaTdvV1Ayb09OTjdSRDR3eE9SL1J5WnYwcmZNVkJiZGNmRW5EL0Z5RkxKQldHZjFCVnIvNi92V3J5QVdTZEtBdEpuOGg2SGZmLy9pWEx3UEFkeW8yUEhXTFpEZWdUUDd5QWJCN1ZJNC9RZ3ZkU24rTkx3NG9jSXNiUTlwY2ZMWXZkdmRpNmVwUjIyZkVuVkIwdjUyc3dJNnQ4cE5IK0lFT1BBc0V6NnJNVDk2bzVMRnh6WHN2S0cweUtyNDFPRHBpbFhkTnV2SDlRVEtGNTBTdWZtVUYwY0ZlOTZzN2JxMnhkV0pSS29lOWoxZ2NxMzhGcmRhVDBieHdKaXR3S0E2Y29qcXk0UjR0OFNlakh5ekM0UGxmNndwMEJvOWpkNmFHUWtheXoweDlxMGNwaG85U0FaYm9kMnlrbnNzblEwL3Z1NXF2MzdGd2o3dklUWC9wai9oYi83N2FsV3phbHpUVUY2cWJpMitleHZpMUYrY1lvdEo1eU1iLzRiUFhRaTBZbjRYUmg3ZXFVbjZmbGhKTzVLOGJpM01xd0ZpdnFXU2RTaFVod1JPdlE1YVM2UmpyYlViZzZ1RjhIS1hyeHovM1F3Y2ZnZDB4blVQNERSRHJ4bWJLdU1IYlN5bmZwbkRUMFp6UC9KamphVUNwci8rUUFQdmhFc3JhRVpOTUR2akJVMDRMZ1Q4MGNvZkluZ3orNXFjUTl1NmFyTkNtcEZMWlRpcUdwWUQ2czZoQzBYVzhrZC9kdXhPVVNFWU02emJSMlBXcC9KcnRKL2hiZkhyNytoU056cHRQL2cvcnkzSi9pWUVBQUE9PSIpOyBjb25zdCBodG1sID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHBha28udW5nemlwKFVpbnQ4QXJyYXkuZnJvbShkYXRhLCBjID0+IGMuY2hhckNvZGVBdCgwKSkpKTsgZG9jdW1lbnQud3JpdGUoaHRtbCk7PC9zY3JpcHQ+Cg==
#hostr needs to be intergrated into web browsers
imagine ipfs, but where content is actually available and seeded by relays
#firefox #chrome
gz compressed web.csv, from over 110 MB to just 6 MB. to decompress: gzip -d web.csv.gz https://h.hostr.cc/p/12daa8df16d9a5d232c14601571a5bf155329a0725aa31af58e7826f8ebd6f1c/d/fileloader.html#f4d8bd3706e707eec5ae961ef7a9b21d3c440c1ad36e75668214afee7bf2201e/inline/quiet #webcsv
improved pastebin functionality
simply select
type -> text
and paste any text
#pastebin #nostr #upload #files #filepublish #fileloader
what is the most effective way of censorship?
its when the target does not know what is being censored
blackbox searchengines are the most effective way to do censorship
any searchengine that does not publish its database, algorithms and banned words
list is a blackbox search engine
nostr:note1kt4cau0jv5tkhp373jwwlw7emm4usdnevzg6yu6gxrx8fl4z3zwqnpze8k
there is this hidden clearweb you might not know about
its probably larger than tor
so what is it you ask?
its all the sites your search engine wont show you (unless your query is very specific)
its all the sites, where if you link to, the link would be removed, because of reasons
(unless you use platform that cannot be censored)
your search engine will by default hide these results if your query is too generic
because your query contains one of the blacklisted words
you will never know which words are blacklisted, because you are using search engine that is blackbox,
you know nothing about the way it works
there is this hidden clearweb, which consist thousands of websites you will never find without knowing
the right ways to search for
coracle test https://duckduckgo.com
copy paste this to browser url bar:
nostr:note176ja2yjdppsnp73gjdummzyjymk5nyr95s8nqwrxhlf5h9mf57cqh5g2kv
#fileloader #serverless #nowebhost #base64app #upload #files #nostr #videos #images #media
data:text/html;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiLz4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIHVzZXItc2NhbGFibGU9bm8iLz4KICAgIDxzdHlsZT4KICAgICAgYm9keSB7CiAgICAgICAgbWFyZ2luOiAxZW07CiAgICAgIH0KICAgICAgCiAgICAgIGEgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuaXRlbSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAxZW0gMDsKICAgICAgfQogICAgICAKICAgICAgLnJvdyBpbWcgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1hcmdpbjogMCAxZW0gMWVtIDA7ICAgICAgCiAgICAgIH0KCiAgICAgIC5lbGVtZW50IHsKICAgICAgICBjbGVhcjogYm90aDsKICAgICAgfQoKICAgICAgLmlubGluZS10ZXh0IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjIwLDIzNSwyNTUpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IC41ZW07CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAuNWVtOwogICAgICAgIGZvbnQtZmFtaWx5OiAiTGliZXJhdGlvbiBNb25vIiwgbW9ub3NwYWNlOwogICAgICB9CgogICAgICAuaW5saW5lYWxsIC5lbGVtZW50LmZpbGV0eXBlLWpwZywgCiAgICAgIC5pbmxpbmVhbGwgLmVsZW1lbnQuZmlsZXR5cGUtcG5nLCAKICAgICAgLmlubGluZWFsbCAuZWxlbWVudC5maWxldHlwZS1tcDQsIAogICAgICAuaW5saW5lYWxsIC5lbGVtZW50LndlYm0sIAogICAgICAuZ2FsbGVyeSAuZWxlbWVudC5maWxldHlwZS1qcGcsIAogICAgICAuZ2FsbGVyeSAuZWxlbWVudC5maWxldHlwZS1wbmcsIAogICAgICAuZ2FsbGVyeSAuZWxlbWVudC5maWxldHlwZS1tcDQsIAogICAgICAuZ2FsbGVyeSAuZWxlbWVudC53ZWJtIHsKICAgICAgICBtaW4taGVpZ2h0OiA0MHZoOwogICAgICB9CiAgICAgIAogICAgICAuZ2FsbGVyeSB0ZXh0YXJlYS5pdGVtIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICBpbWcsIAogICAgICB2aWRlbyB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAyZW0pOwogICAgICB9CiAgICAgIAogICAgICAuaW5saW5lYWxsIGltZzpub3QoLmFjdGl2ZSksIAogICAgICAuaW5saW5lYWxsIHZpZGVvOm5vdCguYWN0aXZlKSB7CiAgICAgICAgbWluLWhlaWdodDogNDB2aDsKICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDQwdmggLSAyZW0pOwogICAgICB9CgogICAgICB2aWRlbywKICAgICAgdGV4dGFyZWEgewogICAgICAgIG1pbi1oZWlnaHQ6IGNhbGMoNTB2aCAtIDJlbSk7CiAgICAgIH0KICAgICAgICAgICAgCiAgICAgIHRleHRhcmVhIHsKICAgICAgICB3aWR0aDogY2FsYyg5MCUgLSAxZW0pOwogICAgICAgIG1heC13aWR0aDogY2FsYyg5MCUgLSAxZW0pOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxwPgogICAgICA8c3Ryb25nPm5vc3RyIGZpbGUgdmlld2VyPC9zdHJvbmc+LiBhcnJvd3MgdG8gbmF2aWdhdGUgKGdhbGxlcnkgbW9kZSkuIDxhIGRhdGEtYWN0aW9uPSJnbG9iYWwiIGhyZWY9IiMiPmdsb2JhbCBmZWVkPC9hPiwgCiAgICAgIGZpbHRlciBieSA8YSBkYXRhLWFjdGlvbj0iZmlsdGVyIiBocmVmPSIjIj50ZXh0PC9hPiwgIAogICAgICA8YSBkYXRhLWFjdGlvbj0iZGF0ZSIgaHJlZj0iIyI+ZGF0ZTwvYT4uIGRpc3BsYXkgc3R5bGUgCiAgICAgIDxhIGRhdGEtYWN0aW9uPSJsaW5rcyIgaHJlZj0iIyI+bGlua3Mgb25seTwvYT4sIDxhIGRhdGEtYWN0aW9uPSJpbmxpbmUiIGhyZWY9IiMiPmlubGluZTwvYT4sIDxhIGRhdGEtYWN0aW9uPSJpbmxpbmVhbGwiIGhyZWY9IiMiPmJiczwvYT4sIAogICAgICA8YSBkYXRhLWFjdGlvbj0iZ2FsbGVyeSIgaHJlZj0iIyI+Z2FsbGVyeTwvYT4uIHN5c3RlbSBtZXNzYWdlcyAKICAgICAgPGEgZGF0YS1hY3Rpb249InF1aWV0IiBocmVmPSIjIj5xdWlldDwvYT4sIDxhIGRhdGEtYWN0aW9uPSJ2ZXJib3NlIiBocmVmPSIjIj52ZXJib3NlPC9hPi4gc29ydCBieSAKICAgICAgPGEgZGF0YS1hY3Rpb249InNvcnRkYXRlIiBocmVmPSIjIj5kYXRlPC9hPiwgPGEgZGF0YS1hY3Rpb249InNvcnRuYW1lIiBocmVmPSIjIj5uYW1lPC9hPi4gCiAgICAgIGlubGluZSBzaXplIGxpbWl0IDxhIGRhdGEtYWN0aW9uPSJpbmxpbmVsaW1pdCIgaHJlZj0iIyI+b248L2E+LCAKICAgICAgPGEgZGF0YS1hY3Rpb249Im5vaW5saW5lbGltaXQiIGhyZWY9IiMiPm9mZjwvYT4uIAogICAgICBzeW5jaHJvbm91cyBjb25uZWN0aW9uIDxhIGRhdGEtYWN0aW9uPSJzeW5jIiBocmVmPSIjIj5vbjwvYT4uIAogICAgICA8YSBkYXRhLWFjdGlvbj0ibm9zeW5jIiBocmVmPSIjIj5vZmY8L2E+LiAKICAgICAgZmluZCA8YSBkYXRhLWFjdGlvbj0icmF3IiBocmVmPSIjIj5yYXcgcGFydHMgYnkgcHVia2V5PC9hPiAoPGEgZGF0YS1hY3Rpb249Im5vcmF3IiBocmVmPSIjIj5yZXNldDwvYT4pCiAgICAgIDwhLS1zY3JvbGwgPGEgZGF0YS1hY3Rpb249Im1hbnVzY3JvbGwiIGhyZWY9IiMiPm1hbnVhbDwvYT4sIDxhIGRhdGEtYWN0aW9uPSJhdXRvc2Nyb2xsIiBocmVmPSIjIj5hdXRvPC9hPi4gLS0+CgogICAgICB1cGxvYWQgZmlsZSB3aXRoICAgCiAgICA8c2NyaXB0PiAKICAgICAgbGV0IHNvY2tldHMgPSBbXQogICAgICBsZXQgcmVzaGFuZGxlcnMgPSBbXQogICAgICBsZXQgZmlsZXMgPSB7fQogICAgICBsZXQgYmFzZTY0ZmlsZXMgPSB7fQogICAgICBsZXQgaWRjb3VudGVyID0gMAogICAgICBsZXQgZmlsZV9ldmVudGlkc3F1ZXVlID0ge30KICAgICAgbGV0IGxvYWRlZGV2ZW50aWRzID0gW10KICAgICAgbGV0IGJhc2U2NHVybG1hdGNoZXIgPSAvXigoW2EtejAtOV17MSwyMH1cL1thLXowLTlcLVwuXXsxLDIwfSk7YmFzZTY0LCkoXFMrKS9pCiAgICAgIGxldCBiYXNlNjRwYXJ0bWF0Y2hlciA9IC9ecGFydChcZHsxLDV9KTsoXGR7MSw1fSk7KFthLXowLTldezQwfSk7KChbYS16MC05XXsxLDIwfVwvW2EtejAtOVwtXC5dezEsMjB9O2Jhc2U2NCx8KShcU3szLDU1MDAwfSkpL2kKICAgICAgbGV0IHEgPSBsb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKS50cmltKCkKICAgICAgbGV0IGZpbGVpZCA9IHEuc3BsaXQoIi8iKVswXQogICAgICBsZXQgb3B0aW9ucyA9IHEubWF0Y2goL1wvW15cL10rL2cpIHx8IFtdCiAgICAgIGxldCBzY2FuID0gcS5tYXRjaCgvc2Nhbi8pCiAgICAgIGxldCBsb2FkZWRmaWxlaWRzID0gW10KICAgICAgbGV0IGxvYWRlZG1ldGFpZHMgPSBbXQogICAgICBsZXQgcGVuZGluZ3JlcXVlc3RzID0gMAogICAgICBsZXQgc2NhbnBhcmFtcyA9IHt9CiAgICAgIGNvbnN0IHFzdHIgPSBsb2NhdGlvbi5zZWFyY2gubWF0Y2goL2ZpbGVwdWJsaXNoPShbYS16MC05XSspL2kpCiAgICAgIGNvbnN0IHVwbG9hZGVydXJsID0gcXN0ciAmJiBxc3RyWzFdICsgIj9maWxlbG9hZGVyPSIgKyBsb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvW2EtejAtOV0rJC9pKSB8fCAiZmlsZXB1Ymxpc2guaHRtbCMvYXV0b3Njcm9sbCIKICAgICAgY29uc3QgdXBsb2FkZXJoYXNoID0gIiNlOTg4ODk0NDI2YzVjZDgyMzg4NjVmMzljNjc4MGQ2MDg0ZWM2YzJlMTE5YmNjZjg2OWU3NDU4MGU0NmU4MGRlIgogICAgICBjb25zdCByZWxheXMgPSBbCiAgICAgIAkid3NzOi8vbi54bXIuc2UiLAogICAgICAgICJ3c3M6Ly9ub3MubG9sIiwgCiAgICAgICAgIndzczovL3JlbGF5Lm5vc3RyLmJhbmQiLAogICAgICAgICJ3c3M6Ly9lZGVuLm5vc3RyLmxhbmQvIiwKCQkgICAgIndzczovL3JlbGF5YWJsZS5vcmciLAoJICAgICAgIndzczovL25vc3RyLm1vbSIsCgkJICAgICJ3c3M6Ly9yZWxheS5ub3N0ci5iYW5kIiwKCSAgICAgICJ3c3M6Ly9ub3N0ci5zZWxmLWRldGVybWluZWQuZGUiLAoJCSAgICAid3NzOi8vcHVyYXZpZGEubm9zdHIubGFuZCIKICAgICAgXQoKICAgICAgZG9jdW1lbnQud3JpdGUoJzxhIGhyZWY9IicgKyB1cGxvYWRlcnVybCArICciPmZpbGVwdWJsaXNoLmh0bWw8L2E+JykKCiAgICAgIGlmKGdldG9wdGlvbigidGFnIilbMV0pewogICAgICAgIGRvY3VtZW50LndyaXRlKCc8cD48YSBocmVmPSInICsgdXBsb2FkZXJ1cmwgKyAnIy90YWdzOicgKyBlc2NhcGVIdG1sKGdldG9wdGlvbigidGFnIilbMV0pICsgJy9yZXBseSI+cmVwbHk8L2E+IHRvIHRhZyAjJyArIGVzY2FwZUh0bWwoZ2V0b3B0aW9uKCJ0YWciKVsxXSkgKyAnPC9wPicpCiAgICAgIH0KCiAgICAgIGlmKHNjYW4pewogICAgICAgIHNjYW5wYXJhbXMuc3RhcnQgPSBwYXJzZUludChwcm9tcHQoInN0YXJ0IiksIDEwKQogICAgICAgIHNjYW5wYXJhbXMuc3ByZWFkID0gcGFyc2VJbnQocHJvbXB0KCJzcHJlYWQiKSwgMTApCiAgICAgICAgc2NhbnBhcmFtcy5tYXggPSBwYXJzZUludChwcm9tcHQoIm1heCIpLCAxMCkKICAgICAgfQogICAgICAKICAgICAgZnVuY3Rpb24gdXBkYXRlaGFzaChhZGQsIHJlbW92ZSl7CiAgICAgICAgaWYocmVtb3ZlICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocmVtb3ZlKSl7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZWhhc2gsIHJlbW92ZSBzaG91bGQgYmUgYXJyYXkiKQogICAgICAgIH0KICAgICAgICAKICAgICAgICBmb3IobGV0IHIgb2YgKHJlbW92ZSB8fCBbXSkuc29ydCgoYSwgYikgPT4gYS5sZW5ndGggPCBiLmxlbmd0aCkpewogICAgICAgICAgbG9jYXRpb24uaGFzaCA9IGxvY2F0aW9uLmhhc2gucmVwbGFjZShyLCAiIikKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgbG9jYXRpb24uaGFzaCArPSBsb2NhdGlvbi5oYXNoLmluZGV4T2YoYWRkKSA9PSAtMSAmJiBhZGQgfHwgIiIKICAgICAgfQogICAKICAgICAgZnVuY3Rpb24gdXBkYXRldmFsdWVvcHRpb24oa2V5LCB2YWx1ZSwgdmFsaWRhdG9yKXsKICAgICAgICBmaWx0ZXJzdHIgPSB2YWx1ZSB8fCBwcm9tcHQoa2V5LCBnZXRvcHRpb24oa2V5KVsxXSB8fCAiIikgfHwgIiIKICAgICAgICBpZihmaWx0ZXJzdHIgJiYgdHlwZW9mIHZhbGlkYXRvciA9PSAiZnVuY3Rpb24iICYmICF2YWxpZGF0b3IoZmlsdGVyc3RyKSl7CiAgICAgICAgICBhbGVydCgiaW52YWxpZCB2YWx1ZSIpCiAgICAgICAgICByZXR1cm4KICAgICAgICB9CiAgICAgICAgdXBkYXRlaGFzaChmaWx0ZXJzdHIubGVuZ3RoID4gMCAmJiAiLyIgKyBrZXkgKyAiOiIgKyBmaWx0ZXJzdHIgfHwgbnVsbCwgW2ZpbGVpZCwgIi8iICsga2V5ICsgIjoiICsgKGdldG9wdGlvbihrZXkpWzFdIHx8ICIiKV0pCiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIGdldG9wdGlvbihrZXkpewogICAgICAgIGxldCBmaWx0ZXJvcHQgPSBvcHRpb25zLmZpbmQobyA9PiBvLmluZGV4T2YoIi8iICsga2V5ICsgIjoiKSA9PSAwKQogICAgICAgIGxldCBtYXRjaGVyID0gbmV3IFJlZ0V4cCgnXlwvJyArIGtleSArICdcXDooXFxTKykkJykKICAgICAgICBsZXQgbWF0Y2ggPSBmaWx0ZXJvcHQgJiYgZmlsdGVyb3B0Lm1hdGNoKG1hdGNoZXIpIHx8IG51bGwKICAgICAgICByZXR1cm4gbWF0Y2ggfHwgW10KICAgICAgfQogICAgICAKICAgICAgZnVuY3Rpb24gcHVia2V5aGFzaChrZXkpewogICAgICAgIGxvY2FsU3RvcmFnZS5wdWJrZXkgPSBwcm9tcHQoInB1YmtleSIsIGxvY2FsU3RvcmFnZS5wdWJrZXkgfHwgIiIpIHx8ICIiCgogICAgICAgIGlmKGxvY2FsU3RvcmFnZS5wdWJrZXkubGVuZ3RoID4gMCl7CiAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gIiMiICsga2V5ICsgIjoiICsgbG9jYWxTdG9yYWdlLnB1YmtleQogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZHZpc2libGUoKXsKICAgICAgICBpZihvcHRpb25zLmluY2x1ZGVzKCIvaW5saW5lYWxsIikgfHwgb3B0aW9ucy5pbmNsdWRlcygiL2dhbGxlcnkiKSl7CiAgICAgICAgICBmb3IobGV0IGVsZW1lbnQgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmVsZW1lbnQiKSl7CiAgICAgICAgICAgIGlmKGVsZW1lbnQuZGF0YXNldC5maWxlb2JqICYmIHNjcm9sbHZpc2libGUoZWxlbWVudCwgdmlzdWFsVmlld3BvcnQuaGVpZ2h0IC8gMikpewogICAgICAgICAgICAgIGNvbnN0IHNvY2tldCA9IHNvY2tldHMuZmluZChzID0+IHMudXJsID09IGVsZW1lbnQuZGF0YXNldC5zb2NrZXR1cmwpCiAgICAgIAogICAgICAgICAgICAgIGlmKHNvY2tldCl7CiAgICAgICAgICAgICAgICBsZXQgZmlsZW9iaiA9IEpTT04ucGFyc2UoZWxlbWVudC5kYXRhc2V0LmZpbGVvYmopCiAgICAgICAgICAgICAgICBpZihvcHRpb25zLmluY2x1ZGVzKCIvbm9pbmxpbmVsaW1pdCIpIHx8IChmaWxlb2JqLmZpbGVpZHMgfHwgW10pLmxlbmd0aCA8PSAxMCl7CiAgICAgICAgICAgICAgICAgIGF3YWl0IGxvYWRmaWxlKGVsZW1lbnQuZGF0YXNldC5maWxlaWQsIGZpbGVvYmosIGVsZW1lbnQsIHNvY2tldCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIGFzeW5jICgpID0+IGF3YWl0IGxvYWR2aXNpYmxlKCkpCiAgICAgIAogICAgICBhZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKGUpewogICAgICAgIGlmKGUudGFyZ2V0LnRhZ05hbWUgPT0gIklNRyIpewogICAgICAgICAgZS50YXJnZXQuY2xhc3NMaXN0LnRvZ2dsZSgiYWN0aXZlIikKICAgICAgICAgIHJldHVybgogICAgICAgIH0KCiAgICAgICAgaWYoZS50YXJnZXQuZGF0YXNldC5hY3Rpb24pewogICAgICAgICAgY29uc3QgYyA9IHsKICAgICAgICAgICAgZ2xvYmFsOiAoKSA9PiB1cGRhdGVoYXNoKG51bGwsIFtmaWxlaWQsIGdldG9wdGlvbigidGFnIilbMF0sIGdldG9wdGlvbigiZmlsdGVyIilbMF0sIGdldG9wdGlvbigiZGF0ZSIpWzBdLCBnZXRvcHRpb24oImsiKVswXSwgZ2V0b3B0aW9uKCJmb2wiKVswXV0pLAogICAgICAgICAgICB0YWc6ICgpID0+IHVwZGF0ZXZhbHVlb3B0aW9uKCJ0YWciLCBlLnRhcmdldC5kYXRhc2V0LnZhbHVlKSwKICAgICAgICAgICAgZmlsdGVyOiAoKSA9PiB1cGRhdGV2YWx1ZW9wdGlvbigiZmlsdGVyIiksCiAgICAgICAgICAgIGRhdGU6ICgpID0+IHVwZGF0ZXZhbHVlb3B0aW9uKCJkYXRlIiwgbnVsbCwgKHZhbHVlKSA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hdGNoKC9eXGQrXC1cZCskLykKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIHByb2ZpbGU6ICgpID0+IHB1YmtleWhhc2goImsiKSwKICAgICAgICAgICAgZm9sOiAoKSA9PiBwdWJrZXloYXNoKCJmb2wiKSwKICAgICAgICAgICAgbGlua3M6ICgpID0+IHVwZGF0ZWhhc2gobnVsbCwgWyIvaW5saW5lIiwgIi9pbmxpbmVhbGwiXSksCiAgICAgICAgICAgIGlubGluZTogKCkgPT4gdXBkYXRlaGFzaCgiL2lubGluZSIsIFsiL2lubGluZWFsbCIsICIvZ2FsbGVyeSJdKSwKICAgICAgICAgICAgaW5saW5lYWxsOiAoKSA9PiB1cGRhdGVoYXNoKCIvaW5saW5lYWxsIiwgWyIvaW5saW5lIiwgIi9nYWxsZXJ5Il0pLAogICAgICAgICAgICBnYWxsZXJ5OiAoKSA9PiB7CiAgICAgICAgICAgICAgdXBkYXRlaGFzaCgiL2dhbGxlcnkiLCBbIi9pbmxpbmUiLCAiL2lubGluZWFsbCJdKQogICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0W29wdGlvbnMuaW5jbHVkZXMoIi9nYWxsZXJ5IikgJiYgImFkZCIgfHwgInJlbW92ZSJdKCJnYWxsZXJ5IikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcXVpZXQ6ICgpID0+IHVwZGF0ZWhhc2goIi9xdWlldCIsIG51bGwpLAogICAgICAgICAgICB2ZXJib3NlOiAoKSA9PiB1cGRhdGVoYXNoKG51bGwsIFsiL3F1aWV0Il0pLAogICAgICAgICAgICBtYW51c2Nyb2xsOiAoKSA9PiB1cGRhdGVoYXNoKG51bGwsIFsiL2F1dG9zY3JvbGwiXSksCiAgICAgICAgICAgIGF1dG9zY3JvbGw6ICgpID0+IHVwZGF0ZWhhc2goIi9hdXRvc2Nyb2xsIiwgbnVsbCksIAogICAgICAgICAgICBzb3J0bmFtZTogKCkgPT4gdXBkYXRlaGFzaCgiL3NvcnRuYW1lIiwgbnVsbCksIAogICAgICAgICAgICBzb3J0ZGF0ZTogKCkgPT4gdXBkYXRlaGFzaChudWxsLCBbIi9zb3J0bmFtZSJdKSwKICAgICAgICAgICAgaW5saW5lbGltaXQ6ICgpID0+IHVwZGF0ZWhhc2gobnVsbCwgWyIvbm9pbmxpbmVsaW1pdCJdKSwgCiAgICAgICAgICAgIG5vaW5saW5lbGltaXQ6ICgpID0+IHVwZGF0ZWhhc2goIi9ub2lubGluZWxpbWl0IiwgbnVsbCksIAogICAgICAgICAgICByYXc6ICgpID0+IHVwZGF0ZXZhbHVlb3B0aW9uKCJyYXciLCBudWxsLCAodmFsdWUpID0+IHsKICAgICAgICAgICAgICByZXR1cm4gdmFsdWUubWF0Y2goL15cU3s2NH0kLykKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIG5vcmF3OiAoKSA9PiB1cGRhdGVoYXNoKG51bGwsIFsiL3JhdyJdKSwgCiAgICAgICAgICAgIHN5bmM6ICgpID0+IHVwZGF0ZWhhc2goIi9zeW5jIiwgbnVsbCksIAogICAgICAgICAgICBub3N5bmM6ICgpID0+IHVwZGF0ZWhhc2gobnVsbCwgWyIvc3luYyJdKQogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCkKICAgICAgICAgIGNbZS50YXJnZXQuZGF0YXNldC5hY3Rpb25dKCkKICAgICAgICB9CiAgICAgIH0pCiAgICAgIAogICAgICBhZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwgZnVuY3Rpb24oZSl7CiAgICAgICAgbG9jYXRpb24ucmVsb2FkKCkKICAgICAgfSkKICAgICAgCiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBmdW5jdGlvbihlKXsKICAgICAgICBpZihlLmtleSA9PSAiQXJyb3dVcCIpewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpCiAgICAgICAgICAKICAgICAgICAgIGlmKCFwcmV2ZWxlbWVudCgpICYmIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID09IDApewogICAgICAgICAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wTWF4CiAgICAgICAgICAgIHJldHVybgogICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBwcmV2ZWxlbWVudCgpICYmIHByZXZlbGVtZW50KCkucXVlcnlTZWxlY3RvcigiYSIpLm9mZnNldFRvcCArIAogICAgICAgICAgICBwcmV2ZWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3IoImEiKS5vZmZzZXRIZWlnaHQgfHwgMAogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZihlLmtleSA9PSAiQXJyb3dEb3duIil7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCkKICAgICAgICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gbmV4dGVsZW1lbnQoKSAmJiBuZXh0ZWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3IoImEiKS5vZmZzZXRUb3AgKyAKICAgICAgICAgICAgbmV4dGVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yKCJhIikub2Zmc2V0SGVpZ2h0IHx8IDAKICAgICAgICB9CiAgICAgIH0pCiAgICAgIAogICAgICBmdW5jdGlvbiBiNjR0b0Jsb2IoYjY0RGF0YSwgY29udGVudFR5cGU9JycsIHNsaWNlU2l6ZT01MTIpewogICAgICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiNjREYXRhKTsKICAgICAgICBjb25zdCBieXRlQXJyYXlzID0gW107CgogICAgICAgIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgb2Zmc2V0ICs9IHNsaWNlU2l6ZSkgewogICAgICAgICAgY29uc3Qgc2xpY2UgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSk7CgogICAgICAgICAgY29uc3QgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoc2xpY2UubGVuZ3RoKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpY2UubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTsKICAgICAgICAgIGJ5dGVBcnJheXMucHVzaChieXRlQXJyYXkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBCbG9iKGJ5dGVBcnJheXMsIHt0eXBlOiBjb250ZW50VHlwZX0pOwogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiBpbmZvKHRleHQsIGh0bWwsIGltcG9ydGFudCwgY2xhc3NOYW1lcywgZmlsZSwgZmlsZWlkLCBzb2NrZXQpewogICAgICAgIGxldCBzY3JvbGxtYXggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9PSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcE1heAogICAgICAgIAogICAgICAgIGlmKChvcHRpb25zLmluY2x1ZGVzKCIvZ2FsbGVyeSIpICYmICFmaWxlaWQpIHx8IChpbXBvcnRhbnQgPT0gZmFsc2UgJiYgb3B0aW9ucy5pbmNsdWRlcygiL3F1aWV0IikpKXsKICAgICAgICAgIHJldHVybgogICAgICAgIH0KCiAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpCiAgICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoLi4uKEFycmF5LmlzQXJyYXkoY2xhc3NOYW1lcykgJiYgY2xhc3NOYW1lcyB8fCBbY2xhc3NOYW1lc10pKQogICAgICAgIGRpdltodG1sICYmICJpbm5lckhUTUwiIHx8ICJpbm5lclRleHQiXSA9IHRleHQKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChkaXYpCiAgICAgICAgZGl2LmRhdGFzZXQuZmlsZWlkID0gZmlsZWlkCiAgICAgICAgCiAgICAgICAgaWYoZmlsZSl7CiAgICAgICAgICBkaXYuZGF0YXNldC5maWxlbmFtZSA9IGZpbGUubmFtZQogICAgICAgICAgZGl2LmRhdGFzZXQuZmlsZW9iaiA9IEpTT04uc3RyaW5naWZ5KGZpbGUpCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKHNvY2tldCl7CiAgICAgICAgICBkaXYuZGF0YXNldC5zb2NrZXR1cmwgPSBzb2NrZXQudXJsCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKG9wdGlvbnMuaW5jbHVkZXMoIi9hdXRvc2Nyb2xsIikgJiYgc2Nyb2xsbWF4KXsKICAgICAgICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3BNYXgKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIG5leHRlbGVtZW50KCl7CiAgICAgICAgcmV0dXJuIFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZWxlbWVudCIpXS5maW5kKGVsID0+IGVsLm9mZnNldEhlaWdodCA+IDAgJiYgCiAgICAgICAgICBlbC5xdWVyeVNlbGVjdG9yKCJhIikub2Zmc2V0VG9wICsgZWwucXVlcnlTZWxlY3RvcigiYSIpLm9mZnNldEhlaWdodCA+IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wKQogICAgICB9CgogICAgICBmdW5jdGlvbiBwcmV2ZWxlbWVudCgpewogICAgICAgIHJldHVybiBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmVsZW1lbnQiKV0ucmV2ZXJzZSgpLmZpbmQoZWwgPT4gZWwub2Zmc2V0SGVpZ2h0ID4gMCAmJiAKICAgICAgICAgIGVsLnF1ZXJ5U2VsZWN0b3IoImEiKS5vZmZzZXRUb3AgKyBlbC5xdWVyeVNlbGVjdG9yKCJhIikub2Zmc2V0SGVpZ2h0IDwgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3ApCiAgICAgIH0KCiAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRmaWxlKGZpbGVpZCwgZmlsZW9iaiwgY29udGFpbmVyLCBzb2NrZXQpewogICAgICAgIGNvbnN0IGlkcyA9IGZpbGVvYmouaWRzCiAgICAgICAgCiAgICAgICAgaWYoaWRzKXsKICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSAoYXdhaXQgY29sbGVjdGZpbGUoc29ja2V0LCBpZHMpKS5jb250ZW50CiAgICAgICAgICBmaWxlb2JqID0gSlNPTi5wYXJzZShjb250ZW50KQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZighbG9hZGVkZmlsZWlkcy5pbmNsdWRlcyhmaWxlaWQpKXsKICAgICAgICAgIGxvYWRlZGZpbGVpZHMucHVzaChmaWxlaWQpCiAgICAgICAgICBsZXQgcmVzID0gYXdhaXQgcXVlcnlldmVudHMoc29ja2V0LCBbMzM0XSwgZmlsZW9iai5maWxlaWRzKQogICAgICAgICAgYXdhaXQgc2F2ZShzb2NrZXQsIHJlcywgY29udGFpbmVyLCBmaWxlb2JqKQogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgZnVuY3Rpb24gc2Nyb2xsdmlzaWJsZShuLCBvZmZzZXQpewogICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwCiAgICAgICAgcmV0dXJuIChuLm9mZnNldFRvcCArIG4ub2Zmc2V0SGVpZ2h0KSA+PSAoc2Nyb2xsWSAtIG9mZnNldCkKICAgICAgICAgICYmIG4ub2Zmc2V0VG9wIDw9IChzY3JvbGxZICsgdmlzdWFsVmlld3BvcnQuaGVpZ2h0ICsgb2Zmc2V0KQogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiBleHRlbnNpb24obmFtZSl7CiAgICAgICAgcmV0dXJuIChuYW1lICYmIG5hbWUubWF0Y2goL1wuKFxTezIsNH0pJC8pIHx8IFtdKVsxXQogICAgICB9CiAgICAgIAogICAgICBhc3luYyBmdW5jdGlvbiBjb2xsZWN0ZmlsZShzb2NrZXQsIHJvb3RmaWxlaWRzKXsKICAgICAgICBsZXQgcm9vdGZpbGVzcmVzID0gYXdhaXQgcXVlcnlldmVudHMoc29ja2V0LCBbMzM1XSwgcm9vdGZpbGVpZHMsIG51bGwpCiAgICAgICAgZmlsZWlkc2NvbWJpbmVkID0gW10KICAgICAgICAKICAgICAgICBmb3IobGV0IGZpbGVpZCBvZiByb290ZmlsZWlkcyl7CiAgICAgICAgICBjb25zdCBmaWxlcmVzID0gcm9vdGZpbGVzcmVzLmZpbmQoZiA9PiBmLmlkID09IGZpbGVpZCkKICAgICAgICAgIGxldCBzaW5nbGVmaWxlaWRzID0gSlNPTi5wYXJzZShmaWxlcmVzLmNvbnRlbnQpLmZpbGVpZHMKICAgICAgICAgIGZpbGVpZHNjb21iaW5lZC5wdXNoKC4uLnNpbmdsZWZpbGVpZHMpCiAgICAgICAgfQoKICAgICAgICBsb2FkZWRmaWxlaWRzLnB1c2goLi4uZmlsZWlkKQogICAgICAgIGNvbnN0IG5hbWUgPSBKU09OLnBhcnNlKHJvb3RmaWxlc3Jlc1swXS5jb250ZW50KS5uYW1lCiAgICAgICAgY29uc3QgZmlsZWNvbnRlbnQgPSBKU09OLnBhcnNlKHJvb3RmaWxlc3Jlc1swXS5jb250ZW50KQogICAgICAgIGZpbGVjb250ZW50LmZpbGVpZHMgPSBmaWxlaWRzY29tYmluZWQuc2xpY2UoMCwgMikKICAgICAgICBmaWxlY29udGVudC5zdHJlYW1pbmdmaWxlaWRzID0gW10KCiAgICAgICAgaWYoWyJ3ZWJtIl0uaW5jbHVkZXMoZXh0ZW5zaW9uKG5hbWUpKSl7CiAgICAgICAgICBmaWxlY29udGVudC5zdHJlYW1pbmdmaWxlaWRzID0gZmlsZWlkc2NvbWJpbmVkLnNsaWNlKDIpCiAgICAgICAgfWVsc2V7CiAgICAgICAgICBmaWxlY29udGVudC5maWxlaWRzLnB1c2goLi4uZmlsZWlkc2NvbWJpbmVkLnNsaWNlKDIpKQogICAgICAgIH0KICAgICAgICAKICAgICAgICBmaWxlY29udGVudC5jYW5zdGFydGNvdW50ID0gZmlsZWNvbnRlbnQuZmlsZWlkcy5sZW5ndGgKICAgICAgICBkZWxldGUgZmlsZWNvbnRlbnQucGFydAogICAgICAgIGRlbGV0ZSBmaWxlY29udGVudC5wYXJ0Y291bnQKICAgICAgICAKICAgICAgICByb290ZmlsZXNyZXNbMF0uY29udGVudCA9IEpTT04uc3RyaW5naWZ5KGZpbGVjb250ZW50KQoKICAgICAgICByZXR1cm4gcm9vdGZpbGVzcmVzWzBdCiAgICAgIH0KICAgICAgCiAgICAgIGFzeW5jIGZ1bmN0aW9uIHJlbGF5bWFpbihzb2NrZXQsIHNpbmNlLCB1bnRpbCl7CiAgICAgICAgbGV0IHB1YmtleW1hdGNoID0gcS5tYXRjaCgvazooW2EtejAtOV0rKS8pCiAgICAgICAgbGV0IHJhdyA9IHEubWF0Y2goL3JhdzooW2EtejAtOV0rKS8pCiAgICAgICAgbGV0IHB1YmtleXMgPSBwdWJrZXltYXRjaCAmJiBbcHVia2V5bWF0Y2hbMV1dCiAgICAgICAgbGV0IGZvbGxvd2luZyA9IHEubWF0Y2goL2ZvbDooW2EtejAtOV0rKS8pCiAgICAgICAgbGV0IGZpbGVzcmVzID0gW10KCiAgICAgICAgaW5mbygicXVlcnkgIiArIHNvY2tldC51cmwsIGZhbHNlLCBmYWxzZSkKICAgICAgICAKICAgICAgICBpZihzY2FuKXsKICAgICAgICAgIGZvcihsZXQga2luZCA9IHNjYW5wYXJhbXMuc3RhcnQ7IGtpbmQgPCBzY2FucGFyYW1zLm1heDsga2luZCArPSBzY2FucGFyYW1zLnNwcmVhZCl7CiAgICAgICAgICAgIGxldCBraW5kcyA9IEFycmF5KHNjYW5wYXJhbXMuc3ByZWFkKS5maWxsKCkubWFwKChlLCBpKSA9PiBpICsga2luZCkKICAgICAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHF1ZXJ5ZXZlbnRzKHNvY2tldCwgW2tpbmRdLCBudWxsLCBudWxsKQogICAgICAgICAgICBpbmZvKFsiZm91bmQgPj0iLCByZXMubGVuZ3RoLCAia2luZCIsICJbICIra2luZHNbMF0gKyAiIC0gIiArIChraW5kc1traW5kcy5sZW5ndGgtMV0pICsgIiBdIiwgImV2ZW50cyJdLmpvaW4oIiAiKSkKICAgICAgICAgIH0KICAgICAgICB9ZWxzZSBpZihyYXcpewogICAgICAgICAgYXdhaXQgc2F2ZShzb2NrZXQsIGF3YWl0IHF1ZXJ5ZXZlbnRzKHNvY2tldCwgWzMzNF0sIG51bGwsIFtyYXdbMV1dLCBudWxsLCBzaW5jZSwgdW50aWwpKQoKICAgICAgICAgIGZvcihsZXQgaGFzaCBpbiBiYXNlNjRmaWxlcyl7CiAgICAgICAgICAgIGlmKGJhc2U2NGZpbGVzW2hhc2hdLmxlbmd0aCA8IGJhc2U2NGZpbGVzW2hhc2hdWzBdLnBhcnRjb3VudCl7CiAgICAgICAgICAgICAgY29uc3QgbGFzdHBhcnRkYXRlID0gYmFzZTY0ZmlsZXNbaGFzaF1bYmFzZTY0ZmlsZXNbaGFzaF0ubGVuZ3RoLTFdLmNyZWF0ZWRfYXQKICAgICAgICAgICAgICBjb25zb2xlLmxvZygibWlzc2luZyBwYXJ0cyIsIGJhc2U2NGZpbGVzW2hhc2hdLmxlbmd0aCwgYmFzZTY0ZmlsZXNbaGFzaF1bMF0ucGFydGNvdW50LCAKICAgICAgICAgICAgICAgIGJhc2U2NGZpbGVzW2hhc2hdW2Jhc2U2NGZpbGVzW2hhc2hdLmxlbmd0aC0xXS5jcmVhdGVkX2F0KQogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgdXBkYXRlX2VsZW1lbnRzKCkKICAgICAgICAgIGxvYWR2aXNpYmxlKCkKICAgICAgICAgIHJldHVybgogICAgICAgIH1lbHNlIGlmKGZpbGVpZC5sZW5ndGggPT0gMCl7CiAgICAgICAgICBjb25zdCB0YWdzID0gZ2V0b3B0aW9uKCJ0YWciKVsxXSAmJiBbZ2V0b3B0aW9uKCJ0YWciKVsxXV0gfHwgbnVsbAogICAgICAgICAgZmlsZXNyZXMgPSBhd2FpdCBxdWVyeWV2ZW50cyhzb2NrZXQsIFszMzZdLCBudWxsLCBudWxsLCB0YWdzKSAKICAgICAgICAgIGZpbGVzcmVzLnB1c2goLi4uYXdhaXQgcXVlcnlldmVudHMoc29ja2V0LCBbMzM1XSwgbnVsbCwgbnVsbCwgdGFncykpCiAgICAgICAgfWVsc2UgaWYocHVia2V5bWF0Y2gpewogICAgICAgICAgZmlsZXNyZXMgPSBhd2FpdCBxdWVyeWV2ZW50cyhzb2NrZXQsIFszMzVdLCBudWxsLCBbcHVia2V5bWF0Y2hbMV1dKQogICAgICAgIH1lbHNlIGlmKGZvbGxvd2luZyl7CiAgICAgICAgICBmb2xyZXMgPSBhd2FpdCBxdWVyeWV2ZW50cyhzb2NrZXQsIFszXSwgbnVsbCwgW2ZvbGxvd2luZ1sxXV0pCiAgICAgICAgICBwdWJrZXlzID0gZm9scmVzWzBdLnRhZ3MuZmlsdGVyKHQgPT4gdFswXSA9PSAicCIpLm1hcCh0ID0+IHRbMV0pCiAgICAgICAgICBmaWxlc3JlcyA9IGF3YWl0IHF1ZXJ5ZXZlbnRzKHNvY2tldCwgWzMzNV0sIG51bGwsIHB1YmtleXMpCiAgICAgICAgfWVsc2V7CiAgICAgICAgICBmaWxlc3JlcyA9IGF3YWl0IHF1ZXJ5ZXZlbnRzKHNvY2tldCwgWzMzNV0sIFtmaWxlaWRdKQoKICAgICAgICAgIGlmKGZpbGVzcmVzLmxlbmd0aCA9PSAwKXsKICAgICAgICAgICAgZmlsZV9jb250YWluZXJfcmVzID0gYXdhaXQgcXVlcnlldmVudHMoc29ja2V0LCBbMzM2XSwgW2ZpbGVpZF0pCiAgICAgICAgICAgIAogICAgICAgICAgICBpZihmaWxlX2NvbnRhaW5lcl9yZXMubGVuZ3RoID4gMCl7CiAgICAgICAgICAgICAgZmlsZXNyZXMgPSBbCiAgICAgICAgICAgICAgICBhd2FpdCBjb2xsZWN0ZmlsZShzb2NrZXQsIEpTT04ucGFyc2UoZmlsZV9jb250YWluZXJfcmVzWzBdLmNvbnRlbnQpLmlkcykKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZm9yKGxldCBldmVudCBvZiBmaWxlc3Jlcyl7CiAgICAgICAgICBmaWxlc1tldmVudC5pZF0gPSBldmVudAogICAgICAgIH0KICAgICAgICAKICAgICAgICBsZXQgZmlsZWlkcyA9IE9iamVjdC5rZXlzKGZpbGVzKS5maWx0ZXIoZXZlbnRpZCA9PiAhbG9hZGVkZmlsZWlkcy5pbmNsdWRlcyhldmVudGlkKSAmJiAhbG9hZGVkbWV0YWlkcy5pbmNsdWRlcyhldmVudGlkKSkKCiAgICAgICAgZmlsZWlkcyA9IGZpbGVpZHMuZmlsdGVyKGV2ZW50aWQgPT4gewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZmlsZXNbZXZlbnRpZF0uY29udGVudCkucGFydCA9PT0gdW5kZWZpbmVkCiAgICAgICAgICB9Y2F0Y2goZSl7fQogICAgICAgICAgcmV0dXJuIHRydWUKICAgICAgICB9KQogICAgICAgIAogICAgICAgIGluZm8oWyJmb3VuZCIsIGZpbGVpZHMubGVuZ3RoLCAiZmlsZShzKSIsICJAIiwgc29ja2V0LnVybF0uam9pbigiICIpLCBmYWxzZSwgZmFsc2UpCiAgICAgICAgCiAgICAgICAgaWYoZmlsZWlkcy5sZW5ndGggPT0gMSl7CiAgICAgICAgICBmb3IobGV0IGV2ZW50aWQgb2YgZmlsZWlkcyl7CiAgICAgICAgICAgIGxvYWRlZGZpbGVpZHMucHVzaChldmVudGlkKQogICAgICAgICAgICBwZW5kaW5ncmVxdWVzdHMrKwoKICAgICAgICAgICAgbGV0IGZpbGUgPSBKU09OLnBhcnNlKGZpbGVzW2V2ZW50aWRdLmNvbnRlbnQpCiAgICAgICAgICAgIAogICAgICAgICAgICBpZighYXBwbHlmaWx0ZXJzKGZpbGVzW2V2ZW50aWRdLCBmaWxlKSl7CiAgICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGZpbGUuZmlsZWlkcy5sZW5ndGg7IGkgKz0gNTAwKXsKICAgICAgICAgICAgICAgIGF3YWl0IHNhdmUoc29ja2V0LCBhd2FpdCBxdWVyeWV2ZW50cyhzb2NrZXQsIFszMzRdLCBmaWxlLmZpbGVpZHMuc2xpY2UoaSwgaSArIDUwMCkpLCBudWxsLCBmaWxlKQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcGVuZGluZ3JlcXVlc3RzLS0KICAgICAgICAgIH0KICAgICAgICB9ZWxzZSBpZihmaWxlaWRzLmxlbmd0aCA+IDEpewogICAgICAgICAgZm9yKGxldCBldmVudGlkIG9mIGZpbGVpZHMpewogICAgICAgICAgICBsZXQgZmlsZSA9IG51bGwKCiAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICBmaWxlID0gSlNPTi5wYXJzZShmaWxlc1tldmVudGlkXS5jb250ZW50KQogICAgICAgICAgICB9Y2F0Y2goZSl7CiAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYoIWFwcGx5ZmlsdGVycyhmaWxlc1tldmVudGlkXSwgZmlsZSkpewogICAgICAgICAgICAgIGxvYWRlZG1ldGFpZHMucHVzaChldmVudGlkKQoKICAgICAgICAgICAgICB1cGRhdGVjb250ZW50KG51bGwsIHsKICAgICAgICAgICAgICAgIHNvY2tldDogc29ja2V0LCAKICAgICAgICAgICAgICAgIGZldmVudDogZmlsZXNbZXZlbnRpZF0sCiAgICAgICAgICAgICAgICBmaWxlOiBmaWxlCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH1lbHNlewogICAgICAgICAgaW5mbygiNDA0IEAgIiArIHNvY2tldC51cmwsIGZhbHNlLCAhb3B0aW9ucy5pbmNsdWRlcygiL2lubGluZWFsbCIpKQogICAgICAgIH0KCiAgICAgICAgdXBkYXRlX2VsZW1lbnRzKCkKICAgICAgICBsb2FkdmlzaWJsZSgpCiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGFwcGx5ZmlsdGVycyhmaWxlX3Jvb3QsIGZpbGVfb2JqKXsKICAgICAgICBsZXQgc2tpcCA9IGZhbHNlCgogICAgICAgIGlmKGdldG9wdGlvbigiZGF0ZSIpWzFdKXsKICAgICAgICAgIGNvbnN0IGRhdGVwYXJ0cyA9IGdldG9wdGlvbigiZGF0ZSIpWzFdLnNwbGl0KCItIikKICAgICAgICAgIHNraXAgPSBmaWxlX3Jvb3QuY3JlYXRlZF9hdCA8IHBhcnNlSW50KGRhdGVwYXJ0c1swXSwgMTApIHx8IGZpbGVfcm9vdC5jcmVhdGVkX2F0ID4gcGFyc2VJbnQoZGF0ZXBhcnRzWzFdLCAxMCkKICAgICAgICB9CgogICAgICAgIGlmKGdldG9wdGlvbigiZmlsdGVyIilbMV0gJiYgKGZpbGVfb2JqLm5hbWUgfHwgIiIpLmluZGV4T2YoZ2V0b3B0aW9uKCJmaWx0ZXIiKVsxXSkgPT0gLTEpewogICAgICAgICAgc2tpcCA9IHRydWUKICAgICAgICB9CgogICAgICAgIHJldHVybiBza2lwCiAgICAgIH0KCiAgICAgIGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5ZXZlbnRzKHNvY2tldCwga2luZHMsIGV2ZW50aWRzLCBhdXRob3JzLCB0YWdzLCBzaW5jZSwgdW50aWwpewogICAgICAgIGNvbnN0IHF1ZXJ5aWQgPSAiZXZlbnRzXyIgKyAoKytpZGNvdW50ZXIpCiAgICAgICAgCiAgICAgICAgaWYoZ2V0b3B0aW9uKCJkYXRlIilbMV0pewogICAgICAgICAgY29uc3QgZGF0ZXBhcnRzID0gZ2V0b3B0aW9uKCJkYXRlIilbMV0uc3BsaXQoIi0iKQogICAgICAgICAgc2luY2UgPSBwYXJzZUludChkYXRlcGFydHNbMF0sIDEwKQogICAgICAgICAgdW50aWwgPSBwYXJzZUludChkYXRlcGFydHNbMV0sIDEwKQogICAgICAgIH0KCiAgICAgICAgc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoWwogICAgICAgICAgIlJFUSIsIAogICAgICAgICAgcXVlcnlpZCwgCiAgICAgICAgICB7CiAgICAgICAgICAgICJraW5kcyI6IGtpbmRzIHx8IHVuZGVmaW5lZCwgCiAgICAgICAgICAgICJpZHMiOiBldmVudGlkcyB8fCB1bmRlZmluZWQsCiAgICAgICAgICAgICJhdXRob3JzIjogYXV0aG9ycyB8fCB1bmRlZmluZWQsCiAgICAgICAgICAgICIjdCI6IHRhZ3MgfHwgdW5kZWZpbmVkLCAKICAgICAgICAgICAgInNpbmNlIjogc2luY2UgfHwgdW5kZWZpbmVkLAogICAgICAgICAgICAidW50aWwiOiB1bnRpbCB8fCB1bmRlZmluZWQsCiAgICAgICAgICAgICJsaW1pdCI6IDMwMDAKICAgICAgICAgIH0KICAgICAgICBdKSkKCiAgICAgICAgcmV0dXJuIChhd2FpdCB3YWl0cmVzKHNvY2tldCwgcXVlcnlpZCkpWzBdIHx8IFtdCiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIHBhcnRtYXRjaChzb2NrZXQsIGV2ZW50LCBjb250YWluZXIsIGZpbGUsIHJlcXBhcnRjb3VudCwgcmVkb3dubG9hZCl7CiAgICAgICAgY29uc3QgcGFydG1hdGNoID0gZXZlbnQuY29udGVudC5tYXRjaChiYXNlNjRwYXJ0bWF0Y2hlcikKICAgICAgICAgIAogICAgICAgIGlmKHBhcnRtYXRjaCl7CiAgICAgICAgICBsZXQgaGFzaCA9IHBhcnRtYXRjaFszXQogICAgICAgICAgbGV0IHBhcnRjb3VudCA9IHBhcnNlSW50KHBhcnRtYXRjaFsyXSwgMTApCiAgICAgICAgICBsZXQgaW5kZXggPSBwYXJzZUludChwYXJ0bWF0Y2hbMV0sIDEwKQogICAgICAgICAgbGV0IGNvbnRlbnQgPSBwYXJ0bWF0Y2hbNF0KICAgICAgICAgIAogICAgICAgICAgaWYocmVkb3dubG9hZCl7CiAgICAgICAgICAgIGJhc2U2NGZpbGVzW2hhc2hdLmRvd25sb2FkZWQgPSBmYWxzZQogICAgICAgICAgfQoKICAgICAgICAgIGlmKGJhc2U2NGZpbGVzW2hhc2hdICYmIGJhc2U2NGZpbGVzW2hhc2hdLmRvd25sb2FkZWQpewogICAgICAgICAgICBjb25zb2xlLmxvZygic2tpcCAoZmlsZSBhbHJlYWR5IGRvd25sb2FkZWQpIikKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICB9CgogICAgICAgICAgaWYoIWJhc2U2NGZpbGVzW2hhc2hdKXsKICAgICAgICAgICAgaW5mbyhbImZvdW5kIGZpbGUiLCAifiIsIHBhcnNlSW50KGNvbnRlbnQubGVuZ3RoICogcGFydGNvdW50IC8gMWU2ICogMTAwLCAxMCkgLyAxMDAsICJNQiJdLmpvaW4oIiAiKSwgZmFsc2UsIGZhbHNlKQogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICBpZighYmFzZTY0ZmlsZXNbaGFzaF0gfHwgIWJhc2U2NGZpbGVzW2hhc2hdLmZpbmQoaSA9PiBpLmluZGV4ID09IGluZGV4KSl7CiAgICAgICAgICAgIGJhc2U2NGZpbGVzW2hhc2hdID0gYmFzZTY0ZmlsZXNbaGFzaF0gfHwgW10KCiAgICAgICAgICAgIGJhc2U2NGZpbGVzW2hhc2hdLnB1c2goewogICAgICAgICAgICAgIGluZGV4OiBpbmRleCwKICAgICAgICAgICAgICBwYXJ0Y291bnQ6IHBhcnRjb3VudCwgCiAgICAgICAgICAgICAgY3JlYXRlZF9hdDogZXZlbnQuY3JlYXRlZF9hdCwgCiAgICAgICAgICAgICAgY29udGVudDogY29udGVudCwKICAgICAgICAgICAgICBmaWxlOiBmaWxlCiAgICAgICAgICAgIH0pCgogICAgICAgICAgICBsb2FkZWRldmVudGlkcy5wdXNoKGV2ZW50LmlkKQogICAgICAgICAgICBpbmZvKFsiZG93bmxvYWRlZCBmaWxlIHBhcnQiLCBiYXNlNjRmaWxlc1toYXNoXS5sZW5ndGggKyAiIChpZDogIiArIGluZGV4ICsgIikiLCBwYXJ0Y291bnQsIHBhcnNlSW50KGV2ZW50LmNyZWF0ZWRfYXQsIDEwKV0uam9pbigiICIpLCBmYWxzZSwgZmFsc2UpCiAgICAgICAgICB9CgogICAgICAgICAgaWYoIWJhc2U2NGZpbGVzW2hhc2hdLmRvd25sb2FkZWQgJiYgYmFzZTY0ZmlsZXNbaGFzaF0ubGVuZ3RoID09IChyZXFwYXJ0Y291bnQgfHwgcGFydGNvdW50KSl7CiAgICAgICAgICAgIGNvbnN0IGJhc2U2NGZpbGUgPSBiYXNlNjRmaWxlc1toYXNoXS5zb3J0KChhLCBiKSA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggPiBiLmluZGV4ID8gMSA6IC0xCiAgICAgICAgICAgIH0pLm1hcChpID0+IGkuY29udGVudCkuam9pbigiIikKCiAgICAgICAgICAgIGJhc2U2NGZpbGVzW2hhc2hdLmRvd25sb2FkZWQgPSB0cnVlCgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHVybDogYmFzZTY0ZmlsZSwKICAgICAgICAgICAgICBldmVudDogZXZlbnQsCiAgICAgICAgICAgICAgZmlsZTogZmlsZSwgCiAgICAgICAgICAgICAgY29udGFpbmVyOiBjb250YWluZXIsCiAgICAgICAgICAgICAgc29ja2V0OiBzb2NrZXQKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgYXN5bmMgZnVuY3Rpb24gc2F2ZShzb2NrZXQsIGV2ZW50cywgY29udGFpbmVyLCBmaWxlKXsKICAgICAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlCiAgICAgICAgCiAgICAgICAgZm9yKGxldCBldmVudCBvZiBldmVudHMpewogICAgICAgICAgbGV0IGZpbGVtYXRjaCA9IGV2ZW50LmNvbnRlbnQubWF0Y2goYmFzZTY0dXJsbWF0Y2hlcikKICAgICAgICAgIGlmKGZpbGVtYXRjaCl7CiAgICAgICAgICAgIHVwZGF0ZWNvbnRlbnQoewogICAgICAgICAgICAgIHVybDogZmlsZW1hdGNoWzBdLAogICAgICAgICAgICAgIGV2ZW50OiBldmVudCwKICAgICAgICAgICAgICBjb250YWluZXI6IGNvbnRhaW5lcgogICAgICAgICAgICB9KQoKICAgICAgICAgICAgbWF0Y2hlcyA9IHRydWUKICAgICAgICAgICAgY29udGludWUKICAgICAgICAgIH0KCiAgICAgICAgICBsZXQgcGFydG1hdGNocmVzID0gcGFydG1hdGNoKHNvY2tldCwgZXZlbnQsIGNvbnRhaW5lciwgZmlsZSwgZmlsZT8uY2Fuc3RhcnRjb3VudCkKICAgICAgICAgIAogICAgICAgICAgaWYocGFydG1hdGNocmVzKXsKICAgICAgICAgICAgdXBkYXRlY29udGVudChwYXJ0bWF0Y2hyZXMpCiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbWF0Y2hlcwogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiBmaWxlX2V2ZW50KGV2ZW50aWQpewogICAgICAgIGZvcihmaWxlX2V2ZW50aWQgaW4gZmlsZXMpewogICAgICAgICAgdHJ5ewogICAgICAgICAgICBpZihKU09OLnBhcnNlKGZpbGVzW2ZpbGVfZXZlbnRpZF0uY29udGVudCkuZmlsZWlkcy5maW5kKGlkID0+IGlkID09IGV2ZW50aWQpKXsKICAgICAgICAgICAgICByZXR1cm4gZmlsZXNbZmlsZV9ldmVudGlkXQogICAgICAgICAgICB9CiAgICAgICAgICB9Y2F0Y2goZSl7fQogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgZnVuY3Rpb24gZmlsZW5hbWUoZmlsZV9ldmVudCl7CiAgICAgICAgcmV0dXJuIGZpbGVfZXZlbnQgJiYgSlNPTi5wYXJzZShmaWxlX2V2ZW50LmNvbnRlbnQpLm5hbWUgfHwgbnVsbAogICAgICB9CiAgICAgIAogICAgICBhc3luYyBmdW5jdGlvbiBzb3VyY2Vfb3BlbigpIHsKICAgICAgICBpbmZvKCJzdHJlYW1pbmcgZmlsZSIpCiAgICAgICAgc291cmNlX2xvYWQodGhpcykKICAgICAgfQogICAgICAKICAgICAgYXN5bmMgZnVuY3Rpb24gc291cmNlX2xvYWQobWVkaWFfc291cmNlLCBidWZmZXJfbG9hZF9wYXJ0cykgewogICAgICAgIGxldCBpdGVtID0gbWVkaWFfc291cmNlLml0ZW0KICAgICAgICBidWZmZXJfbG9hZF9wYXJ0cyA9IGJ1ZmZlcl9sb2FkX3BhcnRzIHx8IDIwCiAgICAgICAgCiAgICAgICAgaWYoIWl0ZW0pewogICAgICAgICAgY29uc29sZS5sb2coIml0ZW0gbm90IHNldCIpCiAgICAgICAgICByZXR1cm4KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY29uc3QgdmlkZW8gPSBtZWRpYV9zb3VyY2UudmlkZW8KICAgICAgICBjb25zdCBidWZmZXJlZCA9IHZpZGVvLmJ1ZmZlcmVkLmxlbmd0aCA+IDAgJiYgdmlkZW8uYnVmZmVyZWQuZW5kKDApIHx8IDAKICAgICAgICAKICAgICAgICBpZihidWZmZXJlZCAtIHZpZGVvLmN1cnJlbnRUaW1lIDw9IDIpewogICAgICAgICAgY29uc3QgY29udGVudF90eXBlID0gbWVkaWFfc291cmNlLnR5cGUKICAgICAgICAgIGl0ZW0uZmlsZS5sb2FkZWRmaWxlaWRzID0gaXRlbS5maWxlLmxvYWRlZGZpbGVpZHMgfHwgW10KICAgICAgICAgIGxldCBmaWxlaWRzID0gWy4uLml0ZW0uZmlsZS5maWxlaWRzLCAuLi5pdGVtLmZpbGUuc3RyZWFtaW5nZmlsZWlkc10KICAgICAgICAgIAogICAgICAgICAgaWYoZmlsZWlkcy5sZW5ndGggPT0gaXRlbS5maWxlLmxvYWRlZGZpbGVpZHMubGVuZ3RoKXsKICAgICAgICAgICAgaWYoaXRlbS5maWxlLmJ5dGVfYXJyYXlzKXsKICAgICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoaXRlbS5maWxlLmJ5dGVfYXJyYXlzLCB7dHlwZTogY29udGVudF90eXBlfSkKICAgICAgICAgICAgICB2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpCiAgICAgICAgICAgICAgY29uc29sZS5sb2coImJsb2J1cmwiLCB2aWRlby5zcmMpCiAgICAgICAgICAgICAgZGVsZXRlIGl0ZW0uZmlsZS5ieXRlX2FycmF5cwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybgogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICBjb25zdCBsYXN0X3JlcV9wYXJ0X2luZGV4ID0gaXRlbS5maWxlLmxvYWRlZGZpbGVpZHMubGVuZ3RoICsgYnVmZmVyX2xvYWRfcGFydHMKICAgICAgICAgIGZpbGVpZHMgPSBmaWxlaWRzLnNsaWNlKDAsIGxhc3RfcmVxX3BhcnRfaW5kZXgpLmZpbHRlcih4ID0+ICFpdGVtLmZpbGUubG9hZGVkZmlsZWlkcy5pbmNsdWRlcyh4KSkKCiAgICAgICAgICBsZXQgcmVzID0gYXdhaXQgcXVlcnlldmVudHMoaXRlbS5zb2NrZXQsIFszMzRdLCBmaWxlaWRzKQogICAgICAgICAgaXRlbS5maWxlLmxvYWRlZGZpbGVpZHMucHVzaCguLi5yZXMubWFwKGUgPT4gZS5pZCkpCiAgICAgICAgICAKICAgICAgICAgIGlmKCFpdGVtLmZpbGUuc291cmNlX2J1ZmZlcil7CiAgICAgICAgICAgIGl0ZW0uZmlsZS5zb3VyY2VfYnVmZmVyID0gbWVkaWFfc291cmNlLmFkZFNvdXJjZUJ1ZmZlcihjb250ZW50X3R5cGUpOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICBmb3IobGV0IGV2ZW50IG9mIHJlcyl7CiAgICAgICAgICAgIGxldCBwYXJ0bWF0Y2hyZXMgPSBwYXJ0bWF0Y2goaXRlbS5zb2NrZXQsIGV2ZW50LCBudWxsLCBpdGVtLmZpbGUsIGl0ZW0uZmlsZS5sb2FkZWRmaWxlaWRzLmxlbmd0aCwgdHJ1ZSkKCiAgICAgICAgICAgIGlmKHBhcnRtYXRjaHJlcyl7CiAgICAgICAgICAgICAgbGV0IGJhc2U2NG1hdGNoID0gcGFydG1hdGNocmVzLnVybC5tYXRjaChiYXNlNjR1cmxtYXRjaGVyKQogICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBwYXJ0bWF0Y2hyZXMudXJsLnN1YnN0cihiYXNlNjRtYXRjaFsxXS5sZW5ndGgsIHBhcnRtYXRjaHJlcy51cmwubGVuZ3RoKQogICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBiNjR0b0Jsb2IoY29udGVudCwgY29udGVudF90eXBlKQogICAgICAgICAgICAgIGNvbnN0IGJ5dGVBcnJheSA9IGF3YWl0IGJsb2IuYXJyYXlCdWZmZXIoKTsKCiAgICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgaXRlbS5maWxlLnNvdXJjZV9idWZmZXIuYXBwZW5kQnVmZmVyKGJ5dGVBcnJheSkKICAgICAgICAgICAgICB9Y2F0Y2goZSl7CiAgICAgICAgICAgICAgICBidWZmZXJfbG9hZF9wYXJ0cyA9IDUwMAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAKICAgICAgICAgICAgICBpdGVtLmZpbGUuYnl0ZV9hcnJheXMgPSBpdGVtLmZpbGUuYnl0ZV9hcnJheXMgfHwgW10KICAgICAgICAgICAgICBpdGVtLmZpbGUuYnl0ZV9hcnJheXMucHVzaChieXRlQXJyYXkpCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZih2aWRlby5kdXJhdGlvbiAtIHZpZGVvLmN1cnJlbnRUaW1lIDwgMC41KXsKICAgICAgICAgICAgbWVkaWFfc291cmNlLmVuZE9mU3RyZWFtKCkKICAgICAgICAgICAgY29uc29sZS5sb2coInZpZGVvIGZ1bGx5IGxvYWRlZCIpCiAgICAgICAgICAgIHJldHVybgogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICBzb3VyY2VfbG9hZChtZWRpYV9zb3VyY2UsIGJ1ZmZlcl9sb2FkX3BhcnRzKQogICAgICAgIH0sIDEwMDApCiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGFwcGVuZGl0ZW0oZXh0LCBocmVmLCBjb250ZW50LCBmaWxlbmFtZSwgY29udGFpbmVyLCBpdGVtLCBtaW1ldHlwZSl7CiAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHkKICAgICAgICBsZXQgZWwgPSBudWxsCiAgICAgICAgY29uc29sZS5sb2coIm1pbWV0eXBlIiwgbWltZXR5cGUpCiAgICAgICAgaWYoWyJqcGciLCAianBlZyIsICJwbmciLCAid2VicCIsICJtcDQiLCAid2VibSIsICJtcDMiLCAiYWFjIiwgIndhdiIsICJvZ2ciXS5pbmNsdWRlcyhleHQpKXsKICAgICAgICAgIGlmKG1pbWV0eXBlLm1hdGNoKC92aWRlb1wvLykpewogICAgICAgICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIikKICAgICAgICAgIH1lbHNlIGlmKG1pbWV0eXBlLm1hdGNoKC9hdWRpb1wvLykpewogICAgICAgICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImF1ZGlvIikKICAgICAgICAgICAgZWwuY29udHJvbHMgPSAxCiAgICAgICAgICAgIHNvdXJjZV9lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpCiAgICAgICAgICAgIHNvdXJjZV9lbC5zcmMgPSBocmVmCiAgICAgICAgICAgIHNvdXJjZV9lbC50eXBlID0gbWltZXR5cGUKICAgICAgICAgICAgZWwuYXBwZW5kKHNvdXJjZV9lbCkKICAgICAgICAgICAgCiAgICAgICAgICAgIGVsLm9uZW5kZWQgPSBmdW5jdGlvbigpewogICAgICAgICAgICAgIGNvbnN0IGF1ZGlvX2VsZW1lbnRzID0gWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImF1ZGlvIildCiAgICAgICAgICAgICAgY29uc3QgZW5kZWRfaW5kZXggPSBhdWRpb19lbGVtZW50cy5pbmRleE9mKHRoaXMpCiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgaWYoZW5kZWRfaW5kZXggPCBhdWRpb19lbGVtZW50cy5sZW5ndGgtMil7CiAgICAgICAgICAgICAgICBhdWRpb19lbGVtZW50c1tlbmRlZF9pbmRleCsxXS5wbGF5KCkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH1lbHNlIHsKICAgICAgICAgICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKQogICAgICAgICAgfQoKICAgICAgICAgIGVsLnNyYyA9IGhyZWYKICAgICAgICAgIAogICAgICAgICAgaWYoTWVkaWFTb3VyY2UuaXNUeXBlU3VwcG9ydGVkKG1pbWV0eXBlKSl7CiAgICAgICAgICAgIGxldCBtZWRpYV9zb3VyY2UgPSBuZXcgTWVkaWFTb3VyY2UKICAgICAgICAgICAgbWVkaWFfc291cmNlLml0ZW0gPSBpdGVtCiAgICAgICAgICAgIG1lZGlhX3NvdXJjZS52aWRlbyA9IGVsCiAgICAgICAgICAgIG1lZGlhX3NvdXJjZS5leHQgPSBleHQKICAgICAgICAgICAgbWVkaWFfc291cmNlLnR5cGUgPSBtaW1ldHlwZQogICAgICAgICAgICBtZWRpYV9zb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigic291cmNlb3BlbiIsIHNvdXJjZV9vcGVuKQogICAgICAgICAgICBlbC5jb250cm9scyA9IDEKICAgICAgICAgICAgZWwucHJlbG9hZCA9ICJhdXRvIgogICAgICAgICAgICBlbC5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG1lZGlhX3NvdXJjZSkKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZigidHh0IiA9PSBleHQpewogICAgICAgICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKQogICAgICAgICAgZWwuaW5uZXJUZXh0ID0gYXRvYihjb250ZW50KQogICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgiaW5saW5lLXRleHQiKQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZihlbCl7CiAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCJpdGVtIikKICAgICAgICAgIGVsLmRhdGFzZXQuZmlsZW5hbWUgPSBmaWxlbmFtZQogICAgICAgICAgY29udGFpbmVyLmFwcGVuZChlbCkKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIGVzY2FwZUh0bWwodW5zYWZlKXsKICAgICAgICByZXR1cm4gdW5zYWZlLnJlcGxhY2VBbGwoJyYnLCAnJmFtcDsnKS5yZXBsYWNlQWxsKCc8JywgJyZsdDsnKS5yZXBsYWNlQWxsKCc+JywgJyZndDsnKQogICAgICAgICAgLnJlcGxhY2VBbGwoJyInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgiJyIsICcmIzAzOTsnKQogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiB1cGRhdGVfZWxlbWVudHMoKXsKICAgICAgICBsZXQgbGlzdCA9IGRvY3VtZW50LmJvZHkKICAgICAgICBsZXQgZWxlbWVudHMgPSBBcnJheS5mcm9tKGxpc3QucXVlcnlTZWxlY3RvckFsbCgiLmVsZW1lbnQiKSkKICAgICAgICAKICAgICAgICBpZihvcHRpb25zLmluY2x1ZGVzKCIvc29ydG5hbWUiKSl7CiAgICAgICAgICBlbGVtZW50cy5zb3J0KChhLGIpID0+IGEuZGF0YXNldC5maWxlbmFtZSA+IGIuZGF0YXNldC5maWxlbmFtZSA/IDEgOiAtMSkKICAgICAgICAgICAgLmZvckVhY2gobm9kZT0+bGlzdC5hcHBlbmRDaGlsZChub2RlKSkKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIHRhZ3NodG1sKHRhZ3MpewogICAgICAgIHJldHVybiB0YWdzLnNsaWNlKDAsIDEwKS5tYXAodCA9PiB7CiAgICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKQogICAgICAgICAgYS5ocmVmID0gIiMiCiAgICAgICAgICBhLmRhdGFzZXQuYWN0aW9uID0gInRhZyIKICAgICAgICAgIGEuZGF0YXNldC52YWx1ZSA9IHRbMV0KICAgICAgICAgIGEuaW5uZXJUZXh0ID0gIiMiICsgdFsxXQogICAgICAgICAgcmV0dXJuIGEub3V0ZXJIVE1MCiAgICAgICAgfSkuam9pbigiICIpCiAgICAgIH0KICAgICAgCiAgICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZWNvbnRlbnQoaXRlbSwgZmV2ZW50LCBmbmFtZSwgaW5saW5lKXsKICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKQogICAgICAgIGxldCBmaWxlID0gbnVsbAogICAgICAgIAogICAgICAgIGlmKCFpdGVtKXsKICAgICAgICAgIHRyeXsKICAgICAgICAgICAgZmlsZSA9IEpTT04ucGFyc2UoZmV2ZW50LmZldmVudC5jb250ZW50KQogICAgICAgICAgfWNhdGNoKGUpewogICAgICAgICAgICByZXR1cm4KICAgICAgICAgIH0KCiAgICAgICAgICBhLmhyZWYgPSAiIyIgKyBmZXZlbnQuZmV2ZW50LmlkICsgb3B0aW9ucy5qb2luKCIiKQogICAgICAgICAgYS5pbm5lclRleHQgPSBmaWxlLm5hbWUgfHwgImZpbGUiCgogICAgICAgICAgbGV0IG1zZyA9IFsiZm91bmQgZmlsZSIsIGEub3V0ZXJIVE1MLCAuLi5bZmV2ZW50LmZldmVudC50YWdzLmxlbmd0aCA+IDAgJiYgInwgIiArIHRhZ3NodG1sKGZldmVudC5mZXZlbnQudGFncykgfHwgIiJdLCAifCIsIHBhcnNlSW50KGZldmVudC5mZXZlbnQuY3JlYXRlZF9hdCwgMTApXQogICAgICAgICAgCiAgICAgICAgICBpZihmaWxlLmNvbW1lbnQpewogICAgICAgICAgICBtc2cucHVzaCgifCIsIGVzY2FwZUh0bWwoZmlsZS5jb21tZW50KSkKICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgaW5mbygnPGRpdiBjbGFzcz0icGxhY2Vob2xkZXIiPicgKyBtc2cuam9pbigiICIpICsgJzwvZGl2PicsIHRydWUsIHRydWUsIFsiZWxlbWVudCIsICJmaWxldHlwZS0iICsgZXh0ZW5zaW9uKGZpbGUubmFtZSldLCBmaWxlLCBmZXZlbnQuZmV2ZW50LmlkLCBmZXZlbnQuc29ja2V0KQogICAgICAgICAgcmV0dXJuCiAgICAgICAgfQoKICAgICAgICBmaWxlID0gZmlsZSB8fCBpdGVtLmV2ZW50ICYmIGZpbGVfZXZlbnQoaXRlbS5ldmVudC5pZCkgfHwgbnVsbAogICAgICAgIGxldCBuYW1lID0gZmlsZSAmJiBmaWxlbmFtZShmaWxlKSB8fCBmbmFtZSB8fCAiZmlsZSIKICAgICAgICBsZXQgYmFzZTY0bWF0Y2ggPSBpdGVtLnVybC5zdWJzdHIoMCwgMTAwMCkubWF0Y2goYmFzZTY0dXJsbWF0Y2hlcikKICAgICAgICBsZXQgbWltZXR5cGUgPSBiYXNlNjRtYXRjaCAmJiBiYXNlNjRtYXRjaFsyXQogICAgICAgIGNvbnN0IGV4dCA9IGV4dGVuc2lvbihuYW1lKSB8fCBtaW1ldHlwZS5zcGxpdCgiLyIpWzFdCiAgICAgICAgbGV0IGZpbGVvYmogPSBmaWxlICYmIEpTT04ucGFyc2UoZmlsZS5jb250ZW50KSB8fCBudWxsCiAgICAgICAgbGV0IGNvbnRlbnQgPSBudWxsCiAgICAgICAgCiAgICAgICAgaWYoYmFzZTY0bWF0Y2gpewogICAgICAgICAgY29udGVudCA9IGl0ZW0udXJsLnN1YnN0cihiYXNlNjRtYXRjaFsxXS5sZW5ndGgsIGl0ZW0udXJsLmxlbmd0aCkKICAgICAgICAgIGEuaHJlZiA9IGF3YWl0IGJsb2J1cmwoY29udGVudCwgbWltZXR5cGUpCiAgICAgICAgfWVsc2V7CiAgICAgICAgICBhLmhyZWYgPSBpdGVtLnVybAogICAgICAgIH0KICAgICAgICAKICAgICAgICBhLmlubmVyVGV4dCA9IG5hbWUKICAgICAgICAKICAgICAgICBpZighWyJqcGciLCAianBlZyIsICJwbmciLCAid2VicCIsICJtcDQiXS5pbmNsdWRlcyhleHQpKXsKICAgICAgICAgIGEuZG93bmxvYWQgPSBuYW1lCiAgICAgICAgfQoKICAgICAgICBpbmZvKFsiZG93bmxvYWRlZCIsIGl0ZW0uZXZlbnQuaWQuc3Vic3RyKC0xMCksIGEub3V0ZXJIVE1MXS5qb2luKCIgIiksIHRydWUsIHRydWUsICJlbGVtZW50IiwgZmlsZSkKICAgICAgICAKICAgICAgICBpZighb3B0aW9ucy5pbmNsdWRlcygiL2lubGluZWFsbCIpICYmIGZpbGVvYmogJiYgZmlsZW9iai5jb21tZW50KXsKICAgICAgICAgIGluZm8oWyJjb21tZW50OiIsIGVzY2FwZUh0bWwoZmlsZW9iai5jb21tZW50KV0uam9pbigiICIpLCB0cnVlLCB0cnVlLCAiZWxlbWVudCIsIGZpbGUpCiAgICAgICAgfQoKICAgICAgICBpZighb3B0aW9ucy5pbmNsdWRlcygiL2lubGluZWFsbCIpICYmIGZpbGUgJiYgZmlsZS50YWdzLmxlbmd0aCA+IDApewogICAgICAgICAgaW5mbyhbImZpbGUgdGFnczoiLCB0YWdzaHRtbChmaWxlLnRhZ3MpXS5qb2luKCIgIiksIHRydWUsIHRydWUsICJlbGVtZW50IiwgZmlsZSkKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoaW5saW5lID09IGZhbHNlIHx8ICghb3B0aW9ucy5pbmNsdWRlcygiL2lubGluZSIpICYmICFvcHRpb25zLmluY2x1ZGVzKCIvaW5saW5lYWxsIikgJiYgIW9wdGlvbnMuaW5jbHVkZXMoIi9nYWxsZXJ5IikpKXsKICAgICAgICAgIHJldHVybgogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZighYS5kb3dubG9hZCAmJiBvcHRpb25zLmluY2x1ZGVzKCIvaW5saW5lYWxsIikpewogICAgICAgICAgbGV0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpCiAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgicm93IikKICAgICAgICAgIGFwcGVuZGl0ZW0oZXh0LCBhLmhyZWYsIGNvbnRlbnQsIGZpbGVvYmoubmFtZSwgY29udGFpbmVyLCBpdGVtLCBtaW1ldHlwZSkKICAgICAgICAgIGxldCBjb21tZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpCgogICAgICAgICAgaWYoZmlsZW9iai5uYW1lKXsKICAgICAgICAgICAgY29tbWVudC5pbm5lckhUTUwgKz0gIjxwPiIgKyBlc2NhcGVIdG1sKGZpbGVvYmoubmFtZSkgKyAiPC9wPiIKICAgICAgICAgIH0KCiAgICAgICAgICBpZihmaWxlb2JqLmNvbW1lbnQpewogICAgICAgICAgICBjb21tZW50LmlubmVySFRNTCArPSBlc2NhcGVIdG1sKGZpbGVvYmouY29tbWVudCkgfHwgIiIKICAgICAgICAgIH0KCiAgICAgICAgICBpZihmaWxlLnRhZ3MubGVuZ3RoID4gMCl7CiAgICAgICAgICAgIGNvbW1lbnQuaW5uZXJIVE1MICs9ICI8cD50YWdzOiAiICsgdGFnc2h0bWwoZmlsZS50YWdzKSArICI8L3A+IgogICAgICAgICAgfQoKICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoY29tbWVudCkKICAgICAgICAgIGl0ZW0uY29udGFpbmVyLmFwcGVuZChjb250YWluZXIpCiAgICAgICAgICBpdGVtLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIucGxhY2Vob2xkZXIiKS5yZW1vdmUoKQogICAgICAgIH1lbHNlewogICAgICAgICAgaWYoY29udGVudCl7CiAgICAgICAgICAgIGFwcGVuZGl0ZW0oZXh0LCBhLmhyZWYsIGNvbnRlbnQsIGZpbGVvYmogJiYgZmlsZW9iai5uYW1lIHx8ICJmaWxlLiIgKyBleHQsIGl0ZW0uY29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHksIGl0ZW0sIG1pbWV0eXBlKQogICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJjb250ZW50IG1pc3NpbmcuIHBhcnRzIGxvYWRlZCBpbiB3cm9uZyBvcmRlcj8iKQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgY2xhc3MgUmVzSGFuZGxlciB7CiAgICAgICAgY29uc3RydWN0b3Ioc29ja2V0LCBrZXksIHR5cGUsIGVycnR5cGUsIHJlc29sdmUsIHJlamVjdCl7CiAgICAgICAgICB0aGlzLl9zb2NrZXQgPSBzb2NrZXQKICAgICAgICAgIHRoaXMua2V5ID0ga2V5CiAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlIHx8ICJFT1NFIgogICAgICAgICAgdGhpcy5lcnJ0eXBlID0gZXJydHlwZSB8fCAiTk9USUNFIgogICAgICAgICAgdGhpcy5ldmVudHMgPSBbXQogICAgICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZQogICAgICAgICAgdGhpcy5yZWplY3QgPSByZWplY3QKICAgICAgICB9CgogICAgICAgIGdldCBzb2NrZXQoKXsKICAgICAgICAgIHJldHVybiB0aGlzLl9zb2NrZXQKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaGFuZGxlKHJlcyl7CiAgICAgICAgICBsZXQgbyA9IEpTT04ucGFyc2UocmVzLmRhdGEpCiAgICAgICAgICBpZih0aGlzLmtleSA9PSBudWxsIHx8IG9bMV0gPT0gdGhpcy5rZXkpewogICAgICAgICAgICBpZihvWzBdID09IHRoaXMudHlwZSl7CiAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlKFt0aGlzLmV2ZW50cywgb10pCiAgICAgICAgICAgICAgcmVzaGFuZGxlcnMuc3BsaWNlKHJlc2hhbmRsZXJzLmluZGV4T2YodGhpcyksIDEpCiAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgIH1lbHNlIGlmKG9bMF0gPT0gdGhpcy5lcnJ0eXBlKXsKICAgICAgICAgICAgICB0aGlzLnJlamVjdChbdGhpcy5ldmVudHMsIG9dKQogICAgICAgICAgICAgIHJlc2hhbmRsZXJzLnNwbGljZShyZXNoYW5kbGVycy5pbmRleE9mKHRoaXMpLCAxKQogICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuZXZlbnRzLnB1c2gob1syXSkKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIHdhaXRyZXMoc29ja2V0LCBrZXksIHR5cGUsIGVycnR5cGUpewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgICAgICBsZXQgaGFuZGxlciA9IG5ldyBSZXNIYW5kbGVyKHNvY2tldCwga2V5LCB0eXBlLCBlcnJ0eXBlLCByZXNvbHZlLCByZWplY3QpCiAgICAgICAgICByZXNoYW5kbGVycy5wdXNoKGhhbmRsZXIpCiAgICAgICAgfSkKICAgICAgfQoKICAgICAgYXN5bmMgZnVuY3Rpb24gYmxvYnVybChjb250ZW50LCBtaW1ldHlwZSl7CiAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IGI2NHRvQmxvYihjb250ZW50LCBtaW1ldHlwZSkKICAgICAgICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKQogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiBjb25uZWN0KHVybCl7CiAgICAgICAgbGV0IHNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJsKQogICAgICAgIHNvY2tldC5vbm1lc3NhZ2UgPSBtZXNzYWdlID0+IHJlc2hhbmRsZXJzLmZvckVhY2gocmggPT4gcmguaGFuZGxlKG1lc3NhZ2UpKQogICAgICAgIHJldHVybiBzb2NrZXQKICAgICAgfQoKICAgICAgYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGFzeW5jICgpID0+IHsKICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdFtvcHRpb25zLmluY2x1ZGVzKCIvZ2FsbGVyeSIpICYmICJhZGQiIHx8ICJyZW1vdmUiXSgiZ2FsbGVyeSIpCiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3Rbb3B0aW9ucy5pbmNsdWRlcygiL2lubGluZWFsbCIpICYmICJhZGQiIHx8ICJyZW1vdmUiXSgiaW5saW5lYWxsIikKCiAgICAgICAgZm9yKGxldCB1cmwgb2YgcmVsYXlzKXsKICAgICAgICAgIGNvbnN0IHNvY2tldCA9IGNvbm5lY3QodXJsKQogICAgICAgICAgc29ja2V0cy5wdXNoKHNvY2tldCkKICAgICAgICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgICBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcigib3BlbiIsIGFzeW5jIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgYXdhaXQgcmVsYXltYWluKHRoaXMpCiAgICAgICAgICAgICAgcmVzb2x2ZSgpCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9KQogICAgICAgICAgCiAgICAgICAgICBpZihvcHRpb25zLmluY2x1ZGVzKCIvc3luYyIpKXsKICAgICAgICAgICAgYXdhaXQgcHJvbWlzZQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSkKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=
arrow=$(echo 'Pgo=' | base64 --decode); h="#"; d="."; echo '["REQ","q",{"authors":["12daa8df16d9a5d232c14601571a5bf155329a0725aa31af58e7826f8ebd6f1c"], "limit":1, "'${h}'d": ["fileloader'${d}'html"]}]' | websocat -n1 wss://relay${d}nostr${d}band | eval 'jq -r ".[2] .content" '$arrow' /tmp/fileloader'${d}'html' && firefox /tmp/fileloader${d}html