{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "hash": "BhyJsf009pY5ai7k4LOdx6gIzbDlkWdj05p6/oDEPBY=",
    "height": "596803",
    "index": 0,
    "tx_result": {
      "ResponseBase": {
        "Error": null,
        "Data": null,
        "Events": [
          {
            "@type": "/tm.StorageDepositEvent",
            "bytes_delta": "28514",
            "fee_delta": "2851400ugnot",
            "pkg_path": "gno.land/r/g1ut6uspuh73e02yauxpmyt8g3wwddaq8utagvm3/fee_split"
          }
        ],
        "Log": "msg:0,success:true,log:,events:[]",
        "Info": ""
      },
      "GasWanted": "45906250",
      "GasUsed": "30604157"
    },
    "tx": "CvqWAQoML3ZtLm1fYWRkcGtnEuiWAQooZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMxKrlgEKCWZlZV9zcGxpdBI9Z25vLmxhbmQvci9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL2ZlZV9zcGxpdBr3lAEKDWZlZV9zcGxpdC5nbm8S5JQBcGFja2FnZSBmZWVfc3BsaXQKCmltcG9ydCAoCgkiY2hhaW4iCgkiY2hhaW4vYmFua2VyIgoJImNoYWluL3J1bnRpbWUvdW5zYWZlIgoJInNvcnQiCgkic3RyY29udiIKCSJzdHJpbmdzIgopCgovLyBTcGxpdCBob2xkcyBhIGZlZS1zcGxpdHRpbmcgY29uZmlndXJhdGlvbiB3aXRoIHBlcmNlbnRhZ2UtYmFzZWQgc2hhcmVzCi8vIGRlbm9taW5hdGVkIGluIGJhc2lzIHBvaW50cyAoMSBicCA9IDAuMDElLCAxMDAwMCBicCA9IDEwMCUpLgp0eXBlIFNwbGl0IHN0cnVjdCB7CglPd25lciAgICAgICAgICBhZGRyZXNzCglSZWNpcGllbnRzICAgICBbXWFkZHJlc3MKCVNoYXJlcyAgICAgICAgIFtdaW50NjQgLy8gYmFzaXMgcG9pbnRzLCBtdXN0IHN1bSB0byAxMDAwMAoJQmFsYW5jZXMgICAgICAgbWFwW2FkZHJlc3NdaW50NjQKCVRvdGFsRGVwb3NpdGVkIGludDY0CglUb3RhbENsYWltZWQgICBpbnQ2NAoJRnJvemVuICAgICAgICAgYm9vbAoJQXJjaGl2ZWQgICAgICAgYm9vbAp9Cgpjb25zdCAoCglNYXhSZWNpcGllbnRzICAgICA9IDIwCglNYXhTcGxpdHNQZXJPd25lciA9IDEwCgkvLyBRdW90YXMgYXJlIFBFUi1PV05FUiBvbmx5IChyb3VuZC00IGF1ZGl0KTogYSBnbG9iYWwgY2FwIGlzIGEgc2hhcmVkCgkvLyByZXNvdXJjZSA1MCBzeWJpbCBhY2NvdW50cyBjb3VsZCBmaWxsIGZvcmV2ZXIg4oCUIGFuZCBzZWVkaW5nIGdyaWVmCgkvLyBzcGxpdHMgd2l0aCBiYWxhbmNlcyB0byBrZXlsZXNzIHJlY2lwaWVudHMgbWFkZSB0aGUgZmlsbAoJLy8gdW5yZWNvdmVyYWJsZSBldmVuIGJ5IHRoZSBzeWJpbHMuIFBlci1vd25lciBxdW90YXMgbWVhbiBhbiBhdHRhY2tlcgoJLy8gY29uc3VtZXMgb25seSB0aGVpciBvd24gYnVkZ2V0OyBzdGF0ZSBncm93dGggaXMgZ2FzLXByaWNlZC4KCS8vIFJlbmRlciBpcyBib3VuZGVkIHNlcGFyYXRlbHkgKE1heFJlbmRlclNwbGl0cykuCglNYXhSZW5kZXJTcGxpdHMgPSAxMDAKCS8vIE1heEZlZUJwcyBpcyBhbiBJTU1VVEFCTEUgY2VpbGluZyBvbiB0aGUgcHJvdG9jb2wgZmVlICgxJSkuIFRoZQoJLy8gYWRtaW4gY2FuIHNldCBhbnkgZmVlIGZyb20gMCB1cCB0byB0aGlzIGNhcCwgbmV2ZXIgYWJvdmUgaXQg4oCUIHRoZQoJLy8gY2FwLCBub3QgdGhlIGN1cnJlbnQgc2V0dGluZywgaXMgd2hhdCB1c2VycyBtdXN0IHRydXN0LgoJTWF4RmVlQnBzID0gaW50NjQoMTAwKQoKCS8vIFByZS1wYXJzZSBpbnB1dCBib3VuZHMgKHJvdW5kLTQgYXVkaXQpOiBjYXBzIHdlcmUgZW5mb3JjZWQgb25seQoJLy8gQUZURVIgZnVsbCBwYXJzaW5nLCBzbyBhIDFNQiByZWNpcGllbnQgbGlzdCBidXJuZWQgfjExQiBnYXMgYmVmb3JlCgkvLyByZWZ1c2FsLiAyMCBiZWNoMzIgYWRkcmVzc2VzICsgc2VwYXJhdG9ycyBmaXQgd2VsbCB3aXRoaW4gdGhlc2UuCglNYXhSZWNpcGllbnRMaXN0TGVuID0gMTAyNAoJTWF4U2hhcmVMaXN0TGVuICAgICA9IDEyOAoKCS8vIERlbm9taW5hdGlvbiBoYW5kbGVkIGJ5IHRoaXMgcmVhbG0uIERlcG9zaXRzIG11c3QgYmUgZXhhY3RseSBvbmUKCS8vIGNvaW4gb2YgdGhpcyBkZW5vbTsgY2xhaW1zIHBheSBvdXQgaW4gaXQuCglEZW5vbSA9ICJ1Z25vdCIKCgkvLyBMYXJnZXN0IHNpbmdsZSBkZXBvc2l0IGZvciB3aGljaCBzaGFyZSBtYXRoIChhbW91bnQgKiBzaGFyZSwKCS8vIHNoYXJlIDw9IDEwMDAwKSBjYW5ub3Qgb3ZlcmZsb3cgaW50NjQuCglNYXhEZXBvc2l0QW1vdW50ID0gaW50NjQoOTIyMzM3MjAzNjg1NDc3NTgwNykgLyAxMDAwMAopCgp2YXIgKAoJc3BsaXRzICAgICAgbWFwW3N0cmluZ10qU3BsaXQKCXNwbGl0SURzICAgIFtdc3RyaW5nIC8vIGluc2VydGlvbi1vcmRlcmVkIGZvciBkZXRlcm1pbmlzdGljIFJlbmRlcgoJb3duZXJTcGxpdHMgbWFwW2FkZHJlc3NdaW50CgluZXh0SUQgICAgICBpbnQKCgkvLyBQcm90b2NvbCBmZWU6IHRha2VuIGZyb20gZWFjaCBkZXBvc2l0IEJFRk9SRSBkaXN0cmlidXRpb24sIGF0IHRoZQoJLy8gcmF0ZSBpbiBmb3JjZSBhdCBkZXBvc2l0IHRpbWUgKG5ldmVyIHJldHJvYWN0aXZlIOKAlCBjcmVkaXRlZAoJLy8gYmFsYW5jZXMgYXJlIG5ldmVyIHRvdWNoZWQpLiBEZWZhdWx0cyB0byB6ZXJvLgoJZmVlQnBzICAgICAgICAgIGludDY0CglmZWVBZG1pbiAgICAgICAgYWRkcmVzcyAvLyBkZXBsb3llcjsgY2FuIHNldCB0aGUgZmVlIGFuZCBjbGFpbSBhY2NydWVkIGZlZXMKCXBlbmRpbmdGZWVBZG1pbiBhZGRyZXNzIC8vIHR3by1zdGVwIGhhbmRvdmVyLCBtdXN0IEFjY2VwdEZlZUFkbWluCglmZWVzQWNjcnVlZCAgICAgaW50NjQKCWZlZXNDbGFpbWVkICAgICBpbnQ2NAopCgpmdW5jIGluaXQoKSB7CglzcGxpdHMgPSBtYWtlKG1hcFtzdHJpbmddKlNwbGl0KQoJc3BsaXRJRHMgPSBbXXN0cmluZ3t9Cglvd25lclNwbGl0cyA9IG1ha2UobWFwW2FkZHJlc3NdaW50KQoJbmV4dElEID0gMQoJLy8gVGhlIHBhY2thZ2UgZGVwbG95ZXIgYmVjb21lcyB0aGUgZmVlIGFkbWluOiBvbi1jaGFpbiwgQWRkUGFja2FnZQoJLy8gcnVucyBpbml0IHdpdGggdGhlIG1lc3NhZ2UgY3JlYXRvciBhcyBvcmlnaW4gY2FsbGVyICh2ZXJpZmllZAoJLy8gYWdhaW5zdCB0aGUgVk0ga2VlcGVyIOKAlCBhIE1zZ0FkZFBhY2thZ2UncyBjcmVhdG9yIGlzIG5ldmVyIHplcm8pLgoJLy8gSWYgT3JpZ2luQ2FsbGVyKCkgd2VyZSBldmVyIGVtcHR5IChlLmcuIHRoZSBnbm8gdGVzdCBWTSwgd2hpY2ggaGFzCgkvLyBubyBNc2dBZGRQYWNrYWdlKSwgdGhlIGZlZSBmZWF0dXJlIGRlZ3JhZGVzIFNBRkVMWSB0byBkaXNhYmxlZDoKCS8vIFNldEZlZSByZXF1aXJlcyBjYWxsZXIoKT09ZmVlQWRtaW4gYW5kIGNhbGxlcigpIGlzIG5ldmVyIGVtcHR5LCBzbwoJLy8gZmVlQnBzIGNhbiBuZXZlciBsZWF2ZSAwIGFuZCBubyBmZWUgZXZlciBhY2NydWVzIOKAlCB6ZXJvIGZ1bmRzIGF0CgkvLyByaXNrLiBEbyBub3QgImhhcmRlbiIgdGhpcyBpbnRvIGEgcGFuaWM7IHRoZSBzb2Z0LWRpc2FibGUgaXMgdGhlCgkvLyBzYWZlIGJlaGF2aW9yLiBGZWUgc3RhcnRzIGF0IFpFUk8gcmVnYXJkbGVzcy4KCWZlZUFkbWluID0gdW5zYWZlLk9yaWdpbkNhbGxlcigpCglmZWVCcHMgPSAwCn0KCmZ1bmMgY2FsbGVyKCkgYWRkcmVzcyB7CglyZXR1cm4gdW5zYWZlLlByZXZpb3VzUmVhbG0oKS5BZGRyZXNzKCkKfQoKLy8gLS0tLS0tLS0tLSBoZWxwZXJzIC0tLS0tLS0tLS0KCmZ1bmMgZm9ybWF0UGN0KGJwIGludDY0KSBzdHJpbmcgewoJd2hvbGUgOj0gc3RyY29udi5Gb3JtYXRJbnQoYnAvMTAwLCAxMCkKCWZyYWMgOj0gc3RyY29udi5Gb3JtYXRJbnQoYnAlMTAwLCAxMCkKCWlmIGxlbihmcmFjKSA9PSAxIHsKCQlmcmFjID0gIjAiICsgZnJhYwoJfQoJcmV0dXJuIHdob2xlICsgIi4iICsgZnJhYyArICIlIgp9CgpmdW5jIG11c3RHZXRTcGxpdChpZCBzdHJpbmcpICpTcGxpdCB7CglzLCBvayA6PSBzcGxpdHNbaWRdCglpZiAhb2sgewoJCXBhbmljKCJzcGxpdCBub3QgZm91bmQ6ICIgKyBpZCkKCX0KCXJldHVybiBzCn0KCmZ1bmMgbXVzdEdldEFjdGl2ZShpZCBzdHJpbmcpICpTcGxpdCB7CglzIDo9IG11c3RHZXRTcGxpdChpZCkKCWlmIHMuQXJjaGl2ZWQgewoJCXBhbmljKCJzcGxpdCBpcyBhcmNoaXZlZDogIiArIGlkKQoJfQoJcmV0dXJuIHMKfQoKZnVuYyBib29sU3RyKHYgYm9vbCkgc3RyaW5nIHsKCWlmIHYgewoJCXJldHVybiAieWVzIgoJfQoJcmV0dXJuICJubyIKfQoKZnVuYyBwYXJzZUJhc2lzUG9pbnRzKHJhdyBzdHJpbmcpIFtdaW50NjQgewoJaWYgbGVuKHJhdykgPiBNYXhTaGFyZUxpc3RMZW4gewoJCXBhbmljKCJzaGFyZSBsaXN0IHRvbyBsb25nIikKCX0KCXBhcnRzIDo9IHN0cmluZ3MuU3BsaXQocmF3LCAiLCIpCglvdXQgOj0gbWFrZShbXWludDY0LCBsZW4ocGFydHMpKQoJdmFyIHRvdGFsIGludDY0Cglmb3IgaSwgcyA6PSByYW5nZSBwYXJ0cyB7CgkJdiwgZXJyIDo9IHN0cmNvbnYuQXRvaShzdHJpbmdzLlRyaW1TcGFjZShzKSkKCQlpZiBlcnIgIT0gbmlsIHx8IHYgPD0gMCB8fCB2ID4gMTAwMDAgewoJCQkvLyB0aGUgdXBwZXIgYm91bmQgaXMgYSBzZWN1cml0eSBpbnZhcmlhbnQsIG5vdCBoeWdpZW5lOiB1bmJvdW5kZWQKCQkJLy8gc2hhcmVzIGxldCB0aGUgaW50NjQgdG90YWwgd3JhcCBiYWNrIHRvIGV4YWN0bHkgMTAwMDAsIG1pbnRpbmcKCQkJLy8gdW5iYWNrZWQgYmFsYW5jZXMgcGFpZCBmcm9tIHRoZSBzaGFyZWQgcG9vbCAocmUtYXVkaXQgUDEpCgkJCXBhbmljKCJpbnZhbGlkIHNoYXJlIHZhbHVlOiAiICsgc3RyaW5ncy5UcmltU3BhY2UocykpCgkJfQoJCW91dFtpXSA9IGludDY0KHYpCgkJdG90YWwgKz0gaW50NjQodikKCX0KCWlmIHRvdGFsICE9IDEwMDAwIHsKCQlwYW5pYygic2hhcmVzIG11c3Qgc3VtIHRvIDEwMDAwIGJhc2lzIHBvaW50cywgZ290ICIgKyBzdHJjb252LkZvcm1hdEludCh0b3RhbCwgMTApKQoJfQoJcmV0dXJuIG91dAp9CgpmdW5jIHBhcnNlQWRkcmVzc2VzKHJhdyBzdHJpbmcpIFtdYWRkcmVzcyB7CglpZiBsZW4ocmF3KSA+IE1heFJlY2lwaWVudExpc3RMZW4gewoJCXBhbmljKCJyZWNpcGllbnQgbGlzdCB0b28gbG9uZyIpCgl9CglwYXJ0cyA6PSBzdHJpbmdzLlNwbGl0KHJhdywgIiwiKQoJb3V0IDo9IG1ha2UoW11hZGRyZXNzLCBsZW4ocGFydHMpKQoJZm9yIGksIHIgOj0gcmFuZ2UgcGFydHMgewoJCWEgOj0gYWRkcmVzcyhzdHJpbmdzLlRyaW1TcGFjZShyKSkKCQlpZiBhID09ICIiIHsKCQkJcGFuaWMoImVtcHR5IHJlY2lwaWVudCBhZGRyZXNzIGF0IHBvc2l0aW9uICIgKyBzdHJjb252Lkl0b2EoaSkpCgkJfQoJCWlmICFhLklzVmFsaWQoKSB8fCBzdHJpbmcoYSkgIT0gc3RyaW5ncy5Ub0xvd2VyKHN0cmluZyhhKSkgewoJCQkvLyBsb3dlcmNhc2UgaXMgcmVxdWlyZWQsIG5vdCBjb3NtZXRpYyAocm91bmQtMyBhdWRpdCk6IGJlY2gzMgoJCQkvLyBhY2NlcHRzIEFMTC1VUFBFUkNBU0UgYXMgdmFsaWQsIGJ1dCBjYWxsZXIoKSBhbHdheXMgcmV0dXJucwoJCQkvLyB0aGUgbG93ZXJjYXNlIGNhbm9uaWNhbCBmb3JtIOKAlCBhbiB1cHBlcmNhc2Uta2V5ZWQgYmFsYW5jZQoJCQkvLyBjb3VsZCBuZXZlciBiZSBjbGFpbWVkIGFuZCB3b3VsZCBibG9jayBBcmNoaXZlIGZvcmV2ZXIsIGFuZAoJCQkvLyB1cHBlci9sb3dlciBkdXBsaWNhdGVzIHdvdWxkIGJ5cGFzcyB0aGUgZHVwbGljYXRlIGNoZWNrCgkJCXBhbmljKCJpbnZhbGlkIHJlY2lwaWVudCBhZGRyZXNzOiAiICsgc3RyaW5nKGEpKQoJCX0KCQkvLyBOT1RFOiBJc1ZhbGlkIGlzIGEgZm9ybWF0IGNoZWNrIG9ubHkg4oCUIGEgd2VsbC1mb3JtZWQgYWRkcmVzcyB3aXRoCgkJLy8gbm8ga2V5IGhvbGRlciAoZS5nLiBhbm90aGVyIHBhY2thZ2UncyBkZXJpdmVkIGFkZHJlc3MpIHdpbGwKCQkvLyBhY2N1bXVsYXRlIGEgYmFsYW5jZSBub2JvZHkgY2FuIGNsYWltLCB3aGljaCBhbHNvIGJsb2NrcyBBcmNoaXZlCgkJLy8gZm9yZXZlci4gT3duZXJzIG11c3QgbGlzdCBhZGRyZXNzZXMgdGhleSBrbm93IGNhbiBjYWxsIENsYWltLgoJCW91dFtpXSA9IGEKCX0KCXJldHVybiBvdXQKfQoKZnVuYyB2YWxpZGF0ZVJlY2lwaWVudHMocmVjaXBpZW50cyBbXWFkZHJlc3MsIHNoYXJlcyBbXWludDY0KSB7CglpZiBsZW4ocmVjaXBpZW50cykgIT0gbGVuKHNoYXJlcykgewoJCXBhbmljKCJyZWNpcGllbnRzIGFuZCBzaGFyZXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCIpCgl9CglpZiBsZW4ocmVjaXBpZW50cykgPT0gMCB7CgkJcGFuaWMoImF0IGxlYXN0IG9uZSByZWNpcGllbnQgaXMgcmVxdWlyZWQiKQoJfQoJaWYgbGVuKHJlY2lwaWVudHMpID4gTWF4UmVjaXBpZW50cyB7CgkJcGFuaWMoInRvbyBtYW55IHJlY2lwaWVudHMgKG1heCAiICsgc3RyY29udi5JdG9hKE1heFJlY2lwaWVudHMpICsgIikiKQoJfQoJc2VlbiA6PSBtYWtlKG1hcFthZGRyZXNzXWJvb2wpCglmb3IgXywgciA6PSByYW5nZSByZWNpcGllbnRzIHsKCQlpZiBzZWVuW3JdIHsKCQkJcGFuaWMoImR1cGxpY2F0ZSByZWNpcGllbnQ6ICIgKyBzdHJpbmcocikpCgkJfQoJCXNlZW5bcl0gPSB0cnVlCgl9Cn0KCi8vIHNvcnRlZEJhbGFuY2VBZGRycyByZXR1cm5zIHRoZSBiYWxhbmNlLW1hcCBrZXlzIGluIGRldGVybWluaXN0aWMgb3JkZXIsCi8vIHNvIHBhbmljcyBhbmQgcmVuZGVycyBuZXZlciBkZXBlbmQgb24gbWFwIGl0ZXJhdGlvbiBvcmRlci4KZnVuYyBzb3J0ZWRCYWxhbmNlQWRkcnMocyAqU3BsaXQpIFtdc3RyaW5nIHsKCWFkZHJzIDo9IG1ha2UoW11zdHJpbmcsIDAsIGxlbihzLkJhbGFuY2VzKSkKCWZvciBhIDo9IHJhbmdlIHMuQmFsYW5jZXMgewoJCWFkZHJzID0gYXBwZW5kKGFkZHJzLCBzdHJpbmcoYSkpCgl9Cglzb3J0LlN0cmluZ3MoYWRkcnMpCglyZXR1cm4gYWRkcnMKfQoKLy8gcmVqZWN0U3RyYXlTZW5kIGFib3J0cyB3aGVuIGNvaW5zIGFyZSBhdHRhY2hlZCB0byBhIGNhbGwgdGhhdCBkb2VzIG5vdAovLyBhY2NlcHQgdGhlbSDigJQgdGhlIGFib3J0IHJldmVydHMgdGhlIHRyYW5zZmVyIGJhY2sgdG8gdGhlIHNlbmRlciBpbnN0ZWFkCi8vIG9mIHN0cmFuZGluZyB0aGUgY29pbnMgb24gdGhlIHJlYWxtIGFkZHJlc3MgKHJlLWF1ZGl0IFAzKS4gRGlyZWN0IGJhbmsKLy8gdHJhbnNmZXJzIHRvIHRoZSByZWFsbSBhZGRyZXNzIHJlbWFpbiB1bnJlY292ZXJhYmxlIGJ5IGRlc2lnbi4KZnVuYyByZWplY3RTdHJheVNlbmQoKSB7CglpZiB1bnNhZmUuUHJldmlvdXNSZWFsbSgpLklzVXNlckNhbGwoKSAmJiBsZW4odW5zYWZlLk9yaWdpblNlbmQoKSkgPiAwIHsKCQlwYW5pYygidGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhY2NlcHQgY29pbnM7IGF0dGFjaCBjb2lucyB0byBEZXBvc2l0IG9ubHkiKQoJfQp9CgovLyAtLS0tLS0tLS0tIHdyaXRlIG9wZXJhdGlvbnMgLS0tLS0tLS0tLQoKLy8gQ3JlYXRlU3BsaXQgcmVnaXN0ZXJzIGEgbmV3IHNwbGl0LiBUaGUgY2FsbGVyIGJlY29tZXMgdGhlIG93bmVyLgovLyBSZWNpcGllbnRzIGFuZCBzaGFyZXMgYXJlIGNvbW1hLXNlcGFyYXRlZDsgc2hhcmVzIGFyZSBpbiBiYXNpcyBwb2ludHMKLy8gc3VtbWluZyB0byAxMDAwMC4KZnVuYyBDcmVhdGVTcGxpdChfIHJlYWxtLCByZWNpcGllbnRMaXN0LCBzaGFyZUxpc3Qgc3RyaW5nKSBzdHJpbmcgewoJcmVqZWN0U3RyYXlTZW5kKCkKCW93bmVyIDo9IGNhbGxlcigpCglpZiBvd25lclNwbGl0c1tvd25lcl0gPj0gTWF4U3BsaXRzUGVyT3duZXIgewoJCXBhbmljKCJwZXItb3duZXIgc3BsaXQgbGltaXQgcmVhY2hlZCIpCgl9CgoJcmVjaXBpZW50cyA6PSBwYXJzZUFkZHJlc3NlcyhyZWNpcGllbnRMaXN0KQoJc2hhcmVzIDo9IHBhcnNlQmFzaXNQb2ludHMoc2hhcmVMaXN0KQoJdmFsaWRhdGVSZWNpcGllbnRzKHJlY2lwaWVudHMsIHNoYXJlcykKCglpZCA6PSAic3BsaXRfIiArIHN0cmNvbnYuSXRvYShuZXh0SUQpCgluZXh0SUQrKwoKCWJhbGFuY2VzIDo9IG1ha2UobWFwW2FkZHJlc3NdaW50NjQpCglmb3IgXywgciA6PSByYW5nZSByZWNpcGllbnRzIHsKCQliYWxhbmNlc1tyXSA9IDAKCX0KCglzcGxpdHNbaWRdID0gJlNwbGl0ewoJCU93bmVyOiAgICAgIG93bmVyLAoJCVJlY2lwaWVudHM6IHJlY2lwaWVudHMsCgkJU2hhcmVzOiAgICAgc2hhcmVzLAoJCUJhbGFuY2VzOiAgIGJhbGFuY2VzLAoJfQoJc3BsaXRJRHMgPSBhcHBlbmQoc3BsaXRJRHMsIGlkKQoJb3duZXJTcGxpdHNbb3duZXJdKysKCXJldHVybiBpZAp9CgovLyBEZXBvc2l0IGRpc3RyaWJ1dGVzIHRoZSBjb2lucyBzZW50IHdpdGggdGhlIGNhbGwgYWNyb3NzIHJlY2lwaWVudHMKLy8gcHJvcG9ydGlvbmFsbHkuCi8vCi8vIERFUExPWU1FTlQgUFJFQ09ORElUSU9OIChyb3VuZC00IGF1ZGl0KTogb24gYSBuZXR3b3JrIHdpdGgKLy8gcmVzdHJpY3RlZC90b2tlbi1sb2NrZWQgdWdub3QgdHJhbnNmZXJzLCB0aGUgYmFuayBnYXRlIGlzCi8vIFNFTkRFUi13aGl0ZWxpc3QtYmFzZWQg4oCUIGEgd2hpdGVsaXN0ZWQgdXNlcidzIERlcG9zaXQgc3VjY2VlZHMgYnV0Ci8vIENsYWltIHNlbmRzIEZST00gdGhpcyByZWFsbSdzIChub24td2hpdGVsaXN0ZWQpIGFkZHJlc3MgYW5kIHJldmVydHMuCi8vIEZ1bmRzIHdvdWxkIGZsb3cgaW4gYW5kIG5vdCBvdXQgdW50aWwgdGhlIHJlc3RyaWN0aW9uIGxpZnRzLiBEZXBsb3kKLy8gb25seSB0byBuZXR3b3JrcyB3aXRoIHVucmVzdHJpY3RlZCB1Z25vdCwgb3IgaGF2ZSBnb3Zlcm5hbmNlCi8vIHdoaXRlbGlzdCB0aGlzIHJlYWxtJ3MgYWRkcmVzcyBmaXJzdC4KLy8KLy8gTElNSVRBVElPTiAocm91bmQtMyBhdWRpdCwgZG9jdW1lbnRlZCk6IG9ubHkgZGlyZWN0IHVzZXIgY2FsbHMgY2FuCi8vIGRlcG9zaXQuIEEgREFPL3JlYWxtIHRyZWFzdXJ5IGhhcyBOTyBkZXBvc2l0IHBhdGgg4oCUIGEgcmVhbG0tcm91dGVkCi8vIGNhbGwgaXMgcmVmdXNlZCwgYW5kIGEgYmFyZSBiYW5rZXIgc2VuZCB0byB0aGlzIHJlYWxtJ3MgYWRkcmVzcyBpcwovLyBhbiB1bnJlY292ZXJhYmxlIGRvbmF0aW9uLiBSZWFsbSB0cmVhc3VyaWVzIG11c3Qgcm91dGUgZGVwb3NpdHMKLy8gdGhyb3VnaCBhIHVzZXIgYWNjb3VudC4gVGhlIGRlcG9zaXQgaXMgdGhlIEFDVFVBTCBhdHRhY2hlZCBzZW5kIOKAlCBleGFjdGx5IG9uZQovLyBjb2luIG9mIERlbm9tIOKAlCBzbyBiYWxhbmNlcyBhcmUgYWx3YXlzIGJhY2tlZCBieSBmdW5kcyB0aGlzIHJlYWxtCi8vIGhvbGRzLiBEaXJlY3QgdXNlciBjYWxscyBvbmx5OiBhIGRlcG9zaXQgcm91dGVkIHRocm91Z2ggYW4KLy8gaW50ZXJtZWRpYXJ5IHJlYWxtIHdvdWxkIGRlbGl2ZXIgaXRzIGNvaW5zIHRvIHRoYXQgcmVhbG0sIG5vdCBoZXJlLAovLyBhbmQgbXVzdCBiZSByZWplY3RlZC4gUm91bmRpbmcgZHVzdCBnb2VzIHRvIHRoZSBoaWdoZXN0LXNoYXJlCi8vIHJlY2lwaWVudCAoZGV0ZXJtaW5pc3RpYywgbm90IG9yZGVyLWRlcGVuZGVudCkuCmZ1bmMgRGVwb3NpdChfIHJlYWxtLCBzcGxpdElEIHN0cmluZykgewoJcyA6PSBtdXN0R2V0QWN0aXZlKHNwbGl0SUQpCglpZiBzLkZyb3plbiB7CgkJcGFuaWMoInNwbGl0IGlzIGZyb3plbiIpCgl9CgoJLy8gSXNVc2VyQ2FsbCwgbm90IElzVXNlcjogTXNnUnVuIHBhc3NlcyBJc1VzZXIgYnV0IGl0cyBhdHRhY2hlZCBzZW5kCgkvLyBnb2VzIGNhbGxlci0+Y2FsbGVyIOKAlCB0aGUgY29pbnMgbmV2ZXIgcmVhY2ggdGhpcyByZWFsbSwgYW5kIE9yaWdpblNlbmQKCS8vIGNvdWxkIGJlIHJlLXJlYWQgYWNyb3NzIGsgY2FsbHMgaW4gb25lIHJ1biBzY3JpcHQgKHJlLWF1ZGl0IFAxKS4gQQoJLy8gZGlyZWN0IE1zZ0NhbGwncyBzZW5kIHByb3ZhYmx5IGxhbmRzIG9uIHRoZSBjYWxsZWQgcGFja2FnZSBhZGRyZXNzLgoJaWYgIXVuc2FmZS5QcmV2aW91c1JlYWxtKCkuSXNVc2VyQ2FsbCgpIHsKCQlwYW5pYygiZGVwb3NpdHMgbXVzdCBiZSBzZW50IGJ5IGRpcmVjdCBjYWxsLCBub3QgdGhyb3VnaCBhbm90aGVyIHJlYWxtIG9yIGEgcnVuIHNjcmlwdCIpCgl9CglzZW50IDo9IHVuc2FmZS5PcmlnaW5TZW5kKCkKCWlmIGxlbihzZW50KSAhPSAxIHx8IHNlbnRbMF0uRGVub20gIT0gRGVub20gewoJCXBhbmljKCJkZXBvc2l0IG11c3Qgc2VuZCBleGFjdGx5IG9uZSBjb2luIG9mICIgKyBEZW5vbSkKCX0KCWFtb3VudCA6PSBzZW50WzBdLkFtb3VudAoJaWYgYW1vdW50IDw9IDAgewoJCXBhbmljKCJhbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIpCgl9CglpZiBhbW91bnQgPiBNYXhEZXBvc2l0QW1vdW50IHsKCQlwYW5pYygiZGVwb3NpdCBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIGFtb3VudCIpCgl9CglpZiBzLlRvdGFsRGVwb3NpdGVkID4gaW50NjQoOTIyMzM3MjAzNjg1NDc3NTgwNyktYW1vdW50IHsKCQlwYW5pYygiZGVwb3NpdCB3b3VsZCBvdmVyZmxvdyBzcGxpdCBhY2NvdW50aW5nIikKCX0KCgkvLyBQcm90b2NvbCBmZWUgY29tZXMgb2ZmIHRoZSB0b3A7IGV2ZXJ5dGhpbmcgYmVsb3cgZGlzdHJpYnV0ZXMgdGhlCgkvLyBORVQgYW1vdW50LCBzbyB0aGUgcGVyLXNwbGl0IGNvbnNlcnZhdGlvbiBpbnZhcmlhbnQKCS8vIChzdW0oYmFsYW5jZXMpK1RvdGFsQ2xhaW1lZCA9PSBUb3RhbERlcG9zaXRlZCkgaXMgdW50b3VjaGVkLgoJLy8gYW1vdW50IDw9IE1heERlcG9zaXRBbW91bnQgYW5kIGZlZUJwcyA8PSAxMDAsIHNvIHRoZSBwcm9kdWN0IGlzCgkvLyBmYXIgYmVsb3cgb3ZlcmZsb3cuCglmZWUgOj0gKGFtb3VudCAqIGZlZUJwcykgLyAxMDAwMAoJaWYgZmVlID4gMCB7CgkJaWYgZmVlc0FjY3J1ZWQgPiBpbnQ2NCg5MjIzMzcyMDM2ODU0Nzc1ODA3KS1mZWUgewoJCQlwYW5pYygiZmVlIGFjY3J1YWwgd291bGQgb3ZlcmZsb3ciKQoJCX0KCQlmZWVzQWNjcnVlZCArPSBmZWUKCQlhbW91bnQgLT0gZmVlCgl9CglpZiBhbW91bnQgPT0gMCB7CgkJcGFuaWMoImRlcG9zaXQgdG9vIHNtYWxsOiBmdWxseSBjb25zdW1lZCBieSB0aGUgcHJvdG9jb2wgZmVlIikKCX0KCglzLlRvdGFsRGVwb3NpdGVkICs9IGFtb3VudAoKCS8vIEZpbmQgdGhlIGhpZ2hlc3Qtc2hhcmUgcmVjaXBpZW50IGZvciBkdXN0IGFzc2lnbm1lbnQKCWR1c3RJZHggOj0gMAoJZm9yIGkgOj0gMTsgaSA8IGxlbihzLlNoYXJlcyk7IGkrKyB7CgkJaWYgcy5TaGFyZXNbaV0gPiBzLlNoYXJlc1tkdXN0SWR4XSB7CgkJCWR1c3RJZHggPSBpCgkJfQoJfQoKCXZhciBkaXN0cmlidXRlZCBpbnQ2NAoJZm9yIGksIHIgOj0gcmFuZ2Ugcy5SZWNpcGllbnRzIHsKCQlzaGFyZSA6PSAoYW1vdW50ICogcy5TaGFyZXNbaV0pIC8gMTAwMDAKCQlzLkJhbGFuY2VzW3JdICs9IHNoYXJlCgkJZGlzdHJpYnV0ZWQgKz0gc2hhcmUKCX0KCgkvLyBBc3NpZ24gZHVzdCB0byBoaWdoZXN0LXNoYXJlIHJlY2lwaWVudAoJZHVzdCA6PSBhbW91bnQgLSBkaXN0cmlidXRlZAoJaWYgZHVzdCA+IDAgewoJCXMuQmFsYW5jZXNbcy5SZWNpcGllbnRzW2R1c3RJZHhdXSArPSBkdXN0Cgl9Cn0KCi8vIENsYWltIHdpdGhkcmF3cyB0aGUgY2FsbGVyJ3MgYWNjdW11bGF0ZWQgYmFsYW5jZSBhbmQgU0VORFMgdGhlIGNvaW5zCi8vIHRvIHRoZSBjYWxsZXIncyBhZGRyZXNzLiBCYWxhbmNlIGlzIHplcm9lZCBiZWZvcmUgdGhlIHRyYW5zZmVyLgovLyBDbGFpbXMgcmVtYWluIHBvc3NpYmxlIG9uIGZyb3plbiBzcGxpdHMsIGFuZCBieSBleC1yZWNpcGllbnRzIHdob3NlCi8vIGFjY3J1ZWQgYmFsYW5jZSBwcmVkYXRlcyBhIHNoYXJlIHVwZGF0ZS4KZnVuYyBDbGFpbShjdXIgcmVhbG0sIHNwbGl0SUQgc3RyaW5nKSBpbnQ2NCB7CglyZWplY3RTdHJheVNlbmQoKQoJcyA6PSBtdXN0R2V0QWN0aXZlKHNwbGl0SUQpCglhZGRyIDo9IGNhbGxlcigpCgoJYmFsLCBleGlzdHMgOj0gcy5CYWxhbmNlc1thZGRyXQoJaWYgIWV4aXN0cyB7CgkJcGFuaWMoIm5vdCBhIHJlY2lwaWVudCBvZiB0aGlzIHNwbGl0IikKCX0KCWlmIGJhbCA9PSAwIHsKCQlwYW5pYygibm90aGluZyB0byBjbGFpbSIpCgl9CgoJcy5CYWxhbmNlc1thZGRyXSA9IDAKCXMuVG90YWxDbGFpbWVkICs9IGJhbAoKCWIgOj0gYmFua2VyLk5ld0JhbmtlcihiYW5rZXIuQmFua2VyVHlwZVJlYWxtU2VuZCwgY3VyKQoJYi5TZW5kQ29pbnModW5zYWZlLkN1cnJlbnRSZWFsbSgpLkFkZHJlc3MoKSwgYWRkciwKCQljaGFpbi5Db2luc3t7RGVub206IERlbm9tLCBBbW91bnQ6IGJhbH19KQoJcmV0dXJuIGJhbAp9CgovLyBVcGRhdGVTaGFyZXMgcmVwbGFjZXMgcmVjaXBpZW50cyBhbmQgc2hhcmVzLiBPd25lciBvbmx5LiBOb3QgaWYgZnJvemVuLgovLyBSZW1vdmVkIHJlY2lwaWVudHMga2VlcCBhbnkgYWNjcnVlZCBiYWxhbmNlIGFuZCBjYW4gc3RpbGwgQ2xhaW0gaXQuCmZ1bmMgVXBkYXRlU2hhcmVzKF8gcmVhbG0sIHNwbGl0SUQsIHJlY2lwaWVudExpc3QsIHNoYXJlTGlzdCBzdHJpbmcpIHsKCXJlamVjdFN0cmF5U2VuZCgpCglzIDo9IG11c3RHZXRBY3RpdmUoc3BsaXRJRCkKCWlmIGNhbGxlcigpICE9IHMuT3duZXIgewoJCXBhbmljKCJvbmx5IHRoZSBvd25lciBjYW4gdXBkYXRlIHNoYXJlcyIpCgl9CglpZiBzLkZyb3plbiB7CgkJcGFuaWMoInNwbGl0IGlzIGZyb3plbiIpCgl9CgoJcmVjaXBpZW50cyA6PSBwYXJzZUFkZHJlc3NlcyhyZWNpcGllbnRMaXN0KQoJc2hhcmVzIDo9IHBhcnNlQmFzaXNQb2ludHMoc2hhcmVMaXN0KQoJdmFsaWRhdGVSZWNpcGllbnRzKHJlY2lwaWVudHMsIHNoYXJlcykKCglmb3IgXywgciA6PSByYW5nZSByZWNpcGllbnRzIHsKCQlpZiBfLCBvayA6PSBzLkJhbGFuY2VzW3JdOyAhb2sgewoJCQlzLkJhbGFuY2VzW3JdID0gMAoJCX0KCX0KCglzLlJlY2lwaWVudHMgPSByZWNpcGllbnRzCglzLlNoYXJlcyA9IHNoYXJlcwp9CgovLyBUcmFuc2Zlck93bmVyc2hpcCBoYW5kcyBjb250cm9sIHRvIGEgbmV3IG93bmVyLiBUaGUgcGVyLW93bmVyIHNwbGl0Ci8vIHNsb3QgbW92ZXMgd2l0aCBpdDogdGhlIG9sZCBvd25lcidzIGNvdW50IGlzIGZyZWVkIGFuZCB0aGUgbmV3Ci8vIG93bmVyJ3MgaXMgY29uc3VtZWQgKGFuZCBtdXN0IGJlIHVuZGVyIHRoZSBsaW1pdCkuCmZ1bmMgVHJhbnNmZXJPd25lcnNoaXAoXyByZWFsbSwgc3BsaXRJRCBzdHJpbmcsIG5ld093bmVyIGFkZHJlc3MpIHsKCXJlamVjdFN0cmF5U2VuZCgpCglzIDo9IG11c3RHZXRBY3RpdmUoc3BsaXRJRCkKCWlmIGNhbGxlcigpICE9IHMuT3duZXIgewoJCXBhbmljKCJvbmx5IHRoZSBvd25lciBjYW4gdHJhbnNmZXIgb3duZXJzaGlwIikKCX0KCWlmIG5ld093bmVyID09ICIiIHsKCQlwYW5pYygibmV3IG93bmVyIG11c3Qgbm90IGJlIGVtcHR5IikKCX0KCWlmICFuZXdPd25lci5Jc1ZhbGlkKCkgfHwgc3RyaW5nKG5ld093bmVyKSAhPSBzdHJpbmdzLlRvTG93ZXIoc3RyaW5nKG5ld093bmVyKSkgewoJCS8vIHNlZSBwYXJzZUFkZHJlc3NlczogYW4gdXBwZXJjYXNlIG93bmVyIGNvdWxkIG5ldmVyIG1hdGNoCgkJLy8gY2FsbGVyKCkgYWdhaW4g4oCUIHRoZSBzcGxpdCB3b3VsZCBiZSBwZXJtYW5lbnRseSBvd25lci1sZXNzCgkJcGFuaWMoImludmFsaWQgbmV3IG93bmVyIGFkZHJlc3M6ICIgKyBzdHJpbmcobmV3T3duZXIpKQoJfQoJaWYgbmV3T3duZXIgPT0gcy5Pd25lciB7CgkJcGFuaWMoIm5ldyBvd25lciBpcyBhbHJlYWR5IHRoZSBvd25lciIpCgl9CglpZiBvd25lclNwbGl0c1tuZXdPd25lcl0gPj0gTWF4U3BsaXRzUGVyT3duZXIgewoJCXBhbmljKCJuZXcgb3duZXIgaXMgYXQgdGhlIHBlci1vd25lciBzcGxpdCBsaW1pdCIpCgl9CgoJb3duZXJTcGxpdHNbcy5Pd25lcl0tLQoJaWYgb3duZXJTcGxpdHNbcy5Pd25lcl0gPD0gMCB7CgkJZGVsZXRlKG93bmVyU3BsaXRzLCBzLk93bmVyKQoJfQoJb3duZXJTcGxpdHNbbmV3T3duZXJdKysKCXMuT3duZXIgPSBuZXdPd25lcgp9CgovLyBGcmVlemUgcGVybWFuZW50bHkgbG9ja3Mgc2hhcmVzIGFuZCBzdG9wcyBmdXJ0aGVyIGRlcG9zaXRzLiBPbmUtd2F5LAovLyBjYW5ub3QgYmUgdW5kb25lLiBDbGFpbXMgcmVtYWluIHBvc3NpYmxlLgpmdW5jIEZyZWV6ZShfIHJlYWxtLCBzcGxpdElEIHN0cmluZykgewoJcmVqZWN0U3RyYXlTZW5kKCkKCXMgOj0gbXVzdEdldEFjdGl2ZShzcGxpdElEKQoJaWYgY2FsbGVyKCkgIT0gcy5Pd25lciB7CgkJcGFuaWMoIm9ubHkgdGhlIG93bmVyIGNhbiBmcmVlemUiKQoJfQoJcy5Gcm96ZW4gPSB0cnVlCn0KCi8vIEFyY2hpdmUgbWFya3MgYSBmdWxseS1jbGFpbWVkIHNwbGl0IGFzIGFyY2hpdmVkLiBPbmx5IHRoZSBvd25lciBjYW4KLy8gYXJjaGl2ZSwgYW5kIG9ubHkgaWYgRVZFUlkgYmFsYW5jZSDigJQgaW5jbHVkaW5nIGJhbGFuY2VzIGhlbGQgYnkKLy8gZXgtcmVjaXBpZW50cyByZW1vdmVkIGluIGEgc2hhcmUgdXBkYXRlIOKAlCBpcyB6ZXJvLCBzaW5jZSBhcmNoaXZpbmcKLy8gYmxvY2tzIGFsbCBmdXJ0aGVyIGNsYWltcy4gQ2Fubm90IGJlIHVuZG9uZS4KZnVuYyBBcmNoaXZlKF8gcmVhbG0sIHNwbGl0SUQgc3RyaW5nKSB7CglyZWplY3RTdHJheVNlbmQoKQoJcyA6PSBtdXN0R2V0QWN0aXZlKHNwbGl0SUQpCglpZiBjYWxsZXIoKSAhPSBzLk93bmVyIHsKCQlwYW5pYygib25seSB0aGUgb3duZXIgY2FuIGFyY2hpdmUiKQoJfQoKCWZvciBfLCBhIDo9IHJhbmdlIHNvcnRlZEJhbGFuY2VBZGRycyhzKSB7CgkJaWYgcy5CYWxhbmNlc1thZGRyZXNzKGEpXSA+IDAgewoJCQlwYW5pYygiY2Fubm90IGFyY2hpdmU6IG91dHN0YW5kaW5nIGJhbGFuY2UgZm9yICIgKyBhKQoJCX0KCX0KCglzLkFyY2hpdmVkID0gdHJ1ZQoKCS8vIEZyZWUgdGhlIG93bmVyJ3Mgc2xvdCBzbyB0aGV5IGNhbiBjcmVhdGUgbmV3IHNwbGl0cwoJb3duZXJTcGxpdHNbcy5Pd25lcl0tLQoJaWYgb3duZXJTcGxpdHNbcy5Pd25lcl0gPD0gMCB7CgkJZGVsZXRlKG93bmVyU3BsaXRzLCBzLk93bmVyKQoJfQoKCS8vIFJlbW92ZSBmcm9tIGFjdGl2ZSBJRCBsaXN0IChrZWVwcyBtYXAgZW50cnkgZm9yIGF1ZGl0KQoJZm9yIGksIGlkIDo9IHJhbmdlIHNwbGl0SURzIHsKCQlpZiBpZCA9PSBzcGxpdElEIHsKCQkJc3BsaXRJRHMgPSBhcHBlbmQoc3BsaXRJRHNbOmldLCBzcGxpdElEc1tpKzE6XS4uLikKCQkJYnJlYWsKCQl9Cgl9Cn0KCi8vIC0tLS0tLS0tLS0gcHJvdG9jb2wgZmVlIC0tLS0tLS0tLS0KCi8vIFNldEZlZSBzZXRzIHRoZSBwcm90b2NvbCBmZWUgaW4gYmFzaXMgcG9pbnRzLCBhZG1pbiBvbmx5LCBoYXJkLWNhcHBlZAovLyBhdCBNYXhGZWVCcHMuIEFwcGxpZXMgdG8gRlVUVVJFIGRlcG9zaXRzIG9ubHkuCmZ1bmMgU2V0RmVlKF8gcmVhbG0sIGJwcyBpbnQ2NCkgewoJcmVqZWN0U3RyYXlTZW5kKCkKCWlmIGNhbGxlcigpICE9IGZlZUFkbWluIHsKCQlwYW5pYygib25seSB0aGUgZmVlIGFkbWluIGNhbiBzZXQgdGhlIGZlZSIpCgl9CglpZiBicHMgPCAwIHx8IGJwcyA+IE1heEZlZUJwcyB7CgkJcGFuaWMoImZlZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgIiArIHN0cmNvbnYuRm9ybWF0SW50KE1heEZlZUJwcywgMTApICsgIiBiYXNpcyBwb2ludHMiKQoJfQoJZmVlQnBzID0gYnBzCn0KCi8vIENsYWltRmVlcyBzZW5kcyBhbGwgYWNjcnVlZCBwcm90b2NvbCBmZWVzIHRvIHRoZSBmZWUgYWRtaW4uCmZ1bmMgQ2xhaW1GZWVzKGN1ciByZWFsbSkgaW50NjQgewoJcmVqZWN0U3RyYXlTZW5kKCkKCWlmIGNhbGxlcigpICE9IGZlZUFkbWluIHsKCQlwYW5pYygib25seSB0aGUgZmVlIGFkbWluIGNhbiBjbGFpbSBmZWVzIikKCX0KCWlmIGZlZXNBY2NydWVkID09IDAgewoJCXBhbmljKCJubyBmZWVzIGFjY3J1ZWQiKQoJfQoJYW1vdW50IDo9IGZlZXNBY2NydWVkCglmZWVzQWNjcnVlZCA9IDAKCWZlZXNDbGFpbWVkICs9IGFtb3VudAoKCWIgOj0gYmFua2VyLk5ld0JhbmtlcihiYW5rZXIuQmFua2VyVHlwZVJlYWxtU2VuZCwgY3VyKQoJYi5TZW5kQ29pbnModW5zYWZlLkN1cnJlbnRSZWFsbSgpLkFkZHJlc3MoKSwgZmVlQWRtaW4sCgkJY2hhaW4uQ29pbnN7e0Rlbm9tOiBEZW5vbSwgQW1vdW50OiBhbW91bnR9fSkKCXJldHVybiBhbW91bnQKfQoKLy8gTm9taW5hdGVGZWVBZG1pbiBiZWdpbnMgYSB0d28tc3RlcCBhZG1pbiBoYW5kb3ZlcjsgdGhlIG5vbWluZWUgbXVzdAovLyBBY2NlcHRGZWVBZG1pbi4gUGFzcyAiIiB0byBjbGVhciBhIHBlbmRpbmcgbm9taW5hdGlvbi4gVHdvLXN0ZXAKLy8gYmVjYXVzZSB0aGUgYWRtaW4gYWRkcmVzcyBpcyBhIGZ1bmRzIGRlc3RpbmF0aW9uOiBhIHR5cG8nZCBvbmUtc3RlcAovLyB0cmFuc2ZlciB3b3VsZCBzdHJhbmQgYWxsIGZ1dHVyZSBmZWVzLgpmdW5jIE5vbWluYXRlRmVlQWRtaW4oXyByZWFsbSwgbm9taW5lZSBhZGRyZXNzKSB7CglyZWplY3RTdHJheVNlbmQoKQoJaWYgY2FsbGVyKCkgIT0gZmVlQWRtaW4gewoJCXBhbmljKCJvbmx5IHRoZSBmZWUgYWRtaW4gY2FuIG5vbWluYXRlIGEgc3VjY2Vzc29yIikKCX0KCWlmIG5vbWluZWUgPT0gIiIgewoJCXBlbmRpbmdGZWVBZG1pbiA9ICIiCgkJcmV0dXJuCgl9CglpZiAhbm9taW5lZS5Jc1ZhbGlkKCkgfHwgc3RyaW5nKG5vbWluZWUpICE9IHN0cmluZ3MuVG9Mb3dlcihzdHJpbmcobm9taW5lZSkpIHsKCQlwYW5pYygiaW52YWxpZCBub21pbmVlIGFkZHJlc3M6ICIgKyBzdHJpbmcobm9taW5lZSkpCgl9CglwZW5kaW5nRmVlQWRtaW4gPSBub21pbmVlCn0KCi8vIEFjY2VwdEZlZUFkbWluIGNvbXBsZXRlcyB0aGUgaGFuZG92ZXI7IG9ubHkgdGhlIG5vbWluZWUgY2FuIGFjY2VwdC4KZnVuYyBBY2NlcHRGZWVBZG1pbihfIHJlYWxtKSB7CglyZWplY3RTdHJheVNlbmQoKQoJaWYgcGVuZGluZ0ZlZUFkbWluID09ICIiIHx8IGNhbGxlcigpICE9IHBlbmRpbmdGZWVBZG1pbiB7CgkJcGFuaWMoImNhbGxlciBpcyBub3QgdGhlIHBlbmRpbmcgZmVlIGFkbWluIikKCX0KCWZlZUFkbWluID0gcGVuZGluZ0ZlZUFkbWluCglwZW5kaW5nRmVlQWRtaW4gPSAiIgp9CgovLyBHZXRGZWVJbmZvIHJldHVybnMgdGhlIGN1cnJlbnQgZmVlIGNvbmZpZ3VyYXRpb24gYW5kIGFjY3J1ZWQgdG90YWwuCmZ1bmMgR2V0RmVlSW5mbygpIHN0cmluZyB7CglyZXR1cm4gImZlZTogIiArIGZvcm1hdFBjdChmZWVCcHMpICsgIiAoY2FwICIgKyBmb3JtYXRQY3QoTWF4RmVlQnBzKSArCgkJIikgfCBhZG1pbjogIiArIHN0cmluZyhmZWVBZG1pbikgKwoJCSIgfCBhY2NydWVkOiAiICsgc3RyY29udi5Gb3JtYXRJbnQoZmVlc0FjY3J1ZWQsIDEwKSArCgkJIiB8IGNsYWltZWQ6ICIgKyBzdHJjb252LkZvcm1hdEludChmZWVzQ2xhaW1lZCwgMTApCn0KCi8vIC0tLS0tLS0tLS0gcmVhZC1vbmx5IHF1ZXJpZXMgLS0tLS0tLS0tLQoKLy8gR2V0U3BsaXRJbmZvIHJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBzdW1tYXJ5LgpmdW5jIEdldFNwbGl0SW5mbyhzcGxpdElEIHN0cmluZykgc3RyaW5nIHsKCXMgOj0gbXVzdEdldFNwbGl0KHNwbGl0SUQpCgoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCgliLldyaXRlU3RyaW5nKCJTcGxpdDogIiArIHNwbGl0SUQgKyAiXG4iKQoJYi5Xcml0ZVN0cmluZygiT3duZXI6ICIgKyBzdHJpbmcocy5Pd25lcikgKyAiXG4iKQoJYi5Xcml0ZVN0cmluZygiRnJvemVuOiAiICsgYm9vbFN0cihzLkZyb3plbikgKyAiXG4iKQoJYi5Xcml0ZVN0cmluZygiVG90YWwgZGVwb3NpdGVkOiAiICsgc3RyY29udi5Gb3JtYXRJbnQocy5Ub3RhbERlcG9zaXRlZCwgMTApICsgIlxuIikKCWIuV3JpdGVTdHJpbmcoIlRvdGFsIGNsYWltZWQ6ICIgKyBzdHJjb252LkZvcm1hdEludChzLlRvdGFsQ2xhaW1lZCwgMTApICsgIlxuIikKCWIuV3JpdGVTdHJpbmcoIlJlY2lwaWVudHM6XG4iKQoJZm9yIGksIHIgOj0gcmFuZ2Ugcy5SZWNpcGllbnRzIHsKCQliLldyaXRlU3RyaW5nKCIgICIgKyBzdHJpbmcocikgKyAiICAiICsgZm9ybWF0UGN0KHMuU2hhcmVzW2ldKSArICIgIGNsYWltYWJsZTogIiArIHN0cmNvbnYuRm9ybWF0SW50KHMuQmFsYW5jZXNbcl0sIDEwKSArICJcbiIpCgl9CglyZXR1cm4gYi5TdHJpbmcoKQp9CgovLyBHZXRDbGFpbWFibGUgcmV0dXJucyBjbGFpbWFibGUgYmFsYW5jZSBmb3IgYW4gYWRkcmVzcy4KZnVuYyBHZXRDbGFpbWFibGUoc3BsaXRJRCBzdHJpbmcsIGFkZHIgYWRkcmVzcykgaW50NjQgewoJcyA6PSBtdXN0R2V0U3BsaXQoc3BsaXRJRCkKCXJldHVybiBzLkJhbGFuY2VzW2FkZHJdCn0KCi8vIC0tLS0tLS0tLS0gcmVuZGVyIC0tLS0tLS0tLS0KCi8vIFJlbmRlciByZXR1cm5zIGEgbWFya2Rvd24gb3ZlcnZpZXcuIE5ldmVyIHBhbmljcy4KZnVuYyBSZW5kZXIocGF0aCBzdHJpbmcpIHN0cmluZyB7CglpZiBsZW4oc3BsaXRJRHMpID09IDAgewoJCXJldHVybiAiIyBGZWUgU3BsaXRcblxuTm8gYWN0aXZlIHNwbGl0cy5cbiIKCX0KCgl2YXIgYiBzdHJpbmdzLkJ1aWxkZXIKCWIuV3JpdGVTdHJpbmcoIiMgRmVlIFNwbGl0XG5cbiIpCglpZiBmZWVCcHMgPiAwIHsKCQliLldyaXRlU3RyaW5nKCIqKlByb3RvY29sIGZlZToqKiAiICsgZm9ybWF0UGN0KGZlZUJwcykgKyAiIChoYXJkIGNhcCAiICsgZm9ybWF0UGN0KE1heEZlZUJwcykgKyAiKVxuXG4iKQoJfQoKCXNob3cgOj0gc3BsaXRJRHMKCWlmIGxlbihzaG93KSA+IE1heFJlbmRlclNwbGl0cyB7CgkJYi5Xcml0ZVN0cmluZygiX1Nob3dpbmcgdGhlIG1vc3QgcmVjZW50ICIgKyBzdHJjb252Lkl0b2EoTWF4UmVuZGVyU3BsaXRzKSArICIgYWN0aXZlIHNwbGl0cy5fXG5cbiIpCgkJc2hvdyA9IHNob3dbbGVuKHNob3cpLU1heFJlbmRlclNwbGl0czpdCgl9Cglmb3IgXywgaWQgOj0gcmFuZ2Ugc2hvdyB7CgkJcyA6PSBzcGxpdHNbaWRdCgkJYi5Xcml0ZVN0cmluZygiIyMgIiArIGlkICsgIlxuXG4iKQoJCWlmIHMgPT0gbmlsIHsKCQkJYi5Xcml0ZVN0cmluZygiXyhpbnZhbGlkKV9cblxuIikKCQkJY29udGludWUKCQl9CgkJYi5Xcml0ZVN0cmluZygiYGBgXG4iKQoJCWIuV3JpdGVTdHJpbmcoIk93bmVyOiAiICsgc3RyaW5nKHMuT3duZXIpICsgIlxuIikKCQliLldyaXRlU3RyaW5nKCJGcm96ZW46ICIgKyBib29sU3RyKHMuRnJvemVuKSArICJcbiIpCgkJYi5Xcml0ZVN0cmluZygiVG90YWwgZGVwb3NpdGVkOiAiICsgc3RyY29udi5Gb3JtYXRJbnQocy5Ub3RhbERlcG9zaXRlZCwgMTApICsgIlxuIikKCQliLldyaXRlU3RyaW5nKCJUb3RhbCBjbGFpbWVkOiAiICsgc3RyY29udi5Gb3JtYXRJbnQocy5Ub3RhbENsYWltZWQsIDEwKSArICJcbiIpCgkJaWYgbGVuKHMuUmVjaXBpZW50cykgPiAwIHsKCQkJYi5Xcml0ZVN0cmluZygiUmVjaXBpZW50czpcbiIpCgkJCWZvciBpLCByIDo9IHJhbmdlIHMuUmVjaXBpZW50cyB7CgkJCQlzaGFyZSA6PSAiPz8lIgoJCQkJaWYgaSA8IGxlbihzLlNoYXJlcykgewoJCQkJCXNoYXJlID0gZm9ybWF0UGN0KHMuU2hhcmVzW2ldKQoJCQkJfQoJCQkJYmFsIDo9ICIwIgoJCQkJaWYgcy5CYWxhbmNlcyAhPSBuaWwgewoJCQkJCWJhbCA9IHN0cmNvbnYuRm9ybWF0SW50KHMuQmFsYW5jZXNbcl0sIDEwKQoJCQkJfQoJCQkJYi5Xcml0ZVN0cmluZygiICAiICsgc3RyaW5nKHIpICsgIiAgIiArIHNoYXJlICsgIiAgY2xhaW1hYmxlOiAiICsgYmFsICsgIlxuIikKCQkJfQoJCX0KCQliLldyaXRlU3RyaW5nKCJgYGBcblxuIikKCX0KCXJldHVybiBiLlN0cmluZygpCn0KGmQKC2dub21vZC50b21sElVtb2R1bGUgPSAiZ25vLmxhbmQvci9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL2ZlZV9zcGxpdCIKZ25vID0gIjAuOSIKIg0xMDAwMDAwMHVnbm90EhEIlOXjKxIKOTE4MTR1Z25vdBqoAQo6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQIW9DF2ySV4zjQumeJvrSn3/nxG7XBDVv+rkxV/YrsOmBJAF5yc/E8jiKaI/JbV25GBmV5Axo6q5lEWJdNFHqH+3ulivwTiiYEgx3LQ4LgD1CT/4IQVNiGtBuPN8U0sgjdn6hooZzFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFsdXV4ZQ=="
  }
}