File manager - Edit - /home/webtrixia/demohub.webtrixia.com/install_hub.php
Back
<?php declare(strict_types=1); error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE); $WT_HUB_FILES = array ( 'README.txt' => '4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgV0VCVFJJWElBIEhVQiDigJQg0JjQvdGB0YLQsNC70LDRhtC40Y8K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCgoxLiDQmtCw0YfQuCDQktCh0JjQp9Ca0Jgg0YTQsNC50LvQvtCy0LUg0LIg0L/QsNC/0LrQsNGC0LAg0L3QsAogICBodWIud2VidHJpeGlhLmNvbSAo0YDQsNC30LDRgNGF0LjQstC40YDQsNC90LgpCgoyLiDQntGC0LLQvtGA0Lgg0JLQldCU0J3QqtCWOgogICBodWIud2VidHJpeGlhLmNvbS9hcGkucGhwP2FjdGlvbj1pbnN0YWxsCgozLiDQktC70LXQtyDQvdCwOiBodWIud2VidHJpeGlhLmNvbQogICBhZG1pbiAvIHdlYnRyaXhpYTIwMjUKCtCk0JDQmdCb0J7QktCVOgogIGluZGV4Lmh0bWwgICAgIOKAlCDRhdGK0LEKICBhcGkucGhwICAgICAgICDigJQg0LHQsNC30LAg0LTQsNC90L3QuCArIFRlbGVncmFtCiAgb2ZmZXIuaHRtbCAgICAg4oCUINC+0YTQtdGA0YLQuAogIGNvbnRyYWN0cy5odG1sIOKAlCDQtNC+0LPQvtCy0L7RgNC4CiAgLmh0YWNjZXNzICAgICAg4oCUINGB0LjQs9GD0YDQvdC+0YHRggoKVEVMRUdSQU06INCy0LXRh9C1INC1INC90LDRgdGC0YDQvtC10L0g0LrRitC8INGC0LLQvtGPINC70LjRh9C10L0g0LDQutCw0YPQvdGCLgrQl9CwINCz0YDRg9C/0L7QsiDRh9Cw0YIg4oCUINGB0LzQtdC90LggVEdfQ0hBVF9JRCDQsiBhcGkucGhwLgrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAK', 'README_UPDATE.txt' => '4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgV0VCVFJJWElBIEhVQiDigJQg0J/Qu9Cw0YLRhNC+0YDQvNCwINC30LAg0L/RgNC10L/RgNC+0LTQsNC20LHQsCAodjMpCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAoK0JrQkNCa0JLQniDQodCVINCf0J7Qn9Cg0JDQktCYICjQv9GA0LjRh9C40L3QsNGC0LAg0LfQsCAiVW5leHBlY3RlZCB0b2tlbiAnPCciKToKCiAgMS4gYXBpLnBocCDQuNC80LDRiNC1INCi0JLQqtCg0JTQniDQt9Cw0LrQvtC00LjRgNCw0L3QuCDQtNCw0L3QvdC4INC30LAg0LHQsNC30LAg0LTQsNC90L3QuCAo0YLQstC+0LjRgtC1CiAgICAg0L7RgiBodWIud2VidHJpeGlhLmNvbSkg4oCUINC90LAg0LLRgdC10LrQuCDQvdC+0LIg0YHRitGA0LLRitGAINCz0YrRgNC80LXRiNC1INCy0LXQtNC90LDQs9CwLAogICAgINC30LDRidC+0YLQviBQSFAg0L3QtSDQvNC+0LbQtdGI0LUg0LTQsCDRgdC1INGB0LLRitGA0LbQtS4g0JLQtdGH0LUg0LPQuCDRh9C10YLQtSDQvtGCIGNvbmZpZy5waHAsCiAgICAg0LrQvtC50YLQviDRgdC1INGB0YrQt9C00LDQstCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0L7RgiDQuNC90YHRgtCw0LvQsNGC0L7RgNCwICjQstC40LYg0L/Qvi3QtNC+0LvRgykuCiAgMi4g0JjQvNCw0YjQtSDQuCDRgdC40L3RgtCw0LrRgdC40YEgKGFycm93IGZ1bmN0aW9ucyksINC90LXRgdGK0LLQvNC10YHRgtC40Lwg0YHRitGBINC/0L4t0YHRgtCw0YDQuAogICAgINCy0LXRgNGB0LjQuCBQSFAg0L3QsCDQvdGP0LrQvtC4IGNQYW5lbCDRgdGK0YDQstGK0YDQuCDigJQg0L7Qv9GA0LDQstC10L3Qvi4KICAzLiDQlNC+0LHQsNCy0LXQvSDQtSDQs9C70L7QsdCw0LvQtdC9ICJzYWZldHkgbmV0IiDQsiBhcGkucGhwIOKAlCDQtNC+0YDQuCDQv9GA0Lgg0LHRitC00LXRidCwCiAgICAg0LPRgNC10YjQutCwINCy0LXRh9C1INCS0JjQndCQ0JPQmCDRidC1INC/0L7Qu9GD0YfQsNCy0LDRiCDQstCw0LvQuNC00LXQvSBKU09OLCDQvdC40LrQvtCz0LAg0YHRg9GA0L7QsgogICAgIFBIUCBIVE1MIGZhdGFsIGVycm9yICjRgtC+0LLQsCDRgtC+0YfQvdC+INGH0YPQv9C10YjQtSBKU09OLnBhcnNlINC/0YDQuCDRgtC10LEpLgogIDQuINCe0YLQutGA0LjRhSDQuCDQvtC/0YDQsNCy0LjRhSDQsdGK0LMsINC/0YDQuCDQutC+0LnRgtC+INC30LDQv9C40YEg0L3QsCDRhNC40YDQvNC10L3QuC/QsdGA0LDQvdC00LjQvdCzCiAgICAg0L3QsNGB0YLRgNC+0LnQutC4INC40LfRgtGA0LjQstCw0YjQtSDQvtGB0YLQsNC90LDQu9C40YLQtSDQvdC10L/QvtGB0L7Rh9C10L3QuCDQv9C+0LvQtdGC0LAg4oCUINCy0LXRh9C1INC1CiAgICAgItGH0LDRgdGC0LjRh9C10L0g0YrQv9C00LXQudGCIiAo0L/QuNC/0LAg0YHQsNC80L4g0LrQsNC60LLQvtGC0L4g0L/RgNCw0YnQsNGIKS4KCiAg0JLRgdC40YfQutC+INC/0L4t0LTQvtC70YMg0LUg0KDQldCQ0JvQndCeINGC0LXRgdGC0LLQsNC90L4gKNC40L3RgdGC0LDQu9C40YDQsNGFINC70L7QutCw0LvQtdC9IE15U1FMINC4CiAg0LzQuNC90LDRhSDQv9GA0LXQtyDRhtC10LvQuNGPIGluc3RhbGwg4oaSINGE0LDQutGC0YPRgNCwIOKGkiDQvNC+0LvQsdCwIOKGkiDQv9GK0YLQtdC9INC70LjRgdGCINC/0L7RgtC+0LopLgoKCtCa0JDQmiDQodCV0JPQkCDQoNCQ0JHQntCi0Jgg0JjQndCh0KLQkNCb0JDQptCY0K/QotCQICjQuNGB0YLQuNC90YHQutC4IHNlbGYtaW5zdGFsbGVyLCDQutCw0YLQviDRgdC+0YTRgtGD0LXRgCk6CgogIDEuINCd0LDQv9GA0LDQstC4INC/0L7QtNC00L7QvNC10LnQvSDQsiBjUGFuZWwgKNC90LDQv9GALiBodWIua2xpZW50LmNvbSksINC60LDRh9C4CiAgICAg0JLQodCY0KfQmtCYINGE0LDQudC70L7QstC1INC+0YIg0YLQvtC30Lgg0LDRgNGF0LjQsiDQsiDQvdC10LPQvi4KICAyLiDQkiBjUGFuZWwg4oaSIE15U1FMwq4gRGF0YWJhc2VzOiDRgdGK0LfQtNCw0Lkg0LHQsNC30LAg0LTQsNC90L3QuCArINC/0L7RgtGA0LXQsdC40YLQtdC7CiAgICAg0YEg0L/RitC70L3QuCDQv9GA0LDQstCwINCy0YrRgNGF0YMg0L3QtdGPICjQt9Cw0L/QuNGI0Lgg0YHQuCDQuNC80LUg0L3QsCDQsdCw0LfQsC/Qv9C+0YLRgNC10LHQuNGC0LXQuy/Qv9Cw0YDQvtC70LApLgogIDMuINCe0YLQstC+0YDQuCDQsiDQsdGA0LDRg9C30YrRgNCwOiBodHRwczovL9C/0L7QtNC00L7QvNC10LnQvS93X2h1Yl9pbnN0YWxsLnBocAogICAgINCh0YLRitC/0LrQsCAxINGJ0LUg0L/QvtC40YHQutCwINGC0L7Rh9C90L4g0YLQtdC30LggNCDQvdC10YnQsCAoaG9zdCDQvtCx0LjQutC90L7QstC10L3QviDQtQogICAgICJsb2NhbGhvc3QiKSDigJQg0YLQtdGB0YLQstCwINCy0YDRitC30LrQsNGC0LAg0Lgg0KHQkNCcINC/0LjRiNC1IGNvbmZpZy5waHAuCiAgICAgKNCQ0LrQviBQSFAg0L3Rj9C80LAg0L/RgNCw0LLQsCDQtNCwINC/0LjRiNC1INGE0LDQudC7LCDRidC1INGC0Lgg0LrQsNC20LUg0Lgg0LzQvtC20LXRiCDRgNGK0YfQvdC+CiAgICAg0LTQsCDQutCw0YfQuNGIIGNvbmZpZy5waHAg0L/QviDQvtCx0YDQsNC30LXRhiDQvtGCIGNvbmZpZy5leGFtcGxlLnBocC4pCiAgNC4g0KHRgtGK0L/QutCwIDI6INC40LfQsdC40YDQsNGIINGC0LjQvyDRhdGK0LEgKNCQ0LPQtdC90YbQuNGPIC8g0KHRgtGA0L7QuNGC0LXQu9C90LAt0YLRgNCw0L3RgdC/0L7RgNGC0L3QsCAvCiAgICAg0J7QsdGJKS4KICA1LiDQodGC0YrQv9C60LAgMzog0LTQsNC90L3QuCDQvdCwINGE0LjRgNC80LDRgtCwICsg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRgdC60Lgg0LTQvtGB0YLRitC/LgogIDYuICLQmNC90YHRgtCw0LvQuNGA0LDQuSIg4oaSINGB0YrQt9C00LDQstCwINCy0YHQuNGH0LrQuCDRgtCw0LHQu9C40YbQuCwg0LPQtdC90LXRgNC40YDQsCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0LjQstC10L0KICAgICDQutC70Y7RhyAobGljZW5zZSBrZXkpINC4INGC0Lgg0L/QvtC60LDQt9Cy0LAg0LvQvtCz0LjQvSDQtNCw0L3QvdC40YLQtSDigJQg0JXQlNCd0JDQli4KCiAgY29uZmlnLnBocCDQndCVINGB0LUg0LrQsNGH0LLQsCDQv9GA0LXQtNCy0LDRgNC40YLQtdC70L3QviDQsiDQsNGA0YXQuNCy0LAg0L3QsNGA0L7Rh9C90L4g4oCUINCy0YHQtdC60LgKICDQutC70LjQtdC90YIv0YHRitGA0LLRitGAINGC0YDRj9Cx0LLQsCDQtNCwINC/0L7Qu9GD0YfQuCDRgdC+0LHRgdGC0LLQtdC9LCDQs9C10L3QtdGA0LjRgNCw0L0g0L/RgNC4INC40L3RgdGC0LDQu9Cw0YbQuNGPLgoKCtCe0KHQotCQ0J3QkNCb0J7QotCeICjQvdC10L/RgNC+0LzQtdC90LXQvdC+INGB0L/RgNGP0LzQviDQv9GA0LXQtNC90LDRgtCwINCy0LXRgNGB0LjRjyk6CgogIHdfYWRtaW4ucGhwIOKAlCDQutC+0L3RgtGA0L7Qu9C10L0g0L/QsNC90LXQuyDQt9Cw0LQg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC40LLQvdC40Y8g0LrQu9GO0Yc6CiAgICDwn46oINCR0YDQsNC90LTQuNC90LMsIPCfp6kg0JzQvtC00YPQu9C4ICjQstC60Lsv0LjQt9C60LspLCDwn5SRINCb0LjRhtC10L3Qtywg8J+SviDQlNCw0L3QvdC4CiAgICAo0LHQtdC60YrQvy9yZXN0b3JlINC30LAg0LzQtdGB0YLQtdC90LUg0L3QsCDQtNGA0YPQsyDRhdC+0YHRgtC40L3QsyksIPCfj6Ig0JrQu9C40LXQvdGC0YHQutC4CiAgICDRhdGK0LHQvtCy0LUgKNC00LjRgdGC0LDQvdGG0LjQvtC90L3QviDQstC60LvRjtGH0LLQsNC90LUv0LjQt9C60LvRjtGH0LLQsNC90LUg0L3QsCDQvNC+0LTRg9C70Lgg0L/RgNC4CiAgICDQstC10YfQtSDQv9GA0L7QtNCw0LTQtdC90Lgg0LjQvdGB0YLQsNC70LDRhtC40LgpLCDimqDvuI8g0J7Qv9Cw0YHQvdCwINC30L7QvdCwICjRhNCw0LHRgNC40YfQvdC+CiAgICDQvdGD0LvQuNGA0LDQvdC1ICsg0YLRgNCw0LnQvdC+INC40LfRgtGA0LjQstCw0L3QtSDQvdCwIHdfYWRtaW4ucGhwL3dfaHViX2luc3RhbGwucGhwCiAgICDQv9GA0LXQtNC4INC00LAg0L/RgNC10LTQsNC00LXRiCDQvdCwINC60LvQuNC10L3RgtCwKS4KCiAgd2F5YmlsbHMuaHRtbCDigJQg0J/RitGC0L3QuCDQu9C40YHRgtC+0LLQtSAo0JzQn9ChLCDRiNC+0YTRjNC+0YAsINC80LDRgNGI0YDRg9GCLCDQutC8LAogICAg0LPQvtGA0LjQstC+LCDRgdGC0LDRgtGD0YEg0LDQutGC0LjQstC10L0v0L3QtdCw0LrRgtC40LLQtdC9L9C/0YDQuNC60LvRjtGH0LXQvSwg0L/QtdGH0LDRgikuCgogIGhyLmh0bWwg4oCUINCc0L7Qu9Cx0Lgg0LLQtdGH0LUg0YEg0YDQtdCw0LvQvdC+ICLinJMg0J7QtNC+0LHRgNC4IC8g4pyVINCe0YLQutCw0LbQuCIuCgogIGludm9pY2UtZG9jLmh0bWwg4oCUINC/0LXRh9Cw0YLRitGCINC1INGE0LjQutGB0LjRgNCw0L0gKEE0LCDRhtCy0LXRgtC+0LLQtdGC0LUg0LjQt9C70LjQt9Cw0YIsCiAgICDQsdC10Lcg0YfRg9C/0LXQvdC1INC90LAg0YDQtdC00L7QstC1INC80LXQttC00YMg0YHRgtGA0LDQvdC40YbQuCkuCgoK0KDQkNCR0J7QotCV0J0g0J/QoNCe0KbQldChINCX0JAg0J/QoNCe0JTQkNCW0JHQkCDQndCQINCa0JvQmNCV0J3QojoKCiAgMS4g0J3QvtCyINC/0L7QtNC00L7QvNC10LnQvS/RhdC+0YHRgtC40L3QsyDRgSDQv9GA0LDQt9C90LAgTXlTUUwg0LHQsNC30LAg4oaSINC40L3RgdGC0LDQu9C40YDQsNGIINC/0YDQtdC3CiAgICAgd19odWJfaW5zdGFsbC5waHAgKNCy0LjQtiDQv9C+LdCz0L7RgNC1KS4KICAyLiDQndCw0YHRgtGA0L7QudCy0LDRiCDQu9C+0LPQvi/RhtCy0LXRgtC+0LLQtS/QvNC+0LTRg9C70Lgg0L/RgNC10Lcgd19hZG1pbi5waHAuCiAgMy4g0J/QviDQttC10LvQsNC90LjQtTog0YDQtdCz0LjRgdGC0YDQuNGA0LDRiCDQvdC+0LLQuNGPINGF0YrQsSDQsiDQotCS0J7QryBodWIud2VidHJpeGlhLmNvbQogICAgIOKGkiB3X2FkbWluLnBocCDihpIgItCa0LvQuNC10L3RgtGB0LrQuCDRhdGK0LHQvtCy0LUiIChVUkwgKyDQutC70Y7RhyksINC30LAg0LTQsCDQvNC+0LbQtdGICiAgICAg0L/QvtGB0LvQtSDQtNC40YHRgtCw0L3RhtC40L7QvdC90L4g0LTQsCDQvNGDINCy0LrQu9GO0YfQstCw0Ygv0LjQt9C60LvRjtGH0LLQsNGIINC80L7QtNGD0LvQuC4KICA0LiDQn9GA0LXQtNC4INC/0YDQtdC00LDQstCw0L3QtSDQvdCwINC60LvQuNC10L3RgtCwOiB3X2FkbWluLnBocCDihpIgItCe0L/QsNGB0L3QsCDQt9C+0L3QsCIg4oaSCiAgICAg0LjQt9GC0YDQuNCy0LDRiCB3X2FkbWluLnBocCArIHdfaHViX2luc3RhbGwucGhwICjQuNC70Lgg0YHQsNC80L4g0LfQsNC60LvRjtGH0LLQsNGIKS4KCgrQodCb0JXQlNCS0JDQqdCYINCc0J7QlNCj0JvQmCAo0L/QviDQttC10LvQsNC90LjQtSwg0LrQsNC20Lgg0LrQvtC5INC1INC/0YDQuNC+0YDQuNGC0LXRgik6CiAg4oCiINCi0YDRg9C00L7QstC4INC00L7Qs9C+0LLQvtGA0Lgv0LfQsNC/0L7QstC10LTQuCDQs9C10L3QtdGA0LDRgtC+0YAKICDigKIg0JHQvtC70L3QuNGH0L3QuCDQu9C40YHRgtC+0LLQtQogIOKAoiDQlNGK0LvQs9C+0YLRgNCw0LnQvdC4INCw0LrRgtC40LLQuCAvINC40L3QstC10L3RgtCw0YAKICDigKIg0KHRgtC+0LrQvtCy0Lgg0YDQsNC30L/QuNGB0LrQuCAvINC/0YDQuNC10LzQvi3Qv9GA0LXQtNCw0LLQsNGC0LXQu9C90Lgg0L/RgNC+0YLQvtC60L7Qu9C4CiAg4oCiINCa0LvQuNC10L3RgtGB0LrQuCDQv9C+0YDRgtCw0LsgKNC60LvQuNC10L3RgtC40YLQtSDQstC40LbQtNCw0YIg0YHQsNC80L4g0YHQstC+0LjRgtC1INC00L7QutGD0LzQtdC90YLQuCkKICDigKIg0JLRitGC0YDQtdGI0LXQvSDRhtC10L3RgtGK0YAg0LfQsCDQuNC30LLQtdGB0YLQuNGPCiAg4oCiINCQ0LLRgtC+0LzQsNGC0LjRh9C10L0g0L3QvtGJ0LXQvSDQsdC10LrRitC/INC/0YDQtdC3IGNyb24KICDigKIgR0RQUiDRgNC10LPQuNGB0YLRitGAINC90LAg0LfQsNGP0LLQutC4CgrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAK', 'ai-document.html' => 'PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEiPgo8dGl0bGU+0JTQuNCz0LjRgtCw0LvQtdC9INC00L7QutGD0LzQtdC90YI8L3RpdGxlPgo8c3R5bGU+Cjpyb290ey0tYmc6I2VlZjNlYzstLXBhbmVsOiNmZmY7LS10eDojMTUxNTE1Oy0tdHgyOiM2NDcwNjQ7LS1icjojZGJlOGQ0Oy0tZ3JlZW46IzE1OTQ0NzstLXJlZDojYjkxYzFjfQoqe2JveC1zaXppbmc6Ym9yZGVyLWJveH0KYm9keXttYXJnaW46MDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtjb2xvcjp2YXIoLS10eCl9Ci5zaGVsbHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjMwMHB4IG1pbm1heCg3NjBweCwxZnIpO2dhcDoxOHB4O21pbi1oZWlnaHQ6MTAwdmg7cGFkZGluZzoxOHB4fQouc2lkZXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjE4cHg7aGVpZ2h0OmNhbGMoMTAwdmggLSAzNnB4KTtvdmVyZmxvdzphdXRvfQoudG9wYmFye2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1ib3R0b206MTRweH0KLmJ0bntib3JkZXI6MDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjlweCAxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTJweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOiNlOWVlZTU7Y29sb3I6IzFlMjUxYzt0ZXh0LWRlY29yYXRpb246bm9uZTtkaXNwbGF5OmlubGluZS1mbGV4fQouYnRuLnB7YmFja2dyb3VuZDp2YXIoLS1ncmVlbik7Y29sb3I6I2ZmZn0uYnRuLmR7YmFja2dyb3VuZDojZmVlMmUyO2NvbG9yOiNiOTFjMWN9Cmgxe2ZvbnQtc2l6ZToxOHB4O21hcmdpbjowIDAgNHB4fS5oaW50e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4Mik7bGluZS1oZWlnaHQ6MS40NTttYXJnaW46MCAwIDE0cHh9Ci5tZXRhe2Rpc3BsYXk6Z3JpZDtnYXA6OHB4O21hcmdpbi10b3A6MTJweH0ubXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyKTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjlweDtiYWNrZ3JvdW5kOiNmYmZkZjl9Lm1re2ZvbnQtc2l6ZToxMHB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjojNzc4Mjc2O2ZvbnQtd2VpZ2h0OjcwMH0ubXZ7Zm9udC1zaXplOjEzcHg7bWFyZ2luLXRvcDozcHg7d29yZC1icmVhazpicmVhay13b3JkfQoucHJldmlld3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O292ZXJmbG93OmF1dG99Ci5wYWdle3dpZHRoOjc5NHB4O2hlaWdodDoxMTIzcHg7YmFja2dyb3VuZDojZmZmO2JveC1zaGFkb3c6MCAxMnB4IDQwcHggcmdiYSgwLDAsMCwuMTIpO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0KLnR4dHtwb3NpdGlvbjphYnNvbHV0ZTt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtsaW5lLWhlaWdodDoxLjE1O2NvbG9yOiMxMTE7b3ZlcmZsb3c6aGlkZGVufQoubG57cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDojMTExO3RyYW5zZm9ybS1vcmlnaW46bGVmdCB0b3B9Ci5yZWN0e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlcjoxcHggc29saWQgIzExMX0KLmVtcHR5e3dpZHRoOjc5NHB4O21pbi1oZWlnaHQ6NDIwcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggZGFzaGVkICNiOGM0YjQ7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjhweDtjb2xvcjp2YXIoLS10eDIpO2xpbmUtaGVpZ2h0OjEuNn0KQG1lZGlhKG1heC13aWR0aDoxMTIwcHgpey5zaGVsbHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfS5zaWRle3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDphdXRvfS5wcmV2aWV3e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fX0KQG1lZGlhIHByaW50e2JvZHl7YmFja2dyb3VuZDojZmZmfS5zaGVsbHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MH0uc2lkZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5wcmV2aWV3e2Rpc3BsYXk6YmxvY2t9LnBhZ2V7d2lkdGg6MjEwbW07aGVpZ2h0OjI5N21tO2JveC1zaGFkb3c6bm9uZX19Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9InNoZWxsIj4KICA8YXNpZGUgY2xhc3M9InNpZGUiPgogICAgPGRpdiBjbGFzcz0idG9wYmFyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJsb2NhdGlvbi5ocmVmPSdpbmRleC5odG1sJyI+4oaQIEh1YjwvYnV0dG9uPgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0id2luZG93LnByaW50KCkiPlBERiAvINCf0LXRh9Cw0YI8L2J1dHRvbj4KICAgIDwvZGl2PgogICAgPGgxPtCU0LjQs9C40YLQsNC70LXQvSDQtNC+0LrRg9C80LXQvdGCPC9oMT4KICAgIDxwIGNsYXNzPSJoaW50Ij7QotC+0LLQsCDQvdC1INC1INGB0L3QuNC80LrQsCDQstGK0YDRhdGDIFBERi4gSHViINCy0YrQt9GB0YLQsNC90L7QstGP0LLQsCBsYXlvdXQt0LAg0L3QsCDQtNC+0LrRg9C80LXQvdGC0LAg0LrQsNGC0L4g0YfQuNGB0YLQuCDRgtC10LrRgdGC0L7QstC1LCDQu9C40L3QuNC4INC4INGC0LDQsdC70LjRhtC4LjwvcD4KICAgIDxkaXYgaWQ9ImxpbmtzIiBjbGFzcz0idG9wYmFyIj48L2Rpdj4KICAgIDxkaXYgaWQ9Im1ldGEiIGNsYXNzPSJtZXRhIj48ZGl2IGNsYXNzPSJoaW50Ij7Ql9Cw0YDQtdC20LTQsNC90LUuLi48L2Rpdj48L2Rpdj4KICA8L2FzaWRlPgogIDxtYWluIGNsYXNzPSJwcmV2aWV3Ij48c2VjdGlvbiBjbGFzcz0icGFnZSIgaWQ9InBhZ2UiPjwvc2VjdGlvbj48L21haW4+CjwvZGl2Pgo8c2NyaXB0PgondXNlIHN0cmljdCc7CmNvbnN0IEFQST0oZnVuY3Rpb24oKXtjb25zdCBiYXNlPWxvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9haS1kb2N1bWVudFwuaHRtbCQvLCcnKS5yZXBsYWNlKC9cLyQvLCcnKTtyZXR1cm4gYmFzZSsnL2FwaS5waHAnO30pKCk7CmNvbnN0IHFzPW5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKTsKY29uc3Qgc2NhbklkPXFzLmdldCgnaWQnKXx8Jyc7CmxldCBzY2FuPW51bGwsIGRhdGE9e307CmZ1bmN0aW9uIGVzYyhzKXtyZXR1cm4gU3RyaW5nKHM9PW51bGw/Jyc6cykucmVwbGFjZSgvWyY8PiInXS9nLGM9Pih7JyYnOicmYW1wOycsJzwnOicmbHQ7JywnPic6JyZndDsnLCciJzonJnF1b3Q7JywiJyI6JyYjMzk7J31bY10pKTt9CmFzeW5jIGZ1bmN0aW9uIGFmKGFjdGlvbixtZXRob2QsYm9keSl7Y29uc3Qgb3B0PXttZXRob2Q6bWV0aG9kfHwnR0VUJyxoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbid9fTtpZihib2R5KW9wdC5ib2R5PUpTT04uc3RyaW5naWZ5KGJvZHkpO2NvbnN0IHI9YXdhaXQgZmV0Y2goQVBJKyc/YWN0aW9uPScrYWN0aW9uLG9wdCk7Y29uc3Qgaj1hd2FpdCByLmpzb24oKTtpZighai5vayl0aHJvdyBuZXcgRXJyb3Ioai5lcnJvcnx8J9CT0YDQtdGI0LrQsCcpO3JldHVybiBqLmRhdGE7fQpmdW5jdGlvbiBuKHYsZCl7dj1OdW1iZXIodik7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2KT92OihkfHwwKTt9CmZ1bmN0aW9uIHBjdCh2KXt2PW4odiwwKTtyZXR1cm4gKHY8PTEwMD9NYXRoLm1heCgwLE1hdGgubWluKDEwMCx2KSk6TWF0aC5tYXgoMCxNYXRoLm1pbigxMDAsdi83Ljk0KSkpKyclJzt9CmZ1bmN0aW9uIHJlbmRlckxpbmtzKCl7CiAgY29uc3QgbGlua3M9W107CiAgaWYoc2Nhbi5kaWdpdGFsX3BkZl9wYXRoKWxpbmtzLnB1c2goJzxhIGNsYXNzPSJidG4gcCIgaHJlZj0iJytlc2Moc2Nhbi5kaWdpdGFsX3BkZl9wYXRoKSsnIiB0YXJnZXQ9Il9ibGFuayI+0JPQvtGC0L7QsiBQREY8L2E+Jyk7CiAgaWYoc2Nhbi5wZGZfcGF0aClsaW5rcy5wdXNoKCc8YSBjbGFzcz0iYnRuIiBocmVmPSInK2VzYyhzY2FuLnBkZl9wYXRoKSsnIiB0YXJnZXQ9Il9ibGFuayI+U2NhbiBQREY8L2E+Jyk7CiAgaWYoc2Nhbi5maWxlX3BhdGgpbGlua3MucHVzaCgnPGEgY2xhc3M9ImJ0biIgaHJlZj0iJytlc2Moc2Nhbi5maWxlX3BhdGgpKyciIHRhcmdldD0iX2JsYW5rIj7QntGA0LjQs9C40L3QsNC7PC9hPicpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaW5rcycpLmlubmVySFRNTD1saW5rcy5qb2luKCcnKTsKfQpmdW5jdGlvbiByZW5kZXJNZXRhKCl7CiAgY29uc3Qgc2tpcD17bGF5b3V0OjEsbGluZV9pdGVtczoxLGl0ZW1zOjF9OwogIGNvbnN0IGtleXM9T2JqZWN0LmtleXMoZGF0YXx8e30pLmZpbHRlcihrPT4hc2tpcFtrXSAmJiBkYXRhW2tdIT09JycgJiYgZGF0YVtrXSE9bnVsbCAmJiB0eXBlb2YgZGF0YVtrXSE9PSdvYmplY3QnKS5zbGljZSgwLDE4KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWV0YScpLmlubmVySFRNTD1rZXlzLmxlbmd0aD9rZXlzLm1hcChrPT4nPGRpdiBjbGFzcz0ibSI+PGRpdiBjbGFzcz0ibWsiPicrZXNjKGspKyc8L2Rpdj48ZGl2IGNsYXNzPSJtdiI+Jytlc2MoZGF0YVtrXSkrJzwvZGl2PjwvZGl2PicpLmpvaW4oJycpOic8ZGl2IGNsYXNzPSJoaW50Ij7QndGP0LzQsCDQvtGC0LTQtdC70L3QviDRgNCw0LfQv9C+0LfQvdCw0YLQuCDQv9C+0LvQtdGC0LAuPC9kaXY+JzsKfQpmdW5jdGlvbiByZW5kZXJMYXlvdXQoKXsKICBjb25zdCBwYWdlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlJyk7CiAgY29uc3QgbGF5b3V0PWRhdGEubGF5b3V0fHx7fTsKICBjb25zdCBlbHM9QXJyYXkuaXNBcnJheShsYXlvdXQuZWxlbWVudHMpP2xheW91dC5lbGVtZW50czpbXTsKICBpZighZWxzLmxlbmd0aCl7CiAgICBwYWdlLm91dGVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiIGlkPSJwYWdlIj48Yj7QndGP0LzQsCBBSSBsYXlvdXQuPC9iPjxicj7QotC+0LfQuCDQtNC+0LrRg9C80LXQvdGCINC1INC60LDRh9C10L0sINC90L4gQUkg0L3QtSDQtSDQstGK0YDQvdCw0LsgbGF5b3V0INC/0YDQuCDQv9GK0YDQstC+0YLQviDRh9C10YLQtdC90LUuINCd0LDRgtC40YHQvdC4INCx0YPRgtC+0L3QsCwg0LfQsCDQtNCwINC40LfQv9GA0LDRgtC40Lwg0L7RgNC40LPQuNC90LDQu9C90LjRjyDRhNCw0LnQuyDQvtGC0L3QvtCy0L4g0LfQsCDQstGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC60LDRgtC+INGH0LjRgdGCIFdvcmQvUERGINC00L7QutGD0LzQtdC90YIuPGJyPjxicj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0icmVwcm9jZXNzKCkiPkFJIGxheW91dCDQvtGC0L3QvtCy0L48L2J1dHRvbj48L2Rpdj4nOwogICAgcmV0dXJuOwogIH0KICBwYWdlLmlubmVySFRNTD1lbHMubWFwKGVsPT57CiAgICBjb25zdCB0eXBlPVN0cmluZyhlbC50eXBlfHwndGV4dCcpLnRvTG93ZXJDYXNlKCk7CiAgICBjb25zdCB4PXBjdChlbC54KSwgeT1wY3QoZWwueSksIHc9cGN0KGVsLnd8fDEpLCBoPXBjdChlbC5ofHwxKTsKICAgIGlmKHR5cGU9PT0nbGluZScpewogICAgICBjb25zdCBzdz1NYXRoLm1heCgxLG4oZWwuc3Ryb2tlX3dpZHRoLDEpKTsKICAgICAgY29uc3QgZHg9bihlbC53LDApLCBkeT1uKGVsLmgsMCk7CiAgICAgIGNvbnN0IGxlbj1NYXRoLnNxcnQoZHgqZHgrZHkqZHkpOwogICAgICBjb25zdCBkZWc9TWF0aC5hdGFuMihkeSxkeCkqMTgwL01hdGguUEk7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0ibG4iIHN0eWxlPSJsZWZ0OicreCsnO3RvcDonK3krJzt3aWR0aDonK3BjdChsZW4pKyc7aGVpZ2h0Oicrc3crJ3B4O3RyYW5zZm9ybTpyb3RhdGUoJytkZWcrJ2RlZykiPjwvZGl2Pic7CiAgICB9CiAgICBpZih0eXBlPT09J3JlY3QnfHx0eXBlPT09J2JveCcpcmV0dXJuICc8ZGl2IGNsYXNzPSJyZWN0IiBzdHlsZT0ibGVmdDonK3grJzt0b3A6Jyt5Kyc7d2lkdGg6Jyt3Kyc7aGVpZ2h0OicraCsnIj48L2Rpdj4nOwogICAgY29uc3QgZnM9TWF0aC5tYXgoNixNYXRoLm1pbigyOCxuKGVsLmZvbnRfc2l6ZSwxMCkpKTsKICAgIGNvbnN0IGZ3PWVsLmJvbGQ/JzcwMCc6JzQwMCc7CiAgICBjb25zdCBhbD1lbC5hbGlnbnx8J2xlZnQnOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJ0eHQiIHN0eWxlPSJsZWZ0OicreCsnO3RvcDonK3krJzt3aWR0aDonK3crJztoZWlnaHQ6JytoKyc7Zm9udC1zaXplOicrZnMrJ3B4O2ZvbnQtd2VpZ2h0OicrZncrJzt0ZXh0LWFsaWduOicrZXNjKGFsKSsnIj4nK2VzYyhlbC50ZXh0fHwnJykrJzwvZGl2Pic7CiAgfSkuam9pbignJyk7Cn0KYXN5bmMgZnVuY3Rpb24gcmVwcm9jZXNzKCl7CiAgY29uc3QgcGFnZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZScpOwogIHBhZ2Uub3V0ZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSIgaWQ9InBhZ2UiPjxiPkFJINC+0LHRgNCw0LHQvtGC0LLQsCDQtNC+0LrRg9C80LXQvdGC0LAuLi48L2I+PGJyPtCY0LfQv9GA0LDRidCw0LzQtSDQvtGA0LjQs9C40L3QsNC70L3QuNGPINGE0LDQudC7INC/0L7QstGC0L7RgNC90L4g0Lgg0LjRgdC60LDQvNC1IGxheW91dCDRgSDRgtC10LrRgdGC0L7QstC1LCDQu9C40L3QuNC4INC4INGC0LDQsdC70LjRhtC4LjwvZGl2Pic7CiAgdHJ5ewogICAgY29uc3Qgcj1hd2FpdCBhZignYWlfc2Nhbl9yZXByb2Nlc3MnLCdQT1NUJyx7aWQ6c2NhbklkfSk7CiAgICBkYXRhPXIuZXh0cmFjdGVkfHx7fTsKICAgIGlmKHNjYW4pe3NjYW4uZGlnaXRhbF9wZGZfcGF0aD1yLmRpZ2l0YWxfcGRmX3BhdGh8fCcnO3NjYW4uc3RhdHVzPXIuZGlnaXRhbF9wZGZfcGF0aD8ncmVjb2duaXplZCc6J2xheW91dF9taXNzaW5nJzt9CiAgICByZW5kZXJMaW5rcygpOyByZW5kZXJNZXRhKCk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZScpLm91dGVySFRNTD0nPHNlY3Rpb24gY2xhc3M9InBhZ2UiIGlkPSJwYWdlIj48L3NlY3Rpb24+JzsKICAgIHJlbmRlckxheW91dCgpOwogIH1jYXRjaChlKXsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlJykub3V0ZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSIgaWQ9InBhZ2UiPjxiPtCT0YDQtdGI0LrQsCDQv9GA0LggQUkgbGF5b3V0LjwvYj48YnI+Jytlc2MoZS5tZXNzYWdlKSsnPGJyPjxicj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0icmVwcm9jZXNzKCkiPtCe0L/QuNGC0LDQuSDQv9Cw0Lo8L2J1dHRvbj48L2Rpdj4nOwogIH0KfQphc3luYyBmdW5jdGlvbiBpbml0KCl7CiAgdHJ5ewogICAgY29uc3Qgcm93cz1hd2FpdCBhZignYWlfc2NhbnMnKTsKICAgIHNjYW49cm93cy5maW5kKHg9PlN0cmluZyh4LmlkKT09PVN0cmluZyhzY2FuSWQpKTsKICAgIGlmKCFzY2FuKXRocm93IG5ldyBFcnJvcign0JTQvtC60YPQvNC10L3RgtGK0YIg0L3QtSDQtSDQvdCw0LzQtdGA0LXQvScpOwogICAgdHJ5e2RhdGE9SlNPTi5wYXJzZShzY2FuLmV4dHJhY3RlZHx8J3t9Jyl8fHt9O31jYXRjaChlKXtkYXRhPXt9O30KICAgIHJlbmRlckxpbmtzKCk7IHJlbmRlck1ldGEoKTsgcmVuZGVyTGF5b3V0KCk7CiAgfWNhdGNoKGUpewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21ldGEnKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImhpbnQiPtCT0YDQtdGI0LrQsDogJytlc2MoZS5tZXNzYWdlKSsnPC9kaXY+JzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlJykub3V0ZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSIgaWQ9InBhZ2UiPtCT0YDQtdGI0LrQsDogJytlc2MoZS5tZXNzYWdlKSsnPC9kaXY+JzsKICB9Cn0KaW5pdCgpOwo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==', 'ai-upload.html' => 'PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEiPgo8dGl0bGU+QUkgc2NhbiB1cGxvYWQ8L3RpdGxlPgo8c3R5bGU+Cjpyb290ey0tYmc6I2Y0ZjVmYjstLXN1cjojZmZmOy0tdHg6IzE3MTcyYTstLXR4MjojNWY2MDc4Oy0tYnI6I2U0ZTVlZjstLWFjYzojNmM2M2ZmOy0tZ3JuOiMxNmEzNGE7LS1yZWQ6I2VmNDQ0NH0KKntib3gtc2l6aW5nOmJvcmRlci1ib3h9Ym9keXttYXJnaW46MDttaW4taGVpZ2h0OjEwMHZoO2JhY2tncm91bmQ6dmFyKC0tYmcpO2ZvbnQtZmFtaWx5OkFyaWFsLHNhbnMtc2VyaWY7Y29sb3I6dmFyKC0tdHgpO3BhZGRpbmc6MThweH0KLmNhcmR7bWF4LXdpZHRoOjUyMHB4O21hcmdpbjowIGF1dG87YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnIpO2JvcmRlci1yYWRpdXM6MThweDtwYWRkaW5nOjIycHg7Ym94LXNoYWRvdzowIDEwcHggMzJweCByZ2JhKDMwLDMwLDYwLC4wOCl9Cmgxe2ZvbnQtc2l6ZToyMnB4O21hcmdpbjowIDAgNnB4fS5zdWJ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdHgyKTtsaW5lLWhlaWdodDoxLjU7bWFyZ2luLWJvdHRvbToxOHB4fQpsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDdlbTtjb2xvcjp2YXIoLS10eDIpO2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW46MTRweCAwIDZweH0KaW5wdXQsc2VsZWN0LHRleHRhcmVhe3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icik7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTJweDtmb250LXNpemU6MTVweDtiYWNrZ3JvdW5kOiNmYWZiZmY7Y29sb3I6dmFyKC0tdHgpfQppbnB1dFt0eXBlPWZpbGVde3BhZGRpbmc6MTRweDtiYWNrZ3JvdW5kOiNmZmZ9CmJ1dHRvbnt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MTJweDtiYWNrZ3JvdW5kOnZhcigtLWFjYyk7Y29sb3I6I2ZmZjtwYWRkaW5nOjE0cHggMTZweDttYXJnaW4tdG9wOjE4cHg7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwfQouZ2hvc3R7YmFja2dyb3VuZDojZWVmMGZmO2NvbG9yOiMzNjMwOGY7bWFyZ2luLXRvcDoxMHB4fQoubXNne2Rpc3BsYXk6bm9uZTttYXJnaW4tdG9wOjE0cHg7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTJweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjU1fS5va3tkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6I2VjZmRmNTtjb2xvcjojMDQ3ODU3fS5iYWR7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOiNmZWYyZjI7Y29sb3I6I2I5MWMxY30KLm5vdGV7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKTtsaW5lLWhlaWdodDoxLjU7bWFyZ2luLXRvcDo4cHh9Ci5maWVsZHN7bWFyZ2luLXRvcDoxNHB4O2Rpc3BsYXk6Z3JpZDtnYXA6OHB4fS5maWVsZHtiYWNrZ3JvdW5kOiNmYWZiZmY7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTBweH0ua3tmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDIpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0udntmb250LXNpemU6MTRweDttYXJnaW4tdG9wOjNweDtmb250LXdlaWdodDo3MDB9Ci5zY2FubmVye2Rpc3BsYXk6bm9uZTttYXJnaW46MTJweCAwO2JvcmRlci1yYWRpdXM6MTZweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDojMTExO3Bvc2l0aW9uOnJlbGF0aXZlfQp2aWRlb3t3aWR0aDoxMDAlO2Rpc3BsYXk6YmxvY2t9Ci5mcmFtZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjclO3JpZ2h0OjclO3RvcDoxMCU7Ym90dG9tOjEwJTtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjk1KTtib3gtc2hhZG93OjAgMCAwIDk5OXB4IHJnYmEoMCwwLDAsLjMyKTtib3JkZXItcmFkaXVzOjhweH0KLmZyYW1lOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjEwcHg7Ym9yZGVyOjFweCBkYXNoZWQgcmdiYSgyNTUsMjU1LDI1NSwuNyk7Ym9yZGVyLXJhZGl1czo2cHh9Ci5zY2FuYmFye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6OSU7cmlnaHQ6OSU7dG9wOjUwJTtoZWlnaHQ6MnB4O2JhY2tncm91bmQ6IzIyYzU1ZTtib3gtc2hhZG93OjAgMCAxNnB4ICMyMmM1NWV9Ci5jYXB7ZGlzcGxheTpub25lO21hcmdpbi10b3A6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyKTtib3JkZXItcmFkaXVzOjEycHg7bWF4LXdpZHRoOjEwMCV9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9ImNhcmQiPgogIDxoMT5BSSBzY2FuPC9oMT4KICA8ZGl2IGNsYXNzPSJzdWIiPtCa0LDRh9C4INGB0L3QuNC80LrQsCDQuNC70LggUERGINC+0YIg0YLQtdC70LXRhNC+0L3QsC4g0JTQvtC60YPQvNC10L3RgtGK0YIg0YnQtSDRgdC1INC/0L7Rj9Cy0Lgg0LIgSHViIOKGkiBBSSDRgdC60LDQvdC40YDQsNC90LUuPC9kaXY+CiAgPGxhYmVsPtCi0LjQvyDQtNC+0LrRg9C80LXQvdGCPC9sYWJlbD4KICA8c2VsZWN0IGlkPSJkb2NfdHlwZSI+CiAgICA8b3B0aW9uIHZhbHVlPSJpbnZvaWNlIj7QpNCw0LrRgtGD0YDQsDwvb3B0aW9uPgogICAgPG9wdGlvbiB2YWx1ZT0icmVjZWlwdCI+0JrQsNGB0L7QsiDQsdC+0L08L29wdGlvbj4KICAgIDxvcHRpb24gdmFsdWU9Im9mZmVyIj7QntGE0LXRgNGC0LA8L29wdGlvbj4KICAgIDxvcHRpb24gdmFsdWU9ImNvbnRyYWN0Ij7QlNC+0LPQvtCy0L7RgDwvb3B0aW9uPgogIDwvc2VsZWN0PgogIDxidXR0b24gY2xhc3M9Imdob3N0IiBvbmNsaWNrPSJzdGFydENhbWVyYSgpIj7QntGC0LLQvtGA0Lgg0LrQsNC80LXRgNCwINC4INC/0L7QtNGA0LDQstC90Lgg0LTQvtC60YPQvNC10L3RgtCwPC9idXR0b24+CiAgPGRpdiBjbGFzcz0ic2Nhbm5lciIgaWQ9InNjYW5uZXIiPgogICAgPHZpZGVvIGlkPSJ2aWRlbyIgcGxheXNpbmxpbmUgYXV0b3BsYXkgbXV0ZWQ+PC92aWRlbz4KICAgIDxkaXYgY2xhc3M9ImZyYW1lIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNjYW5iYXIiPjwvZGl2PgogIDwvZGl2PgogIDxidXR0b24gY2xhc3M9Imdob3N0IiBpZD0iY2FwQnRuIiBzdHlsZT0iZGlzcGxheTpub25lIiBvbmNsaWNrPSJjYXB0dXJlUGhvdG8oKSI+0KHQvdC40LzQsNC5INC00L7QutGD0LzQtdC90YLQsDwvYnV0dG9uPgogIDxjYW52YXMgaWQ9ImNhbnZhcyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9jYW52YXM+CiAgPGltZyBpZD0iY2FwUHJldmlldyIgY2xhc3M9ImNhcCIgYWx0PSIiPgogIDxsYWJlbD7QpNCw0LnQuzwvbGFiZWw+CiAgPGlucHV0IGlkPSJmaWxlIiB0eXBlPSJmaWxlIiBhY2NlcHQ9ImltYWdlLyosLnBkZixhcHBsaWNhdGlvbi9wZGYiIGNhcHR1cmU9ImVudmlyb25tZW50Ij4KICA8ZGl2IGNsYXNzPSJub3RlIj7Qn9C+0YHRgtCw0LLQuCDRhtC10LvQuNGPINC00L7QutGD0LzQtdC90YIg0LIg0YDQsNC80LrQsNGC0LAuIEh1YiDQvdGP0LzQsCDQtNCwINGB0LvQvtC20Lgg0YHQvdC40LzQutCw0YLQsCDQsiBQREY7IEFJINGJ0LUg0LLRitC30YHRgtCw0L3QvtCy0LggbGF5b3V0LdCwINC60LDRgtC+INGH0LjRgdGCINC00L7QutGD0LzQtdC90YIuPC9kaXY+CiAgPGxhYmVsPtCR0LXQu9C10LbQutCwIC8g0YLQtdC60YHRgiDQv9C+INC40LfQsdC+0YA8L2xhYmVsPgogIDx0ZXh0YXJlYSBpZD0icmF3X3RleHQiIHJvd3M9IjQiIHBsYWNlaG9sZGVyPSLQnNC+0LbQtSDQtNCwINC00L7QsdCw0LLQuNGIINC60LvQuNC10L3Rgiwg0L3QvtC80LXRgCDQuNC70Lgg0LTRgNGD0LPQsCDQsdC10LvQtdC20LrQsC4uLiI+PC90ZXh0YXJlYT4KICA8YnV0dG9uIG9uY2xpY2s9InVwbG9hZCgpIj7QmtCw0YfQuCDQuCDRgNCw0LfQv9C+0LfQvdCw0Lk8L2J1dHRvbj4KICA8ZGl2IGlkPSJtc2ciIGNsYXNzPSJtc2ciPjwvZGl2Pgo8L2Rpdj4KPHNjcmlwdD4KY29uc3QgcXM9bmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpOwpjb25zdCB0b2tlbj1xcy5nZXQoJ3Rva2VuJyl8fCcnOwpjb25zdCBBUEk9J2FwaS5waHA/YWN0aW9uPWFpX21vYmlsZV91cGxvYWQmdG9rZW49JytlbmNvZGVVUklDb21wb25lbnQodG9rZW4pOwpsZXQgc3RyZWFtPW51bGw7CmxldCBjYXB0dXJlZEJsb2I9bnVsbDsKZnVuY3Rpb24gc2hvdyhjbHMsaHRtbCl7Y29uc3QgbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXNnJyk7bS5jbGFzc05hbWU9J21zZyAnK2NsczttLmlubmVySFRNTD1odG1sO30KZnVuY3Rpb24gZXNjKHMpe3JldHVybiBTdHJpbmcocz09bnVsbD8nJzpzKS5yZXBsYWNlKC9bJjw+IiddL2csYz0+KHsnJic6JyZhbXA7JywnPCc6JyZsdDsnLCc+JzonJmd0OycsJyInOicmcXVvdDsnLCInIjonJiMzOTsnfVtjXSkpO30KYXN5bmMgZnVuY3Rpb24gc3RhcnRDYW1lcmEoKXsKICB0cnl7CiAgICBjYXB0dXJlZEJsb2I9bnVsbDsKICAgIGlmKHN0cmVhbSlzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0PT50LnN0b3AoKSk7CiAgICBzdHJlYW09YXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe3ZpZGVvOntmYWNpbmdNb2RlOntpZGVhbDonZW52aXJvbm1lbnQnfSx3aWR0aDp7aWRlYWw6MTYwMH0saGVpZ2h0OntpZGVhbDoyMjAwfX0sYXVkaW86ZmFsc2V9KTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWRlbycpLnNyY09iamVjdD1zdHJlYW07CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Nhbm5lcicpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXBCdG4nKS5zdHlsZS5kaXNwbGF5PSdibG9jayc7CiAgICBzaG93KCdvaycsJ9Cf0L7RgdGC0LDQstC4INC00L7QutGD0LzQtdC90YLQsCDQsiDRgNCw0LzQutCw0YLQsCDQuCDRgdC90LjQvNCw0LkuINCU0YDRitC2INGC0LXQu9C10YTQvtC90LAg0L/RgNCw0LLQviwg0LHQtdC3INGB0Y/QvdC60LAuJyk7CiAgfWNhdGNoKGUpewogICAgc2hvdygnYmFkJywn0JrQsNC80LXRgNCw0YLQsCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lg6ICcrZXNjKGUubWVzc2FnZSkrJy4g0JzQvtC20LXRiCDQtNCwINC60LDRh9C40Ygg0YHQvdC40LzQutCwINC+0YIg0YTQsNC50LvQsC4nKTsKICB9Cn0KZnVuY3Rpb24gY2FwdHVyZVBob3RvKCl7CiAgY29uc3Qgdj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlkZW8nKTsKICBpZighdi52aWRlb1dpZHRoKXtzaG93KCdiYWQnLCfQmtCw0LzQtdGA0LDRgtCwINC+0YnQtSDQvdC1INC1INCz0L7RgtC+0LLQsC4nKTtyZXR1cm47fQogIGNvbnN0IGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhcycpOwogIGMud2lkdGg9di52aWRlb1dpZHRoOyBjLmhlaWdodD12LnZpZGVvSGVpZ2h0OwogIGNvbnN0IGN0eD1jLmdldENvbnRleHQoJzJkJyk7CiAgY3R4LmRyYXdJbWFnZSh2LDAsMCxjLndpZHRoLGMuaGVpZ2h0KTsKICBjLnRvQmxvYihmdW5jdGlvbihibG9iKXsKICAgIGNhcHR1cmVkQmxvYj1ibG9iOwogICAgY29uc3QgaW1nPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXBQcmV2aWV3Jyk7CiAgICBpbWcuc3JjPVVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICBpbWcuc3R5bGUuZGlzcGxheT0nYmxvY2snOwogICAgc2hvdygnb2snLCfQodC90LjQvNC60LDRgtCwINC1INCz0L7RgtC+0LLQsC4g0J3QsNGC0LjRgdC90Lgg4oCe0JrQsNGH0Lgg0Lgg0YDQsNC30L/QvtC30L3QsNC54oCcLicpOwogICAgaWYoc3RyZWFtKXN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHQ9PnQuc3RvcCgpKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzY2FubmVyJykuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FwQnRuJykuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgfSwnaW1hZ2UvanBlZycsMC45NCk7Cn0KYXN5bmMgZnVuY3Rpb24gdXBsb2FkKCl7CiAgbGV0IGY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUnKS5maWxlc1swXTsKICBpZighdG9rZW4pe3Nob3coJ2JhZCcsJ9Cb0LjQv9GB0LLQsCBRUiB0b2tlbi4g0J7RgtCy0L7RgNC4INC70LjQvdC60LAg0L7RgiBIdWIg0L/QsNC90LXQu9CwLicpO3JldHVybjt9CiAgaWYoIWYgJiYgIWNhcHR1cmVkQmxvYil7c2hvdygnYmFkJywn0JjQt9Cx0LXRgNC4INGE0LDQudC7INC40LvQuCDRgdC90LjQvNCw0Lkg0LTQvtC60YPQvNC10L3RgtCwLicpO3JldHVybjt9CiAgY29uc3QgZmQ9bmV3IEZvcm1EYXRhKCk7CiAgZmQuYXBwZW5kKCdmaWxlJyxjYXB0dXJlZEJsb2IgfHwgZixjYXB0dXJlZEJsb2I/J2NhbWVyYS1kb2N1bWVudC5qcGcnOmYubmFtZSk7CiAgZmQuYXBwZW5kKCdkb2NfdHlwZScsZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY190eXBlJykudmFsdWUpOwogIGZkLmFwcGVuZCgncmF3X3RleHQnLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYXdfdGV4dCcpLnZhbHVlKTsKICBzaG93KCdvaycsJ9Ca0LDRh9Cy0LDQvdC1INC4INGA0LDQt9C/0L7Qt9C90LDQstCw0L3QtS4uLicpOwogIHRyeXsKICAgIGNvbnN0IHI9YXdhaXQgZmV0Y2goQVBJLHttZXRob2Q6J1BPU1QnLGJvZHk6ZmR9KTsKICAgIGNvbnN0IGo9YXdhaXQgci5qc29uKCk7CiAgICBpZighai5vayl7c2hvdygnYmFkJywn0JPRgNC10YjQutCwOiAnK2VzYyhqLmVycm9yfHwn0J3QtdGD0YHQv9C10YjQvdC+INC60LDRh9Cy0LDQvdC1JykpO3JldHVybjt9CiAgICBjb25zdCBkPWouZGF0YXx8e307CiAgICBjb25zdCBleD1kLmV4dHJhY3RlZHx8e307CiAgICBjb25zdCByb3dzPU9iamVjdC5rZXlzKGV4KS5maWx0ZXIoaz0+ayE9PSdsYXlvdXQnICYmIGshPT0nbGluZV9pdGVtcycgJiYgdHlwZW9mIGV4W2tdIT09J29iamVjdCcpLm1hcChrPT4nPGRpdiBjbGFzcz0iZmllbGQiPjxkaXYgY2xhc3M9ImsiPicrZXNjKGspKyc8L2Rpdj48ZGl2IGNsYXNzPSJ2Ij4nK2VzYyhleFtrXSkrJzwvZGl2PjwvZGl2PicpLmpvaW4oJycpOwogICAgY29uc3QgZWRpdG9yPWQuaWQ/J2FpLWRvY3VtZW50Lmh0bWw/aWQ9JytlbmNvZGVVUklDb21wb25lbnQoZC5pZCk6Jyc7CiAgICBjb25zdCBsaW5rcz0oZWRpdG9yPyc8cD48YSBocmVmPSInK2VzYyhlZGl0b3IpKyciIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6dmFyKC0tYWNjKTtmb250LXdlaWdodDo3MDAiPtCe0YLQstC+0YDQuCDQtNC40LPQuNGC0LDQu9C90LjRjyDQtNC+0LrRg9C80LXQvdGCPC9hPjwvcD4nOicnKSsoZC5wZGZfcGF0aD8nPHA+PGEgaHJlZj0iJytlc2MoZC5wZGZfcGF0aCkrJyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjp2YXIoLS10eDIpIj5TY2FuIFBERjwvYT48L3A+JzonJykrKGQuZmlsZV9wYXRoPyc8cD48YSBocmVmPSInK2VzYyhkLmZpbGVfcGF0aCkrJyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjp2YXIoLS10eDIpIj7QntGA0LjQs9C40L3QsNC70LXQvSDRhNCw0LnQuzwvYT48L3A+JzonJyk7CiAgICBzaG93KCdvaycsJ9CT0L7RgtC+0LLQvi4gJytlc2MoZC5tZXNzYWdlfHwn0JTQvtC60YPQvNC10L3RgtGK0YIg0LUg0LrQsNGH0LXQvS4nKStsaW5rcysocm93cz8nPGRpdiBjbGFzcz0iZmllbGRzIj4nK3Jvd3MrJzwvZGl2Pic6JycpKTsKICB9Y2F0Y2goZSl7c2hvdygnYmFkJywn0JPRgNC10YjQutCwOiAnK2VzYyhlLm1lc3NhZ2UpKTt9Cn0KPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=', 'api.php' => 'PD9waHAKaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46IConKTsKaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzOiBHRVQsIFBPU1QsIERFTEVURSwgT1BUSU9OUycpOwpoZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnM6IENvbnRlbnQtVHlwZScpOwppZigkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXT09PSdPUFRJT05TJyl7aHR0cF9yZXNwb25zZV9jb2RlKDIwMCk7ZXhpdDt9CgovLyDilIDilIAgQ09ORklHIChjcmVhdGVkIGJ5IHdfaHViX2luc3RhbGwucGhwIG9uIGZpcnN0IHJ1biDigJQgbmV2ZXIgaGFyZGNvZGVkIGhlcmUpIOKUgOKUgAppZighZmlsZV9leGlzdHMoX19ESVJfXy4nL2NvbmZpZy5waHAnKSl7CiAgICBodHRwX3Jlc3BvbnNlX2NvZGUoMjAwKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoWydvayc9PmZhbHNlLCdlcnJvcic9Pidub19jb25maWcnLAogICAgICAgICdtZXNzYWdlJz0+J9CR0LDQt9Cw0YLQsCDQtNCw0L3QvdC4INC90LUg0LUg0LrQvtC90YTQuNCz0YPRgNC40YDQsNC90LAuINCe0YLQstC+0YDQuCB3X2h1Yl9pbnN0YWxsLnBocCwg0LfQsCDQtNCwINC40L3RgdGC0LDQu9C40YDQsNGIINGF0YrQsdCwINC90LAg0YLQvtC30Lgg0YHRitGA0LLRitGALiddLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgZXhpdDsKfQpyZXF1aXJlIF9fRElSX18uJy9jb25maWcucGhwJzsKaWYoIWRlZmluZWQoJ1RHX1RPS0VOJykpIGRlZmluZSgnVEdfVE9LRU4nLCcnKTsKaWYoIWRlZmluZWQoJ1RHX0NIQVRfSUQnKSkgZGVmaW5lKCdUR19DSEFUX0lEJywnJyk7CmlmKCFkZWZpbmVkKCdPUEVOQUlfQVBJX0tFWScpKSBkZWZpbmUoJ09QRU5BSV9BUElfS0VZJywnJyk7CmlmKCFkZWZpbmVkKCdPUEVOQUlfTU9ERUwnKSkgZGVmaW5lKCdPUEVOQUlfTU9ERUwnLCdncHQtNS41Jyk7CgovLyDilIDilIAgU0FGRVRZIE5FVDogbmV2ZXIgbGV0IGEgUEhQIGVycm9yL2V4Y2VwdGlvbiBsZWFrIHJhdyBIVE1MIHRvIHRoZSBmcm9udGVuZCDilIDilIAKc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKGZ1bmN0aW9uKCRlKXsKICAgIGlmKG9iX2dldF9sZW5ndGgoKSkgb2JfY2xlYW4oKTsKICAgIGh0dHBfcmVzcG9uc2VfY29kZSg1MDApOwogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoWydvayc9PmZhbHNlLCdlcnJvcic9PifQodGK0YDQstGK0YDQvdCwINCz0YDQtdGI0LrQsDogJy4kZS0+Z2V0TWVzc2FnZSgpXSxKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgIGV4aXQ7Cn0pOwpzZXRfZXJyb3JfaGFuZGxlcihmdW5jdGlvbigkc2V2ZXJpdHksJG1lc3NhZ2UsJGZpbGUsJGxpbmUpewogICAgaWYoIShlcnJvcl9yZXBvcnRpbmcoKSAmICRzZXZlcml0eSkpIHJldHVybiBmYWxzZTsKICAgIHRocm93IG5ldyBFcnJvckV4Y2VwdGlvbigkbWVzc2FnZSwwLCRzZXZlcml0eSwkZmlsZSwkbGluZSk7Cn0pOwoKZnVuY3Rpb24gdGcoJG1zZywgJGNoYXRJZD1udWxsKXsKICAgICRjaGF0ID0gJGNoYXRJZCA/OiBUR19DSEFUX0lEOwogICAgaWYoZW1wdHkoJGNoYXQpKSByZXR1cm47CiAgICB0cnkgewogICAgICAgICR1cmw9J2h0dHBzOi8vYXBpLnRlbGVncmFtLm9yZy9ib3QnLlRHX1RPS0VOLicvc2VuZE1lc3NhZ2UnOwogICAgICAgICRwYXlsb2FkPWpzb25fZW5jb2RlKFsnY2hhdF9pZCc9PiRjaGF0LCd0ZXh0Jz0+JG1zZywncGFyc2VfbW9kZSc9PidIVE1MJ10pOwogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpewogICAgICAgICAgICAkY2g9Y3VybF9pbml0KCR1cmwpOwogICAgICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsWwogICAgICAgICAgICAgICAgQ1VSTE9QVF9QT1NUPT50cnVlLAogICAgICAgICAgICAgICAgQ1VSTE9QVF9QT1NURklFTERTPT4kcGF5bG9hZCwKICAgICAgICAgICAgICAgIENVUkxPUFRfSFRUUEhFQURFUj0+WydDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nXSwKICAgICAgICAgICAgICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVI9PnRydWUsCiAgICAgICAgICAgICAgICBDVVJMT1BUX1RJTUVPVVQ9PjUsCiAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllQRUVSPT5mYWxzZSwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIGN1cmxfZXhlYygkY2gpOwogICAgICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG9wdHM9WydodHRwJz0+WydtZXRob2QnPT4nUE9TVCcsJ2hlYWRlcic9PidDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgJ2NvbnRlbnQnPT4kcGF5bG9hZCwndGltZW91dCc9PjMsJ2lnbm9yZV9lcnJvcnMnPT50cnVlXV07CiAgICAgICAgICAgIEBmaWxlX2dldF9jb250ZW50cygkdXJsLGZhbHNlLHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgkb3B0cykpOwogICAgICAgIH0KICAgIH0gY2F0Y2goRXhjZXB0aW9uICRlKXsgLyogc2lsZW50IGZhaWwgKi8gfQp9CgovLyDilIDilIAgREIg4pSA4pSACmZ1bmN0aW9uIGRiKCl7CiAgICBzdGF0aWMgJHA7CiAgICBpZighJHApewogICAgICAgIHRyeXsKICAgICAgICAgICAgJHA9bmV3IFBETygnbXlzcWw6aG9zdD0nLkRCX0hPU1QuJztkYm5hbWU9Jy5EQl9OQU1FLic7Y2hhcnNldD11dGY4bWI0JywKICAgICAgICAgICAgICAgIERCX1VTRVIsREJfUEFTUyxbUERPOjpBVFRSX0VSUk1PREU9PlBETzo6RVJSTU9ERV9FWENFUFRJT04sCiAgICAgICAgICAgICAgICBQRE86OkFUVFJfREVGQVVMVF9GRVRDSF9NT0RFPT5QRE86OkZFVENIX0FTU09DXSk7CiAgICAgICAgfWNhdGNoKFBET0V4Y2VwdGlvbiAkZSl7CiAgICAgICAgICAgIGh0dHBfcmVzcG9uc2VfY29kZSg1MDApOwogICAgICAgICAgICBkaWUoanNvbl9lbmNvZGUoWydvayc9PmZhbHNlLCdlcnJvcic9PidEQjogJy4kZS0+Z2V0TWVzc2FnZSgpXSkpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkcDsKfQpmdW5jdGlvbiBvaygkZCl7ZWNobyBqc29uX2VuY29kZShbJ29rJz0+dHJ1ZSwnZGF0YSc9PiRkXSxKU09OX1VORVNDQVBFRF9VTklDT0RFKTtleGl0O30KZnVuY3Rpb24gZXJyKCRtKXtodHRwX3Jlc3BvbnNlX2NvZGUoNDAwKTtlY2hvIGpzb25fZW5jb2RlKFsnb2snPT5mYWxzZSwnZXJyb3InPT4kbV0sSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7ZXhpdDt9CmZ1bmN0aW9uIGJvZHkoKXtyZXR1cm4ganNvbl9kZWNvZGUoZmlsZV9nZXRfY29udGVudHMoJ3BocDovL2lucHV0JyksdHJ1ZSk/P1tdO30KZnVuY3Rpb24gaHViX3Nlc3Npb25faXNfYWRtaW4oKTogYm9vbCB7CiAgICByZXR1cm4gIWVtcHR5KCRfU0VTU0lPTlsnaHViX2lzX2FkbWluJ10pOwp9CmZ1bmN0aW9uIGh1Yl9zZXNzaW9uX3VzZXJfaWQoKTogaW50IHsKICAgIHJldHVybiAoaW50KSgkX1NFU1NJT05bJ2h1Yl91c2VyX2lkJ10/PzApOwp9CmZ1bmN0aW9uIHJlcXVpcmVIdWJBZG1pbk9yU2VjcmV0KCRwZG8sICRzZWNyZXQpOiB2b2lkIHsKICAgIGlmIChodWJfc2Vzc2lvbl9pc19hZG1pbigpKSByZXR1cm47CiAgICBjaGVja0xpY2Vuc2UoJHBkbywgJHNlY3JldCk7Cn0KZnVuY3Rpb24gY2xpZW50SXAoKTogc3RyaW5nIHsKICAgIGZvcmVhY2goWydIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCdIVFRQX1hfUkVBTF9JUCcsJ0hUVFBfWF9GT1JXQVJERURfRk9SJywnUkVNT1RFX0FERFInXSBhcyAkayl7CiAgICAgICAgJHY9JF9TRVJWRVJbJGtdPz8nJzsKICAgICAgICBpZighJHYpIGNvbnRpbnVlOwogICAgICAgICRpcD10cmltKGV4cGxvZGUoJywnLCAkdilbMF0pOwogICAgICAgIGlmKGZpbHRlcl92YXIoJGlwLCBGSUxURVJfVkFMSURBVEVfSVApKSByZXR1cm4gJGlwOwogICAgfQogICAgcmV0dXJuICcnOwp9CmZ1bmN0aW9uIGh1Yl9zY2hlbWFfZXh0cmEoUERPICRwZG8pOiB2b2lkIHsKICAgICRwZG8tPmV4ZWMoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGF1ZGl0X2xvZyAoCiAgICAgICAgaWQgSU5UIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLAogICAgICAgIHVzZXJfaWQgSU5UIE5VTEwsCiAgICAgICAgdXNlcl9uYW1lIFZBUkNIQVIoMTIwKSwKICAgICAgICBhY3Rpb24gVkFSQ0hBUig4MCkgTk9UIE5VTEwsCiAgICAgICAgdGFyZ2V0X3R5cGUgVkFSQ0hBUig4MCksCiAgICAgICAgdGFyZ2V0X2lkIFZBUkNIQVIoODApLAogICAgICAgIGRldGFpbHMgVEVYVCwKICAgICAgICBpcF9hZGRyZXNzIFZBUkNIQVIoNjApLAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9dXRmOG1iNCIpOwogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYWlfc2NhbnMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLAogICAgICAgIGRvY190eXBlIFZBUkNIQVIoNDApIERFRkFVTFQgJ2ludm9pY2UnLAogICAgICAgIGNsaWVudCBWQVJDSEFSKDI1NSksCiAgICAgICAgZmlsZV9uYW1lIFZBUkNIQVIoMjU1KSwKICAgICAgICBmaWxlX3BhdGggVkFSQ0hBUig1MDApLAogICAgICAgIHBkZl9wYXRoIFZBUkNIQVIoNTAwKSwKICAgICAgICBkaWdpdGFsX3BkZl9wYXRoIFZBUkNIQVIoNTAwKSwKICAgICAgICB1cGxvYWRfdG9rZW4gVkFSQ0hBUig4MCksCiAgICAgICAgcmF3X3RleHQgTE9OR1RFWFQsCiAgICAgICAgZXh0cmFjdGVkIExPTkdURVhULAogICAgICAgIGNvbmZpZGVuY2UgREVDSU1BTCg1LDIpIERFRkFVTFQgMCwKICAgICAgICBzdGF0dXMgVkFSQ0hBUigzMCkgREVGQVVMVCAnZHJhZnQnLAogICAgICAgIGNyZWF0ZWRfYnkgVkFSQ0hBUigxMjApLAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9dXRmOG1iNCIpOwogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYWlfc2Nhbl9zZXNzaW9ucyAoCiAgICAgICAgdG9rZW4gVkFSQ0hBUig4MCkgUFJJTUFSWSBLRVksCiAgICAgICAgY3JlYXRlZF9ieSBJTlQgTlVMTCwKICAgICAgICBleHBpcmVzX2F0IERBVEVUSU1FIE5PVCBOVUxMLAogICAgICAgIHVzZWRfYXQgREFURVRJTUUgTlVMTCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQiKTsKICAgICRwZG8tPmV4ZWMoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIG9mZmljZV9zZXR0aW5ncyAoCiAgICAgICAgaWQgSU5UIFBSSU1BUlkgS0VZLAogICAgICAgIG5hbWUgVkFSQ0hBUigxMjApIERFRkFVTFQgJ9Ce0YHQvdC+0LLQtdC9INC+0YTQuNGBJywKICAgICAgICBsYXRpdHVkZSBERUNJTUFMKDEwLDcpIE5VTEwsCiAgICAgICAgbG9uZ2l0dWRlIERFQ0lNQUwoMTAsNykgTlVMTCwKICAgICAgICByYWRpdXNfbSBJTlQgREVGQVVMVCAxMjAsCiAgICAgICAgYWxsb3dlZF9pcHMgVEVYVCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQiKTsKICAgIHRyeSB7ICRwZG8tPmV4ZWMoIklOU0VSVCBJTlRPIG9mZmljZV9zZXR0aW5ncyAoaWQpIFZBTFVFUyAoMSkiKTsgfSBjYXRjaChFeGNlcHRpb24gJGUpIHt9CiAgICBmb3JlYWNoKFsKICAgICAgICAiQUxURVIgVEFCTEUgdXNlcnMgQUREIENPTFVNTiBhY2Nlc3Nfcm9sZSBWQVJDSEFSKDMwKSBERUZBVUxUICdlbXBsb3llZSciLAogICAgICAgICJBTFRFUiBUQUJMRSBwYXNzd29yZHMgQUREIENPTFVNTiB2aXNpYmxlX3RvIFRFWFQiLAogICAgICAgICJBTFRFUiBUQUJMRSBhaV9zY2FucyBBREQgQ09MVU1OIGZpbGVfcGF0aCBWQVJDSEFSKDUwMCkiLAogICAgICAgICJBTFRFUiBUQUJMRSBhaV9zY2FucyBBREQgQ09MVU1OIHBkZl9wYXRoIFZBUkNIQVIoNTAwKSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIGFpX3NjYW5zIEFERCBDT0xVTU4gZGlnaXRhbF9wZGZfcGF0aCBWQVJDSEFSKDUwMCkiLAogICAgICAgICJBTFRFUiBUQUJMRSBhaV9zY2FucyBBREQgQ09MVU1OIHVwbG9hZF90b2tlbiBWQVJDSEFSKDgwKSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gZGlzdGFuY2VfbSBJTlQgTlVMTCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gb2ZmaWNlX3N0YXRlIFZBUkNIQVIoMzApIiwKICAgICAgICAiQUxURVIgVEFCTEUgY2xpZW50X2h1YnMgQUREIENPTFVNTiBsYXN0X3N0YXR1cyBWQVJDSEFSKDQwKSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIGNsaWVudF9odWJzIEFERCBDT0xVTU4gbGFzdF9tZXNzYWdlIFZBUkNIQVIoMjU1KSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIGNsaWVudF9odWJzIEFERCBDT0xVTU4gbGFzdF92ZXJzaW9uIFZBUkNIQVIoNDApIiwKICAgICAgICAiQUxURVIgVEFCTEUgY2xpZW50X2h1YnMgQUREIENPTFVNTiB1cGRhdGVfY2hhbm5lbCBWQVJDSEFSKDQwKSBERUZBVUxUICdzdGFibGUnIiwKICAgIF0gYXMgJHNxbCkgeyB0cnkgeyAkcGRvLT5leGVjKCRzcWwpOyB9IGNhdGNoKEV4Y2VwdGlvbiAkZSkge30gfQp9CmZ1bmN0aW9uIGF1ZGl0KFBETyAkcGRvLCBzdHJpbmcgJGFjdGlvbiwgc3RyaW5nICR0YXJnZXRUeXBlPScnLCBzdHJpbmcgJHRhcmdldElkPScnLCAkZGV0YWlscz1udWxsKTogdm9pZCB7CiAgICB0cnl7CiAgICAgICAgaHViX3NjaGVtYV9leHRyYSgkcGRvKTsKICAgICAgICAkdWlkPSRfU0VTU0lPTlsnaHViX3VzZXJfaWQnXT8/bnVsbDsKICAgICAgICAkdW5hbWU9Jyc7CiAgICAgICAgaWYoJHVpZCl7CiAgICAgICAgICAgICRzdD0kcGRvLT5wcmVwYXJlKCJTRUxFQ1QgbmFtZSBGUk9NIHVzZXJzIFdIRVJFIGlkPT8iKTsKICAgICAgICAgICAgJHN0LT5leGVjdXRlKFskdWlkXSk7CiAgICAgICAgICAgICR1bmFtZT0oc3RyaW5nKSgkc3QtPmZldGNoQ29sdW1uKCk/OicnKTsKICAgICAgICB9CiAgICAgICAgaWYoaXNfYXJyYXkoJGRldGFpbHMpKSAkZGV0YWlscz1qc29uX2VuY29kZSgkZGV0YWlscyxKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBhdWRpdF9sb2cgKHVzZXJfaWQsdXNlcl9uYW1lLGFjdGlvbix0YXJnZXRfdHlwZSx0YXJnZXRfaWQsZGV0YWlscyxpcF9hZGRyZXNzKQogICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/LD8pIiktPmV4ZWN1dGUoWyR1aWQsJHVuYW1lLCRhY3Rpb24sJHRhcmdldFR5cGUsJHRhcmdldElkLChzdHJpbmcpKCRkZXRhaWxzPz8nJyksY2xpZW50SXAoKV0pOwogICAgfWNhdGNoKEV4Y2VwdGlvbiAkZSl7fQp9CmZ1bmN0aW9uIGRpc3RhbmNlTWV0ZXJzKCRsYXQxLCRsb24xLCRsYXQyLCRsb24yKTogP2ludCB7CiAgICBpZighaXNfbnVtZXJpYygkbGF0MSl8fCFpc19udW1lcmljKCRsb24xKXx8IWlzX251bWVyaWMoJGxhdDIpfHwhaXNfbnVtZXJpYygkbG9uMikpIHJldHVybiBudWxsOwogICAgJHI9NjM3MTAwMDsKICAgICRwMT1kZWcycmFkKChmbG9hdCkkbGF0MSk7ICRwMj1kZWcycmFkKChmbG9hdCkkbGF0Mik7CiAgICAkZHA9ZGVnMnJhZCgoZmxvYXQpJGxhdDItKGZsb2F0KSRsYXQxKTsgJGRsPWRlZzJyYWQoKGZsb2F0KSRsb24yLShmbG9hdCkkbG9uMSk7CiAgICAkYT1zaW4oJGRwLzIpKnNpbigkZHAvMikrY29zKCRwMSkqY29zKCRwMikqc2luKCRkbC8yKSpzaW4oJGRsLzIpOwogICAgcmV0dXJuIChpbnQpcm91bmQoJHIqMiphdGFuMihzcXJ0KCRhKSxzcXJ0KDEtJGEpKSk7Cn0KZnVuY3Rpb24gYWlfYmFzaWNfZXh0cmFjdChzdHJpbmcgJHJhdyk6IGFycmF5IHsKICAgICRleD1bXTsKICAgIGlmKHByZWdfbWF0Y2goJy8oPzrRhNCw0LrRgtGD0YDQsHxpbnZvaWNlfNC90L7QvNC10YB84oSWKVxzKls6I+KEli1dP1xzKihbQS1a0JAt0K8wLTlcLVwvXXszLH0pL2l1JywkcmF3LCRtKSkgJGV4WydudW1iZXInXT0kbVsxXTsKICAgIGlmKHByZWdfbWF0Y2goJy8oXGR7MSwyfVtcLlwvLV1cZHsxLDJ9W1wuXC8tXVxkezIsNH0pL3UnLCRyYXcsJG0pKSAkZXhbJ2RhdGUnXT0kbVsxXTsKICAgIGlmKHByZWdfbWF0Y2goJy8oPzrQvtCx0YnQvnx0b3RhbHzRgdGD0LzQsClccypbOlwtXT9ccyooWzAtOVxzXStbXC4sXVswLTldezJ9KS9pdScsJHJhdywkbSkpICRleFsndG90YWwnXT10cmltKCRtWzFdKTsKICAgIGlmKHByZWdfbWF0Y2goJy8oPzrQtdC40Lp8dmF0fGVvcml8YnVsc3RhdClccypbOlwtXT9ccyooW0EtWtCQLdCvMC05XXs2LDE1fSkvaXUnLCRyYXcsJG0pKSAkZXhbJ2VpayddPSRtWzFdOwogICAgaWYocHJlZ19tYXRjaCgnLyg/OtC60LvQuNC10L3RgnzQv9C+0LvRg9GH0LDRgtC10Lt8Y2xpZW50KVxzKls6XC1dP1xzKihbXlxuXHJdezMsMTIwfSkvaXUnLCRyYXcsJG0pKSAkZXhbJ2NsaWVudCddPXRyaW0oJG1bMV0pOwogICAgcmV0dXJuICRleDsKfQpmdW5jdGlvbiBhaV9qc29uX2Zyb21fdGV4dChzdHJpbmcgJHRleHQpOiBhcnJheSB7CiAgICAkdGV4dD10cmltKCR0ZXh0KTsKICAgICR0ZXh0PXByZWdfcmVwbGFjZSgnL15gYGAoPzpqc29uKT9ccyp8XHMqYGBgJC91JywnJywkdGV4dCk7CiAgICAkaj1qc29uX2RlY29kZSgkdGV4dCx0cnVlKTsKICAgIGlmKGlzX2FycmF5KCRqKSkgcmV0dXJuICRqOwogICAgaWYocHJlZ19tYXRjaCgnL1x7LipcfS9zdScsJHRleHQsJG0pKXsKICAgICAgICAkaj1qc29uX2RlY29kZSgkbVswXSx0cnVlKTsKICAgICAgICBpZihpc19hcnJheSgkaikpIHJldHVybiAkajsKICAgIH0KICAgIHJldHVybiBbXTsKfQpmdW5jdGlvbiBhaV9yZXNwb25zZV90ZXh0KGFycmF5ICRqKTogc3RyaW5nIHsKICAgIGlmKGlzc2V0KCRqWydvdXRwdXRfdGV4dCddKSAmJiBpc19zdHJpbmcoJGpbJ291dHB1dF90ZXh0J10pKSByZXR1cm4gJGpbJ291dHB1dF90ZXh0J107CiAgICAkb3V0PScnOwogICAgZm9yZWFjaCgkalsnb3V0cHV0J10/P1tdIGFzICRpdGVtKXsKICAgICAgICBmb3JlYWNoKCRpdGVtWydjb250ZW50J10/P1tdIGFzICRjKXsKICAgICAgICAgICAgaWYoaXNzZXQoJGNbJ3RleHQnXSkpICRvdXQuPSRjWyd0ZXh0J107CiAgICAgICAgICAgIGlmKGlzc2V0KCRjWydvdXRwdXRfdGV4dCddKSkgJG91dC49JGNbJ291dHB1dF90ZXh0J107CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRvdXQ7Cn0KZnVuY3Rpb24gYWlfb3BlbmFpX2V4dHJhY3Qoc3RyaW5nICRwYXRoLCBzdHJpbmcgJG1pbWUsIHN0cmluZyAkZmlsZW5hbWUsIHN0cmluZyAkZG9jVHlwZSwgc3RyaW5nICRtYW51YWxUZXh0PScnKTogYXJyYXkgewogICAgJGtleT1PUEVOQUlfQVBJX0tFWSA/OiBnZXRlbnYoJ09QRU5BSV9BUElfS0VZJyk7CiAgICBpZighJGtleSB8fCAhaXNfZmlsZSgkcGF0aCkpIHJldHVybiBbJ29rJz0+ZmFsc2UsJ2Vycm9yJz0+J25vX29wZW5haV9rZXknXTsKICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKSByZXR1cm4gWydvayc9PmZhbHNlLCdlcnJvcic9PidjdXJsX21pc3NpbmcnXTsKICAgICRiNjQ9YmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkcGF0aCkpOwogICAgJGNvbnRlbnQ9W107CiAgICBpZihzdHJpcG9zKCRtaW1lLCdpbWFnZS8nKT09PTApewogICAgICAgICRjb250ZW50W109Wyd0eXBlJz0+J2lucHV0X2ltYWdlJywnaW1hZ2VfdXJsJz0+J2RhdGE6Jy4kbWltZS4nO2Jhc2U2NCwnLiRiNjQsJ2RldGFpbCc9PidoaWdoJ107CiAgICB9IGVsc2UgewogICAgICAgICRjb250ZW50W109Wyd0eXBlJz0+J2lucHV0X2ZpbGUnLCdmaWxlbmFtZSc9PiRmaWxlbmFtZSwnZmlsZV9kYXRhJz0+J2RhdGE6Jy4kbWltZS4nO2Jhc2U2NCwnLiRiNjQsJ2RldGFpbCc9PidoaWdoJ107CiAgICB9CiAgICAkY29udGVudFtdPVsndHlwZSc9PidpbnB1dF90ZXh0JywndGV4dCc9PiLQn9GA0L7Rh9C10YLQuCDQtNC+0LrRg9C80LXQvdGC0LAg0Lgg0LLRitGA0L3QuCDQodCQ0JzQniBKU09OINCx0LXQtyDQvtCx0Y/RgdC90LXQvdC40Y8uINCd0LUg0LjQt9C/0L7Qu9C30LLQsNC5INC+0LHRiSDRiNCw0LHQu9C+0L0uINCi0YDRj9Cx0LLQsCDQtNCwINCy0YrQt9GB0YLQsNC90L7QstC40Ygg0LrQvtC90LrRgNC10YLQvdC40Y8g0LTQvtC60YPQvNC10L3RgiDQvtGCINGB0L3QuNC80LrQsNGC0LAg0LrQsNGC0L4g0YfQuNGB0YIg0LTQuNCz0LjRgtCw0LvQtdC9INC00L7QutGD0LzQtdC90YIsINCy0YHQtSDQtdC00L3QviDQtSDQvdCw0L/RgNCw0LLQtdC9INCy0YrQsiBXb3JkL0V4Y2VsOiDRgdGK0YnQuNGC0LUg0YHQtdC60YbQuNC4LCDRgtCw0LHQu9C40YbQuCwg0LvQuNC90LjQuCwg0LfQsNCz0LvQsNCy0LjRjyDQuCDQv9GA0LjQsdC70LjQt9C40YLQtdC70L3QuCDQv9C+0LfQuNGG0LjQuCwg0L3QviDQsdC10Lcg0LTQsCDQstCz0YDQsNC20LTQsNGIINGB0L3QuNC80LrQsNGC0LAuINCi0LjQvzogeyRkb2NUeXBlfS4K0JLRitGA0L3QuCDRgtC10LfQuCDQv9C+0LvQtdGC0LA6IG51bWJlciwgZGF0ZSwgZHVlX2RhdGUsIGNsaWVudCwgc3VwcGxpZXIsIHNlbGxlcl9uYW1lLCBzZWxsZXJfYWRkcmVzcywgc2VsbGVyX3Bob25lLCBzZWxsZXJfZW1haWwsIGJ1eWVyX25hbWUsIGJ1eWVyX2FkZHJlc3MsIGVpaywgdmF0X251bWJlciwgdG90YWwsIHN1YnRvdGFsLCBjdXJyZW5jeSwgdmF0X2Ftb3VudCwgaWJhbiwgZGVzY3JpcHRpb24sIGNvbmZpZGVuY2UsIGxpbmVfaXRlbXMuCtCU0L7QsdCw0LLQuCDQt9Cw0LTRitC70LbQuNGC0LXQu9C90L4gbGF5b3V0INC+0LHQtdC60YI6IHtwYWdlX3dpZHRoOjEwMCxwYWdlX2hlaWdodDoxMDAsZWxlbWVudHM6Wy4uLl19LiBlbGVtZW50cyDQtSDQvNCw0YHQuNCyINGBINC80LjQvdC40LzRg9C8IDI1INC10LvQtdC80LXQvdGC0LAsINCw0LrQviDQtNC+0LrRg9C80LXQvdGC0YrRgiDQuNC80LAg0YLQsNCx0LvQuNGG0LAuINCa0L7QvtGA0LTQuNC90LDRgtC40YLQtSDRgdCwINCyINC/0YDQvtGG0LXQvdGC0Lgg0L7RgiBBNCDRgdGC0YDQsNC90LjRhtCw0YLQsDogdGV4dCB7dHlwZTondGV4dCcseCx5LHcsaCx0ZXh0LGZvbnRfc2l6ZSxib2xkLGFsaWdufSwgbGluZSB7dHlwZTonbGluZScseCx5LHcsaH0sIHJlY3Qge3R5cGU6J3JlY3QnLHgseSx3LGh9LiB5INC1INC+0YLQs9C+0YDQtSDQvdCw0LTQvtC70YMuINCX0LAg0YLQsNCx0LvQuNGG0Lgg0LLRitGA0L3QuCDQu9C40L3QuNC4L9C/0YDQsNCy0L7RitCz0YrQu9C90LjRhtC4INC/0LvRjtGBINGC0LXQutGB0YLQvtCy0LXRgtC1INCyINC60LvQtdGC0LrQuNGC0LUuINCQ0LrQviDQvdC1INGB0Lgg0YHQuNCz0YPRgNC10L0sINC/0LDQuiDQstGK0YDQvdC4INC90LDQuS3QsdC70LjQt9C60LDRgtCwINGH0LjRgdGC0LAg0YDQtdC60L7QvdGB0YLRgNGD0LrRhtC40Y8uINCd0LjQutC+0LPQsCDQvdC1INC/0YDQvtC/0YPRgdC60LDQuSBsYXlvdXQuINCU0L7Qv9GK0LvQvdC40YLQtdC70LXQvSDRgtC10LrRgdGCOiAiLiRtYW51YWxUZXh0XTsKICAgICRwYXlsb2FkPVsKICAgICAgICAnbW9kZWwnPT5PUEVOQUlfTU9ERUwgPzogJ2dwdC01LjUnLAogICAgICAgICdpbnB1dCc9PltbJ3JvbGUnPT4ndXNlcicsJ2NvbnRlbnQnPT4kY29udGVudF1dLAogICAgXTsKICAgICRjaD1jdXJsX2luaXQoJ2h0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvcmVzcG9uc2VzJyk7CiAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsWwogICAgICAgIENVUkxPUFRfUE9TVD0+dHJ1ZSwKICAgICAgICBDVVJMT1BUX0hUVFBIRUFERVI9PlsnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJywnQXV0aG9yaXphdGlvbjogQmVhcmVyICcuJGtleV0sCiAgICAgICAgQ1VSTE9QVF9QT1NURklFTERTPT5qc29uX2VuY29kZSgkcGF5bG9hZCxKU09OX1VORVNDQVBFRF9VTklDT0RFKSwKICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSPT50cnVlLAogICAgICAgIENVUkxPUFRfVElNRU9VVD0+NjAsCiAgICBdKTsKICAgICRyZXNwPWN1cmxfZXhlYygkY2gpOwogICAgJGVycj1jdXJsX2Vycm9yKCRjaCk7CiAgICAkY29kZT0oaW50KWN1cmxfZ2V0aW5mbygkY2gsQ1VSTElORk9fSFRUUF9DT0RFKTsKICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgIGlmKCRyZXNwPT09ZmFsc2UgfHwgJGNvZGU+PTQwMCkgcmV0dXJuIFsnb2snPT5mYWxzZSwnZXJyb3InPT4kZXJyID86ICgnb3BlbmFpX2h0dHBfJy4kY29kZSksJ3Jhdyc9PiRyZXNwXTsKICAgICRqPWpzb25fZGVjb2RlKCRyZXNwLHRydWUpID86IFtdOwogICAgJHRleHQ9YWlfcmVzcG9uc2VfdGV4dCgkaik7CiAgICAkZXg9YWlfanNvbl9mcm9tX3RleHQoJHRleHQpOwogICAgaWYoISRleCkgcmV0dXJuIFsnb2snPT5mYWxzZSwnZXJyb3InPT4nb3BlbmFpX25vX2pzb24nLCdyYXcnPT4kdGV4dF07CiAgICByZXR1cm4gWydvayc9PnRydWUsJ2V4dHJhY3RlZCc9PiRleCwncmF3Jz0+JHRleHRdOwp9CgpmdW5jdGlvbiBhaV9tYWtlX3BkZl9mcm9tX2pwZWcoc3RyaW5nICRqcGVnUGF0aCwgc3RyaW5nICRwZGZQYXRoKTogYm9vbCB7CiAgICBpZighaXNfZmlsZSgkanBlZ1BhdGgpKSByZXR1cm4gZmFsc2U7CiAgICAkaW5mbz1AZ2V0aW1hZ2VzaXplKCRqcGVnUGF0aCk7CiAgICBpZighJGluZm8gfHwgZW1wdHkoJGluZm9bMF0pIHx8IGVtcHR5KCRpbmZvWzFdKSkgcmV0dXJuIGZhbHNlOwogICAgJGpwZz1maWxlX2dldF9jb250ZW50cygkanBlZ1BhdGgpOwogICAgaWYoJGpwZz09PWZhbHNlKSByZXR1cm4gZmFsc2U7CiAgICAkcGFnZVc9NTk1LjI4OyAkcGFnZUg9ODQxLjg5OyAkbWFyZ2luPTI0OwogICAgJGltZ1c9KGZsb2F0KSRpbmZvWzBdOyAkaW1nSD0oZmxvYXQpJGluZm9bMV07CiAgICAkc2NhbGU9bWluKCgkcGFnZVctJG1hcmdpbioyKS8kaW1nVywgKCRwYWdlSC0kbWFyZ2luKjIpLyRpbWdIKTsKICAgICRkcmF3Vz0kaW1nVyokc2NhbGU7ICRkcmF3SD0kaW1nSCokc2NhbGU7CiAgICAkeD0oJHBhZ2VXLSRkcmF3VykvMjsgJHk9KCRwYWdlSC0kZHJhd0gpLzI7CiAgICAkY29udGVudD1zcHJpbnRmKCJxXG4lLjNGIDAgMCAlLjNGICUuM0YgJS4zRiBjbVxuL0ltMCBEb1xuUVxuIiwkZHJhd1csJGRyYXdILCR4LCR5KTsKICAgICRvYmplY3RzPVsKICAgICAgICAiMSAwIG9ialxuPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSID4+XG5lbmRvYmpcbiIsCiAgICAgICAgIjIgMCBvYmpcbjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbMyAwIFJdIC9Db3VudCAxID4+XG5lbmRvYmpcbiIsCiAgICAgICAgIjMgMCBvYmpcbjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMiAwIFIgL01lZGlhQm94IFswIDAgeyRwYWdlV30geyRwYWdlSH1dIC9SZXNvdXJjZXMgPDwgL1hPYmplY3QgPDwgL0ltMCA0IDAgUiA+PiA+PiAvQ29udGVudHMgNSAwIFIgPj5cbmVuZG9ialxuIiwKICAgICAgICAiNCAwIG9ialxuPDwgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCB7JGluZm9bMF19IC9IZWlnaHQgeyRpbmZvWzFdfSAvQ29sb3JTcGFjZSAvRGV2aWNlUkdCIC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRENURGVjb2RlIC9MZW5ndGggIi5zdHJsZW4oJGpwZykuIiA+Plxuc3RyZWFtXG4iLiRqcGcuIlxuZW5kc3RyZWFtXG5lbmRvYmpcbiIsCiAgICAgICAgIjUgMCBvYmpcbjw8IC9MZW5ndGggIi5zdHJsZW4oJGNvbnRlbnQpLiIgPj5cbnN0cmVhbVxuIi4kY29udGVudC4iZW5kc3RyZWFtXG5lbmRvYmpcbiIsCiAgICBdOwogICAgJHBkZj0iJVBERi0xLjRcbiI7CiAgICAkb2Zmc2V0cz1bMF07CiAgICBmb3JlYWNoKCRvYmplY3RzIGFzICRvYmopeyAkb2Zmc2V0c1tdPXN0cmxlbigkcGRmKTsgJHBkZi49JG9iajsgfQogICAgJHhyZWY9c3RybGVuKCRwZGYpOwogICAgJHBkZi49InhyZWZcbjAgIi4oY291bnQoJG9iamVjdHMpKzEpLiJcbjAwMDAwMDAwMDAgNjU1MzUgZiBcbiI7CiAgICBmb3IoJGk9MTskaTw9Y291bnQoJG9iamVjdHMpOyRpKyspICRwZGYuPXNwcmludGYoIiUwMTBkIDAwMDAwIG4gXG4iLCRvZmZzZXRzWyRpXSk7CiAgICAkcGRmLj0idHJhaWxlclxuPDwgL1NpemUgIi4oY291bnQoJG9iamVjdHMpKzEpLiIgL1Jvb3QgMSAwIFIgPj5cbnN0YXJ0eHJlZlxueyR4cmVmfVxuJSVFT0ZcbiI7CiAgICByZXR1cm4gZmlsZV9wdXRfY29udGVudHMoJHBkZlBhdGgsJHBkZikhPT1mYWxzZTsKfQoKZnVuY3Rpb24gYWlfY29udmVydF9pbWFnZV90b19wZGYoc3RyaW5nICRzcmNQYXRoLCBzdHJpbmcgJG1pbWUsIHN0cmluZyAkcGRmUGF0aCk6IGJvb2wgewogICAgaWYoc3RyaXBvcygkbWltZSwnaW1hZ2UvJykhPT0wKSByZXR1cm4gZmFsc2U7CiAgICBpZihjbGFzc19leGlzdHMoJ0ltYWdpY2snKSl7CiAgICAgICAgJHRlbXA9JHNyY1BhdGguJy5pbWFnaWNrLmpwZyc7CiAgICAgICAgdHJ5ewogICAgICAgICAgICAkaW09bmV3IEltYWdpY2soJHNyY1BhdGgpOwogICAgICAgICAgICBpZihtZXRob2RfZXhpc3RzKCRpbSwnc2V0SXRlcmF0b3JJbmRleCcpKSAkaW0tPnNldEl0ZXJhdG9ySW5kZXgoMCk7CiAgICAgICAgICAgICRpbS0+c2V0SW1hZ2VCYWNrZ3JvdW5kQ29sb3IoJ3doaXRlJyk7CiAgICAgICAgICAgIGlmKG1ldGhvZF9leGlzdHMoJGltLCdtZXJnZUltYWdlTGF5ZXJzJykpICRpbT0kaW0tPm1lcmdlSW1hZ2VMYXllcnMoSW1hZ2ljazo6TEFZRVJNRVRIT0RfRkxBVFRFTik7CiAgICAgICAgICAgICRpbS0+c2V0SW1hZ2VGb3JtYXQoJ2pwZWcnKTsKICAgICAgICAgICAgJGltLT5zZXRJbWFnZUNvbXByZXNzaW9uUXVhbGl0eSg5Mik7CiAgICAgICAgICAgICRpbS0+d3JpdGVJbWFnZSgkdGVtcCk7CiAgICAgICAgICAgICRpbS0+Y2xlYXIoKTsKICAgICAgICAgICAgJG9rPWFpX21ha2VfcGRmX2Zyb21fanBlZygkdGVtcCwkcGRmUGF0aCk7CiAgICAgICAgICAgIGlmKGlzX2ZpbGUoJHRlbXApKSBAdW5saW5rKCR0ZW1wKTsKICAgICAgICAgICAgaWYoJG9rKSByZXR1cm4gdHJ1ZTsKICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlICRlKXsKICAgICAgICAgICAgaWYoaXNfZmlsZSgkdGVtcCkpIEB1bmxpbmsoJHRlbXApOwogICAgICAgIH0KICAgIH0KICAgICRqcGVnUGF0aD0kc3JjUGF0aDsKICAgICR0ZW1wPScnOwogICAgaWYoJG1pbWUhPT0naW1hZ2UvanBlZycgJiYgJG1pbWUhPT0naW1hZ2UvanBnJyl7CiAgICAgICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnaW1hZ2VjcmVhdGV0cnVlY29sb3InKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICRpbWc9bnVsbDsKICAgICAgICBpZigkbWltZT09PSdpbWFnZS9wbmcnICYmIGZ1bmN0aW9uX2V4aXN0cygnaW1hZ2VjcmVhdGVmcm9tcG5nJykpICRpbWc9QGltYWdlY3JlYXRlZnJvbXBuZygkc3JjUGF0aCk7CiAgICAgICAgaWYoJG1pbWU9PT0naW1hZ2Uvd2VicCcgJiYgZnVuY3Rpb25fZXhpc3RzKCdpbWFnZWNyZWF0ZWZyb213ZWJwJykpICRpbWc9QGltYWdlY3JlYXRlZnJvbXdlYnAoJHNyY1BhdGgpOwogICAgICAgIGlmKCEkaW1nKSByZXR1cm4gZmFsc2U7CiAgICAgICAgJHc9aW1hZ2VzeCgkaW1nKTsgJGg9aW1hZ2VzeSgkaW1nKTsKICAgICAgICAkY2FudmFzPWltYWdlY3JlYXRldHJ1ZWNvbG9yKCR3LCRoKTsKICAgICAgICAkd2hpdGU9aW1hZ2Vjb2xvcmFsbG9jYXRlKCRjYW52YXMsMjU1LDI1NSwyNTUpOwogICAgICAgIGltYWdlZmlsbGVkcmVjdGFuZ2xlKCRjYW52YXMsMCwwLCR3LCRoLCR3aGl0ZSk7CiAgICAgICAgaW1hZ2Vjb3B5KCRjYW52YXMsJGltZywwLDAsMCwwLCR3LCRoKTsKICAgICAgICAkdGVtcD0kc3JjUGF0aC4nLmpwZyc7CiAgICAgICAgJG9rPWltYWdlanBlZygkY2FudmFzLCR0ZW1wLDkyKTsKICAgICAgICBpbWFnZWRlc3Ryb3koJGltZyk7IGltYWdlZGVzdHJveSgkY2FudmFzKTsKICAgICAgICBpZighJG9rKSByZXR1cm4gZmFsc2U7CiAgICAgICAgJGpwZWdQYXRoPSR0ZW1wOwogICAgfQogICAgJG9rPWFpX21ha2VfcGRmX2Zyb21fanBlZygkanBlZ1BhdGgsJHBkZlBhdGgpOwogICAgaWYoJHRlbXAgJiYgaXNfZmlsZSgkdGVtcCkpIEB1bmxpbmsoJHRlbXApOwogICAgcmV0dXJuICRvazsKfQoKZnVuY3Rpb24gYWlfYXNjaWlfdGV4dCgkdik6IHN0cmluZyB7CiAgICBpZihpc19hcnJheSgkdikpICR2PWpzb25fZW5jb2RlKCR2LCBKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgICRzPXRyaW0oKHN0cmluZykkdik7CiAgICAkbWFwPVsKICAgICAgICAn0JAnPT4nQScsJ9CRJz0+J0InLCfQkic9PidWJywn0JMnPT4nRycsJ9CUJz0+J0QnLCfQlSc9PidFJywn0JYnPT4nWmgnLCfQlyc9PidaJywn0JgnPT4nSScsJ9CZJz0+J1knLCfQmic9PidLJywn0JsnPT4nTCcsJ9CcJz0+J00nLCfQnSc9PidOJywn0J4nPT4nTycsJ9CfJz0+J1AnLCfQoCc9PidSJywn0KEnPT4nUycsJ9CiJz0+J1QnLCfQoyc9PidVJywn0KQnPT4nRicsJ9ClJz0+J0gnLCfQpic9PidUcycsJ9CnJz0+J0NoJywn0KgnPT4nU2gnLCfQqSc9PidTaHQnLCfQqic9PidBJywn0KwnPT4nJywn0K4nPT4nWXUnLCfQryc9PidZYScsCiAgICAgICAgJ9CwJz0+J2EnLCfQsSc9PidiJywn0LInPT4ndicsJ9CzJz0+J2cnLCfQtCc9PidkJywn0LUnPT4nZScsJ9C2Jz0+J3poJywn0LcnPT4neicsJ9C4Jz0+J2knLCfQuSc9Pid5Jywn0LonPT4naycsJ9C7Jz0+J2wnLCfQvCc9PidtJywn0L0nPT4nbicsJ9C+Jz0+J28nLCfQvyc9PidwJywn0YAnPT4ncicsJ9GBJz0+J3MnLCfRgic9Pid0Jywn0YMnPT4ndScsJ9GEJz0+J2YnLCfRhSc9PidoJywn0YYnPT4ndHMnLCfRhyc9PidjaCcsJ9GIJz0+J3NoJywn0YknPT4nc2h0Jywn0YonPT4nYScsJ9GMJz0+JycsJ9GOJz0+J3l1Jywn0Y8nPT4neWEnLAogICAgICAgICfFnyc9PidzJywnxZ4nPT4nUycsJ8SfJz0+J2cnLCfEnic9PidHJywnxLEnPT4naScsJ8SwJz0+J0knLCfDtic9PidvJywnw5YnPT4nTycsJ8O8Jz0+J3UnLCfDnCc9PidVJywnw6cnPT4nYycsJ8OHJz0+J0MnLAogICAgICAgICfigqwnPT4nRVVSJywn4oK6Jz0+J1RSWScsJ+KAkyc9PictJywn4oCUJz0+Jy0nLCfihJYnPT4nTm8nCiAgICBdOwogICAgJHM9c3RydHIoJHMsJG1hcCk7CiAgICAkcz1wcmVnX3JlcGxhY2UoJy9bXlx4MjAtXHg3RV0vJywnJywkcyk7CiAgICByZXR1cm4gdHJpbShwcmVnX3JlcGxhY2UoJy9ccysvJywnICcsJHMpKTsKfQoKZnVuY3Rpb24gYWlfcGRmX2VzYyhzdHJpbmcgJHMpOiBzdHJpbmcgewogICAgcmV0dXJuIHN0cl9yZXBsYWNlKFsnXFwnLCcoJywnKScsIlxyIiwiXG4iXSwgWydcXFxcJywnXFwoJywnXFwpJywnJywnICddLCBhaV9hc2NpaV90ZXh0KCRzKSk7Cn0KCmZ1bmN0aW9uIGFpX3BkZl90ZXh0X2NtZChmbG9hdCAkeCwgZmxvYXQgJHksIHN0cmluZyAkdGV4dCwgaW50ICRzaXplPTksIHN0cmluZyAkZm9udD0nRjEnKTogc3RyaW5nIHsKICAgIHJldHVybiAiQlQgL3skZm9udH0geyRzaXplfSBUZiB7JHh9IHskeX0gVGQgKCIuYWlfcGRmX2VzYygkdGV4dCkuIikgVGogRVRcbiI7Cn0KCmZ1bmN0aW9uIGFpX3BkZl9saW5lX2NtZChmbG9hdCAkeDEsZmxvYXQgJHkxLGZsb2F0ICR4MixmbG9hdCAkeTIsZmxvYXQgJHc9MC44KTogc3RyaW5nIHsKICAgIHJldHVybiAieyR3fSB3IHskeDF9IHskeTF9IG0geyR4Mn0geyR5Mn0gbCBTXG4iOwp9CgpmdW5jdGlvbiBhaV9wZGZfcmVjdF9jbWQoZmxvYXQgJHgsZmxvYXQgJHksZmxvYXQgJHcsZmxvYXQgJGgsYm9vbCAkZmlsbD1mYWxzZSk6IHN0cmluZyB7CiAgICByZXR1cm4gInskeH0geyR5fSB7JHd9IHskaH0gcmUgIi4oJGZpbGw/J2YnOidTJykuIlxuIjsKfQoKZnVuY3Rpb24gYWlfZ2V0X2ZpZWxkKGFycmF5ICRleCwgYXJyYXkgJGtleXMsIHN0cmluZyAkZmFsbGJhY2s9JycpOiBzdHJpbmcgewogICAgZm9yZWFjaCgka2V5cyBhcyAkayl7CiAgICAgICAgaWYoaXNzZXQoJGV4WyRrXSkgJiYgJGV4WyRrXSE9PScnICYmICFpc19hcnJheSgkZXhbJGtdKSkgcmV0dXJuIChzdHJpbmcpJGV4WyRrXTsKICAgIH0KICAgIHJldHVybiAkZmFsbGJhY2s7Cn0KCmZ1bmN0aW9uIGFpX21vbmV5X3RleHQoJHYsIHN0cmluZyAkY3VycmVuY3k9JycpOiBzdHJpbmcgewogICAgaWYoJHY9PT0nJyB8fCAkdj09PW51bGwpIHJldHVybiAnJzsKICAgICRzPWFpX2FzY2lpX3RleHQoJHYpOwogICAgcmV0dXJuIHRyaW0oJHMuKCRjdXJyZW5jeSAmJiBzdHJpcG9zKCRzLCRjdXJyZW5jeSk9PT1mYWxzZT8nICcuJGN1cnJlbmN5OicnKSk7Cn0KCmZ1bmN0aW9uIGFpX2xheW91dF9lbGVtZW50cyhhcnJheSAkZXgpOiBhcnJheSB7CiAgICAkbGF5b3V0PSRleFsnbGF5b3V0J10/P251bGw7CiAgICBpZighaXNfYXJyYXkoJGxheW91dCkpIHJldHVybiBbXTsKICAgICRlbHM9JGxheW91dFsnZWxlbWVudHMnXT8/W107CiAgICByZXR1cm4gaXNfYXJyYXkoJGVscyk/JGVsczpbXTsKfQoKZnVuY3Rpb24gYWlfbGF5b3V0X251bSgkdiwgZmxvYXQgJGZhbGxiYWNrPTApOiBmbG9hdCB7CiAgICBpZihpc19udW1lcmljKCR2KSkgcmV0dXJuIChmbG9hdCkkdjsKICAgIHJldHVybiAkZmFsbGJhY2s7Cn0KCmZ1bmN0aW9uIGFpX2xheW91dF94KCR2LCBmbG9hdCAkcGFnZVcpOiBmbG9hdCB7CiAgICAkbj1haV9sYXlvdXRfbnVtKCR2LDApOwogICAgcmV0dXJuICRuPD0xMDAgPyBtYXgoMCxtaW4oMTAwLCRuKSkqJHBhZ2VXLzEwMCA6IG1heCgwLG1pbigkcGFnZVcsJG4pKTsKfQoKZnVuY3Rpb24gYWlfbGF5b3V0X3lfdG9wKCR2LCBmbG9hdCAkcGFnZUgpOiBmbG9hdCB7CiAgICAkbj1haV9sYXlvdXRfbnVtKCR2LDApOwogICAgcmV0dXJuICRuPD0xMDAgPyBtYXgoMCxtaW4oMTAwLCRuKSkqJHBhZ2VILzEwMCA6IG1heCgwLG1pbigkcGFnZUgsJG4pKTsKfQoKZnVuY3Rpb24gYWlfbGF5b3V0X2xlbigkdiwgZmxvYXQgJHBhZ2UpOiBmbG9hdCB7CiAgICAkbj1haV9sYXlvdXRfbnVtKCR2LDApOwogICAgcmV0dXJuICRuPD0xMDAgPyBtYXgoMCxtaW4oMTAwLCRuKSkqJHBhZ2UvMTAwIDogbWF4KDAsbWluKCRwYWdlLCRuKSk7Cn0KCmZ1bmN0aW9uIGFpX2NyZWF0ZV9sYXlvdXRfcGRmKGFycmF5ICRleCwgc3RyaW5nICRwZGZQYXRoKTogYm9vbCB7CiAgICAkZWxlbWVudHM9YWlfbGF5b3V0X2VsZW1lbnRzKCRleCk7CiAgICBpZighJGVsZW1lbnRzKSByZXR1cm4gZmFsc2U7CiAgICAkVz01OTUuMjg7ICRIPTg0MS44OTsKICAgICRjPSIlUERGLTEuNCByZWNvbnN0cnVjdGVkIGRpZ2l0YWwgZG9jdW1lbnRcbiI7CiAgICAkYy49IjAuNSB3XG4iOwogICAgZm9yZWFjaCgkZWxlbWVudHMgYXMgJGVsKXsKICAgICAgICBpZighaXNfYXJyYXkoJGVsKSkgY29udGludWU7CiAgICAgICAgJHR5cGU9c3RydG9sb3dlcigoc3RyaW5nKSgkZWxbJ3R5cGUnXT8/J3RleHQnKSk7CiAgICAgICAgJHg9YWlfbGF5b3V0X3goJGVsWyd4J10/PzAsJFcpOwogICAgICAgICR5VG9wPWFpX2xheW91dF95X3RvcCgkZWxbJ3knXT8/MCwkSCk7CiAgICAgICAgJHc9YWlfbGF5b3V0X2xlbigkZWxbJ3cnXT8/MCwkVyk7CiAgICAgICAgJGg9YWlfbGF5b3V0X2xlbigkZWxbJ2gnXT8/MCwkSCk7CiAgICAgICAgaWYoJHR5cGU9PT0nbGluZScpewogICAgICAgICAgICAkeDI9JHgrKCR3PzowKTsKICAgICAgICAgICAgJHkyPSRILSgkeVRvcCsoJGg/OjApKTsKICAgICAgICAgICAgJGMuPWFpX3BkZl9saW5lX2NtZCgkeCwkSC0keVRvcCwkeDIsJHkyLGFpX2xheW91dF9udW0oJGVsWydzdHJva2Vfd2lkdGgnXT8/MC42LDAuNikpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYoJHR5cGU9PT0ncmVjdCcgfHwgJHR5cGU9PT0nYm94Jyl7CiAgICAgICAgICAgICRjLj1haV9wZGZfcmVjdF9jbWQoJHgsJEgtJHlUb3AtJGgsbWF4KDEsJHcpLG1heCgxLCRoKSxmYWxzZSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAkdGV4dD0oc3RyaW5nKSgkZWxbJ3RleHQnXT8/JycpOwogICAgICAgIGlmKCR0ZXh0PT09JycpIGNvbnRpbnVlOwogICAgICAgICRmb250PSFlbXB0eSgkZWxbJ2JvbGQnXSk/J0YyJzonRjEnOwogICAgICAgICRzaXplPShpbnQpbWF4KDUsbWluKDI0LGFpX2xheW91dF9udW0oJGVsWydmb250X3NpemUnXT8/OSw5KSkpOwogICAgICAgICRsaW5lcz1wcmVnX3NwbGl0KCcvXFIvdScsJHRleHQpID86IFskdGV4dF07CiAgICAgICAgJGJhc2VZPSRILSR5VG9wLSRzaXplOwogICAgICAgIGZvcmVhY2goJGxpbmVzIGFzICRpPT4kbGluZSl7CiAgICAgICAgICAgICRjLj1haV9wZGZfdGV4dF9jbWQoJHgsJGJhc2VZLSgkaSooJHNpemUrMikpLHN1YnN0cigoc3RyaW5nKSRsaW5lLDAsMjQwKSwkc2l6ZSwkZm9udCk7CiAgICAgICAgfQogICAgfQogICAgJG9iamVjdHM9WwogICAgICAgICIxIDAgb2JqXG48PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj5cbmVuZG9ialxuIiwKICAgICAgICAiMiAwIG9ialxuPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFszIDAgUl0gL0NvdW50IDEgPj5cbmVuZG9ialxuIiwKICAgICAgICAiMyAwIG9ialxuPDwgL1R5cGUgL1BhZ2UgL1BhcmVudCAyIDAgUiAvTWVkaWFCb3ggWzAgMCB7JFd9IHskSH1dIC9SZXNvdXJjZXMgPDwgL0ZvbnQgPDwgL0YxIDQgMCBSIC9GMiA1IDAgUiA+PiA+PiAvQ29udGVudHMgNiAwIFIgPj5cbmVuZG9ialxuIiwKICAgICAgICAiNCAwIG9ialxuPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1R5cGUxIC9CYXNlRm9udCAvSGVsdmV0aWNhID4+XG5lbmRvYmpcbiIsCiAgICAgICAgIjUgMCBvYmpcbjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UeXBlMSAvQmFzZUZvbnQgL0hlbHZldGljYS1Cb2xkID4+XG5lbmRvYmpcbiIsCiAgICAgICAgIjYgMCBvYmpcbjw8IC9MZW5ndGggIi5zdHJsZW4oJGMpLiIgPj5cbnN0cmVhbVxuIi4kYy4iZW5kc3RyZWFtXG5lbmRvYmpcbiIsCiAgICBdOwogICAgJHBkZj0iJVBERi0xLjRcbiI7CiAgICAkb2Zmc2V0cz1bMF07CiAgICBmb3JlYWNoKCRvYmplY3RzIGFzICRvYmopeyRvZmZzZXRzW109c3RybGVuKCRwZGYpOyRwZGYuPSRvYmo7fQogICAgJHhyZWY9c3RybGVuKCRwZGYpOwogICAgJHBkZi49InhyZWZcbjAgIi4oY291bnQoJG9iamVjdHMpKzEpLiJcbjAwMDAwMDAwMDAgNjU1MzUgZiBcbiI7CiAgICBmb3IoJGk9MTskaTw9Y291bnQoJG9iamVjdHMpOyRpKyspICRwZGYuPXNwcmludGYoIiUwMTBkIDAwMDAwIG4gXG4iLCRvZmZzZXRzWyRpXSk7CiAgICAkcGRmLj0idHJhaWxlclxuPDwgL1NpemUgIi4oY291bnQoJG9iamVjdHMpKzEpLiIgL1Jvb3QgMSAwIFIgPj5cbnN0YXJ0eHJlZlxueyR4cmVmfVxuJSVFT0ZcbiI7CiAgICByZXR1cm4gZmlsZV9wdXRfY29udGVudHMoJHBkZlBhdGgsJHBkZikhPT1mYWxzZTsKfQoKZnVuY3Rpb24gYWlfaGFzX2RvY3VtZW50X2RhdGEoYXJyYXkgJGV4KTogYm9vbCB7CiAgICAka2V5cz1bJ251bWJlcicsJ2RhdGUnLCdjbGllbnQnLCdzdXBwbGllcicsJ3NlbGxlcl9uYW1lJywnYnV5ZXJfbmFtZScsJ3RvdGFsJywnc3VidG90YWwnLCd2YXRfYW1vdW50JywnaWJhbicsJ2Rlc2NyaXB0aW9uJ107CiAgICAkaGl0cz0wOwogICAgZm9yZWFjaCgka2V5cyBhcyAkayl7CiAgICAgICAgaWYoaXNzZXQoJGV4WyRrXSkgJiYgIWlzX2FycmF5KCRleFska10pICYmIHRyaW0oKHN0cmluZykkZXhbJGtdKSE9PScnKSAkaGl0cysrOwogICAgfQogICAgaWYoaXNzZXQoJGV4WydsaW5lX2l0ZW1zJ10pICYmIGlzX2FycmF5KCRleFsnbGluZV9pdGVtcyddKSAmJiBjb3VudCgkZXhbJ2xpbmVfaXRlbXMnXSk+MCkgJGhpdHMrPTI7CiAgICByZXR1cm4gJGhpdHM+PTI7Cn0KCmZ1bmN0aW9uIGFpX2NyZWF0ZV9kaWdpdGFsX3BkZihhcnJheSAkZXgsIHN0cmluZyAkZG9jVHlwZSwgc3RyaW5nICRwZGZQYXRoKTogYm9vbCB7CiAgICByZXR1cm4gYWlfY3JlYXRlX2xheW91dF9wZGYoJGV4LCRwZGZQYXRoKTsKfQoKLy8g4pSA4pSAIERPQ1VNRU5UIE5VTUJFUklORyDilIDilIAKZnVuY3Rpb24gbmV4dERvY051bWJlcigkcGRvLCR0eXBlKXsKICAgICR5ZWFyPWRhdGUoJ1knKTsKICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGRvY19jb3VudGVycyAodHlwZSx5ZWFyLGNvdW50ZXIpIFZBTFVFUyAoPyw/LDEpCiAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgY291bnRlcj1jb3VudGVyKzEiKS0+ZXhlY3V0ZShbJHR5cGUsJHllYXJdKTsKICAgICRjPSRwZG8tPnByZXBhcmUoIlNFTEVDVCBjb3VudGVyIEZST00gZG9jX2NvdW50ZXJzIFdIRVJFIHR5cGU9PyBBTkQgeWVhcj0/Iik7CiAgICAkYy0+ZXhlY3V0ZShbJHR5cGUsJHllYXJdKTsKICAgIHJldHVybiBzdHJfcGFkKChzdHJpbmcpJGMtPmZldGNoQ29sdW1uKCksMTAsJzAnLFNUUl9QQURfTEVGVCk7Cn0KCi8vIOKUgOKUgCBSQVcgU01UUCBTRU5ERVIgKG5vIGV4dGVybmFsIGxpYnJhcmllcyBuZWVkZWQpIOKUgOKUgApmdW5jdGlvbiBzbXRwU2VuZCgkaG9zdCwkcG9ydCwkc2VjdXJlLCR1c2VyLCRwYXNzLCRmcm9tRW1haWwsJGZyb21OYW1lLCR0bywkc3ViamVjdCwkaHRtbEJvZHkpewogICAgJGVycm5vPTA7JGVycnN0cj0nJzsKICAgICRmcD1AZnNvY2tvcGVuKCgkc2VjdXJlPT09J3NzbCc/J3NzbDovLyc6JycpLiRob3N0LChpbnQpJHBvcnQsJGVycm5vLCRlcnJzdHIsMTIpOwogICAgaWYoISRmcCkgdGhyb3cgbmV3IEV4Y2VwdGlvbignQ29ubmVjdCBmYWlsZWQ6ICcuJGVycnN0cik7CiAgICBzdHJlYW1fc2V0X3RpbWVvdXQoJGZwLDEyKTsKICAgICRyZWFkPWZ1bmN0aW9uKCkgdXNlICgkZnApeyAkZD0nJzsgd2hpbGUoJHN0cj1mZ2V0cygkZnAsNTE1KSl7ICRkLj0kc3RyOyBpZihpc3NldCgkc3RyWzNdKSYmJHN0clszXT09PScgJykgYnJlYWs7IH0gcmV0dXJuICRkOyB9OwogICAgJHdyaXRlPWZ1bmN0aW9uKCRjbWQpIHVzZSAoJGZwKXsgZndyaXRlKCRmcCwkY21kLiJcclxuIik7IH07CiAgICAkcmVhZCgpOwogICAgJHdyaXRlKCdFSExPIHdlYnRyaXhpYS5jb20nKTsgJHJlYWQoKTsKICAgIGlmKCRzZWN1cmU9PT0ndGxzJyl7CiAgICAgICAgJHdyaXRlKCdTVEFSVFRMUycpOyAkcmVhZCgpOwogICAgICAgIHN0cmVhbV9zb2NrZXRfZW5hYmxlX2NyeXB0bygkZnAsdHJ1ZSxTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFNfQ0xJRU5UKTsKICAgICAgICAkd3JpdGUoJ0VITE8gd2VidHJpeGlhLmNvbScpOyAkcmVhZCgpOwogICAgfQogICAgJHdyaXRlKCdBVVRIIExPR0lOJyk7ICRyZWFkKCk7CiAgICAkd3JpdGUoYmFzZTY0X2VuY29kZSgkdXNlcikpOyAkcmVhZCgpOwogICAgJHdyaXRlKGJhc2U2NF9lbmNvZGUoJHBhc3MpKTsgJHI9JHJlYWQoKTsKICAgIGlmKHN0cnBvcygkciwnMjM1Jyk9PT1mYWxzZSkgdGhyb3cgbmV3IEV4Y2VwdGlvbignU01UUCBhdXRoIGZhaWxlZDogJy4kcik7CiAgICAkd3JpdGUoJ01BSUwgRlJPTTogPCcuJGZyb21FbWFpbC4nPicpOyAkcmVhZCgpOwogICAgJHdyaXRlKCdSQ1BUIFRPOiA8Jy4kdG8uJz4nKTsgJHJlYWQoKTsKICAgICR3cml0ZSgnREFUQScpOyAkcmVhZCgpOwogICAgJGhlYWRlcnMgPSJGcm9tOiA9P1VURi04P0I/Ii5iYXNlNjRfZW5jb2RlKCRmcm9tTmFtZSkuIj89IDx7JGZyb21FbWFpbH0+XHJcbiI7CiAgICAkaGVhZGVycy49IlRvOiA8eyR0b30+XHJcbiI7CiAgICAkaGVhZGVycy49IlN1YmplY3Q6ID0/VVRGLTg/Qj8iLmJhc2U2NF9lbmNvZGUoJHN1YmplY3QpLiI/PVxyXG4iOwogICAgJGhlYWRlcnMuPSJNSU1FLVZlcnNpb246IDEuMFxyXG5Db250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFxyXG4iOwogICAgJHdyaXRlKCRoZWFkZXJzLiJcclxuIi4kaHRtbEJvZHkuIlxyXG4uIik7CiAgICAkcj0kcmVhZCgpOwogICAgJHdyaXRlKCdRVUlUJyk7IGZjbG9zZSgkZnApOwogICAgaWYoc3RycG9zKCRyLCcyNTAnKT09PWZhbHNlKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdTZW5kIGZhaWxlZDogJy4kcik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKJGFjdGlvbj0kX0dFVFsnYWN0aW9uJ10/PycnOwokbWV0aG9kPSRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddOwppZihzZXNzaW9uX3N0YXR1cygpPT09UEhQX1NFU1NJT05fTk9ORSkgc2Vzc2lvbl9zdGFydCgpOwoKZnVuY3Rpb24gaHViX2xpY2Vuc2Vfc3RhdHVzKCl7CiAgICBzdGF0aWMgJHN0YXR1cz1udWxsOwogICAgaWYoJHN0YXR1cyE9PW51bGwpIHJldHVybiAkc3RhdHVzOwogICAgJGd1YXJkPV9fRElSX18uJy9saWNlbnNlcy9jbGllbnQvZ3VhcmQucGhwJzsKICAgIGlmKCFmaWxlX2V4aXN0cygkZ3VhcmQpKXsKICAgICAgICByZXR1cm4gJHN0YXR1cz1bJ3N0YXRlJz0+J2FjdGl2ZScsJ21vZHVsZXMnPT5bXSwnbWVzc2FnZSc9PifQm9C+0LrQsNC70LXQvSDRgNC10LbQuNC8LicsJ29mZmxpbmUnPT50cnVlXTsKICAgIH0KICAgIHRyeXsKICAgICAgICByZXF1aXJlX29uY2UgJGd1YXJkOwogICAgICAgIHJldHVybiAkc3RhdHVzPXd0X2d1YXJkX3N0YXR1cygpOwogICAgfWNhdGNoKFRocm93YWJsZSAkZSl7CiAgICAgICAgcmV0dXJuICRzdGF0dXM9WydzdGF0ZSc9PidhY3RpdmUnLCdtb2R1bGVzJz0+W10sJ21lc3NhZ2UnPT4n0JvQuNGG0LXQvdC30L3QuNGP0YIg0LrQvtC90YLRgNC+0Lsg0LUg0LLRgNC10LzQtdC90L3QviDQvdC10LTQvtGB0YLRitC/0LXQvS4nLCdvZmZsaW5lJz0+dHJ1ZV07CiAgICB9Cn0KCmZ1bmN0aW9uIGh1Yl9saWNlbnNlX3JvbGUoKTogc3RyaW5nIHsKICAgIHRyeXsKICAgICAgICAkcj1kYigpLT5xdWVyeSgiU0VMRUNUIHJvbGUgRlJPTSBzZXR0aW5ncyBXSEVSRSBpZD0xIiktPmZldGNoKCk7CiAgICAgICAgcmV0dXJuICRyWydyb2xlJ10/PydjbGllbnQnOwogICAgfWNhdGNoKFRocm93YWJsZSAkZSl7CiAgICAgICAgcmV0dXJuICdjbGllbnQnOwogICAgfQp9CgpmdW5jdGlvbiBodWJfbW9kdWxlX2Zvcl9hY3Rpb24oc3RyaW5nICRhY3Rpb24pOiBzdHJpbmcgewogICAgJG1hcD1bCiAgICAgICAgJ3Byb2plY3RzJz0+J3Byb2plY3RzJywndGFza3MnPT4ndGFza3MnLCdub3Rlcyc9Pidub3RlcycsJ2NsaWVudHMnPT4nY2xpZW50cycsCiAgICAgICAgJ2hvc3RpbmcnPT4naG9zdGluZycsJ3Bhc3N3b3Jkcyc9PidwYXNzd29yZHMnLCdvZmZlcnMnPT4nb2ZmZXJzJywnY29udHJhY3RzJz0+J2NvbnRyYWN0cycsCiAgICAgICAgJ3ByZXNlbmNlJz0+J3ByZXNlbmNlJywncHJlc2VuY2VfcmVwb3J0Jz0+J3ByZXNlbmNlJywnb2ZmaWNlX3NldHRpbmdzJz0+J3ByZXNlbmNlJywndGFyZ2V0cyc9Pid0YXJnZXRzJywnd29ya3JlcG9ydCc9Pid3b3JrcmVwb3J0JywndXNlcnMnPT4ndXNlcnMnLAogICAgICAgICdhY3Rpdml0eSc9PidyZXBvcnRzJywnYXVkaXRfbG9nJz0+J2F1ZGl0JywnYnVzaW5lc3NfcmVwb3J0Jz0+J3JlcG9ydHMnLCdhaV9zY2Fucyc9PidhaV9zY2FuJywnYWlfc2Nhbl9yZXByb2Nlc3MnPT4nYWlfc2NhbicsJ2FpX3NjYW5fc2Vzc2lvbic9PidhaV9zY2FuJywKICAgICAgICAnY29tcGFueV9zZXR0aW5ncyc9PidpbnZvaWNpbmcnLCdlaWtfbG9va3VwJz0+J2ludm9pY2luZycsJ2RvY3VtZW50cyc9PidpbnZvaWNpbmcnLAogICAgICAgICdkb2N1bWVudF9mdWxsJz0+J2ludm9pY2luZycsJ2ludm9pY2Vfc3RhdHMnPT4naW52b2ljaW5nJywnZG9jdW1lbnRzX2V4cG9ydCc9PidpbnZvaWNpbmcnLAogICAgICAgICdjbGllbnRzX2ltcG9ydCc9PidpbnZvaWNpbmcnLCdyZWN1cnJpbmcnPT4naW52b2ljaW5nJywncnVuX3JlY3VycmluZyc9PidpbnZvaWNpbmcnLAogICAgICAgICdzZW5kX2RvY3VtZW50X2VtYWlsJz0+J2ludm9pY2luZycsJ2hyX3JlcXVlc3RzJz0+J2hyX3JlcXVlc3RzJywnaHJfcmVxdWVzdF9zdGF0dXMnPT4naHJfcmVxdWVzdHMnLAogICAgICAgICd3YXliaWxscyc9Pid3YXliaWxscycsJ3dheWJpbGxfc3RhdHVzJz0+J3dheWJpbGxzJwogICAgXTsKICAgIHJldHVybiAkbWFwWyRhY3Rpb25dPz8nJzsKfQoKZnVuY3Rpb24gaHViX2VmZmVjdGl2ZV9tb2R1bGVzKGFycmF5ICRscz1bXSk6IGFycmF5IHsKICAgICRtb2RzPVtdOwogICAgdHJ5ewogICAgICAgICRyPWRiKCktPnF1ZXJ5KCJTRUxFQ1QgbW9kdWxlc19lbmFibGVkIEZST00gYnJhbmRpbmdfc2V0dGluZ3MgV0hFUkUgaWQ9MSIpLT5mZXRjaCgpOwogICAgICAgICRtb2RzPWpzb25fZGVjb2RlKCRyWydtb2R1bGVzX2VuYWJsZWQnXT8/J3t9Jyx0cnVlKT86W107CiAgICB9Y2F0Y2goVGhyb3dhYmxlICRlKXt9CiAgICBpZihhcnJheV9rZXlfZXhpc3RzKCdtb2R1bGVzJywkbHMpICYmIGlzX2FycmF5KCRsc1snbW9kdWxlcyddKSAmJiBlbXB0eSgkbHNbJ29mZmxpbmUnXSkpewogICAgICAgICRsaWNlbnNlZD0kbHNbJ21vZHVsZXMnXTsKICAgICAgICBmb3JlYWNoKCRtb2RzIGFzICRrPT4kdikgJG1vZHNbJGtdPSFlbXB0eSgkbGljZW5zZWRbJGtdKT8xOjA7CiAgICAgICAgZm9yZWFjaCgkbGljZW5zZWQgYXMgJGs9PiR2KSBpZighYXJyYXlfa2V5X2V4aXN0cygkaywkbW9kcykpICRtb2RzWyRrXT0hZW1wdHkoJHYpPzE6MDsKICAgIH0KICAgIGlmKGluX2FycmF5KCRsc1snc3RhdGUnXT8/J2FjdGl2ZScsWydsb2NrZWQnLCdpbnZhbGlkJ10sdHJ1ZSkpewogICAgICAgIGZvcmVhY2goJG1vZHMgYXMgJGs9PiR2KSAkbW9kc1ska109MDsKICAgIH0KICAgIHJldHVybiAkbW9kczsKfQoKaWYoJGFjdGlvbj09PSdsaWNlbnNlX3N0YXR1cycpewogICAgb2soaHViX2xpY2Vuc2Vfc3RhdHVzKCkpOwp9CgppZigkYWN0aW9uPT09J2xpY2Vuc2VfY2xpZW50X2NvbmZpZycpewogICAgJGd1YXJkPV9fRElSX18uJy9saWNlbnNlcy9jbGllbnQvZ3VhcmQucGhwJzsKICAgIGlmKCFmaWxlX2V4aXN0cygkZ3VhcmQpKSBvayhbJ3ZlcmlmeV91cmwnPT4nJywnbWVzc2FnZSc9PifQm9C+0LrQsNC70LXQvSDRgNC10LbQuNC8LiddKTsKICAgIHJlcXVpcmVfb25jZSAkZ3VhcmQ7CiAgICBvayhbJ3ZlcmlmeV91cmwnPT5mdW5jdGlvbl9leGlzdHMoJ3d0X2d1YXJkX3ZlcmlmeV91cmwnKT93dF9ndWFyZF92ZXJpZnlfdXJsKCk6JyddKTsKfQoKaWYoJGFjdGlvbj09PSdsaWNlbnNlX3N5bmMnKXsKICAgICRndWFyZD1fX0RJUl9fLicvbGljZW5zZXMvY2xpZW50L2d1YXJkLnBocCc7CiAgICBpZighZmlsZV9leGlzdHMoJGd1YXJkKSkgb2soWydzeW5jZWQnPT5mYWxzZSwnbWVzc2FnZSc9PifQm9C+0LrQsNC70LXQvSDRgNC10LbQuNC8LiddKTsKICAgIHJlcXVpcmVfb25jZSAkZ3VhcmQ7CiAgICAkYj1ib2R5KCk7CiAgICAkcGF5bG9hZD0oaXNzZXQoJGJbJ3BheWxvYWQnXSkgJiYgaXNfYXJyYXkoJGJbJ3BheWxvYWQnXSkpPyRiWydwYXlsb2FkJ106JGI7CiAgICBpZighaXNfYXJyYXkoJHBheWxvYWQpIHx8IGVtcHR5KCRwYXlsb2FkWydzdGF0ZSddKSkgZXJyKCfQndC10LLQsNC70LjQtNC10L0g0LvQuNGG0LXQvdC30LXQvSDQvtGC0LPQvtCy0L7RgCcpOwogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCd3dF9ndWFyZF92YWxpZF9zaWduYXR1cmUnKSAmJiAhd3RfZ3VhcmRfdmFsaWRfc2lnbmF0dXJlKCRwYXlsb2FkKSkgZXJyKCfQndC10LLQsNC70LjQtNC10L0g0L/QvtC00L/QuNGBINC90LAg0LvQuNGG0LXQvdC30LAnKTsKICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnd3RfZ3VhcmRfc3RvcmVfc3RhdHVzJykgJiYgIXd0X2d1YXJkX3N0b3JlX3N0YXR1cygkcGF5bG9hZCkpIGVycign0J3QtSDQvNC+0LPQsCDQtNCwINC30LDQv9C40YjQsCDQu9C40YbQtdC90LfQvdC40Y8g0YHRgtCw0YLRg9GBJyk7CiAgICBvayhbJ3N5bmNlZCc9PnRydWUsJ3N0YXRlJz0+JHBheWxvYWRbJ3N0YXRlJ10/PydhY3RpdmUnLCdjaGVja2VkX2F0Jz0+JHBheWxvYWRbJ2NoZWNrZWRfYXQnXT8/bnVsbF0pOwp9CgppZigkYWN0aW9uPT09J2h1Yl9oZWFsdGgnKXsKICAgICRwZG89ZGIoKTsKICAgICRzZXR0aW5ncz1bXTsgdHJ5eyRzZXR0aW5ncz0kcGRvLT5xdWVyeSgiU0VMRUNUIHByb2R1Y3RfbmFtZSxodWJfdHlwZSxtb2R1bGVzX2VuYWJsZWQgRlJPTSBicmFuZGluZ19zZXR0aW5ncyBXSEVSRSBpZD0xIiktPmZldGNoKCkgPzogW107fWNhdGNoKEV4Y2VwdGlvbiAkZSl7fQogICAgJGxzPWh1Yl9saWNlbnNlX3N0YXR1cygpOwogICAgJG1vZHM9aHViX2VmZmVjdGl2ZV9tb2R1bGVzKCRscyk7CiAgICAkY291bnRzPVtdOwogICAgZm9yZWFjaChbJ3Byb2plY3RzJywnY2xpZW50cycsJ29mZmVycycsJ2NvbnRyYWN0cycsJ3VzZXJzJ10gYXMgJHQpewogICAgICAgIHRyeXskY291bnRzWyR0XT0oaW50KSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBgJHRgIiktPmZldGNoQ29sdW1uKCk7fWNhdGNoKEV4Y2VwdGlvbiAkZSl7JGNvdW50c1skdF09MDt9CiAgICB9CiAgICBvayhbJ3ZlcnNpb24nPT4nNC4xJywncHJvZHVjdF9uYW1lJz0+JHNldHRpbmdzWydwcm9kdWN0X25hbWUnXT8/J0h1YicsJ2h1Yl90eXBlJz0+JHNldHRpbmdzWydodWJfdHlwZSddPz8nYWdlbmN5JywKICAgICAgICAnbGljZW5zZV9zdGF0ZSc9PiRsc1snc3RhdGUnXT8/J2FjdGl2ZScsJ2xpY2Vuc2VfdmFsaWRfdW50aWwnPT4kbHNbJ3ZhbGlkX3VudGlsJ10/P251bGwsCiAgICAgICAgJ21vZHVsZXNfZW5hYmxlZCc9PiRtb2RzLCdjb3VudHMnPT4kY291bnRzLCdzZXJ2ZXJfdGltZSc9PmRhdGUoJ2MnKV0pOwp9CgokbGljZW5zZVB1YmxpY0FjdGlvbnM9WydpbnN0YWxsJywnaW5zdGFsbF9wbGF0Zm9ybScsJ2luc3RhbGxfaW52b2ljaW5nJywnYnJhbmRpbmdfc2V0dGluZ3MnLCdsaWNlbnNlX3N0YXR1cycsJ2xpY2Vuc2VfY2xpZW50X2NvbmZpZycsJ2xpY2Vuc2Vfc3luYycsJ2h1Yl9oZWFsdGgnLCdhaV9tb2JpbGVfdXBsb2FkJywndGVzdCcsJ3RnX3VwZGF0ZXMnLCd0Z19zZXRfY2hhdCddOwppZighaW5fYXJyYXkoJGFjdGlvbiwkbGljZW5zZVB1YmxpY0FjdGlvbnMsdHJ1ZSkpewogICAgJGxzPWh1Yl9saWNlbnNlX3N0YXR1cygpOwogICAgaWYoaW5fYXJyYXkoJGxzWydzdGF0ZSddPz8nYWN0aXZlJyxbJ2xvY2tlZCcsJ2ludmFsaWQnXSx0cnVlKSl7CiAgICAgICAgaHR0cF9yZXNwb25zZV9jb2RlKDQwMik7CiAgICAgICAgZWNobyBqc29uX2VuY29kZShbJ29rJz0+ZmFsc2UsJ2Vycm9yJz0+J2xpY2Vuc2VfbG9ja2VkJywnbGljZW5zZSc9PiRscywKICAgICAgICAgICAgJ21lc3NhZ2UnPT4kbHNbJ21lc3NhZ2UnXT8/J9Cb0LjRhtC10L3Qt9GK0YIg0L3QtSDQtSDQsNC60YLQuNCy0LXQvS4nXSxKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgICAgICBleGl0OwogICAgfQogICAgJG1vZD1odWJfbW9kdWxlX2Zvcl9hY3Rpb24oJGFjdGlvbik7CiAgICAkbW9kcz1odWJfZWZmZWN0aXZlX21vZHVsZXMoJGxzKTsKICAgIGlmKCRtb2QgJiYgaXNfYXJyYXkoJG1vZHMpICYmIGFycmF5X2tleV9leGlzdHMoJG1vZCwkbW9kcykgJiYgISRtb2RzWyRtb2RdKXsKICAgICAgICBodHRwX3Jlc3BvbnNlX2NvZGUoNDAzKTsKICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnb2snPT5mYWxzZSwnZXJyb3InPT4nbW9kdWxlX2Rpc2FibGVkJywnbW9kdWxlJz0+JG1vZCwKICAgICAgICAgICAgJ21lc3NhZ2UnPT4n0KLQvtC30Lgg0LzQvtC00YPQuyDQtSDQuNC30LrQu9GO0YfQtdC9INC30LAg0YLQsNC30Lgg0LjQvdGB0YLQsNC70LDRhtC40Y8uJ10sSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICAgICAgZXhpdDsKICAgIH0KfQoKLy8g4pSA4pSAIElOU1RBTEwg4pSA4pSACmlmKCRhY3Rpb249PT0naW5zdGFsbCcpewogICAgJHBkbz1kYigpOwogICAgJHRhYmxlcz1bIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHVzZXJzICgKICAgICAgICBpZCBJTlQgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVksCiAgICAgICAgdXNlcm5hbWUgVkFSQ0hBUigxMDApIFVOSVFVRSBOT1QgTlVMTCwKICAgICAgICBwYXNzd29yZCBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCiAgICAgICAgbmFtZSBWQVJDSEFSKDEwMCksCiAgICAgICAgcm9sZSBWQVJDSEFSKDEwMCksCiAgICAgICAgaW5pdGlhbHMgVkFSQ0hBUig1KSwKICAgICAgICBjb2xvciBWQVJDSEFSKDIwKSBERUZBVUxUICdhdi1wJywKICAgICAgICBpc19hZG1pbiBUSU5ZSU5UKDEpIERFRkFVTFQgMCwKICAgICAgICBvbmxpbmUgVElOWUlOVCgxKSBERUZBVUxUIDEsCiAgICAgICAgdGVsZWdyYW1fY2hhdF9pZCBWQVJDSEFSKDUwKSwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcHJvamVjdHMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLAogICAgICAgIG5hbWUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgICAgIGNsaWVudCBWQVJDSEFSKDI1NSkscGhvbmUgVkFSQ0hBUigxMDApLAogICAgICAgIHN0YXR1cyBWQVJDSEFSKDUwKSBERUZBVUxUICduZXcnLAogICAgICAgIHRvdGFsIERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLHJlY2VpdmVkIERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLAogICAgICAgIHN0YXJ0X2RhdGUgREFURSBOVUxMLGRlYWRsaW5lIERBVEUgTlVMTCxwcm9ncmVzcyBJTlQgREVGQVVMVCAwLAogICAgICAgIGFzc2lnbmVlIFZBUkNIQVIoMTAwKSx0YWdzIFRFWFQscmVjdXJyaW5nIFZBUkNIQVIoMjApLG5vdGVzIFRFWFQsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICB1cGRhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QIE9OIFVQREFURSBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIsIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRhc2tzICgKICAgICAgICBpZCBWQVJDSEFSKDM2KSBQUklNQVJZIEtFWSx0ZXh0IFRFWFQgTk9UIE5VTEwsCiAgICAgICAgYXNzaWduZWUgVkFSQ0hBUigxMDApLHVyZ2VudCBUSU5ZSU5UKDEpIERFRkFVTFQgMCxkb25lIFRJTllJTlQoMSkgREVGQVVMVCAwLAogICAgICAgIGR1ZV9kYXRlIERBVEVUSU1FIE5VTEwsbm90ZSBURVhULAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiLCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBub3RlcyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksdGl0bGUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgICAgIGJvZHkgVEVYVCxhdXRob3IgVkFSQ0hBUigxMDApLHVyZ2VudCBUSU5ZSU5UKDEpIERFRkFVTFQgMCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY2xpZW50cyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksbmFtZSBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCiAgICAgICAgY29tcGFueSBWQVJDSEFSKDI1NSksZW1haWwgVkFSQ0hBUigyNTUpLHBob25lIFZBUkNIQVIoMTAwKSxlaWsgVkFSQ0hBUig1MCksbm90ZXMgVEVYVCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgaG9zdGluZyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksZG9tYWluIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKICAgICAgICBjbGllbnQgVkFSQ0hBUigyNTUpLHNlcnZlciBWQVJDSEFSKDI1NSksdHlwZSBWQVJDSEFSKDUwKSxkaXNrIFZBUkNIQVIoNTApLHBsYW4gVkFSQ0hBUig1MCksCiAgICAgICAgc3NsX2V4cGlyZXMgREFURSBOVUxMLGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiLCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBwYXNzd29yZHMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLHNpdGUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgICAgIHVzZXJuYW1lIFZBUkNIQVIoMjU1KSxwYXNzIFZBUkNIQVIoNTAwKSxjYXRlZ29yeSBWQVJDSEFSKDUwKSxjbGllbnQgVkFSQ0hBUigyNTUpLAogICAgICAgIHZpc2libGVfdG8gVEVYVCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgb2ZmZXJzICgKICAgICAgICBpZCBWQVJDSEFSKDM2KSBQUklNQVJZIEtFWSxudW0gVkFSQ0hBUig1MCksY2xpZW50IFZBUkNIQVIoMjU1KSwKICAgICAgICBzZXJ2aWNlIFZBUkNIQVIoMjU1KSx0b3RhbCBERUNJTUFMKDEwLDIpIERFRkFVTFQgMCxzdGF0dXMgVkFSQ0hBUig1MCkgREVGQVVMVCAn0KfQsNC60LDRidCwJywKICAgICAgICBvZmZlcl90eXBlIFZBUkNIQVIoMzApIERFRkFVTFQgJ29uZV90aW1lJywKICAgICAgICBkZXRhaWxzIExPTkdURVhULAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgICAgICAgdXBkYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCBPTiBVUERBVEUgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiLCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBjb250cmFjdHMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLG5hbWUgVkFSQ0hBUigyNTUpLGNsaWVudCBWQVJDSEFSKDI1NSksCiAgICAgICAgc2lnbl9kYXRlIERBVEUgTlVMTCxjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcHJlc2VuY2UgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSx1c2VyX2lkIElOVCBOT1QgTlVMTCwKICAgICAgICBzdGF0dXMgVkFSQ0hBUigzMCkgTk9UIE5VTEwsCiAgICAgICAgaXBfYWRkcmVzcyBWQVJDSEFSKDYwKSwKICAgICAgICB1c2VyX2FnZW50IFZBUkNIQVIoMjU1KSwKICAgICAgICBsYXRpdHVkZSBERUNJTUFMKDEwLDcpIE5VTEwsCiAgICAgICAgbG9uZ2l0dWRlIERFQ0lNQUwoMTAsNykgTlVMTCwKICAgICAgICBhY2N1cmFjeSBERUNJTUFMKDEwLDIpIE5VTEwsCiAgICAgICAgbG9jYXRpb25fbm90ZSBWQVJDSEFSKDI1NSksCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIsIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGFjdGl2aXR5ICgKICAgICAgICBpZCBJTlQgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVksd2hvIFZBUkNIQVIoMTAwKSx3aGF0IFRFWFQsCiAgICAgICAgY29sb3IgVkFSQ0hBUigyMCksaW5pdGlhbHMgVkFSQ0hBUig1KSwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIl07CiAgICBmb3JlYWNoKCR0YWJsZXMgYXMgJHNxbCkgJHBkby0+ZXhlYygkc3FsKTsKICAgIGh1Yl9zY2hlbWFfZXh0cmEoJHBkbyk7CiAgICAvLyBUYXJnZXRzIHRhYmxlIChzZXBhcmF0ZSBiZWNhdXNlIGl0IHdhcyBhZGRlZCBsYXRlcikKICAgICRwZG8tPmV4ZWMoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRhcmdldHMgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICAgICAgICB1c2VyX2lkIElOVCBOT1QgTlVMTCwKICAgICAgICBjcmVhdGVkX2J5IElOVCBOT1QgTlVMTCwKICAgICAgICB0aXRsZSBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCiAgICAgICAgZGVzY3JpcHRpb24gVEVYVCwKICAgICAgICB0YXJnZXRfdmFsdWUgSU5UIE5PVCBOVUxMLAogICAgICAgIGN1cnJlbnRfdmFsdWUgSU5UIERFRkFVTFQgMCwKICAgICAgICB1bml0IFZBUkNIQVIoNTApIERFRkFVTFQgJ9Cx0YAuJywKICAgICAgICBkYXRlIERBVEUgTk9UIE5VTEwsCiAgICAgICAgc3RhdHVzIFZBUkNIQVIoMjApIERFRkFVTFQgJ2FjdGl2ZScsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIpOwogICAgLy8gU2FmZSBjb2x1bW4gYWRkaXRpb25zCiAgICAkYWx0ZXJzPVsKICAgICAgICAiQUxURVIgVEFCTEUgdGFza3MgQUREIENPTFVNTiBkdWVfZGF0ZSBEQVRFVElNRSBOVUxMIiwKICAgICAgICAiQUxURVIgVEFCTEUgdGFza3MgQUREIENPTFVNTiBub3RlIFRFWFQiLAogICAgICAgICJBTFRFUiBUQUJMRSB1c2VycyBBREQgQ09MVU1OIHRlbGVncmFtX2NoYXRfaWQgVkFSQ0hBUig1MCkiLAogICAgICAgICJBTFRFUiBUQUJMRSB1c2VycyBBREQgQ09MVU1OIGFjY2Vzc19yb2xlIFZBUkNIQVIoMzApIERFRkFVTFQgJ2VtcGxveWVlJyIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHBhc3N3b3JkcyBBREQgQ09MVU1OIGNsaWVudCBWQVJDSEFSKDI1NSkiLAogICAgICAgICJBTFRFUiBUQUJMRSBwYXNzd29yZHMgQUREIENPTFVNTiB2aXNpYmxlX3RvIFRFWFQiLAogICAgICAgICJBTFRFUiBUQUJMRSBvZmZlcnMgQUREIENPTFVNTiBvZmZlcl90eXBlIFZBUkNIQVIoMzApIERFRkFVTFQgJ29uZV90aW1lJyIsCiAgICAgICAgIkFMVEVSIFRBQkxFIG9mZmVycyBBREQgQ09MVU1OIGRldGFpbHMgTE9OR1RFWFQiLAogICAgICAgICJBTFRFUiBUQUJMRSBvZmZlcnMgQUREIENPTFVNTiB1cGRhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QIE9OIFVQREFURSBDVVJSRU5UX1RJTUVTVEFNUCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gaXBfYWRkcmVzcyBWQVJDSEFSKDYwKSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gdXNlcl9hZ2VudCBWQVJDSEFSKDI1NSkiLAogICAgICAgICJBTFRFUiBUQUJMRSBwcmVzZW5jZSBBREQgQ09MVU1OIGxhdGl0dWRlIERFQ0lNQUwoMTAsNykgTlVMTCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gbG9uZ2l0dWRlIERFQ0lNQUwoMTAsNykgTlVMTCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gYWNjdXJhY3kgREVDSU1BTCgxMCwyKSBOVUxMIiwKICAgICAgICAiQUxURVIgVEFCTEUgcHJlc2VuY2UgQUREIENPTFVNTiBsb2NhdGlvbl9ub3RlIFZBUkNIQVIoMjU1KSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gZGlzdGFuY2VfbSBJTlQgTlVMTCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gb2ZmaWNlX3N0YXRlIFZBUkNIQVIoMzApIiwKICAgIF07CiAgICBmb3JlYWNoKCRhbHRlcnMgYXMgJHNxbCl7dHJ5eyRwZG8tPmV4ZWMoJHNxbCk7fWNhdGNoKEV4Y2VwdGlvbiAkZSl7fX0KICAgIC8vIERlZmF1bHQgYWRtaW4KICAgICRjbnQ9JHBkby0+cXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHVzZXJzIiktPmZldGNoQ29sdW1uKCk7CiAgICBpZigkY250PT0wKXsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyB1c2VycyAodXNlcm5hbWUscGFzc3dvcmQsbmFtZSxyb2xlLGluaXRpYWxzLGNvbG9yLGlzX2FkbWluKSBWQUxVRVMgKD8sPyw/LD8sPyw/LDEpIikKICAgICAgICAgICAgLT5leGVjdXRlKFsnYWRtaW4nLHBhc3N3b3JkX2hhc2goJ3dlYnRyaXhpYTIwMjUnLFBBU1NXT1JEX0RFRkFVTFQpLCfQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgCcsJ0FkbWluJywn0JDQlCcsJ2F2LXAnXSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiVVBEQVRFIHVzZXJzIFNFVCBhY2Nlc3Nfcm9sZT0nYWRtaW4nIFdIRVJFIHVzZXJuYW1lPSdhZG1pbiciKS0+ZXhlY3V0ZSgpOwogICAgfQogICAgb2soJ1RhYmxlcyByZWFkeScpOwp9CgovLyDilIDilIAgR0VUIFRFTEVHUkFNIENIQVQgSUQgKGhlbHBlcikg4pSA4pSACmlmKCRhY3Rpb249PT0ndGdfdXBkYXRlcycpewogICAgLy8gQ2FsbCB0aGlzIHRvIGZpbmQgeW91ciBjaGF0X2lkIGFmdGVyIHdyaXRpbmcgL3N0YXJ0IHRvIHRoZSBib3QKICAgICR1cmw9J2h0dHBzOi8vYXBpLnRlbGVncmFtLm9yZy9ib3QnLlRHX1RPS0VOLicvZ2V0VXBkYXRlcyc7CiAgICAkcmVzcD1AZmlsZV9nZXRfY29udGVudHMoJHVybCk7CiAgICAkZGF0YT1qc29uX2RlY29kZSgkcmVzcCx0cnVlKTsKICAgICRjaGF0cz1bXTsKICAgIGZvcmVhY2goJGRhdGFbJ3Jlc3VsdCddPz9bXSBhcyAkdXBkKXsKICAgICAgICAkY2hhdD0kdXBkWydtZXNzYWdlJ11bJ2NoYXQnXT8/JHVwZFsnY2hhbm5lbF9wb3N0J11bJ2NoYXQnXT8/bnVsbDsKICAgICAgICBpZigkY2hhdCkgJGNoYXRzW109WydpZCc9PiRjaGF0WydpZCddLCd0eXBlJz0+JGNoYXRbJ3R5cGUnXSwndGl0bGUnPT4kY2hhdFsndGl0bGUnXT8/JGNoYXRbJ2ZpcnN0X25hbWUnXT8/JyddOwogICAgfQogICAgb2soWyd1cGRhdGVzJz0+Y291bnQoJGRhdGFbJ3Jlc3VsdCddPz9bXSksJ2NoYXRzJz0+YXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkY2hhdHMsU09SVF9SRUdVTEFSKSldKTsKfQoKLy8g4pSA4pSAIFNFVCBURUxFR1JBTSBDSEFUIElEIOKUgOKUgAppZigkYWN0aW9uPT09J3RnX3NldF9jaGF0Jyl7CiAgICAvLyBHRVQ6IGFwaS5waHA/YWN0aW9uPXRnX3NldF9jaGF0JmNoYXRfaWQ9LTEwMHh4eHh4eHgKICAgICRjaGF0X2lkPSRfR0VUWydjaGF0X2lkJ10/PycnOwogICAgaWYoISRjaGF0X2lkKSBlcnIoJ01pc3NpbmcgY2hhdF9pZCcpOwogICAgJGZpbGU9X19ESVJfXy4nL2NvbmZpZy5waHAnOwogICAgJGNvbnRlbnQ9ZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOwogICAgaWYoc3RycG9zKCRjb250ZW50LCdUR19DSEFUX0lEJykhPT1mYWxzZSl7CiAgICAgICAgJGNvbnRlbnQ9cHJlZ19yZXBsYWNlKAogICAgICAgICAgICAiL2RlZmluZVxcKCdUR19DSEFUX0lEJyxcXHMqJ1teJ10qJ1xccypcXCk7LyIsCiAgICAgICAgICAgICJkZWZpbmUoJ1RHX0NIQVRfSUQnLCd7JGNoYXRfaWR9Jyk7IiwKICAgICAgICAgICAgJGNvbnRlbnQKICAgICAgICApOwogICAgfSBlbHNlIHsKICAgICAgICAkY29udGVudD1ydHJpbSgkY29udGVudCkuIlxuZGVmaW5lKCdUR19DSEFUX0lEJywneyRjaGF0X2lkfScpO1xuIjsKICAgIH0KICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlLCRjb250ZW50KTsKICAgIHRnKCLinIUgPGI+V2VidHJpeGlhIEh1YjwvYj5cblxu0KLQtdC70LXQs9GA0LDQvCDQuNC30LLQtdGB0YLQuNGP0YLQsCDRgdCwINCw0LrRgtC40LLQuNGA0LDQvdC4IVxuXG7QktGB0Y/QutC+INC/0YDQuNGB0YrRgdGC0LLQuNC1INC90LAg0LXQutC40L/QsCDRidC1INCx0YrQtNC1INC00L7QutC70LDQtNCy0LDQvdC+INGC0YPQui4iKTsKICAgIG9rKCdDaGF0IElEIHNhdmVkOiAnLiRjaGF0X2lkKTsKfQoKLy8g4pSA4pSAIExPR0lOIOKUgOKUgAppZigkYWN0aW9uPT09J2xvZ2luJyl7CiAgICAkYj1ib2R5KCk7CiAgICAkc3RtdD1kYigpLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIHVzZXJzIFdIRVJFIHVzZXJuYW1lPT8iKTsKICAgICRzdG10LT5leGVjdXRlKFskYlsndXNlcm5hbWUnXT8/JyddKTsKICAgICR1PSRzdG10LT5mZXRjaCgpOwogICAgaWYoJHUmJnBhc3N3b3JkX3ZlcmlmeSgkYlsncGFzc3dvcmQnXT8/JycsJHVbJ3Bhc3N3b3JkJ10pKXsKICAgICAgICAkX1NFU1NJT05bJ2h1Yl91c2VyX2lkJ109KGludCkkdVsnaWQnXTsKICAgICAgICAkX1NFU1NJT05bJ2h1Yl9pc19hZG1pbiddPSgoaW50KSgkdVsnaXNfYWRtaW4nXT8/MCk9PT0xKTsKICAgICAgICB1bnNldCgkdVsncGFzc3dvcmQnXSk7CiAgICAgICAgb2soJHUpOwogICAgfSBlbHNlIGVycign0JPRgNC10YjQvdC+INC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC+INC40LzQtSDQuNC70Lgg0L/QsNGA0L7Qu9CwJyk7Cn0KCi8vIOKUgOKUgCBVU0VSUyDilIDilIAKaWYoJGFjdGlvbj09PSd1c2VycycpewogICAgJHBkbz1kYigpOwogICAgaHViX3NjaGVtYV9leHRyYSgkcGRvKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJyl7CiAgICAgICAgJHJvd3M9JHBkby0+cXVlcnkoIlNFTEVDVCBpZCx1c2VybmFtZSxuYW1lLHJvbGUsYWNjZXNzX3JvbGUsaW5pdGlhbHMsY29sb3IsaXNfYWRtaW4sb25saW5lLHRlbGVncmFtX2NoYXRfaWQgRlJPTSB1c2VycyBPUkRFUiBCWSBpZCIpLT5mZXRjaEFsbCgpOwogICAgICAgIG9rKCRyb3dzKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTsKICAgICAgICBpZihpc3NldCgkYlsnaWQnXSkmJiRiWydpZCddKXsKICAgICAgICAgICAgaWYoIWVtcHR5KCRiWydwYXNzd29yZCddKSl7CiAgICAgICAgICAgICAgICAkc3RtdD0kcGRvLT5wcmVwYXJlKCJVUERBVEUgdXNlcnMgU0VUIG5hbWU9Pyxyb2xlPT8sYWNjZXNzX3JvbGU9Pyxpbml0aWFscz0/LGNvbG9yPT8saXNfYWRtaW49PyxvbmxpbmU9Pyx1c2VybmFtZT0/LHBhc3N3b3JkPT8sdGVsZWdyYW1fY2hhdF9pZD0/IFdIRVJFIGlkPT8iKTsKICAgICAgICAgICAgICAgICRzdG10LT5leGVjdXRlKFskYlsnbmFtZSddLCRiWydyb2xlJ10sJGJbJ2FjY2Vzc19yb2xlJ10/PydlbXBsb3llZScsJGJbJ2luaXRpYWxzJ10sJGJbJ2NvbG9yJ10sJGJbJ2lzX2FkbWluJ10/PzAsJGJbJ29ubGluZSddPz8xLAogICAgICAgICAgICAgICAgICAgICRiWyd1c2VybmFtZSddLHBhc3N3b3JkX2hhc2goJGJbJ3Bhc3N3b3JkJ10sUEFTU1dPUkRfREVGQVVMVCksJGJbJ3RlbGVncmFtX2NoYXRfaWQnXT8/bnVsbCwkYlsnaWQnXV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHN0bXQ9JHBkby0+cHJlcGFyZSgiVVBEQVRFIHVzZXJzIFNFVCBuYW1lPT8scm9sZT0/LGFjY2Vzc19yb2xlPT8saW5pdGlhbHM9Pyxjb2xvcj0/LGlzX2FkbWluPT8sb25saW5lPT8sdXNlcm5hbWU9Pyx0ZWxlZ3JhbV9jaGF0X2lkPT8gV0hFUkUgaWQ9PyIpOwogICAgICAgICAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyRiWyduYW1lJ10sJGJbJ3JvbGUnXSwkYlsnYWNjZXNzX3JvbGUnXT8/J2VtcGxveWVlJywkYlsnaW5pdGlhbHMnXSwkYlsnY29sb3InXSwkYlsnaXNfYWRtaW4nXT8/MCwkYlsnb25saW5lJ10/PzEsCiAgICAgICAgICAgICAgICAgICAgJGJbJ3VzZXJuYW1lJ10sJGJbJ3RlbGVncmFtX2NoYXRfaWQnXT8/bnVsbCwkYlsnaWQnXV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF1ZGl0KCRwZG8sJ3VzZXJfc2F2ZWQnLCd1c2VycycsKHN0cmluZykkYlsnaWQnXSxbJ25hbWUnPT4kYlsnbmFtZSddPz8nJywnYWNjZXNzX3JvbGUnPT4kYlsnYWNjZXNzX3JvbGUnXT8/J2VtcGxveWVlJ10pOwogICAgICAgICAgICBvayhbJ2lkJz0+JGJbJ2lkJ11dKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyB1c2VycyAodXNlcm5hbWUscGFzc3dvcmQsbmFtZSxyb2xlLGFjY2Vzc19yb2xlLGluaXRpYWxzLGNvbG9yLGlzX2FkbWluLHRlbGVncmFtX2NoYXRfaWQpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/LD8pIikKICAgICAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGJbJ3VzZXJuYW1lJ10scGFzc3dvcmRfaGFzaCgkYlsncGFzc3dvcmQnXT8/J2h1YjIwMjUnLFBBU1NXT1JEX0RFRkFVTFQpLAogICAgICAgICAgICAgICAgICAgICRiWyduYW1lJ10sJGJbJ3JvbGUnXSwkYlsnYWNjZXNzX3JvbGUnXT8/J2VtcGxveWVlJywkYlsnaW5pdGlhbHMnXSwkYlsnY29sb3InXT8/J2F2LXAnLCRiWydpc19hZG1pbiddPz8wLCRiWyd0ZWxlZ3JhbV9jaGF0X2lkJ10/P251bGxdKTsKICAgICAgICAgICAgJG5ld0lkPSRwZG8tPmxhc3RJbnNlcnRJZCgpOwogICAgICAgICAgICBhdWRpdCgkcGRvLCd1c2VyX2NyZWF0ZWQnLCd1c2VycycsKHN0cmluZykkbmV3SWQsWyduYW1lJz0+JGJbJ25hbWUnXT8/JyddKTsKICAgICAgICAgICAgb2soWydpZCc9PiRuZXdJZF0pOwogICAgICAgIH0KICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7CiAgICAgICAgJGlkPSRfR0VUWydpZCddPz8nJzsKICAgICAgICBkYigpLT5wcmVwYXJlKCJERUxFVEUgRlJPTSB1c2VycyBXSEVSRSBpZD0/IEFORCBpc19hZG1pbj0wIiktPmV4ZWN1dGUoWyRpZF0pOwogICAgICAgIGF1ZGl0KCRwZG8sJ3VzZXJfZGVsZXRlZCcsJ3VzZXJzJywoc3RyaW5nKSRpZCk7CiAgICAgICAgb2sodHJ1ZSk7CiAgICB9Cn0KCi8vIOKUgOKUgCBQUkVTRU5DRSDilIDilIAKaWYoJGFjdGlvbj09PSdwcmVzZW5jZScpewogICAgJHBkbz1kYigpOwogICAgaHViX3NjaGVtYV9leHRyYSgkcGRvKTsKICAgIGZvcmVhY2goWwogICAgICAgICJBTFRFUiBUQUJMRSBwcmVzZW5jZSBBREQgQ09MVU1OIGlwX2FkZHJlc3MgVkFSQ0hBUig2MCkiLAogICAgICAgICJBTFRFUiBUQUJMRSBwcmVzZW5jZSBBREQgQ09MVU1OIHVzZXJfYWdlbnQgVkFSQ0hBUigyNTUpIiwKICAgICAgICAiQUxURVIgVEFCTEUgcHJlc2VuY2UgQUREIENPTFVNTiBsYXRpdHVkZSBERUNJTUFMKDEwLDcpIE5VTEwiLAogICAgICAgICJBTFRFUiBUQUJMRSBwcmVzZW5jZSBBREQgQ09MVU1OIGxvbmdpdHVkZSBERUNJTUFMKDEwLDcpIE5VTEwiLAogICAgICAgICJBTFRFUiBUQUJMRSBwcmVzZW5jZSBBREQgQ09MVU1OIGFjY3VyYWN5IERFQ0lNQUwoMTAsMikgTlVMTCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gbG9jYXRpb25fbm90ZSBWQVJDSEFSKDI1NSkiLAogICAgICAgICJBTFRFUiBUQUJMRSBwcmVzZW5jZSBBREQgQ09MVU1OIGRpc3RhbmNlX20gSU5UIE5VTEwiLAogICAgICAgICJBTFRFUiBUQUJMRSBwcmVzZW5jZSBBREQgQ09MVU1OIG9mZmljZV9zdGF0ZSBWQVJDSEFSKDMwKSIsCiAgICBdIGFzICRzcWwpe3RyeXskcGRvLT5leGVjKCRzcWwpO31jYXRjaChFeGNlcHRpb24gJGUpe319CiAgICBpZigkbWV0aG9kPT09J0dFVCcpewogICAgICAgICRsb2c9JHBkby0+cXVlcnkoIlNFTEVDVCBwLiosdS5uYW1lLHUuaW5pdGlhbHMsdS5jb2xvciBGUk9NIHByZXNlbmNlIHAKICAgICAgICAgICAgSk9JTiB1c2VycyB1IE9OIHAudXNlcl9pZD11LmlkCiAgICAgICAgICAgIFdIRVJFIERBVEUocC5jcmVhdGVkX2F0KT1DVVJEQVRFKCkKICAgICAgICAgICAgT1JERVIgQlkgcC5jcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKTsKICAgICAgICAkY3VycmVudD0kcGRvLT5xdWVyeSgiU0VMRUNUIHAuKix1Lm5hbWUsdS5pbml0aWFscyx1LmNvbG9yCiAgICAgICAgICAgIEZST00gcHJlc2VuY2UgcCBKT0lOIHVzZXJzIHUgT04gcC51c2VyX2lkPXUuaWQKICAgICAgICAgICAgV0hFUkUgcC5pZCBJTiAoU0VMRUNUIE1BWChpZCkgRlJPTSBwcmVzZW5jZSBXSEVSRSBEQVRFKGNyZWF0ZWRfYXQpPUNVUkRBVEUoKSBHUk9VUCBCWSB1c2VyX2lkKSIpLT5mZXRjaEFsbCgpOwogICAgICAgIG9rKFsnbG9nJz0+JGxvZywnY3VycmVudCc9PiRjdXJyZW50XSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7CiAgICAgICAgJHVzZXJfaWQ9KGludCkoJGJbJ3VzZXJfaWQnXT8/MCk7CiAgICAgICAgJHN0YXR1cz0kYlsnc3RhdHVzJ10/PycnOwogICAgICAgIGlmKCEkdXNlcl9pZHx8ISRzdGF0dXMpIGVycignTWlzc2luZyBkYXRhOiB1c2VyX2lkPScuJHVzZXJfaWQuJyBzdGF0dXM9Jy4kc3RhdHVzKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAkbGF0PWlzX251bWVyaWMoJGJbJ2xhdGl0dWRlJ10/P251bGwpPyRiWydsYXRpdHVkZSddOm51bGw7CiAgICAgICAgJGxuZz1pc19udW1lcmljKCRiWydsb25naXR1ZGUnXT8/bnVsbCk/JGJbJ2xvbmdpdHVkZSddOm51bGw7CiAgICAgICAgJGFjYz1pc19udW1lcmljKCRiWydhY2N1cmFjeSddPz9udWxsKT8kYlsnYWNjdXJhY3knXTpudWxsOwogICAgICAgICRub3RlPXN1YnN0cigoc3RyaW5nKSgkYlsnbG9jYXRpb25fbm90ZSddPz8nJyksMCwyNTUpOwogICAgICAgICRpcD1jbGllbnRJcCgpOwogICAgICAgICR1YT1zdWJzdHIoKHN0cmluZykoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddPz8nJyksMCwyNTUpOwogICAgICAgICRvZmZpY2U9JHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gb2ZmaWNlX3NldHRpbmdzIFdIRVJFIGlkPTEiKS0+ZmV0Y2goKSA/OiBbXTsKICAgICAgICAkZGlzdGFuY2U9ZGlzdGFuY2VNZXRlcnMoJGxhdCwkbG5nLCRvZmZpY2VbJ2xhdGl0dWRlJ10/P251bGwsJG9mZmljZVsnbG9uZ2l0dWRlJ10/P251bGwpOwogICAgICAgICRhbGxvd2VkSXBzPWFycmF5X2ZpbHRlcihhcnJheV9tYXAoJ3RyaW0nLGV4cGxvZGUoJywnLChzdHJpbmcpKCRvZmZpY2VbJ2FsbG93ZWRfaXBzJ10/PycnKSkpKTsKICAgICAgICAkaXBPaz0kaXAgJiYgaW5fYXJyYXkoJGlwLCRhbGxvd2VkSXBzLHRydWUpOwogICAgICAgICRyYWRpdXM9KGludCkoJG9mZmljZVsncmFkaXVzX20nXT8/MTIwKTsKICAgICAgICAkb2ZmaWNlU3RhdGU9J3Vua25vd24nOwogICAgICAgIGlmKCRkaXN0YW5jZSE9PW51bGwgJiYgJHJhZGl1cz4wKSAkb2ZmaWNlU3RhdGU9JGRpc3RhbmNlPD0kcmFkaXVzPydvZmZpY2UnOidvdXRzaWRlJzsKICAgICAgICBpZigkaXBPaykgJG9mZmljZVN0YXRlPSdvZmZpY2VfaXAnOwoKICAgICAgICAvLyBJbnNlcnQgcHJlc2VuY2UgcmVjb3JkCiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gcHJlc2VuY2UgKHVzZXJfaWQsc3RhdHVzLGlwX2FkZHJlc3MsdXNlcl9hZ2VudCxsYXRpdHVkZSxsb25naXR1ZGUsYWNjdXJhY3ksbG9jYXRpb25fbm90ZSxkaXN0YW5jZV9tLG9mZmljZV9zdGF0ZSkKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/KSIpLT5leGVjdXRlKFskdXNlcl9pZCwkc3RhdHVzLCRpcCwkdWEsJGxhdCwkbG5nLCRhY2MsJG5vdGUsJGRpc3RhbmNlLCRvZmZpY2VTdGF0ZV0pOwoKICAgICAgICAvLyBHZXQgdXNlciBpbmZvCiAgICAgICAgJHVzZXI9JHBkby0+cHJlcGFyZSgiU0VMRUNUIG5hbWUscm9sZSx0ZWxlZ3JhbV9jaGF0X2lkIEZST00gdXNlcnMgV0hFUkUgaWQ9PyIpOwogICAgICAgICR1c2VyLT5leGVjdXRlKFskdXNlcl9pZF0pOwogICAgICAgICR1PSR1c2VyLT5mZXRjaCgpOwoKICAgICAgICAvLyBTdGF0dXMgZW1vamlzIGFuZCBtZXNzYWdlcwogICAgICAgICRpY29ucz1bJ2Fycml2ZWQnPT4n8J+foicsJ2JyZWFrJz0+J+KYlScsJ2JhY2snPT4n8J+UtScsJ2xlZnQnPT4n8J+UtCcsJ3RvaWxldCc9Pifwn5q9Jywnc21va2UnPT4n8J+arCcsJ3Ntb2tlX2JhY2snPT4n8J+SqCddOwogICAgICAgICRsYWJlbHM9WydhcnJpdmVkJz0+J9Cf0YDQuNGB0YLQuNCz0L3QsCDQvdCwINGA0LDQsdC+0YLQsCcsJ2JyZWFrJz0+J9CY0LfQu9C10LfQtSDQvdCwINC/0L7Rh9C40LLQutCwJywnYmFjayc9PifQktGK0YDQvdCwINGB0LUg0L7RgiDQv9C+0YfQuNCy0LrQsCcsJ2xlZnQnPT4n0KLRgNGK0LPQvdCwINC+0YIg0L7RhNC40YHQsCcsJ3RvaWxldCc9PifQmNC30LvQtdC30LUg0LTQviDRgtC+0LDQu9C10YLQvdCwJywnc21va2UnPT4n0JjQt9C70LXQt9C1INC90LAg0YbQuNCz0LDRgNCwJywnc21va2VfYmFjayc9PifQktGK0YDQvdCwINGB0LUg0L7RgiDRhtC40LPQsNGA0LAnXTsKICAgICAgICAkaWNvbj0kaWNvbnNbJHN0YXR1c10/PyfimqonOwogICAgICAgICRsYWJlbD0kbGFiZWxzWyRzdGF0dXNdPz8kc3RhdHVzOwogICAgICAgICR0aW1lPWRhdGUoJ0g6aScpOwogICAgICAgICRuYW1lPSR1WyduYW1lJ10/PyfQodC70YPQttC40YLQtdC7JzsKICAgICAgICAkcm9sZT0kdVsncm9sZSddPz8nJzsKCiAgICAgICAgLy8gU2VuZCBUZWxlZ3JhbSB0byBHUk9VUC9DSEFOTkVMCiAgICAgICAgJHdoZXJlPSRvZmZpY2VTdGF0ZT09PSdvdXRzaWRlJz8iXG7imqDvuI8g0JjQt9Cy0YrQvSDQvtGE0LjRgSIuKCRkaXN0YW5jZSE9PW51bGw/IiDCtyB7JGRpc3RhbmNlfW0iOicnKTooJG9mZmljZVN0YXRlPT09J29mZmljZSd8fCRvZmZpY2VTdGF0ZT09PSdvZmZpY2VfaXAnPyJcbvCfk40g0JIg0L7RhNC40YEiOicnKTsKICAgICAgICAkbXNnPSJ7JGljb259IDxiPnskbmFtZX08L2I+IiAuICgkcm9sZT8iICh7JHJvbGV9KSI6IiIpIC4gIlxueyRsYWJlbH1cbjxpPvCflZAgeyR0aW1lfTwvaT4iLiR3aGVyZTsKICAgICAgICB0ZygkbXNnKTsKCiAgICAgICAgLy8gQWxzbyBzZW5kIHBlcnNvbmFsIFRHIGlmIHVzZXIgaGFzIHRoZWlyIG93biBjaGF0X2lkCiAgICAgICAgJHBlcnNvbmFsQ2hhdElkPSR1Wyd0ZWxlZ3JhbV9jaGF0X2lkJ10/PycnOwogICAgICAgIGlmKCFlbXB0eSgkcGVyc29uYWxDaGF0SWQpJiYkcGVyc29uYWxDaGF0SWQhPT1UR19DSEFUX0lEKXsKICAgICAgICAgICAgJHBlcnNvbmFsTXNncz1bCiAgICAgICAgICAgICAgICAnYXJyaXZlZCc9PiLwn5+iIDxiPtCU0L7QsdGA0LUg0LTQvtGI0YrQuyDQvdCwINGA0LDQsdC+0YLQsCE8L2I+XG7QntGC0LHQtdC70Y/Qt9Cw0L0g0YHQuDogeyR0aW1lfSIsCiAgICAgICAgICAgICAgICAnYnJlYWsnPT4i4piVIDxiPtCf0YDQuNGP0YLQvdCwINC/0L7Rh9C40LLQutCwITwvYj5cbtCY0LfQu9C10LfQvdCwINCyOiB7JHRpbWV9IiwKICAgICAgICAgICAgICAgICdiYWNrJz0+IvCflLUgPGI+0JTQvtCx0YDQtSDQtNC+0YjRitC7INC+0LHRgNCw0YLQvdC+ITwvYj5cbtCS0YrRgNC90LAg0YHQtTogeyR0aW1lfSIsCiAgICAgICAgICAgICAgICAnbGVmdCc9PiLwn5S0IDxiPtCb0LXQutCwINCy0LXRh9C10YAhPC9iPlxu0KLRgNGK0LPQvdCwINCyOiB7JHRpbWV9IgogICAgICAgICAgICBdOwogICAgICAgICAgICB0ZygkcGVyc29uYWxNc2dzWyRzdGF0dXNdPz8kbXNnLCAkcGVyc29uYWxDaGF0SWQpOwogICAgICAgIH0KCiAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gJGUpIHsgZXJyKCdQcmVzZW5jZSBlcnJvcjogJy4kZS0+Z2V0TWVzc2FnZSgpKTsgfQogICAgICAgIG9rKHRydWUpOwogICAgfQp9CgppZigkYWN0aW9uPT09J29mZmljZV9zZXR0aW5ncycpewogICAgJHBkbz1kYigpOwogICAgaHViX3NjaGVtYV9leHRyYSgkcGRvKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJykgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gb2ZmaWNlX3NldHRpbmdzIFdIRVJFIGlkPTEiKS0+ZmV0Y2goKSA/OiBbXSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7CiAgICAgICAgaWYoIWh1Yl9zZXNzaW9uX2lzX2FkbWluKCkpIGVycign0KHQsNC80L4g0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YAg0LzQvtC20LUg0LTQsCDQv9GA0L7QvNC10L3RjyDQvtGE0LjRgSDQvdCw0YHRgtGA0L7QudC60LjRgtC1Jyk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiVVBEQVRFIG9mZmljZV9zZXR0aW5ncyBTRVQgbmFtZT0/LGxhdGl0dWRlPT8sbG9uZ2l0dWRlPT8scmFkaXVzX209PyxhbGxvd2VkX2lwcz0/IFdIRVJFIGlkPTEiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRiWyduYW1lJ10/PyfQntGB0L3QvtCy0LXQvSDQvtGE0LjRgScsJGJbJ2xhdGl0dWRlJ10/P251bGwsJGJbJ2xvbmdpdHVkZSddPz9udWxsLChpbnQpKCRiWydyYWRpdXNfbSddPz8xMjApLCRiWydhbGxvd2VkX2lwcyddPz8nJ10pOwogICAgICAgIGF1ZGl0KCRwZG8sJ29mZmljZV9zZXR0aW5nc19zYXZlZCcsJ29mZmljZV9zZXR0aW5ncycsJzEnLCRiKTsKICAgICAgICBvayh0cnVlKTsKICAgIH0KfQoKLy8g4pSA4pSAIFBST0pFQ1RTIOKUgOKUgAppZigkYWN0aW9uPT09J3Byb2plY3RzJyl7CiAgICAkcGRvPWRiKCk7CiAgICBpZigkbWV0aG9kPT09J0dFVCcpIG9rKCRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHByb2plY3RzIE9SREVSIEJZIGNyZWF0ZWRfYXQgREVTQyIpLT5mZXRjaEFsbCgpKTsKICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgncCcsdHJ1ZSk7CiAgICAgICAgJHRhZ3M9aXNzZXQoJGJbJ3RhZ3MnXSk/anNvbl9lbmNvZGUoJGJbJ3RhZ3MnXSxKU09OX1VORVNDQVBFRF9VTklDT0RFKTonW10nOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIHByb2plY3RzIChpZCxuYW1lLGNsaWVudCxwaG9uZSxzdGF0dXMsdG90YWwscmVjZWl2ZWQsc3RhcnRfZGF0ZSxkZWFkbGluZSxwcm9ncmVzcyxhc3NpZ25lZSx0YWdzLHJlY3VycmluZyxub3RlcykKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIG5hbWU9VkFMVUVTKG5hbWUpLGNsaWVudD1WQUxVRVMoY2xpZW50KSxwaG9uZT1WQUxVRVMocGhvbmUpLAogICAgICAgICAgICBzdGF0dXM9VkFMVUVTKHN0YXR1cyksdG90YWw9VkFMVUVTKHRvdGFsKSxyZWNlaXZlZD1WQUxVRVMocmVjZWl2ZWQpLAogICAgICAgICAgICBzdGFydF9kYXRlPVZBTFVFUyhzdGFydF9kYXRlKSxkZWFkbGluZT1WQUxVRVMoZGVhZGxpbmUpLHByb2dyZXNzPVZBTFVFUyhwcm9ncmVzcyksCiAgICAgICAgICAgIGFzc2lnbmVlPVZBTFVFUyhhc3NpZ25lZSksdGFncz1WQUxVRVModGFncykscmVjdXJyaW5nPVZBTFVFUyhyZWN1cnJpbmcpLG5vdGVzPVZBTFVFUyhub3RlcykiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsnbmFtZSddPz8nJywkYlsnY2xpZW50J10/PycnLCRiWydwaG9uZSddPz8nJywkYlsnc3RhdHVzJ10/PyduZXcnLAogICAgICAgICAgICAgICAgJGJbJ3RvdGFsJ10/PzAsJGJbJ3JlY2VpdmVkJ10/PzAsJGJbJ3N0YXJ0J10/P251bGwsJGJbJ2RlYWRsaW5lJ10/P251bGwsCiAgICAgICAgICAgICAgICAkYlsncHJvZ3Jlc3MnXT8/MCwkYlsnYXNzaWduZWUnXT8/JycsJHRhZ3MsJGJbJ3JlY3VycmluZyddPz8nJywkYlsnbm90ZXMnXT8/JyddKTsKICAgICAgICBvayhbJ2lkJz0+JGlkXSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J0RFTEVURScpeyRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIHByb2plY3RzIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJF9HRVRbJ2lkJ10/PycnXSk7b2sodHJ1ZSk7fQp9CgovLyDilIDilIAgVEFTS1Mg4pSA4pSACmlmKCRhY3Rpb249PT0ndGFza3MnKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJykgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gdGFza3MgT1JERVIgQlkgZHVlX2RhdGUgSVMgTlVMTCwgZHVlX2RhdGUgQVNDLCBjcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7JGlkPSRiWydpZCddPz91bmlxaWQoJ3QnLHRydWUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIHRhc2tzIChpZCx0ZXh0LGFzc2lnbmVlLHVyZ2VudCxkb25lLGR1ZV9kYXRlLG5vdGUpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgdGV4dD1WQUxVRVModGV4dCksYXNzaWduZWU9VkFMVUVTKGFzc2lnbmVlKSwKICAgICAgICAgICAgdXJnZW50PVZBTFVFUyh1cmdlbnQpLGRvbmU9VkFMVUVTKGRvbmUpLGR1ZV9kYXRlPVZBTFVFUyhkdWVfZGF0ZSksbm90ZT1WQUxVRVMobm90ZSkiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsndGV4dCddPz8nJywkYlsnYXNzaWduZWUnXT8/JycsJGJbJ3VyZ2VudCddPz8wLCRiWydkb25lJ10/PzAsCiAgICAgICAgICAgICAgICAkYlsnZHVlX2RhdGUnXT8/bnVsbCwkYlsnbm90ZSddPz8nJ10pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gdGFza3MgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KCi8vIOKUgOKUgCBOT1RFUyDilIDilIAKaWYoJGFjdGlvbj09PSdub3RlcycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBub3RlcyBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7JGlkPSRiWydpZCddPz91bmlxaWQoJ24nLHRydWUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIG5vdGVzIChpZCx0aXRsZSxib2R5LGF1dGhvcix1cmdlbnQpIFZBTFVFUyAoPyw/LD8sPyw/KQogICAgICAgICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSB0aXRsZT1WQUxVRVModGl0bGUpLGJvZHk9VkFMVUVTKGJvZHkpLGF1dGhvcj1WQUxVRVMoYXV0aG9yKSx1cmdlbnQ9VkFMVUVTKHVyZ2VudCkiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsndGl0bGUnXT8/JycsJGJbJ2JvZHknXT8/JycsJGJbJ2F1dGhvciddPz8nJywkYlsndXJnZW50J10/PzBdKTsKICAgICAgICBvayhbJ2lkJz0+JGlkXSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J0RFTEVURScpeyRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIG5vdGVzIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJF9HRVRbJ2lkJ10/PycnXSk7b2sodHJ1ZSk7fQp9CgovLyDilIDilIAgQ0xJRU5UUyDilIDilIAKaWYoJGFjdGlvbj09PSdjbGllbnRzJyl7CiAgICAkcGRvPWRiKCk7CiAgICBpZigkbWV0aG9kPT09J0dFVCcpIG9rKCRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIGNsaWVudHMgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIiktPmZldGNoQWxsKCkpOwogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOyRpZD0kYlsnaWQnXT8/dW5pcWlkKCdjJyx0cnVlKTsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBjbGllbnRzIChpZCxuYW1lLGNvbXBhbnksZW1haWwscGhvbmUsZWlrLG5vdGVzLHZhdF9udW1iZXIsYWRkcmVzcyxjaXR5LGNvdW50cnksbW9sLGliYW4sY29udGFjdF9wZXJzb24pCiAgICAgICAgICAgIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/KQogICAgICAgICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSBuYW1lPVZBTFVFUyhuYW1lKSxjb21wYW55PVZBTFVFUyhjb21wYW55KSxlbWFpbD1WQUxVRVMoZW1haWwpLAogICAgICAgICAgICBwaG9uZT1WQUxVRVMocGhvbmUpLGVpaz1WQUxVRVMoZWlrKSxub3Rlcz1WQUxVRVMobm90ZXMpLHZhdF9udW1iZXI9VkFMVUVTKHZhdF9udW1iZXIpLAogICAgICAgICAgICBhZGRyZXNzPVZBTFVFUyhhZGRyZXNzKSxjaXR5PVZBTFVFUyhjaXR5KSxjb3VudHJ5PVZBTFVFUyhjb3VudHJ5KSxtb2w9VkFMVUVTKG1vbCksCiAgICAgICAgICAgIGliYW49VkFMVUVTKGliYW4pLGNvbnRhY3RfcGVyc29uPVZBTFVFUyhjb250YWN0X3BlcnNvbikiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsnbmFtZSddPz8nJywkYlsnY29tcGFueSddPz8nJywkYlsnZW1haWwnXT8/JycsJGJbJ3Bob25lJ10/PycnLCRiWydlaWsnXT8/JycsJGJbJ25vdGVzJ10/PycnLAogICAgICAgICAgICAgICAgJGJbJ3ZhdF9udW1iZXInXT8/JycsJGJbJ2FkZHJlc3MnXT8/JycsJGJbJ2NpdHknXT8/JycsJGJbJ2NvdW50cnknXT8/J9CR0YrQu9Cz0LDRgNC40Y8nLCRiWydtb2wnXT8/JycsCiAgICAgICAgICAgICAgICAkYlsnaWJhbiddPz8nJywkYlsnY29udGFjdF9wZXJzb24nXT8/JyddKTsKICAgICAgICBvayhbJ2lkJz0+JGlkXSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J0RFTEVURScpeyRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIGNsaWVudHMgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KCi8vIOKUgOKUgCBIT1NUSU5HIOKUgOKUgAppZigkYWN0aW9uPT09J2hvc3RpbmcnKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJykgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gaG9zdGluZyBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7JGlkPSRiWydpZCddPz91bmlxaWQoJ2gnLHRydWUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGhvc3RpbmcgKGlkLGRvbWFpbixjbGllbnQsc2VydmVyLHR5cGUsZGlzayxwbGFuLHNzbF9leHBpcmVzKSBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgZG9tYWluPVZBTFVFUyhkb21haW4pLGNsaWVudD1WQUxVRVMoY2xpZW50KSxzZXJ2ZXI9VkFMVUVTKHNlcnZlciksCiAgICAgICAgICAgIHR5cGU9VkFMVUVTKHR5cGUpLGRpc2s9VkFMVUVTKGRpc2spLHBsYW49VkFMVUVTKHBsYW4pLHNzbF9leHBpcmVzPVZBTFVFUyhzc2xfZXhwaXJlcykiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsnZG9tYWluJ10/PycnLCRiWydjbGllbnQnXT8/JycsJGJbJ3NlcnZlciddPz8nJywkYlsndHlwZSddPz8nY1BhbmVsJywKICAgICAgICAgICAgICAgICRiWydkaXNrJ10/PycnLCRiWydwbGFuJ10/PydTdGFydGVyJywkYlsnc3NsJ10/P251bGxdKTsKICAgICAgICBvayhbJ2lkJz0+JGlkXSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J0RFTEVURScpeyRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIGhvc3RpbmcgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KCi8vIOKUgOKUgCBQQVNTV09SRFMg4pSA4pSACmlmKCRhY3Rpb249PT0ncGFzc3dvcmRzJyl7CiAgICAkcGRvPWRiKCk7CiAgICBodWJfc2NoZW1hX2V4dHJhKCRwZG8pOwogICAgdHJ5eyRwZG8tPmV4ZWMoIkFMVEVSIFRBQkxFIHBhc3N3b3JkcyBBREQgQ09MVU1OIGNsaWVudCBWQVJDSEFSKDI1NSkiKTt9Y2F0Y2goRXhjZXB0aW9uICRlKXt9CiAgICB0cnl7JHBkby0+ZXhlYygiQUxURVIgVEFCTEUgcGFzc3dvcmRzIEFERCBDT0xVTU4gdmlzaWJsZV90byBURVhUIik7fWNhdGNoKEV4Y2VwdGlvbiAkZSl7fQogICAgaWYoJG1ldGhvZD09PSdHRVQnKXsKICAgICAgICBpZihodWJfc2Vzc2lvbl9pc19hZG1pbigpKXsKICAgICAgICAgICAgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gcGFzc3dvcmRzIE9SREVSIEJZIGNsaWVudCwgY3JlYXRlZF9hdCBERVNDIiktPmZldGNoQWxsKCkpOwogICAgICAgIH0KICAgICAgICAkdWlkPWh1Yl9zZXNzaW9uX3VzZXJfaWQoKTsKICAgICAgICBpZighJHVpZCkgZXJyKCfQndGP0LzQsCDQsNC60YLQuNCy0L3QsCDRgdC10YHQuNGPJyk7CiAgICAgICAgJHJvd3M9JHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gcGFzc3dvcmRzIE9SREVSIEJZIGNsaWVudCwgY3JlYXRlZF9hdCBERVNDIiktPmZldGNoQWxsKCk7CiAgICAgICAgJHJvd3M9YXJyYXlfdmFsdWVzKGFycmF5X2ZpbHRlcigkcm93cyxmdW5jdGlvbigkcikgdXNlICgkdWlkKXsKICAgICAgICAgICAgJGlkcz1qc29uX2RlY29kZSgkclsndmlzaWJsZV90byddPz8nW10nLHRydWUpOwogICAgICAgICAgICBpZighaXNfYXJyYXkoJGlkcykpICRpZHM9W107CiAgICAgICAgICAgIHJldHVybiBpbl9hcnJheSgkdWlkLGFycmF5X21hcCgnaW50dmFsJywkaWRzKSx0cnVlKTsKICAgICAgICB9KSk7CiAgICAgICAgb2soJHJvd3MpOwogICAgfQogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgaWYoIWh1Yl9zZXNzaW9uX2lzX2FkbWluKCkpIGVycign0KHQsNC80L4g0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YAg0LzQvtC20LUg0LTQsCDRg9C/0YDQsNCy0LvRj9Cy0LAg0LTQvtGB0YLRitC/0LgnKTsKICAgICAgICAkYj1ib2R5KCk7JGlkPSRiWydpZCddPz91bmlxaWQoJ3B3Jyx0cnVlKTsKICAgICAgICAkdmlzaWJsZVJhdz0kYlsndmlzaWJsZV90byddPz9bXTsKICAgICAgICBpZighaXNfYXJyYXkoJHZpc2libGVSYXcpKSAkdmlzaWJsZVJhdz1bXTsKICAgICAgICAkdmlzaWJsZT1hcnJheV92YWx1ZXMoYXJyYXlfZmlsdGVyKGFycmF5X21hcCgnaW50dmFsJywkdmlzaWJsZVJhdykpKTsKICAgICAgICAkdmlzaWJsZUpzb249anNvbl9lbmNvZGUoJHZpc2libGUsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gcGFzc3dvcmRzIChpZCxzaXRlLHVzZXJuYW1lLHBhc3MsY2F0ZWdvcnksY2xpZW50LHZpc2libGVfdG8pIFZBTFVFUyAoPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgc2l0ZT1WQUxVRVMoc2l0ZSksdXNlcm5hbWU9VkFMVUVTKHVzZXJuYW1lKSxwYXNzPVZBTFVFUyhwYXNzKSwKICAgICAgICAgICAgY2F0ZWdvcnk9VkFMVUVTKGNhdGVnb3J5KSxjbGllbnQ9VkFMVUVTKGNsaWVudCksdmlzaWJsZV90bz1WQUxVRVModmlzaWJsZV90bykiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsnc2l0ZSddPz8nJywkYlsndXNlciddPz8nJywkYlsncGFzcyddPz8nJywkYlsnY2F0J10/PydvdGhlcicsJGJbJ2NsaWVudCddPz8nJywkdmlzaWJsZUpzb25dKTsKICAgICAgICBhdWRpdCgkcGRvLGlzc2V0KCRiWydpZCddKT8ncGFzc3dvcmRfc2F2ZWQnOidwYXNzd29yZF9jcmVhdGVkJywncGFzc3dvcmRzJywkaWQsWydjbGllbnQnPT4kYlsnY2xpZW50J10/PycnLCdzaXRlJz0+JGJbJ3NpdGUnXT8/JycsJ3Zpc2libGVfdG8nPT4kdmlzaWJsZV0pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7CiAgICAgICAgaWYoIWh1Yl9zZXNzaW9uX2lzX2FkbWluKCkpIGVycign0KHQsNC80L4g0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YAg0LzQvtC20LUg0LTQsCDRgtGA0LjQtSDQtNC+0YHRgtGK0L/QuCcpOwogICAgICAgICRpZD0kX0dFVFsnaWQnXT8/Jyc7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gcGFzc3dvcmRzIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJGlkXSk7CiAgICAgICAgYXVkaXQoJHBkbywncGFzc3dvcmRfZGVsZXRlZCcsJ3Bhc3N3b3JkcycsKHN0cmluZykkaWQpOwogICAgICAgIG9rKHRydWUpOwogICAgfQp9CgovLyDilIDilIAgT0ZGRVJTIOKUgOKUgAppZigkYWN0aW9uPT09J29mZmVycycpewogICAgJHBkbz1kYigpOwogICAgZm9yZWFjaChbCiAgICAgICAgIkFMVEVSIFRBQkxFIG9mZmVycyBBREQgQ09MVU1OIG9mZmVyX3R5cGUgVkFSQ0hBUigzMCkgREVGQVVMVCAnb25lX3RpbWUnIiwKICAgICAgICAiQUxURVIgVEFCTEUgb2ZmZXJzIEFERCBDT0xVTU4gZGV0YWlscyBMT05HVEVYVCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIG9mZmVycyBBREQgQ09MVU1OIHVwZGF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAgT04gVVBEQVRFIENVUlJFTlRfVElNRVNUQU1QIiwKICAgIF0gYXMgJHNxbCl7dHJ5eyRwZG8tPmV4ZWMoJHNxbCk7fWNhdGNoKEV4Y2VwdGlvbiAkZSl7fX0KICAgIGlmKCRtZXRob2Q9PT0nR0VUJyl7CiAgICAgICAgaWYoIWVtcHR5KCRfR0VUWydpZCddKSl7CiAgICAgICAgICAgICRzdD0kcGRvLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIG9mZmVycyBXSEVSRSBpZD0/Iik7CiAgICAgICAgICAgICRzdC0+ZXhlY3V0ZShbJF9HRVRbJ2lkJ11dKTsKICAgICAgICAgICAgJHJvdz0kc3QtPmZldGNoKCk7CiAgICAgICAgICAgIGlmKCEkcm93KSBlcnIoJ9Ce0YTQtdGA0YLQsNGC0LAg0L3QtSDQtSDQvdCw0LzQtdGA0LXQvdCwJyk7CiAgICAgICAgICAgIG9rKCRyb3cpOwogICAgICAgIH0KICAgICAgICBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBvZmZlcnMgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIiktPmZldGNoQWxsKCkpOwogICAgfQogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOyRpZD0kYlsnaWQnXT8/dW5pcWlkKCdvJyx0cnVlKTsKICAgICAgICAkZGV0YWlscz0kYlsnZGV0YWlscyddPz9udWxsOwogICAgICAgIGlmKGlzX2FycmF5KCRkZXRhaWxzKSkgJGRldGFpbHM9anNvbl9lbmNvZGUoJGRldGFpbHMsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gb2ZmZXJzIChpZCxudW0sY2xpZW50LHNlcnZpY2UsdG90YWwsc3RhdHVzLG9mZmVyX3R5cGUsZGV0YWlscykgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIG51bT1WQUxVRVMobnVtKSxjbGllbnQ9VkFMVUVTKGNsaWVudCksc2VydmljZT1WQUxVRVMoc2VydmljZSksCiAgICAgICAgICAgIHRvdGFsPVZBTFVFUyh0b3RhbCksc3RhdHVzPVZBTFVFUyhzdGF0dXMpLG9mZmVyX3R5cGU9VkFMVUVTKG9mZmVyX3R5cGUpLGRldGFpbHM9VkFMVUVTKGRldGFpbHMpIikKICAgICAgICAgICAgLT5leGVjdXRlKFskaWQsJGJbJ251bSddPz8nJywkYlsnY2xpZW50J10/PycnLCRiWydzZXJ2aWNlJ10/PycnLCRiWyd0b3RhbCddPz8wLAogICAgICAgICAgICAgICAgJGJbJ3N0YXR1cyddPz8n0KfQsNC60LDRidCwJywkYlsnb2ZmZXJfdHlwZSddPz8nb25lX3RpbWUnLCRkZXRhaWxzXSk7CiAgICAgICAgb2soWydpZCc9PiRpZF0pOwogICAgfQogICAgaWYoJG1ldGhvZD09PSdERUxFVEUnKXskcGRvLT5wcmVwYXJlKCJERUxFVEUgRlJPTSBvZmZlcnMgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KCi8vIOKUgOKUgCBDT05UUkFDVFMg4pSA4pSACmlmKCRhY3Rpb249PT0nY29udHJhY3RzJyl7CiAgICAkcGRvPWRiKCk7CiAgICBpZigkbWV0aG9kPT09J0dFVCcpIG9rKCRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIGNvbnRyYWN0cyBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7JGlkPSRiWydpZCddPz91bmlxaWQoJ2NvbicsdHJ1ZSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gY29udHJhY3RzIChpZCxuYW1lLGNsaWVudCxzaWduX2RhdGUpIFZBTFVFUyAoPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgbmFtZT1WQUxVRVMobmFtZSksY2xpZW50PVZBTFVFUyhjbGllbnQpLHNpZ25fZGF0ZT1WQUxVRVMoc2lnbl9kYXRlKSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWyduYW1lJ10/PycnLCRiWydjbGllbnQnXT8/JycsJGJbJ3NpZ25fZGF0ZSddPz9udWxsXSk7CiAgICAgICAgb2soWydpZCc9PiRpZF0pOwogICAgfQogICAgaWYoJG1ldGhvZD09PSdERUxFVEUnKXskcGRvLT5wcmVwYXJlKCJERUxFVEUgRlJPTSBjb250cmFjdHMgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KCi8vIOKUgOKUgCBBQ1RJVklUWSDilIDilIAKaWYoJGFjdGlvbj09PSdhY3Rpdml0eScpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBhY3Rpdml0eSBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MgTElNSVQgNTAiKS0+ZmV0Y2hBbGwoKSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gYWN0aXZpdHkgKHdobyx3aGF0LGNvbG9yLGluaXRpYWxzKSBWQUxVRVMgKD8sPyw/LD8pIikKICAgICAgICAgICAgLT5leGVjdXRlKFskYlsnd2hvJ10/PyfQodC40YHRgtC10LzQsCcsJGJbJ3doYXQnXT8/JycsJGJbJ2NvbG9yJ10/Pydhdi1wJywkYlsnaW5pdGlhbHMnXT8/Jz8/J10pOwogICAgICAgIG9rKHRydWUpOwogICAgfQp9CgppZigkYWN0aW9uPT09J2F1ZGl0X2xvZycpewogICAgJHBkbz1kYigpOwogICAgaHViX3NjaGVtYV9leHRyYSgkcGRvKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJyl7CiAgICAgICAgaWYoIWh1Yl9zZXNzaW9uX2lzX2FkbWluKCkpIGVycign0KHQsNC80L4g0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YAg0LzQvtC20LUg0LTQsCDQstC40LbQtNCwIGF1ZGl0IGxvZycpOwogICAgICAgICRyb3dzPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIGF1ZGl0X2xvZyBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MgTElNSVQgMTUwIiktPmZldGNoQWxsKCk7CiAgICAgICAgb2soJHJvd3MpOwogICAgfQogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOwogICAgICAgIGF1ZGl0KCRwZG8sJGJbJ2FjdGlvbiddPz8nZnJvbnRlbmRfZXZlbnQnLCRiWyd0YXJnZXRfdHlwZSddPz8nJywkYlsndGFyZ2V0X2lkJ10/PycnLCRiWydkZXRhaWxzJ10/PycnKTsKICAgICAgICBvayh0cnVlKTsKICAgIH0KfQoKaWYoJGFjdGlvbj09PSdhaV9zY2FuX3Nlc3Npb24nKXsKICAgICRwZG89ZGIoKTsKICAgIGh1Yl9zY2hlbWFfZXh0cmEoJHBkbyk7CiAgICAkdG9rZW49YmluMmhleChyYW5kb21fYnl0ZXMoMjQpKTsKICAgICR1aWQ9JF9TRVNTSU9OWydodWJfdXNlcl9pZCddPz9udWxsOwogICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gYWlfc2Nhbl9zZXNzaW9ucyAodG9rZW4sY3JlYXRlZF9ieSxleHBpcmVzX2F0KSBWQUxVRVMgKD8sPyxEQVRFX0FERChOT1coKSwgSU5URVJWQUwgMiBIT1VSKSkiKQogICAgICAgIC0+ZXhlY3V0ZShbJHRva2VuLCR1aWRdKTsKICAgIGF1ZGl0KCRwZG8sJ2FpX3NjYW5fcXJfY3JlYXRlZCcsJ2FpX3NjYW5zJywnJywkdG9rZW4pOwogICAgb2soWyd0b2tlbic9PiR0b2tlbiwnZXhwaXJlc19hdCc9PmRhdGUoJ1ktbS1kIEg6aTpzJyxzdHJ0b3RpbWUoJysyIGhvdXJzJykpXSk7Cn0KCmlmKCRhY3Rpb249PT0nYWlfbW9iaWxlX3VwbG9hZCcpewogICAgJHBkbz1kYigpOwogICAgaHViX3NjaGVtYV9leHRyYSgkcGRvKTsKICAgICR0b2tlbj0kX0dFVFsndG9rZW4nXT8/KCRfUE9TVFsndG9rZW4nXT8/JycpOwogICAgaWYoISR0b2tlbiB8fCAhcHJlZ19tYXRjaCgnL15bYS1mMC05XXs0OH0kLycsJHRva2VuKSkgZXJyKCfQndC10LLQsNC70LjQtNC10L0gUVIg0LvQuNC90LonKTsKICAgICRzdD0kcGRvLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIGFpX3NjYW5fc2Vzc2lvbnMgV0hFUkUgdG9rZW49PyBBTkQgZXhwaXJlc19hdD5OT1coKSIpOwogICAgJHN0LT5leGVjdXRlKFskdG9rZW5dKTsKICAgICRzZXNzPSRzdC0+ZmV0Y2goKTsKICAgIGlmKCEkc2VzcykgZXJyKCdRUiDQu9C40L3QutGK0YIg0LUg0LjQt9GC0LXQutGK0LsnKTsKICAgIGlmKGVtcHR5KCRfRklMRVNbJ2ZpbGUnXSkgfHwgKCRfRklMRVNbJ2ZpbGUnXVsnZXJyb3InXT8/VVBMT0FEX0VSUl9OT19GSUxFKSE9PVVQTE9BRF9FUlJfT0spIGVycign0JvQuNC/0YHQstCwINGE0LDQudC7Jyk7CiAgICAkZj0kX0ZJTEVTWydmaWxlJ107CiAgICBpZigoaW50KSRmWydzaXplJ10+MTQqMTAyNCoxMDI0KSBlcnIoJ9Ck0LDQudC70YrRgiDQtSDQv9GA0LXQutCw0LvQtdC90L4g0LPQvtC70Y/QvCcpOwogICAgJG1pbWU9KGZ1bmN0aW9uX2V4aXN0cygnbWltZV9jb250ZW50X3R5cGUnKT9taW1lX2NvbnRlbnRfdHlwZSgkZlsndG1wX25hbWUnXSk6KCRmWyd0eXBlJ10/PycnKSkgPzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CiAgICAkYWxsb3dlZD1bJ2ltYWdlL2pwZWcnLCdpbWFnZS9wbmcnLCdpbWFnZS93ZWJwJywnaW1hZ2UvaGVpYycsJ2ltYWdlL2hlaWYnLCdhcHBsaWNhdGlvbi9wZGYnXTsKICAgIGlmKCFpbl9hcnJheSgkbWltZSwkYWxsb3dlZCx0cnVlKSkgZXJyKCfQn9C+0LfQstC+0LvQtdC90Lgg0YHQsCBQREYsIEpQRywgUE5HLCBXRUJQLCBIRUlDJyk7CiAgICAkZGlyPV9fRElSX18uJy91cGxvYWRzL2FpX3NjYW5zJzsKICAgIGlmKCFpc19kaXIoJGRpcikgJiYgIW1rZGlyKCRkaXIsMDc3NSx0cnVlKSkgZXJyKCfQndC1INC80L7Qs9CwINC00LAg0YHRitC30LTQsNC8INC/0LDQv9C60LAg0LfQsCDRhNCw0LnQu9C+0LLQtScpOwogICAgJGV4dD1zdHJ0b2xvd2VyKHBhdGhpbmZvKCRmWyduYW1lJ10/Pyd1cGxvYWQnLFBBVEhJTkZPX0VYVEVOU0lPTikpOwogICAgaWYoISRleHQpICRleHQ9JG1pbWU9PT0nYXBwbGljYXRpb24vcGRmJz8ncGRmJzonanBnJzsKICAgICRpZD11bmlxaWQoJ2FpcycsdHJ1ZSk7CiAgICAkc2FmZU5hbWU9JGlkLicuJy5wcmVnX3JlcGxhY2UoJy9bXmEtejAtOV0rLycsJycsJGV4dCk7CiAgICAkZGVzdD0kZGlyLicvJy4kc2FmZU5hbWU7CiAgICBpZighbW92ZV91cGxvYWRlZF9maWxlKCRmWyd0bXBfbmFtZSddLCRkZXN0KSkgZXJyKCfQndC1INC80L7Qs9CwINC00LAg0LfQsNC/0LjRiNCwINGE0LDQudC70LAnKTsKICAgICRmaWxlUGF0aD0ndXBsb2Fkcy9haV9zY2Fucy8nLiRzYWZlTmFtZTsKICAgICRwZGZQYXRoPSRtaW1lPT09J2FwcGxpY2F0aW9uL3BkZic/JGZpbGVQYXRoOicnOwogICAgaWYoc3RyaXBvcygkbWltZSwnaW1hZ2UvJyk9PT0wKXsKICAgICAgICAkcGRmTmFtZT0kaWQuJy5wZGYnOwogICAgICAgICRwZGZEZXN0PSRkaXIuJy8nLiRwZGZOYW1lOwogICAgICAgIGlmKGFpX2NvbnZlcnRfaW1hZ2VfdG9fcGRmKCRkZXN0LCRtaW1lLCRwZGZEZXN0KSkgJHBkZlBhdGg9J3VwbG9hZHMvYWlfc2NhbnMvJy4kcGRmTmFtZTsKICAgIH0KICAgICRkb2NUeXBlPSRfUE9TVFsnZG9jX3R5cGUnXT8/J2ludm9pY2UnOwogICAgJG1hbnVhbD0oc3RyaW5nKSgkX1BPU1RbJ3Jhd190ZXh0J10/PycnKTsKICAgICRhaT1haV9vcGVuYWlfZXh0cmFjdCgkZGVzdCwkbWltZSwkZlsnbmFtZSddPz8kc2FmZU5hbWUsJGRvY1R5cGUsJG1hbnVhbCk7CiAgICAkZXg9JGFpWydvayddPygkYWlbJ2V4dHJhY3RlZCddPz9bXSk6YWlfYmFzaWNfZXh0cmFjdCgkbWFudWFsKTsKICAgIGlmKCEkZXggJiYgJG1hbnVhbCkgJGV4PWFpX2Jhc2ljX2V4dHJhY3QoJG1hbnVhbCk7CiAgICAkY29uZj0kYWlbJ29rJ10/KGZsb2F0KSgkZXhbJ2NvbmZpZGVuY2UnXT8/MC45Mik6bWluKDAuODIsMC4zMCtjb3VudCgkZXgpKjAuMTApOwogICAgJHJhdz0kbWFudWFsID86ICgkYWlbJ29rJ10/KCRhaVsncmF3J10/PycnKTonJyk7CiAgICAkZGlnaXRhbFBkZlBhdGg9Jyc7CiAgICAkZGlnaXRhbE5hbWU9J2RpZ2l0YWxfJy4kaWQuJy5wZGYnOwogICAgaWYoYWlfY3JlYXRlX2RpZ2l0YWxfcGRmKCRleCwkZG9jVHlwZSwkZGlyLicvJy4kZGlnaXRhbE5hbWUpKSAkZGlnaXRhbFBkZlBhdGg9J3VwbG9hZHMvYWlfc2NhbnMvJy4kZGlnaXRhbE5hbWU7CiAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBhaV9zY2FucyAoaWQsZG9jX3R5cGUsY2xpZW50LGZpbGVfbmFtZSxmaWxlX3BhdGgscGRmX3BhdGgsZGlnaXRhbF9wZGZfcGF0aCx1cGxvYWRfdG9rZW4scmF3X3RleHQsZXh0cmFjdGVkLGNvbmZpZGVuY2Usc3RhdHVzLGNyZWF0ZWRfYnkpCiAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/KSIpCiAgICAgICAgLT5leGVjdXRlKFskaWQsJGRvY1R5cGUsJGV4WydjbGllbnQnXT8/KCRleFsnYnV5ZXJfbmFtZSddPz8nJyksYmFzZW5hbWUoJGZbJ25hbWUnXT8/JHNhZmVOYW1lKSwkZmlsZVBhdGgsJHBkZlBhdGgsJGRpZ2l0YWxQZGZQYXRoLCR0b2tlbiwkcmF3LAogICAgICAgICAgICBqc29uX2VuY29kZSgkZXgsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSksJGNvbmYsJGFpWydvayddPydyZWNvZ25pemVkJzondXBsb2FkZWQnLCdRUiB1cGxvYWQnXSk7CiAgICAkcGRvLT5wcmVwYXJlKCJVUERBVEUgYWlfc2Nhbl9zZXNzaW9ucyBTRVQgdXNlZF9hdD1OT1coKSBXSEVSRSB0b2tlbj0/IiktPmV4ZWN1dGUoWyR0b2tlbl0pOwogICAgYXVkaXQoJHBkbywnYWlfbW9iaWxlX3VwbG9hZCcsJ2FpX3NjYW5zJywkaWQsWydmaWxlJz0+JGZbJ25hbWUnXT8/JHNhZmVOYW1lLCdwZGYnPT4kcGRmUGF0aCwnZGlnaXRhbF9wZGYnPT4kZGlnaXRhbFBkZlBhdGgsJ29wZW5haSc9PiRhaVsnb2snXT8/ZmFsc2UsJ2Vycm9yJz0+JGFpWydlcnJvciddPz8nJ10pOwogICAgJG1zZz0kZGlnaXRhbFBkZlBhdGgKICAgICAgICA/ICfQoNCw0LfQv9C+0LfQvdCw0YLQviDRgSBPcGVuQUkg0Lgg0YHRitC30LTQsNC00LXQvSDRh9C40YHRgiDQtNC40LPQuNGC0LDQu9C10L0gUERGINC/0L4gbGF5b3V0LdCwINC90LAg0YHQvdC40LzQutCw0YLQsCcKICAgICAgICA6ICfQmtCw0YfQtdC90L4g0LUuIEFJINC90LUg0YPRgdC/0Y8g0LTQsCDQstGK0LfRgdGC0LDQvdC+0LLQuCBsYXlvdXQg0LfQsCDRh9C40YHRgiDQtNC40LPQuNGC0LDQu9C10L0gUERGOyDQv9GA0L7QsdCy0LDQuSDQv9C+LdGP0YHQvdCwLCDQuNC30L/RgNCw0LLQtdC90LAg0YHQvdC40LzQutCwLic7CiAgICBvayhbJ2lkJz0+JGlkLCdmaWxlX3BhdGgnPT4kZmlsZVBhdGgsJ3BkZl9wYXRoJz0+JHBkZlBhdGgsJ2RpZ2l0YWxfcGRmX3BhdGgnPT4kZGlnaXRhbFBkZlBhdGgsJ2V4dHJhY3RlZCc9PiRleCwnY29uZmlkZW5jZSc9PiRjb25mLCdvcGVuYWknPT4hZW1wdHkoJGFpWydvayddKSwnbWVzc2FnZSc9PiRtc2ddKTsKfQoKaWYoJGFjdGlvbj09PSdhaV9zY2FuX3JlcHJvY2VzcycpewogICAgJHBkbz1kYigpOwogICAgaHViX3NjaGVtYV9leHRyYSgkcGRvKTsKICAgIGlmKCRtZXRob2QhPT0nUE9TVCcpIGVycign0JzQtdGC0L7QtNGK0YIg0L3QtSDQtSDQv9C+0LfQstC+0LvQtdC9Jyw0MDUpOwogICAgJGI9Ym9keSgpOwogICAgJGlkPShzdHJpbmcpKCRiWydpZCddPz8nJyk7CiAgICBpZigkaWQ9PT0nJykgZXJyKCfQm9C40L/RgdCy0LAg0LTQvtC60YPQvNC10L3RgicpOwogICAgJHN0PSRwZG8tPnByZXBhcmUoIlNFTEVDVCAqIEZST00gYWlfc2NhbnMgV0hFUkUgaWQ9PyIpOwogICAgJHN0LT5leGVjdXRlKFskaWRdKTsKICAgICRyb3c9JHN0LT5mZXRjaCgpOwogICAgaWYoISRyb3cpIGVycign0JTQvtC60YPQvNC10L3RgtGK0YIg0L3QtSDQtSDQvdCw0LzQtdGA0LXQvScpOwogICAgJHJlbD0kcm93WydmaWxlX3BhdGgnXSA/OiAkcm93WydwZGZfcGF0aCddOwogICAgaWYoISRyZWwpIGVycign0J3Rj9C80LAg0L7RgNC40LPQuNC90LDQu9C10L0g0YTQsNC50Lsg0LfQsCDQv9C+0LLRgtC+0YDQvdC+INGA0LDQt9C/0L7Qt9C90LDQstCw0L3QtScpOwogICAgJHNyYz1fX0RJUl9fLicvJy5sdHJpbSgkcmVsLCcvJyk7CiAgICBpZighaXNfZmlsZSgkc3JjKSkgZXJyKCfQntGA0LjQs9C40L3QsNC70L3QuNGP0YIg0YTQsNC50Lsg0LvQuNC/0YHQstCwINC90LAg0YHRitGA0LLRitGA0LAnKTsKICAgICRtaW1lPShmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJyk/bWltZV9jb250ZW50X3R5cGUoJHNyYyk6JycpID86ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOwogICAgJGRvY1R5cGU9JHJvd1snZG9jX3R5cGUnXSA/OiAnaW52b2ljZSc7CiAgICAkbWFudWFsPShzdHJpbmcpKCRyb3dbJ3Jhd190ZXh0J10/PycnKTsKICAgICRhaT1haV9vcGVuYWlfZXh0cmFjdCgkc3JjLCRtaW1lLCRyb3dbJ2ZpbGVfbmFtZSddID86IGJhc2VuYW1lKCRzcmMpLCRkb2NUeXBlLCRtYW51YWwpOwogICAgaWYoZW1wdHkoJGFpWydvayddKSkgZXJyKCdPcGVuQUkg0L3QtSDQstGK0YDQvdCwIGxheW91dDogJy4oJGFpWydlcnJvciddPz8ndW5rbm93bicpKTsKICAgICRleD0kYWlbJ2V4dHJhY3RlZCddPz9bXTsKICAgICRkaXI9X19ESVJfXy4nL3VwbG9hZHMvYWlfc2NhbnMnOwogICAgaWYoIWlzX2RpcigkZGlyKSkgQG1rZGlyKCRkaXIsMDc3NSx0cnVlKTsKICAgICRkaWdpdGFsUmVsPScnOwogICAgJGRpZ2l0YWxBYnM9JGRpci4nL2RpZ2l0YWxfJy4kaWQuJy5wZGYnOwogICAgaWYoYWlfY3JlYXRlX2RpZ2l0YWxfcGRmKCRleCwkZG9jVHlwZSwkZGlnaXRhbEFicykpICRkaWdpdGFsUmVsPSd1cGxvYWRzL2FpX3NjYW5zL2RpZ2l0YWxfJy4kaWQuJy5wZGYnOwogICAgJGNvbmY9KGZsb2F0KSgkZXhbJ2NvbmZpZGVuY2UnXT8/MC45Myk7CiAgICAkcGRvLT5wcmVwYXJlKCJVUERBVEUgYWlfc2NhbnMgU0VUIGV4dHJhY3RlZD0/LCByYXdfdGV4dD0/LCBjb25maWRlbmNlPT8sIHN0YXR1cz0/LCBkaWdpdGFsX3BkZl9wYXRoPT8sIGNsaWVudD0/IFdIRVJFIGlkPT8iKQogICAgICAgIC0+ZXhlY3V0ZShbanNvbl9lbmNvZGUoJGV4LEpTT05fVU5FU0NBUEVEX1VOSUNPREUpLCRhaVsncmF3J10/PyRtYW51YWwsJGNvbmYsJGRpZ2l0YWxSZWw/J3JlY29nbml6ZWQnOidsYXlvdXRfbWlzc2luZycsJGRpZ2l0YWxSZWwsJGV4WydjbGllbnQnXT8/KCRleFsnYnV5ZXJfbmFtZSddPz8oJHJvd1snY2xpZW50J10/PycnKSksJGlkXSk7CiAgICBhdWRpdCgkcGRvLCdhaV9zY2FuX3JlcHJvY2VzcycsJ2FpX3NjYW5zJywkaWQsWydkaWdpdGFsX3BkZic9PiRkaWdpdGFsUmVsLCdsYXlvdXQnPT5jb3VudChhaV9sYXlvdXRfZWxlbWVudHMoJGV4KSldKTsKICAgIG9rKFsnaWQnPT4kaWQsJ2RpZ2l0YWxfcGRmX3BhdGgnPT4kZGlnaXRhbFJlbCwnZXh0cmFjdGVkJz0+JGV4LCdjb25maWRlbmNlJz0+JGNvbmYsJ21lc3NhZ2UnPT4kZGlnaXRhbFJlbD8nTGF5b3V0INC1INCy0YrQt9GB0YLQsNC90L7QstC10L0nOidPcGVuQUkg0LLRitGA0L3QsCDQtNCw0L3QvdC4LCDQvdC+INCx0LXQtyDQtNC+0YHRgtCw0YLRitGH0LXQvSBsYXlvdXQnXSk7Cn0KCmlmKCRhY3Rpb249PT0nYWlfc2NhbnMnKXsKICAgICRwZG89ZGIoKTsKICAgIGh1Yl9zY2hlbWFfZXh0cmEoJHBkbyk7CiAgICBpZigkbWV0aG9kPT09J0dFVCcpewogICAgICAgICRyb3dzPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIGFpX3NjYW5zIE9SREVSIEJZIGNyZWF0ZWRfYXQgREVTQyBMSU1JVCA4MCIpLT5mZXRjaEFsbCgpOwogICAgICAgIGZvcmVhY2goJHJvd3MgYXMgJiRyb3cpewogICAgICAgICAgICBpZihlbXB0eSgkcm93WydwZGZfcGF0aCddKSAmJiAhZW1wdHkoJHJvd1snZmlsZV9wYXRoJ10pKXsKICAgICAgICAgICAgICAgICRzcmM9X19ESVJfXy4nLycubHRyaW0oJHJvd1snZmlsZV9wYXRoJ10sJy8nKTsKICAgICAgICAgICAgICAgIGlmKGlzX2ZpbGUoJHNyYykpewogICAgICAgICAgICAgICAgICAgICRtaW1lPShmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJyk/bWltZV9jb250ZW50X3R5cGUoJHNyYyk6JycpID86ICcnOwogICAgICAgICAgICAgICAgICAgIGlmKCRtaW1lPT09J2FwcGxpY2F0aW9uL3BkZicpewogICAgICAgICAgICAgICAgICAgICAgICAkcm93WydwZGZfcGF0aCddPSRyb3dbJ2ZpbGVfcGF0aCddOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmKHN0cmlwb3MoJG1pbWUsJ2ltYWdlLycpPT09MCkgewogICAgICAgICAgICAgICAgICAgICAgICAkcGRmUmVsPSd1cGxvYWRzL2FpX3NjYW5zLycuJHJvd1snaWQnXS4nLnBkZic7CiAgICAgICAgICAgICAgICAgICAgICAgICRwZGZBYnM9X19ESVJfXy4nLycuJHBkZlJlbDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoYWlfY29udmVydF9pbWFnZV90b19wZGYoJHNyYywkbWltZSwkcGRmQWJzKSkgJHJvd1sncGRmX3BhdGgnXT0kcGRmUmVsOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZighZW1wdHkoJHJvd1sncGRmX3BhdGgnXSkpewogICAgICAgICAgICAgICAgICAgICAgICB0cnl7JHBkby0+cHJlcGFyZSgiVVBEQVRFIGFpX3NjYW5zIFNFVCBwZGZfcGF0aD0/IFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJHJvd1sncGRmX3BhdGgnXSwkcm93WydpZCddXSk7fWNhdGNoKEV4Y2VwdGlvbiAkZSl7fQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZihlbXB0eSgkcm93WydkaWdpdGFsX3BkZl9wYXRoJ10pKXsKICAgICAgICAgICAgICAgICRleD1qc29uX2RlY29kZSgkcm93WydleHRyYWN0ZWQnXT8/J3t9Jyx0cnVlKT86W107CiAgICAgICAgICAgICAgICBpZigkZXgpewogICAgICAgICAgICAgICAgICAgICRkaWdpdGFsUmVsPSd1cGxvYWRzL2FpX3NjYW5zL2RpZ2l0YWxfJy4kcm93WydpZCddLicucGRmJzsKICAgICAgICAgICAgICAgICAgICAkZGlnaXRhbEFicz1fX0RJUl9fLicvJy4kZGlnaXRhbFJlbDsKICAgICAgICAgICAgICAgICAgICBpZihhaV9jcmVhdGVfZGlnaXRhbF9wZGYoJGV4LCRyb3dbJ2RvY190eXBlJ10/PydpbnZvaWNlJywkZGlnaXRhbEFicykpewogICAgICAgICAgICAgICAgICAgICAgICAkcm93WydkaWdpdGFsX3BkZl9wYXRoJ109JGRpZ2l0YWxSZWw7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyeXskcGRvLT5wcmVwYXJlKCJVUERBVEUgYWlfc2NhbnMgU0VUIGRpZ2l0YWxfcGRmX3BhdGg9PyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRkaWdpdGFsUmVsLCRyb3dbJ2lkJ11dKTt9Y2F0Y2goRXhjZXB0aW9uICRlKXt9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHVuc2V0KCRyb3cpOwogICAgICAgIG9rKCRyb3dzKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTsKICAgICAgICAkaWQ9JGJbJ2lkJ10/P3VuaXFpZCgnYWlzJyx0cnVlKTsKICAgICAgICAkcmF3PShzdHJpbmcpKCRiWydyYXdfdGV4dCddPz8nJyk7CiAgICAgICAgJGV4PWFpX2Jhc2ljX2V4dHJhY3QoJHJhdyk7CiAgICAgICAgJGV4PWFycmF5X21lcmdlKCRleCxpc19hcnJheSgkYlsnZXh0cmFjdGVkJ10/P251bGwpPyRiWydleHRyYWN0ZWQnXTpbXSk7CiAgICAgICAgJGNvbmY9bWluKDAuOTgsMC4zNStjb3VudCgkZXgpKjAuMTIpOwogICAgICAgICRkaXI9X19ESVJfXy4nL3VwbG9hZHMvYWlfc2NhbnMnOwogICAgICAgIGlmKCFpc19kaXIoJGRpcikpIEBta2RpcigkZGlyLDA3NzUsdHJ1ZSk7CiAgICAgICAgJGRpZ2l0YWxQZGZQYXRoPScnOwogICAgICAgIGlmKGFpX2NyZWF0ZV9kaWdpdGFsX3BkZigkZXgsJGJbJ2RvY190eXBlJ10/PydpbnZvaWNlJywkZGlyLicvZGlnaXRhbF8nLiRpZC4nLnBkZicpKSAkZGlnaXRhbFBkZlBhdGg9J3VwbG9hZHMvYWlfc2NhbnMvZGlnaXRhbF8nLiRpZC4nLnBkZic7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gYWlfc2NhbnMgKGlkLGRvY190eXBlLGNsaWVudCxmaWxlX25hbWUsZGlnaXRhbF9wZGZfcGF0aCxyYXdfdGV4dCxleHRyYWN0ZWQsY29uZmlkZW5jZSxzdGF0dXMsY3JlYXRlZF9ieSkKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/KQogICAgICAgICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSBkb2NfdHlwZT1WQUxVRVMoZG9jX3R5cGUpLGNsaWVudD1WQUxVRVMoY2xpZW50KSxmaWxlX25hbWU9VkFMVUVTKGZpbGVfbmFtZSksCiAgICAgICAgICAgIGRpZ2l0YWxfcGRmX3BhdGg9VkFMVUVTKGRpZ2l0YWxfcGRmX3BhdGgpLHJhd190ZXh0PVZBTFVFUyhyYXdfdGV4dCksZXh0cmFjdGVkPVZBTFVFUyhleHRyYWN0ZWQpLGNvbmZpZGVuY2U9VkFMVUVTKGNvbmZpZGVuY2UpLHN0YXR1cz1WQUxVRVMoc3RhdHVzKSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWydkb2NfdHlwZSddPz8naW52b2ljZScsJGV4WydjbGllbnQnXT8/KCRleFsnYnV5ZXJfbmFtZSddPz8oJGJbJ2NsaWVudCddPz8nJykpLCRiWydmaWxlX25hbWUnXT8/JycsJGRpZ2l0YWxQZGZQYXRoLCRyYXcsCiAgICAgICAgICAgICAgICBqc29uX2VuY29kZSgkZXgsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSksJGNvbmYsJGJbJ3N0YXR1cyddPz8nZHJhZnQnLCRiWydjcmVhdGVkX2J5J10/PycnXSk7CiAgICAgICAgYXVkaXQoJHBkbywnYWlfc2Nhbl9jcmVhdGVkJywnYWlfc2NhbnMnLCRpZCxbJ2RvY190eXBlJz0+JGJbJ2RvY190eXBlJ10/PydpbnZvaWNlJywnZmllbGRzJz0+YXJyYXlfa2V5cygkZXgpXSk7CiAgICAgICAgb2soWydpZCc9PiRpZCwnZGlnaXRhbF9wZGZfcGF0aCc9PiRkaWdpdGFsUGRmUGF0aCwnZXh0cmFjdGVkJz0+JGV4LCdjb25maWRlbmNlJz0+JGNvbmZdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7CiAgICAgICAgJGlkPSRfR0VUWydpZCddPz8nJzsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJERUxFVEUgRlJPTSBhaV9zY2FucyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRpZF0pOwogICAgICAgIGF1ZGl0KCRwZG8sJ2FpX3NjYW5fZGVsZXRlZCcsJ2FpX3NjYW5zJywoc3RyaW5nKSRpZCk7CiAgICAgICAgb2sodHJ1ZSk7CiAgICB9Cn0KCi8vIOKUgOKUgCBTVEFUUyDilIDilIAKaWYoJGFjdGlvbj09PSdzdGF0cycpewogICAgJHBkbz1kYigpOwogICAgJHRvdGFsPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09BTEVTQ0UoU1VNKHRvdGFsKSwwKSBGUk9NIHByb2plY3RzIFdIRVJFIHN0YXR1cyE9J2RvbmUnIiktPmZldGNoQ29sdW1uKCk7CiAgICAkcmVjdj0kcGRvLT5xdWVyeSgiU0VMRUNUIENPQUxFU0NFKFNVTShyZWNlaXZlZCksMCkgRlJPTSBwcm9qZWN0cyBXSEVSRSBzdGF0dXMhPSdkb25lJyIpLT5mZXRjaENvbHVtbigpOwogICAgJGFjdGl2ZT0kcGRvLT5xdWVyeSgiU0VMRUNUIENPVU5UKCopIEZST00gcHJvamVjdHMgV0hFUkUgc3RhdHVzIT0nZG9uZSciKS0+ZmV0Y2hDb2x1bW4oKTsKICAgICR0YXNrcz0kcGRvLT5xdWVyeSgiU0VMRUNUIENPVU5UKCopIEZST00gdGFza3MgV0hFUkUgZG9uZT0wIiktPmZldGNoQ29sdW1uKCk7CiAgICAkc3NsPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBob3N0aW5nIFdIRVJFIHNzbF9leHBpcmVzIElTIE5PVCBOVUxMIEFORCBzc2xfZXhwaXJlczxEQVRFX0FERChOT1coKSxJTlRFUlZBTCAzMCBEQVkpIEFORCBzc2xfZXhwaXJlcz5OT1coKSIpLT5mZXRjaENvbHVtbigpOwogICAgb2soWydhY3RpdmVfcHJvamVjdHMnPT4oaW50KSRhY3RpdmUsJ3RvdGFsX29mZmVyZWQnPT4oZmxvYXQpJHRvdGFsLCd0b3RhbF9yZWNlaXZlZCc9PihmbG9hdCkkcmVjdiwKICAgICAgICAndG90YWxfcGVuZGluZyc9PihmbG9hdCkoJHRvdGFsLSRyZWN2KSwndGFza3NfcGVuZGluZyc9PihpbnQpJHRhc2tzLCdzc2xfd2FybmluZ3MnPT4oaW50KSRzc2xdKTsKfQoKaWYoJGFjdGlvbj09PSdidXNpbmVzc19yZXBvcnQnKXsKICAgICRwZG89ZGIoKTsKICAgIGh1Yl9zY2hlbWFfZXh0cmEoJHBkbyk7CiAgICAkZnJvbT0kX0dFVFsnZnJvbSddPz9kYXRlKCdZLW0tMDEnKTsKICAgICR0bz0kX0dFVFsndG8nXT8/ZGF0ZSgnWS1tLWQnKTsKICAgICRvZmZlcnM9JHBkby0+cHJlcGFyZSgiU0VMRUNUIHN0YXR1cywgQ09VTlQoKikgYywgQ09BTEVTQ0UoU1VNKHRvdGFsKSwwKSB0b3RhbCBGUk9NIG9mZmVycyBXSEVSRSBEQVRFKGNyZWF0ZWRfYXQpIEJFVFdFRU4gPyBBTkQgPyBHUk9VUCBCWSBzdGF0dXMiKTsKICAgICRvZmZlcnMtPmV4ZWN1dGUoWyRmcm9tLCR0b10pOwogICAgJGRvY3M9W107IHRyeXsKICAgICAgICAkcT0kcGRvLT5wcmVwYXJlKCJTRUxFQ1QgZG9jX3R5cGUsIENPVU5UKCopIGMsIENPQUxFU0NFKFNVTSh0b3RhbCksMCkgdG90YWwgRlJPTSBkb2N1bWVudHMgV0hFUkUgZGF0ZSBCRVRXRUVOID8gQU5EID8gR1JPVVAgQlkgZG9jX3R5cGUiKTsKICAgICAgICAkcS0+ZXhlY3V0ZShbJGZyb20sJHRvXSk7ICRkb2NzPSRxLT5mZXRjaEFsbCgpOwogICAgfWNhdGNoKEV4Y2VwdGlvbiAkZSl7fQogICAgJHByZXNlbmNlPSRwZG8tPnByZXBhcmUoIlNFTEVDVCB1Lm5hbWUsIENPVU5UKHAuaWQpIGV2ZW50cywKICAgICAgICBTVU0oQ0FTRSBXSEVOIHAub2ZmaWNlX3N0YXRlIElOICgnb2ZmaWNlJywnb2ZmaWNlX2lwJykgVEhFTiAxIEVMU0UgMCBFTkQpIGluX29mZmljZSwKICAgICAgICBTVU0oQ0FTRSBXSEVOIHAub2ZmaWNlX3N0YXRlPSdvdXRzaWRlJyBUSEVOIDEgRUxTRSAwIEVORCkgb3V0c2lkZQogICAgICAgIEZST00gdXNlcnMgdSBMRUZUIEpPSU4gcHJlc2VuY2UgcCBPTiBwLnVzZXJfaWQ9dS5pZCBBTkQgREFURShwLmNyZWF0ZWRfYXQpIEJFVFdFRU4gPyBBTkQgPwogICAgICAgIEdST1VQIEJZIHUuaWQsdS5uYW1lIE9SREVSIEJZIHUubmFtZSIpOwogICAgJHByZXNlbmNlLT5leGVjdXRlKFskZnJvbSwkdG9dKTsKICAgICR0YXNrcz0kcGRvLT5xdWVyeSgiU0VMRUNUIENPQUxFU0NFKFNVTShkb25lPTApLDApIHBlbmRpbmcsIENPQUxFU0NFKFNVTShkb25lPTEpLDApIGRvbmUgRlJPTSB0YXNrcyIpLT5mZXRjaCgpOwogICAgJHRvcD0kcGRvLT5xdWVyeSgiU0VMRUNUIGNsaWVudCwgQ09BTEVTQ0UoU1VNKHRvdGFsKSwwKSB0b3RhbCwgQ09VTlQoKikgcHJvamVjdHMgRlJPTSBwcm9qZWN0cyBHUk9VUCBCWSBjbGllbnQgT1JERVIgQlkgdG90YWwgREVTQyBMSU1JVCA4IiktPmZldGNoQWxsKCk7CiAgICBvayhbJ2Zyb20nPT4kZnJvbSwndG8nPT4kdG8sJ29mZmVycyc9PiRvZmZlcnMtPmZldGNoQWxsKCksJ2RvY3VtZW50cyc9PiRkb2NzLAogICAgICAgICdwcmVzZW5jZSc9PiRwcmVzZW5jZS0+ZmV0Y2hBbGwoKSwndGFza3MnPT4kdGFza3MsJ3RvcF9jbGllbnRzJz0+JHRvcF0pOwp9CgoKLy8g4pSA4pSAIFRBUkdFVFMg4pSA4pSACmlmKCRhY3Rpb249PT0ndGFyZ2V0cycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKXsKICAgICAgICAkZGF0ZT0kX0dFVFsnZGF0ZSddPz9kYXRlKCdZLW0tZCcpOwogICAgICAgICR1c2VyX2lkPSRfR0VUWyd1c2VyX2lkJ10/P251bGw7CiAgICAgICAgaWYoJHVzZXJfaWQpewogICAgICAgICAgICAkcm93cz0kcGRvLT5wcmVwYXJlKCJTRUxFQ1QgdC4qLCB1Lm5hbWUgYXMgdXNlcl9uYW1lLCB1LmluaXRpYWxzLCB1LmNvbG9yLCBjYi5uYW1lIGFzIGNyZWF0ZWRfYnlfbmFtZQogICAgICAgICAgICAgICAgRlJPTSB0YXJnZXRzIHQKICAgICAgICAgICAgICAgIEpPSU4gdXNlcnMgdSBPTiB0LnVzZXJfaWQ9dS5pZAogICAgICAgICAgICAgICAgSk9JTiB1c2VycyBjYiBPTiB0LmNyZWF0ZWRfYnk9Y2IuaWQKICAgICAgICAgICAgICAgIFdIRVJFIHQuZGF0ZT0/IEFORCB0LnVzZXJfaWQ9PwogICAgICAgICAgICAgICAgT1JERVIgQlkgdC5jcmVhdGVkX2F0IERFU0MiKTsKICAgICAgICAgICAgJHJvd3MtPmV4ZWN1dGUoWyRkYXRlLCR1c2VyX2lkXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJvd3M9JHBkby0+cHJlcGFyZSgiU0VMRUNUIHQuKiwgdS5uYW1lIGFzIHVzZXJfbmFtZSwgdS5pbml0aWFscywgdS5jb2xvciwgY2IubmFtZSBhcyBjcmVhdGVkX2J5X25hbWUKICAgICAgICAgICAgICAgIEZST00gdGFyZ2V0cyB0CiAgICAgICAgICAgICAgICBKT0lOIHVzZXJzIHUgT04gdC51c2VyX2lkPXUuaWQKICAgICAgICAgICAgICAgIEpPSU4gdXNlcnMgY2IgT04gdC5jcmVhdGVkX2J5PWNiLmlkCiAgICAgICAgICAgICAgICBXSEVSRSB0LmRhdGU9PwogICAgICAgICAgICAgICAgT1JERVIgQlkgdC51c2VyX2lkLCB0LmNyZWF0ZWRfYXQgREVTQyIpOwogICAgICAgICAgICAkcm93cy0+ZXhlY3V0ZShbJGRhdGVdKTsKICAgICAgICB9CiAgICAgICAgb2soJHJvd3MtPmZldGNoQWxsKCkpOwogICAgfQogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOwogICAgICAgICRpZD0kYlsnaWQnXT8/bnVsbDsKICAgICAgICBpZigkaWQpewogICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgKHByb2dyZXNzIHVwZGF0ZSkKICAgICAgICAgICAgJHBkby0+cHJlcGFyZSgiVVBEQVRFIHRhcmdldHMgU0VUIGN1cnJlbnRfdmFsdWU9Pywgc3RhdHVzPT8gV0hFUkUgaWQ9PyIpCiAgICAgICAgICAgICAgICAtPmV4ZWN1dGUoWyRiWydjdXJyZW50X3ZhbHVlJ10/PzAsICRiWydzdGF0dXMnXT8/J2FjdGl2ZScsICRpZF0pOwogICAgICAgICAgICBvayhbJ2lkJz0+JGlkXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyB0YXJnZXQKICAgICAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gdGFyZ2V0cyAodXNlcl9pZCxjcmVhdGVkX2J5LHRpdGxlLGRlc2NyaXB0aW9uLHRhcmdldF92YWx1ZSxjdXJyZW50X3ZhbHVlLHVuaXQsZGF0ZSxzdGF0dXMpCiAgICAgICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyw/KSIpCiAgICAgICAgICAgICAgICAtPmV4ZWN1dGUoWyRiWyd1c2VyX2lkJ10sJGJbJ2NyZWF0ZWRfYnknXSwkYlsndGl0bGUnXSwkYlsnZGVzY3JpcHRpb24nXT8/JycsJGJbJ3RhcmdldF92YWx1ZSddLCRiWydjdXJyZW50X3ZhbHVlJ10/PzAsJGJbJ3VuaXQnXT8/J9Cx0YAuJywkYlsnZGF0ZSddPz9kYXRlKCdZLW0tZCcpLCdhY3RpdmUnXSk7CiAgICAgICAgICAgIG9rKFsnaWQnPT4kcGRvLT5sYXN0SW5zZXJ0SWQoKV0pOwogICAgICAgIH0KICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gdGFyZ2V0cyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8wXSk7CiAgICAgICAgb2sodHJ1ZSk7CiAgICB9Cn0KCi8vIOKUgOKUgCBURVNUIOKUgOKUgAppZigkYWN0aW9uPT09J3Rlc3QnKXsKICAgICRyZXN1bHQ9WydwaHAnPT5waHB2ZXJzaW9uKCksJ2RiJz0+J2Vycm9yJywndGcnPT4nbm90IHNlbnQnXTsKICAgIHRyeXsgZGIoKTsgJHJlc3VsdFsnZGInXT0nT0snOyB9Y2F0Y2goRXhjZXB0aW9uICRlKXsgJHJlc3VsdFsnZGInXT0kZS0+Z2V0TWVzc2FnZSgpOyB9CiAgICB0cnl7IHRnKCLwn6eqIFRlc3Qg0L7RgiBXZWJ0cml4aWEgSHViIC0gIi5kYXRlKCdIOmknKSk7ICRyZXN1bHRbJ3RnJ109J1NlbnQhJzsgfWNhdGNoKEV4Y2VwdGlvbiAkZSl7ICRyZXN1bHRbJ3RnX2Vycm9yJ109JGUtPmdldE1lc3NhZ2UoKTsgfQogICAgb2soJHJlc3VsdCk7Cn0KCgovLyDilIDilIAgUFJFU0VOQ0UgUkVQT1JUIOKUgOKUgAppZigkYWN0aW9uPT09J3ByZXNlbmNlX3JlcG9ydCcpewogICAgJHBkbz1kYigpOwogICAgJGZyb209JF9HRVRbJ2Zyb20nXT8/ZGF0ZSgnWS1tLTAxJyk7IC8vIGRlZmF1bHQ6IGZpcnN0IG9mIG1vbnRoCiAgICAkdG89JF9HRVRbJ3RvJ10/P2RhdGUoJ1ktbS1kJyk7CgogICAgLy8gR2V0IGFsbCBwcmVzZW5jZSByZWNvcmRzIGluIHJhbmdlCiAgICAkcm93cz0kcGRvLT5wcmVwYXJlKCIKICAgICAgICBTRUxFQ1QgcC51c2VyX2lkLCBwLnN0YXR1cywgcC5jcmVhdGVkX2F0LCB1Lm5hbWUsIHUuaW5pdGlhbHMsIHUuY29sb3IKICAgICAgICBGUk9NIHByZXNlbmNlIHAKICAgICAgICBKT0lOIHVzZXJzIHUgT04gcC51c2VyX2lkPXUuaWQKICAgICAgICBXSEVSRSBEQVRFKHAuY3JlYXRlZF9hdCkgQkVUV0VFTiA/IEFORCA/CiAgICAgICAgT1JERVIgQlkgcC51c2VyX2lkLCBwLmNyZWF0ZWRfYXQgQVNDCiAgICAiKTsKICAgICRyb3dzLT5leGVjdXRlKFskZnJvbSwkdG9dKTsKICAgICRyZWNvcmRzPSRyb3dzLT5mZXRjaEFsbCgpOwoKICAgIC8vIEdyb3VwIGJ5IHVzZXIgYW5kIGRhdGUKICAgICRieVVzZXI9W107CiAgICBmb3JlYWNoKCRyZWNvcmRzIGFzICRyKXsKICAgICAgICAkdWlkPSRyWyd1c2VyX2lkJ107CiAgICAgICAgJGRhdGU9c3Vic3RyKCRyWydjcmVhdGVkX2F0J10sMCwxMCk7CiAgICAgICAgaWYoIWlzc2V0KCRieVVzZXJbJHVpZF0pKXsKICAgICAgICAgICAgJGJ5VXNlclskdWlkXT1bJ2lkJz0+JHVpZCwnbmFtZSc9PiRyWyduYW1lJ10sJ2luaXRpYWxzJz0+JHJbJ2luaXRpYWxzJ10sJ2NvbG9yJz0+JHJbJ2NvbG9yJ10sJ2RheXMnPT5bXSwndG90YWxfbWludXRlcyc9PjAsJ2RheXNfd29ya2VkJz0+MF07CiAgICAgICAgfQogICAgICAgIGlmKCFpc3NldCgkYnlVc2VyWyR1aWRdWydkYXlzJ11bJGRhdGVdKSl7CiAgICAgICAgICAgICRieVVzZXJbJHVpZF1bJ2RheXMnXVskZGF0ZV09WydldmVudHMnPT5bXSwnd29ya19taW51dGVzJz0+MCwnYnJlYWtfbWludXRlcyc9PjAsJ3Ntb2tlX21pbnV0ZXMnPT4wLCd0b2lsZXRfY291bnQnPT4wXTsKICAgICAgICB9CiAgICAgICAgJGJ5VXNlclskdWlkXVsnZGF5cyddWyRkYXRlXVsnZXZlbnRzJ11bXT1bJ3N0YXR1cyc9PiRyWydzdGF0dXMnXSwndGltZSc9PiRyWydjcmVhdGVkX2F0J11dOwogICAgfQoKICAgIC8vIENhbGN1bGF0ZSBob3VycyBwZXIgdXNlciBwZXIgZGF5CiAgICBmb3JlYWNoKCRieVVzZXIgYXMgJHVpZD0+JiR1c2VyKXsKICAgICAgICBmb3JlYWNoKCR1c2VyWydkYXlzJ10gYXMgJGRhdGU9PiYkZGF5KXsKICAgICAgICAgICAgJGV2ZW50cz0kZGF5WydldmVudHMnXTsKICAgICAgICAgICAgJHdvcmtTdGFydD1udWxsOyRicmVha1N0YXJ0PW51bGw7JHNtb2tlU3RhcnQ9bnVsbDsKICAgICAgICAgICAgJHdvcmtNaW49MDskYnJlYWtNaW49MDskc21va2VNaW49MDskdG9pbGV0Q291bnQ9MDsKCiAgICAgICAgICAgIGZvcmVhY2goJGV2ZW50cyBhcyAkZXYpewogICAgICAgICAgICAgICAgJHQ9c3RydG90aW1lKCRldlsndGltZSddKTsKICAgICAgICAgICAgICAgICRzPSRldlsnc3RhdHVzJ107CiAgICAgICAgICAgICAgICBpZigkcz09PSdhcnJpdmVkJ3x8JHM9PT0nYmFjayd8fCRzPT09J3Ntb2tlX2JhY2snKXsKICAgICAgICAgICAgICAgICAgICAkd29ya1N0YXJ0PSR0OwogICAgICAgICAgICAgICAgICAgIGlmKCRzPT09J3Ntb2tlX2JhY2snJiYkc21va2VTdGFydCl7CiAgICAgICAgICAgICAgICAgICAgICAgICRzbW9rZU1pbis9cm91bmQoKCR0LSRzbW9rZVN0YXJ0KS82MCk7JHNtb2tlU3RhcnQ9bnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2VpZigkcz09PSdicmVhayd8fCRzPT09J2xlZnQnKXsKICAgICAgICAgICAgICAgICAgICBpZigkd29ya1N0YXJ0KXskd29ya01pbis9cm91bmQoKCR0LSR3b3JrU3RhcnQpLzYwKTskd29ya1N0YXJ0PW51bGw7fQogICAgICAgICAgICAgICAgICAgIGlmKCRzPT09J2JyZWFrJykkYnJlYWtTdGFydD0kdDsKICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRzPT09J3Ntb2tlJyl7CiAgICAgICAgICAgICAgICAgICAgaWYoJHdvcmtTdGFydCl7JHdvcmtNaW4rPXJvdW5kKCgkdC0kd29ya1N0YXJ0KS82MCk7JHdvcmtTdGFydD1udWxsO30KICAgICAgICAgICAgICAgICAgICAkc21va2VTdGFydD0kdDsKICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRzPT09J3RvaWxldCcpewogICAgICAgICAgICAgICAgICAgICR0b2lsZXRDb3VudCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIElmIHN0aWxsIHdvcmtpbmcgKG5vIGxlZnQgZXZlbnQgdG9kYXkpCiAgICAgICAgICAgIGlmKCR3b3JrU3RhcnQpewogICAgICAgICAgICAgICAgJG5vdz1zdHJ0b3RpbWUoJ25vdycpOwogICAgICAgICAgICAgICAgJHdvcmtNaW4rPXJvdW5kKCgkbm93LSR3b3JrU3RhcnQpLzYwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGRheVsnd29ya19taW51dGVzJ109JHdvcmtNaW47CiAgICAgICAgICAgICRkYXlbJ2JyZWFrX21pbnV0ZXMnXT0kYnJlYWtNaW47CiAgICAgICAgICAgICRkYXlbJ3Ntb2tlX21pbnV0ZXMnXT0kc21va2VNaW47CiAgICAgICAgICAgICRkYXlbJ3RvaWxldF9jb3VudCddPSR0b2lsZXRDb3VudDsKICAgICAgICAgICAgJGRheVsnd29ya19ob3VycyddPXJvdW5kKCR3b3JrTWluLzYwLDEpOwogICAgICAgICAgICAkZGF5Wyd0aW1lbGluZSddPWFycmF5X21hcChmdW5jdGlvbigkZSl7cmV0dXJuIFsnc3RhdHVzJz0+JGVbJ3N0YXR1cyddLCd0aW1lJz0+c3Vic3RyKCRlWyd0aW1lJ10sMTEsNSldO30sICRldmVudHMpOwoKICAgICAgICAgICAgaWYoJHdvcmtNaW4+MCl7CiAgICAgICAgICAgICAgICAkdXNlclsndG90YWxfbWludXRlcyddKz0kd29ya01pbjsKICAgICAgICAgICAgICAgICR1c2VyWydkYXlzX3dvcmtlZCddKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHVzZXJbJ3RvdGFsX2hvdXJzJ109cm91bmQoJHVzZXJbJ3RvdGFsX21pbnV0ZXMnXS82MCwxKTsKICAgICAgICAkdXNlclsnYXZnX2hvdXJzX3Blcl9kYXknXT0kdXNlclsnZGF5c193b3JrZWQnXT4wP3JvdW5kKCR1c2VyWyd0b3RhbF9taW51dGVzJ10vJHVzZXJbJ2RheXNfd29ya2VkJ10vNjAsMSk6MDsKICAgICAgICB1bnNldCgkdXNlcik7CiAgICB9CgogICAgLy8gU3VtbWFyeSBzdGF0cwogICAgJHRvdGFsVXNlcnM9Y291bnQoJGJ5VXNlcik7CiAgICAkYWxsSG91cnM9YXJyYXlfc3VtKGFycmF5X2NvbHVtbigkYnlVc2VyLCd0b3RhbF9ob3VycycpKTsKCiAgICBvayhbCiAgICAgICAgJ2Zyb20nPT4kZnJvbSwKICAgICAgICAndG8nPT4kdG8sCiAgICAgICAgJ3VzZXJzJz0+YXJyYXlfdmFsdWVzKCRieVVzZXIpLAogICAgICAgICd0b3RhbF9ob3Vycyc9PnJvdW5kKCRhbGxIb3VycywxKSwKICAgICAgICAndG90YWxfdXNlcnMnPT4kdG90YWxVc2VycwogICAgXSk7Cn0KCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAovLyDilIDilIAgSU5WT0lDSU5HICsgSFIgTU9EVUxFIOKUgOKUgAovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKCi8vIOKUgOKUgCBPTkUtVElNRSBJTlNUQUxMIEZPUiBORVcgVEFCTEVTIOKUgOKUgAppZigkYWN0aW9uPT09J2luc3RhbGxfaW52b2ljaW5nJyl7CiAgICAkcGRvPWRiKCk7CiAgICAkYWx0ZXJzPVsKICAgICAgICAiQUxURVIgVEFCTEUgY2xpZW50cyBBREQgQ09MVU1OIHZhdF9udW1iZXIgVkFSQ0hBUig1MCkiLAogICAgICAgICJBTFRFUiBUQUJMRSBjbGllbnRzIEFERCBDT0xVTU4gYWRkcmVzcyBWQVJDSEFSKDUwMCkiLAogICAgICAgICJBTFRFUiBUQUJMRSBjbGllbnRzIEFERCBDT0xVTU4gY2l0eSBWQVJDSEFSKDE1MCkiLAogICAgICAgICJBTFRFUiBUQUJMRSBjbGllbnRzIEFERCBDT0xVTU4gY291bnRyeSBWQVJDSEFSKDEwMCkgREVGQVVMVCAn0JHRitC70LPQsNGA0LjRjyciLAogICAgICAgICJBTFRFUiBUQUJMRSBjbGllbnRzIEFERCBDT0xVTU4gbW9sIFZBUkNIQVIoMjU1KSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIGNsaWVudHMgQUREIENPTFVNTiBpYmFuIFZBUkNIQVIoNTApIiwKICAgICAgICAiQUxURVIgVEFCTEUgY2xpZW50cyBBREQgQ09MVU1OIGNvbnRhY3RfcGVyc29uIFZBUkNIQVIoMjU1KSIsCiAgICBdOwogICAgZm9yZWFjaCgkYWx0ZXJzIGFzICRzcWwpe3RyeXskcGRvLT5leGVjKCRzcWwpO31jYXRjaChFeGNlcHRpb24gJGUpe319CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY29tcGFueV9zZXR0aW5ncyAoCiAgICAgICAgaWQgSU5UIFBSSU1BUlkgS0VZLAogICAgICAgIG5hbWUgVkFSQ0hBUigyNTUpLCBlaWsgVkFSQ0hBUig1MCksIHZhdF9udW1iZXIgVkFSQ0hBUig1MCksCiAgICAgICAgYWRkcmVzcyBWQVJDSEFSKDUwMCksIGNpdHkgVkFSQ0hBUigxNTApLCBjb3VudHJ5IFZBUkNIQVIoMTAwKSBERUZBVUxUICfQkdGK0LvQs9Cw0YDQuNGPJywKICAgICAgICBtb2wgVkFSQ0hBUigyNTUpLCBpYmFuIFZBUkNIQVIoNTApLCBiaWMgVkFSQ0hBUigyMCksIGJhbmtfbmFtZSBWQVJDSEFSKDI1NSksCiAgICAgICAgbG9nb191cmwgVkFSQ0hBUig1MDApLCBkZWZhdWx0X3ZhdF9wZXJjZW50IERFQ0lNQUwoNSwyKSBERUZBVUxUIDIwLAogICAgICAgIGN1cnJlbmN5IFZBUkNIQVIoMTApIERFRkFVTFQgJ0VVUicsCiAgICAgICAgcHJlZml4X3Byb2Zvcm1hIFZBUkNIQVIoMjApIERFRkFVTFQgJycsIHByZWZpeF9pbnZvaWNlIFZBUkNIQVIoMjApIERFRkFVTFQgJycsCiAgICAgICAgcHJlZml4X2NyZWRpdF9ub3RlIFZBUkNIQVIoMjApIERFRkFVTFQgJ9Ca0JgnLCBwcmVmaXhfZGViaXRfbm90ZSBWQVJDSEFSKDIwKSBERUZBVUxUICfQlNCYJywKICAgICAgICBwcmVmaXhfb2ZmZXIgVkFSQ0hBUigyMCkgREVGQVVMVCAn0J7QpCcsIHByZWZpeF9xdW90ZSBWQVJDSEFSKDIwKSBERUZBVUxUICfQntCkJywKICAgICAgICBzbXRwX2hvc3QgVkFSQ0hBUigyNTUpLCBzbXRwX3BvcnQgSU5UIERFRkFVTFQgNTg3LCBzbXRwX3VzZXIgVkFSQ0hBUigyNTUpLAogICAgICAgIHNtdHBfcGFzcyBWQVJDSEFSKDI1NSksIHNtdHBfc2VjdXJlIFZBUkNIQVIoMTApIERFRkFVTFQgJ3RscycsCiAgICAgICAgc210cF9mcm9tX25hbWUgVkFSQ0hBUigyNTUpLCBzbXRwX2Zyb21fZW1haWwgVkFSQ0hBUigyNTUpCiAgICApIik7CiAgICAkY250PSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBjb21wYW55X3NldHRpbmdzIiktPmZldGNoQ29sdW1uKCk7CiAgICBpZigkY250PT0wKXsKICAgICAgICAkcGRvLT5leGVjKCJJTlNFUlQgSU5UTyBjb21wYW55X3NldHRpbmdzIChpZCxuYW1lLGVpayx2YXRfbnVtYmVyLGFkZHJlc3MsY2l0eSxtb2wsaWJhbixiaWMsYmFua19uYW1lKQogICAgICAgICAgICBWQUxVRVMgKDEsJycsJycsJycsJycsJycsJycsJycsJycsJycpIik7CiAgICB9CiAgICAkcGRvLT5leGVjKCJVUERBVEUgY29tcGFueV9zZXR0aW5ncyBTRVQgbmFtZT0nJyxlaWs9JycsdmF0X251bWJlcj0nJyxhZGRyZXNzPScnLGNpdHk9JycsbW9sPScnLGliYW49JycsYmljPScnLGJhbmtfbmFtZT0nJwogICAgICAgIFdIRVJFIG5hbWU9J9Cj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUJyBBTkQgZWlrPScyMDc0MTk0NTEnIik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgZG9jX2NvdW50ZXJzICgKICAgICAgICB0eXBlIFZBUkNIQVIoMjApIE5PVCBOVUxMLCB5ZWFyIElOVCBOT1QgTlVMTCwgY291bnRlciBJTlQgREVGQVVMVCAwLAogICAgICAgIFBSSU1BUlkgS0VZKHR5cGUseWVhcikKICAgICkiKTsKCiAgICAkcGRvLT5leGVjKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBkb2N1bWVudHMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLAogICAgICAgIHR5cGUgVkFSQ0hBUigyMCkgTk9UIE5VTEwsCiAgICAgICAgbnVtYmVyIFZBUkNIQVIoNTApLCBmdWxsX251bWJlciBWQVJDSEFSKDUwKSwKICAgICAgICBjbGllbnRfaWQgVkFSQ0hBUigzNiksIGNsaWVudF9zbmFwc2hvdCBURVhULAogICAgICAgIGlzc3VlX2RhdGUgREFURSwgdGF4X2RhdGUgREFURSwgZHVlX2RhdGUgREFURSBOVUxMLAogICAgICAgIGl0ZW1zIFRFWFQsIHN1YnRvdGFsIERFQ0lNQUwoMTIsMikgREVGQVVMVCAwLCB2YXRfcGVyY2VudCBERUNJTUFMKDUsMikgREVGQVVMVCAyMCwKICAgICAgICB2YXRfYW1vdW50IERFQ0lNQUwoMTIsMikgREVGQVVMVCAwLCB0b3RhbCBERUNJTUFMKDEyLDIpIERFRkFVTFQgMCwKICAgICAgICBjdXJyZW5jeSBWQVJDSEFSKDEwKSBERUZBVUxUICdFVVInLCBzdGF0dXMgVkFSQ0hBUigzMCkgREVGQVVMVCAnZHJhZnQnLAogICAgICAgIHBheW1lbnRfbWV0aG9kIFZBUkNIQVIoNTApIERFRkFVTFQgJ2JhbmsnLCBub3RlcyBURVhULAogICAgICAgIHJlbGF0ZWRfZG9jX2lkIFZBUkNIQVIoMzYpIE5VTEwsIHJlY3VycmluZ19pZCBWQVJDSEFSKDM2KSBOVUxMLAogICAgICAgIGNyZWF0ZWRfYnkgVkFSQ0hBUigxMDApLAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgICAgICAgdXBkYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCBPTiBVUERBVEUgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiKTsKCiAgICAkcGRvLT5leGVjKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZWN1cnJpbmdfaW52b2ljZXMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLAogICAgICAgIGNsaWVudF9pZCBWQVJDSEFSKDM2KSwgZG9jX3R5cGUgVkFSQ0hBUigyMCkgREVGQVVMVCAnaW52b2ljZScsCiAgICAgICAgaXRlbXMgVEVYVCwgdmF0X3BlcmNlbnQgREVDSU1BTCg1LDIpIERFRkFVTFQgMjAsIG5vdGVzIFRFWFQsCiAgICAgICAgaW50ZXJ2YWxfdHlwZSBWQVJDSEFSKDIwKSBERUZBVUxUICdtb250aGx5JywKICAgICAgICBuZXh0X3J1bl9kYXRlIERBVEUsIGFjdGl2ZSBUSU5ZSU5UKDEpIERFRkFVTFQgMSwKICAgICAgICBsYXN0X2dlbmVyYXRlZF9hdCBUSU1FU1RBTVAgTlVMTCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgaHJfcmVxdWVzdHMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLAogICAgICAgIHVzZXJfaWQgSU5ULCBlbXBsb3llZV9uYW1lIFZBUkNIQVIoMjU1KSwgcG9zaXRpb24gVkFSQ0hBUigyNTUpLCBlZ24gVkFSQ0hBUigyMCksCiAgICAgICAgdHlwZSBWQVJDSEFSKDMwKSBOT1QgTlVMTCwKICAgICAgICBzdGFydF9kYXRlIERBVEUgTlVMTCwgZW5kX2RhdGUgREFURSBOVUxMLCBkYXlzIElOVCBERUZBVUxUIDAsCiAgICAgICAgbm90aWNlX2RheXMgSU5UIERFRkFVTFQgMCwgbGFzdF93b3JrX2RhdGUgREFURSBOVUxMLAogICAgICAgIHJlYXNvbiBURVhULCBzdGF0dXMgVkFSQ0hBUigyMCkgREVGQVVMVCAncGVuZGluZycsCiAgICAgICAgYXBwcm92ZWRfYnkgVkFSQ0hBUigxMDApLCBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgZW1haWxfbG9nICgKICAgICAgICBpZCBJTlQgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVksIGRvY3VtZW50X2lkIFZBUkNIQVIoMzYpLAogICAgICAgIHRvX2VtYWlsIFZBUkNIQVIoMjU1KSwgc3ViamVjdCBWQVJDSEFSKDUwMCksIHN0YXR1cyBWQVJDSEFSKDIwKSwKICAgICAgICBlcnJvciBURVhULCBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIik7CgogICAgb2soJ0ludm9pY2luZyArIEhSIHRhYmxlcyByZWFkeScpOwp9CgovLyDilIDilIAgQ09NUEFOWSBTRVRUSU5HUyAob3duIGNvbXBhbnkgcHJvZmlsZSArIG51bWJlcmluZyBwcmVmaXhlcyArIFNNVFApIOKUgOKUgAppZigkYWN0aW9uPT09J2NvbXBhbnlfc2V0dGluZ3MnKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJyl7CiAgICAgICAgdHJ5eyRwZG8tPmV4ZWMoIlVQREFURSBjb21wYW55X3NldHRpbmdzIFNFVCBuYW1lPScnLGVpaz0nJyx2YXRfbnVtYmVyPScnLGFkZHJlc3M9JycsY2l0eT0nJyxtb2w9JycsaWJhbj0nJyxiaWM9JycsYmFua19uYW1lPScnCiAgICAgICAgICAgIFdIRVJFIG5hbWU9J9Cj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUJyBBTkQgZWlrPScyMDc0MTk0NTEnIik7fWNhdGNoKEV4Y2VwdGlvbiAkZSl7fQogICAgICAgICRyPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIGNvbXBhbnlfc2V0dGluZ3MgV0hFUkUgaWQ9MSIpLT5mZXRjaCgpOwogICAgICAgIG9rKCRyPzpbXSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7CiAgICAgICAgJGZpZWxkcz1bJ25hbWUnLCdlaWsnLCd2YXRfbnVtYmVyJywnYWRkcmVzcycsJ2NpdHknLCdjb3VudHJ5JywnbW9sJywnaWJhbicsJ2JpYycsJ2JhbmtfbmFtZScsJ2xvZ29fdXJsJywKICAgICAgICAgICAgJ2RlZmF1bHRfdmF0X3BlcmNlbnQnLCdjdXJyZW5jeScsJ3ByZWZpeF9wcm9mb3JtYScsJ3ByZWZpeF9pbnZvaWNlJywncHJlZml4X2NyZWRpdF9ub3RlJywncHJlZml4X2RlYml0X25vdGUnLAogICAgICAgICAgICAncHJlZml4X29mZmVyJywncHJlZml4X3F1b3RlJywnc210cF9ob3N0Jywnc210cF9wb3J0Jywnc210cF91c2VyJywnc210cF9wYXNzJywnc210cF9zZWN1cmUnLCdzbXRwX2Zyb21fbmFtZScsJ3NtdHBfZnJvbV9lbWFpbCddOwogICAgICAgICRzZXQ9W107JHZhbHM9W107CiAgICAgICAgZm9yZWFjaCgkZmllbGRzIGFzICRmKXsgaWYoYXJyYXlfa2V5X2V4aXN0cygkZiwkYikpeyAkc2V0W109IiRmPT8iOyAkdmFsc1tdPSRiWyRmXTsgfSB9CiAgICAgICAgaWYoJHNldCkgJHBkby0+cHJlcGFyZSgiVVBEQVRFIGNvbXBhbnlfc2V0dGluZ3MgU0VUICIuaW1wbG9kZSgnLCcsJHNldCkuIiBXSEVSRSBpZD0xIiktPmV4ZWN1dGUoJHZhbHMpOwogICAgICAgIG9rKHRydWUpOwogICAgfQp9CgovLyDilIDilIAgRUlLIC8gVkFUIExPT0tVUCAodmlhIG9mZmljaWFsIGZyZWUgRVUgVklFUyBzZXJ2aWNlKSDilIDilIAKaWYoJGFjdGlvbj09PSdlaWtfbG9va3VwJyl7CiAgICAkZWlrPXByZWdfcmVwbGFjZSgnL1xELycsJycsJF9HRVRbJ2VpayddPz8nJyk7CiAgICAkY291bnRyeT1zdHJ0b3VwcGVyKCRfR0VUWydjb3VudHJ5J10/PydCRycpOwogICAgaWYoISRlaWspIGVycignTWlzc2luZyBlaWsnKTsKICAgICR2YXQ9c3Vic3RyKCRlaWssMCw5KTsKICAgIHRyeXsKICAgICAgICAkY2g9Y3VybF9pbml0KCdodHRwczovL2VjLmV1cm9wYS5ldS90YXhhdGlvbl9jdXN0b21zL3ZpZXMvcmVzdC1hcGkvY2hlY2stdmF0LW51bWJlcicpOwogICAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCxbCiAgICAgICAgICAgIENVUkxPUFRfUE9TVD0+dHJ1ZSwKICAgICAgICAgICAgQ1VSTE9QVF9QT1NURklFTERTPT5qc29uX2VuY29kZShbJ2NvdW50cnlDb2RlJz0+JGNvdW50cnksJ3ZhdE51bWJlcic9PiR2YXRdKSwKICAgICAgICAgICAgQ1VSTE9QVF9IVFRQSEVBREVSPT5bJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbiddLAogICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSPT50cnVlLENVUkxPUFRfVElNRU9VVD0+OCxDVVJMT1BUX1NTTF9WRVJJRllQRUVSPT5mYWxzZSwKICAgICAgICBdKTsKICAgICAgICAkcmVzcD1jdXJsX2V4ZWMoJGNoKTtjdXJsX2Nsb3NlKCRjaCk7CiAgICAgICAgJGRhdGE9anNvbl9kZWNvZGUoJHJlc3AsdHJ1ZSk7CiAgICAgICAgaWYoJGRhdGEgJiYgIWVtcHR5KCRkYXRhWyd2YWxpZCddKSl7CiAgICAgICAgICAgIG9rKFsnZm91bmQnPT50cnVlLCduYW1lJz0+JGRhdGFbJ25hbWUnXT8/JycsJ2FkZHJlc3MnPT4kZGF0YVsnYWRkcmVzcyddPz8nJywKICAgICAgICAgICAgICAgICd2YXRfbnVtYmVyJz0+JGNvdW50cnkuJHZhdCwnZWlrJz0+JGVpa10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG9rKFsnZm91bmQnPT5mYWxzZSwnbWVzc2FnZSc9PifQndGP0LzQsCDQsNC60YLQuNCy0L3QsCDQlNCU0KEg0YDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQsiBWSUVTINC30LAg0YLQvtC30Lgg0L3QvtC80LXRgCDigJQg0LLRitCy0LXQtNC10YLQtSDQtNCw0L3QvdC40YLQtSDRgNGK0YfQvdC+LiddKTsKICAgICAgICB9CiAgICB9Y2F0Y2goRXhjZXB0aW9uICRlKXsKICAgICAgICBvayhbJ2ZvdW5kJz0+ZmFsc2UsJ21lc3NhZ2UnPT4nVklFUyDRg9GB0LvRg9Cz0LDRgtCwINC90LAg0JXQoSDQstGA0LXQvNC10L3QvdC+INC90LXQtNC+0YHRgtGK0L/QvdCwIOKAlCDQstGK0LLQtdC00LXRgtC1INC00LDQvdC90LjRgtC1INGA0YrRh9C90L4uJ10pOwogICAgfQp9CgovLyDilIDilIAgRE9DVU1FTlRTIChwcm9mb3JtYSAvIGludm9pY2UgLyBjcmVkaXRfbm90ZSAvIGRlYml0X25vdGUgLyBvZmZlciAvIHF1b3RlKSDilIDilIAKaWYoJGFjdGlvbj09PSdkb2N1bWVudHMnKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJyl7CiAgICAgICAgaWYoIWVtcHR5KCRfR0VUWydpZCddKSl7CiAgICAgICAgICAgICRzPSRwZG8tPnByZXBhcmUoIlNFTEVDVCAqIEZST00gZG9jdW1lbnRzIFdIRVJFIGlkPT8iKTsKICAgICAgICAgICAgJHMtPmV4ZWN1dGUoWyRfR0VUWydpZCddXSk7CiAgICAgICAgICAgICRkPSRzLT5mZXRjaCgpOwogICAgICAgICAgICBpZigkZCl7JGRbJ2l0ZW1zJ109anNvbl9kZWNvZGUoJGRbJ2l0ZW1zJ10sdHJ1ZSk7JGRbJ2NsaWVudF9zbmFwc2hvdCddPWpzb25fZGVjb2RlKCRkWydjbGllbnRfc25hcHNob3QnXSx0cnVlKTt9CiAgICAgICAgICAgIG9rKCRkKTsKICAgICAgICB9CiAgICAgICAgJHdoZXJlPVtdOyRwYXJhbXM9W107CiAgICAgICAgZm9yZWFjaChbJ3R5cGUnLCdjbGllbnRfaWQnLCdzdGF0dXMnXSBhcyAkZil7CiAgICAgICAgICAgIGlmKCFlbXB0eSgkX0dFVFskZl0pKXskd2hlcmVbXT0iJGY9PyI7JHBhcmFtc1tdPSRfR0VUWyRmXTt9CiAgICAgICAgfQogICAgICAgICRzcWw9IlNFTEVDVCAqIEZST00gZG9jdW1lbnRzIi4oJHdoZXJlPycgV0hFUkUgJy5pbXBsb2RlKCcgQU5EICcsJHdoZXJlKTonJykuIiBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MiOwogICAgICAgICRzdD0kcGRvLT5wcmVwYXJlKCRzcWwpOyRzdC0+ZXhlY3V0ZSgkcGFyYW1zKTsKICAgICAgICAkcm93cz0kc3QtPmZldGNoQWxsKCk7CiAgICAgICAgZm9yZWFjaCgkcm93cyBhcyAmJHIpeyRyWydpdGVtcyddPWpzb25fZGVjb2RlKCRyWydpdGVtcyddLHRydWUpOyRyWydjbGllbnRfc25hcHNob3QnXT1qc29uX2RlY29kZSgkclsnY2xpZW50X3NuYXBzaG90J10sdHJ1ZSk7fQogICAgICAgIG9rKCRyb3dzKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTsKICAgICAgICAkdHlwZT0kYlsndHlwZSddPz8naW52b2ljZSc7CiAgICAgICAgJGlzTmV3PWVtcHR5KCRiWydpZCddKTsKICAgICAgICAkaWQ9JGJbJ2lkJ10/P3VuaXFpZCgnZCcsdHJ1ZSk7CiAgICAgICAgJGl0ZW1zPSRiWydpdGVtcyddPz9bXTsKICAgICAgICAkc3VidG90YWw9MDtmb3JlYWNoKCRpdGVtcyBhcyAkaXQpeyRzdWJ0b3RhbCs9KGZsb2F0KSgkaXRbJ3F0eSddPz8xKSooZmxvYXQpKCRpdFsncHJpY2UnXT8/MCk7fQogICAgICAgICR2YXRQZXJjZW50PWlzc2V0KCRiWyd2YXRfcGVyY2VudCddKT8oZmxvYXQpJGJbJ3ZhdF9wZXJjZW50J106MjA7CiAgICAgICAgJHZhdEFtb3VudD1yb3VuZCgkc3VidG90YWwqJHZhdFBlcmNlbnQvMTAwLDIpOwogICAgICAgICR0b3RhbD1yb3VuZCgkc3VidG90YWwrJHZhdEFtb3VudCwyKTsKICAgICAgICAkY29tcD0kcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBjb21wYW55X3NldHRpbmdzIFdIRVJFIGlkPTEiKS0+ZmV0Y2goKT86W107CgogICAgICAgICRzbmFwc2hvdD1udWxsOwogICAgICAgIGlmKCFlbXB0eSgkYlsnY2xpZW50X2lkJ10pKXsKICAgICAgICAgICAgJGNzPSRwZG8tPnByZXBhcmUoIlNFTEVDVCAqIEZST00gY2xpZW50cyBXSEVSRSBpZD0/Iik7JGNzLT5leGVjdXRlKFskYlsnY2xpZW50X2lkJ11dKTsKICAgICAgICAgICAgJGNSb3c9JGNzLT5mZXRjaCgpO2lmKCRjUm93KSRzbmFwc2hvdD0kY1JvdzsKICAgICAgICB9CiAgICAgICAgaWYoIWVtcHR5KCRiWydjbGllbnRfc25hcHNob3QnXSkpJHNuYXBzaG90PSRiWydjbGllbnRfc25hcHNob3QnXTsKCiAgICAgICAgaWYoJGlzTmV3KXsKICAgICAgICAgICAgJHByZWZpeE1hcD1bJ3Byb2Zvcm1hJz0+JGNvbXBbJ3ByZWZpeF9wcm9mb3JtYSddPz8nJywnaW52b2ljZSc9PiRjb21wWydwcmVmaXhfaW52b2ljZSddPz8nJywKICAgICAgICAgICAgICAgICdjcmVkaXRfbm90ZSc9PiRjb21wWydwcmVmaXhfY3JlZGl0X25vdGUnXT8/J9Ca0JgnLCdkZWJpdF9ub3RlJz0+JGNvbXBbJ3ByZWZpeF9kZWJpdF9ub3RlJ10/PyfQlNCYJywKICAgICAgICAgICAgICAgICdvZmZlcic9PiRjb21wWydwcmVmaXhfb2ZmZXInXT8/J9Ce0KQnLCdxdW90ZSc9PiRjb21wWydwcmVmaXhfcXVvdGUnXT8/J9Ce0KQnXTsKICAgICAgICAgICAgJG51bT1uZXh0RG9jTnVtYmVyKCRwZG8sJHR5cGUpOwogICAgICAgICAgICAkZnVsbD0oJHByZWZpeE1hcFskdHlwZV0/PycnKS4kbnVtOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRleD0kcGRvLT5wcmVwYXJlKCJTRUxFQ1QgbnVtYmVyLGZ1bGxfbnVtYmVyIEZST00gZG9jdW1lbnRzIFdIRVJFIGlkPT8iKTskZXgtPmV4ZWN1dGUoWyRpZF0pOwogICAgICAgICAgICAkZXhyPSRleC0+ZmV0Y2goKTsKICAgICAgICAgICAgJG51bT0kZXhyWydudW1iZXInXT8/bmV4dERvY051bWJlcigkcGRvLCR0eXBlKTsKICAgICAgICAgICAgJGZ1bGw9JGV4clsnZnVsbF9udW1iZXInXT8/JG51bTsKICAgICAgICB9CgogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGRvY3VtZW50cyAoaWQsdHlwZSxudW1iZXIsZnVsbF9udW1iZXIsY2xpZW50X2lkLGNsaWVudF9zbmFwc2hvdCxpc3N1ZV9kYXRlLHRheF9kYXRlLGR1ZV9kYXRlLAogICAgICAgICAgICBpdGVtcyxzdWJ0b3RhbCx2YXRfcGVyY2VudCx2YXRfYW1vdW50LHRvdGFsLGN1cnJlbmN5LHN0YXR1cyxwYXltZW50X21ldGhvZCxub3RlcyxyZWxhdGVkX2RvY19pZCxyZWN1cnJpbmdfaWQsY3JlYXRlZF9ieSkKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgY2xpZW50X2lkPVZBTFVFUyhjbGllbnRfaWQpLGNsaWVudF9zbmFwc2hvdD1WQUxVRVMoY2xpZW50X3NuYXBzaG90KSwKICAgICAgICAgICAgaXNzdWVfZGF0ZT1WQUxVRVMoaXNzdWVfZGF0ZSksdGF4X2RhdGU9VkFMVUVTKHRheF9kYXRlKSxkdWVfZGF0ZT1WQUxVRVMoZHVlX2RhdGUpLGl0ZW1zPVZBTFVFUyhpdGVtcyksCiAgICAgICAgICAgIHN1YnRvdGFsPVZBTFVFUyhzdWJ0b3RhbCksdmF0X3BlcmNlbnQ9VkFMVUVTKHZhdF9wZXJjZW50KSx2YXRfYW1vdW50PVZBTFVFUyh2YXRfYW1vdW50KSx0b3RhbD1WQUxVRVModG90YWwpLAogICAgICAgICAgICBjdXJyZW5jeT1WQUxVRVMoY3VycmVuY3kpLHN0YXR1cz1WQUxVRVMoc3RhdHVzKSxwYXltZW50X21ldGhvZD1WQUxVRVMocGF5bWVudF9tZXRob2QpLG5vdGVzPVZBTFVFUyhub3RlcykiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkdHlwZSwkbnVtLCRmdWxsLCRiWydjbGllbnRfaWQnXT8/bnVsbCxqc29uX2VuY29kZSgkc25hcHNob3QsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSksCiAgICAgICAgICAgICAgICAkYlsnaXNzdWVfZGF0ZSddPz9kYXRlKCdZLW0tZCcpLCRiWyd0YXhfZGF0ZSddPz8oJGJbJ2lzc3VlX2RhdGUnXT8/ZGF0ZSgnWS1tLWQnKSksJGJbJ2R1ZV9kYXRlJ10/P251bGwsCiAgICAgICAgICAgICAgICBqc29uX2VuY29kZSgkaXRlbXMsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSksJHN1YnRvdGFsLCR2YXRQZXJjZW50LCR2YXRBbW91bnQsJHRvdGFsLAogICAgICAgICAgICAgICAgJGJbJ2N1cnJlbmN5J10/PygkY29tcFsnY3VycmVuY3knXT8/J0VVUicpLCRiWydzdGF0dXMnXT8/J2RyYWZ0JywkYlsncGF5bWVudF9tZXRob2QnXT8/J2JhbmsnLAogICAgICAgICAgICAgICAgJGJbJ25vdGVzJ10/PycnLCRiWydyZWxhdGVkX2RvY19pZCddPz9udWxsLCRiWydyZWN1cnJpbmdfaWQnXT8/bnVsbCwkYlsnY3JlYXRlZF9ieSddPz8nJ10pOwogICAgICAgIG9rKFsnaWQnPT4kaWQsJ251bWJlcic9PiRudW0sJ2Z1bGxfbnVtYmVyJz0+JGZ1bGwsJ3RvdGFsJz0+JHRvdGFsXSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J0RFTEVURScpeyRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIGRvY3VtZW50cyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8nJ10pO29rKHRydWUpO30KfQoKLy8g4pSA4pSAIERPQ1VNRU5UIFBSSU5UIERBVEEgKG93biBjb21wYW55ICsgY2xpZW50IHNuYXBzaG90ICsgaXRlbXMsIGZvciBpbnZvaWNlLWRvYy5odG1sKSDilIDilIAKaWYoJGFjdGlvbj09PSdkb2N1bWVudF9mdWxsJyl7CiAgICAkcGRvPWRiKCk7CiAgICAkaWQ9JF9HRVRbJ2lkJ10/PycnOwogICAgJHM9JHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSBkb2N1bWVudHMgV0hFUkUgaWQ9PyIpOyRzLT5leGVjdXRlKFskaWRdKTsKICAgICRkb2M9JHMtPmZldGNoKCk7CiAgICBpZighJGRvYykgZXJyKCfQlNC+0LrRg9C80LXQvdGC0YrRgiDQvdC1INC1INC90LDQvNC10YDQtdC9Jyk7CiAgICAkZG9jWydpdGVtcyddPWpzb25fZGVjb2RlKCRkb2NbJ2l0ZW1zJ10sdHJ1ZSk7CiAgICAkZG9jWydjbGllbnRfc25hcHNob3QnXT1qc29uX2RlY29kZSgkZG9jWydjbGllbnRfc25hcHNob3QnXSx0cnVlKTsKICAgICRjb21wPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIGNvbXBhbnlfc2V0dGluZ3MgV0hFUkUgaWQ9MSIpLT5mZXRjaCgpOwogICAgb2soWydkb2N1bWVudCc9PiRkb2MsJ2NvbXBhbnknPT4kY29tcF0pOwp9CgovLyDilIDilIAgSU5WT0lDRSBSRVBPUlRTIC8g0KHQn9Cg0JDQktCa0Jgg4pSA4pSACmlmKCRhY3Rpb249PT0naW52b2ljZV9zdGF0cycpewogICAgJHBkbz1kYigpOwogICAgJGJ5TW9udGg9JHBkby0+cXVlcnkoIlNFTEVDVCBEQVRFX0ZPUk1BVChpc3N1ZV9kYXRlLCclWS0lbScpIHltLCBTVU0odG90YWwpIHRvdGFsIEZST00gZG9jdW1lbnRzCiAgICAgICAgV0hFUkUgdHlwZT0naW52b2ljZScgR1JPVVAgQlkgeW0gT1JERVIgQlkgeW0gREVTQyBMSU1JVCAxMiIpLT5mZXRjaEFsbCgpOwogICAgJGJ5VHlwZT0kcGRvLT5xdWVyeSgiU0VMRUNUIHR5cGUsIENPVU5UKCopIGNudCwgU1VNKHRvdGFsKSB0b3RhbCBGUk9NIGRvY3VtZW50cyBHUk9VUCBCWSB0eXBlIiktPmZldGNoQWxsKCk7CiAgICAkYnlDbGllbnRSYXc9JHBkby0+cXVlcnkoIlNFTEVDVCBjbGllbnRfaWQsIGNsaWVudF9zbmFwc2hvdCwgU1VNKHRvdGFsKSB0b3RhbCwgQ09VTlQoKikgY250IEZST00gZG9jdW1lbnRzCiAgICAgICAgV0hFUkUgdHlwZT0naW52b2ljZScgR1JPVVAgQlkgY2xpZW50X2lkIE9SREVSIEJZIHRvdGFsIERFU0MgTElNSVQgMTAiKS0+ZmV0Y2hBbGwoKTsKICAgIGZvcmVhY2goJGJ5Q2xpZW50UmF3IGFzICYkcil7JHNuPWpzb25fZGVjb2RlKCRyWydjbGllbnRfc25hcHNob3QnXSx0cnVlKTskclsnbmFtZSddPSRzblsnbmFtZSddPz8n4oCUJzt1bnNldCgkclsnY2xpZW50X3NuYXBzaG90J10pO30KICAgICR1bnBhaWQ9JHBkby0+cXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBjbnQsIENPQUxFU0NFKFNVTSh0b3RhbCksMCkgdG90YWwgRlJPTSBkb2N1bWVudHMKICAgICAgICBXSEVSRSB0eXBlPSdpbnZvaWNlJyBBTkQgc3RhdHVzIElOICgnc2VudCcsJ292ZXJkdWUnKSIpLT5mZXRjaCgpOwogICAgb2soWydieV9tb250aCc9PmFycmF5X3JldmVyc2UoJGJ5TW9udGgpLCdieV90eXBlJz0+JGJ5VHlwZSwnYnlfY2xpZW50Jz0+JGJ5Q2xpZW50UmF3LCd1bnBhaWQnPT4kdW5wYWlkXSk7Cn0KCi8vIOKUgOKUgCBFWFBPUlQgVE8gQ1NWIChjb21wYXRpYmxlIHdpdGggaW1wb3J0IGludG8gYWNjb3VudGluZyBzb2Z0d2FyZSkg4pSA4pSACmlmKCRhY3Rpb249PT0nZG9jdW1lbnRzX2V4cG9ydCcpewogICAgJHBkbz1kYigpOwogICAgJHR5cGU9JF9HRVRbJ3R5cGUnXT8/Jyc7CiAgICAkc3FsPSJTRUxFQ1QgKiBGUk9NIGRvY3VtZW50cyIuKCR0eXBlPyIgV0hFUkUgdHlwZT0iLiRwZG8tPnF1b3RlKCR0eXBlKToiIikuIiBPUkRFUiBCWSBpc3N1ZV9kYXRlIjsKICAgICRyb3dzPSRwZG8tPnF1ZXJ5KCRzcWwpLT5mZXRjaEFsbCgpOwogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQvY3N2OyBjaGFyc2V0PXV0Zi04Jyk7CiAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJ3ZWJ0cml4aWFfZG9jdW1lbnRzLmNzdiInKTsKICAgIGVjaG8gIlx4RUZceEJCXHhCRiI7CiAgICAkb3V0PWZvcGVuKCdwaHA6Ly9vdXRwdXQnLCd3Jyk7CiAgICBmcHV0Y3N2KCRvdXQsWyfQndC+0LzQtdGAJywn0KLQuNC/Jywn0JTQsNGC0LAg0L3QsCDQuNC30LTQsNCy0LDQvdC1Jywn0JTQsNC90YrRh9C90LAg0LTQsNGC0LAnLCfQmtC70LjQtdC90YInLCfQldCY0JonLCfQlNCU0KEg0L3QvtC80LXRgCcsJ9CU0LDQvdGK0YfQvdCwINC+0YHQvdC+0LLQsCcsJ9CU0JTQoSAlJywn0JTQlNChJywn0J7QsdGJ0L4nLCfQktCw0LvRg9GC0LAnLCfQodGC0LDRgtGD0YEnXSk7CiAgICBmb3JlYWNoKCRyb3dzIGFzICRyKXsKICAgICAgICAkc25hcD1qc29uX2RlY29kZSgkclsnY2xpZW50X3NuYXBzaG90J10sdHJ1ZSk7CiAgICAgICAgZnB1dGNzdigkb3V0LFskclsnZnVsbF9udW1iZXInXSwkclsndHlwZSddLCRyWydpc3N1ZV9kYXRlJ10sJHJbJ3RheF9kYXRlJ10sJHNuYXBbJ25hbWUnXT8/JycsCiAgICAgICAgICAgICRzbmFwWydlaWsnXT8/JycsJHNuYXBbJ3ZhdF9udW1iZXInXT8/JycsJHJbJ3N1YnRvdGFsJ10sJHJbJ3ZhdF9wZXJjZW50J10sJHJbJ3ZhdF9hbW91bnQnXSwKICAgICAgICAgICAgJHJbJ3RvdGFsJ10sJHJbJ2N1cnJlbmN5J10sJHJbJ3N0YXR1cyddXSk7CiAgICB9CiAgICBmY2xvc2UoJG91dCk7CiAgICBleGl0Owp9CgovLyDilIDilIAgSU1QT1JUIENMSUVOVFMgRlJPTSBDU1Yg4pSA4pSACmlmKCRhY3Rpb249PT0nY2xpZW50c19pbXBvcnQnKXsKICAgICRwZG89ZGIoKTsKICAgICRiPWJvZHkoKTsKICAgICRjc3Y9JGJbJ2NzdiddPz8nJzsKICAgIGlmKCEkY3N2KSBlcnIoJ01pc3NpbmcgY3N2Jyk7CiAgICAkbGluZXM9cHJlZ19zcGxpdCgnL1xyXG58XHJ8XG4vJyx0cmltKCRjc3YpKTsKICAgICRoZWFkZXI9YXJyYXlfbWFwKCd0cmltJyxzdHJfZ2V0Y3N2KGFycmF5X3NoaWZ0KCRsaW5lcykpKTsKICAgICRtYXA9YXJyYXlfZmxpcCgkaGVhZGVyKTsKICAgICRjb3VudD0wOwogICAgZm9yZWFjaCgkbGluZXMgYXMgJGxpbmUpewogICAgICAgIGlmKCF0cmltKCRsaW5lKSljb250aW51ZTsKICAgICAgICAkcm93PXN0cl9nZXRjc3YoJGxpbmUpOwogICAgICAgICRnZXQ9ZnVuY3Rpb24oJGspIHVzZSgkcm93LCRtYXApe3JldHVybiBpc3NldCgkbWFwWyRrXSkmJmlzc2V0KCRyb3dbJG1hcFska11dKT90cmltKCRyb3dbJG1hcFska11dKTonJzt9OwogICAgICAgICRpZD11bmlxaWQoJ2MnLHRydWUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGNsaWVudHMgKGlkLG5hbWUsY29tcGFueSxlbWFpbCxwaG9uZSxlaWssdmF0X251bWJlcixhZGRyZXNzLGNpdHksbW9sLG5vdGVzKQogICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyw/LD8sPykiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkZ2V0KCduYW1lJyksJGdldCgnY29tcGFueScpLCRnZXQoJ2VtYWlsJyksJGdldCgncGhvbmUnKSwkZ2V0KCdlaWsnKSwKICAgICAgICAgICAgICAgICRnZXQoJ3ZhdF9udW1iZXInKSwkZ2V0KCdhZGRyZXNzJyksJGdldCgnY2l0eScpLCRnZXQoJ21vbCcpLCcnXSk7CiAgICAgICAgJGNvdW50Kys7CiAgICB9CiAgICBvayhbJ2ltcG9ydGVkJz0+JGNvdW50XSk7Cn0KCi8vIOKUgOKUgCBSRUNVUlJJTkcgLyDQn9CV0KDQmNCe0JTQmNCn0J3QmCDQpNCQ0JrQotCj0KDQmCDilIDilIAKaWYoJGFjdGlvbj09PSdyZWN1cnJpbmcnKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJykgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gcmVjdXJyaW5nX2ludm9pY2VzIE9SREVSIEJZIGNyZWF0ZWRfYXQgREVTQyIpLT5mZXRjaEFsbCgpKTsKICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgncicsdHJ1ZSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gcmVjdXJyaW5nX2ludm9pY2VzIChpZCxjbGllbnRfaWQsZG9jX3R5cGUsaXRlbXMsdmF0X3BlcmNlbnQsbm90ZXMsaW50ZXJ2YWxfdHlwZSxuZXh0X3J1bl9kYXRlLGFjdGl2ZSkKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgY2xpZW50X2lkPVZBTFVFUyhjbGllbnRfaWQpLGRvY190eXBlPVZBTFVFUyhkb2NfdHlwZSksaXRlbXM9VkFMVUVTKGl0ZW1zKSwKICAgICAgICAgICAgdmF0X3BlcmNlbnQ9VkFMVUVTKHZhdF9wZXJjZW50KSxub3Rlcz1WQUxVRVMobm90ZXMpLGludGVydmFsX3R5cGU9VkFMVUVTKGludGVydmFsX3R5cGUpLAogICAgICAgICAgICBuZXh0X3J1bl9kYXRlPVZBTFVFUyhuZXh0X3J1bl9kYXRlKSxhY3RpdmU9VkFMVUVTKGFjdGl2ZSkiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsnY2xpZW50X2lkJ10/P251bGwsJGJbJ2RvY190eXBlJ10/PydpbnZvaWNlJyxqc29uX2VuY29kZSgkYlsnaXRlbXMnXT8/W10sSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSksCiAgICAgICAgICAgICAgICAkYlsndmF0X3BlcmNlbnQnXT8/MjAsJGJbJ25vdGVzJ10/PycnLCRiWydpbnRlcnZhbF90eXBlJ10/Pydtb250aGx5JywkYlsnbmV4dF9ydW5fZGF0ZSddPz9kYXRlKCdZLW0tZCcpLCRiWydhY3RpdmUnXT8/MV0pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gcmVjdXJyaW5nX2ludm9pY2VzIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJF9HRVRbJ2lkJ10/PycnXSk7b2sodHJ1ZSk7fQp9CgovLyDilIDilIAgQ1JPTiBFTkRQT0lOVDogZ2VuZXJhdGVzIGR1ZSByZWN1cnJpbmcgaW52b2ljZXMuIENhbGwgZnJvbSBjUGFuZWwgQ3JvbiBKb2JzLiDilIDilIAKaWYoJGFjdGlvbj09PSdydW5fcmVjdXJyaW5nJyl7CiAgICAka2V5PSRfR0VUWydrZXknXT8/Jyc7CiAgICBpZigka2V5IT09J3dlYnRyaXhpYV9jcm9uXzIwMjYnKSBlcnIoJ0ZvcmJpZGRlbicpOwogICAgJHBkbz1kYigpOwogICAgJGR1ZT0kcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSByZWN1cnJpbmdfaW52b2ljZXMgV0hFUkUgYWN0aXZlPTEgQU5EIG5leHRfcnVuX2RhdGU8PUNVUkRBVEUoKSIpLT5mZXRjaEFsbCgpOwogICAgJGNvbXA9JHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gY29tcGFueV9zZXR0aW5ncyBXSEVSRSBpZD0xIiktPmZldGNoKCk/OltdOwogICAgJGNyZWF0ZWQ9W107CiAgICBmb3JlYWNoKCRkdWUgYXMgJHIpewogICAgICAgICRpdGVtcz1qc29uX2RlY29kZSgkclsnaXRlbXMnXSx0cnVlKT86W107CiAgICAgICAgJHN1YnRvdGFsPTA7Zm9yZWFjaCgkaXRlbXMgYXMgJGl0KSRzdWJ0b3RhbCs9KGZsb2F0KSgkaXRbJ3F0eSddPz8xKSooZmxvYXQpKCRpdFsncHJpY2UnXT8/MCk7CiAgICAgICAgJHZhdEFtb3VudD1yb3VuZCgkc3VidG90YWwqJHJbJ3ZhdF9wZXJjZW50J10vMTAwLDIpOyR0b3RhbD1yb3VuZCgkc3VidG90YWwrJHZhdEFtb3VudCwyKTsKICAgICAgICAkY3M9JHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSBjbGllbnRzIFdIRVJFIGlkPT8iKTskY3MtPmV4ZWN1dGUoWyRyWydjbGllbnRfaWQnXV0pOyRzbmFwPSRjcy0+ZmV0Y2goKTsKICAgICAgICAkaWQ9dW5pcWlkKCdkJyx0cnVlKTsKICAgICAgICAkbnVtPW5leHREb2NOdW1iZXIoJHBkbywkclsnZG9jX3R5cGUnXSk7CiAgICAgICAgJHByZWZpeE1hcD1bJ3Byb2Zvcm1hJz0+JGNvbXBbJ3ByZWZpeF9wcm9mb3JtYSddPz8nJywnaW52b2ljZSc9PiRjb21wWydwcmVmaXhfaW52b2ljZSddPz8nJ107CiAgICAgICAgJGZ1bGw9KCRwcmVmaXhNYXBbJHJbJ2RvY190eXBlJ11dPz8nJykuJG51bTsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBkb2N1bWVudHMgKGlkLHR5cGUsbnVtYmVyLGZ1bGxfbnVtYmVyLGNsaWVudF9pZCxjbGllbnRfc25hcHNob3QsaXNzdWVfZGF0ZSx0YXhfZGF0ZSwKICAgICAgICAgICAgaXRlbXMsc3VidG90YWwsdmF0X3BlcmNlbnQsdmF0X2Ftb3VudCx0b3RhbCxjdXJyZW5jeSxzdGF0dXMsbm90ZXMscmVjdXJyaW5nX2lkLGNyZWF0ZWRfYnkpCiAgICAgICAgICAgIFZBTFVFUyAoPyw/LD8sPyw/LD8sQ1VSREFURSgpLENVUkRBVEUoKSw/LD8sPyw/LD8sPyw/LD8sPyw/KSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRyWydkb2NfdHlwZSddLCRudW0sJGZ1bGwsJHJbJ2NsaWVudF9pZCddLGpzb25fZW5jb2RlKCRzbmFwLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpLAogICAgICAgICAgICAgICAganNvbl9lbmNvZGUoJGl0ZW1zLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpLCRzdWJ0b3RhbCwkclsndmF0X3BlcmNlbnQnXSwkdmF0QW1vdW50LCR0b3RhbCwKICAgICAgICAgICAgICAgICRjb21wWydjdXJyZW5jeSddPz8nRVVSJywnZHJhZnQnLCRyWydub3RlcyddLCRyWydpZCddLCdjcm9uJ10pOwogICAgICAgICRpbnRlcnZhbD0kclsnaW50ZXJ2YWxfdHlwZSddPT09J21vbnRobHknPycrMSBtb250aCc6KCRyWydpbnRlcnZhbF90eXBlJ109PT0neWVhcmx5Jz8nKzEgeWVhcic6KCRyWydpbnRlcnZhbF90eXBlJ109PT0ncXVhcnRlcmx5Jz8nKzMgbW9udGgnOicrMSBtb250aCcpKTsKICAgICAgICAkbmV3TmV4dD1kYXRlKCdZLW0tZCcsc3RydG90aW1lKCRyWyduZXh0X3J1bl9kYXRlJ10uJyAnLiRpbnRlcnZhbCkpOwogICAgICAgICRwZG8tPnByZXBhcmUoIlVQREFURSByZWN1cnJpbmdfaW52b2ljZXMgU0VUIG5leHRfcnVuX2RhdGU9PyxsYXN0X2dlbmVyYXRlZF9hdD1OT1coKSBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRuZXdOZXh0LCRyWydpZCddXSk7CiAgICAgICAgJGNyZWF0ZWRbXT0kZnVsbDsKICAgIH0KICAgIG9rKFsnY3JlYXRlZCc9PiRjcmVhdGVkXSk7Cn0KCi8vIOKUgOKUgCBTRU5EIERPQ1VNRU5UIEJZIEVNQUlMIOKUgOKUgAppZigkYWN0aW9uPT09J3NlbmRfZG9jdW1lbnRfZW1haWwnKXsKICAgICRwZG89ZGIoKTskYj1ib2R5KCk7CiAgICAkZG9jSWQ9JGJbJ2RvY3VtZW50X2lkJ10/PycnOyR0bz0kYlsndG8nXT8/Jyc7CiAgICBpZighJGRvY0lkfHwhJHRvKSBlcnIoJ01pc3NpbmcgZG9jdW1lbnRfaWQgb3IgdG8nKTsKICAgICRzPSRwZG8tPnByZXBhcmUoIlNFTEVDVCAqIEZST00gZG9jdW1lbnRzIFdIRVJFIGlkPT8iKTskcy0+ZXhlY3V0ZShbJGRvY0lkXSk7JGRvYz0kcy0+ZmV0Y2goKTsKICAgIGlmKCEkZG9jKSBlcnIoJ0RvY3VtZW50IG5vdCBmb3VuZCcpOwogICAgJGNvbXA9JHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gY29tcGFueV9zZXR0aW5ncyBXSEVSRSBpZD0xIiktPmZldGNoKCk7CiAgICBpZihlbXB0eSgkY29tcFsnc210cF9ob3N0J10pKSBlcnIoJ1NNVFAg0L3QtSDQtSDQutC+0L3RhNC40LPRg9GA0LjRgNCw0L0gKNCd0LDRgdGC0YDQvtC50LrQuCDihpIg0JjQvNC10LnQuyknKTsKICAgICRzbmFwPWpzb25fZGVjb2RlKCRkb2NbJ2NsaWVudF9zbmFwc2hvdCddLHRydWUpOwogICAgJHR5cGVMYWJlbHM9Wydwcm9mb3JtYSc9PifQn9GA0L7RhNC+0YDQvNCwINGE0LDQutGC0YPRgNCwJywnaW52b2ljZSc9PifQpNCw0LrRgtGD0YDQsCcsJ2NyZWRpdF9ub3RlJz0+J9Ca0YDQtdC00LjRgtC90L4g0LjQt9Cy0LXRgdGC0LjQtScsCiAgICAgICAgJ2RlYml0X25vdGUnPT4n0JTQtdCx0LjRgtC90L4g0LjQt9Cy0LXRgdGC0LjQtScsJ29mZmVyJz0+J9Ce0YTQtdGA0YLQsCcsJ3F1b3RlJz0+J9Ce0YTQtdGA0YLQsCddOwogICAgJGxhYmVsPSR0eXBlTGFiZWxzWyRkb2NbJ3R5cGUnXV0/PyfQlNC+0LrRg9C80LXQvdGCJzsKICAgICRsaW5rPSRiWydsaW5rJ10/PycnOwogICAgJHN1YmplY3Q9JGJbJ3N1YmplY3QnXT8/KCRsYWJlbC4nIOKEliAnLiRkb2NbJ2Z1bGxfbnVtYmVyJ10pOwogICAgJGJvZHkyPSRiWydib2R5J10/PygiPHA+0JfQtNGA0LDQstC10LnRgtC1Ii4oIWVtcHR5KCRzbmFwWyduYW1lJ10pPycsICcuJHNuYXBbJ25hbWUnXTonJykuIiw8L3A+Ii4KICAgICAgICAiPHA+0JjQt9C/0YDQsNGJ0LDQvNC1INCS0LggeyRsYWJlbH0g4oSWIHskZG9jWydmdWxsX251bWJlciddfSDQvdCwINGB0YLQvtC50L3QvtGB0YIgeyRkb2NbJ3RvdGFsJ119IHskZG9jWydjdXJyZW5jeSddfS48L3A+Ii4KICAgICAgICAoJGxpbms/IjxwPjxhIGhyZWY9XCJ7JGxpbmt9XCI+0J/RgNC10LPQu9C10LQgLyDQuNC30YLQtdCz0LvRj9C90LU8L2E+PC9wPiI6IiIpLgogICAgICAgICI8cD7Qn9C+0LfQtNGA0LDQstC4LDxicj4iLigkY29tcFsnbmFtZSddPz8nJykuIjwvcD4iKTsKICAgIHRyeXsKICAgICAgICBzbXRwU2VuZCgkY29tcFsnc210cF9ob3N0J10sJGNvbXBbJ3NtdHBfcG9ydCddPz81ODcsJGNvbXBbJ3NtdHBfc2VjdXJlJ10/Pyd0bHMnLCRjb21wWydzbXRwX3VzZXInXSwkY29tcFsnc210cF9wYXNzJ10sCiAgICAgICAgICAgICRjb21wWydzbXRwX2Zyb21fZW1haWwnXT86JGNvbXBbJ3NtdHBfdXNlciddLCRjb21wWydzbXRwX2Zyb21fbmFtZSddPzokY29tcFsnbmFtZSddLCR0bywkc3ViamVjdCwkYm9keTIpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGVtYWlsX2xvZyAoZG9jdW1lbnRfaWQsdG9fZW1haWwsc3ViamVjdCxzdGF0dXMpIFZBTFVFUyAoPyw/LD8sPykiKS0+ZXhlY3V0ZShbJGRvY0lkLCR0bywkc3ViamVjdCwnc2VudCddKTsKICAgICAgICBpZigkZG9jWydzdGF0dXMnXT09PSdkcmFmdCcpICRwZG8tPnByZXBhcmUoIlVQREFURSBkb2N1bWVudHMgU0VUIHN0YXR1cz0nc2VudCcgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskZG9jSWRdKTsKICAgICAgICBvayh0cnVlKTsKICAgIH1jYXRjaChFeGNlcHRpb24gJGUpewogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGVtYWlsX2xvZyAoZG9jdW1lbnRfaWQsdG9fZW1haWwsc3ViamVjdCxzdGF0dXMsZXJyb3IpIFZBTFVFUyAoPyw/LD8sPyw/KSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGRvY0lkLCR0bywkc3ViamVjdCwnZXJyb3InLCRlLT5nZXRNZXNzYWdlKCldKTsKICAgICAgICBlcnIoJ9CT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9C/0YDQsNGJ0LDQvdC1OiAnLiRlLT5nZXRNZXNzYWdlKCkpOwogICAgfQp9CgovLyDilIDilIAgSFIgUkVRVUVTVFM6INCc0L7Qu9Cx0LAg0LfQsCDQvtGC0L/Rg9GB0LogKNC/0LvQsNGC0LXQvS/QvdC10L/Qu9Cw0YLQtdC9KSArINCf0YDQtdC00LjQt9Cy0LXRgdGC0LjQtSDQt9CwINC90LDQv9GD0YHQutCw0L3QtSDilIDilIAKaWYoJGFjdGlvbj09PSdocl9yZXF1ZXN0cycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBocl9yZXF1ZXN0cyBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7JGlkPSRiWydpZCddPz91bmlxaWQoJ2hyJyx0cnVlKTsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBocl9yZXF1ZXN0cyAoaWQsdXNlcl9pZCxlbXBsb3llZV9uYW1lLHBvc2l0aW9uLGVnbix0eXBlLHN0YXJ0X2RhdGUsZW5kX2RhdGUsZGF5cyxub3RpY2VfZGF5cyxsYXN0X3dvcmtfZGF0ZSxyZWFzb24sc3RhdHVzLGFwcHJvdmVkX2J5KQogICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgZW1wbG95ZWVfbmFtZT1WQUxVRVMoZW1wbG95ZWVfbmFtZSkscG9zaXRpb249VkFMVUVTKHBvc2l0aW9uKSxlZ249VkFMVUVTKGVnbiksCiAgICAgICAgICAgIHR5cGU9VkFMVUVTKHR5cGUpLHN0YXJ0X2RhdGU9VkFMVUVTKHN0YXJ0X2RhdGUpLGVuZF9kYXRlPVZBTFVFUyhlbmRfZGF0ZSksZGF5cz1WQUxVRVMoZGF5cyksCiAgICAgICAgICAgIG5vdGljZV9kYXlzPVZBTFVFUyhub3RpY2VfZGF5cyksbGFzdF93b3JrX2RhdGU9VkFMVUVTKGxhc3Rfd29ya19kYXRlKSxyZWFzb249VkFMVUVTKHJlYXNvbiksCiAgICAgICAgICAgIHN0YXR1cz1WQUxVRVMoc3RhdHVzKSxhcHByb3ZlZF9ieT1WQUxVRVMoYXBwcm92ZWRfYnkpIikKICAgICAgICAgICAgLT5leGVjdXRlKFskaWQsJGJbJ3VzZXJfaWQnXT8/bnVsbCwkYlsnZW1wbG95ZWVfbmFtZSddPz8nJywkYlsncG9zaXRpb24nXT8/JycsJGJbJ2VnbiddPz8nJywKICAgICAgICAgICAgICAgICRiWyd0eXBlJ10/PydsZWF2ZV9wYWlkJywkYlsnc3RhcnRfZGF0ZSddPz9udWxsLCRiWydlbmRfZGF0ZSddPz9udWxsLCRiWydkYXlzJ10/PzAsCiAgICAgICAgICAgICAgICAkYlsnbm90aWNlX2RheXMnXT8/MCwkYlsnbGFzdF93b3JrX2RhdGUnXT8/bnVsbCwkYlsncmVhc29uJ10/PycnLCRiWydzdGF0dXMnXT8/J3BlbmRpbmcnLCRiWydhcHByb3ZlZF9ieSddPz8nJ10pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gaHJfcmVxdWVzdHMgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KCi8vIOKUgOKUgCBIUiBSRVFVRVNUIFNUQVRVUyBPTkxZIChhcHByb3ZlL3JlamVjdCB3aXRob3V0IHRvdWNoaW5nIG90aGVyIGZpZWxkcykg4pSA4pSACmlmKCRhY3Rpb249PT0naHJfcmVxdWVzdF9zdGF0dXMnKXsKICAgICRwZG89ZGIoKTskYj1ib2R5KCk7CiAgICAkaWQ9JGJbJ2lkJ10/PycnO2lmKCEkaWQpZXJyKCdNaXNzaW5nIGlkJyk7CiAgICAkcGRvLT5wcmVwYXJlKCJVUERBVEUgaHJfcmVxdWVzdHMgU0VUIHN0YXR1cz0/LGFwcHJvdmVkX2J5PT8gV0hFUkUgaWQ9PyIpCiAgICAgICAgLT5leGVjdXRlKFskYlsnc3RhdHVzJ10/PydwZW5kaW5nJywkYlsnYXBwcm92ZWRfYnknXT8/JycsJGlkXSk7CiAgICBvayh0cnVlKTsKfQoKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIOKUgOKUgCBXSElURS1MQUJFTCAvIExJQ0VOU0lORyAvIE1VTFRJLUhVQiBQTEFURk9STSDilIDilIAKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCgppZigkYWN0aW9uPT09J2luc3RhbGxfcGxhdGZvcm0nKXsKICAgICRwZG89ZGIoKTsKICAgICRwZG8tPmV4ZWMoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGJyYW5kaW5nX3NldHRpbmdzICgKICAgICAgICBpZCBJTlQgUFJJTUFSWSBLRVksCiAgICAgICAgcHJvZHVjdF9uYW1lIFZBUkNIQVIoMjU1KSBERUZBVUxUICdXZWJ0cml4aWEgSHViJywKICAgICAgICBsb2dvX3VybCBWQVJDSEFSKDUwMCksIGZhdmljb25fdXJsIFZBUkNIQVIoNTAwKSwKICAgICAgICBwcmltYXJ5X2NvbG9yIFZBUkNIQVIoMjApIERFRkFVTFQgJyM2YzYzZmYnLCBzZWNvbmRhcnlfY29sb3IgVkFSQ0hBUigyMCkgREVGQVVMVCAnI2E3OGJmYScsCiAgICAgICAgZm9vdGVyX3RleHQgVkFSQ0hBUigyNTUpIERFRkFVTFQgJycsIHBvd2VyZWRfYnlfdmlzaWJsZSBUSU5ZSU5UKDEpIERFRkFVTFQgMSwKICAgICAgICBodWJfdHlwZSBWQVJDSEFSKDMwKSBERUZBVUxUICdhZ2VuY3knLAogICAgICAgIGxpY2Vuc2Vfa2V5IFZBUkNIQVIoNjQpLCBhZG1pbl9sb2NrZWQgVElOWUlOVCgxKSBERUZBVUxUIDAsCiAgICAgICAgbW9kdWxlc19lbmFibGVkIFRFWFQsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIpOwogICAgJGNudD0kcGRvLT5xdWVyeSgiU0VMRUNUIENPVU5UKCopIEZST00gYnJhbmRpbmdfc2V0dGluZ3MiKS0+ZmV0Y2hDb2x1bW4oKTsKICAgICRkZWZhdWx0TW9kdWxlQXJyYXk9Wydwcm9qZWN0cyc9PjEsJ2NsaWVudHMnPT4xLCdmaW5hbmNlJz0+MSwndGFza3MnPT4xLCdvZmZlcnMnPT4xLCdjb250cmFjdHMnPT4xLAogICAgICAgICdjYWxlbmRhcic9PjEsJ2hvc3RpbmcnPT4xLCdwYXNzd29yZHMnPT4xLCdub3Rlcyc9PjEsJ3JlcG9ydHMnPT4xLCdwcmVzZW5jZSc9PjEsJ3RhcmdldHMnPT4xLAogICAgICAgICd3b3JrcmVwb3J0Jz0+MSwndXNlcnMnPT4xLCdpbnZvaWNpbmcnPT4xLCdocl9yZXF1ZXN0cyc9PjEsJ3dheWJpbGxzJz0+MSwnYWlfc2Nhbic9PjEsJ2F1ZGl0Jz0+MV07CiAgICBpZigkY250PT0wKXsKICAgICAgICAka2V5PWJpbjJoZXgocmFuZG9tX2J5dGVzKDE2KSk7CiAgICAgICAgJGRlZmF1bHRNb2R1bGVzPWpzb25fZW5jb2RlKCRkZWZhdWx0TW9kdWxlQXJyYXkpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGJyYW5kaW5nX3NldHRpbmdzIChpZCxwcm9kdWN0X25hbWUsbGljZW5zZV9rZXksbW9kdWxlc19lbmFibGVkKSBWQUxVRVMgKDEsPyw/LD8pIikKICAgICAgICAgICAgLT5leGVjdXRlKFsnV2VidHJpeGlhIEh1YicsJGtleSwkZGVmYXVsdE1vZHVsZXNdKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHI9JHBkby0+cXVlcnkoIlNFTEVDVCBtb2R1bGVzX2VuYWJsZWQgRlJPTSBicmFuZGluZ19zZXR0aW5ncyBXSEVSRSBpZD0xIiktPmZldGNoKCk7CiAgICAgICAgJG1vZHM9anNvbl9kZWNvZGUoJHJbJ21vZHVsZXNfZW5hYmxlZCddPz8ne30nLHRydWUpPzpbXTsKICAgICAgICAkbW9kcz1hcnJheV9tZXJnZSgkZGVmYXVsdE1vZHVsZUFycmF5LCRtb2RzKTsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJVUERBVEUgYnJhbmRpbmdfc2V0dGluZ3MgU0VUIG1vZHVsZXNfZW5hYmxlZD0/IFdIRVJFIGlkPTEiKS0+ZXhlY3V0ZShbanNvbl9lbmNvZGUoJG1vZHMsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSldKTsKICAgIH0KICAgIGh1Yl9zY2hlbWFfZXh0cmEoJHBkbyk7CiAgICAkcGRvLT5leGVjKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBjbGllbnRfaHVicyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksCiAgICAgICAgbmFtZSBWQVJDSEFSKDI1NSksIHVybCBWQVJDSEFSKDUwMCksIGxpY2Vuc2Vfa2V5IFZBUkNIQVIoNjQpLAogICAgICAgIGh1Yl90eXBlIFZBUkNIQVIoMzApIERFRkFVTFQgJ2FnZW5jeScsIG5vdGVzIFRFWFQsCiAgICAgICAgbGFzdF9zeW5jIFRJTUVTVEFNUCBOVUxMLAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiKTsKICAgICRwZG8tPmV4ZWMoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGh1Yl9zdWJzY3JpcHRpb25zICgKICAgICAgICBpZCBWQVJDSEFSKDM2KSBQUklNQVJZIEtFWSwKICAgICAgICBodWJfaWQgVkFSQ0hBUigzNikgTk9UIE5VTEwsCiAgICAgICAgbW9kdWxlIFZBUkNIQVIoNTApIE5PVCBOVUxMLAogICAgICAgIHByaWNlX21vbnRobHkgREVDSU1BTCgxMCwyKSBERUZBVUxUIDAsCiAgICAgICAgY3VycmVuY3kgVkFSQ0hBUigxMCkgREVGQVVMVCAnRVVSJywKICAgICAgICBhY3RpdmUgVElOWUlOVCgxKSBERUZBVUxUIDEsCiAgICAgICAgc3RhcnRlZF9hdCBEQVRFIE5VTEwsCiAgICAgICAgbmV4dF9iaWxsaW5nX2RhdGUgREFURSBOVUxMLAogICAgICAgIG5vdGVzIFRFWFQsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIpOwogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgd2F5YmlsbHMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLAogICAgICAgIG51bWJlciBWQVJDSEFSKDUwKSwgZGF0ZSBEQVRFLAogICAgICAgIGRyaXZlcl9uYW1lIFZBUkNIQVIoMjU1KSwgdmVoaWNsZV9wbGF0ZSBWQVJDSEFSKDUwKSwgdmVoaWNsZV90eXBlIFZBUkNIQVIoMTAwKSwKICAgICAgICByb3V0ZV9mcm9tIFZBUkNIQVIoMjU1KSwgcm91dGVfdG8gVkFSQ0hBUigyNTUpLAogICAgICAgIGttX3N0YXJ0IERFQ0lNQUwoMTAsMSkgREVGQVVMVCAwLCBrbV9lbmQgREVDSU1BTCgxMCwxKSBERUZBVUxUIDAsCiAgICAgICAgZnVlbF9saXRlcnMgREVDSU1BTCgxMCwyKSBERUZBVUxUIDAsIGZ1ZWxfY29zdCBERUNJTUFMKDEwLDIpIERFRkFVTFQgMCwKICAgICAgICBjYXJnbyBWQVJDSEFSKDUwMCksIGNsaWVudCBWQVJDSEFSKDI1NSksCiAgICAgICAgc3RhdHVzIFZBUkNIQVIoMjApIERFRkFVTFQgJ2FjdGl2ZScsIG5vdGVzIFRFWFQsCiAgICAgICAgY3JlYXRlZF9ieSBWQVJDSEFSKDEwMCksIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiKTsKICAgIG9rKFsnbWVzc2FnZSc9PidQbGF0Zm9ybSB0YWJsZXMgcmVhZHknLCdsaWNlbnNlX2tleSc9PiRwZG8tPnF1ZXJ5KCJTRUxFQ1QgbGljZW5zZV9rZXkgRlJPTSBicmFuZGluZ19zZXR0aW5ncyBXSEVSRSBpZD0xIiktPmZldGNoQ29sdW1uKCldKTsKfQoKZnVuY3Rpb24gY2hlY2tMaWNlbnNlKCRwZG8sJHNlY3JldCl7CiAgICAkcj0kcGRvLT5xdWVyeSgiU0VMRUNUIGxpY2Vuc2Vfa2V5IEZST00gYnJhbmRpbmdfc2V0dGluZ3MgV0hFUkUgaWQ9MSIpLT5mZXRjaCgpOwogICAgaWYoISRyIHx8ICRyWydsaWNlbnNlX2tleSddIT09JHNlY3JldCkgZXJyKCfQndC10LLQsNC70LjQtNC10L0g0LDQtNC80LjQvdC40YHRgtGA0LDRgtC40LLQtdC9INC60LvRjtGHJyk7Cn0KCi8vIOKUgOKUgCBCUkFORElORyAod2hpdGUtbGFiZWwgaWRlbnRpdHkpIOKUgOKUgAppZigkYWN0aW9uPT09J2JyYW5kaW5nX3NldHRpbmdzJyl7CiAgICAkcGRvPWRiKCk7CiAgICBpZigkbWV0aG9kPT09J0dFVCcpewogICAgICAgICRyPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgaWQscHJvZHVjdF9uYW1lLGxvZ29fdXJsLGZhdmljb25fdXJsLHByaW1hcnlfY29sb3Isc2Vjb25kYXJ5X2NvbG9yLGZvb3Rlcl90ZXh0LAogICAgICAgICAgICBwb3dlcmVkX2J5X3Zpc2libGUsaHViX3R5cGUsYWRtaW5fbG9ja2VkLG1vZHVsZXNfZW5hYmxlZCBGUk9NIGJyYW5kaW5nX3NldHRpbmdzIFdIRVJFIGlkPTEiKS0+ZmV0Y2goKTsKICAgICAgICBpZigkcil7CiAgICAgICAgICAgICRyWydsaWNlbnNlX3JvbGUnXT1odWJfbGljZW5zZV9yb2xlKCk7CiAgICAgICAgICAgICRscz1odWJfbGljZW5zZV9zdGF0dXMoKTsKICAgICAgICAgICAgJHJbJ21vZHVsZXNfZW5hYmxlZCddPWh1Yl9lZmZlY3RpdmVfbW9kdWxlcygkbHMpOwogICAgICAgICAgICAkclsnbGljZW5zZV9zdGF0ZSddPSRsc1snc3RhdGUnXT8/J2FjdGl2ZSc7CgkgICAgICAgICAgICAkclsnbGljZW5zZV9tZXNzYWdlJ109JGxzWydtZXNzYWdlJ10/PycnOwoJICAgICAgICAgICAgJHJbJ2xpY2Vuc2VfdmFsaWRfdW50aWwnXT0kbHNbJ3ZhbGlkX3VudGlsJ10/P251bGw7CgkgICAgICAgICAgICAkclsnbGljZW5zZV9ncmFjZV91bnRpbCddPSRsc1snZ3JhY2VfdW50aWwnXT8/bnVsbDsKCSAgICAgICAgICAgICRyWydodWJfdHlwZSddPSRsc1snaHViX3NlY3RvciddPz8oJHJbJ2h1Yl90eXBlJ10/PydjbGllbnQnKTsKCSAgICAgICAgICAgIGlmKGluX2FycmF5KCRyWydsaWNlbnNlX3N0YXRlJ10sWydsb2NrZWQnLCdpbnZhbGlkJ10sdHJ1ZSkpewogICAgICAgICAgICAgICAgZm9yZWFjaCgkclsnbW9kdWxlc19lbmFibGVkJ10gYXMgJG1rPT4kbXYpICRyWydtb2R1bGVzX2VuYWJsZWQnXVskbWtdPTA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgb2soJHI/OltdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTsKICAgICAgICByZXF1aXJlSHViQWRtaW5PclNlY3JldCgkcGRvLCRiWydhZG1pbl9zZWNyZXQnXT8/JycpOwogICAgICAgICRmaWVsZHM9Wydwcm9kdWN0X25hbWUnLCdsb2dvX3VybCcsJ2Zhdmljb25fdXJsJywncHJpbWFyeV9jb2xvcicsJ3NlY29uZGFyeV9jb2xvcicsJ2Zvb3Rlcl90ZXh0JywKICAgICAgICAgICAgJ3Bvd2VyZWRfYnlfdmlzaWJsZScsJ2h1Yl90eXBlJ107CiAgICAgICAgJHNldD1bXTskdmFscz1bXTsKICAgICAgICBmb3JlYWNoKCRmaWVsZHMgYXMgJGYpeyBpZihhcnJheV9rZXlfZXhpc3RzKCRmLCRiKSl7ICRzZXRbXT0iJGY9PyI7ICR2YWxzW109JGJbJGZdOyB9IH0KICAgICAgICBpZigkc2V0KSAkcGRvLT5wcmVwYXJlKCJVUERBVEUgYnJhbmRpbmdfc2V0dGluZ3MgU0VUICIuaW1wbG9kZSgnLCcsJHNldCkuIiBXSEVSRSBpZD0xIiktPmV4ZWN1dGUoJHZhbHMpOwogICAgICAgIG9rKHRydWUpOwogICAgfQp9CgovLyDilIDilIAgTU9EVUxFIFRPR0dMRSAoY2FsbGVkIGxvY2FsbHkgZnJvbSBvd24gd19hZG1pbi5waHAsIG9yIHJlbW90ZWx5IGZyb20gYSBtYXN0ZXIgaHViKSDilIDilIAKaWYoJGFjdGlvbj09PSdtb2R1bGVfdG9nZ2xlJyl7CiAgICAkcGRvPWRiKCk7JGI9Ym9keSgpOwogICAgcmVxdWlyZUh1YkFkbWluT3JTZWNyZXQoJHBkbywkYlsnYWRtaW5fc2VjcmV0J10/PycnKTsKICAgICRtb2R1bGU9JGJbJ21vZHVsZSddPz8nJzskZW5hYmxlZD0oaW50KSgkYlsnZW5hYmxlZCddPz8wKTsKICAgIGlmKCEkbW9kdWxlKSBlcnIoJ01pc3NpbmcgbW9kdWxlJyk7CiAgICAkcj0kcGRvLT5xdWVyeSgiU0VMRUNUIG1vZHVsZXNfZW5hYmxlZCBGUk9NIGJyYW5kaW5nX3NldHRpbmdzIFdIRVJFIGlkPTEiKS0+ZmV0Y2goKTsKICAgICRtb2RzPWpzb25fZGVjb2RlKCRyWydtb2R1bGVzX2VuYWJsZWQnXT8/J3t9Jyx0cnVlKT86W107CiAgICAkbW9kc1skbW9kdWxlXT0kZW5hYmxlZDsKICAgICRwZG8tPnByZXBhcmUoIlVQREFURSBicmFuZGluZ19zZXR0aW5ncyBTRVQgbW9kdWxlc19lbmFibGVkPT8gV0hFUkUgaWQ9MSIpLT5leGVjdXRlKFtqc29uX2VuY29kZSgkbW9kcyldKTsKICAgIG9rKCRtb2RzKTsKfQoKLy8g4pSA4pSAIExPQ0sgLyBVTkxPQ0sgQURNSU4gQUNDRVNTIChiZWZvcmUgaGFuZGluZyB0aGUgaHViIHRvIGEgY2xpZW50KSDilIDilIAKaWYoJGFjdGlvbj09PSdhZG1pbl9sb2NrJyl7CiAgICAkcGRvPWRiKCk7JGI9Ym9keSgpOwogICAgcmVxdWlyZUh1YkFkbWluT3JTZWNyZXQoJHBkbywkYlsnYWRtaW5fc2VjcmV0J10/PycnKTsKICAgICRwZG8tPnByZXBhcmUoIlVQREFURSBicmFuZGluZ19zZXR0aW5ncyBTRVQgYWRtaW5fbG9ja2VkPT8gV0hFUkUgaWQ9MSIpLT5leGVjdXRlKFsoaW50KSgkYlsnbG9ja2VkJ10/PzEpXSk7CiAgICBvayh0cnVlKTsKfQoKLy8g4pSA4pSAIEZVTEwgREFUQSBFWFBPUlQgKGZvciBtaWdyYXRpbmcgdGhpcyBodWIgdG8gYW5vdGhlciBob3N0aW5nKSDilIDilIAKaWYoJGFjdGlvbj09PSdkYXRhX2V4cG9ydF9hbGwnKXsKICAgICRwZG89ZGIoKTsKICAgIGNoZWNrTGljZW5zZSgkcGRvLCRfR0VUWydhZG1pbl9zZWNyZXQnXT8/JycpOwogICAgJHRhYmxlcz1bJ3VzZXJzJywncHJvamVjdHMnLCd0YXNrcycsJ25vdGVzJywnY2xpZW50cycsJ2hvc3RpbmcnLCdwYXNzd29yZHMnLCdvZmZlcnMnLCdjb250cmFjdHMnLCd0YXJnZXRzJywKICAgICAgICAnY29tcGFueV9zZXR0aW5ncycsJ2RvY19jb3VudGVycycsJ2RvY3VtZW50cycsJ3JlY3VycmluZ19pbnZvaWNlcycsJ2hyX3JlcXVlc3RzJywnZW1haWxfbG9nJywKICAgICAgICAnYnJhbmRpbmdfc2V0dGluZ3MnLCdjbGllbnRfaHVicycsJ3dheWJpbGxzJ107CiAgICAkZHVtcD1bXTsKICAgIGZvcmVhY2goJHRhYmxlcyBhcyAkdCl7CiAgICAgICAgdHJ5eyAkZHVtcFskdF09JHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gYCR0YCIpLT5mZXRjaEFsbCgpOyB9Y2F0Y2goRXhjZXB0aW9uICRlKXsgJGR1bXBbJHRdPVtdOyB9CiAgICB9CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpOwogICAgaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0id2VidHJpeGlhX2h1Yl9iYWNrdXBfJy5kYXRlKCdZLW0tZCcpLicuanNvbiInKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoWydleHBvcnRlZF9hdCc9PmRhdGUoJ2MnKSwndGFibGVzJz0+JGR1bXBdLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgZXhpdDsKfQoKLy8g4pSA4pSAIEZVTEwgREFUQSBJTVBPUlQgKHJlc3RvcmUgYSBiYWNrdXAgb24gYSBmcmVzaCBpbnN0YWxsKSDilIDilIAKaWYoJGFjdGlvbj09PSdkYXRhX2ltcG9ydF9hbGwnKXsKICAgICRwZG89ZGIoKTskYj1ib2R5KCk7CiAgICBjaGVja0xpY2Vuc2UoJHBkbywkYlsnYWRtaW5fc2VjcmV0J10/PycnKTsKICAgICRkdW1wPSRiWyd0YWJsZXMnXT8/W107CiAgICBpZighJGR1bXApIGVycignTWlzc2luZyB0YWJsZXMgcGF5bG9hZCcpOwogICAgZm9yZWFjaCgkZHVtcCBhcyAkdGFibGU9PiRyb3dzKXsKICAgICAgICBpZighcHJlZ19tYXRjaCgnL15bYS16X10rJC8nLCR0YWJsZSkpIGNvbnRpbnVlOwogICAgICAgIGlmKCFpc19hcnJheSgkcm93cyl8fCFjb3VudCgkcm93cykpIGNvbnRpbnVlOwogICAgICAgIGZvcmVhY2goJHJvd3MgYXMgJHJvdyl7CiAgICAgICAgICAgICRjb2xzPWFycmF5X2tleXMoJHJvdyk7CiAgICAgICAgICAgICRwbGFjZWhvbGRlcnM9aW1wbG9kZSgnLCcsYXJyYXlfZmlsbCgwLGNvdW50KCRjb2xzKSwnPycpKTsKICAgICAgICAgICAgJGNvbExpc3Q9aW1wbG9kZSgnLCcsYXJyYXlfbWFwKGZ1bmN0aW9uKCRjKXtyZXR1cm4gImAkY2AiO30sJGNvbHMpKTsKICAgICAgICAgICAgJHVwZGF0ZXM9aW1wbG9kZSgnLCcsYXJyYXlfbWFwKGZ1bmN0aW9uKCRjKXtyZXR1cm4gImAkY2A9VkFMVUVTKGAkY2ApIjt9LCRjb2xzKSk7CiAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGAkdGFibGVgICgkY29sTGlzdCkgVkFMVUVTICgkcGxhY2Vob2xkZXJzKSBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSAkdXBkYXRlcyIpCiAgICAgICAgICAgICAgICAgICAgLT5leGVjdXRlKGFycmF5X3ZhbHVlcygkcm93KSk7CiAgICAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gJGUpeyAvKiBza2lwIHJvdy1sZXZlbCBlcnJvcnMsIGNvbnRpbnVlIGltcG9ydCAqLyB9CiAgICAgICAgfQogICAgfQogICAgb2soJ0ltcG9ydCBjb21wbGV0ZScpOwp9CgovLyDilIDilIAgRkFDVE9SWSBSRVNFVCAod2lwZSBidXNpbmVzcyBkYXRhLCBrZWVwIHNjaGVtYSDigJQgZm9yIHJlc2VsbGluZyB0byB0aGUgbmV4dCBjbGllbnQpIOKUgOKUgAppZigkYWN0aW9uPT09J2ZhY3RvcnlfcmVzZXQnKXsKICAgICRwZG89ZGIoKTskYj1ib2R5KCk7CiAgICBjaGVja0xpY2Vuc2UoJHBkbywkYlsnYWRtaW5fc2VjcmV0J10/PycnKTsKICAgIGlmKCgkYlsnY29uZmlybSddPz8nJykhPT0nV0lQRScpIGVycignTWlzc2luZyBjb25maXJtPVdJUEUnKTsKICAgICR0YWJsZXM9Wydwcm9qZWN0cycsJ3Rhc2tzJywnbm90ZXMnLCdjbGllbnRzJywnaG9zdGluZycsJ3Bhc3N3b3JkcycsJ29mZmVycycsJ2NvbnRyYWN0cycsJ3RhcmdldHMnLCdhY3Rpdml0eScsCiAgICAgICAgJ3ByZXNlbmNlJywnZG9jdW1lbnRzJywnZG9jX2NvdW50ZXJzJywncmVjdXJyaW5nX2ludm9pY2VzJywnaHJfcmVxdWVzdHMnLCdlbWFpbF9sb2cnLCd3YXliaWxscyddOwogICAgZm9yZWFjaCgkdGFibGVzIGFzICR0KXsgdHJ5eyAkcGRvLT5leGVjKCJUUlVOQ0FURSBUQUJMRSBgJHRgIik7IH1jYXRjaChFeGNlcHRpb24gJGUpe30gfQogICAgLy8ga2VlcCBleGFjdGx5IG9uZSBhZG1pbiB1c2VyLCByZXNldCBwYXNzd29yZAogICAgJHBkby0+ZXhlYygiREVMRVRFIEZST00gdXNlcnMgV0hFUkUgaXNfYWRtaW49MCIpOwogICAgJHBkby0+cHJlcGFyZSgiVVBEQVRFIHVzZXJzIFNFVCBwYXNzd29yZD0/IFdIRVJFIGlzX2FkbWluPTEiKS0+ZXhlY3V0ZShbcGFzc3dvcmRfaGFzaCgnd2VidHJpeGlhMjAyNScsUEFTU1dPUkRfREVGQVVMVCldKTsKICAgIG9rKCdGYWN0b3J5IHJlc2V0IGNvbXBsZXRlJyk7Cn0KCi8vIOKUgOKUgCBNQVNURVI6IENMSUVOVCBIVUIgUkVHSVNUUlkgKHVzZWQgYnkgaHViLndlYnRyaXhpYS5jb20gdG8gbWFuYWdlIGluc3RhbGxzIGl0IGhhcyBzb2xkKSDilIDilIAKaWYoJGFjdGlvbj09PSdjbGllbnRfaHVicycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBjbGllbnRfaHVicyBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7JGlkPSRiWydpZCddPz91bmlxaWQoJ2NoJyx0cnVlKTsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBjbGllbnRfaHVicyAoaWQsbmFtZSx1cmwsbGljZW5zZV9rZXksaHViX3R5cGUsbm90ZXMpIFZBTFVFUyAoPyw/LD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIG5hbWU9VkFMVUVTKG5hbWUpLHVybD1WQUxVRVModXJsKSxsaWNlbnNlX2tleT1WQUxVRVMobGljZW5zZV9rZXkpLAogICAgICAgICAgICBodWJfdHlwZT1WQUxVRVMoaHViX3R5cGUpLG5vdGVzPVZBTFVFUyhub3RlcykiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsnbmFtZSddPz8nJywkYlsndXJsJ10/PycnLCRiWydsaWNlbnNlX2tleSddPz8nJywkYlsnaHViX3R5cGUnXT8/J2FnZW5jeScsJGJbJ25vdGVzJ10/PycnXSk7CiAgICAgICAgb2soWydpZCc9PiRpZF0pOwogICAgfQogICAgaWYoJG1ldGhvZD09PSdERUxFVEUnKXskcGRvLT5wcmVwYXJlKCJERUxFVEUgRlJPTSBjbGllbnRfaHVicyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8nJ10pO29rKHRydWUpO30KfQppZigkYWN0aW9uPT09J2NsaWVudF9odWJfcGluZycpewogICAgJHBkbz1kYigpOyRpZD0kX0dFVFsnaWQnXT8/Jyc7CiAgICAkcGRvLT5wcmVwYXJlKCJVUERBVEUgY2xpZW50X2h1YnMgU0VUIGxhc3Rfc3luYz1OT1coKSBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRpZF0pOwogICAgb2sodHJ1ZSk7Cn0KCi8vIOKUgOKUgCBIVUIgU1VCU0NSSVBUSU9OUyAocGVyLW1vZHVsZSBtb250aGx5IGJpbGxpbmcgb2YgY2xpZW50IGh1YnMpIOKUgOKUgAppZigkYWN0aW9uPT09J2h1Yl9zdWJzY3JpcHRpb25zJyl7CiAgICAkcGRvPWRiKCk7CiAgICBpZigkbWV0aG9kPT09J0dFVCcpewogICAgICAgICR3aGVyZT0nJzskcGFyYW1zPVtdOwogICAgICAgIGlmKCFlbXB0eSgkX0dFVFsnaHViX2lkJ10pKXsgJHdoZXJlPScgV0hFUkUgaHViX2lkPT8nOyAkcGFyYW1zW109JF9HRVRbJ2h1Yl9pZCddOyB9CiAgICAgICAgJHN0PSRwZG8tPnByZXBhcmUoIlNFTEVDVCAqIEZST00gaHViX3N1YnNjcmlwdGlvbnMiLiR3aGVyZS4iIE9SREVSIEJZIGNyZWF0ZWRfYXQgREVTQyIpOwogICAgICAgICRzdC0+ZXhlY3V0ZSgkcGFyYW1zKTsKICAgICAgICBvaygkc3QtPmZldGNoQWxsKCkpOwogICAgfQogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOyRpZD0kYlsnaWQnXT8/dW5pcWlkKCdocycsdHJ1ZSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gaHViX3N1YnNjcmlwdGlvbnMgKGlkLGh1Yl9pZCxtb2R1bGUscHJpY2VfbW9udGhseSxjdXJyZW5jeSxhY3RpdmUsc3RhcnRlZF9hdCxuZXh0X2JpbGxpbmdfZGF0ZSxub3RlcykKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgbW9kdWxlPVZBTFVFUyhtb2R1bGUpLHByaWNlX21vbnRobHk9VkFMVUVTKHByaWNlX21vbnRobHkpLGN1cnJlbmN5PVZBTFVFUyhjdXJyZW5jeSksCiAgICAgICAgICAgIGFjdGl2ZT1WQUxVRVMoYWN0aXZlKSxzdGFydGVkX2F0PVZBTFVFUyhzdGFydGVkX2F0KSxuZXh0X2JpbGxpbmdfZGF0ZT1WQUxVRVMobmV4dF9iaWxsaW5nX2RhdGUpLG5vdGVzPVZBTFVFUyhub3RlcykiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsnaHViX2lkJ10/PycnLCRiWydtb2R1bGUnXT8/JycsJGJbJ3ByaWNlX21vbnRobHknXT8/MCwkYlsnY3VycmVuY3knXT8/J0VVUicsCiAgICAgICAgICAgICAgICAoaW50KSgkYlsnYWN0aXZlJ10/PzEpLCRiWydzdGFydGVkX2F0J10/P2RhdGUoJ1ktbS1kJyksJGJbJ25leHRfYmlsbGluZ19kYXRlJ10/P2RhdGUoJ1ktbS1kJyxzdHJ0b3RpbWUoJysxIG1vbnRoJykpLCRiWydub3RlcyddPz8nJ10pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gaHViX3N1YnNjcmlwdGlvbnMgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KCi8vIOKUgOKUgCBNYXJrIGEgc3Vic2NyaXB0aW9uIGFzIHBhaWQ6IGFkdmFuY2VzIG5leHRfYmlsbGluZ19kYXRlIG9uZSBtb250aCDilIDilIAKaWYoJGFjdGlvbj09PSdodWJfc3Vic2NyaXB0aW9uX3BhaWQnKXsKICAgICRwZG89ZGIoKTskYj1ib2R5KCk7CiAgICAkaWQ9JGJbJ2lkJ10/PycnO2lmKCEkaWQpZXJyKCdNaXNzaW5nIGlkJyk7CiAgICAkcz0kcGRvLT5wcmVwYXJlKCJTRUxFQ1QgbmV4dF9iaWxsaW5nX2RhdGUgRlJPTSBodWJfc3Vic2NyaXB0aW9ucyBXSEVSRSBpZD0/Iik7JHMtPmV4ZWN1dGUoWyRpZF0pOwogICAgJHJvdz0kcy0+ZmV0Y2goKTsgaWYoISRyb3cpIGVycignTm90IGZvdW5kJyk7CiAgICAkYmFzZT0kcm93WyduZXh0X2JpbGxpbmdfZGF0ZSddPzpkYXRlKCdZLW0tZCcpOwogICAgJG5leHQ9ZGF0ZSgnWS1tLWQnLHN0cnRvdGltZSgkYmFzZS4nICsxIG1vbnRoJykpOwogICAgJHBkby0+cHJlcGFyZSgiVVBEQVRFIGh1Yl9zdWJzY3JpcHRpb25zIFNFVCBuZXh0X2JpbGxpbmdfZGF0ZT0/LGFjdGl2ZT0xIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJG5leHQsJGlkXSk7CiAgICBvayhbJ25leHRfYmlsbGluZ19kYXRlJz0+JG5leHRdKTsKfQoKLy8g4pSA4pSAIEJpbGxpbmcgZGFzaGJvYXJkIHN0YXRzOiBNUlIsIG92ZXJkdWUsIGNvdW50cyDilIDilIAKaWYoJGFjdGlvbj09PSdodWJfYmlsbGluZ19zdGF0cycpewogICAgJHBkbz1kYigpOwogICAgJG1ycj0kcGRvLT5xdWVyeSgiU0VMRUNUIENPQUxFU0NFKFNVTShwcmljZV9tb250aGx5KSwwKSBGUk9NIGh1Yl9zdWJzY3JpcHRpb25zIFdIRVJFIGFjdGl2ZT0xIiktPmZldGNoQ29sdW1uKCk7CiAgICAkYWN0aXZlQ250PSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBodWJfc3Vic2NyaXB0aW9ucyBXSEVSRSBhY3RpdmU9MSIpLT5mZXRjaENvbHVtbigpOwogICAgJG92ZXJkdWU9JHBkby0+cXVlcnkoIlNFTEVDVCBocy4qLCBjaC5uYW1lIEFTIGh1Yl9uYW1lIEZST00gaHViX3N1YnNjcmlwdGlvbnMgaHMKICAgICAgICBMRUZUIEpPSU4gY2xpZW50X2h1YnMgY2ggT04gY2guaWQ9aHMuaHViX2lkCiAgICAgICAgV0hFUkUgaHMuYWN0aXZlPTEgQU5EIGhzLm5leHRfYmlsbGluZ19kYXRlIDwgQ1VSREFURSgpIE9SREVSIEJZIGhzLm5leHRfYmlsbGluZ19kYXRlIiktPmZldGNoQWxsKCk7CiAgICAkaHViQ250PSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBjbGllbnRfaHVicyIpLT5mZXRjaENvbHVtbigpOwogICAgb2soWydtcnInPT4oZmxvYXQpJG1yciwnYWN0aXZlX3N1YnNjcmlwdGlvbnMnPT4oaW50KSRhY3RpdmVDbnQsJ2h1YnMnPT4oaW50KSRodWJDbnQsJ292ZXJkdWUnPT4kb3ZlcmR1ZV0pOwp9CgovLyDilIDilIAgV0FZQklMTFMgLyDQn9Cq0KLQndCYINCb0JjQodCi0J7QktCVIOKUgOKUgAppZigkYWN0aW9uPT09J3dheWJpbGxzJyl7CiAgICAkcGRvPWRiKCk7CiAgICBpZigkbWV0aG9kPT09J0dFVCcpIG9rKCRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHdheWJpbGxzIE9SREVSIEJZIGRhdGUgREVTQywgY3JlYXRlZF9hdCBERVNDIiktPmZldGNoQWxsKCkpOwogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOyRpZD0kYlsnaWQnXT8/dW5pcWlkKCd3YicsdHJ1ZSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gd2F5YmlsbHMgKGlkLG51bWJlcixkYXRlLGRyaXZlcl9uYW1lLHZlaGljbGVfcGxhdGUsdmVoaWNsZV90eXBlLHJvdXRlX2Zyb20scm91dGVfdG8sCiAgICAgICAgICAgIGttX3N0YXJ0LGttX2VuZCxmdWVsX2xpdGVycyxmdWVsX2Nvc3QsY2FyZ28sY2xpZW50LHN0YXR1cyxub3RlcyxjcmVhdGVkX2J5KQogICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgbnVtYmVyPVZBTFVFUyhudW1iZXIpLGRhdGU9VkFMVUVTKGRhdGUpLGRyaXZlcl9uYW1lPVZBTFVFUyhkcml2ZXJfbmFtZSksCiAgICAgICAgICAgIHZlaGljbGVfcGxhdGU9VkFMVUVTKHZlaGljbGVfcGxhdGUpLHZlaGljbGVfdHlwZT1WQUxVRVModmVoaWNsZV90eXBlKSxyb3V0ZV9mcm9tPVZBTFVFUyhyb3V0ZV9mcm9tKSwKICAgICAgICAgICAgcm91dGVfdG89VkFMVUVTKHJvdXRlX3RvKSxrbV9zdGFydD1WQUxVRVMoa21fc3RhcnQpLGttX2VuZD1WQUxVRVMoa21fZW5kKSxmdWVsX2xpdGVycz1WQUxVRVMoZnVlbF9saXRlcnMpLAogICAgICAgICAgICBmdWVsX2Nvc3Q9VkFMVUVTKGZ1ZWxfY29zdCksY2FyZ289VkFMVUVTKGNhcmdvKSxjbGllbnQ9VkFMVUVTKGNsaWVudCksc3RhdHVzPVZBTFVFUyhzdGF0dXMpLG5vdGVzPVZBTFVFUyhub3RlcykiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsnbnVtYmVyJ10/Pygn0J/Qmy0nLmRhdGUoJ1ltZCcpLictJy5yYW5kKDEwMCw5OTkpKSwkYlsnZGF0ZSddPz9kYXRlKCdZLW0tZCcpLAogICAgICAgICAgICAgICAgJGJbJ2RyaXZlcl9uYW1lJ10/PycnLCRiWyd2ZWhpY2xlX3BsYXRlJ10/PycnLCRiWyd2ZWhpY2xlX3R5cGUnXT8/JycsJGJbJ3JvdXRlX2Zyb20nXT8/JycsJGJbJ3JvdXRlX3RvJ10/PycnLAogICAgICAgICAgICAgICAgJGJbJ2ttX3N0YXJ0J10/PzAsJGJbJ2ttX2VuZCddPz8wLCRiWydmdWVsX2xpdGVycyddPz8wLCRiWydmdWVsX2Nvc3QnXT8/MCwkYlsnY2FyZ28nXT8/JycsCiAgICAgICAgICAgICAgICAkYlsnY2xpZW50J10/PycnLCRiWydzdGF0dXMnXT8/J2FjdGl2ZScsJGJbJ25vdGVzJ10/PycnLCRiWydjcmVhdGVkX2J5J10/PycnXSk7CiAgICAgICAgb2soWydpZCc9PiRpZF0pOwogICAgfQogICAgaWYoJG1ldGhvZD09PSdERUxFVEUnKXskcGRvLT5wcmVwYXJlKCJERUxFVEUgRlJPTSB3YXliaWxscyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8nJ10pO29rKHRydWUpO30KfQppZigkYWN0aW9uPT09J3dheWJpbGxfc3RhdHVzJyl7CiAgICAkcGRvPWRiKCk7JGI9Ym9keSgpOwogICAgJGlkPSRiWydpZCddPz8nJztpZighJGlkKWVycignTWlzc2luZyBpZCcpOwogICAgJHBkby0+cHJlcGFyZSgiVVBEQVRFIHdheWJpbGxzIFNFVCBzdGF0dXM9PyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRiWydzdGF0dXMnXT8/J2FjdGl2ZScsJGlkXSk7CiAgICBvayh0cnVlKTsKfQoKaWYoJGFjdGlvbj09PSd2ZXJpZnlfc2VjcmV0Jyl7CiAgICAkcGRvPWRiKCk7CiAgICBjaGVja0xpY2Vuc2UoJHBkbywkX0dFVFsnYWRtaW5fc2VjcmV0J10/PygkX1BPU1RbJ2FkbWluX3NlY3JldCddPz8nJykpOwogICAgb2sodHJ1ZSk7Cn0KCmh0dHBfcmVzcG9uc2VfY29kZSg0MDQpOwplY2hvIGpzb25fZW5jb2RlKFsnb2snPT5mYWxzZSwnZXJyb3InPT4nVW5rbm93biBhY3Rpb246ICcuJGFjdGlvbl0pOwo=', 'config.example.php' => 'PD9waHAKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIGNvbmZpZy5leGFtcGxlLnBocCDigJQg0KjQkNCR0JvQntCdLgovLyDQndC+0YDQvNCw0LvQvdC+INCd0JUg0YHQtSDQvdCw0LvQsNCz0LAg0LTQsCDQv9C40L/QsNGIINGC0L7Qt9C4INGE0LDQudC7IOKAlCB3X2h1Yl9pbnN0YWxsLnBocAovLyDRgdCw0Lwg0YHRitC30LTQsNCy0LAgY29uZmlnLnBocCDRgSDQv9GA0LDQstC40LvQvdC40YLQtSDQtNCw0L3QvdC4INC/0YDQuCDQuNC90YHRgtCw0LvQsNGG0LjRjy4KLy8KLy8g0JjQt9C/0L7Qu9C30LLQsNC5INGC0L7QstCwINGB0LDQvNC+INCw0LrQviDQv9GA0LDQstC40Ygg0YDRitGH0L3QsCDQuNC90YHRgtCw0LvQsNGG0LjRjyAo0L3QsNC/0YAuINC90Y/QvNCwCi8vINC/0YDQsNCy0LAg0LfQsCDQt9Cw0L/QuNGBINC90LAg0YTQsNC50Lsg0L7RgiBQSFAg0Lgg0YLRgNGP0LHQstCwINC00LAg0LrQsNGH0LjRiCBjb25maWcucGhwCi8vINCz0L7RgtC+0LIg0L/RgNC10LcgRlRQL0ZpbGUgTWFuYWdlcik6Ci8vICAgMS4g0JrQvtC/0LjRgNCw0Lkg0YLQvtC30Lgg0YTQsNC50Lsg0LrQsNGC0L4gImNvbmZpZy5waHAiICjRgdGK0YnQsNGC0LAg0L/QsNC/0LrQsCDQutCw0YLQviBhcGkucGhwKQovLyAgIDIuINCf0L7Qv9GK0LvQvdC4INC00LDQvdC90LjRgtC1INC90LAgTXlTUUwg0LHQsNC30LDRgtCwINC+0YIgY1BhbmVsIOKGkiBNeVNRTCBEYXRhYmFzZXMKLy8gICAzLiAo0J/QviDQuNC30LHQvtGAKSDQotC10LvQtdCz0YDQsNC8INCx0L7RgiDRgtC+0LrQtdC9IOKAlCDQstC40LYgaHR0cHM6Ly90Lm1lL0JvdEZhdGhlcgovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKCmRlZmluZSgnREJfSE9TVCcsJ2xvY2FsaG9zdCcpOwpkZWZpbmUoJ0RCX05BTUUnLCdjcGFuZWx1c2VyX2RibmFtZScpOwpkZWZpbmUoJ0RCX1VTRVInLCdjcGFuZWx1c2VyX2RidXNlcicpOwpkZWZpbmUoJ0RCX1BBU1MnLCdkYl9wYXNzd29yZF9oZXJlJyk7CgovLyDQn9C+INC40LfQsdC+0YAg4oCUINC+0YHRgtCw0LLQuCDQv9GA0LDQt9C90L4g0LDQutC+INC90LUg0L/QvtC70LfQstCw0Ygg0KLQtdC70LXQs9GA0LDQvCDQuNC30LLQtdGB0YLQuNGPCmRlZmluZSgnVEdfVE9LRU4nLCcnKTsKZGVmaW5lKCdUR19DSEFUX0lEJywnJyk7CgovLyDQn9C+INC40LfQsdC+0YAg4oCUINCw0LrQviDQtSDQv9C+0L/RitC70L3QtdC9LCBBSSBzY2FuINGH0LXRgtC1INGB0L3QuNC80LrQuC9QREYg0YfRgNC10LcgT3BlbkFJIFJlc3BvbnNlcyBBUEkKZGVmaW5lKCdPUEVOQUlfQVBJX0tFWScsJycpOwpkZWZpbmUoJ09QRU5BSV9NT0RFTCcsJ2dwdC01LjUnKTsK', 'contracts.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0JTQvtCz0L7QstC+0YDQuDwvdGl0bGU+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9U29yYTp3Z2h0QDMwMDs0MDA7NTAwOzYwMDs3MDAmZmFtaWx5PURNK01vbm86d2dodEA0MDA7NTAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KPHN0eWxlPgo6cm9vdHsKICAtLWRhcms6IzE1MTUxNTsgLS1hY2NlbnQ6IzE1OTQ0NzsgLS1hY2NlbnQyOiM5Y2NjN2Q7IC0tZ3JlZW46IzE1OTQ0NzsKICAtLWdyZWVuLWJnOiNlZWY4ZTk7IC0tYm9yZGVyOiNkYmU4ZDQ7IC0tdGV4dDojMTUxNTE1OyAtLXRleHQyOiM0NTRiNDM7CiAgLS10ZXh0MzojNzY4MDcyOyAtLXN1cmZhY2U6I2ZiZmRmOTsgLS1hbWJlcjojZDk3NzA2Owp9Cip7bWFyZ2luOjA7cGFkZGluZzowO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KYm9keXtmb250LWZhbWlseTonU29yYScsc2Fucy1zZXJpZjtiYWNrZ3JvdW5kOiNlZWYzZWM7bWluLWhlaWdodDoxMDB2aDtwYWRkaW5nOjMwcHggMjBweH0KCi8qIFNFTEVDVE9SIFBBR0UgKi8KLnNlbGVjdG9yLXBhZ2V7bWF4LXdpZHRoOjkwMHB4O21hcmdpbjowIGF1dG99Ci5zZWxlY3Rvci1oZWFkZXJ7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbTozNnB4fQouc2VsZWN0b3ItaGVhZGVyIGltZ3toZWlnaHQ6MzhweDttYXJnaW4tYm90dG9tOjE2cHh9Ci5zZWxlY3Rvci10aXRsZXtmb250LXNpemU6MjZweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tdGV4dCk7bWFyZ2luLWJvdHRvbTo2cHh9Ci5zZWxlY3Rvci1zdWJ7Zm9udC1zaXplOjE0cHg7Y29sb3I6dmFyKC0tdGV4dDMpfQouY29udHJhY3QtZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgzLDFmcik7Z2FwOjE2cHg7bWFyZ2luLWJvdHRvbToyOHB4fQouY29udHJhY3QtdHlwZXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjI0cHggMjBweDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmFsbCAuMnM7dGV4dC1hbGlnbjpjZW50ZXJ9Ci5jb250cmFjdC10eXBlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JveC1zaGFkb3c6MCA0cHggMjRweCByZ2JhKDIxLDE0OCw3MSwuMTIpfQouY29udHJhY3QtdHlwZS5zZWxlY3RlZHtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtiYWNrZ3JvdW5kOiNmMGZkZjR9Ci5jdC1pY29ue2ZvbnQtc2l6ZTozMnB4O21hcmdpbi1ib3R0b206MTJweH0KLmN0LXRpdGxle2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10ZXh0KTttYXJnaW4tYm90dG9tOjRweH0KLmN0LWRlc2N7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdGV4dDMpO2xpbmUtaGVpZ2h0OjEuNX0KLmdlbmVyYXRlLWJ0bntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjMwMHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoxNHB4O2JvcmRlci1yYWRpdXM6MTJweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyOm5vbmU7Y29sb3I6I2ZmZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6J1NvcmEnLHNhbnMtc2VyaWY7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXN9Ci5nZW5lcmF0ZS1idG46aG92ZXJ7b3BhY2l0eTouOX0KLmdlbmVyYXRlLWJ0bjpkaXNhYmxlZHtvcGFjaXR5Oi40O2N1cnNvcjpub3QtYWxsb3dlZH0KCi8qIENPTlRSQUNUIERPQyBQQUdFICovCgkuY29udHJhY3QtZG9jLXBhZ2V7ZGlzcGxheTpub25lO21heC13aWR0aDoxMTgwcHg7bWFyZ2luOjAgYXV0b30KCS50b29sYmFye2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW4tYm90dG9tOjE2cHg7ZmxleC13cmFwOndyYXB9Ci50YnRue3BhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6J1NvcmEnLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwO3RyYW5zaXRpb246YWxsIC4xNXN9Ci50YnRuLnByaW1hcnl7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOiNmZmZ9Ci50YnRuLnNlY3tiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tdGV4dDIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKX0KLnRidG4uYmFja3tiYWNrZ3JvdW5kOiNmMGZkZjQ7Y29sb3I6dmFyKC0tYWNjZW50KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcil9CgkuZWRpdC1iYW5uZXJ7YmFja2dyb3VuZDojZmZmYmViO2JvcmRlcjoxcHggc29saWQgI2ZjZDM0ZDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMHB4IDE2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzkyNDAwZTttYXJnaW4tYm90dG9tOjE0cHg7ZGlzcGxheTpub25lO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4fQoJLmVkaXQtYmFubmVyLnNob3d7ZGlzcGxheTpmbGV4fQoJLmNvbnRyYWN0LXdvcmtzcGFjZXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjMyMHB4IG1pbm1heCgwLDg2MHB4KTtnYXA6MThweDthbGlnbi1pdGVtczpzdGFydH0KCS5jb250cmFjdC1lZGl0b3J7cG9zaXRpb246c3RpY2t5O3RvcDoxOHB4O21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDM2cHgpO292ZXJmbG93OmF1dG87YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNnB4O2JveC1zaGFkb3c6MCA0cHggMjhweCByZ2JhKDIxLDE0OCw3MSwuMDgpfQoJLmVkaXRvci10aXRsZXtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tdGV4dCk7bWFyZ2luLWJvdHRvbTo0cHh9CgkuZWRpdG9yLWhpbnR7Zm9udC1zaXplOjExcHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLXRleHQzKTttYXJnaW4tYm90dG9tOjE0cHh9CgkuZm9ybS1maWVsZHttYXJnaW4tYm90dG9tOjEycHh9CgkuZm9ybS1maWVsZCBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDhlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tdGV4dDMpO21hcmdpbi1ib3R0b206NXB4fQoJLmZvcm0tZmllbGQgaW5wdXQsLmZvcm0tZmllbGQgdGV4dGFyZWF7d2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OXB4IDEwcHg7Zm9udDoxMnB4ICdTb3JhJyxzYW5zLXNlcmlmO2NvbG9yOnZhcigtLXRleHQpO2JhY2tncm91bmQ6I2ZhZjlmZjtvdXRsaW5lOm5vbmV9CgkuZm9ybS1maWVsZCB0ZXh0YXJlYXttaW4taGVpZ2h0OjcycHg7cmVzaXplOnZlcnRpY2FsO2xpbmUtaGVpZ2h0OjEuNDV9CgkuZm9ybS1maWVsZCBpbnB1dDpmb2N1cywuZm9ybS1maWVsZCB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDIxLDE0OCw3MSwuMTIpO2JhY2tncm91bmQ6I2ZmZn0KCi8qIERPQyBTVFlMRVMgKi8KLmRvY3tiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czowO292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgMTJweCA0MHB4IHJnYmEoMCwwLDAsLjEyKTttYXgtd2lkdGg6Nzk0cHg7bWluLWhlaWdodDoxMTIzcHg7bWFyZ2luOjAgYXV0bztwb3NpdGlvbjpyZWxhdGl2ZX0KLmRvYzo6YmVmb3Jle2NvbnRlbnQ6J1cnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTQ1cHg7dG9wOjI4NXB4O2ZvbnQtc2l6ZTo0MzBweDtsaW5lLWhlaWdodDouODtmb250LXdlaWdodDo4MDA7Y29sb3I6cmdiYSgyMSwxNDgsNzEsLjA3KTt6LWluZGV4OjA7cG9pbnRlci1ldmVudHM6bm9uZX0KLmRvYy1oZWFkZXJ7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6NThweCA1OHB4IDIycHg7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MX0KLmRvYy1oZWFkZXI6OmJlZm9yZXtkaXNwbGF5Om5vbmV9Ci5oZWFkZXItdG9we2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxfQoubG9nby1pbWd7aGVpZ2h0OmF1dG87ZmlsdGVyOm5vbmU7Y29sb3I6dmFyKC0tZ3JlZW4pIWltcG9ydGFudDtmb250LXdlaWdodDo4MDAhaW1wb3J0YW50O2ZvbnQtc2l6ZToyN3B4IWltcG9ydGFudDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXNoYWRvdzoxcHggMXB4IDAgIzBiNWYyYTttYXJnaW4tYm90dG9tOjYycHh9Ci5kb2MtdHlwZS1ibG9ja3t0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tYm90dG9tOjMycHh9Ci5kdC1sYWJlbHtkaXNwbGF5Om5vbmV9Ci5kdC10aXRsZXtmb250LXNpemU6MjVweDtmb250LXdlaWdodDo4MDA7Y29sb3I6IzAwMDtsZXR0ZXItc3BhY2luZzowO3RleHQtdHJhbnNmb3JtOm5vbmV9Ci5kdC1udW17Zm9udC1zaXplOjEzcHg7Y29sb3I6IzExMTttYXJnaW4tdG9wOjZweDtmb250LWZhbWlseTonRE0gTW9ubycsbW9ub3NwYWNlfQouaGVhZGVyLWJvdHRvbXttYXJnaW4tdG9wOjA7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxfQouaGVhZGVyLXBhcnRpZXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDozMHB4fQoucGFydHktbGFiZWx7Zm9udC1zaXplOjEwcHg7bGV0dGVyLXNwYWNpbmc6LjEyZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOiM2NjcwNWY7bWFyZ2luLWJvdHRvbTo2cHg7Zm9udC13ZWlnaHQ6NzAwfQoucGFydHktbmFtZXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzExMTttYXJnaW4tYm90dG9tOjRweH0KLnBhcnR5LWRldGFpbHtmb250LXNpemU6MTFweDtjb2xvcjojNTU1O2xpbmUtaGVpZ2h0OjEuN30KLnBhcnR5LWRpdmlkZXJ7d2lkdGg6MXB4O2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMSk7bWFyZ2luOjAgMTBweH0KLmRvYy1ib2R5e3BhZGRpbmc6MCA1OHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MX0KLmNvbnRyYWN0LXNlY3Rpb257Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyKTtwYWRkaW5nOjIwcHggMH0KLmNvbnRyYWN0LXNlY3Rpb246bGFzdC1vZi10eXBle2JvcmRlci1ib3R0b206bm9uZX0KLmNzLW51bXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tYWNjZW50KTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjFlbTttYXJnaW4tYm90dG9tOjhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9Ci5jcy1udW06OmJlZm9yZXtjb250ZW50OicnO3dpZHRoOjNweDtoZWlnaHQ6MTNweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLXJhZGl1czoycHg7ZmxleC1zaHJpbms6MH0KLmNzLXRpdGxle2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS10ZXh0KTttYXJnaW4tYm90dG9tOjEycHh9Ci5jcy1ib2R5e2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXRleHQyKTtsaW5lLWhlaWdodDoxLjl9Ci5jcy1ib2R5IHB7bWFyZ2luLWJvdHRvbTo4cHh9Ci5jcy1ib2R5IHA6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Ci5jcy1ib2R5IC5hcnR7cGFkZGluZy1sZWZ0OjE0cHg7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkIHZhcigtLWJvcmRlcik7bWFyZ2luOjZweCAwfQouY3MtYm9keSB1bHtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjZweCAwfQouY3MtYm9keSB1bCBsaXtwYWRkaW5nOjNweCAwIDNweCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlfQouY3MtYm9keSB1bCBsaTo6YmVmb3Jle2NvbnRlbnQ6J+KWuCc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2NvbG9yOnZhcigtLWFjY2VudDIpO2ZvbnQtc2l6ZToxMXB4O3RvcDo0cHh9Ci5lZGl0YWJsZS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItYm90dG9tOjFweCBkYXNoZWQgdmFyKC0tYWNjZW50Mik7bWluLXdpZHRoOjEwMHB4O2NvbG9yOnZhcigtLXRleHQpO2ZvbnQtd2VpZ2h0OjUwMH0KLnNpZ24tc2VjdGlvbntwYWRkaW5nOjIwcHggMCAzNnB4O2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6NDBweH0KLnNpZ24tYm94e2JvcmRlci10b3A6MnB4IHNvbGlkIHZhcigtLWJvcmRlcik7cGFkZGluZy10b3A6MTJweH0KLnNpZ24tbGFiZWx7Zm9udC1zaXplOjlweDtjb2xvcjp2YXIoLS10ZXh0Myk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4xZW07bWFyZ2luLWJvdHRvbTozcHh9Ci5zaWduLW5hbWV7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXRleHQpfQouc2lnbi1hcmVhe2hlaWdodDo1MHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCB2YXIoLS1ib3JkZXIpO21hcmdpbjoxMnB4IDAgOHB4fQouc2lnbi1kYXRlLWxpbmV7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdGV4dDMpfQouZG9jLWZvb3RlcntiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDU4cHggNDJweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1lbmQ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxfQouZm9vdGVyLWxlZnR7Zm9udC1zaXplOjEycHg7Y29sb3I6IzExMX0uZm9vdGVyLWxlZnQgc3Ryb25ne2NvbG9yOiMxMTF9Ci5mb290ZXItcmlnaHR7Zm9udC1zaXplOjExcHg7Y29sb3I6IzE0NjVkODt0ZXh0LWFsaWduOnJpZ2h0O2xpbmUtaGVpZ2h0OjEuOH0KW2NvbnRlbnRlZGl0YWJsZT0idHJ1ZSJde291dGxpbmU6bm9uZTtib3JkZXItcmFkaXVzOjNweDt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cztjdXJzb3I6dGV4dH0KW2NvbnRlbnRlZGl0YWJsZT0idHJ1ZSJdOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgxMDgsOTksMjU1LC4wNyk7Ym94LXNoYWRvdzowIDAgMCAycHggcmdiYSgxMDgsOTksMjU1LC4yKX0KLmVkaXQtbW9kZSAuZWRpdGFibGUtZmllbGR7YmFja2dyb3VuZDpyZ2JhKDEwOCw5OSwyNTUsLjA0KTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWFjY2VudCk7Y3Vyc29yOnRleHR9CgovKiDilZDilZDilZAgUFJJTlQg4pWQ4pWQ4pWQICovCkBtZWRpYSBwcmludCB7CiAgQHBhZ2UgeyBzaXplOiBBNDsgbWFyZ2luOiAxNW1tIDE1bW0gMjBtbSAxNW1tOyB9CiAgKiB7IC13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OiBleGFjdCAhaW1wb3J0YW50OyBwcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0ICFpbXBvcnRhbnQ7IH0KICBodG1sLCBib2R5IHsgbWFyZ2luOiAwICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDAgIWltcG9ydGFudDsgYmFja2dyb3VuZDogI2ZmZiAhaW1wb3J0YW50OyB9CgkgIC5zZWxlY3Rvci1wYWdlLCAudG9vbGJhciwgLmVkaXQtYmFubmVyLCAuY29udHJhY3QtZWRpdG9yIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CgkgIC5jb250cmFjdC1kb2MtcGFnZSB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OyBtYXJnaW46IDAgIWltcG9ydGFudDsgcGFkZGluZzogMCAhaW1wb3J0YW50OyB9CgkgIC5jb250cmFjdC13b3Jrc3BhY2UgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9CiAgLmRvYyB7IGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDsgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OyBtYXgtd2lkdGg6bm9uZSAhaW1wb3J0YW50OyBtaW4taGVpZ2h0OmF1dG8gIWltcG9ydGFudDsgfQogIC5kb2M6OmJlZm9yZSB7IGNvbG9yOiByZ2JhKDIxLDE0OCw3MSwuMDYpICFpbXBvcnRhbnQ7IGxlZnQ6IDI1bW0gIWltcG9ydGFudDsgdG9wOiA2Mm1tICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogMTEwbW0gIWltcG9ydGFudDsgfQogIC5kb2MtaGVhZGVyIHsgYmFja2dyb3VuZDogI2ZmZiAhaW1wb3J0YW50OyBwYWRkaW5nOiAxNW1tIDE1bW0gN21tICFpbXBvcnRhbnQ7IH0KICAuZG9jLWhlYWRlcjo6YmVmb3JlIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CiAgLmxvZ28taW1nIHsgbWFyZ2luLWJvdHRvbTogMTVtbSAhaW1wb3J0YW50OyB9CiAgLmR0LXRpdGxlIHsgZm9udC1zaXplOiAxOHB0ICFpbXBvcnRhbnQ7IGNvbG9yOiMwMDAgIWltcG9ydGFudDsgfQogIC5kb2MtYm9keSB7IHBhZGRpbmc6IDAgMTVtbSAhaW1wb3J0YW50OyB9CiAgLmNvbnRyYWN0LXNlY3Rpb24geyBwYWRkaW5nOiAxMnB4IDAgIWltcG9ydGFudDsgfQogIC5jcy1ib2R5IHsgZm9udC1zaXplOiAxMnB4ICFpbXBvcnRhbnQ7IH0KICAuY3MtYm9keSBwIHsgbWFyZ2luLWJvdHRvbTogNXB4ICFpbXBvcnRhbnQ7IH0KICAuc2lnbi1zZWN0aW9uIHsgcGFkZGluZzogMTRweCAwIDIwcHggIWltcG9ydGFudDsgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9CiAgLnNpZ24tYXJlYSB7IGhlaWdodDogMzVweCAhaW1wb3J0YW50OyB9CiAgLmRvYy1mb290ZXIgeyBiYWNrZ3JvdW5kOiAjZmZmICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDdtbSAxNW1tIDEwbW0gIWltcG9ydGFudDsgfQogIFtjb250ZW50ZWRpdGFibGVdIHsgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7IH0KICAuZWRpdGFibGUtZmllbGQgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYyAhaW1wb3J0YW50OyB9CiAgaDIgeyBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDsgfQogIC5jb250cmFjdC1zZWN0aW9uIHsgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9Cgl9CglAbWVkaWEobWF4LXdpZHRoOjk4MHB4KXsuY29udHJhY3Qtd29ya3NwYWNle2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9LmNvbnRyYWN0LWVkaXRvcntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6YXV0bzttYXgtaGVpZ2h0Om5vbmV9LnRvb2xiYXJ7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9fQoJPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KCjwhLS0gU0VMRUNUT1IgLS0+CjxkaXYgY2xhc3M9InNlbGVjdG9yLXBhZ2UiIGlkPSJzZWxlY3RvclBhZ2UiPgogIDxkaXYgY2xhc3M9InNlbGVjdG9yLWhlYWRlciI+CiAgICA8ZGl2IGNsYXNzPSJzZWxlY3Rvci10aXRsZSI+0JPQtdC90LXRgNC40YDQsNC5INC00L7Qs9C+0LLQvtGAPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzZWxlY3Rvci1zdWIiPtCY0LfQsdC10YDQtdGC0LUg0LLQuNC00LAg0LTQvtCz0L7QstC+0YAsINC/0L7Qv9GK0LvQvdC10YLQtSDQtNCw0L3QvdC40YLQtSDQuCDQv9GA0LjQvdGC0LjRgNCw0LnRgtC1PC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3QtZ3JpZCIgaWQ9ImNvbnRyYWN0R3JpZCI+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC10eXBlIiBvbmNsaWNrPSJzZWxlY3RUeXBlKCd3ZWJzaXRlJykiIGlkPSJjdC13ZWJzaXRlIj4KICAgICAgPGRpdiBjbGFzcz0iY3QtaWNvbiI+8J+MkDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC10aXRsZSI+0JTQvtCz0L7QstC+0YAg0LfQsCDRgdCw0LnRgjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC1kZXNjIj7QmNC30YDQsNCx0L7RgtC60LAg0L3QsCDRg9C10LHRgdCw0LnRgiArINC+0L/RhtC40L7QvdCw0LvQvdCwINC/0L7QtNC00YDRitC20LrQsDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC10eXBlIiBvbmNsaWNrPSJzZWxlY3RUeXBlKCdzaG9wJykiIGlkPSJjdC1zaG9wIj4KICAgICAgPGRpdiBjbGFzcz0iY3QtaWNvbiI+8J+bkjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC10aXRsZSI+0JTQvtCz0L7QstC+0YAg0LfQsCDQvtC90LvQsNC50L0g0LzQsNCz0LDQt9C40L08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3QtZGVzYyI+V29vQ29tbWVyY2UgLyBFLWNvbW1lcmNlICsg0L/QvtC00LTRgNGK0LbQutCwPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXR5cGUiIG9uY2xpY2s9InNlbGVjdFR5cGUoJ21hcmtldGluZycpIiBpZD0iY3QtbWFya2V0aW5nIj4KICAgICAgPGRpdiBjbGFzcz0iY3QtaWNvbiI+8J+TsTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC10aXRsZSI+0JTQvtCz0L7QstC+0YAg0LfQsCDQvNCw0YDQutC10YLQuNC90LM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3QtZGVzYyI+0KHQvtGGLiDQvNGA0LXQttC4LCBHb29nbGUgQWRzLCBTRU8sINGA0LjQudC70YHQvtCy0LU8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3QtdHlwZSIgb25jbGljaz0ic2VsZWN0VHlwZSgnbWFpbnRlbmFuY2UnKSIgaWQ9ImN0LW1haW50ZW5hbmNlIj4KICAgICAgPGRpdiBjbGFzcz0iY3QtaWNvbiI+8J+UpzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC10aXRsZSI+0JTQvtCz0L7QstC+0YAg0LfQsCDQmNCiINC/0L7QtNC00YDRitC20LrQsDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC1kZXNjIj7QnNC10YHQtdGH0L3QsCDQv9C+0LTQtNGA0YrQttC60LAsINGF0L7RgdGC0LjQvdCzLCDQvNC+0L3QuNGC0L7RgNC40L3QszwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC10eXBlIiBvbmNsaWNrPSJzZWxlY3RUeXBlKCdzdWJjb250cmFjdG9yJykiIGlkPSJjdC1zdWJjb250cmFjdG9yIj4KICAgICAgPGRpdiBjbGFzcz0iY3QtaWNvbiI+8J+knTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC10aXRsZSI+0JTQvtCz0L7QstC+0YAg0LfQsCDQv9C+0LTQuNC30L/RitC70L3QuNGC0LXQuzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjdC1kZXNjIj7QnNC10LbQtNGDINC40LfQv9GK0LvQvdC40YLQtdC7INC4INCy0YrQvdGI0LXQvSDQv9Cw0YDRgtC90YzQvtGAPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXR5cGUiIG9uY2xpY2s9InNlbGVjdFR5cGUoJ2NvbXBsZXgnKSIgaWQ9ImN0LWNvbXBsZXgiPgogICAgICA8ZGl2IGNsYXNzPSJjdC1pY29uIj7irZA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3QtdGl0bGUiPtCa0L7QvNC/0LvQtdC60YHQtdC9INC00L7Qs9C+0LLQvtGAPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImN0LWRlc2MiPtCh0LDQudGCL9C80LDQs9Cw0LfQuNC9ICsg0LzQsNGA0LrQtdGC0LjQvdCzICsg0L/QvtC00LTRgNGK0LbQutCwPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8YnV0dG9uIGNsYXNzPSJnZW5lcmF0ZS1idG4iIG9uY2xpY2s9ImdlbmVyYXRlQ29udHJhY3QoKSIgaWQ9ImdlbmVyYXRlQnRuIiBkaXNhYmxlZD7QmNC30LHQtdGA0Lgg0LLQuNC0INC00L7Qs9C+0LLQvtGAIOKGkjwvYnV0dG9uPgo8L2Rpdj4KCjwhLS0gQ09OVFJBQ1QgRE9DIC0tPgo8ZGl2IGNsYXNzPSJjb250cmFjdC1kb2MtcGFnZSIgaWQ9ImNvbnRyYWN0RG9jUGFnZSI+CiAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICA8YnV0dG9uIGNsYXNzPSJ0YnRuIGJhY2siIG9uY2xpY2s9ImdvQmFjaygpIj7ihpAg0J3QsNC30LDQtDwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0idGJ0biBzZWMiIG9uY2xpY2s9InRvZ2dsZUVkaXQoKSIgaWQ9ImVkaXRCdG4iPuKcj++4jyDQoNC10LTQsNC60YLQuNGA0LDQuTwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0idGJ0biBzZWMiIG9uY2xpY2s9InNhdmVUZW1wbGF0ZSgpIj7wn5K+INCX0LDQv9Cw0LfQuCDRiNCw0LHQu9C+0L08L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9InRidG4gc2VjIiBvbmNsaWNrPSJyZXNldFRlbXBsYXRlKCkiPuKGuiDQndGD0LvQuNGA0LDQuSDRiNCw0LHQu9C+0L08L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9InRidG4gc2VjIiBvbmNsaWNrPSJ3aW5kb3cucHJpbnQoKSI+8J+WqCDQn9GA0LjQvdGC0LjRgNCw0Lk8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9InRidG4gcHJpbWFyeSIgb25jbGljaz0id2luZG93LnByaW50KCkiPuKshyBQREY8L2J1dHRvbj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJlZGl0LWJhbm5lciIgaWQ9ImVkaXRCYW5uZXIiPuKcj++4jyDQnNC+0LbQtdGIINC00LAg0YDQtdC00LDQutGC0LjRgNCw0Ygg0Lgg0LTQuNGA0LXQutGC0L3QviDQsiDQtNC+0LrRg9C80LXQvdGC0LAuPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtd29ya3NwYWNlIj4KICAgIDxhc2lkZSBjbGFzcz0iY29udHJhY3QtZWRpdG9yIiBpZD0iY29udHJhY3RFZGl0b3IiPgogICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItdGl0bGUiPtCf0L7Qv9GK0LvQstCw0L3QtSDQvdCwINC00L7Qs9C+0LLQvtGAPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1oaW50Ij7Qn9C+0LvQtdGC0LDRgtCwINGC0YPQuiDQv9C+0L/RitC70LLQsNGCINCy0YHQuNGH0LrQuCDQv9GA0LDQt9C90Lgg0LzQtdGB0YLQsCDQsiDQtNC+0LrRg9C80LXQvdGC0LAg0LDQstGC0L7QvNCw0YLQuNGH0L3Qvi48L2Rpdj4KICAgICAgPGRpdiBpZD0iY29udHJhY3RGb3JtIj48L2Rpdj4KICAgIDwvYXNpZGU+CiAgICA8ZGl2IGNsYXNzPSJkb2MiIGlkPSJjb250cmFjdERvYyI+PC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKPHNjcmlwdD4KbGV0IHNlbGVjdGVkVHlwZSA9IG51bGw7CmxldCBIVUJfU0VDVE9SID0gJ2FnZW5jeSc7CmxldCBIVUJfUk9MRSA9ICdjbGllbnQnOwpjb25zdCBtb250aHM9WyfRj9C90YMnLCfRhNC10LInLCfQvNCw0YAnLCfQsNC/0YAnLCfQvNCw0LknLCfRjtC90LgnLCfRjtC70LgnLCfQsNCy0LMnLCfRgdC10L8nLCfQvtC60YInLCfQvdC+0LUnLCfQtNC10LonXTsKZnVuY3Rpb24gZm10RGF0ZShkKXtyZXR1cm4gZC5nZXREYXRlKCkrJyAnK21vbnRoc1tkLmdldE1vbnRoKCldKycgJytkLmdldEZ1bGxZZWFyKCkrJ9CzLid9CmNvbnN0IFRPREFZID0gZm10RGF0ZShuZXcgRGF0ZSgpKTsKY29uc3QgWUVBUiA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTsKCmZ1bmN0aW9uIHNlbGVjdFR5cGUodHlwZSkgewogIHNlbGVjdGVkVHlwZSA9IHR5cGU7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNvbnRyYWN0LXR5cGUnKS5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJykpOwogIGNvbnN0IGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdC0nK3R5cGUpOwogIGlmKGVsKWVsLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dlbmVyYXRlQnRuJykuZGlzYWJsZWQgPSBmYWxzZTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2VuZXJhdGVCdG4nKS50ZXh0Q29udGVudCA9ICfQk9C10L3QtdGA0LjRgNCw0Lkg0LTQvtCz0L7QstC+0YDQsCDihpInOwp9CgpmdW5jdGlvbiBnb0JhY2soKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdG9yUGFnZScpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cmFjdERvY1BhZ2UnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIGVkaXRNb2RlID0gZmFsc2U7Cn0KCmxldCBlZGl0TW9kZSA9IGZhbHNlOwpmdW5jdGlvbiB0b2dnbGVFZGl0KCkgewogIGVkaXRNb2RlID0gIWVkaXRNb2RlOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0QmFubmVyJykuY2xhc3NMaXN0LnRvZ2dsZSgnc2hvdycsIGVkaXRNb2RlKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdEJ0bicpLnRleHRDb250ZW50ID0gZWRpdE1vZGUgPyAn4pyFINCT0L7RgtC+0LLQvicgOiAn4pyP77iPINCg0LXQtNCw0LrRgtC40YDQsNC5JzsKICBjb25zdCBkb2M9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyYWN0RG9jJyk7CiAgZG9jLmNsYXNzTGlzdC50b2dnbGUoJ2VkaXQtbW9kZScsIGVkaXRNb2RlKTsKICBkb2MuY29udGVudEVkaXRhYmxlID0gZWRpdE1vZGUgPyAndHJ1ZScgOiAnZmFsc2UnOwogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjb250ZW50ZWRpdGFibGVdLCAuZWRpdGFibGUtZmllbGQnKS5mb3JFYWNoKGVsID0+IHsKICAgIGVsLmNvbnRlbnRFZGl0YWJsZSA9IGVkaXRNb2RlID8gJ3RydWUnIDogJ2ZhbHNlJzsKICB9KTsKfQoKZnVuY3Rpb24gZXNjSHRtbChzKXtyZXR1cm4gU3RyaW5nKHM9PW51bGw/Jyc6cykucmVwbGFjZSgvJi9nLCcmYW1wOycpLnJlcGxhY2UoLzwvZywnJmx0OycpLnJlcGxhY2UoLz4vZywnJmd0OycpLnJlcGxhY2UoLyIvZywnJnF1b3Q7Jyk7fQpmdW5jdGlvbiBlc2NBdHRyKHMpe3JldHVybiBlc2NIdG1sKHMpLnJlcGxhY2UoLycvZywnJiMzOTsnKTt9CmZ1bmN0aW9uIGNzc0F0dHIocyl7cmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cXC9nLCdcXFxcJykucmVwbGFjZSgvIi9nLCdcXCInKTt9CgpmdW5jdGlvbiBmKGxhYmVsLCBkZWY9J19fX19fXycpIHsKICByZXR1cm4gYDxzcGFuIGNsYXNzPSJlZGl0YWJsZS1maWVsZCIgZGF0YS1sYWJlbD0iJHtlc2NBdHRyKGxhYmVsKX0iIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7ZGVmfTwvc3Bhbj5gOwp9CgpmdW5jdGlvbiBzZXRDb250cmFjdEZpZWxkKGxhYmVsLHZhbHVlKXsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjY29udHJhY3REb2MgLmVkaXRhYmxlLWZpZWxkW2RhdGEtbGFiZWw9IicrY3NzQXR0cihsYWJlbCkrJyJdJykuZm9yRWFjaChlbD0+ewogICAgZWwudGV4dENvbnRlbnQgPSB2YWx1ZSAmJiB2YWx1ZS50cmltKCkgPyB2YWx1ZSA6ICdfX19fX18nOwogIH0pOwp9CgpmdW5jdGlvbiBidWlsZENvbnRyYWN0Rm9ybSgpewogIGNvbnN0IGJveD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJhY3RGb3JtJyk7CiAgaWYoIWJveClyZXR1cm47CiAgY29uc3QgZmllbGRzPVsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjY29udHJhY3REb2MgLmVkaXRhYmxlLWZpZWxkW2RhdGEtbGFiZWxdJyldOwogIGNvbnN0IHNlZW49bmV3IE1hcCgpOwogIGZpZWxkcy5mb3JFYWNoKGVsPT57CiAgICBjb25zdCBsYWJlbD1lbC5kYXRhc2V0LmxhYmVsfHwn0J/QvtC70LUnOwogICAgY29uc3QgdmFsPWVsLnRleHRDb250ZW50LnRyaW0oKTsKICAgIGlmKCFzZWVuLmhhcyhsYWJlbCkpc2Vlbi5zZXQobGFiZWwsdmFsKTsKICB9KTsKICBpZighc2Vlbi5zaXplKXsKICAgIGJveC5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVkaXRvci1oaW50Ij7QkiDRgtC+0LfQuCDRiNCw0LHQu9C+0L0g0L3Rj9C80LAg0LzQsNGA0LrQuNGA0LDQvdC4INC/0L7Qu9C10YLQsC48L2Rpdj4nOwogICAgcmV0dXJuOwogIH0KICBjb25zdCBsb25nTGFiZWxzPS/QvtC/0LjRgdCw0L3QuNC1fNC+0LHRhdCy0LDRgnzQtNC10LnQvdC+0YHRgtC4fNGB0YLQvtC60Lh80YPRgdC70YPQs9CwfNC/0LDQutC10YJ80LzQsNGA0YjRgNGD0YJ80YPRgdC70L7QstC40Y980LzQsNGC0LXRgNC40LDQu9C4fNC00L7Qv9GK0LvQvdC40YLQtdC70L3Qvi9pOwogIGJveC5pbm5lckhUTUw9Wy4uLnNlZW4uZW50cmllcygpXS5tYXAoKFtsYWJlbCx2YWx1ZV0pPT57CiAgICBjb25zdCBpZD0nY2ZfJytNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTsKICAgIGNvbnN0IHRhZz1sb25nTGFiZWxzLnRlc3QobGFiZWwpPyd0ZXh0YXJlYSc6J2lucHV0JzsKICAgIGNvbnN0IHZhbHVlQXR0cj10YWc9PT0ndGV4dGFyZWEnPyc+Jytlc2NIdG1sKHZhbHVlKSsnPC90ZXh0YXJlYT4nOicgdmFsdWU9IicrZXNjQXR0cih2YWx1ZSkrJyI+JzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZm9ybS1maWVsZCI+PGxhYmVsIGZvcj0iJytpZCsnIj4nK2VzY0h0bWwobGFiZWwpKyc8L2xhYmVsPjwnK3RhZysnIGlkPSInK2lkKyciIGRhdGEtY29udHJhY3QtbGFiZWw9IicrZXNjQXR0cihsYWJlbCkrJyInK3ZhbHVlQXR0cisnPC9kaXY+JzsKICB9KS5qb2luKCcnKTsKICBib3gucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtY29udHJhY3QtbGFiZWxdJykuZm9yRWFjaChpbnB1dD0+ewogICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCgpPT5zZXRDb250cmFjdEZpZWxkKGlucHV0LmRhdGFzZXQuY29udHJhY3RMYWJlbCxpbnB1dC52YWx1ZSkpOwogIH0pOwp9CgpmdW5jdGlvbiBjb250cmFjdEhlYWRlcih0aXRsZSwgbnVtKSB7CiAgY29uc3QgaXNNYXN0ZXIgPSBIVUJfUk9MRSA9PT0gJ21hc3Rlcic7CiAgcmV0dXJuIGAKICA8ZGl2IGNsYXNzPSJkb2MtaGVhZGVyIj4KICAgIDxkaXYgY2xhc3M9ImhlYWRlci10b3AiPgogICAgICA8ZGl2IGNsYXNzPSJsb2dvLWltZyIgc3R5bGU9ImZpbHRlcjpub25lO2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxNHB4Ij4ke2YoJ9Cb0L7Qs9C+IC8g0YTQuNGA0LzQsCcsaXNNYXN0ZXI/J1dFQlRSSVhJQSc6J19fX19fX19fX19fX19fX18nKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZG9jLXR5cGUtYmxvY2siPgogICAgICAgIDxkaXYgY2xhc3M9ImR0LWxhYmVsIj7QlNC+0LrRg9C80LXQvdGCPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZHQtdGl0bGUiPiR7dGl0bGV9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZHQtbnVtIj7ihJYgJHtmKCfQndC+0LzQtdGAJywn0JTQntCTLScrWUVBUisnLScrJ19fXycpfTwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iaGVhZGVyLWJvdHRvbSI+CiAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1wYXJ0aWVzIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icGFydHktbGFiZWwiPtCY0LfQv9GK0LvQvdC40YLQtdC7PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0eS1uYW1lIj4ke2YoJ9CY0LfQv9GK0LvQvdC40YLQtdC7Jyxpc01hc3Rlcj8n0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQnOidfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0eS1kZXRhaWwiPtCV0JjQmjogJHtmKCfQldCY0Jog0LjQt9C/0YrQu9C90LjRgtC10LsnLGlzTWFzdGVyPydfX19fX19fX18nOidfX19fX19fX18nKX08YnI+RW1haWwv0YLQtdC7LjogJHtmKCfQmtC+0L3RgtCw0LrRgiDQuNC30L/RitC70L3QuNGC0LXQuycsaXNNYXN0ZXI/J29mZmljZUB3ZWJ0cml4aWEuY29tIC8gKzM1OSA4OCA0NzcgODIxNCc6J19fX19fX19fX19fX19fX19fX19fX19fX18nKX08YnI+0J/RgNC10LTRgdGC0LDQstC70Y/QstCw0L3QviDQvtGCOiAke2YoJ9Cf0YDQtdC00YHRgtCw0LLQu9GP0LLQsNGJINC40LfQv9GK0LvQvdC40YLQtdC7JywnX19fX19fX19fX19fX19fXycpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0eS1sYWJlbCI+0JLRitC30LvQvtC20LjRgtC10Ls8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LW5hbWUiIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JrQu9C40LXQvdGCJywn0JrQu9C40LXQvdGCIC8g0KTQuNGA0LzQsCDQntCe0JQnKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LWRldGFpbCIgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+0JXQmNCaOiAke2YoJ9CV0JjQmiDQutC70LjQtdC90YInLCdfX19fX19fX18nKX08YnI+RW1haWw6ICR7ZignRW1haWwg0LrQu9C40LXQvdGCJywnX19fX19fQF9fX19fLmJnJyl9PGJyPtCf0YDQtdC00YHRgtCw0LLQu9GP0LLQsNC90L4g0L7RgjogJHtmKCfQn9GA0LXQtNGB0YLQsNCy0LvRj9Cy0LDRiSDQutC70LjQtdC90YInLCdfX19fX19fX19fX19fXycpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImRvYy1ib2R5Ij5gOwp9CgpmdW5jdGlvbiBjb250cmFjdEZvb3RlcigpIHsKICBjb25zdCBpc01hc3RlciA9IEhVQl9ST0xFID09PSAnbWFzdGVyJzsKICByZXR1cm4gYAogIDxkaXYgY2xhc3M9InNpZ24tc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJzaWduLWJveCI+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tbGFiZWwiPtCX0LAg0JjQl9Cf0KrQm9Cd0JjQotCV0JvQrzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzaWduLW5hbWUiPiR7Zign0JjQt9C/0YrQu9C90LjRgtC10LsnLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tYXJlYSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tZGF0ZS1saW5lIj7QlNCw0YLQsDogJHtUT0RBWX0gJm5ic3A7Jm5ic3A7INCf0L7QtNC/0LjRgSDQuCDQv9C10YfQsNGCOiBfX19fX19fX19fX19fPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNpZ24tYm94Ij4KICAgICAgPGRpdiBjbGFzcz0ic2lnbi1sYWJlbCI+0JfQsCDQktCq0JfQm9Ce0JbQmNCi0JXQm9CvPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tbmFtZSIgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmtC70LjQtdC90YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tYXJlYSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tZGF0ZS1saW5lIj7QlNCw0YLQsDogX19fX19fX19fX19fX19fICZuYnNwOyZuYnNwOyDQn9C+0LTQv9C40YEg0Lgg0L/QtdGH0LDRgjogX19fX19fX19fX19fXzwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPC9kaXY+PCEtLSAvZG9jLWJvZHkgLS0+CiAgPGRpdiBjbGFzcz0iZG9jLWZvb3RlciI+CiAgICA8ZGl2IGNsYXNzPSJmb290ZXItbGVmdCI+PHN0cm9uZz4ke2YoJ9Ck0LjRgNC80LAnLGlzTWFzdGVyPyfQo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlCc6J19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L3N0cm9uZz48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1yaWdodCI+JHtmKCfQmtC+0L3RgtCw0LrRgicsaXNNYXN0ZXI/J29mZmljZUB3ZWJ0cml4aWEuY29tIMK3ICszNTkgODggNDc3IDgyMTQnOidfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9kaXY+CgkgIDwvZGl2PmA7Cn0KCmZ1bmN0aW9uIHNlY3RvckludHJvKHJvbGU9J9CY0LfQv9GK0LvQvdC40YLQtdC7JykgewogIHJldHVybiBgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiIgc3R5bGU9InBhZGRpbmctdG9wOjI0cHgiPgogICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dDIpO2xpbmUtaGVpZ2h0OjEuODtiYWNrZ3JvdW5kOiNmNWYzZmY7cGFkZGluZzoxNHB4IDE4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1hY2NlbnQpIj4KICAgICAg0KHQutC70Y7Rh9C10L0g0LTQvdC10YEsIDxzdHJvbmc+JHtUT0RBWX08L3N0cm9uZz4sINC80LXQttC00YMgPHN0cm9uZz4ke2Yocm9sZSwnX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPiDQuCA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JrQu9C40LXQvdGCJywnX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPi4KICAgIDwvZGl2PgogIDwvZGl2PmA7Cn0KCmZ1bmN0aW9uIHVuaXZlcnNhbENvbnRyYWN0KHRpdGxlLCBzdWJqZWN0LCBzZXJ2aWNlSXRlbXMsIGV4dHJhPScnKSB7CiAgcmV0dXJuIGNvbnRyYWN0SGVhZGVyKHRpdGxlLCAn0JTQntCTJykgKyBzZWN0b3JJbnRybygn0JjQt9C/0YrQu9C90LjRgtC10LsnKSArIGAKICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMTwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Cg0JXQlNCc0JXQojwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+PHA+JHtzdWJqZWN0fTwvcD48dWw+JHtzZXJ2aWNlSXRlbXMubWFwKHg9Pic8bGk+Jyt4Kyc8L2xpPicpLmpvaW4oJycpfTwvdWw+PC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDI8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KHQoNCe0Jog0Jgg0J7QoNCT0JDQndCY0JfQkNCm0JjQrzwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgIDxwPjIuMS4g0JTQvtCz0L7QstC+0YDRitGCINCy0LvQuNC30LAg0LIg0YHQuNC70LAg0L7RgiA8c3Ryb25nPiR7VE9EQVl9PC9zdHJvbmc+INC4INGB0LUg0LjQt9C/0YrQu9C90Y/QstCwINC30LAg0YHRgNC+0LogJHtmKCfQodGA0L7QuicsJ19fX19fX19fX18nKX0uPC9wPgogICAgICA8cD4yLjIuINCS0YrQt9C70L7QttC40YLQtdC70Y/RgiDQv9GA0LXQtNC+0YHRgtCw0LLRjyDQvdCw0LLRgNC10LzQtSDQvdC10L7QsdGF0L7QtNC40LzQuNGC0LUg0LTQvtC60YPQvNC10L3RgtC4LCDQtNC+0YHRgtGK0L/QuCwg0LjQvdGE0L7RgNC80LDRhtC40Y8g0Lgg0YHRitC00LXQudGB0YLQstC40LUuPC9wPgogICAgICA8cD4yLjMuINCf0YDQvtC80LXQvdC4INC40LfQstGK0L0g0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC40Y8g0L7QsdGF0LLQsNGCINGB0LUg0L7Qv9C40YHQstCw0YIg0L/QuNGB0LzQtdC90L4g0Lgg0YHQtSDQt9Cw0L/Qu9Cw0YnQsNGCINC+0YLQtNC10LvQvdC+LjwvcD4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAzPC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCm0JXQndCQINCYINCf0JvQkNCp0JDQndCVPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHA+My4xLiDQktGK0LfQvdCw0LPRgNCw0LbQtNC10L3QuNC10YLQviDQtSA8c3Ryb25nPiR7Zign0KHRg9C80LAnLCdfX19fX19fX19fJyl9PC9zdHJvbmc+ICR7Zign0JLQsNC70YPRgtCwJywn0LvQsi4vRVVSJyl9LCDQsdC10Lcv0YEg0JTQlNChINGB0L/QvtGA0LXQtCDRgNC10LPQuNGB0YLRgNCw0YbQuNGP0YLQsCDQvdCwINC40LfQv9GK0LvQvdC40YLQtdC70Y8uPC9wPgogICAgICA8cD4zLjIuINCf0LvQsNGJ0LDQvdC1OiAke2YoJ9Cf0LvQsNGJ0LDQvdC1Jywn0LDQstCw0L3RgSBfX19fJSwg0L7RgdGC0LDRgtGK0Log0L/RgNC4INC/0YDQuNC10LzQsNC90LUgLyDQvNC10YHQtdGH0L3QsCDRgtCw0LrRgdCwINC00L4gX18g0YfQuNGB0LvQvicpfS48L3A+CiAgICAgIDxwPjMuMy4g0J/RgNC4INC30LDQsdCw0LLQtdC90L4g0L/Qu9Cw0YnQsNC90LUg0LjQt9C/0YrQu9C90LXQvdC40LXRgtC+INC80L7QttC1INC00LAg0LHRitC00LUg0LLRgNC10LzQtdC90L3QviDRgdC/0YDRj9C90L4g0LTQviDRg9GA0LXQttC00LDQvdC1INC90LAg0LfQsNC00YrQu9C20LXQvdC40LXRgtC+LjwvcD4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA0PC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCe0KLQk9Ce0JLQntCg0J3QntCh0KIg0Jgg0J/QntCS0JXQoNCY0KLQldCb0J3QntCh0KI8L2Rpdj4KCSAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KCSAgICAgIDxwPjQuMS4g0KHRgtGA0LDQvdC40YLQtSDQv9Cw0LfRj9GCINGC0YrRgNCz0L7QstGB0LrQsCwg0LvQuNGH0L3QsCwg0LzQtdC00LjRhtC40L3RgdC60LAsINGB0YfQtdGC0L7QstC+0LTQvdCwINC40LvQuCDQtNGA0YPQs9CwINC/0L7QstC10YDQuNGC0LXQu9C90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8sINC/0L7Qu9GD0YfQtdC90LAg0LLRitCyINCy0YDRitC30LrQsCDRgSDQtNC+0LPQvtCy0L7RgNCwLjwvcD4KCSAgICAgIDxwPjQuMi4g0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC+0YLQs9C+0LLQsNGA0Y8g0LfQsCDQutCw0YfQtdGB0YLQstC10L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQsiDRgNCw0LzQutC40YLQtSDQvdCwINC00L7Qs9C+0LLQvtGA0LXQvdC40Y8g0L7QsdGF0LLQsNGCLCDQvdC+INC90LUg0L3QvtGB0Lgg0L7RgtCz0L7QstC+0YDQvdC+0YHRgiDQt9CwINC00LXQudGB0YLQstC40Y8g0L3QsCDRgtGA0LXRgtC4INC70LjRhtCwINC40LvQuCDQvdC10L/RgNC10LTQvtGB0YLQsNCy0LXQvdC4INC00LDQvdC90LguPC9wPgoJICAgICAgPHA+NC4zLiDQm9C40YfQvdC40YLQtSDQtNCw0L3QvdC4INGB0LUg0L7QsdGA0LDQsdC+0YLQstCw0YIg0YHQsNC80L4g0LfQsCDRhtC10LvQuNGC0LUg0L3QsCDQtNC+0LPQvtCy0L7RgNCwINC4INGB0L/QvtGA0LXQtCDQv9GA0LjQu9C+0LbQuNC80L7RgtC+INC30LDQutC+0L3QvtC00LDRgtC10LvRgdGC0LLQvi48L3A+CgkgICAgICA8cD40LjQuINCf0YDQuNC10LzQsNC90LXRgtC+INGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDRgSDQv9GA0L7RgtC+0LrQvtC7LCDQuNC80LXQudC7INC/0L7RgtCy0YrRgNC20LTQtdC90LjQtSDQuNC70Lgg0LTRgNGD0LMg0L/QuNGB0LzQtdC9INC30LDQv9C40YE6ICR7Zign0J/RgNC40LXQvNCw0L3QtScsJ9C/0YDQvtGC0L7QutC+0LsgLyDQuNC80LXQudC7IC8g0LTRgNGD0LMg0L3QsNGH0LjQvScpfS48L3A+CgkgICAgICA8cD40LjUuINCT0LDRgNCw0L3RhtC40L7QvdC10L0g0YHRgNC+0Log0LjQu9C4INGB0YDQvtC6INC30LAg0YDQtdC60LvQsNC80LDRhtC40Lg6ICR7Zign0JPQsNGA0LDQvdGG0LjRjyAvINGA0LXQutC70LDQvNCw0YbQuNC4JywnX19fX19fX19fXycpfS48L3A+CgkgICAgPC9kaXY+CgkgIDwvZGl2PgoJICAke2V4dHJhfQoJICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KCSAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDU8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0JrQvtC80YPQvdC40LrQsNGG0LjRjywg0LTQvtC60YPQvNC10L3RgtC4INC4INC/0YDQvtC80LXQvdC4PC9kaXY+CgkgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CgkgICAgICA8cD41LjEuINCe0YTQuNGG0LjQsNC70L3QsCDQutC+0LzRg9C90LjQutCw0YbQuNGPOiAke2YoJ9Ce0YTQuNGG0LjQsNC70LXQvSDQutC+0L3RgtCw0LrRgicsJ9C40LzQtdC50LsgLyDQsNC00YDQtdGBIC8g0YHQuNGB0YLQtdC80LAnKX0uPC9wPgoJICAgICAgPHA+NS4yLiDQndC10L7QsdGF0L7QtNC40LzQuCDQv9GA0LjQu9C+0LbQtdC90LjRjzogJHtmKCfQn9GA0LjQu9C+0LbQtdC90LjRjycsJ9C+0YTQtdGA0YLQsCwg0YHQv9C10YbQuNGE0LjQutCw0YbQuNGPLCDQs9GA0LDRhNC40LosINC/0YDQvtGC0L7QutC+0LsnKX0uPC9wPgoJICAgICAgPHA+NS4zLiDQktGB0LjRh9C60Lgg0L/RgNC+0LzQtdC90Lgg0LIg0L7QsdGF0LLQsNGC0LAsINGG0LXQvdCw0YLQsCDQuNC70Lgg0YHRgNC+0LrQsCDRgdC1INC/0L7RgtCy0YrRgNC20LTQsNCy0LDRgiDQv9C40YHQvNC10L3Qvi48L3A+CgkgICAgPC9kaXY+CgkgIDwvZGl2PgoJICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KCSAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDY8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QoNCV0JrQoNCQ0KLQr9CS0JDQndCVINCYINCX0JDQmtCb0K7Qp9CY0KLQldCb0J3QmCDQoNCQ0JfQn9Ce0KDQldCU0JHQmDwvZGl2PgoJICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgoJICAgICAgPHA+Ni4xLiDQlNC+0LPQvtCy0L7RgNGK0YIg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXQutGA0LDRgtC10L0g0L/QviDQstC30LDQuNC80L3QviDRgdGK0LPQu9Cw0YHQuNC1INC40LvQuCDRgSDQv9C40YHQvNC10L3QviDQv9GA0LXQtNC40LfQstC10YHRgtC40LUg0L7RgiAke2YoJ9Cf0YDQtdC00LjQt9Cy0LXRgdGC0LjQtScsJzMwINC00L3QuCcpfS48L3A+CgkgICAgICA8cD42LjIuINCX0LAg0L3QtdGD0YDQtdC00LXQvdC40YLQtSDQstGK0L/RgNC+0YHQuCDRgdC1INC/0YDQuNC70LDQs9CwINC00LXQudGB0YLQstCw0YnQvtGC0L4g0LfQsNC60L7QvdC+0LTQsNGC0LXQu9GB0YLQstC+INC90LAg0KDQtdC/0YPQsdC70LjQutCwINCR0YrQu9Cz0LDRgNC40Y8uPC9wPgoJICAgICAgPHA+Ni4zLiDQlNC+0LPQvtCy0L7RgNGK0YIg0LUg0YHRitGB0YLQsNCy0LXQvSDQsiDQtNCy0LAg0LXQtNC90LDQutCy0Lgg0LXQutC30LXQvNC/0LvRj9GA0LAg4oCUINC/0L4g0LXQtNC40L0g0LfQsCDQstGB0Y/QutCwINGB0YLRgNCw0L3QsC48L3A+CgkgICAgPC9kaXY+CgkgIDwvZGl2PmAgKyBjb250cmFjdEZvb3RlcigpOwp9Cgpjb25zdCBTRUNUT1JfQ0FSRFMgPSB7CiAgbWVkaWNhbDpbCiAgICBbJ21lZGljYWxfc2VydmljZScsJ+Kale+4jycsJ9CU0L7Qs9C+0LLQvtGAINC30LAg0LzQtdC00LjRhtC40L3RgdC60LAg0YPRgdC70YPQs9CwJywn0J/RgNC10LPQu9C10LTQuCwg0L/RgNC+0YbQtdC00YPRgNC4LCDQv9Cw0LrQtdGC0L3QviDQvtCx0YHQu9GD0LbQstCw0L3QtSddLAogICAgWydtZWRpY2FsX3N1YnNjcmlwdGlvbicsJ/Cfk4UnLCfQkNCx0L7QvdCw0LzQtdC90YIg0LfQsCDQutC70LjQvdC40LrQsCcsJ9Cf0LXRgNC40L7QtNC40YfQvdC+INC+0LHRgdC70YPQttCy0LDQvdC1INC4INC/0YDQvtGE0LjQu9Cw0LrRgtC40LrQsCddLAogICAgWydtZWRpY2FsX3ByaXZhY3knLCfwn5SQJywn0J/QvtCy0LXRgNC40YLQtdC70L3QvtGB0YIg0Lgg0LvQuNGH0L3QuCDQtNCw0L3QvdC4JywnR0RQUi/QvNC10LTQuNGG0LjQvdGB0LrQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyddCiAgXSwKICBsb2dpc3RpY3M6WwogICAgWyd0cmFuc3BvcnQnLCfwn5qaJywn0JTQvtCz0L7QstC+0YAg0LfQsCDRgtGA0LDQvdGB0L/QvtGA0YInLCfQmtGD0YDRgdC+0LLQtSwg0YLQvtCy0LDRgNC4LCDQvNCw0YDRiNGA0YPRgtC4LCDQvtGC0LPQvtCy0L7RgNC90L7RgdGC0LgnXSwKICAgIFsnd2FyZWhvdXNlJywn8J+TpicsJ9CU0L7Qs9C+0LLQvtGAINC30LAg0YHQutC70LDQtCcsJ9Ch0YrRhdGA0LDQvdC10L3QuNC1LCDQv9GA0LjQtdC80LDQvdC1INC4INC/0YDQtdC00LDQstCw0L3QtSddLAogICAgWydmbGVldF9zZXJ2aWNlJywn8J+nvicsJ9Cf0YrRgtC90Lgg0LvQuNGB0YLQvtCy0LUg0Lgg0LDQstGC0L7Qv9Cw0YDQuicsJ9CQ0LLRgtC+0LzQvtCx0LjQu9C4LCDQs9C+0YDQuNCy0L4sINC+0YLRh9C10YLQvdC+0YHRgiddCiAgXSwKICBjb25zdHJ1Y3Rpb246WwogICAgWydjb25zdHJ1Y3Rpb25fd29yaycsJ/Cfj5fvuI8nLCfQlNC+0LPQvtCy0L7RgCDQt9CwINCh0JzQoCcsJ9Ch0YLRgNC+0LjRgtC10LvQvdC+LdC80L7QvdGC0LDQttC90Lgg0YDQsNCx0L7RgtC4J10sCiAgICBbJ3Jlbm92YXRpb24nLCfwn6exJywn0KDQtdC80L7QvdGCIC8g0LzQvtC90YLQsNC2Jywn0JzQsNGC0LXRgNC40LDQu9C4LCDQtdGC0LDQv9C4LCDQv9GA0LjQtdC80LDQvdC1J10sCiAgICBbJ3N1YmNvbnRyYWN0b3JfYnVpbGQnLCfwn6SdJywn0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LsnLCfQktGK0L3RiNC10L0g0LXQutC40L8g0LjQu9C4INC80LDQudGB0YLQvtGAJ10KICBdLAogIHJldGFpbDpbCiAgICBbJ3N1cHBseScsJ/Cfm43vuI8nLCfQlNC+0LPQvtCy0L7RgCDQt9CwINC00L7RgdGC0LDQstC60LAnLCfQodGC0L7QutC4LCDQutC+0LvQuNGH0LXRgdGC0LLQsCwg0YHRgNC+0LrQvtCy0LUnXSwKICAgIFsncmV0YWlsX3NlcnZpY2UnLCfwn4+sJywn0J7QsdGB0LvRg9C20LLQsNC90LUg0L3QsCDQvNCw0LPQsNC30LjQvScsJ9Cf0L7QtNC00YDRitC20LrQsCwg0L3QsNC70LjRh9C90L7RgdGC0LgsINC/0YDQvtGG0LXRgdC4J10sCiAgICBbJ3NhbGVfdGVybXMnLCfwn5OEJywn0J7QsdGJ0Lgg0YLRitGA0LPQvtCy0YHQutC4INGD0YHQu9C+0LLQuNGPJywn0J/Qu9Cw0YnQsNC90LUsINCy0YDRitGJ0LDQvdC1LCDQs9Cw0YDQsNC90YbQuNC4J10KICBdLAogIHJlc3RhdXJhbnQ6WwogICAgWydyZXN0YXVyYW50X3N1cHBseScsJ/Cfjb3vuI8nLCfQlNC+0LPQvtCy0L7RgCDRgSDQtNC+0YHRgtCw0LLRh9C40LonLCfQpdGA0LDQvdC4LCDQvdCw0L/QuNGC0LrQuCwg0LTQvtGB0YLQsNCy0LrQuCddLAogICAgWydldmVudF9jYXRlcmluZycsJ/CfpYInLCfQmtC10YLRitGA0LjQvdCzIC8g0YHRitCx0LjRgtC40LUnLCfQnNC10L3Rjiwg0LTQsNGC0LAsINCx0YDQvtC5INCz0L7RgdGC0LgnXSwKICAgIFsnc3RhZmZfc2VydmljZScsJ/CfkaUnLCfQn9C10YDRgdC+0L3QsNC7IC8g0L7QsdGB0LvRg9C20LLQsNC90LUnLCfQodC80LXQvdC4LCDQvtGC0LPQvtCy0L7RgNC90L7RgdGC0LgsINC30LDQv9C70LDRidCw0L3QtSddCiAgXSwKICBhY2NvdW50aW5nOlsKICAgIFsnYWNjb3VudGluZ19zZXJ2aWNlJywn8J+nricsJ9Ch0YfQtdGC0L7QstC+0LTQvdC+INC+0LHRgdC70YPQttCy0LDQvdC1Jywn0JzQtdGB0LXRh9C90L4g0YHRh9C10YLQvtCy0L7QtNGB0YLQstC+INC4INC+0YLRh9C10YLQuCddLAogICAgWydwYXlyb2xsJywn8J+RpCcsJ9Ci0KDQlyDQuCDQt9Cw0L/Qu9Cw0YLQuCcsJ9Cf0LXRgNGB0L7QvdCw0LssINCy0LXQtNC+0LzQvtGB0YLQuCwg0LTQtdC60LvQsNGA0LDRhtC40LgnXSwKICAgIFsndGF4X2NvbnN1bHQnLCfwn5OKJywn0JTQsNC90YrRh9C90LAg0LrQvtC90YHRg9C70YLQsNGG0LjRjycsJ9Ch0L/RgNCw0LLQutC4LCDQsNC90LDQu9C40LfQuCwg0YHRgtCw0L3QvtCy0LjRidCwJ10KICBdLAogIGxlZ2FsOlsKICAgIFsnbGVnYWxfc2VydmljZScsJ+Kalu+4jycsJ9Cf0YDQsNCy0L3QviDQvtCx0YHQu9GD0LbQstCw0L3QtScsJ9Ca0L7QvdGB0YPQu9GC0LDRhtC40Lgg0Lgg0LTQvtC60YPQvNC10L3RgtC4J10sCiAgICBbJ2NvdXJ0X3JlcHJlc2VudGF0aW9uJywn8J+Pm++4jycsJ9Cf0YDQvtGG0LXRgdGD0LDQu9C90L4g0L/RgNC10LTRgdGC0LDQstC40YLQtdC70YHRgtCy0L4nLCfQlNC10LvQviwg0YHRitC0LCDQv9GK0LvQvdC+0LzQvtGJ0LjRjyddLAogICAgWydsZWdhbF9zdWJzY3JpcHRpb24nLCfwn5OaJywn0JDQsdC+0L3QsNC80LXQvdGC0L3QviDQv9GA0LDQstC90L4g0L7QsdGB0LvRg9C20LLQsNC90LUnLCfQnNC10YHQtdGH0LXQvSDQv9Cw0LrQtdGCINGD0YHQu9GD0LPQuCddCiAgXQp9OwoKY29uc3QgU0VDVE9SX0NPTlRSQUNUUyA9IHsKICBtZWRpY2FsX3NlcnZpY2U6KCk9PnVuaXZlcnNhbENvbnRyYWN0KCfQlNCe0JPQntCS0J7QoCDQl9CQINCc0JXQlNCY0KbQmNCd0KHQmtCQINCj0KHQm9Cj0JPQkCcsJ9CY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQv9GA0LXQtNC+0YHRgtCw0LLRjyDQvNC10LTQuNGG0LjQvdGB0LrQsC/Qt9C00YDQsNCy0L3QsCDRg9GB0LvRg9Cz0LAg0L/RgNC4INGB0L/QsNC30LLQsNC90LUg0L3QsCDQv9GA0L7RhNC10YHQuNC+0L3QsNC70L3QuNGC0LUg0YHRgtCw0L3QtNCw0YDRgtC4INC4INC/0YDQsNCy0LjQu9Cw0YLQsCDQt9CwINC40L3RhNC+0YDQvNC40YDQsNC90L4g0YHRitCz0LvQsNGB0LjQtS4nLFsn0JLQuNC0INGD0YHQu9GD0LPQsDogJytmKCfQo9GB0LvRg9Cz0LAnLCfQv9GA0LXQs9C70LXQtCAvINC/0YDQvtGG0LXQtNGD0YDQsCAvINC/0LDQutC10YInKSwn0JzRj9GB0YLQviDQvdCwINC40LfQv9GK0LvQvdC10L3QuNC1OiAnK2YoJ9CQ0LTRgNC10YEnLCdfX19fX19fX19fX19fX19fJyksJ9Cf0LDRhtC40LXQvdGCL9C60LvQuNC10L3RgjogJytmKCfQn9Cw0YbQuNC10L3RgicsJ19fX19fX19fX19fX19fX18nKSwn0JjQvdGE0L7RgNC80LjRgNCw0L3QviDRgdGK0LPQu9Cw0YHQuNC1INC4INC/0L7QstC10YDQuNGC0LXQu9C90L7RgdGCINC90LAg0LzQtdC00LjRhtC40L3RgdC60LDRgtCwINC40L3RhNC+0YDQvNCw0YbQuNGPJ10pLAogIG1lZGljYWxfc3Vic2NyaXB0aW9uOigpPT51bml2ZXJzYWxDb250cmFjdCgn0JTQntCT0J7QktCe0KAg0JfQkCDQkNCR0J7QndCQ0JzQldCd0KLQndCeINCc0JXQlNCY0KbQmNCd0KHQmtCeINCe0JHQodCb0KPQltCS0JDQndCVJywn0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC/0YDQtdC00L7RgdGC0LDQstGPINC/0LXRgNC40L7QtNC40YfQvdC4INC/0YDQvtGE0LjQu9Cw0LrRgtC40YfQvdC4INC40LvQuCDQutC+0L3RgdGD0LvRgtCw0YLQuNCy0L3QuCDRg9GB0LvRg9Cz0LguJyxbJ9Cf0LDQutC10YIg0YPRgdC70YPQs9C4OiAnK2YoJ9Cf0LDQutC10YInLCdfX19fX19fX19fX19fX19fJyksJ9CR0YDQvtC5INC/0L7RgdC10YnQtdC90LjRjy/QutC+0L3RgdGD0LvRgtCw0YbQuNC4OiAnK2YoJ9CR0YDQvtC5JywnX19fXycpLCfQk9GA0LDRhNC40Log0Lgg0LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0YfQsNGB0L7QstC1Jywn0J7RgtGH0LXRgtC90L7RgdGCINC4INC80LXQtNC40YbQuNC90YHQutCwINC00L7QutGD0LzQtdC90YLQsNGG0LjRjyddKSwKICBtZWRpY2FsX3ByaXZhY3k6KCk9PnVuaXZlcnNhbENvbnRyYWN0KCfQodCf0J7QoNCQ0JfQo9Cc0JXQndCY0JUg0JfQkCDQn9Ce0JLQldCg0JjQotCV0JvQndCe0KHQoiDQmCDQm9CY0KfQndCYINCU0JDQndCd0JgnLCfQodGC0YDQsNC90LjRgtC1INGD0YDQtdC20LTQsNGCINC/0YDQsNCy0LjQu9Cw0YLQsCDQt9CwINC30LDRidC40YLQsCDQvdCwINC70LjRh9C90Lgg0Lgg0YfRg9Cy0YHRgtCy0LjRgtC10LvQvdC4INC00LDQvdC90LguJyxbJ9Ca0LDRgtC10LPQvtGA0LjQuCDQtNCw0L3QvdC4OiAnK2YoJ9CU0LDQvdC90LgnLCfQu9C40YfQvdC4IC8g0LfQtNGA0LDQstC90LggLyDRhNC40L3QsNC90YHQvtCy0LgnKSwn0J7RgdC90L7QstCw0L3QuNC1INC4INGB0YDQvtC6INC90LAg0L7QsdGA0LDQsdC+0YLQstCw0L3QtScsJ9CU0L7RgdGC0YrQvyDRgdCw0LzQviDQvtGCINGD0L/RitC70L3QvtC80L7RidC10L3QuCDQu9C40YbQsCcsJ9Cc0LXRgNC60Lgg0LfQsCDRgdC40LPRg9GA0L3QvtGB0YIg0Lgg0YPQstC10LTQvtC80Y/QstCw0L3QtSDQv9GA0Lgg0LjQvdGG0LjQtNC10L3RgiddKSwKICB0cmFuc3BvcnQ6KCk9PnVuaXZlcnNhbENvbnRyYWN0KCfQlNCe0JPQntCS0J7QoCDQl9CQINCi0KDQkNCd0KHQn9Ce0KDQotCd0JAg0KPQodCb0KPQk9CQJywn0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC40LfQstGK0YDRiNCy0LAg0YLRgNCw0L3RgdC/0L7RgNGCINC90LAg0YLQvtCy0LDRgNC4L9C/0YDQsNGC0LrQuCDQv9C+INC00L7Qs9C+0LLQvtGA0LXQvdC4INC80LDRgNGI0YDRg9GC0LguJyxbJ9Cc0LDRgNGI0YDRg9GCOiAnK2YoJ9Cc0LDRgNGI0YDRg9GCJywn0L7RgiBfX19fX18g0LTQviBfX19fX18nKSwn0JLQuNC0INGC0L7QstCw0YA6ICcrZign0KLQvtCy0LDRgCcsJ19fX19fX19fX19fX19fX18nKSwn0KHRgNC+0Log0LfQsCDQtNC+0YHRgtCw0LLQutCwOiAnK2YoJ9Ch0YDQvtC6JywnX19fX19fX18nKSwn0J7RgtCz0L7QstC+0YDQvdC+0YHRgiDQv9GA0Lgg0L/QvtCy0YDQtdC00LAsINC70LjQv9GB0LAg0LjQu9C4INC30LDQsdCw0LLRj9C90LUnXSksCiAgd2FyZWhvdXNlOigpPT51bml2ZXJzYWxDb250cmFjdCgn0JTQntCT0J7QktCe0KAg0JfQkCDQodCa0JvQkNCU0J7QktCeINCe0JHQodCb0KPQltCS0JDQndCVJywn0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC/0YDQuNC10LzQsCwg0YHRitGF0YDQsNC90Y/QstCwINC4INC/0YDQtdC00LDQstCwINGB0YLQvtC60Lgg0L/QviDQt9Cw0Y/QstC60LAg0L3QsCDQktGK0LfQu9C+0LbQuNGC0LXQu9GPLicsWyfQodC60LvQsNC00L7QstCwINC/0LvQvtGJL9GD0YHQu9C+0LLQuNGPOiAnK2YoJ9Cj0YHQu9C+0LLQuNGPJywnX19fX19fX19fX19fX19fXycpLCfQn9GA0LjQtdC80L4t0L/RgNC10LTQsNCy0LDRgtC10LvQvdC4INC/0YDQvtGC0L7QutC+0LvQuCcsJ9Ce0YLRh9C10YLQvdC+0YHRgiDQt9CwINC90LDQu9C40YfQvdC+0YHRgtC4Jywn0J7RgtCz0L7QstC+0YDQvdC+0YHRgiDQv9GA0Lgg0LvQuNC/0YHQuCDQuCDQv9C+0LLRgNC10LTQuCddKSwKICBmbGVldF9zZXJ2aWNlOigpPT51bml2ZXJzYWxDb250cmFjdCgn0JTQntCT0J7QktCe0KAg0JfQkCDQntCR0KHQm9Cj0JbQktCQ0J3QlSDQndCQINCQ0JLQotCe0J/QkNCg0Jog0Jgg0J/QqtCi0J3QmCDQm9CY0KHQotCe0JLQlScsJ9Ch0YLRgNCw0L3QuNGC0LUg0YPRgNC10LbQtNCw0YIg0L7RgtGH0LXRgtC90L7RgdGCLCDQvNCw0YDRiNGA0YPRgtC4INC4INGA0LDQt9GF0L7QtNC4INC30LAg0LDQstGC0L7QvNC+0LHQuNC70LguJyxbJ9CQ0LLRgtC+0LzQvtCx0LjQu9C4OiAnK2YoJ9CQ0LLRgtC+0LzQvtCx0LjQu9C4Jywn0YDQtdCzLiDQvdC+0LzQtdGA0LAgX19fX19fJyksJ9Cf0YrRgtC90Lgg0LvQuNGB0YLQvtCy0LUg0Lgg0LrQuNC70L7QvNC10YLRgNCw0LYnLCfQk9C+0YDQuNCy0L4sINGA0LDQt9GF0L7QtNC4INC4INC70LjQvNC40YLQuCcsJ9Cf0LXRgNC40L7QtNC40YfQvdC4INC+0YLRh9C10YLQuCddKSwKICBjb25zdHJ1Y3Rpb25fd29yazooKT0+dW5pdmVyc2FsQ29udHJhY3QoJ9CU0J7Qk9Ce0JLQntCgINCX0JAg0KHQotCg0J7QmNCi0JXQm9Cd0J4t0JzQntCd0KLQkNCW0J3QmCDQoNCQ0JHQntCi0JgnLCfQmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0LjQt9Cy0YrRgNGI0LLQsCDQodCc0KAg0L/QviDQvtCx0LXQutGCINC90LAg0JLRitC30LvQvtC20LjRgtC10LvRjy4nLFsn0J7QsdC10LrRgjogJytmKCfQntCx0LXQutGCJywnX19fX19fX19fX19fX19fXycpLCfQktC40LQg0YDQsNCx0L7RgtC4OiAnK2YoJ9Ch0JzQoCcsJ19fX19fX19fX19fX19fX18nKSwn0JzQsNGC0LXRgNC40LDQu9C4OiAnK2YoJ9Cc0LDRgtC10YDQuNCw0LvQuCcsJ9C+0YIg0LjQt9C/0YrQu9C90LjRgtC10LvRjyAvINCy0YrQt9C70L7QttC40YLQtdC70Y8nKSwn0JXRgtCw0L/QuCwg0L/RgNC40LXQvNCw0L3QtSDQuCDQs9Cw0YDQsNC90YbQuNC+0L3QtdC9INGB0YDQvtC6J10pLAogIHJlbm92YXRpb246KCk9PnVuaXZlcnNhbENvbnRyYWN0KCfQlNCe0JPQntCS0J7QoCDQl9CQINCg0JXQnNCe0J3QoiDQmCDQnNCe0J3QotCQ0JYnLCfQmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0LjQt9Cy0YrRgNGI0LLQsCDRgNC10LzQvtC90YLQvdC4L9C80L7QvdGC0LDQttC90Lgg0LTQtdC50L3QvtGB0YLQuC4nLFsn0J/QvtC80LXRidC10L3QuNC1L9C+0LHQtdC60YI6ICcrZign0J7QsdC10LrRgicsJ19fX19fX19fX19fX19fX18nKSwn0JTQtdC50L3QvtGB0YLQuCDQuCDQvNCw0YLQtdGA0LjQsNC70LgnLCfQodGA0L7QuiDQv9C+INC10YLQsNC/0LgnLCfQn9GA0LjQtdC80L4t0L/RgNC10LTQsNCy0LDRgtC10LvQtdC9INC/0YDQvtGC0L7QutC+0LsnXSksCiAgc3ViY29udHJhY3Rvcl9idWlsZDooKT0+dW5pdmVyc2FsQ29udHJhY3QoJ9CU0J7Qk9Ce0JLQntCgINChINCf0J7QlNCY0JfQn9Cq0JvQndCY0KLQldCbJywn0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC40LfQstGK0YDRiNCy0LAg0LrQvtC90LrRgNC10YLQvdCwINGH0LDRgdGCINC+0YIg0LLRitC30LvQvtC20LXQvSDQv9GA0L7QtdC60YIuJyxbJ9Ce0YHQvdC+0LLQtdC9INC/0YDQvtC10LrRgjogJytmKCfQn9GA0L7QtdC60YInLCdfX19fX19fX19fX19fX19fJyksJ9Ce0LHRhdCy0LDRgiDQvdCwINC/0L7QtNC40LfQv9GK0LvQvdC40YLQtdC70Y8nLCfQodGA0L7QutC+0LLQtSDQuCDQutC+0L7RgNC00LjQvdCw0YbQuNGPJywn0J7RgtCz0L7QstC+0YDQvdC+0YHRgiDQt9CwINC60LDRh9C10YHRgtCy0L4g0Lgg0LHQtdC30L7Qv9Cw0YHQvdC+0YHRgiddKSwKICBzdXBwbHk6KCk9PnVuaXZlcnNhbENvbnRyYWN0KCfQlNCe0JPQntCS0J7QoCDQl9CQINCU0J7QodCi0JDQktCa0JAg0J3QkCDQodCi0J7QmtCYJywn0JTQvtGB0YLQsNCy0YfQuNC60YrRgiDQtNC+0YHRgtCw0LLRjyDRgdGC0L7QutC4INC/0YDQuCDQtNC+0LPQvtCy0L7RgNC10L3QuCDQutC+0LvQuNGH0LXRgdGC0LLQsCwg0YbQtdC90Lgg0Lgg0YHRgNC+0LrQvtCy0LUuJyxbJ9CS0LjQtCDRgdGC0L7QutC4OiAnK2YoJ9Ch0YLQvtC60LgnLCdfX19fX19fX19fX19fX19fJyksJ9Ca0L7Qu9C40YfQtdGB0YLQstC+INC4INC10LTQuNC90LjRh9C90Lgg0YbQtdC90LgnLCfQodGA0L7QuiDQuCDQvNGP0YHRgtC+INC90LAg0LTQvtGB0YLQsNCy0LrQsCcsJ9Cg0LXQutC70LDQvNCw0YbQuNC4LCDQstGA0YrRidCw0L3QtSDQuCDQs9Cw0YDQsNC90YbQuNC4J10pLAogIHJldGFpbF9zZXJ2aWNlOigpPT51bml2ZXJzYWxDb250cmFjdCgn0JTQntCT0J7QktCe0KAg0JfQkCDQntCR0KHQm9Cj0JbQktCQ0J3QlSDQndCQINCc0JDQk9CQ0JfQmNCdJywn0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC/0L7QtNC/0L7QvNCw0LPQsCDQvtC/0LXRgNCw0YLQuNCy0L3QuCDQv9GA0L7RhtC10YHQuCDQsiDRgtGK0YDQs9C+0LLRgdC60Lgg0L7QsdC10LrRgi4nLFsn0J7QsdC10LrRgjogJytmKCfQnNCw0LPQsNC30LjQvScsJ19fX19fX19fX19fX19fX18nKSwn0J/RgNC+0YbQtdGB0Lg6INC90LDQu9C40YfQvdC+0YHRgtC4LCDQutCw0YHQsCwg0LTQvtGB0YLQsNCy0LrQuCcsJ9Ce0YLRh9C10YLQvdC+0YHRgiDQuCDRgdC/0YDQsNCy0LrQuCcsJ9CU0L7RgdGC0YrQvyDQtNC+INGB0LjRgdGC0LXQvNC4INC4INC/0L7QstC10YDQuNGC0LXQu9C90L7RgdGCJ10pLAogIHNhbGVfdGVybXM6KCk9PnVuaXZlcnNhbENvbnRyYWN0KCfQntCR0KnQmCDQotCq0KDQk9Ce0JLQodCa0Jgg0KPQodCb0J7QktCY0K8nLCfQlNC+0LrRg9C80LXQvdGC0YrRgiDRg9GA0LXQttC00LAg0L/RgNC+0LTQsNC20LHQuCwg0L/Qu9Cw0YnQsNC90LjRjywg0LTQvtGB0YLQsNCy0LrQuCDQuCDRgNC10LrQu9Cw0LzQsNGG0LjQuC4nLFsn0J3QsNGH0LjQvdC4INC90LAg0L/Qu9Cw0YnQsNC90LUnLCfQlNC+0YHRgtCw0LLQutCwINC4INC/0L7Qu9GD0YfQsNCy0LDQvdC1Jywn0JLRgNGK0YnQsNC90LUg0Lgg0YDQtdC60LvQsNC80LDRhtC40LgnLCfQk9Cw0YDQsNC90YbQuNC4INC4INC+0YLQs9C+0LLQvtGA0L3QvtGB0YInXSksCiAgcmVzdGF1cmFudF9zdXBwbHk6KCk9PnVuaXZlcnNhbENvbnRyYWN0KCfQlNCe0JPQntCS0J7QoCDQoSDQlNCe0KHQotCQ0JLQp9CY0Jog0JfQkCDQl9CQ0JLQldCU0JXQndCY0JUnLCfQlNC+0YHRgtCw0LLRh9C40LrRitGCINC/0YDQtdC00L7RgdGC0LDQstGPINGF0YDQsNC90LgsINC90LDQv9C40YLQutC4INC40LvQuCDQutC+0L3RgdGD0LzQsNGC0LjQstC4INC30LAg0L7QsdC10LrRgtCwLicsWyfQktC40LQg0L/RgNC+0LTRg9C60YLQuDogJytmKCfQn9GA0L7QtNGD0LrRgtC4JywnX19fX19fX19fX19fX19fXycpLCfQk9GA0LDRhNC40Log0L3QsCDQtNC+0YHRgtCw0LLQutC4Jywn0JrQsNGH0LXRgdGC0LLQviwg0YHRgNC+0Log0L3QsCDQs9C+0LTQvdC+0YHRgiDQuCDRgtC10LzQv9C10YDQsNGC0YPRgNC10L0g0YDQtdC20LjQvCcsJ9Cg0LXQutC70LDQvNCw0YbQuNC4INC/0YDQuCDQvdC10YHRitC+0YLQstC10YLRgdGC0LLQuNC1J10pLAogIGV2ZW50X2NhdGVyaW5nOigpPT51bml2ZXJzYWxDb250cmFjdCgn0JTQntCT0J7QktCe0KAg0JfQkCDQmtCV0KLQqtCg0JjQndCTIC8g0KHQqtCR0JjQotCY0JUnLCfQmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0L7RgNCz0LDQvdC40LfQuNGA0LAg0LrQtdGC0YrRgNC40L3QsyDQuNC70Lgg0L7QsdGB0LvRg9C20LLQsNC90LUg0LfQsCDRgdGK0LHQuNGC0LjQtS4nLFsn0JTQsNGC0LAg0Lgg0LzRj9GB0YLQvjogJytmKCfQodGK0LHQuNGC0LjQtScsJ19fX19fX19fX19fX19fX18nKSwn0JHRgNC+0Lkg0LPQvtGB0YLQuDogJytmKCfQk9C+0YHRgtC4JywnX19fXycpLCfQnNC10L3RjiDQuCDQvdCw0L/QuNGC0LrQuCcsJ9CQ0LLQsNC90YEsINCw0L3Rg9C70LDRhtC40Lgg0Lgg0L/RgNC+0LzQtdC90LgnXSksCiAgc3RhZmZfc2VydmljZTooKT0+dW5pdmVyc2FsQ29udHJhY3QoJ9CU0J7Qk9Ce0JLQntCgINCX0JAg0J/QldCg0KHQntCd0JDQmyDQmCDQntCR0KHQm9Cj0JbQktCQ0J3QlScsJ9CY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQv9GA0LXQtNC+0YHRgtCw0LLRjyDQv9C10YDRgdC+0L3QsNC7INC40LvQuCDRg9GB0LvRg9Cz0LAg0L/QviDQvtCx0YHQu9GD0LbQstCw0L3QtS4nLFsn0J/QvtC30LjRhtC40Lgg0Lgg0LHRgNC+0Lkg0YXQvtGA0LAnLCfQk9GA0LDRhNC40Log0Lgg0YHQvNC10L3QuCcsJ9Ce0YLQs9C+0LLQvtGA0L3QvtGB0YLQuCDQuCDRg9C90LjRhNC+0YDQvNCwJywn0J7RgtGH0LXRgtC90L7RgdGCINC90LAg0YDQsNCx0L7RgtC90L4g0LLRgNC10LzQtSddKSwKICBhY2NvdW50aW5nX3NlcnZpY2U6KCk9PnVuaXZlcnNhbENvbnRyYWN0KCfQlNCe0JPQntCS0J7QoCDQl9CQINCh0KfQldCi0J7QktCe0JTQndCeINCe0JHQodCb0KPQltCS0JDQndCVJywn0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC40LfQstGK0YDRiNCy0LAg0YHRh9C10YLQvtCy0L7QtNC90L4g0L7QsdGB0LvRg9C20LLQsNC90LUg0Lgg0L/QvtC00LDQstCw0L3QtSDQvdCwINC00L7QutGD0LzQtdC90YLQuC4nLFsn0JzQtdGB0LXRh9C90L4g0YHRh9C10YLQvtCy0L7QtNGB0YLQstC+Jywn0JTQlNChINC00L3QtdCy0L3QuNGG0Lgg0Lgg0LTQtdC60LvQsNGA0LDRhtC40LgnLCfQk9C+0LTQuNGI0L3QviDQv9GA0LjQutC70Y7Rh9Cy0LDQvdC1OiAnK2YoJ9CS0LrQu9GO0YfQtdC90L4nLCfQtNCwIC8g0L3QtScpLCfQodGA0L7QutC+0LLQtSDQt9CwINC/0YDQtdC00L7RgdGC0LDQstGP0L3QtSDQvdCwINC00L7QutGD0LzQtdC90YLQuCddKSwKICBwYXlyb2xsOigpPT51bml2ZXJzYWxDb250cmFjdCgn0JTQntCT0J7QktCe0KAg0JfQkCDQotCg0Jcg0Jgg0JfQkNCf0JvQkNCi0JgnLCfQmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0L7QsdGA0LDQsdC+0YLQstCwINC30LDQv9C70LDRgtC4LCDQvtGB0LjQs9GD0YDQvtCy0LrQuCDQuCDQutCw0LTRgNC+0LLQuCDQtNC+0LrRg9C80LXQvdGC0LguJyxbJ9CR0YDQvtC5INGB0LvRg9C20LjRgtC10LvQuDogJytmKCfQkdGA0L7QuScsJ19fX18nKSwn0JLQtdC00L7QvNC+0YHRgtC4INC4INGE0LjRiNC+0LLQtScsJ9CU0LXQutC70LDRgNCw0YbQuNC4INC60YrQvCDQuNC90YHRgtC40YLRg9GG0LjQuCcsJ9CU0LDQvdC90Lgg0L7RgiDRgNCw0LHQvtGC0L7QtNCw0YLQtdC70Y8g0Lgg0YHRgNC+0LrQvtCy0LUnXSksCiAgdGF4X2NvbnN1bHQ6KCk9PnVuaXZlcnNhbENvbnRyYWN0KCfQlNCe0JPQntCS0J7QoCDQl9CQINCU0JDQndCq0KfQndCQINCa0J7QndCh0KPQm9Ci0JDQptCY0K8nLCfQmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0L/RgNC10LTQvtGB0YLQsNCy0Y8g0YHRgtCw0L3QvtCy0LjRidC1LCDQsNC90LDQu9C40Lcg0LjQu9C4INC60L7QvdGB0YPQu9GC0LDRhtC40Y8uJyxbJ9Ci0LXQvNCwINC90LAg0LrQvtC90YHRg9C70YLQsNGG0LjRj9GC0LA6ICcrZign0KLQtdC80LAnLCdfX19fX19fX19fX19fX19fJyksJ9Cd0LXQvtCx0YXQvtC00LjQvNC4INC00L7QutGD0LzQtdC90YLQuCcsJ9Ch0YDQvtC6INC30LAg0YHRgtCw0L3QvtCy0LjRidC1Jywn0J7Qs9GA0LDQvdC40YfQtdC90LjQtSDQvdCwINC+0YLQs9C+0LLQvtGA0L3QvtGB0YLRgtCwINGB0L/QvtGA0LXQtCDQv9GA0LXQtNC+0YHRgtCw0LLQtdC90LjRgtC1INC00LDQvdC90LgnXSksCiAgbGVnYWxfc2VydmljZTooKT0+dW5pdmVyc2FsQ29udHJhY3QoJ9CU0J7Qk9Ce0JLQntCgINCX0JAg0J/QoNCQ0JLQndCeINCe0JHQodCb0KPQltCS0JDQndCVJywn0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC/0YDQtdC00L7RgdGC0LDQstGPINC/0YDQsNCy0L3QuCDQutC+0L3RgdGD0LvRgtCw0YbQuNC4INC4INC/0L7QtNCz0L7RgtC+0LLQutCwINC90LAg0LTQvtC60YPQvNC10L3RgtC4LicsWyfQntCx0YXQstCw0YI6ICcrZign0J7QsdGF0LLQsNGCJywn0LrQvtC90YHRg9C70YLQsNGG0LjQuCAvINC00L7Qs9C+0LLQvtGA0LggLyDQv9GA0L7QstC10YDQutC4JyksJ9Ch0YDQvtC6INC30LAg0L/QvtC00LPQvtGC0L7QstC60LAg0L3QsCDQtNC+0LrRg9C80LXQvdGC0LgnLCfQn9C+0LLQtdGA0LjRgtC10LvQvdC+0YHRgiDQuCDQsNC00LLQvtC60LDRgtGB0LrQsCDRgtCw0LnQvdCwJywn0KLQsNC60YHQuCDQuCDQtNGK0YDQttCw0LLQvdC4INGA0LDQt9C90L7RgdC60Lgg0L7RgtC00LXQu9C90L4nXSksCiAgY291cnRfcmVwcmVzZW50YXRpb246KCk9PnVuaXZlcnNhbENvbnRyYWN0KCfQlNCe0JPQntCS0J7QoCDQl9CQINCf0KDQntCm0JXQodCj0JDQm9Cd0J4g0J/QoNCV0JTQodCi0JDQktCY0KLQldCb0KHQotCS0J4nLCfQmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0L/RgNC10LTRgdGC0LDQstC70Y/QstCwINCS0YrQt9C70L7QttC40YLQtdC70Y8g0L/RgNC10LQg0YHRitC0L9C40L3RgdGC0LjRgtGD0YbQuNGPLicsWyfQlNC10LvQvi/Qv9GA0LXQv9C40YHQutCwOiAnK2YoJ+KElicsJ19fX19fX19fX19fX19fX18nKSwn0JjQvdGB0YLQsNC90YbQuNGPL9C+0YDQs9Cw0L06ICcrZign0J7RgNCz0LDQvScsJ19fX19fX19fX19fX19fX18nKSwn0J/RitC70L3QvtC80L7RidC90L4g0Lgg0LTQvtC60YPQvNC10L3RgtC4Jywn0KDQsNC30L3QvtGB0LrQuCwg0YLQsNC60YHQuCDQuCDRhdC+0L3QvtGA0LDRgCddKSwKICBsZWdhbF9zdWJzY3JpcHRpb246KCk9PnVuaXZlcnNhbENvbnRyYWN0KCfQlNCe0JPQntCS0J7QoCDQl9CQINCQ0JHQntCd0JDQnNCV0J3QotCd0J4g0J/QoNCQ0JLQndCeINCe0JHQodCb0KPQltCS0JDQndCVJywn0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC/0YDQtdC00L7RgdGC0LDQstGPINC80LXRgdC10YfQtdC9INC/0LDQutC10YIg0L/RgNCw0LLQvdC4INGD0YHQu9GD0LPQuC4nLFsn0JzQtdGB0LXRh9C10L0g0L/QsNC60LXRgiDRh9Cw0YHQvtCy0LU6ICcrZign0KfQsNGB0L7QstC1JywnX19fXycpLCfQmtC+0L3RgdGD0LvRgtCw0YbQuNC4INC4INC/0YDQtdCz0LvQtdC0INC90LAg0LTQvtC60YPQvNC10L3RgtC4Jywn0KHQv9C10YjQvdC4INC30LDQtNCw0YfQuCDQuCDQuNC30LLRitC90YDQtdC00L3QuCDRg9GB0LvRg9Cz0LgnLCfQnNC10YHQtdGH0LXQvSDQvtGC0YfQtdGCJ10pCn07CgpmdW5jdGlvbiBjb21tb25TZWN0aW9ucyhzZXJ2aWNlRGVzYykgewogIHJldHVybiBgCiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDE8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Cg0JXQlNCc0JXQoiDQndCQINCU0J7Qk9Ce0JLQntCg0JA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8cD7QmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0YHQtSDQt9Cw0LTRitC70LbQsNCy0LAg0LTQsCDQuNC30LLRitGA0YjQuCDQt9CwINCS0YrQt9C70L7QttC40YLQtdC70Y8g0YHQu9C10LTQvdC40YLQtSDRg9GB0LvRg9Cz0Lg6PC9wPgogICAgICAke3NlcnZpY2VEZXNjfQogICAgICA8cD7RgdGA0LXRidGDINC30LDQv9C70LDRidCw0L3QtSDQvdCwINGD0LPQvtCy0L7RgNC10L3QvtGC0L4g0LIg0L3QsNGB0YLQvtGP0YnQuNGPINC00L7Qs9C+0LLQvtGAINCy0YrQt9C90LDQs9GA0LDQttC00LXQvdC40LUuPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDI8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QodCg0J7QmiDQndCQINCY0JfQn9Cq0JvQndCV0J3QmNCVPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHA+Mi4xLiDQmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0YHQtSDQt9Cw0LTRitC70LbQsNCy0LAg0LTQsCDQuNC30L/RitC70L3QuCDQv9C+0YDRitGH0LrQsNGC0LAg0LIg0YHRgNC+0Log0LTQviA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KHRgNC+0LonLCczMCAo0YLRgNC40LTQtdGB0LXRgiknKX08L3N0cm9uZz4g0YDQsNCx0L7RgtC90Lgg0LTQvdC4INC+0YIg0LTQsNGC0LDRgtCwINC90LAg0L/QvtC00L/QuNGB0LLQsNC90LUg0L3QsCDQvdCw0YHRgtC+0Y/RidC40Y8g0LTQvtCz0L7QstC+0YAg0Lgg0L/QvtC70YPRh9Cw0LLQsNC90LUg0L3QsCDQsNCy0LDQvdGB0L7QstC+0YLQviDQv9C70LDRidCw0L3QtS48L3A+CiAgICAgIDxwPjIuMi4g0KHRgNC+0LrRitGCINGB0LUg0YHRh9C40YLQsCDQt9CwINGB0L/QsNC30LXQvSDQv9GA0Lgg0L/RgNC10LTQsNCy0LDQvdC1INC90LAg0LPQvtGC0L7QstC40Y8g0L/RgNC+0LTRg9C60YIg0LfQsCDQvtC00L7QsdGA0LXQvdC40LUg0L7RgiDQktGK0LfQu9C+0LbQuNGC0LXQu9GPLjwvcD4KICAgICAgPHA+Mi4zLiDQn9GA0Lgg0LfQsNCx0LDQstGP0L3QtSDQvtGCINGB0YLRgNCw0L3QsCDQvdCwINCS0YrQt9C70L7QttC40YLQtdC70Y8gKNC90LXQv9GA0LXQtNC+0YHRgtCw0LLRj9C90LUg0L3QsCDQvNCw0YLQtdGA0LjQsNC70LgsINGB0YrQtNGK0YDQttCw0L3QuNC1LCDQtNC+0YHRgtGK0L/QuCksINGB0YDQvtC60YrRgiDRgdC1INGD0LTRitC70LbQsNCy0LAg0YEg0L/QtdGA0LjQvtC00LAg0L3QsCDQt9Cw0LHQsNCy0Y/QvdC1LjwvcD4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAzPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KbQldCd0JAg0Jgg0J3QkNCn0JjQnSDQndCQINCf0JvQkNCp0JDQndCVPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHA+My4xLiDQktGK0LfQu9C+0LbQuNGC0LXQu9GP0YIg0LfQsNC/0LvQsNGJ0LAg0L3QsCDQmNC30L/RitC70L3QuNGC0LXQu9GPINCy0YrQt9C90LDQs9GA0LDQttC00LXQvdC40LUg0LIg0YDQsNC30LzQtdGAINC90LAgPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ch0YPQvNCwJywn4oKsIF9fX19fIChfX19fXyDQtdCy0YDQviknKX08L3N0cm9uZz4sINCx0LXQtyDQstC60LvRjtGH0LXQvdC+INCU0JTQoS48L3A+CiAgICAgIDxwPjMuMi4g0J/Qu9Cw0YnQsNC90LXRgtC+INGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQv9C+INGB0LvQtdC00L3QuNGPINCz0YDQsNGE0LjQujo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz41MCUgKNCw0LLQsNC90YEv0LrQsNC/0LDRgNC+KTwvc3Ryb25nPiDigJQg0L/RgNC4INC/0L7QtNC/0LjRgdCy0LDQvdC1INC90LAg0LTQvtCz0L7QstC+0YDQsDogJHtmKCfQkNCy0LDQvdGBJywn4oKsIF9fX19fJyl9PC9saT4KICAgICAgICA8bGk+PHN0cm9uZz41MCUgKNGE0LjQvdCw0LvQtdC9INGC0YDQsNC90YgpPC9zdHJvbmc+IOKAlCDQv9GA0Lgg0L/RgNC10LTQsNCy0LDQvdC1INC90LAg0LPQvtGC0L7QstC40Y8g0L/RgNC+0LXQutGCOiAke2YoJ9Ck0LjQvdCw0LsnLCfigqwgX19fX18nKX08L2xpPgogICAgICA8L3VsPgogICAgICA8cD4zLjMuINCf0LvQsNGJ0LDQvdC10YLQviDRgdC1INC40LfQstGK0YDRiNCy0LAg0L/QviDQsdCw0L3QutC+0LIg0L/RitGCINC/0L4g0YHQvNC10YLQutCwINC90LAg0JjQt9C/0YrQu9C90LjRgtC10LvRjzogSUJBTiAke2YoJ0lCQU4nLCdCR19fIF9fX18gX19fXyBfXyBfX19fX18gX18nKX08L3A+CiAgICAgIDxwPjMuNC4g0KTQsNC60YLRg9GA0LAg0YHQtSDQuNC30LTQsNCy0LAg0LIg0YDQsNC80LrQuNGC0LUg0L3QsCA1ICjQv9C10YIpINGA0LDQsdC+0YLQvdC4INC00L3QuCDRgdC70LXQtCDQv9C+0LvRg9GH0LDQstCw0L3QtSDQvdCwINC/0LvQsNGJ0LDQvdC10YLQvi48L3A+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gNDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0KDQkNCS0JAg0Jgg0JfQkNCU0KrQm9CW0JXQndCY0K8g0J3QkCDQmNCX0J/QqtCb0J3QmNCi0JXQm9CvPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHVsPgogICAgICAgIDxsaT7QlNCwINC40LfQv9GK0LvQvdC4INC/0L7RgNGK0YfQutCw0YLQsCDQsiDRgdGA0L7QuiDQuCDQsiDRgdGK0L7RgtCy0LXRgtGB0YLQstC40LUg0YEg0YPQs9C+0LLQvtGA0LXQvdC40YLQtSDQuNC30LjRgdC60LLQsNC90LjRjy48L2xpPgogICAgICAgIDxsaT7QlNCwINC/0YDQtdC00L7RgdGC0LDQstC4INC00L4gPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cg0LXQstC40LfQuNC4JywnMyAo0YLRgNC4KScpfTwvc3Ryb25nPiDQsdC10LfQv9C70LDRgtC90Lgg0LrQvtGA0LXQutGG0LjQuCDQsiDRgNCw0LzQutC40YLQtSDQvdCwINC/0YDQvtC10LrRgtCwLjwvbGk+CiAgICAgICAgPGxpPtCU0LAg0L/QvtC00LTRitGA0LbQsCDQv9C+0LLQtdGA0LjRgtC10LvQvdC+0YHRgiDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCwg0L/QvtC70YPRh9C10L3QsCDQvtGCINCS0YrQt9C70L7QttC40YLQtdC70Y8uPC9saT4KICAgICAgICA8bGk+0JTQsCDQuNC90YTQvtGA0LzQuNGA0LAg0JLRitC30LvQvtC20LjRgtC10LvRjyDQv9GA0Lgg0L7RgtC60LvQvtC90LXQvdC40Y8g0L7RgiDQv9C10YDQstC+0L3QsNGH0LDQu9C90LjRjyDQv9C70LDQvSDQuNC70Lgg0L/RgNC4INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgiDQvtGCINC/0YDQvtC80Y/QvdCwINC90LAg0YHRgNC+0LrQsC48L2xpPgogICAgICA8L3VsPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDU8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Cg0JDQktCQINCYINCX0JDQlNCq0JvQltCV0J3QmNCvINCd0JAg0JLQqtCX0JvQntCW0JjQotCV0JvQrzwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgIDx1bD4KICAgICAgICA8bGk+0JTQsCDQv9GA0LXQtNC+0YHRgtCw0LLRjyDRgdCy0L7QtdCy0YDQtdC80LXQvdC90L4g0L3QtdC+0LHRhdC+0LTQuNC80LjRgtC1INC80LDRgtC10YDQuNCw0LvQuCwg0YHRitC00YrRgNC20LDQvdC40LUg0Lgg0LTQvtGB0YLRitC/0LguPC9saT4KICAgICAgICA8bGk+0JTQsCDQv9C+0YLQstGK0YDQttC00LDQstCwINC40LvQuCDQvtGC0YXQstGK0YDQu9GPINGBINC80L7RgtC40LLQuNGA0LDQvdC+INGB0YLQsNC90L7QstC40YnQtSDQsiDRgdGA0L7QuiDQtNC+IDxzdHJvbmc+NSAo0L/QtdGCKTwvc3Ryb25nPiDRgNCw0LHQvtGC0L3QuCDQtNC90LguPC9saT4KICAgICAgICA8bGk+0JTQsCDQt9Cw0L/Qu9Cw0YnQsCDRg9Cz0L7QstC+0YDQtdC90L7RgtC+INCy0YrQt9C90LDQs9GA0LDQttC00LXQvdC40LUg0LIg0YHRgNC+0LouPC9saT4KICAgICAgICA8bGk+0JTQsCDQvdC1INGA0LDQt9C/0YDQvtGB0YLRgNCw0L3Rj9Cy0LAg0LjQu9C4INC40LfQv9C+0LvQt9Cy0LAg0YfQsNGB0YLQuNGH0L3QuCDRgNC10LfRg9C70YLQsNGC0Lgg0L/RgNC10LTQuCDRhNC40L3QsNC70L3QvtGC0L4g0L/Qu9Cw0YnQsNC90LUuPC9saT4KICAgICAgPC91bD4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA2PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0JjQndCi0JXQm9CV0JrQotCj0JDQm9Cd0JAg0KHQntCR0KHQotCS0JXQndCe0KHQojwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgIDxwPjYuMS4g0KHQu9C10LQg0LjQt9Cy0YrRgNGI0LLQsNC90LUg0L3QsCDQv9GK0LvQvdC+0YLQviDQv9C70LDRidCw0L3QtSwg0JLRitC30LvQvtC20LjRgtC10LvRj9GCINC/0YDQuNC00L7QsdC40LLQsCDQv9GA0LDQstC+0YLQviDQvdCwINC/0L7Qu9C30LLQsNC90LUg0L3QsCDQuNC30YDQsNCx0L7RgtC10L3QuNGPINC/0YDQvtC00YPQutGCLjwvcD4KICAgICAgPHA+Ni4yLiDQmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0LfQsNC/0LDQt9Cy0LAg0L/RgNCw0LLQvtGC0L4g0LTQsCDQstC60LvRjtGH0LLQsCDQv9GA0L7QtdC60YLQsCDQsiDRgdCy0L7QtdGC0L4g0L/QvtGA0YLRhNC+0LvQuNC+LCDQvtGB0LLQtdC9INCw0LrQviDQktGK0LfQu9C+0LbQuNGC0LXQu9GP0YIg0LjQt9GA0LjRh9C90L4g0LUg0L/QvtC40YHQutCw0Lsg0LrQvtC90YTQuNC00LXQvdGG0LjQsNC70L3QvtGB0YIuPC9wPgogICAgICA8cD42LjMuINCS0YHQuNGH0LrQuCDQuNC30L/QvtC70LfQstCw0L3QuCDQu9C40YbQtdC90LfQuNGA0LDQvdC4INGI0YDQuNGE0YLQvtCy0LUsINC40LfQvtCx0YDQsNC20LXQvdC40Y8g0Lgg0L/Qu9GK0LPQuNC90Lgg0L7RgdGC0LDQstCw0YIg0YHQvtCx0YHRgtCy0LXQvdC+0YHRgiDQvdCwINGB0YrQvtGC0LLQtdGC0L3QuNGC0LUg0LjQvCDQv9GA0LjRgtC10LbQsNGC0LXQu9C4LjwvcD4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA3PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J7QotCT0J7QktCe0KDQndCe0KHQoiDQmCDQk9CQ0KDQkNCd0KbQmNCvPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHA+Ny4xLiDQmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0L/RgNC10LTQvtGB0YLQsNCy0Y8g0LPQsNGA0LDQvdGG0LjQvtC90LXQvSDQv9C10YDQuNC+0LQg0L7RgiA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JPQsNGA0LDQvdGG0LjRjycsJzMwICjRgtGA0LjQtNC10YHQtdGCKScpfTwvc3Ryb25nPiDQutCw0LvQtdC90LTQsNGA0L3QuCDQtNC90Lgg0YHQu9C10LQg0L/RgNC10LTQsNCy0LDQvdC10YLQviDQvdCwINC/0YDQvtC10LrRgtCwLCDQsiDRgNCw0LzQutC40YLQtSDQvdCwINC60L7QudGC0L4g0LHQtdC30L/Qu9Cw0YLQvdC+INC+0YLRgdGC0YDQsNC90Y/QstCwINCx0YrQs9C+0LLQtSwg0L/RgNC40YfQuNC90LXQvdC4INC+0YIg0YDQsNC30YDQsNCx0L7RgtC60LDRgtCwLjwvcD4KICAgICAgPHA+Ny4yLiDQk9Cw0YDQsNC90YbQuNGP0YLQsCDQvdC1INC/0L7QutGA0LjQstCwINC/0L7QstGA0LXQtNC4LCDQv9GA0LjRh9C40L3QtdC90Lgg0L7Rgjog0L/RgNC+0LzQtdC90Lgg0L3QsNC/0YDQsNCy0LXQvdC4INC+0YIg0JLRitC30LvQvtC20LjRgtC10LvRjyDQuNC70Lgg0YLRgNC10YLQuCDQu9C40YbQsCwg0YXQsNC60LXRgNGB0LrQuCDQsNGC0LDQutC4LCDRgdGA0LjQstC+0LLQtSDQvdCwINGF0L7RgdGC0LjQvdCzINC40LvQuCDQtNC10LnRgdGC0LLQuNGPINC90LAg0L3QtdC/0YDQtdC+0LTQvtC70LjQvNCwINGB0LjQu9CwLjwvcD4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA4PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QoNCV0JrQoNCQ0KLQr9CS0JDQndCVINCd0JAg0JTQntCT0J7QktCe0KDQkDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgIDxwPjguMS4g0JTQvtCz0L7QstC+0YDRitGCINC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQutGA0LDRgtC4INC/0L4g0LLQt9Cw0LjQvNC90L4g0YHRitCz0LvQsNGB0LjQtSDQvdCwINGB0YLRgNCw0L3QuNGC0LUsINC+0YTQvtGA0LzQtdC90L4g0LIg0L/QuNGB0LzQtdC9INCy0LjQtC48L3A+CiAgICAgIDxwPjguMi4g0J/RgNC4INC+0YLQutCw0Lcg0L7RgiDQktGK0LfQu9C+0LbQuNGC0LXQu9GPINGB0LvQtdC0INGB0YLQsNGA0YLQuNGA0LDQvdC1INC90LAg0YDQsNCx0L7RgtCw0YLQsCwg0LDQstCw0L3RgdGK0YIg0L3QtSDRgdC1INCy0YDRitGJ0LAuPC9wPgogICAgICA8cD44LjMuINCf0YDQuCDQvdC10LjQt9C/0YrQu9C90LXQvdC40LUg0L7RgiDRgdGC0YDQsNC90LAg0L3QsCDQmNC30L/RitC70L3QuNGC0LXQu9GPLCDRgtC+0Lkg0LTRitC70LbQuCDQstGA0YrRidCw0L3QtSDQvdCwINCw0LLQsNC90YHQvtCy0L7RgtC+INC/0LvQsNGJ0LDQvdC1LjwvcD4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA5PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0JfQkNCa0JvQrtCn0JjQotCV0JvQndCYINCg0JDQl9Cf0J7QoNCV0JTQkdCYPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHA+OS4xLiDQndCw0YHRgtC+0Y/RidC40Y/RgiDQtNC+0LPQvtCy0L7RgCDQtSDRgdGK0YHRgtCw0LLQtdC9INCyINC00LLQsCDQtdC00L3QsNC60LLQuCDQtdC60LfQtdC80L/Qu9GP0YDQsCDigJQg0L/QviDQtdC00LjQvSDQt9CwINCy0YHRj9C60LAg0L7RgiDRgdGC0YDQsNC90LjRgtC1LjwvcD4KICAgICAgPHA+OS4yLiDQl9CwINC90LXRg9GA0LXQtNC10L3QuNGC0LUg0LIg0LTQvtCz0L7QstC+0YDQsCDQstGK0L/RgNC+0YHQuCDRgdC1INC/0YDQuNC70LDQs9CwINC00LXQudGB0YLQstCw0YnQvtGC0L4g0LfQsNC60L7QvdC+0LTQsNGC0LXQu9GB0YLQstC+INC90LAg0KDQtdC/0YPQsdC70LjQutCwINCR0YrQu9Cz0LDRgNC40Y8uPC9wPgogICAgICA8cD45LjMuINCS0YHQuNGH0LrQuCDRgdC/0L7RgNC+0LLQtSDRgdC1INGA0LXRiNCw0LLQsNGCINC/0L4g0LLQt9Cw0LjQvNC90L4g0YHRitCz0LvQsNGB0LjQtSwg0LAg0L/RgNC4INC90LXQstGK0LfQvNC+0LbQvdC+0YHRgiDigJQg0L/QviDRgdGK0LTQtdCx0LXQvSDRgNC10LQg0LIg0LrQvtC80L/QtdGC0LXQvdGC0L3QuNGPINGB0YrQtCDQsiDQs9GALiAke2YoJ9CT0YDQsNC0JywnX19fX19fX19fJyl9LjwvcD4KICAgICAgPHA+OS40LiDQlNC+0LPQvtCy0L7RgNGK0YIg0LLQu9C40LfQsCDQsiDRgdC40LvQsCDQvtGCINC00LDRgtCw0YLQsCDQvdCwINC/0L7QtNC/0LjRgdCy0LDQvdC10YLQviDQvNGDINC4INC/0L7Qu9GD0YfQsNCy0LDQvdC1INC90LAg0LDQstCw0L3RgdC+0LLQvtGC0L4g0L/Qu9Cw0YnQsNC90LUuPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+YDsKfQoKY29uc3QgQ09OVFJBQ1RTID0gewogIHdlYnNpdGU6ICgpID0+IGNvbnRyYWN0SGVhZGVyKCfQlNCe0JPQntCS0J7QoCDQl9CQINCY0JfQoNCQ0JHQntCi0JrQkCDQndCQINCj0JXQkdCh0JDQmdCiJywgJ1dULdCU0J7QkycpICsgYAogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiIgc3R5bGU9InBhZGRpbmctdG9wOjI0cHgiPgogICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10ZXh0Mik7bGluZS1oZWlnaHQ6MS44O2JhY2tncm91bmQ6I2Y1ZjNmZjtwYWRkaW5nOjE0cHggMThweDtib3JkZXItcmFkaXVzOjEwcHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLWFjY2VudCkiPgogICAgICAgINCh0LrQu9GO0YfQtdC9INC00L3QtdGBLCA8c3Ryb25nPiR7VE9EQVl9PC9zdHJvbmc+LCDQvNC10LbQtNGDIDxzdHJvbmc+0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQ8L3N0cm9uZz4gKNCY0LfQv9GK0LvQvdC40YLQtdC7KSDQuCA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JrQu9C40LXQvdGCJywnX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPiAo0JLRitC30LvQvtC20LjRgtC10LspLgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgJHtjb21tb25TZWN0aW9ucyhgCiAgICAgIDx1bD4KICAgICAgICA8bGk+0KDQsNC30YDQsNCx0L7RgtC60LAg0L3QsCDRg9C10LHRgdCw0LnRgiDQvdCwINCx0LDQt9Cw0YLQsCDQvdCwICR7Zign0J/Qu9Cw0YLRhNC+0YDQvNCwJywnV29yZFByZXNzJyl9INGBINGD0L3QuNC60LDQu9C10L0g0LTQuNC30LDQudC9PC9saT4KICAgICAgICA8bGk+0JDQtNCw0L/RgtC40LLQvdC+0YHRgiDQt9CwINCy0YHQuNGH0LrQuCDRg9GB0YLRgNC+0LnRgdGC0LLQsCAobW9iaWxlLCB0YWJsZXQsIGRlc2t0b3ApPC9saT4KICAgICAgICA8bGk+0JjQvdGC0LXQs9GA0LDRhtC40Y8g0L3QsCDQtNC+ICR7Zign0KHRgtGA0LDQvdC40YbQuCcsJ19fIChfX18pJyl9INGB0YLRgNCw0L3QuNGG0Lgg0YHRitC00YrRgNC20LDQvdC40LU8L2xpPgogICAgICAgIDxsaT5TRU8g0L7Qv9GC0LjQvNC40LfQsNGG0LjRjyDQuCDRgNC10LPQuNGB0YLRgNCw0YbQuNGPINCyINGC0YrRgNGB0LDRh9C60LjRgtC1IChHb29nbGUsIEJpbmcpPC9saT4KICAgICAgICA8bGk+U1NMINGB0LXRgNGC0LjRhNC40LrQsNGCINC4INCx0LDQt9C+0LLQsCDRgdC40LPRg9GA0L3QvtGB0YI8L2xpPgogICAgICAgIDxsaT7QntCx0YPRh9C10L3QuNC1INC30LAg0YDQsNCx0L7RgtCwINGBINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQuNCy0L3QuNGPINC/0LDQvdC10Ls8L2xpPgogICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9CU0L7Qv9GK0LvQvdC40YLQtdC70L3QsCDRhNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGCJywnX19fX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9saT4KICAgICAgPC91bD5gKX0KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDEwPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Ce0JTQlNCg0KrQltCa0JAgKNCd0JXQl9CQ0JTQqtCb0JbQmNCi0JXQm9Cd0J4pPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPtCf0YDQuCDQttC10LvQsNC90LjQtSDQvdCwINCS0YrQt9C70L7QttC40YLQtdC70Y8sINGB0LvQtdC0INC/0YDQtdC00LDQstCw0L3QtSDQvdCwINGB0LDQudGC0LAg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdC60LvRjtGH0LXQvSDQvtGC0LTQtdC70LXQvSDQlNC+0LPQvtCy0L7RgCDQt9CwINCY0KIg0L/QvtC00LTRgNGK0LbQutCwINC90LAg0YHRgtC+0LnQvdC+0YHRgiA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0J/QvtC00LTRgNGK0LbQutCwJywn4oKsIF9fIC8g0LzQtdGB0LXRhicpfTwvc3Ryb25nPiwg0LLQutC70Y7Rh9Cy0LDRiTog0LDQutGC0YPQsNC70LjQt9Cw0YbQuNC4LCDQsdC10LrRitC/0LgsINC80L7QvdC40YLQvtGA0LjQvdCzINC4INC+0YLRgdGC0YDQsNC90Y/QstCw0L3QtSDQvdCwINC90LXRgNC10LTQvdC+0YHRgtC4LjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gICsgY29udHJhY3RGb290ZXIoKSwKCiAgc2hvcDogKCkgPT4gY29udHJhY3RIZWFkZXIoJ9CU0J7Qk9Ce0JLQntCgINCX0JAg0JjQl9Cg0JDQkdCe0KLQmtCQINCd0JAg0J7QndCb0JDQmdCdINCc0JDQk9CQ0JfQmNCdJywgJ1dULdCU0J7QkycpICsgYAogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiIgc3R5bGU9InBhZGRpbmctdG9wOjI0cHgiPgogICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10ZXh0Mik7bGluZS1oZWlnaHQ6MS44O2JhY2tncm91bmQ6I2Y1ZjNmZjtwYWRkaW5nOjE0cHggMThweDtib3JkZXItcmFkaXVzOjEwcHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLWFjY2VudCkiPgogICAgICAgINCh0LrQu9GO0YfQtdC9INC00L3QtdGBLCA8c3Ryb25nPiR7VE9EQVl9PC9zdHJvbmc+LCDQvNC10LbQtNGDIDxzdHJvbmc+0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQ8L3N0cm9uZz4gKNCY0LfQv9GK0LvQvdC40YLQtdC7KSDQuCA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JrQu9C40LXQvdGCJywnX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPiAo0JLRitC30LvQvtC20LjRgtC10LspLgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgJHtjb21tb25TZWN0aW9ucyhgCiAgICAgIDx1bD4KICAgICAgICA8bGk+0JjQt9GA0LDQsdC+0YLQutCwINC90LAg0L7QvdC70LDQudC9INC80LDQs9Cw0LfQuNC9INC90LAg0LHQsNC30LDRgtCwINC90LAgJHtmKCfQn9C70LDRgtGE0L7RgNC80LAnLCdXb29Db21tZXJjZSAvIFdvcmRQcmVzcycpfTwvbGk+CiAgICAgICAgPGxpPtCj0L3QuNC60LDQu9C10L0g0LTQuNC30LDQudC9LCDQsNC00LDQv9GC0LjQstC10L0g0LfQsCDQstGB0LjRh9C60Lgg0YPRgdGC0YDQvtC50YHRgtCy0LA8L2xpPgogICAgICAgIDxsaT7QmtCw0YfQstCw0L3QtSDQuCDQvdCw0YHRgtGA0L7QudC60LAg0L3QsCDQtNC+ICR7Zign0J/RgNC+0LTRg9C60YLQuCcsJ19fIChfX19fXyknKX0g0L/RgNC+0LTRg9C60YLQsDwvbGk+CiAgICAgICAgPGxpPtCY0L3RgtC10LPRgNCw0YbQuNGPINGBINC/0LvQsNGC0LXQttC90Lgg0YHQuNGB0YLQtdC80Lg6ICR7Zign0J/Qu9Cw0YnQsNC90LUnLCfQvdCw0LvQvtC20LXQvSDQv9C70LDRgtC10LYsINCx0LDQvdC60L7QsiDQv9GA0LXQstC+0LQsINC60LDRgNGC0LAnKX08L2xpPgogICAgICAgIDxsaT7QmNC90YLQtdCz0YDQsNGG0LjRjyDRgSDQutGD0YDQuNC10YDRgdC60Lgg0YTQuNGA0LzQuCDQt9CwINCz0LXQvdC10YDQuNGA0LDQvdC1INC90LAg0YLQvtCy0LDRgNC40YLQtdC70L3QuNGG0Lg8L2xpPgogICAgICAgIDxsaT7QmtCw0YLQtdCz0L7RgNC40LgsINGE0LjQu9GC0YDQuCwg0YDQsNC30YjQuNGA0LXQvdC+INGC0YrRgNGB0LXQvdC1PC9saT4KICAgICAgICA8bGk+U0VPINC+0L/RgtC40LzQuNC30LDRhtC40Y8g0Lgg0YDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQsiBHb29nbGU8L2xpPgogICAgICAgIDxsaT7QntCx0YPRh9C10L3QuNC1INC30LAg0YPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDQvNCw0LPQsNC30LjQvdCwPC9saT4KICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQlNC+0L/RitC70L3QuNGC0LXQu9C90L4nLCdfX19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L2xpPgogICAgICA8L3VsPmApfQogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMTA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCl0J7QodCi0JjQndCTINCYINCf0J7QlNCU0KDQqtCW0JrQkDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD4xMC4xLiDQpdC+0YHRgtC40L3Qs9GK0YIg0L3QsCDQvNCw0LPQsNC30LjQvdCwINC1OiAke2YoJ9Cl0L7RgdGC0LjQvdCzJywn4pahINC/0YDQtdC00L7RgdGC0LDQstC10L0g0L7RgiDQmNC30L/RitC70L3QuNGC0LXQu9GPICZuYnNwOyZuYnNwOyDilqEg0L/RgNC10LTQvtGB0YLQsNCy0LXQvSDQvtGCINCS0YrQt9C70L7QttC40YLQtdC70Y8nKX0uPC9wPgogICAgICAgIDxwPjEwLjIuINCf0YDQuCDQttC10LvQsNC90LjQtSDQvdCwINCS0YrQt9C70L7QttC40YLQtdC70Y8g0YHQtSDRgdC60LvRjtGH0LLQsCDQvtGC0LTQtdC70LXQvSDQlNC+0LPQvtCy0L7RgCDQt9CwINCY0KIg0L/QvtC00LTRgNGK0LbQutCwINC90LAg0YHRgtC+0LnQvdC+0YHRgiA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0J/QvtC00LTRgNGK0LbQutCwJywn4oKsIF9fIC8g0LzQtdGB0LXRhicpfTwvc3Ryb25nPi48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCArIGNvbnRyYWN0Rm9vdGVyKCksCgogIG1hcmtldGluZzogKCkgPT4gY29udHJhY3RIZWFkZXIoJ9CU0J7Qk9Ce0JLQntCgINCX0JAg0JzQkNCg0JrQldCi0JjQndCTINCj0KHQm9Cj0JPQmCcsICdXVC3QlNCe0JMnKSArIGAKICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iIHN0eWxlPSJwYWRkaW5nLXRvcDoyNHB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dDIpO2xpbmUtaGVpZ2h0OjEuODtiYWNrZ3JvdW5kOiNmNWYzZmY7cGFkZGluZzoxNHB4IDE4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1hY2NlbnQpIj4KICAgICAgICDQodC60LvRjtGH0LXQvSDQtNC90LXRgSwgPHN0cm9uZz4ke1RPREFZfTwvc3Ryb25nPiwg0LzQtdC20LTRgyA8c3Ryb25nPtCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUPC9zdHJvbmc+ICjQmNC30L/RitC70L3QuNGC0LXQuykg0LggPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ca0LvQuNC10L3RgicsJ19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L3N0cm9uZz4gKNCS0YrQt9C70L7QttC40YLQtdC7KS4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDE8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0KDQldCU0JzQldCiINCd0JAg0JTQntCT0J7QktCe0KDQkDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD7QmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0YHQtSDQt9Cw0LTRitC70LbQsNCy0LAg0LTQsCDQv9GA0LXQtNC+0YHRgtCw0LLRjyDRgdC70LXQtNC90LjRgtC1INC80LDRgNC60LXRgtC40L3QsyDRg9GB0LvRg9Cz0Lg6PC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEg0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsCBGYWNlYm9vayAvIEluc3RhZ3JhbSDQsNC60LDRg9C90YLQuDwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+4pahIEdvb2dsZSBBZHMg0LrQsNC80L/QsNC90LjQuCDQuCDQvtC/0YLQuNC80LjQt9Cw0YbQuNGPPC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEg0JTQvdC10LLQvdC4INGB0YLQvtGA0LjRgtCwINC4INC/0L7RgdGC0L7QstC1PC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEg0JfQsNGB0L3QtdC80LDQvdC1INC90LAg0LLQuNC00LXQviDRgNC40LnQu9GB0L7QstC1INCyINC+0LHQtdC60YLQsDwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+4pahINCh0LXQtNC80LjRh9C90Lgg0LHRgNC+0YjRg9GA0LggKEE0L0E1LCBQREYgKyDQtNC40LPQuNGC0LDQu9C10L0pPC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEgVmliZXIg0LrQsNC90LDQuyDigJQg0L3QsNGB0YLRgNC+0LnQutCwINC4INGD0L/RgNCw0LLQu9C10L3QuNC1PC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEg0J7RgNCz0LDQvdC40LfQuNGA0LDQvdC1INC90LAg0YLQvtC80LHQvtC70Lgg0Lgg0LjQs9GA0Lg8L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQnNC10YHQtdGH0LXQvSDQvtGC0YfQtdGCINC30LAg0YDQtdC30YPQu9GC0LDRgtC40YLQtTwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQlNC+0L/RitC70L3QuNGC0LXQu9C90LAg0YPRgdC70YPQs9CwJywnX19fX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KHQoNCe0Jog0J3QkCDQlNCe0JPQntCS0J7QoNCQPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjIuMS4g0JTQvtCz0L7QstC+0YDRitGCINGB0LUg0YHQutC70Y7Rh9Cy0LAg0LfQsCDQvNC40L3QuNC80LDQu9C10L0g0YHRgNC+0Log0L7RgiA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KHRgNC+0LonLCc2ICjRiNC10YHRgiknKX08L3N0cm9uZz4g0LzQtdGB0LXRhtCwLCDRgdGH0LjRgtCw0L3QviDQvtGCIDxzdHJvbmc+JHtUT0RBWX08L3N0cm9uZz4uPC9wPgogICAgICAgIDxwPjIuMi4g0KHQu9C10LQg0LjQt9GC0LjRh9Cw0L3QtSDQvdCwINC80LjQvdC40LzQsNC70L3QuNGPINGB0YDQvtC6LCDQtNC+0LPQvtCy0L7RgNGK0YIg0YHQtSDQv9C+0LTQvdC+0LLRj9Cy0LAg0LDQstGC0L7QvNCw0YLQuNGH0L3QviDQt9CwINGB0LvQtdC00LLQsNGJINC80LXRgdC10YYsINCw0LrQviDQvdC1INC1INC/0YDQtdC60YDQsNGC0LXQvS48L3A+CiAgICAgICAgPHA+Mi4zLiDQn9GA0LXQutGA0LDRgtGP0LLQsNC90LXRgtC+INC40LfQuNGB0LrQstCwINC/0LjRgdC80LXQvdC+INGD0LLQtdC00L7QvNC70LXQvdC40LUg0LzQuNC90LjQvNGD0LwgPHN0cm9uZz4zMCAo0YLRgNC40LTQtdGB0LXRgik8L3N0cm9uZz4g0LTQvdC4INC/0YDQtdC00LLQsNGA0LjRgtC10LvQvdC+LjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCm0JXQndCQINCYINCf0JvQkNCp0JDQndCVPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjMuMS4g0JzQtdGB0LXRh9C90LDRgtCwINGC0LDQutGB0LAg0LfQsCDRg9GB0LvRg9Cz0LjRgtC1INC1IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQptC10L3QsCcsJ+KCrCBfX19fXyAoX19fX18g0LXQstGA0L4pJyl9PC9zdHJvbmc+LCDRgSDQstC60LvRjtGH0LXQvdC+INCU0JTQoS48L3A+CiAgICAgICAgPHA+My4yLiDQn9C70LDRidCw0L3QtdGC0L4g0YHQtSDQuNC30LLRitGA0YjQstCwINC00L4gPHN0cm9uZz41LdGC0L4g0YfQuNGB0LvQvjwvc3Ryb25nPiDQvdCwINGC0LXQutGD0YnQuNGPINC80LXRgdC10YYg0L/QviDQsdCw0L3QutC+0LIg0L/RitGCLjwvcD4KICAgICAgICA8cD4zLjMuINCf0YDQuCDQt9Cw0LHQsNCy0Y/QvdC1INC90LAg0L/Qu9Cw0YnQsNC90LUg0L3QsNC0IDEwINC00L3QuCwg0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC80L7QttC1INC00LAg0L/RgNC10YPRgdGC0LDQvdC+0LLQuCDRg9GB0LvRg9Cz0LjRgtC1INC00L4g0L/QvtC70YPRh9Cw0LLQsNC90LUg0L3QsCDQtNGK0LvQttC40LzQsNGC0LAg0YHRg9C80LAuPC9wPgogICAgICAgIDxwPjMuNC4g0KDQtdC60LvQsNC80L3QuNGC0LUg0LHRjtC00LbQtdGC0LggKEdvb2dsZSBBZHMsIEZhY2Vib29rIEFkcykg0YHQtSDQv9C+0LXQvNCw0YIg0Lgg0L/Qu9Cw0YnQsNGCINC+0YLQtNC10LvQvdC+INC+0YIg0JLRitC30LvQvtC20LjRgtC10LvRjy48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA0PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Cg0JDQktCQINCYINCX0JDQlNCq0JvQltCV0J3QmNCvPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT7QmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0L/RgNC10LTQvtGB0YLQsNCy0Y8g0LzQtdGB0LXRh9C10L0g0L7RgtGH0LXRgiDQtNC+IDUt0YLQviDRh9C40YHQu9C+INC90LAg0YHQu9C10LTQstCw0YnQuNGPINC80LXRgdC10YYuPC9saT4KICAgICAgICAgIDxsaT7QodGK0LTRitGA0LbQsNC90LjQtdGC0L4g0YHQtSDRgdGK0LPQu9Cw0YHRg9Cy0LAg0YEg0JLRitC30LvQvtC20LjRgtC10LvRjyDQv9GA0LXQtNC4INC/0YPQsdC70LjQutGD0LLQsNC90LUuPC9saT4KICAgICAgICAgIDxsaT7QktGK0LfQu9C+0LbQuNGC0LXQu9GP0YIg0L/RgNC10LTQvtGB0YLQsNCy0Y8g0LTQvtGB0YLRitC/INC00L4g0L/RgNC+0YTQuNC70LjRgtC1INC4INC90LXQvtCx0YXQvtC00LjQvNC40YLQtSDQvNCw0YLQtdGA0LjQsNC70LguPC9saT4KICAgICAgICAgIDxsaT7QmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0L3QtSDQvdC+0YHQuCDQvtGC0LPQvtCy0L7RgNC90L7RgdGCINC30LAg0YDQtdC30YPQu9GC0LDRgtC40YLQtSDQvtGCINC/0LvQsNGC0LXQvdC40YLQtSDRgNC10LrQu9Cw0LzQuCDQv9GA0Lgg0L3QtdC00L7RgdGC0LDRgtGK0YfQtdC9INCx0Y7QtNC20LXRgi48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA1IOKAlCA4PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Ce0JLQldCg0JjQotCV0JvQndCe0KHQoiwg0J/QoNCV0JrQoNCQ0KLQr9CS0JDQndCVINCYINCX0JDQmtCb0K7Qp9CY0KLQldCb0J3QmCDQoNCQ0JfQn9Ce0KDQldCU0JHQmDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD41LjEuINCh0YLRgNCw0L3QuNGC0LUg0YHQtSDQt9Cw0LTRitC70LbQsNCy0LDRgiDQtNCwINC/0LDQt9GP0YIg0L/QvtCy0LXRgNC40YLQtdC70L3QvtGB0YIg0L3QsCDRgtGK0YDQs9C+0LLRgdC60LDRgtCwINC40L3RhNC+0YDQvNCw0YbQuNGPLjwvcD4KICAgICAgICA8cD42LjEuINCU0L7Qs9C+0LLQvtGA0YrRgiDRgdC1INC/0YDQtdC60YDQsNGC0Y/QstCwINGBIDMwLdC00L3QtdCy0L3QviDQv9C40YHQvNC10L3QviDQv9GA0LXQtNC40LfQstC10YHRgtC40LUg0YHQu9C10LQg0LjQt9GC0LjRh9Cw0L3QtSDQvdCwINC80LjQvdC40LzQsNC70L3QuNGPINGB0YDQvtC6LjwvcD4KICAgICAgICA8cD43LjEuINCf0YDQuCDRhNC+0YDRgdC80LDQttC+0YDQvdC4INC+0LHRgdGC0L7Rj9GC0LXQu9GB0YLQstCwLCDRgdGC0YDQsNC90LjRgtC1INC90LUg0L3QvtGB0Y/RgiDQvtGC0LPQvtCy0L7RgNC90L7RgdGCINC30LAg0L3QtdC40LfQv9GK0LvQvdC10L3QuNC1LjwvcD4KICAgICAgICA8cD44LjEuINCU0L7Qs9C+0LLQvtGA0YrRgiDQtSDRgdGK0YHRgtCw0LLQtdC9INCyINC00LLQsCDQtdC60LfQtdC80L/Qu9GP0YDQsC4g0JfQsCDQvdC10YPRgNC10LTQtdC90LjRgtC1INCy0YrQv9GA0L7RgdC4INGB0LUg0L/RgNC40LvQsNCz0LAg0LfQsNC60L7QvdC+0LTQsNGC0LXQu9GB0YLQstC+0YLQviDQvdCwINCg0JEuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAgKyBjb250cmFjdEZvb3RlcigpLAoKICBtYWludGVuYW5jZTogKCkgPT4gY29udHJhY3RIZWFkZXIoJ9CU0J7Qk9Ce0JLQntCgINCX0JAg0JjQoiDQn9Ce0JTQlNCg0KrQltCa0JAnLCAnV1Qt0JTQntCTJykgKyBgCiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIiBzdHlsZT0icGFkZGluZy10b3A6MjRweCI+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXRleHQyKTtsaW5lLWhlaWdodDoxLjg7YmFja2dyb3VuZDojZjVmM2ZmO3BhZGRpbmc6MTRweCAxOHB4O2JvcmRlci1yYWRpdXM6MTBweDtib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tYWNjZW50KSI+CiAgICAgICAg0KHQutC70Y7Rh9C10L0g0LTQvdC10YEsIDxzdHJvbmc+JHtUT0RBWX08L3N0cm9uZz4sINC80LXQttC00YMgPHN0cm9uZz7Qo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlDwvc3Ryb25nPiAo0JjQt9C/0YrQu9C90LjRgtC10LspINC4IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmtC70LjQtdC90YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9zdHJvbmc+ICjQktGK0LfQu9C+0LbQuNGC0LXQuykuCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAxPC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0KDQldCU0JzQldCiPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPjxwPtCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQv9GA0LXQtNC+0YHRgtCw0LLRjyDRgdC70LXQtNC90LjRgtC1INGD0YHQu9GD0LPQuCDQv9C+INC/0L7QtNC00YDRitC20LrQsCDQvdCwINGD0LXQsdGB0LDQudGCL9C/0LvQsNGC0YTQvtGA0LzQsCDQvdCwINCw0LTRgNC10YE6IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQlNC+0LzQtdC50L0nLCdfX19fX19fX19fX19fX19fX19fJyl9PC9zdHJvbmc+PC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT43LzI0INC80L7QvdC40YLQvtGA0LjQvdCzINC90LAg0L/Qu9Cw0YLRhNC+0YDQvNCw0YLQsCDQuCDRgdCw0LnRgtCwPC9saT4KICAgICAgICAgIDxsaT7QntGC0YHRgtGA0LDQvdGP0LLQsNC90LUg0L3QsCDQvdC10YDQtdC00L3QvtGB0YLQuCDQuCDRgtC10YXQvdC40YfQtdGB0LrQuCDQv9GA0L7QsdC70LXQvNC4PC9saT4KICAgICAgICAgIDxsaT7QkNC60YLRg9Cw0LvQuNC30LjRgNCw0L3QtSDQvdCwINGB0LjRgdGC0LXQvNCw0YLQsCAoQ01TLCDQv9C70YrQs9C40L3QuCwg0YLQtdC80LgpIOKAlCDQstC10LTQvdGK0LYg0YHQtdC00LzQuNGH0L3QvjwvbGk+CiAgICAgICAgICA8bGk+0JXQttC10LTQvdC10LLQtdC9INCw0LLRgtC+0LzQsNGC0LjRh9C10L0g0LHQtdC60YrQvyDQvdCwINCx0LDQt9Cw0YLQsCDQtNCw0L3QvdC4INC4INGE0LDQudC70L7QstC10YLQtTwvbGk+CiAgICAgICAgICA8bGk+0KHQutCw0L3QuNGA0LDQvdC1INC30LAg0LfQu9C+0L3QsNC80LXRgNC10L0g0LTQvtGB0YLRitC/IOKAlCDQstC10LTQvdGK0LYg0YHQtdC00LzQuNGH0L3QvjwvbGk+CiAgICAgICAgICA8bGk+0KHQvNGP0L3QsCDQvdCwINCx0LDQvdC10YDQuCDQuCDRgtC10LrRgdGC0L7QstC+INGB0YrQtNGK0YDQttCw0L3QuNC1IOKAlCDQtNC+ICR7Zign0J/RgNC+0LzQtdC90LgnLCdfIChfX19fXyknKX0g0L/RgNC+0LzQtdC90Lgg0LzQtdGB0LXRh9C90L48L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JTQvtC/0YrQu9C90LjRgtC10LvQvdC+JywnX19fX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMjwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QodCg0J7QmjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD4yLjEuINCU0L7Qs9C+0LLQvtGA0YrRgiDQtSDQsdC10LfRgdGA0L7Rh9C10L0g0Lgg0LLQu9C40LfQsCDQsiDRgdC40LvQsCDQvtGCIDxzdHJvbmc+JHtUT0RBWX08L3N0cm9uZz4uPC9wPgogICAgICAgIDxwPjIuMi4g0J/RgNC10LrRgNCw0YLRj9Cy0LAg0YHQtSDRgSDQv9C40YHQvNC10L3QviDRg9Cy0LXQtNC+0LzQu9C10L3QuNC1INC80LjQvdC40LzRg9C8IDxzdHJvbmc+MzAgKNGC0YDQuNC00LXRgdC10YIpPC9zdHJvbmc+INC00L3QuCDQv9GA0LXQtNCy0LDRgNC40YLQtdC70L3Qvi48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAzPC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCm0JXQndCQINCYINCf0JvQkNCp0JDQndCVPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjMuMS4g0JzQtdGB0LXRh9C90LDRgtCwINGC0LDQutGB0LAg0LUgPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cm0LXQvdCwJywn4oKsIF9fX19fIChfX19fXyDQtdCy0YDQviknKX08L3N0cm9uZz4sINGBINCy0LrQu9GO0YfQtdC90L4g0JTQlNChLjwvcD4KICAgICAgICA8cD4zLjIuINCf0LvQsNGJ0LDQvdC10YLQviDRgdC1INC40LfQstGK0YDRiNCy0LAg0LTQviA8c3Ryb25nPjUt0YLQviDRh9C40YHQu9C+PC9zdHJvbmc+INC90LAg0YLQtdC60YPRidC40Y8g0LzQtdGB0LXRhiDQv9C+INCx0LDQvdC60L7QsiDQv9GK0YIuPC9wPgogICAgICAgIDxwPjMuMy4g0KXQvtGB0YLQuNC90LPRitGCINC1OiAke2YoJ9Cl0L7RgdGC0LjQvdCzJywn4pahINCy0LrQu9GO0YfQtdC9INCyINGC0LDQutGB0LDRgtCwICZuYnNwOyZuYnNwOyDilqEg0L7RgtC00LXQu9C90L4g0LfQsNC/0LvQsNGJ0LDQvSDQvtGCINCS0YrQt9C70L7QttC40YLQtdC70Y8nKX0uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gNCDigJQgNzwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QntCi0JPQntCS0J7QoNCd0J7QodCiLCDQn9Ce0JLQldCg0JjQotCV0JvQndCe0KHQoiwg0J/QoNCV0JrQoNCQ0KLQr9CS0JDQndCVLCDQl9CQ0JrQm9Cu0KfQmNCi0JXQm9Cd0J48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+NC4xLiDQmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0L3QtSDQvdC+0YHQuCDQvtGC0LPQvtCy0L7RgNC90L7RgdGCINC30LAg0YnQtdGC0LgsINC/0YDQuNGH0LjQvdC10L3QuCDQvtGCINCw0YLQsNC60LgsINGF0L7RgdGC0LjQvdCzINGB0YDQuNCy0L7QstC1INC40LvQuCDRgtGA0LXRgtC4INC70LjRhtCwLjwvcD4KICAgICAgICA8cD40LjIuINCh0YLRgNCw0L3QuNGC0LUg0L/QsNC30Y/RgiDQv9C+0LLQtdGA0LjRgtC10LvQvdC+0YHRgiDQvdCwINC00L7RgdGC0YrQv9C40YLQtSDQuCDRgtC10YXQvdC40YfQtdGB0LrQsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8uPC9wPgogICAgICAgIDxwPjUuMS4g0JTQvtCz0L7QstC+0YDRitGCINC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC10LrRgNCw0YLQtdC9INC/0L4g0LLQt9Cw0LjQvNC90L4g0YHRitCz0LvQsNGB0LjQtSDQuNC70Lgg0YEgMzAt0LTQvdC10LLQvdC+INC/0YDQtdC00LjQt9Cy0LXRgdGC0LjQtS48L3A+CiAgICAgICAgPHA+Ni4xLiDQlNC+0LPQvtCy0L7RgNGK0YIg0LUg0YHRitGB0YLQsNCy0LXQvSDQsiDQtNCy0LAg0LXQutC30LXQvNC/0LvRj9GA0LAuINCX0LAg0L3QtdGD0YDQtdC00LXQvdC40YLQtSDQstGK0L/RgNC+0YHQuCDRgdC1INC/0YDQuNC70LDQs9CwINC30LDQutC+0L3QvtC00LDRgtC10LvRgdGC0LLQvtGC0L4g0L3QsCDQoNCRLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gICsgY29udHJhY3RGb290ZXIoKSwKCiAgc3ViY29udHJhY3RvcjogKCkgPT4gY29udHJhY3RIZWFkZXIoJ9CU0J7Qk9Ce0JLQntCgINCX0JAg0J/QntCU0JjQl9Cf0KrQm9Cd0JXQndCY0JUnLCAnV1Qt0J/QntCUJykgKyBgCiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIiBzdHlsZT0icGFkZGluZy10b3A6MjRweCI+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXRleHQyKTtsaW5lLWhlaWdodDoxLjg7YmFja2dyb3VuZDojZmZmM2NkO3BhZGRpbmc6MTRweCAxOHB4O2JvcmRlci1yYWRpdXM6MTBweDtib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tYW1iZXIpIj4KICAgICAgICDQodC60LvRjtGH0LXQvSDQtNC90LXRgSwgPHN0cm9uZz4ke1RPREFZfTwvc3Ryb25nPiwg0LzQtdC20LTRgyA8c3Ryb25nPtCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUPC9zdHJvbmc+ICjQk9C70LDQstC10L0g0LjQt9C/0YrQu9C90LjRgtC10LspINC4IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQn9C+0LTQuNC30L/RitC70L3QuNGC0LXQuycsJ19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L3N0cm9uZz4gKNCf0L7QtNC40LfQv9GK0LvQvdC40YLQtdC7KS4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDE8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QoNCV0JTQnNCV0KI8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+0JPQu9Cw0LLQvdC40Y/RgiDQuNC30L/RitC70L3QuNGC0LXQuyDQstGK0LfQu9Cw0LPQsCDQvdCwINCf0L7QtNC40LfQv9GK0LvQvdC40YLQtdC70Y8g0YHQu9C10LTQvdC40YLQtSDQtNC10LnQvdC+0YHRgtC4OjwvcD4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQo9GB0LvRg9Cz0LAgMScsJ19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQo9GB0LvRg9Cz0LAgMicsJ19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQo9GB0LvRg9Cz0LAgMycsJ19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICA8cD7QsiDRgNCw0LzQutC40YLQtSDQvdCwINC/0YDQvtC10LrRgjogPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cf0YDQvtC10LrRgicsJ19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L3N0cm9uZz48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAyPC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCh0KDQntCaPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjIuMS4g0KHRgNC+0Log0L3QsCDQuNC30L/RitC70L3QtdC90LjQtTogPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ch0YDQvtC6JywnX18gKF9fX19fKScpfTwvc3Ryb25nPiDRgNCw0LHQvtGC0L3QuCDQtNC90Lgg0L7RgiDQv9C+0LTQv9C40YHQstCw0L3QtdGC0L4uPC9wPgogICAgICAgIDxwPjIuMi4g0J/RgNC4INC30LDQsdCw0LLRj9C90LUsINCf0L7QtNC40LfQv9GK0LvQvdC40YLQtdC70Y/RgiDRg9Cy0LXQtNC+0LzRj9Cy0LAg0L3QtdC30LDQsdCw0LLQvdC+LjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDM8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0JLQqtCX0J3QkNCT0KDQkNCW0JTQldCd0JjQlTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD4zLjEuINCS0YrQt9C90LDQs9GA0LDQttC00LXQvdC40LXRgtC+INC1IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQodGD0LzQsCcsJ+KCrCBfX19fXyAoX19fX18g0LXQstGA0L4pJyl9PC9zdHJvbmc+LjwvcD4KICAgICAgICA8cD4zLjIuINCf0LvQsNGJ0LDQvdC1OiAke2YoJ9CT0YDQsNGE0LjQuiDQv9C70LDRidCw0L3QtScsJ+KWoSDQtdC00L3QvtC60YDQsNGC0L3QviDQv9GA0Lgg0L/RgNC10LTQsNCy0LDQvdC1ICZuYnNwOyZuYnNwOyDilqEgNTAlINCw0LLQsNC90YEgKyA1MCUg0L/RgNC4INC/0YDQtdC00LDQstCw0L3QtScpfS48L3A+CiAgICAgICAgPHA+My4zLiDQn9C+0LTQuNC30L/RitC70L3QuNGC0LXQu9GP0YIg0LjQt9C00LDQstCwINGE0LDQutGC0YPRgNCwL9GA0LDQt9C/0LjRgdC60LAg0LfQsCDQv9C+0LvRg9GH0LXQvdCw0YLQsCDRgdGD0LzQsC48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA0PC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0J7QktCV0KDQmNCi0JXQm9Cd0J7QodCiINCYINCd0JrQkDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD40LjEuINCf0L7QtNC40LfQv9GK0LvQvdC40YLQtdC70Y/RgiDRgdC1INC30LDQtNGK0LvQttCw0LLQsCDQtNCwINC/0LDQt9C4INC/0L7QstC10YDQuNGC0LXQu9C90L7RgdGCINC+0YLQvdC+0YHQvdC+INC60LvQuNC10L3RgtC40YLQtSwg0L/RgNC+0LXQutGC0LjRgtC1INC4INGC0YrRgNCz0L7QstGB0LrQsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0L3QsCDQo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlC48L3A+CiAgICAgICAgPHA+NC4yLiDQn9C+0LTQuNC30L/RitC70L3QuNGC0LXQu9GP0YIg0L3QtSDQutC+0L3RgtCw0LrRgtGD0LLQsCDQtNC40YDQtdC60YLQvdC+INGBINC60LvQuNC10L3RgtC40YLQtSDQvdCwINCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUINCx0LXQtyDQuNC30YDQuNGH0L3QviDRgNCw0LfRgNC10YjQtdC90LjQtS48L3A+CiAgICAgICAgPHA+NC4zLiDQl9Cw0LHRgNCw0L3QsNGC0LAg0LUg0LIg0YHQuNC70LAg0LfQsCDQv9C10YDQuNC+0LQg0L7RgiA8c3Ryb25nPjI0ICjQtNCy0LDQtNC10YHQtdGCINC4INGH0LXRgtC40YDQuCk8L3N0cm9uZz4g0LzQtdGB0LXRhtCwINGB0LvQtdC0INC/0YDQtdC60YDQsNGC0Y/QstCw0L3QtSDQvdCwINGB0YrRgtGA0YPQtNC90LjRh9C10YHRgtCy0L7RgtC+LjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDU8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0JjQndCi0JXQm9CV0JrQotCj0JDQm9Cd0JAg0KHQntCR0KHQotCS0JXQndCe0KHQoiDQmCDQn9Cg0JXQlNCQ0JLQkNCd0JU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+NS4xLiDQktGB0LjRh9C60Lgg0YDQtdC30YPQu9GC0LDRgtC4INC+0YIg0YDQsNCx0L7RgtCw0YLQsCDRgdCwINGB0L7QsdGB0YLQstC10L3QvtGB0YIg0L3QsCDQo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlCDRgdC70LXQtCDQv9GK0LvQvdC+0YLQviDQv9C70LDRidCw0L3QtS48L3A+CiAgICAgICAgPHA+NS4yLiDQn9C+0LTQuNC30L/RitC70L3QuNGC0LXQu9GP0YIg0L/RgNC10LTQsNCy0LAg0YDQsNCx0L7RgtCw0YLQsCDQt9Cw0LXQtNC90L4g0YEg0LLRgdC40YfQutC4INC40LfRhdC+0LTQvdC4INGE0LDQudC70L7QstC1LCDQtNC+0YHRgtGK0L/QuCDQuCDQtNC+0LrRg9C80LXQvdGC0LDRhtC40Y8uPC9wPgogICAgICAgIDxwPjUuMy4g0JTQvtCz0L7QstC+0YDRitGCINC1INGB0YrRgdGC0LDQstC10L0g0LIg0LTQstCwINC10LrQt9C10LzQv9C70Y/RgNCwLiDQl9CwINC90LXRg9GA0LXQtNC10L3QuNGC0LUg0LLRitC/0YDQvtGB0Lgg0YHQtSDQv9GA0LjQu9Cw0LPQsCDQt9Cw0LrQvtC90L7QtNCw0YLQtdC70YHRgtCy0L7RgtC+INC90LAg0KDQkS48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCArIGNvbnRyYWN0Rm9vdGVyKCksCgogIGNvbXBsZXg6ICgpID0+IGNvbnRyYWN0SGVhZGVyKCfQmtCe0JzQn9Cb0JXQmtCh0JXQnSDQlNCe0JPQntCS0J7QoCcsICdXVC3QlNCe0JMnKSArIGAKICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iIHN0eWxlPSJwYWRkaW5nLXRvcDoyNHB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dDIpO2xpbmUtaGVpZ2h0OjEuODtiYWNrZ3JvdW5kOiNmNWYzZmY7cGFkZGluZzoxNHB4IDE4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1hY2NlbnQpIj4KICAgICAgICDQodC60LvRjtGH0LXQvSDQtNC90LXRgSwgPHN0cm9uZz4ke1RPREFZfTwvc3Ryb25nPiwg0LzQtdC20LTRgyA8c3Ryb25nPtCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUPC9zdHJvbmc+ICjQmNC30L/RitC70L3QuNGC0LXQuykg0LggPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ca0LvQuNC10L3RgicsJ19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L3N0cm9uZz4gKNCS0YrQt9C70L7QttC40YLQtdC7KS4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgICR7Y29tbW9uU2VjdGlvbnMoYAogICAgICA8cD48c3Ryb25nPkkuINCY0LfRgNCw0LHQvtGC0LrQsDo8L3N0cm9uZz48L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+JHtmKCfQotC40L8g0YHQsNC50YInLCfilqEg0KPQtdCx0YHQsNC50YIgJm5ic3A7Jm5ic3A7IOKWoSDQntC90LvQsNC50L0g0LzQsNCz0LDQt9C40L0nKX0g0L3QsCDQsdCw0LfQsNGC0LAg0L3QsCAke2YoJ9Cf0LvQsNGC0YTQvtGA0LzQsCcsJ1dvcmRQcmVzcyAvIFdvb0NvbW1lcmNlJyl9PC9saT4KICAgICAgICA8bGk+0KPQvdC40LrQsNC70LXQvSDQtNC40LfQsNC50L0sINCw0LTQsNC/0YLQuNCy0LXQvSDQt9CwINCy0YHQuNGH0LrQuCDRg9GB0YLRgNC+0LnRgdGC0LLQsDwvbGk+CiAgICAgICAgPGxpPlNFTyDQvtC/0YLQuNC80LjQt9Cw0YbQuNGPINC4INGA0LXQs9C40YHRgtGA0LDRhtC40Y8g0LIgR29vZ2xlPC9saT4KICAgICAgPC91bD4KICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij48c3Ryb25nPklJLiDQnNCw0YDQutC10YLQuNC90LMgKNC80LXRgdC10YfQvdC+KTo8L3N0cm9uZz48L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+4pahINCj0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0YHQvtGG0LjQsNC70L3QuCDQvNGA0LXQttC4PC9saT4KICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+4pahIEdvb2dsZSBBZHMgLyBGYWNlYm9vayBBZHM8L2xpPgogICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEg0JLQuNC00LXQviDRgNC40LnQu9GB0L7QstC1INC4INGB0YrQtNGK0YDQttCw0L3QuNC1PC9saT4KICAgICAgPC91bD4KICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij48c3Ryb25nPklJSS4g0J/QvtC00LTRgNGK0LbQutCwICjQvNC10YHQtdGH0L3Qvik6PC9zdHJvbmc+PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjcvMjQg0LzQvtC90LjRgtC+0YDQuNC90LMsINCw0LrRgtGD0LDQu9C40LfQsNGG0LjQuCwg0LHQtdC60YrQv9C4LCDRgdC40LPRg9GA0L3QvtGB0YI8L2xpPgogICAgICA8L3VsPmApfQogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0JTQvtC/0YrQu9C90LjRgtC10LvQvdC4INGD0YHQu9C+0LLQuNGPPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QnNCV0KHQldCn0J3QmCDQo9Ch0JvQo9CT0Jg8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+0JXQtNC90L7QutGA0LDRgtC90L7RgtC+INC/0LvQsNGJ0LDQvdC1INC30LAg0LjQt9GA0LDQsdC+0YLQutCw0YLQsCDQtSA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JjQt9GA0LDQsdC+0YLQutCwJywn4oKsIF9fX19fIChfX19fXyDQtdCy0YDQviknKX08L3N0cm9uZz4sINCx0LXQtyDQlNCU0KEuPC9wPgogICAgICAgIDxwPtCc0LXRgdC10YfQvdCw0YLQsCDRgtCw0LrRgdCwINC30LAg0LzQsNGA0LrQtdGC0LjQvdCzINC4INC/0L7QtNC00YDRitC20LrQsCDQtSA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JzQtdGB0LXRh9C90L4nLCfigqwgX19fX18gKF9fX19fINC10LLRgNC+KScpfTwvc3Ryb25nPiwg0YEg0JTQlNChLCDQv9C70LDRgtC40LzQsCDQtNC+IDUt0YLQviDRh9C40YHQu9C+LjwvcD4KICAgICAgICA8cD7QnNC40L3QuNC80LDQu9C10L0g0YHRgNC+0Log0LfQsCDQvNC10YHQtdGH0L3QuNGC0LUg0YPRgdC70YPQs9C4OiA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KHRgNC+0LonLCc2ICjRiNC10YHRgiknKX08L3N0cm9uZz4g0LzQtdGB0LXRhtCwLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gICsgY29udHJhY3RGb290ZXIoKQp9OwoKY29uc3QgQUdFTkNZX0NBUkRTPVsKICBbJ3dlYnNpdGUnLCfwn4yQJywn0JTQvtCz0L7QstC+0YAg0LfQsCDRgdCw0LnRgicsJ9CY0LfRgNCw0LHQvtGC0LrQsCDQvdCwINGD0LXQsdGB0LDQudGCICsg0L7Qv9GG0LjQvtC90LDQu9C90LAg0L/QvtC00LTRgNGK0LbQutCwJ10sCiAgWydzaG9wJywn8J+bkicsJ9CU0L7Qs9C+0LLQvtGAINC30LAg0L7QvdC70LDQudC9INC80LDQs9Cw0LfQuNC9JywnV29vQ29tbWVyY2UgLyBFLWNvbW1lcmNlICsg0L/QvtC00LTRgNGK0LbQutCwJ10sCiAgWydtYXJrZXRpbmcnLCfwn5OxJywn0JTQvtCz0L7QstC+0YAg0LfQsCDQvNCw0YDQutC10YLQuNC90LMnLCfQodC+0YYuINC80YDQtdC20LgsIEdvb2dsZSBBZHMsIFNFTywg0YDQuNC50LvRgdC+0LLQtSddLAogIFsnbWFpbnRlbmFuY2UnLCfwn5SnJywn0JTQvtCz0L7QstC+0YAg0LfQsCDQmNCiINC/0L7QtNC00YDRitC20LrQsCcsJ9Cc0LXRgdC10YfQvdCwINC/0L7QtNC00YDRitC20LrQsCwg0YXQvtGB0YLQuNC90LMsINC80L7QvdC40YLQvtGA0LjQvdCzJ10sCiAgWydzdWJjb250cmFjdG9yJywn8J+knScsJ9CU0L7Qs9C+0LLQvtGAINC30LAg0L/QvtC00LjQt9C/0YrQu9C90LjRgtC10LsnLCfQnNC10LbQtNGDINC40LfQv9GK0LvQvdC40YLQtdC7INC4INCy0YrQvdGI0LXQvSDQv9Cw0YDRgtC90YzQvtGAJ10sCiAgWydjb21wbGV4Jywn4q2QJywn0JrQvtC80L/Qu9C10LrRgdC10L0g0LTQvtCz0L7QstC+0YAnLCfQodCw0LnRgi/QvNCw0LPQsNC30LjQvSArINC80LDRgNC60LXRgtC40L3QsyArINC/0L7QtNC00YDRitC20LrQsCddCl07CgpmdW5jdGlvbiBjb250cmFjdENhcmRzRm9yU2VjdG9yKCl7CiAgcmV0dXJuIFNFQ1RPUl9DQVJEU1tIVUJfU0VDVE9SXSB8fCBBR0VOQ1lfQ0FSRFM7Cn0KCmZ1bmN0aW9uIHJlbmRlckNvbnRyYWN0Q2FyZHMoKXsKICBjb25zdCBjYXJkcz1jb250cmFjdENhcmRzRm9yU2VjdG9yKCk7CiAgc2VsZWN0ZWRUeXBlPW51bGw7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dlbmVyYXRlQnRuJykuZGlzYWJsZWQ9dHJ1ZTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2VuZXJhdGVCdG4nKS50ZXh0Q29udGVudD0n0JjQt9Cx0LXRgNC4INCy0LjQtCDQtNC+0LPQvtCy0L7RgCDihpInOwoJICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJhY3RHcmlkJykuaW5uZXJIVE1MPWNhcmRzLm1hcChjPT4KCSAgICAnPGRpdiBjbGFzcz0iY29udHJhY3QtdHlwZSIgb25jbGljaz0ic2VsZWN0VHlwZShcJycrY1swXSsnXCcpIiBpZD0iY3QtJytjWzBdKyciPicrCiAgICAnPGRpdiBjbGFzcz0iY3QtaWNvbiI+JytjWzFdKyc8L2Rpdj48ZGl2IGNsYXNzPSJjdC10aXRsZSI+JytjWzJdKyc8L2Rpdj48ZGl2IGNsYXNzPSJjdC1kZXNjIj4nK2NbM10rJzwvZGl2PjwvZGl2PicKICApLmpvaW4oJycpOwp9CgpmdW5jdGlvbiBjbGVhbkNvbnRyYWN0SHRtbChodG1sKXsKICBpZihIVUJfUk9MRSA9PT0gJ21hc3RlcicpIHJldHVybiBodG1sOwogIHJldHVybiBodG1sCiAgICAucmVwbGFjZSgv0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQvZywgZign0JjQt9C/0YrQu9C90LjRgtC10LsnLCdfX19fX19fX19fX19fX19fX19fX19fX19fJykpCiAgICAucmVwbGFjZSgv0KXQsNC60LDQvSDQntGB0LzQsNC9L2csIGYoJ9Cf0YDQtdC00YHRgtCw0LLQu9GP0LLQsNGJJywnX19fX19fX19fX19fX19fXycpKQogICAgLnJlcGxhY2UoL29mZmljZUB3ZWJ0cml4aWFcLmNvbSDCtyBcKzM1OSA4OCA4ODggODg4OC9nLCBmKCfQmtC+0L3RgtCw0LrRgicsJ19fX19fX19fX19fX19fX19fX19fX19fX18nKSkKICAgIC5yZXBsYWNlKC93ZWJ0cml4aWFcLmNvbS9nLCBmKCfQodCw0LnRgicsJ19fX19fX19fX19fX19fX18nKSkKICAgIC5yZXBsYWNlKC9XZWJ0cml4aWEvZywgZign0KTQuNGA0LzQsCcsJ19fX19fX19fX19fX19fX18nKSk7Cn0KCmZ1bmN0aW9uIHRlbXBsYXRlS2V5KCl7CiAgcmV0dXJuIHNlbGVjdGVkVHlwZT8nd3RfY29udHJhY3RfdGVtcGxhdGVfJytIVUJfU0VDVE9SKydfJytzZWxlY3RlZFR5cGU6Jyc7Cn0KCmZ1bmN0aW9uIHNhdmVUZW1wbGF0ZSgpewogIGlmKCFzZWxlY3RlZFR5cGUpcmV0dXJuOwogIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRlbXBsYXRlS2V5KCksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cmFjdERvYycpLmlubmVySFRNTCk7CiAgYWxlcnQoJ9Co0LDQsdC70L7QvdGK0YIg0LUg0LfQsNC/0LDQt9C10L0uJyk7Cn0KCmZ1bmN0aW9uIHJlc2V0VGVtcGxhdGUoKXsKICBpZighc2VsZWN0ZWRUeXBlKXJldHVybjsKICBpZighY29uZmlybSgn0J3Rg9C70LjRgNCw0Lkg0LfQsNC/0LDQt9C10L3QuNGPINGI0LDQsdC70L7QvSDQt9CwINGC0L7Qt9C4INCy0LjQtCDQtNC+0LPQvtCy0L7RgD8nKSlyZXR1cm47CiAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGVtcGxhdGVLZXkoKSk7CiAgZ2VuZXJhdGVDb250cmFjdCgpOwp9CgpmdW5jdGlvbiBnZW5lcmF0ZUNvbnRyYWN0KCkgewogIGlmICghc2VsZWN0ZWRUeXBlKSByZXR1cm47CiAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0ZW1wbGF0ZUtleSgpKTsKICBjb25zdCBidWlsZGVyID0gU0VDVE9SX0NPTlRSQUNUU1tzZWxlY3RlZFR5cGVdIHx8IENPTlRSQUNUU1tzZWxlY3RlZFR5cGVdOwogIGlmKCFidWlsZGVyKXthbGVydCgn0JvQuNC/0YHQstCwINGI0LDQsdC70L7QvSDQt9CwINGC0L7Qt9C4INC00L7Qs9C+0LLQvtGALicpO3JldHVybjt9CiAgY29uc3QgaHRtbCA9IGNsZWFuQ29udHJhY3RIdG1sKHNhdmVkIHx8IGJ1aWxkZXIoKSk7CgkgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cmFjdERvYycpLmlubmVySFRNTCA9IGh0bWw7CgkgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3RvclBhZ2UnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJhY3REb2NQYWdlJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CgkgIGJ1aWxkQ29udHJhY3RGb3JtKCk7CgkgIGVkaXRNb2RlID0gZmFsc2U7CgkgIHdpbmRvdy5zY3JvbGxUbygwLDApOwoJfQoKdmFyIEFQST0oZnVuY3Rpb24oKXsKICB2YXIgYmFzZT13aW5kb3cubG9jYXRpb24ub3JpZ2luK3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9jb250cmFjdHNcLmh0bWwkLywnJykucmVwbGFjZSgvXC8kLywnJyk7CiAgcmV0dXJuIGJhc2UrJy9hcGkucGhwJzsKfSkoKTsKYXN5bmMgZnVuY3Rpb24gbW9kdWxlR3VhcmQoa2V5LGxhYmVsKXsKICB0cnl7CiAgICBhd2FpdCBzeW5jTGljZW5zZUZyb21NYXN0ZXIoKTsKICAgIHZhciByPWF3YWl0IGZldGNoKEFQSSsnP2FjdGlvbj1icmFuZGluZ19zZXR0aW5ncycse2NyZWRlbnRpYWxzOidzYW1lLW9yaWdpbid9KTsKCSAgICB2YXIgaj1hd2FpdCByLmpzb24oKTsKCSAgICB2YXIgZD1qJiZqLm9rP2ouZGF0YTpudWxsOwoJICAgIGlmKGQmJmQuaHViX3R5cGUpSFVCX1NFQ1RPUj1kLmh1Yl90eXBlOwoJICAgIGlmKGQmJmQubGljZW5zZV9yb2xlKUhVQl9ST0xFPWQubGljZW5zZV9yb2xlOwogICAgaWYoZCAmJiAoZC5saWNlbnNlX3N0YXRlPT09J2xvY2tlZCd8fGQubGljZW5zZV9zdGF0ZT09PSdpbnZhbGlkJykpewogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjQ4MHB4O21hcmdpbjo4MHB4IGF1dG87dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtjb2xvcjojNGE0YTZhIj48ZGl2IHN0eWxlPSJmb250LXNpemU6NDBweDttYXJnaW4tYm90dG9tOjEycHgiPvCflJI8L2Rpdj48aDI+0KXRitCx0YrRgiDQtSDQt9Cw0LrQu9GO0YfQtdC9PC9oMj48cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEzcHgiPicrKGQubGljZW5zZV9tZXNzYWdlfHwn0JvQuNGG0LXQvdC30YrRgiDQvdC1INC1INCw0LrRgtC40LLQtdC9LicpKyc8L3A+PC9kaXY+JzsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYoZCAmJiBkLm1vZHVsZXNfZW5hYmxlZCAmJiBkLm1vZHVsZXNfZW5hYmxlZC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFkLm1vZHVsZXNfZW5hYmxlZFtrZXldKXsKICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9Im1heC13aWR0aDo0ODBweDttYXJnaW46ODBweCBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Y29sb3I6IzRhNGE2YSI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjQwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij7wn5SSPC9kaXY+PGgyPicrbGFiZWwrJyDQtSDQuNC30LrQu9GO0YfQtdC9PC9oMj48cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEzcHgiPtCi0L7Qt9C4INC80L7QtNGD0Lsg0LUg0LjQt9C60LvRjtGH0LXQvSDQt9CwINGC0LDQt9C4INC40L3RgdGC0LDQu9Cw0YbQuNGPLiDQodCy0YrRgNC20Lgg0YHQtSDRgSDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLjwvcD48YSBocmVmPSJpbmRleC5odG1sIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDoxNnB4O2NvbG9yOiM2YzYzZmYiPuKGkCDQntCx0YDQsNGC0L3QviDQutGK0LwgSHViPC9hPjwvZGl2Pic7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Y2F0Y2goZSl7fQoJICByZXR1cm4gdHJ1ZTsKCX0KYXN5bmMgZnVuY3Rpb24gc3luY0xpY2Vuc2VGcm9tTWFzdGVyKCl7CiAgdHJ5ewogICAgdmFyIGNSZXM9YXdhaXQgZmV0Y2goQVBJKyc/YWN0aW9uPWxpY2Vuc2VfY2xpZW50X2NvbmZpZycse2NyZWRlbnRpYWxzOidzYW1lLW9yaWdpbid9KTsKICAgIHZhciBjSnNvbj1hd2FpdCBjUmVzLmpzb24oKTsKICAgIHZhciBjZmc9Y0pzb24mJmNKc29uLm9rP2NKc29uLmRhdGE6bnVsbDsKICAgIGlmKCFjZmd8fCFjZmcudmVyaWZ5X3VybClyZXR1cm47CiAgICB2YXIgcnI9YXdhaXQgZmV0Y2goY2ZnLnZlcmlmeV91cmwse2NhY2hlOiduby1zdG9yZScsbW9kZTonY29ycyd9KTsKICAgIHZhciBwYXlsb2FkPWF3YWl0IHJyLmpzb24oKTsKICAgIGlmKHBheWxvYWQmJnBheWxvYWQuc3RhdGUpewogICAgICBhd2FpdCBmZXRjaChBUEkrJz9hY3Rpb249bGljZW5zZV9zeW5jJyx7bWV0aG9kOidQT1NUJyxoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbid9LGNyZWRlbnRpYWxzOidzYW1lLW9yaWdpbicsYm9keTpKU09OLnN0cmluZ2lmeSh7cGF5bG9hZDpwYXlsb2FkfSl9KTsKICAgIH0KICB9Y2F0Y2goZSl7fQp9Cm1vZHVsZUd1YXJkKCdjb250cmFjdHMnLCfQlNC+0LPQvtCy0L7RgNC40YLQtScpLnRoZW4oZnVuY3Rpb24ob2speyBpZihvaykgcmVuZGVyQ29udHJhY3RDYXJkcygpOyB9KTsKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=', 'hr.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0JzQvtC70LHQuCDigJQgV2VidHJpeGlhIEh1YjwvdGl0bGU+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9RE0rU2Fuczp3Z2h0QDMwMDs0MDA7NTAwOzYwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ey0tYmc6I2YwZjBmODstLXN1cjojZmZmOy0tc3VyMjojZjVmNWZjOy0tc3VyMzojZWFlYWY1Oy0tYnJkOnJnYmEoMCwwLDAsLjA4KTstLWJyZDI6cmdiYSgwLDAsMCwuMTQpOwotLXR4OiMxYTFhMmU7LS10eDI6IzRhNGE2YTstLXR4MzojODg4OGFhOy0tYWNjOiM2YzYzZmY7LS1hY2MyOiNhNzhiZmE7LS1ncm46IzIyYzU1ZTstLXJlZDojZWY0NDQ0OwotLWZuOidETSBTYW5zJyxzYW5zLXNlcmlmOy0tbW86J0RNIE1vbm8nLG1vbm9zcGFjZX0KKnttYXJnaW46MDtwYWRkaW5nOjA7Ym94LXNpemluZzpib3JkZXItYm94fQpib2R5e2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS10eCk7bWluLWhlaWdodDoxMDB2aDtwYWRkaW5nOjI0cHggMThweH0KLndyYXB7bWF4LXdpZHRoOjExMDBweDttYXJnaW46MCBhdXRvfQoudG9we2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxOHB4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4fQpoMXtmb250LXNpemU6MjBweDtmb250LXdlaWdodDo2MDB9Ci5zdWJ7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweH0KLmdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczozODBweCAxZnI7Z2FwOjE4cHh9CkBtZWRpYShtYXgtd2lkdGg6ODYwcHgpey5ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fQoucGFuZWx7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoxOHB4fQoucGh7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206MTJweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9Ci50YWJze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O21hcmdpbi1ib3R0b206MTRweDtiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO3BhZGRpbmc6NHB4O2JvcmRlci1yYWRpdXM6MTBweH0KLnRhYntmbGV4OjE7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo4cHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwO2N1cnNvcjpwb2ludGVyO2NvbG9yOnZhcigtLXR4Mil9Ci50YWIuYWN0aXZle2JhY2tncm91bmQ6dmFyKC0tc3VyKTtjb2xvcjp2YXIoLS1hY2MpO2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsLjA4KX0KbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDZlbTttYXJnaW46MTBweCAwIDVweH0KaW5wdXQsc2VsZWN0LHRleHRhcmVhe3dpZHRoOjEwMCU7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMHB4IDEycHg7CmNvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEzcHg7b3V0bGluZTpub25lfQppbnB1dDpmb2N1cyxzZWxlY3Q6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYyl9CnRleHRhcmVhe3Jlc2l6ZTp2ZXJ0aWNhbDttaW4taGVpZ2h0OjcwcHh9Ci5yb3cye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTBweH0KLmJ0bntwYWRkaW5nOjEwcHggMTZweDtib3JkZXItcmFkaXVzOjlweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi10b3A6MTRweH0KLmJ0bi5we2JhY2tncm91bmQ6dmFyKC0tYWNjKTtjb2xvcjojZmZmO3dpZHRoOjEwMCV9Ci5idG4uc3tiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2NvbG9yOnZhcigtLXR4Mik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpfQouZG9je2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjUwcHggNjBweDttaW4taGVpZ2h0OjYwMHB4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuOTtjb2xvcjojMTExfQouZG9jLXRvb2xiYXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6OHB4O21hcmdpbi1ib3R0b206MTJweH0KLmRvYyBoMntmb250LXNpemU6MTVweDt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA4ZW07bWFyZ2luLWJvdHRvbTozMHB4fQouZG9jIC50b3t0ZXh0LWFsaWduOnJpZ2h0O21hcmdpbi1ib3R0b206MjZweH0KLmRvYyAuZmllbGR7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICM4ODg7cGFkZGluZzowIDJweDtmb250LXdlaWdodDo2MDB9Ci5kb2MgcHttYXJnaW4tYm90dG9tOjE0cHh9Ci5kb2MgLnNpZ3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDo2MHB4fQouZG9jIC5zaWcgZGl2e2ZvbnQtc2l6ZToxMnB4O3RleHQtYWxpZ246Y2VudGVyfQouZG9jIC5zaWcgLmxpbmV7Ym9yZGVyLXRvcDoxcHggc29saWQgIzMzMzttYXJnaW4tdG9wOjM2cHg7cGFkZGluZy10b3A6NHB4O3dpZHRoOjE3MHB4fQouZG9jIC5yZXN7bWFyZ2luLXRvcDo3MHB4O2JvcmRlci10b3A6MXB4IGRhc2hlZCAjYWFhO3BhZGRpbmctdG9wOjE2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzU1NX0KdGFibGUubGlzdHt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweH0KdGFibGUubGlzdCB0aHt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzo4cHggMTBweDtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtd2VpZ2h0OjUwMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpfQp0YWJsZS5saXN0IHRke3BhZGRpbmc6OXB4IDEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKX0KLmJhZGdle3BhZGRpbmc6MnB4IDlweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwfQouYmFkZ2UucGVuZGluZ3tiYWNrZ3JvdW5kOnJnYmEoMjQ1LDE1OCwxMSwuMTUpO2NvbG9yOiNiNDUzMDl9Ci5iYWRnZS5hcHByb3ZlZHtiYWNrZ3JvdW5kOnJnYmEoMzQsMTk3LDk0LC4xNSk7Y29sb3I6IzE1ODAzZH0KLmJhZGdlLnJlamVjdGVke2JhY2tncm91bmQ6cmdiYSgyMzksNjgsNjgsLjE1KTtjb2xvcjojYjkxYzFjfQoubG5re2NvbG9yOnZhcigtLWFjYyk7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEycHg7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0KQG1lZGlhIHByaW50ewogIGJvZHl7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MH0KICAudG9wLC5ncmlkPmRpdjpmaXJzdC1jaGlsZCwuZG9jLXRvb2xiYXIsdGFibGUubGlzdCwucGgsaDEsLnN1YntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fQogIC5ncmlke2Rpc3BsYXk6YmxvY2t9CiAgLnBhbmVse2JvcmRlcjpub25lO3BhZGRpbmc6MH0KICAuZG9je3BhZGRpbmc6MjBweCAxMHB4fQp9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9IndyYXAiPgogIDxkaXYgY2xhc3M9InRvcCI+CiAgICA8ZGl2PjxoMT7wn5OEINCc0L7Qu9Cx0Lg8L2gxPjxkaXYgY2xhc3M9InN1YiI+0J7RgtC/0YPRgdC6ICjQv9C70LDRgtC10L0v0L3QtdC/0LvQsNGC0LXQvSkg0Lgg0L/RgNC10LTQuNC30LLQtdGB0YLQuNC1INC30LAg0L3QsNC/0YPRgdC60LDQvdC1PC9kaXY+PC9kaXY+CiAgICA8ZGl2PjxhIGhyZWY9ImluZGV4Lmh0bWwiIGNsYXNzPSJsbmsiPuKGkCDQntCx0YDQsNGC0L3QviDQutGK0LwgSHViPC9hPjwvZGl2PgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJncmlkIj4KICAgIDxkaXYgY2xhc3M9InBhbmVsIj4KICAgICAgPGRpdiBjbGFzcz0icGgiPtCd0L7QstCwINC80L7Qu9Cx0LA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGFicyI+CiAgICAgICAgPGRpdiBjbGFzcz0idGFiIGFjdGl2ZSIgZGF0YS10PSJsZWF2ZV9wYWlkIiBvbmNsaWNrPSJzZXRUeXBlKHRoaXMsJ2xlYXZlX3BhaWQnKSI+0J/Qu9Cw0YLQtdC9INC+0YLQv9GD0YHQujwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRhYiIgZGF0YS10PSJsZWF2ZV91bnBhaWQiIG9uY2xpY2s9InNldFR5cGUodGhpcywnbGVhdmVfdW5wYWlkJykiPtCd0LXQv9C70LDRgtC10L08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YWIiIGRhdGEtdD0icmVzaWduYXRpb24iIG9uY2xpY2s9InNldFR5cGUodGhpcywncmVzaWduYXRpb24nKSI+0J/RgNC10LTQuNC30LLQtdGB0YLQuNC1PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGxhYmVsPtCY0LzQtSDQvdCwINGB0LvRg9C20LjRgtC10LvRjzwvbGFiZWw+CiAgICAgIDxpbnB1dCBpZD0iZl9uYW1lIiBwbGFjZWhvbGRlcj0i0JjQvNC1LCDQpNCw0LzQuNC70LjRjyI+CiAgICAgIDxkaXYgY2xhc3M9InJvdzIiPgogICAgICAgIDxkaXY+PGxhYmVsPtCU0LvRitC20L3QvtGB0YI8L2xhYmVsPjxpbnB1dCBpZD0iZl9wb3MiIHBsYWNlaG9sZGVyPSLQvdCw0L/RgC4g0KDQsNC30YDQsNCx0L7RgtGH0LjQuiI+PC9kaXY+CiAgICAgICAgPGRpdj48bGFiZWw+0JXQk9CdPC9sYWJlbD48aW5wdXQgaWQ9ImZfZWduIiBwbGFjZWhvbGRlcj0iKioqKioqKioqKiI+PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBpZD0ibGVhdmVGaWVsZHMiPgogICAgICAgIDxkaXYgY2xhc3M9InJvdzIiPgogICAgICAgICAgPGRpdj48bGFiZWw+0J7RgiDQtNCw0YLQsDwvbGFiZWw+PGlucHV0IGlkPSJmX3N0YXJ0IiB0eXBlPSJkYXRlIj48L2Rpdj4KICAgICAgICAgIDxkaXY+PGxhYmVsPtCU0L4g0LTQsNGC0LA8L2xhYmVsPjxpbnB1dCBpZD0iZl9lbmQiIHR5cGU9ImRhdGUiIG9uY2hhbmdlPSJjYWxjRGF5cygpIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8bGFiZWw+0JHRgNC+0Lkg0YDQsNCx0L7RgtC90Lgg0LTQvdC4PC9sYWJlbD4KICAgICAgICA8aW5wdXQgaWQ9ImZfZGF5cyIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIHZhbHVlPSIxIj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGlkPSJyZXNpZ25GaWVsZHMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogICAgICAgIDxsYWJlbD7QodGA0L7QuiDQvdCwINC/0YDQtdC00LjQt9Cy0LXRgdGC0LjQtdGC0L4gKNC00L3QuCk8L2xhYmVsPgogICAgICAgIDxpbnB1dCBpZD0iZl9ub3RpY2UiIHR5cGU9Im51bWJlciIgdmFsdWU9IjMwIj4KICAgICAgICA8bGFiZWw+0J/QvtGB0LvQtdC00LXQvSDRgNCw0LHQvtGC0LXQvSDQtNC10L08L2xhYmVsPgogICAgICAgIDxpbnB1dCBpZD0iZl9sYXN0ZGF5IiB0eXBlPSJkYXRlIj4KICAgICAgPC9kaXY+CgogICAgICA8bGFiZWw+0J7RgdC90L7QstCw0L3QuNC1IC8g0LHQtdC70LXQttC60LAgKNC/0L4g0LjQt9Cx0L7RgCk8L2xhYmVsPgogICAgICA8dGV4dGFyZWEgaWQ9ImZfcmVhc29uIiBwbGFjZWhvbGRlcj0i0L3QsNC/0YAuINC90LAg0L7RgdC90L7QstCw0L3QuNC1INGH0LsuIDE1NSDQvtGCINCa0KIiPjwvdGV4dGFyZWE+CgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ic2F2ZVJlcXVlc3QoKSI+8J+SviDQl9Cw0L/QsNC30Lgg0Lgg0LPQtdC90LXRgNC40YDQsNC5PC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBzIiBzdHlsZT0id2lkdGg6MTAwJSIgb25jbGljaz0ibG9hZExpc3QoKSI+4oa7INCe0LHQvdC+0LLQuCDRgdC/0LjRgdGK0LrQsDwvYnV0dG9uPgoKICAgICAgPGRpdiBjbGFzcz0icGgiIHN0eWxlPSJtYXJnaW4tdG9wOjIycHgiPtCY0YHRgtC+0YDQuNGPPC9kaXY+CiAgICAgIDx0YWJsZSBjbGFzcz0ibGlzdCIgaWQ9Imxpc3RUYmwiPjx0Ym9keT48dHI+PHRkPtCX0LDRgNC10LbQtNCw4oCmPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InBhbmVsIj4KICAgICAgPGRpdiBjbGFzcz0iZG9jLXRvb2xiYXIiPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBzIiBvbmNsaWNrPSJ3aW5kb3cucHJpbnQoKSI+8J+WqO+4jyDQn9GA0LjQvdGC0LjRgNCw0LkgLyBQREY8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImRvYyIgaWQ9ImRvY1ZpZXciPjwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKPHNjcmlwdD4KJ3VzZSBzdHJpY3QnOwp2YXIgQVBJPShmdW5jdGlvbigpewogIHZhciBzYXZlZD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd3RfYXBpJyk7CiAgaWYoc2F2ZWQpcmV0dXJuIHNhdmVkOwogIHZhciBiYXNlPXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL2hyXC5odG1sJC8sJycpLnJlcGxhY2UoL1wvJC8sJycpOwogIHJldHVybiBiYXNlKycvYXBpLnBocCc7Cn0pKCk7CnZhciBDVT0oZnVuY3Rpb24oKXt0cnl7dmFyIHM9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnd3RfcycpO3JldHVybiBzP0pTT04ucGFyc2Uocyk6bnVsbDt9Y2F0Y2goZSl7cmV0dXJuIG51bGw7fX0pKCk7CnZhciBjdXJUeXBlPSdsZWF2ZV9wYWlkJzsKCmFzeW5jIGZ1bmN0aW9uIGFmKGFjdGlvbixtZXRob2QsYm9keSxleHRyYSl7CiAgbWV0aG9kPW1ldGhvZHx8J0dFVCc7ZXh0cmE9ZXh0cmF8fCcnOwogIHRyeXsKICAgIHZhciBvPXttZXRob2Q6bWV0aG9kLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJ319OwogICAgaWYoYm9keSlvLmJvZHk9SlNPTi5zdHJpbmdpZnkoYm9keSk7CiAgICB2YXIgcj1hd2FpdCBmZXRjaChBUEkrJz9hY3Rpb249JythY3Rpb24rZXh0cmEsbyk7CiAgICB2YXIgaj1hd2FpdCByLmpzb24oKTsKICAgIHJldHVybiBqLm9rP2ouZGF0YTpudWxsOwogIH1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpO3JldHVybiBudWxsO30KfQoKZnVuY3Rpb24gc2V0VHlwZShlbCx0KXsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFiJykuZm9yRWFjaCh4PT54LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTsKICBlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICBjdXJUeXBlPXQ7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xlYXZlRmllbGRzJykuc3R5bGUuZGlzcGxheSA9IHQ9PT0ncmVzaWduYXRpb24nID8gJ25vbmUnOidibG9jayc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc2lnbkZpZWxkcycpLnN0eWxlLmRpc3BsYXkgPSB0PT09J3Jlc2lnbmF0aW9uJyA/ICdibG9jayc6J25vbmUnOwogIHJlbmRlckRvYygpOwp9CgpmdW5jdGlvbiBjYWxjRGF5cygpewogIHZhciBzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX3N0YXJ0JykudmFsdWUsIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfZW5kJykudmFsdWU7CiAgaWYocyYmZSl7CiAgICB2YXIgZDE9bmV3IERhdGUocyksIGQyPW5ldyBEYXRlKGUpOwogICAgdmFyIGRpZmY9TWF0aC5yb3VuZCgoZDItZDEpLzg2NDAwMDAwKSsxOwogICAgaWYoZGlmZj4wKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9kYXlzJykudmFsdWU9ZGlmZjsKICB9CiAgcmVuZGVyRG9jKCk7Cn0KCmZ1bmN0aW9uIGZtdERhdGUocyl7CiAgaWYoIXMpcmV0dXJuICdfXy5fXy5fX19fJzsKICB2YXIgZD1uZXcgRGF0ZShzKydUMDA6MDA6MDAnKTsKICByZXR1cm4gU3RyaW5nKGQuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCcwJykrJy4nK1N0cmluZyhkLmdldE1vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpKycuJytkLmdldEZ1bGxZZWFyKCk7Cn0KCmZ1bmN0aW9uIGNvbGxlY3QoKXsKICByZXR1cm4gewogICAgdHlwZTpjdXJUeXBlLAogICAgZW1wbG95ZWVfbmFtZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9uYW1lJykudmFsdWV8fCdfX19fX19fX19fX19fX19fJywKICAgIHBvc2l0aW9uOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX3BvcycpLnZhbHVlfHwnJywKICAgIGVnbjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9lZ24nKS52YWx1ZXx8JycsCiAgICBzdGFydF9kYXRlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX3N0YXJ0JykudmFsdWV8fCcnLAogICAgZW5kX2RhdGU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfZW5kJykudmFsdWV8fCcnLAogICAgZGF5czpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9kYXlzJykudmFsdWV8fDEsCiAgICBub3RpY2VfZGF5czpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9ub3RpY2UnKT9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9ub3RpY2UnKS52YWx1ZTozMCwKICAgIGxhc3Rfd29ya19kYXRlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX2xhc3RkYXknKT9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9sYXN0ZGF5JykudmFsdWU6JycsCiAgICByZWFzb246ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfcmVhc29uJykudmFsdWV8fCcnCiAgfTsKfQoKZnVuY3Rpb24gcmVuZGVyRG9jKCl7CiAgdmFyIGQ9Y29sbGVjdCgpOwogIHZhciB0b2RheT1mbXREYXRlKG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSk7CiAgdmFyIGh0bWw9Jyc7CiAgaWYoZC50eXBlPT09J2xlYXZlX3BhaWQnfHxkLnR5cGU9PT0nbGVhdmVfdW5wYWlkJyl7CiAgICB2YXIgYmFzaXMgPSBkLnR5cGU9PT0nbGVhdmVfcGFpZCcgPyAn0YfQuy4gMTU1INC+0YIg0JrQvtC00LXQutGB0LAg0L3QsCDRgtGA0YPQtNCwJyA6ICfRh9C7LiAxNjAsINCw0LsuIDEg0L7RgiDQmtC+0LTQtdC60YHQsCDQvdCwINGC0YDRg9C00LAnOwogICAgdmFyIGtpbmQgPSBkLnR5cGU9PT0nbGVhdmVfcGFpZCcgPyAn0L/Qu9Cw0YLQtdC9INCz0L7QtNC40YjQtdC9INC+0YLQv9GD0YHQuicgOiAn0L3QtdC/0LvQsNGC0LXQvSDQvtGC0L/Rg9GB0LonOwogICAgaHRtbCArPSAnPGgyPtCc0L7Qu9Cx0LAg0LfQsCDQv9C+0LvQt9Cy0LDQvdC1INC90LAgJytraW5kKyc8L2gyPic7CiAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJ0byI+0JTQviDQo9C/0YDQsNCy0LjRgtC10LvRjzxicj7QvdCwINCj0LXQsdGC0YDQuNC60YHQuNCwINCV0J7QntCUPC9kaXY+JzsKICAgIGh0bWwgKz0gJzxwPjxiPtCc0J7Qm9CR0JA8L2I+PC9wPic7CiAgICBodG1sICs9ICc8cD7QvtGCIDxzcGFuIGNsYXNzPSJmaWVsZCI+JytkLmVtcGxveWVlX25hbWUrJzwvc3Bhbj4nKyhkLnBvc2l0aW9uPycsINC90LAg0LTQu9GK0LbQvdC+0YHRgiA8c3BhbiBjbGFzcz0iZmllbGQiPicrZC5wb3NpdGlvbisnPC9zcGFuPic6JycpKyhkLmVnbj8nLCDQldCT0J0gPHNwYW4gY2xhc3M9ImZpZWxkIj4nK2QuZWduKyc8L3NwYW4+JzonJykrJzwvcD4nOwogICAgaHRtbCArPSAnPHA+0JzQvtC70Y8g0LTQsCDQvNC4INCx0YrQtNC1INGA0LDQt9GA0LXRiNC10L3QviDQtNCwINC/0L7Qu9C30LLQsNC8IDxzcGFuIGNsYXNzPSJmaWVsZCI+JytkLmRheXMrJzwvc3Bhbj4g0YDQsNCx0L7RgtC90Lgg0LTQvdC4ICcra2luZCsKICAgICAgJywg0L3QsCDQvtGB0L3QvtCy0LDQvdC40LUgJytiYXNpcysnLCDRgdGH0LjRgtCw0L3QviDQvtGCIDxzcGFuIGNsYXNzPSJmaWVsZCI+JytmbXREYXRlKGQuc3RhcnRfZGF0ZSkrJzwvc3Bhbj4g0LTQviA8c3BhbiBjbGFzcz0iZmllbGQiPicrZm10RGF0ZShkLmVuZF9kYXRlKSsnPC9zcGFuPiDQstC60LsuPC9wPic7CiAgICBpZihkLnJlYXNvbikgaHRtbCArPSAnPHA+0J7RgdC90L7QstCw0L3QuNC1L9Cx0LXQu9C10LbQutCwOiAnK2QucmVhc29uKyc8L3A+JzsKICAgIGh0bWwgKz0gJzxwPtCU0LDRgtCwOiAnK3RvZGF5Kycg0LMuPC9wPic7CiAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJzaWciPjxkaXY+PGRpdiBjbGFzcz0ibGluZSI+0J/QvtC00L/QuNGBINC90LAg0YHQu9GD0LbQuNGC0LXQu9GPPC9kaXY+PC9kaXY+PGRpdj48ZGl2IGNsYXNzPSJsaW5lIj7QodGK0LPQu9Cw0YHRg9Cy0LDQuyAvINCY0LfQs9C+0YLQstC40Ls8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgaHRtbCArPSAnPGRpdiBjbGFzcz0icmVzIj7QoNC10LfQvtC70Y7RhtC40Y86Jm5ic3A7Jm5ic3A74piQINCe0LTQvtCx0YDQtdC90LAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDvimJAg0J7RgtC60LDQt9Cw0L3QsCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO9CU0LDRgtCwOiBfX19fX19fX19fJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A70J/QvtC00L/QuNGBOiBfX19fX19fX19fPC9kaXY+JzsKICB9IGVsc2UgewogICAgaHRtbCArPSAnPGgyPtCf0YDQtdC00LjQt9Cy0LXRgdGC0LjQtSDQt9CwINC/0YDQtdC60YDQsNGC0Y/QstCw0L3QtSDQvdCwINGC0YDRg9C00L7QstC+INC/0YDQsNCy0L7QvtGC0L3QvtGI0LXQvdC40LU8L2gyPic7CiAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJ0byI+0JTQviDQo9C/0YDQsNCy0LjRgtC10LvRjzxicj7QvdCwINCj0LXQsdGC0YDQuNC60YHQuNCwINCV0J7QntCUPC9kaXY+JzsKICAgIGh0bWwgKz0gJzxwPjxiPtCf0KDQldCU0JjQl9CS0JXQodCi0JjQlTwvYj48L3A+JzsKICAgIGh0bWwgKz0gJzxwPtC+0YIgPHNwYW4gY2xhc3M9ImZpZWxkIj4nK2QuZW1wbG95ZWVfbmFtZSsnPC9zcGFuPicrKGQucG9zaXRpb24/Jywg0L3QsCDQtNC70YrQttC90L7RgdGCIDxzcGFuIGNsYXNzPSJmaWVsZCI+JytkLnBvc2l0aW9uKyc8L3NwYW4+JzonJykrKGQuZWduPycsINCV0JPQnSA8c3BhbiBjbGFzcz0iZmllbGQiPicrZC5lZ24rJzwvc3Bhbj4nOicnKSsnPC9wPic7CiAgICBodG1sICs9ICc8cD7QndCwINC+0YHQvdC+0LLQsNC90LjQtSDRh9C7LiAzMjYg0L7RgiDQmtC+0LTQtdC60YHQsCDQvdCwINGC0YDRg9C00LAsINC+0YLQv9GA0LDQstGP0Lwg0L/RgNC10LTQuNC30LLQtdGB0YLQuNC1INC30LAg0L/RgNC10LrRgNCw0YLRj9Cy0LDQvdC1INC90LAg0YLRgNGD0LTQvtCy0L7RgtC+INC80Lgg0L/RgNCw0LLQvtC+0YLQvdC+0YjQtdC90LjQtSAnKwogICAgICAn0YHRitGBINGB0YDQvtC6INC90LAg0L/RgNC10LTQuNC30LLQtdGB0YLQuNC1INC+0YIgPHNwYW4gY2xhc3M9ImZpZWxkIj4nK2Qubm90aWNlX2RheXMrJzwvc3Bhbj4g0LTQvdC4LjwvcD4nOwogICAgaHRtbCArPSAnPHA+0J/QvtGB0LvQtdC00LXQvSDRgNCw0LHQvtGC0LXQvSDQtNC10L06IDxzcGFuIGNsYXNzPSJmaWVsZCI+JytmbXREYXRlKGQubGFzdF93b3JrX2RhdGUpKyc8L3NwYW4+LjwvcD4nOwogICAgaWYoZC5yZWFzb24pIGh0bWwgKz0gJzxwPtCe0YHQvdC+0LLQsNC90LjQtS/QsdC10LvQtdC20LrQsDogJytkLnJlYXNvbisnPC9wPic7CiAgICBodG1sICs9ICc8cD7QlNCw0YLQsDogJyt0b2RheSsnINCzLjwvcD4nOwogICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic2lnIj48ZGl2PjxkaXYgY2xhc3M9ImxpbmUiPtCf0L7QtNC/0LjRgSDQvdCwINGB0LvRg9C20LjRgtC10LvRjzwvZGl2PjwvZGl2PjxkaXY+PGRpdiBjbGFzcz0ibGluZSI+0J/RgNC40LXQuyAvINCg0LDQsdC+0YLQvtC00LDRgtC10Ls8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgaHRtbCArPSAnPGRpdiBjbGFzcz0icmVzIj7QoNC10LfQvtC70Y7RhtC40Y86Jm5ic3A7Jm5ic3A74piQINCf0YDQuNC10YLQviZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO9CU0LDRgtCwINC90LAg0L/RgNC10LrRgNCw0YLRj9Cy0LDQvdC1OiBfX19fX19fX19fJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A70J/QvtC00L/QuNGBOiBfX19fX19fX19fPC9kaXY+JzsKICB9CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY1ZpZXcnKS5pbm5lckhUTUw9aHRtbDsKfQoKWydmX25hbWUnLCdmX3BvcycsJ2ZfZWduJywnZl9zdGFydCcsJ2ZfcmVhc29uJywnZl9ub3RpY2UnLCdmX2xhc3RkYXknLCdmX2RheXMnXS5mb3JFYWNoKGlkPT57CiAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICBpZihlbCkgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLHJlbmRlckRvYyk7Cn0pOwoKYXN5bmMgZnVuY3Rpb24gc2F2ZVJlcXVlc3QoKXsKICB2YXIgZD1jb2xsZWN0KCk7CiAgdmFyIHI9YXdhaXQgYWYoJ2hyX3JlcXVlc3RzJywnUE9TVCcsZCk7CiAgaWYocil7IGFsZXJ0KCfQnNC+0LvQsdCw0YLQsCDQtSDQt9Cw0L/QsNC30LXQvdCwLicpOyBsb2FkTGlzdCgpOyB9CiAgZWxzZSBhbGVydCgn0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGBIOKAlCDQv9GA0L7QstC10YDQuCDQstGA0YrQt9C60LDRgtCwINGBIEFQSSAobG9jYWxTdG9yYWdlIHd0X2FwaSkuJyk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGxvYWRMaXN0KCl7CiAgdmFyIHJvd3M9YXdhaXQgYWYoJ2hyX3JlcXVlc3RzJyk7CiAgdmFyIHRibD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlzdFRibCcpOwogIGlmKCFyb3dzfHwhcm93cy5sZW5ndGgpeyB0YmwuaW5uZXJIVE1MPSc8dHI+PHRkIHN0eWxlPSJjb2xvcjp2YXIoLS10eDMpIj7QndGP0LzQsCDQt9Cw0L/QuNGB0Lg8L3RkPjwvdHI+JzsgcmV0dXJuOyB9CiAgdmFyIGxhYmVscz17bGVhdmVfcGFpZDon0J/Qu9Cw0YLQtdC9INC+0YLQv9GD0YHQuicsbGVhdmVfdW5wYWlkOifQndC10L/Qu9Cw0YLQtdC9INC+0YLQv9GD0YHQuicscmVzaWduYXRpb246J9Cf0YDQtdC00LjQt9Cy0LXRgdGC0LjQtSd9OwogIHZhciBodG1sPSc8dGhlYWQ+PHRyPjx0aD7QodC70YPQttC40YLQtdC7PC90aD48dGg+0JLQuNC0PC90aD48dGg+0KHRgtCw0YLRg9GBPC90aD48dGg+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgcm93cy5mb3JFYWNoKHI9PnsKICAgIGh0bWwrPSc8dHI+PHRkPicrci5lbXBsb3llZV9uYW1lKyc8L3RkPjx0ZD4nKyhsYWJlbHNbci50eXBlXXx8ci50eXBlKSsnPC90ZD48dGQ+PHNwYW4gY2xhc3M9ImJhZGdlICcrci5zdGF0dXMrJyI+JytyLnN0YXR1cysnPC9zcGFuPjwvdGQ+JysKICAgICAgJzx0ZCBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo0cHgiPicrCiAgICAgIChyLnN0YXR1cyE9PSdhcHByb3ZlZCc/JzxzcGFuIGNsYXNzPSJsbmsiIHN0eWxlPSJjb2xvcjojMTU4MDNkIiBvbmNsaWNrPSJzZXRTdGF0dXMoXCcnK3IuaWQrJ1wnLFwnYXBwcm92ZWRcJykiPuKckyDQntC00L7QsdGA0Lg8L3NwYW4+JzonJykrCiAgICAgIChyLnN0YXR1cyE9PSdyZWplY3RlZCc/JzxzcGFuIGNsYXNzPSJsbmsiIHN0eWxlPSJjb2xvcjojYjkxYzFjIiBvbmNsaWNrPSJzZXRTdGF0dXMoXCcnK3IuaWQrJ1wnLFwncmVqZWN0ZWRcJykiPuKclSDQntGC0LrQsNC20Lg8L3NwYW4+JzonJykrCiAgICAgICc8L3RkPjwvdHI+JzsKICB9KTsKICBodG1sKz0nPC90Ym9keT4nOwogIHRibC5pbm5lckhUTUw9aHRtbDsKfQoKYXN5bmMgZnVuY3Rpb24gc2V0U3RhdHVzKGlkLHN0YXR1cyl7CiAgdmFyIHdobz0oQ1UmJkNVLm5hbWUpP0NVLm5hbWU6J0FkbWluJzsKICB2YXIgcj1hd2FpdCBhZignaHJfcmVxdWVzdF9zdGF0dXMnLCdQT1NUJyx7aWQ6aWQsc3RhdHVzOnN0YXR1cyxhcHByb3ZlZF9ieTp3aG99KTsKICBpZihyIT09bnVsbCl7IGxvYWRMaXN0KCk7IH0KICBlbHNlIGFsZXJ0KCfQk9GA0LXRiNC60LAg0L/RgNC4INC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YHRgtCw0YLRg9GB0LAuJyk7Cn0KCmFzeW5jIGZ1bmN0aW9uIG1vZHVsZUd1YXJkKGtleSxsYWJlbCl7CiAgdHJ5ewogICAgYXdhaXQgc3luY0xpY2Vuc2VGcm9tTWFzdGVyKCk7CiAgICB2YXIgcj1hd2FpdCBhZignYnJhbmRpbmdfc2V0dGluZ3MnKTsKICAgIGlmKHIgJiYgKHIubGljZW5zZV9zdGF0ZT09PSdsb2NrZWQnfHxyLmxpY2Vuc2Vfc3RhdGU9PT0naW52YWxpZCcpKXsKICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9Im1heC13aWR0aDo0ODBweDttYXJnaW46ODBweCBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Y29sb3I6IzRhNGE2YSI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjQwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij7wn5SSPC9kaXY+PGgyPtCl0YrQsdGK0YIg0LUg0LfQsNC60LvRjtGH0LXQvTwvaDI+JysKICAgICAgICAnPHAgc3R5bGU9Im1hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxM3B4Ij4nKyhyLmxpY2Vuc2VfbWVzc2FnZXx8J9Cb0LjRhtC10L3Qt9GK0YIg0L3QtSDQtSDQsNC60YLQuNCy0LXQvS4nKSsnPC9wPjwvZGl2Pic7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmKHIgJiYgci5tb2R1bGVzX2VuYWJsZWQgJiYgci5tb2R1bGVzX2VuYWJsZWQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhci5tb2R1bGVzX2VuYWJsZWRba2V5XSl7CiAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6NDgwcHg7bWFyZ2luOjgwcHggYXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtmb250LWZhbWlseTpzYW5zLXNlcmlmO2NvbG9yOiM0YTRhNmEiPicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O21hcmdpbi1ib3R0b206MTJweCI+8J+UkjwvZGl2PjxoMj4nK2xhYmVsKycg0LUg0LjQt9C60LvRjtGH0LXQvTwvaDI+JysKICAgICAgICAnPHAgc3R5bGU9Im1hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxM3B4Ij7QotC+0LfQuCDQvNC+0LTRg9C7INC1INC40LfQutC70Y7Rh9C10L0g0LfQsCDRgtCw0LfQuCDQuNC90YHRgtCw0LvQsNGG0LjRjy4g0KHQstGK0YDQttC4INGB0LUg0YEg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC48L3A+JysKICAgICAgICAnPGEgaHJlZj0iaW5kZXguaHRtbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6MTZweDtjb2xvcjojNmM2M2ZmIj7ihpAg0J7QsdGA0LDRgtC90L4g0LrRitC8IEh1YjwvYT48L2Rpdj4nOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfWNhdGNoKGUpe30KICByZXR1cm4gdHJ1ZTsKfQphc3luYyBmdW5jdGlvbiBzeW5jTGljZW5zZUZyb21NYXN0ZXIoKXsKICB0cnl7CiAgICB2YXIgYz1hd2FpdCBhZignbGljZW5zZV9jbGllbnRfY29uZmlnJyk7CiAgICBpZighY3x8IWMudmVyaWZ5X3VybClyZXR1cm47CiAgICB2YXIgcnI9YXdhaXQgZmV0Y2goYy52ZXJpZnlfdXJsLHtjYWNoZTonbm8tc3RvcmUnLG1vZGU6J2NvcnMnfSk7CiAgICB2YXIgcGF5bG9hZD1hd2FpdCByci5qc29uKCk7CiAgICBpZihwYXlsb2FkJiZwYXlsb2FkLnN0YXRlKSBhd2FpdCBhZignbGljZW5zZV9zeW5jJywnUE9TVCcse3BheWxvYWQ6cGF5bG9hZH0pOwogIH1jYXRjaChlKXt9Cn0KCm1vZHVsZUd1YXJkKCdocl9yZXF1ZXN0cycsJ9Cc0L7Qu9Cx0LjRgtC1JykudGhlbihmdW5jdGlvbihvayl7IGlmKG9rKXsgcmVuZGVyRG9jKCk7IGxvYWRMaXN0KCk7IH0gfSk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K', 'index.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+V2VidHJpeGlhIEh1YjwvdGl0bGU+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9RE0rU2Fuczp3Z2h0QDMwMDs0MDA7NTAwOzYwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c2NyaXB0PgooZnVuY3Rpb24oKXsKICB2YXIgdD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd3RfdGhlbWUnKXx8J2xpZ2h0JzsKICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJyx0KTsKfSkoKTsKPC9zY3JpcHQ+CjxzdHlsZT4KW2RhdGEtdGhlbWU9ImRhcmsiXXstLWJnOiMwYTBhMGY7LS1zdXI6IzExMTExODstLXN1cjI6IzE4MTgxZjstLXN1cjM6IzFlMWUyODstLWJyZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNyk7LS1icmQyOnJnYmEoMjU1LDI1NSwyNTUsLjEzKTstLXR4OiNlOGU4ZjA7LS10eDI6IzkwOTBhODstLXR4MzojNWE1YTcyOy0tc2hkOjAgNHB4IDI0cHggcmdiYSgwLDAsMCwuNCl9CltkYXRhLXRoZW1lPSJsaWdodCJdey0tYmc6I2YwZjBmODstLXN1cjojZmZmOy0tc3VyMjojZjVmNWZjOy0tc3VyMzojZWFlYWY1Oy0tYnJkOnJnYmEoMCwwLDAsLjA4KTstLWJyZDI6cmdiYSgwLDAsMCwuMTQpOy0tdHg6IzFhMWEyZTstLXR4MjojNGE0YTZhOy0tdHgzOiM4ODg4YWE7LS1zaGQ6MCA0cHggMjRweCByZ2JhKDEwOCw5OSwyNTUsLjA4KX0KOnJvb3R7LS1hY2M6IzZjNjNmZjstLWFjYzI6I2E3OGJmYTstLWdsb3c6cmdiYSgxMDgsOTksMjU1LC4xNCk7LS1ncm46IzIyYzU1ZTstLWdkaW06cmdiYSgzNCwxOTcsOTQsLjEyKTstLWFtYjojZjU5ZTBiOy0tYWRpbTpyZ2JhKDI0NSwxNTgsMTEsLjEyKTstLXJlZDojZWY0NDQ0Oy0tcmRpbTpyZ2JhKDIzOSw2OCw2OCwuMTIpOy0tYmx1OiMzOGJkZjg7LS1iZGltOnJnYmEoNTYsMTg5LDI0OCwuMTIpOy0tZm46J0RNIFNhbnMnLHNhbnMtc2VyaWY7LS1tbzonRE0gTW9ubycsbW9ub3NwYWNlfQoqe21hcmdpbjowO3BhZGRpbmc6MDtib3gtc2l6aW5nOmJvcmRlci1ib3h9CmJvZHl7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLXR4KTttaW4taGVpZ2h0OjEwMHZoO2Rpc3BsYXk6ZmxleH0KCi5sd3twb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6dmFyKC0tYmcpO3otaW5kZXg6OTk5OTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxNHB4fQoubGJ7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkMik7Ym9yZGVyLXJhZGl1czoyMHB4O3BhZGRpbmc6NDRweCA0MHB4O3dpZHRoOjM4MHB4O3RleHQtYWxpZ246Y2VudGVyO2JveC1zaGFkb3c6dmFyKC0tc2hkKX0KLmxsb2dve2hlaWdodDozNHB4O21hcmdpbi1ib3R0b206MjBweH0KW2RhdGEtdGhlbWU9ImRhcmsiXSAubGxvZ297ZmlsdGVyOmJyaWdodG5lc3MoMS4xKX0KLmx0aXRsZXtmb250LXNpemU6MjJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpO21hcmdpbi1ib3R0b206NHB4fQoubHN1Yntmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi1ib3R0b206NnB4fQouYWluZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nOjZweCAxNHB4O2JvcmRlci1yYWRpdXM6MjBweDtiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKX0KLmFkb3R7d2lkdGg6OHB4O2hlaWdodDo4cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDp2YXIoLS1hbWIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3M7ZmxleC1zaHJpbms6MH0KLmFkb3Qub2t7YmFja2dyb3VuZDp2YXIoLS1ncm4pfS5hZG90LmVycntiYWNrZ3JvdW5kOnZhcigtLXJlZCl9Ci5sZnttYXJnaW4tYm90dG9tOjEycHg7dGV4dC1hbGlnbjpsZWZ0fQoubGYgbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDdlbTttYXJnaW4tYm90dG9tOjVweH0KLmxmIGlucHV0e3dpZHRoOjEwMCU7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTFweCAxNHB4O2NvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjE0cHg7b3V0bGluZTpub25lO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xNXN9Ci5sZiBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0tYWNjKX0KLmxidG57d2lkdGg6MTAwJTtwYWRkaW5nOjEycHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tYWNjKTtib3JkZXI6bm9uZTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTp2YXIoLS1mbik7bWFyZ2luLXRvcDo0cHh9Ci5sYnRuOmhvdmVye29wYWNpdHk6Ljl9Ci5sZXJye2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXJlZCk7bWFyZ2luLXRvcDo4cHg7ZGlzcGxheTpub25lfQoudGJ0bjJ7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjhweCAxOHB4O2NvbG9yOnZhcigtLXR4Mik7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2ZvbnQtc2l6ZToxM3B4fQoudGJ0bjI6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eCl9Cgouc2J7d2lkdGg6MjIwcHg7aGVpZ2h0OjEwMHZoO2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHZhcigtLWJyZCk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7ei1pbmRleDoxMDA7b3ZlcmZsb3c6aGlkZGVufQouc2xvZ297cGFkZGluZzoxNnB4IDE0cHggMTJweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7ZmxleC1zaHJpbms6MH0KLnNsb2dvIGltZ3toZWlnaHQ6MjZweH0KW2RhdGEtdGhlbWU9ImRhcmsiXSAuc2xvZ28gaW1ne2ZpbHRlcjpicmlnaHRuZXNzKDEuMSl9Ci5sc3ViMntmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO2xldHRlci1zcGFjaW5nOi4wOGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0KLmx2ZXJ7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tYWNjMik7Zm9udC13ZWlnaHQ6NTAwO21hcmdpbi10b3A6MXB4fQpuYXZ7cGFkZGluZzo4cHggNnB4O2ZsZXg6MTttaW4taGVpZ2h0OjA7b3ZlcmZsb3cteTphdXRvO3Njcm9sbGJhci13aWR0aDp0aGlufQpuYXY6Oi13ZWJraXQtc2Nyb2xsYmFye3dpZHRoOjZweH0KbmF2Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOnZhcigtLWJyZDIpO2JvcmRlci1yYWRpdXM6MTBweH0KLm5zZWN7Zm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTtsZXR0ZXItc3BhY2luZzouMWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtwYWRkaW5nOjEwcHggOHB4IDVweDtmb250LXdlaWdodDo1MDB9Ci5uaXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzo3cHggOXB4O2JvcmRlci1yYWRpdXM6OHB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4xNXM7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdHgyKTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O21hcmdpbi1ib3R0b206MXB4O2JhY2tncm91bmQ6bm9uZTt3aWR0aDoxMDAlO3RleHQtYWxpZ246bGVmdDtmb250LWZhbWlseTp2YXIoLS1mbil9Ci5uaTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2NvbG9yOnZhcigtLXR4KX0KLm5pLmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWdsb3cpO2NvbG9yOnZhcigtLWFjYzIpO2JvcmRlci1jb2xvcjpyZ2JhKDEwOCw5OSwyNTUsLjIpfQoubmlje2ZvbnQtc2l6ZToxM3B4O3dpZHRoOjE1cHg7dGV4dC1hbGlnbjpjZW50ZXI7ZmxleC1zaHJpbms6MH0KLm5iYWRnZXttYXJnaW4tbGVmdDphdXRvO2ZvbnQtc2l6ZToxMHB4O2JhY2tncm91bmQ6dmFyKC0tcmVkKTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjFweCA2cHg7Zm9udC13ZWlnaHQ6NjAwfQoubmJhZGdlLmd7YmFja2dyb3VuZDp2YXIoLS1ncm4pfS5uYmFkZ2UuYXtiYWNrZ3JvdW5kOnZhcigtLWFtYik7Y29sb3I6IzAwMH0KLnNib3R7cGFkZGluZzoxMHB4IDZweDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1icmQpO2ZsZXgtc2hyaW5rOjB9Ci50cm93e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjVweCA4cHg7Ym9yZGVyLXJhZGl1czo4cHh9Ci5hdnt3aWR0aDoyNnB4O2hlaWdodDoyNnB4O2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo2MDA7ZmxleC1zaHJpbms6MH0KLmF2LXB7YmFja2dyb3VuZDpyZ2JhKDEwOCw5OSwyNTUsLjI1KTtjb2xvcjojYTc4YmZhfS5hdi10e2JhY2tncm91bmQ6cmdiYSgyMCwxODQsMTY2LC4yNSk7Y29sb3I6IzJkZDRiZn0KLmF2LWd7YmFja2dyb3VuZDpyZ2JhKDM0LDE5Nyw5NCwuMik7Y29sb3I6IzIyYzU1ZX0uYXYtYXtiYWNrZ3JvdW5kOnJnYmEoMjQ1LDE1OCwxMSwuMik7Y29sb3I6I2Y1OWUwYn0KLmF2LXJ7YmFja2dyb3VuZDpyZ2JhKDIzOSw2OCw2OCwuMik7Y29sb3I6I2VmNDQ0NH0uYXYtYntiYWNrZ3JvdW5kOnJnYmEoNTYsMTg5LDI0OCwuMik7Y29sb3I6IzM4YmRmOH0KCi5tYWlue21hcmdpbi1sZWZ0OjIyMHB4O2ZsZXg6MTttaW4taGVpZ2h0OjEwMHZoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ci50b3BiYXJ7aGVpZ2h0OjUycHg7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMjJweDtnYXA6MTBweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDo1MDtmbGV4LXNocmluazowfQoudHRse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS10eCk7ZmxleDoxfQoudGRhdGV7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTtmb250LWZhbWlseTp2YXIoLS1tbyl9Ci5idG57cGFkZGluZzo2cHggMTJweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZDIpO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0tdHgyKTtmb250LXNpemU6MTJweDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmFsbCAuMTVzO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eCl9Ci5idG4ucHtiYWNrZ3JvdW5kOnZhcigtLWFjYyk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYyk7Y29sb3I6I2ZmZn0uYnRuLnA6aG92ZXJ7b3BhY2l0eTouOX0KLmJ0bi5ze2JvcmRlci1jb2xvcjp2YXIoLS1ncm4pO2NvbG9yOnZhcigtLWdybil9Ci5idG4uZHtib3JkZXItY29sb3I6dmFyKC0tcmVkKTtjb2xvcjp2YXIoLS1yZWQpfQoudGJ0bntwYWRkaW5nOjVweCA5cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQyKTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxNXB4fQoudGJ0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpfQoudWJkZ3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo3cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKTtwYWRkaW5nOjRweCAxMHB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtjdXJzb3I6cG9pbnRlcn0KLnViZGc6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLmNvbntwYWRkaW5nOjIycHg7ZmxleDoxfQouc2Vje2Rpc3BsYXk6bm9uZX0uc2VjLmFjdGl2ZXtkaXNwbGF5OmJsb2NrfQoKLmtne2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDUsMWZyKTtnYXA6MTBweDttYXJnaW4tYm90dG9tOjIwcHh9Ci5rY3tiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE0cHggMTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59Ci5rYzpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYnJkMil9Ci5rbHtmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDdlbTtmb250LXdlaWdodDo1MDA7bWFyZ2luLWJvdHRvbTo2cHh9Ci5rdntmb250LXNpemU6MjFweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLW1vKX0KLmt2Lmd7Y29sb3I6dmFyKC0tZ3JuKX0ua3YuYXtjb2xvcjp2YXIoLS1hbWIpfS5rdi5hY3tjb2xvcjp2YXIoLS1hY2MyKX0ua3Yucntjb2xvcjp2YXIoLS1yZWQpfQoua3N7Zm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweH0KLmtnMntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LTIwcHg7cmlnaHQ6LTIwcHg7d2lkdGg6NTVweDtoZWlnaHQ6NTVweDtib3JkZXItcmFkaXVzOjUwJTtvcGFjaXR5Oi4wN30KCi5wYW5lbHtiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47bWFyZ2luLWJvdHRvbToxNnB4fQoucGh7cGFkZGluZzoxM3B4IDE3cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwfQoucHR7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KX0KLnBhe2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWFjYzIpO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6M3B4IDlweDtib3JkZXItcmFkaXVzOjZweDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMTA4LDk5LDI1NSwuMik7YmFja2dyb3VuZDpub25lO2ZvbnQtZmFtaWx5OnZhcigtLWZuKX0KLnBhOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZ2xvdyl9Ci5sb2FkaW5ne3BhZGRpbmc6MzZweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxM3B4fQoubG9hZGluZzo6YWZ0ZXJ7Y29udGVudDonJztkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNHB4O2hlaWdodDoxNHB4O2JvcmRlcjoycHggc29saWQgdmFyKC0tYnJkMik7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1hY2MpO2JvcmRlci1yYWRpdXM6NTAlO2FuaW1hdGlvbjpzcGluIC43cyBsaW5lYXIgaW5maW5pdGU7bWFyZ2luLWxlZnQ6OHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KQGtleWZyYW1lcyBzcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19Ci5lbXB7cGFkZGluZzo0MHB4IDIwcHg7dGV4dC1hbGlnbjpjZW50ZXJ9Ci5laXtmb250LXNpemU6MzBweDttYXJnaW4tYm90dG9tOjEwcHg7b3BhY2l0eTouNH0KLmV0e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS10eDIpO21hcmdpbi1ib3R0b206NHB4fQouZXN7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjE0cHh9CgoucHJ7cGFkZGluZzoxMXB4IDE3cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvIGF1dG8gYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9Ci5wcjpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206bm9uZX0ucHI6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLnBue2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS10eCl9LnBte2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoxcHh9Ci5wdGFnc3tkaXNwbGF5OmZsZXg7Z2FwOjRweDttYXJnaW4tdG9wOjRweDtmbGV4LXdyYXA6d3JhcH0KLnRhZ3tmb250LXNpemU6MTBweDtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtd2VpZ2h0OjUwMH0KLnRhZy53ZWJ7YmFja2dyb3VuZDp2YXIoLS1iZGltKTtjb2xvcjp2YXIoLS1ibHUpfS50YWcuZGVzaWdue2JhY2tncm91bmQ6dmFyKC0tZ2xvdyk7Y29sb3I6dmFyKC0tYWNjMil9Ci50YWcuc2Vve2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6dmFyKC0tZ3JuKX0udGFnLnNvY2lhbHtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDExNCwxODIsLjEyKTtjb2xvcjojZjQ3MmI2fQoudGFnLmhvc3Rpbmd7YmFja2dyb3VuZDp2YXIoLS1hZGltKTtjb2xvcjp2YXIoLS1hbWIpfS50YWcucnVzaHtiYWNrZ3JvdW5kOnZhcigtLXJkaW0pO2NvbG9yOnZhcigtLXJlZCl9Ci5zcHtmb250LXNpemU6MTBweDtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtd2VpZ2h0OjUwMDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5zcC1he2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6dmFyKC0tZ3JuKX0uc3AtbntiYWNrZ3JvdW5kOnZhcigtLWJkaW0pO2NvbG9yOnZhcigtLWJsdSl9Ci5zcC1ye2JhY2tncm91bmQ6dmFyKC0tYWRpbSk7Y29sb3I6dmFyKC0tYW1iKX0uc3AtZHtiYWNrZ3JvdW5kOnJnYmEoMTI4LDEyOCwxMjgsLjEpO2NvbG9yOnZhcigtLXR4Myl9Ci5hbXR7dGV4dC1hbGlnbjpyaWdodDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5hdHtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Zm9udC1mYW1pbHk6dmFyKC0tbW8pO2NvbG9yOnZhcigtLXR4KX0KLmFye2ZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLWdybik7bWFyZ2luLXRvcDoxcHh9LmFwe2ZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLWFtYik7bWFyZ2luLXRvcDoxcHh9Ci5kbGN7dGV4dC1hbGlnbjpyaWdodDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5kbGR7Zm9udC1zaXplOjExcHg7Zm9udC1mYW1pbHk6dmFyKC0tbW8pO2NvbG9yOnZhcigtLXR4Mil9LmRsZC51e2NvbG9yOnZhcigtLXJlZCk7Zm9udC13ZWlnaHQ6NTAwfQouZGxue2ZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoxcHh9LmRsbi51e2NvbG9yOnZhcigtLXJlZCl9Ci5wYntoZWlnaHQ6M3B4O2JhY2tncm91bmQ6dmFyKC0tc3VyMyk7Ym9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXRvcDo1cHg7b3ZlcmZsb3c6aGlkZGVufQoucGJme2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6MnB4fQoKLmcye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDMwMHB4O2dhcDoxNnB4O21hcmdpbi1ib3R0b206MTZweH0KLmcze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnI7Z2FwOjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4fQouZzIye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTZweDttYXJnaW4tYm90dG9tOjE2cHh9CgoudGl7cGFkZGluZzo5cHggMTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDo5cHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9Ci50aTpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206bm9uZX0udGk6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLnRja3t3aWR0aDoxNXB4O2hlaWdodDoxNXB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkMik7ZmxleC1zaHJpbms6MDttYXJnaW4tdG9wOjFweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1zaXplOjlweH0KLnRjay5kb25le2JhY2tncm91bmQ6dmFyKC0tZ3JuKTtib3JkZXItY29sb3I6dmFyKC0tZ3JuKTtjb2xvcjojZmZmfQoudHR4e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4Mik7ZmxleDoxO2xpbmUtaGVpZ2h0OjEuNH0udHR4LmRvbmV7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDtjb2xvcjp2YXIoLS10eDMpfQoudGFzc3tmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS1hY2MyKTtiYWNrZ3JvdW5kOnZhcigtLWdsb3cpO3BhZGRpbmc6MnB4IDdweDtib3JkZXItcmFkaXVzOjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO2ZsZXgtc2hyaW5rOjB9Cgoubmkye3BhZGRpbmc6MTBweCAxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9Ci5uaTI6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9Lm5pMjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpfQoubnR7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KX0KLm5we2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoycHg7bGluZS1oZWlnaHQ6MS40O292ZXJmbG93OmhpZGRlbjtkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDoyOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbH0KLm5me2Rpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi10b3A6NHB4O2ZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4Myl9Ci5haXtwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7ZGlzcGxheTpmbGV4O2dhcDo5cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0KLmFpOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfQouYWF2e3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6NjAwO2ZsZXgtc2hyaW5rOjB9Ci5hdHh7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKTtsaW5lLWhlaWdodDoxLjQ7ZmxleDoxfS5hdHggc3Ryb25ne2NvbG9yOnZhcigtLXR4KTtmb250LXdlaWdodDo1MDB9Ci5hdG17Zm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjFweDtmb250LWZhbWlseTp2YXIoLS1tbyl9Ci5kbGl7cGFkZGluZzo5cHggMTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHh9Ci5kbGk6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9Ci5kbGQye3dpZHRoOjdweDtoZWlnaHQ6N3B4O2JvcmRlci1yYWRpdXM6NTAlO2ZsZXgtc2hyaW5rOjB9Ci5kbGlue2ZsZXg6MTttaW4td2lkdGg6MH0uZGxubXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tdHgpfS5kbG10e2ZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoxcHh9Ci5kbGJkZ3tmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7Zm9udC1mYW1pbHk6dmFyKC0tbW8pO3doaXRlLXNwYWNlOm5vd3JhcH0KLmRsYmRnLnV7Y29sb3I6dmFyKC0tcmVkKX0uZGxiZGcuc3tjb2xvcjp2YXIoLS1hbWIpfS5kbGJkZy5ve2NvbG9yOnZhcigtLWdybil9Ci5mcntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcn0KLmZyOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfQouZmx7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKX0uZnZ7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtZmFtaWx5OnZhcigtLW1vKX0KLmZ2Lmd7Y29sb3I6dmFyKC0tZ3JuKX0uZnYuYXtjb2xvcjp2YXIoLS1hbWIpfS5mdi5ye2NvbG9yOnZhcigtLXJlZCl9Ci5jaGlwc3tkaXNwbGF5OmZsZXg7Z2FwOjVweDtmbGV4LXdyYXA6d3JhcH0KLmNoaXB7Zm9udC1zaXplOjExcHg7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6MjBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Y29sb3I6dmFyKC0tdHgzKTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOm5vbmU7dHJhbnNpdGlvbjphbGwgLjE1c30KLmNoaXA6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWJyZDIpO2NvbG9yOnZhcigtLXR4Mil9LmNoaXAuYWN0aXZle2JhY2tncm91bmQ6dmFyKC0tZ2xvdyk7Ym9yZGVyLWNvbG9yOnJnYmEoMTA4LDk5LDI1NSwuMjUpO2NvbG9yOnZhcigtLWFjYzIpfQouaGd7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgyNjVweCwxZnIpKTtnYXA6MTNweH0KLmhjYXJke2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTVweH0KLmhjYXJkLndhcm57Ym9yZGVyLWNvbG9yOnZhcigtLWFtYil9Ci5oc3R7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjdweCA5cHh9Ci5oc2x7Zm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjJweH0uaHN2e2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS10eCl9Ci5zc2wtb2t7Y29sb3I6dmFyKC0tZ3JuKX0uc3NsLXdhcm57Y29sb3I6dmFyKC0tYW1iKX0uc3NsLWJhZHtjb2xvcjp2YXIoLS1yZWQpfQouY2d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgyNDVweCwxZnIpKTtnYXA6MTNweH0KLmNje2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTVweDtjdXJzb3I6cG9pbnRlcn0KLmNjOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1icmQyKX0KLnB3cntwYWRkaW5nOjExcHggMTdweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9Ci5wd3I6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0ucHdyOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfQoucHdze2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS10eCk7ZmxleDoxfQoucHd1e2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myl9Ci5wd217Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6dmFyKC0tbW8pO2NvbG9yOnZhcigtLXR4Myk7YmFja2dyb3VuZDp2YXIoLS1zdXIzKTtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6NnB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4xNXN9Ci5wd206aG92ZXJ7Y29sb3I6dmFyKC0tYWNjMik7YmFja2dyb3VuZDp2YXIoLS1nbG93KX0KLnB3dG9we3BhZGRpbmc6MTNweCAxN3B4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtmbGV4LXdyYXA6d3JhcH0KLnB3Z3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDI1MHB4LDFmcikpO2dhcDoxMnB4O3BhZGRpbmc6MTRweCAxN3B4fQoucHdjbGllbnR7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTRweDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmFsbCAuMTVzfQoucHdjbGllbnQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYyk7YmFja2dyb3VuZDp2YXIoLS1nbG93KX0KLnB3Y257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4KTttYXJnaW4tYm90dG9tOjNweH0KLnB3Y217Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTtsaW5lLWhlaWdodDoxLjQ1fQoucHdjc3RhdHtkaXNwbGF5OmZsZXg7Z2FwOjdweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tdG9wOjExcHh9Ci5wd2NoaXB7Zm9udC1zaXplOjEwcHg7cGFkZGluZzozcHggOHB4O2JvcmRlci1yYWRpdXM6MjBweDtiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2NvbG9yOnZhcigtLXR4Myl9Ci5wd2hlYWR7cGFkZGluZzoxM3B4IDE3cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwO2JhY2tncm91bmQ6dmFyKC0tc3VyMil9Ci5wd3RpdGxle2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10eCl9Ci5wd3N1Yntmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6MnB4fQoub3R7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Ci5vdCB0aHtmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDhlbTtwYWRkaW5nOjEwcHggMTVweDt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTtmb250LXdlaWdodDo1MDB9Ci5vdCB0ZHtwYWRkaW5nOjExcHggMTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4Mil9Ci5vdCB0cjpsYXN0LWNoaWxkIHRke2JvcmRlci1ib3R0b206bm9uZX0ub3QgdHI6aG92ZXIgdGR7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eCl9Ci5vYnRue2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmc6M3B4IDhweDtib3JkZXItcmFkaXVzOjVweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7YmFja2dyb3VuZDpub25lO2NvbG9yOnZhcigtLXR4Myk7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO3RyYW5zaXRpb246YWxsIC4xNXM7bWFyZ2luLXJpZ2h0OjRweH0KLm9idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eCl9Ci5yZ3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHh9Ci5icntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206OXB4fQouYnJse2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7d2lkdGg6MTEwcHg7ZmxleC1zaHJpbms6MH0KLmJydHtmbGV4OjE7aGVpZ2h0OjdweDtiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbn0KLmJyZntoZWlnaHQ6MTAwJTtib3JkZXItcmFkaXVzOjRweDt0cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlfQouYnJ2e2ZvbnQtc2l6ZToxMXB4O2ZvbnQtZmFtaWx5OnZhcigtLW1vKTtjb2xvcjp2YXIoLS10eDIpO21pbi13aWR0aDo3MHB4O3RleHQtYWxpZ246cmlnaHR9Ci51cntwYWRkaW5nOjEycHggMTdweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjE0cHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9Ci51cjpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206bm9uZX0udXI6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLnNpe2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6NnB4IDExcHg7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTJweDtvdXRsaW5lOm5vbmU7d2lkdGg6MTU1cHg7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjE1c30KLnNpOmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1hY2MpfQoubW9kZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDIzMHB4LDFmcikpO2dhcDoxMnB4O3BhZGRpbmc6MTZweH0KLm1vZGNhcmR7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTRweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4fQoubW9kbmFtZXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpfQoubW9kaGludHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6M3B4fQouc3d7d2lkdGg6NDRweDtoZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjMwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQyKTtiYWNrZ3JvdW5kOnZhcigtLXN1cjMpO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2ZsZXgtc2hyaW5rOjB9Ci5zdzpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6dmFyKC0tdHgzKTt0b3A6MnB4O2xlZnQ6M3B4O3RyYW5zaXRpb246LjE4c30KLnN3Lm9ue2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Ym9yZGVyLWNvbG9yOnJnYmEoMzQsMTk3LDk0LC4zNSl9Ci5zdy5vbjpiZWZvcmV7bGVmdDoyMXB4O2JhY2tncm91bmQ6dmFyKC0tZ3JuKX0KLmFkbWlubm90ZXttYXJnaW46MTZweDtwYWRkaW5nOjEycHggMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKTtsaW5lLWhlaWdodDoxLjV9Ci5jYWxne2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDMwMHB4O2dhcDoxOHB4O2FsaWduLWl0ZW1zOnN0YXJ0fQouY2FsZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg3LDFmcik7Z2FwOjNweH0KLmNhbGx7Zm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjVweCAwO2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Ci5jYWxkYXl7bWluLWhlaWdodDo2OHB4O2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czo3cHg7cGFkZGluZzo1cHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjE1cztvdmVyZmxvdzpoaWRkZW59Ci5jYWxkYXk6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYyk7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLmNhbGRheS50b2RheXtib3JkZXItY29sb3I6dmFyKC0tYWNjKTtiYWNrZ3JvdW5kOnZhcigtLWdsb3cpfQouY2FsZGF5Lm9te29wYWNpdHk6LjM7cG9pbnRlci1ldmVudHM6bm9uZX0KLmNhbGRheS5zZWx7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYzIpO2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMTY3LDEzOSwyNTAsLjIpfQouY2FsZG57Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4KTttYXJnaW4tYm90dG9tOjNweH0KLmNhbGRheS50b2RheSAuY2FsZG57Y29sb3I6dmFyKC0tYWNjMil9Ci5jYWxldntmb250LXNpemU6OXB4O3BhZGRpbmc6MXB4IDRweDtib3JkZXItcmFkaXVzOjNweDttYXJnaW4tYm90dG9tOjFweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7YmFja2dyb3VuZDp2YXIoLS1nbG93KTtjb2xvcjp2YXIoLS1hY2MyKX0KLm1ve2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNTUpO3otaW5kZXg6OTk5ODthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0KLm1vLm9wZW57ZGlzcGxheTpmbGV4fQoubWJveHtiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQyKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoyNHB4O3dpZHRoOjUyMHB4O21heC13aWR0aDo5NnZ3O21heC1oZWlnaHQ6OTB2aDtvdmVyZmxvdy15OmF1dG87YW5pbWF0aW9uOmZpIC4ycyBlYXNlO2JveC1zaGFkb3c6dmFyKC0tc2hkKX0KLm1ib3ggaDN7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NTAwO21hcmdpbi1ib3R0b206MTdweDtjb2xvcjp2YXIoLS10eCl9Ci5tZnttYXJnaW4tYm90dG9tOjExcHh9Lm1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjRweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA2ZW19Ci5tZiBpbnB1dCwubWYgc2VsZWN0LC5tZiB0ZXh0YXJlYXt3aWR0aDoxMDAlO2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OHB4IDEwcHg7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTJweDtvdXRsaW5lOm5vbmU7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjE1c30KLm1mIGlucHV0OmZvY3VzLC5tZiBzZWxlY3Q6Zm9jdXMsLm1mIHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1hY2MpfQoubWYgc2VsZWN0IG9wdGlvbntiYWNrZ3JvdW5kOnZhcigtLXN1cil9Ci5tZ3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjlweH0KLm1he2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW4tdG9wOjE2cHh9Ci50b2FzdHtwb3NpdGlvbjpmaXhlZDtib3R0b206MjJweDtyaWdodDoyMnB4O2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZDIpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEwcHggMTZweDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10eCk7ei1pbmRleDo5OTk5O2Rpc3BsYXk6bm9uZTthbmltYXRpb246c3UgLjNzIGVhc2U7Ym94LXNoYWRvdzp2YXIoLS1zaGQpfQoudG9hc3Quc2hvd3tkaXNwbGF5OmJsb2NrfS50b2FzdC5va3tib3JkZXItY29sb3I6dmFyKC0tZ3JuKTtjb2xvcjp2YXIoLS1ncm4pfS50b2FzdC5lcnJ7Ym9yZGVyLWNvbG9yOnZhcigtLXJlZCk7Y29sb3I6dmFyKC0tcmVkKX0KQGtleWZyYW1lcyBmaXtmcm9te29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSg4cHgpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX19CkBrZXlmcmFtZXMgc3V7ZnJvbXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMjBweCl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfX0KOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHh9Ojotd2Via2l0LXNjcm9sbGJhci10cmFja3tiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDp2YXIoLS1zdXIzKTtib3JkZXItcmFkaXVzOjJweH0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KCjxkaXYgY2xhc3M9Imx3IiBpZD0ibHciPgogIDxkaXYgY2xhc3M9ImxiIj4KICAgIDxpbWcgY2xhc3M9Imxsb2dvIiBzcmM9Imh0dHBzOi8vd2VidHJpeGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wNC93d3d3LnBuZyIgb25lcnJvcj0idGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJyIgYWx0PSIiPgogICAgPGRpdiBjbGFzcz0ibHRpdGxlIj5XZWJ0cml4aWEgSHViPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsc3ViIj7QktC70LXQt9GC0LUg0YEg0LLQsNGI0LjRjyDQsNC60LDRg9C90YI8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImFpbmQiIHN0eWxlPSJmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaDtnYXA6NnB4Ij4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCI+CiAgICAgIDxkaXYgY2xhc3M9ImFkb3QiIGlkPSJhZG90Ij48L2Rpdj4KICAgICAgPHNwYW4gaWQ9ImFzdHMiIHN0eWxlPSJmbGV4OjEiPtCh0LLRitGA0LfQstCwINGB0LUuLi48L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6NnB4Ij4KICAgICAgPGlucHV0IGlkPSJhcGlVcmxJbnB1dCIgcGxhY2Vob2xkZXI9Imh0dHBzOi8vLi4uIiBzdHlsZT0iZmxleDoxO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtZmFtaWx5OnZhcigtLW1vKTtjb2xvcjp2YXIoLS10eDMpIiBvbmtleWRvd249ImlmKGV2ZW50LmtleT09PSdFbnRlcicpY2hhbmdlQXBpKCkiPgogICAgICA8YnV0dG9uIG9uY2xpY2s9ImNoYW5nZUFwaSgpIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6NXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjKTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OnZhcigtLWZuKSI+0KHQvNC10L3QuDwvYnV0dG9uPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZiI+PGxhYmVsPtCf0L7RgtGA0LXQsdC40YLQtdC70YHQutC+INC40LzQtTwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJsdSIgcGxhY2Vob2xkZXI9ImFkbWluIiBvbmtleWRvd249ImlmKGV2ZW50LmtleT09PSdFbnRlcicpbG9naW4oKSI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZiI+PGxhYmVsPtCf0LDRgNC+0LvQsDwvbGFiZWw+PGlucHV0IHR5cGU9InBhc3N3b3JkIiBpZD0ibHAiIHBsYWNlaG9sZGVyPSLigKLigKLigKLigKLigKLigKLigKLigKIiIG9ua2V5ZG93bj0iaWYoZXZlbnQua2V5PT09J0VudGVyJylsb2dpbigpIj48L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImxidG4iIG9uY2xpY2s9ImxvZ2luKCkiPtCS0LvQtdC3IOKGkjwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibGVyciIgaWQ9ImxlcnIiPtCT0YDQtdGI0L3QviDQv9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQviDQuNC80LUg0LjQu9C4INC/0LDRgNC+0LvQsDwvZGl2PgogIDwvZGl2PgogIDxidXR0b24gY2xhc3M9InRidG4yIiBvbmNsaWNrPSJ0Z2woKSI+4piA77iPIC8g8J+MmSDQodC80LXQvdC4INGC0LXQvNCwPC9idXR0b24+CjwvZGl2PgoKPGFzaWRlIGNsYXNzPSJzYiIgaWQ9InNiIiBzdHlsZT0iZGlzcGxheTpub25lIj4KICA8ZGl2IGNsYXNzPSJzbG9nbyI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly93ZWJ0cml4aWEuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA0L3d3d3cucG5nIiBvbmVycm9yPSJ0aGlzLnN0eWxlLmRpc3BsYXk9J25vbmUnIiBzdHlsZT0iaGVpZ2h0OjI2cHgiIGFsdD0iIj4KICAgIDxkaXY+PGRpdiBjbGFzcz0ibHN1YjIiPkFnZW5jeTwvZGl2PjxkaXYgY2xhc3M9Imx2ZXIiPkh1YiB2NC4wPC9kaXY+PC9kaXY+CiAgPC9kaXY+CiAgPG5hdj4KICAgIDxkaXYgY2xhc3M9Im5zZWMiPtCe0YHQvdC+0LLQvdC+PC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSBhY3RpdmUiIG9uY2xpY2s9ImdvKCdkYXNoYm9hcmQnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7irKE8L3NwYW4+RGFzaGJvYXJkPC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9InByb2plY3RzIiBvbmNsaWNrPSJnbygncHJvamVjdHMnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7il4g8L3NwYW4+0J/RgNC+0LXQutGC0Lg8c3BhbiBjbGFzcz0ibmJhZGdlIGciIGlkPSJuYi1wIj4wPC9zcGFuPjwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJjbGllbnRzIiBvbmNsaWNrPSJnbygnY2xpZW50cycsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKXjjwvc3Bhbj7QmtC70LjQtdC90YLQuDwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJmaW5hbmNlIiBvbmNsaWNrPSJnbygnZmluYW5jZScsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKXhzwvc3Bhbj7QpNC40L3QsNC90YHQuDwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibnNlYyI+0KDQsNCx0L7RgtCwPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9InRhc2tzIiBvbmNsaWNrPSJnbygndGFza3MnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7ilrc8L3NwYW4+0JfQsNC00LDRh9C4PHNwYW4gY2xhc3M9Im5iYWRnZSIgaWQ9Im5iLXQiPjA8L3NwYW4+PC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9Im9mZmVycyIgb25jbGljaz0iZ28oJ29mZmVycycsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKXuzwvc3Bhbj7QntGE0LXRgNGC0Lg8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0iY29udHJhY3RzIiBvbmNsaWNrPSJnbygnY29udHJhY3RzJyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+4peIPC9zcGFuPtCU0L7Qs9C+0LLQvtGA0Lg8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0iYWlfc2NhbiIgb25jbGljaz0iZ28oJ2FpX3NjYW4nLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7ijIE8L3NwYW4+QUkg0YHQutCw0L3QuNGA0LDQvdC1PC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9ImNhbGVuZGFyIiBvbmNsaWNrPSJnbygnY2FsZW5kYXInLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7wn5OFPC9zcGFuPtCa0LDQu9C10L3QtNCw0YA8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0iaW52b2ljaW5nIiBvbmNsaWNrPSJ3aW5kb3cub3BlbignaW52b2ljZXMuaHRtbCcsJ19ibGFuaycpIj48c3BhbiBjbGFzcz0ibmljIj7wn6e+PC9zcGFuPtCk0LDQutGC0YPRgNC40YDQsNC90LU8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0iaHJfcmVxdWVzdHMiIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdoci5odG1sJywnX2JsYW5rJykiPjxzcGFuIGNsYXNzPSJuaWMiPvCfk4Q8L3NwYW4+0JzQvtC70LHQuDwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJ3YXliaWxscyIgb25jbGljaz0id2luZG93Lm9wZW4oJ3dheWJpbGxzLmh0bWwnLCdfYmxhbmsnKSI+PHNwYW4gY2xhc3M9Im5pYyI+8J+amjwvc3Bhbj7Qn9GK0YLQvdC4INC70LjRgdGC0L7QstC1PC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJuc2VjIj7QkNCz0LXQvdGG0LjRjzwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJob3N0aW5nIiBvbmNsaWNrPSJnbygnaG9zdGluZycsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKsoTwvc3Bhbj7QpdC+0YHRgtC40L3Qs9C4PHNwYW4gY2xhc3M9Im5iYWRnZSBhIiBpZD0ibmItaCI+MDwvc3Bhbj48L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0icGFzc3dvcmRzIiBvbmNsaWNrPSJnbygncGFzc3dvcmRzJyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+4peOPC9zcGFuPtCU0L7RgdGC0YrQv9C4PC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9Im5vdGVzIiBvbmNsaWNrPSJnbygnbm90ZXMnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7il7s8L3NwYW4+0JHQtdC70LXQttC60Lg8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0icmVwb3J0cyIgb25jbGljaz0iZ28oJ3JlcG9ydHMnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7ilrc8L3NwYW4+0J7RgtGH0LXRgtC4PC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJuc2VjIj7QldC60LjQvzwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJwcmVzZW5jZSIgb25jbGljaz0iZ28oJ3ByZXNlbmNlJyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+8J+fojwvc3Bhbj7Qn9GA0LjRgdGK0YHRgtCy0LjQtTwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJ0YXJnZXRzIiBvbmNsaWNrPSJnbygndGFyZ2V0cycsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPvCfjq88L3NwYW4+0KLQsNGA0LPQtdGC0Lg8L2J1dHRvbj4KICAgIDxkaXYgaWQ9ImFkbW5hdiIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CiAgICAgIDxkaXYgY2xhc3M9Im5zZWMiPtCQ0LTQvNC40L08L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJ3b3JrcmVwb3J0IiBvbmNsaWNrPSJnbygnd29ya3JlcG9ydCcsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKPsTwvc3Bhbj7QoNCw0LHQvtGC0LXQvSDRgNC40L/QvtGA0YI8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJ1c2VycyIgb25jbGljaz0iZ28oJ3VzZXJzJyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+8J+RpDwvc3Bhbj7Qn9C+0YLRgNC10LHQuNGC0LXQu9C4PC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0iYXVkaXQiIG9uY2xpY2s9ImdvKCdhdWRpdCcsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKXtzwvc3Bhbj5BdWRpdCBsb2c8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGlkPSJtb2R1bGVTZXR0aW5nc05hdiIgb25jbGljaz0iZ28oJ21vZHVsZXNfc2V0dGluZ3MnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7impk8L3NwYW4+0JzQvtC00YPQu9C4PC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9Im5pIiBpZD0ibGljZW5zZU5hdiIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgb25jbGljaz0ib3BlbkxpY2Vuc2VQYW5lbCgpIj48c3BhbiBjbGFzcz0ibmljIj7ilqM8L3NwYW4+0JvQuNGG0LXQvdC30Lg8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvbmF2PgogIDxkaXYgY2xhc3M9InNib3QiPgogICAgPGRpdiBjbGFzcz0ibnNlYyIgc3R5bGU9InBhZGRpbmctdG9wOjAiPtCV0LrQuNC/PC9kaXY+CiAgICA8ZGl2IGlkPSJ0bGlzdCI+PC9kaXY+CiAgPC9kaXY+CjwvYXNpZGU+Cgo8bWFpbiBjbGFzcz0ibWFpbiIgaWQ9ImFwcCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CiAgPGRpdiBjbGFzcz0idG9wYmFyIj4KICAgIDxkaXYgY2xhc3M9InR0bCIgaWQ9InB0aXRsZSI+RGFzaGJvYXJkPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJ0ZGF0ZSIgaWQ9InRkYXRlIj48L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9InRidG4iIG9uY2xpY2s9InRnbCgpIiBpZD0idGJ0biI+4piA77iPPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJ1YmRnIiBpZD0idWJkZyI+PC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9Im1vZGFsKCdwcm9qZWN0JykiPisg0J/RgNC+0LXQutGCPC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0id2luZG93Lm9wZW4oJ29mZmVyLmh0bWw/dHlwZT1vbmVfdGltZScsJ19ibGFuaycpIj7iipUg0J7RhNC10YDRgtCwPC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9Im91dCgpIiBzdHlsZT0icGFkZGluZzo2cHggMTBweCI+4oqXPC9idXR0b24+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29uIj4KCiAgICA8ZGl2IGlkPSJzZWMtZGFzaGJvYXJkIiBjbGFzcz0ic2VjIGFjdGl2ZSI+CiAgICAgIDxkaXYgY2xhc3M9ImtnIj4KICAgICAgICA8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCf0YDQvtC10LrRgtC4PC9kaXY+PGRpdiBjbGFzcz0ia3YgYWMiIGlkPSJrcCI+4oCUPC9kaXY+PGRpdiBjbGFzcz0ia3MiPtCw0LrRgtC40LLQvdC4PC9kaXY+PGRpdiBjbGFzcz0ia2cyIiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1hY2MpIj48L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCe0YTQtdGA0LjRgNCw0L3QvjwvZGl2PjxkaXYgY2xhc3M9Imt2IiBpZD0ia28iPuKAlDwvZGl2PjxkaXYgY2xhc3M9ImtzIj7QvtCx0YnQvjwvZGl2PjxkaXYgY2xhc3M9ImtnMiIgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmx1KSI+PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7Qn9C+0LvRg9GH0LXQvdC+PC9kaXY+PGRpdiBjbGFzcz0ia3YgZyIgaWQ9ImtyIj7igJQ8L2Rpdj48ZGl2IGNsYXNzPSJrcyI+0L/QvtGC0LLRitGA0LTQtdC90L48L2Rpdj48ZGl2IGNsYXNzPSJrZzIiIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWdybikiPjwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImtjIj48ZGl2IGNsYXNzPSJrbCI+0J7Rh9Cw0LrQstCwINGB0LU8L2Rpdj48ZGl2IGNsYXNzPSJrdiBhIiBpZD0ia3BuIj7igJQ8L2Rpdj48ZGl2IGNsYXNzPSJrcyI+0L3QtdC/0LvQsNGC0LXQvdC+PC9kaXY+PGRpdiBjbGFzcz0ia2cyIiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1hbWIpIj48L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCX0LDQtNCw0YfQuDwvZGl2PjxkaXYgY2xhc3M9Imt2IHIiIGlkPSJrdCI+4oCUPC9kaXY+PGRpdiBjbGFzcz0ia3MiPtC90LXQt9Cw0LLRitGA0YjQtdC90Lg8L2Rpdj48ZGl2IGNsYXNzPSJrZzIiIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLXJlZCkiPjwvZGl2PjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZzIiPgogICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCf0L7RgdC70LXQtNC90Lgg0L/RgNC+0LXQutGC0Lg8L2Rpdj48YnV0dG9uIGNsYXNzPSJwYSIgb25jbGljaz0iZ28oJ3Byb2plY3RzJyxudWxsKSI+0JLQuNC2INCy0YHQuNGH0LrQuDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9ImRwIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PgogICAgICAgIDxkaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7imqEg0KHRgNC+0LrQvtCy0LU8L2Rpdj48L2Rpdj48ZGl2IGlkPSJkZCI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPvCfkrAg0KTQuNC90LDQvdGB0Lg8L2Rpdj48L2Rpdj48ZGl2IGlkPSJkZiI+PC9kaXY+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJnMyI+CiAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+4pyTINCX0LDQtNCw0YfQuDwvZGl2PjxidXR0b24gY2xhc3M9InBhIiBvbmNsaWNrPSJtb2RhbCgndGFzaycpIj4rINCU0L7QsdCw0LLQuDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9ImR0Ij48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPvCfk4sg0JHQtdC70LXQttC60Lg8L2Rpdj48L2Rpdj48ZGl2IGlkPSJkbiI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7in7Mg0JDQutGC0LjQstC90L7RgdGCPC9kaXY+PC9kaXY+PGRpdiBpZD0iZGEiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ic2VjLXByb2plY3RzIiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7QktGB0LjRh9C60Lgg0L/RgNC+0LXQutGC0Lg8L2Rpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweCI+PGlucHV0IGNsYXNzPSJzaSIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9ItCi0YrRgNGB0LguLi4iIG9uaW5wdXQ9ImZwKHRoaXMudmFsdWUpIj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ibW9kYWwoJ3Byb2plY3QnKSI+KyDQndC+0LI8L2J1dHRvbj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJmcCI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy1jbGllbnRzIiBjbGFzcz0ic2VjIj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTRweCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4MykiIGlkPSJjcyI+4oCUPC9zcGFuPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJtb2RhbCgnY2xpZW50JykiPisg0J3QvtCyINC60LvQuNC10L3RgjwvYnV0dG9uPjwvZGl2PjxkaXYgY2xhc3M9ImNnIiBpZD0iY2ciPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtZmluYW5jZSIgY2xhc3M9InNlYyI+CiAgICAgIDxkaXYgY2xhc3M9ImtnIiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LDFmcik7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCe0LHQvtGA0L7RgiDQvtCx0YnQvjwvZGl2PjxkaXYgY2xhc3M9Imt2IGFjIiBpZD0iZnQiPuKAlDwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImtjIj48ZGl2IGNsYXNzPSJrbCI+0J/QvtC70YPRh9C10L3QvjwvZGl2PjxkaXYgY2xhc3M9Imt2IGciIGlkPSJmciI+4oCUPC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7QntGH0LDQutCy0LAg0YHQtTwvZGl2PjxkaXYgY2xhc3M9Imt2IGEiIGlkPSJmcG4iPuKAlDwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImtjIj48ZGl2IGNsYXNzPSJrbCI+0JDQsdC+0L3QsNC80LXQvdGC0Lgv0LzQtdGBPC9kaXY+PGRpdiBjbGFzcz0ia3YgZyIgaWQ9ImZzIj7igJQ8L2Rpdj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImcyMiI+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0J3QtdC/0LvQsNGC0LXQvdC4PC9kaXY+PC9kaXY+PGRpdiBpZD0iZnUiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCQ0LHQvtC90LDQvNC10L3RgtC4PC9kaXY+PC9kaXY+PGRpdiBpZD0iZnNsIj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ic2VjLXRhc2tzIiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7Ql9Cw0LTQsNGH0Lg8L2Rpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweCI+PGRpdiBjbGFzcz0iY2hpcHMiPjxkaXYgY2xhc3M9ImNoaXAgYWN0aXZlIiBvbmNsaWNrPSJjaGlwUyh0aGlzKSI+0JLRgdC40YfQutC4PC9kaXY+PGRpdiBjbGFzcz0iY2hpcCIgb25jbGljaz0iY2hpcFModGhpcykiPtCd0LXQt9Cw0LLRitGA0YjQtdC90Lg8L2Rpdj48ZGl2IGNsYXNzPSJjaGlwIiBvbmNsaWNrPSJjaGlwUyh0aGlzKSI+0KHQv9C10YjQvdC4PC9kaXY+PC9kaXY+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im1vZGFsKCd0YXNrJykiPisg0JfQsNC00LDRh9CwPC9idXR0b24+PC9kaXY+PC9kaXY+PGRpdiBpZD0idGYiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtb2ZmZXJzIiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7QntGE0LXRgNGC0Lg8L2Rpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcCI+PGlucHV0IGNsYXNzPSJzaSIgc3R5bGU9IndpZHRoOjIyMHB4IiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0i0KLRitGA0YHQuCDQvtGE0LXRgNGC0LAuLi4iIG9uaW5wdXQ9Ik9GLnE9dGhpcy52YWx1ZTtyT2ZmZXJzKCkiPjxzZWxlY3QgY2xhc3M9InNpIiBzdHlsZT0id2lkdGg6MTQ1cHgiIG9uY2hhbmdlPSJPRi5zdGF0dXM9dGhpcy52YWx1ZTtyT2ZmZXJzKCkiPjxvcHRpb24gdmFsdWU9IiI+0JLRgdC40YfQutC4PC9vcHRpb24+PG9wdGlvbj7Qp9Cw0LrQsNGJ0LA8L29wdGlvbj48b3B0aW9uPtCf0YDQuNC10YLQsDwvb3B0aW9uPjxvcHRpb24+0J7RgtC60LDQt9Cw0L3QsDwvb3B0aW9uPjwvc2VsZWN0PjxidXR0b24gY2xhc3M9ImJ0biBzIiBvbmNsaWNrPSJ3aW5kb3cub3Blbignb2ZmZXIuaHRtbD90eXBlPW1vbnRobHknLCdfYmxhbmsnKSI+KyDQnNC10YHQtdGH0L3QsDwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJ3aW5kb3cub3Blbignb2ZmZXIuaHRtbD90eXBlPW9uZV90aW1lJywnX2JsYW5rJykiPuKKlSDQndC+0LLQsCDQvtGE0LXRgNGC0LA8L2J1dHRvbj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJvZiI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy1jb250cmFjdHMiIGNsYXNzPSJzZWMiPjxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCU0L7Qs9C+0LLQvtGA0Lg8L2Rpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweCI+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im1vZGFsKCdjb250cmFjdCcpIj4rINCd0L7QsjwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0id2luZG93Lm9wZW4oJ2NvbnRyYWN0cy5odG1sJywnX2JsYW5rJykiPtCT0LXQvdC10YDQuNGA0LDQuSDQtNC+0LPQvtCy0L7RgDwvYnV0dG9uPjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImNmIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLWFpX3NjYW4iIGNsYXNzPSJzZWMiPjxkaXYgY2xhc3M9ImcyMiI+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2PjxkaXYgY2xhc3M9InB0Ij7ijIEgQUkg0YHQutCw0L3QuNGA0LDQvdC1INC90LAg0LTQvtC60YPQvNC10L3RgtC4PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweCI+0KHQutCw0L3QuNGA0LDQuSBRUiDRgSDRgtC10LvQtdGE0L7QvSDQuCDQutCw0YfQuCDRgdC90LjQvNC60LAvUERGINC00LjRgNC10LrRgtC90L4g0LIgSHViLjwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwIj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImNyZWF0ZUFpUXIoKSI+UVIg0LfQsCDRgtC10LvQtdGE0L7QvTwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0icmVmcmVzaEFpU2NhbnMoKSI+0J7QsdC90L7QstC4PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im1vZGFsKCdhaVNjYW4nKSI+KyDQoNGK0YfQtdC9IHNjYW48L2J1dHRvbj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJhaXFyIiBzdHlsZT0iZGlzcGxheTpub25lO3BhZGRpbmc6MTZweCAxN3B4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCkiPjwvZGl2PjxkaXYgaWQ9ImFpbCI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7QmtCw0Log0YDQsNCx0L7RgtC4PC9kaXY+PC9kaXY+PGRpdiBzdHlsZT0icGFkZGluZzoxNXB4IDE3cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKTtsaW5lLWhlaWdodDoxLjgiPjxiIHN0eWxlPSJjb2xvcjp2YXIoLS10eCkiPjEuPC9iPiDQndCw0YLQuNGB0L3QuCDigJ5RUiDQt9CwINGC0LXQu9C10YTQvtC94oCcINC4INGB0LrQsNC90LjRgNCw0Lkg0LrQvtC00LAuPGJyPjxiIHN0eWxlPSJjb2xvcjp2YXIoLS10eCkiPjIuPC9iPiDQntGCINGC0LXQu9C10YTQvtC90LAg0LrQsNGH0Lgg0YHQvdC40LzQutCwINC40LvQuCBQREYuPGJyPjxiIHN0eWxlPSJjb2xvcjp2YXIoLS10eCkiPjMuPC9iPiBIdWIg0L/QsNC30Lgg0L7RgNC40LPQuNC90LDQu9CwINC4INC+0YLQstCw0YDRjyDigJ7QlNC40LPQuNGC0LDQu9C10L0g0LTQvtC60YPQvNC10L3RguKAnCAtINGH0LjRgdGC0LAg0YTQvtGA0LzQsCDRgSDRgtCw0LHQu9C40YbQuCDQuCDQv9C+0LvQtdGC0LAg0L7RgiDRgNCw0LfQv9C+0LfQvdCw0YLQuNGC0LUg0LTQsNC90L3QuCwg0LPQvtGC0L7QstCwINC30LAg0YDQtdC00LDQutGG0LjRjyDQuCDQv9C10YfQsNGCLjxicj48YnI+PGIgc3R5bGU9ImNvbG9yOnZhcigtLXR4KSI+0KDQsNC30L/QvtC30L3QsNCy0LA6PC9iPiDQvdC+0LzQtdGALCDQtNCw0YLQsCwg0JXQmNCaL1ZBVCwg0LrQu9C40LXQvdGCLCDQtNC+0YHRgtCw0LLRh9C40LosINGB0YPQvNCwLCDQstCw0LvRg9GC0LAsIElCQU4sINGA0LXQtNC+0LLQtSDQuCDQvtC/0LjRgdCw0L3QuNC1LjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLWNhbGVuZGFyIiBjbGFzcz0ic2VjIj48ZGl2IGlkPSJjYWxmIj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy1ob3N0aW5nIiBjbGFzcz0ic2VjIj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTRweCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4MykiIGlkPSJocyI+4oCUPC9zcGFuPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJtb2RhbCgnaG9zdGluZycpIj4rINCd0L7QsiDRhdC+0YHRgtC40L3QszwvYnV0dG9uPjwvZGl2PjxkaXYgY2xhc3M9ImhnIiBpZD0iaGciPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtcGFzc3dvcmRzIiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXY+PGRpdiBjbGFzcz0icHQiPvCflJAg0JTQvtGB0YLRitC/0Lgg0L/QviDQutC70LjQtdC90YLQuDwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoycHgiPtCi0YrRgNGB0Lgg0LrQu9C40LXQvdGCLCDQvtGC0LLQvtGA0Lgg0LPQviDQuCDQstC40LYg0YHQsNC80L4g0L3QtdCz0L7QstC40YLQtSDQtNC+0YHRgtGK0L/QuC48L2Rpdj48L2Rpdj48YnV0dG9uIGNsYXNzPSJidG4gcCIgaWQ9InB3QWRkVG9wIiBvbmNsaWNrPSJvcGVuUGFzc01vZGFsKCkiPisg0JTQvtCx0LDQstC4INC00L7RgdGC0YrQvzwvYnV0dG9uPjwvZGl2PjxkaXYgY2xhc3M9InB3dG9wIj48aW5wdXQgY2xhc3M9InNpIiBpZD0icHdTZWFyY2giIHN0eWxlPSJ3aWR0aDoyNjBweCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9ItCi0YrRgNGB0Lgg0LrQu9C40LXQvdGCLi4uIiBvbmlucHV0PSJQVy5zZWFyY2g9dGhpcy52YWx1ZTtyUGFzc3dvcmRzKCkiPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iUFcuY2xpZW50PScnO1BXLnNlYXJjaD0nJzt2YXIgcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHdTZWFyY2gnKTtpZihzKXMudmFsdWU9Jyc7clBhc3N3b3JkcygpIj7QktGB0LjRh9C60Lgg0LrQu9C40LXQvdGC0Lg8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJwd2wiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtbm90ZXMiIGNsYXNzPSJzZWMiPjxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNHB4Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgzKSI+0JHQtdC70LXQttC60Lg8L3NwYW4+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im1vZGFsKCdub3RlJykiPisg0J3QvtCy0LA8L2J1dHRvbj48L2Rpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE0cHgiIGlkPSJuZyI+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtcmVwb3J0cyIgY2xhc3M9InNlYyI+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2PjxkaXYgY2xhc3M9InB0Ij7QkdC40LfQvdC10YEg0L7RgtGH0LXRgjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoycHgiPtCe0YTQtdGA0YLQuCwg0YTQsNC60YLRg9GA0LgsINC/0YDQuNGB0YrRgdGC0LLQuNC1INC4INC90LDRgtC+0LLQsNGA0LLQsNC90LUuPC9kaXY+PC9kaXY+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJyUmVwb3J0cygpIj7QntCx0L3QvtCy0Lg8L2J1dHRvbj48L2Rpdj48ZGl2IHN0eWxlPSJwYWRkaW5nOjE1cHggMTdweCIgaWQ9InJiaXoiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icmciPjxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCf0YDQuNGF0L7QtNC4INC/0L4g0LzQtdGB0LXRhtC4PC9kaXY+PC9kaXY+PGRpdiBzdHlsZT0icGFkZGluZzoxNXB4IDE3cHgiIGlkPSJyciI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0J/QviDRgtC40L8g0YPRgdC70YPQs9CwPC9kaXY+PC9kaXY+PGRpdiBzdHlsZT0icGFkZGluZzoxNXB4IDE3cHgiIGlkPSJycyI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0KLQvtC/INC60LvQuNC10L3RgtC4PC9kaXY+PC9kaXY+PGRpdiBzdHlsZT0icGFkZGluZzoxNXB4IDE3cHgiIGlkPSJyYyI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0J3QsNGC0L7QstCw0YDQstCw0L3QtSDQtdC60LjQvzwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9InBhZGRpbmc6MTVweCAxN3B4IiBpZD0icnQiPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLXByZXNlbmNlIiBjbGFzcz0ic2VjIj48ZGl2IGlkPSJwcmVmIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLXRhcmdldHMiIGNsYXNzPSJzZWMiPjxkaXYgaWQ9InRnZiI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy13b3JrcmVwb3J0IiBjbGFzcz0ic2VjIj48ZGl2IGlkPSJ3cmYiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+CgogICAgPGRpdiBpZD0ic2VjLXVzZXJzIiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7wn5GkINCf0L7RgtGA0LXQsdC40YLQtdC70Lg8L2Rpdj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ibW9kYWwoJ25ld1VzZXInKSI+KyDQndC+0LIg0YHQu9GD0LbQuNGC0LXQuzwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9InVsIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLWF1ZGl0IiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXY+PGRpdiBjbGFzcz0icHQiPuKXtyBBdWRpdCBsb2c8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6MnB4Ij7QmtC+0Lkg0LrQsNC60LLQviDQtSDQv9GA0L7QvNC10L3QuNC7LCDQuNC30YLRgNC40Lsg0LjQu9C4INCy0LjQtNGP0Lsg0LIg0YfRg9Cy0YHRgtCy0LjRgtC10LvQvdC40YLQtSDQvNC+0LTRg9C70LguPC9kaXY+PC9kaXY+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJyQXVkaXQoKSI+0J7QsdC90L7QstC4PC9idXR0b24+PC9kaXY+PGRpdiBpZD0iYXVkIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLW1vZHVsZXNfc2V0dGluZ3MiIGNsYXNzPSJzZWMiPjxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdj48ZGl2IGNsYXNzPSJwdCI+0JzQvtC00YPQu9C4INCyINGC0L7Qt9C4INGF0YrQsTwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoycHgiPtCQ0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0YrRgiDQvNC+0LbQtSDQtNCwINGB0LrRgNC40LLQsCDRhNGD0L3QutGG0LjQuCDQvtGCINC70Y/QstC+0YLQviDQvNC10L3RjiDRgdC/0L7RgNC10LQg0LrQu9C40LXQvdGC0LAuPC9kaXY+PC9kaXY+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJyTW9kdWxlcygpIj7QntCx0L3QvtCy0Lg8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJtb2RsaXN0Ij48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgoKICA8L2Rpdj4KPC9tYWluPgoKPGRpdiBjbGFzcz0ibW8iIGlkPSJtbyIgb25jbGljaz0iaWYoZXZlbnQudGFyZ2V0PT09dGhpcyljbW8oKSI+PGRpdiBjbGFzcz0ibWJveCIgaWQ9Im1iIj48L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0idG9hc3QiIGlkPSJ0b2FzdCI+PC9kaXY+Cgo8c2NyaXB0PgondXNlIHN0cmljdCc7CnZhciBBUEk9KGZ1bmN0aW9uKCl7CiAgdmFyIGJhc2U9d2luZG93LmxvY2F0aW9uLm9yaWdpbit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvaW5kZXhcLmh0bWwkLywnJykucmVwbGFjZSgvXC8kLywnJyk7CiAgdmFyIG93bj1iYXNlKycvYXBpLnBocCc7CiAgdmFyIHNhdmVkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3dF9hcGknKTsKICBpZihzYXZlZCl7CiAgICB0cnl7CiAgICAgIHZhciB1PW5ldyBVUkwoc2F2ZWQsd2luZG93LmxvY2F0aW9uLmhyZWYpOwogICAgICBpZih1Lm9yaWdpbj09PXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pcmV0dXJuIHNhdmVkOwogICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnd3RfYXBpJyk7CiAgICB9Y2F0Y2goZSl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3d0X2FwaScpO30KICB9CiAgcmV0dXJuIG93bjsKfSkoKTsKdmFyIENVPW51bGw7CnZhciBEPXtwcm9qZWN0czpbXSx0YXNrczpbXSxub3RlczpbXSxjbGllbnRzOltdLGhvc3Rpbmc6W10scGFzc3dvcmRzOltdLG9mZmVyczpbXSxjb250cmFjdHM6W10sdXNlcnM6W10sYWN0aXZpdHk6W10sYWlfc2NhbnM6W10sYXVkaXRfbG9nOltdfTsKdmFyIFBXPXtjbGllbnQ6Jycsc2VhcmNoOicnLGZvcm1DbGllbnQ6Jyd9Owp2YXIgT0Y9e3E6Jycsc3RhdHVzOicnfTsKdmFyIGFpUXJQb2xsPW51bGw7CnZhciBtb2R1bGVXYXRjaFN0YXJ0ZWQ9ZmFsc2U7CnZhciBsaWNlbnNlU3luY0J1c3k9ZmFsc2U7CnZhciBIVUJfTElDRU5TRV9ST0xFPSdjbGllbnQnOwp2YXIgTU9EVUxFX0xBQkVMUz17CiAgcHJvamVjdHM6J9Cf0YDQvtC10LrRgtC4JyxjbGllbnRzOifQmtC70LjQtdC90YLQuCcsZmluYW5jZTon0KTQuNC90LDQvdGB0LgnLHRhc2tzOifQl9Cw0LTQsNGH0LgnLG9mZmVyczon0J7RhNC10YDRgtC4Jyxjb250cmFjdHM6J9CU0L7Qs9C+0LLQvtGA0LgnLAogIGNhbGVuZGFyOifQmtCw0LvQtdC90LTQsNGAJyxhaV9zY2FuOidBSSDRgdC60LDQvdC40YDQsNC90LUnLGludm9pY2luZzon0KTQsNC60YLRg9GA0LjRgNCw0L3QtScsaHJfcmVxdWVzdHM6J9Cc0L7Qu9Cx0LgnLHdheWJpbGxzOifQn9GK0YLQvdC4INC70LjRgdGC0L7QstC1JywKICBob3N0aW5nOifQpdC+0YHRgtC40L3Qs9C4JyxwYXNzd29yZHM6J9CU0L7RgdGC0YrQv9C4Jyxub3Rlczon0JHQtdC70LXQttC60LgnLHJlcG9ydHM6J9Ce0YLRh9C10YLQuCcscHJlc2VuY2U6J9Cf0YDQuNGB0YrRgdGC0LLQuNC1Jyx0YXJnZXRzOifQotCw0YDQs9C10YLQuCcsCiAgd29ya3JlcG9ydDon0KDQsNCx0L7RgtC10L0g0YDQuNC/0L7RgNGCJyx1c2Vyczon0J/QvtGC0YDQtdCx0LjRgtC10LvQuCcsYXVkaXQ6J0F1ZGl0IGxvZycKfTsKdmFyIEFCRz17J2F2LXAnOidyZ2JhKDEwOCw5OSwyNTUsLjI1KScsJ2F2LXQnOidyZ2JhKDIwLDE4NCwxNjYsLjI1KScsJ2F2LWcnOidyZ2JhKDM0LDE5Nyw5NCwuMiknLCdhdi1hJzoncmdiYSgyNDUsMTU4LDExLC4yKScsJ2F2LXInOidyZ2JhKDIzOSw2OCw2OCwuMiknLCdhdi1iJzoncmdiYSg1NiwxODksMjQ4LC4yKSd9Owp2YXIgQUNWPXsnYXYtcCc6JyNhNzhiZmEnLCdhdi10JzonIzJkZDRiZicsJ2F2LWcnOicjMjJjNTVlJywnYXYtYSc6JyNmNTllMGInLCdhdi1yJzonI2VmNDQ0NCcsJ2F2LWInOicjMzhiZGY4J307CgovLyDilIDilIAgVEhFTUUg4pSA4pSACmZ1bmN0aW9uIHRnbCgpewogIHZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnKTsKICB2YXIgbj1jPT09J2RhcmsnPydsaWdodCc6J2RhcmsnOwogIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnLG4pOwogIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd3dF90aGVtZScsbik7CiAgdmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RidG4nKTsKICBpZihiKWIudGV4dENvbnRlbnQ9bj09PSdkYXJrJz8n4piA77iPJzon8J+MmSc7Cn0KKGZ1bmN0aW9uKCl7CiAgdmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RidG4nKTsKICB2YXIgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJyk7CiAgaWYoYiliLnRleHRDb250ZW50PXQ9PT0nZGFyayc/J+KYgO+4jyc6J/CfjJknOwp9KSgpOwoKLy8g4pSA4pSAIEFQSSDilIDilIAKYXN5bmMgZnVuY3Rpb24gYWYoYWN0aW9uLG1ldGhvZCxib2R5LGV4dHJhKXsKICBtZXRob2Q9bWV0aG9kfHwnR0VUJztleHRyYT1leHRyYXx8Jyc7CiAgdHJ5ewogICAgdmFyIG89e21ldGhvZDptZXRob2QsaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb24nfSxjcmVkZW50aWFsczonc2FtZS1vcmlnaW4nfTsKICAgIGlmKGJvZHkpby5ib2R5PUpTT04uc3RyaW5naWZ5KGJvZHkpOwogICAgdmFyIHI9YXdhaXQgZmV0Y2goQVBJKyc/YWN0aW9uPScrYWN0aW9uK2V4dHJhLG8pOwogICAgdmFyIGo9YXdhaXQgci5qc29uKCk7CiAgICBpZighci5vayl7CiAgICAgIGlmKHIuc3RhdHVzPT09NDAyKSByZW5kZXJMaWNlbnNlTG9jaygoaiYmai5tZXNzYWdlKXx8KGomJmoubGljZW5zZSYmai5saWNlbnNlLm1lc3NhZ2UpfHwn0JvQuNGG0LXQvdC30YrRgiDQvdC1INC1INCw0LrRgtC40LLQtdC9LicpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBqLm9rP2ouZGF0YTpudWxsOwogIH1jYXRjaChlKXtjb25zb2xlLmVycm9yKGFjdGlvbixlLm1lc3NhZ2UpO3JldHVybiBudWxsO30KfQoKLy8g4pSA4pSAIFZFUklGWSDilIDilIAKKGFzeW5jIGZ1bmN0aW9uKCl7CiAgdmFyIGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Fkb3QnKTsKICB2YXIgcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXN0cycpOwogIHZhciByPWF3YWl0IGFmKCdzdGF0cycpOwogIGlmKHIhPT1udWxsKXsKICAgIGQuY2xhc3NOYW1lPSdhZG90IG9rJzsKICAgIHMudGV4dENvbnRlbnQ9J+KckyDQodCy0YrRgNC30LDQvdC+IOKAlCDQstC70LXQt9GC0LUnOwogICAgcy5zdHlsZS5jb2xvcj0nIzIyYzU1ZSc7CiAgICB2YXIgaW5wPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcGlVcmxJbnB1dCcpOwogICAgaWYoaW5wKWlucC52YWx1ZT1BUEk7CiAgfWVsc2V7CiAgICBkLmNsYXNzTmFtZT0nYWRvdCBlcnInOwogICAgcy50ZXh0Q29udGVudD0n4pyXINCd0Y/QvNCwINCy0YDRitC30LrQsCDigJQg0LLRitCy0LXQtNC4INC/0YDQsNCy0LjQu9C90LjRjyBVUkwnOwogICAgcy5zdHlsZS5jb2xvcj0nI2VmNDQ0NCc7CiAgICB2YXIgaW5wPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcGlVcmxJbnB1dCcpOwogICAgaWYoaW5wKWlucC52YWx1ZT1BUEk7CiAgfQp9KSgpOwoKLy8g4pSA4pSAIENIQU5HRSBBUEkg4pSA4pSACmZ1bmN0aW9uIGNoYW5nZUFwaSgpewogIHZhciBpbnA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwaVVybElucHV0Jyk7CiAgaWYoIWlucHx8IWlucC52YWx1ZS50cmltKCkpcmV0dXJuOwogIHZhciB1cmw9aW5wLnZhbHVlLnRyaW0oKTsKICBpZighdXJsLmVuZHNXaXRoKCcucGhwJykpdXJsPXVybC5yZXBsYWNlKC9cLyQvLCcnKSsnL2FwaS5waHAnOwogIEFQST11cmw7CiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3d0X2FwaScsdXJsKTsKICB2ZXJpZnlBcGkoKTsKfQoKLy8g4pSA4pSAIFNFU1NJT04g4pSA4pSACihmdW5jdGlvbigpewogIHRyeXsKICAgIHZhciBzPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3d0X3MnKTsKICAgIGlmKHMpe3ZhciB1PUpTT04ucGFyc2Uocyk7aWYodSYmdS5pZClzaG93QXBwKHUpO30KICB9Y2F0Y2goZSl7c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnd3RfcycpO30KfSkoKTsKCi8vIOKUgOKUgCBMT0dJTiDilIDilIAKYXN5bmMgZnVuY3Rpb24gbG9naW4oKXsKICB2YXIgdT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbHUnKS52YWx1ZS50cmltKCk7CiAgdmFyIHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xwJykudmFsdWU7CiAgaWYoIXV8fCFwKXtzZXJyKCfQn9C+0L/RitC70L3QtdGC0LUg0LLRgdC40YfQutC4INC/0L7Qu9C10YLQsCcpO3JldHVybjt9CiAgdmFyIHI9YXdhaXQgYWYoJ2xvZ2luJywnUE9TVCcse3VzZXJuYW1lOnUscGFzc3dvcmQ6cH0pOwogIGlmKHIpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3d0X3MnLEpTT04uc3RyaW5naWZ5KHIpKTtzaG93QXBwKHIpO30KICBlbHNle3NlcnIoJ9CT0YDQtdGI0L3QviDQv9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQviDQuNC80LUg0LjQu9C4INC/0LDRgNC+0LvQsCcpO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdscCcpLnZhbHVlPScnO30KfQpmdW5jdGlvbiBzZXJyKG0pewogIHZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsZXJyJyk7ZS50ZXh0Q29udGVudD1tO2Uuc3R5bGUuZGlzcGxheT0nYmxvY2snOwogIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9J25vbmUnO30sMzAwMCk7Cn0KZnVuY3Rpb24gc2hvd0FwcCh1KXsKICBDVT11OwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsdycpLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYicpLnN0eWxlLmRpc3BsYXk9J2ZsZXgnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHAnKS5zdHlsZS5kaXNwbGF5PSdmbGV4JzsKICBpZih1LmlzX2FkbWluPT0xKWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZG1uYXYnKS5zdHlsZS5kaXNwbGF5PSdibG9jayc7CiAgdmFyIHB3QWRkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwd0FkZFRvcCcpOyBpZihwd0FkZCkgcHdBZGQuc3R5bGUuZGlzcGxheT11LmlzX2FkbWluPT0xPycnOidub25lJzsKICB2YXIgY29sPXUuY29sb3J8fCdhdi1wJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndWJkZycpLmlubmVySFRNTD0nPGRpdiBzdHlsZT0id2lkdGg6MjJweDtoZWlnaHQ6MjJweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOicrQUJHW2NvbF0rJztjb2xvcjonK0FDVltjb2xdKyc7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6NzAwIj4nKyh1LmluaXRpYWxzfHwnPycpKyc8L2Rpdj48c3Bhbj4nK3UubmFtZSsnPC9zcGFuPicrKHUuaXNfYWRtaW49PTE/JzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjojZjU5ZTBiIj7wn5GRPC9zcGFuPic6JycpOwogIGluaXRBcHAoKTsKICBzdGFydE1vZHVsZVdhdGNoKCk7Cn0KZnVuY3Rpb24gb3V0KCl7CiAgQ1U9bnVsbDtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd3dF9zJyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2x3Jykuc3R5bGUuZGlzcGxheT0nZmxleCc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NiJykuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcpLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsdScpLnZhbHVlPScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdscCcpLnZhbHVlPScnOwp9CgovLyDilIDilIAgSU5JVCDilIDilIAKZnVuY3Rpb24gaW5pdEFwcCgpewogIHZhciBkPW5ldyBEYXRlKCk7CiAgdmFyIGRheXM9WyfQndC10LTQtdC70Y8nLCfQn9C+0L3QtdC00LXQu9C90LjQuicsJ9CS0YLQvtGA0L3QuNC6Jywn0KHRgNGP0LTQsCcsJ9Cn0LXRgtCy0YrRgNGC0YrQuicsJ9Cf0LXRgtGK0LonLCfQodGK0LHQvtGC0LAnXTsKICB2YXIgbW9ucz1bJ9GP0L3RgycsJ9GE0LXQsicsJ9C80LDRgCcsJ9Cw0L/RgCcsJ9C80LDQuScsJ9GO0L3QuCcsJ9GO0LvQuCcsJ9Cw0LLQsycsJ9GB0LXQvycsJ9C+0LrRgicsJ9C90L7QtScsJ9C00LXQuiddOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZGF0ZScpLnRleHRDb250ZW50PWRheXNbZC5nZXREYXkoKV0rJywgJytkLmdldERhdGUoKSsnICcrbW9uc1tkLmdldE1vbnRoKCldKycgJytkLmdldEZ1bGxZZWFyKCk7CiAgdmFyIHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10aGVtZScpOwogIHZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YnRuJyk7aWYoYiliLnRleHRDb250ZW50PXQ9PT0nZGFyayc/J+KYgO+4jyc6J/CfjJknOwogIHJlZnJlc2hMaWNlbnNlQW5kTW9kdWxlcygpLnRoZW4oZnVuY3Rpb24ob2speyBpZihvayE9PWZhbHNlKSBsb2FkQWxsKCk7IH0pOwp9CgovLyDilIDilIAgTU9EVUxFIFZJU0lCSUxJVFkgKHJlc3BlY3RzIHJlbW90ZSB0b2dnbGVzIGZyb20gd19hZG1pbi5waHAgLyBtYXN0ZXIgaHViKSDilIDilIAKYXN5bmMgZnVuY3Rpb24gYXBwbHlNb2R1bGVWaXNpYmlsaXR5KCl7CiAgdHJ5ewogICAgdmFyIHI9YXdhaXQgYWYoJ2JyYW5kaW5nX3NldHRpbmdzJyk7CiAgICBpZighcnx8IXIubW9kdWxlc19lbmFibGVkKXJldHVybjsKICAgIGlmKHIubGljZW5zZV9zdGF0ZT09PSdsb2NrZWQnfHxyLmxpY2Vuc2Vfc3RhdGU9PT0naW52YWxpZCcpewogICAgICByZW5kZXJMaWNlbnNlTG9jayhyLmxpY2Vuc2VfbWVzc2FnZXx8J9Cb0LjRhtC10L3Qt9GK0YIg0L3QtSDQtSDQsNC60YLQuNCy0LXQvS4nKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIG1vZHM9ci5tb2R1bGVzX2VuYWJsZWQ7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb2R1bGVdJykuZm9yRWFjaChmdW5jdGlvbihlbCl7CiAgICAgIHZhciBrZXk9ZWwuZ2V0QXR0cmlidXRlKCdkYXRhLW1vZHVsZScpOwogICAgICBpZihtb2RzLmhhc093blByb3BlcnR5KGtleSkgJiYgIW1vZHNba2V5XSkgZWwuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgICAgIGVsc2UgZWwuc3R5bGUuZGlzcGxheT0nJzsKICAgIH0pOwogICAgaWYoci5wcm9kdWN0X25hbWUpewogICAgICB2YXIgbHN1Yj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubHN1YjInKTsKICAgICAgaWYobHN1YikgbHN1Yi50ZXh0Q29udGVudD1yLnByb2R1Y3RfbmFtZS50b1VwcGVyQ2FzZSgpOwogICAgfQoJICAgIHZhciBsbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGljZW5zZU5hdicpOwoJICAgIEhVQl9MSUNFTlNFX1JPTEU9ci5saWNlbnNlX3JvbGV8fCdjbGllbnQnOwoJICAgIGlmKGxuKSBsbi5zdHlsZS5kaXNwbGF5PShDVSYmQ1UuaXNfYWRtaW49PTEmJnIubGljZW5zZV9yb2xlPT09J21hc3RlcicpPycnOidub25lJzsKCSAgICB2YXIgbW49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZHVsZVNldHRpbmdzTmF2Jyk7CgkgICAgaWYobW4pIG1uLnN0eWxlLmRpc3BsYXk9KENVJiZDVS5pc19hZG1pbj09MSYmci5saWNlbnNlX3JvbGU9PT0nbWFzdGVyJyk/Jyc6J25vbmUnOwogICAgcmV0dXJuIHRydWU7CiAgfWNhdGNoKGUpe30KfQphc3luYyBmdW5jdGlvbiBzeW5jTGljZW5zZUZyb21NYXN0ZXIoKXsKICBpZihsaWNlbnNlU3luY0J1c3kpcmV0dXJuOwogIGxpY2Vuc2VTeW5jQnVzeT10cnVlOwogIHRyeXsKICAgIHZhciBjZmc9YXdhaXQgYWYoJ2xpY2Vuc2VfY2xpZW50X2NvbmZpZycpOwogICAgaWYoIWNmZ3x8IWNmZy52ZXJpZnlfdXJsKXJldHVybjsKICAgIHZhciBycj1hd2FpdCBmZXRjaChjZmcudmVyaWZ5X3VybCx7Y2FjaGU6J25vLXN0b3JlJyxtb2RlOidjb3JzJ30pOwogICAgdmFyIHBheWxvYWQ9YXdhaXQgcnIuanNvbigpOwogICAgaWYocGF5bG9hZCYmcGF5bG9hZC5zdGF0ZSkgYXdhaXQgYWYoJ2xpY2Vuc2Vfc3luYycsJ1BPU1QnLHtwYXlsb2FkOnBheWxvYWR9KTsKICB9Y2F0Y2goZSl7CiAgICBjb25zb2xlLndhcm4oJ2xpY2Vuc2Ugc3luYycsZS5tZXNzYWdlKTsKICB9ZmluYWxseXsKICAgIGxpY2Vuc2VTeW5jQnVzeT1mYWxzZTsKICB9Cn0KYXN5bmMgZnVuY3Rpb24gcmVmcmVzaExpY2Vuc2VBbmRNb2R1bGVzKCl7CiAgYXdhaXQgc3luY0xpY2Vuc2VGcm9tTWFzdGVyKCk7CiAgcmV0dXJuIGF3YWl0IGFwcGx5TW9kdWxlVmlzaWJpbGl0eSgpOwp9CmZ1bmN0aW9uIHN0YXJ0TW9kdWxlV2F0Y2goKXsKICBpZihtb2R1bGVXYXRjaFN0YXJ0ZWQpcmV0dXJuOwogIG1vZHVsZVdhdGNoU3RhcnRlZD10cnVlOwogIHNldEludGVydmFsKGZ1bmN0aW9uKCl7IGlmKENVKSByZWZyZXNoTGljZW5zZUFuZE1vZHVsZXMoKTsgfSw2MDAwKTsKICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLGZ1bmN0aW9uKCl7IGlmKENVKSByZWZyZXNoTGljZW5zZUFuZE1vZHVsZXMoKTsgfSk7Cn0KZnVuY3Rpb24gcmVuZGVyTGljZW5zZUxvY2sobXNnKXsKICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWluLWhlaWdodDoxMDB2aDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4O2JhY2tncm91bmQ6IzBhMGExMjtjb2xvcjojZWNlY2Y1O2ZvbnQtZmFtaWx5OkRNIFNhbnMsc2Fucy1zZXJpZiI+JysKICAgICc8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6NDYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xKTtib3JkZXItcmFkaXVzOjE4cHg7cGFkZGluZzozOHB4IDMwcHgiPicrCiAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjQ2cHg7bWFyZ2luLWJvdHRvbToxMnB4Ij7wn5SSPC9kaXY+PGgyIHN0eWxlPSJmb250LXNpemU6MjJweDttYXJnaW4tYm90dG9tOjEwcHgiPtCl0YrQsdGK0YIg0LUg0LfQsNC60LvRjtGH0LXQvTwvaDI+JysKICAgICc8cCBzdHlsZT0iY29sb3I6I2EwYTBjMDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjYiPicrZXNjKG1zZykrJzwvcD4nKwogICAgJzxwIHN0eWxlPSJjb2xvcjojNmY2ZjhlO2ZvbnQtc2l6ZToxMnB4O21hcmdpbi10b3A6MTRweCI+0KHQstGK0YDQttC10YLQtSDRgdC1INGBINC00L7RgdGC0LDQstGH0LjQutCwINC30LAg0L/QvtC00L3QvtCy0Y/QstCw0L3QtS48L3A+PC9kaXY+PC9kaXY+JzsKfQoKZnVuY3Rpb24gb3BlbkxpY2Vuc2VQYW5lbCgpewogIHdpbmRvdy5vcGVuKCdsaWNlbnNlcy9hZG1pbi9pbmRleC5waHAnLCdfYmxhbmsnKTsKfQoKYXN5bmMgZnVuY3Rpb24gck1vZHVsZXMoKXsKICB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGxpc3QnKTsKICBpZighZWwpcmV0dXJuOwogIGlmKCFDVXx8Q1UuaXNfYWRtaW4hPTEpe2VsLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iYWRtaW5ub3RlIj7QodCw0LzQviDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgCDQvNC+0LbQtSDQtNCwINGD0L/RgNCw0LLQu9GP0LLQsCDQvNC+0LTRg9C70LjRgtC1LjwvZGl2Pic7cmV0dXJuO30KICBlbC5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+JzsKICB2YXIgcj1hd2FpdCBhZignYnJhbmRpbmdfc2V0dGluZ3MnKTsKICB2YXIgbW9kcz0ociYmci5tb2R1bGVzX2VuYWJsZWQpP3IubW9kdWxlc19lbmFibGVkOnt9OwogIHZhciBrZXlzPU9iamVjdC5rZXlzKE1PRFVMRV9MQUJFTFMpOwogIGVsLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iYWRtaW5ub3RlIj7QmNC30LrQu9GO0YfQtdC90LjRgtC1INC80L7QtNGD0LvQuCDRgdC1INGB0LrRgNC40LLQsNGCINC+0YIg0LvRj9Cy0L7RgtC+INC80LXQvdGOLiDQm9C40YbQtdC90LfQvdC40Y/RgiDQv9Cw0L3QtdC7INC80L7QttC1INC00L7Qv9GK0LvQvdC40YLQtdC70L3QviDQtNCwINC+0LPRgNCw0L3QuNGH0LDQstCwINC80L7QtNGD0LvQuNGC0LUg0LfQsCDQutC70LjQtdC90YLRgdC60Lgg0YXRitCx0L7QstC1LjwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0ibW9kZ3JpZCI+JytrZXlzLm1hcChmdW5jdGlvbihrKXsKICAgICAgdmFyIG9uPSFtb2RzLmhhc093blByb3BlcnR5KGspfHwhIU51bWJlcihtb2RzW2tdKTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJtb2RjYXJkIj48ZGl2PjxkaXYgY2xhc3M9Im1vZG5hbWUiPicrTU9EVUxFX0xBQkVMU1trXSsnPC9kaXY+PGRpdiBjbGFzcz0ibW9kaGludCI+Jysob24/J9CQ0LrRgtC40LLQtdC9Jzon0KHQutGA0LjRgiDQvtGCINC80LXQvdGO0YLQvicpKyc8L2Rpdj48L2Rpdj48YnV0dG9uIGNsYXNzPSJzdyAnKyhvbj8nb24nOicnKSsnIiB0aXRsZT0i0JLQutC70Y7Rh9C4L9C40LfQutC70Y7Rh9C4IiBvbmNsaWNrPSJ0b2dnbGVNb2R1bGUoJytqc0FyZyhrKSsnLCcrKG9uPzA6MSkrJykiPjwvYnV0dG9uPjwvZGl2Pic7CiAgICB9KS5qb2luKCcnKSsnPC9kaXY+JzsKfQoKYXN5bmMgZnVuY3Rpb24gdG9nZ2xlTW9kdWxlKGtleSxlbmFibGVkKXsKICB2YXIgcj1hd2FpdCBhZignbW9kdWxlX3RvZ2dsZScsJ1BPU1QnLHttb2R1bGU6a2V5LGVuYWJsZWQ6ZW5hYmxlZH0pOwogIGlmKHIpewogICAgdG9hc3QoZW5hYmxlZD8n0JzQvtC00YPQu9GK0YIg0LUg0LLQutC70Y7Rh9C10L0nOifQnNC+0LTRg9C70YrRgiDQtSDQuNC30LrQu9GO0YfQtdC9Jywnb2snKTsKICAgIGF3YWl0IGFwcGx5TW9kdWxlVmlzaWJpbGl0eSgpOwogICAgYXdhaXQgck1vZHVsZXMoKTsKICB9ZWxzZXsKICAgIHRvYXN0KCfQndGD0LbQvdC4INGB0LAg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRgdC60Lgg0L/RgNCw0LLQsCcsJ2VycicpOwogIH0KfQoKLy8g4pSA4pSAIE5BViDilIDilIAKZnVuY3Rpb24gZ28oc2VjLGVsKXsKICBpZihzZWM9PT0nbW9kdWxlc19zZXR0aW5ncycgJiYgSFVCX0xJQ0VOU0VfUk9MRSE9PSdtYXN0ZXInKXt0b2FzdCgn0JzQvtC00YPQu9C40YLQtSDRgdC1INGD0L/RgNCw0LLQu9GP0LLQsNGCINC+0YIg0LvQuNGG0LXQvdC30L3QuNGPINC/0LDQvdC10LsuJywnZXJyJyk7cmV0dXJuO30KICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2VjJykuZm9yRWFjaChmdW5jdGlvbihzKXtzLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO30pOwogIHZhciBzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWMtJytzZWMpO2lmKHMpcy5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICBpZihlbCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm5pJykuZm9yRWFjaChmdW5jdGlvbihuKXtuLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO30pO2VsLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO30KICB2YXIgVD17ZGFzaGJvYXJkOidEYXNoYm9hcmQnLHdvcmtyZXBvcnQ6J9Cg0LDQsdC+0YLQtdC9INGA0LjQv9C+0YDRgicsdGFyZ2V0czon0JTQvdC10LLQvdC4INGC0LDRgNCz0LXRgtC4Jyxwcm9qZWN0czon0J/RgNC+0LXQutGC0LgnLGNsaWVudHM6J9Ca0LvQuNC10L3RgtC4JyxmaW5hbmNlOifQpNC40L3QsNC90YHQuCcsdGFza3M6J9CX0LDQtNCw0YfQuCcsb2ZmZXJzOifQntGE0LXRgNGC0LgnLGNvbnRyYWN0czon0JTQvtCz0L7QstC+0YDQuCcsYWlfc2NhbjonQUkg0YHQutCw0L3QuNGA0LDQvdC1JyxjYWxlbmRhcjon0JrQsNC70LXQvdC00LDRgCcsaG9zdGluZzon0KXQvtGB0YLQuNC90LPQuCcscGFzc3dvcmRzOifQlNC+0YHRgtGK0L/QuCcsbm90ZXM6J9CR0LXQu9C10LbQutC4JyxyZXBvcnRzOifQntGC0YfQtdGC0LgnLHByZXNlbmNlOifQn9GA0LjRgdGK0YHRgtCy0LjQtScsdXNlcnM6J9Cf0L7RgtGA0LXQsdC40YLQtdC70LgnLGF1ZGl0OidBdWRpdCBsb2cnLG1vZHVsZXNfc2V0dGluZ3M6J9Cc0L7QtNGD0LvQuCd9OwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdGl0bGUnKS50ZXh0Q29udGVudD1UW3NlY118fHNlYzsKICBscyhzZWMpOwp9CgovLyDilIDilIAgRk9STUFUIOKUgOKUgApmdW5jdGlvbiBmbXQobil7cmV0dXJuICfigqwgJytOdW1iZXIobnx8MCkudG9Mb2NhbGVTdHJpbmcoJ2RlLURFJyx7bWluaW11bUZyYWN0aW9uRGlnaXRzOjIsbWF4aW11bUZyYWN0aW9uRGlnaXRzOjJ9KTt9CmZ1bmN0aW9uIGZkKHMpe2lmKCFzKXJldHVybiAnJzt0cnl7cmV0dXJuIG5ldyBEYXRlKHMpLnRvTG9jYWxlRGF0ZVN0cmluZygnYmctQkcnLHtkYXk6J251bWVyaWMnLG1vbnRoOidzaG9ydCcseWVhcjonbnVtZXJpYyd9KTt9Y2F0Y2goZSl7cmV0dXJuIHM7fX0KZnVuY3Rpb24gZmR0KHMpe2lmKCFzKXJldHVybiAnJzt0cnl7cmV0dXJuIG5ldyBEYXRlKHMpLnRvTG9jYWxlRGF0ZVN0cmluZygnYmctQkcnLHtkYXk6J251bWVyaWMnLG1vbnRoOidzaG9ydCcsaG91cjonMi1kaWdpdCcsbWludXRlOicyLWRpZ2l0J30pO31jYXRjaChlKXtyZXR1cm4gczt9fQpmdW5jdGlvbiBwaihzLGQpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZShzfHwnW10nKTt9Y2F0Y2goZSl7cmV0dXJuIGQ7fX0KZnVuY3Rpb24gZXNjKHMpe3JldHVybiBTdHJpbmcoc3x8JycpLnJlcGxhY2UoLyYvZywnJmFtcDsnKS5yZXBsYWNlKC88L2csJyZsdDsnKS5yZXBsYWNlKC8+L2csJyZndDsnKS5yZXBsYWNlKC8iL2csJyZxdW90OycpLnJlcGxhY2UoLycvZywnJiMzOTsnKTt9CmZ1bmN0aW9uIGpzQXJnKHMpe3JldHVybiBlc2MoSlNPTi5zdHJpbmdpZnkoU3RyaW5nKHN8fCcnKSkpO30KZnVuY3Rpb24gZ3YoaWQpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtyZXR1cm4gZT9lLnZhbHVlLnRyaW0oKTonJzt9CgovLyDilIDilIAgTE9BRCDilIDilIAKYXN5bmMgZnVuY3Rpb24gbG9hZEFsbCgpewogIHZhciBSPWF3YWl0IFByb21pc2UuYWxsKFthZigncHJvamVjdHMnKSxhZigndGFza3MnKSxhZignbm90ZXMnKSxhZignY2xpZW50cycpLGFmKCdob3N0aW5nJyksYWYoJ3Bhc3N3b3JkcycpLGFmKCdvZmZlcnMnKSxhZignY29udHJhY3RzJyksYWYoJ3VzZXJzJyksYWYoJ2FjdGl2aXR5JyksYWYoJ3N0YXRzJyldKTsKICBELnByb2plY3RzPShSWzBdfHxbXSkubWFwKGZ1bmN0aW9uKHApe3JldHVybiBPYmplY3QuYXNzaWduKHt9LHAse3RhZ3M6cGoocC50YWdzLFtdKX0pO30pOwogIEQudGFza3M9UlsxXXx8W107RC5ub3Rlcz1SWzJdfHxbXTtELmNsaWVudHM9UlszXXx8W107RC5ob3N0aW5nPVJbNF18fFtdOwogIEQucGFzc3dvcmRzPVJbNV18fFtdO0Qub2ZmZXJzPVJbNl18fFtdO0QuY29udHJhY3RzPVJbN118fFtdO0QudXNlcnM9Uls4XXx8W107RC5hY3Rpdml0eT1SWzldfHxbXTsKICB2YXIgc3Q9UlsxMF07CiAgaWYoc3QpewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2twJykudGV4dENvbnRlbnQ9c3QuYWN0aXZlX3Byb2plY3RzOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tvJykudGV4dENvbnRlbnQ9Zm10KHN0LnRvdGFsX29mZmVyZWQpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tyJykudGV4dENvbnRlbnQ9Zm10KHN0LnRvdGFsX3JlY2VpdmVkKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrcG4nKS50ZXh0Q29udGVudD1mbXQoc3QudG90YWxfcGVuZGluZyk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna3QnKS50ZXh0Q29udGVudD1zdC50YXNrc19wZW5kaW5nOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25iLXAnKS50ZXh0Q29udGVudD1zdC5hY3RpdmVfcHJvamVjdHM7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmItdCcpLnRleHRDb250ZW50PXN0LnRhc2tzX3BlbmRpbmc7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmItaCcpLnRleHRDb250ZW50PXN0LnNzbF93YXJuaW5nczsKICB9CiAgclRlYW0oKTtyRGFzaCgpOwp9Cgphc3luYyBmdW5jdGlvbiBscyhzKXsKICBpZihzPT09J2Rhc2hib2FyZCcpe2F3YWl0IGxvYWRBbGwoKTtyZXR1cm47fQogIHZhciBtPXsKICAgIHByb2plY3RzOmFzeW5jIGZ1bmN0aW9uKCl7RC5wcm9qZWN0cz0oKGF3YWl0IGFmKCdwcm9qZWN0cycpKXx8W10pLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxwLHt0YWdzOnBqKHAudGFncyxbXSl9KTt9KTtyUHJqKCcnKTt9LAogICAgY2xpZW50czphc3luYyBmdW5jdGlvbigpe0QuY2xpZW50cz1hd2FpdCBhZignY2xpZW50cycpfHxbXTtyQ2xpKCk7fSwKICAgIGZpbmFuY2U6YXN5bmMgZnVuY3Rpb24oKXtELnByb2plY3RzPSgoYXdhaXQgYWYoJ3Byb2plY3RzJykpfHxbXSkubWFwKGZ1bmN0aW9uKHApe3JldHVybiBPYmplY3QuYXNzaWduKHt9LHAse3RhZ3M6cGoocC50YWdzLFtdKX0pO30pO3JGaW4oKTt9LAogICAgdGFza3M6YXN5bmMgZnVuY3Rpb24oKXtELnRhc2tzPWF3YWl0IGFmKCd0YXNrcycpfHxbXTtyVGFza3MoKTt9LAogICAgb2ZmZXJzOmFzeW5jIGZ1bmN0aW9uKCl7RC5vZmZlcnM9YXdhaXQgYWYoJ29mZmVycycpfHxbXTtyT2ZmZXJzKCk7fSwKICAgIGNvbnRyYWN0czphc3luYyBmdW5jdGlvbigpe0QuY29udHJhY3RzPWF3YWl0IGFmKCdjb250cmFjdHMnKXx8W107ckNvbnRyYWN0cygpO30sCiAgICBob3N0aW5nOmFzeW5jIGZ1bmN0aW9uKCl7RC5ob3N0aW5nPWF3YWl0IGFmKCdob3N0aW5nJyl8fFtdO3JIb3N0aW5nKCk7fSwKICAgIHBhc3N3b3Jkczphc3luYyBmdW5jdGlvbigpe0QucGFzc3dvcmRzPWF3YWl0IGFmKCdwYXNzd29yZHMnKXx8W107clBhc3N3b3JkcygpO30sCiAgICBub3Rlczphc3luYyBmdW5jdGlvbigpe0Qubm90ZXM9YXdhaXQgYWYoJ25vdGVzJyl8fFtdO3JOb3RlcygpO30sCiAgICByZXBvcnRzOmFzeW5jIGZ1bmN0aW9uKCl7RC5wcm9qZWN0cz0oKGF3YWl0IGFmKCdwcm9qZWN0cycpKXx8W10pLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxwLHt0YWdzOnBqKHAudGFncyxbXSl9KTt9KTtELnRhc2tzPWF3YWl0IGFmKCd0YXNrcycpfHxbXTtyUmVwb3J0cygpO30sCiAgICBhaV9zY2FuOmFzeW5jIGZ1bmN0aW9uKCl7RC5haV9zY2Fucz1hd2FpdCBhZignYWlfc2NhbnMnKXx8W107ckFpU2NhbnMoKTt9LAogICAgcHJlc2VuY2U6YXN5bmMgZnVuY3Rpb24oKXtpZighRC51c2Vycy5sZW5ndGgpRC51c2Vycz1hd2FpdCBhZigndXNlcnMnKXx8W107clByZXNlbmNlKCk7fSwKICAgIGNhbGVuZGFyOmFzeW5jIGZ1bmN0aW9uKCl7aWYoIUQudGFza3MubGVuZ3RoKUQudGFza3M9YXdhaXQgYWYoJ3Rhc2tzJyl8fFtdO2lmKCFELnVzZXJzLmxlbmd0aClELnVzZXJzPWF3YWl0IGFmKCd1c2VycycpfHxbXTtyQ2FsZW5kYXIoKTt9LAogICAgdXNlcnM6YXN5bmMgZnVuY3Rpb24oKXtELnVzZXJzPWF3YWl0IGFmKCd1c2VycycpfHxbXTtyVXNlcnMoKTt9LAogICAgd29ya3JlcG9ydDphc3luYyBmdW5jdGlvbigpe2lmKCFELnVzZXJzLmxlbmd0aClELnVzZXJzPWF3YWl0IGFmKCd1c2VycycpfHxbXTtyV29ya1JlcG9ydCgpO30sCiAgICB0YXJnZXRzOmFzeW5jIGZ1bmN0aW9uKCl7aWYoIUQudXNlcnMubGVuZ3RoKUQudXNlcnM9YXdhaXQgYWYoJ3VzZXJzJyl8fFtdO3JUYXJnZXRzKCk7fSwKICAgIGF1ZGl0OmFzeW5jIGZ1bmN0aW9uKCl7RC5hdWRpdF9sb2c9YXdhaXQgYWYoJ2F1ZGl0X2xvZycpfHxbXTtyQXVkaXQoKTt9LAogICAgbW9kdWxlc19zZXR0aW5nczphc3luYyBmdW5jdGlvbigpe3JNb2R1bGVzKCk7fQogIH07CiAgaWYobVtzXSlhd2FpdCBtW3NdKCk7Cn0KCi8vIOKUgOKUgCBIRUxQRVJTIOKUgOKUgAp2YXIgVE09e1dvb0NvbW1lcmNlOid3ZWInLFdvcmRQcmVzczond2ViJywnRS1jb21tZXJjZSc6J3dlYicsU0VPOidzZW8nLCdHb29nbGUgQWRzJzonc2VvJyxJbnN0YWdyYW06J3NvY2lhbCcsRmFjZWJvb2s6J3NvY2lhbCcsVmliZXI6J3NvY2lhbCcsY1BhbmVsOidob3N0aW5nJyzQn9C+0LTQtNGA0YrQttC60LA6J2hvc3RpbmcnLNCb0L7Qs9C+OidkZXNpZ24nLNCR0YDQsNC90LTQuNC90LM6J2Rlc2lnbics0JTQuNC30LDQudC9OidkZXNpZ24nLNCg0LXQutC70LDQvNC4Oidzb2NpYWwnLNCh0L/QtdGI0L3QvjoncnVzaCd9Owp2YXIgU1BDPXthY3RpdmU6J3NwLWEnLG5ldzonc3AtbicscmV2aWV3OidzcC1yJyxwYXVzZWQ6J3NwLWQnLGRvbmU6J3NwLWQnfTsKdmFyIFNQTD17YWN0aXZlOifQkiDQv9GA0L7RhtC10YEnLG5ldzon0J3QvtCyJyxyZXZpZXc6J9Cg0LXQstC40LfQuNGPJyxwYXVzZWQ6J9Cf0LDRg9C30LAnLGRvbmU6J9CX0LDQstGK0YDRiNC10L0nfTsKCmZ1bmN0aW9uIHBSb3cocCl7CiAgdmFyIHRhZ3M9KHAudGFnc3x8W10pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gJzxzcGFuIGNsYXNzPSJ0YWcgJysoVE1bdF18fCd3ZWInKSsnIj4nK3QrJzwvc3Bhbj4nO30pLmpvaW4oJycpOwogIHZhciB0b3Q9TnVtYmVyKHAudG90YWx8fDApLHJlYz1OdW1iZXIocC5yZWNlaXZlZHx8MCk7CiAgdmFyIHJ2PXAucmVjdXJyaW5nP2ZtdCh0b3QpKycvJytwLnJlY3VycmluZzpmbXQodG90KTsKICB2YXIgcmw9cmVjPj10b3QmJnRvdD4wPyc8ZGl2IGNsYXNzPSJhciI+0J/Qu9Cw0YLQtdC90L4g4pyTPC9kaXY+JzpyZWM+MD8nPGRpdiBjbGFzcz0iYXIiPicrZm10KHJlYykrJyDQv9C70LDRgtC10L3QvjwvZGl2Pic6JzxkaXYgY2xhc3M9ImFwIj7igqwgMCwwMCDQv9C70LDRgtC10L3QvjwvZGl2Pic7CiAgdmFyIGRsPXAuZGVhZGxpbmU/bmV3IERhdGUocC5kZWFkbGluZSk6bnVsbDsKICB2YXIgZHk9ZGw/TWF0aC5jZWlsKChkbC1uZXcgRGF0ZSgpKS84NjQwMDAwMCk6bnVsbDsKICB2YXIgdWc9ZHkhPT1udWxsJiZkeTw9NzsKICB2YXIgcHI9cC5wcm9ncmVzc3x8MDsKICB2YXIgYmM9cHI+PTEwMD8ndmFyKC0tZ3JuKSc6cHI+PTYwPyd2YXIoLS1hY2MpJzpwcj49MzA/J3ZhcigtLWFtYiknOid2YXIoLS1ibHUpJzsKICByZXR1cm4gJzxkaXYgY2xhc3M9InByIiBvbmNsaWNrPSJtb2RhbChcJ2VkaXRQcm9qZWN0XCcsXCcnK3AuaWQrJ1wnKSI+JwogICAgKyc8ZGl2PjxkaXYgY2xhc3M9InBuIj4nK3AubmFtZSsnPC9kaXY+PGRpdiBjbGFzcz0icG0iPicrKHAuY2xpZW50fHwn4oCUJykrKHAucGhvbmU/JyDCtyAnK3AucGhvbmU6JycpKyc8L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9InB0YWdzIj4nK3RhZ3MrJzwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0icGIiPjxkaXYgY2xhc3M9InBiZiIgc3R5bGU9IndpZHRoOicrcHIrJyU7YmFja2dyb3VuZDonK2JjKyciPjwvZGl2PjwvZGl2PjwvZGl2PicKICAgICsnPHNwYW4gY2xhc3M9InNwICcrKFNQQ1twLnN0YXR1c118fCdzcC1uJykrJyI+JysoU1BMW3Auc3RhdHVzXXx8J9Cd0L7QsicpKyc8L3NwYW4+JwogICAgKyc8ZGl2IGNsYXNzPSJhbXQiPjxkaXYgY2xhc3M9ImF0Ij4nK3J2Kyc8L2Rpdj4nK3JsKyc8L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9ImRsYyI+PGRpdiBjbGFzcz0iZGxkJysodWc/JyB1JzonJykrJyI+JysoIGRsP2RsLnRvTG9jYWxlRGF0ZVN0cmluZygnYmctQkcnLHtkYXk6J251bWVyaWMnLG1vbnRoOidzaG9ydCd9KTon4oCUJykrJzwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0iZGxuJysodWc/JyB1JzonJykrJyI+JysoIGR5PT09bnVsbD8n4oCUJzpkeTw9MD8n0JjQt9GC0LXQutGK0LsnOmR5Kycg0LTQvdC4JykrJzwvZGl2PjwvZGl2PicKICAgICsnPC9kaXY+JzsKfQoKZnVuY3Rpb24gZW1wKGljLHRpLHN1LGJsLGJmKXsKICByZXR1cm4gJzxkaXYgY2xhc3M9ImVtcCI+PGRpdiBjbGFzcz0iZWkiPicraWMrJzwvZGl2PjxkaXYgY2xhc3M9ImV0Ij4nK3RpKyc8L2Rpdj48ZGl2IGNsYXNzPSJlcyI+JytzdSsnPC9kaXY+JysoYmw/JzxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSInK2JmKyciPicrYmwrJzwvYnV0dG9uPic6JycpKyc8L2Rpdj4nOwp9CgpmdW5jdGlvbiB0SFRNTCh0KXsKICByZXR1cm4gJzxkaXYgY2xhc3M9InRpIiBvbmNsaWNrPSJ0b2dUYXNrKFwnJyt0LmlkKydcJykiPicKICAgICsnPGRpdiBjbGFzcz0idGNrJysodC5kb25lPT0xPycgZG9uZSc6JycpKyciPicrKCB0LmRvbmU9PTE/J+Kckyc6JycpKyc8L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9InR0eCcrKHQuZG9uZT09MT8nIGRvbmUnOicnKSsnIj4nK3QudGV4dCsodC51cmdlbnQ9PTEmJnQuZG9uZSE9MT8nPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXJlZCk7bWFyZ2luLWxlZnQ6NHB4Ij7imqA8L3NwYW4+JzonJykrJzwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0idGFzcyI+JysodC5hc3NpZ25lZXx8J+KAlCcpKyc8L2Rpdj4nCiAgICArJzwvZGl2Pic7Cn0KCi8vIOKUgOKUgCBEQVNIQk9BUkQg4pSA4pSACmZ1bmN0aW9uIHJEYXNoKCl7CiAgdmFyIGFjPUQucHJvamVjdHMuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwLnN0YXR1cyE9PSdkb25lJzt9KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHAnKS5pbm5lckhUTUw9YWMubGVuZ3RoP2FjLnNsaWNlKDAsNCkubWFwKHBSb3cpLmpvaW4oJycpOmVtcCgn4peIJywn0J3Rj9C80LDRgtC1INC/0YDQvtC10LrRgtC4JywnJywnKyDQndC+0LIg0L/RgNC+0LXQutGCJywibW9kYWwoJ3Byb2plY3QnKSIpOwogIHZhciB1cD1ELnByb2plY3RzLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gcC5kZWFkbGluZSYmcC5zdGF0dXMhPT0nZG9uZSc7fSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBuZXcgRGF0ZShhLmRlYWRsaW5lKS1uZXcgRGF0ZShiLmRlYWRsaW5lKTt9KS5zbGljZSgwLDUpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZCcpLmlubmVySFRNTD11cC5sZW5ndGg/dXAubWFwKGZ1bmN0aW9uKHApewogICAgdmFyIGR5PU1hdGguY2VpbCgobmV3IERhdGUocC5kZWFkbGluZSktbmV3IERhdGUoKSkvODY0MDAwMDApOwogICAgdmFyIGNsPWR5PD0zPyd1JzpkeTw9MTA/J3MnOidvJzsKICAgIHZhciBjcj1keTw9Mz8ndmFyKC0tcmVkKSc6ZHk8PTEwPyd2YXIoLS1hbWIpJzondmFyKC0tZ3JuKSc7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImRsaSI+PGRpdiBjbGFzcz0iZGxkMiIgc3R5bGU9ImJhY2tncm91bmQ6JytjcisnIj48L2Rpdj48ZGl2IGNsYXNzPSJkbGluIj48ZGl2IGNsYXNzPSJkbG5tIj4nK3AubmFtZSsnPC9kaXY+PGRpdiBjbGFzcz0iZGxtdCI+JysocC5jbGllbnR8fCcnKSsnPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iZGxiZGcgJytjbCsnIj4nKyhkeTw9MD8n0JjQt9GC0LXQutGK0LsnOmR5Kycg0LTQvdC4JykrJzwvZGl2PjwvZGl2Pic7CiAgfSkuam9pbignJyk6JzxkaXYgc3R5bGU9InBhZGRpbmc6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxMnB4Ij7QndGP0LzQsCDQv9GA0LXQtNGB0YLQvtGP0YnQuCDRgdGA0L7QutC+0LLQtTwvZGl2Pic7CiAgdmFyIHRvdD1hYy5yZWR1Y2UoZnVuY3Rpb24ocyxwKXtyZXR1cm4gcytOdW1iZXIocC50b3RhbHx8MCk7fSwwKTsKICB2YXIgcmVjPWFjLnJlZHVjZShmdW5jdGlvbihzLHApe3JldHVybiBzK051bWJlcihwLnJlY2VpdmVkfHwwKTt9LDApOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZicpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZnIiPjxzcGFuIGNsYXNzPSJmbCI+0J7RhNC10YDQuNGA0LDQvdC+PC9zcGFuPjxzcGFuIGNsYXNzPSJmdiI+JytmbXQodG90KSsnPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImZyIj48c3BhbiBjbGFzcz0iZmwiPtCf0L7Qu9GD0YfQtdC90L48L3NwYW4+PHNwYW4gY2xhc3M9ImZ2IGciPicrZm10KHJlYykrJzwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJmciI+PHNwYW4gY2xhc3M9ImZsIj7QntGH0LDQutCy0LAg0YHQtTwvc3Bhbj48c3BhbiBjbGFzcz0iZnYgYSI+JytmbXQodG90LXJlYykrJzwvc3Bhbj48L2Rpdj4nOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdCcpLmlubmVySFRNTD1ELnRhc2tzLmxlbmd0aD9ELnRhc2tzLnNsaWNlKDAsNikubWFwKHRIVE1MKS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINC30LDQtNCw0YfQuDwvZGl2Pic7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RuJykuaW5uZXJIVE1MPUQubm90ZXMubGVuZ3RoP0Qubm90ZXMuc2xpY2UoMCwzKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuICc8ZGl2IGNsYXNzPSJuaTIiPjxkaXYgY2xhc3M9Im50Ij4nK24udGl0bGUrJzwvZGl2PjxkaXYgY2xhc3M9Im5wIj4nKyhuLmJvZHl8fCcnKSsnPC9kaXY+PGRpdiBjbGFzcz0ibmYiPjxzcGFuPicrKG4uYXV0aG9yfHwnJykrJzwvc3Bhbj4nKyhuLmF1dGhvcj8nPHNwYW4+wrc8L3NwYW4+JzonJykrJzxzcGFuPicrZmR0KG4uY3JlYXRlZF9hdCkrJzwvc3Bhbj48L2Rpdj48L2Rpdj4nO30pLmpvaW4oJycpOic8ZGl2IHN0eWxlPSJwYWRkaW5nOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tdHgzKTtmb250LXNpemU6MTJweCI+0J3Rj9C80LAg0LHQtdC70LXQttC60Lg8L2Rpdj4nOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYScpLmlubmVySFRNTD1ELmFjdGl2aXR5Lmxlbmd0aD9ELmFjdGl2aXR5LnNsaWNlKDAsNikubWFwKGZ1bmN0aW9uKGEpe3JldHVybiAnPGRpdiBjbGFzcz0iYWkiPjxkaXYgY2xhc3M9ImFhdiAnKyhhLmNvbG9yfHwnYXYtcCcpKyciPicrKGEuaW5pdGlhbHN8fCc/JykrJzwvZGl2PjxkaXY+PGRpdiBjbGFzcz0iYXR4Ij48c3Ryb25nPicrYS53aG8rJzwvc3Ryb25nPiAnK2Eud2hhdCsnPC9kaXY+PGRpdiBjbGFzcz0iYXRtIj4nK2ZkdChhLmNyZWF0ZWRfYXQpKyc8L2Rpdj48L2Rpdj48L2Rpdj4nO30pLmpvaW4oJycpOic8ZGl2IHN0eWxlPSJwYWRkaW5nOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tdHgzKTtmb250LXNpemU6MTJweCI+0J3Rj9C80LAg0LDQutGC0LjQstC90L7RgdGCPC9kaXY+JzsKfQoKZnVuY3Rpb24gclRlYW0oKXsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGxpc3QnKS5pbm5lckhUTUw9RC51c2Vycy5tYXAoZnVuY3Rpb24odSl7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9InRyb3ciPjxkaXYgY2xhc3M9ImF2ICcrKHUuY29sb3J8fCdhdi1wJykrJyI+JysodS5pbml0aWFsc3x8Jz8nKSsnPC9kaXY+PGRpdiBzdHlsZT0iZmxleDoxIj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tdHgpIj4nK3UubmFtZSsnPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKSI+JysodS5yb2xlfHwnJykrJzwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgfSkuam9pbignJyk7Cn0KCmZ1bmN0aW9uIHJQcmoocSl7CiAgdmFyIGxpc3Q9RC5wcm9qZWN0czsKICBpZihxKWxpc3Q9bGlzdC5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEudG9Mb3dlckNhc2UoKSl8fChwLmNsaWVudHx8JycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocS50b0xvd2VyQ2FzZSgpKTt9KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnAnKS5pbm5lckhUTUw9bGlzdC5sZW5ndGg/bGlzdC5tYXAocFJvdykuam9pbignJyk6ZW1wKCfil4gnLCfQndGP0LzQsNGC0LUg0L/RgNC+0LXQutGC0LgnLCcnLCcrINCd0L7QsiDQv9GA0L7QtdC60YInLCJtb2RhbCgncHJvamVjdCcpIik7Cn0KZnVuY3Rpb24gZnAocSl7clByaihxKTt9CgpmdW5jdGlvbiByQ2xpKCl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NzJykudGV4dENvbnRlbnQ9RC5jbGllbnRzLmxlbmd0aCsnINC60LvQuNC10L3RgicrKEQuY2xpZW50cy5sZW5ndGg9PT0xPycnOifQsCcpOwogIGlmKCFELmNsaWVudHMubGVuZ3RoKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2cnKS5pbm5lckhUTUw9ZW1wKCfil44nLCfQndGP0LzQsNGC0LUg0LrQu9C40LXQvdGC0LgnLCcnLCcrINCd0L7QsiDQutC70LjQtdC90YInLCJtb2RhbCgnY2xpZW50JykiKTtyZXR1cm47fQogIHZhciBjbHM9Wydhdi1wJywnYXYtdCcsJ2F2LWcnLCdhdi1hJ107CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NnJykuaW5uZXJIVE1MPUQuY2xpZW50cy5tYXAoZnVuY3Rpb24oYyxpKXsKICAgIHZhciBwanM9RC5wcm9qZWN0cy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAuY2xpZW50PT09Yy5uYW1lO30pLmxlbmd0aDsKICAgIHZhciB0b3Q9RC5wcm9qZWN0cy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAuY2xpZW50PT09Yy5uYW1lO30pLnJlZHVjZShmdW5jdGlvbihzLHApe3JldHVybiBzK051bWJlcihwLnRvdGFsfHwwKTt9LDApOwogICAgdmFyIGNvbD1jbHNbaSU0XTsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iY2MiPjxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij48ZGl2IGNsYXNzPSJhdiAnK2NvbCsnIiBzdHlsZT0id2lkdGg6MzZweDtoZWlnaHQ6MzZweDtmb250LXNpemU6MTJweCI+JysoYy5uYW1lfHwnPycpLnNsaWNlKDAsMikudG9VcHBlckNhc2UoKSsnPC9kaXY+PGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tdHgpIj4nK2MubmFtZSsnPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKSI+JysoYy5jb21wYW55fHwnJykrJzwvZGl2PjwvZGl2PjwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjEwcHgiPjxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO2ZsZXg6MSI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtZmFtaWx5OnZhcigtLW1vKTtjb2xvcjp2YXIoLS10eCkiPicrcGpzKyc8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpIj7Qn9GA0L7QtdC60YLQsDwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO2ZsZXg6MSI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtZmFtaWx5OnZhcigtLW1vKTtjb2xvcjp2YXIoLS1ncm4pIj4nK2ZtdCh0b3QpKyc8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpIj7QntCx0YnQvjwvZGl2PjwvZGl2PjwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjExcHg7cGFkZGluZy10b3A6MTFweDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1icmQpIj4nKyhjLmVtYWlsPyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi1ib3R0b206MnB4Ij7wn5OnIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS10eDIpIj4nK2MuZW1haWwrJzwvc3Bhbj48L2Rpdj4nOicnKSsoYy5waG9uZT8nPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKSI+8J+TniA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tdHgyKSI+JytjLnBob25lKyc8L3NwYW4+PC9kaXY+JzonJykrJzwvZGl2PjwvZGl2Pic7CiAgfSkuam9pbignJyk7Cn0KCmZ1bmN0aW9uIHJGaW4oKXsKICB2YXIgdG90PUQucHJvamVjdHMucmVkdWNlKGZ1bmN0aW9uKHMscCl7cmV0dXJuIHMrTnVtYmVyKHAudG90YWx8fDApO30sMCk7CiAgdmFyIHJlYz1ELnByb2plY3RzLnJlZHVjZShmdW5jdGlvbihzLHApe3JldHVybiBzK051bWJlcihwLnJlY2VpdmVkfHwwKTt9LDApOwogIHZhciBtb249RC5wcm9qZWN0cy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAucmVjdXJyaW5nO30pLnJlZHVjZShmdW5jdGlvbihzLHApe3JldHVybiBzK051bWJlcihwLnRvdGFsfHwwKTt9LDApOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmdCcpLnRleHRDb250ZW50PWZtdCh0b3QpO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmcicpLnRleHRDb250ZW50PWZtdChyZWMpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmcG4nKS50ZXh0Q29udGVudD1mbXQodG90LXJlYyk7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZzJykudGV4dENvbnRlbnQ9Zm10KG1vbik7CiAgdmFyIHVuPUQucHJvamVjdHMuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBOdW1iZXIocC5yZWNlaXZlZHx8MCk8TnVtYmVyKHAudG90YWx8fDApJiZwLnN0YXR1cyE9PSdkb25lJzt9KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnUnKS5pbm5lckhUTUw9dW4ubGVuZ3RoP3VuLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gJzxkaXYgY2xhc3M9ImZyIj48c3BhbiBjbGFzcz0iZmwiPicrcC5uYW1lKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImZ2IGEiPicrZm10KE51bWJlcihwLnRvdGFsfHwwKS1OdW1iZXIocC5yZWNlaXZlZHx8MCkpKyc8L3NwYW4+PC9kaXY+Jzt9KS5qb2luKCcnKTplbXAoJ+KXhycsJ9CS0YHQuNGH0LrQviDQv9C70LDRgtC10L3QvicsJycsJycsJycpOwogIHZhciBzYj1ELnByb2plY3RzLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gcC5yZWN1cnJpbmc7fSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZzbCcpLmlubmVySFRNTD1zYi5sZW5ndGg/c2IubWFwKGZ1bmN0aW9uKHApe3JldHVybiAnPGRpdiBjbGFzcz0iZnIiPjxzcGFuIGNsYXNzPSJmbCI+JytwLm5hbWUrJzwvc3Bhbj48c3BhbiBjbGFzcz0iZnYgZyI+JytmbXQocC50b3RhbCkrJy8nK3AucmVjdXJyaW5nKyc8L3NwYW4+PC9kaXY+Jzt9KS5qb2luKCcnKTplbXAoJ+KXhycsJ9Cd0Y/QvNCw0YLQtSDQsNCx0L7QvdCw0LzQtdC90YLQuCcsJycsJycsJycpOwp9CgpmdW5jdGlvbiByVGFza3MoKXsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmItdCcpLnRleHRDb250ZW50PUQudGFza3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU9PTA7fSkubGVuZ3RoOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZicpLmlubmVySFRNTD1ELnRhc2tzLmxlbmd0aD9ELnRhc2tzLm1hcCh0SFRNTCkuam9pbignJyk6ZW1wKCfilrcnLCfQndGP0LzQsNGC0LUg0LfQsNC00LDRh9C4JywnJywnKyDQl9Cw0LTQsNGH0LAnLCJtb2RhbCgndGFzaycpIik7Cn0KCmFzeW5jIGZ1bmN0aW9uIHRvZ1Rhc2soaWQpewogIHZhciB0PUQudGFza3MuZmluZChmdW5jdGlvbih4KXtyZXR1cm4geC5pZD09PWlkO30pO2lmKCF0KXJldHVybjsKICB0LmRvbmU9dC5kb25lPT0xPzA6MTsKICBhd2FpdCBhZigndGFza3MnLCdQT1NUJyx7aWQ6dC5pZCx0ZXh0OnQudGV4dCxhc3NpZ25lZTp0LmFzc2lnbmVlLHVyZ2VudDp0LnVyZ2VudCxkb25lOnQuZG9uZSxkdWVfZGF0ZTp0LmR1ZV9kYXRlfHxudWxsfSk7CiAgclRhc2tzKCk7ckRhc2goKTt0b2FzdCh0LmRvbmU9PTE/J+KckyDQmNC30L/RitC70L3QtdC90LAnOifQktGK0YDQvdCw0YLQsCcsJ29rJyk7Cn0KCmZ1bmN0aW9uIHJPZmZlcnMoKXsKICB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29mJyk7CiAgaWYoIUQub2ZmZXJzLmxlbmd0aCl7ZWwuaW5uZXJIVE1MPWVtcCgn4pe7Jywn0J3Rj9C80LDRgtC1INC+0YTQtdGA0YLQuCcsJycsJ+KKlSDQndC+0LLQsCDQvtGE0LXRgNGC0LAnLCJ3aW5kb3cub3Blbignb2ZmZXIuaHRtbD90eXBlPW9uZV90aW1lJywnX2JsYW5rJykiKTtyZXR1cm47fQogIHZhciBxPShPRi5xfHwnJykudG9Mb3dlckNhc2UoKTsKICB2YXIgcm93cz1ELm9mZmVycy5maWx0ZXIoZnVuY3Rpb24obyl7CiAgICB2YXIgaGF5PVtvLm51bSxvLmNsaWVudCxvLnNlcnZpY2Usby5zdGF0dXMsby5vZmZlcl90eXBlXS5qb2luKCcgJykudG9Mb3dlckNhc2UoKTsKICAgIHJldHVybiAoIXF8fGhheS5pbmRleE9mKHEpPi0xKSYmKCFPRi5zdGF0dXN8fG8uc3RhdHVzPT09T0Yuc3RhdHVzKTsKICB9KTsKICBpZighcm93cy5sZW5ndGgpe2VsLmlubmVySFRNTD1lbXAoJ+KXuycsJ9Cd0Y/QvNCwINC90LDQvNC10YDQtdC90Lgg0L7RhNC10YDRgtC4Jywn0J/RgNC+0LzQtdC90Lgg0YLRitGA0YHQtdC90LXRgtC+INC40LvQuCDRhNC40LvRgtGK0YDQsC4nLCcnLCcnKTtyZXR1cm47fQogIHZhciBhY2NlcHRlZD1yb3dzLmZpbHRlcihmdW5jdGlvbihvKXtyZXR1cm4gby5zdGF0dXM9PT0n0J/RgNC40LXRgtCwJzt9KS5sZW5ndGg7CiAgdmFyIHRvdGFsPXJvd3MucmVkdWNlKGZ1bmN0aW9uKHMsbyl7cmV0dXJuIHMrTnVtYmVyKG8udG90YWx8fDApO30sMCk7CiAgZWwuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJwYWRkaW5nOjEycHggMTdweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO2Rpc3BsYXk6ZmxleDtnYXA6MTBweDtmbGV4LXdyYXA6d3JhcDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDIpIj48c3Bhbj4nK3Jvd3MubGVuZ3RoKycg0L7RhNC10YDRgtC4PC9zcGFuPjxzcGFuPsK3PC9zcGFuPjxzcGFuPicrYWNjZXB0ZWQrJyDQv9GA0LjQtdGC0Lg8L3NwYW4+PHNwYW4+wrc8L3NwYW4+PHNwYW4+JytmbXQodG90YWwpKyc8L3NwYW4+PC9kaXY+PHRhYmxlIGNsYXNzPSJvdCI+PHRoZWFkPjx0cj48dGg+IzwvdGg+PHRoPtCa0LvQuNC10L3RgjwvdGg+PHRoPtCi0LjQvzwvdGg+PHRoPtCj0YHQu9GD0LPQsDwvdGg+PHRoPtCh0YPQvNCwPC90aD48dGg+0JTQsNGC0LA8L3RoPjx0aD7QodGC0LDRgtGD0YE8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JwogICAgK3Jvd3MubWFwKGZ1bmN0aW9uKG8pe3ZhciB0cD1vLm9mZmVyX3R5cGU9PT0nbW9udGhseSc/J9Cc0LXRgdC10YfQvdCwJzon0JXQtNC90L7QutGA0LDRgtC90LAnO3JldHVybiAnPHRyPjx0ZCBzdHlsZT0iZm9udC1mYW1pbHk6dmFyKC0tbW8pO2NvbG9yOnZhcigtLXR4MykiPicrZXNjKG8ubnVtKSsnPC90ZD48dGQgc3R5bGU9ImNvbG9yOnZhcigtLXR4KTtmb250LXdlaWdodDo1MDAiPicrZXNjKG8uY2xpZW50KSsnPC90ZD48dGQ+PHNwYW4gY2xhc3M9InNwIHNwLW4iPicrdHArJzwvc3Bhbj48L3RkPjx0ZD4nK2VzYyhvLnNlcnZpY2UpKyc8L3RkPjx0ZCBzdHlsZT0iZm9udC1mYW1pbHk6dmFyKC0tbW8pO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10eCkiPicrZm10KG8udG90YWwpKyc8L3RkPjx0ZD4nK2ZkKG8uY3JlYXRlZF9hdCkrJzwvdGQ+PHRkPjxzcGFuIGNsYXNzPSJzcCAnKyhvLnN0YXR1cz09PSfQn9GA0LjQtdGC0LAnPydzcC1hJzpvLnN0YXR1cz09PSfQntGC0LrQsNC30LDQvdCwJz8nc3AtZCc6J3NwLXInKSsnIj4nK2VzYyhvLnN0YXR1cykrJzwvc3Bhbj48L3RkPjx0ZD48YnV0dG9uIGNsYXNzPSJvYnRuIiBvbmNsaWNrPSJ3aW5kb3cub3BlbihcJ29mZmVyLmh0bWw/aWQ9JytvLmlkKydcJyxcJ19ibGFua1wnKSI+0KDQtdC00LDQutGC0LjRgNCw0Lk8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJvYnRuIiBzdHlsZT0iY29sb3I6dmFyKC0tcmVkKSIgb25jbGljaz0iZHIoXCdvZmZlcnNcJyxcJycrby5pZCsnXCcpIj7inJU8L2J1dHRvbj48L3RkPjwvdHI+Jzt9KS5qb2luKCcnKQogICAgKyc8L3Rib2R5PjwvdGFibGU+JzsKfQoKZnVuY3Rpb24gckNvbnRyYWN0cygpewogIHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2YnKTsKICBlbC5pbm5lckhUTUw9RC5jb250cmFjdHMubGVuZ3RoP0QuY29udHJhY3RzLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gJzxkaXYgY2xhc3M9InByIiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvIGF1dG8iPjxkaXY+PGRpdiBjbGFzcz0icG4iPicrKGMubmFtZXx8J+KAlCcpKyc8L2Rpdj48ZGl2IGNsYXNzPSJwbSI+JytjLmNsaWVudCsnIMK3ICcrZmQoYy5zaWduX2RhdGUpKyc8L2Rpdj48L2Rpdj48c3BhbiBjbGFzcz0ic3Agc3AtYSI+0JDQutGC0LjQstC10L08L3NwYW4+PGJ1dHRvbiBjbGFzcz0ib2J0biIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiIG9uY2xpY2s9ImRyKFwnY29udHJhY3RzXCcsXCcnK2MuaWQrJ1wnKSI+4pyVPC9idXR0b24+PC9kaXY+Jzt9KS5qb2luKCcnKTplbXAoJ+KXiCcsJ9Cd0Y/QvNCw0YLQtSDQtNC+0LPQvtCy0L7RgNC4JywnJywnKyDQndC+0LIg0LTQvtCz0L7QstC+0YAnLCJtb2RhbCgnY29udHJhY3QnKSIpOwp9CgpmdW5jdGlvbiBySG9zdGluZygpewogIHZhciB3Yz1ELmhvc3RpbmcuZmlsdGVyKGZ1bmN0aW9uKGgpe3ZhciBkPWguc3NsX2V4cGlyZXM/TWF0aC5jZWlsKChuZXcgRGF0ZShoLnNzbF9leHBpcmVzKS1uZXcgRGF0ZSgpKS84NjQwMDAwMCk6bnVsbDtyZXR1cm4gZCE9PW51bGwmJmQ8MzA7fSkubGVuZ3RoOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdocycpLnRleHRDb250ZW50PUQuaG9zdGluZy5sZW5ndGgrJyDRhdC+0YHRgtC40L3Qs9CwJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmItaCcpLnRleHRDb250ZW50PXdjfHwwOwogIGlmKCFELmhvc3RpbmcubGVuZ3RoKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGcnKS5pbm5lckhUTUw9ZW1wKCfirKEnLCfQndGP0LzQsNGC0LUg0YXQvtGB0YLQuNC90LPQuCcsJycsJysg0J3QvtCyINGF0L7RgdGC0LjQvdCzJywibW9kYWwoJ2hvc3RpbmcnKSIpO3JldHVybjt9CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hnJykuaW5uZXJIVE1MPUQuaG9zdGluZy5tYXAoZnVuY3Rpb24oaCl7CiAgICB2YXIgZD1oLnNzbF9leHBpcmVzP01hdGguY2VpbCgobmV3IERhdGUoaC5zc2xfZXhwaXJlcyktbmV3IERhdGUoKSkvODY0MDAwMDApOm51bGw7CiAgICB2YXIgc2M9ZD09PW51bGw/Jyc6ZDwzMD8nc3NsLWJhZCc6ZDw2MD8nc3NsLXdhcm4nOidzc2wtb2snOwogICAgdmFyIHNpPWQ9PT1udWxsPyfigJQnOmQ8MzA/J+KaoCc6ZDw2MD8n4pqhJzon4pyTJzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iaGNhcmQnKyhkIT09bnVsbCYmZDwzMD8nIHdhcm4nOicnKSsnIj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDttYXJnaW4tYm90dG9tOjhweCI+PGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tdHgpIj4nK2guZG9tYWluKyc8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6MXB4Ij4nKyhoLmNsaWVudHx8J+KAlCcpKycgwrcgJysoaC50eXBlfHwnY1BhbmVsJykrJzwvZGl2PjwvZGl2PjxzcGFuIGNsYXNzPSJzcCBzcC1hIj4nKyhoLnBsYW58fCfigJQnKSsnPC9zcGFuPjwvZGl2PicrKGguc2VydmVyPyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi1ib3R0b206N3B4Ij4nK2guc2VydmVyKyc8L2Rpdj4nOicnKQogICAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6N3B4Ij48ZGl2IGNsYXNzPSJoc3QiPjxkaXYgY2xhc3M9ImhzbCI+0JTQuNGB0Lo8L2Rpdj48ZGl2IGNsYXNzPSJoc3YiPicrKGguZGlza3x8J+KAlCcpKyc8L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJoc3QiPjxkaXYgY2xhc3M9ImhzbCI+U1NMPC9kaXY+PGRpdiBjbGFzcz0iaHN2ICcrc2MrJyI+JytzaSsnICcrKGguc3NsX2V4cGlyZXM/ZmQoaC5zc2xfZXhwaXJlcyk6J+KAlCcpKyc8L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJoc3QiPjxkaXYgY2xhc3M9ImhzbCI+0JTQvdC4PC9kaXY+PGRpdiBjbGFzcz0iaHN2ICcrc2MrJyI+JysoZCE9PW51bGw/ZCsnINC00L3QuCc6J+KAlCcpKyc8L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJoc3QiPjxkaXYgY2xhc3M9ImhzbCI+0KLQuNC/PC9kaXY+PGRpdiBjbGFzcz0iaHN2Ij4nKyhoLnR5cGV8fCfigJQnKSsnPC9kaXY+PC9kaXY+PC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweDt0ZXh0LWFsaWduOnJpZ2h0Ij48YnV0dG9uIGNsYXNzPSJvYnRuIiBzdHlsZT0iY29sb3I6dmFyKC0tcmVkKSIgb25jbGljaz0iZHIoXCdob3N0aW5nXCcsXCcnK2guaWQrJ1wnKSI+0JjQt9GC0YDQuNC5PC9idXR0b24+PC9kaXY+PC9kaXY+JzsKICB9KS5qb2luKCcnKTsKfQoKZnVuY3Rpb24gcHdOb3JtKHMpe3JldHVybiAoc3x8JycpLnRyaW0oKTt9CmZ1bmN0aW9uIHB3Q2xpZW50TmFtZShwKXtyZXR1cm4gcHdOb3JtKHAuY2xpZW50KXx8J9CR0LXQtyDQutC70LjQtdC90YInO30KZnVuY3Rpb24gcHdDYXRMYWJlbChjKXsKICB2YXIgbT17aG9zdGluZzon0KXQvtGB0YLQuNC90LMnLHdvcmRwcmVzczonV29yZFByZXNzJyxnb29nbGU6J0dvb2dsZScsc29jaWFsOifQodC+0YbQuNCw0LvQvdC4INC80YDQtdC20LgnLGRuczonRE5TJyxkZXNpZ246J9CU0LjQt9Cw0LnQvScsb3RoZXI6J9CU0YDRg9Cz0L4nfTsKICByZXR1cm4gbVtjXXx8Y3x8J9CU0YDRg9Cz0L4nOwp9CmZ1bmN0aW9uIGlzQWRtaW4oKXtyZXR1cm4gQ1UmJkNVLmlzX2FkbWluPT0xO30KZnVuY3Rpb24gcHdWaXNpYmxlSWRzKHApe3RyeXt2YXIgYT1KU09OLnBhcnNlKHAudmlzaWJsZV90b3x8J1tdJyk7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/YS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIFN0cmluZyh4KTt9KTpbXTt9Y2F0Y2goZSl7cmV0dXJuIFtdO319CmZ1bmN0aW9uIHB3VmlzaWJsZU5hbWVzKHApe3ZhciBpZHM9cHdWaXNpYmxlSWRzKHApO3JldHVybiBELnVzZXJzLmZpbHRlcihmdW5jdGlvbih1KXtyZXR1cm4gaWRzLmluZGV4T2YoU3RyaW5nKHUuaWQpKSE9PS0xO30pLm1hcChmdW5jdGlvbih1KXtyZXR1cm4gdS5uYW1lO30pO30KZnVuY3Rpb24gY29sbGVjdFB3VmlzaWJsZSgpe3JldHVybiBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXB3LXVzZXJdOmNoZWNrZWQnKSkubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBwYXJzZUludCh4LnZhbHVlLDEwKTt9KS5maWx0ZXIoQm9vbGVhbik7fQpmdW5jdGlvbiBwd1NlbGVjdENsaWVudChuYW1lKXtQVy5jbGllbnQ9bmFtZTt2YXIgcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHdTZWFyY2gnKTtpZihzKXMudmFsdWU9Jyc7UFcuc2VhcmNoPScnO3JQYXNzd29yZHMoKTt9CmFzeW5jIGZ1bmN0aW9uIG9wZW5QYXNzTW9kYWwoY2xpZW50LGlkKXtpZighaXNBZG1pbigpKXt0b2FzdCgn0KHQsNC80L4g0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YAg0LzQvtC20LUg0LTQsCDRg9C/0YDQsNCy0LvRj9Cy0LAg0LTQvtGB0YLRitC/0LgnLCdlcnInKTtyZXR1cm47fVBXLmZvcm1DbGllbnQ9Y2xpZW50fHxQVy5jbGllbnR8fCcnO1BXLmVkaXRJZD1pZHx8Jyc7aWYoIUQudXNlcnMubGVuZ3RoKUQudXNlcnM9YXdhaXQgYWYoJ3VzZXJzJyl8fFtdO21vZGFsKCdwYXNzd29yZCcpO30KZnVuY3Rpb24gcHdDbGllbnRzKCl7CiAgdmFyIG1hcD17fTsKICBELmNsaWVudHMuZm9yRWFjaChmdW5jdGlvbihjKXsKICAgIHZhciBuPXB3Tm9ybShjLmNvbXBhbnkpfHxwd05vcm0oYy5uYW1lKTsKICAgIGlmKCFuKXJldHVybjsKICAgIG1hcFtuXT1tYXBbbl18fHtuYW1lOm4sbWV0YTpbXSxjb3VudDowLGNhdHM6e319OwogICAgbWFwW25dLm1ldGE9W2MubmFtZSxjLmVtYWlsLGMucGhvbmVdLmZpbHRlcihCb29sZWFuKTsKICB9KTsKICBELnBhc3N3b3Jkcy5mb3JFYWNoKGZ1bmN0aW9uKHApewogICAgdmFyIG49cHdDbGllbnROYW1lKHApOwogICAgbWFwW25dPW1hcFtuXXx8e25hbWU6bixtZXRhOltdLGNvdW50OjAsY2F0czp7fX07CiAgICBtYXBbbl0uY291bnQrKzsKICAgIG1hcFtuXS5jYXRzW3AuY2F0ZWdvcnl8fCdvdGhlciddPShtYXBbbl0uY2F0c1twLmNhdGVnb3J5fHwnb3RoZXInXXx8MCkrMTsKICB9KTsKICByZXR1cm4gT2JqZWN0LmtleXMobWFwKS5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIG1hcFtrXTt9KS5zb3J0KGZ1bmN0aW9uKGEsYil7CiAgICBpZihhLm5hbWU9PT0n0JHQtdC3INC60LvQuNC10L3RgicpcmV0dXJuIDE7CiAgICBpZihiLm5hbWU9PT0n0JHQtdC3INC60LvQuNC10L3RgicpcmV0dXJuIC0xOwogICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSwnYmcnKTsKICB9KTsKfQpmdW5jdGlvbiByUGFzc3dvcmRzKCl7CiAgdmFyIGNtPXtob3N0aW5nOidob3N0aW5nJyxnb29nbGU6J3Nlbycsc29jaWFsOidzb2NpYWwnLGRuczonZGVzaWduJyx3b3JkcHJlc3M6J3dlYicsZGVzaWduOidkZXNpZ24nLG90aGVyOid3ZWInfTsKICB2YXIgYm94PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwd2wnKTsKICB2YXIgYWRkVG9wPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwd0FkZFRvcCcpOyBpZihhZGRUb3ApYWRkVG9wLnN0eWxlLmRpc3BsYXk9aXNBZG1pbigpPycnOidub25lJzsKICB2YXIgc2VhcmNoPShQVy5zZWFyY2h8fCcnKS50b0xvd2VyQ2FzZSgpOwogIGlmKCFQVy5jbGllbnQpewogICAgdmFyIGNsaWVudHM9cHdDbGllbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKGMpewogICAgICB2YXIgaGF5PShjLm5hbWUrJyAnKyhjLm1ldGF8fFtdKS5qb2luKCcgJykpLnRvTG93ZXJDYXNlKCk7CiAgICAgIHJldHVybiAhc2VhcmNofHxoYXkuaW5kZXhPZihzZWFyY2gpIT09LTE7CiAgICB9KTsKICAgIGlmKCFjbGllbnRzLmxlbmd0aCl7CiAgICAgIGJveC5pbm5lckhUTUw9ZW1wKCfil44nLCfQndGP0LzQsCDQvdCw0LzQtdGA0LXQvdC4INC60LvQuNC10L3RgtC4Jyxpc0FkbWluKCk/J9Cf0YDQvtC80LXQvdC4INGC0YrRgNGB0LXQvdC10YLQviDQuNC70Lgg0LTQvtCx0LDQstC4INC90L7QsiDQtNC+0YHRgtGK0L8uJzon0J3Rj9C80LDRiCDQvdCw0LfQvdCw0YfQtdC90Lgg0LTQvtGB0YLRitC/0Lgg0LfQsCDRgtC+0LLQsCDRgtGK0YDRgdC10L3QtS4nLGlzQWRtaW4oKT8nKyDQlNC+0LHQsNCy0Lgg0LTQvtGB0YLRitC/JzonJywib3BlblBhc3NNb2RhbCgpIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGJveC5pbm5lckhUTUw9JzxkaXYgY2xhc3M9InB3Z3JpZCI+JytjbGllbnRzLm1hcChmdW5jdGlvbihjKXsKICAgICAgdmFyIGNhdHM9T2JqZWN0LmtleXMoYy5jYXRzKS5tYXAoZnVuY3Rpb24oayl7cmV0dXJuICc8c3BhbiBjbGFzcz0icHdjaGlwIj4nK2VzYyhwd0NhdExhYmVsKGspKSsnOiAnK2MuY2F0c1trXSsnPC9zcGFuPic7fSkuam9pbignJyk7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icHdjbGllbnQiIG9uY2xpY2s9InB3U2VsZWN0Q2xpZW50KCcranNBcmcoYy5uYW1lKSsnKSI+PGRpdiBjbGFzcz0icHdjbiI+Jytlc2MoYy5uYW1lKSsnPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0icHdjbSI+JysoYy5tZXRhJiZjLm1ldGEubGVuZ3RoP2VzYyhjLm1ldGEuam9pbignIMK3ICcpKTon0JTQvtGB0YLRitC/0Lgg0LHQtdC3INC40LfQsdGA0LDQvSDQutC70LjQtdC90YInKSsnPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0icHdjc3RhdCI+PHNwYW4gY2xhc3M9InB3Y2hpcCI+JytjLmNvdW50Kycg0LTQvtGB0YLRitC/JysoYy5jb3VudD09PTE/Jyc6J9CwJykrJzwvc3Bhbj4nK2NhdHMrJzwvZGl2PjwvZGl2Pic7CiAgICB9KS5qb2luKCcnKSsnPC9kaXY+JzsKICAgIHJldHVybjsKICB9CiAgdmFyIGxpc3Q9RC5wYXNzd29yZHMuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwd0NsaWVudE5hbWUocCk9PT1QVy5jbGllbnQ7fSk7CiAgYm94LmlubmVySFRNTD0nPGRpdiBjbGFzcz0icHdoZWFkIj48ZGl2PjxkaXYgY2xhc3M9InB3dGl0bGUiPicrZXNjKFBXLmNsaWVudCkrJzwvZGl2PjxkaXYgY2xhc3M9InB3c3ViIj4nK2xpc3QubGVuZ3RoKycg0LfQsNC/0LDQt9C10L3QuCDQtNC+0YHRgtGK0L/QsDwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4Ij48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9IlBXLmNsaWVudD1cJ1wnO3JQYXNzd29yZHMoKSI+4oaQINCa0LvQuNC10L3RgtC4PC9idXR0b24+JysoaXNBZG1pbigpPyc8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ib3BlblBhc3NNb2RhbChQVy5jbGllbnQpIj4rINCU0L7QsdCw0LLQuDwvYnV0dG9uPic6JycpKyc8L2Rpdj48L2Rpdj4nKwogICAgKGxpc3QubGVuZ3RoP2xpc3QubWFwKGZ1bmN0aW9uKHApewogICAgICB2YXIgbmFtZXM9cHdWaXNpYmxlTmFtZXMocCk7CiAgICAgIHZhciBhc3NpZ25lZD1pc0FkbWluKCk/JzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDo0cHgiPtCS0LjQttC00LDRgjogJysobmFtZXMubGVuZ3RoP2VzYyhuYW1lcy5qb2luKCcsICcpKTon0YHQsNC80L4g0LDQtNC80LjQvdC4JykrJzwvZGl2Pic6Jyc7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icHdyIj48ZGl2IHN0eWxlPSJmbGV4OjEiPjxkaXYgY2xhc3M9InB3cyI+Jytlc2MocC5zaXRlKSsnPC9kaXY+PGRpdiBjbGFzcz0icHd1Ij4nK2VzYyhwLnVzZXJuYW1lfHwnJykrJzwvZGl2PicrYXNzaWduZWQrJzwvZGl2PjxzcGFuIGNsYXNzPSJ0YWcgJysoY21bcC5jYXRlZ29yeV18fCd3ZWInKSsnIj4nK2VzYyhwd0NhdExhYmVsKHAuY2F0ZWdvcnkpKSsnPC9zcGFuPjxkaXYgY2xhc3M9InB3bSIgb25jbGljaz0icmV2UCh0aGlzLCcranNBcmcocC5wYXNzfHwnJykrJykiIHRpdGxlPSLQmtC70LjQutC90LgiPuKAouKAouKAouKAouKAouKAouKAouKAojwvZGl2PjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY3BUeCgnK2pzQXJnKHAucGFzc3x8JycpKycpIj7QmtC+0L/QuNGA0LDQuTwvYnV0dG9uPicrKGlzQWRtaW4oKT8nPGJ1dHRvbiBjbGFzcz0ib2J0biIgb25jbGljaz0ib3BlblBhc3NNb2RhbChQVy5jbGllbnQsJytqc0FyZyhwLmlkKSsnKSI+0KDQtdC00LDQutGC0LjRgNCw0Lk8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJvYnRuIiBzdHlsZT0iY29sb3I6dmFyKC0tcmVkKSIgb25jbGljaz0iZHIoXCdwYXNzd29yZHNcJywnK2pzQXJnKHAuaWQpKycpIj7inJU8L2J1dHRvbj4nOicnKSsnPC9kaXY+JzsKICAgIH0pLmpvaW4oJycpOmVtcCgn4peOJywn0J3Rj9C80LAg0LTQvtGB0YLRitC/0Lgg0LfQsCDRgtC+0LfQuCDQutC70LjQtdC90YInLCcnLGlzQWRtaW4oKT8nKyDQlNC+0LHQsNCy0Lgg0LTQvtGB0YLRitC/JzonJywib3BlblBhc3NNb2RhbChQVy5jbGllbnQpIikpOwp9CmZ1bmN0aW9uIHJldlAoZWwscCl7ZWwuZGF0YXNldC5zPT09JzEnPyhlbC50ZXh0Q29udGVudD0n4oCi4oCi4oCi4oCi4oCi4oCi4oCi4oCiJyxlbC5kYXRhc2V0LnM9JycpOihlbC50ZXh0Q29udGVudD1wLGVsLmRhdGFzZXQucz0nMScsYWYoJ2F1ZGl0X2xvZycsJ1BPU1QnLHthY3Rpb246J3Bhc3N3b3JkX3JldmVhbGVkJyx0YXJnZXRfdHlwZToncGFzc3dvcmRzJyxkZXRhaWxzOifQn9Cw0YDQvtC70LAg0L/QvtC60LDQt9Cw0L3QsCDQsiDQlNC+0YHRgtGK0L/QuCd9KSk7fQpmdW5jdGlvbiBjcFR4KHQpe25hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHQpLnRoZW4oZnVuY3Rpb24oKXthZignYXVkaXRfbG9nJywnUE9TVCcse2FjdGlvbjoncGFzc3dvcmRfY29waWVkJyx0YXJnZXRfdHlwZToncGFzc3dvcmRzJyxkZXRhaWxzOifQn9Cw0YDQvtC70LAg0LrQvtC/0LjRgNCw0L3QsCd9KTt0b2FzdCgn0JrQvtC/0LjRgNCw0L3QviEnLCdvaycpO30pO30KCmZ1bmN0aW9uIHJOb3RlcygpewogIHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmcnKTsKICBpZighRC5ub3Rlcy5sZW5ndGgpe2VsLmlubmVySFRNTD0nPGRpdiBzdHlsZT0iZ3JpZC1jb2x1bW46MS8tMSI+JytlbXAoJ+KXuycsJ9Cd0Y/QvNCw0YLQtSDQsdC10LvQtdC20LrQuCcsJycsJysg0J3QvtCy0LAg0LHQtdC70LXQttC60LAnLCJtb2RhbCgnbm90ZScpIikrJzwvZGl2Pic7cmV0dXJuO30KICBlbC5pbm5lckhUTUw9RC5ub3Rlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuICc8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij4nK24udGl0bGUrKG4udXJnZW50PT0xPyc8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tcmVkKTttYXJnaW4tbGVmdDo1cHgiPuKaoDwvc3Bhbj4nOicnKSsnPC9kaXY+PGJ1dHRvbiBjbGFzcz0ib2J0biIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiIG9uY2xpY2s9ImRyKFwnbm90ZXNcJyxcJycrbi5pZCsnXCcpIj7inJU8L2J1dHRvbj48L2Rpdj48ZGl2IHN0eWxlPSJwYWRkaW5nOjEzcHggMTdweDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10eDIpO2xpbmUtaGVpZ2h0OjEuNyI+Jysobi5ib2R5fHwnJykrJzwvZGl2PjxkaXYgc3R5bGU9InBhZGRpbmc6OXB4IDE3cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tYnJkKTtmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO2Rpc3BsYXk6ZmxleDtnYXA6OHB4Ij48c3Bhbj4nKyhuLmF1dGhvcnx8JycpKyc8L3NwYW4+Jysobi5hdXRob3I/JzxzcGFuPsK3PC9zcGFuPic6JycpKyc8c3Bhbj4nK2ZkdChuLmNyZWF0ZWRfYXQpKyc8L3NwYW4+PC9kaXY+PC9kaXY+Jzt9KS5qb2luKCcnKTsKfQoKZnVuY3Rpb24gclVzZXJzKCl7CiAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1bCcpOwogIGlmKCFELnVzZXJzLmxlbmd0aCl7ZWwuaW5uZXJIVE1MPWVtcCgn8J+RpCcsJ9Cd0Y/QvNCw0YLQtSDQv9C+0YLRgNC10LHQuNGC0LXQu9C4JywnJywnKyDQndC+0LIg0YHQu9GD0LbQuNGC0LXQuycsIm1vZGFsKCduZXdVc2VyJykiKTtyZXR1cm47fQogIGVsLmlubmVySFRNTD1ELnVzZXJzLm1hcChmdW5jdGlvbih1KXtyZXR1cm4gJzxkaXYgY2xhc3M9InVyIj48ZGl2IGNsYXNzPSJhdiAnKyh1LmNvbG9yfHwnYXYtcCcpKyciPicrKHUuaW5pdGlhbHN8fCc/JykrJzwvZGl2PjxkaXYgc3R5bGU9ImZsZXg6MSI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KSI+Jyt1Lm5hbWUrJzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MykiPicrKHUucm9sZXx8JycpKyc8L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtZmFtaWx5OnZhcigtLW1vKSI+Jyt1LnVzZXJuYW1lKyc8L2Rpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHg7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7JysodS5pc19hZG1pbj09MT8nYmFja2dyb3VuZDp2YXIoLS1hZGltKTtjb2xvcjp2YXIoLS1hbWIpJzonYmFja2dyb3VuZDp2YXIoLS1nZGltKTtjb2xvcjp2YXIoLS1ncm4pJykrJyI+JysoIHUuaXNfYWRtaW49PTE/J/CfkZEg0JDQtNC80LjQvSc6J9Ch0LvRg9C20LjRgtC10LsnKSsnPC9zcGFuPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0ibW9kYWwoXCdlZGl0VXNlclwnLFwnJyt1LmlkKydcJykiPtCg0LXQtNCw0LrRgtC40YDQsNC5PC9idXR0b24+JysodS5pc19hZG1pbiE9MT8nPGJ1dHRvbiBjbGFzcz0ib2J0biIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiIG9uY2xpY2s9ImRVKFwnJyt1LmlkKydcJykiPuKclTwvYnV0dG9uPic6JycpKyc8L2Rpdj4nO30pLmpvaW4oJycpOwp9CgovLyDilIDilIAgUFJFU0VOQ0Ug4pSA4pSACnZhciBQU0k9ewogIGFycml2ZWQ6ICAge2Vtb2ppOifwn5+iJywgbGFiZWw6J9Cd0LAg0YDQsNCx0L7RgtCwJywgICAgICAgY29sb3I6JyMyMmM1NWUnfSwKICBicmVhazogICAgIHtlbW9qaTon4piVJywgbGFiZWw6J9Cd0LAg0L/QvtGH0LjQstC60LAnLCAgICAgICBjb2xvcjonI2Y1OWUwYid9LAogIGJhY2s6ICAgICAge2Vtb2ppOifwn5K8JywgbGFiZWw6J9Ce0LHRgNCw0YLQvdC+JywgICAgICAgICAgY29sb3I6JyMzOGJkZjgnfSwKICBsZWZ0OiAgICAgIHtlbW9qaTon8J+UtCcsIGxhYmVsOifQotGA0YrQs9C90LDQuycsICAgICAgICAgIGNvbG9yOicjZWY0NDQ0J30sCiAgdG9pbGV0OiAgICB7ZW1vamk6J/Cfmr0nLCBsYWJlbDon0KLQvtCw0LvQtdGC0L3QsCcsICAgICAgICAgY29sb3I6JyM4YjVjZjYnfSwKICBzbW9rZTogICAgIHtlbW9qaTon8J+arCcsIGxhYmVsOifQndCwINGG0LjQs9Cw0YDQsCcsICAgICAgICBjb2xvcjonIzZiNzI4MCd9LAogIHNtb2tlX2JhY2s6e2Vtb2ppOifwn5KoJywgbGFiZWw6J9CS0YrRgNC90LAg0YHQtScsICAgICAgICAgY29sb3I6JyMzOGJkZjgnfQp9OwoKZnVuY3Rpb24gcHJlc2VuY2VNZXRhKHgpewogIGlmKCFDVXx8Q1UuaXNfYWRtaW4hPTF8fCF4KXJldHVybiAnJzsKICB2YXIgYml0cz1bXTsKICBpZih4LmlwX2FkZHJlc3MpYml0cy5wdXNoKCdJUDogJytlc2MoeC5pcF9hZGRyZXNzKSk7CiAgaWYoeC5vZmZpY2Vfc3RhdGU9PT0nb3V0c2lkZScpYml0cy5wdXNoKCc8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tcmVkKSI+0JjQt9Cy0YrQvSDQvtGE0LjRgScrKHguZGlzdGFuY2VfbT8nIMK3ICcreC5kaXN0YW5jZV9tKydtJzonJykrJzwvc3Bhbj4nKTsKICBpZih4Lm9mZmljZV9zdGF0ZT09PSdvZmZpY2UnfHx4Lm9mZmljZV9zdGF0ZT09PSdvZmZpY2VfaXAnKWJpdHMucHVzaCgnPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWdybikiPtCSINC+0YTQuNGBJysoeC5vZmZpY2Vfc3RhdGU9PT0nb2ZmaWNlX2lwJz8nINC/0L4gSVAnOicnKSsnPC9zcGFuPicpOwogIGlmKHgubGF0aXR1ZGUmJngubG9uZ2l0dWRlKXsKICAgIHZhciBsYXQ9TnVtYmVyKHgubGF0aXR1ZGUpLGxuZz1OdW1iZXIoeC5sb25naXR1ZGUpOwogICAgdmFyIGFjYz14LmFjY3VyYWN5PycgwrcgwrEnK01hdGgucm91bmQoTnVtYmVyKHguYWNjdXJhY3kpKSsnbSc6Jyc7CiAgICBiaXRzLnB1c2goJzxhIGhyZWY9Imh0dHBzOi8vbWFwcy5nb29nbGUuY29tLz9xPScrbGF0KycsJytsbmcrJyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjp2YXIoLS1hY2MyKSI+0JrQsNGA0YLQsDwvYT4nK2FjYyk7CiAgfWVsc2UgaWYoeC5sb2NhdGlvbl9ub3RlKXsKICAgIGJpdHMucHVzaChlc2MoeC5sb2NhdGlvbl9ub3RlKSk7CiAgfQogIHJldHVybiBiaXRzLmxlbmd0aD8nPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjdweDtsaW5lLWhlaWdodDoxLjUiPicrYml0cy5qb2luKCc8YnI+JykrJzwvZGl2Pic6Jyc7Cn0KCmZ1bmN0aW9uIGdldFByZXNlbmNlR2VvKCl7CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpewogICAgaWYoIW5hdmlnYXRvci5nZW9sb2NhdGlvbil7cmVzb2x2ZSh7bG9jYXRpb25fbm90ZTon0JPQtdC+0LvQvtC60LDRhtC40Y/RgtCwINC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwJ30pO3JldHVybjt9CiAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKHBvcyl7CiAgICAgIHJlc29sdmUoewogICAgICAgIGxhdGl0dWRlOnBvcy5jb29yZHMubGF0aXR1ZGUsCiAgICAgICAgbG9uZ2l0dWRlOnBvcy5jb29yZHMubG9uZ2l0dWRlLAogICAgICAgIGFjY3VyYWN5OnBvcy5jb29yZHMuYWNjdXJhY3ksCiAgICAgICAgbG9jYXRpb25fbm90ZTonJwogICAgICB9KTsKICAgIH0sZnVuY3Rpb24oZXJyKXsKICAgICAgdmFyIG1zZz1lcnImJmVyci5jb2RlPT09MT8n0JvQvtC60LDRhtC40Y/RgtCwINC1INC+0YLQutCw0LfQsNC90LAnOifQm9C+0LrQsNGG0LjRj9GC0LAg0L3QtSDQtSDQvdCw0LvQuNGH0L3QsCc7CiAgICAgIHJlc29sdmUoe2xvY2F0aW9uX25vdGU6bXNnfSk7CiAgICB9LHtlbmFibGVIaWdoQWNjdXJhY3k6dHJ1ZSx0aW1lb3V0OjY1MDAsbWF4aW11bUFnZTo2MDAwMH0pOwogIH0pOwp9Cgphc3luYyBmdW5jdGlvbiByUHJlc2VuY2UoKXsKICB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWYnKTsKICBlbC5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+JzsKICB2YXIgZGF0YT1hd2FpdCBhZigncHJlc2VuY2UnKTsKICB2YXIgY3VyPShkYXRhJiZkYXRhLmN1cnJlbnQpP2RhdGEuY3VycmVudDpbXTsKICB2YXIgbG9nPShkYXRhJiZkYXRhLmxvZyk/ZGF0YS5sb2c6W107CiAgdmFyIG15Uz1jdXIuZmluZChmdW5jdGlvbih4KXtyZXR1cm4gU3RyaW5nKHgudXNlcl9pZCk9PT1TdHJpbmcoQ1UmJkNVLmlkKTt9KTsKICB2YXIgbXlTST1teVM/UFNJW215Uy5zdGF0dXNdOm51bGw7CiAgdmFyIG15VG09bXlTP25ldyBEYXRlKG15Uy5jcmVhdGVkX2F0KS50b0xvY2FsZVRpbWVTdHJpbmcoJ2JnLUJHJyx7aG91cjonMi1kaWdpdCcsbWludXRlOicyLWRpZ2l0J30pOicnOwogIHZhciBiYWRnZT1teVNJCiAgICA/JzxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzo4cHggMjBweDtib3JkZXItcmFkaXVzOjMwcHg7YmFja2dyb3VuZDonK215U0kuY29sb3IrJzIyO2JvcmRlcjoxcHggc29saWQgJytteVNJLmNvbG9yKyc1NTtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6JytteVNJLmNvbG9yKyc7bWFyZ2luLWJvdHRvbToyMnB4Ij4nK215U0kuZW1vamkrJyAnK215U0kubGFiZWwrJyA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NDAwO29wYWNpdHk6LjciPtC+0YIgJytteVRtKyc8L3NwYW4+PC9kaXY+JwogICAgOic8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O3BhZGRpbmc6OHB4IDIwcHg7Ym9yZGVyLXJhZGl1czozMHB4O2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLWJvdHRvbToyMnB4Ij7imqog0J3QtSDQtSDQvtGC0LHQtdC70Y/Qt9Cw0L3QviDQtNC90LXRgTwvZGl2Pic7CiAgdmFyIExCTD17YXJyaXZlZDon0J/RgNC40YHRgtC40LPQvdCw0YUnLGJyZWFrOifQn9C+0YfQuNCy0LrQsCcsYmFjazon0J7QsdGA0LDRgtC90L4nLGxlZnQ6J9Ci0YDRitCz0LLQsNC8Jyx0b2lsZXQ6J9Ci0L7QsNC70LXRgtC90LAnLHNtb2tlOifQptC40LPQsNGA0LAnLHNtb2tlX2JhY2s6J9Ce0LHRgNCw0YLQvdC+J307CiAgdmFyIGJ0bnM9WydhcnJpdmVkJywnYnJlYWsnLCdiYWNrJywnbGVmdCcsJ3RvaWxldCcsJ3Ntb2tlJywnc21va2VfYmFjayddLm1hcChmdW5jdGlvbihzKXsKICAgIHZhciBjPVBTSVtzXTt2YXIgaWE9bXlTJiZteVMuc3RhdHVzPT09czsKICAgIHJldHVybiAnPGJ1dHRvbiBvbmNsaWNrPSJsb2dQKFwnJytzKydcJykiIHN0eWxlPSJwYWRkaW5nOjE4cHggMTZweDtib3JkZXItcmFkaXVzOjE0cHg7Ym9yZGVyOjJweCBzb2xpZCAnK2MuY29sb3IrJztiYWNrZ3JvdW5kOicrKGlhP2MuY29sb3I6J3RyYW5zcGFyZW50JykrJztjb2xvcjonKyhpYT8nI2ZmZic6Yy5jb2xvcikrJztjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTpETSBTYW5zLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O21pbi13aWR0aDoxMTBweDtib3gtc2hhZG93OicrKGlhPycwIDRweCAxNnB4ICcrYy5jb2xvcisnNDQnOidub25lJykrJztvdXRsaW5lOm5vbmU7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjI2cHg7bGluZS1oZWlnaHQ6MSI+JytjLmVtb2ppKyc8L3NwYW4+PHNwYW4+JytMQkxbc10rJzwvc3Bhbj48L2J1dHRvbj4nOwogIH0pLmpvaW4oJycpOwogIHZhciBjYXJkcz1ELnVzZXJzLm1hcChmdW5jdGlvbih1KXsKICAgIHZhciBjcz1jdXIuZmluZChmdW5jdGlvbih4KXtyZXR1cm4gU3RyaW5nKHgudXNlcl9pZCk9PT1TdHJpbmcodS5pZCk7fSk7CiAgICB2YXIgc2k9Y3M/UFNJW2NzLnN0YXR1c106bnVsbDsKICAgIHZhciB0PWNzP25ldyBEYXRlKGNzLmNyZWF0ZWRfYXQpLnRvTG9jYWxlVGltZVN0cmluZygnYmctQkcnLHtob3VyOicyLWRpZ2l0JyxtaW51dGU6JzItZGlnaXQnfSk6Jyc7CiAgICB2YXIgY29sPXUuY29sb3J8fCdhdi1wJzsKICAgIHJldHVybiAnPGRpdiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoycHggc29saWQgJysoc2k/c2kuY29sb3IrJzg4JzondmFyKC0tYnJkKScpKyc7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6MThweDt0ZXh0LWFsaWduOmNlbnRlciI+JwogICAgICArJzxkaXYgc3R5bGU9IndpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDonKyhBQkdbY29sXXx8J3JnYmEoMTA4LDk5LDI1NSwuMjUpJykrJztjb2xvcjonKyhBQ1ZbY29sXXx8JyNhNzhiZmEnKSsnO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MTdweDtmb250LXdlaWdodDo3MDA7bWFyZ2luOjAgYXV0byAxMHB4Ij4nKyh1LmluaXRpYWxzfHwnPycpKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4KTttYXJnaW4tYm90dG9tOjJweCI+Jyt1Lm5hbWUrJzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi1ib3R0b206MTBweCI+JysodS5yb2xlfHwnJykrJzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NXB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtwYWRkaW5nOjVweCAxMnB4O2JvcmRlci1yYWRpdXM6MjBweDtiYWNrZ3JvdW5kOicrKHNpP3NpLmNvbG9yKycxOCc6J3ZhcigtLXN1cjIpJykrJztjb2xvcjonKyhzaT9zaS5jb2xvcjondmFyKC0tdHgzKScpKyc7Ym9yZGVyOjFweCBzb2xpZCAnKyhzaT9zaS5jb2xvcisnMzMnOid2YXIoLS1icmQpJykrJyI+JysoIHNpP3NpLmVtb2ppOifimqonKSsnICcrKHNpP3NpLmxhYmVsOifQndC1INC1INCy0LvRj9C30YrQuycpKyc8L2Rpdj4nCiAgICAgICsodD8nPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjZweDtmb250LWZhbWlseTp2YXIoLS1tbykiPtC+0YIgJyt0Kyc8L2Rpdj4nOicnKQogICAgICArcHJlc2VuY2VNZXRhKGNzKQogICAgICArJzwvZGl2Pic7CiAgfSkuam9pbignJyk7CiAgdmFyIHRkPW5ldyBEYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCdiZy1CRycse3dlZWtkYXk6J2xvbmcnLGRheTonbnVtZXJpYycsbW9udGg6J2xvbmcnfSk7CiAgdmFyIGxvZ1I9bG9nLmxlbmd0aD9sb2cubWFwKGZ1bmN0aW9uKGwpewogICAgdmFyIHNpPVBTSVtsLnN0YXR1c107dmFyIHQ9bmV3IERhdGUobC5jcmVhdGVkX2F0KS50b0xvY2FsZVRpbWVTdHJpbmcoJ2JnLUJHJyx7aG91cjonMi1kaWdpdCcsbWludXRlOicyLWRpZ2l0J30pOwogICAgdmFyIGNvbD1sLmNvbG9yfHwnYXYtcCc7CiAgICByZXR1cm4gJzxkaXYgc3R5bGU9InBhZGRpbmc6MTBweCAxNnB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweCI+JwogICAgICArJzxkaXYgc3R5bGU9IndpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDonKyhBQkdbY29sXXx8J3JnYmEoMTA4LDk5LDI1NSwuMjUpJykrJztjb2xvcjonKyhBQ1ZbY29sXXx8JyNhNzhiZmEnKSsnO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo3MDA7ZmxleC1zaHJpbms6MCI+JysobC5pbml0aWFsc3x8Jz8nKSsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS10eCk7ZmxleDoxIj4nK2wubmFtZSsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtiYWNrZ3JvdW5kOicrKHNpP3NpLmNvbG9yKycxOCc6JyM4ODg4ODgxOCcpKyc7Y29sb3I6Jysoc2k/c2kuY29sb3I6JyM4ODgnKSsnIj4nKyggc2k/c2kuZW1vamk6J+KaqicpKycgJysoc2k/c2kubGFiZWw6bC5zdGF0dXMpKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTtmb250LWZhbWlseTp2YXIoLS1tbykiPicrdCsnPC9kaXY+JwogICAgICArcHJlc2VuY2VNZXRhKGwpCiAgICAgICsnPC9kaXY+JzsKICB9KS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINC30LDQv9C40YHQuCDQt9CwINC00L3QtdGBPC9kaXY+JzsKICB2YXIgb2ZmaWNlQm94PShDVSYmQ1UuaXNfYWRtaW49PTEpPyc8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXY+PGRpdiBjbGFzcz0icHQiPvCfk40g0J7RhNC40YEg0LrQvtC90YLRgNC+0Ls8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6MnB4Ij7Ql9Cw0LTQsNC5INC60L7QvtGA0LTQuNC90LDRgtC4INC4INC00L7Qv9GD0YHRgtC40LzQuCBJUCDQsNC00YDQtdGB0LgsINC30LAg0LTQsCDQstC40LbQtNCw0Ygg0LTQsNC70Lgg0YHQu9GD0LbQuNGC0LXQu9GP0YIg0LUg0LIg0L7RhNC40YHQsC48L2Rpdj48L2Rpdj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9Im1vZGFsKFwnb2ZmaWNlXCcpIj7QndCw0YHRgtGA0L7QudC60Lg8L2J1dHRvbj48L2Rpdj48L2Rpdj4nOicnOwogIGVsLmlubmVySFRNTD1vZmZpY2VCb3grJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxOHB4O3BhZGRpbmc6MzJweDttYXJnaW4tYm90dG9tOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym94LXNoYWRvdzp2YXIoLS1zaGQpIj48ZGl2IHN0eWxlPSJmb250LXNpemU6MjBweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tdHgpO21hcmdpbi1ib3R0b206NHB4Ij7wn5GLINCX0LTRgNCw0LLQtdC5LCAnKyhDVT9DVS5uYW1lOicnKSsnICE8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi1ib3R0b206MTZweCI+0J7RgtCx0LXQu9C10LbQuCDRgdCy0L7QtdGC0L4g0L/RgNC40YHRitGB0YLQstC40LU8L2Rpdj4nK2JhZGdlKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjE0cHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LXdyYXA6d3JhcCI+JytidG5zKyc8L2Rpdj48L2Rpdj4nCiAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10eCk7bWFyZ2luLWJvdHRvbToxMnB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDZlbSI+0KHRgtCw0YLRg9GBINC90LAg0LXQutC40L/QsDwvZGl2PicKICAgICsnPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNzVweCwxZnIpKTtnYXA6MTJweDttYXJnaW4tYm90dG9tOjIwcHgiPicrY2FyZHMrJzwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+8J+TiyDQltGD0YDQvdCw0Lsg4oCUICcrdGQrJzwvZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpIj4nK2xvZy5sZW5ndGgrJyDQt9Cw0L/QuNGB0LA8L3NwYW4+PC9kaXY+Jytsb2dSKyc8L2Rpdj4nOwp9Cgphc3luYyBmdW5jdGlvbiBsb2dQKHN0YXR1cyl7CiAgaWYoIUNVfHwhQ1UuaWQpe3RvYXN0KCfQndC1INGB0YLQtSDQstC70LXQt9C70LgnLCdlcnInKTtyZXR1cm47fQogIHZhciBnZW89YXdhaXQgZ2V0UHJlc2VuY2VHZW8oKTsKICB2YXIgcj1hd2FpdCBhZigncHJlc2VuY2UnLCdQT1NUJyxPYmplY3QuYXNzaWduKHt1c2VyX2lkOkNVLmlkLHN0YXR1czpzdGF0dXN9LGdlbykpOwogIGlmKHIhPT1udWxsKXsKICAgIHZhciBNPXthcnJpdmVkOifinJMg0JTQvtCx0YDQtSDQtNC+0YjRitC7IScsYnJlYWs6J+KYlSDQn9GA0LjRj9GC0L3QsCDQv9C+0YfQuNCy0LrQsCEnLGJhY2s6J/Cfkrwg0JTQvtCx0YDQtSDQtNC+0YjRitC7INC+0LHRgNCw0YLQvdC+IScsbGVmdDon8J+RiyDQm9C10LrQsCDQstC10YfQtdGAISd9OwogICAgdG9hc3QoTVtzdGF0dXNdfHwnT0snLCdvaycpOwogICAgYXdhaXQgclByZXNlbmNlKCk7CiAgfWVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgScsJ2VycicpOwp9CgovLyDilIDilIAgQ0FMRU5EQVIg4pSA4pSACmZ1bmN0aW9uIHJDYWxlbmRhcigpewogIHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FsZicpOwogIHZhciB0ZD1uZXcgRGF0ZSgpOwogIGlmKCF3aW5kb3cuX2NhbCl3aW5kb3cuX2NhbD17eWVhcjp0ZC5nZXRGdWxsWWVhcigpLG1vbnRoOnRkLmdldE1vbnRoKCksc2VsOnRkLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCl9OwogIHZhciBzdD13aW5kb3cuX2NhbDsKICB2YXIgZGltPW5ldyBEYXRlKHN0LnllYXIsc3QubW9udGgrMSwwKS5nZXREYXRlKCk7CiAgdmFyIGZkMj1uZXcgRGF0ZShzdC55ZWFyLHN0Lm1vbnRoLDEpLmdldERheSgpOwogIHZhciBvZmY9ZmQyPT09MD82OmZkMi0xOwogIHZhciBNTj1bJ9Cv0L3Rg9Cw0YDQuCcsJ9Ck0LXQstGA0YPQsNGA0LgnLCfQnNCw0YDRgicsJ9CQ0L/RgNC40LsnLCfQnNCw0LknLCfQrtC90LgnLCfQrtC70LgnLCfQkNCy0LPRg9GB0YInLCfQodC10L/RgtC10LzQstGA0LgnLCfQntC60YLQvtC80LLRgNC4Jywn0J3QvtC10LzQstGA0LgnLCfQlNC10LrQtdC80LLRgNC4J107CiAgdmFyIERMPVsn0J/QvScsJ9CS0YInLCfQodGAJywn0KfRgicsJ9Cf0YInLCfQodCxJywn0J3QtCddOwogIHZhciB0ZHM9dGQudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICB2YXIgZGF5cz1ETC5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuICc8ZGl2IGNsYXNzPSJjYWxsIj4nK2QrJzwvZGl2Pic7fSkuam9pbignJyk7CiAgZm9yKHZhciBpPTA7aTxvZmY7aSsrKWRheXMrPSc8ZGl2IGNsYXNzPSJjYWxkYXkgb20iPjwvZGl2Pic7CiAgZm9yKHZhciBkPTE7ZDw9ZGltO2QrKyl7CiAgICB2YXIgZHM9c3QueWVhcisnLScrU3RyaW5nKHN0Lm1vbnRoKzEpLnBhZFN0YXJ0KDIsJzAnKSsnLScrU3RyaW5nKGQpLnBhZFN0YXJ0KDIsJzAnKTsKICAgIHZhciBkdHM9RC50YXNrcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHVlX2RhdGUmJnQuZHVlX2RhdGUuc2xpY2UoMCwxMCk9PT1kczt9KTsKICAgIHZhciBldj1kdHMuc2xpY2UoMCwyKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICc8ZGl2IGNsYXNzPSJjYWxldiI+Jyt0LnRleHQuc2xpY2UoMCwxMikrJzwvZGl2Pic7fSkuam9pbignJyk7CiAgICBkYXlzKz0nPGRpdiBjbGFzcz0iY2FsZGF5JysoZHM9PT10ZHM/JyB0b2RheSc6JycpKyhkcz09PXN0LnNlbD8nIHNlbCc6JycpKyciIG9uY2xpY2s9IndpbmRvdy5fY2FsLnNlbD1cJycrZHMrJ1wnO3JDYWxlbmRhcigpIj48ZGl2IGNsYXNzPSJjYWxkbiI+JytkKyc8L2Rpdj4nK2V2KyhkdHMubGVuZ3RoPjI/JzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo5cHg7Y29sb3I6dmFyKC0tdHgzKSI+KycrKGR0cy5sZW5ndGgtMikrJzwvZGl2Pic6JycpKyc8L2Rpdj4nOwogIH0KICB2YXIgcmVtPShvZmYrZGltKSU3O2lmKHJlbSlmb3IodmFyIGQyPTE7ZDI8PTctcmVtO2QyKyspZGF5cys9JzxkaXYgY2xhc3M9ImNhbGRheSBvbSI+PC9kaXY+JzsKICB2YXIgc1Q9RC50YXNrcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHVlX2RhdGUmJnQuZHVlX2RhdGUuc2xpY2UoMCwxMCk9PT1zdC5zZWw7fSk7CiAgdmFyIHNERD1uZXcgRGF0ZShzdC5zZWwrJ1QxMjowMDowMCcpLnRvTG9jYWxlRGF0ZVN0cmluZygnYmctQkcnLHt3ZWVrZGF5Oidsb25nJyxkYXk6J251bWVyaWMnLG1vbnRoOidsb25nJ30pOwogIHZhciB1cD1ELnRhc2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5kdWVfZGF0ZSYmdC5kb25lIT0xJiZ0LmR1ZV9kYXRlPj10ZHM7fSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLmR1ZV9kYXRlLmxvY2FsZUNvbXBhcmUoYi5kdWVfZGF0ZSk7fSkuc2xpY2UoMCw4KTsKICBlbC5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImNhbGciPjxkaXY+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjE0cHgiPjxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHgiPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0id2luZG93Ll9jYWwubW9udGgtLTtpZih3aW5kb3cuX2NhbC5tb250aDwwKXt3aW5kb3cuX2NhbC5tb250aD0xMTt3aW5kb3cuX2NhbC55ZWFyLS07fXJDYWxlbmRhcigpIj7igLk8L2J1dHRvbj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpIj4nK01OW3N0Lm1vbnRoXSsnICcrc3QueWVhcisnPC9kaXY+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJ3aW5kb3cuX2NhbC5tb250aCsrO2lmKHdpbmRvdy5fY2FsLm1vbnRoPjExKXt3aW5kb3cuX2NhbC5tb250aD0wO3dpbmRvdy5fY2FsLnllYXIrKzt9ckNhbGVuZGFyKCkiPuKAujwvYnV0dG9uPjwvZGl2PjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJtb2RhbChcJ2NhbFRhc2tcJyxcJycrc3Quc2VsKydcJykiPisg0JfQsNC00LDRh9CwINGBINC00LDRgtCwPC9idXR0b24+PC9kaXY+PGRpdiBjbGFzcz0iY2FsZCI+JytkYXlzKyc8L2Rpdj48L2Rpdj4nCiAgICArJzxkaXY+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+JytzREQrJzwvZGl2PjxidXR0b24gY2xhc3M9InBhIiBvbmNsaWNrPSJtb2RhbChcJ2NhbFRhc2tcJyxcJycrc3Quc2VsKydcJykiPisg0JfQsNC00LDRh9CwPC9idXR0b24+PC9kaXY+Jysoc1QubGVuZ3RoP3NULm1hcCh0SFRNTCkuam9pbignJyk6JzxkaXYgc3R5bGU9InBhZGRpbmc6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxMnB4Ij7QndGP0LzQsCDQt9Cw0LTQsNGH0Lgg0LfQsCDQtNC10L3RjzwvZGl2PicpKyc8L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPvCfk4sg0J/RgNC10LTRgdGC0L7Rj9GJ0Lg8L2Rpdj48L2Rpdj4nKyh1cC5sZW5ndGg/dXAubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAnPGRpdiBjbGFzcz0idGkiIG9uY2xpY2s9InRvZ0NhbFQoXCcnK3QuaWQrJ1wnKSI+PGRpdiBjbGFzcz0idGNrIj48L2Rpdj48ZGl2IHN0eWxlPSJmbGV4OjEiPjxkaXYgY2xhc3M9InR0eCI+Jyt0LnRleHQrJzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoycHgiPicrbmV3IERhdGUodC5kdWVfZGF0ZSsnVDEyOjAwOjAwJykudG9Mb2NhbGVEYXRlU3RyaW5nKCdiZy1CRycse2RheTonbnVtZXJpYycsbW9udGg6J3Nob3J0J30pKycgwrcgJysodC5hc3NpZ25lZXx8J+KAlCcpKyc8L2Rpdj48L2Rpdj4nKyh0LnVyZ2VudD09MT8nPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXJlZCkiPuKaoDwvc3Bhbj4nOicnKSsnPC9kaXY+Jzt9KS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINC/0YDQtdC00YHRgtC+0Y/RidC4PC9kaXY+JykrJzwvZGl2PjwvZGl2PjwvZGl2Pic7Cn0KYXN5bmMgZnVuY3Rpb24gdG9nQ2FsVChpZCl7CiAgdmFyIHQ9RC50YXNrcy5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiB4LmlkPT09aWQ7fSk7aWYoIXQpcmV0dXJuOwogIHQuZG9uZT10LmRvbmU9PTE/MDoxOwogIGF3YWl0IGFmKCd0YXNrcycsJ1BPU1QnLHtpZDp0LmlkLHRleHQ6dC50ZXh0LGFzc2lnbmVlOnQuYXNzaWduZWUsdXJnZW50OnQudXJnZW50LGRvbmU6dC5kb25lLGR1ZV9kYXRlOnQuZHVlX2RhdGV8fG51bGx9KTsKICByQ2FsZW5kYXIoKTt0b2FzdCh0LmRvbmU9PTE/J+KckyDQmNC30L/RitC70L3QtdC90LAnOifQktGK0YDQvdCw0YLQsCcsJ29rJyk7Cn0KCi8vIOKUgOKUgCBUQVJHRVRTIE5BViBIRUxQRVJTIOKUgOKUgApmdW5jdGlvbiB0Z1ByZXZEYXkoKXsKICB2YXIgZD1uZXcgRGF0ZShfdGdEYXRlKydUMTI6MDA6MDAnKTsKICBkLnNldERhdGUoZC5nZXREYXRlKCktMSk7CiAgX3RnRGF0ZT1kLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgclRhcmdldHMoKTsKfQpmdW5jdGlvbiB0Z05leHREYXkoKXsKICB2YXIgZD1uZXcgRGF0ZShfdGdEYXRlKydUMTI6MDA6MDAnKTsKICBkLnNldERhdGUoZC5nZXREYXRlKCkrMSk7CiAgX3RnRGF0ZT1kLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgclRhcmdldHMoKTsKfQpmdW5jdGlvbiB0Z1RvZGF5KCl7CiAgX3RnRGF0ZT1uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgclRhcmdldHMoKTsKfQoKLy8g4pSA4pSAIFdPUksgUkVQT1JUIEhFTFBFUlMg4pSA4pSACmZ1bmN0aW9uIHdyVXBkYXRlKCl7CiAgdmFyIGY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dyRnJvbScpOwogIHZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3clRvJyk7CiAgaWYoZil3aW5kb3cuX3dyRnJvbT1mLnZhbHVlOwogIGlmKHQpd2luZG93Ll93clRvPXQudmFsdWU7CiAgcldvcmtSZXBvcnQoKTsKfQpmdW5jdGlvbiB3clRoaXNNb250aCgpewogIHZhciBkPW5ldyBEYXRlKCk7CiAgd2luZG93Ll93ckZyb209ZC5nZXRGdWxsWWVhcigpKyctJytTdHJpbmcoZC5nZXRNb250aCgpKzEpLnBhZFN0YXJ0KDIsJzAnKSsnLTAxJzsKICB3aW5kb3cuX3dyVG89ZC50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApOwogIHJXb3JrUmVwb3J0KCk7Cn0KZnVuY3Rpb24gd3JMYXN0NygpewogIHZhciBkPW5ldyBEYXRlKCk7ZC5zZXREYXRlKGQuZ2V0RGF0ZSgpLTcpOwogIHdpbmRvdy5fd3JGcm9tPWQudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICB3aW5kb3cuX3dyVG89bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApOwogIHJXb3JrUmVwb3J0KCk7Cn0KCgovLyDilIDilIAgVEFSR0VUUyDilIDilIAKdmFyIF90Z0RhdGUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7Cgphc3luYyBmdW5jdGlvbiByVGFyZ2V0cygpewogIHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGdmJyk7CiAgZWwuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2Pic7CiAgdmFyIGRhdGE9YXdhaXQgYWYoJ3RhcmdldHMnLG51bGwsbnVsbCwnJmRhdGU9JytfdGdEYXRlKTsKICB2YXIgdGFyZ2V0cz1kYXRhfHxbXTsKCiAgdmFyIGlzQWRtaW49Q1UmJkNVLmlzX2FkbWluPT0xOwogIHZhciB0b2RheT1uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgdmFyIGRhdGVTdHI9bmV3IERhdGUoX3RnRGF0ZSsnVDEyOjAwOjAwJykudG9Mb2NhbGVEYXRlU3RyaW5nKCdiZy1CRycse3dlZWtkYXk6J2xvbmcnLGRheTonbnVtZXJpYycsbW9udGg6J2xvbmcnfSk7CgogIC8vIERhdGUgbmF2CiAgdmFyIG5hdjI9JzxkaXYgY2xhc3M9InBhbmVsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPvCfjq8g0JTQvdC10LLQvdC4INGC0LDRgNCz0LXRgtC4PC9kaXY+JwogICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXIiPicKICAgICsnPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJ0Z1ByZXZEYXkoKSI+4oC5PC9idXR0b24+JwogICAgKyc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KSI+JytkYXRlU3RyKyc8L3NwYW4+JwogICAgKyc8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9InRnTmV4dERheSgpIj7igLo8L2J1dHRvbj4nCiAgICArJzxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0idGdUb2RheSgpIj7QlNC90LXRgTwvYnV0dG9uPicKICAgICsoaXNBZG1pbj8nPGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im9wZW5UZ01vZGFsKCkiPisg0J3QvtCyINGC0LDRgNCz0LXRgjwvYnV0dG9uPic6JycpCiAgICArJzwvZGl2PjwvZGl2PjwvZGl2Pic7CgogIGlmKCF0YXJnZXRzLmxlbmd0aCl7CiAgICBlbC5pbm5lckhUTUw9bmF2MisnPGRpdiBzdHlsZT0icGFkZGluZzo1MHB4IDIwcHg7dGV4dC1hbGlnbjpjZW50ZXIiPicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6NDBweDttYXJnaW4tYm90dG9tOjEycHgiPvCfjq88L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4Mik7bWFyZ2luLWJvdHRvbTo2cHgiPtCd0Y/QvNCwINGC0LDRgNCz0LXRgtC4INC30LAgJytkYXRlU3RyKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjE2cHgiPtCQ0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0YrRgiDQvNC+0LbQtSDQtNCwINC00L7QsdCw0LLQuCDQvdC+0LLQuCDRgtCw0YDQs9C10YLQuDwvZGl2PicKICAgICAgKyhpc0FkbWluPyc8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ib3BlblRnTW9kYWwoKSI+KyDQlNC+0LHQsNCy0Lgg0YLQsNGA0LPQtdGCPC9idXR0b24+JzonJykKICAgICAgKyc8L2Rpdj4nOwogICAgcmV0dXJuOwogIH0KCiAgLy8gR3JvdXAgYnkgdXNlcgogIHZhciBieVVzZXI9e307CiAgdGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uKHQpewogICAgaWYoIWJ5VXNlclt0LnVzZXJfaWRdKSBieVVzZXJbdC51c2VyX2lkXT17bmFtZTp0LnVzZXJfbmFtZSxpbml0aWFsczp0LmluaXRpYWxzLGNvbG9yOnQuY29sb3IsaXRlbXM6W119OwogICAgYnlVc2VyW3QudXNlcl9pZF0uaXRlbXMucHVzaCh0KTsKICB9KTsKCiAgdmFyIGNhcmRzPU9iamVjdC52YWx1ZXMoYnlVc2VyKS5tYXAoZnVuY3Rpb24odSl7CiAgICB2YXIgaXRlbXM9dS5pdGVtcy5tYXAoZnVuY3Rpb24odCl7CiAgICAgIHZhciBwY3Q9TWF0aC5taW4oTWF0aC5yb3VuZCh0LmN1cnJlbnRfdmFsdWUvdC50YXJnZXRfdmFsdWUqMTAwKSwxMDApOwogICAgICB2YXIgaXNNZT1TdHJpbmcodC51c2VyX2lkKT09PVN0cmluZyhDVSYmQ1UuaWQpOwogICAgICB2YXIgaXNEb25lPXBjdD49MTAwOwogICAgICB2YXIgaXNMb3c9cGN0PDUwJiZ0LmN1cnJlbnRfdmFsdWU+MDsKICAgICAgdmFyIGJhckNvbG9yPWlzRG9uZT8nIzIyYzU1ZSc6cGN0Pj03NT8nIzM4YmRmOCc6cGN0Pj01MD8nI2Y1OWUwYic6JyNlZjQ0NDQnOwoKICAgICAgLy8gTW90aXZhdGlvbmFsIG1lc3NhZ2UKICAgICAgdmFyIG1vdGl2TXNnPScnO3ZhciBtb3RpdkNvbG9yPScnOwogICAgICBpZihpc0RvbmUpeyBtb3Rpdk1zZz0n8J+PhiDQntGC0LvQuNGH0LXQvSDRgNC10LfRg9C70YLQsNGCISDQotCw0YDQs9C10YLRitGCINC1INC40LfQv9GK0LvQvdC10L0hJzsgbW90aXZDb2xvcj0nIzIyYzU1ZSc7IH0KICAgICAgZWxzZSBpZihwY3Q+PTc1KXsgbW90aXZNc2c9J+KtkCDQnNC90L7Qs9C+INC00L7QsdGA0LUhINCf0L7Rh9GC0Lgg0YLQsNC8IOKAlCDQvdC1INGB0LUg0L7RgtC60LDQt9Cy0LDQuSEnOyBtb3RpdkNvbG9yPScjMzhiZGY4JzsgfQogICAgICBlbHNlIGlmKHBjdD49NTApeyBtb3Rpdk1zZz0n8J+RjSDQndCwINC/0L7Qu9C+0LLQuNC90LDRgtCwLiDQodGC0LXQs9C90Lgg0YHQtSDQt9CwINC00LAg0LjQt9C/0YrQu9C90LjRiCDQv9C70LDQvdCwISc7IG1vdGl2Q29sb3I9JyNmNTllMGInOyB9CiAgICAgIGVsc2UgaWYocGN0PjApeyBtb3Rpdk1zZz0n4pqg77iPINCf0L7QtCDQvdC+0YDQvNCw0YLQsC4g0KLRgNGP0LHQstCwINC/0L7QstC10YfQtSDRg9GB0LjQu9C40Y8g4oCUINC30LDQv9C70LDRgtCw0YLQsCDQt9Cw0LLQuNGB0Lgg0L7RgiDRgNC10LfRg9C70YLQsNGC0LAhJzsgbW90aXZDb2xvcj0nI2VmNDQ0NCc7IH0KICAgICAgZWxzZXsgbW90aXZNc2c9J+KPsyDQktGB0LUg0L7RidC1INC90LUg0LUg0LfQsNC/0L7Rh9C90LDRgtC+Lic7IG1vdGl2Q29sb3I9JyM2YjcyODAnOyB9CgogICAgICByZXR1cm4gJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweDttYXJnaW4tYm90dG9tOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpIj4nCiAgICAgICAgLy8gSGVhZGVyCiAgICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDttYXJnaW4tYm90dG9tOjEwcHgiPicKICAgICAgICArJzxkaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4KSI+Jyt0LnRpdGxlKyc8L2Rpdj4nCiAgICAgICAgKyh0LmRlc2NyaXB0aW9uPyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6MnB4Ij4nK3QuZGVzY3JpcHRpb24rJzwvZGl2Pic6JycpCiAgICAgICAgKyc8L2Rpdj4nCiAgICAgICAgKyhpc0FkbWluPyc8YnV0dG9uIGNsYXNzPSJvYnRuIiBzdHlsZT0iY29sb3I6dmFyKC0tcmVkKSIgb25jbGljaz0iZGVsVGcoJyt0LmlkKycpIj7inJU8L2J1dHRvbj4nOicnKQogICAgICAgICsnPC9kaXY+JwogICAgICAgIC8vIFByb2dyZXNzIGJhcgogICAgICAgICsnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjhweCI+JwogICAgICAgICsnPGRpdiBzdHlsZT0iZmxleDoxO2hlaWdodDoxMnB4O2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXItcmFkaXVzOjZweDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpIj4nCiAgICAgICAgKyc8ZGl2IHN0eWxlPSJoZWlnaHQ6MTAwJTt3aWR0aDonK3BjdCsnJTtiYWNrZ3JvdW5kOicrYmFyQ29sb3IrJztib3JkZXItcmFkaXVzOjZweDt0cmFuc2l0aW9uOndpZHRoIC41cyBlYXNlIj48L2Rpdj4nCiAgICAgICAgKyc8L2Rpdj4nCiAgICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7Zm9udC1mYW1pbHk6dmFyKC0tbW8pO2NvbG9yOicrYmFyQ29sb3IrJzttaW4td2lkdGg6NDBweDt0ZXh0LWFsaWduOnJpZ2h0Ij4nK3BjdCsnJTwvZGl2PicKICAgICAgICArJzwvZGl2PicKICAgICAgICAvLyBOdW1iZXJzCiAgICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTBweCI+JwogICAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgzKSI+0JjQt9C/0YrQu9C90LXQvdC+OiA8c3Ryb25nIHN0eWxlPSJjb2xvcjp2YXIoLS10eCk7Zm9udC1mYW1pbHk6dmFyKC0tbW8pIj4nK3QuY3VycmVudF92YWx1ZSsnICcrdC51bml0Kyc8L3N0cm9uZz48L2Rpdj4nCiAgICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpIj7QotCw0YDQs9C10YI6IDxzdHJvbmcgc3R5bGU9ImNvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1tbykiPicrdC50YXJnZXRfdmFsdWUrJyAnK3QudW5pdCsnPC9zdHJvbmc+PC9kaXY+JwogICAgICAgICsnPC9kaXY+JwogICAgICAgIC8vIE1vdGl2YXRpb25hbCBtc2cKICAgICAgICArJzxkaXYgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDonK21vdGl2Q29sb3IrJzEyO2JvcmRlcjoxcHggc29saWQgJyttb3RpdkNvbG9yKyczMztmb250LXNpemU6MTJweDtjb2xvcjonK21vdGl2Q29sb3IrJztmb250LXdlaWdodDo1MDA7bWFyZ2luLWJvdHRvbTonKyhpc01lJiYhaXNEb25lPycxMCc6JzAnKSsncHgiPicrbW90aXZNc2crJzwvZGl2PicKICAgICAgICAvLyBVcGRhdGUgYnV0dG9uIChvbmx5IGZvciBhc3NpZ25lZCB1c2VyIG9yIGFkbWluKQogICAgICAgICsoKGlzTWV8fGlzQWRtaW4pJiYhaXNEb25lPyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXRvcDoxMHB4Ij4nCiAgICAgICAgICArJzxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ0Z19pbnBfJyt0LmlkKyciIG1pbj0iMCIgbWF4PSInK3QudGFyZ2V0X3ZhbHVlKyciIHZhbHVlPSInK3QuY3VycmVudF92YWx1ZSsnIiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjdweCAxMHB4O2NvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEzcHg7b3V0bGluZTpub25lO3dpZHRoOjEwMHB4Ij4nCiAgICAgICAgICArJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpIj4nK3QudW5pdCsnPC9zcGFuPicKICAgICAgICAgICsnPGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9InVwZGF0ZVRnKCcrdC5pZCsnLCcrdC50YXJnZXRfdmFsdWUrJykiPtCe0LHQvdC+0LLQuCDQv9GA0L7Qs9GA0LXRgTwvYnV0dG9uPicKICAgICAgICAgICsoaXNEb25lPycnOic8YnV0dG9uIGNsYXNzPSJidG4iIHN0eWxlPSJib3JkZXItY29sb3I6dmFyKC0tZ3JuKTtjb2xvcjp2YXIoLS1ncm4pIiBvbmNsaWNrPSJ1cGRhdGVUZ0Z1bGwoJyt0LmlkKycsJyt0LnRhcmdldF92YWx1ZSsnKSI+4pyTINCY0LfQv9GK0LvQvdC10L0hPC9idXR0b24+JykKICAgICAgICAgICsnPC9kaXY+JzonJykKICAgICAgICArJzwvZGl2Pic7CiAgICB9KS5qb2luKCcnKTsKCiAgICB2YXIgY29sPXUuY29sb3J8fCdhdi1wJzsKICAgIHZhciBkb25lQ291bnQ9dS5pdGVtcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC5jdXJyZW50X3ZhbHVlL3QudGFyZ2V0X3ZhbHVlKjEwMCk+PTEwMDt9KS5sZW5ndGg7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9InBhbmVsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij4nCiAgICAgICsnPGRpdiBjbGFzcz0icGgiPjxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHgiPicKICAgICAgKyc8ZGl2IGNsYXNzPSJhdiAnK2NvbCsnIiBzdHlsZT0id2lkdGg6MzRweDtoZWlnaHQ6MzRweDtmb250LXNpemU6MTNweCI+JysodS5pbml0aWFsc3x8Jz8nKSsnPC9kaXY+JwogICAgICArJzxkaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4KSI+Jyt1Lm5hbWUrJzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpIj4nK2RvbmVDb3VudCsnLycrdS5pdGVtcy5sZW5ndGgrJyDRgtCw0YDQs9C10YLQsCDQuNC30L/RitC70L3QtdC90Lg8L2Rpdj48L2Rpdj4nCiAgICAgICsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyMHB4Ij4nKyggZG9uZUNvdW50PT09dS5pdGVtcy5sZW5ndGg/J/Cfj4YnOmRvbmVDb3VudD4wPyfimqEnOifij7MnKSsnPC9kaXY+JwogICAgICArJzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJwYWRkaW5nOjE0cHggMTdweCI+JytpdGVtcysnPC9kaXY+JwogICAgICArJzwvZGl2Pic7CiAgfSkuam9pbignJyk7CgogIGVsLmlubmVySFRNTD1uYXYyK2NhcmRzOwp9Cgphc3luYyBmdW5jdGlvbiB1cGRhdGVUZyhpZCwgbWF4VmFsKXsKICB2YXIgaW5wPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0Z19pbnBfJytpZCk7CiAgaWYoIWlucClyZXR1cm47CiAgdmFyIHZhbD1wYXJzZUludChpbnAudmFsdWUpfHwwOwogIGlmKHZhbD5tYXhWYWwpdmFsPW1heFZhbDsKICB2YXIgc3RhdHVzPXZhbD49bWF4VmFsPydkb25lJzonYWN0aXZlJzsKICB2YXIgcj1hd2FpdCBhZigndGFyZ2V0cycsJ1BPU1QnLHtpZDppZCxjdXJyZW50X3ZhbHVlOnZhbCxzdGF0dXM6c3RhdHVzfSk7CiAgaWYociE9PW51bGwpewogICAgdG9hc3QodmFsPj1tYXhWYWw/J/Cfj4Yg0KLQsNGA0LPQtdGC0YrRgiDQtSDQuNC30L/RitC70L3QtdC9ISc6J+KckyDQn9GA0L7Qs9GA0LXRgdGK0YIg0LUg0L7QsdC90L7QstC10L0hJywnb2snKTsKICAgIHJUYXJnZXRzKCk7CiAgfSBlbHNlIHRvYXN0KCfQk9GA0LXRiNC60LAnLCdlcnInKTsKfQoKYXN5bmMgZnVuY3Rpb24gdXBkYXRlVGdGdWxsKGlkLCBtYXhWYWwpewogIHZhciByPWF3YWl0IGFmKCd0YXJnZXRzJywnUE9TVCcse2lkOmlkLGN1cnJlbnRfdmFsdWU6bWF4VmFsLHN0YXR1czonZG9uZSd9KTsKICBpZihyIT09bnVsbCl7dG9hc3QoJ/Cfj4Yg0KLQsNGA0LPQtdGC0YrRgiDQtSDQuNC30L/RitC70L3QtdC9IScsJ29rJyk7clRhcmdldHMoKTt9CiAgZWxzZSB0b2FzdCgn0JPRgNC10YjQutCwJywnZXJyJyk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGRlbFRnKGlkKXsKICBpZighY29uZmlybSgn0JjQt9GC0YDQuNC5INGC0LDRgNCz0LXRgtCwPycpKXJldHVybjsKICBhd2FpdCBhZigndGFyZ2V0cycsJ0RFTEVURScsbnVsbCwnJmlkPScraWQpOwogIHRvYXN0KCfQmNC30YLRgNC40YLQvicpO3JUYXJnZXRzKCk7Cn0KCmZ1bmN0aW9uIG9wZW5UZ01vZGFsKCl7CiAgaWYoIUQudXNlcnMubGVuZ3RoKXt0b2FzdCgn0JfQsNGA0LXQttC00LAg0L/QvtGC0YDQtdCx0LjRgtC10LvQuNGC0LUuLi4nLCcnKTtyZXR1cm47fQogIHZhciBodG1sPSc8aDM+8J+OryDQndC+0LIg0YLQsNGA0LPQtdGCPC9oMz4nCiAgICArJzxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JfQsNCz0LvQsNCy0LjQtTwvbGFiZWw+PGlucHV0IGlkPSJ0Z1RpIiBwbGFjZWhvbGRlcj0i0L3QsNC/0YAuINCa0LDRh9Cy0LDQvdC1INC90LAg0L/RgNC+0LTRg9C60YLQuCwg0J7QsdCw0LbQtNCw0L3QuNGPLCDQntGE0LXRgNGC0LguLi4iPjwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QntC/0LjRgdCw0L3QuNC1ICjQv9C+INC40LfQsdC+0YApPC9sYWJlbD48aW5wdXQgaWQ9InRnRGUiIHBsYWNlaG9sZGVyPSLQlNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0LTQtdGC0LDQudC70LgiPjwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0ibWciPicKICAgICsnPGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QotCw0YDQs9C10YIgKNCx0YDQvtC5KTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InRnVHYiIHBsYWNlaG9sZGVyPSIzMDAiIG1pbj0iMSI+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCV0LTQuNC90LjRhtCwPC9sYWJlbD48aW5wdXQgaWQ9InRnVW4iIHBsYWNlaG9sZGVyPSLQsdGALiwg0L/RgNC+0LTRg9C60YLQsCwg0L7RhNC10YDRgtC4Li4uIiB2YWx1ZT0i0LHRgC4iPjwvZGl2PicKICAgICsnPC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtZyI+JwogICAgKyc8ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCh0LvRg9C20LjRgtC10Ls8L2xhYmVsPjxzZWxlY3QgaWQ9InRnVXMiPicrRC51c2Vycy5tYXAoZnVuY3Rpb24odSl7cmV0dXJuICc8b3B0aW9uIHZhbHVlPSInK3UuaWQrJyI+Jyt1Lm5hbWUrKHUucm9sZT8nICgnK3Uucm9sZSsnKSc6JycpKyc8L29wdGlvbj4nO30pLmpvaW4oJycpKyc8L3NlbGVjdD48L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JTQsNGC0LA8L2xhYmVsPjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0idGdEdCIgdmFsdWU9IicrX3RnRGF0ZSsnIj48L2Rpdj4nCiAgICArJzwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0ibWEiPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY21vKCkiPtCe0YLQutCw0Lc8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ic2F2ZVRnKCkiPtCh0YrQt9C00LDQuSDRgtCw0YDQs9C10YI8L2J1dHRvbj48L2Rpdj4nOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYicpLmlubmVySFRNTD1odG1sOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtbycpLmNsYXNzTGlzdC5hZGQoJ29wZW4nKTsKfQoKYXN5bmMgZnVuY3Rpb24gc2F2ZVRnKCl7CiAgdmFyIHRpdGxlPWd2KCd0Z1RpJyk7aWYoIXRpdGxlKXt0b2FzdCgn0JLRitCy0LXQtNC10YLQtSDQt9Cw0LPQu9Cw0LLQuNC1JywnZXJyJyk7cmV0dXJuO30KICB2YXIgdHY9cGFyc2VJbnQoZ3YoJ3RnVHYnKSk7aWYoIXR2fHx0djwxKXt0b2FzdCgn0JLRitCy0LXQtNC10YLQtSDRgtCw0YDQs9C10YIg0YHRgtC+0LnQvdC+0YHRgicsJ2VycicpO3JldHVybjt9CiAgdmFyIHVzZXJJZD1ndigndGdVcycpO2lmKCF1c2VySWQpe3RvYXN0KCfQmNC30LHQtdGA0LXRgtC1INGB0LvRg9C20LjRgtC10LsnLCdlcnInKTtyZXR1cm47fQogIHZhciByPWF3YWl0IGFmKCd0YXJnZXRzJywnUE9TVCcsewogICAgdXNlcl9pZDp1c2VySWQsIGNyZWF0ZWRfYnk6Q1UuaWQsCiAgICB0aXRsZTp0aXRsZSwgZGVzY3JpcHRpb246Z3YoJ3RnRGUnKSwKICAgIHRhcmdldF92YWx1ZTp0diwgY3VycmVudF92YWx1ZTowLAogICAgdW5pdDpndigndGdVbicpfHwn0LHRgC4nLCBkYXRlOmd2KCd0Z0R0Jyl8fF90Z0RhdGUKICB9KTsKICBpZihyKXsKICAgIGNtbygpOwogICAgdG9hc3QoJ9Ci0LDRgNCz0LXRgtGK0YIg0LUg0YHRitC30LTQsNC00LXQvSEnLCdvaycpOwogICAgLy8gU2VuZCB0ZWxlZ3JhbSBub3RpZmljYXRpb24KICAgIHJUYXJnZXRzKCk7CiAgfSBlbHNlIHRvYXN0KCfQk9GA0LXRiNC60LAnLCdlcnInKTsKfQoKCi8vIOKUgOKUgCBXT1JLIFJFUE9SVCDilIDilIAKYXN5bmMgZnVuY3Rpb24gcldvcmtSZXBvcnQoKXsKICB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dyZicpOwogIGVsLmlubmVySFRNTD0nPGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj4nOwoKICAvLyBEYXRlIHJhbmdlIHBpY2tlcgogIHZhciB0b2RheT1uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgdmFyIGZpcnN0T2ZNb250aD10b2RheS5zbGljZSgwLDgpKycwMSc7CgogIC8vIExvYWQgcmVwb3J0CiAgdmFyIGZyb209d2luZG93Ll93ckZyb218fGZpcnN0T2ZNb250aDsKICB2YXIgdG89d2luZG93Ll93clRvfHx0b2RheTsKCiAgdmFyIGRhdGE9YXdhaXQgYWYoJ3ByZXNlbmNlX3JlcG9ydCcsbnVsbCxudWxsLCcmZnJvbT0nK2Zyb20rJyZ0bz0nK3RvKTsKICBpZighZGF0YSl7ZWwuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tdHgzKSI+0J3Rj9C80LAg0LTQsNC90L3QuCDQt9CwINC40LfQsdGA0LDQvdC40Y8g0L/QtdGA0LjQvtC0PC9kaXY+JztyZXR1cm47fQoKICB2YXIgdXNlcnM9ZGF0YS51c2Vyc3x8W107CiAgdmFyIFNUQVRVU19MQUJFTFM9e2Fycml2ZWQ6J9Cf0YDQuNGB0YLQuNCz0L3QsCcsYnJlYWs6J9Cf0L7Rh9C40LLQutCwJyxiYWNrOifQktGK0YDQvdCwINGB0LUnLGxlZnQ6J9Ci0YDRitCz0L3QsCcsdG9pbGV0OifQotC+0LDQu9C10YLQvdCwJyxzbW9rZTon0KbQuNCz0LDRgNCwJyxzbW9rZV9iYWNrOifQodC70LXQtCDRhtC40LPQsNGA0LAnfTsKICB2YXIgU1RBVFVTX0NPTE9SUz17YXJyaXZlZDonIzIyYzU1ZScsYnJlYWs6JyNmNTllMGInLGJhY2s6JyMzOGJkZjgnLGxlZnQ6JyNlZjQ0NDQnLHRvaWxldDonIzhiNWNmNicsc21va2U6JyM2YjcyODAnLHNtb2tlX2JhY2s6JyMzOGJkZjgnfTsKCiAgLy8gTW90aXZhdGlvbmFsIG1lc3NhZ2VzIGJhc2VkIG9uIGhvdXJzCiAgZnVuY3Rpb24gbW90aXYoaG91cnMsIGRheXNXb3JrZWQpewogICAgaWYoaG91cnM8PTApIHJldHVybiB7bXNnOifQndGP0LzQsCDQt9Cw0L/QuNGB0LDQvdC+INC/0YDQuNGB0YrRgdGC0LLQuNC1INC30LAg0L/QtdGA0LjQvtC00LAuJyxjb2xvcjonIzZiNzI4MCcsaWNvbjon4p2TJ307CiAgICB2YXIgYXZnPWRheXNXb3JrZWQ+MD9ob3Vycy9kYXlzV29ya2VkOjA7CiAgICBpZihhdmc+PTgpIHJldHVybiB7bXNnOifQntGC0LvQuNGH0L3QviEg0J/RitC70LXQvSDRgNCw0LHQvtGC0LXQvSDQtNC10L0g0LLRgdC10LrQuCDQtNC10L0uINCX0LDQv9C70LDRgtCw0YLQsCDRgdC1INC40LfRh9C40YHQu9GP0LLQsCDQvdCwINCx0LDQt9CwINC+0YLRgNCw0LHQvtGC0LXQvdC40YLQtSDRh9Cw0YHQvtCy0LUuJyxjb2xvcjonIzIyYzU1ZScsaWNvbjon8J+Phid9OwogICAgaWYoYXZnPj03KSByZXR1cm4ge21zZzon0JzQvdC+0LPQviDQtNC+0LHRgNC1ISDQn9C+0YfRgtC4INC/0YrQu9C90Lgg0YDQsNCx0L7RgtC90Lgg0LTQvdC4LiDQn9GA0L7QtNGK0LvQttCw0LLQsNC5INGC0LDQutCwIScsY29sb3I6JyMyMmM1NWUnLGljb246J+KtkCd9OwogICAgaWYoYXZnPj02KSByZXR1cm4ge21zZzon0JTQvtCx0YDQtS4g0JjQvNCwINC80Y/RgdGC0L4g0LfQsCDQv9C+0LTQvtCx0YDQtdC90LjQtSDigJQg0L/RitC70L3QuNGP0YIg0YDQsNCx0L7RgtC10L0g0LTQtdC9INC1IDgg0YfQsNGB0LAuJyxjb2xvcjonI2Y1OWUwYicsaWNvbjon8J+RjSd9OwogICAgaWYoYXZnPj00KSByZXR1cm4ge21zZzon0J/QvtC0INGB0YDQtdC00L3QvtGC0L4uINCX0LDQv9C70LDRgtCw0YLQsCDRgdC1INCy0LvQuNGP0LUg0L7RgiDQvtGC0YDQsNCx0L7RgtC10L3QuNGC0LUg0YfQsNGB0L7QstC1LicsY29sb3I6JyNmNTllMGInLGljb246J+KaoO+4jyd9OwogICAgcmV0dXJuIHttc2c6J9Cd0LXQtNC+0YHRgtCw0YLRitGH0L3QviDQv9GA0LjRgdGK0YHRgtCy0LjQtS4g0JzQvtC70Y8sINGB0L/QsNC30LLQsNC50YLQtSDRgNCw0LHQvtGC0L3QvtGC0L4g0LLRgNC10LzQtS4nLGNvbG9yOicjZWY0NDQ0JyxpY29uOifinYwnfTsKICB9CgogIC8vIFN1bW1hcnkgY2FyZHMKICB2YXIgdG90YWxIb3Vycz11c2Vycy5yZWR1Y2UoZnVuY3Rpb24ocyx1KXtyZXR1cm4gcyt1LnRvdGFsX2hvdXJzO30sMCk7CiAgdmFyIHN1bW1hcnk9JzxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTYwcHgsMWZyKSk7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToyMHB4Ij4nCiAgICArJzxkaXYgY2xhc3M9ImtjIj48ZGl2IGNsYXNzPSJrbCI+0J/QtdGA0LjQvtC0PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1tbykiPicrZnJvbSsnPGJyPicrdG8rJzwvZGl2PjwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7QodC70YPQttC40YLQtdC70Lg8L2Rpdj48ZGl2IGNsYXNzPSJrdiBhYyI+Jyt1c2Vycy5sZW5ndGgrJzwvZGl2PjwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7QntCx0YnQviDRh9Cw0YHQsDwvZGl2PjxkaXYgY2xhc3M9Imt2IGciPicrdG90YWxIb3Vycy50b0ZpeGVkKDEpKyfRhzwvZGl2PjwvZGl2PicKICAgICsnPC9kaXY+JzsKCiAgLy8gRGF0ZSByYW5nZSBwaWNrZXIKICB2YXIgcGlja2VyPSc8ZGl2IGNsYXNzPSJwYW5lbCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7wn5OFINCf0LXRgNC40L7QtDwvZGl2PjwvZGl2PicKICAgICsnPGRpdiBzdHlsZT0icGFkZGluZzoxM3B4IDE3cHg7ZGlzcGxheTpmbGV4O2dhcDoxMnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcCI+JwogICAgKyc8ZGl2PjxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDZlbSI+0J7RgjwvbGFiZWw+JwogICAgKyc8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9IndyRnJvbSIgdmFsdWU9IicrZnJvbSsnIiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzo3cHggMTBweDtjb2xvcjp2YXIoLS10eCk7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2ZvbnQtc2l6ZToxMnB4O291dGxpbmU6bm9uZSI+PC9kaXY+JwogICAgKyc8ZGl2PjxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDZlbSI+0JTQvjwvbGFiZWw+JwogICAgKyc8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9IndyVG8iIHZhbHVlPSInK3RvKyciIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjdweCAxMHB4O2NvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEycHg7b3V0bGluZTpub25lIj48L2Rpdj4nCiAgICArJzxidXR0b24gY2xhc3M9ImJ0biBwIiBzdHlsZT0ibWFyZ2luLXRvcDoxOHB4IiBvbmNsaWNrPSJ3clVwZGF0ZSgpIj7QntCx0L3QvtCy0Lg8L2J1dHRvbj4nCiAgICArJzxidXR0b24gY2xhc3M9ImJ0biIgc3R5bGU9Im1hcmdpbi10b3A6MThweCIgb25jbGljaz0id3JUaGlzTW9udGgoKSI+0KLQtdC60YPRiSDQvNC10YHQtdGGPC9idXR0b24+JwogICAgKyc8YnV0dG9uIGNsYXNzPSJidG4iIHN0eWxlPSJtYXJnaW4tdG9wOjE4cHgiIG9uY2xpY2s9IndyTGFzdDcoKSI+0J/QvtGB0LvQtdC00L3QuNGC0LUgNyDQtNC90Lg8L2J1dHRvbj4nCiAgICArJzwvZGl2PjwvZGl2Pic7CgogIC8vIFVzZXIgY2FyZHMKICB2YXIgY2FyZHM9dXNlcnMubWFwKGZ1bmN0aW9uKHUpewogICAgdmFyIG09bW90aXYodS50b3RhbF9ob3VycywgdS5kYXlzX3dvcmtlZCk7CiAgICB2YXIgY29sPXUuY29sb3J8fCdhdi1wJzsKICAgIHZhciBhdmdIPXUuZGF5c193b3JrZWQ+MD8odS50b3RhbF9ob3Vycy91LmRheXNfd29ya2VkKS50b0ZpeGVkKDEpOjA7CgogICAgLy8gRGFpbHkgYnJlYWtkb3duCiAgICB2YXIgZGF5cz1PYmplY3Qua2V5cyh1LmRheXN8fHt9KS5zb3J0KCkubWFwKGZ1bmN0aW9uKGRhdGUpewogICAgICB2YXIgZGF5PXUuZGF5c1tkYXRlXTsKICAgICAgaWYoIWRheS53b3JrX21pbnV0ZXMmJiFkYXkudGltZWxpbmUubGVuZ3RoKSByZXR1cm4gJyc7CiAgICAgIHZhciBkYXlOYW1lPW5ldyBEYXRlKGRhdGUrJ1QxMjowMDowMCcpLnRvTG9jYWxlRGF0ZVN0cmluZygnYmctQkcnLHt3ZWVrZGF5OidzaG9ydCcsZGF5OidudW1lcmljJyxtb250aDonc2hvcnQnfSk7CiAgICAgIHZhciB0aW1lbGluZT1kYXkudGltZWxpbmUubWFwKGZ1bmN0aW9uKGUpewogICAgICAgIHZhciBzYz1TVEFUVVNfQ09MT1JTW2Uuc3RhdHVzXXx8JyM4ODgnOwogICAgICAgIHJldHVybiAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2JhY2tncm91bmQ6JytzYysnMTg7Y29sb3I6JytzYysnO3BhZGRpbmc6MnB4IDZweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC13ZWlnaHQ6NjAwIj4nK2UudGltZSsnICcrKFNUQVRVU19MQUJFTFNbZS5zdGF0dXNdfHxlLnN0YXR1cykrJzwvc3Bhbj4nOwogICAgICB9KS5qb2luKCcg4oaSICcpOwogICAgICB2YXIgaD1kYXkud29ya19ob3VyczsKICAgICAgdmFyIGJhclc9TWF0aC5taW4oaC84KjEwMCwxMDApOwogICAgICB2YXIgYmFyQz1oPj04PycjMjJjNTVlJzpoPj02PycjMzhiZGY4JzpoPj00PycjZjU5ZTBiJzonI2VmNDQ0NCc7CiAgICAgIHJldHVybiAnPGRpdiBzdHlsZT0icGFkZGluZzo4cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpIj4nCiAgICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206NXB4Ij4nCiAgICAgICAgKyc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4MikiPicrZGF5TmFtZSsnPC9zcGFuPicKICAgICAgICArJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Zm9udC1mYW1pbHk6dmFyKC0tbW8pO2NvbG9yOicrYmFyQysnIj4nK2grJ9GHPC9zcGFuPicKICAgICAgICArJzwvZGl2PicKICAgICAgICArJzxkaXYgc3R5bGU9ImhlaWdodDo1cHg7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXItcmFkaXVzOjNweDtvdmVyZmxvdzpoaWRkZW47bWFyZ2luLWJvdHRvbTo1cHgiPicKICAgICAgICArJzxkaXYgc3R5bGU9ImhlaWdodDoxMDAlO3dpZHRoOicrYmFyVysnJTtiYWNrZ3JvdW5kOicrYmFyQysnO2JvcmRlci1yYWRpdXM6M3B4O3RyYW5zaXRpb246d2lkdGggLjRzIGVhc2UiPjwvZGl2PicKICAgICAgICArJzwvZGl2PicKICAgICAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6NHB4O2ZsZXgtd3JhcDp3cmFwIj4nK3RpbWVsaW5lKyc8L2Rpdj4nCiAgICAgICAgKyhkYXkudG9pbGV0X2NvdW50PjA/JzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDozcHgiPvCfmr0gw5cnK2RheS50b2lsZXRfY291bnQrJzwvZGl2Pic6JycpCiAgICAgICAgKyc8L2Rpdj4nOwogICAgfSkuam9pbignJyk7CgogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJwYW5lbCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+JwogICAgICArJzxkaXYgY2xhc3M9InBoIj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweCI+JwogICAgICArJzxkaXYgY2xhc3M9ImF2ICcrY29sKyciIHN0eWxlPSJ3aWR0aDozNnB4O2hlaWdodDozNnB4O2ZvbnQtc2l6ZToxNHB4Ij4nKyh1LmluaXRpYWxzfHwnPycpKyc8L2Rpdj4nCiAgICAgICsnPGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpIj4nK3UubmFtZSsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MykiPicrdS5kYXlzX3dvcmtlZCsnINGA0LDQsdC+0YLQvdC4INC00L3QuCDCtyDRgdGA0LXQtNC90L4gJythdmdIKyfRhy/QtNC10L08L2Rpdj48L2Rpdj4nCiAgICAgICsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MjJweDtmb250LXdlaWdodDo3MDA7Zm9udC1mYW1pbHk6dmFyKC0tbW8pO2NvbG9yOnZhcigtLWFjYzIpIj4nK3UudG90YWxfaG91cnMrJ9GHPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4MykiPtC+0LHRidC+INC30LAg0L/QtdGA0LjQvtC00LA8L2Rpdj4nCiAgICAgICsnPC9kaXY+JwogICAgICArJzwvZGl2PicKICAgICAgLy8gTW90aXZhdGlvbmFsIG1lc3NhZ2UKICAgICAgKyc8ZGl2IHN0eWxlPSJtYXJnaW46MTJweCAxN3B4O3BhZGRpbmc6MTJweCAxNnB4O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOicrbS5jb2xvcisnMTI7Ym9yZGVyOjFweCBzb2xpZCAnK20uY29sb3IrJzMzO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDoxMHB4Ij4nCiAgICAgICsnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxOHB4O2ZsZXgtc2hyaW5rOjAiPicrbS5pY29uKyc8L3NwYW4+JwogICAgICArJzxkaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjonK20uY29sb3IrJzttYXJnaW4tYm90dG9tOjNweCI+0J7RhtC10L3QutCwINC30LAg0L/QtdGA0LjQvtC00LA8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKTtsaW5lLWhlaWdodDoxLjYiPicrbS5tc2crJzwvZGl2PicKICAgICAgKyc8L2Rpdj4nCiAgICAgICsnPC9kaXY+JwogICAgICAvLyBIb3VycyBiYXIKICAgICAgKyc8ZGl2IHN0eWxlPSJwYWRkaW5nOjAgMTdweCAxMnB4Ij4nCiAgICAgICsnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLWJvdHRvbTo1cHgiPicKICAgICAgKyc8c3Bhbj7QntGC0YDQsNCx0L7RgtC10L3QuCDRh9Cw0YHQsDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6dmFyKC0tbW8pIj4nK3UudG90YWxfaG91cnMrJ9GHIC8gJysoIHUuZGF5c193b3JrZWQqOCkrJ9GHINC+0YfQsNC60LLQsNC90Lg8L3NwYW4+JwogICAgICArJzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJoZWlnaHQ6OHB4O2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6aGlkZGVuIj4nCiAgICAgICsnPGRpdiBzdHlsZT0iaGVpZ2h0OjEwMCU7d2lkdGg6JytNYXRoLm1pbih1LnRvdGFsX2hvdXJzLyhNYXRoLm1heCh1LmRheXNfd29ya2VkLDEpKjgpKjEwMCwxMDApKyclO2JhY2tncm91bmQ6dmFyKC0tZ3JuKTtib3JkZXItcmFkaXVzOjRweDt0cmFuc2l0aW9uOndpZHRoIC41cyBlYXNlIj48L2Rpdj4nCiAgICAgICsnPC9kaXY+JwogICAgICArJzwvZGl2PicKICAgICAgLy8gRGFpbHkgYnJlYWtkb3duIHRvZ2dsZQogICAgICArKGRheXM/JzxkZXRhaWxzIHN0eWxlPSJwYWRkaW5nOjAgMTdweCAxNHB4Ij48c3VtbWFyeSBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tYWNjMik7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzo2cHggMDtmb250LXdlaWdodDo2MDAiPtCS0LjQtiDQtNC90LXQstC10L0g0YDQsNC30LHQuNCy0LrQsCDilr48L3N1bW1hcnk+PGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPicrZGF5cysnPC9kaXY+PC9kZXRhaWxzPic6JycpCiAgICAgICsnPC9kaXY+JzsKICB9KS5qb2luKCcnKTsKCiAgLy8gU2FsYXJ5IG5vdGUKICB2YXIgc2FsYXJ5Tm90ZT0nPGRpdiBjbGFzcz0icGFuZWwiIHN0eWxlPSJtYXJnaW4tdG9wOjRweCI+JwogICAgKyc8ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPvCfkqEg0JjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQt9Cw0L/Qu9Cw0YnQsNC90LXRgtC+PC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IHN0eWxlPSJwYWRkaW5nOjE2cHggMjBweDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10eDIpO2xpbmUtaGVpZ2h0OjEuOCI+JwogICAgKyfQl9Cw0L/Qu9Cw0YLQsNGC0LAg0L3QsCDQstGB0LXQutC4INGB0LvRg9C20LjRgtC10Lsg0YHQtSDQuNC30YfQuNGB0LvRj9Cy0LAg0L3QsCDQsdCw0LfQsCA8c3Ryb25nIHN0eWxlPSJjb2xvcjp2YXIoLS10eCkiPtGA0LXQsNC70L3QviDQvtGC0YDQsNCx0L7RgtC10L3QuNGC0LUg0YfQsNGB0L7QstC1PC9zdHJvbmc+INC30LAg0LzQtdGB0LXRhtCwLCDQvtGC0YfQtdGC0LXQvdC4INGH0YDQtdC3INGB0LjRgdGC0LXQvNCw0YLQsCDQt9CwINC/0YDQuNGB0YrRgdGC0LLQuNC1Ljxicj48YnI+JwogICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDIwMHB4LDFmcikpO2dhcDoxMHB4O21hcmdpbi10b3A6MTBweCI+JwogICAgKyc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWdkaW0pO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEycHggMTRweCI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWdybik7bWFyZ2luLWJvdHRvbTo0cHgiPvCfj4Yg0J7RgtC70LjRh9C90L4gKOKJpTjRhy/QtNC10L0pPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgyKSI+0J/RitC70L3QsCDQt9Cw0L/Qu9Cw0YLQsCArINCx0L7QvdGD0YE8L2Rpdj48L2Rpdj4nCiAgICArJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYmRpbSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTJweCAxNHB4Ij48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tYmx1KTttYXJnaW4tYm90dG9tOjRweCI+4q2QINCU0L7QsdGA0LUgKDctONGHL9C00LXQvSk8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDIpIj7Qn9GK0LvQvdCwINC30LDQv9C70LDRgtCwPC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWFkaW0pO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEycHggMTRweCI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWFtYik7bWFyZ2luLWJvdHRvbTo0cHgiPuKaoO+4jyDQodGA0LXQtNC90L4gKDYtN9GHL9C00LXQvSk8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDIpIj7Ql9Cw0L/Qu9Cw0YLQsCAtMTAlPC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLXJkaW0pO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEycHggMTRweCI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLXJlZCk7bWFyZ2luLWJvdHRvbTo0cHgiPuKdjCDQn9C+0LQg0L3QvtGA0LzQsCAoPDbRhy/QtNC10L0pPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgyKSI+0JfQsNC/0LvQsNGC0LAg0L/RgNC+0L/QvtGA0YbQuNC+0L3QsNC70L3QsCDQvdCwINGH0LDRgdC+0LLQtdGC0LU8L2Rpdj48L2Rpdj4nCiAgICArJzwvZGl2PicKICAgICsnPC9kaXY+PC9kaXY+JzsKCiAgaWYoIXVzZXJzLmxlbmd0aCl7CiAgICBlbC5pbm5lckhUTUw9cGlja2VyKyc8ZGl2IHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tdHgzKTtmb250LXNpemU6MTNweCI+0J3Rj9C80LAg0LTQsNC90L3QuCDQt9CwINC40LfQsdGA0LDQvdC40Y8g0L/QtdGA0LjQvtC0Ljxicj7QodC70YPQttC40YLQtdC70LjRgtC1INGC0YDRj9Cx0LLQsCDQtNCwINC+0YLQsdC10LvRj9C30LLQsNGCINC/0YDQuNGB0YrRgdGC0LLQuNC1LjwvZGl2Pic7CiAgICByZXR1cm47CiAgfQoKICBlbC5pbm5lckhUTUw9cGlja2VyK3N1bW1hcnkrY2FyZHMrc2FsYXJ5Tm90ZTsKfQoKCmZ1bmN0aW9uIHNjYW5GaWVsZHMoc2MpewogIHRyeXtyZXR1cm4gSlNPTi5wYXJzZShzYy5leHRyYWN0ZWR8fCd7fScpfHx7fTt9Y2F0Y2goZSl7cmV0dXJuIHt9O30KfQphc3luYyBmdW5jdGlvbiByZWZyZXNoQWlTY2FucygpewogIEQuYWlfc2NhbnM9YXdhaXQgYWYoJ2FpX3NjYW5zJyl8fFtdOwogIHJBaVNjYW5zKCk7Cn0KZnVuY3Rpb24gc3RhcnRBaUF1dG9SZWZyZXNoKCl7CiAgaWYoYWlRclBvbGwpY2xlYXJJbnRlcnZhbChhaVFyUG9sbCk7CiAgdmFyIHRpY2tzPTA7CiAgYWlRclBvbGw9c2V0SW50ZXJ2YWwoYXN5bmMgZnVuY3Rpb24oKXsKICAgIHRpY2tzKys7CiAgICBhd2FpdCByZWZyZXNoQWlTY2FucygpOwogICAgaWYodGlja3M+PTMwKXtjbGVhckludGVydmFsKGFpUXJQb2xsKTthaVFyUG9sbD1udWxsO30KICB9LDQwMDApOwp9CmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFpUXIoKXsKICB2YXIgYm94PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhaXFyJyk7CiAgaWYoIWJveClyZXR1cm47CiAgYm94LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsKICBib3guaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJsb2FkaW5nIj7Qk9C10L3QtdGA0LjRgNCw0LwgUVI8L2Rpdj4nOwogIHZhciByPWF3YWl0IGFmKCdhaV9zY2FuX3Nlc3Npb24nLCdQT1NUJyx7fSk7CiAgaWYoIXJ8fCFyLnRva2VuKXtib3guaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1yZWQpIj7QndC1INC80L7Qs9CwINC00LAg0YHRitC30LTQsNC8IFFSINC70LjQvdC6LjwvZGl2Pic7cmV0dXJuO30KICB2YXIgYmFzZT13aW5kb3cubG9jYXRpb24ub3JpZ2luK3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9pbmRleFwuaHRtbCQvLCcnKS5yZXBsYWNlKC9cLyQvLCcnKTsKICB2YXIgbGluaz1iYXNlKycvYWktdXBsb2FkLmh0bWw/dG9rZW49JytlbmNvZGVVUklDb21wb25lbnQoci50b2tlbik7CiAgdmFyIHFyPSdodHRwczovL2FwaS5xcnNlcnZlci5jb20vdjEvY3JlYXRlLXFyLWNvZGUvP3NpemU9MTkweDE5MCZtYXJnaW49MTAmZGF0YT0nK2VuY29kZVVSSUNvbXBvbmVudChsaW5rKTsKICBib3guaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjE2cHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj48aW1nIHNyYz0iJytxcisnIiBhbHQ9IlFSIiBzdHlsZT0id2lkdGg6MTkwcHg7aGVpZ2h0OjE5MHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjEycHg7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6OHB4Ij48ZGl2IHN0eWxlPSJtaW4td2lkdGg6MjIwcHg7ZmxleDoxIj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tdHgpO21hcmdpbi1ib3R0b206NnB4Ij5RUiDQu9C40L3QuiDQt9CwINC60LDRh9Cy0LDQvdC1INC+0YIg0YLQtdC70LXRhNC+0L08L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO2xpbmUtaGVpZ2h0OjEuNjttYXJnaW4tYm90dG9tOjEwcHgiPtCS0LDQu9C40LTQtdC9INC00L4gJytlc2Moci5leHBpcmVzX2F0fHwnJykrJy4g0KHQu9C10LQg0LrQsNGH0LLQsNC90LUg0LTQvtC60YPQvNC10L3RgtGK0YIg0YnQtSDRgdC1INC/0L7Rj9Cy0Lgg0LIg0YHQv9C40YHRitC60LAuPC9kaXY+PGlucHV0IGNsYXNzPSJzaSIgc3R5bGU9IndpZHRoOjEwMCU7Zm9udC1mYW1pbHk6dmFyKC0tbW8pIiB2YWx1ZT0iJytlc2MobGluaykrJyIgcmVhZG9ubHkgb25jbGljaz0idGhpcy5zZWxlY3QoKSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4IiBvbmNsaWNrPSJjb3B5QWlMaW5rKCcranNBcmcobGluaykrJykiPtCa0L7Qv9C40YDQsNC5INC70LjQvdC60LA8L2J1dHRvbj48L2Rpdj48L2Rpdj4nOwogIHN0YXJ0QWlBdXRvUmVmcmVzaCgpOwp9CmZ1bmN0aW9uIGNvcHlBaUxpbmsobGluayl7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQobGluayk7dG9hc3QoJ9Cb0LjQvdC60YrRgiDQtSDQutC+0L/QuNGA0LDQvScsJ29rJyk7fQpmdW5jdGlvbiBhaUZpbGVVcmwocyl7cmV0dXJuIHMmJnMuZmlsZV9wYXRoP1N0cmluZyhzLmZpbGVfcGF0aCk6Jyc7fQpmdW5jdGlvbiBhaVBkZlVybChzKXtyZXR1cm4gcyYmcy5wZGZfcGF0aD9TdHJpbmcocy5wZGZfcGF0aCk6Jyc7fQpmdW5jdGlvbiBhaURpZ2l0YWxQZGZVcmwocyl7cmV0dXJuIHMmJnMuZGlnaXRhbF9wZGZfcGF0aD9TdHJpbmcocy5kaWdpdGFsX3BkZl9wYXRoKTonJzt9CmZ1bmN0aW9uIGFpRmllbGRIdG1sKGYpewogIHZhciBrZXlzPU9iamVjdC5rZXlzKGZ8fHt9KTsKICBpZigha2V5cy5sZW5ndGgpcmV0dXJuICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpO3BhZGRpbmc6MTJweDtib3JkZXI6MXB4IGRhc2hlZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTBweCI+0J3Rj9C80LAg0YDQsNC30L/QvtC30L3QsNGC0Lgg0L/QvtC70LXRgtCwLjwvZGl2Pic7CiAgcmV0dXJuICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE4MHB4LDFmcikpO2dhcDoxMHB4Ij4nK2tleXMubWFwKGZ1bmN0aW9uKGspewogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJoc3QiPjxkaXYgY2xhc3M9ImhzbCI+Jytlc2MoaykrJzwvZGl2PjxkaXYgY2xhc3M9ImhzdiI+Jytlc2MoZltrXSkrJzwvZGl2PjwvZGl2Pic7CiAgfSkuam9pbignJykrJzwvZGl2Pic7Cn0KZnVuY3Rpb24gb3BlbkFpU2NhbihpZCl7CiAgdmFyIHM9RC5haV9zY2Fucy5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiBTdHJpbmcoeC5pZCk9PT1TdHJpbmcoaWQpO30pOwogIGlmKCFzKXt0b2FzdCgn0JTQvtC60YPQvNC10L3RgtGK0YIg0L3QtSDQtSDQvdCw0LzQtdGA0LXQvScsJ2VycicpO3JldHVybjt9CiAgdmFyIGY9c2NhbkZpZWxkcyhzKTsKICB2YXIgZmlsZT1haUZpbGVVcmwocyk7CiAgdmFyIHBkZj1haVBkZlVybChzKTsKICB2YXIgZGlnaXRhbD1haURpZ2l0YWxQZGZVcmwocyk7CiAgdmFyIGVkaXRvcj0nYWktZG9jdW1lbnQuaHRtbD9pZD0nK2VuY29kZVVSSUNvbXBvbmVudChzLmlkKTsKICB2YXIgcHJldmlldz0nJzsKICBwcmV2aWV3PSc8aWZyYW1lIHNyYz0iJytlc2MoZWRpdG9yKSsnIiBzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6NjIwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTJweDtiYWNrZ3JvdW5kOiNmZmYiPjwvaWZyYW1lPic7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21iJykuaW5uZXJIVE1MPSc8aDM+0J/RgNC10LPQu9C10LQg0L3QsCBBSSBzY2FuPC9oMz4nCiAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLWJvdHRvbToxMnB4Ij4nK2VzYyhzLmZpbGVfbmFtZXx8cy5kb2NfdHlwZXx8J9CU0L7QutGD0LzQtdC90YInKSsnIMK3ICcrZXNjKHMuc3RhdHVzfHwnJykrJyDCtyAnK01hdGgucm91bmQoTnVtYmVyKHMuY29uZmlkZW5jZXx8MCkqMTAwKSsnJTwvZGl2PicKICAgICtwcmV2aWV3CiAgICArJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTRweCI+JythaUZpZWxkSHRtbChmKSsnPC9kaXY+JwogICAgKyhzLnJhd190ZXh0Pyc8ZGl2IGNsYXNzPSJtZiIgc3R5bGU9Im1hcmdpbi10b3A6MTRweCI+PGxhYmVsPlJhdyDRgtC10LrRgdGCIC8gQUkg0L7RgtCz0L7QstC+0YA8L2xhYmVsPjx0ZXh0YXJlYSByb3dzPSI1IiByZWFkb25seT4nK2VzYyhzLnJhd190ZXh0KSsnPC90ZXh0YXJlYT48L2Rpdj4nOicnKQogICAgKyc8ZGl2IGNsYXNzPSJtYSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0JfQsNGC0LLQvtGA0Lg8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0id2luZG93Lm9wZW4oJytqc0FyZyhlZGl0b3IpKycpIj7QlNC40LPQuNGC0LDQu9C10L0g0YDQtdC00LDQutGC0L7RgDwvYnV0dG9uPicrKHBkZj8nPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJ3aW5kb3cub3BlbignK2pzQXJnKHBkZikrJykiPlNjYW4gUERGPC9idXR0b24+JzonJykrKGZpbGUmJmZpbGUhPT1wZGY/JzxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0id2luZG93Lm9wZW4oJytqc0FyZyhmaWxlKSsnKSI+0J7RgNC40LPQuNC90LDQu9C10L0g0YTQsNC50Ls8L2J1dHRvbj4nOicnKSsnPC9kaXY+JzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW8nKS5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7Cn0KZnVuY3Rpb24gckFpU2NhbnMoKXsKICB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FpbCcpOwogIGlmKCFlbClyZXR1cm47CiAgaWYoIUQuYWlfc2NhbnMubGVuZ3RoKXtlbC5pbm5lckhUTUw9ZW1wKCfijIEnLCfQndGP0LzQsCDRgdC60LDQvdC40YDQsNC90Lgg0LTQvtC60YPQvNC10L3RgtC4Jywn0JTQvtCx0LDQstC4INC/0YrRgNCy0LjRjyDRgtC10LrRgdGCINC+0YIg0YTQsNC60YLRg9GA0LAsINC00L7Qs9C+0LLQvtGAINC40LvQuCDQvtGE0LXRgNGC0LAuJywnKyDQndC+0LIgc2NhbicsIm1vZGFsKCdhaVNjYW4nKSIpO3JldHVybjt9CiAgZWwuaW5uZXJIVE1MPUQuYWlfc2NhbnMubWFwKGZ1bmN0aW9uKHMpewogICAgdmFyIGY9c2NhbkZpZWxkcyhzKTsKICAgIHZhciBjaGlwcz1PYmplY3Qua2V5cyhmKS5zbGljZSgwLDYpLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gJzxzcGFuIGNsYXNzPSJwd2NoaXAiPicrZXNjKGspKyc6ICcrZXNjKGZba10pKyc8L3NwYW4+Jzt9KS5qb2luKCcnKTsKICAgIHZhciBmaWxlPWFpRmlsZVVybChzKTsKICAgIHZhciBwZGY9YWlQZGZVcmwocyk7CiAgICB2YXIgZGlnaXRhbD1haURpZ2l0YWxQZGZVcmwocyk7CiAgICB2YXIgZWRpdG9yPSdhaS1kb2N1bWVudC5odG1sP2lkPScrZW5jb2RlVVJJQ29tcG9uZW50KHMuaWQpOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJwd3IiPjxkaXYgc3R5bGU9ImZsZXg6MSI+PGRpdiBjbGFzcz0icHdzIj4nK2VzYyhzLmZpbGVfbmFtZXx8cy5kb2NfdHlwZXx8J9CU0L7QutGD0LzQtdC90YInKSsnPC9kaXY+PGRpdiBjbGFzcz0icHd1Ij4nK2VzYyhzLmNsaWVudHx8JycpKycgwrcgJytlc2Mocy5zdGF0dXN8fCdkcmFmdCcpKycgwrcgJytNYXRoLnJvdW5kKE51bWJlcihzLmNvbmZpZGVuY2V8fDApKjEwMCkrJyUgwrcgJytmZHQocy5jcmVhdGVkX2F0KSsnPC9kaXY+PGRpdiBjbGFzcz0icHdjc3RhdCI+JysoY2hpcHN8fCc8c3BhbiBjbGFzcz0icHdjaGlwIj7Rh9Cw0LrQsCDQv9GA0LXQs9C70LXQtDwvc3Bhbj4nKSsnPC9kaXY+PC9kaXY+PHNwYW4gY2xhc3M9InRhZyB3ZWIiPicrZXNjKHMuZG9jX3R5cGV8fCdzY2FuJykrJzwvc3Bhbj48YnV0dG9uIGNsYXNzPSJvYnRuIiBvbmNsaWNrPSJvcGVuQWlTY2FuKCcranNBcmcocy5pZCkrJykiPtCf0YDQtdCz0LvQtdC0PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0ib2J0biIgb25jbGljaz0id2luZG93Lm9wZW4oJytqc0FyZyhlZGl0b3IpKycsXCdfYmxhbmtcJykiPtCU0LjQs9C40YLQsNC70LXQvTwvYnV0dG9uPicrKHBkZj8nPGJ1dHRvbiBjbGFzcz0ib2J0biIgb25jbGljaz0id2luZG93Lm9wZW4oJytqc0FyZyhwZGYpKycsXCdfYmxhbmtcJykiPlNjYW4gUERGPC9idXR0b24+JzonJykrKGZpbGU/JzxidXR0b24gY2xhc3M9Im9idG4iIG9uY2xpY2s9IndpbmRvdy5vcGVuKCcranNBcmcoZmlsZSkrJyxcJ19ibGFua1wnKSI+0KTQsNC50Ls8L2J1dHRvbj4nOicnKSsnPGJ1dHRvbiBjbGFzcz0ib2J0biIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiIG9uY2xpY2s9ImRyKFwnYWlfc2NhbnNcJywnK2pzQXJnKHMuaWQpKycpIj7inJU8L2J1dHRvbj48L2Rpdj4nOwogIH0pLmpvaW4oJycpOwp9CmFzeW5jIGZ1bmN0aW9uIHJBdWRpdCgpewogIHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXVkJyk7CiAgaWYoIWVsKXJldHVybjsKICBlbC5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+JzsKICBELmF1ZGl0X2xvZz1hd2FpdCBhZignYXVkaXRfbG9nJyl8fFtdOwogIGlmKCFELmF1ZGl0X2xvZy5sZW5ndGgpe2VsLmlubmVySFRNTD0nPGRpdiBzdHlsZT0icGFkZGluZzoyNHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINC30LDQv9C40YHQuC48L2Rpdj4nO3JldHVybjt9CiAgZWwuaW5uZXJIVE1MPUQuYXVkaXRfbG9nLm1hcChmdW5jdGlvbihhKXsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0icHdyIj48ZGl2IHN0eWxlPSJmbGV4OjEiPjxkaXYgY2xhc3M9InB3cyI+Jytlc2MoYS5hY3Rpb24pKyc8L2Rpdj48ZGl2IGNsYXNzPSJwd3UiPicrZXNjKGEudXNlcl9uYW1lfHwn0KHQuNGB0YLQtdC80LAnKSsnIMK3ICcrZXNjKGEudGFyZ2V0X3R5cGV8fCcnKSsnICcrZXNjKGEudGFyZ2V0X2lkfHwnJykrJyDCtyAnK2ZkdChhLmNyZWF0ZWRfYXQpKyc8L2Rpdj4nKyhhLmRldGFpbHM/JzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDo0cHgiPicrZXNjKGEuZGV0YWlscykuc2xpY2UoMCwxODApKyc8L2Rpdj4nOicnKSsnPC9kaXY+PHNwYW4gY2xhc3M9InB3Y2hpcCI+Jytlc2MoYS5pcF9hZGRyZXNzfHwnJykrJzwvc3Bhbj48L2Rpdj4nOwogIH0pLmpvaW4oJycpOwp9CmFzeW5jIGZ1bmN0aW9uIHJSZXBvcnRzKCl7CiAgdmFyIHJiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYml6Jyk7CiAgaWYocmIpewogICAgdmFyIHRvZGF5PW5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICAgIHZhciBmcm9tPXRvZGF5LnNsaWNlKDAsOCkrJzAxJzsKICAgIHZhciBicj1hd2FpdCBhZignYnVzaW5lc3NfcmVwb3J0JyxudWxsLG51bGwsJyZmcm9tPScrZnJvbSsnJnRvPScrdG9kYXkpOwogICAgaWYoYnIpewogICAgICB2YXIgb2ZmPShici5vZmZlcnN8fFtdKS5yZWR1Y2UoZnVuY3Rpb24ocyx4KXtyZXR1cm4gcytOdW1iZXIoeC5jfHwwKTt9LDApOwogICAgICB2YXIgZG9jPShici5kb2N1bWVudHN8fFtdKS5yZWR1Y2UoZnVuY3Rpb24ocyx4KXtyZXR1cm4gcytOdW1iZXIoeC5jfHwwKTt9LDApOwogICAgICB2YXIgb3V0c2lkZT0oYnIucHJlc2VuY2V8fFtdKS5yZWR1Y2UoZnVuY3Rpb24ocyx4KXtyZXR1cm4gcytOdW1iZXIoeC5vdXRzaWRlfHwwKTt9LDApOwogICAgICB2YXIgcGVuZGluZz1ici50YXNrcz9OdW1iZXIoYnIudGFza3MucGVuZGluZ3x8MCk6MDsKICAgICAgcmIuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE2MHB4LDFmcikpO2dhcDoxMHB4Ij4nCiAgICAgICAgKyc8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCe0YTQtdGA0YLQuCDRgtC+0LfQuCDQvNC10YHQtdGGPC9kaXY+PGRpdiBjbGFzcz0ia3YgYWMiPicrb2ZmKyc8L2Rpdj48L2Rpdj4nCiAgICAgICAgKyc8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCU0L7QutGD0LzQtdC90YLQuDwvZGl2PjxkaXYgY2xhc3M9Imt2IGciPicrZG9jKyc8L2Rpdj48L2Rpdj4nCiAgICAgICAgKyc8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCX0LDQtNCw0YfQuCDQt9CwINGA0LDQsdC+0YLQsDwvZGl2PjxkaXYgY2xhc3M9Imt2IGEiPicrcGVuZGluZysnPC9kaXY+PC9kaXY+JwogICAgICAgICsnPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7QmNC30LLRitC9INC+0YTQuNGBPC9kaXY+PGRpdiBjbGFzcz0ia3YgciI+JytvdXRzaWRlKyc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgfQogIH0KICB2YXIgbXM9e307RC5wcm9qZWN0cy5mb3JFYWNoKGZ1bmN0aW9uKHApe2lmKHAuc3RhcnRfZGF0ZSl7dmFyIG09cC5zdGFydF9kYXRlLnNsaWNlKDAsNyk7bXNbbV09KG1zW21dfHwwKStOdW1iZXIocC50b3RhbHx8MCk7fX0pOwogIHZhciBtaz1PYmplY3Qua2V5cyhtcykuc29ydCgpLnNsaWNlKC02KTt2YXIgbW09TWF0aC5tYXguYXBwbHkobnVsbCxtay5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIG1zW2tdO30pLmNvbmNhdChbMV0pKTsKICB2YXIgbW4yPVsnJywn0K/QvdGDJywn0KTQtdCyJywn0JzQsNGAJywn0JDQv9GAJywn0JzQsNC5Jywn0K7QvdC4Jywn0K7Qu9C4Jywn0JDQstCzJywn0KHQtdC/Jywn0J7QutGCJywn0J3QvtC1Jywn0JTQtdC6J107CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JyJykuaW5uZXJIVE1MPW1rLmxlbmd0aD9tay5tYXAoZnVuY3Rpb24oayl7cmV0dXJuICc8ZGl2IGNsYXNzPSJiciI+PGRpdiBjbGFzcz0iYnJsIj4nKyhtbjJbcGFyc2VJbnQoay5zbGljZSg1KSldfHwnJykrJyAnK2suc2xpY2UoMCw0KSsnPC9kaXY+PGRpdiBjbGFzcz0iYnJ0Ij48ZGl2IGNsYXNzPSJicmYiIHN0eWxlPSJ3aWR0aDonKyhtc1trXS9tbSoxMDApKyclO2JhY2tncm91bmQ6dmFyKC0tYWNjKSI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iYnJ2Ij4nK2ZtdChtc1trXSkrJzwvZGl2PjwvZGl2Pic7fSkuam9pbignJyk6JzxkaXYgc3R5bGU9InBhZGRpbmc6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxMnB4Ij7QlNC+0LHQsNCy0LXRgtC1INC/0YDQvtC10LrRgtC4INGBINC00LDRgtC4PC9kaXY+JzsKICB2YXIgc3Y9e307RC5wcm9qZWN0cy5mb3JFYWNoKGZ1bmN0aW9uKHApeyhwLnRhZ3N8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3N2W3RdPShzdlt0XXx8MCkrMTt9KTt9KTt2YXIgc209TWF0aC5tYXguYXBwbHkobnVsbCxPYmplY3QudmFsdWVzKHN2KS5jb25jYXQoWzFdKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JzJykuaW5uZXJIVE1MPU9iamVjdC5rZXlzKHN2KS5sZW5ndGg/T2JqZWN0LmtleXMoc3YpLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gc3ZbYl0tc3ZbYV07fSkuc2xpY2UoMCw2KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICc8ZGl2IGNsYXNzPSJiciI+PGRpdiBjbGFzcz0iYnJsIj4nK3QrJzwvZGl2PjxkaXYgY2xhc3M9ImJydCI+PGRpdiBjbGFzcz0iYnJmIiBzdHlsZT0id2lkdGg6Jysoc3ZbdF0vc20qMTAwKSsnJTtiYWNrZ3JvdW5kOnZhcigtLWdybikiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImJydiI+Jytzdlt0XSsnINC/0YDQvtC10LrRgicrKHN2W3RdPT09MT8n0LAnOicnKSsnPC9kaXY+PC9kaXY+Jzt9KS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINC00LDQvdC90Lg8L2Rpdj4nOwogIHZhciBjbT17fTtELnByb2plY3RzLmZvckVhY2goZnVuY3Rpb24ocCl7dmFyIGM9cC5jbGllbnR8fCfigJQnO2NtW2NdPShjbVtjXXx8MCkrTnVtYmVyKHAudG90YWx8fDApO30pO3ZhciBjbW09TWF0aC5tYXguYXBwbHkobnVsbCxPYmplY3QudmFsdWVzKGNtKS5jb25jYXQoWzFdKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JjJykuaW5uZXJIVE1MPU9iamVjdC5rZXlzKGNtKS5sZW5ndGg/T2JqZWN0LmtleXMoY20pLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gY21bYl0tY21bYV07fSkuc2xpY2UoMCw2KS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuICc8ZGl2IGNsYXNzPSJiciI+PGRpdiBjbGFzcz0iYnJsIj4nK2MrJzwvZGl2PjxkaXYgY2xhc3M9ImJydCI+PGRpdiBjbGFzcz0iYnJmIiBzdHlsZT0id2lkdGg6JysoY21bY10vY21tKjEwMCkrJyU7YmFja2dyb3VuZDp2YXIoLS1ibHUpIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJicnYiPicrZm10KGNtW2NdKSsnPC9kaXY+PC9kaXY+Jzt9KS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINC00LDQvdC90Lg8L2Rpdj4nOwogIHZhciB0bT17fTtELnRhc2tzLmZvckVhY2goZnVuY3Rpb24odCl7aWYodC5hc3NpZ25lZSYmdC5kb25lPT0wKXRtW3QuYXNzaWduZWVdPSh0bVt0LmFzc2lnbmVlXXx8MCkrMTt9KTt2YXIgdG1tPU1hdGgubWF4LmFwcGx5KG51bGwsT2JqZWN0LnZhbHVlcyh0bSkuY29uY2F0KFsxXSkpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdydCcpLmlubmVySFRNTD1PYmplY3Qua2V5cyh0bSkubGVuZ3RoP09iamVjdC5rZXlzKHRtKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuICc8ZGl2IGNsYXNzPSJiciI+PGRpdiBjbGFzcz0iYnJsIj4nK24rJzwvZGl2PjxkaXYgY2xhc3M9ImJydCI+PGRpdiBjbGFzcz0iYnJmIiBzdHlsZT0id2lkdGg6JysodG1bbl0vdG1tKjEwMCkrJyU7YmFja2dyb3VuZDonKyh0bVtuXS90bW0+Ljg/J3ZhcigtLXJlZCknOnRtW25dL3RtbT4uNT8ndmFyKC0tYW1iKSc6J3ZhcigtLWdybiknKSsnIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJicnYiPicrdG1bbl0rJyDQt9Cw0LTQsNGHJysodG1bbl09PT0xPyfQsCc6J9C4JykrJzwvZGl2PjwvZGl2Pic7fSkuam9pbignJyk6JzxkaXYgc3R5bGU9InBhZGRpbmc6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxMnB4Ij7QndGP0LzQsCDQtNCw0L3QvdC4PC9kaXY+JzsKfQoKLy8g4pSA4pSAIE1PREFMUyDilIDilIAKdmFyIFNPPSc8b3B0aW9uPldvcmRQcmVzcyDRgdCw0LnRgjwvb3B0aW9uPjxvcHRpb24+V29vQ29tbWVyY2Ug0LzQsNCz0LDQt9C40L08L29wdGlvbj48b3B0aW9uPtCR0YDQsNC90LTQuNC90LMgLyDQm9C+0LPQvjwvb3B0aW9uPjxvcHRpb24+U0VPINC+0L/RgtC40LzQuNC30LDRhtC40Y88L29wdGlvbj48b3B0aW9uPkdvb2dsZSBBZHM8L29wdGlvbj48b3B0aW9uPtCh0L7Rhi4g0LzRgNC10LbQuDwvb3B0aW9uPjxvcHRpb24+0KXQvtGB0YLQuNC90LMgKyDQv9C+0LTQtNGA0YrQttC60LA8L29wdGlvbj48b3B0aW9uPlZpYmVyINC80LDRgNC60LXRgtC40L3Qszwvb3B0aW9uPjxvcHRpb24+0JLQuNC00LXQviAvINCg0LjQudC70YHQvtCy0LU8L29wdGlvbj48b3B0aW9uPtCa0L7QvNC/0LvQtdC60YHQvdCwINC+0YTQtdGA0YLQsDwvb3B0aW9uPjxvcHRpb24+0JTRgNGD0LPQvjwvb3B0aW9uPic7CnZhciBDTz0nPG9wdGlvbiB2YWx1ZT0iYXYtcCI+8J+foyDQm9C40LvQsNCyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iYXYtdCI+8J+ptSDQotGO0YDQutC+0LDQtzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImF2LWciPvCfn6Ig0JfQtdC70LXQvTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImF2LWEiPvCfn6Eg0JbRitC70YI8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJhdi1yIj7wn5S0INCn0LXRgNCy0LXQvTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImF2LWIiPvCflLUg0KHQuNC9PC9vcHRpb24+JzsKZnVuY3Rpb24gdE8oKXtyZXR1cm4gRC51c2Vycy5sZW5ndGg/RC51c2Vycy5tYXAoZnVuY3Rpb24odSl7cmV0dXJuICc8b3B0aW9uIHZhbHVlPSInK3UubmFtZSsnIj4nK3UubmFtZSsodS5yb2xlPycgKCcrdS5yb2xlKycpJzonJykrJzwvb3B0aW9uPic7fSkuam9pbignJyk6JzxvcHRpb24gdmFsdWU9IiI+4oCUINC30LDRgNC10LTQuCDQv9C+0YLRgNC10LHQuNGC0LXQu9C40YLQtSDigJQ8L29wdGlvbj4nO30KCmZ1bmN0aW9uIHVGb3JtKHUpewogIHJldHVybiAnPGgzPicrKHU/J9Cg0LXQtNCw0LrRgtC40YDQsNC5INGB0LvRg9C20LjRgtC10LsnOicrINCd0L7QsiDRgdC70YPQttC40YLQtdC7JykrJzwvaDM+JwogICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9GK0LvQvdC+INC40LzQtTwvbGFiZWw+PGlucHV0IGlkPSJ1TiIgdmFsdWU9IicrKHU/ZXNjKHUubmFtZXx8JycpOicnKSsnIiBwbGFjZWhvbGRlcj0i0JjQstCw0L0g0JjQstCw0L3QvtCyIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCg0L7Qu9GPPC9sYWJlbD48aW5wdXQgaWQ9InVSIiB2YWx1ZT0iJysodT9lc2ModS5yb2xlfHwnJyk6JycpKyciIHBsYWNlaG9sZGVyPSJEZXYsINCU0LjQt9Cw0LnQvS4uLiI+PC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQviDQuNC80LU8L2xhYmVsPjxpbnB1dCBpZD0idVUiIHZhbHVlPSInKyh1P2VzYyh1LnVzZXJuYW1lfHwnJyk6JycpKyciIHBsYWNlaG9sZGVyPSJpdmFuLml2YW5vdiI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9Cw0YDQvtC70LAnKyh1PycgKNC/0YDQsNC30L3QviA9INCx0LXQtyDQv9GA0L7QvNGP0L3QsCknOicnKSsnPC9sYWJlbD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSJ1UCIgcGxhY2Vob2xkZXI9ItC80LjQvS4gNiDRgdC40LzQstC+0LvQsCI+PC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmNC90LjRhtC40LDQu9C4PC9sYWJlbD48aW5wdXQgaWQ9InVJIiB2YWx1ZT0iJysodT9lc2ModS5pbml0aWFsc3x8JycpOicnKSsnIiBtYXhsZW5ndGg9IjMiIHBsYWNlaG9sZGVyPSLQmNCYIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCm0LLRj9GCPC9sYWJlbD48c2VsZWN0IGlkPSJ1QyI+JytDTysnPC9zZWxlY3Q+PC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QoNC+0LvRjyDQsiDRgdC40YHRgtC10LzQsNGC0LA8L2xhYmVsPjxzZWxlY3QgaWQ9InVBIj48b3B0aW9uIHZhbHVlPSIwIicrKHUmJnUuaXNfYWRtaW4hPTE/JyBzZWxlY3RlZCc6JycpKyc+8J+RpCDQodC70YPQttC40YLQtdC7PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMSInKyh1JiZ1LmlzX2FkbWluPT0xPycgc2VsZWN0ZWQnOicnKSsnPvCfkZEg0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YA8L29wdGlvbj48L3NlbGVjdD48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCe0L/QtdGA0LDRgtC40LLQvdCwINGA0L7Qu9GPPC9sYWJlbD48c2VsZWN0IGlkPSJ1QXIiPjxvcHRpb24gdmFsdWU9ImVtcGxveWVlIicrKCF1fHx1LmFjY2Vzc19yb2xlPT09J2VtcGxveWVlJz8nIHNlbGVjdGVkJzonJykrJz7QodC70YPQttC40YLQtdC7PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ibWFuYWdlciInKyh1JiZ1LmFjY2Vzc19yb2xlPT09J21hbmFnZXInPycgc2VsZWN0ZWQnOicnKSsnPtCc0LXQvdC40LTQttGK0YA8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJhY2NvdW50YW50IicrKHUmJnUuYWNjZXNzX3JvbGU9PT0nYWNjb3VudGFudCc/JyBzZWxlY3RlZCc6JycpKyc+0KHRh9C10YLQvtCy0L7QtNC40YLQtdC7PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0idmlld2VyIicrKHUmJnUuYWNjZXNzX3JvbGU9PT0ndmlld2VyJz8nIHNlbGVjdGVkJzonJykrJz7QodCw0LzQviDQv9GA0LXQs9C70LXQtDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImFkbWluIicrKHUmJnUuYWNjZXNzX3JvbGU9PT0nYWRtaW4nPycgc2VsZWN0ZWQnOicnKSsnPtCQ0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGAPC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtYSI+JysodT8nPGJ1dHRvbiBjbGFzcz0iYnRuIGQiIG9uY2xpY2s9ImRVKFwnJyt1LmlkKydcJykiPtCY0LfRgtGA0LjQuTwvYnV0dG9uPic6JycpKyc8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImNtbygpIj7QntGC0LrQsNC3PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9IicrKHU/J3NVKFwnJyt1LmlkKydcJyknOidzVSgpJykrJyI+0JfQsNC/0LDQt9C4PC9idXR0b24+PC9kaXY+JzsKfQoKdmFyIE1MPXsKICBwcm9qZWN0OmZ1bmN0aW9uKHApewogICAgcmV0dXJuICc8aDM+JysocD8n0KDQtdC00LDQutGC0LjRgNCw0Lkg0L/RgNC+0LXQutGCJzonKyDQndC+0LIg0L/RgNC+0LXQutGCJykrJzwvaDM+JwogICAgICArJzxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J3QsNC30LLQsNC90LjQtTwvbGFiZWw+PGlucHV0IGlkPSJtTiIgdmFsdWU9IicrKHA/ZXNjKHAubmFtZSk6JycpKyciIHBsYWNlaG9sZGVyPSLQmtC70LjQtdC90YIg4oCUINGD0YHQu9GD0LPQsCI+PC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCa0LvQuNC10L3RgjwvbGFiZWw+PGlucHV0IGlkPSJtQ2wiIHZhbHVlPSInKyhwP2VzYyhwLmNsaWVudHx8JycpOicnKSsnIiBwbGFjZWhvbGRlcj0i0JjQstCw0L0g0JjQstCw0L3QvtCyIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCi0LXQu9C10YTQvtC9L0VtYWlsPC9sYWJlbD48aW5wdXQgaWQ9Im1QaCIgdmFsdWU9IicrKHA/ZXNjKHAucGhvbmV8fCcnKTonJykrJyIgcGxhY2Vob2xkZXI9IjA4eHggeHh4IHh4eCI+PC9kaXY+PC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCS0LjQtCDRg9GB0LvRg9Cz0LA8L2xhYmVsPjxzZWxlY3QgaWQ9Im1TdiI+JytTTysnPC9zZWxlY3Q+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QodGC0LDRgtGD0YE8L2xhYmVsPjxzZWxlY3QgaWQ9Im1TdCI+PG9wdGlvbiB2YWx1ZT0ibmV3IicrKHAmJnAuc3RhdHVzPT09J25ldyc/JyBzZWxlY3RlZCc6JycpKyc+0J3QvtCyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iYWN0aXZlIicrKHAmJnAuc3RhdHVzPT09J2FjdGl2ZSc/JyBzZWxlY3RlZCc6JycpKyc+0JIg0L/RgNC+0YbQtdGBPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0icmV2aWV3IicrKHAmJnAuc3RhdHVzPT09J3Jldmlldyc/JyBzZWxlY3RlZCc6JycpKyc+0KDQtdCy0LjQt9C40Y88L29wdGlvbj48b3B0aW9uIHZhbHVlPSJwYXVzZWQiJysocCYmcC5zdGF0dXM9PT0ncGF1c2VkJz8nIHNlbGVjdGVkJzonJykrJz7Qn9Cw0YPQt9CwPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZG9uZSInKyhwJiZwLnN0YXR1cz09PSdkb25lJz8nIHNlbGVjdGVkJzonJykrJz7Ql9Cw0LLRitGA0YjQtdC9PC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+PC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCh0YPQvNCwICjigqwpPC9sYWJlbD48aW5wdXQgdHlwZT0ibnVtYmVyIiBzdGVwPSIwLjAxIiBpZD0ibVRvIiB2YWx1ZT0iJysocD9wLnRvdGFsfHwnJzonJykrJyIgcGxhY2Vob2xkZXI9IjAuMDAiPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J/QvtC70YPRh9C10L3QviAo4oKsKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgc3RlcD0iMC4wMSIgaWQ9Im1SYyIgdmFsdWU9IicrKHA/cC5yZWNlaXZlZHx8Jyc6JycpKyciIHBsYWNlaG9sZGVyPSIwLjAwIj48L2Rpdj48L2Rpdj4nCiAgICAgICsnPGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J3QsNGH0LDQu9C+PC9sYWJlbD48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9Im1TdDIiIHZhbHVlPSInKyhwP3Auc3RhcnRfZGF0ZXx8Jyc6JycpKyciPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JrRgNCw0LXQvSDRgdGA0L7QujwvbGFiZWw+PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJtRGwiIHZhbHVlPSInKyhwP3AuZGVhZGxpbmV8fCcnOicnKSsnIj48L2Rpdj48L2Rpdj4nCiAgICAgICsnPGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J3QsNC/0YDQtdC00YrQuiAlPC9sYWJlbD48aW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iMTAwIiBpZD0ibVByIiB2YWx1ZT0iJysocD9wLnByb2dyZXNzfHwwOjApKyciPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J7RgtCz0L7QstC+0YDQvdC40Lo8L2xhYmVsPjxzZWxlY3QgaWQ9Im1BcyI+Jyt0TygpKyc8L3NlbGVjdD48L2Rpdj48L2Rpdj4nCiAgICAgICsnPGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KLQsNCz0L7QstC1ICjQt9Cw0L/QtdGC0LDRjyk8L2xhYmVsPjxpbnB1dCBpZD0ibVRnIiB2YWx1ZT0iJysocCYmcC50YWdzP3AudGFncy5qb2luKCcsICcpOicnKSsnIiBwbGFjZWhvbGRlcj0iV29yZFByZXNzLCBTRU8sINCU0LjQt9Cw0LnQvSI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QkNCx0L7QvdCw0LzQtdC90YI8L2xhYmVsPjxzZWxlY3QgaWQ9Im1SciI+PG9wdGlvbiB2YWx1ZT0iIj7QldC00L3QvtC60YDQsNGC0L3Qvjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ItC80LXRgSInKyhwJiZwLnJlY3VycmluZz09PSfQvNC10YEnPycgc2VsZWN0ZWQnOicnKSsnPtCc0LXRgdC10YfQvdC+PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0i0LPQvtC0IicrKHAmJnAucmVjdXJyaW5nPT09J9Cz0L7QtCc/JyBzZWxlY3RlZCc6JycpKyc+0JPQvtC00LjRiNC90L48L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj4nCiAgICAgICsnPGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QkdC10LvQtdC20LrQuDwvbGFiZWw+PHRleHRhcmVhIHJvd3M9IjIiIGlkPSJtTnQiPicrKHA/ZXNjKHAubm90ZXN8fCcnKTonJykrJzwvdGV4dGFyZWE+PC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9Im1hIj4nKyhwPyc8YnV0dG9uIGNsYXNzPSJidG4gZCIgb25jbGljaz0iZFByaihcJycrcC5pZCsnXCcpIj7QmNC30YLRgNC40Lk8L2J1dHRvbj4nOicnKSsnPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSInKyhwPydzUHJqKFwnJytwLmlkKydcJyknOidzUHJqKCknKSsnIj7Ql9Cw0L/QsNC30Lg8L2J1dHRvbj48L2Rpdj4nOwogIH0sCiAgdGFzazpmdW5jdGlvbigpe3JldHVybiAnPGgzPisg0J3QvtCy0LAg0LfQsNC00LDRh9CwPC9oMz48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCe0L/QuNGB0LDQvdC40LU8L2xhYmVsPjxpbnB1dCBpZD0idFR4IiBwbGFjZWhvbGRlcj0i0JrQsNC60LLQviDRgtGA0Y/QsdCy0LAg0LTQsCDRgdC1INC90LDQv9GA0LDQstC4PyI+PC9kaXY+PGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J7RgtCz0L7QstC+0YDQvdC40Lo8L2xhYmVsPjxzZWxlY3QgaWQ9InRBcyI+Jyt0TygpKyc8L3NlbGVjdD48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCf0YDQuNC+0YDQuNGC0LXRgjwvbGFiZWw+PHNlbGVjdCBpZD0idFVyIj48b3B0aW9uIHZhbHVlPSIwIj7QndC+0YDQvNCw0LvQtdC9PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMSI+0KHQv9C10YjQtdC9IOKaoDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1hIj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImNtbygpIj7QntGC0LrQsNC3PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9InNUYXNrKCkiPtCU0L7QsdCw0LLQuDwvYnV0dG9uPjwvZGl2Pic7fSwKICBjYWxUYXNrOmZ1bmN0aW9uKGRzKXtyZXR1cm4gJzxoMz4rINCX0LDQtNCw0YfQsCDRgSDQtNCw0YLQsDwvaDM+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QntC/0LjRgdCw0L3QuNC1PC9sYWJlbD48aW5wdXQgaWQ9ImN0VHgiIHBsYWNlaG9sZGVyPSLQmtCw0LrQstC+INGC0YDRj9Cx0LLQsCDQtNCwINGB0LUg0L3QsNC/0YDQsNCy0Lg/Ij48L2Rpdj48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QlNCw0YLQsDwvbGFiZWw+PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjdER0IiB2YWx1ZT0iJysoZHN8fG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSkrJyI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qp9Cw0YEgKNC/0L4g0LjQt9Cx0L7RgCk8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0aW1lIiBpZD0iY3RUbSI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J7RgtCz0L7QstC+0YDQvdC40Lo8L2xhYmVsPjxzZWxlY3QgaWQ9ImN0QXMiPicrdE8oKSsnPC9zZWxlY3Q+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9GA0LjQvtGA0LjRgtC10YI8L2xhYmVsPjxzZWxlY3QgaWQ9ImN0VXIiPjxvcHRpb24gdmFsdWU9IjAiPtCd0L7RgNC80LDQu9C10L08L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxIj7QodC/0LXRiNC10L0g4pqgPC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ibWEiPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY21vKCkiPtCe0YLQutCw0Lc8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ic0NhbFRhc2soKSI+0JTQvtCx0LDQstC4PC9idXR0b24+PC9kaXY+Jzt9LAogIG5vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gJzxoMz4rINCd0L7QstCwINCx0LXQu9C10LbQutCwPC9oMz48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCX0LDQs9C70LDQstC40LU8L2xhYmVsPjxpbnB1dCBpZD0iblRpIiBwbGFjZWhvbGRlcj0i0JHQtdC70LXQttC60LAg0LfQsCDQv9GA0L7QtdC60YIgLyDQutC70LjQtdC90YIiPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KLQtdC60YHRgjwvbGFiZWw+PHRleHRhcmVhIHJvd3M9IjQiIGlkPSJuQm8iIHBsYWNlaG9sZGVyPSLQlNC10YLQsNC50LvQuCwg0YPQs9C+0LLQvtGA0LrQuC4uLiI+PC90ZXh0YXJlYT48L2Rpdj48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QkNCy0YLQvtGAPC9sYWJlbD48c2VsZWN0IGlkPSJuQXUiPicrdE8oKSsnPC9zZWxlY3Q+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QodC/0LXRiNC90LA/PC9sYWJlbD48c2VsZWN0IGlkPSJuVXIiPjxvcHRpb24gdmFsdWU9IjAiPtCd0LU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxIj7QlNCwIOKaoDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1hIj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImNtbygpIj7QntGC0LrQsNC3PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9InNOb3RlKCkiPtCX0LDQv9Cw0LfQuDwvYnV0dG9uPjwvZGl2Pic7fSwKICBjbGllbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gJzxoMz4rINCd0L7QsiDQutC70LjQtdC90YI8L2gzPjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCY0LzQtdC90LA8L2xhYmVsPjxpbnB1dCBpZD0iY05tIiBwbGFjZWhvbGRlcj0i0JjQstCw0L0g0JjQstCw0L3QvtCyIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCk0LjRgNC80LA8L2xhYmVsPjxpbnB1dCBpZD0iY0NvIiBwbGFjZWhvbGRlcj0i0KTQuNGA0LzQsCDQldCe0J7QlCI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+RW1haWw8L2xhYmVsPjxpbnB1dCB0eXBlPSJlbWFpbCIgaWQ9ImNFbSI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QotC10LvQtdGE0L7QvTwvbGFiZWw+PGlucHV0IHR5cGU9InRlbCIgaWQ9ImNQaCI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QldCY0Jo8L2xhYmVsPjxpbnB1dCBpZD0iY0VrIiBwbGFjZWhvbGRlcj0iMTIzNDU2Nzg5Ij48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCR0LXQu9C10LbQutC4PC9sYWJlbD48dGV4dGFyZWEgcm93cz0iMiIgaWQ9ImNOdCI+PC90ZXh0YXJlYT48L2Rpdj48ZGl2IGNsYXNzPSJtYSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzQ2xpKCkiPtCX0LDQv9Cw0LfQuDwvYnV0dG9uPjwvZGl2Pic7fSwKICBob3N0aW5nOmZ1bmN0aW9uKCl7cmV0dXJuICc8aDM+KyDQndC+0LIg0YXQvtGB0YLQuNC90LM8L2gzPjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCU0L7QvNC10LnQvTwvbGFiZWw+PGlucHV0IGlkPSJoRG8iIHBsYWNlaG9sZGVyPSJleGFtcGxlLmNvbSI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmtC70LjQtdC90YI8L2xhYmVsPjxpbnB1dCBpZD0iaENsIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QodGK0YDQstGK0YA8L2xhYmVsPjxpbnB1dCBpZD0iaFNyIiBwbGFjZWhvbGRlcj0ic3J2MS53ZWJ0cml4aWEuY29tIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCi0LjQvzwvbGFiZWw+PHNlbGVjdCBpZD0iaFR5Ij48b3B0aW9uPmNQYW5lbDwvb3B0aW9uPjxvcHRpb24+RXh0ZXJuPC9vcHRpb24+PG9wdGlvbj5WUFM8L29wdGlvbj48b3B0aW9uPlNoYXJlZDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCU0LjRgdC6PC9sYWJlbD48aW5wdXQgaWQ9ImhEaSIgcGxhY2Vob2xkZXI9IjIvMTBHQiI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9C70LDQvTwvbGFiZWw+PHNlbGVjdCBpZD0iaFBsIj48b3B0aW9uPlN0YXJ0ZXI8L29wdGlvbj48b3B0aW9uPkJ1c2luZXNzPC9vcHRpb24+PG9wdGlvbj5Qcm88L29wdGlvbj48b3B0aW9uPlNoYXJlZDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+U1NMINC40LfRgtC40YfQsDwvbGFiZWw+PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJoU3NsIj48L2Rpdj48ZGl2IGNsYXNzPSJtYSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzSG9zdCgpIj7Ql9Cw0L/QsNC30Lg8L2J1dHRvbj48L2Rpdj4nO30sCiAgcGFzc3dvcmQ6ZnVuY3Rpb24oKXsKICAgIHZhciBwPVBXLmVkaXRJZD9ELnBhc3N3b3Jkcy5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiB4LmlkPT09UFcuZWRpdElkO30pOm51bGw7CiAgICB2YXIgY2w9KHAmJnAuY2xpZW50KXx8UFcuZm9ybUNsaWVudHx8Jyc7CiAgICB2YXIgb3B0cz1ELmNsaWVudHMubWFwKGZ1bmN0aW9uKGMpe3ZhciBuPWVzYyhjLmNvbXBhbnl8fGMubmFtZXx8JycpO3JldHVybiAnPG9wdGlvbiB2YWx1ZT0iJytuKyciPjwvb3B0aW9uPic7fSkuam9pbignJyk7CiAgICB2YXIgaWRzPXA/cHdWaXNpYmxlSWRzKHApOltdOwogICAgdmFyIHVzZXJzPUQudXNlcnMuZmlsdGVyKGZ1bmN0aW9uKHUpe3JldHVybiB1LmlzX2FkbWluIT0xO30pLm1hcChmdW5jdGlvbih1KXsKICAgICAgdmFyIGNoZWNrZWQ9aWRzLmluZGV4T2YoU3RyaW5nKHUuaWQpKSE9PS0xPycgY2hlY2tlZCc6Jyc7CiAgICAgIHJldHVybiAnPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzowO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4Mik7bWFyZ2luOjdweCAwIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGRhdGEtcHctdXNlciB2YWx1ZT0iJyt1LmlkKyciJytjaGVja2VkKycgc3R5bGU9IndpZHRoOmF1dG8iPiAnK2VzYyh1Lm5hbWUpKycgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLXR4MykiPignK2VzYyh1LnJvbGV8fHUudXNlcm5hbWV8fCcnKSsnKTwvc3Bhbj48L2xhYmVsPic7CiAgICB9KS5qb2luKCcnKTsKICAgIHJldHVybiAnPGgzPicrKHA/J9Cg0LXQtNCw0LrRgtC40YDQsNC5INC00L7RgdGC0YrQvyc6Jysg0J3QvtCyINC00L7RgdGC0YrQvycpKyc8L2gzPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JrQu9C40LXQvdGCPC9sYWJlbD48aW5wdXQgaWQ9InBDbCIgbGlzdD0icENsaWVudExpc3QiIHZhbHVlPSInK2VzYyhjbCkrJyIgcGxhY2Vob2xkZXI9ItCY0LfQsdC10YDQuCDQuNC70Lgg0LLRitCy0LXQtNC4INC60LvQuNC10L3RgiI+PGRhdGFsaXN0IGlkPSJwQ2xpZW50TGlzdCI+JytvcHRzKyc8L2RhdGFsaXN0PjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KHQsNC50YIgLyDQo9GB0LvRg9Cz0LA8L2xhYmVsPjxpbnB1dCBpZD0icFNpIiB2YWx1ZT0iJysocD9lc2MocC5zaXRlfHwnJyk6JycpKyciIHBsYWNlaG9sZGVyPSJleGFtcGxlLmNvbSDigJQgY1BhbmVsIj48L2Rpdj48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9C+0YLRgNC10LHQuNGC0LXQuzwvbGFiZWw+PGlucHV0IGlkPSJwVXMiIHZhbHVlPSInKyhwP2VzYyhwLnVzZXJuYW1lfHwnJyk6JycpKyciPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J/QsNGA0L7Qu9CwPC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBQdyIgdmFsdWU9IicrKHA/ZXNjKHAucGFzc3x8JycpOicnKSsnIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCa0LDRgtC10LPQvtGA0LjRjzwvbGFiZWw+PHNlbGVjdCBpZD0icENhIj48b3B0aW9uIHZhbHVlPSJob3N0aW5nIicrKHAmJnAuY2F0ZWdvcnk9PT0naG9zdGluZyc/JyBzZWxlY3RlZCc6JycpKyc+0KXQvtGB0YLQuNC90LM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ3b3JkcHJlc3MiJysocCYmcC5jYXRlZ29yeT09PSd3b3JkcHJlc3MnPycgc2VsZWN0ZWQnOicnKSsnPldvcmRQcmVzczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Imdvb2dsZSInKyhwJiZwLmNhdGVnb3J5PT09J2dvb2dsZSc/JyBzZWxlY3RlZCc6JycpKyc+R29vZ2xlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ic29jaWFsIicrKHAmJnAuY2F0ZWdvcnk9PT0nc29jaWFsJz8nIHNlbGVjdGVkJzonJykrJz7QodC+0YbQuNCw0LvQvdC4INC80YDQtdC20Lg8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJkbnMiJysocCYmcC5jYXRlZ29yeT09PSdkbnMnPycgc2VsZWN0ZWQnOicnKSsnPkROUzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImRlc2lnbiInKyhwJiZwLmNhdGVnb3J5PT09J2Rlc2lnbic/JyBzZWxlY3RlZCc6JycpKyc+0JTQuNC30LDQudC9PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ib3RoZXIiJysoIXB8fHAuY2F0ZWdvcnk9PT0nb3RoZXInPycgc2VsZWN0ZWQnOicnKSsnPtCU0YDRg9Cz0L48L29wdGlvbj48L3NlbGVjdD48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCa0L7QuSDQstC40LbQtNCwINGC0L7Qt9C4INC00L7RgdGC0YrQvz88L2xhYmVsPjxkaXYgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMHB4O2JhY2tncm91bmQ6dmFyKC0tc3VyMik7bWF4LWhlaWdodDoxNjBweDtvdmVyZmxvdzphdXRvIj4nKyh1c2Vyc3x8JzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4MykiPtCd0Y/QvNCwINGB0LvRg9C20LjRgtC10LvQuCDQt9CwINC40LfQsdC+0YAuPC9kaXY+JykrJzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDo2cHgiPtCQ0LrQviDQvdC1INC40LfQsdC10YDQtdGIINC90LjQutC+0LPQviwg0LTQvtGB0YLRitC/0YrRgiDQvtGB0YLQsNCy0LAg0LLQuNC00LjQvCDRgdCw0LzQviDQt9CwINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LguPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ibWEiPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY21vKCkiPtCe0YLQutCw0Lc8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ic1Bhc3MoKSI+0JfQsNC/0LDQt9C4PC9idXR0b24+PC9kaXY+JzsKICB9LAogIGFpU2NhbjpmdW5jdGlvbigpewogICAgcmV0dXJuICc8aDM+KyBBSSBzY2FuPC9oMz48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QotC40L8g0LTQvtC60YPQvNC10L3RgjwvbGFiZWw+PHNlbGVjdCBpZD0iYWlUeSI+PG9wdGlvbiB2YWx1ZT0iaW52b2ljZSI+0KTQsNC60YLRg9GA0LA8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJvZmZlciI+0J7RhNC10YDRgtCwPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iY29udHJhY3QiPtCU0L7Qs9C+0LLQvtGAPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0icmVjZWlwdCI+0JrQsNGB0L7QsiDQsdC+0L08L29wdGlvbj48L3NlbGVjdD48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCY0LzQtSDQvdCwINGE0LDQudC7IC8g0LHQtdC70LXQttC60LA8L2xhYmVsPjxpbnB1dCBpZD0iYWlGbiIgcGxhY2Vob2xkZXI9Imludm9pY2UucGRmIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCi0LXQutGB0YIg0L7RgiDQtNC+0LrRg9C80LXQvdGC0LA8L2xhYmVsPjx0ZXh0YXJlYSBpZD0iYWlSYXciIHJvd3M9IjkiIHBsYWNlaG9sZGVyPSLQn9C+0YHRgtCw0LLQuCDRgtGD0Log0YLQtdC60YHRgtCwINC+0YIgUERGLCDRgdC90LjQvNC60LAg0LjQu9C4INC40LzQtdC50LsuLi4iPjwvdGV4dGFyZWE+PC9kaXY+PGRpdiBjbGFzcz0ibWEiPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY21vKCkiPtCe0YLQutCw0Lc8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ic0FpU2NhbigpIj7QodC60LDQvdC40YDQsNC5PC9idXR0b24+PC9kaXY+JzsKICB9LAogIG9mZmljZTpmdW5jdGlvbigpewogICAgdmFyIG89d2luZG93Ll9vZmZpY2V8fHt9OwogICAgcmV0dXJuICc8aDM+0J7RhNC40YEg0L3QsNGB0YLRgNC+0LnQutC4PC9oMz48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCY0LzQtTwvbGFiZWw+PGlucHV0IGlkPSJvZk4iIHZhbHVlPSInK2VzYyhvLm5hbWV8fCfQntGB0L3QvtCy0LXQvSDQvtGE0LjRgScpKyciPjwvZGl2PjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPkxhdGl0dWRlPC9sYWJlbD48aW5wdXQgaWQ9Im9mTGF0IiB2YWx1ZT0iJytlc2Moby5sYXRpdHVkZXx8JycpKyciIHBsYWNlaG9sZGVyPSI0Mi42OTc3Ij48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPkxvbmdpdHVkZTwvbGFiZWw+PGlucHV0IGlkPSJvZkxuZyIgdmFsdWU9IicrZXNjKG8ubG9uZ2l0dWRlfHwnJykrJyIgcGxhY2Vob2xkZXI9IjIzLjMyMTkiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCg0LDQtNC40YPRgSDQvNC10YLRgNC4PC9sYWJlbD48aW5wdXQgaWQ9Im9mUmFkIiB0eXBlPSJudW1iZXIiIHZhbHVlPSInK2VzYyhvLnJhZGl1c19tfHwxMjApKyciPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KDQsNC30YDQtdGI0LXQvdC4IElQINCw0LTRgNC10YHQuDwvbGFiZWw+PGlucHV0IGlkPSJvZklwIiB2YWx1ZT0iJytlc2Moby5hbGxvd2VkX2lwc3x8JycpKyciIHBsYWNlaG9sZGVyPSIxLjIuMy40LCA1LjYuNy44Ij48L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO2xpbmUtaGVpZ2h0OjEuNjttYXJnaW4tdG9wOjRweCI+0JrQvtC+0YDQtNC40L3QsNGC0LjRgtC1INC80L7QttC1INC00LAg0LLQt9C10LzQtdGIINC+0YIgR29vZ2xlIE1hcHMuINCQ0LrQviBJUCDRgdGK0LLQv9Cw0LTQsCwg0YHQuNGB0YLQtdC80LDRgtCwINC80LDRgNC60LjRgNCwINGH0L7QstC10LrQsCDQutCw0YLQviDigJ7QsiDQvtGE0LjRgeKAnCDQtNC+0YDQuCDQsdC10Lcg0YLQvtGH0L3QsCDQs9C10L7Qu9C+0LrQsNGG0LjRjy48L2Rpdj48ZGl2IGNsYXNzPSJtYSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzT2ZmaWNlKCkiPtCX0LDQv9Cw0LfQuDwvYnV0dG9uPjwvZGl2Pic7CiAgfSwKICBvZmZlcjpmdW5jdGlvbigpe3JldHVybiAnPGgzPisg0JfQsNC/0LjRiNC4INC+0YTQtdGA0YLQsDwvaDM+PGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J3QvtC80LXRgDwvbGFiZWw+PGlucHV0IGlkPSJvTm0iIHBsYWNlaG9sZGVyPSJXVC0yMDI1LTAwMSI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmtC70LjQtdC90YI8L2xhYmVsPjxpbnB1dCBpZD0ib0NsIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCj0YHQu9GD0LPQsDwvbGFiZWw+PHNlbGVjdCBpZD0ib1N2Ij4nK1NPKyc8L3NlbGVjdD48L2Rpdj48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QodGD0LzQsCAo4oKsKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgc3RlcD0iMC4wMSIgaWQ9Im9UbyIgcGxhY2Vob2xkZXI9IjAuMDAiPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KHRgtCw0YLRg9GBPC9sYWJlbD48c2VsZWN0IGlkPSJvU3QiPjxvcHRpb24+0KfQsNC60LDRidCwPC9vcHRpb24+PG9wdGlvbj7Qn9GA0LjQtdGC0LA8L29wdGlvbj48b3B0aW9uPtCe0YLQutCw0LfQsNC90LA8L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtYSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBzIiBvbmNsaWNrPSJzT2ZmKCk7d2luZG93Lm9wZW4oXCdvZmZlci5odG1sXCcsXCdfYmxhbmtcJykiPtCX0LDQv9Cw0LfQuCArINCe0YTQtdGA0YLQsDwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzT2ZmKCkiPtCX0LDQv9Cw0LfQuDwvYnV0dG9uPjwvZGl2Pic7fSwKICBjb250cmFjdDpmdW5jdGlvbigpe3JldHVybiAnPGgzPisg0J3QvtCyINC00L7Qs9C+0LLQvtGAPC9oMz48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmtC70LjQtdC90YI8L2xhYmVsPjxpbnB1dCBpZD0iY29DIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCe0L/QuNGB0LDQvdC40LU8L2xhYmVsPjxpbnB1dCBpZD0iY29OIiBwbGFjZWhvbGRlcj0i0KPQtdCx0YHQsNC50YIsINCc0LDRgNC60LXRgtC40L3Qsy4uLiI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QlNCw0YLQsCDQvdCwINC/0L7QtNC/0LjRgdCy0LDQvdC1PC9sYWJlbD48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNvRHQiPjwvZGl2PjxkaXYgY2xhc3M9Im1hIj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImNtbygpIj7QntGC0LrQsNC3PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9InNDb24oKSI+0JfQsNC/0LDQt9C4PC9idXR0b24+PC9kaXY+Jzt9Cn07Cgphc3luYyBmdW5jdGlvbiBtb2RhbCh0eXBlLGlkKXsKICBpZighRC51c2Vycy5sZW5ndGgpRC51c2Vycz1hd2FpdCBhZigndXNlcnMnKXx8W107CiAgaWYodHlwZT09PSdvZmZpY2UnKXdpbmRvdy5fb2ZmaWNlPWF3YWl0IGFmKCdvZmZpY2Vfc2V0dGluZ3MnKXx8e307CiAgdmFyIGg9Jyc7CiAgaWYodHlwZT09PSdlZGl0UHJvamVjdCcmJmlkKXt2YXIgcD1ELnByb2plY3RzLmZpbmQoZnVuY3Rpb24oeCl7cmV0dXJuIHguaWQ9PT1pZDt9KTtoPU1MLnByb2plY3QocCk7fQogIGVsc2UgaWYodHlwZT09PSdwcm9qZWN0JyloPU1MLnByb2plY3QobnVsbCk7CiAgZWxzZSBpZih0eXBlPT09J25ld1VzZXInKWg9dUZvcm0obnVsbCk7CiAgZWxzZSBpZih0eXBlPT09J2VkaXRVc2VyJyYmaWQpe3ZhciB1PUQudXNlcnMuZmluZChmdW5jdGlvbih4KXtyZXR1cm4gU3RyaW5nKHguaWQpPT09U3RyaW5nKGlkKTt9KTtoPXVGb3JtKHUpO30KICBlbHNlIGlmKHR5cGU9PT0nY2FsVGFzaycpaD1NTC5jYWxUYXNrKGlkfHxudWxsKTsKICBlbHNlIGlmKE1MW3R5cGVdKWg9TUxbdHlwZV0oKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWInKS5pbm5lckhUTUw9aDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW8nKS5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7CiAgaWYodHlwZT09PSdlZGl0VXNlcicmJmlkKXsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgdmFyIHU9RC51c2Vycy5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiBTdHJpbmcoeC5pZCk9PT1TdHJpbmcoaWQpO30pOwogICAgICBpZih1KXt2YXIgcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndUMnKTtpZihzKXMudmFsdWU9dS5jb2xvcnx8J2F2LXAnO30KICAgIH0sMTApOwogIH0KfQpmdW5jdGlvbiBjbW8oKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW8nKS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7fQoKLy8g4pSA4pSAIFNBVkUg4pSA4pSACmFzeW5jIGZ1bmN0aW9uIHNQcmooZWlkKXsKICB2YXIgbj1ndignbU4nKTtpZighbil7dG9hc3QoJ9CS0YrQstC10LTQtdGC0LUg0L3QsNC30LLQsNC90LjQtScsJ2VycicpO3JldHVybjt9CiAgdmFyIGQ9e2lkOmVpZHx8dW5kZWZpbmVkLG5hbWU6bixjbGllbnQ6Z3YoJ21DbCcpLHBob25lOmd2KCdtUGgnKSxzdGF0dXM6Z3YoJ21TdCcpLHRvdGFsOmd2KCdtVG8nKXx8MCxyZWNlaXZlZDpndignbVJjJyl8fDAsc3RhcnQ6Z3YoJ21TdDInKXx8bnVsbCxkZWFkbGluZTpndignbURsJyl8fG51bGwscHJvZ3Jlc3M6cGFyc2VJbnQoZ3YoJ21QcicpKXx8MCxhc3NpZ25lZTpndignbUFzJyksdGFnczpndignbVRnJykuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpO30pLmZpbHRlcihCb29sZWFuKSxyZWN1cnJpbmc6Z3YoJ21ScicpLG5vdGVzOmd2KCdtTnQnKX07CiAgdmFyIHI9YXdhaXQgYWYoJ3Byb2plY3RzJywnUE9TVCcsZCk7CiAgaWYocil7YXdhaXQgbEEoZ3YoJ21BcycpLChlaWQ/J9C+0LHQvdC+0LLQuCc6J9C00L7QsdCw0LLQuCcpKycg0L/RgNC+0LXQutGCOiAnK24pO2NtbygpO2F3YWl0IGxvYWRBbGwoKTt0b2FzdChlaWQ/J9Ce0LHQvdC+0LLQtdC9ISc6J9CU0L7QsdCw0LLQtdC9IScsJ29rJyk7fQogIGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgScsJ2VycicpOwp9CmFzeW5jIGZ1bmN0aW9uIGRQcmooaWQpe2lmKCFjb25maXJtKCfQmNC30YLRgNC40Lkg0L/RgNC+0LXQutGC0LA/JykpcmV0dXJuO2F3YWl0IGFmKCdwcm9qZWN0cycsJ0RFTEVURScsbnVsbCwnJmlkPScraWQpO2NtbygpO2F3YWl0IGxvYWRBbGwoKTt0b2FzdCgn0JjQt9GC0YDQuNGC0L4nKTt9CmFzeW5jIGZ1bmN0aW9uIHNUYXNrKCl7CiAgdmFyIHR4PWd2KCd0VHgnKTtpZighdHgpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC+0L/QuNGB0LDQvdC40LUnLCdlcnInKTtyZXR1cm47fQogIHZhciByPWF3YWl0IGFmKCd0YXNrcycsJ1BPU1QnLHt0ZXh0OnR4LGFzc2lnbmVlOmd2KCd0QXMnKSx1cmdlbnQ6Z3YoJ3RVcicpLGRvbmU6MH0pOwogIGlmKHIpe2NtbygpO0QudGFza3M9YXdhaXQgYWYoJ3Rhc2tzJyl8fFtdO3JUYXNrcygpO3JEYXNoKCk7dG9hc3QoJ9CU0L7QsdCw0LLQtdC90LAhJywnb2snKTt9Cn0KYXN5bmMgZnVuY3Rpb24gc0NhbFRhc2soKXsKICB2YXIgdHg9Z3YoJ2N0VHgnKTtpZighdHgpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC+0L/QuNGB0LDQvdC40LUnLCdlcnInKTtyZXR1cm47fQogIHZhciBkdD1ndignY3REdCcpO2lmKCFkdCl7dG9hc3QoJ9CY0LfQsdC10YDQtdGC0LUg0LTQsNGC0LAnLCdlcnInKTtyZXR1cm47fQogIHZhciB0bT1ndignY3RUbScpOwogIHZhciByPWF3YWl0IGFmKCd0YXNrcycsJ1BPU1QnLHt0ZXh0OnR4LGFzc2lnbmVlOmd2KCdjdEFzJyksdXJnZW50Omd2KCdjdFVyJyksZG9uZTowLGR1ZV9kYXRlOnRtP2R0KydUJyt0bTpkdH0pOwogIGlmKHIpe2NtbygpO0QudGFza3M9YXdhaXQgYWYoJ3Rhc2tzJyl8fFtdO3JDYWxlbmRhcigpO3RvYXN0KCfQlNC+0LHQsNCy0LXQvdCwIScsJ29rJyk7fQp9CmFzeW5jIGZ1bmN0aW9uIHNOb3RlKCl7CiAgdmFyIHRpPWd2KCduVGknKTtpZighdGkpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC30LDQs9C70LDQstC40LUnLCdlcnInKTtyZXR1cm47fQogIHZhciByPWF3YWl0IGFmKCdub3RlcycsJ1BPU1QnLHt0aXRsZTp0aSxib2R5Omd2KCduQm8nKSxhdXRob3I6Z3YoJ25BdScpLHVyZ2VudDpndignblVyJyl9KTsKICBpZihyKXtjbW8oKTtELm5vdGVzPWF3YWl0IGFmKCdub3RlcycpfHxbXTtyTm90ZXMoKTtyRGFzaCgpO3RvYXN0KCfQl9Cw0L/QsNC30LXQvdCwIScsJ29rJyk7fQp9CmFzeW5jIGZ1bmN0aW9uIHNDbGkoKXsKICB2YXIgbj1ndignY05tJyk7aWYoIW4pe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC40LzQtScsJ2VycicpO3JldHVybjt9CiAgdmFyIHI9YXdhaXQgYWYoJ2NsaWVudHMnLCdQT1NUJyx7bmFtZTpuLGNvbXBhbnk6Z3YoJ2NDbycpLGVtYWlsOmd2KCdjRW0nKSxwaG9uZTpndignY1BoJyksZWlrOmd2KCdjRWsnKSxub3RlczpndignY050Jyl9KTsKICBpZihyKXtjbW8oKTtELmNsaWVudHM9YXdhaXQgYWYoJ2NsaWVudHMnKXx8W107ckNsaSgpO3RvYXN0KCfQlNC+0LHQsNCy0LXQvSEnLCdvaycpO30KfQphc3luYyBmdW5jdGlvbiBzSG9zdCgpewogIHZhciBkbzI9Z3YoJ2hEbycpO2lmKCFkbzIpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC00L7QvNC10LnQvScsJ2VycicpO3JldHVybjt9CiAgdmFyIHI9YXdhaXQgYWYoJ2hvc3RpbmcnLCdQT1NUJyx7ZG9tYWluOmRvMixjbGllbnQ6Z3YoJ2hDbCcpLHNlcnZlcjpndignaFNyJyksdHlwZTpndignaFR5JyksZGlzazpndignaERpJykscGxhbjpndignaFBsJyksc3NsOmd2KCdoU3NsJyl8fG51bGx9KTsKICBpZihyKXtjbW8oKTtELmhvc3Rpbmc9YXdhaXQgYWYoJ2hvc3RpbmcnKXx8W107ckhvc3RpbmcoKTt0b2FzdCgn0JTQvtCx0LDQstC10L0hJywnb2snKTt9Cn0KYXN5bmMgZnVuY3Rpb24gc1Bhc3MoKXsKICB2YXIgc2k9Z3YoJ3BTaScpO2lmKCFzaSl7dG9hc3QoJ9CS0YrQstC10LTQtdGC0LUg0YHQsNC50YInLCdlcnInKTtyZXR1cm47fQogIHZhciBjbGllbnQ9Z3YoJ3BDbCcpOwogIHZhciByPWF3YWl0IGFmKCdwYXNzd29yZHMnLCdQT1NUJyx7aWQ6UFcuZWRpdElkfHx1bmRlZmluZWQsc2l0ZTpzaSx1c2VyOmd2KCdwVXMnKSxwYXNzOmd2KCdwUHcnKSxjYXQ6Z3YoJ3BDYScpLGNsaWVudDpjbGllbnQsdmlzaWJsZV90bzpjb2xsZWN0UHdWaXNpYmxlKCl9KTsKICBpZihyKXtQVy5jbGllbnQ9Y2xpZW50fHwn0JHQtdC3INC60LvQuNC10L3Rgic7UFcuZWRpdElkPScnO2NtbygpO0QucGFzc3dvcmRzPWF3YWl0IGFmKCdwYXNzd29yZHMnKXx8W107clBhc3N3b3JkcygpO3RvYXN0KCfQl9Cw0L/QuNGB0LDQvdC+IScsJ29rJyk7fQp9CmFzeW5jIGZ1bmN0aW9uIHNBaVNjYW4oKXsKICB2YXIgcmF3PWd2KCdhaVJhdycpO2lmKCFyYXcpe3RvYXN0KCfQn9C+0YHRgtCw0LLQuCDRgtC10LrRgdGCINC+0YIg0LTQvtC60YPQvNC10L3RgtCwJywnZXJyJyk7cmV0dXJuO30KICB2YXIgcj1hd2FpdCBhZignYWlfc2NhbnMnLCdQT1NUJyx7ZG9jX3R5cGU6Z3YoJ2FpVHknKSxmaWxlX25hbWU6Z3YoJ2FpRm4nKSxyYXdfdGV4dDpyYXcsY3JlYXRlZF9ieTpDVT9DVS5uYW1lOicnfSk7CiAgaWYocil7Y21vKCk7RC5haV9zY2Fucz1hd2FpdCBhZignYWlfc2NhbnMnKXx8W107ckFpU2NhbnMoKTt0b2FzdCgn0KDQsNC30L/QvtC30L3QsNGC0Lgg0L/QvtC70LXRgtCwOiAnK09iamVjdC5rZXlzKHIuZXh0cmFjdGVkfHx7fSkubGVuZ3RoLCdvaycpO30KfQphc3luYyBmdW5jdGlvbiBzT2ZmaWNlKCl7CiAgdmFyIHI9YXdhaXQgYWYoJ29mZmljZV9zZXR0aW5ncycsJ1BPU1QnLHtuYW1lOmd2KCdvZk4nKSxsYXRpdHVkZTpndignb2ZMYXQnKXx8bnVsbCxsb25naXR1ZGU6Z3YoJ29mTG5nJyl8fG51bGwscmFkaXVzX206Z3YoJ29mUmFkJyl8fDEyMCxhbGxvd2VkX2lwczpndignb2ZJcCcpfSk7CiAgaWYocil7Y21vKCk7dG9hc3QoJ9Ce0YTQuNGBINC90LDRgdGC0YDQvtC50LrQuNGC0LUg0YHQsCDQt9Cw0L/QsNC30LXQvdC4Jywnb2snKTtyUHJlc2VuY2UoKTt9Cn0KYXN5bmMgZnVuY3Rpb24gc09mZigpewogIHZhciByPWF3YWl0IGFmKCdvZmZlcnMnLCdQT1NUJyx7bnVtOmd2KCdvTm0nKSxjbGllbnQ6Z3YoJ29DbCcpLHNlcnZpY2U6Z3YoJ29TdicpLHRvdGFsOmd2KCdvVG8nKXx8MCxzdGF0dXM6Z3YoJ29TdCcpfSk7CiAgaWYocil7Y21vKCk7RC5vZmZlcnM9YXdhaXQgYWYoJ29mZmVycycpfHxbXTtyT2ZmZXJzKCk7dG9hc3QoJ9CX0LDQv9C40YHQsNC90LAhJywnb2snKTt9Cn0KYXN5bmMgZnVuY3Rpb24gc0NvbigpewogIHZhciByPWF3YWl0IGFmKCdjb250cmFjdHMnLCdQT1NUJyx7Y2xpZW50Omd2KCdjb0MnKSxuYW1lOmd2KCdjb04nKSxzaWduX2RhdGU6Z3YoJ2NvRHQnKXx8bnVsbH0pOwogIGlmKHIpe2NtbygpO0QuY29udHJhY3RzPWF3YWl0IGFmKCdjb250cmFjdHMnKXx8W107ckNvbnRyYWN0cygpO3RvYXN0KCfQlNC+0LHQsNCy0LXQvSEnLCdvaycpO30KfQphc3luYyBmdW5jdGlvbiBzVShlaWQpewogIHZhciBuPWd2KCd1TicpO2lmKCFuKXt0b2FzdCgn0JLRitCy0LXQtNC10YLQtSDQuNC80LUnLCdlcnInKTtyZXR1cm47fQogIHZhciB1PWd2KCd1VScpO2lmKCF1KXt0b2FzdCgn0JLRitCy0LXQtNC10YLQtSDQv9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQviDQuNC80LUnLCdlcnInKTtyZXR1cm47fQogIHZhciBwPWd2KCd1UCcpO2lmKCFlaWQmJnAubGVuZ3RoPDYpe3RvYXN0KCfQn9Cw0YDQvtC70LDRgtCwINGC0YDRj9Cx0LLQsCDQtNCwINC1INC/0L7QvdC1IDYg0YHQuNC80LLQvtC70LAnLCdlcnInKTtyZXR1cm47fQogIHZhciBkPXtpZDplaWR8fHVuZGVmaW5lZCxuYW1lOm4scm9sZTpndigndVInKSxhY2Nlc3Nfcm9sZTpndigndUFyJyl8fCdlbXBsb3llZScsdXNlcm5hbWU6dSxpbml0aWFsczpndigndUknKXx8bi5zbGljZSgwLDIpLnRvVXBwZXJDYXNlKCksY29sb3I6Z3YoJ3VDJyl8fCdhdi1wJyxpc19hZG1pbjpndigndUEnKSxvbmxpbmU6MX07CiAgaWYocClkLnBhc3N3b3JkPXA7CiAgdmFyIHI9YXdhaXQgYWYoJ3VzZXJzJywnUE9TVCcsZCk7CiAgaWYocil7Y21vKCk7RC51c2Vycz1hd2FpdCBhZigndXNlcnMnKXx8W107clVzZXJzKCk7clRlYW0oKTt0b2FzdChlaWQ/J9Ce0LHQvdC+0LLQtdC9ISc6J9CU0L7QsdCw0LLQtdC9IScsJ29rJyk7fQogIGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCDigJQg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L7RgtC+INC40LzQtSDQvNC+0LbQtSDQtNCwINC1INC30LDQtdGC0L4nLCdlcnInKTsKfQphc3luYyBmdW5jdGlvbiBkVShpZCl7aWYoIWNvbmZpcm0oJ9CY0LfRgtGA0LjQuSDQv9C+0YLRgNC10LHQuNGC0LXQu9GPPycpKXJldHVybjthd2FpdCBhZigndXNlcnMnLCdERUxFVEUnLG51bGwsJyZpZD0nK2lkKTtELnVzZXJzPWF3YWl0IGFmKCd1c2VycycpfHxbXTtyVXNlcnMoKTtyVGVhbSgpO2NtbygpO3RvYXN0KCfQmNC30YLRgNC40YLQvicpO30KYXN5bmMgZnVuY3Rpb24gZHIodGJsLGlkKXsKICBpZighY29uZmlybSgn0JjQt9GC0YDQuNC5PycpKXJldHVybjsKICBhd2FpdCBhZih0YmwsJ0RFTEVURScsbnVsbCwnJmlkPScraWQpOwogIERbdGJsXT1hd2FpdCBhZih0YmwpfHxbXTsKICB2YXIgbT17bm90ZXM6ck5vdGVzLGhvc3Rpbmc6ckhvc3RpbmcscGFzc3dvcmRzOnJQYXNzd29yZHMsY29udHJhY3RzOnJDb250cmFjdHMsb2ZmZXJzOnJPZmZlcnMsYWlfc2NhbnM6ckFpU2NhbnN9OwogIGlmKG1bdGJsXSltW3RibF0oKTsKICB0b2FzdCgn0JjQt9GC0YDQuNGC0L4nKTsKfQphc3luYyBmdW5jdGlvbiBsQSh3aG8sd2hhdCl7CiAgdmFyIHU9RC51c2Vycy5maW5kKGZ1bmN0aW9uKG0pe3JldHVybiBtLm5hbWU9PT13aG87fSl8fEQudXNlcnNbMF07CiAgYXdhaXQgYWYoJ2FjdGl2aXR5JywnUE9TVCcse3dobzp3aG98fCfQodC40YHRgtC10LzQsCcsd2hhdDp3aGF0LGNvbG9yOih1JiZ1LmNvbG9yKXx8J2F2LXAnLGluaXRpYWxzOih1JiZ1LmluaXRpYWxzKXx8Jz8/J30pOwogIEQuYWN0aXZpdHk9YXdhaXQgYWYoJ2FjdGl2aXR5Jyl8fFtdOwp9CgpmdW5jdGlvbiBjaGlwUyhlbCl7ZWwuY2xvc2VzdCgnLmNoaXBzJykucXVlcnlTZWxlY3RvckFsbCgnLmNoaXAnKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2MuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7fSk7ZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7fQpmdW5jdGlvbiB0b2FzdChtc2csdHlwZSl7CiAgdmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvYXN0Jyk7dC50ZXh0Q29udGVudD1tc2c7dC5jbGFzc05hbWU9J3RvYXN0IHNob3cgJysodHlwZXx8JycpOwogIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmNsYXNzTmFtZT0ndG9hc3QnO30sMjUwMCk7Cn0KPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=', 'invoice-doc.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0JTQvtC60YPQvNC10L3RgiDigJQgV2VidHJpeGlhPC90aXRsZT4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Tb3JhOndnaHRAMzAwOzQwMDs1MDA7NjAwOzcwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ey0tZ3JlZW46IzFhYTY0YzstLWRhcms6IzEyMTMxYTstLXR4OiMxYTFhMmU7LS10eDI6IzRhNGE2YTstLXR4MzojODg4OGFhOy0tYnJkOiNlM2UxZjA7LS1iZzojZWVmMGZifQoqe21hcmdpbjowO3BhZGRpbmc6MDtib3gtc2l6aW5nOmJvcmRlci1ib3h9CmJvZHl7Zm9udC1mYW1pbHk6J1NvcmEnLHNhbnMtc2VyaWY7YmFja2dyb3VuZDp2YXIoLS1iZyk7bWluLWhlaWdodDoxMDB2aDtwYWRkaW5nOjI2cHggMTZweDtjb2xvcjp2YXIoLS10eCl9Ci50b29sYmFye21heC13aWR0aDo4MjBweDttYXJnaW46MCBhdXRvIDE0cHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6OHB4fQoudGJ0bntwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OXB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OidTb3JhJyxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwfQoudGJ0bi5we2JhY2tncm91bmQ6dmFyKC0tZ3JlZW4pO2NvbG9yOiNmZmZ9Ci50YnRuLnN7YmFja2dyb3VuZDojZmZmO2NvbG9yOnZhcigtLXR4Mik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpfQoucGFnZXttYXgtd2lkdGg6ODIwcHg7bWFyZ2luOjAgYXV0bztiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNnB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgNHB4IDQwcHggcmdiYSgyMCwyMCw0MCwuMDgpfQouaGVhZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nOjM0cHggNDJweCAyMHB4fQoubG9nb3tmb250LXNpemU6MjJweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZ3JlZW4pO2xldHRlci1zcGFjaW5nOi0uNXB4fQouc3VwcGxpZXJ7dGV4dC1hbGlnbjpyaWdodDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjc7Y29sb3I6dmFyKC0tdHgyKX0KLnN1cHBsaWVyIGJ7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtc2l6ZToxM3B4fQouYmFkZ2Utcm93e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDQycHggMjBweH0KLm9yaWd7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6N3B4IDE2cHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4Myk7bGV0dGVyLXNwYWNpbmc6LjA1ZW19Ci5yZWNpcGllbnR7dGV4dC1hbGlnbjpyaWdodDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjc7Y29sb3I6dmFyKC0tdHgyKX0KLnJlY2lwaWVudCBie2NvbG9yOnZhcigtLXR4KTtmb250LXNpemU6MTNweH0KLnRpdGxlYmFye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpmbGV4LWVuZDtwYWRkaW5nOjZweCA0MnB4IDIycHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKX0KLnR0e30KLnR0IC5sYmx7Zm9udC1zaXplOjEwcHg7bGV0dGVyLXNwYWNpbmc6LjE1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLXR4Myl9Ci50dCAubnVte2ZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1ncmVlbik7bWFyZ2luOjJweCAwIDEwcHh9Ci5kYXRlc3tmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDIpO2xpbmUtaGVpZ2h0OjEuOX0KLmRhdGVzIGJ7Y29sb3I6dmFyKC0tdHgpfQouYW1vdW50Ym94e2JhY2tncm91bmQ6dmFyKC0tZ3JlZW4pO2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6MThweCAyNnB4O3RleHQtYWxpZ246cmlnaHQ7bWluLXdpZHRoOjIxMHB4fQouYW1vdW50Ym94IC5iaWd7Zm9udC1zaXplOjM0cHg7Zm9udC13ZWlnaHQ6NzAwfQp0YWJsZS5pdGVtc3t3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW46MjJweCAwO2ZvbnQtc2l6ZToxMi41cHh9CnRhYmxlLml0ZW1zIHRoe3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjlweCA4cHg7Y29sb3I6dmFyKC0tdHgzKTtmb250LXdlaWdodDo2MDA7Ym9yZGVyLWJvdHRvbToycHggc29saWQgdmFyKC0tYnJkKTtmb250LXNpemU6MTFweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA0ZW19CnRhYmxlLml0ZW1zIHRke3BhZGRpbmc6MTFweCA4cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKX0KdGFibGUuaXRlbXMgdGg6bnRoLWNoaWxkKDIpLHRhYmxlLml0ZW1zIHRkOm50aC1jaGlsZCgyKSwKdGFibGUuaXRlbXMgdGg6bnRoLWNoaWxkKDMpLHRhYmxlLml0ZW1zIHRkOm50aC1jaGlsZCgzKSwKdGFibGUuaXRlbXMgdGg6bnRoLWNoaWxkKDQpLHRhYmxlLml0ZW1zIHRkOm50aC1jaGlsZCg0KSwKdGFibGUuaXRlbXMgdGg6bnRoLWNoaWxkKDUpLHRhYmxlLml0ZW1zIHRkOm50aC1jaGlsZCg1KXt0ZXh0LWFsaWduOnJpZ2h0fQouYm90dG9te2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjAgNDJweCAzNHB4O2dhcDoyMHB4O2ZsZXgtd3JhcDp3cmFwfQoucGF5e2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuOTtjb2xvcjp2YXIoLS10eDIpO21heC13aWR0aDozNDBweH0KLnBheSBie2NvbG9yOnZhcigtLXR4KX0KLndvcmRze2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4Mik7bWFyZ2luLXRvcDoxNHB4fQoudG90YWxze2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6Mjt0ZXh0LWFsaWduOnJpZ2h0O21pbi13aWR0aDoyMjBweH0KLnRvdGFscyAuZ3JhbmR7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWdyZWVuKX0KLnNpZ257ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MjBweCA0MnB4IDM2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKX0KLml0ZW1ib3h7cGFkZGluZzowIDQycHh9Cip7LXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6ZXhhY3Q7cHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0KQHBhZ2V7c2l6ZTpBNDttYXJnaW46MTJtbSAxMG1tfQpAbWVkaWEgcHJpbnR7CiAgaHRtbCxib2R5e2JhY2tncm91bmQ6I2ZmZjtwYWRkaW5nOjA7bWFyZ2luOjB9CiAgLnRvb2xiYXJ7ZGlzcGxheTpub25lfQogIC5wYWdle2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjA7bWF4LXdpZHRoOjEwMCU7bWFyZ2luOjB9CiAgdGFibGUuaXRlbXMgdHJ7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9CiAgLmJvdHRvbSwuc2lnbntwYWdlLWJyZWFrLWluc2lkZTphdm9pZH0KICAuYW1vdW50Ym94e2JhY2tncm91bmQ6dmFyKC0tZ3JlZW4pIWltcG9ydGFudDtjb2xvcjojZmZmIWltcG9ydGFudH0KfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICA8YnV0dG9uIGNsYXNzPSJ0YnRuIHMiIG9uY2xpY2s9Imhpc3RvcnkuYmFjaygpIj7ihpAg0J3QsNC30LDQtDwvYnV0dG9uPgogIDxidXR0b24gY2xhc3M9InRidG4gcCIgb25jbGljaz0id2luZG93LnByaW50KCkiPvCflqjvuI8g0J/QtdGH0LDRgiAvIFBERjwvYnV0dG9uPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZSIgaWQ9InBhZ2UiPtCX0LDRgNC10LbQtNCw4oCmPC9kaXY+Cgo8c2NyaXB0PgondXNlIHN0cmljdCc7CnZhciBBUEk9KGZ1bmN0aW9uKCl7CiAgdmFyIHNhdmVkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3dF9hcGknKTsKICBpZihzYXZlZClyZXR1cm4gc2F2ZWQ7CiAgdmFyIGJhc2U9d2luZG93LmxvY2F0aW9uLm9yaWdpbit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvaW52b2ljZS1kb2NcLmh0bWwkLywnJykucmVwbGFjZSgvXC8kLywnJyk7CiAgcmV0dXJuIGJhc2UrJy9hcGkucGhwJzsKfSkoKTsKdmFyIHBhcmFtcz1uZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCk7CnZhciBkb2NJZD1wYXJhbXMuZ2V0KCdpZCcpOwoKdmFyIFRZUEVfTEFCRUw9e3Byb2Zvcm1hOifQn9GA0L7RhNC+0YDQvNCwINGE0LDQutGC0YPRgNCwJyxpbnZvaWNlOifQpNCw0LrRgtGD0YDQsCcsY3JlZGl0X25vdGU6J9Ca0YDQtdC00LjRgtC90L4g0LjQt9Cy0LXRgdGC0LjQtScsZGViaXRfbm90ZTon0JTQtdCx0LjRgtC90L4g0LjQt9Cy0LXRgdGC0LjQtScsb2ZmZXI6J9Ce0YTQtdGA0YLQsCcscXVvdGU6J9Ce0YTQtdGA0YLQsCd9OwoKLy8g4pSA4pSAIEJ1bGdhcmlhbiBudW1iZXItdG8td29yZHMg4pSA4pSACnZhciBvbmVzPVsnJywgJ9C10LTQuNC9JywgJ9C00LLQsCcsICfRgtGA0LgnLCAn0YfQtdGC0LjRgNC4JywgJ9C/0LXRgicsICfRiNC10YHRgicsICfRgdC10LTQtdC8JywgJ9C+0YHQtdC8JywgJ9C00LXQstC10YInXTsKdmFyIG9uZXNGZW09WycnLCAn0LXQtNC90LAnLCAn0LTQstC1JywgJ9GC0YDQuCcsICfRh9C10YLQuNGA0LgnLCAn0L/QtdGCJywgJ9GI0LXRgdGCJywgJ9GB0LXQtNC10LwnLCAn0L7RgdC10LwnLCAn0LTQtdCy0LXRgiddOwp2YXIgdGVlbnM9WyfQtNC10YHQtdGCJywn0LXQtNC40L3QsNC00LXRgdC10YInLCfQtNCy0LDQvdCw0LTQtdGB0LXRgicsJ9GC0YDQuNC90LDQtNC10YHQtdGCJywn0YfQtdGC0LjRgNC40L3QsNC00LXRgdC10YInLCfQv9C10YLQvdCw0LTQtdGB0LXRgicsJ9GI0LXRgdGC0L3QsNC00LXRgdC10YInLCfRgdC10LTQtdC80L3QsNC00LXRgdC10YInLCfQvtGB0LXQvNC90LDQtNC10YHQtdGCJywn0LTQtdCy0LXRgtC90LDQtNC10YHQtdGCJ107CnZhciB0ZW5zPVsnJywnJywn0LTQstCw0LTQtdGB0LXRgicsJ9GC0YDQuNC00LXRgdC10YInLCfRh9C10YLQuNGA0LjQtNC10YHQtdGCJywn0L/QtdGC0LTQtdGB0LXRgicsJ9GI0LXRgdGC0LTQtdGB0LXRgicsJ9GB0LXQtNC10LzQtNC10YHQtdGCJywn0L7RgdC10LzQtNC10YHQtdGCJywn0LTQtdCy0LXRgtC00LXRgdC10YInXTsKdmFyIGh1bmRyZWRzPVsnJywn0YHRgtC+Jywn0LTQstC10YHRgtCwJywn0YLRgNC40YHRgtCwJywn0YfQtdGC0LjRgNC40YHRgtC+0YLQuNC9Jywn0L/QtdGC0YHRgtC+0YLQuNC9Jywn0YjQtdGB0YLRgdGC0L7RgtC40L0nLCfRgdC10LTQtdC80YHRgtC+0YLQuNC9Jywn0L7RgdC10LzRgdGC0L7RgtC40L0nLCfQtNC10LLQtdGC0YHRgtC+0YLQuNC9J107CgpmdW5jdGlvbiB0aHJlZURpZ2l0cyhuLGZlbSl7CiAgbj1uJTEwMDA7CiAgdmFyIGg9TWF0aC5mbG9vcihuLzEwMCksIHI9biUxMDA7CiAgdmFyIHBhcnRzPVtdOwogIGlmKGgpIHBhcnRzLnB1c2goaHVuZHJlZHNbaF0pOwogIGlmKHI+PTEwJiZyPDIwKXsgcGFydHMucHVzaCh0ZWVuc1tyLTEwXSk7IH0KICBlbHNlewogICAgdmFyIHQ9TWF0aC5mbG9vcihyLzEwKSwgbz1yJTEwOwogICAgaWYodCkgcGFydHMucHVzaCh0ZW5zW3RdKTsKICAgIGlmKG8pIHBhcnRzLnB1c2goKGZlbT9vbmVzRmVtOm9uZXMpW29dKTsKICB9CiAgaWYocGFydHMubGVuZ3RoPT09MCkgcmV0dXJuICcnOwogIGlmKHBhcnRzLmxlbmd0aD09PTEpIHJldHVybiBwYXJ0c1swXTsKICByZXR1cm4gcGFydHMuc2xpY2UoMCwtMSkuam9pbignICcpKycg0LggJytwYXJ0c1twYXJ0cy5sZW5ndGgtMV07Cn0KZnVuY3Rpb24gbnVtVG9Xb3JkcyhuKXsKICBuPU1hdGguZmxvb3Iobik7CiAgaWYobj09PTApIHJldHVybiAn0L3Rg9C70LAnOwogIHZhciBwYXJ0cz1bXTsKICB2YXIgbWlsbGlvbnM9TWF0aC5mbG9vcihuLzEwMDAwMDApOwogIHZhciB0aG91c2FuZHM9TWF0aC5mbG9vcigobiUxMDAwMDAwKS8xMDAwKTsKICB2YXIgcmVzdD1uJTEwMDA7CiAgaWYobWlsbGlvbnMpIHBhcnRzLnB1c2godGhyZWVEaWdpdHMobWlsbGlvbnMsZmFsc2UpKycgJysobWlsbGlvbnM9PT0xPyfQvNC40LvQuNC+0L0nOifQvNC40LvQuNC+0L3QsCcpKTsKICBpZih0aG91c2FuZHMpIHBhcnRzLnB1c2godGhvdXNhbmRzPT09MT8n0YXQuNC70Y/QtNCwJzp0aHJlZURpZ2l0cyh0aG91c2FuZHMsdHJ1ZSkrJyDRhdC40LvRj9C00LgnKTsKICBpZihyZXN0KSBwYXJ0cy5wdXNoKHRocmVlRGlnaXRzKHJlc3QsZmFsc2UpKTsKICByZXR1cm4gcGFydHMuam9pbignICcpOwp9CmZ1bmN0aW9uIGFtb3VudFdvcmRzKHRvdGFsLGN1cnJlbmN5KXsKICB2YXIgd2hvbGU9TWF0aC5mbG9vcih0b3RhbCk7CiAgdmFyIGNlbnRzPU1hdGgucm91bmQoKHRvdGFsLXdob2xlKSoxMDApOwogIHZhciBjdXJXaG9sZSA9IGN1cnJlbmN5PT09J0JHTicgPyAod2hvbGU9PT0xPyfQu9C10LInOifQu9C10LLQsCcpIDogKHdob2xlPT09MT8n0LXQstGA0L4nOifQtdCy0YDQvicpOwogIHZhciBjdXJDZW50cyA9IGN1cnJlbmN5PT09J0JHTicgPyAn0YHRgtC+0YLQuNC90LrQuCcgOiAn0YbQtdC90YLQsCc7CiAgdmFyIHc9bnVtVG9Xb3Jkcyh3aG9sZSk7CiAgdz13LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3cuc2xpY2UoMSk7CiAgdmFyIG91dD13KycgJytjdXJXaG9sZTsKICBpZihjZW50cz4wKSBvdXQrPScg0LggJytudW1Ub1dvcmRzKGNlbnRzKSsnICcrY3VyQ2VudHM7CiAgcmV0dXJuIG91dDsKfQpmdW5jdGlvbiBmbXREYXRlKHMpewogIGlmKCFzKXJldHVybiAn4oCUJzsKICB2YXIgZD1uZXcgRGF0ZShzKydUMDA6MDA6MDAnKTsKICByZXR1cm4gU3RyaW5nKGQuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCcwJykrJy4nK1N0cmluZyhkLmdldE1vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpKycuJytkLmdldEZ1bGxZZWFyKCk7Cn0KZnVuY3Rpb24gbW9uZXkobixjdXIpeyByZXR1cm4gKHBhcnNlRmxvYXQobnx8MCkpLnRvRml4ZWQoMikrJyAnKyhjdXJ8fCdFVVInKTsgfQoKYXN5bmMgZnVuY3Rpb24gbG9hZCgpewogIHRyeXsKICAgIHZhciByPWF3YWl0IGZldGNoKEFQSSsnP2FjdGlvbj1kb2N1bWVudF9mdWxsJmlkPScrZW5jb2RlVVJJQ29tcG9uZW50KGRvY0lkKSk7CiAgICB2YXIgaj1hd2FpdCByLmpzb24oKTsKICAgIGlmKCFqLm9rKXsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UnKS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9InBhZGRpbmc6NDBweCI+0JTQvtC60YPQvNC10L3RgtGK0YIg0L3QtSDQtSDQvdCw0LzQtdGA0LXQvS48L2Rpdj4nOyByZXR1cm47IH0KICAgIHJlbmRlcihqLmRhdGEuZG9jdW1lbnQsIGouZGF0YS5jb21wYW55KTsKICB9Y2F0Y2goZSl7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlJykuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJwYWRkaW5nOjQwcHgiPtCT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNGA0LXQttC00LDQvdC1LjwvZGl2Pic7IH0KfQoKZnVuY3Rpb24gcmVuZGVyKGQsY29tcCl7CiAgY29tcD1jb21wfHx7fTsKICB2YXIgc25hcD1kLmNsaWVudF9zbmFwc2hvdHx8e307CiAgdmFyIGl0ZW1zPWQuaXRlbXN8fFtdOwogIHZhciBsYWJlbD1UWVBFX0xBQkVMW2QudHlwZV18fCfQlNC+0LrRg9C80LXQvdGCJzsKICB2YXIgc3ltYm9sID0gZC5jdXJyZW5jeT09PSdCR04nID8gJ9C70LIuJyA6ICfigqwnOwoKICB2YXIgaHRtbD0nJzsKICBodG1sKz0nPGRpdiBjbGFzcz0iaGVhZCI+PGRpdiBjbGFzcz0ibG9nbyI+V0VCVFJJWElBPC9kaXY+JzsKICBodG1sKz0nPGRpdiBjbGFzcz0ic3VwcGxpZXIiPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xldHRlci1zcGFjaW5nOi4xNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjojYWFhIj7QlNC+0YHRgtCw0LLRh9C40Lo8L2Rpdj4nOwogIGh0bWwrPSc8Yj4nKyhjb21wLm5hbWV8fCcnKSsnPC9iPjxicj4nKyhjb21wLmFkZHJlc3N8fCcnKSsnPGJyPicrKGNvbXAuY2l0eXx8JycpKyc8YnI+JysoY29tcC5jb3VudHJ5fHwn0JHRitC70LPQsNGA0LjRjycpKwogICAgJzxicj7QldCY0Jov0JHRg9C70YHRgtCw0YI6ICcrKGNvbXAuZWlrfHwnJykrJzxicj7QlNCU0KEg4oSWOiAnKyhjb21wLnZhdF9udW1iZXJ8fCcnKSsnPGJyPtCc0J7QmzogJysoY29tcC5tb2x8fCcnKSsnPC9kaXY+PC9kaXY+JzsKCiAgaHRtbCs9JzxkaXYgY2xhc3M9ImJhZGdlLXJvdyI+PGRpdiBjbGFzcz0ib3JpZyI+0J7QoNCY0JPQmNCd0JDQmzwvZGl2Pic7CiAgaHRtbCs9JzxkaXYgY2xhc3M9InJlY2lwaWVudCI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGV0dGVyLXNwYWNpbmc6LjE1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOiNhYWEiPtCf0L7Qu9GD0YfQsNGC0LXQuzwvZGl2Pic7CiAgaHRtbCs9JzxiPicrKHNuYXAuY29tcGFueXx8c25hcC5uYW1lfHwn4oCUJykrJzwvYj48YnI+Jysoc25hcC5hZGRyZXNzfHwnJykrJzxicj4nKyhzbmFwLmNpdHl8fCcnKSsKICAgICc8YnI+0JXQmNCaL9CR0YPQu9GB0YLQsNGCOiAnKyhzbmFwLmVpa3x8J+KAlCcpKyhzbmFwLnZhdF9udW1iZXI/Jzxicj7QlNCU0KEg4oSWOiAnK3NuYXAudmF0X251bWJlcjonJykrKHNuYXAubW9sPyc8YnI+0JzQntCbOiAnK3NuYXAubW9sOicnKSsnPC9kaXY+PC9kaXY+JzsKCiAgaHRtbCs9JzxkaXYgY2xhc3M9InRpdGxlYmFyIj48ZGl2IGNsYXNzPSJ0dCI+PGRpdiBjbGFzcz0ibGJsIj4nK2xhYmVsKyc8L2Rpdj48ZGl2IGNsYXNzPSJudW0iPuKEliAnK2QuZnVsbF9udW1iZXIrJzwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iZGF0ZXMiPtCU0LDRgtCwINC90LAg0LjQt9C00LDQstCw0L3QtTogPGI+JytmbXREYXRlKGQuaXNzdWVfZGF0ZSkrJzwvYj48YnI+0JTQsNC90YrRh9C90L4g0YHRitCx0LjRgtC40LU6IDxiPicrZm10RGF0ZShkLnRheF9kYXRlKSsnPC9iPicrCiAgICAoZC5kdWVfZGF0ZT8nPGJyPtCf0LDQtNC10LY6IDxiPicrZm10RGF0ZShkLmR1ZV9kYXRlKSsnPC9iPic6JycpKyc8L2Rpdj48L2Rpdj4nOwogIGh0bWwrPSc8ZGl2IGNsYXNzPSJhbW91bnRib3giPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xldHRlci1zcGFjaW5nOi4xZW07b3BhY2l0eTouODUiPtCe0JHQqdCeINCX0JAg0J/Qm9CQ0KnQkNCd0JU8L2Rpdj48ZGl2IGNsYXNzPSJiaWciPicrCiAgICBwYXJzZUZsb2F0KGQudG90YWx8fDApLnRvRml4ZWQoMikrJyAnK3N5bWJvbCsnPC9kaXY+PC9kaXY+PC9kaXY+JzsKCiAgaHRtbCs9JzxkaXYgY2xhc3M9Iml0ZW1ib3giPjx0YWJsZSBjbGFzcz0iaXRlbXMiPjx0aGVhZD48dHI+PHRoPtCQ0YDRgtC40LrRg9C7PC90aD48dGg+0JrQvtC7LjwvdGg+PHRoPtCc0Y/RgNC60LA8L3RoPjx0aD7QldC0LiDRhtC10L3QsDwvdGg+PHRoPtCh0YLQvtC50L3QvtGB0YI8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICBpdGVtcy5mb3JFYWNoKChpdCxpKT0+ewogICAgdmFyIGxpbmU9KHBhcnNlRmxvYXQoaXQucXR5fHwwKSpwYXJzZUZsb2F0KGl0LnByaWNlfHwwKSk7CiAgICBodG1sKz0nPHRyPjx0ZD4nKyhpKzEpKycuICcrKGl0Lm5hbWV8fCcnKSsnPC90ZD48dGQ+JytwYXJzZUZsb2F0KGl0LnF0eXx8MCkudG9GaXhlZCgyKSsnPC90ZD48dGQ+JysoaXQudW5pdHx8J9Cx0YAuJykrCiAgICAgICc8L3RkPjx0ZD4nK21vbmV5KGl0LnByaWNlLGQuY3VycmVuY3kpKyc8L3RkPjx0ZD4nK21vbmV5KGxpbmUsZC5jdXJyZW5jeSkrJzwvdGQ+PC90cj4nOwogIH0pOwogIGh0bWwrPSc8L3Rib2R5PjwvdGFibGU+PC9kaXY+JzsKCiAgaHRtbCs9JzxkaXYgY2xhc3M9ImJvdHRvbSI+PGRpdiBjbGFzcz0icGF5Ij4nOwogIGh0bWwrPSc8ZGl2IGNsYXNzPSJ3b3JkcyI+PGI+0KHQu9C+0LLQvtC8OjwvYj48YnI+JythbW91bnRXb3JkcyhkLnRvdGFsLGQuY3VycmVuY3kpKyc8L2Rpdj4nOwogIGh0bWwrPSc8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjE0cHgiPjxiPtCd0LDRh9C40L0g0L3QsCDQv9C70LDRidCw0L3QtTo8L2I+INC/0L4g0LHQsNC90LrQvtCyINC/0YrRgjxicj7QkdCw0L3QutCwOiAnKyhjb21wLmJhbmtfbmFtZXx8JycpKwogICAgJzxicj5JQkFOOiAnKyhjb21wLmliYW58fCcnKSsnPGJyPkJJQy9TV0lGVDogJysoY29tcC5iaWN8fCcnKSsnPC9kaXY+JzsKICBpZihkLm5vdGVzKSBodG1sKz0nPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxNHB4Ij48Yj7QkdC10LvQtdC20LrQuDo8L2I+PGJyPicrZC5ub3RlcysnPC9kaXY+JzsKICBodG1sKz0nPC9kaXY+JzsKICBodG1sKz0nPGRpdiBjbGFzcz0idG90YWxzIj7QlNCw0L3RitGH0L3QsCDQvtGB0L3QvtCy0LA6ICcrbW9uZXkoZC5zdWJ0b3RhbCxkLmN1cnJlbmN5KSsnPGJyPtCf0YDQvtGG0LXQvdGCINCU0JTQoTogJytwYXJzZUZsb2F0KGQudmF0X3BlcmNlbnR8fDApKyclPGJyPicrCiAgICAn0J3QsNGH0LjRgdC70LXQvSDQlNCU0KE6ICcrbW9uZXkoZC52YXRfYW1vdW50LGQuY3VycmVuY3kpKyc8YnI+PHNwYW4gY2xhc3M9ImdyYW5kIj7QodGD0LzQsCDQt9CwINC/0LvQsNGJ0LDQvdC1OiAnK21vbmV5KGQudG90YWwsZC5jdXJyZW5jeSkrJzwvc3Bhbj48L2Rpdj4nOwogIGh0bWwrPSc8L2Rpdj4nOwoKICBodG1sKz0nPGRpdiBjbGFzcz0ic2lnbiI+PGRpdj7Qn9C+0LvRg9GH0LDRgtC10Ls6ICcrKHNuYXAubW9sfHwnX19fX19fX19fX19fX19fXycpKyc8L2Rpdj48ZGl2PtCh0YrRgdGC0LDQstC40Ls6ICcrKGNvbXAubW9sfHwnX19fX19fX19fX19fX19fXycpKyc8L2Rpdj48L2Rpdj4nOwoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZScpLmlubmVySFRNTD1odG1sOwogIGRvY3VtZW50LnRpdGxlPWxhYmVsKycg4oSWICcrZC5mdWxsX251bWJlcisnIOKAlCBXZWJ0cml4aWEnOwp9Cgpsb2FkKCk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K', 'invoices.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0KTQsNC60YLRg9GA0LjRgNCw0L3QtSDigJQgV2VidHJpeGlhIEh1YjwvdGl0bGU+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9RE0rU2Fuczp3Z2h0QDMwMDs0MDA7NTAwOzYwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ey0tYmc6I2YwZjBmODstLXN1cjojZmZmOy0tc3VyMjojZjVmNWZjOy0tc3VyMzojZWFlYWY1Oy0tYnJkOnJnYmEoMCwwLDAsLjA4KTstLWJyZDI6cmdiYSgwLDAsMCwuMTQpOwotLXR4OiMxYTFhMmU7LS10eDI6IzRhNGE2YTstLXR4MzojODg4OGFhOy0tYWNjOiM2YzYzZmY7LS1hY2MyOiNhNzhiZmE7LS1ncm46IzIyYzU1ZTstLWdkaW06cmdiYSgzNCwxOTcsOTQsLjEyKTsKLS1hbWI6I2Y1OWUwYjstLWFkaW06cmdiYSgyNDUsMTU4LDExLC4xMik7LS1yZWQ6I2VmNDQ0NDstLXJkaW06cmdiYSgyMzksNjgsNjgsLjEyKTsKLS1mbjonRE0gU2Fucycsc2Fucy1zZXJpZjstLW1vOidETSBNb25vJyxtb25vc3BhY2V9Cip7bWFyZ2luOjA7cGFkZGluZzowO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KYm9keXtmb250LWZhbWlseTp2YXIoLS1mbik7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tdHgpO21pbi1oZWlnaHQ6MTAwdmg7cGFkZGluZzoyMnB4IDE4cHggNjBweH0KLndyYXB7bWF4LXdpZHRoOjEyODBweDttYXJnaW46MCBhdXRvfQoudG9we2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNnB4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4fQpoMXtmb250LXNpemU6MjBweDtmb250LXdlaWdodDo2MDB9Ci5zdWJ7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweH0KLmxua3tjb2xvcjp2YXIoLS1hY2MpO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMnB4O3RleHQtZGVjb3JhdGlvbjpub25lfQoudGFic3tkaXNwbGF5OmZsZXg7Z2FwOjRweDttYXJnaW4tYm90dG9tOjE4cHg7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtwYWRkaW5nOjVweDtib3JkZXItcmFkaXVzOjEycHg7ZmxleC13cmFwOndyYXB9Ci50YWJ7cGFkZGluZzo5cHggMTRweDtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjUwMDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS10eDIpO3doaXRlLXNwYWNlOm5vd3JhcH0KLnRhYi5hY3RpdmV7YmFja2dyb3VuZDp2YXIoLS1hY2MpO2NvbG9yOiNmZmZ9Ci5wYW5lbHtiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjE4cHg7bWFyZ2luLWJvdHRvbToxNnB4fQoucGh7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjE0cHg7ZmxleC13cmFwOndyYXA7Z2FwOjhweH0KLnB0e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMH0KLmJ0bntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1yYWRpdXM6OXB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYwMH0KLmJ0bi5we2JhY2tncm91bmQ6dmFyKC0tYWNjKTtjb2xvcjojZmZmfQouYnRuLnN7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eDIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKX0KLmJ0bi5ke2JhY2tncm91bmQ6dmFyKC0tcmRpbSk7Y29sb3I6dmFyKC0tcmVkKX0KLmJ0bi5ne2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6IzE1ODAzZH0KLmJ0bjpob3ZlcntvcGFjaXR5Oi44OH0KdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Zm9udC1zaXplOjEyLjVweH0KdGh7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OXB4IDEwcHg7Y29sb3I6dmFyKC0tdHgzKTtmb250LXdlaWdodDo1MDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTt3aGl0ZS1zcGFjZTpub3dyYXB9CnRke3BhZGRpbmc6MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KdHI6aG92ZXIgdGR7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLmJhZGdle3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5iYWRnZS5kcmFmdHtiYWNrZ3JvdW5kOnZhcigtLXN1cjMpO2NvbG9yOnZhcigtLXR4Mil9Ci5iYWRnZS5zZW50e2JhY2tncm91bmQ6cmdiYSg1NiwxODksMjQ4LC4xNSk7Y29sb3I6IzAyODRjN30KLmJhZGdlLnBhaWR7YmFja2dyb3VuZDp2YXIoLS1nZGltKTtjb2xvcjojMTU4MDNkfQouYmFkZ2Uub3ZlcmR1ZXtiYWNrZ3JvdW5kOnZhcigtLXJkaW0pO2NvbG9yOiNiOTFjMWN9Ci5iYWRnZS5jYW5jZWxsZWR7YmFja2dyb3VuZDp2YXIoLS1zdXIzKTtjb2xvcjp2YXIoLS10eDMpO3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9Ci5hY3Rpb25ze2Rpc3BsYXk6ZmxleDtnYXA6NnB4fQouaWNvbmJ0bntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjdweDtwYWRkaW5nOjVweCA5cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEycHh9CmxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA2ZW07bWFyZ2luOjEwcHggMCA1cHh9CmlucHV0LHNlbGVjdCx0ZXh0YXJlYXt3aWR0aDoxMDAlO2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTBweCAxMnB4Owpjb2xvcjp2YXIoLS10eCk7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2ZvbnQtc2l6ZToxM3B4O291dGxpbmU6bm9uZX0KaW5wdXQ6Zm9jdXMsc2VsZWN0OmZvY3VzLHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1hY2MpfQoucm93MntkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjEwcHh9Ci5yb3cze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnI7Z2FwOjEwcHh9Ci5ncmlkMntkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHh9CkBtZWRpYShtYXgtd2lkdGg6ODYwcHgpey5ncmlkMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfX0KLyogbW9kYWwgKi8KLm1ve3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDM1LC41KTtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3otaW5kZXg6OTk5O3BhZGRpbmc6MzBweCAxNHB4O292ZXJmbG93OmF1dG99Ci5tby5zaG93e2Rpc3BsYXk6ZmxleH0KLm1ie2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoyMnB4O3dpZHRoOjEwMCU7bWF4LXdpZHRoOjcyMHB4fQoubWIgaDN7Zm9udC1zaXplOjE1cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouaXRlbXN7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW47bWFyZ2luLXRvcDo2cHh9Ci5pdGVtcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDcwcHggNzBweCA5MHB4IDkwcHggMzBweDtnYXA6NnB4O3BhZGRpbmc6OHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7YWxpZ24taXRlbXM6Y2VudGVyfQouaXRlbXJvdyBpbnB1dHtwYWRkaW5nOjdweCA4cHg7Zm9udC1zaXplOjEycHh9Ci5pdGVtaGVhZHtmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0KLnRvdGFsc2JveHttYXJnaW4tdG9wOjEwcHg7dGV4dC1hbGlnbjpyaWdodDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjl9Ci50b3RhbHNib3ggYntmb250LXNpemU6MTZweDtjb2xvcjp2YXIoLS1hY2MpfQouZWlrbG9va3tkaXNwbGF5OmZsZXg7Z2FwOjZweH0KLmVpa2xvb2sgaW5wdXR7ZmxleDoxfQouY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7cmlnaHQ6MjBweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToyMHB4fQoubWJyZWx7cG9zaXRpb246cmVsYXRpdmV9Ci5zbWFsbHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpfQouc3RhdHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9Ci5zdGF0IGJ7Zm9udC1zaXplOjIwcHh9Ci5zdGF0Z3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LDFmcik7Z2FwOjE0cHg7bWFyZ2luLWJvdHRvbToxNnB4fQpAbWVkaWEobWF4LXdpZHRoOjg2MHB4KXsuc3RhdGdyaWR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLDFmcil9fQouc3RhdGNhcmR7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4fQoJLnRvYXN0e3Bvc2l0aW9uOmZpeGVkO2JvdHRvbToyMHB4O3JpZ2h0OjIwcHg7YmFja2dyb3VuZDojMWExYTJlO2NvbG9yOiNmZmY7cGFkZGluZzoxMnB4IDE4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6bm9uZTt6LWluZGV4OjEyMDB9Cgkuc2NhbmJveHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAzNDBweDtnYXA6MTZweH0KCS5zY2FucmVzdWx0e2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE0cHh9Cgkuc2NhbmxpbmV7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7cGFkZGluZzo4cHggMDtmb250LXNpemU6MTIuNXB4fQoJLnNjYW5saW5lOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTowfS5zY2FubGluZSBzcGFuOmZpcnN0LWNoaWxke2NvbG9yOnZhcigtLXR4Myl9LnNjYW5saW5lIGJ7dGV4dC1hbGlnbjpyaWdodH0KCUBtZWRpYShtYXgtd2lkdGg6OTgwcHgpey5zY2FuYm94e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fQoJPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KPGRpdiBjbGFzcz0id3JhcCI+CiAgPGRpdiBjbGFzcz0idG9wIj4KICAgIDxkaXY+PGgxPvCfp74g0KTQsNC60YLRg9GA0LjRgNCw0L3QtTwvaDE+PGRpdiBjbGFzcz0ic3ViIj7Qn9GA0L7RhNC+0YDQvNC4IMK3INCk0LDQutGC0YPRgNC4IMK3INCa0YDQtdC00LjRgtC90Lgv0JTQtdCx0LjRgtC90Lgg0LjQt9Cy0LXRgdGC0LjRjyDCtyDQntGE0LXRgNGC0Lggwrcg0JrQu9C40LXQvdGC0Lggwrcg0J/QtdGA0LjQvtC00LjRh9C90Lg8L2Rpdj48L2Rpdj4KICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIGNsYXNzPSJsbmsiPuKGkCDQntCx0YDQsNGC0L3QviDQutGK0LwgSHViPC9hPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJ0YWJzIiBpZD0idGFicyI+PC9kaXY+CiAgPGRpdiBpZD0iY29udGVudCI+PC9kaXY+CjwvZGl2PgoKPGRpdiBjbGFzcz0ibW8iIGlkPSJkb2NNb2RhbCI+PGRpdiBjbGFzcz0ibWIgbWJyZWwiPgogIDxzcGFuIGNsYXNzPSJjbG9zZSIgb25jbGljaz0iY2xvc2VNb2RhbCgnZG9jTW9kYWwnKSI+4pyVPC9zcGFuPgogIDxoMyBpZD0iZG9jTW9kYWxUaXRsZSI+0JTQvtC60YPQvNC10L3RgjwvaDM+CiAgPGRpdiBjbGFzcz0icm93MiI+CiAgICA8ZGl2PgogICAgICA8bGFiZWw+0JrQu9C40LXQvdGCPC9sYWJlbD4KICAgICAgPHNlbGVjdCBpZD0iZF9jbGllbnQiIG9uY2hhbmdlPSJmaWxsQ2xpZW50U25hcHNob3QoKSI+PC9zZWxlY3Q+CiAgICA8L2Rpdj4KICAgIDxkaXY+CiAgICAgIDxsYWJlbD7QldCY0Jog0LfQsCDRgtGK0YDRgdC10L3QtSAoVklFUyk8L2xhYmVsPgogICAgICA8ZGl2IGNsYXNzPSJlaWtsb29rIj4KICAgICAgICA8aW5wdXQgaWQ9ImRfZWlrbG9va3VwIiBwbGFjZWhvbGRlcj0i0L3QsNC/0YAuIDEyMzQ1Njc4OSI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIHMiIG9uY2xpY2s9Imxvb2t1cEVpaygpIj7wn5SOINCi0YrRgNGB0Lg8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJyb3czIj4KICAgIDxkaXY+PGxhYmVsPtCU0LDRgtCwINC90LAg0LjQt9C00LDQstCw0L3QtTwvbGFiZWw+PGlucHV0IGlkPSJkX2lzc3VlIiB0eXBlPSJkYXRlIj48L2Rpdj4KICAgIDxkaXY+PGxhYmVsPtCU0LDQvdGK0YfQvdCwINC00LDRgtCwPC9sYWJlbD48aW5wdXQgaWQ9ImRfdGF4IiB0eXBlPSJkYXRlIj48L2Rpdj4KICAgIDxkaXY+PGxhYmVsPtCf0LDQtNC10LYgKNC/0L4g0LjQt9Cx0L7RgCk8L2xhYmVsPjxpbnB1dCBpZD0iZF9kdWUiIHR5cGU9ImRhdGUiPjwvZGl2PgogIDwvZGl2PgogIDxsYWJlbD7QkNGA0YLQuNC60YPQu9C4PC9sYWJlbD4KICA8ZGl2IGNsYXNzPSJpdGVtcyIgaWQ9Iml0ZW1zQm94Ij48L2Rpdj4KICA8YnV0dG9uIGNsYXNzPSJidG4gcyIgc3R5bGU9Im1hcmdpbi10b3A6OHB4IiBvbmNsaWNrPSJhZGRJdGVtUm93KCkiPisg0JDRgNGC0LjQutGD0Ls8L2J1dHRvbj4KICA8ZGl2IGNsYXNzPSJyb3czIiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4Ij4KICAgIDxkaXY+PGxhYmVsPtCU0JTQoSAlPC9sYWJlbD48aW5wdXQgaWQ9ImRfdmF0IiB0eXBlPSJudW1iZXIiIHZhbHVlPSIyMCIgb25pbnB1dD0icmVjYWxjVG90YWxzKCkiPjwvZGl2PgogICAgPGRpdj48bGFiZWw+0JLQsNC70YPRgtCwPC9sYWJlbD48c2VsZWN0IGlkPSJkX2N1cnJlbmN5Ij48b3B0aW9uPkVVUjwvb3B0aW9uPjxvcHRpb24+QkdOPC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+CiAgICA8ZGl2PjxsYWJlbD7QodGC0LDRgtGD0YE8L2xhYmVsPjxzZWxlY3QgaWQ9ImRfc3RhdHVzIj48b3B0aW9uIHZhbHVlPSJkcmFmdCI+0KfQtdGA0L3QvtCy0LA8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJzZW50Ij7QmNC30L/RgNCw0YLQtdC90LA8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJwYWlkIj7Qn9C70LDRgtC10L3QsDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Im92ZXJkdWUiPtCf0YDQvtGB0YDQvtGH0LXQvdCwPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iY2FuY2VsbGVkIj7QkNC90YPQu9C40YDQsNC90LA8L29wdGlvbj48L3NlbGVjdD48L2Rpdj4KICA8L2Rpdj4KICA8bGFiZWw+0JHQtdC70LXQttC60Lg8L2xhYmVsPgogIDx0ZXh0YXJlYSBpZD0iZF9ub3RlcyIgcm93cz0iMiI+PC90ZXh0YXJlYT4KICA8ZGl2IGNsYXNzPSJ0b3RhbHNib3giIGlkPSJ0b3RhbHNCb3giPjwvZGl2PgogIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi10b3A6MTRweCI+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ic2F2ZURvY3VtZW50KCkiPvCfkr4g0JfQsNC/0LDQt9C4PC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4gcyIgb25jbGljaz0iY2xvc2VNb2RhbCgnZG9jTW9kYWwnKSI+0J7RgtC60LDQtzwvYnV0dG9uPgogIDwvZGl2Pgo8L2Rpdj48L2Rpdj4KCjxkaXYgY2xhc3M9Im1vIiBpZD0iY2xpZW50TW9kYWwiPjxkaXYgY2xhc3M9Im1iIG1icmVsIj4KICA8c3BhbiBjbGFzcz0iY2xvc2UiIG9uY2xpY2s9ImNsb3NlTW9kYWwoJ2NsaWVudE1vZGFsJykiPuKclTwvc3Bhbj4KICA8aDM+0JrQu9C40LXQvdGCPC9oMz4KICA8ZGl2IGNsYXNzPSJyb3cyIj4KICAgIDxkaXY+PGxhYmVsPtCY0LzQtTwvbGFiZWw+PGlucHV0IGlkPSJjX25hbWUiPjwvZGl2PgogICAgPGRpdj48bGFiZWw+0KTQuNGA0LzQsDwvbGFiZWw+PGlucHV0IGlkPSJjX2NvbXBhbnkiPjwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InJvdzIiPgogICAgPGRpdj48bGFiZWw+0JXQmNCaPC9sYWJlbD48aW5wdXQgaWQ9ImNfZWlrIj48L2Rpdj4KICAgIDxkaXY+PGxhYmVsPtCU0JTQoSDQvdC+0LzQtdGAPC9sYWJlbD48aW5wdXQgaWQ9ImNfdmF0Ij48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJyb3cyIj4KICAgIDxkaXY+PGxhYmVsPtCY0LzQtdC50Ls8L2xhYmVsPjxpbnB1dCBpZD0iY19lbWFpbCI+PC9kaXY+CiAgICA8ZGl2PjxsYWJlbD7QotC10LvQtdGE0L7QvTwvbGFiZWw+PGlucHV0IGlkPSJjX3Bob25lIj48L2Rpdj4KICA8L2Rpdj4KICA8bGFiZWw+0JDQtNGA0LXRgTwvbGFiZWw+PGlucHV0IGlkPSJjX2FkZHJlc3MiPgogIDxkaXYgY2xhc3M9InJvdzIiPgogICAgPGRpdj48bGFiZWw+0JPRgNCw0LQ8L2xhYmVsPjxpbnB1dCBpZD0iY19jaXR5Ij48L2Rpdj4KICAgIDxkaXY+PGxhYmVsPtCc0J7QmzwvbGFiZWw+PGlucHV0IGlkPSJjX21vbCI+PC9kaXY+CiAgPC9kaXY+CiAgPGJ1dHRvbiBjbGFzcz0iYnRuIHAiIHN0eWxlPSJtYXJnaW4tdG9wOjE0cHgiIG9uY2xpY2s9InNhdmVDbGllbnQoKSI+8J+SviDQl9Cw0L/QsNC30Lgg0LrQu9C40LXQvdGCPC9idXR0b24+CjwvZGl2PjwvZGl2PgoKPGRpdiBjbGFzcz0idG9hc3QiIGlkPSJ0b2FzdCI+PC9kaXY+Cgo8c2NyaXB0PgondXNlIHN0cmljdCc7CnZhciBBUEk9KGZ1bmN0aW9uKCl7CiAgdmFyIGJhc2U9d2luZG93LmxvY2F0aW9uLm9yaWdpbit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvaW52b2ljZXNcLmh0bWwkLywnJykucmVwbGFjZSgvXC8kLywnJyk7CiAgdmFyIG93bj1iYXNlKycvYXBpLnBocCc7CiAgdmFyIHNhdmVkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3dF9hcGknKTsKICBpZihzYXZlZCl7CiAgICB0cnl7CiAgICAgIHZhciB1PW5ldyBVUkwoc2F2ZWQsd2luZG93LmxvY2F0aW9uLmhyZWYpOwogICAgICBpZih1Lm9yaWdpbj09PXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pcmV0dXJuIHNhdmVkOwogICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnd3RfYXBpJyk7CiAgICB9Y2F0Y2goZSl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3d0X2FwaScpO30KICB9CiAgcmV0dXJuIG93bjsKfSkoKTsKCmFzeW5jIGZ1bmN0aW9uIGFmKGFjdGlvbixtZXRob2QsYm9keSxxcyl7CiAgbWV0aG9kPW1ldGhvZHx8J0dFVCc7cXM9cXN8fCcnOwogIHRyeXsKICAgIHZhciBvPXttZXRob2Q6bWV0aG9kLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJ319OwogICAgaWYoYm9keSlvLmJvZHk9SlNPTi5zdHJpbmdpZnkoYm9keSk7CiAgICB2YXIgcj1hd2FpdCBmZXRjaChBUEkrJz9hY3Rpb249JythY3Rpb24rcXMsbyk7CiAgICB2YXIgaj1hd2FpdCByLmpzb24oKTsKICAgIHJldHVybiBqLm9rP2ouZGF0YTpudWxsOwogIH1jYXRjaChlKXtjb25zb2xlLmVycm9yKGFjdGlvbixlKTtyZXR1cm4gbnVsbDt9Cn0KZnVuY3Rpb24gdG9hc3QobXNnKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9hc3QnKTt0LnRleHRDb250ZW50PW1zZzt0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztzZXRUaW1lb3V0KCgpPT50LnN0eWxlLmRpc3BsYXk9J25vbmUnLDI2MDApO30KZnVuY3Rpb24gb3Blbk1vZGFsKGlkKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NMaXN0LmFkZCgnc2hvdycpO30KZnVuY3Rpb24gY2xvc2VNb2RhbChpZCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTt9CmZ1bmN0aW9uIG1vbmV5KG4sY3VyKXtjdXI9Y3VyfHwnRVVSJztyZXR1cm4gKHBhcnNlRmxvYXQobnx8MCkpLnRvRml4ZWQoMikrJyAnK2N1cjt9Cgp2YXIgVEFCUz1bCiAge2lkOidkYXNoYm9hcmQnLGxhYmVsOifwn5OKINCi0LDQsdC70L4nfSwKICB7aWQ6J2FpX3NjYW4nLGxhYmVsOidBSSDRgdC60LDQvdC40YDQsNC90LUnfSwKICB7aWQ6J3Byb2Zvcm1hJyxsYWJlbDon0J/RgNC+0YTQvtGA0LzQuCd9LAogIHtpZDonaW52b2ljZScsbGFiZWw6J9Ck0LDQutGC0YPRgNC4J30sCiAge2lkOidjcmVkaXRfbm90ZScsbGFiZWw6J9Ca0YDQtdC00LjRgtC90Lgg0LjQt9CyLid9LAogIHtpZDonZGViaXRfbm90ZScsbGFiZWw6J9CU0LXQsdC40YLQvdC4INC40LfQsi4nfSwKICB7aWQ6J29mZmVyJyxsYWJlbDon0J7RhNC10YDRgtC4J30sCiAge2lkOidjbGllbnRzJyxsYWJlbDon8J+RpSDQmtC70LjQtdC90YLQuCd9LAogIHtpZDoncmVjdXJyaW5nJyxsYWJlbDon8J+UgSDQn9C10YDQuNC+0LTQuNGH0L3QuCd9LAogIHtpZDoncmVwb3J0cycsbGFiZWw6J/Cfk4gg0KHQv9GA0LDQstC60LgnfSwKICB7aWQ6J3NldHRpbmdzJyxsYWJlbDon4pqZ77iPINCd0LDRgdGC0YDQvtC50LrQuCd9Cl07CnZhciBDVVJfVEFCPSdkYXNoYm9hcmQnOwp2YXIgQ0xJRU5UUz1bXTsKdmFyIEFJX1NDQU49bnVsbDsKCmZ1bmN0aW9uIHJlbmRlclRhYnMoKXsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFicycpLmlubmVySFRNTD1UQUJTLm1hcCh0PT4KICAgICc8ZGl2IGNsYXNzPSJ0YWInKyh0LmlkPT09Q1VSX1RBQj8nIGFjdGl2ZSc6JycpKyciIG9uY2xpY2s9ImdvVGFiKFwnJyt0LmlkKydcJykiPicrdC5sYWJlbCsnPC9kaXY+Jykuam9pbignJyk7Cn0KZnVuY3Rpb24gZ29UYWIoaWQpe0NVUl9UQUI9aWQ7cmVuZGVyVGFicygpO3JlbmRlckNvbnRlbnQoKTt9Cgp2YXIgVFlQRV9MQUJFTD17cHJvZm9ybWE6J9Cf0YDQvtGE0L7RgNC80LAg0YTQsNC60YLRg9GA0LAnLGludm9pY2U6J9Ck0LDQutGC0YPRgNCwJyxjcmVkaXRfbm90ZTon0JrRgNC10LTQuNGC0L3QviDQuNC30LLQtdGB0YLQuNC1JyxkZWJpdF9ub3RlOifQlNC10LHQuNGC0L3QviDQuNC30LLQtdGB0YLQuNC1JyxvZmZlcjon0J7RhNC10YDRgtCwJ307Cgphc3luYyBmdW5jdGlvbiByZW5kZXJDb250ZW50KCl7CiAgdmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnQnKTsKICBpZihDVVJfVEFCPT09J2Rhc2hib2FyZCcpeyBhd2FpdCByZW5kZXJEYXNoYm9hcmQoYyk7IHJldHVybjsgfQogIGlmKENVUl9UQUI9PT0nYWlfc2NhbicpeyBhd2FpdCByZW5kZXJBaVNjYW4oYyk7IHJldHVybjsgfQogIGlmKENVUl9UQUI9PT0nY2xpZW50cycpeyBhd2FpdCByZW5kZXJDbGllbnRzKGMpOyByZXR1cm47IH0KICBpZihDVVJfVEFCPT09J3JlY3VycmluZycpeyBhd2FpdCByZW5kZXJSZWN1cnJpbmcoYyk7IHJldHVybjsgfQogIGlmKENVUl9UQUI9PT0ncmVwb3J0cycpeyBhd2FpdCByZW5kZXJSZXBvcnRzKGMpOyByZXR1cm47IH0KICBpZihDVVJfVEFCPT09J3NldHRpbmdzJyl7IGF3YWl0IHJlbmRlclNldHRpbmdzKGMpOyByZXR1cm47IH0KICBhd2FpdCByZW5kZXJEb2NMaXN0KGMsQ1VSX1RBQik7Cn0KCi8vIOKUgOKUgCBEQVNIQk9BUkQg4pSA4pSACmFzeW5jIGZ1bmN0aW9uIHJlbmRlckRhc2hib2FyZChjKXsKICBjLmlubmVySFRNTD0nPGRpdiBjbGFzcz0ic3RhdGdyaWQiIGlkPSJzdGF0Z3JpZCI+PGRpdiBjbGFzcz0ic3RhdGNhcmQiPtCX0LDRgNC10LbQtNCw4oCmPC9kaXY+PC9kaXY+JzsKICB2YXIgc3RhdHM9YXdhaXQgYWYoJ2ludm9pY2Vfc3RhdHMnKTsKICBpZighc3RhdHMpe2MuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJwYW5lbCI+0J3Rj9C80LAg0LLRgNGK0LfQutCwINGBIEFQSS4g0KHRgtCw0YDRgtC40YDQsNC5INCy0LXQtNC90YrQtiA8Y29kZT5hcGkucGhwP2FjdGlvbj1pbnN0YWxsX2ludm9pY2luZzwvY29kZT4uPC9kaXY+JztyZXR1cm47fQogIHZhciBieVR5cGU9e307IChzdGF0cy5ieV90eXBlfHxbXSkuZm9yRWFjaCh0PT5ieVR5cGVbdC50eXBlXT10KTsKICB2YXIgdW5wYWlkPXN0YXRzLnVucGFpZHx8e2NudDowLHRvdGFsOjB9OwogIHZhciBodG1sPSc8ZGl2IGNsYXNzPSJzdGF0Z3JpZCI+JzsKICBodG1sKz0nPGRpdiBjbGFzcz0ic3RhdGNhcmQiPjxkaXYgY2xhc3M9InN0YXQiPjxzcGFuIGNsYXNzPSJzbWFsbCI+0KTQsNC60YLRg9GA0Lg8L3NwYW4+PGI+JysoKGJ5VHlwZS5pbnZvaWNlJiZieVR5cGUuaW52b2ljZS5jbnQpfHwwKSsnPC9iPjxzcGFuIGNsYXNzPSJzbWFsbCI+Jyttb25leSgoYnlUeXBlLmludm9pY2UmJmJ5VHlwZS5pbnZvaWNlLnRvdGFsKXx8MCkrJzwvc3Bhbj48L2Rpdj48L2Rpdj4nOwogIGh0bWwrPSc8ZGl2IGNsYXNzPSJzdGF0Y2FyZCI+PGRpdiBjbGFzcz0ic3RhdCI+PHNwYW4gY2xhc3M9InNtYWxsIj7Qn9GA0L7RhNC+0YDQvNC4PC9zcGFuPjxiPicrKChieVR5cGUucHJvZm9ybWEmJmJ5VHlwZS5wcm9mb3JtYS5jbnQpfHwwKSsnPC9iPjxzcGFuIGNsYXNzPSJzbWFsbCI+Jyttb25leSgoYnlUeXBlLnByb2Zvcm1hJiZieVR5cGUucHJvZm9ybWEudG90YWwpfHwwKSsnPC9zcGFuPjwvZGl2PjwvZGl2Pic7CiAgaHRtbCs9JzxkaXYgY2xhc3M9InN0YXRjYXJkIj48ZGl2IGNsYXNzPSJzdGF0Ij48c3BhbiBjbGFzcz0ic21hbGwiPtCe0YTQtdGA0YLQuDwvc3Bhbj48Yj4nKygoYnlUeXBlLm9mZmVyJiZieVR5cGUub2ZmZXIuY250KXx8MCkrJzwvYj48L2Rpdj48L2Rpdj4nOwogIGh0bWwrPSc8ZGl2IGNsYXNzPSJzdGF0Y2FyZCI+PGRpdiBjbGFzcz0ic3RhdCI+PHNwYW4gY2xhc3M9InNtYWxsIj7QndC10L/Qu9Cw0YLQtdC90Lgg0YTQsNC60YLRg9GA0Lg8L3NwYW4+PGIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiPicrdW5wYWlkLmNudCsnPC9iPjxzcGFuIGNsYXNzPSJzbWFsbCI+Jyttb25leSh1bnBhaWQudG90YWwpKyc8L3NwYW4+PC9kaXY+PC9kaXY+JzsKICBodG1sKz0nPC9kaXY+JzsKICBodG1sKz0nPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0J/RgNC40YXQvtC00Lgg0L/QviDQvNC10YHQtdGG0LggKNGE0LDQutGC0YPRgNC4KTwvZGl2PjwvZGl2Pjx0YWJsZT48dGhlYWQ+PHRyPjx0aD7QnNC10YHQtdGGPC90aD48dGg+0KHRg9C80LA8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICAoc3RhdHMuYnlfbW9udGh8fFtdKS5mb3JFYWNoKG09PntodG1sKz0nPHRyPjx0ZD4nK20ueW0rJzwvdGQ+PHRkPicrbW9uZXkobS50b3RhbCkrJzwvdGQ+PC90cj4nO30pOwogIGh0bWwrPSc8L3Rib2R5PjwvdGFibGU+PC9kaXY+JzsKICBjLmlubmVySFRNTD1odG1sOwp9CgovLyDilIDilIAgRE9DVU1FTlQgTElTVCAocHJvZm9ybWEvaW52b2ljZS9jcmVkaXRfbm90ZS9kZWJpdF9ub3RlL29mZmVyKSDilIDilIAKYXN5bmMgZnVuY3Rpb24gcmVuZGVyRG9jTGlzdChjLHR5cGUpewogIGMuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJwYW5lbCI+0JfQsNGA0LXQttC00LDigKY8L2Rpdj4nOwogIHZhciByb3dzPWF3YWl0IGFmKCdkb2N1bWVudHMnLCdHRVQnLCcnLCAnJnR5cGU9Jyt0eXBlKTsKICB2YXIgbGFiZWw9VFlQRV9MQUJFTFt0eXBlXXx8dHlwZTsKICB2YXIgaHRtbD0nPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+JytsYWJlbCsnPC9kaXY+PGRpdiBjbGFzcz0iYWN0aW9ucyI+JysKICAgICc8YnV0dG9uIGNsYXNzPSJidG4gcyIgb25jbGljaz0iZXhwb3J0Q3N2KFwnJyt0eXBlKydcJykiPuKshyDQldC60YHQv9C+0YDRgiBDU1Y8L2J1dHRvbj4nKwogICAgJzxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJuZXdEb2N1bWVudChcJycrdHlwZSsnXCcpIj4rINCd0L7QsjwvYnV0dG9uPjwvZGl2PjwvZGl2Pic7CiAgaHRtbCs9Jzx0YWJsZT48dGhlYWQ+PHRyPjx0aD7ihJY8L3RoPjx0aD7QlNCw0YLQsDwvdGg+PHRoPtCa0LvQuNC10L3RgjwvdGg+PHRoPtCh0YPQvNCwPC90aD48dGg+0KHRgtCw0YLRg9GBPC90aD48dGg+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgKHJvd3N8fFtdKS5mb3JFYWNoKHI9PnsKICAgIHZhciBzbmFwPXIuY2xpZW50X3NuYXBzaG90fHx7fTsKICAgIGh0bWwrPSc8dHI+PHRkPicrKHIuZnVsbF9udW1iZXJ8fHIubnVtYmVyKSsnPC90ZD48dGQ+Jysoci5pc3N1ZV9kYXRlfHwnJykrJzwvdGQ+PHRkPicrKHNuYXAubmFtZXx8J+KAlCcpKyc8L3RkPicrCiAgICAgICc8dGQ+Jyttb25leShyLnRvdGFsLHIuY3VycmVuY3kpKyc8L3RkPjx0ZD48c3BhbiBjbGFzcz0iYmFkZ2UgJytyLnN0YXR1cysnIj4nK3Iuc3RhdHVzKyc8L3NwYW4+PC90ZD4nKwogICAgICAnPHRkIGNsYXNzPSJhY3Rpb25zIj4nKwogICAgICAnPHNwYW4gY2xhc3M9Imljb25idG4iIHRpdGxlPSLQn9GA0LXQs9C70LXQtCAvINCf0LXRh9Cw0YIiIG9uY2xpY2s9IndpbmRvdy5vcGVuKFwnaW52b2ljZS1kb2MuaHRtbD9pZD0nK3IuaWQrJ1wnLFwnX2JsYW5rXCcpIj7wn5GBPC9zcGFuPicrCiAgICAgICc8c3BhbiBjbGFzcz0iaWNvbmJ0biIgdGl0bGU9ItCg0LXQtNCw0LrRhtC40Y8iIG9uY2xpY2s9ImVkaXREb2N1bWVudChcJycrci5pZCsnXCcsXCcnK3R5cGUrJ1wnKSI+4pyOPC9zcGFuPicrCiAgICAgICc8c3BhbiBjbGFzcz0iaWNvbmJ0biIgdGl0bGU9ItCY0LzQtdC50LsiIG9uY2xpY2s9ImVtYWlsRG9jdW1lbnQoXCcnK3IuaWQrJ1wnKSI+4pyJPC9zcGFuPicrCiAgICAgICc8c3BhbiBjbGFzcz0iaWNvbmJ0biIgdGl0bGU9ItCY0LfRgtGA0LjQuSIgb25jbGljaz0iZGVsZXRlRG9jdW1lbnQoXCcnK3IuaWQrJ1wnLFwnJyt0eXBlKydcJykiPvCfl5E8L3NwYW4+JysKICAgICAgJzwvdGQ+PC90cj4nOwogIH0pOwogIGlmKCFyb3dzfHwhcm93cy5sZW5ndGgpIGh0bWwrPSc8dHI+PHRkIGNvbHNwYW49IjYiIGNsYXNzPSJzbWFsbCI+0J3Rj9C80LAg0LTQvtC60YPQvNC10L3RgtC4PC90ZD48L3RyPic7CiAgaHRtbCs9JzwvdGJvZHk+PC90YWJsZT48L2Rpdj4nOwogIGMuaW5uZXJIVE1MPWh0bWw7Cn0KCmZ1bmN0aW9uIGV4cG9ydENzdih0eXBlKXsgd2luZG93Lm9wZW4oQVBJKyc/YWN0aW9uPWRvY3VtZW50c19leHBvcnQmdHlwZT0nK3R5cGUsJ19ibGFuaycpOyB9CgovLyDilIDilIAgQUkgU0NBTiDilIDilIAKYXN5bmMgZnVuY3Rpb24gcmVuZGVyQWlTY2FuKGMpewogIGMuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXY+PGRpdiBjbGFzcz0icHQiPkFJINGB0LrQsNC90LjRgNCw0L3QtSDQvdCwINGE0LDQutGC0YPRgNC4PC9kaXY+PGRpdiBjbGFzcz0ic21hbGwiPtCf0L7RgdGC0LDQstC4IE9DUiDRgtC10LrRgdGCINC+0YIgUERGL9GB0L3QuNC80LrQsCDQuNC70Lgg0LrQsNGH0Lgg0YLQtdC60YHRgtC+0LIg0YTQsNC50LsuINCh0LjRgdGC0LXQvNCw0YLQsCDRidC1INC/0YDQtdC00LvQvtC20Lgg0L/QvtC70LXRgtCwINC30LAg0YfQtdGA0L3QvtCy0LAuPC9kaXY+PC9kaXY+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9InJ1bkFpU2NhbigpIj7QodC60LDQvdC40YDQsNC5PC9idXR0b24+PC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJzY2FuYm94Ij48ZGl2PjxsYWJlbD7QpNCw0LnQuyAoVFhUL0NTVi9KU09OINC40LvQuCDRgtC10LrRgdGCINC+0YIgT0NSKTwvbGFiZWw+PGlucHV0IHR5cGU9ImZpbGUiIGlkPSJzY2FuX2ZpbGUiIG9uY2hhbmdlPSJyZWFkU2NhbkZpbGUodGhpcykiPjxsYWJlbD7QotC10LrRgdGCINC+0YIg0YTQsNC60YLRg9GA0LA8L2xhYmVsPjx0ZXh0YXJlYSBpZD0ic2Nhbl90ZXh0IiByb3dzPSIxOCIgcGxhY2Vob2xkZXI9ItCf0L7RgdGC0LDQstC4INGC0YPQuiDRgtC10LrRgdGC0LAg0L7RgiDRhNCw0LrRgtGD0YDQsNGC0LAsINC/0YDQvtGE0L7RgNC80LDRgtCwINC40LvQuCDQutCw0YHQvtCy0LjRjyDQtNC+0LrRg9C80LXQvdGCLi4uIj48L3RleHRhcmVhPjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0ic2NhbnJlc3VsdCIgaWQ9InNjYW5fcmVzdWx0Ij48ZGl2IGNsYXNzPSJzbWFsbCI+0KDQtdC30YPQu9GC0LDRgtGK0YIg0YnQtSDRgdC1INC/0L7Rj9Cy0Lgg0YLRg9C6LjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pic7Cn0KZnVuY3Rpb24gcmVhZFNjYW5GaWxlKGlucCl7CiAgdmFyIGY9aW5wLmZpbGVzJiZpbnAuZmlsZXNbMF07IGlmKCFmKXJldHVybjsKICB2YXIgcj1uZXcgRmlsZVJlYWRlcigpOwogIHIub25sb2FkPWZ1bmN0aW9uKCl7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzY2FuX3RleHQnKS52YWx1ZT1TdHJpbmcoci5yZXN1bHR8fCcnKTsgcnVuQWlTY2FuKCk7IH07CiAgci5yZWFkQXNUZXh0KGYpOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZUFtb3VudCh2KXsKICB2PVN0cmluZyh2fHwnJykucmVwbGFjZSgvXHMvZywnJykucmVwbGFjZSgvW15cZCwuLV0vZywnJyk7CiAgaWYodi5pbmRleE9mKCcsJyk+LTEgJiYgdi5pbmRleE9mKCcuJyk+LTEpIHY9di5yZXBsYWNlKC9cLi9nLCcnKS5yZXBsYWNlKCcsJywnLicpOwogIGVsc2Ugdj12LnJlcGxhY2UoJywnLCcuJyk7CiAgcmV0dXJuIHBhcnNlRmxvYXQodil8fDA7Cn0KZnVuY3Rpb24gZmlyc3RNYXRjaCh0ZXh0LHBhdHRlcm5zKXsKICBmb3IodmFyIGk9MDtpPHBhdHRlcm5zLmxlbmd0aDtpKyspe3ZhciBtPXRleHQubWF0Y2gocGF0dGVybnNbaV0pOyBpZihtKXJldHVybiAobVsxXXx8bVswXXx8JycpLnRyaW0oKTt9CiAgcmV0dXJuICcnOwp9CmZ1bmN0aW9uIHBhcnNlQWlJbnZvaWNlKHRleHQpewogIHZhciByYXc9U3RyaW5nKHRleHR8fCcnKTsKICB2YXIgbGluZXM9cmF3LnNwbGl0KC9ccj9cbi8pLm1hcCh4PT54LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOwogIHZhciBqb2luZWQ9bGluZXMuam9pbignXG4nKTsKICB2YXIgZWlrPWZpcnN0TWF0Y2goam9pbmVkLFsvKD860JXQmNCafEVJS3zQkdGD0LvRgdGC0LDRgnxCVUxTVEFUKVs6XHPihJYtXSooWzAtOV17OSwxM30pL2ksL1xiKFswLTldezl9KVxiL10pOwogIHZhciB2YXRObz1maXJzdE1hdGNoKGpvaW5lZCxbLyhCR1swLTldezksMTJ9KS9pLC8oPzrQlNCU0KF8VkFUKVs6XHPihJYtXSooQkc/WzAtOV17OSwxMn0pL2ldKS50b1VwcGVyQ2FzZSgpOwogIHZhciBudW1iZXI9Zmlyc3RNYXRjaChqb2luZWQsWy8oPzrQpNCw0LrRgtGD0YDQsHxJbnZvaWNlfNCU0L7QutGD0LzQtdC90YJ84oSWfE5vXC4/KVs6XHPihJYtXSooW0EtWtCQLdCvMC05XC8uLV17Myx9KS9pXSk7CiAgdmFyIGRhdGU9Zmlyc3RNYXRjaChqb2luZWQsWy8oPzrQlNCw0YLQsHxEYXRlKVs6XHMtXSooXGR7MSwyfVsuXC8tXVxkezEsMn1bLlwvLV1cZHsyLDR9KS9pLC8oXGR7MSwyfVsuXC8tXVxkezEsMn1bLlwvLV1cZHs0fSkvXSk7CiAgdmFyIGR1ZT1maXJzdE1hdGNoKGpvaW5lZCxbLyg/OtCf0LDQtNC10LZ8RHVlKVs6XHMtXSooXGR7MSwyfVsuXC8tXVxkezEsMn1bLlwvLV1cZHsyLDR9KS9pXSk7CiAgdmFyIHRvdGFsPTAsIHZhdD0wLCBjdXJyZW5jeT1maXJzdE1hdGNoKGpvaW5lZCxbL1xiKEVVUnxCR058VVNEKVxiL2ksL1xiKNC70LJcLj980LvQtdCy0LApXGIvaV0pLnRvVXBwZXJDYXNlKCk7CiAgaWYoY3VycmVuY3k9PT0n0JvQki4nfHxjdXJyZW5jeT09PSfQm9CSJ3x8Y3VycmVuY3k9PT0n0JvQldCS0JAnKWN1cnJlbmN5PSdCR04nOwogIGxpbmVzLmZvckVhY2goZnVuY3Rpb24obCl7CiAgICBpZigvKNC+0LHRidC+fHRvdGFsfNGB0YPQvNCwINC30LAg0L/Qu9Cw0YnQsNC90LV8YW1vdW50IGR1ZSkvaS50ZXN0KGwpKXsKICAgICAgdmFyIG51bXM9bC5tYXRjaCgvWzAtOV1bMC05XHMuLF0qWzAtOV0vZyk7IGlmKG51bXMmJm51bXMubGVuZ3RoKSB0b3RhbD1NYXRoLm1heCh0b3RhbCxub3JtYWxpemVBbW91bnQobnVtc1tudW1zLmxlbmd0aC0xXSkpOwogICAgfQogICAgaWYoLyjQtNC00YF8dmF0KS9pLnRlc3QobCkpewogICAgICB2YXIgdm49bC5tYXRjaCgvWzAtOV1bMC05XHMuLF0qWzAtOV0vZyk7IGlmKHZuJiZ2bi5sZW5ndGgpIHZhdD1NYXRoLm1heCh2YXQsbm9ybWFsaXplQW1vdW50KHZuW3ZuLmxlbmd0aC0xXSkpOwogICAgfQogIH0pOwogIGlmKCF0b3RhbCl7CiAgICB2YXIgYWxsPWpvaW5lZC5tYXRjaCgvWzAtOV1bMC05XHMuLF0qWzAtOV0vZyl8fFtdOwogICAgYWxsLmZvckVhY2gobj0+e3ZhciB4PW5vcm1hbGl6ZUFtb3VudChuKTsgaWYoeD50b3RhbCl0b3RhbD14O30pOwogIH0KICB2YXIgY29tcGFueT0nJzsKICBmb3IodmFyIGk9MDtpPGxpbmVzLmxlbmd0aDtpKyspewogICAgaWYoLyjQtNC+0YHRgtCw0LLRh9C40Lp8c3VwcGxpZXJ80LjQt9C00LDRgtC10Lt80L/RgNC+0LTQsNCy0LDRh3zQv9C+0LvRg9GH0LDRgtC10Lt8Y2xpZW50KS9pLnRlc3QobGluZXNbaV0pICYmIGxpbmVzW2krMV0pe2NvbXBhbnk9bGluZXNbaSsxXTticmVhazt9CiAgICBpZihlaWsgJiYgbGluZXNbaV0uaW5kZXhPZihlaWspPi0xICYmIGk+MCl7Y29tcGFueT1saW5lc1tpLTFdO2JyZWFrO30KICB9CiAgdmFyIHZhdFBlcmNlbnQ9dmF0JiZ0b3RhbD9NYXRoLnJvdW5kKCh2YXQvKHRvdGFsLXZhdCkpKjEwMCk6MjA7CiAgaWYoIWlzRmluaXRlKHZhdFBlcmNlbnQpfHx2YXRQZXJjZW50PDB8fHZhdFBlcmNlbnQ+MzApdmF0UGVyY2VudD0yMDsKICB2YXIgc3VidG90YWw9dG90YWwmJnZhdFBlcmNlbnQ+PTA/dG90YWwvKDErdmF0UGVyY2VudC8xMDApOjA7CiAgcmV0dXJuIHtudW1iZXI6bnVtYmVyLGRhdGU6ZGF0ZVRvSXNvKGRhdGUpLGR1ZTpkYXRlVG9Jc28oZHVlKSxjb21wYW55OmNvbXBhbnksZWlrOmVpayx2YXRfbm86dmF0Tm8sdG90YWw6dG90YWwsc3VidG90YWw6c3VidG90YWwsdmF0X3BlcmNlbnQ6dmF0UGVyY2VudCxjdXJyZW5jeTpjdXJyZW5jeXx8J0VVUicscmF3OnJhd307Cn0KZnVuY3Rpb24gZGF0ZVRvSXNvKHMpewogIGlmKCFzKXJldHVybiAnJzsKICB2YXIgbT1TdHJpbmcocykubWF0Y2goLyhcZHsxLDJ9KVsuXC8tXShcZHsxLDJ9KVsuXC8tXShcZHsyLDR9KS8pOyBpZighbSlyZXR1cm4gJyc7CiAgdmFyIHk9bVszXS5sZW5ndGg9PT0yPycyMCcrbVszXTptWzNdOwogIHJldHVybiB5KyctJytTdHJpbmcobVsyXSkucGFkU3RhcnQoMiwnMCcpKyctJytTdHJpbmcobVsxXSkucGFkU3RhcnQoMiwnMCcpOwp9CmZ1bmN0aW9uIHJ1bkFpU2NhbigpewogIHZhciB0eHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NjYW5fdGV4dCcpLnZhbHVlOwogIGlmKCF0eHQudHJpbSgpKXt0b2FzdCgn0J/QvtGB0YLQsNCy0Lgg0YLQtdC60YHRgiDQt9CwINGB0LrQsNC90LjRgNCw0L3QtScpO3JldHVybjt9CiAgQUlfU0NBTj1wYXJzZUFpSW52b2ljZSh0eHQpOwogIHZhciByPUFJX1NDQU47CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NjYW5fcmVzdWx0JykuaW5uZXJIVE1MPQogICAgc2NhbkxpbmUoJ9Cd0L7QvNC10YAnLHIubnVtYmVyfHwn4oCUJykrc2NhbkxpbmUoJ9CU0LDRgtCwJyxyLmRhdGV8fCfigJQnKStzY2FuTGluZSgn0J/QsNC00LXQticsci5kdWV8fCfigJQnKSsKICAgIHNjYW5MaW5lKCfQpNC40YDQvNCwJyxyLmNvbXBhbnl8fCfigJQnKStzY2FuTGluZSgn0JXQmNCaJyxyLmVpa3x8J+KAlCcpK3NjYW5MaW5lKCfQlNCU0KEg4oSWJyxyLnZhdF9ub3x8J+KAlCcpKwogICAgc2NhbkxpbmUoJ9Ce0LHRidC+Jyxtb25leShyLnRvdGFsLHIuY3VycmVuY3kpKStzY2FuTGluZSgn0JTQlNChICUnLHIudmF0X3BlcmNlbnQrJyUnKSsKICAgICc8YnV0dG9uIGNsYXNzPSJidG4gcCIgc3R5bGU9IndpZHRoOjEwMCU7bWFyZ2luLXRvcDoxMnB4IiBvbmNsaWNrPSJhcHBseUFpU2NhbigpIj7QodGK0LfQtNCw0Lkg0YTQsNC60YLRg9GA0LAg0YfQtdGA0L3QvtCy0LA8L2J1dHRvbj4nKwogICAgJzxidXR0b24gY2xhc3M9ImJ0biBzIiBzdHlsZT0id2lkdGg6MTAwJTttYXJnaW4tdG9wOjhweCIgb25jbGljaz0iY29weVNjYW5Kc29uKCkiPtCa0L7Qv9C40YDQsNC5IEpTT048L2J1dHRvbj4nOwp9CmZ1bmN0aW9uIHNjYW5MaW5lKGssdil7cmV0dXJuICc8ZGl2IGNsYXNzPSJzY2FubGluZSI+PHNwYW4+JytrKyc8L3NwYW4+PGI+JytTdHJpbmcodnx8JycpLnJlcGxhY2UoLzwvZywnJmx0OycpKyc8L2I+PC9kaXY+Jzt9CmZ1bmN0aW9uIGNvcHlTY2FuSnNvbigpeyBpZihBSV9TQ0FOJiZuYXZpZ2F0b3IuY2xpcGJvYXJkKW5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KEFJX1NDQU4sbnVsbCwyKSk7IHRvYXN0KCfQmtC+0L/QuNGA0LDQvdC+Jyk7IH0KYXN5bmMgZnVuY3Rpb24gYXBwbHlBaVNjYW4oKXsKICBpZighQUlfU0NBTil7dG9hc3QoJ9Cf0YrRgNCy0L4g0YHQutCw0L3QuNGA0LDQuSDQtNC+0LrRg9C80LXQvdGCJyk7cmV0dXJuO30KICBhd2FpdCBlbnN1cmVDbGllbnRzKCk7CiAgdmFyIGZvdW5kPUNMSUVOVFMuZmluZChjPT4oQUlfU0NBTi5laWsmJmMuZWlrPT09QUlfU0NBTi5laWspfHwoQUlfU0NBTi5jb21wYW55JiYoKGMuY29tcGFueXx8Yy5uYW1lfHwnJykudG9Mb3dlckNhc2UoKS5pbmRleE9mKEFJX1NDQU4uY29tcGFueS50b0xvd2VyQ2FzZSgpKT4tMSkpKTsKICBhd2FpdCBuZXdEb2N1bWVudCgnaW52b2ljZScpOwogIGlmKGZvdW5kKSBmaWxsQ2xpZW50U2VsZWN0KGZvdW5kLmlkKTsKICBpZihBSV9TQ0FOLmRhdGUpe2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX2lzc3VlJykudmFsdWU9QUlfU0NBTi5kYXRlO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX3RheCcpLnZhbHVlPUFJX1NDQU4uZGF0ZTt9CiAgaWYoQUlfU0NBTi5kdWUpZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfZHVlJykudmFsdWU9QUlfU0NBTi5kdWU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfdmF0JykudmFsdWU9QUlfU0NBTi52YXRfcGVyY2VudHx8MjA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfY3VycmVuY3knKS52YWx1ZT1BSV9TQ0FOLmN1cnJlbmN5fHwnRVVSJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9ub3RlcycpLnZhbHVlPSdBSSDRgdC60LDQvdC40YDQsNC90LU6ICcrKEFJX1NDQU4ubnVtYmVyfHwnJykrKEFJX1NDQU4uY29tcGFueT8nIMK3ICcrQUlfU0NBTi5jb21wYW55OicnKSsoQUlfU0NBTi5laWs/JyDCtyDQldCY0JogJytBSV9TQ0FOLmVpazonJyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2l0ZW1zQm94JykuaW5uZXJIVE1MPScnOwogIGFkZEl0ZW1Sb3coe25hbWU6J9Ch0LrQsNC90LjRgNCw0L0g0LTQvtC60YPQvNC10L3RgiAnKyhBSV9TQ0FOLm51bWJlcnx8JycpLHF0eToxLHVuaXQ6J9Cx0YAuJyxwcmljZTooQUlfU0NBTi5zdWJ0b3RhbHx8QUlfU0NBTi50b3RhbHx8MCkudG9GaXhlZCgyKX0pOwogIHJlY2FsY1RvdGFscygpOwp9Cgphc3luYyBmdW5jdGlvbiBkZWxldGVEb2N1bWVudChpZCx0eXBlKXsKICBpZighY29uZmlybSgn0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LTQvtC60YPQvNC10L3RgtCwPycpKXJldHVybjsKICBhd2FpdCBhZignZG9jdW1lbnRzJywnREVMRVRFJywnJywgJyZpZD0nK2lkKTsKICByZW5kZXJEb2NMaXN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50JyksdHlwZSk7Cn0KCi8vIOKUgOKUgCBET0NVTUVOVCBFRElUT1IgTU9EQUwg4pSA4pSACnZhciBFRElUX0lEPW51bGwsIEVESVRfVFlQRT1udWxsOwphc3luYyBmdW5jdGlvbiBlbnN1cmVDbGllbnRzKCl7IGlmKCFDTElFTlRTLmxlbmd0aCkgQ0xJRU5UUz1hd2FpdCBhZignY2xpZW50cycpfHxbXTsgfQoKYXN5bmMgZnVuY3Rpb24gbmV3RG9jdW1lbnQodHlwZSl7CiAgYXdhaXQgZW5zdXJlQ2xpZW50cygpOwogIEVESVRfSUQ9bnVsbDsgRURJVF9UWVBFPXR5cGU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY01vZGFsVGl0bGUnKS50ZXh0Q29udGVudD0n0J3QvtCyINC00L7QutGD0LzQtdC90YIg4oCUICcrKFRZUEVfTEFCRUxbdHlwZV18fHR5cGUpOwogIGZpbGxDbGllbnRTZWxlY3QoKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9pc3N1ZScpLnZhbHVlPW5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF90YXgnKS52YWx1ZT1uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfZHVlJykudmFsdWU9Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfdmF0JykudmFsdWU9MjA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfY3VycmVuY3knKS52YWx1ZT0nRVVSJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9zdGF0dXMnKS52YWx1ZT0nZHJhZnQnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX25vdGVzJykudmFsdWU9Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2l0ZW1zQm94JykuaW5uZXJIVE1MPScnOwogIGFkZEl0ZW1Sb3coKTsKICByZWNhbGNUb3RhbHMoKTsKICBvcGVuTW9kYWwoJ2RvY01vZGFsJyk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGVkaXREb2N1bWVudChpZCx0eXBlKXsKICBhd2FpdCBlbnN1cmVDbGllbnRzKCk7CiAgdmFyIGZ1bGw9YXdhaXQgYWYoJ2RvY3VtZW50X2Z1bGwnLCdHRVQnLCcnLCAnJmlkPScraWQpOwogIGlmKCFmdWxsKXt0b2FzdCgn0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0YDQtdC20LTQsNC90LUnKTtyZXR1cm47fQogIHZhciBkPWZ1bGwuZG9jdW1lbnQ7CiAgRURJVF9JRD1pZDsgRURJVF9UWVBFPXR5cGU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY01vZGFsVGl0bGUnKS50ZXh0Q29udGVudD0oVFlQRV9MQUJFTFt0eXBlXXx8dHlwZSkrJyDihJYgJytkLmZ1bGxfbnVtYmVyOwogIGZpbGxDbGllbnRTZWxlY3QoZC5jbGllbnRfaWQpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX2lzc3VlJykudmFsdWU9ZC5pc3N1ZV9kYXRlfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF90YXgnKS52YWx1ZT1kLnRheF9kYXRlfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9kdWUnKS52YWx1ZT1kLmR1ZV9kYXRlfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF92YXQnKS52YWx1ZT1kLnZhdF9wZXJjZW50fHwyMDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9jdXJyZW5jeScpLnZhbHVlPWQuY3VycmVuY3l8fCdFVVInOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX3N0YXR1cycpLnZhbHVlPWQuc3RhdHVzfHwnZHJhZnQnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX25vdGVzJykudmFsdWU9ZC5ub3Rlc3x8Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2l0ZW1zQm94JykuaW5uZXJIVE1MPScnOwogIChkLml0ZW1zfHxbXSkuZm9yRWFjaChpdD0+YWRkSXRlbVJvdyhpdCkpOwogIGlmKCFkLml0ZW1zfHwhZC5pdGVtcy5sZW5ndGgpIGFkZEl0ZW1Sb3coKTsKICByZWNhbGNUb3RhbHMoKTsKICBvcGVuTW9kYWwoJ2RvY01vZGFsJyk7Cn0KCmZ1bmN0aW9uIGZpbGxDbGllbnRTZWxlY3Qoc2VsZWN0ZWRJZCl7CiAgdmFyIHNlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9jbGllbnQnKTsKICBzZWwuaW5uZXJIVE1MPSc8b3B0aW9uIHZhbHVlPSIiPuKAlCDQsdC10Lcg0LrQu9C40LXQvdGCIOKAlDwvb3B0aW9uPicrQ0xJRU5UUy5tYXAoYz0+CiAgICAnPG9wdGlvbiB2YWx1ZT0iJytjLmlkKyciJysoYy5pZD09PXNlbGVjdGVkSWQ/JyBzZWxlY3RlZCc6JycpKyc+JysoYy5uYW1lfHxjLmNvbXBhbnkpKyc8L29wdGlvbj4nKS5qb2luKCcnKTsKfQpmdW5jdGlvbiBmaWxsQ2xpZW50U25hcHNob3QoKXsgLyogY2xpZW50IGNob3Nlbjsgc25hcHNob3QgaGFuZGxlZCBzZXJ2ZXItc2lkZSBvbiBzYXZlICovIH0KCmZ1bmN0aW9uIGFkZEl0ZW1Sb3coaXQpewogIGl0PWl0fHx7bmFtZTonJyxxdHk6MSx1bml0OifQsdGALicscHJpY2U6MH07CiAgdmFyIGJveD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaXRlbXNCb3gnKTsKICBpZighYm94LnF1ZXJ5U2VsZWN0b3IoJy5pdGVtaGVhZC1yb3cnKSl7CiAgICB2YXIgaGVhZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGhlYWQuY2xhc3NOYW1lPSdpdGVtcm93IGl0ZW1oZWFkLXJvdyc7CiAgICBoZWFkLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iaXRlbWhlYWQiPtCQ0YDRgtC40LrRg9C7PC9kaXY+PGRpdiBjbGFzcz0iaXRlbWhlYWQiPtCa0L7Quy48L2Rpdj48ZGl2IGNsYXNzPSJpdGVtaGVhZCI+0JzRj9GA0LrQsDwvZGl2PjxkaXYgY2xhc3M9Iml0ZW1oZWFkIj7QptC10L3QsDwvZGl2PjxkaXYgY2xhc3M9Iml0ZW1oZWFkIj7QntCx0YnQvjwvZGl2PjxkaXY+PC9kaXY+JzsKICAgIGJveC5hcHBlbmRDaGlsZChoZWFkKTsKICB9CiAgdmFyIHJvdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByb3cuY2xhc3NOYW1lPSdpdGVtcm93JzsKICByb3cuaW5uZXJIVE1MPSc8aW5wdXQgY2xhc3M9Iml0X25hbWUiIHZhbHVlPSInKyhpdC5uYW1lfHwnJykucmVwbGFjZSgvIi9nLCcmcXVvdDsnKSsnIiBwbGFjZWhvbGRlcj0i0KPRgdC70YPQs9CwL9C/0YDQvtC00YPQutGCIj4nKwogICAgJzxpbnB1dCBjbGFzcz0iaXRfcXR5IiB0eXBlPSJudW1iZXIiIHN0ZXA9IjAuMDEiIHZhbHVlPSInKyhpdC5xdHl8fDEpKyciPicrCiAgICAnPGlucHV0IGNsYXNzPSJpdF91bml0IiB2YWx1ZT0iJysoaXQudW5pdHx8J9Cx0YAuJykrJyI+JysKICAgICc8aW5wdXQgY2xhc3M9Iml0X3ByaWNlIiB0eXBlPSJudW1iZXIiIHN0ZXA9IjAuMDEiIHZhbHVlPSInKyhpdC5wcmljZXx8MCkrJyI+JysKICAgICc8aW5wdXQgY2xhc3M9Iml0X3RvdGFsIiBkaXNhYmxlZCB2YWx1ZT0iMC4wMCI+JysKICAgICc8c3BhbiBjbGFzcz0iaWNvbmJ0biIgb25jbGljaz0idGhpcy5wYXJlbnRFbGVtZW50LnJlbW92ZSgpO3JlY2FsY1RvdGFscygpIj7inJU8L3NwYW4+JzsKICBib3guYXBwZW5kQ2hpbGQocm93KTsKICByb3cucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQnKS5mb3JFYWNoKGlucD0+aW5wLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxyZWNhbGNUb3RhbHMpKTsKICByZWNhbGNUb3RhbHMoKTsKfQoKZnVuY3Rpb24gcmVjYWxjVG90YWxzKCl7CiAgdmFyIHJvd3M9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2l0ZW1zQm94IC5pdGVtcm93Om5vdCguaXRlbWhlYWQtcm93KScpOwogIHZhciBzdWJ0b3RhbD0wOwogIHJvd3MuZm9yRWFjaChyPT57CiAgICB2YXIgcT1wYXJzZUZsb2F0KHIucXVlcnlTZWxlY3RvcignLml0X3F0eScpLnZhbHVlKXx8MDsKICAgIHZhciBwPXBhcnNlRmxvYXQoci5xdWVyeVNlbGVjdG9yKCcuaXRfcHJpY2UnKS52YWx1ZSl8fDA7CiAgICB2YXIgdD1xKnA7CiAgICByLnF1ZXJ5U2VsZWN0b3IoJy5pdF90b3RhbCcpLnZhbHVlPXQudG9GaXhlZCgyKTsKICAgIHN1YnRvdGFsKz10OwogIH0pOwogIHZhciB2YXRQPXBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfdmF0JykudmFsdWUpfHwwOwogIHZhciB2YXQ9c3VidG90YWwqdmF0UC8xMDA7CiAgdmFyIHRvdGFsPXN1YnRvdGFsK3ZhdDsKICB2YXIgY3VyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX2N1cnJlbmN5JykudmFsdWU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdGFsc0JveCcpLmlubmVySFRNTD0KICAgICfQlNCw0L3RitGH0L3QsCDQvtGB0L3QvtCy0LA6ICcrbW9uZXkoc3VidG90YWwsY3VyKSsnPGJyPtCU0JTQoSAoJyt2YXRQKyclKTogJyttb25leSh2YXQsY3VyKSsnPGJyPjxiPtCe0LHRidC+OiAnK21vbmV5KHRvdGFsLGN1cikrJzwvYj4nOwp9Cgphc3luYyBmdW5jdGlvbiBzYXZlRG9jdW1lbnQoKXsKICB2YXIgaXRlbXM9W107CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2l0ZW1zQm94IC5pdGVtcm93Om5vdCguaXRlbWhlYWQtcm93KScpLmZvckVhY2gocj0+ewogICAgaXRlbXMucHVzaCh7CiAgICAgIG5hbWU6ci5xdWVyeVNlbGVjdG9yKCcuaXRfbmFtZScpLnZhbHVlLAogICAgICBxdHk6cGFyc2VGbG9hdChyLnF1ZXJ5U2VsZWN0b3IoJy5pdF9xdHknKS52YWx1ZSl8fDAsCiAgICAgIHVuaXQ6ci5xdWVyeVNlbGVjdG9yKCcuaXRfdW5pdCcpLnZhbHVlLAogICAgICBwcmljZTpwYXJzZUZsb2F0KHIucXVlcnlTZWxlY3RvcignLml0X3ByaWNlJykudmFsdWUpfHwwCiAgICB9KTsKICB9KTsKICB2YXIgcGF5bG9hZD17CiAgICBpZDpFRElUX0lEfHx1bmRlZmluZWQsIHR5cGU6RURJVF9UWVBFLAogICAgY2xpZW50X2lkOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX2NsaWVudCcpLnZhbHVlfHxudWxsLAogICAgaXNzdWVfZGF0ZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9pc3N1ZScpLnZhbHVlLAogICAgdGF4X2RhdGU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfdGF4JykudmFsdWUsCiAgICBkdWVfZGF0ZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9kdWUnKS52YWx1ZXx8bnVsbCwKICAgIGl0ZW1zOml0ZW1zLAogICAgdmF0X3BlcmNlbnQ6cGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF92YXQnKS52YWx1ZSl8fDAsCiAgICBjdXJyZW5jeTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9jdXJyZW5jeScpLnZhbHVlLAogICAgc3RhdHVzOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX3N0YXR1cycpLnZhbHVlLAogICAgbm90ZXM6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rfbm90ZXMnKS52YWx1ZQogIH07CiAgdmFyIHI9YXdhaXQgYWYoJ2RvY3VtZW50cycsJ1BPU1QnLHBheWxvYWQpOwogIGlmKHIpeyB0b2FzdCgn0JfQsNC/0LjRgdCw0L3Qvjog4oSWICcrci5mdWxsX251bWJlcik7IGNsb3NlTW9kYWwoJ2RvY01vZGFsJyk7IHJlbmRlckRvY0xpc3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnQnKSxFRElUX1RZUEUpOyB9CiAgZWxzZSB0b2FzdCgn0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGBJyk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGxvb2t1cEVpaygpewogIHZhciBlaWs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfZWlrbG9va3VwJykudmFsdWUudHJpbSgpOwogIGlmKCFlaWspe3RvYXN0KCfQktGK0LLQtdC00Lgg0JXQmNCaJyk7cmV0dXJuO30KICB2YXIgcj1hd2FpdCBhZignZWlrX2xvb2t1cCcsJ0dFVCcsJycsICcmZWlrPScrZW5jb2RlVVJJQ29tcG9uZW50KGVpaykpOwogIGlmKHImJnIuZm91bmQpewogICAgdG9hc3QoJ9Cd0LDQvNC10YDQtdC90L46ICcrci5uYW1lKTsKICAgIC8vIG9mZmVyIHRvIGNyZWF0ZS9zZWxlY3QgY2xpZW50IHF1aWNrbHkKICAgIGlmKGNvbmZpcm0oJ9Cd0LDQvNC10YDQtdC90LAg0YTQuNGA0LzQsDogJytyLm5hbWUrJ1xuJytyLmFkZHJlc3MrJ1xuXG7QlNC+0LHQsNCy0Lgg0LrQsNGC0L4g0L3QvtCyINC60LvQuNC10L3Rgj8nKSl7CiAgICAgIHZhciBuYz1hd2FpdCBhZignY2xpZW50cycsJ1BPU1QnLHtuYW1lOnIubmFtZSxjb21wYW55OnIubmFtZSxlaWs6ci5laWssdmF0X251bWJlcjpyLnZhdF9udW1iZXIsYWRkcmVzczpyLmFkZHJlc3N9KTsKICAgICAgaWYobmMpeyBDTElFTlRTPWF3YWl0IGFmKCdjbGllbnRzJyl8fFtdOyBmaWxsQ2xpZW50U2VsZWN0KG5jLmlkKTsgfQogICAgfQogIH0gZWxzZSB7CiAgICB0b2FzdCgociYmci5tZXNzYWdlKXx8J9Cd0LUg0LUg0L3QsNC80LXRgNC10L3QviDigJQg0LLRitCy0LXQtNC4INC00LDQvdC90LjRgtC1INGA0YrRh9C90L4g0LIg0YDQsNC30LTQtdC7INCa0LvQuNC10L3RgtC4Jyk7CiAgfQp9Cgphc3luYyBmdW5jdGlvbiBlbWFpbERvY3VtZW50KGlkKXsKICB2YXIgdG89cHJvbXB0KCfQmNC80LXQudC7INC90LAg0L/QvtC70YPRh9Cw0YLQtdC70Y86Jyk7CiAgaWYoIXRvKXJldHVybjsKICB2YXIgbGluaz13aW5kb3cubG9jYXRpb24ub3JpZ2luK3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9pbnZvaWNlc1wuaHRtbCQvLCcnKSsnaW52b2ljZS1kb2MuaHRtbD9pZD0nK2lkOwogIHZhciByPWF3YWl0IGFmKCdzZW5kX2RvY3VtZW50X2VtYWlsJywnUE9TVCcse2RvY3VtZW50X2lkOmlkLHRvOnRvLGxpbms6bGlua30pOwogIGlmKHIpIHRvYXN0KCfQmNC30L/RgNCw0YLQtdC90L4g0L3QsCAnK3RvKTsKICBlbHNlIHRvYXN0KCfQk9GA0LXRiNC60LAg4oCUINC/0YDQvtCy0LXRgNC4IFNNVFAg0L3QsNGB0YLRgNC+0LnQutC40YLQtScpOwp9CgovLyDilIDilIAgQ0xJRU5UUyDilIDilIAKYXN5bmMgZnVuY3Rpb24gcmVuZGVyQ2xpZW50cyhjKXsKICBDTElFTlRTPWF3YWl0IGFmKCdjbGllbnRzJyl8fFtdOwogIHZhciBodG1sPSc8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7QmtC70LjQtdC90YLQuCAoJytDTElFTlRTLmxlbmd0aCsnKTwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iYWN0aW9ucyI+PGJ1dHRvbiBjbGFzcz0iYnRuIHMiIG9uY2xpY2s9InNob3dJbXBvcnQoKSI+4qyGINCY0LzQv9C+0YDRgiBDU1Y8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ibmV3Q2xpZW50KCkiPisg0J3QvtCyINC60LvQuNC10L3RgjwvYnV0dG9uPjwvZGl2PjwvZGl2Pic7CiAgaHRtbCs9JzxkaXYgaWQ9ImltcG9ydEJveCIgc3R5bGU9ImRpc3BsYXk6bm9uZTttYXJnaW4tYm90dG9tOjEycHgiPicrCiAgICAnPGxhYmVsPkNTViAo0LrQvtC70L7QvdC4OiBuYW1lLGNvbXBhbnksZW1haWwscGhvbmUsZWlrLHZhdF9udW1iZXIsYWRkcmVzcyxjaXR5LG1vbCk8L2xhYmVsPicrCiAgICAnPHRleHRhcmVhIGlkPSJjc3ZUZXh0IiByb3dzPSI1IiBwbGFjZWhvbGRlcj0ibmFtZSxjb21wYW55LGVtYWlsLHBob25lLGVpa1xu0JjQstCw0L0g0JjQstCw0L3QvtCyLNCi0LXRgdGCINCV0J7QntCULGl2YW5AdGVzdC5iZywwODguLiwxMjM0NTY3ODkiPjwvdGV4dGFyZWE+JysKICAgICc8YnV0dG9uIGNsYXNzPSJidG4gcCIgc3R5bGU9Im1hcmdpbi10b3A6OHB4IiBvbmNsaWNrPSJpbXBvcnRDc3YoKSI+0JjQvNC/0L7RgNGC0LjRgNCw0Lk8L2J1dHRvbj48L2Rpdj4nOwogIGh0bWwrPSc8dGFibGU+PHRoZWFkPjx0cj48dGg+0JjQvNC1L9Ck0LjRgNC80LA8L3RoPjx0aD7QldCY0Jo8L3RoPjx0aD7QmNC80LXQudC7PC90aD48dGg+0JPRgNCw0LQ8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICBDTElFTlRTLmZvckVhY2goY2w9PnsKICAgIGh0bWwrPSc8dHI+PHRkPicrKGNsLmNvbXBhbnl8fGNsLm5hbWUpKyc8L3RkPjx0ZD4nKyhjbC5laWt8fCfigJQnKSsnPC90ZD48dGQ+JysoY2wuZW1haWx8fCfigJQnKSsnPC90ZD48dGQ+JysoY2wuY2l0eXx8J+KAlCcpKyc8L3RkPicrCiAgICAgICc8dGQgY2xhc3M9ImFjdGlvbnMiPjxzcGFuIGNsYXNzPSJpY29uYnRuIiBvbmNsaWNrPSJlZGl0Q2xpZW50KFwnJytjbC5pZCsnXCcpIj7inI48L3NwYW4+JysKICAgICAgJzxzcGFuIGNsYXNzPSJpY29uYnRuIiBvbmNsaWNrPSJkZWxldGVDbGllbnQoXCcnK2NsLmlkKydcJykiPvCfl5E8L3NwYW4+PC90ZD48L3RyPic7CiAgfSk7CiAgaWYoIUNMSUVOVFMubGVuZ3RoKSBodG1sKz0nPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic21hbGwiPtCd0Y/QvNCwINC60LvQuNC10L3RgtC4PC90ZD48L3RyPic7CiAgaHRtbCs9JzwvdGJvZHk+PC90YWJsZT48L2Rpdj4nOwogIGMuaW5uZXJIVE1MPWh0bWw7Cn0KZnVuY3Rpb24gc2hvd0ltcG9ydCgpeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1wb3J0Qm94Jykuc3R5bGUuZGlzcGxheT0nYmxvY2snOyB9CmFzeW5jIGZ1bmN0aW9uIGltcG9ydENzdigpewogIHZhciBjc3Y9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NzdlRleHQnKS52YWx1ZS50cmltKCk7CiAgaWYoIWNzdil7dG9hc3QoJ9Cf0L7RgdGC0LDQstC4IENTVicpO3JldHVybjt9CiAgdmFyIHI9YXdhaXQgYWYoJ2NsaWVudHNfaW1wb3J0JywnUE9TVCcse2Nzdjpjc3Z9KTsKICBpZihyKXsgdG9hc3QoJ9CY0LzQv9C+0YDRgtC40YDQsNC90Lg6ICcrci5pbXBvcnRlZCk7IHJlbmRlckNsaWVudHMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnQnKSk7IH0KfQp2YXIgRURJVF9DTElFTlRfSUQ9bnVsbDsKZnVuY3Rpb24gbmV3Q2xpZW50KCl7IEVESVRfQ0xJRU5UX0lEPW51bGw7IFsnY19uYW1lJywnY19jb21wYW55JywnY19laWsnLCdjX3ZhdCcsJ2NfZW1haWwnLCdjX3Bob25lJywnY19hZGRyZXNzJywnY19jaXR5JywnY19tb2wnXS5mb3JFYWNoKGlkPT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWU9JycpOyBvcGVuTW9kYWwoJ2NsaWVudE1vZGFsJyk7IH0KYXN5bmMgZnVuY3Rpb24gZWRpdENsaWVudChpZCl7CiAgdmFyIGNsPUNMSUVOVFMuZmluZCh4PT54LmlkPT09aWQpOyBpZighY2wpcmV0dXJuOwogIEVESVRfQ0xJRU5UX0lEPWlkOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjX25hbWUnKS52YWx1ZT1jbC5uYW1lfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19jb21wYW55JykudmFsdWU9Y2wuY29tcGFueXx8Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfZWlrJykudmFsdWU9Y2wuZWlrfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY192YXQnKS52YWx1ZT1jbC52YXRfbnVtYmVyfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19lbWFpbCcpLnZhbHVlPWNsLmVtYWlsfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19waG9uZScpLnZhbHVlPWNsLnBob25lfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19hZGRyZXNzJykudmFsdWU9Y2wuYWRkcmVzc3x8Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfY2l0eScpLnZhbHVlPWNsLmNpdHl8fCcnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjX21vbCcpLnZhbHVlPWNsLm1vbHx8Jyc7CiAgb3Blbk1vZGFsKCdjbGllbnRNb2RhbCcpOwp9CmFzeW5jIGZ1bmN0aW9uIHNhdmVDbGllbnQoKXsKICB2YXIgcGF5bG9hZD17CiAgICBpZDpFRElUX0NMSUVOVF9JRHx8dW5kZWZpbmVkLAogICAgbmFtZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19uYW1lJykudmFsdWUsIGNvbXBhbnk6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfY29tcGFueScpLnZhbHVlLAogICAgZWlrOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjX2VpaycpLnZhbHVlLCB2YXRfbnVtYmVyOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjX3ZhdCcpLnZhbHVlLAogICAgZW1haWw6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfZW1haWwnKS52YWx1ZSwgcGhvbmU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfcGhvbmUnKS52YWx1ZSwKICAgIGFkZHJlc3M6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfYWRkcmVzcycpLnZhbHVlLCBjaXR5OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjX2NpdHknKS52YWx1ZSwKICAgIG1vbDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19tb2wnKS52YWx1ZQogIH07CiAgdmFyIHI9YXdhaXQgYWYoJ2NsaWVudHMnLCdQT1NUJyxwYXlsb2FkKTsKICBpZihyKXsgdG9hc3QoJ9Ca0LvQuNC10L3RgtGK0YIg0LUg0LfQsNC/0LDQt9C10L0nKTsgY2xvc2VNb2RhbCgnY2xpZW50TW9kYWwnKTsgcmVuZGVyQ2xpZW50cyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudCcpKTsgfQp9CmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNsaWVudChpZCl7CiAgaWYoIWNvbmZpcm0oJ9CY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC60LvQuNC10L3RgtCwPycpKXJldHVybjsKICBhd2FpdCBhZignY2xpZW50cycsJ0RFTEVURScsJycsICcmaWQ9JytpZCk7CiAgcmVuZGVyQ2xpZW50cyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudCcpKTsKfQoKLy8g4pSA4pSAIFJFQ1VSUklORyDilIDilIAKYXN5bmMgZnVuY3Rpb24gcmVuZGVyUmVjdXJyaW5nKGMpewogIHZhciByb3dzPWF3YWl0IGFmKCdyZWN1cnJpbmcnKXx8W107CiAgYXdhaXQgZW5zdXJlQ2xpZW50cygpOwogIHZhciBjcm9uVXJsPUFQSSsnP2FjdGlvbj1ydW5fcmVjdXJyaW5nJmtleT13ZWJ0cml4aWFfY3Jvbl8yMDI2JzsKICB2YXIgaHRtbD0nPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0J/QtdGA0LjQvtC00LjRh9C90Lgg0YTQsNC60YLRg9GA0Lg8L2Rpdj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ibmV3UmVjdXJyaW5nKCkiPisg0J3QvtCy0L4g0L/RgNCw0LLQuNC70L48L2J1dHRvbj48L2Rpdj4nOwogIGh0bWwrPSc8cCBjbGFzcz0ic21hbGwiPtCX0LAg0LDQstGC0L7QvNCw0YLQuNGH0L3QviDQs9C10L3QtdGA0LjRgNCw0L3QtSDQtNC+0LHQsNCy0LggY1BhbmVsIENyb24gSm9iICjQvdCw0L/RgC4g0L3QsCAxLdCy0L4g0YfQuNGB0LvQviDQstGB0LXQutC4INC80LXRgdC10YYpLCDQutC+0LnRgtC+INC+0YLQstCw0YDRjzogPGNvZGU+Jytjcm9uVXJsKyc8L2NvZGU+PC9wPic7CiAgaHRtbCs9Jzx0YWJsZT48dGhlYWQ+PHRyPjx0aD7QmtC70LjQtdC90YI8L3RoPjx0aD7QotC40L88L3RoPjx0aD7QmNC90YLQtdGA0LLQsNC7PC90aD48dGg+0KHQu9C10LTQstCw0YnQviDQs9C10L3QtdGA0LjRgNCw0L3QtTwvdGg+PHRoPtCQ0LrRgtC40LLQvdC+PC90aD48dGg+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgcm93cy5mb3JFYWNoKHI9PnsKICAgIHZhciBjbD1DTElFTlRTLmZpbmQoeD0+eC5pZD09PXIuY2xpZW50X2lkKTsKICAgIGh0bWwrPSc8dHI+PHRkPicrKGNsPyhjbC5jb21wYW55fHxjbC5uYW1lKTon4oCUJykrJzwvdGQ+PHRkPicrKFRZUEVfTEFCRUxbci5kb2NfdHlwZV18fHIuZG9jX3R5cGUpKyc8L3RkPjx0ZD4nK3IuaW50ZXJ2YWxfdHlwZSsnPC90ZD48dGQ+JytyLm5leHRfcnVuX2RhdGUrJzwvdGQ+PHRkPicrKHIuYWN0aXZlPT0xPyfQlNCwJzon0J3QtScpKyc8L3RkPicrCiAgICAgICc8dGQgY2xhc3M9ImFjdGlvbnMiPjxzcGFuIGNsYXNzPSJpY29uYnRuIiBvbmNsaWNrPSJkZWxldGVSZWN1cnJpbmcoXCcnK3IuaWQrJ1wnKSI+8J+XkTwvc3Bhbj48L3RkPjwvdHI+JzsKICB9KTsKICBpZighcm93cy5sZW5ndGgpIGh0bWwrPSc8dHI+PHRkIGNvbHNwYW49IjYiIGNsYXNzPSJzbWFsbCI+0J3Rj9C80LAg0L/RgNCw0LLQuNC70LA8L3RkPjwvdHI+JzsKICBodG1sKz0nPC90Ym9keT48L3RhYmxlPjwvZGl2Pic7CiAgYy5pbm5lckhUTUw9aHRtbDsKfQphc3luYyBmdW5jdGlvbiBkZWxldGVSZWN1cnJpbmcoaWQpeyBpZighY29uZmlybSgn0JjQt9GC0YDQuNC5INC/0YDQsNCy0LjQu9C+0YLQvj8nKSlyZXR1cm47IGF3YWl0IGFmKCdyZWN1cnJpbmcnLCdERUxFVEUnLCcnLCAnJmlkPScraWQpOyByZW5kZXJSZWN1cnJpbmcoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnQnKSk7IH0KYXN5bmMgZnVuY3Rpb24gbmV3UmVjdXJyaW5nKCl7CiAgdmFyIGNsPXByb21wdCgnSUQg0L3QsCDQutC70LjQtdC90YIgKNCy0LjQtiDQsiDRgNCw0LfQtNC10Lsg0JrQu9C40LXQvdGC0LgpIOKAlCDQuNC70Lgg0L7RgdGC0LDQstC4INC/0YDQsNC30L3QvjonKTsKICB2YXIgaW50ZXJ2YWw9cHJvbXB0KCfQmNC90YLQtdGA0LLQsNC7OiBtb250aGx5IC8gcXVhcnRlcmx5IC8geWVhcmx5JywnbW9udGhseScpOwogIHZhciBuZXh0PXByb21wdCgn0JTQsNGC0LAg0L3QsCDRgdC70LXQtNCy0LDRidC+INCz0LXQvdC10YDQuNGA0LDQvdC1IChZWVlZLU1NLUREKTonLCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCkpOwogIHZhciBpdGVtTmFtZT1wcm9tcHQoJ9Cd0LDQuNC80LXQvdC+0LLQsNC90LjQtSDQvdCwINGD0YHQu9GD0LPQsNGC0LA6Jywn0JDQsdC+0L3QsNC80LXQvdGC0L3QsCDQv9C+0LTQtNGA0YrQttC60LAnKTsKICB2YXIgcHJpY2U9cHJvbXB0KCfQptC10L3QsCAo0LHQtdC3INCU0JTQoSk6JywnMTAwJyk7CiAgdmFyIHI9YXdhaXQgYWYoJ3JlY3VycmluZycsJ1BPU1QnLHtjbGllbnRfaWQ6Y2wsZG9jX3R5cGU6J2ludm9pY2UnLGludGVydmFsX3R5cGU6aW50ZXJ2YWwsbmV4dF9ydW5fZGF0ZTpuZXh0LAogICAgaXRlbXM6W3tuYW1lOml0ZW1OYW1lLHF0eToxLHVuaXQ6J9Cx0YAuJyxwcmljZTpwYXJzZUZsb2F0KHByaWNlKXx8MH1dLHZhdF9wZXJjZW50OjIwLGFjdGl2ZToxfSk7CiAgaWYocil7IHRvYXN0KCfQn9GA0LDQstC40LvQvtGC0L4g0LUg0YHRitC30LTQsNC00LXQvdC+Jyk7IHJlbmRlclJlY3VycmluZyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudCcpKTsgfQp9CgovLyDilIDilIAgUkVQT1JUUyDilIDilIAKYXN5bmMgZnVuY3Rpb24gcmVuZGVyUmVwb3J0cyhjKXsKICB2YXIgc3RhdHM9YXdhaXQgYWYoJ2ludm9pY2Vfc3RhdHMnKTsKICBpZighc3RhdHMpe2MuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJwYW5lbCI+0J3Rj9C80LAg0LTQsNC90L3QuDwvZGl2Pic7cmV0dXJuO30KICB2YXIgaHRtbD0nPGRpdiBjbGFzcz0iZ3JpZDIiPic7CiAgaHRtbCs9JzxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCf0L4g0YLQuNC/INC00L7QutGD0LzQtdC90YI8L2Rpdj48L2Rpdj48dGFibGU+PHRoZWFkPjx0cj48dGg+0KLQuNC/PC90aD48dGg+0JHRgNC+0Lk8L3RoPjx0aD7QodGD0LzQsDwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT4nOwogIChzdGF0cy5ieV90eXBlfHxbXSkuZm9yRWFjaCh0PT5odG1sKz0nPHRyPjx0ZD4nKyhUWVBFX0xBQkVMW3QudHlwZV18fHQudHlwZSkrJzwvdGQ+PHRkPicrdC5jbnQrJzwvdGQ+PHRkPicrbW9uZXkodC50b3RhbCkrJzwvdGQ+PC90cj4nKTsKICBodG1sKz0nPC90Ym9keT48L3RhYmxlPjwvZGl2Pic7CiAgaHRtbCs9JzxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCi0L7QvyDQutC70LjQtdC90YLQuDwvZGl2PjwvZGl2Pjx0YWJsZT48dGhlYWQ+PHRyPjx0aD7QmtC70LjQtdC90YI8L3RoPjx0aD7QpNCw0LrRgtGD0YDQuDwvdGg+PHRoPtCh0YPQvNCwPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgKHN0YXRzLmJ5X2NsaWVudHx8W10pLmZvckVhY2goY2M9Pmh0bWwrPSc8dHI+PHRkPicrY2MubmFtZSsnPC90ZD48dGQ+JytjYy5jbnQrJzwvdGQ+PHRkPicrbW9uZXkoY2MudG90YWwpKyc8L3RkPjwvdHI+Jyk7CiAgaHRtbCs9JzwvdGJvZHk+PC90YWJsZT48L2Rpdj4nOwogIGh0bWwrPSc8L2Rpdj4nOwogIGMuaW5uZXJIVE1MPWh0bWw7Cn0KCi8vIOKUgOKUgCBTRVRUSU5HUyDilIDilIAKYXN5bmMgZnVuY3Rpb24gcmVuZGVyU2V0dGluZ3MoYyl7CiAgdmFyIHM9YXdhaXQgYWYoJ2NvbXBhbnlfc2V0dGluZ3MnKXx8e307CiAgdmFyIGh0bWw9JzxkaXYgY2xhc3M9ImdyaWQyIj4nOwogIGh0bWwrPSc8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7Qn9GA0L7RhNC40Lsg0L3QsCDRhNC40YDQvNCw0YLQsDwvZGl2PjwvZGl2PicrCiAgICBmbGQoJ3NfbmFtZScsJ9CY0LzQtSDQvdCwINGE0LjRgNC80LDRgtCwJyxzLm5hbWUpKwogICAgcm93MihmbGQoJ3NfZWlrJywn0JXQmNCaL9CR0YPQu9GB0YLQsNGCJyxzLmVpayksZmxkKCdzX3ZhdCcsJ9CU0JTQoSDihJYnLHMudmF0X251bWJlcikpKwogICAgZmxkKCdzX2FkZHJlc3MnLCfQkNC00YDQtdGBJyxzLmFkZHJlc3MpKwogICAgcm93MihmbGQoJ3NfY2l0eScsJ9CT0YDQsNC0JyxzLmNpdHkpLGZsZCgnc19tb2wnLCfQnNCe0JsnLHMubW9sKSkrCiAgICByb3cyKGZsZCgnc19pYmFuJywnSUJBTicscy5pYmFuKSxmbGQoJ3NfYmljJywnQklDL1NXSUZUJyxzLmJpYykpKwogICAgZmxkKCdzX2JhbmsnLCfQkdCw0L3QutCwJyxzLmJhbmtfbmFtZSkrCiAgICByb3cyKGZsZCgnc19kZWZ2YXQnLCfQlNCU0KEgJSDQv9C+INC/0L7QtNGA0LDQt9Cx0LjRgNCw0L3QtScscy5kZWZhdWx0X3ZhdF9wZXJjZW50fHwyMCwnbnVtYmVyJyksc2VsQ3VyKCdzX2N1cnJlbmN5JyxzLmN1cnJlbmN5KSkrCiAgICAnPC9kaXY+JzsKICBodG1sKz0nPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0J3QvtC80LXRgNCw0YbQuNGPICjQv9GA0LXQtNGB0YLQsNCy0LrQsCDQutGK0Lwg4oSWINC30LAg0LLRgdC10LrQuCDRgtC40L8pPC9kaXY+PC9kaXY+JysKICAgIHJvdzIoZmxkKCdzX3ByZWZfcHJvZm9ybWEnLCfQn9GA0L7RhNC+0YDQvNCwJyxzLnByZWZpeF9wcm9mb3JtYSksZmxkKCdzX3ByZWZfaW52b2ljZScsJ9Ck0LDQutGC0YPRgNCwJyxzLnByZWZpeF9pbnZvaWNlKSkrCiAgICByb3cyKGZsZCgnc19wcmVmX2NyZWRpdCcsJ9Ca0YDQtdC00LjRgtC90L4g0LjQt9CyLicscy5wcmVmaXhfY3JlZGl0X25vdGUpLGZsZCgnc19wcmVmX2RlYml0Jywn0JTQtdCx0LjRgtC90L4g0LjQt9CyLicscy5wcmVmaXhfZGViaXRfbm90ZSkpKwogICAgZmxkKCdzX3ByZWZfb2ZmZXInLCfQntGE0LXRgNGC0LAnLHMucHJlZml4X29mZmVyKSsKICAgICc8cCBjbGFzcz0ic21hbGwiIHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+0J3QvtC80LXRgNGK0YIg0LUgMTAt0YbQuNGE0YDQtdC9LCDQsNCy0YLQvtC80LDRgtC40YfQvdC+INC90LDRgNCw0YHRgtCy0LDRiSDQv9C+0L7RgtC00LXQu9C90L4g0LfQsCDQstGB0LXQutC4INGC0LjQvyDQuCDQs9C+0LTQuNC90LAgKNC90LDQv9GALiAwMDAwMDAwMTE0KSwg0LrQsNC60YLQviDQsiDQv9GA0LjQvNC10YDQvdCw0YLQsCDRgtC4INC/0YDQvtGE0L7RgNC80LAuPC9wPicrCiAgICAnPC9kaXY+JzsKICBodG1sKz0nPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0JjQvNC10LnQuyDRgdGK0YDQstGK0YAgKFNNVFAg4oCUINC30LAg0LjQt9C/0YDQsNGJ0LDQvdC1INC90LAg0LTQvtC60YPQvNC10L3RgtC4KTwvZGl2PjwvZGl2PicrCiAgICByb3cyKGZsZCgnc19zbXRwX2hvc3QnLCdTTVRQINGF0L7RgdGCJyxzLnNtdHBfaG9zdCksZmxkKCdzX3NtdHBfcG9ydCcsJ9Cf0L7RgNGCJyxzLnNtdHBfcG9ydHx8NTg3LCdudW1iZXInKSkrCiAgICByb3cyKGZsZCgnc19zbXRwX3VzZXInLCfQn9C+0YLRgNC10LHQuNGC0LXQuycscy5zbXRwX3VzZXIpLGZsZCgnc19zbXRwX3Bhc3MnLCfQn9Cw0YDQvtC70LAnLHMuc210cF9wYXNzLCdwYXNzd29yZCcpKSsKICAgIHJvdzIoc2VsU2VjdXJlKCdzX3NtdHBfc2VjdXJlJyxzLnNtdHBfc2VjdXJlKSxmbGQoJ3Nfc210cF9mcm9tX2VtYWlsJywnRnJvbSDQuNC80LXQudC7JyxzLnNtdHBfZnJvbV9lbWFpbCkpKwogICAgZmxkKCdzX3NtdHBfZnJvbV9uYW1lJywnRnJvbSDQuNC80LUnLHMuc210cF9mcm9tX25hbWUpKwogICAgJzwvZGl2Pic7CiAgaHRtbCs9JzwvZGl2PjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzYXZlU2V0dGluZ3MoKSI+8J+SviDQl9Cw0L/QsNC30Lgg0L3QsNGB0YLRgNC+0LnQutC40YLQtTwvYnV0dG9uPic7CiAgYy5pbm5lckhUTUw9aHRtbDsKfQpmdW5jdGlvbiBmbGQoaWQsbGFiZWwsdmFsLHR5cGUpeyByZXR1cm4gJzxsYWJlbD4nK2xhYmVsKyc8L2xhYmVsPjxpbnB1dCBpZD0iJytpZCsnIiB0eXBlPSInKyh0eXBlfHwndGV4dCcpKyciIHZhbHVlPSInKyh2YWw9PW51bGw/Jyc6U3RyaW5nKHZhbCkucmVwbGFjZSgvIi9nLCcmcXVvdDsnKSkrJyI+JzsgfQpmdW5jdGlvbiByb3cyKGEsYil7IHJldHVybiAnPGRpdiBjbGFzcz0icm93MiI+PGRpdj4nK2ErJzwvZGl2PjxkaXY+JytiKyc8L2Rpdj48L2Rpdj4nOyB9CmZ1bmN0aW9uIHNlbEN1cihpZCx2YWwpeyByZXR1cm4gJzxsYWJlbD7QktCw0LvRg9GC0LA8L2xhYmVsPjxzZWxlY3QgaWQ9IicraWQrJyI+PG9wdGlvbicrKHZhbD09PSdFVVInPycgc2VsZWN0ZWQnOicnKSsnPkVVUjwvb3B0aW9uPjxvcHRpb24nKyh2YWw9PT0nQkdOJz8nIHNlbGVjdGVkJzonJykrJz5CR048L29wdGlvbj48L3NlbGVjdD4nOyB9CmZ1bmN0aW9uIHNlbFNlY3VyZShpZCx2YWwpeyByZXR1cm4gJzxsYWJlbD7QmtGA0LjQv9GC0LjRgNCw0L3QtTwvbGFiZWw+PHNlbGVjdCBpZD0iJytpZCsnIj48b3B0aW9uIHZhbHVlPSJ0bHMiJysodmFsPT09J3Rscyc/JyBzZWxlY3RlZCc6JycpKyc+VExTICg1ODcpPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ic3NsIicrKHZhbD09PSdzc2wnPycgc2VsZWN0ZWQnOicnKSsnPlNTTCAoNDY1KTwvb3B0aW9uPjwvc2VsZWN0Pic7IH0KCmFzeW5jIGZ1bmN0aW9uIHNhdmVTZXR0aW5ncygpewogIHZhciBwYXlsb2FkPXsKICAgIG5hbWU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfbmFtZScpLnZhbHVlLCBlaWs6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfZWlrJykudmFsdWUsCiAgICB2YXRfbnVtYmVyOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX3ZhdCcpLnZhbHVlLCBhZGRyZXNzOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX2FkZHJlc3MnKS52YWx1ZSwKICAgIGNpdHk6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfY2l0eScpLnZhbHVlLCBtb2w6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfbW9sJykudmFsdWUsCiAgICBpYmFuOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX2liYW4nKS52YWx1ZSwgYmljOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX2JpYycpLnZhbHVlLAogICAgYmFua19uYW1lOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX2JhbmsnKS52YWx1ZSwgZGVmYXVsdF92YXRfcGVyY2VudDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc19kZWZ2YXQnKS52YWx1ZSwKICAgIGN1cnJlbmN5OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX2N1cnJlbmN5JykudmFsdWUsCiAgICBwcmVmaXhfcHJvZm9ybWE6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfcHJlZl9wcm9mb3JtYScpLnZhbHVlLCBwcmVmaXhfaW52b2ljZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc19wcmVmX2ludm9pY2UnKS52YWx1ZSwKICAgIHByZWZpeF9jcmVkaXRfbm90ZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc19wcmVmX2NyZWRpdCcpLnZhbHVlLCBwcmVmaXhfZGViaXRfbm90ZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc19wcmVmX2RlYml0JykudmFsdWUsCiAgICBwcmVmaXhfb2ZmZXI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfcHJlZl9vZmZlcicpLnZhbHVlLCBwcmVmaXhfcXVvdGU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NfcHJlZl9vZmZlcicpLnZhbHVlLAogICAgc210cF9ob3N0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX3NtdHBfaG9zdCcpLnZhbHVlLCBzbXRwX3BvcnQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nfc210cF9wb3J0JykudmFsdWUsCiAgICBzbXRwX3VzZXI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nfc210cF91c2VyJykudmFsdWUsIHNtdHBfcGFzczpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc19zbXRwX3Bhc3MnKS52YWx1ZSwKICAgIHNtdHBfc2VjdXJlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX3NtdHBfc2VjdXJlJykudmFsdWUsIHNtdHBfZnJvbV9lbWFpbDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc19zbXRwX2Zyb21fZW1haWwnKS52YWx1ZSwKICAgIHNtdHBfZnJvbV9uYW1lOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzX3NtdHBfZnJvbV9uYW1lJykudmFsdWUKICB9OwogIHZhciByPWF3YWl0IGFmKCdjb21wYW55X3NldHRpbmdzJywnUE9TVCcscGF5bG9hZCk7CiAgaWYocikgdG9hc3QoJ9Cd0LDRgdGC0YDQvtC50LrQuNGC0LUg0YHQsCDQt9Cw0L/QsNC30LXQvdC4Jyk7IGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgScpOwp9Cgphc3luYyBmdW5jdGlvbiBtb2R1bGVHdWFyZChrZXksbGFiZWwpewogIHRyeXsKICAgIGF3YWl0IHN5bmNMaWNlbnNlRnJvbU1hc3RlcigpOwogICAgdmFyIHI9YXdhaXQgYWYoJ2JyYW5kaW5nX3NldHRpbmdzJyk7CiAgICBpZihyICYmIChyLmxpY2Vuc2Vfc3RhdGU9PT0nbG9ja2VkJ3x8ci5saWNlbnNlX3N0YXRlPT09J2ludmFsaWQnKSl7CiAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6NDgwcHg7bWFyZ2luOjgwcHggYXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtmb250LWZhbWlseTpzYW5zLXNlcmlmO2NvbG9yOiM0YTRhNmEiPicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O21hcmdpbi1ib3R0b206MTJweCI+8J+UkjwvZGl2PjxoMj7QpdGK0LHRitGCINC1INC30LDQutC70Y7Rh9C10L08L2gyPicrCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTNweCI+Jysoci5saWNlbnNlX21lc3NhZ2V8fCfQm9C40YbQtdC90LfRitGCINC90LUg0LUg0LDQutGC0LjQstC10L0uJykrJzwvcD48L2Rpdj4nOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZihyICYmIHIubW9kdWxlc19lbmFibGVkICYmIHIubW9kdWxlc19lbmFibGVkLmhhc093blByb3BlcnR5KGtleSkgJiYgIXIubW9kdWxlc19lbmFibGVkW2tleV0pewogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjQ4MHB4O21hcmdpbjo4MHB4IGF1dG87dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtjb2xvcjojNGE0YTZhIj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6NDBweDttYXJnaW4tYm90dG9tOjEycHgiPvCflJI8L2Rpdj48aDI+JytsYWJlbCsnINC1INC40LfQutC70Y7Rh9C10L08L2gyPicrCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTNweCI+0KLQvtC30Lgg0LzQvtC00YPQuyDQtSDQuNC30LrQu9GO0YfQtdC9INC30LAg0YLQsNC30Lgg0LjQvdGB0YLQsNC70LDRhtC40Y8uINCh0LLRitGA0LbQuCDRgdC1INGBINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuPC9wPicrCiAgICAgICAgJzxhIGhyZWY9ImluZGV4Lmh0bWwiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjE2cHg7Y29sb3I6IzZjNjNmZiI+4oaQINCe0LHRgNCw0YLQvdC+INC60YrQvCBIdWI8L2E+PC9kaXY+JzsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH1jYXRjaChlKXt9CiAgcmV0dXJuIHRydWU7Cn0KYXN5bmMgZnVuY3Rpb24gc3luY0xpY2Vuc2VGcm9tTWFzdGVyKCl7CiAgdHJ5ewogICAgdmFyIGM9YXdhaXQgYWYoJ2xpY2Vuc2VfY2xpZW50X2NvbmZpZycpOwogICAgaWYoIWN8fCFjLnZlcmlmeV91cmwpcmV0dXJuOwogICAgdmFyIHJyPWF3YWl0IGZldGNoKGMudmVyaWZ5X3VybCx7Y2FjaGU6J25vLXN0b3JlJyxtb2RlOidjb3JzJ30pOwogICAgdmFyIHBheWxvYWQ9YXdhaXQgcnIuanNvbigpOwogICAgaWYocGF5bG9hZCYmcGF5bG9hZC5zdGF0ZSkgYXdhaXQgYWYoJ2xpY2Vuc2Vfc3luYycsJ1BPU1QnLHtwYXlsb2FkOnBheWxvYWR9KTsKICB9Y2F0Y2goZSl7fQp9CgpyZW5kZXJUYWJzKCk7Cm1vZHVsZUd1YXJkKCdpbnZvaWNpbmcnLCfQpNCw0LrRgtGD0YDQuNGA0LDQvdC10YLQvicpLnRoZW4ob2s9PnsgaWYob2spIHJlbmRlckNvbnRlbnQoKTsgfSk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K', 'licenses/client/guard.php' => 'PD9waHAKLyoqCiAqIENMSUVOVCBHVUFSRCDigJQgaW5jbHVkZSBhdCB0aGUgdG9wIG9mIGEgY2xpZW50IGh1YidzIHByb3RlY3RlZCBwYWdlcy4KICoKICogICByZXF1aXJlIF9fRElSX18uJy9jbGllbnQvZ3VhcmQucGhwJzsKICogICB3dF9ndWFyZCgpOyAgICAgICAgICAgICAgIC8vIGxvY2tzIHRoZSB3aG9sZSBwYWdlIGlmIGxpY2Vuc2UgZXhwaXJlZCBwYXN0IGdyYWNlCiAqICAgaWYgKHd0X21vZHVsZSgnd2F5YmlsbHMnKSkgeyAuLi4gfSAgIC8vIHBlciBwYWlkLW1vZHVsZSBjaGVjawogKgogKiBJdCBjYWxscyB0aGUgbWFzdGVyJ3MgbGljZW5zZS92ZXJpZnkucGhwIG9uIGV2ZXJ5IHJlcXVlc3QgYW5kIGtlZXBzIHRoZQogKiBsYXRlc3QgcmVzcG9uc2Ugb25seSBhcyBhIGZhbGxiYWNrIGlmIHRoZSBtYXN0ZXIgaXMgdGVtcG9yYXJpbHkgdW5yZWFjaGFibGUuCiAqLwpyZXF1aXJlX29uY2UgZGlybmFtZShfX0RJUl9fKSAuICcvbGliL2RiLnBocCc7CgpmdW5jdGlvbiB3dF9ndWFyZF9zZXR0aW5ncygpOiBhcnJheSB7CiAgICBzdGF0aWMgJHMgPSBudWxsOwogICAgaWYgKCRzICE9PSBudWxsKSByZXR1cm4gJHM7CiAgICB0cnkgewogICAgICAgICRzID0gd3RfZGIoKS0+cXVlcnkoIlNFTEVDVCBtYXN0ZXJfdXJsLCBsaWNlbnNlX2tleSwgcHJvZHVjdF9uYW1lIEZST00gc2V0dGluZ3MgV0hFUkUgaWQ9MSIpLT5mZXRjaCgpID86IFtdOwogICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7ICRzID0gW107IH0KICAgIHJldHVybiAkczsKfQoKZnVuY3Rpb24gd3RfZ3VhcmRfbWFzdGVyX3VybCgpOiBzdHJpbmcgewogICAgJGNmZyA9IHd0X2d1YXJkX3NldHRpbmdzKCk7CiAgICAkbWFzdGVyID0gdHJpbSgkY2ZnWydtYXN0ZXJfdXJsJ10gPz8gJycpOwogICAgaWYgKCRtYXN0ZXIgPT09ICcnKSByZXR1cm4gJyc7CiAgICBpZiAoIXByZWdfbWF0Y2goJ35eaHR0cHM/Oi8vfmknLCAkbWFzdGVyKSkgJG1hc3RlciA9ICdodHRwczovLycgLiAkbWFzdGVyOwogICAgJG1hc3RlciA9IHByZWdfcmVwbGFjZSgnfi9hZG1pbig/Oi8uKik/JH4nLCAnJywgJG1hc3Rlcik7CiAgICAkbWFzdGVyID0gcHJlZ19yZXBsYWNlKCd+L2xpY2Vuc2UvdmVyaWZ5XC5waHAkficsICcnLCAkbWFzdGVyKTsKICAgICRtYXN0ZXIgPSBwcmVnX3JlcGxhY2UoJ34vbGljZW5zZXMvKD86YWRtaW58bGljZW5zZSkoPzovLiopPyR+JywgJy9saWNlbnNlcycsICRtYXN0ZXIpOwogICAgJG1hc3RlciA9IHJ0cmltKCRtYXN0ZXIsICcvJyk7CiAgICBpZiAoIXByZWdfbWF0Y2goJ34vbGljZW5zZXMkficsICRtYXN0ZXIpKSAkbWFzdGVyIC49ICcvbGljZW5zZXMnOwogICAgcmV0dXJuICRtYXN0ZXI7Cn0KCmZ1bmN0aW9uIHd0X2d1YXJkX2NhY2hlX2ZpbGUoKTogc3RyaW5nIHsKICAgIHJldHVybiBkaXJuYW1lKF9fRElSX18pIC4gJy9jYWNoZV9saWNlbnNlLmpzb24nOwp9CgpmdW5jdGlvbiB3dF9ndWFyZF92ZXJpZnlfdXJsKCk6IHN0cmluZyB7CiAgICAkY2ZnID0gd3RfZ3VhcmRfc2V0dGluZ3MoKTsKICAgICRtYXN0ZXIgPSB3dF9ndWFyZF9tYXN0ZXJfdXJsKCk7CiAgICAka2V5ID0gJGNmZ1snbGljZW5zZV9rZXknXSA/PyAnJzsKICAgIGlmICghJG1hc3RlciB8fCAhJGtleSkgcmV0dXJuICcnOwogICAgJHNjaGVtZSA9ICghZW1wdHkoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddICE9PSAnb2ZmJykgPyAnaHR0cHMnIDogJ2h0dHAnOwogICAgcmV0dXJuICRtYXN0ZXIgLiAnL2xpY2Vuc2UvdmVyaWZ5LnBocD9rZXk9JyAuIHVybGVuY29kZSgka2V5KQogICAgICAgIC4gJyZkb21haW49JyAuIHVybGVuY29kZSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10gPz8gJycpCiAgICAgICAgLiAnJnNjaGVtZT0nIC4gdXJsZW5jb2RlKCRzY2hlbWUpCiAgICAgICAgLiAnJnRzPScgLiB0aW1lKCk7Cn0KCmZ1bmN0aW9uIHd0X2d1YXJkX3NpZ25hYmxlKGFycmF5ICRkYXRhKTogc3RyaW5nIHsKICAgIHVuc2V0KCRkYXRhWydzaWduYXR1cmUnXSk7CiAgICBrc29ydCgkZGF0YSk7CiAgICByZXR1cm4ganNvbl9lbmNvZGUoJGRhdGEsIEpTT05fVU5FU0NBUEVEX1VOSUNPREUgfCBKU09OX1VORVNDQVBFRF9TTEFTSEVTKTsKfQoKZnVuY3Rpb24gd3RfZ3VhcmRfdmFsaWRfc2lnbmF0dXJlKGFycmF5ICRkYXRhKTogYm9vbCB7CiAgICAkY2ZnID0gd3RfZ3VhcmRfc2V0dGluZ3MoKTsKICAgICRrZXkgPSAkY2ZnWydsaWNlbnNlX2tleSddID8/ICcnOwogICAgaWYgKCEka2V5IHx8IGVtcHR5KCRkYXRhWydzaWduYXR1cmUnXSkpIHJldHVybiBmYWxzZTsKICAgICRzaWcgPSAoc3RyaW5nKSRkYXRhWydzaWduYXR1cmUnXTsKICAgICRjYWxjID0gaGFzaF9obWFjKCdzaGEyNTYnLCB3dF9ndWFyZF9zaWduYWJsZSgkZGF0YSksICRrZXkpOwogICAgcmV0dXJuIGhhc2hfZXF1YWxzKCRjYWxjLCAkc2lnKTsKfQoKZnVuY3Rpb24gd3RfZ3VhcmRfc3RvcmVfc3RhdHVzKGFycmF5ICRkYXRhKTogYm9vbCB7CiAgICBpZiAoIWlzc2V0KCRkYXRhWydzdGF0ZSddKSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGlzc2V0KCRkYXRhWydzaWduYXR1cmUnXSkgJiYgIXd0X2d1YXJkX3ZhbGlkX3NpZ25hdHVyZSgkZGF0YSkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBAZmlsZV9wdXRfY29udGVudHMod3RfZ3VhcmRfY2FjaGVfZmlsZSgpLCBqc29uX2VuY29kZSgkZGF0YSwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSkpICE9PSBmYWxzZTsKfQoKZnVuY3Rpb24gd3RfZ3VhcmRfc3RhdHVzKCk6IGFycmF5IHsKICAgIHN0YXRpYyAkc3RhdHVzID0gbnVsbDsKICAgIGlmICgkc3RhdHVzICE9PSBudWxsKSByZXR1cm4gJHN0YXR1czsKCiAgICAkY2ZnID0gd3RfZ3VhcmRfc2V0dGluZ3MoKTsKICAgICRtYXN0ZXIgPSB3dF9ndWFyZF9tYXN0ZXJfdXJsKCk7CiAgICAka2V5ICAgID0gJGNmZ1snbGljZW5zZV9rZXknXSA/PyAnJzsKICAgIGlmICghJG1hc3RlciB8fCAhJGtleSkgewogICAgICAgIHJldHVybiAkc3RhdHVzID0gWydzdGF0ZScgPT4gJ2FjdGl2ZScsICdtb2R1bGVzJyA9PiBbXSwgJ21lc3NhZ2UnID0+ICfQm9C+0LrQsNC70LXQvSDRgNC10LbQuNC8ICjQsdC10Lcg0LvQuNGG0LXQvdC3KS4nLCAnb2ZmbGluZScgPT4gdHJ1ZV07CiAgICB9CgogICAgJGNhY2hlRmlsZSA9IHd0X2d1YXJkX2NhY2hlX2ZpbGUoKTsKICAgICRjYWNoZWQgPSBudWxsOwogICAgaWYgKGlzX2ZpbGUoJGNhY2hlRmlsZSkpIHsKICAgICAgICAkY2FjaGVkID0ganNvbl9kZWNvZGUoQGZpbGVfZ2V0X2NvbnRlbnRzKCRjYWNoZUZpbGUpLCB0cnVlKTsKICAgICAgICBpZiAoIWlzX2FycmF5KCRjYWNoZWQpIHx8ICFpc3NldCgkY2FjaGVkWydzdGF0ZSddKSkgJGNhY2hlZCA9IG51bGw7CiAgICB9CgogICAgJHVybCA9IHd0X2d1YXJkX3ZlcmlmeV91cmwoKTsKICAgICRyZXNwID0gZmFsc2U7CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSkgewogICAgICAgICRjaCA9IGN1cmxfaW5pdCgkdXJsKTsKICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsIFtDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IHRydWUsIENVUkxPUFRfVElNRU9VVCA9PiA4LAogICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllQRUVSID0+IGZhbHNlLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NUID0+IGZhbHNlXSk7CiAgICAgICAgJHJlc3AgPSBjdXJsX2V4ZWMoJGNoKTsKICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7CiAgICB9IGVsc2VpZiAoaW5pX2dldCgnYWxsb3dfdXJsX2ZvcGVuJykpIHsKICAgICAgICAkcmVzcCA9IEBmaWxlX2dldF9jb250ZW50cygkdXJsLCBmYWxzZSwKICAgICAgICAgICAgc3RyZWFtX2NvbnRleHRfY3JlYXRlKFsnaHR0cCcgPT4gWyd0aW1lb3V0JyA9PiA4XSwgJ3NzbCcgPT4gWyd2ZXJpZnlfcGVlcicgPT4gZmFsc2UsICd2ZXJpZnlfcGVlcl9uYW1lJyA9PiBmYWxzZV1dKSk7CiAgICB9CgogICAgJGRhdGEgPSAkcmVzcCA/IGpzb25fZGVjb2RlKCRyZXNwLCB0cnVlKSA6IG51bGw7CiAgICBpZiAoIWlzX2FycmF5KCRkYXRhKSB8fCAhaXNzZXQoJGRhdGFbJ3N0YXRlJ10pKSB7CiAgICAgICAgLy8gbWFzdGVyIHVucmVhY2hhYmxlIOKGkiBzZXJ2ZSBsYXN0IGtub3duIHN0YXR1cywgZWxzZSBmYWlsIG9wZW4gd2l0aCB3YXJuaW5nCiAgICAgICAgaWYgKCRjYWNoZWQpIHJldHVybiAkc3RhdHVzID0gJGNhY2hlZDsKICAgICAgICByZXR1cm4gJHN0YXR1cyA9IFsnc3RhdGUnID0+ICdhY3RpdmUnLCAnbW9kdWxlcycgPT4gW10sICdvZmZsaW5lJyA9PiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAn0JvQuNGG0LXQvdC30L3QuNGP0YIg0YHRitGA0LLRitGAINC1INCy0YDQtdC80LXQvdC90L4g0L3QtdC00L7RgdGC0YrQv9C10L0uJ107CiAgICB9CiAgICB3dF9ndWFyZF9zdG9yZV9zdGF0dXMoJGRhdGEpOwogICAgcmV0dXJuICRzdGF0dXMgPSAkZGF0YTsKfQoKZnVuY3Rpb24gd3Rfc3RhdGUoKTogc3RyaW5nICAgeyByZXR1cm4gd3RfZ3VhcmRfc3RhdHVzKClbJ3N0YXRlJ10gPz8gJ2FjdGl2ZSc7IH0KZnVuY3Rpb24gd3RfbW9kdWxlKHN0cmluZyAkbSk6IGJvb2wgewogICAgJG1vZHMgPSB3dF9ndWFyZF9zdGF0dXMoKVsnbW9kdWxlcyddID8/IFtdOwogICAgcmV0dXJuICFlbXB0eSgkbW9kc1skbV0pOwp9CgovKiogUmVuZGVycyBhIGZ1bGwtcGFnZSBsb2NrIGFuZCBzdG9wcyBleGVjdXRpb24gd2hlbiBsaWNlbnNlIGlzIGxvY2tlZC4gKi8KZnVuY3Rpb24gd3RfZ3VhcmQoKTogdm9pZCB7CiAgICAkcyA9IHd0X2d1YXJkX3N0YXR1cygpOwogICAgaWYgKCgkc1snc3RhdGUnXSA/PyAnYWN0aXZlJykgPT09ICdsb2NrZWQnIHx8ICgkc1snc3RhdGUnXSA/PyAnJykgPT09ICdpbnZhbGlkJykgewogICAgICAgIHd0X3JlbmRlcl9sb2NrKCRzKTsKICAgICAgICBleGl0OwogICAgfQp9CgpmdW5jdGlvbiB3dF9yZW5kZXJfbG9jayhhcnJheSAkcyk6IHZvaWQgewogICAgJHByb2R1Y3QgPSBodG1sc3BlY2lhbGNoYXJzKHd0X2d1YXJkX3NldHRpbmdzKClbJ3Byb2R1Y3RfbmFtZSddID8/ICdXZWJ0cml4aWEgSHViJyk7CiAgICAkbXNnID0gaHRtbHNwZWNpYWxjaGFycygkc1snbWVzc2FnZSddID8/ICfQm9C40YbQtdC90LfRitGCINC90LUg0LUg0LDQutGC0LjQstC10L0uJyk7CiAgICBodHRwX3Jlc3BvbnNlX2NvZGUoNDAyKTsKICAgIGVjaG8gJzwhRE9DVFlQRSBodG1sPjxodG1sIGxhbmc9ImJnIj48aGVhZD48bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSI+CiAgICA8dGl0bGU+0JvQuNGG0LXQvdC30YrRgiDQtSDQvdC10LDQutGC0LjQstC10L08L3RpdGxlPgogICAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Tb3JhOndnaHRANDAwOzYwMDs3MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgogICAgPHN0eWxlPgogICAgYm9keXttYXJnaW46MDtmb250LWZhbWlseTpTb3JhLHNhbnMtc2VyaWY7bWluLWhlaWdodDoxMDB2aDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMzAlIDAlLCMxYTEwMzAsIzBhMGExMiA2MCUpO2NvbG9yOiNlOGU4ZjA7cGFkZGluZzoyNHB4fQogICAgLmNhcmR7bWF4LXdpZHRoOjQ0MHB4O3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMSk7CiAgICBib3JkZXItcmFkaXVzOjI0cHg7cGFkZGluZzo0NHB4IDM0cHg7YmFja2Ryb3AtZmlsdGVyOmJsdXIoMjBweCl9CiAgICAuaWN7Zm9udC1zaXplOjUycHg7bWFyZ2luLWJvdHRvbToxNHB4fQogICAgaDF7Zm9udC1zaXplOjIycHg7bWFyZ2luOjAgMCAxMHB4fQogICAgcHtjb2xvcjojYTBhMGMwO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNjttYXJnaW46MCAwIDhweH0KICAgIC5wcm9ke21hcmdpbi10b3A6MjJweDtmb250LXNpemU6MTJweDtjb2xvcjojNmE2YThhO2xldHRlci1zcGFjaW5nOi4xZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfQogICAgPC9zdHlsZT48L2hlYWQ+PGJvZHk+PGRpdiBjbGFzcz0iY2FyZCI+CiAgICA8ZGl2IGNsYXNzPSJpYyI+8J+UkjwvZGl2PjxoMT7QpdGK0LHRitGCINC1INC30LDQutC70Y7Rh9C10L08L2gxPgogICAgPHA+JyAuICRtc2cgLiAnPC9wPgogICAgPHA+0KHQstGK0YDQttC10YLQtSDRgdC1INGBINCy0LDRiNC40Y8g0LTQvtGB0YLQsNCy0YfQuNC6INC30LAg0L/QvtC00L3QvtCy0Y/QstCw0L3QtS48L3A+CiAgICA8ZGl2IGNsYXNzPSJwcm9kIj4nIC4gJHByb2R1Y3QgLiAnPC9kaXY+CiAgICA8L2Rpdj48L2JvZHk+PC9odG1sPic7Cn0K', 'licenses/config.example.php' => 'PD9waHAKLy8g0JrQvtC/0LjRgNCw0Lkg0LrQsNGC0L4gY29uZmlnLnBocCDQuCDQv9C+0L/RitC70L3QuCwg0LDQutC+IGluc3RhbGwucGhwINC90Y/QvNCwINC/0YDQsNCy0LAg0LTQsCDQv9C40YjQtSDRhNCw0LnQuy4KZGVmaW5lKCdEQl9IT1NUJywnbG9jYWxob3N0Jyk7CmRlZmluZSgnREJfTkFNRScsJ2NwYW5lbHVzZXJfaHViJyk7CmRlZmluZSgnREJfVVNFUicsJ2NwYW5lbHVzZXJfaHVidXNlcicpOwpkZWZpbmUoJ0RCX1BBU1MnLCfQv9Cw0YDQvtC70LBf0LfQsF/QsdCw0LfQsNGC0LAnKTsK', 'licenses/lib/core.php' => 'PD9waHAKLyoqCiAqIFdlYnRyaXhpYSBIdWIg4oCUIENvcmU6IHNjaGVtYSwgbGljZW5zaW5nIHN0YXRlIG1hY2hpbmUsIGhlbHBlcnMuCiAqLwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvZGIucGhwJzsKCi8qKiBDcmVhdGUgYWxsIHRhYmxlcyAoaWRlbXBvdGVudCkuICovCmZ1bmN0aW9uIHd0X2luc3RhbGxfc2NoZW1hKFBETyAkcGRvKTogdm9pZCB7CiAgICAkcGRvLT5leGVjKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBzZXR0aW5ncyAoCiAgICAgICAgaWQgSU5UIFBSSU1BUlkgS0VZIERFRkFVTFQgMSwKICAgICAgICByb2xlIFZBUkNIQVIoMTApIERFRkFVTFQgJ2NsaWVudCcsICAgICAgICAgICAgLS0gJ21hc3Rlcicgb3IgJ2NsaWVudCcKICAgICAgICBwcm9kdWN0X25hbWUgVkFSQ0hBUigxNTApIERFRkFVTFQgJ1dlYnRyaXhpYSBIdWInLAogICAgICAgIHByaW1hcnlfY29sb3IgVkFSQ0hBUigyMCkgREVGQVVMVCAnIzZjNjNmZicsCiAgICAgICAgYWRtaW5fcGFzc19oYXNoIFZBUkNIQVIoMjU1KSwKICAgICAgICBtYXN0ZXJfdXJsIFZBUkNIQVIoMjU1KSwgICAgICAgICAgICAgICAgICAgICAgIC0tIChjbGllbnQpIHdoZXJlIHRvIHZlcmlmeSBsaWNlbnNlCiAgICAgICAgbGljZW5zZV9rZXkgVkFSQ0hBUig2MCksICAgICAgICAgICAgICAgICAgICAgICAtLSAoY2xpZW50KSBvd24ga2V5CiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0Iik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcGFydG5lcnMgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICAgICAgICBuYW1lIFZBUkNIQVIoMjAwKSBOT1QgTlVMTCwKICAgICAgICBlbWFpbCBWQVJDSEFSKDIwMCksCiAgICAgICAgcGhvbmUgVkFSQ0hBUig2MCksCiAgICAgICAgY29tcGFueSBWQVJDSEFSKDIwMCksCiAgICAgICAgZWlrIFZBUkNIQVIoNDApLAogICAgICAgIG5vdGVzIFRFWFQsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0Iik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgbGljZW5zZXMgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICAgICAgICBwYXJ0bmVyX2lkIElOVCBOT1QgTlVMTCwKICAgICAgICBsaWNlbnNlX2tleSBWQVJDSEFSKDYwKSBOT1QgTlVMTCBVTklRVUUsCiAgICAgICAgaHViX3VybCBWQVJDSEFSKDI1NSksCgkgICAgICAgIHN0YXR1cyBFTlVNKCdhY3RpdmUnLCdzdXNwZW5kZWQnLCdjYW5jZWxsZWQnKSBERUZBVUxUICdhY3RpdmUnLAoJICAgICAgICBodWJfc2VjdG9yIFZBUkNIQVIoNDApIERFRkFVTFQgJ2FnZW5jeScsCgkgICAgICAgIHBsYW5fbmFtZSBWQVJDSEFSKDEyMCkgREVGQVVMVCAnU3RhbmRhcmQnLAogICAgICAgIGJhc2VfcHJpY2UgREVDSU1BTCgxMCwyKSBERUZBVUxUIDAsCiAgICAgICAgY3VycmVuY3kgVkFSQ0hBUigxMCkgREVGQVVMVCAnRVVSJywKICAgICAgICBiaWxsaW5nX2N5Y2xlIEVOVU0oJ21vbnRobHknLCd5ZWFybHknKSBERUZBVUxUICdtb250aGx5JywKICAgICAgICB2YWxpZF91bnRpbCBEQVRFIE5PVCBOVUxMLAogICAgICAgIGdyYWNlX2RheXMgSU5UIERFRkFVTFQgNywKICAgICAgICBtb2R1bGVzIFRFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBKU09OIHt3YXliaWxsczoxLC4uLn0KICAgICAgICBpc3N1ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgICAgICAgbGFzdF9jaGVja19hdCBUSU1FU1RBTVAgTlVMTCwKICAgICAgICBsYXN0X2NoZWNrX2lwIFZBUkNIQVIoNjApLAogICAgICAgIG5vdGVzIFRFWFQsCiAgICAgICAgSU5ERVgocGFydG5lcl9pZCkKCSAgICApIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQiKTsKCgkgICAgdHJ5IHsgJHBkby0+ZXhlYygiQUxURVIgVEFCTEUgbGljZW5zZXMgQUREIENPTFVNTiBodWJfc2VjdG9yIFZBUkNIQVIoNDApIERFRkFVTFQgJ2FnZW5jeScgQUZURVIgc3RhdHVzIik7IH0gY2F0Y2ggKFRocm93YWJsZSAkZSkge30KCiAgICAkcGRvLT5leGVjKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBpbnZvaWNlcyAoCiAgICAgICAgaWQgSU5UIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLAogICAgICAgIGxpY2Vuc2VfaWQgSU5UIE5PVCBOVUxMLAogICAgICAgIG51bWJlciBWQVJDSEFSKDQwKSwKICAgICAgICBwZXJpb2RfbGFiZWwgVkFSQ0hBUig2MCksCiAgICAgICAgYW1vdW50IERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLAogICAgICAgIGN1cnJlbmN5IFZBUkNIQVIoMTApIERFRkFVTFQgJ0VVUicsCiAgICAgICAgaXNzdWVfZGF0ZSBEQVRFLAogICAgICAgIGR1ZV9kYXRlIERBVEUsCiAgICAgICAgcGFpZCBUSU5ZSU5UKDEpIERFRkFVTFQgMCwKICAgICAgICBwYWlkX2F0IERBVEUgTlVMTCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogICAgICAgIElOREVYKGxpY2Vuc2VfaWQpCiAgICApIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQiKTsKCiAgICAkcGRvLT5leGVjKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBldmVudHMgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICAgICAgICBsaWNlbnNlX2lkIElOVCwKICAgICAgICBraW5kIFZBUkNIQVIoNDApLAogICAgICAgIGRldGFpbCBWQVJDSEFSKDI1NSksCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0Iik7CgogICAgaWYgKChpbnQpJHBkby0+cXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHNldHRpbmdzIiktPmZldGNoQ29sdW1uKCkgPT09IDApIHsKICAgICAgICAkcGRvLT5leGVjKCJJTlNFUlQgSU5UTyBzZXR0aW5ncyAoaWQsIHJvbGUpIFZBTFVFUyAoMSwgJ2NsaWVudCcpIik7CiAgICB9Cn0KCi8qKiBBdmFpbGFibGUgYmlsbGFibGUgbW9kdWxlcyAobGFiZWwgKyBkZWZhdWx0IG1vbnRobHkgcHJpY2UgRVVSKS4gKi8KZnVuY3Rpb24gd3RfbW9kdWxlcygpOiBhcnJheSB7CiAgICByZXR1cm4gWwogICAgICAgICdwcm9qZWN0cycgICAgPT4gWydsYWJlbCcgPT4gJ9Cf0YDQvtC10LrRgtC4JywgICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ2NsaWVudHMnICAgICA9PiBbJ2xhYmVsJyA9PiAn0JrQu9C40LXQvdGC0LgnLCAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAwXSwKICAgICAgICAnZmluYW5jZScgICAgID0+IFsnbGFiZWwnID0+ICfQpNC40L3QsNC90YHQuCcsICAgICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICd0YXNrcycgICAgICAgPT4gWydsYWJlbCcgPT4gJ9CX0LDQtNCw0YfQuCcsICAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAwXSwKICAgICAgICAnb2ZmZXJzJyAgICAgID0+IFsnbGFiZWwnID0+ICfQntGE0LXRgNGC0LgnLCAgICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ2NvbnRyYWN0cycgICA9PiBbJ2xhYmVsJyA9PiAn0JTQvtCz0L7QstC+0YDQuCcsICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ2NhbGVuZGFyJyAgICA9PiBbJ2xhYmVsJyA9PiAn0JrQsNC70LXQvdC00LDRgCcsICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ2hvc3RpbmcnICAgICA9PiBbJ2xhYmVsJyA9PiAn0KXQvtGB0YLQuNC90LPQuCcsICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ3Bhc3N3b3JkcycgICA9PiBbJ2xhYmVsJyA9PiAn0JTQvtGB0YLRitC/0LgnLCAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAwXSwKICAgICAgICAnbm90ZXMnICAgICAgID0+IFsnbGFiZWwnID0+ICfQkdC10LvQtdC20LrQuCcsICAgICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICdyZXBvcnRzJyAgICAgPT4gWydsYWJlbCcgPT4gJ9Ce0YLRh9C10YLQuCcsICAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAwXSwKICAgICAgICAncHJlc2VuY2UnICAgID0+IFsnbGFiZWwnID0+ICfQn9GA0LjRgdGK0YHRgtCy0LjQtScsICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICd0YXJnZXRzJyAgICAgPT4gWydsYWJlbCcgPT4gJ9CU0L3QtdCy0L3QuCDRgtCw0YDQs9C10YLQuCcsICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ3dvcmtyZXBvcnQnICA9PiBbJ2xhYmVsJyA9PiAn0KDQsNCx0L7RgtC10L0g0YDQuNC/0L7RgNGCJywgICAgICAgJ3ByaWNlJyA9PiAwXSwKICAgICAgICAndXNlcnMnICAgICAgID0+IFsnbGFiZWwnID0+ICfQn9C+0YLRgNC10LHQuNGC0LXQu9C4JywgICAgICAgICAgJ3ByaWNlJyA9PiAwXSwKICAgICAgICAnaW52b2ljaW5nJyAgID0+IFsnbGFiZWwnID0+ICfQpNCw0LrRgtGD0YDQuNGA0LDQvdC1JywgICAgICAgICAgJ3ByaWNlJyA9PiA4XSwKICAgICAgICAnaHJfcmVxdWVzdHMnID0+IFsnbGFiZWwnID0+ICfQnNC+0LvQsdC4IChIUiknLCAgICAgICAgICAgJ3ByaWNlJyA9PiAzXSwKICAgICAgICAnd2F5YmlsbHMnICAgID0+IFsnbGFiZWwnID0+ICfQn9GK0YLQvdC4INC70LjRgdGC0L7QstC1JywgICAgICAgICdwcmljZScgPT4gNV0sCiAgICAgICAgJ2FpX3NjYW4nICAgICA9PiBbJ2xhYmVsJyA9PiAnQUkg0YHQutCw0L3QuNGA0LDQvdC1JywgICAgICAgICAncHJpY2UnID0+IDEwXSwKICAgICAgICAnYXVkaXQnICAgICAgID0+IFsnbGFiZWwnID0+ICdBdWRpdCBsb2cnLCAgICAgICAgICAgICdwcmljZScgPT4gNF0sCiAgICBdOwp9CgpmdW5jdGlvbiB3dF9nZW5fa2V5KCk6IHN0cmluZyB7CiAgICAvLyBXVC1YWFhYLVhYWFgtWFhYWC1YWFhYIChyZWFkYWJsZSwgdW5hbWJpZ3VvdXMgY2hhcnMpCiAgICAkYWJjID0gJ0FCQ0RFRkdISktNTlBRUlNUVVZXWFlaMjM0NTY3ODknOwogICAgJHBhcnRzID0gW107CiAgICBmb3IgKCRnID0gMDsgJGcgPCA0OyAkZysrKSB7CiAgICAgICAgJHMgPSAnJzsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCA0OyAkaSsrKSAkcyAuPSAkYWJjW3JhbmRvbV9pbnQoMCwgc3RybGVuKCRhYmMpIC0gMSldOwogICAgICAgICRwYXJ0c1tdID0gJHM7CiAgICB9CiAgICByZXR1cm4gJ1dULScgLiBpbXBsb2RlKCctJywgJHBhcnRzKTsKfQoKZnVuY3Rpb24gd3RfbG9nKFBETyAkcGRvLCA/aW50ICRsaWNlbnNlSWQsIHN0cmluZyAka2luZCwgc3RyaW5nICRkZXRhaWwgPSAnJyk6IHZvaWQgewogICAgJHN0ID0gJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gZXZlbnRzIChsaWNlbnNlX2lkLCBraW5kLCBkZXRhaWwpIFZBTFVFUyAoPyw/LD8pIik7CiAgICAkc3QtPmV4ZWN1dGUoWyRsaWNlbnNlSWQsICRraW5kLCAkZGV0YWlsXSk7Cn0KCi8qKgogKiBUaGUgbGljZW5zaW5nIHN0YXRlIG1hY2hpbmUg4oCUIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoLgogKiBSZXR1cm5zOiBzdGF0ZSA9IGFjdGl2ZSB8IGdyYWNlIHwgbG9ja2VkIHwgaW52YWxpZAogKi8KZnVuY3Rpb24gd3RfbGljZW5zZV9zdGF0ZShhcnJheSAkbGljLCA/c3RyaW5nICR0b2RheSA9IG51bGwpOiBhcnJheSB7CiAgICAkdG9kYXkgPSAkdG9kYXkgPzogZGF0ZSgnWS1tLWQnKTsKCiAgICBpZiAoaW5fYXJyYXkoJGxpY1snc3RhdHVzJ10sIFsnc3VzcGVuZGVkJywgJ2NhbmNlbGxlZCddLCB0cnVlKSkgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdzdGF0ZScgICAgICAgPT4gJ2xvY2tlZCcsCiAgICAgICAgICAgICdyZWFzb24nICAgICAgPT4gJGxpY1snc3RhdHVzJ10gPT09ICdjYW5jZWxsZWQnID8gJ2NhbmNlbGxlZCcgOiAnc3VzcGVuZGVkJywKICAgICAgICAgICAgJ3ZhbGlkX3VudGlsJyA9PiAkbGljWyd2YWxpZF91bnRpbCddLAogICAgICAgICAgICAnZ3JhY2VfdW50aWwnID0+IG51bGwsCiAgICAgICAgICAgICdtZXNzYWdlJyAgICAgPT4gJGxpY1snc3RhdHVzJ10gPT09ICdjYW5jZWxsZWQnCiAgICAgICAgICAgICAgICA/ICfQm9C40YbQtdC90LfRitGCINC1INCw0L3Rg9C70LjRgNCw0L0uJwogICAgICAgICAgICAgICAgOiAn0JvQuNGG0LXQvdC30YrRgiDQtSDQstGA0LXQvNC10L3QvdC+INGB0L/RgNGP0L0g0L7RgiDQtNC+0YHRgtCw0LLRh9C40LrQsC4nLAogICAgICAgIF07CiAgICB9CgogICAgJHZhbGlkVW50aWwgPSAkbGljWyd2YWxpZF91bnRpbCddOwogICAgJGdyYWNlRGF5cyAgPSAoaW50KSgkbGljWydncmFjZV9kYXlzJ10gPz8gMCk7CiAgICAkZ3JhY2VVbnRpbCA9IGRhdGUoJ1ktbS1kJywgc3RydG90aW1lKCR2YWxpZFVudGlsIC4gJyArJyAuICRncmFjZURheXMgLiAnIGRheXMnKSk7CgogICAgaWYgKCR0b2RheSA8PSAkdmFsaWRVbnRpbCkgewogICAgICAgIHJldHVybiBbJ3N0YXRlJyA9PiAnYWN0aXZlJywgJ3JlYXNvbicgPT4gJ29rJywKICAgICAgICAgICAgICAgICd2YWxpZF91bnRpbCcgPT4gJHZhbGlkVW50aWwsICdncmFjZV91bnRpbCcgPT4gJGdyYWNlVW50aWwsCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ9CQ0LrRgtC40LLQtdC9INC70LjRhtC10L3Qty4nXTsKICAgIH0KICAgIGlmICgkdG9kYXkgPD0gJGdyYWNlVW50aWwpIHsKICAgICAgICByZXR1cm4gWydzdGF0ZScgPT4gJ2dyYWNlJywgJ3JlYXNvbicgPT4gJ2dyYWNlJywKICAgICAgICAgICAgICAgICd2YWxpZF91bnRpbCcgPT4gJHZhbGlkVW50aWwsICdncmFjZV91bnRpbCcgPT4gJGdyYWNlVW50aWwsCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ9Cf0LvQsNGJ0LDQvdC10YLQviDQtSDQt9Cw0LHQsNCy0LXQvdC+LiDQpdGK0LHRitGCINGJ0LUg0YHQv9GA0LUg0L3QsCAnIC4gJGdyYWNlVW50aWwgLiAnINCw0LrQviDQvdC1INCx0YrQtNC1INC/0LvQsNGC0LXQvdC+LiddOwogICAgfQogICAgcmV0dXJuIFsnc3RhdGUnID0+ICdsb2NrZWQnLCAncmVhc29uJyA9PiAnZXhwaXJlZCcsCiAgICAgICAgICAgICd2YWxpZF91bnRpbCcgPT4gJHZhbGlkVW50aWwsICdncmFjZV91bnRpbCcgPT4gJGdyYWNlVW50aWwsCiAgICAgICAgICAgICdtZXNzYWdlJyA9PiAn0JvQuNGG0LXQvdC30YrRgiDQtSDQuNC30YLQtdC60YrQuy4g0KHQstGK0YDQttC10YLQtSDRgdC1INGBINC00L7RgdGC0LDQstGH0LjQutCwINC30LAg0L/QvtC00L3QvtCy0Y/QstCw0L3QtS4nXTsKfQoKZnVuY3Rpb24gd3RfYWRkX21vbnRocyhzdHJpbmcgJGRhdGUsIGludCAkbiwgc3RyaW5nICRjeWNsZSA9ICdtb250aGx5Jyk6IHN0cmluZyB7CiAgICAkbW9kID0gJGN5Y2xlID09PSAneWVhcmx5JyA/ICgkbiAuICcgeWVhcicpIDogKCRuIC4gJyBtb250aCcpOwogICAgcmV0dXJuIGRhdGUoJ1ktbS1kJywgc3RydG90aW1lKCRkYXRlIC4gJyArJyAuICRtb2QpKTsKfQo=', 'licenses/lib/db.php' => 'PD9waHAKLyoqCiAqIFdlYnRyaXhpYSBIdWIg4oCUINCx0LDQt9CwINC00LDQvdC90LguCiAqINCh0L/QvtC00LXQu9C10L3QsCBQRE8g0LLRgNGK0LfQutCwLiDQp9C10YLQtSDQtNCw0L3QvdC40YLQtSDQvtGCIC9jb25maWcucGhwLCDRgdGK0LfQtNCw0LTQtdC9INC/0YDQuCDQuNC90YHRgtCw0LvQsNGG0LjRjy4KICovCmlmICghZGVmaW5lZCgnV1RfQ09ORklHX1BBVEgnKSkgewogICAgLy8g0JvQuNGG0LXQvdC30L3QuNGP0YIg0LzQvtC00YPQuyDRgdGC0L7QuCDQsiBodWIud2VidHJpeGlhLmNvbS9saWNlbnNlcy8g0Lgg0L/QvtC70LfQstCwCiAgICAvLyDQvtGB0L3QvtCy0L3QsNGC0LAg0LHQsNC30LAg0L3QsCBIdWIuINCi0YrRgNGB0LggY29uZmlnLnBocCDQv9GK0YDQstC+INGC0YPQuiwg0L/QvtGB0LvQtSDQsiByb290INC/0LDQv9C60LDRgtCwLgogICAgJGNhbmRpZGF0ZXMgPSBbCiAgICAgICAgZGlybmFtZShfX0RJUl9fKSAuICcvY29uZmlnLnBocCcsICAgICAgICAgICAgLy8gbGljZW5zZXMvY29uZmlnLnBocCAob3duKQogICAgICAgIGRpcm5hbWUoZGlybmFtZShfX0RJUl9fKSkgLiAnL2NvbmZpZy5waHAnLCAgIC8vIGh1YiByb290IGNvbmZpZy5waHAgKHNoYXJlZCkKICAgIF07CiAgICAkZm91bmQgPSAnJzsKICAgIGZvcmVhY2ggKCRjYW5kaWRhdGVzIGFzICRjKSB7IGlmIChmaWxlX2V4aXN0cygkYykpIHsgJGZvdW5kID0gJGM7IGJyZWFrOyB9IH0KICAgIGRlZmluZSgnV1RfQ09ORklHX1BBVEgnLCAkZm91bmQgPzogJGNhbmRpZGF0ZXNbMF0pOwp9CgpmdW5jdGlvbiB3dF9jb25maWdfZXhpc3RzKCk6IGJvb2wgewogICAgcmV0dXJuIGZpbGVfZXhpc3RzKFdUX0NPTkZJR19QQVRIKTsKfQoKZnVuY3Rpb24gd3RfZGIoKTogUERPIHsKICAgIHN0YXRpYyAkcGRvID0gbnVsbDsKICAgIGlmICgkcGRvIGluc3RhbmNlb2YgUERPKSByZXR1cm4gJHBkbzsKCiAgICBpZiAoIXd0X2NvbmZpZ19leGlzdHMoKSkgewogICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdOT19DT05GSUcnKTsKICAgIH0KICAgIHJlcXVpcmVfb25jZSBXVF9DT05GSUdfUEFUSDsKCiAgICAkaG9zdCA9IGRlZmluZWQoJ0RCX0hPU1QnKSA/IERCX0hPU1QgOiAnbG9jYWxob3N0JzsKICAgICRuYW1lID0gZGVmaW5lZCgnREJfTkFNRScpID8gREJfTkFNRSA6ICcnOwogICAgJHVzZXIgPSBkZWZpbmVkKCdEQl9VU0VSJykgPyBEQl9VU0VSIDogJyc7CiAgICAkcGFzcyA9IGRlZmluZWQoJ0RCX1BBU1MnKSA/IERCX1BBU1MgOiAnJzsKCiAgICAkcGRvID0gbmV3IFBETygKICAgICAgICAibXlzcWw6aG9zdD17JGhvc3R9O2RibmFtZT17JG5hbWV9O2NoYXJzZXQ9dXRmOG1iNCIsCiAgICAgICAgJHVzZXIsCiAgICAgICAgJHBhc3MsCiAgICAgICAgWwogICAgICAgICAgICBQRE86OkFUVFJfRVJSTU9ERSAgICAgICAgICAgID0+IFBETzo6RVJSTU9ERV9FWENFUFRJT04sCiAgICAgICAgICAgIFBETzo6QVRUUl9ERUZBVUxUX0ZFVENIX01PREUgPT4gUERPOjpGRVRDSF9BU1NPQywKICAgICAgICAgICAgUERPOjpBVFRSX0VNVUxBVEVfUFJFUEFSRVMgICA9PiBmYWxzZSwKICAgICAgICBdCiAgICApOwogICAgcmV0dXJuICRwZG87Cn0KCi8qKiBKU09OINC+0YLQs9C+0LLQvtGAICovCmZ1bmN0aW9uIHd0X2pzb24oJGRhdGEsIGludCAkY29kZSA9IDIwMCk6IHZvaWQgewogICAgaHR0cF9yZXNwb25zZV9jb2RlKCRjb2RlKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7CiAgICBlY2hvIGpzb25fZW5jb2RlKCRkYXRhLCBKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgIGV4aXQ7Cn0KCmZ1bmN0aW9uIHd0X29rKCRkYXRhID0gdHJ1ZSk6IHZvaWQgIHsgd3RfanNvbihbJ29rJyA9PiB0cnVlLCAgJ2RhdGEnID0+ICRkYXRhXSk7IH0KZnVuY3Rpb24gd3RfZXJyKHN0cmluZyAkbXNnLCBpbnQgJGNvZGUgPSA0MDApOiB2b2lkIHsgd3RfanNvbihbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAkbXNnXSwgJGNvZGUpOyB9CgovKiog0KfQtdGC0LUgSlNPTiBib2R5ICovCmZ1bmN0aW9uIHd0X2JvZHkoKTogYXJyYXkgewogICAgJHJhdyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6Ly9pbnB1dCcpOwogICAgJGogPSBqc29uX2RlY29kZSgkcmF3LCB0cnVlKTsKICAgIHJldHVybiBpc19hcnJheSgkaikgPyAkaiA6IFtdOwp9Cg==', 'offer.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0J7RhNC10YDRgtCwIOKAlCBIdWI8L3RpdGxlPgo8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PURNK1NhbnM6d2dodEA0MDA7NTAwOzYwMDs3MDAmZmFtaWx5PURNK01vbm86d2dodEA0MDA7NTAwOzcwMCZkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI+CjxzdHlsZT4KOnJvb3R7LS1iZzojZWVmM2VjOy0tcGFuZWw6I2ZmZjstLWxpbmU6IzljY2M3ZDstLXNvZnQ6I2U4ZjNkZjstLWluazojMTUxNTE1Oy0tbXV0ZWQ6IzVkNjQ1YjstLWdyZWVuOiMxNTk0NDc7LS1ncmVlbjI6IzBmN2EzOTstLXJlZDojZGMyNjI2Oy0tYWNjZW50OiM2YzYzZmY7LS1mbjonRE0gU2FucycsQXJpYWwsc2Fucy1zZXJpZjstLW1vbm86J0RNIE1vbm8nLG1vbm9zcGFjZX0KKntib3gtc2l6aW5nOmJvcmRlci1ib3h9CmJvZHl7bWFyZ2luOjA7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0taW5rKTtmb250LWZhbWlseTp2YXIoLS1mbil9Ci5zaGVsbHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjM4MHB4IG1pbm1heCg3NjBweCwxZnIpO2dhcDoxOHB4O21pbi1oZWlnaHQ6MTAwdmg7cGFkZGluZzoxOHB4fQouZWRpdG9ye2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjA4KTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNnB4O3Bvc2l0aW9uOnN0aWNreTt0b3A6MThweDtoZWlnaHQ6Y2FsYygxMDB2aCAtIDM2cHgpO292ZXJmbG93OmF1dG99Ci5wcmV2aWV3e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9Ci50b3BiYXJ7ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLWJvdHRvbToxNHB4fQouYnRue2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OXB4IDEycHg7Zm9udDo2MDAgMTJweCB2YXIoLS1mbik7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDojZWVmMGY1O2NvbG9yOiMxZjI0MzB9Ci5idG4ucHtiYWNrZ3JvdW5kOnZhcigtLWdyZWVuKTtjb2xvcjojZmZmfS5idG4uYXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6I2ZmZn0uYnRuLmR7YmFja2dyb3VuZDojZmVlMmUyO2NvbG9yOiNiOTFjMWN9LmJ0bjpkaXNhYmxlZHtvcGFjaXR5Oi40NTtjdXJzb3I6bm90LWFsbG93ZWR9Cmgxe2ZvbnQtc2l6ZToxOHB4O21hcmdpbjowIDAgMnB4fS5oaW50e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM3NzgwNzA7bWFyZ2luOjAgMCAxMnB4O2xpbmUtaGVpZ2h0OjEuNDV9Ci50YWJze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6NnB4O21hcmdpbjoxMHB4IDAgMTRweH0KLnRhYntib3JkZXI6MXB4IHNvbGlkICNkOWU1ZDI7YmFja2dyb3VuZDojZjdmYmY0O2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OXB4IDhweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Y3Vyc29yOnBvaW50ZXJ9Ci50YWIub257YmFja2dyb3VuZDp2YXIoLS1ncmVlbik7Ym9yZGVyLWNvbG9yOnZhcigtLWdyZWVuKTtjb2xvcjojZmZmfQouZ3JvdXB7Ym9yZGVyLXRvcDoxcHggc29saWQgI2VkZjJlODtwYWRkaW5nLXRvcDoxMnB4O21hcmdpbi10b3A6MTJweH0KLmd0aXRsZXtmb250LXNpemU6MTFweDtjb2xvcjojNmY3ODZkO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMDhlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbTo4cHh9CmxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6IzY5NzQ2Nzt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA0ZW07bWFyZ2luOjlweCAwIDRweH0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0e3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjZGJlNWQ1O2JhY2tncm91bmQ6I2ZiZmRmOTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjlweCAxMHB4O2ZvbnQ6MTNweCB2YXIoLS1mbik7b3V0bGluZTpub25lO2NvbG9yOiMxMjE4MTJ9CnRleHRhcmVhe3Jlc2l6ZTp2ZXJ0aWNhbDttaW4taGVpZ2h0OjYycHh9IGlucHV0OmZvY3VzLHRleHRhcmVhOmZvY3VzLHNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0tZ3JlZW4pO2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMjEsMTQ4LDcxLC4xKX0KLmdyaWQye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6OHB4fS5ncmlkM3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjEuMmZyIC44ZnIgLjhmcjtnYXA6OHB4fQoubWluaXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciA4MHB4IDY4cHggMWZyIDM0cHg7Z2FwOjZweDthbGlnbi1pdGVtczplbmQ7bWFyZ2luLWJvdHRvbTo4cHh9Ci5taW5pcm93IGJ1dHRvbiwuaXRlbXJvdyBidXR0b257aGVpZ2h0OjM2cHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDojZmVlMmUyO2NvbG9yOiNiOTFjMWM7Y3Vyc29yOnBvaW50ZXJ9Ci5pdGVtcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDM0cHg7Z2FwOjZweDttYXJnaW4tYm90dG9tOjZweH0KLnN2Y2JveHtib3JkZXI6MXB4IHNvbGlkICNlMWViZGM7YmFja2dyb3VuZDojZmJmZGY5O2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEwcHg7bWFyZ2luLWJvdHRvbTo5cHh9Ci5tdXRlZHtmb250LXNpemU6MTFweDtjb2xvcjojN2Y4ODdkfS50b2FzdHtwb3NpdGlvbjpmaXhlZDtyaWdodDoyMHB4O2JvdHRvbToyMHB4O2JhY2tncm91bmQ6IzEwMTgyMDtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEycHggMTZweDtmb250LXNpemU6MTNweDtkaXNwbGF5Om5vbmU7ei1pbmRleDo1MH0KLnBhZ2V7d2lkdGg6Nzk0cHg7bWluLWhlaWdodDoxMTIzcHg7YmFja2dyb3VuZDojZmZmO2JveC1zaGFkb3c6MCAxMnB4IDQwcHggcmdiYSgwLDAsMCwuMTIpO3BhZGRpbmc6NThweCA1OHB4IDQ0cHg7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufQoud217cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MjEwcHggMTMwcHggYXV0byAxNzBweDtmb250LXNpemU6NDQwcHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOnJnYmEoMjEsMTQ4LDcxLC4wNyk7bGluZS1oZWlnaHQ6Ljc7ei1pbmRleDowO3BvaW50ZXItZXZlbnRzOm5vbmV9Ci5kb2N7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxfS5sb2dve2ZvbnQtc2l6ZToyN3B4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjp2YXIoLS1ncmVlbik7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC1zaGFkb3c6MXB4IDFweCAwICMwYjVmMmE7bWFyZ2luLWJvdHRvbTo2NHB4fQoudGl0bGV7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbTozNHB4fS50aXRsZSBoMntmb250LXNpemU6MjdweDttYXJnaW46MCAwIDVweDtmb250LXdlaWdodDo4MDB9LnRpdGxlIC5zdWJqZWN0e2ZvbnQtc2l6ZToxOHB4O2ZvbnQtc3R5bGU6aXRhbGljfQoubGVhZHtmb250LXNpemU6MTdweDtsaW5lLWhlaWdodDoxLjU1O21hcmdpbi1ib3R0b206MThweH0ubGVhZCBie2ZvbnQtd2VpZ2h0OjgwMH0ubGVhZCBhe2NvbG9yOiMxNDY1ZDg7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0KLnNlY3Rpb24tdGl0bGV7Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6ODAwO21hcmdpbjoxNnB4IDAgOHB4fS5yb21hbntmb250LXNpemU6MThweDtmb250LXdlaWdodDo4MDA7bWFyZ2luOjhweCAwIDRweDtwYWRkaW5nLWxlZnQ6MjJweH0KLnN2Y3ttYXJnaW46OHB4IDAgMjJweDtwYWRkaW5nLWxlZnQ6MjRweH0uc3ZjIGgze2ZvbnQtc2l6ZToxN3B4O21hcmdpbjowIDAgOHB4fS5zdmMgdWx7bWFyZ2luOjA7cGFkZGluZy1sZWZ0OjM0cHh9LnN2YyBsaXtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxLjQ1O21hcmdpbjo0cHggMH0KLnByaWNle3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO21hcmdpbi10b3A6MThweDtmb250LXNpemU6MTVweH0ucHJpY2UgdGgsLnByaWNlIHRke2JvcmRlcjoxLjRweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjEwcHggMTBweDt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnByaWNlIHRoe2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjgwMDtiYWNrZ3JvdW5kOiNmZmZ9LnByaWNlIHRyOm50aC1jaGlsZChldmVuKSB0ZHtiYWNrZ3JvdW5kOnZhcigtLXNvZnQpfS5wcmljZSB0ZDpmaXJzdC1jaGlsZHtmb250LXdlaWdodDo4MDB9LnByaWNlIC50b3RhbCB0ZHtiYWNrZ3JvdW5kOiNmZmYhaW1wb3J0YW50O2ZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0OjgwMH0ucHJpY2UgLmxlZnR7dGV4dC1hbGlnbjpsZWZ0fS5wcmljZSAuc21hbGx7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHg7bWFyZ2luLXRvcDozcHh9Ci5mb290ZXItbm90ZXtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE2cHg7bWFyZ2luLXRvcDozOHB4fS5jb250YWN0e2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuMzU7bWFyZ2luLXRvcDo4cHh9LmNvbnRhY3QgYXtjb2xvcjojMTQ2NWQ4fS5wYWdlbm97cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NThweDtib3R0b206NDJweDtmb250OjE1cHggdmFyKC0tbW9ubyl9Ci5wYWdlLnR3b3ttYXJnaW4tdG9wOjE4cHh9LnBhZ2UudHdvIC5sb2dve21hcmdpbi1ib3R0b206NDJweH0udGVybXN7Zm9udC1zaXplOjE3cHg7bGluZS1oZWlnaHQ6MS41NX0udGVybXMgaDN7Zm9udC1zaXplOjE4cHg7bWFyZ2luOjE2cHggMCA4cHh9LnRlcm1zIHVse21hcmdpbjowIDAgMTJweCAyMHB4fS50ZXJtcyBsaXttYXJnaW46OHB4IDB9Lm5vdGVzIGxpe21hcmdpbjo2cHggMH0uc2lnbnN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDo3MHB4O21hcmdpbi10b3A6NDZweDtmb250LXNpemU6MTZweH0uc2lnbGluZXtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzMzMztoZWlnaHQ6MjhweDttYXJnaW4tYm90dG9tOjZweH0uc2lnLW5hbWV7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLXRvcDo4cHh9CkBtZWRpYShtYXgtd2lkdGg6MTE4MHB4KXsuc2hlbGx7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn0uZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDphdXRvfS5wcmV2aWV3e292ZXJmbG93OmF1dG87anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnBhZ2V7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdH19CkBtZWRpYSBwcmludHsKICBAcGFnZXtzaXplOkE0O21hcmdpbjowfQogIGJvZHl7YmFja2dyb3VuZDojZmZmfS5zaGVsbHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MH0uZWRpdG9yLC50b2FzdHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5wcmV2aWV3e2Rpc3BsYXk6YmxvY2t9LnBhZ2V7d2lkdGg6MjEwbW07bWluLWhlaWdodDoyOTdtbTtib3gtc2hhZG93Om5vbmU7bWFyZ2luOjA7cGFkZGluZzoxNW1tIDE1bW0gMTJtbTtwYWdlLWJyZWFrLWFmdGVyOmFsd2F5c30ucGFnZS50d297bWFyZ2luLXRvcDowfS5wYWdlbm97cmlnaHQ6MTVtbTtib3R0b206MTJtbX0ud217aW5zZXQ6NThtbSAzNG1tIGF1dG8gNDVtbTtmb250LXNpemU6MTE4bW19LmxvZ297bWFyZ2luLWJvdHRvbToxOG1tfS50aXRsZSBoMntmb250LXNpemU6MjRwdH0udGl0bGUgLnN1YmplY3R7Zm9udC1zaXplOjE1cHR9LmxlYWQsLnRlcm1ze2ZvbnQtc2l6ZToxNHB0fS5wcmljZXtmb250LXNpemU6MTJwdH0ucHJpY2UgdGh7Zm9udC1zaXplOjE0cHR9LnByaWNlIHRke3BhZGRpbmc6N3B0fS5mb290ZXItbm90ZXttYXJnaW4tdG9wOjE2bW19Cn0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KPGRpdiBjbGFzcz0ic2hlbGwiPgogIDxhc2lkZSBjbGFzcz0iZWRpdG9yIj4KICAgIDxkaXYgY2xhc3M9InRvcGJhciI+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0ibG9jYXRpb24uaHJlZj0naW5kZXguaHRtbCciPuKGkCBIdWI8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9InNhdmVPZmZlcigpIj7Ql9Cw0L/QsNC30Lg8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGEiIG9uY2xpY2s9ImR1cGxpY2F0ZU9mZmVyKCkiPtCU0YPQsdC70LjRgNCw0Lk8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJ3aW5kb3cucHJpbnQoKSI+UERGIC8g0J/QtdGH0LDRgjwvYnV0dG9uPgogICAgPC9kaXY+CiAgICA8aDE+0KDQtdC00LDQutGC0L7RgCDQvdCwINC+0YTQtdGA0YLQsDwvaDE+CiAgICA8cCBjbGFzcz0iaGludCI+0KHRitC30LTQsNC5INC4INGA0LXQtNCw0LrRgtC40YDQsNC5INC+0YTQtdGA0YLQuCDQutCw0YLQviDQv9GA0LjQvNC10YDQuNGC0LUg0LfQsCBCMkIg0YHQuNGB0YLQtdC80LAuINCS0YHQuNGH0LrQviDRgdC1INC/0LDQt9C4INCyIEh1Yi3QsC48L3A+CiAgICA8ZGl2IGNsYXNzPSJ0YWJzIj4KICAgICAgPGRpdiBjbGFzcz0idGFiIiBpZD0idGFiX29uZV90aW1lIiBvbmNsaWNrPSJzZXRUZW1wbGF0ZSgnb25lX3RpbWUnKSI+0JXQtNC90L7QutGA0LDRgtC90LA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGFiIiBpZD0idGFiX21vbnRobHkiIG9uY2xpY2s9InNldFRlbXBsYXRlKCdtb250aGx5JykiPtCc0LXRgdC10YfQvdCwPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJncm91cCI+CiAgICAgIDxkaXYgY2xhc3M9Imd0aXRsZSI+0J7RgdC90L7QstC90Lgg0LTQsNC90L3QuDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJncmlkMiI+PGRpdj48bGFiZWw+0J3QvtC80LXRgDwvbGFiZWw+PGlucHV0IGlkPSJudW0iPjwvZGl2PjxkaXY+PGxhYmVsPtCh0YLQsNGC0YPRgTwvbGFiZWw+PHNlbGVjdCBpZD0ic3RhdHVzIj48b3B0aW9uPtCn0LDQutCw0YnQsDwvb3B0aW9uPjxvcHRpb24+0J/RgNC40LXRgtCwPC9vcHRpb24+PG9wdGlvbj7QntGC0LrQsNC30LDQvdCwPC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+PC9kaXY+CiAgICAgIDxsYWJlbD7QmNC80LUg0L3QsCDRhNC40YDQvNCwIC8g0LzQsNGA0LrQsDwvbGFiZWw+PGlucHV0IGlkPSJicmFuZCI+CiAgICAgIDxsYWJlbD7Ql9Cw0LPQu9Cw0LLQuNC1IC8g0L/RgNC10LTQvNC10YI8L2xhYmVsPjxpbnB1dCBpZD0ic3ViamVjdCI+CiAgICAgIDxkaXYgY2xhc3M9ImdyaWQyIj48ZGl2PjxsYWJlbD7QmtC70LjQtdC90YI8L2xhYmVsPjxpbnB1dCBpZD0iY2xpZW50Ij48L2Rpdj48ZGl2PjxsYWJlbD7QntCx0YDRitGJ0LXQvdC40LU8L2xhYmVsPjxpbnB1dCBpZD0iZ3JlZXRpbmciPjwvZGl2PjwvZGl2PgogICAgICA8bGFiZWw+0JLRitCy0LXQttC00LDRiSDRgtC10LrRgdGCPC9sYWJlbD48dGV4dGFyZWEgaWQ9ImludHJvIj48L3RleHRhcmVhPgogICAgICA8ZGl2IGNsYXNzPSJncmlkMyI+PGRpdj48bGFiZWw+0JTQsNGC0LA8L2xhYmVsPjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iaXNzdWVfZGF0ZSI+PC9kaXY+PGRpdj48bGFiZWw+0JLQsNC70LjQtNC90L7RgdGCINC00L3QuDwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InZhbGlkX2RheXMiPjwvZGl2PjxkaXY+PGxhYmVsPtCh0YDQvtC6INC00L3QuDwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgaWQ9IndvcmtfZGF5cyI+PC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJncm91cCI+CiAgICAgIDxkaXYgY2xhc3M9Imd0aXRsZSI+0KPRgdC70YPQs9C4INC4INGE0YPQvdC60YbQuNC+0L3QsNC70L3QvtGB0YLQuDwvZGl2PgogICAgICA8ZGl2IGlkPSJzdmNFZGl0b3IiPjwvZGl2PgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHN0eWxlPSJ3aWR0aDoxMDAlIiBvbmNsaWNrPSJhZGRHcm91cCgpIj4rINCU0L7QsdCw0LLQuCDQs9GA0YPQv9CwPC9idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJncm91cCI+CiAgICAgIDxkaXYgY2xhc3M9Imd0aXRsZSI+0KbQtdC90L7QstCwINC70LjRgdGC0LA8L2Rpdj4KICAgICAgPGRpdiBpZD0icm93c0VkaXRvciI+PC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgc3R5bGU9IndpZHRoOjEwMCUiIG9uY2xpY2s9ImFkZFJvdygpIj4rINCU0L7QsdCw0LLQuCDRgNC10LQ8L2J1dHRvbj4KICAgICAgPHAgY2xhc3M9Im11dGVkIj7QodGD0LzQsNGC0LAg0YHQtSDQuNC30YfQuNGB0LvRj9Cy0LAg0L7RgiDQutC+0LvQvtC90LDRgtCwIOKAntCa0YDQsNC50L3QsCDRhtC10L3QsOKAnC4g0JDQutC+INGA0LXQtNGK0YIg0LUg0YLQtdC60YHRgtC+0LIsINC+0YHRgtCw0LLQuCAwLjwvcD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9Imdyb3VwIj4KICAgICAgPGRpdiBjbGFzcz0iZ3RpdGxlIj7Qo9GB0LvQvtCy0LjRjyDQuCDQsdC10LvQtdC20LrQuDwvZGl2PgogICAgICA8bGFiZWw+0J/Qu9Cw0YnQsNC90LU8L2xhYmVsPjx0ZXh0YXJlYSBpZD0icGF5bWVudCI+PC90ZXh0YXJlYT4KICAgICAgPGxhYmVsPtCU0L7Qv9GK0LvQvdC40YLQtdC70L3QuCDQsdC10LvQtdC20LrQuDwvbGFiZWw+PHRleHRhcmVhIGlkPSJub3RlcyI+PC90ZXh0YXJlYT4KICAgICAgPGRpdiBjbGFzcz0iZ3JpZDIiPjxkaXY+PGxhYmVsPtCY0LfQs9C+0YLQstC40Ls8L2xhYmVsPjxpbnB1dCBpZD0icHJlcGFyZWRfYnkiPjwvZGl2PjxkaXY+PGxhYmVsPtCf0YDQuNC10Ls8L2xhYmVsPjxpbnB1dCBpZD0iYWNjZXB0ZWRfYnkiPjwvZGl2PjwvZGl2PgogICAgICA8bGFiZWw+0JrQvtC90YLQsNC60YLQuDwvbGFiZWw+PHRleHRhcmVhIGlkPSJjb250YWN0cyI+PC90ZXh0YXJlYT4KICAgIDwvZGl2PgogIDwvYXNpZGU+CgogIDxtYWluIGNsYXNzPSJwcmV2aWV3Ij4KICAgIDxkaXY+CiAgICAgIDxzZWN0aW9uIGNsYXNzPSJwYWdlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ3bSI+VzwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRvYyIgaWQ9InBhZ2UxIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlbm8iPi8gMSAvPC9kaXY+CiAgICAgIDwvc2VjdGlvbj4KICAgICAgPHNlY3Rpb24gY2xhc3M9InBhZ2UgdHdvIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb2MiIGlkPSJwYWdlMiI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW5vIj4vIDIgLzwvZGl2PgogICAgICA8L3NlY3Rpb24+CiAgICA8L2Rpdj4KICA8L21haW4+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b2FzdCIgaWQ9InRvYXN0Ij48L2Rpdj4KCjxzY3JpcHQ+Cid1c2Ugc3RyaWN0JzsKY29uc3QgQVBJPShmdW5jdGlvbigpe2NvbnN0IGJhc2U9d2luZG93LmxvY2F0aW9uLm9yaWdpbit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvb2ZmZXJcLmh0bWwkLywnJykucmVwbGFjZSgvXC8kLywnJyk7cmV0dXJuIGJhc2UrJy9hcGkucGhwJzt9KSgpOwpjb25zdCBxcz1uZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCk7CmxldCBvZmZlcklkPXFzLmdldCgnaWQnKXx8Jyc7CmxldCBkYXRhPXt9OwpsZXQgT0ZGRVJfQ09OVEVYVD17bGljZW5zZV9yb2xlOidjbGllbnQnLHByb2R1Y3RfbmFtZTonJ307CgpmdW5jdGlvbiB0b2RheSgpe3JldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7fQpmdW5jdGlvbiBudW1EZWZhdWx0KCl7cmV0dXJuIFN0cmluZyhNYXRoLmZsb29yKDQwMCtNYXRoLnJhbmRvbSgpKjUwMCkpLnBhZFN0YXJ0KDEwLCcwJyk7fQpmdW5jdGlvbiBtb25leShuKXtyZXR1cm4gJ+KCrCAnK051bWJlcihufHwwKS50b0xvY2FsZVN0cmluZygnZGUtREUnLHttaW5pbXVtRnJhY3Rpb25EaWdpdHM6MixtYXhpbXVtRnJhY3Rpb25EaWdpdHM6Mn0pO30KZnVuY3Rpb24gZXNjKHMpe3JldHVybiBTdHJpbmcocz09bnVsbD8nJzpzKS5yZXBsYWNlKC8mL2csJyZhbXA7JykucmVwbGFjZSgvPC9nLCcmbHQ7JykucmVwbGFjZSgvPi9nLCcmZ3Q7JykucmVwbGFjZSgvIi9nLCcmcXVvdDsnKTt9CmZ1bmN0aW9uIG5sKHMpe3JldHVybiBlc2MocykucmVwbGFjZSgvXG4vZywnPGJyPicpO30KZnVuY3Rpb24gdG9hc3QobSl7Y29uc3QgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9hc3QnKTt0LnRleHRDb250ZW50PW07dC5zdHlsZS5kaXNwbGF5PSdibG9jayc7c2V0VGltZW91dCgoKT0+dC5zdHlsZS5kaXNwbGF5PSdub25lJywyNjAwKTt9CmZ1bmN0aW9uIGRhdGVCZyhzKXtpZighcylyZXR1cm4gJyc7Y29uc3QgZD1uZXcgRGF0ZShzKydUMDA6MDA6MDAnKTtyZXR1cm4gZC50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7ZGF5OicyLWRpZ2l0Jyxtb250aDonMi1kaWdpdCcseWVhcjonbnVtZXJpYyd9KSsn0LMuJzt9CmFzeW5jIGZ1bmN0aW9uIGFmKGFjdGlvbixtZXRob2QsYm9keSxleHRyYSl7bWV0aG9kPW1ldGhvZHx8J0dFVCc7ZXh0cmE9ZXh0cmF8fCcnO2NvbnN0IG89e21ldGhvZCxoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbid9fTtpZihib2R5KW8uYm9keT1KU09OLnN0cmluZ2lmeShib2R5KTtjb25zdCByPWF3YWl0IGZldGNoKEFQSSsnP2FjdGlvbj0nK2FjdGlvbitleHRyYSxvKTtjb25zdCBqPWF3YWl0IHIuanNvbigpO2lmKCFqLm9rKXRocm93IG5ldyBFcnJvcihqLmVycm9yfHwn0JPRgNC10YjQutCwJyk7cmV0dXJuIGouZGF0YTt9CmZ1bmN0aW9uIGlzTWFzdGVySHViKCl7cmV0dXJuIE9GRkVSX0NPTlRFWFQgJiYgT0ZGRVJfQ09OVEVYVC5saWNlbnNlX3JvbGU9PT0nbWFzdGVyJzt9CmFzeW5jIGZ1bmN0aW9uIGxvYWRPZmZlckNvbnRleHQoKXsKICB0cnl7CiAgICBjb25zdCByPWF3YWl0IGZldGNoKEFQSSsnP2FjdGlvbj1icmFuZGluZ19zZXR0aW5ncycse2NyZWRlbnRpYWxzOidzYW1lLW9yaWdpbid9KTsKICAgIGNvbnN0IGo9YXdhaXQgci5qc29uKCk7CiAgICBpZihqJiZqLm9rJiZqLmRhdGEpIE9GRkVSX0NPTlRFWFQ9ai5kYXRhOwogIH1jYXRjaChlKXt9Cn0KCmZ1bmN0aW9uIHRlbXBsYXRlKHR5cGUpewogIGNvbnN0IG1vbnRobHk9dHlwZT09PSdtb250aGx5JzsKICBjb25zdCBtYXN0ZXI9aXNNYXN0ZXJIdWIoKTsKICByZXR1cm4gewogICAgdHlwZSwKICAgIG51bTogbW9udGhseT8nMDAwMDAwMDQyOCc6JzAwMDAwMDA0MjcnLAogICAgc3RhdHVzOifQp9Cw0LrQsNGJ0LAnLAogICAgYnJhbmQ6bWFzdGVyPydXRUJUUklYSUEnOifQmNC80LUg0L3QsCDRhNC40YDQvNCwJywKICAgIHN1YmplY3Q6IG1hc3RlcgogICAgICA/IChtb250aGx5PyfQntGE0LXRgNGC0LAg0LfQsCDQuNC30YDQsNCx0L7RgtC60LAg0L3QsCBiMmIg0YHQuNGB0YLQtdC80LAsINC80LXRgdC10YfQtdC9INCw0LHQvtC90LDQvNC10L3Rgic6J9Ce0YTQtdGA0YLQsCDQt9CwINC40LfRgNCw0LHQvtGC0LrQsCDQvdCwIGIyYiDRgdC40YHRgtC10LzQsCDQuCDRgNC10LTQuNC30LDQudC9INC90LAg0YHQsNC50YInKQogICAgICA6IChtb250aGx5PyfQntGE0LXRgNGC0LAg0LfQsCDRgdC40YHRgtC10LzQsCDQuCDQvNC10YHQtdGH0L3QsCDQv9C+0LTQtNGA0YrQttC60LAnOifQntGE0LXRgNGC0LAg0LfQsCDQuNC30YDQsNCx0L7RgtC60LAg0L3QsCDRgdC40YHRgtC10LzQsCcpLAogICAgY2xpZW50OicnLAogICAgZ3JlZXRpbmc6J9Cj0LLQsNC20LDQtdC80LgsJywKICAgIGludHJvOm1hc3Rlcj8n0JIg0L3QsNGI0LDRgtCwINC+0YTQtdGA0YLQsCDRgdCwINCy0LrQu9GO0YfQtdC90Lgg0YHQu9C10LTQvdC40YLQtSDRhNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGC0Lg6Jzon0JIg0L7RhNC10YDRgtCw0YLQsCDRgdCwINCy0LrQu9GO0YfQtdC90Lgg0YHQu9C10LTQvdC40YLQtSDRhNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGC0Lg6JywKICAgIGlzc3VlX2RhdGU6JzIwMjYtMDctMDcnLAogICAgdmFsaWRfZGF5czozMCwKICAgIHdvcmtfZGF5czozMCwKICAgIGdyb3VwczpbCiAgICAgIHt0aXRsZTonSS4g0JjQt9GA0LDQsdC+0YLQutCwJyxpdGVtczpbCiAgICAgICAge3RpdGxlOicxLiDQlNC40LfQsNC50L0g0L3QsCDQsTLQsSDRgdC40YHRgtC10LzQsNGC0LAg0Lgg0YPQtdCxINGB0LDQudGC0LA6JyxidWxsZXRzOlsn0KPQvdC40LrQsNC70LXQvSDQuCDQvNC+0LTQtdGA0LXQvSDQtNC40LfQsNC50L0nLCfQkNC00LDQv9GC0LjQstC90L7RgdGCINGBINGD0YHRgtGA0L7QudGB0YLQstCwJywn0KPQtNC+0LHQtdC9INC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC4INC4INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0YHQutC4INC40L3RgtC10YDRhNC10LnRgSddfSwKICAgICAgICB7dGl0bGU6JzIuINCY0L3RgtC10LPRgNCw0YbQuNC4OicsYnVsbGV0czpbJ9CY0L3RgtC10LPRgNCw0YbQuNGPINGBINC60YPRgNC40LXRgNGB0LrQuCDRhNC40YDQvNC4INC90LAgQjJCINGB0LjRgdGC0LXQvNCw0YLQsCcsJ9CY0L3RgtC10LPRgNCw0YbQuNGPINC90LAg0LHQsNC90LrQvtCy0Lgg0Lgg0LrQsNGA0YLQvtCy0Lgg0L/Qu9Cw0YnQsNC90LjRjyddfSwKICAgICAgICB7dGl0bGU6JzMuINCe0LHRg9GH0LXQvdC40LU6JyxidWxsZXRzOlsn0JLQutC70Y7Rh9C10L3QviDQvtCx0YPRh9C10L3QuNC1INC30LAg0YPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0Lgg0L7RgdC90L7QstC90LjRgtC1INC/0YDQvtGG0LXRgdC4LiddfQogICAgICBdfQogICAgXSwKICAgIHJvd3M6IG1vbnRobHk/WwogICAgICB7c2VydmljZTon0KXQvtGB0YLQuNC90LMg0Lgg0LTQvtC80LXQudC9JyxwcmljZTon4oKsIDIwMCwwMFxuKNC90LAg0LPQvtC00LjQvdCwKScsZGlzY291bnQ6Jy0nLGZpbmFsOifQmtCb0JjQldCd0KLQqtCiXG7QoNCQ0JfQn9Ce0JvQkNCT0JAnLGFtb3VudDowfSwKICAgICAge3NlcnZpY2U6J9CU0L7RgNCw0LHQvtGC0LrQuCDQv9C+INC00LjQt9Cw0LnQvdCwINC90LAg0YHQsNC50YLQsCcscHJpY2U6J+KCrCAxMzAwLjAwXG4o0LXQtNC90L7QutGA0LDRgtC90L4pJyxkaXNjb3VudDonLSA1NSUnLGZpbmFsOifigqwgNTg1LDAwXG4o0LXQtNC90L7QutGA0LDRgtC90L4pJyxhbW91bnQ6NTg1fSwKICAgICAge3NlcnZpY2U6J0IyQiDRgdC40YHRgtC10LzQsCDQvNC10YHQtdGH0L3QsCDRg9GB0LvRg9Cz0LAnLHByaWNlOifigqwgMTUwLDAwXG4o0L3QsCDQvNC10YHQtdGGKScsZGlzY291bnQ6Jy0gMCUnLGZpbmFsOifigqwgMTUwLDAwXG4o0LzQtdGB0LXRhiknLGFtb3VudDoxNTAsbW9udGhseToxfSwKICAgICAge3NlcnZpY2U6J9CU0LjQs9C40YLQsNC70LXQvSDQv9GA0L7QtNGD0LrRgtC+0LIg0LrQsNGC0LDQu9C+0LMnLHByaWNlOifigqwgNDUwLDAwJyxkaXNjb3VudDonLTEwMCUnLGZpbmFsOifigqwgMDAsMDAnLGFtb3VudDowfSwKICAgICAge3NlcnZpY2U6J9Cc0LXRgdC10YfQvdCwINC/0L7QtNC00YDRitC20LrQsCcscHJpY2U6J+KCrCAxMjAsMDAnLGRpc2NvdW50OictMTAwJScsZmluYWw6J+KCrCAwMCwwMCcsYW1vdW50OjAsbW9udGhseToxfQogICAgXTpbCiAgICAgIHtzZXJ2aWNlOifQpdC+0YHRgtC40L3QsyDQuCDQtNC+0LzQtdC50L0nLHByaWNlOifigqwgMjAwLDAwXG4o0L3QsCDQs9C+0LTQuNC90LApJyxkaXNjb3VudDonLScsZmluYWw6J9Ca0JvQmNCV0J3QotCq0KJcbtCg0JDQl9Cf0J7Qm9CQ0JPQkCcsYW1vdW50OjB9LAogICAgICB7c2VydmljZTon0JTQvtGA0LDQsdC+0YLQutC4INC/0L4g0LTQuNC30LDQudC90LAg0L3QsCDRgdCw0LnRgtCwJyxwcmljZTon4oKsIDEzMDAuMDBcbijQtdC00L3QvtC60YDQsNGC0L3QviknLGRpc2NvdW50OictIDU1JScsZmluYWw6J+KCrCA1ODUsMDBcbijQtdC00L3QvtC60YDQsNGC0L3QviknLGFtb3VudDo1ODV9LAogICAgICB7c2VydmljZTon0JjQt9GA0LDQsdC+0YLQutCwINC90LAgQjJCINGB0LjRgdGC0LXQvNCwJyxwcmljZTon4oKsIDMyMDAsMDBcbijQtdC00L3QvtC60YDQsNGC0L3QviknLGRpc2NvdW50OictIDUwJScsZmluYWw6J+KCrCAxNjAwLDAwXG4o0LXQtNC90L7QutGA0LDRgtC90L4pJyxhbW91bnQ6MTYwMH0sCiAgICAgIHtzZXJ2aWNlOifQlNC40LPQuNGC0LDQu9C10L0g0L/RgNC+0LTRg9C60YLQvtCyINC60LDRgtCw0LvQvtCzJyxwcmljZTon4oKsIDQ1MCwwMCcsZGlzY291bnQ6Jy0xMDAlJyxmaW5hbDon4oKsIDAwLDAwJyxhbW91bnQ6MH0sCiAgICAgIHtzZXJ2aWNlOifQnNC10YHQtdGH0L3QsCDQv9C+0LTQtNGA0YrQttC60LAnLHByaWNlOifigqwgMTIwLDAwJyxkaXNjb3VudDonLTUwJScsZmluYWw6J+KCrCA2MCwwMCcsYW1vdW50OjYwLG1vbnRobHk6MX0KICAgIF0sCiAgICBwYXltZW50OifQn9GA0Lgg0L/RgNC40LXQvNCw0L3QtSDQvdCwINC+0YTQtdGA0YLQsNGC0LAg0YHQtSDQt9Cw0L/Qu9Cw0YnQsCA1MCUg0LDQstCw0L3RgdC+0LLQviDRgSDRhtC10Lsg0LrQsNC/0LDRgNC+Llxu0J7RhNC10YDRgtCw0YLQsCDQtSDQstCw0LvQuNC00L3QsCDQsiDRgdGA0L7QuiDQvtGCIDMwINC00L3QuCDRgdC70LXQtCDQtNCw0YLQsNGC0LAg0L3QsCDQuNC30LTQsNCy0LDQvdC10YLQvi4nLAogICAgbm90ZXM6J9Cf0L7QtNC00YDRitC20LrQsNGC0LAg0LLQutC70Y7Rh9Cy0LAgLSA3LzI0INC80L7QvdC40YLQvtGA0LjQvdCzINC90LAg0L/Qu9Cw0YLRhNC+0YDQvNCw0YLQsCDQuCDRgdCw0LnRgtCwLCDQvtGC0YHRgtGA0LDQvdGP0LLQsNC90LUg0L3QsCDQvdC10YDQtdC00L3QvtGB0YLQuCwg0YHQvNC10L3Rj9C90LUg0L3QsCDQsdCw0L3QtdGA0LgsINCw0LrRgtGD0LDQu9C40LfQuNGA0LDQvdC1INC90LAg0YHQuNGB0YLQtdC80LDRgtCwINCy0YHRj9C60LAg0YHQtdC00LzQuNGG0LAsINC10LbQtdC00L3QtdCy0LXQvSDQsdC10LrRitC/INC90LAg0YHQuNGB0YLQtdC80LDRgtCwLCDRgdC60LDQvdC40YDQsNC90LUg0L3QsCDRgdC40YHRgtC10LzQsNGC0LAg0LLRgdGP0LrQsCDRgdC10LTQvNC40YbQsCDQt9CwINC30LvQvtC90LDQvNC10YDQtdC9INC00L7RgdGC0YrQvy4nLAogICAgcHJlcGFyZWRfYnk6JycsCiAgICBhY2NlcHRlZF9ieTonJywKICAgIGNvbnRhY3RzOm1hc3Rlcj8n0JLRgdC40YfQutC4INGG0LXQvdC4INGB0LAg0LHQtdC3INCU0JTQoSAhXG5vZmZpY2VAd2VidHJpeGlhLmNvbVxuKzM1OSA4OCA0NzcgODIxNCc6J9CS0YHQuNGH0LrQuCDRhtC10L3QuCDRgdCwINCx0LXQtyDQlNCU0KEgIScKICB9Owp9CgpmdW5jdGlvbiBzZXRUZW1wbGF0ZSh0eXBlKXsKICBpZighb2ZmZXJJZCAmJiAoIWRhdGEudHlwZSB8fCBjb25maXJtKCfQlNCwINC30LDRgNC10LTRjyDRiNCw0LHQu9C+0L3QsCDQuCDQtNCwINC30LDQvNC10L3RjyDRgtC10LrRg9GJ0LjRgtC1INC00LDQvdC90Lg/JykpKXsKICAgIGRhdGE9dGVtcGxhdGUodHlwZSk7IGZpbGxFZGl0b3IoKTsgcmVuZGVyQWxsKCk7CiAgfSBlbHNlIHsKICAgIGRhdGEudHlwZT10eXBlOyBmaWxsRWRpdG9yKCk7IHJlbmRlckFsbCgpOwogIH0KfQoKZnVuY3Rpb24gcmVhZEVkaXRvcigpewogIFsnbnVtJywnc3RhdHVzJywnYnJhbmQnLCdzdWJqZWN0JywnY2xpZW50JywnZ3JlZXRpbmcnLCdpbnRybycsJ2lzc3VlX2RhdGUnLCd2YWxpZF9kYXlzJywnd29ya19kYXlzJywncGF5bWVudCcsJ25vdGVzJywncHJlcGFyZWRfYnknLCdhY2NlcHRlZF9ieScsJ2NvbnRhY3RzJ10uZm9yRWFjaChpZD0+ZGF0YVtpZF09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnZhbHVlKTsKICBkYXRhLmdyb3Vwcz1bLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnN2Y2JveCcpXS5tYXAoYm94PT4oewogICAgdGl0bGU6Ym94LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWs9Z3RdJykudmFsdWUsCiAgICBpdGVtczpbLi4uYm94LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdmNpdGVtJyldLm1hcChpdD0+KHsKICAgICAgdGl0bGU6aXQucXVlcnlTZWxlY3RvcignW2RhdGEtaz1pdF0nKS52YWx1ZSwKICAgICAgYnVsbGV0czpbLi4uaXQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtaz1idWxdJyldLm1hcCh4PT54LnZhbHVlKS5maWx0ZXIoQm9vbGVhbikKICAgIH0pKQogIH0pKTsKICBkYXRhLnJvd3M9Wy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5taW5pcm93JyldLm1hcChyPT4oewogICAgc2VydmljZTpyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWs9c2VydmljZV0nKS52YWx1ZSwKICAgIHByaWNlOnIucXVlcnlTZWxlY3RvcignW2RhdGEtaz1wcmljZV0nKS52YWx1ZSwKICAgIGRpc2NvdW50OnIucXVlcnlTZWxlY3RvcignW2RhdGEtaz1kaXNjb3VudF0nKS52YWx1ZSwKICAgIGZpbmFsOnIucXVlcnlTZWxlY3RvcignW2RhdGEtaz1maW5hbF0nKS52YWx1ZSwKICAgIGFtb3VudDpwYXJzZUZsb2F0KHIucXVlcnlTZWxlY3RvcignW2RhdGEtaz1hbW91bnRdJykudmFsdWUpfHwwLAogICAgbW9udGhseTpyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWs9bW9udGhseV0nKS5jaGVja2VkPzE6MAogIH0pKTsKfQpmdW5jdGlvbiBmaWxsRWRpdG9yKCl7CiAgaWYoIWRhdGEuYnJhbmQpZGF0YS5icmFuZD1pc01hc3Rlckh1YigpPydXRUJUUklYSUEnOifQmNC80LUg0L3QsCDRhNC40YDQvNCwJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiX29uZV90aW1lJykuY2xhc3NMaXN0LnRvZ2dsZSgnb24nLGRhdGEudHlwZSE9PSdtb250aGx5Jyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYl9tb250aGx5JykuY2xhc3NMaXN0LnRvZ2dsZSgnb24nLGRhdGEudHlwZT09PSdtb250aGx5Jyk7CiAgWydudW0nLCdzdGF0dXMnLCdicmFuZCcsJ3N1YmplY3QnLCdjbGllbnQnLCdncmVldGluZycsJ2ludHJvJywnaXNzdWVfZGF0ZScsJ3ZhbGlkX2RheXMnLCd3b3JrX2RheXMnLCdwYXltZW50Jywnbm90ZXMnLCdwcmVwYXJlZF9ieScsJ2FjY2VwdGVkX2J5JywnY29udGFjdHMnXS5mb3JFYWNoKGlkPT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWU9ZGF0YVtpZF18fCcnKTsKICByZW5kZXJHcm91cEVkaXRvcigpOyByZW5kZXJSb3dzRWRpdG9yKCk7Cn0KZnVuY3Rpb24gYmluZExpdmUoKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYSxzZWxlY3QnKS5mb3JFYWNoKGVsPT57ZWwub25pbnB1dD0oKT0+e3JlYWRFZGl0b3IoKTtyZW5kZXJBbGwoKTt9O2VsLm9uY2hhbmdlPSgpPT57cmVhZEVkaXRvcigpO3JlbmRlckFsbCgpO307fSk7fQpmdW5jdGlvbiByZW5kZXJHcm91cEVkaXRvcigpewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmNFZGl0b3InKS5pbm5lckhUTUw9KGRhdGEuZ3JvdXBzfHxbXSkubWFwKChnLGdpKT0+CiAgICAnPGRpdiBjbGFzcz0ic3ZjYm94Ij48bGFiZWw+0JPRgNGD0L/QsDwvbGFiZWw+PGlucHV0IGRhdGEtaz0iZ3QiIHZhbHVlPSInK2VzYyhnLnRpdGxlKSsnIj4nKwogICAgJzxkaXYgaWQ9Iml0ZW1zXycrZ2krJyI+JysoZy5pdGVtc3x8W10pLm1hcCgoaXQsaWkpPT5pdGVtSHRtbChnaSxpaSxpdCkpLmpvaW4oJycpKyc8L2Rpdj4nKwogICAgJzxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iYWRkSXRlbSgnK2dpKycpIj4rINCf0L7QtNGC0L7Rh9C60LA8L2J1dHRvbj4gPGJ1dHRvbiBjbGFzcz0iYnRuIGQiIG9uY2xpY2s9ImRlbEdyb3VwKCcrZ2krJykiPtCY0LfRgtGA0LjQuSDQs9GA0YPQv9CwPC9idXR0b24+PC9kaXY+JwogICkuam9pbignJyk7CiAgYmluZExpdmUoKTsKfQpmdW5jdGlvbiBpdGVtSHRtbChnaSxpaSxpdCl7CiAgcmV0dXJuICc8ZGl2IGNsYXNzPSJzdmNpdGVtIiBzdHlsZT0iYm9yZGVyLXRvcDoxcHggc29saWQgI2VkZjJlODttYXJnaW4tdG9wOjlweDtwYWRkaW5nLXRvcDo5cHgiPjxsYWJlbD7Ql9Cw0LPQu9Cw0LLQuNC1PC9sYWJlbD48aW5wdXQgZGF0YS1rPSJpdCIgdmFsdWU9IicrZXNjKGl0LnRpdGxlKSsnIj4nKwogICAgJzxsYWJlbD7QkdGD0LvQtdGC0Lg8L2xhYmVsPicrKGl0LmJ1bGxldHN8fFtdKS5tYXAoKGIsYmkpPT4nPGRpdiBjbGFzcz0iaXRlbXJvdyI+PGlucHV0IGRhdGEtaz0iYnVsIiB2YWx1ZT0iJytlc2MoYikrJyI+PGJ1dHRvbiBvbmNsaWNrPSJkZWxCdWxsZXQoJytnaSsnLCcraWkrJywnK2JpKycpIj7DlzwvYnV0dG9uPjwvZGl2PicpLmpvaW4oJycpKwogICAgJzxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iYWRkQnVsbGV0KCcrZ2krJywnK2lpKycpIj4rINCR0YPQu9C10YI8L2J1dHRvbj4gPGJ1dHRvbiBjbGFzcz0iYnRuIGQiIG9uY2xpY2s9ImRlbEl0ZW0oJytnaSsnLCcraWkrJykiPtCY0LfRgtGA0LjQuTwvYnV0dG9uPjwvZGl2Pic7Cn0KZnVuY3Rpb24gcmVuZGVyUm93c0VkaXRvcigpewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb3dzRWRpdG9yJykuaW5uZXJIVE1MPShkYXRhLnJvd3N8fFtdKS5tYXAoKHIsaSk9PgogICAgJzxkaXYgY2xhc3M9Im1pbmlyb3ciPjxkaXY+PGxhYmVsPtCj0YHQu9GD0LPQsDwvbGFiZWw+PHRleHRhcmVhIGRhdGEtaz0ic2VydmljZSI+Jytlc2Moci5zZXJ2aWNlKSsnPC90ZXh0YXJlYT48L2Rpdj4nKwogICAgJzxkaXY+PGxhYmVsPtCm0LXQvdCwPC9sYWJlbD48dGV4dGFyZWEgZGF0YS1rPSJwcmljZSI+Jytlc2Moci5wcmljZSkrJzwvdGV4dGFyZWE+PC9kaXY+JysKICAgICc8ZGl2PjxsYWJlbD7QntGC0YHRgi48L2xhYmVsPjxpbnB1dCBkYXRhLWs9ImRpc2NvdW50IiB2YWx1ZT0iJytlc2Moci5kaXNjb3VudCkrJyI+PC9kaXY+JysKICAgICc8ZGl2PjxsYWJlbD7QmtGA0LDQudC90LA8L2xhYmVsPjx0ZXh0YXJlYSBkYXRhLWs9ImZpbmFsIj4nK2VzYyhyLmZpbmFsKSsnPC90ZXh0YXJlYT48aW5wdXQgZGF0YS1rPSJhbW91bnQiIHR5cGU9Im51bWJlciIgc3RlcD0iMC4wMSIgdmFsdWU9IicrKHIuYW1vdW50fHwwKSsnIiB0aXRsZT0i0KHRg9C80LAg0LfQsCDQvtCx0YnQviI+PGxhYmVsIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTpub25lO2xldHRlci1zcGFjaW5nOjAiPjxpbnB1dCBkYXRhLWs9Im1vbnRobHkiIHR5cGU9ImNoZWNrYm94IiAnKyhyLm1vbnRobHk/J2NoZWNrZWQnOicnKSsnIHN0eWxlPSJ3aWR0aDphdXRvIj4g0LzQtdGB0LXRh9C90L48L2xhYmVsPjwvZGl2PicrCiAgICAnPGJ1dHRvbiBvbmNsaWNrPSJkZWxSb3coJytpKycpIj7DlzwvYnV0dG9uPjwvZGl2PicKICApLmpvaW4oJycpOwogIGJpbmRMaXZlKCk7Cn0KZnVuY3Rpb24gYWRkR3JvdXAoKXtyZWFkRWRpdG9yKCk7ZGF0YS5ncm91cHMucHVzaCh7dGl0bGU6J9Cd0L7QstCwINCz0YDRg9C/0LAnLGl0ZW1zOlt7dGl0bGU6J9Cd0L7QstCwINGD0YHQu9GD0LPQsDonLGJ1bGxldHM6WyfQntC/0LjRgdCw0L3QuNC1J119IF19KTtyZW5kZXJHcm91cEVkaXRvcigpO3JlbmRlckFsbCgpO30KZnVuY3Rpb24gZGVsR3JvdXAoaSl7cmVhZEVkaXRvcigpO2RhdGEuZ3JvdXBzLnNwbGljZShpLDEpO3JlbmRlckdyb3VwRWRpdG9yKCk7cmVuZGVyQWxsKCk7fQpmdW5jdGlvbiBhZGRJdGVtKGdpKXtyZWFkRWRpdG9yKCk7ZGF0YS5ncm91cHNbZ2ldLml0ZW1zLnB1c2goe3RpdGxlOifQndC+0LLQsCDQv9C+0LTRgtC+0YfQutCwOicsYnVsbGV0czpbJ9Ce0L/QuNGB0LDQvdC40LUnXX0pO3JlbmRlckdyb3VwRWRpdG9yKCk7cmVuZGVyQWxsKCk7fQpmdW5jdGlvbiBkZWxJdGVtKGdpLGlpKXtyZWFkRWRpdG9yKCk7ZGF0YS5ncm91cHNbZ2ldLml0ZW1zLnNwbGljZShpaSwxKTtyZW5kZXJHcm91cEVkaXRvcigpO3JlbmRlckFsbCgpO30KZnVuY3Rpb24gYWRkQnVsbGV0KGdpLGlpKXtyZWFkRWRpdG9yKCk7ZGF0YS5ncm91cHNbZ2ldLml0ZW1zW2lpXS5idWxsZXRzLnB1c2goJ9Cd0L7QsiDQsdGD0LvQtdGCJyk7cmVuZGVyR3JvdXBFZGl0b3IoKTtyZW5kZXJBbGwoKTt9CmZ1bmN0aW9uIGRlbEJ1bGxldChnaSxpaSxiaSl7cmVhZEVkaXRvcigpO2RhdGEuZ3JvdXBzW2dpXS5pdGVtc1tpaV0uYnVsbGV0cy5zcGxpY2UoYmksMSk7cmVuZGVyR3JvdXBFZGl0b3IoKTtyZW5kZXJBbGwoKTt9CmZ1bmN0aW9uIGFkZFJvdygpe3JlYWRFZGl0b3IoKTtkYXRhLnJvd3MucHVzaCh7c2VydmljZTon0J3QvtCy0LAg0YPRgdC70YPQs9CwJyxwcmljZTon4oKsIDAsMDAnLGRpc2NvdW50OictJyxmaW5hbDon4oKsIDAsMDAnLGFtb3VudDowfSk7cmVuZGVyUm93c0VkaXRvcigpO3JlbmRlckFsbCgpO30KZnVuY3Rpb24gZGVsUm93KGkpe3JlYWRFZGl0b3IoKTtkYXRhLnJvd3Muc3BsaWNlKGksMSk7cmVuZGVyUm93c0VkaXRvcigpO3JlbmRlckFsbCgpO30KCmZ1bmN0aW9uIHRvdGFscygpe2NvbnN0IG9uZT0oZGF0YS5yb3dzfHxbXSkuZmlsdGVyKHI9PiFyLm1vbnRobHkpLnJlZHVjZSgoYSxyKT0+YSsoK3IuYW1vdW50fHwwKSwwKTtjb25zdCBtb249KGRhdGEucm93c3x8W10pLmZpbHRlcihyPT5yLm1vbnRobHkpLnJlZHVjZSgoYSxyKT0+YSsoK3IuYW1vdW50fHwwKSwwKTtyZXR1cm4ge29uZSxtb259O30KZnVuY3Rpb24gdmFsaWREYXRlKCl7Y29uc3QgZD1uZXcgRGF0ZSgoZGF0YS5pc3N1ZV9kYXRlfHx0b2RheSgpKSsnVDAwOjAwOjAwJyk7ZC5zZXREYXRlKGQuZ2V0RGF0ZSgpKyhwYXJzZUludChkYXRhLnZhbGlkX2RheXMpfHwzMCkpO3JldHVybiBkLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7fQpmdW5jdGlvbiByb3dzSHRtbCgpe2NvbnN0IHQ9dG90YWxzKCk7cmV0dXJuICc8dGFibGUgY2xhc3M9InByaWNlIj48dGhlYWQ+PHRyPjx0aD7Qo9GB0LvRg9Cz0LA8L3RoPjx0aD7QptC10L3QsDwvdGg+PHRoPtCe0YLRgdGC0YrQv9C60LA8L3RoPjx0aD7QmtGA0LDQudC90LAg0YbQtdC90LA8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JysKICAoZGF0YS5yb3dzfHxbXSkubWFwKHI9Pic8dHI+PHRkPicrbmwoci5zZXJ2aWNlKSsnPC90ZD48dGQ+JytubChyLnByaWNlKSsnPC90ZD48dGQ+JytubChyLmRpc2NvdW50KSsnPC90ZD48dGQ+JytubChyLmZpbmFsKSsnPC90ZD48L3RyPicpLmpvaW4oJycpKwogICc8dHIgY2xhc3M9InRvdGFsIj48dGQ+0J7QsdGJ0L46PC90ZD48dGQgY29sc3Bhbj0iMyI+Jyttb25leSh0Lm9uZSkrKHQubW9uPyc8c3BhbiBjbGFzcz0ic21hbGwiPtCc0LXRgdC10YfQvdC+OiAnK21vbmV5KHQubW9uKSsnPC9zcGFuPic6JycpKyc8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPic7Cn0KZnVuY3Rpb24gcmVuZGVyQWxsKCl7CiAgY29uc3QgdD10b3RhbHMoKTsKICBjb25zdCBicmFuZD0oZGF0YS5icmFuZHx8J9CY0LzQtSDQvdCwINGE0LjRgNC80LAnKS50cmltKCl8fCfQmNC80LUg0L3QsCDRhNC40YDQvNCwJzsKICBjb25zdCBtYXJrPShicmFuZC5jaGFyQXQoMCl8fCfQnicpLnRvVXBwZXJDYXNlKCk7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndtJykuZm9yRWFjaChlbD0+e2VsLnRleHRDb250ZW50PW1hcms7fSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UxJykuaW5uZXJIVE1MPQogICAgJzxkaXYgY2xhc3M9ImxvZ28iPicrZXNjKGJyYW5kKSsnPC9kaXY+PGRpdiBjbGFzcz0idGl0bGUiPjxoMj7QntGE0LXRgNGC0LAg4oSWICcrZXNjKGRhdGEubnVtfHwnJykrJzwvaDI+PGRpdiBjbGFzcz0ic3ViamVjdCI+Jytlc2MoZGF0YS5zdWJqZWN0fHwnJykrJzwvZGl2PjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0ibGVhZCI+PGI+0JTQvjo8L2I+ICcrZXNjKGRhdGEuY2xpZW50fHwnJykrJzwvZGl2PjxkaXYgY2xhc3M9ImxlYWQiPicrZXNjKGRhdGEuZ3JlZXRpbmd8fCcnKSsnPC9kaXY+PGRpdiBjbGFzcz0ibGVhZCI+JytubChkYXRhLmludHJvfHwnJykrJzwvZGl2PicrCiAgICAoZGF0YS5ncm91cHN8fFtdKS5tYXAoZz0+JzxkaXYgY2xhc3M9InJvbWFuIj4nK2VzYyhnLnRpdGxlKSsnPC9kaXY+JysoZy5pdGVtc3x8W10pLm1hcChpdD0+JzxkaXYgY2xhc3M9InN2YyI+PGgzPicrZXNjKGl0LnRpdGxlKSsnPC9oMz48dWw+JysoaXQuYnVsbGV0c3x8W10pLm1hcChiPT4nPGxpPicrZXNjKGIpKyc8L2xpPicpLmpvaW4oJycpKyc8L3VsPjwvZGl2PicpLmpvaW4oJycpKS5qb2luKCcnKSsKICAgICc8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj40LiDQptC10L3QvtCy0LAg0LvQuNGB0YLQsDo8L2Rpdj4nK3Jvd3NIdG1sKCkrCiAgICAnPGRpdiBjbGFzcz0iZm9vdGVyLW5vdGUiPicrbmwoKGRhdGEuY29udGFjdHN8fCcnKS5zcGxpdCgnXFxuJylbMF18fCfQktGB0LjRh9C60Lgg0YbQtdC90Lgg0YHQsCDQsdC10Lcg0JTQlNChICEnKSsnPC9kaXY+PGRpdiBjbGFzcz0iY29udGFjdCI+JytubCgoZGF0YS5jb250YWN0c3x8JycpLnNwbGl0KCdcXG4nKS5zbGljZSgxKS5qb2luKCdcXG4nKSkrJzwvZGl2Pic7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UyJykuaW5uZXJIVE1MPQogICAgJzxkaXYgY2xhc3M9InRlcm1zIj48aDM+NS4g0KHRgNC+0Log0LfQsCDQuNC30YDQsNCx0L7RgtC60LA6PC9oMz48dWw+PGxpPtCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQv9GA0LXQtNC+0YHRgtCw0LLRjyDRgdGA0L7QuiDQt9CwINC40LfRgNCw0LHQvtGC0LrQsCDQtNC+ICcrZXNjKGRhdGEud29ya19kYXlzfHwzMCkrJyDRgNCw0LHQvtGC0L3QuCDQtNC90LguPC9saT48L3VsPicrCiAgICAnPGgzPjYuINCf0LvQsNGJ0LDQvdC1INC4INGB0YDQvtC60L7QstC1OjwvaDM+PHVsPicrKGRhdGEucGF5bWVudHx8JycpLnNwbGl0KCdcXG4nKS5maWx0ZXIoQm9vbGVhbikubWFwKHg9Pic8bGk+Jytlc2MoeCkrJzwvbGk+Jykuam9pbignJykrCiAgICAnPGxpPtCe0YTQtdGA0YLQsNGC0LAg0YHQtSDQuNC30LTQsNCy0LAg0L3QsCDQtNCw0YLQsDogJytkYXRlQmcoZGF0YS5pc3N1ZV9kYXRlfHx0b2RheSgpKSsnPC9saT48bGk+0J7RhNC10YDRgtCw0YLQsCDQtSDQstCw0LvQuNC00L3QsCDQtNC+OiAnK2RhdGVCZyh2YWxpZERhdGUoKSkrJzwvbGk+PC91bD4nKwogICAgJzxoMz44LiDQlNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0LHQtdC70LXQttC60Lg6PC9oMz48dWwgY2xhc3M9Im5vdGVzIj4nKyhkYXRhLm5vdGVzfHwnJykuc3BsaXQoJ1xcbicpLmZpbHRlcihCb29sZWFuKS5tYXAoeD0+JzxsaT4nK2VzYyh4KSsnPC9saT4nKS5qb2luKCcnKSsnPC91bD48L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9InNpZ25zIj48ZGl2PjxkaXY+0JjQt9Cz0L7RgtCy0LjQuzo8L2Rpdj48ZGl2IGNsYXNzPSJzaWdsaW5lIj48L2Rpdj48ZGl2IGNsYXNzPSJzaWctbmFtZSI+LyAnK2VzYyhkYXRhLnByZXBhcmVkX2J5fHwnJykrJyAvPC9kaXY+PC9kaXY+PGRpdj48ZGl2PtCf0YDQuNC10Ls6PC9kaXY+PGRpdiBjbGFzcz0ic2lnbGluZSI+PC9kaXY+PGRpdiBjbGFzcz0ic2lnLW5hbWUiPi8gJytlc2MoZGF0YS5hY2NlcHRlZF9ieXx8JycpKycgLzwvZGl2PjwvZGl2PjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iZm9vdGVyLW5vdGUiIHN0eWxlPSJtYXJnaW4tdG9wOjcwcHgiPicrbmwoKGRhdGEuY29udGFjdHN8fCcnKS5zcGxpdCgnXFxuJylbMF18fCfQktGB0LjRh9C60Lgg0YbQtdC90Lgg0YHQsCDQsdC10Lcg0JTQlNChICEnKSsnPC9kaXY+PGRpdiBjbGFzcz0iY29udGFjdCI+JytubCgoZGF0YS5jb250YWN0c3x8JycpLnNwbGl0KCdcXG4nKS5zbGljZSgxKS5qb2luKCdcXG4nKSkrJzwvZGl2Pic7CiAgcmV0dXJuIHQ7Cn0KYXN5bmMgZnVuY3Rpb24gc2F2ZU9mZmVyKCl7CiAgdHJ5ewogICAgcmVhZEVkaXRvcigpOyBjb25zdCB0PXRvdGFscygpOwogICAgY29uc3Qgc2F2ZWQ9YXdhaXQgYWYoJ29mZmVycycsJ1BPU1QnLHtpZDpvZmZlcklkfHx1bmRlZmluZWQsbnVtOmRhdGEubnVtLGNsaWVudDpkYXRhLmNsaWVudCxzZXJ2aWNlOmRhdGEuc3ViamVjdCx0b3RhbDp0Lm9uZSxzdGF0dXM6ZGF0YS5zdGF0dXMsb2ZmZXJfdHlwZTpkYXRhLnR5cGUsZGV0YWlsczpkYXRhfSk7CiAgICBvZmZlcklkPXNhdmVkLmlkOyBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCcnLCdvZmZlci5odG1sP2lkPScrZW5jb2RlVVJJQ29tcG9uZW50KG9mZmVySWQpKTsgdG9hc3QoJ9Ce0YTQtdGA0YLQsNGC0LAg0LUg0LfQsNC/0LDQt9C10L3QsCcpOwogIH1jYXRjaChlKXt0b2FzdCgn0JPRgNC10YjQutCwOiAnK2UubWVzc2FnZSk7fQp9CmFzeW5jIGZ1bmN0aW9uIGR1cGxpY2F0ZU9mZmVyKCl7cmVhZEVkaXRvcigpO29mZmVySWQ9Jyc7ZGF0YS5udW09bnVtRGVmYXVsdCgpO2ZpbGxFZGl0b3IoKTtyZW5kZXJBbGwoKTthd2FpdCBzYXZlT2ZmZXIoKTt9CmFzeW5jIGZ1bmN0aW9uIGluaXQoKXsKICBpZighKGF3YWl0IG1vZHVsZUd1YXJkKCdvZmZlcnMnLCfQntGE0LXRgNGC0LjRgtC1JykpKXJldHVybjsKICBhd2FpdCBsb2FkT2ZmZXJDb250ZXh0KCk7CiAgaWYob2ZmZXJJZCl7CiAgICB0cnl7Y29uc3Qgcm93PWF3YWl0IGFmKCdvZmZlcnMnLCdHRVQnLG51bGwsJyZpZD0nK2VuY29kZVVSSUNvbXBvbmVudChvZmZlcklkKSk7ZGF0YT1yb3cuZGV0YWlscz9KU09OLnBhcnNlKHJvdy5kZXRhaWxzKTp0ZW1wbGF0ZShyb3cub2ZmZXJfdHlwZXx8J29uZV90aW1lJyk7ZGF0YS5udW09cm93Lm51bXx8ZGF0YS5udW07ZGF0YS5jbGllbnQ9cm93LmNsaWVudHx8ZGF0YS5jbGllbnQ7ZGF0YS5zdWJqZWN0PXJvdy5zZXJ2aWNlfHxkYXRhLnN1YmplY3Q7ZGF0YS5zdGF0dXM9cm93LnN0YXR1c3x8ZGF0YS5zdGF0dXM7fWNhdGNoKGUpe3RvYXN0KCfQk9GA0LXRiNC60LA6ICcrZS5tZXNzYWdlKTtkYXRhPXRlbXBsYXRlKHFzLmdldCgndHlwZScpfHwnb25lX3RpbWUnKTt9CiAgfSBlbHNlIGRhdGE9dGVtcGxhdGUocXMuZ2V0KCd0eXBlJyl8fCdvbmVfdGltZScpOwogIGlmKCFkYXRhLmlzc3VlX2RhdGUpZGF0YS5pc3N1ZV9kYXRlPXRvZGF5KCk7IGlmKCFkYXRhLm51bSlkYXRhLm51bT1udW1EZWZhdWx0KCk7CiAgZmlsbEVkaXRvcigpOyByZW5kZXJBbGwoKTsKfQppbml0KCk7CmFzeW5jIGZ1bmN0aW9uIG1vZHVsZUd1YXJkKGtleSxsYWJlbCl7CiAgdHJ5ewogICAgYXdhaXQgc3luY0xpY2Vuc2VGcm9tTWFzdGVyKCk7CiAgICBjb25zdCByPWF3YWl0IGZldGNoKEFQSSsnP2FjdGlvbj1icmFuZGluZ19zZXR0aW5ncycpOwogICAgY29uc3Qgaj1hd2FpdCByLmpzb24oKTsKICAgIGNvbnN0IGQ9KGomJmouZGF0YSl8fHt9OwogICAgaWYoZC5saWNlbnNlX3N0YXRlPT09J2xvY2tlZCd8fGQubGljZW5zZV9zdGF0ZT09PSdpbnZhbGlkJyl7CiAgICAgIHJlbmRlckJsb2NrZWQoZC5saWNlbnNlX21lc3NhZ2V8fCfQm9C40YbQtdC90LfRitGCINC90LUg0LUg0LDQutGC0LjQstC10L0uJyk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmKGQubW9kdWxlc19lbmFibGVkJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZC5tb2R1bGVzX2VuYWJsZWQsa2V5KSYmIU51bWJlcihkLm1vZHVsZXNfZW5hYmxlZFtrZXldKSl7CiAgICAgIHJlbmRlckJsb2NrZWQoKGxhYmVsfHwn0JzQvtC00YPQu9GK0YInKSsnINC1INC40LfQutC70Y7Rh9C10L0g0LfQsCDRgtCw0LfQuCDQuNC90YHRgtCw0LvQsNGG0LjRjy4nKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH1jYXRjaChlKXt9CiAgcmV0dXJuIHRydWU7Cn0KYXN5bmMgZnVuY3Rpb24gc3luY0xpY2Vuc2VGcm9tTWFzdGVyKCl7CiAgdHJ5ewogICAgY29uc3QgYz1hd2FpdCBhZignbGljZW5zZV9jbGllbnRfY29uZmlnJyk7CiAgICBpZighY3x8IWMudmVyaWZ5X3VybClyZXR1cm47CiAgICBjb25zdCBycj1hd2FpdCBmZXRjaChjLnZlcmlmeV91cmwse2NhY2hlOiduby1zdG9yZScsbW9kZTonY29ycyd9KTsKICAgIGNvbnN0IHBheWxvYWQ9YXdhaXQgcnIuanNvbigpOwogICAgaWYocGF5bG9hZCYmcGF5bG9hZC5zdGF0ZSkgYXdhaXQgYWYoJ2xpY2Vuc2Vfc3luYycsJ1BPU1QnLHtwYXlsb2FkfSk7CiAgfWNhdGNoKGUpe30KfQpmdW5jdGlvbiByZW5kZXJCbG9ja2VkKG1zZyl7CiAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9Im1pbi1oZWlnaHQ6MTAwdmg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiMwYTBhMTI7Y29sb3I6I2VjZWNmNTtmb250LWZhbWlseTpETSBTYW5zLHNhbnMtc2VyaWYiPjxkaXYgc3R5bGU9Im1heC13aWR0aDo0NjBweDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEpO2JvcmRlci1yYWRpdXM6MThweDtwYWRkaW5nOjM4cHggMzBweCI+PGgyIHN0eWxlPSJmb250LXNpemU6MjJweDttYXJnaW4tYm90dG9tOjEwcHgiPtCc0L7QtNGD0LvRitGCINC1INC30LDQutC70Y7Rh9C10L08L2gyPjxwIHN0eWxlPSJjb2xvcjojYTBhMGMwO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNiI+Jytlc2MobXNnKSsnPC9wPjwvZGl2PjwvZGl2Pic7Cn0KPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=', 'waybills.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0J/RitGC0L3QuCDQu9C40YHRgtC+0LLQtSDigJQgV2VidHJpeGlhIEh1YjwvdGl0bGU+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9RE0rU2Fuczp3Z2h0QDMwMDs0MDA7NTAwOzYwMCZmYW1pbHk9RE0rTW9ubzp3Z2h0QDQwMDs1MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ey0tYmc6I2YwZjBmODstLXN1cjojZmZmOy0tc3VyMjojZjVmNWZjOy0tc3VyMzojZWFlYWY1Oy0tYnJkOnJnYmEoMCwwLDAsLjA4KTstLXR4OiMxYTFhMmU7LS10eDI6IzRhNGE2YTstLXR4MzojODg4OGFhOwotLWFjYzojNmM2M2ZmOy0tZ3JuOiMyMmM1NWU7LS1nZGltOnJnYmEoMzQsMTk3LDk0LC4xNCk7LS1yZWQ6I2VmNDQ0NDstLXJkaW06cmdiYSgyMzksNjgsNjgsLjE0KTstLWZuOidETSBTYW5zJyxzYW5zLXNlcmlmfQoqe21hcmdpbjowO3BhZGRpbmc6MDtib3gtc2l6aW5nOmJvcmRlci1ib3h9CmJvZHl7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLXR4KTttaW4taGVpZ2h0OjEwMHZoO3BhZGRpbmc6MjJweCAxOHB4IDYwcHh9Ci53cmFwe21heC13aWR0aDoxMTUwcHg7bWFyZ2luOjAgYXV0b30KLnRvcHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTZweDtmbGV4LXdyYXA6d3JhcDtnYXA6MTBweH0KaDF7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6NjAwfQouc3Vie2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoycHh9Ci5sbmt7Y29sb3I6dmFyKC0tYWNjKTt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXNpemU6MTJweH0KLnBhbmVse2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxNnB4O3BhZGRpbmc6MThweH0KLnBoe2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNHB4O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHh9Ci5wdHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDB9Ci5idG57cGFkZGluZzo5cHggMTVweDtib3JkZXItcmFkaXVzOjlweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MDB9Ci5idG4ucHtiYWNrZ3JvdW5kOnZhcigtLWFjYyk7Y29sb3I6I2ZmZn0KLmJ0bi5ze2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Y29sb3I6dmFyKC0tdHgyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCl9Ci5idG4uZHtiYWNrZ3JvdW5kOnZhcigtLXJkaW0pO2NvbG9yOnZhcigtLXJlZCl9CnRhYmxle3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQtc2l6ZToxMi41cHh9CnRoe3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjlweCAxMHB4O2NvbG9yOnZhcigtLXR4Myk7Zm9udC13ZWlnaHQ6NTAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7d2hpdGUtc3BhY2U6bm93cmFwfQp0ZHtwYWRkaW5nOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKX0KLmJhZGdle3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcn0KLmJhZGdlLmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWdkaW0pO2NvbG9yOiMxNTgwM2R9Ci5iYWRnZS5pbmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLXN1cjMpO2NvbG9yOnZhcigtLXR4Myl9Ci5hY3Rpb25ze2Rpc3BsYXk6ZmxleDtnYXA6NnB4fQouaWNvbmJ0bntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjdweDtwYWRkaW5nOjVweCA5cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEycHh9CmxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA2ZW07bWFyZ2luOjEwcHggMCA1cHh9CmlucHV0LHRleHRhcmVhe3dpZHRoOjEwMCU7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMHB4IDEycHg7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2ZvbnQtc2l6ZToxM3B4O291dGxpbmU6bm9uZX0KaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYyl9Ci5yb3cye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTBweH0KLnJvdzN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcjtnYXA6MTBweH0KLm1ve3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDM1LC41KTtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3otaW5kZXg6OTk5O3BhZGRpbmc6MzBweCAxNHB4O292ZXJmbG93OmF1dG99Ci5tby5zaG93e2Rpc3BsYXk6ZmxleH0KLm1ie2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoyMnB4O3dpZHRoOjEwMCU7bWF4LXdpZHRoOjY0MHB4O3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7cmlnaHQ6MjBweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToyMHB4fQoudG9hc3R7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjIwcHg7cmlnaHQ6MjBweDtiYWNrZ3JvdW5kOiMxYTFhMmU7Y29sb3I6I2ZmZjtwYWRkaW5nOjEycHggMThweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpub25lO3otaW5kZXg6MTIwMH0KI3ByaW50QXJlYXtkaXNwbGF5Om5vbmV9CkBtZWRpYSBwcmludHsKICBib2R5ICp7dmlzaWJpbGl0eTpoaWRkZW59CiAgI3ByaW50QXJlYSwjcHJpbnRBcmVhICp7dmlzaWJpbGl0eTp2aXNpYmxlfQogICNwcmludEFyZWF7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtwYWRkaW5nOjIwcHggMzBweH0KfQoucGRvYyBoMntmb250LXNpemU6MTZweDt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tYm90dG9tOjIwcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNWVtfQoucGRvYyB0YWJsZXttYXJnaW4tdG9wOjE2cHh9Ci5wZG9jIHRkLC5wZG9jIHRoe2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjhweH0KLnBkb2MgLnNpZ3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDo1MHB4O2ZvbnQtc2l6ZToxMnB4fQoucGRvYyAuc2lnIGRpdnt0ZXh0LWFsaWduOmNlbnRlcn0KLnBkb2MgLnNpZyAubGluZXtib3JkZXItdG9wOjFweCBzb2xpZCAjMzMzO21hcmdpbi10b3A6MzRweDtwYWRkaW5nLXRvcDo0cHg7d2lkdGg6MTYwcHh9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9IndyYXAiPgogIDxkaXYgY2xhc3M9InRvcCI+CiAgICA8ZGl2PjxoMT7wn5qaINCf0YrRgtC90Lgg0LvQuNGB0YLQvtCy0LU8L2gxPjxkaXYgY2xhc3M9InN1YiI+0JzQn9ChLCDRiNC+0YTRjNC+0YDQuCwg0LzQsNGA0YjRgNGD0YLQuCwg0LrQuNC70L7QvNC10YLRgNCw0LYsINCz0L7RgNC40LLQvjwvZGl2PjwvZGl2PgogICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgY2xhc3M9ImxuayI+4oaQINCe0LHRgNCw0YLQvdC+INC60YrQvCBIdWI8L2E+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBhbmVsIj4KICAgIDxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0JLRgdC40YfQutC4INC/0YrRgtC90Lgg0LvQuNGB0YLQvtCy0LU8L2Rpdj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ib3Blbk5ldygpIj4rINCd0L7QsiDQv9GK0YLQtdC9INC70LjRgdGCPC9idXR0b24+PC9kaXY+CiAgICA8dGFibGUgaWQ9InRibCI+PHRoZWFkPjx0cj48dGg+4oSWPC90aD48dGg+0JTQsNGC0LA8L3RoPjx0aD7QqNC+0YTRjNC+0YA8L3RoPjx0aD7QnNCf0KE8L3RoPjx0aD7QnNCw0YDRiNGA0YPRgjwvdGg+PHRoPtCa0Lw8L3RoPjx0aD7QodGC0LDRgtGD0YE8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD7Ql9Cw0YDQtdC20LTQsOKApjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBjbGFzcz0ibW8iIGlkPSJ3Yk1vZGFsIj48ZGl2IGNsYXNzPSJtYiI+CiAgPHNwYW4gY2xhc3M9ImNsb3NlIiBvbmNsaWNrPSJjbG9zZU1vZGFsKCkiPuKclTwvc3Bhbj4KICA8aDMgaWQ9Im1vZGFsVGl0bGUiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHg7Zm9udC1zaXplOjE1cHgiPtCd0L7QsiDQv9GK0YLQtdC9INC70LjRgdGCPC9oMz4KICA8ZGl2IGNsYXNzPSJyb3cyIj48ZGl2PjxsYWJlbD7QndC+0LzQtdGAPC9sYWJlbD48aW5wdXQgaWQ9IndfbnVtYmVyIj48L2Rpdj48ZGl2PjxsYWJlbD7QlNCw0YLQsDwvbGFiZWw+PGlucHV0IGlkPSJ3X2RhdGUiIHR5cGU9ImRhdGUiPjwvZGl2PjwvZGl2PgogIDxkaXYgY2xhc3M9InJvdzIiPjxkaXY+PGxhYmVsPtCo0L7RhNGM0L7RgDwvbGFiZWw+PGlucHV0IGlkPSJ3X2RyaXZlciI+PC9kaXY+PGRpdj48bGFiZWw+0JrQu9C40LXQvdGCL9C+0LHQtdC60YI8L2xhYmVsPjxpbnB1dCBpZD0id19jbGllbnQiPjwvZGl2PjwvZGl2PgogIDxkaXYgY2xhc3M9InJvdzIiPjxkaXY+PGxhYmVsPtCg0LXQsy4g0L3QvtC80LXRgCDQvdCwINCc0J/QoTwvbGFiZWw+PGlucHV0IGlkPSJ3X3BsYXRlIj48L2Rpdj48ZGl2PjxsYWJlbD7QktC40LQg0JzQn9ChPC9sYWJlbD48aW5wdXQgaWQ9IndfdnR5cGUiPjwvZGl2PjwvZGl2PgogIDxkaXYgY2xhc3M9InJvdzIiPjxkaXY+PGxhYmVsPtCc0LDRgNGI0YDRg9GCIOKAlCDQvtGCPC9sYWJlbD48aW5wdXQgaWQ9IndfZnJvbSI+PC9kaXY+PGRpdj48bGFiZWw+0JzQsNGA0YjRgNGD0YIg4oCUINC00L48L2xhYmVsPjxpbnB1dCBpZD0id190byI+PC9kaXY+PC9kaXY+CiAgPGRpdiBjbGFzcz0icm93MyI+CiAgICA8ZGl2PjxsYWJlbD7QmtC8INC90LDRh9Cw0LvQvjwvbGFiZWw+PGlucHV0IGlkPSJ3X2ttc3RhcnQiIHR5cGU9Im51bWJlciIgc3RlcD0iMC4xIj48L2Rpdj4KICAgIDxkaXY+PGxhYmVsPtCa0Lwg0LrRgNCw0Lk8L2xhYmVsPjxpbnB1dCBpZD0id19rbWVuZCIgdHlwZT0ibnVtYmVyIiBzdGVwPSIwLjEiPjwvZGl2PgogICAgPGRpdj48bGFiZWw+0JPQvtGA0LjQstC+ICjQuyk8L2xhYmVsPjxpbnB1dCBpZD0id19mdWVsIiB0eXBlPSJudW1iZXIiIHN0ZXA9IjAuMDEiPjwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InJvdzIiPjxkaXY+PGxhYmVsPtCg0LDQt9GF0L7QtCDQs9C+0YDQuNCy0L4gKNC70LIuL+KCrCk8L2xhYmVsPjxpbnB1dCBpZD0id19mdWVsY29zdCIgdHlwZT0ibnVtYmVyIiBzdGVwPSIwLjAxIj48L2Rpdj4KICA8ZGl2PjxsYWJlbD7QodGC0LDRgtGD0YE8L2xhYmVsPjxzZWxlY3QgaWQ9Indfc3RhdHVzIiBzdHlsZT0id2lkdGg6MTAwJTtiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEwcHggMTJweDtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEzcHgiPjxvcHRpb24gdmFsdWU9ImFjdGl2ZSI+0JDQutGC0LjQstC10L08L29wdGlvbj48b3B0aW9uIHZhbHVlPSJpbmFjdGl2ZSI+0J3QtdCw0LrRgtC40LLQtdC9PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iY29tcGxldGVkIj7Qn9GA0LjQutC70Y7Rh9C10L08L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj4KICA8bGFiZWw+0KLQvtCy0LDRgCAvINCx0LXQu9C10LbQutCwPC9sYWJlbD48dGV4dGFyZWEgaWQ9IndfY2FyZ28iIHJvd3M9IjIiPjwvdGV4dGFyZWE+CiAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luLXRvcDoxNHB4Ij4KICAgIDxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzYXZlV2IoKSI+8J+SviDQl9Cw0L/QsNC30Lg8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9ImJ0biBzIiBvbmNsaWNrPSJjbG9zZU1vZGFsKCkiPtCe0YLQutCw0Lc8L2J1dHRvbj4KICA8L2Rpdj4KPC9kaXY+PC9kaXY+Cgo8ZGl2IGlkPSJwcmludEFyZWEiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b2FzdCIgaWQ9InRvYXN0Ij48L2Rpdj4KCjxzY3JpcHQ+Cid1c2Ugc3RyaWN0JzsKdmFyIEFQST0oZnVuY3Rpb24oKXsKICB2YXIgc2F2ZWQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3d0X2FwaScpOwogIGlmKHNhdmVkKXJldHVybiBzYXZlZDsKICB2YXIgYmFzZT13aW5kb3cubG9jYXRpb24ub3JpZ2luK3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC93YXliaWxsc1wuaHRtbCQvLCcnKS5yZXBsYWNlKC9cLyQvLCcnKTsKICByZXR1cm4gYmFzZSsnL2FwaS5waHAnOwp9KSgpOwphc3luYyBmdW5jdGlvbiBhZihhY3Rpb24sbWV0aG9kLGJvZHkscXMpewogIG1ldGhvZD1tZXRob2R8fCdHRVQnO3FzPXFzfHwnJzsKICB0cnl7CiAgICB2YXIgbz17bWV0aG9kOm1ldGhvZCxoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbid9fTsKICAgIGlmKGJvZHkpby5ib2R5PUpTT04uc3RyaW5naWZ5KGJvZHkpOwogICAgdmFyIHI9YXdhaXQgZmV0Y2goQVBJKyc/YWN0aW9uPScrYWN0aW9uK3FzLG8pOwogICAgdmFyIGo9YXdhaXQgci5qc29uKCk7CiAgICByZXR1cm4gai5vaz9qLmRhdGE6bnVsbDsKICB9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKTtyZXR1cm4gbnVsbDt9Cn0KZnVuY3Rpb24gdG9hc3QobXNnKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9hc3QnKTt0LnRleHRDb250ZW50PW1zZzt0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztzZXRUaW1lb3V0KCgpPT50LnN0eWxlLmRpc3BsYXk9J25vbmUnLDI2MDApO30KZnVuY3Rpb24gb3Blbk1vZGFsKCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3diTW9kYWwnKS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7fQpmdW5jdGlvbiBjbG9zZU1vZGFsKCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3diTW9kYWwnKS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7fQoKdmFyIEVESVRfSUQ9bnVsbDsKZnVuY3Rpb24gb3Blbk5ldygpewogIEVESVRfSUQ9bnVsbDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxUaXRsZScpLnRleHRDb250ZW50PSfQndC+0LIg0L/RitGC0LXQvSDQu9C40YHRgic7CiAgWyd3X251bWJlcicsJ3dfZHJpdmVyJywnd19jbGllbnQnLCd3X3BsYXRlJywnd192dHlwZScsJ3dfZnJvbScsJ3dfdG8nLCd3X2NhcmdvJ10uZm9yRWFjaChpZD0+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnZhbHVlPScnKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19kYXRlJykudmFsdWU9bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2ttc3RhcnQnKS52YWx1ZT0wOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2ttZW5kJykudmFsdWU9MDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19mdWVsJykudmFsdWU9MDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19mdWVsY29zdCcpLnZhbHVlPTA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfc3RhdHVzJykudmFsdWU9J2FjdGl2ZSc7CiAgb3Blbk1vZGFsKCk7Cn0KZnVuY3Rpb24gb3BlbkVkaXQodyl7CiAgRURJVF9JRD13LmlkOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbFRpdGxlJykudGV4dENvbnRlbnQ9J9Cf0YrRgtC10L0g0LvQuNGB0YIg4oSWICcrdy5udW1iZXI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfbnVtYmVyJykudmFsdWU9dy5udW1iZXJ8fCcnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2RhdGUnKS52YWx1ZT13LmRhdGV8fCcnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2RyaXZlcicpLnZhbHVlPXcuZHJpdmVyX25hbWV8fCcnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2NsaWVudCcpLnZhbHVlPXcuY2xpZW50fHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19wbGF0ZScpLnZhbHVlPXcudmVoaWNsZV9wbGF0ZXx8Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfdnR5cGUnKS52YWx1ZT13LnZlaGljbGVfdHlwZXx8Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfZnJvbScpLnZhbHVlPXcucm91dGVfZnJvbXx8Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfdG8nKS52YWx1ZT13LnJvdXRlX3RvfHwnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19rbXN0YXJ0JykudmFsdWU9dy5rbV9zdGFydHx8MDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19rbWVuZCcpLnZhbHVlPXcua21fZW5kfHwwOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2Z1ZWwnKS52YWx1ZT13LmZ1ZWxfbGl0ZXJzfHwwOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2Z1ZWxjb3N0JykudmFsdWU9dy5mdWVsX2Nvc3R8fDA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfc3RhdHVzJykudmFsdWU9dy5zdGF0dXN8fCdhY3RpdmUnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2NhcmdvJykudmFsdWU9dy5jYXJnb3x8Jyc7CiAgb3Blbk1vZGFsKCk7Cn0KYXN5bmMgZnVuY3Rpb24gc2F2ZVdiKCl7CiAgdmFyIHBheWxvYWQ9ewogICAgaWQ6RURJVF9JRHx8dW5kZWZpbmVkLAogICAgbnVtYmVyOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X251bWJlcicpLnZhbHVlLCBkYXRlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2RhdGUnKS52YWx1ZSwKICAgIGRyaXZlcl9uYW1lOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2RyaXZlcicpLnZhbHVlLCBjbGllbnQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfY2xpZW50JykudmFsdWUsCiAgICB2ZWhpY2xlX3BsYXRlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X3BsYXRlJykudmFsdWUsIHZlaGljbGVfdHlwZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd192dHlwZScpLnZhbHVlLAogICAgcm91dGVfZnJvbTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19mcm9tJykudmFsdWUsIHJvdXRlX3RvOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X3RvJykudmFsdWUsCiAgICBrbV9zdGFydDpwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2ttc3RhcnQnKS52YWx1ZSl8fDAsIGttX2VuZDpwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3X2ttZW5kJykudmFsdWUpfHwwLAogICAgZnVlbF9saXRlcnM6cGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19mdWVsJykudmFsdWUpfHwwLCBmdWVsX2Nvc3Q6cGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19mdWVsY29zdCcpLnZhbHVlKXx8MCwKICAgIHN0YXR1czpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd19zdGF0dXMnKS52YWx1ZSwgY2FyZ286ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dfY2FyZ28nKS52YWx1ZQogIH07CiAgdmFyIHI9YXdhaXQgYWYoJ3dheWJpbGxzJywnUE9TVCcscGF5bG9hZCk7CiAgaWYocil7IHRvYXN0KCfQl9Cw0L/QuNGB0LDQvdC+Jyk7IGNsb3NlTW9kYWwoKTsgbG9hZExpc3QoKTsgfQp9CmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVdiKGlkKXsgaWYoIWNvbmZpcm0oJ9CY0LfRgtGA0LjQstCw0L3QtT8nKSlyZXR1cm47IGF3YWl0IGFmKCd3YXliaWxscycsJ0RFTEVURScsJycsICcmaWQ9JytpZCk7IGxvYWRMaXN0KCk7IH0KYXN5bmMgZnVuY3Rpb24gdG9nZ2xlU3RhdHVzKHcpewogIHZhciBuZXh0ID0gdy5zdGF0dXM9PT0nYWN0aXZlJyA/ICdpbmFjdGl2ZScgOiAnYWN0aXZlJzsKICBhd2FpdCBhZignd2F5YmlsbF9zdGF0dXMnLCdQT1NUJyx7aWQ6dy5pZCxzdGF0dXM6bmV4dH0pOwogIGxvYWRMaXN0KCk7Cn0KCnZhciBBTEw9W107CmFzeW5jIGZ1bmN0aW9uIGxvYWRMaXN0KCl7CiAgQUxMPWF3YWl0IGFmKCd3YXliaWxscycpfHxbXTsKICB2YXIgdGJsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YmwnKTsKICBpZighQUxMLmxlbmd0aCl7IHRibC5xdWVyeVNlbGVjdG9yKCd0Ym9keScpLmlubmVySFRNTD0nPHRyPjx0ZCBjb2xzcGFuPSI4IiBzdHlsZT0iY29sb3I6dmFyKC0tdHgzKSI+0J3Rj9C80LAg0L/RitGC0L3QuCDQu9C40YHRgtC+0LLQtTwvdGQ+PC90cj4nOyByZXR1cm47IH0KICB2YXIgaHRtbD0nPHRoZWFkPjx0cj48dGg+4oSWPC90aD48dGg+0JTQsNGC0LA8L3RoPjx0aD7QqNC+0YTRjNC+0YA8L3RoPjx0aD7QnNCf0KE8L3RoPjx0aD7QnNCw0YDRiNGA0YPRgjwvdGg+PHRoPtCa0Lw8L3RoPjx0aD7QodGC0LDRgtGD0YE8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICBBTEwuZm9yRWFjaCh3PT57CiAgICB2YXIga209KHBhcnNlRmxvYXQody5rbV9lbmR8fDApLXBhcnNlRmxvYXQody5rbV9zdGFydHx8MCkpLnRvRml4ZWQoMSk7CiAgICBodG1sKz0nPHRyPjx0ZD4nK3cubnVtYmVyKyc8L3RkPjx0ZD4nK3cuZGF0ZSsnPC90ZD48dGQ+Jyt3LmRyaXZlcl9uYW1lKyc8L3RkPjx0ZD4nK3cudmVoaWNsZV9wbGF0ZSsnPC90ZD4nKwogICAgICAnPHRkPicrdy5yb3V0ZV9mcm9tKycg4oaSICcrdy5yb3V0ZV90bysnPC90ZD48dGQ+JytrbSsnINC60Lw8L3RkPicrCiAgICAgICc8dGQ+PHNwYW4gY2xhc3M9ImJhZGdlICcrdy5zdGF0dXMrJyIgb25jbGljaz1cJ3RvZ2dsZVN0YXR1cygnK0pTT04uc3RyaW5naWZ5KHcpLnJlcGxhY2UoLycvZywiJiMzOTsiKSsnKVwnPicrKHcuc3RhdHVzPT09J2FjdGl2ZSc/J9CQ0LrRgtC40LLQtdC9Jzoody5zdGF0dXM9PT0naW5hY3RpdmUnPyfQndC10LDQutGC0LjQstC10L0nOifQn9GA0LjQutC70Y7Rh9C10L0nKSkrJzwvc3Bhbj48L3RkPicrCiAgICAgICc8dGQgY2xhc3M9ImFjdGlvbnMiPjxzcGFuIGNsYXNzPSJpY29uYnRuIiBvbmNsaWNrPVwnb3BlbkVkaXQoJytKU09OLnN0cmluZ2lmeSh3KS5yZXBsYWNlKC8nL2csIiYjMzk7IikrJylcJz7inI48L3NwYW4+JysKICAgICAgJzxzcGFuIGNsYXNzPSJpY29uYnRuIiBvbmNsaWNrPSJwcmludFdiKFwnJyt3LmlkKydcJykiPvCflqg8L3NwYW4+JysKICAgICAgJzxzcGFuIGNsYXNzPSJpY29uYnRuIiBvbmNsaWNrPSJkZWxldGVXYihcJycrdy5pZCsnXCcpIj7wn5eRPC9zcGFuPjwvdGQ+PC90cj4nOwogIH0pOwogIGh0bWwrPSc8L3Rib2R5Pic7CiAgdGJsLmlubmVySFRNTD1odG1sOwp9CgpmdW5jdGlvbiBwcmludFdiKGlkKXsKICB2YXIgdz1BTEwuZmluZCh4PT54LmlkPT09aWQpOyBpZighdylyZXR1cm47CiAgdmFyIGttPShwYXJzZUZsb2F0KHcua21fZW5kfHwwKS1wYXJzZUZsb2F0KHcua21fc3RhcnR8fDApKS50b0ZpeGVkKDEpOwogIHZhciBodG1sPSc8ZGl2IGNsYXNzPSJwZG9jIj48aDI+0J/RitGC0LXQvSDQu9C40YHRgiDihJYgJyt3Lm51bWJlcisnPC9oMj4nKwogICAgJzx0YWJsZT48dHI+PHRoPtCU0LDRgtCwPC90aD48dGQ+Jyt3LmRhdGUrJzwvdGQ+PHRoPtCo0L7RhNGM0L7RgDwvdGg+PHRkPicrdy5kcml2ZXJfbmFtZSsnPC90ZD48L3RyPicrCiAgICAnPHRyPjx0aD7QoNC10LMuIOKEliDQvdCwINCc0J/QoTwvdGg+PHRkPicrdy52ZWhpY2xlX3BsYXRlKyc8L3RkPjx0aD7QktC40LQg0JzQn9ChPC90aD48dGQ+Jyt3LnZlaGljbGVfdHlwZSsnPC90ZD48L3RyPicrCiAgICAnPHRyPjx0aD7QnNCw0YDRiNGA0YPRgjwvdGg+PHRkIGNvbHNwYW49IjMiPicrdy5yb3V0ZV9mcm9tKycg4oaSICcrdy5yb3V0ZV90bysnPC90ZD48L3RyPicrCiAgICAnPHRyPjx0aD7QmtC8INCyINC90LDRh9Cw0LvQvtGC0L48L3RoPjx0ZD4nK3cua21fc3RhcnQrJzwvdGQ+PHRoPtCa0Lwg0LIg0LrRgNCw0Y88L3RoPjx0ZD4nK3cua21fZW5kKyc8L3RkPjwvdHI+JysKICAgICc8dHI+PHRoPtCY0LfQvNC40L3QsNGC0Lgg0LrQvDwvdGg+PHRkPicra20rJzwvdGQ+PHRoPtCT0L7RgNC40LLQviAo0LspPC90aD48dGQ+Jyt3LmZ1ZWxfbGl0ZXJzKyc8L3RkPjwvdHI+JysKICAgICc8dHI+PHRoPtCa0LvQuNC10L3Rgi/QvtCx0LXQutGCPC90aD48dGQgY29sc3Bhbj0iMyI+Jyt3LmNsaWVudCsnPC90ZD48L3RyPicrCiAgICAnPHRyPjx0aD7QotC+0LLQsNGAL9Cx0LXQu9C10LbQutCwPC90aD48dGQgY29sc3Bhbj0iMyI+Jysody5jYXJnb3x8JycpKyc8L3RkPjwvdHI+PC90YWJsZT4nKwogICAgJzxkaXYgY2xhc3M9InNpZyI+PGRpdj48ZGl2IGNsYXNzPSJsaW5lIj7Qn9C+0LTQv9C40YEg0L3QsCDRiNC+0YTRjNC+0YDQsDwvZGl2PjwvZGl2PjxkaXY+PGRpdiBjbGFzcz0ibGluZSI+0J/QvtC00L/QuNGBINC90LAg0L7RgtCz0L7QstC+0YDQvdC40Lo8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4nOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmludEFyZWEnKS5pbm5lckhUTUw9aHRtbDsKICB3aW5kb3cucHJpbnQoKTsKfQphc3luYyBmdW5jdGlvbiBtb2R1bGVHdWFyZChrZXksbGFiZWwpewogIHRyeXsKICAgIGF3YWl0IHN5bmNMaWNlbnNlRnJvbU1hc3RlcigpOwogICAgdmFyIHI9YXdhaXQgYWYoJ2JyYW5kaW5nX3NldHRpbmdzJyk7CiAgICBpZihyICYmIChyLmxpY2Vuc2Vfc3RhdGU9PT0nbG9ja2VkJ3x8ci5saWNlbnNlX3N0YXRlPT09J2ludmFsaWQnKSl7CiAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6NDgwcHg7bWFyZ2luOjgwcHggYXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtmb250LWZhbWlseTpzYW5zLXNlcmlmO2NvbG9yOiM0YTRhNmEiPicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O21hcmdpbi1ib3R0b206MTJweCI+8J+UkjwvZGl2PjxoMj7QpdGK0LHRitGCINC1INC30LDQutC70Y7Rh9C10L08L2gyPicrCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTNweCI+Jysoci5saWNlbnNlX21lc3NhZ2V8fCfQm9C40YbQtdC90LfRitGCINC90LUg0LUg0LDQutGC0LjQstC10L0uJykrJzwvcD48L2Rpdj4nOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZihyICYmIHIubW9kdWxlc19lbmFibGVkICYmIHIubW9kdWxlc19lbmFibGVkLmhhc093blByb3BlcnR5KGtleSkgJiYgIXIubW9kdWxlc19lbmFibGVkW2tleV0pewogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjQ4MHB4O21hcmdpbjo4MHB4IGF1dG87dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtjb2xvcjojNGE0YTZhIj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6NDBweDttYXJnaW4tYm90dG9tOjEycHgiPvCflJI8L2Rpdj48aDI+JytsYWJlbCsnINC1INC40LfQutC70Y7Rh9C10L08L2gyPicrCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTNweCI+0KLQvtC30Lgg0LzQvtC00YPQuyDQtSDQuNC30LrQu9GO0YfQtdC9INC30LAg0YLQsNC30Lgg0LjQvdGB0YLQsNC70LDRhtC40Y8uINCh0LLRitGA0LbQuCDRgdC1INGBINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuPC9wPicrCiAgICAgICAgJzxhIGhyZWY9ImluZGV4Lmh0bWwiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjE2cHg7Y29sb3I6IzZjNjNmZiI+4oaQINCe0LHRgNCw0YLQvdC+INC60YrQvCBIdWI8L2E+PC9kaXY+JzsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH1jYXRjaChlKXt9CiAgcmV0dXJuIHRydWU7Cn0KYXN5bmMgZnVuY3Rpb24gc3luY0xpY2Vuc2VGcm9tTWFzdGVyKCl7CiAgdHJ5ewogICAgdmFyIGM9YXdhaXQgYWYoJ2xpY2Vuc2VfY2xpZW50X2NvbmZpZycpOwogICAgaWYoIWN8fCFjLnZlcmlmeV91cmwpcmV0dXJuOwogICAgdmFyIHJyPWF3YWl0IGZldGNoKGMudmVyaWZ5X3VybCx7Y2FjaGU6J25vLXN0b3JlJyxtb2RlOidjb3JzJ30pOwogICAgdmFyIHBheWxvYWQ9YXdhaXQgcnIuanNvbigpOwogICAgaWYocGF5bG9hZCYmcGF5bG9hZC5zdGF0ZSkgYXdhaXQgYWYoJ2xpY2Vuc2Vfc3luYycsJ1BPU1QnLHtwYXlsb2FkOnBheWxvYWR9KTsKICB9Y2F0Y2goZSl7fQp9Cgptb2R1bGVHdWFyZCgnd2F5YmlsbHMnLCfQn9GK0YLQvdC40YLQtSDQu9C40YHRgtC+0LLQtScpLnRoZW4oZnVuY3Rpb24ob2speyBpZihvaykgbG9hZExpc3QoKTsgfSk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K', 'webtrixia-contracts.html' => 'PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDt1cmw9Y29udHJhY3RzLmh0bWwiPgo8dGl0bGU+0JTQvtCz0L7QstC+0YDQuDwvdGl0bGU+CjwvaGVhZD4KPGJvZHk+CjxzY3JpcHQ+bG9jYXRpb24ucmVwbGFjZSgnY29udHJhY3RzLmh0bWwnKTs8L3NjcmlwdD4KPGEgaHJlZj0iY29udHJhY3RzLmh0bWwiPtCe0YLQstC+0YDQuCDQtNC+0LPQvtCy0L7RgNC40YLQtTwvYT4KPC9ib2R5Pgo8L2h0bWw+Cg==', ); function wt_hub_json(array $data): void { header('Content-Type: application/json; charset=utf-8'); echo json_encode($data, JSON_UNESCAPED_UNICODE); exit; } function wt_hub_post(): array { return json_decode(file_get_contents('php://input'), true) ?: $_POST ?: []; } function wt_hub_norm_master(string $url): string { $url = trim($url); if ($url !== '' && !preg_match('~^https?://~i', $url)) $url = 'https://' . $url; $url = preg_replace('~/admin(?:/.*)?$~', '', $url); $url = preg_replace('~/license/verify\.php$~', '', $url); $url = preg_replace('~/licenses/(?:admin|license)(?:/.*)?$~', '/licenses', $url); $url = rtrim($url, '/'); if ($url !== '' && !preg_match('~/licenses$~', $url)) $url .= '/licenses'; return $url; } function wt_hub_write_files(array $files): void { foreach ($files as $rel => $b64) { $rel = str_replace('\\', '/', $rel); if (strpos($rel, '..') !== false) throw new RuntimeException('Bad path: ' . $rel); $path = __DIR__ . '/' . $rel; $dir = dirname($path); if (!is_dir($dir) && !mkdir($dir, 0775, true)) throw new RuntimeException('Cannot create folder: ' . $dir); if (file_put_contents($path, base64_decode($b64)) === false) throw new RuntimeException('Cannot write: ' . $rel); } } function wt_hub_write_config(array $b): void { $cfg = "<?php\n" . "define('DB_HOST'," . var_export($b['db_host'] ?? 'localhost', true) . ");\n" . "define('DB_NAME'," . var_export($b['db_name'] ?? '', true) . ");\n" . "define('DB_USER'," . var_export($b['db_user'] ?? '', true) . ");\n" . "define('DB_PASS'," . var_export($b['db_pass'] ?? '', true) . ");\n" . "define('TG_TOKEN'," . var_export($b['tg_token'] ?? '', true) . ");\n" . "define('TG_CHAT_ID'," . var_export($b['tg_chat_id'] ?? '', true) . ");\n" . "define('OPENAI_API_KEY'," . var_export($b['openai_api_key'] ?? '', true) . ");\n" . "define('OPENAI_MODEL'," . var_export($b['openai_model'] ?? 'gpt-5.5', true) . ");\n"; if (file_put_contents(__DIR__ . '/config.php', $cfg) === false) throw new RuntimeException('Не мога да запиша config.php.'); } function wt_hub_pdo(array $b): PDO { return new PDO( 'mysql:host=' . ($b['db_host'] ?? 'localhost') . ';dbname=' . ($b['db_name'] ?? '') . ';charset=utf8mb4', $b['db_user'] ?? '', $b['db_pass'] ?? '', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC] ); } function wt_hub_call(string $action): array { $scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http'; $url = $scheme . '://' . ($_SERVER['HTTP_HOST'] ?? 'localhost') . rtrim(dirname($_SERVER['SCRIPT_NAME'] ?? '/'), '/\\') . '/api.php?action=' . rawurlencode($action); $resp = false; if (function_exists('curl_init')) { $ch = curl_init($url); curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 20, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false]); $resp = curl_exec($ch); $err = curl_error($ch); curl_close($ch); if ($resp === false) return ['ok' => false, 'error' => $err ?: 'curl failed']; } elseif (ini_get('allow_url_fopen')) { $resp = @file_get_contents($url, false, stream_context_create(['http' => ['timeout' => 20], 'ssl' => ['verify_peer' => false, 'verify_peer_name' => false]])); } $j = $resp ? json_decode($resp, true) : null; return is_array($j) ? $j : ['ok' => false, 'error' => 'Инсталационната стъпка не успя: ' . $action]; } function wt_hub_license_settings(PDO $pdo, array $b): void { $pdo->exec("CREATE TABLE IF NOT EXISTS settings ( id INT PRIMARY KEY DEFAULT 1, role VARCHAR(10) DEFAULT 'client', product_name VARCHAR(150) DEFAULT 'Webtrixia Hub', primary_color VARCHAR(20) DEFAULT '#6c63ff', admin_pass_hash VARCHAR(255), master_url VARCHAR(255), license_key VARCHAR(60), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"); if ((int)$pdo->query("SELECT COUNT(*) FROM settings")->fetchColumn() === 0) { $pdo->exec("INSERT INTO settings (id, role) VALUES (1, 'client')"); } $master = wt_hub_norm_master($b['master_url'] ?? 'https://hub.webtrixia.com/licenses'); $product = trim($b['product_name'] ?? 'Webtrixia Hub') ?: 'Webtrixia Hub'; $key = trim($b['license_key'] ?? ''); $st = $pdo->prepare("UPDATE settings SET role='client', product_name=?, master_url=?, license_key=? WHERE id=1"); $st->execute([$product, $master, $key]); } function wt_hub_bootstrap_tables(PDO $pdo, array $b): void { $tables = [ "CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL, name VARCHAR(100), role VARCHAR(100), initials VARCHAR(5), color VARCHAR(20) DEFAULT 'av-p', is_admin TINYINT(1) DEFAULT 0, online TINYINT(1) DEFAULT 1, telegram_chat_id VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS projects ( id VARCHAR(36) PRIMARY KEY, name VARCHAR(255) NOT NULL, client VARCHAR(255), phone VARCHAR(100), status VARCHAR(50) DEFAULT 'new', total DECIMAL(10,2) DEFAULT 0, received DECIMAL(10,2) DEFAULT 0, start_date DATE NULL, deadline DATE NULL, progress INT DEFAULT 0, assignee VARCHAR(100), tags TEXT, recurring VARCHAR(20), notes TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS tasks ( id VARCHAR(36) PRIMARY KEY, text TEXT NOT NULL, assignee VARCHAR(100), urgent TINYINT(1) DEFAULT 0, done TINYINT(1) DEFAULT 0, due_date DATETIME NULL, note TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS notes ( id VARCHAR(36) PRIMARY KEY, title VARCHAR(255) NOT NULL, body TEXT, author VARCHAR(100), urgent TINYINT(1) DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS clients ( id VARCHAR(36) PRIMARY KEY, name VARCHAR(255) NOT NULL, company VARCHAR(255), email VARCHAR(255), phone VARCHAR(100), eik VARCHAR(50), notes TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS hosting ( id VARCHAR(36) PRIMARY KEY, domain VARCHAR(255) NOT NULL, client VARCHAR(255), server VARCHAR(255), type VARCHAR(50), disk VARCHAR(50), plan VARCHAR(50), ssl_expires DATE NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS passwords ( id VARCHAR(36) PRIMARY KEY, site VARCHAR(255) NOT NULL, username VARCHAR(255), pass VARCHAR(500), category VARCHAR(50), client VARCHAR(255), visible_to TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS offers ( id VARCHAR(36) PRIMARY KEY, num VARCHAR(50), client VARCHAR(255), service VARCHAR(255), total DECIMAL(10,2) DEFAULT 0, status VARCHAR(50) DEFAULT 'Чакаща', offer_type VARCHAR(30) DEFAULT 'one_time', details LONGTEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS contracts ( id VARCHAR(36) PRIMARY KEY, name VARCHAR(255), client VARCHAR(255), sign_date DATE NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS presence ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, status VARCHAR(30) NOT NULL, ip_address VARCHAR(60), user_agent VARCHAR(255), latitude DECIMAL(10,7) NULL, longitude DECIMAL(10,7) NULL, accuracy DECIMAL(10,2) NULL, location_note VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS activity ( id INT AUTO_INCREMENT PRIMARY KEY, who VARCHAR(100), what TEXT, color VARCHAR(20), initials VARCHAR(5), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS targets ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, created_by INT NOT NULL, title VARCHAR(255) NOT NULL, description TEXT, target_value INT NOT NULL, current_value INT DEFAULT 0, unit VARCHAR(50) DEFAULT 'бр.', date DATE NOT NULL, status VARCHAR(20) DEFAULT 'active', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS branding_settings ( id INT PRIMARY KEY, product_name VARCHAR(255) DEFAULT 'Webtrixia Hub', logo_url VARCHAR(500), favicon_url VARCHAR(500), primary_color VARCHAR(20) DEFAULT '#6c63ff', secondary_color VARCHAR(20) DEFAULT '#a78bfa', footer_text VARCHAR(255) DEFAULT '', powered_by_visible TINYINT(1) DEFAULT 1, hub_type VARCHAR(30) DEFAULT 'agency', license_key VARCHAR(64), admin_locked TINYINT(1) DEFAULT 0, modules_enabled TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", "CREATE TABLE IF NOT EXISTS waybills ( id VARCHAR(36) PRIMARY KEY, number VARCHAR(50), date DATE, driver_name VARCHAR(255), vehicle_plate VARCHAR(50), vehicle_type VARCHAR(100), route_from VARCHAR(255), route_to VARCHAR(255), km_start DECIMAL(10,1) DEFAULT 0, km_end DECIMAL(10,1) DEFAULT 0, fuel_liters DECIMAL(10,2) DEFAULT 0, fuel_cost DECIMAL(10,2) DEFAULT 0, cargo VARCHAR(500), client VARCHAR(255), status VARCHAR(20) DEFAULT 'active', notes TEXT, created_by VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", ]; foreach ($tables as $sql) $pdo->exec($sql); foreach ([ "ALTER TABLE users ADD COLUMN telegram_chat_id VARCHAR(50)", "ALTER TABLE passwords ADD COLUMN client VARCHAR(255)", "ALTER TABLE passwords ADD COLUMN visible_to TEXT", "ALTER TABLE offers ADD COLUMN offer_type VARCHAR(30) DEFAULT 'one_time'", "ALTER TABLE offers ADD COLUMN details LONGTEXT", "ALTER TABLE offers ADD COLUMN updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP", "ALTER TABLE presence ADD COLUMN ip_address VARCHAR(60)", "ALTER TABLE presence ADD COLUMN user_agent VARCHAR(255)", "ALTER TABLE presence ADD COLUMN latitude DECIMAL(10,7) NULL", "ALTER TABLE presence ADD COLUMN longitude DECIMAL(10,7) NULL", "ALTER TABLE presence ADD COLUMN accuracy DECIMAL(10,2) NULL", "ALTER TABLE presence ADD COLUMN location_note VARCHAR(255)", ] as $sql) { try { $pdo->exec($sql); } catch (Throwable $e) {} } if ((int)$pdo->query("SELECT COUNT(*) FROM users")->fetchColumn() === 0) { $pdo->prepare("INSERT INTO users (username,password,name,role,initials,color,is_admin) VALUES (?,?,?,?,?,?,1)") ->execute(['admin', password_hash('webtrixia2025', PASSWORD_DEFAULT), 'Администратор', 'Admin', 'АД', 'av-p']); } if ((int)$pdo->query("SELECT COUNT(*) FROM branding_settings")->fetchColumn() === 0) { $mods = json_encode(['projects'=>1,'clients'=>1,'finance'=>1,'tasks'=>1,'offers'=>1,'contracts'=>1, 'calendar'=>1,'hosting'=>1,'passwords'=>1,'notes'=>1,'reports'=>1,'presence'=>1,'targets'=>1, 'workreport'=>1,'users'=>1,'invoicing'=>1,'hr_requests'=>1,'waybills'=>1,'ai_scan'=>1,'audit'=>1], JSON_UNESCAPED_UNICODE); $product = trim($b['product_name'] ?? 'Webtrixia Hub') ?: 'Webtrixia Hub'; $pdo->prepare("INSERT INTO branding_settings (id,product_name,license_key,modules_enabled,hub_type) VALUES (1,?,?,?,?)") ->execute([$product, bin2hex(random_bytes(16)), $mods, 'client']); } } if (($_GET['action'] ?? '') === 'install') { $b = wt_hub_post(); try { foreach (['db_host','db_name','db_user','license_key'] as $need) { if (trim((string)($b[$need] ?? '')) === '') throw new RuntimeException('Липсва поле: ' . $need); } wt_hub_write_files($WT_HUB_FILES); wt_hub_write_config($b); $pdo = wt_hub_pdo($b); wt_hub_license_settings($pdo, $b); wt_hub_bootstrap_tables($pdo, $b); $steps = [ 'Основни таблици' => wt_hub_call('install'), 'Фактури / HR таблици' => wt_hub_call('install_invoicing'), 'Платформа и модули' => wt_hub_call('install_platform'), ]; wt_hub_license_settings($pdo, $b); wt_hub_json(['ok' => true, 'steps' => $steps, 'url' => 'index.html']); } catch (Throwable $e) { wt_hub_json(['ok' => false, 'error' => $e->getMessage()]); } } ?><!doctype html> <html lang="bg"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Инсталация · Webtrixia Hub</title> <style> body{margin:0;min-height:100vh;font-family:Arial,sans-serif;background:#0a0a12;color:#ececf5;display:flex;align-items:center;justify-content:center;padding:24px} .card{width:100%;max-width:560px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);border-radius:18px;padding:28px} h1{font-size:22px;margin:0 0 6px}.sub{color:#a0a0c0;font-size:13px;line-height:1.5;margin-bottom:18px} .grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media(max-width:640px){.grid{grid-template-columns:1fr}} label{display:block;font-size:11px;text-transform:uppercase;color:#8585a8;margin:10px 0 5px} input{width:100%;box-sizing:border-box;border:1px solid rgba(255,255,255,.14);border-radius:10px;background:rgba(0,0,0,.28);color:#fff;padding:12px;font-size:14px} button{width:100%;border:0;border-radius:11px;background:#6c63ff;color:#fff;padding:13px 16px;font-weight:700;margin-top:18px;cursor:pointer} .msg{display:none;margin-top:14px;border-radius:10px;padding:12px;font-size:13px;line-height:1.5}.ok{background:rgba(52,211,153,.12);color:#34d399}.bad{background:rgba(248,113,113,.12);color:#f87171} a{color:#9f98ff} </style> </head> <body><div class="card"> <h1>Инсталация на Webtrixia Hub</h1> <div class="sub">Този един файл разархивира HUB-а в текущата папка на поддомейна, подготвя базата данни и свързва инсталацията с централния лицензен панел.</div> <div class="grid"> <div><label>DB Host</label><input id="db_host" value="localhost"></div> <div><label>DB Name</label><input id="db_name"></div> <div><label>DB User</label><input id="db_user"></div> <div><label>DB Password</label><input id="db_pass" type="password"></div> </div> <label>Master лицензен URL</label><input id="master_url" value="https://hub.webtrixia.com/licenses"> <label>Лицензен ключ на клиента</label><input id="license_key" placeholder="WT-XXXX-XXXX-XXXX-XXXX"> <label>Име на продукта</label><input id="product_name" value="Webtrixia Hub"> <div class="grid"> <div><label>Telegram token (по избор)</label><input id="tg_token"></div> <div><label>Telegram chat id (по избор)</label><input id="tg_chat_id"></div> </div> <label>OpenAI API key (по избор — за AI scan OCR)</label><input id="openai_api_key" type="password"> <label>OpenAI model</label><input id="openai_model" value="gpt-5.5"> <button onclick="run()">Стартирай инсталацията</button> <div id="msg" class="msg"></div> </div> <script> async function run(){ const ids=['db_host','db_name','db_user','db_pass','master_url','license_key','product_name','tg_token','tg_chat_id','openai_api_key','openai_model']; const b={}; ids.forEach(id=>b[id]=document.getElementById(id).value.trim()); const msg=document.getElementById('msg'); msg.className='msg ok'; msg.style.display='block'; msg.textContent='Инсталацията се изпълнява...'; try{ const r=await fetch('install_hub.php?action=install',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(b)}); const j=await r.json(); if(j.ok){ msg.innerHTML='Инсталацията е готова. <a href="index.html">Отвори HUB панела</a><br><br><b>Вход:</b> admin<br><b>Парола:</b> webtrixia2025<br><br>За сигурност изтрий install_hub.php след инсталацията и смени паролата от „Потребители“.'; } else { msg.className='msg bad'; msg.textContent='Грешка: '+(j.error||'Неизвестна грешка'); } }catch(e){ msg.className='msg bad'; msg.textContent='Грешка: '+e.message; } } </script></body></html>
| ver. 1.4 |
Github
|
.
| PHP 8.2.31 | Generation time: 0.01 |
proxy
|
phpinfo
|
Settings