# simply put, what this does is let you select your priorities for rooms, and fill in which
# champions you have.
# then the logic finds the champion for each room who has the highest value, with the
# least remaining value for all the other rooms.
# My "database" is missing a lot of information for champions I don't have. If you can
# fill in the blanks, PM me.
# -- Carnou, Earth-228
# Special thanks to Zero and Zero's league, [GLC] The Corps, for helping me fill in the "database".
# Currently missing champions: Martian Manhunter, Nightwing, Sinestro
# Constantine, Zatana,
# we can fill out these rooms (training, bio_lab, steel, chips, armory, drone, research, power)
# with more data as we get it.
# for any champions not yet listed, it requires clicking on an assignee of each room, getting
# the percentage they contribute, and adding it to each room.
### This section is the "configuration" section
# You list your order of preference for the rooms
# And you list the champions that you have.
# Here, we fill out the list of champions that you actually have. As this
# grows, we'll have more champions in each room than are necessarily in this list
champions = [
'aquaman' ,
'atom' ,
'bane' ,
'batgirl' ,
'batman' ,
'black adam' ,
'black canary' ,
'captain cold' ,
'catwoman' ,
'cyborg' ,
'deadshot' ,
'dr fate' ,
'flash' ,
'green arrow' ,
'harley quinn' ,
'joker' ,
'killer croc' ,
'luthor' ,
'mera' ,
'penguin' ,
'poison ivy' ,
'red hood' ,
'red robin' ,
'robin' ,
'scarecrow' ,
'shazam' ,
'stargirl' ,
'superman' ,
'vixen' ,
'wonder woman' ,
]
# Here, we set the priority FROM LOWEST TO HIGHEST
# The algorithm will favor maximizing the rooms at the bottom
# do not add or remove rooms, simply rearrange them
priority = [
'training' ,
'training' ,
'armory' ,
'steel' ,
'steel' ,
'chips' ,
'chips' ,
'steel' ,
'steel' ,
'chips' ,
'chips' ,
'research' ,
'drone' ,
'drone' ,
'bio_lab' ,
'bio_lab' ,
'bio_lab' ,
'bio_lab' ,
'power' ,
'power' ,
]
### This is "the database". It's not really a database, but it's where
# we track champion data for each room
# Once I get the complete database information, this will go in the
# "don't touch!" section
training = {
'aquaman' : 30 ,
'atom' : 15 ,
'bane' : 30 ,
'batgirl' : 30 ,
'batman' : 30 ,
'black adam' : 10 ,
'black canary' : 30 ,
'captain cold' : 10 ,
'catwoman' : 15 ,
'cyborg' : 20 ,
'deadshot' : 20 ,
'deathstroke' :30 ,
'dr fate' : 20 ,
'flash' : 30 ,
'green arrow' : 15 ,
'green lantern' : 20 ,
'harley quinn' : 30 ,
'joker' : 30 ,
'killer croc' : 15 ,
'luthor' : 30 ,
'mera' : 10 ,
'penguin' : 20 ,
'poison ivy' : 20 ,
'raven' : 20 ,
'red hood' : 15 ,
'red robin' : 30 ,
'robin' : 30 ,
'scarecrow' : 30 ,
'shazam' : 20 ,
'stargirl' : 20 ,
'superman' : 30 ,
'twoface' : 20 ,
'vixen' : 15 ,
'wonder woman' : 15 ,
}
bio_lab = {
'aquaman' : 30 ,
'atom' : 15 ,
'bane' : 30 ,
'batgirl' : 20 ,
'batman' : 20 ,
'black adam' : 10 ,
'black canary' : 30 ,
'captain cold' : 10 ,
'catwoman' : 10 ,
'cyborg' : 20 ,
'deadshot' : 20 ,
'deathstroke' :30 ,
'dr fate' : 20 ,
'flash' : 30 ,
'green arrow' : 10 ,
'green lantern' : 30 ,
'harley quinn' : 20 ,
'joker' : 30 ,
'killer croc' : 15 ,
'luthor' : 20 ,
'mera' : 15 ,
'penguin' : 20 ,
'poison ivy' : 30 ,
'raven' : 30 ,
'red hood' : 15 ,
'red robin' : 20 ,
'robin' : 30 ,
'scarecrow' : 20 ,
'shazam' : 30 ,
'stargirl' : 20 ,
'superman' : 30 ,
'twoface' : 30 ,
'vixen' : 15 ,
'wonder woman' : 10 ,
}
steel = {
'aquaman' : 20 ,
'atom' : 10 ,
'bane' : 20 ,
'batgirl' : 20 ,
'batman' : 30 ,
'black adam' : 15 ,
'black canary' : 20 ,
'captain cold' : 10 ,
'catwoman' : 10 ,
'cyborg' : 30 ,
'deadshot' : 30 ,
'deathstroke' :20 ,
'dr fate' : 30 ,
'flash' : 30 ,
'green arrow' : 10 ,
'green lantern' : 30 ,
'harley quinn' : 20 ,
'joker' : 20 ,
'killer croc' : 10 ,
'luthor' : 20 ,
'mera' : 10 ,
'penguin' : 20 ,
'poison ivy' : 20 ,
'raven' : 30 ,
'red hood' : 10 ,
'red robin' : 20 ,
'robin' : 20 ,
'scarecrow' : 20 ,
'shazam' : 30 ,
'stargirl' : 30 ,
'superman' : 30 ,
'twoface' : 20 ,
'vixen' : 10 ,
'wonder woman' : 15 ,
}
chips = {
'aquaman' : 20 ,
'atom' : 10 ,
'bane' : 20 ,
'batgirl' : 30 ,
'batman' : 30 ,
'black adam' : 10 ,
'black canary' : 20 ,
'captain cold' : 10 ,
'catwoman' : 15 ,
'cyborg' : 30 ,
'deadshot' : 20 ,
'deathstroke' :30 ,
'dr fate' : 20 ,
'flash' : 20 ,
'green arrow' : 15 ,
'green lantern' : 20 ,
'harley quinn' : 30 ,
'joker' : 20 ,
'killer croc' : 10 ,
'luthor' : 30 ,
'mera' : 10 ,
'penguin' : 30 ,
'poison ivy' : 20 ,
'raven' : 20 ,
'red hood' : 10 ,
'red robin' : 30 ,
'robin' : 30 ,
'scarecrow' : 30 ,
'shazam' : 20 ,
'stargirl' : 20 ,
'superman' : 20 ,
'twoface' : 20 ,
'vixen' : 10 ,
'wonder woman' : 10 ,
}
armory = {
'aquaman' : 20 ,
'atom' : 10 ,
'bane' : 30 ,
'batgirl' : 20 ,
'batman' : 30 ,
'black adam' : 15 ,
'black canary' : 20 ,
'captain cold' : 10 ,
'catwoman' : 15 ,
'cyborg' : 30 ,
'deadshot' : 30 ,
'deathstroke' :30 ,
'dr fate' : 30 ,
'flash' : 30 ,
'green arrow' : 15 ,
'green lantern' : 20 ,
'harley quinn' : 20 ,
'joker' : 30 ,
'killer croc' : 15 ,
'luthor' : 30 ,
'mera' : 10 ,
'penguin' : 20 ,
'poison ivy' : 20 ,
'raven' : 20 ,
'red hood' : 10 ,
'red robin' : 20 ,
'robin' : 20 ,
'scarecrow' : 20 ,
'shazam' : 20 ,
'stargirl' : 30 ,
'superman' : 20 ,
'twoface' : 30 ,
'vixen' : 10 ,
'wonder woman' : 10 ,
}
drone = {
'aquaman' : 20 ,
'atom' : 15 ,
'bane' : 20 ,
'batgirl' : 30 ,
'batman' : 30 ,
'black adam' : 10 ,
'black canary' : 20 ,
'catwoman' : 10 ,
'captain cold' : 10 ,
'cyborg' : 30 ,
'deadshot' : 20 ,
'deathstroke' :30 ,
'dr fate' : 30 ,
'flash' : 20 ,
'green arrow' : 15 ,
'green lantern' : 30 ,
'harley quinn' : 30 ,
'joker' : 20 ,
'killer croc' : 10 ,
'luthor' : 30 ,
'mera' : 10 ,
'penguin' : 20 ,
'poison ivy' : 20 ,
'raven' : 20 ,
'red hood' : 10 ,
'red robin' : 30 ,
'robin' : 30 ,
'scarecrow' : 30 ,
'shazam' : 30 ,
'stargirl' : 20 ,
'superman' : 20 ,
'twoface' : 20 ,
'vixen' : 15 ,
'wonder woman' : 10 ,
}
research = {
'aquaman' : 30 ,
'atom' : 15 ,
'bane' : 30 ,
'batgirl' : 30 ,
'batman' : 30 ,
'black adam' : 10 ,
'black canary' : 20 ,
'catwoman' : 10 ,
'captain cold' : 10 ,
'cyborg' : 20 ,
'deadshot' : 20 ,
'deathstroke' :20 ,
'dr fate' : 20 ,
'flash' : 30 ,
'green arrow' : 10 ,
'green lantern' : 20 ,
'harley quinn' : 30 ,
'joker' : 30 ,
'killer croc' : 10 ,
'luthor' : 30 ,
'mera' : 15 ,
'penguin' : 20 ,
'poison ivy' : 30 ,
'raven' : 20 ,
'red hood' : 15 ,
'red robin' : 30 ,
'robin' : 30 ,
'scarecrow' : 30 ,
'shazam' : 20 ,
'stargirl' : 20 ,
'superman' : 20 ,
'twoface' : 30 ,
'vixen' : 10 ,
'wonder woman' : 10 ,
}
power = {
'aquaman' : 30 ,
'atom' : 10 ,
'bane' : 30 ,
'batgirl' : 20 ,
'batman' : 30 ,
'black adam' : 15 ,
'black canary' : 30 ,
'captain cold' : 10 ,
'catwoman' : 10 ,
'cyborg' : 30 ,
'deadshot' : 20 ,
'deathstroke' :20 ,
'dr fate' : 20 ,
'flash' : 30 ,
'green arrow' : 10 ,
'green lantern' : 30 ,
'harley quinn' : 20 ,
'joker' : 20 ,
'killer croc' : 10 ,
'luthor' : 20 ,
'mera' : 10 ,
'penguin' : 20 ,
'poison ivy' : 20 ,
'raven' : 30 ,
'red hood' : 10 ,
'red robin' : 20 ,
'robin' : 30 ,
'scarecrow' : 20 ,
'shazam' : 30 ,
'stargirl' : 30 ,
'superman' : 30 ,
'twoface' : 20 ,
'vixen' : 10 ,
'wonder woman' : 10 ,
}
### DO NOT MODIFY BEYOND THIS POINT
### (unless you like coding logic)
rooms = {
'training' : training,
'bio_lab' : bio_lab,
'steel' : steel,
'chips' : chips,
'armory' : armory,
'drone' : drone,
'research' : research,
'power' : power,
}
def calculate_value( champion) :
value = sum ( [ rooms[ room] [ champion] for room in priority] )
return value
while priority:
room_name = priority.pop ( )
score = -1
champ = ""
value = 999999
for champion in champions:
champ_value = calculate_value( champion)
if rooms[ room_name] [ champion] > score:
score = rooms[ room_name] [ champion]
champ = champion
value = champ_value
if rooms[ room_name] [ champion] == score and champ_value < value:
score = rooms[ room_name] [ champion]
champ = champion
value = champ_value
champions.remove ( champ)
print ( f"{champ} assigned to {room_name} with {score} points" )
IyBzaW1wbHkgcHV0LCB3aGF0IHRoaXMgZG9lcyBpcyBsZXQgeW91IHNlbGVjdCB5b3VyIHByaW9yaXRpZXMgZm9yIHJvb21zLCBhbmQgZmlsbCBpbiB3aGljaAojIGNoYW1waW9ucyB5b3UgaGF2ZS4KIyB0aGVuIHRoZSBsb2dpYyBmaW5kcyB0aGUgY2hhbXBpb24gZm9yIGVhY2ggcm9vbSB3aG8gaGFzIHRoZSBoaWdoZXN0IHZhbHVlLCB3aXRoIHRoZQojIGxlYXN0IHJlbWFpbmluZyB2YWx1ZSBmb3IgYWxsIHRoZSBvdGhlciByb29tcy4KIyBNeSAiZGF0YWJhc2UiIGlzIG1pc3NpbmcgYSBsb3Qgb2YgaW5mb3JtYXRpb24gZm9yIGNoYW1waW9ucyBJIGRvbid0IGhhdmUuICBJZiB5b3UgY2FuCiMgZmlsbCBpbiB0aGUgYmxhbmtzLCBQTSBtZS4KIyAtLSBDYXJub3UsIEVhcnRoLTIyOAoKIyBTcGVjaWFsIHRoYW5rcyB0byBaZXJvIGFuZCBaZXJvJ3MgbGVhZ3VlLCBbR0xDXSBUaGUgQ29ycHMsIGZvciBoZWxwaW5nIG1lIGZpbGwgaW4gdGhlICJkYXRhYmFzZSIuCiMgQ3VycmVudGx5IG1pc3NpbmcgY2hhbXBpb25zOiBNYXJ0aWFuIE1hbmh1bnRlciwgTmlnaHR3aW5nLCBTaW5lc3RybwojIENvbnN0YW50aW5lLCBaYXRhbmEsCgojIHdlIGNhbiBmaWxsIG91dCB0aGVzZSByb29tcyAodHJhaW5pbmcsIGJpb19sYWIsIHN0ZWVsLCBjaGlwcywgYXJtb3J5LCBkcm9uZSwgcmVzZWFyY2gsIHBvd2VyKQojIHdpdGggbW9yZSBkYXRhIGFzIHdlIGdldCBpdC4KIyBmb3IgYW55IGNoYW1waW9ucyBub3QgeWV0IGxpc3RlZCwgaXQgcmVxdWlyZXMgY2xpY2tpbmcgb24gYW4gYXNzaWduZWUgb2YgZWFjaCByb29tLCBnZXR0aW5nIAojIHRoZSBwZXJjZW50YWdlIHRoZXkgY29udHJpYnV0ZSwgYW5kIGFkZGluZyBpdCB0byBlYWNoIHJvb20uCgojIyMgVGhpcyBzZWN0aW9uIGlzIHRoZSAiY29uZmlndXJhdGlvbiIgc2VjdGlvbgojIFlvdSBsaXN0IHlvdXIgb3JkZXIgb2YgcHJlZmVyZW5jZSBmb3IgdGhlIHJvb21zCiMgQW5kIHlvdSBsaXN0IHRoZSBjaGFtcGlvbnMgdGhhdCB5b3UgaGF2ZS4KCiMgSGVyZSwgd2UgZmlsbCBvdXQgdGhlIGxpc3Qgb2YgY2hhbXBpb25zIHRoYXQgeW91IGFjdHVhbGx5IGhhdmUuICBBcyB0aGlzCiMgZ3Jvd3MsIHdlJ2xsIGhhdmUgbW9yZSBjaGFtcGlvbnMgaW4gZWFjaCByb29tIHRoYW4gYXJlIG5lY2Vzc2FyaWx5IGluIHRoaXMgbGlzdApjaGFtcGlvbnMgPSBbCgknYXF1YW1hbicsCgknYXRvbScsCgknYmFuZScsCgknYmF0Z2lybCcsCgknYmF0bWFuJywKCSdibGFjayBhZGFtJywKCSdibGFjayBjYW5hcnknLAoJJ2NhcHRhaW4gY29sZCcsCgknY2F0d29tYW4nLAoJJ2N5Ym9yZycsCgknZGVhZHNob3QnLAoJJ2RyIGZhdGUnLAoJJ2ZsYXNoJywKCSdncmVlbiBhcnJvdycsCgknaGFybGV5IHF1aW5uJywKCSdqb2tlcicsCgkna2lsbGVyIGNyb2MnLAoJJ2x1dGhvcicsCgknbWVyYScsCgkncGVuZ3VpbicsCgkncG9pc29uIGl2eScsCgkncmVkIGhvb2QnLAoJJ3JlZCByb2JpbicsCgkncm9iaW4nLAoJJ3NjYXJlY3JvdycsCgknc2hhemFtJywKCSdzdGFyZ2lybCcsCgknc3VwZXJtYW4nLAoJJ3ZpeGVuJywKCSd3b25kZXIgd29tYW4nLApdCgojIEhlcmUsIHdlIHNldCB0aGUgcHJpb3JpdHkgRlJPTSBMT1dFU1QgVE8gSElHSEVTVAojIFRoZSBhbGdvcml0aG0gd2lsbCBmYXZvciBtYXhpbWl6aW5nIHRoZSByb29tcyBhdCB0aGUgYm90dG9tCiMgZG8gbm90IGFkZCBvciByZW1vdmUgcm9vbXMsIHNpbXBseSByZWFycmFuZ2UgdGhlbQpwcmlvcml0eSA9IFsKICAgICd0cmFpbmluZycsIAogICAgJ3RyYWluaW5nJywgCiAgICAnYXJtb3J5JywgCiAgICAnc3RlZWwnLCAKICAgICdzdGVlbCcsIAogICAgJ2NoaXBzJywgCiAgICAnY2hpcHMnLCAKICAgICdzdGVlbCcsIAogICAgJ3N0ZWVsJywgCiAgICAnY2hpcHMnLCAKICAgICdjaGlwcycsIAogICAgJ3Jlc2VhcmNoJywgCiAgICAnZHJvbmUnLCAKICAgICdkcm9uZScsIAogICAgJ2Jpb19sYWInLCAKICAgICdiaW9fbGFiJywgCiAgICAnYmlvX2xhYicsIAogICAgJ2Jpb19sYWInLCAKICAgICdwb3dlcicsCiAgICAncG93ZXInLAogICAgXQogCiMjIyBUaGlzIGlzICJ0aGUgZGF0YWJhc2UiLiAgSXQncyBub3QgcmVhbGx5IGEgZGF0YWJhc2UsIGJ1dCBpdCdzIHdoZXJlCiMgd2UgdHJhY2sgY2hhbXBpb24gZGF0YSBmb3IgZWFjaCByb29tCiMgT25jZSBJIGdldCB0aGUgY29tcGxldGUgZGF0YWJhc2UgaW5mb3JtYXRpb24sIHRoaXMgd2lsbCBnbyBpbiB0aGUgCiMgImRvbid0IHRvdWNoISIgc2VjdGlvbgp0cmFpbmluZyA9IHsKICAgICdhcXVhbWFuJzogMzAsCiAgICAnYXRvbSc6IDE1LAogICAgJ2JhbmUnOiAzMCwKICAgICdiYXRnaXJsJzogMzAsCiAgICAnYmF0bWFuJzogMzAsCiAgICAnYmxhY2sgYWRhbSc6IDEwLAogICAgJ2JsYWNrIGNhbmFyeSc6IDMwLAogICAgJ2NhcHRhaW4gY29sZCc6IDEwLAogICAgJ2NhdHdvbWFuJzogMTUsCiAgICAnY3lib3JnJzogMjAsCiAgICAnZGVhZHNob3QnOiAyMCwKICAgICdkZWF0aHN0cm9rZSc6MzAsCiAgICAnZHIgZmF0ZSc6IDIwLAogICAgJ2ZsYXNoJzogMzAsCiAgICAnZ3JlZW4gYXJyb3cnOiAxNSwKICAgICdncmVlbiBsYW50ZXJuJzogMjAsCiAgICAnaGFybGV5IHF1aW5uJzogMzAsCiAgICAnam9rZXInOiAzMCwKICAgICdraWxsZXIgY3JvYyc6IDE1LAogICAgJ2x1dGhvcic6IDMwLAogICAgJ21lcmEnOiAxMCwKICAgICdwZW5ndWluJzogMjAsCiAgICAncG9pc29uIGl2eSc6IDIwLAogICAgJ3JhdmVuJzogMjAsCiAgICAncmVkIGhvb2QnOiAxNSwKICAgICdyZWQgcm9iaW4nOiAzMCwKICAgICdyb2Jpbic6IDMwLCAKICAgICdzY2FyZWNyb3cnOiAzMCwKICAgICdzaGF6YW0nOiAyMCwKICAgICdzdGFyZ2lybCc6IDIwLAogICAgJ3N1cGVybWFuJzogMzAsCiAgICAndHdvZmFjZSc6IDIwLAogICAgJ3ZpeGVuJzogMTUsCiAgICAnd29uZGVyIHdvbWFuJzogMTUsCn0KCmJpb19sYWIgPSB7CiAgICAnYXF1YW1hbic6IDMwLAogICAgJ2F0b20nOiAxNSwKICAgICdiYW5lJzogMzAsCiAgICAnYmF0Z2lybCc6IDIwLAogICAgJ2JhdG1hbic6IDIwLAogICAgJ2JsYWNrIGFkYW0nOiAxMCwKICAgICdibGFjayBjYW5hcnknOiAzMCwKICAgICdjYXB0YWluIGNvbGQnOiAxMCwKICAgICdjYXR3b21hbic6IDEwLAogICAgJ2N5Ym9yZyc6IDIwLAogICAgJ2RlYWRzaG90JzogMjAsCiAgICAnZGVhdGhzdHJva2UnOjMwLAogICAgJ2RyIGZhdGUnOiAyMCwKICAgICdmbGFzaCc6IDMwLAogICAgJ2dyZWVuIGFycm93JzogMTAsCiAgICAnZ3JlZW4gbGFudGVybic6IDMwLAogICAgJ2hhcmxleSBxdWlubic6IDIwLAogICAgJ2pva2VyJzogMzAsCiAgICAna2lsbGVyIGNyb2MnOiAxNSwKICAgICdsdXRob3InOiAyMCwKICAgICdtZXJhJzogMTUsCiAgICAncGVuZ3Vpbic6IDIwLAogICAgJ3BvaXNvbiBpdnknOiAzMCwKICAgICdyYXZlbic6IDMwLAogICAgJ3JlZCBob29kJzogMTUsCiAgICAncmVkIHJvYmluJzogMjAsCiAgICAncm9iaW4nOiAzMCwgCiAgICAnc2NhcmVjcm93JzogMjAsCiAgICAnc2hhemFtJzogMzAsCiAgICAnc3RhcmdpcmwnOiAyMCwKICAgICdzdXBlcm1hbic6IDMwLAogICAgJ3R3b2ZhY2UnOiAzMCwKICAgICd2aXhlbic6IDE1LAogICAgJ3dvbmRlciB3b21hbic6IDEwLAp9CgpzdGVlbCA9IHsKICAgICdhcXVhbWFuJzogMjAsCiAgICAnYXRvbSc6IDEwLAogICAgJ2JhbmUnOiAyMCwKICAgICdiYXRnaXJsJzogMjAsCiAgICAnYmF0bWFuJzogMzAsCiAgICAnYmxhY2sgYWRhbSc6IDE1LAogICAgJ2JsYWNrIGNhbmFyeSc6IDIwLAogICAgJ2NhcHRhaW4gY29sZCc6IDEwLAogICAgJ2NhdHdvbWFuJzogMTAsCiAgICAnY3lib3JnJzogMzAsCiAgICAnZGVhZHNob3QnOiAzMCwKICAgICdkZWF0aHN0cm9rZSc6MjAsCiAgICAnZHIgZmF0ZSc6IDMwLAogICAgJ2ZsYXNoJzogMzAsCiAgICAnZ3JlZW4gYXJyb3cnOiAxMCwKICAgICdncmVlbiBsYW50ZXJuJzogMzAsCiAgICAnaGFybGV5IHF1aW5uJzogMjAsCiAgICAnam9rZXInOiAyMCwKICAgICdraWxsZXIgY3JvYyc6IDEwLAogICAgJ2x1dGhvcic6IDIwLAogICAgJ21lcmEnOiAxMCwKICAgICdwZW5ndWluJzogMjAsCiAgICAncG9pc29uIGl2eSc6IDIwLAogICAgJ3JhdmVuJzogMzAsCiAgICAncmVkIGhvb2QnOiAxMCwKICAgICdyZWQgcm9iaW4nOiAyMCwKICAgICdyb2Jpbic6IDIwLCAKICAgICdzY2FyZWNyb3cnOiAyMCwKICAgICdzaGF6YW0nOiAzMCwKICAgICdzdGFyZ2lybCc6IDMwLAogICAgJ3N1cGVybWFuJzogMzAsCiAgICAndHdvZmFjZSc6IDIwLAogICAgJ3ZpeGVuJzogMTAsCiAgICAnd29uZGVyIHdvbWFuJzogMTUsCn0KCmNoaXBzID0gewogICAgJ2FxdWFtYW4nOiAyMCwKICAgICdhdG9tJzogMTAsCiAgICAnYmFuZSc6IDIwLAogICAgJ2JhdGdpcmwnOiAzMCwKICAgICdiYXRtYW4nOiAzMCwKICAgICdibGFjayBhZGFtJzogMTAsCiAgICAnYmxhY2sgY2FuYXJ5JzogMjAsCiAgICAnY2FwdGFpbiBjb2xkJzogMTAsCiAgICAnY2F0d29tYW4nOiAxNSwKICAgICdjeWJvcmcnOiAzMCwKICAgICdkZWFkc2hvdCc6IDIwLAogICAgJ2RlYXRoc3Ryb2tlJzozMCwKICAgICdkciBmYXRlJzogMjAsCiAgICAnZmxhc2gnOiAyMCwKICAgICdncmVlbiBhcnJvdyc6IDE1LAogICAgJ2dyZWVuIGxhbnRlcm4nOiAyMCwKICAgICdoYXJsZXkgcXVpbm4nOiAzMCwKICAgICdqb2tlcic6IDIwLAogICAgJ2tpbGxlciBjcm9jJzogMTAsCiAgICAnbHV0aG9yJzogMzAsCiAgICAnbWVyYSc6IDEwLAogICAgJ3Blbmd1aW4nOiAzMCwKICAgICdwb2lzb24gaXZ5JzogMjAsCiAgICAncmF2ZW4nOiAyMCwKICAgICdyZWQgaG9vZCc6IDEwLAogICAgJ3JlZCByb2Jpbic6IDMwLAogICAgJ3JvYmluJzogMzAsIAogICAgJ3NjYXJlY3Jvdyc6IDMwLAogICAgJ3NoYXphbSc6IDIwLAogICAgJ3N0YXJnaXJsJzogMjAsCiAgICAnc3VwZXJtYW4nOiAyMCwKICAgICd0d29mYWNlJzogMjAsCiAgICAndml4ZW4nOiAxMCwKICAgICd3b25kZXIgd29tYW4nOiAxMCwKfQoKYXJtb3J5ID0gewogICAgJ2FxdWFtYW4nOiAyMCwKICAgICdhdG9tJzogMTAsCiAgICAnYmFuZSc6IDMwLAogICAgJ2JhdGdpcmwnOiAyMCwKICAgICdiYXRtYW4nOiAzMCwKICAgICdibGFjayBhZGFtJzogMTUsCiAgICAnYmxhY2sgY2FuYXJ5JzogMjAsCiAgICAnY2FwdGFpbiBjb2xkJzogMTAsCiAgICAnY2F0d29tYW4nOiAxNSwKICAgICdjeWJvcmcnOiAzMCwKICAgICdkZWFkc2hvdCc6IDMwLAogICAgJ2RlYXRoc3Ryb2tlJzozMCwKICAgICdkciBmYXRlJzogMzAsCiAgICAnZmxhc2gnOiAzMCwKICAgICdncmVlbiBhcnJvdyc6IDE1LAogICAgJ2dyZWVuIGxhbnRlcm4nOiAyMCwKICAgICdoYXJsZXkgcXVpbm4nOiAyMCwKICAgICdqb2tlcic6IDMwLAogICAgJ2tpbGxlciBjcm9jJzogMTUsCiAgICAnbHV0aG9yJzogMzAsCiAgICAnbWVyYSc6IDEwLAogICAgJ3Blbmd1aW4nOiAyMCwKICAgICdwb2lzb24gaXZ5JzogMjAsCiAgICAncmF2ZW4nOiAyMCwKICAgICdyZWQgaG9vZCc6IDEwLAogICAgJ3JlZCByb2Jpbic6IDIwLAogICAgJ3JvYmluJzogMjAsIAogICAgJ3NjYXJlY3Jvdyc6IDIwLAogICAgJ3NoYXphbSc6IDIwLAogICAgJ3N0YXJnaXJsJzogMzAsCiAgICAnc3VwZXJtYW4nOiAyMCwKICAgICd0d29mYWNlJzogMzAsCiAgICAndml4ZW4nOiAxMCwKICAgICd3b25kZXIgd29tYW4nOiAxMCwKfQoKZHJvbmUgPSB7CiAgICAnYXF1YW1hbic6IDIwLAogICAgJ2F0b20nOiAxNSwKICAgICdiYW5lJzogMjAsCiAgICAnYmF0Z2lybCc6IDMwLAogICAgJ2JhdG1hbic6IDMwLAogICAgJ2JsYWNrIGFkYW0nOiAxMCwKICAgICdibGFjayBjYW5hcnknOiAyMCwKICAgICdjYXR3b21hbic6IDEwLAogICAgJ2NhcHRhaW4gY29sZCc6IDEwLAogICAgJ2N5Ym9yZyc6IDMwLAogICAgJ2RlYWRzaG90JzogMjAsCiAgICAnZGVhdGhzdHJva2UnOjMwLAogICAgJ2RyIGZhdGUnOiAzMCwKICAgICdmbGFzaCc6IDIwLAogICAgJ2dyZWVuIGFycm93JzogMTUsCiAgICAnZ3JlZW4gbGFudGVybic6IDMwLAogICAgJ2hhcmxleSBxdWlubic6IDMwLAogICAgJ2pva2VyJzogMjAsCiAgICAna2lsbGVyIGNyb2MnOiAxMCwKICAgICdsdXRob3InOiAzMCwKICAgICdtZXJhJzogMTAsCiAgICAncGVuZ3Vpbic6IDIwLAogICAgJ3BvaXNvbiBpdnknOiAyMCwKICAgICdyYXZlbic6IDIwLAogICAgJ3JlZCBob29kJzogMTAsCiAgICAncmVkIHJvYmluJzogMzAsCiAgICAncm9iaW4nOiAzMCwgCiAgICAnc2NhcmVjcm93JzogMzAsCiAgICAnc2hhemFtJzogMzAsCiAgICAnc3RhcmdpcmwnOiAyMCwKICAgICdzdXBlcm1hbic6IDIwLAogICAgJ3R3b2ZhY2UnOiAyMCwKICAgICd2aXhlbic6IDE1LAogICAgJ3dvbmRlciB3b21hbic6IDEwLAp9CgpyZXNlYXJjaCA9IHsKICAgICdhcXVhbWFuJzogMzAsCiAgICAnYXRvbSc6IDE1LAogICAgJ2JhbmUnOiAzMCwKICAgICdiYXRnaXJsJzogMzAsCiAgICAnYmF0bWFuJzogMzAsCiAgICAnYmxhY2sgYWRhbSc6IDEwLAogICAgJ2JsYWNrIGNhbmFyeSc6IDIwLAogICAgJ2NhdHdvbWFuJzogMTAsCiAgICAnY2FwdGFpbiBjb2xkJzogMTAsCiAgICAnY3lib3JnJzogMjAsCiAgICAnZGVhZHNob3QnOiAyMCwKICAgICdkZWF0aHN0cm9rZSc6MjAsCiAgICAnZHIgZmF0ZSc6IDIwLAogICAgJ2ZsYXNoJzogMzAsCiAgICAnZ3JlZW4gYXJyb3cnOiAxMCwKICAgICdncmVlbiBsYW50ZXJuJzogMjAsCiAgICAnaGFybGV5IHF1aW5uJzogMzAsCiAgICAnam9rZXInOiAzMCwKICAgICdraWxsZXIgY3JvYyc6IDEwLAogICAgJ2x1dGhvcic6IDMwLAogICAgJ21lcmEnOiAxNSwKICAgICdwZW5ndWluJzogMjAsCiAgICAncG9pc29uIGl2eSc6IDMwLAogICAgJ3JhdmVuJzogMjAsCiAgICAncmVkIGhvb2QnOiAxNSwKICAgICdyZWQgcm9iaW4nOiAzMCwKICAgICdyb2Jpbic6IDMwLCAKICAgICdzY2FyZWNyb3cnOiAzMCwKICAgICdzaGF6YW0nOiAyMCwKICAgICdzdGFyZ2lybCc6IDIwLAogICAgJ3N1cGVybWFuJzogMjAsCiAgICAndHdvZmFjZSc6IDMwLAogICAgJ3ZpeGVuJzogMTAsCiAgICAnd29uZGVyIHdvbWFuJzogMTAsCn0KCnBvd2VyID0gewogICAgJ2FxdWFtYW4nOiAzMCwKICAgICdhdG9tJzogMTAsCiAgICAnYmFuZSc6IDMwLAogICAgJ2JhdGdpcmwnOiAyMCwKICAgICdiYXRtYW4nOiAzMCwKICAgICdibGFjayBhZGFtJzogMTUsCiAgICAnYmxhY2sgY2FuYXJ5JzogMzAsCiAgICAnY2FwdGFpbiBjb2xkJzogMTAsCiAgICAnY2F0d29tYW4nOiAxMCwKICAgICdjeWJvcmcnOiAzMCwKICAgICdkZWFkc2hvdCc6IDIwLAogICAgJ2RlYXRoc3Ryb2tlJzoyMCwKICAgICdkciBmYXRlJzogMjAsCiAgICAnZmxhc2gnOiAzMCwKICAgICdncmVlbiBhcnJvdyc6IDEwLAogICAgJ2dyZWVuIGxhbnRlcm4nOiAzMCwKICAgICdoYXJsZXkgcXVpbm4nOiAyMCwKICAgICdqb2tlcic6IDIwLAogICAgJ2tpbGxlciBjcm9jJzogMTAsCiAgICAnbHV0aG9yJzogMjAsCiAgICAnbWVyYSc6IDEwLAogICAgJ3Blbmd1aW4nOiAyMCwKICAgICdwb2lzb24gaXZ5JzogMjAsCiAgICAncmF2ZW4nOiAzMCwKICAgICdyZWQgaG9vZCc6IDEwLAogICAgJ3JlZCByb2Jpbic6IDIwLAogICAgJ3JvYmluJzogMzAsIAogICAgJ3NjYXJlY3Jvdyc6IDIwLAogICAgJ3NoYXphbSc6IDMwLAogICAgJ3N0YXJnaXJsJzogMzAsCiAgICAnc3VwZXJtYW4nOiAzMCwKICAgICd0d29mYWNlJzogMjAsCiAgICAndml4ZW4nOiAxMCwKICAgICd3b25kZXIgd29tYW4nOiAxMCwKfQoKIyMjIERPIE5PVCBNT0RJRlkgQkVZT05EIFRISVMgUE9JTlQKIyMjICh1bmxlc3MgeW91IGxpa2UgY29kaW5nIGxvZ2ljKQpyb29tcyA9IHsKICAgICd0cmFpbmluZyc6IHRyYWluaW5nLAogICAgJ2Jpb19sYWInOiBiaW9fbGFiLAogICAgJ3N0ZWVsJzogc3RlZWwsCiAgICAnY2hpcHMnOiBjaGlwcywKICAgICdhcm1vcnknOiBhcm1vcnksCiAgICAnZHJvbmUnOiBkcm9uZSwKICAgICdyZXNlYXJjaCc6IHJlc2VhcmNoLAogICAgJ3Bvd2VyJzogcG93ZXIsCn0KCmRlZiBjYWxjdWxhdGVfdmFsdWUoY2hhbXBpb24pOgogICAgdmFsdWUgPSBzdW0oW3Jvb21zW3Jvb21dW2NoYW1waW9uXSBmb3Igcm9vbSBpbiBwcmlvcml0eV0pCiAgICByZXR1cm4gdmFsdWUKCndoaWxlIHByaW9yaXR5OgogICAgcm9vbV9uYW1lID0gcHJpb3JpdHkucG9wKCkKICAgIHNjb3JlID0gLTEKICAgIGNoYW1wID0gIiIKICAgIHZhbHVlID0gOTk5OTk5CgogICAgZm9yIGNoYW1waW9uIGluIGNoYW1waW9uczoKICAgICAgICBjaGFtcF92YWx1ZSA9IGNhbGN1bGF0ZV92YWx1ZShjaGFtcGlvbikKICAgICAgICBpZiByb29tc1tyb29tX25hbWVdW2NoYW1waW9uXSA+IHNjb3JlOgogICAgICAgICAgICBzY29yZSA9IHJvb21zW3Jvb21fbmFtZV1bY2hhbXBpb25dCiAgICAgICAgICAgIGNoYW1wID0gY2hhbXBpb24KICAgICAgICAgICAgdmFsdWUgPSBjaGFtcF92YWx1ZQogICAgICAgIGlmIHJvb21zW3Jvb21fbmFtZV1bY2hhbXBpb25dID09IHNjb3JlIGFuZCBjaGFtcF92YWx1ZSA8IHZhbHVlOgogICAgICAgICAgICBzY29yZSA9IHJvb21zW3Jvb21fbmFtZV1bY2hhbXBpb25dCiAgICAgICAgICAgIGNoYW1wID0gY2hhbXBpb24KICAgICAgICAgICAgdmFsdWUgPSBjaGFtcF92YWx1ZQogICAgICAgICAgICAKICAgIGNoYW1waW9ucy5yZW1vdmUoY2hhbXApCiAgICBwcmludChmIntjaGFtcH0gYXNzaWduZWQgdG8ge3Jvb21fbmFtZX0gd2l0aCB7c2NvcmV9IHBvaW50cyIpCgoK