- );
-}
+aW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7CmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7CmltcG9ydCB7IHZpb2xhdGlvbkRhdGEsIHZpb2xhdGlvbkdyb3VwcyB9IGZyb20gJy4uL2RhdGEvdmlvbGF0aW9ucyc7CmltcG9ydCB1c2VFbXBsb3llZUludGVsbGlnZW5jZSBmcm9tICcuLi9ob29rcy91c2VFbXBsb3llZUludGVsbGlnZW5jZSc7CmltcG9ydCBDcGFzQmFkZ2UgZnJvbSAnLi9DcGFzQmFkZ2UnOwppbXBvcnQgVGllcldhcm5pbmcgZnJvbSAnLi9UaWVyV2FybmluZyc7CmltcG9ydCBWaW9sYXRpb25IaXN0b3J5IGZyb20gJy4vVmlvbGF0aW9uSGlzdG9yeSc7Cgpjb25zdCBzID0gewogIGNvbnRlbnQ6ICAgICAgeyBwYWRkaW5nOiAnMzJweCA0MHB4JywgYmFja2dyb3VuZDogJyMxMTEyMTcnLCBib3JkZXJSYWRpdXM6ICcxMHB4JywgY29sb3I6ICcjZjhmOWZhJyB9LAogIHNlY3Rpb246ICAgICAgeyBiYWNrZ3JvdW5kOiAnIzE4MTkyNCcsIGJvcmRlckxlZnQ6ICc0cHggc29saWQgI2Q0YWYzNycsIHBhZGRpbmc6ICcyMHB4JywgbWFyZ2luQm90dG9tOiAnMzBweCcsIGJvcmRlclJhZGl1czogJzRweCcsIGJvcmRlcjogJzFweCBzb2xpZCAjMmEyYjNhJyB9LAogIGFja1NlY3Rpb246ICAgeyBiYWNrZ3JvdW5kOiAnIzBkMTYxZicsIGJvcmRlckxlZnQ6ICc0cHggc29saWQgIzIxOTZGMycsIHBhZGRpbmc6ICcyMHB4JywgbWFyZ2luQm90dG9tOiAnMzBweCcsIGJvcmRlclJhZGl1czogJzRweCcsIGJvcmRlcjogJzFweCBzb2xpZCAjMWEyYTNhJyB9LAogIHNlY3Rpb25UaXRsZTogeyBjb2xvcjogJyNmOGY5ZmEnLCBmb250U2l6ZTogJzIwcHgnLCBtYXJnaW5Cb3R0b206ICcxNXB4JywgZm9udFdlaWdodDogNzAwIH0sCiAgYWNrVGl0bGU6ICAgICB7IGNvbG9yOiAnIzY0YjVmNicsIGZvbnRTaXplOiAnMThweCcsIG1hcmdpbkJvdHRvbTogJzZweCcsIGZvbnRXZWlnaHQ6IDcwMCB9LAogIGFja1N1YjogICAgICAgeyBjb2xvcjogJyM3NzhhOWInLCBmb250U2l6ZTogJzEycHgnLCBtYXJnaW5Cb3R0b206ICcxNnB4JyB9LAogIGdyaWQ6ICAgICAgICAgeyBkaXNwbGF5OiAnZ3JpZCcsIGdyaWRUZW1wbGF0ZUNvbHVtbnM6ICdyZXBlYXQoYXV0by1maXQsIG1pbm1heCgyNTBweCwgMWZyKSknLCBnYXA6ICcxNXB4JywgbWFyZ2luVG9wOiAnMTVweCcgfSwKICBpdGVtOiAgICAgICAgIHsgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9LAogIGxhYmVsOiAgICAgICAgeyBmb250V2VpZ2h0OiA2MDAsIGNvbG9yOiAnI2U1ZTdmMScsIG1hcmdpbkJvdHRvbTogJzVweCcsIGZvbnRTaXplOiAnMTNweCcgfSwKICBpbnB1dDogICAgICAgIHsgcGFkZGluZzogJzEwcHgnLCBib3JkZXI6ICcxcHggc29saWQgIzMzMzU0NCcsIGJvcmRlclJhZGl1czogJzRweCcsIGZvbnRTaXplOiAnMTRweCcsIGZvbnRGYW1pbHk6ICdpbmhlcml0JywgYmFja2dyb3VuZDogJyMwNTA2MDgnLCBjb2xvcjogJyNmOGY5ZmEnIH0sCiAgZnVsbENvbDogICAgICB7IGdyaWRDb2x1bW46ICcxIC8gLTEnIH0sCiAgY29udGV4dEJveDogICB7IGJhY2tncm91bmQ6ICcjMTQxNjIzJywgYm9yZGVyOiAnMXB4IHNvbGlkICMzMzM1NDQnLCBib3JkZXJSYWRpdXM6ICc0cHgnLCBwYWRkaW5nOiAnMTBweCcsIGZvbnRTaXplOiAnMTJweCcsIGNvbG9yOiAnI2QxZDNlMCcsIG1hcmdpblRvcDogJzRweCcgfSwKICByZXBlYXRCYWRnZTogIHsgZGlzcGxheTogJ2lubGluZS1ibG9jaycsIG1hcmdpbkxlZnQ6ICc4cHgnLCBwYWRkaW5nOiAnMXB4IDdweCcsIGJvcmRlclJhZGl1czogJzEwcHgnLCBmb250U2l6ZTogJzExcHgnLCBmb250V2VpZ2h0OiA3MDAsIGJhY2tncm91bmQ6ICcjM2IyZTAwJywgY29sb3I6ICcjZmZkNjY2JywgYm9yZGVyOiAnMXB4IHNvbGlkICNkNGFmMzcnIH0sCiAgcmVwZWF0V2FybjogICB7IGJhY2tncm91bmQ6ICcjM2IyZTAwJywgYm9yZGVyOiAnMXB4IHNvbGlkICNkNGFmMzcnLCBib3JkZXJSYWRpdXM6ICc0cHgnLCBwYWRkaW5nOiAnOHB4IDEycHgnLCBtYXJnaW5Ub3A6ICc2cHgnLCBmb250U2l6ZTogJzEycHgnLCBjb2xvcjogJyNmZmRmOGEnIH0sCiAgcG9pbnRCb3g6ICAgICB7IGJhY2tncm91bmQ6ICcjMTgxMjAwJywgYm9yZGVyOiAnMnB4IHNvbGlkICNkNGFmMzcnLCBwYWRkaW5nOiAnMTVweCcsIGJvcmRlclJhZGl1czogJzZweCcsIG1hcmdpblRvcDogJzE1cHgnLCB0ZXh0QWxpZ246ICdjZW50ZXInIH0sCiAgcG9pbnRWYWx1ZTogICB7IGZvbnRTaXplOiAnMjRweCcsIGZvbnRXZWlnaHQ6ICdib2xkJywgY29sb3I6ICcjZmZkNjY2JywgbWFyZ2luOiAnMTBweCAwJyB9LAogIHNjb3JlUm93OiAgICAgeyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICcxMnB4JywgbWFyZ2luQm90dG9tOiAnMTRweCcsIGZsZXhXcmFwOiAnd3JhcCcgfSwKICBidG5Sb3c6ICAgICAgIHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcxNXB4JywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBtYXJnaW5Ub3A6ICczMHB4JywgZmxleFdyYXA6ICd3cmFwJyB9LAogIGJ0blByaW1hcnk6ICAgeyBwYWRkaW5nOiAnMTVweCA0MHB4JywgZm9udFNpemU6ICcxNnB4JywgZm9udFdlaWdodDogNjAwLCBib3JkZXI6ICdub25lJywgYm9yZGVyUmFkaXVzOiAnNnB4JywgY3Vyc29yOiAncG9pbnRlcicsIGJhY2tncm91bmQ6ICdsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZDRhZjM3IDAlLCAjZmZkZjhhIDEwMCUpJywgY29sb3I6ICcjMDAwJywgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZScgfSwKICBidG5QZGY6ICAgICAgIHsgcGFkZGluZzogJzE1cHggNDBweCcsIGZvbnRTaXplOiAnMTZweCcsIGZvbnRXZWlnaHQ6IDYwMCwgYm9yZGVyOiAnbm9uZScsIGJvcmRlclJhZGl1czogJzZweCcsIGN1cnNvcjogJ3BvaW50ZXInLCBiYWNrZ3JvdW5kOiAnbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2U3NGMzYyAwJSwgI2MwMzkyYiAxMDAlKScsIGNvbG9yOiAnd2hpdGUnLCB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJyB9LAogIGJ0blNlY29uZGFyeTogeyBwYWRkaW5nOiAnMTVweCA0MHB4JywgZm9udFNpemU6ICcxNnB4JywgZm9udFdlaWdodDogNjAwLCBib3JkZXI6ICcxcHggc29saWQgIzMzMzU0NCcsIGJvcmRlclJhZGl1czogJzZweCcsIGN1cnNvcjogJ3BvaW50ZXInLCBiYWNrZ3JvdW5kOiAnIzA1MDYwOCcsIGNvbG9yOiAnI2Y4ZjlmYScsIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnIH0sCiAgbm90ZTogICAgICAgICB7IGJhY2tncm91bmQ6ICcjMTQxNjIzJywgYm9yZGVyTGVmdDogJzRweCBzb2xpZCAjMjE5NkYzJywgcGFkZGluZzogJzE1cHgnLCBtYXJnaW46ICcyMHB4IDAnLCBib3JkZXJSYWRpdXM6ICc0cHgnLCBmb250U2l6ZTogJzEzcHgnLCBjb2xvcjogJyNkMWQzZTAnIH0sCiAgc3RhdHVzT2s6ICAgICB7IG1hcmdpblRvcDogJzE1cHgnLCBwYWRkaW5nOiAnMTVweCcsIGJvcmRlclJhZGl1czogJzZweCcsIHRleHRBbGlnbjogJ2NlbnRlcicsIGZvbnRXZWlnaHQ6IDYwMCwgYmFja2dyb3VuZDogJyMwNTMzMjEnLCBjb2xvcjogJyM5ZWY3YzEnLCBib3JkZXI6ICcxcHggc29saWQgIzBmNTEzMicgfSwKICBzdGF0dXNFcnI6ICAgIHsgbWFyZ2luVG9wOiAnMTVweCcsIHBhZGRpbmc6ICcxNXB4JywgYm9yZGVyUmFkaXVzOiAnNnB4JywgdGV4dEFsaWduOiAnY2VudGVyJywgZm9udFdlaWdodDogNjAwLCBiYWNrZ3JvdW5kOiAnIzNjMTExNCcsIGNvbG9yOiAnI2ZmYjNiOCcsIGJvcmRlcjogJzFweCBzb2xpZCAjZjVjNmNiJyB9LAp9OwoKY29uc3QgRU1QVFlfRk9STSA9IHsKICBlbXBsb3llZUlkOiAnJywgZW1wbG95ZWVOYW1lOiAnJywgZGVwYXJ0bWVudDogJycsIHN1cGVydmlzb3I6ICcnLCB3aXRuZXNzTmFtZTogJycsCiAgdmlvbGF0aW9uVHlwZTogJycsIGluY2lkZW50RGF0ZTogJycsIGluY2lkZW50VGltZTogJycsCiAgYW1vdW50OiAnJywgbWludXRlc0xhdGU6ICcnLCBsb2NhdGlvbjogJycsIGFkZGl0aW9uYWxEZXRhaWxzOiAnJywgcG9pbnRzOiAxLAogIC8vIEFja25vd2xlZGdtZW50IHNpZ25hdHVyZSBmaWVsZHMgKG9wdGlvbmFsIGF0IHN1Ym1pdCB0aW1lKQogIGFja25vd2xlZGdlZEJ5OiAnJywgYWNrbm93bGVkZ2VkQXQ6ICcnLAp9OwoKZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVmlvbGF0aW9uRm9ybSgpIHsKICBjb25zdCBbZW1wbG95ZWVzLCAgICBzZXRFbXBsb3llZXNdICAgID0gdXNlU3RhdGUoW10pOwogIGNvbnN0IFtmb3JtLCAgICAgICAgIHNldEZvcm1dICAgICAgICAgPSB1c2VTdGF0ZShFTVBUWV9GT1JNKTsKICBjb25zdCBbdmlvbGF0aW9uLCAgICBzZXRWaW9sYXRpb25dICAgID0gdXNlU3RhdGUobnVsbCk7CiAgY29uc3QgW3N0YXR1cywgICAgICAgc2V0U3RhdHVzXSAgICAgICA9IHVzZVN0YXRlKG51bGwpOwogIGNvbnN0IFtsYXN0VmlvbElkLCAgIHNldExhc3RWaW9sSWRdICAgPSB1c2VTdGF0ZShudWxsKTsKICBjb25zdCBbcGRmTG9hZGluZywgICBzZXRQZGZMb2FkaW5nXSAgID0gdXNlU3RhdGUoZmFsc2UpOwoKICBjb25zdCBpbnRlbCA9IHVzZUVtcGxveWVlSW50ZWxsaWdlbmNlKGZvcm0uZW1wbG95ZWVJZCB8fCBudWxsKTsKCiAgdXNlRWZmZWN0KCgpID0+IHsKICAgIGF4aW9zLmdldCgnL2FwaS9lbXBsb3llZXMnKS50aGVuKHIgPT4gc2V0RW1wbG95ZWVzKHIuZGF0YSkpLmNhdGNoKCgpID0+IHt9KTsKICB9LCBbXSk7CgogIHVzZUVmZmVjdCgoKSA9PiB7CiAgICBpZiAoIXZpb2xhdGlvbiB8fCAhZm9ybS52aW9sYXRpb25UeXBlKSByZXR1cm47CiAgICBjb25zdCBhbGxUaW1lID0gaW50ZWwuY291bnRzQWxsVGltZVtmb3JtLnZpb2xhdGlvblR5cGVdOwogICAgaWYgKGFsbFRpbWUgJiYgYWxsVGltZS5jb3VudCA+PSAxICYmIHZpb2xhdGlvbi5taW5Qb2ludHMgIT09IHZpb2xhdGlvbi5tYXhQb2ludHMpIHsKICAgICAgc2V0Rm9ybShwcmV2ID0+ICh7IC4uLnByZXYsIHBvaW50czogdmlvbGF0aW9uLm1heFBvaW50cyB9KSk7CiAgICB9IGVsc2UgewogICAgICBzZXRGb3JtKHByZXYgPT4gKHsgLi4ucHJldiwgcG9pbnRzOiB2aW9sYXRpb24ubWluUG9pbnRzIH0pKTsKICAgIH0KICB9LCBbZm9ybS52aW9sYXRpb25UeXBlLCB2aW9sYXRpb24sIGludGVsLmNvdW50c0FsbFRpbWVdKTsKCiAgY29uc3QgaGFuZGxlRW1wbG95ZWVTZWxlY3QgPSBlID0+IHsKICAgIGNvbnN0IGVtcCA9IGVtcGxveWVlcy5maW5kKHggPT4geC5pZCA9PT0gcGFyc2VJbnQoZS50YXJnZXQudmFsdWUpKTsKICAgIGlmICghZW1wKSByZXR1cm47CiAgICBzZXRGb3JtKHByZXYgPT4gKHsgLi4ucHJldiwgZW1wbG95ZWVJZDogZW1wLmlkLCBlbXBsb3llZU5hbWU6IGVtcC5uYW1lLCBkZXBhcnRtZW50OiBlbXAuZGVwYXJ0bWVudCB8fCAnJywgc3VwZXJ2aXNvcjogZW1wLnN1cGVydmlzb3IgfHwgJycgfSkpOwogIH07CgogIGNvbnN0IGhhbmRsZVZpb2xhdGlvbkNoYW5nZSA9IGUgPT4gewogICAgY29uc3Qga2V5ID0gZS50YXJnZXQudmFsdWU7CiAgICBjb25zdCB2ICAgPSB2aW9sYXRpb25EYXRhW2tleV0gfHwgbnVsbDsKICAgIHNldFZpb2xhdGlvbih2KTsKICAgIHNldEZvcm0ocHJldiA9PiAoeyAuLi5wcmV2LCB2aW9sYXRpb25UeXBlOiBrZXksIHBvaW50czogdiA/IHYubWluUG9pbnRzIDogMSB9KSk7CiAgfTsKCiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gZSA9PiBzZXRGb3JtKHByZXYgPT4gKHsgLi4ucHJldiwgW2UudGFyZ2V0Lm5hbWVdOiBlLnRhcmdldC52YWx1ZSB9KSk7CgogIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IGFzeW5jIGUgPT4gewogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgaWYgKCFmb3JtLnZpb2xhdGlvblR5cGUpIHJldHVybiBzZXRTdGF0dXMoeyBvazogZmFsc2UsIG1zZzogJ1BsZWFzZSBzZWxlY3QgYSB2aW9sYXRpb24gdHlwZS4nIH0pOwogICAgaWYgKCFmb3JtLmVtcGxveWVlTmFtZSkgIHJldHVybiBzZXRTdGF0dXMoeyBvazogZmFsc2UsIG1zZzogJ1BsZWFzZSBlbnRlciBhbiBlbXBsb3llZSBuYW1lLicgfSk7CiAgICB0cnkgewogICAgICBjb25zdCBlbXBSZXMgICAgID0gYXdhaXQgYXhpb3MucG9zdCgnL2FwaS9lbXBsb3llZXMnLCB7IG5hbWU6IGZvcm0uZW1wbG95ZWVOYW1lLCBkZXBhcnRtZW50OiBmb3JtLmRlcGFydG1lbnQsIHN1cGVydmlzb3I6IGZvcm0uc3VwZXJ2aXNvciB9KTsKICAgICAgY29uc3QgZW1wbG95ZWVJZCA9IGVtcFJlcy5kYXRhLmlkOwogICAgICBjb25zdCB2aW9sUmVzICAgID0gYXdhaXQgYXhpb3MucG9zdCgnL2FwaS92aW9sYXRpb25zJywgewogICAgICAgIGVtcGxveWVlX2lkOiAgICBlbXBsb3llZUlkLAogICAgICAgIHZpb2xhdGlvbl90eXBlOiBmb3JtLnZpb2xhdGlvblR5cGUsCiAgICAgICAgdmlvbGF0aW9uX25hbWU6IHZpb2xhdGlvbj8ubmFtZSB8fCBmb3JtLnZpb2xhdGlvblR5cGUsCiAgICAgICAgY2F0ZWdvcnk6ICAgICAgIHZpb2xhdGlvbj8uY2F0ZWdvcnkgfHwgJ0dlbmVyYWwnLAogICAgICAgIHBvaW50czogICAgICAgICBwYXJzZUludChmb3JtLnBvaW50cyksCiAgICAgICAgaW5jaWRlbnRfZGF0ZTogIGZvcm0uaW5jaWRlbnREYXRlLAogICAgICAgIGluY2lkZW50X3RpbWU6ICBmb3JtLmluY2lkZW50VGltZSAgfHwgbnVsbCwKICAgICAgICBsb2NhdGlvbjogICAgICAgZm9ybS5sb2NhdGlvbiAgICAgICB8fCBudWxsLAogICAgICAgIGRldGFpbHM6ICAgICAgICBmb3JtLmFkZGl0aW9uYWxEZXRhaWxzIHx8IG51bGwsCiAgICAgICAgd2l0bmVzc19uYW1lOiAgIGZvcm0ud2l0bmVzc05hbWUgICAgfHwgbnVsbCwKICAgICAgICBhY2tub3dsZWRnZWRfYnk6IGZvcm0uYWNrbm93bGVkZ2VkQnkgfHwgbnVsbCwKICAgICAgICBhY2tub3dsZWRnZWRfYXQ6IGZvcm0uYWNrbm93bGVkZ2VkQXQgfHwgbnVsbCwKICAgICAgfSk7CgogICAgICBjb25zdCBuZXdJZCA9IHZpb2xSZXMuZGF0YS5pZDsKICAgICAgc2V0TGFzdFZpb2xJZChuZXdJZCk7CgogICAgICBjb25zdCBlbXBMaXN0ID0gYXdhaXQgYXhpb3MuZ2V0KCcvYXBpL2VtcGxveWVlcycpOwogICAgICBzZXRFbXBsb3llZXMoZW1wTGlzdC5kYXRhKTsKCiAgICAgIHNldFN0YXR1cyh7IG9rOiB0cnVlLCBtc2c6IGDinJMgVmlvbGF0aW9uICMke25ld0lkfSByZWNvcmRlZCDigJQgY2xpY2sgRG93bmxvYWQgUERGIHRvIHNhdmUgdGhlIGRvY3VtZW50LmAgfSk7CiAgICAgIHNldEZvcm0oRU1QVFlfRk9STSk7CiAgICAgIHNldFZpb2xhdGlvbihudWxsKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBzZXRTdGF0dXMoeyBvazogZmFsc2UsIG1zZzogJ+KclyBFcnJvcjogJyArIChlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVyci5tZXNzYWdlKSB9KTsKICAgIH0KICB9OwoKICBjb25zdCBoYW5kbGVEb3dubG9hZFBkZiA9IGFzeW5jICgpID0+IHsKICAgIGlmICghbGFzdFZpb2xJZCkgcmV0dXJuOwogICAgc2V0UGRmTG9hZGluZyh0cnVlKTsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KGAvYXBpL3Zpb2xhdGlvbnMvJHtsYXN0VmlvbElkfS9wZGZgLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pOwogICAgICBjb25zdCB1cmwgICAgICA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtyZXNwb25zZS5kYXRhXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KSk7CiAgICAgIGNvbnN0IGxpbmsgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICBsaW5rLmhyZWYgICAgICA9IHVybDsKICAgICAgbGluay5kb3dubG9hZCAgPSBgQ1BBU19WaW9sYXRpb25fJHtsYXN0VmlvbElkfS5wZGZgOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOwogICAgICBsaW5rLmNsaWNrKCk7CiAgICAgIGxpbmsucmVtb3ZlKCk7CiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgc2V0U3RhdHVzKHsgb2s6IGZhbHNlLCBtc2c6ICfim5cgUERGIGdlbmVyYXRpb24gZmFpbGVkOiAnICsgZXJyLm1lc3NhZ2UgfSk7CiAgICB9IGZpbmFsbHkgewogICAgICBzZXRQZGZMb2FkaW5nKGZhbHNlKTsKICAgIH0KICB9OwoKICBjb25zdCBzaG93RmllbGQgICAgPSBmICAgPT4gdmlvbGF0aW9uPy5maWVsZHM/LmluY2x1ZGVzKGYpOwogIGNvbnN0IHByaW9yQ291bnQ5MCA9IGtleSA9PiBpbnRlbC5jb3VudHM5MFtrZXldIHx8IDA7CiAgY29uc3QgaXNSZXBlYXQgICAgID0ga2V5ID0+IChpbnRlbC5jb3VudHNBbGxUaW1lW2tleV0/LmNvdW50IHx8IDApID49IDE7CgogIHJldHVybiAoCiAgICA8ZGl2IHN0eWxlPXtzLmNvbnRlbnR9PgoKICAgICAgPGRpdiBzdHlsZT17cy5zZWN0aW9ufT4KICAgICAgICA8aDIgc3R5bGU9e3Muc2VjdGlvblRpdGxlfT5FbXBsb3llZSBJbmZvcm1hdGlvbjwvaDI+CgogICAgICAgIHtpbnRlbC5zY29yZSAmJiBmb3JtLmVtcGxveWVlSWQgJiYgKAogICAgICAgICAgPGRpdiBzdHlsZT17cy5zY29yZVJvd30+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAnMTNweCcsIGNvbG9yOiAnI2QxZDNlMCcsIGZvbnRXZWlnaHQ6IDYwMCB9fT5DdXJyZW50IFN0YW5kaW5nOjwvc3Bhbj4KICAgICAgICAgICAgPENwYXNCYWRnZSBwb2ludHM9e2ludGVsLnNjb3JlLmFjdGl2ZV9wb2ludHN9IC8+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAnMTJweCcsIGNvbG9yOiAnIzljYTBiOCcgfX0+CiAgICAgICAgICAgICAge2ludGVsLnNjb3JlLnZpb2xhdGlvbl9jb3VudH0gdmlvbGF0aW9ue2ludGVsLnNjb3JlLnZpb2xhdGlvbl9jb3VudCAhPT0gMSA/ICdzJyA6ICcnfSBpbiBsYXN0IDkwIGRheXMKICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgKX0KCiAgICAgICAge2VtcGxveWVlcy5sZW5ndGggPiAwICYmICgKICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMTJweCcgfX0+CiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17cy5sYWJlbH0+UXVpY2stU2VsZWN0IEV4aXN0aW5nIEVtcGxveWVlOjwvbGFiZWw+CiAgICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9e3MuaW5wdXR9IG9uQ2hhbmdlPXtoYW5kbGVFbXBsb3llZVNlbGVjdH0gdmFsdWU9e2Zvcm0uZW1wbG95ZWVJZCB8fCAnJ30+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj4tLSBTZWxlY3QgZXhpc3Rpbmcgb3IgZW50ZXIgbmV3IGJlbG93IC0tPC9vcHRpb24+CiAgICAgICAgICAgICAge2VtcGxveWVlcy5tYXAoZSA9PiAoCiAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17ZS5pZH0gdmFsdWU9e2UuaWR9PntlLm5hbWV9e2UuZGVwYXJ0bWVudCA/IGAgLSAke2UuZGVwYXJ0bWVudH1gIDogJyd9PC9vcHRpb24+CiAgICAgICAgICAgICAgKSl9CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgKX0KCiAgICAgICAgPGRpdiBzdHlsZT17cy5ncmlkfT4KICAgICAgICAgIHtbWydlbXBsb3llZU5hbWUnLCdFbXBsb3llZSBOYW1lJywndGV4dCcsJ0pvaG4gRG9lJ10sWydkZXBhcnRtZW50JywnRGVwYXJ0bWVudCcsJ3RleHQnLCdFbmdpbmVlcmluZyddLFsnc3VwZXJ2aXNvcicsJ1N1cGVydmlzb3IgTmFtZScsJ3RleHQnLCdKYW5lIFNtaXRoJ10sWyd3aXRuZXNzTmFtZScsJ1dpdG5lc3MgTmFtZSAoT2ZmaWNlciknLCd0ZXh0JywnT2ZmaWNlciBOYW1lJ11dLm1hcCgoW25hbWUsbGFiZWwsdHlwZSxwaF0pID0+ICgKICAgICAgICAgICAgPGRpdiBrZXk9e25hbWV9IHN0eWxlPXtzLml0ZW19PgogICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17cy5sYWJlbH0+e2xhYmVsfTo8L2xhYmVsPgogICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT17cy5pbnB1dH0gdHlwZT17dHlwZX0gbmFtZT17bmFtZX0gdmFsdWU9e2Zvcm1bbmFtZV19IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9IHBsYWNlaG9sZGVyPXtwaH0gLz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICApKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT4KICAgICAgICA8ZGl2IHN0eWxlPXtzLnNlY3Rpb259PgogICAgICAgICAgPGgyIHN0eWxlPXtzLnNlY3Rpb25UaXRsZX0+VmlvbGF0aW9uIERldGFpbHM8L2gyPgogICAgICAgICAgPGRpdiBzdHlsZT17cy5ncmlkfT4KCiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgLi4ucy5pdGVtLCAuLi5zLmZ1bGxDb2wgfX0+CiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtzLmxhYmVsfT5WaW9sYXRpb24gVHlwZTo8L2xhYmVsPgogICAgICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9e3MuaW5wdXR9IHZhbHVlPXtmb3JtLnZpb2xhdGlvblR5cGV9IG9uQ2hhbmdlPXtoYW5kbGVWaW9sYXRpb25DaGFuZ2V9IHJlcXVpcmVkPgogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj4tLSBTZWxlY3QgVmlvbGF0aW9uIFR5cGUgLS08L29wdGlvbj4KICAgICAgICAgICAgICAgIHtPYmplY3QuZW50cmllcyh2aW9sYXRpb25Hcm91cHMpLm1hcCgoW2dyb3VwLCBpdGVtc10pID0+ICgKICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwIGtleT17Z3JvdXB9IGxhYmVsPXtncm91cH0+CiAgICAgICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh2ID0+IHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByaW9yID0gcHJpb3JDb3VudDkwKHYua2V5KTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXt2LmtleX0gdmFsdWU9e3Yua2V5fT4KICAgICAgICAgICAgICAgICAgICAgICAgICB7di5uYW1lfXtwcmlvciA+IDAgPyBgIOKYhSAke3ByaW9yfXggaW4gOTAgZGF5c2AgOiAnJ30KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0pfQogICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPgogICAgICAgICAgICAgICAgKSl9CiAgICAgICAgICAgICAgPC9zZWxlY3Q+CgogICAgICAgICAgICAgIHt2aW9sYXRpb24gJiYgKAogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cy5jb250ZXh0Qm94fT4KICAgICAgICAgICAgICAgICAgPHN0cm9uZz57dmlvbGF0aW9uLm5hbWV9PC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgIHtpc1JlcGVhdChmb3JtLnZpb2xhdGlvblR5cGUpICYmIGZvcm0uZW1wbG95ZWVJZCAmJiAoCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3MucmVwZWF0QmFkZ2V9PgogICAgICAgICAgICAgICAgICAgICAge2ludGVsLmNvdW50c0FsbFRpbWVbZm9ybS52aW9sYXRpb25UeXBlXT8uY291bnR9eCBwcmlvcgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgKX0KICAgICAgICAgICAgICAgICAgPGJyIC8+e3Zpb2xhdGlvbi5kZXNjcmlwdGlvbn08YnIgLz4KICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6ICcxMXB4JywgY29sb3I6ICcjYTBhM2JhJyB9fT57dmlvbGF0aW9uLmNoYXB0ZXJ9PC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgKX0KCiAgICAgICAgICAgICAge3Zpb2xhdGlvbiAmJiBpc1JlcGVhdChmb3JtLnZpb2xhdGlvblR5cGUpICYmIGZvcm0uZW1wbG95ZWVJZCAmJiB2aW9sYXRpb24ubWluUG9pbnRzICE9PSB2aW9sYXRpb24ubWF4UG9pbnRzICYmICgKICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3MucmVwZWF0V2Fybn0+CiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+UmVwZWF0IG9mZmVuc2UgZGV0ZWN0ZWQuPC9zdHJvbmc+IFBvaW50IHNsaWRlciBzZXQgdG8gbWF4aW11bSAoe3Zpb2xhdGlvbi5tYXhQb2ludHN9IHB0cykgcGVyIHJlY2lkaXZpc3QgcG9saWN5LiBBZGp1c3QgaWYgbmVlZGVkLgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgKX0KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IHN0eWxlPXtzLml0ZW19PgogICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17cy5sYWJlbH0+SW5jaWRlbnQgRGF0ZTo8L2xhYmVsPgogICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT17cy5pbnB1dH0gdHlwZT0iZGF0ZSIgbmFtZT0iaW5jaWRlbnREYXRlIiB2YWx1ZT17Zm9ybS5pbmNpZGVudERhdGV9IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9IHJlcXVpcmVkIC8+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAge3Nob3dGaWVsZCgndGltZScpICYmICgKICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtzLml0ZW19PgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtzLmxhYmVsfT5JbmNpZGVudCBUaW1lOjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9e3MuaW5wdXR9IHR5cGU9InRpbWUiIG5hbWU9ImluY2lkZW50VGltZSIgdmFsdWU9e2Zvcm0uaW5jaWRlbnRUaW1lfSBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfSAvPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICApfQogICAgICAgICAgICB7c2hvd0ZpZWxkKCdtaW51dGVzJykgJiYgKAogICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3MuaXRlbX0+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e3MubGFiZWx9Pk1pbnV0ZXMgTGF0ZTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPXtzLmlucHV0fSB0eXBlPSJudW1iZXIiIG5hbWU9Im1pbnV0ZXNMYXRlIiB2YWx1ZT17Zm9ybS5taW51dGVzTGF0ZX0gb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX0gcGxhY2Vob2xkZXI9IjE1IiAvPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICApfQogICAgICAgICAgICB7c2hvd0ZpZWxkKCdhbW91bnQnKSAmJiAoCiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cy5pdGVtfT4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17cy5sYWJlbH0+QW1vdW50IC8gVmFsdWU6PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT17cy5pbnB1dH0gdHlwZT0idGV4dCIgbmFtZT0iYW1vdW50IiB2YWx1ZT17Zm9ybS5hbW91bnR9IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9IHBsYWNlaG9sZGVyPSIkMTUwLjAwIiAvPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICApfQogICAgICAgICAgICB7c2hvd0ZpZWxkKCdsb2NhdGlvbicpICYmICgKICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLnMuaXRlbSwgLi4ucy5mdWxsQ29sIH19PgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtzLmxhYmVsfT5Mb2NhdGlvbiAvIENvbnRleHQ6PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT17cy5pbnB1dH0gdHlwZT0idGV4dCIgbmFtZT0ibG9jYXRpb24iIHZhbHVlPXtmb3JtLmxvY2F0aW9ufSBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfSBwbGFjZWhvbGRlcj0iT2ZmaWNlLCB2ZWhpY2xlLCBmYWNpbGl0eSBhcmVhLCBldGMuIiAvPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICApfQogICAgICAgICAgICB7c2hvd0ZpZWxkKCdkZXNjcmlwdGlvbicpICYmICgKICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLnMuaXRlbSwgLi4ucy5mdWxsQ29sIH19PgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtzLmxhYmVsfT5BZGRpdGlvbmFsIERldGFpbHM6PC9sYWJlbD4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBzdHlsZT17eyAuLi5zLmlucHV0LCByZXNpemU6ICd2ZXJ0aWNhbCcsIG1pbkhlaWdodDogJzgwcHgnIH19IG5hbWU9ImFkZGl0aW9uYWxEZXRhaWxzIiB2YWx1ZT17Zm9ybS5hZGRpdGlvbmFsRGV0YWlsc30gb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX0gcGxhY2Vob2xkZXI9IlByb3ZpZGUgc3BlY2lmaWMgY29udGV4dCwgb2JzZXJ2YXRpb25zLCBvciBkZXRhaWxzLi4uIiAvPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICApfQogICAgICAgICAgPC9kaXY+CgogICAgICAgICAge2ludGVsLnNjb3JlICYmIHZpb2xhdGlvbiAmJiAoCiAgICAgICAgICAgIDxUaWVyV2FybmluZwogICAgICAgICAgICAgIGN1cnJlbnRQb2ludHM9e2ludGVsLnNjb3JlLmFjdGl2ZV9wb2ludHN9CiAgICAgICAgICAgICAgYWRkaW5nUG9pbnRzPXtwYXJzZUludChmb3JtLnBvaW50cykgfHwgMH0KICAgICAgICAgICAgLz4KICAgICAgICAgICl9CgogICAgICAgICAge3Zpb2xhdGlvbiAmJiAoCiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3MucG9pbnRCb3h9PgogICAgICAgICAgICAgIDxoNCBzdHlsZT17eyBjb2xvcjogJyNmZmRmOGEnLCBtYXJnaW5Cb3R0b206ICcxMHB4JyB9fT5DUEFTIFBvaW50IEFzc2Vzc21lbnQ8L2g0PgogICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogMCB9fT4KICAgICAgICAgICAgICAgIHt2aW9sYXRpb24ubmFtZX06IHt2aW9sYXRpb24ubWluUG9pbnRzID09PSB2aW9sYXRpb24ubWF4UG9pbnRzCiAgICAgICAgICAgICAgICAgID8gYCR7dmlvbGF0aW9uLm1pblBvaW50c30gUG9pbnRzIChGaXhlZClgCiAgICAgICAgICAgICAgICAgIDogYCR7dmlvbGF0aW9uLm1pblBvaW50c33igJMke3Zpb2xhdGlvbi5tYXhQb2ludHN9IFBvaW50c2B9CiAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT17eyB3aWR0aDogJzEwMCUnLCBtYXJnaW5Ub3A6ICcxMHB4JyB9fSB0eXBlPSJyYW5nZSIgbmFtZT0icG9pbnRzIgogICAgICAgICAgICAgICAgbWluPXt2aW9sYXRpb24ubWluUG9pbnRzfSBtYXg9e3Zpb2xhdGlvbi5tYXhQb2ludHN9CiAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybS5wb2ludHN9IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9IC8+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cy5wb2ludFZhbHVlfT57Zm9ybS5wb2ludHN9IFBvaW50czwvZGl2PgogICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiAnMTJweCcsIGNvbG9yOiAnI2QxZDNlMCcgfX0+QWRqdXN0IHRvIHJlZmxlY3Qgc2V2ZXJpdHkgYW5kIGNvbnRleHQ8L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgKX0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgey8qIOKUgOKUgCBBQ0tOT1dMRURHTUVOVCBTSUdOQVRVUkUg4pSA4pSAICovfQogICAgICAgIDxkaXYgc3R5bGU9e3MuYWNrU2VjdGlvbn0+CiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2Jhc2VsaW5lJywgZ2FwOiAnMTBweCcsIG1hcmdpbkJvdHRvbTogJzRweCcgfX0+CiAgICAgICAgICAgIDxoMyBzdHlsZT17cy5hY2tUaXRsZX0+4pyFIEVtcGxveWVlIEFja25vd2xlZGdtZW50PC9oMz4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6ICcxMXB4JywgY29sb3I6ICcjNTU2NjcxJywgYm9yZGVyOiAnMXB4IHNvbGlkICMyMjMzNDQnLCBib3JkZXJSYWRpdXM6ICc0cHgnLCBwYWRkaW5nOiAnMXB4IDZweCcgfX0+T3B0aW9uYWw8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwIHN0eWxlPXtzLmFja1N1Yn0+Q2FwdHVyZSBlbXBsb3llZSByZWNlaXB0IGF0IHRoZSB0aW1lIG9mIGZvcm0gc3VibWlzc2lvbi4gQ2FuIGFsc28gYmUgYWRkZWQgbGF0ZXIgdmlhIHRoZSBTaWduIGJ1dHRvbiBpbiB2aW9sYXRpb24gaGlzdG9yeS48L3A+CiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLnMuZ3JpZCwgZ3JpZFRlbXBsYXRlQ29sdW1uczogJzFmciAxZnInLCBtYXJnaW5Ub3A6IDAgfX0+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3MuaXRlbX0+CiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtzLmxhYmVsfT5BY2tub3dsZWRnZWQgQnkgKFByaW50ZWQgTmFtZSk6PC9sYWJlbD4KICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgIHN0eWxlPXtzLmlucHV0fQogICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgIG5hbWU9ImFja25vd2xlZGdlZEJ5IgogICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm0uYWNrbm93bGVkZ2VkQnl9CiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfQogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkVtcGxveWVlJ3MgcHJpbnRlZCBuYW1lIgogICAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IHN0eWxlPXtzLml0ZW19PgogICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17cy5sYWJlbH0+QWNrbm93bGVkZ2VkIERhdGU6PC9sYWJlbD4KICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgIHN0eWxlPXtzLmlucHV0fQogICAgICAgICAgICAgICAgdHlwZT0iZGF0ZSIKICAgICAgICAgICAgICAgIG5hbWU9ImFja25vd2xlZGdlZEF0IgogICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm0uYWNrbm93bGVkZ2VkQXR9CiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfQogICAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgc3R5bGU9e3MuYnRuUm93fT4KICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBzdHlsZT17cy5idG5QcmltYXJ5fT5TdWJtaXQgVmlvbGF0aW9uPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgc3R5bGU9e3MuYnRuU2Vjb25kYXJ5fSBvbkNsaWNrPXsoKSA9PiB7IHNldEZvcm0oRU1QVFlfRk9STSk7IHNldFZpb2xhdGlvbihudWxsKTsgc2V0U3RhdHVzKG51bGwpOyBzZXRMYXN0VmlvbElkKG51bGwpOyB9fT4KICAgICAgICAgICAgQ2xlYXIgRm9ybQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIHtsYXN0VmlvbElkICYmIHN0YXR1cz8ub2sgJiYgKAogICAgICAgICAgPGRpdiBzdHlsZT17eyB0ZXh0QWxpZ246ICdjZW50ZXInLCBtYXJnaW5Ub3A6ICcxNnB4JyB9fT4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgICBzdHlsZT17eyAuLi5zLmJ0blBkZiwgb3BhY2l0eTogcGRmTG9hZGluZyA/IDAuNyA6IDEgfX0KICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVEb3dubG9hZFBkZn0KICAgICAgICAgICAgICBkaXNhYmxlZD17cGRmTG9hZGluZ30KICAgICAgICAgICAgPgogICAgICAgICAgICAgIHtwZGZMb2FkaW5nID8gJ+KPsyBHZW5lcmF0aW5nIFBERi4uLicgOiAn4qyHIERvd25sb2FkIFBERid9CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogJzExcHgnLCBjb2xvcjogJyM5Y2EwYjgnLCBtYXJnaW5Ub3A6ICc2cHgnIH19PgogICAgICAgICAgICAgIFZpb2xhdGlvbiAje2xhc3RWaW9sSWR9IOKAlCBjbGljayB0byBkb3dubG9hZCB0aGUgc2lnbmVkIHZpb2xhdGlvbiBkb2N1bWVudAogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICApfQoKICAgICAgICB7c3RhdHVzICYmIDxkaXYgc3R5bGU9e3N0YXR1cy5vayA/IHMuc3RhdHVzT2sgOiBzLnN0YXR1c0Vycn0+e3N0YXR1cy5tc2d9PC9kaXY+fQogICAgICA8L2Zvcm0+CgogICAgICB7Zm9ybS5lbXBsb3llZUlkICYmICgKICAgICAgICA8ZGl2IHN0eWxlPXtzLnNlY3Rpb259PgogICAgICAgICAgPGgyIHN0eWxlPXtzLnNlY3Rpb25UaXRsZX0+VmlvbGF0aW9uIEhpc3Rvcnk8L2gyPgogICAgICAgICAgPFZpb2xhdGlvbkhpc3RvcnkgaGlzdG9yeT17aW50ZWwuaGlzdG9yeX0gbG9hZGluZz17aW50ZWwubG9hZGluZ30gLz4KICAgICAgICA8L2Rpdj4KICAgICAgKX0KCiAgICA8L2Rpdj4KICApOwp9Cg==
\ No newline at end of file