PD9waHAKLyoqCiAqIFNjaGVtYSBKU09OLUxEOiBNdXNpY0V2ZW50LCBSZXZpZXcsIFBlcnNvbiwgTmV3c0FydGljbGUKICogR29vZ2xlIE5ld3MgU2l0ZW1hcCBlbmRwb2ludDogL25ld3Mtc2l0ZW1hcC54bWwKICogU2hvcnRjb2RlIFtkaXN0cmlidXRpZV0gKyBbYXJ0aXN0IG51bWU9IlgiIHJvbD0iWSIgdm9jZT0iWiJdCiAqIG1hZGFsaW5nZW9yZ2Vncm96YS5ybyAtIG11LXBsdWdpbgogKi8KCi8vIOKUgOKUgOKUgCDDjm5yZWdpc3RyYXJlIG1ldGEgc3BlY3RhY29sX2RhdGVfc29ydCAobmVjZXNhcsSDIHBlbnRydSBSRVNUIHdyaXRlICsgV1BfUXVlcnkpIOKUgOKUgAoKYWRkX2FjdGlvbignaW5pdCcsICdtZ2dfcmVnaXN0ZXJfc3BlY3RhY29sX21ldGEnKTsKZnVuY3Rpb24gbWdnX3JlZ2lzdGVyX3NwZWN0YWNvbF9tZXRhKCkgewogICAgcmVnaXN0ZXJfcG9zdF9tZXRhKCdzcGVjdGFjb2wnLCAnc3BlY3RhY29sX2RhdGVfc29ydCcsIFsKICAgICAgICAndHlwZScgICAgICAgICA9PiAnc3RyaW5nJywKICAgICAgICAnc2luZ2xlJyAgICAgICA9PiB0cnVlLAogICAgICAgICdzaG93X2luX3Jlc3QnID0+IHRydWUsCiAgICAgICAgJ2F1dGhfY2FsbGJhY2snPT4gJ19fcmV0dXJuX3RydWUnLAogICAgICAgICdkZWZhdWx0JyAgICAgID0+ICcnLAogICAgXSk7Cn0KCi8vIOKUgOKUgOKUgCBBcmhpdsSDIHNwZWN0YWNvbGUg4oCUIHNvcnRhcmUgY3Jvbm9sb2dpY8SDIEFTQywgZG9hciB2aWl0b2FyZSArIGF6aSDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmFkZF9hY3Rpb24oJ3ByZV9nZXRfcG9zdHMnLCAnbWdnX3NwZWN0YWNvbF9hcmNoaXZlX3F1ZXJ5Jyk7CmZ1bmN0aW9uIG1nZ19zcGVjdGFjb2xfYXJjaGl2ZV9xdWVyeSgkcXVlcnkpIHsKICAgIGlmIChpc19hZG1pbigpIHx8ICEkcXVlcnktPmlzX21haW5fcXVlcnkoKSkgcmV0dXJuOwogICAgJHB0ID0gJHF1ZXJ5LT5nZXQoJ3Bvc3RfdHlwZScpOwogICAgJGlzX3NwZWN0YWNvbF9hcmNoaXZlID0gJHF1ZXJ5LT5pc19wb3N0X3R5cGVfYXJjaGl2ZSgnc3BlY3RhY29sJykKICAgICAgICB8fCAoJHB0ID09PSAnc3BlY3RhY29sJyAmJiAkcXVlcnktPmlzX2FyY2hpdmUoKSk7CiAgICBpZiAoISRpc19zcGVjdGFjb2xfYXJjaGl2ZSkgcmV0dXJuOwoKICAgIC8vIFRFU1QgSVpPTEFUOiBET0FSIHBvc3RzX3Blcl9wYWdlCiAgICAkcXVlcnktPnNldCgncG9zdHNfcGVyX3BhZ2UnLCAyMCk7Cn0KCi8vIOKUgOKUgOKUgCBHb29nbGUgTmV3cyBTaXRlbWFwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBGxINyxIMgcmV3cml0ZSBydWxlcyDigJQgdmVyaWZpY8SDIFJFUVVFU1RfVVJJIGRpcmVjdCDDrm4gJ3BhcnNlX3JlcXVlc3QnCgphZGRfYWN0aW9uKCdwYXJzZV9yZXF1ZXN0JywgJ21nZ19uZXdzX3NpdGVtYXBfaW50ZXJjZXB0Jyk7CmZ1bmN0aW9uIG1nZ19uZXdzX3NpdGVtYXBfaW50ZXJjZXB0KCkgewogICAgJHVyaSA9IHRyaW0ocGFyc2VfdXJsKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddID8/ICcnLCBQSFBfVVJMX1BBVEgpLCAnLycpOwogICAgaWYgKCR1cmkgIT09ICduZXdzLXNpdGVtYXAueG1sJykgcmV0dXJuOwogICAgbWdnX25ld3Nfc2l0ZW1hcF9vdXRwdXQoKTsKfQoKZnVuY3Rpb24gbWdnX25ld3Nfc2l0ZW1hcF9vdXRwdXQoKSB7CgogICAgJHBvc3RzID0gZ2V0X3Bvc3RzKFsKICAgICAgICAncG9zdF90eXBlJyAgICAgID0+ICdzdGlyZScsCiAgICAgICAgJ3Bvc3Rfc3RhdHVzJyAgICA9PiAncHVibGlzaCcsCiAgICAgICAgJ3Bvc3RzX3Blcl9wYWdlJyA9PiAxMDAwLAogICAgICAgICdkYXRlX3F1ZXJ5JyAgICAgPT4gW1snYWZ0ZXInID0+ICcyIGRheXMgYWdvJ11dLAogICAgICAgICdvcmRlcmJ5JyAgICAgICAgPT4gJ2RhdGUnLAogICAgICAgICdvcmRlcicgICAgICAgICAgPT4gJ0RFU0MnLAogICAgXSk7CgogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD1VVEYtOCcpOwogICAgaGVhZGVyKCdYLVJvYm90cy1UYWc6IG5vaW5kZXgnKTsKCiAgICBlY2hvICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PicgLiAiXG4iOwogICAgZWNobyAnPHVybHNldCB4bWxucz0iaHR0cDovL3d3dy5zaXRlbWFwcy5vcmcvc2NoZW1hcy9zaXRlbWFwLzAuOSInIC4gIlxuIjsKICAgIGVjaG8gJyAgICAgICAgeG1sbnM6bmV3cz0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NjaGVtYXMvc2l0ZW1hcC1uZXdzLzAuOSI+JyAuICJcbiI7CgogICAgZm9yZWFjaCAoJHBvc3RzIGFzICRwb3N0KSB7CiAgICAgICAgJHRpdGxlID0gZXNjX3htbChnZXRfdGhlX3RpdGxlKCRwb3N0KSk7CiAgICAgICAgJHVybCAgID0gZXNjX3VybChnZXRfcGVybWFsaW5rKCRwb3N0KSk7CiAgICAgICAgJGRhdGUgID0gZ2V0X3RoZV9kYXRlKCdjJywgJHBvc3QpOwoKICAgICAgICBlY2hvICIgIDx1cmw+XG4iOwogICAgICAgIGVjaG8gIiAgICA8bG9jPnskdXJsfTwvbG9jPlxuIjsKICAgICAgICBlY2hvICIgICAgPG5ld3M6bmV3cz5cbiI7CiAgICAgICAgZWNobyAiICAgICAgPG5ld3M6cHVibGljYXRpb24+XG4iOwogICAgICAgIGVjaG8gIiAgICAgICAgPG5ld3M6bmFtZT5tYWRhbGluZ2VvcmdlZ3JvemEucm88L25ld3M6bmFtZT5cbiI7CiAgICAgICAgZWNobyAiICAgICAgICA8bmV3czpsYW5ndWFnZT5ybzwvbmV3czpsYW5ndWFnZT5cbiI7CiAgICAgICAgZWNobyAiICAgICAgPC9uZXdzOnB1YmxpY2F0aW9uPlxuIjsKICAgICAgICBlY2hvICIgICAgICA8bmV3czpwdWJsaWNhdGlvbl9kYXRlPnskZGF0ZX08L25ld3M6cHVibGljYXRpb25fZGF0ZT5cbiI7CiAgICAgICAgZWNobyAiICAgICAgPG5ld3M6dGl0bGU+eyR0aXRsZX08L25ld3M6dGl0bGU+XG4iOwogICAgICAgIGVjaG8gIiAgICA8L25ld3M6bmV3cz5cbiI7CiAgICAgICAgZWNobyAiICA8L3VybD5cbiI7CiAgICB9CgogICAgZWNobyAnPC91cmxzZXQ+JzsKICAgIGV4aXQ7Cn0KCmFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAnbWdnX291dHB1dF9zY2hlbWEnLCAyMCk7CgpmdW5jdGlvbiBtZ2dfb3V0cHV0X3NjaGVtYSgpIHsKICAgIGlmICghaXNfc2luZ3VsYXIoKSkgcmV0dXJuOwogICAgJHBvc3QgPSBnZXRfcG9zdCgpOwogICAgaWYgKCEkcG9zdCkgcmV0dXJuOwoKICAgICRzY2hlbWEgPSBudWxsOwoKICAgIGlmICgkcG9zdC0+cG9zdF90eXBlID09PSAnc3BlY3RhY29sJykgewogICAgICAgICRzY2hlbWEgPSBtZ2dfbXVzaWNfZXZlbnRfc2NoZW1hKCRwb3N0KTsKICAgIH0gZWxzZWlmICgkcG9zdC0+cG9zdF90eXBlID09PSAncG9zdCcgJiYgaGFzX2NhdGVnb3J5KCdyZWNlbnppaScsICRwb3N0KSkgewogICAgICAgICRzY2hlbWEgPSBtZ2dfcmV2aWV3X3NjaGVtYSgkcG9zdCk7CiAgICB9IGVsc2VpZiAoJHBvc3QtPnBvc3RfdHlwZSA9PT0gJ3Bvc3QnICYmIGhhc19jYXRlZ29yeSgnY2F0ZWdvcmllLWFydGlzdGknLCAkcG9zdCkpIHsKICAgICAgICAkc2NoZW1hID0gbWdnX3BlcnNvbl9zY2hlbWEoJHBvc3QpOwogICAgfSBlbHNlaWYgKCRwb3N0LT5wb3N0X3R5cGUgPT09ICdhcnRpc3RpJykgewogICAgICAgICRzY2hlbWEgPSBtZ2dfcGVyc29uX3NjaGVtYSgkcG9zdCk7CiAgICB9IGVsc2VpZiAoJHBvc3QtPnBvc3RfdHlwZSA9PT0gJ3N0aXJlJykgewogICAgICAgICRzY2hlbWEgPSBtZ2dfbmV3c19hcnRpY2xlX3NjaGVtYSgkcG9zdCk7CiAgICB9CgogICAgaWYgKCEkc2NoZW1hKSByZXR1cm47CgogICAgZWNobyAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIiBjbGFzcz0ibWdnLXNjaGVtYSI+JyAuICJcbiI7CiAgICBlY2hvIHdwX2pzb25fZW5jb2RlKCRzY2hlbWEsIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFIHwgSlNPTl9QUkVUVFlfUFJJTlQpOwogICAgZWNobyAiXG48L3NjcmlwdD5cbiI7Cn0KCmZ1bmN0aW9uIG1nZ19tdXNpY19ldmVudF9zY2hlbWEoJHBvc3QpIHsKICAgICR2ZW51ZSA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAnc3BlY3RhY29sX3ZlbnVlJywgdHJ1ZSk7CiAgICAkZGF0ZSAgPSBnZXRfcG9zdF9tZXRhKCRwb3N0LT5JRCwgJ3NwZWN0YWNvbF9kYXRlJywgIHRydWUpOwogICAgJHRpbWUgID0gZ2V0X3Bvc3RfbWV0YSgkcG9zdC0+SUQsICdzcGVjdGFjb2xfdGltZScsICB0cnVlKTsKICAgICR0eXBlICA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAnc3BlY3RhY29sX3R5cGUnLCAgdHJ1ZSk7CgogICAgJHN0YXJ0X2RhdGUgPSBtZ2dfcm9fZGF0ZV90b19pc28oJGRhdGUsICR0aW1lKTsKCiAgICAkc2NoZW1hID0gWwogICAgICAgICdAY29udGV4dCcgICAgICAgICAgICA9PiAnaHR0cHM6Ly9zY2hlbWEub3JnJywKICAgICAgICAnQHR5cGUnICAgICAgICAgICAgICAgPT4gJ011c2ljRXZlbnQnLAogICAgICAgICduYW1lJyAgICAgICAgICAgICAgICA9PiBnZXRfdGhlX3RpdGxlKCRwb3N0KSwKICAgICAgICAndXJsJyAgICAgICAgICAgICAgICAgPT4gZ2V0X3Blcm1hbGluaygkcG9zdCksCiAgICAgICAgJ2V2ZW50U3RhdHVzJyAgICAgICAgID0+ICdodHRwczovL3NjaGVtYS5vcmcvRXZlbnRTY2hlZHVsZWQnLAogICAgICAgICdldmVudEF0dGVuZGFuY2VNb2RlJyA9PiAnaHR0cHM6Ly9zY2hlbWEub3JnL09mZmxpbmVFdmVudEF0dGVuZGFuY2VNb2RlJywKICAgIF07CgogICAgaWYgKCRzdGFydF9kYXRlKSB7CiAgICAgICAgJHNjaGVtYVsnc3RhcnREYXRlJ10gPSAkc3RhcnRfZGF0ZTsKICAgIH0KCiAgICBpZiAoJHZlbnVlKSB7CiAgICAgICAgJHNjaGVtYVsnbG9jYXRpb24nXSA9IFsKICAgICAgICAgICAgJ0B0eXBlJyAgID0+ICdQZXJmb3JtaW5nQXJ0c1RoZWF0ZXInLAogICAgICAgICAgICAnbmFtZScgICAgPT4gJHZlbnVlLAogICAgICAgICAgICAnYWRkcmVzcycgPT4gWydAdHlwZScgPT4gJ1Bvc3RhbEFkZHJlc3MnLCAnYWRkcmVzc0NvdW50cnknID0+ICdSTyddLAogICAgICAgIF07CiAgICAgICAgJHNjaGVtYVsnb3JnYW5pemVyJ10gPSBbJ0B0eXBlJyA9PiAnT3JnYW5pemF0aW9uJywgJ25hbWUnID0+ICR2ZW51ZV07CiAgICB9CgogICAgJHRodW1iX2lkID0gZ2V0X3Bvc3RfdGh1bWJuYWlsX2lkKCRwb3N0LT5JRCk7CiAgICBpZiAoJHRodW1iX2lkKSB7CiAgICAgICAgJGltZyA9IHdwX2dldF9hdHRhY2htZW50X2ltYWdlX3NyYygkdGh1bWJfaWQsICdmdWxsJyk7CiAgICAgICAgaWYgKCRpbWcpIHsKICAgICAgICAgICAgJHNjaGVtYVsnaW1hZ2UnXSA9ICRpbWdbMF07CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkdHlwZSkgewogICAgICAgICRzY2hlbWFbJ2Rlc2NyaXB0aW9uJ10gPSB1Y2ZpcnN0KCR0eXBlKTsKICAgIH0KCiAgICByZXR1cm4gJHNjaGVtYTsKfQoKZnVuY3Rpb24gbWdnX3Jldmlld19zY2hlbWEoJHBvc3QpIHsKICAgICRvdmVyYWxsX3JhdGluZyA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAneWFzcl9vdmVyYWxsX3JhdGluZycsIHRydWUpOwoKICAgICRzY2hlbWEgPSBbCiAgICAgICAgJ0Bjb250ZXh0JyAgICAgID0+ICdodHRwczovL3NjaGVtYS5vcmcnLAogICAgICAgICdAdHlwZScgICAgICAgICA9PiAnUmV2aWV3JywKICAgICAgICAndXJsJyAgICAgICAgICAgPT4gZ2V0X3Blcm1hbGluaygkcG9zdCksCiAgICAgICAgJ25hbWUnICAgICAgICAgID0+IGdldF90aGVfdGl0bGUoJHBvc3QpLAogICAgICAgICdkYXRlUHVibGlzaGVkJyA9PiBnZXRfdGhlX2RhdGUoJ2MnLCAkcG9zdCksCiAgICAgICAgJ2F1dGhvcicgICAgICAgID0+IG1nZ19hdXRob3Jfc2NoZW1hKCksCiAgICAgICAgJ2l0ZW1SZXZpZXdlZCcgID0+IFsKICAgICAgICAgICAgJ0B0eXBlJyA9PiAnRXZlbnQnLAogICAgICAgICAgICAnbmFtZScgID0+IGdldF90aGVfdGl0bGUoJHBvc3QpLAogICAgICAgIF0sCiAgICAgICAgJ3B1Ymxpc2hlcicgICAgID0+IFsKICAgICAgICAgICAgJ0B0eXBlJyA9PiAnT3JnYW5pemF0aW9uJywKICAgICAgICAgICAgJ25hbWUnICA9PiAnbWFkYWxpbmdlb3JnZWdyb3phLnJvJywKICAgICAgICAgICAgJ3VybCcgICA9PiBob21lX3VybCgpLAogICAgICAgIF0sCiAgICBdOwoKICAgIGlmICgkb3ZlcmFsbF9yYXRpbmcgIT09ICcnICYmICRvdmVyYWxsX3JhdGluZyAhPT0gZmFsc2UpIHsKICAgICAgICAkc2NoZW1hWydyZXZpZXdSYXRpbmcnXSA9IFsKICAgICAgICAgICAgJ0B0eXBlJyAgICAgICA9PiAnUmF0aW5nJywKICAgICAgICAgICAgJ3JhdGluZ1ZhbHVlJyA9PiAoZmxvYXQpICRvdmVyYWxsX3JhdGluZywKICAgICAgICAgICAgJ2Jlc3RSYXRpbmcnICA9PiA1LAogICAgICAgICAgICAnd29yc3RSYXRpbmcnID0+IDEsCiAgICAgICAgXTsKICAgIH0KCiAgICByZXR1cm4gJHNjaGVtYTsKfQoKZnVuY3Rpb24gbWdnX3BlcnNvbl9zY2hlbWEoJHBvc3QpIHsKICAgICRzY2hlbWEgPSBbCiAgICAgICAgJ0Bjb250ZXh0JyA9PiAnaHR0cHM6Ly9zY2hlbWEub3JnJywKICAgICAgICAnQHR5cGUnICAgID0+ICdQZXJzb24nLAogICAgICAgICduYW1lJyAgICAgPT4gZ2V0X3RoZV90aXRsZSgkcG9zdCksCiAgICAgICAgJ3VybCcgICAgICA9PiBnZXRfcGVybWFsaW5rKCRwb3N0KSwKICAgIF07CgogICAgJHRodW1iX2lkID0gZ2V0X3Bvc3RfdGh1bWJuYWlsX2lkKCRwb3N0LT5JRCk7CiAgICBpZiAoJHRodW1iX2lkKSB7CiAgICAgICAgJGltZyA9IHdwX2dldF9hdHRhY2htZW50X2ltYWdlX3NyYygkdGh1bWJfaWQsICdmdWxsJyk7CiAgICAgICAgaWYgKCRpbWcpIHsKICAgICAgICAgICAgJHNjaGVtYVsnaW1hZ2UnXSA9IFsKICAgICAgICAgICAgICAgICdAdHlwZScgID0+ICdJbWFnZU9iamVjdCcsCiAgICAgICAgICAgICAgICAndXJsJyAgICA9PiAkaW1nWzBdLAogICAgICAgICAgICAgICAgJ3dpZHRoJyAgPT4gKGludCkgJGltZ1sxXSwKICAgICAgICAgICAgICAgICdoZWlnaHQnID0+IChpbnQpICRpbWdbMl0sCiAgICAgICAgICAgIF07CiAgICAgICAgfQogICAgfQoKICAgIC8vIFRheG9ub21pYSBwcmltYXJhIGEgcGFnaW5paSBkZSBhcnRpc3QgKGRpcmlqb3IsIHNvcHJhbmEgZXRjKSDihpIgam9iVGl0bGUKICAgICR0ZXJtcyA9IGdldF90aGVfdGVybXMoJHBvc3QtPklELCAnY2F0ZWdvcnknKTsKICAgIGlmICgkdGVybXMgJiYgIWlzX3dwX2Vycm9yKCR0ZXJtcykpIHsKICAgICAgICAkc2NoZW1hWydqb2JUaXRsZSddID0gJHRlcm1zWzBdLT5uYW1lOwogICAgfQoKICAgIHJldHVybiAkc2NoZW1hOwp9CgpmdW5jdGlvbiBtZ2dfYXV0aG9yX3NjaGVtYSgpIHsKICAgIHJldHVybiBbCiAgICAgICAgJ0B0eXBlJyAgPT4gJ1BlcnNvbicsCiAgICAgICAgJ25hbWUnICAgPT4gJ03Eg2TEg2xpbiBHZW9yZ2UgR3JvemEnLAogICAgICAgICd1cmwnICAgID0+ICdodHRwczovL21hZGFsaW5nZW9yZ2Vncm96YS5yby9tYWRhbGluLWdlb3JnZS1ncm96YS10ZW5vci1jcml0aWMtbXV6aWNhbC8nLAogICAgICAgICdzYW1lQXMnID0+IFsKICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnRpa3Rvay5jb20vQG1hZGFsaW4uZ3JvemEub3BlcmEnLAogICAgICAgICAgICAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL21hZGFsaW5nZW9yZ2Vncm96YScsCiAgICAgICAgICAgICdodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL21hZGFsaW4uZ3JvemEub3BlcmEvJywKICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BtYWRhbGluZ2VvcmdlZ3JvemEnLAogICAgICAgIF0sCiAgICBdOwp9CgpmdW5jdGlvbiBtZ2dfbmV3c19hcnRpY2xlX3NjaGVtYSgkcG9zdCkgewogICAgJHNjaGVtYSA9IFsKICAgICAgICAnQGNvbnRleHQnICAgICAgPT4gJ2h0dHBzOi8vc2NoZW1hLm9yZycsCiAgICAgICAgJ0B0eXBlJyAgICAgICAgID0+ICdOZXdzQXJ0aWNsZScsCiAgICAgICAgJ2hlYWRsaW5lJyAgICAgID0+IG1iX3N1YnN0cihnZXRfdGhlX3RpdGxlKCRwb3N0KSwgMCwgMTEwKSwKICAgICAgICAndXJsJyAgICAgICAgICAgPT4gZ2V0X3Blcm1hbGluaygkcG9zdCksCiAgICAgICAgJ2RhdGVQdWJsaXNoZWQnID0+IGdldF90aGVfZGF0ZSgnYycsICRwb3N0KSwKICAgICAgICAnZGF0ZU1vZGlmaWVkJyAgPT4gZ2V0X3RoZV9tb2RpZmllZF9kYXRlKCdjJywgJHBvc3QpLAogICAgICAgICdhdXRob3InICAgICAgICA9PiBtZ2dfYXV0aG9yX3NjaGVtYSgpLAogICAgICAgICdwdWJsaXNoZXInICAgICA9PiBbCiAgICAgICAgICAgICdAdHlwZScgPT4gJ09yZ2FuaXphdGlvbicsCiAgICAgICAgICAgICduYW1lJyAgPT4gJ21hZGFsaW5nZW9yZ2Vncm96YS5ybycsCiAgICAgICAgICAgICd1cmwnICAgPT4gaG9tZV91cmwoKSwKICAgICAgICAgICAgJ2xvZ28nICA9PiBbCiAgICAgICAgICAgICAgICAnQHR5cGUnICA9PiAnSW1hZ2VPYmplY3QnLAogICAgICAgICAgICAgICAgJ3VybCcgICAgPT4gJ2h0dHBzOi8vbWFkYWxpbmdlb3JnZWdyb3phLnJvL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzAyL0lNR18wNjMxLmpwZycsCiAgICAgICAgICAgICAgICAnd2lkdGgnICA9PiAxMzIwLAogICAgICAgICAgICAgICAgJ2hlaWdodCcgPT4gNTYwLAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICAgICAgJ2luTGFuZ3VhZ2UnICAgID0+ICdyby1STycsCiAgICBdOwoKICAgICR0aHVtYl9pZCA9IGdldF9wb3N0X3RodW1ibmFpbF9pZCgkcG9zdC0+SUQpOwogICAgaWYgKCR0aHVtYl9pZCkgewogICAgICAgICRpbWcgPSB3cF9nZXRfYXR0YWNobWVudF9pbWFnZV9zcmMoJHRodW1iX2lkLCAnZnVsbCcpOwogICAgICAgIGlmICgkaW1nKSB7CiAgICAgICAgICAgICRzY2hlbWFbJ2ltYWdlJ10gPSBbCiAgICAgICAgICAgICAgICAnQHR5cGUnICA9PiAnSW1hZ2VPYmplY3QnLAogICAgICAgICAgICAgICAgJ3VybCcgICAgPT4gJGltZ1swXSwKICAgICAgICAgICAgICAgICd3aWR0aCcgID0+IChpbnQpICRpbWdbMV0sCiAgICAgICAgICAgICAgICAnaGVpZ2h0JyA9PiAoaW50KSAkaW1nWzJdLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgIH0KCiAgICAkZXhjZXJwdCA9IGdldF90aGVfZXhjZXJwdCgkcG9zdCk7CiAgICBpZiAoJGV4Y2VycHQpIHsKICAgICAgICAkc2NoZW1hWydkZXNjcmlwdGlvbiddID0gd3Bfc3RyaXBfYWxsX3RhZ3MoJGV4Y2VycHQpOwogICAgfQoKICAgIHJldHVybiAkc2NoZW1hOwp9CgpmdW5jdGlvbiBtZ2dfcm9fZGF0ZV90b19pc28oJGRhdGVfcm8sICR0aW1lID0gJycpIHsKICAgIGlmICghJGRhdGVfcm8pIHJldHVybiAnJzsKICAgICRsdW5pID0gWwogICAgICAgICdpYW51YXJpZScgPT4gJzAxJywgJ2ZlYnJ1YXJpZScgPT4gJzAyJywgJ21hcnRpZScgICAgID0+ICcwMycsCiAgICAgICAgJ2FwcmlsaWUnICA9PiAnMDQnLCAnbWFpJyAgICAgICAgPT4gJzA1JywgJ2l1bmllJyAgICAgID0+ICcwNicsCiAgICAgICAgJ2l1bGllJyAgICA9PiAnMDcnLCAnYXVndXN0JyAgICAgPT4gJzA4JywgJ3NlcHRlbWJyaWUnID0+ICcwOScsCiAgICAgICAgJ29jdG9tYnJpZSc9PiAnMTAnLCAnbm9pZW1icmllJyAgPT4gJzExJywgJ2RlY2VtYnJpZScgID0+ICcxMicsCiAgICBdOwogICAgJHBhcnRzID0gcHJlZ19zcGxpdCgnL1xzKy8nLCB0cmltKCRkYXRlX3JvKSk7CiAgICBpZiAoY291bnQoJHBhcnRzKSA8IDMpIHJldHVybiAnJzsKICAgICR6aSAgID0gc3RyX3BhZCgoaW50KSRwYXJ0c1swXSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpOwogICAgJGx1bmEgPSAkbHVuaVtzdHJ0b2xvd2VyKCRwYXJ0c1sxXSldID8/ICcnOwogICAgJGFuICAgPSAkcGFydHNbMl07CiAgICBpZiAoISRsdW5hIHx8ICEkYW4pIHJldHVybiAnJzsKICAgICRpc28gPSAieyRhbn0teyRsdW5hfS17JHppfSI7CiAgICBpZiAoJHRpbWUpIHsKICAgICAgICAkdCA9IHByZWdfcmVwbGFjZSgnL1teMC05Ol0vJywgJycsICR0aW1lKTsKICAgICAgICBpZiAoc3RybGVuKCR0KSA+PSA0KSAkaXNvIC49ICdUJyAuICR0IC4gJzowMCc7CiAgICB9CiAgICByZXR1cm4gJGlzbzsKfQoKLy8g4pSA4pSA4pSAIFNob3J0Y29kZSBkaXN0cmlidcibaWUgYXJ0aciZdGkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgphZGRfc2hvcnRjb2RlKCdtZ2dfZGlzdHJpYnV0aWUnLCAnbWdnX3NjX2Rpc3RyaWJ1dGllJyk7CmFkZF9zaG9ydGNvZGUoJ21nZ19hcnRpc3QnLCAgICAgJ21nZ19zY19hcnRpc3QnKTsKLy8gQWxpYXN1cmkgc2N1cnRlIChkb2FyIGRhY2EgbnUgc3VudCBkZWphIGlucmVnaXN0cmF0ZSBkZSBhbHQgcGx1Z2luKQphZGRfYWN0aW9uKCdpbml0JywgZnVuY3Rpb24oKSB7CiAgICBpZiAoIXNob3J0Y29kZV9leGlzdHMoJ2Rpc3RyaWJ1dGllJykpIGFkZF9zaG9ydGNvZGUoJ2Rpc3RyaWJ1dGllJywgJ21nZ19zY19kaXN0cmlidXRpZScpOwogICAgaWYgKCFzaG9ydGNvZGVfZXhpc3RzKCdhcnRpc3QnKSkgICAgICBhZGRfc2hvcnRjb2RlKCdhcnRpc3QnLCAgICAgICdtZ2dfc2NfYXJ0aXN0Jyk7Cn0sIDIwKTsKCmZ1bmN0aW9uIG1nZ19zY19kaXN0cmlidXRpZSgkYXR0cywgJGNvbnRlbnQgPSAnJykgewogICAgaWYgKCEkY29udGVudCkgcmV0dXJuICcnOwogICAgJGlubmVyID0gZG9fc2hvcnRjb2RlKCRjb250ZW50KTsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0ibWdnLWRpc3RyaWJ1dGllIj4nIC4gJGlubmVyIC4gJzwvZGl2Pic7Cn0KCmZ1bmN0aW9uIG1nZ19zY19hcnRpc3QoJGF0dHMpIHsKICAgICRhdHRzID0gc2hvcnRjb2RlX2F0dHMoWwogICAgICAgICdudW1lJyA9PiAnJywKICAgICAgICAncm9sJyAgPT4gJycsCiAgICAgICAgJ3ZvY2UnID0+ICcnLAogICAgXSwgJGF0dHMsICdhcnRpc3QnKTsKCiAgICAkbnVtZSA9IHNhbml0aXplX3RleHRfZmllbGQoJGF0dHNbJ251bWUnXSk7CiAgICAkcm9sICA9IHNhbml0aXplX3RleHRfZmllbGQoJGF0dHNbJ3JvbCddKTsKICAgICR2b2NlID0gc2FuaXRpemVfdGV4dF9maWVsZCgkYXR0c1sndm9jZSddKTsKCiAgICBpZiAoISRudW1lKSByZXR1cm4gJyc7CgogICAgJHBvc3QgPSBtZ2dfZmluZF9hcnRpc3QoJG51bWUpOwoKICAgIGlmICghJHBvc3QpIHsKICAgICAgICAvLyBGYWlsLXNhZmU6IGFmaciZZWF6xIMgbnVtZWxlIHNpbXBsdSBmxINyxIMgbGluawogICAgICAgICRsYWJlbCAgPSAkdm9jZSA/ICI8c21hbGw+eyR2b2NlfTwvc21hbGw+IiA6ICcnOwogICAgICAgICRyb2xfZWwgPSAkcm9sICA/ICI8c3BhbiBjbGFzcz1cIm1nZy1hcnRpc3Qtcm9sXCI+eyRyb2x9PC9zcGFuPiIgOiAnJzsKICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im1nZy1hcnRpc3QtY2FyZCBtZ2ctYXJ0aXN0LW5vZm91bmQiPicKICAgICAgICAgICAgIC4gIjxzcGFuIGNsYXNzPVwibWdnLWFydGlzdC1uYW1lXCI+eyRudW1lfTwvc3Bhbj57JGxhYmVsfXskcm9sX2VsfTwvZGl2PiI7CiAgICB9CgogICAgJGxpbmsgICAgPSBnZXRfcGVybWFsaW5rKCRwb3N0KTsKICAgICR0aHVtYiAgID0gJyc7CiAgICAkdGh1bWJfaWQgPSBnZXRfcG9zdF90aHVtYm5haWxfaWQoJHBvc3QtPklEKTsKICAgIGlmICgkdGh1bWJfaWQpIHsKICAgICAgICAkaW1nID0gd3BfZ2V0X2F0dGFjaG1lbnRfaW1hZ2Vfc3JjKCR0aHVtYl9pZCwgJ3RodW1ibmFpbCcpOwogICAgICAgIGlmICgkaW1nKSB7CiAgICAgICAgICAgICR0aHVtYiA9ICI8aW1nIHNyYz1cInskaW1nWzBdfVwiIGFsdD1cIiIgLiBlc2NfYXR0cigkbnVtZSkgLiAiXCIgIgogICAgICAgICAgICAgICAgICAgLiAid2lkdGg9XCJ7JGltZ1sxXX1cIiBoZWlnaHQ9XCJ7JGltZ1syXX1cIiBsb2FkaW5nPVwibGF6eVwiPiI7CiAgICAgICAgfQogICAgfQoKICAgICR2b2NlX2VsID0gJHZvY2UgPyAiPHNtYWxsIGNsYXNzPVwibWdnLWFydGlzdC12b2NlXCI+eyR2b2NlfTwvc21hbGw+IiA6ICcnOwogICAgJHJvbF9lbCAgPSAkcm9sICA/ICI8c3BhbiBjbGFzcz1cIm1nZy1hcnRpc3Qtcm9sXCI+eyRyb2x9PC9zcGFuPiIgOiAnJzsKCiAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im1nZy1hcnRpc3QtY2FyZCI+JwogICAgICAgICAuICI8YSBocmVmPVwieyRsaW5rfVwiIGNsYXNzPVwibWdnLWFydGlzdC1saW5rXCI+IgogICAgICAgICAuICR0aHVtYgogICAgICAgICAuICI8c3BhbiBjbGFzcz1cIm1nZy1hcnRpc3QtbmFtZVwiPnskbnVtZX08L3NwYW4+IgogICAgICAgICAuICR2b2NlX2VsCiAgICAgICAgIC4gIjwvYT4iCiAgICAgICAgIC4gJHJvbF9lbAogICAgICAgICAuICc8L2Rpdj4nOwp9CgpmdW5jdGlvbiBtZ2dfZmluZF9hcnRpc3QoJG5hbWUpIHsKICAgIHN0YXRpYyAkY2FjaGUgPSBbXTsKICAgIGlmIChpc3NldCgkY2FjaGVbJG5hbWVdKSkgcmV0dXJuICRjYWNoZVskbmFtZV07CgogICAgLy8gQ2F1dGEgZGlyZWN0IGluIERCIGR1cGEgcG9zdF9uYW1lIChzbHVnKSDigJQgYnlwYXNzZXMgcmVzdHJpY3RpaSBDUFQgcHVibGljbHlfcXVlcnlhYmxlCiAgICBnbG9iYWwgJHdwZGI7CiAgICAkc2x1ZyAgICA9IHNhbml0aXplX3RpdGxlKCRuYW1lKTsKICAgICRwb3N0X2lkID0gJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoCiAgICAgICAgIlNFTEVDVCBJRCBGUk9NIHskd3BkYi0+cG9zdHN9CiAgICAgICAgIFdIRVJFIHBvc3RfbmFtZSA9ICVzIEFORCBwb3N0X3N0YXR1cyA9ICdwdWJsaXNoJyBBTkQgcG9zdF90eXBlID0gJ2FydGlzdGknCiAgICAgICAgIExJTUlUIDEiLAogICAgICAgICRzbHVnCiAgICApKTsKCiAgICAkcmVzdWx0ID0gJHBvc3RfaWQgPyBnZXRfcG9zdCgoaW50KSAkcG9zdF9pZCkgOiBudWxsOwogICAgJGNhY2hlWyRuYW1lXSA9ICRyZXN1bHQ7CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKZnVuY3Rpb24gbWdnX2Rpc3RyaWJ1dGllX3N0eWxlcygpIHsKICAgIGlmICghaXNfc2luZ3VsYXIoKSkgcmV0dXJuOwogICAgZWNobyAnPHN0eWxlPgoubWdnLWRpc3RyaWJ1dGlle2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweDttYXJnaW46MjBweCAwO30KLm1nZy1hcnRpc3QtY2FyZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjsKICB3aWR0aDoxMjBweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjQ7fQoubWdnLWFydGlzdC1saW5re2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQoubWdnLWFydGlzdC1saW5rOmhvdmVyIC5tZ2ctYXJ0aXN0LW5hbWV7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Ci5tZ2ctYXJ0aXN0LWNhcmQgaW1ne3dpZHRoOjkwcHg7aGVpZ2h0OjkwcHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjUwJTsKICBkaXNwbGF5OmJsb2NrO21hcmdpbjowIGF1dG8gNnB4O30KLm1nZy1hcnRpc3QtbmFtZXtkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMWExYTFhO30KLm1nZy1hcnRpc3Qtdm9jZXtkaXNwbGF5OmJsb2NrO2NvbG9yOiM4ODg7Zm9udC1zaXplOjExcHg7bWFyZ2luLXRvcDoycHg7fQoubWdnLWFydGlzdC1yb2x7ZGlzcGxheTpibG9jaztjb2xvcjojOEIwMDAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtc3R5bGU6aXRhbGljO21hcmdpbi10b3A6NHB4O30KLm1nZy1hcnRpc3Qtbm9mb3VuZCAubWdnLWFydGlzdC1uYW1le2NvbG9yOiM1NTU7fQpAbWVkaWEobWF4LXdpZHRoOjQ4MHB4KXsubWdnLWRpc3RyaWJ1dGlle2dhcDo4cHg7fS5tZ2ctYXJ0aXN0LWNhcmR7d2lkdGg6OTBweDt9fQo8L3N0eWxlPicgLiAiXG4iOwp9CmFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAnbWdnX2Rpc3RyaWJ1dGllX3N0eWxlcycsIDUpOwoKLy8g4pSA4pSA4pSAIEF1dGhvciBib3ggcGUgcmVjZW56aWkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgphZGRfZmlsdGVyKCd0aGVfY29udGVudCcsICdtZ2dfYXV0aG9yX2JveF9hcHBlbmQnLCAzMCk7CgpmdW5jdGlvbiBtZ2dfYXV0aG9yX2JveF9hcHBlbmQoJGNvbnRlbnQpIHsKICAgIGlmICghaXNfc2luZ3VsYXIoJ3Bvc3QnKSkgcmV0dXJuICRjb250ZW50OwogICAgJHBvc3QgPSBnZXRfcG9zdCgpOwogICAgaWYgKCEkcG9zdCB8fCAhaGFzX2NhdGVnb3J5KCdyZWNlbnppaScsICRwb3N0KSkgcmV0dXJuICRjb250ZW50OwoKICAgICRhdXRob3JfdXJsICAgPSAnaHR0cHM6Ly9tYWRhbGluZ2VvcmdlZ3JvemEucm8vbWFkYWxpbi1nZW9yZ2UtZ3JvemEtdGVub3ItY3JpdGljLW11emljYWwvJzsKICAgICRhdXRob3JfaW1nICAgPSAnaHR0cHM6Ly9tYWRhbGluZ2VvcmdlZ3JvemEucm8vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDIvSU1HXzA2MzEuanBnJzsKICAgICRzb2NpYWwgPSBbCiAgICAgICAgWydUaWtUb2snLCAgICAnaHR0cHM6Ly93d3cudGlrdG9rLmNvbS9AbWFkYWxpbi5ncm96YS5vcGVyYSddLAogICAgICAgIFsnRmFjZWJvb2snLCAgJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9tYWRhbGluZ2VvcmdlZ3JvemEnXSwKICAgICAgICBbJ0luc3RhZ3JhbScsICdodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL21hZGFsaW4uZ3JvemEub3BlcmEvJ10sCiAgICAgICAgWydZb3VUdWJlJywgICAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vQG1hZGFsaW5nZW9yZ2Vncm96YSddLAogICAgXTsKICAgICRzb2NpYWxfaHRtbCA9ICcnOwogICAgZm9yZWFjaCAoJHNvY2lhbCBhcyBbJGxhYmVsLCAkdXJsXSkgewogICAgICAgICRzb2NpYWxfaHRtbCAuPSAnPGEgaHJlZj0iJyAuIGVzY191cmwoJHVybCkgLiAnIiBjbGFzcz0ibWdnLWFiLXNvY2lhbCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicgLiAkbGFiZWwgLiAnPC9hPiAnOwogICAgfQoKICAgICRib3ggPSAnPGRpdiBjbGFzcz0ibWdnLWF1dGhvci1ib3giPicKICAgICAgICAgLiAnPGltZyBzcmM9IicgLiBlc2NfdXJsKCRhdXRob3JfaW1nKSAuICciIGFsdD0iTcSDZMSDbGluIEdlb3JnZSBHcm96YSIgY2xhc3M9Im1nZy1hYi1pbWciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgbG9hZGluZz0ibGF6eSI+JwogICAgICAgICAuICc8ZGl2IGNsYXNzPSJtZ2ctYWItY29udGVudCI+JwogICAgICAgICAuICc8c3Ryb25nIGNsYXNzPSJtZ2ctYWItbmFtZSI+PGEgaHJlZj0iJyAuIGVzY191cmwoJGF1dGhvcl91cmwpIC4gJyI+TcSDZMSDbGluIEdlb3JnZSBHcm96YTwvYT48L3N0cm9uZz4nCiAgICAgICAgIC4gJzxwIGNsYXNzPSJtZ2ctYWItYmlvIj5UZW5vciwgY3JpdGljIG11emljYWwgyJlpIGJsb2dnZXIuIFNjcmllIGRlc3ByZSBvcGVyxIMsIG11emljxIMgY2xhc2ljxIMgyJlpIHNwZWN0YWNvbGUgZGluIFJvbcOibmlhIMiZaSBFdXJvcGEuPC9wPicKICAgICAgICAgLiAnPGRpdiBjbGFzcz0ibWdnLWFiLXNvY2lhbHMiPicgLiB0cmltKCRzb2NpYWxfaHRtbCkgLiAnPC9kaXY+JwogICAgICAgICAuICc8L2Rpdj4nCiAgICAgICAgIC4gJzwvZGl2Pic7CgogICAgcmV0dXJuICRjb250ZW50IC4gJGJveDsKfQoKYWRkX2FjdGlvbignd3BfaGVhZCcsICdtZ2dfYXV0aG9yX2JveF9zdHlsZXMnLCA1KTsKZnVuY3Rpb24gbWdnX2F1dGhvcl9ib3hfc3R5bGVzKCkgewogICAgaWYgKCFpc19zaW5ndWxhcigncG9zdCcpKSByZXR1cm47CiAgICAkcG9zdCA9IGdldF9wb3N0KCk7CiAgICBpZiAoISRwb3N0IHx8ICFoYXNfY2F0ZWdvcnkoJ3JlY2VuemlpJywgJHBvc3QpKSByZXR1cm47CiAgICBlY2hvICc8c3R5bGU+Ci5tZ2ctYXV0aG9yLWJveHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6MTZweDttYXJnaW46MzJweCAwIDE2cHg7cGFkZGluZzoyMHB4OwogIGJhY2tncm91bmQ6I2Y5ZjlmOTtib3JkZXItbGVmdDozcHggc29saWQgIzhCMDAwMDtib3JkZXItcmFkaXVzOjJweDt9Ci5tZ2ctYWItaW1ne3dpZHRoOjgwcHg7aGVpZ2h0OjgwcHg7Ym9yZGVyLXJhZGl1czo1MCU7b2JqZWN0LWZpdDpjb3ZlcjtmbGV4LXNocmluazowO30KLm1nZy1hYi1jb250ZW50e2ZsZXg6MTttaW4td2lkdGg6MDt9Ci5tZ2ctYWItbmFtZXtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxNXB4O21hcmdpbi1ib3R0b206NnB4O30KLm1nZy1hYi1uYW1lIGF7Y29sb3I6IzFhMWExYTt0ZXh0LWRlY29yYXRpb246bm9uZTt9Ci5tZ2ctYWItbmFtZSBhOmhvdmVye2NvbG9yOiM4QjAwMDA7fQoubWdnLWFiLWJpb3ttYXJnaW46MCAwIDhweDtmb250LXNpemU6MTNweDtjb2xvcjojNTU1O2xpbmUtaGVpZ2h0OjEuNTt9Ci5tZ2ctYWItc29jaWFse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzhCMDAwMDsKICB0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzhCMDAwMDt9Ci5tZ2ctYWItc29jaWFsOmhvdmVye2NvbG9yOiM1YTAwMDA7fQpAbWVkaWEobWF4LXdpZHRoOjQ4MHB4KXsubWdnLWF1dGhvci1ib3h7ZmxleC1kaXJlY3Rpb246Y29sdW1uO30ubWdnLWFiLWltZ3t3aWR0aDo2MHB4O2hlaWdodDo2MHB4O319Cjwvc3R5bGU+JyAuICJcbiI7Cn0K Gary McCann | madalingeorgegroza.ro

Gary McCann

# Gary McCann - Artist și Scenograf

Gary McCann este un artist și scenograf ale cărui contribuții în domeniul artelor scenice au marcat evoluția designului și

Dă click pentru a evalua acest articol!
[Total: 0 Media: 0]

# Gary McCann – Artist și Scenograf

Gary McCann este un artist și scenograf ale cărui contribuții în domeniul artelor scenice au marcat evoluția designului și producției teatrale moderne. Activitatea sa profesională s-a concentrat pe crearea unor medii vizuale inovatoare care au transformat experiența spectatorului la nivel internațional.

Formare și debut

Gary McCann și-a început formația în domeniul artelor vizuale și designului scenografic în perioada în care instituțiile culturale din Marea Britanie și alte țări europene modernizau abordările lor față de producția teatrală. În context, perioada în care și-a dezvoltat competențele profesionale a coincis cu o renaștere a interesului pentru designul experimental și pentru integrarea tehnologiilor noi în spațiile de spectacol.

Formația sa academică și profesională a urmărit principiile designului contemporan, cu accent pe relația dintre spațiu, lumină și mișcare actoricească. La fel ca alți scenografi ai perioadei sale, McCann a fost influențat de evoluția teoriilor teatrelor moderne și de schimburile internaționale de idei despre cum ar trebui să funcționeze un decor teatral efectiv.

Cariera

Cariera sa profesională s-a desfășurat în contextul unei industrii teatrale și a producțiilor de anvergură care au necesitat expertiză specifică în domenii legate de arhitectura scaenei și vizualizarea conceptelor artistice. Ca scenograf, Gary McCann a participat la realizarea unor producții care au necesitat atenție deosebită la detalii estetice și la modul în care elementele vizuale pot sprijini narativul dramatic.

Lucrările sale au fost caracterizate de o abordare reflexivă asupra rolului decorului în crearea atmosferei și a sensului în cadrul unei producții teatrale. Responsabilitățile sale au inclus nu doar crearea și amplasarea elementelor vizuale, ci și colaborarea strânsă cu regizori și cu echipele tehnice pentru a asigura că viziunea artistică se materializează corespunzător pe scenă.

Experiența sa în industria teatrală l-a pus în contact cu diverse genuri de spectacole, de la producții dramaticej tradiționale până la forme mai experimentale de teatru. Această diversitate a permis lui McCann să-și extindă paleta de tehnici și să se adapteze la cerințele variabile ale fiecărui proiect.

Repertoriu și roluri (scenograf)

Ca scenograf, Gary McCann a fost responsabil pentru crearea mediilor vizuale în care se desfășurau spectacolele. Rolul scenografului implică o gândire spațială sofisticată, precum și o înțelegere profundă a modului în care mediul fizic influențează receptivitatea și emoționalitatea spectatorului.

Proiectele sale au necesitat colaborare interdisciplinară cu regizori, designeri de lumini, costume și alte specialități ale producției. Scenografia nu este o disciplină izolată, ci o parte integrantă a unui ansamblu mai larg de elemente care contribuie la succes unei producții.

McCann a demonstrat capacitatea de a lucra cu diverse materiale și tehnologii disponibile scenografului modern. De-a lungul timpului, scenografia s-a evoluat pentru a incorpora elemente noi, de la proiecții digitale la instalații interactive, și profesionistii din domeniu au trebuit să se adapteze la aceste schimbări.

Abordarea sa a fost marcată de o sensibilitate estetică și de o înțelegere a modului în care detaliile mici pot contribui la impactul general al unei producții. Abilitatea de a vizualiza spațiul tridimensional și de a-l adapta pentru a servi nevoile unui text dramatic sau a unei interpretări artistice specifice sunt abilități esențiale ale unui bun scenograf.

Recunoaștere

Contribuțiile lui Gary McCann la domeniul scenografiei și al designului teatral au fost apreciate în cadrul comunității artistice profesionale. Recunoașterea sa reflectă standardele ridicate pe care le-a menținut în lucrările sale și impactul său asupra producțiilor în care a fost implicat.

Prezența sa în proiectele de înaltă calitate și colaborările sale cu profesionisti de renume din industrie teatrală sunt indicii ale reputației sale profesionale. Scenograful care reușește să lase o amprentă durabilă asupra unei producții este acela care nu se limitează la a crea un simplu decor, ci creează un univers care sprijină și amplifica intențiile artistice ale tuturor celorlalți participanți la spectacol.

Moștenirea sa în domeniu reflectă contribuția unui profesionist dedicat care a înțeles rolul crucial al designului în teatru și importanța vizionării critice a spațiului scenic ca instrument narativ și emoțional.

Dă click pentru a evalua acest articol!
[Total: 0 Media: 0]
Partajează

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *