
VIDEO
SKETCHES
Test Tube
CiAgLnZnLWVtYmVkewogICAgLS1vcmFuZ2U6I0RCOEIzQjsgLS1jcmVhbTojRjRFRUREOyAtLWluazojMjQxQzEzOyAtLXRlYWwtZGFyazojMjM0QTQzOyAtLXRlYWw6IzMzNjY1QzsKICB9CiAgLnZnLWVtYmVkLCAudmctZW1iZWQgKnsgYm94LXNpemluZzpib3JkZXItYm94OyB9CiAgLnZnLWVtYmVkewogICAgd2lkdGg6MTAwdnc7IG1heC13aWR0aDoxMDB2dzsKICAgIHBvc2l0aW9uOnJlbGF0aXZlOyBsZWZ0OjUwJTsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7CiAgICBwYWRkaW5nOjUycHggNXZ3OyBtYXJnaW46MDsKICAgIGZvbnQtZmFtaWx5OidJQk0gUGxleCBNb25vJyxtb25vc3BhY2U7CiAgfQogIC52Zy1lbWJlZCAudmctZ3JpZHsgbWF4LXdpZHRoOjExMDBweDsgbWFyZ2luOjAgYXV0bzsgfQoKICAvKiBGTFVTSEVELXN0eWxlIGhlYWRpbmcgKi8KICAudmctZW1iZWQgLnZnLWhlYWR7IG1heC13aWR0aDoxMTAwcHg7IG1hcmdpbjowIGF1dG8gMjZweDsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAudmctZW1iZWQgLnZnLWV5ZWJyb3d7CiAgICBmb250LWZhbWlseTonSUJNIFBsZXggTW9ubycsbW9ub3NwYWNlOyBmb250LXdlaWdodDo1MDA7IGZvbnQtc2l6ZToxMi41cHg7CiAgICBsZXR0ZXItc3BhY2luZzowLjE2ZW07IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgY29sb3I6dmFyKC0tb3JhbmdlKTsKICAgIG1hcmdpbjowIDAgMTBweDsgdGV4dC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4zNSk7CiAgfQogIC52Zy1lbWJlZCAudmctdGl0bGV7CiAgICBmb250LWZhbWlseTonTGlicmUgQmFza2VydmlsbGUnLHNlcmlmOyBmb250LXdlaWdodDo3MDA7CiAgICBmb250LXNpemU6Y2xhbXAoMjhweCw0LjV2dyw0NnB4KTsgbGluZS1oZWlnaHQ6MS4xOyBjb2xvcjp2YXIoLS1jcmVhbSk7CiAgICBtYXJnaW46MDsgdGV4dC1zaGFkb3c6MCAycHggNnB4IHJnYmEoMCwwLDAsMC4zNSk7CiAgfQoKICAudmctZW1iZWQgLnZnLWdyaWR7IGRpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLCAxZnIpOyBnYXA6MjBweDsgfQogIEBtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsgLnZnLWVtYmVkIC52Zy1ncmlkeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyOyBnYXA6MTZweDsgfSB9CgogIC52Zy1lbWJlZCAudmctY2FyZHsKICAgIGRpc3BsYXk6YmxvY2s7IHdpZHRoOjEwMCU7IHBhZGRpbmc6MDsgYm9yZGVyOjA7IGJhY2tncm91bmQ6bm9uZTsKICAgIHRleHQtYWxpZ246bGVmdDsgY3Vyc29yOnBvaW50ZXI7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGNvbG9yOmluaGVyaXQ7CiAgfQogIC52Zy1lbWJlZCAudmctcG9zdGVyewogICAgcG9zaXRpb246cmVsYXRpdmU7IHdpZHRoOjEwMCU7IGFzcGVjdC1yYXRpbzoxNi85OyBib3JkZXItcmFkaXVzOjEwcHg7IG92ZXJmbG93OmhpZGRlbjsKICAgIGJhY2tncm91bmQ6dmFyKC0taW5rKTsgYm94LXNoYWRvdzowIDZweCAxNnB4IHJnYmEoMCwwLDAsMC4yOCk7CiAgICB0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMThzIGVhc2UsIGJveC1zaGFkb3cgLjE4cyBlYXNlOwogIH0KICAudmctZW1iZWQgLnZnLWNhcmQ6aG92ZXIgLnZnLXBvc3RlcnsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTNweCk7IGJveC1zaGFkb3c6MCAxMnB4IDI2cHggcmdiYSgwLDAsMCwwLjM2KTsgfQogIC52Zy1lbWJlZCAudmctcG9zdGVyIGltZ3sgcG9zaXRpb246YWJzb2x1dGU7IGluc2V0OjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOyBvYmplY3QtZml0OmNvdmVyOyBkaXNwbGF5OmJsb2NrOyB9CiAgLnZnLWVtYmVkIC52Zy1wb3N0ZXItcGh7CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsgaW5zZXQ6MDsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOnZhcigtLXRlYWwpOyBjb2xvcjp2YXIoLS1jcmVhbSk7IGZvbnQtc2l6ZToxMHB4OyBmb250LXdlaWdodDo2MDA7CiAgfQogIC52Zy1lbWJlZCAudmctcG9zdGVyOjphZnRlcnsKICAgIGNvbnRlbnQ6IiI7IHBvc2l0aW9uOmFic29sdXRlOyBpbnNldDowOyB6LWluZGV4OjE7CiAgICBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMzYsMjgsMTksMC40MiksIHJnYmEoMzYsMjgsMTksMCkgNTIlKTsKICAgIHRyYW5zaXRpb246b3BhY2l0eSAuMThzIGVhc2U7CiAgfQogIC52Zy1lbWJlZCAudmctY2FyZDpob3ZlciAudmctcG9zdGVyOjphZnRlcnsgb3BhY2l0eTowLjc7IH0KICAudmctZW1iZWQgLnZnLXBsYXl7CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjUwJTsgbGVmdDo1MCU7IHRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTsgei1pbmRleDoyOwogICAgd2lkdGg6NTRweDsgaGVpZ2h0OjU0cHg7IGJvcmRlci1yYWRpdXM6NTAlOwogICAgYmFja2dyb3VuZDpyZ2JhKDI0NCwyMzgsMjI5LDAuOTUpOyBib3JkZXI6MnB4IHNvbGlkIHZhcigtLXRlYWwtZGFyayk7CiAgICBib3gtc2hhZG93OjAgMnB4IDEwcHggcmdiYSgwLDAsMCwwLjMwKTsKICAgIGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwogICAgdHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE4cyBlYXNlLCBiYWNrZ3JvdW5kIC4xOHMgZWFzZTsKICB9CiAgLnZnLWVtYmVkIC52Zy1jYXJkOmhvdmVyIC52Zy1wbGF5eyB0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMS4wOCk7IGJhY2tncm91bmQ6dmFyKC0tb3JhbmdlKTsgfQogIC52Zy1lbWJlZCAudmctcGxheSBzdmd7IHdpZHRoOjIwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tbGVmdDozcHg7IH0KICAudmctZW1iZWQgLnZnLXBsYXkgcGF0aHsgZmlsbDp2YXIoLS10ZWFsLWRhcmspOyB0cmFuc2l0aW9uOmZpbGwgLjE4cyBlYXNlOyB9CiAgLnZnLWVtYmVkIC52Zy1jYXJkOmhvdmVyIC52Zy1wbGF5IHBhdGh7IGZpbGw6dmFyKC0tY3JlYW0pOyB9CiAgLnZnLWVtYmVkIC52Zy1jYXB7IHBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHJpZ2h0OjA7IGJvdHRvbTowOyB6LWluZGV4OjI7IHBhZGRpbmc6MTJweCAxNHB4OyBwb2ludGVyLWV2ZW50czpub25lOyB9CiAgLnZnLWVtYmVkIC52Zy1jYXAgaDN7CiAgICBmb250LWZhbWlseTonTGlicmUgQmFza2VydmlsbGUnLHNlcmlmOyBmb250LXdlaWdodDo3MDA7IGZvbnQtc2l6ZToxNnB4OwogICAgY29sb3I6dmFyKC0tY3JlYW0pOyBtYXJnaW46MDsgdGV4dC1zaGFkb3c6MCAycHggNnB4IHJnYmEoMCwwLDAsMC42KTsgbGluZS1oZWlnaHQ6MS4yNTsKICB9CiAgLnZnLWVtYmVkIC52Zy1jYXAgcHsKICAgIGZvbnQtZmFtaWx5OidJQk0gUGxleCBNb25vJyxtb25vc3BhY2U7IGZvbnQtc2l6ZToxMXB4OyBjb2xvcjp2YXIoLS1jcmVhbSk7CiAgICBtYXJnaW46M3B4IDAgMDsgb3BhY2l0eTowLjk7IHRleHQtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAuNik7CiAgfQoKICAvKiBMaWdodGJveCAqLwogIC52Zy1saWdodGJveHsKICAgIC0tb3JhbmdlOiNEQjhCM0I7IC0tY3JlYW06I0Y0RUVERDsgLS1pbms6IzI0MUMxMzsgLS10ZWFsLWRhcms6IzIzNEE0MzsgLS10ZWFsOiMzMzY2NUM7CiAgICBwb3NpdGlvbjpmaXhlZDsgaW5zZXQ6MDsgei1pbmRleDo5OTk5OTsgZGlzcGxheTpub25lOwogICAgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBiYWNrZ3JvdW5kOnJnYmEoMTUsMTAsOCwwLjc4KTsgcGFkZGluZzo0dm1pbjsKICB9CiAgLnZnLWxpZ2h0Ym94LmlzLW9wZW57IGRpc3BsYXk6ZmxleDsgfQogIC52Zy1saWdodGJveCAudmctbGItaW5uZXJ7CiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsgd2lkdGg6bWluKDgwdncsIDEyMDBweCk7IG1heC13aWR0aDoxMjAwcHg7IGFzcGVjdC1yYXRpbzoxNi85OyBtYXgtaGVpZ2h0Ojg2dmg7CiAgICBiYWNrZ3JvdW5kOiMwMDA7IGJvcmRlci1yYWRpdXM6MTJweDsgb3ZlcmZsb3c6aGlkZGVuOyBib3gtc2hhZG93OjAgMjBweCA2MHB4IHJnYmEoMCwwLDAsMC41KTsKICB9CiAgLnZnLWxpZ2h0Ym94IC52Zy1sYi1pbm5lciBpZnJhbWV7IHBvc2l0aW9uOmFic29sdXRlOyBpbnNldDowOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTsgYm9yZGVyOjA7IGRpc3BsYXk6YmxvY2s7IH0KICAudmctbGlnaHRib3ggLnZnLWNsb3NlewogICAgcG9zaXRpb246YWJzb2x1dGU7IHRvcDpjYWxjKDR2bWluIC0gNnB4KTsgcmlnaHQ6Y2FsYyg0dm1pbiAtIDZweCk7CiAgICB3aWR0aDo0NHB4OyBoZWlnaHQ6NDRweDsgYm9yZGVyLXJhZGl1czo1MCU7IGJvcmRlcjoycHggc29saWQgcmdiYSgyNDQsMjM4LDIyOSwwLjkpOwogICAgYmFja2dyb3VuZDpyZ2JhKDE1LDEwLDgsMC42KTsgY29sb3I6dmFyKC0tY3JlYW0pOyBjdXJzb3I6cG9pbnRlcjsgei1pbmRleDoyOwogICAgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGZvbnQtc2l6ZTowOyB0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyBlYXNlOwogIH0KICAudmctbGlnaHRib3ggLnZnLWNsb3NlOmhvdmVyeyBiYWNrZ3JvdW5kOnZhcigtLW9yYW5nZSk7IGJvcmRlci1jb2xvcjp2YXIoLS1vcmFuZ2UpOyB9CiAgLnZnLWxpZ2h0Ym94IC52Zy1jbG9zZSBzdmd7IHdpZHRoOjIwcHg7IGhlaWdodDoyMHB4OyB9CiAgLnZnLWxpZ2h0Ym94IC52Zy1jbG9zZSBwYXRoeyBmaWxsOm5vbmU7IHN0cm9rZTp2YXIoLS1jcmVhbSk7IHN0cm9rZS13aWR0aDoyLjQ7IHN0cm9rZS1saW5lY2FwOnJvdW5kOyB9CiAgQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpewogICAgLnZnLWxpZ2h0Ym94eyBwYWRkaW5nOjA7IH0KICAgIC52Zy1saWdodGJveCAudmctbGItaW5uZXJ7CiAgICAgIHdpZHRoOjEwMHZ3OyBoZWlnaHQ6MTAwdmg7IG1heC1oZWlnaHQ6MTAwdmg7IGFzcGVjdC1yYXRpbzphdXRvOyBib3JkZXItcmFkaXVzOjA7CiAgICAgIGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwogICAgfQogICAgLnZnLWxpZ2h0Ym94IC52Zy1sYi1pbm5lciAudmctaWZyYW1lLXdyYXB7IHdpZHRoOjEwMCU7IGFzcGVjdC1yYXRpbzoxNi85OyBwb3NpdGlvbjpyZWxhdGl2ZTsgfQogICAgLnZnLWxpZ2h0Ym94IC52Zy1jbG9zZXsgdG9wOjEycHg7IHJpZ2h0OjEycHg7IH0KICAgIC52Zy1lbWJlZHsgcGFkZGluZzo0MHB4IDV2dzsgfQogICAgLnZnLWVtYmVkIC52Zy1oZWFkeyBtYXJnaW4tYm90dG9tOjIwcHg7IH0KICB9CiAgLnZpZGVvLWdyaWQtc291cmNlLTF7IGRpc3BsYXk6bm9uZSAhaW1wb3J0YW50OyB9Cg==
CihmdW5jdGlvbigpewogIHZhciBTT1VSQ0VfQ0xBU1MgPSAndmlkZW8tZ3JpZC1zb3VyY2UtMSc7CiAgdmFyIEdSSURfSUQgPSAndmdHcmlkMSc7CiAgdmFyIEZBTExCQUNLX0NPTE9SUyA9IFsnIzMzNjY1QycsJyM5QzQ0MzYnLCcjQjU3NjNBJywnIzVDN0M4QSddOwogIHZhciBGQUxMQkFDS19TTElERVMgPSBbIHsgdGl0bGU6J1ZpZGVvIDEnLCB0ZXh0OicnLCB2aWRlbzpudWxsIH0sIHsgdGl0bGU6J1ZpZGVvIDInLCB0ZXh0OicnLCB2aWRlbzpudWxsIH0gXTsKICB2YXIgcGxheUljb25TdmcgID0gJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNOCA1djE0bDExLTd6Ii8+PC9zdmc+JzsKICB2YXIgY2xvc2VJY29uU3ZnID0gJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNiA2bDEyIDEyTTE4IDZMNiAxOCIvPjwvc3ZnPic7CiAgZnVuY3Rpb24gcGFyc2VWaWRlb1VybCh1cmwpewogICAgaWYoIXVybCkgcmV0dXJuIG51bGw7IHZhciBtOwogICAgbSA9IHVybC5tYXRjaCgvKD86eW91dHViZVwuY29tXC93YXRjaFw/dj18eW91dHVcLmJlXC98eW91dHViZVwuY29tXC9lbWJlZFwvfHlvdXR1YmVcLmNvbVwvc2hvcnRzXC8pKFthLXpBLVowLTlfLV17Nix9KS8pOwogICAgaWYobSkgcmV0dXJuIHsgcGxhdGZvcm06J3lvdXR1YmUnLCBpZDptWzFdIH07CiAgICBtID0gdXJsLm1hdGNoKC92aW1lb1wuY29tXC8oPzp2aWRlb1wvKT8oXGQrKS8pOwogICAgaWYobSkgcmV0dXJuIHsgcGxhdGZvcm06J3ZpbWVvJywgaWQ6bVsxXSB9OwogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIGVtYmVkVXJsRm9yKHZpZGVvKXsKICAgIGlmKHZpZGVvLnBsYXRmb3JtPT09J3lvdXR1YmUnKSByZXR1cm4gJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLycrdmlkZW8uaWQrJz9hdXRvcGxheT0xJnJlbD0wJzsKICAgIGlmKHZpZGVvLnBsYXRmb3JtPT09J3ZpbWVvJykgICByZXR1cm4gJ2h0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8nK3ZpZGVvLmlkKyc/YXV0b3BsYXk9MSc7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gaGlnaGVzdFJlc1NyYyhpbWcpewogICAgdmFyIGZ1bGwgPSBpbWcuZ2V0QXR0cmlidXRlKCdkYXRhLWZ1bGwtdXJsJyk7IGlmKGZ1bGwpIHJldHVybiBmdWxsOwogICAgdmFyIHNyY3NldCA9IGltZy5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpOwogICAgaWYoc3Jjc2V0KXsKICAgICAgdmFyIGNhbmRzID0gc3Jjc2V0LnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uKHBhcnQpewogICAgICAgIHZhciBiaXRzID0gcGFydC50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgIHJldHVybiB7IHVybDpiaXRzWzBdLCB3aWR0aDpwYXJzZUludCgoYml0c1sxXXx8JycpLnJlcGxhY2UoJ3cnLCcnKSwxMCl8fDAgfTsKICAgICAgfSkuc29ydChmdW5jdGlvbihhLGIpeyByZXR1cm4gYi53aWR0aCAtIGEud2lkdGg7IH0pOwogICAgICBpZihjYW5kcy5sZW5ndGggJiYgY2FuZHNbMF0udXJsKSByZXR1cm4gY2FuZHNbMF0udXJsOwogICAgfQogICAgcmV0dXJuIGltZy5zcmM7CiAgfQogIGZ1bmN0aW9uIGZpbmRTbGlkZXMoKXsKICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuJytTT1VSQ0VfQ0xBU1MpOyBpZighc291cmNlKSByZXR1cm4gbnVsbDsKICAgIHZhciBpbWdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc291cmNlLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpKTsgaWYoIWltZ3MubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgIHZhciBzbGlkZXMgPSBbXTsKICAgIGltZ3MuZm9yRWFjaChmdW5jdGlvbihpbWcpewogICAgICB2YXIgdGl0bGUgPSBpbWcuYWx0IHx8ICcnOyB2YXIgdGV4dCA9ICcnOwogICAgICB2YXIgZmlndXJlID0gaW1nLmNsb3Nlc3QoJ2ZpZ3VyZScpOyB2YXIgY2FwdGlvbiA9IGZpZ3VyZSA/IGZpZ3VyZS5xdWVyeVNlbGVjdG9yKCdmaWdjYXB0aW9uJykgOiBudWxsOwogICAgICBpZihjYXB0aW9uKSB0ZXh0ID0gY2FwdGlvbi50ZXh0Q29udGVudC50cmltKCk7CiAgICAgIHZhciBsaW5rRWwgPSBpbWcuY2xvc2VzdCgnYScpOwogICAgICB2YXIgdmlkZW8gPSBwYXJzZVZpZGVvVXJsKGxpbmtFbCA/IGxpbmtFbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSA6IG51bGwpOwogICAgICBpZighdmlkZW8pIHJldHVybjsKICAgICAgc2xpZGVzLnB1c2goeyBwb3N0ZXI6aGlnaGVzdFJlc1NyYyhpbWcpLCB0aXRsZTp0aXRsZSwgdGV4dDp0ZXh0LCB2aWRlbzp2aWRlbyB9KTsKICAgIH0pOwogICAgcmV0dXJuIHNsaWRlcy5sZW5ndGggPyBzbGlkZXMgOiBudWxsOwogIH0KICB2YXIgbGIsIGxiSW5uZXI7CiAgZnVuY3Rpb24gZW5zdXJlTGlnaHRib3goKXsKICAgIGlmKGxiKSByZXR1cm47CiAgICBsYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBsYi5jbGFzc05hbWU9J3ZnLWxpZ2h0Ym94JzsKICAgIGxiSW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgbGJJbm5lci5jbGFzc05hbWU9J3ZnLWxiLWlubmVyJzsKICAgIHZhciBjbG9zZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBjbG9zZS5jbGFzc05hbWU9J3ZnLWNsb3NlJzsKICAgIGNsb3NlLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsJ0Nsb3NlIHZpZGVvJyk7IGNsb3NlLmlubmVySFRNTCA9IGNsb3NlSWNvblN2ZzsKICAgIGxiLmFwcGVuZENoaWxkKGxiSW5uZXIpOyBsYi5hcHBlbmRDaGlsZChjbG9zZSk7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGIpOwogICAgY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZUxpZ2h0Ym94KTsKICAgIGxiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSl7IGlmKGUudGFyZ2V0PT09bGIpIGNsb3NlTGlnaHRib3goKTsgfSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSl7IGlmKGUua2V5PT09J0VzY2FwZScgJiYgbGIuY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1vcGVuJykpIGNsb3NlTGlnaHRib3goKTsgfSk7CiAgfQogIGZ1bmN0aW9uIG9wZW5MaWdodGJveCh2aWRlbyl7CiAgICBlbnN1cmVMaWdodGJveCgpOyB2YXIgdXJsID0gZW1iZWRVcmxGb3IodmlkZW8pOyBpZighdXJsKSByZXR1cm47CiAgICBsYklubmVyLmlubmVySFRNTD0nJzsKICAgIHZhciB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHdyYXAuY2xhc3NOYW1lPSd2Zy1pZnJhbWUtd3JhcCc7CiAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7IGlmcmFtZS5zcmM9dXJsOwogICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnYWxsb3cnLCdhdXRvcGxheTsgZnVsbHNjcmVlbjsgcGljdHVyZS1pbi1waWN0dXJlOyBlbmNyeXB0ZWQtbWVkaWEnKTsKICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ2FsbG93ZnVsbHNjcmVlbicsJycpOwogICAgd3JhcC5hcHBlbmRDaGlsZChpZnJhbWUpOyBsYklubmVyLmFwcGVuZENoaWxkKHdyYXApOwogICAgbGIuY2xhc3NMaXN0LmFkZCgnaXMtb3BlbicpOyBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSdoaWRkZW4nOwogIH0KICBmdW5jdGlvbiBjbG9zZUxpZ2h0Ym94KCl7IGlmKCFsYikgcmV0dXJuOyBsYi5jbGFzc0xpc3QucmVtb3ZlKCdpcy1vcGVuJyk7IGxiSW5uZXIuaW5uZXJIVE1MPScnOyBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PScnOyB9CiAgZnVuY3Rpb24gaW5pdCgpewogICAgdmFyIGdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChHUklEX0lEKTsgaWYoIWdyaWQpIHJldHVybjsKICAgIHZhciB3cFNsaWRlcyA9IGZpbmRTbGlkZXMoKTsKICAgIHZhciBzbGlkZXMgPSB3cFNsaWRlcyB8fCBGQUxMQkFDS19TTElERVMubWFwKGZ1bmN0aW9uKHMsaSl7IHMuY29sb3I9RkFMTEJBQ0tfQ09MT1JTW2klRkFMTEJBQ0tfQ09MT1JTLmxlbmd0aF07IHJldHVybiBzOyB9KTsKICAgIGdyaWQuaW5uZXJIVE1MPScnOwogICAgc2xpZGVzLmZvckVhY2goZnVuY3Rpb24ocyxpKXsKICAgICAgdmFyIGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgY2FyZC5jbGFzc05hbWU9J3ZnLWNhcmQnOyBjYXJkLnR5cGU9J2J1dHRvbic7CiAgICAgIGNhcmQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywnUGxheSAnKyhzLnRpdGxlfHwoJ3ZpZGVvICcrKGkrMSkpKSk7CiAgICAgIHZhciBwb3N0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgcG9zdGVyLmNsYXNzTmFtZT0ndmctcG9zdGVyJzsKICAgICAgaWYocy5wb3N0ZXIpeyB2YXIgaW1nPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOyBpbWcuc3JjPXMucG9zdGVyOyBpbWcuYWx0PXMudGl0bGV8fCcnOyBpbWcubG9hZGluZz1pPDI/J2VhZ2VyJzonbGF6eSc7IHBvc3Rlci5hcHBlbmRDaGlsZChpbWcpOyB9CiAgICAgIGVsc2UgeyB2YXIgcGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHBoLmNsYXNzTmFtZT0ndmctcG9zdGVyLXBoJzsgcGguc3R5bGUuYmFja2dyb3VuZD1zLmNvbG9yfHwnIzMzNjY1Qyc7IHBoLnRleHRDb250ZW50PXMudGl0bGV8fCgnVmlkZW8gJysoaSsxKSk7IHBvc3Rlci5hcHBlbmRDaGlsZChwaCk7IH0KICAgICAgdmFyIHBsYXk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHBsYXkuY2xhc3NOYW1lPSd2Zy1wbGF5JzsgcGxheS5pbm5lckhUTUw9cGxheUljb25Tdmc7IHBvc3Rlci5hcHBlbmRDaGlsZChwbGF5KTsKICAgICAgaWYocy50aXRsZXx8cy50ZXh0KXsKICAgICAgICB2YXIgY2FwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBjYXAuY2xhc3NOYW1lPSd2Zy1jYXAnOwogICAgICAgIGlmKHMudGl0bGUpeyB2YXIgaDM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDMnKTsgaDMudGV4dENvbnRlbnQ9cy50aXRsZTsgY2FwLmFwcGVuZENoaWxkKGgzKTsgfQogICAgICAgIGlmKHMudGV4dCl7IHZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsgcC50ZXh0Q29udGVudD1zLnRleHQ7IGNhcC5hcHBlbmRDaGlsZChwKTsgfQogICAgICAgIHBvc3Rlci5hcHBlbmRDaGlsZChjYXApOwogICAgICB9CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQocG9zdGVyKTsKICAgICAgaWYocy52aWRlbykgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IG9wZW5MaWdodGJveChzLnZpZGVvKTsgfSk7CiAgICAgIGdyaWQuYXBwZW5kQ2hpbGQoY2FyZCk7CiAgICB9KTsKICB9CiAgaWYoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSdjb21wbGV0ZScpeyBpbml0KCk7IH0gZWxzZSB7IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgaW5pdCk7IH0KfSkoKTsK




NOW COMPLETELY FREE
Live on Set
CiAgLnZnLWVtYmVkewogICAgLS1vcmFuZ2U6I0RCOEIzQjsgLS1jcmVhbTojRjRFRUREOyAtLWluazojMjQxQzEzOyAtLXRlYWwtZGFyazojMjM0QTQzOyAtLXRlYWw6IzMzNjY1QzsKICB9CiAgLnZnLWVtYmVkLCAudmctZW1iZWQgKnsgYm94LXNpemluZzpib3JkZXItYm94OyB9CiAgLnZnLWVtYmVkewogICAgd2lkdGg6MTAwdnc7IG1heC13aWR0aDoxMDB2dzsKICAgIHBvc2l0aW9uOnJlbGF0aXZlOyBsZWZ0OjUwJTsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7CiAgICBwYWRkaW5nOjUycHggNXZ3OyBtYXJnaW46MDsKICAgIGZvbnQtZmFtaWx5OidJQk0gUGxleCBNb25vJyxtb25vc3BhY2U7CiAgfQogIC52Zy1lbWJlZCAudmctZ3JpZHsgbWF4LXdpZHRoOjExMDBweDsgbWFyZ2luOjAgYXV0bzsgfQoKICAvKiBGTFVTSEVELXN0eWxlIGhlYWRpbmcgKi8KICAudmctZW1iZWQgLnZnLWhlYWR7IG1heC13aWR0aDoxMTAwcHg7IG1hcmdpbjowIGF1dG8gMjZweDsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAudmctZW1iZWQgLnZnLWV5ZWJyb3d7CiAgICBmb250LWZhbWlseTonSUJNIFBsZXggTW9ubycsbW9ub3NwYWNlOyBmb250LXdlaWdodDo1MDA7IGZvbnQtc2l6ZToxMi41cHg7CiAgICBsZXR0ZXItc3BhY2luZzowLjE2ZW07IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgY29sb3I6dmFyKC0tb3JhbmdlKTsKICAgIG1hcmdpbjowIDAgMTBweDsgdGV4dC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4zNSk7CiAgfQogIC52Zy1lbWJlZCAudmctdGl0bGV7CiAgICBmb250LWZhbWlseTonTGlicmUgQmFza2VydmlsbGUnLHNlcmlmOyBmb250LXdlaWdodDo3MDA7CiAgICBmb250LXNpemU6Y2xhbXAoMjhweCw0LjV2dyw0NnB4KTsgbGluZS1oZWlnaHQ6MS4xOyBjb2xvcjp2YXIoLS1jcmVhbSk7CiAgICBtYXJnaW46MDsgdGV4dC1zaGFkb3c6MCAycHggNnB4IHJnYmEoMCwwLDAsMC4zNSk7CiAgfQoKICAudmctZW1iZWQgLnZnLWdyaWR7IGRpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLCAxZnIpOyBnYXA6MjBweDsgfQogIEBtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsgLnZnLWVtYmVkIC52Zy1ncmlkeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyOyBnYXA6MTZweDsgfSB9CgogIC52Zy1lbWJlZCAudmctY2FyZHsKICAgIGRpc3BsYXk6YmxvY2s7IHdpZHRoOjEwMCU7IHBhZGRpbmc6MDsgYm9yZGVyOjA7IGJhY2tncm91bmQ6bm9uZTsKICAgIHRleHQtYWxpZ246bGVmdDsgY3Vyc29yOnBvaW50ZXI7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGNvbG9yOmluaGVyaXQ7CiAgfQogIC52Zy1lbWJlZCAudmctcG9zdGVyewogICAgcG9zaXRpb246cmVsYXRpdmU7IHdpZHRoOjEwMCU7IGFzcGVjdC1yYXRpbzoxNi85OyBib3JkZXItcmFkaXVzOjEwcHg7IG92ZXJmbG93OmhpZGRlbjsKICAgIGJhY2tncm91bmQ6dmFyKC0taW5rKTsgYm94LXNoYWRvdzowIDZweCAxNnB4IHJnYmEoMCwwLDAsMC4yOCk7CiAgICB0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMThzIGVhc2UsIGJveC1zaGFkb3cgLjE4cyBlYXNlOwogIH0KICAudmctZW1iZWQgLnZnLWNhcmQ6aG92ZXIgLnZnLXBvc3RlcnsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTNweCk7IGJveC1zaGFkb3c6MCAxMnB4IDI2cHggcmdiYSgwLDAsMCwwLjM2KTsgfQogIC52Zy1lbWJlZCAudmctcG9zdGVyIGltZ3sgcG9zaXRpb246YWJzb2x1dGU7IGluc2V0OjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOyBvYmplY3QtZml0OmNvdmVyOyBkaXNwbGF5OmJsb2NrOyB9CiAgLnZnLWVtYmVkIC52Zy1wb3N0ZXItcGh7CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsgaW5zZXQ6MDsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOnZhcigtLXRlYWwpOyBjb2xvcjp2YXIoLS1jcmVhbSk7IGZvbnQtc2l6ZToxMHB4OyBmb250LXdlaWdodDo2MDA7CiAgfQogIC52Zy1lbWJlZCAudmctcG9zdGVyOjphZnRlcnsKICAgIGNvbnRlbnQ6IiI7IHBvc2l0aW9uOmFic29sdXRlOyBpbnNldDowOyB6LWluZGV4OjE7CiAgICBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMzYsMjgsMTksMC40MiksIHJnYmEoMzYsMjgsMTksMCkgNTIlKTsKICAgIHRyYW5zaXRpb246b3BhY2l0eSAuMThzIGVhc2U7CiAgfQogIC52Zy1lbWJlZCAudmctY2FyZDpob3ZlciAudmctcG9zdGVyOjphZnRlcnsgb3BhY2l0eTowLjc7IH0KICAudmctZW1iZWQgLnZnLXBsYXl7CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjUwJTsgbGVmdDo1MCU7IHRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTsgei1pbmRleDoyOwogICAgd2lkdGg6NTRweDsgaGVpZ2h0OjU0cHg7IGJvcmRlci1yYWRpdXM6NTAlOwogICAgYmFja2dyb3VuZDpyZ2JhKDI0NCwyMzgsMjI5LDAuOTUpOyBib3JkZXI6MnB4IHNvbGlkIHZhcigtLXRlYWwtZGFyayk7CiAgICBib3gtc2hhZG93OjAgMnB4IDEwcHggcmdiYSgwLDAsMCwwLjMwKTsKICAgIGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwogICAgdHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE4cyBlYXNlLCBiYWNrZ3JvdW5kIC4xOHMgZWFzZTsKICB9CiAgLnZnLWVtYmVkIC52Zy1jYXJkOmhvdmVyIC52Zy1wbGF5eyB0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMS4wOCk7IGJhY2tncm91bmQ6dmFyKC0tb3JhbmdlKTsgfQogIC52Zy1lbWJlZCAudmctcGxheSBzdmd7IHdpZHRoOjIwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tbGVmdDozcHg7IH0KICAudmctZW1iZWQgLnZnLXBsYXkgcGF0aHsgZmlsbDp2YXIoLS10ZWFsLWRhcmspOyB0cmFuc2l0aW9uOmZpbGwgLjE4cyBlYXNlOyB9CiAgLnZnLWVtYmVkIC52Zy1jYXJkOmhvdmVyIC52Zy1wbGF5IHBhdGh7IGZpbGw6dmFyKC0tY3JlYW0pOyB9CiAgLnZnLWVtYmVkIC52Zy1jYXB7IHBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHJpZ2h0OjA7IGJvdHRvbTowOyB6LWluZGV4OjI7IHBhZGRpbmc6MTJweCAxNHB4OyBwb2ludGVyLWV2ZW50czpub25lOyB9CiAgLnZnLWVtYmVkIC52Zy1jYXAgaDN7CiAgICBmb250LWZhbWlseTonTGlicmUgQmFza2VydmlsbGUnLHNlcmlmOyBmb250LXdlaWdodDo3MDA7IGZvbnQtc2l6ZToxNnB4OwogICAgY29sb3I6dmFyKC0tY3JlYW0pOyBtYXJnaW46MDsgdGV4dC1zaGFkb3c6MCAycHggNnB4IHJnYmEoMCwwLDAsMC42KTsgbGluZS1oZWlnaHQ6MS4yNTsKICB9CiAgLnZnLWVtYmVkIC52Zy1jYXAgcHsKICAgIGZvbnQtZmFtaWx5OidJQk0gUGxleCBNb25vJyxtb25vc3BhY2U7IGZvbnQtc2l6ZToxMXB4OyBjb2xvcjp2YXIoLS1jcmVhbSk7CiAgICBtYXJnaW46M3B4IDAgMDsgb3BhY2l0eTowLjk7IHRleHQtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAuNik7CiAgfQoKICAvKiBMaWdodGJveCAqLwogIC52Zy1saWdodGJveHsKICAgIC0tb3JhbmdlOiNEQjhCM0I7IC0tY3JlYW06I0Y0RUVERDsgLS1pbms6IzI0MUMxMzsgLS10ZWFsLWRhcms6IzIzNEE0MzsgLS10ZWFsOiMzMzY2NUM7CiAgICBwb3NpdGlvbjpmaXhlZDsgaW5zZXQ6MDsgei1pbmRleDo5OTk5OTsgZGlzcGxheTpub25lOwogICAgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBiYWNrZ3JvdW5kOnJnYmEoMTUsMTAsOCwwLjc4KTsgcGFkZGluZzo0dm1pbjsKICB9CiAgLnZnLWxpZ2h0Ym94LmlzLW9wZW57IGRpc3BsYXk6ZmxleDsgfQogIC52Zy1saWdodGJveCAudmctbGItaW5uZXJ7CiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsgd2lkdGg6bWluKDgwdncsIDEyMDBweCk7IG1heC13aWR0aDoxMjAwcHg7IGFzcGVjdC1yYXRpbzoxNi85OyBtYXgtaGVpZ2h0Ojg2dmg7CiAgICBiYWNrZ3JvdW5kOiMwMDA7IGJvcmRlci1yYWRpdXM6MTJweDsgb3ZlcmZsb3c6aGlkZGVuOyBib3gtc2hhZG93OjAgMjBweCA2MHB4IHJnYmEoMCwwLDAsMC41KTsKICB9CiAgLnZnLWxpZ2h0Ym94IC52Zy1sYi1pbm5lciBpZnJhbWV7IHBvc2l0aW9uOmFic29sdXRlOyBpbnNldDowOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTsgYm9yZGVyOjA7IGRpc3BsYXk6YmxvY2s7IH0KICAudmctbGlnaHRib3ggLnZnLWNsb3NlewogICAgcG9zaXRpb246YWJzb2x1dGU7IHRvcDpjYWxjKDR2bWluIC0gNnB4KTsgcmlnaHQ6Y2FsYyg0dm1pbiAtIDZweCk7CiAgICB3aWR0aDo0NHB4OyBoZWlnaHQ6NDRweDsgYm9yZGVyLXJhZGl1czo1MCU7IGJvcmRlcjoycHggc29saWQgcmdiYSgyNDQsMjM4LDIyOSwwLjkpOwogICAgYmFja2dyb3VuZDpyZ2JhKDE1LDEwLDgsMC42KTsgY29sb3I6dmFyKC0tY3JlYW0pOyBjdXJzb3I6cG9pbnRlcjsgei1pbmRleDoyOwogICAgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGZvbnQtc2l6ZTowOyB0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyBlYXNlOwogIH0KICAudmctbGlnaHRib3ggLnZnLWNsb3NlOmhvdmVyeyBiYWNrZ3JvdW5kOnZhcigtLW9yYW5nZSk7IGJvcmRlci1jb2xvcjp2YXIoLS1vcmFuZ2UpOyB9CiAgLnZnLWxpZ2h0Ym94IC52Zy1jbG9zZSBzdmd7IHdpZHRoOjIwcHg7IGhlaWdodDoyMHB4OyB9CiAgLnZnLWxpZ2h0Ym94IC52Zy1jbG9zZSBwYXRoeyBmaWxsOm5vbmU7IHN0cm9rZTp2YXIoLS1jcmVhbSk7IHN0cm9rZS13aWR0aDoyLjQ7IHN0cm9rZS1saW5lY2FwOnJvdW5kOyB9CiAgQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpewogICAgLnZnLWxpZ2h0Ym94eyBwYWRkaW5nOjA7IH0KICAgIC52Zy1saWdodGJveCAudmctbGItaW5uZXJ7CiAgICAgIHdpZHRoOjEwMHZ3OyBoZWlnaHQ6MTAwdmg7IG1heC1oZWlnaHQ6MTAwdmg7IGFzcGVjdC1yYXRpbzphdXRvOyBib3JkZXItcmFkaXVzOjA7CiAgICAgIGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwogICAgfQogICAgLnZnLWxpZ2h0Ym94IC52Zy1sYi1pbm5lciAudmctaWZyYW1lLXdyYXB7IHdpZHRoOjEwMCU7IGFzcGVjdC1yYXRpbzoxNi85OyBwb3NpdGlvbjpyZWxhdGl2ZTsgfQogICAgLnZnLWxpZ2h0Ym94IC52Zy1jbG9zZXsgdG9wOjEycHg7IHJpZ2h0OjEycHg7IH0KICAgIC52Zy1lbWJlZHsgcGFkZGluZzo0MHB4IDV2dzsgfQogICAgLnZnLWVtYmVkIC52Zy1oZWFkeyBtYXJnaW4tYm90dG9tOjIwcHg7IH0KICB9CiAgLnZpZGVvLWdyaWQtc291cmNlLTJ7IGRpc3BsYXk6bm9uZSAhaW1wb3J0YW50OyB9Cg==
CihmdW5jdGlvbigpewogIHZhciBTT1VSQ0VfQ0xBU1MgPSAndmlkZW8tZ3JpZC1zb3VyY2UtMic7CiAgdmFyIEdSSURfSUQgPSAndmdHcmlkMic7CiAgdmFyIEZBTExCQUNLX0NPTE9SUyA9IFsnIzMzNjY1QycsJyM5QzQ0MzYnLCcjQjU3NjNBJywnIzVDN0M4QSddOwogIHZhciBGQUxMQkFDS19TTElERVMgPSBbIHsgdGl0bGU6J1ZpZGVvIDEnLCB0ZXh0OicnLCB2aWRlbzpudWxsIH0sIHsgdGl0bGU6J1ZpZGVvIDInLCB0ZXh0OicnLCB2aWRlbzpudWxsIH0gXTsKICB2YXIgcGxheUljb25TdmcgID0gJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNOCA1djE0bDExLTd6Ii8+PC9zdmc+JzsKICB2YXIgY2xvc2VJY29uU3ZnID0gJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNiA2bDEyIDEyTTE4IDZMNiAxOCIvPjwvc3ZnPic7CiAgZnVuY3Rpb24gcGFyc2VWaWRlb1VybCh1cmwpewogICAgaWYoIXVybCkgcmV0dXJuIG51bGw7IHZhciBtOwogICAgbSA9IHVybC5tYXRjaCgvKD86eW91dHViZVwuY29tXC93YXRjaFw/dj18eW91dHVcLmJlXC98eW91dHViZVwuY29tXC9lbWJlZFwvfHlvdXR1YmVcLmNvbVwvc2hvcnRzXC8pKFthLXpBLVowLTlfLV17Nix9KS8pOwogICAgaWYobSkgcmV0dXJuIHsgcGxhdGZvcm06J3lvdXR1YmUnLCBpZDptWzFdIH07CiAgICBtID0gdXJsLm1hdGNoKC92aW1lb1wuY29tXC8oPzp2aWRlb1wvKT8oXGQrKS8pOwogICAgaWYobSkgcmV0dXJuIHsgcGxhdGZvcm06J3ZpbWVvJywgaWQ6bVsxXSB9OwogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIGVtYmVkVXJsRm9yKHZpZGVvKXsKICAgIGlmKHZpZGVvLnBsYXRmb3JtPT09J3lvdXR1YmUnKSByZXR1cm4gJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLycrdmlkZW8uaWQrJz9hdXRvcGxheT0xJnJlbD0wJzsKICAgIGlmKHZpZGVvLnBsYXRmb3JtPT09J3ZpbWVvJykgICByZXR1cm4gJ2h0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8nK3ZpZGVvLmlkKyc/YXV0b3BsYXk9MSc7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gaGlnaGVzdFJlc1NyYyhpbWcpewogICAgdmFyIGZ1bGwgPSBpbWcuZ2V0QXR0cmlidXRlKCdkYXRhLWZ1bGwtdXJsJyk7IGlmKGZ1bGwpIHJldHVybiBmdWxsOwogICAgdmFyIHNyY3NldCA9IGltZy5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpOwogICAgaWYoc3Jjc2V0KXsKICAgICAgdmFyIGNhbmRzID0gc3Jjc2V0LnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uKHBhcnQpewogICAgICAgIHZhciBiaXRzID0gcGFydC50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgIHJldHVybiB7IHVybDpiaXRzWzBdLCB3aWR0aDpwYXJzZUludCgoYml0c1sxXXx8JycpLnJlcGxhY2UoJ3cnLCcnKSwxMCl8fDAgfTsKICAgICAgfSkuc29ydChmdW5jdGlvbihhLGIpeyByZXR1cm4gYi53aWR0aCAtIGEud2lkdGg7IH0pOwogICAgICBpZihjYW5kcy5sZW5ndGggJiYgY2FuZHNbMF0udXJsKSByZXR1cm4gY2FuZHNbMF0udXJsOwogICAgfQogICAgcmV0dXJuIGltZy5zcmM7CiAgfQogIGZ1bmN0aW9uIGZpbmRTbGlkZXMoKXsKICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuJytTT1VSQ0VfQ0xBU1MpOyBpZighc291cmNlKSByZXR1cm4gbnVsbDsKICAgIHZhciBpbWdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc291cmNlLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpKTsgaWYoIWltZ3MubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgIHZhciBzbGlkZXMgPSBbXTsKICAgIGltZ3MuZm9yRWFjaChmdW5jdGlvbihpbWcpewogICAgICB2YXIgdGl0bGUgPSBpbWcuYWx0IHx8ICcnOyB2YXIgdGV4dCA9ICcnOwogICAgICB2YXIgZmlndXJlID0gaW1nLmNsb3Nlc3QoJ2ZpZ3VyZScpOyB2YXIgY2FwdGlvbiA9IGZpZ3VyZSA/IGZpZ3VyZS5xdWVyeVNlbGVjdG9yKCdmaWdjYXB0aW9uJykgOiBudWxsOwogICAgICBpZihjYXB0aW9uKSB0ZXh0ID0gY2FwdGlvbi50ZXh0Q29udGVudC50cmltKCk7CiAgICAgIHZhciBsaW5rRWwgPSBpbWcuY2xvc2VzdCgnYScpOwogICAgICB2YXIgdmlkZW8gPSBwYXJzZVZpZGVvVXJsKGxpbmtFbCA/IGxpbmtFbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSA6IG51bGwpOwogICAgICBpZighdmlkZW8pIHJldHVybjsKICAgICAgc2xpZGVzLnB1c2goeyBwb3N0ZXI6aGlnaGVzdFJlc1NyYyhpbWcpLCB0aXRsZTp0aXRsZSwgdGV4dDp0ZXh0LCB2aWRlbzp2aWRlbyB9KTsKICAgIH0pOwogICAgcmV0dXJuIHNsaWRlcy5sZW5ndGggPyBzbGlkZXMgOiBudWxsOwogIH0KICB2YXIgbGIsIGxiSW5uZXI7CiAgZnVuY3Rpb24gZW5zdXJlTGlnaHRib3goKXsKICAgIGlmKGxiKSByZXR1cm47CiAgICBsYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBsYi5jbGFzc05hbWU9J3ZnLWxpZ2h0Ym94JzsKICAgIGxiSW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgbGJJbm5lci5jbGFzc05hbWU9J3ZnLWxiLWlubmVyJzsKICAgIHZhciBjbG9zZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBjbG9zZS5jbGFzc05hbWU9J3ZnLWNsb3NlJzsKICAgIGNsb3NlLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsJ0Nsb3NlIHZpZGVvJyk7IGNsb3NlLmlubmVySFRNTCA9IGNsb3NlSWNvblN2ZzsKICAgIGxiLmFwcGVuZENoaWxkKGxiSW5uZXIpOyBsYi5hcHBlbmRDaGlsZChjbG9zZSk7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGIpOwogICAgY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZUxpZ2h0Ym94KTsKICAgIGxiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSl7IGlmKGUudGFyZ2V0PT09bGIpIGNsb3NlTGlnaHRib3goKTsgfSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSl7IGlmKGUua2V5PT09J0VzY2FwZScgJiYgbGIuY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1vcGVuJykpIGNsb3NlTGlnaHRib3goKTsgfSk7CiAgfQogIGZ1bmN0aW9uIG9wZW5MaWdodGJveCh2aWRlbyl7CiAgICBlbnN1cmVMaWdodGJveCgpOyB2YXIgdXJsID0gZW1iZWRVcmxGb3IodmlkZW8pOyBpZighdXJsKSByZXR1cm47CiAgICBsYklubmVyLmlubmVySFRNTD0nJzsKICAgIHZhciB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHdyYXAuY2xhc3NOYW1lPSd2Zy1pZnJhbWUtd3JhcCc7CiAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7IGlmcmFtZS5zcmM9dXJsOwogICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnYWxsb3cnLCdhdXRvcGxheTsgZnVsbHNjcmVlbjsgcGljdHVyZS1pbi1waWN0dXJlOyBlbmNyeXB0ZWQtbWVkaWEnKTsKICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ2FsbG93ZnVsbHNjcmVlbicsJycpOwogICAgd3JhcC5hcHBlbmRDaGlsZChpZnJhbWUpOyBsYklubmVyLmFwcGVuZENoaWxkKHdyYXApOwogICAgbGIuY2xhc3NMaXN0LmFkZCgnaXMtb3BlbicpOyBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSdoaWRkZW4nOwogIH0KICBmdW5jdGlvbiBjbG9zZUxpZ2h0Ym94KCl7IGlmKCFsYikgcmV0dXJuOyBsYi5jbGFzc0xpc3QucmVtb3ZlKCdpcy1vcGVuJyk7IGxiSW5uZXIuaW5uZXJIVE1MPScnOyBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PScnOyB9CiAgZnVuY3Rpb24gaW5pdCgpewogICAgdmFyIGdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChHUklEX0lEKTsgaWYoIWdyaWQpIHJldHVybjsKICAgIHZhciB3cFNsaWRlcyA9IGZpbmRTbGlkZXMoKTsKICAgIHZhciBzbGlkZXMgPSB3cFNsaWRlcyB8fCBGQUxMQkFDS19TTElERVMubWFwKGZ1bmN0aW9uKHMsaSl7IHMuY29sb3I9RkFMTEJBQ0tfQ09MT1JTW2klRkFMTEJBQ0tfQ09MT1JTLmxlbmd0aF07IHJldHVybiBzOyB9KTsKICAgIGdyaWQuaW5uZXJIVE1MPScnOwogICAgc2xpZGVzLmZvckVhY2goZnVuY3Rpb24ocyxpKXsKICAgICAgdmFyIGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgY2FyZC5jbGFzc05hbWU9J3ZnLWNhcmQnOyBjYXJkLnR5cGU9J2J1dHRvbic7CiAgICAgIGNhcmQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywnUGxheSAnKyhzLnRpdGxlfHwoJ3ZpZGVvICcrKGkrMSkpKSk7CiAgICAgIHZhciBwb3N0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgcG9zdGVyLmNsYXNzTmFtZT0ndmctcG9zdGVyJzsKICAgICAgaWYocy5wb3N0ZXIpeyB2YXIgaW1nPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOyBpbWcuc3JjPXMucG9zdGVyOyBpbWcuYWx0PXMudGl0bGV8fCcnOyBpbWcubG9hZGluZz1pPDI/J2VhZ2VyJzonbGF6eSc7IHBvc3Rlci5hcHBlbmRDaGlsZChpbWcpOyB9CiAgICAgIGVsc2UgeyB2YXIgcGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHBoLmNsYXNzTmFtZT0ndmctcG9zdGVyLXBoJzsgcGguc3R5bGUuYmFja2dyb3VuZD1zLmNvbG9yfHwnIzMzNjY1Qyc7IHBoLnRleHRDb250ZW50PXMudGl0bGV8fCgnVmlkZW8gJysoaSsxKSk7IHBvc3Rlci5hcHBlbmRDaGlsZChwaCk7IH0KICAgICAgdmFyIHBsYXk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHBsYXkuY2xhc3NOYW1lPSd2Zy1wbGF5JzsgcGxheS5pbm5lckhUTUw9cGxheUljb25Tdmc7IHBvc3Rlci5hcHBlbmRDaGlsZChwbGF5KTsKICAgICAgaWYocy50aXRsZXx8cy50ZXh0KXsKICAgICAgICB2YXIgY2FwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBjYXAuY2xhc3NOYW1lPSd2Zy1jYXAnOwogICAgICAgIGlmKHMudGl0bGUpeyB2YXIgaDM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDMnKTsgaDMudGV4dENvbnRlbnQ9cy50aXRsZTsgY2FwLmFwcGVuZENoaWxkKGgzKTsgfQogICAgICAgIGlmKHMudGV4dCl7IHZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsgcC50ZXh0Q29udGVudD1zLnRleHQ7IGNhcC5hcHBlbmRDaGlsZChwKTsgfQogICAgICAgIHBvc3Rlci5hcHBlbmRDaGlsZChjYXApOwogICAgICB9CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQocG9zdGVyKTsKICAgICAgaWYocy52aWRlbykgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IG9wZW5MaWdodGJveChzLnZpZGVvKTsgfSk7CiAgICAgIGdyaWQuYXBwZW5kQ2hpbGQoY2FyZCk7CiAgICB9KTsKICB9CiAgaWYoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSdjb21wbGV0ZScpeyBpbml0KCk7IH0gZWxzZSB7IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgaW5pdCk7IH0KfSkoKTsK




LIVE & ON TOUR
Live Shows and Tour Doc
CiAgLnZnLWVtYmVkewogICAgLS1vcmFuZ2U6I0RCOEIzQjsgLS1jcmVhbTojRjRFRUREOyAtLWluazojMjQxQzEzOyAtLXRlYWwtZGFyazojMjM0QTQzOyAtLXRlYWw6IzMzNjY1QzsKICB9CiAgLnZnLWVtYmVkLCAudmctZW1iZWQgKnsgYm94LXNpemluZzpib3JkZXItYm94OyB9CiAgLnZnLWVtYmVkewogICAgd2lkdGg6MTAwdnc7IG1heC13aWR0aDoxMDB2dzsKICAgIHBvc2l0aW9uOnJlbGF0aXZlOyBsZWZ0OjUwJTsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7CiAgICBwYWRkaW5nOjUycHggNXZ3OyBtYXJnaW46MDsKICAgIGZvbnQtZmFtaWx5OidJQk0gUGxleCBNb25vJyxtb25vc3BhY2U7CiAgfQogIC52Zy1lbWJlZCAudmctZ3JpZHsgbWF4LXdpZHRoOjExMDBweDsgbWFyZ2luOjAgYXV0bzsgfQoKICAvKiBGTFVTSEVELXN0eWxlIGhlYWRpbmcgKi8KICAudmctZW1iZWQgLnZnLWhlYWR7IG1heC13aWR0aDoxMTAwcHg7IG1hcmdpbjowIGF1dG8gMjZweDsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAudmctZW1iZWQgLnZnLWV5ZWJyb3d7CiAgICBmb250LWZhbWlseTonSUJNIFBsZXggTW9ubycsbW9ub3NwYWNlOyBmb250LXdlaWdodDo1MDA7IGZvbnQtc2l6ZToxMi41cHg7CiAgICBsZXR0ZXItc3BhY2luZzowLjE2ZW07IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgY29sb3I6dmFyKC0tb3JhbmdlKTsKICAgIG1hcmdpbjowIDAgMTBweDsgdGV4dC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4zNSk7CiAgfQogIC52Zy1lbWJlZCAudmctdGl0bGV7CiAgICBmb250LWZhbWlseTonTGlicmUgQmFza2VydmlsbGUnLHNlcmlmOyBmb250LXdlaWdodDo3MDA7CiAgICBmb250LXNpemU6Y2xhbXAoMjhweCw0LjV2dyw0NnB4KTsgbGluZS1oZWlnaHQ6MS4xOyBjb2xvcjp2YXIoLS1jcmVhbSk7CiAgICBtYXJnaW46MDsgdGV4dC1zaGFkb3c6MCAycHggNnB4IHJnYmEoMCwwLDAsMC4zNSk7CiAgfQoKICAudmctZW1iZWQgLnZnLWdyaWR7IGRpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLCAxZnIpOyBnYXA6MjBweDsgfQogIEBtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsgLnZnLWVtYmVkIC52Zy1ncmlkeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyOyBnYXA6MTZweDsgfSB9CgogIC52Zy1lbWJlZCAudmctY2FyZHsKICAgIGRpc3BsYXk6YmxvY2s7IHdpZHRoOjEwMCU7IHBhZGRpbmc6MDsgYm9yZGVyOjA7IGJhY2tncm91bmQ6bm9uZTsKICAgIHRleHQtYWxpZ246bGVmdDsgY3Vyc29yOnBvaW50ZXI7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGNvbG9yOmluaGVyaXQ7CiAgfQogIC52Zy1lbWJlZCAudmctcG9zdGVyewogICAgcG9zaXRpb246cmVsYXRpdmU7IHdpZHRoOjEwMCU7IGFzcGVjdC1yYXRpbzoxNi85OyBib3JkZXItcmFkaXVzOjEwcHg7IG92ZXJmbG93OmhpZGRlbjsKICAgIGJhY2tncm91bmQ6dmFyKC0taW5rKTsgYm94LXNoYWRvdzowIDZweCAxNnB4IHJnYmEoMCwwLDAsMC4yOCk7CiAgICB0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMThzIGVhc2UsIGJveC1zaGFkb3cgLjE4cyBlYXNlOwogIH0KICAudmctZW1iZWQgLnZnLWNhcmQ6aG92ZXIgLnZnLXBvc3RlcnsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTNweCk7IGJveC1zaGFkb3c6MCAxMnB4IDI2cHggcmdiYSgwLDAsMCwwLjM2KTsgfQogIC52Zy1lbWJlZCAudmctcG9zdGVyIGltZ3sgcG9zaXRpb246YWJzb2x1dGU7IGluc2V0OjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOyBvYmplY3QtZml0OmNvdmVyOyBkaXNwbGF5OmJsb2NrOyB9CiAgLnZnLWVtYmVkIC52Zy1wb3N0ZXItcGh7CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsgaW5zZXQ6MDsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOnZhcigtLXRlYWwpOyBjb2xvcjp2YXIoLS1jcmVhbSk7IGZvbnQtc2l6ZToxMHB4OyBmb250LXdlaWdodDo2MDA7CiAgfQogIC52Zy1lbWJlZCAudmctcG9zdGVyOjphZnRlcnsKICAgIGNvbnRlbnQ6IiI7IHBvc2l0aW9uOmFic29sdXRlOyBpbnNldDowOyB6LWluZGV4OjE7CiAgICBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMzYsMjgsMTksMC40MiksIHJnYmEoMzYsMjgsMTksMCkgNTIlKTsKICAgIHRyYW5zaXRpb246b3BhY2l0eSAuMThzIGVhc2U7CiAgfQogIC52Zy1lbWJlZCAudmctY2FyZDpob3ZlciAudmctcG9zdGVyOjphZnRlcnsgb3BhY2l0eTowLjc7IH0KICAudmctZW1iZWQgLnZnLXBsYXl7CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjUwJTsgbGVmdDo1MCU7IHRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTsgei1pbmRleDoyOwogICAgd2lkdGg6NTRweDsgaGVpZ2h0OjU0cHg7IGJvcmRlci1yYWRpdXM6NTAlOwogICAgYmFja2dyb3VuZDpyZ2JhKDI0NCwyMzgsMjI5LDAuOTUpOyBib3JkZXI6MnB4IHNvbGlkIHZhcigtLXRlYWwtZGFyayk7CiAgICBib3gtc2hhZG93OjAgMnB4IDEwcHggcmdiYSgwLDAsMCwwLjMwKTsKICAgIGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwogICAgdHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE4cyBlYXNlLCBiYWNrZ3JvdW5kIC4xOHMgZWFzZTsKICB9CiAgLnZnLWVtYmVkIC52Zy1jYXJkOmhvdmVyIC52Zy1wbGF5eyB0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMS4wOCk7IGJhY2tncm91bmQ6dmFyKC0tb3JhbmdlKTsgfQogIC52Zy1lbWJlZCAudmctcGxheSBzdmd7IHdpZHRoOjIwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tbGVmdDozcHg7IH0KICAudmctZW1iZWQgLnZnLXBsYXkgcGF0aHsgZmlsbDp2YXIoLS10ZWFsLWRhcmspOyB0cmFuc2l0aW9uOmZpbGwgLjE4cyBlYXNlOyB9CiAgLnZnLWVtYmVkIC52Zy1jYXJkOmhvdmVyIC52Zy1wbGF5IHBhdGh7IGZpbGw6dmFyKC0tY3JlYW0pOyB9CiAgLnZnLWVtYmVkIC52Zy1jYXB7IHBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHJpZ2h0OjA7IGJvdHRvbTowOyB6LWluZGV4OjI7IHBhZGRpbmc6MTJweCAxNHB4OyBwb2ludGVyLWV2ZW50czpub25lOyB9CiAgLnZnLWVtYmVkIC52Zy1jYXAgaDN7CiAgICBmb250LWZhbWlseTonTGlicmUgQmFza2VydmlsbGUnLHNlcmlmOyBmb250LXdlaWdodDo3MDA7IGZvbnQtc2l6ZToxNnB4OwogICAgY29sb3I6dmFyKC0tY3JlYW0pOyBtYXJnaW46MDsgdGV4dC1zaGFkb3c6MCAycHggNnB4IHJnYmEoMCwwLDAsMC42KTsgbGluZS1oZWlnaHQ6MS4yNTsKICB9CiAgLnZnLWVtYmVkIC52Zy1jYXAgcHsKICAgIGZvbnQtZmFtaWx5OidJQk0gUGxleCBNb25vJyxtb25vc3BhY2U7IGZvbnQtc2l6ZToxMXB4OyBjb2xvcjp2YXIoLS1jcmVhbSk7CiAgICBtYXJnaW46M3B4IDAgMDsgb3BhY2l0eTowLjk7IHRleHQtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAuNik7CiAgfQoKICAvKiBMaWdodGJveCAqLwogIC52Zy1saWdodGJveHsKICAgIC0tb3JhbmdlOiNEQjhCM0I7IC0tY3JlYW06I0Y0RUVERDsgLS1pbms6IzI0MUMxMzsgLS10ZWFsLWRhcms6IzIzNEE0MzsgLS10ZWFsOiMzMzY2NUM7CiAgICBwb3NpdGlvbjpmaXhlZDsgaW5zZXQ6MDsgei1pbmRleDo5OTk5OTsgZGlzcGxheTpub25lOwogICAgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBiYWNrZ3JvdW5kOnJnYmEoMTUsMTAsOCwwLjc4KTsgcGFkZGluZzo0dm1pbjsKICB9CiAgLnZnLWxpZ2h0Ym94LmlzLW9wZW57IGRpc3BsYXk6ZmxleDsgfQogIC52Zy1saWdodGJveCAudmctbGItaW5uZXJ7CiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsgd2lkdGg6bWluKDgwdncsIDEyMDBweCk7IG1heC13aWR0aDoxMjAwcHg7IGFzcGVjdC1yYXRpbzoxNi85OyBtYXgtaGVpZ2h0Ojg2dmg7CiAgICBiYWNrZ3JvdW5kOiMwMDA7IGJvcmRlci1yYWRpdXM6MTJweDsgb3ZlcmZsb3c6aGlkZGVuOyBib3gtc2hhZG93OjAgMjBweCA2MHB4IHJnYmEoMCwwLDAsMC41KTsKICB9CiAgLnZnLWxpZ2h0Ym94IC52Zy1sYi1pbm5lciBpZnJhbWV7IHBvc2l0aW9uOmFic29sdXRlOyBpbnNldDowOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTsgYm9yZGVyOjA7IGRpc3BsYXk6YmxvY2s7IH0KICAudmctbGlnaHRib3ggLnZnLWNsb3NlewogICAgcG9zaXRpb246YWJzb2x1dGU7IHRvcDpjYWxjKDR2bWluIC0gNnB4KTsgcmlnaHQ6Y2FsYyg0dm1pbiAtIDZweCk7CiAgICB3aWR0aDo0NHB4OyBoZWlnaHQ6NDRweDsgYm9yZGVyLXJhZGl1czo1MCU7IGJvcmRlcjoycHggc29saWQgcmdiYSgyNDQsMjM4LDIyOSwwLjkpOwogICAgYmFja2dyb3VuZDpyZ2JhKDE1LDEwLDgsMC42KTsgY29sb3I6dmFyKC0tY3JlYW0pOyBjdXJzb3I6cG9pbnRlcjsgei1pbmRleDoyOwogICAgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGZvbnQtc2l6ZTowOyB0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyBlYXNlOwogIH0KICAudmctbGlnaHRib3ggLnZnLWNsb3NlOmhvdmVyeyBiYWNrZ3JvdW5kOnZhcigtLW9yYW5nZSk7IGJvcmRlci1jb2xvcjp2YXIoLS1vcmFuZ2UpOyB9CiAgLnZnLWxpZ2h0Ym94IC52Zy1jbG9zZSBzdmd7IHdpZHRoOjIwcHg7IGhlaWdodDoyMHB4OyB9CiAgLnZnLWxpZ2h0Ym94IC52Zy1jbG9zZSBwYXRoeyBmaWxsOm5vbmU7IHN0cm9rZTp2YXIoLS1jcmVhbSk7IHN0cm9rZS13aWR0aDoyLjQ7IHN0cm9rZS1saW5lY2FwOnJvdW5kOyB9CiAgQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpewogICAgLnZnLWxpZ2h0Ym94eyBwYWRkaW5nOjA7IH0KICAgIC52Zy1saWdodGJveCAudmctbGItaW5uZXJ7CiAgICAgIHdpZHRoOjEwMHZ3OyBoZWlnaHQ6MTAwdmg7IG1heC1oZWlnaHQ6MTAwdmg7IGFzcGVjdC1yYXRpbzphdXRvOyBib3JkZXItcmFkaXVzOjA7CiAgICAgIGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwogICAgfQogICAgLnZnLWxpZ2h0Ym94IC52Zy1sYi1pbm5lciAudmctaWZyYW1lLXdyYXB7IHdpZHRoOjEwMCU7IGFzcGVjdC1yYXRpbzoxNi85OyBwb3NpdGlvbjpyZWxhdGl2ZTsgfQogICAgLnZnLWxpZ2h0Ym94IC52Zy1jbG9zZXsgdG9wOjEycHg7IHJpZ2h0OjEycHg7IH0KICAgIC52Zy1lbWJlZHsgcGFkZGluZzo0MHB4IDV2dzsgfQogICAgLnZnLWVtYmVkIC52Zy1oZWFkeyBtYXJnaW4tYm90dG9tOjIwcHg7IH0KICB9CiAgLnZpZGVvLWdyaWQtc291cmNlLTN7IGRpc3BsYXk6bm9uZSAhaW1wb3J0YW50OyB9Cg==
CihmdW5jdGlvbigpewogIHZhciBTT1VSQ0VfQ0xBU1MgPSAndmlkZW8tZ3JpZC1zb3VyY2UtMyc7CiAgdmFyIEdSSURfSUQgPSAndmdHcmlkMyc7CiAgdmFyIEZBTExCQUNLX0NPTE9SUyA9IFsnIzMzNjY1QycsJyM5QzQ0MzYnLCcjQjU3NjNBJywnIzVDN0M4QSddOwogIHZhciBGQUxMQkFDS19TTElERVMgPSBbIHsgdGl0bGU6J1ZpZGVvIDEnLCB0ZXh0OicnLCB2aWRlbzpudWxsIH0sIHsgdGl0bGU6J1ZpZGVvIDInLCB0ZXh0OicnLCB2aWRlbzpudWxsIH0gXTsKICB2YXIgcGxheUljb25TdmcgID0gJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNOCA1djE0bDExLTd6Ii8+PC9zdmc+JzsKICB2YXIgY2xvc2VJY29uU3ZnID0gJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNiA2bDEyIDEyTTE4IDZMNiAxOCIvPjwvc3ZnPic7CiAgZnVuY3Rpb24gcGFyc2VWaWRlb1VybCh1cmwpewogICAgaWYoIXVybCkgcmV0dXJuIG51bGw7IHZhciBtOwogICAgbSA9IHVybC5tYXRjaCgvKD86eW91dHViZVwuY29tXC93YXRjaFw/dj18eW91dHVcLmJlXC98eW91dHViZVwuY29tXC9lbWJlZFwvfHlvdXR1YmVcLmNvbVwvc2hvcnRzXC8pKFthLXpBLVowLTlfLV17Nix9KS8pOwogICAgaWYobSkgcmV0dXJuIHsgcGxhdGZvcm06J3lvdXR1YmUnLCBpZDptWzFdIH07CiAgICBtID0gdXJsLm1hdGNoKC92aW1lb1wuY29tXC8oPzp2aWRlb1wvKT8oXGQrKS8pOwogICAgaWYobSkgcmV0dXJuIHsgcGxhdGZvcm06J3ZpbWVvJywgaWQ6bVsxXSB9OwogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIGVtYmVkVXJsRm9yKHZpZGVvKXsKICAgIGlmKHZpZGVvLnBsYXRmb3JtPT09J3lvdXR1YmUnKSByZXR1cm4gJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLycrdmlkZW8uaWQrJz9hdXRvcGxheT0xJnJlbD0wJzsKICAgIGlmKHZpZGVvLnBsYXRmb3JtPT09J3ZpbWVvJykgICByZXR1cm4gJ2h0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8nK3ZpZGVvLmlkKyc/YXV0b3BsYXk9MSc7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gaGlnaGVzdFJlc1NyYyhpbWcpewogICAgdmFyIGZ1bGwgPSBpbWcuZ2V0QXR0cmlidXRlKCdkYXRhLWZ1bGwtdXJsJyk7IGlmKGZ1bGwpIHJldHVybiBmdWxsOwogICAgdmFyIHNyY3NldCA9IGltZy5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpOwogICAgaWYoc3Jjc2V0KXsKICAgICAgdmFyIGNhbmRzID0gc3Jjc2V0LnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uKHBhcnQpewogICAgICAgIHZhciBiaXRzID0gcGFydC50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgIHJldHVybiB7IHVybDpiaXRzWzBdLCB3aWR0aDpwYXJzZUludCgoYml0c1sxXXx8JycpLnJlcGxhY2UoJ3cnLCcnKSwxMCl8fDAgfTsKICAgICAgfSkuc29ydChmdW5jdGlvbihhLGIpeyByZXR1cm4gYi53aWR0aCAtIGEud2lkdGg7IH0pOwogICAgICBpZihjYW5kcy5sZW5ndGggJiYgY2FuZHNbMF0udXJsKSByZXR1cm4gY2FuZHNbMF0udXJsOwogICAgfQogICAgcmV0dXJuIGltZy5zcmM7CiAgfQogIGZ1bmN0aW9uIGZpbmRTbGlkZXMoKXsKICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuJytTT1VSQ0VfQ0xBU1MpOyBpZighc291cmNlKSByZXR1cm4gbnVsbDsKICAgIHZhciBpbWdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc291cmNlLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpKTsgaWYoIWltZ3MubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgIHZhciBzbGlkZXMgPSBbXTsKICAgIGltZ3MuZm9yRWFjaChmdW5jdGlvbihpbWcpewogICAgICB2YXIgdGl0bGUgPSBpbWcuYWx0IHx8ICcnOyB2YXIgdGV4dCA9ICcnOwogICAgICB2YXIgZmlndXJlID0gaW1nLmNsb3Nlc3QoJ2ZpZ3VyZScpOyB2YXIgY2FwdGlvbiA9IGZpZ3VyZSA/IGZpZ3VyZS5xdWVyeVNlbGVjdG9yKCdmaWdjYXB0aW9uJykgOiBudWxsOwogICAgICBpZihjYXB0aW9uKSB0ZXh0ID0gY2FwdGlvbi50ZXh0Q29udGVudC50cmltKCk7CiAgICAgIHZhciBsaW5rRWwgPSBpbWcuY2xvc2VzdCgnYScpOwogICAgICB2YXIgdmlkZW8gPSBwYXJzZVZpZGVvVXJsKGxpbmtFbCA/IGxpbmtFbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSA6IG51bGwpOwogICAgICBpZighdmlkZW8pIHJldHVybjsKICAgICAgc2xpZGVzLnB1c2goeyBwb3N0ZXI6aGlnaGVzdFJlc1NyYyhpbWcpLCB0aXRsZTp0aXRsZSwgdGV4dDp0ZXh0LCB2aWRlbzp2aWRlbyB9KTsKICAgIH0pOwogICAgcmV0dXJuIHNsaWRlcy5sZW5ndGggPyBzbGlkZXMgOiBudWxsOwogIH0KICB2YXIgbGIsIGxiSW5uZXI7CiAgZnVuY3Rpb24gZW5zdXJlTGlnaHRib3goKXsKICAgIGlmKGxiKSByZXR1cm47CiAgICBsYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBsYi5jbGFzc05hbWU9J3ZnLWxpZ2h0Ym94JzsKICAgIGxiSW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgbGJJbm5lci5jbGFzc05hbWU9J3ZnLWxiLWlubmVyJzsKICAgIHZhciBjbG9zZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBjbG9zZS5jbGFzc05hbWU9J3ZnLWNsb3NlJzsKICAgIGNsb3NlLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsJ0Nsb3NlIHZpZGVvJyk7IGNsb3NlLmlubmVySFRNTCA9IGNsb3NlSWNvblN2ZzsKICAgIGxiLmFwcGVuZENoaWxkKGxiSW5uZXIpOyBsYi5hcHBlbmRDaGlsZChjbG9zZSk7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGIpOwogICAgY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZUxpZ2h0Ym94KTsKICAgIGxiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSl7IGlmKGUudGFyZ2V0PT09bGIpIGNsb3NlTGlnaHRib3goKTsgfSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSl7IGlmKGUua2V5PT09J0VzY2FwZScgJiYgbGIuY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1vcGVuJykpIGNsb3NlTGlnaHRib3goKTsgfSk7CiAgfQogIGZ1bmN0aW9uIG9wZW5MaWdodGJveCh2aWRlbyl7CiAgICBlbnN1cmVMaWdodGJveCgpOyB2YXIgdXJsID0gZW1iZWRVcmxGb3IodmlkZW8pOyBpZighdXJsKSByZXR1cm47CiAgICBsYklubmVyLmlubmVySFRNTD0nJzsKICAgIHZhciB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHdyYXAuY2xhc3NOYW1lPSd2Zy1pZnJhbWUtd3JhcCc7CiAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7IGlmcmFtZS5zcmM9dXJsOwogICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnYWxsb3cnLCdhdXRvcGxheTsgZnVsbHNjcmVlbjsgcGljdHVyZS1pbi1waWN0dXJlOyBlbmNyeXB0ZWQtbWVkaWEnKTsKICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ2FsbG93ZnVsbHNjcmVlbicsJycpOwogICAgd3JhcC5hcHBlbmRDaGlsZChpZnJhbWUpOyBsYklubmVyLmFwcGVuZENoaWxkKHdyYXApOwogICAgbGIuY2xhc3NMaXN0LmFkZCgnaXMtb3BlbicpOyBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSdoaWRkZW4nOwogIH0KICBmdW5jdGlvbiBjbG9zZUxpZ2h0Ym94KCl7IGlmKCFsYikgcmV0dXJuOyBsYi5jbGFzc0xpc3QucmVtb3ZlKCdpcy1vcGVuJyk7IGxiSW5uZXIuaW5uZXJIVE1MPScnOyBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PScnOyB9CiAgZnVuY3Rpb24gaW5pdCgpewogICAgdmFyIGdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChHUklEX0lEKTsgaWYoIWdyaWQpIHJldHVybjsKICAgIHZhciB3cFNsaWRlcyA9IGZpbmRTbGlkZXMoKTsKICAgIHZhciBzbGlkZXMgPSB3cFNsaWRlcyB8fCBGQUxMQkFDS19TTElERVMubWFwKGZ1bmN0aW9uKHMsaSl7IHMuY29sb3I9RkFMTEJBQ0tfQ09MT1JTW2klRkFMTEJBQ0tfQ09MT1JTLmxlbmd0aF07IHJldHVybiBzOyB9KTsKICAgIGdyaWQuaW5uZXJIVE1MPScnOwogICAgc2xpZGVzLmZvckVhY2goZnVuY3Rpb24ocyxpKXsKICAgICAgdmFyIGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgY2FyZC5jbGFzc05hbWU9J3ZnLWNhcmQnOyBjYXJkLnR5cGU9J2J1dHRvbic7CiAgICAgIGNhcmQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywnUGxheSAnKyhzLnRpdGxlfHwoJ3ZpZGVvICcrKGkrMSkpKSk7CiAgICAgIHZhciBwb3N0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgcG9zdGVyLmNsYXNzTmFtZT0ndmctcG9zdGVyJzsKICAgICAgaWYocy5wb3N0ZXIpeyB2YXIgaW1nPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOyBpbWcuc3JjPXMucG9zdGVyOyBpbWcuYWx0PXMudGl0bGV8fCcnOyBpbWcubG9hZGluZz1pPDI/J2VhZ2VyJzonbGF6eSc7IHBvc3Rlci5hcHBlbmRDaGlsZChpbWcpOyB9CiAgICAgIGVsc2UgeyB2YXIgcGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHBoLmNsYXNzTmFtZT0ndmctcG9zdGVyLXBoJzsgcGguc3R5bGUuYmFja2dyb3VuZD1zLmNvbG9yfHwnIzMzNjY1Qyc7IHBoLnRleHRDb250ZW50PXMudGl0bGV8fCgnVmlkZW8gJysoaSsxKSk7IHBvc3Rlci5hcHBlbmRDaGlsZChwaCk7IH0KICAgICAgdmFyIHBsYXk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHBsYXkuY2xhc3NOYW1lPSd2Zy1wbGF5JzsgcGxheS5pbm5lckhUTUw9cGxheUljb25Tdmc7IHBvc3Rlci5hcHBlbmRDaGlsZChwbGF5KTsKICAgICAgaWYocy50aXRsZXx8cy50ZXh0KXsKICAgICAgICB2YXIgY2FwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBjYXAuY2xhc3NOYW1lPSd2Zy1jYXAnOwogICAgICAgIGlmKHMudGl0bGUpeyB2YXIgaDM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDMnKTsgaDMudGV4dENvbnRlbnQ9cy50aXRsZTsgY2FwLmFwcGVuZENoaWxkKGgzKTsgfQogICAgICAgIGlmKHMudGV4dCl7IHZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsgcC50ZXh0Q29udGVudD1zLnRleHQ7IGNhcC5hcHBlbmRDaGlsZChwKTsgfQogICAgICAgIHBvc3Rlci5hcHBlbmRDaGlsZChjYXApOwogICAgICB9CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQocG9zdGVyKTsKICAgICAgaWYocy52aWRlbykgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IG9wZW5MaWdodGJveChzLnZpZGVvKTsgfSk7CiAgICAgIGdyaWQuYXBwZW5kQ2hpbGQoY2FyZCk7CiAgICB9KTsKICB9CiAgaWYoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSdjb21wbGV0ZScpeyBpbml0KCk7IH0gZWxzZSB7IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgaW5pdCk7IH0KfSkoKTsK



CiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkewogICAgLS1vcmFuZ2U6I0RCOEIzQjsgLS1jcmVhbTojRjRFRUREOyAtLWluazojMjQxQzEzOyAtLXRlYWwtZGFyazojMjM0QTQzOyAtLXRlYWw6IzMzNjY1QzsKICB9CiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkLCAuZmx1c2hlZC10ZWFzZXItZW1iZWQgKnsgYm94LXNpemluZzpib3JkZXItYm94OyB9CgogIC8qIEZ1bGwtYmxlZWQgYnJlYWtvdXQgdXNpbmcgdHJhbnNmb3JtIHJhdGhlciB0aGFuIG5lZ2F0aXZlIG1hcmdpbnMuCiAgICAgVGhlIHRoZW1lJ3MgLmlzLWxheW91dC1jb25zdHJhaW5lZCBydWxlIGNhbiBvdmVycmlkZSBtYXJnaW4tbGVmdC9yaWdodAogICAgIHdpdGggIWltcG9ydGFudCwgYnV0IGl0IGNhbm5vdCB0b3VjaCB0cmFuc2Zvcm0gLS0gc28gdGhpcyBob2xkcyB3aGV0aGVyCiAgICAgb3Igbm90IHRoZSBwYXJlbnQgR3JvdXAgaXMgc2V0IHRvIEZ1bGwgV2lkdGguICovCiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkewogICAgcGFkZGluZzowOwogICAgZm9udC1mYW1pbHk6J0thcmxhJyxzYW5zLXNlcmlmOwogICAgd2lkdGg6MTAwdnc7CiAgICBtYXgtd2lkdGg6MTAwdnc7CiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKICAgIGxlZnQ6NTAlOwogICAgcmlnaHQ6YXV0bzsKICAgIG1hcmdpbi1sZWZ0OjA7CiAgICBtYXJnaW4tcmlnaHQ6MDsKICAgIHRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpOwogIH0KCiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkIC5mbHVzaGVkLWNhcmR7CiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKICAgIG92ZXJmbG93OmhpZGRlbjsKICAgIG1pbi1oZWlnaHQ6NTYwcHg7CiAgICBtaW4taGVpZ2h0OjEwMHZoOwogICAgbWluLWhlaWdodDoxMDBzdmg7CiAgICBkaXNwbGF5OmZsZXg7CiAgICBhbGlnbi1pdGVtczpmbGV4LWVuZDsKICAgIGp1c3RpZnktY29udGVudDpjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOnZhcigtLWluayk7CiAgfQogIC5mbHVzaGVkLXRlYXNlci1lbWJlZCAuZmx1c2hlZC1iZy1pbWd7CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsgaW5zZXQ6MDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7CiAgICAvKiBjb250YWluLCBub3QgY292ZXIgLS0gdGhpcyBpcyB0eXBvZ3JhcGhpYyB0aXRsZSBhcnQgYW5kIG11c3Qgbm90IGNyb3AgKi8KICAgIG9iamVjdC1maXQ6Y29udGFpbjsKICAgIG9iamVjdC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyOwogICAgei1pbmRleDoxOwogIH0KICAuZmx1c2hlZC10ZWFzZXItZW1iZWQgLmZsdXNoZWQtYmctYmx1cnsKICAgIHBvc2l0aW9uOmFic29sdXRlOyBpbnNldDowOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTsgb2JqZWN0LWZpdDpjb3ZlcjsKICAgIGZpbHRlcjpibHVyKDI4cHgpIGJyaWdodG5lc3MoMC41NSkgc2F0dXJhdGUoMS4xNSk7CiAgICB0cmFuc2Zvcm06c2NhbGUoMS4xOCk7CiAgICB6LWluZGV4OjA7CiAgfQogIC5mbHVzaGVkLXRlYXNlci1lbWJlZCAuZmx1c2hlZC1vdmVybGF5ewogICAgcG9zaXRpb246YWJzb2x1dGU7IGluc2V0OjA7IHotaW5kZXg6MjsKICAgIGJhY2tncm91bmQ6CiAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTAsNyw1LDAuMDApIDQwJSwgcmdiYSgxMCw3LDUsMC41NSkgNzIlLCByZ2JhKDEwLDcsNSwwLjkyKSAxMDAlKTsKICB9CiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkIC5mbHVzaGVkLWNvbnRlbnR7CiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsgei1pbmRleDo1OwogICAgdGV4dC1hbGlnbjpjZW50ZXI7CiAgICBwYWRkaW5nOjAgNDBweCA1NnB4OwogICAgbWF4LXdpZHRoOjY0MHB4OwogICAgbWFyZ2luOjAgYXV0bzsKICAgIC8qIHJldmVhbCBsaXZlcyBoZXJlLCBub3Qgb24gdGhlIG91dGVyIHdyYXBwZXIsIHNvIGl0cyB0cmFuc2Zvcm0KICAgICAgIGNhbm5vdCBjb2xsaWRlIHdpdGggdGhlIHRyYW5zbGF0ZVggYnJlYWtvdXQgYWJvdmUgKi8KICAgIG9wYWNpdHk6MDsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMjhweCk7CiAgICB0cmFuc2l0aW9uOm9wYWNpdHkgLjdzIGVhc2UsIHRyYW5zZm9ybSAuN3MgZWFzZTsKICB9CiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkIC5mbHVzaGVkLWNvbnRlbnQuaXMtdmlzaWJsZXsKICAgIG9wYWNpdHk6MTsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCk7CiAgfQogIC8qIFRoZSBhcnR3b3JrIGFscmVhZHkgcmVhZHMgIkZsdXNoZWQgLyBBbiBJbXByb3Zpc2VkIEFuaW1hdGVkIFNwZWNpYWwiLAogICAgIHNvIHRoZSBibG9jaydzIG93biBoZWFkbGluZSBhbmQgZXllYnJvdyBhcmUgc3VwcHJlc3NlZC4gRGVsZXRlIHRoZXNlIHR3bwogICAgIGxpbmVzIGlmIHlvdSBldmVyIHN3YXAgaW4gcGxhaW4gYXJ0IHRoYXQgbmVlZHMgdGhlIHRleHQgYmFjay4gKi8KICAuZmx1c2hlZC10ZWFzZXItZW1iZWQgLmZsdXNoZWQtZXllYnJvd3sgZGlzcGxheTpub25lOyB9CiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkIC5mbHVzaGVkLWhlYWRsaW5leyBkaXNwbGF5Om5vbmU7IH0KCiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkIC5mbHVzaGVkLWV5ZWJyb3ctYmFzZXsKICAgIGZvbnQtZmFtaWx5OidJQk0gUGxleCBNb25vJyxtb25vc3BhY2U7IGZvbnQtd2VpZ2h0OjUwMDsgZm9udC1zaXplOjEyLjVweDsKICAgIGxldHRlci1zcGFjaW5nOjAuMTZlbTsgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOwogICAgY29sb3I6dmFyKC0tb3JhbmdlKTsgbWFyZ2luOjAgMCAxMnB4OwogICAgdGV4dC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC43KTsKICB9CiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkIC5mbHVzaGVkLWhlYWRsaW5lLWJhc2V7CiAgICBmb250LWZhbWlseTonTGlicmUgQmFza2VydmlsbGUnLHNlcmlmOyBmb250LXdlaWdodDo3MDA7CiAgICBmb250LXNpemU6Y2xhbXAoMzJweCwgNS41dncsIDU4cHgpOyBsaW5lLWhlaWdodDoxLjEyOwogICAgY29sb3I6dmFyKC0tY3JlYW0pOyBtYXJnaW46MCAwIDE2cHg7CiAgICB0ZXh0LXNoYWRvdzowIDJweCA0cHggcmdiYSgwLDAsMCwwLjc1KSwgMCA0cHggMThweCByZ2JhKDAsMCwwLDAuNjUpOwogIH0KICAuZmx1c2hlZC10ZWFzZXItZW1iZWQgLmZsdXNoZWQtdGV4dHsKICAgIGZvbnQtZmFtaWx5OidLYXJsYScsc2Fucy1zZXJpZjsgZm9udC1zaXplOjE3cHg7IGxpbmUtaGVpZ2h0OjEuNjU7CiAgICBjb2xvcjp2YXIoLS1jcmVhbSk7IG1hcmdpbjowIDAgMjhweDsKICAgIHRleHQtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuODUpLCAwIDNweCAxMnB4IHJnYmEoMCwwLDAsMC42KTsKICB9CiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkIC5mbHVzaGVkLWJ0bnsKICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrOyBmb250LWZhbWlseTonTGlicmUgQmFza2VydmlsbGUnLHNlcmlmOyBmb250LXdlaWdodDo3MDA7CiAgICBmb250LXNpemU6MTVweDsgY29sb3I6dmFyKC0tY3JlYW0pOyBib3JkZXI6MnB4IHNvbGlkIHZhcigtLWNyZWFtKTsKICAgIHBhZGRpbmc6MTBweCAyOHB4OyBib3JkZXItcmFkaXVzOjk5OXB4OyB0ZXh0LWRlY29yYXRpb246bm9uZTsKICAgIHRyYW5zaXRpb246YmFja2dyb3VuZCAuMThzIGVhc2UsIGNvbG9yIC4xOHMgZWFzZTsKICAgIG1hcmdpbjowIDZweDsKICB9CiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkIC5mbHVzaGVkLWJ0bjpob3ZlcnsgYmFja2dyb3VuZDp2YXIoLS1jcmVhbSk7IGNvbG9yOnZhcigtLWluayk7IH0KICAuZmx1c2hlZC10ZWFzZXItZW1iZWQgLmZsdXNoZWQtYnRuLXByaW1hcnl7CiAgICBiYWNrZ3JvdW5kOnZhcigtLW9yYW5nZSk7IGJvcmRlci1jb2xvcjp2YXIoLS1vcmFuZ2UpOwogIH0KICAuZmx1c2hlZC10ZWFzZXItZW1iZWQgLmZsdXNoZWQtYnRuLXByaW1hcnk6aG92ZXJ7CiAgICBiYWNrZ3JvdW5kOnZhcigtLWNyZWFtKTsgY29sb3I6dmFyKC0taW5rKTsgYm9yZGVyLWNvbG9yOnZhcigtLWNyZWFtKTsKICB9CiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkIC5mbHVzaGVkLWJ0bi1yb3d7CiAgICBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGdhcDowOyBmbGV4LXdyYXA6d3JhcDsKICB9CiAgLmZsdXNoZWQtdGVhc2VyLWVtYmVkIC5mbHVzaGVkLW5vdGV7CiAgICBmb250LWZhbWlseTonSUJNIFBsZXggTW9ubycsbW9ub3NwYWNlOyBmb250LXNpemU6MTEuNXB4OyBsZXR0ZXItc3BhY2luZzowLjA4ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7IGNvbG9yOnZhcigtLWNyZWFtKTsgb3BhY2l0eTowLjc7IG1hcmdpbjoyMnB4IDAgMDsKICAgIHRleHQtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuOCk7CiAgfQoKICBAbWVkaWEgKG1heC13aWR0aDo3MDBweCl7CiAgICAuZmx1c2hlZC10ZWFzZXItZW1iZWQgLmZsdXNoZWQtY2FyZHsgbWluLWhlaWdodDoxMDB2aDsgbWluLWhlaWdodDoxMDBzdmg7IH0KICAgIC5mbHVzaGVkLXRlYXNlci1lbWJlZCAuZmx1c2hlZC1jb250ZW50eyBwYWRkaW5nOjAgMjJweCA0MHB4OyB9CiAgICAuZmx1c2hlZC10ZWFzZXItZW1iZWQgLmZsdXNoZWQtYmctYmx1cnsgZmlsdGVyOmJsdXIoMjBweCkgYnJpZ2h0bmVzcygwLjUpIHNhdHVyYXRlKDEuMTUpOyB9CiAgICAuZmx1c2hlZC10ZWFzZXItZW1iZWQgLmZsdXNoZWQtYnRueyBtYXJnaW46NnB4OyB9CiAgfQoKICAvKiBUaGUgV29yZFByZXNzIEltYWdlIGJsb2NrIHN1cHBseWluZyB0aGUgYXJ0d29yay9oZWFkbGluZS9jb3B5L2xpbmsgKi8KICAuZmx1c2hlZC1waG90by1zb3VyY2V7IGRpc3BsYXk6bm9uZSAhaW1wb3J0YW50OyB9Cg==
CihmdW5jdGlvbigpewogIC8vIC0tLS0gQ29udGVudCBjb21lcyBmcm9tIG9uZSBXb3JkUHJlc3MgSW1hZ2UgYmxvY2sgLS0tLQogIC8vIEFkZCBhbiBJbWFnZSBibG9jayBhbnl3aGVyZSBvbiB0aGUgcGFnZSwgdXBsb2FkIHRoZSBGTFVTSEVEIGFydHdvcmsKICAvLyAod2lkZS9sYW5kc2NhcGUpLCB0aGVuIGdpdmUgaXQgdGhlIENTUyBjbGFzcyAiZmx1c2hlZC1waG90by1zb3VyY2UiCiAgLy8gKEJsb2NrIHNldHRpbmdzIC0+IEFkdmFuY2VkIC0+IEFkZGl0aW9uYWwgQ1NTIGNsYXNzKGVzKSkuIFNldDoKICAvLyAgIC0gQWx0IFRleHQgIC0+IHRoZSBoZWFkbGluZQogIC8vICAgLSBDYXB0aW9uICAgLT4gImRlc2NyaXB0aW9uIHwgQnV5IEJ1dHRvbiBMYWJlbCB8IFNlY29uZCBCdXR0b24gTGFiZWwiCiAgLy8gICAtIExpbmsgKEN1c3RvbSBVUkwpIC0+IE1lbWJlcmZ1bCBjaGVja291dCBVUkwgZm9yIEZMVVNIRUQKICAvLyAgIC0gVGl0bGUgYXR0cmlidXRlICAgLT4gb3B0aW9uYWwgc2Vjb25kIGJ1dHRvbiBVUkwgKGUuZy4gYSB0cmFpbGVyKQogIGZ1bmN0aW9uIGhpZ2hlc3RSZXNTcmMoaW1nKXsKICAgIHZhciBmdWxsID0gaW1nLmdldEF0dHJpYnV0ZSgnZGF0YS1mdWxsLXVybCcpOwogICAgaWYgKGZ1bGwpIHJldHVybiBmdWxsOwogICAgdmFyIHNyY3NldCA9IGltZy5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpOwogICAgaWYgKHNyY3NldCkgewogICAgICB2YXIgYmVzdCA9IHNyY3NldC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbihwYXJ0KXsKICAgICAgICB2YXIgYml0cyA9IHBhcnQudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgICByZXR1cm4geyB1cmw6IGJpdHNbMF0sIHdpZHRoOiBwYXJzZUludCgoYml0c1sxXXx8JycpLnJlcGxhY2UoJ3cnLCcnKSwxMCkgfHwgMCB9OwogICAgICB9KS5zb3J0KGZ1bmN0aW9uKGEsYil7IHJldHVybiBiLndpZHRoIC0gYS53aWR0aDsgfSlbMF07CiAgICAgIGlmIChiZXN0ICYmIGJlc3QudXJsKSByZXR1cm4gYmVzdC51cmw7CiAgICB9CiAgICByZXR1cm4gaW1nLnNyYzsKICB9CgogIGZ1bmN0aW9uIGluaXQoKXsKICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZmx1c2hlZC1waG90by1zb3VyY2UgaW1nJyk7CiAgICB2YXIgYmdJbWcgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZsdXNoZWRCZ0ltZycpOwogICAgdmFyIGJnQmx1ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmbHVzaGVkQmdCbHVyJyk7CgogICAgaWYgKHNvdXJjZSkgewogICAgICBpZiAoYmdJbWcpIHsKICAgICAgICBiZ0ltZy5zcmMgPSBoaWdoZXN0UmVzU3JjKHNvdXJjZSk7CiAgICAgICAgYmdJbWcuYWx0ID0gc291cmNlLmFsdCB8fCAnRkxVU0hFRCc7CiAgICAgICAgYmdJbWcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgaWYgKGJnQmx1cikgeyBiZ0JsdXIuc3JjID0gaGlnaGVzdFJlc1NyYyhzb3VyY2UpOyBiZ0JsdXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0KICAgICAgfQogICAgICBpZiAoc291cmNlLmFsdCkgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmbHVzaGVkSGVhZGxpbmUnKS50ZXh0Q29udGVudCA9IHNvdXJjZS5hbHQ7CiAgICAgIH0KCiAgICAgIHZhciBmaWd1cmUgID0gc291cmNlLmNsb3Nlc3QoJ2ZpZ3VyZScpOwogICAgICB2YXIgY2FwdGlvbiA9IGZpZ3VyZSA/IGZpZ3VyZS5xdWVyeVNlbGVjdG9yKCdmaWdjYXB0aW9uJykgOiBudWxsOwogICAgICB2YXIgYnRuMkxhYmVsID0gbnVsbDsKICAgICAgaWYgKGNhcHRpb24pIHsKICAgICAgICB2YXIgcmF3ID0gY2FwdGlvbi50ZXh0Q29udGVudC50cmltKCk7CiAgICAgICAgdmFyIHRleHQgPSByYXcsIGJ0bkxhYmVsID0gbnVsbDsKICAgICAgICBpZiAocmF3LmluZGV4T2YoJ3wnKSAhPT0gLTEpIHsKICAgICAgICAgIHZhciBwYXJ0cyA9IHJhdy5zcGxpdCgnfCcpOwogICAgICAgICAgdGV4dCAgICAgID0gcGFydHNbMF0udHJpbSgpOwogICAgICAgICAgYnRuTGFiZWwgID0gcGFydHNbMV0gPyBwYXJ0c1sxXS50cmltKCkgOiBudWxsOwogICAgICAgICAgYnRuMkxhYmVsID0gcGFydHNbMl0gPyBwYXJ0c1syXS50cmltKCkgOiBudWxsOwogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmx1c2hlZFRleHQnKS50ZXh0Q29udGVudCA9IHRleHQ7CiAgICAgICAgaWYgKGJ0bkxhYmVsKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmx1c2hlZEJ0bicpLnRleHRDb250ZW50ID0gYnRuTGFiZWw7CiAgICAgIH0KCiAgICAgIHZhciBsaW5rRWwgPSBzb3VyY2UuY2xvc2VzdCgnYScpOwogICAgICB2YXIgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZsdXNoZWRCdG4nKTsKICAgICAgaWYgKGxpbmtFbCkgewogICAgICAgIHZhciBocmVmID0gbGlua0VsLmdldEF0dHJpYnV0ZSgnaHJlZicpOwogICAgICAgIGlmIChocmVmKSBidG4uaHJlZiA9IGhyZWY7CiAgICAgICAgdmFyIHRndCA9IGxpbmtFbC5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpOwogICAgICAgIGlmICh0Z3QpIHsgYnRuLnRhcmdldCA9IHRndDsgYnRuLnJlbCA9ICdub29wZW5lciBub3JlZmVycmVyJzsgfQogICAgICB9CgogICAgICB2YXIgYnRuMlVybCA9IHNvdXJjZS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7CiAgICAgIHZhciBidG4yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZsdXNoZWRCdG4yJyk7CiAgICAgIGlmIChidG4yVXJsKSB7CiAgICAgICAgYnRuMi5ocmVmID0gYnRuMlVybDsKICAgICAgICBidG4yLnRleHRDb250ZW50ID0gYnRuMkxhYmVsIHx8ICdXYXRjaCB0aGUgVHJhaWxlcic7CiAgICAgICAgYnRuMi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CiAgICAgICAgYnRuMi50YXJnZXQgPSAnX2JsYW5rJzsKICAgICAgICBidG4yLnJlbCA9ICdub29wZW5lciBub3JlZmVycmVyJzsKICAgICAgfQogICAgfQoKICAgIC8vIFJldmVhbCBvbiBzY3JvbGwgLS0gYXBwbGllZCB0byB0aGUgaW5uZXIgY29udGVudCwgbmV2ZXIgdGhlIHdyYXBwZXIKICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmZsdXNoZWQtdGVhc2VyLWVtYmVkIC5mbHVzaGVkLWNvbnRlbnQnKTsKICAgIGlmIChjb250ZW50ICYmICdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93KSB7CiAgICAgIHZhciBvYnMgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZW50cmllcyl7CiAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpewogICAgICAgICAgaWYgKGUuaXNJbnRlcnNlY3RpbmcpIHsgZS50YXJnZXQuY2xhc3NMaXN0LmFkZCgnaXMtdmlzaWJsZScpOyBvYnMudW5vYnNlcnZlKGUudGFyZ2V0KTsgfQogICAgICAgIH0pOwogICAgICB9LCB7IHRocmVzaG9sZDogMC4xNSB9KTsKICAgICAgb2JzLm9ic2VydmUoY29udGVudCk7CiAgICB9IGVsc2UgaWYgKGNvbnRlbnQpIHsKICAgICAgY29udGVudC5jbGFzc0xpc3QuYWRkKCdpcy12aXNpYmxlJyk7CiAgICB9CiAgfQoKICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykgeyBpbml0KCk7IH0KICBlbHNlIHsgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBpbml0KTsgfQp9KSgpOwo=
