if%20__import__(%22os%22).path.isdir(%22xmile%2Fxmile_arrays%22)%3A%0A%20%20%20%20__import__(%22os%22).chdir(%22xmile%2Fxmile_arrays%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%2Farrayed_variables.json%22%3A%20%22ewoic21BcnJheWVkVmFyaWFibGVzIjp7CiAgICAic291cmNlIjoic2ltdWxhdGlvbl9tb2RlbHMvc2RfYXJyYXllZF92YXJpYWJsZXMuc3RteCIsCiAgICAibW9kZWwiOiJzaW11bGF0aW9uX21vZGVscy9zZF9hcnJheWVkX3ZhcmlhYmxlcyIsCiAgICAic2NlbmFyaW9zIjogewogICAgICAiYmFzZSI6IHsKICAgICAgIH0KICAgICAgfQogICAgfQp9Cg%3D%3D%22%2C%0A%20%20%20%20%20%20%20%20%22simulation_models%2Fsd_arrayed_variables.py%22%3A%20%22CiMgICAgICBfICAgICAgICAgICAgICAgICAgIF8gXwojICBfX19fX3wgfF9fIF9fXyBfIF9fICBfIF9fKF98IHxfX18gXyBfCiMgKF8tLyBfYCAvIF8vIF8gfCAnICBcfCAnXyB8IHwgLyAtX3wgJ198CiMgL19fXF9fLF9cX19cX19ffF98X3xffCAuX198X3xfXF9fX3xffAojICAgICAgICAgICAgICAgICAgICAgIHxffAojIENvcHlyaWdodCAoYykgMjAxMy0yMDIwIHRyYW5zZW50aXMgbWFuYWdlbWVudCAmIGNvbnN1bHRpbmcuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKICAgIAppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSBzY2lweS5pbnRlcnBvbGF0ZSBpbXBvcnQgaW50ZXJwMWQKZnJvbSBzY2lweS5zcGVjaWFsIGltcG9ydCBnYW1tYWxuCmZyb20gc2NpcHkuc3RhdHMgaW1wb3J0IG5vcm0KaW1wb3J0IG1hdGgsIHN0YXRpc3RpY3MsIHJhbmRvbSwgbG9nZ2luZwpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQppbXBvcnQgcmUKaW1wb3J0IGl0ZXJ0b29scwpmcm9tIGNvcHkgaW1wb3J0IGNvcHksIGRlZXBjb3B5CgoKCmRlZiBjYXJ0ZXNpYW5fcHJvZHVjdChsaXN0b2ZsaXN0cyk6CiAgICAiIiIKICAgIEhlbHBlciBmb3IgQ2FydGVzaWFuIHByb2R1Y3QKICAgIDpwYXJhbSBsaXN0b2ZsaXN0czoKICAgIDpyZXR1cm46CiAgICAiIiIKICAgIGlmIGxlbihsaXN0b2ZsaXN0cykgPT0gMToKICAgICAgICByZXR1cm4gbGlzdG9mbGlzdHNbMF0KICAgIHJlcyA9IGxpc3QoaXRlcnRvb2xzLnByb2R1Y3QoKmxpc3RvZmxpc3RzKSkKCiAgICBpZiBsZW4ocmVzKSA9PSAxOgogICAgICAgIHJldHVybiByZXNbMF0KCiAgICByZXR1cm4gcmVzCgpkZWYgTEVSUCh4LHBvaW50cyk6CiAgICAiIiIKICAgIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBzZXQgb2YgcG9pbnRzCiAgICA6cGFyYW0geDogeCB0byBvYnRhaW4geSBmb3IKICAgIDpwYXJhbSBwb2ludHM6IExpc3Qgb2YgdHVwbGVzIGNvbnRhaW5pbmcgdGhlIGdyYXBoaWNhbCBmdW5jdGlvbidzIHBvaW50cyBbKHgseSksKHgseSkgLi4uIF0KICAgIDpyZXR1cm46IHkgdmFsdWUgZm9yIHggb2J0YWluZWQgdXNpbmcgbGluZWFyIGludGVycG9sYXRpb24KICAgICIiIgogICAgeF92YWxzID0gbnAuYXJyYXkoWyB4WzBdIGZvciB4IGluIHBvaW50c10pCiAgICB5X3ZhbHMgPSBucC5hcnJheShbeFsxXSBmb3IgeCBpbiBwb2ludHNdKQoKICAgIGlmIHg8PSB4X3ZhbHNbMF06CiAgICAgICAgcmV0dXJuIHlfdmFsc1swXQoKICAgIGlmIHggPj0geF92YWxzW2xlbih4X3ZhbHMpLTFdOgogICAgICAgIHJldHVybiB5X3ZhbHNbbGVuKHhfdmFscyktMV0KCiAgICBmID0gaW50ZXJwMWQoeF92YWxzLCB5X3ZhbHMpCiAgICByZXR1cm4gZmxvYXQoZih4KSkKCmNsYXNzIHNpbXVsYXRpb25fbW9kZWwoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAjIFNpbXVsYXRpb24gU2V0dGluZ3MKICAgICAgICBzZWxmLmR0ID0gMC4yNQogICAgICAgIHNlbGYuc3RhcnR0aW1lID0gMS4wCiAgICAgICAgc2VsZi5zdG9wdGltZSA9IDEzLjAKICAgICAgICBzZWxmLnVuaXRzID0gJ21vbnRocycKICAgICAgICBzZWxmLm1ldGhvZCA9ICdFdWxlcicKICAgICAgICBzZWxmLmVxdWF0aW9ucyA9IHsKCiAgICAgICAgIyBTdG9ja3MKICAgICAgICAKICAgIAogICAgICAgICdpbnZlbnRvcnknICAgICAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgnaW52ZW50b3J5WzEsZ2VybWFueV0nLCB0KSArIHNlbGYubWVtb2l6ZSgnaW52ZW50b3J5WzEsZW5nbGFuZF0nLCB0KSArIHNlbGYubWVtb2l6ZSgnaW52ZW50b3J5WzEsYXVzdHJpYV0nLCB0KSArIHNlbGYubWVtb2l6ZSgnaW52ZW50b3J5WzEsZ3JlZWNlXScsIHQpICsgc2VsZi5tZW1vaXplKCdpbnZlbnRvcnlbMixnZXJtYW55XScsIHQpICsgc2VsZi5tZW1vaXplKCdpbnZlbnRvcnlbMixlbmdsYW5kXScsIHQpICsgc2VsZi5tZW1vaXplKCdpbnZlbnRvcnlbMixhdXN0cmlhXScsIHQpICsgc2VsZi5tZW1vaXplKCdpbnZlbnRvcnlbMixncmVlY2VdJywgdCkgKyBzZWxmLm1lbW9pemUoJ2ludmVudG9yeVszLGdlcm1hbnldJywgdCkgKyBzZWxmLm1lbW9pemUoJ2ludmVudG9yeVszLGVuZ2xhbmRdJywgdCkgKyBzZWxmLm1lbW9pemUoJ2ludmVudG9yeVszLGF1c3RyaWFdJywgdCkgKyBzZWxmLm1lbW9pemUoJ2ludmVudG9yeVszLGdyZWVjZV0nLCB0KSwKICAgICAgICAnaW52ZW50b3J5WzEsZ2VybWFueV0nICAgICAgICAgIDogbGFtYmRhIHQ6ICggKDAuMCkgaWYgKCB0ICA8PSAgc2VsZi5zdGFydHRpbWUgKSBlbHNlIChzZWxmLm1lbW9pemUoJ2ludmVudG9yeVsxLGdlcm1hbnldJyx0LXNlbGYuZHQpICsgc2VsZi5kdCAqICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZVsxLGdlcm1hbnldJyx0LXNlbGYuZHQpICkpICksCiAgICAgICAgJ2ludmVudG9yeVsxLGVuZ2xhbmRdJyAgICAgICAgICA6IGxhbWJkYSB0OiAoICgwLjApIGlmICggdCAgPD0gIHNlbGYuc3RhcnR0aW1lICkgZWxzZSAoc2VsZi5tZW1vaXplKCdpbnZlbnRvcnlbMSxlbmdsYW5kXScsdC1zZWxmLmR0KSArIHNlbGYuZHQgKiAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGVbMSxlbmdsYW5kXScsdC1zZWxmLmR0KSApKSApLAogICAgICAgICdpbnZlbnRvcnlbMSxhdXN0cmlhXScgICAgICAgICAgOiBsYW1iZGEgdDogKCAoMC4wKSBpZiAoIHQgIDw9ICBzZWxmLnN0YXJ0dGltZSApIGVsc2UgKHNlbGYubWVtb2l6ZSgnaW52ZW50b3J5WzEsYXVzdHJpYV0nLHQtc2VsZi5kdCkgKyBzZWxmLmR0ICogKCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlWzEsYXVzdHJpYV0nLHQtc2VsZi5kdCkgKSkgKSwKICAgICAgICAnaW52ZW50b3J5WzEsZ3JlZWNlXScgICAgICAgICAgOiBsYW1iZGEgdDogKCAoMC4wKSBpZiAoIHQgIDw9ICBzZWxmLnN0YXJ0dGltZSApIGVsc2UgKHNlbGYubWVtb2l6ZSgnaW52ZW50b3J5WzEsZ3JlZWNlXScsdC1zZWxmLmR0KSArIHNlbGYuZHQgKiAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGVbMSxncmVlY2VdJyx0LXNlbGYuZHQpICkpICksCiAgICAgICAgJ2ludmVudG9yeVsyLGdlcm1hbnldJyAgICAgICAgICA6IGxhbWJkYSB0OiAoICgwLjApIGlmICggdCAgPD0gIHNlbGYuc3RhcnR0aW1lICkgZWxzZSAoc2VsZi5tZW1vaXplKCdpbnZlbnRvcnlbMixnZXJtYW55XScsdC1zZWxmLmR0KSArIHNlbGYuZHQgKiAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGVbMixnZXJtYW55XScsdC1zZWxmLmR0KSApKSApLAogICAgICAgICdpbnZlbnRvcnlbMixlbmdsYW5kXScgICAgICAgICAgOiBsYW1iZGEgdDogKCAoMC4wKSBpZiAoIHQgIDw9ICBzZWxmLnN0YXJ0dGltZSApIGVsc2UgKHNlbGYubWVtb2l6ZSgnaW52ZW50b3J5WzIsZW5nbGFuZF0nLHQtc2VsZi5kdCkgKyBzZWxmLmR0ICogKCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlWzIsZW5nbGFuZF0nLHQtc2VsZi5kdCkgKSkgKSwKICAgICAgICAnaW52ZW50b3J5WzIsYXVzdHJpYV0nICAgICAgICAgIDogbGFtYmRhIHQ6ICggKDAuMCkgaWYgKCB0ICA8PSAgc2VsZi5zdGFydHRpbWUgKSBlbHNlIChzZWxmLm1lbW9pemUoJ2ludmVudG9yeVsyLGF1c3RyaWFdJyx0LXNlbGYuZHQpICsgc2VsZi5kdCAqICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZVsyLGF1c3RyaWFdJyx0LXNlbGYuZHQpICkpICksCiAgICAgICAgJ2ludmVudG9yeVsyLGdyZWVjZV0nICAgICAgICAgIDogbGFtYmRhIHQ6ICggKDAuMCkgaWYgKCB0ICA8PSAgc2VsZi5zdGFydHRpbWUgKSBlbHNlIChzZWxmLm1lbW9pemUoJ2ludmVudG9yeVsyLGdyZWVjZV0nLHQtc2VsZi5kdCkgKyBzZWxmLmR0ICogKCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlWzIsZ3JlZWNlXScsdC1zZWxmLmR0KSApKSApLAogICAgICAgICdpbnZlbnRvcnlbMyxnZXJtYW55XScgICAgICAgICAgOiBsYW1iZGEgdDogKCAoMC4wKSBpZiAoIHQgIDw9ICBzZWxmLnN0YXJ0dGltZSApIGVsc2UgKHNlbGYubWVtb2l6ZSgnaW52ZW50b3J5WzMsZ2VybWFueV0nLHQtc2VsZi5kdCkgKyBzZWxmLmR0ICogKCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlWzMsZ2VybWFueV0nLHQtc2VsZi5kdCkgKSkgKSwKICAgICAgICAnaW52ZW50b3J5WzMsZW5nbGFuZF0nICAgICAgICAgIDogbGFtYmRhIHQ6ICggKDAuMCkgaWYgKCB0ICA8PSAgc2VsZi5zdGFydHRpbWUgKSBlbHNlIChzZWxmLm1lbW9pemUoJ2ludmVudG9yeVszLGVuZ2xhbmRdJyx0LXNlbGYuZHQpICsgc2VsZi5kdCAqICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZVszLGVuZ2xhbmRdJyx0LXNlbGYuZHQpICkpICksCiAgICAgICAgJ2ludmVudG9yeVszLGF1c3RyaWFdJyAgICAgICAgICA6IGxhbWJkYSB0OiAoICgwLjApIGlmICggdCAgPD0gIHNlbGYuc3RhcnR0aW1lICkgZWxzZSAoc2VsZi5tZW1vaXplKCdpbnZlbnRvcnlbMyxhdXN0cmlhXScsdC1zZWxmLmR0KSArIHNlbGYuZHQgKiAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGVbMyxhdXN0cmlhXScsdC1zZWxmLmR0KSApKSApLAogICAgICAgICdpbnZlbnRvcnlbMyxncmVlY2VdJyAgICAgICAgICA6IGxhbWJkYSB0OiAoICgwLjApIGlmICggdCAgPD0gIHNlbGYuc3RhcnR0aW1lICkgZWxzZSAoc2VsZi5tZW1vaXplKCdpbnZlbnRvcnlbMyxncmVlY2VdJyx0LXNlbGYuZHQpICsgc2VsZi5kdCAqICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZVszLGdyZWVjZV0nLHQtc2VsZi5kdCkgKSkgKSwKICAgICAgICAncHJvZHVjdGlvbicgICAgICAgICAgOiBsYW1iZGEgdDogc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uWzEsZ2VybWFueV0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblsxLGVuZ2xhbmRdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25bMSxhdXN0cmlhXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uWzEsZ3JlZWNlXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uWzIsZ2VybWFueV0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblsyLGVuZ2xhbmRdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25bMixhdXN0cmlhXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uWzIsZ3JlZWNlXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uWzMsZ2VybWFueV0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblszLGVuZ2xhbmRdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25bMyxhdXN0cmlhXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uWzMsZ3JlZWNlXScsIHQpLAogICAgICAgICdwcm9kdWN0aW9uWzEsZ2VybWFueV0nICAgICAgICAgIDogbGFtYmRhIHQ6ICggKDAuMCkgaWYgKCB0ICA8PSAgc2VsZi5zdGFydHRpbWUgKSBlbHNlIChzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25bMSxnZXJtYW55XScsdC1zZWxmLmR0KSArIHNlbGYuZHQgKiAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzEsZ2VybWFueV0nLHQtc2VsZi5kdCkgLSAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGVbMSxnZXJtYW55XScsdC1zZWxmLmR0KSApICkpICksCiAgICAgICAgJ3Byb2R1Y3Rpb25bMSxlbmdsYW5kXScgICAgICAgICAgOiBsYW1iZGEgdDogKCAoMC4wKSBpZiAoIHQgIDw9ICBzZWxmLnN0YXJ0dGltZSApIGVsc2UgKHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblsxLGVuZ2xhbmRdJyx0LXNlbGYuZHQpICsgc2VsZi5kdCAqICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRbMSxlbmdsYW5kXScsdC1zZWxmLmR0KSAtICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZVsxLGVuZ2xhbmRdJyx0LXNlbGYuZHQpICkgKSkgKSwKICAgICAgICAncHJvZHVjdGlvblsxLGF1c3RyaWFdJyAgICAgICAgICA6IGxhbWJkYSB0OiAoICgwLjApIGlmICggdCAgPD0gIHNlbGYuc3RhcnR0aW1lICkgZWxzZSAoc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uWzEsYXVzdHJpYV0nLHQtc2VsZi5kdCkgKyBzZWxmLmR0ICogKCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFsxLGF1c3RyaWFdJyx0LXNlbGYuZHQpIC0gKCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlWzEsYXVzdHJpYV0nLHQtc2VsZi5kdCkgKSApKSApLAogICAgICAgICdwcm9kdWN0aW9uWzEsZ3JlZWNlXScgICAgICAgICAgOiBsYW1iZGEgdDogKCAoMC4wKSBpZiAoIHQgIDw9ICBzZWxmLnN0YXJ0dGltZSApIGVsc2UgKHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblsxLGdyZWVjZV0nLHQtc2VsZi5kdCkgKyBzZWxmLmR0ICogKCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFsxLGdyZWVjZV0nLHQtc2VsZi5kdCkgLSAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGVbMSxncmVlY2VdJyx0LXNlbGYuZHQpICkgKSkgKSwKICAgICAgICAncHJvZHVjdGlvblsyLGdlcm1hbnldJyAgICAgICAgICA6IGxhbWJkYSB0OiAoICgwLjApIGlmICggdCAgPD0gIHNlbGYuc3RhcnR0aW1lICkgZWxzZSAoc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uWzIsZ2VybWFueV0nLHQtc2VsZi5kdCkgKyBzZWxmLmR0ICogKCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFsyLGdlcm1hbnldJyx0LXNlbGYuZHQpIC0gKCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlWzIsZ2VybWFueV0nLHQtc2VsZi5kdCkgKSApKSApLAogICAgICAgICdwcm9kdWN0aW9uWzIsZW5nbGFuZF0nICAgICAgICAgIDogbGFtYmRhIHQ6ICggKDAuMCkgaWYgKCB0ICA8PSAgc2VsZi5zdGFydHRpbWUgKSBlbHNlIChzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25bMixlbmdsYW5kXScsdC1zZWxmLmR0KSArIHNlbGYuZHQgKiAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzIsZW5nbGFuZF0nLHQtc2VsZi5kdCkgLSAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGVbMixlbmdsYW5kXScsdC1zZWxmLmR0KSApICkpICksCiAgICAgICAgJ3Byb2R1Y3Rpb25bMixhdXN0cmlhXScgICAgICAgICAgOiBsYW1iZGEgdDogKCAoMC4wKSBpZiAoIHQgIDw9ICBzZWxmLnN0YXJ0dGltZSApIGVsc2UgKHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblsyLGF1c3RyaWFdJyx0LXNlbGYuZHQpICsgc2VsZi5kdCAqICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRbMixhdXN0cmlhXScsdC1zZWxmLmR0KSAtICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZVsyLGF1c3RyaWFdJyx0LXNlbGYuZHQpICkgKSkgKSwKICAgICAgICAncHJvZHVjdGlvblsyLGdyZWVjZV0nICAgICAgICAgIDogbGFtYmRhIHQ6ICggKDAuMCkgaWYgKCB0ICA8PSAgc2VsZi5zdGFydHRpbWUgKSBlbHNlIChzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25bMixncmVlY2VdJyx0LXNlbGYuZHQpICsgc2VsZi5kdCAqICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRbMixncmVlY2VdJyx0LXNlbGYuZHQpIC0gKCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlWzIsZ3JlZWNlXScsdC1zZWxmLmR0KSApICkpICksCiAgICAgICAgJ3Byb2R1Y3Rpb25bMyxnZXJtYW55XScgICAgICAgICAgOiBsYW1iZGEgdDogKCAoMC4wKSBpZiAoIHQgIDw9ICBzZWxmLnN0YXJ0dGltZSApIGVsc2UgKHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblszLGdlcm1hbnldJyx0LXNlbGYuZHQpICsgc2VsZi5kdCAqICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRbMyxnZXJtYW55XScsdC1zZWxmLmR0KSAtICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZVszLGdlcm1hbnldJyx0LXNlbGYuZHQpICkgKSkgKSwKICAgICAgICAncHJvZHVjdGlvblszLGVuZ2xhbmRdJyAgICAgICAgICA6IGxhbWJkYSB0OiAoICgwLjApIGlmICggdCAgPD0gIHNlbGYuc3RhcnR0aW1lICkgZWxzZSAoc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uWzMsZW5nbGFuZF0nLHQtc2VsZi5kdCkgKyBzZWxmLmR0ICogKCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFszLGVuZ2xhbmRdJyx0LXNlbGYuZHQpIC0gKCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlWzMsZW5nbGFuZF0nLHQtc2VsZi5kdCkgKSApKSApLAogICAgICAgICdwcm9kdWN0aW9uWzMsYXVzdHJpYV0nICAgICAgICAgIDogbGFtYmRhIHQ6ICggKDAuMCkgaWYgKCB0ICA8PSAgc2VsZi5zdGFydHRpbWUgKSBlbHNlIChzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25bMyxhdXN0cmlhXScsdC1zZWxmLmR0KSArIHNlbGYuZHQgKiAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzMsYXVzdHJpYV0nLHQtc2VsZi5kdCkgLSAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGVbMyxhdXN0cmlhXScsdC1zZWxmLmR0KSApICkpICksCiAgICAgICAgJ3Byb2R1Y3Rpb25bMyxncmVlY2VdJyAgICAgICAgICA6IGxhbWJkYSB0OiAoICgwLjApIGlmICggdCAgPD0gIHNlbGYuc3RhcnR0aW1lICkgZWxzZSAoc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uWzMsZ3JlZWNlXScsdC1zZWxmLmR0KSArIHNlbGYuZHQgKiAoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzMsZ3JlZWNlXScsdC1zZWxmLmR0KSAtICggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZVszLGdyZWVjZV0nLHQtc2VsZi5kdCkgKSApKSApLAogICAgICAgIAogICAgCiAgICAgICAgIyBGbG93cwogICAgICAgICdwcm9kdWN0aW9uUmF0ZScgICAgICAgICAgICAgOiBsYW1iZGEgdDogc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZVsxLGdlcm1hbnldJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlWzEsZW5nbGFuZF0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGVbMSxhdXN0cmlhXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZVsxLGdyZWVjZV0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGVbMixnZXJtYW55XScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZVsyLGVuZ2xhbmRdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlWzIsYXVzdHJpYV0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGVbMixncmVlY2VdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlWzMsZ2VybWFueV0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblJhdGVbMyxlbmdsYW5kXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uUmF0ZVszLGF1c3RyaWFdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25SYXRlWzMsZ3JlZWNlXScsIHQpLAogICAgICAgICdwcm9kdWN0aW9uUmF0ZVsxLGdlcm1hbnldJyAgICAgICAgICAgICA6IGxhbWJkYSB0OiBzZWxmLmRlbGF5KCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFsxLGdlcm1hbnldJywgKCB0IC0gKHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvbkR1cmF0aW9uWzEsZ2VybWFueV0nLCB0KSkgKSksc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMSxnZXJtYW55XScsIHQpLDAuMCx0KSwKICAgICAgICAncHJvZHVjdGlvblJhdGVbMSxlbmdsYW5kXScgICAgICAgICAgICAgOiBsYW1iZGEgdDogc2VsZi5kZWxheSggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRbMSxlbmdsYW5kXScsICggdCAtIChzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblsxLGVuZ2xhbmRdJywgdCkpICkpLHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvbkR1cmF0aW9uWzEsZW5nbGFuZF0nLCB0KSwwLjAsdCksCiAgICAgICAgJ3Byb2R1Y3Rpb25SYXRlWzEsYXVzdHJpYV0nICAgICAgICAgICAgIDogbGFtYmRhIHQ6IHNlbGYuZGVsYXkoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzEsYXVzdHJpYV0nLCAoIHQgLSAoc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMSxhdXN0cmlhXScsIHQpKSApKSxzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblsxLGF1c3RyaWFdJywgdCksMC4wLHQpLAogICAgICAgICdwcm9kdWN0aW9uUmF0ZVsxLGdyZWVjZV0nICAgICAgICAgICAgIDogbGFtYmRhIHQ6IHNlbGYuZGVsYXkoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzEsZ3JlZWNlXScsICggdCAtIChzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblsxLGdyZWVjZV0nLCB0KSkgKSksc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMSxncmVlY2VdJywgdCksMC4wLHQpLAogICAgICAgICdwcm9kdWN0aW9uUmF0ZVsyLGdlcm1hbnldJyAgICAgICAgICAgICA6IGxhbWJkYSB0OiBzZWxmLmRlbGF5KCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFsyLGdlcm1hbnldJywgKCB0IC0gKHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvbkR1cmF0aW9uWzIsZ2VybWFueV0nLCB0KSkgKSksc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMixnZXJtYW55XScsIHQpLDAuMCx0KSwKICAgICAgICAncHJvZHVjdGlvblJhdGVbMixlbmdsYW5kXScgICAgICAgICAgICAgOiBsYW1iZGEgdDogc2VsZi5kZWxheSggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRbMixlbmdsYW5kXScsICggdCAtIChzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblsyLGVuZ2xhbmRdJywgdCkpICkpLHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvbkR1cmF0aW9uWzIsZW5nbGFuZF0nLCB0KSwwLjAsdCksCiAgICAgICAgJ3Byb2R1Y3Rpb25SYXRlWzIsYXVzdHJpYV0nICAgICAgICAgICAgIDogbGFtYmRhIHQ6IHNlbGYuZGVsYXkoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzIsYXVzdHJpYV0nLCAoIHQgLSAoc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMixhdXN0cmlhXScsIHQpKSApKSxzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblsyLGF1c3RyaWFdJywgdCksMC4wLHQpLAogICAgICAgICdwcm9kdWN0aW9uUmF0ZVsyLGdyZWVjZV0nICAgICAgICAgICAgIDogbGFtYmRhIHQ6IHNlbGYuZGVsYXkoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzIsZ3JlZWNlXScsICggdCAtIChzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblsyLGdyZWVjZV0nLCB0KSkgKSksc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMixncmVlY2VdJywgdCksMC4wLHQpLAogICAgICAgICdwcm9kdWN0aW9uUmF0ZVszLGdlcm1hbnldJyAgICAgICAgICAgICA6IGxhbWJkYSB0OiBzZWxmLmRlbGF5KCBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFszLGdlcm1hbnldJywgKCB0IC0gKHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvbkR1cmF0aW9uWzMsZ2VybWFueV0nLCB0KSkgKSksc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMyxnZXJtYW55XScsIHQpLDAuMCx0KSwKICAgICAgICAncHJvZHVjdGlvblJhdGVbMyxlbmdsYW5kXScgICAgICAgICAgICAgOiBsYW1iZGEgdDogc2VsZi5kZWxheSggc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRbMyxlbmdsYW5kXScsICggdCAtIChzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblszLGVuZ2xhbmRdJywgdCkpICkpLHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvbkR1cmF0aW9uWzMsZW5nbGFuZF0nLCB0KSwwLjAsdCksCiAgICAgICAgJ3Byb2R1Y3Rpb25SYXRlWzMsYXVzdHJpYV0nICAgICAgICAgICAgIDogbGFtYmRhIHQ6IHNlbGYuZGVsYXkoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzMsYXVzdHJpYV0nLCAoIHQgLSAoc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMyxhdXN0cmlhXScsIHQpKSApKSxzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblszLGF1c3RyaWFdJywgdCksMC4wLHQpLAogICAgICAgICdwcm9kdWN0aW9uUmF0ZVszLGdyZWVjZV0nICAgICAgICAgICAgIDogbGFtYmRhIHQ6IHNlbGYuZGVsYXkoIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzMsZ3JlZWNlXScsICggdCAtIChzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblszLGdyZWVjZV0nLCB0KSkgKSksc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMyxncmVlY2VdJywgdCksMC4wLHQpLAogICAgICAgICdwcm9kdWN0aW9uU3RhcnQnICAgICAgICAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzEsZ2VybWFueV0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzEsZW5nbGFuZF0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzEsYXVzdHJpYV0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0WzEsZ3JlZWNlXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRbMixnZXJtYW55XScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRbMixlbmdsYW5kXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRbMixhdXN0cmlhXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRbMixncmVlY2VdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFszLGdlcm1hbnldJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFszLGVuZ2xhbmRdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFszLGF1c3RyaWFdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFszLGdyZWVjZV0nLCB0KSwKICAgICAgICAncHJvZHVjdGlvblN0YXJ0WzEsZ2VybWFueV0nICAgICAgICAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0UmF0ZVsxLGdlcm1hbnldJywgdCksCiAgICAgICAgJ3Byb2R1Y3Rpb25TdGFydFsxLGVuZ2xhbmRdJyAgICAgICAgICAgICA6IGxhbWJkYSB0OiBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMSxlbmdsYW5kXScsIHQpLAogICAgICAgICdwcm9kdWN0aW9uU3RhcnRbMSxhdXN0cmlhXScgICAgICAgICAgICAgOiBsYW1iZGEgdDogc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRSYXRlWzEsYXVzdHJpYV0nLCB0KSwKICAgICAgICAncHJvZHVjdGlvblN0YXJ0WzEsZ3JlZWNlXScgICAgICAgICAgICAgOiBsYW1iZGEgdDogc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRSYXRlWzEsZ3JlZWNlXScsIHQpLAogICAgICAgICdwcm9kdWN0aW9uU3RhcnRbMixnZXJtYW55XScgICAgICAgICAgICAgOiBsYW1iZGEgdDogc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRSYXRlWzIsZ2VybWFueV0nLCB0KSwKICAgICAgICAncHJvZHVjdGlvblN0YXJ0WzIsZW5nbGFuZF0nICAgICAgICAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0UmF0ZVsyLGVuZ2xhbmRdJywgdCksCiAgICAgICAgJ3Byb2R1Y3Rpb25TdGFydFsyLGF1c3RyaWFdJyAgICAgICAgICAgICA6IGxhbWJkYSB0OiBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMixhdXN0cmlhXScsIHQpLAogICAgICAgICdwcm9kdWN0aW9uU3RhcnRbMixncmVlY2VdJyAgICAgICAgICAgICA6IGxhbWJkYSB0OiBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMixncmVlY2VdJywgdCksCiAgICAgICAgJ3Byb2R1Y3Rpb25TdGFydFszLGdlcm1hbnldJyAgICAgICAgICAgICA6IGxhbWJkYSB0OiBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMyxnZXJtYW55XScsIHQpLAogICAgICAgICdwcm9kdWN0aW9uU3RhcnRbMyxlbmdsYW5kXScgICAgICAgICAgICAgOiBsYW1iZGEgdDogc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRSYXRlWzMsZW5nbGFuZF0nLCB0KSwKICAgICAgICAncHJvZHVjdGlvblN0YXJ0WzMsYXVzdHJpYV0nICAgICAgICAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0UmF0ZVszLGF1c3RyaWFdJywgdCksCiAgICAgICAgJ3Byb2R1Y3Rpb25TdGFydFszLGdyZWVjZV0nICAgICAgICAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0UmF0ZVszLGdyZWVjZV0nLCB0KSwKICAgICAgICAKICAgIAogICAgICAgICMgY29udmVydGVycwogICAgICAgICdhdmVyYWdlSW52ZW50b3J5JyAgICAgIDogbGFtYmRhIHQ6IG5wLm1lYW4oc2VsZi5tZW1vaXplKCdpbnZlbnRvcnlbKiwqXScsIHQpKSwKICAgICAgICAnYXZlcmFnZUludmVudG9yeVVzaW5nU2l6ZScgICAgICA6IGxhbWJkYSB0OiBucC5zdW0oc2VsZi5tZW1vaXplKCdpbnZlbnRvcnlbKiwqXScsIHQpKSAvIChsZW4oc2VsZi5tZW1vaXplKCdpbnZlbnRvcnlbKiwqXScsIHQpKSksCiAgICAgICAgJ2ludmVudG9yeVNpemUnICAgICAgOiBsYW1iZGEgdDogMTIuMCwKICAgICAgICAnbGFyZ2VzdEdlcm1hbkludmVudG9yeScgICAgICA6IGxhbWJkYSB0OiBzZWxmLm1lbW9pemUoJ2ludmVudG9yeVsnKyBzdHIoc2VsZi5yYW5rKHNlbGYubWVtb2l6ZSgnaW52ZW50b3J5WyosZ2VybWFueV0nLCB0KSwgKGxlbihzZWxmLm1lbW9pemUoJ2ludmVudG9yeVsqLGdlcm1hbnldJywgdCkpKSkpKycsZ2VybWFueV0nLCB0KSwKICAgICAgICAncHJvZHVjdGlvbkR1cmF0aW9uJyAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvbkR1cmF0aW9uWzEsZ2VybWFueV0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvbkR1cmF0aW9uWzEsZW5nbGFuZF0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvbkR1cmF0aW9uWzEsYXVzdHJpYV0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvbkR1cmF0aW9uWzEsZ3JlZWNlXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMixnZXJtYW55XScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMixlbmdsYW5kXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMixhdXN0cmlhXScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uRHVyYXRpb25bMixncmVlY2VdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblszLGdlcm1hbnldJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblszLGVuZ2xhbmRdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblszLGF1c3RyaWFdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25EdXJhdGlvblszLGdyZWVjZV0nLCB0KSwKICAgICAgICAncHJvZHVjdGlvbkR1cmF0aW9uWzEsZ2VybWFueV0nICAgICAgOiBsYW1iZGEgdDogMS4wLAogICAgICAgICdwcm9kdWN0aW9uRHVyYXRpb25bMSxlbmdsYW5kXScgICAgICA6IGxhbWJkYSB0OiAyLjAsCiAgICAgICAgJ3Byb2R1Y3Rpb25EdXJhdGlvblsxLGF1c3RyaWFdJyAgICAgIDogbGFtYmRhIHQ6IDMuMCwKICAgICAgICAncHJvZHVjdGlvbkR1cmF0aW9uWzEsZ3JlZWNlXScgICAgICA6IGxhbWJkYSB0OiA0LjAsCiAgICAgICAgJ3Byb2R1Y3Rpb25EdXJhdGlvblsyLGdlcm1hbnldJyAgICAgIDogbGFtYmRhIHQ6IDUuMCwKICAgICAgICAncHJvZHVjdGlvbkR1cmF0aW9uWzIsZW5nbGFuZF0nICAgICAgOiBsYW1iZGEgdDogNi4wLAogICAgICAgICdwcm9kdWN0aW9uRHVyYXRpb25bMixhdXN0cmlhXScgICAgICA6IGxhbWJkYSB0OiA4LjAsCiAgICAgICAgJ3Byb2R1Y3Rpb25EdXJhdGlvblsyLGdyZWVjZV0nICAgICAgOiBsYW1iZGEgdDogNy4wLAogICAgICAgICdwcm9kdWN0aW9uRHVyYXRpb25bMyxnZXJtYW55XScgICAgICA6IGxhbWJkYSB0OiA5LjAsCiAgICAgICAgJ3Byb2R1Y3Rpb25EdXJhdGlvblszLGVuZ2xhbmRdJyAgICAgIDogbGFtYmRhIHQ6IDEwLjAsCiAgICAgICAgJ3Byb2R1Y3Rpb25EdXJhdGlvblszLGF1c3RyaWFdJyAgICAgIDogbGFtYmRhIHQ6IDExLjAsCiAgICAgICAgJ3Byb2R1Y3Rpb25EdXJhdGlvblszLGdyZWVjZV0nICAgICAgOiBsYW1iZGEgdDogMTIuMCwKICAgICAgICAncHJvZHVjdGlvblN0YXJ0UmF0ZScgICAgICA6IGxhbWJkYSB0OiBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMSxnZXJtYW55XScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRSYXRlWzEsZW5nbGFuZF0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0UmF0ZVsxLGF1c3RyaWFdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMSxncmVlY2VdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMixnZXJtYW55XScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRSYXRlWzIsZW5nbGFuZF0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0UmF0ZVsyLGF1c3RyaWFdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMixncmVlY2VdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMyxnZXJtYW55XScsIHQpICsgc2VsZi5tZW1vaXplKCdwcm9kdWN0aW9uU3RhcnRSYXRlWzMsZW5nbGFuZF0nLCB0KSArIHNlbGYubWVtb2l6ZSgncHJvZHVjdGlvblN0YXJ0UmF0ZVszLGF1c3RyaWFdJywgdCkgKyBzZWxmLm1lbW9pemUoJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMyxncmVlY2VdJywgdCksCiAgICAgICAgJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMSxnZXJtYW55XScgICAgICA6IGxhbWJkYSB0OiAxMC4wLAogICAgICAgICdwcm9kdWN0aW9uU3RhcnRSYXRlWzEsZW5nbGFuZF0nICAgICAgOiBsYW1iZGEgdDogMjAuMCwKICAgICAgICAncHJvZHVjdGlvblN0YXJ0UmF0ZVsxLGF1c3RyaWFdJyAgICAgIDogbGFtYmRhIHQ6IDMwLjAsCiAgICAgICAgJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMSxncmVlY2VdJyAgICAgIDogbGFtYmRhIHQ6IDQwLjAsCiAgICAgICAgJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMixnZXJtYW55XScgICAgICA6IGxhbWJkYSB0OiA0MC4wLAogICAgICAgICdwcm9kdWN0aW9uU3RhcnRSYXRlWzIsZW5nbGFuZF0nICAgICAgOiBsYW1iZGEgdDogMzAuMCwKICAgICAgICAncHJvZHVjdGlvblN0YXJ0UmF0ZVsyLGF1c3RyaWFdJyAgICAgIDogbGFtYmRhIHQ6IDIwLjAsCiAgICAgICAgJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMixncmVlY2VdJyAgICAgIDogbGFtYmRhIHQ6IDEwLjAsCiAgICAgICAgJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMyxnZXJtYW55XScgICAgICA6IGxhbWJkYSB0OiAyMC4wLAogICAgICAgICdwcm9kdWN0aW9uU3RhcnRSYXRlWzMsZW5nbGFuZF0nICAgICAgOiBsYW1iZGEgdDogMzAuMCwKICAgICAgICAncHJvZHVjdGlvblN0YXJ0UmF0ZVszLGF1c3RyaWFdJyAgICAgIDogbGFtYmRhIHQ6IDQwLjAsCiAgICAgICAgJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMyxncmVlY2VdJyAgICAgIDogbGFtYmRhIHQ6IDUwLjAsCiAgICAgICAgJ3NtYWxsZXN0R2VybWFuSW52ZW50b3J5JyAgICAgIDogbGFtYmRhIHQ6IHNlbGYubWVtb2l6ZSgnaW52ZW50b3J5WycrIHN0cihzZWxmLnJhbmsoc2VsZi5tZW1vaXplKCdpbnZlbnRvcnlbKixnZXJtYW55XScsIHQpLCAxLjApKSsnLGdlcm1hbnldJywgdCksCiAgICAgICAgJ3RvdGFsSW52ZW50b3J5JyAgICAgIDogbGFtYmRhIHQ6IG5wLnN1bShzZWxmLm1lbW9pemUoJ2ludmVudG9yeVsqLCpdJywgdCkpLAogICAgICAgIAogICAgCiAgICAgICAgIyBnZgogICAgICAgIAogICAgCiAgICAgICAgI2NvbnN0YW50cwogICAgICAgIAogICAgCiAgICAKICAgICAgICB9CiAgICAKICAgICAgICBzZWxmLnBvaW50cyA9IHsKICAgICAgICAgICAgCiAgICAgICAgfQogICAgCiAgICAKICAgICAgICBzZWxmLmRpbWVuc2lvbnMgPSB7CiAgICAgICAgCSdjb3VudHJpZXMnOiB7CiAgICAgICAgICAgICAgICAnbGFiZWxzJzogWyAnZ2VybWFueScsICAnZW5nbGFuZCcsICAnYXVzdHJpYScsICAnZ3JlZWNlJyAgXSwKICAgICAgICAgICAgICAgICd2YXJpYWJsZXMnOiBbICdwcm9kdWN0aW9uJywgICdpbnZlbnRvcnknLCAgJ3Byb2R1Y3Rpb25TdGFydFJhdGUnLCAgJ3Byb2R1Y3Rpb25EdXJhdGlvbicsICAncHJvZHVjdGlvblN0YXJ0JywgICdwcm9kdWN0aW9uUmF0ZScgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgCSdwcm9kdWN0cyc6IHsKICAgICAgICAgICAgICAgICdsYWJlbHMnOiBbICcxJywgICcyJywgICczJyAgXSwKICAgICAgICAgICAgICAgICd2YXJpYWJsZXMnOiBbICdwcm9kdWN0aW9uJywgICdpbnZlbnRvcnknLCAgJ3Byb2R1Y3Rpb25TdGFydFJhdGUnLCAgJ3Byb2R1Y3Rpb25EdXJhdGlvbicsICAncHJvZHVjdGlvblN0YXJ0JywgICdwcm9kdWN0aW9uUmF0ZScgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgCScnOiB7CiAgICAgICAgICAgICAgICAnbGFiZWxzJzogWyAgXSwKICAgICAgICAgICAgICAgICd2YXJpYWJsZXMnOiBbICBdLAogICAgICAgICAgICB9LAogICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgIHNlbGYuZGltZW5zaW9uc19vcmRlciA9IHsnaW52ZW50b3J5JzogWydwcm9kdWN0cycsICdjb3VudHJpZXMnXSwgJ3Byb2R1Y3Rpb24nOiBbJ3Byb2R1Y3RzJywgJ2NvdW50cmllcyddLCAncHJvZHVjdGlvbkR1cmF0aW9uJzogWydwcm9kdWN0cycsICdjb3VudHJpZXMnXSwgJ3Byb2R1Y3Rpb25TdGFydFJhdGUnOiBbJ3Byb2R1Y3RzJywgJ2NvdW50cmllcyddLCAncHJvZHVjdGlvblJhdGUnOiBbJ3Byb2R1Y3RzJywgJ2NvdW50cmllcyddLCAncHJvZHVjdGlvblN0YXJ0JzogWydwcm9kdWN0cycsICdjb3VudHJpZXMnXX0gICAgIAogICAgCiAgICAgICAgc2VsZi5zdG9ja3MgPSBbJ2ludmVudG9yeScsICAgJ2ludmVudG9yeVsxLGdlcm1hbnldJywgICAnaW52ZW50b3J5WzEsZW5nbGFuZF0nLCAgICdpbnZlbnRvcnlbMSxhdXN0cmlhXScsICAgJ2ludmVudG9yeVsxLGdyZWVjZV0nLCAgICdpbnZlbnRvcnlbMixnZXJtYW55XScsICAgJ2ludmVudG9yeVsyLGVuZ2xhbmRdJywgICAnaW52ZW50b3J5WzIsYXVzdHJpYV0nLCAgICdpbnZlbnRvcnlbMixncmVlY2VdJywgICAnaW52ZW50b3J5WzMsZ2VybWFueV0nLCAgICdpbnZlbnRvcnlbMyxlbmdsYW5kXScsICAgJ2ludmVudG9yeVszLGF1c3RyaWFdJywgICAnaW52ZW50b3J5WzMsZ3JlZWNlXScsICAgJ3Byb2R1Y3Rpb24nLCAgICdwcm9kdWN0aW9uWzEsZ2VybWFueV0nLCAgICdwcm9kdWN0aW9uWzEsZW5nbGFuZF0nLCAgICdwcm9kdWN0aW9uWzEsYXVzdHJpYV0nLCAgICdwcm9kdWN0aW9uWzEsZ3JlZWNlXScsICAgJ3Byb2R1Y3Rpb25bMixnZXJtYW55XScsICAgJ3Byb2R1Y3Rpb25bMixlbmdsYW5kXScsICAgJ3Byb2R1Y3Rpb25bMixhdXN0cmlhXScsICAgJ3Byb2R1Y3Rpb25bMixncmVlY2VdJywgICAncHJvZHVjdGlvblszLGdlcm1hbnldJywgICAncHJvZHVjdGlvblszLGVuZ2xhbmRdJywgICAncHJvZHVjdGlvblszLGF1c3RyaWFdJywgICAncHJvZHVjdGlvblszLGdyZWVjZV0nICBdCiAgICAgICAgc2VsZi5mbG93cyA9IFsncHJvZHVjdGlvblJhdGUnLCAgICdwcm9kdWN0aW9uUmF0ZVsxLGdlcm1hbnldJywgICAncHJvZHVjdGlvblJhdGVbMSxlbmdsYW5kXScsICAgJ3Byb2R1Y3Rpb25SYXRlWzEsYXVzdHJpYV0nLCAgICdwcm9kdWN0aW9uUmF0ZVsxLGdyZWVjZV0nLCAgICdwcm9kdWN0aW9uUmF0ZVsyLGdlcm1hbnldJywgICAncHJvZHVjdGlvblJhdGVbMixlbmdsYW5kXScsICAgJ3Byb2R1Y3Rpb25SYXRlWzIsYXVzdHJpYV0nLCAgICdwcm9kdWN0aW9uUmF0ZVsyLGdyZWVjZV0nLCAgICdwcm9kdWN0aW9uUmF0ZVszLGdlcm1hbnldJywgICAncHJvZHVjdGlvblJhdGVbMyxlbmdsYW5kXScsICAgJ3Byb2R1Y3Rpb25SYXRlWzMsYXVzdHJpYV0nLCAgICdwcm9kdWN0aW9uUmF0ZVszLGdyZWVjZV0nLCAgICdwcm9kdWN0aW9uU3RhcnQnLCAgICdwcm9kdWN0aW9uU3RhcnRbMSxnZXJtYW55XScsICAgJ3Byb2R1Y3Rpb25TdGFydFsxLGVuZ2xhbmRdJywgICAncHJvZHVjdGlvblN0YXJ0WzEsYXVzdHJpYV0nLCAgICdwcm9kdWN0aW9uU3RhcnRbMSxncmVlY2VdJywgICAncHJvZHVjdGlvblN0YXJ0WzIsZ2VybWFueV0nLCAgICdwcm9kdWN0aW9uU3RhcnRbMixlbmdsYW5kXScsICAgJ3Byb2R1Y3Rpb25TdGFydFsyLGF1c3RyaWFdJywgICAncHJvZHVjdGlvblN0YXJ0WzIsZ3JlZWNlXScsICAgJ3Byb2R1Y3Rpb25TdGFydFszLGdlcm1hbnldJywgICAncHJvZHVjdGlvblN0YXJ0WzMsZW5nbGFuZF0nLCAgICdwcm9kdWN0aW9uU3RhcnRbMyxhdXN0cmlhXScsICAgJ3Byb2R1Y3Rpb25TdGFydFszLGdyZWVjZV0nICBdCiAgICAgICAgc2VsZi5jb252ZXJ0ZXJzID0gWydhdmVyYWdlSW52ZW50b3J5JywgICAnYXZlcmFnZUludmVudG9yeVVzaW5nU2l6ZScsICAgJ2ludmVudG9yeVNpemUnLCAgICdsYXJnZXN0R2VybWFuSW52ZW50b3J5JywgICAncHJvZHVjdGlvbkR1cmF0aW9uJywgICAncHJvZHVjdGlvbkR1cmF0aW9uWzEsZ2VybWFueV0nLCAgICdwcm9kdWN0aW9uRHVyYXRpb25bMSxlbmdsYW5kXScsICAgJ3Byb2R1Y3Rpb25EdXJhdGlvblsxLGF1c3RyaWFdJywgICAncHJvZHVjdGlvbkR1cmF0aW9uWzEsZ3JlZWNlXScsICAgJ3Byb2R1Y3Rpb25EdXJhdGlvblsyLGdlcm1hbnldJywgICAncHJvZHVjdGlvbkR1cmF0aW9uWzIsZW5nbGFuZF0nLCAgICdwcm9kdWN0aW9uRHVyYXRpb25bMixhdXN0cmlhXScsICAgJ3Byb2R1Y3Rpb25EdXJhdGlvblsyLGdyZWVjZV0nLCAgICdwcm9kdWN0aW9uRHVyYXRpb25bMyxnZXJtYW55XScsICAgJ3Byb2R1Y3Rpb25EdXJhdGlvblszLGVuZ2xhbmRdJywgICAncHJvZHVjdGlvbkR1cmF0aW9uWzMsYXVzdHJpYV0nLCAgICdwcm9kdWN0aW9uRHVyYXRpb25bMyxncmVlY2VdJywgICAncHJvZHVjdGlvblN0YXJ0UmF0ZScsICAgJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMSxnZXJtYW55XScsICAgJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMSxlbmdsYW5kXScsICAgJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMSxhdXN0cmlhXScsICAgJ3Byb2R1Y3Rpb25TdGFydFJhdGVbMSxncmVlY2VdJywgICAncHJvZHVjdGlvblN0YXJ0UmF0ZVsyLGdlcm1hbnldJywgICAncHJvZHVjdGlvblN0YXJ0UmF0ZVsyLGVuZ2xhbmRdJywgICAncHJvZHVjdGlvblN0YXJ0UmF0ZVsyLGF1c3RyaWFdJywgICAncHJvZHVjdGlvblN0YXJ0UmF0ZVsyLGdyZWVjZV0nLCAgICdwcm9kdWN0aW9uU3RhcnRSYXRlWzMsZ2VybWFueV0nLCAgICdwcm9kdWN0aW9uU3RhcnRSYXRlWzMsZW5nbGFuZF0nLCAgICdwcm9kdWN0aW9uU3RhcnRSYXRlWzMsYXVzdHJpYV0nLCAgICdwcm9kdWN0aW9uU3RhcnRSYXRlWzMsZ3JlZWNlXScsICAgJ3NtYWxsZXN0R2VybWFuSW52ZW50b3J5JywgICAndG90YWxJbnZlbnRvcnknICBdCiAgICAgICAgc2VsZi5nZiA9IFtdCiAgICAgICAgc2VsZi5jb25zdGFudHM9IFtdCiAgICAgICAgc2VsZi5ldmVudHMgPSBbCiAgICAgICAgICAgIF0KICAgIAogICAgICAgIHNlbGYubWVtbyA9IHt9CiAgICAgICAgZm9yIGtleSBpbiBsaXN0KHNlbGYuZXF1YXRpb25zLmtleXMoKSk6CiAgICAgICAgICBzZWxmLm1lbW9ba2V5XSA9IHt9ICAjIERJQ1QgT0YgRElDVFMhCiAgICAgICAgICAKICAgIAogICAgIiIiCiAgICBCdWlsdGluIGhlbHBlcnMKICAgICIiIgogICAgZGVmIHJhbXAoc2VsZixzbG9wZSxzdGFydCx0KToKICAgICAgICBpZiBub3Qgc3RhcnQ6CiAgICAgICAgICAgIHN0YXJ0ID0gc2VsZi5zdGFydHRpbWUKICAgICAgICBpZiB0IDw9IHN0YXJ0OiByZXR1cm4gMAogICAgICAgIHJldHVybiAodC1zdGFydCkqc2xvcGUKICAgICAgICAKICAgIGRlZiByb290bihzZWxmLGV4cHJlc3Npb24sb3JkZXIpOgogICAgICAgIG9yZGVyID0gcm91bmQob3JkZXIsMCkKICAgICAgICBpZiBleHByZXNzaW9uIDwgMCBhbmQgb3JkZXIgJSAyID09IDA6ICMgU3RlbGxhIGRvZXMgbm90IGFsbG93IGV2ZW4gcm9vdHMgZm9yIG5lZ2F0aXZlIG51bWJlcnMgYXMgbm8gY29tcGxleCBudW1iZXJzIGFyZSBzdXBwb3J0ZWQKICAgICAgICAgICAgcmV0dXJuIG5wLm5hbgogICAgICAgIHJldHVybiAtYWJzKGV4cHJlc3Npb24pKiooMS9yb3VuZChvcmRlciwwKSkgaWYgZXhwcmVzc2lvbiA8IDAgZWxzZSBhYnMoZXhwcmVzc2lvbikqKigxL3JvdW5kKG9yZGVyLDApKSAjIFN0ZWxsYSBMb2dpYyEgTm8gQ29tcGxleCBudW1iZXJzIGZvciBuZWdhdGl2ZSBudW1iZXJzLiBIZW5jZSB0YWtlIHRoZSBudGggcm9vdCBvZiB0aGUgYWJzb2x1dGUgdmFsdWUgYW5kIHRoZW4gYWRkIHRoZSBuZWdhdGl2aXR5IChpZiBhbnkpCiAgICAKICAgICIiIgogICAgU3RhdGlzdGljYWwgYnVpbHRpbnMgd2l0aCBTZWVkCiAgICAiIiIKICAgIGRlZiBwYXJldG9fd2l0aF9zZWVkKHNlbGYsIHNoYXBlLCBzY2FsZSwgc2VlZCwgdCk6CiAgICAgICAgaWYgdCA9PSBzZWxmLnN0YXJ0dGltZToKICAgICAgICAgICAgbnAucmFuZG9tLnNlZWQoaW50KHNlZWQpKQogICAgICAgIHJldHVybiBucC5yYW5kb20ucGFyZXRvKHNoYXBlKSAqIHNjYWxlICAKICAgIAogICAgZGVmIHdlaWJ1bGxfd2l0aF9zZWVkKHNlbGYsIHNoYXBlLCBzY2FsZSwgc2VlZCwgdCk6CiAgICAgICAgaWYgdCA9PSBzZWxmLnN0YXJ0dGltZToKICAgICAgICAgICAgbnAucmFuZG9tLnNlZWQoaW50KHNlZWQpKQogICAgICAgIHJldHVybiBucC5yYW5kb20ud2VpYnVsbChzaGFwZSkgKiBzY2FsZSAgICAgIAogICAgCiAgICBkZWYgcG9pc3Nvbl93aXRoX3NlZWQoc2VsZiwgbXUsIHNlZWQsIHQpOgogICAgICAgIGlmIHQgPT0gc2VsZi5zdGFydHRpbWU6CiAgICAgICAgICAgIG5wLnJhbmRvbS5zZWVkKGludChzZWVkKSkKICAgICAgICByZXR1cm4gbnAucmFuZG9tLnBvaXNzb24obXUpICAgCiAgICAKICAgIGRlZiBuZWdiaW5vbWlhbF93aXRoX3NlZWQoc2VsZiwgc3VjY2Vzc2VzLCBwLCBzZWVkLCB0KToKICAgICAgICBpZiB0ID09IHNlbGYuc3RhcnR0aW1lOgogICAgICAgICAgICBucC5yYW5kb20uc2VlZChpbnQoc2VlZCkpCiAgICAgICAgcmV0dXJuIG5wLnJhbmRvbS5uZWdhdGl2ZV9iaW5vbWlhbChzdWNjZXNzZXMsIHApICAKICAgIAogICAgZGVmIGxvZ25vcm1hbF93aXRoX3NlZWQoc2VsZiwgbWVhbiwgc3RkZXYsIHNlZWQsIHQpOgogICAgICAgIGlmIHQgPT0gc2VsZi5zdGFydHRpbWU6CiAgICAgICAgICAgIG5wLnJhbmRvbS5zZWVkKGludChzZWVkKSkKICAgICAgICByZXR1cm4gbnAucmFuZG9tLmxvZ25vcm1hbChtZWFuLCBzdGRldikgICAKICAgIAogICAgZGVmIGxvZ2lzdGljX3dpdGhfc2VlZChzZWxmLCBtZWFuLCBzY2FsZSwgc2VlZCwgdCk6CiAgICAgICAgaWYgdCA9PSBzZWxmLnN0YXJ0dGltZToKICAgICAgICAgICAgbnAucmFuZG9tLnNlZWQoaW50KHNlZWQpKQogICAgICAgIHJldHVybiBucC5yYW5kb20ubG9naXN0aWMobWVhbiwgc2NhbGUpCiAgICAKICAgIGRlZiByYW5kb21fd2l0aF9zZWVkKHNlbGYsIHNlZWQsIHQgKToKICAgICAgICBpZiB0ID09IHNlbGYuc3RhcnR0aW1lOgogICAgICAgICAgICByYW5kb20uc2VlZChpbnQoc2VlZCkpCiAgICAgICAgcmV0dXJuIHJhbmRvbS5yYW5kb20oKQoKICAgIGRlZiBiZXRhX3dpdGhfc2VlZChzZWxmLCBhLGIsc2VlZCwgdCk6CiAgICAgICAgaWYgdCA9PSBzZWxmLnN0YXJ0dGltZToKICAgICAgICAgICAgbnAucmFuZG9tLnNlZWQoaW50KHNlZWQpKQogICAgICAgIHJldHVybiBucC5yYW5kb20uYmV0YShhLGIpCiAgICAgICAgCiAgICBkZWYgYmlub21pYWxfd2l0aF9zZWVkKHNlbGYsIG4scCxzZWVkLCB0KToKICAgICAgICBpZiB0ID09IHNlbGYuc3RhcnR0aW1lOgogICAgICAgICAgICBucC5yYW5kb20uc2VlZChpbnQoc2VlZCkpCiAgICAgICAgcmV0dXJuIG5wLnJhbmRvbS5iaW5vbWlhbChuLHApCiAgICAgICAgCiAgICBkZWYgZ2FtbWFfd2l0aF9zZWVkKHNlbGYsIHNoYXBlLHNjYWxlLHNlZWQsIHQpOgogICAgICAgIGlmIHQgPT0gc2VsZi5zdGFydHRpbWU6CiAgICAgICAgICAgIG5wLnJhbmRvbS5zZWVkKGludChzZWVkKSkKICAgICAgICByZXR1cm4gbnAucmFuZG9tLmdhbW1hKHNoYXBlLHNjYWxlKQogICAgICAgIAogICAgZGVmIGV4cHJuZF93aXRoX3NlZWQoc2VsZiwgcGxhbWJkYSxzZWVkLCB0KToKICAgICAgICBpZiB0ID09IHNlbGYuc3RhcnR0aW1lOgogICAgICAgICAgICBucC5yYW5kb20uc2VlZChpbnQoc2VlZCkpCiAgICAgICAgcmV0dXJuIG5wLnJhbmRvbS5leHBvbmVudGlhbChwbGFtYmRhKQogICAgICAgIAogICAgZGVmIGdlb21ldHJpY193aXRoX3NlZWQoc2VsZiwgcCwgc2VlZCwgdCk6CiAgICAgICAgaWYgdCA9PSBzZWxmLnN0YXJ0dGltZToKICAgICAgICAgICAgbnAucmFuZG9tLnNlZWQoaW50KHNlZWQpKQogICAgICAgIHJldHVybiBucC5yYW5kb20uZ2VvbWV0cmljKHApCiAgICAKICAgIGRlZiB0cmlhbmd1bGFyX3dpdGhfc2VlZChzZWxmLCBsZWZ0LCBtb2RlLCByaWdodCwgc2VlZCwgdCk6CiAgICAgICAgaWYgdCA9PSBzZWxmLnN0YXJ0dGltZToKICAgICAgICAgICAgbnAucmFuZG9tLnNlZWQoaW50KHNlZWQpKQogICAgICAgIHJldHVybiBucC5yYW5kb20udHJpYW5ndWxhcihsZWZ0LCBtb2RlLCByaWdodCkKICAgIAogICAgZGVmIHJhbmsoc2VsZiwgbGlzLCByYW5rKToKICAgICAgICByYW5rID0gaW50KHJhbmspCiAgICAgICAgc29ydGVkX2xpc3QgPSBucC5zb3J0KGxpcykKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJhbmt0aF9lbGVtID0gc29ydGVkX2xpc3RbcmFuay0xXQogICAgICAgIGV4Y2VwdCBJbmRleEVycm9yIGFzIGU6CiAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIlJBTks6IFJhbmsge30gdG9vIGhpZ2ggZm9yIGFycmF5IG9mIHNpemUge30iLmZvcm1hdChyYW5rLGxlbihsaXMpKSkKICAgICAgICByZXR1cm4gKGxpcz09cmFua3RoX2VsZW0pLm5vbnplcm8oKVswXVswXSsxCiAgICAgICAgCgogICAgZGVmIGludGVycG9sYXRlKHNlbGYsIHZhcmlhYmxlLCB0LCAqYXJncyk6CiAgICAgICAgIiIiCiAgICAgICAgSGVscGVyIGZvciBidWlsdGluICJpbnRlcnBvbGF0ZSIuIFVzZXMgdGhlIGFycmF5ZWQgdmFyaWFibGUgYW5kIGFyZ3MgdG8gY29tcHV0ZSB0aGUgaW50ZXJwb2xhdGlvbgogICAgICAgIDpwYXJhbSB2YXJpYWJsZToKICAgICAgICA6cGFyYW0gdDoKICAgICAgICA6cGFyYW0gYXJnczogSW50ZXJwb2xhdGlvbiB3ZWlnaHQgZm9yIGVhY2ggZGltZW5zaW9uLCBiZXR3ZWVuIG9uZSBvciB6ZXJvCiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKICAgICAgICBkZWYgY29tcHV0ZV94KHZhbHVlcyk6ICMKICAgICAgICAgICAgIiIiCiAgICAgICAgICAgIENvbXB1dGUgeCB2YWx1ZXMgZm9yIGludGVycG9sYXRpb24uIEFsd2F5cyBmcm9tIDAgdG8gMS4gRS5nLiB2YWx1ZXMgPSBbMSwyLDNdLCB0aGVuIHggPSBbMCwgMC41LCAxLjBdCiAgICAgICAgICAgIDpwYXJhbSB2YWx1ZXM6CiAgICAgICAgICAgIDpyZXR1cm46CiAgICAgICAgICAgICIiIgogICAgICAgICAgICAjCiAgICAgICAgICAgIHggPSBbMF0KICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKHZhbHVlcykpOiB4ICs9IFt4W2kgLSAxXSArIDEgLyAobGVuKHZhbHVlcykgLSAxKV0KICAgICAgICAgICAgcmV0dXJuIHgKCiAgICAgICAgZGVmIGludGVycG9sYXRlX3ZhbHVlcyhpbmRleCwgeV92YWwpOiAgIyBJbnRlcm5hbCBpbnRlcnBvbGF0ZSBvZiBhIGRpbWVuc2lvbidzIHJlc3VsdHMKICAgICAgICAgICAgeF92YWwgPSBjb21wdXRlX3goeV92YWwpCiAgICAgICAgICAgIHBvaW50cyA9IFsoeF92YWxbaV0sIHlfdmFsW2ldKSBmb3IgaSBpbiByYW5nZSgwLCBsZW4oeF92YWwpKV0KICAgICAgICAgICAgcmV0dXJuIExFUlAoaW5kZXgsIHBvaW50cykKCiAgICAgICAgIyBGaXggZWFjaCB3ZWlnaHQgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEKICAgICAgICBhcmdzID0gW21heCgwLG1pbih4LDEpKSBmb3IgeCBpbiBhcmdzXQoKICAgICAgICAjIEdldCBkaW1lbnNpb25zIG9mIHZhcmlhYmxlICgyLDMsNCAuLi4pCiAgICAgICAgZGltZW5zaW9ucyA9IHNlbGYuZGltZW5zaW9uc19vcmRlclt2YXJpYWJsZV0KCiAgICAgICAgIyBHZXQgTGFiZWxzCiAgICAgICAgbGFiZWxzID0ge2tleTogZGltWyJsYWJlbHMiXSBmb3Iga2V5LCBkaW0gaW4KICAgICAgICAgICAgICAgICAgZGljdChmaWx0ZXIobGFtYmRhIGVsZW06IGVsZW1bMF0gaW4gZGltZW5zaW9ucywgc2VsZi5kaW1lbnNpb25zLml0ZW1zKCkpKS5pdGVtcygpfQoKICAgICAgICAjIENvbXB1dGUKICAgICAgICByZXN1bHRzID0ge30KICAgICAgICBpZiBsZW4obGFiZWxzLmtleXMoKSkgPT0gMToKICAgICAgICAgICAgcmV0dXJuIGludGVycG9sYXRlX3ZhbHVlcyhhcmdzWzBdLCBzZWxmLmVxdWF0aW9uKHZhcmlhYmxlICsgIlsqXSIsIHQpKQogICAgICAgIGZvciBpbmRleCwgZGltZW5zaW9uIGluIGVudW1lcmF0ZShkaW1lbnNpb25zKToKICAgICAgICAgICAgcmVzdWx0c1tkaW1lbnNpb25dID0gW10KICAgICAgICAgICAgZm9yIGxhYmVsIGluIGxhYmVsc1tkaW1lbnNpb25dOgogICAgICAgICAgICAgICAgaW5kaWNlcyA9IFsiKiIgaWYgaSAhPSBpbmRleCBlbHNlIGxhYmVsIGZvciBpIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlKDAsIGxlbihkaW1lbnNpb25zKSldICAjIEJ1aWxkIGluZGljZXMsIHN1Y2ggYXMgIiosZWxlbWVudDEiIG9yICIxLCoiCgogICAgICAgICAgICAgICAgcmVzdWx0c1tkaW1lbnNpb25dICs9IFsKICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0ZV92YWx1ZXMoYXJnc1tpbmRleF0sIHNlbGYuZXF1YXRpb24odmFyaWFibGUgKyAiW3t9XSIuZm9ybWF0KCIsIi5qb2luKGluZGljZXMpKSwgdCkpXQoKICAgICAgICByZXR1cm4gW2ludGVycG9sYXRlX3ZhbHVlcyhhcmdzW2ldLCB2KSBmb3IgaSwgdiBpbiBlbnVtZXJhdGUocmVzdWx0cy52YWx1ZXMoKSldWzBdCgogICAgZGVmIGxvb2t1cGludihzZWxmLGdmLCB2YWx1ZSk6CiAgICAgICAgIiIiCiAgICAgICAgSGVscGVyIGZvciBsb29rdXBpbnYgYnVpbHRpbi4gTG9va3MgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHggb2YgYSBnaXZlbiB5CiAgICAgICAgOnBhcmFtIGdmOiBOYW1lIG9mIGdyYXBoaWNhbCBmdW5jdGlvbgogICAgICAgIDpwYXJhbSB2YWx1ZTogVmFsdWUgd2UgYXJlIGxvb2tpbmcgZm9yICh5KQogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgZGVmIGxlcnBmdW4oeCwgcG9pbnRzKTogICMgU3BlY2lhbCBsZXJwIGZ1bmN0aW9uIGZvciB0aGUgcmV2ZXJzZWQgcG9pbnRzCiAgICAgICAgICAgIGZyb20gc2NpcHkuaW50ZXJwb2xhdGUgaW1wb3J0IGludGVycDFkCiAgICAgICAgICAgIHhfdmFscyA9IG5wLmFycmF5KFt4WzBdIGZvciB4IGluIHBvaW50c10pCiAgICAgICAgICAgIHlfdmFscyA9IG5wLmFycmF5KFt4WzFdIGZvciB4IGluIHBvaW50c10pCiAgICAgICAgICAgIGYgPSBpbnRlcnAxZCh4X3ZhbHMsIHlfdmFscykKICAgICAgICAgICAgcmV0dXJuIGYoeCkKCiAgICAgICAgcmVzdWx0cyA9IFtdCiAgICAgICAgZm9yIHQgaW4gbnAuYXJhbmdlKHNlbGYuc3RhcnR0aW1lLCBzZWxmLnN0b3B0aW1lICsgc2VsZi5kdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdCk6ICAjIENvbXB1dGUgYWxsIHkgdmFsdWVzIGZvciBncmFwaGljYWwgZnVuY3Rpb25zIHVzaW5nIHN0YW5kYXJkIGludGVycG9sYXRlIChMRVJQKQogICAgICAgICAgICByZXN1bHRzICs9IFsoTEVSUCh0LCBzZWxmLnBvaW50c1tnZl0pLCB0KV0gIyB5LHgKCiAgICAgICAgcmV0dXJuIG5wLnJvdW5kKGxlcnBmdW4odmFsdWUsIHJlc3VsdHMpLAogICAgICAgICAgICAgICAgICAgICAzKSAgIyBVc2UgTEVSUCBmdW5jdGlvbiBmb3IgdGhlIHJldmVyc2VkIHNldCBvZiBwb2ludHMgKHkseCkgYW5kIGZpbmQgdGhlIGNvcnJlY3QgdmFsdWUuIENhbm5vdCB1c2Ugc3RhbmRhcmQgTEVSUCBoZXJlIGJlY2F1c2UgdGhhdCB3b3VsZCByZXF1aXJlIGNvbnRpbnVvdXMgWCAoMSwyLDMuLikKCiAgICBkZWYgZGVsYXkoc2VsZiwgdGRlbGF5ZWQsIG9mZnNldCwgaW5pdGlhbCwgdCk6CiAgICAgICAgJycnCiAgICAgICAgRGVsYXkgYnVpbHRpbgogICAgICAgIDpwYXJhbSB0ZGVsYXllZDogRGVsYXllZCBUCiAgICAgICAgOnBhcmFtIG9mZnNldDogT2Zmc2V0CiAgICAgICAgOnBhcmFtIGluaXRpYWw6IEluaXRpYWwgdmFsdWUKICAgICAgICA6cGFyYW0gdDoKICAgICAgICA6cmV0dXJuOgogICAgICAgICcnJwogICAgICAgIGlmICh0IC0gc2VsZi5zdGFydHRpbWUpIDwgb2Zmc2V0OiByZXR1cm4gaW5pdGlhbAogICAgICAgIGVsc2U6IHJldHVybiB0ZGVsYXllZAoKICAgIGRlZiBjb3VudGVyKHNlbGYsc3RhcnQsIGludGVydmFsLCB0KToKICAgICAgICAnJycKICAgICAgICBDb3VudGVyIGJ1bHRpbgogICAgICAgIDpwYXJhbSBzdGFydDoKICAgICAgICA6cGFyYW0gaW50ZXJ2YWw6CiAgICAgICAgOnBhcmFtIHQ6CiAgICAgICAgOnJldHVybjoKICAgICAgICAnJycKICAgICAgICBudW1fZWxlbXMgPSAoaW50ZXJ2YWwgLyBzdGFydCAvIHNlbGYuZHQpCiAgICAgICAgdmFsdWUgPSBpbnRlcnZhbCAvIG51bV9lbGVtcwogICAgICAgIHRfY29weSA9IGNvcHkodCkKCiAgICAgICAgd2hpbGUgdCA%2BPSBpbnRlcnZhbDogdCA9IHQgLSBpbnRlcnZhbAogICAgICAgIGlmICh0X2NvcHkgPiBpbnRlcnZhbCk6IHJldHVybiAoc3RhcnQgKyAodCAvIHNlbGYuZHQpICogdmFsdWUpCgogICAgICAgIHJldHVybiAodCAvIHNlbGYuZHQgKiB2YWx1ZSkKCiAgICBkZWYgbnB2KHNlbGYsIGluaXRpYWwsIHAsIHQpOgogICAgICAgICIiIgogICAgICAgIE5QViAoTmV0IFByZXNlbnQgVmFsdWUpIGJ1aWx0aW4KICAgICAgICA6cGFyYW0gaW5pdGlhbDoKICAgICAgICA6cGFyYW0gcDoKICAgICAgICA6cGFyYW0gdDoKICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIHJhdGUgPSAxLjAgLyAoMS4wICsgcCkgKiogKHQgLSBzZWxmLmR0IC0gc2VsZi5zdGFydHRpbWUgKyBzZWxmLmR0KQogICAgICAgIHJldHVybiBpbml0aWFsIGlmICh0IDw9IHNlbGYuc3RhcnR0aW1lKSBlbHNlICggc2VsZi5ucHYoaW5pdGlhbCwgcCwgdCAtIHNlbGYuZHQpICsgKHNlbGYuZHQgKiByYXRlICogaW5pdGlhbCkgKSMgUmVjdXJzZQoKICAgIGRlZiBpcnIoc2VsZiwgc3RvY2tfbmFtZSwgbWlzc2luZywgdCxteW5hbWUpOgogICAgICAgICIiIgogICAgICAgIEFwcHJveGltYXRlIElSUiAoSW50ZXJuYWwgUmF0ZSBvZiBSZXR1cm4pCiAgICAgICAgOnBhcmFtIHN0b2NrX25hbWU6IElkZW50aWZpZXIgb2YgU3RvY2sgdG8gYXBwcm94aW1hdGUgZm9yCiAgICAgICAgOnBhcmFtIG1pc3Npbmc6IFJlcGxhY2UgbWlzc2luZyB2YWx1ZXMgd2l0aCB0aGlzIHZhbHVlCiAgICAgICAgOnBhcmFtIHQ6CiAgICAgICAgOnJldHVybjoKICAgICAgICAiIiIKCiAgICAgICAgZGVmIGNvbXB1dGVfbnB2KHN0b2NrX25hbWUsIHQsIGksIG1pc3NpbmcpOgogICAgICAgICAgICBJID0gbWlzc2luZyBpZiBtaXNzaW5nIGVsc2Ugc2VsZi5lcXVhdGlvbihzdG9ja19uYW1lLCBzZWxmLnN0YXJ0dGltZSkKICAgICAgICAgICAgcmV0dXJuIEkgKyBzdW0oIFtzZWxmLm1lbW9pemUoc3RvY2tfbmFtZSwgdCkgLyAoMSArIGkpICoqIHQgZm9yIHQgaW4gbnAuYXJhbmdlKHNlbGYuc3RhcnR0aW1lK3NlbGYuZHQgLCB0LCBzZWxmLmR0KV0pCgogICAgICAgIGkgPSAwCiAgICAgICAgdHJ5OgogICAgICAgICAgICBpID0gMCBpZiB0IDw9IHNlbGYuc3RhcnR0aW1lICsgc2VsZi5kdCBlbHNlIHNlbGYubWVtb1tteW5hbWVdW3Qtc2VsZi5kdF0KICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgaWYgdCA9PSBzZWxmLnN0YXJ0dGltZTogcmV0dXJuIE5vbmUKCiAgICAgICAgYmVzdF9rdyA9IHtpIDogY29tcHV0ZV9ucHYoc3RvY2tfbmFtZSwgdCwgaSwgbWlzc2luZyl9CiAgICAgICAgZm9yIF8gaW4gcmFuZ2UoMCwgMzAwKToKICAgICAgICAgICAgIyBIZXJlIHdlIGFwcHJveGltYXRlIHRoZSBJUlIKICAgICAgICAgICAga3cgPSBjb21wdXRlX25wdihzdG9ja19uYW1lLCB0LCBpLCBtaXNzaW5nKQoKICAgICAgICAgICAgY2hhbmdlID0gMC4wMDEKCiAgICAgICAgICAgIGJlc3Rfa3dbaV0gPSBrdwoKICAgICAgICAgICAgaWYgYWJzKGt3KSA8IHNlbGYubWVtb2l6ZShzdG9ja19uYW1lLCB0KSowLjE6IGNoYW5nZSA9IDAuMDAwMQoKICAgICAgICAgICAgaWYgYWJzKGt3KSA8IHNlbGYubWVtb2l6ZShzdG9ja19uYW1lLCB0KSowLjA1OiBjaGFuZ2UgPSAwLjAwMDAxCgogICAgICAgICAgICBpZiBhYnMoa3cpIDwgc2VsZi5tZW1vaXplKHN0b2NrX25hbWUsIHQpKjAuMDI6IGNoYW5nZSA9IDAuMDAwMDAxCgogICAgICAgICAgICBpZiBrdyA8IDA6IGkgLT0gY2hhbmdlCiAgICAgICAgICAgIGVsaWYga3cgPiAwOiAgaSArPSBjaGFuZ2UKCiAgICAgICAgICAgIGlmIGt3ID09IDA6IHJldHVybiBpCiAgICAgICAgYmVzdF9rdyA9IHtrOiB2IGZvciBrLCB2IGluIHNvcnRlZChiZXN0X2t3Lml0ZW1zKCksIGtleT1sYW1iZGEgaXRlbTogaXRlbVsxXSl9CiAgICAgICAgeCA9IHt2OiBrIGZvciBrLCB2IGluIHNvcnRlZChiZXN0X2t3Lml0ZW1zKCksIGtleT1sYW1iZGEgaXRlbTogaXRlbVsxXSl9ICMgU29ydCBieSBiZXN0IG5wdgogICAgICAgIHJldHVybiB4W21pbih4LmtleXMoKSldCgogICAgZGVmIG5vcm1hbGNkZihzZWxmLGxlZnQsIHJpZ2h0LCBtZWFuLCBzaWdtYSk6CiAgICAgICAgaW1wb3J0IHNjaXB5LnN0YXRzCiAgICAgICAgcmlnaHQgPSBzY2lweS5zdGF0cy5ub3JtKGZsb2F0KG1lYW4pLCBmbG9hdChzaWdtYSkpLmNkZihmbG9hdChyaWdodCkpCiAgICAgICAgbGVmdCA9IHNjaXB5LnN0YXRzLm5vcm0oZmxvYXQobWVhbiksIGZsb2F0KHNpZ21hKSkuY2RmKGZsb2F0KGxlZnQpKQogICAgICAgIHJldHVybiByb3VuZChyaWdodCAtIGxlZnQsIDMpCgogICAgZGVmIGNncm93dGgoc2VsZiwgcCk6CiAgICAgICAgIiIiVGhlIHBlci1zdGVwIGdyb3d0aCByYXRlIHogdGhhdCBjb21wb3VuZHMgdG8gcCBvdmVyIG9uZSB0aW1lIHVuaXQuCgogICAgICAgIENsb3NlZCBmb3JtIG9mIHdoYXQgdGhlIHN5bWJvbGljIHZlcnNpb24gc29sdmVkIGZvcjogdGhlIGNvbXBvdW5kaW5nCiAgICAgICAgbG9vcCBvbmx5IGV2ZXIgcHJvZHVjZWQgeCA9ICgxICsgZHQqeikqKm4gd2l0aCBuID0gaW50KDEvZHQpLCBzbwogICAgICAgIDEgKyBwID0gKDEgKyBkdCp6KSoqbiByZXNvbHZlcyBkaXJlY3RseS4KICAgICAgICAiIiIKICAgICAgICBkdCA9IHNlbGYuZHQKICAgICAgICAjIGR0ID4gMSBsZWZ0IHRoZSBvbGQgbG9vcCBlbXB0eSwgaS5lLiBhIHNpbmdsZSBmYWN0b3IuCiAgICAgICAgbiA9IG1heChpbnQoMSAvIGR0KSwgMSkKICAgICAgICByZXR1cm4gKCgxLjAgKyBwKSAqKiAoMS4wIC8gbikgLSAxLjApIC8gZHQKCiAgICBkZWYgbW9udGVjYXJsbyhzZWxmLHByb2JhYmlsaXR5LHNlZWQsIHQpOgogICAgICAgICIiIgogICAgICAgIE1vbnRlY2FybG8gYnVpbHRpbgogICAgICAgIDpwYXJhbSBwcm9iYWJpbGl0eToKICAgICAgICA6cGFyYW0gc2VlZDoKICAgICAgICA6cGFyYW0gdDoKICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIGlmIHNlZWQgYW5kIHQ9PXNlbGYuc3RhcnR0aW1lOgogICAgICAgICAgICByYW5kb20uc2VlZChzZWVkKQogICAgICAgIHJuZG51bWJlciA9IHJhbmRvbS51bmlmb3JtKDAsMTAwKQogICAgICAgIHJldHVybiAxIGlmIHJuZG51bWJlciA8IChwcm9iYWJpbGl0eSpzZWxmLmR0KSBlbHNlIDAKCgogICAgZGVmIGRlcml2bihzZWxmLCBlcXVhdGlvbiwgb3JkZXIsIHQpOgogICAgICAgICIiIgogICAgICAgIG50aCBkZXJpdmF0aXZlIG9mIGFuIGVxdWF0aW9uCiAgICAgICAgOnBhcmFtIGVxdWF0aW9uOiBOYW1lIG9mIHRoZSBlcXVhdGlvbgogICAgICAgIDpwYXJhbSBvcmRlcjogbgogICAgICAgIDpwYXJhbSB0OiBjdXJyZW50IHQKICAgICAgICA6cmV0dXJuOgogICAgICAgICIiIgogICAgICAgIG1lbW8gPSB7fQogICAgICAgIGR0ID0gMC4yNQoKICAgICAgICBkZWYgbWVtKGVxLCB0KToKICAgICAgICAgICAgIiIiCiAgICAgICAgICAgIE1lbW8gZm9yIGludGVybmFsIGVxdWF0aW9ucwogICAgICAgICAgICA6cGFyYW0gZXE6CiAgICAgICAgICAgIDpwYXJhbSB0OgogICAgICAgICAgICA6cmV0dXJuOgogICAgICAgICAgICAiIiIKICAgICAgICAgICAgaWYgbm90IGVxIGluIG1lbW8ua2V5cygpOiBtZW1vW2VxXSA9IHt9CiAgICAgICAgICAgIG15bWVtbyA9IG1lbW9bZXFdCiAgICAgICAgICAgIGlmIHQgaW4gbXltZW1vLmtleXMoKTogcmV0dXJuIG15bWVtb1t0XQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbXltZW1vW3RdID0gc1tlcV0odCkKICAgICAgICAgICAgICAgIHJldHVybiBteW1lbW9bdF0KCiAgICAgICAgcyA9IHt9CiAgICAgICAgc1sxXSA9IGxhbWJkYSB0OiAwIGlmIHQgPD0gc2VsZi5zdGFydHRpbWUgZWxzZSAoc2VsZi5tZW1vaXplKGVxdWF0aW9uLCB0KSAtIHNlbGYubWVtb2l6ZShlcXVhdGlvbiwgdCAtIGR0KSkgLyBkdAoKICAgICAgICBkZWYgYWRkRXF1YXRpb24obik6CiAgICAgICAgICAgIHNbbl0gPSBsYW1iZGEgdDogMCBpZiB0IDw9IHNlbGYuc3RhcnR0aW1lIGVsc2UgKG1lbShuIC0gMSwgdCkgLSBtZW0obiAtIDEsIHQgLSBkdCkpIC8gZHQKCiAgICAgICAgZm9yIG4gaW4gbGlzdChyYW5nZSgyLCBvcmRlciArIDEpKTogYWRkRXF1YXRpb24obikKCiAgICAgICAgcmV0dXJuIHNbb3JkZXJdKHQpIGlmICggdCA%2BPSBzZWxmLnN0YXJ0dGltZSArIChkdCAqIG9yZGVyKSApIGVsc2UgMAoKICAgIGRlZiBzbXRobihzZWxmLCBpbnB1dHN0cmVhbSwgYXZlcmFnaW5nX3RpbWUsIGluaXRpYWwsIG4sIHQpOgogICAgICAgICIiIgogICAgICAgIFByZXR0eSBjb21wbGV4IG9wZXJhdG9yLiBBY3R1YWxseSB3ZSBhcmUgYnVpbGRpbmcgYSB3aG9sZSBtb2RlbCBoZXJlIGFuZCBoYXZlIGl0IHJ1bgogICAgICAgIEZpbmQgaW5mbyBpbiBodHRwczovL3d3dy5pc2Vlc3lzdGVtcy5jb20vcmVzb3VyY2VzL2hlbHAvdjEtOS9kZWZhdWx0Lmh0bSMwOC1SZWZlcmVuY2UvMDctQnVpbHRpbnMvRGVsYXlfYnVpbHRpbnMuaHRtI2thbmNob3IzNjQKICAgICAgICA6cGFyYW0gaW5wdXRzdHJlYW06CiAgICAgICAgOnBhcmFtIGF2ZXJhZ2luZ190aW1lOgogICAgICAgIDpwYXJhbSBpbml0aWFsOgogICAgICAgIDpwYXJhbSBuOgogICAgICAgIDpwYXJhbSB0OgogICAgICAgIDpyZXR1cm46CiAgICAgICAgIiIiCiAgICAgICAgbWVtbyA9IHt9CiAgICAgICAgZHQgPSBzZWxmLmR0CiAgICAgICAgZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQoKICAgICAgICBkZWYgbWVtKGVxLCB0KToKICAgICAgICAgICAgIiIiCiAgICAgICAgICAgIEludGVybmFsIG1lbW8gZm9yIGVxdWF0aW9ucwogICAgICAgICAgICA6cGFyYW0gZXE6CiAgICAgICAgICAgIDpwYXJhbSB0OgogICAgICAgICAgICA6cmV0dXJuOgogICAgICAgICAgICAiIiIKICAgICAgICAgICAgaWYgbm90IGVxIGluIG1lbW8ua2V5cygpOiBtZW1vW2VxXSA9IHt9CiAgICAgICAgICAgIG15bWVtbyA9IG1lbW9bZXFdCiAgICAgICAgICAgIGlmIHQgaW4gbXltZW1vLmtleXMoKTpyZXR1cm4gbXltZW1vW3RdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBteW1lbW9bdF0gPSBzW2VxXSh0KQogICAgICAgICAgICAgICAgcmV0dXJuIG15bWVtb1t0XQoKICAgICAgICBzID0ge30KCiAgICAgICAgZGVmIGFkZEVxdWF0aW9uKG4sIHVwcGVyKToKICAgICAgICAgICAgeSA9IGRlZXBjb3B5KG4pCiAgICAgICAgICAgIGlmIHkgPT0gMToKICAgICAgICAgICAgICAgIHNbInN0b2NrMSJdID0gbGFtYmRhIHQ6ICgKICAgICAgICAgICAgICAgICAgICAobWF4KFswLCAoc2VsZi5tZW1vaXplKGlucHV0c3RyZWFtLCB0KSBpZiAoaW5pdGlhbCBpcyBOb25lKSBlbHNlIGluaXRpYWwpXSkpIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0IDw9IHNlbGYuc3RhcnR0aW1lKSBlbHNlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW0oJ3N0b2NrMScsIHQgLSBkdCkgKyBkdCAqIChtZW0oJ2NoYW5nZUluU3RvY2sxJywgdCAtIGR0KSkpKQogICAgICAgICAgICAgICAgc1snY2hhbmdlSW5TdG9jazEnXSA9IGxhbWJkYSB0OiAoc2VsZi5tZW1vaXplKGlucHV0c3RyZWFtLCB0KSAtIG1lbSgnc3RvY2sxJywgdCkpIC8gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZlcmFnaW5nX3RpbWUgLyB1cHBlcikKICAgICAgICAgICAgaWYgeSA%2BIDE6CiAgICAgICAgICAgICAgICBzWyJzdG9ja3t9Ii5mb3JtYXQoeSldID0gbGFtYmRhIHQ6ICgKICAgICAgICAgICAgICAgICAgICAobWF4KFswLCAoc2VsZi5tZW1vaXplKGlucHV0c3RyZWFtLCB0KSBpZiAoaW5pdGlhbCBpcyBOb25lKSBlbHNlIGluaXRpYWwpXSkpIGlmICh0IDw9IHNlbGYuc3RhcnR0aW1lKSBlbHNlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW0oInN0b2Nre30iLmZvcm1hdCh5KSwgdCAtIGR0KSArIGR0ICogKG1lbSgnY2hhbmdlSW5TdG9ja3t9Jy5mb3JtYXQoeSksIHQgLSBkdCkpKSkKICAgICAgICAgICAgICAgIHNbJ2NoYW5nZUluU3RvY2t7fScuZm9ybWF0KHkpXSA9IGxhbWJkYSB0OiAobWVtKCJzdG9ja3t9Ii5mb3JtYXQoeSAtIDEpLCB0KSAtIG1lbSgic3RvY2t7fSIuZm9ybWF0KHkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQpKSAvIChhdmVyYWdpbmdfdGltZSAvIHVwcGVyKQogICAgICAgIG4gPSBpbnQobikKCiAgICAgICAgZm9yIGkgaW4gbGlzdChyYW5nZSgwLCBuICsgMSkpOiBhZGRFcXVhdGlvbihpLCBuKQoKICAgICAgICByZXR1cm4gc1snc3RvY2t7fScuZm9ybWF0KG4pXSh0KQoKICAgIGRlZiBmb3Jjc3Qoc2VsZixpbnB1dHN0cmVhbSwgYXZlcmFnaW5nX3RpbWUsIGhvcml6b24sIGluaXRpYWwsIHQpOgogICAgICAgIG1lbW8gPSB7ImNoYW5nZV9pbl9pbnB1dCI6IHt9LCAiYXZlcmFnZV9pbnB1dCI6IHt9LCAidHJlbmRfaW5faW5wdXQiOiB7fSwgImZvcmVjYXN0X2lucHV0Ijoge319CgogICAgICAgIGRlZiBtZW0oZXEsIHQpOgogICAgICAgICAgICAiIiIKICAgICAgICAgICAgSW50ZXJuYWwgbWVtbyBmb3IgZXF1YXRpb25zCiAgICAgICAgICAgIDpwYXJhbSBlcToKICAgICAgICAgICAgOnBhcmFtIHQ6CiAgICAgICAgICAgIDpyZXR1cm46CiAgICAgICAgICAgICIiIgogICAgICAgICAgICBteW1lbW8gPSBtZW1vW2VxXQogICAgICAgICAgICBpZiB0IGluIG15bWVtby5rZXlzKCk6IHJldHVybiBteW1lbW9bdF0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIG15bWVtb1t0XSA9IHNbZXFdKHQpCiAgICAgICAgICAgICAgICByZXR1cm4gbXltZW1vW3RdCgogICAgICAgIHMgPSB7CiAgICAgICAgICAgICJjaGFuZ2VfaW5faW5wdXQiOiBsYW1iZGEgdDogbWF4KFswLCAoc2VsZi5tZW1vaXplKGlucHV0c3RyZWFtLHQpIC0gbWVtKCdhdmVyYWdlX2lucHV0JywgdCkpIC8gYXZlcmFnaW5nX3RpbWVdKSwKICAgICAgICAgICAgImF2ZXJhZ2VfaW5wdXQiOiBsYW1iZGEgdDogKChzZWxmLm1lbW9pemUoaW5wdXRzdHJlYW0sdCkpIGlmICh0IDw9IHNlbGYuc3RhcnR0aW1lKSBlbHNlICgKICAgICAgICAgICAgICAgICAgICAgICAgbWVtKCJhdmVyYWdlX2lucHV0IiwgdCAtIHNlbGYuZHQpICsgc2VsZi5kdCAqIChtZW0oImNoYW5nZV9pbl9pbnB1dCIsIHQgLSBzZWxmLmR0KSkpKSwKICAgICAgICAgICAgInRyZW5kX2luX2lucHV0IjogbGFtYmRhIHQ6ICgoKHNlbGYubWVtb2l6ZShpbnB1dHN0cmVhbSx0KSAtIHNlbGYubWVtb2l6ZSgnYXZlcmFnZUlucHV0JywgdCkpIC8gKAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lbW9pemUoJ2F2ZXJhZ2VJbnB1dCcsIHQpICogc2VsZi5tZW1vaXplKCdhdmVyYWdpbmdUaW1lJywgdCkpKSBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVtb2l6ZSgnYXZlcmFnZUlucHV0JywgdCkgPiAwLjApIGVsc2UgKG5wLm5hbikpLAogICAgICAgICAgICAiZm9yZWNhc3RfaW5wdXQiOiBsYW1iZGEgdDogc2VsZi5tZW1vaXplKGlucHV0c3RyZWFtLHQpICogKDEuMCArIG1lbSgidHJlbmRfaW5faW5wdXQiLCB0KSAqIGhvcml6b24pCiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc1siZm9yZWNhc3RfaW5wdXQiXSh0KQoKICAgICNIZWxwZXJzIGZvciBEaW1lbnNpb25zIChBcnJheXMpCgogICAgZGVmIGZpbmRfZGltZW5zaW9ucyhzZWxmLCBzdG9jayk6CiAgICAgICAgc3RvY2tkaW1lbnNpb25zID0ge30KICAgICAgICBmb3IgZGltZW5zaW9uLCB2YWx1ZXMgaW4gc2VsZi5kaW1lbnNpb25zLml0ZW1zKCk6CiAgICAgICAgICAgIGlmIHN0b2NrIGluIHZhbHVlc1sidmFyaWFibGVzIl06CiAgICAgICAgICAgICAgICBzdG9ja2RpbWVuc2lvbnNbZGltZW5zaW9uXSA9IHZhbHVlc1sibGFiZWxzIl0KCiAgICAgICAgaWYgbGVuKHN0b2NrZGltZW5zaW9ucy5rZXlzKCkpID09IDE6CiAgICAgICAgICAgIHJldHVybiBbc3RvY2sgKyAiW3t9XSIuZm9ybWF0KHgpIGZvciB4IGluIHN0b2NrZGltZW5zaW9uc1tsaXN0KHN0b2NrZGltZW5zaW9ucy5rZXlzKCkpWzBdXV0KCiAgICBkZWYgZ2V0X2RpbWVuc2lvbnMoc2VsZiwgZXF1YXRpb24sIHQpOgogICAgICAgIHJlX2ZpbmRfaW5kaWNlcyA9IHInXFsoW14pXSspXF0nCiAgICAgICAgZ3JvdXAgPSByZS5zZWFyY2gocmVfZmluZF9pbmRpY2VzLCBlcXVhdGlvbikuZ3JvdXAoMCkucmVwbGFjZSgiWyIsICIiKS5yZXBsYWNlKCJdIiwgIiIpCiAgICAgICAgZXF1YXRpb25fYmFzaWMgPSBlcXVhdGlvbi5yZXBsYWNlKGdyb3VwLCAiIikucmVwbGFjZSgiW10iLCAiIikKICAgICAgICBsYWJlbHMgPSBbXQogICAgICAgIGZvciBpbmRleCwgZWxlbSBpbiBlbnVtZXJhdGUoZ3JvdXAuc3BsaXQoIiwiKSk6CiAgICAgICAgICAgIGlmIGxlbihlbGVtLnNwbGl0KCI6IikpID4gMTogIyBMaXN0IG9wZXJhdG9yCiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgYm91bmRzID0gW2ludCh4KSBmb3IgeCBpbiBlbGVtLnNwbGl0KCI6IildCiAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoZSkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgYm91bmRzID0gc29ydGVkKGJvdW5kcykKICAgICAgICAgICAgICAgIGlmIGxlbihib3VuZHMpID4gMjoKICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJUb28gbWFueSBhcmd1bWVudHMgZm9yIGxpc3Qgb3BlcmF0b3IuIEV4cGVjdGluZyAyLCBnb3Qge30iLmZvcm1hdChsZW4oYm91bmRzKSkpCgogICAgICAgICAgICAgICAgbGFiZWxzICs9IFtsaXN0KHJhbmdlKGJvdW5kc1swXSwgYm91bmRzWzFdKzEpKV0KCiAgICAgICAgICAgIGVsaWYgZWxlbSA9PSAiKiI6ICMgU3RhciBvcGVyYXRvcgogICAgICAgICAgICAgICAgZGltID0gc2VsZi5kaW1lbnNpb25zX29yZGVyW2VxdWF0aW9uX2Jhc2ljXVtpbmRleF0KICAgICAgICAgICAgICAgIGxhYmVscyArPSBbc2VsZi5kaW1lbnNpb25zW2RpbV1bImxhYmVscyJdXQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgaWYgbm90IHR5cGUoZWxlbSkgaXMgbGlzdDoKICAgICAgICAgICAgICAgICAgICBsYWJlbHMgKz0gW1tlbGVtXV0KICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgbGFiZWxzICs9IFtlbGVtXQoKICAgICAgICBwcm9kdWN0cyA9IGNhcnRlc2lhbl9wcm9kdWN0KGxhYmVscykKCiAgICAgICAgcmV0dXJuX2xpc3QgPSBbXQoKICAgICAgICBmb3IgcHJvZHVjdCBpbiBwcm9kdWN0czoKICAgICAgICAgICAgcHJvZCA9IHN0cihwcm9kdWN0KS5yZXBsYWNlKCIoIiwgIiIpLnJlcGxhY2UoIikiLCAiIikucmVwbGFjZSgiWyIsICIiKS5yZXBsYWNlKCJdIiwgIiIpLnJlcGxhY2UoIiciLCAiIikucmVwbGFjZSgiICIsICIiKQogICAgICAgICAgICByZXR1cm5fbGlzdCArPSBbc2VsZi5tZW1vaXplKGVxdWF0aW9uX2Jhc2ljICsgIlt7fV0iLmZvcm1hdChwcm9kKSwgdCldCiAgICAgICAgICAgIAogICAgICAgIHJldHVybiBucC5hcnJheShyZXR1cm5fbGlzdCkKCgogICAgI0FjY2VzcyBlcXVhdGlvbnMgQVBJCgogICAgZGVmIGVxdWF0aW9uKHNlbGYsIGVxdWF0aW9uLCBhcmcpOgogICAgICAgIHJldHVybiBzZWxmLm1lbW9pemUoZXF1YXRpb24sYXJnKQoKCiAgICAjTWVtb2l6ZXIgZm9yIGVxdWF0aW9ucy4gQWxzbyBkb2VzIG1vc3Qgb2YgQVBJIHdvcmsKCiAgICBkZWYgbWVtb2l6ZShzZWxmLCBlcXVhdGlvbiwgYXJnKToKICAgICAgICBpZiB0eXBlKGVxdWF0aW9uKSBpcyBmbG9hdCBvciB0eXBlKGVxdWF0aW9uKSBpcyBpbnQ6ICMgRmFsbGJhY2sgZm9yIHZhbHVlcwogICAgICAgICAgICByZXR1cm4gZXF1YXRpb24KICAgICAgICBpZiAiKiIgaW4gZXF1YXRpb24gb3IgIjoiIGluIGVxdWF0aW9uOgogICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfZGltZW5zaW9ucyhlcXVhdGlvbixhcmcpCiAgICAgICAgICAgIAogICAgICAgIGlmIG5vdCBlcXVhdGlvbiBpbiBzZWxmLmVxdWF0aW9ucy5rZXlzKCk6CgogICAgICAgICAgICAjIG1hdGNoIGFycmF5IHBhdHRlcm4gYW5kIGZpbmQgbm9uLWFycmF5ZWQgdmFyCiAgICAgICAgICAgIGltcG9ydCByZQogICAgICAgICAgICBtYXRjaCA9IHJlLmZpbmRhbGwocidcW1thLXpBLVoxLTksX10qXF0nLCBlcXVhdGlvbikKCiAgICAgICAgICAgIGlmIG1hdGNoOgoKICAgICAgICAgICAgICAgIGVxdWF0aW9uX3JlcGxhY2VkID0gZXF1YXRpb24ucmVwbGFjZShtYXRjaFswXSwgIiIpCgogICAgICAgICAgICAgICAgaWYgZXF1YXRpb25fcmVwbGFjZWQgaW4gc2VsZi5lcXVhdGlvbnM6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubWVtb2l6ZShlcXVhdGlvbj1lcXVhdGlvbl9yZXBsYWNlZCxhcmc9YXJnKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiRXF1YXRpb24gJ3t9JyBub3QgZm91bmQhIi5mb3JtYXQoZXF1YXRpb24pKQoKICAgICAgICBteW1lbW8gPSBzZWxmLm1lbW9bZXF1YXRpb25dCgogICAgICAgIGlmIGFyZyBpbiBteW1lbW8ua2V5cygpOgogICAgICAgICAgICByZXR1cm4gbXltZW1vW2FyZ10KICAgICAgICBlbHNlOgogICAgICAgICAgICByZXN1bHQgPSBzZWxmLmVxdWF0aW9uc1tlcXVhdGlvbl0oYXJnKQogICAgICAgICAgICBteW1lbW9bYXJnXSA9IHJlc3VsdAoKICAgICAgICByZXR1cm4gcmVzdWx0CgoKICAgIGRlZiBzZXREVChzZWxmLCB2KToKICAgICAgICBzZWxmLmR0ID0gdgoKICAgIGRlZiBzZXRTdGFydHRpbWUoc2VsZiwgdik6CiAgICAgICAgc2VsZi5zdGFydHRpbWUgPSB2CgogICAgZGVmIHNldFN0b3B0aW1lKHNlbGYsIHYpOgogICAgICAgIHNlbGYuc3RvcHRpbWUgPSB2CiAgICAKICAgIGRlZiBzcGVjcyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5zdGFydHRpbWUsIHNlbGYuc3RvcHRpbWUsIHNlbGYuZHQsICdtb250aHMnLCAnRXVsZXInCiAgICA%3D%22%2C%0A%20%20%20%20%20%20%20%20%22simulation_models%2Fsd_arrayed_variables.stmx%22%3A%20%22PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHhtaWxlIHZlcnNpb249IjEuMCIgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3htaWxlL25zL1hNSUxFL3YxLjAiIHhtbG5zOmlzZWU9Imh0dHA6Ly9pc2Vlc3lzdGVtcy5jb20vWE1JTEUiPgoJPGhlYWRlcj4KCQk8c21pbGUgdmVyc2lvbj0iMS4wIiBuYW1lc3BhY2U9InN0ZCwgaXNlZSIgdXNlc19hcnJheXM9IjIiLz4KCQk8bmFtZT5zZF9hcnJheWVkX3ZhcmlhYmxlczwvbmFtZT4KCQk8dXVpZD4yYjAwNTA4OS1iZmU5LTQ0YTItYmQwOC1iNmNhNWZjMmM5Y2Y8L3V1aWQ%2BCgkJPHZlbmRvcj5pc2VlIHN5c3RlbXMsIGluYy48L3ZlbmRvcj4KCQk8cHJvZHVjdCB2ZXJzaW9uPSIxLjkuMiIgaXNlZTpidWlsZF9udW1iZXI9IjE5MDciIGlzZWU6c2F2ZWRfYnlfdjE9InRydWUiIGxhbmc9ImVuIj5TdGVsbGEgQXJjaGl0ZWN0PC9wcm9kdWN0PgoJPC9oZWFkZXI%2BCgk8c2ltX3NwZWNzIGlzZWU6c2ltdWxhdGlvbl9kZWxheT0iMCIgaXNlZTpyZXN0b3JlX29uX3N0YXJ0PSJmYWxzZSIgbWV0aG9kPSJFdWxlciIgdGltZV91bml0cz0ibW9udGhzIiBpc2VlOmluc3RhbnRhbmVvdXNfZmxvd3M9InRydWUiPgoJCTxzdGFydD4xPC9zdGFydD4KCQk8c3RvcD4xMzwvc3RvcD4KCQk8ZHQgcmVjaXByb2NhbD0idHJ1ZSI%2BNDwvZHQ%2BCgk8L3NpbV9zcGVjcz4KCTxkaW1lbnNpb25zPgoJCTxkaW0gbmFtZT0iQ291bnRyaWVzIj4KCQkJPGVsZW0gbmFtZT0iR2VybWFueSIvPgoJCQk8ZWxlbSBuYW1lPSJFbmdsYW5kIi8%2BCgkJCTxlbGVtIG5hbWU9IkF1c3RyaWEiLz4KCQkJPGVsZW0gbmFtZT0iR3JlZWNlIi8%2BCgkJPC9kaW0%2BCgkJPGRpbSBuYW1lPSJQcm9kdWN0cyIgc2l6ZT0iMyIvPgoJPC9kaW1lbnNpb25zPgoJPGlzZWU6cHJlZnMgc2hvd19tb2R1bGVfcHJlZml4PSJ0cnVlIiBsaXZlX3VwZGF0ZV9vbl9kcmFnPSJ0cnVlIiBzaG93X3Jlc3RvcmVfYnV0dG9ucz0iZmFsc2UiIGxheWVyPSJtb2RlbCIgaW50ZXJmYWNlX3NjYWxlX3VpPSJ0cnVlIiBpbnRlcmZhY2VfbWF4X3BhZ2Vfd2lkdGg9IjEwMDAwIiBpbnRlcmZhY2VfbWF4X3BhZ2VfaGVpZ2h0PSIxMDAwMCIgaW50ZXJmYWNlX21pbl9wYWdlX3dpZHRoPSIwIiBpbnRlcmZhY2VfbWluX3BhZ2VfaGVpZ2h0PSIwIiBzYXZlZF9ydW5zPSI1IiBrZWVwPSJmYWxzZSIgcmlmcD0idHJ1ZSIvPgoJPGlzZWU6bXVsdGlwbGF5ZXJfc2V0dGluZ3MgaW5jbHVkZV9jaGF0PSJ0cnVlIiBhbGxvd19vYnNlcnZlcnM9ImZhbHNlIiBhZHZhbmNlX3RpbWVfaW5jcmVtZW50PSIxIiBvYnNlcnZlcl9zdGFydF9wYWdlPSJob21lX3BhZ2UiIGVuYWJsZWQ9ImZhbHNlIi8%2BCgk8aXNlZTp0aW1lX2Zvcm1hdHMgZGVmYXVsdF9mb3JtYXQ9IkJ1aWx0aW4iPgoJCTxpc2VlOnRpbWVfZm9ybWF0IG5hbWU9IkJ1aWx0aW4iIHR5cGU9ImFkYXB0aXZlIi8%2BCgk8L2lzZWU6dGltZV9mb3JtYXRzPgoJPGRlZmF1bHRfZm9ybWF0Lz4KCTxtb2RlbF91bml0cy8%2BCgk8bW9kZWw%2BCgkJPHZhcmlhYmxlcz4KCQkJPHN0b2NrIG5hbWU9IlByb2R1Y3Rpb24iPgoJCQkJPGRpbWVuc2lvbnM%2BCgkJCQkJPGRpbSBuYW1lPSJQcm9kdWN0cyIvPgoJCQkJCTxkaW0gbmFtZT0iQ291bnRyaWVzIi8%2BCgkJCQk8L2RpbWVuc2lvbnM%2BCgkJCQk8ZXFuPjA8L2Vxbj4KCQkJCTxpbmZsb3c%2BcHJvZHVjdGlvbl9zdGFydDwvaW5mbG93PgoJCQkJPG91dGZsb3c%2BcHJvZHVjdGlvbl9yYXRlPC9vdXRmbG93PgoJCQk8L3N0b2NrPgoJCQk8YXV4IG5hbWU9InByb2R1Y3Rpb24gc3RhcnQgcmF0ZSI%2BCgkJCQk8ZGltZW5zaW9ucz4KCQkJCQk8ZGltIG5hbWU9IlByb2R1Y3RzIi8%2BCgkJCQkJPGRpbSBuYW1lPSJDb3VudHJpZXMiLz4KCQkJCTwvZGltZW5zaW9ucz4KCQkJCTxlbGVtZW50IHN1YnNjcmlwdD0iMSwgR2VybWFueSI%2BCgkJCQkJPGVxbj4xMDwvZXFuPgoJCQkJPC9lbGVtZW50PgoJCQkJPGVsZW1lbnQgc3Vic2NyaXB0PSIxLCBFbmdsYW5kIj4KCQkJCQk8ZXFuPjIwPC9lcW4%2BCgkJCQk8L2VsZW1lbnQ%2BCgkJCQk8ZWxlbWVudCBzdWJzY3JpcHQ9IjEsIEF1c3RyaWEiPgoJCQkJCTxlcW4%2BMzA8L2Vxbj4KCQkJCTwvZWxlbWVudD4KCQkJCTxlbGVtZW50IHN1YnNjcmlwdD0iMSwgR3JlZWNlIj4KCQkJCQk8ZXFuPjQwPC9lcW4%2BCgkJCQk8L2VsZW1lbnQ%2BCgkJCQk8ZWxlbWVudCBzdWJzY3JpcHQ9IjIsIEdlcm1hbnkiPgoJCQkJCTxlcW4%2BNDA8L2Vxbj4KCQkJCTwvZWxlbWVudD4KCQkJCTxlbGVtZW50IHN1YnNjcmlwdD0iMiwgRW5nbGFuZCI%2BCgkJCQkJPGVxbj4zMDwvZXFuPgoJCQkJPC9lbGVtZW50PgoJCQkJPGVsZW1lbnQgc3Vic2NyaXB0PSIyLCBBdXN0cmlhIj4KCQkJCQk8ZXFuPjIwPC9lcW4%2BCgkJCQk8L2VsZW1lbnQ%2BCgkJCQk8ZWxlbWVudCBzdWJzY3JpcHQ9IjIsIEdyZWVjZSI%2BCgkJCQkJPGVxbj4xMDwvZXFuPgoJCQkJPC9lbGVtZW50PgoJCQkJPGVsZW1lbnQgc3Vic2NyaXB0PSIzLCBHZXJtYW55Ij4KCQkJCQk8ZXFuPjIwPC9lcW4%2BCgkJCQk8L2VsZW1lbnQ%2BCgkJCQk8ZWxlbWVudCBzdWJzY3JpcHQ9IjMsIEVuZ2xhbmQiPgoJCQkJCTxlcW4%2BMzA8L2Vxbj4KCQkJCTwvZWxlbWVudD4KCQkJCTxlbGVtZW50IHN1YnNjcmlwdD0iMywgQXVzdHJpYSI%2BCgkJCQkJPGVxbj40MDwvZXFuPgoJCQkJPC9lbGVtZW50PgoJCQkJPGVsZW1lbnQgc3Vic2NyaXB0PSIzLCBHcmVlY2UiPgoJCQkJCTxlcW4%2BNTA8L2Vxbj4KCQkJCTwvZWxlbWVudD4KCQkJPC9hdXg%2BCgkJCTxmbG93IG5hbWU9InByb2R1Y3Rpb24gc3RhcnQiPgoJCQkJPGRpbWVuc2lvbnM%2BCgkJCQkJPGRpbSBuYW1lPSJQcm9kdWN0cyIvPgoJCQkJCTxkaW0gbmFtZT0iQ291bnRyaWVzIi8%2BCgkJCQk8L2RpbWVuc2lvbnM%2BCgkJCQk8ZXFuPnByb2R1Y3Rpb25fc3RhcnRfcmF0ZTwvZXFuPgoJCQkJPG5vbl9uZWdhdGl2ZS8%2BCgkJCTwvZmxvdz4KCQkJPGF1eCBuYW1lPSJUb3RhbCBJbnZlbnRvcnkiPgoJCQkJPGVxbj5TVU0oSW52ZW50b3J5WyosICpdKTwvZXFuPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJBdmVyYWdlIEludmVudG9yeSI%2BCgkJCQk8ZXFuPk1FQU4oSW52ZW50b3J5WyosICpdKTwvZXFuPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJzbWFsbGVzdCBHZXJtYW4gaW52ZW50b3J5Ij4KCQkJCTxlcW4%2BSW52ZW50b3J5W1JBTksoSW52ZW50b3J5WyosIEdlcm1hbnldLCAxKSwgR2VybWFueV08L2Vxbj4KCQkJPC9hdXg%2BCgkJCTxhdXggbmFtZT0ibGFyZ2VzdCBHZXJtYW4gaW52ZW50b3J5Ij4KCQkJCTxlcW4%2BSW52ZW50b3J5W1JBTksoSW52ZW50b3J5WyosIEdlcm1hbnldLCBTSVpFKEludmVudG9yeVsqLCBHZXJtYW55XSkpLCBHZXJtYW55XTwvZXFuPgoJCQk8L2F1eD4KCQkJPGF1eCBuYW1lPSJBdmVyYWdlIEludmVudG9yeSB1c2luZyBTaXplIj4KCQkJCTxlcW4%2BU1VNKEludmVudG9yeVsqLCAqXSkvU0laRShJbnZlbnRvcnlbKiwqXSk8L2Vxbj4KCQkJPC9hdXg%2BCgkJCTxzdG9jayBuYW1lPSJJbnZlbnRvcnkiPgoJCQkJPGRpbWVuc2lvbnM%2BCgkJCQkJPGRpbSBuYW1lPSJQcm9kdWN0cyIvPgoJCQkJCTxkaW0gbmFtZT0iQ291bnRyaWVzIi8%2BCgkJCQk8L2RpbWVuc2lvbnM%2BCgkJCQk8ZXFuPjA8L2Vxbj4KCQkJCTxpbmZsb3c%2BcHJvZHVjdGlvbl9yYXRlPC9pbmZsb3c%2BCgkJCTwvc3RvY2s%2BCgkJCTxmbG93IG5hbWU9InByb2R1Y3Rpb24gcmF0ZSI%2BCgkJCQk8ZGltZW5zaW9ucz4KCQkJCQk8ZGltIG5hbWU9IlByb2R1Y3RzIi8%2BCgkJCQkJPGRpbSBuYW1lPSJDb3VudHJpZXMiLz4KCQkJCTwvZGltZW5zaW9ucz4KCQkJCTxlcW4%2BREVMQVkocHJvZHVjdGlvbl9zdGFydCwgcHJvZHVjdGlvbl9kdXJhdGlvbiwgMCk8L2Vxbj4KCQkJCTxub25fbmVnYXRpdmUvPgoJCQk8L2Zsb3c%2BCgkJCTxhdXggbmFtZT0icHJvZHVjdGlvbiBkdXJhdGlvbiI%2BCgkJCQk8ZGltZW5zaW9ucz4KCQkJCQk8ZGltIG5hbWU9IlByb2R1Y3RzIi8%2BCgkJCQkJPGRpbSBuYW1lPSJDb3VudHJpZXMiLz4KCQkJCTwvZGltZW5zaW9ucz4KCQkJCTxlbGVtZW50IHN1YnNjcmlwdD0iMSwgR2VybWFueSI%2BCgkJCQkJPGVxbj4xPC9lcW4%2BCgkJCQk8L2VsZW1lbnQ%2BCgkJCQk8ZWxlbWVudCBzdWJzY3JpcHQ9IjEsIEVuZ2xhbmQiPgoJCQkJCTxlcW4%2BMjwvZXFuPgoJCQkJPC9lbGVtZW50PgoJCQkJPGVsZW1lbnQgc3Vic2NyaXB0PSIxLCBBdXN0cmlhIj4KCQkJCQk8ZXFuPjM8L2Vxbj4KCQkJCTwvZWxlbWVudD4KCQkJCTxlbGVtZW50IHN1YnNjcmlwdD0iMSwgR3JlZWNlIj4KCQkJCQk8ZXFuPjQ8L2Vxbj4KCQkJCTwvZWxlbWVudD4KCQkJCTxlbGVtZW50IHN1YnNjcmlwdD0iMiwgR2VybWFueSI%2BCgkJCQkJPGVxbj41PC9lcW4%2BCgkJCQk8L2VsZW1lbnQ%2BCgkJCQk8ZWxlbWVudCBzdWJzY3JpcHQ9IjIsIEVuZ2xhbmQiPgoJCQkJCTxlcW4%2BNjwvZXFuPgoJCQkJPC9lbGVtZW50PgoJCQkJPGVsZW1lbnQgc3Vic2NyaXB0PSIyLCBBdXN0cmlhIj4KCQkJCQk8ZXFuPjg8L2Vxbj4KCQkJCTwvZWxlbWVudD4KCQkJCTxlbGVtZW50IHN1YnNjcmlwdD0iMiwgR3JlZWNlIj4KCQkJCQk8ZXFuPjc8L2Vxbj4KCQkJCTwvZWxlbWVudD4KCQkJCTxlbGVtZW50IHN1YnNjcmlwdD0iMywgR2VybWFueSI%2BCgkJCQkJPGVxbj45PC9lcW4%2BCgkJCQk8L2VsZW1lbnQ%2BCgkJCQk8ZWxlbWVudCBzdWJzY3JpcHQ9IjMsIEVuZ2xhbmQiPgoJCQkJCTxlcW4%2BMTA8L2Vxbj4KCQkJCTwvZWxlbWVudD4KCQkJCTxlbGVtZW50IHN1YnNjcmlwdD0iMywgQXVzdHJpYSI%2BCgkJCQkJPGVxbj4xMTwvZXFuPgoJCQkJPC9lbGVtZW50PgoJCQkJPGVsZW1lbnQgc3Vic2NyaXB0PSIzLCBHcmVlY2UiPgoJCQkJCTxlcW4%2BMTI8L2Vxbj4KCQkJCTwvZWxlbWVudD4KCQkJPC9hdXg%2BCgkJCTxhdXggbmFtZT0iSW52ZW50b3J5IFNpemUiPgoJCQkJPGVxbj5TSVpFKEludmVudG9yeSk8L2Vxbj4KCQkJPC9hdXg%2BCgkJPC92YXJpYWJsZXM%2BCgkJPHZpZXdzPgoJCQk8c3R5bGUgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9zdHlsZT0ibm9ybWFsIiBmb250X3dlaWdodD0ibm9ybWFsIiB0ZXh0X2RlY29yYXRpb249Im5vbmUiIHRleHRfYWxpZ249ImNlbnRlciIgdmVydGljYWxfdGV4dF9hbGlnbj0iY2VudGVyIiBmb250X2NvbG9yPSJibGFjayIgZm9udF9mYW1pbHk9IkFyaWFsIiBmb250X3NpemU9IjEwcHQiIHBhZGRpbmc9IjIiIGJvcmRlcl9jb2xvcj0iYmxhY2siIGJvcmRlcl93aWR0aD0idGhpbiIgYm9yZGVyX3N0eWxlPSJub25lIj4KCQkJCTx0ZXh0X2JveCBjb2xvcj0iYmxhY2siIGJhY2tncm91bmQ9IndoaXRlIiB0ZXh0X2FsaWduPSJsZWZ0IiB2ZXJ0aWNhbF90ZXh0X2FsaWduPSJ0b3AiIGZvbnRfc2l6ZT0iMTJwdCIvPgoJCQkJPGlzZWU6bG9vcF9pbmRpY2F0b3IgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgdGV4dF9hbGlnbj0ibGVmdCIgdmVydGljYWxfdGV4dF9hbGlnbj0idG9wIiBmb250X3NpemU9IjEycHQiLz4KCQkJCTxudW1lcmljX2Rpc3BsYXkgY29sb3I9ImJsdWUiIGJhY2tncm91bmQ9IndoaXRlIiBmb250X3NpemU9IjlwdCIgaXNlZTp0cmFuc3BhcmVudD0iZmFsc2UiLz4KCQkJCTxncmFwaCBjb2xvcj0iYmxhY2siIGJhY2tncm91bmQ9IndoaXRlIiBmb250X3NpemU9IjEycHQiIGF4aXNfY29sb3I9IiM2NjY2NjYiIGdyaWRfY29sb3I9IiNDOEM4QzgiIGlzZWU6Z3JhcGhfYXJlYV9jb2xvcj0id2hpdGUiIGxlZ2VuZF9wb3NpdGlvbj0iYm90dG9tIiBpc2VlOnRyYW5zcGFyZW50PSJmYWxzZSIgaXNlZTpoaWRlX2JvcmRlcj0iZmFsc2UiIGF4aXNfdGl0bGVfZm9udF9zdHlsZT0ibm9ybWFsIiBheGlzX3RpdGxlX2ZvbnRfd2VpZ2h0PSJub3JtYWwiIGF4aXNfdGl0bGVfdGV4dF9kZWNvcmF0aW9uPSJub25lIiBheGlzX3RpdGxlX3RleHRfYWxpZ249ImNlbnRlciIgYXhpc190aXRsZV92ZXJ0aWNhbF90ZXh0X2FsaWduPSJjZW50ZXIiIGF4aXNfdGl0bGVfZm9udF9jb2xvcj0iYmxhY2siIGF4aXNfdGl0bGVfZm9udF9mYW1pbHk9IkFyaWFsIiBheGlzX3RpdGxlX2ZvbnRfc2l6ZT0iMTJwdCIgYXhpc190aXRsZV90ZXh0X3BhZGRpbmc9IjIiIGF4aXNfdGl0bGVfdGV4dF9ib3JkZXJfY29sb3I9ImJsYWNrIiBheGlzX3RpdGxlX3RleHRfYm9yZGVyX3dpZHRoPSJ0aGluIiBheGlzX3RpdGxlX3RleHRfYm9yZGVyX3N0eWxlPSJub25lIiBheGlzX2xhYmVsX2ZvbnRfc3R5bGU9Im5vcm1hbCIgYXhpc19sYWJlbF9mb250X3dlaWdodD0ibm9ybWFsIiBheGlzX2xhYmVsX3RleHRfZGVjb3JhdGlvbj0ibm9uZSIgYXhpc19sYWJlbF90ZXh0X2FsaWduPSJjZW50ZXIiIGF4aXNfbGFiZWxfdmVydGljYWxfdGV4dF9hbGlnbj0iY2VudGVyIiBheGlzX2xhYmVsX2ZvbnRfY29sb3I9ImJsYWNrIiBheGlzX2xhYmVsX2ZvbnRfZmFtaWx5PSJBcmlhbCIgYXhpc19sYWJlbF9mb250X3NpemU9IjlwdCIgYXhpc19sYWJlbF90ZXh0X3BhZGRpbmc9IjIiIGF4aXNfbGFiZWxfdGV4dF9ib3JkZXJfY29sb3I9ImJsYWNrIiBheGlzX2xhYmVsX3RleHRfYm9yZGVyX3dpZHRoPSJ0aGluIiBheGlzX2xhYmVsX3RleHRfYm9yZGVyX3N0eWxlPSJub25lIj4KCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGVzPgoJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9ImJsdWUiIHRoaWNrbmVzcz0iMSIvPgoJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9InJlZCIgdGhpY2tuZXNzPSIxIiBwZW5fc3R5bGU9ImRvdF9kYXNoZWQiLz4KCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSJmdWNoc2lhIiB0aGlja25lc3M9IjEiIHBlbl9zdHlsZT0iZG90dGVkIi8%2BCgkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iIzAwOEY0NCIgdGhpY2tuZXNzPSIxIiBwZW5fc3R5bGU9ImRhc2hlZCIvPgoJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9IiNGRjdGMDAiIHRoaWNrbmVzcz0iMSIvPgoJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9IiM3RjAwRkYiIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkb3RfZGFzaGVkIi8%2BCgkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iIzBDQTBGRiIgdGhpY2tuZXNzPSIxIiBwZW5fc3R5bGU9ImRvdHRlZCIvPgoJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9ImxpbWUiIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkYXNoZWQiLz4KCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSIjRkYwMDdGIiB0aGlja25lc3M9IjEiLz4KCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSJhcXVhIiB0aGlja25lc3M9IjEiIHBlbl9zdHlsZT0iZG90X2Rhc2hlZCIvPgoJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9IiNGNTg2RkYiIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkb3R0ZWQiLz4KCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSJibGFjayIgdGhpY2tuZXNzPSIxIiBwZW5fc3R5bGU9ImRhc2hlZCIvPgoJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9IiNDOEM4QzgiIHRoaWNrbmVzcz0iMSIvPgoJCQkJCTwvaXNlZTpzZXJpZXNfc3R5bGVzPgoJCQkJPC9ncmFwaD4KCQkJCTx0YWJsZSBjb2xvcj0iYmxhY2siIGJhY2tncm91bmQ9IiNFMEUwRTAiIHRleHRfYWxpZ249InJpZ2h0IiBmb250X3NpemU9IjEycHQiIG9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgd3JhcF90ZXh0PSJmYWxzZSIgaXNlZTphdXRvX2ZpdD0idHJ1ZSIgaXNlZTp1c2VfYWx0ZXJuYXRlX3Jvd19jb2xvcnM9ImZhbHNlIiBpc2VlOnVubGltaXRlZF90YWJsZV9sZW5ndGg9ImZhbHNlIiBibGFua19jb2x1bW5fd2lkdGg9IjgwIiBjb2x1bW5fd2lkdGg9IjE2MCIgaW50ZXJ2YWw9IjEiIHJlcG9ydF9iYWxhbmNlcz0iZW5kaW5nIiByZXBvcnRfZmxvd3M9InN1bW1lZCIgaGVhZGVyX2ZvbnRfc3R5bGU9Im5vcm1hbCIgaGVhZGVyX2ZvbnRfd2VpZ2h0PSJub3JtYWwiIGhlYWRlcl90ZXh0X2RlY29yYXRpb249Im5vbmUiIGhlYWRlcl90ZXh0X2FsaWduPSJjZW50ZXIiIGhlYWRlcl92ZXJ0aWNhbF90ZXh0X2FsaWduPSJjZW50ZXIiIGhlYWRlcl9mb250X2NvbG9yPSJibGFjayIgaGVhZGVyX2ZvbnRfZmFtaWx5PSJBcmlhbCIgaGVhZGVyX2ZvbnRfc2l6ZT0iMTJwdCIgaGVhZGVyX3RleHRfcGFkZGluZz0iMiIgaGVhZGVyX3RleHRfYm9yZGVyX2NvbG9yPSJibGFjayIgaGVhZGVyX3RleHRfYm9yZGVyX3dpZHRoPSJ0aGluIiBoZWFkZXJfdGV4dF9ib3JkZXJfc3R5bGU9Im5vbmUiLz4KCQkJCTxidXR0b24gY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSIjRTBFMEUwIiBmb250X3NpemU9IjEycHQiIHRyYW5zcGFyZW50PSJmYWxzZSIgY29ybmVyX3JhZGl1cz0iMCIgaXNlZTpmbGF0PSJmYWxzZSIgaWNvbl9zaWRlPSJ0b3AiIGlzZWU6aGlnaGxpZ2h0X29uX2hvdmVyPSJmYWxzZSIgaXNlZTpoaWdobGlnaHRfY29sb3I9IiM5NTk1OTUiLz4KCQkJCTxpc2VlOmFubm90YXRpb24gY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSIjRTBFMEUwIiBmb250X3NpemU9IjEycHQiIHRyYW5zcGFyZW50PSJmYWxzZSIgY29ybmVyX3JhZGl1cz0iMCIgaXNlZTpmbGF0PSJmYWxzZSIgaWNvbl9zaWRlPSJ0b3AiIGlzZWU6aGlnaGxpZ2h0X29uX2hvdmVyPSJmYWxzZSIgaXNlZTpoaWdobGlnaHRfY29sb3I9IiM5NTk1OTUiIHBvcHVwX2JhY2tncm91bmRfY29sb3I9IiNGRkZFQ0YiLz4KCQkJCTxzbGlkZXIgY29sb3I9IiM2NkNDNjYiIGJhY2tncm91bmQ9IiNFMEUwRTAiIGZvbnRfc2l6ZT0iMTJwdCIgbnVtX3RpY2tzPSIzIiBsYWJlbF9zaWRlPSJ0b3AiIHdyYXBfdGl0bGU9InRydWUiIHZlcnRpY2FsPSJmYWxzZSIgaXNlZTpmYW5jeV9hcHBlYXJhbmNlPSJmYWxzZSIgaXNlZTpzaG93X2hvdmVyX3RpcD0id2hlbl9kZWNpZGluZyIgaW5wdXRfZXhwYW5kcz0idHJ1ZSIgaW5wdXRfd2lkdGg9IjEwMCIvPgoJCQkJPGlzZWU6c2ltX3NwZWVkX3NsaWRlciBjb2xvcj0iYmxhY2siIGJhY2tncm91bmQ9IndoaXRlIi8%2BCgkJCQk8aXNlZTp0aW1lX3NsaWRlciBjb2xvcj0iI0U5NUY3NCIgYmFja2dyb3VuZD0ic2lsdmVyIi8%2BCgkJCQk8aXNlZTpwaWVfaW5wdXQgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9zaXplPSIxMnB0IiBsZWdlbmRfcG9zaXRpb249ImJvdHRvbSIgaXNlZTp0cmFuc3BhcmVudD0iZmFsc2UiLz4KCQkJCTxrbm9iIGNvbG9yPSIjNjZDQzY2IiBiYWNrZ3JvdW5kPSIjRTBFMEUwIiBmb250X3NpemU9IjEycHQiIGxhYmVsX3NpZGU9ImJvdHRvbSIgd3JhcF90aXRsZT0idHJ1ZSIvPgoJCQkJPG51bWVyaWNfaW5wdXQgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSIjRTBFMEUwIiBmb250X3NpemU9IjEycHQiIGxhYmVsX3NpZGU9ImxlZnQiIHdyYXBfdGl0bGU9InRydWUiIGlucHV0X2V4cGFuZHM9ImZhbHNlIiBpbnB1dF93aWR0aD0iMTAwIi8%2BCgkJCQk8c3dpdGNoIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0iI0UwRTBFMCIgZm9udF9zaXplPSIxMnB0IiBsYWJlbF9zaWRlPSJ0b3AiIHdyYXBfdGl0bGU9InRydWUiIGlzZWU6YXBwZWFyYW5jZT0ic3dpdGNoIiBpc2VlOm9uX2NvbG9yPSJncmVlbiIvPgoJCQkJPG9wdGlvbnMgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgYXBwZWFyYW5jZT0icmFkaW8tYnV0dG9ucyIgYXJyYW5nZW1lbnQ9InZlcnRpY2FsIi8%2BCgkJCQk8Z3JhcGhpY2FsX2lucHV0IGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0iI0UwRTBFMCIgZm9udF9zaXplPSIxMnB0IiBpc2VlOnNob3dfaG92ZXJfdGlwPSJ0cnVlIi8%2BCgkJCQk8Z3JvdXBfaW5wdXQgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSIjRTBFMEUwIiBmb250X3NpemU9IjEycHQiLz4KCQkJCTxsYW1wIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0id2hpdGUiIGZvbnRfc2l6ZT0iOXB0Ii8%2BCgkJCQk8Z2F1Z2UgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9zaXplPSI5cHQiIG5lZWRsZV9jb2xvcj0iI0YwOUY3MiIgYmFyX2NvbG9yPSIjRUVFRUVFIiBiYXJfcHJvZ3Jlc3NfY29sb3I9ImJsYWNrIiBhcHBlYXJhbmNlPSJyYWRpYWwiIG51bV9tYWpvcl90aWNrcz0iMTEiIG51bV9taW5vcl90aWNrcz0iMTEiIHNob3dfbnVtZXJpY192YWx1ZT0idHJ1ZSIvPgoJCQkJPGlzZWU6c3BhdGlhbF9tYXAgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9zaXplPSIxMnB0Ii8%2BCgkJCQk8aXNlZTphbmltYXRpb25fb2JqZWN0IGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0id2hpdGUiIGZvbnRfc2l6ZT0iMTJwdCIvPgoJCQkJPGlzZWU6bmF2aWdhdGlvbl93aWRnZXQgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgdGV4dF9hbGlnbj0ibGVmdCIgdmVydGljYWxfdGV4dF9hbGlnbj0idG9wIiBmb250X3NpemU9IjEycHQiIGJvcmRlcl9jb2xvcj0iIzk5OTk5OSIgYm9yZGVyX3dpZHRoPSJ0aGluIiBib3JkZXJfc3R5bGU9InNvbGlkIiBpdGVtX3NwYWNpbmc9IjYiIGFwcGVhcmFuY2U9InRhYnMiIGNvcm5lcl9yYWRpdXM9IjQiIHNlbGVjdGVkX2l0ZW1fY29sb3I9ImJsYWNrIiBzZWxlY3RlZF9pdGVtX2JhY2tncm91bmQ9IndoaXRlIiBpdGVtX2JhY2tncm91bmQ9IiNEREREREQiLz4KCQkJCTxpc2VlOnNoYXBlIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0id2hpdGUiIHRleHRfYWxpZ249ImxlZnQiIHZlcnRpY2FsX3RleHRfYWxpZ249InRvcCIgZm9udF9zaXplPSIxMnB0IiBib3JkZXJfd2lkdGg9InRoaW4iIGJvcmRlcl9zdHlsZT0ic29saWQiIG9wYWNpdHk9IjEiIHRyYW5zcGFyZW50X2JhY2tncm91bmQ9InRydWUiLz4KCQkJCTxpc2VlOnNlbGVjdG9yIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0id2hpdGUiIHRleHRfYWxpZ249ImxlZnQiIHZlcnRpY2FsX3RleHRfYWxpZ249InRvcCIgZm9udF9zaXplPSIxMnB0Ii8%2BCgkJCQk8aXNlZTppZnJhbWUgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgdGV4dF9hbGlnbj0ibGVmdCIgdmVydGljYWxfdGV4dF9hbGlnbj0idG9wIiBmb250X3NpemU9IjEycHQiIGJvcmRlcl93aWR0aD0idGhpbiIgYm9yZGVyX3N0eWxlPSJzb2xpZCIvPgoJCQkJPGlzZWU6ZmluYW5jaWFsX3RhYmxlIGNvbG9yPSJibGFjayIgYmFja2dyb3VuZD0iI0UwRTBFMCIgdGV4dF9hbGlnbj0icmlnaHQiIGZvbnRfc2l6ZT0iMTJwdCIgYXV0b19maXQ9InRydWUiIGZpcnN0X2NvbHVtbl93aWR0aD0iMjUwIiBvdGhlcl9jb2x1bW5fd2lkdGg9IjEwMCIgaGVhZGVyX2ZvbnRfc3R5bGU9Im5vcm1hbCIgaGVhZGVyX2ZvbnRfd2VpZ2h0PSJib2xkIiBoZWFkZXJfdGV4dF9kZWNvcmF0aW9uPSJub25lIiBoZWFkZXJfdGV4dF9hbGlnbj0iY2VudGVyIiBoZWFkZXJfdmVydGljYWxfdGV4dF9hbGlnbj0iY2VudGVyIiBoZWFkZXJfZm9udF9jb2xvcj0iYmxhY2siIGhlYWRlcl9mb250X2ZhbWlseT0iQXJpYWwiIGhlYWRlcl9mb250X3NpemU9IjE0cHQiIGhlYWRlcl90ZXh0X3BhZGRpbmc9IjIiIGhlYWRlcl90ZXh0X2JvcmRlcl9jb2xvcj0iYmxhY2siIGhlYWRlcl90ZXh0X2JvcmRlcl93aWR0aD0idGhpbiIgaGVhZGVyX3RleHRfYm9yZGVyX3N0eWxlPSJub25lIi8%2BCgkJCTwvc3R5bGU%2BCgkJCTx2aWV3IGlzZWU6c2hvd19wYWdlcz0iZmFsc2UiIGJhY2tncm91bmQ9IndoaXRlIiBwYWdlX3dpZHRoPSI4MTgiIHBhZ2VfaGVpZ2h0PSI1NzEiIGlzZWU6cGFnZV9jb2xzPSIyIiBpc2VlOnBhZ2Vfcm93cz0iMiIgaXNlZTpzY3JvbGxfeD0iOTM0LjI4NiIgaXNlZTpzY3JvbGxfeT0iMzk1IiB6b29tPSIxNDAiIGlzZWU6cG9wdXBfZ3JhcGhzX2FyZV9jb21wYXJhdGl2ZT0idHJ1ZSIgdHlwZT0ic3RvY2tfZmxvdyI%2BCgkJCQk8c3R5bGUgY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9zdHlsZT0ibm9ybWFsIiBmb250X3dlaWdodD0ibm9ybWFsIiB0ZXh0X2RlY29yYXRpb249Im5vbmUiIHRleHRfYWxpZ249ImNlbnRlciIgdmVydGljYWxfdGV4dF9hbGlnbj0iY2VudGVyIiBmb250X2NvbG9yPSJibGFjayIgZm9udF9mYW1pbHk9IkFyaWFsIiBmb250X3NpemU9IjEwcHQiIHBhZGRpbmc9IjIiIGJvcmRlcl9jb2xvcj0iYmxhY2siIGJvcmRlcl93aWR0aD0idGhpbiIgYm9yZGVyX3N0eWxlPSJub25lIj4KCQkJCQk8c3RvY2sgY29sb3I9ImJsdWUiIGJhY2tncm91bmQ9IndoaXRlIiBmb250X2NvbG9yPSJibHVlIiBmb250X3NpemU9IjdwdCIgbGFiZWxfc2lkZT0idG9wIj4KCQkJCQkJPHNoYXBlIHR5cGU9InJlY3RhbmdsZSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjM1Ii8%2BCgkJCQkJPC9zdG9jaz4KCQkJCQk8ZmxvdyBjb2xvcj0iYmx1ZSIgYmFja2dyb3VuZD0id2hpdGUiIGZvbnRfY29sb3I9ImJsdWUiIGZvbnRfc2l6ZT0iN3B0IiBsYWJlbF9zaWRlPSJib3R0b20iLz4KCQkJCQk8aXNlZTpwbGFjZWhvbGRlciBjb2xvcj0iIzIyOEIyMiIgYmFja2dyb3VuZD0id2hpdGUiIGZvbnRfY29sb3I9IiMyMjhCMjIiIGZvbnRfc2l6ZT0iN3B0IiBsYWJlbF9zaWRlPSJib3R0b20iLz4KCQkJCQk8bW9kdWxlIGNvbG9yPSJibHVlIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9jb2xvcj0iYmx1ZSIgZm9udF9zaXplPSI3cHQiIGxhYmVsX3NpZGU9InRvcCI%2BCgkJCQkJCTxzaGFwZSB0eXBlPSJyZWN0YW5nbGUiIHdpZHRoPSI1NSIgaGVpZ2h0PSI0NSIvPgoJCQkJCTwvbW9kdWxlPgoJCQkJCTxhdXggY29sb3I9ImJsdWUiIGJhY2tncm91bmQ9IndoaXRlIiBmb250X2NvbG9yPSJibHVlIiBmb250X3NpemU9IjdwdCIgbGFiZWxfc2lkZT0iYm90dG9tIj4KCQkJCQkJPHNoYXBlIHR5cGU9ImNpcmNsZSIgcmFkaXVzPSIxOCIvPgoJCQkJCTwvYXV4PgoJCQkJCTxncm91cCBjb2xvcj0icmVkIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9jb2xvcj0icmVkIiBmb250X3NpemU9IjdwdCIvPgoJCQkJCTxjb25uZWN0b3IgY29sb3I9IiNGRjAwN0YiIGJhY2tncm91bmQ9IndoaXRlIiBmb250X2NvbG9yPSIjRkYwMDdGIiBmb250X3NpemU9IjlwdCIgaXNlZTp0aGlja25lc3M9IjEiLz4KCQkJCQk8dGV4dF9ib3ggY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgdGV4dF9hbGlnbj0ibGVmdCIgdmVydGljYWxfdGV4dF9hbGlnbj0idG9wIiBmb250X3NpemU9IjEycHQiLz4KCQkJCQk8aXNlZTpsb29wX2luZGljYXRvciBjb2xvcj0iYmxhY2siIGJhY2tncm91bmQ9IndoaXRlIiB0ZXh0X2FsaWduPSJsZWZ0IiB2ZXJ0aWNhbF90ZXh0X2FsaWduPSJ0b3AiIGZvbnRfc2l6ZT0iMTJwdCIvPgoJCQkJCTxudW1lcmljX2Rpc3BsYXkgY29sb3I9ImJsdWUiIGJhY2tncm91bmQ9IndoaXRlIiBmb250X3NpemU9IjlwdCIgaXNlZTp0cmFuc3BhcmVudD0iZmFsc2UiLz4KCQkJCQk8Z3JhcGggY29sb3I9ImJsYWNrIiBiYWNrZ3JvdW5kPSJ3aGl0ZSIgZm9udF9zaXplPSIxMnB0IiBheGlzX2NvbG9yPSIjNjY2NjY2IiBncmlkX2NvbG9yPSIjQzhDOEM4IiBpc2VlOmdyYXBoX2FyZWFfY29sb3I9IndoaXRlIiBsZWdlbmRfcG9zaXRpb249ImJvdHRvbSIgaXNlZTp0cmFuc3BhcmVudD0iZmFsc2UiIGlzZWU6aGlkZV9ib3JkZXI9ImZhbHNlIiBheGlzX3RpdGxlX2ZvbnRfc3R5bGU9Im5vcm1hbCIgYXhpc190aXRsZV9mb250X3dlaWdodD0ibm9ybWFsIiBheGlzX3RpdGxlX3RleHRfZGVjb3JhdGlvbj0ibm9uZSIgYXhpc190aXRsZV90ZXh0X2FsaWduPSJjZW50ZXIiIGF4aXNfdGl0bGVfdmVydGljYWxfdGV4dF9hbGlnbj0iY2VudGVyIiBheGlzX3RpdGxlX2ZvbnRfY29sb3I9ImJsYWNrIiBheGlzX3RpdGxlX2ZvbnRfZmFtaWx5PSJBcmlhbCIgYXhpc190aXRsZV9mb250X3NpemU9IjEycHQiIGF4aXNfdGl0bGVfdGV4dF9wYWRkaW5nPSIyIiBheGlzX3RpdGxlX3RleHRfYm9yZGVyX2NvbG9yPSJibGFjayIgYXhpc190aXRsZV90ZXh0X2JvcmRlcl93aWR0aD0idGhpbiIgYXhpc190aXRsZV90ZXh0X2JvcmRlcl9zdHlsZT0ibm9uZSIgYXhpc19sYWJlbF9mb250X3N0eWxlPSJub3JtYWwiIGF4aXNfbGFiZWxfZm9udF93ZWlnaHQ9Im5vcm1hbCIgYXhpc19sYWJlbF90ZXh0X2RlY29yYXRpb249Im5vbmUiIGF4aXNfbGFiZWxfdGV4dF9hbGlnbj0iY2VudGVyIiBheGlzX2xhYmVsX3ZlcnRpY2FsX3RleHRfYWxpZ249ImNlbnRlciIgYXhpc19sYWJlbF9mb250X2NvbG9yPSJibGFjayIgYXhpc19sYWJlbF9mb250X2ZhbWlseT0iQXJpYWwiIGF4aXNfbGFiZWxfZm9udF9zaXplPSI5cHQiIGF4aXNfbGFiZWxfdGV4dF9wYWRkaW5nPSIyIiBheGlzX2xhYmVsX3RleHRfYm9yZGVyX2NvbG9yPSJibGFjayIgYXhpc19sYWJlbF90ZXh0X2JvcmRlcl93aWR0aD0idGhpbiIgYXhpc19sYWJlbF90ZXh0X2JvcmRlcl9zdHlsZT0ibm9uZSI%2BCgkJCQkJCTxpc2VlOnNlcmllc19zdHlsZXM%2BCgkJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9ImJsdWUiIHRoaWNrbmVzcz0iMSIvPgoJCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSJyZWQiIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkb3RfZGFzaGVkIi8%2BCgkJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9ImZ1Y2hzaWEiIHRoaWNrbmVzcz0iMSIgcGVuX3N0eWxlPSJkb3R0ZWQiLz4KCQkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iIzAwOEY0NCIgdGhpY2tuZXNzPSIxIiBwZW5fc3R5bGU9ImRhc2hlZCIvPgoJCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSIjRkY3RjAwIiB0aGlja25lc3M9IjEiLz4KCQkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iIzdGMDBGRiIgdGhpY2tuZXNzPSIxIiBwZW5fc3R5bGU9ImRvdF9kYXNoZWQiLz4KCQkJCQkJCTxpc2VlOnNlcmllc19zdHlsZSBjb2xvcj0iIzBDQTBGRiIgdGhpY2tuZXNzPSIxIiBwZW5fc3R5bGU9ImRvdHRlZCIvPgoJCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSJsaW1lIiB0aGlja25lc3M9IjEiIHBlbl9zdHlsZT0iZGFzaGVkIi8%2BCgkJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9IiNGRjAwN0YiIHRoaWNrbmVzcz0iMSIvPgoJCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSJhcXVhIiB0aGlja25lc3M9IjEiIHBlbl9zdHlsZT0iZG90X2Rhc2hlZCIvPgoJCQkJCQkJPGlzZWU6c2VyaWVzX3N0eWxlIGNvbG9yPSIjRjU4NkZGIiB0aGlja25lc3M9IjEiIHBlbl9zdHlsZT0iZG90dGVkIi8%2BCgkJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9ImJsYWNrIiB0aGlja25lc3M9IjEiIHBlbl9zdHlsZT0iZGFzaGVkIi8%2BCgkJCQkJCQk8aXNlZTpzZXJpZXNfc3R5bGUgY29sb3I9IiNDOEM4QzgiIHRoaWNrbmVzcz0iMSIvPgoJCQkJCQk8L2lzZWU6c2VyaWVzX3N0eWxlcz4KCQkJCQk8L2dyYXBoPgoJCQkJCTx0YWJsZSBjb2xvcj0iYmxhY2siIGJhY2tncm91bmQ9IiNFMEUwRTAiIHRleHRfYWxpZ249InJpZ2h0IiBmb250X3NpemU9IjEycHQiIG9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgd3JhcF90ZXh0PSJmYWxzZSIgaXNlZTphdXRvX2ZpdD0idHJ1ZSIgaXNlZTp1c2VfYWx0ZXJuYXRlX3Jvd19jb2xvcnM9ImZhbHNlIiBpc2VlOnVubGltaXRlZF90YWJsZV9sZW5ndGg9ImZhbHNlIiBibGFua19jb2x1bW5fd2lkdGg9IjgwIiBjb2x1bW5fd2lkdGg9IjE2MCIgaW50ZXJ2YWw9IjEiIHJlcG9ydF9iYWxhbmNlcz0iZW5kaW5nIiByZXBvcnRfZmxvd3M9InN1bW1lZCIgaGVhZGVyX2ZvbnRfc3R5bGU9Im5vcm1hbCIgaGVhZGVyX2ZvbnRfd2VpZ2h0PSJub3JtYWwiIGhlYWRlcl90ZXh0X2RlY29yYXRpb249Im5vbmUiIGhlYWRlcl90ZXh0X2FsaWduPSJjZW50ZXIiIGhlYWRlcl92ZXJ0aWNhbF90ZXh0X2FsaWduPSJjZW50ZXIiIGhlYWRlcl9mb250X2NvbG9yPSJibGFjayIgaGVhZGVyX2ZvbnRfZmFtaWx5PSJBcmlhbCIgaGVhZGVyX2ZvbnRfc2l6ZT0iMTJwdCIgaGVhZGVyX3RleHRfcGFkZGluZz0iMiIgaGVhZGVyX3RleHRfYm9yZGVyX2NvbG9yPSJibGFjayIgaGVhZGVyX3RleHRfYm9yZGVyX3dpZHRoPSJ0aGluIiBoZWFkZXJfdGV4dF9ib3JkZXJfc3R5bGU9Im5vbmUiLz4KCQkJCTwvc3R5bGU%2BCgkJCQk8c3RvY2sgeD0iMzY5IiB5PSIxNTkiIG5hbWU9IlByb2R1Y3Rpb24iLz4KCQkJCTxhdXggeD0iMjgzLjI1IiB5PSIyMzIiIG5hbWU9InByb2R1Y3Rpb24gc3RhcnQgcmF0ZSIvPgoJCQkJPGZsb3cgeD0iMjk5LjI1IiB5PSIxNTkiIG5hbWU9InByb2R1Y3Rpb24gc3RhcnQiPgoJCQkJCTxwdHM%2BCgkJCQkJCTxwdCB4PSIyNTIiIHk9IjE1OSIvPgoJCQkJCQk8cHQgeD0iMzQ2LjUiIHk9IjE1OSIvPgoJCQkJCTwvcHRzPgoJCQkJPC9mbG93PgoJCQkJPGNvbm5lY3RvciB1aWQ9IjEiIGFuZ2xlPSIxMDIuOTA3Ij4KCQkJCQk8ZnJvbT5wcm9kdWN0aW9uX3N0YXJ0X3JhdGU8L2Zyb20%2BCgkJCQkJPHRvPnByb2R1Y3Rpb25fc3RhcnQ8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8YXV4IHg9IjY1OS40MjkiIHk9IjY2LjU3MTQiIG5hbWU9IlRvdGFsIEludmVudG9yeSIvPgoJCQkJPGF1eCB4PSI2ODYuNTcxIiB5PSIyMTcuMjg2IiBuYW1lPSJBdmVyYWdlIEludmVudG9yeSIvPgoJCQkJPGF1eCB4PSI0NTkuODU3IiB5PSI2Ni41NzE0IiBuYW1lPSJzbWFsbGVzdCBHZXJtYW4gaW52ZW50b3J5Ii8%2BCgkJCQk8YXV4IHg9IjUzNyIgeT0iNTMuMTQyOSIgbmFtZT0ibGFyZ2VzdCBHZXJtYW4gaW52ZW50b3J5Ii8%2BCgkJCQk8YXV4IHg9IjYxOSIgeT0iMzU0IiBuYW1lPSJBdmVyYWdlIEludmVudG9yeSB1c2luZyBTaXplIi8%2BCgkJCQk8c3RvY2sgeD0iNTU2IiB5PSIxNTUiIG5hbWU9IkludmVudG9yeSIvPgoJCQkJPGZsb3cgeD0iNDU2LjUiIHk9IjE1NyIgbmFtZT0icHJvZHVjdGlvbiByYXRlIj4KCQkJCQk8cHRzPgoJCQkJCQk8cHQgeD0iMzkxLjUiIHk9IjE1NyIvPgoJCQkJCQk8cHQgeD0iNTMzLjUiIHk9IjE1NyIvPgoJCQkJCTwvcHRzPgoJCQkJPC9mbG93PgoJCQkJPGF1eCB4PSI1NjAuNzE0IiB5PSIyMzIiIG5hbWU9InByb2R1Y3Rpb24gZHVyYXRpb24iLz4KCQkJCTxjb25uZWN0b3IgdWlkPSIyIiBhbmdsZT0iMjk3LjUyMSI%2BCgkJCQkJPGZyb20%2BcHJvZHVjdGlvbl9zdGFydDwvZnJvbT4KCQkJCQk8dG8%2BcHJvZHVjdGlvbl9yYXRlPC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjMiIGFuZ2xlPSIxNTguMTk5Ij4KCQkJCQk8ZnJvbT5wcm9kdWN0aW9uX2R1cmF0aW9uPC9mcm9tPgoJCQkJCTx0bz5wcm9kdWN0aW9uX3JhdGU8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iNCIgYW5nbGU9IjQ0LjM3MDQiPgoJCQkJCTxmcm9tPkludmVudG9yeTwvZnJvbT4KCQkJCQk8dG8%2BVG90YWxfSW52ZW50b3J5PC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjUiIGFuZ2xlPSIzNTUuNTU2Ij4KCQkJCQk8ZnJvbT5JbnZlbnRvcnk8L2Zyb20%2BCgkJCQkJPHRvPkF2ZXJhZ2VfSW52ZW50b3J5PC90bz4KCQkJCTwvY29ubmVjdG9yPgoJCQkJPGNvbm5lY3RvciB1aWQ9IjYiIGFuZ2xlPSIzMTAuNjI2Ij4KCQkJCQk8ZnJvbT5JbnZlbnRvcnk8L2Zyb20%2BCgkJCQkJPHRvPkF2ZXJhZ2VfSW52ZW50b3J5X3VzaW5nX1NpemU8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iNyIgYW5nbGU9IjEwOC41MSI%2BCgkJCQkJPGZyb20%2BSW52ZW50b3J5PC9mcm9tPgoJCQkJCTx0bz5sYXJnZXN0X0dlcm1hbl9pbnZlbnRvcnk8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8Y29ubmVjdG9yIHVpZD0iOCIgYW5nbGU9IjE1OC45NjIiPgoJCQkJCTxmcm9tPkludmVudG9yeTwvZnJvbT4KCQkJCQk8dG8%2Bc21hbGxlc3RfR2VybWFuX2ludmVudG9yeTwvdG8%2BCgkJCQk8L2Nvbm5lY3Rvcj4KCQkJCTxzdGFja2VkX2NvbnRhaW5lciB1aWQ9IjkiIHg9IjcyMi44NTciIHk9IjMzMi44NTciIHdpZHRoPSIzNTAiIGhlaWdodD0iMjUwIj4KCQkJCQk8Z3JhcGggd2lkdGg9IjM1MCIgaGVpZ2h0PSIyNTAiIHR5cGU9InRpbWVfc2VyaWVzIiBpc2VlOnBvaW50c19vbmx5PSJmYWxzZSIgc2hvd19ncmlkPSJmYWxzZSIgaW5jbHVkZV91bml0c19pbl9sZWdlbmQ9ImZhbHNlIiBwbG90X251bWJlcnM9ImZhbHNlIiBpc2VlOmxhYmVsX3BpZV9zbGljZXM9ImZhbHNlIiBudW1feF9ncmlkX2xpbmVzPSIwIiBudW1feV9ncmlkX2xpbmVzPSIwIiBudW1feF9sYWJlbHM9IjUiIG51bV95X2xhYmVscz0iMyIgaXNlZTpmaWxsX2ludGVuc2l0eT0iMC4xIiBsZWZ0X2F4aXNfbXVsdGlfc2NhbGU9ImZhbHNlIiBsZWZ0X2F4aXNfYXV0b19zY2FsZT0idHJ1ZSIgcmlnaHRfYXhpc19tdWx0aV9zY2FsZT0iZmFsc2UiIHJpZ2h0X2F4aXNfYXV0b19zY2FsZT0idHJ1ZSI%2BCgkJCQkJCTxwbG90IGNvbG9yPSJibHVlIiBpc2VlOmtlZXBfemVyb192aXNpYmxlPSJ0cnVlIiBwZW5fd2lkdGg9IjEiIGluZGV4PSIwIiBzaG93X3lfYXhpcz0idHJ1ZSI%2BCgkJCQkJCQk8ZW50aXR5IG5hbWU9InNtYWxsZXN0X0dlcm1hbl9pbnZlbnRvcnkiLz4KCQkJCQkJPC9wbG90PgoJCQkJCQk8cGxvdCBjb2xvcj0icmVkIiBwZW5fc3R5bGU9ImRvdF9kYXNoZWQiIGlzZWU6a2VlcF96ZXJvX3Zpc2libGU9InRydWUiIHBlbl93aWR0aD0iMSIgaW5kZXg9IjEiIHNob3dfeV9heGlzPSJ0cnVlIj4KCQkJCQkJCTxlbnRpdHkgbmFtZT0ibGFyZ2VzdF9HZXJtYW5faW52ZW50b3J5Ii8%2BCgkJCQkJCTwvcGxvdD4KCQkJCQk8L2dyYXBoPgoJCQkJPC9zdGFja2VkX2NvbnRhaW5lcj4KCQkJCTxzdGFja2VkX2NvbnRhaW5lciB1aWQ9IjEwIiB4PSI4OTEuNDI5IiB5PSI0My41NzE0IiB3aWR0aD0iMzUwIiBoZWlnaHQ9IjI1MCI%2BCgkJCQkJPGdyYXBoIHdpZHRoPSIzNTAiIGhlaWdodD0iMjUwIiB0eXBlPSJ0aW1lX3NlcmllcyIgaXNlZTpwb2ludHNfb25seT0iZmFsc2UiIHNob3dfZ3JpZD0iZmFsc2UiIGluY2x1ZGVfdW5pdHNfaW5fbGVnZW5kPSJmYWxzZSIgcGxvdF9udW1iZXJzPSJmYWxzZSIgaXNlZTpsYWJlbF9waWVfc2xpY2VzPSJmYWxzZSIgbnVtX3hfZ3JpZF9saW5lcz0iMCIgbnVtX3lfZ3JpZF9saW5lcz0iMCIgbnVtX3hfbGFiZWxzPSI1IiBudW1feV9sYWJlbHM9IjMiIGlzZWU6ZmlsbF9pbnRlbnNpdHk9IjAuMSIgbGVmdF9heGlzX211bHRpX3NjYWxlPSJmYWxzZSIgbGVmdF9heGlzX2F1dG9fc2NhbGU9InRydWUiIHJpZ2h0X2F4aXNfbXVsdGlfc2NhbGU9ImZhbHNlIiByaWdodF9heGlzX2F1dG9fc2NhbGU9InRydWUiPgoJCQkJCQk8cGxvdCBjb2xvcj0iYmx1ZSIgaXNlZTprZWVwX3plcm9fdmlzaWJsZT0idHJ1ZSIgcGVuX3dpZHRoPSIxIiBpbmRleD0iMCIgc2hvd195X2F4aXM9InRydWUiPgoJCQkJCQkJPGVudGl0eSBuYW1lPSJUb3RhbF9JbnZlbnRvcnkiLz4KCQkJCQkJPC9wbG90PgoJCQkJCTwvZ3JhcGg%2BCgkJCQk8L3N0YWNrZWRfY29udGFpbmVyPgoJCQkJPHN0YWNrZWRfY29udGFpbmVyIHVpZD0iMTEiIHg9IjQyMy41NzEiIHk9IjU1Ny4xNDMiPgoJCQkJCTxncmFwaCB3aWR0aD0iMzUwIiBoZWlnaHQ9IjI1MCIgdHlwZT0idGltZV9zZXJpZXMiIGlzZWU6cG9pbnRzX29ubHk9ImZhbHNlIiBzaG93X2dyaWQ9ImZhbHNlIiBpbmNsdWRlX3VuaXRzX2luX2xlZ2VuZD0iZmFsc2UiIHBsb3RfbnVtYmVycz0iZmFsc2UiIGlzZWU6bGFiZWxfcGllX3NsaWNlcz0iZmFsc2UiIG51bV94X2dyaWRfbGluZXM9IjAiIG51bV95X2dyaWRfbGluZXM9IjAiIG51bV94X2xhYmVscz0iNSIgbnVtX3lfbGFiZWxzPSIzIiBpc2VlOmZpbGxfaW50ZW5zaXR5PSIwLjEiIGxlZnRfYXhpc19tdWx0aV9zY2FsZT0iZmFsc2UiIGxlZnRfYXhpc19hdXRvX3NjYWxlPSJ0cnVlIiByaWdodF9heGlzX211bHRpX3NjYWxlPSJmYWxzZSIgcmlnaHRfYXhpc19hdXRvX3NjYWxlPSJ0cnVlIj4KCQkJCQkJPHBsb3QgY29sb3I9ImJsdWUiIGlzZWU6a2VlcF96ZXJvX3Zpc2libGU9InRydWUiIHBlbl93aWR0aD0iMSIgaW5kZXg9IjAiIHNob3dfeV9heGlzPSJ0cnVlIj4KCQkJCQkJCTxlbnRpdHkgbmFtZT0iQXZlcmFnZV9JbnZlbnRvcnkiLz4KCQkJCQkJPC9wbG90PgoJCQkJCQk8cGxvdCBjb2xvcj0icmVkIiBwZW5fc3R5bGU9ImRvdF9kYXNoZWQiIGlzZWU6a2VlcF96ZXJvX3Zpc2libGU9InRydWUiIHBlbl93aWR0aD0iMSIgaW5kZXg9IjEiIHNob3dfeV9heGlzPSJ0cnVlIj4KCQkJCQkJCTxlbnRpdHkgbmFtZT0iQXZlcmFnZV9JbnZlbnRvcnlfdXNpbmdfU2l6ZSIvPgoJCQkJCQk8L3Bsb3Q%2BCgkJCQkJPC9ncmFwaD4KCQkJCTwvc3RhY2tlZF9jb250YWluZXI%2BCgkJCQk8YXV4IHg9IjY4Ni41NzEiIHk9IjEyNSIgbmFtZT0iSW52ZW50b3J5IFNpemUiLz4KCQkJCTxjb25uZWN0b3IgdWlkPSIxMiIgYW5nbGU9IjE0LjMxOTMiPgoJCQkJCTxmcm9tPkludmVudG9yeTwvZnJvbT4KCQkJCQk8dG8%2BSW52ZW50b3J5X1NpemU8L3RvPgoJCQkJPC9jb25uZWN0b3I%2BCgkJCQk8c3RhY2tlZF9jb250YWluZXIgdWlkPSIxMyIgeD0iMTE4MS40MyIgeT0iNDEwLjcxNCIgd2lkdGg9IjQyNSIgaGVpZ2h0PSIzMDMuNTcxIj4KCQkJCQk8Z3JhcGggd2lkdGg9IjQyNSIgaGVpZ2h0PSIzMDMuNTcxIiB0eXBlPSJ0aW1lX3NlcmllcyIgaXNlZTpwb2ludHNfb25seT0iZmFsc2UiIHNob3dfZ3JpZD0iZmFsc2UiIGluY2x1ZGVfdW5pdHNfaW5fbGVnZW5kPSJmYWxzZSIgcGxvdF9udW1iZXJzPSJmYWxzZSIgaXNlZTpsYWJlbF9waWVfc2xpY2VzPSJmYWxzZSIgbnVtX3hfZ3JpZF9saW5lcz0iMCIgbnVtX3lfZ3JpZF9saW5lcz0iMCIgbnVtX3hfbGFiZWxzPSI1IiBudW1feV9sYWJlbHM9IjMiIGlzZWU6ZmlsbF9pbnRlbnNpdHk9IjAuMSIgbGVmdF9heGlzX211bHRpX3NjYWxlPSJmYWxzZSIgbGVmdF9heGlzX2F1dG9fc2NhbGU9InRydWUiIHJpZ2h0X2F4aXNfbXVsdGlfc2NhbGU9ImZhbHNlIiByaWdodF9heGlzX2F1dG9fc2NhbGU9InRydWUiPgoJCQkJCQk8cGxvdCBjb2xvcj0iYmx1ZSIgaXNlZTprZWVwX3plcm9fdmlzaWJsZT0idHJ1ZSIgcGVuX3dpZHRoPSIxIiBpbmRleD0iMCIgc2hvd195X2F4aXM9InRydWUiPgoJCQkJCQkJPGVudGl0eSBuYW1lPSJJbnZlbnRvcnlbKiwgKl0iLz4KCQkJCQkJPC9wbG90PgoJCQkJCTwvZ3JhcGg%2BCgkJCQk8L3N0YWNrZWRfY29udGFpbmVyPgoJCQk8L3ZpZXc%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
Arrayed Variables in XMILE Models
This page illustrates how to work with XMILE models that contain arrays.
BPTK_Py supports arrayed variables out of the box. You can access them easily just the way you would in Stella Equations. This lets you plot them easily. The advantage of analysing arrayed variables in BPTK_Py is that you can plot anything easily and quickly. It supports a rapid and quick analytics approach: in a notebook you can build the story alongside the analysis, pointing out cost drivers and growth opportunities for your business models.
from%20BPTK_Py%20import%20bptk%0Abptk%20%3D%20bptk()%0A%23%20'%25matplotlib%20inline'%20command%20supported%20automatically%20in%20marimo%0Aimport%20matplotlib.pyplot%20as%20plt%0Aplt.rcParams%5B'figure.facecolor'%5D%20%3D%20'white'%0Aplt.rcParams%5B'axes.facecolor'%5D%20%3D%20'white'%0Aplt.rcParams%5B'savefig.facecolor'%5D%20%3D%20'white'
A simple arrayed model
Let’s have a look at an example. We are working with a model simulating a production chain. It comes with 2 dimensions (country and product). Country is any of Germany, England, Austria or Greece. The products are identified by numbers 1 to 3.
The important components of the model are the 2 stocks Production and Inventory and the flows production start and production rate. The converters mostly compute averages or means for demonstration purposes.
Plot total of all dimensions
Let us suppose, for an initial data analysis we want to get a high level overview over the inventory for all products in all countries. For this purpose, BPTK_Py supports the asterisk and array notation inventory[*,*] as we are used to from Stella Architect. For simplification purposes, we also added a shortcut. For the sum of all dimensions of a stock, you can just use the name of the stock without any array operator.
Hence, plotting inventory[*,*] and inventory returns the same graph:
Analyse a single product inventory in all countries
Now that we saw a rising inventory for all products in all countries, we want to get to the bottom of it and understand which product drives the inventory
We learned that the inventory for product 1 is very high. Further analysis may include looking at the countries and where the inventory is especially high, i.e. plotting inventory for all countries: inventory[1,germany], inventory[1,england] and so on:
We observe that the inventory rises early in Germany but England quickly surpasses at t=3. Further analysis may be possible here. But for demonstration purposes, let us jump over to another interesting features.
Advanced Array Functions
But for now, let’s go ahead and look at more advanced plotting functions. BPTK_Py supports all array functions as outlined in the Stella Architect builtins documentation
In the model, we built a converter average Inventory using the MEAN equation: MEAN(Inventory[*; *]). The converter total Inventory uses the SUM function. It returns the same results as when using inventory[*,*] in BPTK_Py. The transpiler makes sure to translate the equations properly to simulate them in Python:
Finished
That’s it for now. You have seen how to use arrayed elements in XMILE models inside BPTK_Py - enough to analyse an arrayed model and draw conclusions from it without leaving the page.