IiBUZXN0ICdhdXRvY2hkaXInIGJlaGF2aW9yCgpzb3VyY2UgY2hlY2sudmltCkNoZWNrT3B0aW9uIGF1dG9jaGRpcgoKZnVuYyBUZXN0X3NldF9maWxlbmFtZSgpCiAgbGV0IGN3ZCA9IGdldGN3ZCgpCiAgY2FsbCB0ZXN0X2F1dG9jaGRpcigpCiAgc2V0IGFjZAoKICBsZXQgczpsaSA9IFtdCiAgYXV0b2NtZCBEaXJDaGFuZ2VkIGF1dG8gY2FsbCBhZGQoczpsaSwgImF1dG9jZCIpCiAgYXV0b2NtZCBEaXJDaGFuZ2VkIGF1dG8gY2FsbCBhZGQoczpsaSwgZXhwYW5kKCI8YWZpbGU+IikpCgogIG5ldwogIHcgc2FtcGxlcy9YdGVzdAogIGNhbGwgYXNzZXJ0X2VxdWFsKCJYdGVzdCIsIGV4cGFuZCgnJScpKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJzYW1wbGVzIiwgc3Vic3RpdHV0ZShnZXRjd2QoKSwgJy4qL1woXGsqXCknLCAnXDEnLCAnJykpCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyJhdXRvY2QiLCBnZXRjd2QoKV0sIHM6bGkpCgogIGJ3aXBlIQogIGF1ISBEaXJDaGFuZ2VkCiAgc2V0IG5vYWNkCiAgY2FsbCBjaGRpcihjd2QpCiAgY2FsbCBkZWxldGUoJ3NhbXBsZXMvWHRlc3QnKQplbmRmdW5jCgpmdW5jIFRlc3Rfc2V0X2ZpbGVuYW1lX290aGVyX3dpbmRvdygpCiAgbGV0IGN3ZCA9IGdldGN3ZCgpCiAgY2FsbCB0ZXN0X2F1dG9jaGRpcigpCiAgY2FsbCBta2RpcignWGEnLCAnUicpCiAgY2FsbCBta2RpcignWGInLCAnUicpCiAgY2FsbCBta2RpcignWGMnLCAnUicpCiAgdHJ5CiAgICBhcmdzIFhhL2FhYS50eHQgWGIvYmJiLnR4dAogICAgc2V0IGFjZAogICAgbGV0IHdpbmlkID0gd2luX2dldGlkKCkKICAgIHNuZXh0CiAgICBjYWxsIGFzc2VydF9lcXVhbCgnWGInLCBzdWJzdGl0dXRlKGdldGN3ZCgpLCAnLiovXChbXi9dKlwpJCcsICdcMScsICcnKSkKICAgIGNhbGwgd2luX2V4ZWN1dGUod2luaWQsICdmaWxlICcgLi4gY3dkIC4uICcvWGMvY2NjLnR4dCcpCiAgICBjYWxsIGFzc2VydF9lcXVhbCgnWGInLCBzdWJzdGl0dXRlKGdldGN3ZCgpLCAnLiovXChbXi9dKlwpJCcsICdcMScsICcnKSkKICBmaW5hbGx5CiAgICBzZXQgbm9hY2QKICAgIGNhbGwgY2hkaXIoY3dkKQogICAgYndpcGUhIGFhYS50eHQKICAgIGJ3aXBlISBiYmIudHh0CiAgICBid2lwZSEgY2NjLnR4dAogIGVuZHRyeQplbmRmdW5jCgpmdW5jIFRlc3RfYWNkX3dpbl9leGVjdXRlKCkKICBsZXQgY3dkID0gZ2V0Y3dkKCkKICBzZXQgYWNkCiAgY2FsbCB0ZXN0X2F1dG9jaGRpcigpCgogIGNhbGwgbWtkaXIoJ1hhY2REaXInLCAnUicpCiAgbGV0IHdpbmlkID0gd2luX2dldGlkKCkKICBuZXcgWGFjZERpci9maWxlCiAgY2FsbCBhc3NlcnRfbWF0Y2goJ3Rlc3RkaXIuWGFjZERpciQnLCBnZXRjd2QoKSkKICBjZCAuLgogIGNhbGwgYXNzZXJ0X21hdGNoKCd0ZXN0ZGlyJCcsIGdldGN3ZCgpKQogIGNhbGwgd2luX2V4ZWN1dGUod2luaWQsICdlY2hvJykKICBjYWxsIGFzc2VydF9tYXRjaCgndGVzdGRpciQnLCBnZXRjd2QoKSkKCiAgYndpcGUhCiAgc2V0IG5vYWNkCiAgY2FsbCBjaGRpcihjd2QpCmVuZGZ1bmMKCmZ1bmMgVGVzdF92ZXJib3NlX3B3ZCgpCiAgbGV0IGN3ZCA9IGdldGN3ZCgpCiAgY2FsbCB0ZXN0X2F1dG9jaGRpcigpCgogIGVkaXQgZ2xvYmFsLnR4dAogIGNhbGwgYXNzZXJ0X21hdGNoKCdcW2dsb2JhbFxdLip0ZXN0ZGlyJCcsIGV4ZWN1dGUoJ3ZlcmJvc2UgcHdkJykpCgogIGNhbGwgbWtkaXIoJ1hhdXRvZGlyJywgJ1InKQogIHNwbGl0IFhhdXRvZGlyL2xvY2FsLnR4dAogIGxjZCBYYXV0b2RpcgogIGNhbGwgYXNzZXJ0X21hdGNoKCdcW3dpbmRvd1xdLip0ZXN0ZGlyWy9cXF1YYXV0b2RpcicsIGV4ZWN1dGUoJ3ZlcmJvc2UgcHdkJykpCgogIHNldCBhY2QKICB3aW5jbWQgdwogIGNhbGwgYXNzZXJ0X21hdGNoKCdcW2F1dG9jaGRpclxdLip0ZXN0ZGlyJCcsIGV4ZWN1dGUoJ3ZlcmJvc2UgcHdkJykpCiAgZXhlY3V0ZSAndGNkJyBjd2QKICBjYWxsIGFzc2VydF9tYXRjaCgnXFt0YWJwYWdlXF0uKnRlc3RkaXIkJywgZXhlY3V0ZSgndmVyYm9zZSBwd2QnKSkKICBleGVjdXRlICdjZCcgY3dkCiAgY2FsbCBhc3NlcnRfbWF0Y2goJ1xbZ2xvYmFsXF0uKnRlc3RkaXIkJywgZXhlY3V0ZSgndmVyYm9zZSBwd2QnKSkKICBleGVjdXRlICdsY2QnIGN3ZAogIGNhbGwgYXNzZXJ0X21hdGNoKCdcW3dpbmRvd1xdLip0ZXN0ZGlyJCcsIGV4ZWN1dGUoJ3ZlcmJvc2UgcHdkJykpCiAgZWRpdAogIGNhbGwgYXNzZXJ0X21hdGNoKCdcW2F1dG9jaGRpclxdLip0ZXN0ZGlyJCcsIGV4ZWN1dGUoJ3ZlcmJvc2UgcHdkJykpCiAgZW5ldwogIHdpbmNtZCB3CiAgY2FsbCBhc3NlcnRfbWF0Y2goJ1xbYXV0b2NoZGlyXF0uKnRlc3RkaXJbL1xcXVhhdXRvZGlyJywgZXhlY3V0ZSgndmVyYm9zZSBwd2QnKSkKICB3aW5jbWQgdwogIGNhbGwgYXNzZXJ0X21hdGNoKCdcW3dpbmRvd1xdLip0ZXN0ZGlyJCcsIGV4ZWN1dGUoJ3ZlcmJvc2UgcHdkJykpCiAgd2luY21kIHcKICBjYWxsIGFzc2VydF9tYXRjaCgnXFthdXRvY2hkaXJcXS4qdGVzdGRpclsvXFxdWGF1dG9kaXInLCBleGVjdXRlKCd2ZXJib3NlIHB3ZCcpKQogIHNldCBub2FjZAogIGNhbGwgYXNzZXJ0X21hdGNoKCdcW2F1dG9jaGRpclxdLip0ZXN0ZGlyWy9cXF1YYXV0b2RpcicsIGV4ZWN1dGUoJ3ZlcmJvc2UgcHdkJykpCiAgd2luY21kIHcKICBjYWxsIGFzc2VydF9tYXRjaCgnXFt3aW5kb3dcXS4qdGVzdGRpciQnLCBleGVjdXRlKCd2ZXJib3NlIHB3ZCcpKQogIGV4ZWN1dGUgJ2NkJyBjd2QKICBjYWxsIGFzc2VydF9tYXRjaCgnXFtnbG9iYWxcXS4qdGVzdGRpciQnLCBleGVjdXRlKCd2ZXJib3NlIHB3ZCcpKQogIHdpbmNtZCB3CiAgY2FsbCBhc3NlcnRfbWF0Y2goJ1xbd2luZG93XF0uKnRlc3RkaXJbL1xcXVhhdXRvZGlyJywgZXhlY3V0ZSgndmVyYm9zZSBwd2QnKSkKCiAgYndpcGUhCiAgY2FsbCBjaGRpcihjd2QpCmVuZGZ1bmMKCmZ1bmMgVGVzdF9tdWx0aWJ5dGUoKQogICIgdXNpbmcgYW4gaW52YWxpZCBjaGFyYWN0ZXIgc2hvdWxkIG5vdCBjYXVzZSBhIGNyYXNoCiAgc2V0IHdpYwogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd0YyD7jY2NpionLCBoYXMoJ3dpbjMyJykgPyAnRTQ4MDonIDogJ0UzNDQ6JykKICBzZXQgbm93aWMKZW5kZnVuYwoKCiIgdmltOiBzaGlmdHdpZHRoPTIgc3RzPTIgZXhwYW5kdGFiCg==