Robin sauveur des fruits remastered
Les remaster étant à la mode, il était nécessaire de mettre au goût du jour ce "Légendaire" jeu de mon enfance réalisé originalement en 2000.
Dans ce jeu de plateforme, vous devrez récupérer des fruits pour franchir les différents niveaux. Bien que cela peut paraitre simple, la passation de ce jeu est une véritable épreuve d'adresse, de persévérence et de gestion de la colère puisque de nombreuses plateforme sont assez difficile à atteindre dès le premier niveau. A chaque niveaux, vous y retrouverez de nombreux délires toujours plus incohérent.
Ly8gPHNjcmlwdD4NCgkJCXZhciBkb2N1bWVudFBhZGRpbmcgPSAyMDsNCgkJCXZhciBkb2N1bWVudExhYmVsSGVpZ2h0ID0gMDsNCgkJCXZhciBtYXhIZWlnaHQ7DQoJCQl2YXIgZG9jdW1lbnRzVG1wU2Nyb2xsID0ge307DQoJCQl2YXIgZG9jdW1lbnRzQ3VycmVudCA9ICdtYWluJzsNCgkJCXZhciBkb2N1bWVudFRwbCA9IHsNCgkJCQkvLyBzaG93IHRoZSBkb2N1bWVudHMgc2VsZWN0b3INCgkJCQlzaG93TWFpbjogZnVuY3Rpb24oZWxlbWVudCkgew0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5kb2N1bWVudHMtY29udGFpbmVyJykuZmluZCgnLmRvY3VtZW50JykuZmFkZWRTbGlkZVVwKDQwMCk7DQoJCQkJCSQoZWxlbWVudCkucGFyZW50cygnLmRvY3VtZW50cy1jb250YWluZXInKS5maW5kKCcuZG9jdW1lbnRzJykuZmFkZWRTbGlkZURvd24oNDAwKTsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZG9jdW1lbnRzLWNvbnRhaW5lcicpLmZpbmQoJy5kb2N1bWVudHMtc2hvdycpLmZhZGVkU2xpZGVVcCg0MDApOw0KCQkJCQkvLyQoJ2JvZHknKS5zY3JvbGxUbyhkb2N1bWVudHNUbXBTY3JvbGwsIDUwMCk7DQoJCQkJCS8vZG9jdW1lbnRzQ3VycmVudCA9ICdtYWluJzsNCgkJCQkJZG9jdW1lbnRUcGwuc3RvcmVTY3JvbGwoJ21haW4nKTsNCgkJCQl9LA0KDQoJCQkJLy8gc2hvdyB0aGUgZG9jdW1lbnRzIHNlbGVjdG9yDQoJCQkJc2hvd0RvY3VtZW50OiBmdW5jdGlvbihlbGVtZW50LCBpZCkgew0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5kb2N1bWVudHMtY29udGFpbmVyJykuZmluZCgnLmRvY3VtZW50cycpLmZhZGVkU2xpZGVVcCg0MDApOw0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5kb2N1bWVudHMtY29udGFpbmVyJykuZmluZCgnLmRvY3VtZW50cy1zaG93JykuZmFkZWRTbGlkZURvd24oNDAwKTsNCg0KDQoJCQkJCSQoZWxlbWVudCkucGFyZW50cygnLmRvY3VtZW50cy1jb250YWluZXInKS5maW5kKCcuZG9jdW1lbnQnKS5ub3QoJyNkb2N1bWVudF8nK2lkKS5mYWRlZFNsaWRlVXAoNDAwKTsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZG9jdW1lbnRzLWNvbnRhaW5lcicpLmZpbmQoJyNkb2N1bWVudF8nK2lkKS5mYWRlZFNsaWRlRG93big0MDAsIGZ1bmN0aW9uKCkge2RvY3VtZW50VHBsLnN0b3JlU2Nyb2xsKGlkKTt9KTsNCgkJCQl9LA0KDQoJCQkJc3RvcmVTY3JvbGw6IGZ1bmN0aW9uKHRhcmdldCkgew0KCQkJCQlkb2N1bWVudHNUbXBTY3JvbGxbZG9jdW1lbnRzQ3VycmVudF0gPSAkKCAnYm9keScgKS5zY3JvbGxUb3AoKTsNCgkJCQkJLy9jb25zb2xlLmxvZygnc3RvcmUgJytkb2N1bWVudHNDdXJyZW50KTsNCgkJCQkJaWYgKHR5cGVvZiBkb2N1bWVudHNUbXBTY3JvbGxbdGFyZ2V0XSA9PT0gInVuZGVmaW5lZCIgfHwgdHJ1ZSkgew0KCQkJCQkJJCgnYm9keScpLnNjcm9sbFRvKCQoJyNkb2N1bWVudF8nK3RhcmdldCksIDUwMCk7DQoJCQkJCQkvL2NvbnNvbGUubG9nKCdsb2FkICcrJyNkb2N1bWVudF8nK3RhcmdldCk7DQoJCQkJCX0NCgkJCQkJZWxzZQl7DQoJCQkJCQkkKCdib2R5Jykuc2Nyb2xsVG8oZG9jdW1lbnRzVG1wU2Nyb2xsW3RhcmdldF0sIDUwMCk7DQoJCQkJCQkvL2NvbnNvbGUubG9nKCdsb2FkICcrdGFyZ2V0KTsNCgkJCQkJfQ0KCQkJCQlkb2N1bWVudHNDdXJyZW50ID0gdGFyZ2V0Ow0KCQkJCX0sDQoNCgkJCQl1cGRhdGVIZWlnaHQ6IGZ1bmN0aW9uKCkgew0KCQkJCQkkKCcuZG9jdW1lbnRzLCAuZG9jdW1lbnRzX19ncm91cCcpLmVhY2goZnVuY3Rpb24gKCkgew0KCQkJCQkJaWYgKCQodGhpcykuZGF0YSgndGlsZS13aWR0aCcpKSB7DQoJCQkJCQkJdmFyIGRvY3VtZW50c1dpZHRoID0gJCh0aGlzKS53aWR0aCgpOw0KCQkJCQkJCWlmICghZG9jdW1lbnRzV2lkdGgpIHsNCgkJCQkJCQkJZG9jdW1lbnRzV2lkdGggPSAkKHRoaXMpLnBhcmVudHMoJy5kb2N1bWVudHMtY29udGFpbmVyJykud2lkdGgoKTsNCgkJCQkJCQl9DQoJCQkJCQkJaWYgKGRvY3VtZW50c1dpZHRoID4gMTAwKSB7DQoJCQkJCQkJCXZhciBudW1iZXJDb2wgPSBNYXRoLmNlaWwoZG9jdW1lbnRzV2lkdGggLyAkKHRoaXMpLmRhdGEoJ3RpbGUtd2lkdGgnKSk7DQoJCQkJCQkJCW1heEhlaWdodCA9IChkb2N1bWVudHNXaWR0aCAvIG51bWJlckNvbCkgLyAkKHRoaXMpLmRhdGEoJ3RpbGUtd2lkdGgnKSAqICQodGhpcykuZGF0YSgndGlsZS1oZWlnaHQnKSAtIChkb2N1bWVudFBhZGRpbmcgKiAyKTsNCg0KCQkJCQkJCQkkKHRoaXMpLmRhdGEoJ2NvbCcsIG51bWJlckNvbCk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9KTsNCg0KCQkJCQkkKCcuZG9jdW1lbnRzX19ncm91cCcpLmVhY2goZnVuY3Rpb24gKCkgew0KCQkJCQkJaWYgKCQodGhpcykuZGF0YSgncHJlc2VudGF0aW9uJykpIHsNCgkJCQkJCQkkKHRoaXMpLmZpbmQoJy5kb2N1bWVudHMtbGVnZW5kJykuY3NzKCdvdmVyZmxvdycsICdoaWRkZW4nKS5jc3MoJ3doaXRlLXNwYWNlJywgJ25vd3JhcCcpLmNzcygndGV4dC1vdmVyZmxvdycsICdlbGxpcHNpcycpOw0KDQoJCQkJCQkJaWYgKCQodGhpcykuZGF0YSgnY29sJykgPiA0ICkgew0KCQkJCQkJCQkkKHRoaXMpLmhlaWdodChwYXJzZUludChtYXhIZWlnaHQrZG9jdW1lbnRMYWJlbEhlaWdodCsoZG9jdW1lbnRQYWRkaW5nKjIpKSkuY3NzKCdvdmVyZmxvdycsICdoaWRkZW4nKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZSBpZiAoJCh0aGlzKS5kYXRhKCdjb2wnKSA9PSA0IHx8ICQodGhpcykuZGF0YSgnY29sJykgPT0gMyApIHsNCgkJCQkJCQkJJCh0aGlzKS5oZWlnaHQocGFyc2VJbnQoKG1heEhlaWdodCtkb2N1bWVudExhYmVsSGVpZ2h0Kyhkb2N1bWVudFBhZGRpbmcqMikpKjIpKS5jc3MoJ292ZXJmbG93JywgJ2hpZGRlbicpOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlIHsNCgkJCQkJCQkJJCh0aGlzKS5oZWlnaHQoJ2F1dG8nKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0pOw0KDQoJCQkJfSwNCg0KCQkJCXVwZGF0ZVZpc2libGU6IGZ1bmN0aW9uKGRvY3VtZW50KSB7DQoJCQkJCWlmICghZG9jdW1lbnQpIGRvY3VtZW50ID0gJCgnLmRvY3VtZW50cy1jb250YWluZXInKTsNCgkJCQkJZWxzZSBkb2N1bWVudCA9ICQoZG9jdW1lbnQpOw0KDQoJCQkJCWRvY3VtZW50LmZpbmQoJy5kb2N1bWVudHMtaW1nOnZpc2libGUnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCgkJCQkJCWlmICgkKHRoaXMpLmRhdGEoJ3NyYycpKSB7DQoJCQkJCQkJJCh0aGlzKS5hZGRDbGFzcygndHJhbnNwYXJlbnQnKTsNCgkJCQkJCQkkKHRoaXMpLmF0dHIoJ3NyYycsICQodGhpcykuZGF0YSgnc3JjJykpOw0KCQkJCQkJCS8vJCh0aGlzKS5jc3MoJ2JhY2tncm91bmRGaWNoaWVyJywgJ3VybCgnKyQodGhpcykuZGF0YSgnc3JjJykrJyknKTsNCgkJCQkJCQl2YXIgY3VycmVudEltZyA9ICQodGhpcykNCgkJCQkJCQkkKCc8aW1nLz4nKS5hdHRyKCdzcmMnLCAkKHRoaXMpLmRhdGEoJ3NyYycpKS5vbignbG9hZCcsIGZ1bmN0aW9uKCkgew0KCQkJCQkJCQkkKHRoaXMpLnJlbW92ZSgpOyAvLyBwcmV2ZW50IG1lbW9yeSBsZWFrcyBhcyBAYmVud2VldCBzdWdnZXN0ZWQNCgkJCQkJCQkJY3VycmVudEltZy5jc3MoJ2JhY2tncm91bmRGaWNoaWVyJywgJ3VybCgnKyQodGhpcykuYXR0cignc3JjJykrJyknKTsNCgkJCQkJCQkJY3VycmVudEltZy5yZW1vdmVDbGFzcygndHJhbnNwYXJlbnQnKTsNCgkJCQkJCQl9KTsNCgkJCQkJCQkkKHRoaXMpLmRhdGEoJ3NyYycsIG51bGwpOw0KCQkJCQkJfQ0KCQkJCQl9KTsNCgkJCQl9LA0KDQoJCQkJZGF0YVJlcXVlc3Q6IGZ1bmN0aW9uKCkgew0KCQkJCQkkKCcuZG9jdW1lbnRzW2RhdGEtZXh0ZXJuYWxdJykuZWFjaChmdW5jdGlvbigpIHsNCgkJCQkJCXZhciBjdXJyZW50RG9jdW1lbnQgPSB0aGlzOw0KCQkJCQkJdmFyIHJlcXVlc3QgPSAkLmFqYXgoew0KCQkJCQkJCXVybDogJCh0aGlzKS5kYXRhKCdleHRlcm5hbCcpLA0KCQkJCQkJCXR5cGU6ICJHRVQiLA0KCQkJCQkJCWRhdGFUeXBlOiAianNvbiIsDQoJCQkJCQkJc3VjY2VzczogZnVuY3Rpb24oZGF0YSkgew0KCQkJCQkJCQlkb2N1bWVudFRwbC5kYXRhSW1wb3J0KGN1cnJlbnREb2N1bWVudCwgZGF0YS5kYXRhLCB0cnVlKTsNCgkJCQkJCQl9DQoJCQkJCQl9KTsNCgkJCQkJfSk7DQoJCQkJfSwNCg0KCQkJCWRhdGFJbXBvcnQ6IGZ1bmN0aW9uKGRvY3VtZW50LCBkYXRhLCByZWZyZXNoKSB7DQoJCQkJCXZhciBkZWZhdWx0V2lkdGggPSAkKGRvY3VtZW50KS5maW5kKCcuZG9jdW1lbnRzX19ncm91cCcpLmRhdGEoJ3RpbGUtd2lkdGgnKQ0KCQkJCQl2YXIgZGVmYXVsdEhlaWdodCA9ICQoZG9jdW1lbnQpLmZpbmQoJy5kb2N1bWVudHNfX2dyb3VwJykuZGF0YSgndGlsZS1oZWlnaHQnKQ0KCQkJCQl2YXIgZ2FsaWQgPSAkKGRvY3VtZW50KS5kYXRhKCdpZCcpOw0KCQkJCQl2YXIgaHRtbCA9ICcnOw0KDQoJCQkJCS8vIGNoYW5nZSBmaWNoaWVyIGNvdmVyDQoJCQkJCWlmIChkYXRhLnVybF90aCkgew0KCQkJCQkJdmFyIGdhbExpbmsgPSAkKCcuZG9jdW1lbnRzLWxpbmtbZGF0YS1pZD0nICsgZ2FsaWQgKyAnXScpOw0KCQkJCQkJZ2FsTGluay5maW5kKCcuZG9jdW1lbnRzLWltZycpLmF0dHIoJ2RhdGEtc3JjJywgZGF0YS51cmxfdGgpLmF0dHIoJ3NyYycsIGRhdGEudXJsX3RoKS5kYXRhKCdzcmMnLCBkYXRhLnVybF90aCk7DQoJCQkJCQlkb2N1bWVudFRwbC51cGRhdGVWaXNpYmxlKGdhbExpbmspOw0KCQkJCQl9DQoNCgkJCQkJLy8gYWRkIGRvY3VtZW50cw0KCQkJCQlpZiAoZGF0YS5jaGlsZHMpIHsNCgkJCQkJCWZvciAodmFyIGkgPSAwLCBsZW4gPSBkYXRhLmNoaWxkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgew0KCQkJCQkJCWl0ZW0gPSBkYXRhLmNoaWxkc1tpXTsNCgkJCQkJCQlpZiAoaXRlbS5hY3RpZiAmJiAhaXRlbS5wYXNzd29yZF9jb2RlKSB7DQoJCQkJCQkJCXZhciBsYWJlbCA9IGl0ZW0ubmFtZTsNCgkJCQkJCQkJdmFyIHRodW1iID0gaXRlbS51cmxfdGg7DQoJCQkJCQkJCXZhciBpbWcgPSBpdGVtLnVybDsNCgkJCQkJCQkJdmFyIGlkID0gJChkb2N1bWVudCkuZGF0YSgnaWQnKSArICdfJyArIGl0ZW0uaWQ7DQoNCgkJCQkJCQkJLy8gY3JlYXRlIGRvY3VtZW50DQoJCQkJCQkJCXZhciBnYWwgPSAkKCc8ZGl2IGNsYXNzPSJkb2N1bWVudHMiIGlkPSJkb2N1bWVudF8nICsgaWQgKyAnIiBkYXRhLWlkPSInICsgaWQgKyAnIiBzdHlsZT0iZGlzcGxheTpub25lOyI+PGRpdiBjbGFzcz0iZG9jdW1lbnRzX19oZWFkZXIiPjxoMj4nICsgbGFiZWwgKyAnPC9oMj48L2Rpdj48ZGl2IGNsYXNzPSJkb2N1bWVudHNfX2dyb3VwIiBkYXRhLXRpbGUtd2lkdGg9IicgKyBkZWZhdWx0V2lkdGggKyAnIiBkYXRhLXRpbGUtaGVpZ2h0PSInICsgZGVmYXVsdEhlaWdodCArICciIGRhdGEtcHJlc2VudGF0aW9uPSIiPjwvZGl2PjwvZGl2PicpOw0KCQkJCQkJCQkkKCcuZG9jdW1lbnRzLWNvbnRhaW5lcicpLmFwcGVuZChnYWwpOw0KDQoJCQkJCQkJCS8vIGdvIGJhY2sgYnRuDQoJCQkJCQkJCXZhciBiYWNrID0gJzxhIGRhdGEtaWQ9IicgKyBnYWxpZCArICciIGNhcHRpb249IlJldG91ciIgZGF0YS1jYXB0aW9uPSJSZXRvdXIiIGNsYXNzPSJkb2N1bWVudHMtbGluayBwYXJlbnQiIGRhdGEtaWQ9IicgKyBnYWxpZCArICciID48ZGl2IHN0eWxlPSIgZGlzcGxheTppbmxpbmUtYmxvY2s7IHpvb206MTsgdmVydGljYWwtYWxpZ246dG9wOyB0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgb3ZlcmZsb3c6aGlkZGVuOyAiIGNsYXNzPSJkb2N1bWVudHNfX2Jsb2NrIiBjbGFzcz0iaW1nZGl2IiA+IDxkaXYgY2xhc3M9ImRvY3VtZW50c19faW5zaWRlIj4gPHNwYW4gYm9yZGVyPSIwIiBkYXRhLXNyYz0ianMvYmxhbmsuZ2lmIiBhbHQ9IlJldG91ciIgY2xhc3M9ImRvY3VtZW50cy1pbWcgaW1nX3RoIiBzdHlsZT0id2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgaGVpZ2h0OicgKyBkZWZhdWx0SGVpZ2h0ICsgJ3B4OyAiPiA8L3NwYW4+IDxkaXYgY2xhc3M9ImRvY3VtZW50cy1sZWdlbmQgbGVnZW5kZSIgc3R5bGU9Im1pbi1oZWlnaHQ6MjVweDsgdGV4dC1hbGlnbjpjZW50ZXI7Ij48c3Bhbj4gUmV0b3VyIDwvc3Bhbj48L2Rpdj48L2Rpdj48L2Rpdj48L2E+JzsNCgkJCQkJCQkJZ2FsLmZpbmQoJy5kb2N1bWVudHNfX2dyb3VwJykuYXBwZW5kKGJhY2spOw0KDQoJCQkJCQkJCS8vIGdvIHRvIGRvY3VtZW50IGJ0bg0KCQkJCQkJCQlodG1sICs9ICc8YSBkYXRhLWlkPSInICsgaWQgKyAnIiBjYXB0aW9uPSInICsgbGFiZWwgKyAnIiBkYXRhLWNhcHRpb249IicgKyBsYWJlbCArICciIGNsYXNzPSJkb2N1bWVudHMtbGluayBEb2N1bWVudERvc3NpZXIiIGRhdGEtaWQ9IicgKyBpZCArICciID48ZGl2IHN0eWxlPSIgZGlzcGxheTppbmxpbmUtYmxvY2s7IHpvb206MTsgdmVydGljYWwtYWxpZ246dG9wOyB0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgb3ZlcmZsb3c6aGlkZGVuOyAiIGNsYXNzPSJkb2N1bWVudHNfX2Jsb2NrIiBjbGFzcz0iaW1nZGl2IiA+IDxkaXYgY2xhc3M9ImRvY3VtZW50c19faW5zaWRlIj4gPHNwYW4gYm9yZGVyPSIwIiBkYXRhLXNyYz0iJyArIHRodW1iICsgJyIgYWx0PSInICsgbGFiZWwgKyAnIiBjbGFzcz0iZG9jdW1lbnRzLWltZyBpbWdfdGgiIHN0eWxlPSJ3aWR0aDonICsgZGVmYXVsdFdpZHRoICsgJ3B4OyBoZWlnaHQ6JyArIGRlZmF1bHRIZWlnaHQgKyAncHg7ICI+IDwvc3Bhbj4gPGRpdiBjbGFzcz0iZG9jdW1lbnRzLWxlZ2VuZCBsZWdlbmRlIiBzdHlsZT0ibWluLWhlaWdodDoyNXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsiPjxzcGFuPicgKyBsYWJlbCArICc8L3NwYW4+PC9kaXY+PC9kaXY+PC9kaXY+PC9hPic7DQoNCgkJCQkJCQkJZG9jdW1lbnRUcGwuZGF0YUltcG9ydChnYWwsIGl0ZW0pOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KDQoJCQkJCS8vIGFkZCBmaWNoaWVycw0KCQkJCQlpZiAoZGF0YS5maWNoaWVycykgew0KCQkJCQkJZm9yICh2YXIgaSA9IDAsIGxlbiA9IGRhdGEuZmljaGllcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsNCgkJCQkJCQlpdGVtID0gZGF0YS5maWNoaWVyc1tpXTsNCgkJCQkJCQlpZiAoaXRlbS5hY3RpZiAmJiAhaXRlbS5wYXNzd29yZF9jb2RlKSB7DQoJCQkJCQkJCXZhciBsYWJlbCA9IGl0ZW0ubmFtZTsNCgkJCQkJCQkJdmFyIHRodW1iID0gaXRlbS51cmxfdGg7DQoJCQkJCQkJCXZhciBpbWcgPSBpdGVtLnVybDsNCgkJCQkJCQkJdmFyIGlkID0gJChkb2N1bWVudCkuZGF0YSgnaWQnKSArICdfJyArIGl0ZW0uaWQ7DQoJCQkJCQkJCWh0bWwgKz0gJzxhIGhyZWY9IicgKyBpbWcgKyAnIiBjbGFzcz0iaW1nYm94IiByZWw9ImdhbGxlcnlfJyArIGdhbGlkICsgJyIgZGF0YS1mYW5jeWJveD0iZ2FsbGVyeV8nICsgZ2FsaWQgKyAnIiBjYXB0aW9uPSInICsgbGFiZWwgKyAnIiBkYXRhLWNhcHRpb249IicgKyBsYWJlbCArICciIGNsYXNzPSJkb2N1bWVudHMtbGluayBEb2N1bWVudEZpY2hpZXIiIGRhdGEtaWQ9IicgKyBpZCArICciPjxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO3pvb206MTt2ZXJ0aWNhbC1hbGlnbjp0b3A7dGV4dC1hbGlnbjpjZW50ZXI7IHdpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IG92ZXJmbG93OmhpZGRlbjsgImNsYXNzPSJkb2N1bWVudHNfX2Jsb2NrImNsYXNzPSJpbWdkaXYiPjxkaXYgY2xhc3M9ImRvY3VtZW50c19faW5zaWRlIj48c3BhbiBib3JkZXI9IjAiIGRhdGEtc3JjPSInICsgdGh1bWIgKyAnIiBhbHQ9IicgKyBsYWJlbCArICciIGNsYXNzPSJkb2N1bWVudHMtaW1nIGltZ190aCIgc3R5bGU9IndpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IGhlaWdodDonICsgZGVmYXVsdEhlaWdodCArICdweDsgIj48L3NwYW4+PGRpdiBjbGFzcz0iZG9jdW1lbnRzLWxlZ2VuZCBsZWdlbmRlIiBzdHlsZT0ibWluLWhlaWdodDoyNXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsiPjxzcGFuPicgKyBsYWJlbCArICc8L3NwYW4+PC9kaXY+PC9kaXY+PC9kaXY+PC9hPic7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoNCgkJCQkJJChkb2N1bWVudCkuZmluZCgnLmRvY3VtZW50c19fZ3JvdXAnKS5hcHBlbmQoaHRtbCk7DQoNCgkJCQkJZG9jdW1lbnRUcGwuYmluZCgkKGRvY3VtZW50KSk7DQoNCgkJCQkJaWYgKHJlZnJlc2gpIHsNCgkJCQkJCWRvY3VtZW50VHBsLnVwZGF0ZVZpc2libGUoKTsNCgkJCQkJCWRvY3VtZW50VHBsLnVwZGF0ZUhlaWdodCgpOw0KCQkJCQl9DQoJCQkJfSwNCg0KCQkJCWJpbmQ6IGZ1bmN0aW9uKGRvY3VtZW50KSB7DQoJCQkJCWlmICghZG9jdW1lbnQpIGRvY3VtZW50ID0gJCgnLmRvY3VtZW50cy1jb250YWluZXInKTsNCgkJCQkJZWxzZSBkb2N1bWVudCA9ICQoZG9jdW1lbnQpOw0KDQoNCgkJCQkJZG9jdW1lbnQuZmluZCgnLmRvY3VtZW50cy1pbWcnKS5hZGRDbGFzcygndHJhbnNwYXJlbnQnKTsNCg0KCQkJCQlkb2N1bWVudC5maW5kKCcuZG9jdW1lbnRzLWltZycpLm5vdCgiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uICgpIHsNCgkJCQkJCWlmICghJCh0aGlzKS5kYXRhKCJzcmMiKSkgew0KCQkJCQkJCSQodGhpcykuZGF0YSgic3JjIiwgdGhpcy5zcmMpOw0KCQkJCQkJCXRoaXMuc3JjID0gImpzL2JsYW5rLmdpZiI7DQoJCQkJCQl9DQoJCQkJCX0pOw0KDQoJCQkJCXZhciBkb2N1bWVudHNMaW5rID0gZG9jdW1lbnQuZmluZCgnLmRvY3VtZW50cy1saW5rOm5vdCguYmluZGVkKScpOw0KCQkJCQlkb2N1bWVudHNMaW5rLmFkZENsYXNzKCdiaW5kZWQnKTsNCgkJCQkJZG9jdW1lbnRzTGluay5jbGljayhmdW5jdGlvbigpIHsNCgkJCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgZG9jdW1lbnRUcGwudXBkYXRlVmlzaWJsZSgpOyB9LCAxMDApOw0KCQkJCQl9KTsNCg0KDQoJCQkJCS8vIENvbnRlbnUgZGUgZG9jdW1lbnQNCgkJCQkJZG9jdW1lbnRzTGluay5maWx0ZXIoJzpub3QoLnNlY3VyZSknKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCQkJCWRvY3VtZW50VHBsLnNob3dEb2N1bWVudCh0aGlzLCAkKHRoaXMpLmRhdGEoJ2lkJykpOw0KCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQl9KTsNCg0KCQkJCQkvLyBBY2Pvv71zIHNlY3VyZQ0KCQkJCQlkb2N1bWVudHNMaW5rLmZpbHRlcignLnNlY3VyZScpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQkJCQkJd2luZG93LnNlY3VyZUFjY2Vzc0l0ZW0oJCh0aGlzKS5kYXRhKCdpZCcpKTsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfSk7DQoJCQkJfQ0KDQoJCQl9Ow0KDQoJCQl3aW5kb3cuZG9jdW1lbnRUcGwgPSBkb2N1bWVudFRwbDsNCg0KCQkJd2luZG93LnJlcG9ydEl0ZW0gPSBmdW5jdGlvbihpZCkgew0KICAgICAgICAgICAgICAgIGlmICghaXNOdW1lcmljKGlkKSkgew0KICAgICAgICAgICAgICAgICAgICBpZCA9IGlkLmRhdGEoJ2lkJyk7DQogICAgICAgICAgICAgICAgfQ0KDQoJCQkJJC53aW5kb3coew0KCQkJCQlpZDogJ3JlcG9ydEl0ZW0nK2lkLA0KCQkJCQl0aXRsZTogJ1JlcG9ydGVyIHVuIHByb2JsZW1lIGF2ZWMgdW5lIGZpY2hpZXInLA0KCQkJCQl1cmw6ICdhZG1pbi9kb2N1bWVudHMvZmljaGllci9yZXBvcnQvJytpZCsnP291dHB1dD10ZXh0JywNCgkJCQkJaWNvbjogJ3N0YXR1cy13YXJuaW5nJywNCgkJCQkJbWV0aG9kOiAnYWpheCcsDQoJCQkJCW1heFdpZHRoOiAtMSwJCSAvLyB0aGUgbWluaW11bSB3aWR0aCwgaWYgLTEgbWVhbnMgbm8gY2hlY2tpbmcNCgkJCQkJbWF4SGVpZ2h0OiAtMSwJCSAvLyB0aGUgbWluaW11bSBoZWlnaHQsIGlmIC0xIG1lYW5zIG5vIGNoZWNraW5nDQoJCQkJCXNob3dGb290ZXI6IGZhbHNlLA0KCQkJCQltYXhpbWl6YWJsZTogZmFsc2UsDQoJCQkJCWNsb3NhYmxlOiB0cnVlLA0KCQkJCQltaW5pbWl6YWJsZTogZmFsc2UsDQoJCQkJCXNob3dNb2RhbDogdHJ1ZSwNCgkJCQkJd2lkdGg6IDkwMCwNCgkJCQkJaGVpZ2h0OiA1NzUsDQoJCQkJCWNoZWNrQm91bmRhcnk6IHRydWUsDQoJCQkJCXdpdGhpbkJyb3dzZXJXaW5kb3c6IGZhbHNlLA0KCQkJCQlvbklmcmFtZUVuZDogZnVuY3Rpb24oKSB7fSwNCgkJCQkJb25DbG9zZTogZnVuY3Rpb24oKSB7DQoJCQkJCQlicm93c2VyQWN0aW9uUnVuKCdyZWZyZXNoJyk7DQoJCQkJCX0NCgkJCQl9KTsNCgkJCX07DQogICAgICAgICAgICB3aW5kb3cuc2VjdXJlQWNjZXNzSXRlbSA9IGZ1bmN0aW9uKGlkKSB7DQogICAgICAgICAgICAgICAgJC53aW5kb3coew0KICAgICAgICAgICAgICAgICAgICBpZDogJ3NlY3VyZUFjY2Vzc0l0ZW0nK2lkLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0FjYyZlZ3JhdmU7cyBzJmVhY3V0ZTtjdXJpcyZlYWN1dGU7JywNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAnYWRtaW4vZG9jdW1lbnRzL2ZpY2hpZXIvdW5sb2NrLycraWQsDQogICAgICAgICAgICAgICAgICAgIGljb246ICdpbWctc2tpbi9zZXRzL2ltYWdpY2FsLXByby9tZWRpdW0vc2VjdXJlLWtleS5wbmcnLA0KICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdhamF4JywNCiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IC0xLAkJIC8vIHRoZSBtaW5pbXVtIHdpZHRoLCBpZiAtMSBtZWFucyBubyBjaGVja2luZw0KICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IC0xLAkJIC8vIHRoZSBtaW5pbXVtIGhlaWdodCwgaWYgLTEgbWVhbnMgbm8gY2hlY2tpbmcNCiAgICAgICAgICAgICAgICAgICAgc2hvd0Zvb3RlcjogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsDQoJCQkJCW1pbmltaXphYmxlOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgc2hvd01vZGFsOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICB3aWR0aDogNTYwLA0KICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDU1MCwNCiAgICAgICAgICAgICAgICAgICAgY2hlY2tCb3VuZGFyeTogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgd2l0aGluQnJvd3NlcldpbmRvdzogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIG9uSWZyYW1lRW5kOiBmdW5jdGlvbigpIHt9LA0KICAgICAgICAgICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJBY3Rpb25SdW4oJ3JlZnJlc2gnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfTsNCg0KCQkJJCggd2luZG93ICkucmVzaXplKGZ1bmN0aW9uKCkgew0KCQkJCWRvY3VtZW50VHBsLnVwZGF0ZUhlaWdodCgpOw0KCQkJfSk7DQoNCgkJCSQoZnVuY3Rpb24gKCkgew0KCQkJCWRvY3VtZW50VHBsLmJpbmQoKTsNCgkJCQlkb2N1bWVudFRwbC51cGRhdGVWaXNpYmxlKCk7DQoJCQkJZG9jdW1lbnRUcGwudXBkYXRlSGVpZ2h0KCk7DQoJCQl9KTsNCg0KCQkJJCh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJZG9jdW1lbnRUcGwudXBkYXRlSGVpZ2h0KCk7DQoJCQkJc2V0VGltZW91dChmdW5jdGlvbigpeyBkb2N1bWVudFRwbC51cGRhdGVIZWlnaHQoKTsgfSwgNTAwKTsNCgkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGRvY3VtZW50VHBsLnVwZGF0ZUhlaWdodCgpOyB9LCAxMDAwKTsNCg0KCQkJCWRvY3VtZW50VHBsLmRhdGFSZXF1ZXN0KCk7DQoJCQl9KTsNCg0KDQoJCQkvLzwvc2NyaXB0PgovLyA8c2NyaXB0Pg0KCQkJdmFyIGdhbGVyaWVQYWRkaW5nID0gMTA7DQoJCQl2YXIgZ2FsZXJpZUxhYmVsSGVpZ2h0ID0gMzA7DQoJCQl2YXIgbWF4SGVpZ2h0Ow0KCQkJdmFyIGdhbGVyaWVzVG1wU2Nyb2xsID0ge307DQoJCQl2YXIgZ2FsZXJpZXNDdXJyZW50ID0gJ21haW4nOw0KCQkJdmFyIGdhbGVyaWVUcGwgPSB7DQoJCQkJLy8gc2hvdyB0aGUgZ2FsZXJpZXMgc2VsZWN0b3INCgkJCQlzaG93TWFpbjogZnVuY3Rpb24oZWxlbWVudCkgew0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5nYWxlcmllcy1jb250YWluZXInKS5maW5kKCcuZ2FsZXJpZScpLmZhZGVkU2xpZGVVcCg0MDApOw0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5nYWxlcmllcy1jb250YWluZXInKS5maW5kKCcuZ2FsZXJpZXMnKS5mYWRlZFNsaWRlRG93big0MDApOw0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5nYWxlcmllcy1jb250YWluZXInKS5maW5kKCcuZ2FsZXJpZXMtc2hvdycpLmZhZGVkU2xpZGVVcCg0MDApOw0KCQkJCQkvLyQoJ2JvZHknKS5zY3JvbGxUbyhnYWxlcmllc1RtcFNjcm9sbCwgNTAwKTsNCgkJCQkJLy9nYWxlcmllc0N1cnJlbnQgPSAnbWFpbic7DQoJCQkJCWdhbGVyaWVUcGwuc3RvcmVTY3JvbGwoJ21haW4nKTsNCgkJCQl9LA0KDQoJCQkJLy8gc2hvdyB0aGUgZ2FsZXJpZXMgc2VsZWN0b3INCgkJCQlzaG93R2FsZXJpZTogZnVuY3Rpb24oZWxlbWVudCwgaWQpIHsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykuZmluZCgnLmdhbGVyaWVzJykuZmFkZWRTbGlkZVVwKDQwMCk7DQoJCQkJCSQoZWxlbWVudCkucGFyZW50cygnLmdhbGVyaWVzLWNvbnRhaW5lcicpLmZpbmQoJy5nYWxlcmllcy1zaG93JykuZmFkZWRTbGlkZURvd24oNDAwKTsNCg0KDQoJCQkJCSQoZWxlbWVudCkucGFyZW50cygnLmdhbGVyaWVzLWNvbnRhaW5lcicpLmZpbmQoJy5nYWxlcmllJykubm90KCcjZ2FsZXJpZV8nK2lkKS5mYWRlZFNsaWRlVXAoNDAwKTsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykuZmluZCgnI2dhbGVyaWVfJytpZCkuZmFkZWRTbGlkZURvd24oNDAwLCBmdW5jdGlvbigpIHtnYWxlcmllVHBsLnN0b3JlU2Nyb2xsKGlkKTt9KTsNCgkJCQl9LA0KDQoJCQkJc3RvcmVTY3JvbGw6IGZ1bmN0aW9uKHRhcmdldCkgew0KCQkJCQlnYWxlcmllc1RtcFNjcm9sbFtnYWxlcmllc0N1cnJlbnRdID0gJCggJ2JvZHknICkuc2Nyb2xsVG9wKCk7DQoJCQkJCS8vY29uc29sZS5sb2coJ3N0b3JlICcrZ2FsZXJpZXNDdXJyZW50KTsNCgkJCQkJaWYgKHR5cGVvZiBnYWxlcmllc1RtcFNjcm9sbFt0YXJnZXRdID09PSAidW5kZWZpbmVkIiB8fCB0cnVlKSB7DQoJCQkJCQkkKCdib2R5Jykuc2Nyb2xsVG8oJCgnI2dhbGVyaWVfJyt0YXJnZXQpLCA1MDApOw0KCQkJCQkJLy9jb25zb2xlLmxvZygnbG9hZCAnKycjZ2FsZXJpZV8nK3RhcmdldCk7DQoJCQkJCX0NCgkJCQkJZWxzZQl7DQoJCQkJCQkkKCdib2R5Jykuc2Nyb2xsVG8oZ2FsZXJpZXNUbXBTY3JvbGxbdGFyZ2V0XSwgNTAwKTsNCgkJCQkJCS8vY29uc29sZS5sb2coJ2xvYWQgJyt0YXJnZXQpOw0KCQkJCQl9DQoJCQkJCWdhbGVyaWVzQ3VycmVudCA9IHRhcmdldDsNCgkJCQl9LA0KDQoJCQkJdXBkYXRlSGVpZ2h0OiBmdW5jdGlvbigpIHsNCgkJCQkJJCgnLmdhbGVyaWVzLCAuZ2FsZXJpZS1ncm91cCcpLmVhY2goZnVuY3Rpb24gKCkgew0KCQkJCQkJaWYgKCQodGhpcykuZGF0YSgndGlsZS13aWR0aCcpKSB7DQoJCQkJCQkJdmFyIGdhbGVyaWVzV2lkdGggPSAkKHRoaXMpLndpZHRoKCk7DQoJCQkJCQkJaWYgKCFnYWxlcmllc1dpZHRoKSB7DQoJCQkJCQkJCWdhbGVyaWVzV2lkdGggPSAkKHRoaXMpLnBhcmVudHMoJy5nYWxlcmllcy1jb250YWluZXInKS53aWR0aCgpOw0KCQkJCQkJCX0NCgkJCQkJCQlpZiAoZ2FsZXJpZXNXaWR0aCA+IDEwMCkgew0KCQkJCQkJCQl2YXIgbnVtYmVyQ29sID0gTWF0aC5jZWlsKGdhbGVyaWVzV2lkdGggLyAkKHRoaXMpLmRhdGEoJ3RpbGUtd2lkdGgnKSk7DQoJCQkJCQkJCW1heEhlaWdodCA9IChnYWxlcmllc1dpZHRoIC8gbnVtYmVyQ29sKSAvICQodGhpcykuZGF0YSgndGlsZS13aWR0aCcpICogJCh0aGlzKS5kYXRhKCd0aWxlLWhlaWdodCcpOw0KDQoJCQkJCQkJCSQodGhpcykuZmluZCgnLmdhbGVyaWVzLWJsb2NrJykuY3NzKCd3aWR0aCcsICgxMDAgLyBudW1iZXJDb2wpICsgJyUnKS5jc3MoJ3BhZGRpbmcnLCBnYWxlcmllUGFkZGluZyArICdweCcpOw0KCQkJCQkJCQkkKHRoaXMpLmRhdGEoJ2NvbCcsIG51bWJlckNvbCk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9KTsNCg0KCQkJCQkkKCcuZ2FsZXJpZS1ncm91cDp2aXNpYmxlJykuY3NzKCd3aWR0aCcsICdjYWxjKDEwMCUgKyAnKyhnYWxlcmllUGFkZGluZyoyKSsncHgpJykuY3NzKCdtYXJnaW5MZWZ0JywgJy0nK2dhbGVyaWVQYWRkaW5nKydweCcpOw0KDQoJCQkJCSQoJy5nYWxlcmllcy1pbWcnKS5oZWlnaHQocGFyc2VJbnQobWF4SGVpZ2h0KSk7DQoNCgkJCQkJJCgnLmdhbGVyaWUtZ3JvdXAnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCgkJCQkJCWlmICgkKHRoaXMpLmRhdGEoJ3ByZXNlbnRhdGlvbicpKSB7DQoJCQkJCQkJJCh0aGlzKS5maW5kKCcuZ2FsZXJpZXMtbGVnZW5kJykuY3NzKCdvdmVyZmxvdycsICdoaWRkZW4nKS5jc3MoJ3doaXRlLXNwYWNlJywgJ25vd3JhcCcpLmNzcygndGV4dC1vdmVyZmxvdycsICdlbGxpcHNpcycpOw0KDQoJCQkJCQkJaWYgKCQodGhpcykuZGF0YSgnY29sJykgPiA0ICkgew0KCQkJCQkJCQkkKHRoaXMpLmhlaWdodChwYXJzZUludChtYXhIZWlnaHQrZ2FsZXJpZUxhYmVsSGVpZ2h0KyhnYWxlcmllUGFkZGluZyoyKSkpLmNzcygnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UgaWYgKCQodGhpcykuZGF0YSgnY29sJykgPT0gNCB8fCAkKHRoaXMpLmRhdGEoJ2NvbCcpID09IDMgKSB7DQoJCQkJCQkJCSQodGhpcykuaGVpZ2h0KHBhcnNlSW50KChtYXhIZWlnaHQrZ2FsZXJpZUxhYmVsSGVpZ2h0KyhnYWxlcmllUGFkZGluZyoyKSkqMikpLmNzcygnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2Ugew0KCQkJCQkJCQkkKHRoaXMpLmhlaWdodCgnYXV0bycpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfSk7DQoNCgkJCQl9LA0KDQoJCQkJdXBkYXRlVmlzaWJsZTogZnVuY3Rpb24oZ2FsZXJpZSkgew0KCQkJCQlpZiAoIWdhbGVyaWUpIGdhbGVyaWUgPSAkKCcuZ2FsZXJpZXMtY29udGFpbmVyJyk7DQoJCQkJCWVsc2UgZ2FsZXJpZSA9ICQoZ2FsZXJpZSk7DQoNCgkJCQkJZ2FsZXJpZS5maW5kKCcuZ2FsZXJpZXMtaW1nOnZpc2libGUnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCgkJCQkJCWlmICgkKHRoaXMpLmRhdGEoJ3NyYycpKSB7DQoJCQkJCQkJJCh0aGlzKS5hZGRDbGFzcygndHJhbnNwYXJlbnQnKTsNCgkJCQkJCQkkKHRoaXMpLmF0dHIoJ3NyYycsICQodGhpcykuZGF0YSgnc3JjJykpOw0KCQkJCQkJCS8vJCh0aGlzKS5jc3MoJ2JhY2tncm91bmRJbWFnZScsICd1cmwoJyskKHRoaXMpLmRhdGEoJ3NyYycpKycpJyk7DQoJCQkJCQkJdmFyIGN1cnJlbnRJbWcgPSAkKHRoaXMpDQoJCQkJCQkJJCgnPGltZy8+JykuYXR0cignc3JjJywgJCh0aGlzKS5kYXRhKCdzcmMnKSkub24oJ2xvYWQnLCBmdW5jdGlvbigpIHsNCgkJCQkJCQkJJCh0aGlzKS5yZW1vdmUoKTsgLy8gcHJldmVudCBtZW1vcnkgbGVha3MgYXMgQGJlbndlZXQgc3VnZ2VzdGVkDQoJCQkJCQkJCWN1cnJlbnRJbWcuY3NzKCdiYWNrZ3JvdW5kSW1hZ2UnLCAndXJsKCcrJCh0aGlzKS5hdHRyKCdzcmMnKSsnKScpOw0KCQkJCQkJCQljdXJyZW50SW1nLnJlbW92ZUNsYXNzKCd0cmFuc3BhcmVudCcpOw0KCQkJCQkJCX0pOw0KCQkJCQkJCSQodGhpcykuZGF0YSgnc3JjJywgbnVsbCk7DQoJCQkJCQl9DQoJCQkJCX0pOw0KCQkJCX0sDQoNCgkJCQlkYXRhUmVxdWVzdDogZnVuY3Rpb24oKSB7DQoJCQkJCSQoJy5nYWxlcmllc1tkYXRhLWV4dGVybmFsXScpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQkJCQl2YXIgY3VycmVudEdhbGVyaWUgPSB0aGlzOw0KCQkJCQkJdmFyIHJlcXVlc3QgPSAkLmFqYXgoew0KCQkJCQkJCXVybDogJCh0aGlzKS5kYXRhKCdleHRlcm5hbCcpLA0KCQkJCQkJCXR5cGU6ICJHRVQiLA0KCQkJCQkJCWRhdGFUeXBlOiAianNvbiIsDQoJCQkJCQkJc3VjY2VzczogZnVuY3Rpb24oZGF0YSkgew0KCQkJCQkJCQlnYWxlcmllVHBsLmRhdGFJbXBvcnQoY3VycmVudEdhbGVyaWUsIGRhdGEuZGF0YSwgdHJ1ZSk7DQoJCQkJCQkJfQ0KCQkJCQkJfSk7DQoJCQkJCX0pOw0KCQkJCX0sDQoNCgkJCQlkYXRhSW1wb3J0OiBmdW5jdGlvbihnYWxlcmllLCBkYXRhLCByZWZyZXNoKSB7DQoJCQkJCXZhciBkZWZhdWx0V2lkdGggPSAkKGdhbGVyaWUpLmZpbmQoJy5nYWxlcmllLWdyb3VwJykuZGF0YSgndGlsZS13aWR0aCcpDQoJCQkJCXZhciBkZWZhdWx0SGVpZ2h0ID0gJChnYWxlcmllKS5maW5kKCcuZ2FsZXJpZS1ncm91cCcpLmRhdGEoJ3RpbGUtaGVpZ2h0JykNCgkJCQkJdmFyIGdhbGlkID0gJChnYWxlcmllKS5kYXRhKCdpZCcpOw0KCQkJCQl2YXIgaHRtbCA9ICcnOw0KDQoJCQkJCS8vIGNoYW5nZSBpbWFnZSBjb3Zlcg0KCQkJCQlpZiAoZGF0YS51cmxfdGgpIHsNCgkJCQkJCXZhciBnYWxMaW5rID0gJCgnLmdhbGVyaWVzLWxpbmtbZGF0YS1pZD0nICsgZ2FsaWQgKyAnXScpOw0KCQkJCQkJZ2FsTGluay5maW5kKCcuZ2FsZXJpZXMtaW1nJykuYXR0cignZGF0YS1zcmMnLCBkYXRhLnVybF90aCkuYXR0cignc3JjJywgZGF0YS51cmxfdGgpLmRhdGEoJ3NyYycsIGRhdGEudXJsX3RoKTsNCgkJCQkJCWdhbGVyaWVUcGwudXBkYXRlVmlzaWJsZShnYWxMaW5rKTsNCgkJCQkJfQ0KDQoJCQkJCS8vIGFkZCBnYWxlcmllcw0KCQkJCQlpZiAoZGF0YS5jaGlsZHMpIHsNCgkJCQkJCWZvciAodmFyIGkgPSAwLCBsZW4gPSBkYXRhLmNoaWxkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgew0KCQkJCQkJCWl0ZW0gPSBkYXRhLmNoaWxkc1tpXTsNCgkJCQkJCQlpZiAoaXRlbS5hY3RpZiAmJiAhaXRlbS5wYXNzd29yZF9jb2RlKSB7DQoJCQkJCQkJCXZhciBsYWJlbCA9IGl0ZW0ubmFtZTsNCgkJCQkJCQkJdmFyIHRodW1iID0gaXRlbS51cmxfdGg7DQoJCQkJCQkJCXZhciBpbWcgPSBpdGVtLnVybDsNCgkJCQkJCQkJdmFyIGlkID0gJChnYWxlcmllKS5kYXRhKCdpZCcpICsgJ18nICsgaXRlbS5pZDsNCg0KCQkJCQkJCQkvLyBjcmVhdGUgZ2FsZXJpZQ0KCQkJCQkJCQl2YXIgZ2FsID0gJCgnPGRpdiBjbGFzcz0iZ2FsZXJpZXMiIGlkPSJnYWxlcmllXycgKyBpZCArICciIGRhdGEtaWQ9IicgKyBpZCArICciIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48ZGl2IGNsYXNzPSJnYWxlcmllLWhlYWRlciI+PGgyPicgKyBsYWJlbCArICc8L2gyPjwvZGl2PjxkaXYgY2xhc3M9ImdhbGVyaWUtZ3JvdXAiIGFsaWduPSJsZWZ0IiBjbGFzcz0iZ2FsZXJpZS1ncm91cCIgZGF0YS10aWxlLXdpZHRoPSInICsgZGVmYXVsdFdpZHRoICsgJyIgZGF0YS10aWxlLWhlaWdodD0iJyArIGRlZmF1bHRIZWlnaHQgKyAnIiBkYXRhLXByZXNlbnRhdGlvbj0iIj48L2Rpdj48L2Rpdj4nKTsNCgkJCQkJCQkJJCgnLmdhbGVyaWVzLWNvbnRhaW5lcicpLmFwcGVuZChnYWwpOw0KDQoJCQkJCQkJCS8vIGdvIGJhY2sgYnRuDQoJCQkJCQkJCXZhciBiYWNrID0gJzxhIGRhdGEtaWQ9IicgKyBnYWxpZCArICciIGNhcHRpb249IlJldG91ciIgZGF0YS1jYXB0aW9uPSJSZXRvdXIiIGNsYXNzPSJnYWxlcmllcy1saW5rIHBhcmVudCIgZGF0YS1pZD0iJyArIGdhbGlkICsgJyIgPjxkaXYgc3R5bGU9IiBkaXNwbGF5OmlubGluZS1ibG9jazsgem9vbToxOyB2ZXJ0aWNhbC1hbGlnbjp0b3A7IHRleHQtYWxpZ246Y2VudGVyOyB3aWR0aDonICsgZGVmYXVsdFdpZHRoICsgJ3B4OyBvdmVyZmxvdzpoaWRkZW47ICIgY2xhc3M9ImdhbGVyaWVzLWJsb2NrIiBjbGFzcz0iaW1nZGl2IiA+IDxkaXYgY2xhc3M9ImdhbGVyaWVzLWJsb2NrLWluc2lkZSI+IDxzcGFuIGJvcmRlcj0iMCIgZGF0YS1zcmM9InRoZW1lcy9ia3MvaW1nL3BhcmVudC5wbmciIGFsdD0iUmV0b3VyIiBjbGFzcz0iZ2FsZXJpZXMtaW1nIGltZ190aCIgc3R5bGU9IndpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IGhlaWdodDonICsgZGVmYXVsdEhlaWdodCArICdweDsgIj4gPC9zcGFuPiA8ZGl2IGNsYXNzPSJnYWxlcmllcy1sZWdlbmQgbGVnZW5kZSIgc3R5bGU9Im1pbi1oZWlnaHQ6MjVweDsgdGV4dC1hbGlnbjpjZW50ZXI7Ij48c3Bhbj4gUmV0b3VyIDwvc3Bhbj48L2Rpdj48L2Rpdj48L2Rpdj48L2E+JzsNCgkJCQkJCQkJZ2FsLmZpbmQoJy5nYWxlcmllLWdyb3VwJykuYXBwZW5kKGJhY2spOw0KDQoJCQkJCQkJCS8vIGdvIHRvIGdhbGVyaWUgYnRuDQoJCQkJCQkJCWh0bWwgKz0gJzxhIGRhdGEtaWQ9IicgKyBpZCArICciIGNhcHRpb249IicgKyBsYWJlbCArICciIGRhdGEtY2FwdGlvbj0iJyArIGxhYmVsICsgJyIgY2xhc3M9ImdhbGVyaWVzLWxpbmsgR2FsZXJpZUFsYnVtIiBkYXRhLWlkPSInICsgaWQgKyAnIiA+PGRpdiBzdHlsZT0iIGRpc3BsYXk6aW5saW5lLWJsb2NrOyB6b29tOjE7IHZlcnRpY2FsLWFsaWduOnRvcDsgdGV4dC1hbGlnbjpjZW50ZXI7IHdpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IG92ZXJmbG93OmhpZGRlbjsgIiBjbGFzcz0iZ2FsZXJpZXMtYmxvY2siIGNsYXNzPSJpbWdkaXYiID4gPGRpdiBjbGFzcz0iZ2FsZXJpZXMtYmxvY2staW5zaWRlIj4gPHNwYW4gYm9yZGVyPSIwIiBkYXRhLXNyYz0iJyArIHRodW1iICsgJyIgYWx0PSInICsgbGFiZWwgKyAnIiBjbGFzcz0iZ2FsZXJpZXMtaW1nIGltZ190aCIgc3R5bGU9IndpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IGhlaWdodDonICsgZGVmYXVsdEhlaWdodCArICdweDsgIj4gPC9zcGFuPiA8ZGl2IGNsYXNzPSJnYWxlcmllcy1sZWdlbmQgbGVnZW5kZSIgc3R5bGU9Im1pbi1oZWlnaHQ6MjVweDsgdGV4dC1hbGlnbjpjZW50ZXI7Ij48c3Bhbj4nICsgbGFiZWwgKyAnPC9zcGFuPjwvZGl2PjwvZGl2PjwvZGl2PjwvYT4nOw0KDQoJCQkJCQkJCWdhbGVyaWVUcGwuZGF0YUltcG9ydChnYWwsIGl0ZW0pOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KDQoJCQkJCS8vIGFkZCBpbWFnZXMNCgkJCQkJaWYgKGRhdGEuaW1hZ2VzKSB7DQoJCQkJCQlmb3IgKHZhciBpID0gMCwgbGVuID0gZGF0YS5pbWFnZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsNCgkJCQkJCQlpdGVtID0gZGF0YS5pbWFnZXNbaV07DQoJCQkJCQkJaWYgKGl0ZW0uYWN0aWYgJiYgIWl0ZW0ucGFzc3dvcmRfY29kZSkgew0KCQkJCQkJCQl2YXIgbGFiZWwgPSBpdGVtLm5hbWU7DQoJCQkJCQkJCXZhciB0aHVtYiA9IGl0ZW0udXJsX3RoOw0KCQkJCQkJCQl2YXIgaW1nID0gaXRlbS51cmw7DQoJCQkJCQkJCXZhciBpZCA9ICQoZ2FsZXJpZSkuZGF0YSgnaWQnKSArICdfJyArIGl0ZW0uaWQ7DQoJCQkJCQkJCWh0bWwgKz0gJzxhIGhyZWY9IicgKyBpbWcgKyAnIiBjbGFzcz0iaW1nYm94IiByZWw9ImdhbGxlcnlfJyArIGdhbGlkICsgJyIgZGF0YS1mYW5jeWJveD0iZ2FsbGVyeV8nICsgZ2FsaWQgKyAnIiBjYXB0aW9uPSInICsgbGFiZWwgKyAnIiBkYXRhLWNhcHRpb249IicgKyBsYWJlbCArICciIGNsYXNzPSJnYWxlcmllcy1saW5rIEdhbGVyaWVJbWFnZSIgZGF0YS1pZD0iJyArIGlkICsgJyI+PGRpdiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7em9vbToxO3ZlcnRpY2FsLWFsaWduOnRvcDt0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgb3ZlcmZsb3c6aGlkZGVuOyAiY2xhc3M9ImdhbGVyaWVzLWJsb2NrImNsYXNzPSJpbWdkaXYiPjxkaXYgY2xhc3M9ImdhbGVyaWVzLWJsb2NrLWluc2lkZSI+PHNwYW4gYm9yZGVyPSIwIiBkYXRhLXNyYz0iJyArIHRodW1iICsgJyIgYWx0PSInICsgbGFiZWwgKyAnIiBjbGFzcz0iZ2FsZXJpZXMtaW1nIGltZ190aCIgc3R5bGU9IndpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IGhlaWdodDonICsgZGVmYXVsdEhlaWdodCArICdweDsgIj48L3NwYW4+PGRpdiBjbGFzcz0iZ2FsZXJpZXMtbGVnZW5kIGxlZ2VuZGUiIHN0eWxlPSJtaW4taGVpZ2h0OjI1cHg7IHRleHQtYWxpZ246Y2VudGVyOyI+PHNwYW4+JyArIGxhYmVsICsgJzwvc3Bhbj48L2Rpdj48L2Rpdj48L2Rpdj48L2E+JzsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCQkkKGdhbGVyaWUpLmZpbmQoJy5nYWxlcmllLWdyb3VwJykuYXBwZW5kKGh0bWwpOw0KDQoJCQkJCWdhbGVyaWVUcGwuYmluZCgkKGdhbGVyaWUpKTsNCg0KCQkJCQlpZiAocmVmcmVzaCkgew0KCQkJCQkJZ2FsZXJpZVRwbC51cGRhdGVWaXNpYmxlKCk7DQoJCQkJCQlnYWxlcmllVHBsLnVwZGF0ZUhlaWdodCgpOw0KCQkJCQl9DQoJCQkJfSwNCg0KCQkJCWJpbmQ6IGZ1bmN0aW9uKGdhbGVyaWUpIHsNCgkJCQkJaWYgKCFnYWxlcmllKSBnYWxlcmllID0gJCgnLmdhbGVyaWVzLWNvbnRhaW5lcicpOw0KCQkJCQllbHNlIGdhbGVyaWUgPSAkKGdhbGVyaWUpOw0KDQoNCgkJCQkJZ2FsZXJpZS5maW5kKCcuZ2FsZXJpZXMtaW1nJykuYWRkQ2xhc3MoJ3RyYW5zcGFyZW50Jyk7DQoNCgkJCQkJZ2FsZXJpZS5maW5kKCcuZ2FsZXJpZXMtaW1nJykubm90KCI6dmlzaWJsZSIpLmVhY2goZnVuY3Rpb24gKCkgew0KCQkJCQkJaWYgKCEkKHRoaXMpLmRhdGEoInNyYyIpKSB7DQoJCQkJCQkJJCh0aGlzKS5kYXRhKCJzcmMiLCB0aGlzLnNyYyk7DQoJCQkJCQkJdGhpcy5zcmMgPSAianMvYmxhbmsuZ2lmIjsNCgkJCQkJCX0NCgkJCQkJfSk7DQoNCgkJCQkJdmFyIGdhbGVyaWVzTGluayA9IGdhbGVyaWUuZmluZCgnLmdhbGVyaWVzLWxpbms6bm90KC5iaW5kZWQpJyk7DQoJCQkJCWdhbGVyaWVzTGluay5hZGRDbGFzcygnYmluZGVkJyk7DQoJCQkJCWdhbGVyaWVzTGluay5jbGljayhmdW5jdGlvbigpIHsNCgkJCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgZ2FsZXJpZVRwbC51cGRhdGVWaXNpYmxlKCk7IH0sIDEwMCk7DQoJCQkJCX0pOw0KDQoNCgkJCQkJLy8gQ29udGVudSBkZSBnYWxlcmllDQoJCQkJCWdhbGVyaWVzTGluay5maWx0ZXIoJzpub3QoLnNlY3VyZSknKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCQkJCWdhbGVyaWVUcGwuc2hvd0dhbGVyaWUodGhpcywgJCh0aGlzKS5kYXRhKCdpZCcpKTsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfSk7DQoNCgkJCQkJLy8gQWNj77+9cyBzZWN1cmUNCgkJCQkJZ2FsZXJpZXNMaW5rLmZpbHRlcignLnNlY3VyZScpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQkJCQkJd2luZG93LnNlY3VyZUFjY2Vzc0l0ZW0oJCh0aGlzKS5kYXRhKCdpZCcpKTsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfSk7DQoJCQkJfQ0KDQoJCQl9Ow0KDQoJCQl3aW5kb3cuZ2FsZXJpZVRwbCA9IGdhbGVyaWVUcGw7DQoNCgkJCXdpbmRvdy5yZXBvcnRJdGVtID0gZnVuY3Rpb24oaWQpIHsNCiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtZXJpYyhpZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgaWQgPSBpZC5kYXRhKCdpZCcpOw0KICAgICAgICAgICAgICAgIH0NCg0KCQkJCSQud2luZG93KHsNCgkJCQkJaWQ6ICdyZXBvcnRJdGVtJytpZCwNCgkJCQkJdGl0bGU6ICdSZXBvcnRlciB1biBwcm9ibGVtZSBhdmVjIHVuZSBpbWFnZScsDQoJCQkJCXVybDogJ2FkbWluL2dhbGVyaWVzL2ltYWdlL3JlcG9ydC8nK2lkKyc/b3V0cHV0PXRleHQnLA0KCQkJCQlpY29uOiAnc3RhdHVzLXdhcm5pbmcnLA0KCQkJCQltZXRob2Q6ICdhamF4JywNCgkJCQkJbWF4V2lkdGg6IC0xLAkJIC8vIHRoZSBtaW5pbXVtIHdpZHRoLCBpZiAtMSBtZWFucyBubyBjaGVja2luZw0KCQkJCQltYXhIZWlnaHQ6IC0xLAkJIC8vIHRoZSBtaW5pbXVtIGhlaWdodCwgaWYgLTEgbWVhbnMgbm8gY2hlY2tpbmcNCgkJCQkJc2hvd0Zvb3RlcjogZmFsc2UsDQoJCQkJCW1heGltaXphYmxlOiBmYWxzZSwNCgkJCQkJY2xvc2FibGU6IHRydWUsDQoJCQkJCW1pbmltaXphYmxlOiBmYWxzZSwNCgkJCQkJc2hvd01vZGFsOiB0cnVlLA0KCQkJCQl3aWR0aDogOTAwLA0KCQkJCQloZWlnaHQ6IDU3NSwNCgkJCQkJY2hlY2tCb3VuZGFyeTogdHJ1ZSwNCgkJCQkJd2l0aGluQnJvd3NlcldpbmRvdzogZmFsc2UsDQoJCQkJCW9uSWZyYW1lRW5kOiBmdW5jdGlvbigpIHt9LA0KCQkJCQlvbkNsb3NlOiBmdW5jdGlvbigpIHsNCgkJCQkJCWJyb3dzZXJBY3Rpb25SdW4oJ3JlZnJlc2gnKTsNCgkJCQkJfQ0KCQkJCX0pOw0KCQkJfTsNCiAgICAgICAgICAgIHdpbmRvdy5zZWN1cmVBY2Nlc3NJdGVtID0gZnVuY3Rpb24oaWQpIHsNCiAgICAgICAgICAgICAgICAkLndpbmRvdyh7DQogICAgICAgICAgICAgICAgICAgIGlkOiAnc2VjdXJlQWNjZXNzSXRlbScraWQsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnQWNjJmVncmF2ZTtzIHMmZWFjdXRlO2N1cmlzJmVhY3V0ZTsnLA0KICAgICAgICAgICAgICAgICAgICB1cmw6ICdhZG1pbi9nYWxlcmllcy9pbWFnZS91bmxvY2svJytpZCwNCiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2ltZy1za2luL3NldHMvaW1hZ2ljYWwtcHJvL21lZGl1bS9zZWN1cmUta2V5LnBuZycsDQogICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ2FqYXgnLA0KICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogLTEsCQkgLy8gdGhlIG1pbmltdW0gd2lkdGgsIGlmIC0xIG1lYW5zIG5vIGNoZWNraW5nDQogICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogLTEsCQkgLy8gdGhlIG1pbmltdW0gaGVpZ2h0LCBpZiAtMSBtZWFucyBubyBjaGVja2luZw0KICAgICAgICAgICAgICAgICAgICBzaG93Rm9vdGVyOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgbWF4aW1pemFibGU6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSwNCgkJCQkJbWluaW1pemFibGU6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICBzaG93TW9kYWw6IHRydWUsDQogICAgICAgICAgICAgICAgICAgIHdpZHRoOiA1NjAsDQogICAgICAgICAgICAgICAgICAgIGhlaWdodDogNTUwLA0KICAgICAgICAgICAgICAgICAgICBjaGVja0JvdW5kYXJ5OiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICB3aXRoaW5Ccm93c2VyV2luZG93OiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgb25JZnJhbWVFbmQ6IGZ1bmN0aW9uKCkge30sDQogICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlckFjdGlvblJ1bigncmVmcmVzaCcpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9Ow0KDQoJCQkkKCB3aW5kb3cgKS5yZXNpemUoZnVuY3Rpb24oKSB7DQoJCQkJZ2FsZXJpZVRwbC51cGRhdGVIZWlnaHQoKTsNCgkJCX0pOw0KDQoJCQkkKGZ1bmN0aW9uICgpIHsNCgkJCQlnYWxlcmllVHBsLmJpbmQoKTsNCgkJCQlnYWxlcmllVHBsLnVwZGF0ZVZpc2libGUoKTsNCgkJCQlnYWxlcmllVHBsLnVwZGF0ZUhlaWdodCgpOw0KCQkJfSk7DQoNCgkJCSQod2luZG93KS5sb2FkKGZ1bmN0aW9uKCkgew0KCQkJCWdhbGVyaWVUcGwudXBkYXRlSGVpZ2h0KCk7DQoJCQkJc2V0VGltZW91dChmdW5jdGlvbigpeyBnYWxlcmllVHBsLnVwZGF0ZUhlaWdodCgpOyB9LCA1MDApOw0KCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgZ2FsZXJpZVRwbC51cGRhdGVIZWlnaHQoKTsgfSwgMTAwMCk7DQoNCgkJCQlnYWxlcmllVHBsLmRhdGFSZXF1ZXN0KCk7DQoJCQl9KTsNCg0KDQoJCQkvLzwvc2NyaXB0Pg==