joplin/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js

1 line
1.2 MiB

module.exports = `IWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMubWVybWFpZD1lKCk6dC5tZXJtYWlkPWUoKX0oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gbihyKXtpZihlW3JdKXJldHVybiBlW3JdLmV4cG9ydHM7dmFyIGk9ZVtyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbcl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsbiksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gbi5tPXQsbi5jPWUsbi5kPWZ1bmN0aW9uKHQsZSxyKXtuLm8odCxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxuLnI9ZnVuY3Rpb24odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbi50PWZ1bmN0aW9uKHQsZSl7aWYoMSZlJiYodD1uKHQpKSw4JmUpcmV0dXJuIHQ7aWYoNCZlJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pLDImZSYmInN0cmluZyIhPXR5cGVvZiB0KWZvcih2YXIgaSBpbiB0KW4uZChyLGksZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19LmJpbmQobnVsbCxpKSk7cmV0dXJuIHJ9LG4ubj1mdW5jdGlvbih0KXt2YXIgZT10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gbi5kKGUsImEiLGUpLGV9LG4ubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sbi5wPSIiLG4obi5zPTM5MCl9KFtmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24ucihlKSxuLmQoZSwidmVyc2lvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSksbi5kKGUsImJpc2VjdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKGUsImJpc2VjdFJpZ2h0IiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQoZSwiYmlzZWN0TGVmdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSksbi5kKGUsImFzY2VuZGluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKGUsImJpc2VjdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKSxuLmQoZSwiY3Jvc3MiLChmdW5jdGlvbigpe3JldHVybiBmfSkpLG4uZChlLCJkZXNjZW5kaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gZH0pKSxuLmQoZSwiZGV2aWF0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ30pKSxuLmQoZSwiZXh0ZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gbX0pKSxuLmQoZSwiaGlzdG9ncmFtIiwoZnVuY3Rpb24oKXtyZXR1cm4gTn0pKSxuLmQoZSwidGhyZXNob2xkRnJlZWRtYW5EaWFjb25pcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIER9KSksbi5kKGUsInRocmVzaG9sZFNjb3R0IiwoZnVuY3Rpb24oKXtyZXR1cm4gTH0pKSxuLmQoZSwidGhyZXNob2xkU3R1cmdlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE99KSksbi5kKGUsIm1heCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSksbi5kKGUsIm1lYW4iLChmdW5jdGlvbigpe3JldHVybiBSfSkpLG4uZChlLCJtZWRpYW4iLChmdW5jdGlvbigpe3JldHVybiBGfSkpLG4uZChlLCJtZXJnZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSksbi5kKGUsIm1pbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSksbi5kKGUsInBhaXJzIiwoZnVuY3Rpb24oKXtyZXR1cm4gbH0pKSxuLmQoZSwicGVybXV0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFl9KSksbi5kKGUsInF1YW50aWxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gQn0pKSxuLmQoZSwicmFuZ2UiLChmdW5jdGlvbigpe3JldHVybiB3fSkpLG4uZChlLCJzY2FuIiwoZnVuY3Rpb24oKXtyZXR1cm4gen0pKSxuLmQoZSwic2h1ZmZsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFV9KSksbi5kKGUsInN1bSIsKGZ1bmN0aW9uKCl7cmV0dXJuICR9KSksbi5kKGUsInRpY2tzIiwoZnVuY3Rpb24oKXtyZXR1cm4gU30pKSxuLmQoZSwidGlja0luY3JlbWVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSksbi5kKGUsInRpY2tTdGVwIiwoZnVuY3Rpb24oKXtyZXR1cm4gTX0pKSxuLmQoZSwidHJhbnNwb3NlIiwoZnVuY3Rpb24oKXtyZXR1cm4gcX0pKSxuLmQoZSwidmFyaWFuY2UiLChmdW5jdGlvbigpe3JldHVybiB5fSkpLG4uZChlLCJ6aXAiLChmdW5jdGlvbigpe3JldHVybiBIfSkpLG4uZChlLCJheGlzVG9wIiwoZnVuY3Rpb24oKXtyZXR1cm4gZXR9KSksbi5kKGUsImF4aXNSaWdodCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG50fSkpLG4uZChlLCJheGlzQm90dG9tIiwoZnVuY3Rpb24oKXtyZXR1cm4gcnR9KSksbi5kKGUsImF4aXNMZWZ0IiwoZnVuY3Rpb24oKXtyZXR1cm4gaXR9KSksbi5kKGUsImJydXNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2l9KSksbi5kKGUsImJydXNoWCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRpfSkpLG4uZChlLCJicnVzaFkiLChmdW5jdGlvbigpe3JldHVybiBFaX0pKSxuLmQoZSwiYnJ1c2hTZWxlY3Rpb24iLChmdW5jdGlvbigpe3JldHVybiB3aX0pKSxuLmQoZSwiY2hvcmQiLChmdW5jdGlvbigpe3JldHVybiBJaX0pKSxuLmQoZSwicmliYm9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gWGl9KSksbi5kKGUsIm5lc3QiLChmdW5jdGlvbigpe3JldHVybiBKaX0pKSxuLmQoZSwic2V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gc2F9KSksbi5kKGUsIm1hcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFpfSkpLG4uZChlLCJrZXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gY2F9KSksbi5kKGUsInZhbHVlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVhfSkpLG4uZChlLCJlbnRyaWVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gbGF9KSksbi5kKGUsImNvbG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gcWV9KSksbi5kKGUsInJnYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdlfSkpLG4uZChlLCJoc2wiLChmdW5jdGlvbigpe3JldHVybiBlbn0pKSxuLmQoZSwibGFiIiwoZnVuY3Rpb24oKXtyZXR1cm4geWF9KSksbi5kKGUsImhjbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdhfSkpLG4uZChlLCJsY2giLChmdW5jdGlvbigpe3JldHVybiBrYX0pKSxuLmQoZSwiZ3JheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBhfSkpLG4uZChlLCJjdWJlaGVsaXgiLChmdW5jdGlvbigpe3JldHVybiBOYX0pKSxuLmQoZSwiY29udG91cnMiLChmdW5jdGlvbigpe3JldHVybiB6YX0pKSxuLmQoZSwiY29udG91ckRlbnNpdHkiLChmdW5jdGlvbigpe3JldHVybiBWYX0pKSxuLmQoZSwiZGlzcGF0Y2giLChmdW5jdGlvbigpe3JldHVybiBodH0pKSxuLmQoZSwiZHJhZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRvfSkpLG4uZChlLCJkcmFnRGlzYWJsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIENlfSkpLG4uZChlLCJkcmFnRW5hYmxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gU2V9KSksbi5kKGUsImRzdkZvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNvfSkpLG4uZChlLCJjc3ZQYXJzZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVvfSkpLG4uZChlLCJjc3ZQYXJzZVJvd3MiLChmdW5jdGlvbigpe3JldHVybiBsb30pKSxuLmQoZSwiY3N2Rm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gaG99KSksbi5kKGUsImNzdkZvcm1hdEJvZHkiLChmdW5jdGlvbigpe3JldHVybiBmb30pKSxuLmQoZSwiY3N2Rm9ybWF0Um93cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBvfSkpLG4uZChlLCJjc3ZGb3JtYXRSb3ciLChmdW5jdGlvbigpe3JldHVybiB5b30pKSxuLmQoZSwiY3N2Rm9ybWF0VmFsdWUiLChmdW5jdGlvbigpe3JldHVybiBnb30pKSxuLmQoZSwidHN2UGFyc2UiLChmdW5jdGlvbigpe3JldHVybiB2b30pKSxuLmQoZSwidHN2UGFyc2VSb3dzIiwoZnVuY3Rpb24oKXtyZXR1cm4gYm99KSksbi5kKGUsInRzdkZvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhvfSkpLG4uZChlLCJ0c3ZGb3JtYXRCb2R5IiwoZnVuY3Rpb24oKXtyZXR1cm4gX299KSksbi5kKGUsInRzdkZvcm1hdFJvd3MiLChmdW5jdGlvbigpe3JldHVybiBrb30pKSxuLmQoZSwidHN2Rm9ybWF0Um93IiwoZnVuY3Rpb24oKXtyZXR1cm4gd299KSksbi5kKGUsInRzdkZvcm1hdFZhbHVlIiwoZnVuY3Rpb24oKXtyZXR1cm4gVG99KSksbi5kKGUsImF1dG9UeXBlIiwoZnVuY3Rpb24oKXtyZXR1cm4gRW99KSksbi5kKGUsImVhc2VMaW5lYXIiLChmdW5jdGlvbigpe3JldHVybiBTb30pKSxuLmQoZSwiZWFzZVF1YWQiLChmdW5jdGlvbigpe3JldHVybiBPb30pKSxuLmQoZSwiZWFzZVF1YWRJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFvfSkpLG4uZChlLCJlYXNlUXVhZE91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1vfSkpLG4uZChlLCJlYXNlUXVhZEluT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gT299KSksbi5kKGUsImVhc2VDdWJpYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZyfSkpLG4uZChlLCJlYXNlQ3ViaWNJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdyfSkpLG4uZChlLCJlYXNlQ3ViaWNPdXQiLChmdW5jdGlvbigpe3JldHVybiBIcn0pKSxuLmQoZSwiZWFzZUN1YmljSW5PdXQiLChmdW5jdGlvbigpe3JldHVybiBWcn0pKSxuLmQoZSwiZWFzZVBvbHkiLChmdW5jdGlvbigpe3JldHVybiBEb30pKSxuLmQoZSwiZWFzZVBvbHlJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIE5vfSkpLG4uZChlLCJlYXNlUG9seU91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJvfSkpLG4uZChlLCJlYXNlUG9seUluT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gRG99KSksbi5kKGUsImVhc2VTaW4iLChmdW5jdGlvbigpe3JldHVybiBQb30pKSxuLmQoZSwiZWFzZVNpbkluIiwoZnVuY3Rpb24oKXtyZXR1cm4gUm99KSksbi5kKGUsImVhc2VTaW5PdXQiLChmdW5jdGlvbigpe3JldHVybiBGb30pKSxuLmQoZSwiZWFzZVNpbkluT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gUG99KSksbi5kKGUsImVhc2VFeHAiLChmdW5jdGlvbigpe3JldHVybiBVb30pKSxuLmQoZSwiZWFzZUV4cEluIiwoZnVuY3Rpb24oKXtyZXR1cm4gWW99KSksbi5kKGUsImVhc2VFeHBPdXQiLChmdW5jdGlvbigpe3JldHVybiB6b30pKSxuLmQoZSwiZWFzZUV4cEluT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gVW99KSksbi5kKGUsImVhc2VDaXJjbGUiLChmdW5jdGlvbigpe3JldHVybiBXb30pKSxuLmQoZSwiZWFzZUNpcmNsZUluIiwoZnVuY3Rpb24oKXtyZXR1cm4gJG99KSksbi5kKGUsImVhc2VDaXJjbGVPdXQiLChmdW5jdGlvbigpe3JldHVybiBxb30pKSxuLmQoZSwiZWFzZUNpcmNsZUluT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gV299KSksbi5kKGUsImVhc2VCb3VuY2UiLChmdW5jdGlvbigpe3JldHVybiBWb30pKSxuLmQoZSwiZWFzZUJvdW5jZUluIiwoZnVuY3Rpb24oKXtyZXR1cm4gSG99KSksbi5kKGUsImVhc2VCb3VuY2VPdXQiLChmdW5jdGlvbigpe3JldHVybiBWb30pKSxuLmQoZSwiZWFzZUJvdW5jZUluT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gR299KSksbi5kKGUsImVhc2VCYWNrIiwoZnVuY3Rpb24oKXtyZXR1cm4gS299KSksbi5kKGUsImVhc2VCYWNrSW4iLChmdW5jdGlvbigpe3JldHVybiBYb30pKSxuLmQoZSwiZWFzZUJhY2tPdXQiLChmdW5jdGlvbigpe3JldHVybiBab30pKSxuLmQoZSwiZWFzZUJhY2tJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEtvfSkpLG4uZChlLCJlYXNlRWxhc3RpYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRzfSkpLG4uZChlLCJlYXNlRWxhc3RpY0luIiwoZnVuY3Rpb24oKXtyZXR1cm4gSm99KSksbi5kKGUsImVhc2VFbGFzdGljT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gdHN9KSksbi5kKGUsImVhc2VFbGFzdGljSW5PdXQiLChmdW5jdGlvbigpe3JldHVybiBlc30pKSxuLmQoZSwiYmxvYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJzfSkpLG4uZChlLCJidWZmZXIiLChmdW5jdGlvbigpe3JldHVybiBhc30pKSxuLmQoZSwiZHN2IiwoZnVuY3Rpb24oKXtyZXR1cm4gdXN9KSksbi5kKGUsImNzdiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGxzfSkpLG4uZChlLCJ0c3YiLChmdW5jdGlvbigpe3JldHVybiBoc30pKSxuLmQoZSwiaW1hZ2UiLChmdW5jdGlvbigpe3JldHVybiBmc30pKSxuLmQoZSwianNvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBzfSkpLG4uZChlLCJ0ZXh0IiwoZnVuY3Rpb24oKXtyZXR1cm4gc3N9KSksbi5kKGUsInhtbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdzfSkpLG4uZChlLCJodG1sIiwoZnVuY3Rpb24oKXtyZXR1cm4gbXN9KSksbi5kKGUsInN2ZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZzfSkpLG4uZChlLCJmb3JjZUNlbnRlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJzfSkpLG4uZChlLCJmb3JjZUNvbGxpZGUiLChmdW5jdGlvbigpe3JldHVybiBCc30pKSxuLmQoZSwiZm9yY2VMaW5rIiwoZnVuY3Rpb24oKXtyZXR1cm4gSXN9KSksbi5kKGUsImZvcmNlTWFueUJvZHkiLChmdW5jdGlvbigpe3JldHVybiBZc30pKSxuLmQoZSwiZm9yY2VSYWRpYWwiLChmdW5jdGlvbigpe3JldHVybiB6c30pKSxuLmQoZSwiZm9yY2VTaW11bGF0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4ganN9KSksbi5kKGUsImZvcmNlWCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVzfSkpLG4uZChlLCJmb3JjZVkiLChmdW5jdGlvbigpe3JldHVybiAkc30pKSxuLmQoZSwiZm9ybWF0RGVmYXVsdExvY2FsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFjfSkpLG4uZChlLCJmb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBLc30pKSxuLmQoZSwiZm9ybWF0UHJlZml4IiwoZnVuY3Rpb24oKXtyZXR1cm4gUXN9KSksbi5kKGUsImZvcm1hdExvY2FsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGljfSkpLG4uZChlLCJmb3JtYXRTcGVjaWZpZXIiLChmdW5jdGlvbigpe3JldHVybiBWc30pKSxuLmQoZSwiRm9ybWF0U3BlY2lmaWVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gR3N9KSksbi5kKGUsInByZWNpc2lvbkZpeGVkIiwoZnVuY3Rpb24oKXtyZXR1cm4gb2N9KSksbi5kKGUsInByZWNpc2lvblByZWZpeCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNjfSkpLG4uZChlLCJwcmVjaXNpb25Sb3VuZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNjfSkpLG4uZChlLCJnZW9BcmVhIiwoZnVuY3Rpb24oKXtyZXR1cm4gSmN9KSksbi5kKGUsImdlb0JvdW5kcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFd1fSkpLG4uZChlLCJnZW9DZW50cm9pZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJsfSkpLG4uZChlLCJnZW9DaXJjbGUiLChmdW5jdGlvbigpe3JldHVybiBwbH0pKSxuLmQoZSwiZ2VvQ2xpcEFudGltZXJpZGlhbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIENsfSkpLG4uZChlLCJnZW9DbGlwQ2lyY2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gU2x9KSksbi5kKGUsImdlb0NsaXBFeHRlbnQiLChmdW5jdGlvbigpe3JldHVybiBCbH0pKSxuLmQoZSwiZ2VvQ2xpcFJlY3RhbmdsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFsfSkpLG4uZChlLCJnZW9Db250YWlucyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFpsfSkpLG4uZChlLCJnZW9EaXN0YW5jZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpsfSkpLG4uZChlLCJnZW9HcmF0aWN1bGUiLChmdW5jdGlvbigpe3JldHVybiBKbH0pKSxuLmQoZSwiZ2VvR3JhdGljdWxlMTAiLChmdW5jdGlvbigpe3JldHVybiB0aH0pKSxuLmQoZSwiZ2VvSW50ZXJwb2xhdGUiLChmdW5jdGlvbigpe3JldHVybiBhaH0pKSxuLmQoZSwiZ2VvTGVuZ3RoIiwoZnVuY3Rpb24oKXtyZXR1cm4gUGx9KSksbi5kKGUsImdlb1BhdGgiLChmdW5jdGlvbigpe3JldHVybiByZn0pKSxuLmQoZSwiZ2VvQWxiZXJzIiwoZnVuY3Rpb24oKXtyZXR1cm4gd2Z9KSksbi5kKGUsImdlb0FsYmVyc1VzYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRmfSkpLG4uZChlLCJnZW9BemltdXRoYWxFcXVhbEFyZWEiLChmdW5jdGlvbigpe3JldHVybiBBZn0pKSxuLmQoZSwiZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gU2Z9KSksbi5kKGUsImdlb0F6aW11dGhhbEVxdWlkaXN0YW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gT2Z9KSksbi5kKGUsImdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gTWZ9KSksbi5kKGUsImdlb0NvbmljQ29uZm9ybWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gUmZ9KSksbi5kKGUsImdlb0NvbmljQ29uZm9ybWFsUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gSWZ9KSksbi5kKGUsImdlb0NvbmljRXF1YWxBcmVhIiwoZnVuY3Rpb24oKXtyZXR1cm4ga2Z9KSksbi5kKGUsImdlb0NvbmljRXF1YWxBcmVhUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gX2Z9KSksbi5kKGUsImdlb0NvbmljRXF1aWRpc3RhbnQiLChmdW5jdGlvbigpe3JldHVybiBZZn0pKSxuLmQoZSwiZ2VvQ29uaWNFcXVpZGlzdGFudFJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpmfSkpLG4uZChlLCJnZW9FcXVhbEVhcnRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gVmZ9KSksbi5kKGUsImdlb0VxdWFsRWFydGhSYXciLChmdW5jdGlvbigpe3JldHVybiBIZn0pKSxuLmQoZSwiZ2VvRXF1aXJlY3Rhbmd1bGFyIiwoZnVuY3Rpb24oKXtyZXR1cm4gUGZ9KSksbi5kKGUsImdlb0VxdWlyZWN0YW5ndWxhclJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZmfSkpLG4uZChlLCJnZW9Hbm9tb25pYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFhmfSkpLG4uZChlLCJnZW9Hbm9tb25pY1JhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdmfSkpLG4uZChlLCJnZW9JZGVudGl0eSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFpmfSkpLG4uZChlLCJnZW9Qcm9qZWN0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gdmZ9KSksbi5kKGUsImdlb1Byb2plY3Rpb25NdXRhdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gYmZ9KSksbi5kKGUsImdlb01lcmNhdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gQmZ9KSksbi5kKGUsImdlb01lcmNhdG9yUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gTmZ9KSksbi5kKGUsImdlb05hdHVyYWxFYXJ0aDEiLChmdW5jdGlvbigpe3JldHVybiBRZn0pKSxuLmQoZSwiZ2VvTmF0dXJhbEVhcnRoMVJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEtmfSkpLG4uZChlLCJnZW9PcnRob2dyYXBoaWMiLChmdW5jdGlvbigpe3JldHVybiB0ZH0pKSxuLmQoZSwiZ2VvT3J0aG9ncmFwaGljUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gSmZ9KSksbi5kKGUsImdlb1N0ZXJlb2dyYXBoaWMiLChmdW5jdGlvbigpe3JldHVybiBuZH0pKSxuLmQoZSwiZ2VvU3RlcmVvZ3JhcGhpY1JhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGVkfSkpLG4uZChlLCJnZW9UcmFuc3ZlcnNlTWVyY2F0b3IiLChmdW5jdGlvbigpe3JldHVybiBpZH0pKSxuLmQoZSwiZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gcmR9KSksbi5kKGUsImdlb1JvdGF0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gaGx9KSksbi5kKGUsImdlb1N0cmVhbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdjfSkpLG4uZChlLCJnZW9UcmFuc2Zvcm0iLChmdW5jdGlvbigpe3JldHVybiBhZn0pKSxuLmQoZSwiY2x1c3RlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNkfSkpLG4uZChlLCJoaWVyYXJjaHkiLChmdW5jdGlvbigpe3JldHVybiBsZH0pKSxuLmQoZSwicGFjayIsKGZ1bmN0aW9uKCl7cmV0dXJuIElkfSkpLG4uZChlLCJwYWNrU2libGluZ3MiLChmdW5jdGlvbigpe3JldHVybiBNZH0pKSxuLmQoZSwicGFja0VuY2xvc2UiLChmdW5jdGlvbigpe3JldHVybiBnZH0pKSxuLmQoZSwicGFydGl0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gemR9KSksbi5kKGUsInN0cmF0aWZ5IiwoZnVuY3Rpb24oKXtyZXR1cm4gSGR9KSksbi5kKGUsInRyZWUiLChmdW5jdGlvbigpe3JldHVybiBKZH0pKSxuLmQoZSwidHJlZW1hcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGlwfSkpLG4uZChlLCJ0cmVlbWFwQmluYXJ5IiwoZnVuY3Rpb24oKXtyZXR1cm4gYXB9KSksbi5kKGUsInRyZWVtYXBEaWNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gWWR9KSksbi5kKGUsInRyZWVtYXBTbGljZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRwfSkpLG4uZChlLCJ0cmVlbWFwU2xpY2VEaWNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gb3B9KSksbi5kKGUsInRyZWVtYXBTcXVhcmlmeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJwfSkpLG4uZChlLCJ0cmVlbWFwUmVzcXVhcmlmeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1ufSkpLG4uZChlLCJpbnRlcnBvbGF0ZUFycmF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gYm59KSksbi5kKGUsImludGVycG9sYXRlQmFzaXMiLChmdW5jdGlvbigpe3JldHVybiBvbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNufSkpLG4uZChlLCJpbnRlcnBvbGF0ZURhdGUiLChmdW5jdGlvbigpe3JldHVybiBfbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVEaXNjcmV0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUh1ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZU51bWJlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtufSkpLG4uZChlLCJpbnRlcnBvbGF0ZU51bWJlckFycmF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gbW59KSksbi5kKGUsImludGVycG9sYXRlT2JqZWN0IiwoZnVuY3Rpb24oKXtyZXR1cm4gd259KSksbi5kKGUsImludGVycG9sYXRlUm91bmQiLChmdW5jdGlvbigpe3JldHVybiBscH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVTdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBBbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MiLChmdW5jdGlvbigpe3JldHVybiBmcn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmciLChmdW5jdGlvbigpe3JldHVybiBkcn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVab29tIiwoZnVuY3Rpb24oKXtyZXR1cm4gZHB9KSksbi5kKGUsImludGVycG9sYXRlUmdiIiwoZnVuY3Rpb24oKXtyZXR1cm4gZG59KSksbi5kKGUsImludGVycG9sYXRlUmdiQmFzaXMiLChmdW5jdGlvbigpe3JldHVybiB5bn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdufSkpLG4uZChlLCJpbnRlcnBvbGF0ZUhzbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUhzbExvbmciLChmdW5jdGlvbigpe3JldHVybiBncH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVMYWIiLChmdW5jdGlvbigpe3JldHVybiBtcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIY2wiLChmdW5jdGlvbigpe3JldHVybiBicH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIY2xMb25nIiwoZnVuY3Rpb24oKXtyZXR1cm4geHB9KSksbi5kKGUsImludGVycG9sYXRlQ3ViZWhlbGl4IiwoZnVuY3Rpb24oKXtyZXR1cm4ga3B9KSksbi5kKGUsImludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdwfSkpLG4uZChlLCJwaWVjZXdpc2UiLChmdW5jdGlvbigpe3JldHVybiBUcH0pKSxuLmQoZSwicXVhbnRpemUiLChmdW5jdGlvbigpe3JldHVybiBFcH0pKSxuLmQoZSwicGF0aCIsKGZ1bmN0aW9uKCl7cmV0dXJuICRpfSkpLG4uZChlLCJwb2x5Z29uQXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIENwfSkpLG4uZChlLCJwb2x5Z29uQ2VudHJvaWQiLChmdW5jdGlvbigpe3JldHVybiBTcH0pKSxuLmQoZSwicG9seWdvbkh1bGwiLChmdW5jdGlvbigpe3JldHVybiBPcH0pKSxuLmQoZSwicG9seWdvbkNvbnRhaW5zIiwoZnVuY3Rpb24oKXtyZXR1cm4gTnB9KSksbi5kKGUsInBvbHlnb25MZW5ndGgiLChmdW5jdGlvbigpe3JldHVybiBCcH0pKSxuLmQoZSwicXVhZHRyZWUiLChmdW5jdGlvbigpe3JldHVybiBDc30pKSxuLmQoZSwicmFuZG9tVW5pZm9ybSIsKGZ1bmN0aW9uKCl7cmV0dXJuIExwfSkpLG4uZChlLCJyYW5kb21Ob3JtYWwiLChmdW5jdGlvbigpe3JldHVybiBJcH0pKSxuLmQoZSwicmFuZG9tTG9nTm9ybWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gUnB9KSksbi5kKGUsInJhbmRvbUJhdGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gUHB9KSksbi5kKGUsInJhbmRvbUlyd2luSGFsbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZwfSkpLG4uZChlLCJyYW5kb21FeHBvbmVudGlhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpwfSkpLG4uZChlLCJzY2FsZUJhbmQiLChmdW5jdGlvbigpe3JldHVybiBWcH0pKSxuLmQoZSwic2NhbGVQb2ludCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFhwfSkpLG4uZChlLCJzY2FsZUlkZW50aXR5IiwoZnVuY3Rpb24oKXtyZXR1cm4gdXl9KSksbi5kKGUsInNjYWxlTGluZWFyIiwoZnVuY3Rpb24oKXtyZXR1cm4gY3l9KSksbi5kKGUsInNjYWxlTG9nIiwoZnVuY3Rpb24oKXtyZXR1cm4gdnl9KSksbi5kKGUsInNjYWxlU3ltbG9nIiwoZnVuY3Rpb24oKXtyZXR1cm4ga3l9KSksbi5kKGUsInNjYWxlT3JkaW5hbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEhwfSkpLG4uZChlLCJzY2FsZUltcGxpY2l0IiwoZnVuY3Rpb24oKXtyZXR1cm4gV3B9KSksbi5kKGUsInNjYWxlUG93IiwoZnVuY3Rpb24oKXtyZXR1cm4gU3l9KSksbi5kKGUsInNjYWxlU3FydCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF5fSkpLG4uZChlLCJzY2FsZVF1YW50aWxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gTXl9KSksbi5kKGUsInNjYWxlUXVhbnRpemUiLChmdW5jdGlvbigpe3JldHVybiBPeX0pKSxuLmQoZSwic2NhbGVUaHJlc2hvbGQiLChmdW5jdGlvbigpe3JldHVybiBOeX0pKSxuLmQoZSwic2NhbGVUaW1lIiwoZnVuY3Rpb24oKXtyZXR1cm4gcHZ9KSksbi5kKGUsInNjYWxlVXRjIiwoZnVuY3Rpb24oKXtyZXR1cm4gVHZ9KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFN2fSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWxMb2ciLChmdW5jdGlvbigpe3JldHVybiBBdn0pKSxuLmQoZSwic2NhbGVTZXF1ZW50aWFsUG93IiwoZnVuY3Rpb24oKXtyZXR1cm4gT3Z9KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbFNxcnQiLChmdW5jdGlvbigpe3JldHVybiBOdn0pKSxuLmQoZSwic2NhbGVTZXF1ZW50aWFsU3ltbG9nIiwoZnVuY3Rpb24oKXtyZXR1cm4gTXZ9KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbFF1YW50aWxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gQnZ9KSksbi5kKGUsInNjYWxlRGl2ZXJnaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gTHZ9KSksbi5kKGUsInNjYWxlRGl2ZXJnaW5nTG9nIiwoZnVuY3Rpb24oKXtyZXR1cm4gSXZ9KSksbi5kKGUsInNjYWxlRGl2ZXJnaW5nUG93IiwoZnVuY3Rpb24oKXtyZXR1cm4gRnZ9KSksbi5kKGUsInNjYWxlRGl2ZXJnaW5nU3FydCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFB2fSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ1N5bWxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJ2fSkpLG4uZChlLCJ0aWNrRm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gb3l9KSksbi5kKGUsInNjaGVtZUNhdGVnb3J5MTAiLChmdW5jdGlvbigpe3JldHVybiBZdn0pKSxuLmQoZSwic2NoZW1lQWNjZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4genZ9KSksbi5kKGUsInNjaGVtZURhcmsyIiwoZnVuY3Rpb24oKXtyZXR1cm4gVXZ9KSksbi5kKGUsInNjaGVtZVBhaXJlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuICR2fSkpLG4uZChlLCJzY2hlbWVQYXN0ZWwxIiwoZnVuY3Rpb24oKXtyZXR1cm4gcXZ9KSksbi5kKGUsInNjaGVtZVBhc3RlbDIiLChmdW5jdGlvbigpe3JldHVybiBXdn0pKSxuLmQoZSwic2NoZW1lU2V0MSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEh2fSkpLG4uZChlLCJzY2hlbWVTZXQyIiwoZnVuY3Rpb24oKXtyZXR1cm4gVnZ9KSksbi5kKGUsInNjaGVtZVNldDMiLChmdW5jdGlvbigpe3JldHVybiBHdn0pKSxuLmQoZSwic2NoZW1lVGFibGVhdTEwIiwoZnVuY3Rpb24oKXtyZXR1cm4gWHZ9KSksbi5kKGUsImludGVycG9sYXRlQnJCRyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFF2fSkpLG4uZChlLCJzY2hlbWVCckJHIiwoZnVuY3Rpb24oKXtyZXR1cm4gS3Z9KSksbi5kKGUsImludGVycG9sYXRlUFJHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRifSkpLG4uZChlLCJzY2hlbWVQUkduIiwoZnVuY3Rpb24oKXtyZXR1cm4gSnZ9KSksbi5kKGUsImludGVycG9sYXRlUGlZRyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5ifSkpLG4uZChlLCJzY2hlbWVQaVlHIiwoZnVuY3Rpb24oKXtyZXR1cm4gZWJ9KSksbi5kKGUsImludGVycG9sYXRlUHVPciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGlifSkpLG4uZChlLCJzY2hlbWVQdU9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gcmJ9KSksbi5kKGUsImludGVycG9sYXRlUmRCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG9ifSkpLG4uZChlLCJzY2hlbWVSZEJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gYWJ9KSksbi5kKGUsImludGVycG9sYXRlUmRHeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNifSkpLG4uZChlLCJzY2hlbWVSZEd5IiwoZnVuY3Rpb24oKXtyZXR1cm4gc2J9KSksbi5kKGUsImludGVycG9sYXRlUmRZbEJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gbGJ9KSksbi5kKGUsInNjaGVtZVJkWWxCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkWWxHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZifSkpLG4uZChlLCJzY2hlbWVSZFlsR24iLChmdW5jdGlvbigpe3JldHVybiBoYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVTcGVjdHJhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBifSkpLG4uZChlLCJzY2hlbWVTcGVjdHJhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGRifSkpLG4uZChlLCJpbnRlcnBvbGF0ZUJ1R24iLChmdW5jdGlvbigpe3JldHVybiBnYn0pKSxuLmQoZSwic2NoZW1lQnVHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlifSkpLG4uZChlLCJpbnRlcnBvbGF0ZUJ1UHUiLChmdW5jdGlvbigpe3JldHVybiB2Yn0pKSxuLmQoZSwic2NoZW1lQnVQdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG1ifSkpLG4uZChlLCJpbnRlcnBvbGF0ZUduQnUiLChmdW5jdGlvbigpe3JldHVybiB4Yn0pKSxuLmQoZSwic2NoZW1lR25CdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJifSkpLG4uZChlLCJpbnRlcnBvbGF0ZU9yUmQiLChmdW5jdGlvbigpe3JldHVybiBrYn0pKSxuLmQoZSwic2NoZW1lT3JSZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9ifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVB1QnVHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRifSkpLG4uZChlLCJzY2hlbWVQdUJ1R24iLChmdW5jdGlvbigpe3JldHVybiB3Yn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQdUJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2J9KSksbi5kKGUsInNjaGVtZVB1QnUiLChmdW5jdGlvbigpe3JldHVybiBFYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQdVJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gQWJ9KSksbi5kKGUsInNjaGVtZVB1UmQiLChmdW5jdGlvbigpe3JldHVybiBTYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVSZFB1IiwoZnVuY3Rpb24oKXtyZXR1cm4gT2J9KSksbi5kKGUsInNjaGVtZVJkUHUiLChmdW5jdGlvbigpe3JldHVybiBNYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVZbEduQnUiLChmdW5jdGlvbigpe3JldHVybiBCYn0pKSxuLmQoZSwic2NoZW1lWWxHbkJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gTmJ9KSksbi5kKGUsImludGVycG9sYXRlWWxHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIExifSkpLG4uZChlLCJzY2hlbWVZbEduIiwoZnVuY3Rpb24oKXtyZXR1cm4gRGJ9KSksbi5kKGUsImludGVycG9sYXRlWWxPckJyIiwoZnVuY3Rpb24oKXtyZXR1cm4gUmJ9KSksbi5kKGUsInNjaGVtZVlsT3JCciIsKGZ1bmN0aW9uKCl7cmV0dXJuIElifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVlsT3JSZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFBifSkpLG4uZChlLCJzY2hlbWVZbE9yUmQiLChmdW5jdGlvbigpe3JldHVybiBGYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVCbHVlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFlifSkpLG4uZChlLCJzY2hlbWVCbHVlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpifSkpLG4uZChlLCJpbnRlcnBvbGF0ZUdyZWVucyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVifSkpLG4uZChlLCJzY2hlbWVHcmVlbnMiLChmdW5jdGlvbigpe3JldHVybiB6Yn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVHcmV5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFifSkpLG4uZChlLCJzY2hlbWVHcmV5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuICRifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVB1cnBsZXMiLChmdW5jdGlvbigpe3JldHVybiBIYn0pKSxuLmQoZSwic2NoZW1lUHVycGxlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJlZHMiLChmdW5jdGlvbigpe3JldHVybiBHYn0pKSxuLmQoZSwic2NoZW1lUmVkcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZifSkpLG4uZChlLCJpbnRlcnBvbGF0ZU9yYW5nZXMiLChmdW5jdGlvbigpe3JldHVybiBaYn0pKSxuLmQoZSwic2NoZW1lT3JhbmdlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFhifSkpLG4uZChlLCJpbnRlcnBvbGF0ZUNpdmlkaXMiLChmdW5jdGlvbigpe3JldHVybiBLYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0IiwoZnVuY3Rpb24oKXtyZXR1cm4gUWJ9KSksbi5kKGUsImludGVycG9sYXRlUmFpbmJvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG54fSkpLG4uZChlLCJpbnRlcnBvbGF0ZVdhcm0iLChmdW5jdGlvbigpe3JldHVybiBKYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVDb29sIiwoZnVuY3Rpb24oKXtyZXR1cm4gdHh9KSksbi5kKGUsImludGVycG9sYXRlU2luZWJvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG94fSkpLG4uZChlLCJpbnRlcnBvbGF0ZVR1cmJvIiwoZnVuY3Rpb24oKXtyZXR1cm4gc3h9KSksbi5kKGUsImludGVycG9sYXRlVmlyaWRpcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV4fSkpLG4uZChlLCJpbnRlcnBvbGF0ZU1hZ21hIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHh9KSksbi5kKGUsImludGVycG9sYXRlSW5mZXJubyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh4fSkpLG4uZChlLCJpbnRlcnBvbGF0ZVBsYXNtYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ4fSkpLG4uZChlLCJjcmVhdGUiLChmdW5jdGlvbigpe3JldHVybiBkeH0pKSxuLmQoZSwiY3JlYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJlfSkpLG4uZChlLCJsb2NhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl4fSkpLG4uZChlLCJtYXRjaGVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSksbi5kKGUsIm1vdXNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gRG59KSksbi5kKGUsIm5hbWVzcGFjZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFR0fSkpLG4uZChlLCJuYW1lc3BhY2VzIiwoZnVuY3Rpb24oKXtyZXR1cm4gd3R9KSksbi5kKGUsImNsaWVudFBvaW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gTm59KSksbi5kKGUsInNlbGVjdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdlfSkpLG4uZChlLCJzZWxlY3RBbGwiLChmdW5jdGlvbigpe3JldHVybiBteH0pKSxuLmQoZSwic2VsZWN0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4ga2V9KSksbi5kKGUsInNlbGVjdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gZHR9KSksbi5kKGUsInNlbGVjdG9yQWxsIiwoZnVuY3Rpb24oKXtyZXR1cm4geXR9KSksbi5kKGUsInN0eWxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gSXR9KSksbi5kKGUsInRvdWNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gQm59KSksbi5kKGUsInRvdWNoZXMiLChmdW5jdGlvbigpe3JldHVybiB2eH0pKSxuLmQoZSwid2luZG93IiwoZnVuY3Rpb24oKXtyZXR1cm4gTnR9KSksbi5kKGUsImV2ZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gdWV9KSksbi5kKGUsImN1c3RvbUV2ZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4geWV9KSksbi5kKGUsImFyYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGp4fSkpLG4uZChlLCJhcmVhIiwoZnVuY3Rpb24oKXtyZXR1cm4gV3h9KSksbi5kKGUsImxpbmUiLChmdW5jdGlvbigpe3JldHVybiBxeH0pKSxuLmQoZSwicGllIiwoZnVuY3Rpb24oKXtyZXR1cm4gR3h9KSksbi5kKGUsImFyZWFSYWRpYWwiLChmdW5jdGlvbigpe3JldHVybiB0X30pKSxuLmQoZSwicmFkaWFsQXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRffSkpLG4uZChlLCJsaW5lUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gSnh9KSksbi5kKGUsInJhZGlhbExpbmUiLChmdW5jdGlvbigpe3JldHVybiBKeH0pKSxuLmQoZSwicG9pbnRSYWRpYWwiLChmdW5jdGlvbigpe3JldHVybiBlX30pKSxuLmQoZSwibGlua0hvcml6b250YWwiLChmdW5jdGlvbigpe3JldHVybiB1X30pKSxuLmQoZSwibGlua1ZlcnRpY2FsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbF99KSksbi5kKGUsImxpbmtSYWRpYWwiLChmdW5jdGlvbigpe3JldHVybiBoX30pKSxuLmQoZSwic3ltYm9sIiwoZnVuY3Rpb24oKXtyZXR1cm4gTV99KSksbi5kKGUsInN5bWJvbHMiLChmdW5jdGlvbigpe3JldHVybiBBX30pKSxuLmQoZSwic3ltYm9sQ2lyY2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZl99KSksbi5kKGUsInN5bWJvbENyb3NzIiwoZnVuY3Rpb24oKXtyZXR1cm4gZF99KSksbi5kKGUsInN5bWJvbERpYW1vbmQiLChmdW5jdGlvbigpe3JldHVybiBnX30pKSxuLmQoZSwic3ltYm9sU3F1YXJlIiwoZnVuY3Rpb24oKXtyZXR1cm4gX199KSksbi5kKGUsInN5bWJvbFN0YXIiLChmdW5jdGlvbigpe3JldHVybiB4X30pKSxuLmQoZSwic3ltYm9sVHJpYW5nbGUiLChmdW5jdGlvbigpe3JldHVybiB3X30pKSxuLmQoZSwic3ltYm9sV3llIiwoZnVuY3Rpb24oKXtyZXR1cm4gU199KSksbi5kKGUsImN1cnZlQmFzaXNDbG9zZWQiLChmdW5jdGlvbigpe3JldHVybiBJX30pKSxuLmQoZSwiY3VydmVCYXNpc09wZW4iLChmdW5jdGlvbigpe3JldHVybiBGX30pKSxuLmQoZSwiY3VydmVCYXNpcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIERffSkpLG4uZChlLCJjdXJ2ZUJ1bmRsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpffSkpLG4uZChlLCJjdXJ2ZUNhcmRpbmFsQ2xvc2VkIiwoZnVuY3Rpb24oKXtyZXR1cm4gcV99KSksbi5kKGUsImN1cnZlQ2FyZGluYWxPcGVuIiwoZnVuY3Rpb24oKXtyZXR1cm4gSF99KSksbi5kKGUsImN1cnZlQ2FyZGluYWwiLChmdW5jdGlvbigpe3JldHVybiBVX30pKSxuLmQoZSwiY3VydmVDYXRtdWxsUm9tQ2xvc2VkIiwoZnVuY3Rpb24oKXtyZXR1cm4gS199KSksbi5kKGUsImN1cnZlQ2F0bXVsbFJvbU9wZW4iLChmdW5jdGlvbigpe3JldHVybiBKX30pKSxuLmQoZSwiY3VydmVDYXRtdWxsUm9tIiwoZnVuY3Rpb24oKXtyZXR1cm4gWF99KSksbi5kKGUsImN1cnZlTGluZWFyQ2xvc2VkIiwoZnVuY3Rpb24oKXtyZXR1cm4gZWt9KSksbi5kKGUsImN1cnZlTGluZWFyIiwoZnVuY3Rpb24oKXtyZXR1cm4genh9KSksbi5kKGUsImN1cnZlTW9ub3RvbmVYIiwoZnVuY3Rpb24oKXtyZXR1cm4gdWt9KSksbi5kKGUsImN1cnZlTW9ub3RvbmVZIiwoZnVuY3Rpb24oKXtyZXR1cm4gbGt9KSksbi5kKGUsImN1cnZlTmF0dXJhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGRrfSkpLG4uZChlLCJjdXJ2ZVN0ZXAiLChmdW5jdGlvbigpe3JldHVybiB5a30pKSxuLmQoZSwiY3VydmVTdGVwQWZ0ZXIiLChmdW5jdGlvbigpe3JldHVybiBta30pKSxuLmQoZSwiY3VydmVTdGVwQmVmb3JlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ2t9KSksbi5kKGUsInN0YWNrIiwoZnVuY3Rpb24oKXtyZXR1cm4gX2t9KSksbi5kKGUsInN0YWNrT2Zmc2V0RXhwYW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4ga2t9KSksbi5kKGUsInN0YWNrT2Zmc2V0RGl2ZXJnaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gd2t9KSksbi5kKGUsInN0YWNrT2Zmc2V0Tm9uZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZrfSkpLG4uZChlLCJzdGFja09mZnNldFNpbGhvdWV0dGUiLChmdW5jdGlvbigpe3JldHVybiBUa30pKSxuLmQoZSwic3RhY2tPZmZzZXRXaWdnbGUiLChmdW5jdGlvbigpe3JldHVybiBFa30pKSxuLmQoZSwic3RhY2tPcmRlckFwcGVhcmFuY2UiLChmdW5jdGlvbigpe3JldHVybiBDa30pKSxuLmQoZSwic3RhY2tPcmRlckFzY2VuZGluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFrfSkpLG4uZChlLCJzdGFja09yZGVyRGVzY2VuZGluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9rfSkpLG4uZChlLCJzdGFja09yZGVySW5zaWRlT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gTmt9KSksbi5kKGUsInN0YWNrT3JkZXJOb25lIiwoZnVuY3Rpb24oKXtyZXR1cm4gYmt9KSksbi5kKGUsInN0YWNrT3JkZXJSZXZlcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gQmt9KSksbi5kKGUsInRpbWVJbnRlcnZhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx5fSkpLG4uZChlLCJ0aW1lTWlsbGlzZWNvbmQiLChmdW5jdGlvbigpe3JldHVybiB5Z30pKSxuLmQoZSwidGltZU1pbGxpc2Vjb25kcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdnfSkpLG4uZChlLCJ1dGNNaWxsaXNlY29uZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlnfSkpLG4uZChlLCJ1dGNNaWxsaXNlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiBnZ30pKSxuLmQoZSwidGltZVNlY29uZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZnfSkpLG4uZChlLCJ0aW1lU2Vjb25kcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGRnfSkpLG4uZChlLCJ1dGNTZWNvbmQiLChmdW5jdGlvbigpe3JldHVybiBmZ30pKSxuLmQoZSwidXRjU2Vjb25kcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGRnfSkpLG4uZChlLCJ0aW1lTWludXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdWd9KSksbi5kKGUsInRpbWVNaW51dGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gbGd9KSksbi5kKGUsInRpbWVIb3VyIiwoZnVuY3Rpb24oKXtyZXR1cm4gb2d9KSksbi5kKGUsInRpbWVIb3VycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNnfSkpLG4uZChlLCJ0aW1lRGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gcmd9KSksbi5kKGUsInRpbWVEYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaWd9KSksbi5kKGUsInRpbWVXZWVrIiwoZnVuY3Rpb24oKXtyZXR1cm4gVXl9KSksbi5kKGUsInRpbWVXZWVrcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFh5fSkpLG4uZChlLCJ0aW1lU3VuZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gVXl9KSksbi5kKGUsInRpbWVTdW5kYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gWHl9KSksbi5kKGUsInRpbWVNb25kYXkiLChmdW5jdGlvbigpe3JldHVybiAkeX0pKSxuLmQoZSwidGltZU1vbmRheXMiLChmdW5jdGlvbigpe3JldHVybiBaeX0pKSxuLmQoZSwidGltZVR1ZXNkYXkiLChmdW5jdGlvbigpe3JldHVybiBxeX0pKSxuLmQoZSwidGltZVR1ZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gS3l9KSksbi5kKGUsInRpbWVXZWRuZXNkYXkiLChmdW5jdGlvbigpe3JldHVybiBXeX0pKSxuLmQoZSwidGltZVdlZG5lc2RheXMiLChmdW5jdGlvbigpe3JldHVybiBReX0pKSxuLmQoZSwidGltZVRodXJzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gSHl9KSksbi5kKGUsInRpbWVUaHVyc2RheXMiLChmdW5jdGlvbigpe3JldHVybiBKeX0pKSxuLmQoZSwidGltZUZyaWRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZ5fSkpLG4uZChlLCJ0aW1lRnJpZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRnfSkpLG4uZChlLCJ0aW1lU2F0dXJkYXkiLChmdW5jdGlvbigpe3JldHVybiBHeX0pKSxuLmQoZSwidGltZVNhdHVyZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGVnfSkpLG4uZChlLCJ0aW1lTW9udGgiLChmdW5jdGlvbigpe3JldHVybiBqeX0pKSxuLmQoZSwidGltZU1vbnRocyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFl5fSkpLG4uZChlLCJ0aW1lWWVhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJ5fSkpLG4uZChlLCJ0aW1lWWVhcnMiLChmdW5jdGlvbigpe3JldHVybiBGeX0pKSxuLmQoZSwidXRjTWludXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4ga3Z9KSksbi5kKGUsInV0Y01pbnV0ZXMiLChmdW5jdGlvbigpe3JldHVybiB3dn0pKSxuLmQoZSwidXRjSG91ciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJ2fSkpLG4uZChlLCJ1dGNIb3VycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHh2fSkpLG4uZChlLCJ1dGNEYXkiLChmdW5jdGlvbigpe3JldHVybiBEZ30pKSxuLmQoZSwidXRjRGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIExnfSkpLG4uZChlLCJ1dGNXZWVrIiwoZnVuY3Rpb24oKXtyZXR1cm4gdmd9KSksbi5kKGUsInV0Y1dlZWtzIiwoZnVuY3Rpb24oKXtyZXR1cm4gRWd9KSksbi5kKGUsInV0Y1N1bmRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZnfSkpLG4uZChlLCJ1dGNTdW5kYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gRWd9KSksbi5kKGUsInV0Y01vbmRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJnfSkpLG4uZChlLCJ1dGNNb25kYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2d9KSksbi5kKGUsInV0Y1R1ZXNkYXkiLChmdW5jdGlvbigpe3JldHVybiB4Z30pKSxuLmQoZSwidXRjVHVlc2RheXMiLChmdW5jdGlvbigpe3JldHVybiBTZ30pKSxuLmQoZSwidXRjV2VkbmVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gX2d9KSksbi5kKGUsInV0Y1dlZG5lc2RheXMiLChmdW5jdGlvbigpe3JldHVybiBBZ30pKSxuLmQoZSwidXRjVGh1cnNkYXkiLChmdW5jdGlvbigpe3JldHVybiBrZ30pKSxuLmQoZSwidXRjVGh1cnNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gTWd9KSksbi5kKGUsInV0Y0ZyaWRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdnfSkpLG4uZChlLCJ1dGNGcmlkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gT2d9KSksbi5kKGUsInV0Y1NhdHVyZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gVGd9KSksbi5kKGUsInV0Y1NhdHVyZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE5nfSkpLG4uZChlLCJ1dGNNb250aCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd2fSkpLG4uZChlLCJ1dGNNb250aHMiLChmdW5jdGlvbigpe3JldHVybiBtdn0pKSxuLmQoZSwidXRjWWVhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJnfSkpLG4uZChlLCJ1dGNZZWFycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZnfSkpLG4uZChlLCJ0aW1lRm9ybWF0RGVmYXVsdExvY2FsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx2fSkpLG4uZChlLCJ0aW1lRm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gJGd9KSksbi5kKGUsInRpbWVQYXJzZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFnfSkpLG4uZChlLCJ1dGNGb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBXZ30pKSxuLmQoZSwidXRjUGFyc2UiLChmdW5jdGlvbigpe3JldHVybiBIZ30pKSxuLmQoZSwidGltZUZvcm1hdExvY2FsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpnfSkpLG4uZChlLCJpc29Gb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBEa30pKSxuLmQoZSwiaXNvUGFyc2UiLChmdW5jdGlvbigpe3JldHVybiBMa30pKSxuLmQoZSwibm93IiwoZnVuY3Rpb24oKXtyZXR1cm4gVW59KSksbi5kKGUsInRpbWVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gV259KSksbi5kKGUsInRpbWVyRmx1c2giLChmdW5jdGlvbigpe3JldHVybiBIbn0pKSxuLmQoZSwidGltZW91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFpufSkpLG4uZChlLCJpbnRlcnZhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIElrfSkpLG4uZChlLCJ0cmFuc2l0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gVXJ9KSksbi5kKGUsImFjdGl2ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEtyfSkpLG4uZChlLCJpbnRlcnJ1cHQiLChmdW5jdGlvbigpe3JldHVybiBzcn0pKSxuLmQoZSwidm9yb25vaSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHh3fSkpLG4uZChlLCJ6b29tIiwoZnVuY3Rpb24oKXtyZXR1cm4gTHd9KSksbi5kKGUsInpvb21UcmFuc2Zvcm0iLChmdW5jdGlvbigpe3JldHVybiBFd30pKSxuLmQoZSwiem9vbUlkZW50aXR5IiwoZnVuY3Rpb24oKXtyZXR1cm4gVHd9KSk7dmFyIHI9IjUuMTYuMCIsaT1mdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn0sYT1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMT09PXQubGVuZ3RoJiYoZT10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gaShlKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKTwwP3I9YSsxOmk9YX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKT4wP2k9YTpyPWErMX1yZXR1cm4gcn19fTt2YXIgbz1hKGkpLHM9by5yaWdodCxjPW8ubGVmdCx1PXMsbD1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPWgpO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGgtMSxpPXRbMF0sYT1uZXcgQXJyYXkocjwwPzA6cik7bjxyOylhW25dPWUoaSxpPXRbKytuXSk7cmV0dXJuIGF9O2Z1bmN0aW9uIGgodCxlKXtyZXR1cm5bdCxlXX12YXIgZj1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KHMqYyk7Zm9yKG51bGw9PW4mJihuPWgpLHI9YT0wO3I8czsrK3IpZm9yKG89dFtyXSxpPTA7aTxjOysraSwrK2EpdVthXT1uKG8sZVtpXSk7cmV0dXJuIHV9LGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LHA9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P05hTjordH0seT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10Lmxlbmd0aCxhPTAsbz0tMSxzPTAsYz0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1wKHRbb10pKXx8KGMrPShyPW4tcykqKG4tKHMrPXIvKythKSkpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4obj1wKGUodFtvXSxvLHQpKSl8fChjKz0ocj1uLXMpKihuLShzKz1yLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9LGc9ZnVuY3Rpb24odCxlKXt2YXIgbj15KHQsZSk7cmV0dXJuIG4/TWF0aC5zcXJ0KG4pOm59LG09ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShuPXRbb10pJiZuPj1uKWZvcihyPWk9bjsrK288YTspbnVsbCE9KG49dFtvXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPj1uKWZvcihyPWk9bjsrK288YTspbnVsbCE9KG49ZSh0W29dLG8sdCkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKTtyZXR1cm5bcixpXX0sdj1BcnJheS5wcm90b3R5cGUsYj12LnNsaWNlLHg9di5tYXAsXz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LGs9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHc9ZnVuY3Rpb24odCxlLG4pe3Q9K3QsZT0rZSxuPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K247Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksYT1uZXcgQXJyYXkoaSk7KytyPGk7KWFbcl09dCtyKm47cmV0dXJuIGF9LFQ9TWF0aC5zcXJ0KDUwKSxFPU1hdGguc3FydCgxMCksQz1NYXRoLnNxcnQoMiksUz1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz0tMTtpZihuPStuLCh0PSt0KT09PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigocj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1BKHQsZSxuKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApZm9yKHQ9TWF0aC5jZWlsKHQvbyksZT1NYXRoLmZsb29yKGUvbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpvO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0Km8pLGU9TWF0aC5jZWlsKGUqbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9vO3JldHVybiByJiZhLnJldmVyc2UoKSxhfTtmdW5jdGlvbiBBKHQsZSxuKXt2YXIgcj0oZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLGE9ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8oYT49VD8xMDphPj1FPzU6YT49Qz8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKGE+PVQ/MTA6YT49RT81OmE+PUM/MjoxKX1mdW5jdGlvbiBNKHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLGE9ci9pO3JldHVybiBhPj1UP2kqPTEwOmE+PUU/aSo9NTphPj1DJiYoaSo9MiksZTx0Py1pOml9dmFyIE89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9LE49ZnVuY3Rpb24oKXt2YXIgdD1rLGU9bSxuPU87ZnVuY3Rpb24gcihyKXt2YXIgaSxhLG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyk7Zm9yKGk9MDtpPG87KytpKXNbaV09dChyW2ldLGkscik7dmFyIGM9ZShzKSxsPWNbMF0saD1jWzFdLGY9bihzLGwsaCk7QXJyYXkuaXNBcnJheShmKXx8KGY9TShsLGgsZiksZj13KE1hdGguY2VpbChsL2YpKmYsaCxmKSk7Zm9yKHZhciBkPWYubGVuZ3RoO2ZbMF08PWw7KWYuc2hpZnQoKSwtLWQ7Zm9yKDtmW2QtMV0+aDspZi5wb3AoKSwtLWQ7dmFyIHAseT1uZXcgQXJyYXkoZCsxKTtmb3IoaT0wO2k8PWQ7KytpKShwPXlbaV09W10pLngwPWk+MD9mW2ktMV06bCxwLngxPWk8ZD9mW2ldOmg7Zm9yKGk9MDtpPG87KytpKWw8PShhPXNbaV0pJiZhPD1oJiZ5W3UoZixhLDAsZCldLnB1c2gocltpXSk7cmV0dXJuIHl9cmV0dXJuIHIudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpfKGUpLHIpOnR9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6XyhbdFswXSx0WzFdXSkscik6ZX0sci50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9fKGIuY2FsbCh0KSk6Xyh0KSxyKTpufSxyfSxCPWZ1bmN0aW9uKHQsZSxuKXtpZihudWxsPT1uJiYobj1wKSxyPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fHI8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rbih0W2FdLGEsdCk7cmV0dXJuIG8rKCtuKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fSxEPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD14LmNhbGwodCxwKS5zb3J0KGkpLE1hdGguY2VpbCgobi1lKS8oMiooQih0LC43NSktQih0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLmNlaWwoKG4tZSkvKDMuNSpnKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEk9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj10W2FdKSYmbj5yJiYocj1uKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+ciYmKHI9bik7cmV0dXJuIHJ9LFI9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLGk9cixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPHI7KWlzTmFOKG49cCh0W2FdKSk/LS1pOm8rPW47ZWxzZSBmb3IoOysrYTxyOylpc05hTihuPXAoZSh0W2FdLGEsdCkpKT8tLWk6bys9bjtpZihpKXJldHVybiBvL2l9LEY9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLGE9LTEsbz1bXTtpZihudWxsPT1lKWZvcig7KythPHI7KWlzTmFOKG49cCh0W2FdKSl8fG8ucHVzaChuKTtlbHNlIGZvcig7KythPHI7KWlzTmFOKG49cChlKHRbYV0sYSx0KSkpfHxvLnB1c2gobik7cmV0dXJuIEIoby5zb3J0KGkpLC41KX0sUD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShyPXRbaV0pLmxlbmd0aDstLWU+PTA7KW5bLS1vXT1yW2VdO3JldHVybiBufSxqPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KG49dFthXSkmJm4+PW4pZm9yKHI9bjsrK2E8aTspbnVsbCE9KG49dFthXSkmJnI+biYmKHI9bil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+PW4pZm9yKHI9bjsrK2E8aTspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZyPm4mJihyPW4pO3JldHVybiByfSxZPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pO24tLTspcltuXT10W2Vbbl1dO3JldHVybiByfSx6PWZ1bmN0aW9uKHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4scixhPTAsbz0wLHM9dFtvXTtmb3IobnVsbD09ZSYmKGU9aSk7KythPG47KShlKHI9dFthXSxzKTwwfHwwIT09ZShzLHMpKSYmKHM9cixvPWEpO3JldHVybiAwPT09ZShzLHMpP286dm9pZCAwfX0sVT1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByLGksYT0obnVsbD09bj90Lmxlbmd0aDpuKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxyPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1yO3JldHVybiB0fSwkPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10Lmxlbmd0aCxpPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytpPHI7KShuPSt0W2ldKSYmKGErPW4pO2Vsc2UgZm9yKDsrK2k8cjspKG49K2UodFtpXSxpLHQpKSYmKGErPW4pO3JldHVybiBhfSxxPWZ1bmN0aW9uKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49aih0LFcpLHI9bmV3IEFycmF5KG4pOysrZTxuOylmb3IodmFyIGksYT0tMSxvPXJbZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIHJ9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQubGVuZ3RofXZhciBIPWZ1bmN0aW9uKCl7cmV0dXJuIHEoYXJndW1lbnRzKX0sVj1BcnJheS5wcm90b3R5cGUuc2xpY2UsRz1mdW5jdGlvbih0KXtyZXR1cm4gdH07ZnVuY3Rpb24gWCh0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQrLjUpKyIsMCkifWZ1bmN0aW9uIFoodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQrLjUpKyIpIn1mdW5jdGlvbiBLKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4rdChlKX19ZnVuY3Rpb24gUSh0KXt2YXIgZT1NYXRoLm1heCgwLHQuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxmdW5jdGlvbihuKXtyZXR1cm4rdChuKStlfX1mdW5jdGlvbiBKKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHR0KHQsZSl7dmFyIG49W10scj1udWxsLGk9bnVsbCxhPTYsbz02LHM9MyxjPTE9PT10fHw0PT09dD8tMToxLHU9ND09PXR8fDI9PT10PyJ4IjoieSIsbD0xPT09dHx8Mz09PXQ/WDpaO2Z1bmN0aW9uIGgoaCl7dmFyIGY9bnVsbD09cj9lLnRpY2tzP2UudGlja3MuYXBwbHkoZSxuKTplLmRvbWFpbigpOnIsZD1udWxsPT1pP2UudGlja0Zvcm1hdD9lLnRpY2tGb3JtYXQuYXBwbHkoZSxuKTpHOmkscD1NYXRoLm1heChhLDApK3MseT1lLnJhbmdlKCksZz0reVswXSsuNSxtPSt5W3kubGVuZ3RoLTFdKy41LHY9KGUuYmFuZHdpZHRoP1E6SykoZS5jb3B5KCkpLGI9aC5zZWxlY3Rpb24/aC5zZWxlY3Rpb24oKTpoLHg9Yi5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksXz1iLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGYsZSkub3JkZXIoKSxrPV8uZXhpdCgpLHc9Xy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLFQ9Xy5zZWxlY3QoImxpbmUiKSxFPV8uc2VsZWN0KCJ0ZXh0Iik7eD14Lm1lcmdlKHguZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLF89Xy5tZXJnZSh3KSxUPVQubWVyZ2Uody5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKHUrIjIiLGMqYSkpLEU9RS5tZXJnZSh3LmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKHUsYypwKS5hdHRyKCJkeSIsMT09PXQ/IjBlbSI6Mz09PXQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxoIT09YiYmKHg9eC50cmFuc2l0aW9uKGgpLF89Xy50cmFuc2l0aW9uKGgpLFQ9VC50cmFuc2l0aW9uKGgpLEU9RS50cmFuc2l0aW9uKGgpLGs9ay50cmFuc2l0aW9uKGgpLmF0dHIoIm9wYWNpdHkiLDFlLTYpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PXYodCkpP2wodCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSkpLHcuYXR0cigib3BhY2l0eSIsMWUtNikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gbChlJiZpc0Zpbml0ZShlPWUodCkpP2U6dih0KSl9KSkpLGsucmVtb3ZlKCkseC5hdHRyKCJkIiw0PT09dHx8Mj09dD9vPyJNIitjKm8rIiwiK2crIkgwLjVWIittKyJIIitjKm86Ik0wLjUsIitnKyJWIittOm8/Ik0iK2crIiwiK2MqbysiVjAuNUgiK20rIlYiK2MqbzoiTSIrZysiLDAuNUgiK20pLF8uYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwodih0KSl9KSksVC5hdHRyKHUrIjIiLGMqYSksRS5hdHRyKHUsYypwKS50ZXh0KGQpLGIuZmlsdGVyKEopLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLDI9PT10PyJzdGFydCI6ND09PXQ/ImVuZCI6Im1pZGRsZSIpLGIuZWFjaCgoZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz12fSkpfXJldHVybiBoLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsaCk6ZX0saC50aWNrcz1mdW5jdGlvbigpe3JldHVybiBuPVYuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P1tdOlYuY2FsbCh0KSxoKTpuLnNsaWNlKCl9LGgudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6Vi5jYWxsKHQpLGgpOnImJnIuc2xpY2UoKX0saC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsaCk6aX0saC50aWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1vPSt0LGgpOmF9LGgudGlja1NpemVJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxoKTphfSxoLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsaCk6b30saC50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxoKTpzfSxofWZ1bmN0aW9uIGV0KHQpe3JldHVybiB0dCgxLHQpfWZ1bmN0aW9uIG50KHQpe3JldHVybiB0dCgyLHQpfWZ1bmN0aW9uIHJ0KHQpe3JldHVybiB0dCgzLHQpfWZ1bmN0aW9uIGl0KHQpe3JldHVybiB0dCg0LHQpfXZhciBhdD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBvdCgpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLHI9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gcnx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyBzdChyKX1mdW5jdGlvbiBzdCh0KXt0aGlzLl89dH1mdW5jdGlvbiBjdCh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLHI9dC5pbmRleE9mKCIuIik7aWYocj49MCYmKG49dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6bn19KSl9ZnVuY3Rpb24gdXQodCxlKXtmb3IodmFyIG4scj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZigobj10W3JdKS5uYW1lPT09ZSlyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBsdCh0LGUsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKHRbcl0ubmFtZT09PWUpe3Rbcl09YXQsdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fXN0LnByb3RvdHlwZT1vdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnN0LG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj10aGlzLl8saT1jdCh0KyIiLHIpLGE9LTEsbz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrYTxvOylpZihuPSh0PWlbYV0pLnR5cGUpcltuXT1sdChyW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gcilyW25dPWx0KHJbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KythPG87KWlmKChuPSh0PWlbYV0pLnR5cGUpJiYobj11dChyW25dLHQubmFtZSkpKXJldHVybiBufSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dLnNsaWNlKCk7cmV0dXJuIG5ldyBzdCh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4scixpPW5ldyBBcnJheShuKSxhPTA7YTxuOysrYSlpW2FdPWFyZ3VtZW50c1thKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKGE9MCxuPShyPXRoaXMuX1t0XSkubGVuZ3RoO2E8bjsrK2EpclthXS52YWx1ZS5hcHBseShlLGkpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpcltpXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIGh0PW90O2Z1bmN0aW9uIGZ0KCl7fXZhciBkdD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9mdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fTtmdW5jdGlvbiBwdCgpe3JldHVybltdfXZhciB5dD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9wdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxndD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX0sbXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9O2Z1bmN0aW9uIHZ0KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfXZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dnQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX07ZnVuY3Rpb24gYnQodCxlLG4scixpLGEpe2Zvcih2YXIgbyxzPTAsYz1lLmxlbmd0aCx1PWEubGVuZ3RoO3M8dTsrK3MpKG89ZVtzXSk/KG8uX19kYXRhX189YVtzXSxyW3NdPW8pOm5bc109bmV3IHZ0KHQsYVtzXSk7Zm9yKDtzPGM7KytzKShvPWVbc10pJiYoaVtzXT1vKX1mdW5jdGlvbiB4dCh0LGUsbixyLGksYSxvKXt2YXIgcyxjLHUsbD17fSxoPWUubGVuZ3RoLGY9YS5sZW5ndGgsZD1uZXcgQXJyYXkoaCk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiYoZFtzXT11PSIkIitvLmNhbGwoYyxjLl9fZGF0YV9fLHMsZSksdSBpbiBsP2lbc109YzpsW3VdPWMpO2ZvcihzPTA7czxmOysrcykoYz1sW3U9IiQiK28uY2FsbCh0LGFbc10scyxhKV0pPyhyW3NdPWMsYy5fX2RhdGFfXz1hW3NdLGxbdV09bnVsbCk6bltzXT1uZXcgdnQodCxhW3NdKTtmb3Iocz0wO3M8aDsrK3MpKGM9ZVtzXSkmJmxbZFtzXV09PT1jJiYoaVtzXT1jKX1mdW5jdGlvbiBfdCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn12YXIga3Q9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHd0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDprdCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9LFR0PWZ1bmN0aW9uKHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLHd0Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTp3dFtlXSxsb2NhbDp0fTp0fTtmdW5jdGlvbiBFdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gQ3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBTdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIEF0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIE10KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBPdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX12YXIgTnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fTtmdW5jdGlvbiBCdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBEdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIEx0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsbil9fWZ1bmN0aW9uIEl0KHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8TnQodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gUnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIEZ0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBQdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBqdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gWXQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgenQodCl9ZnVuY3Rpb24genQodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPWp0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gVXQodCxlKXtmb3IodmFyIG49WXQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiAkdCh0LGUpe2Zvcih2YXIgbj1ZdCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uIHF0KHQpe3JldHVybiBmdW5jdGlvbigpe1V0KHRoaXMsdCl9fWZ1bmN0aW9uIFd0KHQpe3JldHVybiBmdW5jdGlvbigpeyR0KHRoaXMsdCl9fWZ1bmN0aW9uIEh0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP1V0OiR0KSh0aGlzLHQpfX16dC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O2Z1bmN0aW9uIFZ0KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBHdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIFh0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBadCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIEt0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIFF0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gSnQoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gdGUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBlZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PWt0JiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1rdD9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19ZnVuY3Rpb24gbmUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19dmFyIHJlPWZ1bmN0aW9uKHQpe3ZhciBlPVR0KHQpO3JldHVybihlLmxvY2FsP25lOmVlKShlKX07ZnVuY3Rpb24gaWUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBhZSgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIG9lKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBzZSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9dmFyIGNlPXt9LHVlPW51bGw7InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoY2U9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO2Z1bmN0aW9uIGxlKHQsZSxuKXtyZXR1cm4gdD1oZSh0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIGhlKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9dWU7dWU9cjt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7dWU9aX19fWZ1bmN0aW9uIGZlKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIGRlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4scj0wLGk9LTEsYT1lLmxlbmd0aDtyPGE7KytyKW49ZVtyXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytpXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysraT9lLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBwZSh0LGUsbil7dmFyIHI9Y2UuaGFzT3duUHJvcGVydHkodC50eXBlKT9sZTpoZTtyZXR1cm4gZnVuY3Rpb24oaSxhLG8pe3ZhciBzLGM9dGhpcy5fX29uLHU9cihlLGEsbyk7aWYoYylmb3IodmFyIGw9MCxoPWMubGVuZ3RoO2w8aDsrK2wpaWYoKHM9Y1tsXSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9dSxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsdSxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOnUsY2FwdHVyZTpufSxjP2MucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiB5ZSh0LGUsbixyKXt2YXIgaT11ZTt0LnNvdXJjZUV2ZW50PXVlLHVlPXQ7dHJ5e3JldHVybiBlLmFwcGx5KG4scil9ZmluYWxseXt1ZT1pfX1mdW5jdGlvbiBnZSh0LGUsbil7dmFyIHI9TnQodCksaT1yLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkoZSxuKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KGkuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksaS5kZXRhaWw9bi5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gbWUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ2UodGhpcyx0LGUpfX1mdW5jdGlvbiB2ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBnZSh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX12YXIgYmU9W251bGxdO2Z1bmN0aW9uIHhlKHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIF9lKCl7cmV0dXJuIG5ldyB4ZShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLGJlKX14ZS5wcm90b3R5cGU9X2UucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4ZSxzZWxlY3Q6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWR0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG8scz1lW2ldLGM9cy5sZW5ndGgsdT1yW2ldPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkoYT1zW2xdKSYmKG89dC5jYWxsKGEsYS5fX2RhdGFfXyxsLHMpKSYmKCJfX2RhdGFfXyJpbiBhJiYoby5fX2RhdGFfXz1hLl9fZGF0YV9fKSx1W2xdPW8pO3JldHVybiBuZXcgeGUocix0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD15dCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9W10saT1bXSxhPTA7YTxuOysrYSlmb3IodmFyIG8scz1lW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpKG89c1t1XSkmJihyLnB1c2godC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSxpLnB1c2gobykpO3JldHVybiBuZXcgeGUocixpKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ndCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sdT0wO3U8czsrK3UpKGE9b1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgeGUocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksbD0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe3BbKytsXT10fSkpLHA7dmFyIG4scj1lP3h0OmJ0LGk9dGhpcy5fcGFyZW50cyxhPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKG49dCx0PWZ1bmN0aW9uKCl7cmV0dXJuIG59KTtmb3IodmFyIG89YS5sZW5ndGgscz1uZXcgQXJyYXkobyksYz1uZXcgQXJyYXkobyksdT1uZXcgQXJyYXkobyksbD0wO2w8bzsrK2wpe3ZhciBoPWlbbF0sZj1hW2xdLGQ9Zi5sZW5ndGgscD10LmNhbGwoaCxoJiZoLl9fZGF0YV9fLGwsaSkseT1wLmxlbmd0aCxnPWNbbF09bmV3IEFycmF5KHkpLG09c1tsXT1uZXcgQXJyYXkoeSk7cihoLGYsZyxtLHVbbF09bmV3IEFycmF5KGQpLHAsZSk7Zm9yKHZhciB2LGIseD0wLF89MDt4PHk7Kyt4KWlmKHY9Z1t4XSl7Zm9yKHg+PV8mJihfPXgrMSk7IShiPW1bX10pJiYrK188eTspO3YuX25leHQ9Ynx8bnVsbH19cmV0dXJuKHM9bmV3IHhlKHMsaSkpLl9lbnRlcj1jLHMuX2V4aXQ9dSxzfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgeGUodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAobXQpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4ZSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKG10KSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5lbnRlcigpLGk9dGhpcyxhPXRoaXMuZXhpdCgpO3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Qocik6ci5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKGk9ZShpKSksbnVsbD09bj9hLnJlbW92ZSgpOm4oYSksciYmaT9yLm1lcmdlKGkpLm9yZGVyKCk6aX0sbWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxyPWUubGVuZ3RoLGk9bi5sZW5ndGgsYT1NYXRoLm1pbihyLGkpLG89bmV3IEFycmF5KHIpLHM9MDtzPGE7KytzKWZvcih2YXIgYyx1PWVbc10sbD1uW3NdLGg9dS5sZW5ndGgsZj1vW3NdPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZCkoYz11W2RdfHxsW2RdKSYmKGZbZF09Yyk7Zm9yKDtzPHI7KytzKW9bc109ZVtzXTtyZXR1cm4gbmV3IHhlKG8sdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgcixpPXRbZV0sYT1pLmxlbmd0aC0xLG89aVthXTstLWE+PTA7KShyPWlbYV0pJiYobyYmNF5yLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pJiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsbyksbz1yKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PV90KTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2Epe2Zvcih2YXIgbyxzPW5bYV0sYz1zLmxlbmd0aCx1PWlbYV09bmV3IEFycmF5KGMpLGw9MDtsPGM7KytsKShvPXNbbF0pJiYodVtsXT1vKTt1LnNvcnQoZSl9cmV0dXJuIG5ldyB4ZShpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxlPS0xO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dFsrK2VdPXRoaXN9KSksdH0sbm9kZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIHI9dFtlXSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXt2YXIgbz1yW2ldO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7Kyt0fSkpLHR9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLHI9ZS5sZW5ndGg7bjxyOysrbilmb3IodmFyIGksYT1lW25dLG89MCxzPWEubGVuZ3RoO288czsrK28pKGk9YVtvXSkmJnQuY2FsbChpLGkuX19kYXRhX18sbyxhKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPVR0KHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9dGhpcy5ub2RlKCk7cmV0dXJuIG4ubG9jYWw/ci5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnIuZ2V0QXR0cmlidXRlKG4pfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/bi5sb2NhbD9DdDpFdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP090Ok10Om4ubG9jYWw/QXQ6U3QpKG4sZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/QnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/THQ6RHQpKHQsZSxudWxsPT1uPyIiOm4pKTpJdCh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9SdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9QdDpGdCkodCxlKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1qdCh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcj1ZdCh0aGlzLm5vZGUoKSksaT0tMSxhPW4ubGVuZ3RoOysraTxhOylpZighci5jb250YWlucyhuW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9IdDplP3F0Old0KShuLGUpKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9WdDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/WHQ6R3QpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9adDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/UXQ6S3QpKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChKdCl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh0ZSl9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJlKHQpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LGluc2VydDpmdW5jdGlvbih0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cmUodCkscj1udWxsPT1lP2llOiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZHQoZSk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goYWUpfSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9zZTpvZSl9LGRhdHVtOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYT1mZSh0KyIiKSxvPWEubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT9wZTpkZSxudWxsPT1uJiYobj0hMSkscj0wO3I8bzsrK3IpdGhpcy5lYWNoKHMoYVtyXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBjLHU9MCxsPXMubGVuZ3RoO3U8bDsrK3UpZm9yKHI9MCxjPXNbdV07cjxvOysrcilpZigoaT1hW3JdKS50eXBlPT09Yy50eXBlJiZpLm5hbWU9PT1jLm5hbWUpcmV0dXJuIGMudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/dmU6bWUpKHQsZSkpfX07dmFyIGtlPV9lLHdlPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgeGUoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyB4ZShbW3RdXSxiZSl9O2Z1bmN0aW9uIFRlKCl7dWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIEVlPWZ1bmN0aW9uKCl7dWUucHJldmVudERlZmF1bHQoKSx1ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0sQ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj13ZSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLEVlLCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLEVlLCEwKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX07ZnVuY3Rpb24gU2UodCxlKXt2YXIgbj10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXdlKHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7ZSYmKHIub24oImNsaWNrLmRyYWciLEVlLCEwKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Iub24oImNsaWNrLmRyYWciLG51bGwpfSksMCkpLCJvbnNlbGVjdHN0YXJ0ImluIG4/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KG4uc3R5bGUuTW96VXNlclNlbGVjdD1uLl9fbm9zZWxlY3QsZGVsZXRlIG4uX19ub3NlbGVjdCl9dmFyIEFlPWZ1bmN0aW9uKHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH07ZnVuY3Rpb24gTWUodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gT2UoKXt9dmFyIE5lPSJcXHMqKFsrLV0/XFxkKylcXHMqIixCZT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixEZT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsTGU9L14jKFswLTlhLWZdezMsOH0pJC8sSWU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW05lLE5lLE5lXSsiXFwpJCIpLFJlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tEZSxEZSxEZV0rIlxcKSQiKSxGZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW05lLE5lLE5lLEJlXSsiXFwpJCIpLFBlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbRGUsRGUsRGUsQmVdKyJcXCkkIiksamU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0JlLERlLERlXSsiXFwpJCIpLFllPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbQmUsRGUsRGUsQmVdKyJcXCkkIiksemU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gVWUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiAkZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHFlKHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPUxlLmV4ZWModCkpPyhuPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PW4/V2UoZSk6Mz09PW4/bmV3IFhlKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj9IZShlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09bj9IZShlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPUllLmV4ZWModCkpP25ldyBYZShlWzFdLGVbMl0sZVszXSwxKTooZT1SZS5leGVjKHQpKT9uZXcgWGUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9RmUuZXhlYyh0KSk/SGUoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9UGUuZXhlYyh0KSk/SGUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9amUuZXhlYyh0KSk/SmUoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1ZZS5leGVjKHQpKT9KZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOnplLmhhc093blByb3BlcnR5KHQpP1dlKHplW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgWGUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBXZSh0KXtyZXR1cm4gbmV3IFhlKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBIZSh0LGUsbixyKXtyZXR1cm4gcjw9MCYmKHQ9ZT1uPU5hTiksbmV3IFhlKHQsZSxuLHIpfWZ1bmN0aW9uIFZlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgT2V8fCh0PXFlKHQpKSx0P25ldyBYZSgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgWGV9ZnVuY3Rpb24gR2UodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1ZlKHQpOm5ldyBYZSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gWGUodCxlLG4scil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFplKCl7cmV0dXJuIiMiK1FlKHRoaXMucikrUWUodGhpcy5nKStRZSh0aGlzLmIpfWZ1bmN0aW9uIEtlKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gUWUodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBKZSh0LGUsbixyKXtyZXR1cm4gcjw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IG5uKHQsZSxuLHIpfWZ1bmN0aW9uIHRuKHQpe2lmKHQgaW5zdGFuY2VvZiBubilyZXR1cm4gbmV3IG5uKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIE9lfHwodD1xZSh0KSksIXQpcmV0dXJuIG5ldyBubjtpZih0IGluc3RhbmNlb2Ygbm4pcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKGUsbixyKSxhPU1hdGgubWF4KGUsbixyKSxvPU5hTixzPWEtaSxjPShhK2kpLzI7cmV0dXJuIHM/KG89ZT09PWE/KG4tcikvcys2KihuPHIpOm49PT1hPyhyLWUpL3MrMjooZS1uKS9zKzQscy89YzwuNT9hK2k6Mi1hLWksbyo9NjApOnM9Yz4wJiZjPDE/MDpvLG5ldyBubihvLHMsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGVuKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90bih0KTpuZXcgbm4odCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIG5uKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBybih0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9ZnVuY3Rpb24gYW4odCxlLG4scixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpuKygxKzMqdCszKmEtMypvKSpyK28qaSkvNn1BZShPZSxxZSx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpVZSxmb3JtYXRIZXg6VWUsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIHRuKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6JGUsdG9TdHJpbmc6JGV9KSxBZShYZSxHZSxNZShPZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IFhlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBYZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OlplLGZvcm1hdEhleDpaZSxmb3JtYXRSZ2I6S2UsdG9TdHJpbmc6S2V9KSksQWUobm4sZW4sTWUoT2Use2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBubih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBubih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IFhlKHJuKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLHJuKHQsaSxyKSxybih0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciBvbj1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksaT10W3JdLGE9dFtyKzFdLG89cj4wP3Rbci0xXToyKmktYSxzPXI8ZS0xP3RbcisyXToyKmEtaTtyZXR1cm4gYW4oKG4tci9lKSplLG8saSxhLHMpfX0sc249ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxpPXRbKHIrZS0xKSVlXSxhPXRbciVlXSxvPXRbKHIrMSklZV0scz10WyhyKzIpJWVdO3JldHVybiBhbigobi1yL2UpKmUsaSxhLG8scyl9fSxjbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIHVuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gbG4odCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/dW4odCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOmNuKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gaG4odCl7cmV0dXJuIDE9PSh0PSt0KT9mbjpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOmNuKGlzTmFOKGUpP246ZSl9fWZ1bmN0aW9uIGZuKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP3VuKHQsbik6Y24oaXNOYU4odCk/ZTp0KX12YXIgZG49ZnVuY3Rpb24gdChlKXt2YXIgbj1obihlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD1HZSh0KSkuciwoZT1HZShlKSkuciksaT1uKHQuZyxlLmcpLGE9bih0LmIsZS5iKSxvPWZuKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBwbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPUdlKGVbbl0pLGFbbl09ci5yfHwwLG9bbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBhPXQoYSksbz10KG8pLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPWEodCksci5nPW8odCksci5iPXModCkscisiIn19fXZhciB5bj1wbihvbiksZ249cG4oc24pLG1uPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9W10pO3ZhciBuLHI9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG49MDtuPHI7KytuKWlbbl09dFtuXSooMS1hKStlW25dKmE7cmV0dXJuIGl9fTtmdW5jdGlvbiB2bih0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9dmFyIGJuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHZuKGUpP21uOnhuKSh0LGUpfTtmdW5jdGlvbiB4bih0LGUpe3ZhciBuLHI9ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxpOysrbilhW25dPU1uKHRbbl0sZVtuXSk7Zm9yKDtuPHI7KytuKW9bbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPGk7KytuKW9bbl09YVtuXSh0KTtyZXR1cm4gb319dmFyIF9uPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IERhdGU7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gbi5zZXRUaW1lKHQqKDEtcikrZSpyKSxufX0sa249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19LHduPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj17fSxpPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/cltuXT1Nbih0W25dLGVbbl0pOmlbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gcilpW25dPXJbbl0odCk7cmV0dXJuIGl9fSxUbj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csRW49bmV3IFJlZ0V4cChUbi5zb3VyY2UsImciKTt2YXIgQ24sU24sQW49ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT1Ubi5sYXN0SW5kZXg9RW4ubGFzdEluZGV4PTAsbz0tMSxzPVtdLGM9W107Zm9yKHQrPSIiLGUrPSIiOyhuPVRuLmV4ZWModCkpJiYocj1Fbi5leGVjKGUpKTspKGk9ci5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKG49blswXSk9PT0ocj1yWzBdKT9zW29dP3Nbb10rPXI6c1srK29dPXI6KHNbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6a24obixyKX0pKSxhPUVuLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/Y1swXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShjWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MDtyPGU7KytyKXNbKG49Y1tyXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9LE1uPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09cj9jbihlKTooIm51bWJlciI9PT1yP2tuOiJzdHJpbmciPT09cj8obj1xZShlKSk/KGU9bixkbik6QW46ZSBpbnN0YW5jZW9mIHFlP2RuOmUgaW5zdGFuY2VvZiBEYXRlP19uOnZuKGUpP21uOkFycmF5LmlzQXJyYXkoZSk/eG46ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP3duOmtuKSh0LGUpfSxPbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXVlO3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfSxObj1mdW5jdGlvbih0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciByPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gci54PWUuY2xpZW50WCxyLnk9ZS5jbGllbnRZLFsocj1yLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsci55XX12YXIgaT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtaS5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktaS50b3AtdC5jbGllbnRUb3BdfSxCbj1mdW5jdGlvbih0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9T24oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxhPWU/ZS5sZW5ndGg6MDtpPGE7KytpKWlmKChyPWVbaV0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBObih0LHIpO3JldHVybiBudWxsfSxEbj1mdW5jdGlvbih0KXt2YXIgZT1PbigpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSxObih0LGUpfSxMbj0wLEluPTAsUm49MCxGbj0wLFBuPTAsam49MCxZbj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx6bj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBVbigpe3JldHVybiBQbnx8KHpuKCRuKSxQbj1Zbi5ub3coKStqbil9ZnVuY3Rpb24gJG4oKXtQbj0wfWZ1bmN0aW9uIHFuKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBXbih0LGUsbil7dmFyIHI9bmV3IHFuO3JldHVybiByLnJlc3RhcnQodCxlLG4pLHJ9ZnVuY3Rpb24gSG4oKXtVbigpLCsrTG47Zm9yKHZhciB0LGU9Q247ZTspKHQ9UG4tZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLUxufWZ1bmN0aW9uIFZuKCl7UG49KEZuPVluLm5vdygpKStqbixMbj1Jbj0wO3RyeXtIbigpfWZpbmFsbHl7TG49MCxmdW5jdGlvbigpe3ZhciB0LGUsbj1DbixyPTEvMDtmb3IoO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpDbj1lKTtTbj10LFhuKHIpfSgpLFBuPTB9fWZ1bmN0aW9uIEduKCl7dmFyIHQ9WW4ubm93KCksZT10LUZuO2U+MWUzJiYoam4tPWUsRm49dCl9ZnVuY3Rpb24gWG4odCl7TG58fChJbiYmKEluPWNsZWFyVGltZW91dChJbikpLHQtUG4+MjQ/KHQ8MS8wJiYoSW49c2V0VGltZW91dChWbix0LVluLm5vdygpLWpuKSksUm4mJihSbj1jbGVhckludGVydmFsKFJuKSkpOihSbnx8KEZuPVluLm5vdygpLFJuPXNldEludGVydmFsKEduLDFlMykpLExuPTEsem4oVm4pKSl9cW4ucHJvdG90eXBlPVduLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cW4scmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP1VuKCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fFNuPT09dGhpc3x8KFNuP1NuLl9uZXh0PXRoaXM6Q249dGhpcyxTbj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLFhuKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFhuKCkpfX07dmFyIFpuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgcW47cmV0dXJuIGU9bnVsbD09ZT8wOitlLHIucmVzdGFydCgoZnVuY3Rpb24obil7ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfSxLbj1odCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxRbj1bXSxKbj1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gWm4oYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihabigoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1XbigoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpLbix0d2VlbjpRbix0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9O2Z1bmN0aW9uIHRyKHQsZSl7dmFyIG49bnIodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBlcih0LGUpe3ZhciBuPW5yKHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIG5yKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59dmFyIHJyLGlyLGFyLG9yLHNyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGE9dC5fX3RyYW5zaXRpb24sbz0hMDtpZihhKXtmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLGEpKG49YVtpXSkubmFtZT09PWU/KHI9bi5zdGF0ZT4yJiZuLnN0YXRlPDUsbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBhW2ldKTpvPSExO28mJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19LGNyPTE4MC9NYXRoLlBJLHVyPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9LGxyPWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzLGM7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGM9dCpuK2UqcikmJihuLT10KmMsci09ZSpjKSwocz1NYXRoLnNxcnQobipuK3IqcikpJiYobi89cyxyLz1zLGMvPXMpLHQqcjxlKm4mJih0PS10LGU9LWUsYz0tYyxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKmNyLHNrZXdYOk1hdGguYXRhbihjKSpjcixzY2FsZVg6byxzY2FsZVk6c319O2Z1bmN0aW9uIGhyKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGM9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxyLGksYSxvLHMpe2lmKHQhPT1pfHxyIT09YSl7dmFyIGM9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6Yy00LHg6a24odCxpKX0se2k6Yy0yLHg6a24ocixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4OmtuKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KGEucm90YXRlLG8ucm90YXRlLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/YS5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4OmtuKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShhLnNrZXdYLG8uc2tld1gscyxjKSxmdW5jdGlvbih0LGUsbixyLGEsbyl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OmtuKHQsbil9LHtpOnMtMix4OmtuKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrcisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGMpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9Yy5sZW5ndGg7KytuPHI7KXNbKGU9Y1tuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIGZyPWhyKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P3VyOihycnx8KHJyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGlyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhcj1kb2N1bWVudC5kZWZhdWx0VmlldykscnIuc3R5bGUudHJhbnNmb3JtPXQsdD1hci5nZXRDb21wdXRlZFN0eWxlKGlyLmFwcGVuZENoaWxkKHJyKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxpci5yZW1vdmVDaGlsZChyciksdD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksbHIoK3RbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLGRyPWhyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD91cjoob3J8fChvcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxvci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9b3IudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KHQ9dC5tYXRyaXgsbHIodC5hLHQuYix0LmMsdC5kLHQuZSx0LmYpKTp1cil9KSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIHByKHQsZSl7dmFyIG4scjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1lcih0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09bilmb3IodmFyIG89MCxzPShyPW49YSkubGVuZ3RoO288czsrK28paWYocltvXS5uYW1lPT09ZSl7KHI9ci5zbGljZSgpKS5zcGxpY2UobywxKTticmVha31pLnR3ZWVuPXJ9fWZ1bmN0aW9uIHlyKHQsZSxuKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1lcih0aGlzLHQpLG89YS50d2VlbjtpZihvIT09cil7aT0ocj1vKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGM9MCx1PWkubGVuZ3RoO2M8dTsrK2MpaWYoaVtjXS5uYW1lPT09ZSl7aVtjXT1zO2JyZWFrfWM9PT11JiZpLnB1c2gocyl9YS50d2Vlbj1pfX1mdW5jdGlvbiBncih0LGUsbil7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1lcih0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBucih0LHIpLnZhbHVlW2VdfX12YXIgbXI9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP2tuOmUgaW5zdGFuY2VvZiBxZT9kbjoobj1xZShlKSk/KGU9bixkbik6QW4pKHQsZSl9O2Z1bmN0aW9uIHZyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBicih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHhyKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIF9yKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiBrcih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiB3cih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIFRyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBFcih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIENyKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmRXIodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIFNyKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmVHIodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIEFyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dHIodGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIE1yKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXt0cih0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIE9yKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZXIodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIE5yKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtlcih0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIEJyKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe2VyKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBEcih0LGUsbil7dmFyIHIsaSxhPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0oZSk/dHI6ZXI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YSh0aGlzLHQpLHM9by5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLG8ub249aX19dmFyIExyPWtlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBJcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBScih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxyKSxuKX19ZnVuY3Rpb24gRnIodCxlLG4pe3ZhciByLGk7ZnVuY3Rpb24gYSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKHI9KGk9YSkmJlJyKHQsYSxuKSkscn1yZXR1cm4gYS5fdmFsdWU9ZSxhfWZ1bmN0aW9uIFByKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBqcih0KXt2YXIgZSxuO2Z1bmN0aW9uIHIoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PW4mJihlPShuPXIpJiZQcihyKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfXZhciBZcj0wO2Z1bmN0aW9uIHpyKHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiBVcih0KXtyZXR1cm4ga2UoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uICRyKCl7cmV0dXJuKytZcn12YXIgcXI9a2UucHJvdG90eXBlO2Z1bmN0aW9uIFdyKHQpe3JldHVybiB0KnQqdH1mdW5jdGlvbiBIcih0KXtyZXR1cm4tLXQqdCp0KzF9ZnVuY3Rpb24gVnIodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9enIucHJvdG90eXBlPVVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6enIsc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZHQodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbylmb3IodmFyIHMsYyx1PXJbb10sbD11Lmxlbmd0aCxoPWFbb109bmV3IEFycmF5KGwpLGY9MDtmPGw7KytmKShzPXVbZl0pJiYoYz10LmNhbGwocyxzLl9fZGF0YV9fLGYsdSkpJiYoIl9fZGF0YV9fImluIHMmJihjLl9fZGF0YV9fPXMuX19kYXRhX18pLGhbZl09YyxKbihoW2ZdLGUsbixmLGgsbnIocyxuKSkpO3JldHVybiBuZXcgenIoYSx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXl0KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1bXSxvPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgYyx1PXJbc10sbD11Lmxlbmd0aCxoPTA7aDxsOysraClpZihjPXVbaF0pe2Zvcih2YXIgZixkPXQuY2FsbChjLGMuX19kYXRhX18saCx1KSxwPW5yKGMsbikseT0wLGc9ZC5sZW5ndGg7eTxnOysreSkoZj1kW3ldKSYmSm4oZixlLG4seSxkLHApO2EucHVzaChkKSxvLnB1c2goYyl9cmV0dXJuIG5ldyB6cihhLG8sZSxuKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ndCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sdT0wO3U8czsrK3UpKGE9b1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgenIocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uLmxlbmd0aCxhPU1hdGgubWluKHIsaSksbz1uZXcgQXJyYXkocikscz0wO3M8YTsrK3MpZm9yKHZhciBjLHU9ZVtzXSxsPW5bc10saD11Lmxlbmd0aCxmPW9bc109bmV3IEFycmF5KGgpLGQ9MDtkPGg7KytkKShjPXVbZF18fGxbZF0pJiYoZltkXT1jKTtmb3IoO3M8cjsrK3Mpb1tzXT1lW3NdO3JldHVybiBuZXcgenIobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExyKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj0kcigpLHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KWlmKG89c1t1XSl7dmFyIGw9bnIobyxlKTtKbihvLHQsbix1LHMse3RpbWU6bC50aW1lK2wuZGVsYXkrbC5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmwuZHVyYXRpb24sZWFzZTpsLmVhc2V9KX1yZXR1cm4gbmV3IHpyKHIsdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOnFyLmNhbGwsbm9kZXM6cXIubm9kZXMsbm9kZTpxci5ub2RlLHNpemU6cXIuc2l6ZSxlbXB0eTpxci5lbXB0eSxlYWNoOnFyLmVhY2gsb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP25yKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChEcihuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49VHQodCkscj0idHJhbnNmb3JtIj09PW4/ZHI6bXI7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/d3I6a3IpKG4scixncih0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9icjp2cikobik6KG4ubG9jYWw/X3I6eHIpKG4scixlKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9VHQodCk7cmV0dXJuIHRoaXMudHdlZW4obiwoci5sb2NhbD9DcjpTcikocixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9mcjptcjtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1JdCh0aGlzLHQpLG89KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksSXQodGhpcyx0KSk7cmV0dXJuIGE9PT1vP251bGw6YT09PW4mJm89PT1yP2k6aT1lKG49YSxyPW8pfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsSXIodCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89SXQodGhpcyx0KSxzPW4odGhpcyksYz1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxjPXM9SXQodGhpcyx0KSksbz09PWM/bnVsbDpvPT09ciYmYz09PWk/YTooaT1jLGE9ZShyPW8scykpfX0odCxyLGdyKHRoaXMsInN0eWxlLiIrdCxlKSkpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYSxvPSJzdHlsZS4iK2Uscz0iZW5kLiIrbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1lcih0aGlzLHQpLHU9Yy5vbixsPW51bGw9PWMudmFsdWVbb10/YXx8KGE9SXIoZSkpOnZvaWQgMDt1PT09biYmaT09PWx8fChyPShuPXUpLmNvcHkoKSkub24ocyxpPWwpLGMub249cn19KHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89SXQodGhpcyx0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSh0LHIsZSksbikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsRnIodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0oZ3IodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24odCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLGpyKHQpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLCh0PXRoaXMuX2lkLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KSk7dmFyIHR9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1ucih0aGlzLm5vZGUoKSxuKS50d2VlbixhPTAsbz1pLmxlbmd0aDthPG87KythKWlmKChyPWlbYV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/cHI6eXIpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/QXI6TXIpKGUsdCkpOm5yKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P09yOk5yKShlLHQpKTpucih0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goQnIoZSx0KSk6bnIodGhpcy5ub2RlKCksZSkuZWFzZX0sZW5kOmZ1bmN0aW9uKCl7dmFyIHQsZSxuPXRoaXMscj1uLl9pZCxpPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxvKXt2YXIgcz17dmFsdWU6b30sYz17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLWkmJmEoKX19O24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj1lcih0aGlzLHIpLGk9bi5vbjtpIT09dCYmKChlPSh0PWkpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGMpKSxuLm9uPWV9KSl9KSl9fTt2YXIgR3I9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOlZyfTtmdW5jdGlvbiBYcih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBHci50aW1lPVVuKCksR3I7cmV0dXJuIG59a2UucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3NyKHRoaXMsdCl9KSl9LGtlLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIHpyPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9JHIoKSwobj1HcikudGltZT1VbigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpKG89c1t1XSkmJkpuKG8sdCxlLHUscyxufHxYcihvLGUpKTtyZXR1cm4gbmV3IHpyKHIsdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgWnI9W251bGxdLEtyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQuX190cmFuc2l0aW9uO2lmKGkpZm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixpKWlmKChuPWlbcl0pLnN0YXRlPjEmJm4ubmFtZT09PWUpcmV0dXJuIG5ldyB6cihbW3RdXSxacixlLCtyKTtyZXR1cm4gbnVsbH0sUXI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxKcj1mdW5jdGlvbih0LGUsbil7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlbGVjdGlvbj1ufTtmdW5jdGlvbiB0aSgpe3VlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBlaT1mdW5jdGlvbigpe3VlLnByZXZlbnREZWZhdWx0KCksdWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LG5pPXtuYW1lOiJkcmFnIn0scmk9e25hbWU6InNwYWNlIn0saWk9e25hbWU6ImhhbmRsZSJ9LGFpPXtuYW1lOiJjZW50ZXIifTtmdW5jdGlvbiBvaSh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIHNpKHQpe3JldHVybltvaSh0WzBdKSxvaSh0WzFdKV19ZnVuY3Rpb24gY2kodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBCbihlLHVlLnRvdWNoZXMsdCl9fXZhciB1aT17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKG1pKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0sbGk9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChtaSksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9udWxsOltbZVswXVswXSwrdFswXV0sW2VbMV1bMF0sK3RbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LGhpPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChtaSksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpzaSh0KX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sZmk9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LGRpPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxwaT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0seWk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sZ2k9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gbWkodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gdmkoKXtyZXR1cm4hdWUuY3RybEtleSYmIXVlLmJ1dHRvbn1mdW5jdGlvbiBiaSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKHQ9dC52aWV3Qm94LmJhc2VWYWwpLngsdC55XSxbdC54K3Qud2lkdGgsdC55K3QuaGVpZ2h0XV06W1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIHhpKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIF9pKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24ga2kodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiB3aSh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfWZ1bmN0aW9uIFRpKCl7cmV0dXJuIFNpKHVpKX1mdW5jdGlvbiBFaSgpe3JldHVybiBTaShsaSl9dmFyIENpPWZ1bmN0aW9uKCl7cmV0dXJuIFNpKGhpKX07ZnVuY3Rpb24gU2kodCl7dmFyIGUsbj1iaSxyPXZpLGk9eGksYT0hMCxvPWh0KCJzdGFydCIsImJydXNoIiwiZW5kIikscz02O2Z1bmN0aW9uIGMoZSl7dmFyIG49ZS5wcm9wZXJ0eSgiX19icnVzaCIseSkuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW21pKCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLGZpLm92ZXJsYXkpLm1lcmdlKG4pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9X2kodGhpcykuZXh0ZW50O3dlKHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pKSxlLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW21pKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLGZpLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciByPWUuc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YSh0LmhhbmRsZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSk7ci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrdC50eXBlfSkpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBmaVt0LnR5cGVdfSkpLGUuZWFjaCh1KS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixkKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLHApLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiB1KCl7dmFyIHQ9d2UodGhpcyksZT1faSh0aGlzKS5zZWxlY3Rpb247ZT8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZVswXVswXSkuYXR0cigieSIsZVswXVsxXSkuYXR0cigid2lkdGgiLGVbMV1bMF0tZVswXVswXSkuYXR0cigiaGVpZ2h0IixlWzFdWzFdLWVbMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9lWzFdWzBdLXMvMjplWzBdWzBdLXMvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP2VbMV1bMV0tcy8yOmVbMF1bMV0tcy8yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/ZVsxXVswXS1lWzBdWzBdK3M6c30pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9lWzFdWzFdLWVbMF1bMV0rczpzfSkpKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gbCh0LGUsbil7dmFyIHI9dC5fX2JydXNoLmVtaXR0ZXI7cmV0dXJuIXJ8fG4mJnIuY2xlYW4/bmV3IGgodCxlLG4pOnJ9ZnVuY3Rpb24gaCh0LGUsbil7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5zdGF0ZT10Ll9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPW59ZnVuY3Rpb24gZigpe2lmKCghZXx8dWUudG91Y2hlcykmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbixpLG8scyxjLGgsZixkLHAseSxnLG09dGhpcyx2PXVlLnRhcmdldC5fX2RhdGFfXy50eXBlLGI9InNlbGVjdGlvbiI9PT0oYSYmdWUubWV0YUtleT92PSJvdmVybGF5Ijp2KT9uaTphJiZ1ZS5hbHRLZXk/YWk6aWkseD10PT09bGk/bnVsbDp5aVt2XSxfPXQ9PT11aT9udWxsOmdpW3ZdLGs9X2kobSksdz1rLmV4dGVudCxUPWsuc2VsZWN0aW9uLEU9d1swXVswXSxDPXdbMF1bMV0sUz13WzFdWzBdLEE9d1sxXVsxXSxNPTAsTz0wLE49eCYmXyYmYSYmdWUuc2hpZnRLZXksQj11ZS50b3VjaGVzP2NpKHVlLmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIpOkRuLEQ9QihtKSxMPUQsST1sKG0sYXJndW1lbnRzLCEwKS5iZWZvcmVzdGFydCgpOyJvdmVybGF5Ij09PXY/KFQmJihwPSEwKSxrLnNlbGVjdGlvbj1UPVtbbj10PT09bGk/RTpEWzBdLG89dD09PXVpP0M6RFsxXV0sW2M9dD09PWxpP1M6bixmPXQ9PT11aT9BOm9dXSk6KG49VFswXVswXSxvPVRbMF1bMV0sYz1UWzFdWzBdLGY9VFsxXVsxXSksaT1uLHM9byxoPWMsZD1mO3ZhciBSPXdlKG0pLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEY9Ui5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixmaVt2XSk7aWYodWUudG91Y2hlcylJLm1vdmVkPWosSS5lbmRlZD16O2Vsc2V7dmFyIFA9d2UodWUudmlldykub24oIm1vdXNlbW92ZS5icnVzaCIsaiwhMCkub24oIm1vdXNldXAuYnJ1c2giLHosITApO2EmJlAub24oImtleWRvd24uYnJ1c2giLFUsITApLm9uKCJrZXl1cC5icnVzaCIsJCwhMCksQ2UodWUudmlldyl9dGkoKSxzcihtKSx1LmNhbGwobSksSS5zdGFydCgpfWZ1bmN0aW9uIGooKXt2YXIgdD1CKG0pOyFOfHx5fHxnfHwoTWF0aC5hYnModFswXS1MWzBdKT5NYXRoLmFicyh0WzFdLUxbMV0pP2c9ITA6eT0hMCksTD10LHA9ITAsZWkoKSxZKCl9ZnVuY3Rpb24gWSgpe3ZhciB0O3N3aXRjaChNPUxbMF0tRFswXSxPPUxbMV0tRFsxXSxiKXtjYXNlIHJpOmNhc2Ugbmk6eCYmKE09TWF0aC5tYXgoRS1uLE1hdGgubWluKFMtYyxNKSksaT1uK00saD1jK00pLF8mJihPPU1hdGgubWF4KEMtbyxNYXRoLm1pbihBLWYsTykpLHM9bytPLGQ9ZitPKTticmVhaztjYXNlIGlpOng8MD8oTT1NYXRoLm1heChFLW4sTWF0aC5taW4oUy1uLE0pKSxpPW4rTSxoPWMpOng+MCYmKE09TWF0aC5tYXgoRS1jLE1hdGgubWluKFMtYyxNKSksaT1uLGg9YytNKSxfPDA/KE89TWF0aC5tYXgoQy1vLE1hdGgubWluKEEtbyxPKSkscz1vK08sZD1mKTpfPjAmJihPPU1hdGgubWF4KEMtZixNYXRoLm1pbihBLWYsTykpLHM9byxkPWYrTyk7YnJlYWs7Y2FzZSBhaTp4JiYoaT1NYXRoLm1heChFLE1hdGgubWluKFMsbi1NKngpKSxoPU1hdGgubWF4KEUsTWF0aC5taW4oUyxjK00qeCkpKSxfJiYocz1NYXRoLm1heChDLE1hdGgubWluKEEsby1PKl8pKSxkPU1hdGgubWF4KEMsTWF0aC5taW4oQSxmK08qXykpKX1oPGkmJih4Kj0tMSx0PW4sbj1jLGM9dCx0PWksaT1oLGg9dCx2IGluIGRpJiZGLmF0dHIoImN1cnNvciIsZmlbdj1kaVt2XV0pKSxkPHMmJihfKj0tMSx0PW8sbz1mLGY9dCx0PXMscz1kLGQ9dCx2IGluIHBpJiZGLmF0dHIoImN1cnNvciIsZmlbdj1waVt2XV0pKSxrLnNlbGVjdGlvbiYmKFQ9ay5zZWxlY3Rpb24pLHkmJihpPVRbMF1bMF0saD1UWzFdWzBdKSxnJiYocz1UWzBdWzFdLGQ9VFsxXVsxXSksVFswXVswXT09PWkmJlRbMF1bMV09PT1zJiZUWzFdWzBdPT09aCYmVFsxXVsxXT09PWR8fChrLnNlbGVjdGlvbj1bW2ksc10sW2gsZF1dLHUuY2FsbChtKSxJLmJydXNoKCkpfWZ1bmN0aW9uIHooKXtpZih0aSgpLHVlLnRvdWNoZXMpe2lmKHVlLnRvdWNoZXMubGVuZ3RoKXJldHVybjtlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2U9bnVsbH0pLDUwMCl9ZWxzZSBTZSh1ZS52aWV3LHApLFAub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO1IuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxGLmF0dHIoImN1cnNvciIsZmkub3ZlcmxheSksay5zZWxlY3Rpb24mJihUPWsuc2VsZWN0aW9uKSxraShUKSYmKGsuc2VsZWN0aW9uPW51bGwsdS5jYWxsKG0pKSxJLmVuZCgpfWZ1bmN0aW9uIFUoKXtzd2l0Y2godWUua2V5Q29kZSl7Y2FzZSAxNjpOPXgmJl87YnJlYWs7Y2FzZSAxODpiPT09aWkmJih4JiYoYz1oLU0qeCxuPWkrTSp4KSxfJiYoZj1kLU8qXyxvPXMrTypfKSxiPWFpLFkoKSk7YnJlYWs7Y2FzZSAzMjpiIT09aWkmJmIhPT1haXx8KHg8MD9jPWgtTTp4PjAmJihuPWktTSksXzwwP2Y9ZC1POl8+MCYmKG89cy1PKSxiPXJpLEYuYXR0cigiY3Vyc29yIixmaS5zZWxlY3Rpb24pLFkoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59ZWkoKX1mdW5jdGlvbiAkKCl7c3dpdGNoKHVlLmtleUNvZGUpe2Nhc2UgMTY6TiYmKHk9Zz1OPSExLFkoKSk7YnJlYWs7Y2FzZSAxODpiPT09YWkmJih4PDA/Yz1oOng+MCYmKG49aSksXzwwP2Y9ZDpfPjAmJihvPXMpLGI9aWksWSgpKTticmVhaztjYXNlIDMyOmI9PT1yaSYmKHVlLmFsdEtleT8oeCYmKGM9aC1NKngsbj1pK00qeCksXyYmKGY9ZC1PKl8sbz1zK08qXyksYj1haSk6KHg8MD9jPWg6eD4wJiYobj1pKSxfPDA/Zj1kOl8+MCYmKG89cyksYj1paSksRi5hdHRyKCJjdXJzb3IiLGZpW3ZdKSxZKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWVpKCl9fWZ1bmN0aW9uIGQoKXtsKHRoaXMsYXJndW1lbnRzKS5tb3ZlZCgpfWZ1bmN0aW9uIHAoKXtsKHRoaXMsYXJndW1lbnRzKS5lbmRlZCgpfWZ1bmN0aW9uIHkoKXt2YXIgZT10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIGUuZXh0ZW50PXNpKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxlLmRpbT10LGV9cmV0dXJuIGMubW92ZT1mdW5jdGlvbihlLG4pe2Uuc2VsZWN0aW9uP2Uub24oInN0YXJ0LmJydXNoIiwoZnVuY3Rpb24oKXtsKHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLChmdW5jdGlvbigpe2wodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkpLnR3ZWVuKCJicnVzaCIsKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWUuX19icnVzaCxpPWwoZSxhcmd1bWVudHMpLGE9ci5zZWxlY3Rpb24sbz10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4sci5leHRlbnQpLHM9TW4oYSxvKTtmdW5jdGlvbiBjKHQpe3Iuc2VsZWN0aW9uPTE9PT10JiZudWxsPT09bz9udWxsOnModCksdS5jYWxsKGUpLGkuYnJ1c2goKX1yZXR1cm4gbnVsbCE9PWEmJm51bGwhPT1vP2M6YygxKX0pKTplLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cyxpPWUuX19icnVzaCxhPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseShlLHIpOm4saS5leHRlbnQpLG89bChlLHIpLmJlZm9yZXN0YXJ0KCk7c3IoZSksaS5zZWxlY3Rpb249bnVsbD09PWE/bnVsbDphLHUuY2FsbChlKSxvLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pKX0sYy5jbGVhcj1mdW5jdGlvbih0KXtjLm1vdmUodCxudWxsKX0saC5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSk6dGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihlKXt5ZShuZXcgSnIoYyxlLHQub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksby5hcHBseSxvLFtlLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGMuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UXIoc2kodCkpLGMpOm59LGMuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UXIoISF0KSxjKTpyfSxjLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFyKCEhdCksYyk6aX0sYy5oYW5kbGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGMpOnN9LGMua2V5TW9kaWZpZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhdCxjKTphfSxjLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1vP2M6dH0sY312YXIgQWk9TWF0aC5jb3MsTWk9TWF0aC5zaW4sT2k9TWF0aC5QSSxOaT1PaS8yLEJpPTIqT2ksRGk9TWF0aC5tYXg7ZnVuY3Rpb24gTGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUsbi5zb3VyY2UudmFsdWUrbi50YXJnZXQudmFsdWUpfX12YXIgSWk9ZnVuY3Rpb24oKXt2YXIgdD0wLGU9bnVsbCxuPW51bGwscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIGEsbyxzLGMsdSxsLGg9aS5sZW5ndGgsZj1bXSxkPXcoaCkscD1bXSx5PVtdLGc9eS5ncm91cHM9bmV3IEFycmF5KGgpLG09bmV3IEFycmF5KGgqaCk7Zm9yKGE9MCx1PS0xOysrdTxoOyl7Zm9yKG89MCxsPS0xOysrbDxoOylvKz1pW3VdW2xdO2YucHVzaChvKSxwLnB1c2godyhoKSksYSs9b31mb3IoZSYmZC5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlKGZbdF0sZltuXSl9KSksbiYmcC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3Quc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gbihpW2VdW3RdLGlbZV1bcl0pfSkpfSkpLGM9KGE9RGkoMCxCaS10KmgpL2EpP3Q6QmkvaCxvPTAsdT0tMTsrK3U8aDspe2ZvcihzPW8sbD0tMTsrK2w8aDspe3ZhciB2PWRbdV0sYj1wW3ZdW2xdLHg9aVt2XVtiXSxfPW8saz1vKz14KmE7bVtiKmgrdl09e2luZGV4OnYsc3ViaW5kZXg6YixzdGFydEFuZ2xlOl8sZW5kQW5nbGU6ayx2YWx1ZTp4fX1nW3ZdPXtpbmRleDp2LHN0YXJ0QW5nbGU6cyxlbmRBbmdsZTpvLHZhbHVlOmZbdl19LG8rPWN9Zm9yKHU9LTE7Kyt1PGg7KWZvcihsPXUtMTsrK2w8aDspe3ZhciBUPW1bbCpoK3VdLEU9bVt1KmgrbF07KFQudmFsdWV8fEUudmFsdWUpJiZ5LnB1c2goVC52YWx1ZTxFLnZhbHVlP3tzb3VyY2U6RSx0YXJnZXQ6VH06e3NvdXJjZTpULHRhcmdldDpFfSl9cmV0dXJuIHI/eS5zb3J0KHIpOnl9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9RGkoMCxlKSxpKTp0fSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxpKTplfSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKTpufSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1udWxsOihyPUxpKHQpKS5fPXQsaSk6ciYmci5ffSxpfSxSaT1BcnJheS5wcm90b3R5cGUuc2xpY2UsRmk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxQaT1NYXRoLlBJLGppPTIqUGksWWk9amktMWUtNjtmdW5jdGlvbiB6aSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIFVpKCl7cmV0dXJuIG5ldyB6aX16aS5wcm90b3R5cGU9VWkucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6aSxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rcil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyArcisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPSthKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4scixpKXt0PSt0LGU9K2Usbj0rbixyPStyLGk9K2k7dmFyIGE9dGhpcy5feDEsbz10aGlzLl95MSxzPW4tdCxjPXItZSx1PWEtdCxsPW8tZSxoPXUqdStsKmw7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGg+MWUtNilpZihNYXRoLmFicyhsKnMtYyp1KT4xZS02JiZpKXt2YXIgZj1uLWEsZD1yLW8scD1zKnMrYypjLHk9ZipmK2QqZCxnPU1hdGguc3FydChwKSxtPU1hdGguc3FydChoKSx2PWkqTWF0aC50YW4oKFBpLU1hdGguYWNvcygocCtoLXkpLygyKmcqbSkpKS8yKSxiPXYvbSx4PXYvZztNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisoZStiKmwpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsobCpmPnUqZCkrIiwiKyh0aGlzLl94MT10K3gqcykrIiwiKyh0aGlzLl95MT1lK3gqYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0PSt0LGU9K2UsYT0hIWE7dmFyIG89KG49K24pKk1hdGguY29zKHIpLHM9bipNYXRoLnNpbihyKSxjPXQrbyx1PWUrcyxsPTFeYSxoPWE/ci1pOmktcjtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2MrIiwiK3U6KE1hdGguYWJzKHRoaXMuX3gxLWMpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLXUpPjFlLTYpJiYodGhpcy5fKz0iTCIrYysiLCIrdSksbiYmKGg8MCYmKGg9aCVqaStqaSksaD5ZaT90aGlzLl8rPSJBIituKyIsIituKyIsMCwxLCIrbCsiLCIrKHQtbykrIiwiKyhlLXMpKyJBIituKyIsIituKyIsMCwxLCIrbCsiLCIrKHRoaXMuX3gxPWMpKyIsIisodGhpcy5feTE9dSk6aD4xZS02JiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhoPj1QaSkrIiwiK2wrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtyKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciAkaT1VaTtmdW5jdGlvbiBxaSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gV2kodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIEhpKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBWaSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIEdpKHQpe3JldHVybiB0LmVuZEFuZ2xlfXZhciBYaT1mdW5jdGlvbigpe3ZhciB0PXFpLGU9V2ksbj1IaSxyPVZpLGk9R2ksYT1udWxsO2Z1bmN0aW9uIG8oKXt2YXIgbyxzPVJpLmNhbGwoYXJndW1lbnRzKSxjPXQuYXBwbHkodGhpcyxzKSx1PWUuYXBwbHkodGhpcyxzKSxsPStuLmFwcGx5KHRoaXMsKHNbMF09YyxzKSksaD1yLmFwcGx5KHRoaXMscyktTmksZj1pLmFwcGx5KHRoaXMscyktTmksZD1sKkFpKGgpLHA9bCpNaShoKSx5PStuLmFwcGx5KHRoaXMsKHNbMF09dSxzKSksZz1yLmFwcGx5KHRoaXMscyktTmksbT1pLmFwcGx5KHRoaXMscyktTmk7aWYoYXx8KGE9bz0kaSgpKSxhLm1vdmVUbyhkLHApLGEuYXJjKDAsMCxsLGgsZiksaD09PWcmJmY9PT1tfHwoYS5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCx5KkFpKGcpLHkqTWkoZykpLGEuYXJjKDAsMCx5LGcsbSkpLGEucXVhZHJhdGljQ3VydmVUbygwLDAsZCxwKSxhLmNsb3NlUGF0aCgpLG8pcmV0dXJuIGE9bnVsbCxvKyIifHxudWxsfXJldHVybiBvLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkZpKCt0KSxvKTpufSxvLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpGaSgrdCksbyk6cn0sby5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkZpKCt0KSxvKTppfSxvLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8pOnR9LG8udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDp0LG8pOmF9LG99O2Z1bmN0aW9uIFppKCl7fWZ1bmN0aW9uIEtpKHQsZSl7dmFyIG49bmV3IFppO2lmKHQgaW5zdGFuY2VvZiBaaSl0LmVhY2goKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByLGk9LTEsYT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytpPGE7KW4uc2V0KGksdFtpXSk7ZWxzZSBmb3IoOysraTxhOyluLnNldChlKHI9dFtpXSxpLHQpLHIpfWVsc2UgaWYodClmb3IodmFyIG8gaW4gdCluLnNldChvLHRbb10pO3JldHVybiBufVppLnByb3RvdHlwZT1LaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlppLGhhczpmdW5jdGlvbih0KXtyZXR1cm4iJCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1siJCIrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9IiQiK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpIiQiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYoIiQiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBRaT1LaSxKaT1mdW5jdGlvbigpe3ZhciB0LGUsbixyPVtdLGk9W107ZnVuY3Rpb24gYShuLGksbyxzKXtpZihpPj1yLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgYyx1LGwsaD0tMSxmPW4ubGVuZ3RoLGQ9cltpKytdLHA9UWkoKSx5PW8oKTsrK2g8ZjspKGw9cC5nZXQoYz1kKHU9bltoXSkrIiIpKT9sLnB1c2godSk6cC5zZXQoYyxbdV0pO3JldHVybiBwLmVhY2goKGZ1bmN0aW9uKHQsZSl7cyh5LGUsYSh0LGksbyxzKSl9KSkseX1yZXR1cm4gbj17b2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBhKHQsMCx0YSxlYSl9LG1hcDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LDAsbmEscmEpfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KG4sYSl7aWYoKythPnIubGVuZ3RoKXJldHVybiBuO3ZhciBvLHM9aVthLTFdO3JldHVybiBudWxsIT1lJiZhPj1yLmxlbmd0aD9vPW4uZW50cmllcygpOihvPVtdLG4uZWFjaCgoZnVuY3Rpb24oZSxuKXtvLnB1c2goe2tleTpuLHZhbHVlczp0KGUsYSl9KX0pKSksbnVsbCE9cz9vLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModC5rZXksZS5rZXkpfSkpOm99KGEodCwwLG5hLHJhKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiByLnB1c2godCksbn0sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGlbci5sZW5ndGgtMV09dCxufSxzb3J0VmFsdWVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PWUsbn0scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsbn19fTtmdW5jdGlvbiB0YSgpe3JldHVybnt9fWZ1bmN0aW9uIGVhKHQsZSxuKXt0W2VdPW59ZnVuY3Rpb24gbmEoKXtyZXR1cm4gUWkoKX1mdW5jdGlvbiByYSh0LGUsbil7dC5zZXQoZSxuKX1mdW5jdGlvbiBpYSgpe312YXIgYWE9UWkucHJvdG90eXBlO2Z1bmN0aW9uIG9hKHQsZSl7dmFyIG49bmV3IGlhO2lmKHQgaW5zdGFuY2VvZiBpYSl0LmVhY2goKGZ1bmN0aW9uKHQpe24uYWRkKHQpfSkpO2Vsc2UgaWYodCl7dmFyIHI9LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPGk7KW4uYWRkKHRbcl0pO2Vsc2UgZm9yKDsrK3I8aTspbi5hZGQoZSh0W3JdLHIsdCkpfXJldHVybiBufWlhLnByb3RvdHlwZT1vYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlhLGhhczphYS5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTphYS5yZW1vdmUsY2xlYXI6YWEuY2xlYXIsdmFsdWVzOmFhLmtleXMsc2l6ZTphYS5zaXplLGVtcHR5OmFhLmVtcHR5LGVhY2g6YWEuZWFjaH07dmFyIHNhPW9hLGNhPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaChuKTtyZXR1cm4gZX0sdWE9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHRbbl0pO3JldHVybiBlfSxsYT1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2goe2tleTpuLHZhbHVlOnRbbl19KTtyZXR1cm4gZX0saGE9TWF0aC5QSS8xODAsZmE9MTgwL01hdGguUEk7ZnVuY3Rpb24gZGEodCl7aWYodCBpbnN0YW5jZW9mIGdhKXJldHVybiBuZXcgZ2EodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgVGEpcmV0dXJuIEVhKHQpO3QgaW5zdGFuY2VvZiBYZXx8KHQ9VmUodCkpO3ZhciBlLG4scj14YSh0LnIpLGk9eGEodC5nKSxhPXhhKHQuYiksbz1tYSgoLjIyMjUwNDUqcisuNzE2ODc4NippKy4wNjA2MTY5KmEpLzEpO3JldHVybiByPT09aSYmaT09PWE/ZT1uPW86KGU9bWEoKC40MzYwNzQ3KnIrLjM4NTA2NDkqaSsuMTQzMDgwNCphKS8uOTY0MjIpLG49bWEoKC4wMTM5MzIyKnIrLjA5NzEwNDUqaSsuNzE0MTczMyphKS8uODI1MjEpKSxuZXcgZ2EoMTE2Km8tMTYsNTAwKihlLW8pLDIwMCooby1uKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHBhKHQsZSl7cmV0dXJuIG5ldyBnYSh0LDAsMCxudWxsPT1lPzE6ZSl9ZnVuY3Rpb24geWEodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2RhKHQpOm5ldyBnYSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gZ2EodCxlLG4scil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIG1hKHQpe3JldHVybiB0PjYvMjkqKDYvMjkpKig2LzI5KT9NYXRoLnBvdyh0LDEvMyk6dC8oNi8yOSozKig2LzI5KSkrNC8yOX1mdW5jdGlvbiB2YSh0KXtyZXR1cm4gdD42LzI5P3QqdCp0OjYvMjkqMyooNi8yOSkqKHQtNC8yOSl9ZnVuY3Rpb24gYmEodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiB4YSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBfYSh0KXtpZih0IGluc3RhbmNlb2YgVGEpcmV0dXJuIG5ldyBUYSh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBnYXx8KHQ9ZGEodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBUYShOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpmYTtyZXR1cm4gbmV3IFRhKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGthKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9fYSh0KTpuZXcgVGEobixlLHQsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIHdhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9fYSh0KTpuZXcgVGEodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIFRhKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBFYSh0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgZ2EodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCpoYTtyZXR1cm4gbmV3IGdhKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9QWUoZ2EseWEsTWUoT2Use2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ2EodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBnYSh0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgWGUoYmEoMy4xMzM4NTYxKihlPS45NjQyMip2YShlKSktMS42MTY4NjY3Kih0PTEqdmEodCkpLS40OTA2MTQ2KihuPS44MjUyMSp2YShuKSkpLGJhKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqbiksYmEoLjA3MTk0NTMqZS0uMjI4OTkxNCp0KzEuNDA1MjQyNypuKSx0aGlzLm9wYWNpdHkpfX0pKSxBZShUYSx3YSxNZShPZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBUYSh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFRhKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIEVhKHRoaXMpLnJnYigpfX0pKTt2YXIgQ2E9LS4yOTIyNyxTYT0tMS43ODg0NTAzODA2LEFhPTMuNTE3Mjk4MjQzOCxNYT0tLjY1NTc2MzY2Njc5OTk5OTk7ZnVuY3Rpb24gT2EodCl7aWYodCBpbnN0YW5jZW9mIEJhKXJldHVybiBuZXcgQmEodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgWGV8fCh0PVZlKHQpKTt2YXIgZT10LnIvMjU1LG49dC5nLzI1NSxyPXQuYi8yNTUsaT0oTWEqcitTYSplLUFhKm4pLyhNYStTYS1BYSksYT1yLWksbz0oMS45NzI5NCoobi1pKS1DYSphKS8tLjkwNjQ5LHM9TWF0aC5zcXJ0KG8qbythKmEpLygxLjk3Mjk0KmkqKDEtaSkpLGM9cz9NYXRoLmF0YW4yKG8sYSkqZmEtMTIwOk5hTjtyZXR1cm4gbmV3IEJhKGM8MD9jKzM2MDpjLHMsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIE5hKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9PYSh0KTpuZXcgQmEodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIEJhKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1BZShCYSxOYSxNZShPZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IEJhKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IEJhKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpoYSxlPSt0aGlzLmwsbj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSkscj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcgWGUoMjU1KihlK24qKC0uMTQ4NjEqcisxLjc4Mjc3KmkpKSwyNTUqKGUrbiooQ2EqcistLjkwNjQ5KmkpKSwyNTUqKGUrbiooMS45NzI5NCpyKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIERhPUFycmF5LnByb3RvdHlwZS5zbGljZSxMYT1mdW5jdGlvbih0LGUpe3JldHVybiB0LWV9LElhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sUmE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihuPUZhKHQsZVtyXSkpcmV0dXJuIG47cmV0dXJuIDB9O2Z1bmN0aW9uIEZhKHQsZSl7Zm9yKHZhciBuPWVbMF0scj1lWzFdLGk9LTEsYT0wLG89dC5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgYz10W2FdLHU9Y1swXSxsPWNbMV0saD10W3NdLGY9aFswXSxkPWhbMV07aWYoUGEoYyxoLGUpKXJldHVybiAwO2w+ciE9ZD5yJiZuPChmLXUpKihyLWwpLyhkLWwpK3UmJihpPS1pKX1yZXR1cm4gaX1mdW5jdGlvbiBQYSh0LGUsbil7dmFyIHIsaSxhLG87cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4oZVswXS10WzBdKSooblsxXS10WzFdKT09KG5bMF0tdFswXSkqKGVbMV0tdFsxXSl9KHQsZSxuKSYmKGk9dFtyPSsodFswXT09PWVbMF0pXSxhPW5bcl0sbz1lW3JdLGk8PWEmJmE8PW98fG88PWEmJmE8PWkpfXZhciBqYT1mdW5jdGlvbigpe30sWWE9W1tdLFtbWzEsMS41XSxbLjUsMV1dXSxbW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbLjUsMV1dXSxbW1sxLC41XSxbMS41LDFdXV0sW1tbMSwxLjVdLFsuNSwxXV0sW1sxLC41XSxbMS41LDFdXV0sW1tbMSwuNV0sWzEsMS41XV1dLFtbWzEsLjVdLFsuNSwxXV1dLFtbWy41LDFdLFsxLC41XV1dLFtbWzEsMS41XSxbMSwuNV1dXSxbW1suNSwxXSxbMSwuNV1dLFtbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbMS41LDFdXV0sW1tbLjUsMV0sWzEsMS41XV1dLFtdXSx6YT1mdW5jdGlvbigpe3ZhciB0PTEsZT0xLG49TyxyPXM7ZnVuY3Rpb24gaSh0KXt2YXIgZT1uKHQpO2lmKEFycmF5LmlzQXJyYXkoZSkpZT1lLnNsaWNlKCkuc29ydChMYSk7ZWxzZXt2YXIgcj1tKHQpLGk9clswXSxvPXJbMV07ZT1NKGksbyxlKSxlPXcoTWF0aC5mbG9vcihpL2UpKmUsTWF0aC5mbG9vcihvL2UpKmUsZSl9cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gYSh0LGUpfSkpfWZ1bmN0aW9uIGEobixpKXt2YXIgYT1bXSxzPVtdO3JldHVybiBmdW5jdGlvbihuLHIsaSl7dmFyIGEscyxjLHUsbCxoLGY9bmV3IEFycmF5LGQ9bmV3IEFycmF5O2E9cz0tMSx1PW5bMF0+PXIsWWFbdTw8MV0uZm9yRWFjaChwKTtmb3IoOysrYTx0LTE7KWM9dSx1PW5bYSsxXT49cixZYVtjfHU8PDFdLmZvckVhY2gocCk7WWFbdTw8MF0uZm9yRWFjaChwKTtmb3IoOysrczxlLTE7KXtmb3IoYT0tMSx1PW5bcyp0K3RdPj1yLGw9bltzKnRdPj1yLFlhW3U8PDF8bDw8Ml0uZm9yRWFjaChwKTsrK2E8dC0xOyljPXUsdT1uW3MqdCt0K2ErMV0+PXIsaD1sLGw9bltzKnQrYSsxXT49cixZYVtjfHU8PDF8bDw8MnxoPDwzXS5mb3JFYWNoKHApO1lhW3V8bDw8M10uZm9yRWFjaChwKX1hPS0xLGw9bltzKnRdPj1yLFlhW2w8PDJdLmZvckVhY2gocCk7Zm9yKDsrK2E8dC0xOyloPWwsbD1uW3MqdCthKzFdPj1yLFlhW2w8PDJ8aDw8M10uZm9yRWFjaChwKTtmdW5jdGlvbiBwKHQpe3ZhciBlLG4scj1bdFswXVswXSthLHRbMF1bMV0rc10sYz1bdFsxXVswXSthLHRbMV1bMV0rc10sdT1vKHIpLGw9byhjKTsoZT1kW3VdKT8obj1mW2xdKT8oZGVsZXRlIGRbZS5lbmRdLGRlbGV0ZSBmW24uc3RhcnRdLGU9PT1uPyhlLnJpbmcucHVzaChjKSxpKGUucmluZykpOmZbZS5zdGFydF09ZFtuLmVuZF09e3N0YXJ0OmUuc3RhcnQsZW5kOm4uZW5kLHJpbmc6ZS5yaW5nLmNvbmNhdChuLnJpbmcpfSk6KGRlbGV0ZSBkW2UuZW5kXSxlLnJpbmcucHVzaChjKSxkW2UuZW5kPWxdPWUpOihlPWZbbF0pPyhuPWRbdV0pPyhkZWxldGUgZltlLnN0YXJ0XSxkZWxldGUgZFtuLmVuZF0sZT09PW4/KGUucmluZy5wdXNoKGMpLGkoZS5yaW5nKSk6ZltuLnN0YXJ0XT1kW2UuZW5kXT17c3RhcnQ6bi5zdGFydCxlbmQ6ZS5lbmQscmluZzpuLnJpbmcuY29uY2F0KGUucmluZyl9KTooZGVsZXRlIGZbZS5zdGFydF0sZS5yaW5nLnVuc2hpZnQociksZltlLnN0YXJ0PXVdPWUpOmZbdV09ZFtsXT17c3RhcnQ6dSxlbmQ6bCxyaW5nOltyLGNdfX1ZYVtsPDwzXS5mb3JFYWNoKHApfShuLGksKGZ1bmN0aW9uKHQpe3IodCxuLGkpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGgscj10W24tMV1bMV0qdFswXVswXS10W24tMV1bMF0qdFswXVsxXTsrK2U8bjspcis9dFtlLTFdWzFdKnRbZV1bMF0tdFtlLTFdWzBdKnRbZV1bMV07cmV0dXJuIHJ9KHQpPjA/YS5wdXNoKFt0XSk6cy5wdXNoKHQpfSkpLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MCxyPWEubGVuZ3RoO248cjsrK24paWYoLTEhPT1SYSgoZT1hW25dKVswXSx0KSlyZXR1cm4gdm9pZCBlLnB1c2godCl9KSkse3R5cGU6Ik11bHRpUG9seWdvbiIsdmFsdWU6aSxjb29yZGluYXRlczphfX1mdW5jdGlvbiBvKGUpe3JldHVybiAyKmVbMF0rZVsxXSoodCsxKSo0fWZ1bmN0aW9uIHMobixyLGkpe24uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGEsbz1uWzBdLHM9blsxXSxjPTB8byx1PTB8cyxsPXJbdSp0K2NdO28+MCYmbzx0JiZjPT09byYmKGE9clt1KnQrYy0xXSxuWzBdPW8rKGktYSkvKGwtYSktLjUpLHM+MCYmczxlJiZ1PT09cyYmKGE9clsodS0xKSp0K2NdLG5bMV09cysoaS1hKS8obC1hKS0uNSl9KSl9cmV0dXJuIGkuY29udG91cj1hLGkuc2l6ZT1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bdCxlXTt2YXIgcj1NYXRoLmNlaWwoblswXSksYT1NYXRoLmNlaWwoblsxXSk7aWYoIShyPjAmJmE+MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gdD1yLGU9YSxpfSxpLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP0lhKERhLmNhbGwodCkpOklhKHQpLGkpOm59LGkuc21vb3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQ/czpqYSxpKTpyPT09c30saX07ZnVuY3Rpb24gVWEodCxlLG4pe2Zvcih2YXIgcj10LndpZHRoLGk9dC5oZWlnaHQsYT0xKyhuPDwxKSxvPTA7bzxpOysrbylmb3IodmFyIHM9MCxjPTA7czxyK247KytzKXM8ciYmKGMrPXQuZGF0YVtzK28qcl0pLHM+PW4mJihzPj1hJiYoYy09dC5kYXRhW3MtYStvKnJdKSxlLmRhdGFbcy1uK28qcl09Yy9NYXRoLm1pbihzKzEsci0xK2EtcyxhKSl9ZnVuY3Rpb24gJGEodCxlLG4pe2Zvcih2YXIgcj10LndpZHRoLGk9dC5oZWlnaHQsYT0xKyhuPDwxKSxvPTA7bzxyOysrbylmb3IodmFyIHM9MCxjPTA7czxpK247KytzKXM8aSYmKGMrPXQuZGF0YVtvK3Mqcl0pLHM+PW4mJihzPj1hJiYoYy09dC5kYXRhW28rKHMtYSkqcl0pLGUuZGF0YVtvKyhzLW4pKnJdPWMvTWF0aC5taW4ocysxLGktMSthLXMsYSkpfWZ1bmN0aW9uIHFhKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFdhKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIEhhKCl7cmV0dXJuIDF9dmFyIFZhPWZ1bmN0aW9uKCl7dmFyIHQ9cWEsZT1XYSxuPUhhLHI9OTYwLGk9NTAwLGE9MjAsbz0yLHM9MyphLGM9cisyKnM+Pm8sdT1pKzIqcz4+byxsPUlhKDIwKTtmdW5jdGlvbiBoKHIpe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoYyp1KSxoPW5ldyBGbG9hdDMyQXJyYXkoYyp1KTtyLmZvckVhY2goKGZ1bmN0aW9uKHIsYSxsKXt2YXIgaD0rdChyLGEsbCkrcz4+byxmPStlKHIsYSxsKStzPj5vLGQ9K24ocixhLGwpO2g+PTAmJmg8YyYmZj49MCYmZjx1JiYoaVtoK2YqY10rPWQpfSkpLFVhKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSxhPj5vKSwkYSh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0sYT4+byksVWEoe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LGE+Pm8pLCRhKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSxhPj5vKSxVYSh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0sYT4+byksJGEoe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LGE+Pm8pO3ZhciBkPWwoaSk7aWYoIUFycmF5LmlzQXJyYXkoZCkpe3ZhciBwPUkoaSk7ZD1NKDAscCxkKSwoZD13KDAsTWF0aC5mbG9vcihwL2QpKmQsZCkpLnNoaWZ0KCl9cmV0dXJuIHphKCkudGhyZXNob2xkcyhkKS5zaXplKFtjLHVdKShpKS5tYXAoZil9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC52YWx1ZSo9TWF0aC5wb3coMiwtMipvKSx0LmNvb3JkaW5hdGVzLmZvckVhY2goZCksdH1mdW5jdGlvbiBkKHQpe3QuZm9yRWFjaChwKX1mdW5jdGlvbiBwKHQpe3QuZm9yRWFjaCh5KX1mdW5jdGlvbiB5KHQpe3RbMF09dFswXSpNYXRoLnBvdygyLG8pLXMsdFsxXT10WzFdKk1hdGgucG93KDIsbyktc31mdW5jdGlvbiBnKCl7cmV0dXJuIGM9cisyKihzPTMqYSk+Pm8sdT1pKzIqcz4+byxofXJldHVybiBoLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpJYSgrZSksaCk6dH0saC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SWEoK3QpLGgpOmV9LGgud2VpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SWEoK3QpLGgpOm59LGguc2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bcixpXTt2YXIgZT1NYXRoLmNlaWwodFswXSksbj1NYXRoLmNlaWwodFsxXSk7aWYoIShlPj0wfHxlPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiByPWUsaT1uLGcoKX0saC5jZWxsU2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gMTw8bztpZighKCh0PSt0KT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNlbGwgc2l6ZSIpO3JldHVybiBvPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLGcoKX0saC50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9JYShEYS5jYWxsKHQpKTpJYSh0KSxoKTpsfSxoLmJhbmR3aWR0aD1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KGEqKGErMSkpO2lmKCEoKHQ9K3QpPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYmFuZHdpZHRoIik7cmV0dXJuIGE9TWF0aC5yb3VuZCgoTWF0aC5zcXJ0KDQqdCp0KzEpLTEpLzIpLGcoKX0saH0sR2E9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtmdW5jdGlvbiBYYSh0LGUsbixyLGksYSxvLHMsYyx1KXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc3ViamVjdD1uLHRoaXMuaWRlbnRpZmllcj1yLHRoaXMuYWN0aXZlPWksdGhpcy54PWEsdGhpcy55PW8sdGhpcy5keD1zLHRoaXMuZHk9Yyx0aGlzLl89dX1mdW5jdGlvbiBaYSgpe3JldHVybiF1ZS5jdHJsS2V5JiYhdWUuYnV0dG9ufWZ1bmN0aW9uIEthKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBRYSh0KXtyZXR1cm4gbnVsbD09dD97eDp1ZS54LHk6dWUueX06dH1mdW5jdGlvbiBKYSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31YYS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgdG89ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpPVphLGE9S2Esbz1RYSxzPUphLGM9e30sdT1odCgic3RhcnQiLCJkcmFnIiwiZW5kIiksbD0wLGg9MDtmdW5jdGlvbiBmKHQpe3Qub24oIm1vdXNlZG93bi5kcmFnIixkKS5maWx0ZXIocykub24oInRvdWNoc3RhcnQuZHJhZyIsZykub24oInRvdWNobW92ZS5kcmFnIixtKS5vbigidG91Y2hlbmQuZHJhZyB0b3VjaGNhbmNlbC5kcmFnIix2KS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gZCgpe2lmKCFyJiZpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG89YigibW91c2UiLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLERuLHRoaXMsYXJndW1lbnRzKTtvJiYod2UodWUudmlldykub24oIm1vdXNlbW92ZS5kcmFnIixwLCEwKS5vbigibW91c2V1cC5kcmFnIix5LCEwKSxDZSh1ZS52aWV3KSxUZSgpLG49ITEsdD11ZS5jbGllbnRYLGU9dWUuY2xpZW50WSxvKCJzdGFydCIpKX19ZnVuY3Rpb24gcCgpe2lmKEVlKCksIW4pe3ZhciByPXVlLmNsaWVudFgtdCxpPXVlLmNsaWVudFktZTtuPXIqcitpKmk+aH1jLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24geSgpe3dlKHVlLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLFNlKHVlLnZpZXcsbiksRWUoKSxjLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBnKCl7aWYoaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0LGUsbj11ZS5jaGFuZ2VkVG91Y2hlcyxyPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLG89bi5sZW5ndGg7Zm9yKHQ9MDt0PG87Kyt0KShlPWIoblt0XS5pZGVudGlmaWVyLHIsQm4sdGhpcyxhcmd1bWVudHMpKSYmKFRlKCksZSgic3RhcnQiKSl9fWZ1bmN0aW9uIG0oKXt2YXIgdCxlLG49dWUuY2hhbmdlZFRvdWNoZXMscj1uLmxlbmd0aDtmb3IodD0wO3Q8cjsrK3QpKGU9Y1tuW3RdLmlkZW50aWZpZXJdKSYmKEVlKCksZSgiZHJhZyIpKX1mdW5jdGlvbiB2KCl7dmFyIHQsZSxuPXVlLmNoYW5nZWRUb3VjaGVzLGk9bi5sZW5ndGg7Zm9yKHImJmNsZWFyVGltZW91dChyKSxyPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cj1udWxsfSksNTAwKSx0PTA7dDxpOysrdCkoZT1jW25bdF0uaWRlbnRpZmllcl0pJiYoVGUoKSxlKCJlbmQiKSl9ZnVuY3Rpb24gYih0LGUsbixyLGkpe3ZhciBhLHMsaCxkPW4oZSx0KSxwPXUuY29weSgpO2lmKHllKG5ldyBYYShmLCJiZWZvcmVzdGFydCIsYSx0LGwsZFswXSxkWzFdLDAsMCxwKSwoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9KHVlLnN1YmplY3Q9YT1vLmFwcGx5KHIsaSkpJiYocz1hLngtZFswXXx8MCxoPWEueS1kWzFdfHwwLCEwKX0pKSlyZXR1cm4gZnVuY3Rpb24gbyh1KXt2YXIgeSxnPWQ7c3dpdGNoKHUpe2Nhc2Uic3RhcnQiOmNbdF09byx5PWwrKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGNbdF0sLS1sO2Nhc2UiZHJhZyI6ZD1uKGUsdCkseT1sfXllKG5ldyBYYShmLHUsYSx0LHksZFswXStzLGRbMV0raCxkWzBdLWdbMF0sZFsxXS1nWzFdLHApLHAuYXBwbHkscCxbdSxyLGldKX19cmV0dXJuIGYuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6R2EoISF0KSxmKTppfSxmLmNvbnRhaW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkdhKHQpLGYpOmF9LGYuc3ViamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkdhKHQpLGYpOm99LGYudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6R2EoISF0KSxmKTpzfSxmLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9dS5vbi5hcHBseSh1LGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT11P2Y6dH0sZi5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSh0PSt0KSp0LGYpOk1hdGguc3FydChoKX0sZn0sZW89e30sbm89e307ZnVuY3Rpb24gcm8odCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrJ10gfHwgIiInfSkpLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIGlvKHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCksbj1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIHIgaW4gdClyIGluIGV8fG4ucHVzaChlW3JdPXIpfSkpLG59ZnVuY3Rpb24gYW8odCxlKXt2YXIgbj10KyIiLHI9bi5sZW5ndGg7cmV0dXJuIHI8ZT9uZXcgQXJyYXkoZS1yKzEpLmpvaW4oMCkrbjpufWZ1bmN0aW9uIG9vKHQpe3ZhciBlLG49dC5nZXRVVENIb3VycygpLHI9dC5nZXRVVENNaW51dGVzKCksaT10LmdldFVUQ1NlY29uZHMoKSxhPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7cmV0dXJuIGlzTmFOKHQpPyJJbnZhbGlkIERhdGUiOigoZT10LmdldFVUQ0Z1bGxZZWFyKCkpPDA/Ii0iK2FvKC1lLDYpOmU+OTk5OT8iKyIrYW8oZSw2KTphbyhlLDQpKSsiLSIrYW8odC5nZXRVVENNb250aCgpKzEsMikrIi0iK2FvKHQuZ2V0VVRDRGF0ZSgpLDIpKyhhPyJUIithbyhuLDIpKyI6IithbyhyLDIpKyI6IithbyhpLDIpKyIuIithbyhhLDMpKyJaIjppPyJUIithbyhuLDIpKyI6IithbyhyLDIpKyI6IithbyhpLDIpKyJaIjpyfHxuPyJUIithbyhuLDIpKyI6IithbyhyLDIpKyJaIjoiIil9dmFyIHNvPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBSZWdFeHAoJ1siJyt0KyJcblxyXSIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIHIodCxlKXt2YXIgcixpPVtdLGE9dC5sZW5ndGgsbz0wLHM9MCxjPWE8PTAsdT0hMTtmdW5jdGlvbiBsKCl7aWYoYylyZXR1cm4gbm87aWYodSlyZXR1cm4gdT0hMSxlbzt2YXIgZSxyLGk9bztpZigzND09PXQuY2hhckNvZGVBdChpKSl7Zm9yKDtvKys8YSYmMzQhPT10LmNoYXJDb2RlQXQobyl8fDM0PT09dC5jaGFyQ29kZUF0KCsrbyk7KTtyZXR1cm4oZT1vKT49YT9jPSEwOjEwPT09KHI9dC5jaGFyQ29kZUF0KG8rKykpP3U9ITA6MTM9PT1yJiYodT0hMCwxMD09PXQuY2hhckNvZGVBdChvKSYmKytvKSx0LnNsaWNlKGkrMSxlLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO288YTspe2lmKDEwPT09KHI9dC5jaGFyQ29kZUF0KGU9bysrKSkpdT0hMDtlbHNlIGlmKDEzPT09cil1PSEwLDEwPT09dC5jaGFyQ29kZUF0KG8pJiYrK287ZWxzZSBpZihyIT09biljb250aW51ZTtyZXR1cm4gdC5zbGljZShpLGUpfXJldHVybiBjPSEwLHQuc2xpY2UoaSxhKX1mb3IoMTA9PT10LmNoYXJDb2RlQXQoYS0xKSYmLS1hLDEzPT09dC5jaGFyQ29kZUF0KGEtMSkmJi0tYTsocj1sKCkpIT09bm87KXtmb3IodmFyIGg9W107ciE9PWVvJiZyIT09bm87KWgucHVzaChyKSxyPWwoKTtlJiZudWxsPT0oaD1lKGgscysrKSl8fGkucHVzaChoKX1yZXR1cm4gaX1mdW5jdGlvbiBpKGUsbil7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvKGVbdF0pfSkpLmpvaW4odCl9KSl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5tYXAobykuam9pbih0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT10PyIiOnQgaW5zdGFuY2VvZiBEYXRlP29vKHQpOmUudGVzdCh0Kz0iIik/JyInK3QucmVwbGFjZSgvIi9nLCciIicpKyciJzp0fXJldHVybntwYXJzZTpmdW5jdGlvbih0LGUpe3ZhciBuLGksYT1yKHQsKGZ1bmN0aW9uKHQscil7aWYobilyZXR1cm4gbih0LHItMSk7aT10LG49ZT9mdW5jdGlvbih0LGUpe3ZhciBuPXJvKHQpO3JldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiBlKG4ociksaSx0KX19KHQsZSk6cm8odCl9KSk7cmV0dXJuIGEuY29sdW1ucz1pfHxbXSxhfSxwYXJzZVJvd3M6cixmb3JtYXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbnVsbD09biYmKG49aW8oZSkpLFtuLm1hcChvKS5qb2luKHQpXS5jb25jYXQoaShlLG4pKS5qb2luKCJcbiIpfSxmb3JtYXRCb2R5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWUmJihlPWlvKHQpKSxpKHQsZSkuam9pbigiXG4iKX0sZm9ybWF0Um93czpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoYSkuam9pbigiXG4iKX0sZm9ybWF0Um93OmEsZm9ybWF0VmFsdWU6b319LGNvPXNvKCIsIiksdW89Y28ucGFyc2UsbG89Y28ucGFyc2VSb3dzLGhvPWNvLmZvcm1hdCxmbz1jby5mb3JtYXRCb2R5LHBvPWNvLmZvcm1hdFJvd3MseW89Y28uZm9ybWF0Um93LGdvPWNvLmZvcm1hdFZhbHVlLG1vPXNvKCJcdCIpLHZvPW1vLnBhcnNlLGJvPW1vLnBhcnNlUm93cyx4bz1tby5mb3JtYXQsX289bW8uZm9ybWF0Qm9keSxrbz1tby5mb3JtYXRSb3dzLHdvPW1vLmZvcm1hdFJvdyxUbz1tby5mb3JtYXRWYWx1ZTtmdW5jdGlvbiBFbyh0KXtmb3IodmFyIGUgaW4gdCl7dmFyIG4scixpPXRbZV0udHJpbSgpO2lmKGkpaWYoInRydWUiPT09aSlpPSEwO2Vsc2UgaWYoImZhbHNlIj09PWkpaT0hMTtlbHNlIGlmKCJOYU4iPT09aSlpPU5hTjtlbHNlIGlmKGlzTmFOKG49K2kpKXtpZighKHI9aS5tYXRjaCgvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8pKSljb250aW51ZTtDbyYmcls0XSYmIXJbN10mJihpPWkucmVwbGFjZSgvLS9nLCIvIikucmVwbGFjZSgvVC8sIiAiKSksaT1uZXcgRGF0ZShpKX1lbHNlIGk9bjtlbHNlIGk9bnVsbDt0W2VdPWl9cmV0dXJuIHR9dmFyIENvPW5ldyBEYXRlKCIyMDE5LTAxLTAxVDAwOjAwIikuZ2V0SG91cnMoKXx8bmV3IERhdGUoIjIwMTktMDctMDFUMDA6MDAiKS5nZXRIb3VycygpO2Z1bmN0aW9uIFNvKHQpe3JldHVybit0fWZ1bmN0aW9uIEFvKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gTW8odCl7cmV0dXJuIHQqKDItdCl9ZnVuY3Rpb24gT28odCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQ6LS10KigyLXQpKzEpLzJ9dmFyIE5vPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksQm89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksRG89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3codCxlKToyLU1hdGgucG93KDItdCxlKSkvMn1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksTG89TWF0aC5QSSxJbz1Mby8yO2Z1bmN0aW9uIFJvKHQpe3JldHVybiAxPT0rdD8xOjEtTWF0aC5jb3ModCpJbyl9ZnVuY3Rpb24gRm8odCl7cmV0dXJuIE1hdGguc2luKHQqSW8pfWZ1bmN0aW9uIFBvKHQpe3JldHVybigxLU1hdGguY29zKExvKnQpKS8yfWZ1bmN0aW9uIGpvKHQpe3JldHVybiAxLjAwMDk3NzUxNzEwNjU0OTQqKE1hdGgucG93KDIsLTEwKnQpLS4wMDA5NzY1NjI1KX1mdW5jdGlvbiBZbyh0KXtyZXR1cm4gam8oMS0rdCl9ZnVuY3Rpb24gem8odCl7cmV0dXJuIDEtam8odCl9ZnVuY3Rpb24gVW8odCl7cmV0dXJuKCh0Kj0yKTw9MT9qbygxLXQpOjItam8odC0xKSkvMn1mdW5jdGlvbiAkbyh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIHFvKHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfWZ1bmN0aW9uIFdvKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfWZ1bmN0aW9uIEhvKHQpe3JldHVybiAxLVZvKDEtdCl9ZnVuY3Rpb24gVm8odCl7cmV0dXJuKHQ9K3QpPDQvMTE/Ny41NjI1KnQqdDp0PDgvMTE/Ny41NjI1Kih0LT02LzExKSp0KzMvNDp0PDEwLzExPzcuNTYyNSoodC09OS8xMSkqdCsxNS8xNjo3LjU2MjUqKHQtPTIxLzIyKSp0KzYzLzY0fWZ1bmN0aW9uIEdvKHQpe3JldHVybigodCo9Mik8PTE/MS1WbygxLXQpOlZvKHQtMSkrMSkvMn12YXIgWG89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybih0PSt0KSp0KihlKih0LTEpK3QpfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCksWm89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybi0tdCp0KigodCsxKSplK3QpKzF9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxLbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKGUrMSkqdC1lKToodC09MikqdCooKGUrMSkqdCtlKSsyKS8yfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCksUW89MipNYXRoLlBJLEpvPWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPVFvKTtmdW5jdGlvbiBpKHQpe3JldHVybiBlKmpvKC0gLS10KSpNYXRoLnNpbigoci10KS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKlFvKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyksdHM9ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89UW8pO2Z1bmN0aW9uIGkodCl7cmV0dXJuIDEtZSpqbyh0PSt0KSpNYXRoLnNpbigodCtyKS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKlFvKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyksZXM9ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89UW8pO2Z1bmN0aW9uIGkodCl7cmV0dXJuKCh0PTIqdC0xKTwwP2Uqam8oLXQpKk1hdGguc2luKChyLXQpL24pOjItZSpqbyh0KSpNYXRoLnNpbigocit0KS9uKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKlFvKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyk7ZnVuY3Rpb24gbnModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmJsb2IoKX12YXIgcnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKG5zKX07ZnVuY3Rpb24gaXModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmFycmF5QnVmZmVyKCl9dmFyIGFzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihpcyl9O2Z1bmN0aW9uIG9zKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC50ZXh0KCl9dmFyIHNzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihvcyl9O2Z1bmN0aW9uIGNzKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCksc3MoZSxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gdChlLHIpfSkpfX1mdW5jdGlvbiB1cyh0LGUsbixyKXszPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihyPW4sbj12b2lkIDApO3ZhciBpPXNvKHQpO3JldHVybiBzcyhlLG4pLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpLnBhcnNlKHQscil9KSl9dmFyIGxzPWNzKHVvKSxocz1jcyh2byksZnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4scil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgYSBpbiBlKWlbYV09ZVthXTtpLm9uZXJyb3I9cixpLm9ubG9hZD1mdW5jdGlvbigpe24oaSl9LGkuc3JjPXR9KSl9O2Z1bmN0aW9uIGRzKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtpZigyMDQhPT10LnN0YXR1cyYmMjA1IT09dC5zdGF0dXMpcmV0dXJuIHQuanNvbigpfXZhciBwcz1mdW5jdGlvbih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oZHMpfTtmdW5jdGlvbiB5cyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gc3MoZSxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsdCl9KSl9fXZhciBncz15cygiYXBwbGljYXRpb24veG1sIiksbXM9eXMoInRleHQvaHRtbCIpLHZzPXlzKCJpbWFnZS9zdmcreG1sIiksYnM9ZnVuY3Rpb24odCxlKXt2YXIgbjtmdW5jdGlvbiByKCl7dmFyIHIsaSxhPW4ubGVuZ3RoLG89MCxzPTA7Zm9yKHI9MDtyPGE7KytyKW8rPShpPW5bcl0pLngscys9aS55O2ZvcihvPW8vYS10LHM9cy9hLWUscj0wO3I8YTsrK3IpKGk9bltyXSkueC09byxpLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLHIuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXR9LHIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxyKTp0fSxyLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscik6ZX0scn0seHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxfcz1mdW5jdGlvbigpe3JldHVybiAxZS02KihNYXRoLnJhbmRvbSgpLS41KX07ZnVuY3Rpb24ga3ModCxlLG4scil7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciBpLGEsbyxzLGMsdSxsLGgsZixkPXQuX3Jvb3QscD17ZGF0YTpyfSx5PXQuX3gwLGc9dC5feTAsbT10Ll94MSx2PXQuX3kxO2lmKCFkKXJldHVybiB0Ll9yb290PXAsdDtmb3IoO2QubGVuZ3RoOylpZigodT1lPj0oYT0oeSttKS8yKSk/eT1hOm09YSwobD1uPj0obz0oZyt2KS8yKSk/Zz1vOnY9byxpPWQsIShkPWRbaD1sPDwxfHVdKSlyZXR1cm4gaVtoXT1wLHQ7aWYocz0rdC5feC5jYWxsKG51bGwsZC5kYXRhKSxjPSt0Ll95LmNhbGwobnVsbCxkLmRhdGEpLGU9PT1zJiZuPT09YylyZXR1cm4gcC5uZXh0PWQsaT9pW2hdPXA6dC5fcm9vdD1wLHQ7ZG97aT1pP2lbaF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLCh1PWU+PShhPSh5K20pLzIpKT95PWE6bT1hLChsPW4+PShvPShnK3YpLzIpKT9nPW86dj1vfXdoaWxlKChoPWw8PDF8dSk9PShmPShjPj1vKTw8MXxzPj1hKSk7cmV0dXJuIGlbZl09ZCxpW2hdPXAsdH12YXIgd3M9ZnVuY3Rpb24odCxlLG4scixpKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1uLHRoaXMueDE9cix0aGlzLnkxPWl9O2Z1bmN0aW9uIFRzKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIEVzKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIENzKHQsZSxuKXt2YXIgcj1uZXcgU3MobnVsbD09ZT9UczplLG51bGw9PW4/RXM6bixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P3I6ci5hZGRBbGwodCl9ZnVuY3Rpb24gU3ModCxlLG4scixpLGEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9bix0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBBcyh0KXtmb3IodmFyIGU9e2RhdGE6dC5kYXRhfSxuPWU7dD10Lm5leHQ7KW49bi5uZXh0PXtkYXRhOnQuZGF0YX07cmV0dXJuIGV9dmFyIE1zPUNzLnByb3RvdHlwZT1Tcy5wcm90b3R5cGU7ZnVuY3Rpb24gT3ModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIE5zKHQpe3JldHVybiB0LnkrdC52eX1Ncy5jb3B5PWZ1bmN0aW9uKCl7dmFyIHQsZSxuPW5ldyBTcyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLHI9dGhpcy5fcm9vdDtpZighcilyZXR1cm4gbjtpZighci5sZW5ndGgpcmV0dXJuIG4uX3Jvb3Q9QXMociksbjtmb3IodD1be3NvdXJjZTpyLHRhcmdldDpuLl9yb290PW5ldyBBcnJheSg0KX1dO3I9dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1yLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpyLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpyLnRhcmdldFtpXT1BcyhlKSk7cmV0dXJuIG59LE1zLmFkZD1mdW5jdGlvbih0KXt2YXIgZT0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIGtzKHRoaXMuY292ZXIoZSxuKSxlLG4sdCl9LE1zLmFkZEFsbD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhPXQubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9bmV3IEFycmF5KGEpLGM9MS8wLHU9MS8wLGw9LTEvMCxoPS0xLzA7Zm9yKG49MDtuPGE7KytuKWlzTmFOKHI9K3RoaXMuX3guY2FsbChudWxsLGU9dFtuXSkpfHxpc05hTihpPSt0aGlzLl95LmNhbGwobnVsbCxlKSl8fChvW25dPXIsc1tuXT1pLHI8YyYmKGM9cikscj5sJiYobD1yKSxpPHUmJih1PWkpLGk+aCYmKGg9aSkpO2lmKGM+bHx8dT5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGMsdSkuY292ZXIobCxoKSxuPTA7bjxhOysrbilrcyh0aGlzLG9bbl0sc1tuXSx0W25dKTtyZXR1cm4gdGhpc30sTXMuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5feDAscj10aGlzLl95MCxpPXRoaXMuX3gxLGE9dGhpcy5feTE7aWYoaXNOYU4obikpaT0obj1NYXRoLmZsb29yKHQpKSsxLGE9KHI9TWF0aC5mbG9vcihlKSkrMTtlbHNle2Zvcih2YXIgbyxzLGM9aS1uLHU9dGhpcy5fcm9vdDtuPnR8fHQ+PWl8fHI+ZXx8ZT49YTspc3dpdGNoKHM9KGU8cik8PDF8dDxuLChvPW5ldyBBcnJheSg0KSlbc109dSx1PW8sYyo9MixzKXtjYXNlIDA6aT1uK2MsYT1yK2M7YnJlYWs7Y2FzZSAxOm49aS1jLGE9citjO2JyZWFrO2Nhc2UgMjppPW4rYyxyPWEtYzticmVhaztjYXNlIDM6bj1pLWMscj1hLWN9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PXUpfXJldHVybiB0aGlzLl94MD1uLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXN9LE1zLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRve3QucHVzaChlLmRhdGEpfXdoaWxlKGU9ZS5uZXh0KX0pKSx0fSxNcy5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LE1zLmZpbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvLHMsYyx1LGw9dGhpcy5feDAsaD10aGlzLl95MCxmPXRoaXMuX3gxLGQ9dGhpcy5feTEscD1bXSx5PXRoaXMuX3Jvb3Q7Zm9yKHkmJnAucHVzaChuZXcgd3MoeSxsLGgsZixkKSksbnVsbD09bj9uPTEvMDoobD10LW4saD1lLW4sZj10K24sZD1lK24sbio9bik7Yz1wLnBvcCgpOylpZighKCEoeT1jLm5vZGUpfHwoaT1jLngwKT5mfHwoYT1jLnkwKT5kfHwobz1jLngxKTxsfHwocz1jLnkxKTxoKSlpZih5Lmxlbmd0aCl7dmFyIGc9KGkrbykvMixtPShhK3MpLzI7cC5wdXNoKG5ldyB3cyh5WzNdLGcsbSxvLHMpLG5ldyB3cyh5WzJdLGksbSxnLHMpLG5ldyB3cyh5WzFdLGcsYSxvLG0pLG5ldyB3cyh5WzBdLGksYSxnLG0pKSwodT0oZT49bSk8PDF8dD49ZykmJihjPXBbcC5sZW5ndGgtMV0scFtwLmxlbmd0aC0xXT1wW3AubGVuZ3RoLTEtdV0scFtwLmxlbmd0aC0xLXVdPWMpfWVsc2V7dmFyIHY9dC0rdGhpcy5feC5jYWxsKG51bGwseS5kYXRhKSxiPWUtK3RoaXMuX3kuY2FsbChudWxsLHkuZGF0YSkseD12KnYrYipiO2lmKHg8bil7dmFyIF89TWF0aC5zcXJ0KG49eCk7bD10LV8saD1lLV8sZj10K18sZD1lK18scj15LmRhdGF9fXJldHVybiByfSxNcy5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4oYT0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUsbixyLGksYSxvLHMsYyx1LGwsaCxmLGQ9dGhpcy5fcm9vdCxwPXRoaXMuX3gwLHk9dGhpcy5feTAsZz10aGlzLl94MSxtPXRoaXMuX3kxO2lmKCFkKXJldHVybiB0aGlzO2lmKGQubGVuZ3RoKWZvcig7Oyl7aWYoKHU9YT49KHM9KHArZykvMikpP3A9czpnPXMsKGw9bz49KGM9KHkrbSkvMikpP3k9YzptPWMsZT1kLCEoZD1kW2g9bDw8MXx1XSkpcmV0dXJuIHRoaXM7aWYoIWQubGVuZ3RoKWJyZWFrOyhlW2grMSYzXXx8ZVtoKzImM118fGVbaCszJjNdKSYmKG49ZSxmPWgpfWZvcig7ZC5kYXRhIT09dDspaWYocj1kLCEoZD1kLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPWQubmV4dCkmJmRlbGV0ZSBkLm5leHQscj8oaT9yLm5leHQ9aTpkZWxldGUgci5uZXh0LHRoaXMpOmU/KGk/ZVtoXT1pOmRlbGV0ZSBlW2hdLChkPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZkPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhZC5sZW5ndGgmJihuP25bZl09ZDp0aGlzLl9yb290PWQpLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LE1zLnJlbW92ZUFsbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpdGhpcy5yZW1vdmUodFtlXSk7cmV0dXJuIHRoaXN9LE1zLnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sTXMuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSkpLHR9LE1zLnZpc2l0PWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGEsbyxzPVtdLGM9dGhpcy5fcm9vdDtmb3IoYyYmcy5wdXNoKG5ldyB3cyhjLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1zLnBvcCgpOylpZighdChjPWUubm9kZSxyPWUueDAsaT1lLnkwLGE9ZS54MSxvPWUueTEpJiZjLmxlbmd0aCl7dmFyIHU9KHIrYSkvMixsPShpK28pLzI7KG49Y1szXSkmJnMucHVzaChuZXcgd3Mobix1LGwsYSxvKSksKG49Y1syXSkmJnMucHVzaChuZXcgd3MobixyLGwsdSxvKSksKG49Y1sxXSkmJnMucHVzaChuZXcgd3Mobix1LGksYSxsKSksKG49Y1swXSkmJnMucHVzaChuZXcgd3MobixyLGksdSxsKSl9cmV0dXJuIHRoaXN9LE1zLnZpc2l0QWZ0ZXI9ZnVuY3Rpb24odCl7dmFyIGUsbj1bXSxyPVtdO2Zvcih0aGlzLl9yb290JiZuLnB1c2gobmV3IHdzKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPW4ucG9wKCk7KXt2YXIgaT1lLm5vZGU7aWYoaS5sZW5ndGgpe3ZhciBhLG89ZS54MCxzPWUueTAsYz1lLngxLHU9ZS55MSxsPShvK2MpLzIsaD0ocyt1KS8yOyhhPWlbMF0pJiZuLnB1c2gobmV3IHdzKGEsbyxzLGwsaCkpLChhPWlbMV0pJiZuLnB1c2gobmV3IHdzKGEsbCxzLGMsaCkpLChhPWlbMl0pJiZuLnB1c2gobmV3IHdzKGEsbyxoLGwsdSkpLChhPWlbM10pJiZuLnB1c2gobmV3IHdzKGEsbCxoLGMsdSkpfXIucHVzaChlKX1mb3IoO2U9ci5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LE1zLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxNcy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX07dmFyIEJzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj0xLGk9MTtmdW5jdGlvbiBhKCl7Zm9yKHZhciB0LGEscyxjLHUsbCxoLGY9ZS5sZW5ndGgsZD0wO2Q8aTsrK2QpZm9yKGE9Q3MoZSxPcyxOcykudmlzaXRBZnRlcihvKSx0PTA7dDxmOysrdClzPWVbdF0sbD1uW3MuaW5kZXhdLGg9bCpsLGM9cy54K3MudngsdT1zLnkrcy52eSxhLnZpc2l0KHApO2Z1bmN0aW9uIHAodCxlLG4saSxhKXt2YXIgbz10LmRhdGEsZj10LnIsZD1sK2Y7aWYoIW8pcmV0dXJuIGU+YytkfHxpPGMtZHx8bj51K2R8fGE8dS1kO2lmKG8uaW5kZXg+cy5pbmRleCl7dmFyIHA9Yy1vLngtby52eCx5PXUtby55LW8udnksZz1wKnAreSp5O2c8ZCpkJiYoMD09PXAmJihnKz0ocD1fcygpKSpwKSwwPT09eSYmKGcrPSh5PV9zKCkpKnkpLGc9KGQtKGc9TWF0aC5zcXJ0KGcpKSkvZypyLHMudngrPShwKj1nKSooZD0oZio9ZikvKGgrZikpLHMudnkrPSh5Kj1nKSpkLG8udngtPXAqKGQ9MS1kKSxvLnZ5LT15KmQpfX19ZnVuY3Rpb24gbyh0KXtpZih0LmRhdGEpcmV0dXJuIHQucj1uW3QuZGF0YS5pbmRleF07Zm9yKHZhciBlPXQucj0wO2U8NDsrK2UpdFtlXSYmdFtlXS5yPnQuciYmKHQucj10W2VdLnIpfWZ1bmN0aW9uIHMoKXtpZihlKXt2YXIgcixpLGE9ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpLHI9MDtyPGE7KytyKWk9ZVtyXSxuW2kuaW5kZXhdPSt0KGkscixlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXhzKG51bGw9PXQ/MTordCkpLGEuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxhLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3QsYSk6aX0sYS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxhKTpyfSxhLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnhzKCtlKSxzKCksYSk6dH0sYX07ZnVuY3Rpb24gRHModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gTHModCxlKXt2YXIgbj10LmdldChlKTtpZighbil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIG59dmFyIElzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGEsbz1EcyxzPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKGlbdC5zb3VyY2UuaW5kZXhdLGlbdC50YXJnZXQuaW5kZXhdKX0sYz14cygzMCksdT0xO2Z1bmN0aW9uIGwocil7Zm9yKHZhciBpPTAsbz10Lmxlbmd0aDtpPHU7KytpKWZvcih2YXIgcyxjLGwsaCxmLGQscCx5PTA7eTxvOysreSljPShzPXRbeV0pLnNvdXJjZSxoPShsPXMudGFyZ2V0KS54K2wudngtYy54LWMudnh8fF9zKCksZj1sLnkrbC52eS1jLnktYy52eXx8X3MoKSxoKj1kPSgoZD1NYXRoLnNxcnQoaCpoK2YqZikpLW5beV0pL2QqciplW3ldLGYqPWQsbC52eC09aCoocD1hW3ldKSxsLnZ5LT1mKnAsYy52eCs9aCoocD0xLXApLGMudnkrPWYqcH1mdW5jdGlvbiBoKCl7aWYocil7dmFyIHMsYyx1PXIubGVuZ3RoLGw9dC5sZW5ndGgsaD1RaShyLG8pO2ZvcihzPTAsaT1uZXcgQXJyYXkodSk7czxsOysrcykoYz10W3NdKS5pbmRleD1zLCJvYmplY3QiIT10eXBlb2YgYy5zb3VyY2UmJihjLnNvdXJjZT1McyhoLGMuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBjLnRhcmdldCYmKGMudGFyZ2V0PUxzKGgsYy50YXJnZXQpKSxpW2Muc291cmNlLmluZGV4XT0oaVtjLnNvdXJjZS5pbmRleF18fDApKzEsaVtjLnRhcmdldC5pbmRleF09KGlbYy50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihzPTAsYT1uZXcgQXJyYXkobCk7czxsOysrcyljPXRbc10sYVtzXT1pW2Muc291cmNlLmluZGV4XS8oaVtjLnNvdXJjZS5pbmRleF0raVtjLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGwpLGYoKSxuPW5ldyBBcnJheShsKSxkKCl9fWZ1bmN0aW9uIGYoKXtpZihyKWZvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpOysrbillW25dPStzKHRbbl0sbix0KX1mdW5jdGlvbiBkKCl7aWYocilmb3IodmFyIGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpbltlXT0rYyh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxsLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10LGgoKX0sbC5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGgoKSxsKTp0fSxsLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbCk6b30sbC5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGwpOnV9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp4cygrdCksZigpLGwpOnN9LGwuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp4cygrdCksZCgpLGwpOmN9LGx9O2Z1bmN0aW9uIFJzKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gRnModCl7cmV0dXJuIHQueX12YXIgUHM9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpLGpzPWZ1bmN0aW9uKHQpe3ZhciBlLG49MSxyPS4wMDEsaT0xLU1hdGgucG93KHIsMS8zMDApLGE9MCxvPS42LHM9UWkoKSxjPVduKGwpLHU9aHQoInRpY2siLCJlbmQiKTtmdW5jdGlvbiBsKCl7aCgpLHUuY2FsbCgidGljayIsZSksbjxyJiYoYy5zdG9wKCksdS5jYWxsKCJlbmQiLGUpKX1mdW5jdGlvbiBoKHIpe3ZhciBjLHUsbD10Lmxlbmd0aDt2b2lkIDA9PT1yJiYocj0xKTtmb3IodmFyIGg9MDtoPHI7KytoKWZvcihuKz0oYS1uKSppLHMuZWFjaCgoZnVuY3Rpb24odCl7dChuKX0pKSxjPTA7YzxsOysrYyludWxsPT0odT10W2NdKS5meD91LngrPXUudngqPW86KHUueD11LmZ4LHUudng9MCksbnVsbD09dS5meT91LnkrPXUudnkqPW86KHUueT11LmZ5LHUudnk9MCk7cmV0dXJuIGV9ZnVuY3Rpb24gZigpe2Zvcih2YXIgZSxuPTAscj10Lmxlbmd0aDtuPHI7KytuKXtpZigoZT10W25dKS5pbmRleD1uLG51bGwhPWUuZngmJihlLng9ZS5meCksbnVsbCE9ZS5meSYmKGUueT1lLmZ5KSxpc05hTihlLngpfHxpc05hTihlLnkpKXt2YXIgaT0xMCpNYXRoLnNxcnQobiksYT1uKlBzO2UueD1pKk1hdGguY29zKGEpLGUueT1pKk1hdGguc2luKGEpfShpc05hTihlLnZ4KXx8aXNOYU4oZS52eSkpJiYoZS52eD1lLnZ5PTApfX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLmluaXRpYWxpemUmJmUuaW5pdGlhbGl6ZSh0KSxlfXJldHVybiBudWxsPT10JiYodD1bXSksZigpLGU9e3RpY2s6aCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGMucmVzdGFydChsKSxlfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGMuc3RvcCgpLGV9LG5vZGVzOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sZigpLHMuZWFjaChkKSxlKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxlKTpufSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxlKTpyfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LGUpOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxlKTphfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTEtdCxlKToxLW99LGZvcmNlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09bj9zLnJlbW92ZSh0KTpzLnNldCh0LGQobikpLGUpOnMuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxhLG8scyxjLHU9MCxsPXQubGVuZ3RoO2ZvcihudWxsPT1yP3I9MS8wOnIqPXIsdT0wO3U8bDsrK3UpKG89KGk9ZS0ocz10W3VdKS54KSppKyhhPW4tcy55KSphKTxyJiYoYz1zLHI9byk7cmV0dXJuIGN9LG9uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8odS5vbih0LG4pLGUpOnUub24odCl9fX0sWXM9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpPXhzKC0zMCksYT0xLG89MS8wLHM9LjgxO2Z1bmN0aW9uIGMocil7dmFyIGksYT10Lmxlbmd0aCxvPUNzKHQsUnMsRnMpLnZpc2l0QWZ0ZXIobCk7Zm9yKG49cixpPTA7aTxhOysraSllPXRbaV0sby52aXNpdChoKX1mdW5jdGlvbiB1KCl7aWYodCl7dmFyIGUsbixhPXQubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShhKSxlPTA7ZTxhOysrZSluPXRbZV0scltuLmluZGV4XT0raShuLGUsdCl9fWZ1bmN0aW9uIGwodCl7dmFyIGUsbixpLGEsbyxzPTAsYz0wO2lmKHQubGVuZ3RoKXtmb3IoaT1hPW89MDtvPDQ7KytvKShlPXRbb10pJiYobj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGMrPW4saSs9biplLngsYSs9biplLnkpO3QueD1pL2MsdC55PWEvY31lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPXJbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIGgodCxpLGMsdSl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIGw9dC54LWUueCxoPXQueS1lLnksZj11LWksZD1sKmwraCpoO2lmKGYqZi9zPGQpcmV0dXJuIGQ8byYmKDA9PT1sJiYoZCs9KGw9X3MoKSkqbCksMD09PWgmJihkKz0oaD1fcygpKSpoKSxkPGEmJihkPU1hdGguc3FydChhKmQpKSxlLnZ4Kz1sKnQudmFsdWUqbi9kLGUudnkrPWgqdC52YWx1ZSpuL2QpLCEwO2lmKCEodC5sZW5ndGh8fGQ+PW8pKXsodC5kYXRhIT09ZXx8dC5uZXh0KSYmKDA9PT1sJiYoZCs9KGw9X3MoKSkqbCksMD09PWgmJihkKz0oaD1fcygpKSpoKSxkPGEmJihkPU1hdGguc3FydChhKmQpKSk7ZG97dC5kYXRhIT09ZSYmKGY9clt0LmRhdGEuaW5kZXhdKm4vZCxlLnZ4Kz1sKmYsZS52eSs9aCpmKX13aGlsZSh0PXQubmV4dCl9fXJldHVybiBjLmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7dD1lLHUoKX0sYy5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnhzKCt0KSx1KCksYyk6aX0sYy5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10KnQsYyk6TWF0aC5zcXJ0KGEpfSxjLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQqdCxjKTpNYXRoLnNxcnQobyl9LGMudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCp0LGMpOk1hdGguc3FydChzKX0sY30senM9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXhzKC4xKTtmdW5jdGlvbiBzKHQpe2Zvcih2YXIgbz0wLHM9ci5sZW5ndGg7bzxzOysrbyl7dmFyIGM9cltvXSx1PWMueC1lfHwxZS02LGw9Yy55LW58fDFlLTYsaD1NYXRoLnNxcnQodSp1K2wqbCksZj0oYVtvXS1oKSppW29dKnQvaDtjLnZ4Kz11KmYsYy52eSs9bCpmfX1mdW5jdGlvbiBjKCl7aWYocil7dmFyIGUsbj1yLmxlbmd0aDtmb3IoaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobiksZT0wO2U8bjsrK2UpYVtlXT0rdChyW2VdLGUsciksaVtlXT1pc05hTihhW2VdKT8wOitvKHJbZV0sZSxyKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXhzKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09biYmKG49MCkscy5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxjKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp4cygrdCksYygpLHMpOm99LHMucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6eHMoK2UpLGMoKSxzKTp0fSxzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHMpOm59LHN9LFVzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpPXhzKC4xKTtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ4Kz0oclthXS1pLngpKm5bYV0qdH1mdW5jdGlvbiBvKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobykscj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpblthXT1pc05hTihyW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD14cyhudWxsPT10PzA6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LG8oKX0sYS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnhzKCt0KSxvKCksYSk6aX0sYS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6eHMoK2UpLG8oKSxhKTp0fSxhfSwkcz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaT14cyguMSk7ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eSs9KHJbYV0taS55KSpuW2FdKnR9ZnVuY3Rpb24gbygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KG8pLHI9bmV3IEFycmF5KG8pLGE9MDthPG87KythKW5bYV09aXNOYU4oclthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9eHMobnVsbD09dD8wOit0KSksYS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxvKCl9LGEuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp4cygrdCksbygpLGEpOml9LGEueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnhzKCtlKSxvKCksYSk6dH0sYX07ZnVuY3Rpb24gcXModCxlKXtpZigobj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIG4scj10LnNsaWNlKDAsbik7cmV0dXJuW3IubGVuZ3RoPjE/clswXStyLnNsaWNlKDIpOnIsK3Quc2xpY2UobisxKV19dmFyIFdzPWZ1bmN0aW9uKHQpe3JldHVybih0PXFzKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59LEhzPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIFZzKHQpe2lmKCEoZT1Icy5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgR3Moe2ZpbGw6ZVsxXSxhbGlnbjplWzJdLHNpZ246ZVszXSxzeW1ib2w6ZVs0XSx6ZXJvOmVbNV0sd2lkdGg6ZVs2XSxjb21tYTplWzddLHByZWNpc2lvbjplWzhdJiZlWzhdLnNsaWNlKDEpLHRyaW06ZVs5XSx0eXBlOmVbMTBdfSl9ZnVuY3Rpb24gR3ModCl7dGhpcy5maWxsPXZvaWQgMD09PXQuZmlsbD8iICI6dC5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09dC5hbGlnbj8iPiI6dC5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09dC5zaWduPyItIjp0LnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09dC5zeW1ib2w/IiI6dC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhdC56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09dC53aWR0aD92b2lkIDA6K3Qud2lkdGgsdGhpcy5jb21tYT0hIXQuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09dC5wcmVjaXNpb24/dm9pZCAwOit0LnByZWNpc2lvbix0aGlzLnRyaW09ISF0LnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PXQudHlwZT8iIjp0LnR5cGUrIiJ9VnMucHJvdG90eXBlPUdzLnByb3RvdHlwZSxHcy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodm9pZCAwPT09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHZvaWQgMD09PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTt2YXIgWHMsWnMsS3MsUXMsSnM9ZnVuY3Rpb24odCxlKXt2YXIgbj1xcyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfSx0Yz17IiUiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKGUpfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiB0KyIifSxkOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0PU1hdGgucm91bmQodCkpPj0xZTIxP3QudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTp0LnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSnMoMTAwKnQsZSl9LHI6SnMsczpmdW5jdGlvbih0LGUpe3ZhciBuPXFzKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIHI9blswXSxpPW5bMV0sYT1pLShYcz0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkpKzEsbz1yLmxlbmd0aDtyZXR1cm4gYT09PW8/cjphPm8/cituZXcgQXJyYXkoYS1vKzEpLmpvaW4oIjAiKTphPjA/ci5zbGljZSgwLGEpKyIuIityLnNsaWNlKGEpOiIwLiIrbmV3IEFycmF5KDEtYSkuam9pbigiMCIpK3FzKHQsTWF0aC5tYXgoMCxlK2EtMSkpWzBdfSxYOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KX19LGVjPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxuYz1BcnJheS5wcm90b3R5cGUubWFwLHJjPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXSxpYz1mdW5jdGlvbih0KXt2YXIgZSxuLHI9dm9pZCAwPT09dC5ncm91cGluZ3x8dm9pZCAwPT09dC50aG91c2FuZHM/ZWM6KGU9bmMuY2FsbCh0Lmdyb3VwaW5nLE51bWJlciksbj10LnRob3VzYW5kcysiIixmdW5jdGlvbih0LHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxhPVtdLG89MCxzPWVbMF0sYz0wO2k+MCYmcz4wJiYoYytzKzE+ciYmKHM9TWF0aC5tYXgoMSxyLWMpKSxhLnB1c2godC5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChjKz1zKzEpPnIpKTspcz1lW289KG8rMSklZS5sZW5ndGhdO3JldHVybiBhLnJldmVyc2UoKS5qb2luKG4pfSksaT12b2lkIDA9PT10LmN1cnJlbmN5PyIiOnQuY3VycmVuY3lbMF0rIiIsYT12b2lkIDA9PT10LmN1cnJlbmN5PyIiOnQuY3VycmVuY3lbMV0rIiIsbz12b2lkIDA9PT10LmRlY2ltYWw/Ii4iOnQuZGVjaW1hbCsiIixzPXZvaWQgMD09PXQubnVtZXJhbHM/ZWM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0WytlXX0pKX19KG5jLmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxjPXZvaWQgMD09PXQucGVyY2VudD8iJSI6dC5wZXJjZW50KyIiLHU9dm9pZCAwPT09dC5taW51cz8iLSI6dC5taW51cysiIixsPXZvaWQgMD09PXQubmFuPyJOYU4iOnQubmFuKyIiO2Z1bmN0aW9uIGgodCl7dmFyIGU9KHQ9VnModCkpLmZpbGwsbj10LmFsaWduLGg9dC5zaWduLGY9dC5zeW1ib2wsZD10Lnplcm8scD10LndpZHRoLHk9dC5jb21tYSxnPXQucHJlY2lzaW9uLG09dC50cmltLHY9dC50eXBlOyJuIj09PXY/KHk9ITAsdj0iZyIpOnRjW3ZdfHwodm9pZCAwPT09ZyYmKGc9MTIpLG09ITAsdj0iZyIpLChkfHwiMCI9PT1lJiYiPSI9PT1uKSYmKGQ9ITAsZT0iMCIsbj0iPSIpO3ZhciBiPSIkIj09PWY/aToiIyI9PT1mJiYvW2JveFhdLy50ZXN0KHYpPyIwIit2LnRvTG93ZXJDYXNlKCk6IiIseD0iJCI9PT1mP2E6L1slcF0vLnRlc3Qodik/YzoiIixfPXRjW3ZdLGs9L1tkZWZncHJzJV0vLnRlc3Qodik7ZnVuY3Rpb24gdyh0KXt2YXIgaSxhLGMsZj1iLHc9eDtpZigiYyI9PT12KXc9Xyh0KSt3LHQ9IiI7ZWxzZXt2YXIgVD0odD0rdCk8MHx8MS90PDA7aWYodD1pc05hTih0KT9sOl8oTWF0aC5hYnModCksZyksbSYmKHQ9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxyPTEsaT0tMTtyPG47KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOmk9ZT1yO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPXIpLGU9cjticmVhaztkZWZhdWx0OmlmKCErdFtyXSlicmVhayB0O2k+MCYmKGk9MCl9cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShlKzEpOnR9KHQpKSxUJiYwPT0rdCYmIisiIT09aCYmKFQ9ITEpLGY9KFQ/IigiPT09aD9oOnU6Ii0iPT09aHx8IigiPT09aD8iIjpoKStmLHc9KCJzIj09PXY/cmNbOCtYcy8zXToiIikrdysoVCYmIigiPT09aD8iKSI6IiIpLGspZm9yKGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspaWYoNDg+KGM9dC5jaGFyQ29kZUF0KGkpKXx8Yz41Nyl7dz0oNDY9PT1jP28rdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK3csdD10LnNsaWNlKDAsaSk7YnJlYWt9fXkmJiFkJiYodD1yKHQsMS8wKSk7dmFyIEU9Zi5sZW5ndGgrdC5sZW5ndGgrdy5sZW5ndGgsQz1FPHA/bmV3IEFycmF5KHAtRSsxKS5qb2luKGUpOiIiO3N3aXRjaCh5JiZkJiYodD1yKEMrdCxDLmxlbmd0aD9wLXcubGVuZ3RoOjEvMCksQz0iIiksbil7Y2FzZSI8Ijp0PWYrdCt3K0M7YnJlYWs7Y2FzZSI9Ijp0PWYrQyt0K3c7YnJlYWs7Y2FzZSJeIjp0PUMuc2xpY2UoMCxFPUMubGVuZ3RoPj4xKStmK3QrdytDLnNsaWNlKEUpO2JyZWFrO2RlZmF1bHQ6dD1DK2YrdCt3fXJldHVybiBzKHQpfXJldHVybiBnPXZvaWQgMD09PWc/NjovW2dwcnNdLy50ZXN0KHYpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsZykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsZykpLHcudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sd31yZXR1cm57Zm9ybWF0OmgsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHQsZSl7dmFyIG49aCgoKHQ9VnModCkpLnR5cGU9ImYiLHQpKSxyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKFdzKGUpLzMpKSksaT1NYXRoLnBvdygxMCwtciksYT1yY1s4K3IvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKGkqdCkrYX19fX07ZnVuY3Rpb24gYWModCl7cmV0dXJuIFpzPWljKHQpLEtzPVpzLmZvcm1hdCxRcz1acy5mb3JtYXRQcmVmaXgsWnN9YWMoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pO3ZhciBvYz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtV3MoTWF0aC5hYnModCkpKX0sc2M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihXcyhlKS8zKSkpLVdzKE1hdGguYWJzKHQpKSl9LGNjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsV3MoZSktV3ModCkpKzF9LHVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsY307ZnVuY3Rpb24gbGMoKXt0aGlzLnJlc2V0KCl9bGMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpsYyxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe2ZjKGhjLHQsdGhpcy50KSxmYyh0aGlzLGhjLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1oYy50OnRoaXMucz1oYy50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBoYz1uZXcgbGM7ZnVuY3Rpb24gZmModCxlLG4pe3ZhciByPXQucz1lK24saT1yLWUsYT1yLWk7dC50PWUtYSsobi1pKX12YXIgZGM9TWF0aC5QSSxwYz1kYy8yLHljPWRjLzQsZ2M9MipkYyxtYz0xODAvZGMsdmM9ZGMvMTgwLGJjPU1hdGguYWJzLHhjPU1hdGguYXRhbixfYz1NYXRoLmF0YW4yLGtjPU1hdGguY29zLHdjPU1hdGguY2VpbCxUYz1NYXRoLmV4cCxFYz0oTWF0aC5mbG9vcixNYXRoLmxvZyksQ2M9TWF0aC5wb3csU2M9TWF0aC5zaW4sQWM9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LE1jPU1hdGguc3FydCxPYz1NYXRoLnRhbjtmdW5jdGlvbiBOYyh0KXtyZXR1cm4gdD4xPzA6dDwtMT9kYzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gQmModCl7cmV0dXJuIHQ+MT9wYzp0PC0xPy1wYzpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gRGModCl7cmV0dXJuKHQ9U2ModC8yKSkqdH1mdW5jdGlvbiBMYygpe31mdW5jdGlvbiBJYyh0LGUpe3QmJkZjLmhhc093blByb3BlcnR5KHQudHlwZSkmJkZjW3QudHlwZV0odCxlKX12YXIgUmM9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtJYyh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspSWMobltyXS5nZW9tZXRyeSxlKX19LEZjPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspdD1uW3JdLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7UGModC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KVBjKG5bcl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe2pjKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspamMobltyXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KUljKG5bcl0sZSl9fTtmdW5jdGlvbiBQYyh0LGUsbil7dmFyIHIsaT0tMSxhPXQubGVuZ3RoLW47Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KXI9dFtpXSxlLnBvaW50KHJbMF0sclsxXSxyWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBqYyh0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytuPHI7KVBjKHRbbl0sZSwxKTtlLnBvbHlnb25FbmQoKX12YXIgWWMsemMsVWMsJGMscWMsV2M9ZnVuY3Rpb24odCxlKXt0JiZSYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP1JjW3QudHlwZV0odCxlKTpJYyh0LGUpfSxIYz11YygpLFZjPXVjKCksR2M9e3BvaW50OkxjLGxpbmVTdGFydDpMYyxsaW5lRW5kOkxjLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0hjLnJlc2V0KCksR2MubGluZVN0YXJ0PVhjLEdjLmxpbmVFbmQ9WmN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rSGM7VmMuYWRkKHQ8MD9nYyt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PUxjfSxzcGhlcmU6ZnVuY3Rpb24oKXtWYy5hZGQoZ2MpfX07ZnVuY3Rpb24gWGMoKXtHYy5wb2ludD1LY31mdW5jdGlvbiBaYygpe1FjKFljLHpjKX1mdW5jdGlvbiBLYyh0LGUpe0djLnBvaW50PVFjLFljPXQsemM9ZSxVYz10Kj12YywkYz1rYyhlPShlKj12YykvMit5YykscWM9U2MoZSl9ZnVuY3Rpb24gUWModCxlKXt2YXIgbj0odCo9dmMpLVVjLHI9bj49MD8xOi0xLGk9cipuLGE9a2MoZT0oZSo9dmMpLzIreWMpLG89U2MoZSkscz1xYypvLGM9JGMqYStzKmtjKGkpLHU9cypyKlNjKGkpO0hjLmFkZChfYyh1LGMpKSxVYz10LCRjPWEscWM9b312YXIgSmM9ZnVuY3Rpb24odCl7cmV0dXJuIFZjLnJlc2V0KCksV2ModCxHYyksMipWY307ZnVuY3Rpb24gdHUodCl7cmV0dXJuW19jKHRbMV0sdFswXSksQmModFsyXSldfWZ1bmN0aW9uIGV1KHQpe3ZhciBlPXRbMF0sbj10WzFdLHI9a2Mobik7cmV0dXJuW3Iqa2MoZSkscipTYyhlKSxTYyhuKV19ZnVuY3Rpb24gbnUodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gcnUodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIGl1KHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24gYXUodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIG91KHQpe3ZhciBlPU1jKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX12YXIgc3UsY3UsdXUsbHUsaHUsZnUsZHUscHUseXUsZ3UsbXU9dWMoKSx2dT17cG9pbnQ6YnUsbGluZVN0YXJ0Ol91LGxpbmVFbmQ6a3UscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dnUucG9pbnQ9d3UsdnUubGluZVN0YXJ0PVR1LHZ1LmxpbmVFbmQ9RXUsbXUucmVzZXQoKSxHYy5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0djLnBvbHlnb25FbmQoKSx2dS5wb2ludD1idSx2dS5saW5lU3RhcnQ9X3UsdnUubGluZUVuZD1rdSxIYzwwPyhzdT0tKHV1PTE4MCksY3U9LShsdT05MCkpOm11PjFlLTY/bHU9OTA6bXU8LTFlLTYmJihjdT0tOTApLGd1WzBdPXN1LGd1WzFdPXV1fSxzcGhlcmU6ZnVuY3Rpb24oKXtzdT0tKHV1PTE4MCksY3U9LShsdT05MCl9fTtmdW5jdGlvbiBidSh0LGUpe3l1LnB1c2goZ3U9W3N1PXQsdXU9dF0pLGU8Y3UmJihjdT1lKSxlPmx1JiYobHU9ZSl9ZnVuY3Rpb24geHUodCxlKXt2YXIgbj1ldShbdCp2YyxlKnZjXSk7aWYocHUpe3ZhciByPXJ1KHB1LG4pLGk9cnUoW3JbMV0sLXJbMF0sMF0scik7b3UoaSksaT10dShpKTt2YXIgYSxvPXQtaHUscz1vPjA/MTotMSxjPWlbMF0qbWMqcyx1PWJjKG8pPjE4MDt1XihzKmh1PGMmJmM8cyp0KT8oYT1pWzFdKm1jKT5sdSYmKGx1PWEpOnVeKHMqaHU8KGM9KGMrMzYwKSUzNjAtMTgwKSYmYzxzKnQpPyhhPS1pWzFdKm1jKTxjdSYmKGN1PWEpOihlPGN1JiYoY3U9ZSksZT5sdSYmKGx1PWUpKSx1P3Q8aHU/Q3Uoc3UsdCk+Q3Uoc3UsdXUpJiYodXU9dCk6Q3UodCx1dSk+Q3Uoc3UsdXUpJiYoc3U9dCk6dXU+PXN1Pyh0PHN1JiYoc3U9dCksdD51dSYmKHV1PXQpKTp0Pmh1P0N1KHN1LHQpPkN1KHN1LHV1KSYmKHV1PXQpOkN1KHQsdXUpPkN1KHN1LHV1KSYmKHN1PXQpfWVsc2UgeXUucHVzaChndT1bc3U9dCx1dT10XSk7ZTxjdSYmKGN1PWUpLGU+bHUmJihsdT1lKSxwdT1uLGh1PXR9ZnVuY3Rpb24gX3UoKXt2dS5wb2ludD14dX1mdW5jdGlvbiBrdSgpe2d1WzBdPXN1LGd1WzFdPXV1LHZ1LnBvaW50PWJ1LHB1PW51bGx9ZnVuY3Rpb24gd3UodCxlKXtpZihwdSl7dmFyIG49dC1odTttdS5hZGQoYmMobik+MTgwP24rKG4+MD8zNjA6LTM2MCk6bil9ZWxzZSBmdT10LGR1PWU7R2MucG9pbnQodCxlKSx4dSh0LGUpfWZ1bmN0aW9uIFR1KCl7R2MubGluZVN0YXJ0KCl9ZnVuY3Rpb24gRXUoKXt3dShmdSxkdSksR2MubGluZUVuZCgpLGJjKG11KT4xZS02JiYoc3U9LSh1dT0xODApKSxndVswXT1zdSxndVsxXT11dSxwdT1udWxsfWZ1bmN0aW9uIEN1KHQsZSl7cmV0dXJuKGUtPXQpPDA/ZSszNjA6ZX1mdW5jdGlvbiBTdSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gQXUodCxlKXtyZXR1cm4gdFswXTw9dFsxXT90WzBdPD1lJiZlPD10WzFdOmU8dFswXXx8dFsxXTxlfXZhciBNdSxPdSxOdSxCdSxEdSxMdSxJdSxSdSxGdSxQdSxqdSxZdSx6dSxVdSwkdSxxdSxXdT1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scztpZihsdT11dT0tKHN1PWN1PTEvMCkseXU9W10sV2ModCx2dSksbj15dS5sZW5ndGgpe2Zvcih5dS5zb3J0KFN1KSxlPTEsYT1bcj15dVswXV07ZTxuOysrZSlBdShyLChpPXl1W2VdKVswXSl8fEF1KHIsaVsxXSk/KEN1KHJbMF0saVsxXSk+Q3UoclswXSxyWzFdKSYmKHJbMV09aVsxXSksQ3UoaVswXSxyWzFdKT5DdShyWzBdLHJbMV0pJiYoclswXT1pWzBdKSk6YS5wdXNoKHI9aSk7Zm9yKG89LTEvMCxlPTAscj1hW249YS5sZW5ndGgtMV07ZTw9bjtyPWksKytlKWk9YVtlXSwocz1DdShyWzFdLGlbMF0pKT5vJiYobz1zLHN1PWlbMF0sdXU9clsxXSl9cmV0dXJuIHl1PWd1PW51bGwsc3U9PT0xLzB8fGN1PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3N1LGN1XSxbdXUsbHVdXX0sSHU9e3NwaGVyZTpMYyxwb2ludDpWdSxsaW5lU3RhcnQ6WHUsbGluZUVuZDpRdSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtIdS5saW5lU3RhcnQ9SnUsSHUubGluZUVuZD10bH0scG9seWdvbkVuZDpmdW5jdGlvbigpe0h1LmxpbmVTdGFydD1YdSxIdS5saW5lRW5kPVF1fX07ZnVuY3Rpb24gVnUodCxlKXt0Kj12Yzt2YXIgbj1rYyhlKj12Yyk7R3UobiprYyh0KSxuKlNjKHQpLFNjKGUpKX1mdW5jdGlvbiBHdSh0LGUsbil7KytNdSxOdSs9KHQtTnUpL011LEJ1Kz0oZS1CdSkvTXUsRHUrPShuLUR1KS9NdX1mdW5jdGlvbiBYdSgpe0h1LnBvaW50PVp1fWZ1bmN0aW9uIFp1KHQsZSl7dCo9dmM7dmFyIG49a2MoZSo9dmMpO1V1PW4qa2ModCksJHU9bipTYyh0KSxxdT1TYyhlKSxIdS5wb2ludD1LdSxHdShVdSwkdSxxdSl9ZnVuY3Rpb24gS3UodCxlKXt0Kj12Yzt2YXIgbj1rYyhlKj12Yykscj1uKmtjKHQpLGk9bipTYyh0KSxhPVNjKGUpLG89X2MoTWMoKG89JHUqYS1xdSppKSpvKyhvPXF1KnItVXUqYSkqbysobz1VdSppLSR1KnIpKm8pLFV1KnIrJHUqaStxdSphKTtPdSs9byxMdSs9byooVXUrKFV1PXIpKSxJdSs9byooJHUrKCR1PWkpKSxSdSs9byoocXUrKHF1PWEpKSxHdShVdSwkdSxxdSl9ZnVuY3Rpb24gUXUoKXtIdS5wb2ludD1WdX1mdW5jdGlvbiBKdSgpe0h1LnBvaW50PWVsfWZ1bmN0aW9uIHRsKCl7bmwoWXUsenUpLEh1LnBvaW50PVZ1fWZ1bmN0aW9uIGVsKHQsZSl7WXU9dCx6dT1lLHQqPXZjLGUqPXZjLEh1LnBvaW50PW5sO3ZhciBuPWtjKGUpO1V1PW4qa2ModCksJHU9bipTYyh0KSxxdT1TYyhlKSxHdShVdSwkdSxxdSl9ZnVuY3Rpb24gbmwodCxlKXt0Kj12Yzt2YXIgbj1rYyhlKj12Yykscj1uKmtjKHQpLGk9bipTYyh0KSxhPVNjKGUpLG89JHUqYS1xdSppLHM9cXUqci1VdSphLGM9VXUqaS0kdSpyLHU9TWMobypvK3MqcytjKmMpLGw9QmModSksaD11JiYtbC91O0Z1Kz1oKm8sUHUrPWgqcyxqdSs9aCpjLE91Kz1sLEx1Kz1sKihVdSsoVXU9cikpLEl1Kz1sKigkdSsoJHU9aSkpLFJ1Kz1sKihxdSsocXU9YSkpLEd1KFV1LCR1LHF1KX12YXIgcmw9ZnVuY3Rpb24odCl7TXU9T3U9TnU9QnU9RHU9THU9SXU9UnU9RnU9UHU9anU9MCxXYyh0LEh1KTt2YXIgZT1GdSxuPVB1LHI9anUsaT1lKmUrbipuK3IqcjtyZXR1cm4gaTwxZS0xMiYmKGU9THUsbj1JdSxyPVJ1LE91PDFlLTYmJihlPU51LG49QnUscj1EdSksKGk9ZSplK24qbityKnIpPDFlLTEyKT9bTmFOLE5hTl06W19jKG4sZSkqbWMsQmMoci9NYyhpKSkqbWNdfSxpbD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LGFsPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihuLHIpe3JldHVybiBuPXQobixyKSxlKG5bMF0sblsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKG4uaW52ZXJ0PWZ1bmN0aW9uKG4scil7cmV0dXJuKG49ZS5pbnZlcnQobixyKSkmJnQuaW52ZXJ0KG5bMF0sblsxXSl9KSxufTtmdW5jdGlvbiBvbCh0LGUpe3JldHVybltiYyh0KT5kYz90K01hdGgucm91bmQoLXQvZ2MpKmdjOnQsZV19ZnVuY3Rpb24gc2wodCxlLG4pe3JldHVybih0JT1nYyk/ZXx8bj9hbCh1bCh0KSxsbChlLG4pKTp1bCh0KTplfHxuP2xsKGUsbik6b2x9ZnVuY3Rpb24gY2wodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuWyhlKz10KT5kYz9lLWdjOmU8LWRjP2UrZ2M6ZSxuXX19ZnVuY3Rpb24gdWwodCl7dmFyIGU9Y2wodCk7cmV0dXJuIGUuaW52ZXJ0PWNsKC10KSxlfWZ1bmN0aW9uIGxsKHQsZSl7dmFyIG49a2ModCkscj1TYyh0KSxpPWtjKGUpLGE9U2MoZSk7ZnVuY3Rpb24gbyh0LGUpe3ZhciBvPWtjKGUpLHM9a2ModCkqbyxjPVNjKHQpKm8sdT1TYyhlKSxsPXUqbitzKnI7cmV0dXJuW19jKGMqaS1sKmEscypuLXUqciksQmMobCppK2MqYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBvPWtjKGUpLHM9a2ModCkqbyxjPVNjKHQpKm8sdT1TYyhlKSxsPXUqaS1jKmE7cmV0dXJuW19jKGMqaSt1KmEscypuK2wqciksQmMobCpuLXMqcildfSxvfW9sLmludmVydD1vbDt2YXIgaGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qdmMsZVsxXSp2YykpWzBdKj1tYyxlWzFdKj1tYyxlfXJldHVybiB0PXNsKHRbMF0qdmMsdFsxXSp2Yyx0Lmxlbmd0aD4yP3RbMl0qdmM6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSp2YyxlWzFdKnZjKSlbMF0qPW1jLGVbMV0qPW1jLGV9LGV9O2Z1bmN0aW9uIGZsKHQsZSxuLHIsaSxhKXtpZihuKXt2YXIgbz1rYyhlKSxzPVNjKGUpLGM9cipuO251bGw9PWk/KGk9ZStyKmdjLGE9ZS1jLzIpOihpPWRsKG8saSksYT1kbChvLGEpLChyPjA/aTxhOmk+YSkmJihpKz1yKmdjKSk7Zm9yKHZhciB1LGw9aTtyPjA/bD5hOmw8YTtsLT1jKXU9dHUoW28sLXMqa2MobCksLXMqU2MobCldKSx0LnBvaW50KHVbMF0sdVsxXSl9fWZ1bmN0aW9uIGRsKHQsZSl7KGU9ZXUoZSkpWzBdLT10LG91KGUpO3ZhciBuPU5jKC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LW46bikrZ2MtMWUtNiklZ2N9dmFyIHBsPWZ1bmN0aW9uKCl7dmFyIHQsZSxuPWlsKFswLDBdKSxyPWlsKDkwKSxpPWlsKDYpLGE9e3BvaW50OmZ1bmN0aW9uKG4scil7dC5wdXNoKG49ZShuLHIpKSxuWzBdKj1tYyxuWzFdKj1tY319O2Z1bmN0aW9uIG8oKXt2YXIgbz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKnZjLGM9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqdmM7cmV0dXJuIHQ9W10sZT1zbCgtb1swXSp2Yywtb1sxXSp2YywwKS5pbnZlcnQsZmwoYSxzLGMsMSksbz17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3RdfSx0PWU9bnVsbCxvfXJldHVybiBvLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmlsKFsrdFswXSwrdFsxXV0pLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aWwoK3QpLG8pOnJ9LG8ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aWwoK3QpLG8pOml9LG99LHlsPWZ1bmN0aW9uKCl7dmFyIHQsZT1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxuLHIpe3QucHVzaChbZSxuLHJdKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOkxjLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIG49ZTtyZXR1cm4gZT1bXSx0PW51bGwsbn19fSxnbD1mdW5jdGlvbih0LGUpe3JldHVybiBiYyh0WzBdLWVbMF0pPDFlLTYmJmJjKHRbMV0tZVsxXSk8MWUtNn07ZnVuY3Rpb24gbWwodCxlLG4scil7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPW4sdGhpcy5lPXIsdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH12YXIgdmw9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYSxvLHM9W10sYz1bXTtpZih0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCEoKGU9dC5sZW5ndGgtMSk8PTApKXt2YXIgZSxuLHI9dFswXSxvPXRbZV07aWYoZ2wocixvKSl7aWYoIXJbMl0mJiFvWzJdKXtmb3IoaS5saW5lU3RhcnQoKSxhPTA7YTxlOysrYSlpLnBvaW50KChyPXRbYV0pWzBdLHJbMV0pO3JldHVybiB2b2lkIGkubGluZUVuZCgpfW9bMF0rPTJlLTZ9cy5wdXNoKG49bmV3IG1sKHIsdCxudWxsLCEwKSksYy5wdXNoKG4ubz1uZXcgbWwocixudWxsLG4sITEpKSxzLnB1c2gobj1uZXcgbWwobyx0LG51bGwsITEpKSxjLnB1c2gobi5vPW5ldyBtbChvLG51bGwsbiwhMCkpfX0pKSxzLmxlbmd0aCl7Zm9yKGMuc29ydChlKSxibChzKSxibChjKSxhPTAsbz1jLmxlbmd0aDthPG87KythKWNbYV0uZT1uPSFuO2Zvcih2YXIgdSxsLGg9c1swXTs7KXtmb3IodmFyIGY9aCxkPSEwO2YudjspaWYoKGY9Zi5uKT09PWgpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYoZClmb3IoYT0wLG89dS5sZW5ndGg7YTxvOysrYSlpLnBvaW50KChsPXVbYV0pWzBdLGxbMV0pO2Vsc2UgcihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKGQpZm9yKHU9Zi5wLnosYT11Lmxlbmd0aC0xO2E+PTA7LS1hKWkucG9pbnQoKGw9dVthXSlbMF0sbFsxXSk7ZWxzZSByKGYueCxmLnAueCwtMSxpKTtmPWYucH11PShmPWYubykueixkPSFkfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19O2Z1bmN0aW9uIGJsKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxuLHI9MCxpPXRbMF07KytyPGU7KWkubj1uPXRbcl0sbi5wPWksaT1uO2kubj1uPXRbMF0sbi5wPWl9fXZhciB4bD11YygpO2Z1bmN0aW9uIF9sKHQpe3JldHVybiBiYyh0WzBdKTw9ZGM/dFswXTpBYyh0WzBdKSooKGJjKHRbMF0pK2RjKSVnYy1kYyl9dmFyIGtsPWZ1bmN0aW9uKHQsZSl7dmFyIG49X2woZSkscj1lWzFdLGk9U2MociksYT1bU2MobiksLWtjKG4pLDBdLG89MCxzPTA7eGwucmVzZXQoKSwxPT09aT9yPXBjKzFlLTY6LTE9PT1pJiYocj0tcGMtMWUtNik7Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7KytjKWlmKGg9KGw9dFtjXSkubGVuZ3RoKWZvcih2YXIgbCxoLGY9bFtoLTFdLGQ9X2woZikscD1mWzFdLzIreWMseT1TYyhwKSxnPWtjKHApLG09MDttPGg7KyttLGQ9Yix5PV8sZz1rLGY9dil7dmFyIHY9bFttXSxiPV9sKHYpLHg9dlsxXS8yK3ljLF89U2MoeCksaz1rYyh4KSx3PWItZCxUPXc+PTA/MTotMSxFPVQqdyxDPUU+ZGMsUz15Kl87aWYoeGwuYWRkKF9jKFMqVCpTYyhFKSxnKmsrUyprYyhFKSkpLG8rPUM/dytUKmdjOncsQ15kPj1uXmI+PW4pe3ZhciBBPXJ1KGV1KGYpLGV1KHYpKTtvdShBKTt2YXIgTT1ydShhLEEpO291KE0pO3ZhciBPPShDXnc+PTA/LTE6MSkqQmMoTVsyXSk7KHI+T3x8cj09PU8mJihBWzBdfHxBWzFdKSkmJihzKz1DXnc+PTA/MTotMSl9fXJldHVybihvPC0xZS02fHxvPDFlLTYmJnhsPC0xZS02KV4xJnN9LHdsPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgYSxvLHMsYz1lKGkpLHU9eWwoKSxsPWUodSksaD0hMSxmPXtwb2ludDpkLGxpbmVTdGFydDp5LGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PW0sZi5saW5lU3RhcnQ9dixmLmxpbmVFbmQ9YixvPVtdLGE9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PWQsZi5saW5lU3RhcnQ9eSxmLmxpbmVFbmQ9ZyxvPVAobyk7dmFyIHQ9a2woYSxyKTtvLmxlbmd0aD8oaHx8KGkucG9seWdvblN0YXJ0KCksaD0hMCksdmwobyxFbCx0LG4saSkpOnQmJihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGgmJihpLnBvbHlnb25FbmQoKSxoPSExKSxvPWE9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKGUsbil7dChlLG4pJiZpLnBvaW50KGUsbil9ZnVuY3Rpb24gcCh0LGUpe2MucG9pbnQodCxlKX1mdW5jdGlvbiB5KCl7Zi5wb2ludD1wLGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxjLmxpbmVFbmQoKX1mdW5jdGlvbiBtKHQsZSl7cy5wdXNoKFt0LGVdKSxsLnBvaW50KHQsZSl9ZnVuY3Rpb24gdigpe2wubGluZVN0YXJ0KCkscz1bXX1mdW5jdGlvbiBiKCl7bShzWzBdWzBdLHNbMF1bMV0pLGwubGluZUVuZCgpO3ZhciB0LGUsbixyLGM9bC5jbGVhbigpLGY9dS5yZXN1bHQoKSxkPWYubGVuZ3RoO2lmKHMucG9wKCksYS5wdXNoKHMpLHM9bnVsbCxkKWlmKDEmYyl7aWYoKGU9KG49ZlswXSkubGVuZ3RoLTEpPjApe2ZvcihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KWkucG9pbnQoKHI9blt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmMmJmYucHVzaChmLnBvcCgpLmNvbmNhdChmLnNoaWZ0KCkpKSxvLnB1c2goZi5maWx0ZXIoVGwpKX1yZXR1cm4gZn19O2Z1bmN0aW9uIFRsKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIEVsKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLXBjLTFlLTY6cGMtdFsxXSktKChlPWUueClbMF08MD9lWzFdLXBjLTFlLTY6cGMtZVsxXSl9dmFyIENsPXdsKChmdW5jdGlvbigpe3JldHVybiEwfSksKGZ1bmN0aW9uKHQpe3ZhciBlLG49TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oYSxvKXt2YXIgcz1hPjA/ZGM6LWRjLGM9YmMoYS1uKTtiYyhjLWRjKTwxZS02Pyh0LnBvaW50KG4scj0ocitvKS8yPjA/cGM6LXBjKSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsciksdC5wb2ludChhLHIpLGU9MCk6aSE9PXMmJmM+PWRjJiYoYmMobi1pKTwxZS02JiYobi09MWUtNippKSxiYyhhLXMpPDFlLTYmJihhLT0xZS02KnMpLHI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvPVNjKHQtbik7cmV0dXJuIGJjKG8pPjFlLTY/eGMoKFNjKGUpKihhPWtjKHIpKSpTYyhuKS1TYyhyKSooaT1rYyhlKSkqU2ModCkpLyhpKmEqbykpOihlK3IpLzJ9KG4scixhLG8pLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxyKSxlPTApLHQucG9pbnQobj1hLHI9byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksbj1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk7aWYobnVsbD09dClpPW4qcGMsci5wb2ludCgtZGMsaSksci5wb2ludCgwLGkpLHIucG9pbnQoZGMsaSksci5wb2ludChkYywwKSxyLnBvaW50KGRjLC1pKSxyLnBvaW50KDAsLWkpLHIucG9pbnQoLWRjLC1pKSxyLnBvaW50KC1kYywwKSxyLnBvaW50KC1kYyxpKTtlbHNlIGlmKGJjKHRbMF0tZVswXSk+MWUtNil7dmFyIGE9dFswXTxlWzBdP2RjOi1kYztpPW4qYS8yLHIucG9pbnQoLWEsaSksci5wb2ludCgwLGkpLHIucG9pbnQoYSxpKX1lbHNlIHIucG9pbnQoZVswXSxlWzFdKX0pLFstZGMsLXBjXSk7dmFyIFNsPWZ1bmN0aW9uKHQpe3ZhciBlPWtjKHQpLG49Nip2YyxyPWU+MCxpPWJjKGUpPjFlLTY7ZnVuY3Rpb24gYSh0LG4pe3JldHVybiBrYyh0KSprYyhuKT5lfWZ1bmN0aW9uIG8odCxuLHIpe3ZhciBpPVsxLDAsMF0sYT1ydShldSh0KSxldShuKSksbz1udShhLGEpLHM9YVswXSxjPW8tcypzO2lmKCFjKXJldHVybiFyJiZ0O3ZhciB1PWUqby9jLGw9LWUqcy9jLGg9cnUoaSxhKSxmPWF1KGksdSk7aXUoZixhdShhLGwpKTt2YXIgZD1oLHA9bnUoZixkKSx5PW51KGQsZCksZz1wKnAteSoobnUoZixmKS0xKTtpZighKGc8MCkpe3ZhciBtPU1jKGcpLHY9YXUoZCwoLXAtbSkveSk7aWYoaXUodixmKSx2PXR1KHYpLCFyKXJldHVybiB2O3ZhciBiLHg9dFswXSxfPW5bMF0saz10WzFdLHc9blsxXTtfPHgmJihiPXgseD1fLF89Yik7dmFyIFQ9Xy14LEU9YmMoVC1kYyk8MWUtNjtpZighRSYmdzxrJiYoYj1rLGs9dyx3PWIpLEV8fFQ8MWUtNj9FP2srdz4wXnZbMV08KGJjKHZbMF0teCk8MWUtNj9rOncpOms8PXZbMV0mJnZbMV08PXc6VD5kY14oeDw9dlswXSYmdlswXTw9Xykpe3ZhciBDPWF1KGQsKC1wK20pL3kpO3JldHVybiBpdShDLGYpLFt2LHR1KEMpXX19fWZ1bmN0aW9uIHMoZSxuKXt2YXIgaT1yP3Q6ZGMtdCxhPTA7cmV0dXJuIGU8LWk/YXw9MTplPmkmJihhfD0yKSxuPC1pP2F8PTQ6bj5pJiYoYXw9OCksYX1yZXR1cm4gd2woYSwoZnVuY3Rpb24odCl7dmFyIGUsbixjLHUsbDtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dT1jPSExLGw9MX0scG9pbnQ6ZnVuY3Rpb24oaCxmKXt2YXIgZCxwPVtoLGZdLHk9YShoLGYpLGc9cj95PzA6cyhoLGYpOnk/cyhoKyhoPDA/ZGM6LWRjKSxmKTowO2lmKCFlJiYodT1jPXkpJiZ0LmxpbmVTdGFydCgpLHkhPT1jJiYoIShkPW8oZSxwKSl8fGdsKGUsZCl8fGdsKHAsZCkpJiYocFsyXT0xKSx5IT09YylsPTAseT8odC5saW5lU3RhcnQoKSxkPW8ocCxlKSx0LnBvaW50KGRbMF0sZFsxXSkpOihkPW8oZSxwKSx0LnBvaW50KGRbMF0sZFsxXSwyKSx0LmxpbmVFbmQoKSksZT1kO2Vsc2UgaWYoaSYmZSYmcl55KXt2YXIgbTtnJm58fCEobT1vKHAsZSwhMCkpfHwobD0wLHI/KHQubGluZVN0YXJ0KCksdC5wb2ludChtWzBdWzBdLG1bMF1bMV0pLHQucG9pbnQobVsxXVswXSxtWzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQobVsxXVswXSxtWzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQobVswXVswXSxtWzBdWzFdLDMpKSl9IXl8fGUmJmdsKGUscCl8fHQucG9pbnQocFswXSxwWzFdKSxlPXAsYz15LG49Z30sbGluZUVuZDpmdW5jdGlvbigpe2MmJnQubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gbHwodSYmYyk8PDF9fX0pLChmdW5jdGlvbihlLHIsaSxhKXtmbChhLHQsbixpLGUscil9KSxyP1swLC10XTpbLWRjLHQtZGNdKX07ZnVuY3Rpb24gQWwodCxlLG4scil7ZnVuY3Rpb24gaShpLGEpe3JldHVybiB0PD1pJiZpPD1uJiZlPD1hJiZhPD1yfWZ1bmN0aW9uIGEoaSxhLHMsdSl7dmFyIGw9MCxoPTA7aWYobnVsbD09aXx8KGw9byhpLHMpKSE9PShoPW8oYSxzKSl8fGMoaSxhKTwwXnM+MClkb3t1LnBvaW50KDA9PT1sfHwzPT09bD90Om4sbD4xP3I6ZSl9d2hpbGUoKGw9KGwrcys0KSU0KSE9PWgpO2Vsc2UgdS5wb2ludChhWzBdLGFbMV0pfWZ1bmN0aW9uIG8ocixpKXtyZXR1cm4gYmMoclswXS10KTwxZS02P2k+MD8wOjM6YmMoclswXS1uKTwxZS02P2k+MD8yOjE6YmMoclsxXS1lKTwxZS02P2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGModC54LGUueCl9ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPW8odCwxKSxyPW8oZSwxKTtyZXR1cm4gbiE9PXI/bi1yOjA9PT1uP2VbMV0tdFsxXToxPT09bj90WzBdLWVbMF06Mj09PW4/dFsxXS1lWzFdOmVbMF0tdFswXX1yZXR1cm4gZnVuY3Rpb24obyl7dmFyIGMsdSxsLGgsZixkLHAseSxnLG0sdixiPW8seD15bCgpLF89e3BvaW50OmssbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Xy5wb2ludD13LHUmJnUucHVzaChsPVtdKTttPSEwLGc9ITEscD15PU5hTn0sbGluZUVuZDpmdW5jdGlvbigpe2MmJih3KGgsZiksZCYmZyYmeC5yZWpvaW4oKSxjLnB1c2goeC5yZXN1bHQoKSkpO18ucG9pbnQ9ayxnJiZiLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Yj14LGM9W10sdT1bXSx2PSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxuPTAsaT11Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYSxvLHM9dVtuXSxjPTEsbD1zLmxlbmd0aCxoPXNbMF0sZj1oWzBdLGQ9aFsxXTtjPGw7KytjKWE9ZixvPWQsaD1zW2NdLGY9aFswXSxkPWhbMV0sbzw9cj9kPnImJihmLWEpKihyLW8pPihkLW8pKih0LWEpJiYrK2U6ZDw9ciYmKGYtYSkqKHItbyk8KGQtbykqKHQtYSkmJi0tZTtyZXR1cm4gZX0oKSxuPXYmJmUsaT0oYz1QKGMpKS5sZW5ndGg7KG58fGkpJiYoby5wb2x5Z29uU3RhcnQoKSxuJiYoby5saW5lU3RhcnQoKSxhKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpKSxpJiZ2bChjLHMsZSxhLG8pLG8ucG9seWdvbkVuZCgpKTtiPW8sYz11PWw9bnVsbH19O2Z1bmN0aW9uIGsodCxlKXtpKHQsZSkmJmIucG9pbnQodCxlKX1mdW5jdGlvbiB3KGEsbyl7dmFyIHM9aShhLG8pO2lmKHUmJmwucHVzaChbYSxvXSksbSloPWEsZj1vLGQ9cyxtPSExLHMmJihiLmxpbmVTdGFydCgpLGIucG9pbnQoYSxvKSk7ZWxzZSBpZihzJiZnKWIucG9pbnQoYSxvKTtlbHNle3ZhciBjPVtwPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LHApKSx5PU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LHkpKV0seD1bYT1NYXRoLm1heCgtMWU5LE1hdGgubWluKDFlOSxhKSksbz1NYXRoLm1heCgtMWU5LE1hdGgubWluKDFlOSxvKSldOyFmdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG8scz10WzBdLGM9dFsxXSx1PTAsbD0xLGg9ZVswXS1zLGY9ZVsxXS1jO2lmKG89bi1zLGh8fCEobz4wKSl7aWYoby89aCxoPDApe2lmKG88dSlyZXR1cm47bzxsJiYobD1vKX1lbHNlIGlmKGg+MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWlmKG89aS1zLGh8fCEobzwwKSl7aWYoby89aCxoPDApe2lmKG8+bClyZXR1cm47bz51JiYodT1vKX1lbHNlIGlmKGg+MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWlmKG89ci1jLGZ8fCEobz4wKSl7aWYoby89ZixmPDApe2lmKG88dSlyZXR1cm47bzxsJiYobD1vKX1lbHNlIGlmKGY+MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWlmKG89YS1jLGZ8fCEobzwwKSl7aWYoby89ZixmPDApe2lmKG8+bClyZXR1cm47bz51JiYodT1vKX1lbHNlIGlmKGY+MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfXJldHVybiB1PjAmJih0WzBdPXMrdSpoLHRbMV09Yyt1KmYpLGw8MSYmKGVbMF09cytsKmgsZVsxXT1jK2wqZiksITB9fX19fShjLHgsdCxlLG4scik/cyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChhLG8pLHY9ITEpOihnfHwoYi5saW5lU3RhcnQoKSxiLnBvaW50KGNbMF0sY1sxXSkpLGIucG9pbnQoeFswXSx4WzFdKSxzfHxiLmxpbmVFbmQoKSx2PSExKX1wPWEseT1vLGc9c31yZXR1cm4gX319dmFyIE1sLE9sLE5sLEJsPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI9MCxpPTAsYT05NjAsbz01MDA7cmV0dXJuIG49e3N0cmVhbTpmdW5jdGlvbihuKXtyZXR1cm4gdCYmZT09PW4/dDp0PUFsKHIsaSxhLG8pKGU9bil9LGV4dGVudDpmdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rc1swXVswXSxpPStzWzBdWzFdLGE9K3NbMV1bMF0sbz0rc1sxXVsxXSx0PWU9bnVsbCxuKTpbW3IsaV0sW2Esb11dfX19LERsPXVjKCksTGw9e3NwaGVyZTpMYyxwb2ludDpMYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtMbC5wb2ludD1SbCxMbC5saW5lRW5kPUlsfSxsaW5lRW5kOkxjLHBvbHlnb25TdGFydDpMYyxwb2x5Z29uRW5kOkxjfTtmdW5jdGlvbiBJbCgpe0xsLnBvaW50PUxsLmxpbmVFbmQ9TGN9ZnVuY3Rpb24gUmwodCxlKXtNbD10Kj12YyxPbD1TYyhlKj12YyksTmw9a2MoZSksTGwucG9pbnQ9Rmx9ZnVuY3Rpb24gRmwodCxlKXt0Kj12Yzt2YXIgbj1TYyhlKj12Yykscj1rYyhlKSxpPWJjKHQtTWwpLGE9a2MoaSksbz1yKlNjKGkpLHM9Tmwqbi1PbCpyKmEsYz1PbCpuK05sKnIqYTtEbC5hZGQoX2MoTWMobypvK3MqcyksYykpLE1sPXQsT2w9bixObD1yfXZhciBQbD1mdW5jdGlvbih0KXtyZXR1cm4gRGwucmVzZXQoKSxXYyh0LExsKSwrRGx9LGpsPVtudWxsLG51bGxdLFlsPXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpqbH0semw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gamxbMF09dCxqbFsxXT1lLFBsKFlsKX0sVWw9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcWwodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5mZWF0dXJlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKHFsKG5bcl0uZ2VvbWV0cnksZSkpcmV0dXJuITA7cmV0dXJuITF9fSwkbD17U3BoZXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LFBvaW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFdsKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKFdsKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSGwodC5jb29yZGluYXRlcyxlKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihIbChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZsKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoVmwobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKHFsKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9fTtmdW5jdGlvbiBxbCh0LGUpe3JldHVybiEoIXR8fCEkbC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpKSYmJGxbdC50eXBlXSh0LGUpfWZ1bmN0aW9uIFdsKHQsZSl7cmV0dXJuIDA9PT16bCh0LGUpfWZ1bmN0aW9uIEhsKHQsZSl7Zm9yKHZhciBuLHIsaSxhPTAsbz10Lmxlbmd0aDthPG87YSsrKXtpZigwPT09KHI9emwodFthXSxlKSkpcmV0dXJuITA7aWYoYT4wJiYoaT16bCh0W2FdLHRbYS0xXSkpPjAmJm48PWkmJnI8PWkmJihuK3ItaSkqKDEtTWF0aC5wb3coKG4tcikvaSwyKSk8MWUtMTIqaSlyZXR1cm4hMDtuPXJ9cmV0dXJuITF9ZnVuY3Rpb24gVmwodCxlKXtyZXR1cm4hIWtsKHQubWFwKEdsKSxYbChlKSl9ZnVuY3Rpb24gR2wodCl7cmV0dXJuKHQ9dC5tYXAoWGwpKS5wb3AoKSx0fWZ1bmN0aW9uIFhsKHQpe3JldHVyblt0WzBdKnZjLHRbMV0qdmNdfXZhciBabD1mdW5jdGlvbih0LGUpe3JldHVybih0JiZVbC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP1VsW3QudHlwZV06cWwpKHQsZSl9O2Z1bmN0aW9uIEtsKHQsZSxuKXt2YXIgcj13KHQsZS0xZS02LG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bdCxlXX0pKX19ZnVuY3Rpb24gUWwodCxlLG4pe3ZhciByPXcodCxlLTFlLTYsbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHRdfSkpfX1mdW5jdGlvbiBKbCgpe3ZhciB0LGUsbixyLGksYSxvLHMsYyx1LGwsaCxmPTEwLGQ9ZixwPTkwLHk9MzYwLGc9Mi41O2Z1bmN0aW9uIG0oKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp2KCl9fWZ1bmN0aW9uIHYoKXtyZXR1cm4gdyh3YyhyL3ApKnAsbixwKS5tYXAobCkuY29uY2F0KHcod2Mocy95KSp5LG8seSkubWFwKGgpKS5jb25jYXQodyh3YyhlL2YpKmYsdCxmKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBiYyh0JXApPjFlLTZ9KSkubWFwKGMpKS5jb25jYXQodyh3YyhhL2QpKmQsaSxkKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBiYyh0JXkpPjFlLTZ9KSkubWFwKHUpKX1yZXR1cm4gbS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB2KCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KSl9LG0ub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbChyKS5jb25jYXQoaChvKS5zbGljZSgxKSxsKG4pLnJldmVyc2UoKS5zbGljZSgxKSxoKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sbS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bS5leHRlbnRNYWpvcih0KS5leHRlbnRNaW5vcih0KTptLmV4dGVudE1pbm9yKCl9LG0uZXh0ZW50TWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF1bMF0sbj0rdFsxXVswXSxzPSt0WzBdWzFdLG89K3RbMV1bMV0scj5uJiYodD1yLHI9bixuPXQpLHM+byYmKHQ9cyxzPW8sbz10KSxtLnByZWNpc2lvbihnKSk6W1tyLHNdLFtuLG9dXX0sbS5leHRlbnRNaW5vcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rblswXVswXSx0PStuWzFdWzBdLGE9K25bMF1bMV0saT0rblsxXVsxXSxlPnQmJihuPWUsZT10LHQ9biksYT5pJiYobj1hLGE9aSxpPW4pLG0ucHJlY2lzaW9uKGcpKTpbW2UsYV0sW3QsaV1dfSxtLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bS5zdGVwTWFqb3IodCkuc3RlcE1pbm9yKHQpOm0uc3RlcE1pbm9yKCl9LG0uc3RlcE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLHk9K3RbMV0sbSk6W3AseV19LG0uc3RlcE1pbm9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sbSk6W2YsZF19LG0ucHJlY2lzaW9uPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStmLGM9S2woYSxpLDkwKSx1PVFsKGUsdCxnKSxsPUtsKHMsbyw5MCksaD1RbChyLG4sZyksbSk6Z30sbS5leHRlbnRNYWpvcihbWy0xODAsLTg5Ljk5OTk5OV0sWzE4MCw4OS45OTk5OTldXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC4wMDAwMDFdLFsxODAsODAuMDAwMDAxXV0pfWZ1bmN0aW9uIHRoKCl7cmV0dXJuIEpsKCkoKX12YXIgZWgsbmgscmgsaWgsYWg9ZnVuY3Rpb24odCxlKXt2YXIgbj10WzBdKnZjLHI9dFsxXSp2YyxpPWVbMF0qdmMsYT1lWzFdKnZjLG89a2Mocikscz1TYyhyKSxjPWtjKGEpLHU9U2MoYSksbD1vKmtjKG4pLGg9bypTYyhuKSxmPWMqa2MoaSksZD1jKlNjKGkpLHA9MipCYyhNYyhEYyhhLXIpK28qYypEYyhpLW4pKSkseT1TYyhwKSxnPXA/ZnVuY3Rpb24odCl7dmFyIGU9U2ModCo9cCkveSxuPVNjKHAtdCkveSxyPW4qbCtlKmYsaT1uKmgrZSpkLGE9bipzK2UqdTtyZXR1cm5bX2MoaSxyKSptYyxfYyhhLE1jKHIqcitpKmkpKSptY119OmZ1bmN0aW9uKCl7cmV0dXJuW24qbWMsciptY119O3JldHVybiBnLmRpc3RhbmNlPXAsZ30sb2g9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHNoPXVjKCksY2g9dWMoKSx1aD17cG9pbnQ6TGMsbGluZVN0YXJ0OkxjLGxpbmVFbmQ6TGMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dWgubGluZVN0YXJ0PWxoLHVoLmxpbmVFbmQ9ZGh9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt1aC5saW5lU3RhcnQ9dWgubGluZUVuZD11aC5wb2ludD1MYyxzaC5hZGQoYmMoY2gpKSxjaC5yZXNldCgpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1zaC8yO3JldHVybiBzaC5yZXNldCgpLHR9fTtmdW5jdGlvbiBsaCgpe3VoLnBvaW50PWhofWZ1bmN0aW9uIGhoKHQsZSl7dWgucG9pbnQ9ZmgsZWg9cmg9dCxuaD1paD1lfWZ1bmN0aW9uIGZoKHQsZSl7Y2guYWRkKGloKnQtcmgqZSkscmg9dCxpaD1lfWZ1bmN0aW9uIGRoKCl7ZmgoZWgsbmgpfXZhciBwaD11aCx5aD0xLzAsZ2g9eWgsbWg9LXloLHZoPW1oO3ZhciBiaCx4aCxfaCxraCx3aD17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0PHloJiYoeWg9dCk7dD5taCYmKG1oPXQpO2U8Z2gmJihnaD1lKTtlPnZoJiYodmg9ZSl9LGxpbmVTdGFydDpMYyxsaW5lRW5kOkxjLHBvbHlnb25TdGFydDpMYyxwb2x5Z29uRW5kOkxjLHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbeWgsZ2hdLFttaCx2aF1dO3JldHVybiBtaD12aD0tKGdoPXloPTEvMCksdH19LFRoPTAsRWg9MCxDaD0wLFNoPTAsQWg9MCxNaD0wLE9oPTAsTmg9MCxCaD0wLERoPXtwb2ludDpMaCxsaW5lU3RhcnQ6SWgsbGluZUVuZDpQaCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtEaC5saW5lU3RhcnQ9amgsRGgubGluZUVuZD1ZaH0scG9seWdvbkVuZDpmdW5jdGlvbigpe0RoLnBvaW50PUxoLERoLmxpbmVTdGFydD1JaCxEaC5saW5lRW5kPVBofSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1CaD9bT2gvQmgsTmgvQmhdOk1oP1tTaC9NaCxBaC9NaF06Q2g/W1RoL0NoLEVoL0NoXTpbTmFOLE5hTl07cmV0dXJuIFRoPUVoPUNoPVNoPUFoPU1oPU9oPU5oPUJoPTAsdH19O2Z1bmN0aW9uIExoKHQsZSl7VGgrPXQsRWgrPWUsKytDaH1mdW5jdGlvbiBJaCgpe0RoLnBvaW50PVJofWZ1bmN0aW9uIFJoKHQsZSl7RGgucG9pbnQ9RmgsTGgoX2g9dCxraD1lKX1mdW5jdGlvbiBGaCh0LGUpe3ZhciBuPXQtX2gscj1lLWtoLGk9TWMobipuK3Iqcik7U2grPWkqKF9oK3QpLzIsQWgrPWkqKGtoK2UpLzIsTWgrPWksTGgoX2g9dCxraD1lKX1mdW5jdGlvbiBQaCgpe0RoLnBvaW50PUxofWZ1bmN0aW9uIGpoKCl7RGgucG9pbnQ9emh9ZnVuY3Rpb24gWWgoKXtVaChiaCx4aCl9ZnVuY3Rpb24gemgodCxlKXtEaC5wb2ludD1VaCxMaChiaD1faD10LHhoPWtoPWUpfWZ1bmN0aW9uIFVoKHQsZSl7dmFyIG49dC1faCxyPWUta2gsaT1NYyhuKm4rcipyKTtTaCs9aSooX2grdCkvMixBaCs9aSooa2grZSkvMixNaCs9aSxPaCs9KGk9a2gqdC1faCplKSooX2grdCksTmgrPWkqKGtoK2UpLEJoKz0zKmksTGgoX2g9dCxraD1lKX12YXIgJGg9RGg7ZnVuY3Rpb24gcWgodCl7dGhpcy5fY29udGV4dD10fXFoLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLGUpLHRoaXMuX2NvbnRleHQuYXJjKHQsZSx0aGlzLl9yYWRpdXMsMCxnYyl9fSxyZXN1bHQ6TGN9O3ZhciBXaCxIaCxWaCxHaCxYaCxaaD11YygpLEtoPXtwb2ludDpMYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtLaC5wb2ludD1RaH0sbGluZUVuZDpmdW5jdGlvbigpe1doJiZKaChIaCxWaCksS2gucG9pbnQ9TGN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1doPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7V2g9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K1poO3JldHVybiBaaC5yZXNldCgpLHR9fTtmdW5jdGlvbiBRaCh0LGUpe0toLnBvaW50PUpoLEhoPUdoPXQsVmg9WGg9ZX1mdW5jdGlvbiBKaCh0LGUpe0doLT10LFhoLT1lLFpoLmFkZChNYyhHaCpHaCtYaCpYaCkpLEdoPXQsWGg9ZX12YXIgdGY9S2g7ZnVuY3Rpb24gZWYoKXt0aGlzLl9zdHJpbmc9W119ZnVuY3Rpb24gbmYodCl7cmV0dXJuIm0wLCIrdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIistMip0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKzIqdCsieiJ9ZWYucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOm5mKDQuNSkscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpIT09dGhpcy5fcmFkaXVzJiYodGhpcy5fcmFkaXVzPXQsdGhpcy5fY2lyY2xlPW51bGwpLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX3N0cmluZy5wdXNoKCJaIiksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9zdHJpbmcucHVzaCgiTCIsdCwiLCIsZSk7YnJlYWs7ZGVmYXVsdDpudWxsPT10aGlzLl9jaXJjbGUmJih0aGlzLl9jaXJjbGU9bmYodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUsdGhpcy5fY2lyY2xlKX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciB0PXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLHR9cmV0dXJuIG51bGx9fTt2YXIgcmY9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9NC41O2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQmJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmci5wb2ludFJhZGl1cygraS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFdjKHQsbihyKSkpLHIucmVzdWx0KCl9cmV0dXJuIGEuYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gV2ModCxuKHBoKSkscGgucmVzdWx0KCl9LGEubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gV2ModCxuKHRmKSksdGYucmVzdWx0KCl9LGEuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBXYyh0LG4od2gpKSx3aC5yZXN1bHQoKX0sYS5jZW50cm9pZD1mdW5jdGlvbih0KXtyZXR1cm4gV2ModCxuKCRoKSksJGgucmVzdWx0KCl9LGEucHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT1lPyh0PW51bGwsb2gpOih0PWUpLnN0cmVhbSxhKTp0fSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD8oZT1udWxsLG5ldyBlZik6bmV3IHFoKGU9dCksImZ1bmN0aW9uIiE9dHlwZW9mIGkmJnIucG9pbnRSYWRpdXMoaSksYSk6ZX0sYS5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OihyLnBvaW50UmFkaXVzKCt0KSwrdCksYSk6aX0sYS5wcm9qZWN0aW9uKHQpLmNvbnRleHQoZSl9LGFmPWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06b2YodCl9fTtmdW5jdGlvbiBvZih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IHNmO2Zvcih2YXIgciBpbiB0KW5bcl09dFtyXTtyZXR1cm4gbi5zdHJlYW09ZSxufX1mdW5jdGlvbiBzZigpe31mdW5jdGlvbiBjZih0LGUsbil7dmFyIHI9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9ciYmdC5jbGlwRXh0ZW50KG51bGwpLFdjKG4sdC5zdHJlYW0od2gpKSxlKHdoLnJlc3VsdCgpKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQociksdH1mdW5jdGlvbiB1Zih0LGUsbil7cmV0dXJuIGNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPWVbMV1bMF0tZVswXVswXSxpPWVbMV1bMV0tZVswXVsxXSxhPU1hdGgubWluKHIvKG5bMV1bMF0tblswXVswXSksaS8oblsxXVsxXS1uWzBdWzFdKSksbz0rZVswXVswXSsoci1hKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9K2VbMF1bMV0rKGktYSooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCphKS50cmFuc2xhdGUoW28sc10pfSksbil9ZnVuY3Rpb24gbGYodCxlLG4pe3JldHVybiB1Zih0LFtbMCwwXSxlXSxuKX1mdW5jdGlvbiBoZih0LGUsbil7cmV0dXJuIGNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVswXS1uWzBdWzBdKSxhPShyLWkqKG5bMV1bMF0rblswXVswXSkpLzIsbz0taSpuWzBdWzFdO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxuKX1mdW5jdGlvbiBmZih0LGUsbil7cmV0dXJuIGNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVsxXS1uWzBdWzFdKSxhPS1pKm5bMF1bMF0sbz0oci1pKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxuKX1zZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnNmLHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O3ZhciBkZj1rYygzMCp2YykscGY9ZnVuY3Rpb24odCxlKXtyZXR1cm4rZT9mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4ocixpLGEsbyxzLGMsdSxsLGgsZixkLHAseSxnKXt2YXIgbT11LXIsdj1sLWksYj1tKm0rdip2O2lmKGI+NCplJiZ5LS0pe3ZhciB4PW8rZixfPXMrZCxrPWMrcCx3PU1jKHgqeCtfKl8rayprKSxUPUJjKGsvPXcpLEU9YmMoYmMoayktMSk8MWUtNnx8YmMoYS1oKTwxZS02PyhhK2gpLzI6X2MoXyx4KSxDPXQoRSxUKSxTPUNbMF0sQT1DWzFdLE09Uy1yLE89QS1pLE49dipNLW0qTzsoTipOL2I+ZXx8YmMoKG0qTSt2Kk8pL2ItLjUpPi4zfHxvKmYrcypkK2MqcDxkZikmJihuKHIsaSxhLG8scyxjLFMsQSxFLHgvPXcsXy89dyxrLHksZyksZy5wb2ludChTLEEpLG4oUyxBLEUseCxfLGssdSxsLGgsZixkLHAseSxnKSl9fXJldHVybiBmdW5jdGlvbihlKXt2YXIgcixpLGEsbyxzLGMsdSxsLGgsZixkLHAseT17cG9pbnQ6ZyxsaW5lU3RhcnQ6bSxsaW5lRW5kOmIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKSx5LmxpbmVTdGFydD14fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCkseS5saW5lU3RhcnQ9bX19O2Z1bmN0aW9uIGcobixyKXtuPXQobixyKSxlLnBvaW50KG5bMF0sblsxXSl9ZnVuY3Rpb24gbSgpe2w9TmFOLHkucG9pbnQ9dixlLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHYocixpKXt2YXIgYT1ldShbcixpXSksbz10KHIsaSk7bihsLGgsdSxmLGQscCxsPW9bMF0saD1vWzFdLHU9cixmPWFbMF0sZD1hWzFdLHA9YVsyXSwxNixlKSxlLnBvaW50KGwsaCl9ZnVuY3Rpb24gYigpe3kucG9pbnQ9ZyxlLmxpbmVFbmQoKX1mdW5jdGlvbiB4KCl7bSgpLHkucG9pbnQ9Xyx5LmxpbmVFbmQ9a31mdW5jdGlvbiBfKHQsZSl7dihyPXQsZSksaT1sLGE9aCxvPWYscz1kLGM9cCx5LnBvaW50PXZ9ZnVuY3Rpb24gaygpe24obCxoLHUsZixkLHAsaSxhLHIsbyxzLGMsMTYsZSkseS5saW5lRW5kPWIsYigpfXJldHVybiB5fX0odCxlKTpmdW5jdGlvbih0KXtyZXR1cm4gb2Yoe3BvaW50OmZ1bmN0aW9uKGUsbil7ZT10KGUsbiksdGhpcy5zdHJlYW0ucG9pbnQoZVswXSxlWzFdKX19KX0odCl9O3ZhciB5Zj1vZih7cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0KnZjLGUqdmMpfX0pO2Z1bmN0aW9uIGdmKHQsZSxuLHIsaSl7ZnVuY3Rpb24gYShhLG8pe3JldHVybltlK3QqKGEqPXIpLG4tdCoobyo9aSldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihhLG8pe3JldHVyblsoYS1lKS90KnIsKG4tbykvdCppXX0sYX1mdW5jdGlvbiBtZih0LGUsbixyLGksYSl7dmFyIG89a2MoYSkscz1TYyhhKSxjPW8qdCx1PXMqdCxsPW8vdCxoPXMvdCxmPShzKm4tbyplKS90LGQ9KHMqZStvKm4pL3Q7ZnVuY3Rpb24gcCh0LGEpe3JldHVybltjKih0Kj1yKS11KihhKj1pKStlLG4tdSp0LWMqYV19cmV0dXJuIHAuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3IqKGwqdC1oKmUrZiksaSooZC1oKnQtbCplKV19LHB9ZnVuY3Rpb24gdmYodCl7cmV0dXJuIGJmKChmdW5jdGlvbigpe3JldHVybiB0fSkpKCl9ZnVuY3Rpb24gYmYodCl7dmFyIGUsbixyLGksYSxvLHMsYyx1LGwsaD0xNTAsZj00ODAsZD0yNTAscD0wLHk9MCxnPTAsbT0wLHY9MCxiPTAseD0xLF89MSxrPW51bGwsdz1DbCxUPW51bGwsRT1vaCxDPS41O2Z1bmN0aW9uIFModCl7cmV0dXJuIGModFswXSp2Yyx0WzFdKnZjKX1mdW5jdGlvbiBBKHQpe3JldHVybih0PWMuaW52ZXJ0KHRbMF0sdFsxXSkpJiZbdFswXSptYyx0WzFdKm1jXX1mdW5jdGlvbiBNKCl7dmFyIHQ9bWYoaCwwLDAseCxfLGIpLmFwcGx5KG51bGwsZShwLHkpKSxyPShiP21mOmdmKShoLGYtdFswXSxkLXRbMV0seCxfLGIpO3JldHVybiBuPXNsKGcsbSx2KSxzPWFsKGUsciksYz1hbChuLHMpLG89cGYocyxDKSxPKCl9ZnVuY3Rpb24gTygpe3JldHVybiB1PWw9bnVsbCxTfXJldHVybiBTLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gdSYmbD09PXQ/dTp1PXlmKGZ1bmN0aW9uKHQpe3JldHVybiBvZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj10KGUsbik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KG4pKHcobyhFKGw9dCkpKSkpfSxTLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dCxrPXZvaWQgMCxPKCkpOnd9LFMucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9dCxUPXI9aT1hPW51bGwsTygpKTpFfSxTLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0rdD9TbChrPXQqdmMpOihrPW51bGwsQ2wpLE8oKSk6ayptY30sUy5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PXQ/KFQ9cj1pPWE9bnVsbCxvaCk6QWwoVD0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksTygpKTpudWxsPT1UP251bGw6W1tULHJdLFtpLGFdXX0sUy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxNKCkpOmh9LFMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sTSgpKTpbZixkXX0sUy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqdmMseT10WzFdJTM2MCp2YyxNKCkpOltwKm1jLHkqbWNdfSxTLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCp2YyxtPXRbMV0lMzYwKnZjLHY9dC5sZW5ndGg+Mj90WzJdJTM2MCp2YzowLE0oKSk6W2cqbWMsbSptYyx2Km1jXX0sUy5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCp2YyxNKCkpOmIqbWN9LFMucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9dD8tMToxLE0oKSk6eDwwfSxTLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXQ/LTE6MSxNKCkpOl88MH0sUy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89cGYocyxDPXQqdCksTygpKTpNYyhDKX0sUy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWYoUyx0LGUpfSxTLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbGYoUyx0LGUpfSxTLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGhmKFMsdCxlKX0sUy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmYoUyx0LGUpfSxmdW5jdGlvbigpe3JldHVybiBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFMuaW52ZXJ0PWUuaW52ZXJ0JiZBLE0oKX19ZnVuY3Rpb24geGYodCl7dmFyIGU9MCxuPWRjLzMscj1iZih0KSxpPXIoZSxuKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihlPXRbMF0qdmMsbj10WzFdKnZjKTpbZSptYyxuKm1jXX0saX1mdW5jdGlvbiBfZih0LGUpe3ZhciBuPVNjKHQpLHI9KG4rU2MoZSkpLzI7aWYoYmMocik8MWUtNilyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9a2ModCk7ZnVuY3Rpb24gbih0LG4pe3JldHVyblt0KmUsU2MobikvZV19cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW3QvZSxCYyhuKmUpXX0sbn0odCk7dmFyIGk9MStuKigyKnItbiksYT1NYyhpKS9yO2Z1bmN0aW9uIG8odCxlKXt2YXIgbj1NYyhpLTIqcipTYyhlKSkvcjtyZXR1cm5bbipTYyh0Kj1yKSxhLW4qa2ModCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPWEtZSxvPV9jKHQsYmMobikpKkFjKG4pO3JldHVybiBuKnI8MCYmKG8tPWRjKkFjKHQpKkFjKG4pKSxbby9yLEJjKChpLSh0KnQrbipuKSpyKnIpLygyKnIpKV19LG99dmFyIGtmPWZ1bmN0aW9uKCl7cmV0dXJuIHhmKF9mKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfSx3Zj1mdW5jdGlvbigpe3JldHVybiBrZigpLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCkudHJhbnNsYXRlKFs0ODAsMjUwXSkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pfTt2YXIgVGY9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpLGEsbz13ZigpLHM9a2YoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLGM9a2YoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksdT17cG9pbnQ6ZnVuY3Rpb24odCxlKXthPVt0LGVdfX07ZnVuY3Rpb24gbCh0KXt2YXIgZT10WzBdLG89dFsxXTtyZXR1cm4gYT1udWxsLG4ucG9pbnQoZSxvKSxhfHwoci5wb2ludChlLG8pLGEpfHwoaS5wb2ludChlLG8pLGEpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gdD1lPW51bGwsbH1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9by5zY2FsZSgpLG49by50cmFuc2xhdGUoKSxyPSh0WzBdLW5bMF0pL2UsaT0odFsxXS1uWzFdKS9lO3JldHVybihpPj0uMTImJmk8LjIzNCYmcj49LS40MjUmJnI8LS4yMTQ/czppPj0uMTY2JiZpPC4yMzQmJnI+PS0uMjE0JiZyPC0uMTE1P2M6bykuaW52ZXJ0KHQpfSxsLnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gdCYmZT09PW4/dDoocj1bby5zdHJlYW0oZT1uKSxzLnN0cmVhbShuKSxjLnN0cmVhbShuKV0saT1yLmxlbmd0aCx0PXtwb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMTsrK248aTspcltuXS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5wb2x5Z29uRW5kKCl9fSk7dmFyIHIsaX0sbC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8ucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGMucHJlY2lzaW9uKHQpLGgoKSk6by5wcmVjaXNpb24oKX0sbC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby5zY2FsZSh0KSxzLnNjYWxlKC4zNSp0KSxjLnNjYWxlKHQpLGwudHJhbnNsYXRlKG8udHJhbnNsYXRlKCkpKTpvLnNjYWxlKCl9LGwudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvLnRyYW5zbGF0ZSgpO3ZhciBlPW8uc2NhbGUoKSxhPSt0WzBdLGw9K3RbMV07cmV0dXJuIG49by50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW2EtLjQ1NSplLGwtLjIzOCplXSxbYSsuNDU1KmUsbCsuMjM4KmVdXSkuc3RyZWFtKHUpLHI9cy50cmFuc2xhdGUoW2EtLjMwNyplLGwrLjIwMSplXSkuY2xpcEV4dGVudChbW2EtLjQyNSplKzFlLTYsbCsuMTIqZSsxZS02XSxbYS0uMjE0KmUtMWUtNixsKy4yMzQqZS0xZS02XV0pLnN0cmVhbSh1KSxpPWMudHJhbnNsYXRlKFthLS4yMDUqZSxsKy4yMTIqZV0pLmNsaXBFeHRlbnQoW1thLS4yMTQqZSsxZS02LGwrLjE2NiplKzFlLTZdLFthLS4xMTUqZS0xZS02LGwrLjIzNCplLTFlLTZdXSkuc3RyZWFtKHUpLGgoKX0sbC5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWYobCx0LGUpfSxsLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbGYobCx0LGUpfSxsLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGhmKGwsdCxlKX0sbC5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmYobCx0LGUpfSxsLnNjYWxlKDEwNzApfTtmdW5jdGlvbiBFZih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1rYyhlKSxpPWtjKG4pLGE9dChyKmkpO3JldHVyblthKmkqU2MoZSksYSpTYyhuKV19fWZ1bmN0aW9uIENmKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPU1jKGUqZStuKm4pLGk9dChyKSxhPVNjKGkpLG89a2MoaSk7cmV0dXJuW19jKGUqYSxyKm8pLEJjKHImJm4qYS9yKV19fXZhciBTZj1FZigoZnVuY3Rpb24odCl7cmV0dXJuIE1jKDIvKDErdCkpfSkpO1NmLmludmVydD1DZigoZnVuY3Rpb24odCl7cmV0dXJuIDIqQmModC8yKX0pKTt2YXIgQWY9ZnVuY3Rpb24oKXtyZXR1cm4gdmYoU2YpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSxNZj1FZigoZnVuY3Rpb24odCl7cmV0dXJuKHQ9TmModCkpJiZ0L1NjKHQpfSkpO01mLmludmVydD1DZigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSk7dmFyIE9mPWZ1bmN0aW9uKCl7cmV0dXJuIHZmKE1mKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9O2Z1bmN0aW9uIE5mKHQsZSl7cmV0dXJuW3QsRWMoT2MoKHBjK2UpLzIpKV19TmYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMip4YyhUYyhlKSktcGNdfTt2YXIgQmY9ZnVuY3Rpb24oKXtyZXR1cm4gRGYoTmYpLnNjYWxlKDk2MS9nYyl9O2Z1bmN0aW9uIERmKHQpe3ZhciBlLG4scixpPXZmKHQpLGE9aS5jZW50ZXIsbz1pLnNjYWxlLHM9aS50cmFuc2xhdGUsYz1pLmNsaXBFeHRlbnQsdT1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgYT1kYypvKCkscz1pKGhsKGkucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBjKG51bGw9PXU/W1tzWzBdLWEsc1sxXS1hXSxbc1swXSthLHNbMV0rYV1dOnQ9PT1OZj9bW01hdGgubWF4KHNbMF0tYSx1KSxlXSxbTWF0aC5taW4oc1swXSthLG4pLHJdXTpbW3UsTWF0aC5tYXgoc1sxXS1hLGUpXSxbbixNYXRoLm1pbihzWzFdK2EscildXSl9cmV0dXJuIGkuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8odCksbCgpKTpvKCl9LGkudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzKHQpLGwoKSk6cygpfSxpLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYSh0KSxsKCkpOmEoKX0saS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3U9ZT1uPXI9bnVsbDoodT0rdFswXVswXSxlPSt0WzBdWzFdLG49K3RbMV1bMF0scj0rdFsxXVsxXSksbCgpKTpudWxsPT11P251bGw6W1t1LGVdLFtuLHJdXX0sbCgpfWZ1bmN0aW9uIExmKHQpe3JldHVybiBPYygocGMrdCkvMil9ZnVuY3Rpb24gSWYodCxlKXt2YXIgbj1rYyh0KSxyPXQ9PT1lP1NjKHQpOkVjKG4va2MoZSkpL0VjKExmKGUpL0xmKHQpKSxpPW4qQ2MoTGYodCkscikvcjtpZighcilyZXR1cm4gTmY7ZnVuY3Rpb24gYSh0LGUpe2k+MD9lPDFlLTYtcGMmJihlPTFlLTYtcGMpOmU+cGMtMWUtNiYmKGU9cGMtMWUtNik7dmFyIG49aS9DYyhMZihlKSxyKTtyZXR1cm5bbipTYyhyKnQpLGktbiprYyhyKnQpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLWUsYT1BYyhyKSpNYyh0KnQrbipuKSxvPV9jKHQsYmMobikpKkFjKG4pO3JldHVybiBuKnI8MCYmKG8tPWRjKkFjKHQpKkFjKG4pKSxbby9yLDIqeGMoQ2MoaS9hLDEvcikpLXBjXX0sYX12YXIgUmY9ZnVuY3Rpb24oKXtyZXR1cm4geGYoSWYpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9O2Z1bmN0aW9uIEZmKHQsZSl7cmV0dXJuW3QsZV19RmYuaW52ZXJ0PUZmO3ZhciBQZj1mdW5jdGlvbigpe3JldHVybiB2ZihGZikuc2NhbGUoMTUyLjYzKX07ZnVuY3Rpb24gamYodCxlKXt2YXIgbj1rYyh0KSxyPXQ9PT1lP1NjKHQpOihuLWtjKGUpKS8oZS10KSxpPW4vcit0O2lmKGJjKHIpPDFlLTYpcmV0dXJuIEZmO2Z1bmN0aW9uIGEodCxlKXt2YXIgbj1pLWUsYT1yKnQ7cmV0dXJuW24qU2MoYSksaS1uKmtjKGEpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLWUsYT1fYyh0LGJjKG4pKSpBYyhuKTtyZXR1cm4gbipyPDAmJihhLT1kYypBYyh0KSpBYyhuKSksW2EvcixpLUFjKHIpKk1jKHQqdCtuKm4pXX0sYX12YXIgWWY9ZnVuY3Rpb24oKXtyZXR1cm4geGYoamYpLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9LHpmPTEuMzQwMjY0LFVmPS0uMDgxMTA2LCRmPTg5M2UtNixxZj0uMDAzNzk2LFdmPU1jKDMpLzI7ZnVuY3Rpb24gSGYodCxlKXt2YXIgbj1CYyhXZipTYyhlKSkscj1uKm4saT1yKnIqcjtyZXR1cm5bdCprYyhuKS8oV2YqKHpmKzMqVWYqcitpKig3KiRmKzkqcWYqcikpKSxuKih6ZitVZipyK2kqKCRmK3FmKnIpKV19SGYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHI9ZSxpPXIqcixhPWkqaSppLG89MDtvPDEyJiYoYT0oaT0oci09bj0ociooemYrVWYqaSthKigkZitxZippKSktZSkvKHpmKzMqVWYqaSthKig3KiRmKzkqcWYqaSkpKSpyKSppKmksIShiYyhuKTwxZS0xMikpOysrbyk7cmV0dXJuW1dmKnQqKHpmKzMqVWYqaSthKig3KiRmKzkqcWYqaSkpL2tjKHIpLEJjKFNjKHIpL1dmKV19O3ZhciBWZj1mdW5jdGlvbigpe3JldHVybiB2ZihIZikuc2NhbGUoMTc3LjE1OCl9O2Z1bmN0aW9uIEdmKHQsZSl7dmFyIG49a2MoZSkscj1rYyh0KSpuO3JldHVybltuKlNjKHQpL3IsU2MoZSkvcl19R2YuaW52ZXJ0PUNmKHhjKTt2YXIgWGY9ZnVuY3Rpb24oKXtyZXR1cm4gdmYoR2YpLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9LFpmPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaSxhLG8scz0xLGM9MCx1PTAsbD0xLGg9MSxmPTAsZD1udWxsLHA9MSx5PTEsZz1vZih7cG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1iKFt0LGVdKTt0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pLG09b2g7ZnVuY3Rpb24gdigpe3JldHVybiBwPXMqbCx5PXMqaCxhPW89bnVsbCxifWZ1bmN0aW9uIGIobil7dmFyIHI9blswXSpwLGk9blsxXSp5O2lmKGYpe3ZhciBhPWkqdC1yKmU7cj1yKnQraSplLGk9YX1yZXR1cm5bcitjLGkrdV19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKG4pe3ZhciByPW5bMF0tYyxpPW5bMV0tdTtpZihmKXt2YXIgYT1pKnQrciplO3I9cip0LWkqZSxpPWF9cmV0dXJuW3IvcCxpL3ldfSxiLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gYSYmbz09PXQ/YTphPWcobShvPXQpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10LGQ9bj1yPWk9bnVsbCx2KCkpOm19LGIuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1udWxsPT10PyhkPW49cj1pPW51bGwsb2gpOkFsKGQ9K3RbMF1bMF0sbj0rdFswXVsxXSxyPSt0WzFdWzBdLGk9K3RbMV1bMV0pLHYoKSk6bnVsbD09ZD9udWxsOltbZCxuXSxbcixpXV19LGIuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsdigpKTpzfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdFswXSx1PSt0WzFdLHYoKSk6W2MsdV19LGIuYW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9U2MoZj1uJTM2MCp2YyksdD1rYyhmKSx2KCkpOmYqbWN9LGIucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dD8tMToxLHYoKSk6bDwwfSxiLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQ/LTE6MSx2KCkpOmg8MH0sYi5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWYoYix0LGUpfSxiLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbGYoYix0LGUpfSxiLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGhmKGIsdCxlKX0sYi5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmYoYix0LGUpfSxifTtmdW5jdGlvbiBLZih0LGUpe3ZhciBuPWUqZSxyPW4qbjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpuK3IqKHIqKC4wMDM5NzEqbi0uMDAxNTI5KnIpLS4wMTM3OTEpKSxlKigxLjAwNzIyNituKiguMDE1MDg1K3IqKC4wMjg4NzQqbi0uMDQ0NDc1LS4wMDU5MTYqcikpKV19S2YuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1lLGk9MjU7ZG97dmFyIGE9cipyLG89YSphO3ItPW49KHIqKDEuMDA3MjI2K2EqKC4wMTUwODUrbyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipvKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K28qKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqbykpKX13aGlsZShiYyhuKT4xZS02JiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPXIqcikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLHJdfTt2YXIgUWY9ZnVuY3Rpb24oKXtyZXR1cm4gdmYoS2YpLnNjYWxlKDE3NS4yOTUpfTtmdW5jdGlvbiBKZih0LGUpe3JldHVybltrYyhlKSpTYyh0KSxTYyhlKV19SmYuaW52ZXJ0PUNmKEJjKTt2YXIgdGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdmYoSmYpLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTAuMDAwMDAxKX07ZnVuY3Rpb24gZWQodCxlKXt2YXIgbj1rYyhlKSxyPTEra2ModCkqbjtyZXR1cm5bbipTYyh0KS9yLFNjKGUpL3JdfWVkLmludmVydD1DZigoZnVuY3Rpb24odCl7cmV0dXJuIDIqeGModCl9KSk7dmFyIG5kPWZ1bmN0aW9uKCl7cmV0dXJuIHZmKGVkKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfTtmdW5jdGlvbiByZCh0LGUpe3JldHVybltFYyhPYygocGMrZSkvMikpLC10XX1yZC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMip4YyhUYyh0KSktcGNdfTt2YXIgaWQ9ZnVuY3Rpb24oKXt2YXIgdD1EZihyZCksZT10LmNlbnRlcixuPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKFstdFsxXSx0WzBdXSk6Wyh0PWUoKSlbMV0sLXRbMF1dfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6Wyh0PW4oKSlbMF0sdFsxXSx0WzJdLTkwXX0sbihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9O2Z1bmN0aW9uIGFkKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIG9kKHQsZSl7cmV0dXJuIHQrZS54fWZ1bmN0aW9uIHNkKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX12YXIgY2Q9ZnVuY3Rpb24oKXt2YXIgdD1hZCxlPTEsbj0xLHI9ITE7ZnVuY3Rpb24gaShpKXt2YXIgYSxvPTA7aS5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47bj8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShvZCwwKS90Lmxlbmd0aH0obiksZS55PWZ1bmN0aW9uKHQpe3JldHVybiAxK3QucmVkdWNlKHNkLDApfShuKSk6KGUueD1hP28rPXQoZSxhKTowLGUueT0wLGE9ZSl9KSk7dmFyIHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lWzBdO3JldHVybiB0fShpKSxjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdH0oaSksdT1zLngtdChzLGMpLzIsbD1jLngrdChjLHMpLzI7cmV0dXJuIGkuZWFjaEFmdGVyKHI/ZnVuY3Rpb24odCl7dC54PSh0LngtaS54KSplLHQueT0oaS55LXQueSkqbn06ZnVuY3Rpb24odCl7dC54PSh0LngtdSkvKGwtdSkqZSx0Lnk9KDEtKGkueT90LnkvaS55OjEpKSpufSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMSxlPSt0WzBdLG49K3RbMV0saSk6cj9udWxsOltlLG5dfSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEwLGU9K3RbMF0sbj0rdFsxXSxpKTpyP1tlLG5dOm51bGx9LGl9O2Z1bmN0aW9uIHVkKHQpe3ZhciBlPTAsbj10LmNoaWxkcmVuLHI9biYmbi5sZW5ndGg7aWYocilmb3IoOy0tcj49MDspZSs9bltyXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gbGQodCxlKXt2YXIgbixyLGksYSxvLHM9bmV3IHBkKHQpLGM9K3QudmFsdWUmJihzLnZhbHVlPXQudmFsdWUpLHU9W3NdO2ZvcihudWxsPT1lJiYoZT1oZCk7bj11LnBvcCgpOylpZihjJiYobi52YWx1ZT0rbi5kYXRhLnZhbHVlKSwoaT1lKG4uZGF0YSkpJiYobz1pLmxlbmd0aCkpZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KG8pLGE9by0xO2E+PTA7LS1hKXUucHVzaChyPW4uY2hpbGRyZW5bYV09bmV3IHBkKGlbYV0pKSxyLnBhcmVudD1uLHIuZGVwdGg9bi5kZXB0aCsxO3JldHVybiBzLmVhY2hCZWZvcmUoZGQpfWZ1bmN0aW9uIGhkKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIGZkKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBkZCh0KXt2YXIgZT0wO2Rve3QuaGVpZ2h0PWV9d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK2UpfWZ1bmN0aW9uIHBkKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfXBkLnByb3RvdHlwZT1sZC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnBkLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKHVkKX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhPXRoaXMsbz1bYV07ZG97Zm9yKGU9by5yZXZlcnNlKCksbz1bXTthPWUucG9wKCk7KWlmKHQoYSksbj1hLmNoaWxkcmVuKWZvcihyPTAsaT1uLmxlbmd0aDtyPGk7KytyKW8ucHVzaChuW3JdKX13aGlsZShvLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGk9dGhpcyxhPVtpXSxvPVtdO2k9YS5wb3AoKTspaWYoby5wdXNoKGkpLGU9aS5jaGlsZHJlbilmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyOysrbilhLnB1c2goZVtuXSk7Zm9yKDtpPW8ucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj10aGlzLGk9W3JdO3I9aS5wb3AoKTspaWYodChyKSxlPXIuY2hpbGRyZW4pZm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbilpLnB1c2goZVtuXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0rdChlLmRhdGEpfHwwLHI9ZS5jaGlsZHJlbixpPXImJnIubGVuZ3RoOy0taT49MDspbis9cltpXS52YWx1ZTtlLnZhbHVlPW59KSl9LHNvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zb3J0KHQpfSkpfSxwYXRoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLG49ZnVuY3Rpb24odCxlKXtpZih0PT09ZSlyZXR1cm4gdDt2YXIgbj10LmFuY2VzdG9ycygpLHI9ZS5hbmNlc3RvcnMoKSxpPW51bGw7dD1uLnBvcCgpLGU9ci5wb3AoKTtmb3IoO3Q9PT1lOylpPXQsdD1uLnBvcCgpLGU9ci5wb3AoKTtyZXR1cm4gaX0oZSx0KSxyPVtlXTtlIT09bjspZT1lLnBhcmVudCxyLnB1c2goZSk7Zm9yKHZhciBpPXIubGVuZ3RoO3QhPT1uOylyLnNwbGljZShpLDAsdCksdD10LnBhcmVudDtyZXR1cm4gcn0sYW5jZXN0b3JzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bdF07dD10LnBhcmVudDspZS5wdXNoKHQpO3JldHVybiBlfSxkZXNjZW5kYW50czpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pKSx0fSxsZWF2ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVufHx0LnB1c2goZSl9KSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24obil7biE9PXQmJmUucHVzaCh7c291cmNlOm4ucGFyZW50LHRhcmdldDpufSl9KSksZX0sY29weTpmdW5jdGlvbigpe3JldHVybiBsZCh0aGlzKS5lYWNoQmVmb3JlKGZkKX19O3ZhciB5ZD1BcnJheS5wcm90b3R5cGUuc2xpY2U7dmFyIGdkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dC5sZW5ndGg7cjspbj1NYXRoLnJhbmRvbSgpKnItLXwwLGU9dFtyXSx0W3JdPXRbbl0sdFtuXT1lO3JldHVybiB0fSh5ZC5jYWxsKHQpKSkubGVuZ3RoLGE9W107cjxpOyllPXRbcl0sbiYmYmQobixlKT8rK3I6KG49X2QoYT1tZChhLGUpKSxyPTApO3JldHVybiBufTtmdW5jdGlvbiBtZCh0LGUpe3ZhciBuLHI7aWYoeGQoZSx0KSlyZXR1cm5bZV07Zm9yKG49MDtuPHQubGVuZ3RoOysrbilpZih2ZChlLHRbbl0pJiZ4ZChrZCh0W25dLGUpLHQpKXJldHVyblt0W25dLGVdO2ZvcihuPTA7bjx0Lmxlbmd0aC0xOysrbilmb3Iocj1uKzE7cjx0Lmxlbmd0aDsrK3IpaWYodmQoa2QodFtuXSx0W3JdKSxlKSYmdmQoa2QodFtuXSxlKSx0W3JdKSYmdmQoa2QodFtyXSxlKSx0W25dKSYmeGQod2QodFtuXSx0W3JdLGUpLHQpKXJldHVyblt0W25dLHRbcl0sZV07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHZkKHQsZSl7dmFyIG49dC5yLWUucixyPWUueC10LngsaT1lLnktdC55O3JldHVybiBuPDB8fG4qbjxyKnIraSppfWZ1bmN0aW9uIGJkKHQsZSl7dmFyIG49dC5yLWUucisxZS02LHI9ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIG4+MCYmbipuPnIqcitpKml9ZnVuY3Rpb24geGQodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoOysrbilpZighYmQodCxlW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBfZCh0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm57eDooZT10WzBdKS54LHk6ZS55LHI6ZS5yfTtjYXNlIDI6cmV0dXJuIGtkKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiB3ZCh0WzBdLHRbMV0sdFsyXSl9dmFyIGV9ZnVuY3Rpb24ga2QodCxlKXt2YXIgbj10Lngscj10LnksaT10LnIsYT1lLngsbz1lLnkscz1lLnIsYz1hLW4sdT1vLXIsbD1zLWksaD1NYXRoLnNxcnQoYypjK3UqdSk7cmV0dXJue3g6KG4rYStjL2gqbCkvMix5OihyK28rdS9oKmwpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIHdkKHQsZSxuKXt2YXIgcj10LngsaT10LnksYT10LnIsbz1lLngscz1lLnksYz1lLnIsdT1uLngsbD1uLnksaD1uLnIsZj1yLW8sZD1yLXUscD1pLXMseT1pLWwsZz1jLWEsbT1oLWEsdj1yKnIraSppLWEqYSxiPXYtbypvLXMqcytjKmMseD12LXUqdS1sKmwraCpoLF89ZCpwLWYqeSxrPShwKngteSpiKS8oMipfKS1yLHc9KHkqZy1wKm0pL18sVD0oZCpiLWYqeCkvKDIqXyktaSxFPShmKm0tZCpnKS9fLEM9dyp3K0UqRS0xLFM9MiooYStrKncrVCpFKSxBPWsqaytUKlQtYSphLE09LShDPyhTK01hdGguc3FydChTKlMtNCpDKkEpKS8oMipDKTpBL1MpO3JldHVybnt4OnIrayt3Kk0seTppK1QrRSpNLHI6TX19ZnVuY3Rpb24gVGQodCxlLG4pe3ZhciByLGksYSxvLHM9dC54LWUueCxjPXQueS1lLnksdT1zKnMrYypjO3U/KGk9ZS5yK24ucixpKj1pLG89dC5yK24ucixpPihvKj1vKT8ocj0odStvLWkpLygyKnUpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsby91LXIqcikpLG4ueD10LngtcipzLWEqYyxuLnk9dC55LXIqYythKnMpOihyPSh1K2ktbykvKDIqdSksYT1NYXRoLnNxcnQoTWF0aC5tYXgoMCxpL3UtcipyKSksbi54PWUueCtyKnMtYSpjLG4ueT1lLnkrcipjK2EqcykpOihuLng9ZS54K24ucixuLnk9ZS55KX1mdW5jdGlvbiBFZCh0LGUpe3ZhciBuPXQucitlLnItMWUtNixyPWUueC10LngsaT1lLnktdC55O3JldHVybiBuPjAmJm4qbj5yKnIraSppfWZ1bmN0aW9uIENkKHQpe3ZhciBlPXQuXyxuPXQubmV4dC5fLHI9ZS5yK24ucixpPShlLngqbi5yK24ueCplLnIpL3IsYT0oZS55Km4ucituLnkqZS5yKS9yO3JldHVybiBpKmkrYSphfWZ1bmN0aW9uIFNkKHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsLHRoaXMucHJldmlvdXM9bnVsbH1mdW5jdGlvbiBBZCh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg7aWYoKGU9dFswXSkueD0wLGUueT0wLCEoaT4xKSlyZXR1cm4gZS5yO2lmKG49dFsxXSxlLng9LW4ucixuLng9ZS5yLG4ueT0wLCEoaT4yKSlyZXR1cm4gZS5yK24ucjtUZChuLGUscj10WzJdKSxlPW5ldyBTZChlKSxuPW5ldyBTZChuKSxyPW5ldyBTZChyKSxlLm5leHQ9ci5wcmV2aW91cz1uLG4ubmV4dD1lLnByZXZpb3VzPXIsci5uZXh0PW4ucHJldmlvdXM9ZTt0OmZvcihzPTM7czxpOysrcyl7VGQoZS5fLG4uXyxyPXRbc10pLHI9bmV3IFNkKHIpLGM9bi5uZXh0LHU9ZS5wcmV2aW91cyxsPW4uXy5yLGg9ZS5fLnI7ZG97aWYobDw9aCl7aWYoRWQoYy5fLHIuXykpe249YyxlLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9bCs9Yy5fLnIsYz1jLm5leHR9ZWxzZXtpZihFZCh1Ll8sci5fKSl7KGU9dSkubmV4dD1uLG4ucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH1oKz11Ll8ucix1PXUucHJldmlvdXN9fXdoaWxlKGMhPT11Lm5leHQpO2ZvcihyLnByZXZpb3VzPWUsci5uZXh0PW4sZS5uZXh0PW4ucHJldmlvdXM9bj1yLGE9Q2QoZSk7KHI9ci5uZXh0KSE9PW47KShvPUNkKHIpKTxhJiYoZT1yLGE9byk7bj1lLm5leHR9Zm9yKGU9W24uX10scj1uOyhyPXIubmV4dCkhPT1uOyllLnB1c2goci5fKTtmb3Iocj1nZChlKSxzPTA7czxpOysrcykoZT10W3NdKS54LT1yLngsZS55LT1yLnk7cmV0dXJuIHIucn12YXIgTWQ9ZnVuY3Rpb24odCl7cmV0dXJuIEFkKHQpLHR9O2Z1bmN0aW9uIE9kKHQpe3JldHVybiBudWxsPT10P251bGw6TmQodCl9ZnVuY3Rpb24gTmQodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0fWZ1bmN0aW9uIEJkKCl7cmV0dXJuIDB9dmFyIERkPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gTGQodCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX12YXIgSWQ9ZnVuY3Rpb24oKXt2YXIgdD1udWxsLGU9MSxuPTEscj1CZDtmdW5jdGlvbiBpKGkpe3JldHVybiBpLng9ZS8yLGkueT1uLzIsdD9pLmVhY2hCZWZvcmUoUmQodCkpLmVhY2hBZnRlcihGZChyLC41KSkuZWFjaEJlZm9yZShQZCgxKSk6aS5lYWNoQmVmb3JlKFJkKExkKSkuZWFjaEFmdGVyKEZkKEJkLDEpKS5lYWNoQWZ0ZXIoRmQocixpLnIvTWF0aC5taW4oZSxuKSkpLmVhY2hCZWZvcmUoUGQoTWF0aC5taW4oZSxuKS8oMippLnIpKSksaX1yZXR1cm4gaS5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9T2QoZSksaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0saSk6W2Usbl19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRkKCt0KSxpKTpyfSxpfTtmdW5jdGlvbiBSZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIEZkKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKHI9bi5jaGlsZHJlbil7dmFyIHIsaSxhLG89ci5sZW5ndGgscz10KG4pKmV8fDA7aWYocylmb3IoaT0wO2k8bzsrK2kpcltpXS5yKz1zO2lmKGE9QWQocikscylmb3IoaT0wO2k8bzsrK2kpcltpXS5yLT1zO24ucj1hK3N9fX1mdW5jdGlvbiBQZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5wYXJlbnQ7ZS5yKj10LG4mJihlLng9bi54K3QqZS54LGUueT1uLnkrdCplLnkpfX12YXIgamQ9ZnVuY3Rpb24odCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfSxZZD1mdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgYSxvPXQuY2hpbGRyZW4scz0tMSxjPW8ubGVuZ3RoLHU9dC52YWx1ZSYmKHItZSkvdC52YWx1ZTsrK3M8YzspKGE9b1tzXSkueTA9bixhLnkxPWksYS54MD1lLGEueDE9ZSs9YS52YWx1ZSp1fSx6ZD1mdW5jdGlvbigpe3ZhciB0PTEsZT0xLG49MCxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIGE9aS5oZWlnaHQrMTtyZXR1cm4gaS54MD1pLnkwPW4saS54MT10LGkueTE9ZS9hLGkuZWFjaEJlZm9yZShmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyLmNoaWxkcmVuJiZZZChyLHIueDAsdCooci5kZXB0aCsxKS9lLHIueDEsdCooci5kZXB0aCsyKS9lKTt2YXIgaT1yLngwLGE9ci55MCxvPXIueDEtbixzPXIueTEtbjtvPGkmJihpPW89KGkrbykvMiksczxhJiYoYT1zPShhK3MpLzIpLHIueDA9aSxyLnkwPWEsci54MT1vLHIueTE9c319KGUsYSkpLHImJmkuZWFjaEJlZm9yZShqZCksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXQsaSk6cn0saS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuWzBdLGU9K25bMV0saSk6W3QsZV19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxpKTpufSxpfSxVZD17ZGVwdGg6LTF9LCRkPXt9O2Z1bmN0aW9uIHFkKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIFdkKHQpe3JldHVybiB0LnBhcmVudElkfXZhciBIZD1mdW5jdGlvbigpe3ZhciB0PXFkLGU9V2Q7ZnVuY3Rpb24gbihuKXt2YXIgcixpLGEsbyxzLGMsdSxsPW4ubGVuZ3RoLGg9bmV3IEFycmF5KGwpLGY9e307Zm9yKGk9MDtpPGw7KytpKXI9bltpXSxzPWhbaV09bmV3IHBkKHIpLG51bGwhPShjPXQocixpLG4pKSYmKGMrPSIiKSYmKGZbdT0iJCIrKHMuaWQ9YyldPXUgaW4gZj8kZDpzKTtmb3IoaT0wO2k8bDsrK2kpaWYocz1oW2ldLG51bGwhPShjPWUobltpXSxpLG4pKSYmKGMrPSIiKSl7aWYoIShvPWZbIiQiK2NdKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrYyk7aWYobz09PSRkKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2MpO28uY2hpbGRyZW4/by5jaGlsZHJlbi5wdXNoKHMpOm8uY2hpbGRyZW49W3NdLHMucGFyZW50PW99ZWxzZXtpZihhKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTthPXN9aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoYS5wYXJlbnQ9VWQsYS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1sfSkpLmVhY2hCZWZvcmUoZGQpLGEucGFyZW50PW51bGwsbD4wKXRocm93IG5ldyBFcnJvcigiY3ljbGUiKTtyZXR1cm4gYX1yZXR1cm4gbi5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1OZChlKSxuKTp0fSxuLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPU5kKHQpLG4pOmV9LG59O2Z1bmN0aW9uIFZkKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIEdkKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVswXTp0LnR9ZnVuY3Rpb24gWGQodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lW2UubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiBaZCh0LGUsbil7dmFyIHI9bi8oZS5pLXQuaSk7ZS5jLT1yLGUucys9bix0LmMrPXIsZS56Kz1uLGUubSs9bn1mdW5jdGlvbiBLZCh0LGUsbil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6bn1mdW5jdGlvbiBRZCh0LGUpe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1lfVFkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHBkLnByb3RvdHlwZSk7dmFyIEpkPWZ1bmN0aW9uKCl7dmFyIHQ9VmQsZT0xLG49MSxyPW51bGw7ZnVuY3Rpb24gaShpKXt2YXIgYz1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGksYSxvPW5ldyBRZCh0LDApLHM9W29dO2U9cy5wb3AoKTspaWYocj1lLl8uY2hpbGRyZW4pZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KGE9ci5sZW5ndGgpLGk9YS0xO2k+PTA7LS1pKXMucHVzaChuPWUuY2hpbGRyZW5baV09bmV3IFFkKHJbaV0saSkpLG4ucGFyZW50PWU7cmV0dXJuKG8ucGFyZW50PW5ldyBRZChudWxsLDApKS5jaGlsZHJlbj1bb10sb30oaSk7aWYoYy5lYWNoQWZ0ZXIoYSksYy5wYXJlbnQubT0tYy56LGMuZWFjaEJlZm9yZShvKSxyKWkuZWFjaEJlZm9yZShzKTtlbHNle3ZhciB1PWksbD1pLGg9aTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueDx1LngmJih1PXQpLHQueD5sLngmJihsPXQpLHQuZGVwdGg+aC5kZXB0aCYmKGg9dCl9KSk7dmFyIGY9dT09PWw/MTp0KHUsbCkvMixkPWYtdS54LHA9ZS8obC54K2YrZCkseT1uLyhoLmRlcHRofHwxKTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueD0odC54K2QpKnAsdC55PXQuZGVwdGgqeX0pKX1yZXR1cm4gaX1mdW5jdGlvbiBhKGUpe3ZhciBuPWUuY2hpbGRyZW4scj1lLnBhcmVudC5jaGlsZHJlbixpPWUuaT9yW2UuaS0xXTpudWxsO2lmKG4peyFmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0wLHI9MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDstLWE+PTA7KShlPWlbYV0pLnorPW4sZS5tKz1uLG4rPWUucysocis9ZS5jKX0oZSk7dmFyIGE9KG5bMF0ueituW24ubGVuZ3RoLTFdLnopLzI7aT8oZS56PWkueit0KGUuXyxpLl8pLGUubT1lLnotYSk6ZS56PWF9ZWxzZSBpJiYoZS56PWkueit0KGUuXyxpLl8pKTtlLnBhcmVudC5BPWZ1bmN0aW9uKGUsbixyKXtpZihuKXtmb3IodmFyIGksYT1lLG89ZSxzPW4sYz1hLnBhcmVudC5jaGlsZHJlblswXSx1PWEubSxsPW8ubSxoPXMubSxmPWMubTtzPVhkKHMpLGE9R2QoYSkscyYmYTspYz1HZChjKSwobz1YZChvKSkuYT1lLChpPXMueitoLWEuei11K3Qocy5fLGEuXykpPjAmJihaZChLZChzLGUsciksZSxpKSx1Kz1pLGwrPWkpLGgrPXMubSx1Kz1hLm0sZis9Yy5tLGwrPW8ubTtzJiYhWGQobykmJihvLnQ9cyxvLm0rPWgtbCksYSYmIUdkKGMpJiYoYy50PWEsYy5tKz11LWYscj1lKX1yZXR1cm4gcn0oZSxpLGUucGFyZW50LkF8fHJbMF0pfWZ1bmN0aW9uIG8odCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHModCl7dC54Kj1lLHQueT10LmRlcHRoKm59cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMSxlPSt0WzBdLG49K3RbMV0saSk6cj9udWxsOltlLG5dfSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEwLGU9K3RbMF0sbj0rdFsxXSxpKTpyP1tlLG5dOm51bGx9LGl9LHRwPWZ1bmN0aW9uKHQsZSxuLHIsaSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGM9by5sZW5ndGgsdT10LnZhbHVlJiYoaS1uKS90LnZhbHVlOysrczxjOykoYT1vW3NdKS54MD1lLGEueDE9cixhLnkwPW4sYS55MT1uKz1hLnZhbHVlKnV9LGVwPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBucCh0LGUsbixyLGksYSl7Zm9yKHZhciBvLHMsYyx1LGwsaCxmLGQscCx5LGcsbT1bXSx2PWUuY2hpbGRyZW4sYj0wLHg9MCxfPXYubGVuZ3RoLGs9ZS52YWx1ZTtiPF87KXtjPWktbix1PWEtcjtkb3tsPXZbeCsrXS52YWx1ZX13aGlsZSghbCYmeDxfKTtmb3IoaD1mPWwsZz1sKmwqKHk9TWF0aC5tYXgodS9jLGMvdSkvKGsqdCkpLHA9TWF0aC5tYXgoZi9nLGcvaCk7eDxfOysreCl7aWYobCs9cz12W3hdLnZhbHVlLHM8aCYmKGg9cykscz5mJiYoZj1zKSxnPWwqbCp5LChkPU1hdGgubWF4KGYvZyxnL2gpKT5wKXtsLT1zO2JyZWFrfXA9ZH1tLnB1c2gobz17dmFsdWU6bCxkaWNlOmM8dSxjaGlsZHJlbjp2LnNsaWNlKGIseCl9KSxvLmRpY2U/WWQobyxuLHIsaSxrP3IrPXUqbC9rOmEpOnRwKG8sbixyLGs/bis9YypsL2s6aSxhKSxrLT1sLGI9eH1yZXR1cm4gbX12YXIgcnA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbixyLGksYSl7bnAoZSx0LG4scixpLGEpfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KGVwKSxpcD1mdW5jdGlvbigpe3ZhciB0PXJwLGU9ITEsbj0xLHI9MSxpPVswXSxhPUJkLG89QmQscz1CZCxjPUJkLHU9QmQ7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC54MD10LnkwPTAsdC54MT1uLHQueTE9cix0LmVhY2hCZWZvcmUoaCksaT1bMF0sZSYmdC5lYWNoQmVmb3JlKGpkKSx0fWZ1bmN0aW9uIGgoZSl7dmFyIG49aVtlLmRlcHRoXSxyPWUueDArbixsPWUueTArbixoPWUueDEtbixmPWUueTEtbjtoPHImJihyPWg9KHIraCkvMiksZjxsJiYobD1mPShsK2YpLzIpLGUueDA9cixlLnkwPWwsZS54MT1oLGUueTE9ZixlLmNoaWxkcmVuJiYobj1pW2UuZGVwdGgrMV09YShlKS8yLHIrPXUoZSktbixsKz1vKGUpLW4sKGgtPXMoZSktbik8ciYmKHI9aD0ocitoKS8yKSwoZi09YyhlKS1uKTxsJiYobD1mPShsK2YpLzIpLHQoZSxyLGwsaCxmKSl9cmV0dXJuIGwucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LGwpOmV9LGwuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdFswXSxyPSt0WzFdLGwpOltuLHJdfSxsLnRpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9TmQoZSksbCk6dH0sbC5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2wucGFkZGluZ0lubmVyKHQpLnBhZGRpbmdPdXRlcih0KTpsLnBhZGRpbmdJbm5lcigpfSxsLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRkKCt0KSxsKTphfSxsLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9sLnBhZGRpbmdUb3AodCkucGFkZGluZ1JpZ2h0KHQpLnBhZGRpbmdCb3R0b20odCkucGFkZGluZ0xlZnQodCk6bC5wYWRkaW5nVG9wKCl9LGwucGFkZGluZ1RvcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRkKCt0KSxsKTpvfSxsLnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRkKCt0KSxsKTpzfSxsLnBhZGRpbmdCb3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEZCgrdCksbCk6Y30sbC5wYWRkaW5nTGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRkKCt0KSxsKTp1fSxsfSxhcD1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBhLG8scz10LmNoaWxkcmVuLGM9cy5sZW5ndGgsdT1uZXcgQXJyYXkoYysxKTtmb3IodVswXT1vPWE9MDthPGM7KythKXVbYSsxXT1vKz1zW2FdLnZhbHVlOyFmdW5jdGlvbiB0KGUsbixyLGksYSxvLGMpe2lmKGU+PW4tMSl7dmFyIGw9c1tlXTtyZXR1cm4gbC54MD1pLGwueTA9YSxsLngxPW8sdm9pZChsLnkxPWMpfXZhciBoPXVbZV0sZj1yLzIraCxkPWUrMSxwPW4tMTtmb3IoO2Q8cDspe3ZhciB5PWQrcD4+PjE7dVt5XTxmP2Q9eSsxOnA9eX1mLXVbZC0xXTx1W2RdLWYmJmUrMTxkJiYtLWQ7dmFyIGc9dVtkXS1oLG09ci1nO2lmKG8taT5jLWEpe3ZhciB2PShpKm0rbypnKS9yO3QoZSxkLGcsaSxhLHYsYyksdChkLG4sbSx2LGEsbyxjKX1lbHNle3ZhciBiPShhKm0rYypnKS9yO3QoZSxkLGcsaSxhLG8sYiksdChkLG4sbSxpLGIsbyxjKX19KDAsYyx0LnZhbHVlLGUsbixyLGkpfSxvcD1mdW5jdGlvbih0LGUsbixyLGkpeygxJnQuZGVwdGg/dHA6WWQpKHQsZSxuLHIsaSl9LHNwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4scixpLGEpe2lmKChvPXQuX3NxdWFyaWZ5KSYmby5yYXRpbz09PWUpZm9yKHZhciBvLHMsYyx1LGwsaD0tMSxmPW8ubGVuZ3RoLGQ9dC52YWx1ZTsrK2g8Zjspe2ZvcihjPShzPW9baF0pLmNoaWxkcmVuLHU9cy52YWx1ZT0wLGw9Yy5sZW5ndGg7dTxsOysrdSlzLnZhbHVlKz1jW3VdLnZhbHVlO3MuZGljZT9ZZChzLG4scixpLHIrPShhLXIpKnMudmFsdWUvZCk6dHAocyxuLHIsbis9KGktbikqcy52YWx1ZS9kLGEpLGQtPXMudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1vPW5wKGUsdCxuLHIsaSxhKSxvLnJhdGlvPWV9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0oZXApLGNwPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fSx1cD1mdW5jdGlvbih0LGUpe3ZhciBuPWxuKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fSxscD1mdW5jdGlvbih0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQodCooMS1uKStlKm4pfX0saHA9TWF0aC5TUVJUMjtmdW5jdGlvbiBmcCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn12YXIgZHA9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dFswXSxhPXRbMV0sbz10WzJdLHM9ZVswXSxjPWVbMV0sdT1lWzJdLGw9cy1pLGg9Yy1hLGY9bCpsK2gqaDtpZihmPDFlLTEyKXI9TWF0aC5sb2codS9vKS9ocCxuPWZ1bmN0aW9uKHQpe3JldHVybltpK3QqbCxhK3QqaCxvKk1hdGguZXhwKGhwKnQqcildfTtlbHNle3ZhciBkPU1hdGguc3FydChmKSxwPSh1KnUtbypvKzQqZikvKDIqbyoyKmQpLHk9KHUqdS1vKm8tNCpmKS8oMip1KjIqZCksZz1NYXRoLmxvZyhNYXRoLnNxcnQocCpwKzEpLXApLG09TWF0aC5sb2coTWF0aC5zcXJ0KHkqeSsxKS15KTtyPShtLWcpL2hwLG49ZnVuY3Rpb24odCl7dmFyIGUsbj10KnIscz1mcChnKSxjPW8vKDIqZCkqKHMqKGU9aHAqbitnLCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KGcpKTtyZXR1cm5baStjKmwsYStjKmgsbypzL2ZwKGhwKm4rZyldfX1yZXR1cm4gbi5kdXJhdGlvbj0xZTMqcixufTtmdW5jdGlvbiBwcCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPWVuKGUpKS5oLChuPWVuKG4pKS5oKSxpPWZuKGUucyxuLnMpLGE9Zm4oZS5sLG4ubCksbz1mbihlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUucz1pKHQpLGUubD1hKHQpLGUub3BhY2l0eT1vKHQpLGUrIiJ9fX12YXIgeXA9cHAobG4pLGdwPXBwKGZuKTtmdW5jdGlvbiBtcCh0LGUpe3ZhciBuPWZuKCh0PXlhKHQpKS5sLChlPXlhKGUpKS5sKSxyPWZuKHQuYSxlLmEpLGk9Zm4odC5iLGUuYiksYT1mbih0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1yKGUpLHQuYj1pKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fWZ1bmN0aW9uIHZwKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9d2EoZSkpLmgsKG49d2EobikpLmgpLGk9Zm4oZS5jLG4uYyksYT1mbihlLmwsbi5sKSxvPWZuKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5jPWkodCksZS5sPWEodCksZS5vcGFjaXR5PW8odCksZSsiIn19fXZhciBicD12cChsbikseHA9dnAoZm4pO2Z1bmN0aW9uIF9wKHQpe3JldHVybiBmdW5jdGlvbiBlKG4pe2Z1bmN0aW9uIHIoZSxyKXt2YXIgaT10KChlPU5hKGUpKS5oLChyPU5hKHIpKS5oKSxhPWZuKGUucyxyLnMpLG89Zm4oZS5sLHIubCkscz1mbihlLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1pKHQpLGUucz1hKHQpLGUubD1vKE1hdGgucG93KHQsbikpLGUub3BhY2l0eT1zKHQpLGUrIiJ9fXJldHVybiBuPStuLHIuZ2FtbWE9ZSxyfSgxKX12YXIga3A9X3AobG4pLHdwPV9wKGZuKTtmdW5jdGlvbiBUcCh0LGUpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGgtMSxpPWVbMF0sYT1uZXcgQXJyYXkocjwwPzA6cik7bjxyOylhW25dPXQoaSxpPWVbKytuXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci0xLE1hdGguZmxvb3IodCo9cikpKTtyZXR1cm4gYVtlXSh0LWUpfX12YXIgRXA9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKW5bcl09dChyLyhlLTEpKTtyZXR1cm4gbn0sQ3A9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49LTEscj10Lmxlbmd0aCxpPXRbci0xXSxhPTA7KytuPHI7KWU9aSxpPXRbbl0sYSs9ZVsxXSppWzBdLWVbMF0qaVsxXTtyZXR1cm4gYS8yfSxTcD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPS0xLGk9dC5sZW5ndGgsYT0wLG89MCxzPXRbaS0xXSxjPTA7KytyPGk7KWU9cyxzPXRbcl0sYys9bj1lWzBdKnNbMV0tc1swXSplWzFdLGErPShlWzBdK3NbMF0pKm4sbys9KGVbMV0rc1sxXSkqbjtyZXR1cm5bYS8oYyo9Myksby9jXX07ZnVuY3Rpb24gQXAodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gTXAodCl7Zm9yKHZhciBlLG4scixpPXQubGVuZ3RoLGE9WzAsMV0sbz0yLHM9MjtzPGk7KytzKXtmb3IoO28+MSYmKGU9dFthW28tMl1dLG49dFthW28tMV1dLHI9dFtzXSwoblswXS1lWzBdKSooclsxXS1lWzFdKS0oblsxXS1lWzFdKSooclswXS1lWzBdKTw9MCk7KS0tbzthW28rK109c31yZXR1cm4gYS5zbGljZSgwLG8pfXZhciBPcD1mdW5jdGlvbih0KXtpZigobj10Lmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgZSxuLHI9bmV3IEFycmF5KG4pLGk9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuOysrZSlyW2VdPVsrdFtlXVswXSwrdFtlXVsxXSxlXTtmb3Ioci5zb3J0KEFwKSxlPTA7ZTxuOysrZSlpW2VdPVtyW2VdWzBdLC1yW2VdWzFdXTt2YXIgYT1NcChyKSxvPU1wKGkpLHM9b1swXT09PWFbMF0sYz1vW28ubGVuZ3RoLTFdPT09YVthLmxlbmd0aC0xXSx1PVtdO2ZvcihlPWEubGVuZ3RoLTE7ZT49MDstLWUpdS5wdXNoKHRbclthW2VdXVsyXV0pO2ZvcihlPStzO2U8by5sZW5ndGgtYzsrK2UpdS5wdXNoKHRbcltvW2VdXVsyXV0pO3JldHVybiB1fSxOcD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbixyLGk9dC5sZW5ndGgsYT10W2ktMV0sbz1lWzBdLHM9ZVsxXSxjPWFbMF0sdT1hWzFdLGw9ITEsaD0wO2g8aTsrK2gpbj0oYT10W2hdKVswXSwocj1hWzFdKT5zIT11PnMmJm88KGMtbikqKHMtcikvKHUtcikrbiYmKGw9IWwpLGM9bix1PXI7cmV0dXJuIGx9LEJwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9LTEsaT10Lmxlbmd0aCxhPXRbaS0xXSxvPWFbMF0scz1hWzFdLGM9MDsrK3I8aTspZT1vLG49cyxlLT1vPShhPXRbcl0pWzBdLG4tPXM9YVsxXSxjKz1NYXRoLnNxcnQoZSplK24qbik7cmV0dXJuIGN9LERwPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9LExwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbiwxPT09YXJndW1lbnRzLmxlbmd0aD8obj10LHQ9MCk6bi09dCxmdW5jdGlvbigpe3JldHVybiBlKCkqbit0fX1yZXR1cm4gbi5zb3VyY2U9dCxufShEcCksSXA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7dmFyIHIsaTtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgYTtpZihudWxsIT1yKWE9cixyPW51bGw7ZWxzZSBkb3tyPTIqZSgpLTEsYT0yKmUoKS0xLGk9cipyK2EqYX13aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtuKmEqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX1yZXR1cm4gbi5zb3VyY2U9dCxufShEcCksUnA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9SXAuc291cmNlKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIG4uc291cmNlPXQsbn0oRHApLEZwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49MCxyPTA7cjx0OysrciluKz1lKCk7cmV0dXJuIG59fXJldHVybiBuLnNvdXJjZT10LG59KERwKSxQcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49RnAuc291cmNlKGUpKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKCkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0oRHApLGpwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1lKCkpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KERwKTtmdW5jdGlvbiBZcCh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc31mdW5jdGlvbiB6cCh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMuaW50ZXJwb2xhdG9yKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5pbnRlcnBvbGF0b3IoZSkuZG9tYWluKHQpfXJldHVybiB0aGlzfXZhciBVcD1BcnJheS5wcm90b3R5cGUsJHA9VXAubWFwLHFwPVVwLnNsaWNlLFdwPXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIEhwKCl7dmFyIHQ9UWkoKSxlPVtdLG49W10scj1XcDtmdW5jdGlvbiBpKGkpe3ZhciBhPWkrIiIsbz10LmdldChhKTtpZighbyl7aWYociE9PVdwKXJldHVybiByO3Quc2V0KGEsbz1lLnB1c2goaSkpfXJldHVybiBuWyhvLTEpJW4ubGVuZ3RoXX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdLHQ9UWkoKTtmb3IodmFyIHIsYSxvPS0xLHM9bi5sZW5ndGg7KytvPHM7KXQuaGFzKGE9KHI9bltvXSkrIiIpfHx0LnNldChhLGUucHVzaChyKSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cXAuY2FsbCh0KSxpKTpuLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBIcChlLG4pLnVua25vd24ocil9LFlwLmFwcGx5KGksYXJndW1lbnRzKSxpfWZ1bmN0aW9uIFZwKCl7dmFyIHQsZSxuPUhwKCkudW5rbm93bih2b2lkIDApLHI9bi5kb21haW4saT1uLnJhbmdlLGE9WzAsMV0sbz0hMSxzPTAsYz0wLHU9LjU7ZnVuY3Rpb24gbCgpe3ZhciBuPXIoKS5sZW5ndGgsbD1hWzFdPGFbMF0saD1hW2wtMF0sZj1hWzEtbF07dD0oZi1oKS9NYXRoLm1heCgxLG4tcysyKmMpLG8mJih0PU1hdGguZmxvb3IodCkpLGgrPShmLWgtdCoobi1zKSkqdSxlPXQqKDEtcyksbyYmKGg9TWF0aC5yb3VuZChoKSxlPU1hdGgucm91bmQoZSkpO3ZhciBkPXcobikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaCt0KmV9KSk7cmV0dXJuIGkobD9kLnJldmVyc2UoKTpkKX1yZXR1cm4gZGVsZXRlIG4udW5rbm93bixuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxsKCkpOnIoKX0sbi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1bK3RbMF0sK3RbMV1dLGwoKSk6YS5zbGljZSgpfSxuLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9Wyt0WzBdLCt0WzFdXSxvPSEwLGwoKX0sbi5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISF0LGwoKSk6b30sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWluKDEsYz0rdCksbCgpKTpzfSxuLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLHQpLGwoKSk6c30sbi5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsbCgpKTpjfSxuLmFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksbCgpKTp1fSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVnAocigpLGEpLnJvdW5kKG8pLnBhZGRpbmdJbm5lcihzKS5wYWRkaW5nT3V0ZXIoYykuYWxpZ24odSl9LFlwLmFwcGx5KGwoKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEdwKHQpe3ZhciBlPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEdwKGUoKSl9LHR9ZnVuY3Rpb24gWHAoKXtyZXR1cm4gR3AoVnAuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhZGRpbmdJbm5lcigxKSl9dmFyIFpwPWZ1bmN0aW9uKHQpe3JldHVybit0fSxLcD1bMCwxXTtmdW5jdGlvbiBRcCh0KXtyZXR1cm4gdH1mdW5jdGlvbiBKcCh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihuKXtyZXR1cm4obi10KS9lfToobj1pc05hTihlKT9OYU46LjUsZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBufWZ1bmN0aW9uIHR5KHQpe3ZhciBlLG49dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIG4+ciYmKGU9bixuPXIscj1lKSxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgobixNYXRoLm1pbihyLHQpKX19ZnVuY3Rpb24gZXkodCxlLG4pe3ZhciByPXRbMF0saT10WzFdLGE9ZVswXSxvPWVbMV07cmV0dXJuIGk8cj8ocj1KcChpLHIpLGE9bihvLGEpKToocj1KcChyLGkpLGE9bihhLG8pKSxmdW5jdGlvbih0KXtyZXR1cm4gYShyKHQpKX19ZnVuY3Rpb24gbnkodCxlLG4pe3ZhciByPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLGk9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLG89LTE7Zm9yKHRbcl08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrbzxyOylpW29dPUpwKHRbb10sdFtvKzFdKSxhW29dPW4oZVtvXSxlW28rMV0pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj11KHQsZSwxLHIpLTE7cmV0dXJuIGFbbl0oaVtuXShlKSl9fWZ1bmN0aW9uIHJ5KHQsZSl7cmV0dXJuIGUuZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpLnVua25vd24odC51bmtub3duKCkpfWZ1bmN0aW9uIGl5KCl7dmFyIHQsZSxuLHIsaSxhLG89S3Ascz1LcCxjPU1uLHU9UXA7ZnVuY3Rpb24gbCgpe3JldHVybiByPU1hdGgubWluKG8ubGVuZ3RoLHMubGVuZ3RoKT4yP255OmV5LGk9YT1udWxsLGh9ZnVuY3Rpb24gaChlKXtyZXR1cm4gaXNOYU4oZT0rZSk/bjooaXx8KGk9cihvLm1hcCh0KSxzLGMpKSkodCh1KGUpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiB1KGUoKGF8fChhPXIocyxvLm1hcCh0KSxrbikpKShuKSkpfSxoLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0kcC5jYWxsKHQsWnApLHU9PT1RcHx8KHU9dHkobykpLGwoKSk6by5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXFwLmNhbGwodCksbCgpKTpzLnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gcz1xcC5jYWxsKHQpLGM9bHAsbCgpfSxoLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQ/dHkobyk6UXAsaCk6dSE9PVFwfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbCgpKTpjfSxoLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxoKTpufSxmdW5jdGlvbihuLHIpe3JldHVybiB0PW4sZT1yLGwoKX19ZnVuY3Rpb24gYXkodCxlKXtyZXR1cm4gaXkoKSh0LGUpfXZhciBveT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhPU0odCxlLG4pO3N3aXRjaCgocj1WcyhudWxsPT1yPyIsZiI6cikpLnR5cGUpe2Nhc2UicyI6dmFyIG89TWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpO3JldHVybiBudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1zYyhhLG8pKXx8KHIucHJlY2lzaW9uPWkpLFFzKHIsbyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9Y2MoYSxNYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSkpKXx8KHIucHJlY2lzaW9uPWktKCJlIj09PXIudHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1vYyhhKSl8fChyLnByZWNpc2lvbj1pLTIqKCIlIj09PXIudHlwZSkpfXJldHVybiBLcyhyKX07ZnVuY3Rpb24gc3kodCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBTKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKCk7cmV0dXJuIG95KHJbMF0scltyLmxlbmd0aC0xXSxudWxsPT10PzEwOnQsbil9LHQubmljZT1mdW5jdGlvbihuKXtudWxsPT1uJiYobj0xMCk7dmFyIHIsaT1lKCksYT0wLG89aS5sZW5ndGgtMSxzPWlbYV0sYz1pW29dO3JldHVybiBjPHMmJihyPXMscz1jLGM9cixyPWEsYT1vLG89ciksKHI9QShzLGMsbikpPjA/cj1BKHM9TWF0aC5mbG9vcihzL3IpKnIsYz1NYXRoLmNlaWwoYy9yKSpyLG4pOnI8MCYmKHI9QShzPU1hdGguY2VpbChzKnIpL3IsYz1NYXRoLmZsb29yKGMqcikvcixuKSkscj4wPyhpW2FdPU1hdGguZmxvb3Iocy9yKSpyLGlbb109TWF0aC5jZWlsKGMvcikqcixlKGkpKTpyPDAmJihpW2FdPU1hdGguY2VpbChzKnIpL3IsaVtvXT1NYXRoLmZsb29yKGMqcikvcixlKGkpKSx0fSx0fWZ1bmN0aW9uIGN5KCl7dmFyIHQ9YXkoUXAsUXApO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcnkodCxjeSgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpLHN5KHQpfWZ1bmN0aW9uIHV5KHQpe3ZhciBlO2Z1bmN0aW9uIG4odCl7cmV0dXJuIGlzTmFOKHQ9K3QpP2U6dH1yZXR1cm4gbi5pbnZlcnQ9bixuLmRvbWFpbj1uLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSRwLmNhbGwoZSxacCksbik6dC5zbGljZSgpfSxuLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdXkodCkudW5rbm93bihlKX0sdD1hcmd1bWVudHMubGVuZ3RoPyRwLmNhbGwodCxacCk6WzAsMV0sc3kobil9dmFyIGx5PWZ1bmN0aW9uKHQsZSl7dmFyIG4scj0wLGk9KHQ9dC5zbGljZSgpKS5sZW5ndGgtMSxhPXRbcl0sbz10W2ldO3JldHVybiBvPGEmJihuPXIscj1pLGk9bixuPWEsYT1vLG89biksdFtyXT1lLmZsb29yKGEpLHRbaV09ZS5jZWlsKG8pLHR9O2Z1bmN0aW9uIGh5KHQpe3JldHVybiBNYXRoLmxvZyh0KX1mdW5jdGlvbiBmeSh0KXtyZXR1cm4gTWF0aC5leHAodCl9ZnVuY3Rpb24gZHkodCl7cmV0dXJuLU1hdGgubG9nKC10KX1mdW5jdGlvbiBweSh0KXtyZXR1cm4tTWF0aC5leHAoLXQpfWZ1bmN0aW9uIHl5KHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBneSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLXQoLWUpfX1mdW5jdGlvbiBteSh0KXt2YXIgZSxuLHI9dChoeSxmeSksaT1yLmRvbWFpbixhPTEwO2Z1bmN0aW9uIG8oKXtyZXR1cm4gZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PU1hdGguRT9NYXRoLmxvZzoxMD09PXQmJk1hdGgubG9nMTB8fDI9PT10JiZNYXRoLmxvZzJ8fCh0PU1hdGgubG9nKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS90fSl9KGEpLG49ZnVuY3Rpb24odCl7cmV0dXJuIDEwPT09dD95eTp0PT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyh0LGUpfX0oYSksaSgpWzBdPDA/KGU9Z3koZSksbj1neShuKSx0KGR5LHB5KSk6dChoeSxmeSkscn1yZXR1cm4gci5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LG8oKSk6YX0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkodCksbygpKTppKCl9LHIudGlja3M9ZnVuY3Rpb24odCl7dmFyIHIsbz1pKCkscz1vWzBdLGM9b1tvLmxlbmd0aC0xXTsocj1jPHMpJiYoZj1zLHM9YyxjPWYpO3ZhciB1LGwsaCxmPWUocyksZD1lKGMpLHA9bnVsbD09dD8xMDordCx5PVtdO2lmKCEoYSUxKSYmZC1mPHApe2lmKGY9TWF0aC5yb3VuZChmKS0xLGQ9TWF0aC5yb3VuZChkKSsxLHM+MCl7Zm9yKDtmPGQ7KytmKWZvcihsPTEsdT1uKGYpO2w8YTsrK2wpaWYoISgoaD11KmwpPHMpKXtpZihoPmMpYnJlYWs7eS5wdXNoKGgpfX1lbHNlIGZvcig7ZjxkOysrZilmb3IobD1hLTEsdT1uKGYpO2w+PTE7LS1sKWlmKCEoKGg9dSpsKTxzKSl7aWYoaD5jKWJyZWFrO3kucHVzaChoKX19ZWxzZSB5PVMoZixkLE1hdGgubWluKGQtZixwKSkubWFwKG4pO3JldHVybiByP3kucmV2ZXJzZSgpOnl9LHIudGlja0Zvcm1hdD1mdW5jdGlvbih0LGkpe2lmKG51bGw9PWkmJihpPTEwPT09YT8iLjBlIjoiLCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBpJiYoaT1LcyhpKSksdD09PTEvMClyZXR1cm4gaTtudWxsPT10JiYodD0xMCk7dmFyIG89TWF0aC5tYXgoMSxhKnQvci50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQvbihNYXRoLnJvdW5kKGUodCkpKTtyZXR1cm4gciphPGEtLjUmJihyKj1hKSxyPD1vP2kodCk6IiJ9fSxyLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gaShseShpKCkse2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBuKE1hdGguZmxvb3IoZSh0KSkpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBuKE1hdGguY2VpbChlKHQpKSl9fSkpfSxyfWZ1bmN0aW9uIHZ5KCl7dmFyIHQ9bXkoaXkoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiByeSh0LHZ5KCkpLmJhc2UodC5iYXNlKCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyksdH1mdW5jdGlvbiBieSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc2lnbihlKSpNYXRoLmxvZzFwKE1hdGguYWJzKGUvdCkpfX1mdW5jdGlvbiB4eSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc2lnbihlKSpNYXRoLmV4cG0xKE1hdGguYWJzKGUpKSp0fX1mdW5jdGlvbiBfeSh0KXt2YXIgZT0xLG49dChieShlKSx4eShlKSk7cmV0dXJuIG4uY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChieShlPStuKSx4eShlKSk6ZX0sc3kobil9ZnVuY3Rpb24ga3koKXt2YXIgdD1feShpeSgpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHJ5KHQsa3koKSkuY29uc3RhbnQodC5jb25zdGFudCgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIHd5KHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfX1mdW5jdGlvbiBUeSh0KXtyZXR1cm4gdDwwPy1NYXRoLnNxcnQoLXQpOk1hdGguc3FydCh0KX1mdW5jdGlvbiBFeSh0KXtyZXR1cm4gdDwwPy10KnQ6dCp0fWZ1bmN0aW9uIEN5KHQpe3ZhciBlPXQoUXAsUXApLG49MTtmdW5jdGlvbiByKCl7cmV0dXJuIDE9PT1uP3QoUXAsUXApOi41PT09bj90KFR5LEV5KTp0KHd5KG4pLHd5KDEvbikpfXJldHVybiBlLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHIoKSk6bn0sc3koZSl9ZnVuY3Rpb24gU3koKXt2YXIgdD1DeShpeSgpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHJ5KHQsU3koKSkuZXhwb25lbnQodC5leHBvbmVudCgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpLHR9ZnVuY3Rpb24gQXkoKXtyZXR1cm4gU3kuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX1mdW5jdGlvbiBNeSgpe3ZhciB0LGU9W10sbj1bXSxyPVtdO2Z1bmN0aW9uIGEoKXt2YXIgdD0wLGk9TWF0aC5tYXgoMSxuLmxlbmd0aCk7Zm9yKHI9bmV3IEFycmF5KGktMSk7Kyt0PGk7KXJbdC0xXT1CKGUsdC9pKTtyZXR1cm4gb31mdW5jdGlvbiBvKGUpe3JldHVybiBpc05hTihlPStlKT90Om5bdShyLGUpXX1yZXR1cm4gby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGk9bi5pbmRleE9mKHQpO3JldHVybiBpPDA/W05hTixOYU5dOltpPjA/cltpLTFdOmVbMF0saTxyLmxlbmd0aD9yW2ldOmVbZS5sZW5ndGgtMV1dfSxvLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBuLHI9MCxvPXQubGVuZ3RoO3I8bzsrK3IpbnVsbD09KG49dFtyXSl8fGlzTmFOKG49K24pfHxlLnB1c2gobik7cmV0dXJuIGUuc29ydChpKSxhKCl9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cXAuY2FsbCh0KSxhKCkpOm4uc2xpY2UoKX0sby51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6dH0sby5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTXkoKS5kb21haW4oZSkucmFuZ2UobikudW5rbm93bih0KX0sWXAuYXBwbHkobyxhcmd1bWVudHMpfWZ1bmN0aW9uIE95KCl7dmFyIHQsZT0wLG49MSxyPTEsaT1bLjVdLGE9WzAsMV07ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZTw9ZT9hW3UoaSxlLDAscildOnR9ZnVuY3Rpb24gcygpe3ZhciB0PS0xO2ZvcihpPW5ldyBBcnJheShyKTsrK3Q8cjspaVt0XT0oKHQrMSkqbi0odC1yKSplKS8ocisxKTtyZXR1cm4gb31yZXR1cm4gby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0sbj0rdFsxXSxzKCkpOltlLG5dfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShhPXFwLmNhbGwodCkpLmxlbmd0aC0xLHMoKSk6YS5zbGljZSgpfSxvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgbz1hLmluZGV4T2YodCk7cmV0dXJuIG88MD9bTmFOLE5hTl06bzwxP1tlLGlbMF1dOm8+PXI/W2lbci0xXSxuXTpbaVtvLTFdLGlbb11dfSxvLnVua25vd249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxvKTpvfSxvLnRocmVzaG9sZHM9ZnVuY3Rpb24oKXtyZXR1cm4gaS5zbGljZSgpfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gT3koKS5kb21haW4oW2Usbl0pLnJhbmdlKGEpLnVua25vd24odCl9LFlwLmFwcGx5KHN5KG8pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTnkoKXt2YXIgdCxlPVsuNV0sbj1bMCwxXSxyPTE7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaTw9aT9uW3UoZSxpLDAscildOnR9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXFwLmNhbGwodCkscj1NYXRoLm1pbihlLmxlbmd0aCxuLmxlbmd0aC0xKSxpKTplLnNsaWNlKCl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cXAuY2FsbCh0KSxyPU1hdGgubWluKGUubGVuZ3RoLG4ubGVuZ3RoLTEpLGkpOm4uc2xpY2UoKX0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIHI9bi5pbmRleE9mKHQpO3JldHVybltlW3ItMV0sZVtyXV19LGkudW5rbm93bj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkpOnR9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBOeSgpLmRvbWFpbihlKS5yYW5nZShuKS51bmtub3duKHQpfSxZcC5hcHBseShpLGFyZ3VtZW50cyl9dmFyIEJ5PW5ldyBEYXRlLER5PW5ldyBEYXRlO2Z1bmN0aW9uIEx5KHQsZSxuLHIpe2Z1bmN0aW9uIGkoZSl7cmV0dXJuIHQoZT0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9LGkuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LGkucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9aSh0KSxuPWkuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LGkub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LGkucmFuZ2U9ZnVuY3Rpb24obixyLGEpe3ZhciBvLHM9W107aWYobj1pLmNlaWwobiksYT1udWxsPT1hPzE6TWF0aC5mbG9vcihhKSwhKG48ciYmYT4wKSlyZXR1cm4gcztkb3tzLnB1c2gobz1uZXcgRGF0ZSgrbikpLGUobixhKSx0KG4pfXdoaWxlKG88biYmbjxyKTtyZXR1cm4gc30saS5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIEx5KChmdW5jdGlvbihlKXtpZihlPj1lKWZvcig7dChlKSwhbihlKTspZS5zZXRUaW1lKGUtMSl9KSwoZnVuY3Rpb24odCxyKXtpZih0Pj10KWlmKHI8MClmb3IoOysrcjw9MDspZm9yKDtlKHQsLTEpLCFuKHQpOyk7ZWxzZSBmb3IoOy0tcj49MDspZm9yKDtlKHQsMSksIW4odCk7KTt9KSl9LG4mJihpLmNvdW50PWZ1bmN0aW9uKGUscil7cmV0dXJuIEJ5LnNldFRpbWUoK2UpLER5LnNldFRpbWUoK3IpLHQoQnkpLHQoRHkpLE1hdGguZmxvb3IobihCeSxEeSkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/aS5maWx0ZXIocj9mdW5jdGlvbihlKXtyZXR1cm4gcihlKSV0PT0wfTpmdW5jdGlvbihlKXtyZXR1cm4gaS5jb3VudCgwLGUpJXQ9PTB9KTppOm51bGx9KSxpfXZhciBJeT1MeSgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7SXkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9MeSgoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07dmFyIFJ5PUl5LEZ5PUl5LnJhbmdlLFB5PUx5KChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSksank9UHksWXk9UHkucmFuZ2U7ZnVuY3Rpb24genkodCl7cmV0dXJuIEx5KChmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LTZlNCooZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzYwNDhlNX0pKX12YXIgVXk9enkoMCksJHk9enkoMSkscXk9enkoMiksV3k9enkoMyksSHk9enkoNCksVnk9enkoNSksR3k9enkoNiksWHk9VXkucmFuZ2UsWnk9JHkucmFuZ2UsS3k9cXkucmFuZ2UsUXk9V3kucmFuZ2UsSnk9SHkucmFuZ2UsdGc9VnkucmFuZ2UsZWc9R3kucmFuZ2Usbmc9THkoKGZ1bmN0aW9uKHQpe3Quc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LTZlNCooZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpLHJnPW5nLGlnPW5nLnJhbmdlLGFnPUx5KChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKS02ZTQqdC5nZXRNaW51dGVzKCkpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSksb2c9YWcsc2c9YWcucmFuZ2UsY2c9THkoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktMWUzKnQuZ2V0U2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCs2ZTQqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS82ZTR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSkpLHVnPWNnLGxnPWNnLnJhbmdlLGhnPUx5KChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCsxZTMqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8xZTN9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSkpLGZnPWhnLGRnPWhnLnJhbmdlLHBnPUx5KChmdW5jdGlvbigpe30pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KSk7cGcuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9MeSgoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSksKGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pKTpwZzpudWxsfTt2YXIgeWc9cGcsZ2c9cGcucmFuZ2U7ZnVuY3Rpb24gbWcodCl7cmV0dXJuIEx5KChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS82MDQ4ZTV9KSl9dmFyIHZnPW1nKDApLGJnPW1nKDEpLHhnPW1nKDIpLF9nPW1nKDMpLGtnPW1nKDQpLHdnPW1nKDUpLFRnPW1nKDYpLEVnPXZnLnJhbmdlLENnPWJnLnJhbmdlLFNnPXhnLnJhbmdlLEFnPV9nLnJhbmdlLE1nPWtnLnJhbmdlLE9nPXdnLnJhbmdlLE5nPVRnLnJhbmdlLEJnPUx5KChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvODY0ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSksRGc9QmcsTGc9QmcucmFuZ2UsSWc9THkoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO0lnLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/THkoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBSZz1JZyxGZz1JZy5yYW5nZTtmdW5jdGlvbiBQZyh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gamcodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gWWcodCxlLG4pe3JldHVybnt5OnQsbTplLGQ6bixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIHpnKHQpe3ZhciBlPXQuZGF0ZVRpbWUsbj10LmRhdGUscj10LnRpbWUsaT10LnBlcmlvZHMsYT10LmRheXMsbz10LnNob3J0RGF5cyxzPXQubW9udGhzLGM9dC5zaG9ydE1vbnRocyx1PUpnKGkpLGw9dG0oaSksaD1KZyhhKSxmPXRtKGEpLGQ9SmcobykscD10bShvKSx5PUpnKHMpLGc9dG0ocyksbT1KZyhjKSx2PXRtKGMpLGI9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDpfbSxlOl9tLGY6Q20sZzpGbSxHOmptLEg6a20sSTp3bSxqOlRtLEw6RW0sbTpTbSxNOkFtLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROmN2LHM6dXYsUzpNbSx1Ok9tLFU6Tm0sVjpEbSx3OkxtLFc6SW0seDpudWxsLFg6bnVsbCx5OlJtLFk6UG0sWjpZbSwiJSI6c3Z9LHg9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDp6bSxlOnptLGY6SG0sZzpydixHOmF2LEg6VW0sSTokbSxqOnFtLEw6V20sbTpWbSxNOkdtLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRVVENNb250aCgpLzMpfSxROmN2LHM6dXYsUzpYbSx1OlptLFU6S20sVjpKbSx3OnR2LFc6ZXYseDpudWxsLFg6bnVsbCx5Om52LFk6aXYsWjpvdiwiJSI6c3Z9LF89e2E6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC53PXBbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUsbil7dmFyIHI9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9ZltyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT12W3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXkuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPWdbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LG4scil7cmV0dXJuIFQodCxlLG4scil9LGQ6aG0sZTpobSxmOm1tLGc6c20sRzpvbSxIOmRtLEk6ZG0sajpmbSxMOmdtLG06bG0sTTpwbSxwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj11LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucD1sW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LHE6dW0sUTpibSxzOnhtLFM6eW0sdTpubSxVOnJtLFY6aW0sdzplbSxXOmFtLHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUKHQsbixlLHIpfSxYOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gVCh0LHIsZSxuKX0seTpzbSxZOm9tLFo6Y20sIiUiOnZtfTtmdW5jdGlvbiBrKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYSxvPVtdLHM9LTEsYz0wLHU9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczx1OykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGMscykpLG51bGwhPShpPVZnW3I9dC5jaGFyQXQoKytzKV0pP3I9dC5jaGFyQXQoKytzKTppPSJlIj09PXI/IiAiOiIwIiwoYT1lW3JdKSYmKHI9YShuLGkpKSxvLnB1c2gociksYz1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShjLHMpKSxvLmpvaW4oIiIpfX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYT1ZZygxOTAwLHZvaWQgMCwxKTtpZihUKGEsdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gYSlyZXR1cm4gbmV3IERhdGUoYS5RKTtpZigicyJpbiBhKXJldHVybiBuZXcgRGF0ZSgxZTMqYS5zKygiTCJpbiBhP2EuTDowKSk7aWYoZSYmISgiWiJpbiBhKSYmKGEuWj0wKSwicCJpbiBhJiYoYS5IPWEuSCUxMisxMiphLnApLHZvaWQgMD09PWEubSYmKGEubT0icSJpbiBhP2EucTowKSwiViJpbiBhKXtpZihhLlY8MXx8YS5WPjUzKXJldHVybiBudWxsOyJ3ImluIGF8fChhLnc9MSksIloiaW4gYT8oaT0ocj1qZyhZZyhhLnksMCwxKSkpLmdldFVUQ0RheSgpLHI9aT40fHwwPT09aT9iZy5jZWlsKHIpOmJnKHIpLHI9RGcub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRVVENGdWxsWWVhcigpLGEubT1yLmdldFVUQ01vbnRoKCksYS5kPXIuZ2V0VVRDRGF0ZSgpKyhhLncrNiklNyk6KGk9KHI9UGcoWWcoYS55LDAsMSkpKS5nZXREYXkoKSxyPWk+NHx8MD09PWk/JHkuY2VpbChyKTokeShyKSxyPXJnLm9mZnNldChyLDcqKGEuVi0xKSksYS55PXIuZ2V0RnVsbFllYXIoKSxhLm09ci5nZXRNb250aCgpLGEuZD1yLmdldERhdGUoKSsoYS53KzYpJTcpfWVsc2UoIlciaW4gYXx8IlUiaW4gYSkmJigidyJpbiBhfHwoYS53PSJ1ImluIGE/YS51JTc6IlciaW4gYT8xOjApLGk9IloiaW4gYT9qZyhZZyhhLnksMCwxKSkuZ2V0VVRDRGF5KCk6UGcoWWcoYS55LDAsMSkpLmdldERheSgpLGEubT0wLGEuZD0iVyJpbiBhPyhhLncrNiklNys3KmEuVy0oaSs1KSU3OmEudys3KmEuVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBhPyhhLkgrPWEuWi8xMDB8MCxhLk0rPWEuWiUxMDAsamcoYSkpOlBnKGEpfX1mdW5jdGlvbiBUKHQsZSxuLHIpe2Zvcih2YXIgaSxhLG89MCxzPWUubGVuZ3RoLGM9bi5sZW5ndGg7bzxzOyl7aWYocj49YylyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChvKyspKSl7aWYoaT1lLmNoYXJBdChvKyspLCEoYT1fW2kgaW4gVmc/ZS5jaGFyQXQobysrKTppXSl8fChyPWEodCxuLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9bi5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIGIueD1rKG4sYiksYi5YPWsocixiKSxiLmM9ayhlLGIpLHgueD1rKG4seCkseC5YPWsocix4KSx4LmM9ayhlLHgpLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9ayh0Kz0iIixiKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT13KHQrPSIiLCExKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9ayh0Kz0iIix4KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT13KHQrPSIiLCEwKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19dmFyIFVnLCRnLHFnLFdnLEhnLFZnPXsiLSI6IiIsXzoiICIsMDoiMCJ9LEdnPS9eXHMqXGQrLyxYZz0vXiUvLFpnPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBLZyh0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIHIrKGE8bj9uZXcgQXJyYXkobi1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBRZyh0KXtyZXR1cm4gdC5yZXBsYWNlKFpnLCJcXCQmIil9ZnVuY3Rpb24gSmcodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKFFnKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gdG0odCl7Zm9yKHZhciBlPXt9LG49LTEscj10Lmxlbmd0aDsrK248cjspZVt0W25dLnRvTG93ZXJDYXNlKCldPW47cmV0dXJuIGV9ZnVuY3Rpb24gZW0odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbm0odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcm0odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaW0odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYW0odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb20odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc20odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjbSh0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVtKHQsZSxuKXt2YXIgcj1HZy5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC5xPTMqclswXS0zLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxtKHQsZSxuKXt2YXIgcj1HZy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBobSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmbSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkbSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwbSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5bSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBnbSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBtbSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2bSh0LGUsbil7dmFyIHI9WGcuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBibSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHhtKHQsZSxuKXt2YXIgcj1HZy5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gX20odCxlKXtyZXR1cm4gS2codC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBrbSh0LGUpe3JldHVybiBLZyh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiB3bSh0LGUpe3JldHVybiBLZyh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gVG0odCxlKXtyZXR1cm4gS2coMStyZy5jb3VudChSeSh0KSx0KSxlLDMpfWZ1bmN0aW9uIEVtKHQsZSl7cmV0dXJuIEtnKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBDbSh0LGUpe3JldHVybiBFbSh0LGUpKyIwMDAifWZ1bmN0aW9uIFNtKHQsZSl7cmV0dXJuIEtnKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gQW0odCxlKXtyZXR1cm4gS2codC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBNbSh0LGUpe3JldHVybiBLZyh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIE9tKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBObSh0LGUpe3JldHVybiBLZyhVeS5jb3VudChSeSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gQm0odCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/SHkodCk6SHkuY2VpbCh0KX1mdW5jdGlvbiBEbSh0LGUpe3JldHVybiB0PUJtKHQpLEtnKEh5LmNvdW50KFJ5KHQpLHQpKyg0PT09UnkodCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gTG0odCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gSW0odCxlKXtyZXR1cm4gS2coJHkuY291bnQoUnkodCktMSx0KSxlLDIpfWZ1bmN0aW9uIFJtKHQsZSl7cmV0dXJuIEtnKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBGbSh0LGUpe3JldHVybiBLZygodD1CbSh0KSkuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBQbSh0LGUpe3JldHVybiBLZyh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gam0odCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiBLZygodD1uPj00fHwwPT09bj9IeSh0KTpIeS5jZWlsKHQpKS5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIFltKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrS2coZS82MHwwLCIwIiwyKStLZyhlJTYwLCIwIiwyKX1mdW5jdGlvbiB6bSh0LGUpe3JldHVybiBLZyh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIFVtKHQsZSl7cmV0dXJuIEtnKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uICRtKHQsZSl7cmV0dXJuIEtnKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBxbSh0LGUpe3JldHVybiBLZygxK0RnLmNvdW50KFJnKHQpLHQpLGUsMyl9ZnVuY3Rpb24gV20odCxlKXtyZXR1cm4gS2codC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIEhtKHQsZSl7cmV0dXJuIFdtKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gVm0odCxlKXtyZXR1cm4gS2codC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBHbSh0LGUpe3JldHVybiBLZyh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIFhtKHQsZSl7cmV0dXJuIEtnKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gWm0odCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIEttKHQsZSl7cmV0dXJuIEtnKHZnLmNvdW50KFJnKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBRbSh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiBlPj00fHwwPT09ZT9rZyh0KTprZy5jZWlsKHQpfWZ1bmN0aW9uIEptKHQsZSl7cmV0dXJuIHQ9UW0odCksS2coa2cuY291bnQoUmcodCksdCkrKDQ9PT1SZyh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiB0dih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBldih0LGUpe3JldHVybiBLZyhiZy5jb3VudChSZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gbnYodCxlKXtyZXR1cm4gS2codC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHJ2KHQsZSl7cmV0dXJuIEtnKCh0PVFtKHQpKS5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIGl2KHQsZSl7cmV0dXJuIEtnKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBhdih0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIEtnKCh0PW4+PTR8fDA9PT1uP2tnKHQpOmtnLmNlaWwodCkpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gb3YoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIHN2KCl7cmV0dXJuIiUifWZ1bmN0aW9uIGN2KHQpe3JldHVybit0fWZ1bmN0aW9uIHV2KHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24gbHYodCl7cmV0dXJuIFVnPXpnKHQpLCRnPVVnLmZvcm1hdCxxZz1VZy5wYXJzZSxXZz1VZy51dGNGb3JtYXQsSGc9VWcudXRjUGFyc2UsVWd9bHYoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtmdW5jdGlvbiBodih0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gZnYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gZHYodCxlLG4scixpLG8scyxjLHUpe3ZhciBsPWF5KFFwLFFwKSxoPWwuaW52ZXJ0LGY9bC5kb21haW4sZD11KCIuJUwiKSxwPXUoIjolUyIpLHk9dSgiJUk6JU0iKSxnPXUoIiVJICVwIiksbT11KCIlYSAlZCIpLHY9dSgiJWIgJWQiKSxiPXUoIiVCIikseD11KCIlWSIpLF89W1tzLDEsMWUzXSxbcyw1LDVlM10sW3MsMTUsMTVlM10sW3MsMzAsM2U0XSxbbywxLDZlNF0sW28sNSwzZTVdLFtvLDE1LDllNV0sW28sMzAsMThlNV0sW2ksMSwzNmU1XSxbaSwzLDEwOGU1XSxbaSw2LDIxNmU1XSxbaSwxMiw0MzJlNV0sW3IsMSw4NjRlNV0sW3IsMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsMzE1MzZlNl1dO2Z1bmN0aW9uIGsoYSl7cmV0dXJuKHMoYSk8YT9kOm8oYSk8YT9wOmkoYSk8YT95OnIoYSk8YT9nOmUoYSk8YT9uKGEpPGE/bTp2OnQoYSk8YT9iOngpKGEpfWZ1bmN0aW9uIHcoZSxuLHIsaSl7aWYobnVsbD09ZSYmKGU9MTApLCJudW1iZXIiPT10eXBlb2YgZSl7dmFyIG89TWF0aC5hYnMoci1uKS9lLHM9YSgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMl19KSkucmlnaHQoXyxvKTtzPT09Xy5sZW5ndGg/KGk9TShuLzMxNTM2ZTYsci8zMTUzNmU2LGUpLGU9dCk6cz8oaT0ocz1fW28vX1tzLTFdWzJdPF9bc11bMl0vbz9zLTE6c10pWzFdLGU9c1swXSk6KGk9TWF0aC5tYXgoTShuLHIsZSksMSksZT1jKX1yZXR1cm4gbnVsbD09aT9lOmUuZXZlcnkoaSl9cmV0dXJuIGwuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShoKHQpKX0sbC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZigkcC5jYWxsKHQsZnYpKTpmKCkubWFwKGh2KX0sbC50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZigpLGk9clswXSxhPXJbci5sZW5ndGgtMV0sbz1hPGk7cmV0dXJuIG8mJihuPWksaT1hLGE9biksbj0obj13KHQsaSxhLGUpKT9uLnJhbmdlKGksYSsxKTpbXSxvP24ucmV2ZXJzZSgpOm59LGwudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP2s6dShlKX0sbC5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZigpO3JldHVybih0PXcodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP2YobHkobix0KSk6bH0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHJ5KGwsZHYodCxlLG4scixpLG8scyxjLHUpKX0sbH12YXIgcHY9ZnVuY3Rpb24oKXtyZXR1cm4gWXAuYXBwbHkoZHYoUnksanksVXkscmcsb2csdWcsZmcseWcsJGcpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfSx5dj1MeSgoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpLGd2PXl2LG12PXl2LnJhbmdlLHZ2PUx5KChmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSksYnY9dnYseHY9dnYucmFuZ2UsX3Y9THkoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDU2Vjb25kcygwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzZlNCplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzZlNH0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSksa3Y9X3Ysd3Y9X3YucmFuZ2UsVHY9ZnVuY3Rpb24oKXtyZXR1cm4gWXAuYXBwbHkoZHYoUmcsZ3YsdmcsRGcsYnYsa3YsZmcseWcsV2cpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKSxhcmd1bWVudHMpfTtmdW5jdGlvbiBFdigpe3ZhciB0LGUsbixyLGksYT0wLG89MSxzPVFwLGM9ITE7ZnVuY3Rpb24gdShlKXtyZXR1cm4gaXNOYU4oZT0rZSk/aTpzKDA9PT1uPy41OihlPShyKGUpLXQpKm4sYz9NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpOmUpKX1yZXR1cm4gdS5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cihhPStpWzBdKSxlPXIobz0raVsxXSksbj10PT09ZT8wOjEvKGUtdCksdSk6W2Esb119LHUuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ISF0LHUpOmN9LHUuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsdSk6c30sdS51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsdSk6aX0sZnVuY3Rpb24oaSl7cmV0dXJuIHI9aSx0PWkoYSksZT1pKG8pLG49dD09PWU/MDoxLyhlLXQpLHV9fWZ1bmN0aW9uIEN2KHQsZSl7cmV0dXJuIGUuZG9tYWluKHQuZG9tYWluKCkpLmludGVycG9sYXRvcih0LmludGVycG9sYXRvcigpKS5jbGFtcCh0LmNsYW1wKCkpLnVua25vd24odC51bmtub3duKCkpfWZ1bmN0aW9uIFN2KCl7dmFyIHQ9c3koRXYoKShRcCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQ3YodCxTdigpKX0senAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIEF2KCl7dmFyIHQ9bXkoRXYoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBDdih0LEF2KCkpLmJhc2UodC5iYXNlKCkpfSx6cC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gTXYoKXt2YXIgdD1feShFdigpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEN2KHQsTXYoKSkuY29uc3RhbnQodC5jb25zdGFudCgpKX0senAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIE92KCl7dmFyIHQ9Q3koRXYoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBDdih0LE92KCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LHpwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBOdigpe3JldHVybiBPdi5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEJ2KCl7dmFyIHQ9W10sZT1RcDtmdW5jdGlvbiBuKG4pe2lmKCFpc05hTihuPStuKSlyZXR1cm4gZSgodSh0LG4pLTEpLyh0Lmxlbmd0aC0xKSl9cmV0dXJuIG4uZG9tYWluPWZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0LnNsaWNlKCk7dD1bXTtmb3IodmFyIHIsYT0wLG89ZS5sZW5ndGg7YTxvOysrYSludWxsPT0ocj1lW2FdKXx8aXNOYU4ocj0rcil8fHQucHVzaChyKTtyZXR1cm4gdC5zb3J0KGkpLG59LG4uaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJ2KGUpLmRvbWFpbih0KX0senAuYXBwbHkobixhcmd1bWVudHMpfWZ1bmN0aW9uIER2KCl7dmFyIHQsZSxuLHIsaSxhLG8scz0wLGM9LjUsdT0xLGw9UXAsaD0hMTtmdW5jdGlvbiBmKHQpe3JldHVybiBpc05hTih0PSt0KT9vOih0PS41KygodD0rYSh0KSktZSkqKHQ8ZT9yOmkpLGwoaD9NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpOnQpKX1yZXR1cm4gZi5kb21haW49ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9YShzPStvWzBdKSxlPWEoYz0rb1sxXSksbj1hKHU9K29bMl0pLHI9dD09PWU/MDouNS8oZS10KSxpPWU9PT1uPzA6LjUvKG4tZSksZik6W3MsYyx1XX0sZi5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0hIXQsZik6aH0sZi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxmKTpsfSxmLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxmKTpvfSxmdW5jdGlvbihvKXtyZXR1cm4gYT1vLHQ9byhzKSxlPW8oYyksbj1vKHUpLHI9dD09PWU/MDouNS8oZS10KSxpPWU9PT1uPzA6LjUvKG4tZSksZn19ZnVuY3Rpb24gTHYoKXt2YXIgdD1zeShEdigpKFFwKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBDdih0LEx2KCkpfSx6cC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gSXYoKXt2YXIgdD1teShEdigpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEN2KHQsSXYoKSkuYmFzZSh0LmJhc2UoKSl9LHpwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBSdigpe3ZhciB0PV95KER2KCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQ3YodCxSdigpKS5jb25zdGFudCh0LmNvbnN0YW50KCkpfSx6cC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gRnYoKXt2YXIgdD1DeShEdigpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEN2KHQsRnYoKSkuZXhwb25lbnQodC5leHBvbmVudCgpKX0senAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIFB2KCl7cmV0dXJuIEZ2LmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9dmFyIGp2PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC82fDAsbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTspbltyXT0iIyIrdC5zbGljZSg2KnIsNiorK3IpO3JldHVybiBufSxZdj1qdigiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIiksenY9anYoIjdmYzk3ZmJlYWVkNGZkYzA4NmZmZmY5OTM4NmNiMGYwMDI3ZmJmNWIxNzY2NjY2NiIpLFV2PWp2KCIxYjllNzdkOTVmMDI3NTcwYjNlNzI5OGE2NmE2MWVlNmFiMDJhNjc2MWQ2NjY2NjYiKSwkdj1qdigiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4IikscXY9anYoImZiYjRhZWIzY2RlM2NjZWJjNWRlY2JlNGZlZDlhNmZmZmZjY2U1ZDhiZGZkZGFlY2YyZjJmMiIpLFd2PWp2KCJiM2UyY2RmZGNkYWNjYmQ1ZThmNGNhZTRlNmY1YzlmZmYyYWVmMWUyY2NjY2NjY2MiKSxIdj1qdigiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5IiksVnY9anYoIjY2YzJhNWZjOGQ2MjhkYTBjYmU3OGFjM2E2ZDg1NGZmZDkyZmU1YzQ5NGIzYjNiMyIpLEd2PWp2KCI4ZGQzYzdmZmZmYjNiZWJhZGFmYjgwNzI4MGIxZDNmZGI0NjJiM2RlNjlmY2NkZTVkOWQ5ZDliYzgwYmRjY2ViYzVmZmVkNmYiKSxYdj1qdigiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIiksWnY9ZnVuY3Rpb24odCl7cmV0dXJuIHluKHRbdC5sZW5ndGgtMV0pfSxLdj1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAoanYpLFF2PVp2KEt2KSxKdj1uZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoanYpLHRiPVp2KEp2KSxlYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAoanYpLG5iPVp2KGViKSxyYj1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAoanYpLGliPVp2KHJiKSxhYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoanYpLG9iPVp2KGFiKSxzYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAoanYpLGNiPVp2KHNiKSx1Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAoanYpLGxiPVp2KHViKSxoYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoanYpLGZiPVp2KGhiKSxkYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAoanYpLHBiPVp2KGRiKSx5Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoanYpLGdiPVp2KHliKSxtYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoanYpLHZiPVp2KG1iKSxiYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAoanYpLHhiPVp2KGJiKSxfYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAoanYpLGtiPVp2KF9iKSx3Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoanYpLFRiPVp2KHdiKSxFYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAoanYpLENiPVp2KEViKSxTYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAoanYpLEFiPVp2KFNiKSxNYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoanYpLE9iPVp2KE1iKSxOYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAoanYpLEJiPVp2KE5iKSxEYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAoanYpLExiPVp2KERiKSxJYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoanYpLFJiPVp2KEliKSxGYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoanYpLFBiPVp2KEZiKSxqYj1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAoanYpLFliPVp2KGpiKSx6Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoanYpLFViPVp2KHpiKSwkYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoanYpLHFiPVp2KCRiKSxXYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAoanYpLEhiPVp2KFdiKSxWYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoanYpLEdiPVp2KFZiKSxYYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoanYpLFpiPVp2KFhiKSxLYj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKC00LjU0LXQqKDM1LjM0LXQqKDIzODEuNzMtdCooNjQwMi43LXQqKDcwMjQuNzItMjcxMC41Nyp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzIuNDkrdCooMTcwLjczK3QqKDUyLjgyLXQqKDEzMS40Ni10KigxNzYuNTgtNjcuMzcqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDgxLjI0K3QqKDQ0Mi4zNi10KigyNDgyLjQzLXQqKDYxNjcuMjQtdCooNjYxNC45NC0yNDc1LjY3KnQpKSkpKSkpKyIpIn0sUWI9d3AoTmEoMzAwLC41LDApLE5hKC0yNDAsLjUsMSkpLEpiPXdwKE5hKC0xMDAsLjc1LC4zNSksTmEoODAsMS41LC44KSksdHg9d3AoTmEoMjYwLC43NSwuMzUpLE5hKDgwLDEuNSwuOCkpLGV4PU5hKCksbng9ZnVuY3Rpb24odCl7KHQ8MHx8dD4xKSYmKHQtPU1hdGguZmxvb3IodCkpO3ZhciBlPU1hdGguYWJzKHQtLjUpO3JldHVybiBleC5oPTM2MCp0LTEwMCxleC5zPTEuNS0xLjUqZSxleC5sPS44LS45KmUsZXgrIiJ9LHJ4PUdlKCksaXg9TWF0aC5QSS8zLGF4PTIqTWF0aC5QSS8zLG94PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0PSguNS10KSpNYXRoLlBJLHJ4LnI9MjU1KihlPU1hdGguc2luKHQpKSplLHJ4Lmc9MjU1KihlPU1hdGguc2luKHQraXgpKSplLHJ4LmI9MjU1KihlPU1hdGguc2luKHQrYXgpKSplLHJ4KyIifSxzeD1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDM0LjYxK3QqKDExNzIuMzMtdCooMTA3OTMuNTYtdCooMzMzMDAuMTItdCooMzgzOTQuNDktMTQ4MjUuMDUqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDIzLjMxK3QqKDU1Ny4zMyt0KigxMjI1LjMzLXQqKDM1NzQuOTYtdCooMTA3My43Nys3MDcuNTYqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI3LjIrdCooMzIxMS4xLXQqKDE1MzI3Ljk3LXQqKDI3ODE0LXQqKDIyNTY5LjE4LTY4MzguNjYqdCkpKSkpKSkrIikifTtmdW5jdGlvbiBjeCh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX12YXIgdXg9Y3goanYoIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNSIpKSxseD1jeChqdigiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmIikpLGh4PWN4KGp2KCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksZng9Y3goanYoIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMSIpKSxkeD1mdW5jdGlvbih0KXtyZXR1cm4gd2UocmUodCkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX0scHg9MDtmdW5jdGlvbiB5eCgpe3JldHVybiBuZXcgZ3h9ZnVuY3Rpb24gZ3goKXt0aGlzLl89IkAiKygrK3B4KS50b1N0cmluZygzNil9Z3gucHJvdG90eXBlPXl4LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Z3gsZ2V0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl87IShlIGluIHQpOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHRbZV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0W3RoaXMuX109ZX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl8gaW4gdCYmZGVsZXRlIHRbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIG14PWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgeGUoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgeGUoW251bGw9PXQ/W106dF0sYmUpfSx2eD1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPU9uKCkudG91Y2hlcyk7Zm9yKHZhciBuPTAscj1lP2UubGVuZ3RoOjAsaT1uZXcgQXJyYXkocik7bjxyOysrbilpW25dPU5uKHQsZVtuXSk7cmV0dXJuIGl9LGJ4PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0seHg9TWF0aC5hYnMsX3g9TWF0aC5hdGFuMixreD1NYXRoLmNvcyx3eD1NYXRoLm1heCxUeD1NYXRoLm1pbixFeD1NYXRoLnNpbixDeD1NYXRoLnNxcnQsU3g9TWF0aC5QSSxBeD1TeC8yLE14PTIqU3g7ZnVuY3Rpb24gT3godCl7cmV0dXJuIHQ+MT8wOnQ8LTE/U3g6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIE54KHQpe3JldHVybiB0Pj0xP0F4OnQ8PS0xPy1BeDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gQngodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gRHgodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gTHgodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBJeCh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBSeCh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBGeCh0LGUsbixyLGksYSxvLHMpe3ZhciBjPW4tdCx1PXItZSxsPW8taSxoPXMtYSxmPWgqYy1sKnU7aWYoIShmKmY8MWUtMTIpKXJldHVyblt0KyhmPShsKihlLWEpLWgqKHQtaSkpL2YpKmMsZStmKnVdfWZ1bmN0aW9uIFB4KHQsZSxuLHIsaSxhLG8pe3ZhciBzPXQtbixjPWUtcix1PShvP2E6LWEpL0N4KHMqcytjKmMpLGw9dSpjLGg9LXUqcyxmPXQrbCxkPWUraCxwPW4rbCx5PXIraCxnPShmK3ApLzIsbT0oZCt5KS8yLHY9cC1mLGI9eS1kLHg9dip2K2IqYixfPWktYSxrPWYqeS1wKmQsdz0oYjwwPy0xOjEpKkN4KHd4KDAsXypfKngtayprKSksVD0oaypiLXYqdykveCxFPSgtayp2LWIqdykveCxDPShrKmIrdip3KS94LFM9KC1rKnYrYip3KS94LEE9VC1nLE09RS1tLE89Qy1nLE49Uy1tO3JldHVybiBBKkErTSpNPk8qTytOKk4mJihUPUMsRT1TKSx7Y3g6VCxjeTpFLHgwMTotbCx5MDE6LWgseDExOlQqKGkvXy0xKSx5MTE6RSooaS9fLTEpfX12YXIgang9ZnVuY3Rpb24oKXt2YXIgdD1CeCxlPUR4LG49YngoMCkscj1udWxsLGk9THgsYT1JeCxvPVJ4LHM9bnVsbDtmdW5jdGlvbiBjKCl7dmFyIGMsdSxsPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLUF4LGQ9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyktQXgscD14eChkLWYpLHk9ZD5mO2lmKHN8fChzPWM9JGkoKSksaDxsJiYodT1oLGg9bCxsPXUpLGg+MWUtMTIpaWYocD5NeC0xZS0xMilzLm1vdmVUbyhoKmt4KGYpLGgqRXgoZikpLHMuYXJjKDAsMCxoLGYsZCwheSksbD4xZS0xMiYmKHMubW92ZVRvKGwqa3goZCksbCpFeChkKSkscy5hcmMoMCwwLGwsZCxmLHkpKTtlbHNle3ZhciBnLG0sdj1mLGI9ZCx4PWYsXz1kLGs9cCx3PXAsVD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLEU9VD4xZS0xMiYmKHI/K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOkN4KGwqbCtoKmgpKSxDPVR4KHh4KGgtbCkvMiwrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFM9QyxBPUM7aWYoRT4xZS0xMil7dmFyIE09TngoRS9sKkV4KFQpKSxPPU54KEUvaCpFeChUKSk7KGstPTIqTSk+MWUtMTI/KHgrPU0qPXk/MTotMSxfLT1NKTooaz0wLHg9Xz0oZitkKS8yKSwody09MipPKT4xZS0xMj8odis9Tyo9eT8xOi0xLGItPU8pOih3PTAsdj1iPShmK2QpLzIpfXZhciBOPWgqa3godiksQj1oKkV4KHYpLEQ9bCpreChfKSxMPWwqRXgoXyk7aWYoQz4xZS0xMil7dmFyIEksUj1oKmt4KGIpLEY9aCpFeChiKSxQPWwqa3goeCksaj1sKkV4KHgpO2lmKHA8U3gmJihJPUZ4KE4sQixQLGosUixGLEQsTCkpKXt2YXIgWT1OLUlbMF0sej1CLUlbMV0sVT1SLUlbMF0sJD1GLUlbMV0scT0xL0V4KE94KChZKlUreiokKS8oQ3goWSpZK3oqeikqQ3goVSpVKyQqJCkpKS8yKSxXPUN4KElbMF0qSVswXStJWzFdKklbMV0pO1M9VHgoQywobC1XKS8ocS0xKSksQT1UeChDLChoLVcpLyhxKzEpKX19dz4xZS0xMj9BPjFlLTEyPyhnPVB4KFAsaixOLEIsaCxBLHkpLG09UHgoUixGLEQsTCxoLEEseSkscy5tb3ZlVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxBPEM/cy5hcmMoZy5jeCxnLmN5LEEsX3goZy55MDEsZy54MDEpLF94KG0ueTAxLG0ueDAxKSwheSk6KHMuYXJjKGcuY3gsZy5jeSxBLF94KGcueTAxLGcueDAxKSxfeChnLnkxMSxnLngxMSksIXkpLHMuYXJjKDAsMCxoLF94KGcuY3krZy55MTEsZy5jeCtnLngxMSksX3gobS5jeSttLnkxMSxtLmN4K20ueDExKSwheSkscy5hcmMobS5jeCxtLmN5LEEsX3gobS55MTEsbS54MTEpLF94KG0ueTAxLG0ueDAxKSwheSkpKToocy5tb3ZlVG8oTixCKSxzLmFyYygwLDAsaCx2LGIsIXkpKTpzLm1vdmVUbyhOLEIpLGw+MWUtMTImJms+MWUtMTI/Uz4xZS0xMj8oZz1QeChELEwsUixGLGwsLVMseSksbT1QeChOLEIsUCxqLGwsLVMseSkscy5saW5lVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxTPEM/cy5hcmMoZy5jeCxnLmN5LFMsX3goZy55MDEsZy54MDEpLF94KG0ueTAxLG0ueDAxKSwheSk6KHMuYXJjKGcuY3gsZy5jeSxTLF94KGcueTAxLGcueDAxKSxfeChnLnkxMSxnLngxMSksIXkpLHMuYXJjKDAsMCxsLF94KGcuY3krZy55MTEsZy5jeCtnLngxMSksX3gobS5jeSttLnkxMSxtLmN4K20ueDExKSx5KSxzLmFyYyhtLmN4LG0uY3ksUyxfeChtLnkxMSxtLngxMSksX3gobS55MDEsbS54MDEpLCF5KSkpOnMuYXJjKDAsMCxsLF8seCx5KTpzLmxpbmVUbyhELEwpfWVsc2Ugcy5tb3ZlVG8oMCwwKTtpZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBjLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIG49KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLVN4LzI7cmV0dXJuW2t4KHIpKm4sRXgocikqbl19LGMuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpieCgrZSksYyk6dH0sYy5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxjKTplfSxjLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxjKTpufSxjLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpieCgrdCksYyk6cn0sYy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YngoK3QpLGMpOml9LGMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpieCgrdCksYyk6YX0sYy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxjKTpvfSxjLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsYyk6c30sY307ZnVuY3Rpb24gWXgodCl7dGhpcy5fY29udGV4dD10fVl4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciB6eD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFl4KHQpfTtmdW5jdGlvbiBVeCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiAkeCh0KXtyZXR1cm4gdFsxXX12YXIgcXg9ZnVuY3Rpb24oKXt2YXIgdD1VeCxlPSR4LG49YngoITApLHI9bnVsbCxpPXp4LGE9bnVsbDtmdW5jdGlvbiBvKG8pe3ZhciBzLGMsdSxsPW8ubGVuZ3RoLGg9ITE7Zm9yKG51bGw9PXImJihhPWkodT0kaSgpKSkscz0wO3M8PWw7KytzKSEoczxsJiZuKGM9b1tzXSxzLG8pKT09PWgmJigoaD0haCk/YS5saW5lU3RhcnQoKTphLmxpbmVFbmQoKSksaCYmYS5wb2ludCgrdChjLHMsbyksK2UoYyxzLG8pKTtpZih1KXJldHVybiBhPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YngoK2UpLG8pOnR9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxvKTplfSxvLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpieCghIXQpLG8pOm59LG8uY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxudWxsIT1yJiYoYT1pKHIpKSxvKTppfSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1hPW51bGw6YT1pKHI9dCksbyk6cn0sb30sV3g9ZnVuY3Rpb24oKXt2YXIgdD1VeCxlPW51bGwsbj1ieCgwKSxyPSR4LGk9YngoITApLGE9bnVsbCxvPXp4LHM9bnVsbDtmdW5jdGlvbiBjKGMpe3ZhciB1LGwsaCxmLGQscD1jLmxlbmd0aCx5PSExLGc9bmV3IEFycmF5KHApLG09bmV3IEFycmF5KHApO2ZvcihudWxsPT1hJiYocz1vKGQ9JGkoKSkpLHU9MDt1PD1wOysrdSl7aWYoISh1PHAmJmkoZj1jW3VdLHUsYykpPT09eSlpZih5PSF5KWw9dSxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxoPXUtMTtoPj1sOy0taClzLnBvaW50KGdbaF0sbVtoXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9eSYmKGdbdV09K3QoZix1LGMpLG1bdV09K24oZix1LGMpLHMucG9pbnQoZT8rZShmLHUsYyk6Z1t1XSxyPytyKGYsdSxjKTptW3VdKSl9aWYoZClyZXR1cm4gcz1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gdSgpe3JldHVybiBxeCgpLmRlZmluZWQoaSkuY3VydmUobykuY29udGV4dChhKX1yZXR1cm4gYy54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246YngoK24pLGU9bnVsbCxjKTp0fSxjLngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YngoK2UpLGMpOnR9LGMueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YngoK3QpLGMpOmV9LGMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxyPW51bGwsYyk6bn0sYy55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxjKTpufSxjLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxjKTpyfSxjLmxpbmVYMD1jLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiB1KCkueCh0KS55KG4pfSxjLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiB1KCkueCh0KS55KHIpfSxjLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiB1KCkueChlKS55KG4pfSxjLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpieCghIXQpLGMpOml9LGMuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxudWxsIT1hJiYocz1vKGEpKSxjKTpvfSxjLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/YT1zPW51bGw6cz1vKGE9dCksYyk6YX0sY30sSHg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LFZ4PWZ1bmN0aW9uKHQpe3JldHVybiB0fSxHeD1mdW5jdGlvbigpe3ZhciB0PVZ4LGU9SHgsbj1udWxsLHI9YngoMCksaT1ieChNeCksYT1ieCgwKTtmdW5jdGlvbiBvKG8pe3ZhciBzLGMsdSxsLGgsZj1vLmxlbmd0aCxkPTAscD1uZXcgQXJyYXkoZikseT1uZXcgQXJyYXkoZiksZz0rci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbT1NYXRoLm1pbihNeCxNYXRoLm1heCgtTXgsaS5hcHBseSh0aGlzLGFyZ3VtZW50cyktZykpLHY9TWF0aC5taW4oTWF0aC5hYnMobSkvZixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj12KihtPDA/LTE6MSk7Zm9yKHM9MDtzPGY7KytzKShoPXlbcFtzXT1zXT0rdChvW3NdLHMsbykpPjAmJihkKz1oKTtmb3IobnVsbCE9ZT9wLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUoeVt0XSx5W25dKX0pKTpudWxsIT1uJiZwLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4ob1t0XSxvW2VdKX0pKSxzPTAsdT1kPyhtLWYqYikvZDowO3M8ZjsrK3MsZz1sKWM9cFtzXSxsPWcrKChoPXlbY10pPjA/aCp1OjApK2IseVtjXT17ZGF0YTpvW2NdLGluZGV4OnMsdmFsdWU6aCxzdGFydEFuZ2xlOmcsZW5kQW5nbGU6bCxwYWRBbmdsZTp2fTtyZXR1cm4geX1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmJ4KCtlKSxvKTp0fSxvLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuPW51bGwsbyk6ZX0sby5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZT1udWxsLG8pOm59LG8uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxvKTpyfSxvLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YngoK3QpLG8pOml9LG8ucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpieCgrdCksbyk6YX0sb30sWHg9S3goengpO2Z1bmN0aW9uIFp4KHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gS3godCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gbmV3IFp4KHQoZSkpfXJldHVybiBlLl9jdXJ2ZT10LGV9ZnVuY3Rpb24gUXgodCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoS3godCkpOmUoKS5fY3VydmV9LHR9WngucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgSng9ZnVuY3Rpb24oKXtyZXR1cm4gUXgocXgoKS5jdXJ2ZShYeCkpfSx0Xz1mdW5jdGlvbigpe3ZhciB0PVd4KCkuY3VydmUoWHgpLGU9dC5jdXJ2ZSxuPXQubGluZVgwLHI9dC5saW5lWDEsaT10LmxpbmVZMCxhPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gUXgobigpKX0sZGVsZXRlIHQubGluZVgwLHQubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIFF4KHIoKSl9LGRlbGV0ZSB0LmxpbmVYMSx0LmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBReChpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gUXgoYSgpKX0sZGVsZXRlIHQubGluZVkxLHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShLeCh0KSk6ZSgpLl9jdXJ2ZX0sdH0sZV89ZnVuY3Rpb24odCxlKXtyZXR1cm5bKGU9K2UpKk1hdGguY29zKHQtPU1hdGguUEkvMiksZSpNYXRoLnNpbih0KV19LG5fPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiByXyh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gaV8odCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGFfKHQpe3ZhciBlPXJfLG49aV8scj1VeCxpPSR4LGE9bnVsbDtmdW5jdGlvbiBvKCl7dmFyIG8scz1uXy5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMscyksdT1uLmFwcGx5KHRoaXMscyk7aWYoYXx8KGE9bz0kaSgpKSx0KGEsK3IuYXBwbHkodGhpcywoc1swXT1jLHMpKSwraS5hcHBseSh0aGlzLHMpLCtyLmFwcGx5KHRoaXMsKHNbMF09dSxzKSksK2kuYXBwbHkodGhpcyxzKSksbylyZXR1cm4gYT1udWxsLG8rIiJ8fG51bGx9cmV0dXJuIG8uc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbyk6ZX0sby50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxvKTpufSxvLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpieCgrdCksbyk6cn0sby55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YngoK3QpLG8pOml9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P251bGw6dCxvKTphfSxvfWZ1bmN0aW9uIG9fKHQsZSxuLHIsaSl7dC5tb3ZlVG8oZSxuKSx0LmJlemllckN1cnZlVG8oZT0oZStyKS8yLG4sZSxpLHIsaSl9ZnVuY3Rpb24gc18odCxlLG4scixpKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlLG49KG4raSkvMixyLG4scixpKX1mdW5jdGlvbiBjXyh0LGUsbixyLGkpe3ZhciBhPWVfKGUsbiksbz1lXyhlLG49KG4raSkvMikscz1lXyhyLG4pLGM9ZV8ocixpKTt0Lm1vdmVUbyhhWzBdLGFbMV0pLHQuYmV6aWVyQ3VydmVUbyhvWzBdLG9bMV0sc1swXSxzWzFdLGNbMF0sY1sxXSl9ZnVuY3Rpb24gdV8oKXtyZXR1cm4gYV8ob18pfWZ1bmN0aW9uIGxfKCl7cmV0dXJuIGFfKHNfKX1mdW5jdGlvbiBoXygpe3ZhciB0PWFfKGNfKTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0fXZhciBmXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL1N4KTt0Lm1vdmVUbyhuLDApLHQuYXJjKDAsMCxuLDAsTXgpfX0sZF89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS81KS8yO3QubW92ZVRvKC0zKm4sLW4pLHQubGluZVRvKC1uLC1uKSx0LmxpbmVUbygtbiwtMypuKSx0LmxpbmVUbyhuLC0zKm4pLHQubGluZVRvKG4sLW4pLHQubGluZVRvKDMqbiwtbiksdC5saW5lVG8oMypuLG4pLHQubGluZVRvKG4sbiksdC5saW5lVG8obiwzKm4pLHQubGluZVRvKC1uLDMqbiksdC5saW5lVG8oLW4sbiksdC5saW5lVG8oLTMqbixuKSx0LmNsb3NlUGF0aCgpfX0scF89TWF0aC5zcXJ0KDEvMykseV89MipwXyxnXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL3lfKSxyPW4qcF87dC5tb3ZlVG8oMCwtbiksdC5saW5lVG8ociwwKSx0LmxpbmVUbygwLG4pLHQubGluZVRvKC1yLDApLHQuY2xvc2VQYXRoKCl9fSxtXz1NYXRoLnNpbihTeC8xMCkvTWF0aC5zaW4oNypTeC8xMCksdl89TWF0aC5zaW4oTXgvMTApKm1fLGJfPS1NYXRoLmNvcyhNeC8xMCkqbV8seF89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoLjg5MDgxMzA5MTUyOTI4NTIqZSkscj12XypuLGk9Yl8qbjt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLGkpO2Zvcih2YXIgYT0xO2E8NTsrK2Epe3ZhciBvPU14KmEvNSxzPU1hdGguY29zKG8pLGM9TWF0aC5zaW4obyk7dC5saW5lVG8oYypuLC1zKm4pLHQubGluZVRvKHMqci1jKmksYypyK3MqaSl9dC5jbG9zZVBhdGgoKX19LF9fPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUpLHI9LW4vMjt0LnJlY3QocixyLG4sbil9fSxrXz1NYXRoLnNxcnQoMyksd189e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj0tTWF0aC5zcXJ0KGUvKDMqa18pKTt0Lm1vdmVUbygwLDIqbiksdC5saW5lVG8oLWtfKm4sLW4pLHQubGluZVRvKGtfKm4sLW4pLHQuY2xvc2VQYXRoKCl9fSxUXz1NYXRoLnNxcnQoMykvMixFXz0xL01hdGguc3FydCgxMiksQ189MyooRV8vMisxKSxTXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL0NfKSxyPW4vMixpPW4qRV8sYT1yLG89bipFXytuLHM9LWEsYz1vO3QubW92ZVRvKHIsaSksdC5saW5lVG8oYSxvKSx0LmxpbmVUbyhzLGMpLHQubGluZVRvKC0uNSpyLVRfKmksVF8qcistLjUqaSksdC5saW5lVG8oLS41KmEtVF8qbyxUXyphKy0uNSpvKSx0LmxpbmVUbygtLjUqcy1UXypjLFRfKnMrLS41KmMpLHQubGluZVRvKC0uNSpyK1RfKmksLS41KmktVF8qciksdC5saW5lVG8oLS41KmErVF8qbywtLjUqby1UXyphKSx0LmxpbmVUbygtLjUqcytUXypjLC0uNSpjLVRfKnMpLHQuY2xvc2VQYXRoKCl9fSxBXz1bZl8sZF8sZ18sX18seF8sd18sU19dLE1fPWZ1bmN0aW9uKCl7dmFyIHQ9YngoZl8pLGU9YngoNjQpLG49bnVsbDtmdW5jdGlvbiByKCl7dmFyIHI7aWYobnx8KG49cj0kaSgpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KG4sK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxyKXJldHVybiBuPW51bGwscisiInx8bnVsbH1yZXR1cm4gci50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YngoZSkscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YngoK3QpLHIpOmV9LHIuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6dCxyKTpufSxyfSxPXz1mdW5jdGlvbigpe307ZnVuY3Rpb24gTl8odCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK24pLzYpfWZ1bmN0aW9uIEJfKHQpe3RoaXMuX2NvbnRleHQ9dH1CXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk5fKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok5fKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fTt2YXIgRF89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCXyh0KX07ZnVuY3Rpb24gTF8odCl7dGhpcy5fY29udGV4dD10fUxfLnByb3RvdHlwZT17YXJlYVN0YXJ0Ok9fLGFyZWFFbmQ6T18sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0Ok5fKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fTt2YXIgSV89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBMXyh0KX07ZnVuY3Rpb24gUl8odCl7dGhpcy5fY29udGV4dD10fVJfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciBuPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYscj0odGhpcy5feTArNCp0aGlzLl95MStlKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8obixyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6Tl8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciBGXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFJfKHQpfTtmdW5jdGlvbiBQXyh0LGUpe3RoaXMuX2Jhc2lzPW5ldyBCXyh0KSx0aGlzLl9iZXRhPWV9UF8ucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoLTE7aWYobj4wKWZvcih2YXIgcixpPXRbMF0sYT1lWzBdLG89dFtuXS1pLHM9ZVtuXS1hLGM9LTE7KytjPD1uOylyPWMvbix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbY10rKDEtdGhpcy5fYmV0YSkqKGkrcipvKSx0aGlzLl9iZXRhKmVbY10rKDEtdGhpcy5fYmV0YSkqKGErcipzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBqXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDE9PT1lP25ldyBCXyh0KTpuZXcgUF8odCxlKX1yZXR1cm4gbi5iZXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjg1KTtmdW5jdGlvbiBZXyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtZSksdC5feTIrdC5fayoodC5feTEtbiksdC5feDIsdC5feTIpfWZ1bmN0aW9uIHpfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn16Xy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6WV8odGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OllfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVV89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgel8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gJF8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fSRfLnByb3RvdHlwZT17YXJlYVN0YXJ0Ok9fLGFyZWFFbmQ6T18sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpZXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIHFfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3ICRfKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApO2Z1bmN0aW9uIFdfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1XXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpZXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIEhfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IFdfKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApO2Z1bmN0aW9uIFZfKHQsZSxuKXt2YXIgcj10Ll94MSxpPXQuX3kxLGE9dC5feDIsbz10Ll95MjtpZih0Ll9sMDFfYT4xZS0xMil7dmFyIHM9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsYz0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7cj0ocipzLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2MsaT0oaSpzLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2N9aWYodC5fbDIzX2E+MWUtMTIpe3ZhciB1PTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGw9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO2E9KGEqdSt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2wsbz0obyp1K3QuX3kxKnQuX2wyM18yYS1uKnQuX2wxMl8yYSkvbH10Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocixpLGEsbyx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gR18odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1HXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlZfKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFhfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgR18odCxlKTpuZXcgel8odCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KTtmdW5jdGlvbiBaXyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfVpfLnByb3RvdHlwZT17YXJlYVN0YXJ0Ok9fLGFyZWFFbmQ6T18sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6Vl8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgS189ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBaXyh0LGUpOm5ldyAkXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uIFFfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9UV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OlZfKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIEpfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgUV8odCxlKTpuZXcgV18odCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KTtmdW5jdGlvbiB0ayh0KXt0aGlzLl9jb250ZXh0PXR9dGsucHJvdG90eXBlPXthcmVhU3RhcnQ6T18sYXJlYUVuZDpPXyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dD0rdCxlPStlLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSl9fTt2YXIgZWs9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB0ayh0KX07ZnVuY3Rpb24gbmsodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIHJrKHQsZSxuKXt2YXIgcj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxvPShuLXQuX3kxKS8oaXx8cjwwJiYtMCkscz0oYSppK28qcikvKHIraSk7cmV0dXJuKG5rKGEpK25rKG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gaWsodCxlKXt2YXIgbj10Ll94MS10Ll94MDtyZXR1cm4gbj8oMyoodC5feTEtdC5feTApL24tZSkvMjplfWZ1bmN0aW9uIGFrKHQsZSxuKXt2YXIgcj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrcyxpK3MqZSxhLXMsby1zKm4sYSxvKX1mdW5jdGlvbiBvayh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gc2sodCl7dGhpcy5fY29udGV4dD1uZXcgY2sodCl9ZnVuY3Rpb24gY2sodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHVrKHQpe3JldHVybiBuZXcgb2sodCl9ZnVuY3Rpb24gbGsodCl7cmV0dXJuIG5ldyBzayh0KX1mdW5jdGlvbiBoayh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gZmsodCl7dmFyIGUsbixyPXQubGVuZ3RoLTEsaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxhWzBdPTIsb1swXT10WzBdKzIqdFsxXSxlPTE7ZTxyLTE7KytlKWlbZV09MSxhW2VdPTQsb1tlXT00KnRbZV0rMip0W2UrMV07Zm9yKGlbci0xXT0yLGFbci0xXT03LG9bci0xXT04KnRbci0xXSt0W3JdLGU9MTtlPHI7KytlKW49aVtlXS9hW2UtMV0sYVtlXS09bixvW2VdLT1uKm9bZS0xXTtmb3IoaVtyLTFdPW9bci0xXS9hW3ItMV0sZT1yLTI7ZT49MDstLWUpaVtlXT0ob1tlXS1pW2UrMV0pL2FbZV07Zm9yKGFbci0xXT0odFtyXStpW3ItMV0pLzIsZT0wO2U8ci0xOysrZSlhW2VdPTIqdFtlKzFdLWlbZSsxXTtyZXR1cm5baSxhXX1vay5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6YWsodGhpcyx0aGlzLl90MCxpayh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3ZhciBuPU5hTjtpZihlPStlLCh0PSt0KSE9PXRoaXMuX3gxfHxlIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsYWsodGhpcyxpayh0aGlzLG49cmsodGhpcyx0LGUpKSxuKTticmVhaztkZWZhdWx0OmFrKHRoaXMsdGhpcy5fdDAsbj1yayh0aGlzLHQsZSkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZSx0aGlzLl90MD1ufX19LChzay5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShvay5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LGUpe29rLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsZSx0KX0sY2sucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LHIsbixhLGkpfX0saGsucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3ksbj10Lmxlbmd0aDtpZihuKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLDI9PT1uKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIHI9ZmsodCksaT1mayhlKSxhPTAsbz0xO288bjsrK2EsKytvKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyWzBdW2FdLGlbMF1bYV0sclsxXVthXSxpWzFdW2FdLHRbb10sZVtvXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09bikmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIGRrPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaGsodCl9O2Z1bmN0aW9uIHBrKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1way5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgbj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKG4sZSl9fXRoaXMuX3g9dCx0aGlzLl95PWV9fTt2YXIgeWs9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwayh0LC41KX07ZnVuY3Rpb24gZ2sodCl7cmV0dXJuIG5ldyBwayh0LDApfWZ1bmN0aW9uIG1rKHQpe3JldHVybiBuZXcgcGsodCwxKX12YXIgdms9ZnVuY3Rpb24odCxlKXtpZigoaT10Lmxlbmd0aCk+MSlmb3IodmFyIG4scixpLGE9MSxvPXRbZVswXV0scz1vLmxlbmd0aDthPGk7KythKWZvcihyPW8sbz10W2VbYV1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4ocltuXVsxXSk/cltuXVswXTpyW25dWzFdfSxiaz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgsbj1uZXcgQXJyYXkoZSk7LS1lPj0wOyluW2VdPWU7cmV0dXJuIG59O2Z1bmN0aW9uIHhrKHQsZSl7cmV0dXJuIHRbZV19dmFyIF9rPWZ1bmN0aW9uKCl7dmFyIHQ9YngoW10pLGU9Ymssbj12ayxyPXhrO2Z1bmN0aW9uIGkoaSl7dmFyIGEsbyxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9aS5sZW5ndGgsdT1zLmxlbmd0aCxsPW5ldyBBcnJheSh1KTtmb3IoYT0wO2E8dTsrK2Epe2Zvcih2YXIgaCxmPXNbYV0sZD1sW2FdPW5ldyBBcnJheShjKSxwPTA7cDxjOysrcClkW3BdPWg9WzAsK3IoaVtwXSxmLHAsaSldLGguZGF0YT1pW3BdO2Qua2V5PWZ9Zm9yKGE9MCxvPWUobCk7YTx1OysrYSlsW29bYV1dLmluZGV4PWE7cmV0dXJuIG4obCxvKSxsfXJldHVybiBpLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpieChuXy5jYWxsKGUpKSxpKTp0fSxpLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YngoK3QpLGkpOnJ9LGkub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9iazoiZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KG5fLmNhbGwodCkpLGkpOmV9LGkub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/dms6dCxpKTpufSxpfSxraz1mdW5jdGlvbih0LGUpe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4scixpLGE9MCxvPXRbMF0ubGVuZ3RoO2E8bzsrK2Epe2ZvcihpPW49MDtuPHI7KytuKWkrPXRbbl1bYV1bMV18fDA7aWYoaSlmb3Iobj0wO248cjsrK24pdFtuXVthXVsxXS89aX12ayh0LGUpfX0sd2s9ZnVuY3Rpb24odCxlKXtpZigocz10Lmxlbmd0aCk+MClmb3IodmFyIG4scixpLGEsbyxzLGM9MCx1PXRbZVswXV0ubGVuZ3RoO2M8dTsrK2MpZm9yKGE9bz0wLG49MDtuPHM7KytuKShpPShyPXRbZVtuXV1bY10pWzFdLXJbMF0pPjA/KHJbMF09YSxyWzFdPWErPWkpOmk8MD8oclsxXT1vLHJbMF09bys9aSk6KHJbMF09MCxyWzFdPWkpfSxUaz1mdW5jdGlvbih0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4scj0wLGk9dFtlWzBdXSxhPWkubGVuZ3RoO3I8YTsrK3Ipe2Zvcih2YXIgbz0wLHM9MDtvPG47KytvKXMrPXRbb11bcl1bMV18fDA7aVtyXVsxXSs9aVtyXVswXT0tcy8yfXZrKHQsZSl9fSxFaz1mdW5jdGlvbih0LGUpe2lmKChpPXQubGVuZ3RoKT4wJiYocj0obj10W2VbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgbixyLGksYT0wLG89MTtvPHI7KytvKXtmb3IodmFyIHM9MCxjPTAsdT0wO3M8aTsrK3Mpe2Zvcih2YXIgbD10W2Vbc11dLGg9bFtvXVsxXXx8MCxmPShoLShsW28tMV1bMV18fDApKS8yLGQ9MDtkPHM7KytkKXt2YXIgcD10W2VbZF1dO2YrPShwW29dWzFdfHwwKS0ocFtvLTFdWzFdfHwwKX1jKz1oLHUrPWYqaH1uW28tMV1bMV0rPW5bby0xXVswXT1hLGMmJihhLT11L2MpfW5bby0xXVsxXSs9bltvLTFdWzBdPWEsdmsodCxlKX19LENrPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWFwKFNrKTtyZXR1cm4gYmsodCkuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZVt0XS1lW25dfSkpfTtmdW5jdGlvbiBTayh0KXtmb3IodmFyIGUsbj0tMSxyPTAsaT10Lmxlbmd0aCxhPS0xLzA7KytuPGk7KShlPSt0W25dWzFdKT5hJiYoYT1lLHI9bik7cmV0dXJuIHJ9dmFyIEFrPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWFwKE1rKTtyZXR1cm4gYmsodCkuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZVt0XS1lW25dfSkpfTtmdW5jdGlvbiBNayh0KXtmb3IodmFyIGUsbj0wLHI9LTEsaT10Lmxlbmd0aDsrK3I8aTspKGU9K3Rbcl1bMV0pJiYobis9ZSk7cmV0dXJuIG59dmFyIE9rPWZ1bmN0aW9uKHQpe3JldHVybiBBayh0KS5yZXZlcnNlKCl9LE5rPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj10Lmxlbmd0aCxpPXQubWFwKE1rKSxhPUNrKHQpLG89MCxzPTAsYz1bXSx1PVtdO2ZvcihlPTA7ZTxyOysrZSluPWFbZV0sbzxzPyhvKz1pW25dLGMucHVzaChuKSk6KHMrPWlbbl0sdS5wdXNoKG4pKTtyZXR1cm4gdS5yZXZlcnNlKCkuY29uY2F0KGMpfSxCaz1mdW5jdGlvbih0KXtyZXR1cm4gYmsodCkucmV2ZXJzZSgpfTt2YXIgRGs9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06V2coIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3ZhciBMaz0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9OkhnKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKSxJaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IHFuLGk9ZTtyZXR1cm4gbnVsbD09ZT8oci5yZXN0YXJ0KHQsZSxuKSxyKTooZT0rZSxuPW51bGw9PW4/VW4oKTorbixyLnJlc3RhcnQoKGZ1bmN0aW9uIGEobyl7bys9aSxyLnJlc3RhcnQoYSxpKz1lLG4pLHQobyl9KSxlLG4pLHIpfSxSaz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIEZrKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFBrKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGprKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gWWsodCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiB6ayh0LGUpe3ZhciBuPWUscj1lLlIsaT1uLlU7aT9pLkw9PT1uP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLG4uVT1yLG4uUj1yLkwsbi5SJiYobi5SLlU9biksci5MPW59ZnVuY3Rpb24gVWsodCxlKXt2YXIgbj1lLHI9ZS5MLGk9bi5VO2k/aS5MPT09bj9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxuLlU9cixuLkw9ci5SLG4uTCYmKG4uTC5VPW4pLHIuUj1ufWZ1bmN0aW9uICRrKHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1qay5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmprLGluc2VydDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0KXtpZihlLlA9dCxlLk49dC5OLHQuTiYmKHQuTi5QPWUpLHQuTj1lLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPWV9ZWxzZSB0LlI9ZTtuPXR9ZWxzZSB0aGlzLl8/KHQ9JGsodGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUsbj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLG49bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9bixlLkM9ITAsdD1lO24mJm4uQzspbj09PShyPW4uVSkuTD8oaT1yLlIpJiZpLkM/KG4uQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1uLlImJih6ayh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLHIuQz0hMCxVayh0aGlzLHIpKTooaT1yLkwpJiZpLkM/KG4uQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1uLkwmJihVayh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLHIuQz0hMCx6ayh0aGlzLHIpKSxuPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIGUsbixyLGk9dC5VLGE9dC5MLG89dC5SO2lmKG49YT9vPyRrKG8pOmE6byxpP2kuTD09PXQ/aS5MPW46aS5SPW46dGhpcy5fPW4sYSYmbz8ocj1uLkMsbi5DPXQuQyxuLkw9YSxhLlU9bixuIT09bz8oaT1uLlUsbi5VPXQuVSx0PW4uUixpLkw9dCxuLlI9byxvLlU9bik6KG4uVT1pLGk9bix0PW4uUikpOihyPXQuQyx0PW4pLHQmJih0LlU9aSksIXIpaWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PWkuTCl7aWYoKGU9aS5SKS5DJiYoZS5DPSExLGkuQz0hMCx6ayh0aGlzLGkpLGU9aS5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLFVrKHRoaXMsZSksZT1pLlIpLGUuQz1pLkMsaS5DPWUuUi5DPSExLHprKHRoaXMsaSksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9aS5MKS5DJiYoZS5DPSExLGkuQz0hMCxVayh0aGlzLGkpLGU9aS5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLHprKHRoaXMsZSksZT1pLkwpLGUuQz1pLkMsaS5DPWUuTC5DPSExLFVrKHRoaXMsaSksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9aSxpPWkuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgcWs9ams7ZnVuY3Rpb24gV2sodCxlLG4scil7dmFyIGk9W251bGwsbnVsbF0sYT15dy5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD10LGkucmlnaHQ9ZSxuJiZWayhpLHQsZSxuKSxyJiZWayhpLGUsdCxyKSxkd1t0LmluZGV4XS5oYWxmZWRnZXMucHVzaChhKSxkd1tlLmluZGV4XS5oYWxmZWRnZXMucHVzaChhKSxpfWZ1bmN0aW9uIEhrKHQsZSxuKXt2YXIgcj1bZSxuXTtyZXR1cm4gci5sZWZ0PXQscn1mdW5jdGlvbiBWayh0LGUsbixyKXt0WzBdfHx0WzFdP3QubGVmdD09PW4/dFsxXT1yOnRbMF09cjoodFswXT1yLHQubGVmdD1lLHQucmlnaHQ9bil9ZnVuY3Rpb24gR2sodCxlLG4scixpKXt2YXIgYSxvPXRbMF0scz10WzFdLGM9b1swXSx1PW9bMV0sbD0wLGg9MSxmPXNbMF0tYyxkPXNbMV0tdTtpZihhPWUtYyxmfHwhKGE+MCkpe2lmKGEvPWYsZjwwKXtpZihhPGwpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihmPjApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1pZihhPXItYyxmfHwhKGE8MCkpe2lmKGEvPWYsZjwwKXtpZihhPmgpcmV0dXJuO2E+bCYmKGw9YSl9ZWxzZSBpZihmPjApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1pZihhPW4tdSxkfHwhKGE+MCkpe2lmKGEvPWQsZDwwKXtpZihhPGwpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihkPjApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1pZihhPWktdSxkfHwhKGE8MCkpe2lmKGEvPWQsZDwwKXtpZihhPmgpcmV0dXJuO2E+bCYmKGw9YSl9ZWxzZSBpZihkPjApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1yZXR1cm4hKGw+MHx8aDwxKXx8KGw+MCYmKHRbMF09W2MrbCpmLHUrbCpkXSksaDwxJiYodFsxXT1bYytoKmYsdStoKmRdKSwhMCl9fX19fWZ1bmN0aW9uIFhrKHQsZSxuLHIsaSl7dmFyIGE9dFsxXTtpZihhKXJldHVybiEwO3ZhciBvLHMsYz10WzBdLHU9dC5sZWZ0LGw9dC5yaWdodCxoPXVbMF0sZj11WzFdLGQ9bFswXSxwPWxbMV0seT0oaCtkKS8yLGc9KGYrcCkvMjtpZihwPT09Zil7aWYoeTxlfHx5Pj1yKXJldHVybjtpZihoPmQpe2lmKGMpe2lmKGNbMV0+PWkpcmV0dXJufWVsc2UgYz1beSxuXTthPVt5LGldfWVsc2V7aWYoYyl7aWYoY1sxXTxuKXJldHVybn1lbHNlIGM9W3ksaV07YT1beSxuXX19ZWxzZSBpZihzPWctKG89KGgtZCkvKHAtZikpKnksbzwtMXx8bz4xKWlmKGg+ZCl7aWYoYyl7aWYoY1sxXT49aSlyZXR1cm59ZWxzZSBjPVsobi1zKS9vLG5dO2E9WyhpLXMpL28saV19ZWxzZXtpZihjKXtpZihjWzFdPG4pcmV0dXJufWVsc2UgYz1bKGktcykvbyxpXTthPVsobi1zKS9vLG5dfWVsc2UgaWYoZjxwKXtpZihjKXtpZihjWzBdPj1yKXJldHVybn1lbHNlIGM9W2UsbyplK3NdO2E9W3IsbypyK3NdfWVsc2V7aWYoYyl7aWYoY1swXTxlKXJldHVybn1lbHNlIGM9W3IsbypyK3NdO2E9W2UsbyplK3NdfXJldHVybiB0WzBdPWMsdFsxXT1hLCEwfWZ1bmN0aW9uIFprKHQsZSl7dmFyIG49dC5zaXRlLHI9ZS5sZWZ0LGk9ZS5yaWdodDtyZXR1cm4gbj09PWkmJihpPXIscj1uKSxpP01hdGguYXRhbjIoaVsxXS1yWzFdLGlbMF0tclswXSk6KG49PT1yPyhyPWVbMV0saT1lWzBdKToocj1lWzBdLGk9ZVsxXSksTWF0aC5hdGFuMihyWzBdLWlbMF0saVsxXS1yWzFdKSl9ZnVuY3Rpb24gS2sodCxlKXtyZXR1cm4gZVsrKGUubGVmdCE9PXQuc2l0ZSldfWZ1bmN0aW9uIFFrKHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQ9PT10LnNpdGUpXX12YXIgSmssdHc9W107ZnVuY3Rpb24gZXcoKXtZayh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gbncodCl7dmFyIGU9dC5QLG49dC5OO2lmKGUmJm4pe3ZhciByPWUuc2l0ZSxpPXQuc2l0ZSxhPW4uc2l0ZTtpZihyIT09YSl7dmFyIG89aVswXSxzPWlbMV0sYz1yWzBdLW8sdT1yWzFdLXMsbD1hWzBdLW8saD1hWzFdLXMsZj0yKihjKmgtdSpsKTtpZighKGY+PS1tdykpe3ZhciBkPWMqYyt1KnUscD1sKmwraCpoLHk9KGgqZC11KnApL2YsZz0oYypwLWwqZCkvZixtPXR3LnBvcCgpfHxuZXcgZXc7bS5hcmM9dCxtLnNpdGU9aSxtLng9eStvLG0ueT0obS5jeT1nK3MpK01hdGguc3FydCh5KnkrZypnKSx0LmNpcmNsZT1tO2Zvcih2YXIgdj1udWxsLGI9cHcuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KXtpZighYi5MKXt2PWIuUDticmVha31iPWIuTH1lbHNle2lmKCFiLlIpe3Y9YjticmVha31iPWIuUn1wdy5pbnNlcnQodixtKSx2fHwoSms9bSl9fX19ZnVuY3Rpb24gcncodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KEprPWUuTikscHcucmVtb3ZlKGUpLHR3LnB1c2goZSksWWsoZSksdC5jaXJjbGU9bnVsbCl9dmFyIGl3PVtdO2Z1bmN0aW9uIGF3KCl7WWsodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIG93KHQpe3ZhciBlPWl3LnBvcCgpfHxuZXcgYXc7cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gc3codCl7cncodCksZncucmVtb3ZlKHQpLGl3LnB1c2godCksWWsodCl9ZnVuY3Rpb24gY3codCl7dmFyIGU9dC5jaXJjbGUsbj1lLngscj1lLmN5LGk9W24scl0sYT10LlAsbz10Lk4scz1bdF07c3codCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKG4tYy5jaXJjbGUueCk8Z3cmJk1hdGguYWJzKHItYy5jaXJjbGUuY3kpPGd3OylhPWMuUCxzLnVuc2hpZnQoYyksc3coYyksYz1hO3MudW5zaGlmdChjKSxydyhjKTtmb3IodmFyIHU9bzt1LmNpcmNsZSYmTWF0aC5hYnMobi11LmNpcmNsZS54KTxndyYmTWF0aC5hYnMoci11LmNpcmNsZS5jeSk8Z3c7KW89dS5OLHMucHVzaCh1KSxzdyh1KSx1PW87cy5wdXNoKHUpLHJ3KHUpO3ZhciBsLGg9cy5sZW5ndGg7Zm9yKGw9MTtsPGg7KytsKXU9c1tsXSxjPXNbbC0xXSxWayh1LmVkZ2UsYy5zaXRlLHUuc2l0ZSxpKTtjPXNbMF0sKHU9c1toLTFdKS5lZGdlPVdrKGMuc2l0ZSx1LnNpdGUsbnVsbCxpKSxudyhjKSxudyh1KX1mdW5jdGlvbiB1dyh0KXtmb3IodmFyIGUsbixyLGksYT10WzBdLG89dFsxXSxzPWZ3Ll87czspaWYoKHI9bHcocyxvKS1hKT5ndylzPXMuTDtlbHNle2lmKCEoKGk9YS1odyhzLG8pKT5ndykpe3I+LWd3PyhlPXMuUCxuPXMpOmk+LWd3PyhlPXMsbj1zLk4pOmU9bj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn0hZnVuY3Rpb24odCl7ZHdbdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fSh0KTt2YXIgYz1vdyh0KTtpZihmdy5pbnNlcnQoZSxjKSxlfHxuKXtpZihlPT09bilyZXR1cm4gcncoZSksbj1vdyhlLnNpdGUpLGZ3Lmluc2VydChjLG4pLGMuZWRnZT1uLmVkZ2U9V2soZS5zaXRlLGMuc2l0ZSksbncoZSksdm9pZCBudyhuKTtpZihuKXtydyhlKSxydyhuKTt2YXIgdT1lLnNpdGUsbD11WzBdLGg9dVsxXSxmPXRbMF0tbCxkPXRbMV0taCxwPW4uc2l0ZSx5PXBbMF0tbCxnPXBbMV0taCxtPTIqKGYqZy1kKnkpLHY9ZipmK2QqZCxiPXkqeStnKmcseD1bKGcqdi1kKmIpL20rbCwoZipiLXkqdikvbStoXTtWayhuLmVkZ2UsdSxwLHgpLGMuZWRnZT1Xayh1LHQsbnVsbCx4KSxuLmVkZ2U9V2sodCxwLG51bGwseCksbncoZSksbncobil9ZWxzZSBjLmVkZ2U9V2soZS5zaXRlLGMuc2l0ZSl9fWZ1bmN0aW9uIGx3KHQsZSl7dmFyIG49dC5zaXRlLHI9blswXSxpPW5bMV0sYT1pLWU7aWYoIWEpcmV0dXJuIHI7dmFyIG89dC5QO2lmKCFvKXJldHVybi0xLzA7dmFyIHM9KG49by5zaXRlKVswXSxjPW5bMV0sdT1jLWU7aWYoIXUpcmV0dXJuIHM7dmFyIGw9cy1yLGg9MS9hLTEvdSxmPWwvdTtyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKGwqbC8oLTIqdSktYyt1LzIraS1hLzIpKSkvaCtyOihyK3MpLzJ9ZnVuY3Rpb24gaHcodCxlKXt2YXIgbj10Lk47aWYobilyZXR1cm4gbHcobixlKTt2YXIgcj10LnNpdGU7cmV0dXJuIHJbMV09PT1lP3JbMF06MS8wfXZhciBmdyxkdyxwdyx5dyxndz0xZS02LG13PTFlLTEyO2Z1bmN0aW9uIHZ3KHQsZSl7cmV0dXJuIGVbMV0tdFsxXXx8ZVswXS10WzBdfWZ1bmN0aW9uIGJ3KHQsZSl7dmFyIG4scixpLGE9dC5zb3J0KHZ3KS5wb3AoKTtmb3IoeXc9W10sZHc9bmV3IEFycmF5KHQubGVuZ3RoKSxmdz1uZXcgcWsscHc9bmV3IHFrOzspaWYoaT1KayxhJiYoIWl8fGFbMV08aS55fHxhWzFdPT09aS55JiZhWzBdPGkueCkpYVswXT09PW4mJmFbMV09PT1yfHwodXcoYSksbj1hWzBdLHI9YVsxXSksYT10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7Y3coaS5hcmMpfWlmKGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbixyLGk9MCxhPWR3Lmxlbmd0aDtpPGE7KytpKWlmKCh0PWR3W2ldKSYmKHI9KGU9dC5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBvPW5ldyBBcnJheShyKSxzPW5ldyBBcnJheShyKTtmb3Iobj0wO248cjsrK24pb1tuXT1uLHNbbl09WmsodCx5d1tlW25dXSk7Zm9yKG8uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gc1tlXS1zW3RdfSkpLG49MDtuPHI7KytuKXNbbl09ZVtvW25dXTtmb3Iobj0wO248cjsrK24pZVtuXT1zW25dfX0oKSxlKXt2YXIgbz0rZVswXVswXSxzPStlWzBdWzFdLGM9K2VbMV1bMF0sdT0rZVsxXVsxXTshZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpLGE9eXcubGVuZ3RoO2EtLTspWGsoaT15d1thXSx0LGUsbixyKSYmR2soaSx0LGUsbixyKSYmKE1hdGguYWJzKGlbMF1bMF0taVsxXVswXSk+Z3d8fE1hdGguYWJzKGlbMF1bMV0taVsxXVsxXSk+Z3cpfHxkZWxldGUgeXdbYV19KG8scyxjLHUpLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGEsbyxzLGMsdSxsLGgsZixkLHAseSxnPWR3Lmxlbmd0aCxtPSEwO2ZvcihpPTA7aTxnOysraSlpZihhPWR3W2ldKXtmb3Iobz1hLnNpdGUscz0oYz1hLmhhbGZlZGdlcykubGVuZ3RoO3MtLTspeXdbY1tzXV18fGMuc3BsaWNlKHMsMSk7Zm9yKHM9MCx1PWMubGVuZ3RoO3M8dTspcD0oZD1RayhhLHl3W2Nbc11dKSlbMF0seT1kWzFdLGg9KGw9S2soYSx5d1tjWysrcyV1XV0pKVswXSxmPWxbMV0sKE1hdGguYWJzKHAtaCk+Z3d8fE1hdGguYWJzKHktZik+Z3cpJiYoYy5zcGxpY2UocywwLHl3LnB1c2goSGsobyxkLE1hdGguYWJzKHAtdCk8Z3cmJnIteT5ndz9bdCxNYXRoLmFicyhoLXQpPGd3P2Y6cl06TWF0aC5hYnMoeS1yKTxndyYmbi1wPmd3P1tNYXRoLmFicyhmLXIpPGd3P2g6bixyXTpNYXRoLmFicyhwLW4pPGd3JiZ5LWU+Z3c/W24sTWF0aC5hYnMoaC1uKTxndz9mOmVdOk1hdGguYWJzKHktZSk8Z3cmJnAtdD5ndz9bTWF0aC5hYnMoZi1lKTxndz9oOnQsZV06bnVsbCkpLTEpLCsrdSk7dSYmKG09ITEpfWlmKG0pe3ZhciB2LGIseCxfPTEvMDtmb3IoaT0wLG09bnVsbDtpPGc7KytpKShhPWR3W2ldKSYmKHg9KHY9KG89YS5zaXRlKVswXS10KSp2KyhiPW9bMV0tZSkqYik8XyYmKF89eCxtPWEpO2lmKG0pe3ZhciBrPVt0LGVdLHc9W3Qscl0sVD1bbixyXSxFPVtuLGVdO20uaGFsZmVkZ2VzLnB1c2goeXcucHVzaChIayhvPW0uc2l0ZSxrLHcpKS0xLHl3LnB1c2goSGsobyx3LFQpKS0xLHl3LnB1c2goSGsobyxULEUpKS0xLHl3LnB1c2goSGsobyxFLGspKS0xKX19Zm9yKGk9MDtpPGc7KytpKShhPWR3W2ldKSYmKGEuaGFsZmVkZ2VzLmxlbmd0aHx8ZGVsZXRlIGR3W2ldKX0obyxzLGMsdSl9dGhpcy5lZGdlcz15dyx0aGlzLmNlbGxzPWR3LGZ3PXB3PXl3PWR3PW51bGx9YncucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjpidyxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKChmdW5jdGlvbihlKXt2YXIgbj1lLmhhbGZlZGdlcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBLayhlLHRbbl0pfSkpO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pKX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKG4scil7aWYoYT0oaT1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgaSxhLG8scyxjLHUsbD1uLnNpdGUsaD0tMSxmPWVbaVthLTFdXSxkPWYubGVmdD09PWw/Zi5yaWdodDpmLmxlZnQ7KytoPGE7KW89ZCxkPShmPWVbaVtoXV0pLmxlZnQ9PT1sP2YucmlnaHQ6Zi5sZWZ0LG8mJmQmJnI8by5pbmRleCYmcjxkLmluZGV4JiYoYz1vLHU9ZCwoKHM9bClbMF0tdVswXSkqKGNbMV0tc1sxXSktKHNbMF0tY1swXSkqKHVbMV0tc1sxXSk8MCkmJnQucHVzaChbbC5kYXRhLG8uZGF0YSxkLmRhdGFdKX0pKSx0fSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQucmlnaHR9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQubGVmdC5kYXRhLHRhcmdldDp0LnJpZ2h0LmRhdGF9fSkpfSxmaW5kOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHIsaSxhPXRoaXMsbz1hLl9mb3VuZHx8MCxzPWEuY2VsbHMubGVuZ3RoOyEoaT1hLmNlbGxzW29dKTspaWYoKytvPj1zKXJldHVybiBudWxsO3ZhciBjPXQtaS5zaXRlWzBdLHU9ZS1pLnNpdGVbMV0sbD1jKmMrdSp1O2Rve2k9YS5jZWxsc1tyPW9dLG89bnVsbCxpLmhhbGZlZGdlcy5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1hLmVkZ2VzW25dLHM9ci5sZWZ0O2lmKHMhPT1pLnNpdGUmJnN8fChzPXIucmlnaHQpKXt2YXIgYz10LXNbMF0sdT1lLXNbMV0saD1jKmMrdSp1O2g8bCYmKGw9aCxvPXMuaW5kZXgpfX0pKX13aGlsZShudWxsIT09byk7cmV0dXJuIGEuX2ZvdW5kPXIsbnVsbD09bnx8bDw9bipuP2kuc2l0ZTpudWxsfX07dmFyIHh3PWZ1bmN0aW9uKCl7dmFyIHQ9RmssZT1QayxuPW51bGw7ZnVuY3Rpb24gcihyKXtyZXR1cm4gbmV3IGJ3KHIubWFwKChmdW5jdGlvbihuLGkpe3ZhciBhPVtNYXRoLnJvdW5kKHQobixpLHIpL2d3KSpndyxNYXRoLnJvdW5kKGUobixpLHIpL2d3KSpnd107cmV0dXJuIGEuaW5kZXg9aSxhLmRhdGE9bixhfSkpLG4pfXJldHVybiByLnBvbHlnb25zPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpLnBvbHlnb25zKCl9LHIubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkubGlua3MoKX0sci50cmlhbmdsZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkudHJpYW5nbGVzKCl9LHIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlJrKCtlKSxyKTp0fSxyLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSaygrdCkscik6ZX0sci5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOltbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dLHIpOm4mJltbblswXVswXSxuWzBdWzFdXSxbblsxXVswXSxuWzFdWzFdXV19LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1swLDBdLFsrdFswXSwrdFsxXV1dLHIpOm4mJltuWzFdWzBdLW5bMF1bMF0sblsxXVsxXS1uWzBdWzFdXX0scn0sX3c9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtmdW5jdGlvbiBrdyh0LGUsbil7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnRyYW5zZm9ybT1ufWZ1bmN0aW9uIHd3KHQsZSxuKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9bn13dy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnd3LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyB3dyh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IHd3KHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIFR3PW5ldyB3dygxLDAsMCk7ZnVuY3Rpb24gRXcodCl7Zm9yKDshdC5fX3pvb207KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBUdztyZXR1cm4gdC5fX3pvb219ZnVuY3Rpb24gQ3coKXt1ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1Fdy5wcm90b3R5cGU9d3cucHJvdG90eXBlO3ZhciBTdz1mdW5jdGlvbigpe3VlLnByZXZlbnREZWZhdWx0KCksdWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9O2Z1bmN0aW9uIEF3KCl7cmV0dXJuIXVlLmN0cmxLZXkmJiF1ZS5idXR0b259ZnVuY3Rpb24gTXcoKXt2YXIgdD10aGlzO3JldHVybiB0IGluc3RhbmNlb2YgU1ZHRWxlbWVudD8odD10Lm93bmVyU1ZHRWxlbWVudHx8dCkuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1sodD10LnZpZXdCb3guYmFzZVZhbCkueCx0LnldLFt0LngrdC53aWR0aCx0LnkrdC5oZWlnaHRdXTpbWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV06W1swLDBdLFt0LmNsaWVudFdpZHRoLHQuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24gT3coKXtyZXR1cm4gdGhpcy5fX3pvb218fFR3fWZ1bmN0aW9uIE53KCl7cmV0dXJuLXVlLmRlbHRhWSooMT09PXVlLmRlbHRhTW9kZT8uMDU6dWUuZGVsdGFNb2RlPzE6LjAwMil9ZnVuY3Rpb24gQncoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gRHcodCxlLG4pe3ZhciByPXQuaW52ZXJ0WChlWzBdWzBdKS1uWzBdWzBdLGk9dC5pbnZlcnRYKGVbMV1bMF0pLW5bMV1bMF0sYT10LmludmVydFkoZVswXVsxXSktblswXVsxXSxvPXQuaW52ZXJ0WShlWzFdWzFdKS1uWzFdWzFdO3JldHVybiB0LnRyYW5zbGF0ZShpPnI/KHIraSkvMjpNYXRoLm1pbigwLHIpfHxNYXRoLm1heCgwLGkpLG8+YT8oYStvKS8yOk1hdGgubWluKDAsYSl8fE1hdGgubWF4KDAsbykpfXZhciBMdz1mdW5jdGlvbigpe3ZhciB0LGUsbj1BdyxyPU13LGk9RHcsYT1OdyxvPUJ3LHM9WzAsMS8wXSxjPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHU9MjUwLGw9ZHAsaD1odCgic3RhcnQiLCJ6b29tIiwiZW5kIiksZj0wO2Z1bmN0aW9uIGQodCl7dC5wcm9wZXJ0eSgiX196b29tIixPdykub24oIndoZWVsLnpvb20iLHgpLm9uKCJtb3VzZWRvd24uem9vbSIsXykub24oImRibGNsaWNrLnpvb20iLGspLmZpbHRlcihvKS5vbigidG91Y2hzdGFydC56b29tIix3KS5vbigidG91Y2htb3ZlLnpvb20iLFQpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLEUpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuKGU9TWF0aC5tYXgoc1swXSxNYXRoLm1pbihzWzFdLGUpKSk9PT10Lms/dDpuZXcgd3coZSx0LngsdC55KX1mdW5jdGlvbiB5KHQsZSxuKXt2YXIgcj1lWzBdLW5bMF0qdC5rLGk9ZVsxXS1uWzFdKnQuaztyZXR1cm4gcj09PXQueCYmaT09PXQueT90Om5ldyB3dyh0LmsscixpKX1mdW5jdGlvbiBnKHQpe3JldHVyblsoK3RbMF1bMF0rICt0WzFdWzBdKS8yLCgrdFswXVsxXSsgK3RbMV1bMV0pLzJdfWZ1bmN0aW9uIG0odCxlLG4pe3Qub24oInN0YXJ0Lnpvb20iLChmdW5jdGlvbigpe3YodGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIiwoZnVuY3Rpb24oKXt2KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2Vlbigiem9vbSIsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxpPWFyZ3VtZW50cyxhPXYodCxpKSxvPXIuYXBwbHkodCxpKSxzPW51bGw9PW4/ZyhvKToiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHQsaSk6bixjPU1hdGgubWF4KG9bMV1bMF0tb1swXVswXSxvWzFdWzFdLW9bMF1bMV0pLHU9dC5fX3pvb20saD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHQsaSk6ZSxmPWwodS5pbnZlcnQocykuY29uY2F0KGMvdS5rKSxoLmludmVydChzKS5jb25jYXQoYy9oLmspKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYoMT09PXQpdD1oO2Vsc2V7dmFyIGU9Zih0KSxuPWMvZVsyXTt0PW5ldyB3dyhuLHNbMF0tZVswXSpuLHNbMV0tZVsxXSpuKX1hLnpvb20obnVsbCx0KX19KSl9ZnVuY3Rpb24gdih0LGUsbil7cmV0dXJuIW4mJnQuX196b29taW5nfHxuZXcgYih0LGUpfWZ1bmN0aW9uIGIodCxlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PXIuYXBwbHkodCxlKSx0aGlzLnRhcHM9MH1mdW5jdGlvbiB4KCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXYodGhpcyxhcmd1bWVudHMpLGU9dGhpcy5fX3pvb20scj1NYXRoLm1heChzWzBdLE1hdGgubWluKHNbMV0sZS5rKk1hdGgucG93KDIsYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksbz1Ebih0aGlzKTtpZih0LndoZWVsKXQubW91c2VbMF1bMF09PT1vWzBdJiZ0Lm1vdXNlWzBdWzFdPT09b1sxXXx8KHQubW91c2VbMV09ZS5pbnZlcnQodC5tb3VzZVswXT1vKSksY2xlYXJUaW1lb3V0KHQud2hlZWwpO2Vsc2V7aWYoZS5rPT09cilyZXR1cm47dC5tb3VzZT1bbyxlLmludmVydChvKV0sc3IodGhpcyksdC5zdGFydCgpfVN3KCksdC53aGVlbD1zZXRUaW1lb3V0KHUsMTUwKSx0Lnpvb20oIm1vdXNlIixpKHkocChlLHIpLHQubW91c2VbMF0sdC5tb3VzZVsxXSksdC5leHRlbnQsYykpfWZ1bmN0aW9uIHUoKXt0LndoZWVsPW51bGwsdC5lbmQoKX19ZnVuY3Rpb24gXygpe2lmKCFlJiZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9dih0aGlzLGFyZ3VtZW50cywhMCkscj13ZSh1ZS52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLHUsITApLm9uKCJtb3VzZXVwLnpvb20iLGwsITApLGE9RG4odGhpcyksbz11ZS5jbGllbnRYLHM9dWUuY2xpZW50WTtDZSh1ZS52aWV3KSxDdygpLHQubW91c2U9W2EsdGhpcy5fX3pvb20uaW52ZXJ0KGEpXSxzcih0aGlzKSx0LnN0YXJ0KCl9ZnVuY3Rpb24gdSgpe2lmKFN3KCksIXQubW92ZWQpe3ZhciBlPXVlLmNsaWVudFgtbyxuPXVlLmNsaWVudFktczt0Lm1vdmVkPWUqZStuKm4+Zn10Lnpvb20oIm1vdXNlIixpKHkodC50aGF0Ll9fem9vbSx0Lm1vdXNlWzBdPURuKHQudGhhdCksdC5tb3VzZVsxXSksdC5leHRlbnQsYykpfWZ1bmN0aW9uIGwoKXtyLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLFNlKHVlLnZpZXcsdC5tb3ZlZCksU3coKSx0LmVuZCgpfX1mdW5jdGlvbiBrKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXRoaXMuX196b29tLGU9RG4odGhpcyksYT10LmludmVydChlKSxvPXQuayoodWUuc2hpZnRLZXk/LjU6Mikscz1pKHkocCh0LG8pLGUsYSksci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYyk7U3coKSx1PjA/d2UodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHUpLmNhbGwobSxzLGUpOndlKHRoaXMpLmNhbGwoZC50cmFuc2Zvcm0scyl9fWZ1bmN0aW9uIHcoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGUscixpLGEsbz11ZS50b3VjaGVzLHM9by5sZW5ndGgsYz12KHRoaXMsYXJndW1lbnRzLHVlLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PXMpO2ZvcihDdygpLHI9MDtyPHM7KytyKWk9b1tyXSxhPVthPUJuKHRoaXMsbyxpLmlkZW50aWZpZXIpLHRoaXMuX196b29tLmludmVydChhKSxpLmlkZW50aWZpZXJdLGMudG91Y2gwP2MudG91Y2gxfHxjLnRvdWNoMFsyXT09PWFbMl18fChjLnRvdWNoMT1hLGMudGFwcz0wKTooYy50b3VjaDA9YSxlPSEwLGMudGFwcz0xKyEhdCk7dCYmKHQ9Y2xlYXJUaW1lb3V0KHQpKSxlJiYoYy50YXBzPDImJih0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dD1udWxsfSksNTAwKSksc3IodGhpcyksYy5zdGFydCgpKX19ZnVuY3Rpb24gVCgpe2lmKHRoaXMuX196b29taW5nKXt2YXIgZSxuLHIsYSxvPXYodGhpcyxhcmd1bWVudHMpLHM9dWUuY2hhbmdlZFRvdWNoZXMsdT1zLmxlbmd0aDtmb3IoU3coKSx0JiYodD1jbGVhclRpbWVvdXQodCkpLG8udGFwcz0wLGU9MDtlPHU7KytlKW49c1tlXSxyPUJuKHRoaXMscyxuLmlkZW50aWZpZXIpLG8udG91Y2gwJiZvLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9vLnRvdWNoMFswXT1yOm8udG91Y2gxJiZvLnRvdWNoMVsyXT09PW4uaWRlbnRpZmllciYmKG8udG91Y2gxWzBdPXIpO2lmKG49by50aGF0Ll9fem9vbSxvLnRvdWNoMSl7dmFyIGw9by50b3VjaDBbMF0saD1vLnRvdWNoMFsxXSxmPW8udG91Y2gxWzBdLGQ9by50b3VjaDFbMV0sZz0oZz1mWzBdLWxbMF0pKmcrKGc9ZlsxXS1sWzFdKSpnLG09KG09ZFswXS1oWzBdKSptKyhtPWRbMV0taFsxXSkqbTtuPXAobixNYXRoLnNxcnQoZy9tKSkscj1bKGxbMF0rZlswXSkvMiwobFsxXStmWzFdKS8yXSxhPVsoaFswXStkWzBdKS8yLChoWzFdK2RbMV0pLzJdfWVsc2V7aWYoIW8udG91Y2gwKXJldHVybjtyPW8udG91Y2gwWzBdLGE9by50b3VjaDBbMV19by56b29tKCJ0b3VjaCIsaSh5KG4scixhKSxvLmV4dGVudCxjKSl9fWZ1bmN0aW9uIEUoKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHQsbixyPXYodGhpcyxhcmd1bWVudHMpLGk9dWUuY2hhbmdlZFRvdWNoZXMsYT1pLmxlbmd0aDtmb3IoQ3coKSxlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2U9bnVsbH0pLDUwMCksdD0wO3Q8YTsrK3Qpbj1pW3RdLHIudG91Y2gwJiZyLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9kZWxldGUgci50b3VjaDA6ci50b3VjaDEmJnIudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiZkZWxldGUgci50b3VjaDE7aWYoci50b3VjaDEmJiFyLnRvdWNoMCYmKHIudG91Y2gwPXIudG91Y2gxLGRlbGV0ZSByLnRvdWNoMSksci50b3VjaDApci50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KHIudG91Y2gwWzBdKTtlbHNlIGlmKHIuZW5kKCksMj09PXIudGFwcyl7dmFyIG89d2UodGhpcykub24oImRibGNsaWNrLnpvb20iKTtvJiZvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBkLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O3IucHJvcGVydHkoIl9fem9vbSIsT3cpLHQhPT1yP20odCxlLG4pOnIuaW50ZXJydXB0KCkuZWFjaCgoZnVuY3Rpb24oKXt2KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKS5lbmQoKX0pKX0sZC5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSxuKXtkLnNjYWxlVG8odCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fem9vbS5rLG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gdCpufSksbil9LGQuc2NhbGVUbz1mdW5jdGlvbih0LGUsbil7ZC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhPXRoaXMuX196b29tLG89bnVsbD09bj9nKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4scz1hLmludmVydChvKSx1PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIGkoeShwKGEsdSksbyxzKSx0LGMpfSksbil9LGQudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxlLG4pe2QudHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYyl9KSl9LGQudHJhbnNsYXRlVG89ZnVuY3Rpb24odCxlLG4sYSl7ZC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXRoaXMuX196b29tLHM9bnVsbD09YT9nKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE7cmV0dXJuIGkoVHcudHJhbnNsYXRlKHNbMF0sc1sxXSkuc2NhbGUoby5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/LWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1lLCJmdW5jdGlvbiI9PXR5cGVvZiBuPy1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotbiksdCxjKX0pLGEpfSxiLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPWUuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1lLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1lLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXt5ZShuZXcga3coZCx0LHRoaXMudGhhdC5fX3pvb20pLGguYXBwbHksaCxbdCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxkLndoZWVsRGVsdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfdygrdCksZCk6YX0sZC5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfdyghIXQpLGQpOm59LGQudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6X3coISF0KSxkKTpvfSxkLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ol93KFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxkKTpyfSxkLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzWzBdPSt0WzBdLHNbMV09K3RbMV0sZCk6W3NbMF0sc1sxXV19LGQudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjWzBdWzBdPSt0WzBdWzBdLGNbMV1bMF09K3RbMV1bMF0sY1swXVsxXT0rdFswXVsxXSxjWzFdWzFdPSt0WzFdWzFdLGQpOltbY1swXVswXSxjWzBdWzFdXSxbY1sxXVswXSxjWzFdWzFdXV19LGQuY29uc3RyYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZCk6aX0sZC5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxkKTp1fSxkLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsZCk6bH0sZC5vbj1mdW5jdGlvbigpe3ZhciB0PWgub24uYXBwbHkoaCxhcmd1bWVudHMpO3JldHVybiB0PT09aD9kOnR9LGQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0odD0rdCkqdCxkKTpNYXRoLnNxcnQoZil9LGR9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX0obigxNzEpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDNdLHI9WzEsNV0saT1bMSw3XSxhPVsyLDVdLG89WzEsMTVdLHM9WzEsMTddLGM9WzEsMThdLHU9WzEsMjBdLGw9WzEsMjFdLGg9WzEsMjJdLGY9WzEsMjRdLGQ9WzEsMjVdLHA9WzEsMjZdLHk9WzEsMjddLGc9WzEsMjhdLG09WzEsMjldLHY9WzEsMzJdLGI9WzEsMzNdLHg9WzEsMzZdLF89WzEsNCw1LDE2LDIxLDIyLDIzLDI1LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM2LDM3LDQ4LDU4XSxrPVsxLDQ0XSx3PVs0LDUsMTYsMjEsMjIsMjMsMjUsMjcsMjgsMjksMzAsMzEsMzMsMzcsNDgsNThdLFQ9WzQsNSwxNiwyMSwyMiwyMywyNSwyNywyOCwyOSwzMCwzMSwzMywzNiwzNyw0OCw1OF0sRT1bNCw1LDE2LDIxLDIyLDIzLDI1LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM3LDQ4LDU4XSxDPVs0Niw0Nyw0OF0sUz1bMSw0LDUsNywxNiwyMSwyMiwyMywyNSwyNywyOCwyOSwzMCwzMSwzMywzNSwzNiwzNyw0OCw1OF0sQT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxORVdMSU5FOjUsZGlyZWN0aXZlOjYsU0Q6Nyxkb2N1bWVudDo4LGxpbmU6OSxzdGF0ZW1lbnQ6MTAsb3BlbkRpcmVjdGl2ZToxMSx0eXBlRGlyZWN0aXZlOjEyLGNsb3NlRGlyZWN0aXZlOjEzLCI6IjoxNCxhcmdEaXJlY3RpdmU6MTUscGFydGljaXBhbnQ6MTYsYWN0b3I6MTcsQVM6MTgscmVzdE9mTGluZToxOSxzaWduYWw6MjAsYXV0b251bWJlcjoyMSxhY3RpdmF0ZToyMixkZWFjdGl2YXRlOjIzLG5vdGVfc3RhdGVtZW50OjI0LHRpdGxlOjI1LHRleHQyOjI2LGxvb3A6MjcsZW5kOjI4LHJlY3Q6Mjksb3B0OjMwLGFsdDozMSxlbHNlX3NlY3Rpb25zOjMyLHBhcjozMyxwYXJfc2VjdGlvbnM6MzQsYW5kOjM1LGVsc2U6MzYsbm90ZTozNyxwbGFjZW1lbnQ6Mzgsb3ZlcjozOSxhY3Rvcl9wYWlyOjQwLHNwYWNlTGlzdDo0MSwiLCI6NDIsbGVmdF9vZjo0MyxyaWdodF9vZjo0NCxzaWduYWx0eXBlOjQ1LCIrIjo0NiwiLSI6NDcsQUNUT1I6NDgsU09MSURfT1BFTl9BUlJPVzo0OSxET1RURURfT1BFTl9BUlJPVzo1MCxTT0xJRF9BUlJPVzo1MSxET1RURURfQVJST1c6NTIsU09MSURfQ1JPU1M6NTMsRE9UVEVEX0NST1NTOjU0LFNPTElEX1BPSU5UOjU1LERPVFRFRF9QT0lOVDo1NixUWFQ6NTcsb3Blbl9kaXJlY3RpdmU6NTgsdHlwZV9kaXJlY3RpdmU6NTksYXJnX2RpcmVjdGl2ZTo2MCxjbG9zZV9kaXJlY3RpdmU6NjEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw3OiJTRCIsMTQ6IjoiLDE2OiJwYXJ0aWNpcGFudCIsMTg6IkFTIiwxOToicmVzdE9mTGluZSIsMjE6ImF1dG9udW1iZXIiLDIyOiJhY3RpdmF0ZSIsMjM6ImRlYWN0aXZhdGUiLDI1OiJ0aXRsZSIsMjc6Imxvb3AiLDI4OiJlbmQiLDI5OiJyZWN0IiwzMDoib3B0IiwzMToiYWx0IiwzMzoicGFyIiwzNToiYW5kIiwzNjoiZWxzZSIsMzc6Im5vdGUiLDM5OiJvdmVyIiw0MjoiLCIsNDM6ImxlZnRfb2YiLDQ0OiJyaWdodF9vZiIsNDY6IisiLDQ3OiItIiw0ODoiQUNUT1IiLDQ5OiJTT0xJRF9PUEVOX0FSUk9XIiw1MDoiRE9UVEVEX09QRU5fQVJST1ciLDUxOiJTT0xJRF9BUlJPVyIsNTI6IkRPVFRFRF9BUlJPVyIsNTM6IlNPTElEX0NST1NTIiw1NDoiRE9UVEVEX0NST1NTIiw1NToiU09MSURfUE9JTlQiLDU2OiJET1RURURfUE9JTlQiLDU3OiJUWFQiLDU4OiJvcGVuX2RpcmVjdGl2ZSIsNTk6InR5cGVfZGlyZWN0aXZlIiw2MDoiYXJnX2RpcmVjdGl2ZSIsNjE6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywyXSxbOCwwXSxbOCwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbNiw0XSxbNiw2XSxbMTAsNV0sWzEwLDNdLFsxMCwyXSxbMTAsMV0sWzEwLDNdLFsxMCwzXSxbMTAsMl0sWzEwLDNdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDFdLFszNCwxXSxbMzQsNF0sWzMyLDFdLFszMiw0XSxbMjQsNF0sWzI0LDRdLFs0MSwyXSxbNDEsMV0sWzQwLDNdLFs0MCwxXSxbMzgsMV0sWzM4LDFdLFsyMCw1XSxbMjAsNV0sWzIwLDRdLFsxNywxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFsyNiwxXSxbMTEsMV0sWzEyLDFdLFsxNSwxXSxbMTMsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnJldHVybiByLmFwcGx5KGFbc10pLGFbc107Y2FzZSA1OnRoaXMuJD1bXTticmVhaztjYXNlIDY6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMjphW3MtM10uZGVzY3JpcHRpb249ci5wYXJzZU1lc3NhZ2UoYVtzLTFdKSx0aGlzLiQ9YVtzLTNdO2JyZWFrO2Nhc2UgMTM6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDE1OnIuZW5hYmxlU2VxdWVuY2VOdW1iZXJzKCk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9e3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOnIuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOmFbcy0xXX07YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9e3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6YVtzLTFdfTticmVhaztjYXNlIDE5OnRoaXMuJD1be3R5cGU6InNldFRpdGxlIix0ZXh0OmFbcy0xXX1dO2JyZWFrO2Nhc2UgMjA6YVtzLTFdLnVuc2hpZnQoe3R5cGU6Imxvb3BTdGFydCIsbG9vcFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuTE9PUF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDphW3MtMl0sc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkxPT1BfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDIxOmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJyZWN0U3RhcnQiLGNvbG9yOnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlJFQ1RfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToicmVjdEVuZCIsY29sb3I6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuUkVDVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjI6YVtzLTFdLnVuc2hpZnQoe3R5cGU6Im9wdFN0YXJ0IixvcHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLk9QVF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJvcHRFbmQiLG9wdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuT1BUX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAyMzphW3MtMV0udW5zaGlmdCh7dHlwZToiYWx0U3RhcnQiLGFsdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQUxUX1NUQVJUfSksYVtzLTFdLnB1c2goe3R5cGU6ImFsdEVuZCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjQ6YVtzLTFdLnVuc2hpZnQoe3R5cGU6InBhclN0YXJ0IixwYXJUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlBBUl9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDI3OnRoaXMuJD1hW3MtM10uY29uY2F0KFt7dHlwZToiYW5kIixwYXJUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0xXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlBBUl9BTkR9LGFbc11dKTticmVhaztjYXNlIDI5OnRoaXMuJD1hW3MtM10uY29uY2F0KFt7dHlwZToiZWxzZSIsYWx0VGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMV0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BTFRfRUxTRX0sYVtzXV0pO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDphW3MtMl0sYWN0b3I6YVtzLTFdLmFjdG9yLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgMzE6YVtzLTJdPVtdLmNvbmNhdChhW3MtMV0sYVtzLTFdKS5zbGljZSgwLDIpLGFbcy0yXVswXT1hW3MtMl1bMF0uYWN0b3IsYVtzLTJdWzFdPWFbcy0yXVsxXS5hY3Rvcix0aGlzLiQ9W2Fbcy0xXSx7dHlwZToiYWRkTm90ZSIscGxhY2VtZW50OnIuUExBQ0VNRU5ULk9WRVIsYWN0b3I6YVtzLTJdLnNsaWNlKDAsMiksdGV4dDphW3NdfV07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9W2Fbcy0yXSxhW3NdXTticmVhaztjYXNlIDM1OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPXIuUExBQ0VNRU5ULkxFRlRPRjticmVhaztjYXNlIDM3OnRoaXMuJD1yLlBMQUNFTUVOVC5SSUdIVE9GO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVthW3MtNF0sYVtzLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmFbcy00XS5hY3Rvcix0bzphW3MtMV0uYWN0b3Isc2lnbmFsVHlwZTphW3MtM10sbXNnOmFbc119LHt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjphW3MtMV19XTticmVhaztjYXNlIDM5OnRoaXMuJD1bYVtzLTRdLGFbcy0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTphW3MtNF0uYWN0b3IsdG86YVtzLTFdLmFjdG9yLHNpZ25hbFR5cGU6YVtzLTNdLG1zZzphW3NdfSx7dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOnIuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjphW3MtNF19XTticmVhaztjYXNlIDQwOnRoaXMuJD1bYVtzLTNdLGFbcy0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTphW3MtM10uYWN0b3IsdG86YVtzLTFdLmFjdG9yLHNpZ25hbFR5cGU6YVtzLTJdLG1zZzphW3NdfV07YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9e3R5cGU6ImFkZEFjdG9yIixhY3RvcjphW3NdfTticmVhaztjYXNlIDQyOnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEX09QRU47YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9ci5MSU5FVFlQRS5ET1RURURfT1BFTjticmVhaztjYXNlIDQ0OnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXIuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9ci5MSU5FVFlQRS5ET1RURURfQ1JPU1M7YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRF9QT0lOVDticmVhaztjYXNlIDQ5OnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDUwOnRoaXMuJD1yLnBhcnNlTWVzc2FnZShhW3NdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO2JyZWFrO2Nhc2UgNTE6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDUyOnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDUzOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA1NDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJzZXF1ZW5jZSIpfX0sdGFibGU6W3szOjEsNDplLDU6biw2OjQsNzpyLDExOjYsNTg6aX0sezE6WzNdfSx7Mzo4LDQ6ZSw1Om4sNjo0LDc6ciwxMTo2LDU4Oml9LHszOjksNDplLDU6biw2OjQsNzpyLDExOjYsNTg6aX0sezM6MTAsNDplLDU6biw2OjQsNzpyLDExOjYsNTg6aX0sdChbMSw0LDUsMTYsMjEsMjIsMjMsMjUsMjcsMjksMzAsMzEsMzMsMzcsNDgsNThdLGEsezg6MTF9KSx7MTI6MTIsNTk6WzEsMTNdfSx7NTk6WzIsNTFdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx7MTpbMiw0XSw0Om8sNTpzLDY6MzAsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI5OnAsMzA6eSwzMTpnLDMzOm0sMzc6diw0ODpiLDU4Oml9LHsxMzozNCwxNDpbMSwzNV0sNjE6eH0sdChbMTQsNjFdLFsyLDUyXSksdChfLFsyLDZdKSx7NjozMCwxMDozNywxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI5OnAsMzA6eSwzMTpnLDMzOm0sMzc6diw0ODpiLDU4Oml9LHQoXyxbMiw4XSksdChfLFsyLDldKSx7MTc6MzgsNDg6Yn0sezU6WzEsMzldfSx0KF8sWzIsMTVdKSx7MTc6NDAsNDg6Yn0sezE3OjQxLDQ4OmJ9LHs1OlsxLDQyXX0sezI2OjQzLDU3Omt9LHsxOTpbMSw0NV19LHsxOTpbMSw0Nl19LHsxOTpbMSw0N119LHsxOTpbMSw0OF19LHsxOTpbMSw0OV19LHQoXyxbMiwyNV0pLHs0NTo1MCw0OTpbMSw1MV0sNTA6WzEsNTJdLDUxOlsxLDUzXSw1MjpbMSw1NF0sNTM6WzEsNTVdLDU0OlsxLDU2XSw1NTpbMSw1N10sNTY6WzEsNThdfSx7Mzg6NTksMzk6WzEsNjBdLDQzOlsxLDYxXSw0NDpbMSw2Ml19LHQoWzUsMTgsNDIsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTddLFsyLDQxXSksezU6WzEsNjNdfSx7MTU6NjQsNjA6WzEsNjVdfSx7NTpbMiw1NF19LHQoXyxbMiw3XSksezU6WzEsNjddLDE4OlsxLDY2XX0sdChfLFsyLDE0XSksezU6WzEsNjhdfSx7NTpbMSw2OV19LHQoXyxbMiwxOF0pLHs1OlsxLDcwXX0sezU6WzIsNTBdfSx0KHcsYSx7ODo3MX0pLHQodyxhLHs4OjcyfSksdCh3LGEsezg6NzN9KSx0KFQsYSx7MzI6NzQsODo3NX0pLHQoRSxhLHszNDo3Niw4Ojc3fSksezE3OjgwLDQ2OlsxLDc4XSw0NzpbMSw3OV0sNDg6Yn0sdChDLFsyLDQyXSksdChDLFsyLDQzXSksdChDLFsyLDQ0XSksdChDLFsyLDQ1XSksdChDLFsyLDQ2XSksdChDLFsyLDQ3XSksdChDLFsyLDQ4XSksdChDLFsyLDQ5XSksezE3OjgxLDQ4OmJ9LHsxNzo4Myw0MDo4Miw0ODpifSx7NDg6WzIsMzZdfSx7NDg6WzIsMzddfSx0KFMsWzIsMTBdKSx7MTM6ODQsNjE6eH0sezYxOlsyLDUzXX0sezE5OlsxLDg1XX0sdChfLFsyLDEzXSksdChfLFsyLDE2XSksdChfLFsyLDE3XSksdChfLFsyLDE5XSksezQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjg6WzEsODZdLDI5OnAsMzA6eSwzMTpnLDMzOm0sMzc6diw0ODpiLDU4Oml9LHs0Om8sNTpzLDY6MzAsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI4OlsxLDg3XSwyOTpwLDMwOnksMzE6ZywzMzptLDM3OnYsNDg6Yiw1ODppfSx7NDpvLDU6cyw2OjMwLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjMxLDIwOjE5LDIxOnUsMjI6bCwyMzpoLDI0OjIzLDI1OmYsMjc6ZCwyODpbMSw4OF0sMjk6cCwzMDp5LDMxOmcsMzM6bSwzNzp2LDQ4OmIsNTg6aX0sezI4OlsxLDg5XX0sezQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjg6WzIsMjhdLDI5OnAsMzA6eSwzMTpnLDMzOm0sMzY6WzEsOTBdLDM3OnYsNDg6Yiw1ODppfSx7Mjg6WzEsOTFdfSx7NDpvLDU6cyw2OjMwLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjMxLDIwOjE5LDIxOnUsMjI6bCwyMzpoLDI0OjIzLDI1OmYsMjc6ZCwyODpbMiwyNl0sMjk6cCwzMDp5LDMxOmcsMzM6bSwzNTpbMSw5Ml0sMzc6diw0ODpiLDU4Oml9LHsxNzo5Myw0ODpifSx7MTc6OTQsNDg6Yn0sezI2Ojk1LDU3Omt9LHsyNjo5Niw1NzprfSx7MjY6OTcsNTc6a30sezQyOlsxLDk4XSw1NzpbMiwzNV19LHs1OlsxLDk5XX0sezU6WzEsMTAwXX0sdChfLFsyLDIwXSksdChfLFsyLDIxXSksdChfLFsyLDIyXSksdChfLFsyLDIzXSksezE5OlsxLDEwMV19LHQoXyxbMiwyNF0pLHsxOTpbMSwxMDJdfSx7MjY6MTAzLDU3Omt9LHsyNjoxMDQsNTc6a30sezU6WzIsNDBdfSx7NTpbMiwzMF19LHs1OlsyLDMxXX0sezE3OjEwNSw0ODpifSx0KFMsWzIsMTFdKSx0KF8sWzIsMTJdKSx0KFQsYSx7ODo3NSwzMjoxMDZ9KSx0KEUsYSx7ODo3NywzNDoxMDd9KSx7NTpbMiwzOF19LHs1OlsyLDM5XX0sezU3OlsyLDM0XX0sezI4OlsyLDI5XX0sezI4OlsyLDI3XX1dLGRlZmF1bHRBY3Rpb25zOns3OlsyLDUxXSw4OlsyLDFdLDk6WzIsMl0sMTA6WzIsM10sMzY6WzIsNTRdLDQ0OlsyLDUwXSw2MTpbMiwzNl0sNjI6WzIsMzddLDY1OlsyLDUzXSw5NTpbMiw0MF0sOTY6WzIsMzBdLDk3OlsyLDMxXSwxMDM6WzIsMzhdLDEwNDpbMiwzOV0sMTA1OlsyLDM0XSwxMDY6WzIsMjldLDEwNzpbMiwyN119LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxULEUsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoRSBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxNPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksNTg7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDU5O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNjE7Y2FzZSA0OnJldHVybiA2MDtjYXNlIDU6cmV0dXJuIDU7Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwxNjtjYXNlIDEyOnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw0ODtjYXNlIDEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSwxODtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDI3O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwyOTtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzA7Y2FzZSAxODpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDMxO2Nhc2UgMTk6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNjtjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzM7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM1O2Nhc2UgMjI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxOTtjYXNlIDIzOnJldHVybiAyODtjYXNlIDI0OnJldHVybiA0MztjYXNlIDI1OnJldHVybiA0NDtjYXNlIDI2OnJldHVybiAzOTtjYXNlIDI3OnJldHVybiAzNztjYXNlIDI4OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIyO2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjM7Y2FzZSAzMDpyZXR1cm4gMjU7Y2FzZSAzMTpyZXR1cm4gNztjYXNlIDMyOnJldHVybiAyMTtjYXNlIDMzOnJldHVybiA0MjtjYXNlIDM0OnJldHVybiA1O2Nhc2UgMzU6cmV0dXJuIGUueXl0ZXh0PWUueXl0ZXh0LnRyaW0oKSw0ODtjYXNlIDM2OnJldHVybiA1MTtjYXNlIDM3OnJldHVybiA1MjtjYXNlIDM4OnJldHVybiA0OTtjYXNlIDM5OnJldHVybiA1MDtjYXNlIDQwOnJldHVybiA1MztjYXNlIDQxOnJldHVybiA1NDtjYXNlIDQyOnJldHVybiA1NTtjYXNlIDQzOnJldHVybiA1NjtjYXNlIDQ0OnJldHVybiA1NztjYXNlIDQ1OnJldHVybiA0NjtjYXNlIDQ2OnJldHVybiA0NztjYXNlIDQ3OnJldHVybiA1O2Nhc2UgNDg6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OnBhcnRpY2lwYW50XGIpL2ksL14oPzpbXlwtPjpcbiw7XSs/KD89KCg/IVxuKVxzKSthcyg/IVxuKVxzfFsjXG47XXwkKSkvaSwvXig/OmFzXGIpL2ksL14oPzooPzopKS9pLC9eKD86bG9vcFxiKS9pLC9eKD86cmVjdFxiKS9pLC9eKD86b3B0XGIpL2ksL14oPzphbHRcYikvaSwvXig/OmVsc2VcYikvaSwvXig/OnBhclxiKS9pLC9eKD86YW5kXGIpL2ksL14oPzooPzpbOl0/KD86bm8pP3dyYXApP1teI1xuO10qKS9pLC9eKD86ZW5kXGIpL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzpzZXF1ZW5jZURpYWdyYW1cYikvaSwvXig/OmF1dG9udW1iZXJcYikvaSwvXig/OiwpL2ksL14oPzo7KS9pLC9eKD86W15cK1wtPjpcbiw7XSsoKD8hKC14fC0teHwtXCl8LS1cKSkpW1wtXSpbXlwrXC0+OlxuLDtdKykqKS9pLC9eKD86LT4+KS9pLC9eKD86LS0+PikvaSwvXig/Oi0+KS9pLC9eKD86LS0+KS9pLC9eKD86LVt4XSkvaSwvXig/Oi0tW3hdKS9pLC9eKD86LVtcKV0pL2ksL14oPzotLVtcKV0pL2ksL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xuO10rKS9pLC9eKD86XCspL2ksL14oPzotKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMSw4XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzLDhdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNCw4XSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbNyw4LDEyXSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbNyw4LDEzLDE0XSxpbmNsdXNpdmU6ITF9LExJTkU6e3J1bGVzOls3LDgsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDgsOSwxMCwxMSwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIE8oKXt0aGlzLnl5PXt9fXJldHVybiBBLmxleGVyPU0sTy5wcm90b3R5cGU9QSxBLlBhcnNlcj1PLG5ldyBPfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMiksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIwMyk7dC5leHBvcnRzPXtHcmFwaDpyLkdyYXBoLGpzb246bigzMDYpLGFsZzpuKDMwNyksdmVyc2lvbjpyLnZlcnNpb259fSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9e2Nsb25lRGVlcDpuKDMxOCksY29uc3RhbnQ6big4OCksZGVmYXVsdHM6bigxNTQpLGVhY2g6big4OSksZmlsdGVyOm4oMTI4KSxmaW5kOm4oMzE5KSxmbGF0dGVuOm4oMTU2KSxmb3JFYWNoOm4oMTI2KSxmb3JJbjpuKDMyNiksaGFzOm4oOTQpLGlzVW5kZWZpbmVkOm4oMTM5KSxsYXN0Om4oMzI3KSxtYXA6bigxNDApLG1hcFZhbHVlczpuKDMyOCksbWF4Om4oMzI5KSxtZXJnZTpuKDMzMSksbWluOm4oMzM2KSxtaW5CeTpuKDMzNyksbm93Om4oMzM4KSxwaWNrOm4oMTYxKSxyYW5nZTpuKDE2MikscmVkdWNlOm4oMTQyKSxzb3J0Qnk6bigzNDUpLHVuaXF1ZUlkOm4oMTYzKSx2YWx1ZXM6bigxNDcpLHppcE9iamVjdDpuKDM1MCl9fWNhdGNoKHQpe31yfHwocj13aW5kb3cuXyksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIG49QXJyYXkuaXNBcnJheTt0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5OSksaT1uKDE3OCksYT1uKDE3OSksbz1uKDE4MCkscz17Zm9ybWF0OntrZXl3b3JkOmkuZGVmYXVsdCxoZXg6ci5kZWZhdWx0LHJnYjphLmRlZmF1bHQscmdiYTphLmRlZmF1bHQsaHNsOm8uZGVmYXVsdCxoc2xhOm8uZGVmYXVsdH0scGFyc2U6ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXIuZGVmYXVsdC5wYXJzZSh0KXx8YS5kZWZhdWx0LnBhcnNlKHQpfHxvLmRlZmF1bHQucGFyc2UodCl8fGkuZGVmYXVsdC5wYXJzZSh0KTtpZihlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0OiAiJyt0KyciJyl9LHN0cmluZ2lmeTpmdW5jdGlvbih0KXtyZXR1cm4hdC5jaGFuZ2VkJiZ0LmNvbG9yP3QuY29sb3I6dC50eXBlLmlzKDIpfHx2b2lkIDA9PT10LmRhdGEucj9vLmRlZmF1bHQuc3RyaW5naWZ5KHQpOnQuYTwxfHwhTnVtYmVyLmlzSW50ZWdlcih0LnIpfHwhTnVtYmVyLmlzSW50ZWdlcih0LmcpfHwhTnVtYmVyLmlzSW50ZWdlcih0LmIpP2EuZGVmYXVsdC5zdHJpbmdpZnkodCk6ci5kZWZhdWx0LnN0cmluZ2lmeSh0KX19O2UuZGVmYXVsdD1zfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC53ZWJwYWNrUG9seWZpbGx8fCh0LmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sdC5wYXRocz1bXSx0LmNoaWxkcmVufHwodC5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lml9fSksdC53ZWJwYWNrUG9seWZpbGw9MSksdH19LGZ1bmN0aW9uKHQsZSxuKXsKLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIENocmlzIFBldHRpdHQKICoKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwp0LmV4cG9ydHM9e2dyYXBobGliOm4oMzE2KSxkYWdyZTpuKDE1MyksaW50ZXJzZWN0Om4oMzc1KSxyZW5kZXI6bigzNzcpLHV0aWw6bigxNSksdmVyc2lvbjpuKDM4OSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDIwKS5HcmFwaDtmdW5jdGlvbiBhKHQsZSxuLGkpe3ZhciBhO2Rve2E9ci51bmlxdWVJZChpKX13aGlsZSh0Lmhhc05vZGUoYSkpO3JldHVybiBuLmR1bW15PWUsdC5zZXROb2RlKGEsbiksYX1mdW5jdGlvbiBvKHQpe3JldHVybiByLm1heChyLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKS5yYW5rO2lmKCFyLmlzVW5kZWZpbmVkKG4pKXJldHVybiBufSkpKX10LmV4cG9ydHM9e2FkZER1bW15Tm9kZTphLHNpbXBsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPShuZXcgaSkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgcj1lLmVkZ2Uobi52LG4udyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0saT10LmVkZ2Uobik7ZS5zZXRFZGdlKG4udixuLncse3dlaWdodDpyLndlaWdodCtpLndlaWdodCxtaW5sZW46TWF0aC5tYXgoci5taW5sZW4saS5taW5sZW4pfSl9KSksZX0sYXNOb25Db21wb3VuZEdyYXBoOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpKHttdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCl9KS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt0LmNoaWxkcmVuKG4pLmxlbmd0aHx8ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXtlLnNldEVkZ2Uobix0LmVkZ2UobikpfSkpLGV9LHN1Y2Nlc3NvcldlaWdodHM6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj17fTtyZXR1cm4gci5mb3JFYWNoKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS53XT0obltlLnddfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0scHJlZGVjZXNzb3JXZWlnaHRzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0LmluRWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS52XT0obltlLnZdfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0saW50ZXJzZWN0UmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtpZighbyYmIXMpdGhyb3cgbmV3IEVycm9yKCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUiKTtNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9YypzL28pO3JldHVybnt4Omkrbix5OmErcn19LGJ1aWxkTGF5ZXJNYXRyaXg6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAoci5yYW5nZShvKHQpKzEpLChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT10Lm5vZGUobiksYT1pLnJhbms7ci5pc1VuZGVmaW5lZChhKXx8KGVbYV1baS5vcmRlcl09bil9KSksZX0sbm9ybWFsaXplUmFua3M6ZnVuY3Rpb24odCl7dmFyIGU9ci5taW4oci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSkpO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQubm9kZShuKTtyLmhhcyhpLCJyYW5rIikmJihpLnJhbmstPWUpfSkpfSxyZW1vdmVFbXB0eVJhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWluKHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKSxuPVtdO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHIpe3ZhciBpPXQubm9kZShyKS5yYW5rLWU7bltpXXx8KG5baV09W10pLG5baV0ucHVzaChyKX0pKTt2YXIgaT0wLGE9dC5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO3IuZm9yRWFjaChuLChmdW5jdGlvbihlLG4pe3IuaXNVbmRlZmluZWQoZSkmJm4lYSE9MD8tLWk6aSYmci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3Qubm9kZShlKS5yYW5rKz1pfSkpfSkpfSxhZGRCb3JkZXJOb2RlOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXt3aWR0aDowLGhlaWdodDowfTthcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPW4saS5vcmRlcj1yKTtyZXR1cm4gYSh0LCJib3JkZXIiLGksZSl9LG1heFJhbms6byxwYXJ0aXRpb246ZnVuY3Rpb24odCxlKXt2YXIgbj17bGhzOltdLHJoczpbXX07cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0KXtlKHQpP24ubGhzLnB1c2godCk6bi5yaHMucHVzaCh0KX0pKSxufSx0aW1lOmZ1bmN0aW9uKHQsZSl7dmFyIG49ci5ub3coKTt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e2NvbnNvbGUubG9nKHQrIiB0aW1lOiAiKyhyLm5vdygpLW4pKyJtcyIpfX0sbm90aW1lOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUoKX19fSxmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPXtncmFwaGxpYjpuKDIwKSxsYXlvdXQ6bigzMTcpLGRlYnVnOm4oMzczKSx1dGlsOnt0aW1lOm4oOSkudGltZSxub3RpbWU6big5KS5ub3RpbWV9LHZlcnNpb246bigzNzQpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNzIpLGk9bigxNzMpLGE9bigxNzQpLG89e2NoYW5uZWw6ci5kZWZhdWx0LGxhbmc6aS5kZWZhdWx0LHVuaXQ6YS5kZWZhdWx0fTtlLmRlZmF1bHQ9b30sZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dC5leHBvcnRzPXt9O2Z1bmN0aW9uIGEoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBzKHQpe2lmKG49PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKG49PT1hfHwhbikmJnNldFRpbWVvdXQpcmV0dXJuIG49c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBuKHQsMCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBuLmNhbGwobnVsbCx0LDApfWNhdGNoKGUpe3JldHVybiBuLmNhbGwodGhpcyx0LDApfX19IWZ1bmN0aW9uKCl7dHJ5e249ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDphfWNhdGNoKHQpe249YX10cnl7cj0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpvfWNhdGNoKHQpe3I9b319KCk7dmFyIGMsdT1bXSxsPSExLGg9LTE7ZnVuY3Rpb24gZigpe2wmJmMmJihsPSExLGMubGVuZ3RoP3U9Yy5jb25jYXQodSk6aD0tMSx1Lmxlbmd0aCYmZCgpKX1mdW5jdGlvbiBkKCl7aWYoIWwpe3ZhciB0PXMoZik7bD0hMDtmb3IodmFyIGU9dS5sZW5ndGg7ZTspe2ZvcihjPXUsdT1bXTsrK2g8ZTspYyYmY1toXS5ydW4oKTtoPS0xLGU9dS5sZW5ndGh9Yz1udWxsLGw9ITEsZnVuY3Rpb24odCl7aWYocj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChyPT09b3x8IXIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIHI9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7cih0KX1jYXRjaChlKXt0cnl7cmV0dXJuIHIuY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiByLmNhbGwodGhpcyx0KX19fSh0KX19ZnVuY3Rpb24gcCh0LGUpe3RoaXMuZnVuPXQsdGhpcy5hcnJheT1lfWZ1bmN0aW9uIHkoKXt9aS5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO3UucHVzaChuZXcgcCh0LGUpKSwxIT09dS5sZW5ndGh8fGx8fHMoZCl9LHAucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGkudGl0bGU9ImJyb3dzZXIiLGkuYnJvd3Nlcj0hMCxpLmVudj17fSxpLmFyZ3Y9W10saS52ZXJzaW9uPSIiLGkudmVyc2lvbnM9e30saS5vbj15LGkuYWRkTGlzdGVuZXI9eSxpLm9uY2U9eSxpLm9mZj15LGkucmVtb3ZlTGlzdGVuZXI9eSxpLnJlbW92ZUFsbExpc3RlbmVycz15LGkuZW1pdD15LGkucHJlcGVuZExpc3RlbmVyPXksaS5wcmVwZW5kT25jZUxpc3RlbmVyPXksaS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGkuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGkuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxpLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGkudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjt0cnl7cj17Y2xvbmU6bigyMDQpLGNvbnN0YW50Om4oODgpLGVhY2g6big4OSksZmlsdGVyOm4oMTI4KSxoYXM6big5NCksaXNBcnJheTpuKDUpLGlzRW1wdHk6bigyODEpLGlzRnVuY3Rpb246bigzOSksaXNVbmRlZmluZWQ6bigxMzkpLGtleXM6bigzMCksbWFwOm4oMTQwKSxyZWR1Y2U6bigxNDIpLHNpemU6bigyODQpLHRyYW5zZm9ybTpuKDI5MCksdW5pb246bigyOTEpLHZhbHVlczpuKDE0Nyl9fWNhdGNoKHQpe31yfHwocj13aW5kb3cuXyksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsIT10JiYoIm9iamVjdCI9PWV8fCJmdW5jdGlvbiI9PWUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDQpO3QuZXhwb3J0cz17aXNTdWJncmFwaDpmdW5jdGlvbih0LGUpe3JldHVybiEhdC5jaGlsZHJlbihlKS5sZW5ndGh9LGVkZ2VUb0lkOmZ1bmN0aW9uKHQpe3JldHVybiBhKHQudikrIjoiK2EodC53KSsiOiIrYSh0Lm5hbWUpfSxhcHBseVN0eWxlOmZ1bmN0aW9uKHQsZSl7ZSYmdC5hdHRyKCJzdHlsZSIsZSl9LGFwcGx5Q2xhc3M6ZnVuY3Rpb24odCxlLG4pe2UmJnQuYXR0cigiY2xhc3MiLGUpLmF0dHIoImNsYXNzIixuKyIgIit0LmF0dHIoImNsYXNzIikpfSxhcHBseVRyYW5zaXRpb246ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmdyYXBoKCk7aWYoci5pc1BsYWluT2JqZWN0KG4pKXt2YXIgaT1uLnRyYW5zaXRpb247aWYoci5pc0Z1bmN0aW9uKGkpKXJldHVybiBpKHQpfXJldHVybiB0fX07dmFyIGk9LzovZztmdW5jdGlvbiBhKHQpe3JldHVybiB0P1N0cmluZyh0KS5yZXBsYWNlKGksIlxcOiIpOiIifX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSw2XSxuPVsxLDddLHI9WzEsOF0saT1bMSw5XSxhPVsxLDEyXSxvPVsxLDExXSxzPVsxLDE1LDI0XSxjPVsxLDE5XSx1PVsxLDMxXSxsPVsxLDM0XSxoPVsxLDMyXSxmPVsxLDMzXSxkPVsxLDM1XSxwPVsxLDM2XSx5PVsxLDM3XSxnPVsxLDM4XSxtPVsxLDQxXSx2PVsxLDQyXSxiPVsxLDQzXSx4PVsxLDQ0XSxfPVsxNSwyNF0saz1bMSw1Nl0sdz1bMSw1N10sVD1bMSw1OF0sRT1bMSw1OV0sQz1bMSw2MF0sUz1bMSw2MV0sQT1bMTUsMjQsMzEsMzgsMzksNDcsNTAsNTEsNTIsNTMsNTQsNTUsNjAsNjJdLE09WzE1LDI0LDI5LDMxLDM4LDM5LDQzLDQ3LDUwLDUxLDUyLDUzLDU0LDU1LDYwLDYyLDc3LDc4LDc5LDgwXSxPPVs3LDgsOSwxMCwxNSwxOCwyMiwyNF0sTj1bNDcsNzcsNzgsNzksODBdLEI9WzQ3LDU0LDU1LDc3LDc4LDc5LDgwXSxEPVs0Nyw1MCw1MSw1Miw1Myw3Nyw3OCw3OSw4MF0sTD1bMTUsMjQsMzFdLEk9WzEsOTNdLFI9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3Rpb246NSxkaXJlY3RpdmU6NixkaXJlY3Rpb25fdGI6NyxkaXJlY3Rpb25fYnQ6OCxkaXJlY3Rpb25fcmw6OSxkaXJlY3Rpb25fbHI6MTAsZ3JhcGhDb25maWc6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LE5FV0xJTkU6MTUsIjoiOjE2LGFyZ0RpcmVjdGl2ZToxNyxvcGVuX2RpcmVjdGl2ZToxOCx0eXBlX2RpcmVjdGl2ZToxOSxhcmdfZGlyZWN0aXZlOjIwLGNsb3NlX2RpcmVjdGl2ZToyMSxDTEFTU19ESUFHUkFNOjIyLHN0YXRlbWVudHM6MjMsRU9GOjI0LHN0YXRlbWVudDoyNSxjbGFzc05hbWU6MjYsYWxwaGFOdW1Ub2tlbjoyNyxjbGFzc0xpdGVyYWxOYW1lOjI4LEdFTkVSSUNUWVBFOjI5LHJlbGF0aW9uU3RhdGVtZW50OjMwLExBQkVMOjMxLGNsYXNzU3RhdGVtZW50OjMyLG1ldGhvZFN0YXRlbWVudDozMyxhbm5vdGF0aW9uU3RhdGVtZW50OjM0LGNsaWNrU3RhdGVtZW50OjM1LGNzc0NsYXNzU3RhdGVtZW50OjM2LENMQVNTOjM3LFNUWUxFX1NFUEFSQVRPUjozOCxTVFJVQ1RfU1RBUlQ6MzksbWVtYmVyczo0MCxTVFJVQ1RfU1RPUDo0MSxBTk5PVEFUSU9OX1NUQVJUOjQyLEFOTk9UQVRJT05fRU5EOjQzLE1FTUJFUjo0NCxTRVBBUkFUT1I6NDUscmVsYXRpb246NDYsU1RSOjQ3LHJlbGF0aW9uVHlwZTo0OCxsaW5lVHlwZTo0OSxBR0dSRUdBVElPTjo1MCxFWFRFTlNJT046NTEsQ09NUE9TSVRJT046NTIsREVQRU5ERU5DWTo1MyxMSU5FOjU0LERPVFRFRF9MSU5FOjU1LENBTExCQUNLOjU2LExJTks6NTcsTElOS19UQVJHRVQ6NTgsQ0xJQ0s6NTksQ0FMTEJBQ0tfTkFNRTo2MCxDQUxMQkFDS19BUkdTOjYxLEhSRUY6NjIsQ1NTQ0xBU1M6NjMsY29tbWVudFRva2VuOjY0LHRleHRUb2tlbjo2NSxncmFwaENvZGVUb2tlbnM6NjYsdGV4dE5vVGFnc1Rva2VuOjY3LFRBR1NUQVJUOjY4LFRBR0VORDo2OSwiPT0iOjcwLCItLSI6NzEsUENUOjcyLERFRkFVTFQ6NzMsU1BBQ0U6NzQsTUlOVVM6NzUsa2V5d29yZHM6NzYsVU5JQ09ERV9URVhUOjc3LE5VTTo3OCxBTFBIQTo3OSxCUVVPVEVfU1RSOjgwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw3OiJkaXJlY3Rpb25fdGIiLDg6ImRpcmVjdGlvbl9idCIsOToiZGlyZWN0aW9uX3JsIiwxMDoiZGlyZWN0aW9uX2xyIiwxNToiTkVXTElORSIsMTY6IjoiLDE4OiJvcGVuX2RpcmVjdGl2ZSIsMTk6InR5cGVfZGlyZWN0aXZlIiwyMDoiYXJnX2RpcmVjdGl2ZSIsMjE6ImNsb3NlX2RpcmVjdGl2ZSIsMjI6IkNMQVNTX0RJQUdSQU0iLDI0OiJFT0YiLDI5OiJHRU5FUklDVFlQRSIsMzE6IkxBQkVMIiwzNzoiQ0xBU1MiLDM4OiJTVFlMRV9TRVBBUkFUT1IiLDM5OiJTVFJVQ1RfU1RBUlQiLDQxOiJTVFJVQ1RfU1RPUCIsNDI6IkFOTk9UQVRJT05fU1RBUlQiLDQzOiJBTk5PVEFUSU9OX0VORCIsNDQ6Ik1FTUJFUiIsNDU6IlNFUEFSQVRPUiIsNDc6IlNUUiIsNTA6IkFHR1JFR0FUSU9OIiw1MToiRVhURU5TSU9OIiw1MjoiQ09NUE9TSVRJT04iLDUzOiJERVBFTkRFTkNZIiw1NDoiTElORSIsNTU6IkRPVFRFRF9MSU5FIiw1NjoiQ0FMTEJBQ0siLDU3OiJMSU5LIiw1ODoiTElOS19UQVJHRVQiLDU5OiJDTElDSyIsNjA6IkNBTExCQUNLX05BTUUiLDYxOiJDQUxMQkFDS19BUkdTIiw2MjoiSFJFRiIsNjM6IkNTU0NMQVNTIiw2NjoiZ3JhcGhDb2RlVG9rZW5zIiw2ODoiVEFHU1RBUlQiLDY5OiJUQUdFTkQiLDcwOiI9PSIsNzE6Ii0tIiw3MjoiUENUIiw3MzoiREVGQVVMVCIsNzQ6IlNQQUNFIiw3NToiTUlOVVMiLDc2OiJrZXl3b3JkcyIsNzc6IlVOSUNPREVfVEVYVCIsNzg6Ik5VTSIsNzk6IkFMUEhBIiw4MDoiQlFVT1RFX1NUUiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbMywyXSxbNSwxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNCwxXSxbNiw0XSxbNiw2XSxbMTIsMV0sWzEzLDFdLFsxNywxXSxbMTQsMV0sWzExLDRdLFsyMywxXSxbMjMsMl0sWzIzLDNdLFsyNiwxXSxbMjYsMV0sWzI2LDJdLFsyNiwyXSxbMjYsMl0sWzI1LDFdLFsyNSwyXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzMyLDJdLFszMiw0XSxbMzIsNV0sWzMyLDddLFszNCw0XSxbNDAsMV0sWzQwLDJdLFszMywxXSxbMzMsMl0sWzMzLDFdLFszMywxXSxbMzAsM10sWzMwLDRdLFszMCw0XSxbMzAsNV0sWzQ2LDNdLFs0NiwyXSxbNDYsMl0sWzQ2LDFdLFs0OCwxXSxbNDgsMV0sWzQ4LDFdLFs0OCwxXSxbNDksMV0sWzQ5LDFdLFszNSwzXSxbMzUsNF0sWzM1LDNdLFszNSw0XSxbMzUsNF0sWzM1LDVdLFszNSwzXSxbMzUsNF0sWzM1LDRdLFszNSw1XSxbMzUsM10sWzM1LDRdLFszNSw0XSxbMzUsNV0sWzM2LDNdLFs2NCwxXSxbNjQsMV0sWzY1LDFdLFs2NSwxXSxbNjUsMV0sWzY1LDFdLFs2NSwxXSxbNjUsMV0sWzY1LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbMjcsMV0sWzI3LDFdLFsyNywxXSxbMjgsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnIuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNTpyLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDY6ci5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA3OnIuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgMTE6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDEyOnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDEzOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxNDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJjbGFzcyIpO2JyZWFrO2Nhc2UgMTk6Y2FzZSAyMDp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDIxOnRoaXMuJD1hW3MtMV0rYVtzXTticmVhaztjYXNlIDIyOmNhc2UgMjM6dGhpcy4kPWFbcy0xXSsifiIrYVtzXTticmVhaztjYXNlIDI0OnIuYWRkUmVsYXRpb24oYVtzXSk7YnJlYWs7Y2FzZSAyNTphW3MtMV0udGl0bGU9ci5jbGVhbnVwTGFiZWwoYVtzXSksci5hZGRSZWxhdGlvbihhW3MtMV0pO2JyZWFrO2Nhc2UgMzM6ci5hZGRDbGFzcyhhW3NdKTticmVhaztjYXNlIDM0OnIuYWRkQ2xhc3MoYVtzLTJdKSxyLnNldENzc0NsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDM1OnIuYWRkQ2xhc3MoYVtzLTNdKSxyLmFkZE1lbWJlcnMoYVtzLTNdLGFbcy0xXSk7YnJlYWs7Y2FzZSAzNjpyLmFkZENsYXNzKGFbcy01XSksci5zZXRDc3NDbGFzcyhhW3MtNV0sYVtzLTNdKSxyLmFkZE1lbWJlcnMoYVtzLTVdLGFbcy0xXSk7YnJlYWs7Y2FzZSAzNzpyLmFkZEFubm90YXRpb24oYVtzXSxhW3MtMl0pO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVthW3NdXTticmVhaztjYXNlIDM5OmFbc10ucHVzaChhW3MtMV0pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNDA6YnJlYWs7Y2FzZSA0MTpyLmFkZE1lbWJlcihhW3MtMV0sci5jbGVhbnVwTGFiZWwoYVtzXSkpO2JyZWFrO2Nhc2UgNDI6Y2FzZSA0MzpicmVhaztjYXNlIDQ0OnRoaXMuJD17aWQxOmFbcy0yXSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMV0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9e2lkMTphW3MtM10saWQyOmFbc10scmVsYXRpb246YVtzLTFdLHJlbGF0aW9uVGl0bGUxOmFbcy0yXSxyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXtpZDE6YVtzLTNdLGlkMjphW3NdLHJlbGF0aW9uOmFbcy0yXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6YVtzLTFdfTticmVhaztjYXNlIDQ3OnRoaXMuJD17aWQxOmFbcy00XSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMl0scmVsYXRpb25UaXRsZTE6YVtzLTNdLHJlbGF0aW9uVGl0bGUyOmFbcy0xXX07YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9e3R5cGUxOmFbcy0yXSx0eXBlMjphW3NdLGxpbmVUeXBlOmFbcy0xXX07YnJlYWs7Y2FzZSA0OTp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjphW3NdLGxpbmVUeXBlOmFbcy0xXX07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9e3R5cGUxOmFbcy0xXSx0eXBlMjoibm9uZSIsbGluZVR5cGU6YVtzXX07YnJlYWs7Y2FzZSA1MTp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6YVtzXX07YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9ci5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT047YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9ci5yZWxhdGlvblR5cGUuRVhURU5TSU9OO2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPXIucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPXIucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k7YnJlYWs7Y2FzZSA1Njp0aGlzLiQ9ci5saW5lVHlwZS5MSU5FO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPXIubGluZVR5cGUuRE9UVEVEX0xJTkU7YnJlYWs7Y2FzZSA1ODpjYXNlIDY0OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDU5OmNhc2UgNjU6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSksci5zZXRUb29sdGlwKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDYwOmNhc2UgNjg6dGhpcy4kPWFbcy0yXSxyLnNldExpbmsoYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDYyOmNhc2UgNzA6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSksci5zZXRUb29sdGlwKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDYzOmNhc2UgNzE6dGhpcy4kPWFbcy00XSxyLnNldExpbmsoYVtzLTNdLGFbcy0yXSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbcy0xXSk7YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWFbcy00XSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0yXSxhW3MtMV0pLHIuc2V0VG9vbHRpcChhW3MtM10sYVtzXSk7YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9YVtzLTNdLHIuc2V0TGluayhhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNzI6ci5zZXRDc3NDbGFzcyhhW3MtMV0sYVtzXSl9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6NCw3OmUsODpuLDk6ciwxMDppLDExOjUsMTI6MTAsMTg6YSwyMjpvfSx7MTpbM119LHsxOlsyLDFdfSx7MTpbMiwyXX0sezM6MTMsNDoyLDU6Myw2OjQsNzplLDg6biw5OnIsMTA6aSwxMTo1LDEyOjEwLDE4OmEsMjI6b30sezE6WzIsOF19LHQocyxbMiw0XSksdChzLFsyLDVdKSx0KHMsWzIsNl0pLHQocyxbMiw3XSksezEzOjE0LDE5OlsxLDE1XX0sezE1OlsxLDE2XX0sezE5OlsyLDExXX0sezE6WzIsM119LHsxNDoxNywxNjpbMSwxOF0sMjE6Y30sdChbMTYsMjFdLFsyLDEyXSksezU6MjksNjoyOCw3OmUsODpuLDk6ciwxMDppLDEyOjEwLDE4OmEsMjM6MjAsMjU6MjEsMjY6MzAsMjc6MzksMjg6NDAsMzA6MjIsMzI6MjMsMzM6MjQsMzQ6MjUsMzU6MjYsMzY6MjcsMzc6dSw0MjpsLDQ0OmgsNDU6Ziw1NjpkLDU3OnAsNTk6eSw2MzpnLDc3Om0sNzg6diw3OTpiLDgwOnh9LHsxNTpbMSw0NV19LHsxNzo0NiwyMDpbMSw0N119LHsxNTpbMiwxNF19LHsyNDpbMSw0OF19LHsxNTpbMSw0OV0sMjQ6WzIsMTZdfSx0KF8sWzIsMjRdLHszMTpbMSw1MF19KSx0KF8sWzIsMjZdKSx0KF8sWzIsMjddKSx0KF8sWzIsMjhdKSx0KF8sWzIsMjldKSx0KF8sWzIsMzBdKSx0KF8sWzIsMzFdKSx0KF8sWzIsMzJdKSx0KF8sWzIsNDBdLHs0Njo1MSw0ODo1NCw0OTo1NSwzMTpbMSw1M10sNDc6WzEsNTJdLDUwOmssNTE6dyw1MjpULDUzOkUsNTQ6Qyw1NTpTfSksezI2OjYyLDI3OjM5LDI4OjQwLDc3Om0sNzg6diw3OTpiLDgwOnh9LHQoXyxbMiw0Ml0pLHQoXyxbMiw0M10pLHsyNzo2Myw3NzptLDc4OnYsNzk6Yn0sezI2OjY0LDI3OjM5LDI4OjQwLDc3Om0sNzg6diw3OTpiLDgwOnh9LHsyNjo2NSwyNzozOSwyODo0MCw3NzptLDc4OnYsNzk6Yiw4MDp4fSx7MjY6NjYsMjc6MzksMjg6NDAsNzc6bSw3ODp2LDc5OmIsODA6eH0sezQ3OlsxLDY3XX0sdChBLFsyLDE5XSx7Mjc6MzksMjg6NDAsMjY6NjgsMjk6WzEsNjldLDc3Om0sNzg6diw3OTpiLDgwOnh9KSx0KEEsWzIsMjBdLHsyOTpbMSw3MF19KSx0KE0sWzIsODZdKSx0KE0sWzIsODddKSx0KE0sWzIsODhdKSx0KFsxNSwyNCwyOSwzMSwzOCwzOSw0Nyw1MCw1MSw1Miw1Myw1NCw1NSw2MCw2Ml0sWzIsODldKSx0KE8sWzIsOV0pLHsxNDo3MSwyMTpjfSx7MjE6WzIsMTNdfSx7MTpbMiwxNV19LHs1OjI5LDY6MjgsNzplLDg6biw5OnIsMTA6aSwxMjoxMCwxODphLDIzOjcyLDI0OlsyLDE3XSwyNToyMSwyNjozMCwyNzozOSwyODo0MCwzMDoyMiwzMjoyMywzMzoyNCwzNDoyNSwzNToyNiwzNjoyNywzNzp1LDQyOmwsNDQ6aCw0NTpmLDU2OmQsNTc6cCw1OTp5LDYzOmcsNzc6bSw3ODp2LDc5OmIsODA6eH0sdChfLFsyLDI1XSksezI2OjczLDI3OjM5LDI4OjQwLDQ3OlsxLDc0XSw3NzptLDc4OnYsNzk6Yiw4MDp4fSx7NDY6NzUsNDg6NTQsNDk6NTUsNTA6ayw1MTp3LDUyOlQsNTM6RSw1NDpDLDU1OlN9LHQoXyxbMiw0MV0pLHs0OTo3Niw1NDpDLDU1OlN9LHQoTixbMiw1MV0sezQ4Ojc3LDUwOmssNTE6dyw1MjpULDUzOkV9KSx0KEIsWzIsNTJdKSx0KEIsWzIsNTNdKSx0KEIsWzIsNTRdKSx0KEIsWzIsNTVdKSx0KEQsWzIsNTZdKSx0KEQsWzIsNTddKSx0KF8sWzIsMzNdLHszODpbMSw3OF0sMzk6WzEsNzldfSksezQzOlsxLDgwXX0sezQ3OlsxLDgxXX0sezQ3OlsxLDgyXX0sezYwOlsxLDgzXSw2MjpbMSw4NF19LHsyNzo4NSw3NzptLDc4OnYsNzk6Yn0sdChBLFsyLDIxXSksdChBLFsyLDIyXSksdChBLFsyLDIzXSksezE1OlsxLDg2XX0sezI0OlsyLDE4XX0sdChMLFsyLDQ0XSksezI2Ojg3LDI3OjM5LDI4OjQwLDc3Om0sNzg6diw3OTpiLDgwOnh9LHsyNjo4OCwyNzozOSwyODo0MCw0NzpbMSw4OV0sNzc6bSw3ODp2LDc5OmIsODA6eH0sdChOLFsyLDUwXSx7NDg6OTAsNTA6ayw1MTp3LDUyOlQsNTM6RX0pLHQoTixbMiw0OV0pLHsyNzo5MSw3NzptLDc4OnYsNzk6Yn0sezQwOjkyLDQ0Okl9LHsyNjo5NCwyNzozOSwyODo0MCw3NzptLDc4OnYsNzk6Yiw4MDp4fSx0KF8sWzIsNThdLHs0NzpbMSw5NV19KSx0KF8sWzIsNjBdLHs0NzpbMSw5N10sNTg6WzEsOTZdfSksdChfLFsyLDY0XSx7NDc6WzEsOThdLDYxOlsxLDk5XX0pLHQoXyxbMiw2OF0sezQ3OlsxLDEwMV0sNTg6WzEsMTAwXX0pLHQoXyxbMiw3Ml0pLHQoTyxbMiwxMF0pLHQoTCxbMiw0Nl0pLHQoTCxbMiw0NV0pLHsyNjoxMDIsMjc6MzksMjg6NDAsNzc6bSw3ODp2LDc5OmIsODA6eH0sdChOLFsyLDQ4XSksdChfLFsyLDM0XSx7Mzk6WzEsMTAzXX0pLHs0MTpbMSwxMDRdfSx7NDA6MTA1LDQxOlsyLDM4XSw0NDpJfSx0KF8sWzIsMzddKSx0KF8sWzIsNTldKSx0KF8sWzIsNjFdKSx0KF8sWzIsNjJdLHs1ODpbMSwxMDZdfSksdChfLFsyLDY1XSksdChfLFsyLDY2XSx7NDc6WzEsMTA3XX0pLHQoXyxbMiw2OV0pLHQoXyxbMiw3MF0sezU4OlsxLDEwOF19KSx0KEwsWzIsNDddKSx7NDA6MTA5LDQ0Okl9LHQoXyxbMiwzNV0pLHs0MTpbMiwzOV19LHQoXyxbMiw2M10pLHQoXyxbMiw2N10pLHQoXyxbMiw3MV0pLHs0MTpbMSwxMTBdfSx0KF8sWzIsMzZdKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sMzpbMiwyXSw1OlsyLDhdLDEyOlsyLDExXSwxMzpbMiwzXSwxOTpbMiwxNF0sNDc6WzIsMTNdLDQ4OlsyLDE1XSw3MjpbMiwxOF0sMTA1OlsyLDM5XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LFQsRSxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihFIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEY9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwxODtjYXNlIDE6cmV0dXJuIDc7Y2FzZSAyOnJldHVybiA4O2Nhc2UgMzpyZXR1cm4gOTtjYXNlIDQ6cmV0dXJuIDEwO2Nhc2UgNTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxOTtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTY7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDIxO2Nhc2UgODpyZXR1cm4gMjA7Y2FzZSA5OmNhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gMTU7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmNhc2UgMTQ6cmV0dXJuIDIyO2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oInN0cnVjdCIpLDM5O2Nhc2UgMTY6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMTc6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDE4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDE7Y2FzZSAxOTpicmVhaztjYXNlIDIwOnJldHVybiJNRU1CRVIiO2Nhc2UgMjE6cmV0dXJuIDM3O2Nhc2UgMjI6cmV0dXJuIDYzO2Nhc2UgMjM6cmV0dXJuIDU2O2Nhc2UgMjQ6cmV0dXJuIDU3O2Nhc2UgMjU6cmV0dXJuIDU5O2Nhc2UgMjY6cmV0dXJuIDQyO2Nhc2UgMjc6cmV0dXJuIDQzO2Nhc2UgMjg6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzA6cmV0dXJuIkdFTkVSSUNUWVBFIjtjYXNlIDMxOnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMzI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzM6cmV0dXJuIlNUUiI7Y2FzZSAzNDp0aGlzLmJlZ2luKCJicXN0cmluZyIpO2JyZWFrO2Nhc2UgMzU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzY6cmV0dXJuIkJRVU9URV9TVFIiO2Nhc2UgMzc6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMzg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzk6cmV0dXJuIDYyO2Nhc2UgNDA6dGhpcy5iZWdpbigiY2FsbGJhY2tfbmFtZSIpO2JyZWFrO2Nhc2UgNDE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNDI6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrX2FyZ3MiKTticmVhaztjYXNlIDQzOnJldHVybiA2MDtjYXNlIDQ0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ1OnJldHVybiA2MTtjYXNlIDQ2OmNhc2UgNDc6Y2FzZSA0ODpjYXNlIDQ5OnJldHVybiA1ODtjYXNlIDUwOmNhc2UgNTE6cmV0dXJuIDUxO2Nhc2UgNTI6Y2FzZSA1MzpyZXR1cm4gNTM7Y2FzZSA1NDpyZXR1cm4gNTI7Y2FzZSA1NTpyZXR1cm4gNTA7Y2FzZSA1NjpyZXR1cm4gNTQ7Y2FzZSA1NzpyZXR1cm4gNTU7Y2FzZSA1ODpyZXR1cm4gMzE7Y2FzZSA1OTpyZXR1cm4gMzg7Y2FzZSA2MDpyZXR1cm4gNzU7Y2FzZSA2MTpyZXR1cm4iRE9UIjtjYXNlIDYyOnJldHVybiJQTFVTIjtjYXNlIDYzOnJldHVybiA3MjtjYXNlIDY0OmNhc2UgNjU6cmV0dXJuIkVRVUFMUyI7Y2FzZSA2NjpyZXR1cm4gNzk7Y2FzZSA2NzpyZXR1cm4iUFVOQ1RVQVRJT04iO2Nhc2UgNjg6cmV0dXJuIDc4O2Nhc2UgNjk6cmV0dXJuIDc3O2Nhc2UgNzA6cmV0dXJuIDc0O2Nhc2UgNzE6cmV0dXJuIDI0fX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86KFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86Y2xhc3NEaWFncmFtLXYyXGIpLywvXig/OmNsYXNzRGlhZ3JhbVxiKS8sL14oPzpbe10pLywvXig/OiQpLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzpbXG5dKS8sL14oPzpbXnt9XG5dKikvLC9eKD86Y2xhc3NcYikvLC9eKD86Y3NzQ2xhc3NcYikvLC9eKD86Y2FsbGJhY2tcYikvLC9eKD86bGlua1xiKS8sL14oPzpjbGlja1xiKS8sL14oPzo8PCkvLC9eKD86Pj4pLywvXig/Olt+XSkvLC9eKD86W35dKS8sL14oPzpbXn5dKikvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpbYF0pLywvXig/OltgXSkvLC9eKD86W15gXSspLywvXig/OmhyZWZbXHNdK1siXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/OlxzKjxcfCkvLC9eKD86XHMqXHw+KS8sL14oPzpccyo+KS8sL14oPzpccyo8KS8sL14oPzpccypcKikvLC9eKD86XHMqb1xiKS8sL14oPzotLSkvLC9eKD86XC5cLikvLC9eKD86OnsxfVteOlxuO10rKS8sL14oPzo6ezN9KS8sL14oPzotKS8sL14oPzpcLikvLC9eKD86XCspLywvXig/OiUpLywvXig/Oj0pLywvXig/Oj0pLywvXig/Olx3KykvLC9eKD86WyEiIyQlJicqKywtLmA/XFwvXSkvLC9eKD86WzAtOV0rKS8sL14oPzpbXHUwMEFBXHUwMEI1XHUwMEJBXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZdfFtcdTAwRjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XXxbXHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNV18W1x1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXXxbXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXXxbXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQV18W1x1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXXxbXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N118W1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJdfFtcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFdfFtcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOV18W1x1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XXxbXHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXXxbXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXXxbXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OV18W1x1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXXxbXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RdfFtcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXXxbXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXXxbXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMV18W1x1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFdfFtcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNdfFtcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNl18W1x1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXXxbXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MV18W1x1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERdfFtcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMF18W1x1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXXxbXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNdfFtcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMV18W1x1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XXxbXHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ118W1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XXxbXHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRl18W1x1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXXxbXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRF18W1x1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RdfFtcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM118W1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZdfFtcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhdfFtcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTgzXHUyMTg0XXxbXHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM118W1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZdfFtcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRV18W1x1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1XHUzMDA2XHUzMDMxLVx1MzAzNVx1MzAzQlx1MzAzQ118W1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NdfFtcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXXxbXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkU1XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhdfFtcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNV18W1x1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXXxbXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhdfFtcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XXxbXHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNF18W1x1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXXxbXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRdfFtcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNl18W1x1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRF18W1x1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXXxbXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZdfFtcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10pLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2FyZ19kaXJlY3RpdmU6e3J1bGVzOls3LDhdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOls2LDddLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX2FyZ3M6e3J1bGVzOls0NCw0NV0saW5jbHVzaXZlOiExfSxjYWxsYmFja19uYW1lOntydWxlczpbNDEsNDIsNDNdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzM4LDM5XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzE2LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITF9LGdlbmVyaWM6e3J1bGVzOlsyOSwzMF0saW5jbHVzaXZlOiExfSxicXN0cmluZzp7cnVsZXM6WzM1LDM2XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzMyLDMzXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsOSwxMCwxMSwxMiwxMywxNCwxNSwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwzMSwzNCwzNyw0MCw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MV0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIFAoKXt0aGlzLnl5PXt9fXJldHVybiBSLmxleGVyPUYsUC5wcm90b3R5cGU9UixSLlBhcnNlcj1QLG5ldyBQfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMiksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIG49MCxyPXQubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPXRbcl07Ii4iPT09aT90LnNwbGljZShyLDEpOiIuLiI9PT1pPyh0LnNwbGljZShyLDEpLG4rKyk6biYmKHQuc3BsaWNlKHIsMSksbi0tKX1pZihlKWZvcig7bi0tO24pdC51bnNoaWZ0KCIuLiIpO3JldHVybiB0fWZ1bmN0aW9uIHIodCxlKXtpZih0LmZpbHRlcilyZXR1cm4gdC5maWx0ZXIoZSk7Zm9yKHZhciBuPVtdLHI9MDtyPHQubGVuZ3RoO3IrKyllKHRbcl0scix0KSYmbi5wdXNoKHRbcl0pO3JldHVybiBufWUucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0iIixpPSExLGE9YXJndW1lbnRzLmxlbmd0aC0xO2E+PS0xJiYhaTthLS0pe3ZhciBvPWE+PTA/YXJndW1lbnRzW2FdOnQuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiBvKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7byYmKGU9bysiLyIrZSxpPSIvIj09PW8uY2hhckF0KDApKX1yZXR1cm4oaT8iLyI6IiIpKyhlPW4ocihlLnNwbGl0KCIvIiksKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pKSwhaSkuam9pbigiLyIpKXx8Ii4ifSxlLm5vcm1hbGl6ZT1mdW5jdGlvbih0KXt2YXIgYT1lLmlzQWJzb2x1dGUodCksbz0iLyI9PT1pKHQsLTEpO3JldHVybih0PW4ocih0LnNwbGl0KCIvIiksKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pKSwhYSkuam9pbigiLyIpKXx8YXx8KHQ9Ii4iKSx0JiZvJiYodCs9Ii8iKSwoYT8iLyI6IiIpK3R9LGUuaXNBYnNvbHV0ZT1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LmNoYXJBdCgwKX0sZS5qb2luPWZ1bmN0aW9uKCl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBlLm5vcm1hbGl6ZShyKHQsKGZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7cmV0dXJuIHR9KSkuam9pbigiLyIpKX0sZS5yZWxhdGl2ZT1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aCYmIiI9PT10W2VdO2UrKyk7Zm9yKHZhciBuPXQubGVuZ3RoLTE7bj49MCYmIiI9PT10W25dO24tLSk7cmV0dXJuIGU+bj9bXTp0LnNsaWNlKGUsbi1lKzEpfXQ9ZS5yZXNvbHZlKHQpLnN1YnN0cigxKSxuPWUucmVzb2x2ZShuKS5zdWJzdHIoMSk7Zm9yKHZhciBpPXIodC5zcGxpdCgiLyIpKSxhPXIobi5zcGxpdCgiLyIpKSxvPU1hdGgubWluKGkubGVuZ3RoLGEubGVuZ3RoKSxzPW8sYz0wO2M8bztjKyspaWYoaVtjXSE9PWFbY10pe3M9YzticmVha312YXIgdT1bXTtmb3IoYz1zO2M8aS5sZW5ndGg7YysrKXUucHVzaCgiLi4iKTtyZXR1cm4odT11LmNvbmNhdChhLnNsaWNlKHMpKSkuam9pbigiLyIpfSxlLnNlcD0iLyIsZS5kZWxpbWl0ZXI9IjoiLGUuZGlybmFtZT1mdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQmJih0Kz0iIiksMD09PXQubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGU9dC5jaGFyQ29kZUF0KDApLG49NDc9PT1lLHI9LTEsaT0hMCxhPXQubGVuZ3RoLTE7YT49MTstLWEpaWYoNDc9PT0oZT10LmNoYXJDb2RlQXQoYSkpKXtpZighaSl7cj1hO2JyZWFrfX1lbHNlIGk9ITE7cmV0dXJuLTE9PT1yP24/Ii8iOiIuIjpuJiYxPT09cj8iLyI6dC5zbGljZSgwLHIpfSxlLmJhc2VuYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCl7InN0cmluZyIhPXR5cGVvZiB0JiYodCs9IiIpO3ZhciBlLG49MCxyPS0xLGk9ITA7Zm9yKGU9dC5sZW5ndGgtMTtlPj0wOy0tZSlpZig0Nz09PXQuY2hhckNvZGVBdChlKSl7aWYoIWkpe249ZSsxO2JyZWFrfX1lbHNlLTE9PT1yJiYoaT0hMSxyPWUrMSk7cmV0dXJuLTE9PT1yPyIiOnQuc2xpY2UobixyKX0odCk7cmV0dXJuIGUmJm4uc3Vic3RyKC0xKmUubGVuZ3RoKT09PWUmJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtZS5sZW5ndGgpKSxufSxlLmV4dG5hbWU9ZnVuY3Rpb24odCl7InN0cmluZyIhPXR5cGVvZiB0JiYodCs9IiIpO2Zvcih2YXIgZT0tMSxuPTAscj0tMSxpPSEwLGE9MCxvPXQubGVuZ3RoLTE7bz49MDstLW8pe3ZhciBzPXQuY2hhckNvZGVBdChvKTtpZig0NyE9PXMpLTE9PT1yJiYoaT0hMSxyPW8rMSksNDY9PT1zPy0xPT09ZT9lPW86MSE9PWEmJihhPTEpOi0xIT09ZSYmKGE9LTEpO2Vsc2UgaWYoIWkpe249bysxO2JyZWFrfX1yZXR1cm4tMT09PWV8fC0xPT09cnx8MD09PWF8fDE9PT1hJiZlPT09ci0xJiZlPT09bisxPyIiOnQuc2xpY2UoZSxyKX07dmFyIGk9ImIiPT09ImFiIi5zdWJzdHIoLTEpP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5zdWJzdHIoZSxuKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPDAmJihlPXQubGVuZ3RoK2UpLHQuc3Vic3RyKGUsbil9fSkuY2FsbCh0aGlzLG4oMTIpKX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA5KSxpPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsYT1yfHxpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9bigzKX1jYXRjaCh0KXt9cnx8KHI9d2luZG93LmdyYXBobGliKSx0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsMl0sbj1bMSwzXSxyPVsxLDVdLGk9WzEsN10sYT1bMiw1XSxvPVsxLDE1XSxzPVsxLDE3XSxjPVsxLDE5XSx1PVsxLDIwXSxsPVsxLDIxXSxoPVsxLDIyXSxmPVsxLDMwXSxkPVsxLDIzXSxwPVsxLDI0XSx5PVsxLDI1XSxnPVsxLDI2XSxtPVsxLDI3XSx2PVsxLDMyXSxiPVsxLDMzXSx4PVsxLDM0XSxfPVsxLDM1XSxrPVsxLDMxXSx3PVsxLDM4XSxUPVsxLDQsNSwxNCwxNSwxNywxOSwyMCwyMiwyMywyNCwyNSwyNiwyNywzNiwzNywzOCwzOSw0Miw0NV0sRT1bMSw0LDUsMTIsMTMsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLEM9WzEsNCw1LDcsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLFM9WzQsNSwxNCwxNSwxNywxOSwyMCwyMiwyMywyNCwyNSwyNiwyNywzNiwzNywzOCwzOSw0Miw0NV0sQT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxOTDo1LGRpcmVjdGl2ZTo2LFNEOjcsZG9jdW1lbnQ6OCxsaW5lOjksc3RhdGVtZW50OjEwLGlkU3RhdGVtZW50OjExLERFU0NSOjEyLCItLVx4M2UiOjEzLEhJREVfRU1QVFk6MTQsc2NhbGU6MTUsV0lEVEg6MTYsQ09NUE9TSVRfU1RBVEU6MTcsU1RSVUNUX1NUQVJUOjE4LFNUUlVDVF9TVE9QOjE5LFNUQVRFX0RFU0NSOjIwLEFTOjIxLElEOjIyLEZPUks6MjMsSk9JTjoyNCxDSE9JQ0U6MjUsQ09OQ1VSUkVOVDoyNixub3RlOjI3LG5vdGVQb3NpdGlvbjoyOCxOT1RFX1RFWFQ6MjksZGlyZWN0aW9uOjMwLG9wZW5EaXJlY3RpdmU6MzEsdHlwZURpcmVjdGl2ZTozMixjbG9zZURpcmVjdGl2ZTozMywiOiI6MzQsYXJnRGlyZWN0aXZlOjM1LGRpcmVjdGlvbl90YjozNixkaXJlY3Rpb25fYnQ6MzcsZGlyZWN0aW9uX3JsOjM4LGRpcmVjdGlvbl9scjozOSxlb2w6NDAsIjsiOjQxLEVER0VfU1RBVEU6NDIsbGVmdF9vZjo0MyxyaWdodF9vZjo0NCxvcGVuX2RpcmVjdGl2ZTo0NSx0eXBlX2RpcmVjdGl2ZTo0NixhcmdfZGlyZWN0aXZlOjQ3LGNsb3NlX2RpcmVjdGl2ZTo0OCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5MIiw3OiJTRCIsMTI6IkRFU0NSIiwxMzoiLS1ceDNlIiwxNDoiSElERV9FTVBUWSIsMTU6InNjYWxlIiwxNjoiV0lEVEgiLDE3OiJDT01QT1NJVF9TVEFURSIsMTg6IlNUUlVDVF9TVEFSVCIsMTk6IlNUUlVDVF9TVE9QIiwyMDoiU1RBVEVfREVTQ1IiLDIxOiJBUyIsMjI6IklEIiwyMzoiRk9SSyIsMjQ6IkpPSU4iLDI1OiJDSE9JQ0UiLDI2OiJDT05DVVJSRU5UIiwyNzoibm90ZSIsMjk6Ik5PVEVfVEVYVCIsMzQ6IjoiLDM2OiJkaXJlY3Rpb25fdGIiLDM3OiJkaXJlY3Rpb25fYnQiLDM4OiJkaXJlY3Rpb25fcmwiLDM5OiJkaXJlY3Rpb25fbHIiLDQxOiI7Iiw0MjoiRURHRV9TVEFURSIsNDM6ImxlZnRfb2YiLDQ0OiJyaWdodF9vZiIsNDU6Im9wZW5fZGlyZWN0aXZlIiw0NjoidHlwZV9kaXJlY3RpdmUiLDQ3OiJhcmdfZGlyZWN0aXZlIiw0ODoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFszLDJdLFs4LDBdLFs4LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFsxMCwxXSxbMTAsMl0sWzEwLDNdLFsxMCw0XSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTAsNF0sWzEwLDNdLFsxMCw2XSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDRdLFsxMCw0XSxbMTAsMV0sWzEwLDFdLFs2LDNdLFs2LDVdLFszMCwxXSxbMzAsMV0sWzMwLDFdLFszMCwxXSxbNDAsMV0sWzQwLDFdLFsxMSwxXSxbMTEsMV0sWzI4LDFdLFsyOCwxXSxbMzEsMV0sWzMyLDFdLFszNSwxXSxbMzMsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnJldHVybiByLnNldFJvb3REb2MoYVtzXSksYVtzXTtjYXNlIDU6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNjoibmwiIT1hW3NdJiYoYVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXSk7YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDk6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDExOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0xXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjpyLnRyaW1Db2xvbihhW3NdKX07YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6e3N0bXQ6InN0YXRlIixpZDphW3MtMl0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9LHN0YXRlMjp7c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9fTticmVhaztjYXNlIDEzOnRoaXMuJD17c3RtdDoicmVsYXRpb24iLHN0YXRlMTp7c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn0sc3RhdGUyOntzdG10OiJzdGF0ZSIsaWQ6YVtzLTFdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifSxkZXNjcmlwdGlvbjphW3NdLnN1YnN0cigxKS50cmltKCl9O2JyZWFrO2Nhc2UgMTc6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIiLGRvYzphW3MtMV19O2JyZWFrO2Nhc2UgMTg6dmFyIGM9YVtzXSx1PWFbcy0yXS50cmltKCk7aWYoYVtzXS5tYXRjaCgiOiIpKXt2YXIgbD1hW3NdLnNwbGl0KCI6Iik7Yz1sWzBdLHU9W3UsbFsxXV19dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6Yyx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjp1fTticmVhaztjYXNlIDE5OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjphW3MtNV0sZG9jOmFbcy0xXX07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImZvcmsifTticmVhaztjYXNlIDIxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiam9pbiJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzXSx0eXBlOiJjaG9pY2UifTticmVhaztjYXNlIDIzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOnIuZ2V0RGl2aWRlcklkKCksdHlwZToiZGl2aWRlciJ9O2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzLTFdLnRyaW0oKSxub3RlOntwb3NpdGlvbjphW3MtMl0udHJpbSgpLHRleHQ6YVtzXS50cmltKCl9fTticmVhaztjYXNlIDMwOnIuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDMxOnIuc2V0RGlyZWN0aW9uKCJCVCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDMyOnIuc2V0RGlyZWN0aW9uKCJSTCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDMzOnIuc2V0RGlyZWN0aW9uKCJMUiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVhaztjYXNlIDM2OmNhc2UgMzc6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA0MDpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNDE6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNDI6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDQzOnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInN0YXRlIil9fSx0YWJsZTpbezM6MSw0OmUsNTpuLDY6NCw3OnIsMzE6Niw0NTppfSx7MTpbM119LHszOjgsNDplLDU6biw2OjQsNzpyLDMxOjYsNDU6aX0sezM6OSw0OmUsNTpuLDY6NCw3OnIsMzE6Niw0NTppfSx7MzoxMCw0OmUsNTpuLDY6NCw3OnIsMzE6Niw0NTppfSx0KFsxLDQsNSwxNCwxNSwxNywyMCwyMiwyMywyNCwyNSwyNiwyNywzNiwzNywzOCwzOSw0Miw0NV0sYSx7ODoxMX0pLHszMjoxMiw0NjpbMSwxM119LHs0NjpbMiw0MF19LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LHsxOlsyLDRdLDQ6byw1OnMsNjoyOCw5OjE0LDEwOjE2LDExOjE4LDE0OmMsMTU6dSwxNzpsLDIwOmgsMjI6ZiwyMzpkLDI0OnAsMjU6eSwyNjpnLDI3Om0sMzA6MjksMzE6NiwzNjp2LDM3OmIsMzg6eCwzOTpfLDQyOmssNDU6aX0sezMzOjM2LDM0OlsxLDM3XSw0ODp3fSx0KFszNCw0OF0sWzIsNDFdKSx0KFQsWzIsNl0pLHs2OjI4LDEwOjM5LDExOjE4LDE0OmMsMTU6dSwxNzpsLDIwOmgsMjI6ZiwyMzpkLDI0OnAsMjU6eSwyNjpnLDI3Om0sMzA6MjksMzE6NiwzNjp2LDM3OmIsMzg6eCwzOTpfLDQyOmssNDU6aX0sdChULFsyLDhdKSx0KFQsWzIsOV0pLHQoVCxbMiwxMF0sezEyOlsxLDQwXSwxMzpbMSw0MV19KSx0KFQsWzIsMTRdKSx7MTY6WzEsNDJdfSx0KFQsWzIsMTZdLHsxODpbMSw0M119KSx7MjE6WzEsNDRdfSx0KFQsWzIsMjBdKSx0KFQsWzIsMjFdKSx0KFQsWzIsMjJdKSx0KFQsWzIsMjNdKSx7Mjg6NDUsMjk6WzEsNDZdLDQzOlsxLDQ3XSw0NDpbMSw0OF19LHQoVCxbMiwyNl0pLHQoVCxbMiwyN10pLHQoRSxbMiwzNl0pLHQoRSxbMiwzN10pLHQoVCxbMiwzMF0pLHQoVCxbMiwzMV0pLHQoVCxbMiwzMl0pLHQoVCxbMiwzM10pLHQoQyxbMiwyOF0pLHszNTo0OSw0NzpbMSw1MF19LHQoQyxbMiw0M10pLHQoVCxbMiw3XSksdChULFsyLDExXSksezExOjUxLDIyOmYsNDI6a30sdChULFsyLDE1XSksdChTLGEsezg6NTJ9KSx7MjI6WzEsNTNdfSx7MjI6WzEsNTRdfSx7MjE6WzEsNTVdfSx7MjI6WzIsMzhdfSx7MjI6WzIsMzldfSx7MzM6NTYsNDg6d30sezQ4OlsyLDQyXX0sdChULFsyLDEyXSx7MTI6WzEsNTddfSksezQ6byw1OnMsNjoyOCw5OjE0LDEwOjE2LDExOjE4LDE0OmMsMTU6dSwxNzpsLDE5OlsxLDU4XSwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OnksMjY6ZywyNzptLDMwOjI5LDMxOjYsMzY6diwzNzpiLDM4OngsMzk6Xyw0MjprLDQ1Oml9LHQoVCxbMiwxOF0sezE4OlsxLDU5XX0pLHsyOTpbMSw2MF19LHsyMjpbMSw2MV19LHQoQyxbMiwyOV0pLHQoVCxbMiwxM10pLHQoVCxbMiwxN10pLHQoUyxhLHs4OjYyfSksdChULFsyLDI0XSksdChULFsyLDI1XSksezQ6byw1OnMsNjoyOCw5OjE0LDEwOjE2LDExOjE4LDE0OmMsMTU6dSwxNzpsLDE5OlsxLDYzXSwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OnksMjY6ZywyNzptLDMwOjI5LDMxOjYsMzY6diwzNzpiLDM4OngsMzk6Xyw0MjprLDQ1Oml9LHQoVCxbMiwxOV0pXSxkZWZhdWx0QWN0aW9uczp7NzpbMiw0MF0sODpbMiwxXSw5OlsyLDJdLDEwOlsyLDNdLDQ3OlsyLDM4XSw0ODpbMiwzOV0sNTA6WzIsNDJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiAzNjtjYXNlIDE6cmV0dXJuIDM3O2Nhc2UgMjpyZXR1cm4gMzg7Y2FzZSAzOnJldHVybiAzOTtjYXNlIDQ6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksNDU7Y2FzZSA1OnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDQ2O2Nhc2UgNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwzNDtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNDg7Y2FzZSA4OnJldHVybiA0NztjYXNlIDk6Y2FzZSAxMDpicmVhaztjYXNlIDExOnJldHVybiA1O2Nhc2UgMTI6Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTU6YnJlYWs7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNDQUxFIiksMTU7Y2FzZSAxNzpyZXR1cm4gMTY7Y2FzZSAxODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxOTp0aGlzLnB1c2hTdGF0ZSgiU1RBVEUiKTticmVhaztjYXNlIDIwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDIzO2Nhc2UgMjE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjQ7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTEwKS50cmltKCksMjU7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyMztjYXNlIDI0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI1O2Nhc2UgMjY6cmV0dXJuIDM2O2Nhc2UgMjc6cmV0dXJuIDM3O2Nhc2UgMjg6cmV0dXJuIDM4O2Nhc2UgMjk6cmV0dXJuIDM5O2Nhc2UgMzA6dGhpcy5iZWdpbigiU1RBVEVfU1RSSU5HIik7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJTVEFURV9JRCIpLCJBUyI7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSAzMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzNDpyZXR1cm4iU1RBVEVfREVTQ1IiO2Nhc2UgMzU6cmV0dXJuIDE3O2Nhc2UgMzY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgic3RydWN0IiksMTg7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE5O2Nhc2UgMzk6YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI3O2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDQzO2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDQ0O2Nhc2UgNDM6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSA0NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjtjYXNlIDQ1OmJyZWFrO2Nhc2UgNDY6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA0NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyMjtjYXNlIDQ5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc3Vic3RyKDIpLnRyaW0oKSwyOTtjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI5O2Nhc2UgNTE6Y2FzZSA1MjpyZXR1cm4gNztjYXNlIDUzOnJldHVybiAxNDtjYXNlIDU0OnJldHVybiA0MjtjYXNlIDU1OnJldHVybiAyMjtjYXNlIDU2OnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksMTI7Y2FzZSA1NzpyZXR1cm4gMTM7Y2FzZSA1ODpyZXR1cm4gMjY7Y2FzZSA1OTpyZXR1cm4gNTtjYXNlIDYwOnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/Oltcc10rKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OnN0YXRlXHMrKS9pLC9eKD86Lio8PGZvcms+PikvaSwvXig/Oi4qPDxqb2luPj4pL2ksL14oPzouKjw8Y2hvaWNlPj4pL2ksL14oPzouKlxbXFtmb3JrXF1cXSkvaSwvXig/Oi4qXFtcW2pvaW5cXVxdKS9pLC9eKD86LipcW1xbY2hvaWNlXF1cXSkvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzpbIl0pL2ksL14oPzpccyphc1xzKykvaSwvXig/OlteXG5ce10qKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXHNce10rKS9pLC9eKD86XG4pL2ksL14oPzpceykvaSwvXig/Olx9KS9pLC9eKD86W1xuXSkvaSwvXig/Om5vdGVccyspL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86IikvaSwvXig/OlxzKmFzXHMqKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXSopL2ksL14oPzpccypbXjpcblxzXC1dKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oltcc1xTXSo/ZW5kIG5vdGVcYikvaSwvXig/OnN0YXRlRGlhZ3JhbVxzKykvaSwvXig/OnN0YXRlRGlhZ3JhbS12MlxzKykvaSwvXig/OmhpZGUgZW1wdHkgZGVzY3JpcHRpb25cYikvaSwvXig/OlxbXCpcXSkvaSwvXig/OlteOlxuXHNcLVx7XSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzotLT4pL2ksL14oPzotLSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntMSU5FOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sY2xvc2VfZGlyZWN0aXZlOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzcsOCwxMywxNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzYsNywxMywxNF0saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzUsMTMsMTRdLGluY2x1c2l2ZTohMX0sc3RydWN0OntydWxlczpbMTMsMTQsMTksMjYsMjcsMjgsMjksMzgsMzksNDAsNTQsNTUsNTYsNTcsNThdLGluY2x1c2l2ZTohMX0sRkxPQVRJTkdfTk9URV9JRDp7cnVsZXM6WzQ3XSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEU6e3J1bGVzOls0NCw0NSw0Nl0saW5jbHVzaXZlOiExfSxOT1RFX1RFWFQ6e3J1bGVzOls0OSw1MF0saW5jbHVzaXZlOiExfSxOT1RFX0lEOntydWxlczpbNDhdLGluY2x1c2l2ZTohMX0sTk9URTp7cnVsZXM6WzQxLDQyLDQzXSxpbmNsdXNpdmU6ITF9LFNDQUxFOntydWxlczpbMTcsMThdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEVfSUQ6e3J1bGVzOlszMl0saW5jbHVzaXZlOiExfSxTVEFURV9TVFJJTkc6e3J1bGVzOlszMywzNF0saW5jbHVzaXZlOiExfSxGT1JLX1NUQVRFOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFOntydWxlczpbMTMsMTQsMjAsMjEsMjIsMjMsMjQsMjUsMzAsMzEsMzUsMzYsMzddLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOlsxMywxNF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDksMTAsMTEsMTIsMTQsMTUsMTYsMTksMzcsNDAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTksNjBdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBPKCl7dGhpcy55eT17fX1yZXR1cm4gQS5sZXhlcj1NLE8ucHJvdG90eXBlPUEsQS5QYXJzZXI9TyxuZXcgT30oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTIpLG4oNykodCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgZSxyO2Z1bmN0aW9uIGkoKXtyZXR1cm4gZS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEFycmF5fHwiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGwhPXQmJiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24gYyh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fCJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlfHwiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gbCh0LGUpe3ZhciBuLHI9W107Zm9yKG49MDtuPHQubGVuZ3RoOysrbilyLnB1c2goZSh0W25dLG4pKTtyZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIG4gaW4gZSloKGUsbikmJih0W25dPWVbbl0pO3JldHVybiBoKGUsInRvU3RyaW5nIikmJih0LnRvU3RyaW5nPWUudG9TdHJpbmcpLGgoZSwidmFsdWVPZiIpJiYodC52YWx1ZU9mPWUudmFsdWVPZiksdH1mdW5jdGlvbiBkKHQsZSxuLHIpe3JldHVybiBiZSh0LGUsbixyLCEwKS51dGMoKX1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT10Ll9wZiYmKHQuX3BmPXtlbXB0eTohMSx1bnVzZWRUb2tlbnM6W10sdW51c2VkSW5wdXQ6W10sb3ZlcmZsb3c6LTIsY2hhcnNMZWZ0T3ZlcjowLG51bGxJbnB1dDohMSxpbnZhbGlkTW9udGg6bnVsbCxpbnZhbGlkRm9ybWF0OiExLHVzZXJJbnZhbGlkYXRlZDohMSxpc286ITEscGFyc2VkRGF0ZVBhcnRzOltdLG1lcmlkaWVtOm51bGwscmZjMjgyMjohMSx3ZWVrZGF5TWlzbWF0Y2g6ITF9KSx0Ll9wZn1mdW5jdGlvbiB5KHQpe2lmKG51bGw9PXQuX2lzVmFsaWQpe3ZhciBlPXAodCksbj1yLmNhbGwoZS5wYXJzZWREYXRlUGFydHMsKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10fSkpLGk9IWlzTmFOKHQuX2QuZ2V0VGltZSgpKSYmZS5vdmVyZmxvdzwwJiYhZS5lbXB0eSYmIWUuaW52YWxpZE1vbnRoJiYhZS5pbnZhbGlkV2Vla2RheSYmIWUud2Vla2RheU1pc21hdGNoJiYhZS5udWxsSW5wdXQmJiFlLmludmFsaWRGb3JtYXQmJiFlLnVzZXJJbnZhbGlkYXRlZCYmKCFlLm1lcmlkaWVtfHxlLm1lcmlkaWVtJiZuKTtpZih0Ll9zdHJpY3QmJihpPWkmJjA9PT1lLmNoYXJzTGVmdE92ZXImJjA9PT1lLnVudXNlZFRva2Vucy5sZW5ndGgmJnZvaWQgMD09PWUuYmlnSG91ciksbnVsbCE9T2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNGcm96ZW4odCkpcmV0dXJuIGk7dC5faXNWYWxpZD1pfXJldHVybiB0Ll9pc1ZhbGlkfWZ1bmN0aW9uIGcodCl7dmFyIGU9ZChOYU4pO3JldHVybiBudWxsIT10P2YocChlKSx0KTpwKGUpLnVzZXJJbnZhbGlkYXRlZD0hMCxlfXI9QXJyYXkucHJvdG90eXBlLnNvbWU/QXJyYXkucHJvdG90eXBlLnNvbWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdCh0aGlzKSxuPWUubGVuZ3RoPj4+MCxyPTA7cjxuO3IrKylpZihyIGluIGUmJnQuY2FsbCh0aGlzLGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIG09aS5tb21lbnRQcm9wZXJ0aWVzPVtdO2Z1bmN0aW9uIHYodCxlKXt2YXIgbixyLGk7aWYocyhlLl9pc0FNb21lbnRPYmplY3QpfHwodC5faXNBTW9tZW50T2JqZWN0PWUuX2lzQU1vbWVudE9iamVjdCkscyhlLl9pKXx8KHQuX2k9ZS5faSkscyhlLl9mKXx8KHQuX2Y9ZS5fZikscyhlLl9sKXx8KHQuX2w9ZS5fbCkscyhlLl9zdHJpY3QpfHwodC5fc3RyaWN0PWUuX3N0cmljdCkscyhlLl90em0pfHwodC5fdHptPWUuX3R6bSkscyhlLl9pc1VUQyl8fCh0Ll9pc1VUQz1lLl9pc1VUQykscyhlLl9vZmZzZXQpfHwodC5fb2Zmc2V0PWUuX29mZnNldCkscyhlLl9wZil8fCh0Ll9wZj1wKGUpKSxzKGUuX2xvY2FsZSl8fCh0Ll9sb2NhbGU9ZS5fbG9jYWxlKSwwPG0ubGVuZ3RoKWZvcihuPTA7bjxtLmxlbmd0aDtuKyspcyhpPWVbcj1tW25dXSl8fCh0W3JdPWkpO3JldHVybiB0fXZhciBiPSExO2Z1bmN0aW9uIHgodCl7dih0aGlzLHQpLHRoaXMuX2Q9bmV3IERhdGUobnVsbCE9dC5fZD90Ll9kLmdldFRpbWUoKTpOYU4pLHRoaXMuaXNWYWxpZCgpfHwodGhpcy5fZD1uZXcgRGF0ZShOYU4pKSwhMT09PWImJihiPSEwLGkudXBkYXRlT2Zmc2V0KHRoaXMpLGI9ITEpfWZ1bmN0aW9uIF8odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB4fHxudWxsIT10JiZudWxsIT10Ll9pc0FNb21lbnRPYmplY3R9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdDwwP01hdGguY2VpbCh0KXx8MDpNYXRoLmZsb29yKHQpfWZ1bmN0aW9uIHcodCl7dmFyIGU9K3Qsbj0wO3JldHVybiAwIT09ZSYmaXNGaW5pdGUoZSkmJihuPWsoZSkpLG59ZnVuY3Rpb24gVCh0LGUsbil7dmFyIHIsaT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksYT1NYXRoLmFicyh0Lmxlbmd0aC1lLmxlbmd0aCksbz0wO2ZvcihyPTA7cjxpO3IrKykobiYmdFtyXSE9PWVbcl18fCFuJiZ3KHRbcl0pIT09dyhlW3JdKSkmJm8rKztyZXR1cm4gbythfWZ1bmN0aW9uIEUodCl7ITE9PT1pLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyYmInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiRGVwcmVjYXRpb24gd2FybmluZzogIit0KX1mdW5jdGlvbiBDKHQsZSl7dmFyIG49ITA7cmV0dXJuIGYoKGZ1bmN0aW9uKCl7aWYobnVsbCE9aS5kZXByZWNhdGlvbkhhbmRsZXImJmkuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsdCksbil7Zm9yKHZhciByLGE9W10sbz0wO288YXJndW1lbnRzLmxlbmd0aDtvKyspe2lmKHI9IiIsIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbb10pe2Zvcih2YXIgcyBpbiByKz0iXG5bIitvKyJdICIsYXJndW1lbnRzWzBdKXIrPXMrIjogIithcmd1bWVudHNbMF1bc10rIiwgIjtyPXIuc2xpY2UoMCwtMil9ZWxzZSByPWFyZ3VtZW50c1tvXTthLnB1c2gocil9RSh0KyJcbkFyZ3VtZW50czogIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhKS5qb2luKCIiKSsiXG4iKyhuZXcgRXJyb3IpLnN0YWNrKSxuPSExfXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGUpfXZhciBTLEE9e307ZnVuY3Rpb24gTSh0LGUpe251bGwhPWkuZGVwcmVjYXRpb25IYW5kbGVyJiZpLmRlcHJlY2F0aW9uSGFuZGxlcih0LGUpLEFbdF18fChFKGUpLEFbdF09ITApfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBOKHQsZSl7dmFyIG4scj1mKHt9LHQpO2ZvcihuIGluIGUpaChlLG4pJiYobyh0W25dKSYmbyhlW25dKT8ocltuXT17fSxmKHJbbl0sdFtuXSksZihyW25dLGVbbl0pKTpudWxsIT1lW25dP3Jbbl09ZVtuXTpkZWxldGUgcltuXSk7Zm9yKG4gaW4gdCloKHQsbikmJiFoKGUsbikmJm8odFtuXSkmJihyW25dPWYoe30scltuXSkpO3JldHVybiByfWZ1bmN0aW9uIEIodCl7bnVsbCE9dCYmdGhpcy5zZXQodCl9aS5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3M9ITEsaS5kZXByZWNhdGlvbkhhbmRsZXI9bnVsbCxTPU9iamVjdC5rZXlzP09iamVjdC5rZXlzOmZ1bmN0aW9uKHQpe3ZhciBlLG49W107Zm9yKGUgaW4gdCloKHQsZSkmJm4ucHVzaChlKTtyZXR1cm4gbn07dmFyIEQ9e307ZnVuY3Rpb24gTCh0LGUpe3ZhciBuPXQudG9Mb3dlckNhc2UoKTtEW25dPURbbisicyJdPURbZV09dH1mdW5jdGlvbiBJKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9EW3RdfHxEW3QudG9Mb3dlckNhc2UoKV06dm9pZCAwfWZ1bmN0aW9uIFIodCl7dmFyIGUsbixyPXt9O2ZvcihuIGluIHQpaCh0LG4pJiYoZT1JKG4pKSYmKHJbZV09dFtuXSk7cmV0dXJuIHJ9dmFyIEY9e307ZnVuY3Rpb24gUCh0LGUpe0ZbdF09ZX1mdW5jdGlvbiBqKHQsZSxuKXt2YXIgcj0iIitNYXRoLmFicyh0KSxpPWUtci5sZW5ndGg7cmV0dXJuKDA8PXQ/bj8iKyI6IiI6Ii0iKStNYXRoLnBvdygxMCxNYXRoLm1heCgwLGkpKS50b1N0cmluZygpLnN1YnN0cigxKStyfXZhciBZPS8oXFtbXlxbXSpcXSl8KFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fFlZWVlZWXxZWVlZWXxZWVlZfFlZfGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLHo9LyhcW1teXFtdKlxdKXwoXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csVT17fSwkPXt9O2Z1bmN0aW9uIHEodCxlLG4scil7dmFyIGk9cjsic3RyaW5nIj09dHlwZW9mIHImJihpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbcl0oKX0pLHQmJigkW3RdPWkpLGUmJigkW2VbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGooaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZVsxXSxlWzJdKX0pLG4mJigkW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdCl9KX1mdW5jdGlvbiBXKHQsZSl7cmV0dXJuIHQuaXNWYWxpZCgpPyhlPUgoZSx0LmxvY2FsZURhdGEoKSksVVtlXT1VW2VdfHxmdW5jdGlvbih0KXt2YXIgZSxuLHIsaT10Lm1hdGNoKFkpO2ZvcihlPTAsbj1pLmxlbmd0aDtlPG47ZSsrKSRbaVtlXV0/aVtlXT0kW2lbZV1dOmlbZV09KHI9aVtlXSkubWF0Y2goL1xbW1xzXFNdLyk/ci5yZXBsYWNlKC9eXFt8XF0kL2csIiIpOnIucmVwbGFjZSgvXFwvZywiIik7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLGE9IiI7Zm9yKHI9MDtyPG47cisrKWErPU8oaVtyXSk/aVtyXS5jYWxsKGUsdCk6aVtyXTtyZXR1cm4gYX19KGUpLFVbZV0odCkpOnQubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9ZnVuY3Rpb24gSCh0LGUpe3ZhciBuPTU7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZS5sb25nRGF0ZUZvcm1hdCh0KXx8dH1mb3Ioei5sYXN0SW5kZXg9MDswPD1uJiZ6LnRlc3QodCk7KXQ9dC5yZXBsYWNlKHosciksei5sYXN0SW5kZXg9MCxuLT0xO3JldHVybiB0fXZhciBWPS9cZC8sRz0vXGRcZC8sWD0vXGR7M30vLFo9L1xkezR9LyxLPS9bKy1dP1xkezZ9LyxRPS9cZFxkPy8sSj0vXGRcZFxkXGQ/Lyx0dD0vXGRcZFxkXGRcZFxkPy8sZXQ9L1xkezEsM30vLG50PS9cZHsxLDR9LyxydD0vWystXT9cZHsxLDZ9LyxpdD0vXGQrLyxhdD0vWystXT9cZCsvLG90PS9afFsrLV1cZFxkOj9cZFxkL2dpLHN0PS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vZ2ksY3Q9L1swLTldezAsMjU2fVsnYS16XHUwMEEwLVx1MDVGRlx1MDcwMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkYwN1x1RkYxMC1cdUZGRUZdezEsMjU2fXxbXHUwNjAwLVx1MDZGRlwvXXsxLDI1Nn0oXHMqP1tcdTA2MDAtXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSx1dD17fTtmdW5jdGlvbiBsdCh0LGUsbil7dXRbdF09TyhlKT9lOmZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJm4/bjplfX1mdW5jdGlvbiBodCh0LGUpe3JldHVybiBoKHV0LHQpP3V0W3RdKGUuX3N0cmljdCxlLl9sb2NhbGUpOm5ldyBSZWdFeHAoZnQodC5yZXBsYWNlKCJcXCIsIiIpLnJlcGxhY2UoL1xcKFxbKXxcXChcXSl8XFsoW15cXVxbXSopXF18XFwoLikvZywoZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gZXx8bnx8cnx8aX0pKSkpfWZ1bmN0aW9uIGZ0KHQpe3JldHVybiB0LnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9dmFyIGR0PXt9O2Z1bmN0aW9uIHB0KHQsZSl7dmFyIG4scj1lO2Zvcigic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSksYyhlKSYmKHI9ZnVuY3Rpb24odCxuKXtuW2VdPXcodCl9KSxuPTA7bjx0Lmxlbmd0aDtuKyspZHRbdFtuXV09cn1mdW5jdGlvbiB5dCh0LGUpe3B0KHQsKGZ1bmN0aW9uKHQsbixyLGkpe3IuX3c9ci5fd3x8e30sZSh0LHIuX3cscixpKX0pKX1mdW5jdGlvbiBndCh0KXtyZXR1cm4gbXQodCk/MzY2OjM2NX1mdW5jdGlvbiBtdCh0KXtyZXR1cm4gdCU0PT0wJiZ0JTEwMCE9MHx8dCU0MDA9PTB9cSgiWSIsMCwwLChmdW5jdGlvbigpe3ZhciB0PXRoaXMueWVhcigpO3JldHVybiB0PD05OTk5PyIiK3Q6IisiK3R9KSkscSgwLFsiWVkiLDJdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueWVhcigpJTEwMH0pKSxxKDAsWyJZWVlZIiw0XSwwLCJ5ZWFyIikscSgwLFsiWVlZWVkiLDVdLDAsInllYXIiKSxxKDAsWyJZWVlZWVkiLDYsITBdLDAsInllYXIiKSxMKCJ5ZWFyIiwieSIpLFAoInllYXIiLDEpLGx0KCJZIixhdCksbHQoIllZIixRLEcpLGx0KCJZWVlZIixudCxaKSxsdCgiWVlZWVkiLHJ0LEspLGx0KCJZWVlZWVkiLHJ0LEspLHB0KFsiWVlZWVkiLCJZWVlZWVkiXSwwKSxwdCgiWVlZWSIsKGZ1bmN0aW9uKHQsZSl7ZVswXT0yPT09dC5sZW5ndGg/aS5wYXJzZVR3b0RpZ2l0WWVhcih0KTp3KHQpfSkpLHB0KCJZWSIsKGZ1bmN0aW9uKHQsZSl7ZVswXT1pLnBhcnNlVHdvRGlnaXRZZWFyKHQpfSkpLHB0KCJZIiwoZnVuY3Rpb24odCxlKXtlWzBdPXBhcnNlSW50KHQsMTApfSkpLGkucGFyc2VUd29EaWdpdFllYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCkrKDY4PHcodCk/MTkwMDoyZTMpfTt2YXIgdnQsYnQ9eHQoIkZ1bGxZZWFyIiwhMCk7ZnVuY3Rpb24geHQodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4/KGt0KHRoaXMsdCxuKSxpLnVwZGF0ZU9mZnNldCh0aGlzLGUpLHRoaXMpOl90KHRoaXMsdCl9fWZ1bmN0aW9uIF90KHQsZSl7cmV0dXJuIHQuaXNWYWxpZCgpP3QuX2RbImdldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXSgpOk5hTn1mdW5jdGlvbiBrdCh0LGUsbil7dC5pc1ZhbGlkKCkmJiFpc05hTihuKSYmKCJGdWxsWWVhciI9PT1lJiZtdCh0LnllYXIoKSkmJjE9PT10Lm1vbnRoKCkmJjI5PT09dC5kYXRlKCk/dC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpK2VdKG4sdC5tb250aCgpLHd0KG4sdC5tb250aCgpKSk6dC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpK2VdKG4pKX1mdW5jdGlvbiB3dCh0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSlyZXR1cm4gTmFOO3ZhciBuPShlJTEyKzEyKSUxMjtyZXR1cm4gdCs9KGUtbikvMTIsMT09PW4/bXQodCk/Mjk6Mjg6MzEtbiU3JTJ9dnQ9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/QXJyYXkucHJvdG90eXBlLmluZGV4T2Y6ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoOysrZSlpZih0aGlzW2VdPT09dClyZXR1cm4gZTtyZXR1cm4tMX0scSgiTSIsWyJNTSIsMl0sIk1vIiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb250aCgpKzF9KSkscSgiTU1NIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLHQpfSkpLHEoIk1NTU0iLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLHQpfSkpLEwoIm1vbnRoIiwiTSIpLFAoIm1vbnRoIiw4KSxsdCgiTSIsUSksbHQoIk1NIixRLEcpLGx0KCJNTU0iLChmdW5jdGlvbih0LGUpe3JldHVybiBlLm1vbnRoc1Nob3J0UmVnZXgodCl9KSksbHQoIk1NTU0iLChmdW5jdGlvbih0LGUpe3JldHVybiBlLm1vbnRoc1JlZ2V4KHQpfSkpLHB0KFsiTSIsIk1NIl0sKGZ1bmN0aW9uKHQsZSl7ZVsxXT13KHQpLTF9KSkscHQoWyJNTU0iLCJNTU1NIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4uX2xvY2FsZS5tb250aHNQYXJzZSh0LHIsbi5fc3RyaWN0KTtudWxsIT1pP2VbMV09aTpwKG4pLmludmFsaWRNb250aD10fSkpO3ZhciBUdD0vRFtvRF0/KFxbW15cW1xdXSpcXXxccykrTU1NTT8vLEV0PSJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLEN0PSJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKTtmdW5jdGlvbiBTdCh0LGUpe3ZhciBuO2lmKCF0LmlzVmFsaWQoKSlyZXR1cm4gdDtpZigic3RyaW5nIj09dHlwZW9mIGUpaWYoL15cZCskLy50ZXN0KGUpKWU9dyhlKTtlbHNlIGlmKCFjKGU9dC5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UoZSkpKXJldHVybiB0O3JldHVybiBuPU1hdGgubWluKHQuZGF0ZSgpLHd0KHQueWVhcigpLGUpKSx0Ll9kWyJzZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrIk1vbnRoIl0oZSxuKSx0fWZ1bmN0aW9uIEF0KHQpe3JldHVybiBudWxsIT10PyhTdCh0aGlzLHQpLGkudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMpOl90KHRoaXMsIk1vbnRoIil9dmFyIE10PWN0LE90PWN0O2Z1bmN0aW9uIE50KCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiBlLmxlbmd0aC10Lmxlbmd0aH12YXIgZSxuLHI9W10saT1bXSxhPVtdO2ZvcihlPTA7ZTwxMjtlKyspbj1kKFsyZTMsZV0pLHIucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG4sIiIpKSxpLnB1c2godGhpcy5tb250aHMobiwiIikpLGEucHVzaCh0aGlzLm1vbnRocyhuLCIiKSksYS5wdXNoKHRoaXMubW9udGhzU2hvcnQobiwiIikpO2ZvcihyLnNvcnQodCksaS5zb3J0KHQpLGEuc29ydCh0KSxlPTA7ZTwxMjtlKyspcltlXT1mdChyW2VdKSxpW2VdPWZ0KGlbZV0pO2ZvcihlPTA7ZTwyNDtlKyspYVtlXT1mdChhW2VdKTt0aGlzLl9tb250aHNSZWdleD1uZXcgUmVnRXhwKCJeKCIrYS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRSZWdleD10aGlzLl9tb250aHNSZWdleCx0aGlzLl9tb250aHNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIraS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrci5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gQnQodCl7dmFyIGU7aWYodDwxMDAmJjA8PXQpe3ZhciBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7blswXT10KzQwMCxlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsbikpLGlzRmluaXRlKGUuZ2V0VVRDRnVsbFllYXIoKSkmJmUuc2V0VVRDRnVsbFllYXIodCl9ZWxzZSBlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsYXJndW1lbnRzKSk7cmV0dXJuIGV9ZnVuY3Rpb24gRHQodCxlLG4pe3ZhciByPTcrZS1uO3JldHVybi0oNytCdCh0LDAscikuZ2V0VVRDRGF5KCktZSklNytyLTF9ZnVuY3Rpb24gTHQodCxlLG4scixpKXt2YXIgYSxvLHM9MSs3KihlLTEpKyg3K24tciklNytEdCh0LHIsaSk7cmV0dXJuIG89czw9MD9ndChhPXQtMSkrczpzPmd0KHQpPyhhPXQrMSxzLWd0KHQpKTooYT10LHMpLHt5ZWFyOmEsZGF5T2ZZZWFyOm99fWZ1bmN0aW9uIEl0KHQsZSxuKXt2YXIgcixpLGE9RHQodC55ZWFyKCksZSxuKSxvPU1hdGguZmxvb3IoKHQuZGF5T2ZZZWFyKCktYS0xKS83KSsxO3JldHVybiBvPDE/cj1vK1J0KGk9dC55ZWFyKCktMSxlLG4pOm8+UnQodC55ZWFyKCksZSxuKT8ocj1vLVJ0KHQueWVhcigpLGUsbiksaT10LnllYXIoKSsxKTooaT10LnllYXIoKSxyPW8pLHt3ZWVrOnIseWVhcjppfX1mdW5jdGlvbiBSdCh0LGUsbil7dmFyIHI9RHQodCxlLG4pLGk9RHQodCsxLGUsbik7cmV0dXJuKGd0KHQpLXIraSkvN31mdW5jdGlvbiBGdCh0LGUpe3JldHVybiB0LnNsaWNlKGUsNykuY29uY2F0KHQuc2xpY2UoMCxlKSl9cSgidyIsWyJ3dyIsMl0sIndvIiwid2VlayIpLHEoIlciLFsiV1ciLDJdLCJXbyIsImlzb1dlZWsiKSxMKCJ3ZWVrIiwidyIpLEwoImlzb1dlZWsiLCJXIiksUCgid2VlayIsNSksUCgiaXNvV2VlayIsNSksbHQoInciLFEpLGx0KCJ3dyIsUSxHKSxsdCgiVyIsUSksbHQoIldXIixRLEcpLHl0KFsidyIsInd3IiwiVyIsIldXIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbci5zdWJzdHIoMCwxKV09dyh0KX0pKSxxKCJkIiwwLCJkbyIsImRheSIpLHEoImRkIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLHQpfSkpLHEoImRkZCIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLHQpfSkpLHEoImRkZGQiLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsdCl9KSkscSgiZSIsMCwwLCJ3ZWVrZGF5IikscSgiRSIsMCwwLCJpc29XZWVrZGF5IiksTCgiZGF5IiwiZCIpLEwoIndlZWtkYXkiLCJlIiksTCgiaXNvV2Vla2RheSIsIkUiKSxQKCJkYXkiLDExKSxQKCJ3ZWVrZGF5IiwxMSksUCgiaXNvV2Vla2RheSIsMTEpLGx0KCJkIixRKSxsdCgiZSIsUSksbHQoIkUiLFEpLGx0KCJkZCIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNNaW5SZWdleCh0KX0pKSxsdCgiZGRkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWVrZGF5c1Nob3J0UmVnZXgodCl9KSksbHQoImRkZGQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlLndlZWtkYXlzUmVnZXgodCl9KSkseXQoWyJkZCIsImRkZCIsImRkZGQiXSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bi5fbG9jYWxlLndlZWtkYXlzUGFyc2UodCxyLG4uX3N0cmljdCk7bnVsbCE9aT9lLmQ9aTpwKG4pLmludmFsaWRXZWVrZGF5PXR9KSkseXQoWyJkIiwiZSIsIkUiXSwoZnVuY3Rpb24odCxlLG4scil7ZVtyXT13KHQpfSkpO3ZhciBQdD0iU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksanQ9IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSxZdD0iU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksenQ9Y3QsVXQ9Y3QsJHQ9Y3Q7ZnVuY3Rpb24gcXQoKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIGUubGVuZ3RoLXQubGVuZ3RofXZhciBlLG4scixpLGEsbz1bXSxzPVtdLGM9W10sdT1bXTtmb3IoZT0wO2U8NztlKyspbj1kKFsyZTMsMV0pLmRheShlKSxyPXRoaXMud2Vla2RheXNNaW4obiwiIiksaT10aGlzLndlZWtkYXlzU2hvcnQobiwiIiksYT10aGlzLndlZWtkYXlzKG4sIiIpLG8ucHVzaChyKSxzLnB1c2goaSksYy5wdXNoKGEpLHUucHVzaChyKSx1LnB1c2goaSksdS5wdXNoKGEpO2ZvcihvLnNvcnQodCkscy5zb3J0KHQpLGMuc29ydCh0KSx1LnNvcnQodCksZT0wO2U8NztlKyspc1tlXT1mdChzW2VdKSxjW2VdPWZ0KGNbZV0pLHVbZV09ZnQodVtlXSk7dGhpcy5fd2Vla2RheXNSZWdleD1uZXcgUmVnRXhwKCJeKCIrdS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNNaW5SZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2Muam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrcy5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrby5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gV3QoKXtyZXR1cm4gdGhpcy5ob3VycygpJTEyfHwxMn1mdW5jdGlvbiBIdCh0LGUpe3EodCwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKHRoaXMuaG91cnMoKSx0aGlzLm1pbnV0ZXMoKSxlKX0pKX1mdW5jdGlvbiBWdCh0LGUpe3JldHVybiBlLl9tZXJpZGllbVBhcnNlfXEoIkgiLFsiSEgiLDJdLDAsImhvdXIiKSxxKCJoIixbImhoIiwyXSwwLFd0KSxxKCJrIixbImtrIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmhvdXJzKCl8fDI0fSkpLHEoImhtbSIsMCwwLChmdW5jdGlvbigpe3JldHVybiIiK1d0LmFwcGx5KHRoaXMpK2oodGhpcy5taW51dGVzKCksMil9KSkscSgiaG1tc3MiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIitXdC5hcHBseSh0aGlzKStqKHRoaXMubWludXRlcygpLDIpK2oodGhpcy5zZWNvbmRzKCksMil9KSkscSgiSG1tIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK2oodGhpcy5taW51dGVzKCksMil9KSkscSgiSG1tc3MiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkraih0aGlzLm1pbnV0ZXMoKSwyKStqKHRoaXMuc2Vjb25kcygpLDIpfSkpLEh0KCJhIiwhMCksSHQoIkEiLCExKSxMKCJob3VyIiwiaCIpLFAoImhvdXIiLDEzKSxsdCgiYSIsVnQpLGx0KCJBIixWdCksbHQoIkgiLFEpLGx0KCJoIixRKSxsdCgiayIsUSksbHQoIkhIIixRLEcpLGx0KCJoaCIsUSxHKSxsdCgia2siLFEsRyksbHQoImhtbSIsSiksbHQoImhtbXNzIix0dCksbHQoIkhtbSIsSiksbHQoIkhtbXNzIix0dCkscHQoWyJIIiwiSEgiXSwzKSxwdChbImsiLCJrayJdLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dyh0KTtlWzNdPTI0PT09cj8wOnJ9KSkscHQoWyJhIiwiQSJdLChmdW5jdGlvbih0LGUsbil7bi5faXNQbT1uLl9sb2NhbGUuaXNQTSh0KSxuLl9tZXJpZGllbT10fSkpLHB0KFsiaCIsImhoIl0sKGZ1bmN0aW9uKHQsZSxuKXtlWzNdPXcodCkscChuKS5iaWdIb3VyPSEwfSkpLHB0KCJobW0iLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtMjtlWzNdPXcodC5zdWJzdHIoMCxyKSksZVs0XT13KHQuc3Vic3RyKHIpKSxwKG4pLmJpZ0hvdXI9ITB9KSkscHQoImhtbXNzIiwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubGVuZ3RoLTQsaT10Lmxlbmd0aC0yO2VbM109dyh0LnN1YnN0cigwLHIpKSxlWzRdPXcodC5zdWJzdHIociwyKSksZVs1XT13KHQuc3Vic3RyKGkpKSxwKG4pLmJpZ0hvdXI9ITB9KSkscHQoIkhtbSIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmxlbmd0aC0yO2VbM109dyh0LnN1YnN0cigwLHIpKSxlWzRdPXcodC5zdWJzdHIocikpfSkpLHB0KCJIbW1zcyIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmxlbmd0aC00LGk9dC5sZW5ndGgtMjtlWzNdPXcodC5zdWJzdHIoMCxyKSksZVs0XT13KHQuc3Vic3RyKHIsMikpLGVbNV09dyh0LnN1YnN0cihpKSl9KSk7dmFyIEd0LFh0PXh0KCJIb3VycyIsITApLFp0PXtjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LGxvbmdEYXRlRm9ybWF0OntMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0saW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSIsb3JkaW5hbDoiJWQiLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxtb250aHM6RXQsbW9udGhzU2hvcnQ6Q3Qsd2Vlazp7ZG93OjAsZG95OjZ9LHdlZWtkYXlzOlB0LHdlZWtkYXlzTWluOll0LHdlZWtkYXlzU2hvcnQ6anQsbWVyaWRpZW1QYXJzZTovW2FwXVwuP20/XC4/L2l9LEt0PXt9LFF0PXt9O2Z1bmN0aW9uIEp0KHQpe3JldHVybiB0P3QudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCJfIiwiLSIpOnR9ZnVuY3Rpb24gdGUoZSl7dmFyIHI9bnVsbDtpZighS3RbZV0mJnZvaWQgMCE9PXQmJnQmJnQuZXhwb3J0cyl0cnl7cj1HdC5fYWJicixuKDIwMikoIi4vIitlKSxlZShyKX1jYXRjaChlKXt9cmV0dXJuIEt0W2VdfWZ1bmN0aW9uIGVlKHQsZSl7dmFyIG47cmV0dXJuIHQmJigobj1zKGUpP3JlKHQpOm5lKHQsZSkpP0d0PW46InVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiTG9jYWxlICIrdCsiIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8iKSksR3QuX2FiYnJ9ZnVuY3Rpb24gbmUodCxlKXtpZihudWxsPT09ZSlyZXR1cm4gZGVsZXRlIEt0W3RdLG51bGw7dmFyIG4scj1adDtpZihlLmFiYnI9dCxudWxsIT1LdFt0XSlNKCJkZWZpbmVMb2NhbGVPdmVycmlkZSIsInVzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlIGFuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLiIpLHI9S3RbdF0uX2NvbmZpZztlbHNlIGlmKG51bGwhPWUucGFyZW50TG9jYWxlKWlmKG51bGwhPUt0W2UucGFyZW50TG9jYWxlXSlyPUt0W2UucGFyZW50TG9jYWxlXS5fY29uZmlnO2Vsc2V7aWYobnVsbD09KG49dGUoZS5wYXJlbnRMb2NhbGUpKSlyZXR1cm4gUXRbZS5wYXJlbnRMb2NhbGVdfHwoUXRbZS5wYXJlbnRMb2NhbGVdPVtdKSxRdFtlLnBhcmVudExvY2FsZV0ucHVzaCh7bmFtZTp0LGNvbmZpZzplfSksbnVsbDtyPW4uX2NvbmZpZ31yZXR1cm4gS3RbdF09bmV3IEIoTihyLGUpKSxRdFt0XSYmUXRbdF0uZm9yRWFjaCgoZnVuY3Rpb24odCl7bmUodC5uYW1lLHQuY29uZmlnKX0pKSxlZSh0KSxLdFt0XX1mdW5jdGlvbiByZSh0KXt2YXIgZTtpZih0JiZ0Ll9sb2NhbGUmJnQuX2xvY2FsZS5fYWJiciYmKHQ9dC5fbG9jYWxlLl9hYmJyKSwhdClyZXR1cm4gR3Q7aWYoIWEodCkpe2lmKGU9dGUodCkpcmV0dXJuIGU7dD1bdF19cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaSxhPTA7YTx0Lmxlbmd0aDspe2ZvcihlPShpPUp0KHRbYV0pLnNwbGl0KCItIikpLmxlbmd0aCxuPShuPUp0KHRbYSsxXSkpP24uc3BsaXQoIi0iKTpudWxsOzA8ZTspe2lmKHI9dGUoaS5zbGljZSgwLGUpLmpvaW4oIi0iKSkpcmV0dXJuIHI7aWYobiYmbi5sZW5ndGg+PWUmJlQoaSxuLCEwKT49ZS0xKWJyZWFrO2UtLX1hKyt9cmV0dXJuIEd0fSh0KX1mdW5jdGlvbiBpZSh0KXt2YXIgZSxuPXQuX2E7cmV0dXJuIG4mJi0yPT09cCh0KS5vdmVyZmxvdyYmKGU9blsxXTwwfHwxMTxuWzFdPzE6blsyXTwxfHxuWzJdPnd0KG5bMF0sblsxXSk/MjpuWzNdPDB8fDI0PG5bM118fDI0PT09blszXSYmKDAhPT1uWzRdfHwwIT09bls1XXx8MCE9PW5bNl0pPzM6bls0XTwwfHw1OTxuWzRdPzQ6bls1XTwwfHw1OTxuWzVdPzU6bls2XTwwfHw5OTk8bls2XT82Oi0xLHAodCkuX292ZXJmbG93RGF5T2ZZZWFyJiYoZTwwfHwyPGUpJiYoZT0yKSxwKHQpLl9vdmVyZmxvd1dlZWtzJiYtMT09PWUmJihlPTcpLHAodCkuX292ZXJmbG93V2Vla2RheSYmLTE9PT1lJiYoZT04KSxwKHQpLm92ZXJmbG93PWUpLHR9ZnVuY3Rpb24gYWUodCxlLG4pe3JldHVybiBudWxsIT10P3Q6bnVsbCE9ZT9lOm59ZnVuY3Rpb24gb2UodCl7dmFyIGUsbixyLGEsbyxzPVtdO2lmKCF0Ll9kKXt2YXIgYyx1O2ZvcihjPXQsdT1uZXcgRGF0ZShpLm5vdygpKSxyPWMuX3VzZVVUQz9bdS5nZXRVVENGdWxsWWVhcigpLHUuZ2V0VVRDTW9udGgoKSx1LmdldFVUQ0RhdGUoKV06W3UuZ2V0RnVsbFllYXIoKSx1LmdldE1vbnRoKCksdS5nZXREYXRlKCldLHQuX3cmJm51bGw9PXQuX2FbMl0mJm51bGw9PXQuX2FbMV0mJmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGEsbyxzLGM7aWYobnVsbCE9KGU9dC5fdykuR0d8fG51bGwhPWUuV3x8bnVsbCE9ZS5FKWE9MSxvPTQsbj1hZShlLkdHLHQuX2FbMF0sSXQoeGUoKSwxLDQpLnllYXIpLHI9YWUoZS5XLDEpLCgoaT1hZShlLkUsMSkpPDF8fDc8aSkmJihjPSEwKTtlbHNle2E9dC5fbG9jYWxlLl93ZWVrLmRvdyxvPXQuX2xvY2FsZS5fd2Vlay5kb3k7dmFyIHU9SXQoeGUoKSxhLG8pO249YWUoZS5nZyx0Ll9hWzBdLHUueWVhcikscj1hZShlLncsdS53ZWVrKSxudWxsIT1lLmQ/KChpPWUuZCk8MHx8NjxpKSYmKGM9ITApOm51bGwhPWUuZT8oaT1lLmUrYSwoZS5lPDB8fDY8ZS5lKSYmKGM9ITApKTppPWF9cjwxfHxyPlJ0KG4sYSxvKT9wKHQpLl9vdmVyZmxvd1dlZWtzPSEwOm51bGwhPWM/cCh0KS5fb3ZlcmZsb3dXZWVrZGF5PSEwOihzPUx0KG4scixpLGEsbyksdC5fYVswXT1zLnllYXIsdC5fZGF5T2ZZZWFyPXMuZGF5T2ZZZWFyKX0odCksbnVsbCE9dC5fZGF5T2ZZZWFyJiYobz1hZSh0Ll9hWzBdLHJbMF0pLCh0Ll9kYXlPZlllYXI+Z3Qobyl8fDA9PT10Ll9kYXlPZlllYXIpJiYocCh0KS5fb3ZlcmZsb3dEYXlPZlllYXI9ITApLG49QnQobywwLHQuX2RheU9mWWVhciksdC5fYVsxXT1uLmdldFVUQ01vbnRoKCksdC5fYVsyXT1uLmdldFVUQ0RhdGUoKSksZT0wO2U8MyYmbnVsbD09dC5fYVtlXTsrK2UpdC5fYVtlXT1zW2VdPXJbZV07Zm9yKDtlPDc7ZSsrKXQuX2FbZV09c1tlXT1udWxsPT10Ll9hW2VdPzI9PT1lPzE6MDp0Ll9hW2VdOzI0PT09dC5fYVszXSYmMD09PXQuX2FbNF0mJjA9PT10Ll9hWzVdJiYwPT09dC5fYVs2XSYmKHQuX25leHREYXk9ITAsdC5fYVszXT0wKSx0Ll9kPSh0Ll91c2VVVEM/QnQ6ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM7cmV0dXJuIHQ8MTAwJiYwPD10PyhzPW5ldyBEYXRlKHQrNDAwLGUsbixyLGksYSxvKSxpc0Zpbml0ZShzLmdldEZ1bGxZZWFyKCkpJiZzLnNldEZ1bGxZZWFyKHQpKTpzPW5ldyBEYXRlKHQsZSxuLHIsaSxhLG8pLHN9KS5hcHBseShudWxsLHMpLGE9dC5fdXNlVVRDP3QuX2QuZ2V0VVRDRGF5KCk6dC5fZC5nZXREYXkoKSxudWxsIT10Ll90em0mJnQuX2Quc2V0VVRDTWludXRlcyh0Ll9kLmdldFVUQ01pbnV0ZXMoKS10Ll90em0pLHQuX25leHREYXkmJih0Ll9hWzNdPTI0KSx0Ll93JiZ2b2lkIDAhPT10Ll93LmQmJnQuX3cuZCE9PWEmJihwKHQpLndlZWtkYXlNaXNtYXRjaD0hMCl9fXZhciBzZT0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pLSg/OlxkXGQtXGRcZHxXXGRcZC1cZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OjpcZFxkKD86OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbXCtcLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyxjZT0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pKD86XGRcZFxkXGR8V1xkXGRcZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OlxkXGQoPzpcZFxkKD86Wy4sXVxkKyk/KT8pPykoW1wrXC1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sdWU9L1p8WystXVxkXGQoPzo6P1xkXGQpPy8sbGU9W1siWVlZWVlZLU1NLUREIiwvWystXVxkezZ9LVxkXGQtXGRcZC9dLFsiWVlZWS1NTS1ERCIsL1xkezR9LVxkXGQtXGRcZC9dLFsiR0dHRy1bV11XVy1FIiwvXGR7NH0tV1xkXGQtXGQvXSxbIkdHR0ctW1ddV1ciLC9cZHs0fS1XXGRcZC8sITFdLFsiWVlZWS1EREQiLC9cZHs0fS1cZHszfS9dLFsiWVlZWS1NTSIsL1xkezR9LVxkXGQvLCExXSxbIllZWVlZWU1NREQiLC9bKy1dXGR7MTB9L10sWyJZWVlZTU1ERCIsL1xkezh9L10sWyJHR0dHW1ddV1dFIiwvXGR7NH1XXGR7M30vXSxbIkdHR0dbV11XVyIsL1xkezR9V1xkezJ9LywhMV0sWyJZWVlZREREIiwvXGR7N30vXV0saGU9W1siSEg6bW06c3MuU1NTUyIsL1xkXGQ6XGRcZDpcZFxkXC5cZCsvXSxbIkhIOm1tOnNzLFNTU1MiLC9cZFxkOlxkXGQ6XGRcZCxcZCsvXSxbIkhIOm1tOnNzIiwvXGRcZDpcZFxkOlxkXGQvXSxbIkhIOm1tIiwvXGRcZDpcZFxkL10sWyJISG1tc3MuU1NTUyIsL1xkXGRcZFxkXGRcZFwuXGQrL10sWyJISG1tc3MsU1NTUyIsL1xkXGRcZFxkXGRcZCxcZCsvXSxbIkhIbW1zcyIsL1xkXGRcZFxkXGRcZC9dLFsiSEhtbSIsL1xkXGRcZFxkL10sWyJISCIsL1xkXGQvXV0sZmU9L15cLz9EYXRlXCgoXC0/XGQrKS9pO2Z1bmN0aW9uIGRlKHQpe3ZhciBlLG4scixpLGEsbyxzPXQuX2ksYz1zZS5leGVjKHMpfHxjZS5leGVjKHMpO2lmKGMpe2ZvcihwKHQpLmlzbz0hMCxlPTAsbj1sZS5sZW5ndGg7ZTxuO2UrKylpZihsZVtlXVsxXS5leGVjKGNbMV0pKXtpPWxlW2VdWzBdLHI9ITEhPT1sZVtlXVsyXTticmVha31pZihudWxsPT1pKXJldHVybiB2b2lkKHQuX2lzVmFsaWQ9ITEpO2lmKGNbM10pe2ZvcihlPTAsbj1oZS5sZW5ndGg7ZTxuO2UrKylpZihoZVtlXVsxXS5leGVjKGNbM10pKXthPShjWzJdfHwiICIpK2hlW2VdWzBdO2JyZWFrfWlmKG51bGw9PWEpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSl9aWYoIXImJm51bGwhPWEpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7aWYoY1s0XSl7aWYoIXVlLmV4ZWMoY1s0XSkpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7bz0iWiJ9dC5fZj1pKyhhfHwiIikrKG98fCIiKSxtZSh0KX1lbHNlIHQuX2lzVmFsaWQ9ITF9dmFyIHBlPS9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xzKT8oXGR7MSwyfSlccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylccyhcZHsyLDR9KVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpP1xzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXGR7NH0pKSQvLHllPXtVVDowLEdNVDowLEVEVDotMjQwLEVTVDotMzAwLENEVDotMzAwLENTVDotMzYwLE1EVDotMzYwLE1TVDotNDIwLFBEVDotNDIwLFBTVDotNDgwfTtmdW5jdGlvbiBnZSh0KXt2YXIgZSxuLHIsaT1wZS5leGVjKHQuX2kucmVwbGFjZSgvXChbXildKlwpfFtcblx0XS9nLCIgIikucmVwbGFjZSgvKFxzXHMrKS9nLCIgIikucmVwbGFjZSgvXlxzXHMqLywiIikucmVwbGFjZSgvXHNccyokLywiIikpO2lmKGkpe3ZhciBhPWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbz1bZnVuY3Rpb24odCl7dmFyIGU9cGFyc2VJbnQodCwxMCk7cmV0dXJuIGU8PTQ5PzJlMytlOmU8PTk5OT8xOTAwK2U6ZX0odCksQ3QuaW5kZXhPZihlKSxwYXJzZUludChuLDEwKSxwYXJzZUludChyLDEwKSxwYXJzZUludChpLDEwKV07cmV0dXJuIGEmJm8ucHVzaChwYXJzZUludChhLDEwKSksb30oaVs0XSxpWzNdLGlbMl0saVs1XSxpWzZdLGlbN10pO2lmKG49YSxyPXQsKGU9aVsxXSkmJmp0LmluZGV4T2YoZSkhPT1uZXcgRGF0ZShuWzBdLG5bMV0sblsyXSkuZ2V0RGF5KCkmJihwKHIpLndlZWtkYXlNaXNtYXRjaD0hMCwhKHIuX2lzVmFsaWQ9ITEpKSlyZXR1cm47dC5fYT1hLHQuX3R6bT1mdW5jdGlvbih0LGUsbil7aWYodClyZXR1cm4geWVbdF07aWYoZSlyZXR1cm4gMDt2YXIgcj1wYXJzZUludChuLDEwKSxpPXIlMTAwO3JldHVybihyLWkpLzEwMCo2MCtpfShpWzhdLGlbOV0saVsxMF0pLHQuX2Q9QnQuYXBwbHkobnVsbCx0Ll9hKSx0Ll9kLnNldFVUQ01pbnV0ZXModC5fZC5nZXRVVENNaW51dGVzKCktdC5fdHptKSxwKHQpLnJmYzI4MjI9ITB9ZWxzZSB0Ll9pc1ZhbGlkPSExfWZ1bmN0aW9uIG1lKHQpe2lmKHQuX2YhPT1pLklTT184NjAxKWlmKHQuX2YhPT1pLlJGQ18yODIyKXt0Ll9hPVtdLHAodCkuZW1wdHk9ITA7dmFyIGUsbixyLGEsbyxzLGMsdSxsPSIiK3QuX2ksZj1sLmxlbmd0aCxkPTA7Zm9yKHI9SCh0Ll9mLHQuX2xvY2FsZSkubWF0Y2goWSl8fFtdLGU9MDtlPHIubGVuZ3RoO2UrKylhPXJbZV0sKG49KGwubWF0Y2goaHQoYSx0KSl8fFtdKVswXSkmJigwPChvPWwuc3Vic3RyKDAsbC5pbmRleE9mKG4pKSkubGVuZ3RoJiZwKHQpLnVudXNlZElucHV0LnB1c2gobyksbD1sLnNsaWNlKGwuaW5kZXhPZihuKStuLmxlbmd0aCksZCs9bi5sZW5ndGgpLCRbYV0/KG4/cCh0KS5lbXB0eT0hMTpwKHQpLnVudXNlZFRva2Vucy5wdXNoKGEpLHM9YSx1PXQsbnVsbCE9KGM9bikmJmgoZHQscykmJmR0W3NdKGMsdS5fYSx1LHMpKTp0Ll9zdHJpY3QmJiFuJiZwKHQpLnVudXNlZFRva2Vucy5wdXNoKGEpO3AodCkuY2hhcnNMZWZ0T3Zlcj1mLWQsMDxsLmxlbmd0aCYmcCh0KS51bnVzZWRJbnB1dC5wdXNoKGwpLHQuX2FbM108PTEyJiYhMD09PXAodCkuYmlnSG91ciYmMDx0Ll9hWzNdJiYocCh0KS5iaWdIb3VyPXZvaWQgMCkscCh0KS5wYXJzZWREYXRlUGFydHM9dC5fYS5zbGljZSgwKSxwKHQpLm1lcmlkaWVtPXQuX21lcmlkaWVtLHQuX2FbM109ZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiBudWxsPT1uP2U6bnVsbCE9dC5tZXJpZGllbUhvdXI/dC5tZXJpZGllbUhvdXIoZSxuKToobnVsbCE9dC5pc1BNJiYoKHI9dC5pc1BNKG4pKSYmZTwxMiYmKGUrPTEyKSxyfHwxMiE9PWV8fChlPTApKSxlKX0odC5fbG9jYWxlLHQuX2FbM10sdC5fbWVyaWRpZW0pLG9lKHQpLGllKHQpfWVsc2UgZ2UodCk7ZWxzZSBkZSh0KX1mdW5jdGlvbiB2ZSh0KXt2YXIgZSxuLHIsaCxkPXQuX2ksbT10Ll9mO3JldHVybiB0Ll9sb2NhbGU9dC5fbG9jYWxlfHxyZSh0Ll9sKSxudWxsPT09ZHx8dm9pZCAwPT09bSYmIiI9PT1kP2coe251bGxJbnB1dDohMH0pOigic3RyaW5nIj09dHlwZW9mIGQmJih0Ll9pPWQ9dC5fbG9jYWxlLnByZXBhcnNlKGQpKSxfKGQpP25ldyB4KGllKGQpKToodShkKT90Ll9kPWQ6YShtKT9mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhO2lmKDA9PT10Ll9mLmxlbmd0aClyZXR1cm4gcCh0KS5pbnZhbGlkRm9ybWF0PSEwLHQuX2Q9bmV3IERhdGUoTmFOKTtmb3IoaT0wO2k8dC5fZi5sZW5ndGg7aSsrKWE9MCxlPXYoe30sdCksbnVsbCE9dC5fdXNlVVRDJiYoZS5fdXNlVVRDPXQuX3VzZVVUQyksZS5fZj10Ll9mW2ldLG1lKGUpLHkoZSkmJihhKz1wKGUpLmNoYXJzTGVmdE92ZXIsYSs9MTAqcChlKS51bnVzZWRUb2tlbnMubGVuZ3RoLHAoZSkuc2NvcmU9YSwobnVsbD09cnx8YTxyKSYmKHI9YSxuPWUpKTtmKHQsbnx8ZSl9KHQpOm0/bWUodCk6cyhuPShlPXQpLl9pKT9lLl9kPW5ldyBEYXRlKGkubm93KCkpOnUobik/ZS5fZD1uZXcgRGF0ZShuLnZhbHVlT2YoKSk6InN0cmluZyI9PXR5cGVvZiBuPyhyPWUsbnVsbD09PShoPWZlLmV4ZWMoci5faSkpPyhkZShyKSwhMT09PXIuX2lzVmFsaWQmJihkZWxldGUgci5faXNWYWxpZCxnZShyKSwhMT09PXIuX2lzVmFsaWQmJihkZWxldGUgci5faXNWYWxpZCxpLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKHIpKSkpOnIuX2Q9bmV3IERhdGUoK2hbMV0pKTphKG4pPyhlLl9hPWwobi5zbGljZSgwKSwoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQsMTApfSkpLG9lKGUpKTpvKG4pP2Z1bmN0aW9uKHQpe2lmKCF0Ll9kKXt2YXIgZT1SKHQuX2kpO3QuX2E9bChbZS55ZWFyLGUubW9udGgsZS5kYXl8fGUuZGF0ZSxlLmhvdXIsZS5taW51dGUsZS5zZWNvbmQsZS5taWxsaXNlY29uZF0sKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZwYXJzZUludCh0LDEwKX0pKSxvZSh0KX19KGUpOmMobik/ZS5fZD1uZXcgRGF0ZShuKTppLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGUpLHkodCl8fCh0Ll9kPW51bGwpLHQpKX1mdW5jdGlvbiBiZSh0LGUsbixyLGkpe3ZhciBzLGM9e307cmV0dXJuITAhPT1uJiYhMSE9PW58fChyPW4sbj12b2lkIDApLChvKHQpJiZmdW5jdGlvbih0KXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcylyZXR1cm4gMD09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmxlbmd0aDt2YXIgZTtmb3IoZSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuITE7cmV0dXJuITB9KHQpfHxhKHQpJiYwPT09dC5sZW5ndGgpJiYodD12b2lkIDApLGMuX2lzQU1vbWVudE9iamVjdD0hMCxjLl91c2VVVEM9Yy5faXNVVEM9aSxjLl9sPW4sYy5faT10LGMuX2Y9ZSxjLl9zdHJpY3Q9ciwocz1uZXcgeChpZSh2ZShjKSkpKS5fbmV4dERheSYmKHMuYWRkKDEsImQiKSxzLl9uZXh0RGF5PXZvaWQgMCksc31mdW5jdGlvbiB4ZSh0LGUsbixyKXtyZXR1cm4gYmUodCxlLG4sciwhMSl9aS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz1DKCJ2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSBkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGFuIHVwY29taW5nIG1ham9yIHJlbGVhc2UuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uIiwoZnVuY3Rpb24odCl7dC5fZD1uZXcgRGF0ZSh0Ll9pKyh0Ll91c2VVVEM/IiBVVEMiOiIiKSl9KSksaS5JU09fODYwMT1mdW5jdGlvbigpe30saS5SRkNfMjgyMj1mdW5jdGlvbigpe307dmFyIF9lPUMoIm1vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIiwoZnVuY3Rpb24oKXt2YXIgdD14ZS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKT90PHRoaXM/dGhpczp0OmcoKX0pKSxrZT1DKCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsKGZ1bmN0aW9uKCl7dmFyIHQ9eGUuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmdC5pc1ZhbGlkKCk/dGhpczx0P3RoaXM6dDpnKCl9KSk7ZnVuY3Rpb24gd2UodCxlKXt2YXIgbixyO2lmKDE9PT1lLmxlbmd0aCYmYShlWzBdKSYmKGU9ZVswXSksIWUubGVuZ3RoKXJldHVybiB4ZSgpO2ZvcihuPWVbMF0scj0xO3I8ZS5sZW5ndGg7KytyKWVbcl0uaXNWYWxpZCgpJiYhZVtyXVt0XShuKXx8KG49ZVtyXSk7cmV0dXJuIG59dmFyIFRlPVsieWVhciIsInF1YXJ0ZXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiXTtmdW5jdGlvbiBFZSh0KXt2YXIgZT1SKHQpLG49ZS55ZWFyfHwwLHI9ZS5xdWFydGVyfHwwLGk9ZS5tb250aHx8MCxhPWUud2Vla3x8ZS5pc29XZWVrfHwwLG89ZS5kYXl8fDAscz1lLmhvdXJ8fDAsYz1lLm1pbnV0ZXx8MCx1PWUuc2Vjb25kfHwwLGw9ZS5taWxsaXNlY29uZHx8MDt0aGlzLl9pc1ZhbGlkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKC0xPT09dnQuY2FsbChUZSxlKXx8bnVsbCE9dFtlXSYmaXNOYU4odFtlXSkpcmV0dXJuITE7Zm9yKHZhciBuPSExLHI9MDtyPFRlLmxlbmd0aDsrK3IpaWYodFtUZVtyXV0pe2lmKG4pcmV0dXJuITE7cGFyc2VGbG9hdCh0W1RlW3JdXSkhPT13KHRbVGVbcl1dKSYmKG49ITApfXJldHVybiEwfShlKSx0aGlzLl9taWxsaXNlY29uZHM9K2wrMWUzKnUrNmU0KmMrMWUzKnMqNjAqNjAsdGhpcy5fZGF5cz0rbys3KmEsdGhpcy5fbW9udGhzPStpKzMqcisxMipuLHRoaXMuX2RhdGE9e30sdGhpcy5fbG9jYWxlPXJlKCksdGhpcy5fYnViYmxlKCl9ZnVuY3Rpb24gQ2UodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFZX1mdW5jdGlvbiBTZSh0KXtyZXR1cm4gdDwwPy0xKk1hdGgucm91bmQoLTEqdCk6TWF0aC5yb3VuZCh0KX1mdW5jdGlvbiBBZSh0LGUpe3EodCwwLDAsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy51dGNPZmZzZXQoKSxuPSIrIjtyZXR1cm4gdDwwJiYodD0tdCxuPSItIiksbitqKH5+KHQvNjApLDIpK2Uraih+fnQlNjAsMil9KSl9QWUoIloiLCI6IiksQWUoIlpaIiwiIiksbHQoIloiLHN0KSxsdCgiWloiLHN0KSxwdChbIloiLCJaWiJdLChmdW5jdGlvbih0LGUsbil7bi5fdXNlVVRDPSEwLG4uX3R6bT1PZShzdCx0KX0pKTt2YXIgTWU9LyhbXCtcLV18XGRcZCkvZ2k7ZnVuY3Rpb24gT2UodCxlKXt2YXIgbj0oZXx8IiIpLm1hdGNoKHQpO2lmKG51bGw9PT1uKXJldHVybiBudWxsO3ZhciByPSgobltuLmxlbmd0aC0xXXx8W10pKyIiKS5tYXRjaChNZSl8fFsiLSIsMCwwXSxpPTYwKnJbMV0rdyhyWzJdKTtyZXR1cm4gMD09PWk/MDoiKyI9PT1yWzBdP2k6LWl9ZnVuY3Rpb24gTmUodCxlKXt2YXIgbixyO3JldHVybiBlLl9pc1VUQz8obj1lLmNsb25lKCkscj0oXyh0KXx8dSh0KT90LnZhbHVlT2YoKTp4ZSh0KS52YWx1ZU9mKCkpLW4udmFsdWVPZigpLG4uX2Quc2V0VGltZShuLl9kLnZhbHVlT2YoKStyKSxpLnVwZGF0ZU9mZnNldChuLCExKSxuKTp4ZSh0KS5sb2NhbCgpfWZ1bmN0aW9uIEJlKHQpe3JldHVybiAxNSotTWF0aC5yb3VuZCh0Ll9kLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfWZ1bmN0aW9uIERlKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXR9aS51cGRhdGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBMZT0vXihcLXxcKyk/KD86KFxkKilbLiBdKT8oXGQrKVw6KFxkKykoPzpcOihcZCspKFwuXGQqKT8pPyQvLEllPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztmdW5jdGlvbiBSZSh0LGUpe3ZhciBuLHIsaSxhPXQsbz1udWxsO3JldHVybiBDZSh0KT9hPXttczp0Ll9taWxsaXNlY29uZHMsZDp0Ll9kYXlzLE06dC5fbW9udGhzfTpjKHQpPyhhPXt9LGU/YVtlXT10OmEubWlsbGlzZWNvbmRzPXQpOihvPUxlLmV4ZWModCkpPyhuPSItIj09PW9bMV0/LTE6MSxhPXt5OjAsZDp3KG9bMl0pKm4saDp3KG9bM10pKm4sbTp3KG9bNF0pKm4sczp3KG9bNV0pKm4sbXM6dyhTZSgxZTMqb1s2XSkpKm59KToobz1JZS5leGVjKHQpKT8obj0iLSI9PT1vWzFdPy0xOjEsYT17eTpGZShvWzJdLG4pLE06RmUob1szXSxuKSx3OkZlKG9bNF0sbiksZDpGZShvWzVdLG4pLGg6RmUob1s2XSxuKSxtOkZlKG9bN10sbiksczpGZShvWzhdLG4pfSk6bnVsbD09YT9hPXt9OiJvYmplY3QiPT10eXBlb2YgYSYmKCJmcm9tImluIGF8fCJ0byJpbiBhKSYmKGk9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gdC5pc1ZhbGlkKCkmJmUuaXNWYWxpZCgpPyhlPU5lKGUsdCksdC5pc0JlZm9yZShlKT9uPVBlKHQsZSk6KChuPVBlKGUsdCkpLm1pbGxpc2Vjb25kcz0tbi5taWxsaXNlY29uZHMsbi5tb250aHM9LW4ubW9udGhzKSxuKTp7bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9fSh4ZShhLmZyb20pLHhlKGEudG8pKSwoYT17fSkubXM9aS5taWxsaXNlY29uZHMsYS5NPWkubW9udGhzKSxyPW5ldyBFZShhKSxDZSh0KSYmaCh0LCJfbG9jYWxlIikmJihyLl9sb2NhbGU9dC5fbG9jYWxlKSxyfWZ1bmN0aW9uIEZlKHQsZSl7dmFyIG49dCYmcGFyc2VGbG9hdCh0LnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihuKT8wOm4pKmV9ZnVuY3Rpb24gUGUodCxlKXt2YXIgbj17fTtyZXR1cm4gbi5tb250aHM9ZS5tb250aCgpLXQubW9udGgoKSsxMiooZS55ZWFyKCktdC55ZWFyKCkpLHQuY2xvbmUoKS5hZGQobi5tb250aHMsIk0iKS5pc0FmdGVyKGUpJiYtLW4ubW9udGhzLG4ubWlsbGlzZWNvbmRzPStlLSt0LmNsb25lKCkuYWRkKG4ubW9udGhzLCJNIiksbn1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBpO3JldHVybiBudWxsPT09cnx8aXNOYU4oK3IpfHwoTShlLCJtb21lbnQoKS4iK2UrIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iK2UrIihudW1iZXIsIHBlcmlvZCkuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4iKSxpPW4sbj1yLHI9aSksWWUodGhpcyxSZShuPSJzdHJpbmciPT10eXBlb2Ygbj8rbjpuLHIpLHQpLHRoaXN9fWZ1bmN0aW9uIFllKHQsZSxuLHIpe3ZhciBhPWUuX21pbGxpc2Vjb25kcyxvPVNlKGUuX2RheXMpLHM9U2UoZS5fbW9udGhzKTt0LmlzVmFsaWQoKSYmKHI9bnVsbD09cnx8cixzJiZTdCh0LF90KHQsIk1vbnRoIikrcypuKSxvJiZrdCh0LCJEYXRlIixfdCh0LCJEYXRlIikrbypuKSxhJiZ0Ll9kLnNldFRpbWUodC5fZC52YWx1ZU9mKCkrYSpuKSxyJiZpLnVwZGF0ZU9mZnNldCh0LG98fHMpKX1SZS5mbj1FZS5wcm90b3R5cGUsUmUuaW52YWxpZD1mdW5jdGlvbigpe3JldHVybiBSZShOYU4pfTt2YXIgemU9amUoMSwiYWRkIiksVWU9amUoLTEsInN1YnRyYWN0Iik7ZnVuY3Rpb24gJGUodCxlKXt2YXIgbj0xMiooZS55ZWFyKCktdC55ZWFyKCkpKyhlLm1vbnRoKCktdC5tb250aCgpKSxyPXQuY2xvbmUoKS5hZGQobiwibW9udGhzIik7cmV0dXJuLShuKyhlLXI8MD8oZS1yKS8oci10LmNsb25lKCkuYWRkKG4tMSwibW9udGhzIikpOihlLXIpLyh0LmNsb25lKCkuYWRkKG4rMSwibW9udGhzIiktcikpKXx8MH1mdW5jdGlvbiBxZSh0KXt2YXIgZTtyZXR1cm4gdm9pZCAwPT09dD90aGlzLl9sb2NhbGUuX2FiYnI6KG51bGwhPShlPXJlKHQpKSYmKHRoaXMuX2xvY2FsZT1lKSx0aGlzKX1pLmRlZmF1bHRGb3JtYXQ9IllZWVktTU0tRERUSEg6bW06c3NaIixpLmRlZmF1bHRGb3JtYXRVdGM9IllZWVktTU0tRERUSEg6bW06c3NbWl0iO3ZhciBXZT1DKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P3RoaXMubG9jYWxlRGF0YSgpOnRoaXMubG9jYWxlKHQpfSkpO2Z1bmN0aW9uIEhlKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX12YXIgVmU9MTI2MjI3ODA4ZTU7ZnVuY3Rpb24gR2UodCxlKXtyZXR1cm4odCVlK2UpJWV9ZnVuY3Rpb24gWGUodCxlLG4pe3JldHVybiB0PDEwMCYmMDw9dD9uZXcgRGF0ZSh0KzQwMCxlLG4pLVZlOm5ldyBEYXRlKHQsZSxuKS52YWx1ZU9mKCl9ZnVuY3Rpb24gWmUodCxlLG4pe3JldHVybiB0PDEwMCYmMDw9dD9EYXRlLlVUQyh0KzQwMCxlLG4pLVZlOkRhdGUuVVRDKHQsZSxuKX1mdW5jdGlvbiBLZSh0LGUpe3EoMCxbdCx0Lmxlbmd0aF0sMCxlKX1mdW5jdGlvbiBRZSh0LGUsbixyLGkpe3ZhciBhO3JldHVybiBudWxsPT10P0l0KHRoaXMscixpKS55ZWFyOigoYT1SdCh0LHIsaSkpPGUmJihlPWEpLGZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIGE9THQodCxlLG4scixpKSxvPUJ0KGEueWVhciwwLGEuZGF5T2ZZZWFyKTtyZXR1cm4gdGhpcy55ZWFyKG8uZ2V0VVRDRnVsbFllYXIoKSksdGhpcy5tb250aChvLmdldFVUQ01vbnRoKCkpLHRoaXMuZGF0ZShvLmdldFVUQ0RhdGUoKSksdGhpc30uY2FsbCh0aGlzLHQsZSxuLHIsaSkpfXEoMCxbImdnIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLndlZWtZZWFyKCklMTAwfSkpLHEoMCxbIkdHIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzb1dlZWtZZWFyKCklMTAwfSkpLEtlKCJnZ2dnIiwid2Vla1llYXIiKSxLZSgiZ2dnZ2ciLCJ3ZWVrWWVhciIpLEtlKCJHR0dHIiwiaXNvV2Vla1llYXIiKSxLZSgiR0dHR0ciLCJpc29XZWVrWWVhciIpLEwoIndlZWtZZWFyIiwiZ2ciKSxMKCJpc29XZWVrWWVhciIsIkdHIiksUCgid2Vla1llYXIiLDEpLFAoImlzb1dlZWtZZWFyIiwxKSxsdCgiRyIsYXQpLGx0KCJnIixhdCksbHQoIkdHIixRLEcpLGx0KCJnZyIsUSxHKSxsdCgiR0dHRyIsbnQsWiksbHQoImdnZ2ciLG50LFopLGx0KCJHR0dHRyIscnQsSyksbHQoImdnZ2dnIixydCxLKSx5dChbImdnZ2ciLCJnZ2dnZyIsIkdHR0ciLCJHR0dHRyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3Iuc3Vic3RyKDAsMildPXcodCl9KSkseXQoWyJnZyIsIkdHIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbcl09aS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pKSxxKCJRIiwwLCJRbyIsInF1YXJ0ZXIiKSxMKCJxdWFydGVyIiwiUSIpLFAoInF1YXJ0ZXIiLDcpLGx0KCJRIixWKSxwdCgiUSIsKGZ1bmN0aW9uKHQsZSl7ZVsxXT0zKih3KHQpLTEpfSkpLHEoIkQiLFsiREQiLDJdLCJEbyIsImRhdGUiKSxMKCJkYXRlIiwiRCIpLFAoImRhdGUiLDkpLGx0KCJEIixRKSxsdCgiREQiLFEsRyksbHQoIkRvIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9lLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlfHxlLl9vcmRpbmFsUGFyc2U6ZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnR9KSkscHQoWyJEIiwiREQiXSwyKSxwdCgiRG8iLChmdW5jdGlvbih0LGUpe2VbMl09dyh0Lm1hdGNoKFEpWzBdKX0pKTt2YXIgSmU9eHQoIkRhdGUiLCEwKTtxKCJEREQiLFsiRERERCIsM10sIkRERG8iLCJkYXlPZlllYXIiKSxMKCJkYXlPZlllYXIiLCJEREQiKSxQKCJkYXlPZlllYXIiLDQpLGx0KCJEREQiLGV0KSxsdCgiRERERCIsWCkscHQoWyJEREQiLCJEREREIl0sKGZ1bmN0aW9uKHQsZSxuKXtuLl9kYXlPZlllYXI9dyh0KX0pKSxxKCJtIixbIm1tIiwyXSwwLCJtaW51dGUiKSxMKCJtaW51dGUiLCJtIiksUCgibWludXRlIiwxNCksbHQoIm0iLFEpLGx0KCJtbSIsUSxHKSxwdChbIm0iLCJtbSJdLDQpO3ZhciB0bj14dCgiTWludXRlcyIsITEpO3EoInMiLFsic3MiLDJdLDAsInNlY29uZCIpLEwoInNlY29uZCIsInMiKSxQKCJzZWNvbmQiLDE1KSxsdCgicyIsUSksbHQoInNzIixRLEcpLHB0KFsicyIsInNzIl0sNSk7dmFyIGVuLG5uPXh0KCJTZWNvbmRzIiwhMSk7Zm9yKHEoIlMiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTAwKX0pKSxxKDAsWyJTUyIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTApfSkpLHEoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSxxKDAsWyJTU1NTIiw0XSwwLChmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSkscSgwLFsiU1NTU1MiLDVdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSkscSgwLFsiU1NTU1NTIiw2XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTMqdGhpcy5taWxsaXNlY29uZCgpfSkpLHEoMCxbIlNTU1NTU1MiLDddLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0aGlzLm1pbGxpc2Vjb25kKCl9KSkscSgwLFsiU1NTU1NTU1MiLDhdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNSp0aGlzLm1pbGxpc2Vjb25kKCl9KSkscSgwLFsiU1NTU1NTU1NTIiw5XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTYqdGhpcy5taWxsaXNlY29uZCgpfSkpLEwoIm1pbGxpc2Vjb25kIiwibXMiKSxQKCJtaWxsaXNlY29uZCIsMTYpLGx0KCJTIixldCxWKSxsdCgiU1MiLGV0LEcpLGx0KCJTU1MiLGV0LFgpLGVuPSJTU1NTIjtlbi5sZW5ndGg8PTk7ZW4rPSJTIilsdChlbixpdCk7ZnVuY3Rpb24gcm4odCxlKXtlWzZdPXcoMWUzKigiMC4iK3QpKX1mb3IoZW49IlMiO2VuLmxlbmd0aDw9OTtlbis9IlMiKXB0KGVuLHJuKTt2YXIgYW49eHQoIk1pbGxpc2Vjb25kcyIsITEpO3EoInoiLDAsMCwiem9uZUFiYnIiKSxxKCJ6eiIsMCwwLCJ6b25lTmFtZSIpO3ZhciBvbj14LnByb3RvdHlwZTtmdW5jdGlvbiBzbih0KXtyZXR1cm4gdH1vbi5hZGQ9emUsb24uY2FsZW5kYXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10fHx4ZSgpLHI9TmUobix0aGlzKS5zdGFydE9mKCJkYXkiKSxhPWkuY2FsZW5kYXJGb3JtYXQodGhpcyxyKXx8InNhbWVFbHNlIixvPWUmJihPKGVbYV0pP2VbYV0uY2FsbCh0aGlzLG4pOmVbYV0pO3JldHVybiB0aGlzLmZvcm1hdChvfHx0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihhLHRoaXMseGUobikpKX0sb24uY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHgodGhpcyl9LG9uLmRpZmY9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtpZighKHI9TmUodCx0aGlzKSkuaXNWYWxpZCgpKXJldHVybiBOYU47c3dpdGNoKGk9NmU0KihyLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpLGU9SShlKSl7Y2FzZSJ5ZWFyIjphPSRlKHRoaXMscikvMTI7YnJlYWs7Y2FzZSJtb250aCI6YT0kZSh0aGlzLHIpO2JyZWFrO2Nhc2UicXVhcnRlciI6YT0kZSh0aGlzLHIpLzM7YnJlYWs7Y2FzZSJzZWNvbmQiOmE9KHRoaXMtcikvMWUzO2JyZWFrO2Nhc2UibWludXRlIjphPSh0aGlzLXIpLzZlNDticmVhaztjYXNlImhvdXIiOmE9KHRoaXMtcikvMzZlNTticmVhaztjYXNlImRheSI6YT0odGhpcy1yLWkpLzg2NGU1O2JyZWFrO2Nhc2Uid2VlayI6YT0odGhpcy1yLWkpLzYwNDhlNTticmVhaztkZWZhdWx0OmE9dGhpcy1yfXJldHVybiBuP2E6ayhhKX0sb24uZW5kT2Y9ZnVuY3Rpb24odCl7dmFyIGU7aWYodm9pZCAwPT09KHQ9SSh0KSl8fCJtaWxsaXNlY29uZCI9PT10fHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5faXNVVEM/WmU6WGU7c3dpdGNoKHQpe2Nhc2UieWVhciI6ZT1uKHRoaXMueWVhcigpKzEsMCwxKS0xO2JyZWFrO2Nhc2UicXVhcnRlciI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMyszLDEpLTE7YnJlYWs7Y2FzZSJtb250aCI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSsxLDEpLTE7YnJlYWs7Y2FzZSJ3ZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKzcpLTE7YnJlYWs7Y2FzZSJpc29XZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS0xO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkrMSktMTticmVhaztjYXNlImhvdXIiOmU9dGhpcy5fZC52YWx1ZU9mKCksZSs9MzZlNS1HZShlKyh0aGlzLl9pc1VUQz8wOjZlNCp0aGlzLnV0Y09mZnNldCgpKSwzNmU1KS0xO2JyZWFrO2Nhc2UibWludXRlIjplPXRoaXMuX2QudmFsdWVPZigpLGUrPTZlNC1HZShlLDZlNCktMTticmVhaztjYXNlInNlY29uZCI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlKz0xZTMtR2UoZSwxZTMpLTF9cmV0dXJuIHRoaXMuX2Quc2V0VGltZShlKSxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSxvbi5mb3JtYXQ9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5pc1V0YygpP2kuZGVmYXVsdEZvcm1hdFV0YzppLmRlZmF1bHRGb3JtYXQpO3ZhciBlPVcodGhpcyx0KTtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChlKX0sb24uZnJvbT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKF8odCkmJnQuaXNWYWxpZCgpfHx4ZSh0KS5pc1ZhbGlkKCkpP1JlKHt0bzp0aGlzLGZyb206dH0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sb24uZnJvbU5vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tKHhlKCksdCl9LG9uLnRvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoXyh0KSYmdC5pc1ZhbGlkKCl8fHhlKHQpLmlzVmFsaWQoKSk/UmUoe2Zyb206dGhpcyx0bzp0fSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSxvbi50b05vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50byh4ZSgpLHQpfSxvbi5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIE8odGhpc1t0PUkodCldKT90aGlzW3RdKCk6dGhpc30sb24uaW52YWxpZEF0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcykub3ZlcmZsb3d9LG9uLmlzQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj1fKHQpP3Q6eGUodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9SShlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk+bi52YWx1ZU9mKCk6bi52YWx1ZU9mKCk8dGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpKX0sb24uaXNCZWZvcmU9ZnVuY3Rpb24odCxlKXt2YXIgbj1fKHQpP3Q6eGUodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9SShlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk8bi52YWx1ZU9mKCk6dGhpcy5jbG9uZSgpLmVuZE9mKGUpLnZhbHVlT2YoKTxuLnZhbHVlT2YoKSl9LG9uLmlzQmV0d2Vlbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1fKHQpP3Q6eGUodCksYT1fKGUpP2U6eGUoZSk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJmkuaXNWYWxpZCgpJiZhLmlzVmFsaWQoKSkmJigiKCI9PT0ocj1yfHwiKCkiKVswXT90aGlzLmlzQWZ0ZXIoaSxuKTohdGhpcy5pc0JlZm9yZShpLG4pKSYmKCIpIj09PXJbMV0/dGhpcy5pc0JlZm9yZShhLG4pOiF0aGlzLmlzQWZ0ZXIoYSxuKSl9LG9uLmlzU2FtZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9Xyh0KT90OnhlKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhci5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShlPUkoZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPT09ci52YWx1ZU9mKCk6KG49ci52YWx1ZU9mKCksdGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpPD1uJiZuPD10aGlzLmNsb25lKCkuZW5kT2YoZSkudmFsdWVPZigpKSl9LG9uLmlzU2FtZU9yQWZ0ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pc1NhbWUodCxlKXx8dGhpcy5pc0FmdGVyKHQsZSl9LG9uLmlzU2FtZU9yQmVmb3JlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNTYW1lKHQsZSl8fHRoaXMuaXNCZWZvcmUodCxlKX0sb24uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB5KHRoaXMpfSxvbi5sYW5nPVdlLG9uLmxvY2FsZT1xZSxvbi5sb2NhbGVEYXRhPUhlLG9uLm1heD1rZSxvbi5taW49X2Usb24ucGFyc2luZ0ZsYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIGYoe30scCh0aGlzKSl9LG9uLnNldD1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG49ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHt1bml0Om4scHJpb3JpdHk6RltuXX0pO3JldHVybiBlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucHJpb3JpdHktZS5wcmlvcml0eX0pKSxlfSh0PVIodCkpLHI9MDtyPG4ubGVuZ3RoO3IrKyl0aGlzW25bcl0udW5pdF0odFtuW3JdLnVuaXRdKTtlbHNlIGlmKE8odGhpc1t0PUkodCldKSlyZXR1cm4gdGhpc1t0XShlKTtyZXR1cm4gdGhpc30sb24uc3RhcnRPZj1mdW5jdGlvbih0KXt2YXIgZTtpZih2b2lkIDA9PT0odD1JKHQpKXx8Im1pbGxpc2Vjb25kIj09PXR8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl9pc1VUQz9aZTpYZTtzd2l0Y2godCl7Y2FzZSJ5ZWFyIjplPW4odGhpcy55ZWFyKCksMCwxKTticmVhaztjYXNlInF1YXJ0ZXIiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMsMSk7YnJlYWs7Y2FzZSJtb250aCI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSwxKTticmVhaztjYXNlIndlZWsiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkpO2JyZWFrO2Nhc2UiaXNvV2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkpO2JyZWFrO2Nhc2UiaG91ciI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1HZShlKyh0aGlzLl9pc1VUQz8wOjZlNCp0aGlzLnV0Y09mZnNldCgpKSwzNmU1KTticmVhaztjYXNlIm1pbnV0ZSI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1HZShlLDZlNCk7YnJlYWs7Y2FzZSJzZWNvbmQiOmU9dGhpcy5fZC52YWx1ZU9mKCksZS09R2UoZSwxZTMpfXJldHVybiB0aGlzLl9kLnNldFRpbWUoZSksaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sb24uc3VidHJhY3Q9VWUsb24udG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuW3QueWVhcigpLHQubW9udGgoKSx0LmRhdGUoKSx0LmhvdXIoKSx0Lm1pbnV0ZSgpLHQuc2Vjb25kKCksdC5taWxsaXNlY29uZCgpXX0sb24udG9PYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybnt5ZWFyczp0LnllYXIoKSxtb250aHM6dC5tb250aCgpLGRhdGU6dC5kYXRlKCksaG91cnM6dC5ob3VycygpLG1pbnV0ZXM6dC5taW51dGVzKCksc2Vjb25kczp0LnNlY29uZHMoKSxtaWxsaXNlY29uZHM6dC5taWxsaXNlY29uZHMoKX19LG9uLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LG9uLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDt2YXIgZT0hMCE9PXQsbj1lP3RoaXMuY2xvbmUoKS51dGMoKTp0aGlzO3JldHVybiBuLnllYXIoKTwwfHw5OTk5PG4ueWVhcigpP1cobixlPyJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIik6TyhEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyk/ZT90aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk6bmV3IERhdGUodGhpcy52YWx1ZU9mKCkrNjAqdGhpcy51dGNPZmZzZXQoKSoxZTMpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgiWiIsVyhuLCJaIikpOlcobixlPyJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKX0sb24uaW5zcGVjdD1mdW5jdGlvbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4ibW9tZW50LmludmFsaWQoLyogIit0aGlzLl9pKyIgKi8pIjt2YXIgdD0ibW9tZW50IixlPSIiO3RoaXMuaXNMb2NhbCgpfHwodD0wPT09dGhpcy51dGNPZmZzZXQoKT8ibW9tZW50LnV0YyI6Im1vbWVudC5wYXJzZVpvbmUiLGU9IloiKTt2YXIgbj0iWyIrdCsnKCJdJyxyPTA8PXRoaXMueWVhcigpJiZ0aGlzLnllYXIoKTw9OTk5OT8iWVlZWSI6IllZWVlZWSIsaT1lKydbIildJztyZXR1cm4gdGhpcy5mb3JtYXQobityKyItTU0tRERbVF1ISDptbTpzcy5TU1MiK2kpfSxvbi50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LG9uLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfSxvbi51bml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sb24udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kLnZhbHVlT2YoKS02ZTQqKHRoaXMuX29mZnNldHx8MCl9LG9uLmNyZWF0aW9uRGF0YT1mdW5jdGlvbigpe3JldHVybntpbnB1dDp0aGlzLl9pLGZvcm1hdDp0aGlzLl9mLGxvY2FsZTp0aGlzLl9sb2NhbGUsaXNVVEM6dGhpcy5faXNVVEMsc3RyaWN0OnRoaXMuX3N0cmljdH19LG9uLnllYXI9YnQsb24uaXNMZWFwWWVhcj1mdW5jdGlvbigpe3JldHVybiBtdCh0aGlzLnllYXIoKSl9LG9uLndlZWtZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBRZS5jYWxsKHRoaXMsdCx0aGlzLndlZWsoKSx0aGlzLndlZWtkYXkoKSx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX0sb24uaXNvV2Vla1llYXI9ZnVuY3Rpb24odCl7cmV0dXJuIFFlLmNhbGwodGhpcyx0LHRoaXMuaXNvV2VlaygpLHRoaXMuaXNvV2Vla2RheSgpLDEsNCl9LG9uLnF1YXJ0ZXI9b24ucXVhcnRlcnM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/TWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkrMSkvMyk6dGhpcy5tb250aCgzKih0LTEpK3RoaXMubW9udGgoKSUzKX0sb24ubW9udGg9QXQsb24uZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gd3QodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX0sb24ud2Vlaz1vbi53ZWVrcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfSxvbi5pc29XZWVrPW9uLmlzb1dlZWtzPWZ1bmN0aW9uKHQpe3ZhciBlPUl0KHRoaXMsMSw0KS53ZWVrO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfSxvbi53ZWVrc0luWWVhcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBSdCh0aGlzLnllYXIoKSx0LmRvdyx0LmRveSl9LG9uLmlzb1dlZWtzSW5ZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0KHRoaXMueWVhcigpLDEsNCl9LG9uLmRhdGU9SmUsb24uZGF5PW9uLmRheXM9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO3ZhciBlLG4scj10aGlzLl9pc1VUQz90aGlzLl9kLmdldFVUQ0RheSgpOnRoaXMuX2QuZ2V0RGF5KCk7cmV0dXJuIG51bGwhPXQ/KGU9dCxuPXRoaXMubG9jYWxlRGF0YSgpLHQ9InN0cmluZyIhPXR5cGVvZiBlP2U6aXNOYU4oZSk/Im51bWJlciI9PXR5cGVvZihlPW4ud2Vla2RheXNQYXJzZShlKSk/ZTpudWxsOnBhcnNlSW50KGUsMTApLHRoaXMuYWRkKHQtciwiZCIpKTpyfSxvbi53ZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZT0odGhpcy5kYXkoKSs3LXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyklNztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKHQtZSwiZCIpfSxvbi5pc29XZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjtpZihudWxsPT10KXJldHVybiB0aGlzLmRheSgpfHw3O3ZhciBlLG4scj0oZT10LG49dGhpcy5sb2NhbGVEYXRhKCksInN0cmluZyI9PXR5cGVvZiBlP24ud2Vla2RheXNQYXJzZShlKSU3fHw3OmlzTmFOKGUpP251bGw6ZSk7cmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCklNz9yOnItNyl9LG9uLmRheU9mWWVhcj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IiktdGhpcy5jbG9uZSgpLnN0YXJ0T2YoInllYXIiKSkvODY0ZTUpKzE7cmV0dXJuIG51bGw9PXQ/ZTp0aGlzLmFkZCh0LWUsImQiKX0sb24uaG91cj1vbi5ob3Vycz1YdCxvbi5taW51dGU9b24ubWludXRlcz10bixvbi5zZWNvbmQ9b24uc2Vjb25kcz1ubixvbi5taWxsaXNlY29uZD1vbi5taWxsaXNlY29uZHM9YW4sb24udXRjT2Zmc2V0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixhPXRoaXMuX29mZnNldHx8MDtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47aWYobnVsbD09dClyZXR1cm4gdGhpcy5faXNVVEM/YTpCZSh0aGlzKTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKG51bGw9PT0odD1PZShzdCx0KSkpcmV0dXJuIHRoaXN9ZWxzZSBNYXRoLmFicyh0KTwxNiYmIW4mJih0Kj02MCk7cmV0dXJuIXRoaXMuX2lzVVRDJiZlJiYocj1CZSh0aGlzKSksdGhpcy5fb2Zmc2V0PXQsdGhpcy5faXNVVEM9ITAsbnVsbCE9ciYmdGhpcy5hZGQociwibSIpLGEhPT10JiYoIWV8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/WWUodGhpcyxSZSh0LWEsIm0iKSwxLCExKTp0aGlzLl9jaGFuZ2VJblByb2dyZXNzfHwodGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz0hMCxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzLl9jaGFuZ2VJblByb2dyZXNzPW51bGwpKSx0aGlzfSxvbi51dGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsdCl9LG9uLmxvY2FsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0KDAsdCksdGhpcy5faXNVVEM9ITEsdCYmdGhpcy5zdWJ0cmFjdChCZSh0aGlzKSwibSIpKSx0aGlzfSxvbi5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLl90em0pdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCExLCEwKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5faSl7dmFyIHQ9T2Uob3QsdGhpcy5faSk7bnVsbCE9dD90aGlzLnV0Y09mZnNldCh0KTp0aGlzLnV0Y09mZnNldCgwLCEwKX1yZXR1cm4gdGhpc30sb24uaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKHQ9dD94ZSh0KS51dGNPZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLXQpJTYwPT0wKX0sb24uaXNEU1Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCl8fHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpfSxvbi5pc0xvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmIXRoaXMuX2lzVVRDfSxvbi5pc1V0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDfSxvbi5pc1V0Yz1EZSxvbi5pc1VUQz1EZSxvbi56b25lQWJicj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1VUQz8iVVRDIjoiIn0sb24uem9uZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNVVEM/IkNvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIjoiIn0sb24uZGF0ZXM9QygiZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4iLEplKSxvbi5tb250aHM9QygibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkIixBdCksb24ueWVhcnM9QygieWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCIsYnQpLG9uLnpvbmU9QygibW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8iLChmdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10Pygic3RyaW5nIiE9dHlwZW9mIHQmJih0PS10KSx0aGlzLnV0Y09mZnNldCh0LGUpLHRoaXMpOi10aGlzLnV0Y09mZnNldCgpfSkpLG9uLmlzRFNUU2hpZnRlZD1DKCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIiwoZnVuY3Rpb24oKXtpZighcyh0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyIHQ9e307aWYodih0LHRoaXMpLCh0PXZlKHQpKS5fYSl7dmFyIGU9dC5faXNVVEM/ZCh0Ll9hKTp4ZSh0Ll9hKTt0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJjA8VCh0Ll9hLGUudG9BcnJheSgpKX1lbHNlIHRoaXMuX2lzRFNUU2hpZnRlZD0hMTtyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkfSkpO3ZhciBjbj1CLnByb3RvdHlwZTtmdW5jdGlvbiB1bih0LGUsbixyKXt2YXIgaT1yZSgpLGE9ZCgpLnNldChyLGUpO3JldHVybiBpW25dKGEsdCl9ZnVuY3Rpb24gbG4odCxlLG4pe2lmKGModCkmJihlPXQsdD12b2lkIDApLHQ9dHx8IiIsbnVsbCE9ZSlyZXR1cm4gdW4odCxlLG4sIm1vbnRoIik7dmFyIHIsaT1bXTtmb3Iocj0wO3I8MTI7cisrKWlbcl09dW4odCxyLG4sIm1vbnRoIik7cmV0dXJuIGl9ZnVuY3Rpb24gaG4odCxlLG4scil7ImJvb2xlYW4iPT10eXBlb2YgdD9jKGUpJiYobj1lLGU9dm9pZCAwKTooZT10LHQ9ITEsYyhuPWUpJiYobj1lLGU9dm9pZCAwKSksZT1lfHwiIjt2YXIgaSxhPXJlKCksbz10P2EuX3dlZWsuZG93OjA7aWYobnVsbCE9bilyZXR1cm4gdW4oZSwobitvKSU3LHIsImRheSIpO3ZhciBzPVtdO2ZvcihpPTA7aTw3O2krKylzW2ldPXVuKGUsKGkrbyklNyxyLCJkYXkiKTtyZXR1cm4gc31jbi5jYWxlbmRhcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fY2FsZW5kYXJbdF18fHRoaXMuX2NhbGVuZGFyLnNhbWVFbHNlO3JldHVybiBPKHIpP3IuY2FsbChlLG4pOnJ9LGNuLmxvbmdEYXRlRm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdLG49dGhpcy5fbG9uZ0RhdGVGb3JtYXRbdC50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gZXx8IW4/ZToodGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF09bi5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMSl9KSksdGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF0pfSxjbi5pbnZhbGlkRGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX0sY24ub3JkaW5hbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCIlZCIsdCl9LGNuLnByZXBhcnNlPXNuLGNuLnBvc3Rmb3JtYXQ9c24sY24ucmVsYXRpdmVUaW1lPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMuX3JlbGF0aXZlVGltZVtuXTtyZXR1cm4gTyhpKT9pKHQsZSxuLHIpOmkucmVwbGFjZSgvJWQvaSx0KX0sY24ucGFzdEZ1dHVyZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3JlbGF0aXZlVGltZVswPHQ/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gTyhuKT9uKGUpOm4ucmVwbGFjZSgvJXMvaSxlKX0sY24uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlLG47Zm9yKG4gaW4gdClPKGU9dFtuXSk/dGhpc1tuXT1lOnRoaXNbIl8iK25dPWU7dGhpcy5fY29uZmlnPXQsdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ9bmV3IFJlZ0V4cCgodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2V8fHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpKyJ8IisvXGR7MSwyfS8uc291cmNlKX0sY24ubW9udGhzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1t0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHxUdCkudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW3QubW9udGgoKV06YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoczp0aGlzLl9tb250aHMuc3RhbmRhbG9uZX0sY24ubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9hKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFt0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W1R0LnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0Lm1vbnRoKCldOmEodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1Nob3J0LnN0YW5kYWxvbmV9LGNuLm1vbnRoc1BhcnNlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2UpZm9yKHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdLHI9MDtyPDEyOysrcilhPWQoWzJlMyxyXSksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT10aGlzLm1vbnRoc1Nob3J0KGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fbG9uZ01vbnRoc1BhcnNlW3JdPXRoaXMubW9udGhzKGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG4/Ik1NTSI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT12dC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxvKSk/aTpudWxsOiJNTU0iPT09ZT8tMSE9PShpPXZ0LmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbykpP2k6bnVsbH0uY2FsbCh0aGlzLHQsZSxuKTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSkscj0wO3I8MTI7cisrKXtpZihpPWQoWzJlMyxyXSksbiYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtyXSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhpLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KGksIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksbnx8dGhpcy5fbW9udGhzUGFyc2Vbcl18fChhPSJeIit0aGlzLm1vbnRocyhpLCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQoaSwiIiksdGhpcy5fbW9udGhzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiTU1NTSI9PT1lJiZ0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZihuJiYiTU1NIj09PWUmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fbW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcn19LGNuLm1vbnRoc1JlZ2V4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhoKHRoaXMsIl9tb250aHNSZWdleCIpfHxOdC5jYWxsKHRoaXMpLHQ/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpOihoKHRoaXMsIl9tb250aHNSZWdleCIpfHwodGhpcy5fbW9udGhzUmVnZXg9T3QpLHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4JiZ0P3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KX0sY24ubW9udGhzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8TnQuY2FsbCh0aGlzKSx0P3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KGgodGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9TXQpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJnQ/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX0sY24ud2Vlaz1mdW5jdGlvbih0KXtyZXR1cm4gSXQodCx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla30sY24uZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LGNuLmZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fSxjbi53ZWVrZGF5cz1mdW5jdGlvbih0LGUpe3ZhciBuPWEodGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzOnRoaXMuX3dlZWtkYXlzW3QmJiEwIT09dCYmdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdO3JldHVybiEwPT09dD9GdChuLHRoaXMuX3dlZWsuZG93KTp0P25bdC5kYXkoKV06bn0sY24ud2Vla2RheXNNaW49ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P0Z0KHRoaXMuX3dlZWtkYXlzTWluLHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzTWluW3QuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufSxjbi53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD9GdCh0aGlzLl93ZWVrZGF5c1Nob3J0LHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzU2hvcnRbdC5kYXkoKV06dGhpcy5fd2Vla2RheXNTaG9ydH0sY24ud2Vla2RheXNQYXJzZT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSxyPTA7cjw3OysrcilhPWQoWzJlMywxXSkuZGF5KHIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl09dGhpcy53ZWVrZGF5c01pbihhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT10aGlzLndlZWtkYXlzU2hvcnQoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW3JdPXRoaXMud2Vla2RheXMoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gbj8iZGRkZCI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6ImRkZCI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOiJkZGRkIj09PWU/LTEhPT0oaT12dC5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbykpfHwtMSE9PShpPXZ0LmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDoiZGRkIj09PWU/LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSk/aTpudWxsfS5jYWxsKHRoaXMsdCxlLG4pO2Zvcih0aGlzLl93ZWVrZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSkscj0wO3I8NztyKyspe2lmKGk9ZChbMmUzLDFdKS5kYXkociksbiYmIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3JdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5cyhpLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW3JdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXNNaW4oaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtyXXx8KGE9Il4iK3RoaXMud2Vla2RheXMoaSwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKGksIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiZGRkZCI9PT1lJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByO2lmKG4mJiJkZGQiPT09ZSYmdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYobiYmImRkIj09PWUmJnRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fd2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByfX0sY24ud2Vla2RheXNSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHF0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1JlZ2V4PXp0KSx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCl9LGNuLndlZWtkYXlzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHF0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KTooaCh0aGlzLCJfd2Vla2RheXNTaG9ydFJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9VXQpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCYmdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX0sY24ud2Vla2RheXNNaW5SZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHF0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c01pblJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c01pblJlZ2V4PSR0KSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCl9LGNuLmlzUE09ZnVuY3Rpb24odCl7cmV0dXJuInAiPT09KHQrIiIpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApfSxjbi5tZXJpZGllbT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDExPHQ/bj8icG0iOiJQTSI6bj8iYW0iOiJBTSJ9LGVlKCJlbiIse2RheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPXQlMTA7cmV0dXJuIHQrKDE9PT13KHQlMTAwLzEwKT8idGgiOjE9PT1lPyJzdCI6Mj09PWU/Im5kIjozPT09ZT8icmQiOiJ0aCIpfX0pLGkubGFuZz1DKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsZWUpLGkubGFuZ0RhdGE9QygibW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLiIscmUpO3ZhciBmbj1NYXRoLmFicztmdW5jdGlvbiBkbih0LGUsbixyKXt2YXIgaT1SZShlLG4pO3JldHVybiB0Ll9taWxsaXNlY29uZHMrPXIqaS5fbWlsbGlzZWNvbmRzLHQuX2RheXMrPXIqaS5fZGF5cyx0Ll9tb250aHMrPXIqaS5fbW9udGhzLHQuX2J1YmJsZSgpfWZ1bmN0aW9uIHBuKHQpe3JldHVybiB0PDA/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9ZnVuY3Rpb24geW4odCl7cmV0dXJuIDQ4MDAqdC8xNDYwOTd9ZnVuY3Rpb24gZ24odCl7cmV0dXJuIDE0NjA5Nyp0LzQ4MDB9ZnVuY3Rpb24gbW4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXModCl9fXZhciB2bj1tbigibXMiKSxibj1tbigicyIpLHhuPW1uKCJtIiksX249bW4oImgiKSxrbj1tbigiZCIpLHduPW1uKCJ3IiksVG49bW4oIk0iKSxFbj1tbigiUSIpLENuPW1uKCJ5Iik7ZnVuY3Rpb24gU24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX2RhdGFbdF06TmFOfX12YXIgQW49U24oIm1pbGxpc2Vjb25kcyIpLE1uPVNuKCJzZWNvbmRzIiksT249U24oIm1pbnV0ZXMiKSxObj1TbigiaG91cnMiKSxCbj1TbigiZGF5cyIpLERuPVNuKCJtb250aHMiKSxMbj1TbigieWVhcnMiKSxJbj1NYXRoLnJvdW5kLFJuPXtzczo0NCxzOjQ1LG06NDUsaDoyMixkOjI2LE06MTF9LEZuPU1hdGguYWJzO2Z1bmN0aW9uIFBuKHQpe3JldHVybigwPHQpLSh0PDApfHwrdH1mdW5jdGlvbiBqbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgdCxlLG49Rm4odGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMscj1Gbih0aGlzLl9kYXlzKSxpPUZuKHRoaXMuX21vbnRocyk7ZT1rKCh0PWsobi82MCkpLzYwKSxuJT02MCx0JT02MDt2YXIgYT1rKGkvMTIpLG89aSU9MTIscz1yLGM9ZSx1PXQsbD1uP24udG9GaXhlZCgzKS5yZXBsYWNlKC9cLj8wKyQvLCIiKToiIixoPXRoaXMuYXNTZWNvbmRzKCk7aWYoIWgpcmV0dXJuIlAwRCI7dmFyIGY9aDwwPyItIjoiIixkPVBuKHRoaXMuX21vbnRocykhPT1QbihoKT8iLSI6IiIscD1Qbih0aGlzLl9kYXlzKSE9PVBuKGgpPyItIjoiIix5PVBuKHRoaXMuX21pbGxpc2Vjb25kcykhPT1QbihoKT8iLSI6IiI7cmV0dXJuIGYrIlAiKyhhP2QrYSsiWSI6IiIpKyhvP2QrbysiTSI6IiIpKyhzP3ArcysiRCI6IiIpKyhjfHx1fHxsPyJUIjoiIikrKGM/eStjKyJIIjoiIikrKHU/eSt1KyJNIjoiIikrKGw/eStsKyJTIjoiIil9dmFyIFluPUVlLnByb3RvdHlwZTtyZXR1cm4gWW4uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxZbi5hYnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9Zm4odGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPWZuKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1mbih0aGlzLl9tb250aHMpLHQubWlsbGlzZWNvbmRzPWZuKHQubWlsbGlzZWNvbmRzKSx0LnNlY29uZHM9Zm4odC5zZWNvbmRzKSx0Lm1pbnV0ZXM9Zm4odC5taW51dGVzKSx0LmhvdXJzPWZuKHQuaG91cnMpLHQubW9udGhzPWZuKHQubW9udGhzKSx0LnllYXJzPWZuKHQueWVhcnMpLHRoaXN9LFluLmFkZD1mdW5jdGlvbih0LGUpe3JldHVybiBkbih0aGlzLHQsZSwxKX0sWW4uc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZG4odGhpcyx0LGUsLTEpfSxZbi5hcz1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgZSxuLHI9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKCJtb250aCI9PT0odD1JKHQpKXx8InF1YXJ0ZXIiPT09dHx8InllYXIiPT09dClzd2l0Y2goZT10aGlzLl9kYXlzK3IvODY0ZTUsbj10aGlzLl9tb250aHMreW4oZSksdCl7Y2FzZSJtb250aCI6cmV0dXJuIG47Y2FzZSJxdWFydGVyIjpyZXR1cm4gbi8zO2Nhc2UieWVhciI6cmV0dXJuIG4vMTJ9ZWxzZSBzd2l0Y2goZT10aGlzLl9kYXlzK01hdGgucm91bmQoZ24odGhpcy5fbW9udGhzKSksdCl7Y2FzZSJ3ZWVrIjpyZXR1cm4gZS83K3IvNjA0OGU1O2Nhc2UiZGF5IjpyZXR1cm4gZStyLzg2NGU1O2Nhc2UiaG91ciI6cmV0dXJuIDI0KmUrci8zNmU1O2Nhc2UibWludXRlIjpyZXR1cm4gMTQ0MCplK3IvNmU0O2Nhc2Uic2Vjb25kIjpyZXR1cm4gODY0MDAqZStyLzFlMztjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gTWF0aC5mbG9vcig4NjRlNSplKStyO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIit0KX19LFluLmFzTWlsbGlzZWNvbmRzPXZuLFluLmFzU2Vjb25kcz1ibixZbi5hc01pbnV0ZXM9eG4sWW4uYXNIb3Vycz1fbixZbi5hc0RheXM9a24sWW4uYXNXZWVrcz13bixZbi5hc01vbnRocz1UbixZbi5hc1F1YXJ0ZXJzPUVuLFluLmFzWWVhcnM9Q24sWW4udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9taWxsaXNlY29uZHMrODY0ZTUqdGhpcy5fZGF5cyt0aGlzLl9tb250aHMlMTIqMjU5MmU2KzMxNTM2ZTYqdyh0aGlzLl9tb250aHMvMTIpOk5hTn0sWW4uX2J1YmJsZT1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYT10aGlzLl9taWxsaXNlY29uZHMsbz10aGlzLl9kYXlzLHM9dGhpcy5fbW9udGhzLGM9dGhpcy5fZGF0YTtyZXR1cm4gMDw9YSYmMDw9byYmMDw9c3x8YTw9MCYmbzw9MCYmczw9MHx8KGErPTg2NGU1KnBuKGduKHMpK28pLHM9bz0wKSxjLm1pbGxpc2Vjb25kcz1hJTFlMyx0PWsoYS8xZTMpLGMuc2Vjb25kcz10JTYwLGU9ayh0LzYwKSxjLm1pbnV0ZXM9ZSU2MCxuPWsoZS82MCksYy5ob3Vycz1uJTI0LHMrPWk9ayh5bihvKz1rKG4vMjQpKSksby09cG4oZ24oaSkpLHI9ayhzLzEyKSxzJT0xMixjLmRheXM9byxjLm1vbnRocz1zLGMueWVhcnM9cix0aGlzfSxZbi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBSZSh0aGlzKX0sWW4uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PUkodCksdGhpcy5pc1ZhbGlkKCk/dGhpc1t0KyJzIl0oKTpOYU59LFluLm1pbGxpc2Vjb25kcz1BbixZbi5zZWNvbmRzPU1uLFluLm1pbnV0ZXM9T24sWW4uaG91cnM9Tm4sWW4uZGF5cz1CbixZbi53ZWVrcz1mdW5jdGlvbigpe3JldHVybiBrKHRoaXMuZGF5cygpLzcpfSxZbi5tb250aHM9RG4sWW4ueWVhcnM9TG4sWW4uaHVtYW5pemU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg9dGhpcy5sb2NhbGVEYXRhKCksZj0oZT0hdCxuPWgscj1SZSh0aGlzKS5hYnMoKSxpPUluKHIuYXMoInMiKSksYT1JbihyLmFzKCJtIikpLG89SW4oci5hcygiaCIpKSxzPUluKHIuYXMoImQiKSksYz1JbihyLmFzKCJNIikpLHU9SW4oci5hcygieSIpKSwobD1pPD1Sbi5zcyYmWyJzIixpXXx8aTxSbi5zJiZbInNzIixpXXx8YTw9MSYmWyJtIl18fGE8Um4ubSYmWyJtbSIsYV18fG88PTEmJlsiaCJdfHxvPFJuLmgmJlsiaGgiLG9dfHxzPD0xJiZbImQiXXx8czxSbi5kJiZbImRkIixzXXx8Yzw9MSYmWyJNIl18fGM8Um4uTSYmWyJNTSIsY118fHU8PTEmJlsieSJdfHxbInl5Iix1XSlbMl09ZSxsWzNdPTA8K3RoaXMsbFs0XT1uLGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGkucmVsYXRpdmVUaW1lKGV8fDEsISFuLHQscil9LmFwcGx5KG51bGwsbCkpO3JldHVybiB0JiYoZj1oLnBhc3RGdXR1cmUoK3RoaXMsZikpLGgucG9zdGZvcm1hdChmKX0sWW4udG9JU09TdHJpbmc9am4sWW4udG9TdHJpbmc9am4sWW4udG9KU09OPWpuLFluLmxvY2FsZT1xZSxZbi5sb2NhbGVEYXRhPUhlLFluLnRvSXNvU3RyaW5nPUMoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixqbiksWW4ubGFuZz1XZSxxKCJYIiwwLDAsInVuaXgiKSxxKCJ4IiwwLDAsInZhbHVlT2YiKSxsdCgieCIsYXQpLGx0KCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSxwdCgiWCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KHQsMTApKX0pKSxwdCgieCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKHcodCkpfSkpLGkudmVyc2lvbj0iMi4yNC4wIixlPXhlLGkuZm49b24saS5taW49ZnVuY3Rpb24oKXtyZXR1cm4gd2UoImlzQmVmb3JlIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIHdlKCJpc0FmdGVyIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfSxpLnV0Yz1kLGkudW5peD1mdW5jdGlvbih0KXtyZXR1cm4geGUoMWUzKnQpfSxpLm1vbnRocz1mdW5jdGlvbih0LGUpe3JldHVybiBsbih0LGUsIm1vbnRocyIpfSxpLmlzRGF0ZT11LGkubG9jYWxlPWVlLGkuaW52YWxpZD1nLGkuZHVyYXRpb249UmUsaS5pc01vbWVudD1fLGkud2Vla2RheXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXMiKX0saS5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4geGUuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfSxpLmxvY2FsZURhdGE9cmUsaS5pc0R1cmF0aW9uPUNlLGkubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbG4odCxlLCJtb250aHNTaG9ydCIpfSxpLndlZWtkYXlzTWluPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaG4odCxlLG4sIndlZWtkYXlzTWluIil9LGkuZGVmaW5lTG9jYWxlPW5lLGkudXBkYXRlTG9jYWxlPWZ1bmN0aW9uKHQsZSl7aWYobnVsbCE9ZSl7dmFyIG4scixpPVp0O251bGwhPShyPXRlKHQpKSYmKGk9ci5fY29uZmlnKSwobj1uZXcgQihlPU4oaSxlKSkpLnBhcmVudExvY2FsZT1LdFt0XSxLdFt0XT1uLGVlKHQpfWVsc2UgbnVsbCE9S3RbdF0mJihudWxsIT1LdFt0XS5wYXJlbnRMb2NhbGU/S3RbdF09S3RbdF0ucGFyZW50TG9jYWxlOm51bGwhPUt0W3RdJiZkZWxldGUgS3RbdF0pO3JldHVybiBLdFt0XX0saS5sb2NhbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIFMoS3QpfSxpLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXNTaG9ydCIpfSxpLm5vcm1hbGl6ZVVuaXRzPUksaS5yZWxhdGl2ZVRpbWVSb3VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9JbjoiZnVuY3Rpb24iPT10eXBlb2YgdCYmKEluPXQsITApfSxpLnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDAhPT1Sblt0XSYmKHZvaWQgMD09PWU/Um5bdF06KFJuW3RdPWUsInMiPT09dCYmKFJuLnNzPWUtMSksITApKX0saS5jYWxlbmRhckZvcm1hdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZGlmZihlLCJkYXlzIiwhMCk7cmV0dXJuIG48LTY/InNhbWVFbHNlIjpuPC0xPyJsYXN0V2VlayI6bjwwPyJsYXN0RGF5IjpuPDE/InNhbWVEYXkiOm48Mj8ibmV4dERheSI6bjw3PyJuZXh0V2VlayI6InNhbWVFbHNlIn0saS5wcm90b3R5cGU9b24saS5IVE1MNV9GTVQ9e0RBVEVUSU1FX0xPQ0FMOiJZWVlZLU1NLUREVEhIOm1tIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiJZWVlZLU1NLUREVEhIOm1tOnNzIixEQVRFVElNRV9MT0NBTF9NUzoiWVlZWS1NTS1ERFRISDptbTpzcy5TU1MiLERBVEU6IllZWVktTU0tREQiLFRJTUU6IkhIOm1tIixUSU1FX1NFQ09ORFM6IkhIOm1tOnNzIixUSU1FX01TOiJISDptbTpzcy5TU1MiLFdFRUs6IkdHR0ctW1ddV1ciLE1PTlRIOiJZWVlZLU1NIn0saX0oKX0pLmNhbGwodGhpcyxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwzXSxuPVsxLDVdLHI9WzcsOSwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMSwyOCwzM10saT1bMSwxNV0sYT1bMSwxNl0sbz1bMSwxN10scz1bMSwxOF0sYz1bMSwxOV0sdT1bMSwyMF0sbD1bMSwyMV0saD1bMSwyMl0sZj1bMSwyNF0sZD1bMSwyNl0scD1bMSwyOV0seT1bNSw3LDksMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjEsMjgsMzNdLGc9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LGdhbnR0OjUsZG9jdW1lbnQ6NixFT0Y6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkw6MTEsZGF0ZUZvcm1hdDoxMixpbmNsdXNpdmVFbmREYXRlczoxMyx0b3BBeGlzOjE0LGF4aXNGb3JtYXQ6MTUsZXhjbHVkZXM6MTYsdG9kYXlNYXJrZXI6MTcsdGl0bGU6MTgsc2VjdGlvbjoxOSxjbGlja1N0YXRlbWVudDoyMCx0YXNrVHh0OjIxLHRhc2tEYXRhOjIyLG9wZW5EaXJlY3RpdmU6MjMsdHlwZURpcmVjdGl2ZToyNCxjbG9zZURpcmVjdGl2ZToyNSwiOiI6MjYsYXJnRGlyZWN0aXZlOjI3LGNsaWNrOjI4LGNhbGxiYWNrbmFtZToyOSxjYWxsYmFja2FyZ3M6MzAsaHJlZjozMSxjbGlja1N0YXRlbWVudERlYnVnOjMyLG9wZW5fZGlyZWN0aXZlOjMzLHR5cGVfZGlyZWN0aXZlOjM0LGFyZ19kaXJlY3RpdmU6MzUsY2xvc2VfZGlyZWN0aXZlOjM2LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJnYW50dCIsNzoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5MIiwxMjoiZGF0ZUZvcm1hdCIsMTM6ImluY2x1c2l2ZUVuZERhdGVzIiwxNDoidG9wQXhpcyIsMTU6ImF4aXNGb3JtYXQiLDE2OiJleGNsdWRlcyIsMTc6InRvZGF5TWFya2VyIiwxODoidGl0bGUiLDE5OiJzZWN0aW9uIiwyMToidGFza1R4dCIsMjI6InRhc2tEYXRhIiwyNjoiOiIsMjg6ImNsaWNrIiwyOToiY2FsbGJhY2tuYW1lIiwzMDoiY2FsbGJhY2thcmdzIiwzMToiaHJlZiIsMzM6Im9wZW5fZGlyZWN0aXZlIiwzNDoidHlwZV9kaXJlY3RpdmUiLDM1OiJhcmdfZGlyZWN0aXZlIiwzNjoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzQsNF0sWzQsNl0sWzIwLDJdLFsyMCwzXSxbMjAsM10sWzIwLDRdLFsyMCwzXSxbMjAsNF0sWzIwLDJdLFszMiwyXSxbMzIsM10sWzMyLDNdLFszMiw0XSxbMzIsM10sWzMyLDRdLFszMiwyXSxbMjMsMV0sWzI0LDFdLFsyNywxXSxbMjUsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAyOnJldHVybiBhW3MtMV07Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgOTpyLnNldERhdGVGb3JtYXQoYVtzXS5zdWJzdHIoMTEpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTA6ci5lbmFibGVJbmNsdXNpdmVFbmREYXRlcygpLHRoaXMuJD1hW3NdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxMTpyLlRvcEF4aXMoKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxMjpyLnNldEF4aXNGb3JtYXQoYVtzXS5zdWJzdHIoMTEpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTM6ci5zZXRFeGNsdWRlcyhhW3NdLnN1YnN0cig5KSksdGhpcy4kPWFbc10uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMTQ6ci5zZXRUb2RheU1hcmtlcihhW3NdLnN1YnN0cigxMikpLHRoaXMuJD1hW3NdLnN1YnN0cigxMik7YnJlYWs7Y2FzZSAxNTpyLnNldFRpdGxlKGFbc10uc3Vic3RyKDYpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSAxNjpyLmFkZFNlY3Rpb24oYVtzXS5zdWJzdHIoOCkpLHRoaXMuJD1hW3NdLnN1YnN0cig4KTticmVhaztjYXNlIDE4OnIuYWRkVGFzayhhW3MtMV0sYVtzXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDIyOnRoaXMuJD1hW3MtMV0sci5zZXRDbGlja0V2ZW50KGFbcy0xXSxhW3NdLG51bGwpO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDI0OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0sbnVsbCksci5zZXRMaW5rKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDI1OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMl0sYVtzLTFdKSxyLnNldExpbmsoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbc10sbnVsbCksci5zZXRMaW5rKGFbcy0yXSxhW3MtMV0pO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0xXSxhW3NdKSxyLnNldExpbmsoYVtzLTNdLGFbcy0yXSk7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9YVtzLTFdLHIuc2V0TGluayhhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSAyOTpjYXNlIDM1OnRoaXMuJD1hW3MtMV0rIiAiK2Fbc107YnJlYWs7Y2FzZSAzMDpjYXNlIDMxOmNhc2UgMzM6dGhpcy4kPWFbcy0yXSsiICIrYVtzLTFdKyIgIithW3NdO2JyZWFrO2Nhc2UgMzI6Y2FzZSAzNDp0aGlzLiQ9YVtzLTNdKyIgIithW3MtMl0rIiAiK2Fbcy0xXSsiICIrYVtzXTticmVhaztjYXNlIDM2OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzNzpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzODphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzk6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiZ2FudHQiKX19LHRhYmxlOlt7MzoxLDQ6Miw1OmUsMjM6NCwzMzpufSx7MTpbM119LHszOjYsNDoyLDU6ZSwyMzo0LDMzOm59LHQocixbMiwzXSx7Njo3fSksezI0OjgsMzQ6WzEsOV19LHszNDpbMiwzNl19LHsxOlsyLDFdfSx7NDoyNSw3OlsxLDEwXSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjppLDEzOmEsMTQ6bywxNTpzLDE2OmMsMTc6dSwxODpsLDE5OmgsMjA6MjMsMjE6ZiwyMzo0LDI4OmQsMzM6bn0sezI1OjI3LDI2OlsxLDI4XSwzNjpwfSx0KFsyNiwzNl0sWzIsMzddKSx0KHIsWzIsOF0sezE6WzIsMl19KSx0KHIsWzIsNF0pLHs0OjI1LDEwOjMwLDEyOmksMTM6YSwxNDpvLDE1OnMsMTY6YywxNzp1LDE4OmwsMTk6aCwyMDoyMywyMTpmLDIzOjQsMjg6ZCwzMzpufSx0KHIsWzIsNl0pLHQocixbMiw3XSksdChyLFsyLDldKSx0KHIsWzIsMTBdKSx0KHIsWzIsMTFdKSx0KHIsWzIsMTJdKSx0KHIsWzIsMTNdKSx0KHIsWzIsMTRdKSx0KHIsWzIsMTVdKSx0KHIsWzIsMTZdKSx0KHIsWzIsMTddKSx7MjI6WzEsMzFdfSx0KHIsWzIsMTldKSx7Mjk6WzEsMzJdLDMxOlsxLDMzXX0sezExOlsxLDM0XX0sezI3OjM1LDM1OlsxLDM2XX0sezExOlsyLDM5XX0sdChyLFsyLDVdKSx0KHIsWzIsMThdKSx0KHIsWzIsMjJdLHszMDpbMSwzN10sMzE6WzEsMzhdfSksdChyLFsyLDI4XSx7Mjk6WzEsMzldfSksdCh5LFsyLDIwXSksezI1OjQwLDM2OnB9LHszNjpbMiwzOF19LHQocixbMiwyM10sezMxOlsxLDQxXX0pLHQocixbMiwyNF0pLHQocixbMiwyNl0sezMwOlsxLDQyXX0pLHsxMTpbMSw0M119LHQocixbMiwyNV0pLHQocixbMiwyN10pLHQoeSxbMiwyMV0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwzNl0sNjpbMiwxXSwyOTpbMiwzOV0sMzY6WzIsMzhdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sbT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDMzO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwzNDtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMjY7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDM2O2Nhc2UgNDpyZXR1cm4gMzU7Y2FzZSA1OmNhc2UgNjpjYXNlIDc6YnJlYWs7Y2FzZSA4OnJldHVybiAxMTtjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmJyZWFrO2Nhc2UgMTI6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMTM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIDMxO2Nhc2UgMTU6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAxNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAxODpyZXR1cm4gMjk7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gMzA7Y2FzZSAyMTp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDI4O2Nhc2UgMjQ6cmV0dXJuIDU7Y2FzZSAyNTpyZXR1cm4gMTI7Y2FzZSAyNjpyZXR1cm4gMTM7Y2FzZSAyNzpyZXR1cm4gMTQ7Y2FzZSAyODpyZXR1cm4gMTU7Y2FzZSAyOTpyZXR1cm4gMTY7Y2FzZSAzMDpyZXR1cm4gMTc7Y2FzZSAzMTpyZXR1cm4iZGF0ZSI7Y2FzZSAzMjpyZXR1cm4gMTg7Y2FzZSAzMzpyZXR1cm4gMTk7Y2FzZSAzNDpyZXR1cm4gMjE7Y2FzZSAzNTpyZXR1cm4gMjI7Y2FzZSAzNjpyZXR1cm4gMjY7Y2FzZSAzNzpyZXR1cm4gNztjYXNlIDM4OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUlKD8hXHspKlteXG5dKikvaSwvXig/OlteXH1dJSUqW15cbl0qKS9pLC9eKD86JSUqW15cbl0qW1xuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86aHJlZltcc10rWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpjYWxsW1xzXSspL2ksL14oPzpcKFtcc10qXCkpL2ksL14oPzpcKCkvaSwvXig/OlteKF0qKS9pLC9eKD86XCkpL2ksL14oPzpbXildKikvaSwvXig/OmNsaWNrW1xzXSspL2ksL14oPzpbXHNcbl0pL2ksL14oPzpbXlxzXG5dKikvaSwvXig/OmdhbnR0XGIpL2ksL14oPzpkYXRlRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1c2l2ZUVuZERhdGVzXGIpL2ksL14oPzp0b3BBeGlzXGIpL2ksL14oPzpheGlzRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmV4Y2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OnRvZGF5TWFya2VyXHNbXlxuO10rKS9pLC9eKD86XGRcZFxkXGQtXGRcZC1cZFxkXGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsxOSwyMF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxNiwxNywxOF0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyMiwyM10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMTUsMjEsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzhdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiB2KCl7dGhpcy55eT17fX1yZXR1cm4gZy5sZXhlcj1tLHYucHJvdG90eXBlPWcsZy5QYXJzZXI9dixuZXcgdn0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTIpLG4oNykodCkpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOSksaT1uKDgyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJmkodC5sZW5ndGgpJiYhcih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI2MSksaT1uKDI3MSksYT1uKDM2KSxvPW4oNSkscz1uKDI3OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bnVsbD09dD9hOiJvYmplY3QiPT10eXBlb2YgdD9vKHQpP2kodFswXSx0WzFdKTpyKHQpOnModCl9fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDldLG49WzEsN10scj1bMSw2XSxpPVsxLDhdLGE9WzEsMjAsMjEsMjIsMjMsMzgsNDcsNzYsNzcsNzgsNzksODAsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sbz1bMiwxMF0scz1bMSwyMF0sYz1bMSwyMV0sdT1bMSwyMl0sbD1bMSwyM10saD1bMSwzMF0sZj1bMSw1OV0sZD1bMSwzM10scD1bMSwzNF0seT1bMSwzNV0sZz1bMSwzNl0sbT1bMSwzN10sdj1bMSw1M10sYj1bMSw0OF0seD1bMSw1MF0sXz1bMSw0NV0saz1bMSw0OV0sdz1bMSw1Ml0sVD1bMSw1Nl0sRT1bMSw1N10sQz1bMSwzOF0sUz1bMSwzOV0sQT1bMSw0MF0sTT1bMSw0MV0sTz1bMSw1OF0sTj1bMSw0N10sQj1bMSw1MV0sRD1bMSw1NF0sTD1bMSw1NV0sST1bMSw0Nl0sUj1bMSw2Ml0sRj1bMSw2N10sUD1bMSwyMCwyMSwyMiwyMywzOCw0Miw0Nyw3Niw3Nyw3OCw3OSw4MCw4MSw5NSw5Niw5OSwxMDAsMTAxLDEwMywxMDQsMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5XSxqPVsxLDcxXSxZPVsxLDcwXSx6PVsxLDcyXSxVPVsyMCwyMSwyMyw3MCw3MV0sJD1bMSw5M10scT1bMSw5OF0sVz1bMSw5NV0sSD1bMSwxMDBdLFY9WzEsMTAzXSxHPVsxLDEwMV0sWD1bMSwxMDJdLFo9WzEsOTZdLEs9WzEsMTA4XSxRPVsxLDEwN10sSj1bMSw5N10sdHQ9WzEsOTldLGV0PVsxLDEwNF0sbnQ9WzEsMTA1XSxydD1bMSwxMDZdLGl0PVsxLDEwOV0sYXQ9WzIwLDIxLDIyLDIzLDcwLDcxXSxvdD1bMjAsMjEsMjIsMjMsNDgsNzAsNzFdLHN0PVsyMCwyMSwyMiwyMyw0MCw0Nyw0OCw1MCw1Miw1NCw1Niw1OCw2MCw2Miw2Myw2NSw3MCw3MSw4MSw5NSw5Niw5OSwxMDAsMTAxLDEwMywxMDQsMTE0LDExNSwxMTYsMTE3LDExOCwxMTldLGN0PVsyMCwyMSwyM10sdXQ9WzIwLDIxLDIzLDQ3LDcwLDcxLDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sbHQ9WzEsMTIsMjAsMjEsMjIsMjMsMjQsMzgsNDIsNDcsNzYsNzcsNzgsNzksODAsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0saHQ9WzQ3LDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sZnQ9WzEsMTQxXSxkdD1bMSwxNDldLHB0PVsxLDE1MF0seXQ9WzEsMTUxXSxndD1bMSwxNTJdLG10PVsxLDEzNl0sdnQ9WzEsMTM3XSxidD1bMSwxMzNdLHh0PVsxLDE0NF0sX3Q9WzEsMTQ1XSxrdD1bMSwxNDZdLHd0PVsxLDE0N10sVHQ9WzEsMTQ4XSxFdD1bMSwxNTNdLEN0PVsxLDE1NF0sU3Q9WzEsMTM5XSxBdD1bMSwxNDJdLE10PVsxLDEzOF0sT3Q9WzEsMTM1XSxOdD1bMjAsMjEsMjIsMjMsMzgsNDIsNDcsNzYsNzcsNzgsNzksODAsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sQnQ9WzEsMTU3XSxEdD1bMjAsMjEsMjIsMjMsMjYsNDcsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExNCwxMTUsMTE2LDExNywxMTgsMTE5XSxMdD1bMjAsMjEsMjIsMjMsMjQsMjYsMzgsNDAsNDEsNDIsNDcsNTEsNTMsNTUsNTcsNTksNjEsNjIsNjQsNjYsNzAsNzEsNzIsNzYsNzcsNzgsNzksODAsODEsODIsODUsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDEwNSwxMDYsMTE0LDExNSwxMTYsMTE3LDExOCwxMTldLEl0PVsxMiwyMSwyMiwyNF0sUnQ9WzIyLDk2XSxGdD1bMSwyMzhdLFB0PVsxLDI0Ml0sanQ9WzEsMjM5XSxZdD1bMSwyMzZdLHp0PVsxLDIzM10sVXQ9WzEsMjM0XSwkdD1bMSwyMzVdLHF0PVsxLDIzN10sV3Q9WzEsMjQwXSxIdD1bMSwyNDFdLFZ0PVsxLDI0M10sR3Q9WzEsMjYwXSxYdD1bMjAsMjEsMjMsOTZdLFp0PVsyMCwyMSwyMiwyMyw3Niw5Miw5NSw5Niw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNV0sS3Q9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3RpdmU6NSxvcGVuRGlyZWN0aXZlOjYsdHlwZURpcmVjdGl2ZTo3LGNsb3NlRGlyZWN0aXZlOjgsc2VwYXJhdG9yOjksIjoiOjEwLGFyZ0RpcmVjdGl2ZToxMSxvcGVuX2RpcmVjdGl2ZToxMix0eXBlX2RpcmVjdGl2ZToxMyxhcmdfZGlyZWN0aXZlOjE0LGNsb3NlX2RpcmVjdGl2ZToxNSxncmFwaENvbmZpZzoxNixkb2N1bWVudDoxNyxsaW5lOjE4LHN0YXRlbWVudDoxOSxTRU1JOjIwLE5FV0xJTkU6MjEsU1BBQ0U6MjIsRU9GOjIzLEdSQVBIOjI0LE5PRElSOjI1LERJUjoyNixGaXJzdFN0bXRTZXBlcmF0b3I6MjcsZW5kaW5nOjI4LGVuZFRva2VuOjI5LHNwYWNlTGlzdDozMCxzcGFjZUxpc3ROZXdsaW5lOjMxLHZlcnRpY2VTdGF0ZW1lbnQ6MzIsc3R5bGVTdGF0ZW1lbnQ6MzMsbGlua1N0eWxlU3RhdGVtZW50OjM0LGNsYXNzRGVmU3RhdGVtZW50OjM1LGNsYXNzU3RhdGVtZW50OjM2LGNsaWNrU3RhdGVtZW50OjM3LHN1YmdyYXBoOjM4LHRleHQ6MzksU1FTOjQwLFNRRTo0MSxlbmQ6NDIsZGlyZWN0aW9uOjQzLGxpbms6NDQsbm9kZTo0NSx2ZXJ0ZXg6NDYsQU1QOjQ3LFNUWUxFX1NFUEFSQVRPUjo0OCxpZFN0cmluZzo0OSxQUzo1MCxQRTo1MSwiKC0iOjUyLCItKSI6NTMsU1RBRElVTVNUQVJUOjU0LFNUQURJVU1FTkQ6NTUsU1VCUk9VVElORVNUQVJUOjU2LFNVQlJPVVRJTkVFTkQ6NTcsQ1lMSU5ERVJTVEFSVDo1OCxDWUxJTkRFUkVORDo1OSxESUFNT05EX1NUQVJUOjYwLERJQU1PTkRfU1RPUDo2MSxUQUdFTkQ6NjIsVFJBUFNUQVJUOjYzLFRSQVBFTkQ6NjQsSU5WVFJBUFNUQVJUOjY1LElOVlRSQVBFTkQ6NjYsbGlua1N0YXRlbWVudDo2NyxhcnJvd1RleHQ6NjgsVEVTVFNUUjo2OSxTVEFSVF9MSU5LOjcwLExJTks6NzEsUElQRTo3Mix0ZXh0VG9rZW46NzMsU1RSOjc0LGtleXdvcmRzOjc1LFNUWUxFOjc2LExJTktTVFlMRTo3NyxDTEFTU0RFRjo3OCxDTEFTUzo3OSxDTElDSzo4MCxET1dOOjgxLFVQOjgyLHRleHROb1RhZ3M6ODMsdGV4dE5vVGFnc1Rva2VuOjg0LERFRkFVTFQ6ODUsc3R5bGVzT3B0Ojg2LGFscGhhTnVtOjg3LENBTExCQUNLTkFNRTo4OCxDQUxMQkFDS0FSR1M6ODksSFJFRjo5MCxMSU5LX1RBUkdFVDo5MSxIRVg6OTIsbnVtTGlzdDo5MyxJTlRFUlBPTEFURTo5NCxOVU06OTUsQ09NTUE6OTYsc3R5bGU6OTcsc3R5bGVDb21wb25lbnQ6OTgsQUxQSEE6OTksQ09MT046MTAwLE1JTlVTOjEwMSxVTklUOjEwMixCUktUOjEwMyxET1Q6MTA0LFBDVDoxMDUsVEFHU1RBUlQ6MTA2LGFscGhhTnVtVG9rZW46MTA3LGlkU3RyaW5nVG9rZW46MTA4LGFscGhhTnVtU3RhdGVtZW50OjEwOSxkaXJlY3Rpb25fdGI6MTEwLGRpcmVjdGlvbl9idDoxMTEsZGlyZWN0aW9uX3JsOjExMixkaXJlY3Rpb25fbHI6MTEzLFBVTkNUVUFUSU9OOjExNCxVTklDT0RFX1RFWFQ6MTE1LFBMVVM6MTE2LEVRVUFMUzoxMTcsTVVMVDoxMTgsVU5ERVJTQ09SRToxMTksZ3JhcGhDb2RlVG9rZW5zOjEyMCxBUlJPV19DUk9TUzoxMjEsQVJST1dfUE9JTlQ6MTIyLEFSUk9XX0NJUkNMRToxMjMsQVJST1dfT1BFTjoxMjQsUVVPVEU6MTI1LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiwxMDoiOiIsMTI6Im9wZW5fZGlyZWN0aXZlIiwxMzoidHlwZV9kaXJlY3RpdmUiLDE0OiJhcmdfZGlyZWN0aXZlIiwxNToiY2xvc2VfZGlyZWN0aXZlIiwyMDoiU0VNSSIsMjE6Ik5FV0xJTkUiLDIyOiJTUEFDRSIsMjM6IkVPRiIsMjQ6IkdSQVBIIiwyNToiTk9ESVIiLDI2OiJESVIiLDM4OiJzdWJncmFwaCIsNDA6IlNRUyIsNDE6IlNRRSIsNDI6ImVuZCIsNDc6IkFNUCIsNDg6IlNUWUxFX1NFUEFSQVRPUiIsNTA6IlBTIiw1MToiUEUiLDUyOiIoLSIsNTM6Ii0pIiw1NDoiU1RBRElVTVNUQVJUIiw1NToiU1RBRElVTUVORCIsNTY6IlNVQlJPVVRJTkVTVEFSVCIsNTc6IlNVQlJPVVRJTkVFTkQiLDU4OiJDWUxJTkRFUlNUQVJUIiw1OToiQ1lMSU5ERVJFTkQiLDYwOiJESUFNT05EX1NUQVJUIiw2MToiRElBTU9ORF9TVE9QIiw2MjoiVEFHRU5EIiw2MzoiVFJBUFNUQVJUIiw2NDoiVFJBUEVORCIsNjU6IklOVlRSQVBTVEFSVCIsNjY6IklOVlRSQVBFTkQiLDY5OiJURVNUU1RSIiw3MDoiU1RBUlRfTElOSyIsNzE6IkxJTksiLDcyOiJQSVBFIiw3NDoiU1RSIiw3NjoiU1RZTEUiLDc3OiJMSU5LU1RZTEUiLDc4OiJDTEFTU0RFRiIsNzk6IkNMQVNTIiw4MDoiQ0xJQ0siLDgxOiJET1dOIiw4MjoiVVAiLDg1OiJERUZBVUxUIiw4ODoiQ0FMTEJBQ0tOQU1FIiw4OToiQ0FMTEJBQ0tBUkdTIiw5MDoiSFJFRiIsOTE6IkxJTktfVEFSR0VUIiw5MjoiSEVYIiw5NDoiSU5URVJQT0xBVEUiLDk1OiJOVU0iLDk2OiJDT01NQSIsOTk6IkFMUEhBIiwxMDA6IkNPTE9OIiwxMDE6Ik1JTlVTIiwxMDI6IlVOSVQiLDEwMzoiQlJLVCIsMTA0OiJET1QiLDEwNToiUENUIiwxMDY6IlRBR1NUQVJUIiwxMTA6ImRpcmVjdGlvbl90YiIsMTExOiJkaXJlY3Rpb25fYnQiLDExMjoiZGlyZWN0aW9uX3JsIiwxMTM6ImRpcmVjdGlvbl9sciIsMTE0OiJQVU5DVFVBVElPTiIsMTE1OiJVTklDT0RFX1RFWFQiLDExNjoiUExVUyIsMTE3OiJFUVVBTFMiLDExODoiTVVMVCIsMTE5OiJVTkRFUlNDT1JFIiwxMjE6IkFSUk9XX0NST1NTIiwxMjI6IkFSUk9XX1BPSU5UIiwxMjM6IkFSUk9XX0NJUkNMRSIsMTI0OiJBUlJPV19PUEVOIiwxMjU6IlFVT1RFIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDRdLFs1LDZdLFs2LDFdLFs3LDFdLFsxMSwxXSxbOCwxXSxbNCwyXSxbMTcsMF0sWzE3LDJdLFsxOCwxXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzE2LDJdLFsxNiwyXSxbMTYsMl0sWzE2LDNdLFsyOCwyXSxbMjgsMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzI3LDFdLFsyNywxXSxbMjcsMl0sWzMxLDJdLFszMSwyXSxbMzEsMV0sWzMxLDFdLFszMCwyXSxbMzAsMV0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDldLFsxOSw2XSxbMTksNF0sWzE5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFszMiwzXSxbMzIsNF0sWzMyLDJdLFszMiwxXSxbNDUsMV0sWzQ1LDVdLFs0NSwzXSxbNDYsNF0sWzQ2LDZdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0Niw2XSxbNDYsNF0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0NiwxXSxbNDQsMl0sWzQ0LDNdLFs0NCwzXSxbNDQsMV0sWzQ0LDNdLFs2NywxXSxbNjgsM10sWzM5LDFdLFszOSwyXSxbMzksMV0sWzc1LDFdLFs3NSwxXSxbNzUsMV0sWzc1LDFdLFs3NSwxXSxbNzUsMV0sWzc1LDFdLFs3NSwxXSxbNzUsMV0sWzc1LDFdLFs3NSwxXSxbODMsMV0sWzgzLDJdLFszNSw1XSxbMzUsNV0sWzM2LDVdLFszNywyXSxbMzcsNF0sWzM3LDNdLFszNyw1XSxbMzcsMl0sWzM3LDRdLFszNyw0XSxbMzcsNl0sWzM3LDJdLFszNyw0XSxbMzcsMl0sWzM3LDRdLFszNyw0XSxbMzcsNl0sWzMzLDVdLFszMyw1XSxbMzQsNV0sWzM0LDVdLFszNCw5XSxbMzQsOV0sWzM0LDddLFszNCw3XSxbOTMsMV0sWzkzLDNdLFs4NiwxXSxbODYsM10sWzk3LDFdLFs5NywyXSxbOTgsMV0sWzk4LDFdLFs5OCwxXSxbOTgsMV0sWzk4LDFdLFs5OCwxXSxbOTgsMV0sWzk4LDFdLFs5OCwxXSxbOTgsMV0sWzk4LDFdLFs3MywxXSxbNzMsMV0sWzczLDFdLFs3MywxXSxbNzMsMV0sWzczLDFdLFs4NCwxXSxbODQsMV0sWzg0LDFdLFs4NCwxXSxbNDksMV0sWzQ5LDJdLFs4NywxXSxbODcsMl0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbNDMsMV0sWzQzLDFdLFs0MywxXSxbNDMsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA3OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA4OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImZsb3djaGFydCIpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6YVtzXSE9PVtdJiZhW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMTI6Y2FzZSA3NzpjYXNlIDc5OmNhc2UgOTE6Y2FzZSAxNDc6Y2FzZSAxNDk6Y2FzZSAxNTA6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxOTpyLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDIwOnIuc2V0RGlyZWN0aW9uKGFbcy0xXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDM1OnRoaXMuJD1hW3MtMV0ubm9kZXM7YnJlYWs7Y2FzZSAzNjpjYXNlIDM3OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQwOnRoaXMuJD1bXTticmVhaztjYXNlIDQxOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy02XSxhW3MtMV0sYVtzLTRdKTticmVhaztjYXNlIDQyOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy0zXSxhW3MtMV0sYVtzLTNdKTticmVhaztjYXNlIDQzOnRoaXMuJD1yLmFkZFN1YkdyYXBoKHZvaWQgMCxhW3MtMV0sdm9pZCAwKTticmVhaztjYXNlIDQ4OnIuYWRkTGluayhhW3MtMl0uc3RtdCxhW3NdLGFbcy0xXSksdGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXS5jb25jYXQoYVtzLTJdLm5vZGVzKX07YnJlYWs7Y2FzZSA0OTpyLmFkZExpbmsoYVtzLTNdLnN0bXQsYVtzLTFdLGFbcy0yXSksdGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV0uY29uY2F0KGFbcy0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV19O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXX07YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPWFbcy00XS5jb25jYXQoYVtzXSk7YnJlYWs7Y2FzZSA1NDp0aGlzLiQ9W2Fbcy0yXV0sci5zZXRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU3OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZWxsaXBzZSIpO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJzdGFkaXVtIik7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDYwOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiY3lsaW5kZXIiKTticmVhaztjYXNlIDYxOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwicm91bmQiKTticmVhaztjYXNlIDYyOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJoZXhhZ29uIik7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sIm9kZCIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY2OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiaW52X3RyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJsZWFuX3JpZ2h0Iik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNjk6dGhpcy4kPWFbc10sci5hZGRWZXJ0ZXgoYVtzXSk7YnJlYWs7Y2FzZSA3MDphW3MtMV0udGV4dD1hW3NdLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3MTpjYXNlIDcyOmFbcy0yXS50ZXh0PWFbcy0xXSx0aGlzLiQ9YVtzLTJdO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA3NDp2YXIgYz1yLmRlc3RydWN0TGluayhhW3NdLGFbcy0yXSk7dGhpcy4kPXt0eXBlOmMudHlwZSxzdHJva2U6Yy5zdHJva2UsbGVuZ3RoOmMubGVuZ3RoLHRleHQ6YVtzLTFdfTticmVhaztjYXNlIDc1OmM9ci5kZXN0cnVjdExpbmsoYVtzXSk7dGhpcy4kPXt0eXBlOmMudHlwZSxzdHJva2U6Yy5zdHJva2UsbGVuZ3RoOmMubGVuZ3RofTticmVhaztjYXNlIDc2OnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3ODpjYXNlIDkyOmNhc2UgMTQ4OnRoaXMuJD1hW3MtMV0rIiIrYVtzXTticmVhaztjYXNlIDkzOmNhc2UgOTQ6dGhpcy4kPWFbcy00XSxyLmFkZENsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDk1OnRoaXMuJD1hW3MtNF0sci5zZXRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA5NjpjYXNlIDEwNDp0aGlzLiQ9YVtzLTFdLHIuc2V0Q2xpY2tFdmVudChhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSA5NzpjYXNlIDEwNTp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgOTg6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDk5OnRoaXMuJD1hW3MtNF0sci5zZXRDbGlja0V2ZW50KGFbcy00XSxhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgMTAwOmNhc2UgMTA2OnRoaXMuJD1hW3MtMV0sci5zZXRMaW5rKGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDEwMTpjYXNlIDEwNzp0aGlzLiQ9YVtzLTNdLHIuc2V0TGluayhhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMTAyOmNhc2UgMTA4OnRoaXMuJD1hW3MtM10sci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMDM6Y2FzZSAxMDk6dGhpcy4kPWFbcy01XSxyLnNldExpbmsoYVtzLTVdLGFbcy00XSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTVdLGFbcy0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPWFbcy00XSxyLmFkZFZlcnRleChhW3MtMl0sdm9pZCAwLHZvaWQgMCxhW3NdKTticmVhaztjYXNlIDExMTpjYXNlIDExMzp0aGlzLiQ9YVtzLTRdLHIudXBkYXRlTGluayhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTI6dGhpcy4kPWFbcy00XSxyLnVwZGF0ZUxpbmsoW2Fbcy0yXV0sYVtzXSk7YnJlYWs7Y2FzZSAxMTQ6dGhpcy4kPWFbcy04XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTZdXSxhW3MtMl0pLHIudXBkYXRlTGluayhbYVtzLTZdXSxhW3NdKTticmVhaztjYXNlIDExNTp0aGlzLiQ9YVtzLThdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy02XSxhW3MtMl0pLHIudXBkYXRlTGluayhhW3MtNl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTY6dGhpcy4kPWFbcy02XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTRdXSxhW3NdKTticmVhaztjYXNlIDExNzp0aGlzLiQ9YVtzLTZdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy00XSxhW3NdKTticmVhaztjYXNlIDExODpjYXNlIDEyMDp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgMTE5OmNhc2UgMTIxOmFbcy0yXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMl07YnJlYWs7Y2FzZSAxMjM6dGhpcy4kPWFbcy0xXSthW3NdO2JyZWFrO2Nhc2UgMTQ1OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTQ2OnRoaXMuJD1hW3MtMV0rIiIrYVtzXTticmVhaztjYXNlIDE1MTp0aGlzLiQ9InYiO2JyZWFrO2Nhc2UgMTUyOnRoaXMuJD0iLSI7YnJlYWs7Y2FzZSAxNTM6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMTU0OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDE1NTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAxNTY6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9fX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjUsMTI6ZSwxNjo0LDIxOm4sMjI6ciwyNDppfSx7MTpbM119LHsxOlsyLDFdfSx7MzoxMCw0OjIsNTozLDY6NSwxMjplLDE2OjQsMjE6biwyMjpyLDI0Oml9LHQoYSxvLHsxNzoxMX0pLHs3OjEyLDEzOlsxLDEzXX0sezE2OjE0LDIxOm4sMjI6ciwyNDppfSx7MTY6MTUsMjE6biwyMjpyLDI0Oml9LHsyNTpbMSwxNl0sMjY6WzEsMTddfSx7MTM6WzIsNV19LHsxOlsyLDJdfSx7MTpbMiw5XSwxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6dSwyMzpsLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw3NjpkLDc3OnAsNzg6eSw3OTpnLDgwOm0sODE6diw5NTpiLDk2OngsOTk6XywxMDA6aywxMDE6dywxMDM6VCwxMDQ6RSwxMDg6NDQsMTEwOkMsMTExOlMsMTEyOkEsMTEzOk0sMTE0Ok8sMTE1Ok4sMTE2OkIsMTE3OkQsMTE4OkwsMTE5Okl9LHs4OjYwLDEwOlsxLDYxXSwxNTpSfSx0KFsxMCwxNV0sWzIsNl0pLHQoYSxbMiwxN10pLHQoYSxbMiwxOF0pLHQoYSxbMiwxOV0pLHsyMDpbMSw2NF0sMjE6WzEsNjVdLDIyOkYsMjc6NjMsMzA6NjZ9LHQoUCxbMiwxMV0pLHQoUCxbMiwxMl0pLHQoUCxbMiwxM10pLHQoUCxbMiwxNF0pLHQoUCxbMiwxNV0pLHQoUCxbMiwxNl0pLHs5OjY4LDIwOmosMjE6WSwyMzp6LDQ0OjY5LDY3OjczLDcwOlsxLDc0XSw3MTpbMSw3NV19LHs5Ojc2LDIwOmosMjE6WSwyMzp6fSx7OTo3NywyMDpqLDIxOlksMjM6en0sezk6NzgsMjA6aiwyMTpZLDIzOnp9LHs5Ojc5LDIwOmosMjE6WSwyMzp6fSx7OTo4MCwyMDpqLDIxOlksMjM6en0sezk6ODIsMjA6aiwyMTpZLDIyOlsxLDgxXSwyMzp6fSx0KFAsWzIsNDRdKSx0KFUsWzIsNTFdLHszMDo4MywyMjpGfSksezIyOlsxLDg0XX0sezIyOlsxLDg1XX0sezIyOlsxLDg2XX0sezIyOlsxLDg3XX0sezI2OiQsNDc6cSw3NDpbMSw5MV0sODE6Vyw4Nzo5MCw4ODpbMSw4OF0sOTA6WzEsODldLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChQLFsyLDE1M10pLHQoUCxbMiwxNTRdKSx0KFAsWzIsMTU1XSksdChQLFsyLDE1Nl0pLHQoYXQsWzIsNTJdLHs0ODpbMSwxMTBdfSksdChvdCxbMiw2OV0sezEwODoxMjEsNDA6WzEsMTExXSw0NzpmLDUwOlsxLDExMl0sNTI6WzEsMTEzXSw1NDpbMSwxMTRdLDU2OlsxLDExNV0sNTg6WzEsMTE2XSw2MDpbMSwxMTddLDYyOlsxLDExOF0sNjM6WzEsMTE5XSw2NTpbMSwxMjBdLDgxOnYsOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOlQsMTA0OkUsMTE0Ok8sMTE1Ok4sMTE2OkIsMTE3OkQsMTE4OkwsMTE5Okl9KSx0KHN0LFsyLDE0NV0pLHQoc3QsWzIsMTcwXSksdChzdCxbMiwxNzFdKSx0KHN0LFsyLDE3Ml0pLHQoc3QsWzIsMTczXSksdChzdCxbMiwxNzRdKSx0KHN0LFsyLDE3NV0pLHQoc3QsWzIsMTc2XSksdChzdCxbMiwxNzddKSx0KHN0LFsyLDE3OF0pLHQoc3QsWzIsMTc5XSksdChzdCxbMiwxODBdKSx0KHN0LFsyLDE4MV0pLHQoc3QsWzIsMTgyXSksdChzdCxbMiwxODNdKSx0KHN0LFsyLDE4NF0pLHs5OjEyMiwyMDpqLDIxOlksMjM6en0sezExOjEyMywxNDpbMSwxMjRdfSx0KGN0LFsyLDhdKSx0KGEsWzIsMjBdKSx0KGEsWzIsMjZdKSx0KGEsWzIsMjddKSx7MjE6WzEsMTI1XX0sdCh1dCxbMiwzNF0sezMwOjEyNiwyMjpGfSksdChQLFsyLDM1XSksezQ1OjEyNyw0Njo0Miw0NzpmLDQ5OjQzLDgxOnYsOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOlQsMTA0OkUsMTA4OjQ0LDExNDpPLDExNTpOLDExNjpCLDExNzpELDExODpMLDExOTpJfSx0KGx0LFsyLDQ1XSksdChsdCxbMiw0Nl0pLHQobHQsWzIsNDddKSx0KGh0LFsyLDczXSx7Njg6MTI4LDY5OlsxLDEyOV0sNzI6WzEsMTMwXX0pLHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxMzEsNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHQoWzQ3LDY5LDcyLDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sWzIsNzVdKSx0KFAsWzIsMzZdKSx0KFAsWzIsMzddKSx0KFAsWzIsMzhdKSx0KFAsWzIsMzldKSx0KFAsWzIsNDBdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTU1LDQyOmd0LDQ3OnEsNjI6bXQsNzA6dnQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KE50LG8sezE3OjE1Nn0pLHQoVSxbMiw1MF0sezQ3OkJ0fSksezI2OiQsNDc6cSw4MTpXLDg3OjE1OCw5MjpbMSwxNTldLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezg1OlsxLDE2MF0sOTM6MTYxLDk1OlsxLDE2Ml19LHsyNjokLDQ3OnEsODE6Vyw4NTpbMSwxNjNdLDg3OjE2NCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6WiwxMDM6SywxMDQ6USwxMDc6OTQsMTA5OjkyLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyNjokLDQ3OnEsODE6Vyw4NzoxNjUsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOlosMTAzOkssMTA0OlEsMTA3Ojk0LDEwOTo5MiwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KGN0LFsyLDk2XSx7MjI6WzEsMTY2XSw4OTpbMSwxNjddfSksdChjdCxbMiwxMDBdLHsyMjpbMSwxNjhdfSksdChjdCxbMiwxMDRdLHsxMDc6OTQsMTA5OjE3MCwyMjpbMSwxNjldLDI2OiQsNDc6cSw4MTpXLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9KSx0KGN0LFsyLDEwNl0sezIyOlsxLDE3MV19KSx0KER0LFsyLDE0N10pLHQoRHQsWzIsMTQ5XSksdChEdCxbMiwxNTBdKSx0KER0LFsyLDE1MV0pLHQoRHQsWzIsMTUyXSksdChMdCxbMiwxNTddKSx0KEx0LFsyLDE1OF0pLHQoTHQsWzIsMTU5XSksdChMdCxbMiwxNjBdKSx0KEx0LFsyLDE2MV0pLHQoTHQsWzIsMTYyXSksdChMdCxbMiwxNjNdKSx0KEx0LFsyLDE2NF0pLHQoTHQsWzIsMTY1XSksdChMdCxbMiwxNjZdKSx0KEx0LFsyLDE2N10pLHQoTHQsWzIsMTY4XSksdChMdCxbMiwxNjldKSx7NDc6Ziw0OToxNzIsODE6diw5NTpiLDk2OngsOTk6XywxMDA6aywxMDE6dywxMDM6VCwxMDQ6RSwxMDg6NDQsMTE0Ok8sMTE1Ok4sMTE2OkIsMTE3OkQsMTE4OkwsMTE5Okl9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxNzMsNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxNzUsNDI6Z3QsNDc6cSw1MDpbMSwxNzRdLDYyOm10LDcwOnZ0LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3Niw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3Nyw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3OCw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3OSw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE4MCw0MjpndCw0NzpxLDYwOlsxLDE4MV0sNjI6bXQsNzA6dnQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTgyLDQyOmd0LDQ3OnEsNjI6bXQsNzA6dnQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTgzLDQyOmd0LDQ3OnEsNjI6bXQsNzA6dnQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTg0LDQyOmd0LDQ3OnEsNjI6bXQsNzA6dnQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KHN0LFsyLDE0Nl0pLHQoSXQsWzIsM10pLHs4OjE4NSwxNTpSfSx7MTU6WzIsN119LHQoYSxbMiwyOF0pLHQodXQsWzIsMzNdKSx0KFUsWzIsNDhdLHszMDoxODYsMjI6Rn0pLHQoaHQsWzIsNzBdLHsyMjpbMSwxODddfSksezIyOlsxLDE4OF19LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxODksNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDcxOlsxLDE5MF0sNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KEx0LFsyLDc3XSksdChMdCxbMiw3OV0pLHQoTHQsWzIsMTM1XSksdChMdCxbMiwxMzZdKSx0KEx0LFsyLDEzN10pLHQoTHQsWzIsMTM4XSksdChMdCxbMiwxMzldKSx0KEx0LFsyLDE0MF0pLHQoTHQsWzIsMTQxXSksdChMdCxbMiwxNDJdKSx0KEx0LFsyLDE0M10pLHQoTHQsWzIsMTQ0XSksdChMdCxbMiw4MF0pLHQoTHQsWzIsODFdKSx0KEx0LFsyLDgyXSksdChMdCxbMiw4M10pLHQoTHQsWzIsODRdKSx0KEx0LFsyLDg1XSksdChMdCxbMiw4Nl0pLHQoTHQsWzIsODddKSx0KEx0LFsyLDg4XSksdChMdCxbMiw4OV0pLHQoTHQsWzIsOTBdKSx7OToxOTMsMjA6aiwyMTpZLDIyOmZ0LDIzOnosMjQ6ZHQsMjY6cHQsMzg6eXQsNDA6WzEsMTkyXSw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwxOTRdLDQzOjMxLDQ1OjMyLDQ2OjQyLDQ3OmYsNDk6NDMsNzY6ZCw3NzpwLDc4OnksNzk6Zyw4MDptLDgxOnYsOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOlQsMTA0OkUsMTA4OjQ0LDExMDpDLDExMTpTLDExMjpBLDExMzpNLDExNDpPLDExNTpOLDExNjpCLDExNzpELDExODpMLDExOTpJfSx7MjI6RiwzMDoxOTV9LHsyMjpbMSwxOTZdLDI2OiQsNDc6cSw4MTpXLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDEwNzo5NCwxMDk6MTcwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpbMSwxOTddfSx7MjI6WzEsMTk4XX0sezIyOlsxLDE5OV0sOTY6WzEsMjAwXX0sdChSdCxbMiwxMThdKSx7MjI6WzEsMjAxXX0sezIyOlsxLDIwMl0sMjY6JCw0NzpxLDgxOlcsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOlosMTAzOkssMTA0OlEsMTA3Ojk0LDEwOToxNzAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOlsxLDIwM10sMjY6JCw0NzpxLDgxOlcsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOlosMTAzOkssMTA0OlEsMTA3Ojk0LDEwOToxNzAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezc0OlsxLDIwNF19LHQoY3QsWzIsOThdLHsyMjpbMSwyMDVdfSksezc0OlsxLDIwNl0sOTE6WzEsMjA3XX0sezc0OlsxLDIwOF19LHQoRHQsWzIsMTQ4XSksezc0OlsxLDIwOV0sOTE6WzEsMjEwXX0sdChhdCxbMiw1NF0sezEwODoxMjEsNDc6Ziw4MTp2LDk1OmIsOTY6eCw5OTpfLDEwMDprLDEwMTp3LDEwMzpULDEwNDpFLDExNDpPLDExNTpOLDExNjpCLDExNzpELDExODpMLDExOTpJfSksezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQxOlsxLDIxMV0sNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToyMTIsNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDUxOlsxLDIxM10sNjI6bXQsNzA6dnQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw1MzpbMSwyMTRdLDYyOm10LDcwOnZ0LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OnEsNTU6WzEsMjE1XSw2MjptdCw3MDp2dCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDU3OlsxLDIxNl0sNjI6bXQsNzA6dnQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw1OTpbMSwyMTddLDYyOm10LDcwOnZ0LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OnEsNjE6WzEsMjE4XSw2MjptdCw3MDp2dCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToyMTksNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MTpbMSwyMjBdLDQyOmd0LDQ3OnEsNjI6bXQsNzA6dnQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw2MjptdCw2NDpbMSwyMjFdLDY2OlsxLDIyMl0sNzA6dnQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw2MjptdCw2NDpbMSwyMjRdLDY2OlsxLDIyM10sNzA6dnQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7OToyMjUsMjA6aiwyMTpZLDIzOnp9LHQoVSxbMiw0OV0sezQ3OkJ0fSksdChodCxbMiw3Ml0pLHQoaHQsWzIsNzFdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MjpbMSwyMjZdLDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChodCxbMiw3NF0pLHQoTHQsWzIsNzhdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MjI3LDQyOmd0LDQ3OnEsNjI6bXQsNzA6dnQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KE50LG8sezE3OjIyOH0pLHQoUCxbMiw0M10pLHs0NjoyMjksNDc6Ziw0OTo0Myw4MTp2LDk1OmIsOTY6eCw5OTpfLDEwMDprLDEwMTp3LDEwMzpULDEwNDpFLDEwODo0NCwxMTQ6TywxMTU6TiwxMTY6QiwxMTc6RCwxMTg6TCwxMTk6SX0sezIyOkZ0LDc2OlB0LDg2OjIzMCw5MjpqdCw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6SHQsMTA1OlZ0fSx7MjI6RnQsNzY6UHQsODY6MjQ0LDkyOmp0LDk1Oll0LDk3OjIzMSw5ODoyMzIsOTk6enQsMTAwOlV0LDEwMTokdCwxMDI6cXQsMTAzOld0LDEwNDpIdCwxMDU6VnR9LHsyMjpGdCw3NjpQdCw4NjoyNDUsOTI6anQsOTQ6WzEsMjQ2XSw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6SHQsMTA1OlZ0fSx7MjI6RnQsNzY6UHQsODY6MjQ3LDkyOmp0LDk0OlsxLDI0OF0sOTU6WXQsOTc6MjMxLDk4OjIzMiw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0Okh0LDEwNTpWdH0sezk1OlsxLDI0OV19LHsyMjpGdCw3NjpQdCw4NjoyNTAsOTI6anQsOTU6WXQsOTc6MjMxLDk4OjIzMiw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0Okh0LDEwNTpWdH0sezIyOkZ0LDc2OlB0LDg2OjI1MSw5MjpqdCw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6SHQsMTA1OlZ0fSx7MjY6JCw0NzpxLDgxOlcsODc6MjUyLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChjdCxbMiw5N10pLHs3NDpbMSwyNTNdfSx0KGN0LFsyLDEwMV0sezIyOlsxLDI1NF19KSx0KGN0LFsyLDEwMl0pLHQoY3QsWzIsMTA1XSksdChjdCxbMiwxMDddLHsyMjpbMSwyNTVdfSksdChjdCxbMiwxMDhdKSx0KG90LFsyLDU1XSksezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OnEsNTE6WzEsMjU2XSw2MjptdCw3MDp2dCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHQob3QsWzIsNjFdKSx0KG90LFsyLDU3XSksdChvdCxbMiw1OF0pLHQob3QsWzIsNTldKSx0KG90LFsyLDYwXSksdChvdCxbMiw2Ml0pLHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDYxOlsxLDI1N10sNjI6bXQsNzA6dnQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KG90LFsyLDY0XSksdChvdCxbMiw2NV0pLHQob3QsWzIsNjddKSx0KG90LFsyLDY2XSksdChvdCxbMiw2OF0pLHQoSXQsWzIsNF0pLHQoWzIyLDQ3LDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sWzIsNzZdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDE6WzEsMjU4XSw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwyNTldLDQzOjMxLDQ1OjMyLDQ2OjQyLDQ3OmYsNDk6NDMsNzY6ZCw3NzpwLDc4OnksNzk6Zyw4MDptLDgxOnYsOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOlQsMTA0OkUsMTA4OjQ0LDExMDpDLDExMTpTLDExMjpBLDExMzpNLDExNDpPLDExNTpOLDExNjpCLDExNzpELDExODpMLDExOTpJfSx0KGF0LFsyLDUzXSksdChjdCxbMiwxMTBdLHs5NjpHdH0pLHQoWHQsWzIsMTIwXSx7OTg6MjYxLDIyOkZ0LDc2OlB0LDkyOmp0LDk1Oll0LDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6SHQsMTA1OlZ0fSksdChadCxbMiwxMjJdKSx0KFp0LFsyLDEyNF0pLHQoWnQsWzIsMTI1XSksdChadCxbMiwxMjZdKSx0KFp0LFsyLDEyN10pLHQoWnQsWzIsMTI4XSksdChadCxbMiwxMjldKSx0KFp0LFsyLDEzMF0pLHQoWnQsWzIsMTMxXSksdChadCxbMiwxMzJdKSx0KFp0LFsyLDEzM10pLHQoWnQsWzIsMTM0XSksdChjdCxbMiwxMTFdLHs5NjpHdH0pLHQoY3QsWzIsMTEyXSx7OTY6R3R9KSx7MjI6WzEsMjYyXX0sdChjdCxbMiwxMTNdLHs5NjpHdH0pLHsyMjpbMSwyNjNdfSx0KFJ0LFsyLDExOV0pLHQoY3QsWzIsOTNdLHs5NjpHdH0pLHQoY3QsWzIsOTRdLHs5NjpHdH0pLHQoY3QsWzIsOTVdLHsxMDc6OTQsMTA5OjE3MCwyNjokLDQ3OnEsODE6Vyw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6WiwxMDM6SywxMDQ6USwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSksdChjdCxbMiw5OV0pLHs5MTpbMSwyNjRdfSx7OTE6WzEsMjY1XX0sezUxOlsxLDI2Nl19LHs2MTpbMSwyNjddfSx7OToyNjgsMjA6aiwyMTpZLDIzOnp9LHQoUCxbMiw0Ml0pLHsyMjpGdCw3NjpQdCw5MjpqdCw5NTpZdCw5NzoyNjksOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6SHQsMTA1OlZ0fSx0KFp0LFsyLDEyM10pLHsyNjokLDQ3OnEsODE6Vyw4NzoyNzAsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOlosMTAzOkssMTA0OlEsMTA3Ojk0LDEwOTo5MiwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjY6JCw0NzpxLDgxOlcsODc6MjcxLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChjdCxbMiwxMDNdKSx0KGN0LFsyLDEwOV0pLHQob3QsWzIsNTZdKSx0KG90LFsyLDYzXSksdChOdCxvLHsxNzoyNzJ9KSx0KFh0LFsyLDEyMV0sezk4OjI2MSwyMjpGdCw3NjpQdCw5MjpqdCw5NTpZdCw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0Okh0LDEwNTpWdH0pLHQoY3QsWzIsMTE2XSx7MTA3Ojk0LDEwOToxNzAsMjI6WzEsMjczXSwyNjokLDQ3OnEsODE6Vyw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6WiwxMDM6SywxMDQ6USwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSksdChjdCxbMiwxMTddLHsxMDc6OTQsMTA5OjE3MCwyMjpbMSwyNzRdLDI2OiQsNDc6cSw4MTpXLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9KSx7MTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOnUsMjM6bCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQyOlsxLDI3NV0sNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw3NjpkLDc3OnAsNzg6eSw3OTpnLDgwOm0sODE6diw5NTpiLDk2OngsOTk6XywxMDA6aywxMDE6dywxMDM6VCwxMDQ6RSwxMDg6NDQsMTEwOkMsMTExOlMsMTEyOkEsMTEzOk0sMTE0Ok8sMTE1Ok4sMTE2OkIsMTE3OkQsMTE4OkwsMTE5Okl9LHsyMjpGdCw3NjpQdCw4NjoyNzYsOTI6anQsOTU6WXQsOTc6MjMxLDk4OjIzMiw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0Okh0LDEwNTpWdH0sezIyOkZ0LDc2OlB0LDg2OjI3Nyw5MjpqdCw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6SHQsMTA1OlZ0fSx0KFAsWzIsNDFdKSx0KGN0LFsyLDExNF0sezk2Okd0fSksdChjdCxbMiwxMTVdLHs5NjpHdH0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw5OlsyLDVdLDEwOlsyLDJdLDEyNDpbMiw3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LFQsRSxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihFIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LFF0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMTI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDEzO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxMDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMTU7Y2FzZSA0OnJldHVybiAxNDtjYXNlIDU6Y2FzZSA2OmJyZWFrO2Nhc2UgNzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgOTpyZXR1cm4iU1RSIjtjYXNlIDEwOnJldHVybiA3NjtjYXNlIDExOnJldHVybiA4NTtjYXNlIDEyOnJldHVybiA3NztjYXNlIDEzOnJldHVybiA5NDtjYXNlIDE0OnJldHVybiA3ODtjYXNlIDE1OnJldHVybiA3OTtjYXNlIDE2OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE4OnJldHVybiA5MDtjYXNlIDE5OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjE6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIDg4O2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIDg5O2Nhc2UgMjU6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI3OnJldHVybiA4MDtjYXNlIDI4OmNhc2UgMjk6cmV0dXJuIHQubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMjQ7Y2FzZSAzMDpyZXR1cm4gMzg7Y2FzZSAzMTpyZXR1cm4gNDI7Y2FzZSAzMjpjYXNlIDMzOmNhc2UgMzQ6Y2FzZSAzNTpyZXR1cm4gOTE7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI1O2Nhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNjtjYXNlIDQ3OnJldHVybiAxMTA7Y2FzZSA0ODpyZXR1cm4gMTExO2Nhc2UgNDk6cmV0dXJuIDExMjtjYXNlIDUwOnJldHVybiAxMTM7Y2FzZSA1MTpyZXR1cm4gOTU7Y2FzZSA1MjpyZXR1cm4gMTAzO2Nhc2UgNTM6cmV0dXJuIDQ4O2Nhc2UgNTQ6cmV0dXJuIDEwMDtjYXNlIDU1OnJldHVybiA0NztjYXNlIDU2OnJldHVybiAyMDtjYXNlIDU3OnJldHVybiA5NjtjYXNlIDU4OnJldHVybiAxMTg7Y2FzZSA1OTpjYXNlIDYwOmNhc2UgNjE6cmV0dXJuIDcxO2Nhc2UgNjI6Y2FzZSA2MzpjYXNlIDY0OnJldHVybiA3MDtjYXNlIDY1OnJldHVybiA1MjtjYXNlIDY2OnJldHVybiA1MztjYXNlIDY3OnJldHVybiA1NDtjYXNlIDY4OnJldHVybiA1NTtjYXNlIDY5OnJldHVybiA1NjtjYXNlIDcwOnJldHVybiA1NztjYXNlIDcxOnJldHVybiA1ODtjYXNlIDcyOnJldHVybiA1OTtjYXNlIDczOnJldHVybiAxMDE7Y2FzZSA3NDpyZXR1cm4gMTA0O2Nhc2UgNzU6cmV0dXJuIDExOTtjYXNlIDc2OnJldHVybiAxMTY7Y2FzZSA3NzpyZXR1cm4gMTA1O2Nhc2UgNzg6Y2FzZSA3OTpyZXR1cm4gMTE3O2Nhc2UgODA6cmV0dXJuIDEwNjtjYXNlIDgxOnJldHVybiA2MjtjYXNlIDgyOnJldHVybiA4MjtjYXNlIDgzOnJldHVybiJTRVAiO2Nhc2UgODQ6cmV0dXJuIDgxO2Nhc2UgODU6cmV0dXJuIDk5O2Nhc2UgODY6cmV0dXJuIDY0O2Nhc2UgODc6cmV0dXJuIDYzO2Nhc2UgODg6cmV0dXJuIDY2O2Nhc2UgODk6cmV0dXJuIDY1O2Nhc2UgOTA6cmV0dXJuIDExNDtjYXNlIDkxOnJldHVybiAxMTU7Y2FzZSA5MjpyZXR1cm4gNzI7Y2FzZSA5MzpyZXR1cm4gNTA7Y2FzZSA5NDpyZXR1cm4gNTE7Y2FzZSA5NTpyZXR1cm4gNDA7Y2FzZSA5NjpyZXR1cm4gNDE7Y2FzZSA5NzpyZXR1cm4gNjA7Y2FzZSA5ODpyZXR1cm4gNjE7Y2FzZSA5OTpyZXR1cm4gMTI1O2Nhc2UgMTAwOnJldHVybiAyMTtjYXNlIDEwMTpyZXR1cm4gMjI7Y2FzZSAxMDI6cmV0dXJuIDIzfX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OiUlKD8hXHspW15cbl0qKS8sL14oPzpbXlx9XSUlW15cbl0qKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnN0eWxlXGIpLywvXig/OmRlZmF1bHRcYikvLC9eKD86bGlua1N0eWxlXGIpLywvXig/OmludGVycG9sYXRlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/OmNsYXNzXGIpLywvXig/OmhyZWZbXHNdK1siXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpjbGlja1tcc10rKS8sL14oPzpbXHNcbl0pLywvXig/OlteXHNcbl0qKS8sL14oPzpncmFwaFxiKS8sL14oPzpmbG93Y2hhcnRcYikvLC9eKD86c3ViZ3JhcGhcYikvLC9eKD86ZW5kXGJccyopLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86KFxyP1xuKSpccypcbikvLC9eKD86XHMqTFJcYikvLC9eKD86XHMqUkxcYikvLC9eKD86XHMqVEJcYikvLC9eKD86XHMqQlRcYikvLC9eKD86XHMqVERcYikvLC9eKD86XHMqQlJcYikvLC9eKD86XHMqPCkvLC9eKD86XHMqPikvLC9eKD86XHMqXF4pLywvXig/OlxzKnZcYikvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86WzAtOV0rKS8sL14oPzojKS8sL14oPzo6OjopLywvXig/OjopLywvXig/OiYpLywvXig/OjspLywvXig/OiwpLywvXig/OlwqKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86XHMqW3hvPF0/PT1ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86XCgtKS8sL14oPzotXCkpLywvXig/OlwoXFspLywvXig/OlxdXCkpLywvXig/OlxbXFspLywvXig/OlxdXF0pLywvXig/OlxbXCgpLywvXig/OlwpXF0pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpbXF9dKS8sL14oPzpcKykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86PCkvLC9eKD86PikvLC9eKD86XF4pLywvXig/OlxcXHwpLywvXig/OnZcYikvLC9eKD86W0EtWmEtel0rKS8sL14oPzpcXFxdKS8sL14oPzpcW1wvKS8sL14oPzpcL1xdKS8sL14oPzpcW1xcKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXF8vXSkvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpcfCkvLC9eKD86XCgpLywvXig/OlwpKS8sL14oPzpcWykvLC9eKD86XF0pLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86IikvLC9eKD86KFxyP1xuKSspLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsyMywyNF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsyMCwyMSwyMl0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTcsMThdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyNiwyN10saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbOCw5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE5LDI1LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gSnQoKXt0aGlzLnl5PXt9fXJldHVybiBLdC5sZXhlcj1RdCxKdC5wcm90b3R5cGU9S3QsS3QuUGFyc2VyPUp0LG5ldyBKdH0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTIpLG4oNykodCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsNV0scj1bNiw5LDExLDE3LDE4LDE5LDIxXSxpPVsxLDE1XSxhPVsxLDE2XSxvPVsxLDE3XSxzPVsxLDIxXSxjPVs0LDYsOSwxMSwxNywxOCwxOSwyMV0sdT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsam91cm5leTo0LGRvY3VtZW50OjUsRU9GOjYsZGlyZWN0aXZlOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5FV0xJTkU6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LCI6IjoxNSxhcmdEaXJlY3RpdmU6MTYsdGl0bGU6MTcsc2VjdGlvbjoxOCx0YXNrTmFtZToxOSx0YXNrRGF0YToyMCxvcGVuX2RpcmVjdGl2ZToyMSx0eXBlX2RpcmVjdGl2ZToyMixhcmdfZGlyZWN0aXZlOjIzLGNsb3NlX2RpcmVjdGl2ZToyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiam91cm5leSIsNjoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5FV0xJTkUiLDE1OiI6IiwxNzoidGl0bGUiLDE4OiJzZWN0aW9uIiwxOToidGFza05hbWUiLDIwOiJ0YXNrRGF0YSIsMjE6Im9wZW5fZGlyZWN0aXZlIiwyMjoidHlwZV9kaXJlY3RpdmUiLDIzOiJhcmdfZGlyZWN0aXZlIiwyNDoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFs1LDBdLFs1LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFs3LDRdLFs3LDZdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTIsMV0sWzEzLDFdLFsxNiwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAxOnJldHVybiBhW3MtMV07Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6ci5zZXRUaXRsZShhW3NdLnN1YnN0cig2KSksdGhpcy4kPWFbc10uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMTI6ci5hZGRTZWN0aW9uKGFbc10uc3Vic3RyKDgpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxMzpyLmFkZFRhc2soYVtzLTFdLGFbc10pLHRoaXMuJD0idGFzayI7YnJlYWs7Y2FzZSAxNTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTY6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTc6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDE4OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImpvdXJuZXkiKX19LHRhYmxlOlt7MzoxLDQ6ZSw3OjMsMTI6NCwyMTpufSx7MTpbM119LHQocixbMiwzXSx7NTo2fSksezM6Nyw0OmUsNzozLDEyOjQsMjE6bn0sezEzOjgsMjI6WzEsOV19LHsyMjpbMiwxNV19LHs2OlsxLDEwXSw3OjE4LDg6MTEsOTpbMSwxMl0sMTA6MTMsMTE6WzEsMTRdLDEyOjQsMTc6aSwxODphLDE5Om8sMjE6bn0sezE6WzIsMl19LHsxNDoxOSwxNTpbMSwyMF0sMjQ6c30sdChbMTUsMjRdLFsyLDE2XSksdChyLFsyLDhdLHsxOlsyLDFdfSksdChyLFsyLDRdKSx7NzoxOCwxMDoyMiwxMjo0LDE3OmksMTg6YSwxOTpvLDIxOm59LHQocixbMiw2XSksdChyLFsyLDddKSx0KHIsWzIsMTFdKSx0KHIsWzIsMTJdKSx7MjA6WzEsMjNdfSx0KHIsWzIsMTRdKSx7MTE6WzEsMjRdfSx7MTY6MjUsMjM6WzEsMjZdfSx7MTE6WzIsMThdfSx0KHIsWzIsNV0pLHQocixbMiwxM10pLHQoYyxbMiw5XSksezE0OjI3LDI0OnN9LHsyNDpbMiwxN119LHsxMTpbMSwyOF19LHQoYyxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwxNV0sNzpbMiwyXSwyMTpbMiwxOF0sMjY6WzIsMTddfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sbD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDIxO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwyMjtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTU7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDI0O2Nhc2UgNDpyZXR1cm4gMjM7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIDExO2Nhc2UgODpjYXNlIDk6YnJlYWs7Y2FzZSAxMDpyZXR1cm4gNDtjYXNlIDExOnJldHVybiAxNztjYXNlIDEyOnJldHVybiAxODtjYXNlIDEzOnJldHVybiAxOTtjYXNlIDE0OnJldHVybiAyMDtjYXNlIDE1OnJldHVybiAxNTtjYXNlIDE2OnJldHVybiA2O2Nhc2UgMTc6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzpqb3VybmV5XGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxN10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGgoKXt0aGlzLnl5PXt9fXJldHVybiB1LmxleGVyPWwsaC5wcm90b3R5cGU9dSx1LlBhcnNlcj1oLG5ldyBofSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMiksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTEpLGk9big2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0Lmxhbmcucm91bmQoaS5kZWZhdWx0LnBhcnNlKHQpW2VdKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExMiksaT1uKDg0KSxhPW4oMjUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9yKHQpOmkodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI7aWYoIXIpdHJ5e3I9bigwKX1jYXRjaCh0KXt9cnx8KHI9d2luZG93LmQzKSx0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMSksaT1uKDYpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbil7dmFyIGE9aS5kZWZhdWx0LnBhcnNlKHQpLG89YVtlXSxzPXIuZGVmYXVsdC5jaGFubmVsLmNsYW1wW2VdKG8rbik7cmV0dXJuIG8hPT1zJiYoYVtlXT1zKSxpLmRlZmF1bHQuc3RyaW5naWZ5KGEpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjE1KSxpPW4oMjIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1pKHQsZSk7cmV0dXJuIHIobik/bjp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MCksaT1uKDIxNyksYT1uKDIxOCksbz1yP3IudG9TdHJpbmdUYWc6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA9PT10PyJbb2JqZWN0IFVuZGVmaW5lZF0iOiJbb2JqZWN0IE51bGxdIjpvJiZvIGluIE9iamVjdCh0KT9pKHQpOmEodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTIpLGk9bigyNDEpLGE9bigyNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpP3IodCwhMCk6aSh0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fX0sZnVuY3Rpb24odCl7dC5leHBvcnRzPUpTT04ucGFyc2UoJ3sibmFtZSI6Im1lcm1haWQiLCJ2ZXJzaW9uIjoiOC4xMi4xIiwiZGVzY3JpcHRpb24iOiJNYXJrZG93bmlzaCBzeW50YXggZm9yIGdlbmVyYXRpbmcgZmxvd2NoYXJ0cywgc2VxdWVuY2UgZGlhZ3JhbXMsIGNsYXNzIGRpYWdyYW1zLCBnYW50dCBjaGFydHMgYW5kIGdpdCBncmFwaHMuIiwibWFpbiI6ImRpc3QvbWVybWFpZC5jb3JlLmpzIiwia2V5d29yZHMiOlsiZGlhZ3JhbSIsIm1hcmtkb3duIiwiZmxvd2NoYXJ0Iiwic2VxdWVuY2UgZGlhZ3JhbSIsImdhbnR0IiwiY2xhc3MgZGlhZ3JhbSIsImdpdCBncmFwaCJdLCJzY3JpcHRzIjp7ImJ1aWxkOmRldmVsb3BtZW50Ijoid2VicGFjayAtLXByb2dyZXNzIC0tY29sb3IiLCJidWlsZDpwcm9kdWN0aW9uIjoieWFybiBidWlsZDpkZXZlbG9wbWVudCAtLW1vZGUgcHJvZHVjdGlvbiAtLWNvbmZpZyB3ZWJwYWNrLmNvbmZpZy5wcm9kLmJhYmVsLmpzIiwiYnVpbGQiOiJ5YXJuIGJ1aWxkOmRldmVsb3BtZW50ICYmIHlhcm4gYnVpbGQ6cHJvZHVjdGlvbiIsInBvc3RidWlsZCI6ImRvY3VtZW50YXRpb24gYnVpbGQgc3JjL21lcm1haWRBUEkuanMgc3JjL2NvbmZpZy5qcyBzcmMvZGVmYXVsdENvbmZpZy5qcyAtLXNoYWxsb3cgLWYgbWQgLS1tYXJrZG93bi10b2MgZmFsc2UgPiBkb2NzL1NldHVwLm1kIiwiYnVpbGQ6d2F0Y2giOiJ5YXJuIGJ1aWxkIC0td2F0Y2giLCJyZWxlYXNlIjoieWFybiBidWlsZCIsImxpbnQiOiJlc2xpbnQgc3JjIiwiZTJlOmRlcHIiOiJ5YXJuIGxpbnQgJiYgamVzdCBlMmUgLS1jb25maWcgZTJlL2plc3QuY29uZmlnLmpzIiwiY3lwcmVzcyI6InBlcmN5IGV4ZWMgLS0gY3lwcmVzcyBydW4iLCJlMmUiOiJzdGFydC1zZXJ2ZXItYW5kLXRlc3QgZGV2IGh0dHA6Ly9sb2NhbGhvc3Q6OTAwMC8gY3lwcmVzcyIsImUyZS11cGQiOiJ5YXJuIGxpbnQgJiYgamVzdCBlMmUgLXUgLS1jb25maWcgZTJlL2plc3QuY29uZmlnLmpzIiwiZGV2Ijoid2VicGFjayBzZXJ2ZSAtLWNvbmZpZyB3ZWJwYWNrLmNvbmZpZy5lMmUuanMiLCJ0ZXN0IjoieWFybiBsaW50ICYmIGplc3Qgc3JjLy4qIiwidGVzdDp3YXRjaCI6Implc3QgLS13YXRjaCBzcmMiLCJwcmVwdWJsaXNoT25seSI6Inlhcm4gYnVpbGQgJiYgeWFybiB0ZXN0IiwicHJlcGFyZSI6Inlhcm4gYnVpbGQifSwicmVwb3NpdG9yeSI6eyJ0eXBlIjoiZ2l0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2tuc3YvbWVybWFpZCJ9LCJhdXRob3IiOiJLbnV0IFN2ZWlkcXZpc3QiLCJsaWNlbnNlIjoiTUlUIiwic3RhbmRhcmQiOnsiaWdub3JlIjpbIioqL3BhcnNlci8qLmpzIiwiZGlzdC8qKi8qLmpzIiwiY3lwcmVzcy8qKi8qLmpzIl0sImdsb2JhbHMiOlsicGFnZSJdfSwiZGVwZW5kZW5jaWVzIjp7IkBicmFpbnRyZWUvc2FuaXRpemUtdXJsIjoiXjMuMS4wIiwiZDMiOiJeNS4xNi4wIiwiZGFncmUiOiJeMC44LjUiLCJkYWdyZS1kMyI6Il4wLjYuNCIsImRvbXB1cmlmeSI6IjIuMy4xIiwiZ3JhcGhsaWIiOiJeMi4xLjgiLCJraHJvbWEiOiJeMS40LjEiLCJtb21lbnQtbWluaSI6Il4yLjI0LjAiLCJzdHlsaXMiOiJeNC4wLjEwIn0sImRldkRlcGVuZGVuY2llcyI6eyJAYmFiZWwvY29yZSI6Il43LjE0LjYiLCJAYmFiZWwvZXNsaW50LXBhcnNlciI6Il43LjE0LjciLCJAYmFiZWwvcHJlc2V0LWVudiI6Il43LjE0LjciLCJAYmFiZWwvcmVnaXN0ZXIiOiJeNy4xNC41IiwiQHBlcmN5L2NsaSI6Il4xLjAuMC1iZXRhLjU4IiwiQHBlcmN5L2N5cHJlc3MiOiJeMy4xLjAiLCJAcGVyY3kvbWlncmF0ZSI6Il4wLjExLjAiLCJiYWJlbC1qZXN0IjoiXjI3LjAuNiIsImJhYmVsLWxvYWRlciI6Il44LjIuMiIsImNvdmVyYWxscyI6Il4zLjAuMiIsImNzcy10by1zdHJpbmctbG9hZGVyIjoiXjAuMS4zIiwiY3lwcmVzcyI6IjguMS4wIiwiZG9jdW1lbnRhdGlvbiI6IjEzLjIuMCIsImVzbGludCI6Il43LjMwLjAiLCJlc2xpbnQtY29uZmlnLXByZXR0aWVyIjoiXjguMy4wIiwiZXNsaW50LXBsdWdpbi1wcmV0dGllciI6Il4zLjQuMCIsImh1c2t5IjoiXjcuMC4xIiwiaWRlbnRpdHktb2JqLXByb3h5IjoiXjMuMC4wIiwiamVzdCI6Il4yNy4wLjYiLCJqaXNvbiI6Il4wLjQuMTgiLCJqcy1iYXNlNjQiOiIzLjYuMSIsIm1vbWVudCI6Il4yLjIzLjAiLCJwcmV0dGllciI6Il4yLjMuMiIsInN0YXJ0LXNlcnZlci1hbmQtdGVzdCI6Il4xLjEyLjYiLCJ0ZXJzZXItd2VicGFjay1wbHVnaW4iOiJeNC4yLjMiLCJ3ZWJwYWNrIjoiXjQuNDEuMiIsIndlYnBhY2stY2xpIjoiXjQuNy4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuNC4xIiwid2VicGFjay1ub2RlLWV4dGVybmFscyI6Il4zLjAuMCJ9LCJmaWxlcyI6WyJkaXN0Il0sInNpZGVFZmZlY3RzIjpbIioqLyouY3NzIiwiKiovKi5zY3NzIl0sImh1c2t5Ijp7Imhvb2tzIjp7InByZS1wdXNoIjoieWFybiB0ZXN0In19fScpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oMTQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighaSh0KSlyZXR1cm4hMTt2YXIgZT1yKHQpO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgUHJveHldIj09ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5KS5TeW1ib2w7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCl7dmFyIHI9bigxOSksaT1uKDIzNyksYT1lJiYhZS5ub2RlVHlwZSYmZSxvPWEmJiJvYmplY3QiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQscz1vJiZvLmV4cG9ydHM9PT1hP3IuQnVmZmVyOnZvaWQgMCxjPShzP3MuaXNCdWZmZXI6dm9pZCAwKXx8aTt0LmV4cG9ydHM9Y30pLmNhbGwodGhpcyxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ2KSxpPW4oNzkpLGE9bigyNDcpLG89bigxMjEpLHM9bigyNDgpLGM9bigzNCksdT1uKDExMCksbD11KHIpLGg9dShpKSxmPXUoYSksZD11KG8pLHA9dShzKSx5PWM7KHImJiJbb2JqZWN0IERhdGFWaWV3XSIhPXkobmV3IHIobmV3IEFycmF5QnVmZmVyKDEpKSl8fGkmJiJbb2JqZWN0IE1hcF0iIT15KG5ldyBpKXx8YSYmIltvYmplY3QgUHJvbWlzZV0iIT15KGEucmVzb2x2ZSgpKXx8byYmIltvYmplY3QgU2V0XSIhPXkobmV3IG8pfHxzJiYiW29iamVjdCBXZWFrTWFwXSIhPXkobmV3IHMpKSYmKHk9ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KSxuPSJbb2JqZWN0IE9iamVjdF0iPT1lP3QuY29uc3RydWN0b3I6dm9pZCAwLHI9bj91KG4pOiIiO2lmKHIpc3dpdGNoKHIpe2Nhc2UgbDpyZXR1cm4iW29iamVjdCBEYXRhVmlld10iO2Nhc2UgaDpyZXR1cm4iW29iamVjdCBNYXBdIjtjYXNlIGY6cmV0dXJuIltvYmplY3QgUHJvbWlzZV0iO2Nhc2UgZDpyZXR1cm4iW29iamVjdCBTZXRdIjtjYXNlIHA6cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifXJldHVybiBlfSksdC5leHBvcnRzPXl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR8fGkodCkmJiJbb2JqZWN0IFN5bWJvbF0iPT1yKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPXtkZWZhdWx0czpuKDE1NCksZWFjaDpuKDg5KSxpc0Z1bmN0aW9uOm4oMzkpLGlzUGxhaW5PYmplY3Q6bigxNTgpLHBpY2s6bigxNjEpLGhhczpuKDk0KSxyYW5nZTpuKDE2MiksdW5pcXVlSWQ6bigxNjMpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDNdLG49WzEsNV0scj1bMSwxN10saT1bMiwxMF0sYT1bMSwyMV0sbz1bMSwyMl0scz1bMSwyM10sYz1bMSwyNF0sdT1bMSwyNV0sbD1bMSwyNl0saD1bMSwxOV0sZj1bMSwyN10sZD1bMSwyOF0scD1bMSwzMV0seT1bNjYsNjddLGc9WzUsOCwxNCwzNSwzNiwzNywzOCwzOSw0MCw0OCw1NSw1Nyw2Niw2N10sbT1bNSw2LDgsMTQsMzUsMzYsMzcsMzgsMzksNDAsNDgsNjYsNjddLHY9WzEsNTFdLGI9WzEsNTJdLHg9WzEsNTNdLF89WzEsNTRdLGs9WzEsNTVdLHc9WzEsNTZdLFQ9WzEsNTddLEU9WzU3LDU4XSxDPVsxLDY5XSxTPVsxLDY1XSxBPVsxLDY2XSxNPVsxLDY3XSxPPVsxLDY4XSxOPVsxLDcwXSxCPVsxLDc0XSxEPVsxLDc1XSxMPVsxLDcyXSxJPVsxLDczXSxSPVs1LDgsMTQsMzUsMzYsMzcsMzgsMzksNDAsNDgsNjYsNjddLEY9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LE5FV0xJTkU6NSxSRDo2LGRpYWdyYW06NyxFT0Y6OCxvcGVuRGlyZWN0aXZlOjksdHlwZURpcmVjdGl2ZToxMCxjbG9zZURpcmVjdGl2ZToxMSwiOiI6MTIsYXJnRGlyZWN0aXZlOjEzLG9wZW5fZGlyZWN0aXZlOjE0LHR5cGVfZGlyZWN0aXZlOjE1LGFyZ19kaXJlY3RpdmU6MTYsY2xvc2VfZGlyZWN0aXZlOjE3LHJlcXVpcmVtZW50RGVmOjE4LGVsZW1lbnREZWY6MTkscmVsYXRpb25zaGlwRGVmOjIwLHJlcXVpcmVtZW50VHlwZToyMSxyZXF1aXJlbWVudE5hbWU6MjIsU1RSVUNUX1NUQVJUOjIzLHJlcXVpcmVtZW50Qm9keToyNCxJRDoyNSxDT0xPTlNFUDoyNixpZDoyNyxURVhUOjI4LHRleHQ6MjksUklTSzozMCxyaXNrTGV2ZWw6MzEsVkVSSUZZTVRIRDozMix2ZXJpZnlUeXBlOjMzLFNUUlVDVF9TVE9QOjM0LFJFUVVJUkVNRU5UOjM1LEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6MzYsSU5URVJGQUNFX1JFUVVJUkVNRU5UOjM3LFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOjM4LFBIWVNJQ0FMX1JFUVVJUkVNRU5UOjM5LERFU0lHTl9DT05TVFJBSU5UOjQwLExPV19SSVNLOjQxLE1FRF9SSVNLOjQyLEhJR0hfUklTSzo0MyxWRVJJRllfQU5BTFlTSVM6NDQsVkVSSUZZX0RFTU9OU1RSQVRJT046NDUsVkVSSUZZX0lOU1BFQ1RJT046NDYsVkVSSUZZX1RFU1Q6NDcsRUxFTUVOVDo0OCxlbGVtZW50TmFtZTo0OSxlbGVtZW50Qm9keTo1MCxUWVBFOjUxLHR5cGU6NTIsRE9DUkVGOjUzLHJlZjo1NCxFTkRfQVJST1dfTDo1NSxyZWxhdGlvbnNoaXA6NTYsTElORTo1NyxFTkRfQVJST1dfUjo1OCxDT05UQUlOUzo1OSxDT1BJRVM6NjAsREVSSVZFUzo2MSxTQVRJU0ZJRVM6NjIsVkVSSUZJRVM6NjMsUkVGSU5FUzo2NCxUUkFDRVM6NjUsdW5xU3RyaW5nOjY2LHFTdHJpbmc6NjcsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6Ik5FV0xJTkUiLDY6IlJEIiw4OiJFT0YiLDEyOiI6IiwxNDoib3Blbl9kaXJlY3RpdmUiLDE1OiJ0eXBlX2RpcmVjdGl2ZSIsMTY6ImFyZ19kaXJlY3RpdmUiLDE3OiJjbG9zZV9kaXJlY3RpdmUiLDIzOiJTVFJVQ1RfU1RBUlQiLDI1OiJJRCIsMjY6IkNPTE9OU0VQIiwyODoiVEVYVCIsMzA6IlJJU0siLDMyOiJWRVJJRllNVEhEIiwzNDoiU1RSVUNUX1NUT1AiLDM1OiJSRVFVSVJFTUVOVCIsMzY6IkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQiLDM3OiJJTlRFUkZBQ0VfUkVRVUlSRU1FTlQiLDM4OiJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVCIsMzk6IlBIWVNJQ0FMX1JFUVVJUkVNRU5UIiw0MDoiREVTSUdOX0NPTlNUUkFJTlQiLDQxOiJMT1dfUklTSyIsNDI6Ik1FRF9SSVNLIiw0MzoiSElHSF9SSVNLIiw0NDoiVkVSSUZZX0FOQUxZU0lTIiw0NToiVkVSSUZZX0RFTU9OU1RSQVRJT04iLDQ2OiJWRVJJRllfSU5TUEVDVElPTiIsNDc6IlZFUklGWV9URVNUIiw0ODoiRUxFTUVOVCIsNTE6IlRZUEUiLDUzOiJET0NSRUYiLDU1OiJFTkRfQVJST1dfTCIsNTc6IkxJTkUiLDU4OiJFTkRfQVJST1dfUiIsNTk6IkNPTlRBSU5TIiw2MDoiQ09QSUVTIiw2MToiREVSSVZFUyIsNjI6IlNBVElTRklFUyIsNjM6IlZFUklGSUVTIiw2NDoiUkVGSU5FUyIsNjU6IlRSQUNFUyIsNjY6InVucVN0cmluZyIsNjc6InFTdHJpbmcifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzMsNF0sWzQsM10sWzQsNV0sWzksMV0sWzEwLDFdLFsxMywxXSxbMTEsMV0sWzcsMF0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzE4LDVdLFsyNCw1XSxbMjQsNV0sWzI0LDVdLFsyNCw1XSxbMjQsMl0sWzI0LDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFszMSwxXSxbMzEsMV0sWzMxLDFdLFszMywxXSxbMzMsMV0sWzMzLDFdLFszMywxXSxbMTksNV0sWzUwLDVdLFs1MCw1XSxbNTAsMl0sWzUwLDFdLFsyMCw1XSxbMjAsNV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFsyMiwxXSxbMjIsMV0sWzI3LDFdLFsyNywxXSxbMjksMV0sWzI5LDFdLFs0OSwxXSxbNDksMV0sWzUyLDFdLFs1MiwxXSxbNTQsMV0sWzU0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNjpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNzpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA4OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA5OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInBpZSIpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTY6ci5hZGRSZXF1aXJlbWVudChhW3MtM10sYVtzLTRdKTticmVhaztjYXNlIDE3OnIuc2V0TmV3UmVxSWQoYVtzLTJdKTticmVhaztjYXNlIDE4OnIuc2V0TmV3UmVxVGV4dChhW3MtMl0pO2JyZWFrO2Nhc2UgMTk6ci5zZXROZXdSZXFSaXNrKGFbcy0yXSk7YnJlYWs7Y2FzZSAyMDpyLnNldE5ld1JlcVZlcmlmeU1ldGhvZChhW3MtMl0pO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLlJFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuSU5URVJGQUNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLlBIWVNJQ0FMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLkRFU0lHTl9DT05TVFJBSU5UO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPXIuUmlza0xldmVsLkxPV19SSVNLO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPXIuUmlza0xldmVsLk1FRF9SSVNLO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPXIuUmlza0xldmVsLkhJR0hfUklTSzticmVhaztjYXNlIDMyOnRoaXMuJD1yLlZlcmlmeVR5cGUuVkVSSUZZX0FOQUxZU0lTO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXIuVmVyaWZ5VHlwZS5WRVJJRllfREVNT05TVFJBVElPTjticmVhaztjYXNlIDM0OnRoaXMuJD1yLlZlcmlmeVR5cGUuVkVSSUZZX0lOU1BFQ1RJT047YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9ci5WZXJpZnlUeXBlLlZFUklGWV9URVNUO2JyZWFrO2Nhc2UgMzY6ci5hZGRFbGVtZW50KGFbcy0zXSk7YnJlYWs7Y2FzZSAzNzpyLnNldE5ld0VsZW1lbnRUeXBlKGFbcy0yXSk7YnJlYWs7Y2FzZSAzODpyLnNldE5ld0VsZW1lbnREb2NSZWYoYVtzLTJdKTticmVhaztjYXNlIDQxOnIuYWRkUmVsYXRpb25zaGlwKGFbcy0yXSxhW3NdLGFbcy00XSk7YnJlYWs7Y2FzZSA0MjpyLmFkZFJlbGF0aW9uc2hpcChhW3MtMl0sYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5DT05UQUlOUzticmVhaztjYXNlIDQ0OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuQ09QSUVTO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5ERVJJVkVTO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5TQVRJU0ZJRVM7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLlZFUklGSUVTO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5SRUZJTkVTO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5UUkFDRVN9fSx0YWJsZTpbezM6MSw0OjIsNjplLDk6NCwxNDpufSx7MTpbM119LHszOjcsNDoyLDU6WzEsNl0sNjplLDk6NCwxNDpufSx7NTpbMSw4XX0sezEwOjksMTU6WzEsMTBdfSx7MTU6WzIsNl19LHszOjExLDQ6Miw2OmUsOTo0LDE0Om59LHsxOlsyLDJdfSx7NDoxNiw1OnIsNzoxMiw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHsxMToyOSwxMjpbMSwzMF0sMTc6cH0sdChbMTIsMTddLFsyLDddKSx7MTpbMiwxXX0sezg6WzEsMzJdfSx7NDoxNiw1OnIsNzozMyw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHs0OjE2LDU6ciw3OjM0LDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezQ6MTYsNTpyLDc6MzUsODppLDk6NCwxNDpuLDE4OjEzLDE5OjE0LDIwOjE1LDIxOjE4LDI3OjIwLDM1OmEsMzY6bywzNzpzLDM4OmMsMzk6dSw0MDpsLDQ4OmgsNjY6Ziw2NzpkfSx7NDoxNiw1OnIsNzozNiw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHs0OjE2LDU6ciw3OjM3LDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezIyOjM4LDY2OlsxLDM5XSw2NzpbMSw0MF19LHs0OTo0MSw2NjpbMSw0Ml0sNjc6WzEsNDNdfSx7NTU6WzEsNDRdLDU3OlsxLDQ1XX0sdCh5LFsyLDIzXSksdCh5LFsyLDI0XSksdCh5LFsyLDI1XSksdCh5LFsyLDI2XSksdCh5LFsyLDI3XSksdCh5LFsyLDI4XSksdChnLFsyLDUyXSksdChnLFsyLDUzXSksdChtLFsyLDRdKSx7MTM6NDYsMTY6WzEsNDddfSx0KG0sWzIsOV0pLHsxOlsyLDNdfSx7ODpbMiwxMV19LHs4OlsyLDEyXX0sezg6WzIsMTNdfSx7ODpbMiwxNF19LHs4OlsyLDE1XX0sezIzOlsxLDQ4XX0sezIzOlsyLDUwXX0sezIzOlsyLDUxXX0sezIzOlsxLDQ5XX0sezIzOlsyLDU2XX0sezIzOlsyLDU3XX0sezU2OjUwLDU5OnYsNjA6Yiw2MTp4LDYyOl8sNjM6ayw2NDp3LDY1OlR9LHs1Njo1OCw1OTp2LDYwOmIsNjE6eCw2MjpfLDYzOmssNjQ6dyw2NTpUfSx7MTE6NTksMTc6cH0sezE3OlsyLDhdfSx7NTpbMSw2MF19LHs1OlsxLDYxXX0sezU3OlsxLDYyXX0sdChFLFsyLDQzXSksdChFLFsyLDQ0XSksdChFLFsyLDQ1XSksdChFLFsyLDQ2XSksdChFLFsyLDQ3XSksdChFLFsyLDQ4XSksdChFLFsyLDQ5XSksezU4OlsxLDYzXX0sdChtLFsyLDVdKSx7NTpDLDI0OjY0LDI1OlMsMjg6QSwzMDpNLDMyOk8sMzQ6Tn0sezU6QiwzNDpELDUwOjcxLDUxOkwsNTM6SX0sezI3Ojc2LDY2OmYsNjc6ZH0sezI3Ojc3LDY2OmYsNjc6ZH0sdChSLFsyLDE2XSksezI2OlsxLDc4XX0sezI2OlsxLDc5XX0sezI2OlsxLDgwXX0sezI2OlsxLDgxXX0sezU6QywyNDo4MiwyNTpTLDI4OkEsMzA6TSwzMjpPLDM0Ok59LHQoUixbMiwyMl0pLHQoUixbMiwzNl0pLHsyNjpbMSw4M119LHsyNjpbMSw4NF19LHs1OkIsMzQ6RCw1MDo4NSw1MTpMLDUzOkl9LHQoUixbMiw0MF0pLHQoUixbMiw0MV0pLHQoUixbMiw0Ml0pLHsyNzo4Niw2NjpmLDY3OmR9LHsyOTo4Nyw2NjpbMSw4OF0sNjc6WzEsODldfSx7MzE6OTAsNDE6WzEsOTFdLDQyOlsxLDkyXSw0MzpbMSw5M119LHszMzo5NCw0NDpbMSw5NV0sNDU6WzEsOTZdLDQ2OlsxLDk3XSw0NzpbMSw5OF19LHQoUixbMiwyMV0pLHs1Mjo5OSw2NjpbMSwxMDBdLDY3OlsxLDEwMV19LHs1NDoxMDIsNjY6WzEsMTAzXSw2NzpbMSwxMDRdfSx0KFIsWzIsMzldKSx7NTpbMSwxMDVdfSx7NTpbMSwxMDZdfSx7NTpbMiw1NF19LHs1OlsyLDU1XX0sezU6WzEsMTA3XX0sezU6WzIsMjldfSx7NTpbMiwzMF19LHs1OlsyLDMxXX0sezU6WzEsMTA4XX0sezU6WzIsMzJdfSx7NTpbMiwzM119LHs1OlsyLDM0XX0sezU6WzIsMzVdfSx7NTpbMSwxMDldfSx7NTpbMiw1OF19LHs1OlsyLDU5XX0sezU6WzEsMTEwXX0sezU6WzIsNjBdfSx7NTpbMiw2MV19LHs1OkMsMjQ6MTExLDI1OlMsMjg6QSwzMDpNLDMyOk8sMzQ6Tn0sezU6QywyNDoxMTIsMjU6UywyODpBLDMwOk0sMzI6TywzNDpOfSx7NTpDLDI0OjExMywyNTpTLDI4OkEsMzA6TSwzMjpPLDM0Ok59LHs1OkMsMjQ6MTE0LDI1OlMsMjg6QSwzMDpNLDMyOk8sMzQ6Tn0sezU6QiwzNDpELDUwOjExNSw1MTpMLDUzOkl9LHs1OkIsMzQ6RCw1MDoxMTYsNTE6TCw1MzpJfSx0KFIsWzIsMTddKSx0KFIsWzIsMThdKSx0KFIsWzIsMTldKSx0KFIsWzIsMjBdKSx0KFIsWzIsMzddKSx0KFIsWzIsMzhdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsNl0sNzpbMiwyXSwxMTpbMiwxXSwzMjpbMiwzXSwzMzpbMiwxMV0sMzQ6WzIsMTJdLDM1OlsyLDEzXSwzNjpbMiwxNF0sMzc6WzIsMTVdLDM5OlsyLDUwXSw0MDpbMiw1MV0sNDI6WzIsNTZdLDQzOlsyLDU3XSw0NzpbMiw4XSw4ODpbMiw1NF0sODk6WzIsNTVdLDkxOlsyLDI5XSw5MjpbMiwzMF0sOTM6WzIsMzFdLDk1OlsyLDMyXSw5NjpbMiwzM10sOTc6WzIsMzRdLDk4OlsyLDM1XSwxMDA6WzIsNThdLDEwMTpbMiw1OV0sMTAzOlsyLDYwXSwxMDQ6WzIsNjFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sUD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDE0O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxNTtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTI7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDE3O2Nhc2UgNDpyZXR1cm4gMTY7Y2FzZSA1OnJldHVybiA1O2Nhc2UgNjpjYXNlIDc6Y2FzZSA4OmJyZWFrO2Nhc2UgOTpyZXR1cm4gODtjYXNlIDEwOnJldHVybiA2O2Nhc2UgMTE6cmV0dXJuIDIzO2Nhc2UgMTI6cmV0dXJuIDM0O2Nhc2UgMTM6cmV0dXJuIDI2O2Nhc2UgMTQ6cmV0dXJuIDI1O2Nhc2UgMTU6cmV0dXJuIDI4O2Nhc2UgMTY6cmV0dXJuIDMwO2Nhc2UgMTc6cmV0dXJuIDMyO2Nhc2UgMTg6cmV0dXJuIDM1O2Nhc2UgMTk6cmV0dXJuIDM2O2Nhc2UgMjA6cmV0dXJuIDM3O2Nhc2UgMjE6cmV0dXJuIDM4O2Nhc2UgMjI6cmV0dXJuIDM5O2Nhc2UgMjM6cmV0dXJuIDQwO2Nhc2UgMjQ6cmV0dXJuIDQxO2Nhc2UgMjU6cmV0dXJuIDQyO2Nhc2UgMjY6cmV0dXJuIDQzO2Nhc2UgMjc6cmV0dXJuIDQ0O2Nhc2UgMjg6cmV0dXJuIDQ1O2Nhc2UgMjk6cmV0dXJuIDQ2O2Nhc2UgMzA6cmV0dXJuIDQ3O2Nhc2UgMzE6cmV0dXJuIDQ4O2Nhc2UgMzI6cmV0dXJuIDU5O2Nhc2UgMzM6cmV0dXJuIDYwO2Nhc2UgMzQ6cmV0dXJuIDYxO2Nhc2UgMzU6cmV0dXJuIDYyO2Nhc2UgMzY6cmV0dXJuIDYzO2Nhc2UgMzc6cmV0dXJuIDY0O2Nhc2UgMzg6cmV0dXJuIDY1O2Nhc2UgMzk6cmV0dXJuIDUxO2Nhc2UgNDA6cmV0dXJuIDUzO2Nhc2UgNDE6cmV0dXJuIDU1O2Nhc2UgNDI6cmV0dXJuIDU4O2Nhc2UgNDM6cmV0dXJuIDU3O2Nhc2UgNDQ6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA0NTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NjpyZXR1cm4icVN0cmluZyI7Y2FzZSA0NzpyZXR1cm4gZS55eXRleHQ9ZS55eXRleHQudHJpbSgpLDY2fX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOntjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sdW5xU3RyaW5nOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHRva2VuOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzQ1LDQ2XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0N10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGooKXt0aGlzLnl5PXt9fXJldHVybiBGLmxleGVyPVAsai5wcm90b3R5cGU9RixGLlBhcnNlcj1qLG5ldyBqfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMiksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW5ldyhuKDE3NSkuZGVmYXVsdCkoe3I6MCxnOjAsYjowLGE6MH0sInRyYW5zcGFyZW50Iik7ZS5kZWZhdWx0PXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU5KSxpPW4oNjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixhKXt2YXIgbz0hbjtufHwobj17fSk7Zm9yKHZhciBzPS0xLGM9ZS5sZW5ndGg7KytzPGM7KXt2YXIgdT1lW3NdLGw9YT9hKG5bdV0sdFt1XSx1LG4sdCk6dm9pZCAwO3ZvaWQgMD09PWwmJihsPXRbdV0pLG8/aShuLHUsbCk6cihuLHUsbCl9cmV0dXJuIG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzYpLGk9bigyMSksYT1PYmplY3QucHJvdG90eXBlLG89YS5oYXNPd25Qcm9wZXJ0eSxzPWEucHJvcGVydHlJc0VudW1lcmFibGUsYz1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/cjpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmby5jYWxsKHQsImNhbGxlZSIpJiYhcy5jYWxsKHQsImNhbGxlZSIpfTt0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM4KSxpPW4oNjIpLGE9big4Myksbz1hJiZhLmlzVHlwZWRBcnJheSxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHx8cih0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIndpZHRoIiwiMTAwMDAwIiksaT1uLmFwcGVuZCgieGh0bWw6ZGl2Iik7aS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKTt2YXIgYT1lLmxhYmVsO3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSJmdW5jdGlvbiI6aS5pbnNlcnQoYSk7YnJlYWs7Y2FzZSJvYmplY3QiOmkuaW5zZXJ0KChmdW5jdGlvbigpe3JldHVybiBhfSkpO2JyZWFrO2RlZmF1bHQ6aS5odG1sKGEpfXIuYXBwbHlTdHlsZShpLGUubGFiZWxTdHlsZSksaS5zdHlsZSgiZGlzcGxheSIsImlubGluZS1ibG9jayIpLGkuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIik7dmFyIG89aS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG4uYXR0cigid2lkdGgiLG8ud2lkdGgpLmF0dHIoImhlaWdodCIsby5oZWlnaHQpLG59fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDExKSxpPW4oNDYpLGE9big2KSxvPW4oNTMpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbixzKXtpZih2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1zJiYocz0xKSwibnVtYmVyIiE9dHlwZW9mIHQpcmV0dXJuIG8uZGVmYXVsdCh0LHthOmV9KTt2YXIgYz1pLmRlZmF1bHQuc2V0KHtyOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnIodCksZzpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5nKGUpLGI6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYihuKSxhOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEocyl9KTtyZXR1cm4gYS5kZWZhdWx0LnN0cmluZ2lmeShjKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTEpLGk9big2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLmRlZmF1bHQucGFyc2UodCk7Zm9yKHZhciBhIGluIGUpblthXT1yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcFthXShlW2FdKTtyZXR1cm4gaS5kZWZhdWx0LnN0cmluZ2lmeShuKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU1KSxpPW4oMjEwKSxhPW4oMjExKSxvPW4oMjEyKSxzPW4oMjEzKSxjPW4oMjE0KTtmdW5jdGlvbiB1KHQpe3ZhciBlPXRoaXMuX19kYXRhX189bmV3IHIodCk7dGhpcy5zaXplPWUuc2l6ZX11LnByb3RvdHlwZS5jbGVhcj1pLHUucHJvdG90eXBlLmRlbGV0ZT1hLHUucHJvdG90eXBlLmdldD1vLHUucHJvdG90eXBlLmhhcz1zLHUucHJvdG90eXBlLnNldD1jLHQuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMDUpLGk9bigyMDYpLGE9bigyMDcpLG89bigyMDgpLHM9bigyMDkpO2Z1bmN0aW9uIGModCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19Yy5wcm90b3R5cGUuY2xlYXI9cixjLnByb3RvdHlwZS5kZWxldGU9aSxjLnByb3RvdHlwZS5nZXQ9YSxjLnByb3RvdHlwZS5oYXM9byxjLnByb3RvdHlwZS5zZXQ9cyx0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmxlbmd0aDtuLS07KWlmKHIodFtuXVswXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShPYmplY3QsImNyZWF0ZSIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuX19kYXRhX187cmV0dXJuIHIoZSk/blsic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpuLm1hcH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYwKSxpPW4oMzgpLGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPXRbZV07YS5jYWxsKHQsZSkmJmkobyxuKSYmKHZvaWQgMCE9PW58fGUgaW4gdCl8fHIodCxlLG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4peyJfX3Byb3RvX18iPT1lJiZyP3IodCxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpuLHdyaXRhYmxlOiEwfSk6dFtlXT1ufX0sZnVuY3Rpb24odCxlKXt2YXIgbj0vXig/OjB8WzEtOV1cZCopJC87dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuISEoZT1udWxsPT1lPzkwMDcxOTkyNTQ3NDA5OTE6ZSkmJigibnVtYmVyIj09cnx8InN5bWJvbCIhPXImJm4udGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4gdD09PSgiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5wcm90b3R5cGV8fG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTEzKShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTApLGk9bigyNTkpKHIpO3QuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NyksaT1uKDUwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxhPShlPXIoZSx0KSkubGVuZ3RoO251bGwhPXQmJm48YTspdD10W2koZVtuKytdKV07cmV0dXJuIG4mJm49PWE/dDp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1KSxpPW4oOTMpLGE9bigyNzMpLG89bigxMzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQpP3Q6aSh0LGUpP1t0XTphKG8odCkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGgsaT1BcnJheShyKTsrK248cjspaVtuXT1lKHRbbl0sbix0KTtyZXR1cm4gaX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM2KSxpPW4oMTQzKSxhPW4oMTQ0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYShpKHQsZSxyKSx0KyIiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM4KSxpPW4oMjUpLGE9big2MSksbz1uKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2lmKCFvKG4pKXJldHVybiExO3ZhciBzPXR5cGVvZiBlO3JldHVybiEhKCJudW1iZXIiPT1zP2kobikmJmEoZSxuLmxlbmd0aCk6InN0cmluZyI9PXMmJmUgaW4gbikmJnIobltlXSx0KX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTt0LmV4cG9ydHM9e2xvbmdlc3RQYXRoOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3IuZm9yRWFjaCh0LnNvdXJjZXMoKSwoZnVuY3Rpb24gbihpKXt2YXIgYT10Lm5vZGUoaSk7aWYoci5oYXMoZSxpKSlyZXR1cm4gYS5yYW5rO2VbaV09ITA7dmFyIG89ci5taW4oci5tYXAodC5vdXRFZGdlcyhpKSwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS53KS10LmVkZ2UoZSkubWlubGVufSkpKTtyZXR1cm4gbyE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmbnVsbCE9b3x8KG89MCksYS5yYW5rPW99KSl9LHNsYWNrOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9kZShlLncpLnJhbmstdC5ub2RlKGUudikucmFuay10LmVkZ2UoZSkubWlubGVufX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9L14oJTIwfFxzKSooamF2YXNjcmlwdHxkYXRhKS9pbSxpPS9bXlx4MjAtXHg3RV0vZ2ltLGE9L14oW146XSspOi9nbSxvPVsiLiIsIi8iXTt0LmV4cG9ydHM9e3Nhbml0aXplVXJsOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiJhYm91dDpibGFuayI7dmFyIGUsbixzPXQucmVwbGFjZShpLCIiKS50cmltKCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBvLmluZGV4T2YodFswXSk+LTF9KHMpP3M6KG49cy5tYXRjaChhKSk/KGU9blswXSxyLnRlc3QoZSk/ImFib3V0OmJsYW5rIjpzKToiYWJvdXQ6YmxhbmsifX19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzIsM10sbj1bMSw3XSxyPVs3LDEyLDE1LDE3LDE5LDIwLDIxXSxpPVs3LDExLDEyLDE1LDE3LDE5LDIwLDIxXSxhPVsyLDIwXSxvPVsxLDMyXSxzPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxHRzo0LCI6Ijo1LGRvY3VtZW50OjYsRU9GOjcsRElSOjgsb3B0aW9uczo5LGJvZHk6MTAsT1BUOjExLE5MOjEyLGxpbmU6MTMsc3RhdGVtZW50OjE0LENPTU1JVDoxNSxjb21taXRfYXJnOjE2LEJSQU5DSDoxNyxJRDoxOCxDSEVDS09VVDoxOSxNRVJHRToyMCxSRVNFVDoyMSxyZXNldF9hcmc6MjIsU1RSOjIzLEhFQUQ6MjQscmVzZXRfcGFyZW50czoyNSxDQVJFVDoyNiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiR0ciLDU6IjoiLDc6IkVPRiIsODoiRElSIiwxMToiT1BUIiwxMjoiTkwiLDE1OiJDT01NSVQiLDE3OiJCUkFOQ0giLDE4OiJJRCIsMTk6IkNIRUNLT1VUIiwyMDoiTUVSR0UiLDIxOiJSRVNFVCIsMjM6IlNUUiIsMjQ6IkhFQUQiLDI2OiJDQVJFVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbOSwyXSxbOSwxXSxbMTAsMF0sWzEwLDJdLFsxMywyXSxbMTMsMV0sWzE0LDJdLFsxNCwyXSxbMTQsMl0sWzE0LDJdLFsxNCwyXSxbMTYsMF0sWzE2LDFdLFsyMiwyXSxbMjIsMl0sWzI1LDBdLFsyNSwyXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDE6cmV0dXJuIGFbcy0xXTtjYXNlIDI6cmV0dXJuIHIuc2V0RGlyZWN0aW9uKGFbcy0zXSksYVtzLTFdO2Nhc2UgNDpyLnNldE9wdGlvbnMoYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDU6YVtzLTFdKz1hW3NdLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDk6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDExOnIuY29tbWl0KGFbc10pO2JyZWFrO2Nhc2UgMTI6ci5icmFuY2goYVtzXSk7YnJlYWs7Y2FzZSAxMzpyLmNoZWNrb3V0KGFbc10pO2JyZWFrO2Nhc2UgMTQ6ci5tZXJnZShhW3NdKTticmVhaztjYXNlIDE1OnIucmVzZXQoYVtzXSk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9IiI7YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE4OnRoaXMuJD1hW3MtMV0rIjoiK2Fbc107YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9YVtzLTFdKyI6IityLmNvdW50LHIuY291bnQ9MDticmVhaztjYXNlIDIwOnIuY291bnQ9MDticmVhaztjYXNlIDIxOnIuY291bnQrPTF9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHs1OlsxLDNdLDg6WzEsNF19LHs2OjUsNzplLDk6NiwxMjpufSx7NTpbMSw4XX0sezc6WzEsOV19LHQocixbMiw3XSx7MTA6MTAsMTE6WzEsMTFdfSksdChpLFsyLDZdKSx7NjoxMiw3OmUsOTo2LDEyOm59LHsxOlsyLDFdfSx7NzpbMiw0XSwxMjpbMSwxNV0sMTM6MTMsMTQ6MTQsMTU6WzEsMTZdLDE3OlsxLDE3XSwxOTpbMSwxOF0sMjA6WzEsMTldLDIxOlsxLDIwXX0sdChpLFsyLDVdKSx7NzpbMSwyMV19LHQocixbMiw4XSksezEyOlsxLDIyXX0sdChyLFsyLDEwXSksezEyOlsyLDE2XSwxNjoyMywyMzpbMSwyNF19LHsxODpbMSwyNV19LHsxODpbMSwyNl19LHsxODpbMSwyN119LHsxODpbMSwzMF0sMjI6MjgsMjQ6WzEsMjldfSx7MTpbMiwyXX0sdChyLFsyLDldKSx7MTI6WzIsMTFdfSx7MTI6WzIsMTddfSx7MTI6WzIsMTJdfSx7MTI6WzIsMTNdfSx7MTI6WzIsMTRdfSx7MTI6WzIsMTVdfSx7MTI6YSwyNTozMSwyNjpvfSx7MTI6YSwyNTozMywyNjpvfSx7MTI6WzIsMThdfSx7MTI6YSwyNTozNCwyNjpvfSx7MTI6WzIsMTldfSx7MTI6WzIsMjFdfV0sZGVmYXVsdEFjdGlvbnM6ezk6WzIsMV0sMjE6WzIsMl0sMjM6WzIsMTFdLDI0OlsyLDE3XSwyNTpbMiwxMl0sMjY6WzIsMTNdLDI3OlsyLDE0XSwyODpbMiwxNV0sMzE6WzIsMThdLDMzOlsyLDE5XSwzNDpbMiwyMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxULEUsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoRSBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxjPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIDEyO2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDU6cmV0dXJuIDE1O2Nhc2UgNjpyZXR1cm4gMTc7Y2FzZSA3OnJldHVybiAyMDtjYXNlIDg6cmV0dXJuIDIxO2Nhc2UgOTpyZXR1cm4gMTk7Y2FzZSAxMDpjYXNlIDExOnJldHVybiA4O2Nhc2UgMTI6cmV0dXJuIDU7Y2FzZSAxMzpyZXR1cm4gMjY7Y2FzZSAxNDp0aGlzLmJlZ2luKCJvcHRpb25zIik7YnJlYWs7Y2FzZSAxNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gMTE7Y2FzZSAxNzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDE4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE5OnJldHVybiAyMztjYXNlIDIwOnJldHVybiAxODtjYXNlIDIxOnJldHVybiA3fX0scnVsZXM6Wy9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmdpdEdyYXBoXGIpL2ksL14oPzpjb21taXRcYikvaSwvXig/OmJyYW5jaFxiKS9pLC9eKD86bWVyZ2VcYikvaSwvXig/OnJlc2V0XGIpL2ksL14oPzpjaGVja291dFxiKS9pLC9eKD86TFJcYikvaSwvXig/OkJUXGIpL2ksL14oPzo6KS9pLC9eKD86XF4pL2ksL14oPzpvcHRpb25zXHI/XG4pL2ksL14oPzplbmRccj9cbikvaSwvXig/OlteXG5dK1xyP1xuKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbYS16QS1aXVstX1wuYS16QS1aMC05XSpbLV9hLXpBLVowLTldKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7b3B0aW9uczp7cnVsZXM6WzE1LDE2XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzE4LDE5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE3LDIwLDIxXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gdSgpe3RoaXMueXk9e319cmV0dXJuIHMubGV4ZXI9Yyx1LnByb3RvdHlwZT1zLHMuUGFyc2VyPXUsbmV3IHV9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxNykucmVhZEZpbGVTeW5jKG4oMTgpLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDEyKSxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bNiw5LDEwXSxuPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxpbmZvOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsc3RhdGVtZW50OjgsTkw6OSxzaG93SW5mbzoxMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiaW5mbyIsNjoiRU9GIiw5OiJOTCIsMTA6InNob3dJbmZvIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDFdLFs3LDFdLFs4LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe2EubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDE6cmV0dXJuIHI7Y2FzZSA0OmJyZWFrO2Nhc2UgNjpyLnNldEluZm8oITApfX0sdGFibGU6W3szOjEsNDpbMSwyXX0sezE6WzNdfSx0KGUsWzIsMl0sezU6M30pLHs2OlsxLDRdLDc6NSw4OjYsOTpbMSw3XSwxMDpbMSw4XX0sezE6WzIsMV19LHQoZSxbMiwzXSksdChlLFsyLDRdKSx0KGUsWzIsNV0pLHQoZSxbMiw2XSldLGRlZmF1bHRBY3Rpb25zOns0OlsyLDFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0scj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiA0O2Nhc2UgMTpyZXR1cm4gOTtjYXNlIDI6cmV0dXJuInNwYWNlIjtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gNjtjYXNlIDU6cmV0dXJuIlRYVCJ9fSxydWxlczpbL14oPzppbmZvXGIpL2ksL14oPzpbXHNcblxyXSspL2ksL14oPzpbXHNdKykvaSwvXig/OnNob3dJbmZvXGIpL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7SU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gaSgpe3RoaXMueXk9e319cmV0dXJuIG4ubGV4ZXI9cixpLnByb3RvdHlwZT1uLG4uUGFyc2VyPWksbmV3IGl9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxNykucmVhZEZpbGVTeW5jKG4oMTgpLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDEyKSxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSw0XSxuPVsxLDVdLHI9WzEsNl0saT1bMSw3XSxhPVsxLDldLG89WzEsMTEsMTMsMjAsMjEsMjIsMjNdLHM9WzIsNV0sYz1bMSw2LDExLDEzLDIwLDIxLDIyLDIzXSx1PVsyMCwyMSwyMl0sbD1bMiw4XSxoPVsxLDE4XSxmPVsxLDE5XSxkPVsxLDI0XSxwPVs2LDIwLDIxLDIyLDIzXSx5PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxkaXJlY3RpdmU6NSxQSUU6Nixkb2N1bWVudDo3LHNob3dEYXRhOjgsbGluZTo5LHN0YXRlbWVudDoxMCx0eHQ6MTEsdmFsdWU6MTIsdGl0bGU6MTMsdGl0bGVfdmFsdWU6MTQsb3BlbkRpcmVjdGl2ZToxNSx0eXBlRGlyZWN0aXZlOjE2LGNsb3NlRGlyZWN0aXZlOjE3LCI6IjoxOCxhcmdEaXJlY3RpdmU6MTksTkVXTElORToyMCwiOyI6MjEsRU9GOjIyLG9wZW5fZGlyZWN0aXZlOjIzLHR5cGVfZGlyZWN0aXZlOjI0LGFyZ19kaXJlY3RpdmU6MjUsY2xvc2VfZGlyZWN0aXZlOjI2LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw2OiJQSUUiLDg6InNob3dEYXRhIiwxMToidHh0IiwxMjoidmFsdWUiLDEzOiJ0aXRsZSIsMTQ6InRpdGxlX3ZhbHVlIiwxODoiOiIsMjA6Ik5FV0xJTkUiLDIxOiI7IiwyMjoiRU9GIiwyMzoib3Blbl9kaXJlY3RpdmUiLDI0OiJ0eXBlX2RpcmVjdGl2ZSIsMjU6ImFyZ19kaXJlY3RpdmUiLDI2OiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzMsM10sWzcsMF0sWzcsMl0sWzksMl0sWzEwLDBdLFsxMCwyXSxbMTAsMl0sWzEwLDFdLFs1LDNdLFs1LDVdLFs0LDFdLFs0LDFdLFs0LDFdLFsxNSwxXSxbMTYsMV0sWzE5LDFdLFsxNywxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDQ6ci5zZXRTaG93RGF0YSghMCk7YnJlYWs7Y2FzZSA3OnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA5OnIuYWRkU2VjdGlvbihhW3MtMV0sci5jbGVhbnVwVmFsdWUoYVtzXSkpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPWFbc10udHJpbSgpLHIuc2V0VGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxODpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxOTphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMjA6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwicGllIil9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6ZSwxNTo4LDIwOm4sMjE6ciwyMjppLDIzOmF9LHsxOlszXX0sezM6MTAsNDoyLDU6Myw2OmUsMTU6OCwyMDpuLDIxOnIsMjI6aSwyMzphfSx7MzoxMSw0OjIsNTozLDY6ZSwxNTo4LDIwOm4sMjE6ciwyMjppLDIzOmF9LHQobyxzLHs3OjEyLDg6WzEsMTNdfSksdChjLFsyLDE0XSksdChjLFsyLDE1XSksdChjLFsyLDE2XSksezE2OjE0LDI0OlsxLDE1XX0sezI0OlsyLDE3XX0sezE6WzIsMV19LHsxOlsyLDJdfSx0KHUsbCx7MTU6OCw5OjE2LDEwOjE3LDU6MjAsMTpbMiwzXSwxMTpoLDEzOmYsMjM6YX0pLHQobyxzLHs3OjIxfSksezE3OjIyLDE4OlsxLDIzXSwyNjpkfSx0KFsxOCwyNl0sWzIsMThdKSx0KG8sWzIsNl0pLHs0OjI1LDIwOm4sMjE6ciwyMjppfSx7MTI6WzEsMjZdfSx7MTQ6WzEsMjddfSx0KHUsWzIsMTFdKSx0KHUsbCx7MTU6OCw5OjE2LDEwOjE3LDU6MjAsMTpbMiw0XSwxMTpoLDEzOmYsMjM6YX0pLHQocCxbMiwxMl0pLHsxOToyOCwyNTpbMSwyOV19LHQocCxbMiwyMF0pLHQobyxbMiw3XSksdCh1LFsyLDldKSx0KHUsWzIsMTBdKSx7MTc6MzAsMjY6ZH0sezI2OlsyLDE5XX0sdChwLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOns5OlsyLDE3XSwxMDpbMiwxXSwxMTpbMiwyXSwyOTpbMiwxOV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxULEUsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoRSBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxnPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMjM7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDI0O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxODtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMjY7Y2FzZSA0OnJldHVybiAyNTtjYXNlIDU6Y2FzZSA2OmJyZWFrO2Nhc2UgNzpyZXR1cm4gMjA7Y2FzZSA4OmNhc2UgOTpicmVhaztjYXNlIDEwOnJldHVybiB0aGlzLmJlZ2luKCJ0aXRsZSIpLDEzO2Nhc2UgMTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgMTI6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSAxMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNDpyZXR1cm4idHh0IjtjYXNlIDE1OnJldHVybiA2O2Nhc2UgMTY6cmV0dXJuIDg7Y2FzZSAxNzpyZXR1cm4idmFsdWUiO2Nhc2UgMTg6cmV0dXJuIDIyfX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86W1xzXSspL2ksL14oPzp0aXRsZVxiKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpwaWVcYikvaSwvXig/OnNob3dEYXRhXGIpL2ksL14oPzo6W1xzXSpbXGRdKyg/OlwuW1xkXSspPykvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6WzExXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMiwxNSwxNiwxNywxOF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIG0oKXt0aGlzLnl5PXt9fXJldHVybiB5LmxleGVyPWcsbS5wcm90b3R5cGU9eSx5LlBhcnNlcj1tLG5ldyBtfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMiksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsMl0sbj1bMSw1XSxyPVs2LDksMTEsMjMsMzddLGk9WzEsMTddLGE9WzEsMjBdLG89WzEsMjVdLHM9WzEsMjZdLGM9WzEsMjddLHU9WzEsMjhdLGw9WzEsMzddLGg9WzIzLDM0LDM1XSxmPVs0LDYsOSwxMSwyMywzN10sZD1bMzAsMzEsMzIsMzNdLHA9WzIyLDI3XSx5PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxFUl9ESUFHUkFNOjQsZG9jdW1lbnQ6NSxFT0Y6NixkaXJlY3RpdmU6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkVXTElORToxMSxvcGVuRGlyZWN0aXZlOjEyLHR5cGVEaXJlY3RpdmU6MTMsY2xvc2VEaXJlY3RpdmU6MTQsIjoiOjE1LGFyZ0RpcmVjdGl2ZToxNixlbnRpdHlOYW1lOjE3LHJlbFNwZWM6MTgscm9sZToxOSxCTE9DS19TVEFSVDoyMCxhdHRyaWJ1dGVzOjIxLEJMT0NLX1NUT1A6MjIsQUxQSEFOVU06MjMsYXR0cmlidXRlOjI0LGF0dHJpYnV0ZVR5cGU6MjUsYXR0cmlidXRlTmFtZToyNixBVFRSSUJVVEVfV09SRDoyNyxjYXJkaW5hbGl0eToyOCxyZWxUeXBlOjI5LFpFUk9fT1JfT05FOjMwLFpFUk9fT1JfTU9SRTozMSxPTkVfT1JfTU9SRTozMixPTkxZX09ORTozMyxOT05fSURFTlRJRllJTkc6MzQsSURFTlRJRllJTkc6MzUsV09SRDozNixvcGVuX2RpcmVjdGl2ZTozNyx0eXBlX2RpcmVjdGl2ZTozOCxhcmdfZGlyZWN0aXZlOjM5LGNsb3NlX2RpcmVjdGl2ZTo0MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiRVJfRElBR1JBTSIsNjoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5FV0xJTkUiLDE1OiI6IiwyMDoiQkxPQ0tfU1RBUlQiLDIyOiJCTE9DS19TVE9QIiwyMzoiQUxQSEFOVU0iLDI3OiJBVFRSSUJVVEVfV09SRCIsMzA6IlpFUk9fT1JfT05FIiwzMToiWkVST19PUl9NT1JFIiwzMjoiT05FX09SX01PUkUiLDMzOiJPTkxZX09ORSIsMzQ6Ik5PTl9JREVOVElGWUlORyIsMzU6IklERU5USUZZSU5HIiwzNjoiV09SRCIsMzc6Im9wZW5fZGlyZWN0aXZlIiwzODoidHlwZV9kaXJlY3RpdmUiLDM5OiJhcmdfZGlyZWN0aXZlIiw0MDoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFs1LDBdLFs1LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFs3LDRdLFs3LDZdLFsxMCwxXSxbMTAsNV0sWzEwLDRdLFsxMCwzXSxbMTAsMV0sWzE3LDFdLFsyMSwxXSxbMjEsMl0sWzI0LDJdLFsyNSwxXSxbMjYsMV0sWzE4LDNdLFsyOCwxXSxbMjgsMV0sWzI4LDFdLFsyOCwxXSxbMjksMV0sWzI5LDFdLFsxOSwxXSxbMTksMV0sWzEyLDFdLFsxMywxXSxbMTYsMV0sWzE0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgMTpicmVhaztjYXNlIDM6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDphW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMjpyLmFkZEVudGl0eShhW3MtNF0pLHIuYWRkRW50aXR5KGFbcy0yXSksci5hZGRSZWxhdGlvbnNoaXAoYVtzLTRdLGFbc10sYVtzLTJdLGFbcy0zXSk7YnJlYWs7Y2FzZSAxMzpyLmFkZEVudGl0eShhW3MtM10pLHIuYWRkQXR0cmlidXRlcyhhW3MtM10sYVtzLTFdKTticmVhaztjYXNlIDE0OnIuYWRkRW50aXR5KGFbcy0yXSk7YnJlYWs7Y2FzZSAxNTpyLmFkZEVudGl0eShhW3NdKTticmVhaztjYXNlIDE2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTc6dGhpcy4kPVthW3NdXTticmVhaztjYXNlIDE4OmFbc10ucHVzaChhW3MtMV0pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTk6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOmFbcy0xXSxhdHRyaWJ1dGVOYW1lOmFbc119O2JyZWFrO2Nhc2UgMjA6Y2FzZSAyMTp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDIyOnRoaXMuJD17Y2FyZEE6YVtzXSxyZWxUeXBlOmFbcy0xXSxjYXJkQjphW3MtMl19O2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXIuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU7YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTticmVhaztjYXNlIDI2OnRoaXMuJD1yLkNhcmRpbmFsaXR5Lk9OTFlfT05FO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPXIuSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPXIuSWRlbnRpZmljYXRpb24uSURFTlRJRllJTkc7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9YVtzXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAzMTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzI6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzM6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDM0OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImVyIil9fSx0YWJsZTpbezM6MSw0OmUsNzozLDEyOjQsMzc6bn0sezE6WzNdfSx0KHIsWzIsM10sezU6Nn0pLHszOjcsNDplLDc6MywxMjo0LDM3Om59LHsxMzo4LDM4OlsxLDldfSx7Mzg6WzIsMzFdfSx7NjpbMSwxMF0sNzoxNSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjo0LDE3OjE2LDIzOmksMzc6bn0sezE6WzIsMl19LHsxNDoxOCwxNTpbMSwxOV0sNDA6YX0sdChbMTUsNDBdLFsyLDMyXSksdChyLFsyLDhdLHsxOlsyLDFdfSksdChyLFsyLDRdKSx7NzoxNSwxMDoyMSwxMjo0LDE3OjE2LDIzOmksMzc6bn0sdChyLFsyLDZdKSx0KHIsWzIsN10pLHQocixbMiwxMV0pLHQocixbMiwxNV0sezE4OjIyLDI4OjI0LDIwOlsxLDIzXSwzMDpvLDMxOnMsMzI6YywzMzp1fSksdChbNiw5LDExLDE1LDIwLDIzLDMwLDMxLDMyLDMzLDM3XSxbMiwxNl0pLHsxMTpbMSwyOV19LHsxNjozMCwzOTpbMSwzMV19LHsxMTpbMiwzNF19LHQocixbMiw1XSksezE3OjMyLDIzOml9LHsyMTozMywyMjpbMSwzNF0sMjQ6MzUsMjU6MzYsMjc6bH0sezI5OjM4LDM0OlsxLDM5XSwzNTpbMSw0MF19LHQoaCxbMiwyM10pLHQoaCxbMiwyNF0pLHQoaCxbMiwyNV0pLHQoaCxbMiwyNl0pLHQoZixbMiw5XSksezE0OjQxLDQwOmF9LHs0MDpbMiwzM119LHsxNTpbMSw0Ml19LHsyMjpbMSw0M119LHQocixbMiwxNF0pLHsyMTo0NCwyMjpbMiwxN10sMjQ6MzUsMjU6MzYsMjc6bH0sezI2OjQ1LDI3OlsxLDQ2XX0sezI3OlsyLDIwXX0sezI4OjQ3LDMwOm8sMzE6cywzMjpjLDMzOnV9LHQoZCxbMiwyN10pLHQoZCxbMiwyOF0pLHsxMTpbMSw0OF19LHsxOTo0OSwyMzpbMSw1MV0sMzY6WzEsNTBdfSx0KHIsWzIsMTNdKSx7MjI6WzIsMThdfSx0KHAsWzIsMTldKSx0KHAsWzIsMjFdKSx7MjM6WzIsMjJdfSx0KGYsWzIsMTBdKSx0KHIsWzIsMTJdKSx0KHIsWzIsMjldKSx0KHIsWzIsMzBdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMzFdLDc6WzIsMl0sMjA6WzIsMzRdLDMxOlsyLDMzXSwzNzpbMiwyMF0sNDQ6WzIsMThdLDQ3OlsyLDIyXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LFQsRSxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihFIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGc9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwzNztjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMzg7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE1O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw0MDtjYXNlIDQ6cmV0dXJuIDM5O2Nhc2UgNTpjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiAxMTtjYXNlIDg6YnJlYWs7Y2FzZSA5OnJldHVybiA5O2Nhc2UgMTA6cmV0dXJuIDM2O2Nhc2UgMTE6cmV0dXJuIDQ7Y2FzZSAxMjpyZXR1cm4gdGhpcy5iZWdpbigiYmxvY2siKSwyMDtjYXNlIDEzOmJyZWFrO2Nhc2UgMTQ6cmV0dXJuIDI3O2Nhc2UgMTU6YnJlYWs7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDIyO2Nhc2UgMTc6cmV0dXJuIGUueXl0ZXh0WzBdO2Nhc2UgMTg6cmV0dXJuIDMwO2Nhc2UgMTk6cmV0dXJuIDMxO2Nhc2UgMjA6cmV0dXJuIDMyO2Nhc2UgMjE6cmV0dXJuIDMzO2Nhc2UgMjI6cmV0dXJuIDMwO2Nhc2UgMjM6cmV0dXJuIDMxO2Nhc2UgMjQ6cmV0dXJuIDMyO2Nhc2UgMjU6cmV0dXJuIDM0O2Nhc2UgMjY6cmV0dXJuIDM1O2Nhc2UgMjc6Y2FzZSAyODpyZXR1cm4gMzQ7Y2FzZSAyOTpyZXR1cm4gMjM7Y2FzZSAzMDpyZXR1cm4gZS55eXRleHRbMF07Y2FzZSAzMTpyZXR1cm4gNn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzpbXHNdKykvaSwvXig/OiJbXiJdKiIpL2ksL14oPzplckRpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XHMrKS9pLC9eKD86W0EtWmEtel1bQS1aYS16MC05XC1fXSopL2ksL14oPzpbXG5dKykvaSwvXig/Olx9KS9pLC9eKD86LikvaSwvXig/Olx8b1xiKS9pLC9eKD86XH1vXGIpL2ksL14oPzpcfVx8KS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzpcLi0pL2ksL14oPzotXC4pL2ksL14oPzpbQS1aYS16XVtBLVphLXowLTlcLV9dKikvaSwvXig/Oi4pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSxibG9jazp7cnVsZXM6WzEzLDE0LDE1LDE2LDE3XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMV0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIG0oKXt0aGlzLnl5PXt9fXJldHVybiB5LmxleGVyPWcsbS5wcm90b3R5cGU9eSx5LlBhcnNlcj1tLG5ldyBtfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMiksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTEpLGk9big2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9aS5kZWZhdWx0LnBhcnNlKHQpLG49ZS5yLGE9ZS5nLG89ZS5iLHM9LjIxMjYqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIobikrLjcxNTIqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIoYSkrLjA3MjIqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIobyk7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKHMpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEzKTt0LmV4cG9ydHM9aTtmdW5jdGlvbiBpKHQpe3RoaXMuX2lzRGlyZWN0ZWQ9IXIuaGFzKHQsImRpcmVjdGVkIil8fHQuZGlyZWN0ZWQsdGhpcy5faXNNdWx0aWdyYXBoPSEhci5oYXModCwibXVsdGlncmFwaCIpJiZ0Lm11bHRpZ3JhcGgsdGhpcy5faXNDb21wb3VuZD0hIXIuaGFzKHQsImNvbXBvdW5kIikmJnQuY29tcG91bmQsdGhpcy5fbGFiZWw9dm9pZCAwLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1yLmNvbnN0YW50KHZvaWQgMCksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXIuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdPXt9KSx0aGlzLl9pbj17fSx0aGlzLl9wcmVkcz17fSx0aGlzLl9vdXQ9e30sdGhpcy5fc3Vjcz17fSx0aGlzLl9lZGdlT2Jqcz17fSx0aGlzLl9lZGdlTGFiZWxzPXt9fWZ1bmN0aW9uIGEodCxlKXt0W2VdP3RbZV0rKzp0W2VdPTF9ZnVuY3Rpb24gbyh0LGUpey0tdFtlXXx8ZGVsZXRlIHRbZV19ZnVuY3Rpb24gcyh0LGUsbixpKXt2YXIgYT0iIitlLG89IiIrbjtpZighdCYmYT5vKXt2YXIgcz1hO2E9byxvPXN9cmV0dXJuIGErIgEiK28rIgEiKyhyLmlzVW5kZWZpbmVkKGkpPyJcMCI6aSl9ZnVuY3Rpb24gYyh0LGUsbixyKXt2YXIgaT0iIitlLGE9IiIrbjtpZighdCYmaT5hKXt2YXIgbz1pO2k9YSxhPW99dmFyIHM9e3Y6aSx3OmF9O3JldHVybiByJiYocy5uYW1lPXIpLHN9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBzKHQsZS52LGUudyxlLm5hbWUpfWkucHJvdG90eXBlLl9ub2RlQ291bnQ9MCxpLnByb3RvdHlwZS5fZWRnZUNvdW50PTAsaS5wcm90b3R5cGUuaXNEaXJlY3RlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0RpcmVjdGVkfSxpLnByb3RvdHlwZS5pc011bHRpZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNNdWx0aWdyYXBofSxpLnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9LGkucHJvdG90eXBlLnNldEdyYXBoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYWJlbD10LHRoaXN9LGkucHJvdG90eXBlLmdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhYmVsfSxpLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKHQpe3JldHVybiByLmlzRnVuY3Rpb24odCl8fCh0PXIuY29uc3RhbnQodCkpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj10LHRoaXN9LGkucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9LGkucHJvdG90eXBlLm5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIua2V5cyh0aGlzLl9ub2Rlcyl9LGkucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiByLmZpbHRlcih0aGlzLm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiByLmlzRW1wdHkodC5faW5bZV0pfSkpfSxpLnByb3RvdHlwZS5zaW5rcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHIuZmlsdGVyKHRoaXMubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuaXNFbXB0eSh0Ll9vdXRbZV0pfSkpfSxpLnByb3RvdHlwZS5zZXROb2Rlcz1mdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cyxpPXRoaXM7cmV0dXJuIHIuZWFjaCh0LChmdW5jdGlvbih0KXtuLmxlbmd0aD4xP2kuc2V0Tm9kZSh0LGUpOmkuc2V0Tm9kZSh0KX0pKSx0aGlzfSxpLnByb3RvdHlwZS5zZXROb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuaGFzKHRoaXMuX25vZGVzLHQpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1t0XT1lKSx0aGlzKToodGhpcy5fbm9kZXNbdF09YXJndW1lbnRzLmxlbmd0aD4xP2U6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKHQpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbdF09IlwwIix0aGlzLl9jaGlsZHJlblt0XT17fSx0aGlzLl9jaGlsZHJlblsiXDAiXVt0XT0hMCksdGhpcy5faW5bdF09e30sdGhpcy5fcHJlZHNbdF09e30sdGhpcy5fb3V0W3RdPXt9LHRoaXMuX3N1Y3NbdF09e30sKyt0aGlzLl9ub2RlQ291bnQsdGhpcyl9LGkucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25vZGVzW3RdfSxpLnByb3RvdHlwZS5oYXNOb2RlPWZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0aGlzLl9ub2Rlcyx0KX0saS5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHIuaGFzKHRoaXMuX25vZGVzLHQpKXt2YXIgbj1mdW5jdGlvbih0KXtlLnJlbW92ZUVkZ2UoZS5fZWRnZU9ianNbdF0pfTtkZWxldGUgdGhpcy5fbm9kZXNbdF0sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHQpLGRlbGV0ZSB0aGlzLl9wYXJlbnRbdF0sci5lYWNoKHRoaXMuY2hpbGRyZW4odCksKGZ1bmN0aW9uKHQpe2Uuc2V0UGFyZW50KHQpfSkpLGRlbGV0ZSB0aGlzLl9jaGlsZHJlblt0XSksci5lYWNoKHIua2V5cyh0aGlzLl9pblt0XSksbiksZGVsZXRlIHRoaXMuX2luW3RdLGRlbGV0ZSB0aGlzLl9wcmVkc1t0XSxyLmVhY2goci5rZXlzKHRoaXMuX291dFt0XSksbiksZGVsZXRlIHRoaXMuX291dFt0XSxkZWxldGUgdGhpcy5fc3Vjc1t0XSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc30saS5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX2lzQ29tcG91bmQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IHBhcmVudCBpbiBhIG5vbi1jb21wb3VuZCBncmFwaCIpO2lmKHIuaXNVbmRlZmluZWQoZSkpZT0iXDAiO2Vsc2V7Zm9yKHZhciBuPWUrPSIiOyFyLmlzVW5kZWZpbmVkKG4pO249dGhpcy5wYXJlbnQobikpaWYobj09PXQpdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nICIrZSsiIGFzIHBhcmVudCBvZiAiK3QrIiB3b3VsZCBjcmVhdGUgYSBjeWNsZSIpO3RoaXMuc2V0Tm9kZShlKX1yZXR1cm4gdGhpcy5zZXROb2RlKHQpLHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHQpLHRoaXMuX3BhcmVudFt0XT1lLHRoaXMuX2NoaWxkcmVuW2VdW3RdPSEwLHRoaXN9LGkucHJvdG90eXBlLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdD1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W3RdXVt0XX0saS5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciBlPXRoaXMuX3BhcmVudFt0XTtpZigiXDAiIT09ZSlyZXR1cm4gZX19LGkucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe2lmKHIuaXNVbmRlZmluZWQodCkmJih0PSJcMCIpLHRoaXMuX2lzQ29tcG91bmQpe3ZhciBlPXRoaXMuX2NoaWxkcmVuW3RdO2lmKGUpcmV0dXJuIHIua2V5cyhlKX1lbHNle2lmKCJcMCI9PT10KXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKHQpKXJldHVybltdfX0saS5wcm90b3R5cGUucHJlZGVjZXNzb3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ByZWRzW3RdO2lmKGUpcmV0dXJuIHIua2V5cyhlKX0saS5wcm90b3R5cGUuc3VjY2Vzc29ycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdWNzW3RdO2lmKGUpcmV0dXJuIHIua2V5cyhlKX0saS5wcm90b3R5cGUubmVpZ2hib3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucHJlZGVjZXNzb3JzKHQpO2lmKGUpcmV0dXJuIHIudW5pb24oZSx0aGlzLnN1Y2Nlc3NvcnModCkpfSxpLnByb3RvdHlwZS5pc0xlYWY9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT0odGhpcy5pc0RpcmVjdGVkKCk/dGhpcy5zdWNjZXNzb3JzKHQpOnRoaXMubmVpZ2hib3JzKHQpKS5sZW5ndGh9LGkucHJvdG90eXBlLmZpbHRlck5vZGVzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTtlLnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIG49dGhpcztyLmVhY2godGhpcy5fbm9kZXMsKGZ1bmN0aW9uKG4scil7dChyKSYmZS5zZXROb2RlKHIsbil9KSksci5lYWNoKHRoaXMuX2VkZ2VPYmpzLChmdW5jdGlvbih0KXtlLmhhc05vZGUodC52KSYmZS5oYXNOb2RlKHQudykmJmUuc2V0RWRnZSh0LG4uZWRnZSh0KSl9KSk7dmFyIGk9e307cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJnIuZWFjaChlLm5vZGVzKCksKGZ1bmN0aW9uKHQpe2Uuc2V0UGFyZW50KHQsZnVuY3Rpb24gdChyKXt2YXIgYT1uLnBhcmVudChyKTtyZXR1cm4gdm9pZCAwPT09YXx8ZS5oYXNOb2RlKGEpPyhpW3JdPWEsYSk6YSBpbiBpP2lbYV06dChhKX0odCkpfSkpLGV9LGkucHJvdG90eXBlLnNldERlZmF1bHRFZGdlTGFiZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNGdW5jdGlvbih0KXx8KHQ9ci5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXQsdGhpc30saS5wcm90b3R5cGUuZWRnZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VkZ2VDb3VudH0saS5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci52YWx1ZXModGhpcy5fZWRnZU9ianMpfSxpLnByb3RvdHlwZS5zZXRQYXRoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWFyZ3VtZW50cztyZXR1cm4gci5yZWR1Y2UodCwoZnVuY3Rpb24odCxyKXtyZXR1cm4gaS5sZW5ndGg+MT9uLnNldEVkZ2UodCxyLGUpOm4uc2V0RWRnZSh0LHIpLHJ9KSksdGhpc30saS5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciB0LGUsbixpLG89ITEsdT1hcmd1bWVudHNbMF07Im9iamVjdCI9PXR5cGVvZiB1JiZudWxsIT09dSYmInYiaW4gdT8odD11LnYsZT11Lncsbj11Lm5hbWUsMj09PWFyZ3VtZW50cy5sZW5ndGgmJihpPWFyZ3VtZW50c1sxXSxvPSEwKSk6KHQ9dSxlPWFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihpPWFyZ3VtZW50c1syXSxvPSEwKSksdD0iIit0LGU9IiIrZSxyLmlzVW5kZWZpbmVkKG4pfHwobj0iIituKTt2YXIgbD1zKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO2lmKHIuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbCkpcmV0dXJuIG8mJih0aGlzLl9lZGdlTGFiZWxzW2xdPWkpLHRoaXM7aWYoIXIuaXNVbmRlZmluZWQobikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKHQpLHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9lZGdlTGFiZWxzW2xdPW8/aTp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4odCxlLG4pO3ZhciBoPWModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHQ9aC52LGU9aC53LE9iamVjdC5mcmVlemUoaCksdGhpcy5fZWRnZU9ianNbbF09aCxhKHRoaXMuX3ByZWRzW2VdLHQpLGEodGhpcy5fc3Vjc1t0XSxlKSx0aGlzLl9pbltlXVtsXT1oLHRoaXMuX291dFt0XVtsXT1oLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9LGkucHJvdG90eXBlLmVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTE9PT1hcmd1bWVudHMubGVuZ3RoP3UodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHRoaXMuX2VkZ2VMYWJlbHNbcl19LGkucHJvdG90eXBlLmhhc0VkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPTE9PT1hcmd1bWVudHMubGVuZ3RoP3UodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHIuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsaSl9LGkucHJvdG90eXBlLnJlbW92ZUVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTE9PT1hcmd1bWVudHMubGVuZ3RoP3UodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnModGhpcy5faXNEaXJlY3RlZCx0LGUsbiksaT10aGlzLl9lZGdlT2Jqc1tyXTtyZXR1cm4gaSYmKHQ9aS52LGU9aS53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW3JdLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1tyXSxvKHRoaXMuX3ByZWRzW2VdLHQpLG8odGhpcy5fc3Vjc1t0XSxlKSxkZWxldGUgdGhpcy5faW5bZV1bcl0sZGVsZXRlIHRoaXMuX291dFt0XVtyXSx0aGlzLl9lZGdlQ291bnQtLSksdGhpc30saS5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2luW3RdO2lmKG4pe3ZhciBpPXIudmFsdWVzKG4pO3JldHVybiBlP3IuZmlsdGVyKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LnY9PT1lfSkpOml9fSxpLnByb3RvdHlwZS5vdXRFZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX291dFt0XTtpZihuKXt2YXIgaT1yLnZhbHVlcyhuKTtyZXR1cm4gZT9yLmZpbHRlcihpLChmdW5jdGlvbih0KXtyZXR1cm4gdC53PT09ZX0pKTppfX0saS5wcm90b3R5cGUubm9kZUVkZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5pbkVkZ2VzKHQsZSk7aWYobilyZXR1cm4gbi5jb25jYXQodGhpcy5vdXRFZGdlcyh0LGUpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE5KSwiTWFwIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIyMiksaT1uKDIyOSksYT1uKDIzMSksbz1uKDIzMikscz1uKDIzMyk7ZnVuY3Rpb24gYyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIHI9dFtlXTt0aGlzLnNldChyWzBdLHJbMV0pfX1jLnByb3RvdHlwZS5jbGVhcj1yLGMucHJvdG90eXBlLmRlbGV0ZT1pLGMucHJvdG90eXBlLmdldD1hLGMucHJvdG90eXBlLmhhcz1vLGMucHJvdG90eXBlLnNldD1zLHQuZXhwb3J0cz1jfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK248ciYmITEhPT1lKHRbbl0sbix0KTspO3JldHVybiB0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PTkwMDcxOTkyNTQ3NDA5OTF9fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe3ZhciByPW4oMTA5KSxpPWUmJiFlLm5vZGVUeXBlJiZlLGE9aSYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0JiYhdC5ub2RlVHlwZSYmdCxvPWEmJmEuZXhwb3J0cz09PWkmJnIucHJvY2VzcyxzPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWEmJmEucmVxdWlyZSYmYS5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIHR8fG8mJm8uYmluZGluZyYmby5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0oKTt0LmV4cG9ydHM9c30pLmNhbGwodGhpcyxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjMpLGk9bigyMzkpLGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkpcmV0dXJuIGkodCk7dmFyIGU9W107Zm9yKHZhciBuIGluIE9iamVjdCh0KSlhLmNhbGwodCxuKSYmImNvbnN0cnVjdG9yIiE9biYmZS5wdXNoKG4pO3JldHVybiBlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTE2KSxpPW4oMTE3KSxhPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLHM9bz9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXToodD1PYmplY3QodCkscihvKHQpLChmdW5jdGlvbihlKXtyZXR1cm4gYS5jYWxsKHQsZSl9KSkpfTppO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoLGk9dC5sZW5ndGg7KytuPHI7KXRbaStuXT1lW25dO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IHIoZSkuc2V0KG5ldyByKHQpKSxlfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1uKDEyNil9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkxKSxpPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZyKHQsZSxpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1OCkoKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9LTEsbj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe25bKytlXT10fSkpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1KSxpPW4oNDMpLGE9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sbz0vXlx3KiQvO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIodCkpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuISgibnVtYmVyIiE9biYmInN5bWJvbCIhPW4mJiJib29sZWFuIiE9biYmbnVsbCE9dCYmIWkodCkpfHwoby50ZXN0KHQpfHwhYS50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyODApLGk9bigxMzcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10JiZpKHQsZSxyKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2KSxpPW4oMjkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4sYSxvLHMpe3ZhciBjPS0xLHU9ZS5sZW5ndGg7Zm9yKGF8fChhPWkpLHN8fChzPVtdKTsrK2M8dTspe3ZhciBsPWVbY107bj4wJiZhKGwpP24+MT90KGwsbi0xLGEsbyxzKTpyKHMsbCk6b3x8KHNbcy5sZW5ndGhdPWwpfXJldHVybiBzfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPS0xLGE9dC5sZW5ndGg7KytpPGE7KXt2YXIgbz10W2ldLHM9ZShvKTtpZihudWxsIT1zJiYodm9pZCAwPT09Yz9zPT1zJiYhcihzKTpuKHMsYykpKXZhciBjPXMsdT1vfXJldHVybiB1fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC54LGE9dC55LG89aS1yLngscz1hLXIueSxjPU1hdGguc3FydChlKmUqcypzK24qbipvKm8pLHU9TWF0aC5hYnMoZSpuKm8vYyk7ci54PGkmJih1PS11KTt2YXIgbD1NYXRoLmFicyhlKm4qcy9jKTtyLnk8YSYmKGw9LWwpO3JldHVybnt4OmkrdSx5OmErbH19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNzkpLGk9big1MSksYT1uKDM4MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbz1lLmxhYmVsLHM9dC5hcHBlbmQoImciKTsic3ZnIj09PWUubGFiZWxUeXBlP2EocyxlKToic3RyaW5nIiE9dHlwZW9mIG98fCJodG1sIj09PWUubGFiZWxUeXBlP2kocyxlKTpyKHMsZSk7dmFyIGMsdT1zLm5vZGUoKS5nZXRCQm94KCk7c3dpdGNoKG4pe2Nhc2UidG9wIjpjPS1lLmhlaWdodC8yO2JyZWFrO2Nhc2UiYm90dG9tIjpjPWUuaGVpZ2h0LzItdS5oZWlnaHQ7YnJlYWs7ZGVmYXVsdDpjPS11LmhlaWdodC8yfXJldHVybiBzLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy11LndpZHRoLzIrIiwiK2MrIikiKSxzfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big0NiksaT1uKDE3NyksYT17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTpmdW5jdGlvbih0KXtpZigzNT09PXQuY2hhckNvZGVBdCgwKSl7dmFyIGU9dC5tYXRjaChhLnJlKTtpZihlKXt2YXIgbj1lWzFdLGk9cGFyc2VJbnQobiwxNiksbz1uLmxlbmd0aCxzPW8lND09MCxjPW8+NCx1PWM/MToxNyxsPWM/ODo0LGg9cz8wOi0xLGY9Yz8yNTU6MTU7cmV0dXJuIHIuZGVmYXVsdC5zZXQoe3I6KGk+PmwqKGgrMykmZikqdSxnOihpPj5sKihoKzIpJmYpKnUsYjooaT4+bCooaCsxKSZmKSp1LGE6cz8oaSZmKSp1LzI1NToxfSx0KX19fSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5yLG49dC5nLHI9dC5iLGE9dC5hO3JldHVybiBhPDE/IiMiK2kuREVDMkhFWFtNYXRoLnJvdW5kKGUpXStpLkRFQzJIRVhbTWF0aC5yb3VuZChuKV0raS5ERUMySEVYW01hdGgucm91bmQocildK2kuREVDMkhFWFtNYXRoLnJvdW5kKDI1NSphKV06IiMiK2kuREVDMkhFWFtNYXRoLnJvdW5kKGUpXStpLkRFQzJIRVhbTWF0aC5yb3VuZChuKV0raS5ERUMySEVYW01hdGgucm91bmQocildfX07ZS5kZWZhdWx0PWF9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTEpLGk9big0NiksYT1uKDYpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbixvKXt2b2lkIDA9PT1vJiYobz0xKTt2YXIgcz1pLmRlZmF1bHQuc2V0KHtoOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgodCksczpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5zKGUpLGw6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAubChuKSxhOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEobyl9KTtyZXR1cm4gYS5kZWZhdWx0LnN0cmluZ2lmeShzKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImEiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNzcpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQpPj0uNX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwiYSIsZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImEiLC1lKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNiksaT1uKDUzKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmRlZmF1bHQucGFyc2UodCksYT17fTtmb3IodmFyIG8gaW4gZSllW29dJiYoYVtvXT1uW29dK2Vbb10pO3JldHVybiBpLmRlZmF1bHQodCxhKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNiksaT1uKDUyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PW4mJihuPTUwKTt2YXIgYT1yLmRlZmF1bHQucGFyc2UodCksbz1hLnIscz1hLmcsYz1hLmIsdT1hLmEsbD1yLmRlZmF1bHQucGFyc2UoZSksaD1sLnIsZj1sLmcsZD1sLmIscD1sLmEseT1uLzEwMCxnPTIqeS0xLG09dS1wLHY9KChnKm09PS0xP2c6KGcrbSkvKDErZyptKSkrMSkvMixiPTEtdix4PW8qditoKmIsXz1zKnYrZipiLGs9Yyp2K2QqYix3PXUqeStwKigxLXkpO3JldHVybiBpLmRlZmF1bHQoeCxfLGssdyl9fSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTQpLGk9big4MSksYT1uKDU5KSxvPW4oMjM0KSxzPW4oMjQwKSxjPW4oMTE0KSx1PW4oMTE1KSxsPW4oMjQzKSxoPW4oMjQ0KSxmPW4oMTE5KSxkPW4oMjQ1KSxwPW4oNDIpLHk9bigyNDkpLGc9bigyNTApLG09bigxMjQpLHY9big1KSxiPW4oNDEpLHg9bigyNTQpLF89bigxNCksaz1uKDI1Niksdz1uKDMwKSxUPW4oMzUpLEU9e307RVsiW29iamVjdCBBcmd1bWVudHNdIl09RVsiW29iamVjdCBBcnJheV0iXT1FWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPUVbIltvYmplY3QgRGF0YVZpZXddIl09RVsiW29iamVjdCBCb29sZWFuXSJdPUVbIltvYmplY3QgRGF0ZV0iXT1FWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1FWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1FWyJbb2JqZWN0IEludDhBcnJheV0iXT1FWyJbb2JqZWN0IEludDE2QXJyYXldIl09RVsiW29iamVjdCBJbnQzMkFycmF5XSJdPUVbIltvYmplY3QgTWFwXSJdPUVbIltvYmplY3QgTnVtYmVyXSJdPUVbIltvYmplY3QgT2JqZWN0XSJdPUVbIltvYmplY3QgUmVnRXhwXSJdPUVbIltvYmplY3QgU2V0XSJdPUVbIltvYmplY3QgU3RyaW5nXSJdPUVbIltvYmplY3QgU3ltYm9sXSJdPUVbIltvYmplY3QgVWludDhBcnJheV0iXT1FWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPUVbIltvYmplY3QgVWludDE2QXJyYXldIl09RVsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxFWyJbb2JqZWN0IEVycm9yXSJdPUVbIltvYmplY3QgRnVuY3Rpb25dIl09RVsiW29iamVjdCBXZWFrTWFwXSJdPSExLHQuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixDLFMsQSxNKXt2YXIgTyxOPTEmbixCPTImbixEPTQmbjtpZihDJiYoTz1BP0MoZSxTLEEsTSk6QyhlKSksdm9pZCAwIT09TylyZXR1cm4gTztpZighXyhlKSlyZXR1cm4gZTt2YXIgTD12KGUpO2lmKEwpe2lmKE89eShlKSwhTilyZXR1cm4gdShlLE8pfWVsc2V7dmFyIEk9cChlKSxSPSJbb2JqZWN0IEZ1bmN0aW9uXSI9PUl8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PUk7aWYoYihlKSlyZXR1cm4gYyhlLE4pO2lmKCJbb2JqZWN0IE9iamVjdF0iPT1JfHwiW29iamVjdCBBcmd1bWVudHNdIj09SXx8UiYmIUEpe2lmKE89Qnx8Uj97fTptKGUpLCFOKXJldHVybiBCP2goZSxzKE8sZSkpOmwoZSxvKE8sZSkpfWVsc2V7aWYoIUVbSV0pcmV0dXJuIEE/ZTp7fTtPPWcoZSxJLE4pfX1NfHwoTT1uZXcgcik7dmFyIEY9TS5nZXQoZSk7aWYoRilyZXR1cm4gRjtNLnNldChlLE8pLGsoZSk/ZS5mb3JFYWNoKChmdW5jdGlvbihyKXtPLmFkZCh0KHIsbixDLHIsZSxNKSl9KSk6eChlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLGkpe08uc2V0KGksdChyLG4sQyxpLGUsTSkpfSkpO3ZhciBQPUw/dm9pZCAwOihEP0I/ZDpmOkI/VDp3KShlKTtyZXR1cm4gaShQfHxlLChmdW5jdGlvbihyLGkpe1AmJihyPWVbaT1yXSksYShPLGksdChyLG4sQyxpLGUsTSkpfSkpLE99fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKGUpe3ZhciBuPSJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmU7dC5leHBvcnRzPW59KS5jYWxsKHRoaXMsbigyMTYpKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpe3RyeXtyZXR1cm4gbi5jYWxsKHQpfWNhdGNoKHQpe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKSxpPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PXIoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoKHQpe319KCk7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNSksaT1uKDQ4KSxhPW4oNSksbz1uKDQxKSxzPW4oNjEpLGM9big0OSksdT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWEodCksbD0hbiYmaSh0KSxoPSFuJiYhbCYmbyh0KSxmPSFuJiYhbCYmIWgmJmModCksZD1ufHxsfHxofHxmLHA9ZD9yKHQubGVuZ3RoLFN0cmluZyk6W10seT1wLmxlbmd0aDtmb3IodmFyIGcgaW4gdCkhZSYmIXUuY2FsbCh0LGcpfHxkJiYoImxlbmd0aCI9PWd8fGgmJigib2Zmc2V0Ij09Z3x8InBhcmVudCI9PWcpfHxmJiYoImJ1ZmZlciI9PWd8fCJieXRlTGVuZ3RoIj09Z3x8ImJ5dGVPZmZzZXQiPT1nKXx8cyhnLHkpKXx8cC5wdXNoKGcpO3JldHVybiBwfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZShuKSl9fX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0KXt2YXIgcj1uKDE5KSxpPWUmJiFlLm5vZGVUeXBlJiZlLGE9aSYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0JiYhdC5ub2RlVHlwZSYmdCxvPWEmJmEuZXhwb3J0cz09PWk/ci5CdWZmZXI6dm9pZCAwLHM9bz9vLmFsbG9jVW5zYWZlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihlKXJldHVybiB0LnNsaWNlKCk7dmFyIG49dC5sZW5ndGgscj1zP3Mobik6bmV3IHQuY29uc3RydWN0b3Iobik7cmV0dXJuIHQuY29weShyKSxyfX0pLmNhbGwodGhpcyxuKDcpKHQpKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj0tMSxyPXQubGVuZ3RoO2ZvcihlfHwoZT1BcnJheShyKSk7KytuPHI7KWVbbl09dFtuXTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoLGk9MCxhPVtdOysrbjxyOyl7dmFyIG89dFtuXTtlKG8sbix0KSYmKGFbaSsrXT1vKX1yZXR1cm4gYX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuW119fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NiksaT1uKDY0KSxhPW4oODUpLG89bigxMTcpLHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbih0KXtmb3IodmFyIGU9W107dDspcihlLGEodCkpLHQ9aSh0KTtyZXR1cm4gZX06bzt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIwKSxpPW4oODUpLGE9bigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsYSxpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2KSxpPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1lKHQpO3JldHVybiBpKHQpP2E6cihhLG4odCkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMpKG4oMTkpLCJTZXQiKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTkpLlVpbnQ4QXJyYXk7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1lP3IodC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihuLHQuYnl0ZU9mZnNldCx0Lmxlbmd0aCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMjUpLGk9big2NCksYT1uKDYzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQuY29uc3RydWN0b3J8fGEodCk/e306cihpKHQpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0KSxpPU9iamVjdC5jcmVhdGUsYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFyKGUpKXJldHVybnt9O2lmKGkpcmV0dXJuIGkoZSk7dC5wcm90b3R5cGU9ZTt2YXIgbj1uZXcgdDtyZXR1cm4gdC5wcm90b3R5cGU9dm9pZCAwLG59fSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4MSksaT1uKDY1KSxhPW4oMTI3KSxvPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKG8odCk/cjppKSh0LGEoZSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJ9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTYpLGk9bigyNjApLGE9bigyNiksbz1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybihvKHQpP3I6aSkodCxhKGUsMykpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjYzKSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixhLG8scyl7cmV0dXJuIGU9PT1ufHwobnVsbD09ZXx8bnVsbD09bnx8IWkoZSkmJiFpKG4pP2UhPWUmJm4hPW46cihlLG4sYSxvLHQscykpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMxKSxpPW4oMjY2KSxhPW4oMTMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sbyxzLGMpe3ZhciB1PTEmbixsPXQubGVuZ3RoLGg9ZS5sZW5ndGg7aWYobCE9aCYmISh1JiZoPmwpKXJldHVybiExO3ZhciBmPWMuZ2V0KHQpLGQ9Yy5nZXQoZSk7aWYoZiYmZClyZXR1cm4gZj09ZSYmZD09dDt2YXIgcD0tMSx5PSEwLGc9MiZuP25ldyByOnZvaWQgMDtmb3IoYy5zZXQodCxlKSxjLnNldChlLHQpOysrcDxsOyl7dmFyIG09dFtwXSx2PWVbcF07aWYobyl2YXIgYj11P28odixtLHAsZSx0LGMpOm8obSx2LHAsdCxlLGMpO2lmKHZvaWQgMCE9PWIpe2lmKGIpY29udGludWU7eT0hMTticmVha31pZihnKXtpZighaShlLChmdW5jdGlvbih0LGUpe2lmKCFhKGcsZSkmJihtPT09dHx8cyhtLHQsbixvLGMpKSlyZXR1cm4gZy5wdXNoKGUpfSkpKXt5PSExO2JyZWFrfX1lbHNlIGlmKG0hPT12JiYhcyhtLHYsbixvLGMpKXt5PSExO2JyZWFrfX1yZXR1cm4gYy5kZWxldGUodCksYy5kZWxldGUoZSkseX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDgwKSxpPW4oMjY0KSxhPW4oMjY1KTtmdW5jdGlvbiBvKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyByOysrZTxuOyl0aGlzLmFkZCh0W2VdKX1vLnByb3RvdHlwZS5hZGQ9by5wcm90b3R5cGUucHVzaD1pLG8ucHJvdG90eXBlLmhhcz1hLHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmhhcyhlKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PXQmJiFyKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJihuW3RdPT09ZSYmKHZvaWQgMCE9PWV8fHQgaW4gT2JqZWN0KG4pKSl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjc2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/IiI6cih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI3NyksaT1uKDEzNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQmJmkodCxlLHIpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjcpLGk9big0OCksYT1uKDUpLG89big2MSkscz1uKDgyKSxjPW4oNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciB1PS0xLGw9KGU9cihlLHQpKS5sZW5ndGgsaD0hMTsrK3U8bDspe3ZhciBmPWMoZVt1XSk7aWYoIShoPW51bGwhPXQmJm4odCxmKSkpYnJlYWs7dD10W2ZdfXJldHVybiBofHwrK3UhPWw/aDohIShsPW51bGw9PXQ/MDp0Lmxlbmd0aCkmJnMobCkmJm8oZixsKSYmKGEodCl8fGkodCkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjgpLGk9bigyNiksYT1uKDE0MSksbz1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybihvKHQpP3I6YSkodCxpKGUsMykpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjUpLGk9bigyNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49LTEsYT1pKHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gcih0LChmdW5jdGlvbih0LHIsaSl7YVsrK25dPWUodCxyLGkpfSkpLGF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyODIpLGk9big2NSksYT1uKDI2KSxvPW4oMjgzKSxzPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYz1zKHQpP3I6byx1PWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gYyh0LGEoZSw0KSxuLHUsaSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyOTMpLGk9TWF0aC5tYXg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT1pKHZvaWQgMD09PWU/dC5sZW5ndGgtMTplLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cyxvPS0xLHM9aShhLmxlbmd0aC1lLDApLGM9QXJyYXkocyk7KytvPHM7KWNbb109YVtlK29dO289LTE7Zm9yKHZhciB1PUFycmF5KGUrMSk7KytvPGU7KXVbb109YVtvXTtyZXR1cm4gdVtlXT1uKGMpLHIodCx0aGlzLHUpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI5NCksaT1uKDI5NSkocik7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxhPW4rKHI/MTotMSk7cj9hLS06KythPGk7KWlmKGUodFthXSxhLHQpKXJldHVybiBhO3JldHVybi0xfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjUpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiZyKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzA0KSxpPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXTpyKHQsaSh0KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMyksaT1uKDE0OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbih0LGUsbixyKXt2YXIgYSxvLHM9e30sYz1uZXcgaSx1PWZ1bmN0aW9uKHQpe3ZhciBlPXQudiE9PWE/dC52OnQudyxyPXNbZV0saT1uKHQpLHU9by5kaXN0YW5jZStpO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrdCsiIFdlaWdodDogIitpKTt1PHIuZGlzdGFuY2UmJihyLmRpc3RhbmNlPXUsci5wcmVkZWNlc3Nvcj1hLGMuZGVjcmVhc2UoZSx1KSl9O3Qubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10PT09ZT8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtzW3RdPXtkaXN0YW5jZTpufSxjLmFkZCh0LG4pfSkpO2Zvcig7Yy5zaXplKCk+MCYmKGE9Yy5yZW1vdmVNaW4oKSwobz1zW2FdKS5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KXIoYSkuZm9yRWFjaCh1KTtyZXR1cm4gc30odCxTdHJpbmcoZSksbnx8YSxyfHxmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlKX0pfTt2YXIgYT1yLmNvbnN0YW50KDEpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMyk7ZnVuY3Rpb24gaSgpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fXQuZXhwb3J0cz1pLGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyLmxlbmd0aH0saS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSl9LGkucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gci5oYXModGhpcy5fa2V5SW5kaWNlcyx0KX0saS5wcm90b3R5cGUucHJpb3JpdHk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fa2V5SW5kaWNlc1t0XTtpZih2b2lkIDAhPT1lKXJldHVybiB0aGlzLl9hcnJbZV0ucHJpb3JpdHl9LGkucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe2lmKDA9PT10aGlzLnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoIlF1ZXVlIHVuZGVyZmxvdyIpO3JldHVybiB0aGlzLl9hcnJbMF0ua2V5fSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9rZXlJbmRpY2VzO2lmKHQ9U3RyaW5nKHQpLCFyLmhhcyhuLHQpKXt2YXIgaT10aGlzLl9hcnIsYT1pLmxlbmd0aDtyZXR1cm4gblt0XT1hLGkucHVzaCh7a2V5OnQscHJpb3JpdHk6ZX0pLHRoaXMuX2RlY3JlYXNlKGEpLCEwfXJldHVybiExfSxpLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgdD10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW3Qua2V5XSx0aGlzLl9oZWFwaWZ5KDApLHQua2V5fSxpLnByb3RvdHlwZS5kZWNyZWFzZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2tleUluZGljZXNbdF07aWYoZT50aGlzLl9hcnJbbl0ucHJpb3JpdHkpdGhyb3cgbmV3IEVycm9yKCJOZXcgcHJpb3JpdHkgaXMgZ3JlYXRlciB0aGFuIGN1cnJlbnQgcHJpb3JpdHkuIEtleTogIit0KyIgT2xkOiAiK3RoaXMuX2FycltuXS5wcmlvcml0eSsiIE5ldzogIitlKTt0aGlzLl9hcnJbbl0ucHJpb3JpdHk9ZSx0aGlzLl9kZWNyZWFzZShuKX0saS5wcm90b3R5cGUuX2hlYXBpZnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYXJyLG49Mip0LHI9bisxLGk9dDtuPGUubGVuZ3RoJiYoaT1lW25dLnByaW9yaXR5PGVbaV0ucHJpb3JpdHk/bjppLHI8ZS5sZW5ndGgmJihpPWVbcl0ucHJpb3JpdHk8ZVtpXS5wcmlvcml0eT9yOmkpLGkhPT10JiYodGhpcy5fc3dhcCh0LGkpLHRoaXMuX2hlYXBpZnkoaSkpKX0saS5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXRoaXMuX2FycixyPW5bdF0ucHJpb3JpdHk7MCE9PXQmJiEobltlPXQ+PjFdLnByaW9yaXR5PHIpOyl0aGlzLl9zd2FwKHQsZSksdD1lfSxpLnByb3RvdHlwZS5fc3dhcD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2FycixyPXRoaXMuX2tleUluZGljZXMsaT1uW3RdLGE9bltlXTtuW3RdPWEsbltlXT1pLHJbYS5rZXldPXQscltpLmtleV09ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9MCxuPVtdLGk9e30sYT1bXTtyZXR1cm4gdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKG8pe3IuaGFzKGksbyl8fGZ1bmN0aW9uIG8ocyl7dmFyIGM9aVtzXT17b25TdGFjazohMCxsb3dsaW5rOmUsaW5kZXg6ZSsrfTtpZihuLnB1c2gocyksdC5zdWNjZXNzb3JzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuaGFzKGksdCk/aVt0XS5vblN0YWNrJiYoYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmluZGV4KSk6KG8odCksYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmxvd2xpbmspKX0pKSxjLmxvd2xpbms9PT1jLmluZGV4KXt2YXIgdSxsPVtdO2Rve3U9bi5wb3AoKSxpW3VdLm9uU3RhY2s9ITEsbC5wdXNoKHUpfXdoaWxlKHMhPT11KTthLnB1c2gobCl9fShvKX0pKSxhfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMpO2Z1bmN0aW9uIGkodCl7dmFyIGU9e30sbj17fSxpPVtdO2lmKHIuZWFjaCh0LnNpbmtzKCksKGZ1bmN0aW9uIG8ocyl7aWYoci5oYXMobixzKSl0aHJvdyBuZXcgYTtyLmhhcyhlLHMpfHwobltzXT0hMCxlW3NdPSEwLHIuZWFjaCh0LnByZWRlY2Vzc29ycyhzKSxvKSxkZWxldGUgbltzXSxpLnB1c2gocykpfSkpLHIuc2l6ZShlKSE9PXQubm9kZUNvdW50KCkpdGhyb3cgbmV3IGE7cmV0dXJuIGl9ZnVuY3Rpb24gYSgpe310LmV4cG9ydHM9aSxpLkN5Y2xlRXhjZXB0aW9uPWEsYS5wcm90b3R5cGU9bmV3IEVycm9yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyLmlzQXJyYXkoZSl8fChlPVtlXSk7dmFyIGk9KHQuaXNEaXJlY3RlZCgpP3Quc3VjY2Vzc29yczp0Lm5laWdoYm9ycykuYmluZCh0KSxhPVtdLG89e307cmV0dXJuIHIuZWFjaChlLChmdW5jdGlvbihlKXtpZighdC5oYXNOb2RlKGUpKXRocm93IG5ldyBFcnJvcigiR3JhcGggZG9lcyBub3QgaGF2ZSBub2RlOiAiK2UpOyFmdW5jdGlvbiB0KGUsbixpLGEsbyxzKXtyLmhhcyhhLG4pfHwoYVtuXT0hMCxpfHxzLnB1c2gobiksci5lYWNoKG8obiksKGZ1bmN0aW9uKG4pe3QoZSxuLGksYSxvLHMpfSkpLGkmJnMucHVzaChuKSl9KHQsZSwicG9zdCI9PT1uLG8saSxhKX0pKSxhfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPW4oMTApfWNhdGNoKHQpe31yfHwocj13aW5kb3cuZGFncmUpLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2OSksaT1uKDM4KSxhPW4oNzApLG89bigzNSkscz1PYmplY3QucHJvdG90eXBlLGM9cy5oYXNPd25Qcm9wZXJ0eSx1PXIoKGZ1bmN0aW9uKHQsZSl7dD1PYmplY3QodCk7dmFyIG49LTEscj1lLmxlbmd0aCx1PXI+Mj9lWzJdOnZvaWQgMDtmb3IodSYmYShlWzBdLGVbMV0sdSkmJihyPTEpOysrbjxyOylmb3IodmFyIGw9ZVtuXSxoPW8obCksZj0tMSxkPWgubGVuZ3RoOysrZjxkOyl7dmFyIHA9aFtmXSx5PXRbcF07KHZvaWQgMD09PXl8fGkoeSxzW3BdKSYmIWMuY2FsbCh0LHApKSYmKHRbcF09bFtwXSl9cmV0dXJuIHR9KSk7dC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0Pyh0PXIodCkpPT09MS8wfHx0PT09LTEvMD8xNzk3NjkzMTM0ODYyMzE1N2UyOTIqKHQ8MD8tMToxKTp0PT10P3Q6MDowPT09dD90OjB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybihudWxsPT10PzA6dC5sZW5ndGgpP3IodCwxKTpbXX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYwKSxpPW4oMzgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7KHZvaWQgMCE9PW4mJiFpKHRbZV0sbil8fHZvaWQgMD09PW4mJiEoZSBpbiB0KSkmJnIodCxlLG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQpLGk9big2NCksYT1uKDIxKSxvPUZ1bmN0aW9uLnByb3RvdHlwZSxzPU9iamVjdC5wcm90b3R5cGUsYz1vLnRvU3RyaW5nLHU9cy5oYXNPd25Qcm9wZXJ0eSxsPWMuY2FsbChPYmplY3QpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighYSh0KXx8IltvYmplY3QgT2JqZWN0XSIhPXIodCkpcmV0dXJuITE7dmFyIGU9aSh0KTtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgbj11LmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJmMuY2FsbChuKT09bH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoKCJjb25zdHJ1Y3RvciIhPT1lfHwiZnVuY3Rpb24iIT10eXBlb2YgdFtlXSkmJiJfX3Byb3RvX18iIT1lKXJldHVybiB0W2VdfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzM5KSxpPW4oMzQyKSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD97fTpyKHQsZSl9KSk7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0MykoKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTM1KSxpPTA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSsraTtyZXR1cm4gcih0KStlfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigyMCkuR3JhcGgsYT1uKDcxKS5zbGFjaztmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uIG4oaSl7ci5mb3JFYWNoKGUubm9kZUVkZ2VzKGkpLChmdW5jdGlvbihyKXt2YXIgbz1yLnYscz1pPT09bz9yLnc6bzt0Lmhhc05vZGUocyl8fGEoZSxyKXx8KHQuc2V0Tm9kZShzLHt9KSx0LnNldEVkZ2UoaSxzLHt9KSxuKHMpKX0pKX0pKSx0Lm5vZGVDb3VudCgpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gci5taW5CeShlLmVkZ2VzKCksKGZ1bmN0aW9uKG4pe2lmKHQuaGFzTm9kZShuLnYpIT09dC5oYXNOb2RlKG4udykpcmV0dXJuIGEoZSxuKX0pKX1mdW5jdGlvbiBjKHQsZSxuKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtlLm5vZGUodCkucmFuays9bn0pKX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbixyPW5ldyBpKHtkaXJlY3RlZDohMX0pLHU9dC5ub2RlcygpWzBdLGw9dC5ub2RlQ291bnQoKTtyLnNldE5vZGUodSx7fSk7Zm9yKDtvKHIsdCk8bDspZT1zKHIsdCksbj1yLmhhc05vZGUoZS52KT9hKHQsZSk6LWEodCxlKSxjKHIsdCxuKTtyZXR1cm4gcn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIodCxlLGUsbil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC54LGE9dC55LG89W10scz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtzPU1hdGgubWluKHMsdC54KSxjPU1hdGgubWluKGMsdC55KX0pKTtmb3IodmFyIHU9aS10LndpZHRoLzItcyxsPWEtdC5oZWlnaHQvMi1jLGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGY9ZVtoXSxkPWVbaDxlLmxlbmd0aC0xP2grMTowXSxwPXIodCxuLHt4OnUrZi54LHk6bCtmLnl9LHt4OnUrZC54LHk6bCtkLnl9KTtwJiZvLnB1c2gocCl9aWYoIW8ubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiTk8gSU5URVJTRUNUSU9OIEZPVU5ELCBSRVRVUk4gTk9ERSBDRU5URVIiLHQpLHQ7by5sZW5ndGg+MSYmby5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1uLngsaT10Lnktbi55LGE9TWF0aC5zcXJ0KHIqcitpKmkpLG89ZS54LW4ueCxzPWUueS1uLnksYz1NYXRoLnNxcnQobypvK3Mqcyk7cmV0dXJuIGE8Yz8tMTphPT09Yz8wOjF9KSk7cmV0dXJuIG9bMF19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49MD09PXM/MDp1Km8vcyxyPXUpOihvPDAmJihjPS1jKSxuPWMscj0wPT09bz8wOmMqcy9vKTtyZXR1cm57eDppK24seTphK3J9fX0sZnVuY3Rpb24odCxlLG4pewovKiEgQGxpY2Vuc2UgRE9NUHVyaWZ5IDIuMy4xIHwgKGMpIEN1cmU1MyBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwgUmVsZWFzZWQgdW5kZXIgdGhlIEFwYWNoZSBsaWNlbnNlIDIuMCBhbmQgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAyLjAgfCBnaXRodWIuY29tL2N1cmU1My9ET01QdXJpZnkvYmxvYi8yLjMuMS9MSUNFTlNFICovCnQuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1PYmplY3QuaGFzT3duUHJvcGVydHksZT1PYmplY3Quc2V0UHJvdG90eXBlT2Ysbj1PYmplY3QuaXNGcm96ZW4scj1PYmplY3QuZ2V0UHJvdG90eXBlT2YsaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGE9T2JqZWN0LmZyZWV6ZSxvPU9iamVjdC5zZWFsLHM9T2JqZWN0LmNyZWF0ZSxjPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdCx1PWMuYXBwbHksbD1jLmNvbnN0cnVjdDt1fHwodT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYXBwbHkoZSxuKX0pLGF8fChhPWZ1bmN0aW9uKHQpe3JldHVybiB0fSksb3x8KG89ZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxsfHwobD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkodCxbbnVsbF0uY29uY2F0KGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49QXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn1yZXR1cm4gQXJyYXkuZnJvbSh0KX0oZSkpKSl9KTt2YXIgaCxmPWsoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLGQ9ayhBcnJheS5wcm90b3R5cGUucG9wKSxwPWsoQXJyYXkucHJvdG90eXBlLnB1c2gpLHk9ayhTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSxnPWsoU3RyaW5nLnByb3RvdHlwZS5tYXRjaCksbT1rKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksdj1rKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksYj1rKFN0cmluZy5wcm90b3R5cGUudHJpbSkseD1rKFJlZ0V4cC5wcm90b3R5cGUudGVzdCksXz0oaD1UeXBlRXJyb3IsZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPUFycmF5KHQpLG49MDtuPHQ7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiBsKGgsZSl9KTtmdW5jdGlvbiBrKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTtyZXR1cm4gdSh0LGUscil9fWZ1bmN0aW9uIHcodCxyKXtlJiZlKHQsbnVsbCk7Zm9yKHZhciBpPXIubGVuZ3RoO2ktLTspe3ZhciBhPXJbaV07aWYoInN0cmluZyI9PXR5cGVvZiBhKXt2YXIgbz15KGEpO28hPT1hJiYobihyKXx8KHJbaV09byksYT1vKX10W2FdPSEwfXJldHVybiB0fWZ1bmN0aW9uIFQoZSl7dmFyIG49cyhudWxsKSxyPXZvaWQgMDtmb3IociBpbiBlKXUodCxlLFtyXSkmJihuW3JdPWVbcl0pO3JldHVybiBufWZ1bmN0aW9uIEUodCxlKXtmb3IoO251bGwhPT10Oyl7dmFyIG49aSh0LGUpO2lmKG4pe2lmKG4uZ2V0KXJldHVybiBrKG4uZ2V0KTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbi52YWx1ZSlyZXR1cm4gayhuLnZhbHVlKX10PXIodCl9cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oImZhbGxiYWNrIHZhbHVlIGZvciIsdCksbnVsbH19dmFyIEM9YShbImEiLCJhYmJyIiwiYWNyb255bSIsImFkZHJlc3MiLCJhcmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxpbmsiLCJibG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNlbnRlciIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAiLCJjb250ZW50IiwiZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJkZWNvcmF0b3IiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImVsZW1lbnQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJtYWluIiwibWFwIiwibWFyayIsIm1hcnF1ZWUiLCJtZW51IiwibWVudWl0ZW0iLCJtZXRlciIsIm5hdiIsIm5vYnIiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBpY3R1cmUiLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0IiwicnVieSIsInMiLCJzYW1wIiwic2VjdGlvbiIsInNlbGVjdCIsInNoYWRvdyIsInNtYWxsIiwic291cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiXSksUz1hKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2VybiJdKSxBPWEoWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxNPWEoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmZWRyb3BzaGFkb3ciLCJmZWltYWdlIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxPPWEoWyJtYXRoIiwibWVuY2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJtZ2x5cGgiLCJtaSIsIm1sYWJlbGVkdHIiLCJtbXVsdGlzY3JpcHRzIiwibW4iLCJtbyIsIm1vdmVyIiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93IiwibXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1zdWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIsIm10ZXh0IiwibXRyIiwibXVuZGVyIiwibXVuZGVyb3ZlciJdKSxOPWEoWyJtYWN0aW9uIiwibWFsaWduZ3JvdXAiLCJtYWxpZ25tYXJrIiwibWxvbmdkaXYiLCJtc2NhcnJpZXMiLCJtc2NhcnJ5IiwibXNncm91cCIsIm1zdGFjayIsIm1zbGluZSIsIm1zcm93Iiwic2VtYW50aWNzIiwiYW5ub3RhdGlvbiIsImFubm90YXRpb24teG1sIiwibXByZXNjcmlwdHMiLCJub25lIl0pLEI9YShbIiN0ZXh0Il0pLEQ9YShbImFjY2VwdCIsImFjdGlvbiIsImFsaWduIiwiYWx0IiwiYXV0b2NhcGl0YWxpemUiLCJhdXRvY29tcGxldGUiLCJhdXRvcGljdHVyZWlucGljdHVyZSIsImF1dG9wbGF5IiwiYmFja2dyb3VuZCIsImJnY29sb3IiLCJib3JkZXIiLCJjYXB0dXJlIiwiY2VsbHBhZGRpbmciLCJjZWxsc3BhY2luZyIsImNoZWNrZWQiLCJjaXRlIiwiY2xhc3MiLCJjbGVhciIsImNvbG9yIiwiY29scyIsImNvbHNwYW4iLCJjb250cm9scyIsImNvbnRyb2xzbGlzdCIsImNvb3JkcyIsImNyb3Nzb3JpZ2luIiwiZGF0ZXRpbWUiLCJkZWNvZGluZyIsImRlZmF1bHQiLCJkaXIiLCJkaXNhYmxlZCIsImRpc2FibGVwaWN0dXJlaW5waWN0dXJlIiwiZGlzYWJsZXJlbW90ZXBsYXliYWNrIiwiZG93bmxvYWQiLCJkcmFnZ2FibGUiLCJlbmN0eXBlIiwiZW50ZXJrZXloaW50IiwiZmFjZSIsImZvciIsImhlYWRlcnMiLCJoZWlnaHQiLCJoaWRkZW4iLCJoaWdoIiwiaHJlZiIsImhyZWZsYW5nIiwiaWQiLCJpbnB1dG1vZGUiLCJpbnRlZ3JpdHkiLCJpc21hcCIsImtpbmQiLCJsYWJlbCIsImxhbmciLCJsaXN0IiwibG9hZGluZyIsImxvb3AiLCJsb3ciLCJtYXgiLCJtYXhsZW5ndGgiLCJtZWRpYSIsIm1ldGhvZCIsIm1pbiIsIm1pbmxlbmd0aCIsIm11bHRpcGxlIiwibXV0ZWQiLCJuYW1lIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwieG1sbnMiLCJzbG90Il0pLEw9YShbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzcGVjdWxhcmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIsInNwcmVhZG1ldGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9uIiwic3RpdGNodGlsZXMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIiwic3R5bGUiLCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0ZXh0LWFuY2hvciIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtcmVuZGVyaW5nIiwidGV4dGxlbmd0aCIsInR5cGUiLCJ1MSIsInUyIiwidW5pY29kZSIsInZhbHVlcyIsInZpZXdib3giLCJ2aXNpYmlsaXR5IiwidmVyc2lvbiIsInZlcnQtYWR2LXkiLCJ2ZXJ0LW9yaWdpbi14IiwidmVydC1vcmlnaW4teSIsIndpZHRoIiwid29yZC1zcGFjaW5nIiwid3JhcCIsIndyaXRpbmctbW9kZSIsInhjaGFubmVsc2VsZWN0b3IiLCJ5Y2hhbm5lbHNlbGVjdG9yIiwieCIsIngxIiwieDIiLCJ4bWxucyIsInkiLCJ5MSIsInkyIiwieiIsInpvb21hbmRwYW4iXSksST1hKFsiYWNjZW50IiwiYWNjZW50dW5kZXIiLCJhbGlnbiIsImJldmVsbGVkIiwiY2xvc2UiLCJjb2x1bW5zYWxpZ24iLCJjb2x1bW5saW5lcyIsImNvbHVtbnNwYW4iLCJkZW5vbWFsaWduIiwiZGVwdGgiLCJkaXIiLCJkaXNwbGF5IiwiZGlzcGxheXN0eWxlIiwiZW5jb2RpbmciLCJmZW5jZSIsImZyYW1lIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwibGFyZ2VvcCIsImxlbmd0aCIsImxpbmV0aGlja25lc3MiLCJsc3BhY2UiLCJscXVvdGUiLCJtYXRoYmFja2dyb3VuZCIsIm1hdGhjb2xvciIsIm1hdGhzaXplIiwibWF0aHZhcmlhbnQiLCJtYXhzaXplIiwibWluc2l6ZSIsIm1vdmFibGVsaW1pdHMiLCJub3RhdGlvbiIsIm51bWFsaWduIiwib3BlbiIsInJvd2FsaWduIiwicm93bGluZXMiLCJyb3dzcGFjaW5nIiwicm93c3BhbiIsInJzcGFjZSIsInJxdW90ZSIsInNjcmlwdGxldmVsIiwic2NyaXB0bWluc2l6ZSIsInNjcmlwdHNpemVtdWx0aXBsaWVyIiwic2VsZWN0aW9uIiwic2VwYXJhdG9yIiwic2VwYXJhdG9ycyIsInN0cmV0Y2h5Iiwic3Vic2NyaXB0c2hpZnQiLCJzdXBzY3JpcHRzaGlmdCIsInN5bW1ldHJpYyIsInZvZmZzZXQiLCJ3aWR0aCIsInhtbG5zIl0pLFI9YShbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLEY9bygvXHtce1tcc1xTXSp8W1xzXFNdKlx9XH0vZ20pLFA9bygvPCVbXHNcU10qfFtcc1xTXSolPi9nbSksaj1vKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXS8pLFk9bygvXmFyaWEtW1wtXHddKyQvKSx6PW8oL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98Y2lkfHhtcHApOnxbXmEtel18W2EteisuXC1dKyg/OlteYS16Ky5cLTpdfCQpKS9pKSxVPW8oL14oPzpcdytzY3JpcHR8ZGF0YSk6L2kpLCQ9bygvW1x1MDAwMC1cdTAwMjBcdTAwQTBcdTE2ODBcdTE4MEVcdTIwMDAtXHUyMDI5XHUyMDVGXHUzMDAwXS9nKSxxPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fTtmdW5jdGlvbiBXKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49QXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn1yZXR1cm4gQXJyYXkuZnJvbSh0KX12YXIgSD1mdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P251bGw6d2luZG93fSxWPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjpxKHQpKXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQuY3JlYXRlUG9saWN5KXJldHVybiBudWxsO3ZhciBuPW51bGw7ZS5jdXJyZW50U2NyaXB0JiZlLmN1cnJlbnRTY3JpcHQuaGFzQXR0cmlidXRlKCJkYXRhLXR0LXBvbGljeS1zdWZmaXgiKSYmKG49ZS5jdXJyZW50U2NyaXB0LmdldEF0dHJpYnV0ZSgiZGF0YS10dC1wb2xpY3ktc3VmZml4IikpO3ZhciByPSJkb21wdXJpZnkiKyhuPyIjIituOiIiKTt0cnl7cmV0dXJuIHQuY3JlYXRlUG9saWN5KHIse2NyZWF0ZUhUTUw6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSl9Y2F0Y2godCl7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK3IrIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxsfX07cmV0dXJuIGZ1bmN0aW9uIHQoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06SCgpLG49ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSl9O2lmKG4udmVyc2lvbj0iMi4zLjEiLG4ucmVtb3ZlZD1bXSwhZXx8IWUuZG9jdW1lbnR8fDkhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBuLmlzU3VwcG9ydGVkPSExLG47dmFyIHI9ZS5kb2N1bWVudCxpPWUuZG9jdW1lbnQsbz1lLkRvY3VtZW50RnJhZ21lbnQscz1lLkhUTUxUZW1wbGF0ZUVsZW1lbnQsYz1lLk5vZGUsdT1lLkVsZW1lbnQsbD1lLk5vZGVGaWx0ZXIsaD1lLk5hbWVkTm9kZU1hcCxrPXZvaWQgMD09PWg/ZS5OYW1lZE5vZGVNYXB8fGUuTW96TmFtZWRBdHRyTWFwOmgsRz1lLlRleHQsWD1lLkNvbW1lbnQsWj1lLkRPTVBhcnNlcixLPWUudHJ1c3RlZFR5cGVzLFE9dS5wcm90b3R5cGUsSj1FKFEsImNsb25lTm9kZSIpLHR0PUUoUSwibmV4dFNpYmxpbmciKSxldD1FKFEsImNoaWxkTm9kZXMiKSxudD1FKFEsInBhcmVudE5vZGUiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcyl7dmFyIHJ0PWkuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtydC5jb250ZW50JiZydC5jb250ZW50Lm93bmVyRG9jdW1lbnQmJihpPXJ0LmNvbnRlbnQub3duZXJEb2N1bWVudCl9dmFyIGl0PVYoSyxyKSxhdD1pdCYmRnQ/aXQuY3JlYXRlSFRNTCgiIik6IiIsb3Q9aSxzdD1vdC5pbXBsZW1lbnRhdGlvbixjdD1vdC5jcmVhdGVOb2RlSXRlcmF0b3IsdXQ9b3QuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxsdD1vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSxodD1yLmltcG9ydE5vZGUsZnQ9e307dHJ5e2Z0PVQoaSkuZG9jdW1lbnRNb2RlP2kuZG9jdW1lbnRNb2RlOnt9fWNhdGNoKHQpe312YXIgZHQ9e307bi5pc1N1cHBvcnRlZD0iZnVuY3Rpb24iPT10eXBlb2YgbnQmJnN0JiZ2b2lkIDAhPT1zdC5jcmVhdGVIVE1MRG9jdW1lbnQmJjkhPT1mdDt2YXIgcHQ9Rix5dD1QLGd0PWosbXQ9WSx2dD1VLGJ0PSQseHQ9eixfdD1udWxsLGt0PXcoe30sW10uY29uY2F0KFcoQyksVyhTKSxXKEEpLFcoTyksVyhCKSkpLHd0PW51bGwsVHQ9dyh7fSxbXS5jb25jYXQoVyhEKSxXKEwpLFcoSSksVyhSKSkpLEV0PW51bGwsQ3Q9bnVsbCxTdD0hMCxBdD0hMCxNdD0hMSxPdD0hMSxOdD0hMSxCdD0hMSxEdD0hMSxMdD0hMSxJdD0hMSxSdD0hMCxGdD0hMSxQdD0hMCxqdD0hMCxZdD0hMSx6dD17fSxVdD1udWxsLCR0PXcoe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKSxxdD1udWxsLFd0PXcoe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKSxIdD1udWxsLFZ0PXcoe30sWyJhbHQiLCJjbGFzcyIsImZvciIsImlkIiwibGFiZWwiLCJuYW1lIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicm9sZSIsInN1bW1hcnkiLCJ0aXRsZSIsInZhbHVlIiwic3R5bGUiLCJ4bWxucyJdKSxHdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsWHQ9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixadD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsS3Q9WnQsUXQ9ITEsSnQ9bnVsbCx0ZT1pLmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxlZT1mdW5jdGlvbih0KXtKdCYmSnQ9PT10fHwodCYmIm9iamVjdCI9PT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjpxKHQpKXx8KHQ9e30pLHQ9VCh0KSxfdD0iQUxMT1dFRF9UQUdTImluIHQ/dyh7fSx0LkFMTE9XRURfVEFHUyk6a3Qsd3Q9IkFMTE9XRURfQVRUUiJpbiB0P3coe30sdC5BTExPV0VEX0FUVFIpOlR0LEh0PSJBRERfVVJJX1NBRkVfQVRUUiJpbiB0P3coVChWdCksdC5BRERfVVJJX1NBRkVfQVRUUik6VnQscXQ9IkFERF9EQVRBX1VSSV9UQUdTImluIHQ/dyhUKFd0KSx0LkFERF9EQVRBX1VSSV9UQUdTKTpXdCxVdD0iRk9SQklEX0NPTlRFTlRTImluIHQ/dyh7fSx0LkZPUkJJRF9DT05URU5UUyk6JHQsRXQ9IkZPUkJJRF9UQUdTImluIHQ/dyh7fSx0LkZPUkJJRF9UQUdTKTp7fSxDdD0iRk9SQklEX0FUVFIiaW4gdD93KHt9LHQuRk9SQklEX0FUVFIpOnt9LHp0PSJVU0VfUFJPRklMRVMiaW4gdCYmdC5VU0VfUFJPRklMRVMsU3Q9ITEhPT10LkFMTE9XX0FSSUFfQVRUUixBdD0hMSE9PXQuQUxMT1dfREFUQV9BVFRSLE10PXQuQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCExLE90PXQuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxOdD10LldIT0xFX0RPQ1VNRU5UfHwhMSxMdD10LlJFVFVSTl9ET018fCExLEl0PXQuUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsUnQ9ITEhPT10LlJFVFVSTl9ET01fSU1QT1JULEZ0PXQuUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsRHQ9dC5GT1JDRV9CT0RZfHwhMSxQdD0hMSE9PXQuU0FOSVRJWkVfRE9NLGp0PSExIT09dC5LRUVQX0NPTlRFTlQsWXQ9dC5JTl9QTEFDRXx8ITEseHQ9dC5BTExPV0VEX1VSSV9SRUdFWFB8fHh0LEt0PXQuTkFNRVNQQUNFfHxadCxPdCYmKEF0PSExKSxJdCYmKEx0PSEwKSx6dCYmKF90PXcoe30sW10uY29uY2F0KFcoQikpKSx3dD1bXSwhMD09PXp0Lmh0bWwmJih3KF90LEMpLHcod3QsRCkpLCEwPT09enQuc3ZnJiYodyhfdCxTKSx3KHd0LEwpLHcod3QsUikpLCEwPT09enQuc3ZnRmlsdGVycyYmKHcoX3QsQSksdyh3dCxMKSx3KHd0LFIpKSwhMD09PXp0Lm1hdGhNbCYmKHcoX3QsTyksdyh3dCxJKSx3KHd0LFIpKSksdC5BRERfVEFHUyYmKF90PT09a3QmJihfdD1UKF90KSksdyhfdCx0LkFERF9UQUdTKSksdC5BRERfQVRUUiYmKHd0PT09VHQmJih3dD1UKHd0KSksdyh3dCx0LkFERF9BVFRSKSksdC5BRERfVVJJX1NBRkVfQVRUUiYmdyhIdCx0LkFERF9VUklfU0FGRV9BVFRSKSx0LkZPUkJJRF9DT05URU5UUyYmKFV0PT09JHQmJihVdD1UKFV0KSksdyhVdCx0LkZPUkJJRF9DT05URU5UUykpLGp0JiYoX3RbIiN0ZXh0Il09ITApLE50JiZ3KF90LFsiaHRtbCIsImhlYWQiLCJib2R5Il0pLF90LnRhYmxlJiYodyhfdCxbInRib2R5Il0pLGRlbGV0ZSBFdC50Ym9keSksYSYmYSh0KSxKdD10KX0sbmU9dyh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSkscmU9dyh7fSxbImZvcmVpZ25vYmplY3QiLCJkZXNjIiwidGl0bGUiLCJhbm5vdGF0aW9uLXhtbCJdKSxpZT13KHt9LFMpO3coaWUsQSksdyhpZSxNKTt2YXIgYWU9dyh7fSxPKTt3KGFlLE4pO3ZhciBvZT1mdW5jdGlvbih0KXt2YXIgZT1udCh0KTtlJiZlLnRhZ05hbWV8fChlPXtuYW1lc3BhY2VVUkk6WnQsdGFnTmFtZToidGVtcGxhdGUifSk7dmFyIG49eSh0LnRhZ05hbWUpLHI9eShlLnRhZ05hbWUpO2lmKHQubmFtZXNwYWNlVVJJPT09WHQpcmV0dXJuIGUubmFtZXNwYWNlVVJJPT09WnQ/InN2ZyI9PT1uOmUubmFtZXNwYWNlVVJJPT09R3Q/InN2ZyI9PT1uJiYoImFubm90YXRpb24teG1sIj09PXJ8fG5lW3JdKTpCb29sZWFuKGllW25dKTtpZih0Lm5hbWVzcGFjZVVSST09PUd0KXJldHVybiBlLm5hbWVzcGFjZVVSST09PVp0PyJtYXRoIj09PW46ZS5uYW1lc3BhY2VVUkk9PT1YdD8ibWF0aCI9PT1uJiZyZVtyXTpCb29sZWFuKGFlW25dKTtpZih0Lm5hbWVzcGFjZVVSST09PVp0KXtpZihlLm5hbWVzcGFjZVVSST09PVh0JiYhcmVbcl0pcmV0dXJuITE7aWYoZS5uYW1lc3BhY2VVUkk9PT1HdCYmIW5lW3JdKXJldHVybiExO3ZhciBpPXcoe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSk7cmV0dXJuIWFlW25dJiYoaVtuXXx8IWllW25dKX1yZXR1cm4hMX0sc2U9ZnVuY3Rpb24odCl7cChuLnJlbW92ZWQse2VsZW1lbnQ6dH0pO3RyeXt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9Y2F0Y2goZSl7dHJ5e3Qub3V0ZXJIVE1MPWF0fWNhdGNoKGUpe3QucmVtb3ZlKCl9fX0sY2U9ZnVuY3Rpb24odCxlKXt0cnl7cChuLnJlbW92ZWQse2F0dHJpYnV0ZTplLmdldEF0dHJpYnV0ZU5vZGUodCksZnJvbTplfSl9Y2F0Y2godCl7cChuLnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206ZX0pfWlmKGUucmVtb3ZlQXR0cmlidXRlKHQpLCJpcyI9PT10JiYhd3RbdF0paWYoTHR8fEl0KXRyeXtzZShlKX1jYXRjaCh0KXt9ZWxzZSB0cnl7ZS5zZXRBdHRyaWJ1dGUodCwiIil9Y2F0Y2godCl7fX0sdWU9ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwLG49dm9pZCAwO2lmKER0KXQ9IjxyZW1vdmU+PC9yZW1vdmU+Iit0O2Vsc2V7dmFyIHI9Zyh0LC9eW1xyXG5cdCBdKy8pO249ciYmclswXX12YXIgYT1pdD9pdC5jcmVhdGVIVE1MKHQpOnQ7aWYoS3Q9PT1adCl0cnl7ZT0obmV3IFopLnBhcnNlRnJvbVN0cmluZyhhLCJ0ZXh0L2h0bWwiKX1jYXRjaCh0KXt9aWYoIWV8fCFlLmRvY3VtZW50RWxlbWVudCl7ZT1zdC5jcmVhdGVEb2N1bWVudChLdCwidGVtcGxhdGUiLG51bGwpO3RyeXtlLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9UXQ/IiI6YX1jYXRjaCh0KXt9fXZhciBvPWUuYm9keXx8ZS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHQmJm4mJm8uaW5zZXJ0QmVmb3JlKGkuY3JlYXRlVGV4dE5vZGUobiksby5jaGlsZE5vZGVzWzBdfHxudWxsKSxLdD09PVp0P2x0LmNhbGwoZSxOdD8iaHRtbCI6ImJvZHkiKVswXTpOdD9lLmRvY3VtZW50RWxlbWVudDpvfSxsZT1mdW5jdGlvbih0KXtyZXR1cm4gY3QuY2FsbCh0Lm93bmVyRG9jdW1lbnR8fHQsdCxsLlNIT1dfRUxFTUVOVHxsLlNIT1dfQ09NTUVOVHxsLlNIT1dfVEVYVCxudWxsLCExKX0saGU9ZnVuY3Rpb24odCl7cmV0dXJuISh0IGluc3RhbmNlb2YgR3x8dCBpbnN0YW5jZW9mIFh8fCJzdHJpbmciPT10eXBlb2YgdC5ub2RlTmFtZSYmInN0cmluZyI9PXR5cGVvZiB0LnRleHRDb250ZW50JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZW1vdmVDaGlsZCYmdC5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgayYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVtb3ZlQXR0cmlidXRlJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zZXRBdHRyaWJ1dGUmJiJzdHJpbmciPT10eXBlb2YgdC5uYW1lc3BhY2VVUkkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lmluc2VydEJlZm9yZSl9LGZlPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT09KHZvaWQgMD09PWM/InVuZGVmaW5lZCI6cShjKSk/dCBpbnN0YW5jZW9mIGM6dCYmIm9iamVjdCI9PT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjpxKHQpKSYmIm51bWJlciI9PXR5cGVvZiB0Lm5vZGVUeXBlJiYic3RyaW5nIj09dHlwZW9mIHQubm9kZU5hbWV9LGRlPWZ1bmN0aW9uKHQsZSxyKXtkdFt0XSYmZihkdFt0XSwoZnVuY3Rpb24odCl7dC5jYWxsKG4sZSxyLEp0KX0pKX0scGU9ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwO2lmKGRlKCJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIix0LG51bGwpLGhlKHQpKXJldHVybiBzZSh0KSwhMDtpZihnKHQubm9kZU5hbWUsL1tcdTAwODAtXHVGRkZGXS8pKXJldHVybiBzZSh0KSwhMDt2YXIgcj15KHQubm9kZU5hbWUpO2lmKGRlKCJ1cG9uU2FuaXRpemVFbGVtZW50Iix0LHt0YWdOYW1lOnIsYWxsb3dlZFRhZ3M6X3R9KSwhZmUodC5maXJzdEVsZW1lbnRDaGlsZCkmJighZmUodC5jb250ZW50KXx8IWZlKHQuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZCkpJiZ4KC88Wy9cd10vZyx0LmlubmVySFRNTCkmJngoLzxbL1x3XS9nLHQudGV4dENvbnRlbnQpKXJldHVybiBzZSh0KSwhMDtpZigic2VsZWN0Ij09PXImJngoLzx0ZW1wbGF0ZS9pLHQuaW5uZXJIVE1MKSlyZXR1cm4gc2UodCksITA7aWYoIV90W3JdfHxFdFtyXSl7aWYoanQmJiFVdFtyXSl7dmFyIGk9bnQodCl8fHQucGFyZW50Tm9kZSxhPWV0KHQpfHx0LmNoaWxkTm9kZXM7aWYoYSYmaSlmb3IodmFyIG89YS5sZW5ndGgtMTtvPj0wOy0tbylpLmluc2VydEJlZm9yZShKKGFbb10sITApLHR0KHQpKX1yZXR1cm4gc2UodCksITB9cmV0dXJuIHQgaW5zdGFuY2VvZiB1JiYhb2UodCk/KHNlKHQpLCEwKToibm9zY3JpcHQiIT09ciYmIm5vZW1iZWQiIT09cnx8IXgoLzxcL25vKHNjcmlwdHxlbWJlZCkvaSx0LmlubmVySFRNTCk/KE90JiYzPT09dC5ub2RlVHlwZSYmKGU9dC50ZXh0Q29udGVudCxlPW0oZSxwdCwiICIpLGU9bShlLHl0LCIgIiksdC50ZXh0Q29udGVudCE9PWUmJihwKG4ucmVtb3ZlZCx7ZWxlbWVudDp0LmNsb25lTm9kZSgpfSksdC50ZXh0Q29udGVudD1lKSksZGUoImFmdGVyU2FuaXRpemVFbGVtZW50cyIsdCxudWxsKSwhMSk6KHNlKHQpLCEwKX0seWU9ZnVuY3Rpb24odCxlLG4pe2lmKFB0JiYoImlkIj09PWV8fCJuYW1lIj09PWUpJiYobiBpbiBpfHxuIGluIHRlKSlyZXR1cm4hMTtpZihBdCYmIUN0W2VdJiZ4KGd0LGUpKTtlbHNlIGlmKFN0JiZ4KG10LGUpKTtlbHNle2lmKCF3dFtlXXx8Q3RbZV0pcmV0dXJuITE7aWYoSHRbZV0pO2Vsc2UgaWYoeCh4dCxtKG4sYnQsIiIpKSk7ZWxzZSBpZigic3JjIiE9PWUmJiJ4bGluazpocmVmIiE9PWUmJiJocmVmIiE9PWV8fCJzY3JpcHQiPT09dHx8MCE9PXYobiwiZGF0YToiKXx8IXF0W3RdKWlmKE10JiYheCh2dCxtKG4sYnQsIiIpKSk7ZWxzZSBpZihuKXJldHVybiExfXJldHVybiEwfSxnZT1mdW5jdGlvbih0KXt2YXIgZT12b2lkIDAscj12b2lkIDAsaT12b2lkIDAsYT12b2lkIDA7ZGUoImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsdCxudWxsKTt2YXIgbz10LmF0dHJpYnV0ZXM7aWYobyl7dmFyIHM9e2F0dHJOYW1lOiIiLGF0dHJWYWx1ZToiIixrZWVwQXR0cjohMCxhbGxvd2VkQXR0cmlidXRlczp3dH07Zm9yKGE9by5sZW5ndGg7YS0tOyl7dmFyIGM9ZT1vW2FdLHU9Yy5uYW1lLGw9Yy5uYW1lc3BhY2VVUkk7aWYocj1iKGUudmFsdWUpLGk9eSh1KSxzLmF0dHJOYW1lPWkscy5hdHRyVmFsdWU9cixzLmtlZXBBdHRyPSEwLHMuZm9yY2VLZWVwQXR0cj12b2lkIDAsZGUoInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsdCxzKSxyPXMuYXR0clZhbHVlLCFzLmZvcmNlS2VlcEF0dHImJihjZSh1LHQpLHMua2VlcEF0dHIpKWlmKHgoL1wvPi9pLHIpKWNlKHUsdCk7ZWxzZXtPdCYmKHI9bShyLHB0LCIgIikscj1tKHIseXQsIiAiKSk7dmFyIGg9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHllKGgsaSxyKSl0cnl7bD90LnNldEF0dHJpYnV0ZU5TKGwsdSxyKTp0LnNldEF0dHJpYnV0ZSh1LHIpLGQobi5yZW1vdmVkKX1jYXRjaCh0KXt9fX1kZSgiYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMiLHQsbnVsbCl9fSxtZT1mdW5jdGlvbiB0KGUpe3ZhciBuPXZvaWQgMCxyPWxlKGUpO2ZvcihkZSgiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLGUsbnVsbCk7bj1yLm5leHROb2RlKCk7KWRlKCJ1cG9uU2FuaXRpemVTaGFkb3dOb2RlIixuLG51bGwpLHBlKG4pfHwobi5jb250ZW50IGluc3RhbmNlb2YgbyYmdChuLmNvbnRlbnQpLGdlKG4pKTtkZSgiYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSIsZSxudWxsKX07cmV0dXJuIG4uc2FuaXRpemU9ZnVuY3Rpb24odCxpKXt2YXIgYT12b2lkIDAscz12b2lkIDAsdT12b2lkIDAsbD12b2lkIDAsaD12b2lkIDA7aWYoKFF0PSF0KSYmKHQ9Ilx4M2MhLS1ceDNlIiksInN0cmluZyIhPXR5cGVvZiB0JiYhZmUodCkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0LnRvU3RyaW5nKXRocm93IF8oInRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoInN0cmluZyIhPXR5cGVvZih0PXQudG9TdHJpbmcoKSkpdGhyb3cgXygiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWlmKCFuLmlzU3VwcG9ydGVkKXtpZigib2JqZWN0Ij09PXEoZS50b1N0YXRpY0hUTUwpfHwiZnVuY3Rpb24iPT10eXBlb2YgZS50b1N0YXRpY0hUTUwpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZS50b1N0YXRpY0hUTUwodCk7aWYoZmUodCkpcmV0dXJuIGUudG9TdGF0aWNIVE1MKHQub3V0ZXJIVE1MKX1yZXR1cm4gdH1pZihCdHx8ZWUoaSksbi5yZW1vdmVkPVtdLCJzdHJpbmciPT10eXBlb2YgdCYmKFl0PSExKSxZdCk7ZWxzZSBpZih0IGluc3RhbmNlb2YgYykxPT09KHM9KGE9dWUoIlx4M2MhLS0tLVx4M2UiKSkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKHQsITApKS5ub2RlVHlwZSYmIkJPRFkiPT09cy5ub2RlTmFtZXx8IkhUTUwiPT09cy5ub2RlTmFtZT9hPXM6YS5hcHBlbmRDaGlsZChzKTtlbHNle2lmKCFMdCYmIU90JiYhTnQmJi0xPT09dC5pbmRleE9mKCI8IikpcmV0dXJuIGl0JiZGdD9pdC5jcmVhdGVIVE1MKHQpOnQ7aWYoIShhPXVlKHQpKSlyZXR1cm4gTHQ/bnVsbDphdH1hJiZEdCYmc2UoYS5maXJzdENoaWxkKTtmb3IodmFyIGY9bGUoWXQ/dDphKTt1PWYubmV4dE5vZGUoKTspMz09PXUubm9kZVR5cGUmJnU9PT1sfHxwZSh1KXx8KHUuY29udGVudCBpbnN0YW5jZW9mIG8mJm1lKHUuY29udGVudCksZ2UodSksbD11KTtpZihsPW51bGwsWXQpcmV0dXJuIHQ7aWYoTHQpe2lmKEl0KWZvcihoPXV0LmNhbGwoYS5vd25lckRvY3VtZW50KTthLmZpcnN0Q2hpbGQ7KWguYXBwZW5kQ2hpbGQoYS5maXJzdENoaWxkKTtlbHNlIGg9YTtyZXR1cm4gUnQmJihoPWh0LmNhbGwocixoLCEwKSksaH12YXIgZD1OdD9hLm91dGVySFRNTDphLmlubmVySFRNTDtyZXR1cm4gT3QmJihkPW0oZCxwdCwiICIpLGQ9bShkLHl0LCIgIikpLGl0JiZGdD9pdC5jcmVhdGVIVE1MKGQpOmR9LG4uc2V0Q29uZmlnPWZ1bmN0aW9uKHQpe2VlKHQpLEJ0PSEwfSxuLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKCl7SnQ9bnVsbCxCdD0hMX0sbi5pc1ZhbGlkQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXtKdHx8ZWUoe30pO3ZhciByPXkodCksaT15KGUpO3JldHVybiB5ZShyLGksbil9LG4uYWRkSG9vaz1mdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZHRbdF09ZHRbdF18fFtdLHAoZHRbdF0sZSkpfSxuLnJlbW92ZUhvb2s9ZnVuY3Rpb24odCl7ZHRbdF0mJmQoZHRbdF0pfSxuLnJlbW92ZUhvb2tzPWZ1bmN0aW9uKHQpe2R0W3RdJiYoZHRbdF09W10pfSxuLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7ZHQ9e319LG59KCl9KCl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big1Mik7ZS5oZXg9ci5kZWZhdWx0O3ZhciBpPW4oNTIpO2UucmdiPWkuZGVmYXVsdDt2YXIgYT1uKDUyKTtlLnJnYmE9YS5kZWZhdWx0O3ZhciBvPW4oMTAwKTtlLmhzbD1vLmRlZmF1bHQ7dmFyIHM9bigxMDApO2UuaHNsYT1zLmRlZmF1bHQ7dmFyIGM9bigxODEpO2UudG9LZXl3b3JkPWMuZGVmYXVsdDt2YXIgdT1uKDE4Mik7ZS50b0hleD11LmRlZmF1bHQ7dmFyIGw9bigxODMpO2UudG9SZ2JhPWwuZGVmYXVsdDt2YXIgaD1uKDE4NCk7ZS50b0hzbGE9aC5kZWZhdWx0O3ZhciBmPW4oMjkpO2UuY2hhbm5lbD1mLmRlZmF1bHQ7dmFyIGQ9bigxODUpO2UucmVkPWQuZGVmYXVsdDt2YXIgcD1uKDE4Nik7ZS5ncmVlbj1wLmRlZmF1bHQ7dmFyIHk9bigxODcpO2UuYmx1ZT15LmRlZmF1bHQ7dmFyIGc9bigxODgpO2UuaHVlPWcuZGVmYXVsdDt2YXIgbT1uKDE4OSk7ZS5zYXR1cmF0aW9uPW0uZGVmYXVsdDt2YXIgdj1uKDE5MCk7ZS5saWdodG5lc3M9di5kZWZhdWx0O3ZhciBiPW4oMTAxKTtlLmFscGhhPWIuZGVmYXVsdDt2YXIgeD1uKDEwMSk7ZS5vcGFjaXR5PXguZGVmYXVsdDt2YXIgXz1uKDE5MSk7ZS5jb250cmFzdD1fLmRlZmF1bHQ7dmFyIGs9big3Nyk7ZS5sdW1pbmFuY2U9ay5kZWZhdWx0O3ZhciB3PW4oMTkyKTtlLmlzRGFyaz13LmRlZmF1bHQ7dmFyIFQ9bigxMDIpO2UuaXNMaWdodD1ULmRlZmF1bHQ7dmFyIEU9bigxOTMpO2UuaXNWYWxpZD1FLmRlZmF1bHQ7dmFyIEM9bigxOTQpO2Uuc2F0dXJhdGU9Qy5kZWZhdWx0O3ZhciBTPW4oMTk1KTtlLmRlc2F0dXJhdGU9Uy5kZWZhdWx0O3ZhciBBPW4oMTk2KTtlLmxpZ2h0ZW49QS5kZWZhdWx0O3ZhciBNPW4oMTk3KTtlLmRhcmtlbj1NLmRlZmF1bHQ7dmFyIE89bigxMDMpO2Uub3BhY2lmeT1PLmRlZmF1bHQ7dmFyIE49bigxMDMpO2UuZmFkZUluPU4uZGVmYXVsdDt2YXIgQj1uKDEwNCk7ZS50cmFuc3BhcmVudGl6ZT1CLmRlZmF1bHQ7dmFyIEQ9bigxMDQpO2UuZmFkZU91dD1ELmRlZmF1bHQ7dmFyIEw9bigxOTgpO2UuY29tcGxlbWVudD1MLmRlZmF1bHQ7dmFyIEk9bigxOTkpO2UuZ3JheXNjYWxlPUkuZGVmYXVsdDt2YXIgUj1uKDEwNSk7ZS5hZGp1c3Q9Ui5kZWZhdWx0O3ZhciBGPW4oNTMpO2UuY2hhbmdlPUYuZGVmYXVsdDt2YXIgUD1uKDIwMCk7ZS5pbnZlcnQ9UC5kZWZhdWx0O3ZhciBqPW4oMTA2KTtlLm1peD1qLmRlZmF1bHQ7dmFyIFk9bigyMDEpO2Uuc2NhbGU9WS5kZWZhdWx0fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj17bWluOntyOjAsZzowLGI6MCxzOjAsbDowLGE6MH0sbWF4OntyOjI1NSxnOjI1NSxiOjI1NSxoOjM2MCxzOjEwMCxsOjEwMCxhOjF9LGNsYW1wOntyOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yNTU/MjU1OnQ8MD8wOnR9LGc6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTI1NT8yNTU6dDwwPzA6dH0sYjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjU1PzI1NTp0PDA/MDp0fSxoOmZ1bmN0aW9uKHQpe3JldHVybiB0JTM2MH0sczpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTAwPzEwMDp0PDA/MDp0fSxsOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMDA/MTAwOnQ8MD8wOnR9LGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE/MTp0PDA/MDp0fX0sdG9MaW5lYXI6ZnVuY3Rpb24odCl7dmFyIGU9dC8yNTU7cmV0dXJuIHQ+LjAzOTI4P01hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCk6ZS8xMi45Mn0saHVlMnJnYjpmdW5jdGlvbih0LGUsbil7cmV0dXJuIG48MCYmKG4rPTEpLG4+MSYmKG4tPTEpLG48MS82P3QrNiooZS10KSpuOm48LjU/ZTpuPDIvMz90KyhlLXQpKigyLzMtbikqNjp0fSxoc2wycmdiOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5oLGk9dC5zLGE9dC5sO2lmKCFpKXJldHVybiAyLjU1KmE7bi89MzYwLGkvPTEwMDt2YXIgbz0oYS89MTAwKTwuNT9hKigxK2kpOmEraS1hKmkscz0yKmEtbztzd2l0Y2goZSl7Y2FzZSJyIjpyZXR1cm4gMjU1KnIuaHVlMnJnYihzLG8sbisxLzMpO2Nhc2UiZyI6cmV0dXJuIDI1NSpyLmh1ZTJyZ2IocyxvLG4pO2Nhc2UiYiI6cmV0dXJuIDI1NSpyLmh1ZTJyZ2IocyxvLG4tMS8zKX19LHJnYjJoc2w6ZnVuY3Rpb24odCxlKXt2YXIgbj10LnIscj10LmcsaT10LmI7bi89MjU1LHIvPTI1NSxpLz0yNTU7dmFyIGE9TWF0aC5tYXgobixyLGkpLG89TWF0aC5taW4obixyLGkpLHM9KGErbykvMjtpZigibCI9PT1lKXJldHVybiAxMDAqcztpZihhPT09bylyZXR1cm4gMDt2YXIgYz1hLW87aWYoInMiPT09ZSlyZXR1cm4gMTAwKihzPi41P2MvKDItYS1vKTpjLyhhK28pKTtzd2l0Y2goYSl7Y2FzZSBuOnJldHVybiA2MCooKHItaSkvYysocjxpPzY6MCkpO2Nhc2UgcjpyZXR1cm4gNjAqKChpLW4pL2MrMik7Y2FzZSBpOnJldHVybiA2MCooKG4tcikvYys0KTtkZWZhdWx0OnJldHVybi0xfX19O2UuZGVmYXVsdD1yfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj17Y2xhbXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPm4/TWF0aC5taW4oZSxNYXRoLm1heChuLHQpKTpNYXRoLm1pbihuLE1hdGgubWF4KGUsdCkpfSxyb3VuZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCgxZTEwKnQpLzFlMTB9fTtlLmRlZmF1bHQ9cn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9e2RlYzJoZXg6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoPjE/ZToiMCIrZX19O2UuZGVmYXVsdD1yfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDExKSxpPW4oMTc2KSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuY29sb3I9ZSx0aGlzLmNoYW5nZWQ9ITEsdGhpcy5kYXRhPXQsdGhpcy50eXBlPW5ldyBpLmRlZmF1bHR9cmV0dXJuIHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbG9yPWUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT10LHRoaXMudHlwZS50eXBlPTAsdGhpc30sdC5wcm90b3R5cGUuX2Vuc3VyZUhTTD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQuaCxuPXQucyxpPXQubDt2b2lkIDA9PT1lJiYodC5oPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwiaCIpKSx2b2lkIDA9PT1uJiYodC5zPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwicyIpKSx2b2lkIDA9PT1pJiYodC5sPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwibCIpKX0sdC5wcm90b3R5cGUuX2Vuc3VyZVJHQj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQucixuPXQuZyxpPXQuYjt2b2lkIDA9PT1lJiYodC5yPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiciIpKSx2b2lkIDA9PT1uJiYodC5nPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiZyIpKSx2b2lkIDA9PT1pJiYodC5iPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiYiIpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dC5yO3JldHVybiB0aGlzLnR5cGUuaXMoMil8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZUhTTCgpLHIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiciIpKTplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldCgxKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLnI9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImciLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10Lmc7cmV0dXJuIHRoaXMudHlwZS5pcygyKXx8dm9pZCAwPT09ZT8odGhpcy5fZW5zdXJlSFNMKCksci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0LCJnIikpOmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KDEpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYiIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQuYjtyZXR1cm4gdGhpcy50eXBlLmlzKDIpfHx2b2lkIDA9PT1lPyh0aGlzLl9lbnN1cmVIU0woKSxyLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHQsImIiKSk6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoMSksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5iPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dC5oO3JldHVybiB0aGlzLnR5cGUuaXMoMSl8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZVJHQigpLHIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwiaCIpKTplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldCgyKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmg9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10LnM7cmV0dXJuIHRoaXMudHlwZS5pcygxKXx8dm9pZCAwPT09ZT8odGhpcy5fZW5zdXJlUkdCKCksci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0LCJzIikpOmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KDIpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQubDtyZXR1cm4gdGhpcy50eXBlLmlzKDEpfHx2b2lkIDA9PT1lPyh0aGlzLl9lbnN1cmVSR0IoKSxyLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHQsImwiKSk6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoMiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5sPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5hfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5hPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtlLmRlZmF1bHQ9YX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy50eXBlPTB9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGV9LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT10fSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMudHlwZT0wfSx0LnByb3RvdHlwZS5pcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50eXBlPT09dH0sdH0oKTtlLmRlZmF1bHQ9cn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMSksaT17fTtlLkRFQzJIRVg9aTtmb3IodmFyIGE9MDthPD0yNTU7YSsrKWlbYV09ci5kZWZhdWx0LnVuaXQuZGVjMmhleChhKX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5OSksaT17Y29sb3JzOnthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzAwZmZmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwMDBmZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW5hcXVhOiIjMDBmZmZmIixkYXJrYmx1ZToiIzAwMDA4YiIsZGFya2N5YW46IiMwMDhiOGIiLGRhcmtnb2xkZW5yb2Q6IiNiODg2MGIiLGRhcmtncmF5OiIjYTlhOWE5IixkYXJrZ3JlZW46IiMwMDY0MDAiLGRhcmtncmV5OiIjYTlhOWE5IixkYXJra2hha2k6IiNiZGI3NmIiLGRhcmttYWdlbnRhOiIjOGIwMDhiIixkYXJrb2xpdmVncmVlbjoiIzU1NmIyZiIsZGFya29yYW5nZToiI2ZmOGMwMCIsZGFya29yY2hpZDoiIzk5MzJjYyIsZGFya3JlZDoiIzhiMDAwMCIsZGFya3NhbG1vbjoiI2U5OTY3YSIsZGFya3NlYWdyZWVuOiIjOGZiYzhmIixkYXJrc2xhdGVibHVlOiIjNDgzZDhiIixkYXJrc2xhdGVncmF5OiIjMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIjMmY0ZjRmIixkYXJrdHVycXVvaXNlOiIjMDBjZWQxIixkYXJrdmlvbGV0OiIjOTQwMGQzIixkZWVwcGluazoiI2ZmMTQ5MyIsZGVlcHNreWJsdWU6IiMwMGJmZmYiLGRpbWdyYXk6IiM2OTY5NjkiLGRpbWdyZXk6IiM2OTY5NjkiLGRvZGdlcmJsdWU6IiMxZTkwZmYiLGZpcmVicmljazoiI2IyMjIyMiIsZmxvcmFsd2hpdGU6IiNmZmZhZjAiLGZvcmVzdGdyZWVuOiIjMjI4YjIyIixmdWNoc2lhOiIjZmYwMGZmIixnYWluc2Jvcm86IiNkY2RjZGMiLGdob3N0d2hpdGU6IiNmOGY4ZmYiLGdvbGQ6IiNmZmQ3MDAiLGdvbGRlbnJvZDoiI2RhYTUyMCIsZ3JheToiIzgwODA4MCIsZ3JlZW46IiMwMDgwMDAiLGdyZWVueWVsbG93OiIjYWRmZjJmIixncmV5OiIjODA4MDgwIixob25leWRldzoiI2YwZmZmMCIsaG90cGluazoiI2ZmNjliNCIsaW5kaWFucmVkOiIjY2Q1YzVjIixpbmRpZ286IiM0YjAwODIiLGl2b3J5OiIjZmZmZmYwIixraGFraToiI2YwZTY4YyIsbGF2ZW5kZXI6IiNlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6IiNmZmYwZjUiLGxhd25ncmVlbjoiIzdjZmMwMCIsbGVtb25jaGlmZm9uOiIjZmZmYWNkIixsaWdodGJsdWU6IiNhZGQ4ZTYiLGxpZ2h0Y29yYWw6IiNmMDgwODAiLGxpZ2h0Y3lhbjoiI2UwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IiNmYWZhZDIiLGxpZ2h0Z3JheToiI2QzZDNkMyIsbGlnaHRncmVlbjoiIzkwZWU5MCIsbGlnaHRncmV5OiIjZDNkM2QzIixsaWdodHBpbms6IiNmZmI2YzEiLGxpZ2h0c2FsbW9uOiIjZmZhMDdhIixsaWdodHNlYWdyZWVuOiIjMjBiMmFhIixsaWdodHNreWJsdWU6IiM4N2NlZmEiLGxpZ2h0c2xhdGVncmF5OiIjNzc4ODk5IixsaWdodHNsYXRlZ3JleToiIzc3ODg5OSIsbGlnaHRzdGVlbGJsdWU6IiNiMGM0ZGUiLGxpZ2h0eWVsbG93OiIjZmZmZmUwIixsaW1lOiIjMDBmZjAwIixsaW1lZ3JlZW46IiMzMmNkMzIiLGxpbmVuOiIjZmFmMGU2IixtYWdlbnRhOiIjZmYwMGZmIixtYXJvb246IiM4MDAwMDAiLG1lZGl1bWFxdWFtYXJpbmU6IiM2NmNkYWEiLG1lZGl1bWJsdWU6IiMwMDAwY2QiLG1lZGl1bW9yY2hpZDoiI2JhNTVkMyIsbWVkaXVtcHVycGxlOiIjOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiIzNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiIjN2I2OGVlIixtZWRpdW1zcHJpbmdncmVlbjoiIzAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiIjNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6IiNjNzE1ODUiLG1pZG5pZ2h0Ymx1ZToiIzE5MTk3MCIsbWludGNyZWFtOiIjZjVmZmZhIixtaXN0eXJvc2U6IiNmZmU0ZTEiLG1vY2Nhc2luOiIjZmZlNGI1IixuYXZham93aGl0ZToiI2ZmZGVhZCIsbmF2eToiIzAwMDA4MCIsb2xkbGFjZToiI2ZkZjVlNiIsb2xpdmU6IiM4MDgwMDAiLG9saXZlZHJhYjoiIzZiOGUyMyIsb3JhbmdlOiIjZmZhNTAwIixvcmFuZ2VyZWQ6IiNmZjQ1MDAiLG9yY2hpZDoiI2RhNzBkNiIscGFsZWdvbGRlbnJvZDoiI2VlZThhYSIscGFsZWdyZWVuOiIjOThmYjk4IixwYWxldHVycXVvaXNlOiIjYWZlZWVlIixwYWxldmlvbGV0cmVkOiIjZGI3MDkzIixwYXBheWF3aGlwOiIjZmZlZmQ1IixwZWFjaHB1ZmY6IiNmZmRhYjkiLHBlcnU6IiNjZDg1M2YiLHBpbms6IiNmZmMwY2IiLHBsdW06IiNkZGEwZGQiLHBvd2RlcmJsdWU6IiNiMGUwZTYiLHB1cnBsZToiIzgwMDA4MCIscmViZWNjYXB1cnBsZToiIzY2MzM5OSIscmVkOiIjZmYwMDAwIixyb3N5YnJvd246IiNiYzhmOGYiLHJveWFsYmx1ZToiIzQxNjllMSIsc2FkZGxlYnJvd246IiM4YjQ1MTMiLHNhbG1vbjoiI2ZhODA3MiIsc2FuZHlicm93bjoiI2Y0YTQ2MCIsc2VhZ3JlZW46IiMyZThiNTciLHNlYXNoZWxsOiIjZmZmNWVlIixzaWVubmE6IiNhMDUyMmQiLHNpbHZlcjoiI2MwYzBjMCIsc2t5Ymx1ZToiIzg3Y2VlYiIsc2xhdGVibHVlOiIjNmE1YWNkIixzbGF0ZWdyYXk6IiM3MDgwOTAiLHNsYXRlZ3JleToiIzcwODA5MCIsc25vdzoiI2ZmZmFmYSIsc3ByaW5nZ3JlZW46IiMwMGZmN2YiLHRhbjoiI2QyYjQ4YyIsdGVhbDoiIzAwODA4MCIsdGhpc3RsZToiI2Q4YmZkOCIsdHJhbnNwYXJlbnQ6IiMwMDAwMDAwMCIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZmZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmZmZjAwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiJ9LHBhcnNlOmZ1bmN0aW9uKHQpe3Q9dC50b0xvd2VyQ2FzZSgpO3ZhciBlPWkuY29sb3JzW3RdO2lmKGUpcmV0dXJuIHIuZGVmYXVsdC5wYXJzZShlKX0sc3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXIuZGVmYXVsdC5zdHJpbmdpZnkodCk7Zm9yKHZhciBuIGluIGkuY29sb3JzKWlmKGkuY29sb3JzW25dPT09ZSlyZXR1cm4gbn19O2UuZGVmYXVsdD1pfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDExKSxpPW4oNDYpLGE9e3JlOi9ecmdiYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKSk/XHMqP1wpJC9pLHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvZGVBdCgwKTtpZigxMTQ9PT1lfHw4Mj09PWUpe3ZhciBuPXQubWF0Y2goYS5yZSk7aWYobil7dmFyIG89blsxXSxzPW5bMl0sYz1uWzNdLHU9bls0XSxsPW5bNV0saD1uWzZdLGY9bls3XSxkPW5bOF07cmV0dXJuIGkuZGVmYXVsdC5zZXQoe3I6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAucihzPzIuNTUqcGFyc2VGbG9hdChvKTpwYXJzZUZsb2F0KG8pKSxnOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmcodT8yLjU1KnBhcnNlRmxvYXQoYyk6cGFyc2VGbG9hdChjKSksYjpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5iKGg/Mi41NSpwYXJzZUZsb2F0KGwpOnBhcnNlRmxvYXQobCkpLGE6Zj9yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5hKGQ/cGFyc2VGbG9hdChmKS8xMDA6cGFyc2VGbG9hdChmKSk6MX0sdCl9fX0sc3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXQucixuPXQuZyxpPXQuYixhPXQuYTtyZXR1cm4gYTwxPyJyZ2JhKCIrci5kZWZhdWx0Lmxhbmcucm91bmQoZSkrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZChuKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQoYSkrIikiOiJyZ2IoIityLmRlZmF1bHQubGFuZy5yb3VuZChlKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKG4pKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQoaSkrIikifX07ZS5kZWZhdWx0PWF9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTEpLGk9big0NiksYT17cmU6L15oc2xhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KD86ZGVnfGdyYWR8cmFkfHR1cm4pPylccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KCUpPykpP1xzKj9cKSQvaSxodWVSZTovXiguKz8pKGRlZ3xncmFkfHJhZHx0dXJuKSQvaSxfaHVlMmRlZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKGEuaHVlUmUpO2lmKGUpe3ZhciBuPWVbMV07c3dpdGNoKGVbMl0pe2Nhc2UiZ3JhZCI6cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgoLjkqcGFyc2VGbG9hdChuKSk7Y2FzZSJyYWQiOnJldHVybiByLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKDE4MCpwYXJzZUZsb2F0KG4pL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgoMzYwKnBhcnNlRmxvYXQobikpfX1yZXR1cm4gci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHQpKX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5jaGFyQ29kZUF0KDApO2lmKDEwND09PWV8fDcyPT09ZSl7dmFyIG49dC5tYXRjaChhLnJlKTtpZihuKXt2YXIgbz1uWzFdLHM9blsyXSxjPW5bM10sdT1uWzRdLGw9bls1XTtyZXR1cm4gaS5kZWZhdWx0LnNldCh7aDphLl9odWUyZGVnKG8pLHM6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHMpKSxsOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmwocGFyc2VGbG9hdChjKSksYTp1P3IuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEobD9wYXJzZUZsb2F0KHUpLzEwMDpwYXJzZUZsb2F0KHUpKToxfSx0KX19fSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5oLG49dC5zLGk9dC5sLGE9dC5hO3JldHVybiBhPDE/ImhzbGEoIityLmRlZmF1bHQubGFuZy5yb3VuZChlKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKG4pKyIlLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIlLCAiK2ErIikiOiJoc2woIityLmRlZmF1bHQubGFuZy5yb3VuZChlKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKG4pKyIlLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIlKSJ9fTtlLmRlZmF1bHQ9YX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdC5mb3JtYXQua2V5d29yZC5zdHJpbmdpZnkoci5kZWZhdWx0LnBhcnNlKHQpKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQuZm9ybWF0LmhleC5zdHJpbmdpZnkoci5kZWZhdWx0LnBhcnNlKHQpKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQuZm9ybWF0LnJnYmEuc3RyaW5naWZ5KHIuZGVmYXVsdC5wYXJzZSh0KSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0LmZvcm1hdC5oc2xhLnN0cmluZ2lmeShyLmRlZmF1bHQucGFyc2UodCkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiciIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiZyIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiYiIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiaCIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwicyIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwibCIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMSksaT1uKDc3KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLmRlZmF1bHQodCksYT1pLmRlZmF1bHQoZSksbz1NYXRoLm1heChuLGEpLHM9TWF0aC5taW4obixhKSxjPShvK051bWJlci5FUFNJTE9OKS8ocytOdW1iZXIuRVBTSUxPTik7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKHIuZGVmYXVsdC5sYW5nLmNsYW1wKGMsMSwxMCkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDIpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4hci5kZWZhdWx0KHQpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiByLmRlZmF1bHQucGFyc2UodCksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJzIixlKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwicyIsLWUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJsIixlKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwibCIsLWUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiaCIsMTgwKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNTMpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQse3M6MH0pfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big2KSxpPW4oMTA2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0xMDApO3ZhciBuPXIuZGVmYXVsdC5wYXJzZSh0KTtyZXR1cm4gbi5yPTI1NS1uLnIsbi5nPTI1NS1uLmcsbi5iPTI1NS1uLmIsaS5kZWZhdWx0KG4sdCxlKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTEpLGk9big2KSxhPW4oMTA1KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbixvLHMsYz1pLmRlZmF1bHQucGFyc2UodCksdT17fTtmb3IodmFyIGwgaW4gZSl1W2xdPShuPWNbbF0sbz1lW2xdLHM9ci5kZWZhdWx0LmNoYW5uZWwubWF4W2xdLG8+MD8ocy1uKSpvLzEwMDpuKm8vMTAwKTtyZXR1cm4gYS5kZWZhdWx0KHQsdSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9eyIuL2xvY2FsZSI6MTA3LCIuL2xvY2FsZS5qcyI6MTA3fTtmdW5jdGlvbiBpKHQpe3ZhciBlPWEodCk7cmV0dXJuIG4oZSl9ZnVuY3Rpb24gYSh0KXtpZighbi5vKHIsdCkpe3ZhciBlPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK3QrIiciKTt0aHJvdyBlLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGV9cmV0dXJuIHJbdF19aS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHIpfSxpLnJlc29sdmU9YSx0LmV4cG9ydHM9aSxpLmlkPTIwMn0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17R3JhcGg6big3OCksdmVyc2lvbjpuKDMwNSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LDQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTYpLGk9QXJyYXkucHJvdG90eXBlLnNwbGljZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPXIoZSx0KTtyZXR1cm4hKG48MCkmJihuPT1lLmxlbmd0aC0xP2UucG9wKCk6aS5jYWxsKGUsbiwxKSwtLXRoaXMuc2l6ZSwhMCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18sbj1yKGUsdCk7cmV0dXJuIG48MD92b2lkIDA6ZVtuXVsxXX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcy5fX2RhdGFfXyx0KT4tMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9fZGF0YV9fLGk9cihuLHQpO3JldHVybiBpPDA/KCsrdGhpcy5zaXplLG4ucHVzaChbdCxlXSkpOm5baV1bMV09ZSx0aGlzfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTUpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IHIsdGhpcy5zaXplPTB9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUsbn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldCh0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU1KSxpPW4oNzkpLGE9big4MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2Ygcil7dmFyIG89bi5fX2RhdGFfXztpZighaXx8by5sZW5ndGg8MTk5KXJldHVybiBvLnB1c2goW3QsZV0pLHRoaXMuc2l6ZT0rK24uc2l6ZSx0aGlzO249dGhpcy5fX2RhdGFfXz1uZXcgYShvKX1yZXR1cm4gbi5zZXQodCxlKSx0aGlzLnNpemU9bi5zaXplLHRoaXN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOSksaT1uKDIxOSksYT1uKDE0KSxvPW4oMTEwKSxzPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLGM9RnVuY3Rpb24ucHJvdG90eXBlLHU9T2JqZWN0LnByb3RvdHlwZSxsPWMudG9TdHJpbmcsaD11Lmhhc093blByb3BlcnR5LGY9UmVnRXhwKCJeIitsLmNhbGwoaCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEoIWEodCl8fGkodCkpJiYocih0KT9mOnMpLnRlc3Qobyh0KSl9fSxmdW5jdGlvbih0LGUpe3ZhciBuO249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7bj1ufHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0KXsib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKG49d2luZG93KX10LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDApLGk9T2JqZWN0LnByb3RvdHlwZSxhPWkuaGFzT3duUHJvcGVydHksbz1pLnRvU3RyaW5nLHM9cj9yLnRvU3RyaW5nVGFnOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9YS5jYWxsKHQscyksbj10W3NdO3RyeXt0W3NdPXZvaWQgMDt2YXIgcj0hMH1jYXRjaCh0KXt9dmFyIGk9by5jYWxsKHQpO3JldHVybiByJiYoZT90W3NdPW46ZGVsZXRlIHRbc10pLGl9fSxmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmNhbGwodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHIsaT1uKDIyMCksYT0ocj0vW14uXSskLy5leGVjKGkmJmkua2V5cyYmaS5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrcjoiIjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISFhJiZhIGluIHR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxOSlbIl9fY29yZS1qc19zaGFyZWRfXyJdO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W2VdfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjIzKSxpPW4oNTUpLGE9big3OSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgcixtYXA6bmV3KGF8fGkpLHN0cmluZzpuZXcgcn19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMjQpLGk9bigyMjUpLGE9bigyMjYpLG89bigyMjcpLHM9bigyMjgpO2Z1bmN0aW9uIGModCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19Yy5wcm90b3R5cGUuY2xlYXI9cixjLnByb3RvdHlwZS5kZWxldGU9aSxjLnByb3RvdHlwZS5nZXQ9YSxjLnByb3RvdHlwZS5oYXM9byxjLnByb3RvdHlwZS5zZXQ9cyx0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTcpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189cj9yKG51bGwpOnt9LHRoaXMuc2l6ZT0wfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NyksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fO2lmKHIpe3ZhciBuPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09bj92b2lkIDA6bn1yZXR1cm4gaS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NyksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fO3JldHVybiByP3ZvaWQgMCE9PWVbdF06aS5jYWxsKGUsdCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsblt0XT1yJiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiJzdHJpbmciPT1lfHwibnVtYmVyIj09ZXx8InN5bWJvbCI9PWV8fCJib29sZWFuIj09ZT8iX19wcm90b19fIiE9PXQ6bnVsbD09PXR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMsdCkuZ2V0KHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLHQpLmhhcyh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1yKHRoaXMsdCksaT1uLnNpemU7cmV0dXJuIG4uc2V0KHQsZSksdGhpcy5zaXplKz1uLnNpemU9PWk/MDoxLHRoaXN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NyksaT1uKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcihlLGkoZSksdCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPUFycmF5KHQpOysrbjx0OylyW25dPWUobik7cmV0dXJuIHJ9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT1yKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oODIpLGE9bigyMSksbz17fTtvWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1vWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1vWyJbb2JqZWN0IEludDhBcnJheV0iXT1vWyJbb2JqZWN0IEludDE2QXJyYXldIl09b1siW29iamVjdCBJbnQzMkFycmF5XSJdPW9bIltvYmplY3QgVWludDhBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPW9bIltvYmplY3QgVWludDE2QXJyYXldIl09b1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxvWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1vWyJbb2JqZWN0IEFycmF5XSJdPW9bIltvYmplY3QgQXJyYXlCdWZmZXJdIl09b1siW29iamVjdCBCb29sZWFuXSJdPW9bIltvYmplY3QgRGF0YVZpZXddIl09b1siW29iamVjdCBEYXRlXSJdPW9bIltvYmplY3QgRXJyb3JdIl09b1siW29iamVjdCBGdW5jdGlvbl0iXT1vWyJbb2JqZWN0IE1hcF0iXT1vWyJbb2JqZWN0IE51bWJlcl0iXT1vWyJbb2JqZWN0IE9iamVjdF0iXT1vWyJbb2JqZWN0IFJlZ0V4cF0iXT1vWyJbb2JqZWN0IFNldF0iXT1vWyJbb2JqZWN0IFN0cmluZ10iXT1vWyJbb2JqZWN0IFdlYWtNYXBdIl09ITEsdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpJiZpKHQubGVuZ3RoKSYmISFvW3IodCldfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTEzKShPYmplY3Qua2V5cyxPYmplY3QpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NyksaT1uKDM1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcihlLGkoZSksdCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNCksaT1uKDYzKSxhPW4oMjQyKSxvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXJldHVybiBhKHQpO3ZhciBlPWkodCksbj1bXTtmb3IodmFyIHMgaW4gdCkoImNvbnN0cnVjdG9yIiE9c3x8IWUmJm8uY2FsbCh0LHMpKSYmbi5wdXNoKHMpO3JldHVybiBufX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107aWYobnVsbCE9dClmb3IodmFyIG4gaW4gT2JqZWN0KHQpKWUucHVzaChuKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ3KSxpPW4oODUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsaSh0KSxlKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ3KSxpPW4oMTE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGkodCksZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMjApLGk9bigxMTgpLGE9bigzNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsYSxpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE5KSwiRGF0YVZpZXciKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMpKG4oMTkpLCJQcm9taXNlIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE5KSwiV2Vha01hcCIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLHI9bmV3IHQuY29uc3RydWN0b3IoZSk7cmV0dXJuIGUmJiJzdHJpbmciPT10eXBlb2YgdFswXSYmbi5jYWxsKHQsImluZGV4IikmJihyLmluZGV4PXQuaW5kZXgsci5pbnB1dD10LmlucHV0KSxyfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODcpLGk9bigyNTEpLGE9bigyNTIpLG89bigyNTMpLHM9bigxMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGM9dC5jb25zdHJ1Y3Rvcjtzd2l0Y2goZSl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIHIodCk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJldHVybiBuZXcgYygrdCk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuIGkodCxuKTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gcyh0LG4pO2Nhc2UiW29iamVjdCBNYXBdIjpyZXR1cm4gbmV3IGM7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gbmV3IGModCk7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOnJldHVybiBhKHQpO2Nhc2UiW29iamVjdCBTZXRdIjpyZXR1cm4gbmV3IGM7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiBvKHQpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1lP3IodC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihuLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpfX0sZnVuY3Rpb24odCxlKXt2YXIgbj0vXHcqJC87dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuc291cmNlLG4uZXhlYyh0KSk7cmV0dXJuIGUubGFzdEluZGV4PXQubGFzdEluZGV4LGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MCksaT1yP3IucHJvdG90eXBlOnZvaWQgMCxhPWk/aS52YWx1ZU9mOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGE/T2JqZWN0KGEuY2FsbCh0KSk6e319fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNTUpLGk9big2MiksYT1uKDgzKSxvPWEmJmEuaXNNYXAscz1vP2kobyk6cjt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDIpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiYiW29iamVjdCBNYXBdIj09cih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1NyksaT1uKDYyKSxhPW4oODMpLG89YSYmYS5pc1NldCxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MiksaT1uKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJiJbb2JqZWN0IFNldF0iPT1yKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtmb3IodmFyIGk9LTEsYT1PYmplY3QoZSksbz1yKGUpLHM9by5sZW5ndGg7cy0tOyl7dmFyIGM9b1t0P3M6KytpXTtpZighMT09PW4oYVtjXSxjLGEpKWJyZWFrfXJldHVybiBlfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXtpZihudWxsPT1uKXJldHVybiBuO2lmKCFyKG4pKXJldHVybiB0KG4saSk7Zm9yKHZhciBhPW4ubGVuZ3RoLG89ZT9hOi0xLHM9T2JqZWN0KG4pOyhlP28tLTorK288YSkmJiExIT09aShzW29dLG8scyk7KTtyZXR1cm4gbn19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49W107cmV0dXJuIHIodCwoZnVuY3Rpb24odCxyLGkpe2UodCxyLGkpJiZuLnB1c2godCl9KSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI2MiksaT1uKDI3MCksYT1uKDEzNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCk7cmV0dXJuIDE9PWUubGVuZ3RoJiZlWzBdWzJdP2EoZVswXVswXSxlWzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PXR8fHIobix0LGUpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU0KSxpPW4oMTI5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYSl7dmFyIG89bi5sZW5ndGgscz1vLGM9IWE7aWYobnVsbD09dClyZXR1cm4hcztmb3IodD1PYmplY3QodCk7by0tOyl7dmFyIHU9bltvXTtpZihjJiZ1WzJdP3VbMV0hPT10W3VbMF1dOiEodVswXWluIHQpKXJldHVybiExfWZvcig7KytvPHM7KXt2YXIgbD0odT1uW29dKVswXSxoPXRbbF0sZj11WzFdO2lmKGMmJnVbMl0pe2lmKHZvaWQgMD09PWgmJiEobCBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyByO2lmKGEpdmFyIHA9YShoLGYsbCx0LGUsZCk7aWYoISh2b2lkIDA9PT1wP2koZixoLDMsYSxkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NCksaT1uKDEzMCksYT1uKDI2Nyksbz1uKDI2OSkscz1uKDQyKSxjPW4oNSksdT1uKDQxKSxsPW4oNDkpLGg9IltvYmplY3QgT2JqZWN0XSIsZj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixkLHAseSl7dmFyIGc9Yyh0KSxtPWMoZSksdj1nPyJbb2JqZWN0IEFycmF5XSI6cyh0KSxiPW0/IltvYmplY3QgQXJyYXldIjpzKGUpLHg9KHY9IltvYmplY3QgQXJndW1lbnRzXSI9PXY/aDp2KT09aCxfPShiPSJbb2JqZWN0IEFyZ3VtZW50c10iPT1iP2g6Yik9PWgsaz12PT1iO2lmKGsmJnUodCkpe2lmKCF1KGUpKXJldHVybiExO2c9ITAseD0hMX1pZihrJiYheClyZXR1cm4geXx8KHk9bmV3IHIpLGd8fGwodCk/aSh0LGUsbixkLHAseSk6YSh0LGUsdixuLGQscCx5KTtpZighKDEmbikpe3ZhciB3PXgmJmYuY2FsbCh0LCJfX3dyYXBwZWRfXyIpLFQ9XyYmZi5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYod3x8VCl7dmFyIEU9dz90LnZhbHVlKCk6dCxDPVQ/ZS52YWx1ZSgpOmU7cmV0dXJuIHl8fCh5PW5ldyByKSxwKEUsQyxuLGQseSl9fXJldHVybiEhayYmKHl8fCh5PW5ldyByKSxvKHQsZSxuLGQscCx5KSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQodCwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIpLHRoaXN9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK248cjspaWYoZSh0W25dLG4sdCkpcmV0dXJuITA7cmV0dXJuITF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MCksaT1uKDEyMiksYT1uKDM4KSxvPW4oMTMwKSxzPW4oMjY4KSxjPW4oOTIpLHU9cj9yLnByb3RvdHlwZTp2b2lkIDAsbD11P3UudmFsdWVPZjp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIsdSxoLGYpe3N3aXRjaChuKXtjYXNlIltvYmplY3QgRGF0YVZpZXddIjppZih0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8dC5ieXRlT2Zmc2V0IT1lLmJ5dGVPZmZzZXQpcmV0dXJuITE7dD10LmJ1ZmZlcixlPWUuYnVmZmVyO2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiEodC5ieXRlTGVuZ3RoIT1lLmJ5dGVMZW5ndGh8fCFoKG5ldyBpKHQpLG5ldyBpKGUpKSk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOmNhc2UiW29iamVjdCBOdW1iZXJdIjpyZXR1cm4gYSgrdCwrZSk7Y2FzZSJbb2JqZWN0IEVycm9yXSI6cmV0dXJuIHQubmFtZT09ZS5uYW1lJiZ0Lm1lc3NhZ2U9PWUubWVzc2FnZTtjYXNlIltvYmplY3QgUmVnRXhwXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiB0PT1lKyIiO2Nhc2UiW29iamVjdCBNYXBdIjp2YXIgZD1zO2Nhc2UiW29iamVjdCBTZXRdIjp2YXIgcD0xJnI7aWYoZHx8KGQ9YyksdC5zaXplIT1lLnNpemUmJiFwKXJldHVybiExO3ZhciB5PWYuZ2V0KHQpO2lmKHkpcmV0dXJuIHk9PWU7cnw9MixmLnNldCh0LGUpO3ZhciBnPW8oZCh0KSxkKGUpLHIsdSxoLGYpO3JldHVybiBmLmRlbGV0ZSh0KSxnO2Nhc2UiW29iamVjdCBTeW1ib2xdIjppZihsKXJldHVybiBsLmNhbGwodCk9PWwuY2FsbChlKX1yZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPS0xLG49QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe25bKytlXT1bcix0XX0pKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTE5KSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGEsbyxzKXt2YXIgYz0xJm4sdT1yKHQpLGw9dS5sZW5ndGg7aWYobCE9cihlKS5sZW5ndGgmJiFjKXJldHVybiExO2Zvcih2YXIgaD1sO2gtLTspe3ZhciBmPXVbaF07aWYoIShjP2YgaW4gZTppLmNhbGwoZSxmKSkpcmV0dXJuITF9dmFyIGQ9cy5nZXQodCkscD1zLmdldChlKTtpZihkJiZwKXJldHVybiBkPT1lJiZwPT10O3ZhciB5PSEwO3Muc2V0KHQsZSkscy5zZXQoZSx0KTtmb3IodmFyIGc9YzsrK2g8bDspe3ZhciBtPXRbZj11W2hdXSx2PWVbZl07aWYoYSl2YXIgYj1jP2EodixtLGYsZSx0LHMpOmEobSx2LGYsdCxlLHMpO2lmKCEodm9pZCAwPT09Yj9tPT09dnx8byhtLHYsbixhLHMpOmIpKXt5PSExO2JyZWFrfWd8fChnPSJjb25zdHJ1Y3RvciI9PWYpfWlmKHkmJiFnKXt2YXIgeD10LmNvbnN0cnVjdG9yLF89ZS5jb25zdHJ1Y3Rvcjt4PT1ffHwhKCJjb25zdHJ1Y3RvciJpbiB0KXx8ISgiY29uc3RydWN0b3IiaW4gZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiB4JiZ4IGluc3RhbmNlb2YgeCYmImZ1bmN0aW9uIj09dHlwZW9mIF8mJl8gaW5zdGFuY2VvZiBffHwoeT0hMSl9cmV0dXJuIHMuZGVsZXRlKHQpLHMuZGVsZXRlKGUpLHl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMzMpLGk9bigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1pKHQpLG49ZS5sZW5ndGg7bi0tOyl7dmFyIGE9ZVtuXSxvPXRbYV07ZVtuXT1bYSxvLHIobyldfXJldHVybiBlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTI5KSxpPW4oMjcyKSxhPW4oMTM2KSxvPW4oOTMpLHM9bigxMzMpLGM9bigxMzQpLHU9big1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8odCkmJnMoZSk/Yyh1KHQpLGUpOmZ1bmN0aW9uKG4pe3ZhciBvPWkobix0KTtyZXR1cm4gdm9pZCAwPT09byYmbz09PWU/YShuLHQpOnIoZSxvLDMpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW51bGw9PXQ/dm9pZCAwOnIodCxlKTtyZXR1cm4gdm9pZCAwPT09aT9uOml9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzQpLGk9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csYT0vXFwoXFwpPy9nLG89cigoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZShpLChmdW5jdGlvbih0LG4scixpKXtlLnB1c2gocj9pLnJlcGxhY2UoYSwiJDEiKTpufHx0KX0pKSxlfSkpO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1uLnNpemUmJm4uY2xlYXIoKSx0fSkpLG49ZS5jYWNoZTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDgwKTtmdW5jdGlvbiBpKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxpPWU/ZS5hcHBseSh0aGlzLHIpOnJbMF0sYT1uLmNhY2hlO2lmKGEuaGFzKGkpKXJldHVybiBhLmdldChpKTt2YXIgbz10LmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9YS5zZXQoaSxvKXx8YSxvfTtyZXR1cm4gbi5jYWNoZT1uZXcoaS5DYWNoZXx8ciksbn1pLkNhY2hlPXIsdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQwKSxpPW4oNjgpLGE9big1KSxvPW4oNDMpLHM9cj9yLnByb3RvdHlwZTp2b2lkIDAsYz1zP3MudG9TdHJpbmc6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZTtpZihhKGUpKXJldHVybiBpKGUsdCkrIiI7aWYobyhlKSlyZXR1cm4gYz9jLmNhbGwoZSk6IiI7dmFyIG49ZSsiIjtyZXR1cm4iMCI9PW4mJjEvZT09LTEvMD8iLTAiOm59fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10JiZlIGluIE9iamVjdCh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzOCksaT1uKDI3OSksYT1uKDkzKSxvPW4oNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9yKG8odCkpOmkodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gcihlLHQpfX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmbi5jYWxsKHQsZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NCksaT1uKDQyKSxhPW4oNDgpLG89big1KSxzPW4oMjUpLGM9big0MSksdT1uKDYzKSxsPW4oNDkpLGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4hMDtpZihzKHQpJiYobyh0KXx8InN0cmluZyI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zcGxpY2V8fGModCl8fGwodCl8fGEodCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT1pKHQpO2lmKCJbb2JqZWN0IE1hcF0iPT1lfHwiW29iamVjdCBTZXRdIj09ZSlyZXR1cm4hdC5zaXplO2lmKHUodCkpcmV0dXJuIXIodCkubGVuZ3RoO2Zvcih2YXIgbiBpbiB0KWlmKGguY2FsbCh0LG4pKXJldHVybiExO3JldHVybiEwfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9LTEsYT1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHImJmEmJihuPXRbKytpXSk7KytpPGE7KW49ZShuLHRbaV0saSx0KTtyZXR1cm4gbn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGkodCwoZnVuY3Rpb24odCxpLGEpe249cj8ocj0hMSx0KTplKG4sdCxpLGEpfSkpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NCksaT1uKDQyKSxhPW4oMjUpLG89bigyODUpLHM9bigyODYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiAwO2lmKGEodCkpcmV0dXJuIG8odCk/cyh0KTp0Lmxlbmd0aDt2YXIgZT1pKHQpO3JldHVybiJbb2JqZWN0IE1hcF0iPT1lfHwiW29iamVjdCBTZXRdIj09ZT90LnNpemU6cih0KS5sZW5ndGh9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDUpLGE9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8IWkodCkmJmEodCkmJiJbb2JqZWN0IFN0cmluZ10iPT1yKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjg3KSxpPW4oMjg4KSxhPW4oMjg5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/YSh0KTpyKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTM4KSgibGVuZ3RoIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIG49UmVnRXhwKCJbXFx1MjAwZFxcdWQ4MDAtXFx1ZGZmZlxcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZlxcdWZlMGVcXHVmZTBmXSIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi50ZXN0KHQpfX0sZnVuY3Rpb24odCxlKXt2YXIgbj0iW1xcdWQ4MDAtXFx1ZGZmZl0iLHI9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixpPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGE9IlteXFx1ZDgwMC1cXHVkZmZmXSIsbz0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIscz0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsYz0iKD86IityKyJ8IitpKyIpIisiPyIsdT0iW1xcdWZlMGVcXHVmZTBmXT8iK2MrKCIoPzpcXHUyMDBkKD86IitbYSxvLHNdLmpvaW4oInwiKSsiKVtcXHVmZTBlXFx1ZmUwZl0/IitjKyIpKiIpLGw9Iig/OiIrW2ErcisiPyIscixvLHMsbl0uam9pbigifCIpKyIpIixoPVJlZ0V4cChpKyIoPz0iK2krIil8IitsK3UsImciKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWgubGFzdEluZGV4PTA7aC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4MSksaT1uKDEyNSksYT1uKDkwKSxvPW4oMjYpLHM9big2NCksYz1uKDUpLHU9big0MSksbD1uKDM5KSxoPW4oMTQpLGY9big0OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgZD1jKHQpLHA9ZHx8dSh0KXx8Zih0KTtpZihlPW8oZSw0KSxudWxsPT1uKXt2YXIgeT10JiZ0LmNvbnN0cnVjdG9yO249cD9kP25ldyB5OltdOmgodCkmJmwoeSk/aShzKHQpKTp7fX1yZXR1cm4ocD9yOmEpKHQsKGZ1bmN0aW9uKHQscixpKXtyZXR1cm4gZShuLHQscixpKX0pKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTUpLGk9big2OSksYT1uKDI5Niksbz1uKDE0Nikscz1pKChmdW5jdGlvbih0KXtyZXR1cm4gYShyKHQsMSxvLCEwKSl9KSk7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQwKSxpPW4oNDgpLGE9big1KSxvPXI/ci5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KXx8aSh0KXx8ISEobyYmdCYmdFtvXSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHQuY2FsbChlKTtjYXNlIDE6cmV0dXJuIHQuY2FsbChlLG5bMF0pO2Nhc2UgMjpyZXR1cm4gdC5jYWxsKGUsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSxuWzJdKX1yZXR1cm4gdC5hcHBseShlLG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODgpLGk9bigxMTEpLGE9bigzNiksbz1pP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpyKGUpLHdyaXRhYmxlOiEwfSl9OmE7dC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSl7dmFyIG49RGF0ZS5ub3c7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPW4oKSxhPTE2LShpLXIpO2lmKHI9aSxhPjApe2lmKCsrZT49ODAwKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBlPTA7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMxKSxpPW4oMjk3KSxhPW4oMzAxKSxvPW4oMTMyKSxzPW4oMzAyKSxjPW4oOTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHU9LTEsbD1pLGg9dC5sZW5ndGgsZj0hMCxkPVtdLHA9ZDtpZihuKWY9ITEsbD1hO2Vsc2UgaWYoaD49MjAwKXt2YXIgeT1lP251bGw6cyh0KTtpZih5KXJldHVybiBjKHkpO2Y9ITEsbD1vLHA9bmV3IHJ9ZWxzZSBwPWU/W106ZDt0OmZvcig7Kyt1PGg7KXt2YXIgZz10W3VdLG09ZT9lKGcpOmc7aWYoZz1ufHwwIT09Zz9nOjAsZiYmbT09bSl7Zm9yKHZhciB2PXAubGVuZ3RoO3YtLTspaWYocFt2XT09PW0pY29udGludWUgdDtlJiZwLnB1c2gobSksZC5wdXNoKGcpfWVsc2UgbChwLG0sbil8fChwIT09ZCYmcC5wdXNoKG0pLGQucHVzaChnKSl9cmV0dXJuIGR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyOTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiEhKG51bGw9PXQ/MDp0Lmxlbmd0aCkmJnIodCxlLDApPi0xfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQ1KSxpPW4oMjk5KSxhPW4oMzAwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPT1lP2EodCxlLG4pOnIodCxpLG4pfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPW4tMSxpPXQubGVuZ3RoOysrcjxpOylpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9LTEsaT1udWxsPT10PzA6dC5sZW5ndGg7KytyPGk7KWlmKG4oZSx0W3JdKSlyZXR1cm4hMDtyZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyMSksaT1uKDMwMyksYT1uKDkyKSxvPXImJjEvYShuZXcgcihbLC0wXSkpWzFdPT0xLzA/ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyByKHQpfTppO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbigpe319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihlLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSIyLjEuOCJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzKSxpPW4oNzgpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpLGk9dC5wYXJlbnQoZSksYT17djplfTtyZXR1cm4gci5pc1VuZGVmaW5lZChuKXx8KGEudmFsdWU9biksci5pc1VuZGVmaW5lZChpKXx8KGEucGFyZW50PWkpLGF9KSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gci5tYXAodC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSksaT17djplLnYsdzplLnd9O3JldHVybiByLmlzVW5kZWZpbmVkKGUubmFtZSl8fChpLm5hbWU9ZS5uYW1lKSxyLmlzVW5kZWZpbmVkKG4pfHwoaS52YWx1ZT1uKSxpfSkpfXQuZXhwb3J0cz17d3JpdGU6ZnVuY3Rpb24odCl7dmFyIGU9e29wdGlvbnM6e2RpcmVjdGVkOnQuaXNEaXJlY3RlZCgpLG11bHRpZ3JhcGg6dC5pc011bHRpZ3JhcGgoKSxjb21wb3VuZDp0LmlzQ29tcG91bmQoKX0sbm9kZXM6YSh0KSxlZGdlczpvKHQpfTtyLmlzVW5kZWZpbmVkKHQuZ3JhcGgoKSl8fChlLnZhbHVlPXIuY2xvbmUodC5ncmFwaCgpKSk7cmV0dXJuIGV9LHJlYWQ6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGkodC5vcHRpb25zKS5zZXRHcmFwaCh0LnZhbHVlKTtyZXR1cm4gci5lYWNoKHQubm9kZXMsKGZ1bmN0aW9uKHQpe2Uuc2V0Tm9kZSh0LnYsdC52YWx1ZSksdC5wYXJlbnQmJmUuc2V0UGFyZW50KHQudix0LnBhcmVudCl9KSksci5lYWNoKHQuZWRnZXMsKGZ1bmN0aW9uKHQpe2Uuc2V0RWRnZSh7djp0LnYsdzp0LncsbmFtZTp0Lm5hbWV9LHQudmFsdWUpfSkpLGV9fX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17Y29tcG9uZW50czpuKDMwOCksZGlqa3N0cmE6bigxNDgpLGRpamtzdHJhQWxsOm4oMzA5KSxmaW5kQ3ljbGVzOm4oMzEwKSxmbG95ZFdhcnNoYWxsOm4oMzExKSxpc0FjeWNsaWM6bigzMTIpLHBvc3RvcmRlcjpuKDMxMykscHJlb3JkZXI6bigzMTQpLHByaW06bigzMTUpLHRhcmphbjpuKDE1MCksdG9wc29ydDpuKDE1MSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG49e30saT1bXTtmdW5jdGlvbiBhKGkpe3IuaGFzKG4saSl8fChuW2ldPSEwLGUucHVzaChpKSxyLmVhY2godC5zdWNjZXNzb3JzKGkpLGEpLHIuZWFjaCh0LnByZWRlY2Vzc29ycyhpKSxhKSl9cmV0dXJuIHIuZWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe2U9W10sYSh0KSxlLmxlbmd0aCYmaS5wdXNoKGUpfSkpLGl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDgpLGk9bigxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS50cmFuc2Zvcm0odC5ub2RlcygpLChmdW5jdGlvbihpLGEpe2lbYV09cih0LGEsZSxuKX0pLHt9KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzKSxpPW4oMTUwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZmlsdGVyKGkodCksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD4xfHwxPT09ZS5sZW5ndGgmJnQuaGFzRWRnZShlWzBdLGVbMF0pfSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17fSxpPXQubm9kZXMoKTtyZXR1cm4gaS5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3RdPXt9LHJbdF1bdF09e2Rpc3RhbmNlOjB9LGkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCE9PWUmJihyW3RdW2VdPXtkaXN0YW5jZTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9KX0pKSxuKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW4udj09PXQ/bi53Om4udixhPWUobik7clt0XVtpXT17ZGlzdGFuY2U6YSxwcmVkZWNlc3Nvcjp0fX0pKX0pKSxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07aS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgYT1yW25dO2kuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9YVt0XSxpPWVbbl0sbz1hW25dLHM9ci5kaXN0YW5jZStpLmRpc3RhbmNlO3M8by5kaXN0YW5jZSYmKG8uZGlzdGFuY2U9cyxvLnByZWRlY2Vzc29yPWkucHJlZGVjZXNzb3IpfSkpfSkpfSkpLHJ9KHQsZXx8aSxufHxmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlKX0pfTt2YXIgaT1yLmNvbnN0YW50KDEpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cih0KX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2Ygci5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTUyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsInBvc3QiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxlLCJwcmUiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzKSxpPW4oNzgpLGE9bigxNDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89bmV3IGkscz17fSxjPW5ldyBhO2Z1bmN0aW9uIHUodCl7dmFyIHI9dC52PT09bj90Lnc6dC52LGk9Yy5wcmlvcml0eShyKTtpZih2b2lkIDAhPT1pKXt2YXIgYT1lKHQpO2E8aSYmKHNbcl09bixjLmRlY3JlYXNlKHIsYSkpfX1pZigwPT09dC5ub2RlQ291bnQoKSlyZXR1cm4gbztyLmVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtjLmFkZCh0LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksby5zZXROb2RlKHQpfSkpLGMuZGVjcmVhc2UodC5ub2RlcygpWzBdLDApO3ZhciBsPSExO2Zvcig7Yy5zaXplKCk+MDspe2lmKG49Yy5yZW1vdmVNaW4oKSxyLmhhcyhzLG4pKW8uc2V0RWRnZShuLHNbbl0pO2Vsc2V7aWYobCl0aHJvdyBuZXcgRXJyb3IoIklucHV0IGdyYXBoIGlzIG5vdCBjb25uZWN0ZWQ6ICIrdCk7bD0hMH10Lm5vZGVFZGdlcyhuKS5mb3JFYWNoKHUpfXJldHVybiBvfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPW4oMyl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oMzUyKSxhPW4oMzU1KSxvPW4oMzU2KSxzPW4oOSkubm9ybWFsaXplUmFua3MsYz1uKDM1OCksdT1uKDkpLnJlbW92ZUVtcHR5UmFua3MsbD1uKDM1OSksaD1uKDM2MCksZj1uKDM2MSksZD1uKDM2MikscD1uKDM3MSkseT1uKDkpLGc9bigyMCkuR3JhcGg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZSYmZS5kZWJ1Z1RpbWluZz95LnRpbWU6eS5ub3RpbWU7bigibGF5b3V0IiwoZnVuY3Rpb24oKXt2YXIgZT1uKCIgIGJ1aWxkTGF5b3V0R3JhcGgiLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1uZXcgZyh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLG49Qyh0LmdyYXBoKCkpO3JldHVybiBlLnNldEdyYXBoKHIubWVyZ2Uoe30sdixFKG4sbSksci5waWNrKG4sYikpKSxyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT1DKHQubm9kZShuKSk7ZS5zZXROb2RlKG4sci5kZWZhdWx0cyhFKGkseCksXykpLGUuc2V0UGFyZW50KG4sdC5wYXJlbnQobikpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPUModC5lZGdlKG4pKTtlLnNldEVkZ2UobixyLm1lcmdlKHt9LHcsRShpLGspLHIucGljayhpLFQpKSl9KSksZX0odCl9KSk7bigiICBydW5MYXlvdXQiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe2UoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpO2UucmFua3NlcC89MixyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgcj10LmVkZ2Uobik7ci5taW5sZW4qPTIsImMiIT09ci5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpJiYoIlRCIj09PWUucmFua2Rpcnx8IkJUIj09PWUucmFua2Rpcj9yLndpZHRoKz1yLmxhYmVsb2Zmc2V0OnIuaGVpZ2h0Kz1yLmxhYmVsb2Zmc2V0KX0pKX0odCl9KSksZSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe2lmKGUudj09PWUudyl7dmFyIG49dC5ub2RlKGUudik7bi5zZWxmRWRnZXN8fChuLnNlbGZFZGdlcz1bXSksbi5zZWxmRWRnZXMucHVzaCh7ZTplLGxhYmVsOnQuZWRnZShlKX0pLHQucmVtb3ZlRWRnZShlKX19KSl9KHQpfSkpLGUoIiAgICBhY3ljbGljIiwoZnVuY3Rpb24oKXtpLnJ1bih0KX0pKSxlKCIgICAgbmVzdGluZ0dyYXBoLnJ1biIsKGZ1bmN0aW9uKCl7bC5ydW4odCl9KSksZSgiICAgIHJhbmsiLChmdW5jdGlvbigpe28oeS5hc05vbkNvbXBvdW5kR3JhcGgodCkpfSkpLGUoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO2lmKG4ud2lkdGgmJm4uaGVpZ2h0KXt2YXIgcj10Lm5vZGUoZS52KSxpPXtyYW5rOih0Lm5vZGUoZS53KS5yYW5rLXIucmFuaykvMityLnJhbmssZTplfTt5LmFkZER1bW15Tm9kZSh0LCJlZGdlLXByb3h5IixpLCJfZXAiKX19KSl9KHQpfSkpLGUoIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoZnVuY3Rpb24oKXt1KHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsKGZ1bmN0aW9uKCl7bC5jbGVhbnVwKHQpfSkpLGUoIiAgICBub3JtYWxpemVSYW5rcyIsKGZ1bmN0aW9uKCl7cyh0KX0pKSxlKCIgICAgYXNzaWduUmFua01pbk1heCIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPTA7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pO2kuYm9yZGVyVG9wJiYoaS5taW5SYW5rPXQubm9kZShpLmJvcmRlclRvcCkucmFuayxpLm1heFJhbms9dC5ub2RlKGkuYm9yZGVyQm90dG9tKS5yYW5rLGU9ci5tYXgoZSxpLm1heFJhbmspKX0pKSx0LmdyYXBoKCkubWF4UmFuaz1lfSh0KX0pKSxlKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTsiZWRnZS1wcm94eSI9PT1uLmR1bW15JiYodC5lZGdlKG4uZSkubGFiZWxSYW5rPW4ucmFuayx0LnJlbW92ZU5vZGUoZSkpfSkpfSh0KX0pKSxlKCIgICAgbm9ybWFsaXplLnJ1biIsKGZ1bmN0aW9uKCl7YS5ydW4odCl9KSksZSgiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoZnVuY3Rpb24oKXtjKHQpfSkpLGUoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsKGZ1bmN0aW9uKCl7aCh0KX0pKSxlKCIgICAgb3JkZXIiLChmdW5jdGlvbigpe2QodCl9KSksZSgiICAgIGluc2VydFNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPXkuYnVpbGRMYXllck1hdHJpeCh0KTtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIG49MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSxpKXt2YXIgYT10Lm5vZGUoZSk7YS5vcmRlcj1pK24sci5mb3JFYWNoKGEuc2VsZkVkZ2VzLChmdW5jdGlvbihlKXt5LmFkZER1bW15Tm9kZSh0LCJzZWxmZWRnZSIse3dpZHRoOmUubGFiZWwud2lkdGgsaGVpZ2h0OmUubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOmkrICsrbixlOmUuZSxsYWJlbDplLmxhYmVsfSwiX3NlIil9KSksZGVsZXRlIGEuc2VsZkVkZ2VzfSkpfSkpfSh0KX0pKSxlKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsKGZ1bmN0aW9uKCl7Zi5hZGp1c3QodCl9KSksZSgiICAgIHBvc2l0aW9uIiwoZnVuY3Rpb24oKXtwKHQpfSkpLGUoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtpZigic2VsZmVkZ2UiPT09bi5kdW1teSl7dmFyIHI9dC5ub2RlKG4uZS52KSxpPXIueCtyLndpZHRoLzIsYT1yLnksbz1uLngtaSxzPXIuaGVpZ2h0LzI7dC5zZXRFZGdlKG4uZSxuLmxhYmVsKSx0LnJlbW92ZU5vZGUoZSksbi5sYWJlbC5wb2ludHM9W3t4OmkrMipvLzMseTphLXN9LHt4OmkrNSpvLzYseTphLXN9LHt4Omkrbyx5OmF9LHt4OmkrNSpvLzYseTphK3N9LHt4OmkrMipvLzMseTphK3N9XSxuLmxhYmVsLng9bi54LG4ubGFiZWwueT1uLnl9fSkpfSh0KX0pKSxlKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtpZih0LmNoaWxkcmVuKGUpLmxlbmd0aCl7dmFyIG49dC5ub2RlKGUpLGk9dC5ub2RlKG4uYm9yZGVyVG9wKSxhPXQubm9kZShuLmJvcmRlckJvdHRvbSksbz10Lm5vZGUoci5sYXN0KG4uYm9yZGVyTGVmdCkpLHM9dC5ub2RlKHIubGFzdChuLmJvcmRlclJpZ2h0KSk7bi53aWR0aD1NYXRoLmFicyhzLngtby54KSxuLmhlaWdodD1NYXRoLmFicyhhLnktaS55KSxuLng9by54K24ud2lkdGgvMixuLnk9aS55K24uaGVpZ2h0LzJ9fSkpLHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpeyJib3JkZXIiPT09dC5ub2RlKGUpLmR1bW15JiZ0LnJlbW92ZU5vZGUoZSl9KSl9KHQpfSkpLGUoIiAgICBub3JtYWxpemUudW5kbyIsKGZ1bmN0aW9uKCl7YS51bmRvKHQpfSkpLGUoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtpZihyLmhhcyhuLCJ4Iikpc3dpdGNoKCJsIiE9PW4ubGFiZWxwb3MmJiJyIiE9PW4ubGFiZWxwb3N8fChuLndpZHRoLT1uLmxhYmVsb2Zmc2V0KSxuLmxhYmVscG9zKXtjYXNlImwiOm4ueC09bi53aWR0aC8yK24ubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpuLngrPW4ud2lkdGgvMituLmxhYmVsb2Zmc2V0fX0pKX0odCl9KSksZSgiICAgIHVuZG9Db29yZGluYXRlU3lzdGVtIiwoZnVuY3Rpb24oKXtmLnVuZG8odCl9KSksZSgiICAgIHRyYW5zbGF0ZUdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG49MCxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhPTAsbz10LmdyYXBoKCkscz1vLm1hcmdpbnh8fDAsYz1vLm1hcmdpbnl8fDA7ZnVuY3Rpb24gdSh0KXt2YXIgcj10Lngsbz10Lnkscz10LndpZHRoLGM9dC5oZWlnaHQ7ZT1NYXRoLm1pbihlLHItcy8yKSxuPU1hdGgubWF4KG4scitzLzIpLGk9TWF0aC5taW4oaSxvLWMvMiksYT1NYXRoLm1heChhLG8rYy8yKX1yLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt1KHQubm9kZShlKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuaGFzKG4sIngiKSYmdShuKX0pKSxlLT1zLGktPWMsci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5ub2RlKG4pO3IueC09ZSxyLnktPWl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIGE9dC5lZGdlKG4pO3IuZm9yRWFjaChhLnBvaW50cywoZnVuY3Rpb24odCl7dC54LT1lLHQueS09aX0pKSxyLmhhcyhhLCJ4IikmJihhLngtPWUpLHIuaGFzKGEsInkiKSYmKGEueS09aSl9KSksby53aWR0aD1uLWUrcyxvLmhlaWdodD1hLWkrY30odCl9KSksZSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG4scixpPXQuZWRnZShlKSxhPXQubm9kZShlLnYpLG89dC5ub2RlKGUudyk7aS5wb2ludHM/KG49aS5wb2ludHNbMF0scj1pLnBvaW50c1tpLnBvaW50cy5sZW5ndGgtMV0pOihpLnBvaW50cz1bXSxuPW8scj1hKSxpLnBvaW50cy51bnNoaWZ0KHkuaW50ZXJzZWN0UmVjdChhLG4pKSxpLnBvaW50cy5wdXNoKHkuaW50ZXJzZWN0UmVjdChvLHIpKX0pKX0odCl9KSksZSgiICAgIHJldmVyc2VQb2ludHMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7bi5yZXZlcnNlZCYmbi5wb2ludHMucmV2ZXJzZSgpfSkpfSh0KX0pKSxlKCIgICAgYWN5Y2xpYy51bmRvIiwoZnVuY3Rpb24oKXtpLnVuZG8odCl9KSl9KGUsbil9KSksbigiICB1cGRhdGVJbnB1dEdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobiksaT1lLm5vZGUobik7ciYmKHIueD1pLngsci55PWkueSxlLmNoaWxkcmVuKG4pLmxlbmd0aCYmKHIud2lkdGg9aS53aWR0aCxyLmhlaWdodD1pLmhlaWdodCkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKSxhPWUuZWRnZShuKTtpLnBvaW50cz1hLnBvaW50cyxyLmhhcyhhLCJ4IikmJihpLng9YS54LGkueT1hLnkpfSkpLHQuZ3JhcGgoKS53aWR0aD1lLmdyYXBoKCkud2lkdGgsdC5ncmFwaCgpLmhlaWdodD1lLmdyYXBoKCkuaGVpZ2h0fSh0LGUpfSkpfSkpfTt2YXIgbT1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sdj17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxiPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0seD1bIndpZHRoIiwiaGVpZ2h0Il0sXz17d2lkdGg6MCxoZWlnaHQ6MH0saz1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSx3PXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sVD1bImxhYmVscG9zIl07ZnVuY3Rpb24gRSh0LGUpe3JldHVybiByLm1hcFZhbHVlcyhyLnBpY2sodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIEModCl7dmFyIGU9e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LG4pe2Vbbi50b0xvd2VyQ2FzZSgpXT10fSkpLGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LDUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIwKShuKDMyMSkpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNiksaT1uKDI1KSxhPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLG8pe3ZhciBzPU9iamVjdChlKTtpZighaShlKSl7dmFyIGM9cihuLDMpO2U9YShlKSxuPWZ1bmN0aW9uKHQpe3JldHVybiBjKHNbdF0sdCxzKX19dmFyIHU9dChlLG4sbyk7cmV0dXJuIHU+LTE/c1tjP2VbdV06dV06dm9pZCAwfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0NSksaT1uKDI2KSxhPW4oMzIyKSxvPU1hdGgubWF4O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHM9bnVsbD09dD8wOnQubGVuZ3RoO2lmKCFzKXJldHVybi0xO3ZhciBjPW51bGw9PW4/MDphKG4pO3JldHVybiBjPDAmJihjPW8ocytjLDApKSxyKHQsaShlLDMpLGMpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPWUlMTtyZXR1cm4gZT09ZT9uP2UtbjplOjB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjQpLGk9bigxNCksYT1uKDQzKSxvPS9eWy0rXTB4WzAtOWEtZl0rJC9pLHM9L14wYlswMV0rJC9pLGM9L14wb1swLTddKyQvaSx1PXBhcnNlSW50O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoYSh0KSlyZXR1cm4gTmFOO2lmKGkodCkpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PWkoZSk/ZSsiIjplfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PXIodCk7dmFyIG49cy50ZXN0KHQpO3JldHVybiBufHxjLnRlc3QodCk/dSh0LnNsaWNlKDIpLG4/Mjo4KTpvLnRlc3QodCk/TmFOOit0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzI1KSxpPS9eXHMrLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dC5zbGljZSgwLHIodCkrMSkucmVwbGFjZShpLCIiKTp0fX0sZnVuY3Rpb24odCxlKXt2YXIgbj0vXHMvO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tJiZuLnRlc3QodC5jaGFyQXQoZSkpOyk7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MSksaT1uKDEyNyksYT1uKDM1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD90OnIodCxpKGUpLGEpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bnVsbD09dD8wOnQubGVuZ3RoO3JldHVybiBlP3RbZS0xXTp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MCksaT1uKDkwKSxhPW4oMjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBlPWEoZSwzKSxpKHQsKGZ1bmN0aW9uKHQsaSxhKXtyKG4saSxlKHQsaSxhKSl9KSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk2KSxpPW4oMzMwKSxhPW4oMzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5sZW5ndGg/cih0LGEsaSk6dm9pZCAwfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMyKSxpPW4oMzM1KSgoZnVuY3Rpb24odCxlLG4pe3IodCxlLG4pfSkpO3QuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NCksaT1uKDE1NyksYT1uKDkxKSxvPW4oMzMzKSxzPW4oMTQpLGM9bigzNSksdT1uKDE1OSk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLGwsaCxmKXtlIT09biYmYShuLChmdW5jdGlvbihhLGMpe2lmKGZ8fChmPW5ldyByKSxzKGEpKW8oZSxuLGMsbCx0LGgsZik7ZWxzZXt2YXIgZD1oP2godShlLGMpLGEsYysiIixlLG4sZik6dm9pZCAwO3ZvaWQgMD09PWQmJihkPWEpLGkoZSxjLGQpfX0pLGMpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTU3KSxpPW4oMTE0KSxhPW4oMTIzKSxvPW4oMTE1KSxzPW4oMTI0KSxjPW4oNDgpLHU9big1KSxsPW4oMTQ2KSxoPW4oNDEpLGY9bigzOSksZD1uKDE0KSxwPW4oMTU4KSx5PW4oNDkpLGc9bigxNTkpLG09bigzMzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbix2LGIseCxfKXt2YXIgaz1nKHQsbiksdz1nKGUsbiksVD1fLmdldCh3KTtpZihUKXIodCxuLFQpO2Vsc2V7dmFyIEU9eD94KGssdyxuKyIiLHQsZSxfKTp2b2lkIDAsQz12b2lkIDA9PT1FO2lmKEMpe3ZhciBTPXUodyksQT0hUyYmaCh3KSxNPSFTJiYhQSYmeSh3KTtFPXcsU3x8QXx8TT91KGspP0U9azpsKGspP0U9byhrKTpBPyhDPSExLEU9aSh3LCEwKSk6TT8oQz0hMSxFPWEodywhMCkpOkU9W106cCh3KXx8Yyh3KT8oRT1rLGMoayk/RT1tKGspOmQoaykmJiFmKGspfHwoRT1zKHcpKSk6Qz0hMX1DJiYoXy5zZXQodyxFKSxiKEUsdyx2LHgsXyksXy5kZWxldGUodykpLHIodCxuLEUpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ3KSxpPW4oMzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LGkodCkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjkpLGk9big3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKChmdW5jdGlvbihlLG4pe3ZhciByPS0xLGE9bi5sZW5ndGgsbz1hPjE/blthLTFdOnZvaWQgMCxzPWE+Mj9uWzJdOnZvaWQgMDtmb3Iobz10Lmxlbmd0aD4zJiYiZnVuY3Rpb24iPT10eXBlb2Ygbz8oYS0tLG8pOnZvaWQgMCxzJiZpKG5bMF0sblsxXSxzKSYmKG89YTwzP3ZvaWQgMDpvLGE9MSksZT1PYmplY3QoZSk7KytyPGE7KXt2YXIgYz1uW3JdO2MmJnQoZSxjLHIsbyl9cmV0dXJuIGV9KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NiksaT1uKDE2MCksYT1uKDM2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoP3IodCxhLGkpOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk2KSxpPW4oMjYpLGE9bigxNjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9yKHQsaShlLDIpLGEpOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gci5EYXRlLm5vdygpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQwKSxpPW4oMTM2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGkodCxuKX0pKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY2KSxpPW4oMzQxKSxhPW4oNjcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBvPS0xLHM9ZS5sZW5ndGgsYz17fTsrK288czspe3ZhciB1PWVbb10sbD1yKHQsdSk7bihsLHUpJiZpKGMsYSh1LHQpLGwpfXJldHVybiBjfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTkpLGk9big2NyksYT1uKDYxKSxvPW4oMTQpLHM9big1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGMpe2lmKCFvKHQpKXJldHVybiB0O2Zvcih2YXIgdT0tMSxsPShlPWkoZSx0KSkubGVuZ3RoLGg9bC0xLGY9dDtudWxsIT1mJiYrK3U8bDspe3ZhciBkPXMoZVt1XSkscD1uO2lmKCJfX3Byb3RvX18iPT09ZHx8ImNvbnN0cnVjdG9yIj09PWR8fCJwcm90b3R5cGUiPT09ZClyZXR1cm4gdDtpZih1IT1oKXt2YXIgeT1mW2RdO3ZvaWQgMD09PShwPWM/Yyh5LGQsZik6dm9pZCAwKSYmKHA9byh5KT95OmEoZVt1KzFdKT9bXTp7fSl9cihmLGQscCksZj1mW2RdfXJldHVybiB0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTU2KSxpPW4oMTQzKSxhPW4oMTQ0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEoaSh0LHZvaWQgMCxyKSx0KyIiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0NCksaT1uKDcwKSxhPW4oMTU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXtyZXR1cm4gbyYmIm51bWJlciIhPXR5cGVvZiBvJiZpKGUsbixvKSYmKG49bz12b2lkIDApLGU9YShlKSx2b2lkIDA9PT1uPyhuPWUsZT0wKTpuPWEobiksbz12b2lkIDA9PT1vP2U8bj8xOi0xOmEobykscihlLG4sbyx0KX19fSxmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguY2VpbCxyPU1hdGgubWF4O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsaSxhKXtmb3IodmFyIG89LTEscz1yKG4oKGUtdCkvKGl8fDEpKSwwKSxjPUFycmF5KHMpO3MtLTspY1thP3M6KytvXT10LHQrPWk7cmV0dXJuIGN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NSksaT1uKDM0NiksYT1uKDY5KSxvPW4oNzApLHM9YSgoZnVuY3Rpb24odCxlKXtpZihudWxsPT10KXJldHVybltdO3ZhciBuPWUubGVuZ3RoO3JldHVybiBuPjEmJm8odCxlWzBdLGVbMV0pP2U9W106bj4yJiZvKGVbMF0sZVsxXSxlWzJdKSYmKGU9W2VbMF1dKSxpKHQscihlLDEpLFtdKX0pKTt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjgpLGk9big2NiksYT1uKDI2KSxvPW4oMTQxKSxzPW4oMzQ3KSxjPW4oNjIpLHU9bigzNDgpLGw9bigzNiksaD1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7ZT1lLmxlbmd0aD9yKGUsKGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpP2Z1bmN0aW9uKGUpe3JldHVybiBpKGUsMT09PXQubGVuZ3RoP3RbMF06dCl9OnR9KSk6W2xdO3ZhciBmPS0xO2U9cihlLGMoYSkpO3ZhciBkPW8odCwoZnVuY3Rpb24odCxuLGkpe3JldHVybntjcml0ZXJpYTpyKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSkpLGluZGV4OisrZix2YWx1ZTp0fX0pKTtyZXR1cm4gcyhkLChmdW5jdGlvbih0LGUpe3JldHVybiB1KHQsZSxuKX0pKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5sZW5ndGg7Zm9yKHQuc29ydChlKTtuLS07KXRbbl09dFtuXS52YWx1ZTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9LTEsYT10LmNyaXRlcmlhLG89ZS5jcml0ZXJpYSxzPWEubGVuZ3RoLGM9bi5sZW5ndGg7KytpPHM7KXt2YXIgdT1yKGFbaV0sb1tpXSk7aWYodSlyZXR1cm4gaT49Yz91OnUqKCJkZXNjIj09bltpXT8tMToxKX1yZXR1cm4gdC5pbmRleC1lLmluZGV4fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQhPT1lKXt2YXIgbj12b2lkIDAhPT10LGk9bnVsbD09PXQsYT10PT10LG89cih0KSxzPXZvaWQgMCE9PWUsYz1udWxsPT09ZSx1PWU9PWUsbD1yKGUpO2lmKCFjJiYhbCYmIW8mJnQ+ZXx8byYmcyYmdSYmIWMmJiFsfHxpJiZzJiZ1fHwhbiYmdXx8IWEpcmV0dXJuIDE7aWYoIWkmJiFvJiYhbCYmdDxlfHxsJiZuJiZhJiYhaSYmIW98fGMmJm4mJmF8fCFzJiZhfHwhdSlyZXR1cm4tMX1yZXR1cm4gMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU5KSxpPW4oMzUxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0fHxbXSxlfHxbXSxyKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9LTEsaT10Lmxlbmd0aCxhPWUubGVuZ3RoLG89e307KytyPGk7KXt2YXIgcz1yPGE/ZVtyXTp2b2lkIDA7bihvLHRbcl0scyl9cmV0dXJuIG99fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDM1Myk7dC5leHBvcnRzPXtydW46ZnVuY3Rpb24odCl7dmFyIGU9ImdyZWVkeSI9PT10LmdyYXBoKCkuYWN5Y2xpY2VyP2kodCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuZWRnZShlKS53ZWlnaHR9fSh0KSk6ZnVuY3Rpb24odCl7dmFyIGU9W10sbj17fSxpPXt9O2Z1bmN0aW9uIGEobyl7ci5oYXMoaSxvKXx8KGlbb109ITAsbltvXT0hMCxyLmZvckVhY2godC5vdXRFZGdlcyhvKSwoZnVuY3Rpb24odCl7ci5oYXMobix0LncpP2UucHVzaCh0KTphKHQudyl9KSksZGVsZXRlIG5bb10pfXJldHVybiByLmZvckVhY2godC5ub2RlcygpLGEpLGV9KHQpO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7dC5yZW1vdmVFZGdlKGUpLG4uZm9yd2FyZE5hbWU9ZS5uYW1lLG4ucmV2ZXJzZWQ9ITAsdC5zZXRFZGdlKGUudyxlLnYsbixyLnVuaXF1ZUlkKCJyZXYiKSl9KSl9LHVuZG86ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO2lmKG4ucmV2ZXJzZWQpe3QucmVtb3ZlRWRnZShlKTt2YXIgcj1uLmZvcndhcmROYW1lO2RlbGV0ZSBuLnJldmVyc2VkLGRlbGV0ZSBuLmZvcndhcmROYW1lLHQuc2V0RWRnZShlLncsZS52LG4scil9fSkpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9bigyMCkuR3JhcGgsYT1uKDM1NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodC5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgbj1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBpLG89MCxzPTA7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7bi5zZXROb2RlKHQse3Y6dCxpbjowLG91dDowfSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIHI9bi5lZGdlKHQudix0LncpfHwwLGk9ZSh0KSxhPXIraTtuLnNldEVkZ2UodC52LHQudyxhKSxzPU1hdGgubWF4KHMsbi5ub2RlKHQudikub3V0Kz1pKSxvPU1hdGgubWF4KG8sbi5ub2RlKHQudykuaW4rPWkpfSkpO3ZhciB1PXIucmFuZ2UocytvKzMpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGF9KSksbD1vKzE7cmV0dXJuIHIuZm9yRWFjaChuLm5vZGVzKCksKGZ1bmN0aW9uKHQpe2ModSxsLG4ubm9kZSh0KSl9KSkse2dyYXBoOm4sYnVja2V0czp1LHplcm9JZHg6bH19KHQsZXx8byksdT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaT1bXSxhPWVbZS5sZW5ndGgtMV0sbz1lWzBdO2Zvcig7dC5ub2RlQ291bnQoKTspe2Zvcig7cj1vLmRlcXVldWUoKTspcyh0LGUsbixyKTtmb3IoO3I9YS5kZXF1ZXVlKCk7KXModCxlLG4scik7aWYodC5ub2RlQ291bnQoKSlmb3IodmFyIGM9ZS5sZW5ndGgtMjtjPjA7LS1jKWlmKHI9ZVtjXS5kZXF1ZXVlKCkpe2k9aS5jb25jYXQocyh0LGUsbixyLCEwKSk7YnJlYWt9fXJldHVybiBpfShuLmdyYXBoLG4uYnVja2V0cyxuLnplcm9JZHgpO3JldHVybiByLmZsYXR0ZW4oci5tYXAodSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZS52LGUudyl9KSksITApfTt2YXIgbz1yLmNvbnN0YW50KDEpO2Z1bmN0aW9uIHModCxlLG4saSxhKXt2YXIgbz1hP1tdOnZvaWQgMDtyZXR1cm4gci5mb3JFYWNoKHQuaW5FZGdlcyhpLnYpLChmdW5jdGlvbihyKXt2YXIgaT10LmVkZ2Uocikscz10Lm5vZGUoci52KTthJiZvLnB1c2goe3Y6ci52LHc6ci53fSkscy5vdXQtPWksYyhlLG4scyl9KSksci5mb3JFYWNoKHQub3V0RWRnZXMoaS52KSwoZnVuY3Rpb24ocil7dmFyIGk9dC5lZGdlKHIpLGE9ci53LG89dC5ub2RlKGEpO28uaW4tPWksYyhlLG4sbyl9KSksdC5yZW1vdmVOb2RlKGkudiksb31mdW5jdGlvbiBjKHQsZSxuKXtuLm91dD9uLmluP3Rbbi5vdXQtbi5pbitlXS5lbnF1ZXVlKG4pOnRbdC5sZW5ndGgtMV0uZW5xdWV1ZShuKTp0WzBdLmVucXVldWUobil9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD17fTt0Ll9uZXh0PXQuX3ByZXY9dCx0aGlzLl9zZW50aW5lbD10fWZ1bmN0aW9uIHIodCl7dC5fcHJldi5fbmV4dD10Ll9uZXh0LHQuX25leHQuX3ByZXY9dC5fcHJldixkZWxldGUgdC5fbmV4dCxkZWxldGUgdC5fcHJldn1mdW5jdGlvbiBpKHQsZSl7aWYoIl9uZXh0IiE9PXQmJiJfcHJldiIhPT10KXJldHVybiBlfXQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmRlcXVldWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zZW50aW5lbCxlPXQuX3ByZXY7aWYoZSE9PXQpcmV0dXJuIHIoZSksZX0sbi5wcm90b3R5cGUuZW5xdWV1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zZW50aW5lbDt0Ll9wcmV2JiZ0Ll9uZXh0JiZyKHQpLHQuX25leHQ9ZS5fbmV4dCxlLl9uZXh0Ll9wcmV2PXQsZS5fbmV4dD10LHQuX3ByZXY9ZX0sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT10aGlzLl9zZW50aW5lbCxuPWUuX3ByZXY7biE9PWU7KXQucHVzaChKU09OLnN0cmluZ2lmeShuLGkpKSxuPW4uX3ByZXY7cmV0dXJuIlsiK3Quam9pbigiLCAiKSsiXSJ9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDkpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3QuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXshZnVuY3Rpb24odCxlKXt2YXIgbixyLGEsbz1lLnYscz10Lm5vZGUobykucmFuayxjPWUudyx1PXQubm9kZShjKS5yYW5rLGw9ZS5uYW1lLGg9dC5lZGdlKGUpLGY9aC5sYWJlbFJhbms7aWYodT09PXMrMSlyZXR1cm47Zm9yKHQucmVtb3ZlRWRnZShlKSxhPTAsKytzO3M8dTsrK2EsKytzKWgucG9pbnRzPVtdLHI9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOmgsZWRnZU9iajplLHJhbms6c30sbj1pLmFkZER1bW15Tm9kZSh0LCJlZGdlIixyLCJfZCIpLHM9PT1mJiYoci53aWR0aD1oLndpZHRoLHIuaGVpZ2h0PWguaGVpZ2h0LHIuZHVtbXk9ImVkZ2UtbGFiZWwiLHIubGFiZWxwb3M9aC5sYWJlbHBvcyksdC5zZXRFZGdlKG8sbix7d2VpZ2h0Omgud2VpZ2h0fSxsKSwwPT09YSYmdC5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2gobiksbz1uO3Quc2V0RWRnZShvLGMse3dlaWdodDpoLndlaWdodH0sbCl9KHQsZSl9KSl9LHVuZG86ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZ3JhcGgoKS5kdW1teUNoYWlucywoZnVuY3Rpb24oZSl7dmFyIG4scj10Lm5vZGUoZSksaT1yLmVkZ2VMYWJlbDtmb3IodC5zZXRFZGdlKHIuZWRnZU9iaixpKTtyLmR1bW15OyluPXQuc3VjY2Vzc29ycyhlKVswXSx0LnJlbW92ZU5vZGUoZSksaS5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSwiZWRnZS1sYWJlbCI9PT1yLmR1bW15JiYoaS54PXIueCxpLnk9ci55LGkud2lkdGg9ci53aWR0aCxpLmhlaWdodD1yLmhlaWdodCksZT1uLHI9dC5ub2RlKGUpfSkpfX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MSkubG9uZ2VzdFBhdGgsaT1uKDE2NCksYT1uKDM1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0LmdyYXBoKCkucmFua2VyKXtjYXNlIm5ldHdvcmstc2ltcGxleCI6cyh0KTticmVhaztjYXNlInRpZ2h0LXRyZWUiOiFmdW5jdGlvbih0KXtyKHQpLGkodCl9KHQpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjpvKHQpO2JyZWFrO2RlZmF1bHQ6cyh0KX19O3ZhciBvPXI7ZnVuY3Rpb24gcyh0KXthKHQpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigxNjQpLGE9big3MSkuc2xhY2ssbz1uKDcxKS5sb25nZXN0UGF0aCxzPW4oMjApLmFsZy5wcmVvcmRlcixjPW4oMjApLmFsZy5wb3N0b3JkZXIsdT1uKDkpLnNpbXBsaWZ5O2Z1bmN0aW9uIGwodCl7dD11KHQpLG8odCk7dmFyIGUsbj1pKHQpO2ZvcihkKG4pLGgobix0KTtlPXkobik7KW0obix0LGUsZyhuLHQsZSkpfWZ1bmN0aW9uIGgodCxlKXt2YXIgbj1jKHQsdC5ub2RlcygpKTtuPW4uc2xpY2UoMCxuLmxlbmd0aC0xKSxyLmZvckVhY2gobiwoZnVuY3Rpb24obil7IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lm5vZGUobikucGFyZW50O3QuZWRnZShuLHIpLmN1dHZhbHVlPWYodCxlLG4pfSh0LGUsbil9KSl9ZnVuY3Rpb24gZih0LGUsbil7dmFyIGk9dC5ub2RlKG4pLnBhcmVudCxhPSEwLG89ZS5lZGdlKG4saSkscz0wO3JldHVybiBvfHwoYT0hMSxvPWUuZWRnZShpLG4pKSxzPW8ud2VpZ2h0LHIuZm9yRWFjaChlLm5vZGVFZGdlcyhuKSwoZnVuY3Rpb24ocil7dmFyIG8sYyx1PXIudj09PW4sbD11P3IudzpyLnY7aWYobCE9PWkpe3ZhciBoPXU9PT1hLGY9ZS5lZGdlKHIpLndlaWdodDtpZihzKz1oP2Y6LWYsbz1uLGM9bCx0Lmhhc0VkZ2UobyxjKSl7dmFyIGQ9dC5lZGdlKG4sbCkuY3V0dmFsdWU7cys9aD8tZDpkfX19KSksc31mdW5jdGlvbiBkKHQsZSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT10Lm5vZGVzKClbMF0pLHAodCx7fSwxLGUpfWZ1bmN0aW9uIHAodCxlLG4saSxhKXt2YXIgbz1uLHM9dC5ub2RlKGkpO3JldHVybiBlW2ldPSEwLHIuZm9yRWFjaCh0Lm5laWdoYm9ycyhpKSwoZnVuY3Rpb24oYSl7ci5oYXMoZSxhKXx8KG49cCh0LGUsbixhLGkpKX0pKSxzLmxvdz1vLHMubGltPW4rKyxhP3MucGFyZW50PWE6ZGVsZXRlIHMucGFyZW50LG59ZnVuY3Rpb24geSh0KXtyZXR1cm4gci5maW5kKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZWRnZShlKS5jdXR2YWx1ZTwwfSkpfWZ1bmN0aW9uIGcodCxlLG4pe3ZhciBpPW4udixvPW4udztlLmhhc0VkZ2UoaSxvKXx8KGk9bi53LG89bi52KTt2YXIgcz10Lm5vZGUoaSksYz10Lm5vZGUobyksdT1zLGw9ITE7cy5saW0+Yy5saW0mJih1PWMsbD0hMCk7dmFyIGg9ci5maWx0ZXIoZS5lZGdlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gbD09PXYodCx0Lm5vZGUoZS52KSx1KSYmbCE9PXYodCx0Lm5vZGUoZS53KSx1KX0pKTtyZXR1cm4gci5taW5CeShoLChmdW5jdGlvbih0KXtyZXR1cm4gYShlLHQpfSkpfWZ1bmN0aW9uIG0odCxlLG4saSl7dmFyIGE9bi52LG89bi53O3QucmVtb3ZlRWRnZShhLG8pLHQuc2V0RWRnZShpLnYsaS53LHt9KSxkKHQpLGgodCxlKSxmdW5jdGlvbih0LGUpe3ZhciBuPXIuZmluZCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe3JldHVybiFlLm5vZGUodCkucGFyZW50fSkpLGk9cyh0LG4pO2k9aS5zbGljZSgxKSxyLmZvckVhY2goaSwoZnVuY3Rpb24obil7dmFyIHI9dC5ub2RlKG4pLnBhcmVudCxpPWUuZWRnZShuLHIpLGE9ITE7aXx8KGk9ZS5lZGdlKHIsbiksYT0hMCksZS5ub2RlKG4pLnJhbms9ZS5ub2RlKHIpLnJhbmsrKGE/aS5taW5sZW46LWkubWlubGVuKX0pKX0odCxlKX1mdW5jdGlvbiB2KHQsZSxuKXtyZXR1cm4gbi5sb3c8PWUubGltJiZlLmxpbTw9bi5saW19dC5leHBvcnRzPWwsbC5pbml0TG93TGltVmFsdWVzPWQsbC5pbml0Q3V0VmFsdWVzPWgsbC5jYWxjQ3V0VmFsdWU9ZixsLmxlYXZlRWRnZT15LGwuZW50ZXJFZGdlPWcsbC5leGNoYW5nZUVkZ2VzPW19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT17fSxuPTA7ZnVuY3Rpb24gaShhKXt2YXIgbz1uO3IuZm9yRWFjaCh0LmNoaWxkcmVuKGEpLGkpLGVbYV09e2xvdzpvLGxpbTpuKyt9fXJldHVybiByLmZvckVhY2godC5jaGlsZHJlbigpLGkpLGV9KHQpO3IuZm9yRWFjaCh0LmdyYXBoKCkuZHVtbXlDaGFpbnMsKGZ1bmN0aW9uKG4pe2Zvcih2YXIgcj10Lm5vZGUobiksaT1yLmVkZ2VPYmosYT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG89W10scz1bXSxjPU1hdGgubWluKGVbbl0ubG93LGVbcl0ubG93KSx1PU1hdGgubWF4KGVbbl0ubGltLGVbcl0ubGltKTtpPW47ZG97aT10LnBhcmVudChpKSxvLnB1c2goaSl9d2hpbGUoaSYmKGVbaV0ubG93PmN8fHU+ZVtpXS5saW0pKTthPWksaT1yO2Zvcig7KGk9dC5wYXJlbnQoaSkpIT09YTspcy5wdXNoKGkpO3JldHVybntwYXRoOm8uY29uY2F0KHMucmV2ZXJzZSgpKSxsY2E6YX19KHQsZSxpLnYsaS53KSxvPWEucGF0aCxzPWEubGNhLGM9MCx1PW9bY10sbD0hMDtuIT09aS53Oyl7aWYocj10Lm5vZGUobiksbCl7Zm9yKDsodT1vW2NdKSE9PXMmJnQubm9kZSh1KS5tYXhSYW5rPHIucmFuazspYysrO3U9PT1zJiYobD0hMSl9aWYoIWwpe2Zvcig7YzxvLmxlbmd0aC0xJiZ0Lm5vZGUodT1vW2MrMV0pLm1pblJhbms8PXIucmFuazspYysrO3U9b1tjXX10LnNldFBhcmVudChuLHUpLG49dC5zdWNjZXNzb3JzKG4pWzBdfX0pKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9big5KTt0LmV4cG9ydHM9e3J1bjpmdW5jdGlvbih0KXt2YXIgZT1pLmFkZER1bW15Tm9kZSh0LCJyb290Iix7fSwiX3Jvb3QiKSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiByLmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbihuKXshZnVuY3Rpb24gbihpLGEpe3ZhciBvPXQuY2hpbGRyZW4oaSk7byYmby5sZW5ndGgmJnIuZm9yRWFjaChvLChmdW5jdGlvbih0KXtuKHQsYSsxKX0pKTtlW2ldPWF9KG4sMSl9KSksZX0odCksYT1yLm1heChyLnZhbHVlcyhuKSktMSxvPTIqYSsxO3QuZ3JhcGgoKS5uZXN0aW5nUm9vdD1lLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3QuZWRnZShlKS5taW5sZW4qPW99KSk7dmFyIHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIucmVkdWNlKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZSt0LmVkZ2Uobikud2VpZ2h0fSksMCl9KHQpKzE7ci5mb3JFYWNoKHQuY2hpbGRyZW4oKSwoZnVuY3Rpb24oYyl7IWZ1bmN0aW9uIHQoZSxuLGEsbyxzLGMsdSl7dmFyIGw9ZS5jaGlsZHJlbih1KTtpZighbC5sZW5ndGgpcmV0dXJuIHZvaWQodSE9PW4mJmUuc2V0RWRnZShuLHUse3dlaWdodDowLG1pbmxlbjphfSkpO3ZhciBoPWkuYWRkQm9yZGVyTm9kZShlLCJfYnQiKSxmPWkuYWRkQm9yZGVyTm9kZShlLCJfYmIiKSxkPWUubm9kZSh1KTtlLnNldFBhcmVudChoLHUpLGQuYm9yZGVyVG9wPWgsZS5zZXRQYXJlbnQoZix1KSxkLmJvcmRlckJvdHRvbT1mLHIuZm9yRWFjaChsLChmdW5jdGlvbihyKXt0KGUsbixhLG8scyxjLHIpO3ZhciBpPWUubm9kZShyKSxsPWkuYm9yZGVyVG9wP2kuYm9yZGVyVG9wOnIsZD1pLmJvcmRlckJvdHRvbT9pLmJvcmRlckJvdHRvbTpyLHA9aS5ib3JkZXJUb3A/bzoyKm8seT1sIT09ZD8xOnMtY1t1XSsxO2Uuc2V0RWRnZShoLGwse3dlaWdodDpwLG1pbmxlbjp5LG5lc3RpbmdFZGdlOiEwfSksZS5zZXRFZGdlKGQsZix7d2VpZ2h0OnAsbWlubGVuOnksbmVzdGluZ0VkZ2U6ITB9KX0pKSxlLnBhcmVudCh1KXx8ZS5zZXRFZGdlKG4saCx7d2VpZ2h0OjAsbWlubGVuOnMrY1t1XX0pfSh0LGUsbyxzLGEsbixjKX0pKSx0LmdyYXBoKCkubm9kZVJhbmtGYWN0b3I9b30sY2xlYW51cDpmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoKCk7dC5yZW1vdmVOb2RlKGUubmVzdGluZ1Jvb3QpLGRlbGV0ZSBlLm5lc3RpbmdSb290LHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3QuZWRnZShlKS5uZXN0aW5nRWRnZSYmdC5yZW1vdmVFZGdlKGUpfSkpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9big5KTtmdW5jdGlvbiBhKHQsZSxuLHIsYSxvKXt2YXIgcz17d2lkdGg6MCxoZWlnaHQ6MCxyYW5rOm8sYm9yZGVyVHlwZTplfSxjPWFbZV1bby0xXSx1PWkuYWRkRHVtbXlOb2RlKHQsImJvcmRlciIscyxuKTthW2VdW29dPXUsdC5zZXRQYXJlbnQodSxyKSxjJiZ0LnNldEVkZ2UoYyx1LHt3ZWlnaHQ6MX0pfXQuZXhwb3J0cz1mdW5jdGlvbih0KXtyLmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbiBlKG4pe3ZhciBpPXQuY2hpbGRyZW4obiksbz10Lm5vZGUobik7aWYoaS5sZW5ndGgmJnIuZm9yRWFjaChpLGUpLHIuaGFzKG8sIm1pblJhbmsiKSl7by5ib3JkZXJMZWZ0PVtdLG8uYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBzPW8ubWluUmFuayxjPW8ubWF4UmFuaysxO3M8YzsrK3MpYSh0LCJib3JkZXJMZWZ0IiwiX2JsIixuLG8scyksYSh0LCJib3JkZXJSaWdodCIsIl9iciIsbixvLHMpfX0pKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTtmdW5jdGlvbiBpKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe2EodC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXthKHQuZWRnZShlKSl9KSl9ZnVuY3Rpb24gYSh0KXt2YXIgZT10LndpZHRoO3Qud2lkdGg9dC5oZWlnaHQsdC5oZWlnaHQ9ZX1mdW5jdGlvbiBvKHQpe3QueT0tdC55fWZ1bmN0aW9uIHModCl7dmFyIGU9dC54O3QueD10LnksdC55PWV9dC5leHBvcnRzPXthZGp1c3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsibHIiIT09ZSYmInJsIiE9PWV8fGkodCl9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsiYnQiIT09ZSYmInJsIiE9PWV8fGZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe28odC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5mb3JFYWNoKG4ucG9pbnRzLG8pLHIuaGFzKG4sInkiKSYmbyhuKX0pKX0odCk7ImxyIiE9PWUmJiJybCIhPT1lfHwoIWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ModC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5mb3JFYWNoKG4ucG9pbnRzLHMpLHIuaGFzKG4sIngiKSYmcyhuKX0pKX0odCksaSh0KSl9fX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigzNjMpLGE9bigzNjQpLG89bigzNjUpLHM9bigzNjkpLGM9bigzNzApLHU9bigyMCkuR3JhcGgsbD1uKDkpO2Z1bmN0aW9uIGgodCxlLG4pe3JldHVybiByLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gcyh0LGUsbil9KSl9ZnVuY3Rpb24gZih0LGUpe3ZhciBuPW5ldyB1O3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt2YXIgaT10LmdyYXBoKCkucm9vdCxhPW8odCxpLG4sZSk7ci5mb3JFYWNoKGEudnMsKGZ1bmN0aW9uKGUsbil7dC5ub2RlKGUpLm9yZGVyPW59KSksYyh0LG4sYS52cyl9KSl9ZnVuY3Rpb24gZCh0LGUpe3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSxuKXt0Lm5vZGUoZSkub3JkZXI9bn0pKX0pKX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bC5tYXhSYW5rKHQpLG49aCh0LHIucmFuZ2UoMSxlKzEpLCJpbkVkZ2VzIiksbz1oKHQsci5yYW5nZShlLTEsLTEsLTEpLCJvdXRFZGdlcyIpLHM9aSh0KTtkKHQscyk7Zm9yKHZhciBjLHU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHA9MCx5PTA7eTw0OysrcCwrK3kpe2YocCUyP246byxwJTQ+PTIpLHM9bC5idWlsZExheWVyTWF0cml4KHQpO3ZhciBnPWEodCxzKTtnPHUmJih5PTAsYz1yLmNsb25lRGVlcChzKSx1PWcpfWQodCxjKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj1yLmZpbHRlcih0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiF0LmNoaWxkcmVuKGUpLmxlbmd0aH0pKSxpPXIubWF4KHIubWFwKG4sKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksYT1yLm1hcChyLnJhbmdlKGkrMSksKGZ1bmN0aW9uKCl7cmV0dXJuW119KSk7dmFyIG89ci5zb3J0QnkobiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpO3JldHVybiByLmZvckVhY2gobywoZnVuY3Rpb24gbihpKXtpZihyLmhhcyhlLGkpKXJldHVybjtlW2ldPSEwO3ZhciBvPXQubm9kZShpKTthW28ucmFua10ucHVzaChpKSxyLmZvckVhY2godC5zdWNjZXNzb3JzKGkpLG4pfSkpLGF9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCk7ZnVuY3Rpb24gaSh0LGUsbil7Zm9yKHZhciBpPXIuemlwT2JqZWN0KG4sci5tYXAobiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKSksYT1yLmZsYXR0ZW4oci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuc29ydEJ5KHIubWFwKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe3JldHVybntwb3M6aVtlLnddLHdlaWdodDp0LmVkZ2UoZSkud2VpZ2h0fX0pKSwicG9zIil9KSksITApLG89MTtvPG4ubGVuZ3RoOylvPDw9MTt2YXIgcz0yKm8tMTtvLT0xO3ZhciBjPXIubWFwKG5ldyBBcnJheShzKSwoZnVuY3Rpb24oKXtyZXR1cm4gMH0pKSx1PTA7cmV0dXJuIHIuZm9yRWFjaChhLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQucG9zK287Y1tlXSs9dC53ZWlnaHQ7Zm9yKHZhciBuPTA7ZT4wOyllJTImJihuKz1jW2UrMV0pLGNbZT1lLTE+PjFdKz10LndlaWdodDt1Kz10LndlaWdodCpufSkpKSx1fXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLHI9MTtyPGUubGVuZ3RoOysrciluKz1pKHQsZVtyLTFdLGVbcl0pO3JldHVybiBufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDM2NiksYT1uKDM2Nyksbz1uKDM2OCk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLHMsYyl7dmFyIHU9ZS5jaGlsZHJlbihuKSxsPWUubm9kZShuKSxoPWw/bC5ib3JkZXJMZWZ0OnZvaWQgMCxmPWw/bC5ib3JkZXJSaWdodDp2b2lkIDAsZD17fTtoJiYodT1yLmZpbHRlcih1LChmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWgmJnQhPT1mfSkpKTt2YXIgcD1pKGUsdSk7ci5mb3JFYWNoKHAsKGZ1bmN0aW9uKG4pe2lmKGUuY2hpbGRyZW4obi52KS5sZW5ndGgpe3ZhciBpPXQoZSxuLnYscyxjKTtkW24udl09aSxyLmhhcyhpLCJiYXJ5Y2VudGVyIikmJihhPW4sbz1pLHIuaXNVbmRlZmluZWQoYS5iYXJ5Y2VudGVyKT8oYS5iYXJ5Y2VudGVyPW8uYmFyeWNlbnRlcixhLndlaWdodD1vLndlaWdodCk6KGEuYmFyeWNlbnRlcj0oYS5iYXJ5Y2VudGVyKmEud2VpZ2h0K28uYmFyeWNlbnRlcipvLndlaWdodCkvKGEud2VpZ2h0K28ud2VpZ2h0KSxhLndlaWdodCs9by53ZWlnaHQpKX12YXIgYSxvfSkpO3ZhciB5PWEocCxzKTshZnVuY3Rpb24odCxlKXtyLmZvckVhY2godCwoZnVuY3Rpb24odCl7dC52cz1yLmZsYXR0ZW4odC52cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdP2VbdF0udnM6dH0pKSwhMCl9KSl9KHksZCk7dmFyIGc9byh5LGMpO2lmKGgmJihnLnZzPXIuZmxhdHRlbihbaCxnLnZzLGZdLCEwKSxlLnByZWRlY2Vzc29ycyhoKS5sZW5ndGgpKXt2YXIgbT1lLm5vZGUoZS5wcmVkZWNlc3NvcnMoaClbMF0pLHY9ZS5ub2RlKGUucHJlZGVjZXNzb3JzKGYpWzBdKTtyLmhhcyhnLCJiYXJ5Y2VudGVyIil8fChnLmJhcnljZW50ZXI9MCxnLndlaWdodD0wKSxnLmJhcnljZW50ZXI9KGcuYmFyeWNlbnRlcipnLndlaWdodCttLm9yZGVyK3Yub3JkZXIpLyhnLndlaWdodCsyKSxnLndlaWdodCs9Mn1yZXR1cm4gZ319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByLm1hcChlLChmdW5jdGlvbihlKXt2YXIgbj10LmluRWRnZXMoZSk7aWYobi5sZW5ndGgpe3ZhciBpPXIucmVkdWNlKG4sKGZ1bmN0aW9uKGUsbil7dmFyIHI9dC5lZGdlKG4pLGk9dC5ub2RlKG4udik7cmV0dXJue3N1bTplLnN1bStyLndlaWdodCppLm9yZGVyLHdlaWdodDplLndlaWdodCtyLndlaWdodH19KSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djplLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1yZXR1cm57djplfX0pKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTtyZXR1cm4gci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsZSl7dmFyIGk9blt0LnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbdC52XSxpOmV9O3IuaXNVbmRlZmluZWQodC5iYXJ5Y2VudGVyKXx8KGkuYmFyeWNlbnRlcj10LmJhcnljZW50ZXIsaS53ZWlnaHQ9dC53ZWlnaHQpfSkpLHIuZm9yRWFjaChlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdC52XSxpPW5bdC53XTtyLmlzVW5kZWZpbmVkKGUpfHxyLmlzVW5kZWZpbmVkKGkpfHwoaS5pbmRlZ3JlZSsrLGUub3V0LnB1c2goblt0LnddKSl9KSksZnVuY3Rpb24odCl7dmFyIGU9W107ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5tZXJnZWR8fChyLmlzVW5kZWZpbmVkKGUuYmFyeWNlbnRlcil8fHIuaXNVbmRlZmluZWQodC5iYXJ5Y2VudGVyKXx8ZS5iYXJ5Y2VudGVyPj10LmJhcnljZW50ZXIpJiZmdW5jdGlvbih0LGUpe3ZhciBuPTAscj0wO3Qud2VpZ2h0JiYobis9dC5iYXJ5Y2VudGVyKnQud2VpZ2h0LHIrPXQud2VpZ2h0KTtlLndlaWdodCYmKG4rPWUuYmFyeWNlbnRlciplLndlaWdodCxyKz1lLndlaWdodCk7dC52cz1lLnZzLmNvbmNhdCh0LnZzKSx0LmJhcnljZW50ZXI9bi9yLHQud2VpZ2h0PXIsdC5pPU1hdGgubWluKGUuaSx0LmkpLGUubWVyZ2VkPSEwfSh0LGUpfX1mdW5jdGlvbiBpKGUpe3JldHVybiBmdW5jdGlvbihuKXtuLmluLnB1c2goZSksMD09LS1uLmluZGVncmVlJiZ0LnB1c2gobil9fWZvcig7dC5sZW5ndGg7KXt2YXIgYT10LnBvcCgpO2UucHVzaChhKSxyLmZvckVhY2goYS5pbi5yZXZlcnNlKCksbihhKSksci5mb3JFYWNoKGEub3V0LGkoYSkpfXJldHVybiByLm1hcChyLmZpbHRlcihlLChmdW5jdGlvbih0KXtyZXR1cm4hdC5tZXJnZWR9KSksKGZ1bmN0aW9uKHQpe3JldHVybiByLnBpY2sodCxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KSl9KHIuZmlsdGVyKG4sKGZ1bmN0aW9uKHQpe3JldHVybiF0LmluZGVncmVlfSkpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9big5KTtmdW5jdGlvbiBhKHQsZSxuKXtmb3IodmFyIGk7ZS5sZW5ndGgmJihpPXIubGFzdChlKSkuaTw9bjspZS5wb3AoKSx0LnB1c2goaS52cyksbisrO3JldHVybiBufXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWkucGFydGl0aW9uKHQsKGZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0LCJiYXJ5Y2VudGVyIil9KSksbz1uLmxocyxzPXIuc29ydEJ5KG4ucmhzLChmdW5jdGlvbih0KXtyZXR1cm4tdC5pfSkpLGM9W10sdT0wLGw9MCxoPTA7by5zb3J0KChmPSEhZSxmdW5jdGlvbih0LGUpe3JldHVybiB0LmJhcnljZW50ZXI8ZS5iYXJ5Y2VudGVyPy0xOnQuYmFyeWNlbnRlcj5lLmJhcnljZW50ZXI/MTpmP2UuaS10Lmk6dC5pLWUuaX0pKSxoPWEoYyxzLGgpLHIuZm9yRWFjaChvLChmdW5jdGlvbih0KXtoKz10LnZzLmxlbmd0aCxjLnB1c2godC52cyksdSs9dC5iYXJ5Y2VudGVyKnQud2VpZ2h0LGwrPXQud2VpZ2h0LGg9YShjLHMsaCl9KSk7dmFyIGY7dmFyIGQ9e3ZzOnIuZmxhdHRlbihjLCEwKX07bCYmKGQuYmFyeWNlbnRlcj11L2wsZC53ZWlnaHQ9bCk7cmV0dXJuIGR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KSxpPW4oMjApLkdyYXBoO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGE9ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKDt0Lmhhc05vZGUoZT1yLnVuaXF1ZUlkKCJfcm9vdCIpKTspO3JldHVybiBlfSh0KSxvPW5ldyBpKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290OmF9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpfSkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihpKXt2YXIgcz10Lm5vZGUoaSksYz10LnBhcmVudChpKTsocy5yYW5rPT09ZXx8cy5taW5SYW5rPD1lJiZlPD1zLm1heFJhbmspJiYoby5zZXROb2RlKGkpLG8uc2V0UGFyZW50KGksY3x8YSksci5mb3JFYWNoKHRbbl0oaSksKGZ1bmN0aW9uKGUpe3ZhciBuPWUudj09PWk/ZS53OmUudixhPW8uZWRnZShuLGkpLHM9ci5pc1VuZGVmaW5lZChhKT8wOmEud2VpZ2h0O28uc2V0RWRnZShuLGkse3dlaWdodDp0LmVkZ2UoZSkud2VpZ2h0K3N9KX0pKSxyLmhhcyhzLCJtaW5SYW5rIikmJm8uc2V0Tm9kZShpLHtib3JkZXJMZWZ0OnMuYm9yZGVyTGVmdFtlXSxib3JkZXJSaWdodDpzLmJvcmRlclJpZ2h0W2VdfSkpfSkpLG99fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE9e307ci5mb3JFYWNoKG4sKGZ1bmN0aW9uKG4pe2Zvcih2YXIgcixvLHM9dC5wYXJlbnQobik7czspe2lmKChyPXQucGFyZW50KHMpKT8obz1hW3JdLGFbcl09cyk6KG89aSxpPXMpLG8mJm8hPT1zKXJldHVybiB2b2lkIGUuc2V0RWRnZShvLHMpO3M9cn19KSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDkpLGE9bigzNzIpLnBvc2l0aW9uWDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQpe3ZhciBlPWkuYnVpbGRMYXllck1hdHJpeCh0KSxuPXQuZ3JhcGgoKS5yYW5rc2VwLGE9MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk9ci5tYXgoci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5oZWlnaHR9KSkpO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkueT1hK2kvMn0pKSxhKz1pK259KSl9KSh0PWkuYXNOb25Db21wb3VuZEdyYXBoKHQpKSxyLmZvckVhY2goYSh0KSwoZnVuY3Rpb24oZSxuKXt0Lm5vZGUobikueD1lfSkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigyMCkuR3JhcGgsYT1uKDkpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbj17fTtyZXR1cm4gci5yZWR1Y2UoZSwoZnVuY3Rpb24oZSxpKXt2YXIgYT0wLG89MCxzPWUubGVuZ3RoLHU9ci5sYXN0KGkpO3JldHVybiByLmZvckVhY2goaSwoZnVuY3Rpb24oZSxsKXt2YXIgaD1mdW5jdGlvbih0LGUpe2lmKHQubm9kZShlKS5kdW1teSlyZXR1cm4gci5maW5kKHQucHJlZGVjZXNzb3JzKGUpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLmR1bW15fSkpfSh0LGUpLGY9aD90Lm5vZGUoaCkub3JkZXI6czsoaHx8ZT09PXUpJiYoci5mb3JFYWNoKGkuc2xpY2UobyxsKzEpLChmdW5jdGlvbihlKXtyLmZvckVhY2godC5wcmVkZWNlc3NvcnMoZSksKGZ1bmN0aW9uKHIpe3ZhciBpPXQubm9kZShyKSxvPWkub3JkZXI7IShvPGF8fGY8byl8fGkuZHVtbXkmJnQubm9kZShlKS5kdW1teXx8YyhuLHIsZSl9KSl9KSksbz1sKzEsYT1mKX0pKSxpfSkpLG59ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPXt9O2Z1bmN0aW9uIGkoZSxpLGEsbyxzKXt2YXIgdTtyLmZvckVhY2goci5yYW5nZShpLGEpLChmdW5jdGlvbihpKXt1PWVbaV0sdC5ub2RlKHUpLmR1bW15JiZyLmZvckVhY2godC5wcmVkZWNlc3NvcnModSksKGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKTtyLmR1bW15JiYoci5vcmRlcjxvfHxyLm9yZGVyPnMpJiZjKG4sZSx1KX0pKX0pKX1yZXR1cm4gci5yZWR1Y2UoZSwoZnVuY3Rpb24oZSxuKXt2YXIgYSxvPS0xLHM9MDtyZXR1cm4gci5mb3JFYWNoKG4sKGZ1bmN0aW9uKHIsYyl7aWYoImJvcmRlciI9PT10Lm5vZGUocikuZHVtbXkpe3ZhciB1PXQucHJlZGVjZXNzb3JzKHIpO3UubGVuZ3RoJiYoYT10Lm5vZGUodVswXSkub3JkZXIsaShuLHMsYyxvLGEpLHM9YyxvPWEpfWkobixzLG4ubGVuZ3RoLGEsZS5sZW5ndGgpfSkpLG59KSksbn1mdW5jdGlvbiBjKHQsZSxuKXtpZihlPm4pe3ZhciByPWU7ZT1uLG49cn12YXIgaT10W2VdO2l8fCh0W2VdPWk9e30pLGlbbl09ITB9ZnVuY3Rpb24gdSh0LGUsbil7aWYoZT5uKXt2YXIgaT1lO2U9bixuPWl9cmV0dXJuIHIuaGFzKHRbZV0sbil9ZnVuY3Rpb24gbCh0LGUsbixpKXt2YXIgYT17fSxvPXt9LHM9e307cmV0dXJuIHIuZm9yRWFjaChlLChmdW5jdGlvbih0KXtyLmZvckVhY2godCwoZnVuY3Rpb24odCxlKXthW3RdPXQsb1t0XT10LHNbdF09ZX0pKX0pKSxyLmZvckVhY2goZSwoZnVuY3Rpb24odCl7dmFyIGU9LTE7ci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe3ZhciBjPWkodCk7aWYoYy5sZW5ndGgpZm9yKHZhciBsPSgoYz1yLnNvcnRCeShjLChmdW5jdGlvbih0KXtyZXR1cm4gc1t0XX0pKSkubGVuZ3RoLTEpLzIsaD1NYXRoLmZsb29yKGwpLGY9TWF0aC5jZWlsKGwpO2g8PWY7KytoKXt2YXIgZD1jW2hdO29bdF09PT10JiZlPHNbZF0mJiF1KG4sdCxkKSYmKG9bZF09dCxvW3RdPWFbdF09YVtkXSxlPXNbZF0pfX0pKX0pKSx7cm9vdDphLGFsaWduOm99fWZ1bmN0aW9uIGgodCxlLG4sYSxvKXt2YXIgcz17fSxjPWZ1bmN0aW9uKHQsZSxuLGEpe3ZhciBvPW5ldyBpLHM9dC5ncmFwaCgpLGM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbihpLGEsbyl7dmFyIHMsYz1pLm5vZGUoYSksdT1pLm5vZGUobyksbD0wO2lmKGwrPWMud2lkdGgvMixyLmhhcyhjLCJsYWJlbHBvcyIpKXN3aXRjaChjLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6cz0tYy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6cz1jLndpZHRoLzJ9aWYocyYmKGwrPW4/czotcykscz0wLGwrPShjLmR1bW15P2U6dCkvMixsKz0odS5kdW1teT9lOnQpLzIsbCs9dS53aWR0aC8yLHIuaGFzKHUsImxhYmVscG9zIikpc3dpdGNoKHUubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjpzPXUud2lkdGgvMjticmVhaztjYXNlInIiOnM9LXUud2lkdGgvMn1yZXR1cm4gcyYmKGwrPW4/czotcykscz0wLGx9fShzLm5vZGVzZXAscy5lZGdlc2VwLGEpO3JldHVybiByLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciByPW5bZV07aWYoby5zZXROb2RlKHIpLGkpe3ZhciBhPW5baV0scz1vLmVkZ2UoYSxyKTtvLnNldEVkZ2UoYSxyLE1hdGgubWF4KGModCxlLGkpLHN8fDApKX1pPWV9KSl9KSksb30odCxlLG4sbyksdT1vPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIG49Yy5ub2RlcygpLHI9bi5wb3AoKSxpPXt9O3I7KWlbcl0/dChyKTooaVtyXT0hMCxuLnB1c2gociksbj1uLmNvbmNhdChlKHIpKSkscj1uLnBvcCgpfXJldHVybiBsKChmdW5jdGlvbih0KXtzW3RdPWMuaW5FZGdlcyh0KS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsc1tlLnZdK2MuZWRnZShlKSl9KSwwKX0pLGMucHJlZGVjZXNzb3JzLmJpbmQoYykpLGwoKGZ1bmN0aW9uKGUpe3ZhciBuPWMub3V0RWRnZXMoZSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LHNbZS53XS1jLmVkZ2UoZSkpfSksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyPXQubm9kZShlKTtuIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZyLmJvcmRlclR5cGUhPT11JiYoc1tlXT1NYXRoLm1heChzW2VdLG4pKX0pLGMuc3VjY2Vzc29ycy5iaW5kKGMpKSxyLmZvckVhY2goYSwoZnVuY3Rpb24odCl7c1t0XT1zW25bdF1dfSkpLHN9ZnVuY3Rpb24gZih0LGUpe3JldHVybiByLm1pbkJ5KHIudmFsdWVzKGUpLChmdW5jdGlvbihlKXt2YXIgbj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIHIuZm9ySW4oZSwoZnVuY3Rpb24oZSxyKXt2YXIgYT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vZGUoZSkud2lkdGh9KHQscikvMjtuPU1hdGgubWF4KGUrYSxuKSxpPU1hdGgubWluKGUtYSxpKX0pKSxuLWl9KSl9ZnVuY3Rpb24gZCh0LGUpe3ZhciBuPXIudmFsdWVzKGUpLGk9ci5taW4obiksYT1yLm1heChuKTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihuKXtyLmZvckVhY2goWyJsIiwiciJdLChmdW5jdGlvbihvKXt2YXIgcyxjPW4rbyx1PXRbY107aWYodSE9PWUpe3ZhciBsPXIudmFsdWVzKHUpOyhzPSJsIj09PW8/aS1yLm1pbihsKTphLXIubWF4KGwpKSYmKHRbY109ci5tYXBWYWx1ZXModSwoZnVuY3Rpb24odCl7cmV0dXJuIHQrc30pKSl9fSkpfSkpfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gci5tYXBWYWx1ZXModC51bCwoZnVuY3Rpb24obixpKXtpZihlKXJldHVybiB0W2UudG9Mb3dlckNhc2UoKV1baV07dmFyIGE9ci5zb3J0Qnkoci5tYXAodCxpKSk7cmV0dXJuKGFbMV0rYVsyXSkvMn0pKX10LmV4cG9ydHM9e3Bvc2l0aW9uWDpmdW5jdGlvbih0KXt2YXIgZSxuPWEuYnVpbGRMYXllck1hdHJpeCh0KSxpPXIubWVyZ2Uobyh0LG4pLHModCxuKSksYz17fTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihhKXtlPSJ1Ij09PWE/bjpyLnZhbHVlcyhuKS5yZXZlcnNlKCksci5mb3JFYWNoKFsibCIsInIiXSwoZnVuY3Rpb24obil7InIiPT09biYmKGU9ci5tYXAoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHIudmFsdWVzKHQpLnJldmVyc2UoKX0pKSk7dmFyIG89KCJ1Ij09PWE/dC5wcmVkZWNlc3NvcnM6dC5zdWNjZXNzb3JzKS5iaW5kKHQpLHM9bCh0LGUsaSxvKSx1PWgodCxlLHMucm9vdCxzLmFsaWduLCJyIj09PW4pOyJyIj09PW4mJih1PXIubWFwVmFsdWVzKHUsKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpKSxjW2Erbl09dX0pKX0pKTt2YXIgdT1mKHQsYyk7cmV0dXJuIGQoYyx1KSxwKGMsdC5ncmFwaCgpLmFsaWduKX0sZmluZFR5cGUxQ29uZmxpY3RzOm8sZmluZFR5cGUyQ29uZmxpY3RzOnMsYWRkQ29uZmxpY3Q6YyxoYXNDb25mbGljdDp1LHZlcnRpY2FsQWxpZ25tZW50OmwsaG9yaXpvbnRhbENvbXBhY3Rpb246aCxhbGlnbkNvb3JkaW5hdGVzOmQsZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQ6ZixiYWxhbmNlOnB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KSxpPW4oOSksYT1uKDIwKS5HcmFwaDt0LmV4cG9ydHM9e2RlYnVnT3JkZXJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9aS5idWlsZExheWVyTWF0cml4KHQpLG49bmV3IGEoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KS5zZXRHcmFwaCh7fSk7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe24uc2V0Tm9kZShlLHtsYWJlbDplfSksbi5zZXRQYXJlbnQoZSwibGF5ZXIiK3Qubm9kZShlKS5yYW5rKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbih0KXtuLnNldEVkZ2UodC52LHQudyx7fSx0Lm5hbWUpfSkpLHIuZm9yRWFjaChlLChmdW5jdGlvbih0LGUpe3ZhciBpPSJsYXllciIrZTtuLnNldE5vZGUoaSx7cmFuazoic2FtZSJ9KSxyLnJlZHVjZSh0LChmdW5jdGlvbih0LGUpe3JldHVybiBuLnNldEVkZ2UodCxlLHtzdHlsZToiaW52aXMifSksZX0pKX0pKSxufX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSIwLjguNSJ9LGZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9e25vZGU6bigxNjUpLGNpcmNsZTpuKDE2NiksZWxsaXBzZTpuKDk3KSxwb2x5Z29uOm4oMTY3KSxyZWN0Om4oMTY4KX19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0KmU+MH10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGMsdSxsLGgsZixkLHAseSxnLG07aWYoYT1lLnktdC55LHM9dC54LWUueCx1PWUueCp0LnktdC54KmUueSxkPWEqci54K3Mqci55K3UscD1hKmkueCtzKmkueSt1LDAhPT1kJiYwIT09cCYmbihkLHApKXJldHVybjtpZihvPWkueS1yLnksYz1yLngtaS54LGw9aS54KnIueS1yLngqaS55LGg9byp0LngrYyp0LnkrbCxmPW8qZS54K2MqZS55K2wsMCE9PWgmJjAhPT1mJiZuKGgsZikpcmV0dXJuO2lmKDA9PT0oeT1hKmMtbypzKSlyZXR1cm47cmV0dXJuIGc9TWF0aC5hYnMoeS8yKSx7eDoobT1zKmwtYyp1KTwwPyhtLWcpL3k6KG0rZykveSx5OihtPW8qdS1hKmwpPDA/KG0tZykveToobStnKS95fX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ0KSxpPW4oMzEpLGE9bigxNTMpLmxheW91dDt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKDM3OCksZT1uKDM4MSksaT1uKDM4MiksdT1uKDM4MyksbD1uKDM4NCksaD1uKDM4NSksZj1uKDM4NiksZD1uKDM4NykscD1uKDM4OCkseT1mdW5jdGlvbihuLHkpeyFmdW5jdGlvbih0KXt0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpO3IuaGFzKG4sImxhYmVsIil8fHQuY2hpbGRyZW4oZSkubGVuZ3RofHwobi5sYWJlbD1lKSxyLmhhcyhuLCJwYWRkaW5nWCIpJiZyLmRlZmF1bHRzKG4se3BhZGRpbmdMZWZ0Om4ucGFkZGluZ1gscGFkZGluZ1JpZ2h0Om4ucGFkZGluZ1h9KSxyLmhhcyhuLCJwYWRkaW5nWSIpJiZyLmRlZmF1bHRzKG4se3BhZGRpbmdUb3A6bi5wYWRkaW5nWSxwYWRkaW5nQm90dG9tOm4ucGFkZGluZ1l9KSxyLmhhcyhuLCJwYWRkaW5nIikmJnIuZGVmYXVsdHMobix7cGFkZGluZ0xlZnQ6bi5wYWRkaW5nLHBhZGRpbmdSaWdodDpuLnBhZGRpbmcscGFkZGluZ1RvcDpuLnBhZGRpbmcscGFkZGluZ0JvdHRvbTpuLnBhZGRpbmd9KSxyLmRlZmF1bHRzKG4sbyksci5lYWNoKFsicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLChmdW5jdGlvbih0KXtuW3RdPU51bWJlcihuW3RdKX0pKSxyLmhhcyhuLCJ3aWR0aCIpJiYobi5fcHJldldpZHRoPW4ud2lkdGgpLHIuaGFzKG4sImhlaWdodCIpJiYobi5fcHJldkhlaWdodD1uLmhlaWdodCl9KSksdC5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtyLmhhcyhuLCJsYWJlbCIpfHwobi5sYWJlbD0iIiksci5kZWZhdWx0cyhuLHMpfSkpfSh5KTt2YXIgZz1jKG4sIm91dHB1dCIpLG09YyhnLCJjbHVzdGVycyIpLHY9YyhnLCJlZGdlUGF0aHMiKSxiPWkoYyhnLCJlZGdlTGFiZWxzIikseSkseD10KGMoZywibm9kZXMiKSx5LGQpO2EoeSksbCh4LHkpLGgoYix5KSx1KHYseSxwKTt2YXIgXz1lKG0seSk7ZihfLHkpLGZ1bmN0aW9uKHQpe3IuZWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtyLmhhcyhuLCJfcHJldldpZHRoIik/bi53aWR0aD1uLl9wcmV2V2lkdGg6ZGVsZXRlIG4ud2lkdGgsci5oYXMobiwiX3ByZXZIZWlnaHQiKT9uLmhlaWdodD1uLl9wcmV2SGVpZ2h0OmRlbGV0ZSBuLmhlaWdodCxkZWxldGUgbi5fcHJldldpZHRoLGRlbGV0ZSBuLl9wcmV2SGVpZ2h0fSkpfSh5KX07cmV0dXJuIHkuY3JlYXRlTm9kZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSx5KTp0fSx5LmNyZWF0ZUNsdXN0ZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQseSk6ZX0seS5jcmVhdGVFZGdlTGFiZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQseSk6aX0seS5jcmVhdGVFZGdlUGF0aHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCx5KTp1fSx5LnNoYXBlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10LHkpOmR9LHkuYXJyb3dzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXQseSk6cH0seX07dmFyIG89e3BhZGRpbmdMZWZ0OjEwLHBhZGRpbmdSaWdodDoxMCxwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscng6MCxyeTowLHNoYXBlOiJyZWN0In0scz17YXJyb3doZWFkOiJub3JtYWwiLGN1cnZlOmkuY3VydmVMaW5lYXJ9O2Z1bmN0aW9uIGModCxlKXt2YXIgbj10LnNlbGVjdCgiZy4iK2UpO3JldHVybiBuLmVtcHR5KCkmJihuPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGUpKSxufX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ0KSxpPW4oOTgpLGE9bigxNSksbz1uKDMxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBzLGM9ZS5ub2RlcygpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIWEuaXNTdWJncmFwaChlLHQpfSkpLHU9dC5zZWxlY3RBbGwoImcubm9kZSIpLmRhdGEoYywoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkuY2xhc3NlZCgidXBkYXRlIiwhMCk7dS5leGl0KCkucmVtb3ZlKCksdS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSIpLnN0eWxlKCJvcGFjaXR5IiwwKSwodT10LnNlbGVjdEFsbCgiZy5ub2RlIikpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBzPWUubm9kZSh0KSxjPW8uc2VsZWN0KHRoaXMpO2EuYXBwbHlDbGFzcyhjLHMuY2xhc3MsKGMuY2xhc3NlZCgidXBkYXRlIik/InVwZGF0ZSAiOiIiKSsibm9kZSIpLGMuc2VsZWN0KCJnLmxhYmVsIikucmVtb3ZlKCk7dmFyIHU9Yy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksbD1pKHUscyksaD1uW3Muc2hhcGVdLGY9ci5waWNrKGwubm9kZSgpLmdldEJCb3goKSwid2lkdGgiLCJoZWlnaHQiKTtzLmVsZW09dGhpcyxzLmlkJiZjLmF0dHIoImlkIixzLmlkKSxzLmxhYmVsSWQmJnUuYXR0cigiaWQiLHMubGFiZWxJZCksci5oYXMocywid2lkdGgiKSYmKGYud2lkdGg9cy53aWR0aCksci5oYXMocywiaGVpZ2h0IikmJihmLmhlaWdodD1zLmhlaWdodCksZi53aWR0aCs9cy5wYWRkaW5nTGVmdCtzLnBhZGRpbmdSaWdodCxmLmhlaWdodCs9cy5wYWRkaW5nVG9wK3MucGFkZGluZ0JvdHRvbSx1LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLnBhZGRpbmdMZWZ0LXMucGFkZGluZ1JpZ2h0KS8yKyIsIisocy5wYWRkaW5nVG9wLXMucGFkZGluZ0JvdHRvbSkvMisiKSIpO3ZhciBkPW8uc2VsZWN0KHRoaXMpO2Quc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIikucmVtb3ZlKCk7dmFyIHA9aChkLGYscykuY2xhc3NlZCgibGFiZWwtY29udGFpbmVyIiwhMCk7YS5hcHBseVN0eWxlKHAscy5zdHlsZSk7dmFyIHk9cC5ub2RlKCkuZ2V0QkJveCgpO3Mud2lkdGg9eS53aWR0aCxzLmhlaWdodD15LmhlaWdodH0pKSxzPXUuZXhpdD91LmV4aXQoKTp1LnNlbGVjdEFsbChudWxsKTtyZXR1cm4gYS5hcHBseVRyYW5zaXRpb24ocyxlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksdX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5hcHBlbmQoInRleHQiKSxpPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPSIiLHI9ITEsaT0wO2k8dC5sZW5ndGg7KytpKWlmKGU9dFtpXSxyKXtzd2l0Y2goZSl7Y2FzZSJuIjpuKz0iXG4iO2JyZWFrO2RlZmF1bHQ6bis9ZX1yPSExfWVsc2UiXFwiPT09ZT9yPSEwOm4rPWU7cmV0dXJuIG59KGUubGFiZWwpLnNwbGl0KCJcbiIpLGE9MDthPGkubGVuZ3RoO2ErKyluLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLmF0dHIoImR5IiwiMWVtIikuYXR0cigieCIsIjEiKS50ZXh0KGlbYV0pO3JldHVybiByLmFwcGx5U3R5bGUobixlLmxhYmVsU3R5bGUpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dDtyZXR1cm4gbi5ub2RlKCkuYXBwZW5kQ2hpbGQoZS5sYWJlbCksci5hcHBseVN0eWxlKG4sZS5sYWJlbFN0eWxlKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTUpLGk9bigzMSksYT1uKDk4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixvPWUubm9kZXMoKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiByLmlzU3ViZ3JhcGgoZSx0KX0pKSxzPXQuc2VsZWN0QWxsKCJnLmNsdXN0ZXIiKS5kYXRhKG8sKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpO3Muc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIGUubm9kZSh0KS5pZH0pKS5zdHlsZSgib3BhY2l0eSIsMCkscz10LnNlbGVjdEFsbCgiZy5jbHVzdGVyIiksci5hcHBseVRyYW5zaXRpb24ocyxlKS5zdHlsZSgib3BhY2l0eSIsMSkscy5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLm5vZGUodCkscj1pLnNlbGVjdCh0aGlzKTtpLnNlbGVjdCh0aGlzKS5hcHBlbmQoInJlY3QiKTt2YXIgbz1yLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTthKG8sbixuLmNsdXN0ZXJMYWJlbFBvcyl9KSkscy5zZWxlY3RBbGwoInJlY3QiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLm5vZGUodCksYT1pLnNlbGVjdCh0aGlzKTtyLmFwcGx5U3R5bGUoYSxuLnN0eWxlKX0pKSxuPXMuZXhpdD9zLmV4aXQoKTpzLnNlbGVjdEFsbChudWxsKTtyZXR1cm4gci5hcHBseVRyYW5zaXRpb24obixlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksc319LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0NCksaT1uKDk4KSxhPW4oMTUpLG89bigzMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scz10LnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKS5kYXRhKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuIGEuZWRnZVRvSWQodCl9KSkuY2xhc3NlZCgidXBkYXRlIiwhMCk7cy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVkZ2VMYWJlbCIsITApLnN0eWxlKCJvcGFjaXR5IiwwKSwocz10LnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49by5zZWxlY3QodGhpcyk7bi5zZWxlY3QoIi5sYWJlbCIpLnJlbW92ZSgpO3ZhciBhPWUuZWRnZSh0KSxzPWkobixlLmVkZ2UodCksMCwwKS5jbGFzc2VkKCJsYWJlbCIsITApLGM9cy5ub2RlKCkuZ2V0QkJveCgpO2EubGFiZWxJZCYmcy5hdHRyKCJpZCIsYS5sYWJlbElkKSxyLmhhcyhhLCJ3aWR0aCIpfHwoYS53aWR0aD1jLndpZHRoKSxyLmhhcyhhLCJoZWlnaHQiKXx8KGEuaGVpZ2h0PWMuaGVpZ2h0KX0pKSxuPXMuZXhpdD9zLmV4aXQoKTpzLnNlbGVjdEFsbChudWxsKTtyZXR1cm4gYS5hcHBseVRyYW5zaXRpb24obixlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksc319LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0NCksaT1uKDE2NSksYT1uKDE1KSxvPW4oMzEpO2Z1bmN0aW9uIHModCxlKXt2YXIgbj0oby5saW5lfHxvLnN2Zy5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKTtyZXR1cm4obi5jdXJ2ZXx8bi5pbnRlcnBvbGF0ZSkodC5jdXJ2ZSksbihlKX10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBjPXQuc2VsZWN0QWxsKCJnLmVkZ2VQYXRoIikuZGF0YShlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3JldHVybiBhLmVkZ2VUb0lkKHQpfSkpLmNsYXNzZWQoInVwZGF0ZSIsITApLHU9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aCIpLnN0eWxlKCJvcGFjaXR5IiwwKTtyZXR1cm4gbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInBhdGgiKS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpLGk9ZS5ub2RlKHQudikuZWxlbTtyZXR1cm4gcyhuLHIucmFuZ2Uobi5wb2ludHMubGVuZ3RoKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGU9KHQ9aSkuZ2V0QkJveCgpLHt4OihuPXQub3duZXJTVkdFbGVtZW50LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKS5tdWx0aXBseSh0LmdldFNjcmVlbkNUTSgpKS50cmFuc2xhdGUoZS53aWR0aC8yLGUuaGVpZ2h0LzIpKS5lLHk6bi5mfTt2YXIgdCxlLG59KSkpfSkpLG4uYXBwZW5kKCJkZWZzIiksbn0oYyxlKTshZnVuY3Rpb24odCxlKXt2YXIgbj10LmV4aXQoKTthLmFwcGx5VHJhbnNpdGlvbihuLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKX0oYyxlKTt2YXIgbD12b2lkIDAhPT1jLm1lcmdlP2MubWVyZ2UodSk6YztyZXR1cm4gYS5hcHBseVRyYW5zaXRpb24obCxlKS5zdHlsZSgib3BhY2l0eSIsMSksbC5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1vLnNlbGVjdCh0aGlzKSxyPWUuZWRnZSh0KTtyLmVsZW09dGhpcyxyLmlkJiZuLmF0dHIoImlkIixyLmlkKSxhLmFwcGx5Q2xhc3MobixyLmNsYXNzLChuLmNsYXNzZWQoInVwZGF0ZSIpPyJ1cGRhdGUgIjoiIikrImVkZ2VQYXRoIil9KSksbC5zZWxlY3RBbGwoInBhdGgucGF0aCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZWRnZSh0KTtuLmFycm93aGVhZElkPXIudW5pcXVlSWQoImFycm93aGVhZCIpO3ZhciBjPW8uc2VsZWN0KHRoaXMpLmF0dHIoIm1hcmtlci1lbmQiLChmdW5jdGlvbigpe3JldHVybiJ1cmwoIisodD1sb2NhdGlvbi5ocmVmLGU9bi5hcnJvd2hlYWRJZCx0LnNwbGl0KCIjIilbMF0rIiMiK2UrIikiKTt2YXIgdCxlfSkpLnN0eWxlKCJmaWxsIiwibm9uZSIpO2EuYXBwbHlUcmFuc2l0aW9uKGMsZSkuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBuPXQuZWRnZShlKSxyPXQubm9kZShlLnYpLGE9dC5ub2RlKGUudyksbz1uLnBvaW50cy5zbGljZSgxLG4ucG9pbnRzLmxlbmd0aC0xKTtyZXR1cm4gby51bnNoaWZ0KGkocixvWzBdKSksby5wdXNoKGkoYSxvW28ubGVuZ3RoLTFdKSkscyhuLG8pfShlLHQpfSkpLGEuYXBwbHlTdHlsZShjLG4uc3R5bGUpfSkpLGwuc2VsZWN0QWxsKCJkZWZzICoiKS5yZW1vdmUoKSxsLnNlbGVjdEFsbCgiZGVmcyIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTsoMCxuW3IuYXJyb3doZWFkXSkoby5zZWxlY3QodGhpcyksci5hcnJvd2hlYWRJZCxyLCJhcnJvd2hlYWQiKX0pKSxsfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE1KSxpPW4oMzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49ZS5ub2RlKHQpO3JldHVybiJ0cmFuc2xhdGUoIituLngrIiwiK24ueSsiKSJ9dC5maWx0ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIWkuc2VsZWN0KHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSkpLmF0dHIoInRyYW5zZm9ybSIsbiksci5hcHBseVRyYW5zaXRpb24odCxlKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixuKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNSksaT1uKDMxKSxhPW4oNDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49ZS5lZGdlKHQpO3JldHVybiBhLmhhcyhuLCJ4Iik/InRyYW5zbGF0ZSgiK24ueCsiLCIrbi55KyIpIjoiIn10LmZpbHRlcigoZnVuY3Rpb24oKXtyZXR1cm4haS5zZWxlY3QodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KSkuYXR0cigidHJhbnNmb3JtIixuKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE1KSxpPW4oMzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiFpLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pKTtmdW5jdGlvbiBhKHQpe3ZhciBuPWUubm9kZSh0KTtyZXR1cm4idHJhbnNsYXRlKCIrbi54KyIsIituLnkrIikifW4uYXR0cigidHJhbnNmb3JtIixhKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGEpLHIuYXBwbHlUcmFuc2l0aW9uKG4uc2VsZWN0QWxsKCJyZWN0IiksZSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5ub2RlKHQpLndpZHRofSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiBlLm5vZGUodCkuaGVpZ2h0fSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4tZS5ub2RlKHQpLndpZHRoLzJ9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybi1lLm5vZGUodCkuaGVpZ2h0LzJ9KSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTY4KSxpPW4oOTcpLGE9bigxNjYpLG89bigxNjcpO3QuZXhwb3J0cz17cmVjdDpmdW5jdGlvbih0LGUsbil7dmFyIGk9dC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJyeCIsbi5yeCkuYXR0cigicnkiLG4ucnkpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiByKG4sdCl9LGl9LGVsbGlwc2U6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lmluc2VydCgiZWxsaXBzZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJyeCIscikuYXR0cigicnkiLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gaShuLHIsYSx0KX0sb30sY2lyY2xlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1NYXRoLm1heChlLndpZHRoLGUuaGVpZ2h0KS8yLGk9dC5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJyIixyKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGEobixyLHQpfSxpfSxkaWFtb25kOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLndpZHRoKk1hdGguU1FSVDIvMixpPWUuaGVpZ2h0Kk1hdGguU1FSVDIvMixhPVt7eDowLHk6LWl9LHt4Oi1yLHk6MH0se3g6MCx5Oml9LHt4OnIseTowfV0scz10Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsYS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gbyhuLGEsdCl9LHN9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTUpO2Z1bmN0aW9uIGkodCxlLG4saSl7dmFyIGE9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtyLmFwcGx5U3R5bGUoYSxuW2krIlN0eWxlIl0pLG5baSsiQ2xhc3MiXSYmYS5hdHRyKCJjbGFzcyIsbltpKyJDbGFzcyJdKX10LmV4cG9ydHM9e2RlZmF1bHQ6aSxub3JtYWw6aSx2ZWU6ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCBMIDQgNSB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtyLmFwcGx5U3R5bGUoYSxuW2krIlN0eWxlIl0pLG5baSsiQ2xhc3MiXSYmYS5hdHRyKCJjbGFzcyIsbltpKyJDbGFzcyJdKX0sdW5kaXJlY3RlZDpmdW5jdGlvbih0LGUsbixpKXt2YXIgYT10LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDUiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO3IuYXBwbHlTdHlsZShhLG5baSsiU3R5bGUiXSksbltpKyJDbGFzcyJdJiZhLmF0dHIoImNsYXNzIixuW2krIkNsYXNzIl0pfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSIwLjYuNCJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5yKGUpO3ZhciByPW4oMjMpLGk9bi5uKHIpLGE9e2RlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LG89e2RlYnVnOmZ1bmN0aW9uKCl7fSxpbmZvOmZ1bmN0aW9uKCl7fSx3YXJuOmZ1bmN0aW9uKCl7fSxlcnJvcjpmdW5jdGlvbigpe30sZmF0YWw6ZnVuY3Rpb24oKXt9fSxzPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJmYXRhbCI7aXNOYU4odCkmJih0PXQudG9Mb3dlckNhc2UoKSx2b2lkIDAhPT1hW3RdJiYodD1hW3RdKSksby50cmFjZT1mdW5jdGlvbigpe30sby5kZWJ1Zz1mdW5jdGlvbigpe30sby5pbmZvPWZ1bmN0aW9uKCl7fSxvLndhcm49ZnVuY3Rpb24oKXt9LG8uZXJyb3I9ZnVuY3Rpb24oKXt9LG8uZmF0YWw9ZnVuY3Rpb24oKXt9LHQ8PWEuZmF0YWwmJihvLmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsYygiRkFUQUwiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szNW0iLGMoIkZBVEFMIikpKSx0PD1hLmVycm9yJiYoby5lcnJvcj1jb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLGMoIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzFtIixjKCJFUlJPUiIpKSksdDw9YS53YXJuJiYoby53YXJuPWNvbnNvbGUud2Fybj9jb25zb2xlLndhcm4uYmluZChjb25zb2xlLGMoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szM20iLGMoIldBUk4iKSkpLHQ8PWEuaW5mbyYmKG8uaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxjKCJJTkZPIiksImNvbG9yOiBsaWdodGJsdWUiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzRtIixjKCJJTkZPIikpKSx0PD1hLmRlYnVnJiYoby5kZWJ1Zz1jb25zb2xlLmRlYnVnP2NvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLGMoIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzMybSIsYygiREVCVUciKSkpfSxjPWZ1bmN0aW9uKHQpe3ZhciBlPWkoKSgpLmZvcm1hdCgic3MuU1NTIik7cmV0dXJuIiVjIi5jb25jYXQoZSwiIDogIikuY29uY2F0KHQsIiA6ICIpfSx1PW4oMCksbD0iY29tbSIsaD0iZGVjbCIsZj1NYXRoLmFicyxkPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC50cmltKCl9ZnVuY3Rpb24geSh0LGUsbil7cmV0dXJuIHQucmVwbGFjZShlLG4pfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gMHx0LmNoYXJDb2RlQXQoZSl9ZnVuY3Rpb24gbSh0LGUsbil7cmV0dXJuIHQuc2xpY2UoZSxuKX1mdW5jdGlvbiB2KHQpe3JldHVybiB0Lmxlbmd0aH1mdW5jdGlvbiBiKHQpe3JldHVybiB0Lmxlbmd0aH1mdW5jdGlvbiB4KHQsZSl7cmV0dXJuIGUucHVzaCh0KSx0fXZhciBfPTEsaz0xLHc9MCxUPTAsRT0wLEM9IiI7ZnVuY3Rpb24gUyh0LGUsbixyLGksYSxvKXtyZXR1cm57dmFsdWU6dCxyb290OmUscGFyZW50Om4sdHlwZTpyLHByb3BzOmksY2hpbGRyZW46YSxsaW5lOl8sY29sdW1uOmssbGVuZ3RoOm8scmV0dXJuOiIifX1mdW5jdGlvbiBBKCl7cmV0dXJuIEU9VD4wP2coQywtLVQpOjAsay0tLDEwPT09RSYmKGs9MSxfLS0pLEV9ZnVuY3Rpb24gTSgpe3JldHVybiBFPVQ8dz9nKEMsVCsrKTowLGsrKywxMD09PUUmJihrPTEsXysrKSxFfWZ1bmN0aW9uIE8oKXtyZXR1cm4gZyhDLFQpfWZ1bmN0aW9uIE4oKXtyZXR1cm4gVH1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIG0oQyx0LGUpfWZ1bmN0aW9uIEQodCl7c3dpdGNoKHQpe2Nhc2UgMDpjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIDU7Y2FzZSAzMzpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0NzpjYXNlIDYyOmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA1OTpjYXNlIDEyMzpjYXNlIDEyNTpyZXR1cm4gNDtjYXNlIDU4OnJldHVybiAzO2Nhc2UgMzQ6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgOTE6cmV0dXJuIDI7Y2FzZSA0MTpjYXNlIDkzOnJldHVybiAxfXJldHVybiAwfWZ1bmN0aW9uIEwodCl7cmV0dXJuIF89az0xLHc9dihDPXQpLFQ9MCxbXX1mdW5jdGlvbiBJKHQpe3JldHVybiBDPSIiLHR9ZnVuY3Rpb24gUih0KXtyZXR1cm4gcChCKFQtMSxmdW5jdGlvbiB0KGUpe2Zvcig7TSgpOylzd2l0Y2goRSl7Y2FzZSBlOnJldHVybiBUO2Nhc2UgMzQ6Y2FzZSAzOTpyZXR1cm4gdCgzND09PWV8fDM5PT09ZT9lOkUpO2Nhc2UgNDA6NDE9PT1lJiZ0KGUpO2JyZWFrO2Nhc2UgOTI6TSgpfXJldHVybiBUfSg5MT09PXQ/dCsyOjQwPT09dD90KzE6dCkpKX1mdW5jdGlvbiBGKHQpe2Zvcig7KEU9TygpKSYmRTwzMzspTSgpO3JldHVybiBEKHQpPjJ8fEQoRSk+Mz8iIjoiICJ9ZnVuY3Rpb24gUCh0LGUpe2Zvcig7LS1lJiZNKCkmJiEoRTw0OHx8RT4xMDJ8fEU+NTcmJkU8NjV8fEU+NzAmJkU8OTcpOyk7cmV0dXJuIEIodCxOKCkrKGU8NiYmMzI9PU8oKSYmMzI9PU0oKSkpfWZ1bmN0aW9uIGoodCxlKXtmb3IoO00oKSYmdCtFIT09NTcmJih0K0UhPT04NHx8NDchPT1PKCkpOyk7cmV0dXJuIi8qIitCKGUsVC0xKSsiKiIrZCg0Nz09PXQ/dDpNKCkpfWZ1bmN0aW9uIFkodCl7Zm9yKDshRChPKCkpOylNKCk7cmV0dXJuIEIodCxUKX1mdW5jdGlvbiB6KHQpe3JldHVybiBJKGZ1bmN0aW9uIHQoZSxuLHIsaSxhLG8scyxjLHUpe3ZhciBsPTAsaD0wLGY9cyxwPTAsZz0wLG09MCxiPTEsXz0xLGs9MSx3PTAsVD0iIixFPWEsQz1vLFM9aSxCPVQ7Zm9yKDtfOylzd2l0Y2gobT13LHc9TSgpKXtjYXNlIDM0OmNhc2UgMzk6Y2FzZSA5MTpjYXNlIDQwOkIrPVIodyk7YnJlYWs7Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOkIrPUYobSk7YnJlYWs7Y2FzZSA5MjpCKz1QKE4oKS0xLDcpO2NvbnRpbnVlO2Nhc2UgNDc6c3dpdGNoKE8oKSl7Y2FzZSA0MjpjYXNlIDQ3OngoJChqKE0oKSxOKCkpLG4sciksdSk7YnJlYWs7ZGVmYXVsdDpCKz0iLyJ9YnJlYWs7Y2FzZSAxMjMqYjpjW2wrK109dihCKSprO2Nhc2UgMTI1KmI6Y2FzZSA1OTpjYXNlIDA6c3dpdGNoKHcpe2Nhc2UgMDpjYXNlIDEyNTpfPTA7Y2FzZSA1OStoOmc+MCYmdihCKS1mJiZ4KGc+MzI/cShCKyI7IixpLHIsZi0xKTpxKHkoQiwiICIsIiIpKyI7IixpLHIsZi0yKSx1KTticmVhaztjYXNlIDU5OkIrPSI7IjtkZWZhdWx0OmlmKHgoUz1VKEIsbixyLGwsaCxhLGMsVCxFPVtdLEM9W10sZiksbyksMTIzPT09dylpZigwPT09aCl0KEIsbixTLFMsRSxvLGYsYyxDKTtlbHNlIHN3aXRjaChwKXtjYXNlIDEwMDpjYXNlIDEwOTpjYXNlIDExNTp0KGUsUyxTLGkmJngoVShlLFMsUywwLDAsYSxjLFQsYSxFPVtdLGYpLEMpLGEsQyxmLGMsaT9FOkMpO2JyZWFrO2RlZmF1bHQ6dChCLFMsUyxTLFsiIl0sQyxmLGMsQyl9fWw9aD1nPTAsYj1rPTEsVD1CPSIiLGY9czticmVhaztjYXNlIDU4OmY9MSt2KEIpLGc9bTtkZWZhdWx0OmlmKGI8MSlpZigxMjM9PXcpLS1iO2Vsc2UgaWYoMTI1PT13JiYwPT1iKysmJjEyNT09QSgpKWNvbnRpbnVlO3N3aXRjaChCKz1kKHcpLHcqYil7Y2FzZSAzODprPWg+MD8xOihCKz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OmNbbCsrXT0odihCKS0xKSprLGs9MTticmVhaztjYXNlIDY0OjQ1PT09TygpJiYoQis9UihNKCkpKSxwPU8oKSxoPXYoVD1CKz1ZKE4oKSkpLHcrKzticmVhaztjYXNlIDQ1OjQ1PT09bSYmMj09dihCKSYmKGI9MCl9fXJldHVybiBvfSgiIixudWxsLG51bGwsbnVsbCxbIiJdLHQ9TCh0KSwwLFswXSx0KSl9ZnVuY3Rpb24gVSh0LGUsbixyLGksYSxvLHMsYyx1LGwpe2Zvcih2YXIgaD1pLTEsZD0wPT09aT9hOlsiIl0sZz1iKGQpLHY9MCx4PTAsXz0wO3Y8cjsrK3YpZm9yKHZhciBrPTAsdz1tKHQsaCsxLGg9Zih4PW9bdl0pKSxUPXQ7azxnOysraykoVD1wKHg+MD9kW2tdKyIgIit3OnkodywvJlxmL2csZFtrXSkpKSYmKGNbXysrXT1UKTtyZXR1cm4gUyh0LGUsbiwwPT09aT8icnVsZSI6cyxjLHUsbCl9ZnVuY3Rpb24gJCh0LGUsbil7cmV0dXJuIFModCxlLG4sbCxkKEUpLG0odCwyLC0yKSwwKX1mdW5jdGlvbiBxKHQsZSxuLHIpe3JldHVybiBTKHQsZSxuLGgsbSh0LDAsciksbSh0LHIrMSwtMSkscil9ZnVuY3Rpb24gVyh0LGUpe2Zvcih2YXIgbj0iIixyPWIodCksaT0wO2k8cjtpKyspbis9ZSh0W2ldLGksdCxlKXx8IiI7cmV0dXJuIG59ZnVuY3Rpb24gSCh0LGUsbixyKXtzd2l0Y2godC50eXBlKXtjYXNlIkBpbXBvcnQiOmNhc2UgaDpyZXR1cm4gdC5yZXR1cm49dC5yZXR1cm58fHQudmFsdWU7Y2FzZSBsOnJldHVybiIiO2Nhc2UicnVsZSI6dC52YWx1ZT10LnByb3BzLmpvaW4oIiwiKX1yZXR1cm4gdihuPVcodC5jaGlsZHJlbixyKSk/dC5yZXR1cm49dC52YWx1ZSsieyIrbisifSI6IiJ9dmFyIFY9bigzNyksRz1uKDcyKSxYPW4oMTY5KSxaPW4ubihYKSxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0iIixuPTA7bj49MDspe2lmKCEoKG49dC5pbmRleE9mKCI8c2NyaXB0IikpPj0wKSl7ZSs9dCxuPS0xO2JyZWFrfWUrPXQuc3Vic3RyKDAsbiksKG49KHQ9dC5zdWJzdHIobisxKSkuaW5kZXhPZigiPFwvc2NyaXB0PiIpKT49MCYmKG4rPTksdD10LnN1YnN0cihuKSl9cmV0dXJuIGU9KGU9KGU9ZS5yZXBsYWNlKC9qYXZhc2NyaXB0Oi9nLCIjIikpLnJlcGxhY2UoL29uZXJyb3I9L2csIm9uZXJyb3I6IikpLnJlcGxhY2UoLzxpZnJhbWUvZywiIil9LFE9LzxiclxzKlwvPz4vZ2ksSj1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC8jYnIjL2csIjxici8+Iil9LHR0PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoUSwiI2JyIyIpfSxldD1mdW5jdGlvbih0KXtyZXR1cm4iZmFsc2UiIT09dCYmITEhPT10fSxudD17Z2V0Um93czpmdW5jdGlvbih0KXtpZighdClyZXR1cm4gMTt2YXIgZT10dCh0KTtyZXR1cm4oZT1lLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikpLnNwbGl0KCIjYnIjIil9LHNhbml0aXplVGV4dDpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBuPXQscj0hMDtpZighZS5mbG93Y2hhcnR8fCExIT09ZS5mbG93Y2hhcnQuaHRtbExhYmVscyYmImZhbHNlIiE9PWUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHN8fChyPSExKSxyKXt2YXIgaT1lLnNlY3VyaXR5TGV2ZWw7ImFudGlzY3JpcHQiPT09aT9uPUsobik6Imxvb3NlIiE9PWkmJihuPShuPShuPXR0KG4pKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSkucmVwbGFjZSgvPS9nLCImZXF1YWxzOyIpLG49SihuKSl9cmV0dXJuIG59KFouYS5zYW5pdGl6ZSh0KSxlKX0saGFzQnJlYWtzOmZ1bmN0aW9uKHQpe3JldHVybi88YnJccypbL10/Pi9naS50ZXN0KHQpfSxzcGxpdEJyZWFrczpmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgvPGJyXHMqWy9dPz4vZ2kpfSxsaW5lQnJlYWtSZWdleDpRLHJlbW92ZVNjcmlwdDpLLGdldFVybDpmdW5jdGlvbih0KXt2YXIgZT0iIjtyZXR1cm4gdCYmKGU9KGU9KGU9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZX0sZXZhbHVhdGU6ZXR9LHJ0PW4oMSksaXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9PYmplY3QocnQuYWRqdXN0KSh0LHtzOi00MCxsOjEwfSk6T2JqZWN0KHJ0LmFkanVzdCkodCx7czotNDAsbDotMTB9KX07ZnVuY3Rpb24gYXQodCl7cmV0dXJuKGF0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gb3QodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLmRhcmtNb2RlPSExLHRoaXMucHJpbWFyeUNvbG9yPSIjZmZmNGRkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSIjMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCJ9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByaW1hcnlUZXh0Q29sb3I9dGhpcy5wcmltYXJ5VGV4dENvbG9yfHwodGhpcy5kYXJrTW9kZT8iI2RkZCI6IiMzMzMiKSx0aGlzLnNlY29uZGFyeUNvbG9yPXRoaXMuc2Vjb25kYXJ5Q29sb3J8fE9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xMjB9KSx0aGlzLnRlcnRpYXJ5Q29sb3I9dGhpcy50ZXJ0aWFyeUNvbG9yfHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxODAsbDo1fSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3J8fGl0KHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcnx8aXQodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yfHxpdCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ub3RlQm9yZGVyQ29sb3J8fGl0KHRoaXMubm90ZUJrZ0NvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMubm90ZUJrZ0NvbG9yfHwiI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMubm90ZVRleHRDb2xvcnx8IiMzMzMiLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPXRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yfHxPYmplY3QocnQuaW52ZXJ0KSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPXRoaXMudGVydGlhcnlUZXh0Q29sb3J8fE9iamVjdChydC5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9dGhpcy5saW5lQ29sb3J8fE9iamVjdChydC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5ub2RlQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm1haW5Ca2c9dGhpcy5tYWluQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm5vZGVCb3JkZXI9dGhpcy5ub2RlQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmNsdXN0ZXJCa2c9dGhpcy5jbHVzdGVyQmtnfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuY2x1c3RlckJvcmRlcnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmRlZmF1bHRMaW5rQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRpdGxlQ29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/T2JqZWN0KHJ0LmRhcmtlbikodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5ub2RlVGV4dENvbG9yPXRoaXMubm9kZVRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5hY3RvckJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hY3RvckJrZz10aGlzLmFjdG9yQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yTGluZUNvbG9yfHwiZ3JleSIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMubGFiZWxCb3hCa2dDb2xvcnx8dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMuc2lnbmFsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMuc2lnbmFsVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5sYWJlbEJveEJvcmRlckNvbG9yfHx0aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5sYWJlbFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5sb29wVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPXRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yfHxPYmplY3QocnQuZGFya2VuKSh0aGlzLnNlY29uZGFyeUNvbG9yLDEwKSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLmFjdGl2YXRpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9dGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yfHxPYmplY3QocnQuaW52ZXJ0KSh0aGlzLmxpbmVDb2xvciksdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj10aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcnx8IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9dGhpcy5zZWN0aW9uQmtnQ29sb3IyfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YXNrQmtnQ29sb3I9dGhpcy50YXNrQmtnQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcnx8T2JqZWN0KHJ0LmxpZ2h0ZW4pKHRoaXMucHJpbWFyeUNvbG9yLDIzKSx0aGlzLmdyaWRDb2xvcj10aGlzLmdyaWRDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZVRhc2tCa2dDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcnx8ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPXRoaXMuY3JpdEJvcmRlckNvbG9yfHwiI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0QmtnQ29sb3J8fCJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy50b2RheUxpbmVDb2xvcnx8InJlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPXRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcnx8IiMwMDMxNjMiLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5ub2RlQm9yZGVyLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5jbGFzc1RleHR8fHRoaXMudGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMuZmlsbFR5cGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLmZpbGxUeXBlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj10aGlzLmZpbGxUeXBlMnx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz10aGlzLmZpbGxUeXBlM3x8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PXRoaXMuZmlsbFR5cGU0fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT10aGlzLmZpbGxUeXBlNXx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj10aGlzLmZpbGxUeXBlNnx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9dGhpcy5maWxsVHlwZTd8fE9iamVjdChydC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU3PXRoaXMucGllN3x8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTIwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP09iamVjdChydC5kYXJrZW4pKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09YXQodCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dKSYmb3QoZS5wcm90b3R5cGUsbiksciYmb3QoZSxyKSx0fSgpO2Z1bmN0aW9uIGN0KHQpe3JldHVybihjdD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIHV0KHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIGx0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iIzMzMyIsdGhpcy5wcmltYXJ5Q29sb3I9IiMxZjIwMjAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9T2JqZWN0KHJ0LmxpZ2h0ZW4pKHRoaXMucHJpbWFyeUNvbG9yLDE2KSx0aGlzLnRlcnRpYXJ5Q29sb3I9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPWl0KHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9aXQodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9aXQodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1PYmplY3QocnQuaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1PYmplY3QocnQuaW52ZXJ0KSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPU9iamVjdChydC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiMxZjIwMjAiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLm1haW5Db250cmFzdENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZGFya1RleHRDb2xvcj1PYmplY3QocnQubGlnaHRlbikoT2JqZWN0KHJ0LmludmVydCkoIiMzMjNENDciKSwxMCksdGhpcy5saW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYm9yZGVyMT0iIzgxQjFEQiIsdGhpcy5ib3JkZXIyPU9iamVjdChydC5yZ2JhKSgyNTUsMjU1LDI1NSwuMjUpLHRoaXMuYXJyb3doZWFkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iIzE4MTgxOCIsdGhpcy50ZXh0Q29sb3I9IiNjY2MiLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9IiNGOUZGRkUiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0iYmxhY2siLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPU9iamVjdChydC5kYXJrZW4pKCIjRUFFOEQ5IiwzMCksdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI0VBRThEOSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9T2JqZWN0KHJ0LnJnYmEpKDI1NSwyNTUsMjU1LDcwKSx0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj1PYmplY3QocnQucmdiYSkoMjU1LDI1NSwyNTUsNTApLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjODFCMURCIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjRTgzNzM3Iix0aGlzLmNyaXRCa2dDb2xvcj0iI0U4MzczNyIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iI0RCNTc1NyIsdGhpcy5sYWJlbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVycm9yQmtnQ29sb3I9IiNhNDQxNDEiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiNkZGQifXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZWNvbmRCa2c9T2JqZWN0KHJ0LmxpZ2h0ZW4pKHRoaXMubWFpbkJrZywxNiksdGhpcy5saW5lQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmFycm93aGVhZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9T2JqZWN0KHJ0LmxpZ2h0ZW4pKHRoaXMubGFiZWxCYWNrZ3JvdW5kLDI1KSx0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5iYWNrZ3JvdW5kLHRoaXMudGFza0JrZ0NvbG9yPU9iamVjdChydC5saWdodGVuKSh0aGlzLm1haW5Ca2csMjMpLHRoaXMudGFza1RleHRDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMuZ3JpZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiM1NTUiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjZjRmNGY0Iix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1PYmplY3QocnQuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1PYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QocnQuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fCIjMGIwMDAwIix0aGlzLnBpZTI9dGhpcy5waWUyfHwiIzRkMTAzNyIsdGhpcy5waWUzPXRoaXMucGllM3x8IiMzZjUyNTgiLHRoaXMucGllND10aGlzLnBpZTR8fCIjNGYyZjFiIix0aGlzLnBpZTU9dGhpcy5waWU1fHwiIzZlMGEwYSIsdGhpcy5waWU2PXRoaXMucGllNnx8IiMzYjAwNDgiLHRoaXMucGllNz10aGlzLnBpZTd8fCIjOTk1YTAxIix0aGlzLnBpZTg9dGhpcy5waWU4fHwiIzE1NDcwNiIsdGhpcy5waWU5PXRoaXMucGllOXx8IiMxNjE3MjIiLHRoaXMucGllMTA9dGhpcy5waWUxMHx8IiMwMDI5NmYiLHRoaXMucGllMTE9dGhpcy5waWUxMXx8IiMwMTYyOWMiLHRoaXMucGllMTI9dGhpcy5waWUxMnx8IiMwMTAwMjkiLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP09iamVjdChydC5kYXJrZW4pKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09Y3QodCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dKSYmdXQoZS5wcm90b3R5cGUsbiksciYmdXQoZSxyKSx0fSgpO2Z1bmN0aW9uIGh0KHQpe3JldHVybihodD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIGZ0KHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIGR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2ZmZmZkZSIsdGhpcy50ZXJ0aWFyeUNvbG9yPU9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1pdCh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPWl0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPWl0KHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPU9iamVjdChydC5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj1PYmplY3QocnQuaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPU9iamVjdChydC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjRUNFQ0ZGIix0aGlzLnNlY29uZEJrZz0iI2ZmZmZkZSIsdGhpcy5saW5lQ29sb3I9IiMzMzMzMzMiLHRoaXMuYm9yZGVyMT0iIzkzNzBEQiIsdGhpcy5ib3JkZXIyPSIjYWFhYTMzIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5sYWJlbEJhY2tncm91bmQ9IiNlOGU4ZTgiLHRoaXMudGV4dENvbG9yPSIjMzMzIix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj1PYmplY3QocnQucmdiYSkoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIiLHRoaXMudXBkYXRlQ29sb3JzKCl9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5hY3RvckJvcmRlcj1PYmplY3QocnQubGlnaHRlbikodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU9iamVjdChydC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fE9iamVjdChydC5hZGp1c3QpKHRoaXMudGVydGlhcnlDb2xvcix7bDotNDB9KSx0aGlzLnBpZTQ9dGhpcy5waWU0fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fE9iamVjdChydC5hZGp1c3QpKHRoaXMudGVydGlhcnlDb2xvcix7bDotMjB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fE9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi00MH0pLHRoaXMucGllOT10aGlzLnBpZTl8fE9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi00MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotNDB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fE9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MCxsOi00MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTMwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PWh0KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSkmJmZ0KGUucHJvdG90eXBlLG4pLHImJmZ0KGUsciksdH0oKTtmdW5jdGlvbiBwdCh0KXtyZXR1cm4ocHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiB5dCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBndD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjY2RlNDk4Iix0aGlzLnNlY29uZGFyeUNvbG9yPSIjY2RmZmIyIix0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNjZGU0OTgiLHRoaXMuc2Vjb25kQmtnPSIjY2RmZmIyIix0aGlzLmxpbmVDb2xvcj0iZ3JlZW4iLHRoaXMuYm9yZGVyMT0iIzEzNTQwYyIsdGhpcy5ib3JkZXIyPSIjNmVhYTQ5Iix0aGlzLmFycm93aGVhZENvbG9yPSJncmVlbiIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMudGVydGlhcnlDb2xvcj1PYmplY3QocnQubGlnaHRlbikoIiNjZGU0OTgiLDEwKSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1pdCh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPWl0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPWl0KHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPU9iamVjdChydC5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPU9iamVjdChydC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjMzMzIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IiNlOGU4ZTgiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSIjMzMzIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iIzMzMyIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9IiMzMjY5MzIiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9IiM2ZWFhNDkiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjNmVhYTQ5Iix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9IiM0ODdlM2EiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYWN0b3JCb3JkZXI9T2JqZWN0KHJ0LmRhcmtlbikodGhpcy5tYWluQmtnLDIwKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1PYmplY3QocnQuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1PYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QocnQuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fE9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE9iamVjdChydC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy50ZXJ0aWFyeUNvbG9yLHtoOjQwLGw6LTQwfSksdGhpcy5waWU3PXRoaXMucGllN3x8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi01MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTUwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PXB0KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSkmJnl0KGUucHJvdG90eXBlLG4pLHImJnl0KGUsciksdH0oKTtmdW5jdGlvbiBtdCh0KXtyZXR1cm4obXQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiB2dCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBidD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLnByaW1hcnlDb2xvcj0iI2VlZSIsdGhpcy5jb250cmFzdD0iIzcwNzA3MCIsdGhpcy5zZWNvbmRhcnlDb2xvcj1PYmplY3QocnQubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5iYWNrZ3JvdW5kPSIjZmZmZmZmIix0aGlzLnRlcnRpYXJ5Q29sb3I9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPWl0KHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9aXQodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9aXQodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1PYmplY3QocnQuaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1PYmplY3QocnQuaW52ZXJ0KSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPU9iamVjdChydC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiNlZWUiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLmxpbmVDb2xvcj0iIzY2NiIsdGhpcy5ib3JkZXIxPSIjOTk5Iix0aGlzLmJvcmRlcjI9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZT0iI2ZmYSIsdGhpcy50ZXh0PSIjMzMzIix0aGlzLmNyaXRpY2FsPSIjZDQyIix0aGlzLmRvbmU9IiNiYmIiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IndoaXRlIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlY29uZEJrZz1PYmplY3QocnQubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5ib3JkZXIyPXRoaXMuY29udHJhc3QsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0LHRoaXMuYWN0b3JCb3JkZXI9T2JqZWN0KHJ0LmxpZ2h0ZW4pKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dCx0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLm5vdGVCb3JkZXJDb2xvcj0iIzk5OSIsdGhpcy5ub3RlQmtnQ29sb3I9IiM2NjYiLHRoaXMubm90ZVRleHRDb2xvcj0iI2ZmZiIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9T2JqZWN0KHJ0LmxpZ2h0ZW4pKHRoaXMuY29udHJhc3QsMzApLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj1PYmplY3QocnQubGlnaHRlbikodGhpcy5jb250cmFzdCwzMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9T2JqZWN0KHJ0LmRhcmtlbikodGhpcy5jb250cmFzdCwxMCksdGhpcy50YXNrQmtnQ29sb3I9dGhpcy5jb250cmFzdCx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRleHQsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmdyaWRDb2xvcj1PYmplY3QocnQubGlnaHRlbikodGhpcy5ib3JkZXIxLDMwKSx0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRpY2FsLHRoaXMuY3JpdEJvcmRlckNvbG9yPU9iamVjdChydC5kYXJrZW4pKHRoaXMuY3JpdEJrZ0NvbG9yLDEwKSx0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU9iamVjdChydC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHwiI0Y0RjRGNCIsdGhpcy5waWUyPXRoaXMucGllMnx8IiM1NTUiLHRoaXMucGllMz10aGlzLnBpZTN8fCIjQkJCIix0aGlzLnBpZTQ9dGhpcy5waWU0fHwiIzc3NyIsdGhpcy5waWU1PXRoaXMucGllNXx8IiM5OTkiLHRoaXMucGllNj10aGlzLnBpZTZ8fCIjREREIix0aGlzLnBpZTc9dGhpcy5waWU3fHwiI0ZGRiIsdGhpcy5waWU4PXRoaXMucGllOHx8IiNEREQiLHRoaXMucGllOT10aGlzLnBpZTl8fCIjQkJCIix0aGlzLnBpZTEwPXRoaXMucGllMTB8fCIjOTk5Iix0aGlzLnBpZTExPXRoaXMucGllMTF8fCIjNzc3Iix0aGlzLnBpZTEyPXRoaXMucGllMTJ8fCIjNTU1Iix0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PW10KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSkmJnZ0KGUucHJvdG90eXBlLG4pLHImJnZ0KGUsciksdH0oKSx4dD17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHN0O3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZGFyazp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGx0O3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZGVmYXVsdDp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGR0O3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgZ3Q7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxuZXV0cmFsOntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgYnQ7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fX07ZnVuY3Rpb24gX3QodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGt0KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBrdCh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1ufHwiU2V0Ij09PW4pcmV0dXJuIEFycmF5LmZyb20odCk7aWYoIkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4ga3QodCxlKX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24ga3QodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn1mdW5jdGlvbiB3dCh0KXtyZXR1cm4od3Q9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgVHQ9e3RoZW1lOiJkZWZhdWx0Iix0aGVtZVZhcmlhYmxlczp4dC5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksdGhlbWVDU1M6dm9pZCAwLG1heFRleHRTaXplOjVlNCxmb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7Jyxsb2dMZXZlbDo1LHNlY3VyaXR5TGV2ZWw6InN0cmljdCIsc3RhcnRPbkxvYWQ6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxzZWN1cmU6WyJzZWN1cmUiLCJzZWN1cml0eUxldmVsIiwic3RhcnRPbkxvYWQiLCJtYXhUZXh0U2l6ZSJdLGRldGVybWluaXN0aWNJZHM6ITEsZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsZmxvd2NoYXJ0OntkaWFncmFtUGFkZGluZzo4LGh0bWxMYWJlbHM6ITAsbm9kZVNwYWNpbmc6NTAscmFua1NwYWNpbmc6NTAsY3VydmU6ImJhc2lzIixwYWRkaW5nOjE1LHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtZDMifSxzZXF1ZW5jZTp7YWN0aXZhdGlvbldpZHRoOjEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGFjdG9yTWFyZ2luOjUwLHdpZHRoOjE1MCxoZWlnaHQ6NjUsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLG1pcnJvckFjdG9yczohMCxib3R0b21NYXJnaW5BZGo6MSx1c2VNYXhXaWR0aDohMCxyaWdodEFuZ2xlczohMSxzaG93U2VxdWVuY2VOdW1iZXJzOiExLGFjdG9yRm9udFNpemU6MTQsYWN0b3JGb250RmFtaWx5OiciT3Blbi1TYW5zIiwgInNhbnMtc2VyaWYiJyxhY3RvckZvbnRXZWlnaHQ6NDAwLG5vdGVGb250U2l6ZToxNCxub3RlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxub3RlRm9udFdlaWdodDo0MDAsbm90ZUFsaWduOiJjZW50ZXIiLG1lc3NhZ2VGb250U2l6ZToxNixtZXNzYWdlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDo0MDAsd3JhcDohMSx3cmFwUGFkZGluZzoxMCxsYWJlbEJveFdpZHRoOjUwLGxhYmVsQm94SGVpZ2h0OjIwLG1lc3NhZ2VGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubWVzc2FnZUZvbnRXZWlnaHR9fSxub3RlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubm90ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5ub3RlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm5vdGVGb250V2VpZ2h0fX0sYWN0b3JGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5hY3RvckZvbnRXZWlnaHR9fX0sZ2FudHQ6e3RpdGxlVG9wTWFyZ2luOjI1LGJhckhlaWdodDoyMCxiYXJHYXA6NCx0b3BQYWRkaW5nOjUwLHJpZ2h0UGFkZGluZzo3NSxsZWZ0UGFkZGluZzo3NSxncmlkTGluZVN0YXJ0UGFkZGluZzozNSxmb250U2l6ZToxMSxzZWN0aW9uRm9udFNpemU6MTEsbnVtYmVyU2VjdGlvblN0eWxlczo0LGF4aXNGb3JtYXQ6IiVZLSVtLSVkIix1c2VNYXhXaWR0aDohMCx0b3BBeGlzOiExLHVzZVdpZHRoOnZvaWQgMH0sam91cm5leTp7ZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEsdXNlTWF4V2lkdGg6ITAscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3Blbi1TYW5zIiwgInNhbnMtc2VyaWYiJyx0YXNrTWFyZ2luOjUwLGFjdGl2YXRpb25XaWR0aDoxMCx0ZXh0UGxhY2VtZW50OiJmbyIsYWN0b3JDb2xvdXJzOlsiIzhGQkM4RiIsIiM3Q0ZDMDAiLCIjMDBGRkZGIiwiIzIwQjJBQSIsIiNCMEUwRTYiLCIjRkZGRkUwIl0sc2VjdGlvbkZpbGxzOlsiIzE5MTk3MCIsIiM4QjAwOEIiLCIjNEIwMDgyIiwiIzJGNEY0RiIsIiM4MDAwMDAiLCIjOEI0NTEzIiwiIzAwMDA4QiJdLHNlY3Rpb25Db2xvdXJzOlsiI2ZmZiJdfSxjbGFzczp7YXJyb3dNYXJrZXJBYnNvbHV0ZTohMSx1c2VNYXhXaWR0aDohMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIifSxnaXQ6e2Fycm93TWFya2VyQWJzb2x1dGU6ITEsdXNlV2lkdGg6dm9pZCAwLHVzZU1heFdpZHRoOiEwfSxzdGF0ZTp7ZGl2aWRlck1hcmdpbjoxMCxzaXplVW5pdDo1LHBhZGRpbmc6OCx0ZXh0SGVpZ2h0OjEwLHRpdGxlU2hpZnQ6LTE1LG5vdGVNYXJnaW46MTAsZm9ya1dpZHRoOjcwLGZvcmtIZWlnaHQ6NyxtaW5pUGFkZGluZzoyLGZvbnRTaXplRmFjdG9yOjUuMDIsZm9udFNpemU6MjQsbGFiZWxIZWlnaHQ6MTYsZWRnZUxlbmd0aEZhY3RvcjoiMjAiLGNvbXBvc2l0VGl0bGVTaXplOjM1LHJhZGl1czo1LHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtd3JhcHBlciJ9LGVyOntkaWFncmFtUGFkZGluZzoyMCxsYXlvdXREaXJlY3Rpb246IlRCIixtaW5FbnRpdHlXaWR0aDoxMDAsbWluRW50aXR5SGVpZ2h0Ojc1LGVudGl0eVBhZGRpbmc6MTUsc3Ryb2tlOiJncmF5IixmaWxsOiJob25leWRldyIsZm9udFNpemU6MTIsdXNlTWF4V2lkdGg6ITB9LHBpZTp7dXNlV2lkdGg6dm9pZCAwLHVzZU1heFdpZHRoOiEwfSxyZXF1aXJlbWVudDp7dXNlV2lkdGg6dm9pZCAwLHVzZU1heFdpZHRoOiEwLHJlY3RfZmlsbDoiI2Y5ZjlmOSIsdGV4dF9jb2xvcjoiIzMzMyIscmVjdF9ib3JkZXJfc2l6ZToiMC41cHgiLHJlY3RfYm9yZGVyX2NvbG9yOiIjYmJiIixyZWN0X21pbl93aWR0aDoyMDAscmVjdF9taW5faGVpZ2h0OjIwMCxmb250U2l6ZToxNCxyZWN0X3BhZGRpbmc6MTAsbGluZV9oZWlnaHQ6MjB9fTtUdC5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPVR0LmFycm93TWFya2VyQWJzb2x1dGUsVHQuZ2l0LmFycm93TWFya2VyQWJzb2x1dGU9VHQuYXJyb3dNYXJrZXJBYnNvbHV0ZTt2YXIgRXQ9ZnVuY3Rpb24gdChlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiI7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZSgoZnVuY3Rpb24ocixpKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlW2ldKT9yOiJvYmplY3QiPT09d3QoZVtpXSkmJm51bGwhPT1lW2ldP1tdLmNvbmNhdChfdChyKSxbbitpXSxfdCh0KGVbaV0sIiIpKSk6W10uY29uY2F0KF90KHIpLFtuK2ldKX0pLFtdKX0oVHQsIiIpLEN0PVR0O2Z1bmN0aW9uIFN0KHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19ZnVuY3Rpb24gQXQodCxlKXt2YXIgbj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIW4pe2lmKEFycmF5LmlzQXJyYXkodCl8fChuPU50KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7biYmKHQ9bik7dmFyIHI9MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbcisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7bj1uLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1uLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1uLnJldHVybnx8bi5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBNdCh0KXtyZXR1cm4oTXQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiBPdCh0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gQnQodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxOdCh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBOdCh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gQnQodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9CdCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gQnQodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgRHQ9e2N1cnZlQmFzaXM6dS5jdXJ2ZUJhc2lzLGN1cnZlQmFzaXNDbG9zZWQ6dS5jdXJ2ZUJhc2lzQ2xvc2VkLGN1cnZlQmFzaXNPcGVuOnUuY3VydmVCYXNpc09wZW4sY3VydmVMaW5lYXI6dS5jdXJ2ZUxpbmVhcixjdXJ2ZUxpbmVhckNsb3NlZDp1LmN1cnZlTGluZWFyQ2xvc2VkLGN1cnZlTW9ub3RvbmVYOnUuY3VydmVNb25vdG9uZVgsY3VydmVNb25vdG9uZVk6dS5jdXJ2ZU1vbm90b25lWSxjdXJ2ZU5hdHVyYWw6dS5jdXJ2ZU5hdHVyYWwsY3VydmVTdGVwOnUuY3VydmVTdGVwLGN1cnZlU3RlcEFmdGVyOnUuY3VydmVTdGVwQWZ0ZXIsY3VydmVTdGVwQmVmb3JlOnUuY3VydmVTdGVwQmVmb3JlfSxMdD0vWyVdezJ9W3tdXHMqKD86KD86KFx3Kylccyo6fChcdyspKVxzKig/Oig/OihcdyspKXwoKD86KD8hW31dWyVdezJ9KS58XHI/XG4pKikpP1xzKikoPzpbfV1bJV17Mn0pPy9naSxJdD0vXHMqKD86KD86KFx3KykoPz06KTp8KFx3KykpXHMqKD86KD86KFx3KykpfCgoPzooPyFbfV1bJV17Mn0pLnxccj9cbikqKSk/XHMqKSg/Olt9XVslXXsyfSk/L2dpLFJ0PS9ccyolJS4qXG4vZ20sRnQ9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7dHJ5e3ZhciBuPW5ldyBSZWdFeHAoIlslXXsyfSg/IVt7XSIuY29uY2F0KEl0LnNvdXJjZSwiKSg/PVt9XVslXXsyfSkuKlxuIiksImlnIik7dD10LnRyaW0oKS5yZXBsYWNlKG4sIiIpLnJlcGxhY2UoLycvZ20sJyInKSxvLmRlYnVnKCJEZXRlY3RpbmcgZGlhZ3JhbSBkaXJlY3RpdmUiLmNvbmNhdChudWxsIT09ZT8iIHR5cGU6IitlOiIiLCIgYmFzZWQgb24gdGhlIHRleHQ6IikuY29uY2F0KHQpKTtmb3IodmFyIHIsaT1bXTtudWxsIT09KHI9THQuZXhlYyh0KSk7KWlmKHIuaW5kZXg9PT1MdC5sYXN0SW5kZXgmJkx0Lmxhc3RJbmRleCsrLHImJiFlfHxlJiZyWzFdJiZyWzFdLm1hdGNoKGUpfHxlJiZyWzJdJiZyWzJdLm1hdGNoKGUpKXt2YXIgYT1yWzFdP3JbMV06clsyXSxzPXJbM10/clszXS50cmltKCk6cls0XT9KU09OLnBhcnNlKHJbNF0udHJpbSgpKTpudWxsO2kucHVzaCh7dHlwZTphLGFyZ3M6c30pfXJldHVybiAwPT09aS5sZW5ndGgmJmkucHVzaCh7dHlwZTp0LGFyZ3M6bnVsbH0pLDE9PT1pLmxlbmd0aD9pWzBdOml9Y2F0Y2gobil7cmV0dXJuIG8uZXJyb3IoIkVSUk9SOiAiLmNvbmNhdChuLm1lc3NhZ2UsIiAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmVcbiAgICAgICIpLmNvbmNhdChudWxsIT09ZT8iIHR5cGU6IitlOiIiLCIgYmFzZWQgb24gdGhlIHRleHQ6IikuY29uY2F0KHQpKSx7dHlwZTpudWxsLGFyZ3M6bnVsbH19fSxQdD1mdW5jdGlvbih0LGUpe3JldHVybih0PXQucmVwbGFjZShMdCwiIikucmVwbGFjZShSdCwiXG4iKSkubWF0Y2goL15ccypzZXF1ZW5jZURpYWdyYW0vKT8ic2VxdWVuY2UiOnQubWF0Y2goL15ccypnYW50dC8pPyJnYW50dCI6dC5tYXRjaCgvXlxzKmNsYXNzRGlhZ3JhbS12Mi8pPyJjbGFzc0RpYWdyYW0iOnQubWF0Y2goL15ccypjbGFzc0RpYWdyYW0vKT9lJiZlLmNsYXNzJiYiZGFncmUtd3JhcHBlciI9PT1lLmNsYXNzLmRlZmF1bHRSZW5kZXJlcj8iY2xhc3NEaWFncmFtIjoiY2xhc3MiOnQubWF0Y2goL15ccypzdGF0ZURpYWdyYW0tdjIvKT8ic3RhdGVEaWFncmFtIjp0Lm1hdGNoKC9eXHMqc3RhdGVEaWFncmFtLyk/ZSYmZS5jbGFzcyYmImRhZ3JlLXdyYXBwZXIiPT09ZS5zdGF0ZS5kZWZhdWx0UmVuZGVyZXI/InN0YXRlRGlhZ3JhbSI6InN0YXRlIjp0Lm1hdGNoKC9eXHMqZ2l0R3JhcGgvKT8iZ2l0Ijp0Lm1hdGNoKC9eXHMqZmxvd2NoYXJ0Lyk/ImZsb3djaGFydC12MiI6dC5tYXRjaCgvXlxzKmluZm8vKT8iaW5mbyI6dC5tYXRjaCgvXlxzKnBpZS8pPyJwaWUiOnQubWF0Y2goL15ccyplckRpYWdyYW0vKT8iZXIiOnQubWF0Y2goL15ccypqb3VybmV5Lyk/ImpvdXJuZXkiOnQubWF0Y2goL15ccypyZXF1aXJlbWVudC8pfHx0Lm1hdGNoKC9eXHMqcmVxdWlyZW1lbnREaWFncmFtLyk/InJlcXVpcmVtZW50IjplJiZlLmZsb3djaGFydCYmImRhZ3JlLXdyYXBwZXIiPT09ZS5mbG93Y2hhcnQuZGVmYXVsdFJlbmRlcmVyPyJmbG93Y2hhcnQtdjIiOiJmbG93Y2hhcnQifSxqdD1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3ZhciBvPWU/ZS5hcHBseSh2b2lkIDAsaSk6aVswXTtpZihvIGluIG4pcmV0dXJuIG5bb107dmFyIHM9dC5hcHBseSh2b2lkIDAsaSk7cmV0dXJuIG5bb109cyxzfX0sWXQ9ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gZTt2YXIgbj0iY3VydmUiLmNvbmNhdCh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSkpO3JldHVybiBEdFtuXXx8ZX0senQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZT9NYXRoLnNxcnQoTWF0aC5wb3coZS54LXQueCwyKStNYXRoLnBvdyhlLnktdC55LDIpKTowfSxVdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9IiIsbj0iIixyPTA7cjx0Lmxlbmd0aDtyKyspdm9pZCAwIT09dFtyXSYmKHRbcl0uc3RhcnRzV2l0aCgiY29sb3I6Iil8fHRbcl0uc3RhcnRzV2l0aCgidGV4dC1hbGlnbjoiKT9uPW4rdFtyXSsiOyI6ZT1lK3Rbcl0rIjsiKTtyZXR1cm57c3R5bGU6ZSxsYWJlbFN0eWxlOm59fSwkdD0wLHF0PWZ1bmN0aW9uKCl7cmV0dXJuICR0KyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIiskdH07dmFyIFd0LEh0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9IiIsbj0iMDEyMzQ1Njc4OWFiY2RlZiIubGVuZ3RoLHI9MDtyPHQ7cisrKWUrPSIwMTIzNDU2Nzg5YWJjZGVmIi5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm4pKTtyZXR1cm4gZX0odC5sZW5ndGgpfSxWdD1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaT1PYmplY3QuYXNzaWduKHtkZXB0aDoyLGNsb2JiZXI6ITF9LHIpLGE9aS5kZXB0aCxvPWkuY2xvYmJlcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmIUFycmF5LmlzQXJyYXkoZSk/KG4uZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuLHIpfSkpLGUpOkFycmF5LmlzQXJyYXkobikmJkFycmF5LmlzQXJyYXkoZSk/KG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7LTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KX0pKSxlKTp2b2lkIDA9PT1lfHxhPD0wP251bGwhPWUmJiJvYmplY3QiPT09TXQoZSkmJiJvYmplY3QiPT09TXQobik/T2JqZWN0LmFzc2lnbihlLG4pOm46KHZvaWQgMCE9PW4mJiJvYmplY3QiPT09TXQoZSkmJiJvYmplY3QiPT09TXQobikmJk9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKHIpeyJvYmplY3QiIT09TXQobltyXSl8fHZvaWQgMCE9PWVbcl0mJiJvYmplY3QiIT09TXQoZVtyXSk/KG98fCJvYmplY3QiIT09TXQoZVtyXSkmJiJvYmplY3QiIT09TXQobltyXSkpJiYoZVtyXT1uW3JdKToodm9pZCAwPT09ZVtyXSYmKGVbcl09QXJyYXkuaXNBcnJheShuW3JdKT9bXTp7fSksZVtyXT10KGVbcl0sbltyXSx7ZGVwdGg6YS0xLGNsb2JiZXI6b30pKX0pKSxlKX0sR3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnRleHQucmVwbGFjZShudC5saW5lQnJlYWtSZWdleCwiICIpLHI9dC5hcHBlbmQoInRleHQiKTtyLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksci5zdHlsZSgiZm9udC1mYW1pbHkiLGUuZm9udEZhbWlseSksci5zdHlsZSgiZm9udC1zaXplIixlLmZvbnRTaXplKSxyLnN0eWxlKCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KSxyLmF0dHIoImZpbGwiLGUuZmlsbCksdm9pZCAwIT09ZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7dmFyIGk9ci5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54KzIqZS50ZXh0TWFyZ2luKSxpLmF0dHIoImZpbGwiLGUuZmlsbCksaS50ZXh0KG4pLHJ9LFh0PWp0KChmdW5jdGlvbih0LGUsbil7aWYoIXQpcmV0dXJuIHQ7aWYobj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsam9pbldpdGg6Ijxici8+In0sbiksbnQubGluZUJyZWFrUmVnZXgudGVzdCh0KSlyZXR1cm4gdDt2YXIgcj10LnNwbGl0KCIgIiksaT1bXSxhPSIiO3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIHM9S3QoIiIuY29uY2F0KHQsIiAiKSxuKSxjPUt0KGEsbik7aWYocz5lKXt2YXIgdT1adCh0LGUsIi0iLG4pLGw9dS5oeXBoZW5hdGVkU3RyaW5ncyxoPXUucmVtYWluaW5nV29yZDtpLnB1c2guYXBwbHkoaSxbYV0uY29uY2F0KE90KGwpKSksYT1ofWVsc2UgYytzPj1lPyhpLnB1c2goYSksYT10KTphPVthLHRdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIik7bysxPT09ci5sZW5ndGgmJmkucHVzaChhKX0pKSxpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIiIhPT10fSkpLmpvaW4obi5qb2luV2l0aCl9KSwoZnVuY3Rpb24odCxlLG4pe3JldHVybiIiLmNvbmNhdCh0LCItIikuY29uY2F0KGUsIi0iKS5jb25jYXQobi5mb250U2l6ZSwiLSIpLmNvbmNhdChuLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQobi5mb250RmFtaWx5LCItIikuY29uY2F0KG4uam9pbldpdGgpfSkpLFp0PWp0KChmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiLSIscj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0scik7dmFyIGk9dC5zcGxpdCgiIiksYT1bXSxvPSIiO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKHQscyl7dmFyIGM9IiIuY29uY2F0KG8pLmNvbmNhdCh0KTtpZihLdChjLHIpPj1lKXt2YXIgdT1zKzEsbD1pLmxlbmd0aD09PXUsaD0iIi5jb25jYXQoYykuY29uY2F0KG4pO2EucHVzaChsP2M6aCksbz0iIn1lbHNlIG89Y30pKSx7aHlwaGVuYXRlZFN0cmluZ3M6YSxyZW1haW5pbmdXb3JkOm99fSksKGZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiItIixyPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO3JldHVybiIiLmNvbmNhdCh0LCItIikuY29uY2F0KGUsIi0iKS5jb25jYXQobiwiLSIpLmNvbmNhdChyLmZvbnRTaXplLCItIikuY29uY2F0KHIuZm9udFdlaWdodCwiLSIpLmNvbmNhdChyLmZvbnRGYW1pbHkpfSkpLEt0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwifSxlKSxRdCh0LGUpLndpZHRofSxRdD1qdCgoZnVuY3Rpb24odCxlKXt2YXIgbj1lPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIn0sZSkscj1uLmZvbnRTaXplLGk9bi5mb250RmFtaWx5LGE9bi5mb250V2VpZ2h0O2lmKCF0KXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgbz1bInNhbnMtc2VyaWYiLGldLHM9dC5zcGxpdChudC5saW5lQnJlYWtSZWdleCksYz1bXSxsPU9iamVjdCh1LnNlbGVjdCkoImJvZHkiKTtpZighbC5yZW1vdmUpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtmb3IodmFyIGg9bC5hcHBlbmQoInN2ZyIpLGY9MCxkPW87ZjxkLmxlbmd0aDtmKyspe3ZhciBwLHk9ZFtmXSxnPTAsbT17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9LHY9QXQocyk7dHJ5e2Zvcih2LnMoKTshKHA9di5uKCkpLmRvbmU7KXt2YXIgYj1wLnZhbHVlLHg9e3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMH07eC50ZXh0PWI7dmFyIF89R3QoaCx4KS5zdHlsZSgiZm9udC1zaXplIixyKS5zdHlsZSgiZm9udC13ZWlnaHQiLGEpLnN0eWxlKCJmb250LWZhbWlseSIseSksaz0oXy5fZ3JvdXBzfHxfKVswXVswXS5nZXRCQm94KCk7bS53aWR0aD1NYXRoLnJvdW5kKE1hdGgubWF4KG0ud2lkdGgsay53aWR0aCkpLGc9TWF0aC5yb3VuZChrLmhlaWdodCksbS5oZWlnaHQrPWcsbS5saW5lSGVpZ2h0PU1hdGgucm91bmQoTWF0aC5tYXgobS5saW5lSGVpZ2h0LGcpKX19Y2F0Y2godCl7di5lKHQpfWZpbmFsbHl7di5mKCl9Yy5wdXNoKG0pfXJldHVybiBoLnJlbW92ZSgpLGNbaXNOYU4oY1sxXS5oZWlnaHQpfHxpc05hTihjWzFdLndpZHRoKXx8aXNOYU4oY1sxXS5saW5lSGVpZ2h0KXx8Y1swXS5oZWlnaHQ+Y1sxXS5oZWlnaHQmJmNbMF0ud2lkdGg+Y1sxXS53aWR0aCYmY1swXS5saW5lSGVpZ2h0PmNbMV0ubGluZUhlaWdodD8wOjFdfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZS5mb250U2l6ZSwiLSIpLmNvbmNhdChlLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQoZS5mb250RmFtaWx5KX0pKSxKdD1mdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IE1hcDtyZXR1cm4gci5zZXQoImhlaWdodCIsdCksbj8oci5zZXQoIndpZHRoIiwiMTAwJSIpLHIuc2V0KCJzdHlsZSIsIm1heC13aWR0aDogIi5jb25jYXQoZSwicHg7IikpKTpyLnNldCgid2lkdGgiLGUpLHJ9LHRlPWZ1bmN0aW9uKHQsZSxuLHIpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHI9QXQoZSk7dHJ5e2ZvcihyLnMoKTshKG49ci5uKCkpLmRvbmU7KXt2YXIgaT1uLnZhbHVlO3QuYXR0cihpWzBdLGlbMV0pfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19KHQsSnQoZSxuLHIpKX0sZWU9ZnVuY3Rpb24gdChlKXtvLmRlYnVnKCJkaXJlY3RpdmVTYW5pdGl6ZXIgY2FsbGVkIHdpdGgiLGUpLCJvYmplY3QiPT09TXQoZSkmJihlLmxlbmd0aD9lLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfSkpOk9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe28uZGVidWcoIkNoZWNraW5nIGtleSIsbiksMD09PW4uaW5kZXhPZigiX18iKSYmKG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIF9fIG9wdGlvbiIsbiksZGVsZXRlIGVbbl0pLG4uaW5kZXhPZigicHJvdG8iKT49MCYmKG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIHByb3RvIG9wdGlvbiIsbiksZGVsZXRlIGVbbl0pLG4uaW5kZXhPZigiY29uc3RyIik+PTAmJihvLmRlYnVnKCJzYW5pdGl6ZSBkZWxldGluZyBjb25zdHIgb3B0aW9uIixuKSxkZWxldGUgZVtuXSksRXQuaW5kZXhPZihuKTwwPyhvLmRlYnVnKCJzYW5pdGl6ZSBkZWxldGluZyBvcHRpb24iLG4pLGRlbGV0ZSBlW25dKToib2JqZWN0Ij09PU10KGVbbl0pJiYoby5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcgb2JqZWN0IixuKSx0KGVbbl0pKX0pKSl9LG5lPXthc3NpZ25XaXRoRGVwdGg6VnQsd3JhcExhYmVsOlh0LGNhbGN1bGF0ZVRleHRIZWlnaHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsbWFyZ2luOjE1fSxlKSxRdCh0LGUpLmhlaWdodH0sY2FsY3VsYXRlVGV4dFdpZHRoOkt0LGNhbGN1bGF0ZVRleHREaW1lbnNpb25zOlF0LGNhbGN1bGF0ZVN2Z1NpemVBdHRyczpKdCxjb25maWd1cmVTdmdTaXplOnRlLGRldGVjdEluaXQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1GdCh0LC8oPzppbml0XGIpfCg/OmluaXRpYWxpemVcYikvKSxyPXt9O2lmKEFycmF5LmlzQXJyYXkobikpe3ZhciBpPW4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hcmdzfSkpO2VlKGkpLHI9VnQocixPdChpKSl9ZWxzZSByPW4uYXJncztpZihyKXt2YXIgYT1QdCh0LGUpO1siY29uZmlnIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09clt0XSYmKCJmbG93Y2hhcnQtdjIiPT09YSYmKGE9ImZsb3djaGFydCIpLHJbYV09clt0XSxkZWxldGUgclt0XSl9KSl9cmV0dXJuIHJ9LGRldGVjdERpcmVjdGl2ZTpGdCxkZXRlY3RUeXBlOlB0LGlzU3Vic3RyaW5nSW5BcnJheTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0ubWF0Y2godCkpcmV0dXJuIG47cmV0dXJuLTF9LGludGVycG9sYXRlVG9DdXJ2ZTpZdCxjYWxjTGFiZWxQb3NpdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUsbj0wO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7bis9enQodCxlKSxlPXR9KSk7dmFyIHI9bi8yLGk9dm9pZCAwO3JldHVybiBlPXZvaWQgMCx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKGUmJiFpKXt2YXIgbj16dCh0LGUpO2lmKG48cilyLT1uO2Vsc2V7dmFyIGE9ci9uO2E8PTAmJihpPWUpLGE+PTEmJihpPXt4OnQueCx5OnQueX0pLGE+MCYmYTwxJiYoaT17eDooMS1hKSplLngrYSp0LngseTooMS1hKSplLnkrYSp0Lnl9KX19ZT10fSkpLGl9KHQpfSxjYWxjQ2FyZGluYWxpdHlQb3NpdGlvbjpmdW5jdGlvbih0LGUsbil7dmFyIHI7by5pbmZvKCJvdXIgcG9pbnRzIixlKSxlWzBdIT09biYmKGU9ZS5yZXZlcnNlKCkpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7enQodCxyKSxyPXR9KSk7dmFyIGksYT0yNTtyPXZvaWQgMCxlLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKHImJiFpKXt2YXIgZT16dCh0LHIpO2lmKGU8YSlhLT1lO2Vsc2V7dmFyIG49YS9lO248PTAmJihpPXIpLG4+PTEmJihpPXt4OnQueCx5OnQueX0pLG4+MCYmbjwxJiYoaT17eDooMS1uKSpyLngrbip0LngseTooMS1uKSpyLnkrbip0Lnl9KX19cj10fSkpO3ZhciBzPXQ/MTA6NSxjPU1hdGguYXRhbjIoZVswXS55LWkueSxlWzBdLngtaS54KSx1PXt4OjAseTowfTtyZXR1cm4gdS54PU1hdGguc2luKGMpKnMrKGVbMF0ueCtpLngpLzIsdS55PS1NYXRoLmNvcyhjKSpzKyhlWzBdLnkraS55KS8yLHV9LGNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShuKSk7by5pbmZvKCJvdXIgcG9pbnRzIixpKSwic3RhcnRfbGVmdCIhPT1lJiYic3RhcnRfcmlnaHQiIT09ZSYmKGk9aS5yZXZlcnNlKCkpLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7enQodCxyKSxyPXR9KSk7dmFyIGEscz0yNSt0O3I9dm9pZCAwLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYociYmIWEpe3ZhciBlPXp0KHQscik7aWYoZTxzKXMtPWU7ZWxzZXt2YXIgbj1zL2U7bjw9MCYmKGE9ciksbj49MSYmKGE9e3g6dC54LHk6dC55fSksbj4wJiZuPDEmJihhPXt4OigxLW4pKnIueCtuKnQueCx5OigxLW4pKnIueStuKnQueX0pfX1yPXR9KSk7dmFyIGM9MTArLjUqdCx1PU1hdGguYXRhbjIoaVswXS55LWEueSxpWzBdLngtYS54KSxsPXt4OjAseTowfTtyZXR1cm4gbC54PU1hdGguc2luKHUpKmMrKGlbMF0ueCthLngpLzIsbC55PS1NYXRoLmNvcyh1KSpjKyhpWzBdLnkrYS55KS8yLCJzdGFydF9sZWZ0Ij09PWUmJihsLng9TWF0aC5zaW4odStNYXRoLlBJKSpjKyhpWzBdLngrYS54KS8yLGwueT0tTWF0aC5jb3ModStNYXRoLlBJKSpjKyhpWzBdLnkrYS55KS8yKSwiZW5kX3JpZ2h0Ij09PWUmJihsLng9TWF0aC5zaW4odS1NYXRoLlBJKSpjKyhpWzBdLngrYS54KS8yLTUsbC55PS1NYXRoLmNvcyh1LU1hdGguUEkpKmMrKGlbMF0ueSthLnkpLzItNSksImVuZF9sZWZ0Ij09PWUmJihsLng9TWF0aC5zaW4odSkqYysoaVswXS54K2EueCkvMi01LGwueT0tTWF0aC5jb3ModSkqYysoaVswXS55K2EueSkvMi01KSxsfSxmb3JtYXRVcmw6ZnVuY3Rpb24odCxlKXt2YXIgbj10LnRyaW0oKTtpZihuKXJldHVybiJsb29zZSIhPT1lLnNlY3VyaXR5TGV2ZWw/T2JqZWN0KEcuc2FuaXRpemVVcmwpKG4pOm59LGdldFN0eWxlc0Zyb21BcnJheTpVdCxnZW5lcmF0ZUlkOnF0LHJhbmRvbTpIdCxtZW1vaXplOmp0LHJ1bkZ1bmM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49dC5zcGxpdCgiLiIpLHI9bi5sZW5ndGgtMSxpPW5bcl0sYT13aW5kb3csbz0wO288cjtvKyspaWYoIShhPWFbbltvXV0pKXJldHVybjtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxjPW5ldyBBcnJheShzPjE/cy0xOjApLHU9MTt1PHM7dSsrKWNbdS0xXT1hcmd1bWVudHNbdV07KGU9YSlbaV0uYXBwbHkoZSxjKX0sZW50aXR5RGVjb2RlOmZ1bmN0aW9uKHQpe3JldHVybiBXdD1XdHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdD1lc2NhcGUodCkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7IiksV3QuaW5uZXJIVE1MPXQsdW5lc2NhcGUoV3QudGV4dENvbnRlbnQpfSxpbml0SWRHZW5lcmF0aW9yOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4peyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuZGV0ZXJtaW5pc3RpYz1lLHRoaXMuc2VlZD1uLHRoaXMuY291bnQ9bj9uLmxlbmd0aDowfXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJuZXh0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRldGVybWluaXN0aWM/dGhpcy5jb3VudCsrOkRhdGUubm93KCl9fV0pJiZTdChlLnByb3RvdHlwZSxuKSxyJiZTdChlLHIpLHR9KCksZGlyZWN0aXZlU2FuaXRpemVyOmVlfTtmdW5jdGlvbiByZSh0KXtyZXR1cm4ocmU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgaWUsYWU9T2JqZWN0LmZyZWV6ZShDdCksb2U9VnQoe30sYWUpLHNlPVtdLGNlPVZ0KHt9LGFlKSx1ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1WdCh7fSx0KSxyPXt9LGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTtmZShhKSxyPVZ0KHIsYSl9aWYobj1WdChuLHIpLHIudGhlbWUpe3ZhciBvPVZ0KHt9LGllKSxzPVZ0KG8udGhlbWVWYXJpYWJsZXN8fHt9LHIudGhlbWVWYXJpYWJsZXMpO24udGhlbWVWYXJpYWJsZXM9eHRbbi50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMocyl9cmV0dXJuIGNlPW4sbn0sbGU9ZnVuY3Rpb24oKXtyZXR1cm4gVnQoe30sb2UpfSxoZT1mdW5jdGlvbigpe3JldHVybiBWdCh7fSxjZSl9LGZlPWZ1bmN0aW9uIHQoZSl7T2JqZWN0LmtleXMob2Uuc2VjdXJlKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lW29lLnNlY3VyZVt0XV0mJihvLmRlYnVnKCJEZW5pZWQgYXR0ZW1wdCB0byBtb2RpZnkgYSBzZWN1cmUga2V5ICIuY29uY2F0KG9lLnNlY3VyZVt0XSksZVtvZS5zZWN1cmVbdF1dKSxkZWxldGUgZVtvZS5zZWN1cmVbdF1dKX0pKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbih0KXswPT09dC5pbmRleE9mKCJfXyIpJiZkZWxldGUgZVt0XX0pKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXsic3RyaW5nIj09dHlwZW9mIGVbbl0mJihlW25dLmluZGV4T2YoIjwiKT4tMXx8ZVtuXS5pbmRleE9mKCI+Iik+LTF8fGVbbl0uaW5kZXhPZigidXJsKGRhdGE6Iik+LTEpJiZkZWxldGUgZVtuXSwib2JqZWN0Ij09PXJlKGVbbl0pJiZ0KGVbbl0pfSkpfSxkZT1mdW5jdGlvbih0KXt0LmZvbnRGYW1pbHkmJih0LnRoZW1lVmFyaWFibGVzJiZ0LnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHl8fCh0LnRoZW1lVmFyaWFibGVzPXtmb250RmFtaWx5OnQuZm9udEZhbWlseX0pKSxzZS5wdXNoKHQpLHVlKG9lLHNlKX0scGU9ZnVuY3Rpb24oKXt1ZShvZSxzZT1bXSl9O2Z1bmN0aW9uIHllKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBnZSh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuO2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZ2UodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7Ik9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpO2lmKCJNYXAiPT09bnx8IlNldCI9PT1uKXJldHVybiBBcnJheS5mcm9tKHQpO2lmKCJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIGdlKHQsZSl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGdlKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG1lPVtdLHZlPXt9LGJlPTAseGU9W10sX2U9ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10O2lmKHQuaW5kZXhPZigifiIpPjApe3ZhciByPXQuc3BsaXQoIn4iKTtuPXJbMF0sZT1yWzFdfXJldHVybntjbGFzc05hbWU6bix0eXBlOmV9fSxrZT1mdW5jdGlvbih0KXt2YXIgZT1fZSh0KTt2b2lkIDA9PT12ZVtlLmNsYXNzTmFtZV0mJih2ZVtlLmNsYXNzTmFtZV09e2lkOmUuY2xhc3NOYW1lLHR5cGU6ZS50eXBlLGNzc0NsYXNzZXM6W10sbWV0aG9kczpbXSxtZW1iZXJzOltdLGFubm90YXRpb25zOltdLGRvbUlkOiJjbGFzc2lkLSIrZS5jbGFzc05hbWUrIi0iK2JlfSxiZSsrKX0sd2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHZlKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYodmVbZVtuXV0uaWQ9PT10KXJldHVybiB2ZVtlW25dXS5kb21JZH0sVGU9ZnVuY3Rpb24odCxlKXt2YXIgbj1fZSh0KS5jbGFzc05hbWUscj12ZVtuXTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBpPWUudHJpbSgpO2kuc3RhcnRzV2l0aCgiPDwiKSYmaS5lbmRzV2l0aCgiPj4iKT9yLmFubm90YXRpb25zLnB1c2goaS5zdWJzdHJpbmcoMixpLmxlbmd0aC0yKSk6aS5pbmRleE9mKCIpIik+MD9yLm1ldGhvZHMucHVzaChpKTppJiZyLm1lbWJlcnMucHVzaChpKX19LEVlPWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ7dFswXS5tYXRjaCgvXGQvKSYmKG49ImNsYXNzaWQtIituKSx2b2lkIDAhPT12ZVtuXSYmdmVbbl0uY3NzQ2xhc3Nlcy5wdXNoKGUpfSkpfSxDZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9aGUoKSxpPXQsYT13ZShpKTtpZigibG9vc2UiPT09ci5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lJiZ2b2lkIDAhPT12ZVtpXSl7dmFyIG89W107aWYoInN0cmluZyI9PXR5cGVvZiBuKXtvPW4uc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBjPW9bc10udHJpbSgpOyciJz09PWMuY2hhckF0KDApJiYnIic9PT1jLmNoYXJBdChjLmxlbmd0aC0xKSYmKGM9Yy5zdWJzdHIoMSxjLmxlbmd0aC0yKSksb1tzXT1jfX0wPT09by5sZW5ndGgmJm8ucHVzaChhKSx4ZS5wdXNoKChmdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQoYSwnIl0nKSk7bnVsbCE9PXQmJnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe25lLnJ1bkZ1bmMuYXBwbHkobmUsW2VdLmNvbmNhdCh5ZShvKSkpfSksITEpfSkpfX0sU2U9e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjN9LEFlPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh1LnNlbGVjdCkoIi5tZXJtYWlkVG9vbHRpcCIpO251bGw9PT0oZS5fZ3JvdXBzfHxlKVswXVswXSYmKGU9T2JqZWN0KHUuc2VsZWN0KSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksT2JqZWN0KHUuc2VsZWN0KSh0KS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0KHUuc2VsZWN0KSh0aGlzKTtpZihudWxsIT09dC5hdHRyKCJ0aXRsZSIpKXt2YXIgbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLCIuOSIpLGUuaHRtbCh0LmF0dHIoInRpdGxlIikpLnN0eWxlKCJsZWZ0Iix3aW5kb3cuc2Nyb2xsWCtuLmxlZnQrKG4ucmlnaHQtbi5sZWZ0KS8yKyJweCIpLnN0eWxlKCJ0b3AiLHdpbmRvdy5zY3JvbGxZK24udG9wLTE0K2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKyJweCIpLHQuY2xhc3NlZCgiaG92ZXIiLCEwKX19KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxPYmplY3QodS5zZWxlY3QpKHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O3hlLnB1c2goQWUpO3ZhciBNZT0iVEIiLE9lPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7eWMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoZSgpLmNsYXNzfSxhZGRDbGFzczprZSxiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe3hlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGNsZWFyOmZ1bmN0aW9uKCl7bWU9W10sdmU9e30sKHhlPVtdKS5wdXNoKEFlKX0sZ2V0Q2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHZlW3RdfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHZlfSxhZGRBbm5vdGF0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49X2UodCkuY2xhc3NOYW1lO3ZlW25dLmFubm90YXRpb25zLnB1c2goZSl9LGdldFJlbGF0aW9uczpmdW5jdGlvbigpe3JldHVybiBtZX0sYWRkUmVsYXRpb246ZnVuY3Rpb24odCl7by5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KHQpKSxrZSh0LmlkMSksa2UodC5pZDIpLHQuaWQxPV9lKHQuaWQxKS5jbGFzc05hbWUsdC5pZDI9X2UodC5pZDIpLmNsYXNzTmFtZSxtZS5wdXNoKHQpfSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gTWV9LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXtNZT10fSxhZGRNZW1iZXI6VGUsYWRkTWVtYmVyczpmdW5jdGlvbih0LGUpe0FycmF5LmlzQXJyYXkoZSkmJihlLnJldmVyc2UoKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBUZSh0LGUpfSkpKX0sY2xlYW51cExhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/dC5zdWJzdHIoMSkudHJpbSgpOnQudHJpbSgpfSxsaW5lVHlwZTp7TElORTowLERPVFRFRF9MSU5FOjF9LHJlbGF0aW9uVHlwZTpTZSxzZXRDbGlja0V2ZW50OmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7Q2UodCxlLG4pLHZlW3RdLmhhdmVDYWxsYmFjaz0hMH0pKSxFZSh0LCJjbGlja2FibGUiKX0sc2V0Q3NzQ2xhc3M6RWUsc2V0TGluazpmdW5jdGlvbih0LGUsbil7dmFyIHI9aGUoKTt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9dDt0WzBdLm1hdGNoKC9cZC8pJiYoaT0iY2xhc3NpZC0iK2kpLHZvaWQgMCE9PXZlW2ldJiYodmVbaV0ubGluaz1uZS5mb3JtYXRVcmwoZSxyKSx2ZVtpXS5saW5rVGFyZ2V0PSJzdHJpbmciPT10eXBlb2Ygbj9uOiJfYmxhbmsiKX0pKSxFZSh0LCJjbGlja2FibGUiKX0sc2V0VG9vbHRpcDpmdW5jdGlvbih0LGUpe3ZhciBuPWhlKCk7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWUmJih2ZVt0XS50b29sdGlwPW50LnNhbml0aXplVGV4dChlLG4pKX0pKX0sbG9va1VwRG9tSWQ6d2V9LE5lPW4oMTApLEJlPW4ubihOZSksRGU9bigzKSxMZT1uLm4oRGUpLEllPW4oMTYpLFJlPW4ubihJZSksRmU9MCxQZT1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC8oXCt8LXx+fCMpPyhcdyspKH5cdyt+fFxbXF0pP1xzKyhcdyspLyksbj10Lm1hdGNoKC9eKFsrfFwtfH58I10pPyhcdyspICpcKCAqKC4qKVwpICooXCp8XCQpPyAqKFx3Klt+fFtcXV0qXHMqXHcqfj8pJC8pO3JldHVybiBlJiYhbj9qZShlKTpuP1llKG4pOnplKHQpfSxqZT1mdW5jdGlvbih0KXt2YXIgZT0iIjt0cnl7ZT0odFsxXT90WzFdLnRyaW0oKToiIikrKHRbMl0/dFsyXS50cmltKCk6IiIpKyh0WzNdPyRlKHRbM10udHJpbSgpKToiIikrIiAiKyh0WzRdP3RbNF0udHJpbSgpOiIiKX1jYXRjaChuKXtlPXR9cmV0dXJue2Rpc3BsYXlUZXh0OmUsY3NzU3R5bGU6IiJ9fSxZZT1mdW5jdGlvbih0KXt2YXIgZT0iIixuPSIiO3RyeXt2YXIgcj10WzFdP3RbMV0udHJpbSgpOiIiLGk9dFsyXT90WzJdLnRyaW0oKToiIixhPXRbM10/JGUodFszXS50cmltKCkpOiIiLG89dFs0XT90WzRdLnRyaW0oKToiIjtuPXIraSsiKCIrYSsiKSIrKHRbNV0/IiA6ICIrJGUodFs1XSkudHJpbSgpOiIiKSxlPXFlKG8pfWNhdGNoKGUpe249dH1yZXR1cm57ZGlzcGxheVRleHQ6bixjc3NTdHlsZTplfX0semU9ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj0iIixyPSIiLGk9dC5pbmRleE9mKCIoIiksYT10LmluZGV4T2YoIikiKTtpZihpPjEmJmE+aSYmYTw9dC5sZW5ndGgpe3ZhciBvPSIiLHM9IiIsYz10LnN1YnN0cmluZygwLDEpO2MubWF0Y2goL1x3Lyk/cz10LnN1YnN0cmluZygwLGkpLnRyaW0oKTooYy5tYXRjaCgvXCt8LXx+fCMvKSYmKG89Yykscz10LnN1YnN0cmluZygxLGkpLnRyaW0oKSk7dmFyIHU9dC5zdWJzdHJpbmcoaSsxLGEpLGw9dC5zdWJzdHJpbmcoYSsxLDEpO249cWUobCksZT1vK3MrIigiKyRlKHUudHJpbSgpKSsiKSIsYTwiIi5sZW5ndGgmJiIiIT09KHI9dC5zdWJzdHJpbmcoYSsyKS50cmltKCkpJiYocj0iIDogIiskZShyKSl9ZWxzZSBlPSRlKHQpO3JldHVybntkaXNwbGF5VGV4dDplLGNzc1N0eWxlOm59fSxVZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1QZShlKSxhPXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHIucGFkZGluZykudGV4dChpLmRpc3BsYXlUZXh0KTsiIiE9PWkuY3NzU3R5bGUmJmEuYXR0cigic3R5bGUiLGkuY3NzU3R5bGUpLG58fGEuYXR0cigiZHkiLHIudGV4dEhlaWdodCl9LCRlPWZ1bmN0aW9uIHQoZSl7dmFyIG49ZTtyZXR1cm4tMSE9ZS5pbmRleE9mKCJ+Iik/dChuPShuPW4ucmVwbGFjZSgifiIsIjwiKSkucmVwbGFjZSgifiIsIj4iKSk6bn0scWU9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiKiI6cmV0dXJuImZvbnQtc3R5bGU6aXRhbGljOyI7Y2FzZSIkIjpyZXR1cm4idGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsiO2RlZmF1bHQ6cmV0dXJuIiJ9fSxXZT1mdW5jdGlvbih0LGUsbil7by5pbmZvKCJSZW5kZXJpbmcgY2xhc3MgIitlKTt2YXIgcixpPWUuaWQsYT17aWQ6aSxsYWJlbDplLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LHM9dC5hcHBlbmQoImciKS5hdHRyKCJpZCIsd2UoaSkpLmF0dHIoImNsYXNzIiwiY2xhc3NHcm91cCIpO3I9ZS5saW5rP3MuYXBwZW5kKCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGUubGluaykuYXR0cigidGFyZ2V0IixlLmxpbmtUYXJnZXQpLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLG4udGV4dEhlaWdodCtuLnBhZGRpbmcpLmF0dHIoIngiLDApOnMuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsbi50ZXh0SGVpZ2h0K24ucGFkZGluZykuYXR0cigieCIsMCk7dmFyIGM9ITA7ZS5hbm5vdGF0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1yLmFwcGVuZCgidHNwYW4iKS50ZXh0KCLCqyIrdCsiwrsiKTtjfHxlLmF0dHIoImR5IixuLnRleHRIZWlnaHQpLGM9ITF9KSk7dmFyIHU9ZS5pZDt2b2lkIDAhPT1lLnR5cGUmJiIiIT09ZS50eXBlJiYodSs9IjwiK2UudHlwZSsiPiIpO3ZhciBsPXIuYXBwZW5kKCJ0c3BhbiIpLnRleHQodSkuYXR0cigiY2xhc3MiLCJ0aXRsZSIpO2N8fGwuYXR0cigiZHkiLG4udGV4dEhlaWdodCk7dmFyIGg9ci5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxmPXMuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIixuLnBhZGRpbmcraCtuLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLG4ucGFkZGluZytoK24uZGl2aWRlck1hcmdpbi8yKSxkPXMuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbi5wYWRkaW5nKS5hdHRyKCJ5IixoK24uZGl2aWRlck1hcmdpbituLnRleHRIZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImNsYXNzIiwiY2xhc3NUZXh0Iik7Yz0hMCxlLm1lbWJlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7VWUoZCx0LGMsbiksYz0hMX0pKTt2YXIgcD1kLm5vZGUoKS5nZXRCQm94KCkseT1zLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsbi5wYWRkaW5nK2grbi5kaXZpZGVyTWFyZ2luK3AuaGVpZ2h0KS5hdHRyKCJ5MiIsbi5wYWRkaW5nK2grbi5kaXZpZGVyTWFyZ2luK3AuaGVpZ2h0KSxnPXMuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbi5wYWRkaW5nKS5hdHRyKCJ5IixoKzIqbi5kaXZpZGVyTWFyZ2luK3AuaGVpZ2h0K24udGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtjPSEwLGUubWV0aG9kcy5mb3JFYWNoKChmdW5jdGlvbih0KXtVZShnLHQsYyxuKSxjPSExfSkpO3ZhciBtPXMubm9kZSgpLmdldEJCb3goKSx2PSIgIjtlLmNzc0NsYXNzZXMubGVuZ3RoPjAmJih2Kz1lLmNzc0NsYXNzZXMuam9pbigiICIpKTt2YXIgYj1zLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixtLndpZHRoKzIqbi5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0K24ucGFkZGluZysuNSpuLmRpdmlkZXJNYXJnaW4pLmF0dHIoImNsYXNzIix2KS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoO3JldHVybiByLm5vZGUoKS5jaGlsZE5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc2V0QXR0cmlidXRlKCJ4IiwoYi10LmdldEJCb3goKS53aWR0aCkvMil9KSksZS50b29sdGlwJiZyLmluc2VydCgidGl0bGUiKS50ZXh0KGUudG9vbHRpcCksZi5hdHRyKCJ4MiIsYikseS5hdHRyKCJ4MiIsYiksYS53aWR0aD1iLGEuaGVpZ2h0PW0uaGVpZ2h0K24ucGFkZGluZysuNSpuLmRpdmlkZXJNYXJnaW4sYX0sSGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgU2UuQUdHUkVHQVRJT046cmV0dXJuImFnZ3JlZ2F0aW9uIjtjYXNlIFNlLkVYVEVOU0lPTjpyZXR1cm4iZXh0ZW5zaW9uIjtjYXNlIFNlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBTZS5ERVBFTkRFTkNZOnJldHVybiJkZXBlbmRlbmN5In19O2UucG9pbnRzPWUucG9pbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIU51bWJlci5pc05hTih0LnkpfSkpO3ZhciBhLHMsYz1lLnBvaW50cyxsPU9iamVjdCh1LmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLmN1cnZlKHUuY3VydmVCYXNpcyksaD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGwoYykpLmF0dHIoImlkIiwiZWRnZSIrRmUpLmF0dHIoImNsYXNzIiwicmVsYXRpb24iKSxmPSIiO3IuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKGY9KGY9KGY9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksMT09bi5yZWxhdGlvbi5saW5lVHlwZSYmaC5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIGRhc2hlZC1saW5lIiksIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMSYmaC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitmKyIjIitpKG4ucmVsYXRpb24udHlwZTEpKyJTdGFydCkiKSwibm9uZSIhPT1uLnJlbGF0aW9uLnR5cGUyJiZoLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitmKyIjIitpKG4ucmVsYXRpb24udHlwZTIpKyJFbmQpIik7dmFyIGQscCx5LGcsbT1lLnBvaW50cy5sZW5ndGgsdj1uZS5jYWxjTGFiZWxQb3NpdGlvbihlLnBvaW50cyk7aWYoYT12Lngscz12LnksbSUyIT0wJiZtPjEpe3ZhciBiPW5lLmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKCJub25lIiE9PW4ucmVsYXRpb24udHlwZTEsZS5wb2ludHMsZS5wb2ludHNbMF0pLHg9bmUuY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24oIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMixlLnBvaW50cyxlLnBvaW50c1ttLTFdKTtvLmRlYnVnKCJjYXJkaW5hbGl0eV8xX3BvaW50ICIrSlNPTi5zdHJpbmdpZnkoYikpLG8uZGVidWcoImNhcmRpbmFsaXR5XzJfcG9pbnQgIitKU09OLnN0cmluZ2lmeSh4KSksZD1iLngscD1iLnkseT14LngsZz14Lnl9aWYodm9pZCAwIT09bi50aXRsZSl7dmFyIF89dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNsYXNzTGFiZWwiKSxrPV8uYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoIngiLGEpLmF0dHIoInkiLHMpLmF0dHIoImZpbGwiLCJyZWQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQobi50aXRsZSk7d2luZG93LmxhYmVsPWs7dmFyIHc9ay5ub2RlKCkuZ2V0QkJveCgpO18uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4Iix3Lngtci5wYWRkaW5nLzIpLmF0dHIoInkiLHcueS1yLnBhZGRpbmcvMikuYXR0cigid2lkdGgiLHcud2lkdGgrci5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHcuaGVpZ2h0K3IucGFkZGluZyl9KG8uaW5mbygiUmVuZGVyaW5nIHJlbGF0aW9uICIrSlNPTi5zdHJpbmdpZnkobikpLHZvaWQgMCE9PW4ucmVsYXRpb25UaXRsZTEmJiJub25lIiE9PW4ucmVsYXRpb25UaXRsZTEpJiZ0LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2FyZGluYWxpdHkiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInR5cGUxIikuYXR0cigieCIsZCkuYXR0cigieSIscCkuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQobi5yZWxhdGlvblRpdGxlMSk7dm9pZCAwIT09bi5yZWxhdGlvblRpdGxlMiYmIm5vbmUiIT09bi5yZWxhdGlvblRpdGxlMiYmdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMiIpLmF0dHIoIngiLHkpLmF0dHIoInkiLGcpLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoImZvbnQtc2l6ZSIsIjYiKS50ZXh0KG4ucmVsYXRpb25UaXRsZTIpO0ZlKyt9O0llLnBhcnNlci55eT1PZTt2YXIgVmU9e30sR2U9e2RpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTB9LFhlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyhWZSksbj0wO248ZS5sZW5ndGg7bisrKWlmKFZlW2Vbbl1dLmxhYmVsPT09dClyZXR1cm4gZVtuXX0sWmU9ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7R2VbZV09dFtlXX0pKX0sS2U9ZnVuY3Rpb24odCxlKXtWZT17fSxJZS5wYXJzZXIueXkuY2xlYXIoKSxJZS5wYXJzZXIucGFyc2UodCksby5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK3QpO3ZhciBuLHI9T2JqZWN0KHUuc2VsZWN0KSgiW2lkPSciLmNvbmNhdChlLCInXSIpKTtyLmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpLChuPXIpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJleHRlbnNpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBWIDEzIEwxOCw3IFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJjb21wb3NpdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJjb21wb3NpdGlvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYWdncmVnYXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5RW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIik7dmFyIGk9bmV3IExlLmEuR3JhcGgoe211bHRpZ3JhcGg6ITB9KTtpLnNldEdyYXBoKHtpc011bHRpR3JhcGg6ITB9KSxpLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7Zm9yKHZhciBhPU9lLmdldENsYXNzZXMoKSxzPU9iamVjdC5rZXlzKGEpLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIGw9YVtzW2NdXSxoPVdlKHIsbCxHZSk7VmVbaC5pZF09aCxpLnNldE5vZGUoaC5pZCxoKSxvLmluZm8oIk9yZyBoZWlnaHQ6ICIraC5oZWlnaHQpfU9lLmdldFJlbGF0aW9ucygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe28uaW5mbygidGpvaG8iK1hlKHQuaWQxKStYZSh0LmlkMikrSlNPTi5zdHJpbmdpZnkodCkpLGkuc2V0RWRnZShYZSh0LmlkMSksWGUodC5pZDIpLHtyZWxhdGlvbjp0fSx0LnRpdGxlfHwiREVGQVVMVCIpfSkpLEJlLmEubGF5b3V0KGkpLGkubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10JiZ2b2lkIDAhPT1pLm5vZGUodCkmJihvLmRlYnVnKCJOb2RlICIrdCsiOiAiK0pTT04uc3RyaW5naWZ5KGkubm9kZSh0KSkpLE9iamVjdCh1LnNlbGVjdCkoIiMiK3dlKHQpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaS5ub2RlKHQpLngtaS5ub2RlKHQpLndpZHRoLzIpKyIsIisoaS5ub2RlKHQpLnktaS5ub2RlKHQpLmhlaWdodC8yKSsiICkiKSl9KSksaS5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWkuZWRnZSh0KSYmKG8uZGVidWcoIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZSh0KSkpLEhlKHIsaS5lZGdlKHQpLGkuZWRnZSh0KS5yZWxhdGlvbixHZSkpfSkpO3ZhciBmPXIubm9kZSgpLmdldEJCb3goKSxkPWYud2lkdGgrNDAscD1mLmhlaWdodCs0MDt0ZShyLHAsZCxHZS51c2VNYXhXaWR0aCk7dmFyIHk9IiIuY29uY2F0KGYueC0yMCwiICIpLmNvbmNhdChmLnktMjAsIiAiKS5jb25jYXQoZCwiICIpLmNvbmNhdChwKTtvLmRlYnVnKCJ2aWV3Qm94ICIuY29uY2F0KHkpKSxyLmF0dHIoInZpZXdCb3giLHkpfSxRZT17ZXh0ZW5zaW9uOmZ1bmN0aW9uKHQsZSxuKXtvLnRyYWNlKCJNYWtpbmcgbWFya2VycyBmb3IgIixuKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1leHRlbnNpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWV4dGVuc2lvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK2UpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIil9LGNvbXBvc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY29tcG9zaXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK2UpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGFnZ3JlZ2F0aW9uOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2UpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGRlcGVuZGVuY3k6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1kZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1kZXBlbmRlbmN5RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2UpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxwb2ludDpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCAxMCBMIDEwIDAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sY2lyY2xlOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY2lyY2xlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNpcmNsZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjcm9zczpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNyb3NzRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsMTIpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNyb3NzU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGJhcmI6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1iYXJiRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwxNCkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfX0sSmU9ZnVuY3Rpb24odCxlLG4scil7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtRZVtlXSh0LG4scil9KSl9O2Z1bmN0aW9uIHRuKHQpe3JldHVybih0bj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfXZhciBlbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10fHwiIjtpZigib2JqZWN0Ij09PXRuKGkpJiYoaT1pWzBdKSxldChoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSlyZXR1cm4gaT1pLnJlcGxhY2UoL1xcbnxcbi9nLCI8YnIgLz4iKSxvLmluZm8oInZlcnRleFRleHQiK2kpLGZ1bmN0aW9uKHQpe3ZhciBlLG4scj1PYmplY3QodS5zZWxlY3QpKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb3JlaWduT2JqZWN0IikpLGk9ci5hcHBlbmQoInhodG1sOmRpdiIpLGE9dC5sYWJlbCxvPXQuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiO3JldHVybiBpLmh0bWwoJzxzcGFuIGNsYXNzPSInK28rJyIgJysodC5sYWJlbFN0eWxlPydzdHlsZT0iJyt0LmxhYmVsU3R5bGUrJyInOiIiKSsiPiIrYSsiPC9zcGFuPiIpLGU9aSwobj10LmxhYmVsU3R5bGUpJiZlLmF0dHIoInN0eWxlIixuKSxpLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksaS5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHIubm9kZSgpfSh7aXNOb2RlOnIsbGFiZWw6aS5yZXBsYWNlKC9mYVtscnNiXT86ZmEtW1x3LV0rL2csKGZ1bmN0aW9uKHQpe3JldHVybiI8aSBjbGFzcz0nIi5jb25jYXQodC5yZXBsYWNlKCI6IiwiICIpLCInPjwvaT4iKX0pKSxsYWJlbFN0eWxlOmUucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX0pO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7YS5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO3ZhciBzPVtdO3M9InN0cmluZyI9PXR5cGVvZiBpP2kuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGkpP2k6W107Zm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO2wuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksbC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksbC5zZXRBdHRyaWJ1dGUoIngiLCIwIiksbj9sLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ0aXRsZS1yb3ciKTpsLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSxsLnRleHRDb250ZW50PXNbY10udHJpbSgpLGEuYXBwZW5kQ2hpbGQobCl9cmV0dXJuIGF9LG5uPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpO2k9bnx8Im5vZGUgZGVmYXVsdCI7dmFyIGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaSkuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLG89YS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLGUubGFiZWxTdHlsZSkscz1vLm5vZGUoKS5hcHBlbmRDaGlsZChlbihlLmxhYmVsVGV4dCxlLmxhYmVsU3R5bGUsITEscikpLGM9cy5nZXRCQm94KCk7aWYoZXQoaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBsPXMuY2hpbGRyZW5bMF0saD1PYmplY3QodS5zZWxlY3QpKHMpO2M9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoLmF0dHIoIndpZHRoIixjLndpZHRoKSxoLmF0dHIoImhlaWdodCIsYy5oZWlnaHQpfXZhciBmPWUucGFkZGluZy8yO3JldHVybiBvLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1jLndpZHRoLzIrIiwgIistYy5oZWlnaHQvMisiKSIpLHtzaGFwZVN2ZzphLGJib3g6YyxoYWxmUGFkZGluZzpmLGxhYmVsOm99fSxybj1mdW5jdGlvbih0LGUpe3ZhciBuPWUubm9kZSgpLmdldEJCb3goKTt0LndpZHRoPW4ud2lkdGgsdC5oZWlnaHQ9bi5oZWlnaHR9O2Z1bmN0aW9uIGFuKHQsZSxuLHIpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwibGFiZWwtY29udGFpbmVyIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWUvMisiLCIrbi8yKyIpIil9dmFyIG9uPXt9LHNuPXt9LGNuPXt9LHVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8udHJhY2UoIkluIGlzRGVjZW5kYW50IixlLCIgIix0LCIgPSAiLHNuW2VdLmluZGV4T2YodCk+PTApLHNuW2VdLmluZGV4T2YodCk+PTB9LGxuPWZ1bmN0aW9uIHQoZSxuLHIsaSl7by53YXJuKCJDb3B5aW5nIGNoaWxkcmVuIG9mICIsZSwicm9vdCIsaSwiZGF0YSIsbi5ub2RlKGUpLGkpO3ZhciBhPW4uY2hpbGRyZW4oZSl8fFtdO2UhPT1pJiZhLnB1c2goZSksby53YXJuKCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkIixlLCJub2RlcyIsYSksYS5mb3JFYWNoKChmdW5jdGlvbihhKXtpZihuLmNoaWxkcmVuKGEpLmxlbmd0aD4wKXQoYSxuLHIsaSk7ZWxzZXt2YXIgcz1uLm5vZGUoYSk7by5pbmZvKCJjcCAiLGEsIiB0byAiLGksIiB3aXRoIHBhcmVudCAiLGUpLHIuc2V0Tm9kZShhLHMpLGkhPT1uLnBhcmVudChhKSYmKG8ud2FybigiU2V0dGluZyBwYXJlbnQiLGEsbi5wYXJlbnQoYSkpLHIuc2V0UGFyZW50KGEsbi5wYXJlbnQoYSkpKSxlIT09aSYmYSE9PWU/KG8uZGVidWcoIlNldHRpbmcgcGFyZW50IixhLGUpLHIuc2V0UGFyZW50KGEsZSkpOihvLmluZm8oIkluIGNvcHkgIixlLCJyb290IixpLCJkYXRhIixuLm5vZGUoZSksaSksby5kZWJ1ZygiTm90IFNldHRpbmcgcGFyZW50IGZvciBub2RlPSIsYSwiY2x1c3RlciE9PXJvb3RJZCIsZSE9PWksIm5vZGUhPT1jbHVzdGVySWQiLGEhPT1lKSk7dmFyIGM9bi5lZGdlcyhhKTtvLmRlYnVnKCJDb3B5aW5nIEVkZ2VzIixjKSxjLmZvckVhY2goKGZ1bmN0aW9uKHQpe28uaW5mbygiRWRnZSIsdCk7dmFyIGE9bi5lZGdlKHQudix0LncsdC5uYW1lKTtvLmluZm8oIkVkZ2UgZGF0YSIsYSxpKTt0cnl7IWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uaW5mbygiRGVjZW5kYW50cyBvZiAiLGUsIiBpcyAiLHNuW2VdKSxvLmluZm8oIkVkZ2UgaXMgIix0KSx0LnYhPT1lJiYodC53IT09ZSYmKHNuW2VdPyhvLmluZm8oIkhlcmUgIiksc25bZV0uaW5kZXhPZih0LnYpPj0wfHwoISF1bih0LnYsZSl8fCghIXVuKHQudyxlKXx8c25bZV0uaW5kZXhPZih0LncpPj0wKSkpOihvLmRlYnVnKCJUaWx0LCAiLGUsIixub3QgaW4gZGVjZW5kYW50cyIpLCExKSkpfSh0LGkpP28uaW5mbygiU2tpcHBpbmcgY29weSBvZiBlZGdlICIsdC52LCItLVx4M2UiLHQudywiIHJvb3RJZDogIixpLCIgY2x1c3RlcklkOiIsZSk6KG8uaW5mbygiQ29weWluZyBhcyAiLHQudix0LncsYSx0Lm5hbWUpLHIuc2V0RWRnZSh0LnYsdC53LGEsdC5uYW1lKSxvLmluZm8oIm5ld0dyYXBoIGVkZ2VzICIsci5lZGdlcygpLHIuZWRnZShyLmVkZ2VzKClbMF0pKSl9Y2F0Y2godCl7by5lcnJvcih0KX19KSl9by5kZWJ1ZygiUmVtb3Zpbmcgbm9kZSIsYSksbi5yZW1vdmVOb2RlKGEpfSkpfSxobj1mdW5jdGlvbiB0KGUsbil7by50cmFjZSgiU2VhcmNoaW5nIixlKTt2YXIgcj1uLmNoaWxkcmVuKGUpO2lmKG8udHJhY2UoIlNlYXJjaGluZyBjaGlsZHJlbiBvZiBpZCAiLGUsciksci5sZW5ndGg8MSlyZXR1cm4gby50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGUpLGU7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXQocltpXSxuKTtpZihhKXJldHVybiBvLnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGUsIiA9PiAiLGEpLGF9fSxmbj1mdW5jdGlvbih0KXtyZXR1cm4gb25bdF0mJm9uW3RdLmV4dGVybmFsQ29ubmVjdGlvbnMmJm9uW3RdP29uW3RdLmlkOnR9LGRuPWZ1bmN0aW9uKHQsZSl7IXR8fGU+MTA/by5kZWJ1ZygiT3B0aW5nIG91dCwgbm8gZ3JhcGggIik6KG8uZGVidWcoIk9wdGluZyBpbiwgZ3JhcGggIiksdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuY2hpbGRyZW4oZSkubGVuZ3RoPjAmJihvLndhcm4oIkNsdXN0ZXIgaWRlbnRpZmllZCIsZSwiIFJlcGxhY2VtZW50IGlkIGluIGVkZ2VzOiAiLGhuKGUsdCkpLHNuW2VdPWZ1bmN0aW9uIHQoZSxuKXtmb3IodmFyIHI9bi5jaGlsZHJlbihlKSxpPVtdLmNvbmNhdChyKSxhPTA7YTxyLmxlbmd0aDthKyspY25bclthXV09ZSxpPWkuY29uY2F0KHQoclthXSxuKSk7cmV0dXJuIGl9KGUsdCksb25bZV09e2lkOmhuKGUsdCksY2x1c3RlckRhdGE6dC5ub2RlKGUpfSl9KSksdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQuY2hpbGRyZW4oZSkscj10LmVkZ2VzKCk7bi5sZW5ndGg+MD8oby5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIixlLHNuKSxyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudiE9PWUmJnQudyE9PWUmJih1bih0LnYsZSledW4odC53LGUpJiYoby53YXJuKCJFZGdlOiAiLHQsIiBsZWF2ZXMgY2x1c3RlciAiLGUpLG8ud2FybigiRGVjZW5kYW50cyBvZiBYWFggIixlLCI6ICIsc25bZV0pLG9uW2VdLmV4dGVybmFsQ29ubmVjdGlvbnM9ITApKX0pKSk6by5kZWJ1ZygiTm90IGEgY2x1c3RlciAiLGUsc24pfSkpLHQuZWRnZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7by53YXJuKCJFZGdlICIrZS52KyIgLT4gIitlLncrIjogIitKU09OLnN0cmluZ2lmeShlKSksby53YXJuKCJFZGdlICIrZS52KyIgLT4gIitlLncrIjogIitKU09OLnN0cmluZ2lmeSh0LmVkZ2UoZSkpKTt2YXIgcj1lLnYsaT1lLnc7by53YXJuKCJGaXggWFhYIixvbiwiaWRzOiIsZS52LGUudywiVHJhbnNsYXRlaW5nOiAiLG9uW2Uudl0sIiAtLS0gIixvbltlLnddKSwob25bZS52XXx8b25bZS53XSkmJihvLndhcm4oIkZpeGluZyBhbmQgdHJpeGluZyAtIHJlbW92aW5nIFhYWCIsZS52LGUudyxlLm5hbWUpLHI9Zm4oZS52KSxpPWZuKGUudyksdC5yZW1vdmVFZGdlKGUudixlLncsZS5uYW1lKSxyIT09ZS52JiYobi5mcm9tQ2x1c3Rlcj1lLnYpLGkhPT1lLncmJihuLnRvQ2x1c3Rlcj1lLncpLG8ud2FybigiRml4IFJlcGxhY2luZyB3aXRoIFhYWCIscixpLGUubmFtZSksdC5zZXRFZGdlKHIsaSxuLGUubmFtZSkpfSkpLG8ud2FybigiQWRqdXN0ZWQgR3JhcGgiLExlLmEuanNvbi53cml0ZSh0KSkscG4odCwwKSxvLnRyYWNlKG9uKSl9LHBuPWZ1bmN0aW9uIHQoZSxuKXtpZihvLndhcm4oImV4dHJhY3RvciAtICIsbixMZS5hLmpzb24ud3JpdGUoZSksZS5jaGlsZHJlbigiRCIpKSxuPjEwKW8uZXJyb3IoIkJhaWxpbmcgb3V0Iik7ZWxzZXtmb3IodmFyIHI9ZS5ub2RlcygpLGk9ITEsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdLGM9ZS5jaGlsZHJlbihzKTtpPWl8fGMubGVuZ3RoPjB9aWYoaSl7by5kZWJ1ZygiTm9kZXMgPSAiLHIsbik7Zm9yKHZhciB1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciBsPXJbdV07aWYoby5kZWJ1ZygiRXh0cmFjdGluZyBub2RlIixsLG9uLG9uW2xdJiYhb25bbF0uZXh0ZXJuYWxDb25uZWN0aW9ucywhZS5wYXJlbnQobCksZS5ub2RlKGwpLGUuY2hpbGRyZW4oIkQiKSwiIERlcHRoICIsbiksb25bbF0paWYoIW9uW2xdLmV4dGVybmFsQ29ubmVjdGlvbnMmJmUuY2hpbGRyZW4obCkmJmUuY2hpbGRyZW4obCkubGVuZ3RoPjApe28ud2FybigiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuIixsLG4pO3ZhciBoPSJUQiI9PT1lLmdyYXBoKCkucmFua2Rpcj8iTFIiOiJUQiI7b25bbF0mJm9uW2xdLmNsdXN0ZXJEYXRhJiZvbltsXS5jbHVzdGVyRGF0YS5kaXImJihoPW9uW2xdLmNsdXN0ZXJEYXRhLmRpcixvLndhcm4oIkZpeGluZyBkaXIiLG9uW2xdLmNsdXN0ZXJEYXRhLmRpcixoKSk7dmFyIGY9bmV3IExlLmEuR3JhcGgoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpoLG5vZGVzZXA6NTAscmFua3NlcDo1MCxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtvLndhcm4oIk9sZCBncmFwaCBiZWZvcmUgY29weSIsTGUuYS5qc29uLndyaXRlKGUpKSxsbihsLGUsZixsKSxlLnNldE5vZGUobCx7Y2x1c3Rlck5vZGU6ITAsaWQ6bCxjbHVzdGVyRGF0YTpvbltsXS5jbHVzdGVyRGF0YSxsYWJlbFRleHQ6b25bbF0ubGFiZWxUZXh0LGdyYXBoOmZ9KSxvLndhcm4oIk5ldyBncmFwaCBhZnRlciBjb3B5IG5vZGU6ICgiLGwsIikiLExlLmEuanNvbi53cml0ZShmKSksby5kZWJ1ZygiT2xkIGdyYXBoIGFmdGVyIGNvcHkiLExlLmEuanNvbi53cml0ZShlKSl9ZWxzZSBvLndhcm4oIkNsdXN0ZXIgKiogIixsLCIgKipub3QgbWVldGluZyB0aGUgY3JpdGVyaWEgIWV4dGVybmFsQ29ubmVjdGlvbnM6Iiwhb25bbF0uZXh0ZXJuYWxDb25uZWN0aW9ucywiIG5vIHBhcmVudDogIiwhZS5wYXJlbnQobCksIiBjaGlsZHJlbiAiLGUuY2hpbGRyZW4obCkmJmUuY2hpbGRyZW4obCkubGVuZ3RoPjAsZS5jaGlsZHJlbigiRCIpLG4pLG8uZGVidWcob24pO2Vsc2Ugby5kZWJ1ZygiTm90IGEgY2x1c3RlciIsbCxuKX1yPWUubm9kZXMoKSxvLndhcm4oIk5ldyBsaXN0IG9mIG5vZGVzIixyKTtmb3IodmFyIGQ9MDtkPHIubGVuZ3RoO2QrKyl7dmFyIHA9cltkXSx5PWUubm9kZShwKTtvLndhcm4oIiBOb3cgbmV4dCBsZXZlbCIscCx5KSx5LmNsdXN0ZXJOb2RlJiZ0KHkuZ3JhcGgsbisxKX19ZWxzZSBvLmRlYnVnKCJEb25lLCBubyBub2RlIGhhcyBjaGlsZHJlbiIsZS5ub2RlcygpKX19LHluPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KGUsbil7aWYoMD09PW4ubGVuZ3RoKXJldHVybltdO3ZhciByPU9iamVjdC5hc3NpZ24obik7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9ZS5jaGlsZHJlbihuKSxhPXQoZSxpKTtyPXIuY29uY2F0KGEpfSkpLHJ9KHQsdC5jaGlsZHJlbigpKX0sZ249bigxNzApO3ZhciBtbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LngsYT10Lnksbz1pLXIueCxzPWEtci55LGM9TWF0aC5zcXJ0KGUqZSpzKnMrbipuKm8qbyksdT1NYXRoLmFicyhlKm4qby9jKTtyLng8aSYmKHU9LXUpO3ZhciBsPU1hdGguYWJzKGUqbipzL2MpO3JldHVybiByLnk8YSYmKGw9LWwpLHt4OmkrdSx5OmErbH19O3ZhciB2bj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG1uKHQsZSxlLG4pfTtmdW5jdGlvbiBibih0LGUpe3JldHVybiB0KmU+MH12YXIgeG49ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvLHMsYyx1LGwsaCxmLGQscCx5LGc7aWYoaT1lLnktdC55LG89dC54LWUueCxjPWUueCp0LnktdC54KmUueSxmPWkqbi54K28qbi55K2MsZD1pKnIueCtvKnIueStjLCEoMCE9PWYmJjAhPT1kJiZibihmLGQpfHwoYT1yLnktbi55LHM9bi54LXIueCx1PXIueCpuLnktbi54KnIueSxsPWEqdC54K3MqdC55K3UsaD1hKmUueCtzKmUueSt1LDAhPT1sJiYwIT09aCYmYm4obCxoKXx8MD09KHA9aSpzLWEqbykpKSlyZXR1cm4geT1NYXRoLmFicyhwLzIpLHt4OihnPW8qdS1zKmMpPDA/KGcteSkvcDooZyt5KS9wLHk6KGc9YSpjLWkqdSk8MD8oZy15KS9wOihnK3kpL3B9fSxfbj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC54LGk9dC55LGE9W10sbz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7ImZ1bmN0aW9uIj09dHlwZW9mIGUuZm9yRWFjaD9lLmZvckVhY2goKGZ1bmN0aW9uKHQpe289TWF0aC5taW4obyx0LngpLHM9TWF0aC5taW4ocyx0LnkpfSkpOihvPU1hdGgubWluKG8sZS54KSxzPU1hdGgubWluKHMsZS55KSk7Zm9yKHZhciBjPXItdC53aWR0aC8yLW8sdT1pLXQuaGVpZ2h0LzItcyxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBoPWVbbF0sZj1lW2w8ZS5sZW5ndGgtMT9sKzE6MF0sZD14bih0LG4se3g6YytoLngseTp1K2gueX0se3g6YytmLngseTp1K2YueX0pO2QmJmEucHVzaChkKX1pZighYS5sZW5ndGgpcmV0dXJuIHQ7YS5sZW5ndGg+MSYmYS5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1uLngsaT10Lnktbi55LGE9TWF0aC5zcXJ0KHIqcitpKmkpLG89ZS54LW4ueCxzPWUueS1uLnksYz1NYXRoLnNxcnQobypvK3Mqcyk7cmV0dXJuIGE8Yz8tMTphPT09Yz8wOjF9KSk7cmV0dXJuIGFbMF19O3ZhciBrbj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPTA9PT1zPzA6dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9MD09PW8/MDpjKnMvbykse3g6aStuLHk6YStyfX0sd249e25vZGU6bi5uKGduKS5hLGNpcmNsZTp2bixlbGxpcHNlOm1uLHBvbHlnb246X24scmVjdDprbn07ZnVuY3Rpb24gVG4odCl7cmV0dXJuKFRuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIEVuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGk9NzAsYT0xMDsiTFIiPT09biYmKGk9MTAsYT03MCk7dmFyIG89ci5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMSppLzIpLmF0dHIoInkiLC0xKmEvMikuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsYSkuYXR0cigiY2xhc3MiLCJmb3JrLWpvaW4iKTtyZXR1cm4gcm4oZSxvKSxlLmhlaWdodD1lLmhlaWdodCtlLnBhZGRpbmcvMixlLndpZHRoPWUud2lkdGgrZS5wYWRkaW5nLzIsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHduLnJlY3QoZSx0KX0scn0sQ249e3F1ZXN0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49bm4odCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcrKGkuaGVpZ2h0K2UucGFkZGluZykscz1be3g6YS8yLHk6MH0se3g6YSx5Oi1hLzJ9LHt4OmEvMix5Oi1hfSx7eDowLHk6LWEvMn1dO28uaW5mbygiUXVlc3Rpb24gbWFpbiAoQ2lyY2xlKSIpO3ZhciBjPWFuKHIsYSxhLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxybihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBvLndhcm4oIkludGVyc2VjdCBjYWxsZWQiKSx3bi5wb2x5Z29uKGUscyx0KX0scn0scmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuPW5uKHQsZSwibm9kZSAiK2UuY2xhc3NlcywhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9bi5oYWxmUGFkZGluZztvLnRyYWNlKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBzPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHMuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IiwtaS53aWR0aC8yLWEpLmF0dHIoInkiLC1pLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLHJuKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHduLnJlY3QoZSx0KX0scn0scmVjdFdpdGhUaXRsZTpmdW5jdGlvbih0LGUpe3ZhciBuO249ZS5jbGFzc2VzPyJub2RlICIrZS5jbGFzc2VzOiJub2RlIGRlZmF1bHQiO3ZhciByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG4pLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxpPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYT1yLmluc2VydCgibGluZSIpLHM9ci5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksYz1lLmxhYmVsVGV4dC5mbGF0P2UubGFiZWxUZXh0LmZsYXQoKTplLmxhYmVsVGV4dCxsPSIiO2w9Im9iamVjdCI9PT1UbihjKT9jWzBdOmMsby5pbmZvKCJMYWJlbCB0ZXh0IGFiYzc5IixsLGMsIm9iamVjdCI9PT1UbihjKSk7dmFyIGgsZj1zLm5vZGUoKS5hcHBlbmRDaGlsZChlbihsLGUubGFiZWxTdHlsZSwhMCwhMCkpO2lmKGV0KGhlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgZD1mLmNoaWxkcmVuWzBdLHA9T2JqZWN0KHUuc2VsZWN0KShmKTtoPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscC5hdHRyKCJ3aWR0aCIsaC53aWR0aCkscC5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KX1vLmluZm8oIlRleHQgMiIsYyk7dmFyIHk9Yy5zbGljZSgxLGMubGVuZ3RoKSxnPWYuZ2V0QkJveCgpLG09cy5ub2RlKCkuYXBwZW5kQ2hpbGQoZW4oeS5qb2luP3kuam9pbigiPGJyLz4iKTp5LGUubGFiZWxTdHlsZSwhMCwhMCkpO2lmKGV0KGhlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgdj1tLmNoaWxkcmVuWzBdLGI9T2JqZWN0KHUuc2VsZWN0KShtKTtoPXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYi5hdHRyKCJ3aWR0aCIsaC53aWR0aCksYi5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KX12YXIgeD1lLnBhZGRpbmcvMjtyZXR1cm4gT2JqZWN0KHUuc2VsZWN0KShtKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGgud2lkdGg+Zy53aWR0aD8wOihnLndpZHRoLWgud2lkdGgpLzIpKyIsICIrKGcuaGVpZ2h0K3grNSkrIikiKSxPYmplY3QodS5zZWxlY3QpKGYpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoaC53aWR0aDxnLndpZHRoPzA6LShnLndpZHRoLWgud2lkdGgpLzIpKyIsIDApIiksaD1zLm5vZGUoKS5nZXRCQm94KCkscy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistaC53aWR0aC8yKyIsICIrKC1oLmhlaWdodC8yLXgrMykrIikiKSxpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtaC53aWR0aC8yLXgpLmF0dHIoInkiLC1oLmhlaWdodC8yLXgpLmF0dHIoIndpZHRoIixoLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixoLmhlaWdodCtlLnBhZGRpbmcpLGEuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1oLndpZHRoLzIteCkuYXR0cigieDIiLGgud2lkdGgvMit4KS5hdHRyKCJ5MSIsLWguaGVpZ2h0LzIteCtnLmhlaWdodCt4KS5hdHRyKCJ5MiIsLWguaGVpZ2h0LzIteCtnLmhlaWdodCt4KSxybihlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5yZWN0KGUsdCl9LHJ9LGNob2ljZTpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCkscj1be3g6MCx5OjE0fSx7eDoxNCx5OjB9LHt4OjAseTotMTR9LHt4Oi0xNCx5OjB9XSxpPW4uaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiLCIrdC55fSkpLmpvaW4oIiAiKSk7cmV0dXJuIGkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwyOCkuYXR0cigiaGVpZ2h0IiwyOCksZS53aWR0aD0yOCxlLmhlaWdodD0yOCxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gd24uY2lyY2xlKGUsMTQsdCl9LG59LGNpcmNsZTpmdW5jdGlvbih0LGUpe3ZhciBuPW5uKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmcscz1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHMuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsaS53aWR0aC8yK2EpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLG8uaW5mbygiQ2lyY2xlIG1haW4iKSxybihlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBvLmluZm8oIkNpcmNsZSBpbnRlcnNlY3QiLGUsaS53aWR0aC8yK2EsdCksd24uY2lyY2xlKGUsaS53aWR0aC8yK2EsdCl9LHJ9LHN0YWRpdW06ZnVuY3Rpb24odCxlKXt2YXIgbj1ubih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLmhlaWdodCtlLnBhZGRpbmcsbz1pLndpZHRoK2EvNCtlLnBhZGRpbmcscz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsYS8yKS5hdHRyKCJyeSIsYS8yKS5hdHRyKCJ4Iiwtby8yKS5hdHRyKCJ5IiwtYS8yKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixhKTtyZXR1cm4gcm4oZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gd24ucmVjdChlLHQpfSxyfSxoZXhhZ29uOmZ1bmN0aW9uKHQsZSl7dmFyIG49bm4odCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS5oZWlnaHQrZS5wYWRkaW5nLG89YS80LHM9aS53aWR0aCsyKm8rZS5wYWRkaW5nLGM9W3t4Om8seTowfSx7eDpzLW8seTowfSx7eDpzLHk6LWEvMn0se3g6cy1vLHk6LWF9LHt4Om8seTotYX0se3g6MCx5Oi1hLzJ9XSx1PWFuKHIscyxhLGMpO3JldHVybiB1LmF0dHIoInN0eWxlIixlLnN0eWxlKSxybihlLHUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5wb2x5Z29uKGUsYyx0KX0scn0scmVjdF9sZWZ0X2ludl9hcnJvdzpmdW5jdGlvbih0LGUpe3ZhciBuPW5uKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi1vLzIseTowfSx7eDphLHk6MH0se3g6YSx5Oi1vfSx7eDotby8yLHk6LW99LHt4OjAseTotby8yfV07cmV0dXJuIGFuKHIsYSxvLHMpLmF0dHIoInN0eWxlIixlLnN0eWxlKSxlLndpZHRoPWErbyxlLmhlaWdodD1vLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5wb2x5Z29uKGUscyx0KX0scn0sbGVhbl9yaWdodDpmdW5jdGlvbih0LGUpe3ZhciBuPW5uKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKm8vNix5OjB9LHt4OmEtby82LHk6MH0se3g6YSsyKm8vNix5Oi1vfSx7eDpvLzYseTotb31dLGM9YW4ocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLHJuKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHduLnBvbHlnb24oZSxzLHQpfSxyfSxsZWFuX2xlZnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1ubih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDoyKm8vNix5OjB9LHt4OmErby82LHk6MH0se3g6YS0yKm8vNix5Oi1vfSx7eDotby82LHk6LW99XSxjPWFuKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxybihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5wb2x5Z29uKGUscyx0KX0scn0sdHJhcGV6b2lkOmZ1bmN0aW9uKHQsZSl7dmFyIG49bm4odCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LTIqby82LHk6MH0se3g6YSsyKm8vNix5OjB9LHt4OmEtby82LHk6LW99LHt4Om8vNix5Oi1vfV0sYz1hbihyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSkscm4oZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gd24ucG9seWdvbihlLHMsdCl9LHJ9LGludl90cmFwZXpvaWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1ubih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDpvLzYseTowfSx7eDphLW8vNix5OjB9LHt4OmErMipvLzYseTotb30se3g6LTIqby82LHk6LW99XSxjPWFuKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxybihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5wb2x5Z29uKGUscyx0KX0scn0scmVjdF9yaWdodF9pbnZfYXJyb3c6ZnVuY3Rpb24odCxlKXt2YXIgbj1ubih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDowLHk6MH0se3g6YStvLzIseTowfSx7eDphLHk6LW8vMn0se3g6YStvLzIseTotb30se3g6MCx5Oi1vfV0sYz1hbihyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSkscm4oZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gd24ucG9seWdvbihlLHMsdCl9LHJ9LGN5bGluZGVyOmZ1bmN0aW9uKHQsZSl7dmFyIG49bm4odCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1hLzIscz1vLygyLjUrYS81MCksYz1pLmhlaWdodCtzK2UucGFkZGluZyx1PSJNIDAsIitzKyIgYSAiK28rIiwiK3MrIiAwLDAsMCAiK2ErIiAwIGEgIitvKyIsIitzKyIgMCwwLDAgIistYSsiIDAgbCAwLCIrYysiIGEgIitvKyIsIitzKyIgMCwwLDAgIithKyIgMCBsIDAsIistYyxsPXIuYXR0cigibGFiZWwtb2Zmc2V0LXkiLHMpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJkIix1KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistYS8yKyIsIistKGMvMitzKSsiKSIpO3JldHVybiBybihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3ZhciBuPXduLnJlY3QoZSx0KSxyPW4ueC1lLng7aWYoMCE9byYmKE1hdGguYWJzKHIpPGUud2lkdGgvMnx8TWF0aC5hYnMocik9PWUud2lkdGgvMiYmTWF0aC5hYnMobi55LWUueSk+ZS5oZWlnaHQvMi1zKSl7dmFyIGk9cypzKigxLXIqci8obypvKSk7MCE9aSYmKGk9TWF0aC5zcXJ0KGkpKSxpPXMtaSx0LnktZS55PjAmJihpPS1pKSxuLnkrPWl9cmV0dXJuIG59LHJ9LHN0YXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxyPW4uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gci5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxybihlLHIpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5jaXJjbGUoZSw3LHQpfSxufSxlbmQ6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHI9bi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLHIuYXR0cigiY2xhc3MiLCJzdGF0ZS1lbmQiKS5hdHRyKCJyIiw1KS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApLHJuKGUsaSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHduLmNpcmNsZShlLDcsdCl9LG59LG5vdGU6ZnVuY3Rpb24odCxlKXt2YXIgbj1ubih0LGUsIm5vZGUgIitlLmNsYXNzZXMsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmc7by5pbmZvKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBzPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHMuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IiwtaS53aWR0aC8yLWEpLmF0dHIoInkiLC1pLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLHJuKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHduLnJlY3QoZSx0KX0scn0sc3Vicm91dGluZTpmdW5jdGlvbih0LGUpe3ZhciBuPW5uKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4OjAseTowfSx7eDphLHk6MH0se3g6YSx5Oi1vfSx7eDowLHk6LW99LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmErOCx5OjB9LHt4OmErOCx5Oi1vfSx7eDotOCx5Oi1vfSx7eDotOCx5OjB9XSxjPWFuKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxybihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5wb2x5Z29uKGUscyx0KX0scn0sZm9yazpFbixqb2luOkVuLGNsYXNzX2JveDpmdW5jdGlvbih0LGUpe3ZhciBuLHI9ZS5wYWRkaW5nLzI7bj1lLmNsYXNzZXM/Im5vZGUgIitlLmNsYXNzZXM6Im5vZGUgZGVmYXVsdCI7dmFyIGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGE9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxvPWkuaW5zZXJ0KCJsaW5lIikscz1pLmluc2VydCgibGluZSIpLGM9MCxsPTQsaD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxmPTAsZD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9ucyYmZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0scD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iwqsiK2UuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKyLCuyI6IiIseT1oLm5vZGUoKS5hcHBlbmRDaGlsZChlbihwLGUubGFiZWxTdHlsZSwhMCwhMCkpLGc9eS5nZXRCQm94KCk7aWYoZXQoaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBtPXkuY2hpbGRyZW5bMF0sdj1PYmplY3QodS5zZWxlY3QpKHkpO2c9bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2LmF0dHIoIndpZHRoIixnLndpZHRoKSx2LmF0dHIoImhlaWdodCIsZy5oZWlnaHQpfWUuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdJiYobCs9Zy5oZWlnaHQrNCxjKz1nLndpZHRoKTt2YXIgYj1lLmNsYXNzRGF0YS5pZDt2b2lkIDAhPT1lLmNsYXNzRGF0YS50eXBlJiYiIiE9PWUuY2xhc3NEYXRhLnR5cGUmJihoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzP2IrPSImbHQ7IitlLmNsYXNzRGF0YS50eXBlKyImZ3Q7IjpiKz0iPCIrZS5jbGFzc0RhdGEudHlwZSsiPiIpO3ZhciB4PWgubm9kZSgpLmFwcGVuZENoaWxkKGVuKGIsZS5sYWJlbFN0eWxlLCEwLCEwKSk7T2JqZWN0KHUuc2VsZWN0KSh4KS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTt2YXIgXz14LmdldEJCb3goKTtpZihldChoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGs9eC5jaGlsZHJlblswXSx3PU9iamVjdCh1LnNlbGVjdCkoeCk7Xz1rLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHcuYXR0cigid2lkdGgiLF8ud2lkdGgpLHcuYXR0cigiaGVpZ2h0IixfLmhlaWdodCl9bCs9Xy5oZWlnaHQrNCxfLndpZHRoPmMmJihjPV8ud2lkdGgpO3ZhciBUPVtdO2UuY2xhc3NEYXRhLm1lbWJlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49UGUodCkuZGlzcGxheVRleHQ7aGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKG49bi5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7dmFyIHI9aC5ub2RlKCkuYXBwZW5kQ2hpbGQoZW4obixlLmxhYmVsU3R5bGUsITAsITApKSxpPXIuZ2V0QkJveCgpO2lmKGV0KGhlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgYT1yLmNoaWxkcmVuWzBdLG89T2JqZWN0KHUuc2VsZWN0KShyKTtpPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksby5hdHRyKCJ3aWR0aCIsaS53aWR0aCksby5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0KX1pLndpZHRoPmMmJihjPWkud2lkdGgpLGwrPWkuaGVpZ2h0KzQsVC5wdXNoKHIpfSkpLGwrPTg7dmFyIEU9W107aWYoZS5jbGFzc0RhdGEubWV0aG9kcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1QZSh0KSxyPW4uZGlzcGxheVRleHQ7aGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKHI9ci5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7dmFyIGk9aC5ub2RlKCkuYXBwZW5kQ2hpbGQoZW4ocixuLmNzc1N0eWxlP24uY3NzU3R5bGU6ZS5sYWJlbFN0eWxlLCEwLCEwKSksYT1pLmdldEJCb3goKTtpZihldChoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIG89aS5jaGlsZHJlblswXSxzPU9iamVjdCh1LnNlbGVjdCkoaSk7YT1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHMuYXR0cigid2lkdGgiLGEud2lkdGgpLHMuYXR0cigiaGVpZ2h0IixhLmhlaWdodCl9YS53aWR0aD5jJiYoYz1hLndpZHRoKSxsKz1hLmhlaWdodCs0LEUucHVzaChpKX0pKSxsKz04LGQpe3ZhciBDPShjLWcud2lkdGgpLzI7T2JqZWN0KHUuc2VsZWN0KSh5KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmMvMitDKSsiLCAiKy0xKmwvMisiKSIpLGY9Zy5oZWlnaHQrNH12YXIgUz0oYy1fLndpZHRoKS8yO3JldHVybiBPYmplY3QodS5zZWxlY3QpKHgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqYy8yK1MpKyIsICIrKC0xKmwvMitmKSsiKSIpLGYrPV8uaGVpZ2h0KzQsby5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWMvMi1yKS5hdHRyKCJ4MiIsYy8yK3IpLmF0dHIoInkxIiwtbC8yLXIrOCtmKS5hdHRyKCJ5MiIsLWwvMi1yKzgrZiksZis9OCxULmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdCh1LnNlbGVjdCkodCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKy1jLzIrIiwgIisoLTEqbC8yK2YrNCkrIikiKSxmKz1fLmhlaWdodCs0fSkpLGYrPTgscy5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWMvMi1yKS5hdHRyKCJ4MiIsYy8yK3IpLmF0dHIoInkxIiwtbC8yLXIrOCtmKS5hdHRyKCJ5MiIsLWwvMi1yKzgrZiksZis9OCxFLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdCh1LnNlbGVjdCkodCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKy1jLzIrIiwgIisoLTEqbC8yK2YpKyIpIiksZis9Xy5oZWlnaHQrNH0pKSxhLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtYy8yLXIpLmF0dHIoInkiLC1sLzItcikuYXR0cigid2lkdGgiLGMrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGwrZS5wYWRkaW5nKSxybihlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5yZWN0KGUsdCl9LGl9fSxTbj17fSxBbj1mdW5jdGlvbih0KXt2YXIgZT1Tblt0LmlkXTtvLnRyYWNlKCJUcmFuc2Zvcm1pbmcgbm9kZSIsdC5kaWZmLHQsInRyYW5zbGF0ZSgiKyh0LngtdC53aWR0aC8yLTUpKyIsICIrdC53aWR0aC8yKyIpIik7dmFyIG49dC5kaWZmfHwwO3JldHVybiB0LmNsdXN0ZXJOb2RlP2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHQueCtuLXQud2lkdGgvMikrIiwgIisodC55LXQuaGVpZ2h0LzItOCkrIikiKTplLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiLCAiK3QueSsiKSIpLG59LE1uPXtyZWN0OmZ1bmN0aW9uKHQsZSl7by50cmFjZSgiQ3JlYXRpbmcgc3ViZ3JhcGggcmVjdCBmb3IgIixlLmlkLGUpO3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyIisoZS5jbGFzcz8iICIrZS5jbGFzczoiIikpLmF0dHIoImlkIixlLmlkKSxyPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT1uLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLGE9aS5ub2RlKCkuYXBwZW5kQ2hpbGQoZW4oZS5sYWJlbFRleHQsZS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpLHM9YS5nZXRCQm94KCk7aWYoZXQoaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBjPWEuY2hpbGRyZW5bMF0sbD1PYmplY3QodS5zZWxlY3QpKGEpO3M9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsLmF0dHIoIndpZHRoIixzLndpZHRoKSxsLmF0dHIoImhlaWdodCIscy5oZWlnaHQpfXZhciBoPTAqZS5wYWRkaW5nLGY9aC8yLGQ9ZS53aWR0aDw9cy53aWR0aCtoP3Mud2lkdGgraDplLndpZHRoO2Uud2lkdGg8PXMud2lkdGgraD9lLmRpZmY9KHMud2lkdGgtZS53aWR0aCkvMjplLmRpZmY9LWUucGFkZGluZy8yLG8udHJhY2UoIkRhdGEgIixlLEpTT04uc3RyaW5naWZ5KGUpKSxyLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1kLzIpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWYpLmF0dHIoIndpZHRoIixkKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2gpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUueC1zLndpZHRoLzIpKyIsICIrKGUueS1lLmhlaWdodC8yK2UucGFkZGluZy8zKSsiKSIpO3ZhciBwPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1wLndpZHRoLGUuaGVpZ2h0PXAuaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBrbihlLHQpfSxufSxyb3VuZGVkV2l0aFRpdGxlOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxhPW4uYXBwZW5kKCJyZWN0Iiksbz1pLm5vZGUoKS5hcHBlbmRDaGlsZChlbihlLmxhYmVsVGV4dCxlLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSkscz1vLmdldEJCb3goKTtpZihldChoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGM9by5jaGlsZHJlblswXSxsPU9iamVjdCh1LnNlbGVjdCkobyk7cz1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGwuYXR0cigid2lkdGgiLHMud2lkdGgpLGwuYXR0cigiaGVpZ2h0IixzLmhlaWdodCl9cz1vLmdldEJCb3goKTt2YXIgaD0wKmUucGFkZGluZyxmPWgvMixkPWUud2lkdGg8PXMud2lkdGgrZS5wYWRkaW5nP3Mud2lkdGgrZS5wYWRkaW5nOmUud2lkdGg7ZS53aWR0aDw9cy53aWR0aCtlLnBhZGRpbmc/ZS5kaWZmPShzLndpZHRoKzAqZS5wYWRkaW5nLWUud2lkdGgpLzI6ZS5kaWZmPS1lLnBhZGRpbmcvMixyLmF0dHIoImNsYXNzIiwib3V0ZXIiKS5hdHRyKCJ4IixlLngtZC8yLWYpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWYpLmF0dHIoIndpZHRoIixkK2gpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQraCksYS5hdHRyKCJjbGFzcyIsImlubmVyIikuYXR0cigieCIsZS54LWQvMi1mKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1mK3MuaGVpZ2h0LTEpLmF0dHIoIndpZHRoIixkK2gpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQraC1zLmhlaWdodC0zKSxpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLngtcy53aWR0aC8yKSsiLCAiKyhlLnktZS5oZWlnaHQvMi1lLnBhZGRpbmcvMysoZXQoaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk/NTozKSkrIikiKTt2YXIgcD1yLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUuaGVpZ2h0PXAuaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBrbihlLHQpfSxufSxub3RlR3JvdXA6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm90ZS1jbHVzdGVyIikuYXR0cigiaWQiLGUuaWQpLHI9bi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxpPTAqZS5wYWRkaW5nLGE9aS8yO3IuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IixlLngtZS53aWR0aC8yLWEpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixlLndpZHRoK2kpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQraSkuYXR0cigiZmlsbCIsIm5vbmUiKTt2YXIgbz1yLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUud2lkdGg9by53aWR0aCxlLmhlaWdodD1vLmhlaWdodCxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4ga24oZSx0KX0sbn0sZGl2aWRlcjpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGUuY2xhc3NlcykuYXR0cigiaWQiLGUuaWQpLHI9bi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxpPTAqZS5wYWRkaW5nLGE9aS8yO3IuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieCIsZS54LWUud2lkdGgvMi1hKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMikuYXR0cigid2lkdGgiLGUud2lkdGgraSkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtpKTt2YXIgbz1yLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUud2lkdGg9by53aWR0aCxlLmhlaWdodD1vLmhlaWdodCxlLmRpZmY9LWUucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBrbihlLHQpfSxufX0sT249e30sTm49e30sQm49e307ZnVuY3Rpb24gRG4odCxlKXtoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiZ0JiYodC5zdHlsZS53aWR0aD05KmUubGVuZ3RoKyJweCIsdC5zdHlsZS5oZWlnaHQ9IjEycHgiKX12YXIgTG49ZnVuY3Rpb24odCxlKXtvLndhcm4oImFiYzg4IGN1dFBhdGhBdEludGVyc2VjdCIsdCxlKTt2YXIgbj1bXSxyPXRbMF0saT0hMTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihvLmluZm8oImFiYzg4IGNoZWNraW5nIHBvaW50Iix0LGUpLGZ1bmN0aW9uKHQsZSl7dmFyIG49dC54LHI9dC55LGk9TWF0aC5hYnMoZS54LW4pLGE9TWF0aC5hYnMoZS55LXIpLG89dC53aWR0aC8yLHM9dC5oZWlnaHQvMjtyZXR1cm4gaT49b3x8YT49c30oZSx0KXx8aSlvLndhcm4oImFiYzg4IG91dHNpZGUiLHQscikscj10LGl8fG4ucHVzaCh0KTtlbHNle3ZhciBhPWZ1bmN0aW9uKHQsZSxuKXtvLndhcm4oImludGVyc2VjdGlvbiBjYWxjIGFiYzg5OlxuICBvdXRzaWRlUG9pbnQ6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGUpLCJcbiAgaW5zaWRlUG9pbnQgOiAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkobiksIlxuICBub2RlICAgICAgICA6IHg6IikuY29uY2F0KHQueCwiIHk6IikuY29uY2F0KHQueSwiIHc6IikuY29uY2F0KHQud2lkdGgsIiBoOiIpLmNvbmNhdCh0LmhlaWdodCkpO3ZhciByPXQueCxpPXQueSxhPU1hdGguYWJzKHItbi54KSxzPXQud2lkdGgvMixjPW4ueDxlLng/cy1hOnMrYSx1PXQuaGVpZ2h0LzIsbD1NYXRoLmFicyhlLnktbi55KSxoPU1hdGguYWJzKGUueC1uLngpO2lmKE1hdGguYWJzKGktZS55KSpzPk1hdGguYWJzKHItZS54KSp1KXt2YXIgZj1uLnk8ZS55P2UueS11LWk6aS11LWUueTtjPWgqZi9sO3ZhciBkPXt4Om4ueDxlLng/bi54K2M6bi54LWgrYyx5Om4ueTxlLnk/bi55K2wtZjpuLnktbCtmfTtyZXR1cm4gMD09PWMmJihkLng9ZS54LGQueT1lLnkpLDA9PT1oJiYoZC54PWUueCksMD09PWwmJihkLnk9ZS55KSxvLndhcm4oImFiYzg5IHRvcHAvYm90dCBjYWxjLCBRICIuY29uY2F0KGwsIiwgcSAiKS5jb25jYXQoZiwiLCBSICIpLmNvbmNhdChoLCIsIHIgIikuY29uY2F0KGMpLGQpLGR9dmFyIHA9bCooYz1uLng8ZS54P2UueC1zLXI6ci1zLWUueCkvaCx5PW4ueDxlLng/bi54K2gtYzpuLngtaCtjLGc9bi55PGUueT9uLnkrcDpuLnktcDtyZXR1cm4gby53YXJuKCJzaWRlcyBjYWxjIGFiYzg5LCBRICIuY29uY2F0KGwsIiwgcSAiKS5jb25jYXQocCwiLCBSICIpLmNvbmNhdChoLCIsIHIgIikuY29uY2F0KGMpLHtfeDp5LF95Omd9KSwwPT09YyYmKHk9ZS54LGc9ZS55KSwwPT09aCYmKHk9ZS54KSwwPT09bCYmKGc9ZS55KSx7eDp5LHk6Z319KGUscix0KTtvLndhcm4oImFiYzg4IGluc2lkZSIsdCxyLGEpLG8ud2FybigiYWJjODggaW50ZXJzZWN0aW9uIixhKTt2YXIgcz0hMTtuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3M9c3x8dC54PT09YS54JiZ0Lnk9PT1hLnl9KSksbi5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC54PT09YS54JiZ0Lnk9PT1hLnl9KSk/by53YXJuKCJhYmM4OCBubyBpbnRlcnNlY3QiLGEsbik6bi5wdXNoKGEpLGk9ITB9fSkpLG8ud2FybigiYWJjODggcmV0dXJuaW5nIHBvaW50cyIsbiksbn0sSW49ZnVuY3Rpb24gdChlLG4scixpKXtvLmluZm8oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6IFhYWCIsTGUuYS5qc29uLndyaXRlKG4pLGkpO3ZhciBhPW4uZ3JhcGgoKS5yYW5rZGlyO28udHJhY2UoIkRpciBpbiByZWN1cnNpdmUgcmVuZGVyIC0gZGlyOiIsYSk7dmFyIHM9ZS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInJvb3QiKTtuLm5vZGVzKCk/by5pbmZvKCJSZWN1cnNpdmUgcmVuZGVyIFhYWCIsbi5ub2RlcygpKTpvLmluZm8oIk5vIG5vZGVzIGZvdW5kIGZvciIsbiksbi5lZGdlcygpLmxlbmd0aD4wJiZvLnRyYWNlKCJSZWN1cnNpdmUgZWRnZXMiLG4uZWRnZShuLmVkZ2VzKClbMF0pKTt2YXIgYz1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSxsPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxoPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksZj1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTtuLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHM9bi5ub2RlKGUpO2lmKHZvaWQgMCE9PWkpe3ZhciBjPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaS5jbHVzdGVyRGF0YSkpO28uaW5mbygiU2V0dGluZyBkYXRhIGZvciBjbHVzdGVyIFhYWCAoIixlLCIpICIsYyxpKSxuLnNldE5vZGUoaS5pZCxjKSxuLnBhcmVudChlKXx8KG8udHJhY2UoIlNldHRpbmcgcGFyZW50IixlLGkuaWQpLG4uc2V0UGFyZW50KGUsaS5pZCxjKSl9aWYoby5pbmZvKCIoSW5zZXJ0KSBOb2RlIFhYWCIrZSsiOiAiK0pTT04uc3RyaW5naWZ5KG4ubm9kZShlKSkpLHMmJnMuY2x1c3Rlck5vZGUpe28uaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIixlLHMud2lkdGgsbi5ub2RlKGUpKTt2YXIgdT10KGYscy5ncmFwaCxyLG4ubm9kZShlKSksbD11LmVsZW07cm4ocyxsKSxzLmRpZmY9dS5kaWZmfHwwLG8uaW5mbygiTm9kZSBib3VuZHMgKGFiYzEyMykiLGUscyxzLndpZHRoLHMueCxzLnkpLGZ1bmN0aW9uKHQsZSl7U25bZS5pZF09dH0obCxzKSxvLndhcm4oIlJlY3Vyc2l2ZSByZW5kZXIgY29tcGxldGUgIixsLHMpfWVsc2Ugbi5jaGlsZHJlbihlKS5sZW5ndGg+MD8oby5pbmZvKCJDbHVzdGVyIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCBYWFgiLGUscy5pZCxzLG4pLG8uaW5mbyhobihzLmlkLG4pKSxvbltzLmlkXT17aWQ6aG4ocy5pZCxuKSxub2RlOnN9KTooby5pbmZvKCJOb2RlIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCIsZSxzLmlkLHMpLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpO2UubGluaz8ocj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsZS5saW5rVGFyZ2V0fHwiX2JsYW5rIiksaT1DbltlLnNoYXBlXShyLGUsbikpOnI9aT1DbltlLnNoYXBlXSh0LGUsbiksZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLGUuY2xhc3MmJmkuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitlLmNsYXNzKSxTbltlLmlkXT1yLGUuaGF2ZUNhbGxiYWNrJiZTbltlLmlkXS5hdHRyKCJjbGFzcyIsU25bZS5pZF0uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpfShmLG4ubm9kZShlKSxhKSl9KSksbi5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uZWRnZSh0LnYsdC53LHQubmFtZSk7by5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeSh0KSksby5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIix0LCIgIixKU09OLnN0cmluZ2lmeShuLmVkZ2UodCkpKSxvLmluZm8oIkZpeCIsb24sImlkczoiLHQudix0LncsIlRyYW5zbGF0ZWluZzogIixvblt0LnZdLG9uW3Qud10pLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZW4oZS5sYWJlbCxlLmxhYmVsU3R5bGUpLHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbCIpLGk9ci5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7aS5ub2RlKCkuYXBwZW5kQ2hpbGQobik7dmFyIGEsbz1uLmdldEJCb3goKTtpZihldChoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIHM9bi5jaGlsZHJlblswXSxjPU9iamVjdCh1LnNlbGVjdCkobik7bz1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGMuYXR0cigid2lkdGgiLG8ud2lkdGgpLGMuYXR0cigiaGVpZ2h0IixvLmhlaWdodCl9aWYoaS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistby53aWR0aC8yKyIsICIrLW8uaGVpZ2h0LzIrIikiKSxObltlLmlkXT1yLGUud2lkdGg9by53aWR0aCxlLmhlaWdodD1vLmhlaWdodCxlLnN0YXJ0TGFiZWxMZWZ0KXt2YXIgbD1lbihlLnN0YXJ0TGFiZWxMZWZ0LGUubGFiZWxTdHlsZSksaD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGY9aC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7YT1mLm5vZGUoKS5hcHBlbmRDaGlsZChsKTt2YXIgZD1sLmdldEJCb3goKTtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1kLndpZHRoLzIrIiwgIistZC5oZWlnaHQvMisiKSIpLEJuW2UuaWRdfHwoQm5bZS5pZF09e30pLEJuW2UuaWRdLnN0YXJ0TGVmdD1oLERuKGEsZS5zdGFydExhYmVsTGVmdCl9aWYoZS5zdGFydExhYmVsUmlnaHQpe3ZhciBwPWVuKGUuc3RhcnRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSkseT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGc9eS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7YT15Lm5vZGUoKS5hcHBlbmRDaGlsZChwKSxnLm5vZGUoKS5hcHBlbmRDaGlsZChwKTt2YXIgbT1wLmdldEJCb3goKTtnLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1tLndpZHRoLzIrIiwgIistbS5oZWlnaHQvMisiKSIpLEJuW2UuaWRdfHwoQm5bZS5pZF09e30pLEJuW2UuaWRdLnN0YXJ0UmlnaHQ9eSxEbihhLGUuc3RhcnRMYWJlbFJpZ2h0KX1pZihlLmVuZExhYmVsTGVmdCl7dmFyIHY9ZW4oZS5lbmRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxiPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIikseD1iLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTthPXgubm9kZSgpLmFwcGVuZENoaWxkKHYpO3ZhciBfPXYuZ2V0QkJveCgpO3guYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLV8ud2lkdGgvMisiLCAiKy1fLmhlaWdodC8yKyIpIiksYi5ub2RlKCkuYXBwZW5kQ2hpbGQodiksQm5bZS5pZF18fChCbltlLmlkXT17fSksQm5bZS5pZF0uZW5kTGVmdD1iLERuKGEsZS5lbmRMYWJlbExlZnQpfWlmKGUuZW5kTGFiZWxSaWdodCl7dmFyIGs9ZW4oZS5lbmRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksdz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLFQ9dy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7YT1ULm5vZGUoKS5hcHBlbmRDaGlsZChrKTt2YXIgRT1rLmdldEJCb3goKTtULmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1FLndpZHRoLzIrIiwgIistRS5oZWlnaHQvMisiKSIpLHcubm9kZSgpLmFwcGVuZENoaWxkKGspLEJuW2UuaWRdfHwoQm5bZS5pZF09e30pLEJuW2UuaWRdLmVuZFJpZ2h0PXcsRG4oYSxlLmVuZExhYmVsUmlnaHQpfX0oaCxlKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeSh0KSl9KSksby5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxvLmluZm8oIiMjIyAgICAgICAgICAgICAgICBMYXlvdXQgICAgICAgICAgICAgICAgICMjIyIpLG8uaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIiksby5pbmZvKG4pLEJlLmEubGF5b3V0KG4pLG8uaW5mbygiR3JhcGggYWZ0ZXIgbGF5b3V0OiIsTGUuYS5qc29uLndyaXRlKG4pKTt2YXIgZD0wO3JldHVybiB5bihuKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLm5vZGUodCk7by5pbmZvKCJQb3NpdGlvbiAiK3QrIjogIitKU09OLnN0cmluZ2lmeShuLm5vZGUodCkpKSxvLmluZm8oIlBvc2l0aW9uICIrdCsiOiAoIitlLngsIiwiK2UueSwiKSB3aWR0aDogIixlLndpZHRoLCIgaGVpZ2h0OiAiLGUuaGVpZ2h0KSxlJiZlLmNsdXN0ZXJOb2RlP0FuKGUpOm4uY2hpbGRyZW4odCkubGVuZ3RoPjA/KCFmdW5jdGlvbih0LGUpe28udHJhY2UoIkluc2VydGluZyBjbHVzdGVyIik7dmFyIG49ZS5zaGFwZXx8InJlY3QiO09uW2UuaWRdPU1uW25dKHQsZSl9KGMsZSksb25bZS5pZF0ubm9kZT1lKTpBbihlKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5lZGdlKHQpO28uaW5mbygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZSksZSksZnVuY3Rpb24odCxlKXtvLmluZm8oIk1vdmluZyBsYWJlbCBhYmM3OCAiLHQuaWQsdC5sYWJlbCxOblt0LmlkXSk7dmFyIG49ZS51cGRhdGVkUGF0aD9lLnVwZGF0ZWRQYXRoOmUub3JpZ2luYWxQYXRoO2lmKHQubGFiZWwpe3ZhciByPU5uW3QuaWRdLGk9dC54LGE9dC55O2lmKG4pe3ZhciBzPW5lLmNhbGNMYWJlbFBvc2l0aW9uKG4pO28uaW5mbygiTW92aW5nIGxhYmVsIGZyb20gKCIsaSwiLCIsYSwiKSB0byAoIixzLngsIiwiLHMueSwiKSBhYmM3OCIpfXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCAiK2ErIikiKX1pZih0LnN0YXJ0TGFiZWxMZWZ0KXt2YXIgYz1Cblt0LmlkXS5zdGFydExlZnQsdT10LngsbD10Lnk7aWYobil7dmFyIGg9bmUuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X2xlZnQiLG4pO3U9aC54LGw9aC55fWMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdSsiLCAiK2wrIikiKX1pZih0LnN0YXJ0TGFiZWxSaWdodCl7dmFyIGY9Qm5bdC5pZF0uc3RhcnRSaWdodCxkPXQueCxwPXQueTtpZihuKXt2YXIgeT1uZS5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfcmlnaHQiLG4pO2Q9eS54LHA9eS55fWYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZCsiLCAiK3ArIikiKX1pZih0LmVuZExhYmVsTGVmdCl7dmFyIGc9Qm5bdC5pZF0uZW5kTGVmdCxtPXQueCx2PXQueTtpZihuKXt2YXIgYj1uZS5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9sZWZ0IixuKTttPWIueCx2PWIueX1nLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK20rIiwgIit2KyIpIil9aWYodC5lbmRMYWJlbFJpZ2h0KXt2YXIgeD1Cblt0LmlkXS5lbmRSaWdodCxfPXQueCxrPXQueTtpZihuKXt2YXIgdz1uZS5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9yaWdodCIsbik7Xz13Lngsaz13Lnl9eC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitfKyIsICIraysiKSIpfX0oZSxmdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIHM9bi5wb2ludHMsYz0hMSxsPWEubm9kZShlLnYpLGg9YS5ub2RlKGUudyk7by5pbmZvKCJhYmM4OCBJbnNlcnRFZGdlOiAiLG4pLGguaW50ZXJzZWN0JiZsLmludGVyc2VjdCYmKChzPXMuc2xpY2UoMSxuLnBvaW50cy5sZW5ndGgtMSkpLnVuc2hpZnQobC5pbnRlcnNlY3Qoc1swXSkpLG8uaW5mbygiTGFzdCBwb2ludCIsc1tzLmxlbmd0aC0xXSxoLGguaW50ZXJzZWN0KHNbcy5sZW5ndGgtMV0pKSxzLnB1c2goaC5pbnRlcnNlY3Qoc1tzLmxlbmd0aC0xXSkpKSxuLnRvQ2x1c3RlciYmKG8uaW5mbygidG8gY2x1c3RlciBhYmM4OCIscltuLnRvQ2x1c3Rlcl0pLHM9TG4obi5wb2ludHMscltuLnRvQ2x1c3Rlcl0ubm9kZSksYz0hMCksbi5mcm9tQ2x1c3RlciYmKG8uaW5mbygiZnJvbSBjbHVzdGVyIGFiYzg4IixyW24uZnJvbUNsdXN0ZXJdKSxzPUxuKHMucmV2ZXJzZSgpLHJbbi5mcm9tQ2x1c3Rlcl0ubm9kZSkucmV2ZXJzZSgpLGM9ITApO3ZhciBmLGQ9cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFOdW1iZXIuaXNOYU4odC55KX0pKTtmPSgiZ3JhcGgiPT09aXx8ImZsb3djaGFydCI9PT1pKSYmbi5jdXJ2ZXx8dS5jdXJ2ZUJhc2lzO3ZhciBwLHk9T2JqZWN0KHUubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUoZik7c3dpdGNoKG4udGhpY2tuZXNzKXtjYXNlIm5vcm1hbCI6cD0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjpwPSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7ZGVmYXVsdDpwPSIifXN3aXRjaChuLnBhdHRlcm4pe2Nhc2Uic29saWQiOnArPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6cCs9IiBlZGdlLXBhdHRlcm4tZG90dGVkIjticmVhaztjYXNlImRhc2hlZCI6cCs9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIn12YXIgZz10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHkoZCkpLmF0dHIoImlkIixuLmlkKS5hdHRyKCJjbGFzcyIsIiAiK3ArKG4uY2xhc3Nlcz8iICIrbi5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLG4uc3R5bGUpLG09IiI7c3dpdGNoKGhlKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKG09KG09KG09d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksby5pbmZvKCJhcnJvd1R5cGVTdGFydCIsbi5hcnJvd1R5cGVTdGFydCksby5pbmZvKCJhcnJvd1R5cGVFbmQiLG4uYXJyb3dUeXBlRW5kKSxuLmFycm93VHlwZVN0YXJ0KXtjYXNlImFycm93X2Nyb3NzIjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK2krIi1jcm9zc1N0YXJ0KSIpO2JyZWFrO2Nhc2UiYXJyb3dfcG9pbnQiOmcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLXBvaW50U3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK2krIi1iYXJiU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19jaXJjbGUiOmcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLWNpcmNsZVN0YXJ0KSIpO2JyZWFrO2Nhc2UiYWdncmVnYXRpb24iOmcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLWFnZ3JlZ2F0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOmcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLWV4dGVuc2lvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiY29tcG9zaXRpb24iOmcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLWNvbXBvc2l0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJkZXBlbmRlbmN5IjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK2krIi1kZXBlbmRlbmN5U3RhcnQpIil9c3dpdGNoKG4uYXJyb3dUeXBlRW5kKXtjYXNlImFycm93X2Nyb3NzIjpnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIitpKyItY3Jvc3NFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6Zy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIraSsiLXBvaW50RW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfYmFyYiI6Zy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIraSsiLWJhcmJFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19jaXJjbGUiOmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK2krIi1jaXJjbGVFbmQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6Zy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIraSsiLWFnZ3JlZ2F0aW9uRW5kKSIpO2JyZWFrO2Nhc2UiZXh0ZW5zaW9uIjpnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIitpKyItZXh0ZW5zaW9uRW5kKSIpO2JyZWFrO2Nhc2UiY29tcG9zaXRpb24iOmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK2krIi1jb21wb3NpdGlvbkVuZCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK2krIi1kZXBlbmRlbmN5RW5kKSIpfXZhciB2PXt9O3JldHVybiBjJiYodi51cGRhdGVkUGF0aD1zKSx2Lm9yaWdpbmFsUGF0aD1uLnBvaW50cyx2fShsLHQsZSxvbixyLG4pKX0pKSxuLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5ub2RlKHQpO28uaW5mbyh0LGUudHlwZSxlLmRpZmYpLCJncm91cCI9PT1lLnR5cGUmJihkPWUuZGlmZil9KSkse2VsZW06cyxkaWZmOmR9fSxSbj1mdW5jdGlvbih0LGUsbixyLGkpe0plKHQsbixyLGkpLFNuPXt9LE5uPXt9LEJuPXt9LE9uPXt9LHNuPXt9LGNuPXt9LG9uPXt9LG8ud2FybigiR3JhcGggYXQgZmlyc3Q6IixMZS5hLmpzb24ud3JpdGUoZSkpLGRuKGUpLG8ud2FybigiR3JhcGggYWZ0ZXI6IixMZS5hLmpzb24ud3JpdGUoZSkpLEluKHQsZSxyKX07SWUucGFyc2VyLnl5PU9lO3ZhciBGbj17ZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMH0sUG49ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Rm5bZV09dFtlXX0pKX0sam49ZnVuY3Rpb24odCxlKXtvLmluZm8oIkRyYXdpbmcgY2xhc3MiKSxPZS5jbGVhcigpLEllLnBhcnNlci5wYXJzZSh0KTt2YXIgbj1oZSgpLmZsb3djaGFydDtvLmluZm8oImNvbmZpZzoiLG4pO3ZhciByPW4ubm9kZVNwYWNpbmd8fDUwLGk9bi5yYW5rU3BhY2luZ3x8NTAsYT1uZXcgTGUuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOk9lLmdldERpcmVjdGlvbigpLG5vZGVzZXA6cixyYW5rc2VwOmksbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSkscz1PZS5nZXRDbGFzc2VzKCksYz1PZS5nZXRSZWxhdGlvbnMoKTtvLmluZm8oYyksZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtvLmluZm8oImtleXM6IixuKSxvLmluZm8odCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj10W25dLGk9IiI7ci5jc3NDbGFzc2VzLmxlbmd0aD4wJiYoaT1pKyIgIityLmNzc0NsYXNzZXMuam9pbigiICIpKTt2YXIgYT17bGFiZWxTdHlsZToiIn0scz12b2lkIDAhPT1yLnRleHQ/ci50ZXh0OnIuaWQsYz0iIjtzd2l0Y2goci50eXBlKXtjYXNlImNsYXNzIjpjPSJjbGFzc19ib3giO2JyZWFrO2RlZmF1bHQ6Yz0iY2xhc3NfYm94In1lLnNldE5vZGUoci5pZCx7bGFiZWxTdHlsZTphLmxhYmVsU3R5bGUsc2hhcGU6YyxsYWJlbFRleHQ6cyxjbGFzc0RhdGE6cixyeDowLHJ5OjAsY2xhc3M6aSxzdHlsZTphLnN0eWxlLGlkOnIuaWQsZG9tSWQ6ci5kb21JZCxoYXZlQ2FsbGJhY2s6ci5oYXZlQ2FsbGJhY2ssbGluazpyLmxpbmssd2lkdGg6Imdyb3VwIj09PXIudHlwZT81MDA6dm9pZCAwLHR5cGU6ci50eXBlLHBhZGRpbmc6aGUoKS5mbG93Y2hhcnQucGFkZGluZ30pLG8uaW5mbygic2V0Tm9kZSIse2xhYmVsU3R5bGU6YS5sYWJlbFN0eWxlLHNoYXBlOmMsbGFiZWxUZXh0OnMscng6MCxyeTowLGNsYXNzOmksc3R5bGU6YS5zdHlsZSxpZDpyLmlkLHdpZHRoOiJncm91cCI9PT1yLnR5cGU/NTAwOnZvaWQgMCx0eXBlOnIudHlwZSxwYWRkaW5nOmhlKCkuZmxvd2NoYXJ0LnBhZGRpbmd9KX0pKX0ocyxhKSxmdW5jdGlvbih0LGUpe3ZhciBuPTA7dC5mb3JFYWNoKChmdW5jdGlvbihyKXtuKys7dmFyIGk9e2NsYXNzZXM6InJlbGF0aW9uIn07aS5wYXR0ZXJuPTE9PXIucmVsYXRpb24ubGluZVR5cGU/ImRhc2hlZCI6InNvbGlkIixpLmlkPSJpZCIrbiwiYXJyb3dfb3BlbiI9PT1yLnR5cGU/aS5hcnJvd2hlYWQ9Im5vbmUiOmkuYXJyb3doZWFkPSJub3JtYWwiLG8uaW5mbyhpLHIpLGkuc3RhcnRMYWJlbFJpZ2h0PSJub25lIj09PXIucmVsYXRpb25UaXRsZTE/IiI6ci5yZWxhdGlvblRpdGxlMSxpLmVuZExhYmVsTGVmdD0ibm9uZSI9PT1yLnJlbGF0aW9uVGl0bGUyPyIiOnIucmVsYXRpb25UaXRsZTIsaS5hcnJvd1R5cGVTdGFydD1ZbihyLnJlbGF0aW9uLnR5cGUxKSxpLmFycm93VHlwZUVuZD1ZbihyLnJlbGF0aW9uLnR5cGUyKTt2YXIgYT0iIixzPSIiO2lmKHZvaWQgMCE9PXIuc3R5bGUpe3ZhciBjPVV0KHIuc3R5bGUpO2E9Yy5zdHlsZSxzPWMubGFiZWxTdHlsZX1lbHNlIGE9ImZpbGw6bm9uZSI7aS5zdHlsZT1hLGkubGFiZWxTdHlsZT1zLHZvaWQgMCE9PXIuaW50ZXJwb2xhdGU/aS5jdXJ2ZT1ZdChyLmludGVycG9sYXRlLHUuY3VydmVMaW5lYXIpOnZvaWQgMCE9PXQuZGVmYXVsdEludGVycG9sYXRlP2kuY3VydmU9WXQodC5kZWZhdWx0SW50ZXJwb2xhdGUsdS5jdXJ2ZUxpbmVhcik6aS5jdXJ2ZT1ZdChGbi5jdXJ2ZSx1LmN1cnZlTGluZWFyKSxyLnRleHQ9ci50aXRsZSx2b2lkIDA9PT1yLnRleHQ/dm9pZCAwIT09ci5zdHlsZSYmKGkuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKTooaS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsaS5sYWJlbHBvcz0iYyIsaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscz8oaS5sYWJlbFR5cGU9Imh0bWwiLGkubGFiZWw9JzxzcGFuIGNsYXNzPSJlZGdlTGFiZWwiPicrci50ZXh0KyI8L3NwYW4+Iik6KGkubGFiZWxUeXBlPSJ0ZXh0IixpLmxhYmVsPXIudGV4dC5yZXBsYWNlKG50LmxpbmVCcmVha1JlZ2V4LCJcbiIpLHZvaWQgMD09PXIuc3R5bGUmJihpLnN0eWxlPWkuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksaS5sYWJlbFN0eWxlPWkubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksZS5zZXRFZGdlKHIuaWQxLHIuaWQyLGksbil9KSl9KGMsYSk7dmFyIGw9T2JqZWN0KHUuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKTtsLmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpO3ZhciBoPU9iamVjdCh1LnNlbGVjdCkoIiMiK2UrIiBnIik7Um4oaCxhLFsiYWdncmVnYXRpb24iLCJleHRlbnNpb24iLCJjb21wb3NpdGlvbiIsImRlcGVuZGVuY3kiXSwiY2xhc3NEaWFncmFtIixlKTt2YXIgZj1sLm5vZGUoKS5nZXRCQm94KCksZD1mLndpZHRoKzE2LHA9Zi5oZWlnaHQrMTY7aWYoby5kZWJ1ZygibmV3IFZpZXdCb3ggMCAwICIuY29uY2F0KGQsIiAiKS5jb25jYXQocCksInRyYW5zbGF0ZSgiLmNvbmNhdCg4LWEuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KDgtYS5fbGFiZWwubWFyZ2lueSwiKSIpKSx0ZShsLHAsZCxuLnVzZU1heFdpZHRoKSxsLmF0dHIoInZpZXdCb3giLCIwIDAgIi5jb25jYXQoZCwiICIpLmNvbmNhdChwKSksbC5zZWxlY3QoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoOC1hLl9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdCg4LWYueSwiKSIpKSwhbi5odG1sTGFiZWxzKWZvcih2YXIgeT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxnPTA7Zzx5Lmxlbmd0aDtnKyspe3ZhciBtPXlbZ10sdj1tLmdldEJCb3goKSxiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Yi5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxiLnNldEF0dHJpYnV0ZSgicnkiLDApLGIuc2V0QXR0cmlidXRlKCJ3aWR0aCIsdi53aWR0aCksYi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsdi5oZWlnaHQpLG0uaW5zZXJ0QmVmb3JlKGIsbS5maXJzdENoaWxkKX19O2Z1bmN0aW9uIFluKHQpe3ZhciBlO3N3aXRjaCh0KXtjYXNlIDA6ZT0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTplPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjplPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOmU9ImRlcGVuZGVuY3kiO2JyZWFrO2RlZmF1bHQ6ZT0ibm9uZSJ9cmV0dXJuIGV9dmFyIHpuPXt9LFVuPVtdLCRuPSIiLHFuPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT16blt0XSYmKHpuW3RdPXthdHRyaWJ1dGVzOltdfSxvLmluZm8oIkFkZGVkIG5ldyBlbnRpdHkgOiIsdCkpLHpuW3RdfSxXbj17Q2FyZGluYWxpdHk6e1pFUk9fT1JfT05FOiJaRVJPX09SX09ORSIsWkVST19PUl9NT1JFOiJaRVJPX09SX01PUkUiLE9ORV9PUl9NT1JFOiJPTkVfT1JfTU9SRSIsT05MWV9PTkU6Ik9OTFlfT05FIn0sSWRlbnRpZmljYXRpb246e05PTl9JREVOVElGWUlORzoiTk9OX0lERU5USUZZSU5HIixJREVOVElGWUlORzoiSURFTlRJRllJTkcifSxwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7eWMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoZSgpLmVyfSxhZGRFbnRpdHk6cW4sYWRkQXR0cmlidXRlczpmdW5jdGlvbih0LGUpe3ZhciBuLHI9cW4odCk7Zm9yKG49ZS5sZW5ndGgtMTtuPj0wO24tLSlyLmF0dHJpYnV0ZXMucHVzaChlW25dKSxvLmRlYnVnKCJBZGRlZCBhdHRyaWJ1dGUgIixlW25dLmF0dHJpYnV0ZU5hbWUpfSxnZXRFbnRpdGllczpmdW5jdGlvbigpe3JldHVybiB6bn0sYWRkUmVsYXRpb25zaGlwOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXtlbnRpdHlBOnQscm9sZUE6ZSxlbnRpdHlCOm4scmVsU3BlYzpyfTtVbi5wdXNoKGkpLG8uZGVidWcoIkFkZGVkIG5ldyByZWxhdGlvbnNoaXAgOiIsaSl9LGdldFJlbGF0aW9uc2hpcHM6ZnVuY3Rpb24oKXtyZXR1cm4gVW59LGNsZWFyOmZ1bmN0aW9uKCl7em49e30sVW49W10sJG49IiJ9LHNldFRpdGxlOmZ1bmN0aW9uKHQpeyRuPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuICRufX0sSG49big3NiksVm49bi5uKEhuKSxHbj17T05MWV9PTkVfU1RBUlQ6Ik9OTFlfT05FX1NUQVJUIixPTkxZX09ORV9FTkQ6Ik9OTFlfT05FX0VORCIsWkVST19PUl9PTkVfU1RBUlQ6IlpFUk9fT1JfT05FX1NUQVJUIixaRVJPX09SX09ORV9FTkQ6IlpFUk9fT1JfT05FX0VORCIsT05FX09SX01PUkVfU1RBUlQ6Ik9ORV9PUl9NT1JFX1NUQVJUIixPTkVfT1JfTU9SRV9FTkQ6Ik9ORV9PUl9NT1JFX0VORCIsWkVST19PUl9NT1JFX1NUQVJUOiJaRVJPX09SX01PUkVfU1RBUlQiLFpFUk9fT1JfTU9SRV9FTkQ6IlpFUk9fT1JfTU9SRV9FTkQifSxYbj1Hbixabj1mdW5jdGlvbih0LGUpe3ZhciBuO3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsR24uT05MWV9PTkVfU1RBUlQpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTggTTE1LDAgTDE1LDE4IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixHbi5PTkxZX09ORV9FTkQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMywwIEwzLDE4IE05LDAgTDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEduLlpFUk9fT1JfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsMjEpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEduLlpFUk9fT1JfT05FX0VORCkuYXR0cigicmVmWCIsMzApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwzMCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMCBMMjEsMTgiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEduLk9ORV9PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFEgMTgsMCAzNiwxOCBRIDE4LDM2IDAsMTggTTQyLDkgTDQyLDI3IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixHbi5PTkVfT1JfTU9SRV9FTkQpLmF0dHIoInJlZlgiLDI3KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTMsOSBMMywyNyBNOSwxOCBRMjcsMCA0NSwxOCBRMjcsMzYgOSwxOCIpLChuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsR24uWkVST19PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw0OCkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFExOCwwIDM2LDE4IFExOCwzNiAwLDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixHbi5aRVJPX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwzOSkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTIxLDE4IFEzOSwwIDU3LDE4IFEzOSwzNiAyMSwxOCIpfSxLbj17fSxRbj1mdW5jdGlvbih0LGUsbil7dmFyIHI7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBhPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLGkpO3I9dm9pZCAwPT09cj9pOnI7dmFyIG89ImVudGl0eS0iK2kscz1hLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsbykuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIraGUoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIitLbi5mb250U2l6ZSsicHgiKS50ZXh0KGkpLGM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPUtuLmVudGl0eVBhZGRpbmcvMyxpPUtuLmVudGl0eVBhZGRpbmcvMyxhPS44NSpLbi5mb250U2l6ZSxvPWUubm9kZSgpLmdldEJCb3goKSxzPVtdLGM9MCx1PTAsbD1vLmhlaWdodCsyKnIsaD0xO24uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9IiIuY29uY2F0KGUubm9kZSgpLmlkLCItYXR0ci0iKS5jb25jYXQoaCksbz10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsIiIuY29uY2F0KGksIi10eXBlIikpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJsZWZ0IikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitoZSgpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK2ErInB4IikudGV4dChuLmF0dHJpYnV0ZVR5cGUpLGY9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLCIiLmNvbmNhdChpLCItbmFtZSIpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibGVmdCIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIraGUoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIithKyJweCIpLnRleHQobi5hdHRyaWJ1dGVOYW1lKTtzLnB1c2goe3RuOm8sbm46Zn0pO3ZhciBkPW8ubm9kZSgpLmdldEJCb3goKSxwPWYubm9kZSgpLmdldEJCb3goKTtjPU1hdGgubWF4KGMsZC53aWR0aCksdT1NYXRoLm1heCh1LHAud2lkdGgpLGwrPU1hdGgubWF4KGQuaGVpZ2h0LHAuaGVpZ2h0KSsyKnIsaCs9MX0pKTt2YXIgZj17d2lkdGg6TWF0aC5tYXgoS24ubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoby53aWR0aCsyKktuLmVudGl0eVBhZGRpbmcsYyt1KzQqaSkpLGhlaWdodDpuLmxlbmd0aD4wP2w6TWF0aC5tYXgoS24ubWluRW50aXR5SGVpZ2h0LG8uaGVpZ2h0KzIqS24uZW50aXR5UGFkZGluZyl9LGQ9TWF0aC5tYXgoMCxmLndpZHRoLShjK3UpLTQqaSk7aWYobi5sZW5ndGg+MCl7ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitmLndpZHRoLzIrIiwiKyhyK28uaGVpZ2h0LzIpKyIpIik7dmFyIHA9by5oZWlnaHQrMipyLHk9ImF0dHJpYnV0ZUJveE9kZCI7cy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1wK3IrTWF0aC5tYXgoZS50bi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxlLm5uLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KS8yO2UudG4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCIrbisiKSIpO3ZhciBhPXQuaW5zZXJ0KCJyZWN0IiwiIyIrZS50bi5ub2RlKCkuaWQpLmF0dHIoImNsYXNzIiwiZXIgIi5jb25jYXQoeSkpLmF0dHIoImZpbGwiLEtuLmZpbGwpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjEwMCUiKS5hdHRyKCJzdHJva2UiLEtuLnN0cm9rZSkuYXR0cigieCIsMCkuYXR0cigieSIscCkuYXR0cigid2lkdGgiLGMrMippK2QvMikuYXR0cigiaGVpZ2h0IixlLnRuLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KzIqcik7ZS5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocGFyc2VGbG9hdChhLmF0dHIoIndpZHRoIikpK2kpKyIsIituKyIpIiksdC5pbnNlcnQoInJlY3QiLCIjIitlLm5uLm5vZGUoKS5pZCkuYXR0cigiY2xhc3MiLCJlciAiLmNvbmNhdCh5KSkuYXR0cigiZmlsbCIsS24uZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIsS24uc3Ryb2tlKS5hdHRyKCJ4IiwiIi5jb25jYXQoYS5hdHRyKCJ4IikrYS5hdHRyKCJ3aWR0aCIpKSkuYXR0cigieSIscCkuYXR0cigid2lkdGgiLHUrMippK2QvMikuYXR0cigiaGVpZ2h0IixlLm5uLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KzIqcikscCs9TWF0aC5tYXgoZS50bi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxlLm5uLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KSsyKnIseT0iYXR0cmlidXRlQm94T2RkIj09eT8iYXR0cmlidXRlQm94RXZlbiI6ImF0dHJpYnV0ZUJveE9kZCJ9KSl9ZWxzZSBmLmhlaWdodD1NYXRoLm1heChLbi5taW5FbnRpdHlIZWlnaHQsbCksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitmLndpZHRoLzIrIiwiK2YuaGVpZ2h0LzIrIikiKTtyZXR1cm4gZn0oYSxzLGVbaV0uYXR0cmlidXRlcyksdT1jLndpZHRoLGw9Yy5oZWlnaHQsaD1hLmluc2VydCgicmVjdCIsIiMiK28pLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5Qm94IikuYXR0cigiZmlsbCIsS24uZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIsS24uc3Ryb2tlKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixsKS5ub2RlKCkuZ2V0QkJveCgpO24uc2V0Tm9kZShpLHt3aWR0aDpoLndpZHRoLGhlaWdodDpoLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6aX0pfSkpLHJ9LEpuPWZ1bmN0aW9uKHQpe3JldHVybih0LmVudGl0eUErdC5yb2xlQSt0LmVudGl0eUIpLnJlcGxhY2UoL1xzL2csIiIpfSx0cj0wLGVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspS25bZVtuXV09dFtlW25dXX0sbnI9ZnVuY3Rpb24odCxlKXtvLmluZm8oIkRyYXdpbmcgRVIgZGlhZ3JhbSIpLFduLmNsZWFyKCk7dmFyIG49Vm4uYS5wYXJzZXI7bi55eT1Xbjt0cnl7bi5wYXJzZSh0KX1jYXRjaCh0KXtvLmRlYnVnKCJQYXJzaW5nIGZhaWxlZCIpfXZhciByLGk9T2JqZWN0KHUuc2VsZWN0KSgiW2lkPSciLmNvbmNhdChlLCInXSIpKTtabihpLEtuKSxyPW5ldyBMZS5hLkdyYXBoKHttdWx0aWdyYXBoOiEwLGRpcmVjdGVkOiEwLGNvbXBvdW5kOiExfSkuc2V0R3JhcGgoe3JhbmtkaXI6S24ubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7dmFyIGEscyxjPVFuKGksV24uZ2V0RW50aXRpZXMoKSxyKSxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5zZXRFZGdlKHQuZW50aXR5QSx0LmVudGl0eUIse3JlbGF0aW9uc2hpcDp0fSxKbih0KSl9KSksdH0oV24uZ2V0UmVsYXRpb25zaGlwcygpLHIpO0JlLmEubGF5b3V0KHIpLGE9aSwocz1yKS5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PXMubm9kZSh0KSYmYS5zZWxlY3QoIiMiK3QpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLm5vZGUodCkueC1zLm5vZGUodCkud2lkdGgvMikrIiwiKyhzLm5vZGUodCkueS1zLm5vZGUodCkuaGVpZ2h0LzIpKyIgKSIpfSkpLGwuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuLHIpe3RyKys7dmFyIGk9bi5lZGdlKGUuZW50aXR5QSxlLmVudGl0eUIsSm4oZSkpLGE9T2JqZWN0KHUubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUodS5jdXJ2ZUJhc2lzKSxvPXQuaW5zZXJ0KCJwYXRoIiwiIyIrcikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMaW5lIikuYXR0cigiZCIsYShpLnBvaW50cykpLmF0dHIoInN0cm9rZSIsS24uc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpO2UucmVsU3BlYy5yZWxUeXBlPT09V24uSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HJiZvLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI4LDgiKTt2YXIgcz0iIjtzd2l0Y2goS24uYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKHM9KHM9KHM9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZS5yZWxTcGVjLmNhcmRBKXtjYXNlIFduLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK1huLlpFUk9fT1JfT05FX0VORCsiKSIpO2JyZWFrO2Nhc2UgV24uQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK1huLlpFUk9fT1JfTU9SRV9FTkQrIikiKTticmVhaztjYXNlIFduLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK1huLk9ORV9PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2UgV24uQ2FyZGluYWxpdHkuT05MWV9PTkU6by5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrcysiIyIrWG4uT05MWV9PTkVfRU5EKyIpIil9c3dpdGNoKGUucmVsU3BlYy5jYXJkQil7Y2FzZSBXbi5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3MrIiMiK1huLlpFUk9fT1JfT05FX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBXbi5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU6by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitzKyIjIitYbi5aRVJPX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIFduLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOm8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrcysiIyIrWG4uT05FX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIFduLkNhcmRpbmFsaXR5Lk9OTFlfT05FOm8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrcysiIyIrWG4uT05MWV9PTkVfU1RBUlQrIikiKX12YXIgYz1vLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpLGw9by5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCguNSpjKSxoPSJyZWwiK3RyLGY9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLGgpLmF0dHIoIngiLGwueCkuYXR0cigieSIsbC55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitoZSgpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK0tuLmZvbnRTaXplKyJweCIpLnRleHQoZS5yb2xlQSkubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIiMiK2gpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGFiZWxCb3giKS5hdHRyKCJ4IixsLngtZi53aWR0aC8yKS5hdHRyKCJ5IixsLnktZi5oZWlnaHQvMikuYXR0cigid2lkdGgiLGYud2lkdGgpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfShpLHQscixjKX0pKTt2YXIgaD1Lbi5kaWFncmFtUGFkZGluZyxmPWkubm9kZSgpLmdldEJCb3goKSxkPWYud2lkdGgrMipoLHA9Zi5oZWlnaHQrMipoO3RlKGkscCxkLEtuLnVzZU1heFdpZHRoKSxpLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdChmLngtaCwiICIpLmNvbmNhdChmLnktaCwiICIpLmNvbmNhdChkLCIgIikuY29uY2F0KHApKX07ZnVuY3Rpb24gcnIodCl7cmV0dXJuKHJyPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gaXIodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGFyKHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBhcih0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1ufHwiU2V0Ij09PW4pcmV0dXJuIEFycmF5LmZyb20odCk7aWYoIkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gYXIodCxlKX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYXIodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgb3Isc3IsY3I9MCx1cj1oZSgpLGxyPXt9LGhyPVtdLGZyPVtdLGRyPVtdLHByPXt9LHlyPXt9LGdyPTAsbXI9ITAsdnI9W10sYnI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKGxyKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYobHJbZVtuXV0uaWQ9PT10KXJldHVybiBscltlW25dXS5kb21JZDtyZXR1cm4gdH0seHI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9e3N0YXJ0OnQsZW5kOmUsdHlwZTp2b2lkIDAsdGV4dDoiIn07dm9pZCAwIT09KHI9bi50ZXh0KSYmKGkudGV4dD1udC5zYW5pdGl6ZVRleHQoci50cmltKCksdXIpLCciJz09PWkudGV4dFswXSYmJyInPT09aS50ZXh0W2kudGV4dC5sZW5ndGgtMV0mJihpLnRleHQ9aS50ZXh0LnN1YnN0cmluZygxLGkudGV4dC5sZW5ndGgtMSkpKSx2b2lkIDAhPT1uJiYoaS50eXBlPW4udHlwZSxpLnN0cm9rZT1uLnN0cm9rZSxpLmxlbmd0aD1uLmxlbmd0aCksaHIucHVzaChpKX0sX3I9ZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dDt2b2lkIDAhPT1scltuXSYmbHJbbl0uY2xhc3Nlcy5wdXNoKGUpLHZvaWQgMCE9PXByW25dJiZwcltuXS5jbGFzc2VzLnB1c2goZSl9KSl9LGtyPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh1LnNlbGVjdCkoIi5tZXJtYWlkVG9vbHRpcCIpO251bGw9PT0oZS5fZ3JvdXBzfHxlKVswXVswXSYmKGU9T2JqZWN0KHUuc2VsZWN0KSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksT2JqZWN0KHUuc2VsZWN0KSh0KS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0KHUuc2VsZWN0KSh0aGlzKTtpZihudWxsIT09dC5hdHRyKCJ0aXRsZSIpKXt2YXIgbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLCIuOSIpLGUuaHRtbCh0LmF0dHIoInRpdGxlIikpLnN0eWxlKCJsZWZ0Iix3aW5kb3cuc2Nyb2xsWCtuLmxlZnQrKG4ucmlnaHQtbi5sZWZ0KS8yKyJweCIpLnN0eWxlKCJ0b3AiLHdpbmRvdy5zY3JvbGxZK24udG9wLTE0K2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKyJweCIpLHQuY2xhc3NlZCgiaG92ZXIiLCEwKX19KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxPYmplY3QodS5zZWxlY3QpKHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O3ZyLnB1c2goa3IpO3ZhciB3cj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGRyLmxlbmd0aDtlKyspaWYoZHJbZV0uaWQ9PT10KXJldHVybiBlO3JldHVybi0xfSxUcj0tMSxFcj1bXSxDcj1mdW5jdGlvbih0LGUpe3ZhciBuPSExO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qubm9kZXMuaW5kZXhPZihlKT49MCYmKG49ITApfSkpLG59LFNyPWZ1bmN0aW9uKHQsZSl7dmFyIG49W107cmV0dXJuIHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24ocixpKXtDcihlLHIpfHxuLnB1c2godC5ub2Rlc1tpXSl9KSkse25vZGVzOm59fSxBcj17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3ljLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxkZWZhdWx0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIGFlLmZsb3djaGFydH0sYWRkVmVydGV4OmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzPXQ7dm9pZCAwIT09cyYmMCE9PXMudHJpbSgpLmxlbmd0aCYmKHZvaWQgMD09PWxyW3NdJiYobHJbc109e2lkOnMsZG9tSWQ6ImZsb3djaGFydC0iK3MrIi0iK2NyLHN0eWxlczpbXSxjbGFzc2VzOltdfSksY3IrKyx2b2lkIDAhPT1lPyh1cj1oZSgpLCciJz09PShvPW50LnNhbml0aXplVGV4dChlLnRyaW0oKSx1cikpWzBdJiYnIic9PT1vW28ubGVuZ3RoLTFdJiYobz1vLnN1YnN0cmluZygxLG8ubGVuZ3RoLTEpKSxscltzXS50ZXh0PW8pOnZvaWQgMD09PWxyW3NdLnRleHQmJihscltzXS50ZXh0PXQpLHZvaWQgMCE9PW4mJihscltzXS50eXBlPW4pLG51bGwhPXImJnIuZm9yRWFjaCgoZnVuY3Rpb24odCl7bHJbc10uc3R5bGVzLnB1c2godCl9KSksbnVsbCE9aSYmaS5mb3JFYWNoKChmdW5jdGlvbih0KXtscltzXS5jbGFzc2VzLnB1c2godCl9KSksdm9pZCAwIT09YSYmKGxyW3NdLmRpcj1hKSl9LGxvb2tVcERvbUlkOmJyLGFkZExpbms6ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWZvcihhPTA7YTxlLmxlbmd0aDthKyspeHIodFtpXSxlW2FdLG4scil9LHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ImRlZmF1bHQiPT09dD9oci5kZWZhdWx0SW50ZXJwb2xhdGU9ZTpoclt0XS5pbnRlcnBvbGF0ZT1lfSkpfSx1cGRhdGVMaW5rOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZGVmYXVsdCI9PT10P2hyLmRlZmF1bHRTdHlsZT1lOigtMT09PW5lLmlzU3Vic3RyaW5nSW5BcnJheSgiZmlsbCIsZSkmJmUucHVzaCgiZmlsbDpub25lIiksaHJbdF0uc3R5bGU9ZSl9KSl9LGFkZENsYXNzOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZnJbdF0mJihmclt0XT17aWQ6dCxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pLG51bGwhPWUmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5tYXRjaCgiY29sb3IiKSl7dmFyIG49ZS5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIikucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7ZnJbdF0udGV4dFN0eWxlcy5wdXNoKG4pfWZyW3RdLnN0eWxlcy5wdXNoKGUpfSkpfSxzZXREaXJlY3Rpb246ZnVuY3Rpb24odCl7KG9yPXQpLm1hdGNoKC8uKjwvKSYmKG9yPSJSTCIpLG9yLm1hdGNoKC8uKlxeLykmJihvcj0iQlQiKSxvci5tYXRjaCgvLio+LykmJihvcj0iTFIiKSxvci5tYXRjaCgvLip2LykmJihvcj0iVEIiKX0sc2V0Q2xhc3M6X3Isc2V0VG9vbHRpcDpmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lJiYoeXJbImdlbi0xIj09PXNyP2JyKHQpOnRdPW50LnNhbml0aXplVGV4dChlLHVyKSl9KSl9LGdldFRvb2x0aXA6ZnVuY3Rpb24odCl7cmV0dXJuIHlyW3RdfSxzZXRDbGlja0V2ZW50OmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1icih0KTtpZigibG9vc2UiPT09aGUoKS5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lKXt2YXIgaT1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2k9bi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXS50cmltKCk7JyInPT09by5jaGFyQXQoMCkmJiciJz09PW8uY2hhckF0KG8ubGVuZ3RoLTEpJiYobz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpKSxpW2FdPW99fTA9PT1pLmxlbmd0aCYmaS5wdXNoKHQpLHZvaWQgMCE9PWxyW3RdJiYobHJbdF0uaGF2ZUNhbGxiYWNrPSEwLHZyLnB1c2goKGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdChyLCciXScpKTtudWxsIT09dCYmdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7bmUucnVuRnVuYy5hcHBseShuZSxbZV0uY29uY2F0KGlyKGkpKSl9KSwhMSl9KSkpfX0odCxlLG4pfSkpLF9yKHQsImNsaWNrYWJsZSIpfSxzZXRMaW5rOmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09bHJbdF0mJihsclt0XS5saW5rPW5lLmZvcm1hdFVybChlLHVyKSxsclt0XS5saW5rVGFyZ2V0PW4pfSkpLF9yKHQsImNsaWNrYWJsZSIpfSxiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe3ZyLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBvci50cmltKCl9LGdldFZlcnRpY2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGxyfSxnZXRFZGdlczpmdW5jdGlvbigpe3JldHVybiBocn0sZ2V0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiBmcn0sY2xlYXI6ZnVuY3Rpb24odCl7bHI9e30sZnI9e30saHI9W10sKHZyPVtdKS5wdXNoKGtyKSxkcj1bXSxwcj17fSxncj0wLHlyPVtdLG1yPSEwLHNyPXR8fCJnZW4tMSJ9LHNldEdlbjpmdW5jdGlvbih0KXtzcj10fHwiZ2VuLTEifSxkZWZhdWx0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4iZmlsbDojZmZhO3N0cm9rZTogI2Y2Njsgc3Ryb2tlLXdpZHRoOiAzcHg7IHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7ZmlsbDojZmZhO3N0cm9rZTogIzY2NjsifSxhZGRTdWJHcmFwaDpmdW5jdGlvbih0LGUsbil7dmFyIHI9dC50cmltKCksaT1uO3Q9PT1uJiZuLm1hdGNoKC9ccy8pJiYocj12b2lkIDApO3ZhciBhPVtdLHM9ZnVuY3Rpb24odCl7dmFyIGUsbj17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxyPVtdO3JldHVybntub2RlTGlzdDp0LmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIGk9cnIodCk7cmV0dXJuIHQuc3RtdCYmImRpciI9PT10LnN0bXQ/KGU9dC52YWx1ZSwhMSk6IiIhPT10LnRyaW0oKSYmKGkgaW4gbj8hbltpXS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG5baV1bdF09ITApOiEoci5pbmRleE9mKHQpPj0wKSYmci5wdXNoKHQpKX0pKSxkaXI6ZX19KGEuY29uY2F0LmFwcGx5KGEsZSkpLGM9cy5ub2RlTGlzdCx1PXMuZGlyO2lmKGE9YywiZ2VuLTEiPT09c3Ipe28ud2FybigiTE9PS0lORyBVUCIpO2Zvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKWFbbF09YnIoYVtsXSl9cj1yfHwic3ViR3JhcGgiK2dyLGk9aXx8IiIsaT1udC5zYW5pdGl6ZVRleHQoaSx1ciksZ3IrPTE7dmFyIGg9e2lkOnIsbm9kZXM6YSx0aXRsZTppLnRyaW0oKSxjbGFzc2VzOltdLGRpcjp1fTtyZXR1cm4gby5pbmZvKCJBZGRpbmciLGguaWQsaC5ub2RlcyxoLmRpciksaC5ub2Rlcz1TcihoLGRyKS5ub2Rlcyxkci5wdXNoKGgpLHByW3JdPWgscn0sZ2V0RGVwdGhGaXJzdFBvczpmdW5jdGlvbih0KXtyZXR1cm4gRXJbdF19LGluZGV4Tm9kZXM6ZnVuY3Rpb24oKXtUcj0tMSxkci5sZW5ndGg+MCYmZnVuY3Rpb24gdChlLG4pe3ZhciByPWRyW25dLm5vZGVzO2lmKCEoKFRyKz0xKT4yZTMpKXtpZihFcltUcl09bixkcltuXS5pZD09PWUpcmV0dXJue3Jlc3VsdDohMCxjb3VudDowfTtmb3IodmFyIGk9MCxhPTE7aTxyLmxlbmd0aDspe3ZhciBvPXdyKHJbaV0pO2lmKG8+PTApe3ZhciBzPXQoZSxvKTtpZihzLnJlc3VsdClyZXR1cm57cmVzdWx0OiEwLGNvdW50OmErcy5jb3VudH07YSs9cy5jb3VudH1pKz0xfXJldHVybntyZXN1bHQ6ITEsY291bnQ6YX19fSgibm9uZSIsZHIubGVuZ3RoLTEpfSxnZXRTdWJHcmFwaHM6ZnVuY3Rpb24oKXtyZXR1cm4gZHJ9LGRlc3RydWN0TGluazpmdW5jdGlvbih0LGUpe3ZhciBuLHI9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmltKCksbj1lLnNsaWNlKDAsLTEpLHI9ImFycm93X29wZW4iO3N3aXRjaChlLnNsaWNlKC0xKSl7Y2FzZSJ4IjpyPSJhcnJvd19jcm9zcyIsIngiPT09ZVswXSYmKHI9ImRvdWJsZV8iK3Isbj1uLnNsaWNlKDEpKTticmVhaztjYXNlIj4iOnI9ImFycm93X3BvaW50IiwiPCI9PT1lWzBdJiYocj0iZG91YmxlXyIrcixuPW4uc2xpY2UoMSkpO2JyZWFrO2Nhc2UibyI6cj0iYXJyb3dfY2lyY2xlIiwibyI9PT1lWzBdJiYocj0iZG91YmxlXyIrcixuPW4uc2xpY2UoMSkpfXZhciBpPSJub3JtYWwiLGE9bi5sZW5ndGgtMTsiPSI9PT1uWzBdJiYoaT0idGhpY2siKTt2YXIgbz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPTAsaT0wO2k8bjsrK2kpZVtpXT09PXQmJisrcjtyZXR1cm4gcn0oIi4iLG4pO3JldHVybiBvJiYoaT0iZG90dGVkIixhPW8pLHt0eXBlOnIsc3Ryb2tlOmksbGVuZ3RoOmF9fSh0KTtpZihlKXtpZigobj1mdW5jdGlvbih0KXt2YXIgZT10LnRyaW0oKSxuPSJhcnJvd19vcGVuIjtzd2l0Y2goZVswXSl7Y2FzZSI8IjpuPSJhcnJvd19wb2ludCIsZT1lLnNsaWNlKDEpO2JyZWFrO2Nhc2UieCI6bj0iYXJyb3dfY3Jvc3MiLGU9ZS5zbGljZSgxKTticmVhaztjYXNlIm8iOm49ImFycm93X2NpcmNsZSIsZT1lLnNsaWNlKDEpfXZhciByPSJub3JtYWwiO3JldHVybi0xIT09ZS5pbmRleE9mKCI9IikmJihyPSJ0aGljayIpLC0xIT09ZS5pbmRleE9mKCIuIikmJihyPSJkb3R0ZWQiKSx7dHlwZTpuLHN0cm9rZTpyfX0oZSkpLnN0cm9rZSE9PXIuc3Ryb2tlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtpZigiYXJyb3dfb3BlbiI9PT1uLnR5cGUpbi50eXBlPXIudHlwZTtlbHNle2lmKG4udHlwZSE9PXIudHlwZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07bi50eXBlPSJkb3VibGVfIituLnR5cGV9cmV0dXJuImRvdWJsZV9hcnJvdyI9PT1uLnR5cGUmJihuLnR5cGU9ImRvdWJsZV9hcnJvd19wb2ludCIpLG4ubGVuZ3RoPXIubGVuZ3RoLG59cmV0dXJuIHJ9LGxleDp7Zmlyc3RHcmFwaDpmdW5jdGlvbigpe3JldHVybiEhbXImJihtcj0hMSwhMCl9fSxleGlzdHM6Q3IsbWFrZVVuaXE6U3J9LE1yPW4oMjcpLE9yPW4ubihNciksTnI9big4KSxCcj1uLm4oTnIpLERyPW4oNTEpLExyPW4ubihEcik7ZnVuY3Rpb24gSXIodCxlLG4pe3ZhciByPS45KihlLndpZHRoK2UuaGVpZ2h0KSxpPVt7eDpyLzIseTowfSx7eDpyLHk6LXIvMn0se3g6ci8yLHk6LXJ9LHt4OjAseTotci8yfV0sYT1Icih0LHIscixpKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEJyLmEuaW50ZXJzZWN0LnBvbHlnb24obixpLHQpfSxhfWZ1bmN0aW9uIFJyKHQsZSxuKXt2YXIgcj1lLmhlaWdodCxpPXIvNCxhPWUud2lkdGgrMippLG89W3t4OmkseTowfSx7eDphLWkseTowfSx7eDphLHk6LXIvMn0se3g6YS1pLHk6LXJ9LHt4OmkseTotcn0se3g6MCx5Oi1yLzJ9XSxzPUhyKHQsYSxyLG8pO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gQnIuYS5pbnRlcnNlY3QucG9seWdvbihuLG8sdCl9LHN9ZnVuY3Rpb24gRnIodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDotaS8yLHk6MH0se3g6cix5OjB9LHt4OnIseTotaX0se3g6LWkvMix5Oi1pfSx7eDowLHk6LWkvMn1dLG89SHIodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBCci5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBQcih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4Oi0yKmkvNix5OjB9LHt4OnItaS82LHk6MH0se3g6cisyKmkvNix5Oi1pfSx7eDppLzYseTotaX1dLG89SHIodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBCci5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBqcih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjIqaS82LHk6MH0se3g6citpLzYseTowfSx7eDpyLTIqaS82LHk6LWl9LHt4Oi1pLzYseTotaX1dLG89SHIodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBCci5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBZcih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4Oi0yKmkvNix5OjB9LHt4OnIrMippLzYseTowfSx7eDpyLWkvNix5Oi1pfSx7eDppLzYseTotaX1dLG89SHIodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBCci5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiB6cih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OmkvNix5OjB9LHt4OnItaS82LHk6MH0se3g6cisyKmkvNix5Oi1pfSx7eDotMippLzYseTotaX1dLG89SHIodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBCci5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBVcih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjAseTowfSx7eDpyK2kvMix5OjB9LHt4OnIseTotaS8yfSx7eDpyK2kvMix5Oi1pfSx7eDowLHk6LWl9XSxvPUhyKHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gQnIuYS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gJHIodCxlLG4pe3ZhciByPWUuaGVpZ2h0LGk9ZS53aWR0aCtyLzQsYT10Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixyLzIpLmF0dHIoInJ5IixyLzIpLmF0dHIoIngiLC1pLzIpLmF0dHIoInkiLC1yLzIpLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLHIpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gQnIuYS5pbnRlcnNlY3QucmVjdChuLHQpfSxhfWZ1bmN0aW9uIHFyKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6MCx5OjB9LHt4OnIseTowfSx7eDpyLHk6LWl9LHt4OjAseTotaX0se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6cis4LHk6MH0se3g6cis4LHk6LWl9LHt4Oi04LHk6LWl9LHt4Oi04LHk6MH1dLG89SHIodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBCci5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBXcih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPXIvMixhPWkvKDIuNStyLzUwKSxvPWUuaGVpZ2h0K2Escz0iTSAwLCIrYSsiIGEgIitpKyIsIithKyIgMCwwLDAgIityKyIgMCBhICIraSsiLCIrYSsiIDAsMCwwICIrLXIrIiAwIGwgMCwiK28rIiBhICIraSsiLCIrYSsiIDAsMCwwICIrcisiIDAgbCAwLCIrLW8sYz10LmF0dHIoImxhYmVsLW9mZnNldC15IixhKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixzKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistci8yKyIsIistKG8vMithKSsiKSIpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXt2YXIgZT1Cci5hLmludGVyc2VjdC5yZWN0KG4sdCkscj1lLngtbi54O2lmKDAhPWkmJihNYXRoLmFicyhyKTxuLndpZHRoLzJ8fE1hdGguYWJzKHIpPT1uLndpZHRoLzImJk1hdGguYWJzKGUueS1uLnkpPm4uaGVpZ2h0LzItYSkpe3ZhciBvPWEqYSooMS1yKnIvKGkqaSkpOzAhPW8mJihvPU1hdGguc3FydChvKSksbz1hLW8sdC55LW4ueT4wJiYobz0tbyksZS55Kz1vfXJldHVybiBlfSxjfWZ1bmN0aW9uIEhyKHQsZSxuLHIpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1lLzIrIiwiK24vMisiKSIpfXZhciBWcj17YWRkVG9SZW5kZXI6ZnVuY3Rpb24odCl7dC5zaGFwZXMoKS5xdWVzdGlvbj1Jcix0LnNoYXBlcygpLmhleGFnb249UnIsdC5zaGFwZXMoKS5zdGFkaXVtPSRyLHQuc2hhcGVzKCkuc3Vicm91dGluZT1xcix0LnNoYXBlcygpLmN5bGluZGVyPVdyLHQuc2hhcGVzKCkucmVjdF9sZWZ0X2ludl9hcnJvdz1Gcix0LnNoYXBlcygpLmxlYW5fcmlnaHQ9UHIsdC5zaGFwZXMoKS5sZWFuX2xlZnQ9anIsdC5zaGFwZXMoKS50cmFwZXpvaWQ9WXIsdC5zaGFwZXMoKS5pbnZfdHJhcGV6b2lkPXpyLHQuc2hhcGVzKCkucmVjdF9yaWdodF9pbnZfYXJyb3c9VXJ9LGFkZFRvUmVuZGVyVjI6ZnVuY3Rpb24odCl7dCh7cXVlc3Rpb246SXJ9KSx0KHtoZXhhZ29uOlJyfSksdCh7c3RhZGl1bTokcn0pLHQoe3N1YnJvdXRpbmU6cXJ9KSx0KHtjeWxpbmRlcjpXcn0pLHQoe3JlY3RfbGVmdF9pbnZfYXJyb3c6RnJ9KSx0KHtsZWFuX3JpZ2h0OlByfSksdCh7bGVhbl9sZWZ0OmpyfSksdCh7dHJhcGV6b2lkOllyfSksdCh7aW52X3RyYXBlem9pZDp6cn0pLHQoe3JlY3RfcmlnaHRfaW52X2Fycm93OlVyfSl9fSxHcj17fSxYcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9T2JqZWN0KHUuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChuLCciXScpKTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT10W25dLGE9ImRlZmF1bHQiO2kuY2xhc3Nlcy5sZW5ndGg+MCYmKGE9aS5jbGFzc2VzLmpvaW4oIiAiKSk7dmFyIHMsYz1VdChpLnN0eWxlcyksdT12b2lkIDAhPT1pLnRleHQ/aS50ZXh0OmkuaWQ7aWYoZXQoaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBsPXtsYWJlbDp1LnJlcGxhY2UoL2ZhW2xyc2JdPzpmYS1bXHctXSsvZywoZnVuY3Rpb24odCl7cmV0dXJuIjxpIGNsYXNzPSciLmNvbmNhdCh0LnJlcGxhY2UoIjoiLCIgIiksIic+PC9pPiIpfSkpfTsocz1McigpKHIsbCkubm9kZSgpKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHMpfWVsc2V7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtoLnNldEF0dHJpYnV0ZSgic3R5bGUiLGMubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtmb3IodmFyIGY9dS5zcGxpdChudC5saW5lQnJlYWtSZWdleCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtwLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHAuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHAuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLHAudGV4dENvbnRlbnQ9ZltkXSxoLmFwcGVuZENoaWxkKHApfXM9aH12YXIgeT0wLGc9IiI7c3dpdGNoKGkudHlwZSl7Y2FzZSJyb3VuZCI6eT01LGc9InJlY3QiO2JyZWFrO2Nhc2Uic3F1YXJlIjpnPSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOmc9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOmc9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjpnPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOmc9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjpnPSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjpnPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6Zz0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOmc9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjpnPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6Zz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpnPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOmc9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOmc9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjpnPSJyZWN0IjticmVhaztkZWZhdWx0Omc9InJlY3QifW8ud2FybigiQWRkaW5nIG5vZGUiLGkuaWQsaS5kb21JZCksZS5zZXROb2RlKEFyLmxvb2tVcERvbUlkKGkuaWQpLHtsYWJlbFR5cGU6InN2ZyIsbGFiZWxTdHlsZTpjLmxhYmVsU3R5bGUsc2hhcGU6ZyxsYWJlbDpzLHJ4Onkscnk6eSxjbGFzczphLHN0eWxlOmMuc3R5bGUsaWQ6QXIubG9va1VwRG9tSWQoaS5pZCl9KX0pKX0sWnI9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9MDtpZih2b2lkIDAhPT10LmRlZmF1bHRTdHlsZSl7dmFyIGE9VXQodC5kZWZhdWx0U3R5bGUpO249YS5zdHlsZSxyPWEubGFiZWxTdHlsZX10LmZvckVhY2goKGZ1bmN0aW9uKGEpe2krKzt2YXIgbz0iTC0iK2Euc3RhcnQrIi0iK2EuZW5kLHM9IkxTLSIrYS5zdGFydCxjPSJMRS0iK2EuZW5kLGw9e307ImFycm93X29wZW4iPT09YS50eXBlP2wuYXJyb3doZWFkPSJub25lIjpsLmFycm93aGVhZD0ibm9ybWFsIjt2YXIgaD0iIixmPSIiO2lmKHZvaWQgMCE9PWEuc3R5bGUpe3ZhciBkPVV0KGEuc3R5bGUpO2g9ZC5zdHlsZSxmPWQubGFiZWxTdHlsZX1lbHNlIHN3aXRjaChhLnN0cm9rZSl7Y2FzZSJub3JtYWwiOmg9ImZpbGw6bm9uZSIsdm9pZCAwIT09biYmKGg9biksdm9pZCAwIT09ciYmKGY9cik7YnJlYWs7Y2FzZSJkb3R0ZWQiOmg9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOmg9IiBzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZSJ9bC5zdHlsZT1oLGwubGFiZWxTdHlsZT1mLHZvaWQgMCE9PWEuaW50ZXJwb2xhdGU/bC5jdXJ2ZT1ZdChhLmludGVycG9sYXRlLHUuY3VydmVMaW5lYXIpOnZvaWQgMCE9PXQuZGVmYXVsdEludGVycG9sYXRlP2wuY3VydmU9WXQodC5kZWZhdWx0SW50ZXJwb2xhdGUsdS5jdXJ2ZUxpbmVhcik6bC5jdXJ2ZT1ZdChHci5jdXJ2ZSx1LmN1cnZlTGluZWFyKSx2b2lkIDA9PT1hLnRleHQ/dm9pZCAwIT09YS5zdHlsZSYmKGwuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKToobC5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsbC5sYWJlbHBvcz0iYyIsZXQoaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk/KGwubGFiZWxUeXBlPSJodG1sIixsLmxhYmVsPSc8c3BhbiBpZD0iTC0nLmNvbmNhdChvLCciIGNsYXNzPSJlZGdlTGFiZWwgTC0nKS5jb25jYXQocywiJyBMLSIpLmNvbmNhdChjLCciPicpLmNvbmNhdChhLnRleHQucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSksIjwvc3Bhbj4iKSk6KGwubGFiZWxUeXBlPSJ0ZXh0IixsLmxhYmVsPWEudGV4dC5yZXBsYWNlKG50LmxpbmVCcmVha1JlZ2V4LCJcbiIpLHZvaWQgMD09PWEuc3R5bGUmJihsLnN0eWxlPWwuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksbC5sYWJlbFN0eWxlPWwubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksbC5pZD1vLGwuY2xhc3M9cysiICIrYyxsLm1pbmxlbj1hLmxlbmd0aHx8MSxlLnNldEVkZ2UoQXIubG9va1VwRG9tSWQoYS5zdGFydCksQXIubG9va1VwRG9tSWQoYS5lbmQpLGwsaSl9KSl9LEtyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspR3JbZVtuXV09dFtlW25dXX0sUXI9ZnVuY3Rpb24odCl7by5pbmZvKCJFeHRyYWN0aW5nIGNsYXNzZXMiKSxBci5jbGVhcigpO3RyeXt2YXIgZT1Pci5hLnBhcnNlcjtyZXR1cm4gZS55eT1BcixlLnBhcnNlKHQpLEFyLmdldENsYXNzZXMoKX1jYXRjaCh0KXtyZXR1cm59fSxKcj1mdW5jdGlvbih0LGUpe28uaW5mbygiRHJhd2luZyBmbG93Y2hhcnQiKSxBci5jbGVhcigpLEFyLnNldEdlbigiZ2VuLTEiKTt2YXIgbj1Pci5hLnBhcnNlcjtuLnl5PUFyLG4ucGFyc2UodCk7dmFyIHI9QXIuZ2V0RGlyZWN0aW9uKCk7dm9pZCAwPT09ciYmKHI9IlREIik7Zm9yKHZhciBpLGE9aGUoKS5mbG93Y2hhcnQscz1hLm5vZGVTcGFjaW5nfHw1MCxjPWEucmFua1NwYWNpbmd8fDUwLGw9bmV3IExlLmEuR3JhcGgoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpyLG5vZGVzZXA6cyxyYW5rc2VwOmMsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksaD1Bci5nZXRTdWJHcmFwaHMoKSxmPWgubGVuZ3RoLTE7Zj49MDtmLS0paT1oW2ZdLEFyLmFkZFZlcnRleChpLmlkLGkudGl0bGUsImdyb3VwIix2b2lkIDAsaS5jbGFzc2VzKTt2YXIgZD1Bci5nZXRWZXJ0aWNlcygpO28ud2FybigiR2V0IHZlcnRpY2VzIixkKTt2YXIgcD1Bci5nZXRFZGdlcygpLHk9MDtmb3IoeT1oLmxlbmd0aC0xO3k+PTA7eS0tKXtpPWhbeV0sT2JqZWN0KHUuc2VsZWN0QWxsKSgiY2x1c3RlciIpLmFwcGVuZCgidGV4dCIpO2Zvcih2YXIgZz0wO2c8aS5ub2Rlcy5sZW5ndGg7ZysrKW8ud2FybigiU2V0dGluZyBzdWJncmFwaCIsaS5ub2Rlc1tnXSxBci5sb29rVXBEb21JZChpLm5vZGVzW2ddKSxBci5sb29rVXBEb21JZChpLmlkKSksbC5zZXRQYXJlbnQoQXIubG9va1VwRG9tSWQoaS5ub2Rlc1tnXSksQXIubG9va1VwRG9tSWQoaS5pZCkpfVhyKGQsbCxlKSxacihwLGwpO3ZhciBtPW5ldygwLEJyLmEucmVuZGVyKTtWci5hZGRUb1JlbmRlcihtKSxtLmFycm93cygpLm5vbmU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAwIDAgTCAwIDAgeiIpO0JyLmEudXRpbC5hcHBseVN0eWxlKGksbltyKyJTdHlsZSJdKX0sbS5hcnJvd3MoKS5ub3JtYWw9ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93aGVhZFBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfTt2YXIgdj1PYmplY3QodS5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO3YuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksby53YXJuKGwpO3ZhciBiPU9iamVjdCh1LnNlbGVjdCkoIiMiK2UrIiBnIik7bShiLGwpLGIuc2VsZWN0QWxsKCJnLm5vZGUiKS5hdHRyKCJ0aXRsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFyLmdldFRvb2x0aXAodGhpcy5pZCl9KSk7dmFyIHg9YS5kaWFncmFtUGFkZGluZyxfPXYubm9kZSgpLmdldEJCb3goKSxrPV8ud2lkdGgrMip4LHc9Xy5oZWlnaHQrMip4O3RlKHYsdyxrLGEudXNlTWF4V2lkdGgpO3ZhciBUPSIiLmNvbmNhdChfLngteCwiICIpLmNvbmNhdChfLnkteCwiICIpLmNvbmNhdChrLCIgIikuY29uY2F0KHcpO2ZvcihvLmRlYnVnKCJ2aWV3Qm94ICIuY29uY2F0KFQpKSx2LmF0dHIoInZpZXdCb3giLFQpLEFyLmluZGV4Tm9kZXMoInN1YkdyYXBoIit5KSx5PTA7eTxoLmxlbmd0aDt5KyspaWYoInVuZGVmaW5lZCIhPT0oaT1oW3ldKS50aXRsZSl7dmFyIEU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytBci5sb29rVXBEb21JZChpLmlkKSsnIl0gcmVjdCcpLEM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytBci5sb29rVXBEb21JZChpLmlkKSsnIl0nKSxTPUVbMF0ueC5iYXNlVmFsLnZhbHVlLEE9RVswXS55LmJhc2VWYWwudmFsdWUsTT1FWzBdLndpZHRoLmJhc2VWYWwudmFsdWUsTz1PYmplY3QodS5zZWxlY3QpKENbMF0pLnNlbGVjdCgiLmxhYmVsIik7Ty5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoUytNLzIsIiwgIikuY29uY2F0KEErMTQsIikiKSksTy5hdHRyKCJpZCIsZSsiVGV4dCIpO2Zvcih2YXIgTj0wO048aS5jbGFzc2VzLmxlbmd0aDtOKyspQ1swXS5jbGFzc0xpc3QuYWRkKGkuY2xhc3Nlc1tOXSl9ZXQoYS5odG1sTGFiZWxzKTtmb3IodmFyIEI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2UrJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyksRD0wO0Q8Qi5sZW5ndGg7RCsrKXt2YXIgTD1CW0RdLEk9TC5nZXRCQm94KCksUj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO1Iuc2V0QXR0cmlidXRlKCJyeCIsMCksUi5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxSLnNldEF0dHJpYnV0ZSgid2lkdGgiLEkud2lkdGgpLFIuc2V0QXR0cmlidXRlKCJoZWlnaHQiLEkuaGVpZ2h0KSxMLmluc2VydEJlZm9yZShSLEwuZmlyc3RDaGlsZCl9T2JqZWN0LmtleXMoZCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZFt0XTtpZihuLmxpbmspe3ZhciByPU9iamVjdCh1LnNlbGVjdCkoIiMiK2UrJyBbaWQ9IicrQXIubG9va1VwRG9tSWQodCkrJyJdJyk7aWYocil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImEiKTtpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixuLmNsYXNzZXMuam9pbigiICIpKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImhyZWYiLG4ubGluayksaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLG4ubGlua1RhcmdldCYmaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLG4ubGlua1RhcmdldCk7dmFyIGE9ci5pbnNlcnQoKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSwiOmZpcnN0LWNoaWxkIiksbz1yLnNlbGVjdCgiLmxhYmVsLWNvbnRhaW5lciIpO28mJmEuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBvLm5vZGUoKX0pKTt2YXIgcz1yLnNlbGVjdCgiLmxhYmVsIik7cyYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIHMubm9kZSgpfSkpfX19KSl9LHRpPXt9LGVpPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1PYmplY3QodS5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KG4sJyJdJykpO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl0sYT0iZGVmYXVsdCI7aS5jbGFzc2VzLmxlbmd0aD4wJiYoYT1pLmNsYXNzZXMuam9pbigiICIpKTt2YXIgcyxjPVV0KGkuc3R5bGVzKSx1PXZvaWQgMCE9PWkudGV4dD9pLnRleHQ6aS5pZDtpZihldChoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGw9e2xhYmVsOnUucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSl9OyhzPUxyKCkocixsKS5ub2RlKCkpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocyl9ZWxzZXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2guc2V0QXR0cmlidXRlKCJzdHlsZSIsYy5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2Zvcih2YXIgZj11LnNwbGl0KG50LmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Auc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikscC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikscC5zZXRBdHRyaWJ1dGUoIngiLCIxIikscC50ZXh0Q29udGVudD1mW2RdLGguYXBwZW5kQ2hpbGQocCl9cz1ofXZhciB5PTAsZz0iIjtzd2l0Y2goaS50eXBlKXtjYXNlInJvdW5kIjp5PTUsZz0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOmc9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6Zz0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6Zz0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOmc9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6Zz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOmc9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOmc9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpnPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6Zz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOmc9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjpnPSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOmc9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6Zz0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6Zz0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOmc9InJlY3QiO2JyZWFrO2RlZmF1bHQ6Zz0icmVjdCJ9ZS5zZXROb2RlKGkuaWQse2xhYmVsU3R5bGU6Yy5sYWJlbFN0eWxlLHNoYXBlOmcsbGFiZWxUZXh0OnUscng6eSxyeTp5LGNsYXNzOmEsc3R5bGU6Yy5zdHlsZSxpZDppLmlkLGxpbms6aS5saW5rLGxpbmtUYXJnZXQ6aS5saW5rVGFyZ2V0LHRvb2x0aXA6QXIuZ2V0VG9vbHRpcChpLmlkKXx8IiIsZG9tSWQ6QXIubG9va1VwRG9tSWQoaS5pZCksaGF2ZUNhbGxiYWNrOmkuaGF2ZUNhbGxiYWNrLHdpZHRoOiJncm91cCI9PT1pLnR5cGU/NTAwOnZvaWQgMCxkaXI6aS5kaXIsdHlwZTppLnR5cGUscGFkZGluZzpoZSgpLmZsb3djaGFydC5wYWRkaW5nfSksby5pbmZvKCJzZXROb2RlIix7bGFiZWxTdHlsZTpjLmxhYmVsU3R5bGUsc2hhcGU6ZyxsYWJlbFRleHQ6dSxyeDp5LHJ5OnksY2xhc3M6YSxzdHlsZTpjLnN0eWxlLGlkOmkuaWQsZG9tSWQ6QXIubG9va1VwRG9tSWQoaS5pZCksd2lkdGg6Imdyb3VwIj09PWkudHlwZT81MDA6dm9pZCAwLHR5cGU6aS50eXBlLGRpcjppLmRpcixwYWRkaW5nOmhlKCkuZmxvd2NoYXJ0LnBhZGRpbmd9KX0pKX0sbmk9ZnVuY3Rpb24odCxlKXtvLmluZm8oImFiYzc4IGVkZ2VzID0gIix0KTt2YXIgbixyLGk9MCxhPXt9O2lmKHZvaWQgMCE9PXQuZGVmYXVsdFN0eWxlKXt2YXIgcz1VdCh0LmRlZmF1bHRTdHlsZSk7bj1zLnN0eWxlLHI9cy5sYWJlbFN0eWxlfXQuZm9yRWFjaCgoZnVuY3Rpb24ocyl7aSsrO3ZhciBjPSJMLSIrcy5zdGFydCsiLSIrcy5lbmQ7dm9pZCAwPT09YVtjXT8oYVtjXT0wLG8uaW5mbygiYWJjNzggbmV3IGVudHJ5IixjLGFbY10pKTooYVtjXSsrLG8uaW5mbygiYWJjNzggbmV3IGVudHJ5IixjLGFbY10pKTt2YXIgbD1jKyItIithW2NdO28uaW5mbygiYWJjNzggbmV3IGxpbmsgaWQgdG8gYmUgdXNlZCBpcyIsYyxsLGFbY10pO3ZhciBoPSJMUy0iK3Muc3RhcnQsZj0iTEUtIitzLmVuZCxkPXtzdHlsZToiIixsYWJlbFN0eWxlOiIifTtzd2l0Y2goZC5taW5sZW49cy5sZW5ndGh8fDEsImFycm93X29wZW4iPT09cy50eXBlP2QuYXJyb3doZWFkPSJub25lIjpkLmFycm93aGVhZD0ibm9ybWFsIixkLmFycm93VHlwZVN0YXJ0PSJhcnJvd19vcGVuIixkLmFycm93VHlwZUVuZD0iYXJyb3dfb3BlbiIscy50eXBlKXtjYXNlImRvdWJsZV9hcnJvd19jcm9zcyI6ZC5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY3Jvc3MiO2Nhc2UiYXJyb3dfY3Jvc3MiOmQuYXJyb3dUeXBlRW5kPSJhcnJvd19jcm9zcyI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfcG9pbnQiOmQuYXJyb3dUeXBlU3RhcnQ9ImFycm93X3BvaW50IjtjYXNlImFycm93X3BvaW50IjpkLmFycm93VHlwZUVuZD0iYXJyb3dfcG9pbnQiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X2NpcmNsZSI6ZC5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY2lyY2xlIjtjYXNlImFycm93X2NpcmNsZSI6ZC5hcnJvd1R5cGVFbmQ9ImFycm93X2NpcmNsZSJ9dmFyIHA9IiIseT0iIjtzd2l0Y2gocy5zdHJva2Upe2Nhc2Uibm9ybWFsIjpwPSJmaWxsOm5vbmU7Iix2b2lkIDAhPT1uJiYocD1uKSx2b2lkIDAhPT1yJiYoeT1yKSxkLnRoaWNrbmVzcz0ibm9ybWFsIixkLnBhdHRlcm49InNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6ZC50aGlja25lc3M9Im5vcm1hbCIsZC5wYXR0ZXJuPSJkb3R0ZWQiLGQuc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOmQudGhpY2tuZXNzPSJ0aGljayIsZC5wYXR0ZXJuPSJzb2xpZCIsZC5zdHlsZT0ic3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmU7In1pZih2b2lkIDAhPT1zLnN0eWxlKXt2YXIgZz1VdChzLnN0eWxlKTtwPWcuc3R5bGUseT1nLmxhYmVsU3R5bGV9ZC5zdHlsZT1kLnN0eWxlKz1wLGQubGFiZWxTdHlsZT1kLmxhYmVsU3R5bGUrPXksdm9pZCAwIT09cy5pbnRlcnBvbGF0ZT9kLmN1cnZlPVl0KHMuaW50ZXJwb2xhdGUsdS5jdXJ2ZUxpbmVhcik6dm9pZCAwIT09dC5kZWZhdWx0SW50ZXJwb2xhdGU/ZC5jdXJ2ZT1ZdCh0LmRlZmF1bHRJbnRlcnBvbGF0ZSx1LmN1cnZlTGluZWFyKTpkLmN1cnZlPVl0KHRpLmN1cnZlLHUuY3VydmVMaW5lYXIpLHZvaWQgMD09PXMudGV4dD92b2lkIDAhPT1zLnN0eWxlJiYoZC5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihkLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixkLmxhYmVscG9zPSJjIiksZC5sYWJlbFR5cGU9InRleHQiLGQubGFiZWw9cy50ZXh0LnJlcGxhY2UobnQubGluZUJyZWFrUmVnZXgsIlxuIiksdm9pZCAwPT09cy5zdHlsZSYmKGQuc3R5bGU9ZC5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7IiksZC5sYWJlbFN0eWxlPWQubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpLGQuaWQ9bCxkLmNsYXNzZXM9ImZsb3djaGFydC1saW5rICIraCsiICIrZixlLnNldEVkZ2Uocy5zdGFydCxzLmVuZCxkLGkpfSkpfSxyaT1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKXRpW2Vbbl1dPXRbZVtuXV19LGlpPWZ1bmN0aW9uKHQsZSl7by5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpLEFyLmNsZWFyKCksQXIuc2V0R2VuKCJnZW4tMiIpO3ZhciBuPU9yLmEucGFyc2VyO24ueXk9QXIsbi5wYXJzZSh0KTt2YXIgcj1Bci5nZXREaXJlY3Rpb24oKTt2b2lkIDA9PT1yJiYocj0iVEQiKTt2YXIgaSxhPWhlKCkuZmxvd2NoYXJ0LHM9YS5ub2RlU3BhY2luZ3x8NTAsYz1hLnJhbmtTcGFjaW5nfHw1MCxsPW5ldyBMZS5hLkdyYXBoKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cixub2Rlc2VwOnMscmFua3NlcDpjLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLGg9QXIuZ2V0U3ViR3JhcGhzKCk7by5pbmZvKCJTdWJncmFwaHMgLSAiLGgpO2Zvcih2YXIgZj1oLmxlbmd0aC0xO2Y+PTA7Zi0tKWk9aFtmXSxvLmluZm8oIlN1YmdyYXBoIC0gIixpKSxBci5hZGRWZXJ0ZXgoaS5pZCxpLnRpdGxlLCJncm91cCIsdm9pZCAwLGkuY2xhc3NlcyxpLmRpcik7dmFyIGQ9QXIuZ2V0VmVydGljZXMoKSxwPUFyLmdldEVkZ2VzKCk7by5pbmZvKHApO3ZhciB5PTA7Zm9yKHk9aC5sZW5ndGgtMTt5Pj0wO3ktLSl7aT1oW3ldLE9iamVjdCh1LnNlbGVjdEFsbCkoImNsdXN0ZXIiKS5hcHBlbmQoInRleHQiKTtmb3IodmFyIGc9MDtnPGkubm9kZXMubGVuZ3RoO2crKylvLmluZm8oIlNldHRpbmcgdXAgc3ViZ3JhcGhzIixpLm5vZGVzW2ddLGkuaWQpLGwuc2V0UGFyZW50KGkubm9kZXNbZ10saS5pZCl9ZWkoZCxsLGUpLG5pKHAsbCk7dmFyIG09T2JqZWN0KHUuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKTttLmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpO3ZhciB2PU9iamVjdCh1LnNlbGVjdCkoIiMiK2UrIiBnIik7Um4odixsLFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLGUpO3ZhciBiPWEuZGlhZ3JhbVBhZGRpbmcseD1tLm5vZGUoKS5nZXRCQm94KCksXz14LndpZHRoKzIqYixrPXguaGVpZ2h0KzIqYjtpZihvLmRlYnVnKCJuZXcgVmlld0JveCAwIDAgIi5jb25jYXQoXywiICIpLmNvbmNhdChrKSwidHJhbnNsYXRlKCIuY29uY2F0KGItbC5fbGFiZWwubWFyZ2lueCwiLCAiKS5jb25jYXQoYi1sLl9sYWJlbC5tYXJnaW55LCIpIikpLHRlKG0sayxfLGEudXNlTWF4V2lkdGgpLG0uYXR0cigidmlld0JveCIsIjAgMCAiLmNvbmNhdChfLCIgIikuY29uY2F0KGspKSxtLnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiLmNvbmNhdChiLWwuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KGIteC55LCIpIikpLEFyLmluZGV4Tm9kZXMoInN1YkdyYXBoIit5KSwhYS5odG1sTGFiZWxzKWZvcih2YXIgdz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxUPTA7VDx3Lmxlbmd0aDtUKyspe3ZhciBFPXdbVF0sQz1FLmdldEJCb3goKSxTPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Uy5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxTLnNldEF0dHJpYnV0ZSgicnkiLDApLFMuc2V0QXR0cmlidXRlKCJ3aWR0aCIsQy53aWR0aCksUy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsQy5oZWlnaHQpLEUuaW5zZXJ0QmVmb3JlKFMsRS5maXJzdENoaWxkKX1PYmplY3Qua2V5cyhkKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1kW3RdO2lmKG4ubGluayl7dmFyIHI9T2JqZWN0KHUuc2VsZWN0KSgiIyIrZSsnIFtpZD0iJyt0KyciXScpO2lmKHIpe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhIik7aS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjbGFzcyIsbi5jbGFzc2VzLmpvaW4oIiAiKSksaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJocmVmIixuLmxpbmspLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSxuLmxpbmtUYXJnZXQmJmkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IixuLmxpbmtUYXJnZXQpO3ZhciBhPXIuaW5zZXJ0KChmdW5jdGlvbigpe3JldHVybiBpfSksIjpmaXJzdC1jaGlsZCIpLG89ci5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKTtvJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gby5ub2RlKCl9KSk7dmFyIHM9ci5zZWxlY3QoIi5sYWJlbCIpO3MmJmEuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBzLm5vZGUoKX0pKX19fSkpfTtmdW5jdGlvbiBhaSh0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gb2kodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybjtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIG9pKHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpOyJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKTtpZigiTWFwIj09PW58fCJTZXQiPT09bilyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZigiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBvaSh0LGUpfSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBvaSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfXZhciBzaSxjaSx1aT0iIixsaT0iIixoaT0iIixmaT1bXSxkaT0iIixwaT1bXSx5aT1bXSxnaT0iIixtaT1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl0sdmk9W10sYmk9ITEseGk9ITEsX2k9MCxraT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuaXNvV2Vla2RheSgpPj02JiZuLmluZGV4T2YoIndlZWtlbmRzIik+PTB8fChuLmluZGV4T2YodC5mb3JtYXQoImRkZGQiKS50b0xvd2VyQ2FzZSgpKT49MHx8bi5pbmRleE9mKHQuZm9ybWF0KGUudHJpbSgpKSk+PTApfSx3aT1mdW5jdGlvbih0LGUsbil7aWYobi5sZW5ndGgmJiF0Lm1hbnVhbEVuZFRpbWUpe3ZhciByPWkoKSh0LnN0YXJ0VGltZSxlLCEwKTtyLmFkZCgxLCJkIik7dmFyIGE9aSgpKHQuZW5kVGltZSxlLCEwKSxvPVRpKHIsYSxlLG4pO3QuZW5kVGltZT1hLnRvRGF0ZSgpLHQucmVuZGVyRW5kVGltZT1vfX0sVGk9ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPSExLGE9bnVsbDt0PD1lOylpfHwoYT1lLnRvRGF0ZSgpKSwoaT1raSh0LG4scikpJiZlLmFkZCgxLCJkIiksdC5hZGQoMSwiZCIpO3JldHVybiBhfSxFaT1mdW5jdGlvbih0LGUsbil7bj1uLnRyaW0oKTt2YXIgcj0vXmFmdGVyXHMrKFtcZFx3LSBdKykvLmV4ZWMobi50cmltKCkpO2lmKG51bGwhPT1yKXt2YXIgYT1udWxsO2lmKHJbMV0uc3BsaXQoIiAiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1CaSh0KTt2b2lkIDAhPT1lJiYoYT9lLmVuZFRpbWU+YS5lbmRUaW1lJiYoYT1lKTphPWUpfSkpLGEpcmV0dXJuIGEuZW5kVGltZTt2YXIgcz1uZXcgRGF0ZTtyZXR1cm4gcy5zZXRIb3VycygwLDAsMCwwKSxzfXZhciBjPWkoKShuLGUudHJpbSgpLCEwKTtyZXR1cm4gYy5pc1ZhbGlkKCk/Yy50b0RhdGUoKTooby5kZWJ1ZygiSW52YWxpZCBkYXRlOiIrbiksby5kZWJ1ZygiV2l0aCBkYXRlIGZvcm1hdDoiK2UudHJpbSgpKSxuZXcgRGF0ZSl9LENpPWZ1bmN0aW9uKHQsZSl7aWYobnVsbCE9PXQpc3dpdGNoKHRbMl0pe2Nhc2UicyI6ZS5hZGQodFsxXSwic2Vjb25kcyIpO2JyZWFrO2Nhc2UibSI6ZS5hZGQodFsxXSwibWludXRlcyIpO2JyZWFrO2Nhc2UiaCI6ZS5hZGQodFsxXSwiaG91cnMiKTticmVhaztjYXNlImQiOmUuYWRkKHRbMV0sImRheXMiKTticmVhaztjYXNlInciOmUuYWRkKHRbMV0sIndlZWtzIil9cmV0dXJuIGUudG9EYXRlKCl9LFNpPWZ1bmN0aW9uKHQsZSxuLHIpe3I9cnx8ITEsbj1uLnRyaW0oKTt2YXIgYT1pKCkobixlLnRyaW0oKSwhMCk7cmV0dXJuIGEuaXNWYWxpZCgpPyhyJiZhLmFkZCgxLCJkIiksYS50b0RhdGUoKSk6Q2koL14oW1xkXSspKFt3ZGhtc10pLy5leGVjKG4udHJpbSgpKSxpKCkodCkpfSxBaT0wLE1pPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10PyJ0YXNrIisoQWkrPTEpOnR9LE9pPVtdLE5pPXt9LEJpPWZ1bmN0aW9uKHQpe3ZhciBlPU5pW3RdO3JldHVybiBPaVtlXX0sRGk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ZnVuY3Rpb24odCl7dmFyIGU9T2lbdF0sbj0iIjtzd2l0Y2goT2lbdF0ucmF3LnN0YXJ0VGltZS50eXBlKXtjYXNlInByZXZUYXNrRW5kIjp2YXIgcj1CaShlLnByZXZUYXNrSWQpO2Uuc3RhcnRUaW1lPXIuZW5kVGltZTticmVhaztjYXNlImdldFN0YXJ0RGF0ZSI6KG49RWkoMCx1aSxPaVt0XS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSkpJiYoT2lbdF0uc3RhcnRUaW1lPW4pfXJldHVybiBPaVt0XS5zdGFydFRpbWUmJihPaVt0XS5lbmRUaW1lPVNpKE9pW3RdLnN0YXJ0VGltZSx1aSxPaVt0XS5yYXcuZW5kVGltZS5kYXRhLGJpKSxPaVt0XS5lbmRUaW1lJiYoT2lbdF0ucHJvY2Vzc2VkPSEwLE9pW3RdLm1hbnVhbEVuZFRpbWU9aSgpKE9pW3RdLnJhdy5lbmRUaW1lLmRhdGEsIllZWVktTU0tREQiLCEwKS5pc1ZhbGlkKCksd2koT2lbdF0sdWksZmkpKSksT2lbdF0ucHJvY2Vzc2VkfSxlPSEwLG49MDtuPE9pLmxlbmd0aDtuKyspdChuKSxlPWUmJk9pW25dLnByb2Nlc3NlZDtyZXR1cm4gZX0sTGk9ZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49QmkodCk7dm9pZCAwIT09biYmbi5jbGFzc2VzLnB1c2goZSl9KSl9LElpPWZ1bmN0aW9uKHQsZSl7dmkucHVzaCgoZnVuY3Rpb24oKXt2YXIgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWQ9IicuY29uY2F0KHQsJyJdJykpO251bGwhPT1uJiZuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXtlKCl9KSl9KSksdmkucHVzaCgoZnVuY3Rpb24oKXt2YXIgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWQ9IicuY29uY2F0KHQsJy10ZXh0Il0nKSk7bnVsbCE9PW4mJm4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe2UoKX0pKX0pKX0sUmk9e3BhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXt5Yy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIGhlKCkuZ2FudHR9LGNsZWFyOmZ1bmN0aW9uKCl7cGk9W10seWk9W10sZ2k9IiIsdmk9W10sZGk9IiIsQWk9MCxzaT12b2lkIDAsY2k9dm9pZCAwLE9pPVtdLHVpPSIiLGxpPSIiLGhpPSIiLGZpPVtdLGJpPSExLHhpPSExLF9pPTB9LHNldERhdGVGb3JtYXQ6ZnVuY3Rpb24odCl7dWk9dH0sZ2V0RGF0ZUZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB1aX0sZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXM6ZnVuY3Rpb24oKXtiaT0hMH0sZW5kRGF0ZXNBcmVJbmNsdXNpdmU6ZnVuY3Rpb24oKXtyZXR1cm4gYml9LGVuYWJsZVRvcEF4aXM6ZnVuY3Rpb24oKXt4aT0hMH0sdG9wQXhpc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4geGl9LHNldEF4aXNGb3JtYXQ6ZnVuY3Rpb24odCl7bGk9dH0sZ2V0QXhpc0Zvcm1hdDpmdW5jdGlvbigpe3JldHVybiBsaX0sc2V0VG9kYXlNYXJrZXI6ZnVuY3Rpb24odCl7aGk9dH0sZ2V0VG9kYXlNYXJrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gaGl9LHNldFRpdGxlOmZ1bmN0aW9uKHQpe2RpPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIGRpfSxhZGRTZWN0aW9uOmZ1bmN0aW9uKHQpe2dpPXQscGkucHVzaCh0KX0sZ2V0U2VjdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gcGl9LGdldFRhc2tzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PURpKCksZT0wOyF0JiZlPDEwOyl0PURpKCksZSsrO3JldHVybiB5aT1PaX0sYWRkVGFzazpmdW5jdGlvbih0LGUpe3ZhciBuPXtzZWN0aW9uOmdpLHR5cGU6Z2kscHJvY2Vzc2VkOiExLG1hbnVhbEVuZFRpbWU6ITEscmVuZGVyRW5kVGltZTpudWxsLHJhdzp7ZGF0YTplfSx0YXNrOnQsY2xhc3NlczpbXX0scj1mdW5jdGlvbih0LGUpe3ZhciBuPSgiOiI9PT1lLnN1YnN0cigwLDEpP2Uuc3Vic3RyKDEsZS5sZW5ndGgpOmUpLnNwbGl0KCIsIikscj17fTtGaShuLHIsbWkpO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKW5baV09bltpXS50cmltKCk7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6ci5pZD1NaSgpLHIuc3RhcnRUaW1lPXt0eXBlOiJwcmV2VGFza0VuZCIsaWQ6dH0sci5lbmRUaW1lPXtkYXRhOm5bMF19O2JyZWFrO2Nhc2UgMjpyLmlkPU1pKCksci5zdGFydFRpbWU9e3R5cGU6ImdldFN0YXJ0RGF0ZSIsc3RhcnREYXRhOm5bMF19LHIuZW5kVGltZT17ZGF0YTpuWzFdfTticmVhaztjYXNlIDM6ci5pZD1NaShuWzBdKSxyLnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6blsxXX0sci5lbmRUaW1lPXtkYXRhOm5bMl19fXJldHVybiByfShjaSxlKTtuLnJhdy5zdGFydFRpbWU9ci5zdGFydFRpbWUsbi5yYXcuZW5kVGltZT1yLmVuZFRpbWUsbi5pZD1yLmlkLG4ucHJldlRhc2tJZD1jaSxuLmFjdGl2ZT1yLmFjdGl2ZSxuLmRvbmU9ci5kb25lLG4uY3JpdD1yLmNyaXQsbi5taWxlc3RvbmU9ci5taWxlc3RvbmUsbi5vcmRlcj1faSxfaSsrO3ZhciBpPU9pLnB1c2gobik7Y2k9bi5pZCxOaVtuLmlkXT1pLTF9LGZpbmRUYXNrQnlJZDpCaSxhZGRUYXNrT3JnOmZ1bmN0aW9uKHQsZSl7dmFyIG49e3NlY3Rpb246Z2ksdHlwZTpnaSxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfSxyPWZ1bmN0aW9uKHQsZSl7dmFyIG49KCI6Ij09PWUuc3Vic3RyKDAsMSk/ZS5zdWJzdHIoMSxlLmxlbmd0aCk6ZSkuc3BsaXQoIiwiKSxyPXt9O0ZpKG4scixtaSk7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspblthXT1uW2FdLnRyaW0oKTt2YXIgbz0iIjtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTpyLmlkPU1pKCksci5zdGFydFRpbWU9dC5lbmRUaW1lLG89blswXTticmVhaztjYXNlIDI6ci5pZD1NaSgpLHIuc3RhcnRUaW1lPUVpKDAsdWksblswXSksbz1uWzFdO2JyZWFrO2Nhc2UgMzpyLmlkPU1pKG5bMF0pLHIuc3RhcnRUaW1lPUVpKDAsdWksblsxXSksbz1uWzJdfXJldHVybiBvJiYoci5lbmRUaW1lPVNpKHIuc3RhcnRUaW1lLHVpLG8sYmkpLHIubWFudWFsRW5kVGltZT1pKCkobywiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSx3aShyLHVpLGZpKSkscn0oc2ksZSk7bi5zdGFydFRpbWU9ci5zdGFydFRpbWUsbi5lbmRUaW1lPXIuZW5kVGltZSxuLmlkPXIuaWQsbi5hY3RpdmU9ci5hY3RpdmUsbi5kb25lPXIuZG9uZSxuLmNyaXQ9ci5jcml0LG4ubWlsZXN0b25lPXIubWlsZXN0b25lLHNpPW4seWkucHVzaChuKX0sc2V0RXhjbHVkZXM6ZnVuY3Rpb24odCl7Zmk9dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sZ2V0RXhjbHVkZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZml9LHNldENsaWNrRXZlbnQ6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4pe2lmKCJsb29zZSI9PT1oZSgpLnNlY3VyaXR5TGV2ZWwmJnZvaWQgMCE9PWUpe3ZhciByPVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7cj1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLnRyaW0oKTsnIic9PT1hLmNoYXJBdCgwKSYmJyInPT09YS5jaGFyQXQoYS5sZW5ndGgtMSkmJihhPWEuc3Vic3RyKDEsYS5sZW5ndGgtMikpLHJbaV09YX19MD09PXIubGVuZ3RoJiZyLnB1c2godCksdm9pZCAwIT09QmkodCkmJklpKHQsKGZ1bmN0aW9uKCl7bmUucnVuRnVuYy5hcHBseShuZSxbZV0uY29uY2F0KGFpKHIpKSl9KSl9fSh0LGUsbil9KSksTGkodCwiY2xpY2thYmxlIil9LHNldExpbms6ZnVuY3Rpb24odCxlKXt2YXIgbj1lOyJsb29zZSIhPT1oZSgpLnNlY3VyaXR5TGV2ZWwmJihuPU9iamVjdChHLnNhbml0aXplVXJsKShlKSksdC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PUJpKHQpJiZJaSh0LChmdW5jdGlvbigpe3dpbmRvdy5vcGVuKG4sIl9zZWxmIil9KSl9KSksTGkodCwiY2xpY2thYmxlIil9LGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24odCl7dmkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSh0KX0pKX0sZHVyYXRpb25Ub0RhdGU6Q2l9O2Z1bmN0aW9uIEZpKHQsZSxuKXtmb3IodmFyIHI9ITA7cjspcj0hMSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW5ldyBSZWdFeHAoIl5cXHMqIituKyJcXHMqJCIpO3RbMF0ubWF0Y2goaSkmJihlW25dPSEwLHQuc2hpZnQoMSkscj0hMCl9KSl9dmFyIFBpPW4oMjQpLGppPW4ubihQaSk7UGkucGFyc2VyLnl5PVJpO3ZhciBZaSx6aT1mdW5jdGlvbigpe30sVWk9ZnVuY3Rpb24odCxlKXt2YXIgbj1oZSgpLmdhbnR0O1BpLnBhcnNlci55eS5jbGVhcigpLFBpLnBhcnNlci5wYXJzZSh0KTt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTt2b2lkIDA9PT0oWWk9ci5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoKSYmKFlpPTEyMDApLHZvaWQgMCE9PW4udXNlV2lkdGgmJihZaT1uLnVzZVdpZHRoKTt2YXIgaT1QaS5wYXJzZXIueXkuZ2V0VGFza3MoKSxhPWkubGVuZ3RoKihuLmJhckhlaWdodCtuLmJhckdhcCkrMipuLnRvcFBhZGRpbmc7ci5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCIwIDAgIitZaSsiICIrYSk7Zm9yKHZhciBvPU9iamVjdCh1LnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSkscz1PYmplY3QodS5zY2FsZVRpbWUpKCkuZG9tYWluKFtPYmplY3QodS5taW4pKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN0YXJ0VGltZX0pKSxPYmplY3QodS5tYXgpKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZFRpbWV9KSldKS5yYW5nZVJvdW5kKFswLFlpLW4ubGVmdFBhZGRpbmctbi5yaWdodFBhZGRpbmddKSxjPVtdLGw9MDtsPGkubGVuZ3RoO2wrKyljLnB1c2goaVtsXS50eXBlKTt2YXIgaD1jO2Z1bmN0aW9uIGYodCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49e307ZTspblt0Wy0tZV1dPShuW3RbZV1dfHwwKSsxO3JldHVybiBufWM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LG49W10scj0wLGk9dC5sZW5ndGg7cjxpOysrcillLmhhc093blByb3BlcnR5KHRbcl0pfHwoZVt0W3JdXT0hMCxuLnB1c2godFtyXSkpO3JldHVybiBufShjKSxpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5zdGFydFRpbWUscj1lLnN0YXJ0VGltZSxpPTA7cmV0dXJuIG4+cj9pPTE6bjxyJiYoaT0tMSksaX0pKSxmdW5jdGlvbih0LGUscil7dmFyIGk9bi5iYXJIZWlnaHQsYT1pK24uYmFyR2FwLGw9bi50b3BQYWRkaW5nLGQ9bi5sZWZ0UGFkZGluZztPYmplY3QodS5zY2FsZUxpbmVhcikoKS5kb21haW4oWzAsYy5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKHUuaW50ZXJwb2xhdGVIY2wpOyhmdW5jdGlvbih0LGUscixpKXt2YXIgYT1PYmplY3QodS5heGlzQm90dG9tKShzKS50aWNrU2l6ZSgtaStlK24uZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoT2JqZWN0KHUudGltZUZvcm1hdCkoUGkucGFyc2VyLnl5LmdldEF4aXNGb3JtYXQoKXx8bi5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7aWYoby5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsICIrKGktNTApKyIpIikuY2FsbChhKS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpLFJpLnRvcEF4aXNFbmFibGVkKCl8fG4udG9wQXhpcyl7dmFyIGM9T2JqZWN0KHUuYXhpc1RvcCkocykudGlja1NpemUoLWkrZStuLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KE9iamVjdCh1LnRpbWVGb3JtYXQpKFBpLnBhcnNlci55eS5nZXRBeGlzRm9ybWF0KCl8fG4uYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO28uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdCsiLCAiK2UrIikiKS5jYWxsKGMpLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApfX0pKGQsbCwwLHIpLGZ1bmN0aW9uKHQsZSxyLGksYSx1LGwpe28uYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLChmdW5jdGlvbih0LG4pe3JldHVybiB0Lm9yZGVyKmUrci0yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gbC1uLnJpZ2h0UGFkZGluZy8yfSkpLmF0dHIoImhlaWdodCIsZSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKylpZih0LnR5cGU9PT1jW2VdKXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK2Ulbi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uIHNlY3Rpb24wIn0pKTt2YXIgaD1vLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEodCkuZW50ZXIoKTtoLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubWlsZXN0b25lP3ModC5zdGFydFRpbWUpK2krLjUqKHModC5lbmRUaW1lKS1zKHQuc3RhcnRUaW1lKSktLjUqYTpzKHQuc3RhcnRUaW1lKStpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LG4pe3JldHVybiB0Lm9yZGVyKmUrcn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1pbGVzdG9uZT9hOnModC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpLXModC5zdGFydFRpbWUpfSkpLmF0dHIoImhlaWdodCIsYSkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG49dC5vcmRlciwocyh0LnN0YXJ0VGltZSkraSsuNSoocyh0LmVuZFRpbWUpLXModC5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisobiplK3IrLjUqYSkudG9TdHJpbmcoKSsicHgifSkpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9IiI7dC5jbGFzc2VzLmxlbmd0aD4wJiYoZT10LmNsYXNzZXMuam9pbigiICIpKTtmb3IodmFyIHI9MCxpPTA7aTxjLmxlbmd0aDtpKyspdC50eXBlPT09Y1tpXSYmKHI9aSVuLm51bWJlclNlY3Rpb25TdHlsZXMpO3ZhciBhPSIiO3JldHVybiB0LmFjdGl2ZT90LmNyaXQ/YSs9IiBhY3RpdmVDcml0IjphPSIgYWN0aXZlIjp0LmRvbmU/YT10LmNyaXQ/IiBkb25lQ3JpdCI6IiBkb25lIjp0LmNyaXQmJihhKz0iIGNyaXQiKSwwPT09YS5sZW5ndGgmJihhPSIgdGFzayIpLHQubWlsZXN0b25lJiYoYT0iIG1pbGVzdG9uZSAiK2EpLGErPXIsInRhc2siKyhhKz0iICIrZSl9KSksaC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKyItdGV4dCJ9KSkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFza30pKS5hdHRyKCJmb250LXNpemUiLG4uZm9udFNpemUpLmF0dHIoIngiLChmdW5jdGlvbih0KXt2YXIgZT1zKHQuc3RhcnRUaW1lKSxyPXModC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpO3QubWlsZXN0b25lJiYoZSs9LjUqKHModC5lbmRUaW1lKS1zKHQuc3RhcnRUaW1lKSktLjUqYSksdC5taWxlc3RvbmUmJihyPWUrYSk7dmFyIG89dGhpcy5nZXRCQm94KCkud2lkdGg7cmV0dXJuIG8+ci1lP3IrbysxLjUqbi5sZWZ0UGFkZGluZz5sP2UraS01OnIraSs1OihyLWUpLzIrZStpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LGkpe3JldHVybiB0Lm9yZGVyKmUrbi5iYXJIZWlnaHQvMisobi5mb250U2l6ZS8yLTIpK3J9KSkuYXR0cigidGV4dC1oZWlnaHQiLGEpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9cyh0LnN0YXJ0VGltZSkscj1zKHQuZW5kVGltZSk7dC5taWxlc3RvbmUmJihyPWUrYSk7dmFyIGk9dGhpcy5nZXRCQm94KCkud2lkdGgsbz0iIjt0LmNsYXNzZXMubGVuZ3RoPjAmJihvPXQuY2xhc3Nlcy5qb2luKCIgIikpO2Zvcih2YXIgdT0wLGg9MDtoPGMubGVuZ3RoO2grKyl0LnR5cGU9PT1jW2hdJiYodT1oJW4ubnVtYmVyU2VjdGlvblN0eWxlcyk7dmFyIGY9IiI7cmV0dXJuIHQuYWN0aXZlJiYoZj10LmNyaXQ/ImFjdGl2ZUNyaXRUZXh0Iit1OiJhY3RpdmVUZXh0Iit1KSx0LmRvbmU/Zj10LmNyaXQ/ZisiIGRvbmVDcml0VGV4dCIrdTpmKyIgZG9uZVRleHQiK3U6dC5jcml0JiYoZj1mKyIgY3JpdFRleHQiK3UpLHQubWlsZXN0b25lJiYoZis9IiBtaWxlc3RvbmVUZXh0IiksaT5yLWU/citpKzEuNSpuLmxlZnRQYWRkaW5nPmw/bysiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlIit1KyIgIitmOm8rIiB0YXNrVGV4dE91dHNpZGVSaWdodCB0YXNrVGV4dE91dHNpZGUiK3UrIiAiK2YrIiB3aWR0aC0iK2k6bysiIHRhc2tUZXh0IHRhc2tUZXh0Iit1KyIgIitmKyIgd2lkdGgtIitpfSkpfSh0LGEsbCxkLGksMCxlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTAsYT0wO2E8Yy5sZW5ndGg7YSsrKXJbYV09W2NbYV0sKHM9Y1thXSx1PWgsZih1KVtzXXx8MCldO3ZhciBzLHU7by5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHIpLmVudGVyKCkuYXBwZW5kKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnNwbGl0KG50LmxpbmVCcmVha1JlZ2V4KSxuPS0oZS5sZW5ndGgtMSkvMixyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7ci5zZXRBdHRyaWJ1dGUoImR5IixuKyJlbSIpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTthLnNldEF0dHJpYnV0ZSgiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGEuc2V0QXR0cmlidXRlKCJ4IiwiMTAiKSxpPjAmJmEuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLGEudGV4dENvbnRlbnQ9ZVtpXSxyLmFwcGVuZENoaWxkKGEpfXJldHVybiByfSkpLmF0dHIoIngiLDEwKS5hdHRyKCJ5IiwoZnVuY3Rpb24obixhKXtpZighKGE+MCkpcmV0dXJuIG5bMV0qdC8yK2U7Zm9yKHZhciBvPTA7bzxhO28rKylyZXR1cm4gaSs9clthLTFdWzFdLG5bMV0qdC8yK2kqdCtlfSkpLmF0dHIoImZvbnQtc2l6ZSIsbi5zZWN0aW9uRm9udFNpemUpLmF0dHIoImZvbnQtc2l6ZSIsbi5zZWN0aW9uRm9udFNpemUpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspaWYodFswXT09PWNbZV0pcmV0dXJuInNlY3Rpb25UaXRsZSBzZWN0aW9uVGl0bGUiK2Ulbi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uVGl0bGUifSkpfShhLGwpLGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPVJpLmdldFRvZGF5TWFya2VyKCk7aWYoIm9mZiI9PT1hKXJldHVybjt2YXIgYz1vLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidG9kYXkiKSx1PW5ldyBEYXRlLGw9Yy5hcHBlbmQoImxpbmUiKTtsLmF0dHIoIngxIixzKHUpK3QpLmF0dHIoIngyIixzKHUpK3QpLmF0dHIoInkxIixuLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJ5MiIsaS1uLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRvZGF5IiksIiIhPT1hJiZsLmF0dHIoInN0eWxlIixhLnJlcGxhY2UoLywvZywiOyIpKX0oZCwwLDAscil9KGksWWksYSksdGUobyxhLFlpLG4udXNlTWF4V2lkdGgpLG8uYXBwZW5kKCJ0ZXh0IikudGV4dChQaS5wYXJzZXIueXkuZ2V0VGl0bGUoKSkuYXR0cigieCIsWWkvMikuYXR0cigieSIsbi50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKX0sJGk9e30scWk9bnVsbCxXaT17bWFzdGVyOnFpfSxIaT0ibWFzdGVyIixWaT0iTFIiLEdpPTA7ZnVuY3Rpb24gWGkoKXtyZXR1cm4gSHQoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gWmkodCxlKXtmb3Ioby5kZWJ1ZygiRW50ZXJpbmcgaXNmYXN0Zm9yd2FyZGFibGU6Iix0LmlkLGUuaWQpO3Quc2VxPD1lLnNlcSYmdCE9PWUmJm51bGwhPWUucGFyZW50Oyl7aWYoQXJyYXkuaXNBcnJheShlLnBhcmVudCkpcmV0dXJuIG8uZGVidWcoIkluIG1lcmdlIGNvbW1pdDoiLGUucGFyZW50KSxaaSh0LCRpW2UucGFyZW50WzBdXSl8fFppKHQsJGlbZS5wYXJlbnRbMV1dKTtlPSRpW2UucGFyZW50XX1yZXR1cm4gby5kZWJ1Zyh0LmlkLGUuaWQpLHQuaWQ9PT1lLmlkfXZhciBLaT17fTtmdW5jdGlvbiBRaSh0LGUsbil7dmFyIHI9dC5pbmRleE9mKGUpOy0xPT09cj90LnB1c2gobik6dC5zcGxpY2UociwxLG4pfWZ1bmN0aW9uIEppKHQpe3ZhciBlPXQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNlcT5lLnNlcT90OmV9KSx0WzBdKSxuPSIiO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7bis9dD09PWU/Ilx0KiI6Ilx0fCJ9KSk7dmFyIHIsaSxhLHM9W24sZS5pZCxlLnNlcV07Zm9yKHZhciBjIGluIFdpKVdpW2NdPT09ZS5pZCYmcy5wdXNoKGMpO2lmKG8uZGVidWcocy5qb2luKCIgIikpLEFycmF5LmlzQXJyYXkoZS5wYXJlbnQpKXt2YXIgdT0kaVtlLnBhcmVudFswXV07UWkodCxlLHUpLHQucHVzaCgkaVtlLnBhcmVudFsxXV0pfWVsc2V7aWYobnVsbD09ZS5wYXJlbnQpcmV0dXJuO3ZhciBsPSRpW2UucGFyZW50XTtRaSh0LGUsbCl9cj10LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9LGE9T2JqZWN0LmNyZWF0ZShudWxsKSxKaSh0PXIucmVkdWNlKChmdW5jdGlvbih0LGUpe3ZhciBuPWkoZSk7cmV0dXJuIGFbbl18fChhW25dPSEwLHQucHVzaChlKSksdH0pLFtdKSl9dmFyIHRhLGVhPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmtleXMoJGkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuICRpW3RdfSkpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe28uZGVidWcodC5pZCl9KSksdC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnNlcS10LnNlcX0pKSx0fSxuYT17c2V0RGlyZWN0aW9uOmZ1bmN0aW9uKHQpe1ZpPXR9LHNldE9wdGlvbnM6ZnVuY3Rpb24odCl7by5kZWJ1Zygib3B0aW9ucyBzdHIiLHQpLHQ9KHQ9dCYmdC50cmltKCkpfHwie30iO3RyeXtLaT1KU09OLnBhcnNlKHQpfWNhdGNoKHQpe28uZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgZ2l0R3JhcGggb3B0aW9ucyIsdC5tZXNzYWdlKX19LGdldE9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gS2l9LGNvbW1pdDpmdW5jdGlvbih0KXt2YXIgZT17aWQ6WGkoKSxtZXNzYWdlOnQsc2VxOkdpKysscGFyZW50Om51bGw9PXFpP251bGw6cWkuaWR9O3FpPWUsJGlbZS5pZF09ZSxXaVtIaV09ZS5pZCxvLmRlYnVnKCJpbiBwdXNoQ29tbWl0ICIrZS5pZCl9LGJyYW5jaDpmdW5jdGlvbih0KXtXaVt0XT1udWxsIT1xaT9xaS5pZDpudWxsLG8uZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpfSxtZXJnZTpmdW5jdGlvbih0KXt2YXIgZT0kaVtXaVtIaV1dLG49JGlbV2lbdF1dO2lmKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc2VxPmUuc2VxJiZaaShlLHQpfShlLG4pKW8uZGVidWcoIkFscmVhZHkgbWVyZ2VkIik7ZWxzZXtpZihaaShlLG4pKVdpW0hpXT1XaVt0XSxxaT0kaVtXaVtIaV1dO2Vsc2V7dmFyIHI9e2lkOlhpKCksbWVzc2FnZToibWVyZ2VkIGJyYW5jaCAiK3QrIiBpbnRvICIrSGksc2VxOkdpKysscGFyZW50OltudWxsPT1xaT9udWxsOnFpLmlkLFdpW3RdXX07cWk9ciwkaVtyLmlkXT1yLFdpW0hpXT1yLmlkfW8uZGVidWcoV2kpLG8uZGVidWcoImluIG1lcmdlQnJhbmNoIil9fSxjaGVja291dDpmdW5jdGlvbih0KXtvLmRlYnVnKCJpbiBjaGVja291dCIpO3ZhciBlPVdpW0hpPXRdO3FpPSRpW2VdfSxyZXNldDpmdW5jdGlvbih0KXtvLmRlYnVnKCJpbiByZXNldCIsdCk7dmFyIGU9dC5zcGxpdCgiOiIpWzBdLG49cGFyc2VJbnQodC5zcGxpdCgiOiIpWzFdKSxyPSJIRUFEIj09PWU/cWk6JGlbV2lbZV1dO2ZvcihvLmRlYnVnKHIsbik7bj4wOylpZihuLS0sIShyPSRpW3IucGFyZW50XSkpe3ZhciBpPSJDcml0aWNhbCBlcnJvciAtIHVuaXF1ZSBwYXJlbnQgY29tbWl0IG5vdCBmb3VuZCBkdXJpbmcgcmVzZXQiO3Rocm93IG8uZXJyb3IoaSksaX1xaT1yLFdpW0hpXT1yLmlkfSxwcmV0dHlQcmludDpmdW5jdGlvbigpe28uZGVidWcoJGkpLEppKFtlYSgpWzBdXSl9LGNsZWFyOmZ1bmN0aW9uKCl7JGk9e30sV2k9e21hc3RlcjpxaT1udWxsfSxIaT0ibWFzdGVyIixHaT0wfSxnZXRCcmFuY2hlc0FzT2JqQXJyYXk6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gV2kpdC5wdXNoKHtuYW1lOmUsY29tbWl0OiRpW1dpW2VdXX0pO3JldHVybiB0fSxnZXRCcmFuY2hlczpmdW5jdGlvbigpe3JldHVybiBXaX0sZ2V0Q29tbWl0czpmdW5jdGlvbigpe3JldHVybiAkaX0sZ2V0Q29tbWl0c0FycmF5OmVhLGdldEN1cnJlbnRCcmFuY2g6ZnVuY3Rpb24oKXtyZXR1cm4gSGl9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBWaX0sZ2V0SGVhZDpmdW5jdGlvbigpe3JldHVybiBxaX19LHJhPW4oNzMpLGlhPW4ubihyYSksYWE9e30sb2E9e25vZGVTcGFjaW5nOjE1MCxub2RlRmlsbENvbG9yOiJ5ZWxsb3ciLG5vZGVTdHJva2VXaWR0aDoyLG5vZGVTdHJva2VDb2xvcjoiZ3JleSIsbGluZVN0cm9rZVdpZHRoOjQsYnJhbmNoT2Zmc2V0OjUwLGxpbmVDb2xvcjoiZ3JleSIsbGVmdE1hcmdpbjo1MCxicmFuY2hDb2xvcnM6WyIjNDQyZjc0IiwiIzk4MzM1MSIsIiM2MDk3MzIiLCIjQUE5QTM5Il0sbm9kZVJhZGl1czoxMCxub2RlTGFiZWw6e3dpZHRoOjc1LGhlaWdodDoxMDAseDotMjUseTowfX0sc2E9e307ZnVuY3Rpb24gY2EodCxlLG4scil7dmFyIGk9WXQocix1LmN1cnZlQmFzaXMpLGE9b2EuYnJhbmNoQ29sb3JzW24lb2EuYnJhbmNoQ29sb3JzLmxlbmd0aF0sbz1PYmplY3QodS5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQueCl9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC55KX0pKS5jdXJ2ZShpKTt0LmFwcGVuZCgic3ZnOnBhdGgiKS5hdHRyKCJkIixvKGUpKS5zdHlsZSgic3Ryb2tlIixhKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixvYS5saW5lU3Ryb2tlV2lkdGgpLnN0eWxlKCJmaWxsIiwibm9uZSIpfWZ1bmN0aW9uIHVhKHQsZSl7ZT1lfHx0Lm5vZGUoKS5nZXRCQm94KCk7dmFyIG49dC5ub2RlKCkuZ2V0Q1RNKCk7cmV0dXJue2xlZnQ6bi5lK2UueCpuLmEsdG9wOm4uZitlLnkqbi5kLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fX1mdW5jdGlvbiBsYSh0LGUsbixyLGkpe28uZGVidWcoInN2Z0RyYXdMaW5lRm9yQ29tbWl0czogIixlLG4pO3ZhciBhPXVhKHQuc2VsZWN0KCIjbm9kZS0iK2UrIiBjaXJjbGUiKSkscz11YSh0LnNlbGVjdCgiI25vZGUtIituKyIgY2lyY2xlIikpO3N3aXRjaChyKXtjYXNlIkxSIjppZihhLmxlZnQtcy5sZWZ0Pm9hLm5vZGVTcGFjaW5nKXt2YXIgYz17eDphLmxlZnQtb2Eubm9kZVNwYWNpbmcseTpzLnRvcCtzLmhlaWdodC8yfTtjYSh0LFtjLHt4OnMubGVmdCtzLndpZHRoLHk6cy50b3Arcy5oZWlnaHQvMn1dLGksImxpbmVhciIpLGNhKHQsW3t4OmEubGVmdCx5OmEudG9wK2EuaGVpZ2h0LzJ9LHt4OmEubGVmdC1vYS5ub2RlU3BhY2luZy8yLHk6YS50b3ArYS5oZWlnaHQvMn0se3g6YS5sZWZ0LW9hLm5vZGVTcGFjaW5nLzIseTpjLnl9LGNdLGkpfWVsc2UgY2EodCxbe3g6YS5sZWZ0LHk6YS50b3ArYS5oZWlnaHQvMn0se3g6YS5sZWZ0LW9hLm5vZGVTcGFjaW5nLzIseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtb2Eubm9kZVNwYWNpbmcvMix5OnMudG9wK3MuaGVpZ2h0LzJ9LHt4OnMubGVmdCtzLndpZHRoLHk6cy50b3Arcy5oZWlnaHQvMn1dLGkpO2JyZWFrO2Nhc2UiQlQiOmlmKHMudG9wLWEudG9wPm9hLm5vZGVTcGFjaW5nKXt2YXIgdT17eDpzLmxlZnQrcy53aWR0aC8yLHk6YS50b3ArYS5oZWlnaHQrb2Eubm9kZVNwYWNpbmd9O2NhKHQsW3Use3g6cy5sZWZ0K3Mud2lkdGgvMix5OnMudG9wfV0saSwibGluZWFyIiksY2EodCxbe3g6YS5sZWZ0K2Eud2lkdGgvMix5OmEudG9wK2EuaGVpZ2h0fSx7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3ArYS5oZWlnaHQrb2Eubm9kZVNwYWNpbmcvMn0se3g6cy5sZWZ0K3Mud2lkdGgvMix5OnUueS1vYS5ub2RlU3BhY2luZy8yfSx1XSxpKX1lbHNlIGNhKHQsW3t4OmEubGVmdCthLndpZHRoLzIseTphLnRvcCthLmhlaWdodH0se3g6YS5sZWZ0K2Eud2lkdGgvMix5OmEudG9wK29hLm5vZGVTcGFjaW5nLzJ9LHt4OnMubGVmdCtzLndpZHRoLzIseTpzLnRvcC1vYS5ub2RlU3BhY2luZy8yfSx7eDpzLmxlZnQrcy53aWR0aC8yLHk6cy50b3B9XSxpKX19ZnVuY3Rpb24gaGEodCxlKXtyZXR1cm4gdC5zZWxlY3QoZSkubm9kZSgpLmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gZmEodCxlLG4scil7dmFyIGksYT1PYmplY3Qua2V5cyhhYSkubGVuZ3RoO2lmKCJzdHJpbmciPT10eXBlb2YgZSlkb3tpZihpPWFhW2VdLG8uZGVidWcoImluIHJlbmRlckNvbW1pdEhpc3RvcnkiLGkuaWQsaS5zZXEpLHQuc2VsZWN0KCIjbm9kZS0iK2UpLnNpemUoKT4wKXJldHVybjt0LmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gaGEodCwiI2RlZi1jb21taXQiKX0pKS5hdHRyKCJjbGFzcyIsImNvbW1pdCIpLmF0dHIoImlkIiwoZnVuY3Rpb24oKXtyZXR1cm4ibm9kZS0iK2kuaWR9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24oKXtzd2l0Y2gocil7Y2FzZSJMUiI6cmV0dXJuInRyYW5zbGF0ZSgiKyhpLnNlcSpvYS5ub2RlU3BhY2luZytvYS5sZWZ0TWFyZ2luKSsiLCAiK3RhKm9hLmJyYW5jaE9mZnNldCsiKSI7Y2FzZSJCVCI6cmV0dXJuInRyYW5zbGF0ZSgiKyh0YSpvYS5icmFuY2hPZmZzZXQrb2EubGVmdE1hcmdpbikrIiwgIisoYS1pLnNlcSkqb2Eubm9kZVNwYWNpbmcrIikifX0pKS5hdHRyKCJmaWxsIixvYS5ub2RlRmlsbENvbG9yKS5hdHRyKCJzdHJva2UiLG9hLm5vZGVTdHJva2VDb2xvcikuYXR0cigic3Ryb2tlLXdpZHRoIixvYS5ub2RlU3Ryb2tlV2lkdGgpO3ZhciBzPXZvaWQgMDtmb3IodmFyIGMgaW4gbilpZihuW2NdLmNvbW1pdD09PWkpe3M9bltjXTticmVha31zJiYoby5kZWJ1ZygiZm91bmQgYnJhbmNoICIscy5uYW1lKSx0LnNlbGVjdCgiI25vZGUtIitpLmlkKyIgcCIpLmFwcGVuZCgieGh0bWw6c3BhbiIpLmF0dHIoImNsYXNzIiwiYnJhbmNoLWxhYmVsIikudGV4dChzLm5hbWUrIiwgIikpLHQuc2VsZWN0KCIjbm9kZS0iK2kuaWQrIiBwIikuYXBwZW5kKCJ4aHRtbDpzcGFuIikuYXR0cigiY2xhc3MiLCJjb21taXQtaWQiKS50ZXh0KGkuaWQpLCIiIT09aS5tZXNzYWdlJiYiQlQiPT09ciYmdC5zZWxlY3QoIiNub2RlLSIraS5pZCsiIHAiKS5hcHBlbmQoInhodG1sOnNwYW4iKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1tc2ciKS50ZXh0KCIsICIraS5tZXNzYWdlKSxlPWkucGFyZW50fXdoaWxlKGUmJmFhW2VdKTtBcnJheS5pc0FycmF5KGUpJiYoby5kZWJ1ZygiZm91bmQgbWVyZ2UgY29tbW1pdCIsZSksZmEodCxlWzBdLG4sciksdGErKyxmYSh0LGVbMV0sbixyKSx0YS0tKX1mdW5jdGlvbiBkYSh0LGUsbixyKXtmb3Iocj1yfHwwO2Uuc2VxPjAmJiFlLmxpbmVEcmF3bjspInN0cmluZyI9PXR5cGVvZiBlLnBhcmVudD8obGEodCxlLmlkLGUucGFyZW50LG4sciksZS5saW5lRHJhd249ITAsZT1hYVtlLnBhcmVudF0pOkFycmF5LmlzQXJyYXkoZS5wYXJlbnQpJiYobGEodCxlLmlkLGUucGFyZW50WzBdLG4sciksbGEodCxlLmlkLGUucGFyZW50WzFdLG4scisxKSxkYSh0LGFhW2UucGFyZW50WzFdXSxuLHIrMSksZS5saW5lRHJhd249ITAsZT1hYVtlLnBhcmVudFswXV0pfXZhciBwYSx5YT1mdW5jdGlvbih0KXtzYT10fSxnYT1mdW5jdGlvbih0LGUsbil7dHJ5e3ZhciByPWlhLmEucGFyc2VyO3IueXk9bmEsci55eS5jbGVhcigpLG8uZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIix0KyJcbiIsImlkOiIsZSxuKSxyLnBhcnNlKHQrIlxuIiksb2E9T2JqZWN0LmFzc2lnbihvYSxzYSxuYS5nZXRPcHRpb25zKCkpLG8uZGVidWcoImVmZmVjdGl2ZSBvcHRpb25zIixvYSk7dmFyIGk9bmEuZ2V0RGlyZWN0aW9uKCk7YWE9bmEuZ2V0Q29tbWl0cygpO3ZhciBhPW5hLmdldEJyYW5jaGVzQXNPYmpBcnJheSgpOyJCVCI9PT1pJiYob2Eubm9kZUxhYmVsLng9YS5sZW5ndGgqb2EuYnJhbmNoT2Zmc2V0LG9hLm5vZGVMYWJlbC53aWR0aD0iMTAwJSIsb2Eubm9kZUxhYmVsLnk9LTIqb2Eubm9kZVJhZGl1cyk7dmFyIHM9T2JqZWN0KHUuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKTtmb3IodmFyIGMgaW4gZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImciKS5hdHRyKCJpZCIsImRlZi1jb21taXQiKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInIiLG9hLm5vZGVSYWRpdXMpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCksdC5zZWxlY3QoIiNkZWYtY29tbWl0IikuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLG9hLm5vZGVMYWJlbC53aWR0aCkuYXR0cigiaGVpZ2h0IixvYS5ub2RlTGFiZWwuaGVpZ2h0KS5hdHRyKCJ4IixvYS5ub2RlTGFiZWwueCkuYXR0cigieSIsb2Eubm9kZUxhYmVsLnkpLmF0dHIoImNsYXNzIiwibm9kZS1sYWJlbCIpLmF0dHIoInJlcXVpcmVkRmVhdHVyZXMiLCJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiKS5hcHBlbmQoInAiKS5odG1sKCIiKX0ocyksdGE9MSxhKXt2YXIgbD1hW2NdO2ZhKHMsbC5jb21taXQuaWQsYSxpKSxkYShzLGwuY29tbWl0LGkpLHRhKyt9cy5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbigpe3JldHVybiJCVCI9PT1pP09iamVjdC5rZXlzKGFhKS5sZW5ndGgqb2Eubm9kZVNwYWNpbmc6KGEubGVuZ3RoKzEpKm9hLmJyYW5jaE9mZnNldH0pKX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgZ2l0Z3JhcGgiKSxvLmVycm9yKHQubWVzc2FnZSl9fSxtYT0iIix2YT0hMSxiYT17c2V0TWVzc2FnZTpmdW5jdGlvbih0KXtvLmRlYnVnKCJTZXR0aW5nIG1lc3NhZ2UgdG86ICIrdCksbWE9dH0sZ2V0TWVzc2FnZTpmdW5jdGlvbigpe3JldHVybiBtYX0sc2V0SW5mbzpmdW5jdGlvbih0KXt2YT10fSxnZXRJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIHZhfX0seGE9big3NCksX2E9bi5uKHhhKSxrYT17fSx3YT1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtrYVtlXT10W2VdfSkpfSxUYT1mdW5jdGlvbih0LGUsbil7dHJ5e3ZhciByPV9hLmEucGFyc2VyO3IueXk9YmEsby5kZWJ1ZygiUmVuZXJpbmcgaW5mbyBkaWFncmFtXG4iK3QpLHIucGFyc2UodCksby5kZWJ1ZygiUGFyc2VkIGluZm8gZGlhZ3JhbSIpO3ZhciBpPU9iamVjdCh1LnNlbGVjdCkoIiMiK2UpO2kuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwiMzJweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoInYgIituKSxpLmF0dHIoImhlaWdodCIsMTAwKSxpLmF0dHIoIndpZHRoIiw0MDApfWNhdGNoKHQpe28uZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxvLmVycm9yKHQubWVzc2FnZSl9fSxFYT1uKDc1KSxDYT1uLm4oRWEpLFNhPXt9LEFhPSIiLE1hPSExLE9hPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7eWMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoZSgpLnBpZX0sYWRkU2VjdGlvbjpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PVNhW3RdJiYoU2FbdF09ZSxvLmRlYnVnKCJBZGRlZCBuZXcgc2VjdGlvbiA6Iix0KSl9LGdldFNlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIFNhfSxjbGVhbnVwVmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIjoiPT09dC5zdWJzdHJpbmcoMCwxKT8odD10LnN1YnN0cmluZygxKS50cmltKCksTnVtYmVyKHQudHJpbSgpKSk6TnVtYmVyKHQudHJpbSgpKX0sY2xlYXI6ZnVuY3Rpb24oKXtTYT17fSxBYT0iIixNYT0hMX0sc2V0VGl0bGU6ZnVuY3Rpb24odCl7QWE9dH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gQWF9LHNldFNob3dEYXRhOmZ1bmN0aW9uKHQpe01hPXR9LGdldFNob3dEYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIE1hfX0sTmE9aGUoKSxCYT1mdW5jdGlvbih0LGUpe3RyeXtOYT1oZSgpO3ZhciBuPUNhLmEucGFyc2VyO24ueXk9T2Esby5kZWJ1ZygiUmVuZGVyaW5nIGluZm8gZGlhZ3JhbVxuIit0KSxuLnl5LmNsZWFyKCksbi5wYXJzZSh0KSxvLmRlYnVnKCJQYXJzZWQgaW5mbyBkaWFncmFtIik7dmFyIHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7dm9pZCAwPT09KHBhPXIucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCkmJihwYT0xMjAwKSx2b2lkIDAhPT1OYS51c2VXaWR0aCYmKHBhPU5hLnVzZVdpZHRoKSx2b2lkIDAhPT1OYS5waWUudXNlV2lkdGgmJihwYT1OYS5waWUudXNlV2lkdGgpO3ZhciBpPU9iamVjdCh1LnNlbGVjdCkoIiMiK2UpO3RlKGksNDUwLHBhLE5hLnBpZS51c2VNYXhXaWR0aCksci5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCIwIDAgIitwYSsiIDQ1MCIpO3ZhciBhPU1hdGgubWluKHBhLDQ1MCkvMi00MCxzPWkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcGEvMisiLDIyNSkiKSxjPU9hLmdldFNlY3Rpb25zKCksbD0wO09iamVjdC5rZXlzKGMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2wrPWNbdF19KSk7dmFyIGg9TmEudGhlbWVWYXJpYWJsZXMsZj1baC5waWUxLGgucGllMixoLnBpZTMsaC5waWU0LGgucGllNSxoLnBpZTYsaC5waWU3LGgucGllOCxoLnBpZTksaC5waWUxMCxoLnBpZTExLGgucGllMTJdLGQ9T2JqZWN0KHUuc2NhbGVPcmRpbmFsKSgpLnJhbmdlKGYpLHA9T2JqZWN0KHUucGllKSgpLnZhbHVlKChmdW5jdGlvbih0KXtyZXR1cm4gdFsxXX0pKShPYmplY3QuZW50cmllcyhjKSkseT1PYmplY3QodS5hcmMpKCkuaW5uZXJSYWRpdXMoMCkub3V0ZXJSYWRpdXMoYSk7cy5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YShwKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHkpLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gZCh0LmRhdGFbMF0pfSkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIikscy5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YShwKS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybih0LmRhdGFbMV0vbCoxMDApLnRvRml4ZWQoMCkrIiUifSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit5LmNlbnRyb2lkKHQpKyIpIn0pKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJjbGFzcyIsInNsaWNlIikscy5hcHBlbmQoInRleHQiKS50ZXh0KG4ueXkuZ2V0VGl0bGUoKSkuYXR0cigieCIsMCkuYXR0cigieSIsLTIwMCkuYXR0cigiY2xhc3MiLCJwaWVUaXRsZVRleHQiKTt2YXIgZz1zLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLmRhdGEoZC5kb21haW4oKSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuInRyYW5zbGF0ZSgyMTYsIisoMjIqZS0yMipkLmRvbWFpbigpLmxlbmd0aC8yKSsiKSJ9KSk7Zy5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIsMTgpLmF0dHIoImhlaWdodCIsMTgpLnN0eWxlKCJmaWxsIixkKS5zdHlsZSgic3Ryb2tlIixkKSxnLmRhdGEocCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMjIpLmF0dHIoInkiLDE0KS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gbi55eS5nZXRTaG93RGF0YSgpfHxOYS5zaG93RGF0YXx8TmEucGllLnNob3dEYXRhP3QuZGF0YVswXSsiIFsiK3QuZGF0YVsxXSsiXSI6dC5kYXRhWzBdfSkpfWNhdGNoKHQpe28uZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxvLmVycm9yKHQpfX0sRGE9big0NSksTGE9bi5uKERhKSxJYT1bXSxSYT17fSxGYT17fSxQYT17fSxqYT17fSxZYT17UmVxdWlyZW1lbnRUeXBlOntSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In0sUmlza0xldmVsOntMT1dfUklTSzoiTG93IixNRURfUklTSzoiTWVkaXVtIixISUdIX1JJU0s6IkhpZ2gifSxWZXJpZnlUeXBlOntWRVJJRllfQU5BTFlTSVM6IkFuYWx5c2lzIixWRVJJRllfREVNT05TVFJBVElPTjoiRGVtb25zdHJhdGlvbiIsVkVSSUZZX0lOU1BFQ1RJT046Ikluc3BlY3Rpb24iLFZFUklGWV9URVNUOiJUZXN0In0sUmVsYXRpb25zaGlwczp7Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifSxwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7eWMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoZSgpLnJlcX0sYWRkUmVxdWlyZW1lbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09RmFbdF0mJihGYVt0XT17bmFtZTp0LHR5cGU6ZSxpZDpSYS5pZCx0ZXh0OlJhLnRleHQscmlzazpSYS5yaXNrLHZlcmlmeU1ldGhvZDpSYS52ZXJpZnlNZXRob2R9KSxSYT17fSxGYVt0XX0sZ2V0UmVxdWlyZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIEZhfSxzZXROZXdSZXFJZDpmdW5jdGlvbih0KXt2b2lkIDAhPT1SYSYmKFJhLmlkPXQpfSxzZXROZXdSZXFUZXh0OmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PVJhJiYoUmEudGV4dD10KX0sc2V0TmV3UmVxUmlzazpmdW5jdGlvbih0KXt2b2lkIDAhPT1SYSYmKFJhLnJpc2s9dCl9LHNldE5ld1JlcVZlcmlmeU1ldGhvZDpmdW5jdGlvbih0KXt2b2lkIDAhPT1SYSYmKFJhLnZlcmlmeU1ldGhvZD10KX0sYWRkRWxlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09amFbdF0mJihqYVt0XT17bmFtZTp0LHR5cGU6UGEudHlwZSxkb2NSZWY6UGEuZG9jUmVmfSxvLmluZm8oIkFkZGVkIG5ldyByZXF1aXJlbWVudDogIix0KSksUGE9e30samFbdF19LGdldEVsZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIGphfSxzZXROZXdFbGVtZW50VHlwZTpmdW5jdGlvbih0KXt2b2lkIDAhPT1QYSYmKFBhLnR5cGU9dCl9LHNldE5ld0VsZW1lbnREb2NSZWY6ZnVuY3Rpb24odCl7dm9pZCAwIT09UGEmJihQYS5kb2NSZWY9dCl9LGFkZFJlbGF0aW9uc2hpcDpmdW5jdGlvbih0LGUsbil7SWEucHVzaCh7dHlwZTp0LHNyYzplLGRzdDpufSl9LGdldFJlbGF0aW9uc2hpcHM6ZnVuY3Rpb24oKXtyZXR1cm4gSWF9LGNsZWFyOmZ1bmN0aW9uKCl7SWE9W10sUmE9e30sRmE9e30sUGE9e30samE9e319fSx6YT17Q09OVEFJTlM6ImNvbnRhaW5zIixBUlJPVzoiYXJyb3cifSxVYT16YSwkYT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsemEuQ09OVEFJTlMrIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLGUubGluZV9oZWlnaHQvMikuYXR0cigibWFya2VyV2lkdGgiLGUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsZS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO24uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJjeSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImZpbGwiLCJub25lIiksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLGUubGluZV9oZWlnaHQpLmF0dHIoInkxIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInkyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLGUubGluZV9oZWlnaHQpLmF0dHIoIngxIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIngyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix6YS5BUlJPVysiX2xpbmVfZW5kaW5nIikuYXR0cigicmVmWCIsZS5saW5lX2hlaWdodCkuYXR0cigicmVmWSIsLjUqZS5saW5lX2hlaWdodCkuYXR0cigibWFya2VyV2lkdGgiLGUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsZS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwXG4gICAgICBMIi5jb25jYXQoZS5saW5lX2hlaWdodCwiLCIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LzIsIlxuICAgICAgTSIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LCIsIikuY29uY2F0KGUubGluZV9oZWlnaHQvMiwiXG4gICAgICBMMCwiKS5jb25jYXQoZS5saW5lX2hlaWdodCkpLmF0dHIoInN0cm9rZS13aWR0aCIsMSl9LHFhPXt9LFdhPTAsSGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnNlcnQoInJlY3QiLCIjIitlKS5hdHRyKCJjbGFzcyIsInJlcSByZXFCb3giKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIscWEucmVjdF9taW5fd2lkdGgrInB4IikuYXR0cigiaGVpZ2h0IixxYS5yZWN0X21pbl9oZWlnaHQrInB4Iil9LFZhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1xYS5yZWN0X21pbl93aWR0aC8yLGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCByZXFUaXRsZSIpLmF0dHIoImlkIixlKS5hdHRyKCJ4IixyKS5hdHRyKCJ5IixxYS5yZWN0X3BhZGRpbmcpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MDtuLmZvckVhY2goKGZ1bmN0aW9uKHQpezA9PWE/aS5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixxYS5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsMCkudGV4dCh0KTppLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLHFhLnJlY3RfbWluX3dpZHRoLzIpLmF0dHIoImR5IiwuNzUqcWEubGluZV9oZWlnaHQpLnRleHQodCksYSsrfSkpO3ZhciBvPTEuNSpxYS5yZWN0X3BhZGRpbmcrYSpxYS5saW5lX2hlaWdodCouNzU7cmV0dXJuIHQuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJyZXEtdGl0bGUtbGluZSIpLmF0dHIoIngxIiwiMCIpLmF0dHIoIngyIixxYS5yZWN0X21pbl93aWR0aCkuYXR0cigieTEiLG8pLmF0dHIoInkyIixvKSx7dGl0bGVOb2RlOmkseTpvfX0sR2E9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCIpLmF0dHIoImlkIixlKS5hdHRyKCJ4IixxYS5yZWN0X3BhZGRpbmcpLmF0dHIoInkiLHIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MCxvPVtdO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlPjMwJiZhPDM7KXt2YXIgbj10LnN1YnN0cmluZygwLDMwKTtlPSh0PXQuc3Vic3RyaW5nKDMwLHQubGVuZ3RoKSkubGVuZ3RoLG9bby5sZW5ndGhdPW4sYSsrfWlmKDM9PWEpe3ZhciByPW9bby5sZW5ndGgtMV07b1tvLmxlbmd0aC0xXT1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTQpKyIuLi4ifWVsc2Ugb1tvLmxlbmd0aF09dDthPTB9KSksby5mb3JFYWNoKChmdW5jdGlvbih0KXtpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixxYS5yZWN0X3BhZGRpbmcpLmF0dHIoImR5IixxYS5saW5lX2hlaWdodCkudGV4dCh0KX0pKSxpfSxYYT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLmVkZ2UoWmEoZS5zcmMpLFphKGUuZHN0KSksYT1PYmplY3QodS5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKSxvPXQuaW5zZXJ0KCJwYXRoIiwiIyIrcikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMaW5lIikuYXR0cigiZCIsYShpLnBvaW50cykpLmF0dHIoImZpbGwiLCJub25lIik7ZS50eXBlPT1ZYS5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TP28uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbnQuZ2V0VXJsKHFhLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIitlLnR5cGUrIl9saW5lX2VuZGluZykiKTooby5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiMTAsNyIpLG8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK250LmdldFVybChxYS5hcnJvd01hcmtlckFic29sdXRlKSsiIyIrVWEuQVJST1crIl9saW5lX2VuZGluZykiKSksZnVuY3Rpb24odCxlLG4scil7dmFyIGk9ZS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxhPWUubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoLjUqaSksbz0icmVsIitXYTtXYSsrO3ZhciBzPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyZXEgcmVsYXRpb25zaGlwTGFiZWwiKS5hdHRyKCJpZCIsbykuYXR0cigieCIsYS54KS5hdHRyKCJ5IixhLnkpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS50ZXh0KHIpLm5vZGUoKS5nZXRCQm94KCk7dC5pbnNlcnQoInJlY3QiLCIjIitvKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbEJveCIpLmF0dHIoIngiLGEueC1zLndpZHRoLzIpLmF0dHIoInkiLGEueS1zLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIscy53aWR0aCkuYXR0cigiaGVpZ2h0IixzLmhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiZmlsbC1vcGFjaXR5IiwiODUlIil9KHQsbywwLCI8PCIuY29uY2F0KGUudHlwZSwiPj4iKSl9LFphPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1xzL2csIiIpLnJlcGxhY2UoL1wuL2csIl8iKX0sS2E9ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dClmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKXFhW2Vbbl1dPXRbZVtuXV19LFFhPWZ1bmN0aW9uKHQsZSl7RGEucGFyc2VyLnl5PVlhLERhLnBhcnNlci55eS5jbGVhcigpLERhLnBhcnNlci5wYXJzZSh0KTt2YXIgbj1PYmplY3QodS5zZWxlY3QpKCJbaWQ9JyIuY29uY2F0KGUsIiddIikpOyRhKG4scWEpO3ZhciByLGksYSxzPW5ldyBMZS5hLkdyYXBoKHttdWx0aWdyYXBoOiExLGNvbXBvdW5kOiExLGRpcmVjdGVkOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cWEubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksYz1ZYS5nZXRSZXF1aXJlbWVudHMoKSxsPVlhLmdldEVsZW1lbnRzKCksaD1ZYS5nZXRSZWxhdGlvbnNoaXBzKCk7cj1jLGk9cyxhPW4sT2JqZWN0LmtleXMocikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9clt0XTt0PVphKHQpLG8uaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLHQpO3ZhciBuPWEuYXBwZW5kKCJnIikuYXR0cigiaWQiLHQpLHM9SGEobiwicmVxLSIrdCksYz1bXSx1PVZhKG4sdCsiX3RpdGxlIixbIjw8Ii5jb25jYXQoZS50eXBlLCI+PiIpLCIiLmNvbmNhdChlLm5hbWUpXSk7Yy5wdXNoKHUudGl0bGVOb2RlKTt2YXIgbD1HYShuLHQrIl9ib2R5IixbIklkOiAiLmNvbmNhdChlLmlkKSwiVGV4dDogIi5jb25jYXQoZS50ZXh0KSwiUmlzazogIi5jb25jYXQoZS5yaXNrKSwiVmVyaWZpY2F0aW9uOiAiLmNvbmNhdChlLnZlcmlmeU1ldGhvZCldLHUueSk7Yy5wdXNoKGwpO3ZhciBoPXMubm9kZSgpLmdldEJCb3goKTtpLnNldE5vZGUodCx7d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOnR9KX0pKSxmdW5jdGlvbih0LGUsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9dFtyXSxhPVphKHIpLG89bi5hcHBlbmQoImciKS5hdHRyKCJpZCIsYSkscz0iZWxlbWVudC0iK2EsYz1IYShvLHMpLHU9W10sbD1WYShvLHMrIl90aXRsZSIsWyI8PEVsZW1lbnQ+PiIsIiIuY29uY2F0KHIpXSk7dS5wdXNoKGwudGl0bGVOb2RlKTt2YXIgaD1HYShvLHMrIl9ib2R5IixbIlR5cGU6ICIuY29uY2F0KGkudHlwZXx8Ik5vdCBTcGVjaWZpZWQiKSwiRG9jIFJlZjogIi5jb25jYXQoaS5kb2NSZWZ8fCJOb25lIildLGwueSk7dS5wdXNoKGgpO3ZhciBmPWMubm9kZSgpLmdldEJCb3goKTtlLnNldE5vZGUoYSx7d2lkdGg6Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOmF9KX0pKX0obCxzLG4pLGZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1aYSh0LnNyYykscj1aYSh0LmRzdCk7ZS5zZXRFZGdlKG4scix7cmVsYXRpb25zaGlwOnR9KX0pKX0oaCxzKSxCZS5hLmxheW91dChzKSxmdW5jdGlvbih0LGUpe2Uubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2b2lkIDAhPT1uJiZ2b2lkIDAhPT1lLm5vZGUobikmJih0LnNlbGVjdCgiIyIrbiksdC5zZWxlY3QoIiMiK24pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLm5vZGUobikueC1lLm5vZGUobikud2lkdGgvMikrIiwiKyhlLm5vZGUobikueS1lLm5vZGUobikuaGVpZ2h0LzIpKyIgKSIpKX0pKX0obixzKSxoLmZvckVhY2goKGZ1bmN0aW9uKHQpe1hhKG4sdCxzLGUpfSkpO3ZhciBmPXFhLnJlY3RfcGFkZGluZyxkPW4ubm9kZSgpLmdldEJCb3goKSxwPWQud2lkdGgrMipmLHk9ZC5oZWlnaHQrMipmO3RlKG4seSxwLHFhLnVzZU1heFdpZHRoKSxuLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdChkLngtZiwiICIpLmNvbmNhdChkLnktZiwiICIpLmNvbmNhdChwLCIgIikuY29uY2F0KHkpKX0sSmE9bigyKSx0bz1uLm4oSmEpLGVvPXZvaWQgMCxubz17fSxybz1bXSxpbz1bXSxhbz0iIixvbz0hMSxzbz0hMSxjbz0hMSx1bz1mdW5jdGlvbih0LGUsbil7dmFyIHI9bm9bdF07ciYmZT09PXIubmFtZSYmbnVsbD09bnx8KG51bGwhPW4mJm51bGwhPW4udGV4dHx8KG49e3RleHQ6ZSx3cmFwOm51bGx9KSxub1t0XT17bmFtZTplLGRlc2NyaXB0aW9uOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmZm8oKXx8ISFuLndyYXAscHJldkFjdG9yOmVvfSxlbyYmbm9bZW9dJiYobm9bZW9dLm5leHRBY3Rvcj10KSxlbz10KX0sbG89ZnVuY3Rpb24odCl7dmFyIGUsbj0wO2ZvcihlPTA7ZTxyby5sZW5ndGg7ZSsrKXJvW2VdLnR5cGU9PT1wby5BQ1RJVkVfU1RBUlQmJnJvW2VdLmZyb20uYWN0b3I9PT10JiZuKysscm9bZV0udHlwZT09PXBvLkFDVElWRV9FTkQmJnJvW2VdLmZyb20uYWN0b3I9PT10JiZuLS07cmV0dXJuIG59LGhvPWZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0scj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZihyPT09cG8uQUNUSVZFX0VORCl7dmFyIGk9bG8odC5hY3Rvcik7aWYoaTwxKXt2YXIgYT1uZXcgRXJyb3IoIlRyeWluZyB0byBpbmFjdGl2YXRlIGFuIGluYWN0aXZlIHBhcnRpY2lwYW50ICgiK3QuYWN0b3IrIikiKTt0aHJvdyBhLmhhc2g9e3RleHQ6Ii0+Pi0iLHRva2VuOiItPj4tIixsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIidBQ1RJVkVfUEFSVElDSVBBTlQnIl19LGF9fXJldHVybiByby5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmZm8oKXx8ISFuLndyYXAsdHlwZTpyfSksITB9LGZvPWZ1bmN0aW9uKCl7cmV0dXJuIGNvfSxwbz17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjV9LHlvPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17YWN0b3I6dCxwbGFjZW1lbnQ6ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmZm8oKXx8ISFuLndyYXB9LGk9W10uY29uY2F0KHQsdCk7aW8ucHVzaChyKSxyby5wdXNoKHtmcm9tOmlbMF0sdG86aVsxXSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmZm8oKXx8ISFuLndyYXAsdHlwZTpwby5OT1RFLHBsYWNlbWVudDplfSl9LGdvPWZ1bmN0aW9uKHQpe2FvPXQudGV4dCxvbz12b2lkIDA9PT10LndyYXAmJmZvKCl8fCEhdC53cmFwfSxtbz17YWRkQWN0b3I6dW8sYWRkTWVzc2FnZTpmdW5jdGlvbih0LGUsbixyKXtyby5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmZm8oKXx8ISFuLndyYXAsYW5zd2VyOnJ9KX0sYWRkU2lnbmFsOmhvLGF1dG9XcmFwOmZvLHNldFdyYXA6ZnVuY3Rpb24odCl7Y289dH0sZW5hYmxlU2VxdWVuY2VOdW1iZXJzOmZ1bmN0aW9uKCl7c289ITB9LHNob3dTZXF1ZW5jZU51bWJlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gc299LGdldE1lc3NhZ2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHJvfSxnZXRBY3RvcnM6ZnVuY3Rpb24oKXtyZXR1cm4gbm99LGdldEFjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiBub1t0XX0sZ2V0QWN0b3JLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKG5vKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gYW99LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXt5Yy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIGhlKCkuc2VxdWVuY2V9LGdldFRpdGxlV3JhcHBlZDpmdW5jdGlvbigpe3JldHVybiBvb30sY2xlYXI6ZnVuY3Rpb24oKXtubz17fSxybz1bXX0scGFyc2VNZXNzYWdlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudHJpbSgpLG49e3RleHQ6ZS5yZXBsYWNlKC9eWzpdPyg/Om5vKT93cmFwOi8sIiIpLnRyaW0oKSx3cmFwOm51bGwhPT1lLm1hdGNoKC9eWzpdP3dyYXA6Lyl8fG51bGw9PT1lLm1hdGNoKC9eWzpdP25vd3JhcDovKSYmdm9pZCAwfTtyZXR1cm4gby5kZWJ1ZygicGFyc2VNZXNzYWdlOiIsbiksbn0sTElORVRZUEU6cG8sQVJST1dUWVBFOntGSUxMRUQ6MCxPUEVOOjF9LFBMQUNFTUVOVDp7TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sYWRkTm90ZTp5byxzZXRUaXRsZTpnbyxhcHBseTpmdW5jdGlvbiB0KGUpe2lmKGUgaW5zdGFuY2VvZiBBcnJheSllLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QoZSl9KSk7ZWxzZSBzd2l0Y2goZS50eXBlKXtjYXNlImFkZEFjdG9yIjp1byhlLmFjdG9yLGUuYWN0b3IsZS5kZXNjcmlwdGlvbik7YnJlYWs7Y2FzZSJhY3RpdmVTdGFydCI6Y2FzZSJhY3RpdmVFbmQiOmhvKGUuYWN0b3Isdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWRkTm90ZSI6eW8oZS5hY3RvcixlLnBsYWNlbWVudCxlLnRleHQpO2JyZWFrO2Nhc2UiYWRkTWVzc2FnZSI6aG8oZS5mcm9tLGUudG8sZS5tc2csZS5zaWduYWxUeXBlKTticmVhaztjYXNlImxvb3BTdGFydCI6aG8odm9pZCAwLHZvaWQgMCxlLmxvb3BUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wRW5kIjpobyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdFN0YXJ0Ijpobyh2b2lkIDAsdm9pZCAwLGUuY29sb3IsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RFbmQiOmhvKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6aG8odm9pZCAwLHZvaWQgMCxlLm9wdFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdEVuZCI6aG8odm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0IjpjYXNlImVsc2UiOmhvKHZvaWQgMCx2b2lkIDAsZS5hbHRUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRFbmQiOmhvKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJzZXRUaXRsZSI6Z28oZS50ZXh0KTticmVhaztjYXNlInBhclN0YXJ0IjpjYXNlImFuZCI6aG8odm9pZCAwLHZvaWQgMCxlLnBhclRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInBhckVuZCI6aG8odm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKX19fSx2bz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJyZWN0Iik7cmV0dXJuIG4uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJmaWxsIixlLmZpbGwpLG4uYXR0cigic3Ryb2tlIixlLnN0cm9rZSksbi5hdHRyKCJ3aWR0aCIsZS53aWR0aCksbi5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KSxuLmF0dHIoInJ4IixlLnJ4KSxuLmF0dHIoInJ5IixlLnJ5KSx2b2lkIDAhPT1lLmNsYXNzJiZuLmF0dHIoImNsYXNzIixlLmNsYXNzKSxufSxibz1mdW5jdGlvbih0LGUpe3ZhciBuPTAscj0wLGk9ZS50ZXh0LnNwbGl0KG50LmxpbmVCcmVha1JlZ2V4KSxhPVtdLG89MCxzPWZ1bmN0aW9uKCl7cmV0dXJuIGUueX07aWYodm9pZCAwIT09ZS52YWxpZ24mJnZvaWQgMCE9PWUudGV4dE1hcmdpbiYmZS50ZXh0TWFyZ2luPjApc3dpdGNoKGUudmFsaWduKXtjYXNlInRvcCI6Y2FzZSJzdGFydCI6cz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGUueStlLnRleHRNYXJnaW4pfTticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOnM9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChlLnkrKG4rcitlLnRleHRNYXJnaW4pLzIpfTticmVhaztjYXNlImJvdHRvbSI6Y2FzZSJlbmQiOnM9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChlLnkrKG4rcisyKmUudGV4dE1hcmdpbiktZS50ZXh0TWFyZ2luKX19aWYodm9pZCAwIT09ZS5hbmNob3ImJnZvaWQgMCE9PWUudGV4dE1hcmdpbiYmdm9pZCAwIT09ZS53aWR0aClzd2l0Y2goZS5hbmNob3Ipe2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6ZS54PU1hdGgucm91bmQoZS54K2UudGV4dE1hcmdpbiksZS5hbmNob3I9InN0YXJ0IixlLmRvbWluYW50QmFzZWxpbmU9InRleHQtYWZ0ZXItZWRnZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOmUueD1NYXRoLnJvdW5kKGUueCtlLndpZHRoLzIpLGUuYW5jaG9yPSJtaWRkbGUiLGUuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjplLng9TWF0aC5yb3VuZChlLngrZS53aWR0aC1lLnRleHRNYXJnaW4pLGUuYW5jaG9yPSJlbmQiLGUuZG9taW5hbnRCYXNlbGluZT0idGV4dC1iZWZvcmUtZWRnZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIn1mb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXTt2b2lkIDAhPT1lLnRleHRNYXJnaW4mJjA9PT1lLnRleHRNYXJnaW4mJnZvaWQgMCE9PWUuZm9udFNpemUmJihvPWMqZS5mb250U2l6ZSk7dmFyIGw9dC5hcHBlbmQoInRleHQiKTtpZihsLmF0dHIoIngiLGUueCksbC5hdHRyKCJ5IixzKCkpLHZvaWQgMCE9PWUuYW5jaG9yJiZsLmF0dHIoInRleHQtYW5jaG9yIixlLmFuY2hvcikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGUuZG9taW5hbnRCYXNlbGluZSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIixlLmFsaWdubWVudEJhc2VsaW5lKSx2b2lkIDAhPT1lLmZvbnRGYW1pbHkmJmwuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLHZvaWQgMCE9PWUuZm9udFNpemUmJmwuc3R5bGUoImZvbnQtc2l6ZSIsZS5mb250U2l6ZSksdm9pZCAwIT09ZS5mb250V2VpZ2h0JiZsLnN0eWxlKCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KSx2b2lkIDAhPT1lLmZpbGwmJmwuYXR0cigiZmlsbCIsZS5maWxsKSx2b2lkIDAhPT1lLmNsYXNzJiZsLmF0dHIoImNsYXNzIixlLmNsYXNzKSx2b2lkIDAhPT1lLmR5P2wuYXR0cigiZHkiLGUuZHkpOjAhPT1vJiZsLmF0dHIoImR5IixvKSxlLnRzcGFuKXt2YXIgaD1sLmFwcGVuZCgidHNwYW4iKTtoLmF0dHIoIngiLGUueCksdm9pZCAwIT09ZS5maWxsJiZoLmF0dHIoImZpbGwiLGUuZmlsbCksaC50ZXh0KHUpfWVsc2UgbC50ZXh0KHUpO3ZvaWQgMCE9PWUudmFsaWduJiZ2b2lkIDAhPT1lLnRleHRNYXJnaW4mJmUudGV4dE1hcmdpbj4wJiYocis9KGwuX2dyb3Vwc3x8bClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCxuPXIpLGEucHVzaChsKX1yZXR1cm4gYX0seG89ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYSxvLHM9dC5hcHBlbmQoInBvbHlnb24iKTtyZXR1cm4gcy5hdHRyKCJwb2ludHMiLChuPWUueCxyPWUueSxpPWUud2lkdGgsYT1lLmhlaWdodCxuKyIsIityKyIgIisobitpKSsiLCIrcisiICIrKG4raSkrIiwiKyhyK2EtKG89NykpKyIgIisobitpLTEuMipvKSsiLCIrKHIrYSkrIiAiK24rIiwiKyhyK2EpKSkscy5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmhlaWdodC8yLGJvKHQsZSksc30sX289LTEsa289ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9fSx3bz1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0sVG89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGksYSxvLHMpe3IoZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaStvLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh0KSxzKX1mdW5jdGlvbiBlKHQsZSxuLGksYSxvLHMsYyl7Zm9yKHZhciB1PWMuYWN0b3JGb250U2l6ZSxsPWMuYWN0b3JGb250RmFtaWx5LGg9Yy5hY3RvckZvbnRXZWlnaHQsZj10LnNwbGl0KG50LmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqdS11KihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsdSkuc3R5bGUoImZvbnQtd2VpZ2h0IixoKS5zdHlsZSgiZm9udC1mYW1pbHkiLGwpO3kuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJkeSIscCkudGV4dChmW2RdKSx5LmF0dHIoInkiLGkrby8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscih5LHMpfX1mdW5jdGlvbiBuKHQsbixpLGEsbyxzLGMsdSl7dmFyIGw9bi5hcHBlbmQoInN3aXRjaCIpLGg9bC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixhKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixzKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtoLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJnQuYXR0cihuLGVbbl0pfXJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4iZm8iPT09ci50ZXh0UGxhY2VtZW50P246Im9sZCI9PT1yLnRleHRQbGFjZW1lbnQ/dDplfX0oKSxFbz17ZHJhd1JlY3Q6dm8sZHJhd1RleHQ6Ym8sZHJhd0xhYmVsOnhvLGRyYXdBY3RvcjpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS54K2Uud2lkdGgvMixpPXQuYXBwZW5kKCJnIik7MD09PWUueSYmKF9vKyssaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitfbykuYXR0cigieDEiLHIpLmF0dHIoInkxIiw1KS5hdHRyKCJ4MiIscikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IikpO3ZhciBhPXdvKCk7YS54PWUueCxhLnk9ZS55LGEuZmlsbD0iI2VhZWFlYSIsYS53aWR0aD1lLndpZHRoLGEuaGVpZ2h0PWUuaGVpZ2h0LGEuY2xhc3M9ImFjdG9yIixhLnJ4PTMsYS5yeT0zLHZvKGksYSksVG8obikoZS5kZXNjcmlwdGlvbixpLGEueCxhLnksYS53aWR0aCxhLmhlaWdodCx7Y2xhc3M6ImFjdG9yIn0sbil9LGFuY2hvckVsZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYXBwZW5kKCJnIil9LGRyYXdBY3RpdmF0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIGE9d28oKSxvPWUuYW5jaG9yZWQ7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLmNsYXNzPSJhY3RpdmF0aW9uIitpJTMsYS53aWR0aD1lLnN0b3B4LWUuc3RhcnR4LGEuaGVpZ2h0PW4tZS5zdGFydHksdm8obyxhKX0sZHJhd0xvb3A6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9ci5ib3hNYXJnaW4sYT1yLmJveFRleHRNYXJnaW4sbz1yLmxhYmVsQm94SGVpZ2h0LHM9ci5sYWJlbEJveFdpZHRoLGM9ci5tZXNzYWdlRm9udEZhbWlseSx1PXIubWVzc2FnZUZvbnRTaXplLGw9ci5tZXNzYWdlRm9udFdlaWdodCxoPXQuYXBwZW5kKCJnIiksZj1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gaC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsdCkuYXR0cigieTEiLGUpLmF0dHIoIngyIixuKS5hdHRyKCJ5MiIscikuYXR0cigiY2xhc3MiLCJsb29wTGluZSIpfTtmKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdGFydHkpLGYoZS5zdG9weCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RvcHkpLGYoZS5zdGFydHgsZS5zdG9weSxlLnN0b3B4LGUuc3RvcHkpLGYoZS5zdGFydHgsZS5zdGFydHksZS5zdGFydHgsZS5zdG9weSksdm9pZCAwIT09ZS5zZWN0aW9ucyYmZS5zZWN0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXtmKGUuc3RhcnR4LHQueSxlLnN0b3B4LHQueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KSk7dmFyIGQ9a28oKTtkLnRleHQ9bixkLng9ZS5zdGFydHgsZC55PWUuc3RhcnR5LGQuZm9udEZhbWlseT1jLGQuZm9udFNpemU9dSxkLmZvbnRXZWlnaHQ9bCxkLmFuY2hvcj0ibWlkZGxlIixkLnZhbGlnbj0ibWlkZGxlIixkLnRzcGFuPSExLGQud2lkdGg9c3x8NTAsZC5oZWlnaHQ9b3x8MjAsZC50ZXh0TWFyZ2luPWEsZC5jbGFzcz0ibGFiZWxUZXh0Iix4byhoLGQpLChkPWtvKCkpLnRleHQ9ZS50aXRsZSxkLng9ZS5zdGFydHgrcy8yKyhlLnN0b3B4LWUuc3RhcnR4KS8yLGQueT1lLnN0YXJ0eStpK2EsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50ZXh0TWFyZ2luPWEsZC5jbGFzcz0ibG9vcFRleHQiLGQuZm9udEZhbWlseT1jLGQuZm9udFNpemU9dSxkLmZvbnRXZWlnaHQ9bCxkLndyYXA9ITA7dmFyIHA9Ym8oaCxkKTtyZXR1cm4gdm9pZCAwIT09ZS5zZWN0aW9uVGl0bGVzJiZlLnNlY3Rpb25UaXRsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtpZih0Lm1lc3NhZ2Upe2QudGV4dD10Lm1lc3NhZ2UsZC54PWUuc3RhcnR4KyhlLnN0b3B4LWUuc3RhcnR4KS8yLGQueT1lLnNlY3Rpb25zW25dLnkraSthLGQuY2xhc3M9Imxvb3BUZXh0IixkLmFuY2hvcj0ibWlkZGxlIixkLnZhbGlnbj0ibWlkZGxlIixkLnRzcGFuPSExLGQuZm9udEZhbWlseT1jLGQuZm9udFNpemU9dSxkLmZvbnRXZWlnaHQ9bCxkLndyYXA9ZS53cmFwLHA9Ym8oaCxkKTt2YXIgcj1NYXRoLnJvdW5kKHAubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC5fZ3JvdXBzfHx0KVswXVswXS5nZXRCQm94KCkuaGVpZ2h0fSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKTtlLnNlY3Rpb25zW25dLmhlaWdodCs9ci0oaSthKX19KSksZS5oZWlnaHQ9TWF0aC5yb3VuZChlLnN0b3B5LWUuc3RhcnR5KSxofSxkcmF3QmFja2dyb3VuZFJlY3Q6ZnVuY3Rpb24odCxlKXt2byh0LHt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSxpbnNlcnRBcnJvd0hlYWQ6ZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0saW5zZXJ0QXJyb3dGaWxsZWRIZWFkOmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LGluc2VydFNlcXVlbmNlTnVtYmVyOmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0saW5zZXJ0QXJyb3dDcm9zc0hlYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiwxNikuYXR0cigicmVmWSIsNCk7ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gOSwyIFYgNiBMMTYsNCBaIiksZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSAwLDEgTCA2LDcgTSA2LDEgTCAwLDciKX0sZ2V0VGV4dE9iajprbyxnZXROb3RlUmVjdDp3b307SmEucGFyc2VyLnl5PW1vO3ZhciBDbz17fSxTbz17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxhY3RpdmF0aW9uczpbXSxtb2RlbHM6e2dldEhlaWdodDpmdW5jdGlvbigpe3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLDA9PT10aGlzLmFjdG9ycy5sZW5ndGg/WzBdOnRoaXMuYWN0b3JzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpKSsoMD09PXRoaXMubG9vcHMubGVuZ3RoPzA6dGhpcy5sb29wcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodHx8MH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSkrKDA9PT10aGlzLm1lc3NhZ2VzLmxlbmd0aD8wOnRoaXMubWVzc2FnZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpKygwPT09dGhpcy5ub3Rlcy5sZW5ndGg/MDp0aGlzLm5vdGVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmxvb3BzPVtdLHRoaXMubWVzc2FnZXM9W10sdGhpcy5ub3Rlcz1bXX0sYWRkQWN0b3I6ZnVuY3Rpb24odCl7dGhpcy5hY3RvcnMucHVzaCh0KX0sYWRkTG9vcDpmdW5jdGlvbih0KXt0aGlzLmxvb3BzLnB1c2godCl9LGFkZE1lc3NhZ2U6ZnVuY3Rpb24odCl7dGhpcy5tZXNzYWdlcy5wdXNoKHQpfSxhZGROb3RlOmZ1bmN0aW9uKHQpe3RoaXMubm90ZXMucHVzaCh0KX0sbGFzdEFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sbGFzdExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sbGFzdE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aC0xXX0sbGFzdE5vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sYWN0b3JzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAsQm8oSmEucGFyc2VyLnl5LmdldENvbmZpZygpKX0sdXBkYXRlVmFsOmZ1bmN0aW9uKHQsZSxuLHIpe3ZvaWQgMD09PXRbZV0/dFtlXT1uOnRbZV09cihuLHRbZV0pfSx1cGRhdGVCb3VuZHM6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxhPTA7ZnVuY3Rpb24gbyhvKXtyZXR1cm4gZnVuY3Rpb24ocyl7YSsrO3ZhciBjPWkuc2VxdWVuY2VJdGVtcy5sZW5ndGgtYSsxO2kudXBkYXRlVmFsKHMsInN0YXJ0eSIsZS1jKkNvLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwocywic3RvcHkiLHIrYypDby5ib3hNYXJnaW4sTWF0aC5tYXgpLGkudXBkYXRlVmFsKFNvLmRhdGEsInN0YXJ0eCIsdC1jKkNvLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwoU28uZGF0YSwic3RvcHgiLG4rYypDby5ib3hNYXJnaW4sTWF0aC5tYXgpLCJhY3RpdmF0aW9uIiE9PW8mJihpLnVwZGF0ZVZhbChzLCJzdGFydHgiLHQtYypDby5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKHMsInN0b3B4IixuK2MqQ28uYm94TWFyZ2luLE1hdGgubWF4KSxpLnVwZGF0ZVZhbChTby5kYXRhLCJzdGFydHkiLGUtYypDby5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKFNvLmRhdGEsInN0b3B5IixyK2MqQ28uYm94TWFyZ2luLE1hdGgubWF4KSl9fXRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKG8oKSksdGhpcy5hY3RpdmF0aW9ucy5mb3JFYWNoKG8oImFjdGl2YXRpb24iKSl9LGluc2VydDpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1NYXRoLm1pbih0LG4pLGE9TWF0aC5tYXgodCxuKSxvPU1hdGgubWluKGUscikscz1NYXRoLm1heChlLHIpO3RoaXMudXBkYXRlVmFsKFNvLmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoU28uZGF0YSwic3RhcnR5IixvLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChTby5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwoU28uZGF0YSwic3RvcHkiLHMsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGksbyxhLHMpfSxuZXdBY3RpdmF0aW9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uW3QuZnJvbS5hY3Rvcl0saT1Ebyh0LmZyb20uYWN0b3IpLmxlbmd0aHx8MCxhPXIueCtyLndpZHRoLzIrKGktMSkqQ28uYWN0aXZhdGlvbldpZHRoLzI7dGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtzdGFydHg6YSxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcysyLHN0b3B4OmErQ28uYWN0aXZhdGlvbldpZHRoLHN0b3B5OnZvaWQgMCxhY3Rvcjp0LmZyb20uYWN0b3IsYW5jaG9yZWQ6RW8uYW5jaG9yRWxlbWVudChlKX0pfSxlbmRBY3RpdmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aXZhdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hY3Rvcn0pKS5sYXN0SW5kZXhPZih0LmZyb20uYWN0b3IpO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShlLDEpWzBdfSxjcmVhdGVMb29wOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOnQubWVzc2FnZSx3cmFwOnQud3JhcCx3aWR0aDp0LndpZHRoLGhlaWdodDowLGZpbGw6ZX19LG5ld0xvb3A6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3RoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcCh0LGUpKX0sZW5kTG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LGFkZFNlY3Rpb25Ub0xvb3A6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO2Uuc2VjdGlvbnM9ZS5zZWN0aW9uc3x8W10sZS5zZWN0aW9uVGl0bGVzPWUuc2VjdGlvblRpdGxlc3x8W10sZS5zZWN0aW9ucy5wdXNoKHt5OlNvLmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxlLnNlY3Rpb25UaXRsZXMucHVzaCh0KSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChlKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKHQpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyt0LHRoaXMuZGF0YS5zdG9weT10aGlzLnZlcnRpY2FsUG9zfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fX0sQW89ZnVuY3Rpb24odCl7cmV0dXJue2ZvbnRGYW1pbHk6dC5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0Lm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnQubWVzc2FnZUZvbnRXZWlnaHR9fSxNbz1mdW5jdGlvbih0KXtyZXR1cm57Zm9udEZhbWlseTp0Lm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnQubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5ub3RlRm9udFdlaWdodH19LE9vPWZ1bmN0aW9uKHQpe3JldHVybntmb250RmFtaWx5OnQuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnQuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnQuYWN0b3JGb250V2VpZ2h0fX0sTm89ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPTAsYT0wLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9ZVtuW29dXTtzLndpZHRoPXMud2lkdGh8fENvLndpZHRoLHMuaGVpZ2h0PU1hdGgubWF4KHMuaGVpZ2h0fHxDby5oZWlnaHQsQ28uaGVpZ2h0KSxzLm1hcmdpbj1zLm1hcmdpbnx8Q28uYWN0b3JNYXJnaW4scy54PWkrYSxzLnk9cixFby5kcmF3QWN0b3IodCxzLENvKSxTby5pbnNlcnQocy54LHIscy54K3Mud2lkdGgscy5oZWlnaHQpLGkrPXMud2lkdGgsYSs9cy5tYXJnaW4sU28ubW9kZWxzLmFkZEFjdG9yKHMpfVNvLmJ1bXBWZXJ0aWNhbFBvcyhDby5oZWlnaHQpfSxCbz1mdW5jdGlvbih0KXtWdChDbyx0KSx0LmZvbnRGYW1pbHkmJihDby5hY3RvckZvbnRGYW1pbHk9Q28ubm90ZUZvbnRGYW1pbHk9Q28ubWVzc2FnZUZvbnRGYW1pbHk9dC5mb250RmFtaWx5KSx0LmZvbnRTaXplJiYoQ28uYWN0b3JGb250U2l6ZT1Dby5ub3RlRm9udFNpemU9Q28ubWVzc2FnZUZvbnRTaXplPXQuZm9udFNpemUpLHQuZm9udFdlaWdodCYmKENvLmFjdG9yRm9udFdlaWdodD1Dby5ub3RlRm9udFdlaWdodD1Dby5tZXNzYWdlRm9udFdlaWdodD10LmZvbnRXZWlnaHQpfSxEbz1mdW5jdGlvbih0KXtyZXR1cm4gU28uYWN0aXZhdGlvbnMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3Rvcj09PXR9KSl9LExvPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZVt0XSxyPURvKHQpO3JldHVybltyLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4odCxlLnN0YXJ0eCl9KSxuLngrbi53aWR0aC8yKSxyLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnN0b3B4KX0pLG4ueCtuLndpZHRoLzIpXX07ZnVuY3Rpb24gSW8odCxlLG4scixpKXtTby5idW1wVmVydGljYWxQb3Mobik7dmFyIGE9cjtpZihlLmlkJiZlLm1lc3NhZ2UmJnRbZS5pZF0pe3ZhciBzPXRbZS5pZF0ud2lkdGgsYz1BbyhDbyk7ZS5tZXNzYWdlPW5lLndyYXBMYWJlbCgiWyIuY29uY2F0KGUubWVzc2FnZSwiXSIpLHMtMipDby53cmFwUGFkZGluZyxjKSxlLndpZHRoPXMsZS53cmFwPSEwO3ZhciB1PW5lLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGUubWVzc2FnZSxjKSxsPU1hdGgubWF4KHUuaGVpZ2h0LENvLmxhYmVsQm94SGVpZ2h0KTthPXIrbCxvLmRlYnVnKCIiLmNvbmNhdChsLCIgLSAiKS5jb25jYXQoZS5tZXNzYWdlKSl9aShlKSxTby5idW1wVmVydGljYWxQb3MoYSl9dmFyIFJvPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYodFtlLnRvXSYmdFtlLmZyb21dKXt2YXIgcj10W2UudG9dO2lmKGUucGxhY2VtZW50PT09SmEucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0YmJiFyLnByZXZBY3RvcilyZXR1cm47aWYoZS5wbGFjZW1lbnQ9PT1KYS5wYXJzZXIueXkuUExBQ0VNRU5ULlJJR0hUT0YmJiFyLm5leHRBY3RvcilyZXR1cm47dmFyIGk9dm9pZCAwIT09ZS5wbGFjZW1lbnQsYT0haSxvPWk/TW8oQ28pOkFvKENvKSxzPWUud3JhcD9uZS53cmFwTGFiZWwoZS5tZXNzYWdlLENvLndpZHRoLTIqQ28ud3JhcFBhZGRpbmcsbyk6ZS5tZXNzYWdlLGM9bmUuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocyxvKS53aWR0aCsyKkNvLndyYXBQYWRkaW5nO2EmJmUuZnJvbT09PXIubmV4dEFjdG9yP25bZS50b109TWF0aC5tYXgobltlLnRvXXx8MCxjKTphJiZlLmZyb209PT1yLnByZXZBY3Rvcj9uW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMpOmEmJmUuZnJvbT09PWUudG8/KG5bZS5mcm9tXT1NYXRoLm1heChuW2UuZnJvbV18fDAsYy8yKSxuW2UudG9dPU1hdGgubWF4KG5bZS50b118fDAsYy8yKSk6ZS5wbGFjZW1lbnQ9PT1KYS5wYXJzZXIueXkuUExBQ0VNRU5ULlJJR0hUT0Y/bltlLmZyb21dPU1hdGgubWF4KG5bZS5mcm9tXXx8MCxjKTplLnBsYWNlbWVudD09PUphLnBhcnNlci55eS5QTEFDRU1FTlQuTEVGVE9GP25bci5wcmV2QWN0b3JdPU1hdGgubWF4KG5bci5wcmV2QWN0b3JdfHwwLGMpOmUucGxhY2VtZW50PT09SmEucGFyc2VyLnl5LlBMQUNFTUVOVC5PVkVSJiYoci5wcmV2QWN0b3ImJihuW3IucHJldkFjdG9yXT1NYXRoLm1heChuW3IucHJldkFjdG9yXXx8MCxjLzIpKSxyLm5leHRBY3RvciYmKG5bZS5mcm9tXT1NYXRoLm1heChuW2UuZnJvbV18fDAsYy8yKSkpfX0pKSxvLmRlYnVnKCJtYXhNZXNzYWdlV2lkdGhQZXJBY3RvcjoiLG4pLG59LEZvPWZ1bmN0aW9uKHQsZSl7dmFyIG49MDtmb3IodmFyIHIgaW4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9dFtlXTtyLndyYXAmJihyLmRlc2NyaXB0aW9uPW5lLndyYXBMYWJlbChyLmRlc2NyaXB0aW9uLENvLndpZHRoLTIqQ28ud3JhcFBhZGRpbmcsT28oQ28pKSk7dmFyIGk9bmUuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoci5kZXNjcmlwdGlvbixPbyhDbykpO3Iud2lkdGg9ci53cmFwP0NvLndpZHRoOk1hdGgubWF4KENvLndpZHRoLGkud2lkdGgrMipDby53cmFwUGFkZGluZyksci5oZWlnaHQ9ci53cmFwP01hdGgubWF4KGkuaGVpZ2h0LENvLmhlaWdodCk6Q28uaGVpZ2h0LG49TWF0aC5tYXgobixyLmhlaWdodCl9KSksZSl7dmFyIGk9dFtyXTtpZihpKXt2YXIgYT10W2kubmV4dEFjdG9yXTtpZihhKXt2YXIgbz1lW3JdK0NvLmFjdG9yTWFyZ2luLWkud2lkdGgvMi1hLndpZHRoLzI7aS5tYXJnaW49TWF0aC5tYXgobyxDby5hY3Rvck1hcmdpbil9fX1yZXR1cm4gTWF0aC5tYXgobixDby5oZWlnaHQpfSxQbz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhPXt9LHM9W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7c3dpdGNoKHQuaWQ9bmUucmFuZG9tKHtsZW5ndGg6MTB9KSx0LnR5cGUpe2Nhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfU1RBUlQ6Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuQUxUX1NUQVJUOmNhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9TVEFSVDpjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfU1RBUlQ6cy5wdXNoKHtpZDp0LmlkLG1zZzp0Lm1lc3NhZ2UsZnJvbTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0bzpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3aWR0aDowfSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VMU0U6Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuUEFSX0FORDp0Lm1lc3NhZ2UmJihuPXMucG9wKCksYVtuLmlkXT1uLGFbdC5pZF09bixzLnB1c2gobikpO2JyZWFrO2Nhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfRU5EOmNhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9FTkQ6Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuT1BUX0VORDpjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfRU5EOm49cy5wb3AoKSxhW24uaWRdPW47YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX1NUQVJUOnZhciBjPWVbdC5mcm9tP3QuZnJvbS5hY3Rvcjp0LnRvLmFjdG9yXSx1PURvKHQuZnJvbT90LmZyb20uYWN0b3I6dC50by5hY3RvcikubGVuZ3RoLGw9Yy54K2Mud2lkdGgvMisodS0xKSpDby5hY3RpdmF0aW9uV2lkdGgvMixoPXtzdGFydHg6bCxzdG9weDpsK0NvLmFjdGl2YXRpb25XaWR0aCxhY3Rvcjp0LmZyb20uYWN0b3IsZW5hYmxlZDohMH07U28uYWN0aXZhdGlvbnMucHVzaChoKTticmVhaztjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5BQ1RJVkVfRU5EOnZhciBmPVNvLmFjdGl2YXRpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWN0b3J9KSkubGFzdEluZGV4T2YodC5mcm9tLmFjdG9yKTtkZWxldGUgU28uYWN0aXZhdGlvbnMuc3BsaWNlKGYsMSlbMF19dm9pZCAwIT09dC5wbGFjZW1lbnQ/KHI9ZnVuY3Rpb24odCxlKXt2YXIgbj1lW3QuZnJvbV0ueCxyPWVbdC50b10ueCxpPXQud3JhcCYmdC5tZXNzYWdlLGE9bmUuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaT9uZS53cmFwTGFiZWwodC5tZXNzYWdlLENvLndpZHRoLE1vKENvKSk6dC5tZXNzYWdlLE1vKENvKSkscz17d2lkdGg6aT9Dby53aWR0aDpNYXRoLm1heChDby53aWR0aCxhLndpZHRoKzIqQ28ubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4OmVbdC5mcm9tXS54LHN0b3B4OjAsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZX07cmV0dXJuIHQucGxhY2VtZW50PT09SmEucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GPyhzLndpZHRoPWk/TWF0aC5tYXgoQ28ud2lkdGgsYS53aWR0aCk6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipDby5ub3RlTWFyZ2luKSxzLnN0YXJ0eD1uKyhlW3QuZnJvbV0ud2lkdGgrQ28uYWN0b3JNYXJnaW4pLzIpOnQucGxhY2VtZW50PT09SmEucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0Y/KHMud2lkdGg9aT9NYXRoLm1heChDby53aWR0aCxhLndpZHRoKzIqQ28ubm90ZU1hcmdpbik6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipDby5ub3RlTWFyZ2luKSxzLnN0YXJ0eD1uLXMud2lkdGgrKGVbdC5mcm9tXS53aWR0aC1Dby5hY3Rvck1hcmdpbikvMik6dC50bz09PXQuZnJvbT8oYT1uZS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhpP25lLndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoQ28ud2lkdGgsZVt0LmZyb21dLndpZHRoKSxNbyhDbykpOnQubWVzc2FnZSxNbyhDbykpLHMud2lkdGg9aT9NYXRoLm1heChDby53aWR0aCxlW3QuZnJvbV0ud2lkdGgpOk1hdGgubWF4KGVbdC5mcm9tXS53aWR0aCxDby53aWR0aCxhLndpZHRoKzIqQ28ubm90ZU1hcmdpbikscy5zdGFydHg9bisoZVt0LmZyb21dLndpZHRoLXMud2lkdGgpLzIpOihzLndpZHRoPU1hdGguYWJzKG4rZVt0LmZyb21dLndpZHRoLzItKHIrZVt0LnRvXS53aWR0aC8yKSkrQ28uYWN0b3JNYXJnaW4scy5zdGFydHg9bjxyP24rZVt0LmZyb21dLndpZHRoLzItQ28uYWN0b3JNYXJnaW4vMjpyK2VbdC50b10ud2lkdGgvMi1Dby5hY3Rvck1hcmdpbi8yKSxpJiYocy5tZXNzYWdlPW5lLndyYXBMYWJlbCh0Lm1lc3NhZ2Uscy53aWR0aC0yKkNvLndyYXBQYWRkaW5nLE1vKENvKSkpLG8uZGVidWcoIk5NOlsiLmNvbmNhdChzLnN0YXJ0eCwiLCIpLmNvbmNhdChzLnN0b3B4LCIsIikuY29uY2F0KHMuc3RhcnR5LCIsIikuY29uY2F0KHMuc3RvcHksIjoiKS5jb25jYXQocy53aWR0aCwiLCIpLmNvbmNhdChzLmhlaWdodCwiPSIpLmNvbmNhdCh0Lm1lc3NhZ2UsIl0iKSksc30odCxlKSx0Lm5vdGVNb2RlbD1yLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7KG49dCkuZnJvbT1NYXRoLm1pbihuLmZyb20sci5zdGFydHgpLG4udG89TWF0aC5tYXgobi50byxyLnN0YXJ0eCtyLndpZHRoKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsTWF0aC5hYnMobi5mcm9tLW4udG8pKS1Dby5sYWJlbEJveFdpZHRofSkpKTooaT1mdW5jdGlvbih0LGUpe3ZhciBuPSExO2lmKFtKYS5wYXJzZXIueXkuTElORVRZUEUuU09MSURfT1BFTixKYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX09QRU4sSmEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElELEphLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUQsSmEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTLEphLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1MsSmEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX1BPSU5ULEphLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKHQudHlwZSkmJihuPSEwKSwhbilyZXR1cm57fTt2YXIgcj1Mbyh0LmZyb20sZSksaT1Mbyh0LnRvLGUpLGE9clswXTw9aVswXT8xOjAsbz1yWzBdPGlbMF0/MDoxLHM9ci5jb25jYXQoaSksYz1NYXRoLmFicyhpW29dLXJbYV0pO3Qud3JhcCYmdC5tZXNzYWdlJiYodC5tZXNzYWdlPW5lLndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoYysyKkNvLndyYXBQYWRkaW5nLENvLndpZHRoKSxBbyhDbykpKTt2YXIgdT1uZS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0Lm1lc3NhZ2UsQW8oQ28pKTtyZXR1cm57d2lkdGg6TWF0aC5tYXgodC53cmFwPzA6dS53aWR0aCsyKkNvLndyYXBQYWRkaW5nLGMrMipDby53cmFwUGFkZGluZyxDby53aWR0aCksaGVpZ2h0OjAsc3RhcnR4OnJbYV0sc3RvcHg6aVtvXSxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlLHR5cGU6dC50eXBlLHdyYXA6dC53cmFwLGZyb21Cb3VuZHM6TWF0aC5taW4uYXBwbHkobnVsbCxzKSx0b0JvdW5kczpNYXRoLm1heC5hcHBseShudWxsLHMpfX0odCxlKSx0Lm1zZ01vZGVsPWksaS5zdGFydHgmJmkuc3RvcHgmJnMubGVuZ3RoPjAmJnMuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYobj1yLGkuc3RhcnR4PT09aS5zdG9weCl7dmFyIGE9ZVt0LmZyb21dLG89ZVt0LnRvXTtuLmZyb209TWF0aC5taW4oYS54LWkud2lkdGgvMixhLngtYS53aWR0aC8yLG4uZnJvbSksbi50bz1NYXRoLm1heChvLngraS53aWR0aC8yLG8ueCthLndpZHRoLzIsbi50byksbi53aWR0aD1NYXRoLm1heChuLndpZHRoLE1hdGguYWJzKG4udG8tbi5mcm9tKSktQ28ubGFiZWxCb3hXaWR0aH1lbHNlIG4uZnJvbT1NYXRoLm1pbihpLnN0YXJ0eCxuLmZyb20pLG4udG89TWF0aC5tYXgoaS5zdG9weCxuLnRvKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsaS53aWR0aCktQ28ubGFiZWxCb3hXaWR0aH0pKSl9KSksU28uYWN0aXZhdGlvbnM9W10sby5kZWJ1ZygiTG9vcCB0eXBlIHdpZHRoczoiLGEpLGF9LGpvPXtib3VuZHM6U28sZHJhd0FjdG9yczpObyxzZXRDb25mOkJvLGRyYXc6ZnVuY3Rpb24odCxlKXtDbz1oZSgpLnNlcXVlbmNlLEphLnBhcnNlci55eS5jbGVhcigpLEphLnBhcnNlci55eS5zZXRXcmFwKENvLndyYXApLEphLnBhcnNlci5wYXJzZSh0KyJcbiIpLFNvLmluaXQoKSxvLmRlYnVnKCJDOiIuY29uY2F0KEpTT04uc3RyaW5naWZ5KENvLG51bGwsMikpKTt2YXIgbj1PYmplY3QodS5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpLHI9SmEucGFyc2VyLnl5LmdldEFjdG9ycygpLGk9SmEucGFyc2VyLnl5LmdldEFjdG9yS2V5cygpLGE9SmEucGFyc2VyLnl5LmdldE1lc3NhZ2VzKCkscz1KYS5wYXJzZXIueXkuZ2V0VGl0bGUoKSxjPVJvKHIsYSk7Q28uaGVpZ2h0PUZvKHIsYyksTm8obixyLGksMCk7dmFyIGw9UG8oYSxyLGMpO0VvLmluc2VydEFycm93SGVhZChuKSxFby5pbnNlcnRBcnJvd0Nyb3NzSGVhZChuKSxFby5pbnNlcnRBcnJvd0ZpbGxlZEhlYWQobiksRW8uaW5zZXJ0U2VxdWVuY2VOdW1iZXIobik7dmFyIGg9MTthLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLGksYTtzd2l0Y2godC50eXBlKXtjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5OT1RFOmk9dC5ub3RlTW9kZWwsZnVuY3Rpb24odCxlKXtTby5idW1wVmVydGljYWxQb3MoQ28uYm94TWFyZ2luKSxlLmhlaWdodD1Dby5ib3hNYXJnaW4sZS5zdGFydHk9U28uZ2V0VmVydGljYWxQb3MoKTt2YXIgbj1Fby5nZXROb3RlUmVjdCgpO24ueD1lLnN0YXJ0eCxuLnk9ZS5zdGFydHksbi53aWR0aD1lLndpZHRofHxDby53aWR0aCxuLmNsYXNzPSJub3RlIjt2YXIgcj10LmFwcGVuZCgiZyIpLGk9RW8uZHJhd1JlY3QocixuKSxhPUVvLmdldFRleHRPYmooKTthLng9ZS5zdGFydHgsYS55PWUuc3RhcnR5LGEud2lkdGg9bi53aWR0aCxhLmR5PSIxZW0iLGEudGV4dD1lLm1lc3NhZ2UsYS5jbGFzcz0ibm90ZVRleHQiLGEuZm9udEZhbWlseT1Dby5ub3RlRm9udEZhbWlseSxhLmZvbnRTaXplPUNvLm5vdGVGb250U2l6ZSxhLmZvbnRXZWlnaHQ9Q28ubm90ZUZvbnRXZWlnaHQsYS5hbmNob3I9Q28ubm90ZUFsaWduLGEudGV4dE1hcmdpbj1Dby5ub3RlTWFyZ2luLGEudmFsaWduPUNvLm5vdGVBbGlnbjt2YXIgbz1ibyhyLGEpLHM9TWF0aC5yb3VuZChvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuX2dyb3Vwc3x8dClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSk7aS5hdHRyKCJoZWlnaHQiLHMrMipDby5ub3RlTWFyZ2luKSxlLmhlaWdodCs9cysyKkNvLm5vdGVNYXJnaW4sU28uYnVtcFZlcnRpY2FsUG9zKHMrMipDby5ub3RlTWFyZ2luKSxlLnN0b3B5PWUuc3RhcnR5K3MrMipDby5ub3RlTWFyZ2luLGUuc3RvcHg9ZS5zdGFydHgrbi53aWR0aCxTby5pbnNlcnQoZS5zdGFydHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxTby5tb2RlbHMuYWRkTm90ZShlKX0obixpKTticmVhaztjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6U28ubmV3QWN0aXZhdGlvbih0LG4scik7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX0VORDohZnVuY3Rpb24odCxlKXt2YXIgcj1Tby5lbmRBY3RpdmF0aW9uKHQpO3Iuc3RhcnR5KzE4PmUmJihyLnN0YXJ0eT1lLTYsZSs9MTIpLEVvLmRyYXdBY3RpdmF0aW9uKG4scixlLENvLERvKHQuZnJvbS5hY3RvcikubGVuZ3RoKSxTby5pbnNlcnQoci5zdGFydHgsZS0xMCxyLnN0b3B4LGUpfSh0LFNvLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfU1RBUlQ6SW8obCx0LENvLmJveE1hcmdpbixDby5ib3hNYXJnaW4rQ28uYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIFNvLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuTE9PUF9FTkQ6ZT1Tby5lbmRMb29wKCksRW8uZHJhd0xvb3AobixlLCJsb29wIixDbyksU28uYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktU28uZ2V0VmVydGljYWxQb3MoKSksU28ubW9kZWxzLmFkZExvb3AoZSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuUkVDVF9TVEFSVDpJbyhsLHQsQ28uYm94TWFyZ2luLENvLmJveE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIFNvLm5ld0xvb3Aodm9pZCAwLHQubWVzc2FnZSl9KSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuUkVDVF9FTkQ6ZT1Tby5lbmRMb29wKCksRW8uZHJhd0JhY2tncm91bmRSZWN0KG4sZSksU28ubW9kZWxzLmFkZExvb3AoZSksU28uYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktU28uZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuT1BUX1NUQVJUOklvKGwsdCxDby5ib3hNYXJnaW4sQ28uYm94TWFyZ2luK0NvLmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBTby5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9FTkQ6ZT1Tby5lbmRMb29wKCksRW8uZHJhd0xvb3AobixlLCJvcHQiLENvKSxTby5idW1wVmVydGljYWxQb3MoZS5zdG9weS1Tby5nZXRWZXJ0aWNhbFBvcygpKSxTby5tb2RlbHMuYWRkTG9vcChlKTticmVhaztjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfU1RBUlQ6SW8obCx0LENvLmJveE1hcmdpbixDby5ib3hNYXJnaW4rQ28uYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIFNvLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VMU0U6SW8obCx0LENvLmJveE1hcmdpbitDby5ib3hUZXh0TWFyZ2luLENvLmJveE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIFNvLmFkZFNlY3Rpb25Ub0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VORDplPVNvLmVuZExvb3AoKSxFby5kcmF3TG9vcChuLGUsImFsdCIsQ28pLFNvLmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LVNvLmdldFZlcnRpY2FsUG9zKCkpLFNvLm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9TVEFSVDpJbyhsLHQsQ28uYm94TWFyZ2luLENvLmJveE1hcmdpbitDby5ib3hUZXh0TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gU28ubmV3TG9vcCh0KX0pKTticmVhaztjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfQU5EOklvKGwsdCxDby5ib3hNYXJnaW4rQ28uYm94VGV4dE1hcmdpbixDby5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBTby5hZGRTZWN0aW9uVG9Mb29wKHQpfSkpO2JyZWFrO2Nhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9FTkQ6ZT1Tby5lbmRMb29wKCksRW8uZHJhd0xvb3AobixlLCJwYXIiLENvKSxTby5idW1wVmVydGljYWxQb3MoZS5zdG9weS1Tby5nZXRWZXJ0aWNhbFBvcygpKSxTby5tb2RlbHMuYWRkTG9vcChlKTticmVhaztkZWZhdWx0OnRyeXsoYT10Lm1zZ01vZGVsKS5zdGFydHk9U28uZ2V0VmVydGljYWxQb3MoKSxhLnNlcXVlbmNlSW5kZXg9aCxmdW5jdGlvbih0LGUpe1NvLmJ1bXBWZXJ0aWNhbFBvcygxMCk7dmFyIG49ZS5zdGFydHgscj1lLnN0b3B4LGk9ZS5zdGFydHksYT1lLm1lc3NhZ2Usbz1lLnR5cGUscz1lLnNlcXVlbmNlSW5kZXgsYz1udC5zcGxpdEJyZWFrcyhhKS5sZW5ndGgsdT1uZS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhhLEFvKENvKSksbD11LmhlaWdodC9jO2UuaGVpZ2h0Kz1sLFNvLmJ1bXBWZXJ0aWNhbFBvcyhsKTt2YXIgaD1Fby5nZXRUZXh0T2JqKCk7aC54PW4saC55PWkrMTAsaC53aWR0aD1yLW4saC5jbGFzcz0ibWVzc2FnZVRleHQiLGguZHk9IjFlbSIsaC50ZXh0PWEsaC5mb250RmFtaWx5PUNvLm1lc3NhZ2VGb250RmFtaWx5LGguZm9udFNpemU9Q28ubWVzc2FnZUZvbnRTaXplLGguZm9udFdlaWdodD1Dby5tZXNzYWdlRm9udFdlaWdodCxoLmFuY2hvcj1Dby5tZXNzYWdlQWxpZ24saC52YWxpZ249Q28ubWVzc2FnZUFsaWduLGgudGV4dE1hcmdpbj1Dby53cmFwUGFkZGluZyxoLnRzcGFuPSExLGJvKHQsaCk7dmFyIGYsZCxwPXUuaGVpZ2h0LTEwLHk9dS53aWR0aDtpZihuPT09cil7ZD1Tby5nZXRWZXJ0aWNhbFBvcygpK3AsQ28ucmlnaHRBbmdsZXM/Zj10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICAiLmNvbmNhdChuLCIsIikuY29uY2F0KGQsIiBIICIpLmNvbmNhdChuK01hdGgubWF4KENvLndpZHRoLzIseS8yKSwiIFYgIikuY29uY2F0KGQrMjUsIiBIICIpLmNvbmNhdChuKSk6KHArPUNvLmJveE1hcmdpbixkPVNvLmdldFZlcnRpY2FsUG9zKCkrcCxmPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gIituKyIsIitkKyIgQyAiKyhuKzYwKSsiLCIrKGQtMTApKyIgIisobis2MCkrIiwiKyhkKzMwKSsiICIrbisiLCIrKGQrMjApKSkscCs9MzA7dmFyIGc9TWF0aC5tYXgoeS8yLENvLndpZHRoLzIpO1NvLmluc2VydChuLWcsU28uZ2V0VmVydGljYWxQb3MoKS0xMCtwLHIrZyxTby5nZXRWZXJ0aWNhbFBvcygpKzMwK3ApfWVsc2UgcCs9Q28uYm94TWFyZ2luLGQ9U28uZ2V0VmVydGljYWxQb3MoKStwLChmPXQuYXBwZW5kKCJsaW5lIikpLmF0dHIoIngxIixuKSxmLmF0dHIoInkxIixkKSxmLmF0dHIoIngyIixyKSxmLmF0dHIoInkyIixkKSxTby5pbnNlcnQobixkLTEwLHIsZCk7bz09PUphLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUR8fG89PT1KYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX0NST1NTfHxvPT09SmEucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9QT0lOVHx8bz09PUphLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfT1BFTj8oZi5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMsIDMiKSxmLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUxIikpOmYuYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTAiKTt2YXIgbT0iIjtDby5hcnJvd01hcmtlckFic29sdXRlJiYobT0obT0obT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxmLmF0dHIoInN0cm9rZS13aWR0aCIsMiksZi5hdHRyKCJzdHJva2UiLCJub25lIiksZi5zdHlsZSgiZmlsbCIsIm5vbmUiKSxvIT09SmEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEJiZvIT09SmEucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRHx8Zi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiI2Fycm93aGVhZCkiKSxvIT09SmEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX1BPSU5UJiZvIT09SmEucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9QT0lOVHx8Zi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiI2ZpbGxlZC1oZWFkKSIpLG8hPT1KYS5wYXJzZXIueXkuTElORVRZUEUuU09MSURfQ1JPU1MmJm8hPT1KYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX0NST1NTfHxmLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjY3Jvc3NoZWFkKSIpLChtby5zaG93U2VxdWVuY2VOdW1iZXJzKCl8fENvLnNob3dTZXF1ZW5jZU51bWJlcnMpJiYoZi5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjc2VxdWVuY2VudW1iZXIpIiksdC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixkKzQpLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoImZvbnQtc2l6ZSIsIjEycHgiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInRleHRMZW5ndGgiLCIxNnB4IikuYXR0cigiY2xhc3MiLCJzZXF1ZW5jZU51bWJlciIpLnRleHQocykpLFNvLmJ1bXBWZXJ0aWNhbFBvcyhwKSxlLmhlaWdodCs9cCxlLnN0b3B5PWUuc3RhcnR5K2UuaGVpZ2h0LFNvLmluc2VydChlLmZyb21Cb3VuZHMsZS5zdGFydHksZS50b0JvdW5kcyxlLnN0b3B5KX0obixhKSxTby5tb2RlbHMuYWRkTWVzc2FnZShhKX1jYXRjaCh0KXtvLmVycm9yKCJlcnJvciB3aGlsZSBkcmF3aW5nIG1lc3NhZ2UiLHQpfX1bSmEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX09QRU4sSmEucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9PUEVOLEphLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRCxKYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVELEphLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9DUk9TUyxKYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX0NST1NTLEphLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9QT0lOVCxKYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX1BPSU5UXS5pbmNsdWRlcyh0LnR5cGUpJiZoKyt9KSksQ28ubWlycm9yQWN0b3JzJiYoU28uYnVtcFZlcnRpY2FsUG9zKDIqQ28uYm94TWFyZ2luKSxObyhuLHIsaSxTby5nZXRWZXJ0aWNhbFBvcygpKSk7dmFyIGY9U28uZ2V0Qm91bmRzKCkuYm91bmRzO28uZGVidWcoIkZvciBsaW5lIGhlaWdodCBmaXggUXVlcnlpbmc6ICMiK2UrIiAuYWN0b3ItbGluZSIpLE9iamVjdCh1LnNlbGVjdEFsbCkoIiMiK2UrIiAuYWN0b3ItbGluZSIpLmF0dHIoInkyIixmLnN0b3B5KTt2YXIgZD1mLnN0b3B5LWYuc3RhcnR5KzIqQ28uZGlhZ3JhbU1hcmdpblk7Q28ubWlycm9yQWN0b3JzJiYoZD1kLUNvLmJveE1hcmdpbitDby5ib3R0b21NYXJnaW5BZGopO3ZhciBwPWYuc3RvcHgtZi5zdGFydHgrMipDby5kaWFncmFtTWFyZ2luWDtzJiZuLmFwcGVuZCgidGV4dCIpLnRleHQocykuYXR0cigieCIsKGYuc3RvcHgtZi5zdGFydHgpLzItMipDby5kaWFncmFtTWFyZ2luWCkuYXR0cigieSIsLTI1KSx0ZShuLGQscCxDby51c2VNYXhXaWR0aCk7dmFyIHk9cz80MDowO24uYXR0cigidmlld0JveCIsZi5zdGFydHgtQ28uZGlhZ3JhbU1hcmdpblgrIiAtIisoQ28uZGlhZ3JhbU1hcmdpblkreSkrIiAiK3ArIiAiKyhkK3kpKSxvLmRlYnVnKCJtb2RlbHM6IixTby5tb2RlbHMpfX0sWW89bigyMiksem89bi5uKFlvKTtmdW5jdGlvbiBVbyh0KXtyZXR1cm4oVW89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgJG89ZnVuY3Rpb24odCl7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpfSxxbz1bXSxXbz17cm9vdDp7cmVsYXRpb25zOltdLHN0YXRlczp7fSxkb2N1bWVudHM6e319fSxIbz1Xby5yb290LFZvPTAsR289ZnVuY3Rpb24odCxlLG4scixpKXt2b2lkIDA9PT1Iby5zdGF0ZXNbdF0/SG8uc3RhdGVzW3RdPXtpZDp0LGRlc2NyaXB0aW9uczpbXSx0eXBlOmUsZG9jOm4sbm90ZTppfTooSG8uc3RhdGVzW3RdLmRvY3x8KEhvLnN0YXRlc1t0XS5kb2M9biksSG8uc3RhdGVzW3RdLnR5cGV8fChIby5zdGF0ZXNbdF0udHlwZT1lKSksciYmKG8uaW5mbygiQWRkaW5nIHN0YXRlICIsdCxyKSwic3RyaW5nIj09dHlwZW9mIHImJktvKHQsci50cmltKCkpLCJvYmplY3QiPT09VW8ocikmJnIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIEtvKHQsZS50cmltKCkpfSkpKSxpJiYoSG8uc3RhdGVzW3RdLm5vdGU9aSl9LFhvPWZ1bmN0aW9uKCl7SG89KFdvPXtyb290OntyZWxhdGlvbnM6W10sc3RhdGVzOnt9LGRvY3VtZW50czp7fX19KS5yb290LEhvPVdvLnJvb3QsVm89MCwwLEpvPVtdfSxabz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dCxpPWUsYT0iZGVmYXVsdCIsbz0iZGVmYXVsdCI7IlsqXSI9PT10JiYocj0ic3RhcnQiKyArK1ZvLGE9InN0YXJ0IiksIlsqXSI9PT1lJiYoaT0iZW5kIitWbyxvPSJlbmQiKSxHbyhyLGEpLEdvKGksbyksSG8ucmVsYXRpb25zLnB1c2goe2lkMTpyLGlkMjppLHRpdGxlOm59KX0sS289ZnVuY3Rpb24odCxlKXt2YXIgbj1Iby5zdGF0ZXNbdF0scj1lOyI6Ij09PXJbMF0mJihyPXIuc3Vic3RyKDEpLnRyaW0oKSksbi5kZXNjcmlwdGlvbnMucHVzaChyKX0sUW89MCxKbz1bXSx0cz0iVEIiLGVzPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7eWMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoZSgpLnN0YXRlfSxhZGRTdGF0ZTpHbyxjbGVhcjpYbyxnZXRTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gSG8uc3RhdGVzW3RdfSxnZXRTdGF0ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gSG8uc3RhdGVzfSxnZXRSZWxhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gSG8ucmVsYXRpb25zfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIEpvfSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdHN9LGFkZFJlbGF0aW9uOlpvLGdldERpdmlkZXJJZDpmdW5jdGlvbigpe3JldHVybiJkaXZpZGVyLWlkLSIrICsrUW99LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXt0cz10fSxjbGVhbnVwTGFiZWw6ZnVuY3Rpb24odCl7cmV0dXJuIjoiPT09dC5zdWJzdHJpbmcoMCwxKT90LnN1YnN0cigyKS50cmltKCk6dC50cmltKCl9LGxpbmVUeXBlOntMSU5FOjAsRE9UVEVEX0xJTkU6MX0scmVsYXRpb25UeXBlOntBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxsb2dEb2N1bWVudHM6ZnVuY3Rpb24oKXtvLmluZm8oIkRvY3VtZW50cyA9ICIsV28pfSxnZXRSb290RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIHFvfSxzZXRSb290RG9jOmZ1bmN0aW9uKHQpe28uaW5mbygiU2V0dGluZyByb290IGRvYyIsdCkscW89dH0sZ2V0Um9vdERvY1YyOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuLHIpe2lmKCJyZWxhdGlvbiI9PT1uLnN0bXQpdChlLG4uc3RhdGUxLCEwKSx0KGUsbi5zdGF0ZTIsITEpO2Vsc2UgaWYoInN0YXRlIj09PW4uc3RtdCYmIlsqXSI9PT1uLmlkJiYobi5pZD1yP2UuaWQrIl9zdGFydCI6ZS5pZCsiX2VuZCIsbi5zdGFydD1yKSxuLmRvYyl7dmFyIGk9W10sYT0wLG89W107Zm9yKGE9MDthPG4uZG9jLmxlbmd0aDthKyspaWYoImRpdmlkZXIiPT09bi5kb2NbYV0udHlwZSl7dmFyIHM9JG8obi5kb2NbYV0pO3MuZG9jPSRvKG8pLGkucHVzaChzKSxvPVtdfWVsc2Ugby5wdXNoKG4uZG9jW2FdKTtpZihpLmxlbmd0aD4wJiZvLmxlbmd0aD4wKXt2YXIgYz17c3RtdDoic3RhdGUiLGlkOnF0KCksdHlwZToiZGl2aWRlciIsZG9jOiRvKG8pfTtpLnB1c2goJG8oYykpLG4uZG9jPWl9bi5kb2MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlLCEwKX0pKX19KHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOnFvfSwhMCkse2lkOiJyb290Iixkb2M6cW99fSxleHRyYWN0OmZ1bmN0aW9uKHQpe3ZhciBlO2U9dC5kb2M/dC5kb2M6dCxvLmluZm8oZSksWG8oKSxvLmluZm8oIkV4dHJhY3QiLGUpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7InN0YXRlIj09PXQuc3RtdCYmR28odC5pZCx0LnR5cGUsdC5kb2MsdC5kZXNjcmlwdGlvbix0Lm5vdGUpLCJyZWxhdGlvbiI9PT10LnN0bXQmJlpvKHQuc3RhdGUxLmlkLHQuc3RhdGUyLmlkLHQuZGVzY3JpcHRpb24pfSkpfSx0cmltQ29sb246ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI6Ij09PXRbMF0/dC5zdWJzdHIoMSkudHJpbSgpOnQudHJpbSgpfX0sbnM9e30scnM9ZnVuY3Rpb24odCxlKXtuc1t0XT1lfTtmdW5jdGlvbiBpcyh0LGUpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBhcyh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1ufHwiU2V0Ij09PW4pcmV0dXJuIEFycmF5LmZyb20odCk7aWYoIkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gYXModCxlKX0odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtuJiYodD1uKTt2YXIgcj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiByPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtyKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PW4ubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PW4ucmV0dXJufHxuLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGFzKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG9zLHNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKmhlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsaGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KzEuMypoZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIsaGUoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5kZXNjcmlwdGlvbnNbMF0pLm5vZGUoKS5nZXRCQm94KCkscj1uLmhlaWdodCxpPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsaGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixyKy40KmhlKCkuc3RhdGUucGFkZGluZytoZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4raGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsInN0YXRlLWRlc2NyaXB0aW9uIiksYT0hMCxvPSEwO2UuZGVzY3JpcHRpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe2F8fCghZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqaGUoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KGUpO258fHIuYXR0cigiZHkiLGhlKCkuc3RhdGUudGV4dEhlaWdodCl9KGksdCxvKSxvPSExKSxhPSExfSkpO3ZhciBzPXQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGhlKCkuc3RhdGUucGFkZGluZykuYXR0cigieTEiLGhlKCkuc3RhdGUucGFkZGluZytyK2hlKCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsaGUoKS5zdGF0ZS5wYWRkaW5nK3IraGUoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoImNsYXNzIiwiZGVzY3ItZGl2aWRlciIpLGM9aS5ub2RlKCkuZ2V0QkJveCgpLHU9TWF0aC5tYXgoYy53aWR0aCxuLndpZHRoKTtyZXR1cm4gcy5hdHRyKCJ4MiIsdSszKmhlKCkuc3RhdGUucGFkZGluZyksdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixoZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLGhlKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLHUrMipoZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsYy5oZWlnaHQrcisyKmhlKCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLGhlKCkuc3RhdGUucmFkaXVzKSx0fSxjcz1mdW5jdGlvbih0LGUsbil7dmFyIHIsaT1oZSgpLnN0YXRlLnBhZGRpbmcsYT0yKmhlKCkuc3RhdGUucGFkZGluZyxvPXQubm9kZSgpLmdldEJCb3goKSxzPW8ud2lkdGgsYz1vLngsdT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLGhlKCkuc3RhdGUudGl0bGVTaGlmdCkuYXR0cigiZm9udC1zaXplIixoZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChlLmlkKSxsPXUubm9kZSgpLmdldEJCb3goKS53aWR0aCthLGg9TWF0aC5tYXgobCxzKTtoPT09cyYmKGgrPWEpO3ZhciBmPXQubm9kZSgpLmdldEJCb3goKTtlLmRvYyxyPWMtaSxsPnMmJihyPShzLWgpLzIraSksTWF0aC5hYnMoYy1mLngpPGkmJmw+cyYmKHI9Yy0obC1zKS8yKTt2YXIgZD0xLWhlKCkuc3RhdGUudGV4dEhlaWdodDtyZXR1cm4gdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixyKS5hdHRyKCJ5IixkKS5hdHRyKCJjbGFzcyIsbj8iYWx0LWNvbXBvc2l0IjoiY29tcG9zaXQiKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IixmLmhlaWdodCtoZSgpLnN0YXRlLnRleHRIZWlnaHQraGUoKS5zdGF0ZS50aXRsZVNoaWZ0KzEpLmF0dHIoInJ4IiwiMCIpLHUuYXR0cigieCIscitpKSxsPD1zJiZ1LmF0dHIoIngiLGMrKGgtYSkvMi1sLzIraSksdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixyKS5hdHRyKCJ5IixoZSgpLnN0YXRlLnRpdGxlU2hpZnQtaGUoKS5zdGF0ZS50ZXh0SGVpZ2h0LWhlKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsMypoZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInJ4IixoZSgpLnN0YXRlLnJhZGl1cyksdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixyKS5hdHRyKCJ5IixoZSgpLnN0YXRlLnRpdGxlU2hpZnQtaGUoKS5zdGF0ZS50ZXh0SGVpZ2h0LWhlKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQrMysyKmhlKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigicngiLGhlKCkuc3RhdGUucmFkaXVzKSx0fSx1cz1mdW5jdGlvbih0LGUpe2UuYXR0cigiY2xhc3MiLCJzdGF0ZS1ub3RlIik7dmFyIG49ZS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixoZSgpLnN0YXRlLnBhZGRpbmcpLHI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9MCxhPXIuYXBwZW5kKCJ0ZXh0Iik7YS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLGEuYXR0cigiY2xhc3MiLCJub3RlVGV4dCIpO3ZhciBvLHM9dC5yZXBsYWNlKC9cclxuL2csIjxici8+IiksYz0ocz1zLnJlcGxhY2UoL1xuL2csIjxici8+IikpLnNwbGl0KG50LmxpbmVCcmVha1JlZ2V4KSx1PTEuMjUqaGUoKS5zdGF0ZS5ub3RlTWFyZ2luLGw9aXMoYyk7dHJ5e2ZvcihsLnMoKTshKG89bC5uKCkpLmRvbmU7KXt2YXIgaD1vLnZhbHVlLnRyaW0oKTtpZihoLmxlbmd0aD4wKXt2YXIgZj1hLmFwcGVuZCgidHNwYW4iKTtpZihmLnRleHQoaCksMD09PXUpdSs9Zi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodDtpKz11LGYuYXR0cigieCIsZStoZSgpLnN0YXRlLm5vdGVNYXJnaW4pLGYuYXR0cigieSIsbitpKzEuMjUqaGUoKS5zdGF0ZS5ub3RlTWFyZ2luKX19fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfXJldHVybnt0ZXh0V2lkdGg6YS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoLHRleHRIZWlnaHQ6aX19KHQsMCwwLGUuYXBwZW5kKCJnIikpLGk9ci50ZXh0V2lkdGgsYT1yLnRleHRIZWlnaHQ7cmV0dXJuIG4uYXR0cigiaGVpZ2h0IixhKzIqaGUoKS5zdGF0ZS5ub3RlTWFyZ2luKSxuLmF0dHIoIndpZHRoIixpKzIqaGUoKS5zdGF0ZS5ub3RlTWFyZ2luKSxufSxscz1mdW5jdGlvbih0LGUpe3ZhciBuPWUuaWQscj17aWQ6bixsYWJlbDplLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LGk9dC5hcHBlbmQoImciKS5hdHRyKCJpZCIsbikuYXR0cigiY2xhc3MiLCJzdGF0ZUdyb3VwIik7InN0YXJ0Ij09PWUudHlwZSYmZnVuY3Rpb24odCl7dC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwic3RhcnQtc3RhdGUiKS5hdHRyKCJyIixoZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIsaGUoKS5zdGF0ZS5wYWRkaW5nK2hlKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN5IixoZSgpLnN0YXRlLnBhZGRpbmcraGUoKS5zdGF0ZS5zaXplVW5pdCl9KGkpLCJlbmQiPT09ZS50eXBlJiZmdW5jdGlvbih0KXt0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtb3V0ZXIiKS5hdHRyKCJyIixoZSgpLnN0YXRlLnNpemVVbml0K2hlKCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN4IixoZSgpLnN0YXRlLnBhZGRpbmcraGUoKS5zdGF0ZS5zaXplVW5pdCtoZSgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeSIsaGUoKS5zdGF0ZS5wYWRkaW5nK2hlKCkuc3RhdGUuc2l6ZVVuaXQraGUoKS5zdGF0ZS5taW5pUGFkZGluZyksdC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLWlubmVyIikuYXR0cigiciIsaGUoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLGhlKCkuc3RhdGUucGFkZGluZytoZSgpLnN0YXRlLnNpemVVbml0KzIpLmF0dHIoImN5IixoZSgpLnN0YXRlLnBhZGRpbmcraGUoKS5zdGF0ZS5zaXplVW5pdCsyKX0oaSksImZvcmsiIT09ZS50eXBlJiYiam9pbiIhPT1lLnR5cGV8fGZ1bmN0aW9uKHQsZSl7dmFyIG49aGUoKS5zdGF0ZS5mb3JrV2lkdGgscj1oZSgpLnN0YXRlLmZvcmtIZWlnaHQ7aWYoZS5wYXJlbnRJZCl7dmFyIGk9bjtuPXIscj1pfXQuYXBwZW5kKCJyZWN0Iikuc3R5bGUoInN0cm9rZSIsImJsYWNrIikuc3R5bGUoImZpbGwiLCJibGFjayIpLmF0dHIoIndpZHRoIixuKS5hdHRyKCJoZWlnaHQiLHIpLmF0dHIoIngiLGhlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsaGUoKS5zdGF0ZS5wYWRkaW5nKX0oaSxlKSwibm90ZSI9PT1lLnR5cGUmJnVzKGUubm90ZS50ZXh0LGkpLCJkaXZpZGVyIj09PWUudHlwZSYmZnVuY3Rpb24odCl7dC5hcHBlbmQoImxpbmUiKS5zdHlsZSgic3Ryb2tlIiwiZ3JleSIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMyIpLmF0dHIoIngxIixoZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngyIiwyKmhlKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKX0oaSksImRlZmF1bHQiPT09ZS50eXBlJiYwPT09ZS5kZXNjcmlwdGlvbnMubGVuZ3RoJiZmdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMipoZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLGhlKCkuc3RhdGUudGV4dEhlaWdodCsyKmhlKCkuc3RhdGUucGFkZGluZykuYXR0cigiZm9udC1zaXplIixoZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChlLmlkKSxyPW4ubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLGhlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsaGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsci53aWR0aCsyKmhlKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixyLmhlaWdodCsyKmhlKCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLGhlKCkuc3RhdGUucmFkaXVzKX0oaSxlKSwiZGVmYXVsdCI9PT1lLnR5cGUmJmUuZGVzY3JpcHRpb25zLmxlbmd0aD4wJiZzcyhpLGUpO3ZhciBhPWkubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gci53aWR0aD1hLndpZHRoKzIqaGUoKS5zdGF0ZS5wYWRkaW5nLHIuaGVpZ2h0PWEuaGVpZ2h0KzIqaGUoKS5zdGF0ZS5wYWRkaW5nLHJzKG4scikscn0saHM9MDtZby5wYXJzZXIueXk9ZXM7dmFyIGZzPXt9LGRzPWZ1bmN0aW9uIHQoZSxuLHIsaSl7dmFyIGEscz1uZXcgTGUuYS5HcmFwaCh7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLGM9ITA7Zm9yKGE9MDthPGUubGVuZ3RoO2ErKylpZigicmVsYXRpb24iPT09ZVthXS5zdG10KXtjPSExO2JyZWFrfXI/cy5zZXRHcmFwaCh7cmFua2RpcjoiTFIiLG11bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITAscmFua2VyOiJ0aWdodC10cmVlIixyYW5rc2VwOmM/MTpvcy5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6Yz8xOjUwLGlzTXVsdGlHcmFwaDohMH0pOnMuc2V0R3JhcGgoe3JhbmtkaXI6IlRCIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtzZXA6Yz8xOm9zLmVkZ2VMZW5ndGhGYWN0b3Isbm9kZVNlcDpjPzE6NTAscmFua2VyOiJ0aWdodC10cmVlIixpc011bHRpR3JhcGg6ITB9KSxzLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksZXMuZXh0cmFjdChlKTtmb3IodmFyIGw9ZXMuZ2V0U3RhdGVzKCksaD1lcy5nZXRSZWxhdGlvbnMoKSxmPU9iamVjdC5rZXlzKGwpLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9bFtmW2RdXTtyJiYocC5wYXJlbnRJZD1yKTt2YXIgeT12b2lkIDA7aWYocC5kb2Mpe3ZhciBnPW4uYXBwZW5kKCJnIikuYXR0cigiaWQiLHAuaWQpLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpO3k9dChwLmRvYyxnLHAuaWQsIWkpO3ZhciBtPShnPWNzKGcscCxpKSkubm9kZSgpLmdldEJCb3goKTt5LndpZHRoPW0ud2lkdGgseS5oZWlnaHQ9bS5oZWlnaHQrb3MucGFkZGluZy8yLGZzW3AuaWRdPXt5Om9zLmNvbXBvc2l0VGl0bGVTaXplfX1lbHNlIHk9bHMobixwKTtpZihwLm5vdGUpe3ZhciB2PXtkZXNjcmlwdGlvbnM6W10saWQ6cC5pZCsiLW5vdGUiLG5vdGU6cC5ub3RlLHR5cGU6Im5vdGUifSxiPWxzKG4sdik7ImxlZnQgb2YiPT09cC5ub3RlLnBvc2l0aW9uPyhzLnNldE5vZGUoeS5pZCsiLW5vdGUiLGIpLHMuc2V0Tm9kZSh5LmlkLHkpKToocy5zZXROb2RlKHkuaWQseSkscy5zZXROb2RlKHkuaWQrIi1ub3RlIixiKSkscy5zZXRQYXJlbnQoeS5pZCx5LmlkKyItZ3JvdXAiKSxzLnNldFBhcmVudCh5LmlkKyItbm90ZSIseS5pZCsiLWdyb3VwIil9ZWxzZSBzLnNldE5vZGUoeS5pZCx5KX1vLmRlYnVnKCJDb3VudD0iLHMubm9kZUNvdW50KCkscyk7dmFyIHg9MDtoLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlO3grKyxvLmRlYnVnKCJTZXR0aW5nIGVkZ2UiLHQpLHMuc2V0RWRnZSh0LmlkMSx0LmlkMix7cmVsYXRpb246dCx3aWR0aDooZT10LnRpdGxlLGU/ZS5sZW5ndGgqb3MuZm9udFNpemVGYWN0b3I6MSksaGVpZ2h0Om9zLmxhYmVsSGVpZ2h0Km50LmdldFJvd3ModC50aXRsZSkubGVuZ3RoLGxhYmVscG9zOiJjIn0sImlkIit4KX0pKSxCZS5hLmxheW91dChzKSxvLmRlYnVnKCJHcmFwaCBhZnRlciBsYXlvdXQiLHMubm9kZXMoKSk7dmFyIF89bi5ub2RlKCk7cy5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PXMubm9kZSh0KT8oby53YXJuKCJOb2RlICIrdCsiOiAiK0pTT04uc3RyaW5naWZ5KHMubm9kZSh0KSkpLE9iamVjdCh1LnNlbGVjdCkoIiMiK18uaWQrIiAjIit0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy5ub2RlKHQpLngtcy5ub2RlKHQpLndpZHRoLzIpKyIsIisocy5ub2RlKHQpLnkrKGZzW3RdP2ZzW3RdLnk6MCktcy5ub2RlKHQpLmhlaWdodC8yKSsiICkiKSxPYmplY3QodS5zZWxlY3QpKCIjIitfLmlkKyIgIyIrdCkuYXR0cigiZGF0YS14LXNoaWZ0IixzLm5vZGUodCkueC1zLm5vZGUodCkud2lkdGgvMiksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrXy5pZCsiICMiK3QrIiAuZGl2aWRlciIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50RWxlbWVudCxuPTAscj0wO2UmJihlLnBhcmVudEVsZW1lbnQmJihuPWUucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGgpLHI9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoImRhdGEteC1zaGlmdCIpLDEwKSxOdW1iZXIuaXNOYU4ocikmJihyPTApKSx0LnNldEF0dHJpYnV0ZSgieDEiLDAtcis4KSx0LnNldEF0dHJpYnV0ZSgieDIiLG4tci04KX0pKSk6by5kZWJ1ZygiTm8gTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShzLm5vZGUodCkpKX0pKTt2YXIgaz1fLmdldEJCb3goKTtzLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09cy5lZGdlKHQpJiYoby5kZWJ1ZygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkocy5lZGdlKHQpKSksZnVuY3Rpb24odCxlLG4pe2UucG9pbnRzPWUucG9pbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIU51bWJlci5pc05hTih0LnkpfSkpO3ZhciByPWUucG9pbnRzLGk9T2JqZWN0KHUubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUodS5jdXJ2ZUJhc2lzKSxhPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsaShyKSkuYXR0cigiaWQiLCJlZGdlIitocykuYXR0cigiY2xhc3MiLCJ0cmFuc2l0aW9uIikscz0iIjtpZihoZSgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJihzPShzPShzPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGEuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK2Z1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIGVzLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjpyZXR1cm4iYWdncmVnYXRpb24iO2Nhc2UgZXMucmVsYXRpb25UeXBlLkVYVEVOU0lPTjpyZXR1cm4iZXh0ZW5zaW9uIjtjYXNlIGVzLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2UgZXMucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k6cmV0dXJuImRlcGVuZGVuY3kifX0oZXMucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksdm9pZCAwIT09bi50aXRsZSl7Zm9yKHZhciBjPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzdGF0ZUxhYmVsIiksbD1uZS5jYWxjTGFiZWxQb3NpdGlvbihlLnBvaW50cyksaD1sLngsZj1sLnksZD1udC5nZXRSb3dzKG4udGl0bGUpLHA9MCx5PVtdLGc9MCxtPTAsdj0wO3Y8PWQubGVuZ3RoO3YrKyl7dmFyIGI9Yy5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZFt2XSkuYXR0cigieCIsaCkuYXR0cigieSIsZitwKSx4PWIubm9kZSgpLmdldEJCb3goKTtpZihnPU1hdGgubWF4KGcseC53aWR0aCksbT1NYXRoLm1pbihtLHgueCksby5pbmZvKHgueCxoLGYrcCksMD09PXApe3ZhciBfPWIubm9kZSgpLmdldEJCb3goKTtwPV8uaGVpZ2h0LG8uaW5mbygiVGl0bGUgaGVpZ2h0IixwLGYpfXkucHVzaChiKX12YXIgaz1wKmQubGVuZ3RoO2lmKGQubGVuZ3RoPjEpe3ZhciB3PShkLmxlbmd0aC0xKSpwKi41O3kuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5hdHRyKCJ5IixmK2UqcC13KX0pKSxrPXAqZC5sZW5ndGh9dmFyIFQ9Yy5ub2RlKCkuZ2V0QkJveCgpO2MuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4IixoLWcvMi1oZSgpLnN0YXRlLnBhZGRpbmcvMikuYXR0cigieSIsZi1rLzItaGUoKS5zdGF0ZS5wYWRkaW5nLzItMy41KS5hdHRyKCJ3aWR0aCIsZytoZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsaytoZSgpLnN0YXRlLnBhZGRpbmcpLG8uaW5mbyhUKX1ocysrfShuLHMuZWRnZSh0KSxzLmVkZ2UodCkucmVsYXRpb24pKX0pKSxrPV8uZ2V0QkJveCgpO3ZhciB3PXtpZDpyfHwicm9vdCIsbGFiZWw6cnx8InJvb3QiLHdpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiB3LndpZHRoPWsud2lkdGgrMipvcy5wYWRkaW5nLHcuaGVpZ2h0PWsuaGVpZ2h0KzIqb3MucGFkZGluZyxvLmRlYnVnKCJEb2MgcmVuZGVyZWQiLHcscyksd30scHM9ZnVuY3Rpb24oKXt9LHlzPWZ1bmN0aW9uKHQsZSl7b3M9aGUoKS5zdGF0ZSxZby5wYXJzZXIueXkuY2xlYXIoKSxZby5wYXJzZXIucGFyc2UodCksby5kZWJ1ZygiUmVuZGVyaW5nIGRpYWdyYW0gIit0KTt2YXIgbj1PYmplY3QodS5zZWxlY3QpKCJbaWQ9JyIuY29uY2F0KGUsIiddIikpO24uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKSxuZXcgTGUuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZGlyOiJSTCJ9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO3ZhciByPWVzLmdldFJvb3REb2MoKTtkcyhyLG4sdm9pZCAwLCExKTt2YXIgaT1vcy5wYWRkaW5nLGE9bi5ub2RlKCkuZ2V0QkJveCgpLHM9YS53aWR0aCsyKmksYz1hLmhlaWdodCsyKmk7dGUobixjLDEuNzUqcyxvcy51c2VNYXhXaWR0aCksbi5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQoYS54LW9zLnBhZGRpbmcsIiAgIikuY29uY2F0KGEueS1vcy5wYWRkaW5nLCIgIikrcysiICIrYyl9LGdzPXt9LG1zPXt9LHZzPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCJyb290IiE9PW4uaWQpe3ZhciBpPSJyZWN0IjshMD09PW4uc3RhcnQmJihpPSJzdGFydCIpLCExPT09bi5zdGFydCYmKGk9ImVuZCIpLCJkZWZhdWx0IiE9PW4udHlwZSYmKGk9bi50eXBlKSxtc1tuLmlkXXx8KG1zW24uaWRdPXtpZDpuLmlkLHNoYXBlOmksZGVzY3JpcHRpb246bi5pZCxjbGFzc2VzOiJzdGF0ZWRpYWdyYW0tc3RhdGUifSksbi5kZXNjcmlwdGlvbiYmKEFycmF5LmlzQXJyYXkobXNbbi5pZF0uZGVzY3JpcHRpb24pPyhtc1tuLmlkXS5zaGFwZT0icmVjdFdpdGhUaXRsZSIsbXNbbi5pZF0uZGVzY3JpcHRpb24ucHVzaChuLmRlc2NyaXB0aW9uKSk6bXNbbi5pZF0uZGVzY3JpcHRpb24ubGVuZ3RoPjA/KG1zW24uaWRdLnNoYXBlPSJyZWN0V2l0aFRpdGxlIixtc1tuLmlkXS5kZXNjcmlwdGlvbj09PW4uaWQ/bXNbbi5pZF0uZGVzY3JpcHRpb249W24uZGVzY3JpcHRpb25dOm1zW24uaWRdLmRlc2NyaXB0aW9uPVttc1tuLmlkXS5kZXNjcmlwdGlvbixuLmRlc2NyaXB0aW9uXSk6KG1zW24uaWRdLnNoYXBlPSJyZWN0Iixtc1tuLmlkXS5kZXNjcmlwdGlvbj1uLmRlc2NyaXB0aW9uKSksIW1zW24uaWRdLnR5cGUmJm4uZG9jJiYoby5pbmZvKCJTZXR0aW5nIGNsdXN0ZXIgZm9yICIsbi5pZCxfcyhuKSksbXNbbi5pZF0udHlwZT0iZ3JvdXAiLG1zW24uaWRdLmRpcj1fcyhuKSxtc1tuLmlkXS5zaGFwZT0iZGl2aWRlciI9PT1uLnR5cGU/ImRpdmlkZXIiOiJyb3VuZGVkV2l0aFRpdGxlIixtc1tuLmlkXS5jbGFzc2VzPW1zW24uaWRdLmNsYXNzZXMrIiAiKyhyPyJzdGF0ZWRpYWdyYW0tY2x1c3RlciBzdGF0ZWRpYWdyYW0tY2x1c3Rlci1hbHQiOiJzdGF0ZWRpYWdyYW0tY2x1c3RlciIpKTt2YXIgYT17bGFiZWxTdHlsZToiIixzaGFwZTptc1tuLmlkXS5zaGFwZSxsYWJlbFRleHQ6bXNbbi5pZF0uZGVzY3JpcHRpb24sY2xhc3Nlczptc1tuLmlkXS5jbGFzc2VzLHN0eWxlOiIiLGlkOm4uaWQsZGlyOm1zW24uaWRdLmRpcixkb21JZDoic3RhdGUtIituLmlkKyItIiticyx0eXBlOm1zW24uaWRdLnR5cGUscGFkZGluZzoxNX07aWYobi5ub3RlKXt2YXIgcz17bGFiZWxTdHlsZToiIixzaGFwZToibm90ZSIsbGFiZWxUZXh0Om4ubm90ZS50ZXh0LGNsYXNzZXM6InN0YXRlZGlhZ3JhbS1ub3RlIixzdHlsZToiIixpZDpuLmlkKyItLS0tbm90ZS0iK2JzLGRvbUlkOiJzdGF0ZS0iK24uaWQrIi0tLS1ub3RlLSIrYnMsdHlwZTptc1tuLmlkXS50eXBlLHBhZGRpbmc6MTV9LGM9e2xhYmVsU3R5bGU6IiIsc2hhcGU6Im5vdGVHcm91cCIsbGFiZWxUZXh0Om4ubm90ZS50ZXh0LGNsYXNzZXM6bXNbbi5pZF0uY2xhc3NlcyxzdHlsZToiIixpZDpuLmlkKyItLS0tcGFyZW50Iixkb21JZDoic3RhdGUtIituLmlkKyItLS0tcGFyZW50LSIrYnMsdHlwZToiZ3JvdXAiLHBhZGRpbmc6MH07YnMrKyx0LnNldE5vZGUobi5pZCsiLS0tLXBhcmVudCIsYyksdC5zZXROb2RlKHMuaWQscyksdC5zZXROb2RlKG4uaWQsYSksdC5zZXRQYXJlbnQobi5pZCxuLmlkKyItLS0tcGFyZW50IiksdC5zZXRQYXJlbnQocy5pZCxuLmlkKyItLS0tcGFyZW50Iik7dmFyIHU9bi5pZCxsPXMuaWQ7ImxlZnQgb2YiPT09bi5ub3RlLnBvc2l0aW9uJiYodT1zLmlkLGw9bi5pZCksdC5zZXRFZGdlKHUsbCx7YXJyb3doZWFkOiJub25lIixhcnJvd1R5cGU6IiIsc3R5bGU6ImZpbGw6bm9uZSIsbGFiZWxTdHlsZToiIixjbGFzc2VzOiJ0cmFuc2l0aW9uIG5vdGUtZWRnZSIsYXJyb3doZWFkU3R5bGU6ImZpbGw6ICMzMzMiLGxhYmVscG9zOiJjIixsYWJlbFR5cGU6InRleHQiLHRoaWNrbmVzczoibm9ybWFsIn0pfWVsc2UgdC5zZXROb2RlKG4uaWQsYSl9ZSYmInJvb3QiIT09ZS5pZCYmKG8udHJhY2UoIlNldHRpbmcgbm9kZSAiLG4uaWQsIiB0byBiZSBjaGlsZCBvZiBpdHMgcGFyZW50ICIsZS5pZCksdC5zZXRQYXJlbnQobi5pZCxlLmlkKSksbi5kb2MmJihvLnRyYWNlKCJBZGRpbmcgbm9kZXMgY2hpbGRyZW4gIikseHModCxuLG4uZG9jLCFyKSl9LGJzPTAseHM9ZnVuY3Rpb24odCxlLG4scil7by50cmFjZSgiaXRlbXMiLG4pLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoInN0YXRlIj09PW4uc3RtdHx8ImRlZmF1bHQiPT09bi5zdG10KXZzKHQsZSxuLHIpO2Vsc2UgaWYoInJlbGF0aW9uIj09PW4uc3RtdCl7dnModCxlLG4uc3RhdGUxLHIpLHZzKHQsZSxuLnN0YXRlMixyKTt2YXIgaT17aWQ6ImVkZ2UiK2JzLGFycm93aGVhZDoibm9ybWFsIixhcnJvd1R5cGVFbmQ6ImFycm93X2JhcmIiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsbGFiZWw6bi5kZXNjcmlwdGlvbixhcnJvd2hlYWRTdHlsZToiZmlsbDogIzMzMyIsbGFiZWxwb3M6ImMiLGxhYmVsVHlwZToidGV4dCIsdGhpY2tuZXNzOiJub3JtYWwiLGNsYXNzZXM6InRyYW5zaXRpb24ifSxhPW4uc3RhdGUxLmlkLG89bi5zdGF0ZTIuaWQ7dC5zZXRFZGdlKGEsbyxpLGJzKSxicysrfX0pKX0sX3M9ZnVuY3Rpb24odCxlKXt2YXIgbj1lfHwiVEIiO2lmKHQuZG9jKWZvcih2YXIgcj0wO3I8dC5kb2MubGVuZ3RoO3IrKyl7dmFyIGk9dC5kb2Nbcl07ImRpciI9PT1pLnN0bXQmJihuPWkudmFsdWUpfXJldHVybiBufSxrcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKWdzW2Vbbl1dPXRbZVtuXV19LHdzPWZ1bmN0aW9uKHQsZSl7by5pbmZvKCJEcmF3aW5nIHN0YXRlIGRpYWdyYW0gKHYyKSIsZSksZXMuY2xlYXIoKSxtcz17fTt2YXIgbj16by5hLnBhcnNlcjtuLnl5PWVzLG4ucGFyc2UodCk7dmFyIHI9ZXMuZ2V0RGlyZWN0aW9uKCk7dm9pZCAwPT09ciYmKHI9IkxSIik7dmFyIGk9aGUoKS5zdGF0ZSxhPWkubm9kZVNwYWNpbmd8fDUwLHM9aS5yYW5rU3BhY2luZ3x8NTA7by5pbmZvKGVzLmdldFJvb3REb2NWMigpKSxlcy5leHRyYWN0KGVzLmdldFJvb3REb2NWMigpKSxvLmluZm8oZXMuZ2V0Um9vdERvY1YyKCkpO3ZhciBjPW5ldyBMZS5hLkdyYXBoKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6X3MoZXMuZ2V0Um9vdERvY1YyKCkpLG5vZGVzZXA6YSxyYW5rc2VwOnMsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7dnMoYyx2b2lkIDAsZXMuZ2V0Um9vdERvY1YyKCksITApO3ZhciBsPU9iamVjdCh1LnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSksaD1PYmplY3QodS5zZWxlY3QpKCIjIitlKyIgZyIpO1JuKGgsYyxbImJhcmIiXSwic3RhdGVkaWFncmFtIixlKTt2YXIgZj1sLm5vZGUoKS5nZXRCQm94KCksZD1mLndpZHRoKzE2LHA9Zi5oZWlnaHQrMTY7bC5hdHRyKCJjbGFzcyIsInN0YXRlZGlhZ3JhbSIpO3ZhciB5PWwubm9kZSgpLmdldEJCb3goKTt0ZShsLHAsMS43NSpkLGkudXNlTWF4V2lkdGgpO3ZhciBnPSIiLmNvbmNhdCh5LngtOCwiICIpLmNvbmNhdCh5LnktOCwiICIpLmNvbmNhdChkLCIgIikuY29uY2F0KHApO28uZGVidWcoInZpZXdCb3ggIi5jb25jYXQoZykpLGwuYXR0cigidmlld0JveCIsZyk7Zm9yKHZhciBtPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLHY9MDt2PG0ubGVuZ3RoO3YrKyl7dmFyIGI9bVt2XSx4PWIuZ2V0QkJveCgpLF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtfLnNldEF0dHJpYnV0ZSgicngiLDApLF8uc2V0QXR0cmlidXRlKCJyeSIsMCksXy5zZXRBdHRyaWJ1dGUoIndpZHRoIix4LndpZHRoKSxfLnNldEF0dHJpYnV0ZSgiaGVpZ2h0Iix4LmhlaWdodCksYi5pbnNlcnRCZWZvcmUoXyxiLmZpcnN0Q2hpbGQpfX07ZnVuY3Rpb24gVHModCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIEVzKHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBFcyh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1ufHwiU2V0Ij09PW4pcmV0dXJuIEFycmF5LmZyb20odCk7aWYoIkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gRXModCxlKX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRXModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgQ3M9IiIsU3M9IiIsQXM9W10sTXM9W10sT3M9W10sTnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ITAsZT0wO2U8T3MubGVuZ3RoO2UrKylPc1tlXS5wcm9jZXNzZWQsdD10JiZPc1tlXS5wcm9jZXNzZWQ7cmV0dXJuIHR9LEJzPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7eWMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoZSgpLmpvdXJuZXl9LGNsZWFyOmZ1bmN0aW9uKCl7QXMubGVuZ3RoPTAsTXMubGVuZ3RoPTAsU3M9IiIsQ3M9IiIsT3MubGVuZ3RoPTB9LHNldFRpdGxlOmZ1bmN0aW9uKHQpe0NzPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIENzfSxhZGRTZWN0aW9uOmZ1bmN0aW9uKHQpe1NzPXQsQXMucHVzaCh0KX0sZ2V0U2VjdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gQXN9LGdldFRhc2tzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PU5zKCksZT0wOyF0JiZlPDEwMDspdD1OcygpLGUrKztyZXR1cm4gTXMucHVzaC5hcHBseShNcyxPcyksTXN9LGFkZFRhc2s6ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1YnN0cigxKS5zcGxpdCgiOiIpLHI9MCxpPVtdOzE9PT1uLmxlbmd0aD8ocj1OdW1iZXIoblswXSksaT1bXSk6KHI9TnVtYmVyKG5bMF0pLGk9blsxXS5zcGxpdCgiLCIpKTt2YXIgYT1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSkpLG89e3NlY3Rpb246U3MsdHlwZTpTcyxwZW9wbGU6YSx0YXNrOnQsc2NvcmU6cn07T3MucHVzaChvKX0sYWRkVGFza09yZzpmdW5jdGlvbih0KXt2YXIgZT17c2VjdGlvbjpTcyx0eXBlOlNzLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119O01zLnB1c2goZSl9LGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiB0PVtdLE1zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucGVvcGxlJiZ0LnB1c2guYXBwbHkodCxUcyhlLnBlb3BsZSkpfSkpLFRzKG5ldyBTZXQodCkpLnNvcnQoKTt2YXIgdH19LERzPW4oMjgpLExzPW4ubihEcyksSXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgicmVjdCIpO3JldHVybiBuLmF0dHIoIngiLGUueCksbi5hdHRyKCJ5IixlLnkpLG4uYXR0cigiZmlsbCIsZS5maWxsKSxuLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLG4uYXR0cigid2lkdGgiLGUud2lkdGgpLG4uYXR0cigiaGVpZ2h0IixlLmhlaWdodCksbi5hdHRyKCJyeCIsZS5yeCksbi5hdHRyKCJyeSIsZS5yeSksdm9pZCAwIT09ZS5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyksbn0sUnM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgiY2lyY2xlIik7cmV0dXJuIG4uYXR0cigiY3giLGUuY3gpLG4uYXR0cigiY3kiLGUuY3kpLG4uYXR0cigiY2xhc3MiLCJhY3Rvci0iK2UucG9zKSxuLmF0dHIoImZpbGwiLGUuZmlsbCksbi5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxuLmF0dHIoInIiLGUuciksdm9pZCAwIT09bi5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsbi5jbGFzcyksdm9pZCAwIT09ZS50aXRsZSYmbi5hcHBlbmQoInRpdGxlIikudGV4dChlLnRpdGxlKSxufSxGcz1mdW5jdGlvbih0LGUpe3ZhciBuPWUudGV4dC5yZXBsYWNlKC88YnJccypcLz8+L2dpLCIgIikscj10LmFwcGVuZCgidGV4dCIpO3IuYXR0cigieCIsZS54KSxyLmF0dHIoInkiLGUueSksci5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLHIuc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksdm9pZCAwIT09ZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7dmFyIGk9ci5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54KzIqZS50ZXh0TWFyZ2luKSxpLnRleHQobikscn0sUHM9LTEsanM9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCx3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSxZcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxhLG8scyxjKXtyKGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkrby8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixjKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHQpLHMpfWZ1bmN0aW9uIGUodCxlLG4saSxhLG8scyxjLHUpe2Zvcih2YXIgbD1jLnRhc2tGb250U2l6ZSxoPWMudGFza0ZvbnRGYW1pbHksZj10LnNwbGl0KC88YnJccypcLz8+L2dpKSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqbC1sKihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuYXR0cigiZmlsbCIsdSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbCkuc3R5bGUoImZvbnQtZmFtaWx5IixoKTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuK2EvMikuYXR0cigiZHkiLHApLnRleHQoZltkXSkseS5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoeSxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLHUpe3ZhciBsPW4uYXBwZW5kKCJzd2l0Y2giKSxoPWwuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2guYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKW4gaW4gZSYmdC5hdHRyKG4sZVtuXSl9cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiJmbyI9PT1yLnRleHRQbGFjZW1lbnQ/bjoib2xkIj09PXIudGV4dFBsYWNlbWVudD90OmV9fSgpLHpzPVJzLFVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmFwcGVuZCgiZyIpLGk9anMoKTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPW4ud2lkdGgsaS5oZWlnaHQ9bi5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsSXMocixpKSxZcyhuKShlLnRleHQscixpLngsaS55LGkud2lkdGgsaS5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrZS5udW19LG4sZS5jb2xvdXIpfSwkcz1Gcyxxcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9ZS54K24ud2lkdGgvMixpPXQuYXBwZW5kKCJnIik7UHMrKzt2YXIgYSxvLHM7aS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK1BzKS5hdHRyKCJ4MSIscikuYXR0cigieTEiLGUueSkuYXR0cigieDIiLHIpLmF0dHIoInkyIiw0NTApLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxhPWksbz17Y3g6cixjeTozMDArMzAqKDUtZS5zY29yZSksc2NvcmU6ZS5zY29yZX0sYS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixvLmN4KS5hdHRyKCJjeSIsby5jeSkuYXR0cigiY2xhc3MiLCJmYWNlIikuYXR0cigiciIsMTUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIiksKHM9YS5hcHBlbmQoImciKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsby5jeC01KS5hdHRyKCJjeSIsby5jeS01KS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iikscy5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixvLmN4KzUpLmF0dHIoImN5IixvLmN5LTUpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxvLnNjb3JlPjM/ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHUuYXJjKSgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZShNYXRoLlBJLzIqMykuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cygxNS8yLjIpO3QuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28uY3grIiwiKyhvLmN5KzIpKyIpIil9KHMpOm8uc2NvcmU8Mz9mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodS5hcmMpKCkuc3RhcnRBbmdsZSgzKk1hdGguUEkvMikuZW5kQW5nbGUoTWF0aC5QSS8yKjUpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoMTUvMi4yKTt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLmN4KyIsIisoby5jeSs3KSsiKSIpfShzKTpmdW5jdGlvbih0KXt0LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2UiLDIpLmF0dHIoIngxIixvLmN4LTUpLmF0dHIoInkxIixvLmN5KzcpLmF0dHIoIngyIixvLmN4KzUpLmF0dHIoInkyIixvLmN5KzcpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iil9KHMpO3ZhciBjPWpzKCk7Yy54PWUueCxjLnk9ZS55LGMuZmlsbD1lLmZpbGwsYy53aWR0aD1uLndpZHRoLGMuaGVpZ2h0PW4uaGVpZ2h0LGMuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrZS5udW0sYy5yeD0zLGMucnk9MyxJcyhpLGMpO3ZhciBsPWUueCsxNDtlLnBlb3BsZS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmFjdG9yc1t0XS5jb2xvcixyPXtjeDpsLGN5OmUueSxyOjcsZmlsbDpuLHN0cm9rZToiIzAwMCIsdGl0bGU6dCxwb3M6ZS5hY3RvcnNbdF0ucG9zaXRpb259O1JzKGksciksbCs9MTB9KSksWXMobikoZS50YXNrLGksYy54LGMueSxjLndpZHRoLGMuaGVpZ2h0LHtjbGFzczoidGFzayJ9LG4sZS5jb2xvdXIpfSxXcz1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX07RHMucGFyc2VyLnl5PUJzO3ZhciBIcz17fTt2YXIgVnM9aGUoKS5qb3VybmV5LEdzPWhlKCkuam91cm5leS5sZWZ0TWFyZ2luLFhzPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSx1cGRhdGVWYWw6ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09dFtlXT90W2VdPW46dFtlXT1yKG4sdFtlXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhPWhlKCkuam91cm5leSxvPXRoaXMscz0wO3RoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKChmdW5jdGlvbihjKXtzKys7dmFyIHU9by5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1zKzE7by51cGRhdGVWYWwoYywic3RhcnR5IixlLXUqYS5ib3hNYXJnaW4sTWF0aC5taW4pLG8udXBkYXRlVmFsKGMsInN0b3B5IixyK3UqYS5ib3hNYXJnaW4sTWF0aC5tYXgpLG8udXBkYXRlVmFsKFhzLmRhdGEsInN0YXJ0eCIsdC11KmEuYm94TWFyZ2luLE1hdGgubWluKSxvLnVwZGF0ZVZhbChYcy5kYXRhLCJzdG9weCIsbit1KmEuYm94TWFyZ2luLE1hdGgubWF4KSwiYWN0aXZhdGlvbiIhPT1pJiYoby51cGRhdGVWYWwoYywic3RhcnR4Iix0LXUqYS5ib3hNYXJnaW4sTWF0aC5taW4pLG8udXBkYXRlVmFsKGMsInN0b3B4IixuK3UqYS5ib3hNYXJnaW4sTWF0aC5tYXgpLG8udXBkYXRlVmFsKFhzLmRhdGEsInN0YXJ0eSIsZS11KmEuYm94TWFyZ2luLE1hdGgubWluKSxvLnVwZGF0ZVZhbChYcy5kYXRhLCJzdG9weSIscit1KmEuYm94TWFyZ2luLE1hdGgubWF4KSl9KSl9LGluc2VydDpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1NYXRoLm1pbih0LG4pLGE9TWF0aC5tYXgodCxuKSxvPU1hdGgubWluKGUscikscz1NYXRoLm1heChlLHIpO3RoaXMudXBkYXRlVmFsKFhzLmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoWHMuZGF0YSwic3RhcnR5IixvLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChYcy5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwoWHMuZGF0YSwic3RvcHkiLHMsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGksbyxhLHMpfSxidW1wVmVydGljYWxQb3M6ZnVuY3Rpb24odCl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK3QsdGhpcy5kYXRhLnN0b3B5PXRoaXMudmVydGljYWxQb3N9LGdldFZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fSxacz1Wcy5zZWN0aW9uRmlsbHMsS3M9VnMuc2VjdGlvbkNvbG91cnMsUXM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1oZSgpLmpvdXJuZXksaT0iIixhPW4rKDIqci5oZWlnaHQrci5kaWFncmFtTWFyZ2luWSksbz0wLHM9IiNDQ0MiLGM9ImJsYWNrIix1PTAsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgaD1lW2xdO2lmKGkhPT1oLnNlY3Rpb24pe3M9WnNbbyVacy5sZW5ndGhdLHU9byVacy5sZW5ndGgsYz1Lc1tvJUtzLmxlbmd0aF07dmFyIGY9e3g6bCpyLnRhc2tNYXJnaW4rbCpyLndpZHRoK0dzLHk6NTAsdGV4dDpoLnNlY3Rpb24sZmlsbDpzLG51bTp1LGNvbG91cjpjfTtVcyh0LGYsciksaT1oLnNlY3Rpb24sbysrfXZhciBkPWgucGVvcGxlLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gSHNbZV0mJih0W2VdPUhzW2VdKSx0fSkse30pO2gueD1sKnIudGFza01hcmdpbitsKnIud2lkdGgrR3MsaC55PWEsaC53aWR0aD1yLmRpYWdyYW1NYXJnaW5YLGguaGVpZ2h0PXIuZGlhZ3JhbU1hcmdpblksaC5jb2xvdXI9YyxoLmZpbGw9cyxoLm51bT11LGguYWN0b3JzPWQscXModCxoLHIpLFhzLmluc2VydChoLngsaC55LGgueCtoLndpZHRoK3IudGFza01hcmdpbiw0NTApfX0sSnM9ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7VnNbZV09dFtlXX0pKX0sdGM9ZnVuY3Rpb24odCxlKXt2YXIgbj1oZSgpLmpvdXJuZXk7RHMucGFyc2VyLnl5LmNsZWFyKCksRHMucGFyc2VyLnBhcnNlKHQrIlxuIiksWHMuaW5pdCgpO3ZhciByPU9iamVjdCh1LnNlbGVjdCkoIiMiK2UpO3IuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksV3Mocik7dmFyIGk9RHMucGFyc2VyLnl5LmdldFRhc2tzKCksYT1Ecy5wYXJzZXIueXkuZ2V0VGl0bGUoKSxvPURzLnBhcnNlci55eS5nZXRBY3RvcnMoKTtmb3IodmFyIHMgaW4gSHMpZGVsZXRlIEhzW3NdO3ZhciBjPTA7by5mb3JFYWNoKChmdW5jdGlvbih0KXtIc1t0XT17Y29sb3I6bi5hY3RvckNvbG91cnNbYyVuLmFjdG9yQ29sb3Vycy5sZW5ndGhdLHBvc2l0aW9uOmN9LGMrK30pKSxmdW5jdGlvbih0KXt2YXIgZT1oZSgpLmpvdXJuZXksbj02MDtPYmplY3Qua2V5cyhIcykuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9SHNbcl0uY29sb3IsYT17Y3g6MjAsY3k6bixyOjcsZmlsbDppLHN0cm9rZToiIzAwMCIscG9zOkhzW3JdLnBvc2l0aW9ufTt6cyh0LGEpO3ZhciBvPXt4OjQwLHk6bis3LGZpbGw6IiM2NjYiLHRleHQ6cix0ZXh0TWFyZ2luOjV8ZS5ib3hUZXh0TWFyZ2lufTskcyh0LG8pLG4rPTIwfSkpfShyKSxYcy5pbnNlcnQoMCwwLEdzLDUwKk9iamVjdC5rZXlzKEhzKS5sZW5ndGgpLFFzKHIsaSwwKTt2YXIgbD1Ycy5nZXRCb3VuZHMoKTthJiZyLmFwcGVuZCgidGV4dCIpLnRleHQoYSkuYXR0cigieCIsR3MpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KTt2YXIgaD1sLnN0b3B5LWwuc3RhcnR5KzIqbi5kaWFncmFtTWFyZ2luWSxmPUdzK2wuc3RvcHgrMipuLmRpYWdyYW1NYXJnaW5YO3RlKHIsaCxmLG4udXNlTWF4V2lkdGgpLHIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEdzKS5hdHRyKCJ5MSIsNCpuLmhlaWdodCkuYXR0cigieDIiLGYtR3MtNCkuYXR0cigieTIiLDQqbi5oZWlnaHQpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIik7dmFyIGQ9YT83MDowO3IuYXR0cigidmlld0JveCIsIiIuY29uY2F0KGwuc3RhcnR4LCIgLTI1ICIpLmNvbmNhdChmLCIgIikuY29uY2F0KGgrZCkpLHIuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSxyLmF0dHIoImhlaWdodCIsaCtkKzI1KX0sZWM9e30sbmM9ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZWNbZV09dFtlXX0pKX0scmM9ZnVuY3Rpb24odCxlKXt0cnl7by5kZWJ1ZygiUmVuZXJpbmcgc3ZnIGZvciBzeW50YXggZXJyb3JcbiIpO3ZhciBuPU9iamVjdCh1LnNlbGVjdCkoIiMiK3QpLHI9bi5hcHBlbmQoImciKTtyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDExLjMxMywxMjMuMzEzYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyLTkuMzc1LDkuMzc1LTIwLjY4OC0yMC42ODhjLTEyLjQ4NC0xMi41LTMyLjc2Ni0xMi41LTQ1LjI1LDBsLTE2LDE2Yy0xLjI2MSwxLjI2MS0yLjMwNCwyLjY0OC0zLjMxLDQuMDUxLTIxLjczOS04LjU2MS00NS4zMjQtMTMuNDI2LTcwLjA2NS0xMy40MjYtMTA1Ljg2NywwLTE5Miw4Ni4xMzMtMTkyLDE5MnM4Ni4xMzMsMTkyIDE5MiwxOTIgMTkyLTg2LjEzMyAxOTItMTkyYzAtMjQuNzQxLTQuODY0LTQ4LjMyNy0xMy40MjYtNzAuMDY1IDEuNDAyLTEuMDA3IDIuNzktMi4wNDkgNC4wNTEtMy4zMWwxNi0xNmMxMi41LTEyLjQ5MiAxMi41LTMyLjc1OCAwLTQ1LjI1bC0yMC42ODgtMjAuNjg4IDkuMzc1LTkuMzc1IDMyLjAwMS0zMS45OTl6bS0yMTkuMzEzLDEwMC42ODdjLTUyLjkzOCwwLTk2LDQzLjA2My05Niw5NiAwLDguODM2LTcuMTY0LDE2LTE2LDE2cy0xNi03LjE2NC0xNi0xNmMwLTcwLjU3OCA1Ny40MjItMTI4IDEyOC0xMjggOC44MzYsMCAxNiw3LjE2NCAxNiwxNnMtNy4xNjQsMTYtMTYsMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ1OS4wMiwxNDguOThjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTYsMTZjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYuMDAxLTE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQwMCw2NGM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2di0zMmMwLTguODM2LTcuMTU2LTE2LTE2LTE2LTguODQ0LDAtMTYsNy4xNjQtMTYsMTZ2MzJjMCw4LjgzNiA3LjE1NiwxNiAxNiwxNnoiKSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDk2LDk2LjU4NmgtMzJjLTguODQ0LDAtMTYsNy4xNjQtMTYsMTYgMCw4LjgzNiA3LjE1NiwxNiAxNiwxNmgzMmM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2IDAtOC44MzYtNy4xNTYtMTYtMTYtMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6Iiksci5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxMjQwKS5hdHRyKCJ5IiwyNTApLmF0dHIoImZvbnQtc2l6ZSIsIjE1MHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgiU3ludGF4IGVycm9yIGluIGdyYXBoIiksci5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxMDUwKS5hdHRyKCJ5Iiw0MDApLmF0dHIoImZvbnQtc2l6ZSIsIjEwMHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgibWVybWFpZCB2ZXJzaW9uICIrZSksbi5hdHRyKCJoZWlnaHQiLDEwMCksbi5hdHRyKCJ3aWR0aCIsNDAwKSxuLmF0dHIoInZpZXdCb3giLCI3NjggMCA1MTIgNTEyIil9Y2F0Y2godCl7by5lcnJvcigiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIGluZm8gZGlhZ3JhbSIpLG8uZXJyb3IodC5tZXNzYWdlKX19LGljPWZ1bmN0aW9uKHQpe3JldHVybiJnLmNsYXNzR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBmaWxsOiAiKS5jb25jYXQodC5jbGFzc1RleHQsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICBmb250LXNpemU6IDEwcHg7XG5cbiAgLnRpdGxlIHtcbiAgICBmb250LXdlaWdodDogYm9sZGVyO1xuICB9XG5cbn1cblxuLm5vZGVMYWJlbCwgLmVkZ2VMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5jbGFzc1RleHQsIjtcbn1cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG59XG4ubGFiZWwgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmNsYXNzVGV4dCwiO1xufVxuLmVkZ2VMYWJlbCAubGFiZWwgc3BhbiB7XG4gIGJhY2tncm91bmQ6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbn1cblxuLmNsYXNzVGl0bGUge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuLm5vZGUgcmVjdCxcbiAgLm5vZGUgY2lyY2xlLFxuICAubm9kZSBlbGxpcHNlLFxuICAubm9kZSBwb2x5Z29uLFxuICAubm9kZSBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuXG4uZGl2aWRlciB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBzdHJva2U6IDE7XG59XG5cbmcuY2xpY2thYmxlIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5nLmNsYXNzR3JvdXAgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG59XG5cbmcuY2xhc3NHcm91cCBsaW5lIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLmNsYXNzTGFiZWwgLmJveCB7XG4gIHN0cm9rZTogbm9uZTtcbiAgc3Ryb2tlLXdpZHRoOiAwO1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIG9wYWNpdHk6IDAuNTtcbn1cblxuLmNsYXNzTGFiZWwgLmxhYmVsIHtcbiAgZmlsbDogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5cbi5yZWxhdGlvbiB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbiAgZmlsbDogbm9uZTtcbn1cblxuLmRhc2hlZC1saW5le1xuICBzdHJva2UtZGFzaGFycmF5OiAzO1xufVxuXG4jY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNhZ2dyZWdhdGlvbkVuZCwgLmFnZ3JlZ2F0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4uZWRnZVRlcm1pbmFscyB7XG4gIGZvbnQtc2l6ZTogMTFweDtcbn1cblxuIil9LGFjPWZ1bmN0aW9uKHQpe3JldHVybiIubGFiZWwge1xuICAgIGZvbnQtZmFtaWx5OiAiLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBjb2xvcjogIikuY29uY2F0KHQubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3IsIjtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cbiAgLmNsdXN0ZXItbGFiZWwgc3BhbiB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0LHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFycm93aGVhZENvbG9yLCI7XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyLjBweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgICAgZmlsbDogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5jbHVzdGVyQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jbHVzdGVyQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAuY2x1c3RlciB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuY2x1c3RlciBzcGFuIHtcbiAgICBjb2xvcjogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG4gIC8vIC5jbHVzdGVyIGRpdiB7XG4gIC8vICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgLy8gfVxuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIikuY29uY2F0KHQuYm9yZGVyMiwiO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cbiIpfSxvYz1mdW5jdGlvbih0KXtyZXR1cm4iXG5kZWZzICNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7XG4gICAgZmlsbDogIi5jb25jYXQodC50cmFuc2l0aW9uQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRyYW5zaXRpb25Db2xvciwiO1xuICB9XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTBweDtcblxufVxuZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnN0YXRlTGFiZWxDb2xvciwiO1xufVxuXG5nLnN0YXRlR3JvdXAgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG59XG5cbmcuc3RhdGVHcm91cCBsaW5lIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4udHJhbnNpdGlvbiB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQudHJhbnNpdGlvbkNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbiAgZmlsbDogbm9uZTtcbn1cblxuLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuYmFja2dyb3VuZCwiO1xuICBib3JkZXItYm90dG9tOiAxcHhcbn1cblxuLnN0YXRlR3JvdXAgLmFsdC1jb21wb3NpdCB7XG4gIGZpbGw6ICNlMGUwZTA7XG4gIGJvcmRlci1ib3R0b206IDFweFxufVxuXG4uc3RhdGUtbm90ZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVCa2dDb2xvciwiO1xuXG4gIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICB9XG59XG5cbi5zdGF0ZUxhYmVsIC5ib3gge1xuICBzdHJva2U6IG5vbmU7XG4gIHN0cm9rZS13aWR0aDogMDtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbEJhY2tncm91bmRDb2xvciwiO1xuICBvcGFjaXR5OiAwLjU7XG59XG4uZWRnZUxhYmVsIC5sYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHQudGVydGlhcnlUZXh0Q29sb3IsIjtcbn1cbi5sYWJlbCBkaXYgLmVkZ2VMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dC50ZXJ0aWFyeVRleHRDb2xvciwiO1xufVxuXG4uc3RhdGVMYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuc3RhdGVMYWJlbENvbG9yLCI7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3BlY2lhbFN0YXRlQ29sb3IsIjtcbn1cblxuLm5vZGUgLmZvcmstam9pbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3BlY2lhbFN0YXRlQ29sb3IsIjtcbn1cblxuLm5vZGUgY2lyY2xlLnN0YXRlLWVuZCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmlubmVyRW5kQmFja2dyb3VuZCwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxLjVcbn1cbi5lbmQtc3RhdGUtaW5uZXIge1xuICBmaWxsOiAiKS5jb25jYXQodC5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0LmJhY2tncm91bmQsIjtcbiAgLy8gc3Ryb2tlOiAiKS5jb25jYXQodC5iYWNrZ3JvdW5kLCI7XG4gIHN0cm9rZS13aWR0aDogMS41XG59XG5cbi5ub2RlIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5zdGF0ZUJrZ3x8dC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cbi5ub2RlIHBvbHlnb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiOztcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4jc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4uY2x1c3Rlci1sYWJlbCwgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5zdGF0ZUxhYmVsQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAuZGl2aWRlciB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xufVxuXG4uc3RhdGVkaWFncmFtLXN0YXRlIC50aXRsZS1zdGF0ZSB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHtcbiAgZmlsbDogIikuY29uY2F0KHQuY29tcG9zaXRlQmFja2dyb3VuZHx8dC5iYWNrZ3JvdW5kLCI7XG59XG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIiwiO1xufVxuXG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHtcbiAgcng6MDtcbiAgcnk6MDtcbn1cblxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5kaXZpZGVyIHtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMTAsMTA7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIiwiO1xufVxuXG4ubm90ZS1lZGdlIHtcbiAgc3Ryb2tlLWRhc2hhcnJheTogNTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub3RlQm9yZGVyQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIHJ4OiAwO1xuICByeTogMDtcbn1cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZVRleHRDb2xvciwiO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG59XG4uc3RhdGVkaWFncmFtIC5lZGdlTGFiZWwge1xuICBjb2xvcjogcmVkOyAvLyAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cbiIpfSxzYz17Zmxvd2NoYXJ0OmFjLCJmbG93Y2hhcnQtdjIiOmFjLHNlcXVlbmNlOmZ1bmN0aW9uKHQpe3JldHVybiIuYWN0b3Ige1xuICAgIHN0cm9rZTogIi5jb25jYXQodC5hY3RvckJvcmRlciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdG9yQmtnLCI7XG4gIH1cblxuICB0ZXh0LmFjdG9yID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdG9yVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmFjdG9yLWxpbmUge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0b3JMaW5lQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTAge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgLm1lc3NhZ2VMaW5lMSB7XG4gICAgc3Ryb2tlLXdpZHRoOiAxLjU7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgMjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnNpZ25hbENvbG9yLCI7XG4gIH1cblxuICAjYXJyb3doZWFkIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNpZ25hbENvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgLnNlcXVlbmNlTnVtYmVyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zZXF1ZW5jZU51bWJlckNvbG9yLCI7XG4gIH1cblxuICAjc2VxdWVuY2VudW1iZXIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNpZ25hbENvbG9yLCI7XG4gIH1cblxuICAjY3Jvc3NoZWFkIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNpZ25hbENvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgLm1lc3NhZ2VUZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnNpZ25hbFRleHRDb2xvciwiO1xuICB9XG5cbiAgLmxhYmVsQm94IHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxhYmVsQm94Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbEJveEJrZ0NvbG9yLCI7XG4gIH1cblxuICAubGFiZWxUZXh0LCAubGFiZWxUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmxhYmVsVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7XG4gICAgZmlsbDogIikuY29uY2F0KHQubG9vcFRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wTGluZSB7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgMjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxhYmVsQm94Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gIH1cblxuICAubm90ZSB7XG4gICAgLy9zdHJva2U6ICNkZWNjOTM7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub3RlQm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcbiAgfVxuXG4gIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAuYWN0aXZhdGlvbjAge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Ca2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0aXZhdGlvbkJvcmRlckNvbG9yLCI7XG4gIH1cblxuICAuYWN0aXZhdGlvbjEge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Ca2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0aXZhdGlvbkJvcmRlckNvbG9yLCI7XG4gIH1cblxuICAuYWN0aXZhdGlvbjIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Ca2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0aXZhdGlvbkJvcmRlckNvbG9yLCI7XG4gIH1cbiIpfSxnYW50dDpmdW5jdGlvbih0KXtyZXR1cm4nXG4gIC5tZXJtYWlkLW1haW4tZm9udCB7XG4gICAgZm9udC1mYW1pbHk6ICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cblxuICAuc2VjdGlvbiB7XG4gICAgc3Ryb2tlOiBub25lO1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgfVxuXG4gIC5zZWN0aW9uMCB7XG4gICAgZmlsbDogJy5jb25jYXQodC5zZWN0aW9uQmtnQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uMiB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VjdGlvbkJrZ0NvbG9yMiwiO1xuICB9XG5cbiAgLnNlY3Rpb24xLFxuICAuc2VjdGlvbjMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFsdFNlY3Rpb25Ca2dDb2xvciwiO1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUwIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMSB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlIHtcbiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gICAgLy8gZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gICAgLy8gdGV4dC1oZWlnaHQ6IDE0cHg7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG5cbiAgfVxuXG5cbiAgLyogR3JpZCBhbmQgYXhpcyAqL1xuXG4gIC5ncmlkIC50aWNrIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmdyaWRDb2xvciwiO1xuICAgIG9wYWNpdHk6IDAuODtcbiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7XG4gICAgdGV4dCB7XG4gICAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgICAgZmlsbDogIikuY29uY2F0KHQudGV4dENvbG9yLCI7XG4gICAgfVxuICB9XG5cbiAgLmdyaWQgcGF0aCB7XG4gICAgc3Ryb2tlLXdpZHRoOiAwO1xuICB9XG5cblxuICAvKiBUb2RheSBsaW5lICovXG5cbiAgLnRvZGF5IHtcbiAgICBmaWxsOiBub25lO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQudG9kYXlMaW5lQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuXG5cbiAgLyogVGFzayBzdHlsaW5nICovXG5cbiAgLyogRGVmYXVsdCB0YXNrICovXG5cbiAgLnRhc2sge1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC50YXNrVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuXG4gIC8vIC50YXNrVGV4dDpub3QoW2ZvbnQtc2l6ZV0pIHtcbiAgLy8gICBmb250LXNpemU6ICIpLmNvbmNhdCh0LmdhbnR0Rm9udFNpemUsIjtcbiAgLy8gfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gICAgLy8gZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG5cbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVMZWZ0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiO1xuICAgIHRleHQtYW5jaG9yOiBlbmQ7XG4gICAgLy8gZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gIH1cblxuICAvKiBTcGVjaWFsIGNhc2UgY2xpY2thYmxlICovXG4gIC50YXNrLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIC50YXNrVGV4dC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVMZWZ0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IsIiAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IsIiAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLyogU3BlY2lmaWMgdGFzayBzZXR0aW5ncyBmb3IgdGhlIHNlY3Rpb25zKi9cblxuICAudGFza1RleHQwLFxuICAudGFza1RleHQxLFxuICAudGFza1RleHQyLFxuICAudGFza1RleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENvbG9yLCI7XG4gIH1cblxuICAudGFzazAsXG4gIC50YXNrMSxcbiAgLnRhc2syLFxuICAudGFzazMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tCa2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQudGFza0JvcmRlckNvbG9yLCI7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlMCxcbiAgLnRhc2tUZXh0T3V0c2lkZTJcbiAge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0T3V0c2lkZUNvbG9yLCI7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlMSxcbiAgLnRhc2tUZXh0T3V0c2lkZTMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0T3V0c2lkZUNvbG9yLCI7XG4gIH1cblxuXG4gIC8qIEFjdGl2ZSB0YXNrICovXG5cbiAgLmFjdGl2ZTAsXG4gIC5hY3RpdmUxLFxuICAuYWN0aXZlMixcbiAgLmFjdGl2ZTMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2ZVRhc2tCa2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0aXZlVGFza0JvcmRlckNvbG9yLCI7XG4gIH1cblxuICAuYWN0aXZlVGV4dDAsXG4gIC5hY3RpdmVUZXh0MSxcbiAgLmFjdGl2ZVRleHQyLFxuICAuYWN0aXZlVGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCIgIWltcG9ydGFudDtcbiAgfVxuXG5cbiAgLyogQ29tcGxldGVkIHRhc2sgKi9cblxuICAuZG9uZTAsXG4gIC5kb25lMSxcbiAgLmRvbmUyLFxuICAuZG9uZTMge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuZG9uZVRhc2tCb3JkZXJDb2xvciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmRvbmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuZG9uZVRleHQwLFxuICAuZG9uZVRleHQxLFxuICAuZG9uZVRleHQyLFxuICAuZG9uZVRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuXG4gIC8qIFRhc2tzIG9uIHRoZSBjcml0aWNhbCBsaW5lICovXG5cbiAgLmNyaXQwLFxuICAuY3JpdDEsXG4gIC5jcml0MixcbiAgLmNyaXQzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmNyaXRCb3JkZXJDb2xvciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmNyaXRCa2dDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC5hY3RpdmVDcml0MCxcbiAgLmFjdGl2ZUNyaXQxLFxuICAuYWN0aXZlQ3JpdDIsXG4gIC5hY3RpdmVDcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuZG9uZUNyaXQwLFxuICAuZG9uZUNyaXQxLFxuICAuZG9uZUNyaXQyLFxuICAuZG9uZUNyaXQzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmNyaXRCb3JkZXJDb2xvciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmRvbmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlcztcbiAgfVxuXG4gIC5taWxlc3RvbmUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSBzY2FsZSgwLjgsMC44KTtcbiAgfVxuXG4gIC5taWxlc3RvbmVUZXh0IHtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgLmRvbmVDcml0VGV4dDAsXG4gIC5kb25lQ3JpdFRleHQxLFxuICAuZG9uZUNyaXRUZXh0MixcbiAgLmRvbmVDcml0VGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCIgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5hY3RpdmVDcml0VGV4dDAsXG4gIC5hY3RpdmVDcml0VGV4dDEsXG4gIC5hY3RpdmVDcml0VGV4dDIsXG4gIC5hY3RpdmVDcml0VGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCIgIWltcG9ydGFudDtcbiAgfVxuXG4gIC50aXRsZVRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiICAgIDtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuIil9LGNsYXNzRGlhZ3JhbTppYywiY2xhc3NEaWFncmFtLXYyIjppYyxjbGFzczppYyxzdGF0ZURpYWdyYW06b2Msc3RhdGU6b2MsZ2l0OmZ1bmN0aW9uKCl7cmV0dXJuIlxuICAuY29tbWl0LWlkLFxuICAuY29tbWl0LW1zZyxcbiAgLmJyYW5jaC1sYWJlbCB7XG4gICAgZmlsbDogbGlnaHRncmV5O1xuICAgIGNvbG9yOiBsaWdodGdyZXk7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cbiJ9LGluZm86ZnVuY3Rpb24oKXtyZXR1cm4iIn0scGllOmZ1bmN0aW9uKHQpe3JldHVybiJcbiAgLnBpZUNpcmNsZXtcbiAgICBzdHJva2U6ICIuY29uY2F0KHQucGllU3Ryb2tlQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGggOiAiKS5jb25jYXQodC5waWVTdHJva2VXaWR0aCwiO1xuICAgIG9wYWNpdHkgOiAiKS5jb25jYXQodC5waWVPcGFjaXR5LCI7XG4gIH1cbiAgLnBpZVRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdCh0LnBpZVRpdGxlVGV4dFNpemUsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5waWVUaXRsZVRleHRDb2xvciwiO1xuICAgIGZvbnQtZmFtaWx5OiAiKS5jb25jYXQodC5mb250RmFtaWx5LCI7XG4gIH1cbiAgLnNsaWNlIHtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnBpZVNlY3Rpb25UZXh0Q29sb3IsIjtcbiAgICBmb250LXNpemU6IikuY29uY2F0KHQucGllU2VjdGlvblRleHRTaXplLCI7XG4gICAgLy8gZmlsbDogd2hpdGU7XG4gIH1cbiAgLmxlZ2VuZCB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5waWVMZWdlbmRUZXh0Q29sb3IsIjtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KHQucGllTGVnZW5kVGV4dFNpemUsIjtcbiAgfVxuIil9LGVyOmZ1bmN0aW9uKHQpe3JldHVybiJcbiAgLmVudGl0eUJveCB7XG4gICAgZmlsbDogIi5jb25jYXQodC5tYWluQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIH1cblxuICAuYXR0cmlidXRlQm94T2RkIHtcbiAgICBmaWxsOiAjZmZmZmZmO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLmF0dHJpYnV0ZUJveEV2ZW4ge1xuICAgIGZpbGw6ICNmMmYyZjI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIH1cblxuICAucmVsYXRpb25zaGlwTGFiZWxCb3gge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5Q29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjc7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQudGVydGlhcnlDb2xvciwiO1xuICAgICAgcmVjdCB7XG4gICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIH1cbiAgfVxuXG4gICAgLnJlbGF0aW9uc2hpcExpbmUge1xuICAgICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICB9XG4iKX0sam91cm5leTpmdW5jdGlvbih0KXtyZXR1cm4iLmxhYmVsIHtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgICBjb2xvcjogIi5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgfVxuICAubW91dGgge1xuICAgIHN0cm9rZTogIzY2NjtcbiAgfVxuXG4gIGxpbmUge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQudGV4dENvbG9yLCJcbiAgfVxuXG4gIC5sZWdlbmQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICB9XG5cbiAgLmxhYmVsIHRleHQge1xuICAgIGZpbGw6ICMzMzM7XG4gIH1cbiAgLmxhYmVsIHtcbiAgICBjb2xvcjogIikuY29uY2F0KHQudGV4dENvbG9yLCJcbiAgfVxuXG4gIC5mYWNlIHtcbiAgICAiKS5jb25jYXQodC5mYWNlQ29sb3I/ImZpbGw6ICIuY29uY2F0KHQuZmFjZUNvbG9yKToiZmlsbDogI0ZGRjhEQyIsIjtcbiAgICBzdHJva2U6ICM5OTk7XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFycm93aGVhZENvbG9yLCI7XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgfVxuXG4gIC5jbHVzdGVyIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgYmFja2dyb3VuZDogIikuY29uY2F0KHQudGVydGlhcnlDb2xvciwiO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICIpLmNvbmNhdCh0LmJvcmRlcjIsIjtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTAwO1xuICB9XG5cbiAgLnRhc2stdHlwZS0wLCAuc2VjdGlvbi10eXBlLTAgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUwKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtMSwgLnNlY3Rpb24tdHlwZS0xICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMSk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTIsIC5zZWN0aW9uLXR5cGUtMiAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTIpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS0zLCAuc2VjdGlvbi10eXBlLTMgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUzKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNCwgLnNlY3Rpb24tdHlwZS00ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNCk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTUsIC5zZWN0aW9uLXR5cGUtNSAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTUpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS02LCAuc2VjdGlvbi10eXBlLTYgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGU2KToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNywgLnNlY3Rpb24tdHlwZS03ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNyk6IiIsIjtcbiAgfVxuXG4gIC5hY3Rvci0wIHtcbiAgICAiKS5jb25jYXQodC5hY3RvcjA/ImZpbGw6ICIuY29uY2F0KHQuYWN0b3IwKToiIiwiO1xuICB9XG4gIC5hY3Rvci0xIHtcbiAgICAiKS5jb25jYXQodC5hY3RvcjE/ImZpbGw6ICIuY29uY2F0KHQuYWN0b3IxKToiIiwiO1xuICB9XG4gIC5hY3Rvci0yIHtcbiAgICAiKS5jb25jYXQodC5hY3RvcjI/ImZpbGw6ICIuY29uY2F0KHQuYWN0b3IyKToiIiwiO1xuICB9XG4gIC5hY3Rvci0zIHtcbiAgICAiKS5jb25jYXQodC5hY3RvcjM/ImZpbGw6ICIuY29uY2F0KHQuYWN0b3IzKToiIiwiO1xuICB9XG4gIC5hY3Rvci00IHtcbiAgICAiKS5jb25jYXQodC5hY3RvcjQ/ImZpbGw6ICIuY29uY2F0KHQuYWN0b3I0KToiIiwiO1xuICB9XG4gIC5hY3Rvci01IHtcbiAgICAiKS5jb25jYXQodC5hY3RvcjU/ImZpbGw6ICIuY29uY2F0KHQuYWN0b3I1KToiIiwiO1xuICB9XG5cbiAgfVxuIil9LHJlcXVpcmVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiJcblxuICBtYXJrZXIge1xuICAgIGZpbGw6ICIuY29uY2F0KHQucmVsYXRpb25Db2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQucmVsYXRpb25Db2xvciwiO1xuICB9XG5cbiAgbWFya2VyLmNyb3NzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZm9udFNpemUsIjtcbiAgfVxuXG4gIC5yZXFCb3gge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50QmFja2dyb3VuZCwiO1xuICAgIGZpbGwtb3BhY2l0eTogMTAwJTtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSwiO1xuICB9XG4gIFxuICAucmVxVGl0bGUsIC5yZXFMYWJlbHtcbiAgICBmaWxsOiAgIikuY29uY2F0KHQucmVxdWlyZW1lbnRUZXh0Q29sb3IsIjtcbiAgfVxuICAucmVxTGFiZWxCb3gge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kLCI7XG4gICAgZmlsbC1vcGFjaXR5OiAxMDAlO1xuICB9XG5cbiAgLnJlcS10aXRsZS1saW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSwiO1xuICB9XG4gIC5yZWxhdGlvbnNoaXBMaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlbGF0aW9uQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDE7XG4gIH1cbiAgLnJlbGF0aW9uc2hpcExhYmVsIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5yZWxhdGlvbkxhYmVsQ29sb3IsIjtcbiAgfVxuXG4iKX19LGNjPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4iIHtcbiAgICBmb250LWZhbWlseTogIi5jb25jYXQobi5mb250RmFtaWx5LCI7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQobi5mb250U2l6ZSwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLnRleHRDb2xvciwiXG4gIH1cblxuICAvKiBDbGFzc2VzIGNvbW1vbiBmb3IgbXVsdGlwbGUgZGlhZ3JhbXMgKi9cblxuICAuZXJyb3ItaWNvbiB7XG4gICAgZmlsbDogIikuY29uY2F0KG4uZXJyb3JCa2dDb2xvciwiO1xuICB9XG4gIC5lcnJvci10ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQobi5lcnJvclRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KG4uZXJyb3JUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwge1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICB9XG4gIC5lZGdlLXRoaWNrbmVzcy10aGljayB7XG4gICAgc3Ryb2tlLXdpZHRoOiAzLjVweFxuICB9XG4gIC5lZGdlLXBhdHRlcm4tc29saWQge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDA7XG4gIH1cblxuICAuZWRnZS1wYXR0ZXJuLWRhc2hlZHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAzO1xuICB9XG4gIC5lZGdlLXBhdHRlcm4tZG90dGVkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAyO1xuICB9XG5cbiAgLm1hcmtlciB7XG4gICAgZmlsbDogIikuY29uY2F0KG4ubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQobi5saW5lQ29sb3IsIjtcbiAgfVxuICAubWFya2VyLmNyb3NzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdChuLmxpbmVDb2xvciwiO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KG4uZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KG4uZm9udFNpemUsIjtcbiAgfVxuXG4gICIpLmNvbmNhdChzY1t0XShuKSwiXG5cbiAgIikuY29uY2F0KGUsIlxuIil9O2Z1bmN0aW9uIHVjKHQpe3JldHVybih1Yz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfXZhciBsYz17fSxoYz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKG8uZGVidWcoIkRpcmVjdGl2ZSB0eXBlPSIuY29uY2F0KGUudHlwZSwiIHdpdGggYXJnczoiKSxlLmFyZ3MpLGUudHlwZSl7Y2FzZSJpbml0IjpjYXNlImluaXRpYWxpemUiOlsiY29uZmlnIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09ZS5hcmdzW3RdJiYoImZsb3djaGFydC12MiI9PT1uJiYobj0iZmxvd2NoYXJ0IiksZS5hcmdzW25dPWUuYXJnc1t0XSxkZWxldGUgZS5hcmdzW3RdKX0pKSxvLmRlYnVnKCJzYW5pdGl6ZSBpbiBoYW5kbGVEaXJlY3RpdmUiLGUuYXJncyksZWUoZS5hcmdzKSxvLmRlYnVnKCJzYW5pdGl6ZSBpbiBoYW5kbGVEaXJlY3RpdmUgKGRvbmUpIixlLmFyZ3MpLGUuYXJncyxkZShlLmFyZ3MpO2JyZWFrO2Nhc2Uid3JhcCI6Y2FzZSJub3dyYXAiOnQmJnQuc2V0V3JhcCYmdC5zZXRXcmFwKCJ3cmFwIj09PWUudHlwZSk7YnJlYWs7ZGVmYXVsdDpvLndhcm4oIlVuaGFuZGxlZCBkaXJlY3RpdmU6IHNvdXJjZTogJyUleyIuY29uY2F0KGUudHlwZSwiOiAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZS5hcmdzP2UuYXJnczp7fSksIn0lJSIpLGUpfX07ZnVuY3Rpb24gZmModCl7eWEodC5naXQpLEtyKHQuZmxvd2NoYXJ0KSxyaSh0LmZsb3djaGFydCksdm9pZCAwIT09dC5zZXF1ZW5jZURpYWdyYW0mJmpvLnNldENvbmYoVnQodC5zZXF1ZW5jZSx0LnNlcXVlbmNlRGlhZ3JhbSkpLGpvLnNldENvbmYodC5zZXF1ZW5jZSksemkodC5nYW50dCksWmUodC5jbGFzcykscHModC5zdGF0ZSksa3ModC5zdGF0ZSksd2EodC5jbGFzcyksZXIodC5lciksSnModC5qb3VybmV5KSxLYSh0LnJlcXVpcmVtZW50KSxuYyh0LmNsYXNzKX1mdW5jdGlvbiBkYygpe312YXIgcGM9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOmZ1bmN0aW9uKHQsZSxuLHIpe3BlKCk7dmFyIGk9ZSxhPW5lLmRldGVjdEluaXQoaSk7YSYmZGUoYSk7dmFyIHM9aGUoKTtpZihlLmxlbmd0aD5zLm1heFRleHRTaXplJiYoaT0iZ3JhcGggVEI7YVtNYXhpbXVtIHRleHQgc2l6ZSBpbiBkaWFncmFtIGV4Y2VlZGVkXTtzdHlsZSBhIGZpbGw6I2ZhYSIpLHZvaWQgMCE9PXIpci5pbm5lckhUTUw9IiIsT2JqZWN0KHUuc2VsZWN0KShyKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiZCIrdCkuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitzLmZvbnRGYW1pbHkpLmFwcGVuZCgic3ZnIikuYXR0cigiaWQiLHQpLmF0dHIoIndpZHRoIiwiMTAwJSIpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKS5hcHBlbmQoImciKTtlbHNle3ZhciBjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO2MmJmMucmVtb3ZlKCk7dmFyIGw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2QiK3QpO2wmJmwucmVtb3ZlKCksT2JqZWN0KHUuc2VsZWN0KSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJkIit0KS5hcHBlbmQoInN2ZyIpLmF0dHIoImlkIix0KS5hdHRyKCJ3aWR0aCIsIjEwMCUiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIikuYXBwZW5kKCJnIil9d2luZG93LnR4dD1pLGk9ZnVuY3Rpb24odCl7dmFyIGU9dDtyZXR1cm4gZT0oZT0oZT1lLnJlcGxhY2UoL3N0eWxlLio6XFMqIy4qOy9nLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0xKX0pKSkucmVwbGFjZSgvY2xhc3NEZWYuKjpcUyojLio7L2csKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnN0cmluZygwLHQubGVuZ3RoLTEpfSkpKS5yZXBsYWNlKC8jXHcrOy9nLChmdW5jdGlvbih0KXt2YXIgZT10LnN1YnN0cmluZygxLHQubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChlKT8i76yCwrDCsCIrZSsiwrbDnyI6Iu+sgsKwIitlKyLCtsOfIn0pKX0oaSk7dmFyIGg9T2JqZWN0KHUuc2VsZWN0KSgiI2QiK3QpLm5vZGUoKSxmPW5lLmRldGVjdFR5cGUoaSxzKSxkPWguZmlyc3RDaGlsZCxwPWQuZmlyc3RDaGlsZCx5PSIiO2lmKHZvaWQgMCE9PXMudGhlbWVDU1MmJih5Kz0iXG4iLmNvbmNhdChzLnRoZW1lQ1NTKSksdm9pZCAwIT09cy5mb250RmFtaWx5JiYoeSs9IlxuOnJvb3QgeyAtLW1lcm1haWQtZm9udC1mYW1pbHk6ICIuY29uY2F0KHMuZm9udEZhbWlseSwifSIpKSx2b2lkIDAhPT1zLmFsdEZvbnRGYW1pbHkmJih5Kz0iXG46cm9vdCB7IC0tbWVybWFpZC1hbHQtZm9udC1mYW1pbHk6ICIuY29uY2F0KHMuYWx0Rm9udEZhbWlseSwifSIpKSwiZmxvd2NoYXJ0Ij09PWZ8fCJmbG93Y2hhcnQtdjIiPT09Znx8ImdyYXBoIj09PWYpe3ZhciBnPVFyKGkpLG09cy5odG1sTGFiZWxzfHxzLmZsb3djaGFydC5odG1sTGFiZWxzO2Zvcih2YXIgdiBpbiBnKW0/KHkrPSJcbi4iLmNvbmNhdCh2LCIgPiAqIHsgIikuY29uY2F0KGdbdl0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSx5Kz0iXG4uIi5jb25jYXQodiwiIHNwYW4geyAiKS5jb25jYXQoZ1t2XS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpKTooeSs9IlxuLiIuY29uY2F0KHYsIiBwYXRoIHsgIikuY29uY2F0KGdbdl0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSx5Kz0iXG4uIi5jb25jYXQodiwiIHJlY3QgeyAiKS5jb25jYXQoZ1t2XS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHkrPSJcbi4iLmNvbmNhdCh2LCIgcG9seWdvbiB7ICIpLmNvbmNhdChnW3ZdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikseSs9IlxuLiIuY29uY2F0KHYsIiBlbGxpcHNlIHsgIikuY29uY2F0KGdbdl0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSx5Kz0iXG4uIi5jb25jYXQodiwiIGNpcmNsZSB7ICIpLmNvbmNhdChnW3ZdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IiksZ1t2XS50ZXh0U3R5bGVzJiYoeSs9IlxuLiIuY29uY2F0KHYsIiB0c3BhbiB7ICIpLmNvbmNhdChnW3ZdLnRleHRTdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpKSl9dmFyIGIseCxfPShiPSIjIi5jb25jYXQodCkseD1jYyhmLHkscy50aGVtZVZhcmlhYmxlcyksVyh6KCIiLmNvbmNhdChiLCJ7IikuY29uY2F0KHgsIn0iKSksSCkpLGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtrLmlubmVySFRNTD0iIyIuY29uY2F0KHQsIiAiKStfLGQuaW5zZXJ0QmVmb3JlKGsscCk7dHJ5e3N3aXRjaChmKXtjYXNlImdpdCI6cy5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUseWEocy5naXQpLGdhKGksdCwhMSk7YnJlYWs7Y2FzZSJmbG93Y2hhcnQiOnMuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9cy5hcnJvd01hcmtlckFic29sdXRlLEtyKHMuZmxvd2NoYXJ0KSxKcihpLHQsITEpO2JyZWFrO2Nhc2UiZmxvd2NoYXJ0LXYyIjpzLmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxyaShzLmZsb3djaGFydCksaWkoaSx0LCExKTticmVhaztjYXNlInNlcXVlbmNlIjpzLnNlcXVlbmNlLmFycm93TWFya2VyQWJzb2x1dGU9cy5hcnJvd01hcmtlckFic29sdXRlLHMuc2VxdWVuY2VEaWFncmFtPyhqby5zZXRDb25mKE9iamVjdC5hc3NpZ24ocy5zZXF1ZW5jZSxzLnNlcXVlbmNlRGlhZ3JhbSkpLGNvbnNvbGUuZXJyb3IoImBtZXJtYWlkIGNvbmZpZy5zZXF1ZW5jZURpYWdyYW1gIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGNvbmZpZy5zZXF1ZW5jZWAuIFBsZWFzZSB1cGRhdGUgeW91ciBtZXJtYWlkIGNvbmZpZy4iKSk6am8uc2V0Q29uZihzLnNlcXVlbmNlKSxqby5kcmF3KGksdCk7YnJlYWs7Y2FzZSJnYW50dCI6cy5nYW50dC5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSx6aShzLmdhbnR0KSxVaShpLHQpO2JyZWFrO2Nhc2UiY2xhc3MiOnMuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUsWmUocy5jbGFzcyksS2UoaSx0KTticmVhaztjYXNlImNsYXNzRGlhZ3JhbSI6cy5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxQbihzLmNsYXNzKSxqbihpLHQpO2JyZWFrO2Nhc2Uic3RhdGUiOnMuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUscHMocy5zdGF0ZSkseXMoaSx0KTticmVhaztjYXNlInN0YXRlRGlhZ3JhbSI6cy5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxrcyhzLnN0YXRlKSx3cyhpLHQpO2JyZWFrO2Nhc2UiaW5mbyI6cy5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSx3YShzLmNsYXNzKSxUYShpLHQsVi52ZXJzaW9uKTticmVhaztjYXNlInBpZSI6QmEoaSx0LFYudmVyc2lvbik7YnJlYWs7Y2FzZSJlciI6ZXIocy5lciksbnIoaSx0LFYudmVyc2lvbik7YnJlYWs7Y2FzZSJqb3VybmV5IjpKcyhzLmpvdXJuZXkpLHRjKGksdCxWLnZlcnNpb24pO2JyZWFrO2Nhc2UicmVxdWlyZW1lbnQiOkthKHMucmVxdWlyZW1lbnQpLFFhKGksdCxWLnZlcnNpb24pfX1jYXRjaChlKXt0aHJvdyByYyh0LFYudmVyc2lvbiksZX1PYmplY3QodS5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KHQsJyJdJykpLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKTt2YXIgdz1PYmplY3QodS5zZWxlY3QpKCIjZCIrdCkubm9kZSgpLmlubmVySFRNTDtpZihvLmRlYnVnKCJjbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSIscy5hcnJvd01hcmtlckFic29sdXRlKSxzLmFycm93TWFya2VyQWJzb2x1dGUmJiJmYWxzZSIhPT1zLmFycm93TWFya2VyQWJzb2x1dGV8fCh3PXcucmVwbGFjZSgvbWFya2VyLWVuZD0idXJsXCguKj8jL2csJ21hcmtlci1lbmQ9InVybCgjJywiZyIpKSx3PSh3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7cmV0dXJuIGU9KGU9KGU9ZS5yZXBsYWNlKC/vrILCsMKwL2csKGZ1bmN0aW9uKCl7cmV0dXJuIiYjIn0pKSkucmVwbGFjZSgv76yCwrAvZywoZnVuY3Rpb24oKXtyZXR1cm4iJiJ9KSkpLnJlcGxhY2UoL8K2w58vZywoZnVuY3Rpb24oKXtyZXR1cm4iOyJ9KSl9KHcpKS5yZXBsYWNlKC88YnI+L2csIjxici8+Iiksdm9pZCAwIT09bilzd2l0Y2goZil7Y2FzZSJmbG93Y2hhcnQiOmNhc2UiZmxvd2NoYXJ0LXYyIjpuKHcsQXIuYmluZEZ1bmN0aW9ucyk7YnJlYWs7Y2FzZSJnYW50dCI6bih3LFJpLmJpbmRGdW5jdGlvbnMpO2JyZWFrO2Nhc2UiY2xhc3MiOmNhc2UiY2xhc3NEaWFncmFtIjpuKHcsT2UuYmluZEZ1bmN0aW9ucyk7YnJlYWs7ZGVmYXVsdDpuKHcpfWVsc2Ugby5kZWJ1ZygiQ0IgPSB1bmRlZmluZWQhIik7dmFyIFQ9T2JqZWN0KHUuc2VsZWN0KSgiI2QiK3QpLm5vZGUoKTtyZXR1cm4gbnVsbCE9PVQmJiJmdW5jdGlvbiI9PXR5cGVvZiBULnJlbW92ZSYmT2JqZWN0KHUuc2VsZWN0KSgiI2QiK3QpLm5vZGUoKS5yZW1vdmUoKSx3fSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1oZSgpLG49bmUuZGV0ZWN0SW5pdCh0LGUpO24mJm8uZGVidWcoInJlaW5pdCAiLG4pO3ZhciByLGk9bmUuZGV0ZWN0VHlwZSh0LGUpO3N3aXRjaChvLmRlYnVnKCJUeXBlICIraSksaSl7Y2FzZSJnaXQiOihyPWlhLmEpLnBhcnNlci55eT1uYTticmVhaztjYXNlImZsb3djaGFydCI6Y2FzZSJmbG93Y2hhcnQtdjIiOkFyLmNsZWFyKCksKHI9T3IuYSkucGFyc2VyLnl5PUFyO2JyZWFrO2Nhc2Uic2VxdWVuY2UiOihyPXRvLmEpLnBhcnNlci55eT1tbzticmVhaztjYXNlImdhbnR0Ijoocj1qaS5hKS5wYXJzZXIueXk9Umk7YnJlYWs7Y2FzZSJjbGFzcyI6Y2FzZSJjbGFzc0RpYWdyYW0iOihyPVJlLmEpLnBhcnNlci55eT1PZTticmVhaztjYXNlInN0YXRlIjpjYXNlInN0YXRlRGlhZ3JhbSI6KHI9em8uYSkucGFyc2VyLnl5PWVzO2JyZWFrO2Nhc2UiaW5mbyI6by5kZWJ1ZygiaW5mbyBpbmZvIGluZm8iKSwocj1fYS5hKS5wYXJzZXIueXk9YmE7YnJlYWs7Y2FzZSJwaWUiOm8uZGVidWcoInBpZSIpLChyPUNhLmEpLnBhcnNlci55eT1PYTticmVhaztjYXNlImVyIjpvLmRlYnVnKCJlciIpLChyPVZuLmEpLnBhcnNlci55eT1XbjticmVhaztjYXNlImpvdXJuZXkiOm8uZGVidWcoIkpvdXJuZXkiKSwocj1Mcy5hKS5wYXJzZXIueXk9QnM7YnJlYWs7Y2FzZSJyZXF1aXJlbWVudCI6Y2FzZSJyZXF1aXJlbWVudERpYWdyYW0iOm8uZGVidWcoIlJlcXVpcmVtZW50RGlhZ3JhbSIpLChyPUxhLmEpLnBhcnNlci55eT1ZYX1yZXR1cm4gci5wYXJzZXIueXkuZ3JhcGhUeXBlPWksci5wYXJzZXIueXkucGFyc2VFcnJvcj1mdW5jdGlvbih0LGUpe3Rocm93e3N0cjp0LGhhc2g6ZX19LHIucGFyc2UodCkscn0scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4scil7dHJ5e2lmKHZvaWQgMCE9PWUpc3dpdGNoKGU9ZS50cmltKCksbil7Y2FzZSJvcGVuX2RpcmVjdGl2ZSI6bGM9e307YnJlYWs7Y2FzZSJ0eXBlX2RpcmVjdGl2ZSI6bGMudHlwZT1lLnRvTG93ZXJDYXNlKCk7YnJlYWs7Y2FzZSJhcmdfZGlyZWN0aXZlIjpsYy5hcmdzPUpTT04ucGFyc2UoZSk7YnJlYWs7Y2FzZSJjbG9zZV9kaXJlY3RpdmUiOmhjKHQsbGMsciksbGM9bnVsbH19Y2F0Y2godCl7by5lcnJvcigiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIHNlcXVlbmNlRGlhZ3JhbSBkaXJlY3RpdmU6ICIuY29uY2F0KGUsIiBqaXNvbiBjb250ZXh0OiAiKS5jb25jYXQobikpLG8uZXJyb3IodC5tZXNzYWdlKX19LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dCYmdC5mb250RmFtaWx5JiYodC50aGVtZVZhcmlhYmxlcyYmdC50aGVtZVZhcmlhYmxlcy5mb250RmFtaWx5fHwodC50aGVtZVZhcmlhYmxlcz17Zm9udEZhbWlseTp0LmZvbnRGYW1pbHl9KSksaWU9VnQoe30sdCksdCYmdC50aGVtZSYmeHRbdC50aGVtZV0/dC50aGVtZVZhcmlhYmxlcz14dFt0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKTp0JiYodC50aGVtZVZhcmlhYmxlcz14dC5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKTt2YXIgZT0ib2JqZWN0Ij09PXVjKHQpP2Z1bmN0aW9uKHQpe3JldHVybiBvZT1WdCh7fSxhZSksb2U9VnQob2UsdCksdC50aGVtZSYmKG9lLnRoZW1lVmFyaWFibGVzPXh0W3QudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKSxjZT11ZShvZSxzZSksb2V9KHQpOmxlKCk7ZmMoZSkscyhlLmxvZ0xldmVsKX0scmVpbml0aWFsaXplOmRjLGdldENvbmZpZzpoZSxzZXRDb25maWc6ZnVuY3Rpb24odCl7cmV0dXJuIFZ0KGNlLHQpLGhlKCl9LGdldFNpdGVDb25maWc6bGUsdXBkYXRlU2l0ZUNvbmZpZzpmdW5jdGlvbih0KXtyZXR1cm4gb2U9VnQob2UsdCksdWUob2Usc2UpLG9lfSxyZXNldDpmdW5jdGlvbigpe3BlKCl9LGdsb2JhbFJlc2V0OmZ1bmN0aW9uKCl7cGUoKSxmYyhoZSgpKX0sZGVmYXVsdENvbmZpZzphZX0pO3MoaGUoKS5sb2dMZXZlbCkscGUoaGUoKSk7dmFyIHljPXBjLGdjPWZ1bmN0aW9uKCl7bWMuc3RhcnRPbkxvYWQ/eWMuZ2V0Q29uZmlnKCkuc3RhcnRPbkxvYWQmJm1jLmluaXQoKTp2b2lkIDA9PT1tYy5zdGFydE9uTG9hZCYmKG8uZGVidWcoIkluIHN0YXJ0LCBubyBjb25maWciKSx5Yy5nZXRDb25maWcoKS5zdGFydE9uTG9hZCYmbWMuaW5pdCgpKX07InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmCi8qIQogICAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvbgogICAqLwp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKGZ1bmN0aW9uKCl7Z2MoKX0pLCExKTt2YXIgbWM9e3N0YXJ0T25Mb2FkOiEwLGh0bWxMYWJlbHM6ITAsbWVybWFpZEFQSTp5YyxwYXJzZTp5Yy5wYXJzZSxyZW5kZXI6eWMucmVuZGVyLGluaXQ6ZnVuY3Rpb24oKXt2YXIgdCxlLG49dGhpcyxyPXljLmdldENvbmZpZygpO2FyZ3VtZW50cy5sZW5ndGg+PTI/KAovKiEgc2VxdWVuY2UgY29uZmlnIHdhcyBwYXNzZWQgYXMgIzEgKi8Kdm9pZCAwIT09YXJndW1lbnRzWzBdJiYobWMuc2VxdWVuY2VDb25maWc9YXJndW1lbnRzWzBdKSx0PWFyZ3VtZW50c1sxXSk6dD1hcmd1bWVudHNbMF0sImZ1bmN0aW9uIj09dHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdPyhlPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLG8uZGVidWcoIkNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpOnZvaWQgMCE9PXIubWVybWFpZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiByLm1lcm1haWQuY2FsbGJhY2s/KGU9ci5tZXJtYWlkLmNhbGxiYWNrLG8uZGVidWcoIkNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpOm8uZGVidWcoIk5vIENhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpLHQ9dm9pZCAwPT09dD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubWVybWFpZCIpOiJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpOnQgaW5zdGFuY2VvZiB3aW5kb3cuTm9kZT9bdF06dCxvLmRlYnVnKCJTdGFydCBPbiBMb2FkIGJlZm9yZTogIittYy5zdGFydE9uTG9hZCksdm9pZCAwIT09bWMuc3RhcnRPbkxvYWQmJihvLmRlYnVnKCJTdGFydCBPbiBMb2FkIGlubmVyOiAiK21jLnN0YXJ0T25Mb2FkKSx5Yy51cGRhdGVTaXRlQ29uZmlnKHtzdGFydE9uTG9hZDptYy5zdGFydE9uTG9hZH0pKSx2b2lkIDAhPT1tYy5nYW50dENvbmZpZyYmeWMudXBkYXRlU2l0ZUNvbmZpZyh7Z2FudHQ6bWMuZ2FudHRDb25maWd9KTtmb3IodmFyIGksYT1uZXcgbmUuaW5pdElkR2VuZXJhdGlvcihyLmRldGVybWluaXN0aWNJZHMsci5kZXRlcm1pbmlzdGljSURTZWVkKSxzPWZ1bmN0aW9uKHIpe3ZhciBzPXRbcl07Ci8qISBDaGVjayBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqL2lmKHMuZ2V0QXR0cmlidXRlKCJkYXRhLXByb2Nlc3NlZCIpKXJldHVybiJjb250aW51ZSI7cy5zZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIiwhMCk7dmFyIGM9Im1lcm1haWQtIi5jb25jYXQoYS5uZXh0KCkpO2k9cy5pbm5lckhUTUwsaT1uZS5lbnRpdHlEZWNvZGUoaSkudHJpbSgpLnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIjxici8+Iik7dmFyIHU9bmUuZGV0ZWN0SW5pdChpKTt1JiZvLmRlYnVnKCJEZXRlY3RlZCBlYXJseSByZWluaXQ6ICIsdSk7dHJ5e3ljLnJlbmRlcihjLGksKGZ1bmN0aW9uKHQsbil7cy5pbm5lckhUTUw9dCx2b2lkIDAhPT1lJiZlKGMpLG4mJm4ocyl9KSxzKX1jYXRjaCh0KXtvLndhcm4oIlN5bnRheCBFcnJvciByZW5kZXJpbmciKSxvLndhcm4odCksbi5wYXJzZUVycm9yJiZuLnBhcnNlRXJyb3IodCl9fSxjPTA7Yzx0Lmxlbmd0aDtjKyspcyhjKX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt2b2lkIDAhPT10Lm1lcm1haWQmJih2b2lkIDAhPT10Lm1lcm1haWQuc3RhcnRPbkxvYWQmJihtYy5zdGFydE9uTG9hZD10Lm1lcm1haWQuc3RhcnRPbkxvYWQpLHZvaWQgMCE9PXQubWVybWFpZC5odG1sTGFiZWxzJiYobWMuaHRtbExhYmVscz0iZmFsc2UiIT09dC5tZXJtYWlkLmh0bWxMYWJlbHMmJiExIT09dC5tZXJtYWlkLmh0bWxMYWJlbHMpKSx5Yy5pbml0aWFsaXplKHQpfSxjb250ZW50TG9hZGVkOmdjfTtlLmRlZmF1bHQ9bWN9XSkuZGVmYXVsdH0pKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVybWFpZC5taW4uanMubWFw`;