diff --git a/ingest.py b/ingest.py new file mode 100644 index 0000000..be2a3f3 --- /dev/null +++ b/ingest.py @@ -0,0 +1 @@ +IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiIKYXNrLWFubmllL2luZ2VzdC5weQoKR2l2ZW4gYSBWaW1lbyBVUkwgYW5kIGEgY2hhcHRlciBsaXN0IChKU09OIGZpbGUpLCBwcm9kdWNlcyBzdHJ1Y3R1cmVkCnBlci1jaGFwdGVyIGtub3dsZWRnZSBjaHVua3Mgc3VpdGFibGUgZm9yIGluZ2VzdGlvbiBpbnRvIGtub3dsZWRnZS1tY3AuCgpVc2FnZToKICBweXRob24zIGluZ2VzdC5weSAtLXVybCA8dmltZW9fdXJsPiAtLWNoYXB0ZXJzIGNoYXB0ZXJzLmpzb24gLS1vdXQgb3V0LyBbLS1mcmFtZXNdCgpPdXRwdXQ6CiAgb3V0Lzx2aWRlb19pZD4vY2h1bmtzLmpzb24gICDigJQgYXJyYXkgb2YgY2hhcHRlciBjaHVua3MKICBvdXQvPHZpZGVvX2lkPi9mcmFtZXMvICAgICAgIOKAlCBleHRyYWN0ZWQgZnJhbWUgaW1hZ2VzIChpZiAtLWZyYW1lcykKICBvdXQvPHZpZGVvX2lkPi90cmFuc2NyaXB0Lmpzb24g4oCUIGZ1bGwgV2hpc3BlciBvdXRwdXQgKGNhY2hlZCkKCkRlcGVuZGVuY2llcyAobXVzdCBiZSBvbiBQQVRIKToKICB5dC1kbHAsIGZmbXBlZywgd2hpc3BlcgoiIiIKCmltcG9ydCBhcmdwYXJzZQppbXBvcnQganNvbgppbXBvcnQgb3MKaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IHN5cwppbXBvcnQgdGVtcGZpbGUKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgoKIyBDaGFwdGVycyB3aGVyZSBmcmFtZSBleHRyYWN0aW9uIGFkZHMgcmVhbCB2YWx1ZSAoZGVtby1oZWF2eSBzZWN0aW9ucykuCiMgSWRlbnRpZmllZCBieSBtYXRjaGluZyBjaGFwdGVyIHRpdGxlIHN1YnN0cmluZ3MgKGNhc2UtaW5zZW5zaXRpdmUpLgpERU1PX0NIQVBURVJfS0VZV09SRFMgPSBbCiAgICAidHJhbnNjb2RpbmciLAogICAgInMzIiwKICAgICJmaWxlIHRyYWNraW5nIiwKICAgICJ3b3JrYmVuY2giLAogICAgIm5ldyBjYXBhYmlsaXR5IiwKICAgICJwcmV2aWV3IiwKICAgICJkZW1vIiwKICAgICJ1aSIsCiAgICAic2V0dXAiLApdCgoKZGVmIHJ1bihjbWQsICoqa3dhcmdzKToKICAgIHByaW50KGYiICAkIHsnICcuam9pbihjbWQpfSIsIGZsdXNoPVRydWUpCiAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihjbWQsIGNoZWNrPVRydWUsICoqa3dhcmdzKQogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBzZWNvbmRzX3RvX2hobW1zcyhzKToKICAgIHMgPSBpbnQocykKICAgIGgsIHJlbSA9IGRpdm1vZChzLCAzNjAwKQogICAgbSwgc2VjID0gZGl2bW9kKHJlbSwgNjApCiAgICByZXR1cm4gZiJ7aDowMmR9OnttOjAyZH06e3NlYzowMmR9IgoKCmRlZiBwYXJzZV90aW1lc3RhbXAodHNfc3RyKToKICAgICIiIlBhcnNlICdNOlNTJyBvciAnSDpNTTpTUycgdG8gc2Vjb25kcy4iIiIKICAgIHBhcnRzID0gdHNfc3RyLnN0cmlwKCkuc3BsaXQoIjoiKQogICAgcGFydHMgPSBbaW50KHApIGZvciBwIGluIHBhcnRzXQogICAgaWYgbGVuKHBhcnRzKSA9PSAyOgogICAgICAgIHJldHVybiBwYXJ0c1swXSAqIDYwICsgcGFydHNbMV0KICAgIGVsaWYgbGVuKHBhcnRzKSA9PSAzOgogICAgICAgIHJldHVybiBwYXJ0c1swXSAqIDM2MDAgKyBwYXJ0c1sxXSAqIDYwICsgcGFydHNbMl0KICAgIHJhaXNlIFZhbHVlRXJyb3IoZiJDYW5ub3QgcGFyc2UgdGltZXN0YW1wOiB7dHNfc3RyfSIpCgoKZGVmIGRvd25sb2FkX2F1ZGlvKHVybCwgb3V0X2Rpcik6CiAgICBhdWRpb19wYXRoID0gb3V0X2RpciAvICJhdWRpby4lKGV4dClzIgogICAgcnVuKFsKICAgICAgICAieXQtZGxwIiwKICAgICAgICAiLS1leHRyYWN0LWF1ZGlvIiwKICAgICAgICAiLS1hdWRpby1mb3JtYXQiLCAibXAzIiwKICAgICAgICAiLS1hdWRpby1xdWFsaXR5IiwgIjMiLCAgIyB+MTI4a2JwcywgZ29vZCBlbm91Z2ggZm9yIHNwZWVjaAogICAgICAgICItbyIsIHN0cihhdWRpb19wYXRoKSwKICAgICAgICB1cmwsCiAgICBdKQogICAgIyBGaW5kIHRoZSBkb3dubG9hZGVkIGZpbGUKICAgIG1hdGNoZXMgPSBsaXN0KG91dF9kaXIuZ2xvYigiYXVkaW8uKiIpKQogICAgaWYgbm90IG1hdGNoZXM6CiAgICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoIkF1ZGlvIGRvd25sb2FkIGZhaWxlZCDigJQgbm8gYXVkaW8uKiBmaWxlIGZvdW5kIikKICAgIHJldHVybiBtYXRjaGVzWzBdCgoKZGVmIHRyYW5zY3JpYmUoYXVkaW9fcGF0aCwgb3V0X2RpciwgbW9kZWw9Im1lZGl1bSIpOgogICAgdHJhbnNjcmlwdF9wYXRoID0gb3V0X2RpciAvICJ0cmFuc2NyaXB0Lmpzb24iCiAgICBpZiB0cmFuc2NyaXB0X3BhdGguZXhpc3RzKCk6CiAgICAgICAgcHJpbnQoZiIgIFtjYWNoZV0gVXNpbmcgZXhpc3RpbmcgdHJhbnNjcmlwdCBhdCB7dHJhbnNjcmlwdF9wYXRofSIpCiAgICAgICAgd2l0aCBvcGVuKHRyYW5zY3JpcHRfcGF0aCkgYXMgZjoKICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZChmKQoKICAgIHJ1bihbCiAgICAgICAgIndoaXNwZXIiLAogICAgICAgIHN0cihhdWRpb19wYXRoKSwKICAgICAgICAiLS1tb2RlbCIsIG1vZGVsLAogICAgICAgICItLW91dHB1dF9mb3JtYXQiLCAianNvbiIsCiAgICAgICAgIi0tb3V0cHV0X2RpciIsIHN0cihvdXRfZGlyKSwKICAgICAgICAiLS1sYW5ndWFnZSIsICJlbiIsCiAgICAgICAgIi0td29yZF90aW1lc3RhbXBzIiwgIlRydWUiLAogICAgXSkKCiAgICAjIFdoaXNwZXIgbmFtZXMgb3V0cHV0IGFmdGVyIHRoZSBpbnB1dCBmaWxlbmFtZQogICAgd2hpc3Blcl9vdXQgPSBvdXRfZGlyIC8gKGF1ZGlvX3BhdGguc3RlbSArICIuanNvbiIpCiAgICBpZiBub3Qgd2hpc3Blcl9vdXQuZXhpc3RzKCk6CiAgICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoZiJFeHBlY3RlZCBXaGlzcGVyIG91dHB1dCBhdCB7d2hpc3Blcl9vdXR9IikKICAgIHdoaXNwZXJfb3V0LnJlbmFtZSh0cmFuc2NyaXB0X3BhdGgpCgogICAgd2l0aCBvcGVuKHRyYW5zY3JpcHRfcGF0aCkgYXMgZjoKICAgICAgICByZXR1cm4ganNvbi5sb2FkKGYpCgoKZGVmIGV4dHJhY3RfZnJhbWUodmlkZW9fcGF0aCwgdGltZXN0YW1wX3NlYywgb3V0X3BhdGgpOgogICAgcnVuKFsKICAgICAgICAiZmZtcGVnIiwgIi15IiwKICAgICAgICAiLXNzIiwgc3RyKHRpbWVzdGFtcF9zZWMpLAogICAgICAgICItaSIsIHN0cih2aWRlb19wYXRoKSwKICAgICAgICAiLWZyYW1lczp2IiwgIjEiLAogICAgICAgICItcTp2IiwgIjIiLAogICAgICAgIHN0cihvdXRfcGF0aCksCiAgICBdLCBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMLCBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMKQoKCmRlZiBpc19kZW1vX2NoYXB0ZXIodGl0bGUpOgogICAgdCA9IHRpdGxlLmxvd2VyKCkKICAgIHJldHVybiBhbnkoa3cgaW4gdCBmb3Iga3cgaW4gREVNT19DSEFQVEVSX0tFWVdPUkRTKQoKCmRlZiBzZWdtZW50c19pbl93aW5kb3coc2VnbWVudHMsIHN0YXJ0X3NlYywgZW5kX3NlYyk6CiAgICAiIiJFeHRyYWN0IHRyYW5zY3JpcHQgdGV4dCBmb3IgYSB0aW1lIHdpbmRvdyBmcm9tIFdoaXNwZXIgc2VnbWVudHMuIiIiCiAgICB0ZXh0cyA9IFtdCiAgICBmb3Igc2VnIGluIHNlZ21lbnRzOgogICAgICAgIHNlZ19zdGFydCA9IHNlZy5nZXQoInN0YXJ0IiwgMCkKICAgICAgICBzZWdfZW5kID0gc2VnLmdldCgiZW5kIiwgc2VnX3N0YXJ0KQogICAgICAgICMgSW5jbHVkZSBzZWdtZW50IGlmIGl0IG92ZXJsYXBzIHdpdGggdGhlIHdpbmRvdwogICAgICAgIGlmIHNlZ19lbmQgPj0gc3RhcnRfc2VjIGFuZCBzZWdfc3RhcnQgPD0gZW5kX3NlYzoKICAgICAgICAgICAgdGV4dHMuYXBwZW5kKHNlZ1sidGV4dCJdLnN0cmlwKCkpCiAgICByZXR1cm4gIiAiLmpvaW4odGV4dHMpCgoKZGVmIGRlc2NyaWJlX2ZyYW1lKGltYWdlX3BhdGgpOgogICAgIiIiCiAgICBQbGFjZWhvbGRlcjogcmV0dXJucyBhIG5vdGUgdGhhdCBmcmFtZSBkZXNjcmlwdGlvbiBuZWVkcyBDbGF1ZGUgdmlzaW9uLgogICAgSW4gYSBsYXRlciBwYXNzLCByZXBsYWNlIHRoaXMgd2l0aCBhbiBhY3R1YWwgQVBJIGNhbGwgb3Igb3V0cHV0IHRoZQogICAgaW1hZ2UgcGF0aCBmb3IgZXh0ZXJuYWwgcHJvY2Vzc2luZy4KICAgICIiIgogICAgcmV0dXJuIGYiW2ZyYW1lOiB7aW1hZ2VfcGF0aC5uYW1lfSDigJQgdmlzaW9uIGRlc2NyaXB0aW9uIHBlbmRpbmddIgoKCmRlZiBtYWluKCk6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iSW5nZXN0IEFzayBBbm5pZSBWaW1lbyBzZXNzaW9uIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tdXJsIiwgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0iVmltZW8gVVJMIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tY2hhcHRlcnMiLCByZXF1aXJlZD1UcnVlLCBoZWxwPSJQYXRoIHRvIGNoYXB0ZXJzIEpTT04gZmlsZSIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLW91dCIsIGRlZmF1bHQ9Im91dCIsIGhlbHA9Ik91dHB1dCBkaXJlY3RvcnkiKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1mcmFtZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJFeHRyYWN0IGZyYW1lcyBmb3IgZGVtbyBjaGFwdGVycyIpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXdoaXNwZXItbW9kZWwiLCBkZWZhdWx0PSJtZWRpdW0iLCBoZWxwPSJXaGlzcGVyIG1vZGVsIHNpemUiKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS12aWRlby1pZCIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0iT3ZlcnJpZGUgdmlkZW8gSUQgKGV4dHJhY3RlZCBmcm9tIFVSTCBpZiBvbWl0dGVkKSIpCiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKICAgICMgRGVyaXZlIHZpZGVvIElEIGZyb20gVVJMCiAgICB2aWRlb19pZCA9IGFyZ3MudmlkZW9faWQgb3IgYXJncy51cmwucnN0cmlwKCIvIikuc3BsaXQoIi8iKVstMV0uc3BsaXQoIj8iKVswXQogICAgcHJpbnQoZiJcbj09PSBBc2sgQW5uaWUgSW5nZXN0OiB7dmlkZW9faWR9ID09PVxuIikKCiAgICBvdXRfZGlyID0gUGF0aChhcmdzLm91dCkgLyB2aWRlb19pZAogICAgZnJhbWVzX2RpciA9IG91dF9kaXIgLyAiZnJhbWVzIgogICAgb3V0X2Rpci5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpCiAgICBpZiBhcmdzLmZyYW1lczoKICAgICAgICBmcmFtZXNfZGlyLm1rZGlyKGV4aXN0X29rPVRydWUpCgogICAgIyBMb2FkIGNoYXB0ZXJzCiAgICB3aXRoIG9wZW4oYXJncy5jaGFwdGVycykgYXMgZjoKICAgICAgICBjaGFwdGVycyA9IGpzb24ubG9hZChmKQogICAgcHJpbnQoZiJMb2FkZWQge2xlbihjaGFwdGVycyl9IGNoYXB0ZXJzXG4iKQoKICAgICMgU3RlcCAxOiBEb3dubG9hZCBhdWRpbwogICAgcHJpbnQoIj09PSBTdGVwIDE6IERvd25sb2FkIGF1ZGlvID09PSIpCiAgICBhdWRpb19wYXRoID0gTm9uZQogICAgZm9yIGYgaW4gb3V0X2Rpci5nbG9iKCJhdWRpby4qIik6CiAgICAgICAgcHJpbnQoZiIgIFtjYWNoZV0gRm91bmQgZXhpc3RpbmcgYXVkaW86IHtmfSIpCiAgICAgICAgYXVkaW9fcGF0aCA9IGYKICAgICAgICBicmVhawogICAgaWYgYXVkaW9fcGF0aCBpcyBOb25lOgogICAgICAgIGF1ZGlvX3BhdGggPSBkb3dubG9hZF9hdWRpbyhhcmdzLnVybCwgb3V0X2RpcikKICAgIHByaW50KGYiICBBdWRpbzoge2F1ZGlvX3BhdGh9XG4iKQoKICAgICMgU3RlcCAxYjogRG93bmxvYWQgdmlkZW8gKG9ubHkgaWYgLS1mcmFtZXMgcmVxdWVzdGVkKQogICAgdmlkZW9fcGF0aCA9IE5vbmUKICAgIGlmIGFyZ3MuZnJhbWVzOgogICAgICAgIHByaW50KCI9PT0gU3RlcCAxYjogRG93bmxvYWQgdmlkZW8gKGZvciBmcmFtZSBleHRyYWN0aW9uKSA9PT0iKQogICAgICAgIGV4aXN0aW5nID0gbGlzdChvdXRfZGlyLmdsb2IoInZpZGVvLioiKSkKICAgICAgICBpZiBleGlzdGluZzoKICAgICAgICAgICAgdmlkZW9fcGF0aCA9IGV4aXN0aW5nWzBdCiAgICAgICAgICAgIHByaW50KGYiICBbY2FjaGVdIEZvdW5kIGV4aXN0aW5nIHZpZGVvOiB7dmlkZW9fcGF0aH0iKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHZpZF9vdXQgPSBvdXRfZGlyIC8gInZpZGVvLiUoZXh0KXMiCiAgICAgICAgICAgIHJ1bihbInl0LWRscCIsICItZiIsICJiZXN0dmlkZW9baGVpZ2h0PD03MjBdIiwgIi1vIiwgc3RyKHZpZF9vdXQpLCBhcmdzLnVybF0pCiAgICAgICAgICAgIG1hdGNoZXMgPSBsaXN0KG91dF9kaXIuZ2xvYigidmlkZW8uKiIpKQogICAgICAgICAgICBpZiBub3QgbWF0Y2hlczoKICAgICAgICAgICAgICAgIHByaW50KCIgIFdBUk5JTkc6IFZpZGVvIGRvd25sb2FkIGZhaWxlZCwgc2tpcHBpbmcgZnJhbWUgZXh0cmFjdGlvbiIpCiAgICAgICAgICAgICAgICBhcmdzLmZyYW1lcyA9IEZhbHNlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB2aWRlb19wYXRoID0gbWF0Y2hlc1swXQogICAgICAgIHByaW50KCkKCiAgICAjIFN0ZXAgMjogVHJhbnNjcmliZQogICAgcHJpbnQoIj09PSBTdGVwIDI6IFRyYW5zY3JpYmUgPT09IikKICAgIHRyYW5zY3JpcHQgPSB0cmFuc2NyaWJlKGF1ZGlvX3BhdGgsIG91dF9kaXIsIG1vZGVsPWFyZ3Mud2hpc3Blcl9tb2RlbCkKICAgIHNlZ21lbnRzID0gdHJhbnNjcmlwdC5nZXQoInNlZ21lbnRzIiwgW10pCiAgICBwcmludChmIiAgR290IHtsZW4oc2VnbWVudHMpfSB0cmFuc2NyaXB0IHNlZ21lbnRzXG4iKQoKICAgICMgU3RlcCAzOiBCdWlsZCBjaHVua3MKICAgIHByaW50KCI9PT0gU3RlcCAzOiBCdWlsZCBjaHVua3MgPT09IikKICAgIGNodW5rcyA9IFtdCiAgICBmb3IgaSwgY2hhcHRlciBpbiBlbnVtZXJhdGUoY2hhcHRlcnMpOgogICAgICAgIHN0YXJ0X3NlYyA9IHBhcnNlX3RpbWVzdGFtcChjaGFwdGVyWyJ0aW1lc3RhbXAiXSkKICAgICAgICAjIEVuZCA9IG5leHQgY2hhcHRlciBzdGFydCwgb3IgKzEwbWluIGZvciBsYXN0CiAgICAgICAgaWYgaSArIDEgPCBsZW4oY2hhcHRlcnMpOgogICAgICAgICAgICBlbmRfc2VjID0gcGFyc2VfdGltZXN0YW1wKGNoYXB0ZXJzW2kgKyAxXVsidGltZXN0YW1wIl0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZW5kX3NlYyA9IHN0YXJ0X3NlYyArIDYwMAoKICAgICAgICB0ZXh0ID0gc2VnbWVudHNfaW5fd2luZG93KHNlZ21lbnRzLCBzdGFydF9zZWMsIGVuZF9zZWMpCiAgICAgICAgZGVtbyA9IGlzX2RlbW9fY2hhcHRlcihjaGFwdGVyWyJ0aXRsZSJdKQoKICAgICAgICBmcmFtZV9kZXNjID0gTm9uZQogICAgICAgIGlmIGFyZ3MuZnJhbWVzIGFuZCBkZW1vIGFuZCB2aWRlb19wYXRoOgogICAgICAgICAgICBmcmFtZV9maWxlID0gZnJhbWVzX2RpciAvIGYiY2hhcHRlcl97aTowMmR9LmpwZyIKICAgICAgICAgICAgcHJpbnQoZiIgIEV4dHJhY3RpbmcgZnJhbWUgZm9yOiB7Y2hhcHRlclsndGl0bGUnXX0iKQogICAgICAgICAgICBleHRyYWN0X2ZyYW1lKHZpZGVvX3BhdGgsIHN0YXJ0X3NlYyArIDUsIGZyYW1lX2ZpbGUpCiAgICAgICAgICAgIGZyYW1lX2Rlc2MgPSBkZXNjcmliZV9mcmFtZShmcmFtZV9maWxlKQoKICAgICAgICBjaHVuayA9IHsKICAgICAgICAgICAgInZpZGVvX2lkIjogdmlkZW9faWQsCiAgICAgICAgICAgICJ2aWRlb191cmwiOiBhcmdzLnVybCwKICAgICAgICAgICAgImNoYXB0ZXJfaW5kZXgiOiBpLAogICAgICAgICAgICAidGltZXN0YW1wIjogY2hhcHRlclsidGltZXN0YW1wIl0sCiAgICAgICAgICAgICJ0aW1lc3RhbXBfc2VjIjogc3RhcnRfc2VjLAogICAgICAgICAgICAidGl0bGUiOiBjaGFwdGVyWyJ0aXRsZSJdLAogICAgICAgICAgICAic3VtbWFyeSI6IGNoYXB0ZXIuZ2V0KCJzdW1tYXJ5IiwgIiIpLAogICAgICAgICAgICAidHJhbnNjcmlwdCI6IHRleHQsCiAgICAgICAgICAgICJpc19kZW1vIjogZGVtbywKICAgICAgICAgICAgImZyYW1lX2Rlc2NyaXB0aW9uIjogZnJhbWVfZGVzYywKICAgICAgICAgICAgInNvdXJjZSI6ICJhc2stYW5uaWUiLAogICAgICAgICAgICAic2VyaWVzIjogIlNUIEJlc3QgUHJhY3RpY2VzIFEmQSIsCiAgICAgICAgfQogICAgICAgIGNodW5rcy5hcHBlbmQoY2h1bmspCiAgICAgICAgcHJpbnQoZiIgIFt7aTowMmR9XSB7Y2hhcHRlclsndGltZXN0YW1wJ119IOKAlCB7Y2hhcHRlclsndGl0bGUnXVs6NjBdfSAoeydkZW1vJyBpZiBkZW1vIGVsc2UgJ3FhJ30pIikKCiAgICAjIFN0ZXAgNDogV3JpdGUgb3V0cHV0CiAgICBjaHVua3NfcGF0aCA9IG91dF9kaXIgLyAiY2h1bmtzLmpzb24iCiAgICB3aXRoIG9wZW4oY2h1bmtzX3BhdGgsICJ3IikgYXMgZjoKICAgICAgICBqc29uLmR1bXAoY2h1bmtzLCBmLCBpbmRlbnQ9MikKICAgIHByaW50KGYiXG49PT0gRG9uZToge2xlbihjaHVua3MpfSBjaHVua3Mg4oaSIHtjaHVua3NfcGF0aH0gPT09XG4iKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkK \ No newline at end of file