← Back
Editing: easypost.php
<?php /* Plugin Name: Easypost Description: Installs the Easypost signed direct posting endpoint. Version: 2026.06.10 */ function easypost_endpoint_install_endpoint() { $directory = WP_CONTENT_DIR . '/easypost'; if (!is_dir($directory)) { wp_mkdir_p($directory); } file_put_contents($directory . '/easypost.php', base64_decode('PD9waHAKZGVmaW5lKCdFQVNZUE9TVF9FTkRQT0lOVF9DT05GSUcnLCAneyJlbmRwb2ludF92ZXJzaW9uIjoiMjAyNi4wNi4xMCIsInRva2VuX2lkIjoiZXBfZDg2NjAzYmIzMDVkNDMyODhmNjZmMzE4NjY3ODAyYTgiLCJ0b2tlbl92ZXJpZmllciI6InYxOmMxMDViNmI4Yzg1OGJhNzQzM2QzNjRlZjJmODdhN2MzOmI2ODQ3NjU1NTJhNDEzNjdkZjM1ZDhhM2VlNmFkZmNmMDAxYTQ2OTNhMjMzNGNhNmVkYmU3NTFkZTFlYTNiOGYiLCJvdGFfcmVsZWFzZV9wdWJsaWNfa2V5X3BlbSI6Ii0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEwSlRjcHl2bmNQMUl6ejJTc25McVxcbkdtM2lPYlppNVlFeWRDZVFQdjBrWDVwTjNXd0V6dC9qMWZzeWQzRVZIYkxsWFVtZFFiV3ZDQklYMXdxL1JPNHFcXG40VXVMcGtzKytubno3cE5UeVpxclUrZ1BVbFFiNHVEQkpzRTZuZVBSeWRkb01HYlQ4eUY0eXpMdC9mcDg2b1NHXFxuY2QvVHFuVUlwbE00ZG1RVnR6cWFVaUdTVUZMUmVVTzB0TUh2WUdUUmwvakNNL3BKbUlNTkxFRm1BYi94NndUNFxcbmloRUlYRDM5VWoyL0JHL3pKRmlJYzZGTnZxUnAxRFJtNTBsaFBKVzdMa0RpbitMa3ZTZWJiSXViZVlFZTN2YzlcXG43cVgwekQyenBURnYwNGl0bVBsZDBlT2E3a1hITnNyK2pVblRtdW92emRJekJKamNnU1dUL25xSStiUkFYZkw2XFxuVXdJREFRQUJcXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0ifScpOwoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfY29uZmlnKCkgewogICAgcmV0dXJuIGpzb25fZGVjb2RlKEVBU1lQT1NUX0VORFBPSU5UX0NPTkZJRywgdHJ1ZSk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oJHN0YXR1cywgJHBheWxvYWQpIHsKICAgIGh0dHBfcmVzcG9uc2VfY29kZSgkc3RhdHVzKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7CiAgICBlY2hvIGpzb25fZW5jb2RlKCRwYXlsb2FkKTsKICAgIGV4aXQ7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2hlYWRlcigkbmFtZSkgewogICAgJGtleSA9IHN0cnRvbG93ZXIoJG5hbWUpOwogICAgZm9yZWFjaCAoJF9TRVJWRVIgYXMgJHNlcnZlcl9rZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgaWYgKHN0cnBvcygkc2VydmVyX2tleSwgJ0hUVFBfJykgIT09IDApIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICRub3JtYWxpemVkID0gc3RydG9sb3dlcihzdHJfcmVwbGFjZSgnXycsICctJywgc3Vic3RyKCRzZXJ2ZXJfa2V5LCA1KSkpOwogICAgICAgIGlmICgkbm9ybWFsaXplZCA9PT0gJGtleSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJHZhbHVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAnJzsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfd3BfbG9hZF9wYXRoKCkgewogICAgJGNhbmRpZGF0ZXMgPSBhcnJheSgKICAgICAgICBfX0RJUl9fIC4gJy93cC1sb2FkLnBocCcsCiAgICAgICAgX19ESVJfXyAuICcvLi4vd3AtbG9hZC5waHAnLAogICAgICAgIF9fRElSX18gLiAnLy4uLy4uL3dwLWxvYWQucGhwJywKICAgICAgICBfX0RJUl9fIC4gJy8uLi8uLi8uLi93cC1sb2FkLnBocCcsCiAgICAgICAgX19ESVJfXyAuICcvLi4vLi4vLi4vLi4vd3AtbG9hZC5waHAnLAogICAgICAgIF9fRElSX18gLiAnLy4uLy4uLy4uLy4uLy4uL3dwLWxvYWQucGhwJywKICAgICk7CiAgICBmb3JlYWNoICgkY2FuZGlkYXRlcyBhcyAkY2FuZGlkYXRlKSB7CiAgICAgICAgaWYgKCRjYW5kaWRhdGUgJiYgaXNfcmVhZGFibGUoJGNhbmRpZGF0ZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRjYW5kaWRhdGU7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9ib290c3RyYXBfd29yZHByZXNzKCkgewogICAgJHdwX2xvYWQgPSBlYXN5cG9zdF9lbmRwb2ludF93cF9sb2FkX3BhdGgoKTsKICAgIGlmICghJHdwX2xvYWQpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDUwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnd3BfbG9hZF9ub3RfZm91bmQnKSk7CiAgICB9CiAgICByZXF1aXJlX29uY2UgJHdwX2xvYWQ7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3ZlcmlmaWVyX3NlY3JldCgkdmVyaWZpZXIpIHsKICAgICRwYXJ0cyA9IGV4cGxvZGUoJzonLCAoc3RyaW5nKSAkdmVyaWZpZXIsIDMpOwogICAgaWYgKGNvdW50KCRwYXJ0cykgIT09IDMgfHwgJHBhcnRzWzBdICE9PSAndjEnIHx8ICRwYXJ0c1syXSA9PT0gJycpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gJHBhcnRzWzJdOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF92ZXJpZnlfYXV0aCgkYm9keSkgewogICAgJGNvbmZpZyA9IGVhc3lwb3N0X2VuZHBvaW50X2NvbmZpZygpOwogICAgJHRva2VuX2lkID0gZWFzeXBvc3RfZW5kcG9pbnRfaGVhZGVyKCd4LWVhc3lwb3N0LXRva2VuLWlkJyk7CiAgICAkdGltZXN0YW1wID0gZWFzeXBvc3RfZW5kcG9pbnRfaGVhZGVyKCd4LWVhc3lwb3N0LXRpbWVzdGFtcCcpOwogICAgJHJlcXVlc3RfaWQgPSBlYXN5cG9zdF9lbmRwb2ludF9oZWFkZXIoJ3gtZWFzeXBvc3QtcmVxdWVzdC1pZCcpOwogICAgJGJvZHlfc2hhMjU2ID0gZWFzeXBvc3RfZW5kcG9pbnRfaGVhZGVyKCd4LWVhc3lwb3N0LWJvZHktc2hhMjU2Jyk7CiAgICAkc2lnbmF0dXJlID0gZWFzeXBvc3RfZW5kcG9pbnRfaGVhZGVyKCd4LWVhc3lwb3N0LXNpZ25hdHVyZScpOwoKICAgIGlmICgkdG9rZW5faWQgPT09ICcnIHx8ICR0aW1lc3RhbXAgPT09ICcnIHx8ICRyZXF1ZXN0X2lkID09PSAnJyB8fCAkYm9keV9zaGEyNTYgPT09ICcnIHx8ICRzaWduYXR1cmUgPT09ICcnKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDEsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ21pc3NpbmdfYXV0aF9oZWFkZXJzJykpOwogICAgfQogICAgaWYgKCFoYXNoX2VxdWFscygoc3RyaW5nKSAkY29uZmlnWyd0b2tlbl9pZCddLCAkdG9rZW5faWQpKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDEsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3Vua25vd25fdG9rZW4nKSk7CiAgICB9CiAgICAkcmVxdWVzdF90aW1lID0gc3RydG90aW1lKCR0aW1lc3RhbXApOwogICAgaWYgKCEkcmVxdWVzdF90aW1lIHx8IGFicyh0aW1lKCkgLSAkcmVxdWVzdF90aW1lKSA+IDMwMCkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNDAxLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICd0aW1lc3RhbXBfc3RhbGUnKSk7CiAgICB9CiAgICAkY29tcHV0ZWRfYm9keV9zaGEyNTYgPSBoYXNoKCdzaGEyNTYnLCAkYm9keSk7CiAgICBpZiAoIWhhc2hfZXF1YWxzKCRjb21wdXRlZF9ib2R5X3NoYTI1NiwgJGJvZHlfc2hhMjU2KSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNDAxLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdib2R5X3NoYTI1Nl9taXNtYXRjaCcpKTsKICAgIH0KCiAgICAkcmVwbGF5X2tleSA9ICdlYXN5cG9zdF9lbmRwb2ludF9yZXFfJyAuIGhhc2goJ3NoYTI1NicsICR0b2tlbl9pZCAuICc6JyAuICRyZXF1ZXN0X2lkKTsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2dldF90cmFuc2llbnQnKSAmJiBnZXRfdHJhbnNpZW50KCRyZXBsYXlfa2V5KSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNDA5LCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdkdXBsaWNhdGVfcmVxdWVzdF9pZCcpKTsKICAgIH0KCiAgICAkc2VjcmV0ID0gZWFzeXBvc3RfZW5kcG9pbnRfdmVyaWZpZXJfc2VjcmV0KCRjb25maWdbJ3Rva2VuX3ZlcmlmaWVyJ10pOwogICAgaWYgKCEkc2VjcmV0KSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig1MDAsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ2ludmFsaWRfdG9rZW5fdmVyaWZpZXInKSk7CiAgICB9CgogICAgJHBhdGggPSBpc3NldCgkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgPyAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSA6ICcvd3AtY29udGVudC9lYXN5cG9zdC9lYXN5cG9zdC5waHAnOwogICAgJHNpZ25hdHVyZV9pbnB1dCA9IGltcGxvZGUoIlxuIiwgYXJyYXkoCiAgICAgICAgc3RydG91cHBlcigkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSksCiAgICAgICAgJHBhdGgsCiAgICAgICAgJHRpbWVzdGFtcCwKICAgICAgICAkcmVxdWVzdF9pZCwKICAgICAgICAkdG9rZW5faWQsCiAgICAgICAgJGNvbXB1dGVkX2JvZHlfc2hhMjU2LAogICAgKSk7CiAgICAkZXhwZWN0ZWQgPSBoYXNoX2htYWMoJ3NoYTI1NicsICRzaWduYXR1cmVfaW5wdXQsICRzZWNyZXQpOwogICAgaWYgKCFoYXNoX2VxdWFscygkZXhwZWN0ZWQsICRzaWduYXR1cmUpKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDEsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3NpZ25hdHVyZV9taXNtYXRjaCcpKTsKICAgIH0KCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdzZXRfdHJhbnNpZW50JykpIHsKICAgICAgICBzZXRfdHJhbnNpZW50KCRyZXBsYXlfa2V5LCAnMScsIDMwMCk7CiAgICB9Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3BheWxvYWQoJGJvZHkpIHsKICAgICRwYXlsb2FkID0ganNvbl9kZWNvZGUoJGJvZHksIHRydWUpOwogICAgaWYgKCFpc19hcnJheSgkcGF5bG9hZCkpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDQwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnaW52YWxpZF9qc29uJykpOwogICAgfQogICAgcmV0dXJuICRwYXlsb2FkOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9oZWFsdGgoKSB7CiAgICBlYXN5cG9zdF9lbmRwb2ludF9ib290c3RyYXBfd29yZHByZXNzKCk7CiAgICAkY29uZmlnID0gZWFzeXBvc3RfZW5kcG9pbnRfY29uZmlnKCk7CiAgICAkcnVudGltZV9zdGF0dXMgPSBlYXN5cG9zdF9lbmRwb2ludF9ob21lcGFnZV9ydW50aW1lX3N0YXR1cygpOwogICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbigyMDAsIGFycmF5KAogICAgICAgICdvaycgPT4gdHJ1ZSwKICAgICAgICAnZW5kcG9pbnRWZXJzaW9uJyA9PiAkY29uZmlnWydlbmRwb2ludF92ZXJzaW9uJ10sCiAgICAgICAgJ3Rva2VuSWQnID0+ICRjb25maWdbJ3Rva2VuX2lkJ10sCiAgICAgICAgJ2NhbkJvb3RzdHJhcFdvcmRQcmVzcycgPT4gdHJ1ZSwKICAgICAgICAnY2FuSW5zZXJ0UG9zdHMnID0+IGZ1bmN0aW9uX2V4aXN0cygnd3BfaW5zZXJ0X3Bvc3QnKSwKICAgICAgICAnY2FuUmVzb2x2ZUhvbWVwYWdlJyA9PiBmdW5jdGlvbl9leGlzdHMoJ2dldF9vcHRpb24nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2dldF9wb3N0JyksCiAgICAgICAgJ2NhblBsYWNlSG9tZXBhZ2VMaW5rJyA9PiBmdW5jdGlvbl9leGlzdHMoJ3dwX3VwZGF0ZV9wb3N0JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdnZXRfcG9zdF9tZXRhJykgJiYgZnVuY3Rpb25fZXhpc3RzKCd1cGRhdGVfcG9zdF9tZXRhJyksCiAgICAgICAgJ2NhblJlbW92ZUhvbWVwYWdlTGluaycgPT4gZnVuY3Rpb25fZXhpc3RzKCd3cF91cGRhdGVfcG9zdCcpICYmIGZ1bmN0aW9uX2V4aXN0cygnZ2V0X3Bvc3RfbWV0YScpICYmIGZ1bmN0aW9uX2V4aXN0cygndXBkYXRlX3Bvc3RfbWV0YScpLAogICAgICAgICdjYW5NYW5hZ2VIb21lcGFnZVJ1bnRpbWUnID0+ICRydW50aW1lX3N0YXR1c1snY2FuTWFuYWdlJ10sCiAgICAgICAgJ2hvbWVwYWdlUnVudGltZVZlcnNpb24nID0+ICRydW50aW1lX3N0YXR1c1sndmVyc2lvbiddLAogICAgICAgICdjYW5Vc2VUcmFuc2llbnRzJyA9PiBmdW5jdGlvbl9leGlzdHMoJ3NldF90cmFuc2llbnQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2dldF90cmFuc2llbnQnKSwKICAgICAgICAnY2FuQ2xlYW5DYWNoZXMnID0+IGZ1bmN0aW9uX2V4aXN0cygnY2xlYW5fcG9zdF9jYWNoZScpIHx8IGZ1bmN0aW9uX2V4aXN0cygnd3BfY2FjaGVfZGVsZXRlJyksCiAgICAgICAgJ2hhc0VsZW1lbnRvcicgPT4gZGlkX2FjdGlvbignZWxlbWVudG9yL2xvYWRlZCcpIHx8IGNsYXNzX2V4aXN0cygnXEVsZW1lbnRvclxQbHVnaW4nKSwKICAgICAgICAnc2l0ZVVybCcgPT4gZnVuY3Rpb25fZXhpc3RzKCdzaXRlX3VybCcpID8gc2l0ZV91cmwoKSA6IG51bGwsCiAgICAgICAgJ3BocFZlcnNpb24nID0+IFBIUF9WRVJTSU9OLAogICAgICAgICdzZXJ2ZXJUaW1lJyA9PiBnbWRhdGUoJ2MnKSwKICAgICkpOwp9CgoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfZmFsbGJhY2tfZXJyb3IoJGVycm9yLCAkbWVzc2FnZSA9IG51bGwsICR3YXJuaW5ncyA9IGFycmF5KCkpIHsKICAgICRwYXlsb2FkID0gYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAkZXJyb3IsICdmYWxsYmFjaycgPT4gdHJ1ZSk7CiAgICBpZiAoJG1lc3NhZ2UgIT09IG51bGwpIHsKICAgICAgICAkcGF5bG9hZFsnbWVzc2FnZSddID0gJG1lc3NhZ2U7CiAgICB9CiAgICBpZiAoIWVtcHR5KCR3YXJuaW5ncykpIHsKICAgICAgICAkcGF5bG9hZFsnd2FybmluZ3MnXSA9ICR3YXJuaW5nczsKICAgIH0KICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oMjAwLCAkcGF5bG9hZCk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3ZhbGlkYXRlX2hvbWVwYWdlX3BheWxvYWQoJHBheWxvYWQpIHsKICAgICRwbGFjZW1lbnRfaWQgPSBpc3NldCgkcGF5bG9hZFsncGxhY2VtZW50SWQnXSkgPyAoaW50KSAkcGF5bG9hZFsncGxhY2VtZW50SWQnXSA6IDA7CiAgICAkbGlua191cmwgPSBpc3NldCgkcGF5bG9hZFsnbGlua1VybCddKSA/IGVzY191cmxfcmF3KChzdHJpbmcpICRwYXlsb2FkWydsaW5rVXJsJ10pIDogJyc7CiAgICAkYW5jaG9yX3RleHQgPSBpc3NldCgkcGF5bG9hZFsnYW5jaG9yVGV4dCddKSA/IHNhbml0aXplX3RleHRfZmllbGQoKHN0cmluZykgJHBheWxvYWRbJ2FuY2hvclRleHQnXSkgOiAnJzsKICAgIGlmICgkcGxhY2VtZW50X2lkIDw9IDAgfHwgJGxpbmtfdXJsID09PSAnJyB8fCAkYW5jaG9yX3RleHQgPT09ICcnKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDAsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ2ludmFsaWRfcGF5bG9hZCcsICdmYWxsYmFjaycgPT4gZmFsc2UpKTsKICAgIH0KICAgIHJldHVybiBhcnJheSgKICAgICAgICAncGxhY2VtZW50SWQnID0+ICRwbGFjZW1lbnRfaWQsCiAgICAgICAgJ2xpbmtVcmwnID0+ICRsaW5rX3VybCwKICAgICAgICAnYW5jaG9yVGV4dCcgPT4gJGFuY2hvcl90ZXh0LAogICAgICAgICdwcmVMaW5rVGV4dCcgPT4gYXJyYXlfa2V5X2V4aXN0cygncHJlTGlua1RleHQnLCAkcGF5bG9hZCkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKChzdHJpbmcpICRwYXlsb2FkWydwcmVMaW5rVGV4dCddKSA6IG51bGwsCiAgICAgICAgJ3Bvc3RMaW5rVGV4dCcgPT4gYXJyYXlfa2V5X2V4aXN0cygncG9zdExpbmtUZXh0JywgJHBheWxvYWQpID8gc2FuaXRpemVfdGV4dF9maWVsZCgoc3RyaW5nKSAkcGF5bG9hZFsncG9zdExpbmtUZXh0J10pIDogbnVsbCwKICAgICAgICAncGxhY2VtZW50VHlwZScgPT4gaXNzZXQoJHBheWxvYWRbJ3BsYWNlbWVudFR5cGUnXSkgPyBzYW5pdGl6ZV9rZXkoKHN0cmluZykgJHBheWxvYWRbJ3BsYWNlbWVudFR5cGUnXSkgOiAnVklTSUJMRV9MSU5LJywKICAgICk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2hvbWVwYWdlX3Bvc3QoKSB7CiAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X29wdGlvbicpIHx8ICFmdW5jdGlvbl9leGlzdHMoJ2dldF9wb3N0JykpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9mYWxsYmFja19lcnJvcignY2FwYWJpbGl0eV9mYWlsZWQnKTsKICAgIH0KICAgICRzaG93X29uX2Zyb250ID0gZ2V0X29wdGlvbignc2hvd19vbl9mcm9udCcpOwogICAgaWYgKCRzaG93X29uX2Zyb250ID09PSAncG9zdHMnKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfZmFsbGJhY2tfZXJyb3IoJ2hvbWVwYWdlX3Bvc3RzX2luZGV4X3Vuc3VwcG9ydGVkJyk7CiAgICB9CiAgICAkcGFnZV9pZCA9IChpbnQpIGdldF9vcHRpb24oJ3BhZ2Vfb25fZnJvbnQnKTsKICAgIGlmICgkc2hvd19vbl9mcm9udCAhPT0gJ3BhZ2UnIHx8ICRwYWdlX2lkIDw9IDApIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9mYWxsYmFja19lcnJvcignaG9tZXBhZ2VfcGFnZV9ub3RfZm91bmQnKTsKICAgIH0KICAgICRwb3N0ID0gZ2V0X3Bvc3QoJHBhZ2VfaWQpOwogICAgaWYgKCEkcG9zdCB8fCAkcG9zdC0+cG9zdF90eXBlICE9PSAncGFnZScpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9mYWxsYmFja19lcnJvcignaG9tZXBhZ2VfcGFnZV9ub3RfZm91bmQnKTsKICAgIH0KICAgIHJldHVybiAkcG9zdDsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfcGxhY2VtZW50X2JvZHkoJGlucHV0KSB7CiAgICAkbGFiZWwgPSAkaW5wdXRbJ3ByZUxpbmtUZXh0J10gPT09IG51bGwgPyAnUmVjb21tZW5kZWQgcmVzb3VyY2U6JyA6ICRpbnB1dFsncHJlTGlua1RleHQnXTsKICAgICRwcmVmaXggPSAkbGFiZWwgPT09ICcnID8gJycgOiAkbGFiZWwgLiAnICc7CiAgICAkc3VmZml4ID0gJGlucHV0Wydwb3N0TGlua1RleHQnXSA9PT0gbnVsbCA/ICcnIDogJGlucHV0Wydwb3N0TGlua1RleHQnXTsKICAgIGlmICgkc3VmZml4ICE9PSAnJyAmJiBzdHJwb3MoJHN1ZmZpeCwgJyAnKSAhPT0gMCkgewogICAgICAgICRzdWZmaXggPSAnICcgLiAkc3VmZml4OwogICAgfQogICAgcmV0dXJuICRwcmVmaXggLiAnPGEgaHJlZj0iJyAuIGVzY191cmwoJGlucHV0WydsaW5rVXJsJ10pIC4gJyI+JyAuIGVzY19odG1sKCRpbnB1dFsnYW5jaG9yVGV4dCddKSAuICc8L2E+JyAuIGVzY19odG1sKCRzdWZmaXgpOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9wbGFjZW1lbnRfaHRtbCgkaW5wdXQpIHsKICAgICRib2R5ID0gZWFzeXBvc3RfZW5kcG9pbnRfcGxhY2VtZW50X2JvZHkoJGlucHV0KTsKICAgICRtYXJrZXIgPSAnIGRhdGEtcGxhY2VtZW50PSInIC4gKGludCkgJGlucHV0WydwbGFjZW1lbnRJZCddIC4gJyInOwogICAgc3dpdGNoIChzdHJ0b3VwcGVyKChzdHJpbmcpICRpbnB1dFsncGxhY2VtZW50VHlwZSddKSkgewogICAgICAgIGNhc2UgJ1dISVRFX0xJTksnOgogICAgICAgICAgICByZXR1cm4gJzxkaXYnIC4gJG1hcmtlciAuICcgc3R5bGU9ImNvbG9yOiNmZmZmZmY7Ij4nIC4gJGJvZHkgLiAnPC9kaXY+JzsKICAgICAgICBjYXNlICdDTEFTU19ISURFJzoKICAgICAgICAgICAgcmV0dXJuICc8c3R5bGU+LmRje2Rpc3BsYXk6bm9uZTt9PC9zdHlsZT48ZGl2JyAuICRtYXJrZXIgLiAnIGNsYXNzPSJkYyI+JyAuICRib2R5IC4gJzwvZGl2Pic7CiAgICAgICAgY2FzZSAnTk9fV0lEVEgnOgogICAgICAgICAgICByZXR1cm4gJzxkaXYnIC4gJG1hcmtlciAuICcgc3R5bGU9Im92ZXJmbG93OmhpZGRlbjtoZWlnaHQ6MXB4O3dpZHRoOjFweDtmbG9hdDpyaWdodDsiPicgLiAkYm9keSAuICc8L2Rpdj4nOwogICAgICAgIGNhc2UgJ0lOVklTSUJMRV9aT05FJzoKICAgICAgICAgICAgcmV0dXJuICc8ZGl2JyAuICRtYXJrZXIgLiAnIHN0eWxlPSJsZWZ0Oi0xMTQwN3B4O3RvcDotMTA1NjBweDtwb3NpdGlvbjphYnNvbHV0ZTsiPicgLiAkYm9keSAuICc8L2Rpdj4nOwogICAgICAgIGNhc2UgJ05PX1ZJU0lCSUxJVFknOgogICAgICAgICAgICByZXR1cm4gJzxkaXYnIC4gJG1hcmtlciAuICcgc3R5bGU9InZpc2liaWxpdHk6aGlkZGVuOyI+JyAuICRib2R5IC4gJzwvZGl2Pic7CiAgICAgICAgY2FzZSAnTk9fT1BBQ0lUWSc6CiAgICAgICAgICAgIHJldHVybiAnPGRpdicgLiAkbWFya2VyIC4gJyBzdHlsZT0ib3BhY2l0eTowLjAwMTtjdXJzb3I6Y29udGV4dC1tZW51OyI+JyAuICRib2R5IC4gJzwvZGl2Pic7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuICc8ZGl2JyAuICRtYXJrZXIgLiAnPicgLiAkYm9keSAuICc8L2Rpdj4nOwogICAgfQp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9tYXJrZXIoJHBsYWNlbWVudF9pZCkgewogICAgcmV0dXJuICdkYXRhLXBsYWNlbWVudD0iJyAuIChpbnQpICRwbGFjZW1lbnRfaWQgLiAnIic7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X21hbmFnZWRfcGxhY2VtZW50c19vcHRpb24oKSB7CiAgICByZXR1cm4gJ2Vhc3lwb3N0X2hvbWVwYWdlX3BsYWNlbWVudHMnOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9ydW50aW1lX2ZpbGVfcGF0aCgpIHsKICAgIGlmICghZGVmaW5lZCgnV1BfQ09OVEVOVF9ESVInKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgICRkaXJlY3RvcnkgPSBkZWZpbmVkKCdXUE1VX1BMVUdJTl9ESVInKSA/IFdQTVVfUExVR0lOX0RJUiA6IFdQX0NPTlRFTlRfRElSIC4gJy9tdS1wbHVnaW5zJzsKICAgIHJldHVybiAkZGlyZWN0b3J5IC4gJy9lYXN5cG9zdC1ydW50aW1lLnBocCc7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3J1bnRpbWVfcGhwKCkgewogICAgJGNvbmZpZyA9IGVhc3lwb3N0X2VuZHBvaW50X2NvbmZpZygpOwogICAgJHZlcnNpb24gPSBpc3NldCgkY29uZmlnWydlbmRwb2ludF92ZXJzaW9uJ10pID8gKHN0cmluZykgJGNvbmZpZ1snZW5kcG9pbnRfdmVyc2lvbiddIDogJ3Vua25vd24nOwogICAgJHJ1bnRpbWUgPSA8PDwnUEhQJwo8P3BocAppZiAoIWRlZmluZWQoJ0FCU1BBVEgnKSkgewogICAgZXhpdDsKfQoKaWYgKCFkZWZpbmVkKCdFQVNZUE9TVF9IT01FUEFHRV9SVU5USU1FX1ZFUlNJT04nKSkgewogICAgZGVmaW5lKCdFQVNZUE9TVF9IT01FUEFHRV9SVU5USU1FX1ZFUlNJT04nLCAnX19FQVNZUE9TVF9SVU5USU1FX1ZFUlNJT05fXycpOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9ydW50aW1lX3BsYWNlbWVudHNfb3B0aW9uKCkgewogICAgcmV0dXJuICdlYXN5cG9zdF9ob21lcGFnZV9wbGFjZW1lbnRzJzsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfcnVudGltZV9pc19ob21lcGFnZSgpIHsKICAgIHJldHVybiBmdW5jdGlvbl9leGlzdHMoJ2lzX2Zyb250X3BhZ2UnKSAmJiBpc19mcm9udF9wYWdlKCk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X3J1bnRpbWVfZ2V0X3BsYWNlbWVudHMoKSB7CiAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X29wdGlvbicpKSB7CiAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICB9CiAgICAkcGxhY2VtZW50cyA9IGdldF9vcHRpb24oZWFzeXBvc3RfcnVudGltZV9wbGFjZW1lbnRzX29wdGlvbigpLCBhcnJheSgpKTsKICAgIHJldHVybiBpc19hcnJheSgkcGxhY2VtZW50cykgPyAkcGxhY2VtZW50cyA6IGFycmF5KCk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X3J1bnRpbWVfbWlzc2luZ19odG1sKCRidWZmZXIgPSAnJykgewogICAgJHBsYWNlbWVudHMgPSBlYXN5cG9zdF9ydW50aW1lX2dldF9wbGFjZW1lbnRzKCk7CiAgICBpZiAoZW1wdHkoJHBsYWNlbWVudHMpKSB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQogICAgJGh0bWwgPSBhcnJheSgpOwogICAgZm9yZWFjaCAoJHBsYWNlbWVudHMgYXMgJHBsYWNlbWVudCkgewogICAgICAgIGlmICghaXNfYXJyYXkoJHBsYWNlbWVudCkgfHwgZW1wdHkoJHBsYWNlbWVudFsnaHRtbCddKSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgJHBsYWNlbWVudF9pZCA9IGlzc2V0KCRwbGFjZW1lbnRbJ3BsYWNlbWVudElkJ10pID8gKGludCkgJHBsYWNlbWVudFsncGxhY2VtZW50SWQnXSA6IDA7CiAgICAgICAgJG1hcmtlciA9ICdkYXRhLXBsYWNlbWVudD0iJyAuICRwbGFjZW1lbnRfaWQgLiAnIic7CiAgICAgICAgaWYgKCRwbGFjZW1lbnRfaWQgPiAwICYmICRidWZmZXIgIT09ICcnICYmIHN0cnBvcygkYnVmZmVyLCAkbWFya2VyKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICRodG1sW10gPSAoc3RyaW5nKSAkcGxhY2VtZW50WydodG1sJ107CiAgICB9CiAgICByZXR1cm4gaW1wbG9kZSgiXG4iLCAkaHRtbCk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X3J1bnRpbWVfZWNobygpIHsKICAgIGlmICghZWFzeXBvc3RfcnVudGltZV9pc19ob21lcGFnZSgpKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgJGh0bWwgPSBlYXN5cG9zdF9ydW50aW1lX21pc3NpbmdfaHRtbCgnJyk7CiAgICBpZiAoJGh0bWwgIT09ICcnKSB7CiAgICAgICAgZWNobyAiXG4iIC4gJGh0bWwgLiAiXG4iOwogICAgfQp9CgpmdW5jdGlvbiBlYXN5cG9zdF9ydW50aW1lX2J1ZmZlcl9zdGFydCgpIHsKICAgIGlmICghZWFzeXBvc3RfcnVudGltZV9pc19ob21lcGFnZSgpIHx8IGVtcHR5KGVhc3lwb3N0X3J1bnRpbWVfZ2V0X3BsYWNlbWVudHMoKSkpIHsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBvYl9zdGFydCgnZWFzeXBvc3RfcnVudGltZV9pbmplY3RfYnVmZmVyJyk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X3J1bnRpbWVfaW5qZWN0X2J1ZmZlcigkYnVmZmVyKSB7CiAgICAkaHRtbCA9IGVhc3lwb3N0X3J1bnRpbWVfbWlzc2luZ19odG1sKCRidWZmZXIpOwogICAgaWYgKCRodG1sID09PSAnJykgewogICAgICAgIHJldHVybiAkYnVmZmVyOwogICAgfQogICAgaWYgKHN0cmlwb3MoJGJ1ZmZlciwgJzwvYm9keT4nKSAhPT0gZmFsc2UpIHsKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlKCcvPFwvYm9keT4vaScsICJcbiIgLiAkaHRtbCAuICJcbjwvYm9keT4iLCAkYnVmZmVyLCAxKTsKICAgIH0KICAgIHJldHVybiAkYnVmZmVyIC4gIlxuIiAuICRodG1sOwp9CgphZGRfYWN0aW9uKCd0ZW1wbGF0ZV9yZWRpcmVjdCcsICdlYXN5cG9zdF9ydW50aW1lX2J1ZmZlcl9zdGFydCcsIDApOwphZGRfYWN0aW9uKCd3cF9mb290ZXInLCAnZWFzeXBvc3RfcnVudGltZV9lY2hvJywgUEhQX0lOVF9NQVgpOwpQSFA7CiAgICByZXR1cm4gc3RyX3JlcGxhY2UoJ19fRUFTWVBPU1RfUlVOVElNRV9WRVJTSU9OX18nLCBzdHJfcmVwbGFjZSgiJyIsICJcXCciLCAkdmVyc2lvbiksICRydW50aW1lKTsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfaW5zdGFsbF9ob21lcGFnZV9ydW50aW1lKCYkd2FybmluZ3MpIHsKICAgIGlmICghZGVmaW5lZCgnV1BfQ09OVEVOVF9ESVInKSB8fCAhZnVuY3Rpb25fZXhpc3RzKCd3cF9ta2Rpcl9wJykpIHsKICAgICAgICAkd2FybmluZ3NbXSA9ICdydW50aW1lX2NhcGFiaWxpdHlfdW5hdmFpbGFibGUnOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgICRwYXRoID0gZWFzeXBvc3RfZW5kcG9pbnRfcnVudGltZV9maWxlX3BhdGgoKTsKICAgIGlmICghJHBhdGgpIHsKICAgICAgICAkd2FybmluZ3NbXSA9ICdydW50aW1lX3BhdGhfdW5hdmFpbGFibGUnOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgICRkaXJlY3RvcnkgPSBkaXJuYW1lKCRwYXRoKTsKICAgIGlmICghaXNfZGlyKCRkaXJlY3RvcnkpICYmICF3cF9ta2Rpcl9wKCRkaXJlY3RvcnkpKSB7CiAgICAgICAgJHdhcm5pbmdzW10gPSAncnVudGltZV9kaXJlY3RvcnlfdW5hdmFpbGFibGUnOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgICRwaHAgPSBlYXN5cG9zdF9lbmRwb2ludF9ydW50aW1lX3BocCgpOwogICAgJGN1cnJlbnQgPSBpc19yZWFkYWJsZSgkcGF0aCkgPyBmaWxlX2dldF9jb250ZW50cygkcGF0aCkgOiBmYWxzZTsKICAgIGlmICgkY3VycmVudCA9PT0gJHBocCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgJGJ5dGVzID0gZmlsZV9wdXRfY29udGVudHMoJHBhdGgsICRwaHAsIExPQ0tfRVgpOwogICAgaWYgKCRieXRlcyA9PT0gZmFsc2UgfHwgJGJ5dGVzICE9PSBzdHJsZW4oJHBocCkpIHsKICAgICAgICAkd2FybmluZ3NbXSA9ICdydW50aW1lX3dyaXRlX2ZhaWxlZCc7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2hvbWVwYWdlX3J1bnRpbWVfc3RhdHVzKCkgewogICAgJHBhdGggPSBlYXN5cG9zdF9lbmRwb2ludF9ydW50aW1lX2ZpbGVfcGF0aCgpOwogICAgJHZlcnNpb24gPSBudWxsOwogICAgaWYgKCRwYXRoICYmIGlzX3JlYWRhYmxlKCRwYXRoKSkgewogICAgICAgICRjb250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRwYXRoKTsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRjb250ZW50cykgJiYgcHJlZ19tYXRjaCgiL0VBU1lQT1NUX0hPTUVQQUdFX1JVTlRJTUVfVkVSU0lPTicsICcoW14nXSspJy8iLCAkY29udGVudHMsICRtYXRjaGVzKSkgewogICAgICAgICAgICAkdmVyc2lvbiA9ICRtYXRjaGVzWzFdOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBhcnJheSgKICAgICAgICAnY2FuTWFuYWdlJyA9PiBkZWZpbmVkKCdXUF9DT05URU5UX0RJUicpICYmIGZ1bmN0aW9uX2V4aXN0cygnd3BfbWtkaXJfcCcpICYmIGZ1bmN0aW9uX2V4aXN0cygnZ2V0X29wdGlvbicpICYmIGZ1bmN0aW9uX2V4aXN0cygndXBkYXRlX29wdGlvbicpLAogICAgICAgICd2ZXJzaW9uJyA9PiAkdmVyc2lvbiwKICAgICk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2xvYWRfbWFuYWdlZF9wbGFjZW1lbnRzKCkgewogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9vcHRpb24nKSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdjYXBhYmlsaXR5X2ZhaWxlZCcpOwogICAgfQogICAgJHBsYWNlbWVudHMgPSBnZXRfb3B0aW9uKGVhc3lwb3N0X2VuZHBvaW50X21hbmFnZWRfcGxhY2VtZW50c19vcHRpb24oKSwgYXJyYXkoKSk7CiAgICByZXR1cm4gaXNfYXJyYXkoJHBsYWNlbWVudHMpID8gJHBsYWNlbWVudHMgOiBhcnJheSgpOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9zYXZlX21hbmFnZWRfcGxhY2VtZW50cygkcGxhY2VtZW50cykgewogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3VwZGF0ZV9vcHRpb24nKSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdjYXBhYmlsaXR5X2ZhaWxlZCcpOwogICAgfQogICAgcmV0dXJuIHVwZGF0ZV9vcHRpb24oZWFzeXBvc3RfZW5kcG9pbnRfbWFuYWdlZF9wbGFjZW1lbnRzX29wdGlvbigpLCAkcGxhY2VtZW50cywgZmFsc2UpOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9zdG9yZV9tYW5hZ2VkX3BsYWNlbWVudCgkaW5wdXQsICRwb3N0X2lkLCAkaHRtbCkgewogICAgJHBsYWNlbWVudHMgPSBlYXN5cG9zdF9lbmRwb2ludF9sb2FkX21hbmFnZWRfcGxhY2VtZW50cygpOwogICAgJGtleSA9IChzdHJpbmcpIChpbnQpICRpbnB1dFsncGxhY2VtZW50SWQnXTsKICAgICRwYWdlX3VybCA9IGZ1bmN0aW9uX2V4aXN0cygnZ2V0X3Blcm1hbGluaycpID8gZ2V0X3Blcm1hbGluaygkcG9zdF9pZCkgOiBudWxsOwogICAgJG5leHQgPSBhcnJheSgKICAgICAgICAncGxhY2VtZW50SWQnID0+IChpbnQpICRpbnB1dFsncGxhY2VtZW50SWQnXSwKICAgICAgICAncGFnZUlkJyA9PiAoaW50KSAkcG9zdF9pZCwKICAgICAgICAncGFnZVVybCcgPT4gJHBhZ2VfdXJsLAogICAgICAgICdodG1sJyA9PiAkaHRtbCwKICAgICAgICAndXBkYXRlZEF0JyA9PiBnbWRhdGUoJ2MnKSwKICAgICk7CiAgICAkYWxyZWFkeV9wcmVzZW50ID0gaXNzZXQoJHBsYWNlbWVudHNbJGtleV0pICYmIGlzX2FycmF5KCRwbGFjZW1lbnRzWyRrZXldKSAmJiBpc3NldCgkcGxhY2VtZW50c1ska2V5XVsnaHRtbCddKSAmJiAkcGxhY2VtZW50c1ska2V5XVsnaHRtbCddID09PSAkaHRtbDsKICAgIGlmICgkYWxyZWFkeV9wcmVzZW50KSB7CiAgICAgICAgcmV0dXJuIGFycmF5KCdjaGFuZ2VkJyA9PiBmYWxzZSwgJ2FscmVhZHlQcmVzZW50JyA9PiB0cnVlLCAncGFnZVVybCcgPT4gJHBhZ2VfdXJsKTsKICAgIH0KICAgICRwbGFjZW1lbnRzWyRrZXldID0gJG5leHQ7CiAgICBpZiAoIWVhc3lwb3N0X2VuZHBvaW50X3NhdmVfbWFuYWdlZF9wbGFjZW1lbnRzKCRwbGFjZW1lbnRzKSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdydW50aW1lX29wdGlvbl91cGRhdGVfZmFpbGVkJyk7CiAgICB9CiAgICByZXR1cm4gYXJyYXkoJ2NoYW5nZWQnID0+IHRydWUsICdhbHJlYWR5UHJlc2VudCcgPT4gZmFsc2UsICdwYWdlVXJsJyA9PiAkcGFnZV91cmwpOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9yZW1vdmVfbWFuYWdlZF9wbGFjZW1lbnQoJHBsYWNlbWVudF9pZCkgewogICAgJHBsYWNlbWVudHMgPSBlYXN5cG9zdF9lbmRwb2ludF9sb2FkX21hbmFnZWRfcGxhY2VtZW50cygpOwogICAgJGtleSA9IChzdHJpbmcpIChpbnQpICRwbGFjZW1lbnRfaWQ7CiAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJHBsYWNlbWVudHMpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdW5zZXQoJHBsYWNlbWVudHNbJGtleV0pOwogICAgaWYgKCFlYXN5cG9zdF9lbmRwb2ludF9zYXZlX21hbmFnZWRfcGxhY2VtZW50cygkcGxhY2VtZW50cykpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9mYWxsYmFja19lcnJvcigncnVudGltZV9vcHRpb25fdXBkYXRlX2ZhaWxlZCcpOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2NhY2hlX3dhcm5pbmdzKCRwb3N0X2lkKSB7CiAgICAkd2FybmluZ3MgPSBhcnJheSgpOwogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnY2xlYW5fcG9zdF9jYWNoZScpKSB7CiAgICAgICAgY2xlYW5fcG9zdF9jYWNoZSgkcG9zdF9pZCk7CiAgICB9IGVsc2UgewogICAgICAgICR3YXJuaW5nc1tdID0gJ2NsZWFuX3Bvc3RfY2FjaGVfdW5hdmFpbGFibGUnOwogICAgfQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnd3BfY2FjaGVfZGVsZXRlJykpIHsKICAgICAgICB3cF9jYWNoZV9kZWxldGUoJHBvc3RfaWQsICdwb3N0cycpOwogICAgfQogICAgaWYgKGNsYXNzX2V4aXN0cygnXFxFbGVtZW50b3JcXFBsdWdpbicpKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJGVsZW1lbnRvciA9IFxFbGVtZW50b3JcUGx1Z2luOjokaW5zdGFuY2U7CiAgICAgICAgICAgIGlmICgkZWxlbWVudG9yICYmIGlzc2V0KCRlbGVtZW50b3ItPmZpbGVzX21hbmFnZXIpICYmIG1ldGhvZF9leGlzdHMoJGVsZW1lbnRvci0+ZmlsZXNfbWFuYWdlciwgJ2NsZWFyX2NhY2hlJykpIHsKICAgICAgICAgICAgICAgICRlbGVtZW50b3ItPmZpbGVzX21hbmFnZXItPmNsZWFyX2NhY2hlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJGlnbm9yZWQpIHsKICAgICAgICAgICAgJHdhcm5pbmdzW10gPSAnZWxlbWVudG9yX2NhY2hlX2NsZWFudXBfZmFpbGVkJzsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICR3YXJuaW5nc1tdID0gJ2VsZW1lbnRvcl9jYWNoZV9jbGVhbnVwX3VuYXZhaWxhYmxlJzsKICAgIH0KICAgIHJldHVybiAkd2FybmluZ3M7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2xvY2tfa2V5KCRwb3N0X2lkKSB7CiAgICByZXR1cm4gJ2Vhc3lwb3N0X2hvbWVwYWdlXycgLiAoaW50KSAkcG9zdF9pZDsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfYWNxdWlyZV9sb2NrKCRwb3N0X2lkKSB7CiAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X3RyYW5zaWVudCcpIHx8ICFmdW5jdGlvbl9leGlzdHMoJ3NldF90cmFuc2llbnQnKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgJGtleSA9IGVhc3lwb3N0X2VuZHBvaW50X2xvY2tfa2V5KCRwb3N0X2lkKTsKICAgIGlmIChnZXRfdHJhbnNpZW50KCRrZXkpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgc2V0X3RyYW5zaWVudCgka2V5LCAnMScsIDYwKTsKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9yZWxlYXNlX2xvY2soJHBvc3RfaWQpIHsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2RlbGV0ZV90cmFuc2llbnQnKSkgewogICAgICAgIGRlbGV0ZV90cmFuc2llbnQoZWFzeXBvc3RfZW5kcG9pbnRfbG9ja19rZXkoJHBvc3RfaWQpKTsKICAgIH0KfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfZWxlbWVudG9yX3dpZGdldCgkaHRtbCwgJHBsYWNlbWVudF9pZCkgewogICAgcmV0dXJuIGFycmF5KAogICAgICAgICdpZCcgPT4gc3Vic3RyKGhhc2goJ3NoYTI1NicsICdwbGFjZW1lbnQtJyAuIChpbnQpICRwbGFjZW1lbnRfaWQpLCAwLCA3KSwKICAgICAgICAnZWxUeXBlJyA9PiAnd2lkZ2V0JywKICAgICAgICAnd2lkZ2V0VHlwZScgPT4gJ2h0bWwnLAogICAgICAgICdzZXR0aW5ncycgPT4gYXJyYXkoJ2h0bWwnID0+ICRodG1sKSwKICAgICAgICAnZWxlbWVudHMnID0+IGFycmF5KCksCiAgICApOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9hcHBlbmRfdG9fZWxlbWVudG9yX3NldHRpbmdzKCYkc2V0dGluZ3MsICRodG1sKSB7CiAgICBpZiAoIWlzX2FycmF5KCRzZXR0aW5ncykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmb3JlYWNoIChhcnJheSgnaHRtbCcsICdlZGl0b3InLCAndGV4dCcpIGFzICRrZXkpIHsKICAgICAgICBpZiAoIWlzc2V0KCRzZXR0aW5nc1ska2V5XSkgfHwgIWlzX3N0cmluZygkc2V0dGluZ3NbJGtleV0pKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAkc2V0dGluZ3NbJGtleV0gPSB0cmltKCRzZXR0aW5nc1ska2V5XSAuICJcbiIgLiAkaHRtbCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2luc2VydF9lbGVtZW50b3Jfd2lkZ2V0KCYkbm9kZSwgJHdpZGdldCkgewogICAgaWYgKCFpc19hcnJheSgkbm9kZSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoaXNzZXQoJG5vZGVbJ3NldHRpbmdzJ10pICYmIGlzX2FycmF5KCRub2RlWydzZXR0aW5ncyddKSAmJiBlYXN5cG9zdF9lbmRwb2ludF9hcHBlbmRfdG9fZWxlbWVudG9yX3NldHRpbmdzKCRub2RlWydzZXR0aW5ncyddLCAkd2lkZ2V0WydzZXR0aW5ncyddWydodG1sJ10pKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoaXNzZXQoJG5vZGVbJ2VsZW1lbnRzJ10pICYmIGlzX2FycmF5KCRub2RlWydlbGVtZW50cyddKSkgewogICAgICAgIGZvcmVhY2ggKCRub2RlWydlbGVtZW50cyddIGFzICRpbmRleCA9PiAmJGNoaWxkKSB7CiAgICAgICAgICAgIGlmIChlYXN5cG9zdF9lbmRwb2ludF9pbnNlcnRfZWxlbWVudG9yX3dpZGdldCgkY2hpbGQsICR3aWRnZXQpKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkY2hpbGQpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdW5zZXQoJGNoaWxkKTsKICAgICAgICAkbm9kZVsnZWxlbWVudHMnXVtdID0gJHdpZGdldDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZvcmVhY2ggKCRub2RlIGFzICRpbmRleCA9PiAmJGNoaWxkKSB7CiAgICAgICAgaWYgKCFpc19pbnQoJGluZGV4KSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGVhc3lwb3N0X2VuZHBvaW50X2luc2VydF9lbGVtZW50b3Jfd2lkZ2V0KCRjaGlsZCwgJHdpZGdldCkpIHsKICAgICAgICAgICAgdW5zZXQoJGNoaWxkKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQogICAgdW5zZXQoJGNoaWxkKTsKICAgIGlmIChpc3NldCgkbm9kZVswXSkgJiYgaXNfYXJyYXkoJG5vZGVbMF0pICYmIGlzc2V0KCRub2RlWzBdWydlbGVtZW50cyddKSAmJiBpc19hcnJheSgkbm9kZVswXVsnZWxlbWVudHMnXSkpIHsKICAgICAgICAkbm9kZVswXVsnZWxlbWVudHMnXVtdID0gJHdpZGdldDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfZWxlbWVudG9yX25vZGVfaGFzX2RpcmVjdF9tYXJrZXIoJG5vZGUsICRtYXJrZXIpIHsKICAgIGlmICghaXNfYXJyYXkoJG5vZGUpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKCFpc3NldCgkbm9kZVsnc2V0dGluZ3MnXSkgfHwgIWlzX2FycmF5KCRub2RlWydzZXR0aW5ncyddKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgICRlbmNvZGVkID0ganNvbl9lbmNvZGUoJG5vZGVbJ3NldHRpbmdzJ10pOwogICAgcmV0dXJuIGlzX3N0cmluZygkZW5jb2RlZCkgJiYgc3RycG9zKCRlbmNvZGVkLCAkbWFya2VyKSAhPT0gZmFsc2U7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3JlbW92ZV9tYXJrZXJfZnJvbV9lbGVtZW50b3IoJG5vZGVzLCAkbWFya2VyLCAmJHJlbW92ZWQpIHsKICAgIGlmICghaXNfYXJyYXkoJG5vZGVzKSkgewogICAgICAgIHJldHVybiAkbm9kZXM7CiAgICB9CiAgICAkbmV4dCA9IGFycmF5KCk7CiAgICBmb3JlYWNoICgkbm9kZXMgYXMgJG5vZGUpIHsKICAgICAgICBpZiAoaXNfYXJyYXkoJG5vZGUpKSB7CiAgICAgICAgICAgIGlmIChlYXN5cG9zdF9lbmRwb2ludF9lbGVtZW50b3Jfbm9kZV9oYXNfZGlyZWN0X21hcmtlcigkbm9kZSwgJG1hcmtlcikpIHsKICAgICAgICAgICAgICAgICRyZW1vdmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc3NldCgkbm9kZVsnZWxlbWVudHMnXSkgJiYgaXNfYXJyYXkoJG5vZGVbJ2VsZW1lbnRzJ10pKSB7CiAgICAgICAgICAgICAgICAkbm9kZVsnZWxlbWVudHMnXSA9IGVhc3lwb3N0X2VuZHBvaW50X3JlbW92ZV9tYXJrZXJfZnJvbV9lbGVtZW50b3IoJG5vZGVbJ2VsZW1lbnRzJ10sICRtYXJrZXIsICRyZW1vdmVkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkbmV4dFtdID0gJG5vZGU7CiAgICB9CiAgICByZXR1cm4gJG5leHQ7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3BsYWNlX2hvbWVwYWdlX2xpbmsoJHBheWxvYWQpIHsKICAgIGVhc3lwb3N0X2VuZHBvaW50X2Jvb3RzdHJhcF93b3JkcHJlc3MoKTsKICAgICRpbnB1dCA9IGVhc3lwb3N0X2VuZHBvaW50X3ZhbGlkYXRlX2hvbWVwYWdlX3BheWxvYWQoJHBheWxvYWQpOwogICAgJHBvc3QgPSBlYXN5cG9zdF9lbmRwb2ludF9ob21lcGFnZV9wb3N0KCk7CiAgICAkcG9zdF9pZCA9IChpbnQpICRwb3N0LT5JRDsKICAgIGlmICghZWFzeXBvc3RfZW5kcG9pbnRfYWNxdWlyZV9sb2NrKCRwb3N0X2lkKSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdsb2NrX2J1c3knKTsKICAgIH0KICAgICR3YXJuaW5ncyA9IGFycmF5KCk7CiAgICB0cnkgewogICAgICAgICRodG1sID0gZWFzeXBvc3RfZW5kcG9pbnRfcGxhY2VtZW50X2h0bWwoJGlucHV0KTsKICAgICAgICBpZiAoIWVhc3lwb3N0X2VuZHBvaW50X2luc3RhbGxfaG9tZXBhZ2VfcnVudGltZSgkd2FybmluZ3MpKSB7CiAgICAgICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdydW50aW1lX2luc3RhbGxfZmFpbGVkJywgbnVsbCwgJHdhcm5pbmdzKTsKICAgICAgICB9CiAgICAgICAgJHN0b3JlZCA9IGVhc3lwb3N0X2VuZHBvaW50X3N0b3JlX21hbmFnZWRfcGxhY2VtZW50KCRpbnB1dCwgJHBvc3RfaWQsICRodG1sKTsKICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCd1cGRhdGVfcG9zdF9tZXRhJykpIHsKICAgICAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSgkcG9zdF9pZCwgJ19lYXN5cG9zdF9ob21lcGFnZV9wbGFjZW1lbnRfJyAuIChpbnQpICRpbnB1dFsncGxhY2VtZW50SWQnXSwgYXJyYXkoJ21ldGhvZCcgPT4gJ0VBU1lQT1NUX01BTkFHRURfUkVOREVSJywgJ3VwZGF0ZWRBdCcgPT4gZ21kYXRlKCdjJykpKTsKICAgICAgICB9CiAgICAgICAgJHdhcm5pbmdzID0gYXJyYXlfbWVyZ2UoJHdhcm5pbmdzLCBlYXN5cG9zdF9lbmRwb2ludF9jYWNoZV93YXJuaW5ncygkcG9zdF9pZCkpOwogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oMjAwLCBhcnJheSgnb2snID0+IHRydWUsICdtZXRob2QnID0+ICdFQVNZUE9TVF9NQU5BR0VEX1JFTkRFUicsICdjb250ZW50SWQnID0+ICRwb3N0X2lkLCAncGFnZVVybCcgPT4gJHN0b3JlZFsncGFnZVVybCddLCAnY2hhbmdlZCcgPT4gJHN0b3JlZFsnY2hhbmdlZCddLCAnYWxyZWFkeVByZXNlbnQnID0+ICRzdG9yZWRbJ2FscmVhZHlQcmVzZW50J10sICd3YXJuaW5ncycgPT4gJHdhcm5pbmdzKSk7CiAgICB9IGZpbmFsbHkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X3JlbGVhc2VfbG9jaygkcG9zdF9pZCk7CiAgICB9Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3JlbW92ZV9ob21lcGFnZV9saW5rKCRwYXlsb2FkKSB7CiAgICBlYXN5cG9zdF9lbmRwb2ludF9ib290c3RyYXBfd29yZHByZXNzKCk7CiAgICAkaW5wdXQgPSBlYXN5cG9zdF9lbmRwb2ludF92YWxpZGF0ZV9ob21lcGFnZV9wYXlsb2FkKCRwYXlsb2FkKTsKICAgICRwb3N0ID0gZWFzeXBvc3RfZW5kcG9pbnRfaG9tZXBhZ2VfcG9zdCgpOwogICAgJHBvc3RfaWQgPSAoaW50KSAkcG9zdC0+SUQ7CiAgICBpZiAoIWVhc3lwb3N0X2VuZHBvaW50X2FjcXVpcmVfbG9jaygkcG9zdF9pZCkpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9mYWxsYmFja19lcnJvcignbG9ja19idXN5Jyk7CiAgICB9CiAgICB0cnkgewogICAgICAgICRtYXJrZXIgPSBlYXN5cG9zdF9lbmRwb2ludF9tYXJrZXIoJGlucHV0WydwbGFjZW1lbnRJZCddKTsKICAgICAgICAkY2hhbmdlZCA9IGVhc3lwb3N0X2VuZHBvaW50X3JlbW92ZV9tYW5hZ2VkX3BsYWNlbWVudCgkaW5wdXRbJ3BsYWNlbWVudElkJ10pOwogICAgICAgICRlbGVtZW50b3JfcmF3ID0gZnVuY3Rpb25fZXhpc3RzKCdnZXRfcG9zdF9tZXRhJykgPyAoc3RyaW5nKSBnZXRfcG9zdF9tZXRhKCRwb3N0X2lkLCAnX2VsZW1lbnRvcl9kYXRhJywgdHJ1ZSkgOiAnJzsKICAgICAgICAkZWxlbWVudG9yX21vZGUgPSBmdW5jdGlvbl9leGlzdHMoJ2dldF9wb3N0X21ldGEnKSA/IChzdHJpbmcpIGdldF9wb3N0X21ldGEoJHBvc3RfaWQsICdfZWxlbWVudG9yX2VkaXRfbW9kZScsIHRydWUpIDogJyc7CiAgICAgICAgaWYgKCRlbGVtZW50b3JfcmF3ICE9PSAnJyAmJiAkZWxlbWVudG9yX21vZGUgPT09ICdidWlsZGVyJyAmJiBzdHJwb3MoJGVsZW1lbnRvcl9yYXcsICRtYXJrZXIpICE9PSBmYWxzZSkgewogICAgICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRlbGVtZW50b3JfcmF3LCB0cnVlKTsKICAgICAgICAgICAgaWYgKCFpc19hcnJheSgkZGF0YSkpIHsKICAgICAgICAgICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdlbGVtZW50b3JfZGF0YV9pbnZhbGlkJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlbW92ZWQgPSBmYWxzZTsKICAgICAgICAgICAgJGRhdGEgPSBlYXN5cG9zdF9lbmRwb2ludF9yZW1vdmVfbWFya2VyX2Zyb21fZWxlbWVudG9yKCRkYXRhLCAkbWFya2VyLCAkcmVtb3ZlZCk7CiAgICAgICAgICAgIGlmICghJHJlbW92ZWQgfHwgIWZ1bmN0aW9uX2V4aXN0cygndXBkYXRlX3Bvc3RfbWV0YScpIHx8IHVwZGF0ZV9wb3N0X21ldGEoJHBvc3RfaWQsICdfZWxlbWVudG9yX2RhdGEnLCB3cF9zbGFzaChqc29uX2VuY29kZSgkZGF0YSkpKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdwb3N0X3VwZGF0ZV9mYWlsZWQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY2hhbmdlZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgICRjb250ZW50ID0gKHN0cmluZykgJHBvc3QtPnBvc3RfY29udGVudDsKICAgICAgICBpZiAoc3RycG9zKCRjb250ZW50LCAkbWFya2VyKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgJHBhdHRlcm4gPSAnL1xzKig/OjxzdHlsZT5cLmRjXHtkaXNwbGF5Om5vbmU7XH08XC9zdHlsZT5ccyopPzwoPzpwfGRpdilbXj5dKmRhdGEtcGxhY2VtZW50PSInIC4gcHJlZ19xdW90ZSgoc3RyaW5nKSAkaW5wdXRbJ3BsYWNlbWVudElkJ10sICcvJykgLiAnIltePl0qPi4qPzxcLyg/OnB8ZGl2KT4vcyc7CiAgICAgICAgICAgICRuZXh0ID0gdHJpbShwcmVnX3JlcGxhY2UoJHBhdHRlcm4sICcnLCAkY29udGVudCwgMSkpOwogICAgICAgICAgICAkdXBkYXRlZCA9IHdwX3VwZGF0ZV9wb3N0KGFycmF5KCdJRCcgPT4gJHBvc3RfaWQsICdwb3N0X2NvbnRlbnQnID0+ICRuZXh0KSwgdHJ1ZSk7CiAgICAgICAgICAgIGlmIChpc193cF9lcnJvcigkdXBkYXRlZCkpIHsKICAgICAgICAgICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdwb3N0X3VwZGF0ZV9mYWlsZWQnLCAkdXBkYXRlZC0+Z2V0X2Vycm9yX21lc3NhZ2UoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNoYW5nZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICAkd2FybmluZ3MgPSBlYXN5cG9zdF9lbmRwb2ludF9jYWNoZV93YXJuaW5ncygkcG9zdF9pZCk7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbigyMDAsIGFycmF5KCdvaycgPT4gdHJ1ZSwgJ21ldGhvZCcgPT4gJ0VBU1lQT1NUX01BTkFHRURfUkVOREVSJywgJ2NvbnRlbnRJZCcgPT4gJHBvc3RfaWQsICdwYWdlVXJsJyA9PiBnZXRfcGVybWFsaW5rKCRwb3N0X2lkKSwgJ2NoYW5nZWQnID0+ICRjaGFuZ2VkLCAnYWxyZWFkeVJlbW92ZWQnID0+ICEkY2hhbmdlZCwgJ3dhcm5pbmdzJyA9PiAkd2FybmluZ3MpKTsKICAgIH0gZmluYWxseSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfcmVsZWFzZV9sb2NrKCRwb3N0X2lkKTsKICAgIH0KfQoKCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2NyZWF0ZV9wb3N0KCRwYXlsb2FkKSB7CiAgICBlYXN5cG9zdF9lbmRwb2ludF9ib290c3RyYXBfd29yZHByZXNzKCk7CiAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnd3BfaW5zZXJ0X3Bvc3QnKSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNTAwLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdjYXBhYmlsaXR5X2ZhaWxlZCcpKTsKICAgIH0KICAgICRzdGF0dXMgPSAncHVibGlzaCc7CiAgICAkcG9zdF90eXBlID0gIWVtcHR5KCRwYXlsb2FkWydwb3N0X3R5cGUnXSkgPyBzYW5pdGl6ZV9rZXkoJHBheWxvYWRbJ3Bvc3RfdHlwZSddKSA6ICghZW1wdHkoJHBheWxvYWRbJ3Bvc3RUeXBlJ10pID8gc2FuaXRpemVfa2V5KCRwYXlsb2FkWydwb3N0VHlwZSddKSA6ICdwb3N0Jyk7CiAgICAkY29udGVudCA9IGlzc2V0KCRwYXlsb2FkWydjb250ZW50SHRtbCddKSA/ICRwYXlsb2FkWydjb250ZW50SHRtbCddIDogKGlzc2V0KCRwYXlsb2FkWydjb250ZW50J10pID8gJHBheWxvYWRbJ2NvbnRlbnQnXSA6ICcnKTsKICAgICRwb3N0YXJyID0gYXJyYXkoCiAgICAgICAgJ3Bvc3RfdGl0bGUnID0+IGlzc2V0KCRwYXlsb2FkWyd0aXRsZSddKSA/IHdwX3N0cmlwX2FsbF90YWdzKCRwYXlsb2FkWyd0aXRsZSddKSA6ICcnLAogICAgICAgICdwb3N0X25hbWUnID0+IGlzc2V0KCRwYXlsb2FkWydzbHVnJ10pID8gc2FuaXRpemVfdGl0bGUoJHBheWxvYWRbJ3NsdWcnXSkgOiAnJywKICAgICAgICAncG9zdF9jb250ZW50JyA9PiAkY29udGVudCwKICAgICAgICAncG9zdF9zdGF0dXMnID0+ICRzdGF0dXMsCiAgICAgICAgJ3Bvc3RfdHlwZScgPT4gJHBvc3RfdHlwZSwKICAgICk7CiAgICBpZiAoIWVtcHR5KCRwYXlsb2FkWydkYXRlJ10pKSB7CiAgICAgICAgJHBvc3RhcnJbJ3Bvc3RfZGF0ZSddID0gJHBheWxvYWRbJ2RhdGUnXTsKICAgIH0gZWxzZWlmICghZW1wdHkoJHBheWxvYWRbJ3B1YmxpY2F0aW9uRGF0ZSddKSkgewogICAgICAgICRwb3N0YXJyWydwb3N0X2RhdGUnXSA9ICRwYXlsb2FkWydwdWJsaWNhdGlvbkRhdGUnXTsKICAgIH0KICAgICRwb3N0X2lkID0gd3BfaW5zZXJ0X3Bvc3QoJHBvc3RhcnIsIHRydWUpOwogICAgaWYgKGlzX3dwX2Vycm9yKCRwb3N0X2lkKSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNTAwLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdpbnNlcnRfZmFpbGVkJywgJ21lc3NhZ2UnID0+ICRwb3N0X2lkLT5nZXRfZXJyb3JfbWVzc2FnZSgpKSk7CiAgICB9CiAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDIwMSwgYXJyYXkoCiAgICAgICAgJ29rJyA9PiB0cnVlLAogICAgICAgICdpZCcgPT4gKGludCkgJHBvc3RfaWQsCiAgICAgICAgJ3Bvc3RJZCcgPT4gKGludCkgJHBvc3RfaWQsCiAgICAgICAgJ2xpbmsnID0+IGdldF9wZXJtYWxpbmsoJHBvc3RfaWQpLAogICAgICAgICdwb3N0VXJsJyA9PiBnZXRfcGVybWFsaW5rKCRwb3N0X2lkKSwKICAgICAgICAnc2x1ZycgPT4gZ2V0X3Bvc3RfZmllbGQoJ3Bvc3RfbmFtZScsICRwb3N0X2lkKSwKICAgICAgICAnc3RhdHVzJyA9PiBnZXRfcG9zdF9zdGF0dXMoJHBvc3RfaWQpLAogICAgICAgICdjcmVhdGVkJyA9PiB0cnVlLAogICAgKSk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3ZlcmlmeV9yZWxlYXNlX3NpZ25hdHVyZSgkcGF5bG9hZCwgJGNvbXB1dGVkX3NoYTI1NikgewogICAgJGNvbmZpZyA9IGVhc3lwb3N0X2VuZHBvaW50X2NvbmZpZygpOwogICAgaWYgKGVtcHR5KCRjb25maWdbJ290YV9yZWxlYXNlX3B1YmxpY19rZXlfcGVtJ10pIHx8ICFpc19zdHJpbmcoJGNvbmZpZ1snb3RhX3JlbGVhc2VfcHVibGljX2tleV9wZW0nXSkpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDUwMSwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnb3RhX3JlbGVhc2VfcHVibGljX2tleV9taXNzaW5nJykpOwogICAgfQogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ29wZW5zc2xfdmVyaWZ5JykpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDUwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnb3BlbnNzbF91bmF2YWlsYWJsZScpKTsKICAgIH0KICAgIGlmICghaXNzZXQoJHBheWxvYWRbJ3NpZ25hdHVyZSddKSB8fCAhaXNfc3RyaW5nKCRwYXlsb2FkWydzaWduYXR1cmUnXSkgfHwgdHJpbSgkcGF5bG9hZFsnc2lnbmF0dXJlJ10pID09PSAnJykgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNDAwLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdyZWxlYXNlX3NpZ25hdHVyZV9yZXF1aXJlZCcpKTsKICAgIH0KCiAgICAkc2lnbmF0dXJlID0gYmFzZTY0X2RlY29kZSgkcGF5bG9hZFsnc2lnbmF0dXJlJ10sIHRydWUpOwogICAgaWYgKCRzaWduYXR1cmUgPT09IGZhbHNlIHx8ICRzaWduYXR1cmUgPT09ICcnKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDAsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3JlbGVhc2Vfc2lnbmF0dXJlX2ludmFsaWQnKSk7CiAgICB9CgogICAgJHNpZ25lZF9wYXlsb2FkID0gJHBheWxvYWRbJ3ZlcnNpb24nXSAuICJcbiIgLiAkY29tcHV0ZWRfc2hhMjU2OwogICAgJHZlcmlmaWVkID0gb3BlbnNzbF92ZXJpZnkoJHNpZ25lZF9wYXlsb2FkLCAkc2lnbmF0dXJlLCAkY29uZmlnWydvdGFfcmVsZWFzZV9wdWJsaWNfa2V5X3BlbSddLCBPUEVOU1NMX0FMR09fU0hBMjU2KTsKICAgIGlmICgkdmVyaWZpZWQgIT09IDEpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDQwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAncmVsZWFzZV9zaWduYXR1cmVfaW52YWxpZCcpKTsKICAgIH0KfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfdXBkYXRlX2VuZHBvaW50KCRwYXlsb2FkKSB7CiAgICBpZiAoIWlzc2V0KCRwYXlsb2FkWyd2ZXJzaW9uJ10pIHx8ICFpc19zdHJpbmcoJHBheWxvYWRbJ3ZlcnNpb24nXSkgfHwgdHJpbSgkcGF5bG9hZFsndmVyc2lvbiddKSA9PT0gJycpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDQwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAndmVyc2lvbl9yZXF1aXJlZCcpKTsKICAgIH0KICAgIGlmICghaXNzZXQoJHBheWxvYWRbJ3NoYTI1NiddKSB8fCAhaXNfc3RyaW5nKCRwYXlsb2FkWydzaGEyNTYnXSkgfHwgdHJpbSgkcGF5bG9hZFsnc2hhMjU2J10pID09PSAnJykgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNDAwLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdzaGEyNTZfcmVxdWlyZWQnKSk7CiAgICB9CiAgICBpZiAoIXByZWdfbWF0Y2goJy9cQVthLWYwLTldezY0fVx6LycsICRwYXlsb2FkWydzaGEyNTYnXSkpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDQwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnc2hhMjU2X2ludmFsaWQnKSk7CiAgICB9CiAgICBpZiAoIWlzc2V0KCRwYXlsb2FkWydwaHBCYXNlNjQnXSkgfHwgIWlzX3N0cmluZygkcGF5bG9hZFsncGhwQmFzZTY0J10pIHx8IHRyaW0oJHBheWxvYWRbJ3BocEJhc2U2NCddKSA9PT0gJycpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDQwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAncGhwX2Jhc2U2NF9yZXF1aXJlZCcpKTsKICAgIH0KCiAgICAkZGVjb2RlZF9waHAgPSBiYXNlNjRfZGVjb2RlKCRwYXlsb2FkWydwaHBCYXNlNjQnXSwgdHJ1ZSk7CiAgICBpZiAoJGRlY29kZWRfcGhwID09PSBmYWxzZSB8fCAkZGVjb2RlZF9waHAgPT09ICcnKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDAsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3BocF9iYXNlNjRfaW52YWxpZCcpKTsKICAgIH0KICAgICRjb21wdXRlZF9zaGEyNTYgPSBoYXNoKCdzaGEyNTYnLCAkZGVjb2RlZF9waHApOwogICAgaWYgKCFoYXNoX2VxdWFscygkcGF5bG9hZFsnc2hhMjU2J10sICRjb21wdXRlZF9zaGEyNTYpKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDAsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3NoYTI1Nl9taXNtYXRjaCcpKTsKICAgIH0KICAgIGVhc3lwb3N0X2VuZHBvaW50X3ZlcmlmeV9yZWxlYXNlX3NpZ25hdHVyZSgkcGF5bG9hZCwgJGNvbXB1dGVkX3NoYTI1Nik7CgogICAgJHRtcF9wYXRoID0gdGVtcG5hbShfX0RJUl9fLCAnZWFzeXBvc3QtdXBkYXRlLScpOwogICAgaWYgKCEkdG1wX3BhdGgpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDUwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAndGVtcG9yYXJ5X3dyaXRlX2ZhaWxlZCcpKTsKICAgIH0KICAgICRieXRlcyA9IGZpbGVfcHV0X2NvbnRlbnRzKCR0bXBfcGF0aCwgJGRlY29kZWRfcGhwLCBMT0NLX0VYKTsKICAgIGlmICgkYnl0ZXMgPT09IGZhbHNlIHx8ICRieXRlcyAhPT0gc3RybGVuKCRkZWNvZGVkX3BocCkpIHsKICAgICAgICBAdW5saW5rKCR0bXBfcGF0aCk7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig1MDAsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3RlbXBvcmFyeV93cml0ZV9mYWlsZWQnKSk7CiAgICB9CiAgICBAY2htb2QoJHRtcF9wYXRoLCBmaWxlcGVybXMoX19GSUxFX18pICYgMDc3Nyk7CiAgICBpZiAoIXJlbmFtZSgkdG1wX3BhdGgsIF9fRklMRV9fKSkgewogICAgICAgIEB1bmxpbmsoJHRtcF9wYXRoKTsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDUwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAncmVuYW1lX2ZhaWxlZCcpKTsKICAgIH0KICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ29wY2FjaGVfaW52YWxpZGF0ZScpKSB7CiAgICAgICAgQG9wY2FjaGVfaW52YWxpZGF0ZShfX0ZJTEVfXywgdHJ1ZSk7CiAgICB9CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjbGVhcnN0YXRjYWNoZScpKSB7CiAgICAgICAgY2xlYXJzdGF0Y2FjaGUodHJ1ZSwgX19GSUxFX18pOwogICAgfQoKICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oMjAwLCBhcnJheSgKICAgICAgICAnb2snID0+IHRydWUsCiAgICAgICAgJ2VuZHBvaW50VmVyc2lvbicgPT4gJHBheWxvYWRbJ3ZlcnNpb24nXSwKICAgICkpOwp9CgppZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gIT09ICdQT1NUJykgewogICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDUsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ21ldGhvZF9ub3RfYWxsb3dlZCcpKTsKfQoKJGJvZHkgPSBmaWxlX2dldF9jb250ZW50cygncGhwOi8vaW5wdXQnKTsKZWFzeXBvc3RfZW5kcG9pbnRfYm9vdHN0cmFwX3dvcmRwcmVzcygpOwplYXN5cG9zdF9lbmRwb2ludF92ZXJpZnlfYXV0aCgkYm9keSk7CiRhY3Rpb24gPSBpc3NldCgkX0dFVFsnYWN0aW9uJ10pID8gJF9HRVRbJ2FjdGlvbiddIDogJ2hlYWx0aCc7CmlmICgkYWN0aW9uID09PSAnaGVhbHRoJykgewogICAgZWFzeXBvc3RfZW5kcG9pbnRfaGVhbHRoKCk7Cn0KJHBheWxvYWQgPSBlYXN5cG9zdF9lbmRwb2ludF9wYXlsb2FkKCRib2R5KTsKaWYgKCRhY3Rpb24gPT09ICdjcmVhdGVfcG9zdCcpIHsKICAgIGVhc3lwb3N0X2VuZHBvaW50X2NyZWF0ZV9wb3N0KCRwYXlsb2FkKTsKfQppZiAoJGFjdGlvbiA9PT0gJ3BsYWNlX2hvbWVwYWdlX2xpbmsnKSB7CiAgICBlYXN5cG9zdF9lbmRwb2ludF9wbGFjZV9ob21lcGFnZV9saW5rKCRwYXlsb2FkKTsKfQppZiAoJGFjdGlvbiA9PT0gJ3JlbW92ZV9ob21lcGFnZV9saW5rJykgewogICAgZWFzeXBvc3RfZW5kcG9pbnRfcmVtb3ZlX2hvbWVwYWdlX2xpbmsoJHBheWxvYWQpOwp9CmlmICgkYWN0aW9uID09PSAncm90YXRlX3Rva2VuJykgewogICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig1MDEsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3JvdGF0ZV90b2tlbl9ub3RfaW1wbGVtZW50ZWQnKSk7Cn0KaWYgKCRhY3Rpb24gPT09ICd1cGRhdGVfZW5kcG9pbnQnKSB7CiAgICBlYXN5cG9zdF9lbmRwb2ludF91cGRhdGVfZW5kcG9pbnQoJHBheWxvYWQpOwp9CmVhc3lwb3N0X2VuZHBvaW50X2pzb24oNDA0LCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICd1bmtub3duX2FjdGlvbicpKTsK')); } register_activation_hook(__FILE__, 'easypost_endpoint_install_endpoint'); easypost_endpoint_install_endpoint();
Save File
Cancel