ITxhcmNoPgpfXy5QS0dERUYgICAgICAgMCAgICAgICAgICAgMCAgICAgMCAgICAgNjQ0ICAgICAyNDI5OCAgICAgYApnbyBvYmplY3QgZGFyd2luIGFtZDY0IGdvMS4xNyBYOnJlZ2FiaXdyYXBwZXJzLHJlZ2FiaWcscmVnYWJpcmVmbGVjdCxyZWdhYmlkZWZlcixyZWdhYmlhcmdzCmJ1aWxkIGlkICJTWkRuM1FZVVowTTJKSlVPV2lDMi8wNXlxWGZuTTEyMEo2SUI1TFc2ZCIKCgokJEIKaQGgvAEPWSRHT1JPT1Qvc3JjL2NtZC92ZW5kb3IvZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvdGhpcmRfcGFydHkvZDNmbGFtZWdyYXBoL2QzX2ZsYW1lX2dyYXBoLmdv864BCihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7Cgl0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMsIHJlcXVpcmUoJ2QzJykpIDoKCXR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnZDMnXSwgZmFjdG9yeSkgOgoJKGZhY3RvcnkoKGdsb2JhbC5kMyA9IGdsb2JhbC5kMyB8fCB7fSksZ2xvYmFsLmQzKSk7Cn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzLGQzKSB7ICd1c2Ugc3RyaWN0JzsKCnZhciBkM19fZGVmYXVsdCA9ICdkZWZhdWx0JyBpbiBkMyA/IGQzWydkZWZhdWx0J10gOiBkMzsKCnZhciBjb21tb25qc0dsb2JhbCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDoge307CgoKCgoKZnVuY3Rpb24gY3JlYXRlQ29tbW9uanNNb2R1bGUoZm4sIG1vZHVsZSkgewoJcmV0dXJuIG1vZHVsZSA9IHsgZXhwb3J0czoge30gfSwgZm4obW9kdWxlLCBtb2R1bGUuZXhwb3J0cyksIG1vZHVsZS5leHBvcnRzOwp9Cgp2YXIgZDNUaXAgPSBjcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbiAobW9kdWxlKSB7Ci8vIGQzLnRpcAovLyBDb3B5cmlnaHQgKGMpIDIwMTMgSnVzdGluIFBhbG1lcgovLwovLyBUb29sdGlwcyBmb3IgZDMuanMgU1ZHIHZpc3VhbGl6YXRpb25zCgooZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHsKICBpZiAodHlwZW9mIHVuZGVmaW5lZCA9PT0gJ2Z1bmN0aW9uJyAmJiB1bmRlZmluZWQuYW1kKSB7CiAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUgd2l0aCBkMyBhcyBhIGRlcGVuZGVuY3kuCiAgICB1bmRlZmluZWQoWydkMyddLCBmYWN0b3J5KTsKICB9IGVsc2UgaWYgKCdvYmplY3QnID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykgewogICAgLy8gQ29tbW9uSlMKICAgIHZhciBkMyQkMSA9IGQzX19kZWZhdWx0OwogICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KGQzJCQxKTsKICB9IGVsc2UgewogICAgLy8gQnJvd3NlciBnbG9iYWwuCiAgICByb290LmQzLnRpcCA9IGZhY3Rvcnkocm9vdC5kMyk7CiAgfQp9KGNvbW1vbmpzR2xvYmFsLCBmdW5jdGlvbiAoZDMkJDEpIHsKCiAgLy8gUHVibGljIC0gY29udHJ1Y3RzIGEgbmV3IHRvb2x0aXAKICAvLwogIC8vIFJldHVybnMgYSB0aXAKICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICB2YXIgZGlyZWN0aW9uID0gZDNfdGlwX2RpcmVjdGlvbiwKICAgICAgICBvZmZzZXQgICAgPSBkM190aXBfb2Zmc2V0LAogICAgICAgIGh0bWwgICAgICA9IGQzX3RpcF9odG1sLAogICAgICAgIG5vZGUgICAgICA9IGluaXROb2RlKCksCiAgICAgICAgc3ZnICAgICAgID0gbnVsbCwKICAgICAgICBwb2ludCAgICAgPSBudWxsLAogICAgICAgIHRhcmdldCAgICA9IG51bGw7CgogICAgZnVuY3Rpb24gdGlwKHZpcykgewogICAgICBzdmcgPSBnZXRTVkdOb2RlKHZpcyk7CiAgICAgIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7CiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICB9CgogICAgLy8gUHVibGljIC0gc2hvdyB0aGUgdG9vbHRpcCBvbiB0aGUgc2NyZWVuCiAgICAvLwogICAgLy8gUmV0dXJucyBhIHRpcAogICAgdGlwLnNob3cgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwogICAgICBpZihhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gaW5zdGFuY2VvZiBTVkdFbGVtZW50KSB0YXJnZXQgPSBhcmdzLnBvcCgpOwoKICAgICAgdmFyIGNvbnRlbnQgPSBodG1sLmFwcGx5KHRoaXMsIGFyZ3MpLAogICAgICAgICAgcG9mZnNldCA9IG9mZnNldC5hcHBseSh0aGlzLCBhcmdzKSwKICAgICAgICAgIGRpciAgICAgPSBkaXJlY3Rpb24uYXBwbHkodGhpcywgYXJncyksCiAgICAgICAgICBub2RlbCAgID0gZ2V0Tm9kZUVsKCksCiAgICAgICAgICBpICAgICAgID0gZGlyZWN0aW9ucy5sZW5ndGgsCiAgICAgICAgICBjb29yZHMsCiAgICAgICAgICBzY3JvbGxUb3AgID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCwKICAgICAgICAgIHNjcm9sbExlZnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7CgogICAgICBub2RlbC5odG1sKGNvbnRlbnQpCiAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMSkuc3R5bGUoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpOwoKICAgICAgd2hpbGUoaS0tKSBub2RlbC5jbGFzc2VkKGRpcmVjdGlvbnNbaV0sIGZhbHNlKTsKICAgICAgY29vcmRzID0gZGlyZWN0aW9uX2NhbGxiYWNrcy5nZXQoZGlyKS5hcHBseSh0aGlzKTsKICAgICAgbm9kZWwuY2xhc3NlZChkaXIsIHRydWUpCiAgICAgIAkuc3R5bGUoJ3RvcCcsIChjb29yZHMudG9wICsgIHBvZmZzZXRbMF0pICsgc2Nyb2xsVG9wICsgJ3B4JykKICAgICAgCS5zdHlsZSgnbGVmdCcsIChjb29yZHMubGVmdCArIHBvZmZzZXRbMV0pICsgc2Nyb2xsTGVmdCArICdweCcpOwoKICAgICAgcmV0dXJuIHRpcDsKICAgIH07CgogICAgLy8gUHVibGljIC0gaGlkZSB0aGUgdG9vbHRpcAogICAgLy8KICAgIC8vIFJldHVybnMgYSB0aXAKICAgIHRpcC5oaWRlID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBub2RlbCA9IGdldE5vZGVFbCgpOwogICAgICBub2RlbC5zdHlsZSgnb3BhY2l0eScsIDApLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7CiAgICAgIHJldHVybiB0aXAKICAgIH07CgogICAgLy8gUHVibGljOiBQcm94eSBhdHRyIGNhbGxzIHRvIHRoZSBkMyB0aXAgY29udGFpbmVyLiAgU2V0cyBvciBnZXRzIGF0dHJpYnV0ZSB2YWx1ZS4KICAgIC8vCiAgICAvLyBuIC0gbmFtZSBvZiB0aGUgYXR0cmlidXRlCiAgICAvLyB2IC0gdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZQogICAgLy8KICAgIC8vIFJldHVybnMgdGlwIG9yIGF0dHJpYnV0ZSB2YWx1ZQogICAgdGlwLmF0dHIgPSBmdW5jdGlvbihuLCB2KSB7CiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMiAmJiB0eXBlb2YgbiA9PT0gJ3N0cmluZycpIHsKICAgICAgICByZXR1cm4gZ2V0Tm9kZUVsKCkuYXR0cihuKQogICAgICB9IGVsc2UgewogICAgICAgIHZhciBhcmdzID0gIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CiAgICAgICAgZDMkJDEuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRyLmFwcGx5KGdldE5vZGVFbCgpLCBhcmdzKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHRpcAogICAgfTsKCiAgICAvLyBQdWJsaWM6IFByb3h5IHN0eWxlIGNhbGxzIHRvIHRoZSBkMyB0aXAgY29udGFpbmVyLiAgU2V0cyBvciBnZXRzIGEgc3R5bGUgdmFsdWUuCiAgICAvLwogICAgLy8gbiAtIG5hbWUgb2YgdGhlIHByb3BlcnR5CiAgICAvLyB2IC0gdmFsdWUgb2YgdGhlIHByb3BlcnR5CiAgICAvLwogICAgLy8gUmV0dXJucyB0aXAgb3Igc3R5bGUgcHJvcGVydHkgdmFsdWUKICAgIHRpcC5zdHlsZSA9IGZ1bmN0aW9uKG4sIHYpIHsKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyICYmIHR5cGVvZiBuID09PSAnc3RyaW5nJykgewogICAgICAgIHJldHVybiBnZXROb2RlRWwoKS5zdHlsZShuKQogICAgICB9IGVsc2UgewogICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKICAgICAgICBkMyQkMS5zZWxlY3Rpb24ucHJvdG90eXBlLnN0eWxlLmFwcGx5KGdldE5vZGVFbCgpLCBhcmdzKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHRpcAogICAgfTsKCiAgICAvLyBQdWJsaWM6IFNldCBvciBnZXQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgdG9vbHRpcAogICAgLy8KICAgIC8vIHYgLSBPbmUgb2Ygbihub3J0aCksIHMoc291dGgpLCBlKGVhc3QpLCBvciB3KHdlc3QpLCBudyhub3J0aHdlc3QpLAogICAgLy8gICAgIHN3KHNvdXRod2VzdCksIG5lKG5vcnRoZWFzdCkgb3Igc2Uoc291dGhlYXN0KQogICAgLy8KICAgIC8vIFJldHVybnMgdGlwIG9yIGRpcmVjdGlvbgogICAgdGlwLmRpcmVjdGlvbiA9IGZ1bmN0aW9uKHYpIHsKICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZGlyZWN0aW9uCiAgICAgIGRpcmVjdGlvbiA9IHYgPT0gbnVsbCA/IHYgOiBmdW5jdG9yKHYpOwoKICAgICAgcmV0dXJuIHRpcAogICAgfTsKCiAgICAvLyBQdWJsaWM6IFNldHMgb3IgZ2V0cyB0aGUgb2Zmc2V0IG9mIHRoZSB0aXAKICAgIC8vCiAgICAvLyB2IC0gQXJyYXkgb2YgW3gsIHldIG9mZnNldAogICAgLy8KICAgIC8vIFJldHVybnMgb2Zmc2V0IG9yCiAgICB0aXAub2Zmc2V0ID0gZnVuY3Rpb24odikgewogICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBvZmZzZXQKICAgICAgb2Zmc2V0ID0gdiA9PSBudWxsID8gdiA6IGZ1bmN0b3Iodik7CgogICAgICByZXR1cm4gdGlwCiAgICB9OwoKICAgIC8vIFB1YmxpYzogc2V0cyBvciBnZXRzIHRoZSBodG1sIHZhbHVlIG9mIHRoZSB0b29sdGlwCiAgICAvLwogICAgLy8gdiAtIFN0cmluZyB2YWx1ZSBvZiB0aGUgdGlwCiAgICAvLwogICAgLy8gUmV0dXJucyBodG1sIHZhbHVlIG9yIHRpcAogICAgdGlwLmh0bWwgPSBmdW5jdGlvbih2KSB7CiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGh0bWwKICAgICAgaHRtbCA9IHYgPT0gbnVsbCA/IHYgOiBmdW5jdG9yKHYpOwoKICAgICAgcmV0dXJuIHRpcAogICAgfTsKCiAgICAvLyBQdWJsaWM6IGRlc3Ryb3lzIHRoZSB0b29sdGlwIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIERPTQogICAgLy8KICAgIC8vIFJldHVybnMgYSB0aXAKICAgIHRpcC5kZXN0cm95ID0gZnVuY3Rpb24oKSB7CiAgICAgIGlmKG5vZGUpIHsKICAgICAgICBnZXROb2RlRWwoKS5yZW1vdmUoKTsKICAgICAgICBub2RlID0gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4gdGlwOwogICAgfTsKCiAgICBmdW5jdGlvbiBkM190aXBfZGlyZWN0aW9uKCkgeyByZXR1cm4gJ24nIH0KICAgIGZ1bmN0aW9uIGQzX3RpcF9vZmZzZXQoKSB7IHJldHVybiBbMCwgMF0gfQogICAgZnVuY3Rpb24gZDNfdGlwX2h0bWwoKSB7IHJldHVybiAnICcgfQoKICAgIHZhciBkaXJlY3Rpb25fY2FsbGJhY2tzID0gZDMkJDEubWFwKHsKICAgICAgbjogIGRpcmVjdGlvbl9uLAogICAgICBzOiAgZGlyZWN0aW9uX3MsCiAgICAgIGU6ICBkaXJlY3Rpb25fZSwKICAgICAgdzogIGRpcmVjdGlvbl93LAogICAgICBudzogZGlyZWN0aW9uX253LAogICAgICBuZTogZGlyZWN0aW9uX25lLAogICAgICBzdzogZGlyZWN0aW9uX3N3LAogICAgICBzZTogZGlyZWN0aW9uX3NlCiAgICB9KSwKCiAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9uX2NhbGxiYWNrcy5rZXlzKCk7CgogICAgZnVuY3Rpb24gZGlyZWN0aW9uX24oKSB7CiAgICAgIHZhciBiYm94ID0gZ2V0U2NyZWVuQkJveCgpOwogICAgICByZXR1cm4gewogICAgICAgIHRvcDogIGJib3gubi55IC0gbm9kZS5vZmZzZXRIZWlnaHQsCiAgICAgICAgbGVmdDogYmJveC5uLnggLSBub2RlLm9mZnNldFdpZHRoIC8gMgogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZGlyZWN0aW9uX3MoKSB7CiAgICAgIHZhciBiYm94ID0gZ2V0U2NyZWVuQkJveCgpOwogICAgICByZXR1cm4gewogICAgICAgIHRvcDogIGJib3gucy55LAogICAgICAgIGxlZnQ6IGJib3gucy54IC0gbm9kZS5vZmZzZXRXaWR0aCAvIDIKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGRpcmVjdGlvbl9lKCkgewogICAgICB2YXIgYmJveCA9IGdldFNjcmVlbkJCb3goKTsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b3A6ICBiYm94LmUueSAtIG5vZGUub2Zmc2V0SGVpZ2h0IC8gMiwKICAgICAgICBsZWZ0OiBiYm94LmUueAogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZGlyZWN0aW9uX3coKSB7CiAgICAgIHZhciBiYm94ID0gZ2V0U2NyZWVuQkJveCgpOwogICAgICByZXR1cm4gewogICAgICAgIHRvcDogIGJib3gudy55IC0gbm9kZS5vZmZzZXRIZWlnaHQgLyAyLAogICAgICAgIGxlZnQ6IGJib3gudy54IC0gbm9kZS5vZmZzZXRXaWR0aAogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZGlyZWN0aW9uX253KCkgewogICAgICB2YXIgYmJveCA9IGdldFNjcmVlbkJCb3goKTsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b3A6ICBiYm94Lm53LnkgLSBub2RlLm9mZnNldEhlaWdodCwKICAgICAgICBsZWZ0OiBiYm94Lm53LnggLSBub2RlLm9mZnNldFdpZHRoCiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBkaXJlY3Rpb25fbmUoKSB7CiAgICAgIHZhciBiYm94ID0gZ2V0U2NyZWVuQkJveCgpOwogICAgICByZXR1cm4gewogICAgICAgIHRvcDogIGJib3gubmUueSAtIG5vZGUub2Zmc2V0SGVpZ2h0LAogICAgICAgIGxlZnQ6IGJib3gubmUueAogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZGlyZWN0aW9uX3N3KCkgewogICAgICB2YXIgYmJveCA9IGdldFNjcmVlbkJCb3goKTsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b3A6ICBiYm94LnN3LnksCiAgICAgICAgbGVmdDogYmJveC5zdy54IC0gbm9kZS5vZmZzZXRXaWR0aAogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZGlyZWN0aW9uX3NlKCkgewogICAgICB2YXIgYmJveCA9IGdldFNjcmVlbkJCb3goKTsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b3A6ICBiYm94LnNlLnksCiAgICAgICAgbGVmdDogYmJveC5lLngKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGluaXROb2RlKCkgewogICAgICB2YXIgbm9kZSA9IGQzJCQxLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CiAgICAgIG5vZGUuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJykuc3R5bGUoJ3RvcCcsIDApLnN0eWxlKCdvcGFjaXR5JywgMCkKICAgICAgCS5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAnbm9uZScpLnN0eWxlKCdib3gtc2l6aW5nJywgJ2JvcmRlci1ib3gnKTsKCiAgICAgIHJldHVybiBub2RlLm5vZGUoKQogICAgfQoKICAgIGZ1bmN0aW9uIGdldFNWR05vZGUoZWwpIHsKICAgICAgZWwgPSBlbC5ub2RlKCk7CiAgICAgIGlmKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3N2ZycpCiAgICAgICAgcmV0dXJuIGVsCgogICAgICByZXR1cm4gZWwub3duZXJTVkdFbGVtZW50CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0Tm9kZUVsKCkgewogICAgICBpZihub2RlID09PSBudWxsKSB7CiAgICAgICAgbm9kZSA9IGluaXROb2RlKCk7CiAgICAgICAgLy8gcmUtYWRkIG5vZGUgdG8gRE9NCiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChub2RlKTsKICAgICAgfQogICAgICByZXR1cm4gZDMkJDEuc2VsZWN0KG5vZGUpOwogICAgfQoKICAgIC8vIFByaXZhdGUgLSBnZXRzIHRoZSBzY3JlZW4gY29vcmRpbmF0ZXMgb2YgYSBzaGFwZQogICAgLy8KICAgIC8vIEdpdmVuIGEgc2hhcGUgb24gdGhlIHNjcmVlbiwgd2lsbCByZXR1cm4gYW4gU1ZHUG9pbnQgZm9yIHRoZSBkaXJlY3Rpb25zCiAgICAvLyBuKG5vcnRoKSwgcyhzb3V0aCksIGUoZWFzdCksIHcod2VzdCksIG5lKG5vcnRoZWFzdCksIHNlKHNvdXRoZWFzdCksIG53KG5vcnRod2VzdCksCiAgICAvLyBzdyhzb3V0aHdlc3QpLgogICAgLy8KICAgIC8vICAgICstKy0rCiAgICAvLyAgICB8ICAgfAogICAgLy8gICAgKyAgICsKICAgIC8vICAgIHwgICB8CiAgICAvLyAgICArLSstKwogICAgLy8KICAgIC8vIFJldHVybnMgYW4gT2JqZWN0IHtuLCBzLCBlLCB3LCBudywgc3csIG5lLCBzZX0KICAgIGZ1bmN0aW9uIGdldFNjcmVlbkJCb3goKSB7CiAgICAgIHZhciB0YXJnZXRlbCAgID0gdGFyZ2V0IHx8IGQzJCQxLmV2ZW50LnRhcmdldDsKCiAgICAgIHdoaWxlICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIHRhcmdldGVsLmdldFNjcmVlbkNUTSAmJiAndW5kZWZpbmVkJyA9PT0gdGFyZ2V0ZWwucGFyZW50Tm9kZSkgewogICAgICAgICAgdGFyZ2V0ZWwgPSB0YXJnZXRlbC5wYXJlbnROb2RlOwogICAgICB9CgogICAgICB2YXIgYmJveCAgICAgICA9IHt9LAogICAgICAgICAgbWF0cml4ICAgICA9IHRhcmdldGVsLmdldFNjcmVlbkNUTSgpLAogICAgICAgICAgdGJib3ggICAgICA9IHRhcmdldGVsLmdldEJCb3goKSwKICAgICAgICAgIHdpZHRoICAgICAgPSB0YmJveC53aWR0aCwKICAgICAgICAgIGhlaWdodCAgICAgPSB0YmJveC5oZWlnaHQsCiAgICAgICAgICB4ICAgICAgICAgID0gdGJib3gueCwKICAgICAgICAgIHkgICAgICAgICAgPSB0YmJveC55OwoKICAgICAgcG9pbnQueCA9IHg7CiAgICAgIHBvaW50LnkgPSB5OwogICAgICBiYm94Lm53ID0gcG9pbnQubWF0cml4VHJhbnNmb3JtKG1hdHJpeCk7CiAgICAgIHBvaW50LnggKz0gd2lkdGg7CiAgICAgIGJib3gubmUgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0obWF0cml4KTsKICAgICAgcG9pbnQueSArPSBoZWlnaHQ7CiAgICAgIGJib3guc2UgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0obWF0cml4KTsKICAgICAgcG9pbnQueCAtPSB3aWR0aDsKICAgICAgYmJveC5zdyA9IHBvaW50Lm1hdHJpeFRyYW5zZm9ybShtYXRyaXgpOwogICAgICBwb2ludC55IC09IGhlaWdodCAvIDI7CiAgICAgIGJib3gudyAgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0obWF0cml4KTsKICAgICAgcG9pbnQueCArPSB3aWR0aDsKICAgICAgYmJveC5lID0gcG9pbnQubWF0cml4VHJhbnNmb3JtKG1hdHJpeCk7CiAgICAgIHBvaW50LnggLT0gd2lkdGggLyAyOwogICAgICBwb2ludC55IC09IGhlaWdodCAvIDI7CiAgICAgIGJib3gubiA9IHBvaW50Lm1hdHJpeFRyYW5zZm9ybShtYXRyaXgpOwogICAgICBwb2ludC55ICs9IGhlaWdodDsKICAgICAgYmJveC5zID0gcG9pbnQubWF0cml4VHJhbnNmb3JtKG1hdHJpeCk7CgogICAgICByZXR1cm4gYmJveAogICAgfQogICAgCiAgICAvLyBQcml2YXRlIC0gcmVwbGFjZSBEM0pTIDMuWCBkMy5mdW5jdG9yKCkgZnVuY3Rpb24KICAgIGZ1bmN0aW9uIGZ1bmN0b3IodikgewogICAgCXJldHVybiB0eXBlb2YgdiA9PT0gImZ1bmN0aW9uIiA/IHYgOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdgogICAgCX0KICAgIH0KCiAgICByZXR1cm4gdGlwCiAgfTsKCn0pKTsKfSk7Cgp2YXIgZmxhbWVncmFwaCA9IGZ1bmN0aW9uICgpIHsKICB2YXIgdyA9IDk2MDsgLy8gZ3JhcGggd2lkdGgKICB2YXIgaCA9IG51bGw7IC8vIGdyYXBoIGhlaWdodAogIHZhciBjID0gMTg7IC8vIGNlbGwgaGVpZ2h0CiAgdmFyIHNlbGVjdGlvbiA9IG51bGw7IC8vIHNlbGVjdGlvbgogIHZhciB0b29sdGlwID0gdHJ1ZTsgLy8gZW5hYmxlIHRvb2x0aXAKICB2YXIgdGl0bGUgPSAnJzsgLy8gZ3JhcGggdGl0bGUKICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gNzUwOwogIHZhciB0cmFuc2l0aW9uRWFzZSA9IGQzLmVhc2VDdWJpYzsgLy8gdG9vbHRpcCBvZmZzZXQKICB2YXIgc29ydCA9IGZhbHNlOwogIHZhciBpbnZlcnRlZCA9IGZhbHNlOyAvLyBpbnZlcnQgdGhlIGdyYXBoIGRpcmVjdGlvbgogIHZhciBjbGlja0hhbmRsZXIgPSBudWxsOwogIHZhciBtaW5GcmFtZVNpemUgPSAwOwogIHZhciBkZXRhaWxzID0gbnVsbDsKCiAgdmFyIHRpcCA9IGQzVGlwKCkKICAgIC5kaXJlY3Rpb24oJ3MnKQogICAgLm9mZnNldChbOCwgMF0pCiAgICAuYXR0cignY2xhc3MnLCAnZDMtZmxhbWUtZ3JhcGgtdGlwJykKICAgIC5odG1sKGZ1bmN0aW9uIChkKSB7IHJldHVybiBsYWJlbChkKSB9KTsKCiAgdmFyIHN2ZzsKCiAgZnVuY3Rpb24gbmFtZSAoZCkgewogICAgcmV0dXJuIGQuZGF0YS5uIHx8IGQuZGF0YS5uYW1lCiAgfQoKICBmdW5jdGlvbiBsaWJ0eXBlIChkKSB7CiAgICByZXR1cm4gZC5kYXRhLmwgfHwgZC5kYXRhLmxpYnR5cGUKICB9CgogIGZ1bmN0aW9uIGNoaWxkcmVuIChkKSB7CiAgICByZXR1cm4gZC5jIHx8IGQuY2hpbGRyZW4KICB9CgogIGZ1bmN0aW9uIHZhbHVlIChkKSB7CiAgICByZXR1cm4gZC52IHx8IGQudmFsdWUKICB9CgogIHZhciBsYWJlbCA9IGZ1bmN0aW9uIChkKSB7CiAgICByZXR1cm4gbmFtZShkKSArICcgKCcgKyBkMy5mb3JtYXQoJy4zZicpKDEwMCAqIChkLngxIC0gZC54MCksIDMpICsgJyUsICcgKyB2YWx1ZShkKSArICcgc2FtcGxlcyknCiAgfTsKCiAgZnVuY3Rpb24gc2V0RGV0YWlscyAodCkgewogICAgaWYgKGRldGFpbHMpIHsgZGV0YWlscy5pbm5lckhUTUwgPSB0OyB9CiAgfQoKICB2YXIgY29sb3JNYXBwZXIgPSBmdW5jdGlvbiAoZCkgewogICAgcmV0dXJuIGQuaGlnaGxpZ2h0ID8gJyNFNjAwRTYnIDogY29sb3JIYXNoKG5hbWUoZCksIGxpYnR5cGUoZCkpCiAgfTsKCiAgZnVuY3Rpb24gZ2VuZXJhdGVIYXNoIChuYW1lKSB7CiAgICAvLyBSZXR1cm4gYSB2ZWN0b3IgKDAuMC0+MS4wKSB0aGF0IGlzIGEgaGFzaCBvZiB0aGUgaW5wdXQgc3RyaW5nLgogICAgLy8gVGhlIGhhc2ggaXMgY29tcHV0ZWQgdG8gZmF2b3IgZWFybHkgY2hhcmFjdGVycyBvdmVyIGxhdGVyIG9uZXMsIHNvCiAgICAvLyB0aGF0IHN0cmluZ3Mgd2l0aCBzaW1pbGFyIHN0YXJ0cyBoYXZlIHNpbWlsYXIgdmVjdG9ycy4gT25seSB0aGUgZmlyc3QKICAgIC8vIDYgY2hhcmFjdGVycyBhcmUgY29uc2lkZXJlZC4KICAgIGNvbnN0IE1BWF9DSEFSID0gNjsKCiAgICB2YXIgaGFzaCA9IDA7CiAgICB2YXIgbWF4SGFzaCA9IDA7CiAgICB2YXIgd2VpZ2h0ID0gMTsKICAgIHZhciBtb2QgPSAxMDsKCiAgICBpZiAobmFtZSkgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaSA+IE1BWF9DSEFSKSB7IGJyZWFrIH0KICAgICAgICBoYXNoICs9IHdlaWdodCAqIChuYW1lLmNoYXJDb2RlQXQoaSkgJSBtb2QpOwogICAgICAgIG1heEhhc2ggKz0gd2VpZ2h0ICogKG1vZCAtIDEpOwogICAgICAgIHdlaWdodCAqPSAwLjcwOwogICAgICB9CiAgICAgIGlmIChtYXhIYXNoID4gMCkgeyBoYXNoID0gaGFzaCAvIG1heEhhc2g7IH0KICAgIH0KICAgIHJldHVybiBoYXNoCiAgfQoKICBmdW5jdGlvbiBjb2xvckhhc2ggKG5hbWUsIGxpYnR5cGUpIHsKICAgIC8vIFJldHVybiBhIGNvbG9yIGZvciB0aGUgZ2l2ZW4gbmFtZSBhbmQgbGlicmFyeSB0eXBlLiBUaGUgbGlicmFyeSB0eXBlCiAgICAvLyBzZWxlY3RzIHRoZSBodWUsIGFuZCB0aGUgbmFtZSBpcyBoYXNoZWQgdG8gYSBjb2xvciBpbiB0aGF0IGh1ZS4KCiAgICB2YXIgcjsKICAgIHZhciBnOwogICAgdmFyIGI7CgogICAgLy8gU2VsZWN0IGh1ZS4gT3JkZXIgaXMgaW1wb3J0YW50LgogICAgdmFyIGh1ZTsKICAgIGlmICh0eXBlb2YgbGlidHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbGlidHlwZSA9PT0gJycpIHsKICAgICAgLy8gZGVmYXVsdCB3aGVuIGxpYnR5cGUgaXMgbm90IGluIHVzZQogICAgICBodWUgPSAnd2FybSc7CiAgICB9IGVsc2UgewogICAgICBodWUgPSAncmVkJzsKICAgICAgaWYgKG5hbWUubWF0Y2goLzo6LykpIHsKICAgICAgICBodWUgPSAneWVsbG93JzsKICAgICAgfQogICAgICBpZiAobGlidHlwZSA9PT0gJ2tlcm5lbCcpIHsKICAgICAgICBodWUgPSAnb3JhbmdlJzsKICAgICAgfSBlbHNlIGlmIChsaWJ0eXBlID09PSAnaml0JykgewogICAgICAgIGh1ZSA9ICdncmVlbic7CiAgICAgIH0gZWxzZSBpZiAobGlidHlwZSA9PT0gJ2lubGluZWQnKSB7CiAgICAgICAgaHVlID0gJ2FxdWEnOwogICAgICB9CiAgICB9CgogICAgLy8gY2FsY3VsYXRlIGhhc2gKICAgIHZhciB2ZWN0b3IgPSAwOwogICAgaWYgKG5hbWUpIHsKICAgICAgdmFyIG5hbWVBcnIgPSBuYW1lLnNwbGl0KCdgJyk7CiAgICAgIGlmIChuYW1lQXJyLmxlbmd0aCA+IDEpIHsKICAgICAgICBuYW1lID0gbmFtZUFycltuYW1lQXJyLmxlbmd0aCAtIDFdOyAvLyBkcm9wIG1vZHVsZSBuYW1lIGlmIHByZXNlbnQKICAgICAgfQogICAgICBuYW1lID0gbmFtZS5zcGxpdCgnKCcpWzBdOyAvLyBkcm9wIGV4dHJhIGluZm8KICAgICAgdmVjdG9yID0gZ2VuZXJhdGVIYXNoKG5hbWUpOwogICAgfQoKICAgIC8vIGNhbGN1bGF0ZSBjb2xvcgogICAgaWYgKGh1ZSA9PT0gJ3JlZCcpIHsKICAgICAgciA9IDIwMCArIE1hdGgucm91bmQoNTUgKiB2ZWN0b3IpOwogICAgICBnID0gNTAgKyBNYXRoLnJvdW5kKDgwICogdmVjdG9yKTsKICAgICAgYiA9IGc7CiAgICB9IGVsc2UgaWYgKGh1ZSA9PT0gJ29yYW5nZScpIHsKICAgICAgciA9IDE5MCArIE1hdGgucm91bmQoNjUgKiB2ZWN0b3IpOwogICAgICBnID0gOTAgKyBNYXRoLnJvdW5kKDY1ICogdmVjdG9yKTsKICAgICAgYiA9IDA7CiAgICB9IGVsc2UgaWYgKGh1ZSA9PT0gJ3llbGxvdycpIHsKICAgICAgciA9IDE3NSArIE1hdGgucm91bmQoNTUgKiB2ZWN0b3IpOwogICAgICBnID0gcjsKICAgICAgYiA9IDUwICsgTWF0aC5yb3VuZCgyMCAqIHZlY3Rvcik7CiAgICB9IGVsc2UgaWYgKGh1ZSA9PT0gJ2dyZWVuJykgewogICAgICByID0gNTAgKyBNYXRoLnJvdW5kKDYwICogdmVjdG9yKTsKICAgICAgZyA9IDIwMCArIE1hdGgucm91bmQoNTUgKiB2ZWN0b3IpOwogICAgICBiID0gcjsKICAgIH0gZWxzZSBpZiAoaHVlID09PSAnYXF1YScpIHsKICAgICAgciA9IDUwICsgTWF0aC5yb3VuZCg2MCAqIHZlY3Rvcik7CiAgICAgIGcgPSAxNjUgKyBNYXRoLnJvdW5kKDU1ICogdmVjdG9yKTsKICAgICAgYiA9IGc7CiAgICB9IGVsc2UgewogICAgICAvLyBvcmlnaW5hbCB3YXJtIHBhbGV0dGUKICAgICAgciA9IDIwMCArIE1hdGgucm91bmQoNTUgKiB2ZWN0b3IpOwogICAgICBnID0gMCArIE1hdGgucm91bmQoMjMwICogKDEgLSB2ZWN0b3IpKTsKICAgICAgYiA9IDAgKyBNYXRoLnJvdW5kKDU1ICogKDEgLSB2ZWN0b3IpKTsKICAgIH0KCiAgICByZXR1cm4gJ3JnYignICsgciArICcsJyArIGcgKyAnLCcgKyBiICsgJyknCiAgfQoKICBmdW5jdGlvbiBoaWRlIChkKSB7CiAgICBkLmRhdGEuaGlkZSA9IHRydWU7CiAgICBpZiAoY2hpbGRyZW4oZCkpIHsKICAgICAgY2hpbGRyZW4oZCkuZm9yRWFjaChoaWRlKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHNob3cgKGQpIHsKICAgIGQuZGF0YS5mYWRlID0gZmFsc2U7CiAgICBkLmRhdGEuaGlkZSA9IGZhbHNlOwogICAgaWYgKGNoaWxkcmVuKGQpKSB7CiAgICAgIGNoaWxkcmVuKGQpLmZvckVhY2goc2hvdyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBnZXRTaWJsaW5ncyAoZCkgewogICAgdmFyIHNpYmxpbmdzID0gW107CiAgICBpZiAoZC5wYXJlbnQpIHsKICAgICAgdmFyIG1lID0gZC5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKTsKICAgICAgc2libGluZ3MgPSBkLnBhcmVudC5jaGlsZHJlbi5zbGljZSgwKTsKICAgICAgc2libGluZ3Muc3BsaWNlKG1lLCAxKTsKICAgIH0KICAgIHJldHVybiBzaWJsaW5ncwogIH0KCiAgZnVuY3Rpb24gaGlkZVNpYmxpbmdzIChkKSB7CiAgICB2YXIgc2libGluZ3MgPSBnZXRTaWJsaW5ncyhkKTsKICAgIHNpYmxpbmdzLmZvckVhY2goZnVuY3Rpb24gKHMpIHsKICAgICAgaGlkZShzKTsKICAgIH0pOwogICAgaWYgKGQucGFyZW50KSB7CiAgICAgIGhpZGVTaWJsaW5ncyhkLnBhcmVudCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBmYWRlQW5jZXN0b3JzIChkKSB7CiAgICBpZiAoZC5wYXJlbnQpIHsKICAgICAgZC5wYXJlbnQuZGF0YS5mYWRlID0gdHJ1ZTsKICAgICAgZmFkZUFuY2VzdG9ycyhkLnBhcmVudCk7CiAgICB9CiAgfQoKICAvLyBmdW5jdGlvbiBnZXRSb290IChkKSB7CiAgLy8gICBpZiAoZC5wYXJlbnQpIHsKICAvLyAgICAgcmV0dXJuIGdldFJvb3QoZC5wYXJlbnQpCiAgLy8gICB9CiAgLy8gICByZXR1cm4gZAogIC8vIH0KCiAgZnVuY3Rpb24gem9vbSAoZCkgewogICAgdGlwLmhpZGUoZCk7CiAgICBoaWRlU2libGluZ3MoZCk7CiAgICBzaG93KGQpOwogICAgZmFkZUFuY2VzdG9ycyhkKTsKICAgIHVwZGF0ZSgpOwogICAgaWYgKHR5cGVvZiBjbGlja0hhbmRsZXIgPT09ICdmdW5jdGlvbicpIHsKICAgICAgY2xpY2tIYW5kbGVyKGQpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc2VhcmNoVHJlZSAoZCwgdGVybSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCh0ZXJtKTsKICAgIHZhciBzZWFyY2hSZXN1bHRzID0gW107CgogICAgZnVuY3Rpb24gc2VhcmNoSW5uZXIgKGQpIHsKICAgICAgdmFyIGxhYmVsID0gbmFtZShkKTsKCiAgICAgIGlmIChjaGlsZHJlbihkKSkgewogICAgICAgIGNoaWxkcmVuKGQpLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7CiAgICAgICAgICBzZWFyY2hJbm5lcihjaGlsZCk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIGlmIChsYWJlbC5tYXRjaChyZSkpIHsKICAgICAgICBkLmhpZ2hsaWdodCA9IHRydWU7CiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKGQpOwogICAgICB9IGVsc2UgewogICAgICAgIGQuaGlnaGxpZ2h0ID0gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICBzZWFyY2hJbm5lcihkKTsKICAgIHJldHVybiBzZWFyY2hSZXN1bHRzCiAgfQoKICBmdW5jdGlvbiBjbGVhciAoZCkgewogICAgZC5oaWdobGlnaHQgPSBmYWxzZTsKICAgIGlmIChjaGlsZHJlbihkKSkgewogICAgICBjaGlsZHJlbihkKS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkgewogICAgICAgIGNsZWFyKGNoaWxkKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBkb1NvcnQgKGEsIGIpIHsKICAgIGlmICh0eXBlb2Ygc29ydCA9PT0gJ2Z1bmN0aW9uJykgewogICAgICByZXR1cm4gc29ydChhLCBiKQogICAgfSBlbHNlIGlmIChzb3J0KSB7CiAgICAgIHJldHVybiBkMy5hc2NlbmRpbmcobmFtZShhKSwgbmFtZShiKSkKICAgIH0KICB9CgogIHZhciBwID0gZDMucGFydGl0aW9uKCk7CgogIGZ1bmN0aW9uIGZpbHRlck5vZGVzIChyb290KSB7CiAgICB2YXIgbm9kZUxpc3QgPSByb290LmRlc2NlbmRhbnRzKCk7CiAgICBpZiAobWluRnJhbWVTaXplID4gMCkgewogICAgICB2YXIga3ggPSB3IC8gKHJvb3QueDEgLSByb290LngwKTsKICAgICAgbm9kZUxpc3QgPSBub2RlTGlzdC5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7CiAgICAgICAgcmV0dXJuICgoZWwueDEgLSBlbC54MCkgKiBreCkgPiBtaW5GcmFtZVNpemUKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gbm9kZUxpc3QKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZSAoKSB7CiAgICBzZWxlY3Rpb24uZWFjaChmdW5jdGlvbiAocm9vdCkgewogICAgICB2YXIgeCA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2UoWzAsIHddKTsKICAgICAgdmFyIHkgPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlKFswLCBjXSk7CgogICAgICBpZiAoc29ydCkgcm9vdC5zb3J0KGRvU29ydCk7CiAgICAgIHJvb3Quc3VtKGZ1bmN0aW9uIChkKSB7CiAgICAgICAgaWYgKGQuZmFkZSB8fCBkLmhpZGUpIHsKICAgICAgICAgIHJldHVybiAwCiAgICAgICAgfQogICAgICAgIC8vIFRoZSBub2RlJ3Mgc2VsZiB2YWx1ZSBpcyBpdHMgdG90YWwgdmFsdWUgbWludXMgYWxsIGNoaWxkcmVuLgogICAgICAgIHZhciB2ID0gdmFsdWUoZCk7CiAgICAgICAgaWYgKGNoaWxkcmVuKGQpKSB7CiAgICAgICAgICB2YXIgYyA9IGNoaWxkcmVuKGQpOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHYgLT0gdmFsdWUoY1tpXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB2CiAgICAgIH0pOwogICAgICBwKHJvb3QpOwoKICAgICAgdmFyIGt4ID0gdyAvIChyb290LngxIC0gcm9vdC54MCk7CiAgICAgIGZ1bmN0aW9uIHdpZHRoIChkKSB7IHJldHVybiAoZC54MSAtIGQueDApICoga3ggfQoKICAgICAgdmFyIGRlc2NlbmRhbnRzID0gZmlsdGVyTm9kZXMocm9vdCk7CiAgICAgIHZhciBnID0gZDMuc2VsZWN0KHRoaXMpLnNlbGVjdCgnc3ZnJykuc2VsZWN0QWxsKCdnJykuZGF0YShkZXNjZW5kYW50cywgZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQuaWQgfSk7CgogICAgICBnLnRyYW5zaXRpb24oKQogICAgICAgIC5kdXJhdGlvbih0cmFuc2l0aW9uRHVyYXRpb24pCiAgICAgICAgLmVhc2UodHJhbnNpdGlvbkVhc2UpCiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7IHJldHVybiAndHJhbnNsYXRlKCcgKyB4KGQueDApICsgJywnICsgKGludmVydGVkID8geShkLmRlcHRoKSA6IChoIC0geShkLmRlcHRoKSAtIGMpKSArICcpJyB9KTsKCiAgICAgIGcuc2VsZWN0KCdyZWN0JykKICAgICAgICAuYXR0cignd2lkdGgnLCB3aWR0aCk7CgogICAgICB2YXIgbm9kZSA9IGcuZW50ZXIoKQogICAgICAgIC5hcHBlbmQoJ3N2ZzpnJykKICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQpIHsgcmV0dXJuICd0cmFuc2xhdGUoJyArIHgoZC54MCkgKyAnLCcgKyAoaW52ZXJ0ZWQgPyB5KGQuZGVwdGgpIDogKGggLSB5KGQuZGVwdGgpIC0gYykpICsgJyknIH0pOwoKICAgICAgbm9kZS5hcHBlbmQoJ3N2ZzpyZWN0JykKICAgICAgICAudHJhbnNpdGlvbigpCiAgICAgICAgLmRlbGF5KHRyYW5zaXRpb25EdXJhdGlvbiAvIDIpCiAgICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGgpOwoKICAgICAgaWYgKCF0b29sdGlwKSB7IG5vZGUuYXBwZW5kKCdzdmc6dGl0bGUnKTsgfQoKICAgICAgbm9kZS5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKQogICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpOwoKICAgICAgLy8gTm93IHdlIGhhdmUgdG8gcmUtc2VsZWN0IHRvIHNlZSB0aGUgbmV3IGVsZW1lbnRzICh3aHk/KS4KICAgICAgZyA9IGQzLnNlbGVjdCh0aGlzKS5zZWxlY3QoJ3N2ZycpLnNlbGVjdEFsbCgnZycpLmRhdGEoZGVzY2VuZGFudHMsIGZ1bmN0aW9uIChkKSB7IHJldHVybiBkLmlkIH0pOwoKICAgICAgZy5hdHRyKCd3aWR0aCcsIHdpZHRoKQogICAgICAgIC5hdHRyKCdoZWlnaHQnLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gYyB9KQogICAgICAgIC5hdHRyKCduYW1lJywgZnVuY3Rpb24gKGQpIHsgcmV0dXJuIG5hbWUoZCkgfSkKICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5kYXRhLmZhZGUgPyAnZnJhbWUgZmFkZScgOiAnZnJhbWUnIH0pOwoKICAgICAgZy5zZWxlY3QoJ3JlY3QnKQogICAgICAgIC5hdHRyKCdoZWlnaHQnLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gYyB9KQogICAgICAgIC5hdHRyKCdmaWxsJywgZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGNvbG9yTWFwcGVyKGQpIH0pOwoKICAgICAgaWYgKCF0b29sdGlwKSB7CiAgICAgICAgZy5zZWxlY3QoJ3RpdGxlJykKICAgICAgICAgIC50ZXh0KGxhYmVsKTsKICAgICAgfQoKICAgICAgZy5zZWxlY3QoJ2ZvcmVpZ25PYmplY3QnKQogICAgICAgIC5hdHRyKCd3aWR0aCcsIHdpZHRoKQogICAgICAgIC5hdHRyKCdoZWlnaHQnLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gYyB9KQogICAgICAgIC5zZWxlY3QoJ2RpdicpCiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2QzLWZsYW1lLWdyYXBoLWxhYmVsJykKICAgICAgICAuc3R5bGUoJ2Rpc3BsYXknLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gKHdpZHRoKGQpIDwgMzUpID8gJ25vbmUnIDogJ2Jsb2NrJyB9KQogICAgICAgIC50cmFuc2l0aW9uKCkKICAgICAgICAuZGVsYXkodHJhbnNpdGlvbkR1cmF0aW9uKQogICAgICAgIC50ZXh0KG5hbWUpOwoKICAgICAgZy5vbignY2xpY2snLCB6b29tKTsKCiAgICAgIGcuZXhpdCgpCiAgICAgICAgLnJlbW92ZSgpOwoKICAgICAgZy5vbignbW91c2VvdmVyJywgZnVuY3Rpb24gKGQpIHsKICAgICAgICBpZiAodG9vbHRpcCkgdGlwLnNob3coZCwgdGhpcyk7CiAgICAgICAgc2V0RGV0YWlscyhsYWJlbChkKSk7CiAgICAgIH0pLm9uKCdtb3VzZW91dCcsIGZ1bmN0aW9uIChkKSB7CiAgICAgICAgaWYgKHRvb2x0aXApIHRpcC5oaWRlKGQpOwogICAgICAgIHNldERldGFpbHMoJycpOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gbWVyZ2UgKGRhdGEsIHNhbXBsZXMpIHsKICAgIHNhbXBsZXMuZm9yRWFjaChmdW5jdGlvbiAoc2FtcGxlKSB7CiAgICAgIHZhciBub2RlID0gZGF0YS5maW5kKGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgICAgICAgcmV0dXJuIChlbGVtZW50Lm5hbWUgPT09IHNhbXBsZS5uYW1lKQogICAgICB9KTsKCiAgICAgIGlmIChub2RlKSB7CiAgICAgICAgaWYgKG5vZGUub3JpZ2luYWwpIHsKICAgICAgICAgIG5vZGUub3JpZ2luYWwgKz0gc2FtcGxlLnZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBub2RlLnZhbHVlICs9IHNhbXBsZS52YWx1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHNhbXBsZS5jaGlsZHJlbikgewogICAgICAgICAgaWYgKCFub2RlLmNoaWxkcmVuKSB7CiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBbXTsKICAgICAgICAgIH0KICAgICAgICAgIG1lcmdlKG5vZGUuY2hpbGRyZW4sIHNhbXBsZS5jaGlsZHJlbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGRhdGEucHVzaChzYW1wbGUpOwogICAgICB9CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHM0ICgpIHsKICAgIHJldHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKQogICAgICAudG9TdHJpbmcoMTYpCiAgICAgIC5zdWJzdHJpbmcoMSkKICB9CgogIGZ1bmN0aW9uIGluamVjdElkcyAobm9kZSkgewogICAgbm9kZS5pZCA9IHM0KCkgKyAnLScgKyBzNCgpICsgJy0nICsgJy0nICsgczQoKSArICctJyArIHM0KCk7CiAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmMgfHwgbm9kZS5jaGlsZHJlbiB8fCBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKICAgICAgaW5qZWN0SWRzKGNoaWxkcmVuW2ldKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGNoYXJ0IChzKSB7CiAgICB2YXIgcm9vdCA9IGQzLmhpZXJhcmNoeSgKICAgICAgcy5kYXR1bSgpLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gY2hpbGRyZW4oZCkgfQogICAgKTsKICAgIGluamVjdElkcyhyb290KTsKICAgIHNlbGVjdGlvbiA9IHMuZGF0dW0ocm9vdCk7CgogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY2hhcnQKCiAgICBpZiAoIWgpIHsKICAgICAgaCA9IChyb290LmhlaWdodCArIDIpICogYzsKICAgIH0KCiAgICBzZWxlY3Rpb24uZWFjaChmdW5jdGlvbiAoZGF0YSkgewogICAgICBpZiAoIXN2ZykgewogICAgICAgIHN2ZyA9IGQzLnNlbGVjdCh0aGlzKQogICAgICAgICAgLmFwcGVuZCgnc3ZnOnN2ZycpCiAgICAgICAgICAuYXR0cignd2lkdGgnLCB3KQogICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIGgpCiAgICAgICAgICAuYXR0cignY2xhc3MnLCAncGFydGl0aW9uIGQzLWZsYW1lLWdyYXBoJykKICAgICAgICAgIC5jYWxsKHRpcCk7CgogICAgICAgIHN2Zy5hcHBlbmQoJ3N2Zzp0ZXh0JykKICAgICAgICAgIC5hdHRyKCdjbGFzcycsICd0aXRsZScpCiAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJykKICAgICAgICAgIC5hdHRyKCd5JywgJzI1JykKICAgICAgICAgIC5hdHRyKCd4JywgdyAvIDIpCiAgICAgICAgICAuYXR0cignZmlsbCcsICcjODA4MDgwJykKICAgICAgICAgIC50ZXh0KHRpdGxlKTsKICAgICAgfQogICAgfSk7CgogICAgLy8gZmlyc3QgZHJhdwogICAgdXBkYXRlKCk7CiAgfQoKICBjaGFydC5oZWlnaHQgPSBmdW5jdGlvbiAoXykgewogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7IHJldHVybiBoIH0KICAgIGggPSBfOwogICAgcmV0dXJuIGNoYXJ0CiAgfTsKCiAgY2hhcnQud2lkdGggPSBmdW5jdGlvbiAoXykgewogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7IHJldHVybiB3IH0KICAgIHcgPSBfOwogICAgcmV0dXJuIGNoYXJ0CiAgfTsKCiAgY2hhcnQuY2VsbEhlaWdodCA9IGZ1bmN0aW9uIChfKSB7CiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsgcmV0dXJuIGMgfQogICAgYyA9IF87CiAgICByZXR1cm4gY2hhcnQKICB9OwoKICBjaGFydC50b29sdGlwID0gZnVuY3Rpb24gKF8pIHsKICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgeyByZXR1cm4gdG9vbHRpcCB9CiAgICBpZiAodHlwZW9mIF8gPT09ICdmdW5jdGlvbicpIHsKICAgICAgdGlwID0gXzsKICAgIH0KICAgIHRvb2x0aXAgPSAhIV87CiAgICByZXR1cm4gY2hhcnQKICB9OwoKICBjaGFydC50aXRsZSA9IGZ1bmN0aW9uIChfKSB7CiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsgcmV0dXJuIHRpdGxlIH0KICAgIHRpdGxlID0gXzsKICAgIHJldHVybiBjaGFydAogIH07CgogIGNoYXJ0LnRyYW5zaXRpb25EdXJhdGlvbiA9IGZ1bmN0aW9uIChfKSB7CiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsgcmV0dXJuIHRyYW5zaXRpb25EdXJhdGlvbiB9CiAgICB0cmFuc2l0aW9uRHVyYXRpb24gPSBfOwogICAgcmV0dXJuIGNoYXJ0CiAgfTsKCiAgY2hhcnQudHJhbnNpdGlvbkVhc2UgPSBmdW5jdGlvbiAoXykgewogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7IHJldHVybiB0cmFuc2l0aW9uRWFzZSB9CiAgICB0cmFuc2l0aW9uRWFzZSA9IF87CiAgICByZXR1cm4gY2hhcnQKICB9OwoKICBjaGFydC5zb3J0ID0gZnVuY3Rpb24gKF8pIHsKICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgeyByZXR1cm4gc29ydCB9CiAgICBzb3J0ID0gXzsKICAgIHJldHVybiBjaGFydAogIH07CgogIGNoYXJ0LmludmVydGVkID0gZnVuY3Rpb24gKF8pIHsKICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgeyByZXR1cm4gaW52ZXJ0ZWQgfQogICAgaW52ZXJ0ZWQgPSBfOwogICAgcmV0dXJuIGNoYXJ0CiAgfTsKCiAgY2hhcnQubGFiZWwgPSBmdW5jdGlvbiAoXykgewogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7IHJldHVybiBsYWJlbCB9CiAgICBsYWJlbCA9IF87CiAgICByZXR1cm4gY2hhcnQKICB9OwoKICBjaGFydC5zZWFyY2ggPSBmdW5jdGlvbiAodGVybSkgewogICAgdmFyIHNlYXJjaFJlc3VsdHMgPSBbXTsKICAgIHNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHNlYXJjaFJlc3VsdHMgPSBzZWFyY2hUcmVlKGRhdGEsIHRlcm0pOwogICAgICB1cGRhdGUoKTsKICAgIH0pOwogICAgcmV0dXJuIHNlYXJjaFJlc3VsdHMKICB9OwoKICBjaGFydC5jbGVhciA9IGZ1bmN0aW9uICgpIHsKICAgIHNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIGNsZWFyKGRhdGEpOwogICAgICB1cGRhdGUoKTsKICAgIH0pOwogIH07CgogIGNoYXJ0Lnpvb21UbyA9IGZ1bmN0aW9uIChkKSB7CiAgICB6b29tKGQpOwogIH07CgogIGNoYXJ0LnJlc2V0Wm9vbSA9IGZ1bmN0aW9uICgpIHsKICAgIHNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgIHpvb20oZGF0YSk7IC8vIHpvb20gdG8gcm9vdAogICAgfSk7CiAgfTsKCiAgY2hhcnQub25DbGljayA9IGZ1bmN0aW9uIChfKSB7CiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIGNsaWNrSGFuZGxlcgogICAgfQogICAgY2xpY2tIYW5kbGVyID0gXzsKICAgIHJldHVybiBjaGFydAogIH07CgogIGNoYXJ0Lm1lcmdlID0gZnVuY3Rpb24gKHNhbXBsZXMpIHsKICAgIHZhciBuZXdSb290OyAvLyBOZWVkIHRvIHJlLWNyZWF0ZSBoaWVyYXJjaHkgYWZ0ZXIgZGF0YSBjaGFuZ2VzLgogICAgc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24gKHJvb3QpIHsKICAgICAgbWVyZ2UoW3Jvb3QuZGF0YV0sIFtzYW1wbGVzXSk7CiAgICAgIG5ld1Jvb3QgPSBkMy5oaWVyYXJjaHkocm9vdC5kYXRhLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gY2hpbGRyZW4oZCkgfSk7CiAgICAgIGluamVjdElkcyhuZXdSb290KTsKICAgIH0pOwogICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uLmRhdHVtKG5ld1Jvb3QpOwogICAgdXBkYXRlKCk7CiAgfTsKCiAgY2hhcnQuY29sb3IgPSBmdW5jdGlvbiAoXykgewogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7IHJldHVybiBjb2xvck1hcHBlciB9CiAgICBjb2xvck1hcHBlciA9IF87CiAgICByZXR1cm4gY2hhcnQKICB9OwoKICBjaGFydC5taW5GcmFtZVNpemUgPSBmdW5jdGlvbiAoXykgewogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7IHJldHVybiBtaW5GcmFtZVNpemUgfQogICAgbWluRnJhbWVTaXplID0gXzsKICAgIHJldHVybiBjaGFydAogIH07CgogIGNoYXJ0LmRldGFpbHMgPSBmdW5jdGlvbiAoXykgewogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7IHJldHVybiBkZXRhaWxzIH0KICAgIGRldGFpbHMgPSBfOwogICAgcmV0dXJuIGNoYXJ0CiAgfTsKCiAgcmV0dXJuIGNoYXJ0Cn07CgpleHBvcnRzLmZsYW1lZ3JhcGggPSBmbGFtZWdyYXBoOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTsKCn0pKSk7Cq0MCi5kMy1mbGFtZS1ncmFwaCByZWN0IHsKICBzdHJva2U6ICNFRUVFRUU7CiAgZmlsbC1vcGFjaXR5OiAuODsKfQoKLmQzLWZsYW1lLWdyYXBoIHJlY3Q6aG92ZXIgewogIHN0cm9rZTogIzQ3NDc0NzsKICBzdHJva2Utd2lkdGg6IDAuNTsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5kMy1mbGFtZS1ncmFwaC1sYWJlbCB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICBvdmVyZmxvdzogaGlkZGVuOwogIGZvbnQtc2l6ZTogMTJweDsKICBmb250LWZhbWlseTogVmVyZGFuYTsKICBtYXJnaW4tbGVmdDogNHB4OwogIG1hcmdpbi1yaWdodDogNHB4OwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgcGFkZGluZzogMCAwIDA7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBjb2xvcjogYmxhY2s7CiAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLmQzLWZsYW1lLWdyYXBoIC5mYWRlIHsKICBvcGFjaXR5OiAwLjYgIWltcG9ydGFudDsKfQoKLmQzLWZsYW1lLWdyYXBoIC50aXRsZSB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtZmFtaWx5OiBWZXJkYW5hOwp9CgouZDMtZmxhbWUtZ3JhcGgtdGlwIHsKICBsaW5lLWhlaWdodDogMTsKICBmb250LWZhbWlseTogVmVyZGFuYTsKICBmb250LXNpemU6IDEycHg7CiAgcGFkZGluZzogMTJweDsKICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgY29sb3I6ICNmZmY7CiAgYm9yZGVyLXJhZGl1czogMnB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgovKiBDcmVhdGVzIGEgc21hbGwgdHJpYW5nbGUgZXh0ZW5kZXIgZm9yIHRoZSB0b29sdGlwICovCi5kMy1mbGFtZS1ncmFwaC10aXA6YWZ0ZXIgewogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgZGlzcGxheTogaW5saW5lOwogIGZvbnQtc2l6ZTogMTBweDsKICB3aWR0aDogMTAwJTsKICBsaW5lLWhlaWdodDogMTsKICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjgpOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLyogTm9ydGh3YXJkIHRvb2x0aXBzICovCi5kMy1mbGFtZS1ncmFwaC10aXAubjphZnRlciB7CiAgY29udGVudDogIlwyNUJDIjsKICBtYXJnaW46IC0xcHggMCAwIDA7CiAgdG9wOiAxMDAlOwogIGxlZnQ6IDA7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgovKiBFYXN0d2FyZCB0b29sdGlwcyAqLwouZDMtZmxhbWUtZ3JhcGgtdGlwLmU6YWZ0ZXIgewogIGNvbnRlbnQ6ICJcMjVDMCI7CiAgbWFyZ2luOiAtNHB4IDAgMCAwOwogIHRvcDogNTAlOwogIGxlZnQ6IC04cHg7Cn0KCi8qIFNvdXRod2FyZCB0b29sdGlwcyAqLwouZDMtZmxhbWUtZ3JhcGgtdGlwLnM6YWZ0ZXIgewogIGNvbnRlbnQ6ICJcMjVCMiI7CiAgbWFyZ2luOiAwIDAgMXB4IDA7CiAgdG9wOiAtOHB4OwogIGxlZnQ6IDA7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgovKiBXZXN0d2FyZCB0b29sdGlwcyAqLwouZDMtZmxhbWUtZ3JhcGgtdGlwLnc6YWZ0ZXIgewogIGNvbnRlbnQ6ICJcMjVCNiI7CiAgbWFyZ2luOiAtNHB4IDAgMCAtMXB4OwogIHRvcDogNTAlOwogIGxlZnQ6IDEwMCU7Cn0KAAxkM2ZsYW1lZ3JhcGgJQ1NTU291cmNlCEpTU291cmNlQx4mABlaQx7SHAAZ0K8BAf+7AYC8AQACjbwBBpe8AQAAOhDXofigos0KJCQKX2dvXy5vICAgICAgICAgIDAgICAgICAgICAgIDAgICAgIDAgICAgIDY0NCAgICAgNjQ4ICAgICAgIGAKZ28gb2JqZWN0IGRhcndpbiBhbWQ2NCBnbzEuMTcgWDpyZWdhYml3cmFwcGVycyxyZWdhYmlnLHJlZ2FiaXJlZmxlY3QscmVnYWJpZGVmZXIscmVnYWJpYXJncwpidWlsZCBpZCAiU1pEbjNRWVVaME0ySkpVT1dpQzIvMDV5cVhmbk0xMjBKNklCNUxXNmQiCgoKIQoAZ28xMTdsZDoQ16H4oKLNAAAAAHsBAAB7AQAAgwEAAJMBAACTAQAAkwEAAJMBAAC9AQAAvQEAAL0BAAC9AQAAvQEAAMkBAADVAQAA4QEAAOEBAADhAQAA8wEAAPMBAADzAQAAZ28uY3VpbmZvLnByb2R1Y2VyLmNtZC92ZW5kb3IvZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvdGhpcmRfcGFydHkvZDNmbGFtZWdyYXBoZ28uY3VpbmZvLnBhY2thZ2VuYW1lLmNtZC92ZW5kb3IvZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvdGhpcmRfcGFydHkvZDNmbGFtZWdyYXBoZ29maWxlLi48YXV0b2dlbmVyYXRlZD5nb2ZpbGUuLiRHT1JPT1Qvc3JjL2NtZC92ZW5kb3IvZ2l0aHViLmNvbS9nb29nbGUvcHByb2YvdGhpcmRfcGFydHkvZDNmbGFtZWdyYXBoL2QzX2ZsYW1lX2dyYXBoLmdvAAAAAGQAAAAXAAAAAwEAAGEAAAAaAQAATgAAAGQAAAAAAAgBAAAAAAAAAAAAUQAAALIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAASAAAAcmVnYWJpZDNmbGFtZWdyYXBo