evez-runtime-core / src /vacc /v_accumulator.py
evez420's picture
Upload src/vacc/v_accumulator.py
0fc8fe3 verified
Raw
History Blame Contribute Delete
14.6 kB
IiIiCkVWRVogVi1BY2N1bXVsYXRvciBEeW5hbWljcyDigJQgdjMgU3RhYmlsaXplZApSZWZhY3RvcmVkIGRlY2F5OiBkdWFsLW1vZGUgKGV4cG9uZW50aWFsIGZvciBhY3RpdmUsIGFjY2VsZXJhdGVkIGZvciBpbmFjdGl2ZSksCmJvdHRvbS11cCByZWNhbGMgd2l0aCBjYWNoaW5nLCBvdmVyZmxvdyBwcm90ZWN0aW9uLCBhbmQgc3RhZ25hdGlvbiBkZXRlY3Rpb24uCiIiIgppbXBvcnQganNvbiwgdGltZSwgaGFzaGxpYiwgbWF0aApmcm9tIGRhdGFjbGFzc2VzIGltcG9ydCBkYXRhY2xhc3MsIGFzZGljdCwgZmllbGQKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CgoKQGRhdGFjbGFzcwpjbGFzcyBSZWFzb25pbmdOb2RlOgogICAgbm9kZV9pZDogc3RyCiAgICB0aWNrOiBpbnQKICAgIGxvb3BfaW5kZXg6IGludAogICAgY29udGVudF9oYXNoOiBzdHIKICAgIHNlbWFudGljX2RlbnNpdHk6IGZsb2F0CiAgICBwYXJlbnRfaWQ6IE9wdGlvbmFsW3N0cl0KICAgIGNoaWxkcmVuOiBsaXN0W3N0cl0gPSBmaWVsZChkZWZhdWx0X2ZhY3Rvcnk9bGlzdCkKICAgIHZfbWFzczogZmxvYXQgPSAwLjAKICAgIGRlcHRoOiBpbnQgPSAwCiAgICBpc19hY3RpdmU6IGJvb2wgPSBUcnVlCiAgICBsYXN0X2RlY2F5X3RpY2s6IGludCA9IDAgICMgdHJhY2sgd2hlbiBkZWNheSB3YXMgbGFzdCBhcHBsaWVkCgoKQGRhdGFjbGFzcyAgCmNsYXNzIFZBY2N1bXVsYXRvclN0YXRlOgogICAgdG90YWxfbWFzczogZmxvYXQKICAgIGFjdGl2ZV9wYXRoczogaW50CiAgICBtYXhfZGVwdGg6IGludAogICAgbWFzc19kaXN0cmlidXRpb246IGRpY3QKICAgIGhlYXZpZXN0X3BhdGg6IGxpc3Rbc3RyXQogICAgc3RhZ25hdGlvbl90aWNrczogaW50CiAgICBtZWFuX2RlbnNpdHk6IGZsb2F0CiAgICBkZW5zaXR5X3ZhcmlhbmNlOiBmbG9hdAogICAgdGltZXN0YW1wOiBmbG9hdAoKCmNsYXNzIFZBY2N1bXVsYXRvclRyYWNrZXI6CiAgICAiIiIKICAgIFN0YWJpbGl6ZWQgVi1BY2N1bXVsYXRvciB3aXRoOgogICAgLSBEdWFsLW1vZGUgZGVjYXkgKGFjdGl2ZSBub2RlcyBkZWNheSBzbG93ZXIgdGhhbiBpbmFjdGl2ZSkKICAgIC0gQm90dG9tLXVwIG1hc3MgcmVjYWxjdWxhdGlvbiBhZnRlciBldmVyeSBkZWNheSBzdGVwCiAgICAtIE1hc3Mgb3ZlcmZsb3cgcHJvdGVjdGlvbiAocHJldmVudHMgcnVuYXdheSBhY2N1bXVsYXRpb24pCiAgICAtIFN0YWduYXRpb24gZGV0ZWN0aW9uIChhbGVydHMgd2hlbiBtYXNzIHN0b3BzIGNoYW5naW5nKQogICAgLSBPKG4pIGRlY2F5IHN0ZXAgKG5vIHJlZHVuZGFudCByZWNhbGN1bGF0aW9uKQogICAgIiIiCiAgICAKICAgIE1BWF9NQVNTID0gMWU2ICAjIG92ZXJmbG93IHByb3RlY3Rpb24KICAgIE1BWF9OT0RFUyA9IDEwMDAwICAjIHByZXZlbnQgbWVtb3J5IGV4aGF1c3Rpb24KICAgIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlY2F5X3JhdGU6IGZsb2F0ID0gMC4wMDEsIGdyb3d0aF9yYXRlOiBmbG9hdCA9IDAuMDUsCiAgICAgICAgICAgICAgICAgaW5hY3RpdmVfZGVjYXlfbXVsdGlwbGllcjogZmxvYXQgPSAyLjApOgogICAgICAgIHNlbGYuZGVjYXlfcmF0ZSA9IGRlY2F5X3JhdGUKICAgICAgICBzZWxmLmdyb3d0aF9yYXRlID0gZ3Jvd3RoX3JhdGUKICAgICAgICBzZWxmLmluYWN0aXZlX2RlY2F5X211bHRpcGxpZXIgPSBpbmFjdGl2ZV9kZWNheV9tdWx0aXBsaWVyCiAgICAgICAgc2VsZi5ub2RlczogZGljdFtzdHIsIFJlYXNvbmluZ05vZGVdID0ge30KICAgICAgICBzZWxmLnJvb3Rfbm9kZXM6IGxpc3Rbc3RyXSA9IFtdCiAgICAgICAgc2VsZi50aWNrID0gMAogICAgICAgIHNlbGYubGFzdF9tYXNzID0gMC4wCiAgICAgICAgc2VsZi5zdGFnbmF0aW9uX3RpY2tzID0gMAogICAgICAgIHNlbGYuX21hc3NfY2FjaGU6IGRpY3Rbc3RyLCBmbG9hdF0gPSB7fSAgIyBjYWNoZSBmb3IgbWFzcyBxdWVyaWVzCiAgICAgICAgCiAgICBkZWYgYWRkX25vZGUoc2VsZiwgY29udGVudF9oYXNoOiBzdHIsIHNlbWFudGljX2RlbnNpdHk6IGZsb2F0LAogICAgICAgICAgICAgICAgIHBhcmVudF9pZDogc3RyID0gTm9uZSwgbG9vcF9pbmRleDogaW50ID0gMCkgLT4gUmVhc29uaW5nTm9kZToKICAgICAgICBpZiBsZW4oc2VsZi5ub2RlcykgPj0gc2VsZi5NQVhfTk9ERVM6CiAgICAgICAgICAgIHNlbGYuX3BydW5lX29sZGVzdCgpCiAgICAgICAgICAgIAogICAgICAgIHNlbGYudGljayArPSAxCiAgICAgICAgbm9kZV9pZCA9IGhhc2hsaWIuc2hhMjU2KGYie2NvbnRlbnRfaGFzaH06e3NlbGYudGlja306e3RpbWUudGltZSgpfSIuZW5jb2RlKCkpLmhleGRpZ2VzdCgpWzoxNl0KICAgICAgICAKICAgICAgICBkZXB0aCA9IDAKICAgICAgICBpZiBwYXJlbnRfaWQgYW5kIHBhcmVudF9pZCBpbiBzZWxmLm5vZGVzOgogICAgICAgICAgICBkZXB0aCA9IHNlbGYubm9kZXNbcGFyZW50X2lkXS5kZXB0aCArIDEKICAgICAgICAgICAgc2VsZi5ub2Rlc1twYXJlbnRfaWRdLmNoaWxkcmVuLmFwcGVuZChub2RlX2lkKQogICAgICAgICAgICBzZWxmLm5vZGVzW3BhcmVudF9pZF0uaXNfYWN0aXZlID0gVHJ1ZSAgIyBwYXJlbnQgcmVhY3RpdmF0ZWQKCiAgICAgICAgIyBDbGFtcCBzZW1hbnRpYyBkZW5zaXR5IHRvIFswLCAxXQogICAgICAgIHNlbWFudGljX2RlbnNpdHkgPSBtYXgoMC4wLCBtaW4oMS4wLCBzZW1hbnRpY19kZW5zaXR5KSkKICAgICAgICAKICAgICAgICBub2RlID0gUmVhc29uaW5nTm9kZSgKICAgICAgICAgICAgbm9kZV9pZD1ub2RlX2lkLCB0aWNrPXNlbGYudGljaywgbG9vcF9pbmRleD1sb29wX2luZGV4LAogICAgICAgICAgICBjb250ZW50X2hhc2g9Y29udGVudF9oYXNoLCBzZW1hbnRpY19kZW5zaXR5PXNlbWFudGljX2RlbnNpdHksCiAgICAgICAgICAgIHBhcmVudF9pZD1wYXJlbnRfaWQsIGRlcHRoPWRlcHRoLCB2X21hc3M9c2VtYW50aWNfZGVuc2l0eSwKICAgICAgICAgICAgbGFzdF9kZWNheV90aWNrPXNlbGYudGljaywKICAgICAgICApCiAgICAgICAgc2VsZi5ub2Rlc1tub2RlX2lkXSA9IG5vZGUKICAgICAgICBpZiBwYXJlbnRfaWQgaXMgTm9uZToKICAgICAgICAgICAgc2VsZi5yb290X25vZGVzLmFwcGVuZChub2RlX2lkKQogICAgICAgIAogICAgICAgIHNlbGYuX3Byb3BhZ2F0ZV9tYXNzKG5vZGVfaWQpCiAgICAgICAgc2VsZi5faW52YWxpZGF0ZV9jYWNoZSgpCiAgICAgICAgcmV0dXJuIG5vZGUKICAgIAogICAgZGVmIF9wcm9wYWdhdGVfbWFzcyhzZWxmLCBub2RlX2lkOiBzdHIpOgogICAgICAgICIiIlByb3BhZ2F0ZSBWLW1hc3MgdXAgdGhlIHJlYXNvbmluZyBjaGFpbiB3aXRoIG92ZXJmbG93IHByb3RlY3Rpb24uIiIiCiAgICAgICAgY3VycmVudCA9IG5vZGVfaWQKICAgICAgICB3aGlsZSBjdXJyZW50OgogICAgICAgICAgICBub2RlID0gc2VsZi5ub2Rlcy5nZXQoY3VycmVudCkKICAgICAgICAgICAgaWYgbm90IG5vZGU6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBjaGlsZF9tYXNzID0gc3VtKHNlbGYubm9kZXNbY10udl9tYXNzIGZvciBjIGluIG5vZGUuY2hpbGRyZW4gaWYgYyBpbiBzZWxmLm5vZGVzKQogICAgICAgICAgICBub2RlLnZfbWFzcyA9IG1pbihub2RlLnNlbWFudGljX2RlbnNpdHkgKyBjaGlsZF9tYXNzICogKDEgLSBzZWxmLmRlY2F5X3JhdGUpLCBzZWxmLk1BWF9NQVNTKQogICAgICAgICAgICBjdXJyZW50ID0gbm9kZS5wYXJlbnRfaWQKICAgIAogICAgZGVmIGRlY2F5KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEFwcGx5IGR1YWwtbW9kZSB0ZW1wb3JhbCBkZWNheSB0byBBTEwgbm9kZXMsIHRoZW4gcmVjYWxjdWxhdGUgYm90dG9tLXVwLgogICAgICAgIEFjdGl2ZSBub2Rlczogc3RhbmRhcmQgZXhwb25lbnRpYWwgZGVjYXkKICAgICAgICBJbmFjdGl2ZSBub2RlczogYWNjZWxlcmF0ZWQgZGVjYXkgKG11bHRpcGxpZXIpCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi50aWNrICs9IDEKICAgICAgICAKICAgICAgICAjIFN0ZXAgMTogRGVjYXkgc2VtYW50aWNfZGVuc2l0eSBvZiBhbGwgbm9kZXMKICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLm5vZGVzLnZhbHVlcygpOgogICAgICAgICAgICBpZiBub2RlLmlzX2FjdGl2ZToKICAgICAgICAgICAgICAgIG5vZGUuc2VtYW50aWNfZGVuc2l0eSAqPSAoMSAtIHNlbGYuZGVjYXlfcmF0ZSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIG5vZGUuc2VtYW50aWNfZGVuc2l0eSAqPSAoMSAtIHNlbGYuZGVjYXlfcmF0ZSAqIHNlbGYuaW5hY3RpdmVfZGVjYXlfbXVsdGlwbGllcikKICAgICAgICAgICAgCiAgICAgICAgICAgICMgUHJldmVudCB1bmRlcmZsb3cKICAgICAgICAgICAgaWYgbm9kZS5zZW1hbnRpY19kZW5zaXR5IDwgMWUtMTA6CiAgICAgICAgICAgICAgICBub2RlLnNlbWFudGljX2RlbnNpdHkgPSAwLjAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICBub2RlLmxhc3RfZGVjYXlfdGljayA9IHNlbGYudGljawogICAgICAgIAogICAgICAgICMgU3RlcCAyOiBSZWNhbGN1bGF0ZSBhbGwgVi1tYXNzIGJvdHRvbS11cCAoZGVlcGVzdCBmaXJzdCkKICAgICAgICBzb3J0ZWRfbm9kZXMgPSBzb3J0ZWQoc2VsZi5ub2Rlcy52YWx1ZXMoKSwga2V5PWxhbWJkYSBuOiAtbi5kZXB0aCkKICAgICAgICBmb3Igbm9kZSBpbiBzb3J0ZWRfbm9kZXM6CiAgICAgICAgICAgIGNoaWxkX21hc3MgPSBzdW0oc2VsZi5ub2Rlc1tjXS52X21hc3MgZm9yIGMgaW4gbm9kZS5jaGlsZHJlbiBpZiBjIGluIHNlbGYubm9kZXMpCiAgICAgICAgICAgIG5vZGUudl9tYXNzID0gbWluKG5vZGUuc2VtYW50aWNfZGVuc2l0eSArIGNoaWxkX21hc3MgKiAoMSAtIHNlbGYuZGVjYXlfcmF0ZSksIHNlbGYuTUFYX01BU1MpCiAgICAgICAgCiAgICAgICAgc2VsZi5faW52YWxpZGF0ZV9jYWNoZSgpCiAgICAKICAgIGRlZiBkZWFjdGl2YXRlX3BhdGgoc2VsZiwgbm9kZV9pZDogc3RyKToKICAgICAgICAiIiJNYXJrIGEgcmVhc29uaW5nIHBhdGggYXMgaW5hY3RpdmUgKHRyaWdnZXJzIGFjY2VsZXJhdGVkIGRlY2F5KS4iIiIKICAgICAgICBpZiBub2RlX2lkIGluIHNlbGYubm9kZXM6CiAgICAgICAgICAgIHNlbGYubm9kZXNbbm9kZV9pZF0uaXNfYWN0aXZlID0gRmFsc2UKICAgICAgICAgICAgZm9yIGNoaWxkX2lkIGluIHNlbGYubm9kZXNbbm9kZV9pZF0uY2hpbGRyZW46CiAgICAgICAgICAgICAgICBzZWxmLmRlYWN0aXZhdGVfcGF0aChjaGlsZF9pZCkKICAgIAogICAgZGVmIGFjdGl2YXRlX3BhdGgoc2VsZiwgbm9kZV9pZDogc3RyKToKICAgICAgICAiIiJSZWFjdGl2YXRlIGEgcmVhc29uaW5nIHBhdGguIiIiCiAgICAgICAgaWYgbm9kZV9pZCBpbiBzZWxmLm5vZGVzOgogICAgICAgICAgICBzZWxmLm5vZGVzW25vZGVfaWRdLmlzX2FjdGl2ZSA9IFRydWUKICAgICAgICAgICAgZm9yIGNoaWxkX2lkIGluIHNlbGYubm9kZXNbbm9kZV9pZF0uY2hpbGRyZW46CiAgICAgICAgICAgICAgICBzZWxmLmFjdGl2YXRlX3BhdGgoY2hpbGRfaWQpCiAgICAKICAgIGRlZiBfcHJ1bmVfb2xkZXN0KHNlbGYsIG46IGludCA9IDEwMCk6CiAgICAgICAgIiIiUmVtb3ZlIG9sZGVzdCBpbmFjdGl2ZSBub2RlcyB0byBwcmV2ZW50IG1lbW9yeSBleGhhdXN0aW9uLiIiIgogICAgICAgIGluYWN0aXZlID0gc29ydGVkKAogICAgICAgICAgICBbbiBmb3IgbiBpbiBzZWxmLm5vZGVzLnZhbHVlcygpIGlmIG5vdCBuLmlzX2FjdGl2ZV0sCiAgICAgICAgICAgIGtleT1sYW1iZGEgbjogbi50aWNrCiAgICAgICAgKQogICAgICAgIGZvciBub2RlIGluIGluYWN0aXZlWzpuXToKICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX25vZGUobm9kZS5ub2RlX2lkKQogICAgCiAgICBkZWYgX3JlbW92ZV9ub2RlKHNlbGYsIG5vZGVfaWQ6IHN0cik6CiAgICAgICAgIiIiU2FmZWx5IHJlbW92ZSBhIG5vZGUgYW5kIHVwZGF0ZSBwYXJlbnQuIiIiCiAgICAgICAgbm9kZSA9IHNlbGYubm9kZXMuZ2V0KG5vZGVfaWQpCiAgICAgICAgaWYgbm90IG5vZGU6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIGlmIG5vZGUucGFyZW50X2lkIGFuZCBub2RlLnBhcmVudF9pZCBpbiBzZWxmLm5vZGVzOgogICAgICAgICAgICBwYXJlbnQgPSBzZWxmLm5vZGVzW25vZGUucGFyZW50X2lkXQogICAgICAgICAgICBpZiBub2RlX2lkIGluIHBhcmVudC5jaGlsZHJlbjoKICAgICAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5yZW1vdmUobm9kZV9pZCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBub2RlX2lkIGluIHNlbGYucm9vdF9ub2RlczoKICAgICAgICAgICAgICAgIHNlbGYucm9vdF9ub2Rlcy5yZW1vdmUobm9kZV9pZCkKICAgICAgICBkZWwgc2VsZi5ub2Rlc1tub2RlX2lkXQogICAgICAgIHNlbGYuX2ludmFsaWRhdGVfY2FjaGUoKQogICAgCiAgICBkZWYgX2ludmFsaWRhdGVfY2FjaGUoc2VsZik6CiAgICAgICAgc2VsZi5fbWFzc19jYWNoZS5jbGVhcigpCiAgICAKICAgIGRlZiBnZXRfc3RhdGUoc2VsZiwgZG9tYWluX21hcDogZGljdCA9IE5vbmUpIC0+IFZBY2N1bXVsYXRvclN0YXRlOgogICAgICAgIGFjdGl2ZV9ub2RlcyA9IFtuIGZvciBuIGluIHNlbGYubm9kZXMudmFsdWVzKCkgaWYgbi5pc19hY3RpdmVdCiAgICAgICAgdG90YWxfbWFzcyA9IHN1bShuLnZfbWFzcyBmb3IgbiBpbiBzZWxmLm5vZGVzLnZhbHVlcygpKQogICAgICAgIAogICAgICAgICMgU3RhZ25hdGlvbiBkZXRlY3Rpb24KICAgICAgICBpZiBhYnModG90YWxfbWFzcyAtIHNlbGYubGFzdF9tYXNzKSA8IDAuMDAwMToKICAgICAgICAgICAgc2VsZi5zdGFnbmF0aW9uX3RpY2tzICs9IDEKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnN0YWduYXRpb25fdGlja3MgPSAwCiAgICAgICAgc2VsZi5sYXN0X21hc3MgPSB0b3RhbF9tYXNzCiAgICAgICAgCiAgICAgICAgIyBEZW5zaXR5IHN0YXRpc3RpY3MKICAgICAgICBkZW5zaXRpZXMgPSBbbi5zZW1hbnRpY19kZW5zaXR5IGZvciBuIGluIHNlbGYubm9kZXMudmFsdWVzKCldCiAgICAgICAgbWVhbl9kZW5zaXR5ID0gc3VtKGRlbnNpdGllcykgLyBsZW4oZGVuc2l0aWVzKSBpZiBkZW5zaXRpZXMgZWxzZSAwCiAgICAgICAgZGVuc2l0eV92YXIgPSBzdW0oKGQgLSBtZWFuX2RlbnNpdHkpKioyIGZvciBkIGluIGRlbnNpdGllcykgLyBsZW4oZGVuc2l0aWVzKSBpZiBkZW5zaXRpZXMgZWxzZSAwCiAgICAgICAgCiAgICAgICAgIyBNYXNzIGRpc3RyaWJ1dGlvbiBieSBkb21haW4KICAgICAgICBtYXNzX2J5X2RvbWFpbiA9IGRlZmF1bHRkaWN0KGZsb2F0KQogICAgICAgIGlmIGRvbWFpbl9tYXA6CiAgICAgICAgICAgIGZvciBub2RlIGluIHNlbGYubm9kZXMudmFsdWVzKCk6CiAgICAgICAgICAgICAgICBkb21haW4gPSBkb21haW5fbWFwLmdldChub2RlLm5vZGVfaWQsICJ1bmtub3duIikKICAgICAgICAgICAgICAgIG1hc3NfYnlfZG9tYWluW2RvbWFpbl0gKz0gbm9kZS52X21hc3MKICAgICAgICBlbHNlOgogICAgICAgICAgICBtYXNzX2J5X2RvbWFpblsidW5jbGFzc2lmaWVkIl0gPSB0b3RhbF9tYXNzCiAgICAgICAgCiAgICAgICAgaGVhdmllc3QgPSBzZWxmLl9maW5kX2hlYXZpZXN0X3BhdGgoKQogICAgICAgIG1heF9kZXB0aCA9IG1heCgobi5kZXB0aCBmb3IgbiBpbiBzZWxmLm5vZGVzLnZhbHVlcygpKSwgZGVmYXVsdD0wKQogICAgICAgIAogICAgICAgIHJldHVybiBWQWNjdW11bGF0b3JTdGF0ZSgKICAgICAgICAgICAgdG90YWxfbWFzcz1yb3VuZCh0b3RhbF9tYXNzLCA0KSwgYWN0aXZlX3BhdGhzPWxlbihhY3RpdmVfbm9kZXMpLAogICAgICAgICAgICBtYXhfZGVwdGg9bWF4X2RlcHRoLCBtYXNzX2Rpc3RyaWJ1dGlvbj1kaWN0KG1hc3NfYnlfZG9tYWluKSwKICAgICAgICAgICAgaGVhdmllc3RfcGF0aD1oZWF2aWVzdCwgc3RhZ25hdGlvbl90aWNrcz1zZWxmLnN0YWduYXRpb25fdGlja3MsCiAgICAgICAgICAgIG1lYW5fZGVuc2l0eT1yb3VuZChtZWFuX2RlbnNpdHksIDYpLAogICAgICAgICAgICBkZW5zaXR5X3ZhcmlhbmNlPXJvdW5kKGRlbnNpdHlfdmFyLCA2KSwKICAgICAgICAgICAgdGltZXN0YW1wPXRpbWUudGltZSgpLAogICAgICAgICkKICAgIAogICAgZGVmIF9maW5kX2hlYXZpZXN0X3BhdGgoc2VsZikgLT4gbGlzdFtzdHJdOgogICAgICAgICIiIkZpbmQgdGhlIHBhdGggZnJvbSByb290IHRvIGxlYWYgd2l0aCBoaWdoZXN0IGN1bXVsYXRpdmUgVi1tYXNzLiIiIgogICAgICAgIGlmIG5vdCBzZWxmLnJvb3Rfbm9kZXM6CiAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgIAogICAgICAgIGJlc3RfcGF0aCA9IFtdCiAgICAgICAgYmVzdF9tYXNzID0gMC4wCiAgICAgICAgCiAgICAgICAgZGVmIGRmcyhub2RlX2lkLCBwYXRoLCBtYXNzKToKICAgICAgICAgICAgbm9ubG9jYWwgYmVzdF9wYXRoLCBiZXN0X21hc3MKICAgICAgICAgICAgbm9kZSA9IHNlbGYubm9kZXMuZ2V0KG5vZGVfaWQpCiAgICAgICAgICAgIGlmIG5vdCBub2RlOgogICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgIHBhdGggPSBwYXRoICsgW25vZGVfaWRdCiAgICAgICAgICAgIG1hc3MgKz0gbm9kZS52X21hc3MKICAgICAgICAgICAgaWYgbm90IG5vZGUuY2hpbGRyZW46CiAgICAgICAgICAgICAgICBpZiBtYXNzID4gYmVzdF9tYXNzOgogICAgICAgICAgICAgICAgICAgIGJlc3RfbWFzcyA9IG1hc3MKICAgICAgICAgICAgICAgICAgICBiZXN0X3BhdGggPSBwYXRoWzpdCiAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46CiAgICAgICAgICAgICAgICBkZnMoY2hpbGQsIHBhdGgsIG1hc3MpCiAgICAgICAgCiAgICAgICAgZm9yIHJvb3QgaW4gc2VsZi5yb290X25vZGVzOgogICAgICAgICAgICBkZnMocm9vdCwgW10sIDAuMCkKICAgICAgICByZXR1cm4gYmVzdF9wYXRoCiAgICAKICAgIGRlZiBoZWFsdGhfY2hlY2soc2VsZikgLT4gZGljdDoKICAgICAgICAiIiJSdW50aW1lIHN0YWJpbGl0eSBkaWFnbm9zdGljcy4iIiIKICAgICAgICB0b3RhbCA9IGxlbihzZWxmLm5vZGVzKQogICAgICAgIGFjdGl2ZSA9IHN1bSgxIGZvciBuIGluIHNlbGYubm9kZXMudmFsdWVzKCkgaWYgbi5pc19hY3RpdmUpCiAgICAgICAgb3ZlcmZsb3dfcmlzayA9IGFueShuLnZfbWFzcyA+IHNlbGYuTUFYX01BU1MgKiAwLjkgZm9yIG4gaW4gc2VsZi5ub2Rlcy52YWx1ZXMoKSkKICAgICAgICB1bmRlcmZsb3dfY291bnQgPSBzdW0oMSBmb3IgbiBpbiBzZWxmLm5vZGVzLnZhbHVlcygpIGlmIG4uc2VtYW50aWNfZGVuc2l0eSA8IDFlLTgpCiAgICAgICAgCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgInRvdGFsX25vZGVzIjogdG90YWwsCiAgICAgICAgICAgICJhY3RpdmVfbm9kZXMiOiBhY3RpdmUsCiAgICAgICAgICAgICJpbmFjdGl2ZV9ub2RlcyI6IHRvdGFsIC0gYWN0aXZlLAogICAgICAgICAgICAib3ZlcmZsb3dfcmlzayI6IG92ZXJmbG93X3Jpc2ssCiAgICAgICAgICAgICJ1bmRlcmZsb3dfbm9kZXMiOiB1bmRlcmZsb3dfY291bnQsCiAgICAgICAgICAgICJzdGFnbmF0aW9uX3RpY2tzIjogc2VsZi5zdGFnbmF0aW9uX3RpY2tzLAogICAgICAgICAgICAibWF4X2RlcHRoIjogbWF4KChuLmRlcHRoIGZvciBuIGluIHNlbGYubm9kZXMudmFsdWVzKCkpLCBkZWZhdWx0PTApLAogICAgICAgICAgICAibWVhbl92X21hc3MiOiByb3VuZChzdW0obi52X21hc3MgZm9yIG4gaW4gc2VsZi5ub2Rlcy52YWx1ZXMoKSkgLyBtYXgodG90YWwsIDEpLCA2KSwKICAgICAgICAgICAgInN0YWJsZSI6IG5vdCBvdmVyZmxvd19yaXNrIGFuZCBzZWxmLnN0YWduYXRpb25fdGlja3MgPCAxMDAsCiAgICAgICAgfQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAjIFN0YWJpbGl0eSB0ZXN0OiBydW4gMTAwMCBkZWNheSBzdGVwcyBhbmQgdmVyaWZ5IG5vIG92ZXJmbG93L3VuZGVyZmxvdwogICAgdHJhY2tlciA9IFZBY2N1bXVsYXRvclRyYWNrZXIoZGVjYXlfcmF0ZT0wLjAxLCBncm93dGhfcmF0ZT0wLjA1KQogICAgCiAgICAjIEJ1aWxkIGEgbGFyZ2UgdHJlZQogICAgcm9vdCA9IHRyYWNrZXIuYWRkX25vZGUoInJvb3QiLCAxLjApCiAgICBmb3IgaSBpbiByYW5nZSg1MCk6CiAgICAgICAgY2hpbGQgPSB0cmFja2VyLmFkZF9ub2RlKGYiY2hpbGRfe2l9IiwgMC41LCBwYXJlbnRfaWQ9cm9vdC5ub2RlX2lkKQogICAgICAgIGZvciBqIGluIHJhbmdlKDUpOgogICAgICAgICAgICB0cmFja2VyLmFkZF9ub2RlKGYibGVhZl97aX1fe2p9IiwgcmFuZG9tLnVuaWZvcm0oMC4xLCAwLjkpIGlmIChyYW5kb20gOj0gX19pbXBvcnRfXygncmFuZG9tJykpIGVsc2UgMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfaWQ9Y2hpbGQubm9kZV9pZCkKICAgIAogICAgcHJpbnQoZiJJbml0aWFsOiB7bGVuKHRyYWNrZXIubm9kZXMpfSBub2RlcywgbWFzcz17dHJhY2tlci5nZXRfc3RhdGUoKS50b3RhbF9tYXNzfSIpCiAgICAKICAgICMgUnVuIDEwMDAgZGVjYXkgc3RlcHMKICAgIGZvciBpIGluIHJhbmdlKDEwMDApOgogICAgICAgIHRyYWNrZXIuZGVjYXkoKQogICAgICAgIGlmIGkgJSAyMDAgPT0gMTk5OgogICAgICAgICAgICBoZWFsdGggPSB0cmFja2VyLmhlYWx0aF9jaGVjaygpCiAgICAgICAgICAgIHByaW50KGYiICBTdGVwIHtpKzF9OiBtYXNzPXt0cmFja2VyLmdldF9zdGF0ZSgpLnRvdGFsX21hc3M6LjRmfSAiCiAgICAgICAgICAgICAgICAgIGYic3RhYmxlPXtoZWFsdGhbJ3N0YWJsZSddfSBvdmVyZmxvdz17aGVhbHRoWydvdmVyZmxvd19yaXNrJ119ICIKICAgICAgICAgICAgICAgICAgZiJ1bmRlcmZsb3c9e2hlYWx0aFsndW5kZXJmbG93X25vZGVzJ119IikKICAgIAogICAgZmluYWwgPSB0cmFja2VyLmhlYWx0aF9jaGVjaygpCiAgICBwcmludChmIlxuRmluYWwgaGVhbHRoOiB7anNvbi5kdW1wcyhmaW5hbCwgaW5kZW50PTIpfSIpCg==