if%20__import__(%22os%22).path.isdir(%22model_library%2Fcompetitive_pricing%22)%3A%0A%20%20%20%20__import__(%22os%22).chdir(%22model_library%2Fcompetitive_pricing%22)
%23%20assets%20embedded%20for%20the%20browser%3A%20only%20the%20wheel%20reaches%20Pyodide%2C%20never%20the%20page's%0A%23%20directory%2C%20and%20the%20worker%20has%20no%20base%20URL%20to%20fetch%20it%20from.%0Aif%20__import__(%22sys%22).platform%20%3D%3D%20%22emscripten%22%3A%0A%20%20%20%20_dateien%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%22scenarios%2Fcompetitive_pricing.json%22%3A%20%22ewogICAgInNtQ29tcGV0aXRpdmVQcmljaW5nIjp7CiAgICAgICAgInNvdXJjZSI6InNpbXVsYXRpb25fbW9kZWxzL2NvbXBldGl0aXZlX3ByaWNpbmcuc3RteCIsCiAgICAgICAgIm1vZGVsIjoic2ltdWxhdGlvbl9tb2RlbHMvY29tcGV0aXRpdmVfcHJpY2luZyIsCiAgICAgICAgImJhc2VfY29uc3RhbnRzIjp7CiAgICAgICAgICAgICAgIm1hcmtldFNob2NrT24iOjAsCiAgICAgICAgICAgICAgInNpemVPZlNob2NrIjo1MAogICAgICAgIH0sCiAgICAgICAgImJhc2VfcG9pbnRzIjp7CiAgICAgICAgICAgICJlZmZlY3RPZlByb2ZpdGFiaWxpdHlPbkNhcGFjaXR5VXRpbGl6YXRpb24iOgogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBbMC4wLCAwLjMyNF0sCiAgICAgICAgICAgICAgICBbMC4xNjY2NjY2NjY2NjY2NjY2NiwgMC4zM10sCiAgICAgICAgICAgICAgICBbMC4zMzMzMzMzMzMzMzMzMzMzLCAwLjM3Ml0sCiAgICAgICAgICAgICAgICBbMC41LCAwLjM5NF0sCiAgICAgICAgICAgICAgICBbMC42NjY2NjY2NjY2NjY2NjY2LCAwLjQxXSwKICAgICAgICAgICAgICAgIFswLjgzMzMzMzMzMzMzMzMzMzQsIDAuNDJdLAogICAgICAgICAgICAgICAgWzEuMCwgMC41XSwKICAgICAgICAgICAgICAgIFsxLjE2NjY2NjY2NjY2NjY2NjcsIDAuNzQ1XSwKICAgICAgICAgICAgICAgIFsxLjMzMzMzMzMzMzMzMzMzMzMsIDAuODAwNzVdLAogICAgICAgICAgICAgICAgWzEuNSwgMC44NTY1XSwKICAgICAgICAgICAgICAgIFsxLjY2NjY2NjY2NjY2NjY2NjcsIDAuOTEyMjVdLAogICAgICAgICAgICAgICAgWzEuODMzMzMzMzMzMzMzMzMzMywgMC45NjhdLAogICAgICAgICAgICAgICAgWzIuMCwgMC45NjhdCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJlZmZlY3RPZlJlbGF0aXZlVmFsdWVPbkRlbWFuZCIgOgogICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICBbMC4wLCAwLjE3XSwKICAgICAgICAgICAgICAgICAgIFswLjE2NjY2NjY2NjY2NjY2NjY2LCAwLjE5MV0sCiAgICAgICAgICAgICAgICAgICBbMC4zMzMzMzMzMzMzMzMzMzMzLCAwLjIxM10sCiAgICAgICAgICAgICAgICAgICBbMC41LCAwLjI3N10sCiAgICAgICAgICAgICAgICAgICBbMC42NjY2NjY2NjY2NjY2NjY2LCAwLjM1MV0sCiAgICAgICAgICAgICAgICAgICBbMC44MzMzMzMzMzMzMzMzMzM0LCAwLjQ3OV0sCiAgICAgICAgICAgICAgICAgICBbMS4wLCAxLjBdLAogICAgICAgICAgICAgICAgICAgWzEuMTY2NjY2NjY2NjY2NjY2NywgMS4zNjJdLAogICAgICAgICAgICAgICAgICAgWzEuMzMzMzMzMzMzMzMzMzMzMywgMS40NzldLAogICAgICAgICAgICAgICAgICAgWzEuNSwgMS41NzRdLAogICAgICAgICAgICAgICAgICAgWzEuNjY2NjY2NjY2NjY2NjY2NywgMS42MzhdLAogICAgICAgICAgICAgICAgICAgWzEuODMzMzMzMzMzMzMzMzMzMywgMS42Nl0sCiAgICAgICAgICAgICAgICAgICBbMi4wLCAxLjY2XQogICAgICAgICAgICAgICBdIAogICAgICAgICAgICAsCiAgICAgICAgICAgICAiZWZmZWN0T2ZJbnZlbnRvcnlDb3ZlcmFnZU9uUHJpY2UiIDogIAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICBbMC4wLCAxLjQwNF0sCiAgICAgICAgICAgICAgICAgICAgICBbMC4xNjY2NjY2NjY2NjY2NjY2NiwgMS40MTVdLAogICAgICAgICAgICAgICAgICAgICAgWzAuMzMzMzMzMzMzMzMzMzMzMywgMS40MDRdLAogICAgICAgICAgICAgICAgICAgICAgWzAuNSwgMS4zNzJdLAogICAgICAgICAgICAgICAgICAgICAgWzAuNjY2NjY2NjY2NjY2NjY2NiwgMS4zNTFdLAogICAgICAgICAgICAgICAgICAgICAgWzAuODMzMzMzMzMzMzMzMzMzNCwgMS4yNzddLAogICAgICAgICAgICAgICAgICAgICAgWzEuMCwgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgIFsxLjE2NjY2NjY2NjY2NjY2NjcsIDAuNzg3XSwKICAgICAgICAgICAgICAgICAgICAgIFsxLjMzMzMzMzMzMzMzMzMzMzMsIDAuNTVdLAogICAgICAgICAgICAgICAgICAgICAgWzEuNSwgMC40XSwKICAgICAgICAgICAgICAgICAgICAgIFsxLjY2NjY2NjY2NjY2NjY2NjcsIDAuMzRdLAogICAgICAgICAgICAgICAgICAgICAgWzEuODMzMzMzMzMzMzMzMzMzMywgMC4yOThdLAogICAgICAgICAgICAgICAgICAgICAgWzIuMCwgMC4yOThdCiAgICAgICAgICAgICAgICAgIF0gCiAgICAgICAgfSwKICAgICAgICAic2NlbmFyaW9zIjp7CiAgICAgICAgICAgICJiYXNlIjp7CiAgICAgICAgICB9LAogICAgICAgICAgICAibWFya2V0U2hvY2siOnsKICAgICAgICAgICAgICAgICJjb25zdGFudHMiOnsKICAgICAgICAgICAgICAgICAgICAibWFya2V0U2hvY2tPbiI6MQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICJhdmFpbGFiaWxpdHlMb29wIjp7CiAgICAgICAgICAgICAgICJjb25zdGFudHMiOnsKICAgICAgICAgICAgICAgICAgICAibWFya2V0U2hvY2tPbiI6MQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgInBvaW50cyI6ewogICAgICAgICAgICAgICAgICAgICAgImVmZmVjdE9mUHJvZml0YWJpbGl0eU9uQ2FwYWNpdHlVdGlsaXphdGlvbiIgOiAKICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLjAsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLjE2NjY2NjY2NjY2NjY2NjY2LCAwLjVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbMC4zMzMzMzMzMzMzMzMzMzMzLCAwLjVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbMC41LCAwLjVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbMC42NjY2NjY2NjY2NjY2NjY2LCAwLjVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbMC44MzMzMzMzMzMzMzMzMzM0LCAwLjVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbMS4wLCAwLjVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbMS4xNjY2NjY2NjY2NjY2NjY3LCAwLjVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbMS4zMzMzMzMzMzMzMzMzMzMzLCAwLjVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbMS41LCAwLjVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbMS42NjY2NjY2NjY2NjY2NjY3LCAwLjVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbMS44MzMzMzMzMzMzMzMzMzMzLCAwLjVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbMi4wLCAwLjVdCiAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAiZWZmZWN0T2ZSZWxhdGl2ZVZhbHVlT25EZW1hbmQiIDoKICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgIFswLjAsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIFswLjE2NjY2NjY2NjY2NjY2NjY2LDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIFswLjMzMzMzMzMzMzMzMzMzMzMsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIFswLjUsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIFswLjY2NjY2NjY2NjY2NjY2NjYsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIFswLjgzMzMzMzMzMzMzMzMzMzQsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIFsxLjAsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIFsxLjE2NjY2NjY2NjY2NjY2NjcsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIFsxLjMzMzMzMzMzMzMzMzMzMzMsMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgWzEuNSwgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgWzEuNjY2NjY2NjY2NjY2NjY2NywxLjBdLAogICAgICAgICAgICAgICAgICAgICAgICBbMS44MzMzMzMzMzMzMzMzMzMzLCAxLjBdLAogICAgICAgICAgICAgICAgICAgICAgICBbMi4wLCAxLjBdCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgImVmZmVjdE9mSW52ZW50b3J5Q292ZXJhZ2VPblByaWNlIiA6ICAKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAuMCwgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLjE2NjY2NjY2NjY2NjY2NjY2LCAxLjBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAuMzMzMzMzMzMzMzMzMzMzMywgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLjUsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMC42NjY2NjY2NjY2NjY2NjY2LCAxLjBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAuODMzMzMzMzMzMzMzMzMzNCwgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLjAsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMS4xNjY2NjY2NjY2NjY2NjY3LCAxLjBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEuMzMzMzMzMzMzMzMzMzMzMywgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLjUsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMS42NjY2NjY2NjY2NjY2NjY3LCAxLjBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEuODMzMzMzMzMzMzMzMzMzMywgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsyLjAsIDEuMF0KICAgICAgICAgICAgICAgICAgICAgICAgXSAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICB9LAogICAgICAgICAgICJjYXBhY2l0eVV0aWxpemF0aW9uTG9vcCI6ewogICAgICAgICAgICAgICAiY29uc3RhbnRzIjp7CiAgICAgICAgICAgICAgICAgICAgIm1hcmtldFNob2NrT24iOjEKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICJwb2ludHMiOnsKICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICJlZmZlY3RPZlJlbGF0aXZlVmFsdWVPbkRlbWFuZCIgOgogICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgWzAuMCwgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgWzAuMTY2NjY2NjY2NjY2NjY2NjYsMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgWzAuMzMzMzMzMzMzMzMzMzMzMywgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgWzAuNSwgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgWzAuNjY2NjY2NjY2NjY2NjY2NiwgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgWzAuODMzMzMzMzMzMzMzMzMzNCwgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgWzEuMCwgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgWzEuMTY2NjY2NjY2NjY2NjY2NywgMS4wXSwKICAgICAgICAgICAgICAgICAgICAgICAgWzEuMzMzMzMzMzMzMzMzMzMzMywxLjBdLAogICAgICAgICAgICAgICAgICAgICAgICBbMS41LCAxLjBdLAogICAgICAgICAgICAgICAgICAgICAgICBbMS42NjY2NjY2NjY2NjY2NjY3LDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIFsxLjgzMzMzMzMzMzMzMzMzMzMsIDEuMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIFsyLjAsIDEuMF0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgIAogICAgICAgICAgIH0KICAgICAgICAgICB9LAogICAgICAgICAgICAgInN1YnN0aXR1dGlvbkxvb3AiOnsKICAgICAgICAgICAgICAgImNvbnN0YW50cyI6ewogICAgICAgICAgICAgICAgICAgICJtYXJrZXRTaG9ja09uIjoxCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAicG9pbnRzIjp7CiAgICAgICAgICAgICAgICAgICAgICAiZWZmZWN0T2ZQcm9maXRhYmlsaXR5T25DYXBhY2l0eVV0aWxpemF0aW9uIiA6IAogICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAuMCwgMC41XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAuMTY2NjY2NjY2NjY2NjY2NjYsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLjMzMzMzMzMzMzMzMzMzMzMsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLjUsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLjY2NjY2NjY2NjY2NjY2NjYsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLjgzMzMzMzMzMzMzMzMzMzQsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLjAsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLjE2NjY2NjY2NjY2NjY2NjcsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLjMzMzMzMzMzMzMzMzMzMzMsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLjUsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLjY2NjY2NjY2NjY2NjY2NjcsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLjgzMzMzMzMzMzMzMzMzMzMsIDAuNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsyLjAsIDAuNV0KICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAKICAgIH0KfQp9Cg%3D%3D%22%2C%0A%20%20%20%20%20%20%20%20%22simulation_models%2Fcompetitive_pricing.py%22%3A%20%22CiMgICAgICBfICAgICAgICAgICAgICAgICAgIF8gXwojICBfX19fX3wgfF9fIF9fXyBfIF9fICBfIF9fKF98IHxfX18gXyBfCiMgKF8tLyBfYCAvIF8vIF8gfCAnICBcfCAnXyB8IHwgLyAtX3wgJ198CiMgL19fXF9fLF9cX19cX19ffF98X3xffCAuX198X3xfXF9fX3xffAojICAgICAgICAgICAgICAgICAgICAgIHxffAojIENvcHlyaWdodCAoYykgMjAxMy0yMDIwIHRyYW5zZW50aXMgbWFuYWdlbWVudCAmIGNvbnN1bHRpbmcuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKICAgIAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5pbnRlcnBvbGF0ZSBpbXBvcnQgaW50ZXJwMWQKZnJvbSBzY2lweS5zcGVjaWFsIGltcG9ydCBnYW1tYWxuCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IG5vcm0KaW1wb3J0IG1hdGgsIHN0YXRpc3RpY3MsIHJhbmRvbSwgbG9nZ2luZwpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQppbXBvcnQgcmUKaW1wb3J0IGl0ZXJ0b29scwpmcm9tIGNvcHkgaW1wb3J0IGNvcHksIGRlZXBjb3B5CgoKCmRlZiBjYXJ0ZXNpYW5fcHJvZHVjdChsaXN0b2ZsaXN0cyk6CiAgICAiIiIKICAgIEhlbHBlciBmb3IgQ2FydGVzaWFuIHByb2R1Y3QKICAgIDpwYXJhbSBsaXN0b2ZsaXN0czoKICAgIDpyZXR1cm46CiAgICAiIiIKICAgIGlmIGxlbihsaXN0b2ZsaXN0cykgPT0gMToKICAgICAgICByZXR1cm4gbGlzdG9mbGlzdHNbMF0KICAgIHJlcyA9IGxpc3QoaXRlcnRvb2xzLnByb2R1Y3QoKmxpc3RvZmxpc3RzKSkKCiAgICBpZiBsZW4ocmVzKSA9PSAxOgogICAgICAgIHJldHVybiByZXNbMF0KCiAgICByZXR1cm4gcmVzCgpkZWYgTEVSUCh4LHBvaW50cyk6CiAgICAiIiIKICAgIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBzZXQgb2YgcG9pbnRzCiAgICA6cGFyYW0geDogeCB0byBvYnRhaW4geSBmb3IKICAgIDpwYXJhbSBwb2ludHM6IExpc3Qgb2YgdHVwbGVzIGNvbnRhaW5pbmcgdGhlIGdyYXBoaWNhbCBmdW5jdGlvbidzIHBvaW50cyBbKHgseSksKHgseSkgLi4uIF0KICAgIDpyZXR1cm46IHkgdmFsdWUgZm9yIHggb2J0YWluZWQgdXNpbmcgbGluZWFyIGludGVycG9sYXRpb24KICAgICIiIgogICAgeF92YWxzID0gbnAuYXJyYXkoWyB4WzBdIGZvciB4IGluIHBvaW50c10pCiAgICB5X3ZhbHMgPSBucC5hcnJheShbeFsxXSBmb3IgeCBpbiBwb2ludHNdKQoKICAgIGlmIHg8PSB4X3ZhbHNbMF06CiAgICAgICAgcmV0dXJuIHlfdmFsc1swXQoKICAgIGlmIHggPj0geF92YWxzW2xlbih4X3ZhbHMpLTFdOgogICAgICAgIHJldHVybiB5X3ZhbHNbbGVuKHhfdmFscyktMV0KCiAgICBmID0gaW50ZXJwMWQoeF92YWxzLCB5X3ZhbHMpCiAgICByZXR1cm4gZmxvYXQoZih4KSkKCmNsYXNzIHNpbXVsYXRpb25fbW9kZWwoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAjIFNpbXVsYXRpb24gU2V0dGluZ3MKICAgICAgICBzZWxmLmR0ID0gMC4yNQogICAgICAgIHNlbGYuc3RhcnR0aW1lID0gMS4wCiAgICAgICAgc2VsZi5zdG9wdGltZSA9IDYxLjAKICAgICAgICBzZWxmLnVuaXRzID0gJ21vbnRocycKICAgICAgICBzZWxmLm1ldGhvZCA9ICdFdWxlcicKICAgICAgICBzZWxmLmVxdWF0aW9ucyA9IHsKCiAgICAgICAgIyBTdG9ja3MKICAgICAgICAKICAgIAogICAgICAgICdleHBlY3RlZFByaWNlJyAgICAgICAgICA6IGxhbWJkYSB0OiAoICgzLjApIGlmICggdCAgPD0gIHNlbGYuc3RhcnR0aW1lICkgZWxzZSAoc2VsZi5tZW1vaXplKCdleHBlY3RlZFByaWNlJyx0LXNlbGYuZHQpICsgc2VsZi5kdCAqICggc2VsZi5tZW1vaXplKCdjaGFuZ2VJbkV4cGVjdGVkUHJpY2UnLHQtc2VsZi5kdCkgKSkgKSwKICAgICAgICAnZXhwZWN0ZWRQcm9maXRhYmlsaXR5JyAgICAgICAgICA6IGxhbWJkYSB0OiAoICgxMDAuMCkgaWYgKCB0ICA8PSAgc2VsZi5zdGFydHRpbWUgKSBlbHNlIChzZWxmLm1lbW9pemUoJ2V4cGVjdGVkUHJvZml0YWJpbGl0eScsdC1zZWxmLmR0KSArIHNlbGYuZHQgKiAoIHNlbGYubWVtb2l6ZSgnY2hhbmdlSW5FeHBlY3RlZFByb2ZpdGFiaWxpdHknLHQtc2VsZi5kdCkgKSkgKSwKICAgICAgICAnaW52ZW50b3J5JyAgICAgICAgICA6IGxhbWJkYSB0OiAoICgzMDAuMCkgaWYgKCB0ICA8PSAgc2VsZi5zdGFydHRpbWUgKSBlbHNlIChzZWxmLm1lbW9pemUoJ2ludmVudG9yeScsdC1zZWxmLmR0KSArIHNlbGYuZHQgKiAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGUnLHQtc2VsZi5kdCkgLSAoIHNlbGYubWVtb2l6ZSgnY29uc3VtcHRpb25SYXRlJyx0LXNlbGYuZHQpICkgKSkgKSwKICAgICAgICAncGVyY2VpdmVkSW52ZW50b3J5Q292ZXJhZ2UnICAgICAgICAgIDogbGFtYmRhIHQ6ICggKDMuMCkgaWYgKCB0ICA8PSAgc2VsZi5zdGFydHRpbWUgKSBlbHNlIChzZWxmLm1lbW9pemUoJ3BlcmNlaXZlZEludmVudG9yeUNvdmVyYWdlJyx0LXNlbGYuZHQpICsgc2VsZi5kdCAqICggc2VsZi5tZW1vaXplKCdjaGFuZ2VJblBlcmNlaXZlZEludmVudG9yeUNvdmVyYWdlJyx0LXNlbGYuZHQpICkpICksCiAgICAgICAgJ3Byb2R1Y3Rpb24nICAgICAgICAgIDogbGFtYmRhIHQ6ICggKDMwMC4wKSBpZiAoIHQgIDw9ICBzZWxmLnN0YXJ0dGltZSApIGVsc2UgKHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvbicsdC1zZWxmLmR0KSArIHNlbGYuZHQgKiAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0UmF0ZScsdC1zZWxmLmR0KSAtICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZScsdC1zZWxmLmR0KSApICkpICksCiAgICAgICAgJ3Byb2R1Y3Rpb25DYXBhY2l0eScgICAgICAgICAgOiBsYW1iZGEgdDogKCAoMjAwLjApIGlmICggdCAgPD0gIHNlbGYuc3RhcnR0aW1lICkgZWxzZSAoc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uQ2FwYWNpdHknLHQtc2VsZi5kdCkgKyBzZWxmLmR0ICogMCkgKSwKICAgICAgICAKICAgIAogICAgICAgICMgRmxvd3MKICAgICAgICAnY2hhbmdlSW5FeHBlY3RlZFByaWNlJyAgICAgICAgICAgICA6IGxhbWJkYSB0OiAoIHNlbGYubWVtb2l6ZSgnaW5kaWNhdGVkUHJpY2UnLCB0KSAtIHNlbGYubWVtb2l6ZSgnZXhwZWN0ZWRQcmljZScsIHQpICkgLyBzZWxmLm1lbW9pemUoJ3ByaWNlQWRqdXN0bWVudFRpbWUnLCB0KSwKICAgICAgICAnY2hhbmdlSW5FeHBlY3RlZFByb2ZpdGFiaWxpdHknICAgICAgICAgICAgIDogbGFtYmRhIHQ6ICggc2VsZi5tZW1vaXplKCdwcm9maXQnLCB0KSAtIHNlbGYubWVtb2l6ZSgnZXhwZWN0ZWRQcm9maXRhYmlsaXR5JywgdCkgKSAvIHNlbGYubWVtb2l6ZSgncHJvZml0QWRqdXN0bWVudFRpbWUnLCB0KSwKICAgICAgICAnY2hhbmdlSW5QZXJjZWl2ZWRJbnZlbnRvcnlDb3ZlcmFnZScgICAgICAgICAgICAgOiBsYW1iZGEgdDogKCBzZWxmLm1lbW9pemUoJ2ludmVudG9yeUNvdmVyYWdlJywgdCkgLSBzZWxmLm1lbW9pemUoJ3BlcmNlaXZlZEludmVudG9yeUNvdmVyYWdlJywgdCkgKSAvIHNlbGYubWVtb2l6ZSgnaW52ZW50b3J5Q292ZXJhZ2VQZXJjZXB0aW9uVGltZScsIHQpLAogICAgICAgICdjb25zdW1wdGlvblJhdGUnICAgICAgICAgICAgIDogbGFtYmRhIHQ6IG1heChbMCAsIG1pbihbc2VsZi5tZW1vaXplKCdpbnZlbnRvcnknLCB0KSAsIHNlbGYubWVtb2l6ZSgnZGVtYW5kJywgdCldKV0pLAogICAgICAgICdwcm9kdWN0aW9uUmF0ZScgICAgICAgICAgICAgOiBsYW1iZGEgdDogbWF4KFswICwgbWluKFtzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb24nLCB0KSAsIHNlbGYuZGVsYXkoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0UmF0ZScsICggdCAtIChzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25UaW1lJywgdCkpICkpLHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblRpbWUnLCB0KSwxMDAuMCx0KV0pXSksCiAgICAgICAgJ3Byb2R1Y3Rpb25TdGFydFJhdGUnICAgICAgICAgICAgIDogbGFtYmRhIHQ6IG1heChbMCAsIHNlbGYubWVtb2l6ZSgnY2FwYWNpdHlVdGlsaXphdGlvbicsIHQpICogc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uQ2FwYWNpdHknLCB0KV0pLAogICAgICAgIAogICAgCiAgICAgICAgIyBjb252ZXJ0ZXJzCiAgICAgICAgJ2NhcGFjaXR5Q29zdCcgICAgICA6IGxhbWJkYSB0OiBzZWxmLm1lbW9pemUoJ3VuaXRDYXBhY2l0eUNvc3QnLCB0KSAqIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvbkNhcGFjaXR5JywgdCksCiAgICAgICAgJ2NhcGFjaXR5Q29zdFBlclVuaXQnICAgICAgOiBsYW1iZGEgdDogc2VsZi5tZW1vaXplKCdjYXBhY2l0eUNvc3QnLCB0KSAvIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGUnLCB0KSwKICAgICAgICAnY2FwYWNpdHlVdGlsaXphdGlvbicgICAgICA6IGxhbWJkYSB0OiBzZWxmLm1lbW9pemUoJ2VmZmVjdE9mUHJvZml0YWJpbGl0eU9uQ2FwYWNpdHlVdGlsaXphdGlvbicsIHQpLAogICAgICAgICdjb3N0JyAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgndmFyaWFibGVDb3N0JywgdCkgKyBzZWxmLm1lbW9pemUoJ2NhcGFjaXR5Q29zdCcsIHQpLAogICAgICAgICdkZW1hbmQnICAgICAgOiBsYW1iZGEgdDogc2VsZi5tZW1vaXplKCdlZmZlY3RPZlJlbGF0aXZlVmFsdWVPbkRlbWFuZCcsIHQpICogc2VsZi5tZW1vaXplKCdyZWZlcmVuY2VEZW1hbmQnLCB0KSwKICAgICAgICAnaW5kaWNhdGVkUHJpY2UnICAgICAgOiBsYW1iZGEgdDogbWF4KFtzZWxmLm1lbW9pemUoJ3ByaWNlJywgdCkgLCBzZWxmLm1lbW9pemUoJ21pbmltdW1QcmljZScsIHQpXSksCiAgICAgICAgJ2ludmVudG9yeUNvdmVyYWdlJyAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgnaW52ZW50b3J5JywgdCkgLyBzZWxmLm1lbW9pemUoJ2NvbnN1bXB0aW9uUmF0ZScsIHQpLAogICAgICAgICdpbnZlbnRvcnlDb3ZlcmFnZVBlcmNlcHRpb25UaW1lJyAgICAgIDogbGFtYmRhIHQ6IDMuMCwKICAgICAgICAnbWFya2V0U2hvY2tPbicgICAgICA6IGxhbWJkYSB0OiAwLjAsCiAgICAgICAgJ21pbmltdW1QcmljZScgICAgICA6IGxhbWJkYSB0OiBzZWxmLm1lbW9pemUoJ3VuaXRWYXJpYWJsZUNvc3QnLCB0KSArIHNlbGYubWVtb2l6ZSgnY2FwYWNpdHlDb3N0UGVyVW5pdCcsIHQpLAogICAgICAgICdub3JtYWxpemVkRXhwZWN0ZWRQcm9maXRhYmlsaXR5JyAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgnZXhwZWN0ZWRQcm9maXRhYmlsaXR5JywgdCkgLyBzZWxmLm1lbW9pemUoJ3JlZmVyZW5jZUV4cGVjdGVkUHJvZml0YWJpbGl0eScsIHQpLAogICAgICAgICdub3JtYWxpemVkUGVyY2VpZWRJbnZlbnRvcnlDb3ZlcmFnZScgICAgICA6IGxhbWJkYSB0OiBzZWxmLm1lbW9pemUoJ3BlcmNlaXZlZEludmVudG9yeUNvdmVyYWdlJywgdCkgLyBzZWxmLm1lbW9pemUoJ3JlZmVyZW5jZUludmVudG9yeUNvdmVyYWdlJywgdCksCiAgICAgICAgJ3ByaWNlJyAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgnZXhwZWN0ZWRQcmljZScsIHQpICogc2VsZi5tZW1vaXplKCdlZmZlY3RPZkludmVudG9yeUNvdmVyYWdlT25QcmljZScsIHQpLAogICAgICAgICdwcmljZUFkanVzdG1lbnRUaW1lJyAgICAgIDogbGFtYmRhIHQ6IDMuMCwKICAgICAgICAncHJpY2VPZlN1YnN0aXR1dGVzJyAgICAgIDogbGFtYmRhIHQ6IDMuMCwKICAgICAgICAncHJvZHVjdGlvblRpbWUnICAgICAgOiBsYW1iZGEgdDogMy4wLAogICAgICAgICdwcm9maXQnICAgICAgOiBsYW1iZGEgdDogc2VsZi5tZW1vaXplKCdyZXZlbnVlJywgdCkgLSBzZWxmLm1lbW9pemUoJ2Nvc3QnLCB0KSwKICAgICAgICAncHJvZml0QWRqdXN0bWVudFRpbWUnICAgICAgOiBsYW1iZGEgdDogMTIuMCwKICAgICAgICAncmVmZXJlbmNlRGVtYW5kJyAgICAgIDogbGFtYmRhIHQ6IDEwMC4wICsgc2VsZi5tZW1vaXplKCdtYXJrZXRTaG9ja09uJywgdCkgKiAoMCBpZiB0IDwgMTAuMCBlbHNlIHNlbGYubWVtb2l6ZSgnc2l6ZU9mU2hvY2snLCB0KSksCiAgICAgICAgJ3JlZmVyZW5jZUV4cGVjdGVkUHJvZml0YWJpbGl0eScgICAgICA6IGxhbWJkYSB0OiAxMDAuMCwKICAgICAgICAncmVmZXJlbmNlSW52ZW50b3J5Q292ZXJhZ2UnICAgICAgOiBsYW1iZGEgdDogMy4wLAogICAgICAgICdyZWxhdGl2ZVZhbHVlT2ZQcm9kdWN0JyAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgncHJpY2VPZlN1YnN0aXR1dGVzJywgdCkgLyBzZWxmLm1lbW9pemUoJ3ByaWNlJywgdCksCiAgICAgICAgJ3JldmVudWUnICAgICAgOiBsYW1iZGEgdDogc2VsZi5tZW1vaXplKCdjb25zdW1wdGlvblJhdGUnLCB0KSAqIHNlbGYubWVtb2l6ZSgncHJpY2UnLCB0KSwKICAgICAgICAnc2l6ZU9mU2hvY2snICAgICAgOiBsYW1iZGEgdDogNTAuMCwKICAgICAgICAndW5pdENhcGFjaXR5Q29zdCcgICAgICA6IGxhbWJkYSB0OiAwLjUsCiAgICAgICAgJ3VuaXRWYXJpYWJsZUNvc3QnICAgICAgOiBsYW1iZGEgdDogMS4wLAogICAgICAgICd2YXJpYWJsZUNvc3QnICAgICAgOiBsYW1iZGEgdDogc2VsZi5tZW1vaXplKCd1bml0VmFyaWFibGVDb3N0JywgdCkgKiBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlJywgdCksCiAgICAgICAgCiAgICAKICAgICAgICAjIGdmCiAgICAgICAgJ2VmZmVjdE9mSW52ZW50b3J5Q292ZXJhZ2VPblByaWNlJyA6IGxhbWJkYSB0OiBMRVJQKCBzZWxmLm1lbW9pemUoJ25vcm1hbGl6ZWRQZXJjZWllZEludmVudG9yeUNvdmVyYWdlJywgdCksIHNlbGYucG9pbnRzWydlZmZlY3RPZkludmVudG9yeUNvdmVyYWdlT25QcmljZSddKSwKICAgICAgICAnZWZmZWN0T2ZQcm9maXRhYmlsaXR5T25DYXBhY2l0eVV0aWxpemF0aW9uJyA6IGxhbWJkYSB0OiBMRVJQKCBzZWxmLm1lbW9pemUoJ25vcm1hbGl6ZWRFeHBlY3RlZFByb2ZpdGFiaWxpdHknLCB0KSwgc2VsZi5wb2ludHNbJ2VmZmVjdE9mUHJvZml0YWJpbGl0eU9uQ2FwYWNpdHlVdGlsaXphdGlvbiddKSwKICAgICAgICAnZWZmZWN0T2ZSZWxhdGl2ZVZhbHVlT25EZW1hbmQnIDogbGFtYmRhIHQ6IExFUlAoIHNlbGYubWVtb2l6ZSgncmVsYXRpdmVWYWx1ZU9mUHJvZHVjdCcsIHQpLCBzZWxmLnBvaW50c1snZWZmZWN0T2ZSZWxhdGl2ZVZhbHVlT25EZW1hbmQnXSksCiAgICAgICAgCiAgICAKICAgICAgICAjY29uc3RhbnRzCiAgICAgICAgCiAgICAKICAgIAogICAgICAgIH0KICAgIAogICAgICAgIHNlbGYucG9pbnRzID0gewogICAgICAgICAgICAnZWZmZWN0T2ZJbnZlbnRvcnlDb3ZlcmFnZU9uUHJpY2UnIDogIFsoMC4wLCAxLjQwNCksICgwLjE2NjY2NjY2NjY2NjY2NjY2LCAxLjQxNSksICgwLjMzMzMzMzMzMzMzMzMzMzMsIDEuNDA0KSwgKDAuNSwgMS4zNzIpLCAoMC42NjY2NjY2NjY2NjY2NjY2LCAxLjM1MSksICgwLjgzMzMzMzMzMzMzMzMzMzQsIDEuMjc3KSwgKDEuMCwgMS4wKSwgKDEuMTY2NjY2NjY2NjY2NjY2NywgMC43ODcpLCAoMS4zMzMzMzMzMzMzMzMzMzMzLCAwLjU1KSwgKDEuNSwgMC40KSwgKDEuNjY2NjY2NjY2NjY2NjY2NywgMC4zNCksICgxLjgzMzMzMzMzMzMzMzMzMzMsIDAuMjk4KSwgKDIuMCwgMC4yOTgpXSAgLCAnZWZmZWN0T2ZQcm9maXRhYmlsaXR5T25DYXBhY2l0eVV0aWxpemF0aW9uJyA6ICBbKDAuMCwgMC4zMjQpLCAoMC4xNjY2NjY2NjY2NjY2NjY2NiwgMC4zMyksICgwLjMzMzMzMzMzMzMzMzMzMzMsIDAuMzcyKSwgKDAuNSwgMC4zOTQpLCAoMC42NjY2NjY2NjY2NjY2NjY2LCAwLjQxKSwgKDAuODMzMzMzMzMzMzMzMzMzNCwgMC40MiksICgxLjAsIDAuNSksICgxLjE2NjY2NjY2NjY2NjY2NjcsIDAuNzQ1KSwgKDEuMzMzMzMzMzMzMzMzMzMzMywgMC44MDA3NSksICgxLjUsIDAuODU2NSksICgxLjY2NjY2NjY2NjY2NjY2NjcsIDAuOTEyMjUpLCAoMS44MzMzMzMzMzMzMzMzMzMzLCAwLjk2OCksICgyLjAsIDAuOTY4KV0gICwgJ2VmZmVjdE9mUmVsYXRpdmVWYWx1ZU9uRGVtYW5kJyA6ICBbKDAuMCwgMC4xNyksICgwLjE2NjY2NjY2NjY2NjY2NjY2LCAwLjE5MSksICgwLjMzMzMzMzMzMzMzMzMzMzMsIDAuMjEzKSwgKDAuNSwgMC4yNzcpLCAoMC42NjY2NjY2NjY2NjY2NjY2LCAwLjM1MSksICgwLjgzMzMzMzMzMzMzMzMzMzQsIDAuNDc5KSwgKDEuMCwgMS4wKSwgKDEuMTY2NjY2NjY2NjY2NjY2NywgMS4zNjIpLCAoMS4zMzMzMzMzMzMzMzMzMzMzLCAxLjQ3OSksICgxLjUsIDEuNTc0KSwgKDEuNjY2NjY2NjY2NjY2NjY2NywgMS42MzgpLCAoMS44MzMzMzMzMzMzMzMzMzMzLCAxLjY2KSwgKDIuMCwgMS42NildICAsIAogICAgICAgIH0KICAgIAogICAgCiAgICAgICAgc2VsZi5kaW1lbnNpb25zID0gewogICAgICAgIAknJzogewogICAgICAgICAgICAgICAgJ2xhYmVscyc6IFsgIF0sCiAgICAgICAgICAgICAgICAndmFyaWFibGVzJzogWyAgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICBzZWxmLmRpbWVuc2lvbnNfb3JkZXIgPSB7fSAgICAgCiAgICAKICAgICAgICBzZWxmLnN0b2NrcyA9IFsnZXhwZWN0ZWRQcmljZScsICAgJ2V4cGVjdGVkUHJvZml0YWJpbGl0eScsICAgJ2ludmVudG9yeScsICAgJ3BlcmNlaXZlZEludmVudG9yeUNvdmVyYWdlJywgICAncHJvZHVjdGlvbicsICAgJ3Byb2R1Y3Rpb25DYXBhY2l0eScgIF0KICAgICAgICBzZWxmLmZsb3dzID0gWydjaGFuZ2VJbkV4cGVjdGVkUHJpY2UnLCAgICdjaGFuZ2VJbkV4cGVjdGVkUHJvZml0YWJpbGl0eScsICAgJ2NoYW5nZUluUGVyY2VpdmVkSW52ZW50b3J5Q292ZXJhZ2UnLCAgICdjb25zdW1wdGlvblJhdGUnLCAgICdwcm9kdWN0aW9uUmF0ZScsICAgJ3Byb2R1Y3Rpb25TdGFydFJhdGUnICBdCiAgICAgICAgc2VsZi5jb252ZXJ0ZXJzID0gWydjYXBhY2l0eUNvc3QnLCAgICdjYXBhY2l0eUNvc3RQZXJVbml0JywgICAnY2FwYWNpdHlVdGlsaXphdGlvbicsICAgJ2Nvc3QnLCAgICdkZW1hbmQnLCAgICdpbmRpY2F0ZWRQcmljZScsICAgJ2ludmVudG9yeUNvdmVyYWdlJywgICAnaW52ZW50b3J5Q292ZXJhZ2VQZXJjZXB0aW9uVGltZScsICAgJ21hcmtldFNob2NrT24nLCAgICdtaW5pbXVtUHJpY2UnLCAgICdub3JtYWxpemVkRXhwZWN0ZWRQcm9maXRhYmlsaXR5JywgICAnbm9ybWFsaXplZFBlcmNlaWVkSW52ZW50b3J5Q292ZXJhZ2UnLCAgICdwcmljZScsICAgJ3ByaWNlQWRqdXN0bWVudFRpbWUnLCAgICdwcmljZU9mU3Vic3RpdHV0ZXMnLCAgICdwcm9kdWN0aW9uVGltZScsICAgJ3Byb2ZpdCcsICAgJ3Byb2ZpdEFkanVzdG1lbnRUaW1lJywgICAncmVmZXJlbmNlRGVtYW5kJywgICAncmVmZXJlbmNlRXhwZWN0ZWRQcm9maXRhYmlsaXR5JywgICAncmVmZXJlbmNlSW52ZW50b3J5Q292ZXJhZ2UnLCAgICdyZWxhdGl2ZVZhbHVlT2ZQcm9kdWN0JywgICAncmV2ZW51ZScsICAgJ3NpemVPZlNob2NrJywgICAndW5pdENhcGFjaXR5Q29zdCcsICAgJ3VuaXRWYXJpYWJsZUNvc3QnLCAgICd2YXJpYWJsZUNvc3QnICBdCiAgICAgICAgc2VsZi5nZiA9IFsnZWZmZWN0T2ZJbnZlbnRvcnlDb3ZlcmFnZU9uUHJpY2UnLCAgICdlZmZlY3RPZlByb2ZpdGFiaWxpdHlPbkNhcGFjaXR5VXRpbGl6YXRpb24nLCAgICdlZmZlY3RPZlJlbGF0aXZlVmFsdWVPbkRlbWFuZCcgIF0KICAgICAgICBzZWxmLmNvbnN0YW50cz0gW10KICAgICAgICBzZWxmLmV2ZW50cyA9IFsKICAgICAgICAgICAgXQogICAgCiAgICAgICAgc2VsZi5tZW1vID0ge30KICAgICAgICBmb3Iga2V5IGluIGxpc3Qoc2VsZi5lcXVhdGlvbnMua2V5cygpKToKICAgICAgICAgIHNlbGYubWVtb1trZXldID0ge30gICMgRElDVCBPRiBESUNUUyEKICAgICAgICAgIAogICAgCiAgICAiIiIKICAgIEJ1aWx0aW4gaGVscGVycwogICAgIiIiCiAgICBkZWYgcmFtcChzZWxmLHNsb3BlLHN0YXJ0LHQpOgogICAgICAgIGlmIG5vdCBzdGFydDoKICAgICAgICAgICAgc3RhcnQgPSBzZWxmLnN0YXJ0dGltZQogICAgICAgIGlmIHQgPD0gc3RhcnQ6IHJldHVybiAwCiAgICAgICAgcmV0dXJuICh0LXN0YXJ0KSpzbG9wZQogICAgICAgIAogICAgZGVmIHJvb3RuKHNlbGYsZXhwcmVzc2lvbixvcmRlcik6CiAgICAgICAgb3JkZXIgPSByb3VuZChvcmRlciwwKQogICAgICAgIGlmIGV4cHJlc3Npb24gPCAwIGFuZCBvcmRlciAlIDIgPT0gMDogIyBTdGVsbGEgZG9lcyBub3QgYWxsb3cgZXZlbiByb290cyBmb3IgbmVnYXRpdmUgbnVtYmVycyBhcyBubyBjb21wbGV4IG51bWJlcnMgYXJlIHN1cHBvcnRlZAogICAgICAgICAgICByZXR1cm4gbnAubmFuCiAgICAgICAgcmV0dXJuIC1hYnMoZXhwcmVzc2lvbikqKigxL3JvdW5kKG9yZGVyLDApKSBpZiBleHByZXNzaW9uIDwgMCBlbHNlIGFicyhleHByZXNzaW9uKSoqKDEvcm91bmQob3JkZXIsMCkpICMgU3RlbGxhIExvZ2ljISBObyBDb21wbGV4IG51bWJlcnMgZm9yIG5lZ2F0aXZlIG51bWJlcnMuIEhlbmNlIHRha2UgdGhlIG50aCByb290IG9mIHRoZSBhYnNvbHV0ZSB2YWx1ZSBhbmQgdGhlbiBhZGQgdGhlIG5lZ2F0aXZpdHkgKGlmIGFueSkKICAgIAogICAgIiIiCiAgICBTdGF0aXN0aWNhbCBidWlsdGlucyB3aXRoIFNlZWQKICAgICIiIgogICAgZGVmIHBhcmV0b193aXRoX3NlZWQoc2VsZiwgc2hhcGUsIHNjYWxlLCBzZWVkLCB0KToKICAgICAgICBpZiB0ID09IHNlbGYuc3RhcnR0aW1lOgogICAgICAgICAgICBucC5yYW5kb20uc2VlZChpbnQoc2VlZCkpCiAgICAgICAgcmV0dXJuIG5wLnJhbmRvbS5wYXJldG8oc2hhcGUpICogc2NhbGUgIAogICAgCiAgICBkZWYgd2VpYnVsbF93aXRoX3NlZWQoc2VsZiwgc2hhcGUsIHNjYWxlLCBzZWVkLCB0KToKICAgICAgICBpZiB0ID09IHNlbGYuc3RhcnR0aW1lOgogICAgICAgICAgICBucC5yYW5kb20uc2VlZChpbnQoc2VlZCkpCiAgICAgICAgcmV0dXJuIG5wLnJhbmRvbS53ZWlidWxsKHNoYXBlKSAqIHNjYWxlICAgICAgCiAgICAKICAgIGRlZiBwb2lzc29uX3dpdGhfc2VlZChzZWxmLCBtdSwgc2VlZCwgdCk6CiAgICAgICAgaWYgdCA9PSBzZWxmLnN0YXJ0dGltZToKICAgICAgICAgICAgbnAucmFuZG9tLnNlZWQoaW50KHNlZWQpKQogICAgICAgIHJldHVybiBucC5yYW5kb20ucG9pc3NvbihtdSkgICAKICAgIAogICAgZGVmIG5lZ2Jpbm9taWFsX3dpdGhfc2VlZChzZWxmLCBzdWNjZXNzZXMsIHAsIHNlZWQsIHQpOgogICAgICAgIGlmIHQgPT0gc2VsZi5zdGFydHRpbWU6CiAgICAgICAgICAgIG5wLnJhbmRvbS5zZWVkKGludChzZWVkKSkKICAgICAgICByZXR1cm4gbnAucmFuZG9tLm5lZ2F0aXZlX2Jpbm9taWFsKHN1Y2Nlc3NlcywgcCkgIAogICAgCiAgICBkZWYgbG9nbm9ybWFsX3dpdGhfc2VlZChzZWxmLCBtZWFuLCBzdGRldiwgc2VlZCwgdCk6CiAgICAgICAgaWYgdCA9PSBzZWxmLnN0YXJ0dGltZToKICAgICAgICAgICAgbnAucmFuZG9tLnNlZWQoaW50KHNlZWQpKQogICAgICAgIHJldHVybiBucC5yYW5kb20ubG9nbm9ybWFsKG1lYW4sIHN0ZGV2KSAgIAogICAgCiAgICBkZWYgbG9naXN0aWNfd2l0aF9zZWVkKHNlbGYsIG1lYW4sIHNjYWxlLCBzZWVkLCB0KToKICAgICAgICBpZiB0ID09IHNlbGYuc3RhcnR0aW1lOgogICAgICAgICAgICBucC5yYW5kb20uc2VlZChpbnQoc2VlZCkpCiAgICAgICAgcmV0dXJuIG5wLnJhbmRvbS5sb2dpc3RpYyhtZWFuLCBzY2FsZSkKICAgIAogICAgZGVmIHJhbmRvbV93aXRoX3NlZWQoc2VsZiwgc2VlZCwgdCApOgogICAgICAgIGlmIHQgPT0gc2VsZi5zdGFydHRpbWU6CiAgICAgICAgICAgIHJhbmRvbS5zZWVkKGludChzZWVkKSkKICAgICAgICByZXR1cm4gcmFuZG9tLnJhbmRvbSgpCgogICAgZGVmIGJldGFfd2l0aF9zZWVkKHNlbGYsIGEsYixzZWVkLCB0KToKICAgICAgICBpZiB0ID09IHNlbGYuc3RhcnR0aW1lOgogICAgICAgICAgICBucC5yYW5kb20uc2VlZChpbnQoc2VlZCkpCiAgICAgICAgcmV0dXJuIG5wLnJhbmRvbS5iZXRhKGEsYikKICAgICAgICAKICAgIGRlZiBiaW5vbWlhbF93aXRoX3NlZWQoc2VsZiwgbixwLHNlZWQsIHQpOgogICAgICAgIGlmIHQgPT0gc2VsZi5zdGFydHRpbWU6CiAgICAgICAgICAgIG5wLnJhbmRvbS5zZWVkKGludChzZWVkKSkKICAgICAgICByZXR1cm4gbnAucmFuZG9tLmJpbm9taWFsKG4scCkKICAgICAgICAKICAgIGRlZiBnYW1tYV93aXRoX3NlZWQoc2VsZiwgc2hhcGUsc2NhbGUsc2VlZCwgdCk6CiAgICAgICAgaWYgdCA9PSBzZWxmLnN0YXJ0dGltZToKICAgICAgICAgICAgbnAucmFuZG9tLnNlZWQoaW50KHNlZWQpKQogICAgICAgIHJldHVybiBucC5yYW5kb20uZ2FtbWEoc2hhcGUsc2NhbGUpCiAgICAgICAgCiAgICBkZWYgZXhwcm5kX3dpdGhfc2VlZChzZWxmLCBwbGFtYmRhLHNlZWQsIHQpOgogICAgICAgIGlmIHQgPT0gc2VsZi5zdGFydHRpbWU6CiAgICAgICAgICAgIG5wLnJhbmRvbS5zZWVkKGludChzZWVkKSkKICAgICAgICByZXR1cm4gbnAucmFuZG9tLmV4cG9uZW50aWFsKHBsYW1iZGEpCiAgICAgICAgCiAgICBkZWYgZ2VvbWV0cmljX3dpdGhfc2VlZChzZWxmLCBwLCBzZWVkLCB0KToKICAgICAgICBpZiB0ID09IHNlbGYuc3RhcnR0aW1lOgogICAgICAgICAgICBucC5yYW5kb20uc2VlZChpbnQoc2VlZCkpCiAgICAgICAgcmV0dXJuIG5wLnJhbmRvbS5nZW9tZXRyaWMocCkKICAgIAogICAgZGVmIHRyaWFuZ3VsYXJfd2l0aF9zZWVkKHNlbGYsIGxlZnQsIG1vZGUsIHJpZ2h0LCBzZWVkLCB0KToKICAgICAgICBpZiB0ID09IHNlbGYuc3RhcnR0aW1lOgogICAgICAgICAgICBucC5yYW5kb20uc2VlZChpbnQoc2VlZCkpCiAgICAgICAgcmV0dXJuIG5wLnJhbmRvbS50cmlhbmd1bGFyKGxlZnQsIG1vZGUsIHJpZ2h0KQogICAgCiAgICBkZWYgcmFuayhzZWxmLCBsaXMsIHJhbmspOgogICAgICAgIHJhbmsgPSBpbnQocmFuaykKICAgICAgICBzb3J0ZWRfbGlzdCA9IG5wLnNvcnQobGlzKQogICAgICAgIHRyeToKICAgICAgICAgICAgcmFua3RoX2VsZW0gPSBzb3J0ZWRfbGlzdFtyYW5rLTFdCiAgICAgICAgZXhjZXB0IEluZGV4RXJyb3IgYXMgZToKICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiUkFOSzogUmFuayB7fSB0b28gaGlnaCBmb3IgYXJyYXkgb2Ygc2l6ZSB7fSIuZm9ybWF0KHJhbmssbGVuKGxpcykpKQogICAgICAgIHJldHVybiAobGlzPT1yYW5rdGhfZWxlbSkubm9uemVybygpWzBdWzBdKzEKICAgICAgICAKCiAgICBkZWYgaW50ZXJwb2xhdGUoc2VsZiwgdmFyaWFibGUsIHQsICphcmdzKToKICAgICAgICAiIiIKICAgICAgICBIZWxwZXIgZm9yIGJ1aWx0aW4gImludGVycG9sYXRlIi4gVXNlcyB0aGUgYXJyYXllZCB2YXJpYWJsZSBhbmQgYXJncyB0byBjb21wdXRlIHRoZSBpbnRlcnBvbGF0aW9uCiAgICAgICAgOnBhcmFtIHZhcmlhYmxlOgogICAgICAgIDpwYXJhbSB0OgogICAgICAgIDpwYXJhbSBhcmdzOiBJbnRlcnBvbGF0aW9uIHdlaWdodCBmb3IgZWFjaCBkaW1lbnNpb24sIGJldHdlZW4gb25lIG9yIHplcm8KICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIGRlZiBjb21wdXRlX3godmFsdWVzKTogIwogICAgICAgICAgICAiIiIKICAgICAgICAgICAgQ29tcHV0ZSB4IHZhbHVlcyBmb3IgaW50ZXJwb2xhdGlvbi4gQWx3YXlzIGZyb20gMCB0byAxLiBFLmcuIHZhbHVlcyA9IFsxLDIsM10sIHRoZW4geCA9IFswLCAwLjUsIDEuMF0KICAgICAgICAgICAgOnBhcmFtIHZhbHVlczoKICAgICAgICAgICAgOnJldHVybjoKICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICMKICAgICAgICAgICAgeCA9IFswXQogICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4odmFsdWVzKSk6IHggKz0gW3hbaSAtIDFdICsgMSAvIChsZW4odmFsdWVzKSAtIDEpXQogICAgICAgICAgICByZXR1cm4geAoKICAgICAgICBkZWYgaW50ZXJwb2xhdGVfdmFsdWVzKGluZGV4LCB5X3ZhbCk6ICAjIEludGVybmFsIGludGVycG9sYXRlIG9mIGEgZGltZW5zaW9uJ3MgcmVzdWx0cwogICAgICAgICAgICB4X3ZhbCA9IGNvbXB1dGVfeCh5X3ZhbCkKICAgICAgICAgICAgcG9pbnRzID0gWyh4X3ZhbFtpXSwgeV92YWxbaV0pIGZvciBpIGluIHJhbmdlKDAsIGxlbih4X3ZhbCkpXQogICAgICAgICAgICByZXR1cm4gTEVSUChpbmRleCwgcG9pbnRzKQoKICAgICAgICAjIEZpeCBlYWNoIHdlaWdodCB0byBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMQogICAgICAgIGFyZ3MgPSBbbWF4KDAsbWluKHgsMSkpIGZvciB4IGluIGFyZ3NdCgogICAgICAgICMgR2V0IGRpbWVuc2lvbnMgb2YgdmFyaWFibGUgKDIsMyw0IC4uLikKICAgICAgICBkaW1lbnNpb25zID0gc2VsZi5kaW1lbnNpb25zX29yZGVyW3ZhcmlhYmxlXQoKICAgICAgICAjIEdldCBMYWJlbHMKICAgICAgICBsYWJlbHMgPSB7a2V5OiBkaW1bImxhYmVscyJdIGZvciBrZXksIGRpbSBpbgogICAgICAgICAgICAgICAgICBkaWN0KGZpbHRlcihsYW1iZGEgZWxlbTogZWxlbVswXSBpbiBkaW1lbnNpb25zLCBzZWxmLmRpbWVuc2lvbnMuaXRlbXMoKSkpLml0ZW1zKCl9CgogICAgICAgICMgQ29tcHV0ZQogICAgICAgIHJlc3VsdHMgPSB7fQogICAgICAgIGlmIGxlbihsYWJlbHMua2V5cygpKSA9PSAxOgogICAgICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGVfdmFsdWVzKGFyZ3NbMF0sIHNlbGYuZXF1YXRpb24odmFyaWFibGUgKyAiWypdIiwgdCkpCiAgICAgICAgZm9yIGluZGV4LCBkaW1lbnNpb24gaW4gZW51bWVyYXRlKGRpbWVuc2lvbnMpOgogICAgICAgICAgICByZXN1bHRzW2RpbWVuc2lvbl0gPSBbXQogICAgICAgICAgICBmb3IgbGFiZWwgaW4gbGFiZWxzW2RpbWVuc2lvbl06CiAgICAgICAgICAgICAgICBpbmRpY2VzID0gWyIqIiBpZiBpICE9IGluZGV4IGVsc2UgbGFiZWwgZm9yIGkgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UoMCwgbGVuKGRpbWVuc2lvbnMpKV0gICMgQnVpbGQgaW5kaWNlcywgc3VjaCBhcyAiKixlbGVtZW50MSIgb3IgIjEsKiIKCiAgICAgICAgICAgICAgICByZXN1bHRzW2RpbWVuc2lvbl0gKz0gWwogICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRlX3ZhbHVlcyhhcmdzW2luZGV4XSwgc2VsZi5lcXVhdGlvbih2YXJpYWJsZSArICJbe31dIi5mb3JtYXQoIiwiLmpvaW4oaW5kaWNlcykpLCB0KSldCgogICAgICAgIHJldHVybiBbaW50ZXJwb2xhdGVfdmFsdWVzKGFyZ3NbaV0sIHYpIGZvciBpLCB2IGluIGVudW1lcmF0ZShyZXN1bHRzLnZhbHVlcygpKV1bMF0KCiAgICBkZWYgbG9va3VwaW52KHNlbGYsZ2YsIHZhbHVlKToKICAgICAgICAiIiIKICAgICAgICBIZWxwZXIgZm9yIGxvb2t1cGludiBidWlsdGluLiBMb29rcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgeCBvZiBhIGdpdmVuIHkKICAgICAgICA6cGFyYW0gZ2Y6IE5hbWUgb2YgZ3JhcGhpY2FsIGZ1bmN0aW9uCiAgICAgICAgOnBhcmFtIHZhbHVlOiBWYWx1ZSB3ZSBhcmUgbG9va2luZyBmb3IgKHkpCiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICBkZWYgbGVycGZ1bih4LCBwb2ludHMpOiAgIyBTcGVjaWFsIGxlcnAgZnVuY3Rpb24gZm9yIHRoZSByZXZlcnNlZCBwb2ludHMKICAgICAgICAgICAgZnJvbSBzY2lweS5pbnRlcnBvbGF0ZSBpbXBvcnQgaW50ZXJwMWQKICAgICAgICAgICAgeF92YWxzID0gbnAuYXJyYXkoW3hbMF0gZm9yIHggaW4gcG9pbnRzXSkKICAgICAgICAgICAgeV92YWxzID0gbnAuYXJyYXkoW3hbMV0gZm9yIHggaW4gcG9pbnRzXSkKICAgICAgICAgICAgZiA9IGludGVycDFkKHhfdmFscywgeV92YWxzKQogICAgICAgICAgICByZXR1cm4gZih4KQoKICAgICAgICByZXN1bHRzID0gW10KICAgICAgICBmb3IgdCBpbiBucC5hcmFuZ2Uoc2VsZi5zdGFydHRpbWUsIHNlbGYuc3RvcHRpbWUgKyBzZWxmLmR0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR0KTogICMgQ29tcHV0ZSBhbGwgeSB2YWx1ZXMgZm9yIGdyYXBoaWNhbCBmdW5jdGlvbnMgdXNpbmcgc3RhbmRhcmQgaW50ZXJwb2xhdGUgKExFUlApCiAgICAgICAgICAgIHJlc3VsdHMgKz0gWyhMRVJQKHQsIHNlbGYucG9pbnRzW2dmXSksIHQpXSAjIHkseAoKICAgICAgICByZXR1cm4gbnAucm91bmQobGVycGZ1bih2YWx1ZSwgcmVzdWx0cyksCiAgICAgICAgICAgICAgICAgICAgIDMpICAjIFVzZSBMRVJQIGZ1bmN0aW9uIGZvciB0aGUgcmV2ZXJzZWQgc2V0IG9mIHBvaW50cyAoeSx4KSBhbmQgZmluZCB0aGUgY29ycmVjdCB2YWx1ZS4gQ2Fubm90IHVzZSBzdGFuZGFyZCBMRVJQIGhlcmUgYmVjYXVzZSB0aGF0IHdvdWxkIHJlcXVpcmUgY29udGludW91cyBYICgxLDIsMy4uKQoKICAgIGRlZiBkZWxheShzZWxmLCB0ZGVsYXllZCwgb2Zmc2V0LCBpbml0aWFsLCB0KToKICAgICAgICAnJycKICAgICAgICBEZWxheSBidWlsdGluCiAgICAgICAgOnBhcmFtIHRkZWxheWVkOiBEZWxheWVkIFQKICAgICAgICA6cGFyYW0gb2Zmc2V0OiBPZmZzZXQKICAgICAgICA6cGFyYW0gaW5pdGlhbDogSW5pdGlhbCB2YWx1ZQogICAgICAgIDpwYXJhbSB0OgogICAgICAgIDpyZXR1cm46CiAgICAgICAgJycnCiAgICAgICAgaWYgKHQgLSBzZWxmLnN0YXJ0dGltZSkgPCBvZmZzZXQ6IHJldHVybiBpbml0aWFsCiAgICAgICAgZWxzZTogcmV0dXJuIHRkZWxheWVkCgogICAgZGVmIGNvdW50ZXIoc2VsZixzdGFydCwgaW50ZXJ2YWwsIHQpOgogICAgICAgICcnJwogICAgICAgIENvdW50ZXIgYnVsdGluCiAgICAgICAgOnBhcmFtIHN0YXJ0OgogICAgICAgIDpwYXJhbSBpbnRlcnZhbDoKICAgICAgICA6cGFyYW0gdDoKICAgICAgICA6cmV0dXJuOgogICAgICAgICcnJwogICAgICAgIG51bV9lbGVtcyA9IChpbnRlcnZhbCAvIHN0YXJ0IC8gc2VsZi5kdCkKICAgICAgICB2YWx1ZSA9IGludGVydmFsIC8gbnVtX2VsZW1zCiAgICAgICAgdF9jb3B5ID0gY29weSh0KQoKICAgICAgICB3aGlsZSB0ID49IGludGVydmFsOiB0ID0gdCAtIGludGVydmFsCiAgICAgICAgaWYgKHRfY29weSA%2BIGludGVydmFsKTogcmV0dXJuIChzdGFydCArICh0IC8gc2VsZi5kdCkgKiB2YWx1ZSkKCiAgICAgICAgcmV0dXJuICh0IC8gc2VsZi5kdCAqIHZhbHVlKQoKICAgIGRlZiBucHYoc2VsZiwgaW5pdGlhbCwgcCwgdCk6CiAgICAgICAgIiIiCiAgICAgICAgTlBWIChOZXQgUHJlc2VudCBWYWx1ZSkgYnVpbHRpbgogICAgICAgIDpwYXJhbSBpbml0aWFsOgogICAgICAgIDpwYXJhbSBwOgogICAgICAgIDpwYXJhbSB0OgogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgcmF0ZSA9IDEuMCAvICgxLjAgKyBwKSAqKiAodCAtIHNlbGYuZHQgLSBzZWxmLnN0YXJ0dGltZSArIHNlbGYuZHQpCiAgICAgICAgcmV0dXJuIGluaXRpYWwgaWYgKHQgPD0gc2VsZi5zdGFydHRpbWUpIGVsc2UgKCBzZWxmLm5wdihpbml0aWFsLCBwLCB0IC0gc2VsZi5kdCkgKyAoc2VsZi5kdCAqIHJhdGUgKiBpbml0aWFsKSApIyBSZWN1cnNlCgogICAgZGVmIGlycihzZWxmLCBzdG9ja19uYW1lLCBtaXNzaW5nLCB0LG15bmFtZSk6CiAgICAgICAgIiIiCiAgICAgICAgQXBwcm94aW1hdGUgSVJSIChJbnRlcm5hbCBSYXRlIG9mIFJldHVybikKICAgICAgICA6cGFyYW0gc3RvY2tfbmFtZTogSWRlbnRpZmllciBvZiBTdG9jayB0byBhcHByb3hpbWF0ZSBmb3IKICAgICAgICA6cGFyYW0gbWlzc2luZzogUmVwbGFjZSBtaXNzaW5nIHZhbHVlcyB3aXRoIHRoaXMgdmFsdWUKICAgICAgICA6cGFyYW0gdDoKICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgoKICAgICAgICBkZWYgY29tcHV0ZV9ucHYoc3RvY2tfbmFtZSwgdCwgaSwgbWlzc2luZyk6CiAgICAgICAgICAgIEkgPSBtaXNzaW5nIGlmIG1pc3NpbmcgZWxzZSBzZWxmLmVxdWF0aW9uKHN0b2NrX25hbWUsIHNlbGYuc3RhcnR0aW1lKQogICAgICAgICAgICByZXR1cm4gSSArIHN1bSggW3NlbGYubWVtb2l6ZShzdG9ja19uYW1lLCB0KSAvICgxICsgaSkgKiogdCBmb3IgdCBpbiBucC5hcmFuZ2Uoc2VsZi5zdGFydHRpbWUrc2VsZi5kdCAsIHQsIHNlbGYuZHQpXSkKCiAgICAgICAgaSA9IDAKICAgICAgICB0cnk6CiAgICAgICAgICAgIGkgPSAwIGlmIHQgPD0gc2VsZi5zdGFydHRpbWUgKyBzZWxmLmR0IGVsc2Ugc2VsZi5tZW1vW215bmFtZV1bdC1zZWxmLmR0XQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcGFzcwoKICAgICAgICBpZiB0ID09IHNlbGYuc3RhcnR0aW1lOiByZXR1cm4gTm9uZQoKICAgICAgICBiZXN0X2t3ID0ge2kgOiBjb21wdXRlX25wdihzdG9ja19uYW1lLCB0LCBpLCBtaXNzaW5nKX0KICAgICAgICBmb3IgXyBpbiByYW5nZSgwLCAzMDApOgogICAgICAgICAgICAjIEhlcmUgd2UgYXBwcm94aW1hdGUgdGhlIElSUgogICAgICAgICAgICBrdyA9IGNvbXB1dGVfbnB2KHN0b2NrX25hbWUsIHQsIGksIG1pc3NpbmcpCgogICAgICAgICAgICBjaGFuZ2UgPSAwLjAwMQoKICAgICAgICAgICAgYmVzdF9rd1tpXSA9IGt3CgogICAgICAgICAgICBpZiBhYnMoa3cpIDwgc2VsZi5tZW1vaXplKHN0b2NrX25hbWUsIHQpKjAuMTogY2hhbmdlID0gMC4wMDAxCgogICAgICAgICAgICBpZiBhYnMoa3cpIDwgc2VsZi5tZW1vaXplKHN0b2NrX25hbWUsIHQpKjAuMDU6IGNoYW5nZSA9IDAuMDAwMDEKCiAgICAgICAgICAgIGlmIGFicyhrdykgPCBzZWxmLm1lbW9pemUoc3RvY2tfbmFtZSwgdCkqMC4wMjogY2hhbmdlID0gMC4wMDAwMDEKCiAgICAgICAgICAgIGlmIGt3IDwgMDogaSAtPSBjaGFuZ2UKICAgICAgICAgICAgZWxpZiBrdyA%2BIDA6ICBpICs9IGNoYW5nZQoKICAgICAgICAgICAgaWYga3cgPT0gMDogcmV0dXJuIGkKICAgICAgICBiZXN0X2t3ID0ge2s6IHYgZm9yIGssIHYgaW4gc29ydGVkKGJlc3Rfa3cuaXRlbXMoKSwga2V5PWxhbWJkYSBpdGVtOiBpdGVtWzFdKX0KICAgICAgICB4ID0ge3Y6IGsgZm9yIGssIHYgaW4gc29ydGVkKGJlc3Rfa3cuaXRlbXMoKSwga2V5PWxhbWJkYSBpdGVtOiBpdGVtWzFdKX0gIyBTb3J0IGJ5IGJlc3QgbnB2CiAgICAgICAgcmV0dXJuIHhbbWluKHgua2V5cygpKV0KCiAgICBkZWYgbm9ybWFsY2RmKHNlbGYsbGVmdCwgcmlnaHQsIG1lYW4sIHNpZ21hKToKICAgICAgICBpbXBvcnQgc2NpcHkuc3RhdHMKICAgICAgICByaWdodCA9IHNjaXB5LnN0YXRzLm5vcm0oZmxvYXQobWVhbiksIGZsb2F0KHNpZ21hKSkuY2RmKGZsb2F0KHJpZ2h0KSkKICAgICAgICBsZWZ0ID0gc2NpcHkuc3RhdHMubm9ybShmbG9hdChtZWFuKSwgZmxvYXQoc2lnbWEpKS5jZGYoZmxvYXQobGVmdCkpCiAgICAgICAgcmV0dXJuIHJvdW5kKHJpZ2h0IC0gbGVmdCwgMykKCiAgICBkZWYgY2dyb3d0aChzZWxmLCBwKToKICAgICAgICAiIiJUaGUgcGVyLXN0ZXAgZ3Jvd3RoIHJhdGUgeiB0aGF0IGNvbXBvdW5kcyB0byBwIG92ZXIgb25lIHRpbWUgdW5pdC4KCiAgICAgICAgQ2xvc2VkIGZvcm0gb2Ygd2hhdCB0aGUgc3ltYm9saWMgdmVyc2lvbiBzb2x2ZWQgZm9yOiB0aGUgY29tcG91bmRpbmcKICAgICAgICBsb29wIG9ubHkgZXZlciBwcm9kdWNlZCB4ID0gKDEgKyBkdCp6KSoqbiB3aXRoIG4gPSBpbnQoMS9kdCksIHNvCiAgICAgICAgMSArIHAgPSAoMSArIGR0KnopKipuIHJlc29sdmVzIGRpcmVjdGx5LgogICAgICAgICIiIgogICAgICAgIGR0ID0gc2VsZi5kdAogICAgICAgICMgZHQgPiAxIGxlZnQgdGhlIG9sZCBsb29wIGVtcHR5LCBpLmUuIGEgc2luZ2xlIGZhY3Rvci4KICAgICAgICBuID0gbWF4KGludCgxIC8gZHQpLCAxKQogICAgICAgIHJldHVybiAoKDEuMCArIHApICoqICgxLjAgLyBuKSAtIDEuMCkgLyBkdAoKICAgIGRlZiBtb250ZWNhcmxvKHNlbGYscHJvYmFiaWxpdHksc2VlZCwgdCk6CiAgICAgICAgIiIiCiAgICAgICAgTW9udGVjYXJsbyBidWlsdGluCiAgICAgICAgOnBhcmFtIHByb2JhYmlsaXR5OgogICAgICAgIDpwYXJhbSBzZWVkOgogICAgICAgIDpwYXJhbSB0OgogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgaWYgc2VlZCBhbmQgdD09c2VsZi5zdGFydHRpbWU6CiAgICAgICAgICAgIHJhbmRvbS5zZWVkKHNlZWQpCiAgICAgICAgcm5kbnVtYmVyID0gcmFuZG9tLnVuaWZvcm0oMCwxMDApCiAgICAgICAgcmV0dXJuIDEgaWYgcm5kbnVtYmVyIDwgKHByb2JhYmlsaXR5KnNlbGYuZHQpIGVsc2UgMAoKCiAgICBkZWYgZGVyaXZuKHNlbGYsIGVxdWF0aW9uLCBvcmRlciwgdCk6CiAgICAgICAgIiIiCiAgICAgICAgbnRoIGRlcml2YXRpdmUgb2YgYW4gZXF1YXRpb24KICAgICAgICA6cGFyYW0gZXF1YXRpb246IE5hbWUgb2YgdGhlIGVxdWF0aW9uCiAgICAgICAgOnBhcmFtIG9yZGVyOiBuCiAgICAgICAgOnBhcmFtIHQ6IGN1cnJlbnQgdAogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgbWVtbyA9IHt9CiAgICAgICAgZHQgPSAwLjI1CgogICAgICAgIGRlZiBtZW0oZXEsIHQpOgogICAgICAgICAgICAiIiIKICAgICAgICAgICAgTWVtbyBmb3IgaW50ZXJuYWwgZXF1YXRpb25zCiAgICAgICAgICAgIDpwYXJhbSBlcToKICAgICAgICAgICAgOnBhcmFtIHQ6CiAgICAgICAgICAgIDpyZXR1cm46CiAgICAgICAgICAgICIiIgogICAgICAgICAgICBpZiBub3QgZXEgaW4gbWVtby5rZXlzKCk6IG1lbW9bZXFdID0ge30KICAgICAgICAgICAgbXltZW1vID0gbWVtb1tlcV0KICAgICAgICAgICAgaWYgdCBpbiBteW1lbW8ua2V5cygpOiByZXR1cm4gbXltZW1vW3RdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBteW1lbW9bdF0gPSBzW2VxXSh0KQogICAgICAgICAgICAgICAgcmV0dXJuIG15bWVtb1t0XQoKICAgICAgICBzID0ge30KICAgICAgICBzWzFdID0gbGFtYmRhIHQ6IDAgaWYgdCA8PSBzZWxmLnN0YXJ0dGltZSBlbHNlIChzZWxmLm1lbW9pemUoZXF1YXRpb24sIHQpIC0gc2VsZi5tZW1vaXplKGVxdWF0aW9uLCB0IC0gZHQpKSAvIGR0CgogICAgICAgIGRlZiBhZGRFcXVhdGlvbihuKToKICAgICAgICAgICAgc1tuXSA9IGxhbWJkYSB0OiAwIGlmIHQgPD0gc2VsZi5zdGFydHRpbWUgZWxzZSAobWVtKG4gLSAxLCB0KSAtIG1lbShuIC0gMSwgdCAtIGR0KSkgLyBkdAoKICAgICAgICBmb3IgbiBpbiBsaXN0KHJhbmdlKDIsIG9yZGVyICsgMSkpOiBhZGRFcXVhdGlvbihuKQoKICAgICAgICByZXR1cm4gc1tvcmRlcl0odCkgaWYgKCB0ID49IHNlbGYuc3RhcnR0aW1lICsgKGR0ICogb3JkZXIpICkgZWxzZSAwCgogICAgZGVmIHNtdGhuKHNlbGYsIGlucHV0c3RyZWFtLCBhdmVyYWdpbmdfdGltZSwgaW5pdGlhbCwgbiwgdCk6CiAgICAgICAgIiIiCiAgICAgICAgUHJldHR5IGNvbXBsZXggb3BlcmF0b3IuIEFjdHVhbGx5IHdlIGFyZSBidWlsZGluZyBhIHdob2xlIG1vZGVsIGhlcmUgYW5kIGhhdmUgaXQgcnVuCiAgICAgICAgRmluZCBpbmZvIGluIGh0dHBzOi8vd3d3LmlzZWVzeXN0ZW1zLmNvbS9yZXNvdXJjZXMvaGVscC92MS05L2RlZmF1bHQuaHRtIzA4LVJlZmVyZW5jZS8wNy1CdWlsdGlucy9EZWxheV9idWlsdGlucy5odG0ja2FuY2hvcjM2NAogICAgICAgIDpwYXJhbSBpbnB1dHN0cmVhbToKICAgICAgICA6cGFyYW0gYXZlcmFnaW5nX3RpbWU6CiAgICAgICAgOnBhcmFtIGluaXRpYWw6CiAgICAgICAgOnBhcmFtIG46CiAgICAgICAgOnBhcmFtIHQ6CiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICBtZW1vID0ge30KICAgICAgICBkdCA9IHNlbGYuZHQKICAgICAgICBmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CgogICAgICAgIGRlZiBtZW0oZXEsIHQpOgogICAgICAgICAgICAiIiIKICAgICAgICAgICAgSW50ZXJuYWwgbWVtbyBmb3IgZXF1YXRpb25zCiAgICAgICAgICAgIDpwYXJhbSBlcToKICAgICAgICAgICAgOnBhcmFtIHQ6CiAgICAgICAgICAgIDpyZXR1cm46CiAgICAgICAgICAgICIiIgogICAgICAgICAgICBpZiBub3QgZXEgaW4gbWVtby5rZXlzKCk6IG1lbW9bZXFdID0ge30KICAgICAgICAgICAgbXltZW1vID0gbWVtb1tlcV0KICAgICAgICAgICAgaWYgdCBpbiBteW1lbW8ua2V5cygpOnJldHVybiBteW1lbW9bdF0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIG15bWVtb1t0XSA9IHNbZXFdKHQpCiAgICAgICAgICAgICAgICByZXR1cm4gbXltZW1vW3RdCgogICAgICAgIHMgPSB7fQoKICAgICAgICBkZWYgYWRkRXF1YXRpb24obiwgdXBwZXIpOgogICAgICAgICAgICB5ID0gZGVlcGNvcHkobikKICAgICAgICAgICAgaWYgeSA9PSAxOgogICAgICAgICAgICAgICAgc1sic3RvY2sxIl0gPSBsYW1iZGEgdDogKAogICAgICAgICAgICAgICAgICAgIChtYXgoWzAsIChzZWxmLm1lbW9pemUoaW5wdXRzdHJlYW0sIHQpIGlmIChpbml0aWFsIGlzIE5vbmUpIGVsc2UgaW5pdGlhbCldKSkgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPD0gc2VsZi5zdGFydHRpbWUpIGVsc2UgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbSgnc3RvY2sxJywgdCAtIGR0KSArIGR0ICogKG1lbSgnY2hhbmdlSW5TdG9jazEnLCB0IC0gZHQpKSkpCiAgICAgICAgICAgICAgICBzWydjaGFuZ2VJblN0b2NrMSddID0gbGFtYmRhIHQ6IChzZWxmLm1lbW9pemUoaW5wdXRzdHJlYW0sIHQpIC0gbWVtKCdzdG9jazEnLCB0KSkgLyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmVyYWdpbmdfdGltZSAvIHVwcGVyKQogICAgICAgICAgICBpZiB5ID4gMToKICAgICAgICAgICAgICAgIHNbInN0b2Nre30iLmZvcm1hdCh5KV0gPSBsYW1iZGEgdDogKAogICAgICAgICAgICAgICAgICAgIChtYXgoWzAsIChzZWxmLm1lbW9pemUoaW5wdXRzdHJlYW0sIHQpIGlmIChpbml0aWFsIGlzIE5vbmUpIGVsc2UgaW5pdGlhbCldKSkgaWYgKHQgPD0gc2VsZi5zdGFydHRpbWUpIGVsc2UgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbSgic3RvY2t7fSIuZm9ybWF0KHkpLCB0IC0gZHQpICsgZHQgKiAobWVtKCdjaGFuZ2VJblN0b2Nre30nLmZvcm1hdCh5KSwgdCAtIGR0KSkpKQogICAgICAgICAgICAgICAgc1snY2hhbmdlSW5TdG9ja3t9Jy5mb3JtYXQoeSldID0gbGFtYmRhIHQ6IChtZW0oInN0b2Nre30iLmZvcm1hdCh5IC0gMSksIHQpIC0gbWVtKCJzdG9ja3t9Ii5mb3JtYXQoeSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCkpIC8gKGF2ZXJhZ2luZ190aW1lIC8gdXBwZXIpCiAgICAgICAgbiA9IGludChuKQoKICAgICAgICBmb3IgaSBpbiBsaXN0KHJhbmdlKDAsIG4gKyAxKSk6IGFkZEVxdWF0aW9uKGksIG4pCgogICAgICAgIHJldHVybiBzWydzdG9ja3t9Jy5mb3JtYXQobildKHQpCgogICAgZGVmIGZvcmNzdChzZWxmLGlucHV0c3RyZWFtLCBhdmVyYWdpbmdfdGltZSwgaG9yaXpvbiwgaW5pdGlhbCwgdCk6CiAgICAgICAgbWVtbyA9IHsiY2hhbmdlX2luX2lucHV0Ijoge30sICJhdmVyYWdlX2lucHV0Ijoge30sICJ0cmVuZF9pbl9pbnB1dCI6IHt9LCAiZm9yZWNhc3RfaW5wdXQiOiB7fX0KCiAgICAgICAgZGVmIG1lbShlcSwgdCk6CiAgICAgICAgICAgICIiIgogICAgICAgICAgICBJbnRlcm5hbCBtZW1vIGZvciBlcXVhdGlvbnMKICAgICAgICAgICAgOnBhcmFtIGVxOgogICAgICAgICAgICA6cGFyYW0gdDoKICAgICAgICAgICAgOnJldHVybjoKICAgICAgICAgICAgIiIiCiAgICAgICAgICAgIG15bWVtbyA9IG1lbW9bZXFdCiAgICAgICAgICAgIGlmIHQgaW4gbXltZW1vLmtleXMoKTogcmV0dXJuIG15bWVtb1t0XQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbXltZW1vW3RdID0gc1tlcV0odCkKICAgICAgICAgICAgICAgIHJldHVybiBteW1lbW9bdF0KCiAgICAgICAgcyA9IHsKICAgICAgICAgICAgImNoYW5nZV9pbl9pbnB1dCI6IGxhbWJkYSB0OiBtYXgoWzAsIChzZWxmLm1lbW9pemUoaW5wdXRzdHJlYW0sdCkgLSBtZW0oJ2F2ZXJhZ2VfaW5wdXQnLCB0KSkgLyBhdmVyYWdpbmdfdGltZV0pLAogICAgICAgICAgICAiYXZlcmFnZV9pbnB1dCI6IGxhbWJkYSB0OiAoKHNlbGYubWVtb2l6ZShpbnB1dHN0cmVhbSx0KSkgaWYgKHQgPD0gc2VsZi5zdGFydHRpbWUpIGVsc2UgKAogICAgICAgICAgICAgICAgICAgICAgICBtZW0oImF2ZXJhZ2VfaW5wdXQiLCB0IC0gc2VsZi5kdCkgKyBzZWxmLmR0ICogKG1lbSgiY2hhbmdlX2luX2lucHV0IiwgdCAtIHNlbGYuZHQpKSkpLAogICAgICAgICAgICAidHJlbmRfaW5faW5wdXQiOiBsYW1iZGEgdDogKCgoc2VsZi5tZW1vaXplKGlucHV0c3RyZWFtLHQpIC0gc2VsZi5tZW1vaXplKCdhdmVyYWdlSW5wdXQnLCB0KSkgLyAoCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVtb2l6ZSgnYXZlcmFnZUlucHV0JywgdCkgKiBzZWxmLm1lbW9pemUoJ2F2ZXJhZ2luZ1RpbWUnLCB0KSkpIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZW1vaXplKCdhdmVyYWdlSW5wdXQnLCB0KSA%2BIDAuMCkgZWxzZSAobnAubmFuKSksCiAgICAgICAgICAgICJmb3JlY2FzdF9pbnB1dCI6IGxhbWJkYSB0OiBzZWxmLm1lbW9pemUoaW5wdXRzdHJlYW0sdCkgKiAoMS4wICsgbWVtKCJ0cmVuZF9pbl9pbnB1dCIsIHQpICogaG9yaXpvbikKICAgICAgICB9CgogICAgICAgIHJldHVybiBzWyJmb3JlY2FzdF9pbnB1dCJdKHQpCgogICAgI0hlbHBlcnMgZm9yIERpbWVuc2lvbnMgKEFycmF5cykKCiAgICBkZWYgZmluZF9kaW1lbnNpb25zKHNlbGYsIHN0b2NrKToKICAgICAgICBzdG9ja2RpbWVuc2lvbnMgPSB7fQogICAgICAgIGZvciBkaW1lbnNpb24sIHZhbHVlcyBpbiBzZWxmLmRpbWVuc2lvbnMuaXRlbXMoKToKICAgICAgICAgICAgaWYgc3RvY2sgaW4gdmFsdWVzWyJ2YXJpYWJsZXMiXToKICAgICAgICAgICAgICAgIHN0b2NrZGltZW5zaW9uc1tkaW1lbnNpb25dID0gdmFsdWVzWyJsYWJlbHMiXQoKICAgICAgICBpZiBsZW4oc3RvY2tkaW1lbnNpb25zLmtleXMoKSkgPT0gMToKICAgICAgICAgICAgcmV0dXJuIFtzdG9jayArICJbe31dIi5mb3JtYXQoeCkgZm9yIHggaW4gc3RvY2tkaW1lbnNpb25zW2xpc3Qoc3RvY2tkaW1lbnNpb25zLmtleXMoKSlbMF1dXQoKICAgIGRlZiBnZXRfZGltZW5zaW9ucyhzZWxmLCBlcXVhdGlvbiwgdCk6CiAgICAgICAgcmVfZmluZF9pbmRpY2VzID0gcidcWyhbXildKylcXScKICAgICAgICBncm91cCA9IHJlLnNlYXJjaChyZV9maW5kX2luZGljZXMsIGVxdWF0aW9uKS5ncm91cCgwKS5yZXBsYWNlKCJbIiwgIiIpLnJlcGxhY2UoIl0iLCAiIikKICAgICAgICBlcXVhdGlvbl9iYXNpYyA9IGVxdWF0aW9uLnJlcGxhY2UoZ3JvdXAsICIiKS5yZXBsYWNlKCJbXSIsICIiKQogICAgICAgIGxhYmVscyA9IFtdCiAgICAgICAgZm9yIGluZGV4LCBlbGVtIGluIGVudW1lcmF0ZShncm91cC5zcGxpdCgiLCIpKToKICAgICAgICAgICAgaWYgbGVuKGVsZW0uc3BsaXQoIjoiKSkgPiAxOiAjIExpc3Qgb3BlcmF0b3IKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBib3VuZHMgPSBbaW50KHgpIGZvciB4IGluIGVsZW0uc3BsaXQoIjoiKV0KICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihlKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBib3VuZHMgPSBzb3J0ZWQoYm91bmRzKQogICAgICAgICAgICAgICAgaWYgbGVuKGJvdW5kcykgPiAyOgogICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIlRvbyBtYW55IGFyZ3VtZW50cyBmb3IgbGlzdCBvcGVyYXRvci4gRXhwZWN0aW5nIDIsIGdvdCB7fSIuZm9ybWF0KGxlbihib3VuZHMpKSkKCiAgICAgICAgICAgICAgICBsYWJlbHMgKz0gW2xpc3QocmFuZ2UoYm91bmRzWzBdLCBib3VuZHNbMV0rMSkpXQoKICAgICAgICAgICAgZWxpZiBlbGVtID09ICIqIjogIyBTdGFyIG9wZXJhdG9yCiAgICAgICAgICAgICAgICBkaW0gPSBzZWxmLmRpbWVuc2lvbnNfb3JkZXJbZXF1YXRpb25fYmFzaWNdW2luZGV4XQogICAgICAgICAgICAgICAgbGFiZWxzICs9IFtzZWxmLmRpbWVuc2lvbnNbZGltXVsibGFiZWxzIl1dCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpZiBub3QgdHlwZShlbGVtKSBpcyBsaXN0OgogICAgICAgICAgICAgICAgICAgIGxhYmVscyArPSBbW2VsZW1dXQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBsYWJlbHMgKz0gW2VsZW1dCgogICAgICAgIHByb2R1Y3RzID0gY2FydGVzaWFuX3Byb2R1Y3QobGFiZWxzKQoKICAgICAgICByZXR1cm5fbGlzdCA9IFtdCgogICAgICAgIGZvciBwcm9kdWN0IGluIHByb2R1Y3RzOgogICAgICAgICAgICBwcm9kID0gc3RyKHByb2R1Y3QpLnJlcGxhY2UoIigiLCAiIikucmVwbGFjZSgiKSIsICIiKS5yZXBsYWNlKCJbIiwgIiIpLnJlcGxhY2UoIl0iLCAiIikucmVwbGFjZSgiJyIsICIiKS5yZXBsYWNlKCIgIiwgIiIpCiAgICAgICAgICAgIHJldHVybl9saXN0ICs9IFtzZWxmLm1lbW9pemUoZXF1YXRpb25fYmFzaWMgKyAiW3t9XSIuZm9ybWF0KHByb2QpLCB0KV0KICAgICAgICAgICAgCiAgICAgICAgcmV0dXJuIG5wLmFycmF5KHJldHVybl9saXN0KQoKCiAgICAjQWNjZXNzIGVxdWF0aW9ucyBBUEkKCiAgICBkZWYgZXF1YXRpb24oc2VsZiwgZXF1YXRpb24sIGFyZyk6CiAgICAgICAgcmV0dXJuIHNlbGYubWVtb2l6ZShlcXVhdGlvbixhcmcpCgoKICAgICNNZW1vaXplciBmb3IgZXF1YXRpb25zLiBBbHNvIGRvZXMgbW9zdCBvZiBBUEkgd29yawoKICAgIGRlZiBtZW1vaXplKHNlbGYsIGVxdWF0aW9uLCBhcmcpOgogICAgICAgIGlmIHR5cGUoZXF1YXRpb24pIGlzIGZsb2F0IG9yIHR5cGUoZXF1YXRpb24pIGlzIGludDogIyBGYWxsYmFjayBmb3IgdmFsdWVzCiAgICAgICAgICAgIHJldHVybiBlcXVhdGlvbgogICAgICAgIGlmICIqIiBpbiBlcXVhdGlvbiBvciAiOiIgaW4gZXF1YXRpb246CiAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9kaW1lbnNpb25zKGVxdWF0aW9uLGFyZykKICAgICAgICAgICAgCiAgICAgICAgaWYgbm90IGVxdWF0aW9uIGluIHNlbGYuZXF1YXRpb25zLmtleXMoKToKCiAgICAgICAgICAgICMgbWF0Y2ggYXJyYXkgcGF0dGVybiBhbmQgZmluZCBub24tYXJyYXllZCB2YXIKICAgICAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgICAgIG1hdGNoID0gcmUuZmluZGFsbChyJ1xbW2EtekEtWjEtOSxfXSpcXScsIGVxdWF0aW9uKQoKICAgICAgICAgICAgaWYgbWF0Y2g6CgogICAgICAgICAgICAgICAgZXF1YXRpb25fcmVwbGFjZWQgPSBlcXVhdGlvbi5yZXBsYWNlKG1hdGNoWzBdLCAiIikKCiAgICAgICAgICAgICAgICBpZiBlcXVhdGlvbl9yZXBsYWNlZCBpbiBzZWxmLmVxdWF0aW9uczoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5tZW1vaXplKGVxdWF0aW9uPWVxdWF0aW9uX3JlcGxhY2VkLGFyZz1hcmcpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJFcXVhdGlvbiAne30nIG5vdCBmb3VuZCEiLmZvcm1hdChlcXVhdGlvbikpCgogICAgICAgIG15bWVtbyA9IHNlbGYubWVtb1tlcXVhdGlvbl0KCiAgICAgICAgaWYgYXJnIGluIG15bWVtby5rZXlzKCk6CiAgICAgICAgICAgIHJldHVybiBteW1lbW9bYXJnXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZXF1YXRpb25zW2VxdWF0aW9uXShhcmcpCiAgICAgICAgICAgIG15bWVtb1thcmddID0gcmVzdWx0CgogICAgICAgIHJldHVybiByZXN1bHQKCgogICAgZGVmIHNldERUKHNlbGYsIHYpOgogICAgICAgIHNlbGYuZHQgPSB2CgogICAgZGVmIHNldFN0YXJ0dGltZShzZWxmLCB2KToKICAgICAgICBzZWxmLnN0YXJ0dGltZSA9IHYKCiAgICBkZWYgc2V0U3RvcHRpbWUoc2VsZiwgdik6CiAgICAgICAgc2VsZi5zdG9wdGltZSA9IHYKICAgIAogICAgZGVmIHNwZWNzKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnN0YXJ0dGltZSwgc2VsZi5zdG9wdGltZSwgc2VsZi5kdCwgJ21vbnRocycsICdFdWxlcicKICAgIA%3D%3D%22%2C%0A%20%20%20%20%20%20%20%20%22simulation_models%2Fcompetitive_pricing.stmx%22%3A%20%22PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHhtaWxlIHZlcnNpb249IjEuMCIgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3htaWxlL25zL1hNSUxFL3YxLjAiIHhtbG5zOmlzZWU9Imh0dHA6Ly9pc2Vlc3lzdGVtcy5jb20vWE1JTEUiPgoJPGhlYWRlcj4KCQk8c21pbGUgdmVyc2lvbj0iMS4wIiBuYW1lc3BhY2U9InN0ZCwgaXNlZSIvPgoJCTxuYW1lPmNvbXBldGl0aXZlX3ByaWNpbmc8L25hbWU%2BCgkJPHV1aWQ%2BNGRlMjgyM2YtODNmNC00N2VmLThiNjUtNTA0MDQ1ODg5YWUxPC91dWlkPgoJCTx2ZW5kb3I%2BaXNlZSBzeXN0ZW1zLCBpbmMuPC92ZW5kb3I%2BCgkJPHByb2R1Y3QgdmVyc2lvbj0iMi4xIiBpc2VlOmJ1aWxkX251bWJlcj0iMjMyNCIgaXNlZTpzYXZlZF9ieV92MT0idHJ1ZSIgbGFuZz0iZW4iPlN0ZWxsYSBBcmNoaXRlY3Q8L3Byb2R1Y3Q%2BCgk8L2hlYWRlcj4KCTxzaW1fc3BlY3MgaXNlZTpzaW1fZHVyYXRpb249IjAiIGlzZWU6c2ltdWxhdGlvbl9kZWxheT0iMCIgaXNlZTpyZXN0b3JlX29uX3N0YXJ0PSJmYWxzZSIgbWV0aG9kPSJFdWxlciIgdGltZV91bml0cz0ibW9udGhzIiBpc2VlOmluc3RhbnRhbmVvdXNfZmxvd3M9InRydWUiIGlzZWU6bG9vcF9zY29yZXM9InRydWUiIGlzZWU6bG9vcF9leGhhdXN0aXZlX2FsbG93ZWQ9IjEwMDAiPgoJCTxzdGFydD4xPC9zdGFydD4KCQk8c3RvcD42MTwvc3RvcD4KCQk8ZHQ%2BMC4yNTwvZHQ%2BCgk8L3NpbV9zcGVjcz4KCTxpc2VlOnByZWZzIHNob3dfbW9kdWxlX3ByZWZpeD0idHJ1ZSIgbGl2ZV91cGRhdGVfb25fZHJhZz0idHJ1ZSIgc2hvd19yZXN0b3JlX2J1dHRvbnM9ImZhbHNlIiBsYXllcj0ibW9kZWwiIGludGVyZmFjZV9zY2FsZV91aT0idHJ1ZSIgaW50ZXJmYWNlX21heF9wYWdlX3dpZHRoPSIxMDAwMCIgaW50ZXJmYWNlX21heF9wYWdlX2hlaWdodD0iMTAwMDAiIGludGVyZmFjZV9taW5fcGFnZV93aWR0aD0iMCIgaW50ZXJmYWNlX21pbl9wYWdlX2hlaWdodD0iMCIgcmVydW5fb25fc3RydWN0dXJlX2NoYW5nZT0iZmFsc2UiIHNhdmVkX3J1bnM9IjUiIGtlZXA9ImZhbHNlIiByaWZwPSJ0cnVlIi8%2BCgk8aXNlZTptdWx0aXBsYXllcl9zZXR0aW5ncyBpbmNsdWRlX2NoYXQ9InRydWUiIGFsbG93X29ic2VydmVycz0iZmFsc2UiIGFkdmFuY2VfdGltZV9pbmNyZW1lbnQ9IjEiIG1heF9hZHZhbmNlX3RpbWVfaW5fbXM9IjAiIG9ic2VydmVyX3N0YXJ0X3BhZ2U9ImhvbWVfcGFnZSIgZW5hYmxlZD0iZmFsc2UiLz4KCTxpc2VlOnRpbWVfZm9ybWF0cyBkZWZhdWx0X2Zvcm1hdD0iQnVpbHRpbiI%2BCgkJPGlzZWU6dGltZV9mb3JtYXQgbmFtZT0iQnVpbHRpbiIgdHlwZT0iYWRhcHRpdmUiLz4KCTwvaXNlZTp0aW1lX2Zvcm1hdHM%2BCgk8ZGVmYXVsdF9mb3JtYXQvPgoJPG1vZGVsX3VuaXRzLz4KCTxtb2RlbD4KCQk8aXNlZTpleHRyYV9jb2xsZWN0aW9uX3ZhcmlhYmxlcz4KCQkJPGlzZWU6ZXh0cmFfY29sbGVjdGlvbl92YXJpYWJsZSBuYW1lPSJQcmljZSIvPgoJCQk8aXNlZTpleHRyYV9jb2xsZWN0aW9uX3ZhcmlhYmxlIG5hbWU9IkV4cGVjdGVkX1ByaWNlIi8%2BCgkJCTxpc2VlOmV4dHJhX2NvbGxlY3Rpb25fdmFyaWFibGUgbmFtZT0iUGVyY2VpdmVkX0ludmVudG9yeV9Db3ZlcmFnZSIvPgoJCQk8aXNlZTpleHRyYV9jb2xsZWN0aW9uX3ZhcmlhYmxlIG5hbWU9IkNvbnN1bXB0aW9uX1JhdGUiLz4KCQkJPGlzZWU6ZXh0cmFfY29sbGVjdGlvbl92YXJpYWJsZSBuYW1lPSJFeHBlY3RlZF9Qcm9maXRhYmlsaXR5Ii8%2BCgkJCTxpc2VlOmV4dHJhX2NvbGxlY3Rpb25fdmFyaWFibGUgbmFtZT0iSW52ZW50b3J5X0NvdmVyYWdlIi8%2BCgkJCTxpc2VlOmV4dHJhX2NvbGxlY3Rpb25fdmFyaWFibGUgbmFtZT0iQ2FwYWNpdHlfdXRpbGl6YXRpb24iLz4KCQkJPGlzZWU6ZXh0cmFfY29sbGVjdGlvbl92YXJpYWJsZSBuYW1lPSJEZW1hbmQiLz4KCQkJPGlzZWU6ZXh0cmFfY29sbGVjdGlvbl92YXJpYWJsZSBuYW1lPSJSZWxhdGl2ZV9WYWx1ZV9vZl9Qcm9kdWN0Ii8%2BCgkJCTxpc2VlOmV4dHJhX2NvbGxlY3Rpb25fdmFyaWFibGUgbmFtZT0icHJvZml0Ii8%2BCgkJCTxpc2VlOmV4dHJhX2NvbGxlY3Rpb25fdmFyaWFibGUgbmFtZT0iTm9ybWFsaXplZF9QZXJjZWllZF9JbnZlbnRvcnlfQ292ZXJhZ2UiLz4KCQk8L2lzZWU6ZXh0cmFfY29sbGVjdGlvbl92YXJpYWJsZXM%2BCgkJPHZhcmlhYmxlcz4KCQkJPHN0b2NrIG5hbWU9IlByb2R1Y3Rpb24gQ2FwYWNpdHkiPgoJCQkJPGVxbj4yMDA8L2Vxbj4KCQkJPC9zdG9jaz4KCQkJPHN0b2NrIG5hbWU9IlByb2R1Y3Rpb24iPgoJCQkJPGVxbj4zMDA8L2Vxbj4KCQkJCTxpbmZsb3c%2BUHJvZHVjdGlvbl9TdGFydF9SYXRlPC9pbmZsb3c%2BCgkJCQk8b3V0Zmxvdz5Qcm9kdWN0aW9uX1JhdGU8L291dGZsb3c%2BCgkJCTwvc3RvY2s%2BCgkJCTxzdG9jayBuYW1lPSJJbnZlbnRvcnkiPgoJCQkJPGVxbj4zMDA8L2Vxbj4KCQkJCTxpbmZsb3c%2BUHJvZHVjdGlvbl9SYXRlPC9pbmZsb3c%2BCgkJCQk8b3V0Zmxvdz5Db25zdW1wdGlvbl9SYXRlPC9vdXRmbG93PgoJCQk8L3N0b2NrPgoJCQk8c3RvY2sgbmFtZT0iRXhwZWN0ZWQgUHJpY2UiPgoJCQkJPGVxbj4zPC9lcW4%2BCgkJCQk8aW5mbG93PkNoYW5nZV9pbl9FeHBlY3RlZF9QcmljZTwvaW5mbG93PgoJCQk8L3N0b2NrPgoJCQk8ZmxvdyBuYW1lPSJQcm9kdWN0aW9uIFN0YXJ0IFJhdGUiPgoJCQkJPGVxbj5DYXBhY2l0eV91dGlsaXphdGlvbipQcm9kdWN0aW9uX0NhcGFjaXR5PC9lcW4%2BCgkJCQk8bm9uX25lZ2F0aXZlLz4KCQkJPC9mbG93PgoJCQk8ZmxvdyBuYW1lPSJQcm9kdWN0aW9uIFJhdGUiPgoJCQkJPGVxbj5NSU4oUHJvZHVjdGlvbiwgREVMQVkoUHJvZHVjdGlvbl9TdGFydF9SYXRlLCBQcm9kdWN0aW9uX1RpbWUsIDEwMCkpPC9lcW4%2BCgkJCQk8bm9uX25lZ2F0aXZlLz4KCQkJPC9mbG93PgoJCQk8ZmxvdyBuYW1lPSJDb25zdW1wdGlvbiBSYXRlIj4KCQkJCTxlcW4%2BTUlOKEludmVudG9yeSwgRGVtYW5kKTwvZXFuPgoJCQkJPG5vbl9uZWdhdGl2ZS8%2BCgkJCTwvZmxvdz4KCQkJPGF1eCBuYW1lPSJQcm9kdWN0aW9uIFRpbWUiPgoJCQkJPGVxbj4zPC9lcW4%2BCgkJCTwvYXV4PgoJCQk8YXV4IG5hbWU9IkludmVudG9yeSBDb3ZlcmFnZSI%2BCgkJCQk8ZXFuPkludmVudG9yeS9Db25zdW1wdGlvbl9SYXRlPC9lcW4%2BCgkJCTwvYXV4PgoJCQk8ZmxvdyBuYW1lPSJDaGFuZ2UgaW4gRXhwZWN0ZWQgUHJpY2UiPgoJCQkJPGVxbj4oSW5kaWNhdGVkX1ByaWNlLUV4cGVjdGVkX1ByaWNlKS9QcmljZV9BZGp1c3RtZW50X1RpbWU8L2Vxbj4KCQkJPC9mbG93PgoJCQk8YXV4IG5hbWU9ImNvc3QiPgoJCQkJPGVxbj5WYXJpYWJsZV9Db3N0K0NhcGFjaXR5X0Nvc3Q8L2Vxbj4KCQkJPC9hdXg%2BCgkJCTxhdXggbmFtZT0iUHJpY2UiPgoJCQkJPGVxbj5FeHBlY3RlZF9QcmljZSpFZmZlY3Rfb2ZfaW52ZW50b3J5X2NvdmVyYWdlX29uX3ByaWNlPC9lcW4%2BCgkJCTwvYXV4PgoJCQk8YXV4IG5hbWU9IkluZGljYXRlZCBQcmljZSI%2BCgkJCQk8ZXFuPk1BWChQcmljZSwgbWluaW11bV9wcmljZSk8L2Vxbj4KCQkJPC9hdXg%2BCgkJCTxhdXggbmFtZT0ibWluaW11bSBwcmljZSI%2BCgkJCQk8ZXFuPlVuaXRfVmFyaWFibGVfQ29zdCtjYXBhY2l0eV9jb3N0X3Blcl91bml0PC9lcW4%2BCgkJCTwvYXV4PgoJCQk8YXV4IG5hbWU9IkVmZmVjdCBvZiBpbnZlbnRvcnkgY292ZXJhZ2Ugb24gcHJpY2UiPgoJCQkJPGVxbj5Ob3JtYWxpemVkX1BlcmNlaWVkX0ludmVudG9yeV9Db3ZlcmFnZTwvZXFuPgoJCQkJPGdmPgoJCQkJCTx4c2NhbGUgbWluPSIwIiBtYXg9IjIiLz4KCQkJCQk8eXNjYWxlIG1pbj0iMCIgbWF4PSIyIi8%2BCgkJCQkJPHlwdHM%2BMS40MDQsMS40MTUsMS40MDQsMS4zNzIsMS4zNTEsMS4yNzcsMSwwLjc4NywwLjU1LDAuNCwwLjM0LDAuMjk4LDAuMjk4PC95cHRzPgoJCQkJPC9nZj4KCQkJPC9hdXg%2BCgkJCTxhdXggbmFtZT0icHJvZml0Ij4KCQkJCTxlcW4%2BcmV2ZW51ZS1jb3N0PC9lcW4%2BCgkJCTwvYXV4PgoJCQk8YXV4IG5hbWU9IkNhcGFjaXR5IHV0aWxpemF0aW9uIj4KCQkJCTxlcW4%2BRWZmZWN0X29mX1Byb2ZpdGFiaWxpdHlfb25fQ2FwYWNpdHlfVXRpbGl6YXRpb248L2Vxbj4KCQkJPC9hdXg%2BCgkJCTxhdXggbmFtZT0iVmFyaWFibGUgQ29zdCI%2BCgkJCQk8ZXFuPlVuaXRfVmFyaWFibGVfQ29zdCpQcm9kdWN0aW9uX1JhdGU8L2Vxbj4KCQkJPC9hdXg%2BCgkJCTxhdXggbmFtZT0iQ2FwYWNpdHkgQ29zdCI%2BCgkJCQk8ZXFuPlVuaXRfQ2FwYWNpdHlfQ29zdCpQcm9kdWN0aW9uX0NhcGFjaXR5PC9lcW4%2BCgkJCTwvYXV4PgoJCQk8YXV4IG5hbWU9IlByaWNlIG9mIFN1YnN0aXR1dGVzIj4KCQkJCTxlcW4%2BMzwvZXFuPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJSZWxhdGl2ZSBWYWx1ZSBvZiBQcm9kdWN0Ij4KCQkJCTxlcW4%2BUHJpY2Vfb2ZfU3Vic3RpdHV0ZXMvUHJpY2U8L2Vxbj4KCQkJPC9hdXg%2BCgkJCTxhdXggbmFtZT0iRGVtYW5kIj4KCQkJCTxlcW4%2BRWZmZWN0X29mX3JlbGF0aXZlX3ZhbHVlX29uX2RlbWFuZCpSZWZlcmVuY2VfRGVtYW5kPC9lcW4%2BCgkJCTwvYXV4PgoJCQk8YXV4IG5hbWU9IlVuaXQgQ2FwYWNpdHkgQ29zdCI%2BCgkJCQk8ZXFuPjAuNTwvZXFuPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJyZXZlbnVlIj4KCQkJCTxlcW4%2BQ29uc3VtcHRpb25fUmF0ZSpQcmljZTwvZXFuPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJFZmZlY3Qgb2YgUHJvZml0YWJpbGl0eSBvbiBDYXBhY2l0eSBVdGlsaXphdGlvbiI%2BCgkJCQk8ZXFuPk5vcm1hbGl6ZWRfRXhwZWN0ZWRfUHJvZml0YWJpbGl0eTwvZXFuPgoJCQkJPGdmPgoJCQkJCTx4c2NhbGUgbWluPSIwIiBtYXg9IjIiLz4KCQkJCQk8eXNjYWxlIG1pbj0iMCIgbWF4PSIxIi8%2BCgkJCQkJPHlwdHM%2BMC4zMjQsMC4zMywwLjM3MiwwLjM5NCwwLjQxLDAuNDIsMC41LDAuNzQ1LDAuODAwNzUsMC44NTY1LDAuOTEyMjUsMC45NjgsMC45Njg8L3lwdHM%2BCgkJCQk8L2dmPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJFZmZlY3Qgb2YgcmVsYXRpdmVcbnZhbHVlIG9uIGRlbWFuZCI%2BCgkJCQk8ZXFuPlJlbGF0aXZlX1ZhbHVlX29mX1Byb2R1Y3Q8L2Vxbj4KCQkJCTxnZj4KCQkJCQk8eHNjYWxlIG1pbj0iMCIgbWF4PSIyIi8%2BCgkJCQkJPHlzY2FsZSBtaW49IjAiIG1heD0iMiIvPgoJCQkJCTx5cHRzPjAuMTcsMC4xOTEsMC4yMTMsMC4yNzcsMC4zNTEsMC40NzksMSwxLjM2MiwxLjQ3OSwxLjU3NCwxLjYzOCwxLjY2LDEuNjY8L3lwdHM%2BCgkJCQk8L2dmPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJSZWZlcmVuY2UgRGVtYW5kIj4KCQkJCTxlcW4%2BMTAwK01hcmtldF9TaG9ja19PTipTVEVQKFNpemVfb2ZfU2hvY2ssIDEwKTwvZXFuPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJOb3JtYWxpemVkIFBlcmNlaWVkIEludmVudG9yeSBDb3ZlcmFnZSI%2BCgkJCQk8ZXFuPlBlcmNlaXZlZF9JbnZlbnRvcnlfQ292ZXJhZ2UvUmVmZXJlbmNlX0ludmVudG9yeV9Db3ZlcmFnZTwvZXFuPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJSZWZlcmVuY2UgSW52ZW50b3J5IENvdmVyYWdlIj4KCQkJCTxlcW4%2BMzwvZXFuPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJJbnZlbnRvcnkgY292ZXJhZ2UgcGVyY2VwdGlvbiB0aW1lIj4KCQkJCTxlcW4%2BMzwvZXFuPgoJCQk8L2F1eD4KCQkJPHN0b2NrIG5hbWU9IlBlcmNlaXZlZCBJbnZlbnRvcnkgQ292ZXJhZ2UiPgoJCQkJPGVxbj4zPC9lcW4%2BCgkJCQk8aW5mbG93PkNoYW5nZV9pbl9QZXJjZWl2ZWRfSW52ZW50b3J5X0NvdmVyYWdlPC9pbmZsb3c%2BCgkJCTwvc3RvY2s%2BCgkJCTxmbG93IG5hbWU9IkNoYW5nZSBpbiBQZXJjZWl2ZWQgSW52ZW50b3J5IENvdmVyYWdlIj4KCQkJCTxlcW4%2BKEludmVudG9yeV9Db3ZlcmFnZS1QZXJjZWl2ZWRfSW52ZW50b3J5X0NvdmVyYWdlKS9JbnZlbnRvcnlfY292ZXJhZ2VfcGVyY2VwdGlvbl90aW1lPC9lcW4%2BCgkJCTwvZmxvdz4KCQkJPGF1eCBuYW1lPSJQcmljZSBBZGp1c3RtZW50IFRpbWUiPgoJCQkJPGVxbj4zPC9lcW4%2BCgkJCTwvYXV4PgoJCQk8YXV4IG5hbWU9IlVuaXQgVmFyaWFibGUgQ29zdCI%2BCgkJCQk8ZXFuPjE8L2Vxbj4KCQkJPC9hdXg%2BCgkJCTxzdG9jayBuYW1lPSJFeHBlY3RlZCBQcm9maXRhYmlsaXR5Ij4KCQkJCTxlcW4%2BMTAwPC9lcW4%2BCgkJCQk8aW5mbG93PkNoYW5nZV9pbl9FeHBlY3RlZF9Qcm9maXRhYmlsaXR5PC9pbmZsb3c%2BCgkJCTwvc3RvY2s%2BCgkJCTxmbG93IG5hbWU9IkNoYW5nZSBpbiBFeHBlY3RlZCBQcm9maXRhYmlsaXR5Ij4KCQkJCTxlcW4%2BKHByb2ZpdC1FeHBlY3RlZF9Qcm9maXRhYmlsaXR5KS9Qcm9maXRfQWRqdXN0bWVudF9UaW1lPC9lcW4%2BCgkJCTwvZmxvdz4KCQkJPGF1eCBuYW1lPSJQcm9maXQgQWRqdXN0bWVudCBUaW1lIj4KCQkJCTxlcW4%2BMTI8L2Vxbj4KCQkJPC9hdXg%2BCgkJCTxhdXggbmFtZT0iTWFya2V0IFNob2NrIE9OIj4KCQkJCTxlcW4%2BMDwvZXFuPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJSZWZlcmVuY2UgRXhwZWN0ZWRcblByb2ZpdGFiaWxpdHkiPgoJCQkJPGVxbj4xMDA8L2Vxbj4KCQkJPC9hdXg%2BCgkJCTxhdXggbmFtZT0iTm9ybWFsaXplZCBFeHBlY3RlZCBQcm9maXRhYmlsaXR5Ij4KCQkJCTxlcW4%2BRXhwZWN0ZWRfUHJvZml0YWJpbGl0eS9SZWZlcmVuY2VfRXhwZWN0ZWRfUHJvZml0YWJpbGl0eTwvZXFuPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJTaXplIG9mIFNob2NrIj4KCQkJCTxlcW4%2BNTA8L2Vxbj4KCQkJPC9hdXg%2BCgkJCTxhdXggbmFtZT0iY2FwYWNpdHkgY29zdCBwZXIgdW5pdCI%2BCgkJCQk8ZXFuPkNhcGFjaXR5X0Nvc3QvUHJvZHVjdGlvbl9SYXRlPC9lcW4%2BCgkJCTwvYXV4PgoJCTwvdmFyaWFibGVzPgoJCTx2aWV3cz4KCQkJPHN0eWxlIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0id2hpdGUiIGZvbnRfc3R5bGU9Im5vcm1hbCIgZm9udF93ZWlnaHQ9Im5vcm1hbCIgdGV4dF9kZWNvcmF0aW9uPSJub25lIiB0ZXh0X2FsaWduPSJjZW50ZXIiIHZlcnRpY2FsX3RleHRfYWxpZ249ImNlbnRlciIgZm9udF9jb2xvcj0iYmxhY2siIGZvbnRfZmFtaWx5PSJBcmlhbCIgZm9udF9zaXplPSIxMHB0IiBwYWRkaW5nPSIyIiBib3JkZXJfY29sb3I9ImJsYWNrIiBib3JkZXJfd2lkdGg9InRoaW4iIGJvcmRlcl9zdHlsZT0ibm9uZSI%2BCgkJCQk8dGV4dF9ib3ggY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgdGV4dF9hbGlnbj0ibGVmdCIgdmVydGljYWxfdGV4dF9hbGlnbj0idG9wIiBmb250X3NpemU9IjEycHQiLz4KCQkJCTxpc2VlOmxvb3BfaW5kaWNhdG9yIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0id2hpdGUiIHRleHRfYWxpZ249ImxlZnQiIHZlcnRpY2FsX3RleHRfYWxpZ249InRvcCIgZm9udF9zaXplPSIxMnB0Ii8%2BCgkJCQk8bnVtZXJpY19kaXNwbGF5IGNvbG9yPSJibHVlIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9zaXplPSI5cHQiIGlzZWU6dHJhbnNwYXJlbnQ9ImZhbHNlIi8%2BCgkJCQk8Z3JhcGggY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9zaXplPSIxMnB0IiBheGlzX2NvbG9yPSIjNjY2NjY2IiBncmlkX2NvbG9yPSIjQzhDOEM4IiBpc2VlOmdyYXBoX2FyZWFfY29sb3I9IndoaXRlIiBsZWdlbmRfcG9zaXRpb249ImJvdHRvbSIgaXNlZTp0cmFuc3BhcmVudD0iZmFsc2UiIGlzZWU6aGlkZV9ib3JkZXI9ImZhbHNlIiBheGlzX3RpdGxlX2ZvbnRfc3R5bGU9Im5vcm1hbCIgYXhpc190aXRsZV9mb250X3dlaWdodD0ibm9ybWFsIiBheGlzX3RpdGxlX3RleHRfZGVjb3JhdGlvbj0ibm9uZSIgYXhpc190aXRsZV90ZXh0X2FsaWduPSJjZW50ZXIiIGF4aXNfdGl0bGVfdmVydGljYWxfdGV4dF9hbGlnbj0iY2VudGVyIiBheGlzX3RpdGxlX2ZvbnRfY29sb3I9ImJsYWNrIiBheGlzX3RpdGxlX2ZvbnRfZmFtaWx5PSJBcmlhbCIgYXhpc190aXRsZV9mb250X3NpemU9IjEycHQiIGF4aXNfdGl0bGVfdGV4dF9wYWRkaW5nPSIyIiBheGlzX3RpdGxlX3RleHRfYm9yZGVyX2NvbG9yPSJibGFjayIgYXhpc190aXRsZV90ZXh0X2JvcmRlcl93aWR0aD0idGhpbiIgYXhpc190aXRsZV90ZXh0X2JvcmRlcl9zdHlsZT0ibm9uZSIgYXhpc19sYWJlbF9mb250X3N0eWxlPSJub3JtYWwiIGF4aXNfbGFiZWxfZm9udF93ZWlnaHQ9Im5vcm1hbCIgYXhpc19sYWJlbF90ZXh0X2RlY29yYXRpb249Im5vbmUiIGF4aXNfbGFiZWxfdGV4dF9hbGlnbj0iY2VudGVyIiBheGlzX2xhYmVsX3ZlcnRpY2FsX3RleHRfYWxpZ249ImNlbnRlciIgYXhpc19sYWJlbF9mb250X2NvbG9yPSJibGFjayIgYXhpc19sYWJlbF9mb250X2ZhbWlseT0iQXJpYWwiIGF4aXNfbGFiZWxfZm9udF9zaXplPSI5cHQiIGF4aXNfbGFiZWxfdGV4dF9wYWRkaW5nPSIyIiBheGlzX2xhYmVsX3RleHRfYm9yZGVyX2NvbG9yPSJibGFjayIgYXhpc19sYWJlbF90ZXh0X2JvcmRlcl93aWR0aD0idGhpbiIgYXhpc19sYWJlbF90ZXh0X2JvcmRlcl9zdHlsZT0ibm9uZSI%2BCgkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlcz4KCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSJibHVlIiB0aGlja25lc3M9IjEiLz4KCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSJyZWQiIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkb3RfZGFzaGVkIi8%2BCgkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iZnVjaHNpYSIgdGhpY2tuZXNzPSIxIiBwZW5fc3R5bGU9ImRvdHRlZCIvPgoJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9IiMwMDhGNDQiIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkYXNoZWQiLz4KCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSIjRkY3RjAwIiB0aGlja25lc3M9IjEiLz4KCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSIjN0YwMEZGIiB0aGlja25lc3M9IjEiIHBlbl9zdHlsZT0iZG90X2Rhc2hlZCIvPgoJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9IiMwQ0EwRkYiIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkb3R0ZWQiLz4KCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSJsaW1lIiB0aGlja25lc3M9IjEiIHBlbl9zdHlsZT0iZGFzaGVkIi8%2BCgkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iI0ZGMDA3RiIgdGhpY2tuZXNzPSIxIi8%2BCgkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iYXF1YSIgdGhpY2tuZXNzPSIxIiBwZW5fc3R5bGU9ImRvdF9kYXNoZWQiLz4KCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSIjRjU4NkZGIiB0aGlja25lc3M9IjEiIHBlbl9zdHlsZT0iZG90dGVkIi8%2BCgkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iYmxhY2siIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkYXNoZWQiLz4KCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSIjQzhDOEM4IiB0aGlja25lc3M9IjEiLz4KCQkJCQk8L2lzZWU6c2VyaWVzX3N0eWxlcz4KCQkJCTwvZ3JhcGg%2BCgkJCQk8dGFibGUgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSIjRTBFMEUwIiB0ZXh0X2FsaWduPSJyaWdodCIgZm9udF9zaXplPSIxMnB0IiBvcmllbnRhdGlvbj0idmVydGljYWwiIHdyYXBfdGV4dD0iZmFsc2UiIGlzZWU6YXV0b19maXQ9InRydWUiIGlzZWU6dXNlX2FsdGVybmF0ZV9yb3dfY29sb3JzPSJmYWxzZSIgaXNlZTp1bmxpbWl0ZWRfdGFibGVfbGVuZ3RoPSJmYWxzZSIgYmxhbmtfY29sdW1uX3dpZHRoPSI4MCIgY29sdW1uX3dpZHRoPSIxNjAiIGludGVydmFsPSIxIiByZXBvcnRfYmFsYW5jZXM9ImVuZGluZyIgcmVwb3J0X2Zsb3dzPSJzdW1tZWQiIGhlYWRlcl9mb250X3N0eWxlPSJub3JtYWwiIGhlYWRlcl9mb250X3dlaWdodD0ibm9ybWFsIiBoZWFkZXJfdGV4dF9kZWNvcmF0aW9uPSJub25lIiBoZWFkZXJfdGV4dF9hbGlnbj0iY2VudGVyIiBoZWFkZXJfdmVydGljYWxfdGV4dF9hbGlnbj0iY2VudGVyIiBoZWFkZXJfZm9udF9jb2xvcj0iYmxhY2siIGhlYWRlcl9mb250X2ZhbWlseT0iQXJpYWwiIGhlYWRlcl9mb250X3NpemU9IjEycHQiIGhlYWRlcl90ZXh0X3BhZGRpbmc9IjIiIGhlYWRlcl90ZXh0X2JvcmRlcl9jb2xvcj0iYmxhY2siIGhlYWRlcl90ZXh0X2JvcmRlcl93aWR0aD0idGhpbiIgaGVhZGVyX3RleHRfYm9yZGVyX3N0eWxlPSJub25lIi8%2BCgkJCQk8YnV0dG9uIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0iI0UwRTBFMCIgZm9udF9zaXplPSIxMnB0IiBib3JkZXJfd2lkdGg9InRoaW4iIGJvcmRlcl9zdHlsZT0ic29saWQiIHRyYW5zcGFyZW50PSJmYWxzZSIgY29ybmVyX3JhZGl1cz0iMCIgaXNlZTpmbGF0PSJmYWxzZSIgaWNvbl9zaWRlPSJ0b3AiIGlzZWU6aGlnaGxpZ2h0X29uX2hvdmVyPSJmYWxzZSIgaXNlZTpoaWdobGlnaHRfY29sb3I9IiM5NTk1OTUiLz4KCQkJCTxpc2VlOmFubm90YXRpb24gY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSIjRTBFMEUwIiBmb250X3NpemU9IjEycHQiIGJvcmRlcl93aWR0aD0idGhpbiIgYm9yZGVyX3N0eWxlPSJzb2xpZCIgdHJhbnNwYXJlbnQ9ImZhbHNlIiBjb3JuZXJfcmFkaXVzPSIwIiBpc2VlOmZsYXQ9ImZhbHNlIiBpY29uX3NpZGU9InRvcCIgaXNlZTpoaWdobGlnaHRfb25faG92ZXI9ImZhbHNlIiBpc2VlOmhpZ2hsaWdodF9jb2xvcj0iIzk1OTU5NSIgcG9wdXBfY29ybmVyX3JhZGl1cz0iMCIgcG9wdXBfYmFja2dyb3VuZF9jb2xvcj0iI0ZGRkVDRiIvPgoJCQkJPHNsaWRlciBjb2xvcj0iYmxhY2siIGJhY2tncm91bmQ9IiNFMEUwRTAiIGZvbnRfc2l6ZT0iMTJwdCIgbnVtX3RpY2tzPSIzIiBsYWJlbF9zaWRlPSJ0b3AiIHdyYXBfdGl0bGU9InRydWUiIHZlcnRpY2FsPSJmYWxzZSIgaXNlZTpmYW5jeV9hcHBlYXJhbmNlPSJmYWxzZSIgaXNlZTpzaG93X2hvdmVyX3RpcD0id2hlbl9kZWNpZGluZyIgaW5wdXRfZXhwYW5kcz0idHJ1ZSIgaW5wdXRfd2lkdGg9IjEwMCIvPgoJCQkJPGlzZWU6c2ltX3NwZWVkX3NsaWRlciBjb2xvcj0iYmxhY2siIGJhY2tncm91bmQ9IndoaXRlIi8%2BCgkJCQk8aXNlZTp0aW1lX3NsaWRlciBjb2xvcj0iI0U5NUY3NCIgYmFja2dyb3VuZD0ic2lsdmVyIi8%2BCgkJCQk8aXNlZTpwaWVfaW5wdXQgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9zaXplPSIxMnB0IiBsZWdlbmRfcG9zaXRpb249ImJvdHRvbSIgaXNlZTp0cmFuc3BhcmVudD0iZmFsc2UiLz4KCQkJCTxrbm9iIGNvbG9yPSIjNjZDQzY2IiBiYWNrZ3JvdW5kPSIjRTBFMEUwIiBmb250X3NpemU9IjEycHQiIGxhYmVsX3NpZGU9ImJvdHRvbSIgd3JhcF90aXRsZT0idHJ1ZSIvPgoJCQkJPG51bWVyaWNfaW5wdXQgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSIjRTBFMEUwIiBmb250X3NpemU9IjEycHQiIGxhYmVsX3NpZGU9ImxlZnQiIHdyYXBfdGl0bGU9InRydWUiIGlucHV0X2V4cGFuZHM9ImZhbHNlIiBpbnB1dF93aWR0aD0iMTAwIi8%2BCgkJCQk8c3dpdGNoIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0iI0UwRTBFMCIgZm9udF9zaXplPSIxMnB0IiBsYWJlbF9zaWRlPSJ0b3AiIHdyYXBfdGl0bGU9InRydWUiIGlzZWU6YXBwZWFyYW5jZT0ic3dpdGNoIiBpc2VlOm9uX2NvbG9yPSJncmVlbiIvPgoJCQkJPG9wdGlvbnMgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgYXBwZWFyYW5jZT0icmFkaW8tYnV0dG9ucyIgYXJyYW5nZW1lbnQ9InZlcnRpY2FsIi8%2BCgkJCQk8Z3JhcGhpY2FsX2lucHV0IGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0iI0UwRTBFMCIgZm9udF9zaXplPSIxMnB0IiBpc2VlOnNob3dfaG92ZXJfdGlwPSJ0cnVlIi8%2BCgkJCQk8Z3JvdXBfaW5wdXQgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSIjRTBFMEUwIiBmb250X3NpemU9IjEycHQiLz4KCQkJCTxsYW1wIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0id2hpdGUiIGZvbnRfc2l6ZT0iOXB0Ii8%2BCgkJCQk8Z2F1Z2UgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9zaXplPSI5cHQiIG5lZWRsZV9jb2xvcj0iI0YwOUY3MiIgYmFyX2NvbG9yPSIjRUVFRUVFIiBiYXJfcHJvZ3Jlc3NfY29sb3I9ImJsYWNrIiBhcHBlYXJhbmNlPSJyYWRpYWwiIG51bV9tYWpvcl90aWNrcz0iMTEiIG51bV9taW5vcl90aWNrcz0iMTEiIHNob3dfbnVtZXJpY192YWx1ZT0idHJ1ZSIvPgoJCQkJPGlzZWU6c3BhdGlhbF9tYXAgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9zaXplPSIxMnB0Ii8%2BCgkJCQk8aXNlZTphbmltYXRpb25fb2JqZWN0IGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0id2hpdGUiIGZvbnRfc2l6ZT0iMTJwdCIvPgoJCQkJPGlzZWU6bmF2aWdhdGlvbl93aWRnZXQgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgdGV4dF9hbGlnbj0ibGVmdCIgdmVydGljYWxfdGV4dF9hbGlnbj0idG9wIiBmb250X3NpemU9IjEycHQiIGJvcmRlcl9jb2xvcj0iIzk5OTk5OSIgYm9yZGVyX3dpZHRoPSJ0aGluIiBib3JkZXJfc3R5bGU9InNvbGlkIiBpdGVtX3NwYWNpbmc9IjYiIGFwcGVhcmFuY2U9InRhYnMiIGNvcm5lcl9yYWRpdXM9IjQiIHNlbGVjdGVkX2l0ZW1fY29sb3I9ImJsYWNrIiBzZWxlY3RlZF9pdGVtX2JhY2tncm91bmQ9IndoaXRlIiBpdGVtX2JhY2tncm91bmQ9IiNEREREREQiLz4KCQkJCTxpc2VlOnNoYXBlIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0id2hpdGUiIHRleHRfYWxpZ249ImxlZnQiIHZlcnRpY2FsX3RleHRfYWxpZ249InRvcCIgZm9udF9zaXplPSIxMnB0IiBib3JkZXJfd2lkdGg9InRoaW4iIGJvcmRlcl9zdHlsZT0ic29saWQiIG9wYWNpdHk9IjEiIHRyYW5zcGFyZW50X2JhY2tncm91bmQ9InRydWUiLz4KCQkJCTxpc2VlOnNlbGVjdG9yIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0id2hpdGUiIHRleHRfYWxpZ249ImxlZnQiIHZlcnRpY2FsX3RleHRfYWxpZ249InRvcCIgZm9udF9zaXplPSIxMnB0Ii8%2BCgkJCQk8aXNlZTppZnJhbWUgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgdGV4dF9hbGlnbj0ibGVmdCIgdmVydGljYWxfdGV4dF9hbGlnbj0idG9wIiBmb250X3NpemU9IjEycHQiIGJvcmRlcl93aWR0aD0idGhpbiIgYm9yZGVyX3N0eWxlPSJzb2xpZCIvPgoJCQkJPGlzZWU6ZmluYW5jaWFsX3RhYmxlIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0id2hpdGUiIHRleHRfYWxpZ249InJpZ2h0IiBmb250X3NpemU9IjEycHQiIGhpZGVfYm9yZGVyPSJmYWxzZSIgYXV0b19maXQ9InRydWUiIGZpcnN0X2NvbHVtbl93aWR0aD0iMjUwIiBvdGhlcl9jb2x1bW5fd2lkdGg9IjEwMCIgaGVhZGVyX2ZvbnRfc3R5bGU9Im5vcm1hbCIgaGVhZGVyX2ZvbnRfd2VpZ2h0PSJib2xkIiBoZWFkZXJfdGV4dF9kZWNvcmF0aW9uPSJub25lIiBoZWFkZXJfdGV4dF9hbGlnbj0iY2VudGVyIiBoZWFkZXJfdmVydGljYWxfdGV4dF9hbGlnbj0iY2VudGVyIiBoZWFkZXJfZm9udF9jb2xvcj0iYmxhY2siIGhlYWRlcl9mb250X2ZhbWlseT0iQXJpYWwiIGhlYWRlcl9mb250X3NpemU9IjE0cHQiIGhlYWRlcl90ZXh0X3BhZGRpbmc9IjIiIGhlYWRlcl90ZXh0X2JvcmRlcl9jb2xvcj0iYmxhY2siIGhlYWRlcl90ZXh0X2JvcmRlcl93aWR0aD0idGhpbiIgaGVhZGVyX3RleHRfYm9yZGVyX3N0eWxlPSJub25lIi8%2BCgkJCTwvc3R5bGU%2BCgkJCTx2aWV3IGlzZWU6c2hvd19wYWdlcz0idHJ1ZSIgYmFja2dyb3VuZD0id2hpdGUiIHBhZ2Vfd2lkdGg9IjgxOCIgcGFnZV9oZWlnaHQ9IjU3MSIgaXNlZTpwYWdlX2NvbHM9IjMiIGlzZWU6cGFnZV9yb3dzPSIzIiBpc2VlOnNjcm9sbF94PSIyIiBpc2VlOnNjcm9sbF95PSIzIiBpc2VlOnBvcHVwX2dyYXBoc19hcmVfY29tcGFyYXRpdmU9InRydWUiIGlzZWU6ZW5hYmxlX25vbl9uZWdhdGl2ZV9oaWdobGlnaHRzPSJmYWxzZSIgdHlwZT0ic3RvY2tfZmxvdyI%2BCgkJCQk8c3R5bGUgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9zdHlsZT0ibm9ybWFsIiBmb250X3dlaWdodD0ibm9ybWFsIiB0ZXh0X2RlY29yYXRpb249Im5vbmUiIHRleHRfYWxpZ249ImNlbnRlciIgdmVydGljYWxfdGV4dF9hbGlnbj0iY2VudGVyIiBmb250X2NvbG9yPSJibGFjayIgZm9udF9mYW1pbHk9IkFyaWFsIiBmb250X3NpemU9IjEwcHQiIHBhZGRpbmc9IjIiIGJvcmRlcl9jb2xvcj0iYmxhY2siIGJvcmRlcl93aWR0aD0idGhpbiIgYm9yZGVyX3N0eWxlPSJub25lIj4KCQkJCQk8c3RvY2sgY29sb3I9ImJsdWUiIGJhY2tncm91bmQ9IndoaXRlIiBmb250X2NvbG9yPSJibHVlIiBmb250X3NpemU9IjdwdCIgbGFiZWxfc2lkZT0idG9wIj4KCQkJCQkJPHNoYXBlIHR5cGU9InJlY3RhbmdsZSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjM1Ii8%2BCgkJCQkJPC9zdG9jaz4KCQkJCQk8ZmxvdyBjb2xvcj0iYmx1ZSIgYmFja2dyb3VuZD0id2hpdGUiIGZvbnRfY29sb3I9ImJsdWUiIGZvbnRfc2l6ZT0iN3B0IiBsYWJlbF9zaWRlPSJib3R0b20iLz4KCQkJCQk8aXNlZTpwbGFjZWhvbGRlciBjb2xvcj0iIzIyOEIyMiIgYmFja2dyb3VuZD0id2hpdGUiIGZvbnRfY29sb3I9IiMyMjhCMjIiIGxhYmVsX3NpZGU9ImJvdHRvbSIvPgoJCQkJCTxtb2R1bGUgY29sb3I9ImJsdWUiIGJhY2tncm91bmQ9IndoaXRlIiBmb250X2NvbG9yPSJibHVlIiBmb250X3NpemU9IjdwdCIgbGFiZWxfc2lkZT0idG9wIj4KCQkJCQkJPHNoYXBlIHR5cGU9InJlY3RhbmdsZSIgd2lkdGg9IjU1IiBoZWlnaHQ9IjQ1Ii8%2BCgkJCQkJPC9tb2R1bGU%2BCgkJCQkJPGF1eCBjb2xvcj0iYmx1ZSIgYmFja2dyb3VuZD0id2hpdGUiIGZvbnRfY29sb3I9ImJsdWUiIGZvbnRfc2l6ZT0iN3B0IiBsYWJlbF9zaWRlPSJib3R0b20iPgoJCQkJCQk8c2hhcGUgdHlwZT0iY2lyY2xlIiByYWRpdXM9IjE4Ii8%2BCgkJCQkJPC9hdXg%2BCgkJCQkJPGdyb3VwIGNvbG9yPSJyZWQiIGJhY2tncm91bmQ9IndoaXRlIiBmb250X2NvbG9yPSJyZWQiIGZvbnRfc2l6ZT0iOXB0Ii8%2BCgkJCQkJPGNvbm5lY3RvciBjb2xvcj0iI0ZGMDA3RiIgYmFja2dyb3VuZD0id2hpdGUiIGZvbnRfY29sb3I9IiNGRjAwN0YiIGZvbnRfc2l6ZT0iOXB0IiBpc2VlOnRoaWNrbmVzcz0iMSIvPgoJCQkJCTx0ZXh0X2JveCBjb2xvcj0iYmxhY2siIGJhY2tncm91bmQ9IndoaXRlIiB0ZXh0X2FsaWduPSJsZWZ0IiB2ZXJ0aWNhbF90ZXh0X2FsaWduPSJ0b3AiIGZvbnRfc2l6ZT0iMTJwdCIvPgoJCQkJCTxpc2VlOmxvb3BfaW5kaWNhdG9yIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0id2hpdGUiIHRleHRfYWxpZ249ImxlZnQiIHZlcnRpY2FsX3RleHRfYWxpZ249InRvcCIgZm9udF9zaXplPSIxMnB0Ii8%2BCgkJCQkJPG51bWVyaWNfZGlzcGxheSBjb2xvcj0iYmx1ZSIgYmFja2dyb3VuZD0id2hpdGUiIGZvbnRfc2l6ZT0iOXB0IiBpc2VlOnRyYW5zcGFyZW50PSJmYWxzZSIvPgoJCQkJCTxncmFwaCBjb2xvcj0iYmxhY2siIGJhY2tncm91bmQ9IndoaXRlIiBmb250X3NpemU9IjEycHQiIGF4aXNfY29sb3I9IiM2NjY2NjYiIGdyaWRfY29sb3I9IiNDOEM4QzgiIGlzZWU6Z3JhcGhfYXJlYV9jb2xvcj0id2hpdGUiIGxlZ2VuZF9wb3NpdGlvbj0iYm90dG9tIiBpc2VlOnRyYW5zcGFyZW50PSJmYWxzZSIgaXNlZTpoaWRlX2JvcmRlcj0iZmFsc2UiIGF4aXNfdGl0bGVfZm9udF9zdHlsZT0ibm9ybWFsIiBheGlzX3RpdGxlX2ZvbnRfd2VpZ2h0PSJub3JtYWwiIGF4aXNfdGl0bGVfdGV4dF9kZWNvcmF0aW9uPSJub25lIiBheGlzX3RpdGxlX3RleHRfYWxpZ249ImNlbnRlciIgYXhpc190aXRsZV92ZXJ0aWNhbF90ZXh0X2FsaWduPSJjZW50ZXIiIGF4aXNfdGl0bGVfZm9udF9jb2xvcj0iYmxhY2siIGF4aXNfdGl0bGVfZm9udF9mYW1pbHk9IkFyaWFsIiBheGlzX3RpdGxlX2ZvbnRfc2l6ZT0iMTJwdCIgYXhpc190aXRsZV90ZXh0X3BhZGRpbmc9IjIiIGF4aXNfdGl0bGVfdGV4dF9ib3JkZXJfY29sb3I9ImJsYWNrIiBheGlzX3RpdGxlX3RleHRfYm9yZGVyX3dpZHRoPSJ0aGluIiBheGlzX3RpdGxlX3RleHRfYm9yZGVyX3N0eWxlPSJub25lIiBheGlzX2xhYmVsX2ZvbnRfc3R5bGU9Im5vcm1hbCIgYXhpc19sYWJlbF9mb250X3dlaWdodD0ibm9ybWFsIiBheGlzX2xhYmVsX3RleHRfZGVjb3JhdGlvbj0ibm9uZSIgYXhpc19sYWJlbF90ZXh0X2FsaWduPSJjZW50ZXIiIGF4aXNfbGFiZWxfdmVydGljYWxfdGV4dF9hbGlnbj0iY2VudGVyIiBheGlzX2xhYmVsX2ZvbnRfY29sb3I9ImJsYWNrIiBheGlzX2xhYmVsX2ZvbnRfZmFtaWx5PSJBcmlhbCIgYXhpc19sYWJlbF9mb250X3NpemU9IjlwdCIgYXhpc19sYWJlbF90ZXh0X3BhZGRpbmc9IjIiIGF4aXNfbGFiZWxfdGV4dF9ib3JkZXJfY29sb3I9ImJsYWNrIiBheGlzX2xhYmVsX3RleHRfYm9yZGVyX3dpZHRoPSJ0aGluIiBheGlzX2xhYmVsX3RleHRfYm9yZGVyX3N0eWxlPSJub25lIj4KCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlcz4KCQkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iYmx1ZSIgdGhpY2tuZXNzPSIxIi8%2BCgkJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9InJlZCIgdGhpY2tuZXNzPSIxIiBwZW5fc3R5bGU9ImRvdF9kYXNoZWQiLz4KCQkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iZnVjaHNpYSIgdGhpY2tuZXNzPSIxIiBwZW5fc3R5bGU9ImRvdHRlZCIvPgoJCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSIjMDA4RjQ0IiB0aGlja25lc3M9IjEiIHBlbl9zdHlsZT0iZGFzaGVkIi8%2BCgkJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9IiNGRjdGMDAiIHRoaWNrbmVzcz0iMSIvPgoJCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSIjN0YwMEZGIiB0aGlja25lc3M9IjEiIHBlbl9zdHlsZT0iZG90X2Rhc2hlZCIvPgoJCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSIjMENBMEZGIiB0aGlja25lc3M9IjEiIHBlbl9zdHlsZT0iZG90dGVkIi8%2BCgkJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9ImxpbWUiIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkYXNoZWQiLz4KCQkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iI0ZGMDA3RiIgdGhpY2tuZXNzPSIxIi8%2BCgkJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9ImFxdWEiIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkb3RfZGFzaGVkIi8%2BCgkJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9IiNGNTg2RkYiIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkb3R0ZWQiLz4KCQkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iYmxhY2siIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkYXNoZWQiLz4KCQkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iI0M4QzhDOCIgdGhpY2tuZXNzPSIxIi8%2BCgkJCQkJCTwvaXNlZTpzZXJpZXNfc3R5bGVzPgoJCQkJCTwvZ3JhcGg%2BCgkJCQkJPHRhYmxlIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0iI0UwRTBFMCIgdGV4dF9hbGlnbj0icmlnaHQiIGZvbnRfc2l6ZT0iMTJwdCIgb3JpZW50YXRpb249InZlcnRpY2FsIiB3cmFwX3RleHQ9ImZhbHNlIiBpc2VlOmF1dG9fZml0PSJ0cnVlIiBpc2VlOnVzZV9hbHRlcm5hdGVfcm93X2NvbG9ycz0iZmFsc2UiIGlzZWU6dW5saW1pdGVkX3RhYmxlX2xlbmd0aD0iZmFsc2UiIGJsYW5rX2NvbHVtbl93aWR0aD0iODAiIGNvbHVtbl93aWR0aD0iMTYwIiBpbnRlcnZhbD0iMSIgcmVwb3J0X2JhbGFuY2VzPSJlbmRpbmciIHJlcG9ydF9mbG93cz0ic3VtbWVkIiBoZWFkZXJfZm9udF9zdHlsZT0ibm9ybWFsIiBoZWFkZXJfZm9udF93ZWlnaHQ9Im5vcm1hbCIgaGVhZGVyX3RleHRfZGVjb3JhdGlvbj0ibm9uZSIgaGVhZGVyX3RleHRfYWxpZ249ImNlbnRlciIgaGVhZGVyX3ZlcnRpY2FsX3RleHRfYWxpZ249ImNlbnRlciIgaGVhZGVyX2ZvbnRfY29sb3I9ImJsYWNrIiBoZWFkZXJfZm9udF9mYW1pbHk9IkFyaWFsIiBoZWFkZXJfZm9udF9zaXplPSIxMnB0IiBoZWFkZXJfdGV4dF9wYWRkaW5nPSIyIiBoZWFkZXJfdGV4dF9ib3JkZXJfY29sb3I9ImJsYWNrIiBoZWFkZXJfdGV4dF9ib3JkZXJfd2lkdGg9InRoaW4iIGhlYWRlcl90ZXh0X2JvcmRlcl9zdHlsZT0ibm9uZSIvPgoJCQkJPC9zdHlsZT4KCQkJCTxzdG9jayB4PSIxNDAuNDc2IiB5PSIxODkuMjg2IiBuYW1lPSJQcm9kdWN0aW9uIENhcGFjaXR5Ii8%2BCgkJCQk8c3RvY2sgeD0iMzM2LjQyOSIgeT0iMTAxLjY2NyIgbmFtZT0iUHJvZHVjdGlvbiIvPgoJCQkJPHN0b2NrIHg9IjUwNy42OTgiIHk9IjEwMS42NjciIG5hbWU9IkludmVudG9yeSIvPgoJCQkJPHN0b2NrIHg9IjExNjguNSIgeT0iMTEwLjIzOCIgbmFtZT0iRXhwZWN0ZWQgUHJpY2UiLz4KCQkJCTxmbG93IHg9IjI2OC43NSIgeT0iOTUiIG5hbWU9IlByb2R1Y3Rpb24gU3RhcnQgUmF0ZSI%2BCgkJCQkJPHB0cz4KCQkJCQkJPHB0IHg9IjIyMy41NzEiIHk9Ijk1Ii8%2BCgkJCQkJCTxwdCB4PSIzMTMuOTI5IiB5PSI5NSIvPgoJCQkJCTwvcHRzPgoJCQkJPC9mbG93PgoJCQkJPGZsb3cgeD0iNDE2LjA2MyIgeT0iMTAxLjY2NyIgbmFtZT0iUHJvZHVjdGlvbiBSYXRlIj4KCQkJCQk8cHRzPgoJCQkJCQk8cHQgeD0iMzU4LjkyOSIgeT0iMTAxLjY2NyIvPgoJCQkJCQk8cHQgeD0iNDg1LjE5OCIgeT0iMTAxLjY2NyIvPgoJCQkJCTwvcHRzPgoJCQkJPC9mbG93PgoJCQkJPGZsb3cgeD0iNTgxLjY3IiB5PSI5Ny44NTcxIiBuYW1lPSJDb25zdW1wdGlvbiBSYXRlIj4KCQkJCQk8cHRzPgoJCQkJCQk8cHQgeD0iNTMwLjE5OCIgeT0iOTcuODU3MSIvPgoJCQkJCQk8cHQgeD0iNjU3LjE0MyIgeT0iOTcuODU3MSIvPgoJCQkJCTwvcHRzPgoJCQkJPC9mbG93PgoJCQkJPGNvbm5lY3RvciB1aWQ9IjEiIGFuZ2xlPSI3NS41NTEiPgoJCQkJCTxmcm9tPlByb2R1Y3Rpb248L2Zyb20%2BCgkJCQkJPHRvPlByb2R1Y3Rpb25fUmF0ZTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxjb25uZWN0b3IgdWlkPSIyIiBhbmdsZT0iMjY3LjI0OCI%2BCgkJCQkJPGZyb20%2BUHJvZHVjdGlvbl9TdGFydF9SYXRlPC9mcm9tPgoJCQkJCTx0bz5Qcm9kdWN0aW9uX1JhdGU8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8YXV4IHg9IjQzNC4wNjMiIHk9IjE3NSIgbmFtZT0iUHJvZHVjdGlvbiBUaW1lIi8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMyIgYW5nbGU9IjU3LjUwMTgiPgoJCQkJCTxmcm9tPlByb2R1Y3Rpb25fVGltZTwvZnJvbT4KCQkJCQk8dG8%2BUHJvZHVjdGlvbl9SYXRlPC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGF1eCB4PSI1NDcuMTQzIiB5PSIxNzUiIG5hbWU9IkludmVudG9yeSBDb3ZlcmFnZSIvPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjQiIGFuZ2xlPSIyNzQuNDk4Ij4KCQkJCQk8ZnJvbT5JbnZlbnRvcnk8L2Zyb20%2BCgkJCQkJPHRvPkludmVudG9yeV9Db3ZlcmFnZTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxmbG93IHg9IjExMDIuMjIiIHk9IjExNi40MjkiIG5hbWU9IkNoYW5nZSBpbiBFeHBlY3RlZCBQcmljZSI%2BCgkJCQkJPHB0cz4KCQkJCQkJPHB0IHg9IjEwNDYuNDMiIHk9IjExNi40MjkiLz4KCQkJCQkJPHB0IHg9IjExNDYiIHk9IjExNi40MjkiLz4KCQkJCQk8L3B0cz4KCQkJCTwvZmxvdz4KCQkJCTxhdXggeD0iMTk5MS44NyIgeT0iODQ5LjA5NSIgbmFtZT0iY29zdCIvPgoJCQkJPGF1eCB4PSIxMTU3LjYyIiB5PSIyMzgiIG5hbWU9IlByaWNlIi8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iNSIgYW5nbGU9IjI5Mi41NzQiPgoJCQkJCTxmcm9tPkV4cGVjdGVkX1ByaWNlPC9mcm9tPgoJCQkJCTx0bz5QcmljZTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxhdXggeD0iMTAwMS40MyIgeT0iMjMyLjg1NyIgbmFtZT0iSW5kaWNhdGVkIFByaWNlIi8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iNiIgYW5nbGU9IjIyMi43ODkiPgoJCQkJCTxmcm9tPlByaWNlPC9mcm9tPgoJCQkJCTx0bz5JbmRpY2F0ZWRfUHJpY2U8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iNyIgYW5nbGU9IjkyLjI5MDYiPgoJCQkJCTxmcm9tPkluZGljYXRlZF9QcmljZTwvZnJvbT4KCQkJCQk8dG8%2BQ2hhbmdlX2luX0V4cGVjdGVkX1ByaWNlPC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjgiIGFuZ2xlPSIyNzQuMjI4Ij4KCQkJCQk8ZnJvbT5FeHBlY3RlZF9QcmljZTwvZnJvbT4KCQkJCQk8dG8%2BQ2hhbmdlX2luX0V4cGVjdGVkX1ByaWNlPC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGF1eCB4PSI0MDEuODA5IiB5PSIxMzU3LjI2IiBuYW1lPSJtaW5pbXVtIHByaWNlIi8%2BCgkJCQk8YXV4IHg9IjExODQuOTEiIHk9IjI4MS41NzEiIG5hbWU9IkVmZmVjdCBvZiBpbnZlbnRvcnkgY292ZXJhZ2Ugb24gcHJpY2UiLz4KCQkJCTxjb25uZWN0b3IgdWlkPSI5IiBhbmdsZT0iMTIxLjc4NCI%2BCgkJCQkJPGZyb20%2BRWZmZWN0X29mX2ludmVudG9yeV9jb3ZlcmFnZV9vbl9wcmljZTwvZnJvbT4KCQkJCQk8dG8%2BUHJpY2U8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8YXV4IHg9IjIxMjUuODciIHk9Ijc4OC42OSIgbmFtZT0icHJvZml0Ii8%2BCgkJCQk8YXV4IHg9IjI1MC43NSIgeT0iMTU3IiBuYW1lPSJDYXBhY2l0eSB1dGlsaXphdGlvbiIvPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjEwIiBhbmdsZT0iNzMuODEwOCI%2BCgkJCQkJPGZyb20%2BQ2FwYWNpdHlfdXRpbGl6YXRpb248L2Zyb20%2BCgkJCQkJPHRvPlByb2R1Y3Rpb25fU3RhcnRfUmF0ZTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxhdXggbGFiZWxfc2lkZT0iYm90dG9tIiB4PSIyMDk5LjU4IiB5PSI5MTIuMDQ3IiBuYW1lPSJWYXJpYWJsZSBDb3N0Ii8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMTEiIGFuZ2xlPSIxNDkuNjk2Ij4KCQkJCQk8ZnJvbT5WYXJpYWJsZV9Db3N0PC9mcm9tPgoJCQkJCTx0bz5jb3N0PC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGF1eCB4PSIxOTQ1LjE1IiB5PSI5MDYuMjE0IiBuYW1lPSJDYXBhY2l0eSBDb3N0Ii8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMTIiIGFuZ2xlPSI0Ni43NTQzIj4KCQkJCQk8ZnJvbT5DYXBhY2l0eV9Db3N0PC9mcm9tPgoJCQkJCTx0bz5jb3N0PC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGF1eCB4PSIzMTEuNDI5IiB5PSI3OTAuODU3IiBuYW1lPSJQcmljZSBvZiBTdWJzdGl0dXRlcyIvPgoJCQkJPGF1eCB4PSIyODcuODU3IiB5PSI3MzIuMTQzIiBuYW1lPSJSZWxhdGl2ZSBWYWx1ZSBvZiBQcm9kdWN0Ii8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMTMiIGFuZ2xlPSI1NS41MDU0Ij4KCQkJCQk8ZnJvbT4KCQkJCQkJPGFsaWFzIHVpZD0iMTQiLz4KCQkJCQk8L2Zyb20%2BCgkJCQkJPHRvPlJlbGF0aXZlX1ZhbHVlX29mX1Byb2R1Y3Q8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMTUiIGFuZ2xlPSIxMjEuMDY1Ij4KCQkJCQk8ZnJvbT5QcmljZV9vZl9TdWJzdGl0dXRlczwvZnJvbT4KCQkJCQk8dG8%2BUmVsYXRpdmVfVmFsdWVfb2ZfUHJvZHVjdDwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxhdXggeD0iMzc1LjcxNCIgeT0iNjQ5LjM1NyIgbmFtZT0iRGVtYW5kIi8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMTYiIGFuZ2xlPSI3MS43ODQzIj4KCQkJCQk8ZnJvbT5JbnZlbnRvcnk8L2Zyb20%2BCgkJCQkJPHRvPkNvbnN1bXB0aW9uX1JhdGU8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8YXV4IHg9IjE5NjcuOTkiIHk9Ijk5OS43ODYiIG5hbWU9IlVuaXQgQ2FwYWNpdHkgQ29zdCIvPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjE3IiBhbmdsZT0iNjcuMzIxNCI%2BCgkJCQkJPGZyb20%2BVW5pdF9DYXBhY2l0eV9Db3N0PC9mcm9tPgoJCQkJCTx0bz5DYXBhY2l0eV9Db3N0PC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGF1eCB4PSIyMjU1IiB5PSI4MzAuNTI0IiB3aWR0aD0iMjIuMjg1NyIgaGVpZ2h0PSIyMi4yODU3IiBuYW1lPSJyZXZlbnVlIi8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMTgiIGFuZ2xlPSI3NS43MDQiPgoJCQkJCTxmcm9tPgoJCQkJCQk8YWxpYXMgdWlkPSIxOSIvPgoJCQkJCTwvZnJvbT4KCQkJCQk8dG8%2BcmV2ZW51ZTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxjb25uZWN0b3IgdWlkPSIyMCIgYW5nbGU9IjEzNy44OTkiPgoJCQkJCTxmcm9tPgoJCQkJCQk8YWxpYXMgdWlkPSIyMSIvPgoJCQkJCTwvZnJvbT4KCQkJCQk8dG8%2BcmV2ZW51ZTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxjb25uZWN0b3IgdWlkPSIyMiIgYW5nbGU9IjE1OS4zMSI%2BCgkJCQkJPGZyb20%2BcmV2ZW51ZTwvZnJvbT4KCQkJCQk8dG8%2BcHJvZml0PC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjIzIiBhbmdsZT0iMzYuMzE3MyI%2BCgkJCQkJPGZyb20%2BUHJvZHVjdGlvbl9DYXBhY2l0eTwvZnJvbT4KCQkJCQk8dG8%2BUHJvZHVjdGlvbl9TdGFydF9SYXRlPC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGF1eCB4PSIyNjguNzUiIHk9IjIxNS43ODYiIG5hbWU9IkVmZmVjdCBvZiBQcm9maXRhYmlsaXR5IG9uIENhcGFjaXR5IFV0aWxpemF0aW9uIi8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMjQiIGFuZ2xlPSI2NC41ODM0Ij4KCQkJCQk8ZnJvbT5FZmZlY3Rfb2ZfUHJvZml0YWJpbGl0eV9vbl9DYXBhY2l0eV9VdGlsaXphdGlvbjwvZnJvbT4KCQkJCQk8dG8%2BQ2FwYWNpdHlfdXRpbGl6YXRpb248L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8YXV4IHg9IjMyOS40MjkiIHk9IjY4OS4yODYiIG5hbWU9IkVmZmVjdCBvZiByZWxhdGl2ZVxudmFsdWUgb24gZGVtYW5kIi8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMjUiIGFuZ2xlPSI0NS44NzIiPgoJCQkJCTxmcm9tPlJlbGF0aXZlX1ZhbHVlX29mX1Byb2R1Y3Q8L2Zyb20%2BCgkJCQkJPHRvPkVmZmVjdF9vZl9yZWxhdGl2ZV92YWx1ZV9vbl9kZW1hbmQ8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMjYiIGFuZ2xlPSI0MC43ODM3Ij4KCQkJCQk8ZnJvbT5FZmZlY3Rfb2ZfcmVsYXRpdmVfdmFsdWVfb25fZGVtYW5kPC9mcm9tPgoJCQkJCTx0bz5EZW1hbmQ8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8YXV4IHg9IjQ1MS40MjkiIHk9IjcwNy4yODYiIG5hbWU9IlJlZmVyZW5jZSBEZW1hbmQiLz4KCQkJCTxjb25uZWN0b3IgdWlkPSIyNyIgYW5nbGU9IjE0Mi41ODEiPgoJCQkJCTxmcm9tPlJlZmVyZW5jZV9EZW1hbmQ8L2Zyb20%2BCgkJCQkJPHRvPkRlbWFuZDwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxhdXggeD0iMjAxOC4xIiB5PSIyMzMuODEiIG5hbWU9Ik5vcm1hbGl6ZWQgUGVyY2VpZWQgSW52ZW50b3J5IENvdmVyYWdlIi8%2BCgkJCQk8YXV4IHg9IjE5MzEiIHk9IjI5MSIgbmFtZT0iUmVmZXJlbmNlIEludmVudG9yeSBDb3ZlcmFnZSIvPgoJCQkJPGF1eCB4PSIxOTYzIiB5PSI0MTAuNzE0IiBuYW1lPSJJbnZlbnRvcnkgY292ZXJhZ2UgcGVyY2VwdGlvbiB0aW1lIi8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMjgiIGFuZ2xlPSIzMy4yOTAzIj4KCQkJCQk8ZnJvbT5SZWZlcmVuY2VfSW52ZW50b3J5X0NvdmVyYWdlPC9mcm9tPgoJCQkJCTx0bz5Ob3JtYWxpemVkX1BlcmNlaWVkX0ludmVudG9yeV9Db3ZlcmFnZTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxzdG9jayB4PSIyMDgwLjA3IiB5PSIzMzkuMjg2IiBuYW1lPSJQZXJjZWl2ZWQgSW52ZW50b3J5IENvdmVyYWdlIi8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMjkiIGFuZ2xlPSIyOTIuNDEyIj4KCQkJCQk8ZnJvbT5Db25zdW1wdGlvbl9SYXRlPC9mcm9tPgoJCQkJCTx0bz5JbnZlbnRvcnlfQ292ZXJhZ2U8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8ZmxvdyB4PSIyMDIzIiB5PSIzMzUuNzE0IiBuYW1lPSJDaGFuZ2UgaW4gUGVyY2VpdmVkIEludmVudG9yeSBDb3ZlcmFnZSI%2BCgkJCQkJPHB0cz4KCQkJCQkJPHB0IHg9IjE5NzYuNDMiIHk9IjMzNS43MTQiLz4KCQkJCQkJPHB0IHg9IjIwNTcuNTciIHk9IjMzNS43MTQiLz4KCQkJCQk8L3B0cz4KCQkJCTwvZmxvdz4KCQkJCTxjb25uZWN0b3IgdWlkPSIzMCIgYW5nbGU9IjQ4LjQ0NTIiPgoJCQkJCTxmcm9tPkludmVudG9yeV9jb3ZlcmFnZV9wZXJjZXB0aW9uX3RpbWU8L2Zyb20%2BCgkJCQkJPHRvPkNoYW5nZV9pbl9QZXJjZWl2ZWRfSW52ZW50b3J5X0NvdmVyYWdlPC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjMxIiBhbmdsZT0iOTAiPgoJCQkJCTxmcm9tPgoJCQkJCQk8YWxpYXMgdWlkPSIzMiIvPgoJCQkJCTwvZnJvbT4KCQkJCQk8dG8%2BQ2hhbmdlX2luX1BlcmNlaXZlZF9JbnZlbnRvcnlfQ292ZXJhZ2U8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMzMiIGFuZ2xlPSIyNjAuMzQ2Ij4KCQkJCQk8ZnJvbT5QZXJjZWl2ZWRfSW52ZW50b3J5X0NvdmVyYWdlPC9mcm9tPgoJCQkJCTx0bz5DaGFuZ2VfaW5fUGVyY2VpdmVkX0ludmVudG9yeV9Db3ZlcmFnZTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxhdXggeD0iMTA2MCIgeT0iMTc3LjcxNCIgbmFtZT0iUHJpY2UgQWRqdXN0bWVudCBUaW1lIi8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMzQiIGFuZ2xlPSI1NS40MzY2Ij4KCQkJCQk8ZnJvbT5QcmljZV9BZGp1c3RtZW50X1RpbWU8L2Zyb20%2BCgkJCQkJPHRvPkNoYW5nZV9pbl9FeHBlY3RlZF9QcmljZTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxhdXggeD0iMjE0Ny45OCIgeT0iOTgxLjc4NiIgbmFtZT0iVW5pdCBWYXJpYWJsZSBDb3N0Ii8%2BCgkJCQk8c3RvY2sgbGFiZWxfc2lkZT0idG9wIiB4PSIxMzY1LjY0IiB5PSI4MDkuMDQ3IiBuYW1lPSJFeHBlY3RlZCBQcm9maXRhYmlsaXR5Ii8%2BCgkJCQk8ZmxvdyB4PSIxMzAwLjQzIiB5PSI4MDkuMDQ3IiBuYW1lPSJDaGFuZ2UgaW4gRXhwZWN0ZWQgUHJvZml0YWJpbGl0eSI%2BCgkJCQkJPHB0cz4KCQkJCQkJPHB0IHg9IjEyNDUuNzEiIHk9IjgwOS4wNDciLz4KCQkJCQkJPHB0IHg9IjEzNDMuMTQiIHk9IjgwOS4wNDciLz4KCQkJCQk8L3B0cz4KCQkJCTwvZmxvdz4KCQkJCTxjb25uZWN0b3IgdWlkPSIzNSIgYW5nbGU9IjI0My41MjMiPgoJCQkJCTxmcm9tPkV4cGVjdGVkX1Byb2ZpdGFiaWxpdHk8L2Zyb20%2BCgkJCQkJPHRvPkNoYW5nZV9pbl9FeHBlY3RlZF9Qcm9maXRhYmlsaXR5PC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGF1eCB4PSIxMjUzLjQ5IiB5PSI4OTYuMDI0IiBuYW1lPSJQcm9maXQgQWRqdXN0bWVudCBUaW1lIi8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iMzYiIGFuZ2xlPSI2MS42NDc2Ij4KCQkJCQk8ZnJvbT5Qcm9maXRfQWRqdXN0bWVudF9UaW1lPC9mcm9tPgoJCQkJCTx0bz5DaGFuZ2VfaW5fRXhwZWN0ZWRfUHJvZml0YWJpbGl0eTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxjb25uZWN0b3IgdWlkPSIzNyIgYW5nbGU9IjczLjk3MDkiPgoJCQkJCTxmcm9tPgoJCQkJCQk8YWxpYXMgdWlkPSIzOCIvPgoJCQkJCTwvZnJvbT4KCQkJCQk8dG8%2BVmFyaWFibGVfQ29zdDwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxjb25uZWN0b3IgdWlkPSIzOSIgYW5nbGU9IjEyNC43NTciPgoJCQkJCTxmcm9tPlVuaXRfVmFyaWFibGVfQ29zdDwvZnJvbT4KCQkJCQk8dG8%2BVmFyaWFibGVfQ29zdDwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxjb25uZWN0b3IgdWlkPSI0MCIgYW5nbGU9IjQ5LjMwNDUiPgoJCQkJCTxmcm9tPgoJCQkJCQk8YWxpYXMgdWlkPSI0MSIvPgoJCQkJCTwvZnJvbT4KCQkJCQk8dG8%2BbWluaW11bV9wcmljZTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxjb25uZWN0b3IgdWlkPSI0MiIgYW5nbGU9IjI0LjI2NTEiPgoJCQkJCTxmcm9tPmNvc3Q8L2Zyb20%2BCgkJCQkJPHRvPnByb2ZpdDwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxhdXggeD0iNDk5Ljg1NyIgeT0iNzgxLjg1NyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBuYW1lPSJNYXJrZXQgU2hvY2sgT04iLz4KCQkJCTxhdXggeD0iMTE5OS41IiB5PSI3MzIuODU3IiBuYW1lPSJSZWZlcmVuY2UgRXhwZWN0ZWRcblByb2ZpdGFiaWxpdHkiLz4KCQkJCTxhdXggeD0iMTI3Ny42NyIgeT0iNjcwLjY2NiIgbmFtZT0iTm9ybWFsaXplZCBFeHBlY3RlZCBQcm9maXRhYmlsaXR5Ii8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iNDMiIGFuZ2xlPSIxMjIuNDQ2Ij4KCQkJCQk8ZnJvbT5FeHBlY3RlZF9Qcm9maXRhYmlsaXR5PC9mcm9tPgoJCQkJCTx0bz5Ob3JtYWxpemVkX0V4cGVjdGVkX1Byb2ZpdGFiaWxpdHk8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iNDQiIGFuZ2xlPSIzOC41MDYyIj4KCQkJCQk8ZnJvbT5SZWZlcmVuY2VfRXhwZWN0ZWRfUHJvZml0YWJpbGl0eTwvZnJvbT4KCQkJCQk8dG8%2BTm9ybWFsaXplZF9FeHBlY3RlZF9Qcm9maXRhYmlsaXR5PC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjQ1IiBhbmdsZT0iMTI0LjQ5NiI%2BCgkJCQkJPGZyb20%2BTWFya2V0X1Nob2NrX09OPC9mcm9tPgoJCQkJCTx0bz5SZWZlcmVuY2VfRGVtYW5kPC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGF1eCB4PSI0MjEuODU3IiB5PSI3OTYuMDcyIiBuYW1lPSJTaXplIG9mIFNob2NrIi8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iNDYiIGFuZ2xlPSI1My43NDQzIj4KCQkJCQk8ZnJvbT5TaXplX29mX1Nob2NrPC9mcm9tPgoJCQkJCTx0bz5SZWZlcmVuY2VfRGVtYW5kPC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjQ3IiBhbmdsZT0iMzEuNDI5NiI%2BCgkJCQkJPGZyb20%2BCgkJCQkJCTxhbGlhcyB1aWQ9IjQ4Ii8%2BCgkJCQkJPC9mcm9tPgoJCQkJCTx0bz5Db25zdW1wdGlvbl9SYXRlPC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjQ5IiBhbmdsZT0iOTAiPgoJCQkJCTxmcm9tPgoJCQkJCQk8YWxpYXMgdWlkPSI1MCIvPgoJCQkJCTwvZnJvbT4KCQkJCQk8dG8%2BQ2FwYWNpdHlfQ29zdDwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxjb25uZWN0b3IgdWlkPSI1MSIgYW5nbGU9IjcxLjg1NiI%2BCgkJCQkJPGZyb20%2BCgkJCQkJCTxhbGlhcyB1aWQ9IjUyIi8%2BCgkJCQkJPC9mcm9tPgoJCQkJCTx0bz5FZmZlY3Rfb2ZfUHJvZml0YWJpbGl0eV9vbl9DYXBhY2l0eV9VdGlsaXphdGlvbjwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxjb25uZWN0b3IgdWlkPSI1MyIgYW5nbGU9IjEwOS40NiI%2BCgkJCQkJPGZyb20%2BCgkJCQkJCTxhbGlhcyB1aWQ9IjU0Ii8%2BCgkJCQkJPC9mcm9tPgoJCQkJCTx0bz5FZmZlY3Rfb2ZfaW52ZW50b3J5X2NvdmVyYWdlX29uX3ByaWNlPC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjU1IiBhbmdsZT0iMTI0Ljc0NyI%2BCgkJCQkJPGZyb20%2BCgkJCQkJCTxhbGlhcyB1aWQ9IjU2Ii8%2BCgkJCQkJPC9mcm9tPgoJCQkJCTx0bz5DaGFuZ2VfaW5fRXhwZWN0ZWRfUHJvZml0YWJpbGl0eTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxjb25uZWN0b3IgdWlkPSI1NyIgYW5nbGU9IjExMC45ODciPgoJCQkJCTxmcm9tPlBlcmNlaXZlZF9JbnZlbnRvcnlfQ292ZXJhZ2U8L2Zyb20%2BCgkJCQkJPHRvPk5vcm1hbGl6ZWRfUGVyY2VpZWRfSW52ZW50b3J5X0NvdmVyYWdlPC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjU5IiBhbmdsZT0iMTAxLjYzNCI%2BCgkJCQkJPGZyb20%2BCgkJCQkJCTxhbGlhcyB1aWQ9IjU4Ii8%2BCgkJCQkJPC9mcm9tPgoJCQkJCTx0bz5JbmRpY2F0ZWRfUHJpY2U8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8YXV4IHg9IjQ0MSIgeT0iMTQxNC40IiBuYW1lPSJjYXBhY2l0eSBjb3N0IHBlciB1bml0Ii8%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iNjEiIGFuZ2xlPSI5Ni44MjkyIj4KCQkJCQk8ZnJvbT5jYXBhY2l0eV9jb3N0X3Blcl91bml0PC9mcm9tPgoJCQkJCTx0bz5taW5pbXVtX3ByaWNlPC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjYyIiBhbmdsZT0iMTEyLjM4Ij4KCQkJCQk8ZnJvbT4KCQkJCQkJPGFsaWFzIHVpZD0iNjAiLz4KCQkJCQk8L2Zyb20%2BCgkJCQkJPHRvPmNhcGFjaXR5X2Nvc3RfcGVyX3VuaXQ8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iNjQiIGFuZ2xlPSI5Ni41MTk4Ij4KCQkJCQk8ZnJvbT4KCQkJCQkJPGFsaWFzIHVpZD0iNjMiLz4KCQkJCQk8L2Zyb20%2BCgkJCQkJPHRvPmNhcGFjaXR5X2Nvc3RfcGVyX3VuaXQ8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8YWxpYXMgZm9udF9zdHlsZT0iaXRhbGljIiB1aWQ9IjMyIiB4PSIyMDIxLjcxIiB5PSI0MTEiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCI%2BCgkJCQkJPG9mPkludmVudG9yeV9Db3ZlcmFnZTwvb2Y%2BCgkJCQk8L2FsaWFzPgoJCQkJPGFsaWFzIGZvbnRfc3R5bGU9Iml0YWxpYyIgdWlkPSIyMSIgeD0iMjIzMC43OSIgeT0iOTA2LjQ3NiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4Ij4KCQkJCQk8b2Y%2BUHJpY2U8L29mPgoJCQkJPC9hbGlhcz4KCQkJCTxhbGlhcyBmb250X3N0eWxlPSJpdGFsaWMiIHVpZD0iMTQiIHg9IjIzNS4yODYiIHk9Ijc4Ny40MjkiIHdpZHRoPSIxNy4yODU3IiBoZWlnaHQ9IjE3LjI4NTciPgoJCQkJCTxvZj5QcmljZTwvb2Y%2BCgkJCQk8L2FsaWFzPgoJCQkJPGFsaWFzIGZvbnRfc3R5bGU9Iml0YWxpYyIgdWlkPSIxOSIgeD0iMjMwMi4zMSIgeT0iODk3LjIxNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4Ij4KCQkJCQk8b2Y%2BQ29uc3VtcHRpb25fUmF0ZTwvb2Y%2BCgkJCQk8L2FsaWFzPgoJCQkJPGFsaWFzIGZvbnRfc3R5bGU9Iml0YWxpYyIgdWlkPSIzOCIgeD0iMjA0Mi45OCIgeT0iOTc3LjY0MyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4Ij4KCQkJCQk8b2Y%2BUHJvZHVjdGlvbl9SYXRlPC9vZj4KCQkJCTwvYWxpYXM%2BCgkJCQk8YWxpYXMgY29sb3I9ImJsdWUiIGJhY2tncm91bmQ9IndoaXRlIiBmb250X3N0eWxlPSJpdGFsaWMiIHVpZD0iNDEiIHg9IjM1MC42NjciIHk9IjE0MDUuNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4Ij4KCQkJCQk8c2hhcGUgdHlwZT0iY2lyY2xlIiByYWRpdXM9IjE4Ii8%2BCgkJCQkJPG9mPlVuaXRfVmFyaWFibGVfQ29zdDwvb2Y%2BCgkJCQk8L2FsaWFzPgoJCQkJPGFsaWFzIGZvbnRfc3R5bGU9Iml0YWxpYyIgdWlkPSI0OCIgeD0iNTY5LjU3MSIgeT0iMjEyLjQyOSIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4Ij4KCQkJCQk8b2Y%2BRGVtYW5kPC9vZj4KCQkJCTwvYWxpYXM%2BCgkJCQk8YWxpYXMgZm9udF9zdHlsZT0iaXRhbGljIiB1aWQ9IjUwIiB4PSIxODU4Ljk1IiB5PSI5NzUuNzg2IiB3aWR0aD0iNDUiIGhlaWdodD0iMzUiPgoJCQkJCTxvZj5Qcm9kdWN0aW9uX0NhcGFjaXR5PC9vZj4KCQkJCTwvYWxpYXM%2BCgkJCQk8YWxpYXMgZm9udF9zdHlsZT0iaXRhbGljIiB1aWQ9IjUyIiB4PSIyNDEuNzUiIHk9IjI2MS43MTQiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCI%2BCgkJCQkJPG9mPk5vcm1hbGl6ZWRfRXhwZWN0ZWRfUHJvZml0YWJpbGl0eTwvb2Y%2BCgkJCQk8L2FsaWFzPgoJCQkJPGFsaWFzIGZvbnRfc3R5bGU9Iml0YWxpYyIgdWlkPSI1NCIgeD0iMTIwMC4yOSIgeT0iMzQxLjU3MSIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4Ij4KCQkJCQk8b2Y%2BTm9ybWFsaXplZF9QZXJjZWllZF9JbnZlbnRvcnlfQ292ZXJhZ2U8L29mPgoJCQkJPC9hbGlhcz4KCQkJCTxhbGlhcyBmb250X3N0eWxlPSJpdGFsaWMiIHVpZD0iNTYiIHg9IjEzMjUuMTQiIHk9Ijg5My41IiB3aWR0aD0iMTgiIGhlaWdodD0iMTgiPgoJCQkJCTxvZj5wcm9maXQ8L29mPgoJCQkJPC9hbGlhcz4KCQkJCTxhbGlhcyBmb250X3N0eWxlPSJpdGFsaWMiIHVpZD0iNTgiIHg9Ijk2NSIgeT0iMzEzIiB3aWR0aD0iMTgiIGhlaWdodD0iMTgiPgoJCQkJCTxvZj5taW5pbXVtX3ByaWNlPC9vZj4KCQkJCTwvYWxpYXM%2BCgkJCQk8YWxpYXMgZm9udF9zdHlsZT0iaXRhbGljIiB1aWQ9IjYwIiB4PSI0MjQiIHk9IjE0NjUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCI%2BCgkJCQkJPG9mPkNhcGFjaXR5X0Nvc3Q8L29mPgoJCQkJPC9hbGlhcz4KCQkJCTxhbGlhcyBmb250X3N0eWxlPSJpdGFsaWMiIHVpZD0iNjMiIHg9IjQ4NCIgeT0iMTQ1OSIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4Ij4KCQkJCQk8b2Y%2BUHJvZHVjdGlvbl9SYXRlPC9vZj4KCQkJCTwvYWxpYXM%2BCgkJCTwvdmlldz4KCQkJPHZpZXcgYmFja2dyb3VuZD0id2hpdGUiIHBhZ2Vfd2lkdGg9IjEwNjYiIHBhZ2VfaGVpZ2h0PSI2MDAiIGhvbWVfdmlldz0idHJ1ZSIgdHlwZT0iaW50ZXJmYWNlIj4KCQkJCTxzdHlsZS8%2BCgkJCQk8dGV4dF9ib3ggZm9udF93ZWlnaHQ9ImJvbGQiIGZvbnRfc2l6ZT0iNzJwdCIgeD0iOTEiIHk9IjI0NiIgd2lkdGg9IjkyMyIgaGVpZ2h0PSIyMDQiPkNvbW1vZGl0eSBQcmljaW5nIE1vZGVsPC90ZXh0X2JveD4KCQkJPC92aWV3PgoJCQk8dmlldyBiYWNrZ3JvdW5kPSJ3aGl0ZSIgcGFnZV93aWR0aD0iMTA2NiIgcGFnZV9oZWlnaHQ9IjYwMCIgdHlwZT0iaW50ZXJmYWNlIj4KCQkJCTxzdHlsZS8%2BCgkJCQk8Z3JhcGhpY3NfZnJhbWUgZmlsbD0ibm9uZSIgeD0iNzYzIiB5PSIyNjEiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj4KCQkJCQk8aW1hZ2Ugd2lkdGg9IjAiIGhlaWdodD0iMCIgc2l6ZV90b19wYXJlbnQ9ImZhbHNlIiBpc2VlOmZpeGVkX2FzcGVjdF9yYXRpbz0idHJ1ZSIvPgoJCQkJPC9ncmFwaGljc19mcmFtZT4KCQkJCTxzdGFja2VkX2NvbnRhaW5lciB4PSIxMTYiIHk9IjE0OCIgd2lkdGg9IjM3OSIgaGVpZ2h0PSIyNzYiPgoJCQkJCTxncmFwaCB3aWR0aD0iMzc5IiBoZWlnaHQ9IjI3NiIgdHlwZT0idGltZV9zZXJpZXMiIGlzZWU6cG9pbnRzX29ubHk9ImZhbHNlIiBzaG93X2dyaWQ9ImZhbHNlIiBpbmNsdWRlX3VuaXRzX2luX2xlZ2VuZD0iZmFsc2UiIHBsb3RfbnVtYmVycz0iZmFsc2UiIGlzZWU6bGFiZWxfcGllX3NsaWNlcz0iZmFsc2UiIG51bV94X2dyaWRfbGluZXM9IjAiIG51bV95X2dyaWRfbGluZXM9IjAiIG51bV94X2xhYmVscz0iNSIgbnVtX3lfbGFiZWxzPSIzIiBpc2VlOmZpbGxfaW50ZW5zaXR5PSIwLjEiIGxlZnRfYXhpc19tdWx0aV9zY2FsZT0iZmFsc2UiIGxlZnRfYXhpc19hdXRvX3NjYWxlPSJ0cnVlIiBsZWZ0X2luY2x1ZGVfdW5pdHM9InRydWUiIHJpZ2h0X2F4aXNfbXVsdGlfc2NhbGU9ImZhbHNlIiByaWdodF9heGlzX2F1dG9fc2NhbGU9InRydWUiIHJpZ2h0X2luY2x1ZGVfdW5pdHM9InRydWUiPgoJCQkJCQk8cGxvdCBjb2xvcj0iYmx1ZSIgaXNlZTprZWVwX3plcm9fdmlzaWJsZT0idHJ1ZSIgcGVuX3dpZHRoPSIxIiBpbmRleD0iMCIgc2hvd195X2F4aXM9InRydWUiPgoJCQkJCQkJPGVudGl0eSBuYW1lPSJSZWZlcmVuY2VfRGVtYW5kIi8%2BCgkJCQkJCTwvcGxvdD4KCQkJCQk8L2dyYXBoPgoJCQkJPC9zdGFja2VkX2NvbnRhaW5lcj4KCQkJCTxzbGlkZXIgeD0iNDE0LjUiIHk9IjQ0MSIgd2lkdGg9IjE5MyIgaGVpZ2h0PSI3OCIgbWluPSIwIiBtYXg9IjIwIiBpc2VlOm5hdmlnYXRlX3RvPSJmYWxzZSIgc2hvd19uYW1lPSJ0cnVlIj4KCQkJCQk8ZW50aXR5IG5hbWU9Ik1hcmtldF9TaG9ja19PTiIvPgoJCQkJCTxyZXNldF90byBhZnRlcj0ibmV2ZXIiPjA8L3Jlc2V0X3RvPgoJCQkJPC9zbGlkZXI%2BCgkJCQk8dGV4dF9ib3ggZm9udF93ZWlnaHQ9ImJvbGQiIHRleHRfZGVjb3JhdGlvbj0idW5kZXJsaW5lIiBmb250X3NpemU9IjI0cHQiIHg9IjM3NCIgeT0iNDgiIHdpZHRoPSIzMjIiIGhlaWdodD0iNTgiPk1hcmtldCBpbXBhY3Qgb24gZGVtYW5kPC90ZXh0X2JveD4KCQkJCTxzdGFja2VkX2NvbnRhaW5lciB4PSI1NjciIHk9IjE0NSIgd2lkdGg9IjM5MSIgaGVpZ2h0PSIyODIiPgoJCQkJCTxncmFwaCB3aWR0aD0iMzkxIiBoZWlnaHQ9IjI4MiIgdHlwZT0idGltZV9zZXJpZXMiIGlzZWU6cG9pbnRzX29ubHk9ImZhbHNlIiBzaG93X2dyaWQ9ImZhbHNlIiBpbmNsdWRlX3VuaXRzX2luX2xlZ2VuZD0iZmFsc2UiIHBsb3RfbnVtYmVycz0iZmFsc2UiIGlzZWU6bGFiZWxfcGllX3NsaWNlcz0iZmFsc2UiIG51bV94X2dyaWRfbGluZXM9IjAiIG51bV95X2dyaWRfbGluZXM9IjAiIG51bV94X2xhYmVscz0iNSIgbnVtX3lfbGFiZWxzPSIzIiBpc2VlOmZpbGxfaW50ZW5zaXR5PSIwLjEiIGxlZnRfYXhpc19tdWx0aV9zY2FsZT0iZmFsc2UiIGxlZnRfYXhpc19hdXRvX3NjYWxlPSJ0cnVlIiBsZWZ0X2luY2x1ZGVfdW5pdHM9InRydWUiIHJpZ2h0X2F4aXNfbXVsdGlfc2NhbGU9ImZhbHNlIiByaWdodF9heGlzX2F1dG9fc2NhbGU9InRydWUiIHJpZ2h0X2luY2x1ZGVfdW5pdHM9InRydWUiPgoJCQkJCQk8cGxvdCBjb2xvcj0iYmx1ZSIgaXNlZTprZWVwX3plcm9fdmlzaWJsZT0idHJ1ZSIgcGVuX3dpZHRoPSIxIiBpbmRleD0iMCIgc2hvd195X2F4aXM9InRydWUiPgoJCQkJCQkJPGVudGl0eSBuYW1lPSJEZW1hbmQiLz4KCQkJCQkJPC9wbG90PgoJCQkJCTwvZ3JhcGg%2BCgkJCQk8L3N0YWNrZWRfY29udGFpbmVyPgoJCQk8L3ZpZXc%2BCgkJCTx2aWV3IGJhY2tncm91bmQ9IndoaXRlIiBwYWdlX3dpZHRoPSIxMDY2IiBwYWdlX2hlaWdodD0iNjAwIiBpc2VlOnNjcm9sbF94PSI0IiBpc2VlOnNjcm9sbF95PSIzIiB0eXBlPSJpbnRlcmZhY2UiPgoJCQkJPHN0eWxlLz4KCQkJCTx0ZXh0X2JveCBmb250X3dlaWdodD0iYm9sZCIgdGV4dF9kZWNvcmF0aW9uPSJ1bmRlcmxpbmUiIGZvbnRfc2l6ZT0iMjRwdCIgeD0iMjc3IiB5PSI0OCIgd2lkdGg9IjU2MyIgaGVpZ2h0PSI1OCI%2BUmVsYXRpdmUgdmFsdWUgb2YgcHJvZHVjdCBpbXBhY3Qgb24gZGVtYW5kPC90ZXh0X2JveD4KCQkJCTxzdGFja2VkX2NvbnRhaW5lciB4PSI1NjciIHk9IjE0NSIgd2lkdGg9IjM5MSIgaGVpZ2h0PSIyODIiPgoJCQkJCTxncmFwaCB3aWR0aD0iMzkxIiBoZWlnaHQ9IjI4MiIgdHlwZT0idGltZV9zZXJpZXMiIGlzZWU6cG9pbnRzX29ubHk9ImZhbHNlIiBzaG93X2dyaWQ9ImZhbHNlIiBpbmNsdWRlX3VuaXRzX2luX2xlZ2VuZD0iZmFsc2UiIHBsb3RfbnVtYmVycz0iZmFsc2UiIGlzZWU6bGFiZWxfcGllX3NsaWNlcz0iZmFsc2UiIG51bV94X2dyaWRfbGluZXM9IjAiIG51bV95X2dyaWRfbGluZXM9IjAiIG51bV94X2xhYmVscz0iNSIgbnVtX3lfbGFiZWxzPSIzIiBpc2VlOmZpbGxfaW50ZW5zaXR5PSIwLjEiIGxlZnRfYXhpc19tdWx0aV9zY2FsZT0iZmFsc2UiIGxlZnRfYXhpc19hdXRvX3NjYWxlPSJ0cnVlIiBsZWZ0X2luY2x1ZGVfdW5pdHM9InRydWUiIHJpZ2h0X2F4aXNfbXVsdGlfc2NhbGU9ImZhbHNlIiByaWdodF9heGlzX2F1dG9fc2NhbGU9InRydWUiIHJpZ2h0X2luY2x1ZGVfdW5pdHM9InRydWUiPgoJCQkJCQk8cGxvdCBjb2xvcj0iYmx1ZSIgaXNlZTprZWVwX3plcm9fdmlzaWJsZT0idHJ1ZSIgcGVuX3dpZHRoPSIxIiBpbmRleD0iMCIgc2hvd195X2F4aXM9InRydWUiPgoJCQkJCQkJPGVudGl0eSBuYW1lPSJEZW1hbmQiLz4KCQkJCQkJPC9wbG90PgoJCQkJCTwvZ3JhcGg%2BCgkJCQk8L3N0YWNrZWRfY29udGFpbmVyPgoJCQkJPHN0YWNrZWRfY29udGFpbmVyIHg9IjEwNCIgeT0iMTQ4IiB3aWR0aD0iMzc5IiBoZWlnaHQ9IjI3NiI%2BCgkJCQkJPGdyYXBoIHdpZHRoPSIzNzkiIGhlaWdodD0iMjc2IiB0eXBlPSJ0aW1lX3NlcmllcyIgaXNlZTpwb2ludHNfb25seT0iZmFsc2UiIHNob3dfZ3JpZD0iZmFsc2UiIGluY2x1ZGVfdW5pdHNfaW5fbGVnZW5kPSJmYWxzZSIgcGxvdF9udW1iZXJzPSJmYWxzZSIgaXNlZTpsYWJlbF9waWVfc2xpY2VzPSJmYWxzZSIgbnVtX3hfZ3JpZF9saW5lcz0iMCIgbnVtX3lfZ3JpZF9saW5lcz0iMCIgbnVtX3hfbGFiZWxzPSI1IiBudW1feV9sYWJlbHM9IjMiIGlzZWU6ZmlsbF9pbnRlbnNpdHk9IjAuMSIgbGVmdF9heGlzX211bHRpX3NjYWxlPSJmYWxzZSIgbGVmdF9heGlzX2F1dG9fc2NhbGU9InRydWUiIGxlZnRfaW5jbHVkZV91bml0cz0idHJ1ZSIgcmlnaHRfYXhpc19tdWx0aV9zY2FsZT0iZmFsc2UiIHJpZ2h0X2F4aXNfYXV0b19zY2FsZT0idHJ1ZSIgcmlnaHRfaW5jbHVkZV91bml0cz0idHJ1ZSI%2BCgkJCQkJCTxwbG90IGNvbG9yPSJibHVlIiBpc2VlOmtlZXBfemVyb192aXNpYmxlPSJ0cnVlIiBwZW5fd2lkdGg9IjEiIGluZGV4PSIwIiBzaG93X3lfYXhpcz0idHJ1ZSI%2BCgkJCQkJCQk8ZW50aXR5IG5hbWU9IlJlbGF0aXZlX1ZhbHVlX29mX1Byb2R1Y3QiLz4KCQkJCQkJPC9wbG90PgoJCQkJCTwvZ3JhcGg%2BCgkJCQk8L3N0YWNrZWRfY29udGFpbmVyPgoJCQkJPHRleHRfYm94IGZvbnRfc2l6ZT0iMTRwdCIgeD0iMTA5IiB5PSI0NTYiIHdpZHRoPSIzNTEiIGhlaWdodD0iNTgiPlJlbGF0aXZlIHZhbHVlIG9mIHByb2R1Y3QgaXMgaW5mbHVlbmNlZCBieSB0aGUgcHJpY2Ugb2YgdGhlIHByb2R1Y3QgYW5kIHRoZSBwcmljZSBvZiBzdWJzdGl0dXRlczwvdGV4dF9ib3g%2BCgkJCTwvdmlldz4KCQkJPHZpZXcgYmFja2dyb3VuZD0id2hpdGUiIHBhZ2Vfd2lkdGg9IjEwNjYiIHBhZ2VfaGVpZ2h0PSI2MDAiIGlzZWU6c2Nyb2xsX3k9IjQiIHR5cGU9ImludGVyZmFjZSI%2BCgkJCQk8c3R5bGUvPgoJCQkJPHRleHRfYm94IGZvbnRfd2VpZ2h0PSJib2xkIiB0ZXh0X2RlY29yYXRpb249InVuZGVybGluZSIgZm9udF9zaXplPSIyNHB0IiB4PSI0NDYiIHk9IjUwIiB3aWR0aD0iMzIyIiBoZWlnaHQ9IjU4Ij5QcmljZSBNb2RlbDwvdGV4dF9ib3g%2BCgkJCQk8dGV4dF9ib3ggZm9udF9zaXplPSIxNHB0IiB4PSI4NyIgeT0iMTEwIiB3aWR0aD0iNDM2IiBoZWlnaHQ9IjE5Ij5wcmljZSBpcyBhIGNvbXBvc2l0aW9uIG9mIGV4cGVjdGVkIHByaWNlIGFuZCBpbnZlbnRvcnkgY292ZXJhZ2U8L3RleHRfYm94PgoJCQkJPHN0YWNrZWRfY29udGFpbmVyIHg9IjU2MiIgeT0iMTYzIiB3aWR0aD0iMzc5IiBoZWlnaHQ9IjI3NiI%2BCgkJCQkJPGdyYXBoIHdpZHRoPSIzNzkiIGhlaWdodD0iMjc2IiB0eXBlPSJ0aW1lX3NlcmllcyIgaXNlZTpwb2ludHNfb25seT0iZmFsc2UiIHNob3dfZ3JpZD0iZmFsc2UiIGluY2x1ZGVfdW5pdHNfaW5fbGVnZW5kPSJmYWxzZSIgcGxvdF9udW1iZXJzPSJmYWxzZSIgaXNlZTpsYWJlbF9waWVfc2xpY2VzPSJmYWxzZSIgbnVtX3hfZ3JpZF9saW5lcz0iMCIgbnVtX3lfZ3JpZF9saW5lcz0iMCIgbnVtX3hfbGFiZWxzPSI1IiBudW1feV9sYWJlbHM9IjMiIGlzZWU6ZmlsbF9pbnRlbnNpdHk9IjAuMSIgbGVmdF9heGlzX211bHRpX3NjYWxlPSJmYWxzZSIgbGVmdF9heGlzX2F1dG9fc2NhbGU9InRydWUiIGxlZnRfaW5jbHVkZV91bml0cz0idHJ1ZSIgcmlnaHRfYXhpc19tdWx0aV9zY2FsZT0iZmFsc2UiIHJpZ2h0X2F4aXNfYXV0b19zY2FsZT0idHJ1ZSIgcmlnaHRfaW5jbHVkZV91bml0cz0idHJ1ZSI%2BCgkJCQkJCTxwbG90IGNvbG9yPSJibHVlIiBpc2VlOmtlZXBfemVyb192aXNpYmxlPSJ0cnVlIiBwZW5fd2lkdGg9IjEiIGluZGV4PSIwIiBzaG93X3lfYXhpcz0idHJ1ZSI%2BCgkJCQkJCQk8ZW50aXR5IG5hbWU9IlByaWNlIi8%2BCgkJCQkJCTwvcGxvdD4KCQkJCQkJPHBsb3QgaXNlZTppbW1lZGlhdGVseV91cGRhdGVfb25fdXNlcl9pbnB1dD0idHJ1ZSIgY29sb3I9InJlZCIgcGVuX3N0eWxlPSJkb3RfZGFzaGVkIiBpc2VlOmtlZXBfemVyb192aXNpYmxlPSJ0cnVlIiBwZW5fd2lkdGg9IjEiIGluZGV4PSIxIiBzaG93X3lfYXhpcz0idHJ1ZSI%2BCgkJCQkJCQk8ZW50aXR5IG5hbWU9IkV4cGVjdGVkX1ByaWNlIi8%2BCgkJCQkJCTwvcGxvdD4KCQkJCQk8L2dyYXBoPgoJCQkJPC9zdGFja2VkX2NvbnRhaW5lcj4KCQkJCTxzdGFja2VkX2NvbnRhaW5lciB4PSIxMDgiIHk9IjE2NC41IiB3aWR0aD0iMzc4IiBoZWlnaHQ9IjI3MyI%2BCgkJCQkJPGdyYXBoIHdpZHRoPSIzNzgiIGhlaWdodD0iMjczIiB0eXBlPSJ0aW1lX3NlcmllcyIgaXNlZTpwb2ludHNfb25seT0iZmFsc2UiIHNob3dfZ3JpZD0iZmFsc2UiIGluY2x1ZGVfdW5pdHNfaW5fbGVnZW5kPSJmYWxzZSIgcGxvdF9udW1iZXJzPSJmYWxzZSIgaXNlZTpsYWJlbF9waWVfc2xpY2VzPSJmYWxzZSIgbnVtX3hfZ3JpZF9saW5lcz0iMCIgbnVtX3lfZ3JpZF9saW5lcz0iMCIgbnVtX3hfbGFiZWxzPSI1IiBudW1feV9sYWJlbHM9IjMiIGlzZWU6ZmlsbF9pbnRlbnNpdHk9IjAuMSIgbGVmdF9heGlzX211bHRpX3NjYWxlPSJmYWxzZSIgbGVmdF9heGlzX2F1dG9fc2NhbGU9InRydWUiIGxlZnRfaW5jbHVkZV91bml0cz0idHJ1ZSIgcmlnaHRfYXhpc19tdWx0aV9zY2FsZT0iZmFsc2UiIHJpZ2h0X2F4aXNfYXV0b19zY2FsZT0idHJ1ZSIgcmlnaHRfaW5jbHVkZV91bml0cz0idHJ1ZSI%2BCgkJCQkJCTxwbG90IGNvbG9yPSJibHVlIiBpc2VlOmtlZXBfemVyb192aXNpYmxlPSJ0cnVlIiBwZW5fd2lkdGg9IjEiIGluZGV4PSIwIiBzaG93X3lfYXhpcz0idHJ1ZSI%2BCgkJCQkJCQk8ZW50aXR5IG5hbWU9Ik5vcm1hbGl6ZWRfUGVyY2VpZWRfSW52ZW50b3J5X0NvdmVyYWdlIi8%2BCgkJCQkJCTwvcGxvdD4KCQkJCQk8L2dyYXBoPgoJCQkJPC9zdGFja2VkX2NvbnRhaW5lcj4KCQkJCTxzbGlkZXIgeD0iNTQ4LjUiIHk9IjQ3MiIgd2lkdGg9IjE5MyIgaGVpZ2h0PSI3OCIgaXNlZTpuYXZpZ2F0ZV90bz0iZmFsc2UiIHNob3dfbmFtZT0idHJ1ZSI%2BCgkJCQkJPGVudGl0eSBuYW1lPSJVbml0X0NhcGFjaXR5X0Nvc3QiLz4KCQkJCQk8cmVzZXRfdG8gYWZ0ZXI9Im5ldmVyIj4wPC9yZXNldF90bz4KCQkJCTwvc2xpZGVyPgoJCQkJPHNsaWRlciB4PSI3NTIuNSIgeT0iNDcyIiB3aWR0aD0iMTkzIiBoZWlnaHQ9Ijc4IiBpc2VlOm5hdmlnYXRlX3RvPSJmYWxzZSIgc2hvd19uYW1lPSJ0cnVlIj4KCQkJCQk8ZW50aXR5IG5hbWU9IlVuaXRfVmFyaWFibGVfQ29zdCIvPgoJCQkJCTxyZXNldF90byBhZnRlcj0ibmV2ZXIiPjA8L3Jlc2V0X3RvPgoJCQkJPC9zbGlkZXI%2BCgkJCQk8c2xpZGVyIHg9Ijk3LjUiIHk9IjQ3MiIgd2lkdGg9IjE5MyIgaGVpZ2h0PSI3OCIgaXNlZTpuYXZpZ2F0ZV90bz0iZmFsc2UiIHNob3dfbmFtZT0idHJ1ZSI%2BCgkJCQkJPGVudGl0eSBuYW1lPSJSZWZlcmVuY2VfSW52ZW50b3J5X0NvdmVyYWdlIi8%2BCgkJCQkJPHJlc2V0X3RvIGFmdGVyPSJuZXZlciI%2BMDwvcmVzZXRfdG8%2BCgkJCQk8L3NsaWRlcj4KCQkJCTxzbGlkZXIgeD0iMzAxLjUiIHk9IjQ3MiIgd2lkdGg9IjE5MyIgaGVpZ2h0PSI3OCIgaXNlZTpuYXZpZ2F0ZV90bz0iZmFsc2UiIHNob3dfbmFtZT0idHJ1ZSI%2BCgkJCQkJPGVudGl0eSBuYW1lPSJJbnZlbnRvcnlfQ292ZXJhZ2UiLz4KCQkJCQk8cmVzZXRfdG8gYWZ0ZXI9Im5ldmVyIj4wPC9yZXNldF90bz4KCQkJCTwvc2xpZGVyPgoJCQk8L3ZpZXc%2BCgkJCTx2aWV3IGJhY2tncm91bmQ9IndoaXRlIiBwYWdlX3dpZHRoPSIxMDY2IiBwYWdlX2hlaWdodD0iNjAwIiBpc2VlOnNjcm9sbF94PSI0IiBpc2VlOnNjcm9sbF95PSIzIiB0eXBlPSJpbnRlcmZhY2UiPgoJCQkJPHN0eWxlLz4KCQkJCTx0ZXh0X2JveCBmb250X3dlaWdodD0iYm9sZCIgdGV4dF9kZWNvcmF0aW9uPSJ1bmRlcmxpbmUiIGZvbnRfc2l6ZT0iMjRwdCIgeD0iMjc3IiB5PSI0OCIgd2lkdGg9IjU2MyIgaGVpZ2h0PSI1OCI%2BUmVsYXRpdmUgdmFsdWUgb2YgcHJvZHVjdCBpbXBhY3Qgb24gZGVtYW5kPC90ZXh0X2JveD4KCQkJCTxzdGFja2VkX2NvbnRhaW5lciB4PSI1NjciIHk9IjE0NSIgd2lkdGg9IjM5MSIgaGVpZ2h0PSIyODIiPgoJCQkJCTxncmFwaCB3aWR0aD0iMzkxIiBoZWlnaHQ9IjI4MiIgdHlwZT0idGltZV9zZXJpZXMiIGlzZWU6cG9pbnRzX29ubHk9ImZhbHNlIiBzaG93X2dyaWQ9ImZhbHNlIiBpbmNsdWRlX3VuaXRzX2luX2xlZ2VuZD0iZmFsc2UiIHBsb3RfbnVtYmVycz0iZmFsc2UiIGlzZWU6bGFiZWxfcGllX3NsaWNlcz0iZmFsc2UiIG51bV94X2dyaWRfbGluZXM9IjAiIG51bV95X2dyaWRfbGluZXM9IjAiIG51bV94X2xhYmVscz0iNSIgbnVtX3lfbGFiZWxzPSIzIiBpc2VlOmZpbGxfaW50ZW5zaXR5PSIwLjEiIGxlZnRfYXhpc19tdWx0aV9zY2FsZT0iZmFsc2UiIGxlZnRfYXhpc19hdXRvX3NjYWxlPSJ0cnVlIiBsZWZ0X2luY2x1ZGVfdW5pdHM9InRydWUiIHJpZ2h0X2F4aXNfbXVsdGlfc2NhbGU9ImZhbHNlIiByaWdodF9heGlzX2F1dG9fc2NhbGU9InRydWUiIHJpZ2h0X2luY2x1ZGVfdW5pdHM9InRydWUiPgoJCQkJCQk8cGxvdCBjb2xvcj0iYmx1ZSIgaXNlZTprZWVwX3plcm9fdmlzaWJsZT0idHJ1ZSIgcGVuX3dpZHRoPSIxIiBpbmRleD0iMCIgc2hvd195X2F4aXM9InRydWUiPgoJCQkJCQkJPGVudGl0eSBuYW1lPSJEZW1hbmQiLz4KCQkJCQkJPC9wbG90PgoJCQkJCTwvZ3JhcGg%2BCgkJCQk8L3N0YWNrZWRfY29udGFpbmVyPgoJCQkJPHN0YWNrZWRfY29udGFpbmVyIHg9IjEwNCIgeT0iMTQ4IiB3aWR0aD0iMzc5IiBoZWlnaHQ9IjI3NiI%2BCgkJCQkJPGdyYXBoIHdpZHRoPSIzNzkiIGhlaWdodD0iMjc2IiB0eXBlPSJ0aW1lX3NlcmllcyIgaXNlZTpwb2ludHNfb25seT0iZmFsc2UiIHNob3dfZ3JpZD0iZmFsc2UiIGluY2x1ZGVfdW5pdHNfaW5fbGVnZW5kPSJmYWxzZSIgcGxvdF9udW1iZXJzPSJmYWxzZSIgaXNlZTpsYWJlbF9waWVfc2xpY2VzPSJmYWxzZSIgbnVtX3hfZ3JpZF9saW5lcz0iMCIgbnVtX3lfZ3JpZF9saW5lcz0iMCIgbnVtX3hfbGFiZWxzPSI1IiBudW1feV9sYWJlbHM9IjMiIGlzZWU6ZmlsbF9pbnRlbnNpdHk9IjAuMSIgbGVmdF9heGlzX211bHRpX3NjYWxlPSJmYWxzZSIgbGVmdF9heGlzX2F1dG9fc2NhbGU9InRydWUiIGxlZnRfaW5jbHVkZV91bml0cz0idHJ1ZSIgcmlnaHRfYXhpc19tdWx0aV9zY2FsZT0iZmFsc2UiIHJpZ2h0X2F4aXNfYXV0b19zY2FsZT0idHJ1ZSIgcmlnaHRfaW5jbHVkZV91bml0cz0idHJ1ZSI%2BCgkJCQkJCTxwbG90IGNvbG9yPSJibHVlIiBpc2VlOmtlZXBfemVyb192aXNpYmxlPSJ0cnVlIiBwZW5fd2lkdGg9IjEiIGluZGV4PSIwIiBzaG93X3lfYXhpcz0idHJ1ZSI%2BCgkJCQkJCQk8ZW50aXR5IG5hbWU9IlJlbGF0aXZlX1ZhbHVlX29mX1Byb2R1Y3QiLz4KCQkJCQkJPC9wbG90PgoJCQkJCTwvZ3JhcGg%2BCgkJCQk8L3N0YWNrZWRfY29udGFpbmVyPgoJCQkJPHRleHRfYm94IGZvbnRfc2l6ZT0iMTRwdCIgeD0iMTA5IiB5PSI0NTYiIHdpZHRoPSIzNTEiIGhlaWdodD0iNTgiPlJlbGF0aXZlIHZhbHVlIG9mIHByb2R1Y3QgaXMgaW5mbHVlbmNlZCBieSB0aGUgcHJpY2Ugb2YgdGhlIHByb2R1Y3QgYW5kIHRoZSBwcmljZSBvZiBzdWJzdGl0dXRlczwvdGV4dF9ib3g%2BCgkJCTwvdmlldz4KCQkJPHZpZXcgYmFja2dyb3VuZD0id2hpdGUiIHBhZ2Vfd2lkdGg9IjEwNjYiIHBhZ2VfaGVpZ2h0PSI2MDAiIHR5cGU9ImludGVyZmFjZSI%2BCgkJCQk8c3R5bGUvPgoJCQk8L3ZpZXc%2BCgkJCTxpc2VlOnRlbXBsYXRlcz4KCQkJCTx2aWV3IGJhY2tncm91bmQ9IndoaXRlIiBwYWdlX3dpZHRoPSIxMDY2IiBwYWdlX2hlaWdodD0iNjAwIiB0eXBlPSJ0ZW1wbGF0ZSI%2BCgkJCQkJPHN0eWxlLz4KCQkJCTwvdmlldz4KCQkJPC9pc2VlOnRlbXBsYXRlcz4KCQkJPGlzZWU6c3Rvcmllcy8%2BCgkJPC92aWV3cz4KCTwvbW9kZWw%2BCjwveG1pbGU%2BCgo%3D%22%2C%0A%20%20%20%20%7D%0A%20%20%20%20for%20_pfad%2C%20_inhalt%20in%20_dateien.items()%3A%0A%20%20%20%20%20%20%20%20_ordner%20%3D%20__import__(%22os%22).path.dirname(_pfad)%0A%20%20%20%20%20%20%20%20if%20_ordner%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20__import__(%22os%22).makedirs(_ordner%2C%20exist_ok%3DTrue)%0A%20%20%20%20%20%20%20%20with%20open(_pfad%2C%20%22wb%22)%20as%20_ziel%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_ziel.write(__import__(%22base64%22).b64decode(_inhalt))
import%20marimo%20as%20mo
Competitive Pricing Model
We create our model using the Model class as follows:
The stock and flow model consists of six parts:
- Production and inventory
- Demand formation
- Price adjustment
- Profit
- Perceived Inventory
- Expected Profitability
The following sections explain each part in more detail. Furthermore, they demonstrate the composition of stocks, flows, converters and constants.
Creating model
1) Production and Inventory
Stocks: production capacity, production, inventory
Flows: production start rate, production rate, consumption rate
Converters: effect of profitability on capacity utilization,capacity utilization, inventory coverage
Constants: production time
Normalized expected profitability and demand are not constants. They are results of other parts.
3) Price Adjustment
This section contains two models. The first model determines the minimum price. The second describes the formation of the product’s price.
This model does not have any stocks, flows or constants. Unit variable cost and unit capacity cost are results of other parts.
Converters: capacity cost per unit, minimum price
Stocks: expected price
Flows: change in expected price
Converters: indicated price, effect of inventory coverage on price, price
Constants:
Minimum price and normalized inventory coverage are not constants. Minimum price is a result of the previous model and normalized inventory coverage is a result of another part.
4) Profit
This model has no stocks and flows. Production capacity is not a stock of this part. It is a result of the “Production and Inventory” part from the beginning.
Converters: capacity cost, variable cost, cost, revenue, profit
Constants: unit capacity cost, unit variable cost
Production rate, price and consumption rate are not constants of this model. They are results of other parts. Production rate and consumption rate are converters of the “Production and Inventory” model. Price is a converter of the “Price Adjustment” part.
5) Perceived Inventory
Stocks: perceived inventory coverage
Flows: change in perceived inventory coverage
Converters: normalized perceived inventory coverage
Constants: inventory coverage perception time, reference inventory coverage
Inventory coverage is not a constant of this part. It is a converter and a result of the “Production and Inventory” model.
6) Expected Profitability
Stocks: expected profitability
Flows: change in expected profitability
Converters: normalized expected profitability
Constants: profit adjustment time, reference expected profitability
Profit is not a constant of this part. It is a result of the “Profit” model.
Defining Equations
Production and Inventory
The stocks production and inventory have inflows and outflows.
We define the effect of profitability on capacity utilzation in our model using a non-linear relationship (depending on the normalized expected profitability). We capture this relationship in a lookup table that we store in the points property of the model (using a Python list):
Perceived Inventory Coverage
Scenario Management
We now use the scenario management of the BPTK-Py framework. We first import the library.
Then we set up a scenario manager using a Python dictionary. The scenario manager identifies the baseline constants of the model:
The next step is to register the scenario manager as follows:
Once we have this, we can define and register more scenarios as follows:
Using the plot_lookup function on the bptk class, we can compare the lookup functions between different scenarios.
Scenario Experiments
Base Case
Let’s quickly run through the base case first, which starts the model in equilibrium.
The equilibrium price for our product is set at EUR 3. This is equal to both the indicated price and the expected price. The minimum price (the amount we need to be profitable) is at EUR 1.5
Initially there is a reference demand of 100 units per month. Because the market is in equilibrium, the reference demand (i.e. the demand given the equilibrium price) equals the actual demand.
Our production capacity is 200 units per month - but we only produce 100 units per month to avoid overstocking and are thus at a utilization of 50%. 300 units are “work in progress” within production.
Capacity utilization is thus at 50%.
The inventory is also at 300 and the consumption rate equals the demand, i.e. is at 100.
This leads to an inventory coverage of 3.
Market Shock
Let’s investigate what happens if there is a sudden increase in the underlying demand of 50% at timestep 10. Note that the increase in demand is at the current level of pricing.
The graph below shows how the actual demand and the inventory develops - as expected, there is an inital demand peak. But this causes the inventory to drop, which increases the price. The increase price leads to increased production, which then lowers the price and thus increases demand.
This is because the actual price affects the demand - if the price is higher then the reference price, demand drops, if the price is lower, demand increases compared to the reference demand.
The plot below shows how the dependency is quantified in this model using a non-linear function - the exact shape of this function will depend on your specific situation.
We also assume that prices are sensitive to the availability of the product. If the product becomes scare (i.e. the inventory coverage falls), prices go up, and vice versa. The dependency is modelled using the following table function:
The production rate increases to a new, much higher level.
The price increases initially, because of the drop in inventory coverage. But the inventory coverage quickly recoveres due to increase production. Because inventory coverage influences the price, this leads to a price that is actually lower than the original price, but also to a demand that is higher than that indicated by the initial market shock.
even though the overall demand incrase is only at around 75%, our profits more than double, as seen in the graph below.
This is because we are utilizing our production capacity better: we go from a utilization of 50% to a utilization above 90%, as seen in the graph below.
The figures above show that with the given shock of a 50% increase in underlying demand, we get close to our capacity limits.
Try It Yourself
The scenarios above are fixed: a base case and a 50 % demand shock. The cell below registers one more that is yours to change. Two constants are the interesting ones - sizeOfShock is the size of the demand jump in percent, and marketShockOn switches it on at all - and the chart underneath compares your scenario against the base case.
Change a number, press play, and the chart redraws. A shock of 20 rather than 50 is a good first move: does the profit still more than double?