{"title":"Blacklight Inspection","page_title":"Luxior Immobilier - Agences Immobilières à Brest et Quimper","uri_ins":"http://www.luxior-immobilier.com/","uri_dest":"https://luxior-immobilier.com/","uri_redirects":[],"secure_connection":{},"host":"www.luxior-immobilier.com","config":{"emulateDevice":{"name":"Pixel 4a (5G)","userAgent":"Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36","viewport":{"width":353,"height":745,"deviceScaleFactor":3,"isMobile":true,"hasTouch":true,"isLandscape":false}},"cleareCache":true,"captureHar":true,"captureLinks":false,"enableAdBlock":false,"saveBrowserProfile":false,"numPages":2,"defaultTimeout":35000,"defaultWaitUntil":"networkidle2","headless":true,"headers":{},"extraChromiumArgs":["--disable-features=TrackingProtection3pcd","--website-analysis-scan=1c3b43a3-cb2d-4474-92ad-1471377d558c"],"extraPuppeteerOptions":{}},"browser":{"name":"Chromium","version":"Chrome/127.0.6533.88","user_agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/127.0.0.0 Safari/537.36","platform":{"name":"Linux","version":"6.12.113+deb13-amd64"}},"script":{"host":"e3f439274309","version":{"npm":"3.11.0","commit":"dev"},"node_version":"v24.22.0"},"start_time":"2026-10-22T10:56:55.196Z","end_time":"2026-10-22T10:57:17.706Z","browsing_history":["https://luxior-immobilier.com/","https://luxior-immobilier.com/","https://luxior-immobilier.com/faire-gerer/"],"hosts":{"requests":{"first_party":["www.luxior-immobilier.com","luxior-immobilier.com"],"third_party":["fonts.googleapis.com","www.googletagmanager.com","fonts.gstatic.com","analytics.google.com","stats.g.doubleclick.net","www.google.ru","www.google.com","geo.wpforms.com"]}},"reports":{"behaviour_event_listeners":{"KEYBOARD":{"https://luxior-immobilier.com/wp-includes/js/jquery/jquery.min.js":["keydown","keypress","input","keyup"],"https://luxior-immobilier.com/wp-content/litespeed/js/2aabb12c71bb57ed8612d194cacd2f08.js?ver=5dbb3":["keypress","keydown"],"blob:https://luxior-immobilier.com/4c95950b-d909-4b7f-8e23-7e32519e552b":["keydown"],"https://www.googletagmanager.com/gtag/js?id=GT-5NXWBGV":["keyup"],"https://luxior-immobilier.com/faire-gerer/":["keydown"],"https://luxior-immobilier.com/wp-content/litespeed/js/9f04ec3dbaeee1b2be986c5d131f1165.js?ver=5dbb3":["keypress","keydown"],"blob:https://luxior-immobilier.com/f4da4b2f-4fb3-410d-a2c0-465153be0d6b":["keydown"],"https://luxior-immobilier.com/":["keydown"],"data:text/javascript;base64,KGZ1bmN0aW9uKCl7dmFyIGRlYm91bmNlVGltZXI9bnVsbDt2YXIgYWN0aXZlU3VnZ2VzdGlvbkluZGV4PS0xO2Z1bmN0aW9uIGdldExvY2F0aW9uU2NvcGUoaW5wdXQpe3JldHVybiBpbnB1dC5jbG9zZXN0KCcubHV4aW9yLWZpbHRlci12aWxsZXMsIC5sdXhpb3ItZ2xvYmFsLWZpbHRlci12aWxsZSwgLmx1eGlvci1nbG9iYWwtc2VhcmNoLWZvcm0sIGZvcm0nKXx8ZG9jdW1lbnR9CmZ1bmN0aW9uIGdldEhpZGRlbkZpZWxkcyhzY29wZSl7c2NvcGU9c2NvcGV8fGRvY3VtZW50O3JldHVybntsYXQ6c2NvcGUucXVlcnlTZWxlY3RvcignLmx1eGlvci1nZW9sb2MtbGF0JyksbG5nOnNjb3BlLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItZ2VvbG9jLWxuZycpLGNwOnNjb3BlLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3Itc2VhcmNoLWNwJyksbG9jYWxpc2F0aW9uOnNjb3BlLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3Itc2VhcmNoLWxvY2FsaXNhdGlvbicpfX0KZnVuY3Rpb24gdXBkYXRlTG9jYXRpb25MYWJlbChzY29wZSxsYWJlbCl7dmFyIGRyb3Bkb3duTGFiZWw9c2NvcGUucXVlcnlTZWxlY3RvcignLmx1eGlvci1kcm9wZG93bi1sYWJlbCcpO3ZhciBnbG9iYWxMYWJlbD1zY29wZS5xdWVyeVNlbGVjdG9yKCcubHV4aW9yLXR4dC1sb2NhbGlzYXRpb24nKTtpZihkcm9wZG93bkxhYmVsKXtkcm9wZG93bkxhYmVsLnRleHRDb250ZW50PWxhYmVsfQppZihnbG9iYWxMYWJlbCl7Z2xvYmFsTGFiZWwudGV4dENvbnRlbnQ9bGFiZWx9fQpmdW5jdGlvbiBnZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpe3ZhciBsb2NhdGlvbnM9W107c2NvcGUucXVlcnlTZWxlY3RvckFsbCgnLmx1eGlvci1sb2NhdGlvbi1jaGlwJykuZm9yRWFjaChmdW5jdGlvbihjaGlwKXtsb2NhdGlvbnMucHVzaCh7bGFiZWw6Y2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwnKXx8Y2hpcC50ZXh0Q29udGVudC5yZXBsYWNlKCfDlycsJycpLnRyaW0oKSxsYXQ6Y2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF0Jyl8fCcnLGxuZzpjaGlwLmdldEF0dHJpYnV0ZSgnZGF0YS1sbmcnKXx8JycsY3A6Y2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY3AnKXx8JycsdmlsbGU6Y2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmlsbGUnKXx8Jyd9KX0pO3JldHVybiBsb2NhdGlvbnN9CmZ1bmN0aW9uIGxvY2F0aW9uSWRlbnRpdHkobG9jKXtyZXR1cm4obG9jLnZpbGxlfHxsb2MubGFiZWx8fCcnKS50b0xvd2VyQ2FzZSgpKyd8JysobG9jLmNwfHwnJyl9CmZ1bmN0aW9uIGdldEFwaU9ubHlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpe3JldHVybiBnZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpLmZpbHRlcihmdW5jdGlvbihsb2Mpe3JldHVybiBsb2MubGF0JiZsb2MubG5nfSl9CmZ1bmN0aW9uIGdldENhdGFsb2dWaWxsZXNGcm9tQ2hpcHMoc2NvcGUpe3JldHVybiBnZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpLmZpbHRlcihmdW5jdGlvbihsb2Mpe3JldHVybiFsb2MubGF0fHwhbG9jLmxuZ30pLm1hcChmdW5jdGlvbihsb2Mpe3JldHVybiBsb2MudmlsbGV8fGxvYy5sYWJlbH0pLmZpbHRlcihCb29sZWFuKX0KZnVuY3Rpb24gc3luY0xvY2F0aW9uSGlkZGVuRmllbGRzKHNjb3BlKXt2YXIgZmllbGRzPWdldEhpZGRlbkZpZWxkcyhzY29wZSk7dmFyIGxvY2F0aW9ucz1nZXRBcGlPbmx5TG9jYXRpb25zRnJvbUNoaXBzKHNjb3BlKTtpZighZmllbGRzLmxhdHx8IWZpZWxkcy5sbmd8fCFmaWVsZHMubG9jYWxpc2F0aW9ufHwhZmllbGRzLmNwKXtzeW5jQ2F0YWxvZ1ZpbGxlc0hpZGRlbihzY29wZSk7cmV0dXJufQppZighbG9jYXRpb25zLmxlbmd0aCl7ZmllbGRzLmxhdC52YWx1ZT0nJztmaWVsZHMubG5nLnZhbHVlPScnO2ZpZWxkcy5sb2NhbGlzYXRpb24udmFsdWU9Jyc7ZmllbGRzLmNwLnZhbHVlPScnO3Njb3BlLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1hcGktc2VhcmNoJyl9ZWxzZXtmaWVsZHMubGF0LnZhbHVlPWxvY2F0aW9ucy5tYXAoZnVuY3Rpb24obG9jKXtyZXR1cm4gbG9jLmxhdH0pLmpvaW4oJywnKTtmaWVsZHMubG5nLnZhbHVlPWxvY2F0aW9ucy5tYXAoZnVuY3Rpb24obG9jKXtyZXR1cm4gbG9jLmxuZ30pLmpvaW4oJywnKTtmaWVsZHMubG9jYWxpc2F0aW9uLnZhbHVlPWxvY2F0aW9ucy5tYXAoZnVuY3Rpb24obG9jKXtyZXR1cm4gbG9jLmxhYmVsfSkuam9pbignfCcpO2ZpZWxkcy5jcC52YWx1ZT1sb2NhdGlvbnMubWFwKGZ1bmN0aW9uKGxvYyl7cmV0dXJuIGxvYy5jcH0pLmpvaW4oJ3wnKTtzY29wZS5jbGFzc0xpc3QuYWRkKCdoYXMtYXBpLXNlYXJjaCcpfQpzeW5jQ2F0YWxvZ1ZpbGxlc0hpZGRlbihzY29wZSl9CmZ1bmN0aW9uIHN5bmNDYXRhbG9nVmlsbGVzSGlkZGVuKHNjb3BlKXt2YXIgaGlkZGVuPXNjb3BlLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItY2F0YWxvZy12aWxsZXMtaGlkZGVuJyk7aWYoIWhpZGRlbil7cmV0dXJufQpoaWRkZW4udmFsdWU9Z2V0Q2F0YWxvZ1ZpbGxlc0Zyb21DaGlwcyhzY29wZSkuam9pbignLCcpfQpmdW5jdGlvbiBzeW5jQ2F0YWxvZ0l0ZW1TdGF0ZXMoc2NvcGUpe3ZhciBzZWxlY3RlZD17fTtnZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpLmZvckVhY2goZnVuY3Rpb24obG9jKXt2YXIga2V5PShsb2MudmlsbGV8fGxvYy5sYWJlbHx8JycpLnRvTG93ZXJDYXNlKCk7aWYoa2V5KXtzZWxlY3RlZFtrZXldPSEwfX0pO3Njb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5sdXhpb3ItY2F0YWxvZy12aWxsZS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbihidG4pe3ZhciB2aWxsZT1idG4uZ2V0QXR0cmlidXRlKCdkYXRhLXZpbGxlJyl8fGJ0bi50ZXh0Q29udGVudC50cmltKCk7YnRuLmNsYXNzTGlzdC50b2dnbGUoJ2lzLXNlbGVjdGVkJywhIXNlbGVjdGVkW3ZpbGxlLnRvTG93ZXJDYXNlKCldKX0pfQpmdW5jdGlvbiB1cGRhdGVDb21iaW5lZExvY2F0aW9uTGFiZWwoc2NvcGUpe3ZhciBsYWJlbHM9W107Z2V0QXBpTG9jYXRpb25zRnJvbUNoaXBzKHNjb3BlKS5mb3JFYWNoKGZ1bmN0aW9uKGxvYyl7aWYobGFiZWxzLmluZGV4T2YobG9jLmxhYmVsKT09PS0xKXtsYWJlbHMucHVzaChsb2MubGFiZWwpfX0pO3VwZGF0ZUxvY2F0aW9uTGFiZWwoc2NvcGUsbGFiZWxzLmxlbmd0aD9sYWJlbHMuam9pbignLCAnKTonTG9jYWxpc2F0aW9uJyl9CmZ1bmN0aW9uIHVwZGF0ZUxvY2F0aW9uUGxhY2Vob2xkZXIoc2NvcGUpe3ZhciBpbnB1dD1zY29wZS5xdWVyeVNlbGVjdG9yKCcubHV4aW9yLXZpbGxlcy1zZWFyY2gtaW5wdXQsIC5sdXhpb3ItZ2xvYmFsLXZpbGxlcy1zZWFyY2gtZmllbGQnKTtpZighaW5wdXQpcmV0dXJuO3ZhciBoYXNDaGlwcz1nZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpLmxlbmd0aD4wO2lucHV0LnBsYWNlaG9sZGVyPWhhc0NoaXBzPydBam91dGVyIHVuZSB2aWxsZS4uLic6J1ZpbGxlLCBjb2RlIHBvc3RhbC4uLid9CmZ1bmN0aW9uIGJ1aWxkQ2hpcHNGcm9tSGlkZGVuRmllbGRzKHNjb3BlKXtpZihnZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpLmxlbmd0aCl7c3luY0NhdGFsb2dJdGVtU3RhdGVzKHNjb3BlKTtyZXR1cm59CnZhciBmaWVsZHM9Z2V0SGlkZGVuRmllbGRzKHNjb3BlKTtpZihmaWVsZHMubGF0JiZmaWVsZHMubGF0LnZhbHVlJiZmaWVsZHMubG5nJiZmaWVsZHMubG5nLnZhbHVlKXt2YXIgbGF0cz1maWVsZHMubGF0LnZhbHVlLnNwbGl0KCcsJyk7dmFyIGxuZ3M9ZmllbGRzLmxuZy52YWx1ZS5zcGxpdCgnLCcpO3ZhciBsYWJlbHM9ZmllbGRzLmxvY2FsaXNhdGlvbiYmZmllbGRzLmxvY2FsaXNhdGlvbi52YWx1ZT9maWVsZHMubG9jYWxpc2F0aW9uLnZhbHVlLnNwbGl0KCd8Jyk6W107dmFyIGNwcz1maWVsZHMuY3AmJmZpZWxkcy5jcC52YWx1ZT9maWVsZHMuY3AudmFsdWUuc3BsaXQoJ3wnKTpbXTtsYXRzLmZvckVhY2goZnVuY3Rpb24obGF0LGluZGV4KXt2YXIgbG5nPWxuZ3NbaW5kZXhdfHwnJztpZighbGF0fHwhbG5nKXtyZXR1cm59CmNyZWF0ZUxvY2F0aW9uQ2hpcChzY29wZSx7bGFiZWw6bGFiZWxzW2luZGV4XXx8JycsbGF0OmxhdCxsbmc6bG5nLGNwOmNwc1tpbmRleF18fCcnLHZpbGxlOicnfSwhMCl9KX0KdmFyIGNhdGFsb2dIaWRkZW49c2NvcGUucXVlcnlTZWxlY3RvcignLmx1eGlvci1jYXRhbG9nLXZpbGxlcy1oaWRkZW4nKTt2YXIgY2F0YWxvZ1ZhbHVlPWNhdGFsb2dIaWRkZW4/Y2F0YWxvZ0hpZGRlbi52YWx1ZTonJztpZighY2F0YWxvZ1ZhbHVlKXt2YXIgdXJsUGFyYW1zPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7Y2F0YWxvZ1ZhbHVlPXVybFBhcmFtcy5nZXQoJ2ZpbHRyZXJfdmlsbGUnKXx8Jyd9CmlmKGNhdGFsb2dWYWx1ZSl7Y2F0YWxvZ1ZhbHVlLnNwbGl0KCcsJykuZm9yRWFjaChmdW5jdGlvbih2aWxsZSl7dmlsbGU9dmlsbGUudHJpbSgpO2lmKHZpbGxlKXthZGRDYXRhbG9nVmlsbGUoc2NvcGUsdmlsbGUsITApfX0pfQpzeW5jQ2F0YWxvZ0l0ZW1TdGF0ZXMoc2NvcGUpfQpmdW5jdGlvbiBhZGRDYXRhbG9nVmlsbGUoc2NvcGUsdmlsbGVOYW1lLHNraXBEdXBsaWNhdGVDaGVjayl7dmFyIGxvYz17bGFiZWw6dmlsbGVOYW1lLGxhdDonJyxsbmc6JycsY3A6JycsdmlsbGU6dmlsbGVOYW1lfTtpZighc2tpcER1cGxpY2F0ZUNoZWNrKXt2YXIgZXhpc3RzPWdldEFwaUxvY2F0aW9uc0Zyb21DaGlwcyhzY29wZSkuc29tZShmdW5jdGlvbihpdGVtKXtyZXR1cm4oaXRlbS52aWxsZXx8aXRlbS5sYWJlbHx8JycpLnRvTG93ZXJDYXNlKCk9PT12aWxsZU5hbWUudG9Mb3dlckNhc2UoKX0pO2lmKGV4aXN0cyl7cmV0dXJuITF9fQpjcmVhdGVMb2NhdGlvbkNoaXAoc2NvcGUsbG9jLCEwKTtzeW5jTG9jYXRpb25IaWRkZW5GaWVsZHMoc2NvcGUpO3N5bmNDYXRhbG9nSXRlbVN0YXRlcyhzY29wZSk7dXBkYXRlQ29tYmluZWRMb2NhdGlvbkxhYmVsKHNjb3BlKTt1cGRhdGVMb2NhdGlvblBsYWNlaG9sZGVyKHNjb3BlKTtyZXR1cm4hMH0KZnVuY3Rpb24gdG9nZ2xlQ2F0YWxvZ1ZpbGxlKHNjb3BlLHZpbGxlTmFtZSl7dmFyIG5vcm1hbGl6ZWQ9dmlsbGVOYW1lLnRvTG93ZXJDYXNlKCk7dmFyIGV4aXN0aW5nQ2hpcD1udWxsO3Njb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5sdXhpb3ItbG9jYXRpb24tY2hpcCcpLmZvckVhY2goZnVuY3Rpb24oY2hpcCl7dmFyIGNoaXBWaWxsZT0oY2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmlsbGUnKXx8Y2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwnKXx8JycpLnRvTG93ZXJDYXNlKCk7aWYoY2hpcFZpbGxlPT09bm9ybWFsaXplZCl7ZXhpc3RpbmdDaGlwPWNoaXB9fSk7aWYoZXhpc3RpbmdDaGlwKXtleGlzdGluZ0NoaXAucmVtb3ZlKCk7c3luY0xvY2F0aW9uSGlkZGVuRmllbGRzKHNjb3BlKX1lbHNle2FkZENhdGFsb2dWaWxsZShzY29wZSx2aWxsZU5hbWUpO3JldHVybn0Kc3luY0NhdGFsb2dJdGVtU3RhdGVzKHNjb3BlKTt1cGRhdGVDb21iaW5lZExvY2F0aW9uTGFiZWwoc2NvcGUpO3VwZGF0ZUxvY2F0aW9uUGxhY2Vob2xkZXIoc2NvcGUpfQpmdW5jdGlvbiBjcmVhdGVMb2NhdGlvbkNoaXAoc2NvcGUsbG9jLHNraXBEdXBsaWNhdGVDaGVjayl7aWYoIXNraXBEdXBsaWNhdGVDaGVjayl7dmFyIGV4aXN0cz1nZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpLnNvbWUoZnVuY3Rpb24oaXRlbSl7cmV0dXJuIGxvY2F0aW9uSWRlbnRpdHkoaXRlbSk9PT1sb2NhdGlvbklkZW50aXR5KGxvYyl9KTtpZihleGlzdHMpe3JldHVybiExfX0KdmFyIGNoaXBzV3JhcD1zY29wZS5xdWVyeVNlbGVjdG9yKCcubHV4aW9yLWxvY2F0aW9uLWNoaXBzJyk7aWYoIWNoaXBzV3JhcCl7Y2hpcHNXcmFwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2NoaXBzV3JhcC5jbGFzc05hbWU9J2x1eGlvci1sb2NhdGlvbi1jaGlwcyc7dmFyIHNlYXJjaEJveD1zY29wZS5xdWVyeVNlbGVjdG9yKCcubHV4aW9yLWRyb3Bkb3duLXNlYXJjaC1ib3gsIC5sdXhpb3ItZ2xvYmFsLXNlYXJjaC1ib3gtd3JhcHBlcicpO2lmKHNlYXJjaEJveCl7c2VhcmNoQm94LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaXBzV3JhcCxzZWFyY2hCb3gpfX0KdmFyIGNoaXA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO2NoaXAuY2xhc3NOYW1lPSdsdXhpb3ItbG9jYXRpb24tY2hpcCc7Y2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwnLGxvYy5sYWJlbCk7Y2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbGF0Jyxsb2MubGF0KTtjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1sbmcnLGxvYy5sbmcpO2NoaXAuc2V0QXR0cmlidXRlKCdkYXRhLWNwJyxsb2MuY3B8fCcnKTtjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS12aWxsZScsbG9jLnZpbGxlfHwnJyk7Y2hpcC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsb2MubGFiZWwpKTt2YXIgcmVtb3ZlQnRuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO3JlbW92ZUJ0bi50eXBlPSdidXR0b24nO3JlbW92ZUJ0bi5jbGFzc05hbWU9J2x1eGlvci1sb2NhdGlvbi1jaGlwLXJlbW92ZSc7cmVtb3ZlQnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsJ1JldGlyZXInKTtyZW1vdmVCdG4uaW5uZXJIVE1MPScmdGltZXM7JztjaGlwLmFwcGVuZENoaWxkKHJlbW92ZUJ0bik7Y2hpcHNXcmFwLmFwcGVuZENoaWxkKGNoaXApO3JldHVybiEwfQpmdW5jdGlvbiBhZGRBcGlMb2NhdGlvbihzY29wZSxmZWF0dXJlKXt2YXIgcHJvcHM9ZmVhdHVyZS5wcm9wZXJ0aWVzfHx7fTt2YXIgY29vcmRzPWZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXN8fFtdO3ZhciBsYWJlbD1wcm9wcy5sYWJlbHx8cHJvcHMuY2l0eXx8cHJvcHMubmFtZXx8Jyc7dmFyIHZpbGxlPShwcm9wcy5jaXR5fHwnJykudHJpbSgpO3ZhciBjcD0ocHJvcHMucG9zdGNvZGV8fCcnKS50cmltKCk7dmFyIGxvYz17bGFiZWw6bGFiZWwsbGF0OmNvb3Jkc1sxXXx8JycsbG5nOmNvb3Jkc1swXXx8JycsY3A6Y3AsdmlsbGU6dmlsbGV9O3ZhciBleGlzdHM9Z2V0QXBpTG9jYXRpb25zRnJvbUNoaXBzKHNjb3BlKS5zb21lKGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBsb2NhdGlvbklkZW50aXR5KGl0ZW0pPT09bG9jYXRpb25JZGVudGl0eShsb2MpfSk7aWYoZXhpc3RzKXtyZXR1cm4hMX0KY3JlYXRlTG9jYXRpb25DaGlwKHNjb3BlLGxvYyk7c3luY0xvY2F0aW9uSGlkZGVuRmllbGRzKHNjb3BlKTtzeW5jQ2F0YWxvZ0l0ZW1TdGF0ZXMoc2NvcGUpO3VwZGF0ZUNvbWJpbmVkTG9jYXRpb25MYWJlbChzY29wZSk7dXBkYXRlTG9jYXRpb25QbGFjZWhvbGRlcihzY29wZSk7cmV0dXJuITB9CmZ1bmN0aW9uIGZpbHRlckNhdGFsb2dMaXN0KHNjb3BlLHF1ZXJ5KXt2YXIgbm9ybWFsaXplZD0ocXVlcnl8fCcnKS50b0xvd2VyQ2FzZSgpO3Njb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5sdXhpb3ItY2F0YWxvZy12aWxsZS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbihidG4pe3ZhciB2aWxsZT0oYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS12aWxsZScpfHxidG4udGV4dENvbnRlbnR8fCcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtidG4uc3R5bGUuZGlzcGxheT0oIW5vcm1hbGl6ZWR8fHZpbGxlLmluZGV4T2Yobm9ybWFsaXplZCkhPT0tMSk/Jyc6J25vbmUnfSl9CmZ1bmN0aW9uIHRvZ2dsZUxlZ2FjeVBpY2tlcihzY29wZSxzaG93KXt2YXIgbGVnYWN5PXNjb3BlLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItdmlsbGVzLWxlZ2FjeS1waWNrZXInKTtpZihsZWdhY3kpe2xlZ2FjeS5zdHlsZS5kaXNwbGF5PXNob3c/Jyc6J25vbmUnfX0KZnVuY3Rpb24gYXBwbHlMb2NhdGlvblNlbGVjdGlvbihzY29wZSxmZWF0dXJlKXt2YXIgaW5wdXQ9c2NvcGUucXVlcnlTZWxlY3RvcignLmx1eGlvci12aWxsZXMtc2VhcmNoLWlucHV0LCAubHV4aW9yLWdsb2JhbC12aWxsZXMtc2VhcmNoLWZpZWxkJyk7YWRkQXBpTG9jYXRpb24oc2NvcGUsZmVhdHVyZSk7c2NvcGUuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2VhcmNoaW5nJyk7ZmlsdGVyQ2F0YWxvZ0xpc3Qoc2NvcGUsJycpO2lmKGlucHV0KXtpbnB1dC52YWx1ZT0nJ319CmZ1bmN0aW9uIGhpZGVTdWdnZXN0aW9ucyh3cmFwcGVyKXt2YXIgbGlzdD13cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zJyk7aWYobGlzdCl7bGlzdC5zdHlsZS5kaXNwbGF5PSdub25lJztsaXN0LmlubmVySFRNTD0nJ30KaWYod3JhcHBlcil7d3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCdoYXMtc3VnZ2VzdGlvbnMtb3BlbicpfQphY3RpdmVTdWdnZXN0aW9uSW5kZXg9LTF9CmZ1bmN0aW9uIHJlbmRlclN1Z2dlc3Rpb25zKHdyYXBwZXIsZmVhdHVyZXMpe3ZhciBsaXN0PXdyYXBwZXIucXVlcnlTZWxlY3RvcignLmx1eGlvci1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMnKTtpZighbGlzdClyZXR1cm47bGlzdC5pbm5lckhUTUw9Jyc7aWYoIWZlYXR1cmVzLmxlbmd0aCl7bGlzdC5zdHlsZS5kaXNwbGF5PSdub25lJzt3cmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1zdWdnZXN0aW9ucy1vcGVuJyk7cmV0dXJufQpmZWF0dXJlcy5mb3JFYWNoKGZ1bmN0aW9uKGZlYXR1cmUsaW5kZXgpe3ZhciBsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO2xpLnRleHRDb250ZW50PWZlYXR1cmUucHJvcGVydGllcy5sYWJlbDtsaS5kYXRhc2V0LmluZGV4PVN0cmluZyhpbmRleCk7bGkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJyxmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7YXBwbHlMb2NhdGlvblNlbGVjdGlvbihnZXRMb2NhdGlvblNjb3BlKHdyYXBwZXIpLGZlYXR1cmUpO2hpZGVTdWdnZXN0aW9ucyh3cmFwcGVyKX0pO2xpc3QuYXBwZW5kQ2hpbGQobGkpfSk7bGlzdC5zdHlsZS5kaXNwbGF5PSdibG9jayc7d3JhcHBlci5jbGFzc0xpc3QuYWRkKCdoYXMtc3VnZ2VzdGlvbnMtb3BlbicpO2FjdGl2ZVN1Z2dlc3Rpb25JbmRleD0tMX0KZnVuY3Rpb24gZmV0Y2hTdWdnZXN0aW9ucyh3cmFwcGVyLHF1ZXJ5KXtpZihxdWVyeS5sZW5ndGg8Mil7aGlkZVN1Z2dlc3Rpb25zKHdyYXBwZXIpO3JldHVybn0KZmV0Y2goJ2h0dHBzOi8vYXBpLWFkcmVzc2UuZGF0YS5nb3V2LmZyL3NlYXJjaC8/cT0nK2VuY29kZVVSSUNvbXBvbmVudChxdWVyeSkrJyZsaW1pdD02JnR5cGU9bXVuaWNpcGFsaXR5JykudGhlbihmdW5jdGlvbihyZXNwb25zZSl7cmV0dXJuIHJlc3BvbnNlLmpzb24oKX0pLnRoZW4oZnVuY3Rpb24oZGF0YSl7dmFyIGZlYXR1cmVzPShkYXRhJiZkYXRhLmZlYXR1cmVzKT9kYXRhLmZlYXR1cmVzOltdO3dyYXBwZXIuX2x1eGlvclN1Z2dlc3Rpb25zPWZlYXR1cmVzO3JlbmRlclN1Z2dlc3Rpb25zKHdyYXBwZXIsZmVhdHVyZXMpfSkuY2F0Y2goZnVuY3Rpb24oKXtoaWRlU3VnZ2VzdGlvbnMod3JhcHBlcil9KX0KZnVuY3Rpb24gZ2VvY29kZUZyZWVUZXh0KHF1ZXJ5KXtyZXR1cm4gZmV0Y2goJ2h0dHBzOi8vYXBpLWFkcmVzc2UuZGF0YS5nb3V2LmZyL3NlYXJjaC8/cT0nK2VuY29kZVVSSUNvbXBvbmVudChxdWVyeSkrJyZsaW1pdD0xJykudGhlbihmdW5jdGlvbihyZXNwb25zZSl7cmV0dXJuIHJlc3BvbnNlLmpzb24oKX0pLnRoZW4oZnVuY3Rpb24oZGF0YSl7aWYoZGF0YSYmZGF0YS5mZWF0dXJlcyYmZGF0YS5mZWF0dXJlc1swXSl7cmV0dXJuIGRhdGEuZmVhdHVyZXNbMF19CnJldHVybiBudWxsfSl9CmZ1bmN0aW9uIGVuc3VyZUxvY2F0aW9uQmVmb3JlU2VhcmNoKGNvbnRleHRTY29wZSl7dmFyIHNjb3BlPWNvbnRleHRTY29wZXx8ZG9jdW1lbnQ7dmFyIGlucHV0PXNjb3BlLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItdmlsbGVzLXNlYXJjaC1pbnB1dCwgLmx1eGlvci1nbG9iYWwtdmlsbGVzLXNlYXJjaC1maWVsZCcpO2lmKCFpbnB1dHx8IWlucHV0LnZhbHVlLnRyaW0oKSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfQp2YXIgbG9jYXRpb25TY29wZT1nZXRMb2NhdGlvblNjb3BlKGlucHV0KTtyZXR1cm4gZ2VvY29kZUZyZWVUZXh0KGlucHV0LnZhbHVlLnRyaW0oKSkudGhlbihmdW5jdGlvbihmZWF0dXJlKXtpZihmZWF0dXJlKXthZGRBcGlMb2NhdGlvbihsb2NhdGlvblNjb3BlLGZlYXR1cmUpfQppbnB1dC52YWx1ZT0nJztoaWRlU3VnZ2VzdGlvbnMoaW5wdXQuY2xvc2VzdCgnLmx1eGlvci1hdXRvY29tcGxldGUtd3JhcHBlciwgLmx1eGlvci1kcm9wZG93bi1zZWFyY2gtYm94LCAubHV4aW9yLWdsb2JhbC1zZWFyY2gtYm94LXdyYXBwZXInKXx8ZG9jdW1lbnQuYm9keSl9KX0Kd2luZG93Lmx1eGlvckVuc3VyZUxvY2F0aW9uQmVmb3JlU2VhcmNoPWVuc3VyZUxvY2F0aW9uQmVmb3JlU2VhcmNoO2Z1bmN0aW9uIGZvY3VzTG9jYXRpb25TZWFyY2hJbnB1dChjb250YWluZXIpe2lmKCFjb250YWluZXIpcmV0dXJuO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgaW5wdXQ9Y29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItdmlsbGVzLXNlYXJjaC1pbnB1dCwgLmx1eGlvci1nbG9iYWwtdmlsbGVzLXNlYXJjaC1maWVsZCcpO2lmKGlucHV0KXtpbnB1dC5mb2N1cygpO2lmKGlucHV0LnZhbHVlKXtpbnB1dC5zZWxlY3QoKX19fSw4MCl9CmZ1bmN0aW9uIGluaXRTZWFyY2hJbnB1dHMoKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubHV4aW9yLXZpbGxlcy1zZWFyY2gtaW5wdXQsIC5sdXhpb3ItZ2xvYmFsLXZpbGxlcy1zZWFyY2gtZmllbGQnKS5mb3JFYWNoKGZ1bmN0aW9uKGlucHV0KXtpZihpbnB1dC5kYXRhc2V0Lmx1eGlvckJvdW5kKXJldHVybjtpbnB1dC5kYXRhc2V0Lmx1eGlvckJvdW5kPScxJzt2YXIgd3JhcHBlcj1pbnB1dC5jbG9zZXN0KCcubHV4aW9yLWF1dG9jb21wbGV0ZS13cmFwcGVyLCAubHV4aW9yLWRyb3Bkb3duLXNlYXJjaC1ib3gsIC5sdXhpb3ItZ2xvYmFsLXNlYXJjaC1ib3gtd3JhcHBlcicpO2lmKCF3cmFwcGVyKXJldHVybjtpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsZnVuY3Rpb24oKXt2YXIgc2NvcGU9Z2V0TG9jYXRpb25TY29wZShpbnB1dCk7dmFyIHF1ZXJ5PWlucHV0LnZhbHVlLnRyaW0oKTtpZihxdWVyeS5sZW5ndGg+MCl7c2NvcGUuY2xhc3NMaXN0LmFkZCgnaXMtc2VhcmNoaW5nJyk7ZmlsdGVyQ2F0YWxvZ0xpc3Qoc2NvcGUscXVlcnkpfWVsc2V7c2NvcGUuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2VhcmNoaW5nJyk7ZmlsdGVyQ2F0YWxvZ0xpc3Qoc2NvcGUsJycpfQpjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7ZGVib3VuY2VUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZmV0Y2hTdWdnZXN0aW9ucyh3cmFwcGVyLHF1ZXJ5KX0sMjUwKX0pO2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLGZ1bmN0aW9uKGUpe3ZhciBsaXN0PXdyYXBwZXIucXVlcnlTZWxlY3RvcignLmx1eGlvci1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMnKTt2YXIgaXRlbXM9bGlzdD9saXN0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJyk6W107aWYoZS5rZXk9PT0nQXJyb3dEb3duJyYmaXRlbXMubGVuZ3RoKXtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTthY3RpdmVTdWdnZXN0aW9uSW5kZXg9TWF0aC5taW4oYWN0aXZlU3VnZ2VzdGlvbkluZGV4KzEsaXRlbXMubGVuZ3RoLTEpO2l0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXRlbSxpZHgpe2l0ZW0uY2xhc3NMaXN0LnRvZ2dsZSgnaXMtYWN0aXZlJyxpZHg9PT1hY3RpdmVTdWdnZXN0aW9uSW5kZXgpfSk7cmV0dXJufQppZihlLmtleT09PSdBcnJvd1VwJyYmaXRlbXMubGVuZ3RoKXtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTthY3RpdmVTdWdnZXN0aW9uSW5kZXg9TWF0aC5tYXgoYWN0aXZlU3VnZ2VzdGlvbkluZGV4LTEsMCk7aXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdGVtLGlkeCl7aXRlbS5jbGFzc0xpc3QudG9nZ2xlKCdpcy1hY3RpdmUnLGlkeD09PWFjdGl2ZVN1Z2dlc3Rpb25JbmRleCl9KTtyZXR1cm59CmlmKGUua2V5PT09J0VudGVyJyl7ZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7aWYoYWN0aXZlU3VnZ2VzdGlvbkluZGV4Pj0wJiZ3cmFwcGVyLl9sdXhpb3JTdWdnZXN0aW9ucyYmd3JhcHBlci5fbHV4aW9yU3VnZ2VzdGlvbnNbYWN0aXZlU3VnZ2VzdGlvbkluZGV4XSl7YXBwbHlMb2NhdGlvblNlbGVjdGlvbihnZXRMb2NhdGlvblNjb3BlKGlucHV0KSx3cmFwcGVyLl9sdXhpb3JTdWdnZXN0aW9uc1thY3RpdmVTdWdnZXN0aW9uSW5kZXhdKTtoaWRlU3VnZ2VzdGlvbnMod3JhcHBlcil9ZWxzZSBpZihpbnB1dC52YWx1ZS50cmltKCkpe2Vuc3VyZUxvY2F0aW9uQmVmb3JlU2VhcmNoKCl9CnJldHVybn0KaWYoZS5rZXk9PT0nRXNjYXBlJyl7aGlkZVN1Z2dlc3Rpb25zKHdyYXBwZXIpfX0pO2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2hpZGVTdWdnZXN0aW9ucyh3cmFwcGVyKX0sMTUwKX0pfSl9CmZ1bmN0aW9uIGFwcGVuZExvY2F0aW9uUGFyYW1zRm9yU2NvcGUocXVlcnlEYXRhLHNjb3BlKXtpZighc2NvcGUpe3JldHVybn0Kc3luY0xvY2F0aW9uSGlkZGVuRmllbGRzKHNjb3BlKTt2YXIgZmllbGRzPWdldEhpZGRlbkZpZWxkcyhzY29wZSk7aWYoZmllbGRzLmxhdCYmZmllbGRzLmxhdC52YWx1ZSYmZmllbGRzLmxuZyYmZmllbGRzLmxuZy52YWx1ZSl7cXVlcnlEYXRhLmZpbHRyZXJfbGF0PWZpZWxkcy5sYXQudmFsdWU7cXVlcnlEYXRhLmZpbHRyZXJfbG5nPWZpZWxkcy5sbmcudmFsdWU7aWYoZmllbGRzLmxvY2FsaXNhdGlvbiYmZmllbGRzLmxvY2FsaXNhdGlvbi52YWx1ZSl7cXVlcnlEYXRhLmZpbHRyZXJfbG9jYWxpc2F0aW9uPWZpZWxkcy5sb2NhbGlzYXRpb24udmFsdWV9CmlmKGZpZWxkcy5jcCYmZmllbGRzLmNwLnZhbHVlKXtxdWVyeURhdGEuZmlsdHJlcl9jcD1maWVsZHMuY3AudmFsdWV9fQp2YXIgY2F0YWxvZ1ZpbGxlcz1nZXRDYXRhbG9nVmlsbGVzRnJvbUNoaXBzKHNjb3BlKTtpZihjYXRhbG9nVmlsbGVzLmxlbmd0aCl7cXVlcnlEYXRhLmZpbHRyZXJfdmlsbGU9Y2F0YWxvZ1ZpbGxlcy5qb2luKCcsJyl9fQpmdW5jdGlvbiBhcHBlbmRMb2NhdGlvblBhcmFtcyhxdWVyeURhdGEpe2FwcGVuZExvY2F0aW9uUGFyYW1zRm9yU2NvcGUocXVlcnlEYXRhLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItZmlsdGVyLXZpbGxlcycpKX0KZnVuY3Rpb24gZ2V0Q2hlY2tlZEZvcm1WYWx1ZXMoZm9ybSxuYW1lKXt2YXIgdmFsdWVzPVtdO2Zvcm0ucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0iJytuYW1lKyciXTpjaGVja2VkJykuZm9yRWFjaChmdW5jdGlvbihpbnB1dCl7dmFsdWVzLnB1c2goaW5wdXQudmFsdWUpfSk7cmV0dXJuIHZhbHVlcy5qb2luKCcsJyl9CmZ1bmN0aW9uIGNvbGxlY3RHbG9iYWxTZWFyY2hQYXJhbXMoZm9ybSl7dmFyIHF1ZXJ5RGF0YT17fTt2YXIgdHlwZXM9Z2V0Q2hlY2tlZEZvcm1WYWx1ZXMoZm9ybSwnZmlsdHJlcl90eXBlJyk7aWYodHlwZXMpe3F1ZXJ5RGF0YS5maWx0cmVyX3R5cGU9dHlwZXN9CmFwcGVuZExvY2F0aW9uUGFyYW1zRm9yU2NvcGUocXVlcnlEYXRhLGZvcm0ucXVlcnlTZWxlY3RvcignLmx1eGlvci1nbG9iYWwtZmlsdGVyLXZpbGxlJykpO3ZhciBzdXJmTWluPWZvcm0ucXVlcnlTZWxlY3RvcignLmx1eGlvci1nbG9iYWwtc3VyZmFjZS1taW4nKTt2YXIgc3VyZk1heD1mb3JtLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItZ2xvYmFsLXN1cmZhY2UtbWF4Jyk7aWYoc3VyZk1pbiYmc3VyZk1heCl7aWYocGFyc2VJbnQoc3VyZk1pbi52YWx1ZSwxMCk+cGFyc2VJbnQoc3VyZk1pbi5taW4sMTApKXtxdWVyeURhdGEuZmlsdHJlcl9zdXJmYWNlX21pbj1zdXJmTWluLnZhbHVlfQppZihwYXJzZUludChzdXJmTWF4LnZhbHVlLDEwKTxwYXJzZUludChzdXJmTWF4Lm1heCwxMCkpe3F1ZXJ5RGF0YS5maWx0cmVyX3N1cmZhY2VfbWF4PXN1cmZNYXgudmFsdWV9fQp2YXIgYnVkZ01pbj1mb3JtLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItZ2xvYmFsLWJ1ZGdldC1taW4nKTt2YXIgYnVkZ01heD1mb3JtLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItZ2xvYmFsLWJ1ZGdldC1tYXgnKTtpZihidWRnTWluJiZidWRnTWF4KXtpZihwYXJzZUludChidWRnTWluLnZhbHVlLDEwKT5wYXJzZUludChidWRnTWluLm1pbiwxMCkpe3F1ZXJ5RGF0YS5maWx0cmVyX2J1ZGdldF9taW49YnVkZ01pbi52YWx1ZX0KaWYocGFyc2VJbnQoYnVkZ01heC52YWx1ZSwxMCk8cGFyc2VJbnQoYnVkZ01heC5tYXgsMTApKXtxdWVyeURhdGEuZmlsdHJlcl9idWRnZXRfbWF4PWJ1ZGdNYXgudmFsdWV9fQp2YXIgcmVmPWZvcm0ucXVlcnlTZWxlY3RvcignLmx1eGlvci1nbG9iYWwtY2xlYW4taW5wdXQnKTtpZihyZWYmJnJlZi52YWx1ZS50cmltKCkpe3F1ZXJ5RGF0YS5maWx0cmVyX3JlZj1yZWYudmFsdWUudHJpbSgpfQp2YXIgcGllY2VzPWdldENoZWNrZWRGb3JtVmFsdWVzKGZvcm0sJ2ZpbHRyZXJfcGllY2VzJyk7aWYocGllY2VzKXtxdWVyeURhdGEuZmlsdHJlcl9waWVjZXM9cGllY2VzfQp2YXIgY2hhbWJyZXM9Z2V0Q2hlY2tlZEZvcm1WYWx1ZXMoZm9ybSwnZmlsdHJlcl9jaGFtYnJlcycpO2lmKGNoYW1icmVzKXtxdWVyeURhdGEuZmlsdHJlcl9jaGFtYnJlcz1jaGFtYnJlc30KdmFyIGV0YWdlPWdldENoZWNrZWRGb3JtVmFsdWVzKGZvcm0sJ2ZpbHRyZXJfZXRhZ2UnKTtpZihldGFnZSl7cXVlcnlEYXRhLmZpbHRyZXJfZXRhZ2U9ZXRhZ2V9CnZhciBjdWlzaW5lPWdldENoZWNrZWRGb3JtVmFsdWVzKGZvcm0sJ2ZpbHRyZXJfY3Vpc2luZScpO2lmKGN1aXNpbmUpe3F1ZXJ5RGF0YS5maWx0cmVyX2N1aXNpbmU9Y3Vpc2luZX0KdmFyIHRNaW49Zm9ybS5xdWVyeVNlbGVjdG9yKCcubHV4aW9yLWdsb2JhbC10ZXJyYWluLW1pbicpO3ZhciB0TWF4PWZvcm0ucXVlcnlTZWxlY3RvcignLmx1eGlvci1nbG9iYWwtdGVycmFpbi1tYXgnKTtpZih0TWluJiZ0TWF4KXtpZihwYXJzZUludCh0TWluLnZhbHVlLDEwKT5wYXJzZUludCh0TWluLm1pbiwxMCkpe3F1ZXJ5RGF0YS5maWx0cmVyX3RlcnJhaW5fbWluPXRNaW4udmFsdWV9CmlmKHBhcnNlSW50KHRNYXgudmFsdWUsMTApPHBhcnNlSW50KHRNYXgubWF4LDEwKSl7cXVlcnlEYXRhLmZpbHRyZXJfdGVycmFpbl9tYXg9dE1heC52YWx1ZX19CnJldHVybiBxdWVyeURhdGF9CmZ1bmN0aW9uIGJ1aWxkUXVlcnlTdHJpbmcocXVlcnlEYXRhKXt2YXIgcGFydHM9W107T2JqZWN0LmtleXMocXVlcnlEYXRhKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7dmFyIHZhbHVlPXF1ZXJ5RGF0YVtrZXldO2lmKHZhbHVlIT09JycmJnZhbHVlIT1udWxsKXtwYXJ0cy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChrZXkpKyc9JytlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKX19KTtyZXR1cm4gcGFydHMuam9pbignJicpfQpmdW5jdGlvbiBzdWJtaXRHbG9iYWxTZWFyY2hGb3JtKGZvcm0pe2lmKCFmb3JtKXtyZXR1cm59CmVuc3VyZUxvY2F0aW9uQmVmb3JlU2VhcmNoKGZvcm0pLnRoZW4oZnVuY3Rpb24oKXt2YXIgcXVlcnlEYXRhPWNvbGxlY3RHbG9iYWxTZWFyY2hQYXJhbXMoZm9ybSk7dmFyIHRyYW5zYWN0aW9uPWZvcm0ucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT0ibHV4aW9yX3RyYW5zYWN0aW9uX3R5cGUiXTpjaGVja2VkJyk7dmFyIGJhc2VVcmw9Zm9ybS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmVudGUtdXJsJyl8fCcvY2F0ZWdvcmllX2ltbW8vdmVudGUvJztpZih0cmFuc2FjdGlvbiYmdHJhbnNhY3Rpb24udmFsdWU9PT0nbG9jYXRpb24nKXtiYXNlVXJsPWZvcm0uZ2V0QXR0cmlidXRlKCdkYXRhLWxvY2F0aW9uLXVybCcpfHwnL2NhdGVnb3JpZV9pbW1vL2xvY2F0aW9uLyd9CnZhciBxcz1idWlsZFF1ZXJ5U3RyaW5nKHF1ZXJ5RGF0YSk7dmFyIHNlcGFyYXRvcj1iYXNlVXJsLmluZGV4T2YoJz8nKT49MD8nJic6Jz8nO3dpbmRvdy5sb2NhdGlvbi5ocmVmPWJhc2VVcmwrKHFzP3NlcGFyYXRvcitxczonJyl9KX0Kd2luZG93Lmx1eGlvclN1Ym1pdEdsb2JhbFNlYXJjaEZvcm09c3VibWl0R2xvYmFsU2VhcmNoRm9ybTt3aW5kb3cubHV4aW9yQXBwZW5kTG9jYXRpb25QYXJhbXM9YXBwZW5kTG9jYXRpb25QYXJhbXM7ZnVuY3Rpb24gaW5pdExvY2F0aW9uRnJvbVVybCgpe2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sdXhpb3ItZmlsdGVyLXZpbGxlcywgLmx1eGlvci1nbG9iYWwtZmlsdGVyLXZpbGxlJykuZm9yRWFjaChmdW5jdGlvbihzY29wZSl7YnVpbGRDaGlwc0Zyb21IaWRkZW5GaWVsZHMoc2NvcGUpO3N5bmNMb2NhdGlvbkhpZGRlbkZpZWxkcyhzY29wZSk7dXBkYXRlQ29tYmluZWRMb2NhdGlvbkxhYmVsKHNjb3BlKTt1cGRhdGVMb2NhdGlvblBsYWNlaG9sZGVyKHNjb3BlKTtzeW5jQ2F0YWxvZ0l0ZW1TdGF0ZXMoc2NvcGUpfSl9CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihlKXt2YXIgcmVtb3ZlQnRuPWUudGFyZ2V0LmNsb3Nlc3QoJy5sdXhpb3ItbG9jYXRpb24tY2hpcC1yZW1vdmUnKTtpZighcmVtb3ZlQnRuKXtyZXR1cm59CmUucHJldmVudERlZmF1bHQoKTtlLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBjaGlwPXJlbW92ZUJ0bi5jbG9zZXN0KCcubHV4aW9yLWxvY2F0aW9uLWNoaXAnKTt2YXIgc2NvcGU9Y2hpcD9jaGlwLmNsb3Nlc3QoJy5sdXhpb3ItZmlsdGVyLXZpbGxlcywgLmx1eGlvci1nbG9iYWwtZmlsdGVyLXZpbGxlJyk6bnVsbDtpZihjaGlwKXtjaGlwLnJlbW92ZSgpfQppZihzY29wZSl7c3luY0xvY2F0aW9uSGlkZGVuRmllbGRzKHNjb3BlKTt1cGRhdGVDb21iaW5lZExvY2F0aW9uTGFiZWwoc2NvcGUpO3VwZGF0ZUxvY2F0aW9uUGxhY2Vob2xkZXIoc2NvcGUpO3N5bmNDYXRhbG9nSXRlbVN0YXRlcyhzY29wZSl9fSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsZnVuY3Rpb24oZSl7aWYoZS5rZXkhPT0nRW50ZXInKXJldHVybjtpZihlLnRhcmdldC5tYXRjaGVzKCcubHV4aW9yLWZpbHRlci1yZWYtaW5wdXQsIC5sdXhpb3ItZ2xvYmFsLWNsZWFuLWlucHV0Jykpe2UucHJldmVudERlZmF1bHQoKTtpZih3aW5kb3cubHV4aW9yVHJpZ2dlckNvbWJpbmVkRmlsdGVyKXtlbnN1cmVMb2NhdGlvbkJlZm9yZVNlYXJjaCgpLnRoZW4od2luZG93Lmx1eGlvclRyaWdnZXJDb21iaW5lZEZpbHRlcil9fX0pO2luaXRTZWFyY2hJbnB1dHMoKTtpbml0TG9jYXRpb25Gcm9tVXJsKCk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpe3ZhciBjYXRhbG9nQnRuPWUudGFyZ2V0LmNsb3Nlc3QoJy5sdXhpb3ItY2F0YWxvZy12aWxsZS1pdGVtJyk7aWYoIWNhdGFsb2dCdG4pe3JldHVybn0KZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBzY29wZT1jYXRhbG9nQnRuLmNsb3Nlc3QoJy5sdXhpb3ItZmlsdGVyLXZpbGxlcywgLmx1eGlvci1nbG9iYWwtZmlsdGVyLXZpbGxlJyk7aWYoc2NvcGUpe3RvZ2dsZUNhdGFsb2dWaWxsZShzY29wZSxjYXRhbG9nQnRuLmdldEF0dHJpYnV0ZSgnZGF0YS12aWxsZScpfHxjYXRhbG9nQnRuLnRleHRDb250ZW50LnRyaW0oKSl9fSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JyxmdW5jdGlvbihlKXt2YXIgZm9ybT1lLnRhcmdldC5jbG9zZXN0KCcubHV4aW9yLWdsb2JhbC1zZWFyY2gtZm9ybScpO2lmKCFmb3JtKXtyZXR1cm59CmUucHJldmVudERlZmF1bHQoKTtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO3N1Ym1pdEdsb2JhbFNlYXJjaEZvcm0oZm9ybSl9LCEwKTtpZih3aW5kb3cualF1ZXJ5KXt3aW5kb3cualF1ZXJ5KHdpbmRvdykub24oJ2xvYWQnLGZ1bmN0aW9uKCl7dmFyICQ9d2luZG93LmpRdWVyeTtmdW5jdGlvbiB1cGRhdGVEcm9wZG93bkxhYmVsKGNoZWNrYm94Q2xhc3MsZGVmYXVsdFRleHQpe3ZhciBsYWJlbHM9W107JCgnLicrY2hlY2tib3hDbGFzcysnOmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uKCl7bGFiZWxzLnB1c2goJCh0aGlzKS5uZXh0KCcuaXRlbS10ZXh0JykudGV4dCgpfHwkKHRoaXMpLnBhcmVudCgpLnRleHQoKS50cmltKCkpfSk7dmFyICRjb250YWluZXI9JCgnLicrY2hlY2tib3hDbGFzcykuY2xvc2VzdCgnLmx1eGlvci1kcm9wZG93bi1jb250YWluZXInKTtpZigkY29udGFpbmVyLmxlbmd0aCl7JGNvbnRhaW5lci5maW5kKCcubHV4aW9yLWRyb3Bkb3duLWJ1dHRvbiAubHV4aW9yLWRyb3Bkb3duLWxhYmVsJykudGV4dChsYWJlbHMubGVuZ3RoPjA/bGFiZWxzLmpvaW4oJywgJyk6ZGVmYXVsdFRleHQpfX0KZnVuY3Rpb24gYXBwZW5kTG9jYXRpb25QYXJhbXMocXVlcnlEYXRhKXt3aW5kb3cubHV4aW9yQXBwZW5kTG9jYXRpb25QYXJhbXMocXVlcnlEYXRhKX0KJChkb2N1bWVudCkub24oJ2NsaWNrJywnLmx1eGlvci12aWxsZXMtbGVnYWN5LXBpY2tlciAuc2VsZWN0LWFsbCcsZnVuY3Rpb24oKXt2YXIgc2NvcGU9dGhpcy5jbG9zZXN0KCcubHV4aW9yLWZpbHRlci12aWxsZXMsIC5sdXhpb3ItZ2xvYmFsLWZpbHRlci12aWxsZScpO2lmKCFzY29wZSlyZXR1cm47c2NvcGUucXVlcnlTZWxlY3RvckFsbCgnLmx1eGlvci1jYXRhbG9nLXZpbGxlLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uKGJ0bil7YWRkQ2F0YWxvZ1ZpbGxlKHNjb3BlLGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmlsbGUnKXx8YnRuLnRleHRDb250ZW50LnRyaW0oKSwhMSl9KX0pOyQoZG9jdW1lbnQpLm9uKCdjbGljaycsJy5sdXhpb3ItdmlsbGVzLWxlZ2FjeS1waWNrZXIgLmNsZWFyLWFsbCcsZnVuY3Rpb24oKXt2YXIgc2NvcGU9dGhpcy5jbG9zZXN0KCcubHV4aW9yLWZpbHRlci12aWxsZXMsIC5sdXhpb3ItZ2xvYmFsLWZpbHRlci12aWxsZScpO2lmKCFzY29wZSlyZXR1cm47c2NvcGUucXVlcnlTZWxlY3RvckFsbCgnLmx1eGlvci1sb2NhdGlvbi1jaGlwJykuZm9yRWFjaChmdW5jdGlvbihjaGlwKXtjaGlwLnJlbW92ZSgpfSk7c2NvcGUuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2VhcmNoaW5nJyk7ZmlsdGVyQ2F0YWxvZ0xpc3Qoc2NvcGUsJycpO3N5bmNMb2NhdGlvbkhpZGRlbkZpZWxkcyhzY29wZSk7c3luY0NhdGFsb2dJdGVtU3RhdGVzKHNjb3BlKTt1cGRhdGVDb21iaW5lZExvY2F0aW9uTGFiZWwoc2NvcGUpO3VwZGF0ZUxvY2F0aW9uUGxhY2Vob2xkZXIoc2NvcGUpfSk7d2luZG93Lmx1eGlvclRyaWdnZXJDb21iaW5lZEZpbHRlcj1mdW5jdGlvbigpe3ZhciAkdmlsbGVTY29wZT0kKCcubHV4aW9yLWZpbHRlci12aWxsZXMnKTtpZigkdmlsbGVTY29wZS5sZW5ndGgpe3N5bmNMb2NhdGlvbkhpZGRlbkZpZWxkcygkdmlsbGVTY29wZVswXSk7dXBkYXRlQ29tYmluZWRMb2NhdGlvbkxhYmVsKCR2aWxsZVNjb3BlWzBdKX0KdXBkYXRlRHJvcGRvd25MYWJlbCgnbHV4aW9yLWZpbHRlci1jaGVja2JveCcsJ0Nob2lzaXIgdW4gdHlwZScpO3VwZGF0ZURyb3Bkb3duTGFiZWwoJ2x1eGlvci1maWx0ZXItcGllY2VzLWNoZWNrYm94JywnUGnDqGNlcycpO3VwZGF0ZURyb3Bkb3duTGFiZWwoJ2x1eGlvci1maWx0ZXItY2hhbWJyZXMtY2hlY2tib3gnLCdDaGFtYnJlcycpO3VwZGF0ZURyb3Bkb3duTGFiZWwoJ2x1eGlvci1maWx0ZXItZXRhZ2UtY2hlY2tib3gnLCfDiXRhZ2UnKTt1cGRhdGVEcm9wZG93bkxhYmVsKCdsdXhpb3ItZmlsdGVyLWN1aXNpbmUtY2hlY2tib3gnLCdUeXBlIGRlIGN1aXNpbmUnKTt2YXIgJHNvcnRSYWRpbz0kKCcubHV4aW9yLWZpbHRlci1zb3J0LXJhZGlvOmNoZWNrZWQnKTt2YXIgc29ydFZhbHVlPSRzb3J0UmFkaW8udmFsKCl8fCdkYXRlX2Rlc2MnO3ZhciBzb3J0TGFiZWw9JHNvcnRSYWRpby5uZXh0KCcuaXRlbS10ZXh0JykudGV4dCgpfHwnTm91dmVhdXTDqXMnOyQoJy5sdXhpb3ItZmlsdGVyLXNvcnQnKS5maW5kKCcubHV4aW9yLWRyb3Bkb3duLWJ1dHRvbiAubHV4aW9yLWRyb3Bkb3duLWxhYmVsJykudGV4dCgnVHJpZXIgcGFyIDogJytzb3J0TGFiZWwpO3ZhciBxdWVyeURhdGE9e307dmFyIGdldENoZWNrZWRWYWx1ZXM9ZnVuY3Rpb24oY2xzKXt2YXIgYXJyPVtdOyQoJy4nK2NscysnOmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uKCl7YXJyLnB1c2goJCh0aGlzKS52YWwoKSl9KTtyZXR1cm4gYXJyLmpvaW4oJywnKX07aWYoZ2V0Q2hlY2tlZFZhbHVlcygnbHV4aW9yLWZpbHRlci1jaGVja2JveCcpKXF1ZXJ5RGF0YS5maWx0cmVyX3R5cGU9Z2V0Q2hlY2tlZFZhbHVlcygnbHV4aW9yLWZpbHRlci1jaGVja2JveCcpO3ZhciBjYXRhbG9nVmlsbGVzPSR2aWxsZVNjb3BlLmxlbmd0aD9nZXRDYXRhbG9nVmlsbGVzRnJvbUNoaXBzKCR2aWxsZVNjb3BlWzBdKTpbXTtpZihjYXRhbG9nVmlsbGVzLmxlbmd0aClxdWVyeURhdGEuZmlsdHJlcl92aWxsZT1jYXRhbG9nVmlsbGVzLmpvaW4oJywnKTtpZihnZXRDaGVja2VkVmFsdWVzKCdsdXhpb3ItZmlsdGVyLXBpZWNlcy1jaGVja2JveCcpKXF1ZXJ5RGF0YS5maWx0cmVyX3BpZWNlcz1nZXRDaGVja2VkVmFsdWVzKCdsdXhpb3ItZmlsdGVyLXBpZWNlcy1jaGVja2JveCcpO2lmKGdldENoZWNrZWRWYWx1ZXMoJ2x1eGlvci1maWx0ZXItY2hhbWJyZXMtY2hlY2tib3gnKSlxdWVyeURhdGEuZmlsdHJlcl9jaGFtYnJlcz1nZXRDaGVja2VkVmFsdWVzKCdsdXhpb3ItZmlsdGVyLWNoYW1icmVzLWNoZWNrYm94Jyk7aWYoZ2V0Q2hlY2tlZFZhbHVlcygnbHV4aW9yLWZpbHRlci1ldGFnZS1jaGVja2JveCcpKXF1ZXJ5RGF0YS5maWx0cmVyX2V0YWdlPWdldENoZWNrZWRWYWx1ZXMoJ2x1eGlvci1maWx0ZXItZXRhZ2UtY2hlY2tib3gnKTtpZihnZXRDaGVja2VkVmFsdWVzKCdsdXhpb3ItZmlsdGVyLWN1aXNpbmUtY2hlY2tib3gnKSlxdWVyeURhdGEuZmlsdHJlcl9jdWlzaW5lPWdldENoZWNrZWRWYWx1ZXMoJ2x1eGlvci1maWx0ZXItY3Vpc2luZS1jaGVja2JveCcpO3ZhciBzdXJmTWluPSQoJy5sdXhpb3Itc3VyZmFjZS1taW4nKS52YWwoKTt2YXIgc3VyZk1heD0kKCcubHV4aW9yLXN1cmZhY2UtbWF4JykudmFsKCk7aWYoc3VyZk1pbiYmcGFyc2VJbnQoc3VyZk1pbiwxMCk+cGFyc2VJbnQoJCgnLmx1eGlvci1zdXJmYWNlLW1pbicpLmF0dHIoJ21pbicpLDEwKSlxdWVyeURhdGEuZmlsdHJlcl9zdXJmYWNlX21pbj1zdXJmTWluO2lmKHN1cmZNYXgmJnBhcnNlSW50KHN1cmZNYXgsMTApPHBhcnNlSW50KCQoJy5sdXhpb3Itc3VyZmFjZS1tYXgnKS5hdHRyKCdtYXgnKSwxMCkpcXVlcnlEYXRhLmZpbHRyZXJfc3VyZmFjZV9tYXg9c3VyZk1heDt2YXIgYnVkZ01pbj0kKCcubHV4aW9yLWJ1ZGdldC1taW4nKS52YWwoKTt2YXIgYnVkZ01heD0kKCcubHV4aW9yLWJ1ZGdldC1tYXgnKS52YWwoKTtpZihidWRnTWluJiZwYXJzZUludChidWRnTWluLDEwKT5wYXJzZUludCgkKCcubHV4aW9yLWJ1ZGdldC1taW4nKS5hdHRyKCdtaW4nKSwxMCkpcXVlcnlEYXRhLmZpbHRyZXJfYnVkZ2V0X21pbj1idWRnTWluO2lmKGJ1ZGdNYXgmJnBhcnNlSW50KGJ1ZGdNYXgsMTApPHBhcnNlSW50KCQoJy5sdXhpb3ItYnVkZ2V0LW1heCcpLmF0dHIoJ21heCcpLDEwKSlxdWVyeURhdGEuZmlsdHJlcl9idWRnZXRfbWF4PWJ1ZGdNYXg7dmFyIHJlZj0kKCcubHV4aW9yLWZpbHRlci1yZWYtaW5wdXQnKS52YWwoKTtpZihyZWYpcXVlcnlEYXRhLmZpbHRyZXJfcmVmPXJlZjt2YXIgJHRNaW5JbnB1dD0kKCcubHV4aW9yLXRlcnJhaW4tbWluJyk7dmFyICR0TWF4SW5wdXQ9JCgnLmx1eGlvci10ZXJyYWluLW1heCcpO2lmKCR0TWluSW5wdXQubGVuZ3RoKXt2YXIgY3VycmVudE1pbj0kdE1pbklucHV0LnZhbCgpO3ZhciBjdXJyZW50TWF4PSR0TWF4SW5wdXQudmFsKCk7dmFyIGFic01pbj0kdE1pbklucHV0LmF0dHIoJ21pbicpO3ZhciBhYnNNYXg9JHRNYXhJbnB1dC5hdHRyKCdtYXgnKTtpZihwYXJzZUludChjdXJyZW50TWluLDEwKT5wYXJzZUludChhYnNNaW4sMTApKXF1ZXJ5RGF0YS5maWx0cmVyX3RlcnJhaW5fbWluPWN1cnJlbnRNaW47aWYocGFyc2VJbnQoY3VycmVudE1heCwxMCk8cGFyc2VJbnQoYWJzTWF4LDEwKSlxdWVyeURhdGEuZmlsdHJlcl90ZXJyYWluX21heD1jdXJyZW50TWF4fQphcHBlbmRMb2NhdGlvblBhcmFtcyhxdWVyeURhdGEpO3F1ZXJ5RGF0YS5sdXhpb3Jfb3JkZXJieT1zb3J0VmFsdWU7dmFyICR3aWRnZXRDb250YWluZXI9JCgnLmVsZW1lbnRvci13aWRnZXQtbG9vcC1ncmlkJyk7aWYoJHdpZGdldENvbnRhaW5lci5sZW5ndGgpeyR3aWRnZXRDb250YWluZXIuY3NzKHsndHJhbnNpdGlvbic6J29wYWNpdHkgMC4zcyBlYXNlJywnb3BhY2l0eSc6JzAuMycsJ3BvaW50ZXItZXZlbnRzJzonbm9uZSd9KX0KdmFyIG5ld1NlYXJjaD0kLnBhcmFtKHF1ZXJ5RGF0YSk7d2luZG93LmxvY2F0aW9uLmhyZWY9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKyhuZXdTZWFyY2g/Jz8nK25ld1NlYXJjaDonJyl9OyQoZG9jdW1lbnQpLm9mZignc3VibWl0JywnLmx1eGlvci1nbG9iYWwtc2VhcmNoLWZvcm0nKTskKGRvY3VtZW50KS5vZmYoJ2NsaWNrJywnLmx1eGlvci1nbG9iYWwtcm91bmQtc3VibWl0LWJ0bicpOyQoZG9jdW1lbnQpLm9uKCdjbGljay5sdXhpb3JHbG9iYWxTZWFyY2gnLCcubHV4aW9yLWdsb2JhbC1yb3VuZC1zdWJtaXQtYnRuJyxmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTt2YXIgZm9ybT10aGlzLmNsb3Nlc3QoJy5sdXhpb3ItZ2xvYmFsLXNlYXJjaC1mb3JtJyk7c3VibWl0R2xvYmFsU2VhcmNoRm9ybShmb3JtKX0pOyQoZG9jdW1lbnQpLm9mZignY2xpY2snLCcubHV4aW9yLXN1Ym1pdC1zZWFyY2gsICNsdXhpb3Itc3VibWl0LXNlYXJjaCcpOyQoZG9jdW1lbnQpLm9uKCdjbGljay5sdXhpb3JQbHVnaW5TZWFyY2gnLCcubHV4aW9yLXN1Ym1pdC1zZWFyY2gsICNsdXhpb3Itc3VibWl0LXNlYXJjaCcsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2Vuc3VyZUxvY2F0aW9uQmVmb3JlU2VhcmNoKCkudGhlbih3aW5kb3cubHV4aW9yVHJpZ2dlckNvbWJpbmVkRmlsdGVyKX0pOyQoZG9jdW1lbnQpLm9mZignY2hhbmdlJywnLmx1eGlvci1maWx0ZXItc29ydC1yYWRpbycpOyQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UubHV4aW9yUGx1Z2luU29ydCcsJy5sdXhpb3ItZmlsdGVyLXNvcnQtcmFkaW8nLGZ1bmN0aW9uKCl7d2luZG93Lmx1eGlvclRyaWdnZXJDb21iaW5lZEZpbHRlcigpfSk7JChkb2N1bWVudCkub24oJ2NsaWNrLmx1eGlvckxvY2F0aW9uRm9jdXMnLCcubHV4aW9yLWZpbHRlci12aWxsZXMgLmx1eGlvci1kcm9wZG93bi1idXR0b24sIC5sdXhpb3ItZ2xvYmFsLWZpbHRlci12aWxsZSAubHV4aW9yLWdsb2JhbC1idG4tdHJpZ2dlcicsZnVuY3Rpb24oZSl7aWYoZS50YXJnZXQuY2xvc2VzdCgnLmx1eGlvci1nZW9sb2MtdHJpZ2dlci1idG4nKSlyZXR1cm47dmFyIGNvbnRhaW5lcj10aGlzLmNsb3Nlc3QoJy5sdXhpb3ItZHJvcGRvd24tY29udGFpbmVyLCAubHV4aW9yLWdsb2JhbC1maWVsZC1ibG9jaycpO2ZvY3VzTG9jYXRpb25TZWFyY2hJbnB1dChjb250YWluZXIpfSk7c2V0VGltZW91dChpbml0TG9jYXRpb25Gcm9tVXJsLDUwKX0pfX0pKCk=":["keydown"],"https://luxior-immobilier.com/wp-content/litespeed/js/3288bfe97d8342fe8d03f26b10cb6f6a.js?ver=b6f6a":["keypress","keydown"]},"MOUSE":{"https://luxior-immobilier.com/wp-content/plugins/elementor-pro/assets/js/mega-menu.857df1cf3198ae47b617.bundle.min.js":["click"],"https://luxior-immobilier.com/wp-includes/js/jquery/jquery.min.js":["click","scroll"],"https://luxior-immobilier.com/wp-content/litespeed/js/2aabb12c71bb57ed8612d194cacd2f08.js?ver=5dbb3":["click"],"blob:https://luxior-immobilier.com/4c95950b-d909-4b7f-8e23-7e32519e552b":["click"],"https://www.googletagmanager.com/gtag/js?id=GT-5NXWBGV":["mousedown"],"https://luxior-immobilier.com/faire-gerer/":["click"],"https://luxior-immobilier.com/wp-content/litespeed/js/9f04ec3dbaeee1b2be986c5d131f1165.js?ver=5dbb3":["click"],"blob:https://luxior-immobilier.com/f4da4b2f-4fb3-410d-a2c0-465153be0d6b":["click"],"https://luxior-immobilier.com/":["click"],"data:text/javascript;base64,KGZ1bmN0aW9uKCl7dmFyIGRlYm91bmNlVGltZXI9bnVsbDt2YXIgYWN0aXZlU3VnZ2VzdGlvbkluZGV4PS0xO2Z1bmN0aW9uIGdldExvY2F0aW9uU2NvcGUoaW5wdXQpe3JldHVybiBpbnB1dC5jbG9zZXN0KCcubHV4aW9yLWZpbHRlci12aWxsZXMsIC5sdXhpb3ItZ2xvYmFsLWZpbHRlci12aWxsZSwgLmx1eGlvci1nbG9iYWwtc2VhcmNoLWZvcm0sIGZvcm0nKXx8ZG9jdW1lbnR9CmZ1bmN0aW9uIGdldEhpZGRlbkZpZWxkcyhzY29wZSl7c2NvcGU9c2NvcGV8fGRvY3VtZW50O3JldHVybntsYXQ6c2NvcGUucXVlcnlTZWxlY3RvcignLmx1eGlvci1nZW9sb2MtbGF0JyksbG5nOnNjb3BlLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItZ2VvbG9jLWxuZycpLGNwOnNjb3BlLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3Itc2VhcmNoLWNwJyksbG9jYWxpc2F0aW9uOnNjb3BlLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3Itc2VhcmNoLWxvY2FsaXNhdGlvbicpfX0KZnVuY3Rpb24gdXBkYXRlTG9jYXRpb25MYWJlbChzY29wZSxsYWJlbCl7dmFyIGRyb3Bkb3duTGFiZWw9c2NvcGUucXVlcnlTZWxlY3RvcignLmx1eGlvci1kcm9wZG93bi1sYWJlbCcpO3ZhciBnbG9iYWxMYWJlbD1zY29wZS5xdWVyeVNlbGVjdG9yKCcubHV4aW9yLXR4dC1sb2NhbGlzYXRpb24nKTtpZihkcm9wZG93bkxhYmVsKXtkcm9wZG93bkxhYmVsLnRleHRDb250ZW50PWxhYmVsfQppZihnbG9iYWxMYWJlbCl7Z2xvYmFsTGFiZWwudGV4dENvbnRlbnQ9bGFiZWx9fQpmdW5jdGlvbiBnZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpe3ZhciBsb2NhdGlvbnM9W107c2NvcGUucXVlcnlTZWxlY3RvckFsbCgnLmx1eGlvci1sb2NhdGlvbi1jaGlwJykuZm9yRWFjaChmdW5jdGlvbihjaGlwKXtsb2NhdGlvbnMucHVzaCh7bGFiZWw6Y2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwnKXx8Y2hpcC50ZXh0Q29udGVudC5yZXBsYWNlKCfDlycsJycpLnRyaW0oKSxsYXQ6Y2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF0Jyl8fCcnLGxuZzpjaGlwLmdldEF0dHJpYnV0ZSgnZGF0YS1sbmcnKXx8JycsY3A6Y2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY3AnKXx8JycsdmlsbGU6Y2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmlsbGUnKXx8Jyd9KX0pO3JldHVybiBsb2NhdGlvbnN9CmZ1bmN0aW9uIGxvY2F0aW9uSWRlbnRpdHkobG9jKXtyZXR1cm4obG9jLnZpbGxlfHxsb2MubGFiZWx8fCcnKS50b0xvd2VyQ2FzZSgpKyd8JysobG9jLmNwfHwnJyl9CmZ1bmN0aW9uIGdldEFwaU9ubHlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpe3JldHVybiBnZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpLmZpbHRlcihmdW5jdGlvbihsb2Mpe3JldHVybiBsb2MubGF0JiZsb2MubG5nfSl9CmZ1bmN0aW9uIGdldENhdGFsb2dWaWxsZXNGcm9tQ2hpcHMoc2NvcGUpe3JldHVybiBnZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpLmZpbHRlcihmdW5jdGlvbihsb2Mpe3JldHVybiFsb2MubGF0fHwhbG9jLmxuZ30pLm1hcChmdW5jdGlvbihsb2Mpe3JldHVybiBsb2MudmlsbGV8fGxvYy5sYWJlbH0pLmZpbHRlcihCb29sZWFuKX0KZnVuY3Rpb24gc3luY0xvY2F0aW9uSGlkZGVuRmllbGRzKHNjb3BlKXt2YXIgZmllbGRzPWdldEhpZGRlbkZpZWxkcyhzY29wZSk7dmFyIGxvY2F0aW9ucz1nZXRBcGlPbmx5TG9jYXRpb25zRnJvbUNoaXBzKHNjb3BlKTtpZighZmllbGRzLmxhdHx8IWZpZWxkcy5sbmd8fCFmaWVsZHMubG9jYWxpc2F0aW9ufHwhZmllbGRzLmNwKXtzeW5jQ2F0YWxvZ1ZpbGxlc0hpZGRlbihzY29wZSk7cmV0dXJufQppZighbG9jYXRpb25zLmxlbmd0aCl7ZmllbGRzLmxhdC52YWx1ZT0nJztmaWVsZHMubG5nLnZhbHVlPScnO2ZpZWxkcy5sb2NhbGlzYXRpb24udmFsdWU9Jyc7ZmllbGRzLmNwLnZhbHVlPScnO3Njb3BlLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1hcGktc2VhcmNoJyl9ZWxzZXtmaWVsZHMubGF0LnZhbHVlPWxvY2F0aW9ucy5tYXAoZnVuY3Rpb24obG9jKXtyZXR1cm4gbG9jLmxhdH0pLmpvaW4oJywnKTtmaWVsZHMubG5nLnZhbHVlPWxvY2F0aW9ucy5tYXAoZnVuY3Rpb24obG9jKXtyZXR1cm4gbG9jLmxuZ30pLmpvaW4oJywnKTtmaWVsZHMubG9jYWxpc2F0aW9uLnZhbHVlPWxvY2F0aW9ucy5tYXAoZnVuY3Rpb24obG9jKXtyZXR1cm4gbG9jLmxhYmVsfSkuam9pbignfCcpO2ZpZWxkcy5jcC52YWx1ZT1sb2NhdGlvbnMubWFwKGZ1bmN0aW9uKGxvYyl7cmV0dXJuIGxvYy5jcH0pLmpvaW4oJ3wnKTtzY29wZS5jbGFzc0xpc3QuYWRkKCdoYXMtYXBpLXNlYXJjaCcpfQpzeW5jQ2F0YWxvZ1ZpbGxlc0hpZGRlbihzY29wZSl9CmZ1bmN0aW9uIHN5bmNDYXRhbG9nVmlsbGVzSGlkZGVuKHNjb3BlKXt2YXIgaGlkZGVuPXNjb3BlLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItY2F0YWxvZy12aWxsZXMtaGlkZGVuJyk7aWYoIWhpZGRlbil7cmV0dXJufQpoaWRkZW4udmFsdWU9Z2V0Q2F0YWxvZ1ZpbGxlc0Zyb21DaGlwcyhzY29wZSkuam9pbignLCcpfQpmdW5jdGlvbiBzeW5jQ2F0YWxvZ0l0ZW1TdGF0ZXMoc2NvcGUpe3ZhciBzZWxlY3RlZD17fTtnZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpLmZvckVhY2goZnVuY3Rpb24obG9jKXt2YXIga2V5PShsb2MudmlsbGV8fGxvYy5sYWJlbHx8JycpLnRvTG93ZXJDYXNlKCk7aWYoa2V5KXtzZWxlY3RlZFtrZXldPSEwfX0pO3Njb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5sdXhpb3ItY2F0YWxvZy12aWxsZS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbihidG4pe3ZhciB2aWxsZT1idG4uZ2V0QXR0cmlidXRlKCdkYXRhLXZpbGxlJyl8fGJ0bi50ZXh0Q29udGVudC50cmltKCk7YnRuLmNsYXNzTGlzdC50b2dnbGUoJ2lzLXNlbGVjdGVkJywhIXNlbGVjdGVkW3ZpbGxlLnRvTG93ZXJDYXNlKCldKX0pfQpmdW5jdGlvbiB1cGRhdGVDb21iaW5lZExvY2F0aW9uTGFiZWwoc2NvcGUpe3ZhciBsYWJlbHM9W107Z2V0QXBpTG9jYXRpb25zRnJvbUNoaXBzKHNjb3BlKS5mb3JFYWNoKGZ1bmN0aW9uKGxvYyl7aWYobGFiZWxzLmluZGV4T2YobG9jLmxhYmVsKT09PS0xKXtsYWJlbHMucHVzaChsb2MubGFiZWwpfX0pO3VwZGF0ZUxvY2F0aW9uTGFiZWwoc2NvcGUsbGFiZWxzLmxlbmd0aD9sYWJlbHMuam9pbignLCAnKTonTG9jYWxpc2F0aW9uJyl9CmZ1bmN0aW9uIHVwZGF0ZUxvY2F0aW9uUGxhY2Vob2xkZXIoc2NvcGUpe3ZhciBpbnB1dD1zY29wZS5xdWVyeVNlbGVjdG9yKCcubHV4aW9yLXZpbGxlcy1zZWFyY2gtaW5wdXQsIC5sdXhpb3ItZ2xvYmFsLXZpbGxlcy1zZWFyY2gtZmllbGQnKTtpZighaW5wdXQpcmV0dXJuO3ZhciBoYXNDaGlwcz1nZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpLmxlbmd0aD4wO2lucHV0LnBsYWNlaG9sZGVyPWhhc0NoaXBzPydBam91dGVyIHVuZSB2aWxsZS4uLic6J1ZpbGxlLCBjb2RlIHBvc3RhbC4uLid9CmZ1bmN0aW9uIGJ1aWxkQ2hpcHNGcm9tSGlkZGVuRmllbGRzKHNjb3BlKXtpZihnZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpLmxlbmd0aCl7c3luY0NhdGFsb2dJdGVtU3RhdGVzKHNjb3BlKTtyZXR1cm59CnZhciBmaWVsZHM9Z2V0SGlkZGVuRmllbGRzKHNjb3BlKTtpZihmaWVsZHMubGF0JiZmaWVsZHMubGF0LnZhbHVlJiZmaWVsZHMubG5nJiZmaWVsZHMubG5nLnZhbHVlKXt2YXIgbGF0cz1maWVsZHMubGF0LnZhbHVlLnNwbGl0KCcsJyk7dmFyIGxuZ3M9ZmllbGRzLmxuZy52YWx1ZS5zcGxpdCgnLCcpO3ZhciBsYWJlbHM9ZmllbGRzLmxvY2FsaXNhdGlvbiYmZmllbGRzLmxvY2FsaXNhdGlvbi52YWx1ZT9maWVsZHMubG9jYWxpc2F0aW9uLnZhbHVlLnNwbGl0KCd8Jyk6W107dmFyIGNwcz1maWVsZHMuY3AmJmZpZWxkcy5jcC52YWx1ZT9maWVsZHMuY3AudmFsdWUuc3BsaXQoJ3wnKTpbXTtsYXRzLmZvckVhY2goZnVuY3Rpb24obGF0LGluZGV4KXt2YXIgbG5nPWxuZ3NbaW5kZXhdfHwnJztpZighbGF0fHwhbG5nKXtyZXR1cm59CmNyZWF0ZUxvY2F0aW9uQ2hpcChzY29wZSx7bGFiZWw6bGFiZWxzW2luZGV4XXx8JycsbGF0OmxhdCxsbmc6bG5nLGNwOmNwc1tpbmRleF18fCcnLHZpbGxlOicnfSwhMCl9KX0KdmFyIGNhdGFsb2dIaWRkZW49c2NvcGUucXVlcnlTZWxlY3RvcignLmx1eGlvci1jYXRhbG9nLXZpbGxlcy1oaWRkZW4nKTt2YXIgY2F0YWxvZ1ZhbHVlPWNhdGFsb2dIaWRkZW4/Y2F0YWxvZ0hpZGRlbi52YWx1ZTonJztpZighY2F0YWxvZ1ZhbHVlKXt2YXIgdXJsUGFyYW1zPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7Y2F0YWxvZ1ZhbHVlPXVybFBhcmFtcy5nZXQoJ2ZpbHRyZXJfdmlsbGUnKXx8Jyd9CmlmKGNhdGFsb2dWYWx1ZSl7Y2F0YWxvZ1ZhbHVlLnNwbGl0KCcsJykuZm9yRWFjaChmdW5jdGlvbih2aWxsZSl7dmlsbGU9dmlsbGUudHJpbSgpO2lmKHZpbGxlKXthZGRDYXRhbG9nVmlsbGUoc2NvcGUsdmlsbGUsITApfX0pfQpzeW5jQ2F0YWxvZ0l0ZW1TdGF0ZXMoc2NvcGUpfQpmdW5jdGlvbiBhZGRDYXRhbG9nVmlsbGUoc2NvcGUsdmlsbGVOYW1lLHNraXBEdXBsaWNhdGVDaGVjayl7dmFyIGxvYz17bGFiZWw6dmlsbGVOYW1lLGxhdDonJyxsbmc6JycsY3A6JycsdmlsbGU6dmlsbGVOYW1lfTtpZighc2tpcER1cGxpY2F0ZUNoZWNrKXt2YXIgZXhpc3RzPWdldEFwaUxvY2F0aW9uc0Zyb21DaGlwcyhzY29wZSkuc29tZShmdW5jdGlvbihpdGVtKXtyZXR1cm4oaXRlbS52aWxsZXx8aXRlbS5sYWJlbHx8JycpLnRvTG93ZXJDYXNlKCk9PT12aWxsZU5hbWUudG9Mb3dlckNhc2UoKX0pO2lmKGV4aXN0cyl7cmV0dXJuITF9fQpjcmVhdGVMb2NhdGlvbkNoaXAoc2NvcGUsbG9jLCEwKTtzeW5jTG9jYXRpb25IaWRkZW5GaWVsZHMoc2NvcGUpO3N5bmNDYXRhbG9nSXRlbVN0YXRlcyhzY29wZSk7dXBkYXRlQ29tYmluZWRMb2NhdGlvbkxhYmVsKHNjb3BlKTt1cGRhdGVMb2NhdGlvblBsYWNlaG9sZGVyKHNjb3BlKTtyZXR1cm4hMH0KZnVuY3Rpb24gdG9nZ2xlQ2F0YWxvZ1ZpbGxlKHNjb3BlLHZpbGxlTmFtZSl7dmFyIG5vcm1hbGl6ZWQ9dmlsbGVOYW1lLnRvTG93ZXJDYXNlKCk7dmFyIGV4aXN0aW5nQ2hpcD1udWxsO3Njb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5sdXhpb3ItbG9jYXRpb24tY2hpcCcpLmZvckVhY2goZnVuY3Rpb24oY2hpcCl7dmFyIGNoaXBWaWxsZT0oY2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmlsbGUnKXx8Y2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwnKXx8JycpLnRvTG93ZXJDYXNlKCk7aWYoY2hpcFZpbGxlPT09bm9ybWFsaXplZCl7ZXhpc3RpbmdDaGlwPWNoaXB9fSk7aWYoZXhpc3RpbmdDaGlwKXtleGlzdGluZ0NoaXAucmVtb3ZlKCk7c3luY0xvY2F0aW9uSGlkZGVuRmllbGRzKHNjb3BlKX1lbHNle2FkZENhdGFsb2dWaWxsZShzY29wZSx2aWxsZU5hbWUpO3JldHVybn0Kc3luY0NhdGFsb2dJdGVtU3RhdGVzKHNjb3BlKTt1cGRhdGVDb21iaW5lZExvY2F0aW9uTGFiZWwoc2NvcGUpO3VwZGF0ZUxvY2F0aW9uUGxhY2Vob2xkZXIoc2NvcGUpfQpmdW5jdGlvbiBjcmVhdGVMb2NhdGlvbkNoaXAoc2NvcGUsbG9jLHNraXBEdXBsaWNhdGVDaGVjayl7aWYoIXNraXBEdXBsaWNhdGVDaGVjayl7dmFyIGV4aXN0cz1nZXRBcGlMb2NhdGlvbnNGcm9tQ2hpcHMoc2NvcGUpLnNvbWUoZnVuY3Rpb24oaXRlbSl7cmV0dXJuIGxvY2F0aW9uSWRlbnRpdHkoaXRlbSk9PT1sb2NhdGlvbklkZW50aXR5KGxvYyl9KTtpZihleGlzdHMpe3JldHVybiExfX0KdmFyIGNoaXBzV3JhcD1zY29wZS5xdWVyeVNlbGVjdG9yKCcubHV4aW9yLWxvY2F0aW9uLWNoaXBzJyk7aWYoIWNoaXBzV3JhcCl7Y2hpcHNXcmFwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2NoaXBzV3JhcC5jbGFzc05hbWU9J2x1eGlvci1sb2NhdGlvbi1jaGlwcyc7dmFyIHNlYXJjaEJveD1zY29wZS5xdWVyeVNlbGVjdG9yKCcubHV4aW9yLWRyb3Bkb3duLXNlYXJjaC1ib3gsIC5sdXhpb3ItZ2xvYmFsLXNlYXJjaC1ib3gtd3JhcHBlcicpO2lmKHNlYXJjaEJveCl7c2VhcmNoQm94LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaXBzV3JhcCxzZWFyY2hCb3gpfX0KdmFyIGNoaXA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO2NoaXAuY2xhc3NOYW1lPSdsdXhpb3ItbG9jYXRpb24tY2hpcCc7Y2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwnLGxvYy5sYWJlbCk7Y2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbGF0Jyxsb2MubGF0KTtjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1sbmcnLGxvYy5sbmcpO2NoaXAuc2V0QXR0cmlidXRlKCdkYXRhLWNwJyxsb2MuY3B8fCcnKTtjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS12aWxsZScsbG9jLnZpbGxlfHwnJyk7Y2hpcC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsb2MubGFiZWwpKTt2YXIgcmVtb3ZlQnRuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO3JlbW92ZUJ0bi50eXBlPSdidXR0b24nO3JlbW92ZUJ0bi5jbGFzc05hbWU9J2x1eGlvci1sb2NhdGlvbi1jaGlwLXJlbW92ZSc7cmVtb3ZlQnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsJ1JldGlyZXInKTtyZW1vdmVCdG4uaW5uZXJIVE1MPScmdGltZXM7JztjaGlwLmFwcGVuZENoaWxkKHJlbW92ZUJ0bik7Y2hpcHNXcmFwLmFwcGVuZENoaWxkKGNoaXApO3JldHVybiEwfQpmdW5jdGlvbiBhZGRBcGlMb2NhdGlvbihzY29wZSxmZWF0dXJlKXt2YXIgcHJvcHM9ZmVhdHVyZS5wcm9wZXJ0aWVzfHx7fTt2YXIgY29vcmRzPWZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXN8fFtdO3ZhciBsYWJlbD1wcm9wcy5sYWJlbHx8cHJvcHMuY2l0eXx8cHJvcHMubmFtZXx8Jyc7dmFyIHZpbGxlPShwcm9wcy5jaXR5fHwnJykudHJpbSgpO3ZhciBjcD0ocHJvcHMucG9zdGNvZGV8fCcnKS50cmltKCk7dmFyIGxvYz17bGFiZWw6bGFiZWwsbGF0OmNvb3Jkc1sxXXx8JycsbG5nOmNvb3Jkc1swXXx8JycsY3A6Y3AsdmlsbGU6dmlsbGV9O3ZhciBleGlzdHM9Z2V0QXBpTG9jYXRpb25zRnJvbUNoaXBzKHNjb3BlKS5zb21lKGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBsb2NhdGlvbklkZW50aXR5KGl0ZW0pPT09bG9jYXRpb25JZGVudGl0eShsb2MpfSk7aWYoZXhpc3RzKXtyZXR1cm4hMX0KY3JlYXRlTG9jYXRpb25DaGlwKHNjb3BlLGxvYyk7c3luY0xvY2F0aW9uSGlkZGVuRmllbGRzKHNjb3BlKTtzeW5jQ2F0YWxvZ0l0ZW1TdGF0ZXMoc2NvcGUpO3VwZGF0ZUNvbWJpbmVkTG9jYXRpb25MYWJlbChzY29wZSk7dXBkYXRlTG9jYXRpb25QbGFjZWhvbGRlcihzY29wZSk7cmV0dXJuITB9CmZ1bmN0aW9uIGZpbHRlckNhdGFsb2dMaXN0KHNjb3BlLHF1ZXJ5KXt2YXIgbm9ybWFsaXplZD0ocXVlcnl8fCcnKS50b0xvd2VyQ2FzZSgpO3Njb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5sdXhpb3ItY2F0YWxvZy12aWxsZS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbihidG4pe3ZhciB2aWxsZT0oYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS12aWxsZScpfHxidG4udGV4dENvbnRlbnR8fCcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtidG4uc3R5bGUuZGlzcGxheT0oIW5vcm1hbGl6ZWR8fHZpbGxlLmluZGV4T2Yobm9ybWFsaXplZCkhPT0tMSk/Jyc6J25vbmUnfSl9CmZ1bmN0aW9uIHRvZ2dsZUxlZ2FjeVBpY2tlcihzY29wZSxzaG93KXt2YXIgbGVnYWN5PXNjb3BlLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItdmlsbGVzLWxlZ2FjeS1waWNrZXInKTtpZihsZWdhY3kpe2xlZ2FjeS5zdHlsZS5kaXNwbGF5PXNob3c/Jyc6J25vbmUnfX0KZnVuY3Rpb24gYXBwbHlMb2NhdGlvblNlbGVjdGlvbihzY29wZSxmZWF0dXJlKXt2YXIgaW5wdXQ9c2NvcGUucXVlcnlTZWxlY3RvcignLmx1eGlvci12aWxsZXMtc2VhcmNoLWlucHV0LCAubHV4aW9yLWdsb2JhbC12aWxsZXMtc2VhcmNoLWZpZWxkJyk7YWRkQXBpTG9jYXRpb24oc2NvcGUsZmVhdHVyZSk7c2NvcGUuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2VhcmNoaW5nJyk7ZmlsdGVyQ2F0YWxvZ0xpc3Qoc2NvcGUsJycpO2lmKGlucHV0KXtpbnB1dC52YWx1ZT0nJ319CmZ1bmN0aW9uIGhpZGVTdWdnZXN0aW9ucyh3cmFwcGVyKXt2YXIgbGlzdD13cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zJyk7aWYobGlzdCl7bGlzdC5zdHlsZS5kaXNwbGF5PSdub25lJztsaXN0LmlubmVySFRNTD0nJ30KaWYod3JhcHBlcil7d3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCdoYXMtc3VnZ2VzdGlvbnMtb3BlbicpfQphY3RpdmVTdWdnZXN0aW9uSW5kZXg9LTF9CmZ1bmN0aW9uIHJlbmRlclN1Z2dlc3Rpb25zKHdyYXBwZXIsZmVhdHVyZXMpe3ZhciBsaXN0PXdyYXBwZXIucXVlcnlTZWxlY3RvcignLmx1eGlvci1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMnKTtpZighbGlzdClyZXR1cm47bGlzdC5pbm5lckhUTUw9Jyc7aWYoIWZlYXR1cmVzLmxlbmd0aCl7bGlzdC5zdHlsZS5kaXNwbGF5PSdub25lJzt3cmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1zdWdnZXN0aW9ucy1vcGVuJyk7cmV0dXJufQpmZWF0dXJlcy5mb3JFYWNoKGZ1bmN0aW9uKGZlYXR1cmUsaW5kZXgpe3ZhciBsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO2xpLnRleHRDb250ZW50PWZlYXR1cmUucHJvcGVydGllcy5sYWJlbDtsaS5kYXRhc2V0LmluZGV4PVN0cmluZyhpbmRleCk7bGkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJyxmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7YXBwbHlMb2NhdGlvblNlbGVjdGlvbihnZXRMb2NhdGlvblNjb3BlKHdyYXBwZXIpLGZlYXR1cmUpO2hpZGVTdWdnZXN0aW9ucyh3cmFwcGVyKX0pO2xpc3QuYXBwZW5kQ2hpbGQobGkpfSk7bGlzdC5zdHlsZS5kaXNwbGF5PSdibG9jayc7d3JhcHBlci5jbGFzc0xpc3QuYWRkKCdoYXMtc3VnZ2VzdGlvbnMtb3BlbicpO2FjdGl2ZVN1Z2dlc3Rpb25JbmRleD0tMX0KZnVuY3Rpb24gZmV0Y2hTdWdnZXN0aW9ucyh3cmFwcGVyLHF1ZXJ5KXtpZihxdWVyeS5sZW5ndGg8Mil7aGlkZVN1Z2dlc3Rpb25zKHdyYXBwZXIpO3JldHVybn0KZmV0Y2goJ2h0dHBzOi8vYXBpLWFkcmVzc2UuZGF0YS5nb3V2LmZyL3NlYXJjaC8/cT0nK2VuY29kZVVSSUNvbXBvbmVudChxdWVyeSkrJyZsaW1pdD02JnR5cGU9bXVuaWNpcGFsaXR5JykudGhlbihmdW5jdGlvbihyZXNwb25zZSl7cmV0dXJuIHJlc3BvbnNlLmpzb24oKX0pLnRoZW4oZnVuY3Rpb24oZGF0YSl7dmFyIGZlYXR1cmVzPShkYXRhJiZkYXRhLmZlYXR1cmVzKT9kYXRhLmZlYXR1cmVzOltdO3dyYXBwZXIuX2x1eGlvclN1Z2dlc3Rpb25zPWZlYXR1cmVzO3JlbmRlclN1Z2dlc3Rpb25zKHdyYXBwZXIsZmVhdHVyZXMpfSkuY2F0Y2goZnVuY3Rpb24oKXtoaWRlU3VnZ2VzdGlvbnMod3JhcHBlcil9KX0KZnVuY3Rpb24gZ2VvY29kZUZyZWVUZXh0KHF1ZXJ5KXtyZXR1cm4gZmV0Y2goJ2h0dHBzOi8vYXBpLWFkcmVzc2UuZGF0YS5nb3V2LmZyL3NlYXJjaC8/cT0nK2VuY29kZVVSSUNvbXBvbmVudChxdWVyeSkrJyZsaW1pdD0xJykudGhlbihmdW5jdGlvbihyZXNwb25zZSl7cmV0dXJuIHJlc3BvbnNlLmpzb24oKX0pLnRoZW4oZnVuY3Rpb24oZGF0YSl7aWYoZGF0YSYmZGF0YS5mZWF0dXJlcyYmZGF0YS5mZWF0dXJlc1swXSl7cmV0dXJuIGRhdGEuZmVhdHVyZXNbMF19CnJldHVybiBudWxsfSl9CmZ1bmN0aW9uIGVuc3VyZUxvY2F0aW9uQmVmb3JlU2VhcmNoKGNvbnRleHRTY29wZSl7dmFyIHNjb3BlPWNvbnRleHRTY29wZXx8ZG9jdW1lbnQ7dmFyIGlucHV0PXNjb3BlLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItdmlsbGVzLXNlYXJjaC1pbnB1dCwgLmx1eGlvci1nbG9iYWwtdmlsbGVzLXNlYXJjaC1maWVsZCcpO2lmKCFpbnB1dHx8IWlucHV0LnZhbHVlLnRyaW0oKSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfQp2YXIgbG9jYXRpb25TY29wZT1nZXRMb2NhdGlvblNjb3BlKGlucHV0KTtyZXR1cm4gZ2VvY29kZUZyZWVUZXh0KGlucHV0LnZhbHVlLnRyaW0oKSkudGhlbihmdW5jdGlvbihmZWF0dXJlKXtpZihmZWF0dXJlKXthZGRBcGlMb2NhdGlvbihsb2NhdGlvblNjb3BlLGZlYXR1cmUpfQppbnB1dC52YWx1ZT0nJztoaWRlU3VnZ2VzdGlvbnMoaW5wdXQuY2xvc2VzdCgnLmx1eGlvci1hdXRvY29tcGxldGUtd3JhcHBlciwgLmx1eGlvci1kcm9wZG93bi1zZWFyY2gtYm94LCAubHV4aW9yLWdsb2JhbC1zZWFyY2gtYm94LXdyYXBwZXInKXx8ZG9jdW1lbnQuYm9keSl9KX0Kd2luZG93Lmx1eGlvckVuc3VyZUxvY2F0aW9uQmVmb3JlU2VhcmNoPWVuc3VyZUxvY2F0aW9uQmVmb3JlU2VhcmNoO2Z1bmN0aW9uIGZvY3VzTG9jYXRpb25TZWFyY2hJbnB1dChjb250YWluZXIpe2lmKCFjb250YWluZXIpcmV0dXJuO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgaW5wdXQ9Y29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItdmlsbGVzLXNlYXJjaC1pbnB1dCwgLmx1eGlvci1nbG9iYWwtdmlsbGVzLXNlYXJjaC1maWVsZCcpO2lmKGlucHV0KXtpbnB1dC5mb2N1cygpO2lmKGlucHV0LnZhbHVlKXtpbnB1dC5zZWxlY3QoKX19fSw4MCl9CmZ1bmN0aW9uIGluaXRTZWFyY2hJbnB1dHMoKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubHV4aW9yLXZpbGxlcy1zZWFyY2gtaW5wdXQsIC5sdXhpb3ItZ2xvYmFsLXZpbGxlcy1zZWFyY2gtZmllbGQnKS5mb3JFYWNoKGZ1bmN0aW9uKGlucHV0KXtpZihpbnB1dC5kYXRhc2V0Lmx1eGlvckJvdW5kKXJldHVybjtpbnB1dC5kYXRhc2V0Lmx1eGlvckJvdW5kPScxJzt2YXIgd3JhcHBlcj1pbnB1dC5jbG9zZXN0KCcubHV4aW9yLWF1dG9jb21wbGV0ZS13cmFwcGVyLCAubHV4aW9yLWRyb3Bkb3duLXNlYXJjaC1ib3gsIC5sdXhpb3ItZ2xvYmFsLXNlYXJjaC1ib3gtd3JhcHBlcicpO2lmKCF3cmFwcGVyKXJldHVybjtpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsZnVuY3Rpb24oKXt2YXIgc2NvcGU9Z2V0TG9jYXRpb25TY29wZShpbnB1dCk7dmFyIHF1ZXJ5PWlucHV0LnZhbHVlLnRyaW0oKTtpZihxdWVyeS5sZW5ndGg+MCl7c2NvcGUuY2xhc3NMaXN0LmFkZCgnaXMtc2VhcmNoaW5nJyk7ZmlsdGVyQ2F0YWxvZ0xpc3Qoc2NvcGUscXVlcnkpfWVsc2V7c2NvcGUuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2VhcmNoaW5nJyk7ZmlsdGVyQ2F0YWxvZ0xpc3Qoc2NvcGUsJycpfQpjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7ZGVib3VuY2VUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZmV0Y2hTdWdnZXN0aW9ucyh3cmFwcGVyLHF1ZXJ5KX0sMjUwKX0pO2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLGZ1bmN0aW9uKGUpe3ZhciBsaXN0PXdyYXBwZXIucXVlcnlTZWxlY3RvcignLmx1eGlvci1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMnKTt2YXIgaXRlbXM9bGlzdD9saXN0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJyk6W107aWYoZS5rZXk9PT0nQXJyb3dEb3duJyYmaXRlbXMubGVuZ3RoKXtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTthY3RpdmVTdWdnZXN0aW9uSW5kZXg9TWF0aC5taW4oYWN0aXZlU3VnZ2VzdGlvbkluZGV4KzEsaXRlbXMubGVuZ3RoLTEpO2l0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXRlbSxpZHgpe2l0ZW0uY2xhc3NMaXN0LnRvZ2dsZSgnaXMtYWN0aXZlJyxpZHg9PT1hY3RpdmVTdWdnZXN0aW9uSW5kZXgpfSk7cmV0dXJufQppZihlLmtleT09PSdBcnJvd1VwJyYmaXRlbXMubGVuZ3RoKXtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTthY3RpdmVTdWdnZXN0aW9uSW5kZXg9TWF0aC5tYXgoYWN0aXZlU3VnZ2VzdGlvbkluZGV4LTEsMCk7aXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdGVtLGlkeCl7aXRlbS5jbGFzc0xpc3QudG9nZ2xlKCdpcy1hY3RpdmUnLGlkeD09PWFjdGl2ZVN1Z2dlc3Rpb25JbmRleCl9KTtyZXR1cm59CmlmKGUua2V5PT09J0VudGVyJyl7ZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7aWYoYWN0aXZlU3VnZ2VzdGlvbkluZGV4Pj0wJiZ3cmFwcGVyLl9sdXhpb3JTdWdnZXN0aW9ucyYmd3JhcHBlci5fbHV4aW9yU3VnZ2VzdGlvbnNbYWN0aXZlU3VnZ2VzdGlvbkluZGV4XSl7YXBwbHlMb2NhdGlvblNlbGVjdGlvbihnZXRMb2NhdGlvblNjb3BlKGlucHV0KSx3cmFwcGVyLl9sdXhpb3JTdWdnZXN0aW9uc1thY3RpdmVTdWdnZXN0aW9uSW5kZXhdKTtoaWRlU3VnZ2VzdGlvbnMod3JhcHBlcil9ZWxzZSBpZihpbnB1dC52YWx1ZS50cmltKCkpe2Vuc3VyZUxvY2F0aW9uQmVmb3JlU2VhcmNoKCl9CnJldHVybn0KaWYoZS5rZXk9PT0nRXNjYXBlJyl7aGlkZVN1Z2dlc3Rpb25zKHdyYXBwZXIpfX0pO2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2hpZGVTdWdnZXN0aW9ucyh3cmFwcGVyKX0sMTUwKX0pfSl9CmZ1bmN0aW9uIGFwcGVuZExvY2F0aW9uUGFyYW1zRm9yU2NvcGUocXVlcnlEYXRhLHNjb3BlKXtpZighc2NvcGUpe3JldHVybn0Kc3luY0xvY2F0aW9uSGlkZGVuRmllbGRzKHNjb3BlKTt2YXIgZmllbGRzPWdldEhpZGRlbkZpZWxkcyhzY29wZSk7aWYoZmllbGRzLmxhdCYmZmllbGRzLmxhdC52YWx1ZSYmZmllbGRzLmxuZyYmZmllbGRzLmxuZy52YWx1ZSl7cXVlcnlEYXRhLmZpbHRyZXJfbGF0PWZpZWxkcy5sYXQudmFsdWU7cXVlcnlEYXRhLmZpbHRyZXJfbG5nPWZpZWxkcy5sbmcudmFsdWU7aWYoZmllbGRzLmxvY2FsaXNhdGlvbiYmZmllbGRzLmxvY2FsaXNhdGlvbi52YWx1ZSl7cXVlcnlEYXRhLmZpbHRyZXJfbG9jYWxpc2F0aW9uPWZpZWxkcy5sb2NhbGlzYXRpb24udmFsdWV9CmlmKGZpZWxkcy5jcCYmZmllbGRzLmNwLnZhbHVlKXtxdWVyeURhdGEuZmlsdHJlcl9jcD1maWVsZHMuY3AudmFsdWV9fQp2YXIgY2F0YWxvZ1ZpbGxlcz1nZXRDYXRhbG9nVmlsbGVzRnJvbUNoaXBzKHNjb3BlKTtpZihjYXRhbG9nVmlsbGVzLmxlbmd0aCl7cXVlcnlEYXRhLmZpbHRyZXJfdmlsbGU9Y2F0YWxvZ1ZpbGxlcy5qb2luKCcsJyl9fQpmdW5jdGlvbiBhcHBlbmRMb2NhdGlvblBhcmFtcyhxdWVyeURhdGEpe2FwcGVuZExvY2F0aW9uUGFyYW1zRm9yU2NvcGUocXVlcnlEYXRhLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItZmlsdGVyLXZpbGxlcycpKX0KZnVuY3Rpb24gZ2V0Q2hlY2tlZEZvcm1WYWx1ZXMoZm9ybSxuYW1lKXt2YXIgdmFsdWVzPVtdO2Zvcm0ucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0iJytuYW1lKyciXTpjaGVja2VkJykuZm9yRWFjaChmdW5jdGlvbihpbnB1dCl7dmFsdWVzLnB1c2goaW5wdXQudmFsdWUpfSk7cmV0dXJuIHZhbHVlcy5qb2luKCcsJyl9CmZ1bmN0aW9uIGNvbGxlY3RHbG9iYWxTZWFyY2hQYXJhbXMoZm9ybSl7dmFyIHF1ZXJ5RGF0YT17fTt2YXIgdHlwZXM9Z2V0Q2hlY2tlZEZvcm1WYWx1ZXMoZm9ybSwnZmlsdHJlcl90eXBlJyk7aWYodHlwZXMpe3F1ZXJ5RGF0YS5maWx0cmVyX3R5cGU9dHlwZXN9CmFwcGVuZExvY2F0aW9uUGFyYW1zRm9yU2NvcGUocXVlcnlEYXRhLGZvcm0ucXVlcnlTZWxlY3RvcignLmx1eGlvci1nbG9iYWwtZmlsdGVyLXZpbGxlJykpO3ZhciBzdXJmTWluPWZvcm0ucXVlcnlTZWxlY3RvcignLmx1eGlvci1nbG9iYWwtc3VyZmFjZS1taW4nKTt2YXIgc3VyZk1heD1mb3JtLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItZ2xvYmFsLXN1cmZhY2UtbWF4Jyk7aWYoc3VyZk1pbiYmc3VyZk1heCl7aWYocGFyc2VJbnQoc3VyZk1pbi52YWx1ZSwxMCk+cGFyc2VJbnQoc3VyZk1pbi5taW4sMTApKXtxdWVyeURhdGEuZmlsdHJlcl9zdXJmYWNlX21pbj1zdXJmTWluLnZhbHVlfQppZihwYXJzZUludChzdXJmTWF4LnZhbHVlLDEwKTxwYXJzZUludChzdXJmTWF4Lm1heCwxMCkpe3F1ZXJ5RGF0YS5maWx0cmVyX3N1cmZhY2VfbWF4PXN1cmZNYXgudmFsdWV9fQp2YXIgYnVkZ01pbj1mb3JtLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItZ2xvYmFsLWJ1ZGdldC1taW4nKTt2YXIgYnVkZ01heD1mb3JtLnF1ZXJ5U2VsZWN0b3IoJy5sdXhpb3ItZ2xvYmFsLWJ1ZGdldC1tYXgnKTtpZihidWRnTWluJiZidWRnTWF4KXtpZihwYXJzZUludChidWRnTWluLnZhbHVlLDEwKT5wYXJzZUludChidWRnTWluLm1pbiwxMCkpe3F1ZXJ5RGF0YS5maWx0cmVyX2J1ZGdldF9taW49YnVkZ01pbi52YWx1ZX0KaWYocGFyc2VJbnQoYnVkZ01heC52YWx1ZSwxMCk8cGFyc2VJbnQoYnVkZ01heC5tYXgsMTApKXtxdWVyeURhdGEuZmlsdHJlcl9idWRnZXRfbWF4PWJ1ZGdNYXgudmFsdWV9fQp2YXIgcmVmPWZvcm0ucXVlcnlTZWxlY3RvcignLmx1eGlvci1nbG9iYWwtY2xlYW4taW5wdXQnKTtpZihyZWYmJnJlZi52YWx1ZS50cmltKCkpe3F1ZXJ5RGF0YS5maWx0cmVyX3JlZj1yZWYudmFsdWUudHJpbSgpfQp2YXIgcGllY2VzPWdldENoZWNrZWRGb3JtVmFsdWVzKGZvcm0sJ2ZpbHRyZXJfcGllY2VzJyk7aWYocGllY2VzKXtxdWVyeURhdGEuZmlsdHJlcl9waWVjZXM9cGllY2VzfQp2YXIgY2hhbWJyZXM9Z2V0Q2hlY2tlZEZvcm1WYWx1ZXMoZm9ybSwnZmlsdHJlcl9jaGFtYnJlcycpO2lmKGNoYW1icmVzKXtxdWVyeURhdGEuZmlsdHJlcl9jaGFtYnJlcz1jaGFtYnJlc30KdmFyIGV0YWdlPWdldENoZWNrZWRGb3JtVmFsdWVzKGZvcm0sJ2ZpbHRyZXJfZXRhZ2UnKTtpZihldGFnZSl7cXVlcnlEYXRhLmZpbHRyZXJfZXRhZ2U9ZXRhZ2V9CnZhciBjdWlzaW5lPWdldENoZWNrZWRGb3JtVmFsdWVzKGZvcm0sJ2ZpbHRyZXJfY3Vpc2luZScpO2lmKGN1aXNpbmUpe3F1ZXJ5RGF0YS5maWx0cmVyX2N1aXNpbmU9Y3Vpc2luZX0KdmFyIHRNaW49Zm9ybS5xdWVyeVNlbGVjdG9yKCcubHV4aW9yLWdsb2JhbC10ZXJyYWluLW1pbicpO3ZhciB0TWF4PWZvcm0ucXVlcnlTZWxlY3RvcignLmx1eGlvci1nbG9iYWwtdGVycmFpbi1tYXgnKTtpZih0TWluJiZ0TWF4KXtpZihwYXJzZUludCh0TWluLnZhbHVlLDEwKT5wYXJzZUludCh0TWluLm1pbiwxMCkpe3F1ZXJ5RGF0YS5maWx0cmVyX3RlcnJhaW5fbWluPXRNaW4udmFsdWV9CmlmKHBhcnNlSW50KHRNYXgudmFsdWUsMTApPHBhcnNlSW50KHRNYXgubWF4LDEwKSl7cXVlcnlEYXRhLmZpbHRyZXJfdGVycmFpbl9tYXg9dE1heC52YWx1ZX19CnJldHVybiBxdWVyeURhdGF9CmZ1bmN0aW9uIGJ1aWxkUXVlcnlTdHJpbmcocXVlcnlEYXRhKXt2YXIgcGFydHM9W107T2JqZWN0LmtleXMocXVlcnlEYXRhKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7dmFyIHZhbHVlPXF1ZXJ5RGF0YVtrZXldO2lmKHZhbHVlIT09JycmJnZhbHVlIT1udWxsKXtwYXJ0cy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChrZXkpKyc9JytlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKX19KTtyZXR1cm4gcGFydHMuam9pbignJicpfQpmdW5jdGlvbiBzdWJtaXRHbG9iYWxTZWFyY2hGb3JtKGZvcm0pe2lmKCFmb3JtKXtyZXR1cm59CmVuc3VyZUxvY2F0aW9uQmVmb3JlU2VhcmNoKGZvcm0pLnRoZW4oZnVuY3Rpb24oKXt2YXIgcXVlcnlEYXRhPWNvbGxlY3RHbG9iYWxTZWFyY2hQYXJhbXMoZm9ybSk7dmFyIHRyYW5zYWN0aW9uPWZvcm0ucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT0ibHV4aW9yX3RyYW5zYWN0aW9uX3R5cGUiXTpjaGVja2VkJyk7dmFyIGJhc2VVcmw9Zm9ybS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmVudGUtdXJsJyl8fCcvY2F0ZWdvcmllX2ltbW8vdmVudGUvJztpZih0cmFuc2FjdGlvbiYmdHJhbnNhY3Rpb24udmFsdWU9PT0nbG9jYXRpb24nKXtiYXNlVXJsPWZvcm0uZ2V0QXR0cmlidXRlKCdkYXRhLWxvY2F0aW9uLXVybCcpfHwnL2NhdGVnb3JpZV9pbW1vL2xvY2F0aW9uLyd9CnZhciBxcz1idWlsZFF1ZXJ5U3RyaW5nKHF1ZXJ5RGF0YSk7dmFyIHNlcGFyYXRvcj1iYXNlVXJsLmluZGV4T2YoJz8nKT49MD8nJic6Jz8nO3dpbmRvdy5sb2NhdGlvbi5ocmVmPWJhc2VVcmwrKHFzP3NlcGFyYXRvcitxczonJyl9KX0Kd2luZG93Lmx1eGlvclN1Ym1pdEdsb2JhbFNlYXJjaEZvcm09c3VibWl0R2xvYmFsU2VhcmNoRm9ybTt3aW5kb3cubHV4aW9yQXBwZW5kTG9jYXRpb25QYXJhbXM9YXBwZW5kTG9jYXRpb25QYXJhbXM7ZnVuY3Rpb24gaW5pdExvY2F0aW9uRnJvbVVybCgpe2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sdXhpb3ItZmlsdGVyLXZpbGxlcywgLmx1eGlvci1nbG9iYWwtZmlsdGVyLXZpbGxlJykuZm9yRWFjaChmdW5jdGlvbihzY29wZSl7YnVpbGRDaGlwc0Zyb21IaWRkZW5GaWVsZHMoc2NvcGUpO3N5bmNMb2NhdGlvbkhpZGRlbkZpZWxkcyhzY29wZSk7dXBkYXRlQ29tYmluZWRMb2NhdGlvbkxhYmVsKHNjb3BlKTt1cGRhdGVMb2NhdGlvblBsYWNlaG9sZGVyKHNjb3BlKTtzeW5jQ2F0YWxvZ0l0ZW1TdGF0ZXMoc2NvcGUpfSl9CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihlKXt2YXIgcmVtb3ZlQnRuPWUudGFyZ2V0LmNsb3Nlc3QoJy5sdXhpb3ItbG9jYXRpb24tY2hpcC1yZW1vdmUnKTtpZighcmVtb3ZlQnRuKXtyZXR1cm59CmUucHJldmVudERlZmF1bHQoKTtlLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBjaGlwPXJlbW92ZUJ0bi5jbG9zZXN0KCcubHV4aW9yLWxvY2F0aW9uLWNoaXAnKTt2YXIgc2NvcGU9Y2hpcD9jaGlwLmNsb3Nlc3QoJy5sdXhpb3ItZmlsdGVyLXZpbGxlcywgLmx1eGlvci1nbG9iYWwtZmlsdGVyLXZpbGxlJyk6bnVsbDtpZihjaGlwKXtjaGlwLnJlbW92ZSgpfQppZihzY29wZSl7c3luY0xvY2F0aW9uSGlkZGVuRmllbGRzKHNjb3BlKTt1cGRhdGVDb21iaW5lZExvY2F0aW9uTGFiZWwoc2NvcGUpO3VwZGF0ZUxvY2F0aW9uUGxhY2Vob2xkZXIoc2NvcGUpO3N5bmNDYXRhbG9nSXRlbVN0YXRlcyhzY29wZSl9fSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsZnVuY3Rpb24oZSl7aWYoZS5rZXkhPT0nRW50ZXInKXJldHVybjtpZihlLnRhcmdldC5tYXRjaGVzKCcubHV4aW9yLWZpbHRlci1yZWYtaW5wdXQsIC5sdXhpb3ItZ2xvYmFsLWNsZWFuLWlucHV0Jykpe2UucHJldmVudERlZmF1bHQoKTtpZih3aW5kb3cubHV4aW9yVHJpZ2dlckNvbWJpbmVkRmlsdGVyKXtlbnN1cmVMb2NhdGlvbkJlZm9yZVNlYXJjaCgpLnRoZW4od2luZG93Lmx1eGlvclRyaWdnZXJDb21iaW5lZEZpbHRlcil9fX0pO2luaXRTZWFyY2hJbnB1dHMoKTtpbml0TG9jYXRpb25Gcm9tVXJsKCk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpe3ZhciBjYXRhbG9nQnRuPWUudGFyZ2V0LmNsb3Nlc3QoJy5sdXhpb3ItY2F0YWxvZy12aWxsZS1pdGVtJyk7aWYoIWNhdGFsb2dCdG4pe3JldHVybn0KZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBzY29wZT1jYXRhbG9nQnRuLmNsb3Nlc3QoJy5sdXhpb3ItZmlsdGVyLXZpbGxlcywgLmx1eGlvci1nbG9iYWwtZmlsdGVyLXZpbGxlJyk7aWYoc2NvcGUpe3RvZ2dsZUNhdGFsb2dWaWxsZShzY29wZSxjYXRhbG9nQnRuLmdldEF0dHJpYnV0ZSgnZGF0YS12aWxsZScpfHxjYXRhbG9nQnRuLnRleHRDb250ZW50LnRyaW0oKSl9fSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JyxmdW5jdGlvbihlKXt2YXIgZm9ybT1lLnRhcmdldC5jbG9zZXN0KCcubHV4aW9yLWdsb2JhbC1zZWFyY2gtZm9ybScpO2lmKCFmb3JtKXtyZXR1cm59CmUucHJldmVudERlZmF1bHQoKTtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO3N1Ym1pdEdsb2JhbFNlYXJjaEZvcm0oZm9ybSl9LCEwKTtpZih3aW5kb3cualF1ZXJ5KXt3aW5kb3cualF1ZXJ5KHdpbmRvdykub24oJ2xvYWQnLGZ1bmN0aW9uKCl7dmFyICQ9d2luZG93LmpRdWVyeTtmdW5jdGlvbiB1cGRhdGVEcm9wZG93bkxhYmVsKGNoZWNrYm94Q2xhc3MsZGVmYXVsdFRleHQpe3ZhciBsYWJlbHM9W107JCgnLicrY2hlY2tib3hDbGFzcysnOmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uKCl7bGFiZWxzLnB1c2goJCh0aGlzKS5uZXh0KCcuaXRlbS10ZXh0JykudGV4dCgpfHwkKHRoaXMpLnBhcmVudCgpLnRleHQoKS50cmltKCkpfSk7dmFyICRjb250YWluZXI9JCgnLicrY2hlY2tib3hDbGFzcykuY2xvc2VzdCgnLmx1eGlvci1kcm9wZG93bi1jb250YWluZXInKTtpZigkY29udGFpbmVyLmxlbmd0aCl7JGNvbnRhaW5lci5maW5kKCcubHV4aW9yLWRyb3Bkb3duLWJ1dHRvbiAubHV4aW9yLWRyb3Bkb3duLWxhYmVsJykudGV4dChsYWJlbHMubGVuZ3RoPjA/bGFiZWxzLmpvaW4oJywgJyk6ZGVmYXVsdFRleHQpfX0KZnVuY3Rpb24gYXBwZW5kTG9jYXRpb25QYXJhbXMocXVlcnlEYXRhKXt3aW5kb3cubHV4aW9yQXBwZW5kTG9jYXRpb25QYXJhbXMocXVlcnlEYXRhKX0KJChkb2N1bWVudCkub24oJ2NsaWNrJywnLmx1eGlvci12aWxsZXMtbGVnYWN5LXBpY2tlciAuc2VsZWN0LWFsbCcsZnVuY3Rpb24oKXt2YXIgc2NvcGU9dGhpcy5jbG9zZXN0KCcubHV4aW9yLWZpbHRlci12aWxsZXMsIC5sdXhpb3ItZ2xvYmFsLWZpbHRlci12aWxsZScpO2lmKCFzY29wZSlyZXR1cm47c2NvcGUucXVlcnlTZWxlY3RvckFsbCgnLmx1eGlvci1jYXRhbG9nLXZpbGxlLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uKGJ0bil7YWRkQ2F0YWxvZ1ZpbGxlKHNjb3BlLGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmlsbGUnKXx8YnRuLnRleHRDb250ZW50LnRyaW0oKSwhMSl9KX0pOyQoZG9jdW1lbnQpLm9uKCdjbGljaycsJy5sdXhpb3ItdmlsbGVzLWxlZ2FjeS1waWNrZXIgLmNsZWFyLWFsbCcsZnVuY3Rpb24oKXt2YXIgc2NvcGU9dGhpcy5jbG9zZXN0KCcubHV4aW9yLWZpbHRlci12aWxsZXMsIC5sdXhpb3ItZ2xvYmFsLWZpbHRlci12aWxsZScpO2lmKCFzY29wZSlyZXR1cm47c2NvcGUucXVlcnlTZWxlY3RvckFsbCgnLmx1eGlvci1sb2NhdGlvbi1jaGlwJykuZm9yRWFjaChmdW5jdGlvbihjaGlwKXtjaGlwLnJlbW92ZSgpfSk7c2NvcGUuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2VhcmNoaW5nJyk7ZmlsdGVyQ2F0YWxvZ0xpc3Qoc2NvcGUsJycpO3N5bmNMb2NhdGlvbkhpZGRlbkZpZWxkcyhzY29wZSk7c3luY0NhdGFsb2dJdGVtU3RhdGVzKHNjb3BlKTt1cGRhdGVDb21iaW5lZExvY2F0aW9uTGFiZWwoc2NvcGUpO3VwZGF0ZUxvY2F0aW9uUGxhY2Vob2xkZXIoc2NvcGUpfSk7d2luZG93Lmx1eGlvclRyaWdnZXJDb21iaW5lZEZpbHRlcj1mdW5jdGlvbigpe3ZhciAkdmlsbGVTY29wZT0kKCcubHV4aW9yLWZpbHRlci12aWxsZXMnKTtpZigkdmlsbGVTY29wZS5sZW5ndGgpe3N5bmNMb2NhdGlvbkhpZGRlbkZpZWxkcygkdmlsbGVTY29wZVswXSk7dXBkYXRlQ29tYmluZWRMb2NhdGlvbkxhYmVsKCR2aWxsZVNjb3BlWzBdKX0KdXBkYXRlRHJvcGRvd25MYWJlbCgnbHV4aW9yLWZpbHRlci1jaGVja2JveCcsJ0Nob2lzaXIgdW4gdHlwZScpO3VwZGF0ZURyb3Bkb3duTGFiZWwoJ2x1eGlvci1maWx0ZXItcGllY2VzLWNoZWNrYm94JywnUGnDqGNlcycpO3VwZGF0ZURyb3Bkb3duTGFiZWwoJ2x1eGlvci1maWx0ZXItY2hhbWJyZXMtY2hlY2tib3gnLCdDaGFtYnJlcycpO3VwZGF0ZURyb3Bkb3duTGFiZWwoJ2x1eGlvci1maWx0ZXItZXRhZ2UtY2hlY2tib3gnLCfDiXRhZ2UnKTt1cGRhdGVEcm9wZG93bkxhYmVsKCdsdXhpb3ItZmlsdGVyLWN1aXNpbmUtY2hlY2tib3gnLCdUeXBlIGRlIGN1aXNpbmUnKTt2YXIgJHNvcnRSYWRpbz0kKCcubHV4aW9yLWZpbHRlci1zb3J0LXJhZGlvOmNoZWNrZWQnKTt2YXIgc29ydFZhbHVlPSRzb3J0UmFkaW8udmFsKCl8fCdkYXRlX2Rlc2MnO3ZhciBzb3J0TGFiZWw9JHNvcnRSYWRpby5uZXh0KCcuaXRlbS10ZXh0JykudGV4dCgpfHwnTm91dmVhdXTDqXMnOyQoJy5sdXhpb3ItZmlsdGVyLXNvcnQnKS5maW5kKCcubHV4aW9yLWRyb3Bkb3duLWJ1dHRvbiAubHV4aW9yLWRyb3Bkb3duLWxhYmVsJykudGV4dCgnVHJpZXIgcGFyIDogJytzb3J0TGFiZWwpO3ZhciBxdWVyeURhdGE9e307dmFyIGdldENoZWNrZWRWYWx1ZXM9ZnVuY3Rpb24oY2xzKXt2YXIgYXJyPVtdOyQoJy4nK2NscysnOmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uKCl7YXJyLnB1c2goJCh0aGlzKS52YWwoKSl9KTtyZXR1cm4gYXJyLmpvaW4oJywnKX07aWYoZ2V0Q2hlY2tlZFZhbHVlcygnbHV4aW9yLWZpbHRlci1jaGVja2JveCcpKXF1ZXJ5RGF0YS5maWx0cmVyX3R5cGU9Z2V0Q2hlY2tlZFZhbHVlcygnbHV4aW9yLWZpbHRlci1jaGVja2JveCcpO3ZhciBjYXRhbG9nVmlsbGVzPSR2aWxsZVNjb3BlLmxlbmd0aD9nZXRDYXRhbG9nVmlsbGVzRnJvbUNoaXBzKCR2aWxsZVNjb3BlWzBdKTpbXTtpZihjYXRhbG9nVmlsbGVzLmxlbmd0aClxdWVyeURhdGEuZmlsdHJlcl92aWxsZT1jYXRhbG9nVmlsbGVzLmpvaW4oJywnKTtpZihnZXRDaGVja2VkVmFsdWVzKCdsdXhpb3ItZmlsdGVyLXBpZWNlcy1jaGVja2JveCcpKXF1ZXJ5RGF0YS5maWx0cmVyX3BpZWNlcz1nZXRDaGVja2VkVmFsdWVzKCdsdXhpb3ItZmlsdGVyLXBpZWNlcy1jaGVja2JveCcpO2lmKGdldENoZWNrZWRWYWx1ZXMoJ2x1eGlvci1maWx0ZXItY2hhbWJyZXMtY2hlY2tib3gnKSlxdWVyeURhdGEuZmlsdHJlcl9jaGFtYnJlcz1nZXRDaGVja2VkVmFsdWVzKCdsdXhpb3ItZmlsdGVyLWNoYW1icmVzLWNoZWNrYm94Jyk7aWYoZ2V0Q2hlY2tlZFZhbHVlcygnbHV4aW9yLWZpbHRlci1ldGFnZS1jaGVja2JveCcpKXF1ZXJ5RGF0YS5maWx0cmVyX2V0YWdlPWdldENoZWNrZWRWYWx1ZXMoJ2x1eGlvci1maWx0ZXItZXRhZ2UtY2hlY2tib3gnKTtpZihnZXRDaGVja2VkVmFsdWVzKCdsdXhpb3ItZmlsdGVyLWN1aXNpbmUtY2hlY2tib3gnKSlxdWVyeURhdGEuZmlsdHJlcl9jdWlzaW5lPWdldENoZWNrZWRWYWx1ZXMoJ2x1eGlvci1maWx0ZXItY3Vpc2luZS1jaGVja2JveCcpO3ZhciBzdXJmTWluPSQoJy5sdXhpb3Itc3VyZmFjZS1taW4nKS52YWwoKTt2YXIgc3VyZk1heD0kKCcubHV4aW9yLXN1cmZhY2UtbWF4JykudmFsKCk7aWYoc3VyZk1pbiYmcGFyc2VJbnQoc3VyZk1pbiwxMCk+cGFyc2VJbnQoJCgnLmx1eGlvci1zdXJmYWNlLW1pbicpLmF0dHIoJ21pbicpLDEwKSlxdWVyeURhdGEuZmlsdHJlcl9zdXJmYWNlX21pbj1zdXJmTWluO2lmKHN1cmZNYXgmJnBhcnNlSW50KHN1cmZNYXgsMTApPHBhcnNlSW50KCQoJy5sdXhpb3Itc3VyZmFjZS1tYXgnKS5hdHRyKCdtYXgnKSwxMCkpcXVlcnlEYXRhLmZpbHRyZXJfc3VyZmFjZV9tYXg9c3VyZk1heDt2YXIgYnVkZ01pbj0kKCcubHV4aW9yLWJ1ZGdldC1taW4nKS52YWwoKTt2YXIgYnVkZ01heD0kKCcubHV4aW9yLWJ1ZGdldC1tYXgnKS52YWwoKTtpZihidWRnTWluJiZwYXJzZUludChidWRnTWluLDEwKT5wYXJzZUludCgkKCcubHV4aW9yLWJ1ZGdldC1taW4nKS5hdHRyKCdtaW4nKSwxMCkpcXVlcnlEYXRhLmZpbHRyZXJfYnVkZ2V0X21pbj1idWRnTWluO2lmKGJ1ZGdNYXgmJnBhcnNlSW50KGJ1ZGdNYXgsMTApPHBhcnNlSW50KCQoJy5sdXhpb3ItYnVkZ2V0LW1heCcpLmF0dHIoJ21heCcpLDEwKSlxdWVyeURhdGEuZmlsdHJlcl9idWRnZXRfbWF4PWJ1ZGdNYXg7dmFyIHJlZj0kKCcubHV4aW9yLWZpbHRlci1yZWYtaW5wdXQnKS52YWwoKTtpZihyZWYpcXVlcnlEYXRhLmZpbHRyZXJfcmVmPXJlZjt2YXIgJHRNaW5JbnB1dD0kKCcubHV4aW9yLXRlcnJhaW4tbWluJyk7dmFyICR0TWF4SW5wdXQ9JCgnLmx1eGlvci10ZXJyYWluLW1heCcpO2lmKCR0TWluSW5wdXQubGVuZ3RoKXt2YXIgY3VycmVudE1pbj0kdE1pbklucHV0LnZhbCgpO3ZhciBjdXJyZW50TWF4PSR0TWF4SW5wdXQudmFsKCk7dmFyIGFic01pbj0kdE1pbklucHV0LmF0dHIoJ21pbicpO3ZhciBhYnNNYXg9JHRNYXhJbnB1dC5hdHRyKCdtYXgnKTtpZihwYXJzZUludChjdXJyZW50TWluLDEwKT5wYXJzZUludChhYnNNaW4sMTApKXF1ZXJ5RGF0YS5maWx0cmVyX3RlcnJhaW5fbWluPWN1cnJlbnRNaW47aWYocGFyc2VJbnQoY3VycmVudE1heCwxMCk8cGFyc2VJbnQoYWJzTWF4LDEwKSlxdWVyeURhdGEuZmlsdHJlcl90ZXJyYWluX21heD1jdXJyZW50TWF4fQphcHBlbmRMb2NhdGlvblBhcmFtcyhxdWVyeURhdGEpO3F1ZXJ5RGF0YS5sdXhpb3Jfb3JkZXJieT1zb3J0VmFsdWU7dmFyICR3aWRnZXRDb250YWluZXI9JCgnLmVsZW1lbnRvci13aWRnZXQtbG9vcC1ncmlkJyk7aWYoJHdpZGdldENvbnRhaW5lci5sZW5ndGgpeyR3aWRnZXRDb250YWluZXIuY3NzKHsndHJhbnNpdGlvbic6J29wYWNpdHkgMC4zcyBlYXNlJywnb3BhY2l0eSc6JzAuMycsJ3BvaW50ZXItZXZlbnRzJzonbm9uZSd9KX0KdmFyIG5ld1NlYXJjaD0kLnBhcmFtKHF1ZXJ5RGF0YSk7d2luZG93LmxvY2F0aW9uLmhyZWY9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKyhuZXdTZWFyY2g/Jz8nK25ld1NlYXJjaDonJyl9OyQoZG9jdW1lbnQpLm9mZignc3VibWl0JywnLmx1eGlvci1nbG9iYWwtc2VhcmNoLWZvcm0nKTskKGRvY3VtZW50KS5vZmYoJ2NsaWNrJywnLmx1eGlvci1nbG9iYWwtcm91bmQtc3VibWl0LWJ0bicpOyQoZG9jdW1lbnQpLm9uKCdjbGljay5sdXhpb3JHbG9iYWxTZWFyY2gnLCcubHV4aW9yLWdsb2JhbC1yb3VuZC1zdWJtaXQtYnRuJyxmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTt2YXIgZm9ybT10aGlzLmNsb3Nlc3QoJy5sdXhpb3ItZ2xvYmFsLXNlYXJjaC1mb3JtJyk7c3VibWl0R2xvYmFsU2VhcmNoRm9ybShmb3JtKX0pOyQoZG9jdW1lbnQpLm9mZignY2xpY2snLCcubHV4aW9yLXN1Ym1pdC1zZWFyY2gsICNsdXhpb3Itc3VibWl0LXNlYXJjaCcpOyQoZG9jdW1lbnQpLm9uKCdjbGljay5sdXhpb3JQbHVnaW5TZWFyY2gnLCcubHV4aW9yLXN1Ym1pdC1zZWFyY2gsICNsdXhpb3Itc3VibWl0LXNlYXJjaCcsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2Vuc3VyZUxvY2F0aW9uQmVmb3JlU2VhcmNoKCkudGhlbih3aW5kb3cubHV4aW9yVHJpZ2dlckNvbWJpbmVkRmlsdGVyKX0pOyQoZG9jdW1lbnQpLm9mZignY2hhbmdlJywnLmx1eGlvci1maWx0ZXItc29ydC1yYWRpbycpOyQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UubHV4aW9yUGx1Z2luU29ydCcsJy5sdXhpb3ItZmlsdGVyLXNvcnQtcmFkaW8nLGZ1bmN0aW9uKCl7d2luZG93Lmx1eGlvclRyaWdnZXJDb21iaW5lZEZpbHRlcigpfSk7JChkb2N1bWVudCkub24oJ2NsaWNrLmx1eGlvckxvY2F0aW9uRm9jdXMnLCcubHV4aW9yLWZpbHRlci12aWxsZXMgLmx1eGlvci1kcm9wZG93bi1idXR0b24sIC5sdXhpb3ItZ2xvYmFsLWZpbHRlci12aWxsZSAubHV4aW9yLWdsb2JhbC1idG4tdHJpZ2dlcicsZnVuY3Rpb24oZSl7aWYoZS50YXJnZXQuY2xvc2VzdCgnLmx1eGlvci1nZW9sb2MtdHJpZ2dlci1idG4nKSlyZXR1cm47dmFyIGNvbnRhaW5lcj10aGlzLmNsb3Nlc3QoJy5sdXhpb3ItZHJvcGRvd24tY29udGFpbmVyLCAubHV4aW9yLWdsb2JhbC1maWVsZC1ibG9jaycpO2ZvY3VzTG9jYXRpb25TZWFyY2hJbnB1dChjb250YWluZXIpfSk7c2V0VGltZW91dChpbml0TG9jYXRpb25Gcm9tVXJsLDUwKX0pfX0pKCk=":["click"],"https://luxior-immobilier.com/wp-content/litespeed/js/3288bfe97d8342fe8d03f26b10cb6f6a.js?ver=b6f6a":["click"],"https://luxior-immobilier.com/wp-content/litespeed/js/9dad77d7fdfed7ec6f9f3e99f849c44e.js?ver=9c44e":["click"]},"TOUCH":{"https://luxior-immobilier.com/wp-includes/js/jquery/jquery.min.js":["touchstart"],"https://luxior-immobilier.com/faire-gerer/":["touchstart","touchmove"],"https://luxior-immobilier.com/":["touchstart","touchmove"]}},"canvas_fingerprinters":{"data_url":{},"fingerprinters":[],"styles":{},"texts":{}},"canvas_font_fingerprinters":{"canvas_font":{},"text_measure":{}},"cookies":[{"name":"_ga_C789VJPG9V","value":"GS2.1.s1792666630$o1$g0$t1792666630$j60$l0$h0","domain":"luxior-immobilier.com","path":"/","expires":"2027-11-26T10:57:10.568Z","size":59,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443,"type":"js","third_party":false},{"name":"_ga","value":"GA1.1.2142466994.1792666631","domain":"luxior-immobilier.com","path":"/","expires":"2027-11-26T10:57:10.569Z","size":30,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443,"type":"js","third_party":false},{"name":"_wpfuuid","value":"a85ec514-3711-4e24-a39d-898788791293","domain":"luxior-immobilier.com","path":"/","expires":"2027-11-26T10:57:10.821Z","size":44,"httpOnly":false,"secure":true,"session":false,"sameSite":"Strict","priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443,"type":"js","third_party":false}],"fb_pixel_events":[],"tiktok_pixel_events":[],"twitter_pixel_events":[],"google_analytics_events":[{"data":{"body":{},"filter":"$ping,third-party","listName":"easyprivacy.txt","query":{"aip":1,"cid":2142466994.1792667,"dma":0,"frm":0,"gcd":"13l3l3l3l1l1","gtm":"45Pe6ak1v9135727651za208zd9135727651xf1","ibt":1,"ngs":1,"npa":0,"rcb":8,"tag_exp":"115938465~115938469~118897920~118897930~119863601~120213116~120385423~120469145~120469153~121246026~121246034","tid":"G-C789VJPG9V","v":2}},"stack":[{"fileName":"https://luxior-immobilier.com/faire-gerer/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","raw":"https://stats.g.doubleclick.net/g/collect?v=2&ngs=1&ibt=1&tid=G-C789VJPG9V&cid=2142466994.1792666631&gtm=45Pe6ak1v9135727651za208zd9135727651xf1&rcb=8&aip=1&dma=0&gcd=13l3l3l3l1l1&npa=0&frm=0&tag_exp=115938465~115938469~118897920~118897930~119863601~120213116~120385423~120469145~120469153~121246026~121246034"},{"data":{"body":{},"filter":"$ping,third-party","listName":"easyprivacy.txt","query":{"aip":1,"cid":1022546943.1792667,"dma":0,"frm":0,"gcd":"13l3l3l3l1l1","gtm":"45Pe6ak1v9135727651za208zd9135727651xf1","ibt":1,"ngs":1,"npa":0,"rcb":11,"tag_exp":"115938465~115938468~118897920~118897930~120213116~120385422~120469145~120469153~121246026~121246034","tid":"G-C789VJPG9V","v":2}},"stack":[{"fileName":"https://luxior-immobilier.com/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","raw":"https://stats.g.doubleclick.net/g/collect?v=2&ngs=1&ibt=1&tid=G-C789VJPG9V&cid=1022546943.1792666623&gtm=45Pe6ak1v9135727651za208zd9135727651xf1&rcb=11&aip=1&dma=0&gcd=13l3l3l3l1l1&npa=0&frm=0&tag_exp=115938465~115938468~118897920~118897930~120213116~120385422~120469145~120469153~121246026~121246034"},{"data":{"body":{},"filter":"$ping,third-party","listName":"easyprivacy.txt","query":{"aip":1,"cid":1380447949.1792667,"dma":0,"frm":0,"gcd":"13l3l3l3l1l1","gtm":"45Pe6ak1v9135727651za208zd9135727651xf1","ibt":1,"ngs":1,"npa":0,"rcb":12,"tag_exp":"115616986~115938465~115938469~118897920~118897930~120213116~120385423~120469145~120469153~121246026~121246034~123548194","tid":"G-C789VJPG9V","v":2}},"stack":[{"fileName":"https://luxior-immobilier.com/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","raw":"https://stats.g.doubleclick.net/g/collect?v=2&ngs=1&ibt=1&tid=G-C789VJPG9V&cid=1380447949.1792666618&gtm=45Pe6ak1v9135727651za208zd9135727651xf1&rcb=12&aip=1&dma=0&gcd=13l3l3l3l1l1&npa=0&frm=0&tag_exp=115616986~115938465~115938469~118897920~118897930~120213116~120385423~120469145~120469153~121246026~121246034~123548194"}],"key_logging":{},"session_recorders":{},"third_party_trackers":[{"data":{"body":{},"filter":"://analytics.*/collect","listName":"easyprivacy.txt","query":{"_et":7088,"_eu":"AAAAACQC","_p":1792666630541,"_s":2,"are":1,"cid":2142466994.1792667,"dl":"https://luxior-immobilier.com/faire-gerer/","dma":0,"dt":"Prestation de Gestion Locative - Luxior Immobilier","en":"user_engagement","frm":0,"gcd":"13l3l3l3l1l1","gdid":"dZTNiMT","gtm":"45Pe6ak1v9135727651za200zd9135727651xf1","ibt":1,"ngs":1,"npa":0,"pscdl":"","rcb":8,"sct":1,"seg":0,"sid":1792666630,"sr":"353x745","tag_exp":"115938465~115938469~118897920~118897930~119863601~120213116~120385423~120469145~120469153~121246026~121246034","tfd":9290,"tid":"G-C789VJPG9V","uaa":"","uab":"","uafvl":"","uam":"","uamb":0,"uap":"","uapv":"","uaw":0,"ul":"en-us","v":2}},"stack":[{"fileName":"https://luxior-immobilier.com/faire-gerer/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://analytics.google.com/g/collect?v=2&tid=G-C789VJPG9V&gtm=45Pe6ak1v9135727651za200zd9135727651xf1&_p=1792666630541&gcd=13l3l3l3l1l1&npa=0&dma=0&gdid=dZTNiMT&_eu=AAAAACQC&are=1&cid=2142466994.1792666631&frm=0&ibt=1&ngs=1&pscdl=&rcb=8&sr=353x745&uaa=&uab=&uafvl=&uam=&uamb=0&uap=&uapv=&uaw=0&ul=en-us&_s=2&tag_exp=115938465~115938469~118897920~118897930~119863601~120213116~120385423~120469145~120469153~121246026~121246034&sid=1792666630&sct=1&seg=0&dl=https%3A%2F%2Fluxior-immobilier.com%2Ffaire-gerer%2F&dt=Prestation%20de%20Gestion%20Locative%20-%20Luxior%20Immobilier&en=user_engagement&_et=7088&tfd=9290"},{"data":{"body":{},"filter":"/ga-audiences?","listName":"easyprivacy.txt","query":{"_r":4,"aip":1,"cid":2142466994.1792667,"dma":0,"frm":0,"gcd":"13l3l3l3l1l1","gtm":"45Pe6ak1v9135727651za208zd9135727651xf1","ibt":1,"ngs":1,"npa":0,"rcb":8,"slf_rd":1,"t":"sr","tag_exp":"115938465~115938469~118897920~118897930~119863601~120213116~120385423~120469145~120469153~121246026~121246034","tid":"G-C789VJPG9V","v":1,"z":1295716623}},"stack":[{"fileName":"https://luxior-immobilier.com/faire-gerer/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.google.ru/ads/ga-audiences?v=1&t=sr&slf_rd=1&_r=4&ngs=1&ibt=1&tid=G-C789VJPG9V&cid=2142466994.1792666631&gtm=45Pe6ak1v9135727651za208zd9135727651xf1&rcb=8&aip=1&dma=0&gcd=13l3l3l3l1l1&npa=0&frm=0&tag_exp=115938465~115938469~118897920~118897930~119863601~120213116~120385423~120469145~120469153~121246026~121246034&z=1295716623"},{"data":{"body":{},"filter":"://analytics.*/collect","listName":"easyprivacy.txt","query":{"_ee":1,"_eu":"AAAAACAC","_fv":1,"_gaz":1,"_nsi":1,"_p":1792666630541,"_s":1,"_ss":1,"are":1,"cid":2142466994.1792667,"dl":"https://luxior-immobilier.com/faire-gerer/","dma":0,"dt":"Prestation de Gestion Locative - Luxior Immobilier","en":"page_view","frm":0,"gcd":"13l3l3l3l1l1","gdid":"dZTNiMT","gtm":"45Pe6ak1v9135727651za208zd9135727651xf1","ibt":1,"ngs":1,"npa":0,"pscdl":"","rcb":8,"sct":1,"seg":0,"sid":1792666630,"sr":"353x745","tag_exp":"115938465~115938469~118897920~118897930~119863601~120213116~120385423~120469145~120469153~121246026~121246034","tfd":2196,"tid":"G-C789VJPG9V","uaa":"","uab":"","uafvl":"","uam":"","uamb":0,"uap":"","uapv":"","uaw":0,"ul":"en-us","v":2}},"stack":[{"fileName":"https://luxior-immobilier.com/faire-gerer/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://analytics.google.com/g/collect?v=2&tid=G-C789VJPG9V&gtm=45Pe6ak1v9135727651za208zd9135727651xf1&_p=1792666630541&_gaz=1&gcd=13l3l3l3l1l1&npa=0&dma=0&gdid=dZTNiMT&_eu=AAAAACAC&are=1&cid=2142466994.1792666631&frm=0&ibt=1&ngs=1&pscdl=&rcb=8&sr=353x745&uaa=&uab=&uafvl=&uam=&uamb=0&uap=&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938469~118897920~118897930~119863601~120213116~120385423~120469145~120469153~121246026~121246034&sid=1792666630&sct=1&seg=0&dl=https%3A%2F%2Fluxior-immobilier.com%2Ffaire-gerer%2F&dt=Prestation%20de%20Gestion%20Locative%20-%20Luxior%20Immobilier&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=2196"},{"data":{"body":{},"filter":"||googletagmanager.com^","listName":"easyprivacy.txt","query":{"id":"GT-5NXWBGV"}},"stack":[{"fileName":"https://luxior-immobilier.com/faire-gerer/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.googletagmanager.com/gtag/js?id=GT-5NXWBGV"},{"data":{"body":{},"filter":"/ga-audiences?","listName":"easyprivacy.txt","query":{"_r":4,"aip":1,"cid":1022546943.1792667,"dma":0,"frm":0,"gcd":"13l3l3l3l1l1","gtm":"45Pe6ak1v9135727651za208zd9135727651xf1","ibt":1,"ngs":1,"npa":0,"rcb":11,"slf_rd":1,"t":"sr","tag_exp":"115938465~115938468~118897920~118897930~120213116~120385422~120469145~120469153~121246026~121246034","tid":"G-C789VJPG9V","v":1,"z":471434707}},"stack":[{"fileName":"https://luxior-immobilier.com/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.google.ru/ads/ga-audiences?v=1&t=sr&slf_rd=1&_r=4&ngs=1&ibt=1&tid=G-C789VJPG9V&cid=1022546943.1792666623&gtm=45Pe6ak1v9135727651za208zd9135727651xf1&rcb=11&aip=1&dma=0&gcd=13l3l3l3l1l1&npa=0&frm=0&tag_exp=115938465~115938468~118897920~118897930~120213116~120385422~120469145~120469153~121246026~121246034&z=471434707"},{"data":{"body":{},"filter":"://analytics.*/collect","listName":"easyprivacy.txt","query":{"_ee":1,"_eu":"AAAAACAC","_fv":1,"_gaz":1,"_nsi":1,"_p":1792666623315,"_s":1,"_ss":1,"are":1,"cid":1022546943.1792667,"dl":"https://luxior-immobilier.com/","dma":0,"dt":"Luxior Immobilier - Agences Immobilières à Brest et Quimper","en":"page_view","frm":0,"gcd":"13l3l3l3l1l1","gdid":"dZTNiMT","gtm":"45Pe6ak1v9135727651za208zd9135727651xf1","ibt":1,"ngs":1,"npa":0,"pscdl":"","rcb":11,"sct":1,"seg":0,"sid":1792666623,"sr":"353x745","tag_exp":"115938465~115938468~118897920~118897930~120213116~120385422~120469145~120469153~121246026~121246034","tfd":1100,"tid":"G-C789VJPG9V","uaa":"","uab":"","uafvl":"","uam":"","uamb":0,"uap":"","uapv":"","uaw":0,"ul":"en-us","v":2}},"stack":[{"fileName":"https://luxior-immobilier.com/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://analytics.google.com/g/collect?v=2&tid=G-C789VJPG9V&gtm=45Pe6ak1v9135727651za208zd9135727651xf1&_p=1792666623315&_gaz=1&gcd=13l3l3l3l1l1&npa=0&dma=0&gdid=dZTNiMT&_eu=AAAAACAC&are=1&cid=1022546943.1792666623&frm=0&ibt=1&ngs=1&pscdl=&rcb=11&sr=353x745&uaa=&uab=&uafvl=&uam=&uamb=0&uap=&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938468~118897920~118897930~120213116~120385422~120469145~120469153~121246026~121246034&sid=1792666623&sct=1&seg=0&dl=https%3A%2F%2Fluxior-immobilier.com%2F&dt=Luxior%20Immobilier%20-%20Agences%20Immobili%C3%A8res%20%C3%A0%20Brest%20et%20Quimper&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1100"},{"data":{"body":{},"filter":"||googletagmanager.com^","listName":"easyprivacy.txt","query":{"id":"GT-5NXWBGV"}},"stack":[{"fileName":"https://luxior-immobilier.com/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.googletagmanager.com/gtag/js?id=GT-5NXWBGV"},{"data":{"body":{},"filter":"://analytics.*/collect","listName":"easyprivacy.txt","query":{"_et":4263,"_eu":"AAAAACAC","_p":1792666617843,"_s":2,"are":1,"cid":1380447949.1792667,"dl":"https://luxior-immobilier.com/","dma":0,"dr":"https://luxior-immobilier.com/","dt":"Luxior Immobilier - Agences Immobilières à Brest et Quimper","en":"user_engagement","frm":0,"gcd":"13l3l3l3l1l1","gdid":"dZTNiMT","gtm":"45Pe6ak1v9135727651za200zd9135727651xf1","ibt":1,"ngs":1,"npa":0,"pscdl":"","rcb":12,"sct":1,"seg":0,"sid":1792666617,"sr":"353x745","tag_exp":"115616986~115938465~115938469~118897920~118897930~120213116~120385423~120469145~120469153~121246026~121246034~123548194","tfd":6349,"tid":"G-C789VJPG9V","uaa":"","uab":"","uafvl":"","uam":"","uamb":0,"uap":"","uapv":"","uaw":0,"ul":"en-us","v":2}},"stack":[{"fileName":"https://luxior-immobilier.com/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://analytics.google.com/g/collect?v=2&tid=G-C789VJPG9V&gtm=45Pe6ak1v9135727651za200zd9135727651xf1&_p=1792666617843&gcd=13l3l3l3l1l1&npa=0&dma=0&gdid=dZTNiMT&_eu=AAAAACAC&are=1&cid=1380447949.1792666618&frm=0&ibt=1&ngs=1&pscdl=&rcb=12&sr=353x745&uaa=&uab=&uafvl=&uam=&uamb=0&uap=&uapv=&uaw=0&ul=en-us&_s=2&tag_exp=115616986~115938465~115938469~118897920~118897930~120213116~120385423~120469145~120469153~121246026~121246034~123548194&sid=1792666617&sct=1&seg=0&dl=https%3A%2F%2Fluxior-immobilier.com%2F&dr=https%3A%2F%2Fluxior-immobilier.com%2F&dt=Luxior%20Immobilier%20-%20Agences%20Immobili%C3%A8res%20%C3%A0%20Brest%20et%20Quimper&en=user_engagement&_et=4263&tfd=6349"},{"data":{"body":{},"filter":"/ga-audiences?","listName":"easyprivacy.txt","query":{"_r":4,"aip":1,"cid":1380447949.1792667,"dma":0,"frm":0,"gcd":"13l3l3l3l1l1","gtm":"45Pe6ak1v9135727651za208zd9135727651xf1","ibt":1,"ngs":1,"npa":0,"rcb":12,"slf_rd":1,"t":"sr","tag_exp":"115616986~115938465~115938469~118897920~118897930~120213116~120385423~120469145~120469153~121246026~121246034~123548194","tid":"G-C789VJPG9V","v":1,"z":366623766}},"stack":[{"fileName":"https://luxior-immobilier.com/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.google.ru/ads/ga-audiences?v=1&t=sr&slf_rd=1&_r=4&ngs=1&ibt=1&tid=G-C789VJPG9V&cid=1380447949.1792666618&gtm=45Pe6ak1v9135727651za208zd9135727651xf1&rcb=12&aip=1&dma=0&gcd=13l3l3l3l1l1&npa=0&frm=0&tag_exp=115616986~115938465~115938469~118897920~118897930~120213116~120385423~120469145~120469153~121246026~121246034~123548194&z=366623766"},{"data":{"body":{},"filter":"://analytics.*/collect","listName":"easyprivacy.txt","query":{"_ee":1,"_eu":"AAAAACAC","_fv":1,"_gaz":1,"_nsi":1,"_p":1792666617843,"_s":1,"_ss":1,"are":1,"cid":1380447949.1792667,"dl":"https://luxior-immobilier.com/","dma":0,"dr":"https://luxior-immobilier.com/","dt":"Luxior Immobilier - Agences Immobilières à Brest et Quimper","en":"page_view","frm":0,"gcd":"13l3l3l3l1l1","gdid":"dZTNiMT","gtm":"45Pe6ak1v9135727651za208zd9135727651xf1","ibt":1,"ngs":1,"npa":0,"pscdl":"","rcb":12,"sct":1,"seg":0,"sid":1792666617,"sr":"353x745","tag_exp":"115616986~115938465~115938469~118897920~118897930~120213116~120385423~120469145~120469153~121246026~121246034~123548194","tfd":2077,"tid":"G-C789VJPG9V","uaa":"","uab":"","uafvl":"","uam":"","uamb":0,"uap":"","uapv":"","uaw":0,"ul":"en-us","v":2}},"stack":[{"fileName":"https://luxior-immobilier.com/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://analytics.google.com/g/collect?v=2&tid=G-C789VJPG9V&gtm=45Pe6ak1v9135727651za208zd9135727651xf1&_p=1792666617843&_gaz=1&gcd=13l3l3l3l1l1&npa=0&dma=0&gdid=dZTNiMT&_eu=AAAAACAC&are=1&cid=1380447949.1792666618&frm=0&ibt=1&ngs=1&pscdl=&rcb=12&sr=353x745&uaa=&uab=&uafvl=&uam=&uamb=0&uap=&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115616986~115938465~115938469~118897920~118897930~120213116~120385423~120469145~120469153~121246026~121246034~123548194&sid=1792666617&sct=1&seg=0&dl=https%3A%2F%2Fluxior-immobilier.com%2F&dr=https%3A%2F%2Fluxior-immobilier.com%2F&dt=Luxior%20Immobilier%20-%20Agences%20Immobili%C3%A8res%20%C3%A0%20Brest%20et%20Quimper&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=2077"},{"data":{"body":{},"filter":"||googletagmanager.com^","listName":"easyprivacy.txt","query":{"id":"GT-5NXWBGV"}},"stack":[{"fileName":"https://luxior-immobilier.com/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.googletagmanager.com/gtag/js?id=GT-5NXWBGV"}]}}