A/MNCjBc/FVjAAAAAAAAAAAEAAAAQAAAAHOxAwAAZAAAZAEAbAAAWgAAZAAAZAEAbAEAWgEAZAAAZAIAbAIAbQMAWgMAAWQAAGQDAGwEAG0FAFoFAAFkAABkBABsBgBtBwBaCAABZQUAZAUAZAYAZAcAgwEBWgkAZQUAZAgAZAYAZAcAgwEBWgoAZAkAWgsAZAoAWgwAZAsAWg0AZAwAhAAAWg4AZA0AhAAAWg8AZRAAZA4AhAEAWhEAZA8AhAAAWhIAZBAAhAAAWhMAZBEAhAAAWhQAZBIAhAAAWhUAZBMAhAAAWhYAZBQAhAAAWhcAZBUAhAAAWhgAZBYAhAAAWhkAZBcAhAAAWhoAZBgAhAAAWhsAZBkAhAAAWhwAZBoAhAAAWh0AZBsAhAAAWh4AZBwAhAAAWh8AZB0AhAAAWiAAZB4AhAAAWiEAZB8AhAAAWiIAZCAAhAAAWiMAZCEAhAAAWiQAZCIAhAAAWiUAZCMAhAAAWiYAZCQAhAAAWicAZCUAhAAAWigAZCYAhAAAWikAZCcAhAAAWioAZCgAhAAAWisAZCkAhAAAWiwAZCoAhAAAWi0AZCsAWi4AZCwAhAAAWi8AZC0AhAAAWjAAZC4AhAAAWjEAZC8AhAAAWjIAZDAAhAAAWjMAZDEAhAAAWjQAZDIAhAAAWjUAaQAAWjYAZDMAZTYAZDQAPGQ1AGU2AGQ2ADxkNwBlNgBkOAA8ZDkAZTYAZDoAPGQ7AGU2AGQ8ADxkPQBlNgBkPgA8ZD8AZTYAZEAAPGRBAGU2AGRCADxkQwBqNwBlAQBqOABlCQBlEACDAgCDAQBlNgBkRAA8ZEUAZAEAZEYAhAIAWjoAZEcAhAAAWjsAZEgAhAAAWjwAaQAAWj0AZEkAZT0AZEoAPGRLAGU9AGRMADxkTQCEAABaPgBkTgCEAABaPwBkTwCEAABaQABkUACEAABaQQBkUQCEAABaQgBkUgCEAABaQwBkUwCEAABaRABkVACEAABaRQBkVQBkbABkVgCEAACDAABZWkYAZFcAhAAAWkcAZFgAWkgAZFkAhAAAWkkAZFoAhAAAWkoAZFsAhAAAWksAZFwAhAAAWkwAZF0AhAAAWk0AZF4AhAAAWk4AZF8AhAAAWk8AZGAAhAAAWlAAZGEAhAAAWlEAZGIAhAAAWlIAZGMAhAAAWlMAZGQAhAAAWlQAZGUAhAAAWlUAZGYAhAAAWlYAZGcAZVcAZgEAZGgAhAAAgwAAWVpYAGRpAGRqAIQBAFpZAGVaAGRrAGsCAHKtA2VZAIMAAAFuAABkAQBTKG0AAABp/////04oAQAAAHQMAAAAdGVzdF9zdXBwb3J0KAEAAAB0CAAAAGZpbmRmaWxlKAEAAAB0CwAAAEVsZW1lbnRUcmVlcwoAAABzaW1wbGUueG1sdAYAAABzdWJkaXJ0CwAAAHhtbHRlc3RkYXRhcw0AAABzaW1wbGUtbnMueG1sc4QAAAA8Ym9keT4KICA8dGFnIGNsYXNzPSdhJz50ZXh0PC90YWc+CiAgPHRhZyBjbGFzcz0nYicgLz4KICA8c2VjdGlvbj4KICAgIDx0YWcgY2xhc3M9J2InIGlkPSdpbm5lcic+c3VidGV4dDwvdGFnPgogIDwvc2VjdGlvbj4KPC9ib2R5PgpzegAAADxzZWN0aW9uPgogIDx0YWcgY2xhc3M9J2InIGlkPSdpbm5lcic+c3VidGV4dDwvdGFnPgogIDxuZXh0dGFnIC8+CiAgPG5leHRzZWN0aW9uPgogICAgPHRhZyAvPgogIDwvbmV4dHNlY3Rpb24+Cjwvc2VjdGlvbj4Kc3kAAAAKPGJvZHkgeG1sbnM9Imh0dHA6Ly9lZmZib3Qub3JnL25zIj4KICA8dGFnPnRleHQ8L3RhZz4KICA8dGFnIC8+CiAgPHNlY3Rpb24+CiAgICA8dGFnPnN1YnRleHQ8L3RhZz4KICA8L3NlY3Rpb24+CjwvYm9keT4KYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHOaAAAACiAgICBJbXBvcnQgc2FuaXR5LgoKICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUKICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudEluY2x1ZGUKICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFBhdGgKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAYAAABzYW5pdHk4AAAAcwAAAABjAQAAAAEAAAADAAAAQwAAAHMfAAAAdAAAfAAAZAEAgwIAcxsAfAAAR2QCAEdIbgAAZAAAUygDAAAATnQIAAAAX19jYWxsX19zDAAAAG5vdCBjYWxsYWJsZSgBAAAAdAcAAABoYXNhdHRyKAEAAAB0BgAAAG1ldGhvZCgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQMAAAAY2hlY2tfbWV0aG9kQQAAAHMEAAAAAAEPAWMCAAAABgAAAAMAAABLAAAAc1wAAABkAQBkAABsAAB9AwB8AwBqAACDAAB9BAB0AQBqAgB8AACDAQB9BQB8BQBqAwB8BAB8AgCNAQABfAEAckcAfAQAagQAgwAAU3wEAGoFAGQCAIMBAAF8BABTZAAAUygDAAAATmn/////aQAAAAAoBgAAAHQIAAAAU3RyaW5nSU90AgAAAEVUUgIAAAB0BQAAAHdyaXRldAgAAABnZXR2YWx1ZXQEAAAAc2VlaygGAAAAdAQAAABlbGVtdAkAAAB0b19zdHJpbmd0BwAAAG9wdGlvbnNSCgAAAHQEAAAAZmlsZXQEAAAAdHJlZSgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQJAAAAc2VyaWFsaXplRQAAAHMQAAAAAAEMAQwBDwEQAQYBCgINAWMBAAAAAQAAAAIAAABDAAAAcx0AAAB8AABqAAB0AQBqAgBrAgByFgBkAQBTfAAAagAAUygCAAAATnMJAAAAPENvbW1lbnQ+KAMAAAB0AwAAAHRhZ1ILAAAAdAcAAABDb21tZW50KAEAAABSDwAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQJAAAAc3VtbWFyaXplUAAAAHMGAAAAAAESAQQBYwEAAAACAAAABAAAAEMAAABzHQAAAGcAAHwAAERdEgB9AQB0AAB8AQCDAQBeAgBxBwBTKAEAAABOKAEAAABSFwAAACgCAAAAdAMAAABzZXFSDwAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQOAAAAc3VtbWFyaXplX2xpc3RVAAAAcwIAAAAAAWMBAAAAAgAAAAQAAABDAAAAc2MAAAB4XAB8AABqAACDAABEXU4AfQEAfAEAagEAcjcAfAEAagEAagIAZAEAZAIAgwIAfAEAXwEAbgAAfAEAagMAcg0AfAEAagMAagIAZAEAZAIAgwIAfAEAXwMAcQ0AcQ0AV2QAAFMoAwAAAE5zAgAAAA0KcwEAAAAKKAQAAAB0BAAAAGl0ZXJ0BAAAAHRleHR0BwAAAHJlcGxhY2V0BAAAAHRhaWwoAgAAAFITAAAAUg8AAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0DgAAAG5vcm1hbGl6ZV9jcmxmWAAAAHMKAAAAAAETAQkBGwEJAWMBAAAAAwAAAAMAAABDAAAAc1kAAAB0AAB8AACDAQABeCwAfAAARF0kAH0BAHQAAHwBAIMBAGQBAGsDAHIRAGQCAHwBABZHSHERAHERAFd8AABkAwAXfQIAfAAAZAQAF30CAHwAAGQFACABZAAAUygGAAAATmkBAAAAcyUAAABleHBlY3RlZCBvbmUtY2hhcmFjdGVyIHN0cmluZywgZ290ICVydAAAAAB0AQAAACBpAAAAACgBAAAAdAMAAABsZW4oAwAAAHQGAAAAc3RyaW5ndAQAAABjaGFydAoAAABuZXdfc3RyaW5nKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAwAAABjaGVja19zdHJpbmdfAAAAcw4AAAAAAQoBDQESARABCgEKAWMBAAAABQAAAAMAAABDAAAAc2sAAAB0AAB8AACDAQABfAAAagEAgwAAfQEAfAAAagIAgwAAfQIAeBgAfAEARF0QAH0DAHwAAHwDABl9BABxKQBXZAEAfAAAZAIAPHwAAGQCABlkAQBrAwByZwBkAwB8AABkAgAZFkdIbgAAZAAAUygEAAAATnQFAAAAdmFsdWV0AwAAAGtleXMdAAAAZXhwZWN0ZWQgdmFsdWUgc3RyaW5nLCBnb3QgJXIoAwAAAFIhAAAAdAQAAABrZXlzdAUAAABpdGVtcygFAAAAdAcAAABtYXBwaW5nUigAAABSKQAAAFInAAAAdAQAAABpdGVtKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dA0AAABjaGVja19tYXBwaW5naAAAAHMQAAAAAAEKAQwBDAENAQ4BCgEQAWMBAAAAAgAAAAMAAABDAAAAc+oAAAB0AABqAQB8AACDAQBzFwBkAQBHSG4AAHQCAHwAAGQCAIMCAHMuAGQDAEdIbgAAdAIAfAAAZAQAgwIAc0UAZAUAR0huAAB0AgB8AABkBgCDAgBzXABkBwBHSG4AAHQCAHwAAGQIAIMCAHNzAGQJAEdIbgAAdAMAfAAAagQAgwEAAXQFAHwAAGoGAIMBAAF8AABqBwBkAABrCQByrAB0AwB8AABqBwCDAQABbgAAfAAAagkAZAAAawkAcssAdAMAfAAAagkAgwEAAW4AAHgYAHwAAERdEAB9AQB0CgB8AQCDAQABcdIAV2QAAFMoCgAAAE5zDgAAAG5vdCBhbiBlbGVtZW50UhUAAABzDQAAAG5vIHRhZyBtZW1iZXJ0BgAAAGF0dHJpYnMQAAAAbm8gYXR0cmliIG1lbWJlclIbAAAAcw4AAABubyB0ZXh0IG1lbWJlclIdAAAAcw4AAABubyB0YWlsIG1lbWJlcigLAAAAUgsAAAB0CQAAAGlzZWxlbWVudFIHAAAAUiUAAABSFQAAAFIsAAAAUi0AAABSGwAAAHQEAAAATm9uZVIdAAAAdA0AAABjaGVja19lbGVtZW50KAIAAAB0BwAAAGVsZW1lbnRSDwAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weVIwAAAAcgAAAHMkAAAAAAEPAQgBDwEIAQ8BCAEPAQgBDwEIAg0BDQEPARABDwEQAQ0BYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHM+BgAACiAgICBUZXN0IGVsZW1lbnQgdHJlZSBpbnRlcmZhY2UuCgogICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0YWciKQogICAgPj4+IGNoZWNrX2VsZW1lbnQoZWxlbWVudCkKICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZWxlbWVudCkKICAgID4+PiBjaGVja19lbGVtZW50KHRyZWUuZ2V0cm9vdCgpKQoKICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidFx4ZTRnIiwga2V5PSJ2YWx1ZSIpCiAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpCiAgICA+Pj4gcmVwcihlbGVtZW50KSAgICMgZG9jdGVzdDogK0VMTElQU0lTCiAgICAiPEVsZW1lbnQgJ3RcXHhlNGcnIGF0IDB4Li4uPiIKICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCgogICAgTWFrZSBzdXJlIGFsbCBzdGFuZGFyZCBlbGVtZW50IG1ldGhvZHMgZXhpc3QuCgogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmFwcGVuZCkKICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5leHRlbmQpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaW5zZXJ0KQogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LnJlbW92ZSkKICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5nZXRjaGlsZHJlbikKICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5maW5kKQogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZXJmaW5kKQogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmZpbmRhbGwpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZmluZHRleHQpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuY2xlYXIpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZ2V0KQogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LnNldCkKICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5rZXlzKQogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZW1zKQogICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZXIpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcnRleHQpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZ2V0aXRlcmF0b3IpCgogICAgVGhlc2UgbWV0aG9kcyByZXR1cm4gYW4gaXRlcmFibGUuIFNlZSBidWcgNjQ3Mi4KCiAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcigidGFnIikubmV4dCkKICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyZmluZCgidGFnIikubmV4dCkKICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyZmluZCgiKiIpLm5leHQpCiAgICA+Pj4gY2hlY2tfbWV0aG9kKHRyZWUuaXRlcigidGFnIikubmV4dCkKICAgID4+PiBjaGVja19tZXRob2QodHJlZS5pdGVyZmluZCgidGFnIikubmV4dCkKICAgID4+PiBjaGVja19tZXRob2QodHJlZS5pdGVyZmluZCgiKiIpLm5leHQpCgogICAgVGhlc2UgYWxpYXNlcyBhcmUgcHJvdmlkZWQ6CgogICAgPj4+IGFzc2VydCBFVC5YTUwgPT0gRVQuZnJvbXN0cmluZwogICAgPj4+IGFzc2VydCBFVC5QSSA9PSBFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KICAgID4+PiBhc3NlcnQgRVQuWE1MUGFyc2VyID09IEVULlhNTFRyZWVCdWlsZGVyCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQJAAAAaW50ZXJmYWNligAAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHNLBgAACiAgICBCYXNpYyBtZXRob2Qgc2FuaXR5IGNoZWNrcy4KCiAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPGJvZHk+PHRhZy8+PC9ib2R5PiIpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCiAgICAnPGJvZHk+PHRhZyAvPjwvYm9keT4nCiAgICA+Pj4gZSA9IEVULkVsZW1lbnQoInRhZzIiKQogICAgPj4+IGVsZW0uYXBwZW5kKGUpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCiAgICAnPGJvZHk+PHRhZyAvPjx0YWcyIC8+PC9ib2R5PicKICAgID4+PiBlbGVtLnJlbW92ZShlKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzxib2R5Pjx0YWcgLz48L2JvZHk+JwogICAgPj4+IGVsZW0uaW5zZXJ0KDAsIGUpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCiAgICAnPGJvZHk+PHRhZzIgLz48dGFnIC8+PC9ib2R5PicKICAgID4+PiBlbGVtLnJlbW92ZShlKQogICAgPj4+IGVsZW0uZXh0ZW5kKFtlXSkKICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICc8Ym9keT48dGFnIC8+PHRhZzIgLz48L2JvZHk+JwogICAgPj4+IGVsZW0ucmVtb3ZlKGUpCgogICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0YWciLCBrZXk9InZhbHVlIikKICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyAxCiAgICAnPHRhZyBrZXk9InZhbHVlIiAvPicKICAgID4+PiBzdWJlbGVtZW50ID0gRVQuRWxlbWVudCgic3VidGFnIikKICAgID4+PiBlbGVtZW50LmFwcGVuZChzdWJlbGVtZW50KQogICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50KSAjIDIKICAgICc8dGFnIGtleT0idmFsdWUiPjxzdWJ0YWcgLz48L3RhZz4nCiAgICA+Pj4gZWxlbWVudC5pbnNlcnQoMCwgc3ViZWxlbWVudCkKICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyAzCiAgICAnPHRhZyBrZXk9InZhbHVlIj48c3VidGFnIC8+PHN1YnRhZyAvPjwvdGFnPicKICAgID4+PiBlbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQogICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50KSAjIDQKICAgICc8dGFnIGtleT0idmFsdWUiPjxzdWJ0YWcgLz48L3RhZz4nCiAgICA+Pj4gZWxlbWVudC5yZW1vdmUoc3ViZWxlbWVudCkKICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyA1CiAgICAnPHRhZyBrZXk9InZhbHVlIiAvPicKICAgID4+PiBlbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgVmFsdWVFcnJvcjogbGlzdC5yZW1vdmUoeCk6IHggbm90IGluIGxpc3QKICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyA2CiAgICAnPHRhZyBrZXk9InZhbHVlIiAvPicKICAgID4+PiBlbGVtZW50WzA6MF0gPSBbc3ViZWxlbWVudCwgc3ViZWxlbWVudCwgc3ViZWxlbWVudF0KICAgID4+PiBzZXJpYWxpemUoZWxlbWVudFsxXSkKICAgICc8c3VidGFnIC8+JwogICAgPj4+IGVsZW1lbnRbMTo5XSA9PSBbZWxlbWVudFsxXSwgZWxlbWVudFsyXV0KICAgIFRydWUKICAgID4+PiBlbGVtZW50Wzo5OjJdID09IFtlbGVtZW50WzBdLCBlbGVtZW50WzJdXQogICAgVHJ1ZQogICAgPj4+IGRlbCBlbGVtZW50WzE6Ml0KICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkKICAgICc8dGFnIGtleT0idmFsdWUiPjxzdWJ0YWcgLz48c3VidGFnIC8+PC90YWc+JwogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0CQAAAHNpbXBsZW9wc70AAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzGQEAAAogICAgVGVzdCBDREFUQSBoYW5kbGluZyAoZXRjKS4KCiAgICA+Pj4gc2VyaWFsaXplKEVULlhNTCgiPHRhZz5oZWxsbzwvdGFnPiIpKQogICAgJzx0YWc+aGVsbG88L3RhZz4nCiAgICA+Pj4gc2VyaWFsaXplKEVULlhNTCgiPHRhZz4mIzEwNDsmIzEwMTsmIzEwODsmIzEwODsmIzExMTs8L3RhZz4iKSkKICAgICc8dGFnPmhlbGxvPC90YWc+JwogICAgPj4+IHNlcmlhbGl6ZShFVC5YTUwoIjx0YWc+PCFbQ0RBVEFbaGVsbG9dXT48L3RhZz4iKSkKICAgICc8dGFnPmhlbGxvPC90YWc+JwogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0BQAAAGNkYXRh9QAAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHOZAwAACiAgICBUZXN0IGZpbmQgbWV0aG9kcyB1c2luZyB0aGUgZWxlbWVudHBhdGggZmFsbGJhY2suCgogICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZQoKICAgID4+PiBDdXJyZW50RWxlbWVudFBhdGggPSBFbGVtZW50VHJlZS5FbGVtZW50UGF0aAogICAgPj4+IEVsZW1lbnRUcmVlLkVsZW1lbnRQYXRoID0gRWxlbWVudFRyZWUuX1NpbXBsZUVsZW1lbnRQYXRoKCkKICAgID4+PiBlbGVtID0gRWxlbWVudFRyZWUuWE1MKFNBTVBMRV9YTUwpCiAgICA+Pj4gZWxlbS5maW5kKCJ0YWciKS50YWcKICAgICd0YWcnCiAgICA+Pj4gRWxlbWVudFRyZWUuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidGFnIikudGFnCiAgICAndGFnJwogICAgPj4+IGVsZW0uZmluZHRleHQoInRhZyIpCiAgICAndGV4dCcKICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciKQogICAgPj4+IGVsZW0uZmluZHRleHQoInRvZyIsICJkZWZhdWx0IikKICAgICdkZWZhdWx0JwogICAgPj4+IEVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0YWciKQogICAgJ3RleHQnCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKICAgIFsndGFnJywgJ3RhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWciKSkKICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQoKICAgIFBhdGggc3ludGF4IGRvZXNuJ3Qgd29yayBpbiB0aGlzIGNhc2UuCgogICAgPj4+IGVsZW0uZmluZCgic2VjdGlvbi90YWciKQogICAgPj4+IGVsZW0uZmluZHRleHQoInNlY3Rpb24vdGFnIikKICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vdGFnIikpCiAgICBbXQoKICAgID4+PiBFbGVtZW50VHJlZS5FbGVtZW50UGF0aCA9IEN1cnJlbnRFbGVtZW50UGF0aAogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0CgAAAHNpbXBsZWZpbmQCAQAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc24PAAAKICAgIFRlc3QgZmluZCBtZXRob2RzIChpbmNsdWRpbmcgeHBhdGggc3ludGF4KS4KCiAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQogICAgPj4+IGVsZW0uZmluZCgidGFnIikudGFnCiAgICAndGFnJwogICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoInRhZyIpLnRhZwogICAgJ3RhZycKICAgID4+PiBlbGVtLmZpbmQoInNlY3Rpb24vdGFnIikudGFnCiAgICAndGFnJwogICAgPj4+IGVsZW0uZmluZCgiLi90YWciKS50YWcKICAgICd0YWcnCiAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgiLi90YWciKS50YWcKICAgICd0YWcnCiAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgiL3RhZyIpLnRhZwogICAgJ3RhZycKICAgID4+PiBlbGVtWzJdID0gRVQuWE1MKFNBTVBMRV9TRUNUSU9OKQogICAgPj4+IGVsZW0uZmluZCgic2VjdGlvbi9uZXh0dGFnIikudGFnCiAgICAnbmV4dHRhZycKICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJzZWN0aW9uL3RhZyIpLnRhZwogICAgJ3RhZycKICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJ0b2ciKQogICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoInRvZy9mb28iKQogICAgPj4+IGVsZW0uZmluZHRleHQoInRhZyIpCiAgICAndGV4dCcKICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJzZWN0aW9uL25leHR0YWciKQogICAgJycKICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJzZWN0aW9uL25leHR0YWciLCAiZGVmYXVsdCIpCiAgICAnJwogICAgPj4+IGVsZW0uZmluZHRleHQoInRvZyIpCiAgICA+Pj4gZWxlbS5maW5kdGV4dCgidG9nIiwgImRlZmF1bHQiKQogICAgJ2RlZmF1bHQnCiAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInRhZyIpCiAgICAndGV4dCcKICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgidG9nL2ZvbyIpCiAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInRvZy9mb28iLCAiZGVmYXVsdCIpCiAgICAnZGVmYXVsdCcKICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgiLi90YWciKQogICAgJ3RleHQnCiAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoIi90YWciKQogICAgJ3RleHQnCiAgICA+Pj4gZWxlbS5maW5kdGV4dCgic2VjdGlvbi90YWciKQogICAgJ3N1YnRleHQnCiAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInNlY3Rpb24vdGFnIikKICAgICdzdWJ0ZXh0JwogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLiIpKQogICAgWydib2R5J10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRhZyIpKQogICAgWyd0YWcnLCAndGFnJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRvZyIpKQogICAgW10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRvZy9mb28iKSkKICAgIFtdCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqIikpCiAgICBbJ3RhZycsICd0YWcnLCAnc2VjdGlvbiddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWciKSkKICAgIFsndGFnJywgJ3RhZycsICd0YWcnLCAndGFnJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vdGFnIikpCiAgICBbJ3RhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLy90YWciKSkKICAgIFsndGFnJywgJ3RhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLyoiKSkKICAgIFsndGFnJywgJ25leHR0YWcnLCAnbmV4dHNlY3Rpb24nXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8vKiIpKQogICAgWyd0YWcnLCAnbmV4dHRhZycsICduZXh0c2VjdGlvbicsICd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8uLy8qIikpCiAgICBbJ3RhZycsICduZXh0dGFnJywgJ25leHRzZWN0aW9uJywgJ3RhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqLyoiKSkKICAgIFsndGFnJywgJ25leHR0YWcnLCAnbmV4dHNlY3Rpb24nXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi8vKiIpKQogICAgWyd0YWcnLCAnbmV4dHRhZycsICduZXh0c2VjdGlvbicsICd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi90YWciKSkKICAgIFsndGFnJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovLi90YWciKSkKICAgIFsndGFnJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vdGFnIikpCiAgICBbJ3RhZycsICd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnIikpCiAgICBbJ3RhZycsICd0YWcnLCAndGFnJywgJ3RhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy4vdGFnIikpCiAgICBbJ3RhZycsICd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnW0BjbGFzc10iKSkKICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnW0BjbGFzcz0nYSddIikpCiAgICBbJ3RhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWdbQGNsYXNzPSdiJ10iKSkKICAgIFsndGFnJywgJ3RhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWdbQGlkXSIpKQogICAgWyd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vc2VjdGlvblt0YWddIikpCiAgICBbJ3NlY3Rpb24nXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vc2VjdGlvbltlbGVtZW50XSIpKQogICAgW10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4uL3RhZyIpKQogICAgW10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vLi4vdGFnIikpCiAgICBbJ3RhZycsICd0YWcnXQogICAgPj4+IHN1bW1hcml6ZV9saXN0KEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmRhbGwoIi4vdGFnIikpCiAgICBbJ3RhZycsICd0YWcnXQoKICAgIEZvbGxvd2luZyBleGFtcGxlIGlzIGludmFsaWQgaW4gMS4yLgogICAgQSBsZWFkaW5nICcqJyBpcyBhc3N1bWVkIGluIDEuMy4KCiAgICA+Pj4gZWxlbS5maW5kYWxsKCJzZWN0aW9uLy8iKSA9PSBlbGVtLmZpbmRhbGwoInNlY3Rpb24vLyoiKQogICAgVHJ1ZQoKICAgIEVUJ3MgUGF0aCBtb2R1bGUgaGFuZGxlcyB0aGlzIGNhc2UgaW5jb3JyZWN0bHk7IHRoaXMgZ2l2ZXMKICAgIGEgd2FybmluZyBpbiAxLjMsIGFuZCB0aGUgYmVoYXZpb3VyIHdpbGwgYmUgbW9kaWZpZWQgaW4gMS40LgoKICAgID4+PiBzdW1tYXJpemVfbGlzdChFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kYWxsKCIvdGFnIikpCiAgICBbJ3RhZycsICd0YWcnXQoKICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUxfTlMpCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKICAgIFtdCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnIikpCiAgICBbJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnLCAne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyddCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy97aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnIikpCiAgICBbJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnLCAne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZycsICd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJ10KICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAQAAABmaW5kJQEAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHN/AQAACiAgICA+Pj4gaW1wb3J0IFN0cmluZ0lPCgogICAgPj4+IHN0cmluZ2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhTQU1QTEVfWE1MKQogICAgPj4+IHRyZWUgPSBFVC5FbGVtZW50VHJlZShmaWxlPXN0cmluZ2ZpbGUpCiAgICA+Pj4gdHJlZS5maW5kKCJ0YWciKS50YWcKICAgICd0YWcnCiAgICA+Pj4gdHJlZS5maW5kKCJzZWN0aW9uL3RhZyIpLnRhZwogICAgJ3RhZycKCiAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGZpbGU9U0lNUExFX1hNTEZJTEUpCiAgICA+Pj4gdHJlZS5maW5kKCJlbGVtZW50IikudGFnCiAgICAnZWxlbWVudCcKICAgID4+PiB0cmVlLmZpbmQoImVsZW1lbnQvLi4vZW1wdHktZWxlbWVudCIpLnRhZwogICAgJ2VtcHR5LWVsZW1lbnQnCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQJAAAAZmlsZV9pbml0nwEAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHPQAAAACiAgICBDaGVjayBiYWQgb3IgdW5zdXBwb3J0ZWQgcGF0aCBleHByZXNzaW9ucy4KCiAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQogICAgPj4+IGVsZW0uZmluZGFsbCgiL3RhZyIpCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICBTeW50YXhFcnJvcjogY2Fubm90IHVzZSBhYnNvbHV0ZSBwYXRoIG9uIGVsZW1lbnQKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAgAAABiYWRfZmluZLEBAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzPgIAAAogICAgQ2hlY2sgdGhhdCB0aGUgcGF0aCBjYWNoZSBiZWhhdmVzIHNhbmVseS4KCiAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQogICAgPj4+IGZvciBpIGluIHJhbmdlKDEwKTogRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgnLi8nK3N0cihpKSkKICAgID4+PiBjYWNoZV9sZW5fMTAgPSBsZW4oRVQuRWxlbWVudFBhdGguX2NhY2hlKQogICAgPj4+IGZvciBpIGluIHJhbmdlKDEwKTogRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgnLi8nK3N0cihpKSkKICAgID4+PiBsZW4oRVQuRWxlbWVudFBhdGguX2NhY2hlKSA9PSBjYWNoZV9sZW5fMTAKICAgIFRydWUKICAgID4+PiBmb3IgaSBpbiByYW5nZSgyMCk6IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoJy4vJytzdHIoaSkpCiAgICA+Pj4gbGVuKEVULkVsZW1lbnRQYXRoLl9jYWNoZSkgPiBjYWNoZV9sZW5fMTAKICAgIFRydWUKICAgID4+PiBmb3IgaSBpbiByYW5nZSg2MDApOiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCcuLycrc3RyKGkpKQogICAgPj4+IGxlbihFVC5FbGVtZW50UGF0aC5fY2FjaGUpIDwgNTAwCiAgICBUcnVlCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQKAAAAcGF0aF9jYWNoZbsBAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzYAEAAAogICAgVGVzdCBjb3B5IGhhbmRsaW5nIChldGMpLgoKICAgID4+PiBpbXBvcnQgY29weQogICAgPj4+IGUxID0gRVQuWE1MKCI8dGFnPmhlbGxvPGZvby8+PC90YWc+IikKICAgID4+PiBlMiA9IGNvcHkuY29weShlMSkKICAgID4+PiBlMyA9IGNvcHkuZGVlcGNvcHkoZTEpCiAgICA+Pj4gZTEuZmluZCgiZm9vIikudGFnID0gImJhciIKICAgID4+PiBzZXJpYWxpemUoZTEpCiAgICAnPHRhZz5oZWxsbzxiYXIgLz48L3RhZz4nCiAgICA+Pj4gc2VyaWFsaXplKGUyKQogICAgJzx0YWc+aGVsbG88YmFyIC8+PC90YWc+JwogICAgPj4+IHNlcmlhbGl6ZShlMykKICAgICc8dGFnPmhlbGxvPGZvbyAvPjwvdGFnPicKCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQEAAAAY29wec0BAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABz3AUAAAogICAgVGVzdCBhdHRyaWJ1dGUgaGFuZGxpbmcuCgogICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQogICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDEuMQogICAgPj4+IGVsZW0uZ2V0KCJrZXkiLCAiZGVmYXVsdCIpICMgMS4yCiAgICAnZGVmYXVsdCcKICAgID4+PiBlbGVtLnNldCgia2V5IiwgInZhbHVlIikKICAgID4+PiBlbGVtLmdldCgia2V5IikgIyAxLjMKICAgICd2YWx1ZScKCiAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIsIGtleT0idmFsdWUiKQogICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDIuMQogICAgJ3ZhbHVlJwogICAgPj4+IGVsZW0uYXR0cmliICMgMi4yCiAgICB7J2tleSc6ICd2YWx1ZSd9CgogICAgPj4+IGF0dHJpYiA9IHsia2V5IjogInZhbHVlIn0KICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIiwgYXR0cmliKQogICAgPj4+IGF0dHJpYi5jbGVhcigpICMgY2hlY2sgZm9yIGFsaWFzaW5nIGlzc3VlcwogICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDMuMQogICAgJ3ZhbHVlJwogICAgPj4+IGVsZW0uYXR0cmliICMgMy4yCiAgICB7J2tleSc6ICd2YWx1ZSd9CgogICAgPj4+IGF0dHJpYiA9IHsia2V5IjogInZhbHVlIn0KICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIiwgKiphdHRyaWIpCiAgICA+Pj4gYXR0cmliLmNsZWFyKCkgIyBjaGVjayBmb3IgYWxpYXNpbmcgaXNzdWVzCiAgICA+Pj4gZWxlbS5nZXQoImtleSIpICMgNC4xCiAgICAndmFsdWUnCiAgICA+Pj4gZWxlbS5hdHRyaWIgIyA0LjIKICAgIHsna2V5JzogJ3ZhbHVlJ30KCiAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIsIHsia2V5IjogIm90aGVyIn0sIGtleT0idmFsdWUiKQogICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDUuMQogICAgJ3ZhbHVlJwogICAgPj4+IGVsZW0uYXR0cmliICMgNS4yCiAgICB7J2tleSc6ICd2YWx1ZSd9CgogICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCd0ZXN0JykKICAgID4+PiBlbGVtLnRleHQgPSAiYWEiCiAgICA+Pj4gZWxlbS5zZXQoJ3Rlc3RhJywgJ3Rlc3R2YWwnKQogICAgPj4+IGVsZW0uc2V0KCd0ZXN0YicsICd0ZXN0MicpCiAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKICAgICc8dGVzdCB0ZXN0YT0idGVzdHZhbCIgdGVzdGI9InRlc3QyIj5hYTwvdGVzdD4nCiAgICA+Pj4gc29ydGVkKGVsZW0ua2V5cygpKQogICAgWyd0ZXN0YScsICd0ZXN0YiddCiAgICA+Pj4gc29ydGVkKGVsZW0uaXRlbXMoKSkKICAgIFsoJ3Rlc3RhJywgJ3Rlc3R2YWwnKSwgKCd0ZXN0YicsICd0ZXN0MicpXQogICAgPj4+IGVsZW0uYXR0cmliWyd0ZXN0YiddCiAgICAndGVzdDInCiAgICA+Pj4gZWxlbS5hdHRyaWJbJ3Rlc3RiJ10gPSAndGVzdDEnCiAgICA+Pj4gZWxlbS5hdHRyaWJbJ3Rlc3RjJ10gPSAndGVzdDInCiAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKICAgICc8dGVzdCB0ZXN0YT0idGVzdHZhbCIgdGVzdGI9InRlc3QxIiB0ZXN0Yz0idGVzdDIiPmFhPC90ZXN0PicKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5Ui0AAADfAQAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAczADAAAKICAgIFRlc3QgbWFrZWVsZW1lbnQgaGFuZGxpbmcuCgogICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQogICAgPj4+IGF0dHJpYiA9IHsia2V5IjogInZhbHVlIn0KICAgID4+PiBzdWJlbGVtID0gZWxlbS5tYWtlZWxlbWVudCgic3VidGFnIiwgYXR0cmliKQogICAgPj4+IGlmIHN1YmVsZW0uYXR0cmliIGlzIGF0dHJpYjoKICAgIC4uLiAgICAgcHJpbnQgImF0dHJpYiBhbGlhc2luZyIKICAgID4+PiBlbGVtLmFwcGVuZChzdWJlbGVtKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKCiAgICA+Pj4gZWxlbS5jbGVhcigpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCiAgICAnPHRhZyAvPicKICAgID4+PiBlbGVtLmFwcGVuZChzdWJlbGVtKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKICAgID4+PiBlbGVtLmV4dGVuZChbc3ViZWxlbSwgc3ViZWxlbV0pCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCiAgICAnPHRhZz48c3VidGFnIGtleT0idmFsdWUiIC8+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48L3RhZz4nCiAgICA+Pj4gZWxlbVs6XSA9IFtzdWJlbGVtXQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKICAgID4+PiBlbGVtWzpdID0gdHVwbGUoW3N1YmVsZW1dKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQLAAAAbWFrZWVsZW1lbnQZAgAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc4gFAAAKICAgIFRlc3QgcGFyc2luZyBmcm9tIGZpbGUuCgogICAgPj4+IHRyZWUgPSBFVC5wYXJzZShTSU1QTEVfWE1MRklMRSkKICAgID4+PiBub3JtYWxpemVfY3JsZih0cmVlKQogICAgPj4+IHRyZWUud3JpdGUoc3lzLnN0ZG91dCkKICAgIDxyb290PgogICAgICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD4KICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAogICAgICAgPGVtcHR5LWVsZW1lbnQgLz4KICAgIDwvcm9vdD4KICAgID4+PiB0cmVlID0gRVQucGFyc2UoU0lNUExFX05TX1hNTEZJTEUpCiAgICA+Pj4gbm9ybWFsaXplX2NybGYodHJlZSkKICAgID4+PiB0cmVlLndyaXRlKHN5cy5zdGRvdXQpCiAgICA8bnMwOnJvb3QgeG1sbnM6bnMwPSJuYW1lc3BhY2UiPgogICAgICAgPG5zMDplbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L25zMDplbGVtZW50PgogICAgICAgPG5zMDplbGVtZW50PnRleHQ8L25zMDplbGVtZW50PnRhaWwKICAgICAgIDxuczA6ZW1wdHktZWxlbWVudCAvPgogICAgPC9uczA6cm9vdD4KCiAgICA+Pj4gd2l0aCBvcGVuKFNJTVBMRV9YTUxGSUxFKSBhcyBmOgogICAgLi4uICAgICBkYXRhID0gZi5yZWFkKCkKCiAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkKICAgID4+PiBwYXJzZXIudmVyc2lvbiAgIyBkb2N0ZXN0OiArRUxMSVBTSVMKICAgICdFeHBhdCAuLi4nCiAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKICAgID4+PiBwcmludCBzZXJpYWxpemUocGFyc2VyLmNsb3NlKCkpCiAgICA8cm9vdD4KICAgICAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+CiAgICAgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CiAgICA8L3Jvb3Q+CgogICAgPj4+IHBhcnNlciA9IEVULlhNTFRyZWVCdWlsZGVyKCkgIyAxLjIgY29tcGF0aWJpbGl0eQogICAgPj4+IHBhcnNlci5mZWVkKGRhdGEpCiAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKHBhcnNlci5jbG9zZSgpKQogICAgPHJvb3Q+CiAgICAgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PgogICAgICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCiAgICAgICA8ZW1wdHktZWxlbWVudCAvPgogICAgPC9yb290PgoKICAgID4+PiB0YXJnZXQgPSBFVC5UcmVlQnVpbGRlcigpCiAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD10YXJnZXQpCiAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKICAgID4+PiBwcmludCBzZXJpYWxpemUocGFyc2VyLmNsb3NlKCkpCiAgICA8cm9vdD4KICAgICAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+CiAgICAgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CiAgICA8L3Jvb3Q+CiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQJAAAAcGFyc2VmaWxlOAIAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHN3AwAACiAgICA+Pj4gZWxlbWVudCA9IEVULlhNTCgiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzeXMuc3Rkb3V0KQogICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+CiAgICA+Pj4gZWxlbWVudCA9IEVULmZyb21zdHJpbmcoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCiAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3lzLnN0ZG91dCkKICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgogICAgPj4+IHNlcXVlbmNlID0gWyI8aHRtbD48Ym9keT4iLCAidGV4dDwvYm8iLCAiZHk+PC9odG1sPiJdCiAgICA+Pj4gZWxlbWVudCA9IEVULmZyb21zdHJpbmdsaXN0KHNlcXVlbmNlKQogICAgPj4+IHByaW50IEVULnRvc3RyaW5nKGVsZW1lbnQpCiAgICA8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4KICAgID4+PiBwcmludCAiIi5qb2luKEVULnRvc3RyaW5nbGlzdChlbGVtZW50KSkKICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgogICAgPj4+IEVULnRvc3RyaW5nKGVsZW1lbnQsICJhc2NpaSIpCiAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nYXNjaWknPz5cbjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIKICAgID4+PiBfLCBpZHMgPSBFVC5YTUxJRCgiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKICAgID4+PiBsZW4oaWRzKQogICAgMAogICAgPj4+IF8sIGlkcyA9IEVULlhNTElEKCI8aHRtbD48Ym9keSBpZD0nYm9keSc+dGV4dDwvYm9keT48L2h0bWw+IikKICAgID4+PiBsZW4oaWRzKQogICAgMQogICAgPj4+IGlkc1siYm9keSJdLnRhZwogICAgJ2JvZHknCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQMAAAAcGFyc2VsaXRlcmFsbwIAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHN8CgAACiAgICBUZXN0IGl0ZXJwYXJzZSBpbnRlcmZhY2UuCgogICAgPj4+IGl0ZXJwYXJzZSA9IEVULml0ZXJwYXJzZQoKICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9YTUxGSUxFKQogICAgPj4+IGFjdGlvbiwgZWxlbSA9IG5leHQoY29udGV4dCkKICAgID4+PiBwcmludCBhY3Rpb24sIGVsZW0udGFnCiAgICBlbmQgZWxlbWVudAogICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKICAgIC4uLiAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKICAgIGVuZCBlbGVtZW50CiAgICBlbmQgZW1wdHktZWxlbWVudAogICAgZW5kIHJvb3QKICAgID4+PiBjb250ZXh0LnJvb3QudGFnCiAgICAncm9vdCcKCiAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfTlNfWE1MRklMRSkKICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CiAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCiAgICBlbmQge25hbWVzcGFjZX1lbGVtZW50CiAgICBlbmQge25hbWVzcGFjZX1lbGVtZW50CiAgICBlbmQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CiAgICBlbmQge25hbWVzcGFjZX1yb290CgogICAgPj4+IGV2ZW50cyA9ICgpCiAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfWE1MRklMRSwgZXZlbnRzKQogICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKICAgIC4uLiAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKCiAgICA+Pj4gZXZlbnRzID0gKCkKICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9YTUxGSUxFLCBldmVudHM9ZXZlbnRzKQogICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKICAgIC4uLiAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKCiAgICA+Pj4gZXZlbnRzID0gKCJzdGFydCIsICJlbmQiKQogICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2UoU0lNUExFX1hNTEZJTEUsIGV2ZW50cykKICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CiAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCiAgICBzdGFydCByb290CiAgICBzdGFydCBlbGVtZW50CiAgICBlbmQgZWxlbWVudAogICAgc3RhcnQgZWxlbWVudAogICAgZW5kIGVsZW1lbnQKICAgIHN0YXJ0IGVtcHR5LWVsZW1lbnQKICAgIGVuZCBlbXB0eS1lbGVtZW50CiAgICBlbmQgcm9vdAoKICAgID4+PiBldmVudHMgPSAoInN0YXJ0IiwgImVuZCIsICJzdGFydC1ucyIsICJlbmQtbnMiKQogICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2UoU0lNUExFX05TX1hNTEZJTEUsIGV2ZW50cykKICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CiAgICAuLi4gICBpZiBhY3Rpb24gaW4gKCJzdGFydCIsICJlbmQiKToKICAgIC4uLiAgICAgcHJpbnQgYWN0aW9uLCBlbGVtLnRhZwogICAgLi4uICAgZWxzZToKICAgIC4uLiAgICAgcHJpbnQgYWN0aW9uLCBlbGVtCiAgICBzdGFydC1ucyAoJycsICduYW1lc3BhY2UnKQogICAgc3RhcnQge25hbWVzcGFjZX1yb290CiAgICBzdGFydCB7bmFtZXNwYWNlfWVsZW1lbnQKICAgIGVuZCB7bmFtZXNwYWNlfWVsZW1lbnQKICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZWxlbWVudAogICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAogICAgc3RhcnQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CiAgICBlbmQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CiAgICBlbmQge25hbWVzcGFjZX1yb290CiAgICBlbmQtbnMgTm9uZQoKICAgID4+PiBldmVudHMgPSAoInN0YXJ0IiwgImVuZCIsICJib2d1cyIpCiAgICA+Pj4gd2l0aCBvcGVuKFNJTVBMRV9YTUxGSUxFLCAicmIiKSBhcyBmOgogICAgLi4uICAgICBpdGVycGFyc2UoZiwgZXZlbnRzKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgVmFsdWVFcnJvcjogdW5rbm93biBldmVudCAnYm9ndXMnCgogICAgPj4+IGltcG9ydCBTdHJpbmdJTwoKICAgID4+PiBzb3VyY2UgPSBTdHJpbmdJTy5TdHJpbmdJTygKICAgIC4uLiAgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz5cbiIKICAgIC4uLiAgICAgIjxib2R5IHhtbG5zPSdodHRwOi8vJiMyMzM7ZmZib3Qub3JnL25zJ1xuIgogICAgLi4uICAgICAiICAgICAgeG1sbnM6Y2xceGU5PSdodHRwOi8vZWZmYm90Lm9yZy9ucyc+dGV4dDwvYm9keT5cbiIpCiAgICA+Pj4gZXZlbnRzID0gKCJzdGFydC1ucyIsKQogICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2Uoc291cmNlLCBldmVudHMpCiAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgogICAgLi4uICAgICBwcmludCBhY3Rpb24sIGVsZW0KICAgIHN0YXJ0LW5zICgnJywgdSdodHRwOi8vXHhlOWZmYm90Lm9yZy9ucycpCiAgICBzdGFydC1ucyAodSdjbFx4ZTknLCAnaHR0cDovL2VmZmJvdC5vcmcvbnMnKQoKICAgID4+PiBzb3VyY2UgPSBTdHJpbmdJTy5TdHJpbmdJTygiPGRvY3VtZW50IC8+anVuayIpCiAgICA+Pj4gdHJ5OgogICAgLi4uICAgZm9yIGFjdGlvbiwgZWxlbSBpbiBpdGVycGFyc2Uoc291cmNlKToKICAgIC4uLiAgICAgcHJpbnQgYWN0aW9uLCBlbGVtLnRhZwogICAgLi4uIGV4Y2VwdCBFVC5QYXJzZUVycm9yLCB2OgogICAgLi4uICAgcHJpbnQgdgogICAgZW5kIGRvY3VtZW50CiAgICBqdW5rIGFmdGVyIGRvY3VtZW50IGVsZW1lbnQ6IGxpbmUgMSwgY29sdW1uIDEyCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQJAAAAaXRlcnBhcnNliQIAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHNSAgAACiAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIpCiAgICA+Pj4gZWxlbS50ZXh0ID0gInRleHQiCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCiAgICAnPHRhZz50ZXh0PC90YWc+JwogICAgPj4+IEVULlN1YkVsZW1lbnQoZWxlbSwgInN1YnRhZyIpLnRleHQgPSAic3VidGV4dCIKICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICc8dGFnPnRleHQ8c3VidGFnPnN1YnRleHQ8L3N1YnRhZz48L3RhZz4nCgogICAgVGVzdCB0YWcgc3VwcHJlc3Npb24KICAgID4+PiBlbGVtLnRhZyA9IE5vbmUKICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICd0ZXh0PHN1YnRhZz5zdWJ0ZXh0PC9zdWJ0YWc+JwogICAgPj4+IGVsZW0uaW5zZXJ0KDAsIEVULkNvbW1lbnQoImNvbW1lbnQiKSkKICAgID4+PiBzZXJpYWxpemUoZWxlbSkgICAgICMgYXNzdW1lcyAxLjMKICAgICd0ZXh0PCEtLWNvbW1lbnQtLT48c3VidGFnPnN1YnRleHQ8L3N1YnRhZz4nCiAgICA+Pj4gZWxlbVswXSA9IEVULlBJKCJrZXkiLCAidmFsdWUiKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJ3RleHQ8P2tleSB2YWx1ZT8+PHN1YnRhZz5zdWJ0ZXh0PC9zdWJ0YWc+JwogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0CQAAAHdyaXRlZmlsZekCAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzewUAAAogICAgVGVzdCBwYXJzZXIgdy4gY3VzdG9tIGJ1aWxkZXIuCgogICAgPj4+IHdpdGggb3BlbihTSU1QTEVfWE1MRklMRSkgYXMgZjoKICAgIC4uLiAgICAgZGF0YSA9IGYucmVhZCgpCiAgICA+Pj4gY2xhc3MgQnVpbGRlcjoKICAgIC4uLiAgICAgZGVmIHN0YXJ0KHNlbGYsIHRhZywgYXR0cmliKToKICAgIC4uLiAgICAgICAgIHByaW50ICJzdGFydCIsIHRhZwogICAgLi4uICAgICBkZWYgZW5kKHNlbGYsIHRhZyk6CiAgICAuLi4gICAgICAgICBwcmludCAiZW5kIiwgdGFnCiAgICAuLi4gICAgIGRlZiBkYXRhKHNlbGYsIHRleHQpOgogICAgLi4uICAgICAgICAgcGFzcwogICAgPj4+IGJ1aWxkZXIgPSBCdWlsZGVyKCkKICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIodGFyZ2V0PWJ1aWxkZXIpCiAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKICAgIHN0YXJ0IHJvb3QKICAgIHN0YXJ0IGVsZW1lbnQKICAgIGVuZCBlbGVtZW50CiAgICBzdGFydCBlbGVtZW50CiAgICBlbmQgZWxlbWVudAogICAgc3RhcnQgZW1wdHktZWxlbWVudAogICAgZW5kIGVtcHR5LWVsZW1lbnQKICAgIGVuZCByb290CgogICAgPj4+IHdpdGggb3BlbihTSU1QTEVfTlNfWE1MRklMRSkgYXMgZjoKICAgIC4uLiAgICAgZGF0YSA9IGYucmVhZCgpCiAgICA+Pj4gY2xhc3MgQnVpbGRlcjoKICAgIC4uLiAgICAgZGVmIHN0YXJ0KHNlbGYsIHRhZywgYXR0cmliKToKICAgIC4uLiAgICAgICAgIHByaW50ICJzdGFydCIsIHRhZwogICAgLi4uICAgICBkZWYgZW5kKHNlbGYsIHRhZyk6CiAgICAuLi4gICAgICAgICBwcmludCAiZW5kIiwgdGFnCiAgICAuLi4gICAgIGRlZiBkYXRhKHNlbGYsIHRleHQpOgogICAgLi4uICAgICAgICAgcGFzcwogICAgLi4uICAgICBkZWYgcGkoc2VsZiwgdGFyZ2V0LCBkYXRhKToKICAgIC4uLiAgICAgICAgIHByaW50ICJwaSIsIHRhcmdldCwgcmVwcihkYXRhKQogICAgLi4uICAgICBkZWYgY29tbWVudChzZWxmLCBkYXRhKToKICAgIC4uLiAgICAgICAgIHByaW50ICJjb21tZW50IiwgcmVwcihkYXRhKQogICAgPj4+IGJ1aWxkZXIgPSBCdWlsZGVyKCkKICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIodGFyZ2V0PWJ1aWxkZXIpCiAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKICAgIHBpIHBpICdkYXRhJwogICAgY29tbWVudCAnIGNvbW1lbnQgJwogICAgc3RhcnQge25hbWVzcGFjZX1yb290CiAgICBzdGFydCB7bmFtZXNwYWNlfWVsZW1lbnQKICAgIGVuZCB7bmFtZXNwYWNlfWVsZW1lbnQKICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZWxlbWVudAogICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAogICAgc3RhcnQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CiAgICBlbmQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CiAgICBlbmQge25hbWVzcGFjZX1yb290CgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0DgAAAGN1c3RvbV9idWlsZGVy/wIAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHO/AwAACiAgICBUZXN0IEVsZW1lbnQuZ2V0Y2hpbGRyZW4oKQoKICAgID4+PiB3aXRoIG9wZW4oU0lNUExFX1hNTEZJTEUsICJyIikgYXMgZjoKICAgIC4uLiAgICAgdHJlZSA9IEVULnBhcnNlKGYpCiAgICA+Pj4gZm9yIGVsZW0gaW4gdHJlZS5nZXRyb290KCkuaXRlcigpOgogICAgLi4uICAgICBzdW1tYXJpemVfbGlzdChlbGVtLmdldGNoaWxkcmVuKCkpCiAgICBbJ2VsZW1lbnQnLCAnZWxlbWVudCcsICdlbXB0eS1lbGVtZW50J10KICAgIFtdCiAgICBbXQogICAgW10KICAgID4+PiBmb3IgZWxlbSBpbiB0cmVlLmdldGl0ZXJhdG9yKCk6CiAgICAuLi4gICAgIHN1bW1hcml6ZV9saXN0KGVsZW0uZ2V0Y2hpbGRyZW4oKSkKICAgIFsnZWxlbWVudCcsICdlbGVtZW50JywgJ2VtcHR5LWVsZW1lbnQnXQogICAgW10KICAgIFtdCiAgICBbXQoKICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCiAgICA+Pj4gbGVuKGVsZW0uZ2V0Y2hpbGRyZW4oKSkKICAgIDMKICAgID4+PiBsZW4oZWxlbVsyXS5nZXRjaGlsZHJlbigpKQogICAgMQogICAgPj4+IGVsZW1bOl0gPT0gZWxlbS5nZXRjaGlsZHJlbigpCiAgICBUcnVlCiAgICA+Pj4gY2hpbGQxID0gZWxlbVswXQogICAgPj4+IGNoaWxkMiA9IGVsZW1bMl0KICAgID4+PiBkZWwgZWxlbVsxOjJdCiAgICA+Pj4gbGVuKGVsZW0uZ2V0Y2hpbGRyZW4oKSkKICAgIDIKICAgID4+PiBjaGlsZDEgPT0gZWxlbVswXQogICAgVHJ1ZQogICAgPj4+IGNoaWxkMiA9PSBlbGVtWzFdCiAgICBUcnVlCiAgICA+Pj4gZWxlbVswOjJdID0gW2NoaWxkMiwgY2hpbGQxXQogICAgPj4+IGNoaWxkMiA9PSBlbGVtWzBdCiAgICBUcnVlCiAgICA+Pj4gY2hpbGQxID09IGVsZW1bMV0KICAgIFRydWUKICAgID4+PiBjaGlsZDEgPT0gZWxlbVswXQogICAgRmFsc2UKICAgID4+PiBlbGVtLmNsZWFyKCkKICAgID4+PiBlbGVtLmdldGNoaWxkcmVuKCkKICAgIFtdCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQLAAAAZ2V0Y2hpbGRyZW41AwAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc/oAAAAKICAgID4+PiBlbGVtID0gRVQuWE1MKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQogICAgPj4+IEVULnRvc3RyaW5nKGVsZW0pCiAgICAnPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+JwogICAgPj4+IGVsZW0gPSBFVC5mcm9tc3RyaW5nKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQogICAgPj4+IEVULnRvc3RyaW5nKGVsZW0pCiAgICAnPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+JwogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0CwAAAHdyaXRlc3RyaW5nZAMAAHMAAAAAYwEAAAABAAAAAwAAAEMAAABzFQAAAHQAAGoBAGQBAHwAABaDAQABZAIAUygDAAAAc9cAAAAKICAgID4+PiBjaGVja19lbmNvZGluZygiYXNjaWkiKQogICAgPj4+IGNoZWNrX2VuY29kaW5nKCJ1cy1hc2NpaSIpCiAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoImlzby04ODU5LTEiKQogICAgPj4+IGNoZWNrX2VuY29kaW5nKCJpc28tODg1OS0xNSIpCiAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoImNwNDM3IikKICAgID4+PiBjaGVja19lbmNvZGluZygibWFjLXJvbWFuIikKICAgIHMqAAAAPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nJXMnPz48eG1sIC8+TigCAAAAUgsAAAB0AwAAAFhNTCgBAAAAdAgAAABlbmNvZGluZygAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQOAAAAY2hlY2tfZW5jb2RpbmduAwAAcwIAAAAACWMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzTggAAAogICAgVGVzdCBlbmNvZGluZyBpc3N1ZXMuCgogICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQogICAgPj4+IGVsZW0udGV4dCA9IHUiYWJjIgogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzx0YWc+YWJjPC90YWc+JwogICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXRmLTgiKQogICAgJzx0YWc+YWJjPC90YWc+JwogICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKQogICAgJzx0YWc+YWJjPC90YWc+JwogICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0iaXNvLTg4NTktMSIpCiAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/PlxuPHRhZz5hYmM8L3RhZz4iCgogICAgPj4+IGVsZW0udGV4dCA9ICI8JlwiXCc+IgogICAgPj4+IHNlcmlhbGl6ZShlbGVtKQogICAgJzx0YWc+Jmx0OyZhbXA7IlwnJmd0OzwvdGFnPicKICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKICAgICc8dGFnPiZsdDsmYW1wOyJcJyZndDs8L3RhZz4nCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpICMgY2RhdGEgY2hhcmFjdGVycwogICAgJzx0YWc+Jmx0OyZhbXA7IlwnJmd0OzwvdGFnPicKICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9Imlzby04ODU5LTEiKQogICAgJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ2lzby04ODU5LTFcJz8+XG48dGFnPiZsdDsmYW1wOyJcJyZndDs8L3RhZz4nCgogICAgPj4+IGVsZW0uYXR0cmliWyJrZXkiXSA9ICI8JlwiXCc+IgogICAgPj4+IGVsZW0udGV4dCA9IE5vbmUKICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICc8dGFnIGtleT0iJmx0OyZhbXA7JnF1b3Q7XCcmZ3Q7IiAvPicKICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKICAgICc8dGFnIGtleT0iJmx0OyZhbXA7JnF1b3Q7XCcmZ3Q7IiAvPicKICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InVzLWFzY2lpIikKICAgICc8dGFnIGtleT0iJmx0OyZhbXA7JnF1b3Q7XCcmZ3Q7IiAvPicKICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9Imlzby04ODU5LTEiKQogICAgJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ2lzby04ODU5LTFcJz8+XG48dGFnIGtleT0iJmx0OyZhbXA7JnF1b3Q7XCcmZ3Q7IiAvPicKCiAgICA+Pj4gZWxlbS50ZXh0ID0gdSdceGU1XHhmNlx4ZjY8PicKICAgID4+PiBlbGVtLmF0dHJpYi5jbGVhcigpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCiAgICAnPHRhZz4mIzIyOTsmIzI0NjsmIzI0NjsmbHQ7Jmd0OzwvdGFnPicKICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKICAgICc8dGFnPlx4YzNceGE1XHhjM1x4YjZceGMzXHhiNiZsdDsmZ3Q7PC90YWc+JwogICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKQogICAgJzx0YWc+JiMyMjk7JiMyNDY7JiMyNDY7Jmx0OyZndDs8L3RhZz4nCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+XG48dGFnPlx4ZTVceGY2XHhmNiZsdDsmZ3Q7PC90YWc+IgoKICAgID4+PiBlbGVtLmF0dHJpYlsia2V5Il0gPSB1J1x4ZTVceGY2XHhmNjw+JwogICAgPj4+IGVsZW0udGV4dCA9IE5vbmUKICAgID4+PiBzZXJpYWxpemUoZWxlbSkKICAgICc8dGFnIGtleT0iJiMyMjk7JiMyNDY7JiMyNDY7Jmx0OyZndDsiIC8+JwogICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXRmLTgiKQogICAgJzx0YWcga2V5PSJceGMzXHhhNVx4YzNceGI2XHhjM1x4YjYmbHQ7Jmd0OyIgLz4nCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpCiAgICAnPHRhZyBrZXk9IiYjMjI5OyYjMjQ2OyYjMjQ2OyZsdDsmZ3Q7IiAvPicKICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9Imlzby04ODU5LTEiKQogICAgJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ2lzby04ODU5LTFcJz8+XG48dGFnIGtleT0iXHhlNVx4ZjZceGY2Jmx0OyZndDsiIC8+JwogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHlSRAAAAHkDAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzBwIAAAogICAgVGVzdCBzZXJpYWxpemF0aW9uIG1ldGhvZHMuCgogICAgPj4+IGUgPSBFVC5YTUwoIjxodG1sPjxsaW5rLz48c2NyaXB0PjEgJmx0OyAyPC9zY3JpcHQ+PC9odG1sPiIpCiAgICA+Pj4gZS50YWlsID0gIlxuIgogICAgPj4+IHNlcmlhbGl6ZShlKQogICAgJzxodG1sPjxsaW5rIC8+PHNjcmlwdD4xICZsdDsgMjwvc2NyaXB0PjwvaHRtbD5cbicKICAgID4+PiBzZXJpYWxpemUoZSwgbWV0aG9kPU5vbmUpCiAgICAnPGh0bWw+PGxpbmsgLz48c2NyaXB0PjEgJmx0OyAyPC9zY3JpcHQ+PC9odG1sPlxuJwogICAgPj4+IHNlcmlhbGl6ZShlLCBtZXRob2Q9InhtbCIpCiAgICAnPGh0bWw+PGxpbmsgLz48c2NyaXB0PjEgJmx0OyAyPC9zY3JpcHQ+PC9odG1sPlxuJwogICAgPj4+IHNlcmlhbGl6ZShlLCBtZXRob2Q9Imh0bWwiKQogICAgJzxodG1sPjxsaW5rPjxzY3JpcHQ+MSA8IDI8L3NjcmlwdD48L2h0bWw+XG4nCiAgICA+Pj4gc2VyaWFsaXplKGUsIG1ldGhvZD0idGV4dCIpCiAgICAnMSA8IDJcbicKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAcAAABtZXRob2RztAMAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHMvAwAACiAgICBUZXN0IGl0ZXJhdG9ycy4KCiAgICA+Pj4gZSA9IEVULlhNTCgiPGh0bWw+PGJvZHk+dGhpcyBpcyBhIDxpPnBhcmFncmFwaDwvaT4uPC9ib2R5Pi4uPC9odG1sPiIpCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZS5pdGVyKCkpCiAgICBbJ2h0bWwnLCAnYm9keScsICdpJ10KICAgID4+PiBzdW1tYXJpemVfbGlzdChlLmZpbmQoImJvZHkiKS5pdGVyKCkpCiAgICBbJ2JvZHknLCAnaSddCiAgICA+Pj4gc3VtbWFyaXplKG5leHQoZS5pdGVyKCkpKQogICAgJ2h0bWwnCiAgICA+Pj4gIiIuam9pbihlLml0ZXJ0ZXh0KCkpCiAgICAndGhpcyBpcyBhIHBhcmFncmFwaC4uLicKICAgID4+PiAiIi5qb2luKGUuZmluZCgiYm9keSIpLml0ZXJ0ZXh0KCkpCiAgICAndGhpcyBpcyBhIHBhcmFncmFwaC4nCiAgICA+Pj4gbmV4dChlLml0ZXJ0ZXh0KCkpCiAgICAndGhpcyBpcyBhICcKCiAgICBNZXRob2QgaXRlcnBhcnNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuIFNlZSBidWcgNjQ3Mi4KCiAgICA+Pj4gc291cmNlZmlsZSA9IHNlcmlhbGl6ZShlLCB0b19zdHJpbmc9RmFsc2UpCiAgICA+Pj4gbmV4dChFVC5pdGVycGFyc2Uoc291cmNlZmlsZSkpICAjIGRvY3Rlc3Q6ICtFTExJUFNJUwogICAgKCdlbmQnLCA8RWxlbWVudCAnaScgYXQgMHguLi4+KQoKICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoTm9uZSkKICAgID4+PiB0cmVlLml0ZXIoKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgQXR0cmlidXRlRXJyb3I6ICdOb25lVHlwZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2l0ZXInCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQJAAAAaXRlcmF0b3JzxgMAAHMAAAAAc3kAAAA8IURPQ1RZUEUgcG9pbnRzIFsKPCFFTlRJVFkgJSB1c2VyLWVudGl0aWVzIFNZU1RFTSAndXNlci1lbnRpdGllcy54bWwnPgoldXNlci1lbnRpdGllczsKXT4KPGRvY3VtZW50PiZlbnRpdHk7PC9kb2N1bWVudD4KYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHO0AgAACiAgICBUZXN0IGVudGl0eSBoYW5kbGluZy4KCiAgICAxKSBnb29kIGVudGl0aWVzCgogICAgPj4+IGUgPSBFVC5YTUwoIjxkb2N1bWVudCB0aXRsZT0nJiN4ODIzMDsnPnRlc3Q8L2RvY3VtZW50PiIpCiAgICA+Pj4gc2VyaWFsaXplKGUpCiAgICAnPGRvY3VtZW50IHRpdGxlPSImIzMzMzI4OyI+dGVzdDwvZG9jdW1lbnQ+JwoKICAgIDIpIGJhZCBlbnRpdGllcwoKICAgID4+PiBFVC5YTUwoIjxkb2N1bWVudD4mZW50aXR5OzwvZG9jdW1lbnQ+IikKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIFBhcnNlRXJyb3I6IHVuZGVmaW5lZCBlbnRpdHk6IGxpbmUgMSwgY29sdW1uIDEwCgogICAgPj4+IEVULlhNTChFTlRJVFlfWE1MKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgUGFyc2VFcnJvcjogdW5kZWZpbmVkIGVudGl0eSAmZW50aXR5OzogbGluZSA1LCBjb2x1bW4gMTAKCiAgICAzKSBjdXN0b20gZW50aXR5CgogICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcigpCiAgICA+Pj4gcGFyc2VyLmVudGl0eVsiZW50aXR5Il0gPSAidGV4dCIKICAgID4+PiBwYXJzZXIuZmVlZChFTlRJVFlfWE1MKQogICAgPj4+IHJvb3QgPSBwYXJzZXIuY2xvc2UoKQogICAgPj4+IHNlcmlhbGl6ZShyb290KQogICAgJzxkb2N1bWVudD50ZXh0PC9kb2N1bWVudD4nCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQGAAAAZW50aXR57AMAAHMAAAAAYwEAAAABAAAABQAAAEMAAABzMAAAAHkRAHQAAGoBAHwAAIMBAAFXbhgABHQAAGoCAGsKAHIrAAEBAXQDAGoEAFNYZAEAUygCAAAAc+UAAAAKCiAgICBUZXN0IGVycm9yIGhhbmRsaW5nLgoKICAgID4+PiBpc3N1YmNsYXNzKEVULlBhcnNlRXJyb3IsIFN5bnRheEVycm9yKQogICAgVHJ1ZQogICAgPj4+IGVycm9yKCJmb28iKS5wb3NpdGlvbgogICAgKDEsIDApCiAgICA+Pj4gZXJyb3IoIjx0YWc+JmZvbzs8L3RhZz4iKS5wb3NpdGlvbgogICAgKDEsIDUpCiAgICA+Pj4gZXJyb3IoImZvb2JhcjwiKS5wb3NpdGlvbgogICAgKDEsIDYpCgogICAgTigFAAAAUgsAAABSQwAAAHQKAAAAUGFyc2VFcnJvcnQDAAAAc3lzdAkAAABleGNfdmFsdWUoAQAAAHQDAAAAeG1sKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAUAAABlcnJvcgoEAABzCAAAAAAPAwERARABYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHMgBAAACiAgICBUZXN0IG5hbWVzcGFjZSBpc3N1ZXMuCgogICAgMSkgeG1sIG5hbWVzcGFjZQoKICAgID4+PiBlbGVtID0gRVQuWE1MKCI8dGFnIHhtbDpsYW5nPSdlbicgLz4iKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDEuMQogICAgJzx0YWcgeG1sOmxhbmc9ImVuIiAvPicKCiAgICAyKSBvdGhlciAid2VsbC1rbm93biIgbmFtZXNwYWNlcwoKICAgID4+PiBlbGVtID0gRVQuWE1MKCI8cmRmOlJERiB4bWxuczpyZGY9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMnIC8+IikKICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjEKICAgICc8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIC8+JwoKICAgID4+PiBlbGVtID0gRVQuWE1MKCI8aHRtbDpodG1sIHhtbG5zOmh0bWw9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnIC8+IikKICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjIKICAgICc8aHRtbDpodG1sIHhtbG5zOmh0bWw9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIC8+JwoKICAgID4+PiBlbGVtID0gRVQuWE1MKCI8c29hcDpFbnZlbG9wZSB4bWxuczpzb2FwPSdodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlJyAvPiIpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4zCiAgICAnPG5zMDpFbnZlbG9wZSB4bWxuczpuczA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUiIC8+JwoKICAgIDMpIHVua25vd24gbmFtZXNwYWNlcwogICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTF9OUykKICAgID4+PiBwcmludCBzZXJpYWxpemUoZWxlbSkKICAgIDxuczA6Ym9keSB4bWxuczpuczA9Imh0dHA6Ly9lZmZib3Qub3JnL25zIj4KICAgICAgPG5zMDp0YWc+dGV4dDwvbnMwOnRhZz4KICAgICAgPG5zMDp0YWcgLz4KICAgICAgPG5zMDpzZWN0aW9uPgogICAgICAgIDxuczA6dGFnPnN1YnRleHQ8L25zMDp0YWc+CiAgICAgIDwvbnMwOnNlY3Rpb24+CiAgICA8L25zMDpib2R5PgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0CQAAAG5hbWVzcGFjZR4EAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzMQgAAAogICAgVGVzdCBRTmFtZSBoYW5kbGluZy4KCiAgICAxKSBkZWNvcmF0ZWQgdGFncwoKICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgie3VyaX10YWciKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDEuMQogICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiAvPicKICAgID4+PiBlbGVtID0gRVQuRWxlbWVudChFVC5RTmFtZSgie3VyaX10YWciKSkKICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjIKICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgLz4nCiAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoRVQuUU5hbWUoInVyaSIsICJ0YWciKSkKICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjMKICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgLz4nCiAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoRVQuUU5hbWUoInVyaSIsICJ0YWciKSkKICAgID4+PiBzdWJlbGVtID0gRVQuU3ViRWxlbWVudChlbGVtLCBFVC5RTmFtZSgidXJpIiwgInRhZzEiKSkKICAgID4+PiBzdWJlbGVtID0gRVQuU3ViRWxlbWVudChlbGVtLCBFVC5RTmFtZSgidXJpIiwgInRhZzIiKSkKICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjQKICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSI+PG5zMDp0YWcxIC8+PG5zMDp0YWcyIC8+PC9uczA6dGFnPicKCiAgICAyKSBkZWNvcmF0ZWQgYXR0cmlidXRlcwoKICAgID4+PiBlbGVtLmNsZWFyKCkKICAgID4+PiBlbGVtLmF0dHJpYlsie3VyaX1rZXkiXSA9ICJ2YWx1ZSIKICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjEKICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgbnMwOmtleT0idmFsdWUiIC8+JwoKICAgID4+PiBlbGVtLmNsZWFyKCkKICAgID4+PiBlbGVtLmF0dHJpYltFVC5RTmFtZSgie3VyaX1rZXkiKV0gPSAidmFsdWUiCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4yCiAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIG5zMDprZXk9InZhbHVlIiAvPicKCiAgICAzKSBkZWNvcmF0ZWQgdmFsdWVzIGFyZSBub3QgY29udmVydGVkIGJ5IGRlZmF1bHQsIGJ1dCB0aGUKICAgICAgIFFOYW1lIHdyYXBwZXIgY2FuIGJlIHVzZWQgZm9yIHZhbHVlcwoKICAgID4+PiBlbGVtLmNsZWFyKCkKICAgID4+PiBlbGVtLmF0dHJpYlsie3VyaX1rZXkiXSA9ICJ7dXJpfXZhbHVlIgogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDMuMQogICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiBuczA6a2V5PSJ7dXJpfXZhbHVlIiAvPicKCiAgICA+Pj4gZWxlbS5jbGVhcigpCiAgICA+Pj4gZWxlbS5hdHRyaWJbInt1cml9a2V5Il0gPSBFVC5RTmFtZSgie3VyaX12YWx1ZSIpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMy4yCiAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIG5zMDprZXk9Im5zMDp2YWx1ZSIgLz4nCgogICAgPj4+IGVsZW0uY2xlYXIoKQogICAgPj4+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dG9rZW5pemVyKCIvZG9jL2NoYXB0ZXJbNV0vc2VjdGlvblsyXSIpCiAgICBbJy8nLCAnZG9jJywgJy8nLCAnY2hhcHRlcicsICdbJywgJzUnLCAnXScsICcvJywgJ3NlY3Rpb24nLCAnWycsICcyJywgJ10nXQogICAgPj4+IHhwYXRoX3Rva2VuaXplcigiY2hhcHRlci8vcGFyYSIpCiAgICBbJ2NoYXB0ZXInLCAnLy8nLCAncGFyYSddCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIvL3BhcmEiKQogICAgWycvLycsICdwYXJhJ10KICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi8vb2xpc3QvaXRlbSIpCiAgICBbJy8vJywgJ29saXN0JywgJy8nLCAnaXRlbSddCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuIikKICAgIFsnLiddCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuLy9wYXJhIikKICAgIFsnLicsICcvLycsICdwYXJhJ10KICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4uIikKICAgIFsnLi4nXQogICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLi4vQGxhbmciKQogICAgWycuLicsICcvJywgJ0AnLCAnbGFuZyddCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJjaGFwdGVyW3RpdGxlXSIpCiAgICBbJ2NoYXB0ZXInLCAnWycsICd0aXRsZScsICddJ10KICAgID4+PiB4cGF0aF90b2tlbml6ZXIoImVtcGxveWVlW0BzZWNyZXRhcnkgYW5kIEBhc3Npc3RhbnRdIikKICAgIFsnZW1wbG95ZWUnLCAnWycsICdAJywgJ3NlY3JldGFyeScsICcnLCAnYW5kJywgJycsICdAJywgJ2Fzc2lzdGFudCcsICddJ10KCiAgICA+Pj4gIyBhZGRpdGlvbmFsIHRlc3RzCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJ7aHR0cDovL3NwYW19ZWdnIikKICAgIFsne2h0dHA6Ly9zcGFtfWVnZyddCiAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuL3NwYW0uZWdnIikKICAgIFsnLicsICcvJywgJ3NwYW0uZWdnJ10KICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4vL3todHRwOi8vc3BhbX1lZ2ciKQogICAgWycuJywgJy8vJywgJ3todHRwOi8vc3BhbX1lZ2cnXQogICAgaf////8oAQAAAHQLAAAARWxlbWVudFBhdGgoBAAAAHQJAAAAeG1sLmV0cmVlUlEAAAB0DwAAAHhwYXRoX3Rva2VuaXplcnQGAAAAYXBwZW5kKAUAAAB0AQAAAHBSUQAAAHQDAAAAb3V0dAIAAABvcFIVAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5UlMAAACWBAAAcwoAAAAAMBABBgEcARcBYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHO8AQAACiAgICBUZXN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBkaXJlY3RseQoKICAgID4+PiBFVC50b3N0cmluZyhFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oJ3Rlc3QnLCAnaW5zdHJ1Y3Rpb24nKSkKICAgICc8P3Rlc3QgaW5zdHJ1Y3Rpb24/PicKICAgID4+PiBFVC50b3N0cmluZyhFVC5QSSgndGVzdCcsICdpbnN0cnVjdGlvbicpKQogICAgJzw/dGVzdCBpbnN0cnVjdGlvbj8+JwoKICAgIElzc3VlICMyNzQ2CgogICAgPj4+IEVULnRvc3RyaW5nKEVULlBJKCd0ZXN0JywgJzx0ZXN0aW5nJj4nKSkKICAgICc8P3Rlc3QgPHRlc3RpbmcmPj8+JwogICAgPj4+IEVULnRvc3RyaW5nKEVULlBJKCd0ZXN0JywgdSc8dGVzdGluZyY+4ycpLCAnbGF0aW4xJykKICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdsYXRpbjEnPz5cbjw/dGVzdCA8dGVzdGluZyY+XHhlMz8+IgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0FQAAAHByb2Nlc3NpbmdpbnN0cnVjdGlvbswEAABzAAAAAHO0AAAAPD94bWwgdmVyc2lvbj0nMS4wJz8+Cjxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CiAgPHA+MTIwIE16IGlzIGFkZXF1YXRlIGZvciBhbiBhdmVyYWdlIGhvbWUgdXNlci48L3A+CiAgPHhpOmluY2x1ZGUgaHJlZj0iZGlzY2xhaW1lci54bWwiLz4KPC9kb2N1bWVudD4KcwYAAABDMS54bWxz0AAAADw/eG1sIHZlcnNpb249JzEuMCc/Pgo8ZGlzY2xhaW1lcj4KICA8cD5UaGUgb3BpbmlvbnMgcmVwcmVzZW50ZWQgaGVyZWluIHJlcHJlc2VudCB0aG9zZSBvZiB0aGUgaW5kaXZpZHVhbAogIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIG9mZmljaWFsIHBvbGljeSBlbmRvcnNlZCBieSB0aGlzCiAgb3JnYW5pemF0aW9uLjwvcD4KPC9kaXNjbGFpbWVyPgpzDgAAAGRpc2NsYWltZXIueG1sc7YAAAA8P3htbCB2ZXJzaW9uPScxLjAnPz4KPGRvY3VtZW50IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KICA8cD5UaGlzIGRvY3VtZW50IGhhcyBiZWVuIGFjY2Vzc2VkCiAgPHhpOmluY2x1ZGUgaHJlZj0iY291bnQudHh0IiBwYXJzZT0idGV4dCIvPiB0aW1lcy48L3A+CjwvZG9jdW1lbnQ+CnMGAAAAQzIueG1sdAYAAAAzMjQzODdzCQAAAGNvdW50LnR4dHO/AAAAPD94bWwgdmVyc2lvbj0nMS4wJz8+Cjxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CiAgPHA+VGhpcyBkb2N1bWVudCBoYXMgYmVlbiA8ZW0+YWNjZXNzZWQ8L2VtPgogIDx4aTppbmNsdWRlIGhyZWY9ImNvdW50LnR4dCIgcGFyc2U9InRleHQiLz4gdGltZXMuPC9wPgo8L2RvY3VtZW50PgpzBwAAAEMyYi54bWxz2QAAADw/eG1sIHZlcnNpb249JzEuMCc/Pgo8ZG9jdW1lbnQgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgogIDxwPlRoZSBmb2xsb3dpbmcgaXMgdGhlIHNvdXJjZSBvZiB0aGUgImRhdGEueG1sIiByZXNvdXJjZTo8L3A+CiAgPGV4YW1wbGU+PHhpOmluY2x1ZGUgaHJlZj0iZGF0YS54bWwiIHBhcnNlPSJ0ZXh0Ii8+PC9leGFtcGxlPgo8L2RvY3VtZW50PgpzBgAAAEMzLnhtbHNRAAAAPD94bWwgdmVyc2lvbj0nMS4wJz8+CjxkYXRhPgogIDxpdGVtPjwhW0NEQVRBW0Jyb29rcyAmIFNoaWVsZHNdXT48L2l0ZW0+CjwvZGF0YT4KcwgAAABkYXRhLnhtbHNXAQAAPD94bWwgdmVyc2lvbj0nMS4wJz8+CjxkaXYgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgogIDx4aTppbmNsdWRlIGhyZWY9ImV4YW1wbGUudHh0IiBwYXJzZT0idGV4dCI+CiAgICA8eGk6ZmFsbGJhY2s+CiAgICAgIDx4aTppbmNsdWRlIGhyZWY9ImZhbGxiYWNrLWV4YW1wbGUudHh0IiBwYXJzZT0idGV4dCI+CiAgICAgICAgPHhpOmZhbGxiYWNrPjxhIGhyZWY9Im1haWx0bzpib2JAZXhhbXBsZS5vcmciPlJlcG9ydCBlcnJvcjwvYT48L3hpOmZhbGxiYWNrPgogICAgICA8L3hpOmluY2x1ZGU+CiAgICA8L3hpOmZhbGxiYWNrPgogIDwveGk6aW5jbHVkZT4KPC9kaXY+CnMGAAAAQzUueG1sc4QAAAA8P3htbCB2ZXJzaW9uPScxLjAnPz4KPGRvY3VtZW50IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KICA8cD5FeGFtcGxlLjwvcD4KICA8eGk6aW5jbHVkZSBocmVmPSJ7fSIvPgo8L2RvY3VtZW50PgpzCwAAAGRlZmF1bHQueG1sUkwAAABjAwAAAAUAAAAFAAAAQwAAAHNYAAAAeQ4AdAAAfAAAGX0DAFduHQAEdAEAawoAci0AAQEBdAIAZAEAgwEAggEAbgEAWHwBAGQCAGsCAHJUAGQDAGQEAGwDAG0EAH0EAAF8BAB8AwCDAQBTfAMAUygFAAAATnMSAAAAcmVzb3VyY2Ugbm90IGZvdW5kUkwAAABp/////ygBAAAAUkMAAAAoBQAAAHQIAAAAWElOQ0xVREV0CAAAAEtleUVycm9ydAcAAABJT0Vycm9ydBUAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWVSQwAAACgFAAAAdAQAAABocmVmdAUAAABwYXJzZVJEAAAAdAQAAABkYXRhUkMAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0DwAAAHhpbmNsdWRlX2xvYWRlcikFAABzEAAAAAABAwEOAQ0BEAEMARABCgFjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc6YHAAAKICAgIEJhc2ljIGluY2x1c2lvbiBleGFtcGxlIChYSW5jbHVkZSBDLjEpCgogICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAogICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50SW5jbHVkZQoKICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzEueG1sIikKICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCiAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEMxCiAgICA8ZG9jdW1lbnQ+CiAgICAgIDxwPjEyMCBNeiBpcyBhZGVxdWF0ZSBmb3IgYW4gYXZlcmFnZSBob21lIHVzZXIuPC9wPgogICAgICA8ZGlzY2xhaW1lcj4KICAgICAgPHA+VGhlIG9waW5pb25zIHJlcHJlc2VudGVkIGhlcmVpbiByZXByZXNlbnQgdGhvc2Ugb2YgdGhlIGluZGl2aWR1YWwKICAgICAgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgb2ZmaWNpYWwgcG9saWN5IGVuZG9yc2VkIGJ5IHRoaXMKICAgICAgb3JnYW5pemF0aW9uLjwvcD4KICAgIDwvZGlzY2xhaW1lcj4KICAgIDwvZG9jdW1lbnQ+CgogICAgVGV4dHVhbCBpbmNsdXNpb24gZXhhbXBsZSAoWEluY2x1ZGUgQy4yKQoKICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzIueG1sIikKICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCiAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEMyCiAgICA8ZG9jdW1lbnQ+CiAgICAgIDxwPlRoaXMgZG9jdW1lbnQgaGFzIGJlZW4gYWNjZXNzZWQKICAgICAgMzI0Mzg3IHRpbWVzLjwvcD4KICAgIDwvZG9jdW1lbnQ+CgogICAgVGV4dHVhbCBpbmNsdXNpb24gYWZ0ZXIgc2libGluZyBlbGVtZW50IChiYXNlZCBvbiBtb2RpZmllZCBYSW5jbHVkZSBDLjIpCgogICAgPj4+IGRvY3VtZW50ID0geGluY2x1ZGVfbG9hZGVyKCJDMmIueG1sIikKICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCiAgICA+Pj4gcHJpbnQoc2VyaWFsaXplKGRvY3VtZW50KSkgIyBDMmIKICAgIDxkb2N1bWVudD4KICAgICAgPHA+VGhpcyBkb2N1bWVudCBoYXMgYmVlbiA8ZW0+YWNjZXNzZWQ8L2VtPgogICAgICAzMjQzODcgdGltZXMuPC9wPgogICAgPC9kb2N1bWVudD4KCiAgICBUZXh0dWFsIGluY2x1c2lvbiBvZiBYTUwgZXhhbXBsZSAoWEluY2x1ZGUgQy4zKQoKICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzMueG1sIikKICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCiAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEMzCiAgICA8ZG9jdW1lbnQ+CiAgICAgIDxwPlRoZSBmb2xsb3dpbmcgaXMgdGhlIHNvdXJjZSBvZiB0aGUgImRhdGEueG1sIiByZXNvdXJjZTo8L3A+CiAgICAgIDxleGFtcGxlPiZsdDs/eG1sIHZlcnNpb249JzEuMCc/Jmd0OwogICAgJmx0O2RhdGEmZ3Q7CiAgICAgICZsdDtpdGVtJmd0OyZsdDshW0NEQVRBW0Jyb29rcyAmYW1wOyBTaGllbGRzXV0mZ3Q7Jmx0Oy9pdGVtJmd0OwogICAgJmx0Oy9kYXRhJmd0OwogICAgPC9leGFtcGxlPgogICAgPC9kb2N1bWVudD4KCiAgICBGYWxsYmFjayBleGFtcGxlIChYSW5jbHVkZSBDLjUpCiAgICBOb3RlISBGYWxsYmFjayBzdXBwb3J0IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQKCiAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoIkM1LnhtbCIpCiAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgeGluY2x1ZGVfbG9hZGVyKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgSU9FcnJvcjogcmVzb3VyY2Ugbm90IGZvdW5kCiAgICA+Pj4gIyBwcmludCBzZXJpYWxpemUoZG9jdW1lbnQpICMgQzUKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAgAAAB4aW5jbHVkZTMFAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzbwEAAAogICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50SW5jbHVkZQoKICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiZGVmYXVsdC54bWwiKQogICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQpCiAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIGRlZmF1bHQKICAgIDxkb2N1bWVudD4KICAgICAgPHA+RXhhbXBsZS48L3A+CiAgICAgIDxyb290PgogICAgICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD4KICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAogICAgICAgPGVtcHR5LWVsZW1lbnQgLz4KICAgIDwvcm9vdD4KICAgIDwvZG9jdW1lbnQ+CiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQQAAAAeGluY2x1ZGVfZGVmYXVsdHIFAABzAAAAAHPFAAAAPD94bWwgdmVyc2lvbj0nMS4wJz8+Cjxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CiAgPHA+MTIwIE16IGlzIGFkZXF1YXRlIGZvciBhbiBhdmVyYWdlIGhvbWUgdXNlci48L3A+CiAgPHhpOmluY2x1ZGUgaHJlZj0iZGlzY2xhaW1lci54bWwiIHBhcnNlPSJCQURfVFlQRSIvPgo8L2RvY3VtZW50PgpzBgAAAEIxLnhtbHNuAAAAPD94bWwgdmVyc2lvbj0nMS4wJz8+CjxkaXYgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgogICAgPHhpOmZhbGxiYWNrPjwveGk6ZmFsbGJhY2s+CjwvZGl2PgpzBgAAAEIyLnhtbGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzqAQAAAogICAgVGVzdCBmYWlsdXJlIHRvIGxvY2F0ZSBpbmNsdWRlZCBYTUwgZmlsZS4KCiAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRJbmNsdWRlCgogICAgPj4+IGRlZiBub25lX2xvYWRlcihocmVmLCBwYXJzZXIsIGVuY29kaW5nPU5vbmUpOgogICAgLi4uICAgICByZXR1cm4gTm9uZQoKICAgID4+PiBkb2N1bWVudCA9IEVULlhNTChYSU5DTFVERVsiQzEueG1sIl0pCiAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgbG9hZGVyPW5vbmVfbG9hZGVyKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgRmF0YWxJbmNsdWRlRXJyb3I6IGNhbm5vdCBsb2FkICdkaXNjbGFpbWVyLnhtbCcgYXMgJ3htbCcKCiAgICBUZXN0IGZhaWx1cmUgdG8gbG9jYXRlIGluY2x1ZGVkIHRleHQgZmlsZS4KCiAgICA+Pj4gZG9jdW1lbnQgPSBFVC5YTUwoWElOQ0xVREVbIkMyLnhtbCJdKQogICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIGxvYWRlcj1ub25lX2xvYWRlcikKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIEZhdGFsSW5jbHVkZUVycm9yOiBjYW5ub3QgbG9hZCAnY291bnQudHh0JyBhcyAndGV4dCcKCiAgICBUZXN0IGJhZCBwYXJzZSB0eXBlLgoKICAgID4+PiBkb2N1bWVudCA9IEVULlhNTChYSU5DTFVERV9CQURbIkIxLnhtbCJdKQogICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIGxvYWRlcj1ub25lX2xvYWRlcikKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIEZhdGFsSW5jbHVkZUVycm9yOiB1bmtub3duIHBhcnNlIHR5cGUgaW4geGk6aW5jbHVkZSB0YWcgKCdCQURfVFlQRScpCgogICAgVGVzdCB4aTpmYWxsYmFjayBvdXRzaWRlIHhpOmluY2x1ZGUuCgogICAgPj4+IGRvY3VtZW50ID0gRVQuWE1MKFhJTkNMVURFX0JBRFsiQjIueG1sIl0pCiAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgbG9hZGVyPW5vbmVfbG9hZGVyKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgRmF0YWxJbmNsdWRlRXJyb3I6IHhpOmZhbGxiYWNrIHRhZyBtdXN0IGJlIGNoaWxkIG9mIHhpOmluY2x1ZGUgKCd7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZX1mYWxsYmFjaycpCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQRAAAAeGluY2x1ZGVfZmFpbHVyZXOXBQAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc68DAAAKCiAgICBtYXJzaGFsbGVyIGdpdmVzIG9ic2N1cmUgZXJyb3JzIGZvciBub24tc3RyaW5nIHZhbHVlcwoKICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgxMjMpCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgdGFnCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICBUeXBlRXJyb3I6IGNhbm5vdCBzZXJpYWxpemUgMTIzICh0eXBlIGludCkKICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCiAgICA+Pj4gZWxlbS50ZXh0ID0gMTIzCiAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgdGV4dAogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgVHlwZUVycm9yOiBjYW5ub3Qgc2VyaWFsaXplIDEyMyAodHlwZSBpbnQpCiAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoImVsZW0iKQogICAgPj4+IGVsZW0udGFpbCA9IDEyMwogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIHRhaWwKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQogICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJlbGVtIikKICAgID4+PiBlbGVtLnNldCgxMjMsICIxMjMiKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIGF0dHJpYnV0ZSBrZXkKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQogICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJlbGVtIikKICAgID4+PiBlbGVtLnNldCgiMTIzIiwgMTIzKQogICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIGF0dHJpYnV0ZSB2YWx1ZQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgVHlwZUVycm9yOiBjYW5ub3Qgc2VyaWFsaXplIDEyMyAodHlwZSBpbnQpCgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0EAAAAGJ1Z194bWx0b29sa2l0MjG+BQAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc8oAAAAKCiAgICB0eXBvIGluIEVsZW1lbnRUcmVlLmZpbmR0ZXh0CgogICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZWxlbSkKICAgID4+PiB0cmVlLmZpbmR0ZXh0KCJ0YWciKQogICAgJ3RleHQnCiAgICA+Pj4gdHJlZS5maW5kdGV4dCgic2VjdGlvbi90YWciKQogICAgJ3N1YnRleHQnCgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0EAAAAGJ1Z194bWx0b29sa2l0MjXeBQAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc9gAAAAKCiAgICAuLy90YWcgY2F1c2VzIGV4Y2VwdGlvbnMKCiAgICA+Pj4gdHJlZSA9IEVULlhNTCgiPGRvYz48dGFibGU+PHRib2R5Lz48L3RhYmxlPjwvZG9jPiIpCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QodHJlZS5maW5kYWxsKCIuLy90aGVhZCIpKQogICAgW10KICAgID4+PiBzdW1tYXJpemVfbGlzdCh0cmVlLmZpbmRhbGwoIi4vL3Rib2R5IikpCiAgICBbJ3Rib2R5J10KCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQQAAAAYnVnX3htbHRvb2xraXQyOOwFAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABz0AAAAAoKICAgIGR1bXAoKSBkb2Vzbid0IGZsdXNoIHRoZSBvdXRwdXQgYnVmZmVyCgogICAgPj4+IHRyZWUgPSBFVC5YTUwoIjxkb2M+PHRhYmxlPjx0Ym9keS8+PC90YWJsZT48L2RvYz4iKQogICAgPj4+IEVULmR1bXAodHJlZSk7IHN5cy5zdGRvdXQud3JpdGUoInRhaWwiKQogICAgPGRvYz48dGFibGU+PHRib2R5IC8+PC90YWJsZT48L2RvYz4KICAgIHRhaWwKCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQQAAAAYnVnX3htbHRvb2xraXRYMfkFAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzOAMAAAoKICAgIG5vbi1hc2NpaSBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgbmFtZXMgZG9lc24ndCB3b3JrCgogICAgPj4+IHRyZWUgPSBF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AE4oAQAAAFJcAAAAKAIAAAB0BAAAAHNlbGZ0AQAAAHgoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0BAAAAHJlYWQ6BgAAcwIAAAAAASgDAAAAdAgAAABfX25hbWVfX3QKAAAAX19tb2R1bGVfX1JvAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHlSbAAAADkGAABzAgAAAAYBYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHOGAAAACgogICAgSGFuZGxlIGNyYXNoIGluIHN0cmVhbSBzb3VyY2UuCiAgICA+Pj4gdHJlZSA9IEVULnBhcnNlKEV4Y2VwdGlvbkZpbGUoKSkKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIElPRXJyb3IKCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQMAAAAeG1sdG9vbGtpdDYwPQYAAHMAAAAAc0YBAAA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8IURPQ1RZUEUgcGF0ZW50LWFwcGxpY2F0aW9uLXB1YmxpY2F0aW9uIFNZU1RFTSAicGFwLXYxNS0yMDAxLTAxLTMxLmR0ZCIgW10+CjxwYXRlbnQtYXBwbGljYXRpb24tcHVibGljYXRpb24+CjxzdWJkb2MtYWJzdHJhY3Q+CjxwYXJhZ3JhcGggaWQ9IkEtMDAwMSIgbHZsPSIwIj5BIG5ldyBjdWx0aXZhciBvZiBCZWdvbmlhIHBsYW50IG5hbWVkICZsc3F1bztCQ1Q5ODAxQkVHJnJzcXVvOy48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ICAgID4+PiBwYXJzZXIuZmVlZCgiPGVsZW1lbnQ+c29tZSB0ZXh0PC9lbGVtZW50PiIpCiAgICA+Pj4gc3VtbWFyaXplKHBhcnNlci5jbG9zZSgpKQogICAgJ2VsZW1lbnQnCgogICAgVGVzdCBjdXN0b20gYnVpbGRlci4KICAgID4+PiBjbGFzcyBFY2hvVGFyZ2V0OgogICAgLi4uICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAuLi4gICAgICAgICByZXR1cm4gRVQuRWxlbWVudCgiZWxlbWVudCIpICMgc2ltdWxhdGUgcm9vdAogICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcihFY2hvVGFyZ2V0KCkpCiAgICA+Pj4gcGFyc2VyLmZlZWQoIjxlbGVtZW50PnNvbWUgdGV4dDwvZWxlbWVudD4iKQogICAgPj4+IHN1bW1hcml6ZShwYXJzZXIuY2xvc2UoKSkKICAgICdlbGVtZW50JwoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dBAAAABidWdfMjAwNzA4X2Nsb3NlgwYAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHMGAwAACgogICAgPj4+IGUgPSBFVC5FbGVtZW50KCJ7ZGVmYXVsdH1lbGVtIikKICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAie2RlZmF1bHR9ZWxlbSIpCiAgICA+Pj4gc2VyaWFsaXplKGUsIGRlZmF1bHRfbmFtZXNwYWNlPSJkZWZhdWx0IikgIyAxCiAgICAnPGVsZW0geG1sbnM9ImRlZmF1bHQiPjxlbGVtIC8+PC9lbGVtPicKCiAgICA+Pj4gZSA9IEVULkVsZW1lbnQoIntkZWZhdWx0fWVsZW0iKQogICAgPj4+IHMgPSBFVC5TdWJFbGVtZW50KGUsICJ7ZGVmYXVsdH1lbGVtIikKICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAie25vdC1kZWZhdWx0fWVsZW0iKQogICAgPj4+IHNlcmlhbGl6ZShlLCBkZWZhdWx0X25hbWVzcGFjZT0iZGVmYXVsdCIpICMgMgogICAgJzxlbGVtIHhtbG5zPSJkZWZhdWx0IiB4bWxuczpuczE9Im5vdC1kZWZhdWx0Ij48ZWxlbSAvPjxuczE6ZWxlbSAvPjwvZWxlbT4nCgogICAgPj4+IGUgPSBFVC5FbGVtZW50KCJ7ZGVmYXVsdH1lbGVtIikKICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAie2RlZmF1bHR9ZWxlbSIpCiAgICA+Pj4gcyA9IEVULlN1YkVsZW1lbnQoZSwgImVsZW0iKSAjIHVucHJlZml4ZWQgbmFtZQogICAgPj4+IHNlcmlhbGl6ZShlLCBkZWZhdWx0X25hbWVzcGFjZT0iZGVmYXVsdCIpICMgMwogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgVmFsdWVFcnJvcjogY2Fubm90IHVzZSBub24tcXVhbGlmaWVkIG5hbWVzIHdpdGggZGVmYXVsdF9uYW1lc3BhY2Ugb3B0aW9uCgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0HAAAAGJ1Z18yMDA3MDlfZGVmYXVsdF9uYW1lc3BhY2WXBgAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc1YCAAAKCiAgICA+Pj4gRVQudG9zdHJpbmcoRVQuRWxlbWVudCgie2h0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC99dGl0bGUiKSkKICAgICc8bnMwOnRpdGxlIHhtbG5zOm5zMD0iaHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0LyIgLz4nCiAgICA+Pj4gRVQucmVnaXN0ZXJfbmFtZXNwYWNlKCJmb28iLCAiaHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0LyIpCiAgICA+Pj4gRVQudG9zdHJpbmcoRVQuRWxlbWVudCgie2h0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC99dGl0bGUiKSkKICAgICc8Zm9vOnRpdGxlIHhtbG5zOmZvbz0iaHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0LyIgLz4nCgogICAgQW5kIHRoZSBEdWJsaW4gQ29yZSBuYW1lc3BhY2UgaXMgaW4gdGhlIGRlZmF1bHQgbGlzdDoKCiAgICA+Pj4gRVQudG9zdHJpbmcoRVQuRWxlbWVudCgie2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvfXRpdGxlIikpCiAgICAnPGRjOnRpdGxlIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgLz4nCgogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0HQAAAGJ1Z18yMDA3MDlfcmVnaXN0ZXJfbmFtZXNwYWNlrgYAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHM3AQAACgogICAgTm90IHN1cmUgaWYgdGhpcyBjYW4gYmUgZml4ZWQsIHJlYWxseSAoc2luY2UgdGhlIHNlcmlhbGl6ZXIgbmVlZHMKICAgIEVULkNvbW1lbnQsIG5vdCBjRVQuY29tbWVudCkuCgogICAgPj4+IGEgPSBFVC5FbGVtZW50KCdhJykKICAgID4+PiBhLmFwcGVuZChFVC5Db21tZW50KCdmb28nKSkKICAgID4+PiBhWzBdLnRhZyA9PSBFVC5Db21tZW50CiAgICBUcnVlCgogICAgPj4+IGEgPSBFVC5FbGVtZW50KCdhJykKICAgID4+PiBhLmFwcGVuZChFVC5QSSgnZm9vJykpCiAgICA+Pj4gYVswXS50YWcgPT0gRVQuUEkKICAgIFRydWUKCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQaAAAAYnVnXzIwMDcwOV9lbGVtZW50X2NvbW1lbnS+BgAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAcxMBAAAKCiAgICA+Pj4gYSA9IEVULkVsZW1lbnQoJ2EnKQogICAgPj4+IGIgPSBFVC5TdWJFbGVtZW50KGEsICdiJykKICAgID4+PiBjID0gRVQuU3ViRWxlbWVudChhLCAnYycpCiAgICA+Pj4gZCA9IEVULkVsZW1lbnQoJ2QnKQogICAgPj4+IGEuaW5zZXJ0KDAsIGQpCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoYSkKICAgIFsnZCcsICdiJywgJ2MnXQogICAgPj4+IGEuaW5zZXJ0KC0xLCBkKQogICAgPj4+IHN1bW1hcml6ZV9saXN0KGEpCiAgICBbJ2QnLCAnYicsICdkJywgJ2MnXQoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dBkAAABidWdfMjAwNzA5X2VsZW1lbnRfaW5zZXJ00AYAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHPHAAAACgogICAgPj4+IGEgPSBFVC5FbGVtZW50KCdhJykKICAgID4+PiBiID0gRVQuU3ViRWxlbWVudChhLCAnYicpCiAgICA+Pj4gY29tbWVudF9iID0gRVQuQ29tbWVudCgiVEVTVC1iIikKICAgID4+PiBiLmFwcGVuZChjb21tZW50X2IpCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoYS5pdGVyKEVULkNvbW1lbnQpKQogICAgWyc8Q29tbWVudD4nXQoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dBcAAABidWdfMjAwNzA5X2l0ZXJfY29tbWVudOAGAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzugAAAAoKICAgID4+PiBib2IgPSBFVC5UcmVlQnVpbGRlcigpCiAgICA+Pj4gZSA9IGJvYi5kYXRhKCJkYXRhIikKICAgID4+PiBlID0gYm9iLnN0YXJ0KCJ0YWciLCB7fSkKICAgID4+PiBlID0gYm9iLmVuZCgidGFnIikKICAgID4+PiBlID0gYm9iLmNsb3NlKCkKICAgID4+PiBzZXJpYWxpemUoZSkKICAgICc8dGFnIC8+JwoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAsAAABidWdfMTUzNDYzMO8GAABzAAAAAGMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzeAEAAAoKICAgID4+PiBlID0gRVQuWE1MKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCc/Pjxib2R5PnRceGMzXHhhM2c8L2JvZHk+IikKICAgID4+PiBFVC50b3N0cmluZyhlLCAnYXNjaWknKQogICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2FzY2lpJz8+XG48Ym9keT50JiMyMjc7ZzwvYm9keT4iCiAgICA+Pj4gZSA9IEVULlhNTCgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pjxib2R5PnRceGUzZzwvYm9keT4iKQogICAgPj4+IEVULnRvc3RyaW5nKGUsICdhc2NpaScpCiAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nYXNjaWknPz5cbjxib2R5PnQmIzIyNztnPC9ib2R5PiIKCiAgICBOKAAAAAAoAAAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQPAAAAY2hlY2tfaXNzdWU2MjMz/AYAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHPTAAAACgogICAgPj4+IGUgPSBFVC5YTUwoJzxwcmVmaXg6bG9jYWxuYW1lIHhtbG5zOnByZWZpeD0iJHtzdHVmZn0iLz4nKQogICAgPj4+IGUudGFnCiAgICAneyR7c3R1ZmZ9fWxvY2FsbmFtZScKICAgID4+PiB0ID0gRVQuRWxlbWVudFRyZWUoZSkKICAgID4+PiBFVC50b3N0cmluZyhlKQogICAgJzxuczA6bG9jYWxuYW1lIHhtbG5zOm5zMD0iJHtzdHVmZn0iIC8+JwoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dA8AAABjaGVja19pc3N1ZTMxNTEIBwAAcwAAAABjAAAAAAAAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc9oAAAAKCiAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPGJvZHk+PHRhZy8+PC9ib2R5PiIpCiAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbSkKICAgIFsndGFnJ10KICAgID4+PiBuZXdlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCiAgICA+Pj4gZWxlbVs6XSA9IG5ld2VsZW1bOl0KICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtKQogICAgWyd0YWcnLCAndGFnJywgJ3NlY3Rpb24nXQoKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dA8AAABjaGVja19pc3N1ZTY1NjUUBwAAcwAAAABjAQAAAAEAAAABAAAAQwAAAHMEAAAAZAEAUygCAAAAc+YDAAAKCiAgICA+Pj4gZW1wdHlfZWxlbXMgPSBbJ0FSRUEnLCAnQkFTRScsICdCQVNFRk9OVCcsICdCUicsICdDT0wnLCAnRlJBTUUnLCAnSFInLAogICAgLi4uICAgICAgICAgICAgICAgICdJTUcnLCAnSU5QVVQnLCAnSVNJTkRFWCcsICdMSU5LJywgJ01FVEEnLCAnUEFSQU0nXQogICAgPj4+IGVsZW1zID0gJycuam9pbignPCVzIC8+JyAlIGVsZW0gZm9yIGVsZW0gaW4gZW1wdHlfZWxlbXMpCiAgICA+Pj4gc2VyaWFsaXplKEVULlhNTCgnPGh0bWw+JXM8L2h0bWw+JyAlIGVsZW1zKSwgbWV0aG9kPSdodG1sJykKICAgICc8aHRtbD48QVJFQT48QkFTRT48QkFTRUZPTlQ+PEJSPjxDT0w+PEZSQU1FPjxIUj48SU1HPjxJTlBVVD48SVNJTkRFWD48TElOSz48TUVUQT48UEFSQU0+PC9odG1sPicKICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCc8aHRtbD4lczwvaHRtbD4nICUgZWxlbXMubG93ZXIoKSksIG1ldGhvZD0naHRtbCcpCiAgICAnPGh0bWw+PGFyZWE+PGJhc2U+PGJhc2Vmb250Pjxicj48Y29sPjxmcmFtZT48aHI+PGltZz48aW5wdXQ+PGlzaW5kZXg+PGxpbms+PG1ldGE+PHBhcmFtPjwvaHRtbD4nCiAgICA+Pj4gZWxlbXMgPSAnJy5qb2luKCc8JXM+PC8lcz4nICUgKGVsZW0sIGVsZW0pIGZvciBlbGVtIGluIGVtcHR5X2VsZW1zKQogICAgPj4+IHNlcmlhbGl6ZShFVC5YTUwoJzxodG1sPiVzPC9odG1sPicgJSBlbGVtcyksIG1ldGhvZD0naHRtbCcpCiAgICAnPGh0bWw+PEFSRUE+PEJBU0U+PEJBU0VGT05UPjxCUj48Q09MPjxGUkFNRT48SFI+PElNRz48SU5QVVQ+PElTSU5ERVg+PExJTks+PE1FVEE+PFBBUkFNPjwvaHRtbD4nCiAgICA+Pj4gc2VyaWFsaXplKEVULlhNTCgnPGh0bWw+JXM8L2h0bWw+JyAlIGVsZW1zLmxvd2VyKCkpLCBtZXRob2Q9J2h0bWwnKQogICAgJzxodG1sPjxhcmVhPjxiYXNlPjxiYXNlZm9udD48YnI+PGNvbD48ZnJhbWU+PGhyPjxpbWc+PGlucHV0Pjxpc2luZGV4PjxsaW5rPjxtZXRhPjxwYXJhbT48L2h0bWw+JwoKICAgIE4oAAAAACgBAAAAUm0AAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHl0JAAAAGNoZWNrX2h0bWxfZW1wdHlfZWxlbXNfc2VyaWFsaXphdGlvbiEHAABzAAAAAHQMAAAAQ2xlYW5Db250ZXh0YwAAAAAAAAAAAgAAAEIAAABzMgAAAGUAAFoBAGQAAFoCAGQEAFoEAGUFAGQBAIQBAFoGAGQCAIQAAFoHAGQDAIQAAFoIAFJTKAUAAABzMQAAAFByb3ZpZGUgZGVmYXVsdCBuYW1lc3BhY2UgbWFwcGluZyBhbmQgcGF0aCBjYWNoZS5jAgAAAAMAAAAFAAAAQwAAAHNhAAAAdAAAagEAagIAZAEAawUAchsAdAMAfQEAbgAAZAIAdAQAZgIAZAMAdAUAZgIAZAMAdAYAZgIAZAQAdAUAZgIAZgQAfQIAdAcAaggAZAUAfAEAfAIAjAABfAAAXwkAZAAAUygGAAAATmkCAAAAc4kAAABUaGlzIHNlYXJjaCBpcyBicm9rZW4gaW4gMS4zIGFuZCBlYXJsaWVyLCBhbmQgd2lsbCBiZSBmaXhlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiAgSWYgeW91IHJlbHkgb24gdGhlIGN1cnJlbnQgYmVoYXZpb3VyLCBjaGFuZ2UgaXQgdG8gJy4rJ3NAAAAAVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gIFVzZSAuKyBpbnN0ZWFkLnNbAAAAVGhpcyBtZXRob2Qgb2YgWE1MUGFyc2VyIGlzIGRlcHJlY2F0ZWQuICBEZWZpbmUgZG9jdHlwZS4uIG1ldGhvZCBvbiB0aGUgVHJlZUJ1aWxkZXIgdGFyZ2V0LnQFAAAAcXVpZXQoCgAAAFJKAAAAdAUAAABmbGFnc3QIAAAAb3B0aW1pemV0BAAAAFRydWV0DQAAAEZ1dHVyZVdhcm5pbmd0EgAAAERlcHJlY2F0aW9uV2FybmluZ3QZAAAAUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZ1IAAAAAdA4AAABjaGVja193YXJuaW5nc3QNAAAAY2hlY2t3YXJuaW5ncygDAAAAUm0AAABSjQAAAHQMAAAAZGVwcmVjYXRpb25zKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAgAAABfX2luaXRfXzwHAABzGAAAAAABEgMJAwMCBgIDAQYBAwEGAgMBDAEJAWMBAAAAAgAAAAIAAABDAAAAc2MAAABkAQBkAgBsAABtAQB9AQABfAEAagIAfAAAXwMAfAEAagQAagUAfAAAXwYAfAAAagMAagcAgwAAfAEAXwIAfAAAagYAagcAgwAAfAEAagQAXwUAfAAAaggAagkAgwAAAWQAAFMoAwAAAE5p/////ygBAAAAUgIAAAAoCgAAAFJSAAAAUgIAAAB0DgAAAF9uYW1lc3BhY2VfbWFwdAYAAABfbnNtYXBSUQAAAHQGAAAAX2NhY2hldAsAAABfcGF0aF9jYWNoZVI6AAAAUpUAAAB0CQAAAF9fZW50ZXJfXygCAAAAUm0AAABSAgAAACgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weVKcAAAAUQcAAHMMAAAAAAEQAQwBDwISAhUBYwEAAAADAAAAAgAAAEcAAABzPwAAAGQBAGQCAGwAAG0BAH0CAAF8AABqAgB8AgBfAwB8AABqBAB8AgBqBQBfBgB8AABqBwBqCAB8AQCMAAABZAAAUygDAAAATmn/////KAEAAABSAgAAACgJAAAAUlIAAABSAgAAAFKZAAAAUpgAAABSmwAAAFJRAAAAUpoAAABSlQAAAHQIAAAAX19leGl0X18oAwAAAFJtAAAAdAQAAABhcmdzUgIAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHlSnQAAAFsHAABzCAAAAAABEAIMAQ8BTigJAAAAUnAAAABScQAAAHQHAAAAX19kb2NfX1IvAAAAUpUAAAB0BQAAAEZhbHNlUpcAAABSnAAAAFKdAAAAKAAAAAAoAAAAACgAAAAAc1oAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWUucHlSjAAAADgHAABzCgAAAAYBBgEGAgwVCQpzFQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZWMBAAAAAwAAAAgAAABDAAAAc0oAAABkAQBkAgBsAABtAQB9AQABfAAAZAMAawIAfQIAdAIAZAQAfAIADIMAAY8YAAF0AwBqBAB8AQBkBQB0BQCDAQEBV2QAAFFYZAAAUygGAAAATmn/////KAEAAAB0DgAAAHRlc3RfeG1sX2V0cmVlcxUAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWVSjQAAAHQJAAAAdmVyYm9zaXR5KAYAAAB0BAAAAHRlc3RSoQAAAFKMAAAAUgAAAAB0CwAAAHJ1bl9kb2N0ZXN0UpAAAAAoAwAAAHQLAAAAbW9kdWxlX25hbWVSoQAAAHQNAAAAdXNlX3B5X21vZHVsZSgAAAAAKAAAAABzWgAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weXQJAAAAdGVzdF9tYWluYwcAAHMKAAAAAAEQAgwGEQEZA3QIAAAAX19tYWluX18oAAAAAChbAAAAUkoAAAB0AwAAAGNnaVKjAAAAUgAAAAB0EQAAAHRlc3QudGVzdF9zdXBwb3J0UgEAAABSUgAAAFICAAAAUgsAAAB0DgAAAFNJTVBMRV9YTUxGSUxFdBEAAABTSU1QTEVfTlNfWE1MRklMRXQKAAAAU0FNUExFX1hNTHQOAAAAU0FNUExFX1NFQ1RJT050DQAAAFNBTVBMRV9YTUxfTlNSBQAAAFIJAAAAUpAAAABSFAAAAFIXAAAAUhkAAABSHgAAAFIlAAAAUiwAAABSMAAAAFIyAAAAUjMAAABSNAAAAFI1AAAAUjYAAABSNwAAAFI4AAAAUjkAAABSOgAAAFItAAAAUjsAAABSPAAAAFI9AAAAUj4AAABSPwAAAFJAAAAAUkEAAABSQgAAAFJFAAAAUkQAAABSRgAAAFJHAAAAdAoAAABFTlRJVFlfWE1MUkgAAABSTQAAAFJOAAAAUk8AAABSUAAAAFJTAAAAUlgAAABSWgAAAHQGAAAAZm9ybWF0dAYAAABlc2NhcGVSLwAAAFJhAAAAUmIAAABSYwAAAHQMAAAAWElOQ0xVREVfQkFEUmQAAABSZQAAAFJmAAAAUmcAAABSaAAAAFJpAAAAUmoAAABSawAAAFJsAAAAUnIAAABSdgAAAFJ7AAAAUn8AAABSgAAAAFKBAAAAUoIAAABSgwAAAFKEAAAAUoUAAABShgAAAFKHAAAAUogAAABSiQAAAFKKAAAAUosAAAB0BgAAAG9iamVjdFKMAAAAUqcAAABScAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5dAgAAAA8bW9kdWxlPg4AAABzugAAAAwBDAIQARACEAISARIKBgoGCgYDCQkJBAwLCQUJAwkHCQkJCgkYCTMJOAkNCSMJegkSCQoJEgkSCToJHwk3CRoJYAkWCTYJLwkKCQsJOwkSCSQGAgkeCRQJJAlJCQsJNgkUBggKCQoICgIKCAoICgcKDQoIHwIPCgk/CRQGCAoHCgIJJwkgCQ4JDQkMCR4JCwkLEwQJEAYDCRAJFAkPCRQJFwkQCRIJEAkPCQ0JDAkMCQ0JFxYrDA8MAQ==