File manager - Edit - /home/webtrixia/.trash/install_hub.php.2
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', 'api.php' => 'PD9waHAKaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46IConKTsKaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzOiBHRVQsIFBPU1QsIERFTEVURSwgT1BUSU9OUycpOwpoZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnM6IENvbnRlbnQtVHlwZScpOwppZigkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXT09PSdPUFRJT05TJyl7aHR0cF9yZXNwb25zZV9jb2RlKDIwMCk7ZXhpdDt9CgovLyDilIDilIAgQ09ORklHIChjcmVhdGVkIGJ5IHdfaHViX2luc3RhbGwucGhwIG9uIGZpcnN0IHJ1biDigJQgbmV2ZXIgaGFyZGNvZGVkIGhlcmUpIOKUgOKUgAppZighZmlsZV9leGlzdHMoX19ESVJfXy4nL2NvbmZpZy5waHAnKSl7CiAgICBodHRwX3Jlc3BvbnNlX2NvZGUoMjAwKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoWydvayc9PmZhbHNlLCdlcnJvcic9Pidub19jb25maWcnLAogICAgICAgICdtZXNzYWdlJz0+J9CR0LDQt9Cw0YLQsCDQtNCw0L3QvdC4INC90LUg0LUg0LrQvtC90YTQuNCz0YPRgNC40YDQsNC90LAuINCe0YLQstC+0YDQuCB3X2h1Yl9pbnN0YWxsLnBocCwg0LfQsCDQtNCwINC40L3RgdGC0LDQu9C40YDQsNGIINGF0YrQsdCwINC90LAg0YLQvtC30Lgg0YHRitGA0LLRitGALiddLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgZXhpdDsKfQpyZXF1aXJlIF9fRElSX18uJy9jb25maWcucGhwJzsKaWYoIWRlZmluZWQoJ1RHX1RPS0VOJykpIGRlZmluZSgnVEdfVE9LRU4nLCcnKTsKaWYoIWRlZmluZWQoJ1RHX0NIQVRfSUQnKSkgZGVmaW5lKCdUR19DSEFUX0lEJywnJyk7CgovLyDilIDilIAgU0FGRVRZIE5FVDogbmV2ZXIgbGV0IGEgUEhQIGVycm9yL2V4Y2VwdGlvbiBsZWFrIHJhdyBIVE1MIHRvIHRoZSBmcm9udGVuZCDilIDilIAKc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKGZ1bmN0aW9uKCRlKXsKICAgIGlmKG9iX2dldF9sZW5ndGgoKSkgb2JfY2xlYW4oKTsKICAgIGh0dHBfcmVzcG9uc2VfY29kZSg1MDApOwogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoWydvayc9PmZhbHNlLCdlcnJvcic9PifQodGK0YDQstGK0YDQvdCwINCz0YDQtdGI0LrQsDogJy4kZS0+Z2V0TWVzc2FnZSgpXSxKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgIGV4aXQ7Cn0pOwpzZXRfZXJyb3JfaGFuZGxlcihmdW5jdGlvbigkc2V2ZXJpdHksJG1lc3NhZ2UsJGZpbGUsJGxpbmUpewogICAgaWYoIShlcnJvcl9yZXBvcnRpbmcoKSAmICRzZXZlcml0eSkpIHJldHVybiBmYWxzZTsKICAgIHRocm93IG5ldyBFcnJvckV4Y2VwdGlvbigkbWVzc2FnZSwwLCRzZXZlcml0eSwkZmlsZSwkbGluZSk7Cn0pOwoKZnVuY3Rpb24gdGcoJG1zZywgJGNoYXRJZD1udWxsKXsKICAgICRjaGF0ID0gJGNoYXRJZCA/OiBUR19DSEFUX0lEOwogICAgaWYoZW1wdHkoJGNoYXQpKSByZXR1cm47CiAgICB0cnkgewogICAgICAgICR1cmw9J2h0dHBzOi8vYXBpLnRlbGVncmFtLm9yZy9ib3QnLlRHX1RPS0VOLicvc2VuZE1lc3NhZ2UnOwogICAgICAgICRwYXlsb2FkPWpzb25fZW5jb2RlKFsnY2hhdF9pZCc9PiRjaGF0LCd0ZXh0Jz0+JG1zZywncGFyc2VfbW9kZSc9PidIVE1MJ10pOwogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpewogICAgICAgICAgICAkY2g9Y3VybF9pbml0KCR1cmwpOwogICAgICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsWwogICAgICAgICAgICAgICAgQ1VSTE9QVF9QT1NUPT50cnVlLAogICAgICAgICAgICAgICAgQ1VSTE9QVF9QT1NURklFTERTPT4kcGF5bG9hZCwKICAgICAgICAgICAgICAgIENVUkxPUFRfSFRUUEhFQURFUj0+WydDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nXSwKICAgICAgICAgICAgICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVI9PnRydWUsCiAgICAgICAgICAgICAgICBDVVJMT1BUX1RJTUVPVVQ9PjUsCiAgICAgICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllQRUVSPT5mYWxzZSwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIGN1cmxfZXhlYygkY2gpOwogICAgICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG9wdHM9WydodHRwJz0+WydtZXRob2QnPT4nUE9TVCcsJ2hlYWRlcic9PidDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgJ2NvbnRlbnQnPT4kcGF5bG9hZCwndGltZW91dCc9PjMsJ2lnbm9yZV9lcnJvcnMnPT50cnVlXV07CiAgICAgICAgICAgIEBmaWxlX2dldF9jb250ZW50cygkdXJsLGZhbHNlLHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgkb3B0cykpOwogICAgICAgIH0KICAgIH0gY2F0Y2goRXhjZXB0aW9uICRlKXsgLyogc2lsZW50IGZhaWwgKi8gfQp9CgovLyDilIDilIAgREIg4pSA4pSACmZ1bmN0aW9uIGRiKCl7CiAgICBzdGF0aWMgJHA7CiAgICBpZighJHApewogICAgICAgIHRyeXsKICAgICAgICAgICAgJHA9bmV3IFBETygnbXlzcWw6aG9zdD0nLkRCX0hPU1QuJztkYm5hbWU9Jy5EQl9OQU1FLic7Y2hhcnNldD11dGY4bWI0JywKICAgICAgICAgICAgICAgIERCX1VTRVIsREJfUEFTUyxbUERPOjpBVFRSX0VSUk1PREU9PlBETzo6RVJSTU9ERV9FWENFUFRJT04sCiAgICAgICAgICAgICAgICBQRE86OkFUVFJfREVGQVVMVF9GRVRDSF9NT0RFPT5QRE86OkZFVENIX0FTU09DXSk7CiAgICAgICAgfWNhdGNoKFBET0V4Y2VwdGlvbiAkZSl7CiAgICAgICAgICAgIGh0dHBfcmVzcG9uc2VfY29kZSg1MDApOwogICAgICAgICAgICBkaWUoanNvbl9lbmNvZGUoWydvayc9PmZhbHNlLCdlcnJvcic9PidEQjogJy4kZS0+Z2V0TWVzc2FnZSgpXSkpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkcDsKfQpmdW5jdGlvbiBvaygkZCl7ZWNobyBqc29uX2VuY29kZShbJ29rJz0+dHJ1ZSwnZGF0YSc9PiRkXSxKU09OX1VORVNDQVBFRF9VTklDT0RFKTtleGl0O30KZnVuY3Rpb24gZXJyKCRtKXtodHRwX3Jlc3BvbnNlX2NvZGUoNDAwKTtlY2hvIGpzb25fZW5jb2RlKFsnb2snPT5mYWxzZSwnZXJyb3InPT4kbV0sSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7ZXhpdDt9CmZ1bmN0aW9uIGJvZHkoKXtyZXR1cm4ganNvbl9kZWNvZGUoZmlsZV9nZXRfY29udGVudHMoJ3BocDovL2lucHV0JyksdHJ1ZSk/P1tdO30KZnVuY3Rpb24gaHViX3Nlc3Npb25faXNfYWRtaW4oKTogYm9vbCB7CiAgICByZXR1cm4gIWVtcHR5KCRfU0VTU0lPTlsnaHViX2lzX2FkbWluJ10pOwp9CmZ1bmN0aW9uIHJlcXVpcmVIdWJBZG1pbk9yU2VjcmV0KCRwZG8sICRzZWNyZXQpOiB2b2lkIHsKICAgIGlmIChodWJfc2Vzc2lvbl9pc19hZG1pbigpKSByZXR1cm47CiAgICBjaGVja0xpY2Vuc2UoJHBkbywgJHNlY3JldCk7Cn0KZnVuY3Rpb24gY2xpZW50SXAoKTogc3RyaW5nIHsKICAgIGZvcmVhY2goWydIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCdIVFRQX1hfUkVBTF9JUCcsJ0hUVFBfWF9GT1JXQVJERURfRk9SJywnUkVNT1RFX0FERFInXSBhcyAkayl7CiAgICAgICAgJHY9JF9TRVJWRVJbJGtdPz8nJzsKICAgICAgICBpZighJHYpIGNvbnRpbnVlOwogICAgICAgICRpcD10cmltKGV4cGxvZGUoJywnLCAkdilbMF0pOwogICAgICAgIGlmKGZpbHRlcl92YXIoJGlwLCBGSUxURVJfVkFMSURBVEVfSVApKSByZXR1cm4gJGlwOwogICAgfQogICAgcmV0dXJuICcnOwp9CgovLyDilIDilIAgRE9DVU1FTlQgTlVNQkVSSU5HIOKUgOKUgApmdW5jdGlvbiBuZXh0RG9jTnVtYmVyKCRwZG8sJHR5cGUpewogICAgJHllYXI9ZGF0ZSgnWScpOwogICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gZG9jX2NvdW50ZXJzICh0eXBlLHllYXIsY291bnRlcikgVkFMVUVTICg/LD8sMSkKICAgICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSBjb3VudGVyPWNvdW50ZXIrMSIpLT5leGVjdXRlKFskdHlwZSwkeWVhcl0pOwogICAgJGM9JHBkby0+cHJlcGFyZSgiU0VMRUNUIGNvdW50ZXIgRlJPTSBkb2NfY291bnRlcnMgV0hFUkUgdHlwZT0/IEFORCB5ZWFyPT8iKTsKICAgICRjLT5leGVjdXRlKFskdHlwZSwkeWVhcl0pOwogICAgcmV0dXJuIHN0cl9wYWQoKHN0cmluZykkYy0+ZmV0Y2hDb2x1bW4oKSwxMCwnMCcsU1RSX1BBRF9MRUZUKTsKfQoKLy8g4pSA4pSAIFJBVyBTTVRQIFNFTkRFUiAobm8gZXh0ZXJuYWwgbGlicmFyaWVzIG5lZWRlZCkg4pSA4pSACmZ1bmN0aW9uIHNtdHBTZW5kKCRob3N0LCRwb3J0LCRzZWN1cmUsJHVzZXIsJHBhc3MsJGZyb21FbWFpbCwkZnJvbU5hbWUsJHRvLCRzdWJqZWN0LCRodG1sQm9keSl7CiAgICAkZXJybm89MDskZXJyc3RyPScnOwogICAgJGZwPUBmc29ja29wZW4oKCRzZWN1cmU9PT0nc3NsJz8nc3NsOi8vJzonJykuJGhvc3QsKGludCkkcG9ydCwkZXJybm8sJGVycnN0ciwxMik7CiAgICBpZighJGZwKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDb25uZWN0IGZhaWxlZDogJy4kZXJyc3RyKTsKICAgIHN0cmVhbV9zZXRfdGltZW91dCgkZnAsMTIpOwogICAgJHJlYWQ9ZnVuY3Rpb24oKSB1c2UgKCRmcCl7ICRkPScnOyB3aGlsZSgkc3RyPWZnZXRzKCRmcCw1MTUpKXsgJGQuPSRzdHI7IGlmKGlzc2V0KCRzdHJbM10pJiYkc3RyWzNdPT09JyAnKSBicmVhazsgfSByZXR1cm4gJGQ7IH07CiAgICAkd3JpdGU9ZnVuY3Rpb24oJGNtZCkgdXNlICgkZnApeyBmd3JpdGUoJGZwLCRjbWQuIlxyXG4iKTsgfTsKICAgICRyZWFkKCk7CiAgICAkd3JpdGUoJ0VITE8gd2VidHJpeGlhLmNvbScpOyAkcmVhZCgpOwogICAgaWYoJHNlY3VyZT09PSd0bHMnKXsKICAgICAgICAkd3JpdGUoJ1NUQVJUVExTJyk7ICRyZWFkKCk7CiAgICAgICAgc3RyZWFtX3NvY2tldF9lbmFibGVfY3J5cHRvKCRmcCx0cnVlLFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU19DTElFTlQpOwogICAgICAgICR3cml0ZSgnRUhMTyB3ZWJ0cml4aWEuY29tJyk7ICRyZWFkKCk7CiAgICB9CiAgICAkd3JpdGUoJ0FVVEggTE9HSU4nKTsgJHJlYWQoKTsKICAgICR3cml0ZShiYXNlNjRfZW5jb2RlKCR1c2VyKSk7ICRyZWFkKCk7CiAgICAkd3JpdGUoYmFzZTY0X2VuY29kZSgkcGFzcykpOyAkcj0kcmVhZCgpOwogICAgaWYoc3RycG9zKCRyLCcyMzUnKT09PWZhbHNlKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdTTVRQIGF1dGggZmFpbGVkOiAnLiRyKTsKICAgICR3cml0ZSgnTUFJTCBGUk9NOiA8Jy4kZnJvbUVtYWlsLic+Jyk7ICRyZWFkKCk7CiAgICAkd3JpdGUoJ1JDUFQgVE86IDwnLiR0by4nPicpOyAkcmVhZCgpOwogICAgJHdyaXRlKCdEQVRBJyk7ICRyZWFkKCk7CiAgICAkaGVhZGVycyA9IkZyb206ID0/VVRGLTg/Qj8iLmJhc2U2NF9lbmNvZGUoJGZyb21OYW1lKS4iPz0gPHskZnJvbUVtYWlsfT5cclxuIjsKICAgICRoZWFkZXJzLj0iVG86IDx7JHRvfT5cclxuIjsKICAgICRoZWFkZXJzLj0iU3ViamVjdDogPT9VVEYtOD9CPyIuYmFzZTY0X2VuY29kZSgkc3ViamVjdCkuIj89XHJcbiI7CiAgICAkaGVhZGVycy49Ik1JTUUtVmVyc2lvbjogMS4wXHJcbkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVVURi04XHJcbiI7CiAgICAkd3JpdGUoJGhlYWRlcnMuIlxyXG4iLiRodG1sQm9keS4iXHJcbi4iKTsKICAgICRyPSRyZWFkKCk7CiAgICAkd3JpdGUoJ1FVSVQnKTsgZmNsb3NlKCRmcCk7CiAgICBpZihzdHJwb3MoJHIsJzI1MCcpPT09ZmFsc2UpIHRocm93IG5ldyBFeGNlcHRpb24oJ1NlbmQgZmFpbGVkOiAnLiRyKTsKICAgIHJldHVybiB0cnVlOwp9CgokYWN0aW9uPSRfR0VUWydhY3Rpb24nXT8/Jyc7CiRtZXRob2Q9JF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ107CmlmKHNlc3Npb25fc3RhdHVzKCk9PT1QSFBfU0VTU0lPTl9OT05FKSBzZXNzaW9uX3N0YXJ0KCk7CgpmdW5jdGlvbiBodWJfbGljZW5zZV9zdGF0dXMoKXsKICAgIHN0YXRpYyAkc3RhdHVzPW51bGw7CiAgICBpZigkc3RhdHVzIT09bnVsbCkgcmV0dXJuICRzdGF0dXM7CiAgICAkZ3VhcmQ9X19ESVJfXy4nL2xpY2Vuc2VzL2NsaWVudC9ndWFyZC5waHAnOwogICAgaWYoIWZpbGVfZXhpc3RzKCRndWFyZCkpewogICAgICAgIHJldHVybiAkc3RhdHVzPVsnc3RhdGUnPT4nYWN0aXZlJywnbW9kdWxlcyc9PltdLCdtZXNzYWdlJz0+J9Cb0L7QutCw0LvQtdC9INGA0LXQttC40LwuJywnb2ZmbGluZSc9PnRydWVdOwogICAgfQogICAgdHJ5ewogICAgICAgIHJlcXVpcmVfb25jZSAkZ3VhcmQ7CiAgICAgICAgcmV0dXJuICRzdGF0dXM9d3RfZ3VhcmRfc3RhdHVzKCk7CiAgICB9Y2F0Y2goVGhyb3dhYmxlICRlKXsKICAgICAgICByZXR1cm4gJHN0YXR1cz1bJ3N0YXRlJz0+J2FjdGl2ZScsJ21vZHVsZXMnPT5bXSwnbWVzc2FnZSc9PifQm9C40YbQtdC90LfQvdC40Y/RgiDQutC+0L3RgtGA0L7QuyDQtSDQstGA0LXQvNC10L3QvdC+INC90LXQtNC+0YHRgtGK0L/QtdC9LicsJ29mZmxpbmUnPT50cnVlXTsKICAgIH0KfQoKZnVuY3Rpb24gaHViX2xpY2Vuc2Vfcm9sZSgpOiBzdHJpbmcgewogICAgdHJ5ewogICAgICAgICRyPWRiKCktPnF1ZXJ5KCJTRUxFQ1Qgcm9sZSBGUk9NIHNldHRpbmdzIFdIRVJFIGlkPTEiKS0+ZmV0Y2goKTsKICAgICAgICByZXR1cm4gJHJbJ3JvbGUnXT8/J2NsaWVudCc7CiAgICB9Y2F0Y2goVGhyb3dhYmxlICRlKXsKICAgICAgICByZXR1cm4gJ2NsaWVudCc7CiAgICB9Cn0KCmZ1bmN0aW9uIGh1Yl9tb2R1bGVfZm9yX2FjdGlvbihzdHJpbmcgJGFjdGlvbik6IHN0cmluZyB7CiAgICAkbWFwPVsKICAgICAgICAncHJvamVjdHMnPT4ncHJvamVjdHMnLCd0YXNrcyc9Pid0YXNrcycsJ25vdGVzJz0+J25vdGVzJywnY2xpZW50cyc9PidjbGllbnRzJywKICAgICAgICAnaG9zdGluZyc9Pidob3N0aW5nJywncGFzc3dvcmRzJz0+J3Bhc3N3b3JkcycsJ29mZmVycyc9PidvZmZlcnMnLCdjb250cmFjdHMnPT4nY29udHJhY3RzJywKICAgICAgICAncHJlc2VuY2UnPT4ncHJlc2VuY2UnLCd0YXJnZXRzJz0+J3RhcmdldHMnLCd3b3JrcmVwb3J0Jz0+J3dvcmtyZXBvcnQnLCd1c2Vycyc9Pid1c2VycycsCiAgICAgICAgJ2NvbXBhbnlfc2V0dGluZ3MnPT4naW52b2ljaW5nJywnZWlrX2xvb2t1cCc9PidpbnZvaWNpbmcnLCdkb2N1bWVudHMnPT4naW52b2ljaW5nJywKICAgICAgICAnZG9jdW1lbnRfZnVsbCc9PidpbnZvaWNpbmcnLCdpbnZvaWNlX3N0YXRzJz0+J2ludm9pY2luZycsJ2RvY3VtZW50c19leHBvcnQnPT4naW52b2ljaW5nJywKICAgICAgICAnY2xpZW50c19pbXBvcnQnPT4naW52b2ljaW5nJywncmVjdXJyaW5nJz0+J2ludm9pY2luZycsJ3J1bl9yZWN1cnJpbmcnPT4naW52b2ljaW5nJywKICAgICAgICAnc2VuZF9kb2N1bWVudF9lbWFpbCc9PidpbnZvaWNpbmcnLCdocl9yZXF1ZXN0cyc9Pidocl9yZXF1ZXN0cycsJ2hyX3JlcXVlc3Rfc3RhdHVzJz0+J2hyX3JlcXVlc3RzJywKICAgICAgICAnd2F5YmlsbHMnPT4nd2F5YmlsbHMnLCd3YXliaWxsX3N0YXR1cyc9Pid3YXliaWxscycKICAgIF07CiAgICByZXR1cm4gJG1hcFskYWN0aW9uXT8/Jyc7Cn0KCmZ1bmN0aW9uIGh1Yl9lZmZlY3RpdmVfbW9kdWxlcyhhcnJheSAkbHM9W10pOiBhcnJheSB7CiAgICAkbW9kcz1bXTsKICAgIHRyeXsKICAgICAgICAkcj1kYigpLT5xdWVyeSgiU0VMRUNUIG1vZHVsZXNfZW5hYmxlZCBGUk9NIGJyYW5kaW5nX3NldHRpbmdzIFdIRVJFIGlkPTEiKS0+ZmV0Y2goKTsKICAgICAgICAkbW9kcz1qc29uX2RlY29kZSgkclsnbW9kdWxlc19lbmFibGVkJ10/Pyd7fScsdHJ1ZSk/OltdOwogICAgfWNhdGNoKFRocm93YWJsZSAkZSl7fQogICAgaWYoIWVtcHR5KCRsc1snbW9kdWxlcyddKSAmJiBpc19hcnJheSgkbHNbJ21vZHVsZXMnXSkpICRtb2RzPSRsc1snbW9kdWxlcyddOwogICAgaWYoaW5fYXJyYXkoJGxzWydzdGF0ZSddPz8nYWN0aXZlJyxbJ2xvY2tlZCcsJ2ludmFsaWQnXSx0cnVlKSl7CiAgICAgICAgZm9yZWFjaCgkbW9kcyBhcyAkaz0+JHYpICRtb2RzWyRrXT0wOwogICAgfQogICAgcmV0dXJuICRtb2RzOwp9CgppZigkYWN0aW9uPT09J2xpY2Vuc2Vfc3RhdHVzJyl7CiAgICBvayhodWJfbGljZW5zZV9zdGF0dXMoKSk7Cn0KCiRsaWNlbnNlUHVibGljQWN0aW9ucz1bJ2luc3RhbGwnLCdpbnN0YWxsX3BsYXRmb3JtJywnaW5zdGFsbF9pbnZvaWNpbmcnLCdicmFuZGluZ19zZXR0aW5ncycsJ2xpY2Vuc2Vfc3RhdHVzJywndGVzdCcsJ3RnX3VwZGF0ZXMnLCd0Z19zZXRfY2hhdCddOwppZighaW5fYXJyYXkoJGFjdGlvbiwkbGljZW5zZVB1YmxpY0FjdGlvbnMsdHJ1ZSkpewogICAgJGxzPWh1Yl9saWNlbnNlX3N0YXR1cygpOwogICAgaWYoaW5fYXJyYXkoJGxzWydzdGF0ZSddPz8nYWN0aXZlJyxbJ2xvY2tlZCcsJ2ludmFsaWQnXSx0cnVlKSl7CiAgICAgICAgaHR0cF9yZXNwb25zZV9jb2RlKDQwMik7CiAgICAgICAgZWNobyBqc29uX2VuY29kZShbJ29rJz0+ZmFsc2UsJ2Vycm9yJz0+J2xpY2Vuc2VfbG9ja2VkJywnbGljZW5zZSc9PiRscywKICAgICAgICAgICAgJ21lc3NhZ2UnPT4kbHNbJ21lc3NhZ2UnXT8/J9Cb0LjRhtC10L3Qt9GK0YIg0L3QtSDQtSDQsNC60YLQuNCy0LXQvS4nXSxKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgICAgICBleGl0OwogICAgfQogICAgJG1vZD1odWJfbW9kdWxlX2Zvcl9hY3Rpb24oJGFjdGlvbik7CiAgICAkbW9kcz1odWJfZWZmZWN0aXZlX21vZHVsZXMoJGxzKTsKICAgIGlmKCRtb2QgJiYgaXNfYXJyYXkoJG1vZHMpICYmIGFycmF5X2tleV9leGlzdHMoJG1vZCwkbW9kcykgJiYgISRtb2RzWyRtb2RdKXsKICAgICAgICBodHRwX3Jlc3BvbnNlX2NvZGUoNDAzKTsKICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnb2snPT5mYWxzZSwnZXJyb3InPT4nbW9kdWxlX2Rpc2FibGVkJywnbW9kdWxlJz0+JG1vZCwKICAgICAgICAgICAgJ21lc3NhZ2UnPT4n0KLQvtC30Lgg0LzQvtC00YPQuyDQtSDQuNC30LrQu9GO0YfQtdC9INC30LAg0YLQsNC30Lgg0LjQvdGB0YLQsNC70LDRhtC40Y8uJ10sSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICAgICAgZXhpdDsKICAgIH0KfQoKLy8g4pSA4pSAIElOU1RBTEwg4pSA4pSACmlmKCRhY3Rpb249PT0naW5zdGFsbCcpewogICAgJHBkbz1kYigpOwogICAgJHRhYmxlcz1bIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHVzZXJzICgKICAgICAgICBpZCBJTlQgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVksCiAgICAgICAgdXNlcm5hbWUgVkFSQ0hBUigxMDApIFVOSVFVRSBOT1QgTlVMTCwKICAgICAgICBwYXNzd29yZCBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCiAgICAgICAgbmFtZSBWQVJDSEFSKDEwMCksCiAgICAgICAgcm9sZSBWQVJDSEFSKDEwMCksCiAgICAgICAgaW5pdGlhbHMgVkFSQ0hBUig1KSwKICAgICAgICBjb2xvciBWQVJDSEFSKDIwKSBERUZBVUxUICdhdi1wJywKICAgICAgICBpc19hZG1pbiBUSU5ZSU5UKDEpIERFRkFVTFQgMCwKICAgICAgICBvbmxpbmUgVElOWUlOVCgxKSBERUZBVUxUIDEsCiAgICAgICAgdGVsZWdyYW1fY2hhdF9pZCBWQVJDSEFSKDUwKSwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcHJvamVjdHMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLAogICAgICAgIG5hbWUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgICAgIGNsaWVudCBWQVJDSEFSKDI1NSkscGhvbmUgVkFSQ0hBUigxMDApLAogICAgICAgIHN0YXR1cyBWQVJDSEFSKDUwKSBERUZBVUxUICduZXcnLAogICAgICAgIHRvdGFsIERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLHJlY2VpdmVkIERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLAogICAgICAgIHN0YXJ0X2RhdGUgREFURSBOVUxMLGRlYWRsaW5lIERBVEUgTlVMTCxwcm9ncmVzcyBJTlQgREVGQVVMVCAwLAogICAgICAgIGFzc2lnbmVlIFZBUkNIQVIoMTAwKSx0YWdzIFRFWFQscmVjdXJyaW5nIFZBUkNIQVIoMjApLG5vdGVzIFRFWFQsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICB1cGRhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QIE9OIFVQREFURSBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIsIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRhc2tzICgKICAgICAgICBpZCBWQVJDSEFSKDM2KSBQUklNQVJZIEtFWSx0ZXh0IFRFWFQgTk9UIE5VTEwsCiAgICAgICAgYXNzaWduZWUgVkFSQ0hBUigxMDApLHVyZ2VudCBUSU5ZSU5UKDEpIERFRkFVTFQgMCxkb25lIFRJTllJTlQoMSkgREVGQVVMVCAwLAogICAgICAgIGR1ZV9kYXRlIERBVEVUSU1FIE5VTEwsbm90ZSBURVhULAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiLCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBub3RlcyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksdGl0bGUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgICAgIGJvZHkgVEVYVCxhdXRob3IgVkFSQ0hBUigxMDApLHVyZ2VudCBUSU5ZSU5UKDEpIERFRkFVTFQgMCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY2xpZW50cyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksbmFtZSBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCiAgICAgICAgY29tcGFueSBWQVJDSEFSKDI1NSksZW1haWwgVkFSQ0hBUigyNTUpLHBob25lIFZBUkNIQVIoMTAwKSxlaWsgVkFSQ0hBUig1MCksbm90ZXMgVEVYVCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgaG9zdGluZyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksZG9tYWluIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKICAgICAgICBjbGllbnQgVkFSQ0hBUigyNTUpLHNlcnZlciBWQVJDSEFSKDI1NSksdHlwZSBWQVJDSEFSKDUwKSxkaXNrIFZBUkNIQVIoNTApLHBsYW4gVkFSQ0hBUig1MCksCiAgICAgICAgc3NsX2V4cGlyZXMgREFURSBOVUxMLGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiLCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBwYXNzd29yZHMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLHNpdGUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgICAgIHVzZXJuYW1lIFZBUkNIQVIoMjU1KSxwYXNzIFZBUkNIQVIoNTAwKSxjYXRlZ29yeSBWQVJDSEFSKDUwKSxjbGllbnQgVkFSQ0hBUigyNTUpLAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiLCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBvZmZlcnMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLG51bSBWQVJDSEFSKDUwKSxjbGllbnQgVkFSQ0hBUigyNTUpLAogICAgICAgIHNlcnZpY2UgVkFSQ0hBUigyNTUpLHRvdGFsIERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLHN0YXR1cyBWQVJDSEFSKDUwKSBERUZBVUxUICfQp9Cw0LrQsNGJ0LAnLAogICAgICAgIG9mZmVyX3R5cGUgVkFSQ0hBUigzMCkgREVGQVVMVCAnb25lX3RpbWUnLAogICAgICAgIGRldGFpbHMgTE9OR1RFWFQsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICB1cGRhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QIE9OIFVQREFURSBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSIsIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGNvbnRyYWN0cyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksbmFtZSBWQVJDSEFSKDI1NSksY2xpZW50IFZBUkNIQVIoMjU1KSwKICAgICAgICBzaWduX2RhdGUgREFURSBOVUxMLGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiLCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBwcmVzZW5jZSAoCiAgICAgICAgaWQgSU5UIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLHVzZXJfaWQgSU5UIE5PVCBOVUxMLAogICAgICAgIHN0YXR1cyBWQVJDSEFSKDMwKSBOT1QgTlVMTCwKICAgICAgICBpcF9hZGRyZXNzIFZBUkNIQVIoNjApLAogICAgICAgIHVzZXJfYWdlbnQgVkFSQ0hBUigyNTUpLAogICAgICAgIGxhdGl0dWRlIERFQ0lNQUwoMTAsNykgTlVMTCwKICAgICAgICBsb25naXR1ZGUgREVDSU1BTCgxMCw3KSBOVUxMLAogICAgICAgIGFjY3VyYWN5IERFQ0lNQUwoMTAsMikgTlVMTCwKICAgICAgICBsb2NhdGlvbl9ub3RlIFZBUkNIQVIoMjU1KSwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIiwiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYWN0aXZpdHkgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSx3aG8gVkFSQ0hBUigxMDApLHdoYXQgVEVYVCwKICAgICAgICBjb2xvciBWQVJDSEFSKDIwKSxpbml0aWFscyBWQVJDSEFSKDUpLAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiXTsKICAgIGZvcmVhY2goJHRhYmxlcyBhcyAkc3FsKSAkcGRvLT5leGVjKCRzcWwpOwogICAgLy8gVGFyZ2V0cyB0YWJsZSAoc2VwYXJhdGUgYmVjYXVzZSBpdCB3YXMgYWRkZWQgbGF0ZXIpCiAgICAkcGRvLT5leGVjKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0YXJnZXRzICgKICAgICAgICBpZCBJTlQgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVksCiAgICAgICAgdXNlcl9pZCBJTlQgTk9UIE5VTEwsCiAgICAgICAgY3JlYXRlZF9ieSBJTlQgTk9UIE5VTEwsCiAgICAgICAgdGl0bGUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogICAgICAgIGRlc2NyaXB0aW9uIFRFWFQsCiAgICAgICAgdGFyZ2V0X3ZhbHVlIElOVCBOT1QgTlVMTCwKICAgICAgICBjdXJyZW50X3ZhbHVlIElOVCBERUZBVUxUIDAsCiAgICAgICAgdW5pdCBWQVJDSEFSKDUwKSBERUZBVUxUICfQsdGALicsCiAgICAgICAgZGF0ZSBEQVRFIE5PVCBOVUxMLAogICAgICAgIHN0YXR1cyBWQVJDSEFSKDIwKSBERUZBVUxUICdhY3RpdmUnLAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiKTsKICAgIC8vIFNhZmUgY29sdW1uIGFkZGl0aW9ucwogICAgJGFsdGVycz1bCiAgICAgICAgIkFMVEVSIFRBQkxFIHRhc2tzIEFERCBDT0xVTU4gZHVlX2RhdGUgREFURVRJTUUgTlVMTCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHRhc2tzIEFERCBDT0xVTU4gbm90ZSBURVhUIiwKICAgICAgICAiQUxURVIgVEFCTEUgdXNlcnMgQUREIENPTFVNTiB0ZWxlZ3JhbV9jaGF0X2lkIFZBUkNIQVIoNTApIiwKICAgICAgICAiQUxURVIgVEFCTEUgcGFzc3dvcmRzIEFERCBDT0xVTU4gY2xpZW50IFZBUkNIQVIoMjU1KSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIG9mZmVycyBBREQgQ09MVU1OIG9mZmVyX3R5cGUgVkFSQ0hBUigzMCkgREVGQVVMVCAnb25lX3RpbWUnIiwKICAgICAgICAiQUxURVIgVEFCTEUgb2ZmZXJzIEFERCBDT0xVTU4gZGV0YWlscyBMT05HVEVYVCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIG9mZmVycyBBREQgQ09MVU1OIHVwZGF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAgT04gVVBEQVRFIENVUlJFTlRfVElNRVNUQU1QIiwKICAgICAgICAiQUxURVIgVEFCTEUgcHJlc2VuY2UgQUREIENPTFVNTiBpcF9hZGRyZXNzIFZBUkNIQVIoNjApIiwKICAgICAgICAiQUxURVIgVEFCTEUgcHJlc2VuY2UgQUREIENPTFVNTiB1c2VyX2FnZW50IFZBUkNIQVIoMjU1KSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gbGF0aXR1ZGUgREVDSU1BTCgxMCw3KSBOVUxMIiwKICAgICAgICAiQUxURVIgVEFCTEUgcHJlc2VuY2UgQUREIENPTFVNTiBsb25naXR1ZGUgREVDSU1BTCgxMCw3KSBOVUxMIiwKICAgICAgICAiQUxURVIgVEFCTEUgcHJlc2VuY2UgQUREIENPTFVNTiBhY2N1cmFjeSBERUNJTUFMKDEwLDIpIE5VTEwiLAogICAgICAgICJBTFRFUiBUQUJMRSBwcmVzZW5jZSBBREQgQ09MVU1OIGxvY2F0aW9uX25vdGUgVkFSQ0hBUigyNTUpIiwKICAgIF07CiAgICBmb3JlYWNoKCRhbHRlcnMgYXMgJHNxbCl7dHJ5eyRwZG8tPmV4ZWMoJHNxbCk7fWNhdGNoKEV4Y2VwdGlvbiAkZSl7fX0KICAgIC8vIERlZmF1bHQgYWRtaW4KICAgICRjbnQ9JHBkby0+cXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHVzZXJzIiktPmZldGNoQ29sdW1uKCk7CiAgICBpZigkY250PT0wKXsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyB1c2VycyAodXNlcm5hbWUscGFzc3dvcmQsbmFtZSxyb2xlLGluaXRpYWxzLGNvbG9yLGlzX2FkbWluKSBWQUxVRVMgKD8sPyw/LD8sPyw/LDEpIikKICAgICAgICAgICAgLT5leGVjdXRlKFsnYWRtaW4nLHBhc3N3b3JkX2hhc2goJ3dlYnRyaXhpYTIwMjUnLFBBU1NXT1JEX0RFRkFVTFQpLCfQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgCcsJ0FkbWluJywn0JDQlCcsJ2F2LXAnXSk7CiAgICB9CiAgICBvaygnVGFibGVzIHJlYWR5Jyk7Cn0KCi8vIOKUgOKUgCBHRVQgVEVMRUdSQU0gQ0hBVCBJRCAoaGVscGVyKSDilIDilIAKaWYoJGFjdGlvbj09PSd0Z191cGRhdGVzJyl7CiAgICAvLyBDYWxsIHRoaXMgdG8gZmluZCB5b3VyIGNoYXRfaWQgYWZ0ZXIgd3JpdGluZyAvc3RhcnQgdG8gdGhlIGJvdAogICAgJHVybD0naHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdCcuVEdfVE9LRU4uJy9nZXRVcGRhdGVzJzsKICAgICRyZXNwPUBmaWxlX2dldF9jb250ZW50cygkdXJsKTsKICAgICRkYXRhPWpzb25fZGVjb2RlKCRyZXNwLHRydWUpOwogICAgJGNoYXRzPVtdOwogICAgZm9yZWFjaCgkZGF0YVsncmVzdWx0J10/P1tdIGFzICR1cGQpewogICAgICAgICRjaGF0PSR1cGRbJ21lc3NhZ2UnXVsnY2hhdCddPz8kdXBkWydjaGFubmVsX3Bvc3QnXVsnY2hhdCddPz9udWxsOwogICAgICAgIGlmKCRjaGF0KSAkY2hhdHNbXT1bJ2lkJz0+JGNoYXRbJ2lkJ10sJ3R5cGUnPT4kY2hhdFsndHlwZSddLCd0aXRsZSc9PiRjaGF0Wyd0aXRsZSddPz8kY2hhdFsnZmlyc3RfbmFtZSddPz8nJ107CiAgICB9CiAgICBvayhbJ3VwZGF0ZXMnPT5jb3VudCgkZGF0YVsncmVzdWx0J10/P1tdKSwnY2hhdHMnPT5hcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCRjaGF0cyxTT1JUX1JFR1VMQVIpKV0pOwp9CgovLyDilIDilIAgU0VUIFRFTEVHUkFNIENIQVQgSUQg4pSA4pSACmlmKCRhY3Rpb249PT0ndGdfc2V0X2NoYXQnKXsKICAgIC8vIEdFVDogYXBpLnBocD9hY3Rpb249dGdfc2V0X2NoYXQmY2hhdF9pZD0tMTAweHh4eHh4eAogICAgJGNoYXRfaWQ9JF9HRVRbJ2NoYXRfaWQnXT8/Jyc7CiAgICBpZighJGNoYXRfaWQpIGVycignTWlzc2luZyBjaGF0X2lkJyk7CiAgICAkZmlsZT1fX0RJUl9fLicvY29uZmlnLnBocCc7CiAgICAkY29udGVudD1maWxlX2dldF9jb250ZW50cygkZmlsZSk7CiAgICBpZihzdHJwb3MoJGNvbnRlbnQsJ1RHX0NIQVRfSUQnKSE9PWZhbHNlKXsKICAgICAgICAkY29udGVudD1wcmVnX3JlcGxhY2UoCiAgICAgICAgICAgICIvZGVmaW5lXFwoJ1RHX0NIQVRfSUQnLFxccyonW14nXSonXFxzKlxcKTsvIiwKICAgICAgICAgICAgImRlZmluZSgnVEdfQ0hBVF9JRCcsJ3skY2hhdF9pZH0nKTsiLAogICAgICAgICAgICAkY29udGVudAogICAgICAgICk7CiAgICB9IGVsc2UgewogICAgICAgICRjb250ZW50PXJ0cmltKCRjb250ZW50KS4iXG5kZWZpbmUoJ1RHX0NIQVRfSUQnLCd7JGNoYXRfaWR9Jyk7XG4iOwogICAgfQogICAgZmlsZV9wdXRfY29udGVudHMoJGZpbGUsJGNvbnRlbnQpOwogICAgdGcoIuKchSA8Yj5XZWJ0cml4aWEgSHViPC9iPlxuXG7QotC10LvQtdCz0YDQsNC8INC40LfQstC10YHRgtC40Y/RgtCwINGB0LAg0LDQutGC0LjQstC40YDQsNC90LghXG5cbtCS0YHRj9C60L4g0L/RgNC40YHRitGB0YLQstC40LUg0L3QsCDQtdC60LjQv9CwINGJ0LUg0LHRitC00LUg0LTQvtC60LvQsNC00LLQsNC90L4g0YLRg9C6LiIpOwogICAgb2soJ0NoYXQgSUQgc2F2ZWQ6ICcuJGNoYXRfaWQpOwp9CgovLyDilIDilIAgTE9HSU4g4pSA4pSACmlmKCRhY3Rpb249PT0nbG9naW4nKXsKICAgICRiPWJvZHkoKTsKICAgICRzdG10PWRiKCktPnByZXBhcmUoIlNFTEVDVCAqIEZST00gdXNlcnMgV0hFUkUgdXNlcm5hbWU9PyIpOwogICAgJHN0bXQtPmV4ZWN1dGUoWyRiWyd1c2VybmFtZSddPz8nJ10pOwogICAgJHU9JHN0bXQtPmZldGNoKCk7CiAgICBpZigkdSYmcGFzc3dvcmRfdmVyaWZ5KCRiWydwYXNzd29yZCddPz8nJywkdVsncGFzc3dvcmQnXSkpewogICAgICAgICRfU0VTU0lPTlsnaHViX3VzZXJfaWQnXT0oaW50KSR1WydpZCddOwogICAgICAgICRfU0VTU0lPTlsnaHViX2lzX2FkbWluJ109KChpbnQpKCR1Wydpc19hZG1pbiddPz8wKT09PTEpOwogICAgICAgIHVuc2V0KCR1WydwYXNzd29yZCddKTsKICAgICAgICBvaygkdSk7CiAgICB9IGVsc2UgZXJyKCfQk9GA0LXRiNC90L4g0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L4g0LjQvNC1INC40LvQuCDQv9Cw0YDQvtC70LAnKTsKfQoKLy8g4pSA4pSAIFVTRVJTIOKUgOKUgAppZigkYWN0aW9uPT09J3VzZXJzJyl7CiAgICAkcGRvPWRiKCk7CiAgICBpZigkbWV0aG9kPT09J0dFVCcpewogICAgICAgICRyb3dzPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgaWQsdXNlcm5hbWUsbmFtZSxyb2xlLGluaXRpYWxzLGNvbG9yLGlzX2FkbWluLG9ubGluZSx0ZWxlZ3JhbV9jaGF0X2lkIEZST00gdXNlcnMgT1JERVIgQlkgaWQiKS0+ZmV0Y2hBbGwoKTsKICAgICAgICBvaygkcm93cyk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7CiAgICAgICAgaWYoaXNzZXQoJGJbJ2lkJ10pJiYkYlsnaWQnXSl7CiAgICAgICAgICAgIGlmKCFlbXB0eSgkYlsncGFzc3dvcmQnXSkpewogICAgICAgICAgICAgICAgJHN0bXQ9JHBkby0+cHJlcGFyZSgiVVBEQVRFIHVzZXJzIFNFVCBuYW1lPT8scm9sZT0/LGluaXRpYWxzPT8sY29sb3I9Pyxpc19hZG1pbj0/LG9ubGluZT0/LHVzZXJuYW1lPT8scGFzc3dvcmQ9Pyx0ZWxlZ3JhbV9jaGF0X2lkPT8gV0hFUkUgaWQ9PyIpOwogICAgICAgICAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyRiWyduYW1lJ10sJGJbJ3JvbGUnXSwkYlsnaW5pdGlhbHMnXSwkYlsnY29sb3InXSwkYlsnaXNfYWRtaW4nXT8/MCwkYlsnb25saW5lJ10/PzEsCiAgICAgICAgICAgICAgICAgICAgJGJbJ3VzZXJuYW1lJ10scGFzc3dvcmRfaGFzaCgkYlsncGFzc3dvcmQnXSxQQVNTV09SRF9ERUZBVUxUKSwkYlsndGVsZWdyYW1fY2hhdF9pZCddPz9udWxsLCRiWydpZCddXSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkc3RtdD0kcGRvLT5wcmVwYXJlKCJVUERBVEUgdXNlcnMgU0VUIG5hbWU9Pyxyb2xlPT8saW5pdGlhbHM9Pyxjb2xvcj0/LGlzX2FkbWluPT8sb25saW5lPT8sdXNlcm5hbWU9Pyx0ZWxlZ3JhbV9jaGF0X2lkPT8gV0hFUkUgaWQ9PyIpOwogICAgICAgICAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyRiWyduYW1lJ10sJGJbJ3JvbGUnXSwkYlsnaW5pdGlhbHMnXSwkYlsnY29sb3InXSwkYlsnaXNfYWRtaW4nXT8/MCwkYlsnb25saW5lJ10/PzEsCiAgICAgICAgICAgICAgICAgICAgJGJbJ3VzZXJuYW1lJ10sJGJbJ3RlbGVncmFtX2NoYXRfaWQnXT8/bnVsbCwkYlsnaWQnXV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG9rKFsnaWQnPT4kYlsnaWQnXV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIHVzZXJzICh1c2VybmFtZSxwYXNzd29yZCxuYW1lLHJvbGUsaW5pdGlhbHMsY29sb3IsaXNfYWRtaW4sdGVsZWdyYW1fY2hhdF9pZCkgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8pIikKICAgICAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGJbJ3VzZXJuYW1lJ10scGFzc3dvcmRfaGFzaCgkYlsncGFzc3dvcmQnXT8/J2h1YjIwMjUnLFBBU1NXT1JEX0RFRkFVTFQpLAogICAgICAgICAgICAgICAgICAgICRiWyduYW1lJ10sJGJbJ3JvbGUnXSwkYlsnaW5pdGlhbHMnXSwkYlsnY29sb3InXT8/J2F2LXAnLCRiWydpc19hZG1pbiddPz8wLCRiWyd0ZWxlZ3JhbV9jaGF0X2lkJ10/P251bGxdKTsKICAgICAgICAgICAgb2soWydpZCc9PiRwZG8tPmxhc3RJbnNlcnRJZCgpXSk7CiAgICAgICAgfQogICAgfQogICAgaWYoJG1ldGhvZD09PSdERUxFVEUnKXsKICAgICAgICAkaWQ9JF9HRVRbJ2lkJ10/PycnOwogICAgICAgIGRiKCktPnByZXBhcmUoIkRFTEVURSBGUk9NIHVzZXJzIFdIRVJFIGlkPT8gQU5EIGlzX2FkbWluPTAiKS0+ZXhlY3V0ZShbJGlkXSk7CiAgICAgICAgb2sodHJ1ZSk7CiAgICB9Cn0KCi8vIOKUgOKUgCBQUkVTRU5DRSDilIDilIAKaWYoJGFjdGlvbj09PSdwcmVzZW5jZScpewogICAgJHBkbz1kYigpOwogICAgZm9yZWFjaChbCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gaXBfYWRkcmVzcyBWQVJDSEFSKDYwKSIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gdXNlcl9hZ2VudCBWQVJDSEFSKDI1NSkiLAogICAgICAgICJBTFRFUiBUQUJMRSBwcmVzZW5jZSBBREQgQ09MVU1OIGxhdGl0dWRlIERFQ0lNQUwoMTAsNykgTlVMTCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gbG9uZ2l0dWRlIERFQ0lNQUwoMTAsNykgTlVMTCIsCiAgICAgICAgIkFMVEVSIFRBQkxFIHByZXNlbmNlIEFERCBDT0xVTU4gYWNjdXJhY3kgREVDSU1BTCgxMCwyKSBOVUxMIiwKICAgICAgICAiQUxURVIgVEFCTEUgcHJlc2VuY2UgQUREIENPTFVNTiBsb2NhdGlvbl9ub3RlIFZBUkNIQVIoMjU1KSIsCiAgICBdIGFzICRzcWwpe3RyeXskcGRvLT5leGVjKCRzcWwpO31jYXRjaChFeGNlcHRpb24gJGUpe319CiAgICBpZigkbWV0aG9kPT09J0dFVCcpewogICAgICAgICRsb2c9JHBkby0+cXVlcnkoIlNFTEVDVCBwLiosdS5uYW1lLHUuaW5pdGlhbHMsdS5jb2xvciBGUk9NIHByZXNlbmNlIHAKICAgICAgICAgICAgSk9JTiB1c2VycyB1IE9OIHAudXNlcl9pZD11LmlkCiAgICAgICAgICAgIFdIRVJFIERBVEUocC5jcmVhdGVkX2F0KT1DVVJEQVRFKCkKICAgICAgICAgICAgT1JERVIgQlkgcC5jcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKTsKICAgICAgICAkY3VycmVudD0kcGRvLT5xdWVyeSgiU0VMRUNUIHAuKix1Lm5hbWUsdS5pbml0aWFscyx1LmNvbG9yCiAgICAgICAgICAgIEZST00gcHJlc2VuY2UgcCBKT0lOIHVzZXJzIHUgT04gcC51c2VyX2lkPXUuaWQKICAgICAgICAgICAgV0hFUkUgcC5pZCBJTiAoU0VMRUNUIE1BWChpZCkgRlJPTSBwcmVzZW5jZSBXSEVSRSBEQVRFKGNyZWF0ZWRfYXQpPUNVUkRBVEUoKSBHUk9VUCBCWSB1c2VyX2lkKSIpLT5mZXRjaEFsbCgpOwogICAgICAgIG9rKFsnbG9nJz0+JGxvZywnY3VycmVudCc9PiRjdXJyZW50XSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7CiAgICAgICAgJHVzZXJfaWQ9KGludCkoJGJbJ3VzZXJfaWQnXT8/MCk7CiAgICAgICAgJHN0YXR1cz0kYlsnc3RhdHVzJ10/PycnOwogICAgICAgIGlmKCEkdXNlcl9pZHx8ISRzdGF0dXMpIGVycignTWlzc2luZyBkYXRhOiB1c2VyX2lkPScuJHVzZXJfaWQuJyBzdGF0dXM9Jy4kc3RhdHVzKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAkbGF0PWlzX251bWVyaWMoJGJbJ2xhdGl0dWRlJ10/P251bGwpPyRiWydsYXRpdHVkZSddOm51bGw7CiAgICAgICAgJGxuZz1pc19udW1lcmljKCRiWydsb25naXR1ZGUnXT8/bnVsbCk/JGJbJ2xvbmdpdHVkZSddOm51bGw7CiAgICAgICAgJGFjYz1pc19udW1lcmljKCRiWydhY2N1cmFjeSddPz9udWxsKT8kYlsnYWNjdXJhY3knXTpudWxsOwogICAgICAgICRub3RlPXN1YnN0cigoc3RyaW5nKSgkYlsnbG9jYXRpb25fbm90ZSddPz8nJyksMCwyNTUpOwogICAgICAgICRpcD1jbGllbnRJcCgpOwogICAgICAgICR1YT1zdWJzdHIoKHN0cmluZykoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddPz8nJyksMCwyNTUpOwoKICAgICAgICAvLyBJbnNlcnQgcHJlc2VuY2UgcmVjb3JkCiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gcHJlc2VuY2UgKHVzZXJfaWQsc3RhdHVzLGlwX2FkZHJlc3MsdXNlcl9hZ2VudCxsYXRpdHVkZSxsb25naXR1ZGUsYWNjdXJhY3ksbG9jYXRpb25fbm90ZSkKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8pIiktPmV4ZWN1dGUoWyR1c2VyX2lkLCRzdGF0dXMsJGlwLCR1YSwkbGF0LCRsbmcsJGFjYywkbm90ZV0pOwoKICAgICAgICAvLyBHZXQgdXNlciBpbmZvCiAgICAgICAgJHVzZXI9JHBkby0+cHJlcGFyZSgiU0VMRUNUIG5hbWUscm9sZSx0ZWxlZ3JhbV9jaGF0X2lkIEZST00gdXNlcnMgV0hFUkUgaWQ9PyIpOwogICAgICAgICR1c2VyLT5leGVjdXRlKFskdXNlcl9pZF0pOwogICAgICAgICR1PSR1c2VyLT5mZXRjaCgpOwoKICAgICAgICAvLyBTdGF0dXMgZW1vamlzIGFuZCBtZXNzYWdlcwogICAgICAgICRpY29ucz1bJ2Fycml2ZWQnPT4n8J+foicsJ2JyZWFrJz0+J+KYlScsJ2JhY2snPT4n8J+UtScsJ2xlZnQnPT4n8J+UtCcsJ3RvaWxldCc9Pifwn5q9Jywnc21va2UnPT4n8J+arCcsJ3Ntb2tlX2JhY2snPT4n8J+SqCddOwogICAgICAgICRsYWJlbHM9WydhcnJpdmVkJz0+J9Cf0YDQuNGB0YLQuNCz0L3QsCDQvdCwINGA0LDQsdC+0YLQsCcsJ2JyZWFrJz0+J9CY0LfQu9C10LfQtSDQvdCwINC/0L7Rh9C40LLQutCwJywnYmFjayc9PifQktGK0YDQvdCwINGB0LUg0L7RgiDQv9C+0YfQuNCy0LrQsCcsJ2xlZnQnPT4n0KLRgNGK0LPQvdCwINC+0YIg0L7RhNC40YHQsCcsJ3RvaWxldCc9PifQmNC30LvQtdC30LUg0LTQviDRgtC+0LDQu9C10YLQvdCwJywnc21va2UnPT4n0JjQt9C70LXQt9C1INC90LAg0YbQuNCz0LDRgNCwJywnc21va2VfYmFjayc9PifQktGK0YDQvdCwINGB0LUg0L7RgiDRhtC40LPQsNGA0LAnXTsKICAgICAgICAkaWNvbj0kaWNvbnNbJHN0YXR1c10/PyfimqonOwogICAgICAgICRsYWJlbD0kbGFiZWxzWyRzdGF0dXNdPz8kc3RhdHVzOwogICAgICAgICR0aW1lPWRhdGUoJ0g6aScpOwogICAgICAgICRuYW1lPSR1WyduYW1lJ10/PyfQodC70YPQttC40YLQtdC7JzsKICAgICAgICAkcm9sZT0kdVsncm9sZSddPz8nJzsKCiAgICAgICAgLy8gU2VuZCBUZWxlZ3JhbSB0byBHUk9VUC9DSEFOTkVMCiAgICAgICAgJG1zZz0ieyRpY29ufSA8Yj57JG5hbWV9PC9iPiIgLiAoJHJvbGU/IiAoeyRyb2xlfSkiOiIiKSAuICJcbnskbGFiZWx9XG48aT7wn5WQIHskdGltZX08L2k+IjsKICAgICAgICB0ZygkbXNnKTsKCiAgICAgICAgLy8gQWxzbyBzZW5kIHBlcnNvbmFsIFRHIGlmIHVzZXIgaGFzIHRoZWlyIG93biBjaGF0X2lkCiAgICAgICAgJHBlcnNvbmFsQ2hhdElkPSR1Wyd0ZWxlZ3JhbV9jaGF0X2lkJ10/PycnOwogICAgICAgIGlmKCFlbXB0eSgkcGVyc29uYWxDaGF0SWQpJiYkcGVyc29uYWxDaGF0SWQhPT1UR19DSEFUX0lEKXsKICAgICAgICAgICAgJHBlcnNvbmFsTXNncz1bCiAgICAgICAgICAgICAgICAnYXJyaXZlZCc9PiLwn5+iIDxiPtCU0L7QsdGA0LUg0LTQvtGI0YrQuyDQvdCwINGA0LDQsdC+0YLQsCE8L2I+XG7QntGC0LHQtdC70Y/Qt9Cw0L0g0YHQuDogeyR0aW1lfSIsCiAgICAgICAgICAgICAgICAnYnJlYWsnPT4i4piVIDxiPtCf0YDQuNGP0YLQvdCwINC/0L7Rh9C40LLQutCwITwvYj5cbtCY0LfQu9C10LfQvdCwINCyOiB7JHRpbWV9IiwKICAgICAgICAgICAgICAgICdiYWNrJz0+IvCflLUgPGI+0JTQvtCx0YDQtSDQtNC+0YjRitC7INC+0LHRgNCw0YLQvdC+ITwvYj5cbtCS0YrRgNC90LAg0YHQtTogeyR0aW1lfSIsCiAgICAgICAgICAgICAgICAnbGVmdCc9PiLwn5S0IDxiPtCb0LXQutCwINCy0LXRh9C10YAhPC9iPlxu0KLRgNGK0LPQvdCwINCyOiB7JHRpbWV9IgogICAgICAgICAgICBdOwogICAgICAgICAgICB0ZygkcGVyc29uYWxNc2dzWyRzdGF0dXNdPz8kbXNnLCAkcGVyc29uYWxDaGF0SWQpOwogICAgICAgIH0KCiAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gJGUpIHsgZXJyKCdQcmVzZW5jZSBlcnJvcjogJy4kZS0+Z2V0TWVzc2FnZSgpKTsgfQogICAgICAgIG9rKHRydWUpOwogICAgfQp9CgovLyDilIDilIAgUFJPSkVDVFMg4pSA4pSACmlmKCRhY3Rpb249PT0ncHJvamVjdHMnKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJykgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gcHJvamVjdHMgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIiktPmZldGNoQWxsKCkpOwogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOyRpZD0kYlsnaWQnXT8/dW5pcWlkKCdwJyx0cnVlKTsKICAgICAgICAkdGFncz1pc3NldCgkYlsndGFncyddKT9qc29uX2VuY29kZSgkYlsndGFncyddLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOidbXSc7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gcHJvamVjdHMgKGlkLG5hbWUsY2xpZW50LHBob25lLHN0YXR1cyx0b3RhbCxyZWNlaXZlZCxzdGFydF9kYXRlLGRlYWRsaW5lLHByb2dyZXNzLGFzc2lnbmVlLHRhZ3MscmVjdXJyaW5nLG5vdGVzKQogICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPykKICAgICAgICAgICAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgbmFtZT1WQUxVRVMobmFtZSksY2xpZW50PVZBTFVFUyhjbGllbnQpLHBob25lPVZBTFVFUyhwaG9uZSksCiAgICAgICAgICAgIHN0YXR1cz1WQUxVRVMoc3RhdHVzKSx0b3RhbD1WQUxVRVModG90YWwpLHJlY2VpdmVkPVZBTFVFUyhyZWNlaXZlZCksCiAgICAgICAgICAgIHN0YXJ0X2RhdGU9VkFMVUVTKHN0YXJ0X2RhdGUpLGRlYWRsaW5lPVZBTFVFUyhkZWFkbGluZSkscHJvZ3Jlc3M9VkFMVUVTKHByb2dyZXNzKSwKICAgICAgICAgICAgYXNzaWduZWU9VkFMVUVTKGFzc2lnbmVlKSx0YWdzPVZBTFVFUyh0YWdzKSxyZWN1cnJpbmc9VkFMVUVTKHJlY3VycmluZyksbm90ZXM9VkFMVUVTKG5vdGVzKSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWyduYW1lJ10/PycnLCRiWydjbGllbnQnXT8/JycsJGJbJ3Bob25lJ10/PycnLCRiWydzdGF0dXMnXT8/J25ldycsCiAgICAgICAgICAgICAgICAkYlsndG90YWwnXT8/MCwkYlsncmVjZWl2ZWQnXT8/MCwkYlsnc3RhcnQnXT8/bnVsbCwkYlsnZGVhZGxpbmUnXT8/bnVsbCwKICAgICAgICAgICAgICAgICRiWydwcm9ncmVzcyddPz8wLCRiWydhc3NpZ25lZSddPz8nJywkdGFncywkYlsncmVjdXJyaW5nJ10/PycnLCRiWydub3RlcyddPz8nJ10pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gcHJvamVjdHMgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KCi8vIOKUgOKUgCBUQVNLUyDilIDilIAKaWYoJGFjdGlvbj09PSd0YXNrcycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSB0YXNrcyBPUkRFUiBCWSBkdWVfZGF0ZSBJUyBOVUxMLCBkdWVfZGF0ZSBBU0MsIGNyZWF0ZWRfYXQgREVTQyIpLT5mZXRjaEFsbCgpKTsKICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgndCcsdHJ1ZSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gdGFza3MgKGlkLHRleHQsYXNzaWduZWUsdXJnZW50LGRvbmUsZHVlX2RhdGUsbm90ZSkgVkFMVUVTICg/LD8sPyw/LD8sPyw/KQogICAgICAgICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSB0ZXh0PVZBTFVFUyh0ZXh0KSxhc3NpZ25lZT1WQUxVRVMoYXNzaWduZWUpLAogICAgICAgICAgICB1cmdlbnQ9VkFMVUVTKHVyZ2VudCksZG9uZT1WQUxVRVMoZG9uZSksZHVlX2RhdGU9VkFMVUVTKGR1ZV9kYXRlKSxub3RlPVZBTFVFUyhub3RlKSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWyd0ZXh0J10/PycnLCRiWydhc3NpZ25lZSddPz8nJywkYlsndXJnZW50J10/PzAsJGJbJ2RvbmUnXT8/MCwKICAgICAgICAgICAgICAgICRiWydkdWVfZGF0ZSddPz9udWxsLCRiWydub3RlJ10/PycnXSk7CiAgICAgICAgb2soWydpZCc9PiRpZF0pOwogICAgfQogICAgaWYoJG1ldGhvZD09PSdERUxFVEUnKXskcGRvLT5wcmVwYXJlKCJERUxFVEUgRlJPTSB0YXNrcyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8nJ10pO29rKHRydWUpO30KfQoKLy8g4pSA4pSAIE5PVEVTIOKUgOKUgAppZigkYWN0aW9uPT09J25vdGVzJyl7CiAgICAkcGRvPWRiKCk7CiAgICBpZigkbWV0aG9kPT09J0dFVCcpIG9rKCRwZG8tPnF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIG5vdGVzIE9SREVSIEJZIGNyZWF0ZWRfYXQgREVTQyIpLT5mZXRjaEFsbCgpKTsKICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgnbicsdHJ1ZSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gbm90ZXMgKGlkLHRpdGxlLGJvZHksYXV0aG9yLHVyZ2VudCkgVkFMVUVTICg/LD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIHRpdGxlPVZBTFVFUyh0aXRsZSksYm9keT1WQUxVRVMoYm9keSksYXV0aG9yPVZBTFVFUyhhdXRob3IpLHVyZ2VudD1WQUxVRVModXJnZW50KSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWyd0aXRsZSddPz8nJywkYlsnYm9keSddPz8nJywkYlsnYXV0aG9yJ10/PycnLCRiWyd1cmdlbnQnXT8/MF0pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gbm90ZXMgV0hFUkUgaWQ9PyIpLT5leGVjdXRlKFskX0dFVFsnaWQnXT8/JyddKTtvayh0cnVlKTt9Cn0KCi8vIOKUgOKUgCBDTElFTlRTIOKUgOKUgAppZigkYWN0aW9uPT09J2NsaWVudHMnKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJykgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gY2xpZW50cyBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7JGlkPSRiWydpZCddPz91bmlxaWQoJ2MnLHRydWUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGNsaWVudHMgKGlkLG5hbWUsY29tcGFueSxlbWFpbCxwaG9uZSxlaWssbm90ZXMsdmF0X251bWJlcixhZGRyZXNzLGNpdHksY291bnRyeSxtb2wsaWJhbixjb250YWN0X3BlcnNvbikKICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIG5hbWU9VkFMVUVTKG5hbWUpLGNvbXBhbnk9VkFMVUVTKGNvbXBhbnkpLGVtYWlsPVZBTFVFUyhlbWFpbCksCiAgICAgICAgICAgIHBob25lPVZBTFVFUyhwaG9uZSksZWlrPVZBTFVFUyhlaWspLG5vdGVzPVZBTFVFUyhub3RlcyksdmF0X251bWJlcj1WQUxVRVModmF0X251bWJlciksCiAgICAgICAgICAgIGFkZHJlc3M9VkFMVUVTKGFkZHJlc3MpLGNpdHk9VkFMVUVTKGNpdHkpLGNvdW50cnk9VkFMVUVTKGNvdW50cnkpLG1vbD1WQUxVRVMobW9sKSwKICAgICAgICAgICAgaWJhbj1WQUxVRVMoaWJhbiksY29udGFjdF9wZXJzb249VkFMVUVTKGNvbnRhY3RfcGVyc29uKSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWyduYW1lJ10/PycnLCRiWydjb21wYW55J10/PycnLCRiWydlbWFpbCddPz8nJywkYlsncGhvbmUnXT8/JycsJGJbJ2VpayddPz8nJywkYlsnbm90ZXMnXT8/JycsCiAgICAgICAgICAgICAgICAkYlsndmF0X251bWJlciddPz8nJywkYlsnYWRkcmVzcyddPz8nJywkYlsnY2l0eSddPz8nJywkYlsnY291bnRyeSddPz8n0JHRitC70LPQsNGA0LjRjycsJGJbJ21vbCddPz8nJywKICAgICAgICAgICAgICAgICRiWydpYmFuJ10/PycnLCRiWydjb250YWN0X3BlcnNvbiddPz8nJ10pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gY2xpZW50cyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8nJ10pO29rKHRydWUpO30KfQoKLy8g4pSA4pSAIEhPU1RJTkcg4pSA4pSACmlmKCRhY3Rpb249PT0naG9zdGluZycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBob3N0aW5nIE9SREVSIEJZIGNyZWF0ZWRfYXQgREVTQyIpLT5mZXRjaEFsbCgpKTsKICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgnaCcsdHJ1ZSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gaG9zdGluZyAoaWQsZG9tYWluLGNsaWVudCxzZXJ2ZXIsdHlwZSxkaXNrLHBsYW4sc3NsX2V4cGlyZXMpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/KQogICAgICAgICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSBkb21haW49VkFMVUVTKGRvbWFpbiksY2xpZW50PVZBTFVFUyhjbGllbnQpLHNlcnZlcj1WQUxVRVMoc2VydmVyKSwKICAgICAgICAgICAgdHlwZT1WQUxVRVModHlwZSksZGlzaz1WQUxVRVMoZGlzaykscGxhbj1WQUxVRVMocGxhbiksc3NsX2V4cGlyZXM9VkFMVUVTKHNzbF9leHBpcmVzKSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWydkb21haW4nXT8/JycsJGJbJ2NsaWVudCddPz8nJywkYlsnc2VydmVyJ10/PycnLCRiWyd0eXBlJ10/PydjUGFuZWwnLAogICAgICAgICAgICAgICAgJGJbJ2Rpc2snXT8/JycsJGJbJ3BsYW4nXT8/J1N0YXJ0ZXInLCRiWydzc2wnXT8/bnVsbF0pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gaG9zdGluZyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8nJ10pO29rKHRydWUpO30KfQoKLy8g4pSA4pSAIFBBU1NXT1JEUyDilIDilIAKaWYoJGFjdGlvbj09PSdwYXNzd29yZHMnKXsKICAgICRwZG89ZGIoKTsKICAgIHRyeXskcGRvLT5leGVjKCJBTFRFUiBUQUJMRSBwYXNzd29yZHMgQUREIENPTFVNTiBjbGllbnQgVkFSQ0hBUigyNTUpIik7fWNhdGNoKEV4Y2VwdGlvbiAkZSl7fQogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBwYXNzd29yZHMgT1JERVIgQlkgY2xpZW50LCBjcmVhdGVkX2F0IERFU0MiKS0+ZmV0Y2hBbGwoKSk7CiAgICBpZigkbWV0aG9kPT09J1BPU1QnKXsKICAgICAgICAkYj1ib2R5KCk7JGlkPSRiWydpZCddPz91bmlxaWQoJ3B3Jyx0cnVlKTsKICAgICAgICAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBwYXNzd29yZHMgKGlkLHNpdGUsdXNlcm5hbWUscGFzcyxjYXRlZ29yeSxjbGllbnQpIFZBTFVFUyAoPyw/LD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIHNpdGU9VkFMVUVTKHNpdGUpLHVzZXJuYW1lPVZBTFVFUyh1c2VybmFtZSkscGFzcz1WQUxVRVMocGFzcyksCiAgICAgICAgICAgIGNhdGVnb3J5PVZBTFVFUyhjYXRlZ29yeSksY2xpZW50PVZBTFVFUyhjbGllbnQpIikKICAgICAgICAgICAgLT5leGVjdXRlKFskaWQsJGJbJ3NpdGUnXT8/JycsJGJbJ3VzZXInXT8/JycsJGJbJ3Bhc3MnXT8/JycsJGJbJ2NhdCddPz8nb3RoZXInLCRiWydjbGllbnQnXT8/JyddKTsKICAgICAgICBvayhbJ2lkJz0+JGlkXSk7CiAgICB9CiAgICBpZigkbWV0aG9kPT09J0RFTEVURScpeyRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIHBhc3N3b3JkcyBXSEVSRSBpZD0/IiktPmV4ZWN1dGUoWyRfR0VUWydpZCddPz8nJ10pO29rKHRydWUpO30KfQoKLy8g4pSA4pSAIE9GRkVSUyDilIDilIAKaWYoJGFjdGlvbj09PSdvZmZlcnMnKXsKICAgICRwZG89ZGIoKTsKICAgIGZvcmVhY2goWwogICAgICAgICJBTFRFUiBUQUJMRSBvZmZlcnMgQUREIENPTFVNTiBvZmZlcl90eXBlIFZBUkNIQVIoMzApIERFRkFVTFQgJ29uZV90aW1lJyIsCiAgICAgICAgIkFMVEVSIFRBQkxFIG9mZmVycyBBREQgQ09MVU1OIGRldGFpbHMgTE9OR1RFWFQiLAogICAgICAgICJBTFRFUiBUQUJMRSBvZmZlcnMgQUREIENPTFVNTiB1cGRhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QIE9OIFVQREFURSBDVVJSRU5UX1RJTUVTVEFNUCIsCiAgICBdIGFzICRzcWwpe3RyeXskcGRvLT5leGVjKCRzcWwpO31jYXRjaChFeGNlcHRpb24gJGUpe319CiAgICBpZigkbWV0aG9kPT09J0dFVCcpewogICAgICAgIGlmKCFlbXB0eSgkX0dFVFsnaWQnXSkpewogICAgICAgICAgICAkc3Q9JHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSBvZmZlcnMgV0hFUkUgaWQ9PyIpOwogICAgICAgICAgICAkc3QtPmV4ZWN1dGUoWyRfR0VUWydpZCddXSk7CiAgICAgICAgICAgICRyb3c9JHN0LT5mZXRjaCgpOwogICAgICAgICAgICBpZighJHJvdykgZXJyKCfQntGE0LXRgNGC0LDRgtCwINC90LUg0LUg0L3QsNC80LXRgNC10L3QsCcpOwogICAgICAgICAgICBvaygkcm93KTsKICAgICAgICB9CiAgICAgICAgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gb2ZmZXJzIE9SREVSIEJZIGNyZWF0ZWRfYXQgREVTQyIpLT5mZXRjaEFsbCgpKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nUE9TVCcpewogICAgICAgICRiPWJvZHkoKTskaWQ9JGJbJ2lkJ10/P3VuaXFpZCgnbycsdHJ1ZSk7CiAgICAgICAgJGRldGFpbHM9JGJbJ2RldGFpbHMnXT8/bnVsbDsKICAgICAgICBpZihpc19hcnJheSgkZGV0YWlscykpICRkZXRhaWxzPWpzb25fZW5jb2RlKCRkZXRhaWxzLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIG9mZmVycyAoaWQsbnVtLGNsaWVudCxzZXJ2aWNlLHRvdGFsLHN0YXR1cyxvZmZlcl90eXBlLGRldGFpbHMpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/KQogICAgICAgICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURSBudW09VkFMVUVTKG51bSksY2xpZW50PVZBTFVFUyhjbGllbnQpLHNlcnZpY2U9VkFMVUVTKHNlcnZpY2UpLAogICAgICAgICAgICB0b3RhbD1WQUxVRVModG90YWwpLHN0YXR1cz1WQUxVRVMoc3RhdHVzKSxvZmZlcl90eXBlPVZBTFVFUyhvZmZlcl90eXBlKSxkZXRhaWxzPVZBTFVFUyhkZXRhaWxzKSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGlkLCRiWydudW0nXT8/JycsJGJbJ2NsaWVudCddPz8nJywkYlsnc2VydmljZSddPz8nJywkYlsndG90YWwnXT8/MCwKICAgICAgICAgICAgICAgICRiWydzdGF0dXMnXT8/J9Cn0LDQutCw0YnQsCcsJGJbJ29mZmVyX3R5cGUnXT8/J29uZV90aW1lJywkZGV0YWlsc10pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gb2ZmZXJzIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJF9HRVRbJ2lkJ10/PycnXSk7b2sodHJ1ZSk7fQp9CgovLyDilIDilIAgQ09OVFJBQ1RTIOKUgOKUgAppZigkYWN0aW9uPT09J2NvbnRyYWN0cycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKSBvaygkcGRvLT5xdWVyeSgiU0VMRUNUICogRlJPTSBjb250cmFjdHMgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIiktPmZldGNoQWxsKCkpOwogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOyRpZD0kYlsnaWQnXT8/dW5pcWlkKCdjb24nLHRydWUpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGNvbnRyYWN0cyAoaWQsbmFtZSxjbGllbnQsc2lnbl9kYXRlKSBWQUxVRVMgKD8sPyw/LD8pCiAgICAgICAgICAgIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIG5hbWU9VkFMVUVTKG5hbWUpLGNsaWVudD1WQUxVRVMoY2xpZW50KSxzaWduX2RhdGU9VkFMVUVTKHNpZ25fZGF0ZSkiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWyRpZCwkYlsnbmFtZSddPz8nJywkYlsnY2xpZW50J10/PycnLCRiWydzaWduX2RhdGUnXT8/bnVsbF0pOwogICAgICAgIG9rKFsnaWQnPT4kaWRdKTsKICAgIH0KICAgIGlmKCRtZXRob2Q9PT0nREVMRVRFJyl7JHBkby0+cHJlcGFyZSgiREVMRVRFIEZST00gY29udHJhY3RzIFdIRVJFIGlkPT8iKS0+ZXhlY3V0ZShbJF9HRVRbJ2lkJ10/PycnXSk7b2sodHJ1ZSk7fQp9CgovLyDilIDilIAgQUNUSVZJVFkg4pSA4pSACmlmKCRhY3Rpb249PT0nYWN0aXZpdHknKXsKICAgICRwZG89ZGIoKTsKICAgIGlmKCRtZXRob2Q9PT0nR0VUJykgb2soJHBkby0+cXVlcnkoIlNFTEVDVCAqIEZST00gYWN0aXZpdHkgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIExJTUlUIDUwIiktPmZldGNoQWxsKCkpOwogICAgaWYoJG1ldGhvZD09PSdQT1NUJyl7CiAgICAgICAgJGI9Ym9keSgpOwogICAgICAgICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGFjdGl2aXR5ICh3aG8sd2hhdCxjb2xvcixpbml0aWFscykgVkFMVUVTICg/LD8sPyw/KSIpCiAgICAgICAgICAgIC0+ZXhlY3V0ZShbJGJbJ3dobyddPz8n0KHQuNGB0YLQtdC80LAnLCRiWyd3aGF0J10/PycnLCRiWydjb2xvciddPz8nYXYtcCcsJGJbJ2luaXRpYWxzJ10/Pyc/PyddKTsKICAgICAgICBvayh0cnVlKTsKICAgIH0KfQoKLy8g4pSA4pSAIFNUQVRTIOKUgOKUgAppZigkYWN0aW9uPT09J3N0YXRzJyl7CiAgICAkcGRvPWRiKCk7CiAgICAkdG90YWw9JHBkby0+cXVlcnkoIlNFTEVDVCBDT0FMRVNDRShTVU0odG90YWwpLDApIEZST00gcHJvamVjdHMgV0hFUkUgc3RhdHVzIT0nZG9uZSciKS0+ZmV0Y2hDb2x1bW4oKTsKICAgICRyZWN2PSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09BTEVTQ0UoU1VNKHJlY2VpdmVkKSwwKSBGUk9NIHByb2plY3RzIFdIRVJFIHN0YXR1cyE9J2RvbmUnIiktPmZldGNoQ29sdW1uKCk7CiAgICAkYWN0aXZlPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBwcm9qZWN0cyBXSEVSRSBzdGF0dXMhPSdkb25lJyIpLT5mZXRjaENvbHVtbigpOwogICAgJHRhc2tzPSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB0YXNrcyBXSEVSRSBkb25lPTAiKS0+ZmV0Y2hDb2x1bW4oKTsKICAgICRzc2w9JHBkby0+cXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGhvc3RpbmcgV0hFUkUgc3NsX2V4cGlyZXMgSVMgTk9UIE5VTEwgQU5EIHNzbF9leHBpcmVzPERBVEVfQUREKE5PVygpLElOVEVSVkFMIDMwIERBWSkgQU5EIHNzbF9leHBpcmVzPk5PVygpIiktPmZldGNoQ29sdW1uKCk7CiAgICBvayhbJ2FjdGl2ZV9wcm9qZWN0cyc9PihpbnQpJGFjdGl2ZSwndG90YWxfb2ZmZXJlZCc9PihmbG9hdCkkdG90YWwsJ3RvdGFsX3JlY2VpdmVkJz0+KGZsb2F0KSRyZWN2LAogICAgICAgICd0b3RhbF9wZW5kaW5nJz0+KGZsb2F0KSgkdG90YWwtJHJlY3YpLCd0YXNrc19wZW5kaW5nJz0+KGludCkkdGFza3MsJ3NzbF93YXJuaW5ncyc9PihpbnQpJHNzbF0pOwp9CgoKLy8g4pSA4pSAIFRBUkdFVFMg4pSA4pSACmlmKCRhY3Rpb249PT0ndGFyZ2V0cycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKXsKICAgICAgICAkZGF0ZT0kX0dFVFsnZGF0ZSddPz9kYXRlKCdZLW0tZCcpOwogICAgICAgICR1c2VyX2lkPSRfR0VUWyd1c2VyX2lkJ10/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+ZmV0Y2hDb2x1bW4oKTsKICAgIGlmKCRjbnQ9PTApewogICAgICAgICRrZXk9YmluMmhleChyYW5kb21fYnl0ZXMoMTYpKTsKICAgICAgICAkZGVmYXVsdE1vZHVsZXM9anNvbl9lbmNvZGUoWydwcm9qZWN0cyc9PjEsJ2NsaWVudHMnPT4xLCdmaW5hbmNlJz0+MSwndGFza3MnPT4xLCdvZmZlcnMnPT4xLCdjb250cmFjdHMnPT4xLAogICAgICAgICAgICAnY2FsZW5kYXInPT4xLCdob3N0aW5nJz0+MSwncGFzc3dvcmRzJz0+MSwnbm90ZXMnPT4xLCdyZXBvcnRzJz0+MSwncHJlc2VuY2UnPT4xLCd0YXJnZXRzJz0+MSwKICAgICAgICAgICAgJ3dvcmtyZXBvcnQnPT4xLCd1c2Vycyc9PjEsJ2ludm9pY2luZyc9PjEsJ2hyX3JlcXVlc3RzJz0+MSwnd2F5YmlsbHMnPT4xXSk7CiAgICAgICAgJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gYnJhbmRpbmdfc2V0dGluZ3MgKGlkLHByb2R1Y3RfbmFtZSxsaWNlbnNlX2tleSxtb2R1bGVzX2VuYWJsZWQpIFZBTFVFUyAoMSw/LD8sPykiKQogICAgICAgICAgICAtPmV4ZWN1dGUoWydXZWJ0cml4aWEgSHViJywka2V5LCRkZWZhdWx0TW9kdWxlc10pOwogICAgfQogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY2xpZW50X2h1YnMgKAogICAgICAgIGlkIFZBUkNIQVIoMzYpIFBSSU1BUlkgS0VZLAogICAgICAgIG5hbWUgVkFSQ0hBUigyNTUpLCB1cmwgVkFSQ0hBUig1MDApLCBsaWNlbnNlX2tleSBWQVJDSEFSKDY0KSwKICAgICAgICBodWJfdHlwZSBWQVJDSEFSKDMwKSBERUZBVUxUICdhZ2VuY3knLCBub3RlcyBURVhULAogICAgICAgIGxhc3Rfc3luYyBUSU1FU1RBTVAgTlVMTCwKICAgICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIik7CiAgICAkcGRvLT5leGVjKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBodWJfc3Vic2NyaXB0aW9ucyAoCiAgICAgICAgaWQgVkFSQ0hBUigzNikgUFJJTUFSWSBLRVksCiAgICAgICAgaHViX2lkIFZBUkNIQVIoMzYpIE5PVCBOVUxMLAogICAgICAgIG1vZHVsZSBWQVJDSEFSKDUwKSBOT1QgTlVMTCwKICAgICAgICBwcmljZV9tb250aGx5IERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLAogICAgICAgIGN1cnJlbmN5IFZBUkNIQVIoMTApIERFRkFVTFQgJ0VVUicsCiAgICAgICAgYWN0aXZlIFRJTllJTlQoMSkgREVGQVVMVCAxLAogICAgICAgIHN0YXJ0ZWRfYXQgREFURSBOVUxMLAogICAgICAgIG5leHRfYmlsbGluZ19kYXRlIERBVEUgTlVMTCwKICAgICAgICBub3RlcyBURVhULAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkiKTsKICAgICRwZG8tPmV4ZWMoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHdheWJpbGxzICgKICAgICAgICBpZCBWQVJDSEFSKDM2KSBQUklNQVJZIEtFWSwKICAgICAgICBudW1iZXIgVkFSQ0hBUig1MCksIGRhdGUgREFURSwKICAgICAgICBkcml2ZXJfbmFtZSBWQVJDSEFSKDI1NSksIHZlaGljbGVfcGxhdGUgVkFSQ0hBUig1MCksIHZlaGljbGVfdHlwZSBWQVJDSEFSKDEwMCksCiAgICAgICAgcm91dGVfZnJvbSBWQVJDSEFSKDI1NSksIHJvdXRlX3RvIFZBUkNIQVIoMjU1KSwKICAgICAgICBrbV9zdGFydCBERUNJTUFMKDEwLDEpIERFRkFVTFQgMCwga21fZW5kIERFQ0lNQUwoMTAsMSkgREVGQVVMVCAwLAogICAgICAgIGZ1ZWxfbGl0ZXJzIERFQ0lNQUwoMTAsMikgREVGQVVMVCAwLCBmdWVsX2Nvc3QgREVDSU1BTCgxMCwyKSBERUZBVUxUIDAsCiAgICAgICAgY2FyZ28gVkFSQ0hBUig1MDApLCBjbGllbnQgVkFSQ0hBUigyNTUpLAogICAgICAgIHN0YXR1cyBWQVJDSEFSKDIwKSBERUZBVUxUICdhY3RpdmUnLCBub3RlcyBURVhULAogICAgICAgIGNyZWF0ZWRfYnkgVkFSQ0hBUigxMDApLCBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApIik7CiAgICBvayhbJ21lc3NhZ2UnPT4nUGxhdGZvcm0gdGFibGVzIHJlYWR5JywnbGljZW5zZV9rZXknPT4kcGRvLT5xdWVyeSgiU0VMRUNUIGxpY2Vuc2Vfa2V5IEZST00gYnJhbmRpbmdfc2V0dGluZ3MgV0hFUkUgaWQ9MSIpLT5mZXRjaENvbHVtbigpXSk7Cn0KCmZ1bmN0aW9uIGNoZWNrTGljZW5zZSgkcGRvLCRzZWNyZXQpewogICAgJHI9JHBkby0+cXVlcnkoIlNFTEVDVCBsaWNlbnNlX2tleSBGUk9NIGJyYW5kaW5nX3NldHRpbmdzIFdIRVJFIGlkPTEiKS0+ZmV0Y2goKTsKICAgIGlmKCEkciB8fCAkclsnbGljZW5zZV9rZXknXSE9PSRzZWNyZXQpIGVycign0J3QtdCy0LDQu9C40LTQtdC9INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQuNCy0LXQvSDQutC70Y7RhycpOwp9CgovLyDilIDilIAgQlJBTkRJTkcgKHdoaXRlLWxhYmVsIGlkZW50aXR5KSDilIDilIAKaWYoJGFjdGlvbj09PSdicmFuZGluZ19zZXR0aW5ncycpewogICAgJHBkbz1kYigpOwogICAgaWYoJG1ldGhvZD09PSdHRVQnKXsKICAgICAgICAkcj0kcGRvLT5xdWVyeSgiU0VMRUNUIGlkLHByb2R1Y3RfbmFtZSxsb2dvX3VybCxmYXZpY29uX3VybCxwcmltYXJ5X2NvbG9yLHNlY29uZGFyeV9jb2xvcixmb290ZXJfdGV4dCwKICAgICAgICAgICAgcG93ZXJlZF9ieV92aXNpYmxlLGh1Yl90eXBlLGFkbWluX2xvY2tlZCxtb2R1bGVzX2VuYWJsZWQgRlJPTSBicmFuZGluZ19zZXR0aW5ncyBXSEVSRSBpZD0xIiktPmZldGNoKCk7CiAgICAgICAgaWYoJHIpewogICAgICAgICAgICAkclsnbGljZW5zZV9yb2xlJ109aHViX2xpY2Vuc2Vfcm9sZSgpOwogICAgICAgICAgICAkbHM9aHViX2xpY2Vuc2Vfc3RhdHVzKCk7CiAgICAgICAgICAgICRyWydtb2R1bGVzX2VuYWJsZWQnXT1odWJfZWZmZWN0aXZlX21vZHVsZXMoJGxzKTsKICAgICAgICAgICAgJHJbJ2xpY2Vuc2Vfc3RhdGUnXT0kbHNbJ3N0YXRlJ10/PydhY3RpdmUnOwogICAgICAgICAgICAkclsnbGljZW5zZV9tZXNzYWdlJ109JGxzWydtZXNzYWdlJ10/PycnOwogICAgICAgICAgICAkclsnbGljZW5zZV92YWxpZF91bnRpbCddPSRsc1sndmFsaWRfdW50aWwnXT8/bnVsbDsKICAgICAgICAgICAgJHJbJ2xpY2Vuc2VfZ3JhY2VfdW50aWwnXT0kbHNbJ2dyYWNlX3VudGlsJ10/P251bGw7CiAgICAgICAgICAgIGlmKGluX2FycmF5KCRyWydsaWNlbnNlX3N0YXRlJ10sWydsb2NrZWQnLCdpbnZhbGlkJ10sdHJ1ZSkpewogICAgICAgICAgICAgICAgZm9yZWFjaCgkclsnbW9kdWxlc19lbmFibGVkJ10gYXMgJG1rPT4kbXYpICRyWydtb2R1bGVzX2VuYWJsZWQnXVskbWtdPTA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgb2soJHI/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/QvtC70LfQstCw0Ygg0KLQtdC70LXQs9GA0LDQvCDQuNC30LLQtdGB0YLQuNGPCmRlZmluZSgnVEdfVE9LRU4nLCcnKTsKZGVmaW5lKCdUR19DSEFUX0lEJywnJyk7Cg==', 'contracts.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0JTQvtCz0L7QstC+0YDQuDwvdGl0bGU+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9U29yYTp3Z2h0QDMwMDs0MDA7NTAwOzYwMDs3MDAmZmFtaWx5PURNK01vbm86d2dodEA0MDA7NTAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KPHN0eWxlPgo6cm9vdHsKICAtLWRhcms6IzBkMGQxNDsgLS1hY2NlbnQ6IzZjNjNmZjsgLS1hY2NlbnQyOiNhNzhiZmE7IC0tZ3JlZW46IzE2YTM0YTsKICAtLWdyZWVuLWJnOiNmMGZkZjQ7IC0tYm9yZGVyOiNlMGRkZjU7IC0tdGV4dDojMWExYTJlOyAtLXRleHQyOiM0YTRhNmE7CiAgLS10ZXh0MzojODg4OGFhOyAtLXN1cmZhY2U6I2ZhZjlmZjsgLS1hbWJlcjojZDk3NzA2Owp9Cip7bWFyZ2luOjA7cGFkZGluZzowO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KYm9keXtmb250LWZhbWlseTonU29yYScsc2Fucy1zZXJpZjtiYWNrZ3JvdW5kOiNmMGVlZmE7bWluLWhlaWdodDoxMDB2aDtwYWRkaW5nOjMwcHggMjBweH0KCi8qIFNFTEVDVE9SIFBBR0UgKi8KLnNlbGVjdG9yLXBhZ2V7bWF4LXdpZHRoOjkwMHB4O21hcmdpbjowIGF1dG99Ci5zZWxlY3Rvci1oZWFkZXJ7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbTozNnB4fQouc2VsZWN0b3ItaGVhZGVyIGltZ3toZWlnaHQ6MzhweDttYXJnaW4tYm90dG9tOjE2cHh9Ci5zZWxlY3Rvci10aXRsZXtmb250LXNpemU6MjZweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tdGV4dCk7bWFyZ2luLWJvdHRvbTo2cHh9Ci5zZWxlY3Rvci1zdWJ7Zm9udC1zaXplOjE0cHg7Y29sb3I6dmFyKC0tdGV4dDMpfQouY29udHJhY3QtZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgzLDFmcik7Z2FwOjE2cHg7bWFyZ2luLWJvdHRvbToyOHB4fQouY29udHJhY3QtdHlwZXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjI0cHggMjBweDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmFsbCAuMnM7dGV4dC1hbGlnbjpjZW50ZXJ9Ci5jb250cmFjdC10eXBlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JveC1zaGFkb3c6MCA0cHggMjRweCByZ2JhKDEwOCw5OSwyNTUsLjEyKX0KLmNvbnRyYWN0LXR5cGUuc2VsZWN0ZWR7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7YmFja2dyb3VuZDojZjVmM2ZmfQouY3QtaWNvbntmb250LXNpemU6MzJweDttYXJnaW4tYm90dG9tOjEycHh9Ci5jdC10aXRsZXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdGV4dCk7bWFyZ2luLWJvdHRvbTo0cHh9Ci5jdC1kZXNje2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXRleHQzKTtsaW5lLWhlaWdodDoxLjV9Ci5nZW5lcmF0ZS1idG57ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO21heC13aWR0aDozMDBweDttYXJnaW46MCBhdXRvO3BhZGRpbmc6MTRweDtib3JkZXItcmFkaXVzOjEycHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlcjpub25lO2NvbG9yOiNmZmY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OidTb3JhJyxzYW5zLXNlcmlmO3RyYW5zaXRpb246b3BhY2l0eSAuMTVzfQouZ2VuZXJhdGUtYnRuOmhvdmVye29wYWNpdHk6Ljl9Ci5nZW5lcmF0ZS1idG46ZGlzYWJsZWR7b3BhY2l0eTouNDtjdXJzb3I6bm90LWFsbG93ZWR9CgovKiBDT05UUkFDVCBET0MgUEFHRSAqLwouY29udHJhY3QtZG9jLXBhZ2V7ZGlzcGxheTpub25lO21heC13aWR0aDo4NjBweDttYXJnaW46MCBhdXRvfQoudG9vbGJhcntkaXNwbGF5OmZsZXg7Z2FwOjhweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luLWJvdHRvbToxNnB4O2ZsZXgtd3JhcDp3cmFwfQoudGJ0bntwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OidTb3JhJyxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMDt0cmFuc2l0aW9uOmFsbCAuMTVzfQoudGJ0bi5wcmltYXJ5e2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjojZmZmfQoudGJ0bi5zZWN7YmFja2dyb3VuZDojZmZmO2NvbG9yOnZhcigtLXRleHQyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcil9Ci50YnRuLmJhY2t7YmFja2dyb3VuZDojZjVmM2ZmO2NvbG9yOnZhcigtLWFjY2VudCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpfQouZWRpdC1iYW5uZXJ7YmFja2dyb3VuZDojZmZmYmViO2JvcmRlcjoxcHggc29saWQgI2ZjZDM0ZDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMHB4IDE2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzkyNDAwZTttYXJnaW4tYm90dG9tOjE0cHg7ZGlzcGxheTpub25lO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4fQouZWRpdC1iYW5uZXIuc2hvd3tkaXNwbGF5OmZsZXh9CgovKiBET0MgU1RZTEVTICovCi5kb2N7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MjBweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDRweCA0MHB4IHJnYmEoMTA4LDk5LDI1NSwuMSl9Ci5kb2MtaGVhZGVye2JhY2tncm91bmQ6dmFyKC0tZGFyayk7cGFkZGluZzozNnB4IDUycHggMzBweDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59Ci5kb2MtaGVhZGVyOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTYwcHg7cmlnaHQ6LTYwcHg7d2lkdGg6MjIwcHg7aGVpZ2h0OjIyMHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6cmdiYSgxMDgsOTksMjU1LC4xKX0KLmhlYWRlci10b3B7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxfQoubG9nby1pbWd7aGVpZ2h0OjMycHg7ZmlsdGVyOmJyaWdodG5lc3MoMTApfQouZG9jLXR5cGUtYmxvY2t7dGV4dC1hbGlnbjpyaWdodH0KLmR0LWxhYmVse2ZvbnQtc2l6ZTo5cHg7bGV0dGVyLXNwYWNpbmc6LjJlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyk7bWFyZ2luLWJvdHRvbTo0cHh9Ci5kdC10aXRsZXtmb250LXNpemU6MjJweDtmb250LXdlaWdodDo3MDA7Y29sb3I6I2ZmZjtsZXR0ZXItc3BhY2luZzotLjNweH0KLmR0LW51bXtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1hY2NlbnQyKTttYXJnaW4tdG9wOjRweDtmb250LWZhbWlseTonRE0gTW9ubycsbW9ub3NwYWNlfQouaGVhZGVyLWJvdHRvbXttYXJnaW4tdG9wOjI0cHg7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxfQouaGVhZGVyLXBhcnRpZXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDozMHB4fQoucGFydHktbGFiZWx7Zm9udC1zaXplOjlweDtsZXR0ZXItc3BhY2luZzouMTVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyk7bWFyZ2luLWJvdHRvbTo2cHh9Ci5wYXJ0eS1uYW1le2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojZmZmO21hcmdpbi1ib3R0b206MnB4fQoucGFydHktZGV0YWlse2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpO2xpbmUtaGVpZ2h0OjEuN30KLnBhcnR5LWRpdmlkZXJ7d2lkdGg6MXB4O2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMSk7bWFyZ2luOjAgMTBweH0KLmRvYy1ib2R5e3BhZGRpbmc6MCA1MnB4fQouY29udHJhY3Qtc2VjdGlvbntib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO3BhZGRpbmc6MjBweCAwfQouY29udHJhY3Qtc2VjdGlvbjpsYXN0LW9mLXR5cGV7Ym9yZGVyLWJvdHRvbTpub25lfQouY3MtbnVte2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1hY2NlbnQpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMWVtO21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweH0KLmNzLW51bTo6YmVmb3Jle2NvbnRlbnQ6Jyc7d2lkdGg6M3B4O2hlaWdodDoxM3B4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItcmFkaXVzOjJweDtmbGV4LXNocmluazowfQouY3MtdGl0bGV7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLXRleHQpO21hcmdpbi1ib3R0b206MTJweH0KLmNzLWJvZHl7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dDIpO2xpbmUtaGVpZ2h0OjEuOX0KLmNzLWJvZHkgcHttYXJnaW4tYm90dG9tOjhweH0KLmNzLWJvZHkgcDpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0KLmNzLWJvZHkgLmFydHtwYWRkaW5nLWxlZnQ6MTRweDtib3JkZXItbGVmdDoycHggc29saWQgdmFyKC0tYm9yZGVyKTttYXJnaW46NnB4IDB9Ci5jcy1ib2R5IHVse2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46NnB4IDB9Ci5jcy1ib2R5IHVsIGxpe3BhZGRpbmc6M3B4IDAgM3B4IDE2cHg7cG9zaXRpb246cmVsYXRpdmV9Ci5jcy1ib2R5IHVsIGxpOjpiZWZvcmV7Y29udGVudDon4pa4Jztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Y29sb3I6dmFyKC0tYWNjZW50Mik7Zm9udC1zaXplOjExcHg7dG9wOjRweH0KLmVkaXRhYmxlLWZpZWxke2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCB2YXIoLS1hY2NlbnQyKTttaW4td2lkdGg6MTAwcHg7Y29sb3I6dmFyKC0tdGV4dCk7Zm9udC13ZWlnaHQ6NTAwfQouc2lnbi1zZWN0aW9ue3BhZGRpbmc6MjBweCAwIDM2cHg7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDo0MHB4fQouc2lnbi1ib3h7Ym9yZGVyLXRvcDoycHggc29saWQgdmFyKC0tYm9yZGVyKTtwYWRkaW5nLXRvcDoxMnB4fQouc2lnbi1sYWJlbHtmb250LXNpemU6OXB4O2NvbG9yOnZhcigtLXRleHQzKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjFlbTttYXJnaW4tYm90dG9tOjNweH0KLnNpZ24tbmFtZXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdGV4dCl9Ci5zaWduLWFyZWF7aGVpZ2h0OjUwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkIHZhcigtLWJvcmRlcik7bWFyZ2luOjEycHggMCA4cHh9Ci5zaWduLWRhdGUtbGluZXtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10ZXh0Myl9Ci5kb2MtZm9vdGVye2JhY2tncm91bmQ6dmFyKC0tZGFyayk7cGFkZGluZzoxNnB4IDUycHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcn0KLmZvb3Rlci1sZWZ0e2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5mb290ZXItbGVmdCBzdHJvbmd7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNjUpfQouZm9vdGVyLXJpZ2h0e2ZvbnQtc2l6ZToxMHB4O2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO3RleHQtYWxpZ246cmlnaHQ7bGluZS1oZWlnaHQ6MS44fQpbY29udGVudGVkaXRhYmxlPSJ0cnVlIl17b3V0bGluZTpub25lO2JvcmRlci1yYWRpdXM6M3B4O3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzO2N1cnNvcjp0ZXh0fQpbY29udGVudGVkaXRhYmxlPSJ0cnVlIl06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDEwOCw5OSwyNTUsLjA3KTtib3gtc2hhZG93OjAgMCAwIDJweCByZ2JhKDEwOCw5OSwyNTUsLjIpfQouZWRpdC1tb2RlIC5lZGl0YWJsZS1maWVsZHtiYWNrZ3JvdW5kOnJnYmEoMTA4LDk5LDI1NSwuMDQpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tYWNjZW50KTtjdXJzb3I6dGV4dH0KCi8qIOKVkOKVkOKVkCBQUklOVCDilZDilZDilZAgKi8KQG1lZGlhIHByaW50IHsKICBAcGFnZSB7IHNpemU6IEE0OyBtYXJnaW46IDE1bW0gMTVtbSAyMG1tIDE1bW07IH0KICAqIHsgLXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0ICFpbXBvcnRhbnQ7IHByaW50LWNvbG9yLWFkanVzdDogZXhhY3QgIWltcG9ydGFudDsgfQogIGh0bWwsIGJvZHkgeyBtYXJnaW46IDAgIWltcG9ydGFudDsgcGFkZGluZzogMCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kOiAjZmZmICFpbXBvcnRhbnQ7IH0KICAuc2VsZWN0b3ItcGFnZSwgLnRvb2xiYXIsIC5lZGl0LWJhbm5lciB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQogIC5jb250cmFjdC1kb2MtcGFnZSB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OyBtYXJnaW46IDAgIWltcG9ydGFudDsgcGFkZGluZzogMCAhaW1wb3J0YW50OyB9CiAgLmRvYyB7IGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDsgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OyB9CiAgLmRvYy1oZWFkZXIgeyBiYWNrZ3JvdW5kOiAjMGQwZDE0ICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDIwcHggMzBweCAxNnB4ICFpbXBvcnRhbnQ7IH0KICAuZG9jLWhlYWRlcjo6YmVmb3JlIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CiAgLmR0LXRpdGxlIHsgZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7IH0KICAuZG9jLWJvZHkgeyBwYWRkaW5nOiAwIDMwcHggIWltcG9ydGFudDsgfQogIC5jb250cmFjdC1zZWN0aW9uIHsgcGFkZGluZzogMTJweCAwICFpbXBvcnRhbnQ7IH0KICAuY3MtYm9keSB7IGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50OyB9CiAgLmNzLWJvZHkgcCB7IG1hcmdpbi1ib3R0b206IDVweCAhaW1wb3J0YW50OyB9CiAgLnNpZ24tc2VjdGlvbiB7IHBhZGRpbmc6IDE0cHggMCAyMHB4ICFpbXBvcnRhbnQ7IHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgfQogIC5zaWduLWFyZWEgeyBoZWlnaHQ6IDM1cHggIWltcG9ydGFudDsgfQogIC5kb2MtZm9vdGVyIHsgYmFja2dyb3VuZDogIzBkMGQxNCAhaW1wb3J0YW50OyBwYWRkaW5nOiAxMHB4IDMwcHggIWltcG9ydGFudDsgfQogIFtjb250ZW50ZWRpdGFibGVdIHsgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7IH0KICAuZWRpdGFibGUtZmllbGQgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYyAhaW1wb3J0YW50OyB9CiAgaDIgeyBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDsgfQogIC5jb250cmFjdC1zZWN0aW9uIHsgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9Cn0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KCjwhLS0gU0VMRUNUT1IgLS0+CjxkaXYgY2xhc3M9InNlbGVjdG9yLXBhZ2UiIGlkPSJzZWxlY3RvclBhZ2UiPgogIDxkaXYgY2xhc3M9InNlbGVjdG9yLWhlYWRlciI+CiAgICA8ZGl2IGNsYXNzPSJzZWxlY3Rvci10aXRsZSI+0JPQtdC90LXRgNC40YDQsNC5INC00L7Qs9C+0LLQvtGAPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzZWxlY3Rvci1zdWIiPtCY0LfQsdC10YDQtdGC0LUg0LLQuNC00LAg0LTQvtCz0L7QstC+0YAsINC/0L7Qv9GK0LvQvdC10YLQtSDQtNCw0L3QvdC40YLQtSDQuCDQv9GA0LjQvdGC0LjRgNCw0LnRgtC1PC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3QtZ3JpZCI+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++4jyDQmtC70LjQutC90Lgg0LLRitGA0YXRgyDQv9C+0LvQtdGC0LDRgtCwINC/0L7QtNGH0LXRgNGC0LDQvdC4INGBINC/0YPQvdC60YLQuNGAINC30LAg0YDQtdC00LDQutGG0LjRjy48L2Rpdj4KICA8ZGl2IGNsYXNzPSJkb2MiIGlkPSJjb250cmFjdERvYyI+PC9kaXY+CjwvZGl2PgoKPHNjcmlwdD4KbGV0IHNlbGVjdGVkVHlwZSA9IG51bGw7CmNvbnN0IG1vbnRocz1bJ9GP0L3RgycsJ9GE0LXQsicsJ9C80LDRgCcsJ9Cw0L/RgCcsJ9C80LDQuScsJ9GO0L3QuCcsJ9GO0LvQuCcsJ9Cw0LLQsycsJ9GB0LXQvycsJ9C+0LrRgicsJ9C90L7QtScsJ9C00LXQuiddOwpmdW5jdGlvbiBmbXREYXRlKGQpe3JldHVybiBkLmdldERhdGUoKSsnICcrbW9udGhzW2QuZ2V0TW9udGgoKV0rJyAnK2QuZ2V0RnVsbFllYXIoKSsn0LMuJ30KY29uc3QgVE9EQVkgPSBmbXREYXRlKG5ldyBEYXRlKCkpOwpjb25zdCBZRUFSID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpOwoKZnVuY3Rpb24gc2VsZWN0VHlwZSh0eXBlKSB7CiAgc2VsZWN0ZWRUeXBlID0gdHlwZTsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY29udHJhY3QtdHlwZScpLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0LScrdHlwZSkuY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2VuZXJhdGVCdG4nKS5kaXNhYmxlZCA9IGZhbHNlOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnZW5lcmF0ZUJ0bicpLnRleHRDb250ZW50ID0gJ9CT0LXQvdC10YDQuNGA0LDQuSDQtNC+0LPQvtCy0L7RgNCwIOKGkic7Cn0KCmZ1bmN0aW9uIGdvQmFjaygpIHsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0b3JQYWdlJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyYWN0RG9jUGFnZScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgZWRpdE1vZGUgPSBmYWxzZTsKfQoKbGV0IGVkaXRNb2RlID0gZmFsc2U7CmZ1bmN0aW9uIHRvZ2dsZUVkaXQoKSB7CiAgZWRpdE1vZGUgPSAhZWRpdE1vZGU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRCYW5uZXInKS5jbGFzc0xpc3QudG9nZ2xlKCdzaG93JywgZWRpdE1vZGUpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0QnRuJykudGV4dENvbnRlbnQgPSBlZGl0TW9kZSA/ICfinIUg0JPQvtGC0L7QstC+JyA6ICfinI/vuI8g0KDQtdC00LDQutGC0LjRgNCw0LknOwogIGNvbnN0IGRvYz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJhY3REb2MnKTsKICBkb2MuY2xhc3NMaXN0LnRvZ2dsZSgnZWRpdC1tb2RlJywgZWRpdE1vZGUpOwogIGRvYy5jb250ZW50RWRpdGFibGUgPSBlZGl0TW9kZSA/ICd0cnVlJyA6ICdmYWxzZSc7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2NvbnRlbnRlZGl0YWJsZV0sIC5lZGl0YWJsZS1maWVsZCcpLmZvckVhY2goZWwgPT4gewogICAgZWwuY29udGVudEVkaXRhYmxlID0gZWRpdE1vZGUgPyAndHJ1ZScgOiAnZmFsc2UnOwogIH0pOwp9CgpmdW5jdGlvbiBmKGxhYmVsLCBkZWY9J19fX19fXycpIHsKICByZXR1cm4gYDxzcGFuIGNsYXNzPSJlZGl0YWJsZS1maWVsZCIgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtkZWZ9PC9zcGFuPmA7Cn0KCmZ1bmN0aW9uIGNvbnRyYWN0SGVhZGVyKHRpdGxlLCBudW0pIHsKICByZXR1cm4gYAogIDxkaXYgY2xhc3M9ImRvYy1oZWFkZXIiPgogICAgPGRpdiBjbGFzcz0iaGVhZGVyLXRvcCI+CiAgICAgIDxkaXYgY2xhc3M9ImxvZ28taW1nIiBzdHlsZT0iZmlsdGVyOm5vbmU7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE0cHgiPiR7Zign0JvQvtCz0L4gLyDRhNC40YDQvNCwJywnX19fX19fX19fX19fX19fXycpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJkb2MtdHlwZS1ibG9jayI+CiAgICAgICAgPGRpdiBjbGFzcz0iZHQtbGFiZWwiPtCU0L7QutGD0LzQtdC90YI8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJkdC10aXRsZSI+JHt0aXRsZX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJkdC1udW0iPuKEliAke2YoJ9Cd0L7QvNC10YAnLCfQlNCe0JMtJytZRUFSKyctJysnX19fJyl9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoZWFkZXItYm90dG9tIj4KICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLXBhcnRpZXMiPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0eS1sYWJlbCI+0JjQt9C/0YrQu9C90LjRgtC10Ls8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LW5hbWUiPiR7Zign0JjQt9C/0YrQu9C90LjRgtC10LsnLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0eS1kZXRhaWwiPtCV0JjQmjogJHtmKCfQldCY0JonLCdfX19fX19fX18nKX08YnI+RW1haWwv0YLQtdC7LjogJHtmKCfQmtC+0L3RgtCw0LrRgicsJ19fX19fX19fX19fX19fX19fX19fX19fX18nKX08YnI+0J/RgNC10LTRgdGC0LDQstC70Y/QstCw0L3QviDQvtGCOiAke2YoJ9Cf0YDQtdC00YHRgtCw0LLQu9GP0LLQsNGJJywnX19fX19fX19fX19fX19fXycpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0eS1sYWJlbCI+0JLRitC30LvQvtC20LjRgtC10Ls8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LW5hbWUiIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JrQu9C40LXQvdGCJywn0JrQu9C40LXQvdGCIC8g0KTQuNGA0LzQsCDQntCe0JQnKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnR5LWRldGFpbCIgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+0JXQmNCaOiAke2YoJ9CV0JjQmicsJ19fX19fX19fXycpfTxicj5FbWFpbDogJHtmKCdFbWFpbCcsJ19fX19fX0BfX19fXy5iZycpfTxicj7Qn9GA0LXQtNGB0YLQsNCy0LvRj9Cy0LDQvdC+INC+0YI6ICR7Zign0J/RgNC10LTRgdGC0LDQstC70Y/QstCw0YknLCdfX19fX19fX19fX19fXycpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImRvYy1ib2R5Ij5gOwp9CgpmdW5jdGlvbiBjb250cmFjdEZvb3RlcigpIHsKICByZXR1cm4gYAogIDxkaXYgY2xhc3M9InNpZ24tc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJzaWduLWJveCI+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tbGFiZWwiPtCX0LAg0JjQl9Cf0KrQm9Cd0JjQotCV0JvQrzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzaWduLW5hbWUiPiR7Zign0JjQt9C/0YrQu9C90LjRgtC10LsnLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tYXJlYSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tZGF0ZS1saW5lIj7QlNCw0YLQsDogJHtUT0RBWX0gJm5ic3A7Jm5ic3A7INCf0L7QtNC/0LjRgSDQuCDQv9C10YfQsNGCOiBfX19fX19fX19fX19fPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNpZ24tYm94Ij4KICAgICAgPGRpdiBjbGFzcz0ic2lnbi1sYWJlbCI+0JfQsCDQktCq0JfQm9Ce0JbQmNCi0JXQm9CvPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tbmFtZSIgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmtC70LjQtdC90YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tYXJlYSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNpZ24tZGF0ZS1saW5lIj7QlNCw0YLQsDogX19fX19fX19fX19fX19fICZuYnNwOyZuYnNwOyDQn9C+0LTQv9C40YEg0Lgg0L/QtdGH0LDRgjogX19fX19fX19fX19fXzwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPC9kaXY+PCEtLSAvZG9jLWJvZHkgLS0+CiAgPGRpdiBjbGFzcz0iZG9jLWZvb3RlciI+CiAgICA8ZGl2IGNsYXNzPSJmb290ZXItbGVmdCI+PHN0cm9uZz4ke2YoJ9Ck0LjRgNC80LAnLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9zdHJvbmc+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJmb290ZXItcmlnaHQiPiR7Zign0JrQvtC90YLQsNC60YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9kaXY+CiAgPC9kaXY+YDsKfQoKZnVuY3Rpb24gY29tbW9uU2VjdGlvbnMoc2VydmljZURlc2MpIHsKICByZXR1cm4gYAogIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAxPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QoNCV0JTQnNCV0KIg0J3QkCDQlNCe0JPQntCS0J7QoNCQPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgPHA+0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINGB0LUg0LfQsNC00YrQu9C20LDQstCwINC00LAg0LjQt9Cy0YrRgNGI0Lgg0LfQsCDQktGK0LfQu9C+0LbQuNGC0LXQu9GPINGB0LvQtdC00L3QuNGC0LUg0YPRgdC70YPQs9C4OjwvcD4KICAgICAgJHtzZXJ2aWNlRGVzY30KICAgICAgPHA+0YHRgNC10YnRgyDQt9Cw0L/Qu9Cw0YnQsNC90LUg0L3QsCDRg9Cz0L7QstC+0YDQtdC90L7RgtC+INCyINC90LDRgdGC0L7Rj9GJ0LjRjyDQtNC+0LPQvtCy0L7RgCDQstGK0LfQvdCw0LPRgNCw0LbQtNC10L3QuNC1LjwvcD4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAyPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KHQoNCe0Jog0J3QkCDQmNCX0J/QqtCb0J3QldCd0JjQlTwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgIDxwPjIuMS4g0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINGB0LUg0LfQsNC00YrQu9C20LDQstCwINC00LAg0LjQt9C/0YrQu9C90Lgg0L/QvtGA0YrRh9C60LDRgtCwINCyINGB0YDQvtC6INC00L4gPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ch0YDQvtC6JywnMzAgKNGC0YDQuNC00LXRgdC10YIpJyl9PC9zdHJvbmc+INGA0LDQsdC+0YLQvdC4INC00L3QuCDQvtGCINC00LDRgtCw0YLQsCDQvdCwINC/0L7QtNC/0LjRgdCy0LDQvdC1INC90LAg0L3QsNGB0YLQvtGP0YnQuNGPINC00L7Qs9C+0LLQvtGAINC4INC/0L7Qu9GD0YfQsNCy0LDQvdC1INC90LAg0LDQstCw0L3RgdC+0LLQvtGC0L4g0L/Qu9Cw0YnQsNC90LUuPC9wPgogICAgICA8cD4yLjIuINCh0YDQvtC60YrRgiDRgdC1INGB0YfQuNGC0LAg0LfQsCDRgdC/0LDQt9C10L0g0L/RgNC4INC/0YDQtdC00LDQstCw0L3QtSDQvdCwINCz0L7RgtC+0LLQuNGPINC/0YDQvtC00YPQutGCINC30LAg0L7QtNC+0LHRgNC10L3QuNC1INC+0YIg0JLRitC30LvQvtC20LjRgtC10LvRjy48L3A+CiAgICAgIDxwPjIuMy4g0J/RgNC4INC30LDQsdCw0LLRj9C90LUg0L7RgiDRgdGC0YDQsNC90LAg0L3QsCDQktGK0LfQu9C+0LbQuNGC0LXQu9GPICjQvdC10L/RgNC10LTQvtGB0YLQsNCy0Y/QvdC1INC90LAg0LzQsNGC0LXRgNC40LDQu9C4LCDRgdGK0LTRitGA0LbQsNC90LjQtSwg0LTQvtGB0YLRitC/0LgpLCDRgdGA0L7QutGK0YIg0YHQtSDRg9C00YrQu9C20LDQstCwINGBINC/0LXRgNC40L7QtNCwINC90LAg0LfQsNCx0LDQstGP0L3QtS48L3A+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMzwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCm0JXQndCQINCYINCd0JDQp9CY0J0g0J3QkCDQn9Cb0JDQqdCQ0J3QlTwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgIDxwPjMuMS4g0JLRitC30LvQvtC20LjRgtC10LvRj9GCINC30LDQv9C70LDRidCwINC90LAg0JjQt9C/0YrQu9C90LjRgtC10LvRjyDQstGK0LfQvdCw0LPRgNCw0LbQtNC10L3QuNC1INCyINGA0LDQt9C80LXRgCDQvdCwIDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQodGD0LzQsCcsJ+KCrCBfX19fXyAoX19fX18g0LXQstGA0L4pJyl9PC9zdHJvbmc+LCDQsdC10Lcg0LLQutC70Y7Rh9C10L3QviDQlNCU0KEuPC9wPgogICAgICA8cD4zLjIuINCf0LvQsNGJ0LDQvdC10YLQviDRgdC1INC40LfQstGK0YDRiNCy0LAg0L/QviDRgdC70LXQtNC90LjRjyDQs9GA0LDRhNC40Lo6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxzdHJvbmc+NTAlICjQsNCy0LDQvdGBL9C60LDQv9Cw0YDQvik8L3N0cm9uZz4g4oCUINC/0YDQuCDQv9C+0LTQv9C40YHQstCw0L3QtSDQvdCwINC00L7Qs9C+0LLQvtGA0LA6ICR7Zign0JDQstCw0L3RgScsJ+KCrCBfX19fXycpfTwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+NTAlICjRhNC40L3QsNC70LXQvSDRgtGA0LDQvdGIKTwvc3Ryb25nPiDigJQg0L/RgNC4INC/0YDQtdC00LDQstCw0L3QtSDQvdCwINCz0L7RgtC+0LLQuNGPINC/0YDQvtC10LrRgjogJHtmKCfQpNC40L3QsNC7Jywn4oKsIF9fX19fJyl9PC9saT4KICAgICAgPC91bD4KICAgICAgPHA+My4zLiDQn9C70LDRidCw0L3QtdGC0L4g0YHQtSDQuNC30LLRitGA0YjQstCwINC/0L4g0LHQsNC90LrQvtCyINC/0YrRgiDQv9C+INGB0LzQtdGC0LrQsCDQvdCwINCY0LfQv9GK0LvQvdC40YLQtdC70Y86IElCQU4gJHtmKCdJQkFOJywnQkdfXyBfX19fIF9fX18gX18gX19fX19fIF9fJyl9PC9wPgogICAgICA8cD4zLjQuINCk0LDQutGC0YPRgNCwINGB0LUg0LjQt9C00LDQstCwINCyINGA0LDQvNC60LjRgtC1INC90LAgNSAo0L/QtdGCKSDRgNCw0LHQvtGC0L3QuCDQtNC90Lgg0YHQu9C10LQg0L/QvtC70YPRh9Cw0LLQsNC90LUg0L3QsCDQv9C70LDRidCw0L3QtdGC0L4uPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDQ8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Cg0JDQktCQINCYINCX0JDQlNCq0JvQltCV0J3QmNCvINCd0JAg0JjQl9Cf0KrQm9Cd0JjQotCV0JvQrzwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgIDx1bD4KICAgICAgICA8bGk+0JTQsCDQuNC30L/RitC70L3QuCDQv9C+0YDRitGH0LrQsNGC0LAg0LIg0YHRgNC+0Log0Lgg0LIg0YHRitC+0YLQstC10YLRgdGC0LLQuNC1INGBINGD0LPQvtCy0L7RgNC10L3QuNGC0LUg0LjQt9C40YHQutCy0LDQvdC40Y8uPC9saT4KICAgICAgICA8bGk+0JTQsCDQv9GA0LXQtNC+0YHRgtCw0LLQuCDQtNC+IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQoNC10LLQuNC30LjQuCcsJzMgKNGC0YDQuCknKX08L3N0cm9uZz4g0LHQtdC30L/Qu9Cw0YLQvdC4INC60L7RgNC10LrRhtC40Lgg0LIg0YDQsNC80LrQuNGC0LUg0L3QsCDQv9GA0L7QtdC60YLQsC48L2xpPgogICAgICAgIDxsaT7QlNCwINC/0L7QtNC00YrRgNC20LAg0L/QvtCy0LXRgNC40YLQtdC70L3QvtGB0YIg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAsINC/0L7Qu9GD0YfQtdC90LAg0L7RgiDQktGK0LfQu9C+0LbQuNGC0LXQu9GPLjwvbGk+CiAgICAgICAgPGxpPtCU0LAg0LjQvdGE0L7RgNC80LjRgNCwINCS0YrQt9C70L7QttC40YLQtdC70Y8g0L/RgNC4INC+0YLQutC70L7QvdC10L3QuNGPINC+0YIg0L/QtdGA0LLQvtC90LDRh9Cw0LvQvdC40Y8g0L/Qu9Cw0L0g0LjQu9C4INC/0YDQuCDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YIg0L7RgiDQv9GA0L7QvNGP0L3QsCDQvdCwINGB0YDQvtC60LAuPC9saT4KICAgICAgPC91bD4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA1PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QoNCQ0JLQkCDQmCDQl9CQ0JTQqtCb0JbQldCd0JjQryDQndCQINCS0KrQl9Cb0J7QltCY0KLQldCb0K88L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8dWw+CiAgICAgICAgPGxpPtCU0LAg0L/RgNC10LTQvtGB0YLQsNCy0Y8g0YHQstC+0LXQstGA0LXQvNC10L3QvdC+INC90LXQvtCx0YXQvtC00LjQvNC40YLQtSDQvNCw0YLQtdGA0LjQsNC70LgsINGB0YrQtNGK0YDQttCw0L3QuNC1INC4INC00L7RgdGC0YrQv9C4LjwvbGk+CiAgICAgICAgPGxpPtCU0LAg0L/QvtGC0LLRitGA0LbQtNCw0LLQsCDQuNC70Lgg0L7RgtGF0LLRitGA0LvRjyDRgSDQvNC+0YLQuNCy0LjRgNCw0L3QviDRgdGC0LDQvdC+0LLQuNGJ0LUg0LIg0YHRgNC+0Log0LTQviA8c3Ryb25nPjUgKNC/0LXRgik8L3N0cm9uZz4g0YDQsNCx0L7RgtC90Lgg0LTQvdC4LjwvbGk+CiAgICAgICAgPGxpPtCU0LAg0LfQsNC/0LvQsNGJ0LAg0YPQs9C+0LLQvtGA0LXQvdC+0YLQviDQstGK0LfQvdCw0LPRgNCw0LbQtNC10L3QuNC1INCyINGB0YDQvtC6LjwvbGk+CiAgICAgICAgPGxpPtCU0LAg0L3QtSDRgNCw0LfQv9GA0L7RgdGC0YDQsNC90Y/QstCwINC40LvQuCDQuNC30L/QvtC70LfQstCwINGH0LDRgdGC0LjRh9C90Lgg0YDQtdC30YPQu9GC0LDRgtC4INC/0YDQtdC00Lgg0YTQuNC90LDQu9C90L7RgtC+INC/0LvQsNGJ0LDQvdC1LjwvbGk+CiAgICAgIDwvdWw+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gNjwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCY0J3QotCV0JvQldCa0KLQo9CQ0JvQndCQINCh0J7QkdCh0KLQktCV0J3QntCh0KI8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8cD42LjEuINCh0LvQtdC0INC40LfQstGK0YDRiNCy0LDQvdC1INC90LAg0L/RitC70L3QvtGC0L4g0L/Qu9Cw0YnQsNC90LUsINCS0YrQt9C70L7QttC40YLQtdC70Y/RgiDQv9GA0LjQtNC+0LHQuNCy0LAg0L/RgNCw0LLQvtGC0L4g0L3QsCDQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LjQt9GA0LDQsdC+0YLQtdC90LjRjyDQv9GA0L7QtNGD0LrRgi48L3A+CiAgICAgIDxwPjYuMi4g0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC30LDQv9Cw0LfQstCwINC/0YDQsNCy0L7RgtC+INC00LAg0LLQutC70Y7Rh9Cy0LAg0L/RgNC+0LXQutGC0LAg0LIg0YHQstC+0LXRgtC+INC/0L7RgNGC0YTQvtC70LjQviwg0L7RgdCy0LXQvSDQsNC60L4g0JLRitC30LvQvtC20LjRgtC10LvRj9GCINC40LfRgNC40YfQvdC+INC1INC/0L7QuNGB0LrQsNC7INC60L7QvdGE0LjQtNC10L3RhtC40LDQu9C90L7RgdGCLjwvcD4KICAgICAgPHA+Ni4zLiDQktGB0LjRh9C60Lgg0LjQt9C/0L7Qu9C30LLQsNC90Lgg0LvQuNGG0LXQvdC30LjRgNCw0L3QuCDRiNGA0LjRhNGC0L7QstC1LCDQuNC30L7QsdGA0LDQttC10L3QuNGPINC4INC/0LvRitCz0LjQvdC4INC+0YHRgtCw0LLQsNGCINGB0L7QsdGB0YLQstC10L3QvtGB0YIg0L3QsCDRgdGK0L7RgtCy0LXRgtC90LjRgtC1INC40Lwg0L/RgNC40YLQtdC20LDRgtC10LvQuC48L3A+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gNzwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCe0KLQk9Ce0JLQntCg0J3QntCh0KIg0Jgg0JPQkNCg0JDQndCm0JjQrzwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgIDxwPjcuMS4g0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC/0YDQtdC00L7RgdGC0LDQstGPINCz0LDRgNCw0L3RhtC40L7QvdC10L0g0L/QtdGA0LjQvtC0INC+0YIgPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9CT0LDRgNCw0L3RhtC40Y8nLCczMCAo0YLRgNC40LTQtdGB0LXRgiknKX08L3N0cm9uZz4g0LrQsNC70LXQvdC00LDRgNC90Lgg0LTQvdC4INGB0LvQtdC0INC/0YDQtdC00LDQstCw0L3QtdGC0L4g0L3QsCDQv9GA0L7QtdC60YLQsCwg0LIg0YDQsNC80LrQuNGC0LUg0L3QsCDQutC+0LnRgtC+INCx0LXQt9C/0LvQsNGC0L3QviDQvtGC0YHRgtGA0LDQvdGP0LLQsCDQsdGK0LPQvtCy0LUsINC/0YDQuNGH0LjQvdC10L3QuCDQvtGCINGA0LDQt9GA0LDQsdC+0YLQutCw0YLQsC48L3A+CiAgICAgIDxwPjcuMi4g0JPQsNGA0LDQvdGG0LjRj9GC0LAg0L3QtSDQv9C+0LrRgNC40LLQsCDQv9C+0LLRgNC10LTQuCwg0L/RgNC40YfQuNC90LXQvdC4INC+0YI6INC/0YDQvtC80LXQvdC4INC90LDQv9GA0LDQstC10L3QuCDQvtGCINCS0YrQt9C70L7QttC40YLQtdC70Y8g0LjQu9C4INGC0YDQtdGC0Lgg0LvQuNGG0LAsINGF0LDQutC10YDRgdC60Lgg0LDRgtCw0LrQuCwg0YHRgNC40LLQvtCy0LUg0L3QsCDRhdC+0YHRgtC40L3QsyDQuNC70Lgg0LTQtdC50YHRgtCy0LjRjyDQvdCwINC90LXQv9GA0LXQvtC00L7Qu9C40LzQsCDRgdC40LvQsC48L3A+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gODwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0KDQldCa0KDQkNCi0K/QktCQ0J3QlSDQndCQINCU0J7Qk9Ce0JLQntCg0JA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICA8cD44LjEuINCU0L7Qs9C+0LLQvtGA0YrRgiDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LrRgNCw0YLQuCDQv9C+INCy0LfQsNC40LzQvdC+INGB0YrQs9C70LDRgdC40LUg0L3QsCDRgdGC0YDQsNC90LjRgtC1LCDQvtGE0L7RgNC80LXQvdC+INCyINC/0LjRgdC80LXQvSDQstC40LQuPC9wPgogICAgICA8cD44LjIuINCf0YDQuCDQvtGC0LrQsNC3INC+0YIg0JLRitC30LvQvtC20LjRgtC10LvRjyDRgdC70LXQtCDRgdGC0LDRgNGC0LjRgNCw0L3QtSDQvdCwINGA0LDQsdC+0YLQsNGC0LAsINCw0LLQsNC90YHRitGCINC90LUg0YHQtSDQstGA0YrRidCwLjwvcD4KICAgICAgPHA+OC4zLiDQn9GA0Lgg0L3QtdC40LfQv9GK0LvQvdC10L3QuNC1INC+0YIg0YHRgtGA0LDQvdCwINC90LAg0JjQt9C/0YrQu9C90LjRgtC10LvRjywg0YLQvtC5INC00YrQu9C20Lgg0LLRgNGK0YnQsNC90LUg0L3QsCDQsNCy0LDQvdGB0L7QstC+0YLQviDQv9C70LDRidCw0L3QtS48L3A+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gOTwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCX0JDQmtCb0K7Qp9CY0KLQldCb0J3QmCDQoNCQ0JfQn9Ce0KDQldCU0JHQmDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgIDxwPjkuMS4g0J3QsNGB0YLQvtGP0YnQuNGP0YIg0LTQvtCz0L7QstC+0YAg0LUg0YHRitGB0YLQsNCy0LXQvSDQsiDQtNCy0LAg0LXQtNC90LDQutCy0Lgg0LXQutC30LXQvNC/0LvRj9GA0LAg4oCUINC/0L4g0LXQtNC40L0g0LfQsCDQstGB0Y/QutCwINC+0YIg0YHRgtGA0LDQvdC40YLQtS48L3A+CiAgICAgIDxwPjkuMi4g0JfQsCDQvdC10YPRgNC10LTQtdC90LjRgtC1INCyINC00L7Qs9C+0LLQvtGA0LAg0LLRitC/0YDQvtGB0Lgg0YHQtSDQv9GA0LjQu9Cw0LPQsCDQtNC10LnRgdGC0LLQsNGJ0L7RgtC+INC30LDQutC+0L3QvtC00LDRgtC10LvRgdGC0LLQviDQvdCwINCg0LXQv9GD0LHQu9C40LrQsCDQkdGK0LvQs9Cw0YDQuNGPLjwvcD4KICAgICAgPHA+OS4zLiDQktGB0LjRh9C60Lgg0YHQv9C+0YDQvtCy0LUg0YHQtSDRgNC10YjQsNCy0LDRgiDQv9C+INCy0LfQsNC40LzQvdC+INGB0YrQs9C70LDRgdC40LUsINCwINC/0YDQuCDQvdC10LLRitC30LzQvtC20L3QvtGB0YIg4oCUINC/0L4g0YHRitC00LXQsdC10L0g0YDQtdC0INCyINC60L7QvNC/0LXRgtC10L3RgtC90LjRjyDRgdGK0LQg0LIg0LPRgC4gJHtmKCfQk9GA0LDQtCcsJ19fX19fX19fXycpfS48L3A+CiAgICAgIDxwPjkuNC4g0JTQvtCz0L7QstC+0YDRitGCINCy0LvQuNC30LAg0LIg0YHQuNC70LAg0L7RgiDQtNCw0YLQsNGC0LAg0L3QsCDQv9C+0LTQv9C40YHQstCw0L3QtdGC0L4g0LzRgyDQuCDQv9C+0LvRg9GH0LDQstCw0L3QtSDQvdCwINCw0LLQsNC90YHQvtCy0L7RgtC+INC/0LvQsNGJ0LDQvdC1LjwvcD4KICAgIDwvZGl2PgogIDwvZGl2PmA7Cn0KCmNvbnN0IENPTlRSQUNUUyA9IHsKICB3ZWJzaXRlOiAoKSA9PiBjb250cmFjdEhlYWRlcign0JTQntCT0J7QktCe0KAg0JfQkCDQmNCX0KDQkNCR0J7QotCa0JAg0J3QkCDQo9CV0JHQodCQ0JnQoicsICdXVC3QlNCe0JMnKSArIGAKICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iIHN0eWxlPSJwYWRkaW5nLXRvcDoyNHB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dDIpO2xpbmUtaGVpZ2h0OjEuODtiYWNrZ3JvdW5kOiNmNWYzZmY7cGFkZGluZzoxNHB4IDE4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1hY2NlbnQpIj4KICAgICAgICDQodC60LvRjtGH0LXQvSDQtNC90LXRgSwgPHN0cm9uZz4ke1RPREFZfTwvc3Ryb25nPiwg0LzQtdC20LTRgyA8c3Ryb25nPtCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUPC9zdHJvbmc+ICjQmNC30L/RitC70L3QuNGC0LXQuykg0LggPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ca0LvQuNC10L3RgicsJ19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L3N0cm9uZz4gKNCS0YrQt9C70L7QttC40YLQtdC7KS4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgICR7Y29tbW9uU2VjdGlvbnMoYAogICAgICA8dWw+CiAgICAgICAgPGxpPtCg0LDQt9GA0LDQsdC+0YLQutCwINC90LAg0YPQtdCx0YHQsNC50YIg0L3QsCDQsdCw0LfQsNGC0LAg0L3QsCAke2YoJ9Cf0LvQsNGC0YTQvtGA0LzQsCcsJ1dvcmRQcmVzcycpfSDRgSDRg9C90LjQutCw0LvQtdC9INC00LjQt9Cw0LnQvTwvbGk+CiAgICAgICAgPGxpPtCQ0LTQsNC/0YLQuNCy0L3QvtGB0YIg0LfQsCDQstGB0LjRh9C60Lgg0YPRgdGC0YDQvtC50YHRgtCy0LAgKG1vYmlsZSwgdGFibGV0LCBkZXNrdG9wKTwvbGk+CiAgICAgICAgPGxpPtCY0L3RgtC10LPRgNCw0YbQuNGPINC90LAg0LTQviAke2YoJ9Ch0YLRgNCw0L3QuNGG0LgnLCdfXyAoX19fKScpfSDRgdGC0YDQsNC90LjRhtC4INGB0YrQtNGK0YDQttCw0L3QuNC1PC9saT4KICAgICAgICA8bGk+U0VPINC+0L/RgtC40LzQuNC30LDRhtC40Y8g0Lgg0YDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQsiDRgtGK0YDRgdCw0YfQutC40YLQtSAoR29vZ2xlLCBCaW5nKTwvbGk+CiAgICAgICAgPGxpPlNTTCDRgdC10YDRgtC40YTQuNC60LDRgiDQuCDQsdCw0LfQvtCy0LAg0YHQuNCz0YPRgNC90L7RgdGCPC9saT4KICAgICAgICA8bGk+0J7QsdGD0YfQtdC90LjQtSDQt9CwINGA0LDQsdC+0YLQsCDRgSDQsNC00LzQuNC90LjRgdGC0YDQsNGC0LjQstC90LjRjyDQv9Cw0L3QtdC7PC9saT4KICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQlNC+0L/RitC70L3QuNGC0LXQu9C90LAg0YTRg9C90LrRhtC40L7QvdCw0LvQvdC+0YHRgicsJ19fX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvbGk+CiAgICAgIDwvdWw+YCl9CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAxMDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QntCU0JTQoNCq0JbQmtCQICjQndCV0JfQkNCU0KrQm9CW0JjQotCV0JvQndCeKTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD7Qn9GA0Lgg0LbQtdC70LDQvdC40LUg0L3QsCDQktGK0LfQu9C+0LbQuNGC0LXQu9GPLCDRgdC70LXQtCDQv9GA0LXQtNCw0LLQsNC90LUg0L3QsCDRgdCw0LnRgtCwINC80L7QttC1INC00LAg0LHRitC00LUg0YHQutC70Y7Rh9C10L0g0L7RgtC00LXQu9C10L0g0JTQvtCz0L7QstC+0YAg0LfQsCDQmNCiINC/0L7QtNC00YDRitC20LrQsCDQvdCwINGB0YLQvtC50L3QvtGB0YIgPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cf0L7QtNC00YDRitC20LrQsCcsJ+KCrCBfXyAvINC80LXRgdC10YYnKX08L3N0cm9uZz4sINCy0LrQu9GO0YfQstCw0Yk6INCw0LrRgtGD0LDQu9C40LfQsNGG0LjQuCwg0LHQtdC60YrQv9C4LCDQvNC+0L3QuNGC0L7RgNC40L3QsyDQuCDQvtGC0YHRgtGA0LDQvdGP0LLQsNC90LUg0L3QsCDQvdC10YDQtdC00L3QvtGB0YLQuC48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCArIGNvbnRyYWN0Rm9vdGVyKCksCgogIHNob3A6ICgpID0+IGNvbnRyYWN0SGVhZGVyKCfQlNCe0JPQntCS0J7QoCDQl9CQINCY0JfQoNCQ0JHQntCi0JrQkCDQndCQINCe0J3Qm9CQ0JnQnSDQnNCQ0JPQkNCX0JjQnScsICdXVC3QlNCe0JMnKSArIGAKICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iIHN0eWxlPSJwYWRkaW5nLXRvcDoyNHB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdGV4dDIpO2xpbmUtaGVpZ2h0OjEuODtiYWNrZ3JvdW5kOiNmNWYzZmY7cGFkZGluZzoxNHB4IDE4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1hY2NlbnQpIj4KICAgICAgICDQodC60LvRjtGH0LXQvSDQtNC90LXRgSwgPHN0cm9uZz4ke1RPREFZfTwvc3Ryb25nPiwg0LzQtdC20LTRgyA8c3Ryb25nPtCj0JXQkdCi0KDQmNCa0KHQmNCQINCV0J7QntCUPC9zdHJvbmc+ICjQmNC30L/RitC70L3QuNGC0LXQuykg0LggPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ca0LvQuNC10L3RgicsJ19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L3N0cm9uZz4gKNCS0YrQt9C70L7QttC40YLQtdC7KS4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgICR7Y29tbW9uU2VjdGlvbnMoYAogICAgICA8dWw+CiAgICAgICAgPGxpPtCY0LfRgNCw0LHQvtGC0LrQsCDQvdCwINC+0L3Qu9Cw0LnQvSDQvNCw0LPQsNC30LjQvSDQvdCwINCx0LDQt9Cw0YLQsCDQvdCwICR7Zign0J/Qu9Cw0YLRhNC+0YDQvNCwJywnV29vQ29tbWVyY2UgLyBXb3JkUHJlc3MnKX08L2xpPgogICAgICAgIDxsaT7Qo9C90LjQutCw0LvQtdC9INC00LjQt9Cw0LnQvSwg0LDQtNCw0L/RgtC40LLQtdC9INC30LAg0LLRgdC40YfQutC4INGD0YHRgtGA0L7QudGB0YLQstCwPC9saT4KICAgICAgICA8bGk+0JrQsNGH0LLQsNC90LUg0Lgg0L3QsNGB0YLRgNC+0LnQutCwINC90LAg0LTQviAke2YoJ9Cf0YDQvtC00YPQutGC0LgnLCdfXyAoX19fX18pJyl9INC/0YDQvtC00YPQutGC0LA8L2xpPgogICAgICAgIDxsaT7QmNC90YLQtdCz0YDQsNGG0LjRjyDRgSDQv9C70LDRgtC10LbQvdC4INGB0LjRgdGC0LXQvNC4OiAke2YoJ9Cf0LvQsNGJ0LDQvdC1Jywn0L3QsNC70L7QttC10L0g0L/Qu9Cw0YLQtdC2LCDQsdCw0L3QutC+0LIg0L/RgNC10LLQvtC0LCDQutCw0YDRgtCwJyl9PC9saT4KICAgICAgICA8bGk+0JjQvdGC0LXQs9GA0LDRhtC40Y8g0YEg0LrRg9GA0LjQtdGA0YHQutC4INGE0LjRgNC80Lgg0LfQsCDQs9C10L3QtdGA0LjRgNCw0L3QtSDQvdCwINGC0L7QstCw0YDQuNGC0LXQu9C90LjRhtC4PC9saT4KICAgICAgICA8bGk+0JrQsNGC0LXQs9C+0YDQuNC4LCDRhNC40LvRgtGA0LgsINGA0LDQt9GI0LjRgNC10L3QviDRgtGK0YDRgdC10L3QtTwvbGk+CiAgICAgICAgPGxpPlNFTyDQvtC/0YLQuNC80LjQt9Cw0YbQuNGPINC4INGA0LXQs9C40YHRgtGA0LDRhtC40Y8g0LIgR29vZ2xlPC9saT4KICAgICAgICA8bGk+0J7QsdGD0YfQtdC90LjQtSDQt9CwINGD0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0LzQsNCz0LDQt9C40L3QsDwvbGk+CiAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JTQvtC/0YrQu9C90LjRgtC10LvQvdC+JywnX19fX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9saT4KICAgICAgPC91bD5gKX0KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDEwPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QpdCe0KHQotCY0J3QkyDQmCDQn9Ce0JTQlNCg0KrQltCa0JA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+MTAuMS4g0KXQvtGB0YLQuNC90LPRitGCINC90LAg0LzQsNCz0LDQt9C40L3QsCDQtTogJHtmKCfQpdC+0YHRgtC40L3QsycsJ+KWoSDQv9GA0LXQtNC+0YHRgtCw0LLQtdC9INC+0YIg0JjQt9C/0YrQu9C90LjRgtC10LvRjyAmbmJzcDsmbmJzcDsg4pahINC/0YDQtdC00L7RgdGC0LDQstC10L0g0L7RgiDQktGK0LfQu9C+0LbQuNGC0LXQu9GPJyl9LjwvcD4KICAgICAgICA8cD4xMC4yLiDQn9GA0Lgg0LbQtdC70LDQvdC40LUg0L3QsCDQktGK0LfQu9C+0LbQuNGC0LXQu9GPINGB0LUg0YHQutC70Y7Rh9Cy0LAg0L7RgtC00LXQu9C10L0g0JTQvtCz0L7QstC+0YAg0LfQsCDQmNCiINC/0L7QtNC00YDRitC20LrQsCDQvdCwINGB0YLQvtC50L3QvtGB0YIgPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cf0L7QtNC00YDRitC20LrQsCcsJ+KCrCBfXyAvINC80LXRgdC10YYnKX08L3N0cm9uZz4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAgKyBjb250cmFjdEZvb3RlcigpLAoKICBtYXJrZXRpbmc6ICgpID0+IGNvbnRyYWN0SGVhZGVyKCfQlNCe0JPQntCS0J7QoCDQl9CQINCc0JDQoNCa0JXQotCY0J3QkyDQo9Ch0JvQo9CT0JgnLCAnV1Qt0JTQntCTJykgKyBgCiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIiBzdHlsZT0icGFkZGluZy10b3A6MjRweCI+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXRleHQyKTtsaW5lLWhlaWdodDoxLjg7YmFja2dyb3VuZDojZjVmM2ZmO3BhZGRpbmc6MTRweCAxOHB4O2JvcmRlci1yYWRpdXM6MTBweDtib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tYWNjZW50KSI+CiAgICAgICAg0KHQutC70Y7Rh9C10L0g0LTQvdC10YEsIDxzdHJvbmc+JHtUT0RBWX08L3N0cm9uZz4sINC80LXQttC00YMgPHN0cm9uZz7Qo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlDwvc3Ryb25nPiAo0JjQt9C/0YrQu9C90LjRgtC10LspINC4IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmtC70LjQtdC90YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9zdHJvbmc+ICjQktGK0LfQu9C+0LbQuNGC0LXQuykuCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAxPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Cg0JXQlNCc0JXQoiDQndCQINCU0J7Qk9Ce0JLQntCg0JA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINGB0LUg0LfQsNC00YrQu9C20LDQstCwINC00LAg0L/RgNC10LTQvtGB0YLQsNCy0Y8g0YHQu9C10LTQvdC40YLQtSDQvNCw0YDQutC10YLQuNC90LMg0YPRgdC70YPQs9C4OjwvcD4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+4pahINCj0L/RgNCw0LLQu9C10L3QuNC1INC90LAgRmFjZWJvb2sgLyBJbnN0YWdyYW0g0LDQutCw0YPQvdGC0Lg8L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSBHb29nbGUgQWRzINC60LDQvNC/0LDQvdC40Lgg0Lgg0L7Qv9GC0LjQvNC40LfQsNGG0LjRjzwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+4pahINCU0L3QtdCy0L3QuCDRgdGC0L7RgNC40YLQsCDQuCDQv9C+0YHRgtC+0LLQtTwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+4pahINCX0LDRgdC90LXQvNCw0L3QtSDQvdCwINCy0LjQtNC10L4g0YDQuNC50LvRgdC+0LLQtSDQsiDQvtCx0LXQutGC0LA8L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQodC10LTQvNC40YfQvdC4INCx0YDQvtGI0YPRgNC4IChBNC9BNSwgUERGICsg0LTQuNCz0LjRgtCw0LvQtdC9KTwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+4pahIFZpYmVyINC60LDQvdCw0Lsg4oCUINC90LDRgdGC0YDQvtC50LrQsCDQuCDRg9C/0YDQsNCy0LvQtdC90LjQtTwvbGk+CiAgICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+4pahINCe0YDQs9Cw0L3QuNC30LjRgNCw0L3QtSDQvdCwINGC0L7QvNCx0L7Qu9C4INC4INC40LPRgNC4PC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj7ilqEg0JzQtdGB0LXRh9C10L0g0L7RgtGH0LXRgiDQt9CwINGA0LXQt9GD0LvRgtCw0YLQuNGC0LU8L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JTQvtC/0YrQu9C90LjRgtC10LvQvdCwINGD0YHQu9GD0LPQsCcsJ19fX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDI8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCh0KDQntCaINCd0JAg0JTQntCT0J7QktCe0KDQkDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD4yLjEuINCU0L7Qs9C+0LLQvtGA0YrRgiDRgdC1INGB0LrQu9GO0YfQstCwINC30LAg0LzQuNC90LjQvNCw0LvQtdC9INGB0YDQvtC6INC+0YIgPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ch0YDQvtC6JywnNiAo0YjQtdGB0YIpJyl9PC9zdHJvbmc+INC80LXRgdC10YbQsCwg0YHRh9C40YLQsNC90L4g0L7RgiA8c3Ryb25nPiR7VE9EQVl9PC9zdHJvbmc+LjwvcD4KICAgICAgICA8cD4yLjIuINCh0LvQtdC0INC40LfRgtC40YfQsNC90LUg0L3QsCDQvNC40L3QuNC80LDQu9C90LjRjyDRgdGA0L7Quiwg0LTQvtCz0L7QstC+0YDRitGCINGB0LUg0L/QvtC00L3QvtCy0Y/QstCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0LfQsCDRgdC70LXQtNCy0LDRiSDQvNC10YHQtdGGLCDQsNC60L4g0L3QtSDQtSDQv9GA0LXQutGA0LDRgtC10L0uPC9wPgogICAgICAgIDxwPjIuMy4g0J/RgNC10LrRgNCw0YLRj9Cy0LDQvdC10YLQviDQuNC30LjRgdC60LLQsCDQv9C40YHQvNC10L3QviDRg9Cy0LXQtNC+0LzQu9C10L3QuNC1INC80LjQvdC40LzRg9C8IDxzdHJvbmc+MzAgKNGC0YDQuNC00LXRgdC10YIpPC9zdHJvbmc+INC00L3QuCDQv9GA0LXQtNCy0LDRgNC40YLQtdC70L3Qvi48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QptCV0J3QkCDQmCDQn9Cb0JDQqdCQ0J3QlTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD4zLjEuINCc0LXRgdC10YfQvdCw0YLQsCDRgtCw0LrRgdCwINC30LAg0YPRgdC70YPQs9C40YLQtSDQtSA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KbQtdC90LAnLCfigqwgX19fX18gKF9fX19fINC10LLRgNC+KScpfTwvc3Ryb25nPiwg0YEg0LLQutC70Y7Rh9C10L3QviDQlNCU0KEuPC9wPgogICAgICAgIDxwPjMuMi4g0J/Qu9Cw0YnQsNC90LXRgtC+INGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQtNC+IDxzdHJvbmc+NS3RgtC+INGH0LjRgdC70L48L3N0cm9uZz4g0L3QsCDRgtC10LrRg9GJ0LjRjyDQvNC10YHQtdGGINC/0L4g0LHQsNC90LrQvtCyINC/0YrRgi48L3A+CiAgICAgICAgPHA+My4zLiDQn9GA0Lgg0LfQsNCx0LDQstGP0L3QtSDQvdCwINC/0LvQsNGJ0LDQvdC1INC90LDQtCAxMCDQtNC90LgsINCY0LfQv9GK0LvQvdC40YLQtdC70Y/RgiDQvNC+0LbQtSDQtNCwINC/0YDQtdGD0YHRgtCw0L3QvtCy0Lgg0YPRgdC70YPQs9C40YLQtSDQtNC+INC/0L7Qu9GD0YfQsNCy0LDQvdC1INC90LAg0LTRitC70LbQuNC80LDRgtCwINGB0YPQvNCwLjwvcD4KICAgICAgICA8cD4zLjQuINCg0LXQutC70LDQvNC90LjRgtC1INCx0Y7QtNC20LXRgtC4IChHb29nbGUgQWRzLCBGYWNlYm9vayBBZHMpINGB0LUg0L/QvtC10LzQsNGCINC4INC/0LvQsNGJ0LDRgiDQvtGC0LTQtdC70L3QviDQvtGCINCS0YrQt9C70L7QttC40YLQtdC70Y8uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gNDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QoNCQ0JLQkCDQmCDQl9CQ0JTQqtCb0JbQldCd0JjQrzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC/0YDQtdC00L7RgdGC0LDQstGPINC80LXRgdC10YfQtdC9INC+0YLRh9C10YIg0LTQviA1LdGC0L4g0YfQuNGB0LvQviDQvdCwINGB0LvQtdC00LLQsNGJ0LjRjyDQvNC10YHQtdGGLjwvbGk+CiAgICAgICAgICA8bGk+0KHRitC00YrRgNC20LDQvdC40LXRgtC+INGB0LUg0YHRitCz0LvQsNGB0YPQstCwINGBINCS0YrQt9C70L7QttC40YLQtdC70Y8g0L/RgNC10LTQuCDQv9GD0LHQu9C40LrRg9Cy0LDQvdC1LjwvbGk+CiAgICAgICAgICA8bGk+0JLRitC30LvQvtC20LjRgtC10LvRj9GCINC/0YDQtdC00L7RgdGC0LDQstGPINC00L7RgdGC0YrQvyDQtNC+INC/0YDQvtGE0LjQu9C40YLQtSDQuCDQvdC10L7QsdGF0L7QtNC40LzQuNGC0LUg0LzQsNGC0LXRgNC40LDQu9C4LjwvbGk+CiAgICAgICAgICA8bGk+0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC90LUg0L3QvtGB0Lgg0L7RgtCz0L7QstC+0YDQvdC+0YHRgiDQt9CwINGA0LXQt9GD0LvRgtCw0YLQuNGC0LUg0L7RgiDQv9C70LDRgtC10L3QuNGC0LUg0YDQtdC60LvQsNC80Lgg0L/RgNC4INC90LXQtNC+0YHRgtCw0YLRitGH0LXQvSDQsdGO0LTQttC10YIuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gNSDigJQgODwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J/QntCS0JXQoNCY0KLQldCb0J3QntCh0KIsINCf0KDQldCa0KDQkNCi0K/QktCQ0J3QlSDQmCDQl9CQ0JrQm9Cu0KfQmNCi0JXQm9Cd0Jgg0KDQkNCX0J/QntCg0JXQlNCR0Jg8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+NS4xLiDQodGC0YDQsNC90LjRgtC1INGB0LUg0LfQsNC00YrQu9C20LDQstCw0YIg0LTQsCDQv9Cw0LfRj9GCINC/0L7QstC10YDQuNGC0LXQu9C90L7RgdGCINC90LAg0YLRitGA0LPQvtCy0YHQutCw0YLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjy48L3A+CiAgICAgICAgPHA+Ni4xLiDQlNC+0LPQvtCy0L7RgNGK0YIg0YHQtSDQv9GA0LXQutGA0LDRgtGP0LLQsCDRgSAzMC3QtNC90LXQstC90L4g0L/QuNGB0LzQtdC90L4g0L/RgNC10LTQuNC30LLQtdGB0YLQuNC1INGB0LvQtdC0INC40LfRgtC40YfQsNC90LUg0L3QsCDQvNC40L3QuNC80LDQu9C90LjRjyDRgdGA0L7Qui48L3A+CiAgICAgICAgPHA+Ny4xLiDQn9GA0Lgg0YTQvtGA0YHQvNCw0LbQvtGA0L3QuCDQvtCx0YHRgtC+0Y/RgtC10LvRgdGC0LLQsCwg0YHRgtGA0LDQvdC40YLQtSDQvdC1INC90L7RgdGP0YIg0L7RgtCz0L7QstC+0YDQvdC+0YHRgiDQt9CwINC90LXQuNC30L/RitC70L3QtdC90LjQtS48L3A+CiAgICAgICAgPHA+OC4xLiDQlNC+0LPQvtCy0L7RgNGK0YIg0LUg0YHRitGB0YLQsNCy0LXQvSDQsiDQtNCy0LAg0LXQutC30LXQvNC/0LvRj9GA0LAuINCX0LAg0L3QtdGD0YDQtdC00LXQvdC40YLQtSDQstGK0L/RgNC+0YHQuCDRgdC1INC/0YDQuNC70LDQs9CwINC30LDQutC+0L3QvtC00LDRgtC10LvRgdGC0LLQvtGC0L4g0L3QsCDQoNCRLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gICsgY29udHJhY3RGb290ZXIoKSwKCiAgbWFpbnRlbmFuY2U6ICgpID0+IGNvbnRyYWN0SGVhZGVyKCfQlNCe0JPQntCS0J7QoCDQl9CQINCY0KIg0J/QntCU0JTQoNCq0JbQmtCQJywgJ1dULdCU0J7QkycpICsgYAogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiIgc3R5bGU9InBhZGRpbmctdG9wOjI0cHgiPgogICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10ZXh0Mik7bGluZS1oZWlnaHQ6MS44O2JhY2tncm91bmQ6I2Y1ZjNmZjtwYWRkaW5nOjE0cHggMThweDtib3JkZXItcmFkaXVzOjEwcHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLWFjY2VudCkiPgogICAgICAgINCh0LrQu9GO0YfQtdC9INC00L3QtdGBLCA8c3Ryb25nPiR7VE9EQVl9PC9zdHJvbmc+LCDQvNC10LbQtNGDIDxzdHJvbmc+0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQ8L3N0cm9uZz4gKNCY0LfQv9GK0LvQvdC40YLQtdC7KSDQuCA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JrQu9C40LXQvdGCJywnX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPiAo0JLRitC30LvQvtC20LjRgtC10LspLgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMTwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Cg0JXQlNCc0JXQojwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij48cD7QmNC30L/RitC70L3QuNGC0LXQu9GP0YIg0L/RgNC10LTQvtGB0YLQsNCy0Y8g0YHQu9C10LTQvdC40YLQtSDRg9GB0LvRg9Cz0Lgg0L/QviDQv9C+0LTQtNGA0YrQttC60LAg0L3QsCDRg9C10LHRgdCw0LnRgi/Qv9C70LDRgtGE0L7RgNC80LAg0L3QsCDQsNC00YDQtdGBOiA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0JTQvtC80LXQudC9JywnX19fX19fX19fX19fX19fX19fXycpfTwvc3Ryb25nPjwvcD4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+Ny8yNCDQvNC+0L3QuNGC0L7RgNC40L3QsyDQvdCwINC/0LvQsNGC0YTQvtGA0LzQsNGC0LAg0Lgg0YHQsNC50YLQsDwvbGk+CiAgICAgICAgICA8bGk+0J7RgtGB0YLRgNCw0L3Rj9Cy0LDQvdC1INC90LAg0L3QtdGA0LXQtNC90L7RgdGC0Lgg0Lgg0YLQtdGF0L3QuNGH0LXRgdC60Lgg0L/RgNC+0LHQu9C10LzQuDwvbGk+CiAgICAgICAgICA8bGk+0JDQutGC0YPQsNC70LjQt9C40YDQsNC90LUg0L3QsCDRgdC40YHRgtC10LzQsNGC0LAgKENNUywg0L/Qu9GK0LPQuNC90LgsINGC0LXQvNC4KSDigJQg0LLQtdC00L3RitC2INGB0LXQtNC80LjRh9C90L48L2xpPgogICAgICAgICAgPGxpPtCV0LbQtdC00L3QtdCy0LXQvSDQsNCy0YLQvtC80LDRgtC40YfQtdC9INCx0LXQutGK0L8g0L3QsCDQsdCw0LfQsNGC0LAg0LTQsNC90L3QuCDQuCDRhNCw0LnQu9C+0LLQtdGC0LU8L2xpPgogICAgICAgICAgPGxpPtCh0LrQsNC90LjRgNCw0L3QtSDQt9CwINC30LvQvtC90LDQvNC10YDQtdC9INC00L7RgdGC0YrQvyDigJQg0LLQtdC00L3RitC2INGB0LXQtNC80LjRh9C90L48L2xpPgogICAgICAgICAgPGxpPtCh0LzRj9C90LAg0L3QsCDQsdCw0L3QtdGA0Lgg0Lgg0YLQtdC60YHRgtC+0LLQviDRgdGK0LTRitGA0LbQsNC90LjQtSDigJQg0LTQviAke2YoJ9Cf0YDQvtC80LXQvdC4JywnXyAoX19fX18pJyl9INC/0YDQvtC80LXQvdC4INC80LXRgdC10YfQvdC+PC9saT4KICAgICAgICAgIDxsaSBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9CU0L7Qv9GK0LvQvdC40YLQtdC70L3QvicsJ19fX19fX19fX19fX19fX19fX19fX19fX19fXycpfTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDI8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0KHQoNCe0Jo8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+Mi4xLiDQlNC+0LPQvtCy0L7RgNGK0YIg0LUg0LHQtdC30YHRgNC+0YfQtdC9INC4INCy0LvQuNC30LAg0LIg0YHQuNC70LAg0L7RgiA8c3Ryb25nPiR7VE9EQVl9PC9zdHJvbmc+LjwvcD4KICAgICAgICA8cD4yLjIuINCf0YDQtdC60YDQsNGC0Y/QstCwINGB0LUg0YEg0L/QuNGB0LzQtdC90L4g0YPQstC10LTQvtC80LvQtdC90LjQtSDQvNC40L3QuNC80YPQvCA8c3Ryb25nPjMwICjRgtGA0LjQtNC10YHQtdGCKTwvc3Ryb25nPiDQtNC90Lgg0L/RgNC10LTQstCw0YDQuNGC0LXQu9C90L4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMzwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QptCV0J3QkCDQmCDQn9Cb0JDQqdCQ0J3QlTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD4zLjEuINCc0LXRgdC10YfQvdCw0YLQsCDRgtCw0LrRgdCwINC1IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQptC10L3QsCcsJ+KCrCBfX19fXyAoX19fX18g0LXQstGA0L4pJyl9PC9zdHJvbmc+LCDRgSDQstC60LvRjtGH0LXQvdC+INCU0JTQoS48L3A+CiAgICAgICAgPHA+My4yLiDQn9C70LDRidCw0L3QtdGC0L4g0YHQtSDQuNC30LLRitGA0YjQstCwINC00L4gPHN0cm9uZz41LdGC0L4g0YfQuNGB0LvQvjwvc3Ryb25nPiDQvdCwINGC0LXQutGD0YnQuNGPINC80LXRgdC10YYg0L/QviDQsdCw0L3QutC+0LIg0L/RitGCLjwvcD4KICAgICAgICA8cD4zLjMuINCl0L7RgdGC0LjQvdCz0YrRgiDQtTogJHtmKCfQpdC+0YHRgtC40L3QsycsJ+KWoSDQstC60LvRjtGH0LXQvSDQsiDRgtCw0LrRgdCw0YLQsCAmbmJzcDsmbmJzcDsg4pahINC+0YLQtNC10LvQvdC+INC30LDQv9C70LDRidCw0L0g0L7RgiDQktGK0LfQu9C+0LbQuNGC0LXQu9GPJyl9LjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCn0LsuIDQg4oCUIDc8L2Rpdj48ZGl2IGNsYXNzPSJjcy10aXRsZSI+0J7QotCT0J7QktCe0KDQndCe0KHQoiwg0J/QntCS0JXQoNCY0KLQldCb0J3QntCh0KIsINCf0KDQldCa0KDQkNCi0K/QktCQ0J3QlSwg0JfQkNCa0JvQrtCn0JjQotCV0JvQndCePC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjQuMS4g0JjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC90LUg0L3QvtGB0Lgg0L7RgtCz0L7QstC+0YDQvdC+0YHRgiDQt9CwINGJ0LXRgtC4LCDQv9GA0LjRh9C40L3QtdC90Lgg0L7RgiDQsNGC0LDQutC4LCDRhdC+0YHRgtC40L3QsyDRgdGA0LjQstC+0LLQtSDQuNC70Lgg0YLRgNC10YLQuCDQu9C40YbQsC48L3A+CiAgICAgICAgPHA+NC4yLiDQodGC0YDQsNC90LjRgtC1INC/0LDQt9GP0YIg0L/QvtCy0LXRgNC40YLQtdC70L3QvtGB0YIg0L3QsCDQtNC+0YHRgtGK0L/QuNGC0LUg0Lgg0YLQtdGF0L3QuNGH0LXRgdC60LDRgtCwINC40L3RhNC+0YDQvNCw0YbQuNGPLjwvcD4KICAgICAgICA8cD41LjEuINCU0L7Qs9C+0LLQvtGA0YrRgiDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQtdC60YDQsNGC0LXQvSDQv9C+INCy0LfQsNC40LzQvdC+INGB0YrQs9C70LDRgdC40LUg0LjQu9C4INGBIDMwLdC00L3QtdCy0L3QviDQv9GA0LXQtNC40LfQstC10YHRgtC40LUuPC9wPgogICAgICAgIDxwPjYuMS4g0JTQvtCz0L7QstC+0YDRitGCINC1INGB0YrRgdGC0LDQstC10L0g0LIg0LTQstCwINC10LrQt9C10LzQv9C70Y/RgNCwLiDQl9CwINC90LXRg9GA0LXQtNC10L3QuNGC0LUg0LLRitC/0YDQvtGB0Lgg0YHQtSDQv9GA0LjQu9Cw0LPQsCDQt9Cw0LrQvtC90L7QtNCw0YLQtdC70YHRgtCy0L7RgtC+INC90LAg0KDQkS48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCArIGNvbnRyYWN0Rm9vdGVyKCksCgogIHN1YmNvbnRyYWN0b3I6ICgpID0+IGNvbnRyYWN0SGVhZGVyKCfQlNCe0JPQntCS0J7QoCDQl9CQINCf0J7QlNCY0JfQn9Cq0JvQndCV0J3QmNCVJywgJ1dULdCf0J7QlCcpICsgYAogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiIgc3R5bGU9InBhZGRpbmctdG9wOjI0cHgiPgogICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10ZXh0Mik7bGluZS1oZWlnaHQ6MS44O2JhY2tncm91bmQ6I2ZmZjNjZDtwYWRkaW5nOjE0cHggMThweDtib3JkZXItcmFkaXVzOjEwcHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLWFtYmVyKSI+CiAgICAgICAg0KHQutC70Y7Rh9C10L0g0LTQvdC10YEsIDxzdHJvbmc+JHtUT0RBWX08L3N0cm9uZz4sINC80LXQttC00YMgPHN0cm9uZz7Qo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlDwvc3Ryb25nPiAo0JPQu9Cw0LLQtdC9INC40LfQv9GK0LvQvdC40YLQtdC7KSDQuCA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LsnLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9zdHJvbmc+ICjQn9C+0LTQuNC30L/RitC70L3QuNGC0LXQuykuCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAxPC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCf0KDQldCU0JzQldCiPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPtCT0LvQsNCy0L3QuNGP0YIg0LjQt9C/0YrQu9C90LjRgtC10Lsg0LLRitC30LvQsNCz0LAg0L3QsCDQn9C+0LTQuNC30L/RitC70L3QuNGC0LXQu9GPINGB0LvQtdC00L3QuNGC0LUg0LTQtdC50L3QvtGB0YLQuDo8L3A+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KPRgdC70YPQs9CwIDEnLCdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KPRgdC70YPQs9CwIDInLCdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L2xpPgogICAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KPRgdC70YPQs9CwIDMnLCdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18nKX08L2xpPgogICAgICAgIDwvdWw+CiAgICAgICAgPHA+0LIg0YDQsNC80LrQuNGC0LUg0L3QsCDQv9GA0L7QtdC60YI6IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQn9GA0L7QtdC60YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9zdHJvbmc+PC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gMjwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7QodCg0J7QmjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy1ib2R5Ij4KICAgICAgICA8cD4yLjEuINCh0YDQvtC6INC90LAg0LjQt9C/0YrQu9C90LXQvdC40LU6IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQodGA0L7QuicsJ19fIChfX19fXyknKX08L3N0cm9uZz4g0YDQsNCx0L7RgtC90Lgg0LTQvdC4INC+0YIg0L/QvtC00L/QuNGB0LLQsNC90LXRgtC+LjwvcD4KICAgICAgICA8cD4yLjIuINCf0YDQuCDQt9Cw0LHQsNCy0Y/QvdC1LCDQn9C+0LTQuNC30L/RitC70L3QuNGC0LXQu9GP0YIg0YPQstC10LTQvtC80Y/QstCwINC90LXQt9Cw0LHQsNCy0L3Qvi48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiAzPC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCS0KrQl9Cd0JDQk9Cg0JDQltCU0JXQndCY0JU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+My4xLiDQktGK0LfQvdCw0LPRgNCw0LbQtNC10L3QuNC10YLQviDQtSA8c3Ryb25nIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPiR7Zign0KHRg9C80LAnLCfigqwgX19fX18gKF9fX19fINC10LLRgNC+KScpfTwvc3Ryb25nPi48L3A+CiAgICAgICAgPHA+My4yLiDQn9C70LDRidCw0L3QtTogJHtmKCfQk9GA0LDRhNC40Log0L/Qu9Cw0YnQsNC90LUnLCfilqEg0LXQtNC90L7QutGA0LDRgtC90L4g0L/RgNC4INC/0YDQtdC00LDQstCw0L3QtSAmbmJzcDsmbmJzcDsg4pahIDUwJSDQsNCy0LDQvdGBICsgNTAlINC/0YDQuCDQv9GA0LXQtNCw0LLQsNC90LUnKX0uPC9wPgogICAgICAgIDxwPjMuMy4g0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC40LfQtNCw0LLQsCDRhNCw0LrRgtGD0YDQsC/RgNCw0LfQv9C40YHQutCwINC30LAg0L/QvtC70YPRh9C10L3QsNGC0LAg0YHRg9C80LAuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY29udHJhY3Qtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9ImNzLW51bSI+0KfQuy4gNDwvZGl2PjxkaXYgY2xhc3M9ImNzLXRpdGxlIj7Qn9Ce0JLQldCg0JjQotCV0JvQndCe0KHQoiDQmCDQndCa0JA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY3MtYm9keSI+CiAgICAgICAgPHA+NC4xLiDQn9C+0LTQuNC30L/RitC70L3QuNGC0LXQu9GP0YIg0YHQtSDQt9Cw0LTRitC70LbQsNCy0LAg0LTQsCDQv9Cw0LfQuCDQv9C+0LLQtdGA0LjRgtC10LvQvdC+0YHRgiDQvtGC0L3QvtGB0L3QviDQutC70LjQtdC90YLQuNGC0LUsINC/0YDQvtC10LrRgtC40YLQtSDQuCDRgtGK0YDQs9C+0LLRgdC60LDRgtCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC90LAg0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQuPC9wPgogICAgICAgIDxwPjQuMi4g0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC90LUg0LrQvtC90YLQsNC60YLRg9Cy0LAg0LTQuNGA0LXQutGC0L3QviDRgSDQutC70LjQtdC90YLQuNGC0LUg0L3QsCDQo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlCDQsdC10Lcg0LjQt9GA0LjRh9C90L4g0YDQsNC30YDQtdGI0LXQvdC40LUuPC9wPgogICAgICAgIDxwPjQuMy4g0JfQsNCx0YDQsNC90LDRgtCwINC1INCyINGB0LjQu9CwINC30LAg0L/QtdGA0LjQvtC0INC+0YIgPHN0cm9uZz4yNCAo0LTQstCw0LTQtdGB0LXRgiDQuCDRh9C10YLQuNGA0LgpPC9zdHJvbmc+INC80LXRgdC10YbQsCDRgdC70LXQtCDQv9GA0LXQutGA0LDRgtGP0LLQsNC90LUg0L3QsCDRgdGK0YLRgNGD0LTQvdC40YfQtdGB0YLQstC+0YLQvi48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3MtbnVtIj7Qp9C7LiA1PC9kaXY+PGRpdiBjbGFzcz0iY3MtdGl0bGUiPtCY0J3QotCV0JvQldCa0KLQo9CQ0JvQndCQINCh0J7QkdCh0KLQktCV0J3QntCh0KIg0Jgg0J/QoNCV0JTQkNCS0JDQndCVPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPjUuMS4g0JLRgdC40YfQutC4INGA0LXQt9GD0LvRgtCw0YLQuCDQvtGCINGA0LDQsdC+0YLQsNGC0LAg0YHQsCDRgdC+0LHRgdGC0LLQtdC90L7RgdGCINC90LAg0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQg0YHQu9C10LQg0L/RitC70L3QvtGC0L4g0L/Qu9Cw0YnQsNC90LUuPC9wPgogICAgICAgIDxwPjUuMi4g0J/QvtC00LjQt9C/0YrQu9C90LjRgtC10LvRj9GCINC/0YDQtdC00LDQstCwINGA0LDQsdC+0YLQsNGC0LAg0LfQsNC10LTQvdC+INGBINCy0YHQuNGH0LrQuCDQuNC30YXQvtC00L3QuCDRhNCw0LnQu9C+0LLQtSwg0LTQvtGB0YLRitC/0Lgg0Lgg0LTQvtC60YPQvNC10L3RgtCw0YbQuNGPLjwvcD4KICAgICAgICA8cD41LjMuINCU0L7Qs9C+0LLQvtGA0YrRgiDQtSDRgdGK0YHRgtCw0LLQtdC9INCyINC00LLQsCDQtdC60LfQtdC80L/Qu9GP0YDQsC4g0JfQsCDQvdC10YPRgNC10LTQtdC90LjRgtC1INCy0YrQv9GA0L7RgdC4INGB0LUg0L/RgNC40LvQsNCz0LAg0LfQsNC60L7QvdC+0LTQsNGC0LXQu9GB0YLQstC+0YLQviDQvdCwINCg0JEuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAgKyBjb250cmFjdEZvb3RlcigpLAoKICBjb21wbGV4OiAoKSA9PiBjb250cmFjdEhlYWRlcign0JrQntCc0J/Qm9CV0JrQodCV0J0g0JTQntCT0J7QktCe0KAnLCAnV1Qt0JTQntCTJykgKyBgCiAgICA8ZGl2IGNsYXNzPSJjb250cmFjdC1zZWN0aW9uIiBzdHlsZT0icGFkZGluZy10b3A6MjRweCI+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXRleHQyKTtsaW5lLWhlaWdodDoxLjg7YmFja2dyb3VuZDojZjVmM2ZmO3BhZGRpbmc6MTRweCAxOHB4O2JvcmRlci1yYWRpdXM6MTBweDtib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tYWNjZW50KSI+CiAgICAgICAg0KHQutC70Y7Rh9C10L0g0LTQvdC10YEsIDxzdHJvbmc+JHtUT0RBWX08L3N0cm9uZz4sINC80LXQttC00YMgPHN0cm9uZz7Qo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlDwvc3Ryb25nPiAo0JjQt9C/0YrQu9C90LjRgtC10LspINC4IDxzdHJvbmcgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+JHtmKCfQmtC70LjQtdC90YInLCdfX19fX19fX19fX19fX19fX19fX19fX19fJyl9PC9zdHJvbmc+ICjQktGK0LfQu9C+0LbQuNGC0LXQuykuCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAke2NvbW1vblNlY3Rpb25zKGAKICAgICAgPHA+PHN0cm9uZz5JLiDQmNC30YDQsNCx0L7RgtC60LA6PC9zdHJvbmc+PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPiR7Zign0KLQuNC/INGB0LDQudGCJywn4pahINCj0LXQsdGB0LDQudGCICZuYnNwOyZuYnNwOyDilqEg0J7QvdC70LDQudC9INC80LDQs9Cw0LfQuNC9Jyl9INC90LAg0LHQsNC30LDRgtCwINC90LAgJHtmKCfQn9C70LDRgtGE0L7RgNC80LAnLCdXb3JkUHJlc3MgLyBXb29Db21tZXJjZScpfTwvbGk+CiAgICAgICAgPGxpPtCj0L3QuNC60LDQu9C10L0g0LTQuNC30LDQudC9LCDQsNC00LDQv9GC0LjQstC10L0g0LfQsCDQstGB0LjRh9C60Lgg0YPRgdGC0YDQvtC50YHRgtCy0LA8L2xpPgogICAgICAgIDxsaT5TRU8g0L7Qv9GC0LjQvNC40LfQsNGG0LjRjyDQuCDRgNC10LPQuNGB0YLRgNCw0YbQuNGPINCyIEdvb2dsZTwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+PHN0cm9uZz5JSS4g0JzQsNGA0LrQtdGC0LjQvdCzICjQvNC10YHQtdGH0L3Qvik6PC9zdHJvbmc+PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSDQo9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINGB0L7RhtC40LDQu9C90Lgg0LzRgNC10LbQuDwvbGk+CiAgICAgICAgPGxpIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPuKWoSBHb29nbGUgQWRzIC8gRmFjZWJvb2sgQWRzPC9saT4KICAgICAgICA8bGkgY29udGVudGVkaXRhYmxlPSJmYWxzZSI+4pahINCS0LjQtNC10L4g0YDQuNC50LvRgdC+0LLQtSDQuCDRgdGK0LTRitGA0LbQsNC90LjQtTwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+PHN0cm9uZz5JSUkuINCf0L7QtNC00YDRitC20LrQsCAo0LzQtdGB0LXRh9C90L4pOjwvc3Ryb25nPjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT43LzI0INC80L7QvdC40YLQvtGA0LjQvdCzLCDQsNC60YLRg9Cw0LvQuNC30LDRhtC40LgsINCx0LXQutGK0L/QuCwg0YHQuNCz0YPRgNC90L7RgdGCPC9saT4KICAgICAgPC91bD5gKX0KICAgIDxkaXYgY2xhc3M9ImNvbnRyYWN0LXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJjcy1udW0iPtCU0L7Qv9GK0LvQvdC40YLQtdC70L3QuCDRg9GB0LvQvtCy0LjRjzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjcy10aXRsZSI+0JzQldCh0JXQp9Cd0Jgg0KPQodCb0KPQk9CYPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNzLWJvZHkiPgogICAgICAgIDxwPtCV0LTQvdC+0LrRgNCw0YLQvdC+0YLQviDQv9C70LDRidCw0L3QtSDQt9CwINC40LfRgNCw0LHQvtGC0LrQsNGC0LAg0LUgPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9CY0LfRgNCw0LHQvtGC0LrQsCcsJ+KCrCBfX19fXyAoX19fX18g0LXQstGA0L4pJyl9PC9zdHJvbmc+LCDQsdC10Lcg0JTQlNChLjwvcD4KICAgICAgICA8cD7QnNC10YHQtdGH0L3QsNGC0LAg0YLQsNC60YHQsCDQt9CwINC80LDRgNC60LXRgtC40L3QsyDQuCDQv9C+0LTQtNGA0YrQttC60LAg0LUgPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Cc0LXRgdC10YfQvdC+Jywn4oKsIF9fX19fIChfX19fXyDQtdCy0YDQviknKX08L3N0cm9uZz4sINGBINCU0JTQoSwg0L/Qu9Cw0YLQuNC80LAg0LTQviA1LdGC0L4g0YfQuNGB0LvQvi48L3A+CiAgICAgICAgPHA+0JzQuNC90LjQvNCw0LvQtdC9INGB0YDQvtC6INC30LAg0LzQtdGB0LXRh9C90LjRgtC1INGD0YHQu9GD0LPQuDogPHN0cm9uZyBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj4ke2YoJ9Ch0YDQvtC6JywnNiAo0YjQtdGB0YIpJyl9PC9zdHJvbmc+INC80LXRgdC10YbQsC48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCArIGNvbnRyYWN0Rm9vdGVyKCkKfTsKCmZ1bmN0aW9uIGNsZWFuQ29udHJhY3RIdG1sKGh0bWwpewogIHJldHVybiBodG1sCiAgICAucmVwbGFjZSgv0KPQldCR0KLQoNCY0JrQodCY0JAg0JXQntCe0JQvZywgZign0JjQt9C/0YrQu9C90LjRgtC10LsnLCdfX19fX19fX19fX19fX19fX19fX19fX19fJykpCiAgICAucmVwbGFjZSgv0KXQsNC60LDQvSDQntGB0LzQsNC9L2csIGYoJ9Cf0YDQtdC00YHRgtCw0LLQu9GP0LLQsNGJJywnX19fX19fX19fX19fX19fXycpKQogICAgLnJlcGxhY2UoL29mZmljZUB3ZWJ0cml4aWFcLmNvbSDCtyBcKzM1OSA4OCA4ODggODg4OC9nLCBmKCfQmtC+0L3RgtCw0LrRgicsJ19fX19fX19fX19fX19fX19fX19fX19fX18nKSkKICAgIC5yZXBsYWNlKC93ZWJ0cml4aWFcLmNvbS9nLCBmKCfQodCw0LnRgicsJ19fX19fX19fX19fX19fX18nKSkKICAgIC5yZXBsYWNlKC9XZWJ0cml4aWEvZywgZign0KTQuNGA0LzQsCcsJ19fX19fX19fX19fX19fX18nKSk7Cn0KCmZ1bmN0aW9uIHRlbXBsYXRlS2V5KCl7CiAgcmV0dXJuIHNlbGVjdGVkVHlwZT8nd3RfY29udHJhY3RfdGVtcGxhdGVfJytzZWxlY3RlZFR5cGU6Jyc7Cn0KCmZ1bmN0aW9uIHNhdmVUZW1wbGF0ZSgpewogIGlmKCFzZWxlY3RlZFR5cGUpcmV0dXJuOwogIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRlbXBsYXRlS2V5KCksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cmFjdERvYycpLmlubmVySFRNTCk7CiAgYWxlcnQoJ9Co0LDQsdC70L7QvdGK0YIg0LUg0LfQsNC/0LDQt9C10L0uJyk7Cn0KCmZ1bmN0aW9uIHJlc2V0VGVtcGxhdGUoKXsKICBpZighc2VsZWN0ZWRUeXBlKXJldHVybjsKICBpZighY29uZmlybSgn0J3Rg9C70LjRgNCw0Lkg0LfQsNC/0LDQt9C10L3QuNGPINGI0LDQsdC70L7QvSDQt9CwINGC0L7Qt9C4INCy0LjQtCDQtNC+0LPQvtCy0L7RgD8nKSlyZXR1cm47CiAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGVtcGxhdGVLZXkoKSk7CiAgZ2VuZXJhdGVDb250cmFjdCgpOwp9CgpmdW5jdGlvbiBnZW5lcmF0ZUNvbnRyYWN0KCkgewogIGlmICghc2VsZWN0ZWRUeXBlKSByZXR1cm47CiAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0ZW1wbGF0ZUtleSgpKTsKICBjb25zdCBodG1sID0gY2xlYW5Db250cmFjdEh0bWwoc2F2ZWQgfHwgQ09OVFJBQ1RTW3NlbGVjdGVkVHlwZV0oKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyYWN0RG9jJykuaW5uZXJIVE1MID0gaHRtbDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0b3JQYWdlJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJhY3REb2NQYWdlJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgZWRpdE1vZGUgPSBmYWxzZTsKICB3aW5kb3cuc2Nyb2xsVG8oMCwwKTsKfQoKdmFyIEFQST0oZnVuY3Rpb24oKXsKICB2YXIgYmFzZT13aW5kb3cubG9jYXRpb24ub3JpZ2luK3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9jb250cmFjdHNcLmh0bWwkLywnJykucmVwbGFjZSgvXC8kLywnJyk7CiAgcmV0dXJuIGJhc2UrJy9hcGkucGhwJzsKfSkoKTsKYXN5bmMgZnVuY3Rpb24gbW9kdWxlR3VhcmQoa2V5LGxhYmVsKXsKICB0cnl7CiAgICB2YXIgcj1hd2FpdCBmZXRjaChBUEkrJz9hY3Rpb249YnJhbmRpbmdfc2V0dGluZ3MnLHtjcmVkZW50aWFsczonc2FtZS1vcmlnaW4nfSk7CiAgICB2YXIgaj1hd2FpdCByLmpzb24oKTsKICAgIHZhciBkPWomJmoub2s/ai5kYXRhOm51bGw7CiAgICBpZihkICYmIChkLmxpY2Vuc2Vfc3RhdGU9PT0nbG9ja2VkJ3x8ZC5saWNlbnNlX3N0YXRlPT09J2ludmFsaWQnKSl7CiAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6NDgwcHg7bWFyZ2luOjgwcHggYXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtmb250LWZhbWlseTpzYW5zLXNlcmlmO2NvbG9yOiM0YTRhNmEiPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O21hcmdpbi1ib3R0b206MTJweCI+8J+UkjwvZGl2PjxoMj7QpdGK0LHRitGCINC1INC30LDQutC70Y7Rh9C10L08L2gyPjxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTNweCI+JysoZC5saWNlbnNlX21lc3NhZ2V8fCfQm9C40YbQtdC90LfRitGCINC90LUg0LUg0LDQutGC0LjQstC10L0uJykrJzwvcD48L2Rpdj4nOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZihkICYmIGQubW9kdWxlc19lbmFibGVkICYmIGQubW9kdWxlc19lbmFibGVkLmhhc093blByb3BlcnR5KGtleSkgJiYgIWQubW9kdWxlc19lbmFibGVkW2tleV0pewogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjQ4MHB4O21hcmdpbjo4MHB4IGF1dG87dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtjb2xvcjojNGE0YTZhIj48ZGl2IHN0eWxlPSJmb250LXNpemU6NDBweDttYXJnaW4tYm90dG9tOjEycHgiPvCflJI8L2Rpdj48aDI+JytsYWJlbCsnINC1INC40LfQutC70Y7Rh9C10L08L2gyPjxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTNweCI+0KLQvtC30Lgg0LzQvtC00YPQuyDQtSDQuNC30LrQu9GO0YfQtdC9INC30LAg0YLQsNC30Lgg0LjQvdGB0YLQsNC70LDRhtC40Y8uINCh0LLRitGA0LbQuCDRgdC1INGBINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuPC9wPjxhIGhyZWY9ImluZGV4Lmh0bWwiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjE2cHg7Y29sb3I6IzZjNjNmZiI+4oaQINCe0LHRgNCw0YLQvdC+INC60YrQvCBIdWI8L2E+PC9kaXY+JzsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH1jYXRjaChlKXt9CiAgcmV0dXJuIHRydWU7Cn0KbW9kdWxlR3VhcmQoJ2NvbnRyYWN0cycsJ9CU0L7Qs9C+0LLQvtGA0LjRgtC1Jyk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K', '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+0LLRj9Cy0LDQvdC1INC90LAg0YHRgtCw0YLRg9GB0LAuJyk7Cn0KCmFzeW5jIGZ1bmN0aW9uIG1vZHVsZUd1YXJkKGtleSxsYWJlbCl7CiAgdHJ5ewogICAgdmFyIHI9YXdhaXQgYWYoJ2JyYW5kaW5nX3NldHRpbmdzJyk7CiAgICBpZihyICYmIChyLmxpY2Vuc2Vfc3RhdGU9PT0nbG9ja2VkJ3x8ci5saWNlbnNlX3N0YXRlPT09J2ludmFsaWQnKSl7CiAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6NDgwcHg7bWFyZ2luOjgwcHggYXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtmb250LWZhbWlseTpzYW5zLXNlcmlmO2NvbG9yOiM0YTRhNmEiPicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O21hcmdpbi1ib3R0b206MTJweCI+8J+UkjwvZGl2PjxoMj7QpdGK0LHRitGCINC1INC30LDQutC70Y7Rh9C10L08L2gyPicrCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTNweCI+Jysoci5saWNlbnNlX21lc3NhZ2V8fCfQm9C40YbQtdC90LfRitGCINC90LUg0LUg0LDQutGC0LjQstC10L0uJykrJzwvcD48L2Rpdj4nOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZihyICYmIHIubW9kdWxlc19lbmFibGVkICYmIHIubW9kdWxlc19lbmFibGVkLmhhc093blByb3BlcnR5KGtleSkgJiYgIXIubW9kdWxlc19lbmFibGVkW2tleV0pewogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjQ4MHB4O21hcmdpbjo4MHB4IGF1dG87dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtjb2xvcjojNGE0YTZhIj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6NDBweDttYXJnaW4tYm90dG9tOjEycHgiPvCflJI8L2Rpdj48aDI+JytsYWJlbCsnINC1INC40LfQutC70Y7Rh9C10L08L2gyPicrCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTNweCI+0KLQvtC30Lgg0LzQvtC00YPQuyDQtSDQuNC30LrQu9GO0YfQtdC9INC30LAg0YLQsNC30Lgg0LjQvdGB0YLQsNC70LDRhtC40Y8uINCh0LLRitGA0LbQuCDRgdC1INGBINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuPC9wPicrCiAgICAgICAgJzxhIGhyZWY9ImluZGV4Lmh0bWwiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjE2cHg7Y29sb3I6IzZjNjNmZiI+4oaQINCe0LHRgNCw0YLQvdC+INC60YrQvCBIdWI8L2E+PC9kaXY+JzsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH1jYXRjaChlKXt9CiAgcmV0dXJuIHRydWU7Cn0KCm1vZHVsZUd1YXJkKCdocl9yZXF1ZXN0cycsJ9Cc0L7Qu9Cx0LjRgtC1JykudGhlbihmdW5jdGlvbihvayl7IGlmKG9rKXsgcmVuZGVyRG9jKCk7IGxvYWRMaXN0KCk7IH0gfSk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K', 'hubs.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0J/QsNGA0YLQvdGM0L7RgNGB0LrQuCDRhdGK0LHQvtCy0LUg4oCUIFdlYnRyaXhpYSBIdWI8L3RpdGxlPgo8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PURNK1NhbnM6d2dodEAzMDA7NDAwOzUwMDs2MDAmZmFtaWx5PURNK01vbm86d2dodEA0MDA7NTAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KPHN0eWxlPgo6cm9vdHstLWJnOiNmMGYwZjg7LS1zdXI6I2ZmZjstLXN1cjI6I2Y1ZjVmYzstLXN1cjM6I2VhZWFmNTstLWJyZDpyZ2JhKDAsMCwwLC4wOCk7LS10eDojMWExYTJlOy0tdHgyOiM0YTRhNmE7LS10eDM6Izg4ODhhYTsKLS1hY2M6IzZjNjNmZjstLWdybjojMjJjNTVlOy0tZ2RpbTpyZ2JhKDM0LDE5Nyw5NCwuMTQpOy0tcmVkOiNlZjQ0NDQ7LS1yZGltOnJnYmEoMjM5LDY4LDY4LC4xNCk7LS1hbWI6I2Y1OWUwYjstLWFkaW06cmdiYSgyNDUsMTU4LDExLC4xNCk7LS1mbjonRE0gU2Fucycsc2Fucy1zZXJpZjstLW1vOidETSBNb25vJyxtb25vc3BhY2V9Cip7bWFyZ2luOjA7cGFkZGluZzowO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KYm9keXtmb250LWZhbWlseTp2YXIoLS1mbik7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tdHgpO21pbi1oZWlnaHQ6MTAwdmg7cGFkZGluZzoyMnB4IDE4cHggNjBweH0KLndyYXB7bWF4LXdpZHRoOjEyMDBweDttYXJnaW46MCBhdXRvfQoudG9we2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNnB4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4fQpoMXtmb250LXNpemU6MjBweDtmb250LXdlaWdodDo2MDB9Ci5zdWJ7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweH0KLmxua3tjb2xvcjp2YXIoLS1hY2MpO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxMnB4fQouc3RhdGdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNCwxZnIpO2dhcDoxNHB4O21hcmdpbi1ib3R0b206MTZweH0KQG1lZGlhKG1heC13aWR0aDo4NjBweCl7LnN0YXRncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpfX0KLnN0YXRjYXJke2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6MTZweH0KLnN0YXRjYXJkIC5sYmx7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA2ZW19Ci5zdGF0Y2FyZCBie2ZvbnQtc2l6ZToyMnB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDo0cHh9Ci5wYW5lbHtiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjE4cHg7bWFyZ2luLWJvdHRvbToxNnB4fQoucGh7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjEycHg7ZmxleC13cmFwOndyYXA7Z2FwOjhweH0KLnB0e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMH0KLmJ0bntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1yYWRpdXM6OXB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYwMH0KLmJ0bi5we2JhY2tncm91bmQ6dmFyKC0tYWNjKTtjb2xvcjojZmZmfQouYnRuLnN7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eDIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKX0KLmJ0bi5ke2JhY2tncm91bmQ6dmFyKC0tcmRpbSk7Y29sb3I6dmFyKC0tcmVkKX0KLmJ0bi5ne2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6IzE1ODAzZH0KLmJ0bi5he2JhY2tncm91bmQ6dmFyKC0tYWRpbSk7Y29sb3I6I2I0NTMwOX0KdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Zm9udC1zaXplOjEyLjVweH0KdGh7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4IDlweDtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtd2VpZ2h0OjUwMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO3doaXRlLXNwYWNlOm5vd3JhcH0KdGR7cGFkZGluZzo5cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9CmxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA2ZW07bWFyZ2luOjEwcHggMCA1cHh9CmlucHV0LHNlbGVjdHt3aWR0aDoxMDAlO2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTBweCAxMnB4O2NvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEzcHg7b3V0bGluZTpub25lfQppbnB1dDpmb2N1cyxzZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOnZhcigtLWFjYyl9Ci5yb3cze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnI7Z2FwOjEwcHh9Ci5yb3c0e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MS4yZnIgMS42ZnIgMS40ZnIgLjhmcjtnYXA6MTBweH0KQG1lZGlhKG1heC13aWR0aDo4NjBweCl7LnJvdzMsLnJvdzR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn19Ci5kb3R7d2lkdGg6OHB4O2hlaWdodDo4cHg7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjZweH0KLmRvdC5va3tiYWNrZ3JvdW5kOnZhcigtLWdybil9LmRvdC5lcnJ7YmFja2dyb3VuZDp2YXIoLS1yZWQpfQoubW9kY2hpcHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46M3B4IDRweCAwIDA7cGFkZGluZzo2cHggMTFweDtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCl9Ci5tb2RjaGlwLm9ue2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6IzE1ODAzZDtib3JkZXItY29sb3I6cmdiYSgzNCwxOTcsOTQsLjMpfQoubW9kY2hpcC5vZmZ7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eDMpfQouYmFkZ2V7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfQouYmFkZ2Uub2t7YmFja2dyb3VuZDp2YXIoLS1nZGltKTtjb2xvcjojMTU4MDNkfQouYmFkZ2Uub3ZlcmR1ZXtiYWNrZ3JvdW5kOnZhcigtLXJkaW0pO2NvbG9yOiNiOTFjMWN9Ci5iYWRnZS5zdG9wcGVke2JhY2tncm91bmQ6dmFyKC0tc3VyMyk7Y29sb3I6dmFyKC0tdHgzKX0KLnNtYWxse2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myl9Ci5odWJjYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTRweDtiYWNrZ3JvdW5kOnZhcigtLXN1cil9Ci50b2FzdHtwb3NpdGlvbjpmaXhlZDtib3R0b206MjBweDtyaWdodDoyMHB4O2JhY2tncm91bmQ6IzFhMWEyZTtjb2xvcjojZmZmO3BhZGRpbmc6MTJweCAxOHB4O2JvcmRlci1yYWRpdXM6MTBweDtmb250LXNpemU6MTNweDtkaXNwbGF5Om5vbmU7ei1pbmRleDoxMjAwfQouaWNvbmJ0bntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjdweDtwYWRkaW5nOjVweCA5cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEycHh9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9IndyYXAiPgogIDxkaXYgY2xhc3M9InRvcCI+CiAgICA8ZGl2PjxoMT7wn4+iINCf0LDRgNGC0L3RjNC+0YDRgdC60Lgg0YXRitCx0L7QstC1PC9oMT48ZGl2IGNsYXNzPSJzdWIiPtCa0LvQuNC10L3RgtC4INGBINGF0YrQsSDCtyDQtNC40YHRgtCw0L3RhtC40L7QvdC90Lgg0LzQvtC00YPQu9C4IMK3INC80LXRgdC10YfQvdC4INCw0LHQvtC90LDQvNC10L3RgtC4PC9kaXY+PC9kaXY+CiAgICA8YSBocmVmPSJpbmRleC5odG1sIiBjbGFzcz0ibG5rIj7ihpAg0J7QsdGA0LDRgtC90L4g0LrRitC8IEh1YjwvYT4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0ic3RhdGdyaWQiIGlkPSJzdGF0cyI+PC9kaXY+CgogIDxkaXYgY2xhc3M9InBhbmVsIj4KICAgIDxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0JTQvtCx0LDQstC4INC60LvQuNC10L3RgtGB0LrQuCDRhdGK0LE8L2Rpdj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InJvdzQiPgogICAgICA8ZGl2PjxsYWJlbD7QmNC80LUg0L3QsCDQutC70LjQtdC90YI8L2xhYmVsPjxpbnB1dCBpZD0iaF9uYW1lIiBwbGFjZWhvbGRlcj0i0L3QsNC/0YAuINCh0YLRgNC+0Lkg0JjQvdCy0LXRgdGCINCV0J7QntCUIj48L2Rpdj4KICAgICAgPGRpdj48bGFiZWw+VVJMINC90LAg0YXRitCx0LA8L2xhYmVsPjxpbnB1dCBpZD0iaF91cmwiIHBsYWNlaG9sZGVyPSJodHRwczovL2h1Yi5rbGllbnQuY29tIj48L2Rpdj4KICAgICAgPGRpdj48bGFiZWw+TGljZW5zZSBrZXkgKNC+0YIg0YLRj9GF0L3QsNGC0LAg0LjQvdGB0YLQsNC70LDRhtC40Y8pPC9sYWJlbD48aW5wdXQgaWQ9Imhfa2V5IiBwbGFjZWhvbGRlcj0i0LrQu9GO0YfRitGCINC+0YIgd19odWJfaW5zdGFsbCI+PC9kaXY+CiAgICAgIDxkaXY+PGxhYmVsPiZuYnNwOzwvbGFiZWw+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIHN0eWxlPSJ3aWR0aDoxMDAlIiBvbmNsaWNrPSJhZGRIdWIoKSI+KyDQlNC+0LHQsNCy0Lg8L2J1dHRvbj48L2Rpdj4KICAgIDwvZGl2PgogICAgPHAgY2xhc3M9InNtYWxsIiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPtCa0LvRjtGH0YrRgiDRgdC1INC/0L7QutCw0LfQstCwINCyINC60YDQsNGPINC90LAg0LjQvdGB0YLQsNC70LDRhtC40Y/RgtCwINC40LwgKNC40LvQuCDQsiDRgtGP0YXQvdCw0YLQsCDRgtCw0LHQu9C40YbQsCBicmFuZGluZ19zZXR0aW5ncyDihpIgbGljZW5zZV9rZXkpLiDQoSDQvdC10LPQviDQstC60LvRjtGH0LLQsNGIL9C40LfQutC70Y7Rh9Cy0LDRiCDQvNC+0LTRg9C70LjRgtC1INC40Lwg0LTQuNGB0YLQsNC90YbQuNC+0L3QvdC+LjwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icGFuZWwiIGlkPSJvdmVyZHVlUGFuZWwiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogICAgPGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0IiBzdHlsZT0iY29sb3I6I2I5MWMxYyI+4pqg77iPINCf0YDQvtGB0YDQvtGH0LXQvdC4INC/0LvQsNGJ0LDQvdC40Y88L2Rpdj48L2Rpdj4KICAgIDx0YWJsZSBpZD0ib3ZlcmR1ZVRibCI+PC90YWJsZT4KICA8L2Rpdj4KCiAgPGRpdiBpZD0iaHViTGlzdCI+PC9kaXY+CjwvZGl2PgoKPGRpdiBjbGFzcz0idG9hc3QiIGlkPSJ0b2FzdCI+PC9kaXY+Cgo8c2NyaXB0PgondXNlIHN0cmljdCc7CnZhciBBUEk9KGZ1bmN0aW9uKCl7CiAgdmFyIHNhdmVkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3dF9hcGknKTsKICBpZihzYXZlZClyZXR1cm4gc2F2ZWQ7CiAgdmFyIGJhc2U9d2luZG93LmxvY2F0aW9uLm9yaWdpbit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvaHVic1wuaHRtbCQvLCcnKS5yZXBsYWNlKC9cLyQvLCcnKTsKICByZXR1cm4gYmFzZSsnL2FwaS5waHAnOwp9KSgpOwphc3luYyBmdW5jdGlvbiBhZihhY3Rpb24sbWV0aG9kLGJvZHkscXMpewogIG1ldGhvZD1tZXRob2R8fCdHRVQnO3FzPXFzfHwnJzsKICB0cnl7CiAgICB2YXIgbz17bWV0aG9kOm1ldGhvZCxoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbid9fTsKICAgIGlmKGJvZHkpby5ib2R5PUpTT04uc3RyaW5naWZ5KGJvZHkpOwogICAgdmFyIHI9YXdhaXQgZmV0Y2goQVBJKyc/YWN0aW9uPScrYWN0aW9uK3FzLG8pOwogICAgdmFyIGo9YXdhaXQgci5qc29uKCk7CiAgICByZXR1cm4gai5vaz97b2s6dHJ1ZSxkYXRhOmouZGF0YX06e29rOmZhbHNlLGVycm9yOmouZXJyb3J9OwogIH1jYXRjaChlKXtyZXR1cm4ge29rOmZhbHNlLGVycm9yOmUubWVzc2FnZX07fQp9CmZ1bmN0aW9uIHRvYXN0KG0pe3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2FzdCcpO3QudGV4dENvbnRlbnQ9bTt0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztzZXRUaW1lb3V0KCgpPT50LnN0eWxlLmRpc3BsYXk9J25vbmUnLDI2MDApO30KZnVuY3Rpb24gbW9uZXkobixjKXtyZXR1cm4gKHBhcnNlRmxvYXQobnx8MCkpLnRvRml4ZWQoMikrJyAnKyhjfHwnRVVSJyk7fQpmdW5jdGlvbiBlc2Mocyl7cmV0dXJuIChzPT1udWxsPycnOlN0cmluZyhzKSkucmVwbGFjZSgvJi9nLCcmYW1wOycpLnJlcGxhY2UoLzwvZywnJmx0OycpLnJlcGxhY2UoLyIvZywnJnF1b3Q7Jyk7fQoKdmFyIE1PRFVMRV9MQUJFTFM9e3Byb2plY3RzOifQn9GA0L7QtdC60YLQuCcsY2xpZW50czon0JrQu9C40LXQvdGC0LgnLGZpbmFuY2U6J9Ck0LjQvdCw0L3RgdC4Jyx0YXNrczon0JfQsNC00LDRh9C4JyxvZmZlcnM6J9Ce0YTQtdGA0YLQuCcsCiAgY29udHJhY3RzOifQlNC+0LPQvtCy0L7RgNC4Jyxob3N0aW5nOifQpdC+0YHRgtC40L3Qs9C4JyxwYXNzd29yZHM6J9CU0L7RgdGC0YrQv9C4JyxwcmVzZW5jZTon0J/RgNC40YHRitGB0YLQstC40LUnLHRhcmdldHM6J9Ci0LDRgNCz0LXRgtC4JywKICBpbnZvaWNpbmc6J9Ck0LDQutGC0YPRgNC40YDQsNC90LUnLGhyX3JlcXVlc3RzOifQnNC+0LvQsdC4Jyx3YXliaWxsczon0J/RitGC0L3QuCDQu9C40YHRgtC+0LLQtSd9OwoKdmFyIEhVQlM9W10sIFNVQlM9W107Cgphc3luYyBmdW5jdGlvbiBsb2FkQWxsKCl7CiAgdmFyIHN0PWF3YWl0IGFmKCdodWJfYmlsbGluZ19zdGF0cycpOwogIGlmKCFzdC5vayl7CiAgICB2YXIgbXNnPVN0cmluZyhzdC5lcnJvcnx8JycpOwogICAgdmFyIGhpbnQ9Jyc7CiAgICBpZihtc2cuaW5kZXhPZignVW5rbm93biBhY3Rpb24nKSE9PS0xKSBoaW50PSfQndCwINCi0J7Ql9CYINGF0YrQsSDQstGK0YDQstC4INGB0YLQsNGA0LAg0LLQtdGA0YHQuNGPINC90LAgYXBpLnBocC4g0JrQsNGH0Lgg0L3QvtCy0LjRgtC1INGE0LDQudC70L7QstC1INC+0YIg0L/QsNC60LXRgtCwIChhcGkucGhwLCBodWJzLmh0bWzigKYpINCy0YrRgNGF0YMg0YLQvtC30Lgg0YHQsNC50YIg0Lgg0L/RgNC10LfQsNGA0LXQtNC4Lic7CiAgICBlbHNlIGlmKG1zZy5pbmRleE9mKCdub19jb25maWcnKSE9PS0xIHx8IG1zZy5pbmRleE9mKCfQkdCw0LfQsNGC0LAg0LTQsNC90L3QuCDQvdC1INC1INC60L7QvdGE0LjQs9GD0YDQuNGA0LDQvdCwJykhPT0tMSkgaGludD0n0KLQvtC30Lgg0YXRitCxINC90Y/QvNCwIGNvbmZpZy5waHAg4oCUINGB0YLQsNGA0YLQuNGA0LDQuSB3X2h1Yl9pbnN0YWxsLnBocCDRgtGD0LouJzsKICAgIGVsc2UgaWYobXNnLmluZGV4T2YoJ2V4aXN0JykhPT0tMSB8fCBtc2cudG9Mb3dlckNhc2UoKS5pbmRleE9mKCd0YWJsZScpIT09LTEpIGhpbnQ9J9Cb0LjQv9GB0LLQsNGCINC90L7QstC40YLQtSDRgtCw0LHQu9C40YbQuC4g0J7RgtCy0L7RgNC4INCy0LXQtNC90YrQtjogPGEgaHJlZj0iJytBUEkrJz9hY3Rpb249aW5zdGFsbF9wbGF0Zm9ybSIgdGFyZ2V0PSJfYmxhbmsiPmFwaS5waHA/YWN0aW9uPWluc3RhbGxfcGxhdGZvcm08L2E+INC4INC/0YDQtdC30LDRgNC10LTQuC4nOwogICAgZWxzZSBoaW50PSfQk9GA0LXRiNC60LA6ICcrZXNjKG1zZykrJy4g0J/RgNC+0LLQtdGA0Lgg0LTQsNC70LggYXBpLnBocCDQtSDQvdC+0LLQsNGC0LAg0LLQtdGA0YHQuNGPINC4INC00LDQu9C4IGluc3RhbGxfcGxhdGZvcm0g0LUg0YHRgtCw0YDRgtC40YDQsNC9Lic7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhdHMnKS5pbm5lckhUTUw9Jyc7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaHViTGlzdCcpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0icGFuZWwiIHN0eWxlPSJib3JkZXItY29sb3I6cmdiYSgyMzksNjgsNjgsLjM1KSI+PGRpdiBjbGFzcz0icHQiIHN0eWxlPSJjb2xvcjojYjkxYzFjO21hcmdpbi1ib3R0b206OHB4Ij7QpdGK0LHRitGCINC90LUg0LUg0LPQvtGC0L7QsiDQt9CwINGC0L7Qt9C4INC80L7QtNGD0Ls8L2Rpdj48ZGl2IGNsYXNzPSJzbWFsbCIgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS43Ij4nK2hpbnQrJzwvZGl2PjwvZGl2Pic7CiAgICByZXR1cm47CiAgfQogIHJlbmRlclN0YXRzKHN0LmRhdGEpOwogIHZhciBocz1hd2FpdCBhZignY2xpZW50X2h1YnMnKTsgSFVCUz1ocy5vaz8oaHMuZGF0YXx8W10pOltdOwogIHZhciBzcz1hd2FpdCBhZignaHViX3N1YnNjcmlwdGlvbnMnKTsgU1VCUz1zcy5vaz8oc3MuZGF0YXx8W10pOltdOwogIHJlbmRlckh1YnMoKTsKfQoKZnVuY3Rpb24gcmVuZGVyU3RhdHMocyl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXRzJykuaW5uZXJIVE1MPQogICAgJzxkaXYgY2xhc3M9InN0YXRjYXJkIj48ZGl2IGNsYXNzPSJsYmwiPtCa0LvQuNC10L3RgtGB0LrQuCDRhdGK0LHQvtCy0LU8L2Rpdj48Yj4nK3MuaHVicysnPC9iPjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0ic3RhdGNhcmQiPjxkaXYgY2xhc3M9ImxibCI+0JDQutGC0LjQstC90Lgg0LDQsdC+0L3QsNC80LXQvdGC0Lg8L2Rpdj48Yj4nK3MuYWN0aXZlX3N1YnNjcmlwdGlvbnMrJzwvYj48L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9InN0YXRjYXJkIj48ZGl2IGNsYXNzPSJsYmwiPk1SUiAo0LzQtdGB0LXRh9C10L0g0L/RgNC40YXQvtC0KTwvZGl2PjxiIHN0eWxlPSJjb2xvcjojMTU4MDNkIj4nK21vbmV5KHMubXJyKSsnPC9iPjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0ic3RhdGNhcmQiPjxkaXYgY2xhc3M9ImxibCI+0J/RgNC+0YHRgNC+0YfQtdC90Lg8L2Rpdj48YiBzdHlsZT0iY29sb3I6Jysocy5vdmVyZHVlLmxlbmd0aD8nI2I5MWMxYyc6J2luaGVyaXQnKSsnIj4nK3Mub3ZlcmR1ZS5sZW5ndGgrJzwvYj48L2Rpdj4nOwogIHZhciBvcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3ZlcmR1ZVBhbmVsJyk7CiAgaWYocy5vdmVyZHVlLmxlbmd0aCl7CiAgICBvcC5zdHlsZS5kaXNwbGF5PSdibG9jayc7CiAgICB2YXIgaHRtbD0nPHRoZWFkPjx0cj48dGg+0JrQu9C40LXQvdGCPC90aD48dGg+0JzQvtC00YPQuzwvdGg+PHRoPtCh0YPQvNCwL9C80LXRgTwvdGg+PHRoPtCf0LDQtNC10LY8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICAgIHMub3ZlcmR1ZS5mb3JFYWNoKG89PnsKICAgICAgaHRtbCs9Jzx0cj48dGQ+Jytlc2Moby5odWJfbmFtZXx8J+KAlCcpKyc8L3RkPjx0ZD4nKyhNT0RVTEVfTEFCRUxTW28ubW9kdWxlXXx8by5tb2R1bGUpKyc8L3RkPjx0ZD4nK21vbmV5KG8ucHJpY2VfbW9udGhseSxvLmN1cnJlbmN5KSsnPC90ZD4nKwogICAgICAgICc8dGQgc3R5bGU9ImNvbG9yOiNiOTFjMWMiPicrby5uZXh0X2JpbGxpbmdfZGF0ZSsnPC90ZD4nKwogICAgICAgICc8dGQgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6NnB4Ij48YnV0dG9uIGNsYXNzPSJidG4gZyIgb25jbGljaz0ibWFya1BhaWQoXCcnK28uaWQrJ1wnKSI+4pyTINCf0LvQsNGC0LXQvdC+PC9idXR0b24+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGQiIG9uY2xpY2s9InN0b3BNb2R1bGVGb3JTdWIoXCcnK28uaWQrJ1wnLFwnJytvLmh1Yl9pZCsnXCcsXCcnK28ubW9kdWxlKydcJykiPuKblCDQodC/0YDQuCDQvNC+0LTRg9C70LA8L2J1dHRvbj48L3RkPjwvdHI+JzsKICAgIH0pOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ292ZXJkdWVUYmwnKS5pbm5lckhUTUw9aHRtbCsnPC90Ym9keT4nOwogIH0gZWxzZSBvcC5zdHlsZS5kaXNwbGF5PSdub25lJzsKfQoKYXN5bmMgZnVuY3Rpb24gYWRkSHViKCl7CiAgdmFyIG5hbWU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hfbmFtZScpLnZhbHVlLnRyaW0oKSwKICAgICAgdXJsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoX3VybCcpLnZhbHVlLnRyaW0oKS5yZXBsYWNlKC9cLyQvLCcnKSwKICAgICAga2V5PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoX2tleScpLnZhbHVlLnRyaW0oKTsKICBpZighbmFtZXx8IXVybHx8IWtleSl7dG9hc3QoJ9Cf0L7Qv9GK0LvQvdC4INC40LzQtSwgVVJMINC4INC60LvRjtGHJyk7cmV0dXJuO30KICB2YXIgcj1hd2FpdCBhZignY2xpZW50X2h1YnMnLCdQT1NUJyx7bmFtZTpuYW1lLHVybDp1cmwsbGljZW5zZV9rZXk6a2V5fSk7CiAgaWYoci5vayl7IHRvYXN0KCfQpdGK0LHRitGCINC1INC00L7QsdCw0LLQtdC9Jyk7IFsnaF9uYW1lJywnaF91cmwnLCdoX2tleSddLmZvckVhY2goaWQ9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS52YWx1ZT0nJyk7IGxvYWRBbGwoKTsgfQogIGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsDogJytyLmVycm9yKTsKfQoKZnVuY3Rpb24gcmVuZGVySHVicygpewogIHZhciBib3g9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2h1Ykxpc3QnKTsKICBpZighSFVCUy5sZW5ndGgpeyBib3guaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJwYW5lbCBzbWFsbCI+0J3Rj9C80LAg0LTQvtCx0LDQstC10L3QuCDQutC70LjQtdC90YLRgdC60Lgg0YXRitCx0L7QstC1INC+0YnQtS48L2Rpdj4nOyByZXR1cm47IH0KICB2YXIgaHRtbD0nJzsKICBIVUJTLmZvckVhY2goaD0+ewogICAgdmFyIGh1YlN1YnM9U1VCUy5maWx0ZXIocz0+cy5odWJfaWQ9PT1oLmlkKTsKICAgIHZhciBtcnI9aHViU3Vicy5maWx0ZXIocz0+cy5hY3RpdmU9PTEpLnJlZHVjZSgoYSxzKT0+YStwYXJzZUZsb2F0KHMucHJpY2VfbW9udGhseXx8MCksMCk7CiAgICBodG1sKz0nPGRpdiBjbGFzcz0iaHViY2FyZCI+JysKICAgICAgJzxkaXYgY2xhc3M9InBoIj48ZGl2PjxzcGFuIGNsYXNzPSJwdCI+8J+PoiAnK2VzYyhoLm5hbWUpKyc8L3NwYW4+IDxzcGFuIGNsYXNzPSJzbWFsbCI+Jytlc2MoaC51cmwpKyc8L3NwYW4+PC9kaXY+JysKICAgICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6NnB4O2FsaWduLWl0ZW1zOmNlbnRlciI+PHNwYW4gY2xhc3M9InNtYWxsIj5NUlI6IDxiIHN0eWxlPSJjb2xvcjojMTU4MDNkIj4nK21vbmV5KG1ycikrJzwvYj48L3NwYW4+JysKICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBkIiBvbmNsaWNrPSJyZW1vdmVIdWIoXCcnK2guaWQrJ1wnKSI+0J/RgNC10LzQsNGF0L3QuDwvYnV0dG9uPjwvZGl2PjwvZGl2PicrCiAgICAgICc8ZGl2IGlkPSJtb2RzXycraC5pZCsnIiBjbGFzcz0ic21hbGwiPtCh0LLRitGA0LfQstCw0Lwg0YHQtSDRgSDRhdGK0LHQsOKApjwvZGl2PicrCiAgICAgICc8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjE0cHgiPjxkaXYgY2xhc3M9InNtYWxsIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNmVtO21hcmdpbi1ib3R0b206NnB4Ij7QkNCx0L7QvdCw0LzQtdC90YLQuDwvZGl2PicrCiAgICAgICc8dGFibGU+PHRoZWFkPjx0cj48dGg+0JzQvtC00YPQuzwvdGg+PHRoPtCm0LXQvdCwL9C80LXRgTwvdGg+PHRoPtCh0LvQtdC00LLQsNGJ0L4g0L/Qu9Cw0YnQsNC90LU8L3RoPjx0aD7QodGC0LDRgtGD0YE8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICAgIGh1YlN1YnMuZm9yRWFjaChzPT57CiAgICAgIHZhciBvdmVyZHVlID0gcy5hY3RpdmU9PTEgJiYgcy5uZXh0X2JpbGxpbmdfZGF0ZSAmJiBzLm5leHRfYmlsbGluZ19kYXRlIDwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApOwogICAgICBodG1sKz0nPHRyPjx0ZD4nKyhNT0RVTEVfTEFCRUxTW3MubW9kdWxlXXx8cy5tb2R1bGUpKyc8L3RkPjx0ZD4nK21vbmV5KHMucHJpY2VfbW9udGhseSxzLmN1cnJlbmN5KSsnPC90ZD4nKwogICAgICAgICc8dGQ+Jysocy5uZXh0X2JpbGxpbmdfZGF0ZXx8J+KAlCcpKyc8L3RkPicrCiAgICAgICAgJzx0ZD48c3BhbiBjbGFzcz0iYmFkZ2UgJysocy5hY3RpdmU9PTA/J3N0b3BwZWQnOihvdmVyZHVlPydvdmVyZHVlJzonb2snKSkrJyI+Jysocy5hY3RpdmU9PTA/J9GB0L/RgNGP0L0nOihvdmVyZHVlPyfQv9GA0L7RgdGA0L7Rh9C10L0nOifQsNC60YLQuNCy0LXQvScpKSsnPC9zcGFuPjwvdGQ+JysKICAgICAgICAnPHRkIHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjVweDtmbGV4LXdyYXA6d3JhcCI+JysKICAgICAgICAocy5hY3RpdmU9PTE/JzxidXR0b24gY2xhc3M9ImJ0biBnIiBvbmNsaWNrPSJtYXJrUGFpZChcJycrcy5pZCsnXCcpIj7inJMg0J/Qu9Cw0YLQtdC90L48L2J1dHRvbj4nOicnKSsKICAgICAgICAocy5hY3RpdmU9PTE/JzxidXR0b24gY2xhc3M9ImJ0biBhIiBvbmNsaWNrPSJ0b2dnbGVTdWIoXCcnK3MuaWQrJ1wnLDApIj7ij7gg0KHQv9GA0Lg8L2J1dHRvbj4nCiAgICAgICAgICAgICAgICAgICAgOic8YnV0dG9uIGNsYXNzPSJidG4gZyIgb25jbGljaz0idG9nZ2xlU3ViKFwnJytzLmlkKydcJywxKSI+4pa2INCQ0LrRgtC40LLQuNGA0LDQuTwvYnV0dG9uPicpKwogICAgICAgICc8c3BhbiBjbGFzcz0iaWNvbmJ0biIgb25jbGljaz0iZGVsU3ViKFwnJytzLmlkKydcJykiPvCfl5E8L3NwYW4+PC90ZD48L3RyPic7CiAgICB9KTsKICAgIGlmKCFodWJTdWJzLmxlbmd0aCkgaHRtbCs9Jzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNtYWxsIj7QndGP0LzQsCDQsNCx0L7QvdCw0LzQtdC90YLQuDwvdGQ+PC90cj4nOwogICAgaHRtbCs9JzwvdGJvZHk+PC90YWJsZT4nKwogICAgICAnPGRpdiBjbGFzcz0icm93MyIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDthbGlnbi1pdGVtczplbmQiPicrCiAgICAgICc8ZGl2PjxsYWJlbD7QnNC+0LTRg9C7PC9sYWJlbD48c2VsZWN0IGlkPSJuc19tb2RfJytoLmlkKyciPicrT2JqZWN0LmtleXMoTU9EVUxFX0xBQkVMUykubWFwKGs9Pic8b3B0aW9uIHZhbHVlPSInK2srJyI+JytNT0RVTEVfTEFCRUxTW2tdKyc8L29wdGlvbj4nKS5qb2luKCcnKSsnPC9zZWxlY3Q+PC9kaXY+JysKICAgICAgJzxkaXY+PGxhYmVsPtCm0LXQvdCwIOKCrC/QvNC10YHQtdGGPC9sYWJlbD48aW5wdXQgaWQ9Im5zX3ByaWNlXycraC5pZCsnIiB0eXBlPSJudW1iZXIiIHN0ZXA9IjAuMDEiIHZhbHVlPSI1Ij48L2Rpdj4nKwogICAgICAnPGRpdj48YnV0dG9uIGNsYXNzPSJidG4gcCIgc3R5bGU9IndpZHRoOjEwMCUiIG9uY2xpY2s9ImFkZFN1YihcJycraC5pZCsnXCcpIj4rINCQ0LHQvtC90LDQvNC10L3RgjwvYnV0dG9uPjwvZGl2PicrCiAgICAgICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogIH0pOwogIGJveC5pbm5lckhUTUw9aHRtbDsKICBIVUJTLmZvckVhY2goaD0+bG9hZFJlbW90ZU1vZHVsZXMoaCkpOwp9Cgphc3luYyBmdW5jdGlvbiBsb2FkUmVtb3RlTW9kdWxlcyhoKXsKICB2YXIgYm94PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RzXycraC5pZCk7IGlmKCFib3gpcmV0dXJuOwogIGlmKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbD09PSdodHRwczonICYmIGgudXJsLmluZGV4T2YoJ2h0dHA6Ly8nKT09PTApewogICAgYm94LmlubmVySFRNTD0nPHNwYW4gY2xhc3M9ImRvdCBlcnIiPjwvc3Bhbj7QkdGA0LDRg9C30YrRgNGK0YIg0LHQu9C+0LrQuNGA0LAg0LLRgNGK0LfQutCw0YLQsDog0YLQvtC30Lgg0YXRitCxINC1INC90LAgaHR0cHMsINCwINC60LvQuNC10L3RgtGB0LrQuNGP0YIg0LUg0L3QsCBodHRwIChtaXhlZCBjb250ZW50KS4g0KHQvNC10L3QuCBVUkwt0LAg0L3QsCDQutC70LjQtdC90YLQsCDQvdCwIGh0dHBzOi8vICjQuNC30LTQsNC5INC80YMgU1NMINC+0YIgY1BhbmVsIOKGkiBTU0wvVExTIFN0YXR1cyDihpIgUnVuIEF1dG9TU0wpLic7CiAgICByZXR1cm47CiAgfQogIHRyeXsKICAgIHZhciByZXNwPWF3YWl0IGZldGNoKGgudXJsKycvYXBpLnBocD9hY3Rpb249YnJhbmRpbmdfc2V0dGluZ3MnKTsKICAgIHZhciBqPWF3YWl0IHJlc3AuanNvbigpOwogICAgaWYoIWoub2spewogICAgICB2YXIgbT1TdHJpbmcoai5lcnJvcnx8JycpOwogICAgICBpZihtPT09J25vX2NvbmZpZyd8fG0uaW5kZXhPZign0L3QtSDQtSDQutC+0L3RhNC40LPRg9GA0LjRgNCw0L3QsCcpIT09LTEpIGJveC5pbm5lckhUTUw9JzxzcGFuIGNsYXNzPSJkb3QgZXJyIj48L3NwYW4+0KXRitCx0YrRgiDQvdCwINC60LvQuNC10L3RgtCwINC90LUg0LUg0LjQvdGB0YLQsNC70LjRgNCw0L0gKNC90Y/QvNCwIGNvbmZpZy5waHApIOKAlCDRgdGC0LDRgNGC0LjRgNCw0Lkgd19odWJfaW5zdGFsbC5waHAg0YLQsNC8Lic7CiAgICAgIGVsc2UgaWYobS5pbmRleE9mKCdVbmtub3duIGFjdGlvbicpIT09LTEpIGJveC5pbm5lckhUTUw9JzxzcGFuIGNsYXNzPSJkb3QgZXJyIj48L3NwYW4+0JrQu9C40LXQvdGC0YrRgiDQtSDRgdGK0YEg0YHRgtCw0YDQsCDQstC10YDRgdC40Y8g0L3QsCBhcGkucGhwIOKAlCDQutCw0YfQuCDQvdC+0LLQuNGC0LUg0YTQsNC50LvQvtCy0LUg0L/RgNC4INC90LXQs9C+Lic7CiAgICAgIGVsc2UgYm94LmlubmVySFRNTD0nPHNwYW4gY2xhc3M9ImRvdCBlcnIiPjwvc3Bhbj7QpdGK0LHRitGCINC+0YLQs9C+0LLQvtGA0Lgg0YEg0LPRgNC10YjQutCwOiAnK2VzYyhtKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIG1vZHM9ai5kYXRhLm1vZHVsZXNfZW5hYmxlZHx8e307CiAgICB2YXIgaHRtbD0nPHNwYW4gY2xhc3M9ImRvdCBvayI+PC9zcGFuPtCh0LLRitGA0LfQsNC9IOKAlCAnK2VzYyhqLmRhdGEucHJvZHVjdF9uYW1lfHwnJykrJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij4nOwogICAgT2JqZWN0LmtleXMoTU9EVUxFX0xBQkVMUykuZm9yRWFjaChrPT57CiAgICAgIHZhciBvbj0hIW1vZHNba107CiAgICAgIGh0bWwrPSc8c3BhbiBjbGFzcz0ibW9kY2hpcCAnKyhvbj8nb24nOidvZmYnKSsnIiBvbmNsaWNrPSJyZW1vdGVUb2dnbGUoXCcnK2guaWQrJ1wnLFwnJytlc2MoaC51cmwpKydcJyxcJycrZXNjKGgubGljZW5zZV9rZXkpKydcJyxcJycraysnXCcsdGhpcykiPicrTU9EVUxFX0xBQkVMU1trXSsob24/JyDinJMnOicnKSsnPC9zcGFuPic7CiAgICB9KTsKICAgIGJveC5pbm5lckhUTUw9aHRtbCsnPC9kaXY+JzsKICAgIGFmKCdjbGllbnRfaHViX3BpbmcnLCdHRVQnLCcnLCAnJmlkPScraC5pZCk7CiAgfWNhdGNoKGUpewogICAgYm94LmlubmVySFRNTD0nPHNwYW4gY2xhc3M9ImRvdCBlcnIiPjwvc3Bhbj7QndGP0LzQsCDQvNGA0LXQttC+0LLQsCDQstGA0YrQt9C60LAg0YEgJytlc2MoaC51cmwpKycvYXBpLnBocCDigJQg0L/RgNC+0LLQtdGA0Lg6IDEpIFVSTC3RitGCINC1INGC0L7Rh9C10L0g0Lgg0LHQtdC3INC/0YrRgiDRgdC70LXQtCDQtNC+0LzQtdC50L3QsCwgMikg0YXRitCx0YrRgiDQtSDQuNC90YHRgtCw0LvQuNGA0LDQvSDRgtCw0LwsIDMpINC+0YLQstC+0YDQuCAnK2VzYyhoLnVybCkrJy9hcGkucGhwP2FjdGlvbj10ZXN0INC00LjRgNC10LrRgtC90L4g0LIg0LHRgNCw0YPQt9GK0YDQsCAo0YLRgNGP0LHQstCwINC00LAg0LLRitGA0L3QtSBKU09OKS4nOwogIH0KfQoKYXN5bmMgZnVuY3Rpb24gcmVtb3RlVG9nZ2xlKGh1YklkLHVybCxrZXksbW9kLGVsKXsKICB2YXIgd2lsbEVuYWJsZT1lbC5jbGFzc0xpc3QuY29udGFpbnMoJ29mZicpOwogIHRyeXsKICAgIHZhciByZXNwPWF3YWl0IGZldGNoKHVybCsnL2FwaS5waHA/YWN0aW9uPW1vZHVsZV90b2dnbGUnLHttZXRob2Q6J1BPU1QnLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJ30sCiAgICAgIGJvZHk6SlNPTi5zdHJpbmdpZnkoe2FkbWluX3NlY3JldDprZXksbW9kdWxlOm1vZCxlbmFibGVkOndpbGxFbmFibGU/MTowfSl9KTsKICAgIHZhciBqPWF3YWl0IHJlc3AuanNvbigpOwogICAgaWYoai5vayl7CiAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoJ29uJyk7IGVsLmNsYXNzTGlzdC50b2dnbGUoJ29mZicpOwogICAgICBlbC5pbm5lckhUTUw9TU9EVUxFX0xBQkVMU1ttb2RdKyh3aWxsRW5hYmxlPycg4pyTJzonJyk7CiAgICAgIHRvYXN0KE1PRFVMRV9MQUJFTFNbbW9kXSsnIOKGkiAnKyh3aWxsRW5hYmxlPyfQstC60LvRjtGH0LXQvSc6J9C40LfQutC70Y7Rh9C10L0nKSsnINC/0YDQuCDQutC70LjQtdC90YLQsCcpOwogICAgfSBlbHNlIHRvYXN0KCfQk9GA0LXRiNC60LA6ICcrai5lcnJvcik7CiAgfWNhdGNoKGUpeyB0b2FzdCgn0J3Rj9C80LAg0LLRgNGK0LfQutCwINGBINGF0YrQsdCwINC90LAg0LrQu9C40LXQvdGC0LAnKTsgfQp9Cgphc3luYyBmdW5jdGlvbiByZW1vdmVIdWIoaWQpewogIGlmKCFjb25maXJtKCfQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGF0YrQsdCwINC+0YIg0YDQtdCz0LjRgdGC0YrRgNCwPyAo0J3QtdCz0L7QstCw0YLQsCDQuNC90YHRgtCw0LvQsNGG0LjRjyDQvdC1INGB0LUg0L/QuNC/0LAuKScpKXJldHVybjsKICBhd2FpdCBhZignY2xpZW50X2h1YnMnLCdERUxFVEUnLCcnLCAnJmlkPScraWQpOwogIGxvYWRBbGwoKTsKfQoKYXN5bmMgZnVuY3Rpb24gYWRkU3ViKGh1YklkKXsKICB2YXIgbW9kPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduc19tb2RfJytodWJJZCkudmFsdWU7CiAgdmFyIHByaWNlPXBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25zX3ByaWNlXycraHViSWQpLnZhbHVlKXx8MDsKICB2YXIgcj1hd2FpdCBhZignaHViX3N1YnNjcmlwdGlvbnMnLCdQT1NUJyx7aHViX2lkOmh1YklkLG1vZHVsZTptb2QscHJpY2VfbW9udGhseTpwcmljZX0pOwogIGlmKHIub2speyB0b2FzdCgn0JDQsdC+0L3QsNC80LXQvdGC0YrRgiDQtSDQtNC+0LHQsNCy0LXQvScpOyBsb2FkQWxsKCk7IH0gZWxzZSB0b2FzdCgn0JPRgNC10YjQutCwOiAnK3IuZXJyb3IpOwp9CmFzeW5jIGZ1bmN0aW9uIGRlbFN1YihpZCl7IGlmKCFjb25maXJtKCfQmNC30YLRgNC40Lkg0LDQsdC+0L3QsNC80LXQvdGC0LA/JykpcmV0dXJuOyBhd2FpdCBhZignaHViX3N1YnNjcmlwdGlvbnMnLCdERUxFVEUnLCcnLCAnJmlkPScraWQpOyBsb2FkQWxsKCk7IH0KYXN5bmMgZnVuY3Rpb24gbWFya1BhaWQoaWQpewogIHZhciByPWF3YWl0IGFmKCdodWJfc3Vic2NyaXB0aW9uX3BhaWQnLCdQT1NUJyx7aWQ6aWR9KTsKICBpZihyLm9rKXsgdG9hc3QoJ9Ce0YLQsdC10LvRj9C30LDQvdC+INC60LDRgtC+INC/0LvQsNGC0LXQvdC+IOKAlCDRgdC70LXQtNCy0LDRiSDQv9Cw0LTQtdC2OiAnK3IuZGF0YS5uZXh0X2JpbGxpbmdfZGF0ZSk7IGxvYWRBbGwoKTsgfQogIGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsDogJytyLmVycm9yKTsKfQphc3luYyBmdW5jdGlvbiB0b2dnbGVTdWIoaWQsYWN0aXZlKXsKICB2YXIgc3ViPVNVQlMuZmluZChzPT5zLmlkPT09aWQpOyBpZighc3ViKXJldHVybjsKICBzdWIuYWN0aXZlPWFjdGl2ZTsKICB2YXIgcj1hd2FpdCBhZignaHViX3N1YnNjcmlwdGlvbnMnLCdQT1NUJyxzdWIpOwogIGlmKHIub2speyB0b2FzdChhY3RpdmU/J9CQ0LHQvtC90LDQvNC10L3RgtGK0YIg0LUg0LDQutGC0LjQstC40YDQsNC9Jzon0JDQsdC+0L3QsNC80LXQvdGC0YrRgiDQtSDRgdC/0YDRj9C9Jyk7IGxvYWRBbGwoKTsgfQp9CmFzeW5jIGZ1bmN0aW9uIHN0b3BNb2R1bGVGb3JTdWIoc3ViSWQsaHViSWQsbW9kKXsKICB2YXIgaD1IVUJTLmZpbmQoeD0+eC5pZD09PWh1YklkKTsKICBpZihoKXsKICAgIHRyeXsKICAgICAgdmFyIHJlc3A9YXdhaXQgZmV0Y2goaC51cmwrJy9hcGkucGhwP2FjdGlvbj1tb2R1bGVfdG9nZ2xlJyx7bWV0aG9kOidQT1NUJyxoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbid9LAogICAgICAgIGJvZHk6SlNPTi5zdHJpbmdpZnkoe2FkbWluX3NlY3JldDpoLmxpY2Vuc2Vfa2V5LG1vZHVsZTptb2QsZW5hYmxlZDowfSl9KTsKICAgICAgdmFyIGo9YXdhaXQgcmVzcC5qc29uKCk7CiAgICAgIHRvYXN0KGoub2s/J9Cc0L7QtNGD0LvRitGCINC1INC40LfQutC70Y7Rh9C10L0g0L/RgNC4INC60LvQuNC10L3RgtCwJzon0JPRgNC10YjQutCwINC/0YDQuCDQuNC30LrQu9GO0YfQstCw0L3QtTogJysoai5lcnJvcnx8JycpKTsKICAgIH1jYXRjaChlKXsgdG9hc3QoJ9Cd0Y/QvNCwINCy0YDRitC30LrQsCDRgSDRhdGK0LHQsCDQvdCwINC60LvQuNC10L3RgtCwJyk7IH0KICB9CiAgdmFyIHN1Yj1TVUJTLmZpbmQocz0+cy5pZD09PXN1YklkKTsKICBpZihzdWIpeyBzdWIuYWN0aXZlPTA7IGF3YWl0IGFmKCdodWJfc3Vic2NyaXB0aW9ucycsJ1BPU1QnLHN1Yik7IH0KICBsb2FkQWxsKCk7Cn0KCmFzeW5jIGZ1bmN0aW9uIG1vZHVsZUd1YXJkKGtleSxsYWJlbCl7CiAgdHJ5ewogICAgdmFyIHI9YXdhaXQgYWYoJ2JyYW5kaW5nX3NldHRpbmdzJyk7CiAgICBpZihyLm9rICYmIHIuZGF0YSAmJiAoci5kYXRhLmxpY2Vuc2Vfc3RhdGU9PT0nbG9ja2VkJ3x8ci5kYXRhLmxpY2Vuc2Vfc3RhdGU9PT0naW52YWxpZCcpKXsKICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9Im1heC13aWR0aDo0ODBweDttYXJnaW46ODBweCBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Y29sb3I6IzRhNGE2YSI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjQwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij5cdWQ4M2RcdWRkMTI8L2Rpdj48aDI+0KXRitCx0YrRgiDQtSDQt9Cw0LrQu9GO0YfQtdC9PC9oMj4nKwogICAgICAgICc8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEzcHgiPicrZXNjKHIuZGF0YS5saWNlbnNlX21lc3NhZ2V8fCfQm9C40YbQtdC90LfRitGCINC90LUg0LUg0LDQutGC0LjQstC10L0uJykrJzwvcD48L2Rpdj4nOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZihyLm9rICYmIHIuZGF0YSAmJiByLmRhdGEubW9kdWxlc19lbmFibGVkICYmIHIuZGF0YS5tb2R1bGVzX2VuYWJsZWQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhci5kYXRhLm1vZHVsZXNfZW5hYmxlZFtrZXldKXsKICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9Im1heC13aWR0aDo0ODBweDttYXJnaW46ODBweCBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Y29sb3I6IzRhNGE2YSI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjQwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij5cdWQ4M2RcdWRkMTI8L2Rpdj48aDI+JytsYWJlbCsnINC1INC40LfQutC70Y7Rh9C10L08L2gyPicrCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTNweCI+0KLQvtC30Lgg0LzQvtC00YPQuyDQtSDQtNC+0YHRgtGK0L/QtdC9INGB0LDQvNC+INC90LAgbWFzdGVyINGF0YrQsdCwLiDQktC60LvRjtGH0Lgg0LPQviDQvtGCIHdfYWRtaW4ucGhwINCw0LrQviDRgtC+0LLQsCDQtSDRgtCy0L7Rj9GCIG1hc3Rlci48L3A+JysKICAgICAgICAnPGEgaHJlZj0iaW5kZXguaHRtbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6MTZweDtjb2xvcjojNmM2M2ZmIj5cdTIxOTAg0J7QsdGA0LDRgtC90L4g0LrRitC8IEh1YjwvYT48L2Rpdj4nOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfWNhdGNoKGUpe30KICByZXR1cm4gdHJ1ZTsKfQoKbW9kdWxlR3VhcmQoJ2h1YnNfbWFuYWdlbWVudCcsJ9Cj0L/RgNCw0LLQu9C10L3QuNC10YLQviDQvdCwINGF0YrQsdC+0LLQtScpLnRoZW4oZnVuY3Rpb24ob2speyBpZihvaykgbG9hZEFsbCgpOyB9KTsKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=', '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+0LLQvtGA0Lg8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0iY2FsZW5kYXIiIG9uY2xpY2s9ImdvKCdjYWxlbmRhcicsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPvCfk4U8L3NwYW4+0JrQsNC70LXQvdC00LDRgDwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJpbnZvaWNpbmciIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdpbnZvaWNlcy5odG1sJywnX2JsYW5rJykiPjxzcGFuIGNsYXNzPSJuaWMiPvCfp748L3NwYW4+0KTQsNC60YLRg9GA0LjRgNCw0L3QtTwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJocl9yZXF1ZXN0cyIgb25jbGljaz0id2luZG93Lm9wZW4oJ2hyLmh0bWwnLCdfYmxhbmsnKSI+PHNwYW4gY2xhc3M9Im5pYyI+8J+ThDwvc3Bhbj7QnNC+0LvQsdC4PC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9IndheWJpbGxzIiBvbmNsaWNrPSJ3aW5kb3cub3Blbignd2F5YmlsbHMuaHRtbCcsJ19ibGFuaycpIj48c3BhbiBjbGFzcz0ibmljIj7wn5qaPC9zcGFuPtCf0YrRgtC90Lgg0LvQuNGB0YLQvtCy0LU8L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5zZWMiPtCQ0LPQtdC90YbQuNGPPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9Imhvc3RpbmciIG9uY2xpY2s9ImdvKCdob3N0aW5nJyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+4qyhPC9zcGFuPtCl0L7RgdGC0LjQvdCz0Lg8c3BhbiBjbGFzcz0ibmJhZGdlIGEiIGlkPSJuYi1oIj4wPC9zcGFuPjwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJwYXNzd29yZHMiIG9uY2xpY2s9ImdvKCdwYXNzd29yZHMnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7il448L3NwYW4+0JTQvtGB0YLRitC/0Lg8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9Im5pIiBkYXRhLW1vZHVsZT0ibm90ZXMiIG9uY2xpY2s9ImdvKCdub3RlcycsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKXuzwvc3Bhbj7QkdC10LvQtdC20LrQuDwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0ibmkiIGRhdGEtbW9kdWxlPSJyZXBvcnRzIiBvbmNsaWNrPSJnbygncmVwb3J0cycsdGhpcykiPjxzcGFuIGNsYXNzPSJuaWMiPuKWtzwvc3Bhbj7QntGC0YfQtdGC0Lg8L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5zZWMiPtCV0LrQuNC/PC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9InByZXNlbmNlIiBvbmNsaWNrPSJnbygncHJlc2VuY2UnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7wn5+iPC9zcGFuPtCf0YDQuNGB0YrRgdGC0LLQuNC1PC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9InRhcmdldHMiIG9uY2xpY2s9ImdvKCd0YXJnZXRzJyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+8J+Orzwvc3Bhbj7QotCw0YDQs9C10YLQuDwvYnV0dG9uPgogICAgPGRpdiBpZD0iYWRtbmF2IiBzdHlsZT0iZGlzcGxheTpub25lIj4KICAgICAgPGRpdiBjbGFzcz0ibnNlYyI+0JDQtNC80LjQvTwvZGl2PgogICAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9IndvcmtyZXBvcnQiIG9uY2xpY2s9ImdvKCd3b3JrcmVwb3J0Jyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+4o+xPC9zcGFuPtCg0LDQsdC+0YLQtdC9INGA0LjQv9C+0YDRgjwvYnV0dG9uPgogICAgICA8YnV0dG9uIGNsYXNzPSJuaSIgZGF0YS1tb2R1bGU9InVzZXJzIiBvbmNsaWNrPSJnbygndXNlcnMnLHRoaXMpIj48c3BhbiBjbGFzcz0ibmljIj7wn5GkPC9zcGFuPtCf0L7RgtGA0LXQsdC40YLQtdC70Lg8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibmkiIG9uY2xpY2s9ImdvKCdtb2R1bGVzX3NldHRpbmdzJyx0aGlzKSI+PHNwYW4gY2xhc3M9Im5pYyI+4pqZPC9zcGFuPtCc0L7QtNGD0LvQuDwvYnV0dG9uPgogICAgICA8YnV0dG9uIGNsYXNzPSJuaSIgaWQ9ImxpY2Vuc2VOYXYiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIG9uY2xpY2s9Im9wZW5MaWNlbnNlUGFuZWwoKSI+PHNwYW4gY2xhc3M9Im5pYyI+4pajPC9zcGFuPtCb0LjRhtC10L3Qt9C4PC9idXR0b24+CiAgICA8L2Rpdj4KICA8L25hdj4KICA8ZGl2IGNsYXNzPSJzYm90Ij4KICAgIDxkaXYgY2xhc3M9Im5zZWMiIHN0eWxlPSJwYWRkaW5nLXRvcDowIj7QldC60LjQvzwvZGl2PgogICAgPGRpdiBpZD0idGxpc3QiPjwvZGl2PgogIDwvZGl2Pgo8L2FzaWRlPgoKPG1haW4gY2xhc3M9Im1haW4iIGlkPSJhcHAiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogIDxkaXYgY2xhc3M9InRvcGJhciI+CiAgICA8ZGl2IGNsYXNzPSJ0dGwiIGlkPSJwdGl0bGUiPkRhc2hib2FyZDwvZGl2PgogICAgPGRpdiBjbGFzcz0idGRhdGUiIGlkPSJ0ZGF0ZSI+PC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJ0YnRuIiBvbmNsaWNrPSJ0Z2woKSIgaWQ9InRidG4iPuKYgO+4jzwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0idWJkZyIgaWQ9InViZGciPjwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJtb2RhbCgncHJvamVjdCcpIj4rINCf0YDQvtC10LrRgjwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdvZmZlci5odG1sP3R5cGU9b25lX3RpbWUnLCdfYmxhbmsnKSI+4oqVINCe0YTQtdGA0YLQsDwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJvdXQoKSIgc3R5bGU9InBhZGRpbmc6NnB4IDEwcHgiPuKKlzwvYnV0dG9uPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNvbiI+CgogICAgPGRpdiBpZD0ic2VjLWRhc2hib2FyZCIgY2xhc3M9InNlYyBhY3RpdmUiPgogICAgICA8ZGl2IGNsYXNzPSJrZyI+CiAgICAgICAgPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7Qn9GA0L7QtdC60YLQuDwvZGl2PjxkaXYgY2xhc3M9Imt2IGFjIiBpZD0ia3AiPuKAlDwvZGl2PjxkaXYgY2xhc3M9ImtzIj7QsNC60YLQuNCy0L3QuDwvZGl2PjxkaXYgY2xhc3M9ImtnMiIgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYWNjKSI+PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7QntGE0LXRgNC40YDQsNC90L48L2Rpdj48ZGl2IGNsYXNzPSJrdiIgaWQ9ImtvIj7igJQ8L2Rpdj48ZGl2IGNsYXNzPSJrcyI+0L7QsdGJ0L48L2Rpdj48ZGl2IGNsYXNzPSJrZzIiIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWJsdSkiPjwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImtjIj48ZGl2IGNsYXNzPSJrbCI+0J/QvtC70YPRh9C10L3QvjwvZGl2PjxkaXYgY2xhc3M9Imt2IGciIGlkPSJrciI+4oCUPC9kaXY+PGRpdiBjbGFzcz0ia3MiPtC/0L7RgtCy0YrRgNC00LXQvdC+PC9kaXY+PGRpdiBjbGFzcz0ia2cyIiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1ncm4pIj48L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCe0YfQsNC60LLQsCDRgdC1PC9kaXY+PGRpdiBjbGFzcz0ia3YgYSIgaWQ9ImtwbiI+4oCUPC9kaXY+PGRpdiBjbGFzcz0ia3MiPtC90LXQv9C70LDRgtC10L3QvjwvZGl2PjxkaXYgY2xhc3M9ImtnMiIgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYW1iKSI+PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7Ql9Cw0LTQsNGH0Lg8L2Rpdj48ZGl2IGNsYXNzPSJrdiByIiBpZD0ia3QiPuKAlDwvZGl2PjxkaXYgY2xhc3M9ImtzIj7QvdC10LfQsNCy0YrRgNGI0LXQvdC4PC9kaXY+PGRpdiBjbGFzcz0ia2cyIiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1yZWQpIj48L2Rpdj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImcyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7Qn9C+0YHQu9C10LTQvdC4INC/0YDQvtC10LrRgtC4PC9kaXY+PGJ1dHRvbiBjbGFzcz0icGEiIG9uY2xpY2s9ImdvKCdwcm9qZWN0cycsbnVsbCkiPtCS0LjQtiDQstGB0LjRh9C60Lg8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJkcCI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+4pqhINCh0YDQvtC60L7QstC1PC9kaXY+PC9kaXY+PGRpdiBpZD0iZGQiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7wn5KwINCk0LjQvdCw0L3RgdC4PC9kaXY+PC9kaXY+PGRpdiBpZD0iZGYiPjwvZGl2PjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZzMiPgogICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPuKckyDQl9Cw0LTQsNGH0Lg8L2Rpdj48YnV0dG9uIGNsYXNzPSJwYSIgb25jbGljaz0ibW9kYWwoJ3Rhc2snKSI+KyDQlNC+0LHQsNCy0Lg8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJkdCI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7wn5OLINCR0LXQu9C10LbQutC4PC9kaXY+PC9kaXY+PGRpdiBpZD0iZG4iPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+4p+zINCQ0LrRgtC40LLQvdC+0YHRgjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImRhIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9InNlYy1wcm9qZWN0cyIgY2xhc3M9InNlYyI+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0JLRgdC40YfQutC4INC/0YDQvtC10LrRgtC4PC9kaXY+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHgiPjxpbnB1dCBjbGFzcz0ic2kiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSLQotGK0YDRgdC4Li4uIiBvbmlucHV0PSJmcCh0aGlzLnZhbHVlKSI+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im1vZGFsKCdwcm9qZWN0JykiPisg0J3QvtCyPC9idXR0b24+PC9kaXY+PC9kaXY+PGRpdiBpZD0iZnAiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtY2xpZW50cyIgY2xhc3M9InNlYyI+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjE0cHgiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpIiBpZD0iY3MiPuKAlDwvc3Bhbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ibW9kYWwoJ2NsaWVudCcpIj4rINCd0L7QsiDQutC70LjQtdC90YI8L2J1dHRvbj48L2Rpdj48ZGl2IGNsYXNzPSJjZyIgaWQ9ImNnIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLWZpbmFuY2UiIGNsYXNzPSJzZWMiPgogICAgICA8ZGl2IGNsYXNzPSJrZyIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNCwxZnIpO21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7QntCx0L7RgNC+0YIg0L7QsdGJ0L48L2Rpdj48ZGl2IGNsYXNzPSJrdiBhYyIgaWQ9ImZ0Ij7igJQ8L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCf0L7Qu9GD0YfQtdC90L48L2Rpdj48ZGl2IGNsYXNzPSJrdiBnIiBpZD0iZnIiPuKAlDwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImtjIj48ZGl2IGNsYXNzPSJrbCI+0J7Rh9Cw0LrQstCwINGB0LU8L2Rpdj48ZGl2IGNsYXNzPSJrdiBhIiBpZD0iZnBuIj7igJQ8L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCQ0LHQvtC90LDQvNC10L3RgtC4L9C80LXRgTwvZGl2PjxkaXYgY2xhc3M9Imt2IGciIGlkPSJmcyI+4oCUPC9kaXY+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJnMjIiPjxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPtCd0LXQv9C70LDRgtC10L3QuDwvZGl2PjwvZGl2PjxkaXYgaWQ9ImZ1Ij48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7QkNCx0L7QvdCw0LzQtdC90YLQuDwvZGl2PjwvZGl2PjxkaXYgaWQ9ImZzbCI+PC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy10YXNrcyIgY2xhc3M9InNlYyI+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0JfQsNC00LDRh9C4PC9kaXY+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHgiPjxkaXYgY2xhc3M9ImNoaXBzIj48ZGl2IGNsYXNzPSJjaGlwIGFjdGl2ZSIgb25jbGljaz0iY2hpcFModGhpcykiPtCS0YHQuNGH0LrQuDwvZGl2PjxkaXYgY2xhc3M9ImNoaXAiIG9uY2xpY2s9ImNoaXBTKHRoaXMpIj7QndC10LfQsNCy0YrRgNGI0LXQvdC4PC9kaXY+PGRpdiBjbGFzcz0iY2hpcCIgb25jbGljaz0iY2hpcFModGhpcykiPtCh0L/QtdGI0L3QuDwvZGl2PjwvZGl2PjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJtb2RhbCgndGFzaycpIj4rINCX0LDQtNCw0YfQsDwvYnV0dG9uPjwvZGl2PjwvZGl2PjxkaXYgaWQ9InRmIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLW9mZmVycyIgY2xhc3M9InNlYyI+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0J7RhNC10YDRgtC4PC9kaXY+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXAiPjxpbnB1dCBjbGFzcz0ic2kiIHN0eWxlPSJ3aWR0aDoyMjBweCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9ItCi0YrRgNGB0Lgg0L7RhNC10YDRgtCwLi4uIiBvbmlucHV0PSJPRi5xPXRoaXMudmFsdWU7ck9mZmVycygpIj48c2VsZWN0IGNsYXNzPSJzaSIgc3R5bGU9IndpZHRoOjE0NXB4IiBvbmNoYW5nZT0iT0Yuc3RhdHVzPXRoaXMudmFsdWU7ck9mZmVycygpIj48b3B0aW9uIHZhbHVlPSIiPtCS0YHQuNGH0LrQuDwvb3B0aW9uPjxvcHRpb24+0KfQsNC60LDRidCwPC9vcHRpb24+PG9wdGlvbj7Qn9GA0LjQtdGC0LA8L29wdGlvbj48b3B0aW9uPtCe0YLQutCw0LfQsNC90LA8L29wdGlvbj48L3NlbGVjdD48YnV0dG9uIGNsYXNzPSJidG4gcyIgb25jbGljaz0id2luZG93Lm9wZW4oJ29mZmVyLmh0bWw/dHlwZT1tb250aGx5JywnX2JsYW5rJykiPisg0JzQtdGB0LXRh9C90LA8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0id2luZG93Lm9wZW4oJ29mZmVyLmh0bWw/dHlwZT1vbmVfdGltZScsJ19ibGFuaycpIj7iipUg0J3QvtCy0LAg0L7RhNC10YDRgtCwPC9idXR0b24+PC9kaXY+PC9kaXY+PGRpdiBpZD0ib2YiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtY29udHJhY3RzIiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7QlNC+0LPQvtCy0L7RgNC4PC9kaXY+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHgiPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJtb2RhbCgnY29udHJhY3QnKSI+KyDQndC+0LI8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9IndpbmRvdy5vcGVuKCdjb250cmFjdHMuaHRtbCcsJ19ibGFuaycpIj7Qk9C10L3QtdGA0LjRgNCw0Lkg0LTQvtCz0L7QstC+0YA8L2J1dHRvbj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJjZiI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy1jYWxlbmRhciIgY2xhc3M9InNlYyI+PGRpdiBpZD0iY2FsZiI+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtaG9zdGluZyIgY2xhc3M9InNlYyI+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjE0cHgiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpIiBpZD0iaHMiPuKAlDwvc3Bhbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ibW9kYWwoJ2hvc3RpbmcnKSI+KyDQndC+0LIg0YXQvtGB0YLQuNC90LM8L2J1dHRvbj48L2Rpdj48ZGl2IGNsYXNzPSJoZyIgaWQ9ImhnIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLXBhc3N3b3JkcyIgY2xhc3M9InNlYyI+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2PjxkaXYgY2xhc3M9InB0Ij7wn5SQINCU0L7RgdGC0YrQv9C4INC/0L4g0LrQu9C40LXQvdGC0Lg8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6MnB4Ij7QotGK0YDRgdC4INC60LvQuNC10L3Rgiwg0L7RgtCy0L7RgNC4INCz0L4g0Lgg0LLQuNC2INGB0LDQvNC+INC90LXQs9C+0LLQuNGC0LUg0LTQvtGB0YLRitC/0LguPC9kaXY+PC9kaXY+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im9wZW5QYXNzTW9kYWwoKSI+KyDQlNC+0LHQsNCy0Lgg0LTQvtGB0YLRitC/PC9idXR0b24+PC9kaXY+PGRpdiBjbGFzcz0icHd0b3AiPjxpbnB1dCBjbGFzcz0ic2kiIGlkPSJwd1NlYXJjaCIgc3R5bGU9IndpZHRoOjI2MHB4IiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0i0KLRitGA0YHQuCDQutC70LjQtdC90YIuLi4iIG9uaW5wdXQ9IlBXLnNlYXJjaD10aGlzLnZhbHVlO3JQYXNzd29yZHMoKSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJQVy5jbGllbnQ9Jyc7UFcuc2VhcmNoPScnO3ZhciBzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwd1NlYXJjaCcpO2lmKHMpcy52YWx1ZT0nJztyUGFzc3dvcmRzKCkiPtCS0YHQuNGH0LrQuCDQutC70LjQtdC90YLQuDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9InB3bCI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy1ub3RlcyIgY2xhc3M9InNlYyI+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjE0cHgiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpIj7QkdC10LvQtdC20LrQuDwvc3Bhbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ibW9kYWwoJ25vdGUnKSI+KyDQndC+0LLQsDwvYnV0dG9uPjwvZGl2PjxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTRweCIgaWQ9Im5nIj48L2Rpdj48L2Rpdj4KICAgIDxkaXYgaWQ9InNlYy1yZXBvcnRzIiBjbGFzcz0ic2VjIj48ZGl2IGNsYXNzPSJyZyI+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+0J/RgNC40YXQvtC00Lgg0L/QviDQvNC10YHQtdGG0Lg8L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJwYWRkaW5nOjE1cHggMTdweCIgaWQ9InJyIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7Qn9C+INGC0LjQvyDRg9GB0LvRg9Cz0LA8L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJwYWRkaW5nOjE1cHggMTdweCIgaWQ9InJzIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7QotC+0L8g0LrQu9C40LXQvdGC0Lg8L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJwYWRkaW5nOjE1cHggMTdweCIgaWQ9InJjIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7QndCw0YLQvtCy0LDRgNCy0LDQvdC1INC10LrQuNC/PC9kaXY+PC9kaXY+PGRpdiBzdHlsZT0icGFkZGluZzoxNXB4IDE3cHgiIGlkPSJydCI+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtcHJlc2VuY2UiIGNsYXNzPSJzZWMiPjxkaXYgaWQ9InByZWYiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtdGFyZ2V0cyIgY2xhc3M9InNlYyI+PGRpdiBpZD0idGdmIj48ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2PjwvZGl2PjwvZGl2PgogICAgPGRpdiBpZD0ic2VjLXdvcmtyZXBvcnQiIGNsYXNzPSJzZWMiPjxkaXYgaWQ9IndyZiI+PGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj48L2Rpdj48L2Rpdj4KCiAgICA8ZGl2IGlkPSJzZWMtdXNlcnMiIGNsYXNzPSJzZWMiPjxkaXYgY2xhc3M9InBhbmVsIj48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPvCfkaQg0J/QvtGC0YDQtdCx0LjRgtC10LvQuDwvZGl2PjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJtb2RhbCgnbmV3VXNlcicpIj4rINCd0L7QsiDRgdC70YPQttC40YLQtdC7PC9idXR0b24+PC9kaXY+PGRpdiBpZD0idWwiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+CiAgICA8ZGl2IGlkPSJzZWMtbW9kdWxlc19zZXR0aW5ncyIgY2xhc3M9InNlYyI+PGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2PjxkaXYgY2xhc3M9InB0Ij7QnNC+0LTRg9C70Lgg0LIg0YLQvtC30Lgg0YXRitCxPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweCI+0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRitGCINC80L7QttC1INC00LAg0YHQutGA0LjQstCwINGE0YPQvdC60YbQuNC4INC+0YIg0LvRj9Cy0L7RgtC+INC80LXQvdGOINGB0L/QvtGA0LXQtCDQutC70LjQtdC90YLQsC48L2Rpdj48L2Rpdj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9InJNb2R1bGVzKCkiPtCe0LHQvdC+0LLQuDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9Im1vZGxpc3QiPjxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+CgogIDwvZGl2Pgo8L21haW4+Cgo8ZGl2IGNsYXNzPSJtbyIgaWQ9Im1vIiBvbmNsaWNrPSJpZihldmVudC50YXJnZXQ9PT10aGlzKWNtbygpIj48ZGl2IGNsYXNzPSJtYm94IiBpZD0ibWIiPjwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b2FzdCIgaWQ9InRvYXN0Ij48L2Rpdj4KCjxzY3JpcHQ+Cid1c2Ugc3RyaWN0JzsKdmFyIEFQST0oZnVuY3Rpb24oKXsKICB2YXIgYmFzZT13aW5kb3cubG9jYXRpb24ub3JpZ2luK3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9pbmRleFwuaHRtbCQvLCcnKS5yZXBsYWNlKC9cLyQvLCcnKTsKICB2YXIgb3duPWJhc2UrJy9hcGkucGhwJzsKICB2YXIgc2F2ZWQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3d0X2FwaScpOwogIGlmKHNhdmVkKXsKICAgIHRyeXsKICAgICAgdmFyIHU9bmV3IFVSTChzYXZlZCx3aW5kb3cubG9jYXRpb24uaHJlZik7CiAgICAgIGlmKHUub3JpZ2luPT09d2luZG93LmxvY2F0aW9uLm9yaWdpbilyZXR1cm4gc2F2ZWQ7CiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd3dF9hcGknKTsKICAgIH1jYXRjaChlKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnd3RfYXBpJyk7fQogIH0KICByZXR1cm4gb3duOwp9KSgpOwp2YXIgQ1U9bnVsbDsKdmFyIEQ9e3Byb2plY3RzOltdLHRhc2tzOltdLG5vdGVzOltdLGNsaWVudHM6W10saG9zdGluZzpbXSxwYXNzd29yZHM6W10sb2ZmZXJzOltdLGNvbnRyYWN0czpbXSx1c2VyczpbXSxhY3Rpdml0eTpbXX07CnZhciBQVz17Y2xpZW50OicnLHNlYXJjaDonJyxmb3JtQ2xpZW50OicnfTsKdmFyIE9GPXtxOicnLHN0YXR1czonJ307CnZhciBNT0RVTEVfTEFCRUxTPXsKICBwcm9qZWN0czon0J/RgNC+0LXQutGC0LgnLGNsaWVudHM6J9Ca0LvQuNC10L3RgtC4JyxmaW5hbmNlOifQpNC40L3QsNC90YHQuCcsdGFza3M6J9CX0LDQtNCw0YfQuCcsb2ZmZXJzOifQntGE0LXRgNGC0LgnLGNvbnRyYWN0czon0JTQvtCz0L7QstC+0YDQuCcsCiAgY2FsZW5kYXI6J9Ca0LDQu9C10L3QtNCw0YAnLGludm9pY2luZzon0KTQsNC60YLRg9GA0LjRgNCw0L3QtScsaHJfcmVxdWVzdHM6J9Cc0L7Qu9Cx0LgnLHdheWJpbGxzOifQn9GK0YLQvdC4INC70LjRgdGC0L7QstC1JywKICBob3N0aW5nOifQpdC+0YHRgtC40L3Qs9C4JyxwYXNzd29yZHM6J9CU0L7RgdGC0YrQv9C4Jyxub3Rlczon0JHQtdC70LXQttC60LgnLHJlcG9ydHM6J9Ce0YLRh9C10YLQuCcscHJlc2VuY2U6J9Cf0YDQuNGB0YrRgdGC0LLQuNC1Jyx0YXJnZXRzOifQotCw0YDQs9C10YLQuCcsCiAgd29ya3JlcG9ydDon0KDQsNCx0L7RgtC10L0g0YDQuNC/0L7RgNGCJyx1c2Vyczon0J/QvtGC0YDQtdCx0LjRgtC10LvQuCcKfTsKdmFyIEFCRz17J2F2LXAnOidyZ2JhKDEwOCw5OSwyNTUsLjI1KScsJ2F2LXQnOidyZ2JhKDIwLDE4NCwxNjYsLjI1KScsJ2F2LWcnOidyZ2JhKDM0LDE5Nyw5NCwuMiknLCdhdi1hJzoncmdiYSgyNDUsMTU4LDExLC4yKScsJ2F2LXInOidyZ2JhKDIzOSw2OCw2OCwuMiknLCdhdi1iJzoncmdiYSg1NiwxODksMjQ4LC4yKSd9Owp2YXIgQUNWPXsnYXYtcCc6JyNhNzhiZmEnLCdhdi10JzonIzJkZDRiZicsJ2F2LWcnOicjMjJjNTVlJywnYXYtYSc6JyNmNTllMGInLCdhdi1yJzonI2VmNDQ0NCcsJ2F2LWInOicjMzhiZGY4J307CgovLyDilIDilIAgVEhFTUUg4pSA4pSACmZ1bmN0aW9uIHRnbCgpewogIHZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnKTsKICB2YXIgbj1jPT09J2RhcmsnPydsaWdodCc6J2RhcmsnOwogIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnLG4pOwogIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd3dF90aGVtZScsbik7CiAgdmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RidG4nKTsKICBpZihiKWIudGV4dENvbnRlbnQ9bj09PSdkYXJrJz8n4piA77iPJzon8J+MmSc7Cn0KKGZ1bmN0aW9uKCl7CiAgdmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RidG4nKTsKICB2YXIgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJyk7CiAgaWYoYiliLnRleHRDb250ZW50PXQ9PT0nZGFyayc/J+KYgO+4jyc6J/CfjJknOwp9KSgpOwoKLy8g4pSA4pSAIEFQSSDilIDilIAKYXN5bmMgZnVuY3Rpb24gYWYoYWN0aW9uLG1ldGhvZCxib2R5LGV4dHJhKXsKICBtZXRob2Q9bWV0aG9kfHwnR0VUJztleHRyYT1leHRyYXx8Jyc7CiAgdHJ5ewogICAgdmFyIG89e21ldGhvZDptZXRob2QsaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb24nfSxjcmVkZW50aWFsczonc2FtZS1vcmlnaW4nfTsKICAgIGlmKGJvZHkpby5ib2R5PUpTT04uc3RyaW5naWZ5KGJvZHkpOwogICAgdmFyIHI9YXdhaXQgZmV0Y2goQVBJKyc/YWN0aW9uPScrYWN0aW9uK2V4dHJhLG8pOwogICAgaWYoIXIub2spcmV0dXJuIG51bGw7CiAgICB2YXIgaj1hd2FpdCByLmpzb24oKTsKICAgIHJldHVybiBqLm9rP2ouZGF0YTpudWxsOwogIH1jYXRjaChlKXtjb25zb2xlLmVycm9yKGFjdGlvbixlLm1lc3NhZ2UpO3JldHVybiBudWxsO30KfQoKLy8g4pSA4pSAIFZFUklGWSDilIDilIAKKGFzeW5jIGZ1bmN0aW9uKCl7CiAgdmFyIGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Fkb3QnKTsKICB2YXIgcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXN0cycpOwogIHZhciByPWF3YWl0IGFmKCdzdGF0cycpOwogIGlmKHIhPT1udWxsKXsKICAgIGQuY2xhc3NOYW1lPSdhZG90IG9rJzsKICAgIHMudGV4dENvbnRlbnQ9J+KckyDQodCy0YrRgNC30LDQvdC+IOKAlCDQstC70LXQt9GC0LUnOwogICAgcy5zdHlsZS5jb2xvcj0nIzIyYzU1ZSc7CiAgICB2YXIgaW5wPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcGlVcmxJbnB1dCcpOwogICAgaWYoaW5wKWlucC52YWx1ZT1BUEk7CiAgfWVsc2V7CiAgICBkLmNsYXNzTmFtZT0nYWRvdCBlcnInOwogICAgcy50ZXh0Q29udGVudD0n4pyXINCd0Y/QvNCwINCy0YDRitC30LrQsCDigJQg0LLRitCy0LXQtNC4INC/0YDQsNCy0LjQu9C90LjRjyBVUkwnOwogICAgcy5zdHlsZS5jb2xvcj0nI2VmNDQ0NCc7CiAgICB2YXIgaW5wPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcGlVcmxJbnB1dCcpOwogICAgaWYoaW5wKWlucC52YWx1ZT1BUEk7CiAgfQp9KSgpOwoKLy8g4pSA4pSAIENIQU5HRSBBUEkg4pSA4pSACmZ1bmN0aW9uIGNoYW5nZUFwaSgpewogIHZhciBpbnA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwaVVybElucHV0Jyk7CiAgaWYoIWlucHx8IWlucC52YWx1ZS50cmltKCkpcmV0dXJuOwogIHZhciB1cmw9aW5wLnZhbHVlLnRyaW0oKTsKICBpZighdXJsLmVuZHNXaXRoKCcucGhwJykpdXJsPXVybC5yZXBsYWNlKC9cLyQvLCcnKSsnL2FwaS5waHAnOwogIEFQST11cmw7CiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3d0X2FwaScsdXJsKTsKICB2ZXJpZnlBcGkoKTsKfQoKLy8g4pSA4pSAIFNFU1NJT04g4pSA4pSACihmdW5jdGlvbigpewogIHRyeXsKICAgIHZhciBzPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3d0X3MnKTsKICAgIGlmKHMpe3ZhciB1PUpTT04ucGFyc2Uocyk7aWYodSYmdS5pZClzaG93QXBwKHUpO30KICB9Y2F0Y2goZSl7c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnd3RfcycpO30KfSkoKTsKCi8vIOKUgOKUgCBMT0dJTiDilIDilIAKYXN5bmMgZnVuY3Rpb24gbG9naW4oKXsKICB2YXIgdT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbHUnKS52YWx1ZS50cmltKCk7CiAgdmFyIHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xwJykudmFsdWU7CiAgaWYoIXV8fCFwKXtzZXJyKCfQn9C+0L/RitC70L3QtdGC0LUg0LLRgdC40YfQutC4INC/0L7Qu9C10YLQsCcpO3JldHVybjt9CiAgdmFyIHI9YXdhaXQgYWYoJ2xvZ2luJywnUE9TVCcse3VzZXJuYW1lOnUscGFzc3dvcmQ6cH0pOwogIGlmKHIpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3d0X3MnLEpTT04uc3RyaW5naWZ5KHIpKTtzaG93QXBwKHIpO30KICBlbHNle3NlcnIoJ9CT0YDQtdGI0L3QviDQv9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQviDQuNC80LUg0LjQu9C4INC/0LDRgNC+0LvQsCcpO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdscCcpLnZhbHVlPScnO30KfQpmdW5jdGlvbiBzZXJyKG0pewogIHZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsZXJyJyk7ZS50ZXh0Q29udGVudD1tO2Uuc3R5bGUuZGlzcGxheT0nYmxvY2snOwogIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9J25vbmUnO30sMzAwMCk7Cn0KZnVuY3Rpb24gc2hvd0FwcCh1KXsKICBDVT11OwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsdycpLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYicpLnN0eWxlLmRpc3BsYXk9J2ZsZXgnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHAnKS5zdHlsZS5kaXNwbGF5PSdmbGV4JzsKICBpZih1LmlzX2FkbWluPT0xKWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZG1uYXYnKS5zdHlsZS5kaXNwbGF5PSdibG9jayc7CiAgdmFyIGNvbD11LmNvbG9yfHwnYXYtcCc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ViZGcnKS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9IndpZHRoOjIycHg7aGVpZ2h0OjIycHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDonK0FCR1tjb2xdKyc7Y29sb3I6JytBQ1ZbY29sXSsnO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6OXB4O2ZvbnQtd2VpZ2h0OjcwMCI+JysodS5pbml0aWFsc3x8Jz8nKSsnPC9kaXY+PHNwYW4+Jyt1Lm5hbWUrJzwvc3Bhbj4nKyh1LmlzX2FkbWluPT0xPyc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6I2Y1OWUwYiI+8J+RkTwvc3Bhbj4nOicnKTsKICBpbml0QXBwKCk7Cn0KZnVuY3Rpb24gb3V0KCl7CiAgQ1U9bnVsbDtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd3dF9zJyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2x3Jykuc3R5bGUuZGlzcGxheT0nZmxleCc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NiJykuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcpLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsdScpLnZhbHVlPScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdscCcpLnZhbHVlPScnOwp9CgovLyDilIDilIAgSU5JVCDilIDilIAKZnVuY3Rpb24gaW5pdEFwcCgpewogIHZhciBkPW5ldyBEYXRlKCk7CiAgdmFyIGRheXM9WyfQndC10LTQtdC70Y8nLCfQn9C+0L3QtdC00LXQu9C90LjQuicsJ9CS0YLQvtGA0L3QuNC6Jywn0KHRgNGP0LTQsCcsJ9Cn0LXRgtCy0YrRgNGC0YrQuicsJ9Cf0LXRgtGK0LonLCfQodGK0LHQvtGC0LAnXTsKICB2YXIgbW9ucz1bJ9GP0L3RgycsJ9GE0LXQsicsJ9C80LDRgCcsJ9Cw0L/RgCcsJ9C80LDQuScsJ9GO0L3QuCcsJ9GO0LvQuCcsJ9Cw0LLQsycsJ9GB0LXQvycsJ9C+0LrRgicsJ9C90L7QtScsJ9C00LXQuiddOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZGF0ZScpLnRleHRDb250ZW50PWRheXNbZC5nZXREYXkoKV0rJywgJytkLmdldERhdGUoKSsnICcrbW9uc1tkLmdldE1vbnRoKCldKycgJytkLmdldEZ1bGxZZWFyKCk7CiAgdmFyIHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10aGVtZScpOwogIHZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YnRuJyk7aWYoYiliLnRleHRDb250ZW50PXQ9PT0nZGFyayc/J+KYgO+4jyc6J/CfjJknOwogIGxvYWRBbGwoKTsKICBhcHBseU1vZHVsZVZpc2liaWxpdHkoKTsKfQoKLy8g4pSA4pSAIE1PRFVMRSBWSVNJQklMSVRZIChyZXNwZWN0cyByZW1vdGUgdG9nZ2xlcyBmcm9tIHdfYWRtaW4ucGhwIC8gbWFzdGVyIGh1Yikg4pSA4pSACmFzeW5jIGZ1bmN0aW9uIGFwcGx5TW9kdWxlVmlzaWJpbGl0eSgpewogIHRyeXsKICAgIHZhciByPWF3YWl0IGFmKCdicmFuZGluZ19zZXR0aW5ncycpOwogICAgaWYoIXJ8fCFyLm1vZHVsZXNfZW5hYmxlZClyZXR1cm47CiAgICBpZihyLmxpY2Vuc2Vfc3RhdGU9PT0nbG9ja2VkJ3x8ci5saWNlbnNlX3N0YXRlPT09J2ludmFsaWQnKXsKICAgICAgcmVuZGVyTGljZW5zZUxvY2soci5saWNlbnNlX21lc3NhZ2V8fCfQm9C40YbQtdC90LfRitGCINC90LUg0LUg0LDQutGC0LjQstC10L0uJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBtb2RzPXIubW9kdWxlc19lbmFibGVkOwogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9kdWxlXScpLmZvckVhY2goZnVuY3Rpb24oZWwpewogICAgICB2YXIga2V5PWVsLmdldEF0dHJpYnV0ZSgnZGF0YS1tb2R1bGUnKTsKICAgICAgaWYobW9kcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFtb2RzW2tleV0pIGVsLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogICAgICBlbHNlIGVsLnN0eWxlLmRpc3BsYXk9Jyc7CiAgICB9KTsKICAgIGlmKHIucHJvZHVjdF9uYW1lKXsKICAgICAgdmFyIGxzdWI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxzdWIyJyk7CiAgICAgIGlmKGxzdWIpIGxzdWIudGV4dENvbnRlbnQ9ci5wcm9kdWN0X25hbWUudG9VcHBlckNhc2UoKTsKICAgIH0KICAgIHZhciBsbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGljZW5zZU5hdicpOwogICAgaWYobG4pIGxuLnN0eWxlLmRpc3BsYXk9KENVJiZDVS5pc19hZG1pbj09MSYmci5saWNlbnNlX3JvbGU9PT0nbWFzdGVyJyk/Jyc6J25vbmUnOwogIH1jYXRjaChlKXt9Cn0KZnVuY3Rpb24gcmVuZGVyTGljZW5zZUxvY2sobXNnKXsKICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWluLWhlaWdodDoxMDB2aDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4O2JhY2tncm91bmQ6IzBhMGExMjtjb2xvcjojZWNlY2Y1O2ZvbnQtZmFtaWx5OkRNIFNhbnMsc2Fucy1zZXJpZiI+JysKICAgICc8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6NDYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xKTtib3JkZXItcmFkaXVzOjE4cHg7cGFkZGluZzozOHB4IDMwcHgiPicrCiAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjQ2cHg7bWFyZ2luLWJvdHRvbToxMnB4Ij7wn5SSPC9kaXY+PGgyIHN0eWxlPSJmb250LXNpemU6MjJweDttYXJnaW4tYm90dG9tOjEwcHgiPtCl0YrQsdGK0YIg0LUg0LfQsNC60LvRjtGH0LXQvTwvaDI+JysKICAgICc8cCBzdHlsZT0iY29sb3I6I2EwYTBjMDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjYiPicrZXNjKG1zZykrJzwvcD4nKwogICAgJzxwIHN0eWxlPSJjb2xvcjojNmY2ZjhlO2ZvbnQtc2l6ZToxMnB4O21hcmdpbi10b3A6MTRweCI+0KHQstGK0YDQttC10YLQtSDRgdC1INGBINC00L7RgdGC0LDQstGH0LjQutCwINC30LAg0L/QvtC00L3QvtCy0Y/QstCw0L3QtS48L3A+PC9kaXY+PC9kaXY+JzsKfQoKZnVuY3Rpb24gb3BlbkxpY2Vuc2VQYW5lbCgpewogIHdpbmRvdy5vcGVuKCdsaWNlbnNlcy9hZG1pbi9pbmRleC5waHAnLCdfYmxhbmsnKTsKfQoKYXN5bmMgZnVuY3Rpb24gck1vZHVsZXMoKXsKICB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGxpc3QnKTsKICBpZighZWwpcmV0dXJuOwogIGlmKCFDVXx8Q1UuaXNfYWRtaW4hPTEpe2VsLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iYWRtaW5ub3RlIj7QodCw0LzQviDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgCDQvNC+0LbQtSDQtNCwINGD0L/RgNCw0LLQu9GP0LLQsCDQvNC+0LTRg9C70LjRgtC1LjwvZGl2Pic7cmV0dXJuO30KICBlbC5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+JzsKICB2YXIgcj1hd2FpdCBhZignYnJhbmRpbmdfc2V0dGluZ3MnKTsKICB2YXIgbW9kcz0ociYmci5tb2R1bGVzX2VuYWJsZWQpP3IubW9kdWxlc19lbmFibGVkOnt9OwogIHZhciBrZXlzPU9iamVjdC5rZXlzKE1PRFVMRV9MQUJFTFMpOwogIGVsLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iYWRtaW5ub3RlIj7QmNC30LrQu9GO0YfQtdC90LjRgtC1INC80L7QtNGD0LvQuCDRgdC1INGB0LrRgNC40LLQsNGCINC+0YIg0LvRj9Cy0L7RgtC+INC80LXQvdGOLiDQm9C40YbQtdC90LfQvdC40Y/RgiDQv9Cw0L3QtdC7INC80L7QttC1INC00L7Qv9GK0LvQvdC40YLQtdC70L3QviDQtNCwINC+0LPRgNCw0L3QuNGH0LDQstCwINC80L7QtNGD0LvQuNGC0LUg0LfQsCDQutC70LjQtdC90YLRgdC60Lgg0YXRitCx0L7QstC1LjwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0ibW9kZ3JpZCI+JytrZXlzLm1hcChmdW5jdGlvbihrKXsKICAgICAgdmFyIG9uPSFtb2RzLmhhc093blByb3BlcnR5KGspfHwhIU51bWJlcihtb2RzW2tdKTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJtb2RjYXJkIj48ZGl2PjxkaXYgY2xhc3M9Im1vZG5hbWUiPicrTU9EVUxFX0xBQkVMU1trXSsnPC9kaXY+PGRpdiBjbGFzcz0ibW9kaGludCI+Jysob24/J9CQ0LrRgtC40LLQtdC9Jzon0KHQutGA0LjRgiDQvtGCINC80LXQvdGO0YLQvicpKyc8L2Rpdj48L2Rpdj48YnV0dG9uIGNsYXNzPSJzdyAnKyhvbj8nb24nOicnKSsnIiB0aXRsZT0i0JLQutC70Y7Rh9C4L9C40LfQutC70Y7Rh9C4IiBvbmNsaWNrPSJ0b2dnbGVNb2R1bGUoJytqc0FyZyhrKSsnLCcrKG9uPzA6MSkrJykiPjwvYnV0dG9uPjwvZGl2Pic7CiAgICB9KS5qb2luKCcnKSsnPC9kaXY+JzsKfQoKYXN5bmMgZnVuY3Rpb24gdG9nZ2xlTW9kdWxlKGtleSxlbmFibGVkKXsKICB2YXIgcj1hd2FpdCBhZignbW9kdWxlX3RvZ2dsZScsJ1BPU1QnLHttb2R1bGU6a2V5LGVuYWJsZWQ6ZW5hYmxlZH0pOwogIGlmKHIpewogICAgdG9hc3QoZW5hYmxlZD8n0JzQvtC00YPQu9GK0YIg0LUg0LLQutC70Y7Rh9C10L0nOifQnNC+0LTRg9C70YrRgiDQtSDQuNC30LrQu9GO0YfQtdC9Jywnb2snKTsKICAgIGF3YWl0IGFwcGx5TW9kdWxlVmlzaWJpbGl0eSgpOwogICAgYXdhaXQgck1vZHVsZXMoKTsKICB9ZWxzZXsKICAgIHRvYXN0KCfQndGD0LbQvdC4INGB0LAg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRgdC60Lgg0L/RgNCw0LLQsCcsJ2VycicpOwogIH0KfQoKLy8g4pSA4pSAIE5BViDilIDilIAKZnVuY3Rpb24gZ28oc2VjLGVsKXsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2VjJykuZm9yRWFjaChmdW5jdGlvbihzKXtzLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO30pOwogIHZhciBzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWMtJytzZWMpO2lmKHMpcy5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICBpZihlbCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm5pJykuZm9yRWFjaChmdW5jdGlvbihuKXtuLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO30pO2VsLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO30KICB2YXIgVD17ZGFzaGJvYXJkOidEYXNoYm9hcmQnLHdvcmtyZXBvcnQ6J9Cg0LDQsdC+0YLQtdC9INGA0LjQv9C+0YDRgicsdGFyZ2V0czon0JTQvdC10LLQvdC4INGC0LDRgNCz0LXRgtC4Jyxwcm9qZWN0czon0J/RgNC+0LXQutGC0LgnLGNsaWVudHM6J9Ca0LvQuNC10L3RgtC4JyxmaW5hbmNlOifQpNC40L3QsNC90YHQuCcsdGFza3M6J9CX0LDQtNCw0YfQuCcsb2ZmZXJzOifQntGE0LXRgNGC0LgnLGNvbnRyYWN0czon0JTQvtCz0L7QstC+0YDQuCcsY2FsZW5kYXI6J9Ca0LDQu9C10L3QtNCw0YAnLGhvc3Rpbmc6J9Cl0L7RgdGC0LjQvdCz0LgnLHBhc3N3b3Jkczon0JTQvtGB0YLRitC/0LgnLG5vdGVzOifQkdC10LvQtdC20LrQuCcscmVwb3J0czon0J7RgtGH0LXRgtC4JyxwcmVzZW5jZTon0J/RgNC40YHRitGB0YLQstC40LUnLHVzZXJzOifQn9C+0YLRgNC10LHQuNGC0LXQu9C4Jyxtb2R1bGVzX3NldHRpbmdzOifQnNC+0LTRg9C70LgnfTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHRpdGxlJykudGV4dENvbnRlbnQ9VFtzZWNdfHxzZWM7CiAgbHMoc2VjKTsKfQoKLy8g4pSA4pSAIEZPUk1BVCDilIDilIAKZnVuY3Rpb24gZm10KG4pe3JldHVybiAn4oKsICcrTnVtYmVyKG58fDApLnRvTG9jYWxlU3RyaW5nKCdkZS1ERScse21pbmltdW1GcmFjdGlvbkRpZ2l0czoyLG1heGltdW1GcmFjdGlvbkRpZ2l0czoyfSk7fQpmdW5jdGlvbiBmZChzKXtpZighcylyZXR1cm4gJyc7dHJ5e3JldHVybiBuZXcgRGF0ZShzKS50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7ZGF5OidudW1lcmljJyxtb250aDonc2hvcnQnLHllYXI6J251bWVyaWMnfSk7fWNhdGNoKGUpe3JldHVybiBzO319CmZ1bmN0aW9uIGZkdChzKXtpZighcylyZXR1cm4gJyc7dHJ5e3JldHVybiBuZXcgRGF0ZShzKS50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7ZGF5OidudW1lcmljJyxtb250aDonc2hvcnQnLGhvdXI6JzItZGlnaXQnLG1pbnV0ZTonMi1kaWdpdCd9KTt9Y2F0Y2goZSl7cmV0dXJuIHM7fX0KZnVuY3Rpb24gcGoocyxkKXt0cnl7cmV0dXJuIEpTT04ucGFyc2Uoc3x8J1tdJyk7fWNhdGNoKGUpe3JldHVybiBkO319CmZ1bmN0aW9uIGVzYyhzKXtyZXR1cm4gU3RyaW5nKHN8fCcnKS5yZXBsYWNlKC8mL2csJyZhbXA7JykucmVwbGFjZSgvPC9nLCcmbHQ7JykucmVwbGFjZSgvPi9nLCcmZ3Q7JykucmVwbGFjZSgvIi9nLCcmcXVvdDsnKS5yZXBsYWNlKC8nL2csJyYjMzk7Jyk7fQpmdW5jdGlvbiBqc0FyZyhzKXtyZXR1cm4gZXNjKEpTT04uc3RyaW5naWZ5KFN0cmluZyhzfHwnJykpKTt9CmZ1bmN0aW9uIGd2KGlkKXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7cmV0dXJuIGU/ZS52YWx1ZS50cmltKCk6Jyc7fQoKLy8g4pSA4pSAIExPQUQg4pSA4pSACmFzeW5jIGZ1bmN0aW9uIGxvYWRBbGwoKXsKICB2YXIgUj1hd2FpdCBQcm9taXNlLmFsbChbYWYoJ3Byb2plY3RzJyksYWYoJ3Rhc2tzJyksYWYoJ25vdGVzJyksYWYoJ2NsaWVudHMnKSxhZignaG9zdGluZycpLGFmKCdwYXNzd29yZHMnKSxhZignb2ZmZXJzJyksYWYoJ2NvbnRyYWN0cycpLGFmKCd1c2VycycpLGFmKCdhY3Rpdml0eScpLGFmKCdzdGF0cycpXSk7CiAgRC5wcm9qZWN0cz0oUlswXXx8W10pLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxwLHt0YWdzOnBqKHAudGFncyxbXSl9KTt9KTsKICBELnRhc2tzPVJbMV18fFtdO0Qubm90ZXM9UlsyXXx8W107RC5jbGllbnRzPVJbM118fFtdO0QuaG9zdGluZz1SWzRdfHxbXTsKICBELnBhc3N3b3Jkcz1SWzVdfHxbXTtELm9mZmVycz1SWzZdfHxbXTtELmNvbnRyYWN0cz1SWzddfHxbXTtELnVzZXJzPVJbOF18fFtdO0QuYWN0aXZpdHk9Uls5XXx8W107CiAgdmFyIHN0PVJbMTBdOwogIGlmKHN0KXsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrcCcpLnRleHRDb250ZW50PXN0LmFjdGl2ZV9wcm9qZWN0czsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrbycpLnRleHRDb250ZW50PWZtdChzdC50b3RhbF9vZmZlcmVkKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrcicpLnRleHRDb250ZW50PWZtdChzdC50b3RhbF9yZWNlaXZlZCk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna3BuJykudGV4dENvbnRlbnQ9Zm10KHN0LnRvdGFsX3BlbmRpbmcpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2t0JykudGV4dENvbnRlbnQ9c3QudGFza3NfcGVuZGluZzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduYi1wJykudGV4dENvbnRlbnQ9c3QuYWN0aXZlX3Byb2plY3RzOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25iLXQnKS50ZXh0Q29udGVudD1zdC50YXNrc19wZW5kaW5nOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25iLWgnKS50ZXh0Q29udGVudD1zdC5zc2xfd2FybmluZ3M7CiAgfQogIHJUZWFtKCk7ckRhc2goKTsKfQoKYXN5bmMgZnVuY3Rpb24gbHMocyl7CiAgaWYocz09PSdkYXNoYm9hcmQnKXthd2FpdCBsb2FkQWxsKCk7cmV0dXJuO30KICB2YXIgbT17CiAgICBwcm9qZWN0czphc3luYyBmdW5jdGlvbigpe0QucHJvamVjdHM9KChhd2FpdCBhZigncHJvamVjdHMnKSl8fFtdKS5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30scCx7dGFnczpwaihwLnRhZ3MsW10pfSk7fSk7clByaignJyk7fSwKICAgIGNsaWVudHM6YXN5bmMgZnVuY3Rpb24oKXtELmNsaWVudHM9YXdhaXQgYWYoJ2NsaWVudHMnKXx8W107ckNsaSgpO30sCiAgICBmaW5hbmNlOmFzeW5jIGZ1bmN0aW9uKCl7RC5wcm9qZWN0cz0oKGF3YWl0IGFmKCdwcm9qZWN0cycpKXx8W10pLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxwLHt0YWdzOnBqKHAudGFncyxbXSl9KTt9KTtyRmluKCk7fSwKICAgIHRhc2tzOmFzeW5jIGZ1bmN0aW9uKCl7RC50YXNrcz1hd2FpdCBhZigndGFza3MnKXx8W107clRhc2tzKCk7fSwKICAgIG9mZmVyczphc3luYyBmdW5jdGlvbigpe0Qub2ZmZXJzPWF3YWl0IGFmKCdvZmZlcnMnKXx8W107ck9mZmVycygpO30sCiAgICBjb250cmFjdHM6YXN5bmMgZnVuY3Rpb24oKXtELmNvbnRyYWN0cz1hd2FpdCBhZignY29udHJhY3RzJyl8fFtdO3JDb250cmFjdHMoKTt9LAogICAgaG9zdGluZzphc3luYyBmdW5jdGlvbigpe0QuaG9zdGluZz1hd2FpdCBhZignaG9zdGluZycpfHxbXTtySG9zdGluZygpO30sCiAgICBwYXNzd29yZHM6YXN5bmMgZnVuY3Rpb24oKXtELnBhc3N3b3Jkcz1hd2FpdCBhZigncGFzc3dvcmRzJyl8fFtdO3JQYXNzd29yZHMoKTt9LAogICAgbm90ZXM6YXN5bmMgZnVuY3Rpb24oKXtELm5vdGVzPWF3YWl0IGFmKCdub3RlcycpfHxbXTtyTm90ZXMoKTt9LAogICAgcmVwb3J0czphc3luYyBmdW5jdGlvbigpe0QucHJvamVjdHM9KChhd2FpdCBhZigncHJvamVjdHMnKSl8fFtdKS5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30scCx7dGFnczpwaihwLnRhZ3MsW10pfSk7fSk7RC50YXNrcz1hd2FpdCBhZigndGFza3MnKXx8W107clJlcG9ydHMoKTt9LAogICAgcHJlc2VuY2U6YXN5bmMgZnVuY3Rpb24oKXtpZighRC51c2Vycy5sZW5ndGgpRC51c2Vycz1hd2FpdCBhZigndXNlcnMnKXx8W107clByZXNlbmNlKCk7fSwKICAgIGNhbGVuZGFyOmFzeW5jIGZ1bmN0aW9uKCl7aWYoIUQudGFza3MubGVuZ3RoKUQudGFza3M9YXdhaXQgYWYoJ3Rhc2tzJyl8fFtdO2lmKCFELnVzZXJzLmxlbmd0aClELnVzZXJzPWF3YWl0IGFmKCd1c2VycycpfHxbXTtyQ2FsZW5kYXIoKTt9LAogICAgdXNlcnM6YXN5bmMgZnVuY3Rpb24oKXtELnVzZXJzPWF3YWl0IGFmKCd1c2VycycpfHxbXTtyVXNlcnMoKTt9LAogICAgd29ya3JlcG9ydDphc3luYyBmdW5jdGlvbigpe2lmKCFELnVzZXJzLmxlbmd0aClELnVzZXJzPWF3YWl0IGFmKCd1c2VycycpfHxbXTtyV29ya1JlcG9ydCgpO30sCiAgICB0YXJnZXRzOmFzeW5jIGZ1bmN0aW9uKCl7aWYoIUQudXNlcnMubGVuZ3RoKUQudXNlcnM9YXdhaXQgYWYoJ3VzZXJzJyl8fFtdO3JUYXJnZXRzKCk7fSwKICAgIG1vZHVsZXNfc2V0dGluZ3M6YXN5bmMgZnVuY3Rpb24oKXtyTW9kdWxlcygpO30KICB9OwogIGlmKG1bc10pYXdhaXQgbVtzXSgpOwp9CgovLyDilIDilIAgSEVMUEVSUyDilIDilIAKdmFyIFRNPXtXb29Db21tZXJjZTond2ViJyxXb3JkUHJlc3M6J3dlYicsJ0UtY29tbWVyY2UnOid3ZWInLFNFTzonc2VvJywnR29vZ2xlIEFkcyc6J3NlbycsSW5zdGFncmFtOidzb2NpYWwnLEZhY2Vib29rOidzb2NpYWwnLFZpYmVyOidzb2NpYWwnLGNQYW5lbDonaG9zdGluZycs0J/QvtC00LTRgNGK0LbQutCwOidob3N0aW5nJyzQm9C+0LPQvjonZGVzaWduJyzQkdGA0LDQvdC00LjQvdCzOidkZXNpZ24nLNCU0LjQt9Cw0LnQvTonZGVzaWduJyzQoNC10LrQu9Cw0LzQuDonc29jaWFsJyzQodC/0LXRiNC90L46J3J1c2gnfTsKdmFyIFNQQz17YWN0aXZlOidzcC1hJyxuZXc6J3NwLW4nLHJldmlldzonc3AtcicscGF1c2VkOidzcC1kJyxkb25lOidzcC1kJ307CnZhciBTUEw9e2FjdGl2ZTon0JIg0L/RgNC+0YbQtdGBJyxuZXc6J9Cd0L7QsicscmV2aWV3OifQoNC10LLQuNC30LjRjycscGF1c2VkOifQn9Cw0YPQt9CwJyxkb25lOifQl9Cw0LLRitGA0YjQtdC9J307CgpmdW5jdGlvbiBwUm93KHApewogIHZhciB0YWdzPShwLnRhZ3N8fFtdKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICc8c3BhbiBjbGFzcz0idGFnICcrKFRNW3RdfHwnd2ViJykrJyI+Jyt0Kyc8L3NwYW4+Jzt9KS5qb2luKCcnKTsKICB2YXIgdG90PU51bWJlcihwLnRvdGFsfHwwKSxyZWM9TnVtYmVyKHAucmVjZWl2ZWR8fDApOwogIHZhciBydj1wLnJlY3VycmluZz9mbXQodG90KSsnLycrcC5yZWN1cnJpbmc6Zm10KHRvdCk7CiAgdmFyIHJsPXJlYz49dG90JiZ0b3Q+MD8nPGRpdiBjbGFzcz0iYXIiPtCf0LvQsNGC0LXQvdC+IOKckzwvZGl2Pic6cmVjPjA/JzxkaXYgY2xhc3M9ImFyIj4nK2ZtdChyZWMpKycg0L/Qu9Cw0YLQtdC90L48L2Rpdj4nOic8ZGl2IGNsYXNzPSJhcCI+4oKsIDAsMDAg0L/Qu9Cw0YLQtdC90L48L2Rpdj4nOwogIHZhciBkbD1wLmRlYWRsaW5lP25ldyBEYXRlKHAuZGVhZGxpbmUpOm51bGw7CiAgdmFyIGR5PWRsP01hdGguY2VpbCgoZGwtbmV3IERhdGUoKSkvODY0MDAwMDApOm51bGw7CiAgdmFyIHVnPWR5IT09bnVsbCYmZHk8PTc7CiAgdmFyIHByPXAucHJvZ3Jlc3N8fDA7CiAgdmFyIGJjPXByPj0xMDA/J3ZhcigtLWdybiknOnByPj02MD8ndmFyKC0tYWNjKSc6cHI+PTMwPyd2YXIoLS1hbWIpJzondmFyKC0tYmx1KSc7CiAgcmV0dXJuICc8ZGl2IGNsYXNzPSJwciIgb25jbGljaz0ibW9kYWwoXCdlZGl0UHJvamVjdFwnLFwnJytwLmlkKydcJykiPicKICAgICsnPGRpdj48ZGl2IGNsYXNzPSJwbiI+JytwLm5hbWUrJzwvZGl2PjxkaXYgY2xhc3M9InBtIj4nKyhwLmNsaWVudHx8J+KAlCcpKyhwLnBob25lPycgwrcgJytwLnBob25lOicnKSsnPC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJwdGFncyI+Jyt0YWdzKyc8L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9InBiIj48ZGl2IGNsYXNzPSJwYmYiIHN0eWxlPSJ3aWR0aDonK3ByKyclO2JhY2tncm91bmQ6JytiYysnIj48L2Rpdj48L2Rpdj48L2Rpdj4nCiAgICArJzxzcGFuIGNsYXNzPSJzcCAnKyhTUENbcC5zdGF0dXNdfHwnc3AtbicpKyciPicrKFNQTFtwLnN0YXR1c118fCfQndC+0LInKSsnPC9zcGFuPicKICAgICsnPGRpdiBjbGFzcz0iYW10Ij48ZGl2IGNsYXNzPSJhdCI+JytydisnPC9kaXY+JytybCsnPC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJkbGMiPjxkaXYgY2xhc3M9ImRsZCcrKHVnPycgdSc6JycpKyciPicrKCBkbD9kbC50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7ZGF5OidudW1lcmljJyxtb250aDonc2hvcnQnfSk6J+KAlCcpKyc8L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9ImRsbicrKHVnPycgdSc6JycpKyciPicrKCBkeT09PW51bGw/J+KAlCc6ZHk8PTA/J9CY0LfRgtC10LrRitC7JzpkeSsnINC00L3QuCcpKyc8L2Rpdj48L2Rpdj4nCiAgICArJzwvZGl2Pic7Cn0KCmZ1bmN0aW9uIGVtcChpYyx0aSxzdSxibCxiZil7CiAgcmV0dXJuICc8ZGl2IGNsYXNzPSJlbXAiPjxkaXYgY2xhc3M9ImVpIj4nK2ljKyc8L2Rpdj48ZGl2IGNsYXNzPSJldCI+Jyt0aSsnPC9kaXY+PGRpdiBjbGFzcz0iZXMiPicrc3UrJzwvZGl2PicrKGJsPyc8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0iJytiZisnIj4nK2JsKyc8L2J1dHRvbj4nOicnKSsnPC9kaXY+JzsKfQoKZnVuY3Rpb24gdEhUTUwodCl7CiAgcmV0dXJuICc8ZGl2IGNsYXNzPSJ0aSIgb25jbGljaz0idG9nVGFzayhcJycrdC5pZCsnXCcpIj4nCiAgICArJzxkaXYgY2xhc3M9InRjaycrKHQuZG9uZT09MT8nIGRvbmUnOicnKSsnIj4nKyggdC5kb25lPT0xPyfinJMnOicnKSsnPC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJ0dHgnKyh0LmRvbmU9PTE/JyBkb25lJzonJykrJyI+Jyt0LnRleHQrKHQudXJnZW50PT0xJiZ0LmRvbmUhPTE/JzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS1yZWQpO21hcmdpbi1sZWZ0OjRweCI+4pqgPC9zcGFuPic6JycpKyc8L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9InRhc3MiPicrKHQuYXNzaWduZWV8fCfigJQnKSsnPC9kaXY+JwogICAgKyc8L2Rpdj4nOwp9CgovLyDilIDilIAgREFTSEJPQVJEIOKUgOKUgApmdW5jdGlvbiByRGFzaCgpewogIHZhciBhYz1ELnByb2plY3RzLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gcC5zdGF0dXMhPT0nZG9uZSc7fSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RwJykuaW5uZXJIVE1MPWFjLmxlbmd0aD9hYy5zbGljZSgwLDQpLm1hcChwUm93KS5qb2luKCcnKTplbXAoJ+KXiCcsJ9Cd0Y/QvNCw0YLQtSDQv9GA0L7QtdC60YLQuCcsJycsJysg0J3QvtCyINC/0YDQvtC10LrRgicsIm1vZGFsKCdwcm9qZWN0JykiKTsKICB2YXIgdXA9RC5wcm9qZWN0cy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAuZGVhZGxpbmUmJnAuc3RhdHVzIT09J2RvbmUnO30pLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IERhdGUoYS5kZWFkbGluZSktbmV3IERhdGUoYi5kZWFkbGluZSk7fSkuc2xpY2UoMCw1KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGQnKS5pbm5lckhUTUw9dXAubGVuZ3RoP3VwLm1hcChmdW5jdGlvbihwKXsKICAgIHZhciBkeT1NYXRoLmNlaWwoKG5ldyBEYXRlKHAuZGVhZGxpbmUpLW5ldyBEYXRlKCkpLzg2NDAwMDAwKTsKICAgIHZhciBjbD1keTw9Mz8ndSc6ZHk8PTEwPydzJzonbyc7CiAgICB2YXIgY3I9ZHk8PTM/J3ZhcigtLXJlZCknOmR5PD0xMD8ndmFyKC0tYW1iKSc6J3ZhcigtLWdybiknOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJkbGkiPjxkaXYgY2xhc3M9ImRsZDIiIHN0eWxlPSJiYWNrZ3JvdW5kOicrY3IrJyI+PC9kaXY+PGRpdiBjbGFzcz0iZGxpbiI+PGRpdiBjbGFzcz0iZGxubSI+JytwLm5hbWUrJzwvZGl2PjxkaXYgY2xhc3M9ImRsbXQiPicrKHAuY2xpZW50fHwnJykrJzwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImRsYmRnICcrY2wrJyI+JysoZHk8PTA/J9CY0LfRgtC10LrRitC7JzpkeSsnINC00L3QuCcpKyc8L2Rpdj48L2Rpdj4nOwogIH0pLmpvaW4oJycpOic8ZGl2IHN0eWxlPSJwYWRkaW5nOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tdHgzKTtmb250LXNpemU6MTJweCI+0J3Rj9C80LAg0L/RgNC10LTRgdGC0L7Rj9GJ0Lgg0YHRgNC+0LrQvtCy0LU8L2Rpdj4nOwogIHZhciB0b3Q9YWMucmVkdWNlKGZ1bmN0aW9uKHMscCl7cmV0dXJuIHMrTnVtYmVyKHAudG90YWx8fDApO30sMCk7CiAgdmFyIHJlYz1hYy5yZWR1Y2UoZnVuY3Rpb24ocyxwKXtyZXR1cm4gcytOdW1iZXIocC5yZWNlaXZlZHx8MCk7fSwwKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGYnKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImZyIj48c3BhbiBjbGFzcz0iZmwiPtCe0YTQtdGA0LjRgNCw0L3Qvjwvc3Bhbj48c3BhbiBjbGFzcz0iZnYiPicrZm10KHRvdCkrJzwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJmciI+PHNwYW4gY2xhc3M9ImZsIj7Qn9C+0LvRg9GH0LXQvdC+PC9zcGFuPjxzcGFuIGNsYXNzPSJmdiBnIj4nK2ZtdChyZWMpKyc8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iZnIiPjxzcGFuIGNsYXNzPSJmbCI+0J7Rh9Cw0LrQstCwINGB0LU8L3NwYW4+PHNwYW4gY2xhc3M9ImZ2IGEiPicrZm10KHRvdC1yZWMpKyc8L3NwYW4+PC9kaXY+JzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHQnKS5pbm5lckhUTUw9RC50YXNrcy5sZW5ndGg/RC50YXNrcy5zbGljZSgwLDYpLm1hcCh0SFRNTCkuam9pbignJyk6JzxkaXYgc3R5bGU9InBhZGRpbmc6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxMnB4Ij7QndGP0LzQsCDQt9Cw0LTQsNGH0Lg8L2Rpdj4nOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkbicpLmlubmVySFRNTD1ELm5vdGVzLmxlbmd0aD9ELm5vdGVzLnNsaWNlKDAsMykubWFwKGZ1bmN0aW9uKG4pe3JldHVybiAnPGRpdiBjbGFzcz0ibmkyIj48ZGl2IGNsYXNzPSJudCI+JytuLnRpdGxlKyc8L2Rpdj48ZGl2IGNsYXNzPSJucCI+Jysobi5ib2R5fHwnJykrJzwvZGl2PjxkaXYgY2xhc3M9Im5mIj48c3Bhbj4nKyhuLmF1dGhvcnx8JycpKyc8L3NwYW4+Jysobi5hdXRob3I/JzxzcGFuPsK3PC9zcGFuPic6JycpKyc8c3Bhbj4nK2ZkdChuLmNyZWF0ZWRfYXQpKyc8L3NwYW4+PC9kaXY+PC9kaXY+Jzt9KS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINCx0LXQu9C10LbQutC4PC9kaXY+JzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGEnKS5pbm5lckhUTUw9RC5hY3Rpdml0eS5sZW5ndGg/RC5hY3Rpdml0eS5zbGljZSgwLDYpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gJzxkaXYgY2xhc3M9ImFpIj48ZGl2IGNsYXNzPSJhYXYgJysoYS5jb2xvcnx8J2F2LXAnKSsnIj4nKyhhLmluaXRpYWxzfHwnPycpKyc8L2Rpdj48ZGl2PjxkaXYgY2xhc3M9ImF0eCI+PHN0cm9uZz4nK2Eud2hvKyc8L3N0cm9uZz4gJythLndoYXQrJzwvZGl2PjxkaXYgY2xhc3M9ImF0bSI+JytmZHQoYS5jcmVhdGVkX2F0KSsnPC9kaXY+PC9kaXY+PC9kaXY+Jzt9KS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINCw0LrRgtC40LLQvdC+0YHRgjwvZGl2Pic7Cn0KCmZ1bmN0aW9uIHJUZWFtKCl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RsaXN0JykuaW5uZXJIVE1MPUQudXNlcnMubWFwKGZ1bmN0aW9uKHUpewogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJ0cm93Ij48ZGl2IGNsYXNzPSJhdiAnKyh1LmNvbG9yfHwnYXYtcCcpKyciPicrKHUuaW5pdGlhbHN8fCc/JykrJzwvZGl2PjxkaXYgc3R5bGU9ImZsZXg6MSI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KSI+Jyt1Lm5hbWUrJzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOnZhcigtLXR4MykiPicrKHUucm9sZXx8JycpKyc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogIH0pLmpvaW4oJycpOwp9CgpmdW5jdGlvbiByUHJqKHEpewogIHZhciBsaXN0PUQucHJvamVjdHM7CiAgaWYocSlsaXN0PWxpc3QuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxLnRvTG93ZXJDYXNlKCkpfHwocC5jbGllbnR8fCcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEudG9Mb3dlckNhc2UoKSk7fSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZwJykuaW5uZXJIVE1MPWxpc3QubGVuZ3RoP2xpc3QubWFwKHBSb3cpLmpvaW4oJycpOmVtcCgn4peIJywn0J3Rj9C80LDRgtC1INC/0YDQvtC10LrRgtC4JywnJywnKyDQndC+0LIg0L/RgNC+0LXQutGCJywibW9kYWwoJ3Byb2plY3QnKSIpOwp9CmZ1bmN0aW9uIGZwKHEpe3JQcmoocSk7fQoKZnVuY3Rpb24gckNsaSgpewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcycpLnRleHRDb250ZW50PUQuY2xpZW50cy5sZW5ndGgrJyDQutC70LjQtdC90YInKyhELmNsaWVudHMubGVuZ3RoPT09MT8nJzon0LAnKTsKICBpZighRC5jbGllbnRzLmxlbmd0aCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NnJykuaW5uZXJIVE1MPWVtcCgn4peOJywn0J3Rj9C80LDRgtC1INC60LvQuNC10L3RgtC4JywnJywnKyDQndC+0LIg0LrQu9C40LXQvdGCJywibW9kYWwoJ2NsaWVudCcpIik7cmV0dXJuO30KICB2YXIgY2xzPVsnYXYtcCcsJ2F2LXQnLCdhdi1nJywnYXYtYSddOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZycpLmlubmVySFRNTD1ELmNsaWVudHMubWFwKGZ1bmN0aW9uKGMsaSl7CiAgICB2YXIgcGpzPUQucHJvamVjdHMuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwLmNsaWVudD09PWMubmFtZTt9KS5sZW5ndGg7CiAgICB2YXIgdG90PUQucHJvamVjdHMuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwLmNsaWVudD09PWMubmFtZTt9KS5yZWR1Y2UoZnVuY3Rpb24ocyxwKXtyZXR1cm4gcytOdW1iZXIocC50b3RhbHx8MCk7fSwwKTsKICAgIHZhciBjb2w9Y2xzW2klNF07CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImNjIj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206MTJweCI+PGRpdiBjbGFzcz0iYXYgJytjb2wrJyIgc3R5bGU9IndpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Zm9udC1zaXplOjEycHgiPicrKGMubmFtZXx8Jz8nKS5zbGljZSgwLDIpLnRvVXBwZXJDYXNlKCkrJzwvZGl2PjxkaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KSI+JytjLm5hbWUrJzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MykiPicrKGMuY29tcGFueXx8JycpKyc8L2Rpdj48L2Rpdj48L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMHB4Ij48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtmbGV4OjEiPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjYwMDtmb250LWZhbWlseTp2YXIoLS1tbyk7Y29sb3I6dmFyKC0tdHgpIj4nK3BqcysnPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKSI+0J/RgNC+0LXQutGC0LA8L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtmbGV4OjEiPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjYwMDtmb250LWZhbWlseTp2YXIoLS1tbyk7Y29sb3I6dmFyKC0tZ3JuKSI+JytmbXQodG90KSsnPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKSI+0J7QsdGJ0L48L2Rpdj48L2Rpdj48L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMXB4O3BhZGRpbmctdG9wOjExcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tYnJkKSI+JysoYy5lbWFpbD8nPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjJweCI+8J+TpyA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tdHgyKSI+JytjLmVtYWlsKyc8L3NwYW4+PC9kaXY+JzonJykrKGMucGhvbmU/JzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MykiPvCfk54gPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLXR4MikiPicrYy5waG9uZSsnPC9zcGFuPjwvZGl2Pic6JycpKyc8L2Rpdj48L2Rpdj4nOwogIH0pLmpvaW4oJycpOwp9CgpmdW5jdGlvbiByRmluKCl7CiAgdmFyIHRvdD1ELnByb2plY3RzLnJlZHVjZShmdW5jdGlvbihzLHApe3JldHVybiBzK051bWJlcihwLnRvdGFsfHwwKTt9LDApOwogIHZhciByZWM9RC5wcm9qZWN0cy5yZWR1Y2UoZnVuY3Rpb24ocyxwKXtyZXR1cm4gcytOdW1iZXIocC5yZWNlaXZlZHx8MCk7fSwwKTsKICB2YXIgbW9uPUQucHJvamVjdHMuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwLnJlY3VycmluZzt9KS5yZWR1Y2UoZnVuY3Rpb24ocyxwKXtyZXR1cm4gcytOdW1iZXIocC50b3RhbHx8MCk7fSwwKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnQnKS50ZXh0Q29udGVudD1mbXQodG90KTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnInKS50ZXh0Q29udGVudD1mbXQocmVjKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnBuJykudGV4dENvbnRlbnQ9Zm10KHRvdC1yZWMpO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmcycpLnRleHRDb250ZW50PWZtdChtb24pOwogIHZhciB1bj1ELnByb2plY3RzLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gTnVtYmVyKHAucmVjZWl2ZWR8fDApPE51bWJlcihwLnRvdGFsfHwwKSYmcC5zdGF0dXMhPT0nZG9uZSc7fSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Z1JykuaW5uZXJIVE1MPXVuLmxlbmd0aD91bi5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuICc8ZGl2IGNsYXNzPSJmciI+PHNwYW4gY2xhc3M9ImZsIj4nK3AubmFtZSsnPC9zcGFuPjxzcGFuIGNsYXNzPSJmdiBhIj4nK2ZtdChOdW1iZXIocC50b3RhbHx8MCktTnVtYmVyKHAucmVjZWl2ZWR8fDApKSsnPC9zcGFuPjwvZGl2Pic7fSkuam9pbignJyk6ZW1wKCfil4cnLCfQktGB0LjRh9C60L4g0L/Qu9Cw0YLQtdC90L4nLCcnLCcnLCcnKTsKICB2YXIgc2I9RC5wcm9qZWN0cy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAucmVjdXJyaW5nO30pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmc2wnKS5pbm5lckhUTUw9c2IubGVuZ3RoP3NiLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gJzxkaXYgY2xhc3M9ImZyIj48c3BhbiBjbGFzcz0iZmwiPicrcC5uYW1lKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImZ2IGciPicrZm10KHAudG90YWwpKycvJytwLnJlY3VycmluZysnPC9zcGFuPjwvZGl2Pic7fSkuam9pbignJyk6ZW1wKCfil4cnLCfQndGP0LzQsNGC0LUg0LDQsdC+0L3QsNC80LXQvdGC0LgnLCcnLCcnLCcnKTsKfQoKZnVuY3Rpb24gclRhc2tzKCl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25iLXQnKS50ZXh0Q29udGVudD1ELnRhc2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lPT0wO30pLmxlbmd0aDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGYnKS5pbm5lckhUTUw9RC50YXNrcy5sZW5ndGg/RC50YXNrcy5tYXAodEhUTUwpLmpvaW4oJycpOmVtcCgn4pa3Jywn0J3Rj9C80LDRgtC1INC30LDQtNCw0YfQuCcsJycsJysg0JfQsNC00LDRh9CwJywibW9kYWwoJ3Rhc2snKSIpOwp9Cgphc3luYyBmdW5jdGlvbiB0b2dUYXNrKGlkKXsKICB2YXIgdD1ELnRhc2tzLmZpbmQoZnVuY3Rpb24oeCl7cmV0dXJuIHguaWQ9PT1pZDt9KTtpZighdClyZXR1cm47CiAgdC5kb25lPXQuZG9uZT09MT8wOjE7CiAgYXdhaXQgYWYoJ3Rhc2tzJywnUE9TVCcse2lkOnQuaWQsdGV4dDp0LnRleHQsYXNzaWduZWU6dC5hc3NpZ25lZSx1cmdlbnQ6dC51cmdlbnQsZG9uZTp0LmRvbmUsZHVlX2RhdGU6dC5kdWVfZGF0ZXx8bnVsbH0pOwogIHJUYXNrcygpO3JEYXNoKCk7dG9hc3QodC5kb25lPT0xPyfinJMg0JjQt9C/0YrQu9C90LXQvdCwJzon0JLRitGA0L3QsNGC0LAnLCdvaycpOwp9CgpmdW5jdGlvbiByT2ZmZXJzKCl7CiAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvZicpOwogIGlmKCFELm9mZmVycy5sZW5ndGgpe2VsLmlubmVySFRNTD1lbXAoJ+KXuycsJ9Cd0Y/QvNCw0YLQtSDQvtGE0LXRgNGC0LgnLCcnLCfiipUg0J3QvtCy0LAg0L7RhNC10YDRgtCwJywid2luZG93Lm9wZW4oJ29mZmVyLmh0bWw/dHlwZT1vbmVfdGltZScsJ19ibGFuaycpIik7cmV0dXJuO30KICB2YXIgcT0oT0YucXx8JycpLnRvTG93ZXJDYXNlKCk7CiAgdmFyIHJvd3M9RC5vZmZlcnMuZmlsdGVyKGZ1bmN0aW9uKG8pewogICAgdmFyIGhheT1bby5udW0sby5jbGllbnQsby5zZXJ2aWNlLG8uc3RhdHVzLG8ub2ZmZXJfdHlwZV0uam9pbignICcpLnRvTG93ZXJDYXNlKCk7CiAgICByZXR1cm4gKCFxfHxoYXkuaW5kZXhPZihxKT4tMSkmJighT0Yuc3RhdHVzfHxvLnN0YXR1cz09PU9GLnN0YXR1cyk7CiAgfSk7CiAgaWYoIXJvd3MubGVuZ3RoKXtlbC5pbm5lckhUTUw9ZW1wKCfil7snLCfQndGP0LzQsCDQvdCw0LzQtdGA0LXQvdC4INC+0YTQtdGA0YLQuCcsJ9Cf0YDQvtC80LXQvdC4INGC0YrRgNGB0LXQvdC10YLQviDQuNC70Lgg0YTQuNC70YLRitGA0LAuJywnJywnJyk7cmV0dXJuO30KICB2YXIgYWNjZXB0ZWQ9cm93cy5maWx0ZXIoZnVuY3Rpb24obyl7cmV0dXJuIG8uc3RhdHVzPT09J9Cf0YDQuNC10YLQsCc7fSkubGVuZ3RoOwogIHZhciB0b3RhbD1yb3dzLnJlZHVjZShmdW5jdGlvbihzLG8pe3JldHVybiBzK051bWJlcihvLnRvdGFsfHwwKTt9LDApOwogIGVsLmlubmVySFRNTD0nPGRpdiBzdHlsZT0icGFkZGluZzoxMnB4IDE3cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7ZmxleC13cmFwOndyYXA7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgyKSI+PHNwYW4+Jytyb3dzLmxlbmd0aCsnINC+0YTQtdGA0YLQuDwvc3Bhbj48c3Bhbj7Ctzwvc3Bhbj48c3Bhbj4nK2FjY2VwdGVkKycg0L/RgNC40LXRgtC4PC9zcGFuPjxzcGFuPsK3PC9zcGFuPjxzcGFuPicrZm10KHRvdGFsKSsnPC9zcGFuPjwvZGl2Pjx0YWJsZSBjbGFzcz0ib3QiPjx0aGVhZD48dHI+PHRoPiM8L3RoPjx0aD7QmtC70LjQtdC90YI8L3RoPjx0aD7QotC40L88L3RoPjx0aD7Qo9GB0LvRg9Cz0LA8L3RoPjx0aD7QodGD0LzQsDwvdGg+PHRoPtCU0LDRgtCwPC90aD48dGg+0KHRgtCw0YLRg9GBPC90aD48dGg+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5PicKICAgICtyb3dzLm1hcChmdW5jdGlvbihvKXt2YXIgdHA9by5vZmZlcl90eXBlPT09J21vbnRobHknPyfQnNC10YHQtdGH0L3QsCc6J9CV0LTQvdC+0LrRgNCw0YLQvdCwJztyZXR1cm4gJzx0cj48dGQgc3R5bGU9ImZvbnQtZmFtaWx5OnZhcigtLW1vKTtjb2xvcjp2YXIoLS10eDMpIj4nK2VzYyhvLm51bSkrJzwvdGQ+PHRkIHN0eWxlPSJjb2xvcjp2YXIoLS10eCk7Zm9udC13ZWlnaHQ6NTAwIj4nK2VzYyhvLmNsaWVudCkrJzwvdGQ+PHRkPjxzcGFuIGNsYXNzPSJzcCBzcC1uIj4nK3RwKyc8L3NwYW4+PC90ZD48dGQ+Jytlc2Moby5zZXJ2aWNlKSsnPC90ZD48dGQgc3R5bGU9ImZvbnQtZmFtaWx5OnZhcigtLW1vKTtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpIj4nK2ZtdChvLnRvdGFsKSsnPC90ZD48dGQ+JytmZChvLmNyZWF0ZWRfYXQpKyc8L3RkPjx0ZD48c3BhbiBjbGFzcz0ic3AgJysoby5zdGF0dXM9PT0n0J/RgNC40LXRgtCwJz8nc3AtYSc6by5zdGF0dXM9PT0n0J7RgtC60LDQt9Cw0L3QsCc/J3NwLWQnOidzcC1yJykrJyI+Jytlc2Moby5zdGF0dXMpKyc8L3NwYW4+PC90ZD48dGQ+PGJ1dHRvbiBjbGFzcz0ib2J0biIgb25jbGljaz0id2luZG93Lm9wZW4oXCdvZmZlci5odG1sP2lkPScrby5pZCsnXCcsXCdfYmxhbmtcJykiPtCg0LXQtNCw0LrRgtC40YDQsNC5PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0ib2J0biIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiIG9uY2xpY2s9ImRyKFwnb2ZmZXJzXCcsXCcnK28uaWQrJ1wnKSI+4pyVPC9idXR0b24+PC90ZD48L3RyPic7fSkuam9pbignJykKICAgICsnPC90Ym9keT48L3RhYmxlPic7Cn0KCmZ1bmN0aW9uIHJDb250cmFjdHMoKXsKICB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NmJyk7CiAgZWwuaW5uZXJIVE1MPUQuY29udHJhY3RzLmxlbmd0aD9ELmNvbnRyYWN0cy5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuICc8ZGl2IGNsYXNzPSJwciIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0byBhdXRvIj48ZGl2PjxkaXYgY2xhc3M9InBuIj4nKyhjLm5hbWV8fCfigJQnKSsnPC9kaXY+PGRpdiBjbGFzcz0icG0iPicrYy5jbGllbnQrJyDCtyAnK2ZkKGMuc2lnbl9kYXRlKSsnPC9kaXY+PC9kaXY+PHNwYW4gY2xhc3M9InNwIHNwLWEiPtCQ0LrRgtC40LLQtdC9PC9zcGFuPjxidXR0b24gY2xhc3M9Im9idG4iIHN0eWxlPSJjb2xvcjp2YXIoLS1yZWQpIiBvbmNsaWNrPSJkcihcJ2NvbnRyYWN0c1wnLFwnJytjLmlkKydcJykiPuKclTwvYnV0dG9uPjwvZGl2Pic7fSkuam9pbignJyk6ZW1wKCfil4gnLCfQndGP0LzQsNGC0LUg0LTQvtCz0L7QstC+0YDQuCcsJycsJysg0J3QvtCyINC00L7Qs9C+0LLQvtGAJywibW9kYWwoJ2NvbnRyYWN0JykiKTsKfQoKZnVuY3Rpb24gckhvc3RpbmcoKXsKICB2YXIgd2M9RC5ob3N0aW5nLmZpbHRlcihmdW5jdGlvbihoKXt2YXIgZD1oLnNzbF9leHBpcmVzP01hdGguY2VpbCgobmV3IERhdGUoaC5zc2xfZXhwaXJlcyktbmV3IERhdGUoKSkvODY0MDAwMDApOm51bGw7cmV0dXJuIGQhPT1udWxsJiZkPDMwO30pLmxlbmd0aDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaHMnKS50ZXh0Q29udGVudD1ELmhvc3RpbmcubGVuZ3RoKycg0YXQvtGB0YLQuNC90LPQsCc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25iLWgnKS50ZXh0Q29udGVudD13Y3x8MDsKICBpZighRC5ob3N0aW5nLmxlbmd0aCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hnJykuaW5uZXJIVE1MPWVtcCgn4qyhJywn0J3Rj9C80LDRgtC1INGF0L7RgdGC0LjQvdCz0LgnLCcnLCcrINCd0L7QsiDRhdC+0YHRgtC40L3QsycsIm1vZGFsKCdob3N0aW5nJykiKTtyZXR1cm47fQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZycpLmlubmVySFRNTD1ELmhvc3RpbmcubWFwKGZ1bmN0aW9uKGgpewogICAgdmFyIGQ9aC5zc2xfZXhwaXJlcz9NYXRoLmNlaWwoKG5ldyBEYXRlKGguc3NsX2V4cGlyZXMpLW5ldyBEYXRlKCkpLzg2NDAwMDAwKTpudWxsOwogICAgdmFyIHNjPWQ9PT1udWxsPycnOmQ8MzA/J3NzbC1iYWQnOmQ8NjA/J3NzbC13YXJuJzonc3NsLW9rJzsKICAgIHZhciBzaT1kPT09bnVsbD8n4oCUJzpkPDMwPyfimqAnOmQ8NjA/J+KaoSc6J+Kckyc7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImhjYXJkJysoZCE9PW51bGwmJmQ8MzA/JyB3YXJuJzonJykrJyI+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luLWJvdHRvbTo4cHgiPjxkaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KSI+JytoLmRvbWFpbisnPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjFweCI+JysoaC5jbGllbnR8fCfigJQnKSsnIMK3ICcrKGgudHlwZXx8J2NQYW5lbCcpKyc8L2Rpdj48L2Rpdj48c3BhbiBjbGFzcz0ic3Agc3AtYSI+JysoaC5wbGFufHwn4oCUJykrJzwvc3Bhbj48L2Rpdj4nKyhoLnNlcnZlcj8nPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjdweCI+JytoLnNlcnZlcisnPC9kaXY+JzonJykKICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjdweCI+PGRpdiBjbGFzcz0iaHN0Ij48ZGl2IGNsYXNzPSJoc2wiPtCU0LjRgdC6PC9kaXY+PGRpdiBjbGFzcz0iaHN2Ij4nKyhoLmRpc2t8fCfigJQnKSsnPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iaHN0Ij48ZGl2IGNsYXNzPSJoc2wiPlNTTDwvZGl2PjxkaXYgY2xhc3M9ImhzdiAnK3NjKyciPicrc2krJyAnKyhoLnNzbF9leHBpcmVzP2ZkKGguc3NsX2V4cGlyZXMpOifigJQnKSsnPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iaHN0Ij48ZGl2IGNsYXNzPSJoc2wiPtCU0L3QuDwvZGl2PjxkaXYgY2xhc3M9ImhzdiAnK3NjKyciPicrKGQhPT1udWxsP2QrJyDQtNC90LgnOifigJQnKSsnPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iaHN0Ij48ZGl2IGNsYXNzPSJoc2wiPtCi0LjQvzwvZGl2PjxkaXYgY2xhc3M9ImhzdiI+JysoaC50eXBlfHwn4oCUJykrJzwvZGl2PjwvZGl2PjwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7dGV4dC1hbGlnbjpyaWdodCI+PGJ1dHRvbiBjbGFzcz0ib2J0biIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiIG9uY2xpY2s9ImRyKFwnaG9zdGluZ1wnLFwnJytoLmlkKydcJykiPtCY0LfRgtGA0LjQuTwvYnV0dG9uPjwvZGl2PjwvZGl2Pic7CiAgfSkuam9pbignJyk7Cn0KCmZ1bmN0aW9uIHB3Tm9ybShzKXtyZXR1cm4gKHN8fCcnKS50cmltKCk7fQpmdW5jdGlvbiBwd0NsaWVudE5hbWUocCl7cmV0dXJuIHB3Tm9ybShwLmNsaWVudCl8fCfQkdC10Lcg0LrQu9C40LXQvdGCJzt9CmZ1bmN0aW9uIHB3Q2F0TGFiZWwoYyl7CiAgdmFyIG09e2hvc3Rpbmc6J9Cl0L7RgdGC0LjQvdCzJyx3b3JkcHJlc3M6J1dvcmRQcmVzcycsZ29vZ2xlOidHb29nbGUnLHNvY2lhbDon0KHQvtGG0LjQsNC70L3QuCDQvNGA0LXQttC4JyxkbnM6J0ROUycsZGVzaWduOifQlNC40LfQsNC50L0nLG90aGVyOifQlNGA0YPQs9C+J307CiAgcmV0dXJuIG1bY118fGN8fCfQlNGA0YPQs9C+JzsKfQpmdW5jdGlvbiBwd1NlbGVjdENsaWVudChuYW1lKXtQVy5jbGllbnQ9bmFtZTt2YXIgcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHdTZWFyY2gnKTtpZihzKXMudmFsdWU9Jyc7UFcuc2VhcmNoPScnO3JQYXNzd29yZHMoKTt9CmZ1bmN0aW9uIG9wZW5QYXNzTW9kYWwoY2xpZW50LGlkKXtQVy5mb3JtQ2xpZW50PWNsaWVudHx8UFcuY2xpZW50fHwnJztQVy5lZGl0SWQ9aWR8fCcnO21vZGFsKCdwYXNzd29yZCcpO30KZnVuY3Rpb24gcHdDbGllbnRzKCl7CiAgdmFyIG1hcD17fTsKICBELmNsaWVudHMuZm9yRWFjaChmdW5jdGlvbihjKXsKICAgIHZhciBuPXB3Tm9ybShjLmNvbXBhbnkpfHxwd05vcm0oYy5uYW1lKTsKICAgIGlmKCFuKXJldHVybjsKICAgIG1hcFtuXT1tYXBbbl18fHtuYW1lOm4sbWV0YTpbXSxjb3VudDowLGNhdHM6e319OwogICAgbWFwW25dLm1ldGE9W2MubmFtZSxjLmVtYWlsLGMucGhvbmVdLmZpbHRlcihCb29sZWFuKTsKICB9KTsKICBELnBhc3N3b3Jkcy5mb3JFYWNoKGZ1bmN0aW9uKHApewogICAgdmFyIG49cHdDbGllbnROYW1lKHApOwogICAgbWFwW25dPW1hcFtuXXx8e25hbWU6bixtZXRhOltdLGNvdW50OjAsY2F0czp7fX07CiAgICBtYXBbbl0uY291bnQrKzsKICAgIG1hcFtuXS5jYXRzW3AuY2F0ZWdvcnl8fCdvdGhlciddPShtYXBbbl0uY2F0c1twLmNhdGVnb3J5fHwnb3RoZXInXXx8MCkrMTsKICB9KTsKICByZXR1cm4gT2JqZWN0LmtleXMobWFwKS5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIG1hcFtrXTt9KS5zb3J0KGZ1bmN0aW9uKGEsYil7CiAgICBpZihhLm5hbWU9PT0n0JHQtdC3INC60LvQuNC10L3RgicpcmV0dXJuIDE7CiAgICBpZihiLm5hbWU9PT0n0JHQtdC3INC60LvQuNC10L3RgicpcmV0dXJuIC0xOwogICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSwnYmcnKTsKICB9KTsKfQpmdW5jdGlvbiByUGFzc3dvcmRzKCl7CiAgdmFyIGNtPXtob3N0aW5nOidob3N0aW5nJyxnb29nbGU6J3Nlbycsc29jaWFsOidzb2NpYWwnLGRuczonZGVzaWduJyx3b3JkcHJlc3M6J3dlYicsZGVzaWduOidkZXNpZ24nLG90aGVyOid3ZWInfTsKICB2YXIgYm94PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwd2wnKTsKICB2YXIgc2VhcmNoPShQVy5zZWFyY2h8fCcnKS50b0xvd2VyQ2FzZSgpOwogIGlmKCFQVy5jbGllbnQpewogICAgdmFyIGNsaWVudHM9cHdDbGllbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKGMpewogICAgICB2YXIgaGF5PShjLm5hbWUrJyAnKyhjLm1ldGF8fFtdKS5qb2luKCcgJykpLnRvTG93ZXJDYXNlKCk7CiAgICAgIHJldHVybiAhc2VhcmNofHxoYXkuaW5kZXhPZihzZWFyY2gpIT09LTE7CiAgICB9KTsKICAgIGlmKCFjbGllbnRzLmxlbmd0aCl7CiAgICAgIGJveC5pbm5lckhUTUw9ZW1wKCfil44nLCfQndGP0LzQsCDQvdCw0LzQtdGA0LXQvdC4INC60LvQuNC10L3RgtC4Jywn0J/RgNC+0LzQtdC90Lgg0YLRitGA0YHQtdC90LXRgtC+INC40LvQuCDQtNC+0LHQsNCy0Lgg0L3QvtCyINC00L7RgdGC0YrQvy4nLCcrINCU0L7QsdCw0LLQuCDQtNC+0YHRgtGK0L8nLCJvcGVuUGFzc01vZGFsKCkiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgYm94LmlubmVySFRNTD0nPGRpdiBjbGFzcz0icHdncmlkIj4nK2NsaWVudHMubWFwKGZ1bmN0aW9uKGMpewogICAgICB2YXIgY2F0cz1PYmplY3Qua2V5cyhjLmNhdHMpLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gJzxzcGFuIGNsYXNzPSJwd2NoaXAiPicrZXNjKHB3Q2F0TGFiZWwoaykpKyc6ICcrYy5jYXRzW2tdKyc8L3NwYW4+Jzt9KS5qb2luKCcnKTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJwd2NsaWVudCIgb25jbGljaz0icHdTZWxlY3RDbGllbnQoJytqc0FyZyhjLm5hbWUpKycpIj48ZGl2IGNsYXNzPSJwd2NuIj4nK2VzYyhjLm5hbWUpKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwd2NtIj4nKyhjLm1ldGEmJmMubWV0YS5sZW5ndGg/ZXNjKGMubWV0YS5qb2luKCcgwrcgJykpOifQlNC+0YHRgtGK0L/QuCDQsdC10Lcg0LjQt9Cx0YDQsNC9INC60LvQuNC10L3RgicpKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwd2NzdGF0Ij48c3BhbiBjbGFzcz0icHdjaGlwIj4nK2MuY291bnQrJyDQtNC+0YHRgtGK0L8nKyhjLmNvdW50PT09MT8nJzon0LAnKSsnPC9zcGFuPicrY2F0cysnPC9kaXY+PC9kaXY+JzsKICAgIH0pLmpvaW4oJycpKyc8L2Rpdj4nOwogICAgcmV0dXJuOwogIH0KICB2YXIgbGlzdD1ELnBhc3N3b3Jkcy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHB3Q2xpZW50TmFtZShwKT09PVBXLmNsaWVudDt9KTsKICBib3guaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJwd2hlYWQiPjxkaXY+PGRpdiBjbGFzcz0icHd0aXRsZSI+Jytlc2MoUFcuY2xpZW50KSsnPC9kaXY+PGRpdiBjbGFzcz0icHdzdWIiPicrbGlzdC5sZW5ndGgrJyDQt9Cw0L/QsNC30LXQvdC4INC00L7RgdGC0YrQv9CwPC9kaXY+PC9kaXY+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHgiPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iUFcuY2xpZW50PVwnXCc7clBhc3N3b3JkcygpIj7ihpAg0JrQu9C40LXQvdGC0Lg8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ib3BlblBhc3NNb2RhbChQVy5jbGllbnQpIj4rINCU0L7QsdCw0LLQuDwvYnV0dG9uPjwvZGl2PjwvZGl2PicrCiAgICAobGlzdC5sZW5ndGg/bGlzdC5tYXAoZnVuY3Rpb24ocCl7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icHdyIj48ZGl2IHN0eWxlPSJmbGV4OjEiPjxkaXYgY2xhc3M9InB3cyI+Jytlc2MocC5zaXRlKSsnPC9kaXY+PGRpdiBjbGFzcz0icHd1Ij4nK2VzYyhwLnVzZXJuYW1lfHwnJykrJzwvZGl2PjwvZGl2PjxzcGFuIGNsYXNzPSJ0YWcgJysoY21bcC5jYXRlZ29yeV18fCd3ZWInKSsnIj4nK2VzYyhwd0NhdExhYmVsKHAuY2F0ZWdvcnkpKSsnPC9zcGFuPjxkaXYgY2xhc3M9InB3bSIgb25jbGljaz0icmV2UCh0aGlzLCcranNBcmcocC5wYXNzfHwnJykrJykiIHRpdGxlPSLQmtC70LjQutC90LgiPuKAouKAouKAouKAouKAouKAouKAouKAojwvZGl2PjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY3BUeCgnK2pzQXJnKHAucGFzc3x8JycpKycpIj7QmtC+0L/QuNGA0LDQuTwvYnV0dG9uPjxidXR0b24gY2xhc3M9Im9idG4iIG9uY2xpY2s9Im9wZW5QYXNzTW9kYWwoUFcuY2xpZW50LCcranNBcmcocC5pZCkrJykiPtCg0LXQtNCw0LrRgtC40YDQsNC5PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0ib2J0biIgc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiIG9uY2xpY2s9ImRyKFwncGFzc3dvcmRzXCcsJytqc0FyZyhwLmlkKSsnKSI+4pyVPC9idXR0b24+PC9kaXY+JzsKICAgIH0pLmpvaW4oJycpOmVtcCgn4peOJywn0J3Rj9C80LAg0LTQvtGB0YLRitC/0Lgg0LfQsCDRgtC+0LfQuCDQutC70LjQtdC90YInLCcnLCcrINCU0L7QsdCw0LLQuCDQtNC+0YHRgtGK0L8nLCJvcGVuUGFzc01vZGFsKFBXLmNsaWVudCkiKSk7Cn0KZnVuY3Rpb24gcmV2UChlbCxwKXtlbC5kYXRhc2V0LnM9PT0nMSc/KGVsLnRleHRDb250ZW50PSfigKLigKLigKLigKLigKLigKLigKLigKInLGVsLmRhdGFzZXQucz0nJyk6KGVsLnRleHRDb250ZW50PXAsZWwuZGF0YXNldC5zPScxJyk7fQpmdW5jdGlvbiBjcFR4KHQpe25hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHQpLnRoZW4oZnVuY3Rpb24oKXt0b2FzdCgn0JrQvtC/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+arCcsIGxhYmVsOifQndCwINGG0LjQs9Cw0YDQsCcsICAgICAgICBjb2xvcjonIzZiNzI4MCd9LAogIHNtb2tlX2JhY2s6e2Vtb2ppOifwn5KoJywgbGFiZWw6J9CS0YrRgNC90LAg0YHQtScsICAgICAgICAgY29sb3I6JyMzOGJkZjgnfQp9OwoKZnVuY3Rpb24gcHJlc2VuY2VNZXRhKHgpewogIGlmKCFDVXx8Q1UuaXNfYWRtaW4hPTF8fCF4KXJldHVybiAnJzsKICB2YXIgYml0cz1bXTsKICBpZih4LmlwX2FkZHJlc3MpYml0cy5wdXNoKCdJUDogJytlc2MoeC5pcF9hZGRyZXNzKSk7CiAgaWYoeC5sYXRpdHVkZSYmeC5sb25naXR1ZGUpewogICAgdmFyIGxhdD1OdW1iZXIoeC5sYXRpdHVkZSksbG5nPU51bWJlcih4LmxvbmdpdHVkZSk7CiAgICB2YXIgYWNjPXguYWNjdXJhY3k/JyDCtyDCsScrTWF0aC5yb3VuZChOdW1iZXIoeC5hY2N1cmFjeSkpKydtJzonJzsKICAgIGJpdHMucHVzaCgnPGEgaHJlZj0iaHR0cHM6Ly9tYXBzLmdvb2dsZS5jb20vP3E9JytsYXQrJywnK2xuZysnIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOnZhcigtLWFjYzIpIj7QmtCw0YDRgtCwPC9hPicrYWNjKTsKICB9ZWxzZSBpZih4LmxvY2F0aW9uX25vdGUpewogICAgYml0cy5wdXNoKGVzYyh4LmxvY2F0aW9uX25vdGUpKTsKICB9CiAgcmV0dXJuIGJpdHMubGVuZ3RoPyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6N3B4O2xpbmUtaGVpZ2h0OjEuNSI+JytiaXRzLmpvaW4oJzxicj4nKSsnPC9kaXY+JzonJzsKfQoKZnVuY3Rpb24gZ2V0UHJlc2VuY2VHZW8oKXsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSl7CiAgICBpZighbmF2aWdhdG9yLmdlb2xvY2F0aW9uKXtyZXNvbHZlKHtsb2NhdGlvbl9ub3RlOifQk9C10L7Qu9C+0LrQsNGG0LjRj9GC0LAg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAnfSk7cmV0dXJuO30KICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24ocG9zKXsKICAgICAgcmVzb2x2ZSh7CiAgICAgICAgbGF0aXR1ZGU6cG9zLmNvb3Jkcy5sYXRpdHVkZSwKICAgICAgICBsb25naXR1ZGU6cG9zLmNvb3Jkcy5sb25naXR1ZGUsCiAgICAgICAgYWNjdXJhY3k6cG9zLmNvb3Jkcy5hY2N1cmFjeSwKICAgICAgICBsb2NhdGlvbl9ub3RlOicnCiAgICAgIH0pOwogICAgfSxmdW5jdGlvbihlcnIpewogICAgICB2YXIgbXNnPWVyciYmZXJyLmNvZGU9PT0xPyfQm9C+0LrQsNGG0LjRj9GC0LAg0LUg0L7RgtC60LDQt9Cw0L3QsCc6J9Cb0L7QutCw0YbQuNGP0YLQsCDQvdC1INC1INC90LDQu9C40YfQvdCwJzsKICAgICAgcmVzb2x2ZSh7bG9jYXRpb25fbm90ZTptc2d9KTsKICAgIH0se2VuYWJsZUhpZ2hBY2N1cmFjeTp0cnVlLHRpbWVvdXQ6NjUwMCxtYXhpbXVtQWdlOjYwMDAwfSk7CiAgfSk7Cn0KCmFzeW5jIGZ1bmN0aW9uIHJQcmVzZW5jZSgpewogIHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJlZicpOwogIGVsLmlubmVySFRNTD0nPGRpdiBjbGFzcz0ibG9hZGluZyI+0JfQsNGA0LXQttC00LA8L2Rpdj4nOwogIHZhciBkYXRhPWF3YWl0IGFmKCdwcmVzZW5jZScpOwogIHZhciBjdXI9KGRhdGEmJmRhdGEuY3VycmVudCk/ZGF0YS5jdXJyZW50OltdOwogIHZhciBsb2c9KGRhdGEmJmRhdGEubG9nKT9kYXRhLmxvZzpbXTsKICB2YXIgbXlTPWN1ci5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiBTdHJpbmcoeC51c2VyX2lkKT09PVN0cmluZyhDVSYmQ1UuaWQpO30pOwogIHZhciBteVNJPW15Uz9QU0lbbXlTLnN0YXR1c106bnVsbDsKICB2YXIgbXlUbT1teVM/bmV3IERhdGUobXlTLmNyZWF0ZWRfYXQpLnRvTG9jYWxlVGltZVN0cmluZygnYmctQkcnLHtob3VyOicyLWRpZ2l0JyxtaW51dGU6JzItZGlnaXQnfSk6Jyc7CiAgdmFyIGJhZGdlPW15U0kKICAgID8nPGRpdiBzdHlsZT0iZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjhweCAyMHB4O2JvcmRlci1yYWRpdXM6MzBweDtiYWNrZ3JvdW5kOicrbXlTSS5jb2xvcisnMjI7Ym9yZGVyOjFweCBzb2xpZCAnK215U0kuY29sb3IrJzU1O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjonK215U0kuY29sb3IrJzttYXJnaW4tYm90dG9tOjIycHgiPicrbXlTSS5lbW9qaSsnICcrbXlTSS5sYWJlbCsnIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBweDtmb250LXdlaWdodDo0MDA7b3BhY2l0eTouNyI+0L7RgiAnK215VG0rJzwvc3Bhbj48L2Rpdj4nCiAgICA6JzxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzo4cHggMjBweDtib3JkZXItcmFkaXVzOjMwcHg7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCk7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjIycHgiPuKaqiDQndC1INC1INC+0YLQsdC10LvRj9C30LDQvdC+INC00L3QtdGBPC9kaXY+JzsKICB2YXIgTEJMPXthcnJpdmVkOifQn9GA0LjRgdGC0LjQs9C90LDRhScsYnJlYWs6J9Cf0L7Rh9C40LLQutCwJyxiYWNrOifQntCx0YDQsNGC0L3QvicsbGVmdDon0KLRgNGK0LPQstCw0LwnLHRvaWxldDon0KLQvtCw0LvQtdGC0L3QsCcsc21va2U6J9Cm0LjQs9Cw0YDQsCcsc21va2VfYmFjazon0J7QsdGA0LDRgtC90L4nfTsKICB2YXIgYnRucz1bJ2Fycml2ZWQnLCdicmVhaycsJ2JhY2snLCdsZWZ0JywndG9pbGV0Jywnc21va2UnLCdzbW9rZV9iYWNrJ10ubWFwKGZ1bmN0aW9uKHMpewogICAgdmFyIGM9UFNJW3NdO3ZhciBpYT1teVMmJm15Uy5zdGF0dXM9PT1zOwogICAgcmV0dXJuICc8YnV0dG9uIG9uY2xpY2s9ImxvZ1AoXCcnK3MrJ1wnKSIgc3R5bGU9InBhZGRpbmc6MThweCAxNnB4O2JvcmRlci1yYWRpdXM6MTRweDtib3JkZXI6MnB4IHNvbGlkICcrYy5jb2xvcisnO2JhY2tncm91bmQ6JysoaWE/Yy5jb2xvcjondHJhbnNwYXJlbnQnKSsnO2NvbG9yOicrKGlhPycjZmZmJzpjLmNvbG9yKSsnO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OkRNIFNhbnMsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7bWluLXdpZHRoOjExMHB4O2JveC1zaGFkb3c6JysoaWE/JzAgNHB4IDE2cHggJytjLmNvbG9yKyc0NCc6J25vbmUnKSsnO291dGxpbmU6bm9uZTsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MjZweDtsaW5lLWhlaWdodDoxIj4nK2MuZW1vamkrJzwvc3Bhbj48c3Bhbj4nK0xCTFtzXSsnPC9zcGFuPjwvYnV0dG9uPic7CiAgfSkuam9pbignJyk7CiAgdmFyIGNhcmRzPUQudXNlcnMubWFwKGZ1bmN0aW9uKHUpewogICAgdmFyIGNzPWN1ci5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiBTdHJpbmcoeC51c2VyX2lkKT09PVN0cmluZyh1LmlkKTt9KTsKICAgIHZhciBzaT1jcz9QU0lbY3Muc3RhdHVzXTpudWxsOwogICAgdmFyIHQ9Y3M/bmV3IERhdGUoY3MuY3JlYXRlZF9hdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCdiZy1CRycse2hvdXI6JzItZGlnaXQnLG1pbnV0ZTonMi1kaWdpdCd9KTonJzsKICAgIHZhciBjb2w9dS5jb2xvcnx8J2F2LXAnOwogICAgcmV0dXJuICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjJweCBzb2xpZCAnKyhzaT9zaS5jb2xvcisnODgnOid2YXIoLS1icmQpJykrJztib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxOHB4O3RleHQtYWxpZ246Y2VudGVyIj4nCiAgICAgICsnPGRpdiBzdHlsZT0id2lkdGg6NDhweDtoZWlnaHQ6NDhweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOicrKEFCR1tjb2xdfHwncmdiYSgxMDgsOTksMjU1LC4yNSknKSsnO2NvbG9yOicrKEFDVltjb2xdfHwnI2E3OGJmYScpKyc7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW46MCBhdXRvIDEwcHgiPicrKHUuaW5pdGlhbHN8fCc/JykrJzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpO21hcmdpbi1ib3R0b206MnB4Ij4nK3UubmFtZSsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLWJvdHRvbToxMHB4Ij4nKyh1LnJvbGV8fCcnKSsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo1cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO3BhZGRpbmc6NXB4IDEycHg7Ym9yZGVyLXJhZGl1czoyMHB4O2JhY2tncm91bmQ6Jysoc2k/c2kuY29sb3IrJzE4JzondmFyKC0tc3VyMiknKSsnO2NvbG9yOicrKHNpP3NpLmNvbG9yOid2YXIoLS10eDMpJykrJztib3JkZXI6MXB4IHNvbGlkICcrKHNpP3NpLmNvbG9yKyczMyc6J3ZhcigtLWJyZCknKSsnIj4nKyggc2k/c2kuZW1vamk6J+KaqicpKycgJysoc2k/c2kubGFiZWw6J9Cd0LUg0LUg0LLQu9GP0LfRitC7JykrJzwvZGl2PicKICAgICAgKyh0Pyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi10b3A6NnB4O2ZvbnQtZmFtaWx5OnZhcigtLW1vKSI+0L7RgiAnK3QrJzwvZGl2Pic6JycpCiAgICAgICtwcmVzZW5jZU1ldGEoY3MpCiAgICAgICsnPC9kaXY+JzsKICB9KS5qb2luKCcnKTsKICB2YXIgdGQ9bmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7d2Vla2RheTonbG9uZycsZGF5OidudW1lcmljJyxtb250aDonbG9uZyd9KTsKICB2YXIgbG9nUj1sb2cubGVuZ3RoP2xvZy5tYXAoZnVuY3Rpb24obCl7CiAgICB2YXIgc2k9UFNJW2wuc3RhdHVzXTt2YXIgdD1uZXcgRGF0ZShsLmNyZWF0ZWRfYXQpLnRvTG9jYWxlVGltZVN0cmluZygnYmctQkcnLHtob3VyOicyLWRpZ2l0JyxtaW51dGU6JzItZGlnaXQnfSk7CiAgICB2YXIgY29sPWwuY29sb3J8fCdhdi1wJzsKICAgIHJldHVybiAnPGRpdiBzdHlsZT0icGFkZGluZzoxMHB4IDE2cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4Ij4nCiAgICAgICsnPGRpdiBzdHlsZT0id2lkdGg6MjhweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOicrKEFCR1tjb2xdfHwncmdiYSgxMDgsOTksMjU1LC4yNSknKSsnO2NvbG9yOicrKEFDVltjb2xdfHwnI2E3OGJmYScpKyc7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjcwMDtmbGV4LXNocmluazowIj4nKyhsLmluaXRpYWxzfHwnPycpKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLXR4KTtmbGV4OjEiPicrbC5uYW1lKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2JhY2tncm91bmQ6Jysoc2k/c2kuY29sb3IrJzE4JzonIzg4ODg4ODE4JykrJztjb2xvcjonKyhzaT9zaS5jb2xvcjonIzg4OCcpKyciPicrKCBzaT9zaS5lbW9qaTon4pqqJykrJyAnKyhzaT9zaS5sYWJlbDpsLnN0YXR1cykrJzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtZmFtaWx5OnZhcigtLW1vKSI+Jyt0Kyc8L2Rpdj4nCiAgICAgICtwcmVzZW5jZU1ldGEobCkKICAgICAgKyc8L2Rpdj4nOwogIH0pLmpvaW4oJycpOic8ZGl2IHN0eWxlPSJwYWRkaW5nOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tdHgzKTtmb250LXNpemU6MTJweCI+0J3Rj9C80LAg0LfQsNC/0LjRgdC4INC30LAg0LTQvdC10YE8L2Rpdj4nOwogIGVsLmlubmVySFRNTD0nPGRpdiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjE4cHg7cGFkZGluZzozMnB4O21hcmdpbi1ib3R0b206MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtib3gtc2hhZG93OnZhcigtLXNoZCkiPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS10eCk7bWFyZ2luLWJvdHRvbTo0cHgiPvCfkYsg0JfQtNGA0LDQstC10LksICcrKENVP0NVLm5hbWU6JycpKycgITwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLWJvdHRvbToxNnB4Ij7QntGC0LHQtdC70LXQttC4INGB0LLQvtC10YLQviDQv9GA0LjRgdGK0YHRgtCy0LjQtTwvZGl2PicrYmFkZ2UrJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6MTRweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj4nK2J0bnMrJzwvZGl2PjwvZGl2PicKICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXR4KTttYXJnaW4tYm90dG9tOjEycHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNmVtIj7QodGC0LDRgtGD0YEg0L3QsCDQtdC60LjQv9CwPC9kaXY+JwogICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE3NXB4LDFmcikpO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MjBweCI+JytjYXJkcysnPC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij7wn5OLINCW0YPRgNC90LDQuyDigJQgJyt0ZCsnPC9kaXY+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MykiPicrbG9nLmxlbmd0aCsnINC30LDQv9C40YHQsDwvc3Bhbj48L2Rpdj4nK2xvZ1IrJzwvZGl2Pic7Cn0KCmFzeW5jIGZ1bmN0aW9uIGxvZ1Aoc3RhdHVzKXsKICBpZighQ1V8fCFDVS5pZCl7dG9hc3QoJ9Cd0LUg0YHRgtC1INCy0LvQtdC30LvQuCcsJ2VycicpO3JldHVybjt9CiAgdmFyIGdlbz1hd2FpdCBnZXRQcmVzZW5jZUdlbygpOwogIHZhciByPWF3YWl0IGFmKCdwcmVzZW5jZScsJ1BPU1QnLE9iamVjdC5hc3NpZ24oe3VzZXJfaWQ6Q1UuaWQsc3RhdHVzOnN0YXR1c30sZ2VvKSk7CiAgaWYociE9PW51bGwpewogICAgdmFyIE09e2Fycml2ZWQ6J+KckyDQlNC+0LHRgNC1INC00L7RiNGK0LshJyxicmVhazon4piVINCf0YDQuNGP0YLQvdCwINC/0L7Rh9C40LLQutCwIScsYmFjazon8J+SvCDQlNC+0LHRgNC1INC00L7RiNGK0Lsg0L7QsdGA0LDRgtC90L4hJyxsZWZ0Oifwn5GLINCb0LXQutCwINCy0LXRh9C10YAhJ307CiAgICB0b2FzdChNW3N0YXR1c118fCdPSycsJ29rJyk7CiAgICBhd2FpdCByUHJlc2VuY2UoKTsKICB9ZWxzZSB0b2FzdCgn0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGBJywnZXJyJyk7Cn0KCi8vIOKUgOKUgCBDQUxFTkRBUiDilIDilIAKZnVuY3Rpb24gckNhbGVuZGFyKCl7CiAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxmJyk7CiAgdmFyIHRkPW5ldyBEYXRlKCk7CiAgaWYoIXdpbmRvdy5fY2FsKXdpbmRvdy5fY2FsPXt5ZWFyOnRkLmdldEZ1bGxZZWFyKCksbW9udGg6dGQuZ2V0TW9udGgoKSxzZWw6dGQudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKX07CiAgdmFyIHN0PXdpbmRvdy5fY2FsOwogIHZhciBkaW09bmV3IERhdGUoc3QueWVhcixzdC5tb250aCsxLDApLmdldERhdGUoKTsKICB2YXIgZmQyPW5ldyBEYXRlKHN0LnllYXIsc3QubW9udGgsMSkuZ2V0RGF5KCk7CiAgdmFyIG9mZj1mZDI9PT0wPzY6ZmQyLTE7CiAgdmFyIE1OPVsn0K/QvdGD0LDRgNC4Jywn0KTQtdCy0YDRg9Cw0YDQuCcsJ9Cc0LDRgNGCJywn0JDQv9GA0LjQuycsJ9Cc0LDQuScsJ9Cu0L3QuCcsJ9Cu0LvQuCcsJ9CQ0LLQs9GD0YHRgicsJ9Ch0LXQv9GC0LXQvNCy0YDQuCcsJ9Ce0LrRgtC+0LzQstGA0LgnLCfQndC+0LXQvNCy0YDQuCcsJ9CU0LXQutC10LzQstGA0LgnXTsKICB2YXIgREw9WyfQn9C9Jywn0JLRgicsJ9Ch0YAnLCfQp9GCJywn0J/RgicsJ9Ch0LEnLCfQndC0J107CiAgdmFyIHRkcz10ZC50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApOwogIHZhciBkYXlzPURMLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gJzxkaXYgY2xhc3M9ImNhbGwiPicrZCsnPC9kaXY+Jzt9KS5qb2luKCcnKTsKICBmb3IodmFyIGk9MDtpPG9mZjtpKyspZGF5cys9JzxkaXYgY2xhc3M9ImNhbGRheSBvbSI+PC9kaXY+JzsKICBmb3IodmFyIGQ9MTtkPD1kaW07ZCsrKXsKICAgIHZhciBkcz1zdC55ZWFyKyctJytTdHJpbmcoc3QubW9udGgrMSkucGFkU3RhcnQoMiwnMCcpKyctJytTdHJpbmcoZCkucGFkU3RhcnQoMiwnMCcpOwogICAgdmFyIGR0cz1ELnRhc2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5kdWVfZGF0ZSYmdC5kdWVfZGF0ZS5zbGljZSgwLDEwKT09PWRzO30pOwogICAgdmFyIGV2PWR0cy5zbGljZSgwLDIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gJzxkaXYgY2xhc3M9ImNhbGV2Ij4nK3QudGV4dC5zbGljZSgwLDEyKSsnPC9kaXY+Jzt9KS5qb2luKCcnKTsKICAgIGRheXMrPSc8ZGl2IGNsYXNzPSJjYWxkYXknKyhkcz09PXRkcz8nIHRvZGF5JzonJykrKGRzPT09c3Quc2VsPycgc2VsJzonJykrJyIgb25jbGljaz0id2luZG93Ll9jYWwuc2VsPVwnJytkcysnXCc7ckNhbGVuZGFyKCkiPjxkaXYgY2xhc3M9ImNhbGRuIj4nK2QrJzwvZGl2PicrZXYrKGR0cy5sZW5ndGg+Mj8nPGRpdiBzdHlsZT0iZm9udC1zaXplOjlweDtjb2xvcjp2YXIoLS10eDMpIj4rJysoZHRzLmxlbmd0aC0yKSsnPC9kaXY+JzonJykrJzwvZGl2Pic7CiAgfQogIHZhciByZW09KG9mZitkaW0pJTc7aWYocmVtKWZvcih2YXIgZDI9MTtkMjw9Ny1yZW07ZDIrKylkYXlzKz0nPGRpdiBjbGFzcz0iY2FsZGF5IG9tIj48L2Rpdj4nOwogIHZhciBzVD1ELnRhc2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5kdWVfZGF0ZSYmdC5kdWVfZGF0ZS5zbGljZSgwLDEwKT09PXN0LnNlbDt9KTsKICB2YXIgc0REPW5ldyBEYXRlKHN0LnNlbCsnVDEyOjAwOjAwJykudG9Mb2NhbGVEYXRlU3RyaW5nKCdiZy1CRycse3dlZWtkYXk6J2xvbmcnLGRheTonbnVtZXJpYycsbW9udGg6J2xvbmcnfSk7CiAgdmFyIHVwPUQudGFza3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmR1ZV9kYXRlJiZ0LmRvbmUhPTEmJnQuZHVlX2RhdGU+PXRkczt9KS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZHVlX2RhdGUubG9jYWxlQ29tcGFyZShiLmR1ZV9kYXRlKTt9KS5zbGljZSgwLDgpOwogIGVsLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iY2FsZyI+PGRpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MTRweCI+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweCI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJ3aW5kb3cuX2NhbC5tb250aC0tO2lmKHdpbmRvdy5fY2FsLm1vbnRoPDApe3dpbmRvdy5fY2FsLm1vbnRoPTExO3dpbmRvdy5fY2FsLnllYXItLTt9ckNhbGVuZGFyKCkiPuKAuTwvYnV0dG9uPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10eCkiPicrTU5bc3QubW9udGhdKycgJytzdC55ZWFyKyc8L2Rpdj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9IndpbmRvdy5fY2FsLm1vbnRoKys7aWYod2luZG93Ll9jYWwubW9udGg+MTEpe3dpbmRvdy5fY2FsLm1vbnRoPTA7d2luZG93Ll9jYWwueWVhcisrO31yQ2FsZW5kYXIoKSI+4oC6PC9idXR0b24+PC9kaXY+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9Im1vZGFsKFwnY2FsVGFza1wnLFwnJytzdC5zZWwrJ1wnKSI+KyDQl9Cw0LTQsNGH0LAg0YEg0LTQsNGC0LA8L2J1dHRvbj48L2Rpdj48ZGl2IGNsYXNzPSJjYWxkIj4nK2RheXMrJzwvZGl2PjwvZGl2PicKICAgICsnPGRpdj48ZGl2IGNsYXNzPSJwYW5lbCI+PGRpdiBjbGFzcz0icGgiPjxkaXYgY2xhc3M9InB0Ij4nK3NERCsnPC9kaXY+PGJ1dHRvbiBjbGFzcz0icGEiIG9uY2xpY2s9Im1vZGFsKFwnY2FsVGFza1wnLFwnJytzdC5zZWwrJ1wnKSI+KyDQl9Cw0LTQsNGH0LA8L2J1dHRvbj48L2Rpdj4nKyhzVC5sZW5ndGg/c1QubWFwKHRIVE1MKS5qb2luKCcnKTonPGRpdiBzdHlsZT0icGFkZGluZzoyMHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLXR4Myk7Zm9udC1zaXplOjEycHgiPtCd0Y/QvNCwINC30LDQtNCw0YfQuCDQt9CwINC00LXQvdGPPC9kaXY+JykrJzwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0icGFuZWwiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+8J+TiyDQn9GA0LXQtNGB0YLQvtGP0YnQuDwvZGl2PjwvZGl2PicrKHVwLmxlbmd0aD91cC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICc8ZGl2IGNsYXNzPSJ0aSIgb25jbGljaz0idG9nQ2FsVChcJycrdC5pZCsnXCcpIj48ZGl2IGNsYXNzPSJ0Y2siPjwvZGl2PjxkaXYgc3R5bGU9ImZsZXg6MSI+PGRpdiBjbGFzcz0idHR4Ij4nK3QudGV4dCsnPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweCI+JytuZXcgRGF0ZSh0LmR1ZV9kYXRlKydUMTI6MDA6MDAnKS50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7ZGF5OidudW1lcmljJyxtb250aDonc2hvcnQnfSkrJyDCtyAnKyh0LmFzc2lnbmVlfHwn4oCUJykrJzwvZGl2PjwvZGl2PicrKHQudXJnZW50PT0xPyc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tcmVkKSI+4pqgPC9zcGFuPic6JycpKyc8L2Rpdj4nO30pLmpvaW4oJycpOic8ZGl2IHN0eWxlPSJwYWRkaW5nOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tdHgzKTtmb250LXNpemU6MTJweCI+0J3Rj9C80LAg0L/RgNC10LTRgdGC0L7Rj9GJ0Lg8L2Rpdj4nKSsnPC9kaXY+PC9kaXY+PC9kaXY+JzsKfQphc3luYyBmdW5jdGlvbiB0b2dDYWxUKGlkKXsKICB2YXIgdD1ELnRhc2tzLmZpbmQoZnVuY3Rpb24oeCl7cmV0dXJuIHguaWQ9PT1pZDt9KTtpZighdClyZXR1cm47CiAgdC5kb25lPXQuZG9uZT09MT8wOjE7CiAgYXdhaXQgYWYoJ3Rhc2tzJywnUE9TVCcse2lkOnQuaWQsdGV4dDp0LnRleHQsYXNzaWduZWU6dC5hc3NpZ25lZSx1cmdlbnQ6dC51cmdlbnQsZG9uZTp0LmRvbmUsZHVlX2RhdGU6dC5kdWVfZGF0ZXx8bnVsbH0pOwogIHJDYWxlbmRhcigpO3RvYXN0KHQuZG9uZT09MT8n4pyTINCY0LfQv9GK0LvQvdC10L3QsCc6J9CS0YrRgNC90LDRgtCwJywnb2snKTsKfQoKLy8g4pSA4pSAIFRBUkdFVFMgTkFWIEhFTFBFUlMg4pSA4pSACmZ1bmN0aW9uIHRnUHJldkRheSgpewogIHZhciBkPW5ldyBEYXRlKF90Z0RhdGUrJ1QxMjowMDowMCcpOwogIGQuc2V0RGF0ZShkLmdldERhdGUoKS0xKTsKICBfdGdEYXRlPWQudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICByVGFyZ2V0cygpOwp9CmZ1bmN0aW9uIHRnTmV4dERheSgpewogIHZhciBkPW5ldyBEYXRlKF90Z0RhdGUrJ1QxMjowMDowMCcpOwogIGQuc2V0RGF0ZShkLmdldERhdGUoKSsxKTsKICBfdGdEYXRlPWQudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICByVGFyZ2V0cygpOwp9CmZ1bmN0aW9uIHRnVG9kYXkoKXsKICBfdGdEYXRlPW5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICByVGFyZ2V0cygpOwp9CgovLyDilIDilIAgV09SSyBSRVBPUlQgSEVMUEVSUyDilIDilIAKZnVuY3Rpb24gd3JVcGRhdGUoKXsKICB2YXIgZj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3JGcm9tJyk7CiAgdmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dyVG8nKTsKICBpZihmKXdpbmRvdy5fd3JGcm9tPWYudmFsdWU7CiAgaWYodCl3aW5kb3cuX3dyVG89dC52YWx1ZTsKICByV29ya1JlcG9ydCgpOwp9CmZ1bmN0aW9uIHdyVGhpc01vbnRoKCl7CiAgdmFyIGQ9bmV3IERhdGUoKTsKICB3aW5kb3cuX3dyRnJvbT1kLmdldEZ1bGxZZWFyKCkrJy0nK1N0cmluZyhkLmdldE1vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpKyctMDEnOwogIHdpbmRvdy5fd3JUbz1kLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgcldvcmtSZXBvcnQoKTsKfQpmdW5jdGlvbiB3ckxhc3Q3KCl7CiAgdmFyIGQ9bmV3IERhdGUoKTtkLnNldERhdGUoZC5nZXREYXRlKCktNyk7CiAgd2luZG93Ll93ckZyb209ZC50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApOwogIHdpbmRvdy5fd3JUbz1uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgcldvcmtSZXBvcnQoKTsKfQoKCi8vIOKUgOKUgCBUQVJHRVRTIOKUgOKUgAp2YXIgX3RnRGF0ZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKCmFzeW5jIGZ1bmN0aW9uIHJUYXJnZXRzKCl7CiAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0Z2YnKTsKICBlbC5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImxvYWRpbmciPtCX0LDRgNC10LbQtNCwPC9kaXY+JzsKICB2YXIgZGF0YT1hd2FpdCBhZigndGFyZ2V0cycsbnVsbCxudWxsLCcmZGF0ZT0nK190Z0RhdGUpOwogIHZhciB0YXJnZXRzPWRhdGF8fFtdOwoKICB2YXIgaXNBZG1pbj1DVSYmQ1UuaXNfYWRtaW49PTE7CiAgdmFyIHRvZGF5PW5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICB2YXIgZGF0ZVN0cj1uZXcgRGF0ZShfdGdEYXRlKydUMTI6MDA6MDAnKS50b0xvY2FsZURhdGVTdHJpbmcoJ2JnLUJHJyx7d2Vla2RheTonbG9uZycsZGF5OidudW1lcmljJyxtb250aDonbG9uZyd9KTsKCiAgLy8gRGF0ZSBuYXYKICB2YXIgbmF2Mj0nPGRpdiBjbGFzcz0icGFuZWwiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE2cHgiPjxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+8J+OryDQlNC90LXQstC90Lgg0YLQsNGA0LPQtdGC0Lg8L2Rpdj4nCiAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlciI+JwogICAgKyc8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9InRnUHJldkRheSgpIj7igLk8L2J1dHRvbj4nCiAgICArJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tdHgpIj4nK2RhdGVTdHIrJzwvc3Bhbj4nCiAgICArJzxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0idGdOZXh0RGF5KCkiPuKAujwvYnV0dG9uPicKICAgICsnPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJ0Z1RvZGF5KCkiPtCU0L3QtdGBPC9idXR0b24+JwogICAgKyhpc0FkbWluPyc8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ib3BlblRnTW9kYWwoKSI+KyDQndC+0LIg0YLQsNGA0LPQtdGCPC9idXR0b24+JzonJykKICAgICsnPC9kaXY+PC9kaXY+PC9kaXY+JzsKCiAgaWYoIXRhcmdldHMubGVuZ3RoKXsKICAgIGVsLmlubmVySFRNTD1uYXYyKyc8ZGl2IHN0eWxlPSJwYWRkaW5nOjUwcHggMjBweDt0ZXh0LWFsaWduOmNlbnRlciI+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O21hcmdpbi1ib3R0b206MTJweCI+8J+OrzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTVweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tdHgyKTttYXJnaW4tYm90dG9tOjZweCI+0J3Rj9C80LAg0YLQsNGA0LPQtdGC0Lgg0LfQsCAnK2RhdGVTdHIrJzwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpO21hcmdpbi1ib3R0b206MTZweCI+0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRitGCINC80L7QttC1INC00LAg0LTQvtCx0LDQstC4INC90L7QstC4INGC0LDRgNCz0LXRgtC4PC9kaXY+JwogICAgICArKGlzQWRtaW4/JzxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJvcGVuVGdNb2RhbCgpIj4rINCU0L7QsdCw0LLQuCDRgtCw0YDQs9C10YI8L2J1dHRvbj4nOicnKQogICAgICArJzwvZGl2Pic7CiAgICByZXR1cm47CiAgfQoKICAvLyBHcm91cCBieSB1c2VyCiAgdmFyIGJ5VXNlcj17fTsKICB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24odCl7CiAgICBpZighYnlVc2VyW3QudXNlcl9pZF0pIGJ5VXNlclt0LnVzZXJfaWRdPXtuYW1lOnQudXNlcl9uYW1lLGluaXRpYWxzOnQuaW5pdGlhbHMsY29sb3I6dC5jb2xvcixpdGVtczpbXX07CiAgICBieVVzZXJbdC51c2VyX2lkXS5pdGVtcy5wdXNoKHQpOwogIH0pOwoKICB2YXIgY2FyZHM9T2JqZWN0LnZhbHVlcyhieVVzZXIpLm1hcChmdW5jdGlvbih1KXsKICAgIHZhciBpdGVtcz11Lml0ZW1zLm1hcChmdW5jdGlvbih0KXsKICAgICAgdmFyIHBjdD1NYXRoLm1pbihNYXRoLnJvdW5kKHQuY3VycmVudF92YWx1ZS90LnRhcmdldF92YWx1ZSoxMDApLDEwMCk7CiAgICAgIHZhciBpc01lPVN0cmluZyh0LnVzZXJfaWQpPT09U3RyaW5nKENVJiZDVS5pZCk7CiAgICAgIHZhciBpc0RvbmU9cGN0Pj0xMDA7CiAgICAgIHZhciBpc0xvdz1wY3Q8NTAmJnQuY3VycmVudF92YWx1ZT4wOwogICAgICB2YXIgYmFyQ29sb3I9aXNEb25lPycjMjJjNTVlJzpwY3Q+PTc1PycjMzhiZGY4JzpwY3Q+PTUwPycjZjU5ZTBiJzonI2VmNDQ0NCc7CgogICAgICAvLyBNb3RpdmF0aW9uYWwgbWVzc2FnZQogICAgICB2YXIgbW90aXZNc2c9Jyc7dmFyIG1vdGl2Q29sb3I9Jyc7CiAgICAgIGlmKGlzRG9uZSl7IG1vdGl2TXNnPSfwn4+GINCe0YLQu9C40YfQtdC9INGA0LXQt9GD0LvRgtCw0YIhINCi0LDRgNCz0LXRgtGK0YIg0LUg0LjQt9C/0YrQu9C90LXQvSEnOyBtb3RpdkNvbG9yPScjMjJjNTVlJzsgfQogICAgICBlbHNlIGlmKHBjdD49NzUpeyBtb3Rpdk1zZz0n4q2QINCc0L3QvtCz0L4g0LTQvtCx0YDQtSEg0J/QvtGH0YLQuCDRgtCw0Lwg4oCUINC90LUg0YHQtSDQvtGC0LrQsNC30LLQsNC5ISc7IG1vdGl2Q29sb3I9JyMzOGJkZjgnOyB9CiAgICAgIGVsc2UgaWYocGN0Pj01MCl7IG1vdGl2TXNnPSfwn5GNINCd0LAg0L/QvtC70L7QstC40L3QsNGC0LAuINCh0YLQtdCz0L3QuCDRgdC1INC30LAg0LTQsCDQuNC30L/RitC70L3QuNGIINC/0LvQsNC90LAhJzsgbW90aXZDb2xvcj0nI2Y1OWUwYic7IH0KICAgICAgZWxzZSBpZihwY3Q+MCl7IG1vdGl2TXNnPSfimqDvuI8g0J/QvtC0INC90L7RgNC80LDRgtCwLiDQotGA0Y/QsdCy0LAg0L/QvtCy0LXRh9C1INGD0YHQuNC70LjRjyDigJQg0LfQsNC/0LvQsNGC0LDRgtCwINC30LDQstC40YHQuCDQvtGCINGA0LXQt9GD0LvRgtCw0YLQsCEnOyBtb3RpdkNvbG9yPScjZWY0NDQ0JzsgfQogICAgICBlbHNleyBtb3Rpdk1zZz0n4o+zINCS0YHQtSDQvtGJ0LUg0L3QtSDQtSDQt9Cw0L/QvtGH0L3QsNGC0L4uJzsgbW90aXZDb2xvcj0nIzZiNzI4MCc7IH0KCiAgICAgIHJldHVybiAnPGRpdiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCkiPicKICAgICAgICAvLyBIZWFkZXIKICAgICAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O21hcmdpbi1ib3R0b206MTBweCI+JwogICAgICAgICsnPGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpIj4nK3QudGl0bGUrJzwvZGl2PicKICAgICAgICArKHQuZGVzY3JpcHRpb24/JzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4Myk7bWFyZ2luLXRvcDoycHgiPicrdC5kZXNjcmlwdGlvbisnPC9kaXY+JzonJykKICAgICAgICArJzwvZGl2PicKICAgICAgICArKGlzQWRtaW4/JzxidXR0b24gY2xhc3M9Im9idG4iIHN0eWxlPSJjb2xvcjp2YXIoLS1yZWQpIiBvbmNsaWNrPSJkZWxUZygnK3QuaWQrJykiPuKclTwvYnV0dG9uPic6JycpCiAgICAgICAgKyc8L2Rpdj4nCiAgICAgICAgLy8gUHJvZ3Jlc3MgYmFyCiAgICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206OHB4Ij4nCiAgICAgICAgKyc8ZGl2IHN0eWxlPSJmbGV4OjE7aGVpZ2h0OjEycHg7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlci1yYWRpdXM6NnB4O292ZXJmbG93OmhpZGRlbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJyZCkiPicKICAgICAgICArJzxkaXYgc3R5bGU9ImhlaWdodDoxMDAlO3dpZHRoOicrcGN0KyclO2JhY2tncm91bmQ6JytiYXJDb2xvcisnO2JvcmRlci1yYWRpdXM6NnB4O3RyYW5zaXRpb246d2lkdGggLjVzIGVhc2UiPjwvZGl2PicKICAgICAgICArJzwvZGl2PicKICAgICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LWZhbWlseTp2YXIoLS1tbyk7Y29sb3I6JytiYXJDb2xvcisnO21pbi13aWR0aDo0MHB4O3RleHQtYWxpZ246cmlnaHQiPicrcGN0KyclPC9kaXY+JwogICAgICAgICsnPC9kaXY+JwogICAgICAgIC8vIE51bWJlcnMKICAgICAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxMHB4Ij4nCiAgICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDMpIj7QmNC30L/RitC70L3QtdC90L46IDxzdHJvbmcgc3R5bGU9ImNvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1tbykiPicrdC5jdXJyZW50X3ZhbHVlKycgJyt0LnVuaXQrJzwvc3Ryb25nPjwvZGl2PicKICAgICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4MykiPtCi0LDRgNCz0LXRgjogPHN0cm9uZyBzdHlsZT0iY29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLW1vKSI+Jyt0LnRhcmdldF92YWx1ZSsnICcrdC51bml0Kyc8L3N0cm9uZz48L2Rpdj4nCiAgICAgICAgKyc8L2Rpdj4nCiAgICAgICAgLy8gTW90aXZhdGlvbmFsIG1zZwogICAgICAgICsnPGRpdiBzdHlsZT0icGFkZGluZzo4cHggMTJweDtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOicrbW90aXZDb2xvcisnMTI7Ym9yZGVyOjFweCBzb2xpZCAnK21vdGl2Q29sb3IrJzMzO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOicrbW90aXZDb2xvcisnO2ZvbnQtd2VpZ2h0OjUwMDttYXJnaW4tYm90dG9tOicrKGlzTWUmJiFpc0RvbmU/JzEwJzonMCcpKydweCI+Jyttb3Rpdk1zZysnPC9kaXY+JwogICAgICAgIC8vIFVwZGF0ZSBidXR0b24gKG9ubHkgZm9yIGFzc2lnbmVkIHVzZXIgb3IgYWRtaW4pCiAgICAgICAgKygoaXNNZXx8aXNBZG1pbikmJiFpc0RvbmU/JzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjEwcHgiPicKICAgICAgICAgICsnPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InRnX2lucF8nK3QuaWQrJyIgbWluPSIwIiBtYXg9IicrdC50YXJnZXRfdmFsdWUrJyIgdmFsdWU9IicrdC5jdXJyZW50X3ZhbHVlKyciIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6N3B4IDEwcHg7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTNweDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwcHgiPicKICAgICAgICAgICsnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXR4MykiPicrdC51bml0Kyc8L3NwYW4+JwogICAgICAgICAgKyc8YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0idXBkYXRlVGcoJyt0LmlkKycsJyt0LnRhcmdldF92YWx1ZSsnKSI+0J7QsdC90L7QstC4INC/0YDQvtCz0YDQtdGBPC9idXR0b24+JwogICAgICAgICAgKyhpc0RvbmU/Jyc6JzxidXR0b24gY2xhc3M9ImJ0biIgc3R5bGU9ImJvcmRlci1jb2xvcjp2YXIoLS1ncm4pO2NvbG9yOnZhcigtLWdybikiIG9uY2xpY2s9InVwZGF0ZVRnRnVsbCgnK3QuaWQrJywnK3QudGFyZ2V0X3ZhbHVlKycpIj7inJMg0JjQt9C/0YrQu9C90LXQvSE8L2J1dHRvbj4nKQogICAgICAgICAgKyc8L2Rpdj4nOicnKQogICAgICAgICsnPC9kaXY+JzsKICAgIH0pLmpvaW4oJycpOwoKICAgIHZhciBjb2w9dS5jb2xvcnx8J2F2LXAnOwogICAgdmFyIGRvbmVDb3VudD11Lml0ZW1zLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0LmN1cnJlbnRfdmFsdWUvdC50YXJnZXRfdmFsdWUqMTAwKT49MTAwO30pLmxlbmd0aDsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0icGFuZWwiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPicKICAgICAgKyc8ZGl2IGNsYXNzPSJwaCI+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweCI+JwogICAgICArJzxkaXYgY2xhc3M9ImF2ICcrY29sKyciIHN0eWxlPSJ3aWR0aDozNHB4O2hlaWdodDozNHB4O2ZvbnQtc2l6ZToxM3B4Ij4nKyh1LmluaXRpYWxzfHwnPycpKyc8L2Rpdj4nCiAgICAgICsnPGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpIj4nK3UubmFtZSsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MykiPicrZG9uZUNvdW50KycvJyt1Lml0ZW1zLmxlbmd0aCsnINGC0LDRgNCz0LXRgtCwINC40LfQv9GK0LvQvdC10L3QuDwvZGl2PjwvZGl2PicKICAgICAgKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPicrKCBkb25lQ291bnQ9PT11Lml0ZW1zLmxlbmd0aD8n8J+Phic6ZG9uZUNvdW50PjA/J+KaoSc6J+KPsycpKyc8L2Rpdj4nCiAgICAgICsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9InBhZGRpbmc6MTRweCAxN3B4Ij4nK2l0ZW1zKyc8L2Rpdj4nCiAgICAgICsnPC9kaXY+JzsKICB9KS5qb2luKCcnKTsKCiAgZWwuaW5uZXJIVE1MPW5hdjIrY2FyZHM7Cn0KCmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVRnKGlkLCBtYXhWYWwpewogIHZhciBpbnA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RnX2lucF8nK2lkKTsKICBpZighaW5wKXJldHVybjsKICB2YXIgdmFsPXBhcnNlSW50KGlucC52YWx1ZSl8fDA7CiAgaWYodmFsPm1heFZhbCl2YWw9bWF4VmFsOwogIHZhciBzdGF0dXM9dmFsPj1tYXhWYWw/J2RvbmUnOidhY3RpdmUnOwogIHZhciByPWF3YWl0IGFmKCd0YXJnZXRzJywnUE9TVCcse2lkOmlkLGN1cnJlbnRfdmFsdWU6dmFsLHN0YXR1czpzdGF0dXN9KTsKICBpZihyIT09bnVsbCl7CiAgICB0b2FzdCh2YWw+PW1heFZhbD8n8J+PhiDQotCw0YDQs9C10YLRitGCINC1INC40LfQv9GK0LvQvdC10L0hJzon4pyTINCf0YDQvtCz0YDQtdGB0YrRgiDQtSDQvtCx0L3QvtCy0LXQvSEnLCdvaycpOwogICAgclRhcmdldHMoKTsKICB9IGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCcsJ2VycicpOwp9Cgphc3luYyBmdW5jdGlvbiB1cGRhdGVUZ0Z1bGwoaWQsIG1heFZhbCl7CiAgdmFyIHI9YXdhaXQgYWYoJ3RhcmdldHMnLCdQT1NUJyx7aWQ6aWQsY3VycmVudF92YWx1ZTptYXhWYWwsc3RhdHVzOidkb25lJ30pOwogIGlmKHIhPT1udWxsKXt0b2FzdCgn8J+PhiDQotCw0YDQs9C10YLRitGCINC1INC40LfQv9GK0LvQvdC10L0hJywnb2snKTtyVGFyZ2V0cygpO30KICBlbHNlIHRvYXN0KCfQk9GA0LXRiNC60LAnLCdlcnInKTsKfQoKYXN5bmMgZnVuY3Rpb24gZGVsVGcoaWQpewogIGlmKCFjb25maXJtKCfQmNC30YLRgNC40Lkg0YLQsNGA0LPQtdGC0LA/JykpcmV0dXJuOwogIGF3YWl0IGFmKCd0YXJnZXRzJywnREVMRVRFJyxudWxsLCcmaWQ9JytpZCk7CiAgdG9hc3QoJ9CY0LfRgtGA0LjRgtC+Jyk7clRhcmdldHMoKTsKfQoKZnVuY3Rpb24gb3BlblRnTW9kYWwoKXsKICBpZighRC51c2Vycy5sZW5ndGgpe3RvYXN0KCfQl9Cw0YDQtdC20LTQsCDQv9C+0YLRgNC10LHQuNGC0LXQu9C40YLQtS4uLicsJycpO3JldHVybjt9CiAgdmFyIGh0bWw9JzxoMz7wn46vINCd0L7QsiDRgtCw0YDQs9C10YI8L2gzPicKICAgICsnPGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Ql9Cw0LPQu9Cw0LLQuNC1PC9sYWJlbD48aW5wdXQgaWQ9InRnVGkiIHBsYWNlaG9sZGVyPSLQvdCw0L/RgC4g0JrQsNGH0LLQsNC90LUg0L3QsCDQv9GA0L7QtNGD0LrRgtC4LCDQntCx0LDQttC00LDQvdC40Y8sINCe0YTQtdGA0YLQuC4uLiI+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCe0L/QuNGB0LDQvdC40LUgKNC/0L4g0LjQt9Cx0L7RgCk8L2xhYmVsPjxpbnB1dCBpZD0idGdEZSIgcGxhY2Vob2xkZXI9ItCU0L7Qv9GK0LvQvdC40YLQtdC70L3QuCDQtNC10YLQsNC50LvQuCI+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtZyI+JwogICAgKyc8ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCi0LDRgNCz0LXRgiAo0LHRgNC+0LkpPC9sYWJlbD48aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idGdUdiIgcGxhY2Vob2xkZXI9IjMwMCIgbWluPSIxIj48L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JXQtNC40L3QuNGG0LA8L2xhYmVsPjxpbnB1dCBpZD0idGdVbiIgcGxhY2Vob2xkZXI9ItCx0YAuLCDQv9GA0L7QtNGD0LrRgtCwLCDQvtGE0LXRgNGC0LguLi4iIHZhbHVlPSLQsdGALiI+PC9kaXY+JwogICAgKyc8L2Rpdj4nCiAgICArJzxkaXYgY2xhc3M9Im1nIj4nCiAgICArJzxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KHQu9GD0LbQuNGC0LXQuzwvbGFiZWw+PHNlbGVjdCBpZD0idGdVcyI+JytELnVzZXJzLm1hcChmdW5jdGlvbih1KXtyZXR1cm4gJzxvcHRpb24gdmFsdWU9IicrdS5pZCsnIj4nK3UubmFtZSsodS5yb2xlPycgKCcrdS5yb2xlKycpJzonJykrJzwvb3B0aW9uPic7fSkuam9pbignJykrJzwvc2VsZWN0PjwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QlNCw0YLQsDwvbGFiZWw+PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJ0Z0R0IiB2YWx1ZT0iJytfdGdEYXRlKyciPjwvZGl2PicKICAgICsnPC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJtYSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzYXZlVGcoKSI+0KHRitC30LTQsNC5INGC0LDRgNCz0LXRgjwvYnV0dG9uPjwvZGl2Pic7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21iJykuaW5uZXJIVE1MPWh0bWw7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vJykuY2xhc3NMaXN0LmFkZCgnb3BlbicpOwp9Cgphc3luYyBmdW5jdGlvbiBzYXZlVGcoKXsKICB2YXIgdGl0bGU9Z3YoJ3RnVGknKTtpZighdGl0bGUpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC30LDQs9C70LDQstC40LUnLCdlcnInKTtyZXR1cm47fQogIHZhciB0dj1wYXJzZUludChndigndGdUdicpKTtpZighdHZ8fHR2PDEpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INGC0LDRgNCz0LXRgiDRgdGC0L7QudC90L7RgdGCJywnZXJyJyk7cmV0dXJuO30KICB2YXIgdXNlcklkPWd2KCd0Z1VzJyk7aWYoIXVzZXJJZCl7dG9hc3QoJ9CY0LfQsdC10YDQtdGC0LUg0YHQu9GD0LbQuNGC0LXQuycsJ2VycicpO3JldHVybjt9CiAgdmFyIHI9YXdhaXQgYWYoJ3RhcmdldHMnLCdQT1NUJyx7CiAgICB1c2VyX2lkOnVzZXJJZCwgY3JlYXRlZF9ieTpDVS5pZCwKICAgIHRpdGxlOnRpdGxlLCBkZXNjcmlwdGlvbjpndigndGdEZScpLAogICAgdGFyZ2V0X3ZhbHVlOnR2LCBjdXJyZW50X3ZhbHVlOjAsCiAgICB1bml0Omd2KCd0Z1VuJyl8fCfQsdGALicsIGRhdGU6Z3YoJ3RnRHQnKXx8X3RnRGF0ZQogIH0pOwogIGlmKHIpewogICAgY21vKCk7CiAgICB0b2FzdCgn0KLQsNGA0LPQtdGC0YrRgiDQtSDRgdGK0LfQtNCw0LTQtdC9IScsJ29rJyk7CiAgICAvLyBTZW5kIHRlbGVncmFtIG5vdGlmaWNhdGlvbgogICAgclRhcmdldHMoKTsKICB9IGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCcsJ2VycicpOwp9CgoKLy8g4pSA4pSAIFdPUksgUkVQT1JUIOKUgOKUgAphc3luYyBmdW5jdGlvbiByV29ya1JlcG9ydCgpewogIHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3JmJyk7CiAgZWwuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJsb2FkaW5nIj7Ql9Cw0YDQtdC20LTQsDwvZGl2Pic7CgogIC8vIERhdGUgcmFuZ2UgcGlja2VyCiAgdmFyIHRvZGF5PW5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICB2YXIgZmlyc3RPZk1vbnRoPXRvZGF5LnNsaWNlKDAsOCkrJzAxJzsKCiAgLy8gTG9hZCByZXBvcnQKICB2YXIgZnJvbT13aW5kb3cuX3dyRnJvbXx8Zmlyc3RPZk1vbnRoOwogIHZhciB0bz13aW5kb3cuX3dyVG98fHRvZGF5OwoKICB2YXIgZGF0YT1hd2FpdCBhZigncHJlc2VuY2VfcmVwb3J0JyxudWxsLG51bGwsJyZmcm9tPScrZnJvbSsnJnRvPScrdG8pOwogIGlmKCFkYXRhKXtlbC5pbm5lckhUTUw9JzxkaXYgc3R5bGU9InBhZGRpbmc6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpIj7QndGP0LzQsCDQtNCw0L3QvdC4INC30LAg0LjQt9Cx0YDQsNC90LjRjyDQv9C10YDQuNC+0LQ8L2Rpdj4nO3JldHVybjt9CgogIHZhciB1c2Vycz1kYXRhLnVzZXJzfHxbXTsKICB2YXIgU1RBVFVTX0xBQkVMUz17YXJyaXZlZDon0J/RgNC40YHRgtC40LPQvdCwJyxicmVhazon0J/QvtGH0LjQstC60LAnLGJhY2s6J9CS0YrRgNC90LAg0YHQtScsbGVmdDon0KLRgNGK0LPQvdCwJyx0b2lsZXQ6J9Ci0L7QsNC70LXRgtC90LAnLHNtb2tlOifQptC40LPQsNGA0LAnLHNtb2tlX2JhY2s6J9Ch0LvQtdC0INGG0LjQs9Cw0YDQsCd9OwogIHZhciBTVEFUVVNfQ09MT1JTPXthcnJpdmVkOicjMjJjNTVlJyxicmVhazonI2Y1OWUwYicsYmFjazonIzM4YmRmOCcsbGVmdDonI2VmNDQ0NCcsdG9pbGV0OicjOGI1Y2Y2JyxzbW9rZTonIzZiNzI4MCcsc21va2VfYmFjazonIzM4YmRmOCd9OwoKICAvLyBNb3RpdmF0aW9uYWwgbWVzc2FnZXMgYmFzZWQgb24gaG91cnMKICBmdW5jdGlvbiBtb3Rpdihob3VycywgZGF5c1dvcmtlZCl7CiAgICBpZihob3Vyczw9MCkgcmV0dXJuIHttc2c6J9Cd0Y/QvNCwINC30LDQv9C40YHQsNC90L4g0L/RgNC40YHRitGB0YLQstC40LUg0LfQsCDQv9C10YDQuNC+0LTQsC4nLGNvbG9yOicjNmI3MjgwJyxpY29uOifinZMnfTsKICAgIHZhciBhdmc9ZGF5c1dvcmtlZD4wP2hvdXJzL2RheXNXb3JrZWQ6MDsKICAgIGlmKGF2Zz49OCkgcmV0dXJuIHttc2c6J9Ce0YLQu9C40YfQvdC+ISDQn9GK0LvQtdC9INGA0LDQsdC+0YLQtdC9INC00LXQvSDQstGB0LXQutC4INC00LXQvS4g0JfQsNC/0LvQsNGC0LDRgtCwINGB0LUg0LjQt9GH0LjRgdC70Y/QstCwINC90LAg0LHQsNC30LAg0L7RgtGA0LDQsdC+0YLQtdC90LjRgtC1INGH0LDRgdC+0LLQtS4nLGNvbG9yOicjMjJjNTVlJyxpY29uOifwn4+GJ307CiAgICBpZihhdmc+PTcpIHJldHVybiB7bXNnOifQnNC90L7Qs9C+INC00L7QsdGA0LUhINCf0L7Rh9GC0Lgg0L/RitC70L3QuCDRgNCw0LHQvtGC0L3QuCDQtNC90LguINCf0YDQvtC00YrQu9C20LDQstCw0Lkg0YLQsNC60LAhJyxjb2xvcjonIzIyYzU1ZScsaWNvbjon4q2QJ307CiAgICBpZihhdmc+PTYpIHJldHVybiB7bXNnOifQlNC+0LHRgNC1LiDQmNC80LAg0LzRj9GB0YLQviDQt9CwINC/0L7QtNC+0LHRgNC10L3QuNC1IOKAlCDQv9GK0LvQvdC40Y/RgiDRgNCw0LHQvtGC0LXQvSDQtNC10L0g0LUgOCDRh9Cw0YHQsC4nLGNvbG9yOicjZjU5ZTBiJyxpY29uOifwn5GNJ307CiAgICBpZihhdmc+PTQpIHJldHVybiB7bXNnOifQn9C+0LQg0YHRgNC10LTQvdC+0YLQvi4g0JfQsNC/0LvQsNGC0LDRgtCwINGB0LUg0LLQu9C40Y/QtSDQvtGCINC+0YLRgNCw0LHQvtGC0LXQvdC40YLQtSDRh9Cw0YHQvtCy0LUuJyxjb2xvcjonI2Y1OWUwYicsaWNvbjon4pqg77iPJ307CiAgICByZXR1cm4ge21zZzon0J3QtdC00L7RgdGC0LDRgtGK0YfQvdC+INC/0YDQuNGB0YrRgdGC0LLQuNC1LiDQnNC+0LvRjywg0YHQv9Cw0LfQstCw0LnRgtC1INGA0LDQsdC+0YLQvdC+0YLQviDQstGA0LXQvNC1LicsY29sb3I6JyNlZjQ0NDQnLGljb246J+KdjCd9OwogIH0KCiAgLy8gU3VtbWFyeSBjYXJkcwogIHZhciB0b3RhbEhvdXJzPXVzZXJzLnJlZHVjZShmdW5jdGlvbihzLHUpe3JldHVybiBzK3UudG90YWxfaG91cnM7fSwwKTsKICB2YXIgc3VtbWFyeT0nPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNjBweCwxZnIpKTtnYXA6MTBweDttYXJnaW4tYm90dG9tOjIwcHgiPicKICAgICsnPGRpdiBjbGFzcz0ia2MiPjxkaXYgY2xhc3M9ImtsIj7Qn9C10YDQuNC+0LQ8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLW1vKSI+Jytmcm9tKyc8YnI+Jyt0bysnPC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCh0LvRg9C20LjRgtC10LvQuDwvZGl2PjxkaXYgY2xhc3M9Imt2IGFjIj4nK3VzZXJzLmxlbmd0aCsnPC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJrYyI+PGRpdiBjbGFzcz0ia2wiPtCe0LHRidC+INGH0LDRgdCwPC9kaXY+PGRpdiBjbGFzcz0ia3YgZyI+Jyt0b3RhbEhvdXJzLnRvRml4ZWQoMSkrJ9GHPC9kaXY+PC9kaXY+JwogICAgKyc8L2Rpdj4nOwoKICAvLyBEYXRlIHJhbmdlIHBpY2tlcgogIHZhciBwaWNrZXI9JzxkaXYgY2xhc3M9InBhbmVsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij48ZGl2IGNsYXNzPSJwaCI+PGRpdiBjbGFzcz0icHQiPvCfk4Ug0J/QtdGA0LjQvtC0PC9kaXY+PC9kaXY+JwogICAgKyc8ZGl2IHN0eWxlPSJwYWRkaW5nOjEzcHggMTdweDtkaXNwbGF5OmZsZXg7Z2FwOjEycHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj4nCiAgICArJzxkaXY+PGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNmVtIj7QntGCPC9sYWJlbD4nCiAgICArJzxpbnB1dCB0eXBlPSJkYXRlIiBpZD0id3JGcm9tIiB2YWx1ZT0iJytmcm9tKyciIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjdweCAxMHB4O2NvbG9yOnZhcigtLXR4KTtmb250LWZhbWlseTp2YXIoLS1mbik7Zm9udC1zaXplOjEycHg7b3V0bGluZTpub25lIj48L2Rpdj4nCiAgICArJzxkaXY+PGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNmVtIj7QlNC+PC9sYWJlbD4nCiAgICArJzxpbnB1dCB0eXBlPSJkYXRlIiBpZD0id3JUbyIgdmFsdWU9IicrdG8rJyIgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6N3B4IDEwcHg7Y29sb3I6dmFyKC0tdHgpO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTJweDtvdXRsaW5lOm5vbmUiPjwvZGl2PicKICAgICsnPGJ1dHRvbiBjbGFzcz0iYnRuIHAiIHN0eWxlPSJtYXJnaW4tdG9wOjE4cHgiIG9uY2xpY2s9IndyVXBkYXRlKCkiPtCe0LHQvdC+0LLQuDwvYnV0dG9uPicKICAgICsnPGJ1dHRvbiBjbGFzcz0iYnRuIiBzdHlsZT0ibWFyZ2luLXRvcDoxOHB4IiBvbmNsaWNrPSJ3clRoaXNNb250aCgpIj7QotC10LrRg9GJINC80LXRgdC10YY8L2J1dHRvbj4nCiAgICArJzxidXR0b24gY2xhc3M9ImJ0biIgc3R5bGU9Im1hcmdpbi10b3A6MThweCIgb25jbGljaz0id3JMYXN0NygpIj7Qn9C+0YHQu9C10LTQvdC40YLQtSA3INC00L3QuDwvYnV0dG9uPicKICAgICsnPC9kaXY+PC9kaXY+JzsKCiAgLy8gVXNlciBjYXJkcwogIHZhciBjYXJkcz11c2Vycy5tYXAoZnVuY3Rpb24odSl7CiAgICB2YXIgbT1tb3Rpdih1LnRvdGFsX2hvdXJzLCB1LmRheXNfd29ya2VkKTsKICAgIHZhciBjb2w9dS5jb2xvcnx8J2F2LXAnOwogICAgdmFyIGF2Z0g9dS5kYXlzX3dvcmtlZD4wPyh1LnRvdGFsX2hvdXJzL3UuZGF5c193b3JrZWQpLnRvRml4ZWQoMSk6MDsKCiAgICAvLyBEYWlseSBicmVha2Rvd24KICAgIHZhciBkYXlzPU9iamVjdC5rZXlzKHUuZGF5c3x8e30pLnNvcnQoKS5tYXAoZnVuY3Rpb24oZGF0ZSl7CiAgICAgIHZhciBkYXk9dS5kYXlzW2RhdGVdOwogICAgICBpZighZGF5LndvcmtfbWludXRlcyYmIWRheS50aW1lbGluZS5sZW5ndGgpIHJldHVybiAnJzsKICAgICAgdmFyIGRheU5hbWU9bmV3IERhdGUoZGF0ZSsnVDEyOjAwOjAwJykudG9Mb2NhbGVEYXRlU3RyaW5nKCdiZy1CRycse3dlZWtkYXk6J3Nob3J0JyxkYXk6J251bWVyaWMnLG1vbnRoOidzaG9ydCd9KTsKICAgICAgdmFyIHRpbWVsaW5lPWRheS50aW1lbGluZS5tYXAoZnVuY3Rpb24oZSl7CiAgICAgICAgdmFyIHNjPVNUQVRVU19DT0xPUlNbZS5zdGF0dXNdfHwnIzg4OCc7CiAgICAgICAgcmV0dXJuICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHg7YmFja2dyb3VuZDonK3NjKycxODtjb2xvcjonK3NjKyc7cGFkZGluZzoycHggNnB4O2JvcmRlci1yYWRpdXM6MTBweDtmb250LXdlaWdodDo2MDAiPicrZS50aW1lKycgJysoU1RBVFVTX0xBQkVMU1tlLnN0YXR1c118fGUuc3RhdHVzKSsnPC9zcGFuPic7CiAgICAgIH0pLmpvaW4oJyDihpIgJyk7CiAgICAgIHZhciBoPWRheS53b3JrX2hvdXJzOwogICAgICB2YXIgYmFyVz1NYXRoLm1pbihoLzgqMTAwLDEwMCk7CiAgICAgIHZhciBiYXJDPWg+PTg/JyMyMmM1NWUnOmg+PTY/JyMzOGJkZjgnOmg+PTQ/JyNmNTllMGInOicjZWY0NDQ0JzsKICAgICAgcmV0dXJuICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjhweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCkiPicKICAgICAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbTo1cHgiPicKICAgICAgICArJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tdHgyKSI+JytkYXlOYW1lKyc8L3NwYW4+JwogICAgICAgICsnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LWZhbWlseTp2YXIoLS1tbyk7Y29sb3I6JytiYXJDKyciPicraCsn0Yc8L3NwYW4+JwogICAgICAgICsnPC9kaXY+JwogICAgICAgICsnPGRpdiBzdHlsZT0iaGVpZ2h0OjVweDtiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlci1yYWRpdXM6M3B4O292ZXJmbG93OmhpZGRlbjttYXJnaW4tYm90dG9tOjVweCI+JwogICAgICAgICsnPGRpdiBzdHlsZT0iaGVpZ2h0OjEwMCU7d2lkdGg6JytiYXJXKyclO2JhY2tncm91bmQ6JytiYXJDKyc7Ym9yZGVyLXJhZGl1czozcHg7dHJhbnNpdGlvbjp3aWR0aCAuNHMgZWFzZSI+PC9kaXY+JwogICAgICAgICsnPC9kaXY+JwogICAgICAgICsnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo0cHg7ZmxleC13cmFwOndyYXAiPicrdGltZWxpbmUrJzwvZGl2PicKICAgICAgICArKGRheS50b2lsZXRfY291bnQ+MD8nPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjNweCI+8J+avSDDlycrZGF5LnRvaWxldF9jb3VudCsnPC9kaXY+JzonJykKICAgICAgICArJzwvZGl2Pic7CiAgICB9KS5qb2luKCcnKTsKCiAgICByZXR1cm4gJzxkaXYgY2xhc3M9InBhbmVsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij4nCiAgICAgICsnPGRpdiBjbGFzcz0icGgiPicKICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4Ij4nCiAgICAgICsnPGRpdiBjbGFzcz0iYXYgJytjb2wrJyIgc3R5bGU9IndpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Zm9udC1zaXplOjE0cHgiPicrKHUuaW5pdGlhbHN8fCc/JykrJzwvZGl2PicKICAgICAgKyc8ZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS10eCkiPicrdS5uYW1lKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKSI+Jyt1LmRheXNfd29ya2VkKycg0YDQsNCx0L7RgtC90Lgg0LTQvdC4IMK3INGB0YDQtdC00L3QviAnK2F2Z0grJ9GHL9C00LXQvTwvZGl2PjwvZGl2PicKICAgICAgKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+JwogICAgICArJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LWZhbWlseTp2YXIoLS1tbyk7Y29sb3I6dmFyKC0tYWNjMikiPicrdS50b3RhbF9ob3Vycysn0Yc8L2Rpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKSI+0L7QsdGJ0L4g0LfQsCDQv9C10YDQuNC+0LTQsDwvZGl2PicKICAgICAgKyc8L2Rpdj4nCiAgICAgICsnPC9kaXY+JwogICAgICAvLyBNb3RpdmF0aW9uYWwgbWVzc2FnZQogICAgICArJzxkaXYgc3R5bGU9Im1hcmdpbjoxMnB4IDE3cHg7cGFkZGluZzoxMnB4IDE2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6JyttLmNvbG9yKycxMjtib3JkZXI6MXB4IHNvbGlkICcrbS5jb2xvcisnMzM7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjEwcHgiPicKICAgICAgKyc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjE4cHg7ZmxleC1zaHJpbms6MCI+JyttLmljb24rJzwvc3Bhbj4nCiAgICAgICsnPGRpdj4nCiAgICAgICsnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOicrbS5jb2xvcisnO21hcmdpbi1ib3R0b206M3B4Ij7QntGG0LXQvdC60LAg0LfQsCDQv9C10YDQuNC+0LTQsDwvZGl2PicKICAgICAgKyc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10eDIpO2xpbmUtaGVpZ2h0OjEuNiI+JyttLm1zZysnPC9kaXY+JwogICAgICArJzwvZGl2PicKICAgICAgKyc8L2Rpdj4nCiAgICAgIC8vIEhvdXJzIGJhcgogICAgICArJzxkaXYgc3R5bGU9InBhZGRpbmc6MCAxN3B4IDEycHgiPicKICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Zm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tYm90dG9tOjVweCI+JwogICAgICArJzxzcGFuPtCe0YLRgNCw0LHQvtGC0LXQvdC4INGH0LDRgdCwPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTp2YXIoLS1tbykiPicrdS50b3RhbF9ob3Vycysn0YcgLyAnKyggdS5kYXlzX3dvcmtlZCo4KSsn0Ycg0L7Rh9Cw0LrQstCw0L3QuDwvc3Bhbj4nCiAgICAgICsnPC9kaXY+JwogICAgICArJzxkaXYgc3R5bGU9ImhlaWdodDo4cHg7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzpoaWRkZW4iPicKICAgICAgKyc8ZGl2IHN0eWxlPSJoZWlnaHQ6MTAwJTt3aWR0aDonK01hdGgubWluKHUudG90YWxfaG91cnMvKE1hdGgubWF4KHUuZGF5c193b3JrZWQsMSkqOCkqMTAwLDEwMCkrJyU7YmFja2dyb3VuZDp2YXIoLS1ncm4pO2JvcmRlci1yYWRpdXM6NHB4O3RyYW5zaXRpb246d2lkdGggLjVzIGVhc2UiPjwvZGl2PicKICAgICAgKyc8L2Rpdj4nCiAgICAgICsnPC9kaXY+JwogICAgICAvLyBEYWlseSBicmVha2Rvd24gdG9nZ2xlCiAgICAgICsoZGF5cz8nPGRldGFpbHMgc3R5bGU9InBhZGRpbmc6MCAxN3B4IDE0cHgiPjxzdW1tYXJ5IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1hY2MyKTtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjZweCAwO2ZvbnQtd2VpZ2h0OjYwMCI+0JLQuNC2INC00L3QtdCy0LXQvSDRgNCw0LfQsdC40LLQutCwIOKWvjwvc3VtbWFyeT48ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+JytkYXlzKyc8L2Rpdj48L2RldGFpbHM+JzonJykKICAgICAgKyc8L2Rpdj4nOwogIH0pLmpvaW4oJycpOwoKICAvLyBTYWxhcnkgbm90ZQogIHZhciBzYWxhcnlOb3RlPSc8ZGl2IGNsYXNzPSJwYW5lbCIgc3R5bGU9Im1hcmdpbi10b3A6NHB4Ij4nCiAgICArJzxkaXYgY2xhc3M9InBoIj48ZGl2IGNsYXNzPSJwdCI+8J+SoSDQmNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC30LDQv9C70LDRidCw0L3QtdGC0L48L2Rpdj48L2Rpdj4nCiAgICArJzxkaXYgc3R5bGU9InBhZGRpbmc6MTZweCAyMHB4O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXR4Mik7bGluZS1oZWlnaHQ6MS44Ij4nCiAgICArJ9CX0LDQv9C70LDRgtCw0YLQsCDQvdCwINCy0YHQtdC60Lgg0YHQu9GD0LbQuNGC0LXQuyDRgdC1INC40LfRh9C40YHQu9GP0LLQsCDQvdCwINCx0LDQt9CwIDxzdHJvbmcgc3R5bGU9ImNvbG9yOnZhcigtLXR4KSI+0YDQtdCw0LvQvdC+INC+0YLRgNCw0LHQvtGC0LXQvdC40YLQtSDRh9Cw0YHQvtCy0LU8L3N0cm9uZz4g0LfQsCDQvNC10YHQtdGG0LAsINC+0YLRh9C10YLQtdC90Lgg0YfRgNC10Lcg0YHQuNGB0YLQtdC80LDRgtCwINC30LAg0L/RgNC40YHRitGB0YLQstC40LUuPGJyPjxicj4nCiAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjAwcHgsMWZyKSk7Z2FwOjEwcHg7bWFyZ2luLXRvcDoxMHB4Ij4nCiAgICArJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTJweCAxNHB4Ij48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZ3JuKTttYXJnaW4tYm90dG9tOjRweCI+8J+PhiDQntGC0LvQuNGH0L3QviAo4omlONGHL9C00LXQvSk8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDIpIj7Qn9GK0LvQvdCwINC30LDQv9C70LDRgtCwICsg0LHQvtC90YPRgTwvZGl2PjwvZGl2PicKICAgICsnPGRpdiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1iZGltKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMnB4IDE0cHgiPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1ibHUpO21hcmdpbi1ib3R0b206NHB4Ij7irZAg0JTQvtCx0YDQtSAoNy040Ycv0LTQtdC9KTwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MikiPtCf0YrQu9C90LAg0LfQsNC/0LvQsNGC0LA8L2Rpdj48L2Rpdj4nCiAgICArJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tYWRpbSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTJweCAxNHB4Ij48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tYW1iKTttYXJnaW4tYm90dG9tOjRweCI+4pqg77iPINCh0YDQtdC00L3QviAoNi030Ycv0LTQtdC9KTwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXR4MikiPtCX0LDQv9C70LDRgtCwIC0xMCU8L2Rpdj48L2Rpdj4nCiAgICArJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tcmRpbSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTJweCAxNHB4Ij48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tcmVkKTttYXJnaW4tYm90dG9tOjRweCI+4p2MINCf0L7QtCDQvdC+0YDQvNCwICg8NtGHL9C00LXQvSk8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDIpIj7Ql9Cw0L/Qu9Cw0YLQsCDQv9GA0L7Qv9C+0YDRhtC40L7QvdCw0LvQvdCwINC90LAg0YfQsNGB0L7QstC10YLQtTwvZGl2PjwvZGl2PicKICAgICsnPC9kaXY+JwogICAgKyc8L2Rpdj48L2Rpdj4nOwoKICBpZighdXNlcnMubGVuZ3RoKXsKICAgIGVsLmlubmVySFRNTD1waWNrZXIrJzxkaXYgc3R5bGU9InBhZGRpbmc6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToxM3B4Ij7QndGP0LzQsCDQtNCw0L3QvdC4INC30LAg0LjQt9Cx0YDQsNC90LjRjyDQv9C10YDQuNC+0LQuPGJyPtCh0LvRg9C20LjRgtC10LvQuNGC0LUg0YLRgNGP0LHQstCwINC00LAg0L7RgtCx0LXQu9GP0LfQstCw0YIg0L/RgNC40YHRitGB0YLQstC40LUuPC9kaXY+JzsKICAgIHJldHVybjsKICB9CgogIGVsLmlubmVySFRNTD1waWNrZXIrc3VtbWFyeStjYXJkcytzYWxhcnlOb3RlOwp9CgoKZnVuY3Rpb24gclJlcG9ydHMoKXsKICB2YXIgbXM9e307RC5wcm9qZWN0cy5mb3JFYWNoKGZ1bmN0aW9uKHApe2lmKHAuc3RhcnRfZGF0ZSl7dmFyIG09cC5zdGFydF9kYXRlLnNsaWNlKDAsNyk7bXNbbV09KG1zW21dfHwwKStOdW1iZXIocC50b3RhbHx8MCk7fX0pOwogIHZhciBtaz1PYmplY3Qua2V5cyhtcykuc29ydCgpLnNsaWNlKC02KTt2YXIgbW09TWF0aC5tYXguYXBwbHkobnVsbCxtay5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIG1zW2tdO30pLmNvbmNhdChbMV0pKTsKICB2YXIgbW4yPVsnJywn0K/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+JwogICAgKyc8ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCg0L7Qu9GPINCyINGB0LjRgdGC0LXQvNCw0YLQsDwvbGFiZWw+PHNlbGVjdCBpZD0idUEiPjxvcHRpb24gdmFsdWU9IjAiJysodSYmdS5pc19hZG1pbiE9MT8nIHNlbGVjdGVkJzonJykrJz7wn5GkINCh0LvRg9C20LjRgtC10Ls8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxIicrKHUmJnUuaXNfYWRtaW49PTE/JyBzZWxlY3RlZCc6JycpKyc+8J+RkSDQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PicKICAgICsnPGRpdiBjbGFzcz0ibWEiPicrKHU/JzxidXR0b24gY2xhc3M9ImJ0biBkIiBvbmNsaWNrPSJkVShcJycrdS5pZCsnXCcpIj7QmNC30YLRgNC40Lk8L2J1dHRvbj4nOicnKSsnPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSInKyh1PydzVShcJycrdS5pZCsnXCcpJzonc1UoKScpKyciPtCX0LDQv9Cw0LfQuDwvYnV0dG9uPjwvZGl2Pic7Cn0KCnZhciBNTD17CiAgcHJvamVjdDpmdW5jdGlvbihwKXsKICAgIHJldHVybiAnPGgzPicrKHA/J9Cg0LXQtNCw0LrRgtC40YDQsNC5INC/0YDQvtC10LrRgic6Jysg0J3QvtCyINC/0YDQvtC10LrRgicpKyc8L2gzPicKICAgICAgKyc8ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCd0LDQt9Cy0LDQvdC40LU8L2xhYmVsPjxpbnB1dCBpZD0ibU4iIHZhbHVlPSInKyhwP2VzYyhwLm5hbWUpOicnKSsnIiBwbGFjZWhvbGRlcj0i0JrQu9C40LXQvdGCIOKAlCDRg9GB0LvRg9Cz0LAiPjwvZGl2PicKICAgICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmtC70LjQtdC90YI8L2xhYmVsPjxpbnB1dCBpZD0ibUNsIiB2YWx1ZT0iJysocD9lc2MocC5jbGllbnR8fCcnKTonJykrJyIgcGxhY2Vob2xkZXI9ItCY0LLQsNC9INCY0LLQsNC90L7QsiI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QotC10LvQtdGE0L7QvS9FbWFpbDwvbGFiZWw+PGlucHV0IGlkPSJtUGgiIHZhbHVlPSInKyhwP2VzYyhwLnBob25lfHwnJyk6JycpKyciIHBsYWNlaG9sZGVyPSIwOHh4IHh4eCB4eHgiPjwvZGl2PjwvZGl2PicKICAgICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QktC40LQg0YPRgdC70YPQs9CwPC9sYWJlbD48c2VsZWN0IGlkPSJtU3YiPicrU08rJzwvc2VsZWN0PjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KHRgtCw0YLRg9GBPC9sYWJlbD48c2VsZWN0IGlkPSJtU3QiPjxvcHRpb24gdmFsdWU9Im5ldyInKyhwJiZwLnN0YXR1cz09PSduZXcnPycgc2VsZWN0ZWQnOicnKSsnPtCd0L7Qsjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImFjdGl2ZSInKyhwJiZwLnN0YXR1cz09PSdhY3RpdmUnPycgc2VsZWN0ZWQnOicnKSsnPtCSINC/0YDQvtGG0LXRgTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InJldmlldyInKyhwJiZwLnN0YXR1cz09PSdyZXZpZXcnPycgc2VsZWN0ZWQnOicnKSsnPtCg0LXQstC40LfQuNGPPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0icGF1c2VkIicrKHAmJnAuc3RhdHVzPT09J3BhdXNlZCc/JyBzZWxlY3RlZCc6JycpKyc+0J/QsNGD0LfQsDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImRvbmUiJysocCYmcC5zdGF0dXM9PT0nZG9uZSc/JyBzZWxlY3RlZCc6JycpKyc+0JfQsNCy0YrRgNGI0LXQvTwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvZGl2PicKICAgICAgKyc8ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QodGD0LzQsCAo4oKsKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgc3RlcD0iMC4wMSIgaWQ9Im1UbyIgdmFsdWU9IicrKHA/cC50b3RhbHx8Jyc6JycpKyciIHBsYWNlaG9sZGVyPSIwLjAwIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCf0L7Qu9GD0YfQtdC90L4gKOKCrCk8L2xhYmVsPjxpbnB1dCB0eXBlPSJudW1iZXIiIHN0ZXA9IjAuMDEiIGlkPSJtUmMiIHZhbHVlPSInKyhwP3AucmVjZWl2ZWR8fCcnOicnKSsnIiBwbGFjZWhvbGRlcj0iMC4wMCI+PC9kaXY+PC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCd0LDRh9Cw0LvQvjwvbGFiZWw+PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJtU3QyIiB2YWx1ZT0iJysocD9wLnN0YXJ0X2RhdGV8fCcnOicnKSsnIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCa0YDQsNC10L0g0YHRgNC+0Lo8L2xhYmVsPjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0ibURsIiB2YWx1ZT0iJysocD9wLmRlYWRsaW5lfHwnJzonJykrJyI+PC9kaXY+PC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCd0LDQv9GA0LXQtNGK0LogJTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjEwMCIgaWQ9Im1QciIgdmFsdWU9IicrKHA/cC5wcm9ncmVzc3x8MDowKSsnIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCe0YLQs9C+0LLQvtGA0L3QuNC6PC9sYWJlbD48c2VsZWN0IGlkPSJtQXMiPicrdE8oKSsnPC9zZWxlY3Q+PC9kaXY+PC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCi0LDQs9C+0LLQtSAo0LfQsNC/0LXRgtCw0Y8pPC9sYWJlbD48aW5wdXQgaWQ9Im1UZyIgdmFsdWU9IicrKHAmJnAudGFncz9wLnRhZ3Muam9pbignLCAnKTonJykrJyIgcGxhY2Vob2xkZXI9IldvcmRQcmVzcywgU0VPLCDQlNC40LfQsNC50L0iPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JDQsdC+0L3QsNC80LXQvdGCPC9sYWJlbD48c2VsZWN0IGlkPSJtUnIiPjxvcHRpb24gdmFsdWU9IiI+0JXQtNC90L7QutGA0LDRgtC90L48L29wdGlvbj48b3B0aW9uIHZhbHVlPSLQvNC10YEiJysocCYmcC5yZWN1cnJpbmc9PT0n0LzQtdGBJz8nIHNlbGVjdGVkJzonJykrJz7QnNC10YHQtdGH0L3Qvjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ItCz0L7QtCInKyhwJiZwLnJlY3VycmluZz09PSfQs9C+0LQnPycgc2VsZWN0ZWQnOicnKSsnPtCT0L7QtNC40YjQvdC+PC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+PC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JHQtdC70LXQttC60Lg8L2xhYmVsPjx0ZXh0YXJlYSByb3dzPSIyIiBpZD0ibU50Ij4nKyhwP2VzYyhwLm5vdGVzfHwnJyk6JycpKyc8L3RleHRhcmVhPjwvZGl2PicKICAgICAgKyc8ZGl2IGNsYXNzPSJtYSI+JysocD8nPGJ1dHRvbiBjbGFzcz0iYnRuIGQiIG9uY2xpY2s9ImRQcmooXCcnK3AuaWQrJ1wnKSI+0JjQt9GC0YDQuNC5PC9idXR0b24+JzonJykrJzxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY21vKCkiPtCe0YLQutCw0Lc8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0iJysocD8nc1ByaihcJycrcC5pZCsnXCcpJzonc1ByaigpJykrJyI+0JfQsNC/0LDQt9C4PC9idXR0b24+PC9kaXY+JzsKICB9LAogIHRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gJzxoMz4rINCd0L7QstCwINC30LDQtNCw0YfQsDwvaDM+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QntC/0LjRgdCw0L3QuNC1PC9sYWJlbD48aW5wdXQgaWQ9InRUeCIgcGxhY2Vob2xkZXI9ItCa0LDQutCy0L4g0YLRgNGP0LHQstCwINC00LAg0YHQtSDQvdCw0L/RgNCw0LLQuD8iPjwvZGl2PjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCe0YLQs9C+0LLQvtGA0L3QuNC6PC9sYWJlbD48c2VsZWN0IGlkPSJ0QXMiPicrdE8oKSsnPC9zZWxlY3Q+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9GA0LjQvtGA0LjRgtC10YI8L2xhYmVsPjxzZWxlY3QgaWQ9InRVciI+PG9wdGlvbiB2YWx1ZT0iMCI+0J3QvtGA0LzQsNC70LXQvTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjEiPtCh0L/QtdGI0LXQvSDimqA8L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtYSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzVGFzaygpIj7QlNC+0LHQsNCy0Lg8L2J1dHRvbj48L2Rpdj4nO30sCiAgY2FsVGFzazpmdW5jdGlvbihkcyl7cmV0dXJuICc8aDM+KyDQl9Cw0LTQsNGH0LAg0YEg0LTQsNGC0LA8L2gzPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J7Qv9C40YHQsNC90LjQtTwvbGFiZWw+PGlucHV0IGlkPSJjdFR4IiBwbGFjZWhvbGRlcj0i0JrQsNC60LLQviDRgtGA0Y/QsdCy0LAg0LTQsCDRgdC1INC90LDQv9GA0LDQstC4PyI+PC9kaXY+PGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JTQsNGC0LA8L2xhYmVsPjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY3REdCIgdmFsdWU9IicrKGRzfHxuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCkpKyciPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KfQsNGBICjQv9C+INC40LfQsdC+0YApPC9sYWJlbD48aW5wdXQgdHlwZT0idGltZSIgaWQ9ImN0VG0iPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCe0YLQs9C+0LLQvtGA0L3QuNC6PC9sYWJlbD48c2VsZWN0IGlkPSJjdEFzIj4nK3RPKCkrJzwvc2VsZWN0PjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J/RgNC40L7RgNC40YLQtdGCPC9sYWJlbD48c2VsZWN0IGlkPSJjdFVyIj48b3B0aW9uIHZhbHVlPSIwIj7QndC+0YDQvNCw0LvQtdC9PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMSI+0KHQv9C10YjQtdC9IOKaoDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1hIj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImNtbygpIj7QntGC0LrQsNC3PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9InNDYWxUYXNrKCkiPtCU0L7QsdCw0LLQuDwvYnV0dG9uPjwvZGl2Pic7fSwKICBub3RlOmZ1bmN0aW9uKCl7cmV0dXJuICc8aDM+KyDQndC+0LLQsCDQsdC10LvQtdC20LrQsDwvaDM+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Ql9Cw0LPQu9Cw0LLQuNC1PC9sYWJlbD48aW5wdXQgaWQ9Im5UaSIgcGxhY2Vob2xkZXI9ItCR0LXQu9C10LbQutCwINC30LAg0L/RgNC+0LXQutGCIC8g0LrQu9C40LXQvdGCIj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCi0LXQutGB0YI8L2xhYmVsPjx0ZXh0YXJlYSByb3dzPSI0IiBpZD0ibkJvIiBwbGFjZWhvbGRlcj0i0JTQtdGC0LDQudC70LgsINGD0LPQvtCy0L7RgNC60LguLi4iPjwvdGV4dGFyZWE+PC9kaXY+PGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JDQstGC0L7RgDwvbGFiZWw+PHNlbGVjdCBpZD0ibkF1Ij4nK3RPKCkrJzwvc2VsZWN0PjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KHQv9C10YjQvdCwPzwvbGFiZWw+PHNlbGVjdCBpZD0iblVyIj48b3B0aW9uIHZhbHVlPSIwIj7QndC1PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMSI+0JTQsCDimqA8L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtYSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjbW8oKSI+0J7RgtC60LDQtzwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzTm90ZSgpIj7Ql9Cw0L/QsNC30Lg8L2J1dHRvbj48L2Rpdj4nO30sCiAgY2xpZW50OmZ1bmN0aW9uKCl7cmV0dXJuICc8aDM+KyDQndC+0LIg0LrQu9C40LXQvdGCPC9oMz48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmNC80LXQvdCwPC9sYWJlbD48aW5wdXQgaWQ9ImNObSIgcGxhY2Vob2xkZXI9ItCY0LLQsNC9INCY0LLQsNC90L7QsiI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QpNC40YDQvNCwPC9sYWJlbD48aW5wdXQgaWQ9ImNDbyIgcGxhY2Vob2xkZXI9ItCk0LjRgNC80LAg0JXQntCe0JQiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPkVtYWlsPC9sYWJlbD48aW5wdXQgdHlwZT0iZW1haWwiIGlkPSJjRW0iPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KLQtdC70LXRhNC+0L08L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZWwiIGlkPSJjUGgiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JXQmNCaPC9sYWJlbD48aW5wdXQgaWQ9ImNFayIgcGxhY2Vob2xkZXI9IjEyMzQ1Njc4OSI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QkdC10LvQtdC20LrQuDwvbGFiZWw+PHRleHRhcmVhIHJvd3M9IjIiIGlkPSJjTnQiPjwvdGV4dGFyZWE+PC9kaXY+PGRpdiBjbGFzcz0ibWEiPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY21vKCkiPtCe0YLQutCw0Lc8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ic0NsaSgpIj7Ql9Cw0L/QsNC30Lg8L2J1dHRvbj48L2Rpdj4nO30sCiAgaG9zdGluZzpmdW5jdGlvbigpe3JldHVybiAnPGgzPisg0J3QvtCyINGF0L7RgdGC0LjQvdCzPC9oMz48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QlNC+0LzQtdC50L08L2xhYmVsPjxpbnB1dCBpZD0iaERvIiBwbGFjZWhvbGRlcj0iZXhhbXBsZS5jb20iPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JrQu9C40LXQvdGCPC9sYWJlbD48aW5wdXQgaWQ9ImhDbCI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ibWciPjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0KHRitGA0LLRitGAPC9sYWJlbD48aW5wdXQgaWQ9ImhTciIgcGxhY2Vob2xkZXI9InNydjEud2VidHJpeGlhLmNvbSI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QotC40L88L2xhYmVsPjxzZWxlY3QgaWQ9ImhUeSI+PG9wdGlvbj5jUGFuZWw8L29wdGlvbj48b3B0aW9uPkV4dGVybjwvb3B0aW9uPjxvcHRpb24+VlBTPC9vcHRpb24+PG9wdGlvbj5TaGFyZWQ8L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtZyI+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QlNC40YHQujwvbGFiZWw+PGlucHV0IGlkPSJoRGkiIHBsYWNlaG9sZGVyPSIyLzEwR0IiPjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0J/Qu9Cw0L08L2xhYmVsPjxzZWxlY3QgaWQ9ImhQbCI+PG9wdGlvbj5TdGFydGVyPC9vcHRpb24+PG9wdGlvbj5CdXNpbmVzczwvb3B0aW9uPjxvcHRpb24+UHJvPC9vcHRpb24+PG9wdGlvbj5TaGFyZWQ8L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPlNTTCDQuNC30YLQuNGH0LA8L2xhYmVsPjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iaFNzbCI+PC9kaXY+PGRpdiBjbGFzcz0ibWEiPjxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0iY21vKCkiPtCe0YLQutCw0Lc8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gcCIgb25jbGljaz0ic0hvc3QoKSI+0JfQsNC/0LDQt9C4PC9idXR0b24+PC9kaXY+Jzt9LAogIHBhc3N3b3JkOmZ1bmN0aW9uKCl7CiAgICB2YXIgcD1QVy5lZGl0SWQ/RC5wYXNzd29yZHMuZmluZChmdW5jdGlvbih4KXtyZXR1cm4geC5pZD09PVBXLmVkaXRJZDt9KTpudWxsOwogICAgdmFyIGNsPShwJiZwLmNsaWVudCl8fFBXLmZvcm1DbGllbnR8fCcnOwogICAgdmFyIG9wdHM9RC5jbGllbnRzLm1hcChmdW5jdGlvbihjKXt2YXIgbj1lc2MoYy5jb21wYW55fHxjLm5hbWV8fCcnKTtyZXR1cm4gJzxvcHRpb24gdmFsdWU9IicrbisnIj48L29wdGlvbj4nO30pLmpvaW4oJycpOwogICAgcmV0dXJuICc8aDM+JysocD8n0KDQtdC00LDQutGC0LjRgNCw0Lkg0LTQvtGB0YLRitC/JzonKyDQndC+0LIg0LTQvtGB0YLRitC/JykrJzwvaDM+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QmtC70LjQtdC90YI8L2xhYmVsPjxpbnB1dCBpZD0icENsIiBsaXN0PSJwQ2xpZW50TGlzdCIgdmFsdWU9IicrZXNjKGNsKSsnIiBwbGFjZWhvbGRlcj0i0JjQt9Cx0LXRgNC4INC40LvQuCDQstGK0LLQtdC00Lgg0LrQu9C40LXQvdGCIj48ZGF0YWxpc3QgaWQ9InBDbGllbnRMaXN0Ij4nK29wdHMrJzwvZGF0YWxpc3Q+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7QodCw0LnRgiAvINCj0YHQu9GD0LPQsDwvbGFiZWw+PGlucHV0IGlkPSJwU2kiIHZhbHVlPSInKyhwP2VzYyhwLnNpdGV8fCcnKTonJykrJyIgcGxhY2Vob2xkZXI9ImV4YW1wbGUuY29tIOKAlCBjUGFuZWwiPjwvZGl2PjxkaXYgY2xhc3M9Im1nIj48ZGl2IGNsYXNzPSJtZiI+PGxhYmVsPtCf0L7RgtGA0LXQsdC40YLQtdC7PC9sYWJlbD48aW5wdXQgaWQ9InBVcyIgdmFsdWU9IicrKHA/ZXNjKHAudXNlcm5hbWV8fCcnKTonJykrJyI+PC9kaXY+PGRpdiBjbGFzcz0ibWYiPjxsYWJlbD7Qn9Cw0YDQvtC70LA8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icFB3IiB2YWx1ZT0iJysocD9lc2MocC5wYXNzfHwnJyk6JycpKyciPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im1mIj48bGFiZWw+0JrQsNGC0LXQs9C+0YDQuNGPPC9sYWJlbD48c2VsZWN0IGlkPSJwQ2EiPjxvcHRpb24gdmFsdWU9Imhvc3RpbmciJysocCYmcC5jYXRlZ29yeT09PSdob3N0aW5nJz8nIHNlbGVjdGVkJzonJykrJz7QpdC+0YHRgtC40L3Qszwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IndvcmRwcmVzcyInKyhwJiZwLmNhdGVnb3J5PT09J3dvcmRwcmVzcyc/JyBzZWxlY3RlZCc6JycpKyc+V29yZFByZXNzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZ29vZ2xlIicrKHAmJnAuY2F0ZWdvcnk9PT0nZ29vZ2xlJz8nIHNlbGVjdGVkJzonJykrJz5Hb29nbGU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJzb2NpYWwiJysocCYmcC5jYXRlZ29yeT09PSdzb2NpYWwnPycgc2VsZWN0ZWQnOicnKSsnPtCh0L7RhtC40LDQu9C90Lgg0LzRgNC10LbQuDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImRucyInKyhwJiZwLmNhdGVnb3J5PT09J2Rucyc/JyBzZWxlY3RlZCc6JycpKyc+RE5TPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZGVzaWduIicrKHAmJnAuY2F0ZWdvcnk9PT0nZGVzaWduJz8nIHNlbGVjdGVkJzonJykrJz7QlNC40LfQsNC50L08L29wdGlvbj48b3B0aW9uIHZhbHVlPSJvdGhlciInKyghcHx8cC5jYXRlZ29yeT09PSdvdGhlcic/JyBzZWxlY3RlZCc6JycpKyc+0JTRgNGD0LPQvjwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjxkaXYgY2xhc3M9Im1hIj48YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImNtbygpIj7QntGC0LrQsNC3PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIHAiIG9uY2xpY2s9InNQYXNzKCkiPtCX0LDQv9Cw0LfQuDwvYnV0dG9uPjwvZGl2Pic7CiAgfSwKICBvZmZlcjpmdW5jdGlvbigpe3JldHVybiAnPGgzPisg0JfQsNC/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+Jzt9Cn07Cgphc3luYyBmdW5jdGlvbiBtb2RhbCh0eXBlLGlkKXsKICBpZighRC51c2Vycy5sZW5ndGgpRC51c2Vycz1hd2FpdCBhZigndXNlcnMnKXx8W107CiAgdmFyIGg9Jyc7CiAgaWYodHlwZT09PSdlZGl0UHJvamVjdCcmJmlkKXt2YXIgcD1ELnByb2plY3RzLmZpbmQoZnVuY3Rpb24oeCl7cmV0dXJuIHguaWQ9PT1pZDt9KTtoPU1MLnByb2plY3QocCk7fQogIGVsc2UgaWYodHlwZT09PSdwcm9qZWN0JyloPU1MLnByb2plY3QobnVsbCk7CiAgZWxzZSBpZih0eXBlPT09J25ld1VzZXInKWg9dUZvcm0obnVsbCk7CiAgZWxzZSBpZih0eXBlPT09J2VkaXRVc2VyJyYmaWQpe3ZhciB1PUQudXNlcnMuZmluZChmdW5jdGlvbih4KXtyZXR1cm4gU3RyaW5nKHguaWQpPT09U3RyaW5nKGlkKTt9KTtoPXVGb3JtKHUpO30KICBlbHNlIGlmKHR5cGU9PT0nY2FsVGFzaycpaD1NTC5jYWxUYXNrKGlkfHxudWxsKTsKICBlbHNlIGlmKE1MW3R5cGVdKWg9TUxbdHlwZV0oKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWInKS5pbm5lckhUTUw9aDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW8nKS5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7CiAgaWYodHlwZT09PSdlZGl0VXNlcicmJmlkKXsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgdmFyIHU9RC51c2Vycy5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiBTdHJpbmcoeC5pZCk9PT1TdHJpbmcoaWQpO30pOwogICAgICBpZih1KXt2YXIgcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndUMnKTtpZihzKXMudmFsdWU9dS5jb2xvcnx8J2F2LXAnO30KICAgIH0sMTApOwogIH0KfQpmdW5jdGlvbiBjbW8oKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW8nKS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7fQoKLy8g4pSA4pSAIFNBVkUg4pSA4pSACmFzeW5jIGZ1bmN0aW9uIHNQcmooZWlkKXsKICB2YXIgbj1ndignbU4nKTtpZighbil7dG9hc3QoJ9CS0YrQstC10LTQtdGC0LUg0L3QsNC30LLQsNC90LjQtScsJ2VycicpO3JldHVybjt9CiAgdmFyIGQ9e2lkOmVpZHx8dW5kZWZpbmVkLG5hbWU6bixjbGllbnQ6Z3YoJ21DbCcpLHBob25lOmd2KCdtUGgnKSxzdGF0dXM6Z3YoJ21TdCcpLHRvdGFsOmd2KCdtVG8nKXx8MCxyZWNlaXZlZDpndignbVJjJyl8fDAsc3RhcnQ6Z3YoJ21TdDInKXx8bnVsbCxkZWFkbGluZTpndignbURsJyl8fG51bGwscHJvZ3Jlc3M6cGFyc2VJbnQoZ3YoJ21QcicpKXx8MCxhc3NpZ25lZTpndignbUFzJyksdGFnczpndignbVRnJykuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpO30pLmZpbHRlcihCb29sZWFuKSxyZWN1cnJpbmc6Z3YoJ21ScicpLG5vdGVzOmd2KCdtTnQnKX07CiAgdmFyIHI9YXdhaXQgYWYoJ3Byb2plY3RzJywnUE9TVCcsZCk7CiAgaWYocil7YXdhaXQgbEEoZ3YoJ21BcycpLChlaWQ/J9C+0LHQvdC+0LLQuCc6J9C00L7QsdCw0LLQuCcpKycg0L/RgNC+0LXQutGCOiAnK24pO2NtbygpO2F3YWl0IGxvYWRBbGwoKTt0b2FzdChlaWQ/J9Ce0LHQvdC+0LLQtdC9ISc6J9CU0L7QsdCw0LLQtdC9IScsJ29rJyk7fQogIGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgScsJ2VycicpOwp9CmFzeW5jIGZ1bmN0aW9uIGRQcmooaWQpe2lmKCFjb25maXJtKCfQmNC30YLRgNC40Lkg0L/RgNC+0LXQutGC0LA/JykpcmV0dXJuO2F3YWl0IGFmKCdwcm9qZWN0cycsJ0RFTEVURScsbnVsbCwnJmlkPScraWQpO2NtbygpO2F3YWl0IGxvYWRBbGwoKTt0b2FzdCgn0JjQt9GC0YDQuNGC0L4nKTt9CmFzeW5jIGZ1bmN0aW9uIHNUYXNrKCl7CiAgdmFyIHR4PWd2KCd0VHgnKTtpZighdHgpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC+0L/QuNGB0LDQvdC40LUnLCdlcnInKTtyZXR1cm47fQogIHZhciByPWF3YWl0IGFmKCd0YXNrcycsJ1BPU1QnLHt0ZXh0OnR4LGFzc2lnbmVlOmd2KCd0QXMnKSx1cmdlbnQ6Z3YoJ3RVcicpLGRvbmU6MH0pOwogIGlmKHIpe2NtbygpO0QudGFza3M9YXdhaXQgYWYoJ3Rhc2tzJyl8fFtdO3JUYXNrcygpO3JEYXNoKCk7dG9hc3QoJ9CU0L7QsdCw0LLQtdC90LAhJywnb2snKTt9Cn0KYXN5bmMgZnVuY3Rpb24gc0NhbFRhc2soKXsKICB2YXIgdHg9Z3YoJ2N0VHgnKTtpZighdHgpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC+0L/QuNGB0LDQvdC40LUnLCdlcnInKTtyZXR1cm47fQogIHZhciBkdD1ndignY3REdCcpO2lmKCFkdCl7dG9hc3QoJ9CY0LfQsdC10YDQtdGC0LUg0LTQsNGC0LAnLCdlcnInKTtyZXR1cm47fQogIHZhciB0bT1ndignY3RUbScpOwogIHZhciByPWF3YWl0IGFmKCd0YXNrcycsJ1BPU1QnLHt0ZXh0OnR4LGFzc2lnbmVlOmd2KCdjdEFzJyksdXJnZW50Omd2KCdjdFVyJyksZG9uZTowLGR1ZV9kYXRlOnRtP2R0KydUJyt0bTpkdH0pOwogIGlmKHIpe2NtbygpO0QudGFza3M9YXdhaXQgYWYoJ3Rhc2tzJyl8fFtdO3JDYWxlbmRhcigpO3RvYXN0KCfQlNC+0LHQsNCy0LXQvdCwIScsJ29rJyk7fQp9CmFzeW5jIGZ1bmN0aW9uIHNOb3RlKCl7CiAgdmFyIHRpPWd2KCduVGknKTtpZighdGkpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC30LDQs9C70LDQstC40LUnLCdlcnInKTtyZXR1cm47fQogIHZhciByPWF3YWl0IGFmKCdub3RlcycsJ1BPU1QnLHt0aXRsZTp0aSxib2R5Omd2KCduQm8nKSxhdXRob3I6Z3YoJ25BdScpLHVyZ2VudDpndignblVyJyl9KTsKICBpZihyKXtjbW8oKTtELm5vdGVzPWF3YWl0IGFmKCdub3RlcycpfHxbXTtyTm90ZXMoKTtyRGFzaCgpO3RvYXN0KCfQl9Cw0L/QsNC30LXQvdCwIScsJ29rJyk7fQp9CmFzeW5jIGZ1bmN0aW9uIHNDbGkoKXsKICB2YXIgbj1ndignY05tJyk7aWYoIW4pe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC40LzQtScsJ2VycicpO3JldHVybjt9CiAgdmFyIHI9YXdhaXQgYWYoJ2NsaWVudHMnLCdQT1NUJyx7bmFtZTpuLGNvbXBhbnk6Z3YoJ2NDbycpLGVtYWlsOmd2KCdjRW0nKSxwaG9uZTpndignY1BoJyksZWlrOmd2KCdjRWsnKSxub3RlczpndignY050Jyl9KTsKICBpZihyKXtjbW8oKTtELmNsaWVudHM9YXdhaXQgYWYoJ2NsaWVudHMnKXx8W107ckNsaSgpO3RvYXN0KCfQlNC+0LHQsNCy0LXQvSEnLCdvaycpO30KfQphc3luYyBmdW5jdGlvbiBzSG9zdCgpewogIHZhciBkbzI9Z3YoJ2hEbycpO2lmKCFkbzIpe3RvYXN0KCfQktGK0LLQtdC00LXRgtC1INC00L7QvNC10LnQvScsJ2VycicpO3JldHVybjt9CiAgdmFyIHI9YXdhaXQgYWYoJ2hvc3RpbmcnLCdQT1NUJyx7ZG9tYWluOmRvMixjbGllbnQ6Z3YoJ2hDbCcpLHNlcnZlcjpndignaFNyJyksdHlwZTpndignaFR5JyksZGlzazpndignaERpJykscGxhbjpndignaFBsJyksc3NsOmd2KCdoU3NsJyl8fG51bGx9KTsKICBpZihyKXtjbW8oKTtELmhvc3Rpbmc9YXdhaXQgYWYoJ2hvc3RpbmcnKXx8W107ckhvc3RpbmcoKTt0b2FzdCgn0JTQvtCx0LDQstC10L0hJywnb2snKTt9Cn0KYXN5bmMgZnVuY3Rpb24gc1Bhc3MoKXsKICB2YXIgc2k9Z3YoJ3BTaScpO2lmKCFzaSl7dG9hc3QoJ9CS0YrQstC10LTQtdGC0LUg0YHQsNC50YInLCdlcnInKTtyZXR1cm47fQogIHZhciBjbGllbnQ9Z3YoJ3BDbCcpOwogIHZhciByPWF3YWl0IGFmKCdwYXNzd29yZHMnLCdQT1NUJyx7aWQ6UFcuZWRpdElkfHx1bmRlZmluZWQsc2l0ZTpzaSx1c2VyOmd2KCdwVXMnKSxwYXNzOmd2KCdwUHcnKSxjYXQ6Z3YoJ3BDYScpLGNsaWVudDpjbGllbnR9KTsKICBpZihyKXtQVy5jbGllbnQ9Y2xpZW50fHwn0JHQtdC3INC60LvQuNC10L3Rgic7UFcuZWRpdElkPScnO2NtbygpO0QucGFzc3dvcmRzPWF3YWl0IGFmKCdwYXNzd29yZHMnKXx8W107clBhc3N3b3JkcygpO3RvYXN0KCfQl9Cw0L/QuNGB0LDQvdC+IScsJ29rJyk7fQp9CmFzeW5jIGZ1bmN0aW9uIHNPZmYoKXsKICB2YXIgcj1hd2FpdCBhZignb2ZmZXJzJywnUE9TVCcse251bTpndignb05tJyksY2xpZW50Omd2KCdvQ2wnKSxzZXJ2aWNlOmd2KCdvU3YnKSx0b3RhbDpndignb1RvJyl8fDAsc3RhdHVzOmd2KCdvU3QnKX0pOwogIGlmKHIpe2NtbygpO0Qub2ZmZXJzPWF3YWl0IGFmKCdvZmZlcnMnKXx8W107ck9mZmVycygpO3RvYXN0KCfQl9Cw0L/QuNGB0LDQvdCwIScsJ29rJyk7fQp9CmFzeW5jIGZ1bmN0aW9uIHNDb24oKXsKICB2YXIgcj1hd2FpdCBhZignY29udHJhY3RzJywnUE9TVCcse2NsaWVudDpndignY29DJyksbmFtZTpndignY29OJyksc2lnbl9kYXRlOmd2KCdjb0R0Jyl8fG51bGx9KTsKICBpZihyKXtjbW8oKTtELmNvbnRyYWN0cz1hd2FpdCBhZignY29udHJhY3RzJyl8fFtdO3JDb250cmFjdHMoKTt0b2FzdCgn0JTQvtCx0LDQstC10L0hJywnb2snKTt9Cn0KYXN5bmMgZnVuY3Rpb24gc1UoZWlkKXsKICB2YXIgbj1ndigndU4nKTtpZighbil7dG9hc3QoJ9CS0YrQstC10LTQtdGC0LUg0LjQvNC1JywnZXJyJyk7cmV0dXJuO30KICB2YXIgdT1ndigndVUnKTtpZighdSl7dG9hc3QoJ9CS0YrQstC10LTQtdGC0LUg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L4g0LjQvNC1JywnZXJyJyk7cmV0dXJuO30KICB2YXIgcD1ndigndVAnKTtpZighZWlkJiZwLmxlbmd0aDw2KXt0b2FzdCgn0J/QsNGA0L7Qu9Cw0YLQsCDRgtGA0Y/QsdCy0LAg0LTQsCDQtSDQv9C+0L3QtSA2INGB0LjQvNCy0L7Qu9CwJywnZXJyJyk7cmV0dXJuO30KICB2YXIgZD17aWQ6ZWlkfHx1bmRlZmluZWQsbmFtZTpuLHJvbGU6Z3YoJ3VSJyksdXNlcm5hbWU6dSxpbml0aWFsczpndigndUknKXx8bi5zbGljZSgwLDIpLnRvVXBwZXJDYXNlKCksY29sb3I6Z3YoJ3VDJyl8fCdhdi1wJyxpc19hZG1pbjpndigndUEnKSxvbmxpbmU6MX07CiAgaWYocClkLnBhc3N3b3JkPXA7CiAgdmFyIHI9YXdhaXQgYWYoJ3VzZXJzJywnUE9TVCcsZCk7CiAgaWYocil7Y21vKCk7RC51c2Vycz1hd2FpdCBhZigndXNlcnMnKXx8W107clVzZXJzKCk7clRlYW0oKTt0b2FzdChlaWQ/J9Ce0LHQvdC+0LLQtdC9ISc6J9CU0L7QsdCw0LLQtdC9IScsJ29rJyk7fQogIGVsc2UgdG9hc3QoJ9CT0YDQtdGI0LrQsCDigJQg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L7RgtC+INC40LzQtSDQvNC+0LbQtSDQtNCwINC1INC30LDQtdGC0L4nLCdlcnInKTsKfQphc3luYyBmdW5jdGlvbiBkVShpZCl7aWYoIWNvbmZpcm0oJ9CY0LfRgtGA0LjQuSDQv9C+0YLRgNC10LHQuNGC0LXQu9GPPycpKXJldHVybjthd2FpdCBhZigndXNlcnMnLCdERUxFVEUnLG51bGwsJyZpZD0nK2lkKTtELnVzZXJzPWF3YWl0IGFmKCd1c2VycycpfHxbXTtyVXNlcnMoKTtyVGVhbSgpO2NtbygpO3RvYXN0KCfQmNC30YLRgNC40YLQvicpO30KYXN5bmMgZnVuY3Rpb24gZHIodGJsLGlkKXsKICBpZighY29uZmlybSgn0JjQt9GC0YDQuNC5PycpKXJldHVybjsKICBhd2FpdCBhZih0YmwsJ0RFTEVURScsbnVsbCwnJmlkPScraWQpOwogIERbdGJsXT1hd2FpdCBhZih0YmwpfHxbXTsKICB2YXIgbT17bm90ZXM6ck5vdGVzLGhvc3Rpbmc6ckhvc3RpbmcscGFzc3dvcmRzOnJQYXNzd29yZHMsY29udHJhY3RzOnJDb250cmFjdHMsb2ZmZXJzOnJPZmZlcnN9OwogIGlmKG1bdGJsXSltW3RibF0oKTsKICB0b2FzdCgn0JjQt9GC0YDQuNGC0L4nKTsKfQphc3luYyBmdW5jdGlvbiBsQSh3aG8sd2hhdCl7CiAgdmFyIHU9RC51c2Vycy5maW5kKGZ1bmN0aW9uKG0pe3JldHVybiBtLm5hbWU9PT13aG87fSl8fEQudXNlcnNbMF07CiAgYXdhaXQgYWYoJ2FjdGl2aXR5JywnUE9TVCcse3dobzp3aG98fCfQodC40YHRgtC10LzQsCcsd2hhdDp3aGF0LGNvbG9yOih1JiZ1LmNvbG9yKXx8J2F2LXAnLGluaXRpYWxzOih1JiZ1LmluaXRpYWxzKXx8Jz8/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+Cjpyb290ey0tYmc6I2YwZjBmODstLXN1cjojZmZmOy0tc3VyMjojZjVmNWZjOy0tc3VyMzojZWFlYWY1Oy0tYnJkOnJnYmEoMCwwLDAsLjA4KTstLWJyZDI6cmdiYSgwLDAsMCwuMTQpOwotLXR4OiMxYTFhMmU7LS10eDI6IzRhNGE2YTstLXR4MzojODg4OGFhOy0tYWNjOiM2YzYzZmY7LS1hY2MyOiNhNzhiZmE7LS1ncm46IzIyYzU1ZTstLWdkaW06cmdiYSgzNCwxOTcsOTQsLjEyKTsKLS1hbWI6I2Y1OWUwYjstLWFkaW06cmdiYSgyNDUsMTU4LDExLC4xMik7LS1yZWQ6I2VmNDQ0NDstLXJkaW06cmdiYSgyMzksNjgsNjgsLjEyKTsKLS1mbjonRE0gU2Fucycsc2Fucy1zZXJpZjstLW1vOidETSBNb25vJyxtb25vc3BhY2V9Cip7bWFyZ2luOjA7cGFkZGluZzowO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KYm9keXtmb250LWZhbWlseTp2YXIoLS1mbik7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tdHgpO21pbi1oZWlnaHQ6MTAwdmg7cGFkZGluZzoyMnB4IDE4cHggNjBweH0KLndyYXB7bWF4LXdpZHRoOjEyODBweDttYXJnaW46MCBhdXRvfQoudG9we2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNnB4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4fQpoMXtmb250LXNpemU6MjBweDtmb250LXdlaWdodDo2MDB9Ci5zdWJ7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdHgzKTttYXJnaW4tdG9wOjJweH0KLmxua3tjb2xvcjp2YXIoLS1hY2MpO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMnB4O3RleHQtZGVjb3JhdGlvbjpub25lfQoudGFic3tkaXNwbGF5OmZsZXg7Z2FwOjRweDttYXJnaW4tYm90dG9tOjE4cHg7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtwYWRkaW5nOjVweDtib3JkZXItcmFkaXVzOjEycHg7ZmxleC13cmFwOndyYXB9Ci50YWJ7cGFkZGluZzo5cHggMTRweDtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjUwMDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS10eDIpO3doaXRlLXNwYWNlOm5vd3JhcH0KLnRhYi5hY3RpdmV7YmFja2dyb3VuZDp2YXIoLS1hY2MpO2NvbG9yOiNmZmZ9Ci5wYW5lbHtiYWNrZ3JvdW5kOnZhcigtLXN1cik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjE4cHg7bWFyZ2luLWJvdHRvbToxNnB4fQoucGh7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjE0cHg7ZmxleC13cmFwOndyYXA7Z2FwOjhweH0KLnB0e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMH0KLmJ0bntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1yYWRpdXM6OXB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OnZhcigtLWZuKTtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYwMH0KLmJ0bi5we2JhY2tncm91bmQ6dmFyKC0tYWNjKTtjb2xvcjojZmZmfQouYnRuLnN7YmFja2dyb3VuZDp2YXIoLS1zdXIyKTtjb2xvcjp2YXIoLS10eDIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKX0KLmJ0bi5ke2JhY2tncm91bmQ6dmFyKC0tcmRpbSk7Y29sb3I6dmFyKC0tcmVkKX0KLmJ0bi5ne2JhY2tncm91bmQ6dmFyKC0tZ2RpbSk7Y29sb3I6IzE1ODAzZH0KLmJ0bjpob3ZlcntvcGFjaXR5Oi44OH0KdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Zm9udC1zaXplOjEyLjVweH0KdGh7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OXB4IDEwcHg7Y29sb3I6dmFyKC0tdHgzKTtmb250LXdlaWdodDo1MDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYnJkKTt3aGl0ZS1zcGFjZTpub3dyYXB9CnRke3BhZGRpbmc6MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1icmQpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KdHI6aG92ZXIgdGR7YmFja2dyb3VuZDp2YXIoLS1zdXIyKX0KLmJhZGdle3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5iYWRnZS5kcmFmdHtiYWNrZ3JvdW5kOnZhcigtLXN1cjMpO2NvbG9yOnZhcigtLXR4Mil9Ci5iYWRnZS5zZW50e2JhY2tncm91bmQ6cmdiYSg1NiwxODksMjQ4LC4xNSk7Y29sb3I6IzAyODRjN30KLmJhZGdlLnBhaWR7YmFja2dyb3VuZDp2YXIoLS1nZGltKTtjb2xvcjojMTU4MDNkfQouYmFkZ2Uub3ZlcmR1ZXtiYWNrZ3JvdW5kOnZhcigtLXJkaW0pO2NvbG9yOiNiOTFjMWN9Ci5iYWRnZS5jYW5jZWxsZWR7YmFja2dyb3VuZDp2YXIoLS1zdXIzKTtjb2xvcjp2YXIoLS10eDMpO3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9Ci5hY3Rpb25ze2Rpc3BsYXk6ZmxleDtnYXA6NnB4fQouaWNvbmJ0bntiYWNrZ3JvdW5kOnZhcigtLXN1cjIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjdweDtwYWRkaW5nOjVweCA5cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEycHh9CmxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tdHgzKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA2ZW07bWFyZ2luOjEwcHggMCA1cHh9CmlucHV0LHNlbGVjdCx0ZXh0YXJlYXt3aWR0aDoxMDAlO2JhY2tncm91bmQ6dmFyKC0tc3VyMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTBweCAxMnB4Owpjb2xvcjp2YXIoLS10eCk7Zm9udC1mYW1pbHk6dmFyKC0tZm4pO2ZvbnQtc2l6ZToxM3B4O291dGxpbmU6bm9uZX0KaW5wdXQ6Zm9jdXMsc2VsZWN0OmZvY3VzLHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1hY2MpfQoucm93MntkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjEwcHh9Ci5yb3cze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnI7Z2FwOjEwcHh9Ci5ncmlkMntkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHh9CkBtZWRpYShtYXgtd2lkdGg6ODYwcHgpey5ncmlkMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfX0KLyogbW9kYWwgKi8KLm1ve3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDM1LC41KTtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3otaW5kZXg6OTk5O3BhZGRpbmc6MzBweCAxNHB4O292ZXJmbG93OmF1dG99Ci5tby5zaG93e2Rpc3BsYXk6ZmxleH0KLm1ie2JhY2tncm91bmQ6dmFyKC0tc3VyKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoyMnB4O3dpZHRoOjEwMCU7bWF4LXdpZHRoOjcyMHB4fQoubWIgaDN7Zm9udC1zaXplOjE1cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouaXRlbXN7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1icmQpO2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW47bWFyZ2luLXRvcDo2cHh9Ci5pdGVtcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDcwcHggNzBweCA5MHB4IDkwcHggMzBweDtnYXA6NnB4O3BhZGRpbmc6OHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJyZCk7YWxpZ24taXRlbXM6Y2VudGVyfQouaXRlbXJvdyBpbnB1dHtwYWRkaW5nOjdweCA4cHg7Zm9udC1zaXplOjEycHh9Ci5pdGVtaGVhZHtmb250LXNpemU6MTBweDtjb2xvcjp2YXIoLS10eDMpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0KLnRvdGFsc2JveHttYXJnaW4tdG9wOjEwcHg7dGV4dC1hbGlnbjpyaWdodDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjl9Ci50b3RhbHNib3ggYntmb250LXNpemU6MTZweDtjb2xvcjp2YXIoLS1hY2MpfQouZWlrbG9va3tkaXNwbGF5OmZsZXg7Z2FwOjZweH0KLmVpa2xvb2sgaW5wdXR7ZmxleDoxfQouY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7cmlnaHQ6MjBweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS10eDMpO2ZvbnQtc2l6ZToyMHB4fQoubWJyZWx7cG9zaXRpb246cmVsYXRpdmV9Ci5zbWFsbHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10eDMpfQouc3RhdHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9Ci5zdGF0IGJ7Zm9udC1zaXplOjIwcHh9Ci5zdGF0Z3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LDFmcik7Z2FwOjE0cHg7bWFyZ2luLWJvdHRvbToxNnB4fQpAbWVkaWEobWF4LXdpZHRoOjg2MHB4KXsuc3RhdGdyaWR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLDFmcil9fQouc3RhdGNhcmR7YmFja2dyb3VuZDp2YXIoLS1zdXIpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnJkKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4fQoudG9hc3R7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjIwcHg7cmlnaHQ6MjBweDtiYWNrZ3JvdW5kOiMxYTFhMmU7Y29sb3I6I2ZmZjtwYWRkaW5nOjEycHggMThweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpub25lO3otaW5kZXg6MTIwMH0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KPGRpdiBjbGFzcz0id3JhcCI+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+Cgo8c2NyaXB0PgondXNlIHN0cmljdCc7CnZhciBBUEk9KGZ1bmN0aW9uKCl7CiAgdmFyIGJhc2U9d2luZG93LmxvY2F0aW9uLm9yaWdpbit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvaW52b2ljZXNcLmh0bWwkLywnJykucmVwbGFjZSgvXC8kLywnJyk7CiAgdmFyIG93bj1iYXNlKycvYXBpLnBocCc7CiAgdmFyIHNhdmVkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3dF9hcGknKTsKICBpZihzYXZlZCl7CiAgICB0cnl7CiAgICAgIHZhciB1PW5ldyBVUkwoc2F2ZWQsd2luZG93LmxvY2F0aW9uLmhyZWYpOwogICAgICBpZih1Lm9yaWdpbj09PXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pcmV0dXJuIHNhdmVkOwogICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnd3RfYXBpJyk7CiAgICB9Y2F0Y2goZSl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3d0X2FwaScpO30KICB9CiAgcmV0dXJuIG93bjsKfSkoKTsKCmFzeW5jIGZ1bmN0aW9uIGFmKGFjdGlvbixtZXRob2QsYm9keSxxcyl7CiAgbWV0aG9kPW1ldGhvZHx8J0dFVCc7cXM9cXN8fCcnOwogIHRyeXsKICAgIHZhciBvPXttZXRob2Q6bWV0aG9kLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJ319OwogICAgaWYoYm9keSlvLmJvZHk9SlNPTi5zdHJpbmdpZnkoYm9keSk7CiAgICB2YXIgcj1hd2FpdCBmZXRjaChBUEkrJz9hY3Rpb249JythY3Rpb24rcXMsbyk7CiAgICB2YXIgaj1hd2FpdCByLmpzb24oKTsKICAgIHJldHVybiBqLm9rP2ouZGF0YTpudWxsOwogIH1jYXRjaChlKXtjb25zb2xlLmVycm9yKGFjdGlvbixlKTtyZXR1cm4gbnVsbDt9Cn0KZnVuY3Rpb24gdG9hc3QobXNnKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9hc3QnKTt0LnRleHRDb250ZW50PW1zZzt0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztzZXRUaW1lb3V0KCgpPT50LnN0eWxlLmRpc3BsYXk9J25vbmUnLDI2MDApO30KZnVuY3Rpb24gb3Blbk1vZGFsKGlkKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NMaXN0LmFkZCgnc2hvdycpO30KZnVuY3Rpb24gY2xvc2VNb2RhbChpZCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTt9CmZ1bmN0aW9uIG1vbmV5KG4sY3VyKXtjdXI9Y3VyfHwnRVVSJztyZXR1cm4gKHBhcnNlRmxvYXQobnx8MCkpLnRvRml4ZWQoMikrJyAnK2N1cjt9Cgp2YXIgVEFCUz1bCiAge2lkOidkYXNoYm9hcmQnLGxhYmVsOifwn5OKINCi0LDQsdC70L4nfSwKICB7aWQ6J3Byb2Zvcm1hJyxsYWJlbDon0J/RgNC+0YTQvtGA0LzQuCd9LAogIHtpZDonaW52b2ljZScsbGFiZWw6J9Ck0LDQutGC0YPRgNC4J30sCiAge2lkOidjcmVkaXRfbm90ZScsbGFiZWw6J9Ca0YDQtdC00LjRgtC90Lgg0LjQt9CyLid9LAogIHtpZDonZGViaXRfbm90ZScsbGFiZWw6J9CU0LXQsdC40YLQvdC4INC40LfQsi4nfSwKICB7aWQ6J29mZmVyJyxsYWJlbDon0J7RhNC10YDRgtC4J30sCiAge2lkOidjbGllbnRzJyxsYWJlbDon8J+RpSDQmtC70LjQtdC90YLQuCd9LAogIHtpZDoncmVjdXJyaW5nJyxsYWJlbDon8J+UgSDQn9C10YDQuNC+0LTQuNGH0L3QuCd9LAogIHtpZDoncmVwb3J0cycsbGFiZWw6J/Cfk4gg0KHQv9GA0LDQstC60LgnfSwKICB7aWQ6J3NldHRpbmdzJyxsYWJlbDon4pqZ77iPINCd0LDRgdGC0YDQvtC50LrQuCd9Cl07CnZhciBDVVJfVEFCPSdkYXNoYm9hcmQnOwp2YXIgQ0xJRU5UUz1bXTsKCmZ1bmN0aW9uIHJlbmRlclRhYnMoKXsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFicycpLmlubmVySFRNTD1UQUJTLm1hcCh0PT4KICAgICc8ZGl2IGNsYXNzPSJ0YWInKyh0LmlkPT09Q1VSX1RBQj8nIGFjdGl2ZSc6JycpKyciIG9uY2xpY2s9ImdvVGFiKFwnJyt0LmlkKydcJykiPicrdC5sYWJlbCsnPC9kaXY+Jykuam9pbignJyk7Cn0KZnVuY3Rpb24gZ29UYWIoaWQpe0NVUl9UQUI9aWQ7cmVuZGVyVGFicygpO3JlbmRlckNvbnRlbnQoKTt9Cgp2YXIgVFlQRV9MQUJFTD17cHJvZm9ybWE6J9Cf0YDQvtGE0L7RgNC80LAg0YTQsNC60YLRg9GA0LAnLGludm9pY2U6J9Ck0LDQutGC0YPRgNCwJyxjcmVkaXRfbm90ZTon0JrRgNC10LTQuNGC0L3QviDQuNC30LLQtdGB0YLQuNC1JyxkZWJpdF9ub3RlOifQlNC10LHQuNGC0L3QviDQuNC30LLQtdGB0YLQuNC1JyxvZmZlcjon0J7RhNC10YDRgtCwJ307Cgphc3luYyBmdW5jdGlvbiByZW5kZXJDb250ZW50KCl7CiAgdmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnQnKTsKICBpZihDVVJfVEFCPT09J2Rhc2hib2FyZCcpeyBhd2FpdCByZW5kZXJEYXNoYm9hcmQoYyk7IHJldHVybjsgfQogIGlmKENVUl9UQUI9PT0nY2xpZW50cycpeyBhd2FpdCByZW5kZXJDbGllbnRzKGMpOyByZXR1cm47IH0KICBpZihDVVJfVEFCPT09J3JlY3VycmluZycpeyBhd2FpdCByZW5kZXJSZWN1cnJpbmcoYyk7IHJldHVybjsgfQogIGlmKENVUl9UQUI9PT0ncmVwb3J0cycpeyBhd2FpdCByZW5kZXJSZXBvcnRzKGMpOyByZXR1cm47IH0KICBpZihDVVJfVEFCPT09J3NldHRpbmdzJyl7IGF3YWl0IHJlbmRlclNldHRpbmdzKGMpOyByZXR1cm47IH0KICBhd2FpdCByZW5kZXJEb2NMaXN0KGMsQ1VSX1RBQik7Cn0KCi8vIOKUgOKUgCBEQVNIQk9BUkQg4pSA4pSACmFzeW5jIGZ1bmN0aW9uIHJlbmRlckRhc2hib2FyZChjKXsKICBjLmlubmVySFRNTD0nPGRpdiBjbGFzcz0ic3RhdGdyaWQiIGlkPSJzdGF0Z3JpZCI+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/YWN0aW9uPWRvY3VtZW50c19leHBvcnQmdHlwZT0nK3R5cGUsJ19ibGFuaycpOyB9Cgphc3luYyBmdW5jdGlvbiBkZWxldGVEb2N1bWVudChpZCx0eXBlKXsKICBpZighY29uZmlybSgn0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LTQvtC60YPQvNC10L3RgtCwPycpKXJldHVybjsKICBhd2FpdCBhZignZG9jdW1lbnRzJywnREVMRVRFJywnJywgJyZpZD0nK2lkKTsKICByZW5kZXJEb2NMaXN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50JyksdHlwZSk7Cn0KCi8vIOKUgOKUgCBET0NVTUVOVCBFRElUT1IgTU9EQUwg4pSA4pSACnZhciBFRElUX0lEPW51bGwsIEVESVRfVFlQRT1udWxsOwphc3luYyBmdW5jdGlvbiBlbnN1cmVDbGllbnRzKCl7IGlmKCFDTElFTlRTLmxlbmd0aCkgQ0xJRU5UUz1hd2FpdCBhZignY2xpZW50cycpfHxbXTsgfQoKYXN5bmMgZnVuY3Rpb24gbmV3RG9jdW1lbnQodHlwZSl7CiAgYXdhaXQgZW5zdXJlQ2xpZW50cygpOwogIEVESVRfSUQ9bnVsbDsgRURJVF9UWVBFPXR5cGU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY01vZGFsVGl0bGUnKS50ZXh0Q29udGVudD0n0J3QvtCyINC00L7QutGD0LzQtdC90YIg4oCUICcrKFRZUEVfTEFCRUxbdHlwZV18fHR5cGUpOwogIGZpbGxDbGllbnRTZWxlY3QoKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9pc3N1ZScpLnZhbHVlPW5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF90YXgnKS52YWx1ZT1uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfZHVlJykudmFsdWU9Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfdmF0JykudmFsdWU9MjA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RfY3VycmVuY3knKS52YWx1ZT0nRVVSJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZF9zdGF0dXMnKS52YWx1ZT0nZHJhZnQnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkX25vdGVzJykudmFsdWU9Jyc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2l0ZW1zQm94JykuaW5uZXJIVE1MPScnOwogIGFkZEl0ZW1Sb3coKTsKICByZWNhbGNUb3RhbHMoKTsKICBvcGVuTW9kYWwoJ2RvY01vZGFsJyk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGVkaXREb2N1bWVudChpZCx0eXBlKXsKICBhd2FpdCBlbnN1cmVDbGllbnRzKCk7CiAgdmFyIGZ1bGw9YXdhaXQgYWYoJ2RvY3VtZW50X2Z1bGwnLCdHRVQnLCcnLCAnJmlkPScraWQpOwogIGlmKCFmdWxsKXt0b2FzdCgn0JPRgNC10YjQutCwINC/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/0LjRgScpOwp9Cgphc3luYyBmdW5jdGlvbiBtb2R1bGVHdWFyZChrZXksbGFiZWwpewogIHRyeXsKICAgIHZhciByPWF3YWl0IGFmKCdicmFuZGluZ19zZXR0aW5ncycpOwogICAgaWYociAmJiAoci5saWNlbnNlX3N0YXRlPT09J2xvY2tlZCd8fHIubGljZW5zZV9zdGF0ZT09PSdpbnZhbGlkJykpewogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjQ4MHB4O21hcmdpbjo4MHB4IGF1dG87dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtjb2xvcjojNGE0YTZhIj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6NDBweDttYXJnaW4tYm90dG9tOjEycHgiPvCflJI8L2Rpdj48aDI+0KXRitCx0YrRgiDQtSDQt9Cw0LrQu9GO0YfQtdC9PC9oMj4nKwogICAgICAgICc8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEzcHgiPicrKHIubGljZW5zZV9tZXNzYWdlfHwn0JvQuNGG0LXQvdC30YrRgiDQvdC1INC1INCw0LrRgtC40LLQtdC9LicpKyc8L3A+PC9kaXY+JzsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYociAmJiByLm1vZHVsZXNfZW5hYmxlZCAmJiByLm1vZHVsZXNfZW5hYmxlZC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFyLm1vZHVsZXNfZW5hYmxlZFtrZXldKXsKICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9Im1heC13aWR0aDo0ODBweDttYXJnaW46ODBweCBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Y29sb3I6IzRhNGE2YSI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjQwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij7wn5SSPC9kaXY+PGgyPicrbGFiZWwrJyDQtSDQuNC30LrQu9GO0YfQtdC9PC9oMj4nKwogICAgICAgICc8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEzcHgiPtCi0L7Qt9C4INC80L7QtNGD0Lsg0LUg0LjQt9C60LvRjtGH0LXQvSDQt9CwINGC0LDQt9C4INC40L3RgdGC0LDQu9Cw0YbQuNGPLiDQodCy0YrRgNC20Lgg0YHQtSDRgSDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLjwvcD4nKwogICAgICAgICc8YSBocmVmPSJpbmRleC5odG1sIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDoxNnB4O2NvbG9yOiM2YzYzZmYiPuKGkCDQntCx0YDQsNGC0L3QviDQutGK0LwgSHViPC9hPjwvZGl2Pic7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Y2F0Y2goZSl7fQogIHJldHVybiB0cnVlOwp9CgpyZW5kZXJUYWJzKCk7Cm1vZHVsZUd1YXJkKCdpbnZvaWNpbmcnLCfQpNCw0LrRgtGD0YDQuNGA0LDQvdC10YLQvicpLnRoZW4ob2s9PnsgaWYob2spIHJlbmRlckNvbnRlbnQoKTsgfSk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K', 'licenses/client/guard.php' => 'PD9waHAKLyoqCiAqIENMSUVOVCBHVUFSRCDigJQgaW5jbHVkZSBhdCB0aGUgdG9wIG9mIGEgY2xpZW50IGh1YidzIHByb3RlY3RlZCBwYWdlcy4KICoKICogICByZXF1aXJlIF9fRElSX18uJy9jbGllbnQvZ3VhcmQucGhwJzsKICogICB3dF9ndWFyZCgpOyAgICAgICAgICAgICAgIC8vIGxvY2tzIHRoZSB3aG9sZSBwYWdlIGlmIGxpY2Vuc2UgZXhwaXJlZCBwYXN0IGdyYWNlCiAqICAgaWYgKHd0X21vZHVsZSgnd2F5YmlsbHMnKSkgeyAuLi4gfSAgIC8vIHBlciBwYWlkLW1vZHVsZSBjaGVjawogKgogKiBJdCBjYWxscyB0aGUgbWFzdGVyJ3MgbGljZW5zZS92ZXJpZnkucGhwLCBjYWNoZXMgdGhlIHJlc3VsdCBmb3IgYW4gaG91ciwKICogYW5kIGZhaWxzICJvcGVuIHdpdGggd2FybmluZyIgaWYgdGhlIG1hc3RlciBpcyB0ZW1wb3JhcmlseSB1bnJlYWNoYWJsZQogKiAoc28gYSBuZXR3b3JrIGJsaXAgbmV2ZXIgYnJpY2tzIGEgcGF5aW5nIGNsaWVudCkuCiAqLwpyZXF1aXJlX29uY2UgZGlybmFtZShfX0RJUl9fKSAuICcvbGliL2RiLnBocCc7CgpmdW5jdGlvbiB3dF9ndWFyZF9zZXR0aW5ncygpOiBhcnJheSB7CiAgICBzdGF0aWMgJHMgPSBudWxsOwogICAgaWYgKCRzICE9PSBudWxsKSByZXR1cm4gJHM7CiAgICB0cnkgewogICAgICAgICRzID0gd3RfZGIoKS0+cXVlcnkoIlNFTEVDVCBtYXN0ZXJfdXJsLCBsaWNlbnNlX2tleSwgcHJvZHVjdF9uYW1lIEZST00gc2V0dGluZ3MgV0hFUkUgaWQ9MSIpLT5mZXRjaCgpID86IFtdOwogICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7ICRzID0gW107IH0KICAgIHJldHVybiAkczsKfQoKZnVuY3Rpb24gd3RfZ3VhcmRfc3RhdHVzKCk6IGFycmF5IHsKICAgIHN0YXRpYyAkc3RhdHVzID0gbnVsbDsKICAgIGlmICgkc3RhdHVzICE9PSBudWxsKSByZXR1cm4gJHN0YXR1czsKCiAgICAkY2ZnID0gd3RfZ3VhcmRfc2V0dGluZ3MoKTsKICAgICRtYXN0ZXIgPSBydHJpbSgkY2ZnWydtYXN0ZXJfdXJsJ10gPz8gJycsICcvJyk7CiAgICAka2V5ICAgID0gJGNmZ1snbGljZW5zZV9rZXknXSA/PyAnJzsKICAgIGlmICghJG1hc3RlciB8fCAhJGtleSkgewogICAgICAgIHJldHVybiAkc3RhdHVzID0gWydzdGF0ZScgPT4gJ2FjdGl2ZScsICdtb2R1bGVzJyA9PiBbXSwgJ21lc3NhZ2UnID0+ICfQm9C+0LrQsNC70LXQvSDRgNC10LbQuNC8ICjQsdC10Lcg0LvQuNGG0LXQvdC3KS4nLCAnb2ZmbGluZScgPT4gdHJ1ZV07CiAgICB9CgogICAgJGNhY2hlRmlsZSA9IGRpcm5hbWUoX19ESVJfXykgLiAnL2NhY2hlX2xpY2Vuc2UuanNvbic7CiAgICBpZiAoaXNfZmlsZSgkY2FjaGVGaWxlKSAmJiAodGltZSgpIC0gZmlsZW10aW1lKCRjYWNoZUZpbGUpIDwgNjApKSB7CiAgICAgICAgJGNhY2hlZCA9IGpzb25fZGVjb2RlKEBmaWxlX2dldF9jb250ZW50cygkY2FjaGVGaWxlKSwgdHJ1ZSk7CiAgICAgICAgaWYgKGlzX2FycmF5KCRjYWNoZWQpICYmIGlzc2V0KCRjYWNoZWRbJ3N0YXRlJ10pKSByZXR1cm4gJHN0YXR1cyA9ICRjYWNoZWQ7CiAgICB9CgogICAgJHNjaGVtZSA9ICghZW1wdHkoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddICE9PSAnb2ZmJykgPyAnaHR0cHMnIDogJ2h0dHAnOwogICAgJHVybCA9ICRtYXN0ZXIgLiAnL2xpY2Vuc2UvdmVyaWZ5LnBocD9rZXk9JyAuIHVybGVuY29kZSgka2V5KQogICAgICAgIC4gJyZkb21haW49JyAuIHVybGVuY29kZSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10gPz8gJycpCiAgICAgICAgLiAnJnNjaGVtZT0nIC4gdXJsZW5jb2RlKCRzY2hlbWUpOwogICAgJHJlc3AgPSBmYWxzZTsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKSB7CiAgICAgICAgJGNoID0gY3VybF9pbml0KCR1cmwpOwogICAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCwgW0NVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gdHJ1ZSwgQ1VSTE9QVF9USU1FT1VUID0+IDgsCiAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gZmFsc2UsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QgPT4gZmFsc2VdKTsKICAgICAgICAkcmVzcCA9IGN1cmxfZXhlYygkY2gpOwogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgIH0gZWxzZWlmIChpbmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSkgewogICAgICAgICRyZXNwID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwsIGZhbHNlLAogICAgICAgICAgICBzdHJlYW1fY29udGV4dF9jcmVhdGUoWydodHRwJyA9PiBbJ3RpbWVvdXQnID0+IDhdLCAnc3NsJyA9PiBbJ3ZlcmlmeV9wZWVyJyA9PiBmYWxzZSwgJ3ZlcmlmeV9wZWVyX25hbWUnID0+IGZhbHNlXV0pKTsKICAgIH0KCiAgICAkZGF0YSA9ICRyZXNwID8ganNvbl9kZWNvZGUoJHJlc3AsIHRydWUpIDogbnVsbDsKICAgIGlmICghaXNfYXJyYXkoJGRhdGEpIHx8ICFpc3NldCgkZGF0YVsnc3RhdGUnXSkpIHsKICAgICAgICAvLyBtYXN0ZXIgdW5yZWFjaGFibGUg4oaSIHNlcnZlIGxhc3QgZ29vZCBjYWNoZSwgZWxzZSBmYWlsIG9wZW4gd2l0aCB3YXJuaW5nCiAgICAgICAgaWYgKGlzc2V0KCRjYWNoZWQpICYmIGlzX2FycmF5KCRjYWNoZWQpKSByZXR1cm4gJHN0YXR1cyA9ICRjYWNoZWQ7CiAgICAgICAgcmV0dXJuICRzdGF0dXMgPSBbJ3N0YXRlJyA9PiAnYWN0aXZlJywgJ21vZHVsZXMnID0+IFtdLCAnb2ZmbGluZScgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ9Cb0LjRhtC10L3Qt9C90LjRj9GCINGB0YrRgNCy0YrRgCDQtSDQstGA0LXQvNC10L3QvdC+INC90LXQtNC+0YHRgtGK0L/QtdC9LiddOwogICAgfQogICAgQGZpbGVfcHV0X2NvbnRlbnRzKCRjYWNoZUZpbGUsIGpzb25fZW5jb2RlKCRkYXRhLCBKU09OX1VORVNDQVBFRF9VTklDT0RFKSk7CiAgICByZXR1cm4gJHN0YXR1cyA9ICRkYXRhOwp9CgpmdW5jdGlvbiB3dF9zdGF0ZSgpOiBzdHJpbmcgICB7IHJldHVybiB3dF9ndWFyZF9zdGF0dXMoKVsnc3RhdGUnXSA/PyAnYWN0aXZlJzsgfQpmdW5jdGlvbiB3dF9tb2R1bGUoc3RyaW5nICRtKTogYm9vbCB7CiAgICAkbW9kcyA9IHd0X2d1YXJkX3N0YXR1cygpWydtb2R1bGVzJ10gPz8gW107CiAgICByZXR1cm4gIWVtcHR5KCRtb2RzWyRtXSk7Cn0KCi8qKiBSZW5kZXJzIGEgZnVsbC1wYWdlIGxvY2sgYW5kIHN0b3BzIGV4ZWN1dGlvbiB3aGVuIGxpY2Vuc2UgaXMgbG9ja2VkLiAqLwpmdW5jdGlvbiB3dF9ndWFyZCgpOiB2b2lkIHsKICAgICRzID0gd3RfZ3VhcmRfc3RhdHVzKCk7CiAgICBpZiAoKCRzWydzdGF0ZSddID8/ICdhY3RpdmUnKSA9PT0gJ2xvY2tlZCcgfHwgKCRzWydzdGF0ZSddID8/ICcnKSA9PT0gJ2ludmFsaWQnKSB7CiAgICAgICAgd3RfcmVuZGVyX2xvY2soJHMpOwogICAgICAgIGV4aXQ7CiAgICB9Cn0KCmZ1bmN0aW9uIHd0X3JlbmRlcl9sb2NrKGFycmF5ICRzKTogdm9pZCB7CiAgICAkcHJvZHVjdCA9IGh0bWxzcGVjaWFsY2hhcnMod3RfZ3VhcmRfc2V0dGluZ3MoKVsncHJvZHVjdF9uYW1lJ10gPz8gJ1dlYnRyaXhpYSBIdWInKTsKICAgICRtc2cgPSBodG1sc3BlY2lhbGNoYXJzKCRzWydtZXNzYWdlJ10gPz8gJ9Cb0LjRhtC10L3Qt9GK0YIg0L3QtSDQtSDQsNC60YLQuNCy0LXQvS4nKTsKICAgIGh0dHBfcmVzcG9uc2VfY29kZSg0MDIpOwogICAgZWNobyAnPCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iYmciPjxoZWFkPjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KICAgIDx0aXRsZT7Qm9C40YbQtdC90LfRitGCINC1INC90LXQsNC60YLQuNCy0LXQvTwvdGl0bGU+CiAgICA8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVNvcmE6d2dodEA0MDA7NjAwOzcwMCZkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI+CiAgICA8c3R5bGU+CiAgICBib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OlNvcmEsc2Fucy1zZXJpZjttaW4taGVpZ2h0OjEwMHZoO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjsKICAgIGJhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAzMCUgMCUsIzFhMTAzMCwjMGEwYTEyIDYwJSk7Y29sb3I6I2U4ZThmMDtwYWRkaW5nOjI0cHh9CiAgICAuY2FyZHttYXgtd2lkdGg6NDQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xKTsKICAgIGJvcmRlci1yYWRpdXM6MjRweDtwYWRkaW5nOjQ0cHggMzRweDtiYWNrZHJvcC1maWx0ZXI6Ymx1cigyMHB4KX0KICAgIC5pY3tmb250LXNpemU6NTJweDttYXJnaW4tYm90dG9tOjE0cHh9CiAgICBoMXtmb250LXNpemU6MjJweDttYXJnaW46MCAwIDEwcHh9CiAgICBwe2NvbG9yOiNhMGEwYzA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS42O21hcmdpbjowIDAgOHB4fQogICAgLnByb2R7bWFyZ2luLXRvcDoyMnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YTZhOGE7bGV0dGVyLXNwYWNpbmc6LjFlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9CiAgICA8L3N0eWxlPjwvaGVhZD48Ym9keT48ZGl2IGNsYXNzPSJjYXJkIj4KICAgIDxkaXYgY2xhc3M9ImljIj7wn5SSPC9kaXY+PGgxPtCl0YrQsdGK0YIg0LUg0LfQsNC60LvRjtGH0LXQvTwvaDE+CiAgICA8cD4nIC4gJG1zZyAuICc8L3A+CiAgICA8cD7QodCy0YrRgNC20LXRgtC1INGB0LUg0YEg0LLQsNGI0LjRjyDQtNC+0YHRgtCw0LLRh9C40Log0LfQsCDQv9C+0LTQvdC+0LLRj9Cy0LDQvdC1LjwvcD4KICAgIDxkaXYgY2xhc3M9InByb2QiPicgLiAkcHJvZHVjdCAuICc8L2Rpdj4KICAgIDwvZGl2PjwvYm9keT48L2h0bWw+JzsKfQo=', 'licenses/config.example.php' => 'PD9waHAKLy8g0JrQvtC/0LjRgNCw0Lkg0LrQsNGC0L4gY29uZmlnLnBocCDQuCDQv9C+0L/RitC70L3QuCwg0LDQutC+IGluc3RhbGwucGhwINC90Y/QvNCwINC/0YDQsNCy0LAg0LTQsCDQv9C40YjQtSDRhNCw0LnQuy4KZGVmaW5lKCdEQl9IT1NUJywnbG9jYWxob3N0Jyk7CmRlZmluZSgnREJfTkFNRScsJ2NwYW5lbHVzZXJfaHViJyk7CmRlZmluZSgnREJfVVNFUicsJ2NwYW5lbHVzZXJfaHVidXNlcicpOwpkZWZpbmUoJ0RCX1BBU1MnLCfQv9Cw0YDQvtC70LBf0LfQsF/QsdCw0LfQsNGC0LAnKTsK', 'licenses/lib/core.php' => 'PD9waHAKLyoqCiAqIFdlYnRyaXhpYSBIdWIg4oCUIENvcmU6IHNjaGVtYSwgbGljZW5zaW5nIHN0YXRlIG1hY2hpbmUsIGhlbHBlcnMuCiAqLwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvZGIucGhwJzsKCi8qKiBDcmVhdGUgYWxsIHRhYmxlcyAoaWRlbXBvdGVudCkuICovCmZ1bmN0aW9uIHd0X2luc3RhbGxfc2NoZW1hKFBETyAkcGRvKTogdm9pZCB7CiAgICAkcGRvLT5leGVjKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBzZXR0aW5ncyAoCiAgICAgICAgaWQgSU5UIFBSSU1BUlkgS0VZIERFRkFVTFQgMSwKICAgICAgICByb2xlIFZBUkNIQVIoMTApIERFRkFVTFQgJ2NsaWVudCcsICAgICAgICAgICAgLS0gJ21hc3Rlcicgb3IgJ2NsaWVudCcKICAgICAgICBwcm9kdWN0X25hbWUgVkFSQ0hBUigxNTApIERFRkFVTFQgJ1dlYnRyaXhpYSBIdWInLAogICAgICAgIHByaW1hcnlfY29sb3IgVkFSQ0hBUigyMCkgREVGQVVMVCAnIzZjNjNmZicsCiAgICAgICAgYWRtaW5fcGFzc19oYXNoIFZBUkNIQVIoMjU1KSwKICAgICAgICBtYXN0ZXJfdXJsIFZBUkNIQVIoMjU1KSwgICAgICAgICAgICAgICAgICAgICAgIC0tIChjbGllbnQpIHdoZXJlIHRvIHZlcmlmeSBsaWNlbnNlCiAgICAgICAgbGljZW5zZV9rZXkgVkFSQ0hBUig2MCksICAgICAgICAgICAgICAgICAgICAgICAtLSAoY2xpZW50KSBvd24ga2V5CiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0Iik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcGFydG5lcnMgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICAgICAgICBuYW1lIFZBUkNIQVIoMjAwKSBOT1QgTlVMTCwKICAgICAgICBlbWFpbCBWQVJDSEFSKDIwMCksCiAgICAgICAgcGhvbmUgVkFSQ0hBUig2MCksCiAgICAgICAgY29tcGFueSBWQVJDSEFSKDIwMCksCiAgICAgICAgZWlrIFZBUkNIQVIoNDApLAogICAgICAgIG5vdGVzIFRFWFQsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0Iik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgbGljZW5zZXMgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICAgICAgICBwYXJ0bmVyX2lkIElOVCBOT1QgTlVMTCwKICAgICAgICBsaWNlbnNlX2tleSBWQVJDSEFSKDYwKSBOT1QgTlVMTCBVTklRVUUsCiAgICAgICAgaHViX3VybCBWQVJDSEFSKDI1NSksCiAgICAgICAgc3RhdHVzIEVOVU0oJ2FjdGl2ZScsJ3N1c3BlbmRlZCcsJ2NhbmNlbGxlZCcpIERFRkFVTFQgJ2FjdGl2ZScsCiAgICAgICAgcGxhbl9uYW1lIFZBUkNIQVIoMTIwKSBERUZBVUxUICdTdGFuZGFyZCcsCiAgICAgICAgYmFzZV9wcmljZSBERUNJTUFMKDEwLDIpIERFRkFVTFQgMCwKICAgICAgICBjdXJyZW5jeSBWQVJDSEFSKDEwKSBERUZBVUxUICdFVVInLAogICAgICAgIGJpbGxpbmdfY3ljbGUgRU5VTSgnbW9udGhseScsJ3llYXJseScpIERFRkFVTFQgJ21vbnRobHknLAogICAgICAgIHZhbGlkX3VudGlsIERBVEUgTk9UIE5VTEwsCiAgICAgICAgZ3JhY2VfZGF5cyBJTlQgREVGQVVMVCA3LAogICAgICAgIG1vZHVsZXMgVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIEpTT04ge3dheWJpbGxzOjEsLi4ufQogICAgICAgIGlzc3VlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICBsYXN0X2NoZWNrX2F0IFRJTUVTVEFNUCBOVUxMLAogICAgICAgIGxhc3RfY2hlY2tfaXAgVkFSQ0hBUig2MCksCiAgICAgICAgbm90ZXMgVEVYVCwKICAgICAgICBJTkRFWChwYXJ0bmVyX2lkKQogICAgKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0Iik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgaW52b2ljZXMgKAogICAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICAgICAgICBsaWNlbnNlX2lkIElOVCBOT1QgTlVMTCwKICAgICAgICBudW1iZXIgVkFSQ0hBUig0MCksCiAgICAgICAgcGVyaW9kX2xhYmVsIFZBUkNIQVIoNjApLAogICAgICAgIGFtb3VudCBERUNJTUFMKDEwLDIpIERFRkFVTFQgMCwKICAgICAgICBjdXJyZW5jeSBWQVJDSEFSKDEwKSBERUZBVUxUICdFVVInLAogICAgICAgIGlzc3VlX2RhdGUgREFURSwKICAgICAgICBkdWVfZGF0ZSBEQVRFLAogICAgICAgIHBhaWQgVElOWUlOVCgxKSBERUZBVUxUIDAsCiAgICAgICAgcGFpZF9hdCBEQVRFIE5VTEwsCiAgICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICBJTkRFWChsaWNlbnNlX2lkKQogICAgKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0Iik7CgogICAgJHBkby0+ZXhlYygiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgZXZlbnRzICgKICAgICAgICBpZCBJTlQgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVksCiAgICAgICAgbGljZW5zZV9pZCBJTlQsCiAgICAgICAga2luZCBWQVJDSEFSKDQwKSwKICAgICAgICBkZXRhaWwgVkFSQ0hBUigyNTUpLAogICAgICAgIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKICAgICkgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9dXRmOG1iNCIpOwoKICAgIGlmICgoaW50KSRwZG8tPnF1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBzZXR0aW5ncyIpLT5mZXRjaENvbHVtbigpID09PSAwKSB7CiAgICAgICAgJHBkby0+ZXhlYygiSU5TRVJUIElOVE8gc2V0dGluZ3MgKGlkLCByb2xlKSBWQUxVRVMgKDEsICdjbGllbnQnKSIpOwogICAgfQp9CgovKiogQXZhaWxhYmxlIGJpbGxhYmxlIG1vZHVsZXMgKGxhYmVsICsgZGVmYXVsdCBtb250aGx5IHByaWNlIEVVUikuICovCmZ1bmN0aW9uIHd0X21vZHVsZXMoKTogYXJyYXkgewogICAgcmV0dXJuIFsKICAgICAgICAncHJvamVjdHMnICAgID0+IFsnbGFiZWwnID0+ICfQn9GA0L7QtdC60YLQuCcsICAgICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICdjbGllbnRzJyAgICAgPT4gWydsYWJlbCcgPT4gJ9Ca0LvQuNC10L3RgtC4JywgICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ2ZpbmFuY2UnICAgICA9PiBbJ2xhYmVsJyA9PiAn0KTQuNC90LDQvdGB0LgnLCAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAwXSwKICAgICAgICAndGFza3MnICAgICAgID0+IFsnbGFiZWwnID0+ICfQl9Cw0LTQsNGH0LgnLCAgICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ29mZmVycycgICAgICA9PiBbJ2xhYmVsJyA9PiAn0J7RhNC10YDRgtC4JywgICAgICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICdjb250cmFjdHMnICAgPT4gWydsYWJlbCcgPT4gJ9CU0L7Qs9C+0LLQvtGA0LgnLCAgICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICdjYWxlbmRhcicgICAgPT4gWydsYWJlbCcgPT4gJ9Ca0LDQu9C10L3QtNCw0YAnLCAgICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICdob3N0aW5nJyAgICAgPT4gWydsYWJlbCcgPT4gJ9Cl0L7RgdGC0LjQvdCz0LgnLCAgICAgICAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICdwYXNzd29yZHMnICAgPT4gWydsYWJlbCcgPT4gJ9CU0L7RgdGC0YrQv9C4JywgICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ25vdGVzJyAgICAgICA9PiBbJ2xhYmVsJyA9PiAn0JHQtdC70LXQttC60LgnLCAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAwXSwKICAgICAgICAncmVwb3J0cycgICAgID0+IFsnbGFiZWwnID0+ICfQntGC0YfQtdGC0LgnLCAgICAgICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ3ByZXNlbmNlJyAgICA9PiBbJ2xhYmVsJyA9PiAn0J/RgNC40YHRitGB0YLQstC40LUnLCAgICAgICAgICAgJ3ByaWNlJyA9PiAwXSwKICAgICAgICAndGFyZ2V0cycgICAgID0+IFsnbGFiZWwnID0+ICfQlNC90LXQstC90Lgg0YLQsNGA0LPQtdGC0LgnLCAgICAgICAncHJpY2UnID0+IDBdLAogICAgICAgICd3b3JrcmVwb3J0JyAgPT4gWydsYWJlbCcgPT4gJ9Cg0LDQsdC+0YLQtdC9INGA0LjQv9C+0YDRgicsICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ3VzZXJzJyAgICAgICA9PiBbJ2xhYmVsJyA9PiAn0J/QvtGC0YDQtdCx0LjRgtC10LvQuCcsICAgICAgICAgICdwcmljZScgPT4gMF0sCiAgICAgICAgJ2ludm9pY2luZycgICA9PiBbJ2xhYmVsJyA9PiAn0KTQsNC60YLRg9GA0LjRgNCw0L3QtScsICAgICAgICAgICdwcmljZScgPT4gOF0sCiAgICAgICAgJ2hyX3JlcXVlc3RzJyA9PiBbJ2xhYmVsJyA9PiAn0JzQvtC70LHQuCAoSFIpJywgICAgICAgICAgICdwcmljZScgPT4gM10sCiAgICAgICAgJ3dheWJpbGxzJyAgICA9PiBbJ2xhYmVsJyA9PiAn0J/RitGC0L3QuCDQu9C40YHRgtC+0LLQtScsICAgICAgICAncHJpY2UnID0+IDVdLAogICAgXTsKfQoKZnVuY3Rpb24gd3RfZ2VuX2tleSgpOiBzdHJpbmcgewogICAgLy8gV1QtWFhYWC1YWFhYLVhYWFgtWFhYWCAocmVhZGFibGUsIHVuYW1iaWd1b3VzIGNoYXJzKQogICAgJGFiYyA9ICdBQkNERUZHSEpLTU5QUVJTVFVWV1hZWjIzNDU2Nzg5JzsKICAgICRwYXJ0cyA9IFtdOwogICAgZm9yICgkZyA9IDA7ICRnIDwgNDsgJGcrKykgewogICAgICAgICRzID0gJyc7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgNDsgJGkrKykgJHMgLj0gJGFiY1tyYW5kb21faW50KDAsIHN0cmxlbigkYWJjKSAtIDEpXTsKICAgICAgICAkcGFydHNbXSA9ICRzOwogICAgfQogICAgcmV0dXJuICdXVC0nIC4gaW1wbG9kZSgnLScsICRwYXJ0cyk7Cn0KCmZ1bmN0aW9uIHd0X2xvZyhQRE8gJHBkbywgP2ludCAkbGljZW5zZUlkLCBzdHJpbmcgJGtpbmQsIHN0cmluZyAkZGV0YWlsID0gJycpOiB2b2lkIHsKICAgICRzdCA9ICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIGV2ZW50cyAobGljZW5zZV9pZCwga2luZCwgZGV0YWlsKSBWQUxVRVMgKD8sPyw/KSIpOwogICAgJHN0LT5leGVjdXRlKFskbGljZW5zZUlkLCAka2luZCwgJGRldGFpbF0pOwp9CgovKioKICogVGhlIGxpY2Vuc2luZyBzdGF0ZSBtYWNoaW5lIOKAlCB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aC4KICogUmV0dXJuczogc3RhdGUgPSBhY3RpdmUgfCBncmFjZSB8IGxvY2tlZCB8IGludmFsaWQKICovCmZ1bmN0aW9uIHd0X2xpY2Vuc2Vfc3RhdGUoYXJyYXkgJGxpYywgP3N0cmluZyAkdG9kYXkgPSBudWxsKTogYXJyYXkgewogICAgJHRvZGF5ID0gJHRvZGF5ID86IGRhdGUoJ1ktbS1kJyk7CgogICAgaWYgKGluX2FycmF5KCRsaWNbJ3N0YXR1cyddLCBbJ3N1c3BlbmRlZCcsICdjYW5jZWxsZWQnXSwgdHJ1ZSkpIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnc3RhdGUnICAgICAgID0+ICdsb2NrZWQnLAogICAgICAgICAgICAncmVhc29uJyAgICAgID0+ICRsaWNbJ3N0YXR1cyddID09PSAnY2FuY2VsbGVkJyA/ICdjYW5jZWxsZWQnIDogJ3N1c3BlbmRlZCcsCiAgICAgICAgICAgICd2YWxpZF91bnRpbCcgPT4gJGxpY1sndmFsaWRfdW50aWwnXSwKICAgICAgICAgICAgJ2dyYWNlX3VudGlsJyA9PiBudWxsLAogICAgICAgICAgICAnbWVzc2FnZScgICAgID0+ICRsaWNbJ3N0YXR1cyddID09PSAnY2FuY2VsbGVkJwogICAgICAgICAgICAgICAgPyAn0JvQuNGG0LXQvdC30YrRgiDQtSDQsNC90YPQu9C40YDQsNC9LicKICAgICAgICAgICAgICAgIDogJ9Cb0LjRhtC10L3Qt9GK0YIg0LUg0LLRgNC10LzQtdC90L3QviDRgdC/0YDRj9C9INC+0YIg0LTQvtGB0YLQsNCy0YfQuNC60LAuJywKICAgICAgICBdOwogICAgfQoKICAgICR2YWxpZFVudGlsID0gJGxpY1sndmFsaWRfdW50aWwnXTsKICAgICRncmFjZURheXMgID0gKGludCkoJGxpY1snZ3JhY2VfZGF5cyddID8/IDApOwogICAgJGdyYWNlVW50aWwgPSBkYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgkdmFsaWRVbnRpbCAuICcgKycgLiAkZ3JhY2VEYXlzIC4gJyBkYXlzJykpOwoKICAgIGlmICgkdG9kYXkgPD0gJHZhbGlkVW50aWwpIHsKICAgICAgICByZXR1cm4gWydzdGF0ZScgPT4gJ2FjdGl2ZScsICdyZWFzb24nID0+ICdvaycsCiAgICAgICAgICAgICAgICAndmFsaWRfdW50aWwnID0+ICR2YWxpZFVudGlsLCAnZ3JhY2VfdW50aWwnID0+ICRncmFjZVVudGlsLAogICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICfQkNC60YLQuNCy0LXQvSDQu9C40YbQtdC90LcuJ107CiAgICB9CiAgICBpZiAoJHRvZGF5IDw9ICRncmFjZVVudGlsKSB7CiAgICAgICAgcmV0dXJuIFsnc3RhdGUnID0+ICdncmFjZScsICdyZWFzb24nID0+ICdncmFjZScsCiAgICAgICAgICAgICAgICAndmFsaWRfdW50aWwnID0+ICR2YWxpZFVudGlsLCAnZ3JhY2VfdW50aWwnID0+ICRncmFjZVVudGlsLAogICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICfQn9C70LDRidCw0L3QtdGC0L4g0LUg0LfQsNCx0LDQstC10L3Qvi4g0KXRitCx0YrRgiDRidC1INGB0L/RgNC1INC90LAgJyAuICRncmFjZVVudGlsIC4gJyDQsNC60L4g0L3QtSDQsdGK0LTQtSDQv9C70LDRgtC10L3Qvi4nXTsKICAgIH0KICAgIHJldHVybiBbJ3N0YXRlJyA9PiAnbG9ja2VkJywgJ3JlYXNvbicgPT4gJ2V4cGlyZWQnLAogICAgICAgICAgICAndmFsaWRfdW50aWwnID0+ICR2YWxpZFVudGlsLCAnZ3JhY2VfdW50aWwnID0+ICRncmFjZVVudGlsLAogICAgICAgICAgICAnbWVzc2FnZScgPT4gJ9Cb0LjRhtC10L3Qt9GK0YIg0LUg0LjQt9GC0LXQutGK0LsuINCh0LLRitGA0LbQtdGC0LUg0YHQtSDRgSDQtNC+0YHRgtCw0LLRh9C40LrQsCDQt9CwINC/0L7QtNC90L7QstGP0LLQsNC90LUuJ107Cn0KCmZ1bmN0aW9uIHd0X2FkZF9tb250aHMoc3RyaW5nICRkYXRlLCBpbnQgJG4sIHN0cmluZyAkY3ljbGUgPSAnbW9udGhseScpOiBzdHJpbmcgewogICAgJG1vZCA9ICRjeWNsZSA9PT0gJ3llYXJseScgPyAoJG4gLiAnIHllYXInKSA6ICgkbiAuICcgbW9udGgnKTsKICAgIHJldHVybiBkYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgkZGF0ZSAuICcgKycgLiAkbW9kKSk7Cn0K', 'licenses/lib/db.php' => 'PD9waHAKLyoqCiAqIFdlYnRyaXhpYSBIdWIg4oCUINCx0LDQt9CwINC00LDQvdC90LguCiAqINCh0L/QvtC00LXQu9C10L3QsCBQRE8g0LLRgNGK0LfQutCwLiDQp9C10YLQtSDQtNCw0L3QvdC40YLQtSDQvtGCIC9jb25maWcucGhwLCDRgdGK0LfQtNCw0LTQtdC9INC/0YDQuCDQuNC90YHRgtCw0LvQsNGG0LjRjy4KICovCmlmICghZGVmaW5lZCgnV1RfQ09ORklHX1BBVEgnKSkgewogICAgLy8g0JvQuNGG0LXQvdC30L3QuNGP0YIg0LzQvtC00YPQuyDRgdGC0L7QuCDQsiBodWIud2VidHJpeGlhLmNvbS9saWNlbnNlcy8g0Lgg0L/QvtC70LfQstCwCiAgICAvLyDQvtGB0L3QvtCy0L3QsNGC0LAg0LHQsNC30LAg0L3QsCBIdWIuINCi0YrRgNGB0LggY29uZmlnLnBocCDQv9GK0YDQstC+INGC0YPQuiwg0L/QvtGB0LvQtSDQsiByb290INC/0LDQv9C60LDRgtCwLgogICAgJGNhbmRpZGF0ZXMgPSBbCiAgICAgICAgZGlybmFtZShfX0RJUl9fKSAuICcvY29uZmlnLnBocCcsICAgICAgICAgICAgLy8gbGljZW5zZXMvY29uZmlnLnBocCAob3duKQogICAgICAgIGRpcm5hbWUoZGlybmFtZShfX0RJUl9fKSkgLiAnL2NvbmZpZy5waHAnLCAgIC8vIGh1YiByb290IGNvbmZpZy5waHAgKHNoYXJlZCkKICAgIF07CiAgICAkZm91bmQgPSAnJzsKICAgIGZvcmVhY2ggKCRjYW5kaWRhdGVzIGFzICRjKSB7IGlmIChmaWxlX2V4aXN0cygkYykpIHsgJGZvdW5kID0gJGM7IGJyZWFrOyB9IH0KICAgIGRlZmluZSgnV1RfQ09ORklHX1BBVEgnLCAkZm91bmQgPzogJGNhbmRpZGF0ZXNbMF0pOwp9CgpmdW5jdGlvbiB3dF9jb25maWdfZXhpc3RzKCk6IGJvb2wgewogICAgcmV0dXJuIGZpbGVfZXhpc3RzKFdUX0NPTkZJR19QQVRIKTsKfQoKZnVuY3Rpb24gd3RfZGIoKTogUERPIHsKICAgIHN0YXRpYyAkcGRvID0gbnVsbDsKICAgIGlmICgkcGRvIGluc3RhbmNlb2YgUERPKSByZXR1cm4gJHBkbzsKCiAgICBpZiAoIXd0X2NvbmZpZ19leGlzdHMoKSkgewogICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdOT19DT05GSUcnKTsKICAgIH0KICAgIHJlcXVpcmVfb25jZSBXVF9DT05GSUdfUEFUSDsKCiAgICAkaG9zdCA9IGRlZmluZWQoJ0RCX0hPU1QnKSA/IERCX0hPU1QgOiAnbG9jYWxob3N0JzsKICAgICRuYW1lID0gZGVmaW5lZCgnREJfTkFNRScpID8gREJfTkFNRSA6ICcnOwogICAgJHVzZXIgPSBkZWZpbmVkKCdEQl9VU0VSJykgPyBEQl9VU0VSIDogJyc7CiAgICAkcGFzcyA9IGRlZmluZWQoJ0RCX1BBU1MnKSA/IERCX1BBU1MgOiAnJzsKCiAgICAkcGRvID0gbmV3IFBETygKICAgICAgICAibXlzcWw6aG9zdD17JGhvc3R9O2RibmFtZT17JG5hbWV9O2NoYXJzZXQ9dXRmOG1iNCIsCiAgICAgICAgJHVzZXIsCiAgICAgICAgJHBhc3MsCiAgICAgICAgWwogICAgICAgICAgICBQRE86OkFUVFJfRVJSTU9ERSAgICAgICAgICAgID0+IFBETzo6RVJSTU9ERV9FWENFUFRJT04sCiAgICAgICAgICAgIFBETzo6QVRUUl9ERUZBVUxUX0ZFVENIX01PREUgPT4gUERPOjpGRVRDSF9BU1NPQywKICAgICAgICAgICAgUERPOjpBVFRSX0VNVUxBVEVfUFJFUEFSRVMgICA9PiBmYWxzZSwKICAgICAgICBdCiAgICApOwogICAgcmV0dXJuICRwZG87Cn0KCi8qKiBKU09OINC+0YLQs9C+0LLQvtGAICovCmZ1bmN0aW9uIHd0X2pzb24oJGRhdGEsIGludCAkY29kZSA9IDIwMCk6IHZvaWQgewogICAgaHR0cF9yZXNwb25zZV9jb2RlKCRjb2RlKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7CiAgICBlY2hvIGpzb25fZW5jb2RlKCRkYXRhLCBKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgIGV4aXQ7Cn0KCmZ1bmN0aW9uIHd0X29rKCRkYXRhID0gdHJ1ZSk6IHZvaWQgIHsgd3RfanNvbihbJ29rJyA9PiB0cnVlLCAgJ2RhdGEnID0+ICRkYXRhXSk7IH0KZnVuY3Rpb24gd3RfZXJyKHN0cmluZyAkbXNnLCBpbnQgJGNvZGUgPSA0MDApOiB2b2lkIHsgd3RfanNvbihbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAkbXNnXSwgJGNvZGUpOyB9CgovKiog0KfQtdGC0LUgSlNPTiBib2R5ICovCmZ1bmN0aW9uIHd0X2JvZHkoKTogYXJyYXkgewogICAgJHJhdyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6Ly9pbnB1dCcpOwogICAgJGogPSBqc29uX2RlY29kZSgkcmF3LCB0cnVlKTsKICAgIHJldHVybiBpc19hcnJheSgkaikgPyAkaiA6IFtdOwp9Cg==', 'offer.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImJnIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+0J7RhNC10YDRgtCwIOKAlCBXZWJ0cml4aWEgSHViPC90aXRsZT4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1ETStTYW5zOndnaHRANDAwOzUwMDs2MDA7NzAwJmZhbWlseT1ETStNb25vOndnaHRANDAwOzUwMDs3MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+Cjpyb290ey0tYmc6I2VlZjNlYzstLXBhbmVsOiNmZmY7LS1saW5lOiM5Y2NjN2Q7LS1zb2Z0OiNlOGYzZGY7LS1pbms6IzE1MTUxNTstLW11dGVkOiM1ZDY0NWI7LS1ncmVlbjojMTU5NDQ3Oy0tZ3JlZW4yOiMwZjdhMzk7LS1yZWQ6I2RjMjYyNjstLWFjY2VudDojNmM2M2ZmOy0tZm46J0RNIFNhbnMnLEFyaWFsLHNhbnMtc2VyaWY7LS1tb25vOidETSBNb25vJyxtb25vc3BhY2V9Cip7Ym94LXNpemluZzpib3JkZXItYm94fQpib2R5e21hcmdpbjowO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWluayk7Zm9udC1mYW1pbHk6dmFyKC0tZm4pfQouc2hlbGx7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczozODBweCBtaW5tYXgoNzYwcHgsMWZyKTtnYXA6MThweDttaW4taGVpZ2h0OjEwMHZoO3BhZGRpbmc6MThweH0KLmVkaXRvcntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4wOCk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjE4cHg7aGVpZ2h0OmNhbGMoMTAwdmggLSAzNnB4KTtvdmVyZmxvdzphdXRvfQoucHJldmlld3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fQoudG9wYmFye2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1ib3R0b206MTRweH0KLmJ0bntib3JkZXI6MDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjlweCAxMnB4O2ZvbnQ6NjAwIDEycHggdmFyKC0tZm4pO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6I2VlZjBmNTtjb2xvcjojMWYyNDMwfQouYnRuLnB7YmFja2dyb3VuZDp2YXIoLS1ncmVlbik7Y29sb3I6I2ZmZn0uYnRuLmF7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOiNmZmZ9LmJ0bi5ke2JhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojYjkxYzFjfS5idG46ZGlzYWJsZWR7b3BhY2l0eTouNDU7Y3Vyc29yOm5vdC1hbGxvd2VkfQpoMXtmb250LXNpemU6MThweDttYXJnaW46MCAwIDJweH0uaGludHtmb250LXNpemU6MTJweDtjb2xvcjojNzc4MDcwO21hcmdpbjowIDAgMTJweDtsaW5lLWhlaWdodDoxLjQ1fQoudGFic3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjZweDttYXJnaW46MTBweCAwIDE0cHh9Ci50YWJ7Ym9yZGVyOjFweCBzb2xpZCAjZDllNWQyO2JhY2tncm91bmQ6I2Y3ZmJmNDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjlweCA4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyfQoudGFiLm9ue2JhY2tncm91bmQ6dmFyKC0tZ3JlZW4pO2JvcmRlci1jb2xvcjp2YXIoLS1ncmVlbik7Y29sb3I6I2ZmZn0KLmdyb3Vwe2JvcmRlci10b3A6MXB4IHNvbGlkICNlZGYyZTg7cGFkZGluZy10b3A6MTJweDttYXJnaW4tdG9wOjEycHh9Ci5ndGl0bGV7Zm9udC1zaXplOjExcHg7Y29sb3I6IzZmNzg2ZDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA4ZW07Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1ib3R0b206OHB4fQpsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM2OTc0Njc7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNGVtO21hcmdpbjo5cHggMCA0cHh9CmlucHV0LHRleHRhcmVhLHNlbGVjdHt3aWR0aDoxMDAlO2JvcmRlcjoxcHggc29saWQgI2RiZTVkNTtiYWNrZ3JvdW5kOiNmYmZkZjk7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzo5cHggMTBweDtmb250OjEzcHggdmFyKC0tZm4pO291dGxpbmU6bm9uZTtjb2xvcjojMTIxODEyfQp0ZXh0YXJlYXtyZXNpemU6dmVydGljYWw7bWluLWhlaWdodDo2MnB4fSBpbnB1dDpmb2N1cyx0ZXh0YXJlYTpmb2N1cyxzZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOnZhcigtLWdyZWVuKTtib3gtc2hhZG93OjAgMCAwIDJweCByZ2JhKDIxLDE0OCw3MSwuMSl9Ci5ncmlkMntkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjhweH0uZ3JpZDN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxLjJmciAuOGZyIC44ZnI7Z2FwOjhweH0KLm1pbmlyb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgODBweCA2OHB4IDFmciAzNHB4O2dhcDo2cHg7YWxpZ24taXRlbXM6ZW5kO21hcmdpbi1ib3R0b206OHB4fQoubWluaXJvdyBidXR0b24sLml0ZW1yb3cgYnV0dG9ue2hlaWdodDozNnB4O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OHB4O2JhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojYjkxYzFjO2N1cnNvcjpwb2ludGVyfQouaXRlbXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAzNHB4O2dhcDo2cHg7bWFyZ2luLWJvdHRvbTo2cHh9Ci5zdmNib3h7Ym9yZGVyOjFweCBzb2xpZCAjZTFlYmRjO2JhY2tncm91bmQ6I2ZiZmRmOTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMHB4O21hcmdpbi1ib3R0b206OXB4fQoubXV0ZWR7Zm9udC1zaXplOjExcHg7Y29sb3I6IzdmODg3ZH0udG9hc3R7cG9zaXRpb246Zml4ZWQ7cmlnaHQ6MjBweDtib3R0b206MjBweDtiYWNrZ3JvdW5kOiMxMDE4MjA7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMnB4IDE2cHg7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpub25lO3otaW5kZXg6NTB9Ci5wYWdle3dpZHRoOjc5NHB4O21pbi1oZWlnaHQ6MTEyM3B4O2JhY2tncm91bmQ6I2ZmZjtib3gtc2hhZG93OjAgMTJweCA0MHB4IHJnYmEoMCwwLDAsLjEyKTtwYWRkaW5nOjU4cHggNThweCA0NHB4O3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0KLndte3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjIxMHB4IDEzMHB4IGF1dG8gMTcwcHg7Zm9udC1zaXplOjQ0MHB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjpyZ2JhKDIxLDE0OCw3MSwuMDcpO2xpbmUtaGVpZ2h0Oi43O3otaW5kZXg6MDtwb2ludGVyLWV2ZW50czpub25lfQouZG9je3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MX0ubG9nb3tmb250LXNpemU6MjdweDtmb250LXdlaWdodDo4MDA7Y29sb3I6dmFyKC0tZ3JlZW4pO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtc2hhZG93OjFweCAxcHggMCAjMGI1ZjJhO21hcmdpbi1ib3R0b206NjRweH0KLnRpdGxle3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206MzRweH0udGl0bGUgaDJ7Zm9udC1zaXplOjI3cHg7bWFyZ2luOjAgMCA1cHg7Zm9udC13ZWlnaHQ6ODAwfS50aXRsZSAuc3ViamVjdHtmb250LXNpemU6MThweDtmb250LXN0eWxlOml0YWxpY30KLmxlYWR7Zm9udC1zaXplOjE3cHg7bGluZS1oZWlnaHQ6MS41NTttYXJnaW4tYm90dG9tOjE4cHh9LmxlYWQgYntmb250LXdlaWdodDo4MDB9LmxlYWQgYXtjb2xvcjojMTQ2NWQ4O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9Ci5zZWN0aW9uLXRpdGxle2ZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0OjgwMDttYXJnaW46MTZweCAwIDhweH0ucm9tYW57Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6ODAwO21hcmdpbjo4cHggMCA0cHg7cGFkZGluZy1sZWZ0OjIycHh9Ci5zdmN7bWFyZ2luOjhweCAwIDIycHg7cGFkZGluZy1sZWZ0OjI0cHh9LnN2YyBoM3tmb250LXNpemU6MTdweDttYXJnaW46MCAwIDhweH0uc3ZjIHVse21hcmdpbjowO3BhZGRpbmctbGVmdDozNHB4fS5zdmMgbGl7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MS40NTttYXJnaW46NHB4IDB9Ci5wcmljZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW4tdG9wOjE4cHg7Zm9udC1zaXplOjE1cHh9LnByaWNlIHRoLC5wcmljZSB0ZHtib3JkZXI6MS40cHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoxMHB4IDEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlfS5wcmljZSB0aHtmb250LXNpemU6MTdweDtmb250LXdlaWdodDo4MDA7YmFja2dyb3VuZDojZmZmfS5wcmljZSB0cjpudGgtY2hpbGQoZXZlbikgdGR7YmFja2dyb3VuZDp2YXIoLS1zb2Z0KX0ucHJpY2UgdGQ6Zmlyc3QtY2hpbGR7Zm9udC13ZWlnaHQ6ODAwfS5wcmljZSAudG90YWwgdGR7YmFja2dyb3VuZDojZmZmIWltcG9ydGFudDtmb250LXNpemU6MThweDtmb250LXdlaWdodDo4MDB9LnByaWNlIC5sZWZ0e3RleHQtYWxpZ246bGVmdH0ucHJpY2UgLnNtYWxse2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O21hcmdpbi10b3A6M3B4fQouZm9vdGVyLW5vdGV7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxNnB4O21hcmdpbi10b3A6MzhweH0uY29udGFjdHtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjM1O21hcmdpbi10b3A6OHB4fS5jb250YWN0IGF7Y29sb3I6IzE0NjVkOH0ucGFnZW5ve3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjU4cHg7Ym90dG9tOjQycHg7Zm9udDoxNXB4IHZhcigtLW1vbm8pfQoucGFnZS50d297bWFyZ2luLXRvcDoxOHB4fS5wYWdlLnR3byAubG9nb3ttYXJnaW4tYm90dG9tOjQycHh9LnRlcm1ze2ZvbnQtc2l6ZToxN3B4O2xpbmUtaGVpZ2h0OjEuNTV9LnRlcm1zIGgze2ZvbnQtc2l6ZToxOHB4O21hcmdpbjoxNnB4IDAgOHB4fS50ZXJtcyB1bHttYXJnaW46MCAwIDEycHggMjBweH0udGVybXMgbGl7bWFyZ2luOjhweCAwfS5ub3RlcyBsaXttYXJnaW46NnB4IDB9LnNpZ25ze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6NzBweDttYXJnaW4tdG9wOjQ2cHg7Zm9udC1zaXplOjE2cHh9LnNpZ2xpbmV7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICMzMzM7aGVpZ2h0OjI4cHg7bWFyZ2luLWJvdHRvbTo2cHh9LnNpZy1uYW1le3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6OHB4fQpAbWVkaWEobWF4LXdpZHRoOjExODBweCl7LnNoZWxse2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9LmVkaXRvcntwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6YXV0b30ucHJldmlld3tvdmVyZmxvdzphdXRvO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5wYWdle3RyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnR9fQpAbWVkaWEgcHJpbnR7CiAgQHBhZ2V7c2l6ZTpBNDttYXJnaW46MH0KICBib2R5e2JhY2tncm91bmQ6I2ZmZn0uc2hlbGx7ZGlzcGxheTpibG9jaztwYWRkaW5nOjB9LmVkaXRvciwudG9hc3R7ZGlzcGxheTpub25lIWltcG9ydGFudH0ucHJldmlld3tkaXNwbGF5OmJsb2NrfS5wYWdle3dpZHRoOjIxMG1tO21pbi1oZWlnaHQ6Mjk3bW07Ym94LXNoYWRvdzpub25lO21hcmdpbjowO3BhZGRpbmc6MTVtbSAxNW1tIDEybW07cGFnZS1icmVhay1hZnRlcjphbHdheXN9LnBhZ2UudHdve21hcmdpbi10b3A6MH0ucGFnZW5ve3JpZ2h0OjE1bW07Ym90dG9tOjEybW19Lndte2luc2V0OjU4bW0gMzRtbSBhdXRvIDQ1bW07Zm9udC1zaXplOjExOG1tfS5sb2dve21hcmdpbi1ib3R0b206MThtbX0udGl0bGUgaDJ7Zm9udC1zaXplOjI0cHR9LnRpdGxlIC5zdWJqZWN0e2ZvbnQtc2l6ZToxNXB0fS5sZWFkLC50ZXJtc3tmb250LXNpemU6MTRwdH0ucHJpY2V7Zm9udC1zaXplOjEycHR9LnByaWNlIHRoe2ZvbnQtc2l6ZToxNHB0fS5wcmljZSB0ZHtwYWRkaW5nOjdwdH0uZm9vdGVyLW5vdGV7bWFyZ2luLXRvcDoxNm1tfQp9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9InNoZWxsIj4KICA8YXNpZGUgY2xhc3M9ImVkaXRvciI+CiAgICA8ZGl2IGNsYXNzPSJ0b3BiYXIiPgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9J2luZGV4Lmh0bWwnIj7ihpAgSHViPC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBwIiBvbmNsaWNrPSJzYXZlT2ZmZXIoKSI+0JfQsNC/0LDQt9C4PC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBhIiBvbmNsaWNrPSJkdXBsaWNhdGVPZmZlcigpIj7QlNGD0LHQu9C40YDQsNC5PC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0id2luZG93LnByaW50KCkiPlBERiAvINCf0LXRh9Cw0YI8L2J1dHRvbj4KICAgIDwvZGl2PgogICAgPGgxPtCg0LXQtNCw0LrRgtC+0YAg0L3QsCDQvtGE0LXRgNGC0LA8L2gxPgogICAgPHAgY2xhc3M9ImhpbnQiPtCh0YrQt9C00LDQuSDQuCDRgNC10LTQsNC60YLQuNGA0LDQuSDQvtGE0LXRgNGC0Lgg0LrQsNGC0L4g0L/RgNC40LzQtdGA0LjRgtC1INC30LAgQjJCINGB0LjRgdGC0LXQvNCwLiDQktGB0LjRh9C60L4g0YHQtSDQv9Cw0LfQuCDQsiBIdWIt0LAuPC9wPgogICAgPGRpdiBjbGFzcz0idGFicyI+CiAgICAgIDxkaXYgY2xhc3M9InRhYiIgaWQ9InRhYl9vbmVfdGltZSIgb25jbGljaz0ic2V0VGVtcGxhdGUoJ29uZV90aW1lJykiPtCV0LTQvdC+0LrRgNCw0YLQvdCwPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRhYiIgaWQ9InRhYl9tb250aGx5IiBvbmNsaWNrPSJzZXRUZW1wbGF0ZSgnbW9udGhseScpIj7QnNC10YHQtdGH0L3QsDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZ3JvdXAiPgogICAgICA8ZGl2IGNsYXNzPSJndGl0bGUiPtCe0YHQvdC+0LLQvdC4INC00LDQvdC90Lg8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZ3JpZDIiPjxkaXY+PGxhYmVsPtCd0L7QvNC10YA8L2xhYmVsPjxpbnB1dCBpZD0ibnVtIj48L2Rpdj48ZGl2PjxsYWJlbD7QodGC0LDRgtGD0YE8L2xhYmVsPjxzZWxlY3QgaWQ9InN0YXR1cyI+PG9wdGlvbj7Qp9Cw0LrQsNGJ0LA8L29wdGlvbj48b3B0aW9uPtCf0YDQuNC10YLQsDwvb3B0aW9uPjxvcHRpb24+0J7RgtC60LDQt9Cw0L3QsDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvZGl2PgogICAgICA8bGFiZWw+0JfQsNCz0LvQsNCy0LjQtSAvINC/0YDQtdC00LzQtdGCPC9sYWJlbD48aW5wdXQgaWQ9InN1YmplY3QiPgogICAgICA8ZGl2IGNsYXNzPSJncmlkMiI+PGRpdj48bGFiZWw+0JrQu9C40LXQvdGCPC9sYWJlbD48aW5wdXQgaWQ9ImNsaWVudCI+PC9kaXY+PGRpdj48bGFiZWw+0J7QsdGA0YrRidC10L3QuNC1PC9sYWJlbD48aW5wdXQgaWQ9ImdyZWV0aW5nIj48L2Rpdj48L2Rpdj4KICAgICAgPGxhYmVsPtCS0YrQstC10LbQtNCw0Ykg0YLQtdC60YHRgjwvbGFiZWw+PHRleHRhcmVhIGlkPSJpbnRybyI+PC90ZXh0YXJlYT4KICAgICAgPGRpdiBjbGFzcz0iZ3JpZDMiPjxkaXY+PGxhYmVsPtCU0LDRgtCwPC9sYWJlbD48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9Imlzc3VlX2RhdGUiPjwvZGl2PjxkaXY+PGxhYmVsPtCS0LDQu9C40LTQvdC+0YHRgiDQtNC90Lg8L2xhYmVsPjxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ2YWxpZF9kYXlzIj48L2Rpdj48ZGl2PjxsYWJlbD7QodGA0L7QuiDQtNC90Lg8L2xhYmVsPjxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ3b3JrX2RheXMiPjwvZGl2PjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZ3JvdXAiPgogICAgICA8ZGl2IGNsYXNzPSJndGl0bGUiPtCj0YHQu9GD0LPQuCDQuCDRhNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGC0Lg8L2Rpdj4KICAgICAgPGRpdiBpZD0ic3ZjRWRpdG9yIj48L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBzdHlsZT0id2lkdGg6MTAwJSIgb25jbGljaz0iYWRkR3JvdXAoKSI+KyDQlNC+0LHQsNCy0Lgg0LPRgNGD0L/QsDwvYnV0dG9uPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZ3JvdXAiPgogICAgICA8ZGl2IGNsYXNzPSJndGl0bGUiPtCm0LXQvdC+0LLQsCDQu9C40YHRgtCwPC9kaXY+CiAgICAgIDxkaXYgaWQ9InJvd3NFZGl0b3IiPjwvZGl2PgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHN0eWxlPSJ3aWR0aDoxMDAlIiBvbmNsaWNrPSJhZGRSb3coKSI+KyDQlNC+0LHQsNCy0Lgg0YDQtdC0PC9idXR0b24+CiAgICAgIDxwIGNsYXNzPSJtdXRlZCI+0KHRg9C80LDRgtCwINGB0LUg0LjQt9GH0LjRgdC70Y/QstCwINC+0YIg0LrQvtC70L7QvdCw0YLQsCDigJ7QmtGA0LDQudC90LAg0YbQtdC90LDigJwuINCQ0LrQviDRgNC10LTRitGCINC1INGC0LXQutGB0YLQvtCyLCDQvtGB0YLQsNCy0LggMC48L3A+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJncm91cCI+CiAgICAgIDxkaXYgY2xhc3M9Imd0aXRsZSI+0KPRgdC70L7QstC40Y8g0Lgg0LHQtdC70LXQttC60Lg8L2Rpdj4KICAgICAgPGxhYmVsPtCf0LvQsNGJ0LDQvdC1PC9sYWJlbD48dGV4dGFyZWEgaWQ9InBheW1lbnQiPjwvdGV4dGFyZWE+CiAgICAgIDxsYWJlbD7QlNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0LHQtdC70LXQttC60Lg8L2xhYmVsPjx0ZXh0YXJlYSBpZD0ibm90ZXMiPjwvdGV4dGFyZWE+CiAgICAgIDxkaXYgY2xhc3M9ImdyaWQyIj48ZGl2PjxsYWJlbD7QmNC30LPQvtGC0LLQuNC7PC9sYWJlbD48aW5wdXQgaWQ9InByZXBhcmVkX2J5Ij48L2Rpdj48ZGl2PjxsYWJlbD7Qn9GA0LjQtdC7PC9sYWJlbD48aW5wdXQgaWQ9ImFjY2VwdGVkX2J5Ij48L2Rpdj48L2Rpdj4KICAgICAgPGxhYmVsPtCa0L7QvdGC0LDQutGC0Lg8L2xhYmVsPjx0ZXh0YXJlYSBpZD0iY29udGFjdHMiPjwvdGV4dGFyZWE+CiAgICA8L2Rpdj4KICA8L2FzaWRlPgoKICA8bWFpbiBjbGFzcz0icHJldmlldyI+CiAgICA8ZGl2PgogICAgICA8c2VjdGlvbiBjbGFzcz0icGFnZSI+CiAgICAgICAgPGRpdiBjbGFzcz0id20iPlc8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb2MiIGlkPSJwYWdlMSI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW5vIj4vIDEgLzwvZGl2PgogICAgICA8L3NlY3Rpb24+CiAgICAgIDxzZWN0aW9uIGNsYXNzPSJwYWdlIHR3byI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG9jIiBpZD0icGFnZTIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VubyI+LyAyIC88L2Rpdj4KICAgICAgPC9zZWN0aW9uPgogICAgPC9kaXY+CiAgPC9tYWluPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9hc3QiIGlkPSJ0b2FzdCI+PC9kaXY+Cgo8c2NyaXB0PgondXNlIHN0cmljdCc7CmNvbnN0IEFQST0oZnVuY3Rpb24oKXtjb25zdCBiYXNlPXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL29mZmVyXC5odG1sJC8sJycpLnJlcGxhY2UoL1wvJC8sJycpO3JldHVybiBiYXNlKycvYXBpLnBocCc7fSkoKTsKY29uc3QgcXM9bmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpOwpsZXQgb2ZmZXJJZD1xcy5nZXQoJ2lkJyl8fCcnOwpsZXQgZGF0YT17fTsKCmZ1bmN0aW9uIHRvZGF5KCl7cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTt9CmZ1bmN0aW9uIG51bURlZmF1bHQoKXtyZXR1cm4gU3RyaW5nKE1hdGguZmxvb3IoNDAwK01hdGgucmFuZG9tKCkqNTAwKSkucGFkU3RhcnQoMTAsJzAnKTt9CmZ1bmN0aW9uIG1vbmV5KG4pe3JldHVybiAn4oKsICcrTnVtYmVyKG58fDApLnRvTG9jYWxlU3RyaW5nKCdkZS1ERScse21pbmltdW1GcmFjdGlvbkRpZ2l0czoyLG1heGltdW1GcmFjdGlvbkRpZ2l0czoyfSk7fQpmdW5jdGlvbiBlc2Mocyl7cmV0dXJuIFN0cmluZyhzPT1udWxsPycnOnMpLnJlcGxhY2UoLyYvZywnJmFtcDsnKS5yZXBsYWNlKC88L2csJyZsdDsnKS5yZXBsYWNlKC8+L2csJyZndDsnKS5yZXBsYWNlKC8iL2csJyZxdW90OycpO30KZnVuY3Rpb24gbmwocyl7cmV0dXJuIGVzYyhzKS5yZXBsYWNlKC9cbi9nLCc8YnI+Jyk7fQpmdW5jdGlvbiB0b2FzdChtKXtjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2FzdCcpO3QudGV4dENvbnRlbnQ9bTt0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztzZXRUaW1lb3V0KCgpPT50LnN0eWxlLmRpc3BsYXk9J25vbmUnLDI2MDApO30KZnVuY3Rpb24gZGF0ZUJnKHMpe2lmKCFzKXJldHVybiAnJztjb25zdCBkPW5ldyBEYXRlKHMrJ1QwMDowMDowMCcpO3JldHVybiBkLnRvTG9jYWxlRGF0ZVN0cmluZygnYmctQkcnLHtkYXk6JzItZGlnaXQnLG1vbnRoOicyLWRpZ2l0Jyx5ZWFyOidudW1lcmljJ30pKyfQsy4nO30KYXN5bmMgZnVuY3Rpb24gYWYoYWN0aW9uLG1ldGhvZCxib2R5LGV4dHJhKXttZXRob2Q9bWV0aG9kfHwnR0VUJztleHRyYT1leHRyYXx8Jyc7Y29uc3Qgbz17bWV0aG9kLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJ319O2lmKGJvZHkpby5ib2R5PUpTT04uc3RyaW5naWZ5KGJvZHkpO2NvbnN0IHI9YXdhaXQgZmV0Y2goQVBJKyc/YWN0aW9uPScrYWN0aW9uK2V4dHJhLG8pO2NvbnN0IGo9YXdhaXQgci5qc29uKCk7aWYoIWoub2spdGhyb3cgbmV3IEVycm9yKGouZXJyb3J8fCfQk9GA0LXRiNC60LAnKTtyZXR1cm4gai5kYXRhO30KCmZ1bmN0aW9uIHRlbXBsYXRlKHR5cGUpewogIGNvbnN0IG1vbnRobHk9dHlwZT09PSdtb250aGx5JzsKICByZXR1cm4gewogICAgdHlwZSwKICAgIG51bTogbW9udGhseT8nMDAwMDAwMDQyOCc6JzAwMDAwMDA0MjcnLAogICAgc3RhdHVzOifQp9Cw0LrQsNGJ0LAnLAogICAgc3ViamVjdDogbW9udGhseT8n0J7RhNC10YDRgtCwINC30LAgYjJiINGB0LjRgdGC0LXQvNCwINC4INGA0LXQtNC40LfQsNC50L0g0L3QsCBtdXNhbmJnLmNvbSc6J9Ce0YTQtdGA0YLQsCDQt9CwINC40LfRgNCw0LHQvtGC0LrQsCDQvdCwIGIyYiDRgdC40YHRgtC10LzQsCDQuCDRgNC10LTQuNC30LDQudC9INC90LAgbXVzYW5iZy5jb20nLAogICAgY2xpZW50OifQpdCw0LrQsNC9INCU0LXQstC10LTQttC4JywKICAgIGdyZWV0aW5nOifQo9Cy0LDQttCw0LXQvNC4LCDQsy3QvSDQlNC10LLQtdC00LbQuCcsCiAgICBpbnRybzon0JIg0L3QsNGI0LDRgtCwINC+0YTQtdGA0YLQsCDQt9CwINC40LfRgNCw0LHQvtGC0LrQsCDQvdCwIGIyYiDRgdC40YHRgtC10LzQsCDQuCDRgNC10LTQuNC30LDQudC9INC90LAgbXVzYW5iZy5jb20g0YHQsCDQstC60LvRjtGH0LXQvdC4INGB0LvQtdC00L3QuNGC0LUg0YTRg9C90LrRhtC40L7QvdCw0LvQvdC+0YHRgtC4OicsCiAgICBpc3N1ZV9kYXRlOicyMDI2LTA3LTA3JywKICAgIHZhbGlkX2RheXM6MzAsCiAgICB3b3JrX2RheXM6MzAsCiAgICBncm91cHM6WwogICAgICB7dGl0bGU6J0kuINCY0LfRgNCw0LHQvtGC0LrQsCcsaXRlbXM6WwogICAgICAgIHt0aXRsZTonMS4g0JTQuNC30LDQudC9INC90LAg0LEy0LEg0YHQuNGB0YLQtdC80LDRgtCwINC4INGD0LXQsSDRgdCw0LnRgtCwOicsYnVsbGV0czpbJ9Cj0L3QuNC60LDQu9C10L0g0Lgg0LzQvtC00LXRgNC10L0g0LTQuNC30LDQudC9Jywn0JDQtNCw0L/RgtC40LLQvdC+0YHRgiDRgSDRg9GB0YLRgNC+0LnRgdGC0LLQsCcsJ9Cj0LTQvtCx0LXQvSDQv9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQuCDQuCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNGB0LrQuCDQuNC90YLQtdGA0YTQtdC50YEnXX0sCiAgICAgICAge3RpdGxlOicyLiDQmNC90YLQtdCz0YDQsNGG0LjQuDonLGJ1bGxldHM6WyfQmNC90YLQtdCz0YDQsNGG0LjRjyDRgSDQutGD0YDQuNC10YDRgdC60Lgg0YTQuNGA0LzQuCDQvdCwIEIyQiDRgdC40YHRgtC10LzQsNGC0LAnLCfQmNC90YLQtdCz0YDQsNGG0LjRjyDQvdCwINCx0LDQvdC60L7QstC4INC4INC60LDRgNGC0L7QstC4INC/0LvQsNGJ0LDQvdC40Y8nXX0sCiAgICAgICAge3RpdGxlOiczLiDQntCx0YPRh9C10L3QuNC1OicsYnVsbGV0czpbJ9CS0LrQu9GO0YfQtdC90L4g0L7QsdGD0YfQtdC90LjQtSDQvtGCINC10LrQuNC/0YrRgiDQvdCwIFdFQlRSSVhJQSwg0LfQsCDRg9C/0YDQsNCy0LvRj9Cy0LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC4INC00YAuJ119CiAgICAgIF19CiAgICBdLAogICAgcm93czogbW9udGhseT9bCiAgICAgIHtzZXJ2aWNlOifQpdC+0YHRgtC40L3QsyDQuCDQtNC+0LzQtdC50L0nLHByaWNlOifigqwgMjAwLDAwXG4o0L3QsCDQs9C+0LTQuNC90LApJyxkaXNjb3VudDonLScsZmluYWw6J9Ca0JvQmNCV0J3QotCq0KJcbtCg0JDQl9Cf0J7Qm9CQ0JPQkCcsYW1vdW50OjB9LAogICAgICB7c2VydmljZTon0JTQvtGA0LDQsdC+0YLQutC4INC/0L4g0LTQuNC30LDQudC90LAg0L3QsCDRgdCw0LnRgtCwJyxwcmljZTon4oKsIDEzMDAuMDBcbijQtdC00L3QvtC60YDQsNGC0L3QviknLGRpc2NvdW50OictIDU1JScsZmluYWw6J+KCrCA1ODUsMDBcbijQtdC00L3QvtC60YDQsNGC0L3QviknLGFtb3VudDo1ODV9LAogICAgICB7c2VydmljZTonQjJCINGB0LjRgdGC0LXQvNCwINC80LXRgdC10YfQvdCwINGD0YHQu9GD0LPQsCcscHJpY2U6J+KCrCAxNTAsMDBcbijQvdCwINC80LXRgdC10YYpJyxkaXNjb3VudDonLSAwJScsZmluYWw6J+KCrCAxNTAsMDBcbijQvNC10YHQtdGGKScsYW1vdW50OjE1MCxtb250aGx5OjF9LAogICAgICB7c2VydmljZTon0JTQuNCz0LjRgtCw0LvQtdC9INC/0YDQvtC00YPQutGC0L7QsiDQutCw0YLQsNC70L7QsycscHJpY2U6J+KCrCA0NTAsMDAnLGRpc2NvdW50OictMTAwJScsZmluYWw6J+KCrCAwMCwwMCcsYW1vdW50OjB9LAogICAgICB7c2VydmljZTon0JzQtdGB0LXRh9C90LAg0L/QvtC00LTRgNGK0LbQutCwJyxwcmljZTon4oKsIDEyMCwwMCcsZGlzY291bnQ6Jy0xMDAlJyxmaW5hbDon4oKsIDAwLDAwJyxhbW91bnQ6MCxtb250aGx5OjF9CiAgICBdOlsKICAgICAge3NlcnZpY2U6J9Cl0L7RgdGC0LjQvdCzINC4INC00L7QvNC10LnQvScscHJpY2U6J+KCrCAyMDAsMDBcbijQvdCwINCz0L7QtNC40L3QsCknLGRpc2NvdW50OictJyxmaW5hbDon0JrQm9CY0JXQndCi0KrQolxu0KDQkNCX0J/QntCb0JDQk9CQJyxhbW91bnQ6MH0sCiAgICAgIHtzZXJ2aWNlOifQlNC+0YDQsNCx0L7RgtC60Lgg0L/QviDQtNC40LfQsNC50L3QsCDQvdCwINGB0LDQudGC0LAnLHByaWNlOifigqwgMTMwMC4wMFxuKNC10LTQvdC+0LrRgNCw0YLQvdC+KScsZGlzY291bnQ6Jy0gNTUlJyxmaW5hbDon4oKsIDU4NSwwMFxuKNC10LTQvdC+0LrRgNCw0YLQvdC+KScsYW1vdW50OjU4NX0sCiAgICAgIHtzZXJ2aWNlOifQmNC30YDQsNCx0L7RgtC60LAg0L3QsCBCMkIg0YHQuNGB0YLQtdC80LAnLHByaWNlOifigqwgMzIwMCwwMFxuKNC10LTQvdC+0LrRgNCw0YLQvdC+KScsZGlzY291bnQ6Jy0gNTAlJyxmaW5hbDon4oKsIDE2MDAsMDBcbijQtdC00L3QvtC60YDQsNGC0L3QviknLGFtb3VudDoxNjAwfSwKICAgICAge3NlcnZpY2U6J9CU0LjQs9C40YLQsNC70LXQvSDQv9GA0L7QtNGD0LrRgtC+0LIg0LrQsNGC0LDQu9C+0LMnLHByaWNlOifigqwgNDUwLDAwJyxkaXNjb3VudDonLTEwMCUnLGZpbmFsOifigqwgMDAsMDAnLGFtb3VudDowfSwKICAgICAge3NlcnZpY2U6J9Cc0LXRgdC10YfQvdCwINC/0L7QtNC00YDRitC20LrQsCcscHJpY2U6J+KCrCAxMjAsMDAnLGRpc2NvdW50OictNTAlJyxmaW5hbDon4oKsIDYwLDAwJyxhbW91bnQ6NjAsbW9udGhseToxfQogICAgXSwKICAgIHBheW1lbnQ6J9Cf0YDQuCDQv9GA0LjQtdC80LDQvdC1INC90LAg0L7RhNC10YDRgtCw0YLQsCDRgdC1INC30LDQv9C70LDRidCwIDUwJSDQsNCy0LDQvdGB0L7QstC+INGBINGG0LXQuyDQutCw0L/QsNGA0L4uXG7QntGE0LXRgNGC0LDRgtCwINC1INCy0LDQu9C40LTQvdCwINCyINGB0YDQvtC6INC+0YIgMzAg0LTQvdC4INGB0LvQtdC0INC00LDRgtCw0YLQsCDQvdCwINC40LfQtNCw0LLQsNC90LXRgtC+LicsCiAgICBub3Rlczon0J/QvtC00LTRgNGK0LbQutCw0YLQsCDQstC60LvRjtGH0LLQsCAtIDcvMjQg0LzQvtC90LjRgtC+0YDQuNC90LMg0L3QsCDQv9C70LDRgtGE0L7RgNC80LDRgtCwINC4INGB0LDQudGC0LAsINC+0YLRgdGC0YDQsNC90Y/QstCw0L3QtSDQvdCwINC90LXRgNC10LTQvdC+0YHRgtC4LCDRgdC80LXQvdGP0L3QtSDQvdCwINCx0LDQvdC10YDQuCwg0LDQutGC0YPQsNC70LjQt9C40YDQsNC90LUg0L3QsCDRgdC40YHRgtC10LzQsNGC0LAg0LLRgdGP0LrQsCDRgdC10LTQvNC40YbQsCwg0LXQttC10LTQvdC10LLQtdC9INCx0LXQutGK0L8g0L3QsCDRgdC40YHRgtC10LzQsNGC0LAsINGB0LrQsNC90LjRgNCw0L3QtSDQvdCwINGB0LjRgdGC0LXQvNCw0YLQsCDQstGB0Y/QutCwINGB0LXQtNC80LjRhtCwINC30LAg0LfQu9C+0L3QsNC80LXRgNC10L0g0LTQvtGB0YLRitC/LicsCiAgICBwcmVwYXJlZF9ieTon0KXQsNC60LDQvSDQntGB0LzQsNC9JywKICAgIGFjY2VwdGVkX2J5OifQpdCw0LrQsNC9INCU0LXQstC10LTQttC4JywKICAgIGNvbnRhY3RzOifQktGB0LjRh9C60Lgg0YbQtdC90Lgg0YHQsCDQsdC10Lcg0JTQlNChICFcbm9mZmljZUB3ZWJ0cml4aWEuY29tXG4rMzU5IDg4IDQ3NyA4MjE0JwogIH07Cn0KCmZ1bmN0aW9uIHNldFRlbXBsYXRlKHR5cGUpewogIGlmKCFvZmZlcklkICYmICghZGF0YS50eXBlIHx8IGNvbmZpcm0oJ9CU0LAg0LfQsNGA0LXQtNGPINGI0LDQsdC70L7QvdCwINC4INC00LAg0LfQsNC80LXQvdGPINGC0LXQutGD0YnQuNGC0LUg0LTQsNC90L3QuD8nKSkpewogICAgZGF0YT10ZW1wbGF0ZSh0eXBlKTsgZmlsbEVkaXRvcigpOyByZW5kZXJBbGwoKTsKICB9IGVsc2UgewogICAgZGF0YS50eXBlPXR5cGU7IGZpbGxFZGl0b3IoKTsgcmVuZGVyQWxsKCk7CiAgfQp9CgpmdW5jdGlvbiByZWFkRWRpdG9yKCl7CiAgWydudW0nLCdzdGF0dXMnLCdzdWJqZWN0JywnY2xpZW50JywnZ3JlZXRpbmcnLCdpbnRybycsJ2lzc3VlX2RhdGUnLCd2YWxpZF9kYXlzJywnd29ya19kYXlzJywncGF5bWVudCcsJ25vdGVzJywncHJlcGFyZWRfYnknLCdhY2NlcHRlZF9ieScsJ2NvbnRhY3RzJ10uZm9yRWFjaChpZD0+ZGF0YVtpZF09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnZhbHVlKTsKICBkYXRhLmdyb3Vwcz1bLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnN2Y2JveCcpXS5tYXAoYm94PT4oewogICAgdGl0bGU6Ym94LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWs9Z3RdJykudmFsdWUsCiAgICBpdGVtczpbLi4uYm94LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdmNpdGVtJyldLm1hcChpdD0+KHsKICAgICAgdGl0bGU6aXQucXVlcnlTZWxlY3RvcignW2RhdGEtaz1pdF0nKS52YWx1ZSwKICAgICAgYnVsbGV0czpbLi4uaXQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtaz1idWxdJyldLm1hcCh4PT54LnZhbHVlKS5maWx0ZXIoQm9vbGVhbikKICAgIH0pKQogIH0pKTsKICBkYXRhLnJvd3M9Wy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5taW5pcm93JyldLm1hcChyPT4oewogICAgc2VydmljZTpyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWs9c2VydmljZV0nKS52YWx1ZSwKICAgIHByaWNlOnIucXVlcnlTZWxlY3RvcignW2RhdGEtaz1wcmljZV0nKS52YWx1ZSwKICAgIGRpc2NvdW50OnIucXVlcnlTZWxlY3RvcignW2RhdGEtaz1kaXNjb3VudF0nKS52YWx1ZSwKICAgIGZpbmFsOnIucXVlcnlTZWxlY3RvcignW2RhdGEtaz1maW5hbF0nKS52YWx1ZSwKICAgIGFtb3VudDpwYXJzZUZsb2F0KHIucXVlcnlTZWxlY3RvcignW2RhdGEtaz1hbW91bnRdJykudmFsdWUpfHwwLAogICAgbW9udGhseTpyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWs9bW9udGhseV0nKS5jaGVja2VkPzE6MAogIH0pKTsKfQpmdW5jdGlvbiBmaWxsRWRpdG9yKCl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYl9vbmVfdGltZScpLmNsYXNzTGlzdC50b2dnbGUoJ29uJyxkYXRhLnR5cGUhPT0nbW9udGhseScpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJfbW9udGhseScpLmNsYXNzTGlzdC50b2dnbGUoJ29uJyxkYXRhLnR5cGU9PT0nbW9udGhseScpOwogIFsnbnVtJywnc3RhdHVzJywnc3ViamVjdCcsJ2NsaWVudCcsJ2dyZWV0aW5nJywnaW50cm8nLCdpc3N1ZV9kYXRlJywndmFsaWRfZGF5cycsJ3dvcmtfZGF5cycsJ3BheW1lbnQnLCdub3RlcycsJ3ByZXBhcmVkX2J5JywnYWNjZXB0ZWRfYnknLCdjb250YWN0cyddLmZvckVhY2goaWQ9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS52YWx1ZT1kYXRhW2lkXXx8JycpOwogIHJlbmRlckdyb3VwRWRpdG9yKCk7IHJlbmRlclJvd3NFZGl0b3IoKTsKfQpmdW5jdGlvbiBiaW5kTGl2ZSgpe2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LHRleHRhcmVhLHNlbGVjdCcpLmZvckVhY2goZWw9PntlbC5vbmlucHV0PSgpPT57cmVhZEVkaXRvcigpO3JlbmRlckFsbCgpO307ZWwub25jaGFuZ2U9KCk9PntyZWFkRWRpdG9yKCk7cmVuZGVyQWxsKCk7fTt9KTt9CmZ1bmN0aW9uIHJlbmRlckdyb3VwRWRpdG9yKCl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Y0VkaXRvcicpLmlubmVySFRNTD0oZGF0YS5ncm91cHN8fFtdKS5tYXAoKGcsZ2kpPT4KICAgICc8ZGl2IGNsYXNzPSJzdmNib3giPjxsYWJlbD7Qk9GA0YPQv9CwPC9sYWJlbD48aW5wdXQgZGF0YS1rPSJndCIgdmFsdWU9IicrZXNjKGcudGl0bGUpKyciPicrCiAgICAnPGRpdiBpZD0iaXRlbXNfJytnaSsnIj4nKyhnLml0ZW1zfHxbXSkubWFwKChpdCxpaSk9Pml0ZW1IdG1sKGdpLGlpLGl0KSkuam9pbignJykrJzwvZGl2PicrCiAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJhZGRJdGVtKCcrZ2krJykiPisg0J/QvtC00YLQvtGH0LrQsDwvYnV0dG9uPiA8YnV0dG9uIGNsYXNzPSJidG4gZCIgb25jbGljaz0iZGVsR3JvdXAoJytnaSsnKSI+0JjQt9GC0YDQuNC5INCz0YDRg9C/0LA8L2J1dHRvbj48L2Rpdj4nCiAgKS5qb2luKCcnKTsKICBiaW5kTGl2ZSgpOwp9CmZ1bmN0aW9uIGl0ZW1IdG1sKGdpLGlpLGl0KXsKICByZXR1cm4gJzxkaXYgY2xhc3M9InN2Y2l0ZW0iIHN0eWxlPSJib3JkZXItdG9wOjFweCBzb2xpZCAjZWRmMmU4O21hcmdpbi10b3A6OXB4O3BhZGRpbmctdG9wOjlweCI+PGxhYmVsPtCX0LDQs9C70LDQstC40LU8L2xhYmVsPjxpbnB1dCBkYXRhLWs9Iml0IiB2YWx1ZT0iJytlc2MoaXQudGl0bGUpKyciPicrCiAgICAnPGxhYmVsPtCR0YPQu9C10YLQuDwvbGFiZWw+JysoaXQuYnVsbGV0c3x8W10pLm1hcCgoYixiaSk9Pic8ZGl2IGNsYXNzPSJpdGVtcm93Ij48aW5wdXQgZGF0YS1rPSJidWwiIHZhbHVlPSInK2VzYyhiKSsnIj48YnV0dG9uIG9uY2xpY2s9ImRlbEJ1bGxldCgnK2dpKycsJytpaSsnLCcrYmkrJykiPsOXPC9idXR0b24+PC9kaXY+Jykuam9pbignJykrCiAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJhZGRCdWxsZXQoJytnaSsnLCcraWkrJykiPisg0JHRg9C70LXRgjwvYnV0dG9uPiA8YnV0dG9uIGNsYXNzPSJidG4gZCIgb25jbGljaz0iZGVsSXRlbSgnK2dpKycsJytpaSsnKSI+0JjQt9GC0YDQuNC5PC9idXR0b24+PC9kaXY+JzsKfQpmdW5jdGlvbiByZW5kZXJSb3dzRWRpdG9yKCl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvd3NFZGl0b3InKS5pbm5lckhUTUw9KGRhdGEucm93c3x8W10pLm1hcCgocixpKT0+CiAgICAnPGRpdiBjbGFzcz0ibWluaXJvdyI+PGRpdj48bGFiZWw+0KPRgdC70YPQs9CwPC9sYWJlbD48dGV4dGFyZWEgZGF0YS1rPSJzZXJ2aWNlIj4nK2VzYyhyLnNlcnZpY2UpKyc8L3RleHRhcmVhPjwvZGl2PicrCiAgICAnPGRpdj48bGFiZWw+0KbQtdC90LA8L2xhYmVsPjx0ZXh0YXJlYSBkYXRhLWs9InByaWNlIj4nK2VzYyhyLnByaWNlKSsnPC90ZXh0YXJlYT48L2Rpdj4nKwogICAgJzxkaXY+PGxhYmVsPtCe0YLRgdGCLjwvbGFiZWw+PGlucHV0IGRhdGEtaz0iZGlzY291bnQiIHZhbHVlPSInK2VzYyhyLmRpc2NvdW50KSsnIj48L2Rpdj4nKwogICAgJzxkaXY+PGxhYmVsPtCa0YDQsNC50L3QsDwvbGFiZWw+PHRleHRhcmVhIGRhdGEtaz0iZmluYWwiPicrZXNjKHIuZmluYWwpKyc8L3RleHRhcmVhPjxpbnB1dCBkYXRhLWs9ImFtb3VudCIgdHlwZT0ibnVtYmVyIiBzdGVwPSIwLjAxIiB2YWx1ZT0iJysoci5hbW91bnR8fDApKyciIHRpdGxlPSLQodGD0LzQsCDQt9CwINC+0LHRidC+Ij48bGFiZWwgc3R5bGU9InRleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MCI+PGlucHV0IGRhdGEtaz0ibW9udGhseSIgdHlwZT0iY2hlY2tib3giICcrKHIubW9udGhseT8nY2hlY2tlZCc6JycpKycgc3R5bGU9IndpZHRoOmF1dG8iPiDQvNC10YHQtdGH0L3QvjwvbGFiZWw+PC9kaXY+JysKICAgICc8YnV0dG9uIG9uY2xpY2s9ImRlbFJvdygnK2krJykiPsOXPC9idXR0b24+PC9kaXY+JwogICkuam9pbignJyk7CiAgYmluZExpdmUoKTsKfQpmdW5jdGlvbiBhZGRHcm91cCgpe3JlYWRFZGl0b3IoKTtkYXRhLmdyb3Vwcy5wdXNoKHt0aXRsZTon0J3QvtCy0LAg0LPRgNGD0L/QsCcsaXRlbXM6W3t0aXRsZTon0J3QvtCy0LAg0YPRgdC70YPQs9CwOicsYnVsbGV0czpbJ9Ce0L/QuNGB0LDQvdC40LUnXX0gXX0pO3JlbmRlckdyb3VwRWRpdG9yKCk7cmVuZGVyQWxsKCk7fQpmdW5jdGlvbiBkZWxHcm91cChpKXtyZWFkRWRpdG9yKCk7ZGF0YS5ncm91cHMuc3BsaWNlKGksMSk7cmVuZGVyR3JvdXBFZGl0b3IoKTtyZW5kZXJBbGwoKTt9CmZ1bmN0aW9uIGFkZEl0ZW0oZ2kpe3JlYWRFZGl0b3IoKTtkYXRhLmdyb3Vwc1tnaV0uaXRlbXMucHVzaCh7dGl0bGU6J9Cd0L7QstCwINC/0L7QtNGC0L7Rh9C60LA6JyxidWxsZXRzOlsn0J7Qv9C40YHQsNC90LjQtSddfSk7cmVuZGVyR3JvdXBFZGl0b3IoKTtyZW5kZXJBbGwoKTt9CmZ1bmN0aW9uIGRlbEl0ZW0oZ2ksaWkpe3JlYWRFZGl0b3IoKTtkYXRhLmdyb3Vwc1tnaV0uaXRlbXMuc3BsaWNlKGlpLDEpO3JlbmRlckdyb3VwRWRpdG9yKCk7cmVuZGVyQWxsKCk7fQpmdW5jdGlvbiBhZGRCdWxsZXQoZ2ksaWkpe3JlYWRFZGl0b3IoKTtkYXRhLmdyb3Vwc1tnaV0uaXRlbXNbaWldLmJ1bGxldHMucHVzaCgn0J3QvtCyINCx0YPQu9C10YInKTtyZW5kZXJHcm91cEVkaXRvcigpO3JlbmRlckFsbCgpO30KZnVuY3Rpb24gZGVsQnVsbGV0KGdpLGlpLGJpKXtyZWFkRWRpdG9yKCk7ZGF0YS5ncm91cHNbZ2ldLml0ZW1zW2lpXS5idWxsZXRzLnNwbGljZShiaSwxKTtyZW5kZXJHcm91cEVkaXRvcigpO3JlbmRlckFsbCgpO30KZnVuY3Rpb24gYWRkUm93KCl7cmVhZEVkaXRvcigpO2RhdGEucm93cy5wdXNoKHtzZXJ2aWNlOifQndC+0LLQsCDRg9GB0LvRg9Cz0LAnLHByaWNlOifigqwgMCwwMCcsZGlzY291bnQ6Jy0nLGZpbmFsOifigqwgMCwwMCcsYW1vdW50OjB9KTtyZW5kZXJSb3dzRWRpdG9yKCk7cmVuZGVyQWxsKCk7fQpmdW5jdGlvbiBkZWxSb3coaSl7cmVhZEVkaXRvcigpO2RhdGEucm93cy5zcGxpY2UoaSwxKTtyZW5kZXJSb3dzRWRpdG9yKCk7cmVuZGVyQWxsKCk7fQoKZnVuY3Rpb24gdG90YWxzKCl7Y29uc3Qgb25lPShkYXRhLnJvd3N8fFtdKS5maWx0ZXIocj0+IXIubW9udGhseSkucmVkdWNlKChhLHIpPT5hKygrci5hbW91bnR8fDApLDApO2NvbnN0IG1vbj0oZGF0YS5yb3dzfHxbXSkuZmlsdGVyKHI9PnIubW9udGhseSkucmVkdWNlKChhLHIpPT5hKygrci5hbW91bnR8fDApLDApO3JldHVybiB7b25lLG1vbn07fQpmdW5jdGlvbiB2YWxpZERhdGUoKXtjb25zdCBkPW5ldyBEYXRlKChkYXRhLmlzc3VlX2RhdGV8fHRvZGF5KCkpKydUMDA6MDA6MDAnKTtkLnNldERhdGUoZC5nZXREYXRlKCkrKHBhcnNlSW50KGRhdGEudmFsaWRfZGF5cyl8fDMwKSk7cmV0dXJuIGQudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKTt9CmZ1bmN0aW9uIHJvd3NIdG1sKCl7Y29uc3QgdD10b3RhbHMoKTtyZXR1cm4gJzx0YWJsZSBjbGFzcz0icHJpY2UiPjx0aGVhZD48dHI+PHRoPtCj0YHQu9GD0LPQsDwvdGg+PHRoPtCm0LXQvdCwPC90aD48dGg+0J7RgtGB0YLRitC/0LrQsDwvdGg+PHRoPtCa0YDQsNC50L3QsCDRhtC10L3QsDwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT4nKwogIChkYXRhLnJvd3N8fFtdKS5tYXAocj0+Jzx0cj48dGQ+JytubChyLnNlcnZpY2UpKyc8L3RkPjx0ZD4nK25sKHIucHJpY2UpKyc8L3RkPjx0ZD4nK25sKHIuZGlzY291bnQpKyc8L3RkPjx0ZD4nK25sKHIuZmluYWwpKyc8L3RkPjwvdHI+Jykuam9pbignJykrCiAgJzx0ciBjbGFzcz0idG90YWwiPjx0ZD7QntCx0YnQvjo8L3RkPjx0ZCBjb2xzcGFuPSIzIj4nK21vbmV5KHQub25lKSsodC5tb24/JzxzcGFuIGNsYXNzPSJzbWFsbCI+0JzQtdGB0LXRh9C90L46ICcrbW9uZXkodC5tb24pKyc8L3NwYW4+JzonJykrJzwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+JzsKfQpmdW5jdGlvbiByZW5kZXJBbGwoKXsKICBjb25zdCB0PXRvdGFscygpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlMScpLmlubmVySFRNTD0KICAgICc8ZGl2IGNsYXNzPSJsb2dvIj5XRUJUUklYSUE8L2Rpdj48ZGl2IGNsYXNzPSJ0aXRsZSI+PGgyPtCe0YTQtdGA0YLQsCDihJYgJytlc2MoZGF0YS5udW18fCcnKSsnPC9oMj48ZGl2IGNsYXNzPSJzdWJqZWN0Ij4nK2VzYyhkYXRhLnN1YmplY3R8fCcnKSsnPC9kaXY+PC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJsZWFkIj48Yj7QlNC+OjwvYj4gJytlc2MoZGF0YS5jbGllbnR8fCcnKSsnPC9kaXY+PGRpdiBjbGFzcz0ibGVhZCI+Jytlc2MoZGF0YS5ncmVldGluZ3x8JycpKyc8L2Rpdj48ZGl2IGNsYXNzPSJsZWFkIj4nK25sKGRhdGEuaW50cm98fCcnKSsnPC9kaXY+JysKICAgIChkYXRhLmdyb3Vwc3x8W10pLm1hcChnPT4nPGRpdiBjbGFzcz0icm9tYW4iPicrZXNjKGcudGl0bGUpKyc8L2Rpdj4nKyhnLml0ZW1zfHxbXSkubWFwKGl0PT4nPGRpdiBjbGFzcz0ic3ZjIj48aDM+Jytlc2MoaXQudGl0bGUpKyc8L2gzPjx1bD4nKyhpdC5idWxsZXRzfHxbXSkubWFwKGI9Pic8bGk+Jytlc2MoYikrJzwvbGk+Jykuam9pbignJykrJzwvdWw+PC9kaXY+Jykuam9pbignJykpLmpvaW4oJycpKwogICAgJzxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPjQuINCm0LXQvdC+0LLQsCDQu9C40YHRgtCwOjwvZGl2Picrcm93c0h0bWwoKSsKICAgICc8ZGl2IGNsYXNzPSJmb290ZXItbm90ZSI+JytubCgoZGF0YS5jb250YWN0c3x8JycpLnNwbGl0KCdcXG4nKVswXXx8J9CS0YHQuNGH0LrQuCDRhtC10L3QuCDRgdCwINCx0LXQtyDQlNCU0KEgIScpKyc8L2Rpdj48ZGl2IGNsYXNzPSJjb250YWN0Ij4nK25sKChkYXRhLmNvbnRhY3RzfHwnJykuc3BsaXQoJ1xcbicpLnNsaWNlKDEpLmpvaW4oJ1xcbicpKSsnPC9kaXY+JzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZTInKS5pbm5lckhUTUw9CiAgICAnPGRpdiBjbGFzcz0idGVybXMiPjxoMz41LiDQodGA0L7QuiDQt9CwINC40LfRgNCw0LHQvtGC0LrQsDo8L2gzPjx1bD48bGk+0KTQuNGA0LzQsCDigJjigJjQo9CV0JHQotCg0JjQmtCh0JjQkCDQldCe0J7QlOKAmOKAmCDQv9GA0LXQtNC+0YHRgtCw0LLRjyDRgdGA0L7QuiDQt9CwINC40LfRgNCw0LHQvtGC0LrQsCDQtNC+ICcrZXNjKGRhdGEud29ya19kYXlzfHwzMCkrJyDRgNCw0LHQvtGC0L3QuCDQtNC90LguPC9saT48L3VsPicrCiAgICAnPGgzPjYuINCf0LvQsNGJ0LDQvdC1INC4INGB0YDQvtC60L7QstC1OjwvaDM+PHVsPicrKGRhdGEucGF5bWVudHx8JycpLnNwbGl0KCdcXG4nKS5maWx0ZXIoQm9vbGVhbikubWFwKHg9Pic8bGk+Jytlc2MoeCkrJzwvbGk+Jykuam9pbignJykrCiAgICAnPGxpPtCe0YTQtdGA0YLQsNGC0LAg0YHQtSDQuNC30LTQsNCy0LAg0L3QsCDQtNCw0YLQsDogJytkYXRlQmcoZGF0YS5pc3N1ZV9kYXRlfHx0b2RheSgpKSsnPC9saT48bGk+0J7RhNC10YDRgtCw0YLQsCDQtSDQstCw0LvQuNC00L3QsCDQtNC+OiAnK2RhdGVCZyh2YWxpZERhdGUoKSkrJzwvbGk+PC91bD4nKwogICAgJzxoMz44LiDQlNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0LHQtdC70LXQttC60Lg6PC9oMz48dWwgY2xhc3M9Im5vdGVzIj4nKyhkYXRhLm5vdGVzfHwnJykuc3BsaXQoJ1xcbicpLmZpbHRlcihCb29sZWFuKS5tYXAoeD0+JzxsaT4nK2VzYyh4KSsnPC9saT4nKS5qb2luKCcnKSsnPC91bD48L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9InNpZ25zIj48ZGl2PjxkaXY+0JjQt9Cz0L7RgtCy0LjQuzo8L2Rpdj48ZGl2IGNsYXNzPSJzaWdsaW5lIj48L2Rpdj48ZGl2IGNsYXNzPSJzaWctbmFtZSI+LyAnK2VzYyhkYXRhLnByZXBhcmVkX2J5fHwnJykrJyAvPC9kaXY+PC9kaXY+PGRpdj48ZGl2PtCf0YDQuNC10Ls6PC9kaXY+PGRpdiBjbGFzcz0ic2lnbGluZSI+PC9kaXY+PGRpdiBjbGFzcz0ic2lnLW5hbWUiPi8gJytlc2MoZGF0YS5hY2NlcHRlZF9ieXx8JycpKycgLzwvZGl2PjwvZGl2PjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iZm9vdGVyLW5vdGUiIHN0eWxlPSJtYXJnaW4tdG9wOjcwcHgiPicrbmwoKGRhdGEuY29udGFjdHN8fCcnKS5zcGxpdCgnXFxuJylbMF18fCfQktGB0LjRh9C60Lgg0YbQtdC90Lgg0YHQsCDQsdC10Lcg0JTQlNChICEnKSsnPC9kaXY+PGRpdiBjbGFzcz0iY29udGFjdCI+JytubCgoZGF0YS5jb250YWN0c3x8JycpLnNwbGl0KCdcXG4nKS5zbGljZSgxKS5qb2luKCdcXG4nKSkrJzwvZGl2Pic7CiAgcmV0dXJuIHQ7Cn0KYXN5bmMgZnVuY3Rpb24gc2F2ZU9mZmVyKCl7CiAgdHJ5ewogICAgcmVhZEVkaXRvcigpOyBjb25zdCB0PXRvdGFscygpOwogICAgY29uc3Qgc2F2ZWQ9YXdhaXQgYWYoJ29mZmVycycsJ1BPU1QnLHtpZDpvZmZlcklkfHx1bmRlZmluZWQsbnVtOmRhdGEubnVtLGNsaWVudDpkYXRhLmNsaWVudCxzZXJ2aWNlOmRhdGEuc3ViamVjdCx0b3RhbDp0Lm9uZSxzdGF0dXM6ZGF0YS5zdGF0dXMsb2ZmZXJfdHlwZTpkYXRhLnR5cGUsZGV0YWlsczpkYXRhfSk7CiAgICBvZmZlcklkPXNhdmVkLmlkOyBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCcnLCdvZmZlci5odG1sP2lkPScrZW5jb2RlVVJJQ29tcG9uZW50KG9mZmVySWQpKTsgdG9hc3QoJ9Ce0YTQtdGA0YLQsNGC0LAg0LUg0LfQsNC/0LDQt9C10L3QsCcpOwogIH1jYXRjaChlKXt0b2FzdCgn0JPRgNC10YjQutCwOiAnK2UubWVzc2FnZSk7fQp9CmFzeW5jIGZ1bmN0aW9uIGR1cGxpY2F0ZU9mZmVyKCl7cmVhZEVkaXRvcigpO29mZmVySWQ9Jyc7ZGF0YS5udW09bnVtRGVmYXVsdCgpO2ZpbGxFZGl0b3IoKTtyZW5kZXJBbGwoKTthd2FpdCBzYXZlT2ZmZXIoKTt9CmFzeW5jIGZ1bmN0aW9uIGluaXQoKXsKICBpZihvZmZlcklkKXsKICAgIHRyeXtjb25zdCByb3c9YXdhaXQgYWYoJ29mZmVycycsJ0dFVCcsbnVsbCwnJmlkPScrZW5jb2RlVVJJQ29tcG9uZW50KG9mZmVySWQpKTtkYXRhPXJvdy5kZXRhaWxzP0pTT04ucGFyc2Uocm93LmRldGFpbHMpOnRlbXBsYXRlKHJvdy5vZmZlcl90eXBlfHwnb25lX3RpbWUnKTtkYXRhLm51bT1yb3cubnVtfHxkYXRhLm51bTtkYXRhLmNsaWVudD1yb3cuY2xpZW50fHxkYXRhLmNsaWVudDtkYXRhLnN1YmplY3Q9cm93LnNlcnZpY2V8fGRhdGEuc3ViamVjdDtkYXRhLnN0YXR1cz1yb3cuc3RhdHVzfHxkYXRhLnN0YXR1czt9Y2F0Y2goZSl7dG9hc3QoJ9CT0YDQtdGI0LrQsDogJytlLm1lc3NhZ2UpO2RhdGE9dGVtcGxhdGUocXMuZ2V0KCd0eXBlJyl8fCdvbmVfdGltZScpO30KICB9IGVsc2UgZGF0YT10ZW1wbGF0ZShxcy5nZXQoJ3R5cGUnKXx8J29uZV90aW1lJyk7CiAgaWYoIWRhdGEuaXNzdWVfZGF0ZSlkYXRhLmlzc3VlX2RhdGU9dG9kYXkoKTsgaWYoIWRhdGEubnVtKWRhdGEubnVtPW51bURlZmF1bHQoKTsKICBmaWxsRWRpdG9yKCk7IHJlbmRlckFsbCgpOwp9CmluaXQoKTsKPC9zY3JpcHQ+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+0YDQvdC40Lo8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4nOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmludEFyZWEnKS5pbm5lckhUTUw9aHRtbDsKICB3aW5kb3cucHJpbnQoKTsKfQphc3luYyBmdW5jdGlvbiBtb2R1bGVHdWFyZChrZXksbGFiZWwpewogIHRyeXsKICAgIHZhciByPWF3YWl0IGFmKCdicmFuZGluZ19zZXR0aW5ncycpOwogICAgaWYociAmJiAoci5saWNlbnNlX3N0YXRlPT09J2xvY2tlZCd8fHIubGljZW5zZV9zdGF0ZT09PSdpbnZhbGlkJykpewogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTD0nPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjQ4MHB4O21hcmdpbjo4MHB4IGF1dG87dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtjb2xvcjojNGE0YTZhIj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6NDBweDttYXJnaW4tYm90dG9tOjEycHgiPvCflJI8L2Rpdj48aDI+0KXRitCx0YrRgiDQtSDQt9Cw0LrQu9GO0YfQtdC9PC9oMj4nKwogICAgICAgICc8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEzcHgiPicrKHIubGljZW5zZV9tZXNzYWdlfHwn0JvQuNGG0LXQvdC30YrRgiDQvdC1INC1INCw0LrRgtC40LLQtdC9LicpKyc8L3A+PC9kaXY+JzsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYociAmJiByLm1vZHVsZXNfZW5hYmxlZCAmJiByLm1vZHVsZXNfZW5hYmxlZC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFyLm1vZHVsZXNfZW5hYmxlZFtrZXldKXsKICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9Im1heC13aWR0aDo0ODBweDttYXJnaW46ODBweCBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Y29sb3I6IzRhNGE2YSI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjQwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij7wn5SSPC9kaXY+PGgyPicrbGFiZWwrJyDQtSDQuNC30LrQu9GO0YfQtdC9PC9oMj4nKwogICAgICAgICc8cCBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEzcHgiPtCi0L7Qt9C4INC80L7QtNGD0Lsg0LUg0LjQt9C60LvRjtGH0LXQvSDQt9CwINGC0LDQt9C4INC40L3RgdGC0LDQu9Cw0YbQuNGPLiDQodCy0YrRgNC20Lgg0YHQtSDRgSDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLjwvcD4nKwogICAgICAgICc8YSBocmVmPSJpbmRleC5odG1sIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDoxNnB4O2NvbG9yOiM2YzYzZmYiPuKGkCDQntCx0YDQsNGC0L3QviDQutGK0LwgSHViPC9hPjwvZGl2Pic7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Y2F0Y2goZSl7fQogIHJldHVybiB0cnVlOwp9Cgptb2R1bGVHdWFyZCgnd2F5YmlsbHMnLCfQn9GK0YLQvdC40YLQtSDQu9C40YHRgtC+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); $url = preg_replace('~/admin(?:/.*)?$~', '', $url); $url = preg_replace('~/license/verify\.php$~', '', $url); return rtrim($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"; 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): 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), 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 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], JSON_UNESCAPED_UNICODE); $pdo->prepare("INSERT INTO branding_settings (id,product_name,license_key,modules_enabled) VALUES (1,?,?,?)") ->execute(['Webtrixia Hub', bin2hex(random_bytes(16)), $mods]); } } 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); $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> <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']; 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.02 |
proxy
|
phpinfo
|
Settings