xiaomianao666

插件名:global

Jul 20th, 2023
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global@base64://Ci8vID09VXNlclNjcmlwdD09Ci8vIEBuYW1lICAgICAgICAg8J+SryDmh5LkurrkuJPnlKjns7vliJcg4oCU4oCU4oCUIOWFqOe9kSAg6KeG6aKR5Y675bm/5ZGKCi8vIEBuYW1lc3BhY2UgICAgbHItdG9vbGJveC1WaWRlb1BsYXkKLy8gQHZlcnNpb24gICAgICAxLjAuMQovLyBAZGVzY3JpcHRpb24gIOKtleeyvumAieino+aekOe6v+i3r+S4uuWkp+WutuaPkOS+m+S8mOmFt+OAgeeIseWlh+iJuuOAgeiFvuiur+OAgULnq5koYmlsaWJpbGkp44CB5LmQ6KeG44CB6IqS5p6c44CB5pCc54uQ44CBUFBUVuetieWQhOWkp+inhumikee9keermShQQyvnp7vliqjnq68p6KeG6aKR6Kej5p6Q5pyN5Yqh77yM6K6p5L2g55yB5Y676LSt5Lmw6KeG6aKRVklQ6LS555So44CC4q2V5Y676Zmk5Y6f6KeG6aKR5bm/5ZGK44CC4q2V5Y+v6Ieq55Sx5aKe5Yqg5L+u5pS557q/6Lev44CC4q2V5Y+v6Ieq55Sx6YCJ5oup56uZ5YaF5aSW6Kej5p6Q44CC4q2V5Y+v6Ieq55Sx5L+u5pS55Zu+5qCH5L2N572u44CB5aSn5bCP44CB6YCP5piO5bqm44CC4p2M5ouS57ud5pS26LS544CC4q2V5oyB57ut5pu05paw44CCCi8vIEBhdXRob3IgICAgICAgbGFuaGFoYQovLyBAaWNvbiAgICAgICAgIGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBR1FBQUFCa0NBWUFBQUJ3NHBWVUFBQVE4RWxFUVZSNFh1MWRDWFFVUlJyK2FwSVFUMXdRdzZFWUJjU0VyQ2dLQ29Rb3dvb2NMaXJLZW9Bb0xENXgyWUR1K2hUQ1BuZGRKZUM1Q3Q2Z0lCdGRsVU1ReEFQRTk1Z01La2Job1dHQ0tNZ3BzUGpVb0VzSWtOcjNUYWRoTXVtZXFlNnVuZ1JJOFNCQVY5ZnhmL1dmOVZlWGdJY2lwY3p5OFBwUi9hb1Fvc3pOQklXVGw2U1V2UUFNQUhBSmdGYllzU3NkSDVlMHdpY2x3TXBWd0s3ZFRwbzdldXBtTkFPNmRRYTZkREordHNqWUNHQUxnR0lBN3dvaCtGT3BLQU1pOSsyN0dZMGFEY1NXN2QzeHl1c3RFQ3BKdzJiMjJWQnFVU0N6TlpCM3lUNk11R2tybW1jc1IyWGxJcEdlUGsrRlVrcUF5RzgyL0JtbnQ3d1d6ODY4QUMrOTJsU2w0WVk2QU5JYkFiZmNzQXQzRGl2QnR1L25pM1p0cGlXaVMxeEE1QTgvZE1lODl3YWc3Vmw5OGVEajUyTG5yaE1UTmRqdzNJSUN6VThyeC8zM3JNV0dEWXN4c085aWNkcHBuOXZSeVJZUXVYdjNJS1NrRE1Da3FUMng4SVBUSVpEZVFHd1BGSkN5QWdPdi9BNzM1Uy9GZnJGUU5QL05CMWF0V1FJaWY5NDdCUHNyQm1QVVg3dWo5T3VtRUVqeE1KU0dWMDBLU0hrQU9lMTM0c1VuUGtKcXlselJ1UEg4V09MVUFrVHUyM2NqRHNvaEdKR2ZpelhoSmczVTlJRUNIVHZzeEt5blAwUmFXcEVRNHQzb0htb0FJcVc4RE1CSTVFL29oMlhMVC9WaEtBMU5taFM0dXY5MkZJNS9DOEFNSWNRaG5WSVRrTTgrZndqck45MkVCeDgvQzBJRUdxam5Jd1VvdmlZV2hIRlc2NW5pd281UG1EMGRBa1R1K3JrdlVnL2VoVDZETDhYLzloM3Y0MUFhbWpZcGNNTHg1WGovelNVUThrblJ0R25FZVR3TXlNTDMvNEhQVncvRkcyKzNnUkJLL2tsU0tkdjVBdUQwRnNEcExRMlBtTVg4ZCt4QUdEVmdLVnNQYlBzZUtQc0dLRm1kMU9FcWRTYmxRZHd3OEN0Y2RORTA4ZnZmUFhNSUVMbGp4M2tRcWVOdzVmWDlVSG1nZmlqeVZpMkFYajJBaXpzQnZTOVZtbC9DU2dUcXMxWEFzcUFCVW4wb2pkSyt4L3R2ekVOS1lKSm8xbXhiaEJOazRXT0RJRlBHb21oT1Z3alJxTTdHZWZKSkJnakQvZ0JrbmVQdk1NZzVzOTRFbGhVRDIzZjQyMWU4MWlWK3dZaWJQNEtRajRoN1JoY2JnSFRyUHhwVnVCM2xQNTlYSjhxYzNIQk5QK0NXd1VEams1TlBuTGNXQTgvT3FCdGdKQTZnVmNzU3BNaW54UWR6WGpVQTZaQlhnS3FxWVJBNEY4bFVIK1NJUHcwM09LSStsTG9BUmxaVkFTaEZWV0M2V0ZjOHhRQWtKL2VmT0lnaEVLTE5ZVFh2TTRXdTdndU1HK09jSXloZXR1MHdkSUZaS0g0SXJzbGQ1RGdxZnlwOS90MUpLZDhEL0h1MndUSEpLRklDRXVzUUNNd1NhNE9GMVNLcjMxVDh1R2NRaEd6bE80ZVFRQk1MREdXdFVxaDhTWHhUSWUvNVJlV3R3M1VJRksweTlzZWZXZTNVM3FlRk5xSFFmK1V2eVJGeUExTHdxaWdOM1c4QTB1K21JbXphM0E4US9vYldlK1VCRThjbjVnb1NmZjY3d1B6RitnbkNCVEY2Qk5BN3orQ3FST1cyTVRXNU1WRjlwODhKaU1CV25IRGNIRkd5OUc0RGtMd0I3MkQzanowaEFpYzRiVSs1L24zNWlYVUZ4ZEV6THh0ZytGMElCa0VoT1BIRUdrVll0LzcramtaaU41bzJXU1JDQzRjYmdIUzgvRU5VVnVZaUlQd0pzVDgwSHJnMnpxVElFUVNDc3JzdUNxMDdBbVBITVRsNS9vNUt5ajFJVFZrbXZseCtqUUZJZHZmbGtYMXlFZERyZzNDQ1V3cmo2d3M2YVFXRmdGUGRvSnRFNUpMeFl3Q0sxZWhDcnIxaXNPN2VhclluNVY1QUJrVjR4WlhWZ1BUNEdFQm5DS1JxN1huR0ZIc3dDTURrS2NrUlQwNG1SVUFJREFINmJEVlFNTkYvLzBSaUg0QlBSTGk0cHdGSVZ2ZVZnTGdRQWFGdkl5cWVtS0xsTkdHaWZvWHRoUEQxcWE2VSt3SHhxUWdYNTVraTYzTWdjTDYyblVINkY1VExWb1ZnM0paZjl5TEtEU0EwbWU4YlkzRDloOHVCQ1pQMHpJUGVPbEFpd3NYZFRFQldRYUlqQWdIdmV5QmsrYW1GUng4WW5ORUhieG9PcDFub3ExdzN3ZzIwTmQrcGtnY0IrWVVvVzNGeGRlZ2tkelVrdk1leEtIZm52bXp0Wnh6Sm5FSHlrVHZtV25qdjlPaHBJWG9wRWdSa3RRaUhPcHNjc2daQURvUkhEckZUNGtjNkdDUTJGOXNTRzdQOHV1SGU5Q0gzUlNEWGlQQ0tDNnNCeWYzU0FNUkRaSkU2ZzdvanR0Q2FvczZvTC9zUFhsYXluVzVrV0dlNHhkeFYrNnFTVlpCWUk5YUZPbFZiV2JsZlFhQ0RhMERvYjFDK1dvWE9HUTlLaHVldE9ua3Y5VGpQZVRPc1BYc3ZJUllwR2ZIOVNvUkQ1eDhHQk9pQWdFc09ZYkNRK3hteGhVNWZmb0VYRXRTL2QrMk1GaTljVWgyQ0YrRVZIVTJsWGdxSmJGY2NZaWRiS2FybzRkYTFCKzRIcERPbkFsMHVxTjJ5V3k2UlVrSmlyU2dML2JZYWtCNXJ3Yk1lYm5TSUhYZlFDNityMkpRZklFUzN5VEQrekNuNkpFSVZOMFdpQWNuS0RWZnZGanJMTnJIVEhUcmlQMnlib1hvbU9IQURpcWJsZ3ZmOEpyVjYrMVpjd2xBTERSaW5oUndpRUJaclF6bW1EaWx6dFgxcloxbnBVT1JXSmpRZHNjbFQvZDJmVUNXbWxWL2kxaWVKQUNMS3hOcmlEdDRBb1JNWW14MmlnenRJbE5LZ1BXa1l0aUF3ZFprdHd0RlJ3VE5zejYxaVdwSVUwMjZLRmtEc2xEbjFodHVCUlU4bUhpQm1QWE1QNVVnM0hBeWx2azZVaGJMZGN3aFhCak5HWW90WHI5VnNUd1VRMXVXT0hoZEFmZEl2VHJta090RkJsSVd5cWdIcHNRNUN0bmVVNEdDbDFPaU5FeEFkUlJVUXN5OHFma1pmbzdOUmRJd2pHVzFvQWNTS1lMckVWU0lkRW85SWROQm9WQ1JidnpDdDZacit3SjQ5UmdxUmsxQlJMVUN5ZTN3TkljK0p5cjJPdnk3czdIQjY1ZlRPZFJRcndHbFdxdVphTVUyVWhFbUdmb20xTmlsR0daWlhYUlFSUU1UWG9xejRYSE1MMXhrZ2R1YXV6bVFBSzBCTXM1TDZpMk5JbE1aRHdsRHhGODNSc1VUczI3QVMzNDVNNEFnZzYwVzR1TDBaN1YwUG9KMnlEckZTNkxyTTNYaEtQWHFTQklQUlY2c1lXaXpwL05ZdlZvRFFES2JvVkNwZUFkSHBwZG9OT0I2SFJMOURCMjNjV092WVVtemIxQzhQVDNFbTMxVUl5aDNTMkd3VkoxNTdKSEtDYjBRNGRJNjVRZlVOSU5vcWM0aG5GbFdZcFNvZ1psUFVhNFVGYXJtOFRLcCtlS28rL1dJbE1jaVZmUlNUeUQwREVydTNUS0k0a3BrK0FHSTJtU2pwemF5bk02bmF6aWRUMWFrUlFPUzNJcnlpblRzT2NicDZGZWhmcTRxWFBxaGZUTVdmcUcrdVpJWmh2RmlIMUdPTWVzZVdPZ1ZFZDdqZEN5QW1ZUmplS1p5Z3JsL0dGTGdUWTNadVFBTWdOdXlncWwvYzd2cHBCeVFyOTF0SGgzVjByTjVFb3NTUFB1ejhwK2l4cUs3cTZIZTgrbVhWWjBSRVdhaXRHVnc4K2dGaGFDTVNLbzlLZEl0ZEZQVHF1MXJrQmlSYVBKNlZ1bkZveHowZ1ZtYXZ6amdXQ2FDTFF5aE9HSlZXT2JIbGRtUE5DaEFuZ1ZZTER0a0FnYk05K1NGT0hLRkVLNDdQbVNVWWUvek1TUklCRlRxQmlIY3V4UndIeHo3NUtmY09vdzdIVUdLaktBdTFNVVdXTTBDOE9rSXFnTVNtMjZpdU9KcThsT2txUjZ3WjdwazB4WnZKRzFrOEZqdW5Ua0luUnJUWEF5QjJTb3p5VjJkMGxhdWNLNXkrZ2txeUhVRWNseDlmVDVDQUhDTkZMQ1BDT3NackpWNGR1UUhWZ0lSTkRzbk9OVGhFOVV5MFhlS3h6dkM3Q2hlWmRhS1BDU1I2ajhBeUFxd2FHay9VbnAzSjYwUzh3aXNnZGtwWHAyS242T0ZCVVI3TWpCd0duVkZidEpoMVZQVUVnZEM5bytqVndpSXRqZERKZHlLODRtd3pkTElSRVB4R1ZxTDFjUGk1bFNKekVsQkwxSk5WWWpNekljMlZUWVd0b2lmOFBqcG5wVDlVOVoxSkF5MkEyT2tSWFVrT1ZnRk15bVYreFVGRlQzQ3lESGpxMGhOV0M4Z3U4OGFSL2lCelJOaGtrd2lIem5MUElYV1JCc1FJcmNySGFSZ29wUFdrUzAvWWNiUGQ4UVNuaTdJMklMbmZBU0pUVmFjZkdwK1ZyMENpY1IvQXEvWGlOT3VFZzZLbzRPclVyU2ZzQUxIaVlqYzdwOForeUdZUkRtV2FXN2p1QUxFTE96dGxXYXNKT3dIRWJ6MWhOVDZkYzljR0NLMGNIdk9LVFRiUXdTV3FnTkN5by9Ya2xTTVRHUm14ejYyNHcrMFJEQXRBTmdFNDA1R1ZaUTdRenV6enVvT1lDSkJrSGVxM0FzcHV6azY4OCtoMnRRSVNqMHVjNUNiRlR0enVVQXhsTkQvRmtTdzlFVHV1ZUNlTm84MXlKeHluRlJCMmJMZGkzRzc0c00zWVdGWmRmNkRHSlBDVWlkWWY1ZlFpRVF4QXRvaHc2RXhUcWJzWFdXektqa3Y0VEllQ2Q3TGEvS3diNzZTeGwrTjdCaURiUkRoMGhoNUFyRlowTkdHYzJ1VitFdFZ0MjNieE8yMkxUdTVBYWZIbCtnRGh3T3prdmc2cnl5MGhkYnhIQ2NBUWlkVnVvODU5b05KZzlkZUFzbk0zQTJqdHlzcUtubkE4MGVWRm4rZ2dxdHMyT0NjZThMVDZqakQxMnFEaCtpSUNwY0hyVFE3UkF3Z25iUmVPNWpPM1ZvaGJZbnA5THg0WWJGdjNka05wY0tRSnlGWitTZDB6aDVnRXNJdnhIRW1BSkFMRGkxVmx0MUJLZzNlTHlGMkVPVDArQW9UREQ5ekdXWDY2WWp4ZVY3amI5Nm5BZVFyWUxwRHAxZ0ZNTko3UzRMMEVwQzl5OHZSOUJ0VE9HamxTek4raDF3UGp4OXFUemk4dzJHTnA4TzhFNURyazVPazcwWEtraWl1VkR6ejdDWVlCeUdRQ2NpdHk4bVltNGlibDUxYml5bW9ITFhvZjNNeEVaNkF3MlVGQ00wdUYwWVo0eFc4d0RFQ2VJQ0Nqa0pQM25ETEI0MVZVRVZmeENHQUN3OG43dmJua0pGMG9XZUsyTlBnMEFma0xjdkllMXdKSUluR2xtcWJEd2ZCckRRU0c5M3ZvTEx5ZmhPTlFTWXdndDlLMFRWWWdzelQ0QWdFWmg1eThTVnJtYkNldThzY2IrK0J1YnNvaDEzeklHM0hXdTd1NmlMcUJuMUtpZjhRTUZwVXRZQktqTGo3d1hCcWNRVUR1eHdXOUhzRCsvZDR3c1JOWEpDU0pva29JbFZHd3pmSmZqRFBoVnVmQlNmekdKN203cFVkWE5xUEtQS0xycEtVQnE1Y1ZFWkNIY09uQUNmamhSNmROMUt4djk5MnNSSzJTQUpUbmlZNDRKMnJINjNNem05SHJGMGJkanVQVUpzRHl0LzlEUUI3R29OdnV4YnB2M1RabHZQZnhZdWRjWUticDhIMlZtd3E4amRENmJTNEk2aW8vMDRWVXhuMXVXMkRlekRrRTVFbmtqeC9yU1huRyszaXkxV0RpYmI5R0ZHNC9RK2I3eVRYVUVkUk5Lam5ES2dUMVdxZHZMK0R4QitZVGtLY3hyV2cwbm56QmZaT3E0c3BwZGdqQkllZndiSWZUcTR0aVowTk9NRy9wSVJESjluY1NVZGU0WDJVUkFYa2VLMWZkNGVtN3N5cml5dnpBbDF0Q2tGc1lBcWZ4d0gySjZIQzR5VW5SYlZQeDg5OEVnU211ZnZzMWlRaWU2UG1jbDc1SGR2dDdqT0JpWmVVaVhEVzBiV1RnVGt1OGNEdmJTbmJ5bXRQeDE0ZjZ6VE1xc09UTmxTSTE5VElqL0M3bFhEdzFyVGRlbkhXSzQvSEYrMHlzbVRQbHVORmo2QVYrVFc3VXJadHg4Zm12aTI2WGpETUEyYnYzanlqZk14SlgzdEFKbGZ1ZFgzc1VxME9TbFZ0N05PRFdLTzBYTEptOURBSlBpV2JObGgwNmZ5QVhMWjJJTDFiZmhOZmV5a1NnNGVydXBHRE5LN3lIRGk1RHAvTmVFZjE3UDhZK0R3TlNYcDZIQTNKVTVJTGlYL2ZXand1S2swS1ZPdXprbE1ZNzhVN1JBaHc0OEx6SXlJamNsRm5qaEk3ODRzdGI4TjJXa1NpWTJBVUIwWENudXA5WThXYTJTWDlianN6TTZhSlRoL2xtVjdXT1RNbG5YaHFIcmR1SFlzRjc3UUdSNXVlWWp0bTJxK1JlRExwcUZWcTNtQ251SEQ0dG1nNjFBZm4xMTA0UWFiZGh4T2hCV0JNKzQ1Z2xtbDhUbDdJQ0hiUFg0dFFtUmVMWlIvOFYyNDNsb1VMNVUwVWZ5TXFodVAydVBsajdkWE8veG5iTXRVc3djckxLSU1Scll2YjBSNjNtYjN2S1U1YVhYNFBVdE1HNGYzSlBMRnJhWE91VmVzY2NFaEZuYnkvNlgxR0duOHJmRUM4OThiQWRDZUlldTVVVkZRT1FudDRmeXovdWlYODhjaVoyL1BkRVYxZGFISXNBUk04NW85a2VQSER2bDFpL2NZNFlPYVNXbUlxclEySnBKNlhzakEwYmVxTmx5MXc4TnpNYjA0c3lBSEdpY2VlaGcyUFV4eUlvdkE1djFMQWZjTWV3RW16YnRVQzB5M3d4RVJtVUtTcjM3KytGSmNFZXlNbnFpRm12WjJMRnlpYll1T1ZrQ0J3UGlVWUlJQURKMzFKVVowQkd0MjM4blg5R011K2pqYnpxL3pCcjEzcHUxcTN4SU5HODZ2WjVabXNndDBzRmJyMXhNMXEzQ3FLeWNyRklUNStuTWlobFFBNlJaZXZXcnBnK3V3TXltbVJpVUwrV0NINmFnYzlXTmNiS0w0N0R6dDFwZ0V3RkJNRkpRUUFDVmVCbGxRSkVpYjhncTM4VG5NaVhDZzZERmVtRXp3OEJWaHRVbFZrNXIrT1lEalc2YU5FYzZOb0o2SEloMFBVaW9HWHpDZ0NiVUY0ZVJPUEdpNFVRSmFwRDhqWVExVjRhNmlsVDRQK0dDNU9sK3hJS253QUFBQUJKUlU1RXJrSmdnZz09Ci8vIEBtYXRjaCAgICAgICAgKjovLyoueW91a3UuY29tLyoKLy8gQG1hdGNoICAgICAgICAqOi8vKi5pcWl5aS5jb20vKgovLyBAbWF0Y2ggICAgICAgICo6Ly8qLmlxLmNvbS8qCi8vIEBtYXRjaCAgICAgICAgKjovLyoubGUuY29tLyoKLy8gQG1hdGNoICAgICAgICAqOi8vdi5xcS5jb20vKgovLyBAbWF0Y2ggICAgICAgICo6Ly9tLnYucXEuY29tLyoKLy8gQG1hdGNoICAgICAgICAqOi8vKi50dWRvdS5jb20vKgovLyBAbWF0Y2ggICAgICAgICo6Ly8qLm1ndHYuY29tLyoKLy8gQG1hdGNoICAgICAgICAqOi8vdHYuc29odS5jb20vKgovLyBAbWF0Y2ggICAgICAgICo6Ly8qLjE5MDUuY29tLyoKLy8gQG1hdGNoICAgICAgICAqOi8vZmlsbS5zb2h1LmNvbS8qCi8vIEBtYXRjaCAgICAgICAgKjovLyouYmlsaWJpbGkuY29tLyoKLy8gQG1hdGNoICAgICAgICAqOi8vKi5wcHR2LmNvbS8qCi8vIEBncmFudCAgICAgICAgR01fcmVnaXN0ZXJNZW51Q29tbWFuZAovLyBAZ3JhbnQgICAgICAgIEdNX3VucmVnaXN0ZXJNZW51Q29tbWFuZAovLyBAZ3JhbnQgICAgICAgIEdNX3NldFZhbHVlCi8vIEBncmFudCAgICAgICAgR01fZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICBHTV9kZWxldGVWYWx1ZQovLyBAZ3JhbnQgICAgICAgIEdNX2Rvd25sb2FkCi8vIEBncmFudCAgICAgICAgR01feG1saHR0cFJlcXVlc3QKLy8gQGdyYW50ICAgICAgICBHTV9zZXRDbGlwYm9hcmQKLy8gPT0vVXNlclNjcmlwdD09CiAKLyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK5bqUR3JlYXN5Zm9yay5vcmfnvZHnq5nop4TliJnopoHmsYLvvIwK5oeS5Lq66ISa5pys5bCG6KeG6aKR6Kej5p6Q44CB6Z+z5LmQ5LiL6L2944CB6KeG6aKR5LiL6L29562J5Yqf6IO95ouG5YiG5Li65aSa5Liq6ISa5pysOgpodHRwczovL2dyZWFzeWZvcmsub3JnL3poLUNOL3NjcmlwdHMvNDY3Nzc2Cmh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvemgtQ04vc2NyaXB0cy80Njk2MDQKaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy96aC1DTi9zY3JpcHRzLzQ2OTY4OQpodHRwczovL2dyZWFzeWZvcmsub3JnL3poLUNOL3NjcmlwdHMvNDY4MDE1Cmh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvemgtQ04vc2NyaXB0cy80Njk1MjEK5Y+v6Ieq6KGM5YiG5Yir5a6J6KOF44CCCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiovCiAKKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwogCiAgICB2YXIgZG9tSGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CiAKICAgIHZhciBkb21TdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CiAKICAgIGRvbVN0eWxlLnR5cGUgPSAndGV4dC9jc3MnOwogCiAgICBkb21TdHlsZS5yZWwgPSAnc3R5bGVzaGVldCc7CiAgICAvL+W5s+WPsOWIpOaWrQogICAgdmFyIGlzTW9iaWxlID0gL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQb2R8QmxhY2tCZXJyeS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAKICAgIGlmKGlzTW9iaWxlKXsKIAogICAgICAgIGxldCBwbGF5TGluZSA9IFsKICAgICAgICAgICAgeyJuYW1lIjoi57qv5YeAMSIsInVybCI6Imh0dHBzOi8vaW0xOTA3LnRvcC8/ang9In0sCiAgICAgICAgICAgIHsibmFtZSI6IkLnq5kxIiwidXJsIjoiaHR0cHM6Ly9qeC5qc29ucGxheWVyLmNvbS9wbGF5ZXIvP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjoi54ix6LGGIiwidXJsIjoiaHR0cHM6Ly9qeC5haWRvdWVyLm5ldC8/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiJDSG9rIiwidXJsIjoiaHR0cHM6Ly93d3cuZ2FpNC5jb20vP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjoiT0siLCJ1cmwiOiJodHRwczovL29ranguY2MvP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjoiUkRISyIsInVybCI6Imh0dHBzOi8vangucmRoay5uZXQvP3Y9In0sCiAgICAgICAgICAgIHsibmFtZSI6IuS6uuS6uui/tyIsInVybCI6Imh0dHBzOi8vanguYmxiby5jYzo0NDMzLz91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6IuaAneWPpDMiLCJ1cmwiOiJodHRwczovL2pzYXAuYXR0YWtpZHMuY29tLz91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6IuWQrOS5kCIsInVybCI6Imh0dHBzOi8vanguZGo2dS5jb20vP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjoiWVQiLCJ1cmwiOiJodHRwczovL2p4Lnlhbmd0dS50b3AvP3VybD0ifQogICAgICAgIF07CiAKICAgICAgICBsZXQgdXNlV2ViID0gWydtLmJpbGliaWxpLmNvbScsJ3lvdWt1LmNvbScsJ3d3dy55b3VrdS5jb20nLCdtLnlvdWt1LmNvbScsJ20udi5xcS5jb20nLCdtLmlxaXlpLmNvbScsJ20ubWd0di5jb20nLCdtLnR2LnNvaHUuY29tJywnbS4xOTA1LmNvbScsJ20ucHB0di5jb20nLCdtLmxlLmNvbSddOwogCiAgICAgICAgaWYodXNlV2ViLmluZGV4T2YobG9jYXRpb24uaG9zdCkgPT0gLTEpewogICAgICAgICAgICBjb25zb2xlLmxvZygn5LiN5piv5bqU55So572R56uZJyk7cmV0dXJuOwogICAgICAgIH0KIAogICAgICAgIGZ1bmN0aW9uIHNldENvb2tpZShjbmFtZSxjdmFsdWUsZXhkYXlzKXsKIAogICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKCk7CiAKICAgICAgICAgICAgZC5zZXRUaW1lKGQuZ2V0VGltZSgpKyhleGRheXMqMjQqNjAqNjAqMTAwMCkpOwogCiAgICAgICAgICAgIHZhciBleHBpcmVzID0gImV4cGlyZXM9IitkLnRvR01UU3RyaW5nKCk7CiAKICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY25hbWUrIj0iK2N2YWx1ZSsiOyAiK2V4cGlyZXM7CiAgICAgICAgfQogCiAgICAgICAgZnVuY3Rpb24gZ2V0Q29va2llKGNuYW1lKXsKICAgICAgICAgICAgdmFyIG5hbWUgPSBjbmFtZSArICI9IjsKICAgICAgICAgICAgdmFyIGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7CiAgICAgICAgICAgIGZvcih2YXIgaT0wOyBpPGNhLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgYyA9IGNhW2ldLnRyaW0oKTsKICAgICAgICAgICAgICAgIGlmIChjLmluZGV4T2YobmFtZSk9PTApIHsgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWUubGVuZ3RoLGMubGVuZ3RoKTsgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAKICAgICAgICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KGRvbSxkb21JZCl7CiAKICAgICAgICAgICAgdmFyIHJvb3RFbGVtZW50ID0gZG9jdW1lbnQuYm9keTsKIAogICAgICAgICAgICB2YXIgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZG9tKTsKIAogICAgICAgICAgICBuZXdFbGVtZW50LmlkID0gZG9tSWQ7CiAKICAgICAgICAgICAgdmFyIG5ld0VsZW1lbnRIdG1sQ29udGVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTsKIAogICAgICAgICAgICByb290RWxlbWVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTsKIAogICAgICAgICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnRIdG1sQ29udGVudCk7CiAKICAgICAgICB9CiAKICAgICAgICBmdW5jdGlvbiB0b2FzdChtc2csZHVyYXRpb24pewogCiAgICAgICAgICAgIGR1cmF0aW9uPWlzTmFOKGR1cmF0aW9uKT8zMDAwOmR1cmF0aW9uOwogCiAgICAgICAgICAgIGxldCB0b2FzdERvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogCiAgICAgICAgICAgIHRvYXN0RG9tLmlubmVySFRNTCA9IG1zZzsKIAogICAgICAgICAgICB0b2FzdERvbS5zdHlsZS5jc3NUZXh0PSdwYWRkaW5nOjJweCAxNXB4O21pbi1oZWlnaHQ6IDM2cHg7bGluZS1oZWlnaHQ6IDM2cHg7dGV4dC1hbGlnbjogY2VudGVyO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUpO2JvcmRlci1yYWRpdXM6IDRweDtjb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpO3Bvc2l0aW9uOiBmaXhlZDt0b3A6IDUwJTtsZWZ0OiA1MCU7ei1pbmRleDogOTk5OTk5OTtiYWNrZ3JvdW5kOiByZ2IoMCwgMCwgMCk7Zm9udC1zaXplOiAxNnB4OycKIAogICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvYXN0RG9tKTsKIAogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogCiAgICAgICAgICAgICAgICB2YXIgZCA9IDAuNTsKIAogICAgICAgICAgICAgICAgdG9hc3REb20uc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgZCArICdzIGVhc2UtaW4sIG9wYWNpdHkgJyArIGQgKyAncyBlYXNlLWluJzsKIAogICAgICAgICAgICAgICAgdG9hc3REb20uc3R5bGUub3BhY2l0eSA9ICcwJzsKIAogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0b2FzdERvbSkgfSwgZCAqIDEwMDApOwogCiAgICAgICAgICAgIH0sIGR1cmF0aW9uKTsKIAogICAgICAgIH0KIAogICAgICAgIGZ1bmN0aW9uIHBsYXlWaWRlb0Z1bmMoKXsKICAgICAgICAgICAgLy9jc3MKICAgICAgICAgICAgbGV0IHBsYXlWaWRlb1N0eWxlID0gYAogICAgICAgICAgICAuemhtX3BsYXlfdmlkb2VfaWNvbnsKICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOjJweDtjdXJzb3I6cG9pbnRlcjsKICAgICAgICAgICAgICAgIHotaW5kZXg6OTk5OTk5OTsKICAgICAgICAgICAgICAgIGRpc3BsYXk6YmxvY2s7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjpmaXhlZDtsZXQ6MHB4O3RvcDozNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtvdmVyZmxvdzp2aXNpYmxlOwogCiAgICAgICAgICAgIH0KICAgICAgICAgICAgLnpobV9wbGF5X3ZpZGVvX3dyYXB7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjpmaXhlZDtsZWZ0OjQwcHg7dG9wOjM2MHB4OwogICAgICAgICAgICAgICAgei1pbmRleDo5OTk5OTk5OwogICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgICAgIHdpZHRoOjMwMHB4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC56aG1fcGxheV92aWRlb19saW5lewogICAgICAgICAgICAgICAgd2lkdGg6MzIwcHg7CiAgICAgICAgICAgICAgICBoZWlnaHQ6MzE2cHg7CiAgICAgICAgICAgICAgICBvdmVyZmxvdy15OnNjcm9sbDsKICAgICAgICAgICAgICAgIG92ZXJmbG93LXg6aGlkZGVuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC56aG1fcGxheV92aWRlX2xpbmVfdWx7CiAgICAgICAgICAgICAgICB3aWR0aDozMDBweDsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgICAgICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwOwogICAgICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTsKICAgICAgICAgICAgICAgIHBhZGRpbmc6MHB4OwogICAgICAgICAgICAgICAgbWFyZ2luOjBweDsKIAogICAgICAgICAgICB9CiAgICAgICAgICAgIC56aG1fcGxheV92aWRlb19saW5lX3VsX2xpewogICAgICAgICAgICAgICAgcGFkZGluZzo0cHggMHB4OwogICAgICAgICAgICAgICAgbWFyZ2luOjJweDsKICAgICAgICAgICAgICAgIHdpZHRoOjMwJTsKICAgICAgICAgICAgICAgIGNvbG9yOiNGRkY7CiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6I2YyNDQ0MzsKICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6MHB4IDBweCAxMHB4ICNmZmY7CiAgICAgICAgICAgICAgICBmb250LXNpemU6MTRweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuemhtX3BsYXlfdmlkZW9fbGluZV91bF9saTpob3ZlcnsKICAgICAgICAgICAgICAgIGNvbG9yOiMyNjAwMzM7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiNmY2MwYzAKICAgICAgICAgICAgfQogICAgICAgICAgICAuemhtX2xpbmVfc2VsZWN0ZWR7CiAgICAgICAgICAgICAgICBjb2xvcjojMjYwMDMzOwogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjojZmNjMGMwCiAgICAgICAgICAgIH0KIAogICAgICAgICAgICAuemhtX3BsYXlfdmlkZW9fanh7CiAgICAgICAgICAgICAgICB3aWR0aDoxMDAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OjEwMCU7CiAgICAgICAgICAgICAgICB6LWluZGV4Ojk5OTk5OTsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6MHB4O3BhZGRpbmc6MHB4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGA7CiAKICAgICAgICAgICAgZG9tU3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGxheVZpZGVvU3R5bGUpKTsKIAogICAgICAgICAgICBkb21IZWFkLmFwcGVuZENoaWxkKGRvbVN0eWxlKTsKIAogICAgICAgICAgICAvL3RlbXBsYXRlOmljb24scGxheUxpbmU7CiAgICAgICAgICAgIGxldCBwbGF5V3JhcEh0bWwgPSAiPGRpdiBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCknIHRhcmdldD0nX2JsYW5rJyBzdHlsZT0nJyBjbGFzcz0ncGxheUJ1dHRvbiB6aG1fcGxheV92aWRvZV9pY29uJyBpZD0nemhtbG9nbyc+PGltZyBjbGFzcz0naWNvbkxvZ28nIHNyYz0nZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoWkFDV0FQY0FBUEpFUS92Nytmbkx5UGpDd2ZSblpmblQwUEpLU2ZqR3hQdjI5UG5ZMS9OYld2djE4L2FVay9ybDQvcnc3dm5LeVBhSmlQcnI2ZmFhbVBSeWNmYUxpdnY1OS9KSlNQcnY3Zk5WVlBuZTNmcnQ2L05RVC92NitQZWxwUGFnbnZSM2R2aTZ1UHZ6OGZleHIvbk96UGVnbnZyazR2UjFjL0pHUmZycTZQblF6dmpDd1BuUzBQbloxL3Z3N3ZuYTJmZW9wL2VtcGZyYzJ2TlVVL2l4ci9SNGR2V0poL2VzcXZKSFJ2dng3L3J5OGZOU1VmTldWUGpCd1BWNmVmYU1pdm5mM2ZpOHV2V0RndnY0OXZycDZQcnk4UEpQVHZhWWwvblQwZm5XMVBlcnFmUnNhL1J2YnZXQWYvVjlmUG5rNHZpMnRmUmpZZlJoWC92dTdQTllWL0pGUlBuazRmYUhoZmFYbHZ2MzlmcmgzL2k3dXZuTnkvbk95L3JzNnZlcnF2UmdYdm5kMi9hR2hQV1JrUFYvZmZyaTRQcmo0UGl3cmZuTHlmYVVrdlJmWGZKTlRQakZ3L2V5c2ZSbFkvUnhjUHZ2N2ZlenN2aTBzdnYyOC9hYm12ZXFxUGVwcVBKTVMvZXlzUFdPamZOZFhQUnpjdnYwOHZSdWJmcm81dmVpb2ZlbG8vTlpXUG5aMlBOcGFQblUwdlJmWHZuSHhmaXVyUGpBdi9uUXpmcm41Zm5jMi9lMHN2YWRuUGU0dC9hU2tmTlhWdlJtWlBldHF2blkxdmk4dS9laW9QaXRxL2kvdmZSd2IvUjFkUG5lM1BhZW5mYWNtdmUzdHZuUnovcmo0ZmFYbGZWK2ZQV0ZoUEpMU3ZhTmkvV01qUFIwYy9hVmsvV1BqL2FkbS9ycDUvbkl4dlJvWnZSaVlmakR3dmFWbFBKT1RmZTJ0Zk5xYWZKUlVQZWtvdmFhbWZOYVdmVjhldm5kM1BuTnpQblYxUGVzcS9qRXcvVjZlUFIzZC9uZzN2cnc3ZmFXbFBlbnBmYWZuZldQanZpd3J2TldWZm5NeXZpNnVmVi9mdlY5ZS9uYjJ2cnU2L1JrWXZqQXZ2bkl4ZlJpWVBpOXZQZWduL1Y3ZWZlam9mZTF0UFdDZ2ZybTVQSklSL25jMnZOY1cvSlFUL2pGeFB2eThQV0RnZldCZi9Sc2JQVjVkL05wYWZOY1hQbmYzdmFJaHZSdmIvaXZyZm5YMXZOUlVmYUtpZlJ0YlBhWmwvTmVYUGU1dVBXQ2dQUnJhdmFJaC9Ob1ovbkp4L1dGZy9pOXUvUjJkZmpIeHZqSXh2TlRVdmkvdnZlMXMvTmVYUUFBQUFBQUFBQUFBQUFBQUNIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaCtRUUVsZ0FBQUN3QUFBQUFaQUNXQUFBSS9nQUJDQnhJc0tEQmd3Z1RLbHpJc0tIRGh4QWpTcHhJc2FMRml4Z3phdHpJc2FQSGp5QkRpbHhJWUVTQUFDTUlqRnhwVUlXREFBNVVlRmpJNHVUSkJDeHpDc3hoazhpUWhUWnQ2c3lwd2FhR0RBc0hCT1V4bE9VTEpDV1F2S2l4Y0FPREFRTVliR2k2VWtHUEdqMFVHT0JLdHF6WnMyalRxbDNMdHFNQ0UwMU1pSzFLWXNRSUVsczdmbUZDYTlFV0Y0a1FoQ2lUUW9VSVRVelNmT3lRZ2tXS0RrR1NMdFdvQTlpdVpVRXphdzRnQlpxVklodFIyRVNCVTZGbWpEUU9DZG5NZWpNQ0xSTXlMckM1NEFMTm9LVXBqbkhSdW5mclR2VXVucG05NE1FZmtnTWNYQmlnY3VJbDNyNmpzejZqb0tJSkNSNGttTmd4RWtNajN5WG8vbWtDSmFpV0JUVmY5RmlaTTZsRWJ3U29UclE5eUVzSzZ3cXFTT1Z4S01OV2tqZXN1ZERjZkFCY1F3ZHJmVndoQTBVV2hJSElaa0wwUXFBYUsyem1pUTgzWkFURkVab1ZNaDhHeW1pR0FDVVdjRVRGRlFnRTlVQkVCbUNnQUFaak1VUUFDU1FNcUpBTVpXam1nbUlmZlpIQVNRdVVFaEVFSWp3aEFnUTJIbVJEVURZc3BBWjBRZDFSWWtnbmlNRkFGQkxGWUZNTVFDejBrazIySlhUQ2c1bWhRWllkVnBCangwSnkwQlptUWs0RVZZVkNkV1RHUVRwa0VWSlVBQzZBbHRBUE5tV2l3a0lRZkhrQkJBbjFZcWNWWmZrUnBVSSt4QUZFSEQ0bzBSQUJTUmFrQTRCQmpXSldCNW5GaHBBQlUwUXhSWXdZM1pHWkxtZmxzWnBOL21WTXVWSWJIQVNWaGF4bE1aTFpLVG1sRUJRSHNhUjFRb2cyOVNIZlNLVmtac1phNm1SR2dVWVRpR3BRQVVHOTRlZENPcGdVZ2hldmdMUkZVQzRjdEFRREhqQ3dCSGNLRlhxU0E0Z1N4RWVaRHVrVDFES09ITXVSSGtGcGNKQkxNTW0wVUp3MnpVa1FIRUYxZ2VwQ2Uyam1TekllTldOVE93ZnhkSkpQWGdiMUpnQVdoQkFVTUErMWxnSXpISjFReHhhYnJHblFuZ0VjdGRDU05pVkJrRGRCVlhBdFE3V3l4Z0VuaitUMFZGUlR5Y2dBQTBrU2JGTXJFRlhnMng2VW1DeVNWMkROUlZFV1FUSDZrTkhScFRJS0ZRUWFoRUZtR0JRZFZDRzV0QWFHR3hqOXNVQUZqSHlFVEZCbFJQVHFTUzhBRUVZZnJSVkNTRVZ1Qk1XSC9rZWJCQVdDMjBIVklaQW93bWk4V1FVaTRETlJuVGI1NGRGM05xVU5FUlpCMFVIUUk1elVyQmtPYytEYVVOODJIVVBRVzB6UTRIUkNCQ2dWQUhNRERSS1VPeEdsYUpQbEJjWERJV3NOaEFGUktFRU5RaEJqMkJ3QjJXMDI1UWExVFpaQ0pQdEpMaDlValRXdFNmS09RKy9hMUFCQm9wMUVHbENaRFJSQlVLekVIcFFYQ1Zrd2grR2JIVkxkUWxFRUpRVkJFZ2RBc1VLcW44U1VRTFBaVkV0RStaOUV2a0lZV0lUbU1vT0ZEbUF0SVlDSUdVSHVRUng3ekVRaFZzR0tWZ1pDdFpNc0NDSUpzd21yR0FJSlg3RW1FamY2RlVHdWs1M3RVQVFIUWNsR1JOQVhBQkE2QkJudTBVd0lGSktIb09EQUk5azdTUnRXR0JRWE5xUUovbVRZVEFRVVFvQ2dKTUlqaWdoS09YaG9rMG8wQkFwY2FNMnpFb0tKb0lEQkkydUlXa1NTYUJOYUxFUUdkNmhnWnNoQWc0V0lJU2lxOEVnbGdrS0NpRGpDSmlFb1J2bU1nTUxONE1BSUdWcUlJWUxpeElHMDZFVUhRNGhWN0RKQmdad2lLRVNMU0Nnc1lZaTdJV1FNTWRSTUJkaWdBNGQ4eXlaaUlBaVJqSVFreWRqa2ZnQVFSRkM0Y1VDTmRMQTFYSURDUTA2d3ZBQklDd0JhT2dtWHVCZVVnZHlBY2pZUlJFUzZZUWx6cUpJZ01vRERBSU5DaGpGRTVCSkJRUUN1MmdTa2l4MmtKc1VqeUNWUDBzYUg0TUVtQ0pBanhpVEFRaHZpVVNLT3NvazhDaExMQU15U2lLcGozVUErZ1J1SVNDSW93Z0FBRXlLWm1VbFdjaUowL3JQSkZRcXl5U05sNmlIdEN3cVdISUt5QUJqRGc1dEpaVVVtOEt1Y0VlU1BNTG9JbEFLd0xJZDBRVHJGdk1naGdzSUZrVndUanRxd3FHL3VtTWVLUUNJelBoQ0pLRmo0UDRaODd6NlV6RWdXYldLd2tZREtKaFVJbjB0Wm85Q00wQ0F6UnNqSWpHcDBFQjMwTHdBcGFFaU94bWhNalZpZ0FVRnBRU0FGTW9FcmVPQUtFMEJYUWxoMmtpWVpaQmFaK1FSRDJPRE5rbVlrR0puSjVFSFd3Sk1jck9HQkNmblNTWndwRUFNa0lwazdWSWdhZGhHQUJjRGhuaHRSd2dCdllhK0N4RzkrY0pJVFFxb1lsQkxNYkNpeThFUm05b2FRSEc0dlhZWnExMEhJR3BSdGtLVUlnY2dNTVJUU2dTUDhRSGlSWVVpMEZtS0JjV1NHRjAwcC9rTFlncUlJenhWRUFUUUlndW1tV2hGbVpBWVBRNUhCTFRJVEFoNXhKUmFaWVlkTzBuQThuT3JCTEFleXlUbDB3b1J1QmtCM1pzbGhBTmJCRW5UQVFqTWNtT0pIVnFzUVpBWUZFQU1SQnl5a0VBRUdtTlVpSjZBQXA0S0NCWVk1QkxlNlBSMUMxQVVUelJyRURMMFR5QTNtMEVwZk5PRWlGaGdHVkRYVGhWY3k1QVdtUFVMUEZBS3drd2pNSUNld2owMWNBUUFsZ0lFMUs4Q0RMQ1R5RFROb1dET0l1T0JEVUtZeWhjZzFBSFFWQ0dOdDhnVmlERk9TQW1DQUc5UWdwbWZBZ3hPcGFBMENORkhLaHh6Mkp3cmhhZ0NhWjVCRlJQV2wwamtKQjdMZ2pFbk1vQVBCb01ZYUFvSEwzbENISXZ6NmhiOUlRcU4vQXVBR2RleE4vak15RU9VMjg4a1dGaG1YQjlCd0xveEl3emVlZUM0QWFHQU1OL2NtQlQwZ0VBaUVUS0tDRUdBV0gvYnpTVFNRaEM5a3pRQVoxTXdJOXBPUU5IeGlFbUFRbzJZVzRJSmppR0VWaFowUEtEYURBdXc2eEFMaEFNYzhob0VLQ1pDQ0NXNUFiOVlPZ29aNm1xRmJzeTRJUkhscjZIUm1xZzBWRE1RcWNuMFFIeFJKQkpVaTNrME80Z2doQ01FVlJTYjJRQUIxRWtIUlVpalNqZ2d6K3hwamd0UXZBS0RNdGtQS2VjNkVESElFaFJTM1EvclpTWFYvWk5mdWpyZTg1MDN2ZWsvazNPbTJkMEZJcUIydEl1VGI0ZGIzUUliVFZ3RWN4elRkTTRnQUhzRHdCNGhYSVJSbytBTUdJSkJvYU9IaVdnaHFRV0FnY1ltcm9BTWdsMGovL21xajdBRGtoaUJRWGwxRHZvMFVBRkRMSmdkUXVIUWkwSW1ISzhTeUp6OUk2azZpem9KOCszbzd0Y25mWEI2VW1CZEVBRzd1eEFjWXdoakhETzhpRk1qTTBoWHlBYWtMNU9Vbk1UcEJrTzdtQ0V3OUlXK0ppMzRyMGdLL0xXVFFObWs1MFdFdWN6OFBzU2tWaXFaQ2ZpVDBnV0E5QUZvZkNOZFBJb0NDVUdBR0NXaGxBSWF1RXdra2N5R3QvUHJkOHk2UXZRZWc3d2Y1UUN2ZlBwU3kyd1FHQ1lGQlVDaS85cXkzbmU4Sk1YeFF2bzZSb1pwWklIRS95UW9Ta25xVjI3M29uMys4UWxxSmVZUXdMU3k4SG9pU3ZYb1F6ZHVrQlFteC9Fa2V2dmpZUXg0aEN6NUo3USt5TTZsUXhjVVdtMzFRYkM2UXFOdUU4NTNIdS9FVi9wTDhBQ3ovWkVaUk8wSXFISUFMSDRUdVBEL0l0eWxPa09JZlBTakhQd2p0RTNKa1FtVldJVE1JQ3RBTHdtYWJTS0FnN3JkMThCZDZ6cElRWVRabUMwRmVpRGQ2QlZGMXZ6Y3RzUGQrTmhGL0JaRnkyRmNRY2tabi9vWVI2RGQ0QlpGL05yRjZBQmlCQWppQkJ6RUQ5Q1I3WkFHQ3kwWVFIZmgvSThoMkVuZ1NKU0J4a2xBQ3dvZE5wRGNVRG5nU0NGQVF5d044RUNpREplaG1NRmdXL2FkOEF5RjZMUmlEbmplRDBvRUFNekJlRHBZUWFLZDZBOUY2VXppRVQxaUV2b0VBSzdDRG8xSXFwOElRL01VdUROR0RBVUI1VVBhREJ4R0FlaGRWRFRDSGRKZ0JBdkI5REJFcGs1SnNGS1pZREpHRUFmQXMxdGVFVHFoOVVFaUIvaFJCYlFGZ2JkQUhKZzF4aFNvSGlWdkloWWJvaFlnNEVkdEdja2tXRkV3R2NVR0JGSUNZRUhEWWVBT0lFZVRXSldSR1ZBNlJjZ0N3UE9KWGlJd0hBSTUzaVJMQmJxZG5FZC9XZW9SSGliRTRpeGtCYng4eGlKb2hocTlIaEhGb2d1cVdjbW1uRUtNb2k2VW9ibzVYZDZKSWdzY0lldXJHaE5QSGpOUklpc2c0RktuekVqM1hFRG00aGd2UmpMNklFZnhtUWdvQlRZVElFSzNuZXROb2pOeG9qY0pCSEFaM2JTY0JFUkpBaDNOSWZRWFJDQWtRa0FsZ0NBWUJBdnk0aXhVeGN0MDJFQUFuY0FhQmMxWEJBSVNVRnc0NUVOT0FDeXlBQzM2UVdoVTVFVk13QVUwd0FXWFlrU1Jaa2laNWtoNFJRVmxCa1IyNUQwM1FOTGtuUEJBTldaSmV3QUk4ODN3SmNSb2x5V0t2YUJEc2FISW1XWC9veEhPM1NHLzVVQlFhWUFsd2haSU1ZUXFBOGdPbVVKUk1PWlZVV1pWV2FaVUJBUUFoK1FRQmxnQUFBQ3dHQUFZQVdRQ0xBSWN5elRMeDBVWHhwVVR5WDBQeVNFUHlWa1B5ZVVUeWdrVHd5RVR6VFVQeHlrWHlpa1R3eDBUeHRrWHlVVVB4dDBUeHJrWHh4a1h3djBUeW1FVHlpMFB4dVVUeWFrUHh5RVh4eEVYeWFFUHh1MFR4ekVYeHpVWHlrVVR4bEVUeVVrUHlqMFR4aGtUeHBFVHlia1R4dEVYeHcwWHluRVR4Z2tUeVZFUHllMFR5WlVQeG9FVHhzRVR5ZVVQeWJFUHhza1R4dTBYeWRFVHhyRVR5Y0VQeVowUHh2MFh4ZVVUeHpVVHlta1R4ajBUeGswUHlZMFB4cmtUeWpVVHhwMFR5V2tQeWFVUHhoRVR4bzBUeGRVUHlvVVR5V0VQeWNrUHhxVVR4cTBUeHFrVHlrMFFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSS9nQUhRQWdRQU1JQUFBZ1RLbHpJc0tIRGh4QWpSaFJ3SWNBRkFRc2VFQ1RZUUtMSGp5QkRObFN3VVVHSmpSdEZxbHpKTW1HRWpSRmdDRUFwb3FYTm14RTdrS2hCb2tPTEJBY0VDRGlRQUtmUm93Z0xqTEF4b2dBQnBGQ2pTcDFLdGFyVnExaXphdDBLc1lDRkdSYWNKcUFBQVFLRm9seXhnbUR4Z0FXSUdETTMxa3g3RmNOR0RBMVFFcVI3bGNQR0RSYzBidXpJdDZvTXZ4dVE1QmdnQUFFREFRY0xVN1VRWWtFSUlCOGthOTdNdWJQbno2QS9FM0JRd01GVEFBTW9VSWdjK3FhQkNTWW1HQmpnQWFXSDFqY3JiS3l3QWdGS0JyaHQzdmpMUUFKS0NjRmJhdGlvUVlBQjN3RVlHRWpPTWdVT0lqaFM3RUE0Z0RWMWxRUlEvdnhBY2ZxNytmUG8wNFBPa0VFOVNCVW5GcHhROGVFNVFRVFQzVStzZUhHQjhZM0k2UWNSU1FTWkJCMUJ3QW40MEVzRXhWVGJSam9vK0pCT1BQbUUyZ0VIZUNmaFFrb3g1ZFNHSUlZbzRvZ2tLdVNWRVM0NHhSaEJrSlVJd0ZvVnZQQ1dZQnk1YUJkQmVPa1ZnSXNFQm1CU1hBVE5SV0lTaUIyeEFGQkNFZVVpWlpaaDV1S1RVRVlwWldHamxmWVVVR1VwV2VKcnNjMEdaQUJDanFnYlFienA2T0p3QkczQUFJMEJFRWJpbUFId3RtSUFMVzRKbTJ3YVBsbWxhVlAyNmVlZk9LVzIycE0wQkxGQUVEUjg4Q0JCdDVYb0Ewa0srTERBZ2RIeFdGSUoveEVVSUlrM0JvQ1hmZEhsUnlJSUwyZ2dZd3dJc1FkbEFTNE1rV0o1L29ER0t1dXNDNm42Skt1dU9nVXFmaTUyVU9vTFBtVWF3S1lqTWhoQVRKUW1TR0tQSmkwYVFJUWxVbVFSUnFpcGxtZUk4TWxISDYzY2R1dXRpSHMrTldlZEpLWndwM1pzdWpuaWNnUTFaMmFKYUFhZzVwZGhpZ2duYjFoQ29DV0pYT0xaWjdqZkJpeHdpUG51T3lLVElWandBYjB1SGhZQUJ6TGs4QzZKZnFVWkdFcnFpdGdwWHVOZXUrRmFiYjNWcDFkZ2ZUand5U2lqSjZqSEczYllGQUhPTmtvaWhUMjFrS3lMeHNZa0xMRWlNbHNDcU5LNUtHMS9xYmIzWkxielpaYnkwa3kzWnF1TDRZMzMxSzZpam1nZGR0cnQ3Q0s3QVRSM003ekVPUXZ0bTd1dFVPMmdMdlk3MjcrazhkbjAyM0FYeHBodjVCNWNXY0lmcE51d1VWOFFTNnlYaXhYTGV4Rk5OdDdWUU1Gb2tkZ0REdy93MEFPcVU2SkF3d3cwa0JmMzVaaGZoZVJRaVk5WXhBd2VFc0J3aVVvOFVHRUxFeGNMRXd4NmwraHp4eTRLOFZJRVFpelE1d0hMYVpCaFFBQWgvaFZOWVdSbElIZHBkR2dnVTJOeVpXVnVWRzlIYVdZQU93PT0nIHRpdGxlPSfngrnlh7vlj7PkvqfliJfooajov5vooYzop6PmnpAnIHN0eWxlPSd3aWR0aDo0MHB4Jz4iOwogCiAgICAgICAgICAgIHBsYXlXcmFwSHRtbCArPSAiPGRpdiBjbGFzcz0ncGxheUxpbmVEaXYgemhtX3BsYXlfdmlkZW9fd3JhcCcgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPiIKIAogICAgICAgICAgICBwbGF5V3JhcEh0bWwgKz0gIjxkaXYgY2xhc3M9J3pobV9wbGF5X3ZpZGVvX2xpbmUnPiI7CiAKICAgICAgICAgICAgcGxheVdyYXBIdG1sICs9IjxkaXY+PHVsIGNsYXNzPSd6aG1fcGxheV92aWRlX2xpbmVfdWwnPiI7CiAKICAgICAgICAgICAgcGxheUxpbmUuZm9yRWFjaChmdW5jdGlvbihpdGVtKXsKIAogICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkID0gJyc7CiAKICAgICAgICAgICAgICAgIGlmKGdldENvb2tpZSgncGxheUxpbmVBY3Rpb24nKSA9PSBpdGVtLnVybCl7CiAKICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZD0nemhtX2xpbmVfc2VsZWN0ZWQnOwogCiAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgIHBsYXlXcmFwSHRtbCArPWA8bGkgY2xhc3M9J3BsYXlMaW5lVGQgemhtX3BsYXlfdmlkZW9fbGluZV91bF9saSAke3NlbGVjdGVkfScgdXJsPScke2l0ZW0udXJsfScgPiR7aXRlbS5uYW1lfTwvbGk+YDsKIAogICAgICAgICAgICB9KQogCiAgICAgICAgICAgIHBsYXlXcmFwSHRtbCArPSI8L2Rpdj48L2Rpdj48L2Rpdj4iOwogCiAgICAgICAgICAgIC8vdGVtcGxhdGU6bm9kZTvmkq3mlL7ljLrln58KIAogICAgICAgICAgICBsZXQgcGxheUp4SHRtbCA9ICI8ZGl2IGNsYXNzPSd6aG1fcGxheV92aWRlb19qeCc+IjsKIAogICAgICAgICAgICBwbGF5SnhIdG1sICs9ICI8aWZyYW1lIGFsbG93dHJhbnNwYXJlbmN5PXRydWUgZnJhbWVib3JkZXI9JzAnIHNjcm9sbGluZz0nbm8nIGFsbG93ZnVsbHNjcmVlbj10cnVlIGFsbG93dHJhbnNwYXJlbmN5PXRydWUgbmFtZT0nanhfcGxheScgc3R5bGU9J2hlaWdodDoxMDAlO3dpZHRoOjEwMCUnIGlkPSdwbGF5SWZyYW1lJz48L2lmcmFtZT48L2Rpdj4iOwogCiAgICAgICAgICAgIC8v5b6q546v5Yik5pat5piv5ZCm5Zyo5pKt5pS+6aG177yM5piv5YiZ5omn6KGM5LiL6Z2iCiAgICAgICAgICAgIGxldCBqeFZpZGVvRGF0YSA9IFsKIAogICAgICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIjcGxheWVyIixtYXRjaDovbVwudlwucXFcLmNvbVwveFwvcGxheVwuaHRtbFw/Y2lkPS8sYXJlYUNsYXNzTmFtZTonc2xpZGVyX2JveCd9LAogICAgICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIjcGxheWVyIixtYXRjaDovbVwudlwucXFcLmNvbVwvcGxheVwuaHRtbFw/Y2lkXD0vLGFyZWFDbGFzc05hbWU6J3NsaWRlcl9ib3gnfSwKICAgICAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiI3BsYXllciIsbWF0Y2g6L21cLnZcLnFxXC5jb21cL2NvdmVyXC8uKmh0bWwvLGFyZWFDbGFzc05hbWU6J3NsaWRlcl9ib3gnfSwKICAgICAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiI3BsYXllciIsbWF0Y2g6L2h0dHBzPzpcL1wvbVwudlwucXFcLmNvbVwveFwvbVwvcGxheVw/LipjaWQuKi8sYXJlYUNsYXNzTmFtZTonc2xpZGVyX2JveCd9LAogCiAgICAgICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6Ii5tLXZpZGVvLXBsYXllci13cmFwIixtYXRjaDovXmh0dHBzOlwvXC9tLmlxaXlpXC5jb21cL1t2d2FdXF8vLGFyZWFDbGFzc05hbWU6J20tc2xpZGluZy1saXN0J30sCiAgICAgICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6Ii5pbnRsLXZpZGVvLXdyYXAiLG1hdGNoOi9eaHR0cHM6XC9cL3d3d1wuaXFcLmNvbVwvcGxheVwvLyxhcmVhQ2xhc3NOYW1lOidtLXNsaWRpbmctbGlzdCd9LAogCiAgICAgICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6IiNwbGF5ZXIiLG1hdGNoOi9tXC55b3VrdVwuY29tXC9hbGlwYXlfdmlkZW9cL2lkXy8sYXJlYUNsYXNzTmFtZTonJ30sCiAgICAgICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6IiNwbGF5ZXIiLG1hdGNoOi9tXC55b3VrdVwuY29tXC92aWRlb1wvaWRfLyxhcmVhQ2xhc3NOYW1lOicnfSwKIAogICAgICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIucGxheWVyLWNvbnRhaW5lciIsbm9kZVR5cGU6J2NsYXNzJyxtYXRjaDovbVwuYmlsaWJpbGlcLmNvbVwvYmFuZ3VtaS8sYXJlYUNsYXNzTmFtZTonZXAtbGlzdC1wcmUtYm9keSd9LAogICAgICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIubXBsYXllciIsbm9kZVR5cGU6J2NsYXNzJyxtYXRjaDovbVwuYmlsaWJpbGlcLmNvbVwvdmlkZW9cLy8sYXJlYUNsYXNzTmFtZTonZXAtbGlzdC1wcmUtYm9keSd9LAogCiAgICAgICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6Ii52aWRlby1hcmVhIixub2RlVHlwZTonY2xhc3MnLG1hdGNoOi9tXC5tZ3R2XC5jb21cL2IvLGFyZWFDbGFzc05hbWU6J2NsZWFyZml4J30sCiAKICAgICAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiI2xlX3BsYXlib3giLG5vZGVUeXBlOidpZCcsbWF0Y2g6L21cLmxlXC5jb21cL3B0dlwvdnBsYXlcLy8sYXJlYUNsYXNzTmFtZTonc2lkZXNsaXBfc2xpZGUnfSwKIAogICAgICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIjai1wbGF5ZXIiLG5vZGVUeXBlOidpZCcsbWF0Y2g6L21cLmxlXC5jb21cL3ZwbGF5LyxhcmVhQ2xhc3NOYW1lOidqdWppJ30sCiAKICAgICAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiI3BsYXllciIsbm9kZVR5cGU6J2lkJyxtYXRjaDovcGxheVwudHVkb3VcLmNvbVwvdl9zaG93XC9pZF8vfSwKIAogICAgICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIjcHB0dl9wbGF5cGFnZV9ib3giLG5vZGVUeXBlOidpZCcsbWF0Y2g6L3ZcLnBwdHZcLmNvbVwvc2hvd1wvL30sCiAKICAgICAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiI3BsYXllciIsbm9kZVR5cGU6J2lkJyxtYXRjaDovdmlwXC4xOTA1LmNvbVwvcGxheVwvL30sCiAKICAgICAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiI3ZvZFBsYXllciIsbm9kZVR5cGU6J2lkJyxtYXRjaDovd3d3XC4xOTA1LmNvbVwvdm9kXC9wbGF5XC8vfSwKICAgICAgICAgICAgXTsKIAogICAgICAgICAgICAvL+WIm+W7umxvZ29faWNvbgogICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdkaXYnLCd6aG1JY29uJyk7CiAKICAgICAgICAgICAgbGV0IHpobVBsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnemhtSWNvbicpOwogCiAgICAgICAgICAgIHpobVBsYXkuaW5uZXJIVE1MID0gcGxheVdyYXBIdG1sOwogCiAgICAgICAgICAgIGxldCBqeFZpZGVvV2ViID0ganhWaWRlb0RhdGEuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pewogCiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb24uaHJlZi5tYXRjaChpdGVtLm1hdGNoKTsKIAogICAgICAgICAgICB9KQogCiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN6aG1sb2dvJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7CiAKICAgICAgICAgICAgICAgIGxldCBqeFZpZGVvV2ViID0ganhWaWRlb0RhdGEuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pewogCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhyZWYubWF0Y2goaXRlbS5tYXRjaCk7CiAKICAgICAgICAgICAgICAgIH0pCiAKICAgICAgICAgICAgICAgIGlmKGp4VmlkZW9XZWIubGVuZ3RoID09IDApewogCiAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ+ivt+WcqOinhumikeaSreaUvumhteeCueWHu+WbvuaghycpOwogCiAgICAgICAgICAgICAgICB9ZWxzZXsKIAogICAgICAgICAgICAgICAgICAgIHZhciB7ZnVuY05hbWUsbWF0Y2g6bm93TWF0Y2gsbm9kZTpub3dOb2RlLG5hbWU6bm93TmFtZX0gPSBqeFZpZGVvV2ViWzBdOwogCiAgICAgICAgICAgICAgICAgICAgbGV0IHBsYXlMaW5lRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnpobV9wbGF5X3ZpZGVvX3dyYXAnKTsKIAogICAgICAgICAgICAgICAgICAgIGxldCBwbGF5U2hvdyA9IHBsYXlMaW5lRGl2LnN0eWxlLmRpc3BsYXk7CiAKICAgICAgICAgICAgICAgICAgICBwbGF5U2hvdyA9PSAnbm9uZSc/IHBsYXlMaW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOnBsYXlMaW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAKICAgICAgICAgICAgICAgICAgICB2YXIgcGxheUxpbmVUZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wbGF5TGluZVRkJyk7CiAKICAgICAgICAgICAgICAgICAgICBwbGF5TGluZVRkLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheUxpbmVUZC5mb3JFYWNoKGZ1bmN0aW9uKGUpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywncGxheUxpbmVUZCB6aG1fcGxheV92aWRlb19saW5lX3VsX2xpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCdwbGF5TGluZVRkIHpobV9wbGF5X3ZpZGVvX2xpbmVfdWxfbGkgemhtX2xpbmVfc2VsZWN0ZWQnKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29va2llKCdwbGF5TGluZUFjdGlvbicsdGhpcy5nZXRBdHRyaWJ1dGUoJ3VybCcpLDMwKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vd1dlYk5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKG5vd05vZGUpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihub3dXZWJOb2RlKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vd1dlYk5vZGUuaW5uZXJIVE1MID0gcGxheUp4SHRtbDsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwbGF5SWZyYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3BsYXlJZnJhbWUnKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlJZnJhbWUuc3JjPSBpdGVtLmdldEF0dHJpYnV0ZSgndXJsJykrbG9jYXRpb24uaHJlZjsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn6KeG6aKR572R56uZ57uT54K55LiN5a2Y5ZyoJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgfSkKIAogICAgICAgICAgICAgICAgICAgIH0pCiAKICAgICAgICAgICAgICAgICAgICBsZXQgdmlkZW9TZWxlY3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuJytqeFZpZGVvV2ViWzBdLmFyZWFDbGFzc05hbWUpOwogCiAgICAgICAgICAgICAgICAgICAgdmlkZW9TZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpewogCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZj1sb2NhdGlvbi5ocmVmOwogCiAgICAgICAgICAgICAgICAgICAgICAgIH0sMTAwMCkKIAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICB9KQogCiAKICAgICAgICAgICAgbGV0IHRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKIAogICAgICAgICAgICAgICAgbGV0IGp4VmlkZW9XZWIgPSBqeFZpZGVvRGF0YS5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7CiAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb24uaHJlZi5tYXRjaChpdGVtLm1hdGNoKTsKIAogICAgICAgICAgICAgICAgfSkKIAogICAgICAgICAgICAgICAgaWYoanhWaWRlb1dlYi5sZW5ndGg+MCl7CiAKICAgICAgICAgICAgICAgICAgICBsZXQgdmlkZW9TZWxlY3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuJytqeFZpZGVvV2ViWzBdLmFyZWFDbGFzc05hbWUpOwogCiAgICAgICAgICAgICAgICAgICAgaWYodmlkZW9TZWxlY3QpewogCiAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihlKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZj1sb2NhdGlvbi5ocmVmOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LDEwMDApCiAKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICB9LDEwMDApCiAKICAgICAgICB9CiAKICAgICAgICBwbGF5VmlkZW9GdW5jKCk7CiAKICAgIH1lbHNlewogICAgICAgIC8qLS1jb25maWctLSovCiAgICAgICAgdmFyIENvbmZpZyA9ewogCiAgICAgICAgY291cG9uVXJsOndpbmRvdy5sb2NhdGlvbi5ocmVmLAogCiAgICAgICAgY291cG9uSG9zdDp3aW5kb3cubG9jYXRpb24uaG9zdCwKIAogICAgICAgIHdlYlVybDonaHR0cDovL211c2ljLmxpdXpoaWppbi5jbi8nLAogCiAgICAgICAgaWNvblZpcFRvcDozNjAsCiAKICAgICAgICBpY29uVmlwUG9zaXRpb24gOiAnbGVmdCcsCiAKICAgICAgICBpY29uVmlwV2lkdGggOiA0MCwKIAogICAgICAgIGNvdXBvblRpbWVyTnVtIDogMTAwLC8vMTAw5qyh562J5LqOMTDnp5IKIAogICAgICAgIGNvdXBvbldhaXRUaW1lIDogMTAwLAogCiAgICAgICAgaWNvbldhaXRUaW1lIDogMTAwLAogCiAgICAgICAgaWNvblZpcE9wYWNpdHk6MTAwLAogCiAgICAgICAgc2VsZWN0ZWRMZWZ0OidzZWxlY3RlZCcsCiAKICAgICAgICBzZWxlY3RlZFJpZ2h0OicnLAogCiAgICAgICAgdmlkZW9QbGF5TGluZUFkZDpHTV9nZXRWYWx1ZSgndmlkZW9QbGF5TGluZUFkZCcsMCksCiAKICAgICAgICB9CiAKICAgICAgICB2YXIge2NvdXBvblVybCwKICAgICAgICAgICAgY291cG9uSG9zdCwKICAgICAgICAgICAgd2ViVXJsLAogICAgICAgICAgICBpY29uVmlwVG9wLAogICAgICAgICAgICBpY29uVmlwUG9zaXRpb24sCiAgICAgICAgICAgIGljb25WaXBXaWR0aCwKICAgICAgICAgICAgaWNvblZpcE9wYWNpdHksCiAgICAgICAgICAgIGNvdXBvblRpbWVyTnVtLAogICAgICAgICAgICBjb3Vwb25XYWl0VGltZSwKICAgICAgICAgICAgaWNvbldhaXRUaW1lLAogICAgICAgICAgICBzZWxlY3RlZExlZnQsCiAgICAgICAgICAgIHNlbGVjdGVkUmlnaHQsCiAgICAgICAgICAgIHZpZGVvUGxheUxpbmVBZGQsCiAgICAgICAgfSA9IENvbmZpZzsKICAgICAgICAvKi0tbGFuZy0tKi8KICAgICAgICB2YXIgbGFuZyA9IHsKICAgICAgICAgICAgc2V0Oiforr7nva4nLAogICAgICAgICAgICBpY29uUG9zaXRpb246J+Wbvuagh+iuvue9ricsCiAgICAgICAgICAgIHBsYXlWaWRlbzon6Kej5p6Q6K6+572uJywKICAgICAgICAgICAgaWNvbkhlaWdodDon5Zu+5qCH6auY5bqmJywKICAgICAgICAgICAgaWNvbldpZHRoOiflm77moIflpKflsI8nLAogICAgICAgICAgICBpY29uTGluZTon5rC05bmz5L2N572uJywKICAgICAgICAgICAgaWNvbldhaXRUaW1lOifnrYnlvoXml7bpl7QnLAogICAgICAgICAgICBpY29uTGVmdDon6Z2g5bemJywKICAgICAgICAgICAgaWNvblJpZ2h0OifpnaDlj7MnLAogICAgICAgICAgICB0aXBJY29uSGVpZ2h0Oifpu5jorqQzNjAs5bu66K6uMX41MDAnLAogICAgICAgICAgICB0aXBJY29uV2lkdGg6J+m7mOiupDQwLOW7uuiurjIwfjUwJywKICAgICAgICAgICAgdGlwSWNvbk9wYWNpdHk6J+ivt+Whq+WGmTAtMTAw55qE5pW05pWwJywKICAgICAgICAgICAgdGlwRXJyb3JJY29uSGVpZ2h0Oic85Zu+5qCH5L2N572uPuS4reeahDzlm77moIfpq5jluqY+5bqU5Li6MTAwMOS7peWGheato+aVtOaVsO+8jOW7uuiurjF+NTAwJywKICAgICAgICAgICAgdGlwRXJyb3JJY29uV2lkdGg6Jzzlm77moIfkvY3nva4+5Lit55qEPOWbvuagh+Wkp+Wwjz7lupTkuLoxMDDku6XlhoXmraPmlbTmlbDvvIzlu7rorq4yMH41MCcsCiAgICAgICAgICAgIHRpcEVycm9ySWNvbk9wYWNpdHk6J+Whq+WGmeaVsOWtl+S4jeato+ehricsCiAgICAgICAgICAgIHNldFBsYXlWaWRlbzon6Kej5p6Q6K6+572uJywKICAgICAgICAgICAgcGxheVZpZGVvTGluZUFkZDon56uZ5aSW6Kej5p6QJywKICAgICAgICAgICAgdGlwUGxheVZpZGVvTGluZUFkZDon6K+35aGr5YWl57q/6Lev5ZCN56ew5ZKM5Zyw5Z2A77yM5Lit6Ze055So5Y2K6KeS6YCX5Y+36ZqU5byA77yM5q+P57q/6Lev5LiA6KGM44CCJywKICAgICAgICB9OwogCiAgICAgICAgdmFyIGp4VmlkZW89WwogCiAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIixtYXRjaDovaHR0cHM/OlwvXC92XC5xcVwuY29tLyxuYW1lOidxcVBDJ30sCiAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbWF0Y2g6L2h0dHBzPzpcL1wvbVwudlwucXFcLmNvbS8sbmFtZToncXFNb2JpbGUnfSwKIAogICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG1hdGNoOi9eaHR0cHM/OlwvXC93d3dcLmlxaXlpXC5jb20vLG5hbWU6J2lxaXlpUGMnfSwKICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBtYXRjaDovXmh0dHBzPzpcL1wvd3d3XC5pcVwuY29tL30sCiAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiLm0tdmlkZW8tcGxheWVyLXdyYXAiLG1hdGNoOi9eaHR0cHM/OlwvXC9tLmlxaXlpXC5jb20vLGFyZWFDbGFzc05hbWU6J20tc2xpZGluZy1saXN0J30sCiAKICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIjcGxheWVyIixub2RlVHlwZTonaWQnLG1hdGNoOi9tXC55b3VrdVwuY29tXC9hbGlwYXlfdmlkZW9cL2lkXy99LAogICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6IiNwbGF5ZXIiLG5vZGVUeXBlOidpZCcsbWF0Y2g6L21cLnlvdWt1XC5jb21cL3ZpZGVvXC9pZF8vfSwKICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBtYXRjaDovXmh0dHBzPzpcL1wvLip5b3VrdVwuY29tL30sCiAKICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBtYXRjaDovXmh0dHBzPzpcL1wvd3d3XC5iaWxpYmlsaVwuY29tL30sCiAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbWF0Y2g6L15odHRwcz86XC9cL21cLmJpbGliaWxpXC5jb20vfSwKIAogICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6Ii52aWRlby1hcmVhIixub2RlVHlwZTonY2xhc3MnLG1hdGNoOi9tXC5tZ3R2XC5jb21cL2IvfSwKICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBtYXRjaDovbWd0dlwuY29tLyxhcmVhQ2xhc3NOYW1lOidlcGlzb2RlLWl0ZW1zIGNsZWFyZml4J30sCiAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiLngtY292ZXItcGxheWJ0bi13cmFwIixub2RlVHlwZTonY2xhc3MnLG1hdGNoOi8udHZcLnNvaHVcLmNvbS99LAogICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6Ii54LWNvdmVyLXBsYXlidG4td3JhcCIsbm9kZVR5cGU6J2NsYXNzJyxtYXRjaDovbVwudHZcLnNvaHVcLmNvbS99LAogICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6IiNwbGF5ZXJXcmFwIixub2RlVHlwZTonaWQnLG1hdGNoOi9maWxtXC5zb2h1XC5jb20vfSwKIAogICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG1hdGNoOi90dWRvdVwuY29tL30sCiAKICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLG1hdGNoOi9sZVwuY29tL30sCiAKICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLG1hdGNoOi9wcHR2XC5jb20vfSwKIAogICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsbWF0Y2g6LzE5MDVcLmNvbS99LAogCiAgICAgICAgXTsKIAogICAgICAgIHZhciBwbGF5TGluZSA9IFsKICAgICAgICAgICAgICAgIHsibmFtZSI6Iue6r+WHgDEiLCJ1cmwiOiJodHRwczovL2ltMTkwNy50b3AvP2p4PSIsIm1vYmlsZSI6MX0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiJC56uZMSIsInVybCI6Imh0dHBzOi8vanguanNvbnBsYXllci5jb20vcGxheWVyLz91cmw9IiwibW9iaWxlIjoxfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IueIseixhiIsInVybCI6Imh0dHBzOi8vanguYWlkb3Vlci5uZXQvP3VybD0iLCJtb2JpbGUiOjF9LAogICAgICAgICAgICAgICAgeyJuYW1lIjoiQkwiLCJ1cmwiOiJodHRwczovL3ZpcC5ibGppZXguY29tLz92PSIsIm1vYmlsZSI6MH0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiLlhrDosYYiLCJ1cmwiOiJodHRwczovL2FwaS5xaWFucWkubmV0L3ZpcC8/dXJsPSIsIm1vYmlsZSI6MH0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiLnmb7ln58iLCJ1cmwiOiJodHRwczovL2p4LjYxOGcuY29tLz91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IkNLIiwidXJsIjoiaHR0cHM6Ly93d3cuY2twbGF5ZXIudmlwL2ppZXhpLz91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IkNIb2siLCJ1cmwiOiJodHRwczovL3d3dy5nYWk0LmNvbS8/dXJsPSIsIm1vYmlsZSI6MX0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiJja21vdiIsInVybCI6Imh0dHBzOi8vd3d3LmNrbW92LnZpcC9hcGkucGhwP3VybD0iLCJtb2JpbGUiOjB9LAogICAgICAgICAgICAgICAgeyJuYW1lIjoiSDgiLCJ1cmwiOiJodHRwczovL3d3dy5oOGp4LmNvbS9qaWV4aS5waHA/dXJsPSIsIm1vYmlsZSI6MH0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiJKWSIsInVybCI6Imh0dHBzOi8vangucGxheWVyankuY29tLz91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6Iuino+aekCIsInVybCI6Imh0dHBzOi8vY2ttb3YuY2N5ampkLmNvbS9ja21vdi8/dXJsPSIsIm1vYmlsZSI6MH0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiLop6PmnpBsYSIsInVybCI6Imh0dHBzOi8vYXBpLmppZXhpLmxhLz91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IuiAgeadvyIsInVybCI6Imh0dHBzOi8vdmlwLmxhb2JhbmRxLmNvbS9qaWV4aS5waHA/dXJsPSIsIm1vYmlsZSI6MH0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiJNQU8iLCJ1cmwiOiJodHRwczovL3d3dy5tdG9zei5jb20vbTN1OC5waHA/dXJsPSIsIm1vYmlsZSI6MH0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiJNM1U4IiwidXJsIjoiaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IuivuuiuryIsInVybCI6Imh0dHBzOi8vd3d3Lm54Zmx2LmNvbS8/dXJsPSIsIm1vYmlsZSI6MH0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiJPSyIsInVybCI6Imh0dHBzOi8vb2tqeC5jYy8/dXJsPSIsIm1vYmlsZSI6MX0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiJQTSIsInVybCI6Imh0dHBzOi8vd3d3LnBsYXltM3U4LmNuL2ppZXhpLnBocD91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IuebmOWPpCIsInVybCI6Imh0dHBzOi8vd3d3LnBhbmd1amlleGkuY2MvamlleGkucGhwP3VybD0iLCJtb2JpbGUiOjB9LAogICAgICAgICAgICAgICAgeyJuYW1lIjoi5LiD5ZOlIiwidXJsIjoiaHR0cHM6Ly9qeC5ubnh2LmNuL3R2LnBocD91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IlJESEsiLCJ1cmwiOiJodHRwczovL2p4LnJkaGsubmV0Lz92PSIsIm1vYmlsZSI6MX0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiLkurrkurrov7ciLCJ1cmwiOiJodHRwczovL2p4LmJsYm8uY2M6NDQzMy8/dXJsPSIsIm1vYmlsZSI6MX0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiLmgJ3kupEiLCJ1cmwiOiJodHRwczovL2p4LmFwMnAuY24vP3VybD0iLCJtb2JpbGUiOjB9LAogICAgICAgICAgICAgICAgeyJuYW1lIjoi5oCd5Y+kMyIsInVybCI6Imh0dHBzOi8vanNhcC5hdHRha2lkcy5jb20vP3VybD0iLCJtb2JpbGUiOjF9LAogICAgICAgICAgICAgICAgeyJuYW1lIjoi5ZCs5LmQIiwidXJsIjoiaHR0cHM6Ly9qeC5kajZ1LmNvbS8/dXJsPSIsIm1vYmlsZSI6MX0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiLnu7TlpJoiLCJ1cmwiOiJodHRwczovL2p4Lml2aXRvLmNuLz91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IuiZvuexsyIsInVybCI6Imh0dHBzOi8vangueG1mbHYuY29tLz91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IllUIiwidXJsIjoiaHR0cHM6Ly9qeC55YW5ndHUudG9wLz91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IuS6keerryIsInVybCI6Imh0dHBzOi8vc2IuNWdzZW8ubmV0Lz91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IuS6keaekCIsInVybCI6Imh0dHBzOi8vangueXBhcnNlLmNvbS9pbmRleC5waHA/dXJsPSIsIm1vYmlsZSI6MH0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiIwNTIzIiwidXJsIjoiaHR0cHM6Ly9nby55aDA1MjMuY24veS5jeT91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IjE35LqRIiwidXJsIjoiaHR0cHM6Ly93d3cuMTcxN3l1bi5jb20vangvdHkucGhwP3VybD0iLCJtb2JpbGUiOjB9LAogICAgICAgICAgICAgICAgeyJuYW1lIjoiMTgwIiwidXJsIjoiaHR0cHM6Ly9qeC4wMDAxODAudG9wL2p4Lz91cmw9IiwibW9iaWxlIjowfSwKICAgICAgICAgICAgICAgIHsibmFtZSI6IjRLIiwidXJsIjoiaHR0cHM6Ly9qeC40a2R2LmNvbS8/dXJsPSIsIm1vYmlsZSI6MX0sCiAgICAgICAgICAgICAgICB7Im5hbWUiOiI4MDkwIiwidXJsIjoiaHR0cHM6Ly93d3cuODA5MGcuY24vP3VybD0iLCJtb2JpbGUiOjB9CiAgICAgICAgICAgIF0KIAogICAgICAgIHZhciBrZXlDb2RlID0gWwogICAgICAgICAgICB7Y29kZTo0OCxpc1NoaWZ0OmZhbHNlLHZhbHVlOicwJ30sCiAgICAgICAgICAgIHtjb2RlOjQ4LGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonKSd9LAogICAgICAgICAgICB7Y29kZTo0OSxpc1NoaWZ0OmZhbHNlLHZhbHVlOicxJ30sCiAgICAgICAgICAgIHtjb2RlOjQ5LGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonISd9LAogICAgICAgICAgICB7Y29kZTo1MCxpc1NoaWZ0OmZhbHNlLHZhbHVlOicyJ30sCiAgICAgICAgICAgIHtjb2RlOjUwLGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonQCd9LAogICAgICAgICAgICB7Y29kZTo1MSxpc1NoaWZ0OmZhbHNlLHZhbHVlOiczJ30sCiAgICAgICAgICAgIHtjb2RlOjUxLGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonIyd9LAogICAgICAgICAgICB7Y29kZTo1Mixpc1NoaWZ0OmZhbHNlLHZhbHVlOic0J30sCiAgICAgICAgICAgIHtjb2RlOjUyLGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonJCd9LAogICAgICAgICAgICB7Y29kZTo1Myxpc1NoaWZ0OmZhbHNlLHZhbHVlOic1J30sCiAgICAgICAgICAgIHtjb2RlOjUzLGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonJSd9LAogICAgICAgICAgICB7Y29kZTo1NCxpc1NoaWZ0OmZhbHNlLHZhbHVlOic2J30sCiAgICAgICAgICAgIHtjb2RlOjU0LGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonXid9LAogICAgICAgICAgICB7Y29kZTo1NSxpc1NoaWZ0OmZhbHNlLHZhbHVlOic3J30sCiAgICAgICAgICAgIHtjb2RlOjU1LGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonJid9LAogICAgICAgICAgICB7Y29kZTo1Nixpc1NoaWZ0OmZhbHNlLHZhbHVlOic4J30sCiAgICAgICAgICAgIHtjb2RlOjU2LGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonKid9LAogICAgICAgICAgICB7Y29kZTo1Nyxpc1NoaWZ0OmZhbHNlLHZhbHVlOic5J30sCiAgICAgICAgICAgIHtjb2RlOjU3LGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonKCd9LAogICAgICAgICAgICB7Y29kZTo3MCxpc1NoaWZ0OmZhbHNlLHZhbHVlOidmJ30sCiAgICAgICAgICAgIHtjb2RlOjcwLGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonRid9LAogICAgICAgICAgICB7Y29kZTo3NCxpc1NoaWZ0OmZhbHNlLHZhbHVlOidqJ30sCiAgICAgICAgICAgIHtjb2RlOjc0LGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonSid9LAogICAgICAgICAgICB7Y29kZTo3NSxpc1NoaWZ0OmZhbHNlLHZhbHVlOidrJ30sCiAgICAgICAgICAgIHtjb2RlOjc1LGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonSyd9LAogICAgICAgICAgICB7Y29kZTo3Nixpc1NoaWZ0OmZhbHNlLHZhbHVlOidsJ30sCiAgICAgICAgICAgIHtjb2RlOjc2LGlzU2hpZnQ6dHJ1ZSx2YWx1ZTonTCd9LAogICAgICAgIF0KIAogICAgICAgIC8qLS1DbGFzcy0tKi8KICAgICAgICBjbGFzcyBCYXNlQ2xhc3N7CiAKICAgICAgICAgICAgY29uc3RydWN0b3IoKXsKIAogICAgICAgICAgICAgICAgaWYoR01fZ2V0VmFsdWUoJ2ljb25Qb3NpdGlvblNldFBhZ2UnKSAhPSAwKXsKICAgICAgICAgICAgICAgICAgICAvKmNvb2tpZeWtmOWCqAogICAgICAgICAgICAgICAgICAgIGljb25WaXBUb3AgPSB0aGlzLmdldENvb2tpZSgnaWNvblRvcCcpP3RoaXMuZ2V0Q29va2llKCdpY29uVG9wJyk6aWNvblZpcFRvcDsKIAogICAgICAgICAgICAgICAgICAgIGljb25WaXBQb3NpdGlvbiA9IHRoaXMuZ2V0Q29va2llKCdpY29uUG9zaXRpb24nKT90aGlzLmdldENvb2tpZSgnaWNvblBvc2l0aW9uJyk6aWNvblZpcFBvc2l0aW9uOwogCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMZWZ0ID0gaWNvblZpcFBvc2l0aW9uPT0nbGVmdCc/J3NlbGVjdGVkJzonJzsKIAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUmlnaHQgPSBpY29uVmlwUG9zaXRpb249PSdyaWdodCc/J3NlbGVjdGVkJzonJzsKIAogICAgICAgICAgICAgICAgICAgIGljb25WaXBXaWR0aCA9IHRoaXMuZ2V0Q29va2llKCdpY29uV2lkdGgnKT90aGlzLmdldENvb2tpZSgnaWNvbldpZHRoJyk6aWNvblZpcFdpZHRoOwogICAgICAgICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgICAgICAgICBpY29uVmlwVG9wID0gR01fZ2V0VmFsdWUoJ2ljb25Ub3AnKSB8fCBHTV9nZXRWYWx1ZSgnaWNvblRvcCcpID09IDA/R01fZ2V0VmFsdWUoJ2ljb25Ub3AnKTppY29uVmlwVG9wOwogCiAgICAgICAgICAgICAgICAgICAgaWNvblZpcFBvc2l0aW9uID0gR01fZ2V0VmFsdWUoJ2ljb25Qb3NpdGlvbicpP0dNX2dldFZhbHVlKCdpY29uUG9zaXRpb24nKTppY29uVmlwUG9zaXRpb247CiAKICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZExlZnQgPSBpY29uVmlwUG9zaXRpb249PSdsZWZ0Jz8nc2VsZWN0ZWQnOicnOwogCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSaWdodCA9IGljb25WaXBQb3NpdGlvbj09J3JpZ2h0Jz8nc2VsZWN0ZWQnOicnOwogCiAgICAgICAgICAgICAgICAgICAgaWNvblZpcFdpZHRoID0gR01fZ2V0VmFsdWUoJ2ljb25XaWR0aCcpP0dNX2dldFZhbHVlKCdpY29uV2lkdGgnKTppY29uVmlwV2lkdGg7CiAKICAgICAgICAgICAgICAgICAgICBpY29uV2FpdFRpbWUgPSBHTV9nZXRWYWx1ZSgnaWNvbldhaXRUaW1lJyk/R01fZ2V0VmFsdWUoJ2ljb25XYWl0VGltZScpKjEwMDA6aWNvbldhaXRUaW1lOwogCiAgICAgICAgICAgICAgICAgICAgaWNvblZpcE9wYWNpdHkgPSBHTV9nZXRWYWx1ZSgnaWNvbk9wYWNpdHknKSB8fCBHTV9nZXRWYWx1ZSgnaWNvbk9wYWNpdHknKSA9PSAwP0dNX2dldFZhbHVlKCdpY29uT3BhY2l0eScpOmljb25WaXBPcGFjaXR5OwogCiAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQoIuiuvue9riIsICgpID0+IHRoaXMubWVudVNldCgpKTsKIAogICAgICAgICAgICB9CiAKICAgICAgICAgICAgbWVudVNldCgpewogCiAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogCiAgICAgICAgICAgICAgICBsZXQgbWVudVNldFN0eWxlID0gYAogICAgICAgICAgICAgICAgICAgICAgICAuemhtTWFza3sKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHotaW5kZXg6OTk5OTk5OTk5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjojMDAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO3RvcDogMDtyaWdodDogMDtib3R0b206IDA7bGVmdDogMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6MC44OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC53cmFwLWJveHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHotaW5kZXg6MTAwMDAwMDAwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOmZpeGVkOzt0b3A6IDUwJTtsZWZ0OiA1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTIwMHB4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMDBweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNTU1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OmhpZGRlbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6MTZweCBudW1Gb250LFBpbmdGYW5nU0MtUmVndWxhcixUYWhvbWEsTWljcm9zb2Z0IFlhaGVpLHNhbnMtc2VyaWYgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OjQwMCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRXcmFwSGVhZHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6I2YyNDQ0MztoZWlnaHQ6NDBweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OjQwcHg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnNldFdyYXBMaXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjowcHg7cGFkZGluZzowcHg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnNldFdyYXBMaSBsaXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOjBweCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzoxMnB4IDIwcHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgLnNldFdyYXBMaUNvbnRlbnR7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRXcmFwU2F2ZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOmFic29sdXRlO3RvcDotMnB4O3JpZ2h0OjEwcHg7Zm9udC1zaXplOjI0cHg7Y3Vyc29yOnBvaW50ZXIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAuaWNvblNldEZvb3R7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MHB4O3BhZGRpbmc6MTBweCAyMHB4O3dpZHRoOjEwMCU7CiAgICAgICAgICAgICAgICAgICAgICAgIHotaW5kZXg6MTAwMDAwMDAwOTtiYWNrZ3JvdW5kOiNmZWY5ZWY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLmljb25TZXRGb290TGl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46MHB4O3BhZGRpbmc6MHB4OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgLmljb25TZXRGb290TGkgbGl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6MHB4IDJweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uU2V0Rm9vdExpIGxpIGF7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjojNTU1OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uU2V0Rm9vdExpIGE6aG92ZXIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6I2ZlNmQ3MzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAuaWNvblNldFBhZ2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6LWluZGV4OjEwMDAwMDAwMDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MHB4O2xlZnQ6MzAwcHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiNmZmY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDozMDBweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDoxMDAlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uU2V0VWxIZWFkewogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOjBweDsKICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOjBweDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAuaWNvblNldFBhZ2VIZWFkewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDo0MHB4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6NDBweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjojZmU2ZDczOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6I2ZmZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAuaWNvblNldFBhZ2VMaXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjowcHg7cGFkZGluZzowcHg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLmljb25TZXRQYWdlTGkgbGl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzo4cHggMjBweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnpoaWh1U2V0UGFnZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHotaW5kZXg6MTAwMDAwMDAwMjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MHB4O2xlZnQ6MzAwcHg7YmFja2dyb3VuZDojZmZmO3dpZHRoOjMwMHB4O2hlaWdodDoxMDAlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uU2V0UGFnZUlucHV0ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O2p1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC56aGlodVNldFBhZ2VMaXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjowcHg7cGFkZGluZzowcHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6MjU4cHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAuemhpaHVTZXRQYWdlQ29udGVudHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgIC5jaXJjdWxhcnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiA0MHB4O2hlaWdodDogMjBweDtib3JkZXItcmFkaXVzOiAxNnB4O3RyYW5zaXRpb246IC4zcztjdXJzb3I6IHBvaW50ZXI7Ym94LXNoYWRvdzogMCAwIDNweCAjOTk5IGluc2V0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC5yb3VuZC1idXR0b257CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjBweDtoZWlnaHQ6IDIwcHg7O2JvcmRlci1yYWRpdXM6IDUwJTtib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwuNSk7dHJhbnNpdGlvbjogLjNzO3Bvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAuYmFja3sKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogc29saWQgI0ZGRjsgYm9yZGVyLXdpZHRoOiAwIDNweCAzcHggMDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nOiAzcHg7dHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKTsgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKTttYXJnaW4tbGVmdDoxMHB4O2N1cnNvcjpwb2ludGVyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC50by1yaWdodHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OjIwcHg7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZzogM3B4O3RyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTtjdXJzb3I6cG9pbnRlcjsKIAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uU2V0U2F2ZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZToyNHB4O2N1cnNvcjpwb2ludGVyO21hcmdpbi1yaWdodDo1cHg7bWFyZ2luLWJvdHRvbTo0cHg7Y29sb3I6I0ZGRjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAuemhtX3NldF9wYWdlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgei1pbmRleDoxMDAwMDAwMDAzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6MHB4O2xlZnQ6MzAwcHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiNmZmY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDozMDBweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDoxMDAlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC56aG1fc2V0X3BhZ2VfaGVhZGVyewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDo0MHB4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6NDBweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjojZmU2ZDczOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6I2ZmZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAuemhtX3NldF9wYWdlX2NvbnRlbnR7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnpobV9zZXRfcGFnZV9saXN0ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOjBweDtwYWRkaW5nOjBweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjIwcHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAuemhtX3NldF9wYWdlX2xpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q5rua5Yqo5p2h5pW05L2T5qC35byPKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoIDogMHB4OyAgLyrpq5jlrr3liIbliKvlr7nlupTmqKrnq5bmu5rliqjmnaHnmoTlsLrlr7gqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnpobV9zZXRfcGFnZV9saXN0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKua7muWKqOadoemHjOmdouWwj+aWueWdlyovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzICAgOiAycHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmU2ZDczOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC56aG1fc2V0X3BhZ2VfbGlzdDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyrmu5rliqjmnaHph4zpnaLovajpgZMqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdyAgIDogaW5zZXQgMCAwIDVweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kICAgOiAjZWRlZGVkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAuemhtX3NldF9wYWdlX2xpc3QgbGl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmJvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2M7Ki8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6MTJweCAyMHB4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTpibG9jazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbGk6bGFzdC1jaGlsZHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206bm9uZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAuemhtX3Njcm9sbHsKICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnpobV9zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q5rua5Yqo5p2h5pW05L2T5qC35byPKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoIDogMHB4OyAgLyrpq5jlrr3liIbliKvlr7nlupTmqKrnq5bmu5rliqjmnaHnmoTlsLrlr7gqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnpobV9zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q5rua5Yqo5p2h6YeM6Z2i5bCP5pa55Z2XKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXMgICA6IDJweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZTZkNzM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnpobV9zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q5rua5Yqo5p2h6YeM6Z2i6L2o6YGTKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3cgICA6IGluc2V0IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCAgIDogI2VkZWRlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLyotZm9ybS0qLwogICAgICAgICAgICAgICAgICAgICAgICA6cm9vdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWJhc2UtY29sb3I6ICM0MzRhNTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdoaXRlLWNvbG9yLXByaW1hcnk6ICNmN2Y4Zjg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdoaXRlLWNvbG9yLXNlY29uZGFyeTogI2ZlZmVmZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZ3JheS1jb2xvci1wcmltYXJ5OiAjYzJjMmMyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1ncmF5LWNvbG9yLXNlY29uZGFyeTogI2MyYzJjMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZ3JheS1jb2xvci10ZXJ0aWFyeTogIzY3NmY3OTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tYWN0aXZlLWNvbG9yOiAjMjI3YzlkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS12YWxpZC1jb2xvcjogI2MyYzJjMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW52YWxpZC1jb2xvcjogI2Y3MmY0NzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW52YWxpZC1pY29uOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyNCUyMDI0JTIyJTNFJTIwJTNDcGF0aCUyMGQlM0QlMjJNMTMuNDElMjAxMmw0LjMtNC4yOWExJTIwMSUyMDAlMjAxJTIwMC0xLjQyLTEuNDJMMTIlMjAxMC41OWwtNC4yOS00LjNhMSUyMDElMjAwJTIwMCUyMDAtMS40MiUyMDEuNDJsNC4zJTIwNC4yOS00LjMlMjA0LjI5YTElMjAxJTIwMCUyMDAlMjAwJTIwMCUyMDEuNDIlMjAxJTIwMSUyMDAlMjAwJTIwMCUyMDEuNDIlMjAwbDQuMjktNC4zJTIwNC4yOSUyMDQuM2ExJTIwMSUyMDAlMjAwJTIwMCUyMDEuNDIlMjAwJTIwMSUyMDElMjAwJTIwMCUyMDAlMjAwLTEuNDJ6JTIyJTIwZmlsbCUzRCUyMiUyM2Y3MmY0NyUyMiUyMCUyRiUzRSUzQyUyRnN2ZyUzRSIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC50ZXh0LWlucHV0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OjBweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQtaW5wdXRfX2JvZHkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZ3JheS1jb2xvci1wcmltYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMS43ZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMS43OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJweCAxZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOjU1JTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZToxNHB4OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC50ZXh0LWlucHV0X19ib2R5Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tZ3JheS1jb2xvci1zZWNvbmRhcnkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC50ZXh0LWlucHV0X19ib2R5OjotbW96LXBsYWNlaG9sZGVyIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmF5LWNvbG9yLXNlY29uZGFyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQtaW5wdXRfX2JvZHk6OnBsYWNlaG9sZGVyIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmF5LWNvbG9yLXNlY29uZGFyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgKiwgOjphZnRlciwgOjpiZWZvcmUgewogICAgICAgICAgICAgICAgICAgICAgICBib3gtc2l6aW5nOiBpbml0aWFsICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQtaW5wdXRfX2JvZHlbZGF0YS1pcy12YWxpZF0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMWVtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC50ZXh0LWlucHV0X19ib2R5W2RhdGEtaXMtdmFsaWQ9dHJ1ZV0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS12YWxpZC1jb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQtaW5wdXRfX2JvZHlbZGF0YS1pcy12YWxpZD1mYWxzZV0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbnZhbGlkLWNvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCB2YXIoLS1pbnZhbGlkLWNvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAudGV4dC1pbnB1dF9fYm9keTpmb2N1cyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWFjdGl2ZS1jb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggdmFyKC0tYWN0aXZlLWNvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQtaW5wdXRfX2JvZHk6LXdlYmtpdC1hdXRvZmlsbCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiA5OTk5czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3I7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQtaW5wdXRfX3ZhbGlkYXRvciB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAwLjVlbSBjZW50ZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxLjVlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHotaW5kZXg6IC0xOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC50ZXh0LWlucHV0X19ib2R5W2RhdGEtaXMtdmFsaWQ9ZmFsc2VdICsgLnRleHQtaW5wdXRfX3ZhbGlkYXRvciB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB2YXIoLS1pbnZhbGlkLWljb24pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC5zZWxlY3QtYm94IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGluaGVyaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuNXMgZWFzZS1vdXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDo5MHB4OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC5zZWxlY3QtYm94OjphZnRlciB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWdyYXktY29sb3Itc2Vjb25kYXJ5KSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDZweCA0cHggMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvIDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAtNzJweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgei1pbmRleDogMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAuc2VsZWN0LWJveF9fYm9keSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3gtc2l6aW5nOiBpbmhlcml0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZ3JheS1jb2xvci1wcmltYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMS43ZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMS43OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDFlbSArIDE2cHgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDE0MCU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6MTRweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOjJweDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOjJweDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAuc2VsZWN0LWJveF9fYm9keVtkYXRhLWlzLXZhbGlkPXRydWVdIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tdmFsaWQtY29sb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHZhcigtLXZhbGlkLWNvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAuc2VsZWN0LWJveF9fYm9keVtkYXRhLWlzLXZhbGlkPWZhbHNlXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWludmFsaWQtY29sb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHZhcigtLWludmFsaWQtY29sb3IpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC5zZWxlY3QtYm94X19ib2R5LmZvY3VzLXZpc2libGUgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY3RpdmUtY29sb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHZhcigtLWFjdGl2ZS1jb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC5zZWxlY3QtYm94X19ib2R5Oi13ZWJraXQtYXV0b2ZpbGwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogOTk5OXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC50ZXh0YXJlYV9fYm9keSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlOiBub25lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ncmF5LWNvbG9yLXByaW1hcnkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiBpbmhlcml0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC41cyBlYXNlLW91dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAudGV4dGFyZWFfX2JvZHk6b25seS1jaGlsZCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemU6IHZlcnRpY2FsOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC50ZXh0YXJlYV9fYm9keTpmb2N1cyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWFjdGl2ZS1jb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggdmFyKC0tYWN0aXZlLWNvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnRleHRhcmVhX19ib2R5W2RhdGEtaXMtdmFsaWQ9dHJ1ZV0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS12YWxpZC1jb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggdmFyKC0tdmFsaWQtY29sb3IpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC50ZXh0YXJlYV9fYm9keVtkYXRhLWlzLXZhbGlkPWZhbHNlXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWludmFsaWQtY29sb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHZhcigtLWludmFsaWQtY29sb3IpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgLnRleHRhcmVhIC5fZHVtbXktYm94IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDI0MHB4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLnRvTGVmdE1vdmV7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaW1hdGlvbjptb3ZlVG9MZWZ0IDAuNXMgaW5maW5pdGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjptb3ZlVG9MZWZ0IDAuNXMgaW5maW5pdGU7IC8qU2FmYXJpIGFuZCBDaHJvbWUqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDoxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICBAa2V5ZnJhbWVzIG1vdmVUb0xlZnR7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHtsZWZ0OjIwMHB4O30KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHtsZWZ0OjBweDt9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbW92ZVRvTGVmdCAvKlNhZmFyaSBhbmQgQ2hyb21lKi97CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHtsZWZ0OjIwMHB4O30KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHtsZWZ0OjBweDt9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAudG9SaWdodE1vdmV7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaW1hdGlvbjptb3ZlVG9SaWdodCAycyBpbmZpbml0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOm1vdmVUb1JpZ2h0IDJzIGluZmluaXRlOyAvKlNhZmFyaSBhbmQgQ2hyb21lKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6MTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIEBrZXlmcmFtZXMgbW92ZVRvUmlnaHR7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHtsZWZ0OjBweDt9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB7bGVmdDoyMDAwcHg7fQogICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIG1vdmVUb1JpZ2h0IC8qU2FmYXJpIGFuZCBDaHJvbWUqL3sKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20ge2xlZnQ6MHB4O30KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHtsZWZ0OjIwMHB4O30KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGA7CiAKICAgICAgICAgICAgICAgIGRvbVN0eWxlIC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZW51U2V0U3R5bGUpKTsKIAogICAgICAgICAgICAgICAgZG9tSGVhZC5hcHBlbmRDaGlsZChkb21TdHlsZSk7CiAKICAgICAgICAgICAgICAgIHZhciBzZXRMaXN0SnNvbj0gWwogICAgICAgICAgICAgICAgICAgIHsnbGlzdE5hbWUnOmxhbmcuaWNvblBvc2l0aW9uLCdzZXRMaXN0SUQnOidpY29uUG9zaXRpb25TZXRQYWdlJywnc2V0UGFnZUlEJzonbW92aWVJY29uU2V0UGFnZScsJ3Rha2VQbGFjZSc6JzBweCd9LAogICAgICAgICAgICAgICAgICAgIHsnbGlzdE5hbWUnOmxhbmcucGxheVZpZGVvLCdzZXRMaXN0SUQnOidtb3ZpZUxpc3QnLCdzZXRQYWdlSUQnOidtb3ZpZVZpZGVvU2V0UGFnZScsJ3Rha2VQbGFjZSc6JzBweCd9LAogICAgICAgICAgICAgICAgXTsKIAogICAgICAgICAgICAgICAgdmFyIHpoaWh1T3B0aW9uSnNvbiA9IFsKICAgICAgICAgICAgICAgICAgICB7J29wdGlvbk5hbWUnOmxhbmcuemhWaWRlb0Nsb3NlLCdvcHRpb25JRCc6J3JlbW92ZVZpZGVvJywnZGVmYXVsdCc6JzAnfSwKICAgICAgICAgICAgICAgICAgICB7J29wdGlvbk5hbWUnOmxhbmcuemhWaWRlb0Rvd25sb2FkLCdvcHRpb25JRCc6J2Rvd25sb2FkVmlkZW8nLCdkZWZhdWx0JzonMjInfSwKICAgICAgICAgICAgICAgICAgICB7J29wdGlvbk5hbWUnOmxhbmcuemhBRENsb3NlLCdvcHRpb25JRCc6J3JlbW92ZUFEJywnZGVmYXVsdCc6JzIyJ30sCiAgICAgICAgICAgICAgICAgICAgeydvcHRpb25OYW1lJzpsYW5nLnpoQ2xvc2VMZWZ0LCdvcHRpb25JRCc6J3JlbW92ZVJpZ2h0JywnZGVmYXVsdCc6JzAnfSwKICAgICAgICAgICAgICAgICAgICB7J29wdGlvbk5hbWUnOmxhbmcuemhDaGFuZ2VMaW5rLCdvcHRpb25JRCc6J2NoYW5nZUxpbmsnLCdkZWZhdWx0JzonMjInfSwKICAgICAgICAgICAgICAgICAgICB7J29wdGlvbk5hbWUnOmxhbmcuc3BlY2lhbENvbHVtbiwnb3B0aW9uSUQnOidzcGVjaWFsQ29sdW1uJywnZGVmYXVsdCc6MjJ9LAogICAgICAgICAgICAgICAgICAgIHsnb3B0aW9uTmFtZSc6bGFuZy52aWRlb1RpdGxlLCdvcHRpb25JRCc6J3ZpZGVvVGl0bGUnLCdkZWZhdWx0JzoyMn0sCiAgICAgICAgICAgICAgICAgICAgeydvcHRpb25OYW1lJzpsYW5nLnpoS2V5d29yZENsb3NlLCdvcHRpb25JRCc6J3JlbW92ZUtleXdvcmQnLCdkZWZhdWx0JzonMCd9LAogICAgICAgICAgICAgICAgICAgIHsnb3B0aW9uTmFtZSc6bGFuZy5hdXRob3JOYW1lQ2xvc2UsJ29wdGlvbklEJzoncmVtb3ZlQXV0aG9yTmFtZScsJ2RlZmF1bHQnOjIyfSwKICAgICAgICAgICAgICAgICAgICB7J29wdGlvbk5hbWUnOmxhbmcueWFueHVhbkNsb3NlLCdvcHRpb25JRCc6J3JlbW92ZVlhbnh1YW4nLCdkZWZhdWx0JzonMCd9CiAgICAgICAgICAgICAgICBdOwogCiAgICAgICAgICAgICAgICB2YXIgcGxheVZpZGVvT3B0aW9uSnNvbiA9ewogICAgICAgICAgICAgICAgICAgICdvcHRpb25OYW1lJzpsYW5nLnBsYXlWaWRlb0xpbmVBZGQsCiAgICAgICAgICAgICAgICAgICAgJ29wdGlvbklEJzondmlkZW9QbGF5TGluZUFkZCcsCiAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHQnOnZpZGVvUGxheUxpbmVBZGQsCiAgICAgICAgICAgICAgICAgICAgJ3RleHRhcmVhJzondmlkZW9QbGF5TGluZUFkZFRleHRhcmVhJywKICAgICAgICAgICAgICAgICAgICAndGV4dGFyZWFJZCc6J3BsYXlWaWRlb0xpbmVUZXh0YXJlYScsCiAgICAgICAgICAgICAgICAgICAgJ3RpcCc6CmDnuq/lh4AxLGh0dHBzOi8vaW0xOTA3LnRvcC8/ang9CkLnq5kxLGh0dHBzOi8vanguanNvbnBsYXllci5jb20vcGxheWVyLz91cmw9CueIseixhixodHRwczovL2p4LmFpZG91ZXIubmV0Lz91cmw9CkJMLGh0dHBzOi8vdmlwLmJsamlleC5jb20vP3Y9CuWGsOixhixodHRwczovL2FwaS5xaWFucWkubmV0L3ZpcC8/dXJsPQrnmb7ln58saHR0cHM6Ly9qeC42MThnLmNvbS8/dXJsPQpDSyxodHRwczovL3d3dy5ja3BsYXllci52aXAvamlleGkvP3VybD0KQ0hvayxodHRwczovL3d3dy5nYWk0LmNvbS8/dXJsPQpja21vdixodHRwczovL3d3dy5ja21vdi52aXAvYXBpLnBocD91cmw9Ckg4LGh0dHBzOi8vd3d3Lmg4anguY29tL2ppZXhpLnBocD91cmw9CkpZLGh0dHBzOi8vangucGxheWVyankuY29tLz91cmw9Cuino+aekCxodHRwczovL2NrbW92LmNjeWpqZC5jb20vY2ttb3YvP3VybD0K6Kej5p6QbGEsaHR0cHM6Ly9hcGkuamlleGkubGEvP3VybD0K6ICB5p2/LGh0dHBzOi8vdmlwLmxhb2JhbmRxLmNvbS9qaWV4aS5waHA/dXJsPQpNQU8saHR0cHM6Ly93d3cubXRvc3ouY29tL20zdTgucGhwP3VybD0KTTNVOCxodHRwczovL2p4Lm0zdTgudHYvamlleGkvP3VybD0K6K+66K6vLGh0dHBzOi8vd3d3Lm54Zmx2LmNvbS8/dXJsPQpPSyxodHRwczovL29ranguY2MvP3VybD0KUE0saHR0cHM6Ly93d3cucGxheW0zdTguY24vamlleGkucGhwP3VybD0K55uY5Y+kLGh0dHBzOi8vd3d3LnBhbmd1amlleGkuY2MvamlleGkucGhwP3VybD0K5LiD5ZOlLGh0dHBzOi8vangubm54di5jbi90di5waHA/dXJsPQpSREhLLGh0dHBzOi8vangucmRoay5uZXQvP3Y9CuS6uuS6uui/tyxodHRwczovL2p4LmJsYm8uY2M6NDQzMy8/dXJsPQrmgJ3kupEsaHR0cHM6Ly9qeC5hcDJwLmNuLz91cmw9CuaAneWPpDMsaHR0cHM6Ly9qc2FwLmF0dGFraWRzLmNvbS8/dXJsPQrlkKzkuZAsaHR0cHM6Ly9qeC5kajZ1LmNvbS8/dXJsPQrnu7TlpJosaHR0cHM6Ly9qeC5pdml0by5jbi8/dXJsPQromb7nsbMsaHR0cHM6Ly9qeC54bWZsdi5jb20vP3VybD0KWVQsaHR0cHM6Ly9qeC55YW5ndHUudG9wLz91cmw9CuS6keerryxodHRwczovL3NiLjVnc2VvLm5ldC8/dXJsPQrkupHmnpAsaHR0cHM6Ly9qeC55cGFyc2UuY29tL2luZGV4LnBocD91cmw9CjA1MjMsaHR0cHM6Ly9nby55aDA1MjMuY24veS5jeT91cmw9CjE35LqRLGh0dHBzOi8vd3d3LjE3MTd5dW4uY29tL2p4L3R5LnBocD91cmw9CjE4MCxodHRwczovL2p4LjAwMDE4MC50b3AvangvP3VybD0KNEssaHR0cHM6Ly9qeC40a2R2LmNvbS8/dXJsPQo4MDkwLGh0dHBzOi8vd3d3LjgwOTBnLmNuLz91cmw9YCwKIAogICAgICAgICAgICAgICAgICAgICAndmFsdWVOYW1lJzoncGxheVZpZGVvTGluZVRleHQnfQogCiAgICAgICAgICAgICAgICB2YXIgc2V0SHRtbCA9ICI8ZGl2IGlkPSdzZXRNYXNrJyBjbGFzcz0nemhtTWFzayc+PC9kaXY+IjsKIAogICAgICAgICAgICAgICAgc2V0SHRtbCArPSI8ZGl2IGNsYXNzPSd3cmFwLWJveCcgaWQ9J3NldFdyYXAnPiI7CiAKICAgICAgICAgICAgICAgIHNldEh0bWwgKz0iPGRpdiBjbGFzcz0naWNvblNldFBhZ2UnIGlkPSdtb3ZpZUljb25TZXRQYWdlJz4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9Ijx1bCBjbGFzcz0naWNvblNldFVsSGVhZCc+PGxpIGNsYXNzPSdpY29uU2V0UGFnZUhlYWQnPjxzcGFuIGNsYXNzPSdiYWNrJz48L3NwYW4+PHNwYW4+IitsYW5nLmljb25Qb3NpdGlvbisiPC9zcGFuPjxzcGFuIGNsYXNzPSdpY29uU2V0U2F2ZSc+w5c8L3NwYW4+PC9saT48L3VsPiI7CiAKICAgICAgICAgICAgICAgIHNldEh0bWwgKz0iPHVsIGNsYXNzPSdpY29uU2V0UGFnZUxpJz4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxsaT4iK2xhbmcuaWNvbkhlaWdodCsi77yaPHNwYW4gY2xhc3M9J3RleHQtaW5wdXQnPjxpbnB1dCBjbGFzcz0ndGV4dC1pbnB1dF9fYm9keScgaWQ9J2ljb25Ub3AnIHZhbHVlPSciK2ljb25WaXBUb3ArIicgcGxhY2Vob2xkZXI9JyIrbGFuZy50aXBJY29uSGVpZ2h0KyInPjxzcGFuIGNsYXNzPSd0ZXh0LWlucHV0X192YWxpZGF0b3InPjwvc3Bhbj48L3NwYW4+PC9saT4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9ICI8bGkgIHN0eWxlPSdkaXNwbGF5OiBpbmxpbmUtZmxleDsnPjxzcGFuIHN0eWxlPSdwYWRkaW5nLXRvcDo0cHg7Jz4iK2xhbmcuaWNvbkxpbmUrIu+8mjwvc3Bhbj48ZGl2IGNsYXNzPSdzZWxlY3QtYm94Jz48c2VsZWN0IGNsYXNzPSdzZWxlY3QtYm94X19ib2R5JyBpZD0naWNvblBvc2l0aW9uJz4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxvcHRpb24gdmFsdWU9J2xlZnQnICIrc2VsZWN0ZWRMZWZ0KyI+IitsYW5nLmljb25MZWZ0KyI8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdyaWdodCcgIitzZWxlY3RlZFJpZ2h0KyI+IitsYW5nLmljb25SaWdodCsiPC9vcHRpb24+IjsKIAogICAgICAgICAgICAgICAgc2V0SHRtbCArPSI8L3NlbGVjdD48L2Rpdj48L2xpPiIKIAogICAgICAgICAgICAgICAgc2V0SHRtbCArPSI8bGk+IitsYW5nLmljb25XaWR0aCsi77yaPHNwYW4gY2xhc3M9J3RleHQtaW5wdXQnPjxpbnB1dCBjbGFzcz0ndGV4dC1pbnB1dF9fYm9keScgaWQ9J2ljb25XaWR0aCcgdmFsdWU9JyIraWNvblZpcFdpZHRoKyInIHBsYWNlaG9sZGVyPSciK2xhbmcudGlwSWNvbldpZHRoKyInPjxzcGFuIGNsYXNzPSd0ZXh0LWlucHV0X192YWxpZGF0b3InPjwvc3Bhbj48L3NwYW4+PC9saT4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9ICI8bGkgIHN0eWxlPSdkaXNwbGF5OiBpbmxpbmUtZmxleDsnPjxzcGFuIHN0eWxlPSdwYWRkaW5nLXRvcDo0cHg7Jz4iK2xhbmcuaWNvbldhaXRUaW1lKyLvvJo8L3NwYW4+PGRpdiBjbGFzcz0nc2VsZWN0LWJveCc+PHNlbGVjdCBjbGFzcz0nc2VsZWN0LWJveF9fYm9keScgaWQ9J2ljb25XYWl0VGltZSc+IjsKIAogICAgICAgICAgICAgICAgZm9yKGxldCBpID0xO2k8PTg7aSsrKXsKIAogICAgICAgICAgICAgICAgICAgIGxldCBpY29uU2VsZWN0ZWQgPSBHTV9nZXRWYWx1ZSgnaWNvbldhaXRUaW1lJyk9PWkvMj8nc2VsZWN0ZWQnOicnOwogCiAgICAgICAgICAgICAgICAgICAgc2V0SHRtbCArPSI8b3B0aW9uIHZhbHVlPSIraS8yKyIgIitpY29uU2VsZWN0ZWQrIj4iK2kvMisi56eSPC9vcHRpb24+IjsKIAogICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9Ijwvc2VsZWN0PjwvZGl2PjwvbGk+IjsKIAogICAgICAgICAgICAgICAgc2V0SHRtbCArPSI8bGk+6YCPIOaYjiDluqYg77yaPHNwYW4gY2xhc3M9J3RleHQtaW5wdXQnPjxpbnB1dCBjbGFzcz0ndGV4dC1pbnB1dF9fYm9keScgaWQ9J2ljb25PcGFjaXR5JyB2YWx1ZT0nIitpY29uVmlwT3BhY2l0eSsiJyBwbGFjZWhvbGRlcj0nIitsYW5nLnRpcEljb25PcGFjaXR5KyInPjwvc3Bhbj48L2xpPiI7CiAKICAgICAgICAgICAgICAgIHNldEh0bWwgKz0iPC91bD48L2Rpdj4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxkaXYgY2xhc3M9J3pobV9zZXRfcGFnZScgaWQ9J21vdmllVmlkZW9TZXRQYWdlJz4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9Ijx1bCBjbGFzcz0naWNvblNldFVsSGVhZCc+PGxpIGNsYXNzPSd6aG1fc2V0X3BhZ2VfaGVhZGVyJz48c3BhbiBjbGFzcz0nYmFjayc+PC9zcGFuPjxzcGFuPiIrbGFuZy5zZXRQbGF5VmlkZW8rIjwvc3Bhbj48c3BhbiAgY2xhc3M9J2ljb25TZXRTYXZlJz7DlzwvbGk+PC91bD4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9Ijx1bCBjbGFzcz0nemhtX3NldF9wYWdlX2xpc3QnIHN0eWxlPSdvdmVyZmxvdy15OnVuc2V0Jz4iOwogCiAgICAgICAgICAgICAgICBsZXQgYmFja0NvbG9yLHN3aXRjaEJhY2tDb3Jsb3IsZGlzcGxheTsKIAogICAgICAgICAgICAgICAgbGV0IG9wdGlvblZhbHVlID0gR01fZ2V0VmFsdWUocGxheVZpZGVvT3B0aW9uSnNvbi5vcHRpb25JRCxwbGF5VmlkZW9PcHRpb25Kc29uLmRlZmF1bHQpOwogCiAgICAgICAgICAgICAgICBpZihvcHRpb25WYWx1ZSAhPSAnMjInKXsKIAogICAgICAgICAgICAgICAgICAgIGJhY2tDb2xvciA9ICcjZmZmJzsKIAogICAgICAgICAgICAgICAgICAgIHN3aXRjaEJhY2tDb3Jsb3IgPSAnI0ZGRic7CiAKICAgICAgICAgICAgICAgIH1lbHNlewogCiAgICAgICAgICAgICAgICAgICAgYmFja0NvbG9yID0gJyNmZTZkNzMnOwogCiAgICAgICAgICAgICAgICAgICAgc3dpdGNoQmFja0NvcmxvciA9ICcjRkZFNUU1JzsKIAogICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxsaT4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxkaXYgY2xhc3M9J3pobV9zZXRfcGFnZV9jb250ZW50Jz4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9ICI8c3BhbiBjbGFzcz0ncGxheVZpZGVvT3B0aW9uTmFtZSc+IitwbGF5VmlkZW9PcHRpb25Kc29uLm9wdGlvbk5hbWUrIjwvc3Bhbj4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxkaXYgY2xhc3M9J2NpcmN1bGFyJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiK3N3aXRjaEJhY2tDb3Jsb3IrIicgaWQ9JyIrcGxheVZpZGVvT3B0aW9uSnNvbi5vcHRpb25JRCsiJz4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxkaXYgY2xhc3M9J3JvdW5kLWJ1dHRvbicgc3R5bGU9J2JhY2tncm91bmQ6ICIrYmFja0NvbG9yKyI7IGxlZnQ6ICIrb3B0aW9uVmFsdWUrInB4Oyc+PC9kaXY+IjsKIAogICAgICAgICAgICAgICAgc2V0SHRtbCArPSAiPC9kaXY+PC9kaXY+IjsKIAogICAgICAgICAgICAgICAgc2V0SHRtbCs9IjwvbGk+PGxpPiI7CiAKICAgICAgICAgICAgICAgIHNldEh0bWwgKz0iPGRpdj7op6PmnpDnur/ot688L2Rpdj4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxkaXYgY2xhc3M9J2Zvcm1fX3RleHRhcmVhJz4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxkaXYgY2xhc3M9J3RleHRhcmVhIGpzLWZsZXhpYmxlLXRleHRhcmVhJyBzdHlsZT0ncGFkZGluZzogNXB4IDBweDsnIGlkPSciK3BsYXlWaWRlb09wdGlvbkpzb24udGV4dGFyZWErIic+IjsKIAogICAgICAgICAgICAgICAgc2V0SHRtbCArPSI8dGV4dGFyZWEgcm93cz0nOScgY2xhc3M9J3RleHRhcmVhX19ib2R5IHpobV9zY3JvbGwnIHBsYWNlaG9sZGVyPSciK2xhbmcudGlwUGxheVZpZGVvTGluZUFkZCsiJyBzdHlsZT0nd2lkdGg6MjUwcHg7Zm9udC1zaXplOjEycHg7cGFkZGluZzo0cHg7cmVzaXplOm5vbmU7JyBpZD0nIitwbGF5VmlkZW9PcHRpb25Kc29uLnRleHRhcmVhSWQrIic+IitHTV9nZXRWYWx1ZShwbGF5VmlkZW9PcHRpb25Kc29uLnZhbHVlTmFtZSxwbGF5VmlkZW9PcHRpb25Kc29uLnRpcCkrIjwvdGV4dGFyZWE+IjsKIAogICAgICAgICAgICAgICAgc2V0SHRtbCArPSI8L2Rpdj48L2Rpdj48L2xpPiI7CiAKICAgICAgICAgICAgICAgIHNldEh0bWwgKz0iPC91bD4iCiAKICAgICAgICAgICAgICAgIHNldEh0bWwgKz0iPC9kaXY+IgogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9Ijx1bCBjbGFzcz0naWNvblNldFVsSGVhZCc+PGxpIGNsYXNzPSdpY29uU2V0UGFnZUhlYWQnPjxzcGFuPjwvc3Bhbj48c3Bhbj4iK2xhbmcuc2V0KyI8L3NwYW4+PHNwYW4gY2xhc3M9J2ljb25TZXRTYXZlJz7Dlzwvc3Bhbj48L2xpPjwvdWw+IjsKIAogICAgICAgICAgICAgICAgc2V0SHRtbCArPSI8dWwgY2xhc3M9J3NldFdyYXBMaSc+IjsKIAogICAgICAgICAgICAgICAgZm9yKHZhciBzZXROPTA7c2V0TjxzZXRMaXN0SnNvbi5sZW5ndGg7c2V0TisrKXsKIAogICAgICAgICAgICAgICAgICAgIHZhciBsaXN0VmFsdWUgPSBHTV9nZXRWYWx1ZShzZXRMaXN0SnNvbltzZXROXS5zZXRMaXN0SUQsJzIyJyk7CiAKICAgICAgICAgICAgICAgICAgICBsZXQgYmFja0NvbG9yLGFycm93Q29sb3Isc3dpdGNoQmFja0NvcmxvcjsKIAogICAgICAgICAgICAgICAgICAgIGlmKGxpc3RWYWx1ZSAhPSAyMil7CiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tDb2xvciA9ICcjZmZmJzsKICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dDb2xvcj0gJyNFRUUnOwogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hCYWNrQ29ybG9yID0gJyNGRkYnOwogCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tDb2xvciA9ICcjZmU2ZDczJzsKICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dDb2xvciA9ICcjQ0NDJzsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoQmFja0NvcmxvciA9ICcjRkZFNUU1JzsKICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICBpZihzZXRMaXN0SnNvbltzZXROXS5zZXRQYWdlSUQgPT0gJycpewogICAgICAgICAgICAgICAgICAgICAgICBhcnJvd0NvbG9yID0gJyNFRUUnOwogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgc2V0SHRtbCArPSI8bGk+PHNwYW4+IitzZXRMaXN0SnNvbltzZXROXS5saXN0TmFtZSsiPC9zcGFuPiI7CiAKICAgICAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxkaXYgY2xhc3M9J3NldFdyYXBMaUNvbnRlbnQnPiI7CiAKICAgICAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxkaXYgY2xhc3M9J2NpcmN1bGFyJyBpZD0nIitzZXRMaXN0SnNvbltzZXROXS5zZXRMaXN0SUQrIicgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6ICIrc3dpdGNoQmFja0NvcmxvcisiOyc+PGRpdiBjbGFzcz0ncm91bmQtYnV0dG9uJyBzdHlsZT0nYmFja2dyb3VuZDogIitiYWNrQ29sb3IrIjtsZWZ0OiAiK2xpc3RWYWx1ZSsicHgnPjwvZGl2PjwvZGl2PiI7CiAKICAgICAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxzcGFuIGNsYXNzPSd0by1yaWdodCcgZGF0YT0nIitzZXRMaXN0SnNvbltzZXROXS5zZXRQYWdlSUQrIicgdGFrZVBsYWNlPSciK3NldExpc3RKc29uW3NldE5dLnRha2VQbGFjZSsiJyBzdHlsZT0nYm9yZGVyOiBzb2xpZCAiK2Fycm93Q29sb3IrIjsgYm9yZGVyLXdpZHRoOiAwIDNweCAzcHggMDsnPjwvc3Bhbj48L2Rpdj48L2xpPiI7CiAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgIHNldEh0bWwgKz0iPC91bD4iOwogCiAgICAgICAgICAgICAgICBzZXRIdG1sICs9IjxkaXYgc3R5bGU9J2hlaWdodDo0MHB4OycgaWQ9J3pobVRha2VQbGFjZSc+PC9kaXY+IjsKIAogICAgICAgICAgICAgICAgc2V0SHRtbCArPSI8ZGl2IGNsYXNzPSdpY29uU2V0Rm9vdCcgc3R5bGU9Jyc+IjsKIAogICAgICAgICAgICAgICAgc2V0SHRtbCArPSI8dWwgY2xhc3M9J2ljb25TZXRGb290TGknPiI7CiAKICAgICAgICAgICAgICAgIHNldEh0bWwgKz0iPGxpPjwvbGk+IjsKIAogICAgICAgICAgICAgICAgc2V0SHRtbCArPSc8L3VsPic7CiAKICAgICAgICAgICAgICAgIHNldEh0bWwgKz0nPC9kaXY+JzsKIAogICAgICAgICAgICAgICAgc2V0SHRtbCArPSAiPC9kaXY+IjsKIAogICAgICAgICAgICAgICAgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NldE1hc2snKSkgcmV0dXJuOwogCiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUVsZW1lbnQoJ2RpdicsJ3pobU1lbnUnKTsKIAogICAgICAgICAgICAgICAgbGV0IHpobU1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnemhtTWVudScpOwogCiAgICAgICAgICAgICAgICB6aG1NZW51LmlubmVySFRNTCA9IHNldEh0bWw7CiAKICAgICAgICAgICAgICAgIGxldCB0aW1lclpobUljb24gPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogCiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN6aG1NZW51JykpewogCiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJaaG1JY29uKTsgLy8g5Y+W5raI5a6a5pe25ZmoCiAKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNpcmN1bGFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNpcmN1bGFyJyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgY2lyY3VsYXIuZm9yRWFjaChmdW5jdGlvbihpdGVtKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKF9lKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25TdHlsZSA9IGl0ZW0uY2hpbGRyZW5bMF0uc3R5bGU7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGVmdCA9IGJ1dHRvblN0eWxlLmxlZnQ7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcGFyc2VJbnQobGVmdCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdExlZnRWYWx1ZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxlZnQ9PTApewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlLmxlZnQgPSAnMjJweCc7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uU3R5bGUuYmFja2dyb3VuZCA9ICcjZmU2ZDczJzsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLmJhY2tncm91bmQ9JyNmZkU1RTUnOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGl0ZW0ubmV4dFNpYmxpbmcgJiYgaXRlbS5uZXh0U2libGluZy5nZXRBdHRyaWJ1dGUoJ2RhdGEnKSl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubmV4dFNpYmxpbmcuc2V0QXR0cmlidXRlKCdzdHlsZScsJ2JvcmRlcjogc29saWQgI2NjYztib3JkZXItd2lkdGg6IDAgM3B4IDNweCAwOycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0TGVmdFZhbHVlID0gMjI7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25TdHlsZS5sZWZ0ID0gJzBweCc7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uU3R5bGUuYmFja2dyb3VuZCA9ICcjZmZmJzsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLmJhY2tncm91bmQ9JyNmZmYnOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGl0ZW0ubmV4dFNpYmxpbmcpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm5leHRTaWJsaW5nLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCdib3JkZXI6IHNvbGlkICNFRUU7Ym9yZGVyLXdpZHRoOiAwIDNweCAzcHggMDsnKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0TGVmdFZhbHVlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2V0TGlzdElEID0gaXRlbS5pZDsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKHNldExpc3RJRCxsaXN0TGVmdFZhbHVlKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKIAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9SaWdodCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50by1yaWdodCcpOwogCiAgICAgICAgICAgICAgICAgICAgICAgIHRvUmlnaHQuZm9yRWFjaChmdW5jdGlvbihpdGVtKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxlZnQgPSBpdGVtLnByZXZpb3VzU2libGluZy5jaGlsZHJlblswXS5zdHlsZS5sZWZ0OwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHBhcnNlSW50KGxlZnQpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGVmdCAhPSAyMikgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNldFBhZ2VJRCA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdkYXRhJyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFnZUlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2V0UGFnZUlEKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJZC5jbGFzc05hbWU9J2ljb25TZXRQYWdlIHRvTGVmdE1vdmUnOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy/lrp7ml7blm77moIfpq5jluqYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzZXRQYWdlSUQgPT0gJ21vdmllSWNvblNldFBhZ2UnKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjaWNvblRvcCcpLnZhbHVlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN6aG1sb2dvIikub2Zmc2V0VG9wOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN6aG1UYWtlUGxhY2UnKS5zdHlsZT0iaGVpZ2h0OjIwMHB4IjsKIAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0UGFnZUlEID09ICdtb3ZpZVZpZGVvU2V0UGFnZScpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN6aG1UYWtlUGxhY2UnKS5zdHlsZT0iaGVpZ2h0OjIwMHB4IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhzZXRQYWdlSUQpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogCiAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvQmFjayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYWNrJyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgdG9CYWNrLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnREb20gPSBpdGVtLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50RG9tLmNsYXNzTmFtZT0naWNvblNldFBhZ2UgdG9SaWdodE1vdmUnOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3pobVRha2VQbGFjZScpLnN0eWxlPSdoZWlnaHQ6NDBweDsnCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAKICAgICAgICAgICAgICAgICAgICAgICAgfSkKIAogICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2V0U2F2ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pY29uU2V0U2F2ZScpOwogCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNhdmUuZm9yRWFjaChmdW5jdGlvbihpdGVtKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsKCk9PnsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpY29uVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ljb25Ub3AnKS52YWx1ZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpY29uT3BhY2l0eT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWNvbk9wYWNpdHknKS52YWx1ZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpY29uUG9zaXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWNvblBvc2l0aW9uJykudmFsdWU7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWNvbldpZHRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ljb25XaWR0aCcpLnZhbHVlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGljb25XYWl0VGltZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpY29uV2FpdFRpbWUnKS52YWx1ZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwbGF5VmlkZW9MaW5lVGV4dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwbGF5VmlkZW9MaW5lVGV4dGFyZWEnKS52YWx1ZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwbGF5VmlkZW9MaW5lTGVmdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN2aWRlb1BsYXlMaW5lQWRkJykuY2hpbGRyZW5bMF0uc3R5bGUubGVmdDsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGljb25Ub3AgIT0gJycpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEoLyheWzAtOV1bMC05XXswLDJ9JCkvLnRlc3QoaWNvblRvcCkpKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQobGFuZy50aXBFcnJvckljb25IZWlnaHQpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL190aGlzLnNldENvb2tpZSgnaWNvblRvcCcsaWNvblRvcCwzMCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoJ2ljb25Ub3AnLGljb25Ub3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGljb25PcGFjaXR5ICE9ICcnKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighKC9eKD86MHxbMS05XVswLTldP3wxMDApJC8udGVzdChpY29uT3BhY2l0eSkpKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQobGFuZy50aXBFcnJvckljb25PcGFjaXR5KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9fdGhpcy5zZXRDb29raWUoJ2ljb25Ub3AnLGljb25Ub3AsMzApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KGljb25PcGFjaXR5KTtyZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCdpY29uT3BhY2l0eScsaWNvbk9wYWNpdHkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGljb25Qb3NpdGlvbiAhPSAnJyl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9fdGhpcy5zZXRDb29raWUoJ2ljb25Qb3NpdGlvbicsaWNvblBvc2l0aW9uLDMwKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgnaWNvblBvc2l0aW9uJyxpY29uUG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGljb25XYWl0VGltZSAhPSAnJyl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoJ2ljb25XYWl0VGltZScsaWNvbldhaXRUaW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpY29uV2lkdGggIT0nJyl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoISgvKF4oWzEtOV1bMC05XT8pJCkvLnRlc3QoaWNvbldpZHRoKSkpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChsYW5nLnRpcEVycm9ySWNvbldpZHRoKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9fdGhpcy5zZXRDb29raWUoJ2ljb25XaWR0aCcsaWNvbldpZHRoLDMwKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgnaWNvbldpZHRoJyxpY29uV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEdNX2dldFZhbHVlKCd2aWRlb1BsYXlMaW5lQWRkJykgPT0gMjIpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHBsYXlWaWRlb0xpbmVUZXh0KXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmVPYmogPSBfdGhpcy5nZXRMaW5lKHBsYXlWaWRlb0xpbmVUZXh0KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGluZU9iai5sZW5ndGg+MCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgncGxheVZpZGVvTGluZVRleHQnLHBsYXlWaWRlb0xpbmVUZXh0KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ+e6v+i3r+i+k+WFpeS4jeato+ehricpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoJ3BsYXlWaWRlb0xpbmVUZXh0JywnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCdwbGF5VmlkZW9MaW5lVGV4dCcscGxheVZpZGVvTGluZVRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpc3RvcnkuZ28oMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICB9KQogCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpY29uVG9wJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyxmdW5jdGlvbigpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWNvblRvcCA9IHRoaXMudmFsdWU7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEoLyheWzEtOV1cZCokKS8udGVzdChpY29uVG9wKSkpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtdmFsaWQnLCdmYWxzZScpCiAKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZGF0YS1pcy12YWxpZCcsJ3RydWUnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgICAgICAgICAgICAgfSkKIAogICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWNvbldpZHRoJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyxmdW5jdGlvbigpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWNvbldpZHRoID0gdGhpcy52YWx1ZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoISgvKF5bMS05XVxkKiQpLy50ZXN0KGljb25XaWR0aCkpKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLWlzLXZhbGlkJywnZmFsc2UnKQogCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtdmFsaWQnLCd0cnVlJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgIC8v6IW+6K6v6KeG6aKR5b+r5o236ZSu5Yay56qBCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvdXBvblVybC5tYXRjaCgvdlwucXFcLmNvbVwveFwvY292ZXIvKSl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhZGRMaW5lVGV4dCA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3BsYXlWaWRlb0xpbmVUZXh0YXJlYScpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRMaW5lVGV4dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxmdW5jdGlvbihlKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGFydFBvcyA9IGFkZExpbmVUZXh0LnNlbGVjdGlvblN0YXJ0OwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVuZFBvcyA9IGFkZExpbmVUZXh0LnNlbGVjdGlvbkVuZDsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFBvcyA9PT0gdW5kZWZpbmVkIHx8IGVuZFBvcyA9PT0gdW5kZWZpbmVkKSByZXR1cm47CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb2RlLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZS5rZXlDb2RlID09IGl0ZW0uY29kZSAmJiBlLnNoaWZ0S2V5PT1pdGVtLmlzU2hpZnQpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dFZhbHVlID0gYWRkTGluZVRleHQudmFsdWU7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGFydFZhbHVlID0gdGV4dFZhbHVlLnN1YnN0cmluZygwLHN0YXJ0UG9zKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVuZFZhbHVlID0gdGV4dFZhbHVlLnN1YnN0cmluZyhzdGFydFBvcyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbGxWYWx1ZSA9IHN0YXJ0VmFsdWUraXRlbS52YWx1ZStlbmRWYWx1ZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTGluZVRleHQudmFsdWU9YWxsVmFsdWU7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZExpbmVUZXh0LnNlbGVjdGlvblN0YXJ0ID0gc3RhcnRQb3MrMTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTGluZVRleHQuc2VsZWN0aW9uRW5kID0gZW5kUG9zKzE7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgIH0pCiAKICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICBjcmVhdGVFbGVtZW50KGRvbSxkb21JZCl7CiAKICAgICAgICAgICAgICAgIHZhciByb290RWxlbWVudCA9IGRvY3VtZW50LmJvZHk7CiAKICAgICAgICAgICAgICAgIHZhciBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChkb20pOwogCiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmlkID0gZG9tSWQ7CiAKICAgICAgICAgICAgICAgIHZhciBuZXdFbGVtZW50SHRtbENvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7CiAKICAgICAgICAgICAgICAgIHJvb3RFbGVtZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpOwogCiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnRIdG1sQ29udGVudCk7CiAKICAgICAgICAgICAgfQogCiAgICAgICAgICAgIHJlcXVlc3QobWV0aG9kLHVybCxkYXRhLGlzQ29va2llPScnKXsKIAogICAgICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKIAogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9PnsKIAogICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVxdWVzdC5yZWFkeVN0YXRlPT00KXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVxdWVzdC5zdGF0dXM9PTIwMCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxdWVzdC5zdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lm9wZW4obWV0aG9kLHVybCk7CiAgICAgICAgICAgICAgICAgICAgLy9yZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgaWYoaXNDb29raWUpewogICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOwogICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VuZChkYXRhKTsKIAogICAgICAgICAgICAgICAgfSkKIAogICAgICAgICAgICB9CiAKICAgICAgICAgICAgc2V0Q29va2llKGNuYW1lLGN2YWx1ZSxleGRheXMpewogCiAgICAgICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKCk7CiAKICAgICAgICAgICAgICAgIGQuc2V0VGltZShkLmdldFRpbWUoKSsoZXhkYXlzKjI0KjYwKjYwKjEwMDApKTsKIAogICAgICAgICAgICAgICAgdmFyIGV4cGlyZXMgPSAiZXhwaXJlcz0iK2QudG9HTVRTdHJpbmcoKTsKIAogICAgICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY25hbWUrIj0iK2N2YWx1ZSsiOyAiK2V4cGlyZXM7CiAgICAgICAgICAgIH0KIAogICAgICAgICAgICBnZXRDb29raWUoY25hbWUpewogICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBjbmFtZSArICI9IjsKICAgICAgICAgICAgICAgIHZhciBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOwogICAgICAgICAgICAgICAgZm9yKHZhciBpPTA7IGk8Y2EubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGNhW2ldLnRyaW0oKTsKICAgICAgICAgICAgICAgICAgICBpZiAoYy5pbmRleE9mKG5hbWUpPT0wKSB7IHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCxjLmxlbmd0aCk7IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogCiAgICAgICAgICAgIGdldFF1ZXJ5U3RyaW5nKGUpIHsKICAgICAgICAgICAgICAgIHZhciB0ID0gbmV3IFJlZ0V4cCgiKF58JikiICsgZSArICI9KFteJl0qKSgmfCQpIik7CiAgICAgICAgICAgICAgICB2YXIgYSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyKDEpLm1hdGNoKHQpOwogICAgICAgICAgICAgICAgaWYgKGEgIT0gbnVsbCkgcmV0dXJuIGFbMl07CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KIAogICAgICAgICAgICBnZXRVcmxQYXJhbXModXJsKXsKICAgICAgICAgICAgICAgIGxldCByZWcgPSAvKFtePyYrI10rKT0oW14/JisjXSspL2c7CiAgICAgICAgICAgICAgICBsZXQgb2JqPXt9OwogICAgICAgICAgICAgICAgdXJsLnJlcGxhY2UocmVnLChyZXMsJDEsJDIpPT57b2JqWyQxXT0kMn0pOwogICAgICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICAgICAgfQogCiAgICAgICAgICAgIGdldExpbmUodGV4dCl7CiAKICAgICAgICAgICAgICAgIGxldCB0ZXh0QXJyID0gdGV4dC5zcGxpdCgnXG4nKTsKIAogICAgICAgICAgICAgICAgaWYodGV4dEFyci5sZW5ndGggPiAwKXsKIAogICAgICAgICAgICAgICAgICAgIGxldCBsaW5lT2JqID0gW107CiAKICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2ggPSAvXiguKykoaHR0cHM/OlwvXC8uKykkLzsKIAogICAgICAgICAgICAgICAgICAgIHRleHRBcnIuZm9yRWFjaChmdW5jdGlvbihpdGVtKXsKIAogICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5yZXBsYWNlKC9ccyosKi9nLCcnKTsKIAogICAgICAgICAgICAgICAgICAgICAgICBpZighaXRlbSkgcmV0dXJuIHRydWU7CiAKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmVNYXRjaCA9IGl0ZW0ubWF0Y2gobWF0Y2gpOwogCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxpbmVNYXRjaCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPYmoucHVzaCh7J25hbWUnOmxpbmVNYXRjaFsxXS5zdWJzdHJpbmcoMCw0KSwndXJsJzpsaW5lTWF0Y2hbMl19KTsKIAogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU9iaj1bXTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5lT2JqOwogCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9hbGzlj4LmlbDpu5jorqTnqbrvvIzmmK/nnJ/ml7bov5Tlm57kuLrmlbDnu4QKICAgICAgICAgICAgc3RhdGljIGdldEVsZW1lbnQoY3NzLGFsbD0nJyl7CiAKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSxyZWplY3QpPT57CiAKICAgICAgICAgICAgICAgICAgICBsZXQgbnVtID0gMDsKIAogICAgICAgICAgICAgICAgICAgIGxldCB0aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgbnVtKysKIAogICAgICAgICAgICAgICAgICAgICAgICBsZXQgZG9tOwogCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFsbCA9PSBmYWxzZSl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY3NzKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZG9tKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkb20pOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZG9tLmxlbmd0aD4wKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkb20pOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTIwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgIH0sMzAwKQogCiAgICAgICAgICAgICAgICAgICAgfSkKIAogCiAgICAgICAgICAgIH0KIAogICAgICAgICAgICBzdGF0aWMgdG9hc3QobXNnLGR1cmF0aW9uKXsKIAogICAgICAgICAgICAgICAgZHVyYXRpb249aXNOYU4oZHVyYXRpb24pPzMwMDA6ZHVyYXRpb247CiAKICAgICAgICAgICAgICAgIGxldCB0b2FzdERvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogCiAgICAgICAgICAgICAgICB0b2FzdERvbS5pbm5lckhUTUwgPSBtc2c7CiAKICAgICAgICAgICAgICAgIC8vdG9hc3REb20uc3R5bGUuY3NzVGV4dD0id2lkdGg6IDYwJTttaW4td2lkdGg6IDE1MHB4O29wYWNpdHk6IDAuNztoZWlnaHQ6IDMwcHg7Y29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTtsaW5lLWhlaWdodDogMzBweDt0ZXh0LWFsaWduOiBjZW50ZXI7Ym9yZGVyLXJhZGl1czogNXB4O3Bvc2l0aW9uOiBmaXhlZDt0b3A6IDQwJTtsZWZ0OiAyMCU7ei1pbmRleDogOTk5OTk5O2JhY2tncm91bmQ6IHJnYigwLCAwLCAwKTtmb250LXNpemU6IDEycHg7IjsKICAgICAgICAgICAgICAgIHRvYXN0RG9tLnN0eWxlLmNzc1RleHQ9J3BhZGRpbmc6MnB4IDE1cHg7bWluLWhlaWdodDogMzZweDtsaW5lLWhlaWdodDogMzZweDt0ZXh0LWFsaWduOiBjZW50ZXI7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSk7Ym9yZGVyLXJhZGl1czogNHB4O2NvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7cG9zaXRpb246IGZpeGVkO3RvcDogNTAlO2xlZnQ6IDUwJTt6LWluZGV4OiA5OTk5OTk5O2JhY2tncm91bmQ6IHJnYigwLCAwLCAwKTtmb250LXNpemU6IDE2cHg7JwogCiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvYXN0RG9tKTsKIAogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKIAogICAgICAgICAgICAgICAgICAgIHZhciBkID0gMC41OwogCiAgICAgICAgICAgICAgICAgICAgdG9hc3REb20uc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgZCArICdzIGVhc2UtaW4sIG9wYWNpdHkgJyArIGQgKyAncyBlYXNlLWluJzsKIAogICAgICAgICAgICAgICAgICAgIHRvYXN0RG9tLnN0eWxlLm9wYWNpdHkgPSAnMCc7CiAKICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRvYXN0RG9tKSB9LCBkICogMTAwMCk7CiAKICAgICAgICAgICAgICAgIH0sIGR1cmF0aW9uKTsKIAogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vY3JlYXRlIHpobUxvZ29JY29uCiAgICAgICAgICAgIHpobUxvZ28oKXsKIAogICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogCiAgICAgICAgICAgICAgIGxldCBzb3J0RGl2ID0gaWNvblZpcFBvc2l0aW9uPT0nbGVmdCc/J3Jvdyc6J3Jvdy1yZXZlcnNlJzsKIAogICAgICAgICAgICAgICBsZXQgcGxheVZpZGVvU3R5bGUgPSBgCiAgICAgICAgICAgICAgIC56aG1fcGxheV92aWRvZV9pY29uewogICAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDoycHg7CiAgICAgICAgICAgICAgICAgIGN1cnNvcjpwb2ludGVyOwogICAgICAgICAgICAgICAgICB6LWluZGV4Ojk5OTk5OTsKICAgICAgICAgICAgICAgICAgcG9zaXRpb246Zml4ZWQ7JHtpY29uVmlwUG9zaXRpb259OjVweDt0b3A6JHtpY29uVmlwVG9wfXB4OwogICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjsKICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6dmlzaWJsZTsKICAgICAgICAgICAgICAgICAgZGlzcGxheTpmbGV4OwogICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjoke3NvcnREaXZ9OwogICAgICAgICAgICAgICAgICB3aWR0aDphdXRvOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIC56aG1fcGxheV92aWRlb193cmFwewogICAgICAgICAgICAgICAgICB6LWluZGV4Ojk5OTk5OTk7CiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICAgICAgICAgIHdpZHRoOjMwMHB4OwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIC5pY29uTG9nb3sKICAgICAgICAgICAgICAgb3BhY2l0eToke2ljb25WaXBPcGFjaXR5LzEwMH07CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgLnpobV9wbGF5X3ZpZGVvX2xpbmV7CiAgICAgICAgICAgICAgICAgIHdpZHRoOjMyMHB4OwogICAgICAgICAgICAgICAgICBoZWlnaHQ6MzE2cHg7CiAgICAgICAgICAgICAgICAgIG92ZXJmbG93LXk6c2Nyb2xsOwogICAgICAgICAgICAgICAgICBvdmVyZmxvdy14OmhpZGRlbjsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAuemhtX3BsYXlfdmlkZV9saW5lX3VsewogICAgICAgICAgICAgICAgICB3aWR0aDozMDBweDsKICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgICAgICAgICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwOwogICAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lOwogICAgICAgICAgICAgICAgICBwYWRkaW5nOjBweDsKICAgICAgICAgICAgICAgICAgbWFyZ2luOjBweDsKIAogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIC56aG1fcGxheV92aWRlb19saW5lX3VsX2xpewogICAgICAgICAgICAgICAgICBwYWRkaW5nOjRweCAwcHg7CiAgICAgICAgICAgICAgICAgIG1hcmdpbjoycHg7CiAgICAgICAgICAgICAgICAgIHdpZHRoOjMwJTsKICAgICAgICAgICAgICAgICAgY29sb3I6I0ZGRjsKICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7CiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6I2YyNDQ0MzsKICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzowcHggMHB4IDEwcHggI2ZmZjsKICAgICAgICAgICAgICAgICAgZm9udC1zaXplOjE0cHg7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgLnpobV9wbGF5X3ZpZGVvX2xpbmVfdWxfbGk6aG92ZXJ7CiAgICAgICAgICAgICAgICAgIGNvbG9yOiMyNjAwMzM7CiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6I2ZjYzBjMAogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIC56aG1fbGluZV9zZWxlY3RlZHsKICAgICAgICAgICAgICAgICAgY29sb3I6IzI2MDAzMzsKICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjojZmNjMGMwCiAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAuemhtX3BsYXlfdmlkZW9fanh7CiAgICAgICAgICAgICAgICAgIHdpZHRoOjEwMCU7CiAgICAgICAgICAgICAgICAgIGhlaWdodDoxMDAlOwogICAgICAgICAgICAgICAgICB6LWluZGV4Ojk5OTk5OTsKICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO3RvcDowcHg7cGFkZGluZzowcHg7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgYDsKIAogICAgICAgICAgICAgICAgZG9tU3R5bGUgLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBsYXlWaWRlb1N0eWxlKSk7CiAKICAgICAgICAgICAgICAgIGRvbUhlYWQuYXBwZW5kQ2hpbGQoZG9tU3R5bGUpOwogCiAgICAgICAgICAgICAgICBsZXQgcGxheVdyYXBIdG1sID0gIjxkaXYgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApJyB0YXJnZXQ9J19ibGFuaycgc3R5bGU9JycgY2xhc3M9J3BsYXlCdXR0b24gemhtX3BsYXlfdmlkb2VfaWNvbicgaWQ9J3pobWxvZ28nPiI7CiAKICAgICAgICAgICAgICAgIHBsYXlXcmFwSHRtbCArPSAiPGltZyBjbGFzcz0naWNvbkxvZ28nIHN0eWxlPSd3aWR0aDoiK2ljb25WaXBXaWR0aCsicHg7aGVpZ2h0OiIraWNvblZpcFdpZHRoKjEuNSsicHgnIHNyYz0nZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoWkFDV0FQY0FBUEpFUS92Nytmbkx5UGpDd2ZSblpmblQwUEpLU2ZqR3hQdjI5UG5ZMS9OYld2djE4L2FVay9ybDQvcnc3dm5LeVBhSmlQcnI2ZmFhbVBSeWNmYUxpdnY1OS9KSlNQcnY3Zk5WVlBuZTNmcnQ2L05RVC92NitQZWxwUGFnbnZSM2R2aTZ1UHZ6OGZleHIvbk96UGVnbnZyazR2UjFjL0pHUmZycTZQblF6dmpDd1BuUzBQbloxL3Z3N3ZuYTJmZW9wL2VtcGZyYzJ2TlVVL2l4ci9SNGR2V0poL2VzcXZKSFJ2dng3L3J5OGZOU1VmTldWUGpCd1BWNmVmYU1pdm5mM2ZpOHV2V0RndnY0OXZycDZQcnk4UEpQVHZhWWwvblQwZm5XMVBlcnFmUnNhL1J2YnZXQWYvVjlmUG5rNHZpMnRmUmpZZlJoWC92dTdQTllWL0pGUlBuazRmYUhoZmFYbHZ2MzlmcmgzL2k3dXZuTnkvbk95L3JzNnZlcnF2UmdYdm5kMi9hR2hQV1JrUFYvZmZyaTRQcmo0UGl3cmZuTHlmYVVrdlJmWGZKTlRQakZ3L2V5c2ZSbFkvUnhjUHZ2N2ZlenN2aTBzdnYyOC9hYm12ZXFxUGVwcVBKTVMvZXlzUFdPamZOZFhQUnpjdnYwOHZSdWJmcm81dmVpb2ZlbG8vTlpXUG5aMlBOcGFQblUwdlJmWHZuSHhmaXVyUGpBdi9uUXpmcm41Zm5jMi9lMHN2YWRuUGU0dC9hU2tmTlhWdlJtWlBldHF2blkxdmk4dS9laW9QaXRxL2kvdmZSd2IvUjFkUG5lM1BhZW5mYWNtdmUzdHZuUnovcmo0ZmFYbGZWK2ZQV0ZoUEpMU3ZhTmkvV01qUFIwYy9hVmsvV1BqL2FkbS9ycDUvbkl4dlJvWnZSaVlmakR3dmFWbFBKT1RmZTJ0Zk5xYWZKUlVQZWtvdmFhbWZOYVdmVjhldm5kM1BuTnpQblYxUGVzcS9qRXcvVjZlUFIzZC9uZzN2cnc3ZmFXbFBlbnBmYWZuZldQanZpd3J2TldWZm5NeXZpNnVmVi9mdlY5ZS9uYjJ2cnU2L1JrWXZqQXZ2bkl4ZlJpWVBpOXZQZWduL1Y3ZWZlam9mZTF0UFdDZ2ZybTVQSklSL25jMnZOY1cvSlFUL2pGeFB2eThQV0RnZldCZi9Sc2JQVjVkL05wYWZOY1hQbmYzdmFJaHZSdmIvaXZyZm5YMXZOUlVmYUtpZlJ0YlBhWmwvTmVYUGU1dVBXQ2dQUnJhdmFJaC9Ob1ovbkp4L1dGZy9pOXUvUjJkZmpIeHZqSXh2TlRVdmkvdnZlMXMvTmVYUUFBQUFBQUFBQUFBQUFBQUNIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaCtRUUVsZ0FBQUN3QUFBQUFaQUNXQUFBSS9nQUJDQnhJc0tEQmd3Z1RLbHpJc0tIRGh4QWpTcHhJc2FMRml4Z3phdHpJc2FQSGp5QkRpbHhJWUVTQUFDTUlqRnhwVUlXREFBNVVlRmpJNHVUSkJDeHpDc3hoazhpUWhUWnQ2c3lwd2FhR0RBc0hCT1V4bE9VTEpDV1F2S2l4Y0FPREFRTVliR2k2VWtHUEdqMFVHT0JLdHF6WnMyalRxbDNMdHFNQ0UwMU1pSzFLWXNRSUVsczdmbUZDYTlFV0Y0a1FoQ2lUUW9VSVRVelNmT3lRZ2tXS0RrR1NMdFdvQTlpdVpVRXphdzRnQlpxVklodFIyRVNCVTZGbWpEUU9DZG5NZWpNQ0xSTXlMckM1NEFMTm9LVXBqbkhSdW5mclR2VXVucG05NE1FZmtnTWNYQmlnY3VJbDNyNmpzejZqb0tJSkNSNGttTmd4RWtNajN5WG8vbWtDSmFpV0JUVmY5RmlaTTZsRWJ3U29UclE5eUVzSzZ3cXFTT1Z4S01OV2tqZXN1ZERjZkFCY1F3ZHJmVndoQTBVV2hJSElaa0wwUXFBYUsyem1pUTgzWkFURkVab1ZNaDhHeW1pR0FDVVdjRVRGRlFnRTlVQkVCbUNnQUFaak1VUUFDU1FNcUpBTVpXam1nbUlmZlpIQVNRdVVFaEVFSWp3aEFnUTJIbVJEVURZc3BBWjBRZDFSWWtnbmlNRkFGQkxGWUZNTVFDejBrazIySlhUQ2c1bWhRWllkVnBCangwSnkwQlptUWs0RVZZVkNkV1RHUVRwa0VWSlVBQzZBbHRBUE5tV2l3a0lRZkhrQkJBbjFZcWNWWmZrUnBVSSt4QUZFSEQ0bzBSQUJTUmFrQTRCQmpXSldCNW5GaHBBQlUwUXhSWXdZM1pHWkxtZmxzWnBOL21WTXVWSWJIQVNWaGF4bE1aTFpLVG1sRUJRSHNhUjFRb2cyOVNIZlNLVmtac1phNm1SR2dVWVRpR3BRQVVHOTRlZENPcGdVZ2hldmdMUkZVQzRjdEFRREhqQ3dCSGNLRlhxU0E0Z1N4RWVaRHVrVDFES09ITXVSSGtGcGNKQkxNTW0wVUp3MnpVa1FIRUYxZ2VwQ2Uyam1TekllTldOVE93ZnhkSkpQWGdiMUpnQVdoQkFVTUErMWxnSXpISjFReHhhYnJHblFuZ0VjdGRDU05pVkJrRGRCVlhBdFE3V3l4Z0VuaitUMFZGUlR5Y2dBQTBrU2JGTXJFRlhnMng2VW1DeVNWMkROUlZFV1FUSDZrTkhScFRJS0ZRUWFoRUZtR0JRZFZDRzV0QWFHR3hqOXNVQUZqSHlFVEZCbFJQVHFTUzhBRUVZZnJSVkNTRVZ1Qk1XSC9rZWJCQVdDMjBIVklaQW93bWk4V1FVaTRETlJuVGI1NGRGM05xVU5FUlpCMFVIUUk1elVyQmtPYytEYVVOODJIVVBRVzB6UTRIUkNCQ2dWQUhNRERSS1VPeEdsYUpQbEJjWERJV3NOaEFGUktFRU5RaEJqMkJ3QjJXMDI1UWExVFpaQ0pQdEpMaDlValRXdFNmS09RKy9hMUFCQm9wMUVHbENaRFJSQlVLekVIcFFYQ1Zrd2grR2JIVkxkUWxFRUpRVkJFZ2RBc1VLcW44U1VRTFBaVkV0RStaOUV2a0lZV0lUbU1vT0ZEbUF0SVlDSUdVSHVRUng3ekVRaFZzR0tWZ1pDdFpNc0NDSUpzd21yR0FJSlg3RW1FamY2RlVHdWs1M3RVQVFIUWNsR1JOQVhBQkE2QkJudTBVd0lGSktIb09EQUk5azdTUnRXR0JRWE5xUUovbVRZVEFRVVFvQ2dKTUlqaWdoS09YaG9rMG8wQkFwY2FNMnpFb0tKb0lEQkkydUlXa1NTYUJOYUxFUUdkNmhnWnNoQWc0V0lJU2lxOEVnbGdrS0NpRGpDSmlFb1J2bU1nTUxONE1BSUdWcUlJWUxpeElHMDZFVUhRNGhWN0RKQmdad2lLRVNMU0Nnc1lZaTdJV1FNTWRSTUJkaWdBNGQ4eXlaaUlBaVJqSVFreWRqa2ZnQVFSRkM0Y1VDTmRMQTFYSURDUTA2d3ZBQklDd0JhT2dtWHVCZVVnZHlBY2pZUlJFUzZZUWx6cUpJZ01vRERBSU5DaGpGRTVCSkJRUUN1MmdTa2l4MmtKc1VqeUNWUDBzYUg0TUVtQ0pBanhpVEFRaHZpVVNLT3NvazhDaExMQU15U2lLcGozVUErZ1J1SVNDSW93Z0FBRXlLWm1VbFdjaUowL3JQSkZRcXl5U05sNmlIdEN3cVdISUt5QUJqRGc1dEpaVVVtOEt1Y0VlU1BNTG9JbEFLd0xJZDBRVHJGdk1naGdzSUZrVndUanRxd3FHL3VtTWVLUUNJelBoQ0pLRmo0UDRaODd6NlV6RWdXYldLd2tZREtKaFVJbjB0Wm85Q00wQ0F6UnNqSWpHcDBFQjMwTHdBcGFFaU94bWhNalZpZ0FVRnBRU0FGTW9FcmVPQUtFMEJYUWxoMmtpWVpaQmFaK1FSRDJPRE5rbVlrR0puSjVFSFd3Sk1jck9HQkNmblNTWndwRUFNa0lwazdWSWdhZGhHQUJjRGhuaHRSd2dCdllhK0N4RzkrY0pJVFFxb1lsQkxNYkNpeThFUm05b2FRSEc0dlhZWnExMEhJR3BSdGtLVUlnY2dNTVJUU2dTUDhRSGlSWVVpMEZtS0JjV1NHRjAwcC9rTFlncUlJenhWRUFUUUlndW1tV2hGbVpBWVBRNUhCTFRJVEFoNXhKUmFaWVlkTzBuQThuT3JCTEFleXlUbDB3b1J1QmtCM1pzbGhBTmJCRW5UQVFqTWNtT0pIVnFzUVpBWUZFQU1SQnl5a0VBRUdtTlVpSjZBQXA0S0NCWVk1QkxlNlBSMUMxQVVUelJyRURMMFR5QTNtMEVwZk5PRWlGaGdHVkRYVGhWY3k1QVdtUFVMUEZBS3drd2pNSUNld2owMWNBUUFsZ0lFMUs4Q0RMQ1R5RFROb1dET0l1T0JEVUtZeWhjZzFBSFFWQ0dOdDhnVmlERk9TQW1DQUc5UWdwbWZBZ3hPcGFBMENORkhLaHh6Mkp3cmhhZ0NhWjVCRlJQV2wwamtKQjdMZ2pFbk1vQVBCb01ZYUFvSEwzbENISXZ6NmhiOUlRcU4vQXVBR2RleE4vak15RU9VMjg4a1dGaG1YQjlCd0xveEl3emVlZUM0QWFHQU1OL2NtQlQwZ0VBaUVUS0tDRUdBV0gvYnpTVFNRaEM5a3pRQVoxTXdJOXBPUU5IeGlFbUFRbzJZVzRJSmppR0VWaFowUEtEYURBdXc2eEFMaEFNYzhob0VLQ1pDQ0NXNUFiOVlPZ29aNm1xRmJzeTRJUkhscjZIUm1xZzBWRE1RcWNuMFFIeFJKQkpVaTNrME80Z2doQ01FVlJTYjJRQUIxRWtIUlVpalNqZ2d6K3hwamd0UXZBS0RNdGtQS2VjNkVESElFaFJTM1EvclpTWFYvWk5mdWpyZTg1MDN2ZWsvazNPbTJkMEZJcUIydEl1VGI0ZGIzUUliVFZ3RWN4elRkTTRnQUhzRHdCNGhYSVJSbytBTUdJSkJvYU9IaVdnaHFRV0FnY1ltcm9BTWdsMGovL21xajdBRGtoaUJRWGwxRHZvMFVBRkRMSmdkUXVIUWkwSW1ISzhTeUp6OUk2azZpem9KOCszbzd0Y25mWEI2VW1CZEVBRzd1eEFjWXdoakhETzhpRk1qTTBoWHlBYWtMNU9Vbk1UcEJrTzdtQ0V3OUlXK0ppMzRyMGdLL0xXVFFObWs1MFdFdWN6OFBzU2tWaXFaQ2ZpVDBnV0E5QUZvZkNOZFBJb0NDVUdBR0NXaGxBSWF1RXdra2N5R3QvUHJkOHk2UXZRZWc3d2Y1UUN2ZlBwU3kyd1FHQ1lGQlVDaS85cXkzbmU4Sk1YeFF2bzZSb1pwWklIRS95UW9Ta25xVjI3M29uMys4UWxxSmVZUXdMU3k4SG9pU3ZYb1F6ZHVrQlFteC9Fa2V2dmpZUXg0aEN6NUo3USt5TTZsUXhjVVdtMzFRYkM2UXFOdUU4NTNIdS9FVi9wTDhBQ3ovWkVaUk8wSXFISUFMSDRUdVBEL0l0eWxPa09JZlBTakhQd2p0RTNKa1FtVldJVE1JQ3RBTHdtYWJTS0FnN3JkMThCZDZ6cElRWVRabUMwRmVpRGQ2QlZGMXZ6Y3RzUGQrTmhGL0JaRnkyRmNRY2tabi9vWVI2RGQ0QlpGL05yRjZBQmlCQWppQkJ6RUQ5Q1I3WkFHQ3kwWVFIZmgvSThoMkVuZ1NKU0J4a2xBQ3dvZE5wRGNVRG5nU0NGQVF5d044RUNpREplaG1NRmdXL2FkOEF5RjZMUmlEbmplRDBvRUFNekJlRHBZUWFLZDZBOUY2VXppRVQxaUV2b0VBSzdDRG8xSXFwOElRL01VdUROR0RBVUI1VVBhREJ4R0FlaGRWRFRDSGRKZ0JBdkI5REJFcGs1SnNGS1pZREpHRUFmQXMxdGVFVHFoOVVFaUIvaFJCYlFGZ2JkQUhKZzF4aFNvSGlWdkloWWJvaFlnNEVkdEdja2tXRkV3R2NVR0JGSUNZRUhEWWVBT0lFZVRXSldSR1ZBNlJjZ0N3UE9KWGlJd0hBSTUzaVJMQmJxZG5FZC9XZW9SSGliRTRpeGtCYng4eGlKb2hocTlIaEhGb2d1cVdjbW1uRUtNb2k2VW9ibzVYZDZKSWdzY0lldXJHaE5QSGpOUklpc2c0RktuekVqM1hFRG00aGd2UmpMNklFZnhtUWdvQlRZVElFSzNuZXROb2pOeG9qY0pCSEFaM2JTY0JFUkpBaDNOSWZRWFJDQWtRa0FsZ0NBWUJBdnk0aXhVeGN0MDJFQUFuY0FhQmMxWEJBSVNVRnc0NUVOT0FDeXlBQzM2UVdoVTVFVk13QVUwd0FXWFlrU1Jaa2laNWtoNFJRVmxCa1IyNUQwM1FOTGtuUEJBTldaSmV3QUk4ODN3SmNSb2x5V0t2YUJEc2FISW1XWC9veEhPM1NHLzVVQlFhWUFsd2haSU1ZUXFBOGdPbVVKUk1PWlZVV1pWV2FaVUJBUUFoK1FRQmxnQUFBQ3dHQUFZQVdRQ0xBSWN5elRMeDBVWHhwVVR5WDBQeVNFUHlWa1B5ZVVUeWdrVHd5RVR6VFVQeHlrWHlpa1R3eDBUeHRrWHlVVVB4dDBUeHJrWHh4a1h3djBUeW1FVHlpMFB4dVVUeWFrUHh5RVh4eEVYeWFFUHh1MFR4ekVYeHpVWHlrVVR4bEVUeVVrUHlqMFR4aGtUeHBFVHlia1R4dEVYeHcwWHluRVR4Z2tUeVZFUHllMFR5WlVQeG9FVHhzRVR5ZVVQeWJFUHhza1R4dTBYeWRFVHhyRVR5Y0VQeVowUHh2MFh4ZVVUeHpVVHlta1R4ajBUeGswUHlZMFB4cmtUeWpVVHhwMFR5V2tQeWFVUHhoRVR4bzBUeGRVUHlvVVR5V0VQeWNrUHhxVVR4cTBUeHFrVHlrMFFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSS9nQUhRQWdRQU1JQUFBZ1RLbHpJc0tIRGh4QWpSaFJ3SWNBRkFRc2VFQ1RZUUtMSGp5QkRObFN3VVVHSmpSdEZxbHpKTW1HRWpSRmdDRUFwb3FYTm14RTdrS2hCb2tPTEJBY0VDRGlRQUtmUm93Z0xqTEF4b2dBQnBGQ2pTcDFLdGFyVnExaXphdDBLc1lDRkdSYWNKcUFBQVFLRm9seXhnbUR4Z0FXSUdETTMxa3g3RmNOR0RBMVFFcVI3bGNQR0RSYzBidXpJdDZvTXZ4dVE1QmdnQUFFREFRY0xVN1VRWWtFSUlCOGthOTdNdWJQbno2QS9FM0JRd01GVEFBTW9VSWdjK3FhQkNTWW1HQmpnQWFXSDFqY3JiS3l3QWdGS0JyaHQzdmpMUUFKS0NjRmJhdGlvUVlBQjN3RVlHRWpPTWdVT0lqaFM3RUE0Z0RWMWxRUlEvdnhBY2ZxNytmUG8wNFBPa0VFOVNCVW5GcHhROGVFNVFRVFQzVStzZUhHQjhZM0k2UWNSU1FTWkJCMUJ3QW40MEVzRXhWVGJSam9vK0pCT1BQbUUyZ0VIZUNmaFFrb3g1ZFNHSUlZbzRvZ2tLdVNWRVM0NHhSaEJrSlVJd0ZvVnZQQ1dZQnk1YUJkQmVPa1ZnSXNFQm1CU1hBVE5SV0lTaUIyeEFGQkNFZVVpWlpaaDV1S1RVRVlwWldHamxmWVVVR1VwV2VKcnNjMEdaQUJDanFnYlFienA2T0p3QkczQUFJMEJFRWJpbUFId3RtSUFMVzRKbTJ3YVBsbWxhVlAyNmVlZk9LVzIycE0wQkxGQUVEUjg4Q0JCdDVYb0Ewa0srTERBZ2RIeFdGSUoveEVVSUlrM0JvQ1hmZEhsUnlJSUwyZ2dZd3dJc1FkbEFTNE1rV0o1L29ER0t1dXNDNm42Skt1dU9nVXFmaTUyVU9vTFBtVWF3S1lqTWhoQVRKUW1TR0tQSmkwYVFJUWxVbVFSUnFpcGxtZUk4TWxISDYzY2R1dXRpSHMrTldlZEpLWndwM1pzdWpuaWNnUTFaMmFKYUFhZzVwZGhpZ2duYjFoQ29DV0pYT0xaWjdqZkJpeHdpUG51T3lLVElWandBYjB1SGhZQUJ6TGs4QzZKZnFVWkdFcnFpdGdwWHVOZXUrRmFiYjNWcDFkZ2ZUand5U2lqSjZqSEczYllGQUhPTmtvaWhUMjFrS3lMeHNZa0xMRWlNbHNDcU5LNUtHMS9xYmIzWkxielpaYnkwa3kzWnF1TDRZMzMxSzZpam1nZGR0cnQ3Q0s3QVRSM003ekVPUXZ0bTd1dFVPMmdMdlk3MjcrazhkbjAyM0FYeHBodjVCNWNXY0lmcE51d1VWOFFTNnlYaXhYTGV4Rk5OdDdWUU1Gb2tkZ0REdy93MEFPcVU2SkF3d3cwa0JmMzVaaGZoZVJRaVk5WXhBd2VFc0J3aVVvOFVHRUxFeGNMRXd4NmwraHp4eTRLOFZJRVFpelE1d0hMYVpCaFFBQWgvaFZOWVdSbElIZHBkR2dnVTJOeVpXVnVWRzlIYVdZQU93PT0nPiIKIAogICAgICAgICAgICAgICAgcGxheVdyYXBIdG1sICs9ICI8ZGl2PiI7CiAKICAgICAgICAgICAgICAgIF90aGlzLmNyZWF0ZUVsZW1lbnQoJ2RpdicsJ3pobUljb24nKTsKIAogICAgICAgICAgICAgICAgbGV0IHpobVBsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnemhtSWNvbicpOwogCiAgICAgICAgICAgICAgICB6aG1QbGF5LmlubmVySFRNTCA9IHBsYXlXcmFwSHRtbDsKIAogICAgICAgICAgICB9CiAgICAgICAgICAgIC8v5bem6ZSu5oyJ5LiL5ouW5YqoCiAgICAgICAgICAgIC8vdHlwZTrmoLnmja7kuI3lkIznsbvlnovvvIzlpITnkIblm77moIfljZXlh7vkuovliqEKICAgICAgICAgICAgemhtTG9nb0RyYWcodHlwZSx3ZWIpewogCiAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogCiAgICAgICAgICAgICAgICB2YXIgemhtTG9nb0RyYWc9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3pobWxvZ28iKTsKIAogICAgICAgICAgICAgICAgdmFyIHpobUxvZ29JY29uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmljb25Mb2dvIik7CiAKICAgICAgICAgICAgICAgIGlmKCF6aG1Mb2dvRHJhZyB8fCAhemhtTG9nb0ljb24pcmV0dXJuOwogCiAgICAgICAgICAgICAgICB6aG1Mb2dvRHJhZy5vbm1vdXNlZG93biA9IGZ1bmN0aW9uKGV2ZW50KXsKIAogICAgICAgICAgICAgICAgICAgIGlmKGV2ZW50LndoaWNoPT0zKXJldHVybiBmYWxzZTsvL+Wxj+iUveWPs+mUrgogCiAgICAgICAgICAgICAgICAgICAgbGV0IHNlZG93blRvcCA9IHpobUxvZ29EcmFnLm9mZnNldFRvcDsKIAogICAgICAgICAgICAgICAgICAgIGxldCB6aG1Mb2dvSWNvbkhlaWdodCA9IHpobUxvZ29JY29uLm9mZnNldEhlaWdodDsKIAogICAgICAgICAgICAgICAgICAgIGxldCBib3R0b21TcGFjZSA9IDEwOwogCiAgICAgICAgICAgICAgICAgICAgaWYoZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSAhPSAnaWNvbkxvZ28nKXJldHVybjsKIAogICAgICAgICAgICAgICAgICAgIC8vbGV0IHNoaWZ0WCA9IGV2ZW50LmNsaWVudFggLSB6aG1Mb2dvRHJhZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OwogICAgICAgICAgICAgICAgICAgIGxldCBzaGlmdHggPSA1OwogCiAgICAgICAgICAgICAgICAgICAgbGV0IHNoaWZ0WSA9IGV2ZW50LmNsaWVudFktemhtTG9nb0RyYWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOwogCiAgICAgICAgICAgICAgICAgICAgemhtTG9nb0RyYWcuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnOwogCiAgICAgICAgICAgICAgICAgICAgemhtTG9nb0RyYWcuc3R5bGUuekluZGV4ID0gOTk5OTk5OTsKIAogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHpobUxvZ29EcmFnKTsKIAogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGV2ZW50KXsKIAogICAgICAgICAgICAgICAgICAgICAgICAvL3pobUxvZ29EcmFnLnN0eWxlLmxlZnQgPSBwYWdlWCAtIHNoaWZ0WCArICdweCc7CiAgICAgICAgICAgICAgICAgICAgICAgIHpobUxvZ29EcmFnLnN0eWxlLmxlZnQgPSAnNXB4JzsKIAogICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gemhtTG9nb0ljb25IZWlnaHQtYm90dG9tU3BhY2U7CiAKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHkgPSBldmVudC5wYWdlWS1zaGlmdFk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgeSA9IE1hdGgubWluKE1hdGgubWF4KDAsIHkpLCBoZWlnaHQpOwogCiAgICAgICAgICAgICAgICAgICAgICAgIHpobUxvZ29EcmFnLnN0eWxlLnRvcCA9IHkrJ3B4JzsKIAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvL+WcqG1vdXNlbW92ZeS6i+S7tuS4iuenu+WKqOWbvuaghwogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsb25Nb3VzZU1vdmUpOwogICAgICAgICAgICAgICAgICAgIC8v5p2+5byA5LqL5Lu2CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gZnVuY3Rpb24oZSl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoJ2ljb25Ub3AnLHpobUxvZ29EcmFnLm9mZnNldFRvcCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpOwogCiAgICAgICAgICAgICAgICAgICAgICAgIHpobUxvZ29EcmFnLm9ubW91c2V1cCA9IG51bGw7CiAKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhlaWdodCA9IHpobUxvZ29EcmFnLm9mZnNldFRvcCt6aG1Mb2dvSWNvbkhlaWdodCtib3R0b21TcGFjZTsKIAogICAgICAgICAgICAgICAgICAgICAgICBpZih6aG1Mb2dvRHJhZy5vZmZzZXRUb3AgPCAwKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgemhtTG9nb0RyYWcuc3R5bGUudG9wID0nMHB4JzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5pbm5lckhlaWdodCA8IGhlaWdodCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpobUxvZ29EcmFnLnN0eWxlLnRvcCA9d2luZG93LmlubmVySGVpZ2h0LXpobUxvZ29JY29uSGVpZ2h0LWJvdHRvbVNwYWNlKydweCc7CiAKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvL2NsaWNr5LqL5Lu25aSE55CGCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndmlkZW8nOgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoemhtTG9nb0RyYWcub2Zmc2V0VG9wPT1zZWRvd25Ub3AgJiYgd2ViLmxlbmd0aCA9PSAwICYmIHpobUxvZ29EcmFnLm9mZnNldFRvcD4wICYmIHdpbmRvdy5pbm5lckhlaWdodCA+IGhlaWdodCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZUNsYXNzLnRvYXN0KCfor7flnKjop4bpopHmkq3mlL7pobXngrnlh7vlm77moIcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ211c2ljJzoKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHpobUxvZ29EcmFnLm9mZnNldFRvcD09c2Vkb3duVG9wICYmIGUudGFyZ2V0LmNsYXNzTmFtZSA9PSAnaWNvbkxvZ28nKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3pobUxvZ29EcmFnLm9ubW91c2V1cCA9IG51bGw7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG11c2ljVXJsRGF0YSA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttYXRjaDovXmh0dHBzPzpcL1wvbXVzaWNcLjE2M1wuY29tXC8jXC8oPzpzb25nfGRqKVw/aWQvfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttYXRjaDovXmh0dHBzPzpcL1wveVwubXVzaWNcLjE2M1wuY29tXC9tXC8oPzpzb25nfGRqKVw/aWQvfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttYXRjaDovXmh0dHBzPzpcL1wvbXVzaWNcLjE2M1wuY29tXC8oPzpzb25nfGRqKVw/aWQvfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttYXRjaDovXmh0dHBzPzpcL1wveVwucXFcLmNvbVwvblwvcnlxcVwvcGxheWVyL30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bWF0Y2g6L2t1Z291XC5jb20vfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttYXRjaDova3V3b1wuY24vfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttYXRjaDovXmh0dHBzPzpcL1wvd3d3XC54aW1hbGF5YVwuY29tL30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXVzaWNVcmwgPSBtdXNpY1VybERhdGEuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb24uaHJlZi5tYXRjaChpdGVtLm1hdGNoKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG11c2ljVXJsLmxlbmd0aD09MCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VDbGFzcy50b2FzdCh3ZWJbMF0udGlwKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHdlYlswXS5uYW1lKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25ldGVhc2UnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGVhc2VGdW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3FxJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxcUZ1bigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAna3Vnb3UnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt1Z291RnVuKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdrdXdvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrdXdvRnVuKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4aW1hbGF5YSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGltYWxheWFGdW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG5ldGVhc2VGdW4oKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybFBhcmFtcyA9IF90aGlzLmdldFVybFBhcmFtcyhsb2NhdGlvbi5ocmVmKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodXJsUGFyYW1zLmlkID09IHVuZGVmaW5lZCkgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV0ZWFzZVVybEVuY29kZSA9IGVuY29kZVVSSUNvbXBvbmVudCgnaHR0cHM6Ly9tdXNpYy4xNjMuY29tL3Nvbmc/aWQ9Jyt1cmxQYXJhbXMuaWQpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCBvcGVuVXJsID0gd2ViVXJsKyc/dXJsPScrbmV0ZWFzZVVybEVuY29kZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9wZW5VcmwgPSB3ZWJVcmwrIj9pZD0iK3VybFBhcmFtcy5pZCsiJnR5cGU9bmV0ZWFzZSIKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4ob3BlblVybCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHFxRnVuKCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBxcVNvbmdNYXRjaDsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnBsYXllcl9tdXNpY19faW5mbyIpKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFxU29uZ01hdGNoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnBsYXllcl9tdXNpY19faW5mbyIpLmNoaWxkTm9kZXNbMF0uaHJlZi5tYXRjaCgvc29uZ0RldGFpbFwvKFxTKilcPy8pOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjc2ltX3NvbmdfaW5mbyIpKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFxU29uZ01hdGNoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3NpbV9zb25nX2luZm8iKS5jaGlsZE5vZGVzWzBdLmhyZWYubWF0Y2goL3NvbmdcLyhcUyopLmh0bWwvKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxcVNvbmdNYXRjaCA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighcXFTb25nTWF0Y2hbMV0pe2NvbnNvbGUubG9nKCfmsqHmnInojrflj5bliLDmrYzmm7JJRCcpOyByZXR1cm59OwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaW9MaW5rID0gZW5jb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImF1ZGlvIikuc3JjKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9wZW5VcmwgPSB3ZWJVcmwrJz9pZD0nK3FxU29uZ01hdGNoWzFdKycmdHlwZT1xcSZwbGF5VXJsPScrYXVkaW9MaW5rOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihvcGVuVXJsKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ga3Vnb3VGdW4oKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF1ZGlvTW9kdWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2F1ZGlvTW9kdWxlJyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGF1ZGlvTW9kdWxlKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhdWRpb01vZHVsZScpLnN0eWxlPSdib3R0b206MHB4Oyc7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2hvd0hpZGVfcGxheWJhcicpLmNsYXNzTmFtZSA9ICdpY29uIHNob3ctcGxheWJhci1idG4nOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlQ2xhc3MudG9hc3QoJ+ivt+eCueWHu+aSreaUvumcgOimgeS4i+i9veeahOatjOabsu+8jOeEtuWQjuWcqOe9kemhteS4i+aWueaSreaUvuWZqOWGheeCueWHuyLkuIvovb0iJywyMDAwKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KCfor7fngrnlh7vmkq3mlL7pnIDopoHkuIvovb3nmoTmrYzmm7LvvIznhLblkI7lnKjnvZHpobXkuIvmlrnmkq3mlL7lmajlhoXngrnlh7si5LiL6L29IuOAgicpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29uZ0t1Z291TWF0Y2ggPSBuZXdVcmwubWF0Y2goanhNdXNpY1dlYlswXS5tYXRjaCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhdWRpb1NyYyA9IGVuY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJhdWRpbyIpLnNyYyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcGVuVXJsID0gd2ViVXJsKyc/aWQ9Jytzb25nS3Vnb3VNYXRjaFsxXSsnJnR5cGU9a3Vnb3UmcGxheVVybD0nK2F1ZGlvU3JjOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihvcGVuVXJsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBrdXdvRnVuKCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wbGF5Q29udHJvbCcpLnN0eWxlPSdib3R0b206MHB4JzsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZUNsYXNzLnRvYXN0KCfor7fngrnlh7vmkq3mlL7pnIDopoHkuIvovb3nmoTmrYzmm7LvvIznhLblkI7lnKjnvZHpobXkuIvmlrnmkq3mlL7lmajlhoXngrnlh7si5LiL6L29IicsMjAwMCkKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hbGVydCgn6K+354K55Ye75pKt5pS+6ZyA6KaB5LiL6L2955qE5q2M5puy77yM54S25ZCO5Zyo572R6aG15LiL5pa55pKt5pS+5Zmo5YaF54K55Ye7IuS4i+i9vSLjgIInKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb25nS3V3b01hdGNoID0gbmV3VXJsLm1hdGNoKGp4TXVzaWNXZWJbMF0ubWF0Y2gpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaW9TcmMgPSBlbmNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYXVkaW8iKS5zcmMpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3BlblVybCA9IHdlYlVybCsnP2lkPScrc29uZ0t1d29NYXRjaFsxXSsnJnR5cGU9a3V3byZwbGF5VXJsPScrYXVkaW9TcmM7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKG9wZW5VcmwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHhpbWFsYXlhRnVuKCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy54bS1wbGF5ZXInKS5zdHlsZT0nYm90dG9tOjBweCc7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VDbGFzcy50b2FzdCgn6K+354K55Ye75pKt5pS+6ZyA6KaB5LiL6L2955qE5q2M5puy77yM54S25ZCO5Zyo572R6aG15LiL5pa55pKt5pS+5Zmo5YaF54K55Ye7IuS4i+i9vSInLDIwMDApCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYWxlcnQoJ+ivt+eCueWHu+aSreaUvumcgOimgeS4i+i9veeahOatjOabsu+8jOeEtuWQjuWcqOe9kemhteS4i+aWueaSreaUvuWZqOWGheeCueWHuyLkuIvovb0i44CCJyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsSW5mbyA9IG5ld1VybC5tYXRjaChqeE11c2ljV2ViWzBdLm1hdGNoKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cod2ViVXJsKyc/aWQ9Jyt1cmxJbmZvWzFdKycmdHlwZT14aW1hbGF5YSZwbGF5VXJsPScrZW5jb2RlVVJJQ29tcG9uZW50KG5ld1VybCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih1cmxJbmZvWzFdKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHdlYlVybCsnP2lkPScrdXJsSW5mb1sxXSsnJnR5cGU9eGltYWxheWEmcGxheVVybD0nK2VuY29kZVVSSUNvbXBvbmVudChuZXdVcmwpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn5rKh5pyJ6I635Y+WdXJs5Y+C5pWwJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneW91dHViZSc6CiAKIAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAgIHpobUxvZ29EcmFnLm9uZHJhZ3N0YXJ0ID0gZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8v5LiL6L29CiAgICAgICAgICAgIHN0YXRpYyBMUl9kb3dubG9hZCh1cmwsZmlsZW5hbWUpewogCiAgICAgICAgICAgICAgICBsZXQgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CiAKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHVhLm1hdGNoKC92ZXJzaW9uXC8oW1xkLl0rKS4qc2FmYXJpLykpOwogCiAgICAgICAgICAgICAgICBpZih1YS5tYXRjaCgvdmVyc2lvblwvKFtcZC5dKykuKnNhZmFyaS8pKXsKIAogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHVybCk7CiAKICAgICAgICAgICAgICAgIH1lbHNlewpjb25zb2xlLmxvZyh1cmwpOwogICAgICAgICAgICAgICAgICAgIEdNX2Rvd25sb2FkKHVybCxmaWxlbmFtZSk7CiAgICAgICAgICAgICAgICB9CiAKIAogICAgICAgICAgICB9CiAKICAgICAgICB9CiAKICAgICAgICBjbGFzcyBQbGF5VmlkZW9DbGFzcyBleHRlbmRzIEJhc2VDbGFzc3sKICAgICAgICAgICAgY29uc3RydWN0b3IoKXsKICAgICAgICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICAgIH0KIAogICAgICAgIH0KIAogICAgICAgIHZhciBub3dXZWI9W107CiAKICAgICAgICBqeFZpZGVvLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7CiAKICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGxvY2F0aW9uLmhyZWYubWF0Y2goaXRlbS5tYXRjaCk7CiAKICAgICAgICAgICAgaWYocmVzdWx0KXsKIAogICAgICAgICAgICAgICAgbm93V2ViLnB1c2goaXRlbSk7CiAKICAgICAgICAgICAgfQogCiAgICAgICAgfSkKIAogICAgICAgIGlmKG5vd1dlYi5sZW5ndGg9PTApewogCiAgICAgICAgICAgIC8vbGV0IGJhc2VDbGFzcyA9IG5ldyBCYXNlQ2xhc3MoKTsKIAogICAgICAgICAgICBjb25zb2xlLmxvZygn5rKh5pyJ5Yy56YWN6K+l572R56uZ5oiW6K+l5qih5Z2X5bey5YWz6ZetJyk7cmV0dXJuOwogICAgICAgIH0KIAogICAgICAgIGZ1bmN0aW9uIHBsYXlWaWRlb0Z1bmMoKXsKIAogICAgICAgICAgICB2YXIgcGxheVZpZGVvQ2xhc3MgPSBuZXcgUGxheVZpZGVvQ2xhc3MoKTsKIAogICAgICAgICAgICBpZihHTV9nZXRWYWx1ZSgnbW92aWVMaXN0JywnMjInKT09MCl7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KIAogICAgICAgICAgICBwbGF5VmlkZW9DbGFzcy56aG1Mb2dvKCk7CiAKICAgICAgICAgICAgaWYoR01fZ2V0VmFsdWUoJ3BsYXlWaWRlb0xpbmVUZXh0JykpewogCiAgICAgICAgICAgICAgICBsZXQgbGluZU9iaiA9IHBsYXlWaWRlb0NsYXNzLmdldExpbmUoR01fZ2V0VmFsdWUoJ3BsYXlWaWRlb0xpbmVUZXh0JykpOwogCiAgICAgICAgICAgICAgICBpZihsaW5lT2JqKXsKIAogICAgICAgICAgICAgICAgICAgIC8vcGxheUxpbmUgPSBbLi4ubGluZU9iaiwuLi5wbGF5TGluZV07CiAgICAgICAgICAgICAgICAgICAgcGxheUxpbmUgPSBsaW5lT2JqCiAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogCiAgICAgICAgICAgIC8vY3VzdG9tIGFkZCB3ZWIgbGluZQogCiAgICAgICAgICAgIC8vdGVtcGxhdGU6aWNvbixwbGF5TGluZTsKIAogICAgICAgICAgICBsZXQgcGxheVdyYXBIdG1sID0gIjxkaXYgY2xhc3M9J3pobV9wbGF5X3ZpZGVvX2xpbmUnPiI7CiAKICAgICAgICAgICAgcGxheVdyYXBIdG1sICs9IjxkaXY+PHVsIGNsYXNzPSd6aG1fcGxheV92aWRlX2xpbmVfdWwnPiI7CiAKICAgICAgICAgICAgcGxheUxpbmUuZm9yRWFjaChmdW5jdGlvbihpdGVtKXsKIAogICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkID0gJyc7CiAKICAgICAgICAgICAgICAgIGlmKHBsYXlWaWRlb0NsYXNzLmdldENvb2tpZSgncGxheUxpbmVBY3Rpb24nKSA9PSBpdGVtLnVybCl7CiAKICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9ICd6aG1fbGluZV9zZWxlY3RlZCc7CiAKICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgcGxheVdyYXBIdG1sICs9YDxsaSBjbGFzcz0ncGxheUxpbmVUZCB6aG1fcGxheV92aWRlb19saW5lX3VsX2xpICR7c2VsZWN0ZWR9JyB1cmw9JyR7aXRlbS51cmx9JyA+JHtpdGVtLm5hbWV9PC9saT5gOwogCiAgICAgICAgICAgIH0pCiAKICAgICAgICAgICAgcGxheVdyYXBIdG1sICs9ICI8L2Rpdj4iOwogCiAgICAgICAgICAgIGxldCB6aG1QbGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3pobWxvZ28nKTsKIAogICAgICAgICAgICBsZXQgcGxheUxpbmVEb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKIAogICAgICAgICAgICBwbGF5TGluZURvbS5jbGFzc05hbWUgPSAncGxheUxpbmVEaXYgemhtX3BsYXlfdmlkZW9fd3JhcCc7CiAKICAgICAgICAgICAgcGxheUxpbmVEb20uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKIAogICAgICAgICAgICBwbGF5TGluZURvbS5pbm5lckhUTUwgPSBwbGF5V3JhcEh0bWw7CiAKICAgICAgICAgICAgemhtUGxheS5hcHBlbmRDaGlsZChwbGF5TGluZURvbSk7CiAKICAgICAgICAgICAgLy90ZW1wbGF0ZTpub2RlO+aSreaUvuWMuuWfnwogCiAgICAgICAgICAgIGxldCBwbGF5SnhIdG1sID0gIjxkaXYgY2xhc3M9J3pobV9wbGF5X3ZpZGVvX2p4Jz4iOwogCiAgICAgICAgICAgIHBsYXlKeEh0bWwgKz0gIjxpZnJhbWUgYWxsb3d0cmFuc3BhcmVuY3k9dHJ1ZSBmcmFtZWJvcmRlcj0nMCcgc2Nyb2xsaW5nPSdubycgYWxsb3dmdWxsc2NyZWVuPXRydWUgYWxsb3d0cmFuc3BhcmVuY3k9dHJ1ZSBuYW1lPSdqeF9wbGF5JyBzdHlsZT0naGVpZ2h0OjEwMCU7d2lkdGg6MTAwJScgaWQ9J3BsYXlJZnJhbWUnPjwvaWZyYW1lPjwvZGl2PiI7CiAKICAgICAgICAgICAgbGV0IGp4VmlkZW9EYXRhID0gWwogICAgICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIucGxheWVyX19jb250YWluZXIiICxtYXRjaDovaHR0cHM6XC9cL3YucXEuY29tXC94XC9jb3ZlclwvW2EtekEtWjAtOV0rLmh0bWwvLGFyZWFDbGFzc05hbWU6J3BsYXlsaXN0LWxpc3QnLG5hbWU6J3FxUEMnfSwKICAgICAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiI3BsYXllci1jb250YWluZXIiICxtYXRjaDovaHR0cHM6XC9cL3YucXEuY29tXC94XC9jb3ZlclwvW2EtekEtWjAtOV0rXC9bYS16QS1aMC05XSsuaHRtbC8sYXJlYUNsYXNzTmFtZToncGxheWxpc3QtbGlzdCcsbmFtZToncXFQQyd9LAogICAgICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIuY29udGFpbmVyLXBsYXllciIgLG1hdGNoOi92XC5xcVwuY29tXC94XC9wYWdlLyxhcmVhQ2xhc3NOYW1lOidtb2RfZXBpc29kZSd9LAogCiAgICAgICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6IiNmbGFzaGJveCIsbWF0Y2g6L15odHRwczpcL1wvd3d3XC5pcWl5aVwuY29tXC9bdndhXVxfLyxhcmVhQ2xhc3NOYW1lOidxeS1lcGlzb2RlLW51bScsbmFtZTonaXFpeWlQYyd9LAogICAgICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIubS12aWRlby1wbGF5ZXItd3JhcCIsbWF0Y2g6L15odHRwczpcL1wvbS5pcWl5aVwuY29tXC9bdndhXVxfLyxhcmVhQ2xhc3NOYW1lOidtLXNsaWRpbmctbGlzdCd9LAogICAgICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIuaW50bC12aWRlby13cmFwIixtYXRjaDovXmh0dHBzOlwvXC93d3dcLmlxXC5jb21cL3BsYXlcLy8sYXJlYUNsYXNzTmFtZTonbS1zbGlkaW5nLWxpc3QnfSwKIAogICAgICAgICAgICAgICAge2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIjcGxheWVyIixtYXRjaDovdlwueW91a3VcLmNvbVwvdl9zaG93XC9pZF8vLGFyZWFDbGFzc05hbWU6J25ldy1ib3gtYW50aG9sb2d5LWl0ZW1zJ30sCiAgICAgICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6IiNwbGF5ZXIiLG1hdGNoOi92XC55b3VrdVwuY29tXC92X3BsYXlcL2lkXy99LAogCiAgICAgICAgICAgICAgICAvL3tmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiLnBsYXllci1jb250YWluZXIiLG5vZGVUeXBlOidpZCcsbWF0Y2g6L3d3d1wuYmlsaWJpbGlcLmNvbVwvdmlkZW8vfSwKICAgICAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiI2JpbGliaWxpLXBsYXllciIsbm9kZVR5cGU6J2lkJyxtYXRjaDovd3d3XC5iaWxpYmlsaVwuY29tXC92aWRlby8sbmFtZTonYmlsaVBjJyxhcmVhQ2xhc3NOYW1lOid2aWRlby1lcGlzb2RlLWNhcmQnfSwKICAgICAgICAgICAgICAgIC8ve2Z1bmNOYW1lOiJwbGF5VmlkZW8iLCBub2RlOiIjcGxheWVyX21vZHVsZSIsbm9kZVR5cGU6J2lkJyxtYXRjaDovd3d3XC5iaWxpYmlsaVwuY29tXC9iYW5ndW1pLyxhcmVhQ2xhc3NOYW1lOidsaXN0LXdyYXBwZXInfSzljp/mnaVET00KICAgICAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiLmJweC1wbGF5ZXItcHJpbWFyeS1hcmVhIixub2RlVHlwZTonaWQnLG1hdGNoOi93d3dcLmJpbGliaWxpXC5jb21cL2Jhbmd1bWkvLGFyZWFDbGFzc05hbWU6J2VwbGlzdF9lcF9saXN0X3dyYXBwZXJfX1B6TEhhJ30sCiAgICAgICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6IiNtZ3R2LXBsYXllci13cmFwIixub2RlVHlwZTonaWQnLG1hdGNoOi9eaHR0cHM/OlwvXC93d3cubWd0dlwuY29tXC9ifGxcL1swLTldLyxhcmVhQ2xhc3NOYW1lOidlcGlzb2RlLWl0ZW1zJ30sCiAKICAgICAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiLngtcGxheWVyIixub2RlVHlwZTonY2xhc3MnLG1hdGNoOi90dlwuc29odVwuY29tXC92LyxhcmVhQ2xhc3NOYW1lOidzZXJpZXMtdGFiX3BhbmUnfSwKICAgICAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiI3BsYXllcldyYXAiLG5vZGVUeXBlOidpZCcsbWF0Y2g6L2ZpbG1cLnNvaHVcLmNvbVwvYWxidW1cLy99LAogCiAgICAgICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6IiNsZV9wbGF5Ym94Iixub2RlVHlwZTonaWQnLG1hdGNoOi9sZVwuY29tXC9wdHZcL3ZwbGF5XC8vLGFyZWFDbGFzc05hbWU6J2p1amlfZ3JpZCd9LAogCiAgICAgICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6IiNwbGF5ZXIiLG5vZGVUeXBlOidpZCcsbWF0Y2g6L3BsYXlcLnR1ZG91XC5jb21cL3Zfc2hvd1wvaWRfL30sCiAKICAgICAgICAgICAgICAgIHtmdW5jTmFtZToicGxheVZpZGVvIiwgbm9kZToiI3BwdHZfcGxheXBhZ2VfYm94Iixub2RlVHlwZTonaWQnLG1hdGNoOi92XC5wcHR2XC5jb21cL3Nob3dcLy99LAogCiAgICAgICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6IiNwbGF5ZXIiLG5vZGVUeXBlOidpZCcsbWF0Y2g6L3ZpcFwuMTkwNS5jb21cL3BsYXlcLy99LAogCiAgICAgICAgICAgICAgICB7ZnVuY05hbWU6InBsYXlWaWRlbyIsIG5vZGU6IiN2b2RQbGF5ZXIiLG5vZGVUeXBlOidpZCcsbWF0Y2g6L3d3d1wuMTkwNS5jb21cL3ZvZFwvcGxheVwvL30sCiAgICAgICAgICAgIF07CiAKICAgICAgICAgICAgbGV0IGp4VmlkZW9XZWIgPSBqeFZpZGVvRGF0YS5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7CiAKICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbi5ocmVmLm1hdGNoKGl0ZW0ubWF0Y2gpOwogCiAgICAgICAgICAgIH0pCiAKICAgICAgICAgICAgcGxheVZpZGVvQ2xhc3MuemhtTG9nb0RyYWcoJ3ZpZGVvJyxqeFZpZGVvV2ViKTsKIAogICAgICAgICAgICAvL+aYr+WQpuWcqOaSreaUvumhtQogICAgICAgICAgICBpZihqeFZpZGVvV2ViLmxlbmd0aCA+IDApewogCiAgICAgICAgICAgICAgICB2YXIge2Z1bmNOYW1lLG1hdGNoOm5vd01hdGNoLG5vZGU6bm93Tm9kZSxuYW1lOm5vd05hbWV9ID0ganhWaWRlb1dlYlswXTsKIAogICAgICAgICAgICAgICAgLy/pvKDmoIfnu4/ov4fmmL7npLrnur/ot68KICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wbGF5QnV0dG9uJykub25tb3VzZW92ZXI9KCk9PnsKIAogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5wbGF5TGluZURpdiIpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsKIAogICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucGxheUJ1dHRvbicpLm9ubW91c2VvdXQ9KCk9PnsKIAogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5wbGF5TGluZURpdiIpLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogCiAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgIC8v6YCJ5oup57q/6Lev6Kej5p6Q5pKt5pS+CiAKICAgICAgICAgICAgICAgIHZhciBwbGF5TGluZVRkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBsYXlMaW5lVGQnKTsKIAogICAgICAgICAgICAgICAgcGxheUxpbmVUZC5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pewogCiAgICAgICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXsKIAogICAgICAgICAgICAgICAgICAgICAgICBwbGF5TGluZVRkLmZvckVhY2goZnVuY3Rpb24oZSl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc2V0QXR0cmlidXRlKCdjbGFzcycsJ3BsYXlMaW5lVGQgemhtX3BsYXlfdmlkZW9fbGluZV91bF9saScpOwogICAgICAgICAgICAgICAgICAgICAgICB9KQogCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdjbGFzcycsJ3BsYXlMaW5lVGQgemhtX3BsYXlfdmlkZW9fbGluZV91bF9saSB6aG1fbGluZV9zZWxlY3RlZCcpOwogCiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlWaWRlb0NsYXNzLnNldENvb2tpZSgncGxheUxpbmVBY3Rpb24nLHRoaXMuZ2V0QXR0cmlidXRlKCd1cmwnKSwzMCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgaWYoR01fZ2V0VmFsdWUoJ3ZpZGVvUGxheUxpbmVBZGQnKSAhPSAyMil7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBub3dXZWJOb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihub3dOb2RlKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobm93V2ViTm9kZSl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3dXZWJOb2RlLmlubmVySFRNTCA9IHBsYXlKeEh0bWw7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGxheUlmcmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwbGF5SWZyYW1lJyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5SWZyYW1lLnNyYz0gaXRlbS5nZXRBdHRyaWJ1dGUoJ3VybCcpK2xvY2F0aW9uLmhyZWY7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+inhumikee9keermee7k+eCueS4jeWtmOWcqCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihpdGVtLmdldEF0dHJpYnV0ZSgndXJsJykrbG9jYXRpb24uaHJlZik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgfSkKIAogICAgICAgICAgICAgICAgfSkKIAogICAgICAgICAgICAgICAgLyotLeeJueauiuWkhOeQhi0tKi8KICAgICAgICAgICAgICAgIC8v5LyY6YW35Y675bm/5ZGKCiAgICAgICAgICAgICAgICBpZihub3dOb2RlPT0iI3BsYXllciIpewogCiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogCiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB5b3VrdUFkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFkdmVydGlzZS1sYXllcicpOwogCiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB5a0FkID0geW91a3VBZC5sYXN0Q2hpbGQ7CiAKICAgICAgICAgICAgICAgICAgICAgICAgeWtBZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHlrQWQpOwogCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5rdWktZGFzaGJvYXJkLTAnKS5zdHlsZT0nZGlzcGxheTpmbGV4JzsKIAogICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGxheVZpZGVvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnZpZGVvLWxheWVyIHZpZGVvJyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgcGxheVZpZGVvLnBsYXkoKTsKIAogICAgICAgICAgICAgICAgICAgICAgICBsZXQgbj0wOwogCiAgICAgICAgICAgICAgICAgICAgICAgIC8v5pqC5YGcCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5rdWktcGxheS1pY29uLTAnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZpZGVvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnZpZGVvLWxheWVyIHZpZGVvJyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG4rKyUyID09IDApewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW8ucGF1c2UoKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlby5wbGF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgcGxheVZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLGZ1bmN0aW9uKCl7IC8v5pKt5pS+5pe26Ze05pS55Y+YCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB5b3VrdUFkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFkdmVydGlzZS1sYXllcicpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgeWtBZCA9IHlvdWt1QWQubGFzdENoaWxkOwogCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHlrQWQpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWtBZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHlrQWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcua3VpLWRhc2hib2FyZC0wJykuc3R5bGU9J2Rpc3BsYXk6ZmxleCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICAgICAgICAgIC8v6ZSu55uY5b+r6L+b5b+r6YCACiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50Lm9ua2V5ZG93biA9IGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coZXZlbnQua2V5Q29kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmlkZW8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudmlkZW8tbGF5ZXIgdmlkZW8nKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXZlbnQua2V5Q29kZT09MzkpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW8uY3VycmVudFRpbWUgPSB2aWRlby5jdXJyZW50VGltZSArIDU7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGV2ZW50LmtleUNvZGU9PTM3KXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvLmN1cnJlbnRUaW1lID0gdmlkZW8uY3VycmVudFRpbWUgLSA1OwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgIH0sMzAwMCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8v54ix5aWH6Im65Y675bm/5ZGKCiAgICAgICAgICAgICAgICBpZihub3dOb2RlPT0iI2ZsYXNoYm94Iil7CiAKICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5za2lwcGFibGUtYWZ0ZXInKTsKIAogICAgICAgICAgICAgICAgICAgICAgICBpZihkb20pewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb20uY2xpY2soKTsKIAogICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICB9LDMwMDApCiAKICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgLy/ohb7orq/ljrt2aXDlvLnnqpcKICAgICAgICAgICAgICAgIGlmKG5vd05vZGU9PSIjcGxheWVyLWNvbnRhaW5lciIpewogCiAgICAgICAgICAgICAgICAgICAgbGV0IG4gPSAwOwogCiAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKIAogICAgICAgICAgICAgICAgICAgICAgICBpZihuKysgPCAxMDApewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFuZWxUaXBWaXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucGFuZWwtb3ZlcmxheScpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwYW5lbFRpcFZpcCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbFRpcFZpcC5zdHlsZS5kaXNwbGF5PSdub25lJzsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTsKIAogICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICB9LDEwMCkKIAogCiAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvL+S5kOinhumAiembhuWkhOeQhgogICAgICAgICAgICAgICAgaWYobm93Tm9kZSA9PSAiI2xlX3BsYXlib3giKXsKIAogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKIAogICAgICAgICAgICAgICAgICAgICAgICBsZXQgakJsb2NrID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpfYmxvY2snKTsKIAogICAgICAgICAgICAgICAgICAgICAgICBpZighakJsb2NrKSByZXR1cm47CiAKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpPTA7aTxqQmxvY2subGVuZ3RoO2krKyl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2aWRlb0lkID0gakJsb2NrW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS12aWQnKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBgaHR0cHM6Ly93d3cubGUuY29tL3B0di92cGxheS8ke3ZpZGVvSWR9Lmh0bWxgOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqQmxvY2tbaV0uZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLGxpbmspOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwzMDAwKQogICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAvL0Lnq5nlpKfkvJrlkZh1cmzlpITnkIbvvIzpobXpnaJjbGFzc+S4jeS4gOiHtAogICAgICAgICAgICAgICAgaWYobm93Tm9kZSA9PSAiLnBsYXllci1jb250YWluZXIiKXsKIAogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKIAogICAgICAgICAgICAgICAgICAgICAgICBpZighZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBsYXllci1jb250YWluZXInKSAmJiAhZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmJweC1wbGF5ZXItY29udGFpbmVyJykpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3dOb2RlID0gJy5wbGF5ZXItbWFzayc7CiAKICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vd05vZGUgPSAnLmJweC1wbGF5ZXItY29udGFpbmVyJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgfSwzMDAwKQogICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAvKuiFvuiur+inhumikeeCueWHu+WFtuWug+inhumikei3s+i9rCovCiAgICAgICAgICAgICAgICBpZihub3dOYW1lPT0ncXFQQycpewogCiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZ3VyZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWd1cmUnKTsKIAogICAgICAgICAgICAgICAgICAgIGxldCBmaWd1cmVEZXRhaWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZmlndXJlX2RldGFpbCcpOwogCiAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3RJdGVtID0gWy4uLmZpZ3VyZSwuLi5maWd1cmVEZXRhaWxdOwogCiAgICAgICAgICAgICAgICAgICAgaWYobGlzdEl0ZW0ubGVuZ3RoID4gMCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW0uZm9yRWFjaChmdW5jdGlvbihpdGVtKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxpbmspewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBsaW5rOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8v5rOo6YeK5piv5aSa5Liq5pKt5pS+6YCJ6ZuG5Yy65Z+fCi8qCiAgICAgICAgICAgICAgICBsZXQgZWFyZUNsYXNzTmFtZUFyciA9IGp4VmlkZW9XZWJbMF0uYXJlYUNsYXNzTmFtZS5zcGxpdCgnLCcpOwogCiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlYXJlQ2xhc3NOYW1lQXJyKTtyZXR1cm47CiAKICAgICAgICAgICAgICAgIGlmKGVhcmVDbGFzc05hbWVBcnIubGVuZ3RoPT0wKXJldHVybjsKKi8KICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKLyoKICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGk9MDtpPGVhcmVDbGFzc05hbWVBcnIubGVuZ3RoO2krKyl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLicrZWFyZUNsYXNzTmFtZUFycltpXSkpewogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1NlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZSl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGUudGFyZ2V0LnBhcmVudE5vZGUuaHJlZik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZj1sb2NhdGlvbi5ocmVmOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwxMDAwKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgICAgICAgIGxldCB2aWRlb1NlbGVjdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy4nK2p4VmlkZW9XZWJbMF0uYXJlYUNsYXNzTmFtZSk7CiAKICAgICAgICAgICAgICAgICAgICBpZih2aWRlb1NlbGVjdC5sZW5ndGg9PTApe2NvbnNvbGUubG9nKCfor6XnvZHnq5nmkq3mlL7ljLrnsbvlkI3mlLnlj5gnKTtyZXR1cm47fQogCiAgICAgICAgICAgICAgICAgICAgdmlkZW9TZWxlY3QuZm9yRWFjaChmdW5jdGlvbihpdGVtKXsKIAogICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihlKXsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhlLnRhcmdldC5wYXJlbnROb2RlLmhyZWYpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmPWxvY2F0aW9uLmhyZWY7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sMTAwMCkKIAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICB9LDIwMDApOwogICAgICAgICAgICB9CiAKICAgICAgICB9CiAKICAgICAgICBwbGF5VmlkZW9GdW5jKCk7CiAKICAgIH0KfSkoKTs=
Add Comment
Please, Sign In to add comment