{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "hash": "xWvXC+mg7uFUQ6848cAgbN5Y2kvtgESyl/hcu/KII7M=",
    "height": "483001",
    "index": 0,
    "tx_result": {
      "ResponseBase": {
        "Error": null,
        "Data": null,
        "Events": null,
        "Log": "msg:0,success:true,log:,events:[]",
        "Info": ""
      },
      "GasWanted": "36381246",
      "GasUsed": "24254154"
    },
    "tx": "CoGHAQoML3ZtLm1fYWRkcGtnEu+GAQooZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMxKyhgEKCGxhdGVmZWVzEjxnbm8ubGFuZC9yL2cxdXQ2dXNwdWg3M2UwMnlhdXhwbXl0OGczd3dkZGFxOHV0YWd2bTMvbGF0ZWZlZXMaYwoLZ25vbW9kLnRvbWwSVG1vZHVsZSA9ICJnbm8ubGFuZC9yL2cxdXQ2dXNwdWg3M2UwMnlhdXhwbXl0OGczd3dkZGFxOHV0YWd2bTMvbGF0ZWZlZXMiCmdubyA9ICIwLjkiChqBhQEKDGxhdGVmZWVzLmdubxLvhAEvLyBSZWFsbSBsYXRlZmVlcyBwdWJsaXNoZXMgYSBncmFkdWF0ZWQgbGF0ZS1mZWUgcGVuYWx0eSBvbiBhbiBvdmVyZHVlIGludm9pY2UKLy8gaGVsZCBpbiB0aGUgbGl2ZSBbci9pbnZvaWNlc10uIEEgY3JlZGl0b3IgKGFuIGludm9pY2UgaXNzdWVyKSBkZWNsYXJlcyBhCi8vIGxhdGUtZmVlIFNDSEVEVUxFIG9uY2Ug4oCUIGEgW3AvdGllcnNdIHNjaGVkdWxlIG92ZXIgaG93IG1hbnkgYmxvY2tzIGFuCi8vIGludm9pY2UgaXMgb3ZlcmR1ZSDigJQgYW5kIHRoZSByZWFsbSBwcmljZXMgdGhlIHBlbmFsdHkgYXMgYSBmdW5jdGlvbiBvZiB0aGF0Ci8vIG92ZXJkdWUgZHVyYXRpb24sIGVzY2FsYXRpbmcgYnkgdGllci4gVGhlIHBlbmFsdHkgY2FuIGJlIHJlYWQgbGl2ZQovLyAoW1BlbmFsdHlOb3ddKSBvciBmcm96ZW4gaW50byBhIHNlcXVlbmNlLW51bWJlcmVkIEFTU0VTU01FTlQgdGhlIGNyZWRpdG9yCi8vIGNhbiBwb2ludCBhIHBheWVyIHRvLgovLwovLyBJdCBpcyB0aGUgZm91cnRoIGNvbnN1bWVyIG9mIFtwL3RpZXJzXSBhbmQgdGhlIG9uZSB0aGF0IGV4ZXJjaXNlcyBpdHMKLy8gInByb2dyZXNzaXZlIGZlZSIgcmVhZGluZyBvdmVyIFRJTUUgcmF0aGVyIHRoYW4gcXVhbnRpdHk6IFtyL21ldGVyc10gcHJpY2VzCi8vIHVzYWdlLCBbci9wYXlzbGlwc10gcHJpY2VzIHdpdGhob2xkaW5nLCBhbmQgdGhpcyBwcmljZXMgbGF0ZW5lc3MuIEl0IGlzIHRoZQovLyBzZWNvbmQgY29uc3VtZXIgb2YgW3IvaW52b2ljZXNdIGFmdGVyIFtyL3JlY2VpdmFibGVzXSwgYW5kIHJlYWRzIHRoZSBleGFjdAovLyBpbnRlZ3JhdGlvbiBzdXJmYWNlIHRoYXQgcmVhbG0ncyBoZWFkZXIgYWR2ZXJ0aXNlcyDigJQgW2ludm9pY2VzLkludm9pY2VJbmZvXSwKLy8gW2ludm9pY2VzLklzT3ZlcmR1ZV0sIFtpbnZvaWNlcy5IYXNJbnZvaWNlXSDigJQgYWxsIG5vbi1jcm9zc2luZyB2aWV3cywgbm8KLy8gc3RydWN0IHNsaWNlIGNyb3NzaW5nIGEgcmVhbG0gYm91bmRhcnkuCi8vCi8vICMgSXQgaXMgYSBQVUJMSVNIRVIsIG5vdCBhIGNvbGxlY3RvcgovLwovLyBbci9pbnZvaWNlc10gaXMgbGl2ZSBhbmQgaW1tdXRhYmxlLCBzbyB0aGlzIHJlYWxtIENBTk5PVCBhZGQgYSBjaGFyZ2UgdG8gYW4KLy8gaW52b2ljZSB0aGVyZSwgYW5kIGl0IGhvbGRzIG5vIGNvaW5zIG9mIGl0cyBvd24g4oCUIG5vIGJhbmtlciwgbm8gZGVwb3NpdCwgbm8KLy8gcGF5b3V0LCBubyB3aXRoZHJhd2FsIHBhdGguIEEgcHVibGlzaGVkIHBlbmFsdHkgaXMgYSB2ZXJpZmlhYmxlIENMQUlNIGJhY2tlZAovLyBieSB0aGUgaW52b2ljZSdzIG93biBmYWN0cyBhbmQgdGhlIGNyZWRpdG9yJ3MgZGVjbGFyZWQgc2NoZWR1bGUsIGV4YWN0bHkgYXMKLy8gW3IvcmVjZWl2YWJsZXNdIHB1Ymxpc2hlcyBhIGxvc3MgcHJvdmlzaW9uIGFuZCBbci9jYXNoZmxvd10gYSBzdGF0ZW1lbnQuIEl0Ci8vIGNvbXBlbHMgbm90aGluZzsgYSBkZWJ0b3Igd2hvIGlnbm9yZXMgYSBsYXRlIGZlZSBpcyBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcwovLyBvbmUgd2hvIGlnbm9yZXMgdGhlIGludm9pY2UuIEEgY3VzdG9kaWFsIHZhcmlhbnQgdGhhdCBjb2xsZWN0cyB0aGUgZmVlIGlzIGEKLy8gc2VwYXJhdGUsIGxhcmdlciBwcm9kdWN0IGFuZCBpcyBkZWxpYmVyYXRlbHkgb3V0IG9mIHNjb3BlLgovLwovLyAjIFRoZSBwcmljaW5nIGF4aXMsIGFuZCB0aGUgb25lIGl0IGlzIG5vdAovLwovLyBUaGUgYmFzZSBoYW5kZWQgdG8gW3AvdGllcnNdIGlzIHRoZSBPVkVSRFVFIERVUkFUSU9OIGluIGJsb2NrcwovLyAoYG5vdyAtIGR1ZUhlaWdodGApLCBhbmQgZWFjaCB0aWVyJ3MgcmF0ZSBpcyBhIHVnbm90IGFjY3J1YWwgcGVyIFJhdGVTY2FsZQovLyBibG9ja3MuIFNvIHRoZSBwZW5hbHR5IEVTQ0FMQVRFUyBXSVRIIFRJTUU6IHRoZSBsb25nZXIgYW4gaW52b2ljZSBpcwovLyBvdmVyZHVlLCB0aGUgaGlnaGVyIHRoZSBtYXJnaW5hbCBhY2NydWFsLiBbcC90aWVyc10nIHJhdGUgY2FwIG1ha2VzCi8vIGBwZW5hbHR5IDw9IG92ZXJkdWVCbG9ja3NgIGFuIGFyaXRobWV0aWMgZmFjdCDigJQgdGhlIGZlZSBjYW4gbmV2ZXIgZXhjZWVkIG9uZQovLyB1Z25vdCBwZXIgb3ZlcmR1ZSBibG9jaywgYSBuYXR1cmFsIGNlaWxpbmcuCi8vCi8vIEl0IGlzIE5PVCBhIHBlcmNlbnRhZ2Ugb2YgdGhlIG91dHN0YW5kaW5nIGFtb3VudC4gW3AvdGllcnNdIHByaWNlcyBvbmUKLy8gYW1vdW50IGFnYWluc3QgYnJlYWtwb2ludHMg4oCUIGEgc2luZ2xlIGRpbWVuc2lvbiDigJQgYW5kIGEgZmVlIHRoYXQgaXMgYm90aAovLyB0aW1lLWVzY2FsYXRpbmcgQU5EIGJhbGFuY2Utc2NhbGVkIGlzIHR3byBkaW1lbnNpb25zIGl0IGNhbm5vdCBleHByZXNzIGluCi8vIG9uZSBjYWxsLiBUaGUgY3JlZGl0b3Igc2NhbGVzIHRoZSB1Z25vdCBhY2NydWFsIHRvIHRoZWlyIGRlYnQgbWFnbml0dWRlcwovLyB0aHJvdWdoIHRoZSBzY2hlZHVsZTsgdGhlIGFzc2Vzc21lbnQgcmVjb3JkcyB0aGUgb3V0c3RhbmRpbmcgYmVzaWRlIHRoZQovLyBwZW5hbHR5IHNvIGEgcmVhZGVyIGNhbiBjb21wdXRlIGFuIGVmZmVjdGl2ZSByYXRlLiBDb21wb3NpbmcgYSBiYWxhbmNlLQovLyBzY2FsZWQgZmVlIGFzIGEgc2luZ2xlIENoYXJnZSBjYWxsIHdvdWxkIGJlIGEgcGxhdXNpYmxlLCB3cm9uZyBudW1iZXIuCi8vCi8vICMgVGhlIHRydXN0IGJvdW5kYXJ5LCBpbmhlcml0ZWQgdHdpY2Ugb3ZlcgovLwovLyBBIHBlbmFsdHkgaXMgYSBzZWxmLXJlcG9ydCBvZiBhIHNlbGYtcmVwb3J0IG9mIGEgc2VsZi1yZXBvcnQ6IHRoZSBpc3N1ZXIgc2V0Ci8vIHRoZSBpbnZvaWNlIGFtb3VudCBpbiBbci9pbnZvaWNlc10sIHRoZSBkdWUgaGVpZ2h0IHRoZXJlLCBBTkQgdGhlIGxhdGUtZmVlCi8vIHNjaGVkdWxlIGhlcmUuIFRoaXMgcmVhbG0gY29tcHV0ZXMgZmFpdGhmdWxseSBmcm9tIHRob3NlOyBpdCBkb2VzIG5vdAovLyB2YWxpZGF0ZSB0aGF0IGFueSBvZiB0aGVtIGlzIGZhaXIuIEEgY3JlZGl0b3IgbWF5IG9ubHkgYXNzZXNzIHRoZWlyIE9XTgovLyBpbnZvaWNlcyDigJQgW0Fzc2Vzc10gZGVyaXZlcyB0aGUgaXNzdWVyIGZyb20gYGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKWAgYW5kCi8vIHJlYWRzIFtpbnZvaWNlcy5JbnZvaWNlSW5mb10gdW5kZXIgdGhhdCBrZXksIHdoaWNoIHJldHVybnMgb25seSBpbnZvaWNlcwovLyB0aGF0IGFkZHJlc3MgaXNzdWVkLgpwYWNrYWdlIGxhdGVmZWVzCgppbXBvcnQgKAoJImNoYWluIgoJImNoYWluL3J1bnRpbWUiCgkiY2hhaW4vcnVudGltZS91bnNhZmUiCgkic3RyY29udiIKCgkiZ25vLmxhbmQvcC9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL3RpZXJzIgoJImduby5sYW5kL3AvbnQvYXZsL3YwIgoJImduby5sYW5kL3AvbnQvbWFya2Rvd24vc2FuaXRpemUvdjAiCgkiZ25vLmxhbmQvci9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL2ludm9pY2VzIgopCgovLyBEZW5vbSBpcyB0aGUgYXNzZXQgdGhlIGludm9pY2VzIHRoaXMgcmVhbG0gcHJpY2VzIGFyZSBkZW5vbWluYXRlZCBpbiwgYW5kCi8vIHRoZSB1bml0IGEgcGVuYWx0eSBpcyBleHByZXNzZWQgaW4uIFRoaXMgcmVhbG0gbmV2ZXIgaG9sZHMgaXQuCmNvbnN0IERlbm9tID0gInVnbm90IgoKLy8gSW52b2ljZXNQYXRoIHBpbnMgdGhlIHJlYWxtIHRoaXMgb25lIHJlYWRzLCBieSB2YWx1ZSwgc28gYSByZWFkZXIgb2YgYQovLyBwdWJsaXNoZWQgYXNzZXNzbWVudCBjYW4gc2VlIHdoaWNoIGludm9pY2VzIGl0IHByaWNlZC4KY29uc3QgSW52b2ljZXNQYXRoID0gaW52b2ljZXMuUmVhbG1QYXRoCgovLyBSZW5kZXJMaW1pdCBib3VuZHMgZXZlcnkgcmVuZGVyZWQgbGlzdCDigJQgYW4gdW5ib3VuZGVkIFJlbmRlciB3YXMgWUVMTE9XIGluCi8vIHRocmVlIHByaW9yIGF1ZGl0cy4KY29uc3QgUmVuZGVyTGltaXQgPSAyMAoKLy8gTWF4QXNzZXNzbWVudHNQZXJJc3N1ZXIgYm91bmRzIG9uZSBjcmVkaXRvcidzIHN0b3JlZCBhc3Nlc3NtZW50IHJlY29yZHMsIHNvCi8vIG9uZSBhZGRyZXNzIGNhbm5vdCBncm93IHRoaXMgcmVhbG0ncyBzdGF0ZSB3aXRob3V0IGJvdW5kLiBJdCBjb3VudHMgU1RPUkVECi8vIHJlY29yZHMsIHRoZSBpbnZvaWNlcy1yZWFsbSBkaXNjaXBsaW5lLgpjb25zdCBNYXhBc3Nlc3NtZW50c1Blcklzc3VlciA9IDI1NgoKdHlwZSBhc3Nlc3NtZW50IHN0cnVjdCB7CglzZXEgICAgICAgICBpbnQ2NAoJaXNzdWVyICAgICAgYWRkcmVzcyAvLyB0aGUgY3JlZGl0b3Igd2hvIGZyb3plIGl0OyB0aGUgaW52b2ljZSdzIGlzc3VlcgoJaW52b2ljZUlEICAgaW50NjQKCXBheWVyICAgICAgIGFkZHJlc3MKCWFtb3VudCAgICAgIGludDY0IC8vIGludm9pY2UgZmFjZSwgc25hcHNob3R0ZWQgZnJvbSByL2ludm9pY2VzCglwYWlkICAgICAgICBpbnQ2NCAvLyBzbmFwc2hvdHRlZAoJb3V0c3RhbmRpbmcgaW50NjQgLy8gYW1vdW50IC0gcGFpZCBhdCBhc3Nlc3NtZW50IHRpbWUKCWR1ZUhlaWdodCAgIGludDY0Cglhc3Nlc3NlZEF0ICBpbnQ2NCAvLyBjaGFpbiBoZWlnaHQgdGhlIHBlbmFsdHkgd2FzIHByaWNlZCBhdAoJb3ZlcmR1ZUJ5ICAgaW50NjQgLy8gYXNzZXNzZWRBdCAtIGR1ZUhlaWdodCwgdGhlIGJhc2UgcHJpY2VkCglwZW5hbHR5ICAgICBpbnQ2NCAvLyBDaGFyZ2Uob3ZlcmR1ZUJ5KSB1bmRlciB0aGUgc25hcHNob3R0ZWQgc2NoZWR1bGUKCWVkZ2VzICAgICAgIFtdaW50NjQKCXJhdGVzICAgICAgIFtdaW50NjQKfQoKdmFyICgKCXNlbGYgICAgICBhZGRyZXNzIC8vIHRoaXMgcmVhbG0ncyBhZGRyZXNzLCBjYXB0dXJlZCBhdCBkZXBsb3kKCW5leHRTZXEgICBpbnQ2NAoJc2NoZWR1bGVzID0gYXZsLk5ld1RyZWUoKSAvLyBpc3N1ZXIuU3RyaW5nKCkgICAgICAtPiB0aWVycy5TY2hlZHVsZSAoYnkgdmFsdWUpCglieVNlcSAgICAgPSBhdmwuTmV3VHJlZSgpIC8vIHBhZElEKHNlcSkgICAgICAgICAgICAtPiAqYXNzZXNzbWVudAoJaXNzdWVyTnVtID0gYXZsLk5ld1RyZWUoKSAvLyBpc3N1ZXIuU3RyaW5nKCkgICAgICAgLT4gKmludDY0LCBzdG9yZWQgYXNzZXNzbWVudHMKKQoKZnVuYyBpbml0KCkgewoJc2VsZiA9IHVuc2FmZS5DdXJyZW50UmVhbG0oKS5BZGRyZXNzKCkKfQoKLy8gLS0tIGNyZWRpdG9yIHNpZGUgLS0tCgovLyBTZXRTY2hlZHVsZSBkZWNsYXJlcyBvciByZXBsYWNlcyB0aGUgY2FsbGVyJ3MgbGF0ZS1mZWUgc2NoZWR1bGU6IGEgZ3JhZHVhdGVkCi8vIGFjY3J1YWwgb3ZlciBPVkVSRFVFIEJMT0NLUywgYnVpbHQgZnJvbSBjb21tYS1zZXBhcmF0ZWQgaW50NjQgbGlzdHMgd2hlcmUKLy8gbGVuKHJhdGVzKSA9PSBsZW4oZWRnZXMpKzEgYW5kIGVhY2ggcmF0ZSBpcyBhIHVnbm90IGFjY3J1YWwgcGVyIFJhdGVTY2FsZQovLyBibG9ja3MgKDAuLjEwMDAwKS4gRWRnZXMgYXJlIGJsb2NrIGNvdW50cyDigJQgZS5nLiAiMjE2MDAwLDY0ODAwMCIgaXMgcm91Z2hseQovLyB0ZW4gYW5kIHRoaXJ0eSBkYXlzIGF0IH40cyBibG9ja3MuIEEgc2luZ2xlIHJhdGUgd2l0aCBubyBlZGdlcyBpcyBhIGZsYXQKLy8gYWNjcnVhbC4gUmVwbGFjaW5nIGEgc2NoZWR1bGUgZG9lcyBub3QgdG91Y2ggYWxyZWFkeS1mcm96ZW4gYXNzZXNzbWVudHMsCi8vIHdoaWNoIHNuYXBzaG90IHRoZSBzY2hlZHVsZSB0aGF0IHByaWNlZCB0aGVtLgpmdW5jIFNldFNjaGVkdWxlKGN1ciByZWFsbSwgZWRnZXMsIHJhdGVzIHN0cmluZykgaW50IHsKCWFzc2VydE5vU2VuZCgpCglpc3N1ZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpCglzLCBlcnIgOj0gdGllcnMuTmV3KAoJCXBhcnNlSW50NjRMaXN0KGVkZ2VzLCB0aWVycy5NYXhUaWVycy0xLCAiZWRnZSIpLAoJCXBhcnNlSW50NjRMaXN0KHJhdGVzLCB0aWVycy5NYXhUaWVycywgInJhdGUiKSwKCSkKCWlmIGVyciAhPSBuaWwgewoJCXBhbmljKCJzY2hlZHVsZTogIiArIGVyci5FcnJvcigpKQoJfQoJc2NoZWR1bGVzLlNldChpc3N1ZXIuU3RyaW5nKCksIHMpCgljaGFpbi5FbWl0KCJTY2hlZHVsZVNldCIsICJpc3N1ZXIiLCBpc3N1ZXIuU3RyaW5nKCksICJ0aWVycyIsIGl0b2EoaW50NjQocy5OdW1UaWVycygpKSkpCglyZXR1cm4gcy5OdW1UaWVycygpCn0KCi8vIEFzc2VzcyBmcmVlemVzIGEgbGF0ZS1mZWUgcGVuYWx0eSBvbiBvbmUgb2YgdGhlIGNhbGxlcidzIG93biBvdmVyZHVlCi8vIGludm9pY2VzIGFuZCByZXR1cm5zIGl0cyBzZXF1ZW5jZSBudW1iZXIuIFRoZSBjYWxsZXIgbXVzdCBiZSB0aGUgaW52b2ljZSdzCi8vIGlzc3VlciAodGhlIGNyZWRpdG9yKSwgbXVzdCBoYXZlIGRlY2xhcmVkIGEgc2NoZWR1bGUsIGFuZCB0aGUgaW52b2ljZSBtdXN0Ci8vIGJlIG92ZXJkdWUgcmlnaHQgbm93LiBUaGUgaW52b2ljZSdzIGZhY3RzIGFuZCB0aGUgY3VycmVudCBzY2hlZHVsZSBhcmUKLy8gc25hcHNob3R0ZWQsIHNvIHRoZSBhc3Nlc3NtZW50IGlzIGEgc3RhYmxlIGNsYWltIGV2ZW4gYXMgdGhlIGludm9pY2Uga2VlcHMKLy8gYWNjcnVpbmcgb3IgaXMgbGF0ZXIgcGFpZC4KZnVuYyBBc3Nlc3MoY3VyIHJlYWxtLCBpbnZvaWNlSUQgaW50NjQpIGludDY0IHsKCWFzc2VydE5vU2VuZCgpCglpc3N1ZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpCglpZiAhaW52b2ljZXMuSGFzSW52b2ljZShpc3N1ZXIsIGludm9pY2VJRCkgewoJCXBhbmljKCJubyBpbnZvaWNlICIgKyBpdG9hKGludm9pY2VJRCkgKyAiIGlzc3VlZCBieSB0aGUgY2FsbGVyIikKCX0KCXN2IDo9IHNjaGVkdWxlcy5HZXQoaXNzdWVyLlN0cmluZygpKQoJaWYgc3YgPT0gbmlsIHsKCQlwYW5pYygiZGVjbGFyZSBhIGxhdGUtZmVlIHNjaGVkdWxlIGZpcnN0IHdpdGggU2V0U2NoZWR1bGUiKQoJfQoJaWYgIWludm9pY2VzLklzT3ZlcmR1ZShpc3N1ZXIsIGludm9pY2VJRCkgewoJCXBhbmljKCJpbnZvaWNlICIgKyBpdG9hKGludm9pY2VJRCkgKyAiIGlzIG5vdCBvdmVyZHVlIikKCX0KCW4gOj0gY291bnRlcihpc3N1ZXJOdW0sIGlzc3VlcikKCWlmICpuID49IE1heEFzc2Vzc21lbnRzUGVySXNzdWVyIHsKCQlwYW5pYygicGVyLWlzc3VlciBhc3Nlc3NtZW50IGxpbWl0IHJlYWNoZWQiKQoJfQoKCXBheWVyLCBhbW91bnQsIHBhaWQsIGR1ZUhlaWdodCwgXywgXyA6PSBpbnZvaWNlcy5JbnZvaWNlSW5mbyhpc3N1ZXIsIGludm9pY2VJRCkKCW5vdyA6PSBydW50aW1lLkNoYWluSGVpZ2h0KCkKCW92ZXJkdWVCeSA6PSBub3cgLSBkdWVIZWlnaHQgLy8gPiAwOiBJc092ZXJkdWUgcmVxdWlyZWQgbm93ID4gZHVlSGVpZ2h0CglzY2hlZCA6PSBzdi4odGllcnMuU2NoZWR1bGUpCglwZW5hbHR5IDo9IGNoYXJnZShzY2hlZCwgb3ZlcmR1ZUJ5KQoKCXNlcSA6PSBuZXh0U2VxCgluZXh0U2VxKysKCWJ5U2VxLlNldChwYWRJRChzZXEpLCAmYXNzZXNzbWVudHsKCQlzZXE6ICAgICAgICAgc2VxLAoJCWlzc3VlcjogICAgICBpc3N1ZXIsCgkJaW52b2ljZUlEOiAgIGludm9pY2VJRCwKCQlwYXllcjogICAgICAgcGF5ZXIsCgkJYW1vdW50OiAgICAgIGFtb3VudCwKCQlwYWlkOiAgICAgICAgcGFpZCwKCQlvdXRzdGFuZGluZzogYW1vdW50IC0gcGFpZCwKCQlkdWVIZWlnaHQ6ICAgZHVlSGVpZ2h0LAoJCWFzc2Vzc2VkQXQ6ICBub3csCgkJb3ZlcmR1ZUJ5OiAgIG92ZXJkdWVCeSwKCQlwZW5hbHR5OiAgICAgcGVuYWx0eSwKCQllZGdlczogICAgICAgc2NoZWQuRWRnZXMoKSwKCQlyYXRlczogICAgICAgc2NoZWQuUmF0ZXMoKSwKCX0pCgkqbisrCgoJY2hhaW4uRW1pdCgiQXNzZXNzZWQiLAoJCSJzZXEiLCBpdG9hKHNlcSksCgkJImlzc3VlciIsIGlzc3Vlci5TdHJpbmcoKSwKCQkiaW52b2ljZUlkIiwgaXRvYShpbnZvaWNlSUQpLAoJCSJwYXllciIsIHBheWVyLlN0cmluZygpLAoJCSJvdmVyZHVlQnkiLCBpdG9hKG92ZXJkdWVCeSksCgkJIm91dHN0YW5kaW5nIiwgaXRvYShhbW91bnQtcGFpZCksCgkJInBlbmFsdHkiLCBpdG9hKHBlbmFsdHkpLAoJKQoJcmV0dXJuIHNlcQp9CgovLyAtLS0gdmlld3MgKG5vbi1jcm9zc2luZzogY3Jvc3MtcmVhbG0gcmVhZGFibGUpIC0tLQoKLy8gUGVuYWx0eU5vdyBpcyB0aGUgcGVuYWx0eSBhbiBpc3N1ZXIncyBpbnZvaWNlIGhhcyBhY2NydWVkIGFzIG9mIHRoZSBjdXJyZW50Ci8vIGhlaWdodCwgdW5kZXIgdGhlIGlzc3VlcidzIENVUlJFTlQgc2NoZWR1bGUuIEl0IGlzIDAgd2hlbiB0aGUgaW52b2ljZSBpcyBub3QKLy8gb3ZlcmR1ZSDigJQgaW5jbHVkaW5nIG9uY2UgaXQgaXMgcGFpZCBvciB2b2lkZWQsIGJlY2F1c2UgW3IvaW52b2ljZXNdIGRvZXMgbm90Ci8vIGV4cG9zZSB3aGVuIGEgcGF5bWVudCBsYW5kZWQsIHNvIGFjY3J1YWwgaXMgb25seSBjb21wdXRhYmxlIHdoaWxlIHRoZQovLyBpbnZvaWNlIGlzIHN0aWxsIG9wZW4gYW5kIGxhdGUuIEEgZnJvemVuIFtBc3Nlc3NdIGlzIGhvdyBhIGNsYWltIHN1cnZpdmVzCi8vIHRoZSBpbnZvaWNlIGJlaW5nIHBhaWQuIFBhbmljcyBvbmx5IGlmIHRoZSBpc3N1ZXIgaGFzIG5vIHNjaGVkdWxlIG9yIHRoZQovLyBpbnZvaWNlIGRvZXMgbm90IGV4aXN0LgpmdW5jIFBlbmFsdHlOb3coaXNzdWVyIGFkZHJlc3MsIGludm9pY2VJRCBpbnQ2NCkgaW50NjQgewoJaWYgIWludm9pY2VzLkhhc0ludm9pY2UoaXNzdWVyLCBpbnZvaWNlSUQpIHsKCQlwYW5pYygibm8gaW52b2ljZSAiICsgaXRvYShpbnZvaWNlSUQpICsgIiBpc3N1ZWQgYnkgIiArIGlzc3Vlci5TdHJpbmcoKSkKCX0KCXN2IDo9IHNjaGVkdWxlcy5HZXQoaXNzdWVyLlN0cmluZygpKQoJaWYgc3YgPT0gbmlsIHsKCQlwYW5pYygiaXNzdWVyIGhhcyBubyBsYXRlLWZlZSBzY2hlZHVsZSIpCgl9CglpZiAhaW52b2ljZXMuSXNPdmVyZHVlKGlzc3VlciwgaW52b2ljZUlEKSB7CgkJcmV0dXJuIDAKCX0KCV8sIF8sIF8sIGR1ZUhlaWdodCwgXywgXyA6PSBpbnZvaWNlcy5JbnZvaWNlSW5mbyhpc3N1ZXIsIGludm9pY2VJRCkKCXJldHVybiBjaGFyZ2Uoc3YuKHRpZXJzLlNjaGVkdWxlKSwgcnVudGltZS5DaGFpbkhlaWdodCgpLWR1ZUhlaWdodCkKfQoKLy8gUXVvdGVQZW5hbHR5IHByaWNlcyBhIGh5cG90aGV0aWNhbCBvdmVyZHVlIGR1cmF0aW9uIGFnYWluc3QgYW4gaXNzdWVyJ3MKLy8gY3VycmVudCBzY2hlZHVsZSwgd2l0aG91dCByZWFkaW5nIGFueSBpbnZvaWNlIOKAlCB0aGUgcHJldmlldyBhIGNyZWRpdG9yIHVzZXMKLy8gdG8gdHVuZSBhIHNjaGVkdWxlLiBQYW5pY3MgaWYgdGhlIGlzc3VlciBoYXMgbm8gc2NoZWR1bGUgb3Igb3ZlcmR1ZUJsb2NrcyBpcwovLyBuZWdhdGl2ZS4KZnVuYyBRdW90ZVBlbmFsdHkoaXNzdWVyIGFkZHJlc3MsIG92ZXJkdWVCbG9ja3MgaW50NjQpIGludDY0IHsKCXN2IDo9IHNjaGVkdWxlcy5HZXQoaXNzdWVyLlN0cmluZygpKQoJaWYgc3YgPT0gbmlsIHsKCQlwYW5pYygiaXNzdWVyIGhhcyBubyBsYXRlLWZlZSBzY2hlZHVsZSIpCgl9CglpZiBvdmVyZHVlQmxvY2tzIDwgMCB7CgkJcGFuaWMoIm92ZXJkdWVCbG9ja3MgbXVzdCBiZSBub24tbmVnYXRpdmUiKQoJfQoJcmV0dXJuIGNoYXJnZShzdi4odGllcnMuU2NoZWR1bGUpLCBvdmVyZHVlQmxvY2tzKQp9CgovLyBIYXNTY2hlZHVsZSByZXBvcnRzIHdoZXRoZXIgYW4gaXNzdWVyIGhhcyBkZWNsYXJlZCBhIGxhdGUtZmVlIHNjaGVkdWxlLgpmdW5jIEhhc1NjaGVkdWxlKGlzc3VlciBhZGRyZXNzKSBib29sIHsgcmV0dXJuIHNjaGVkdWxlcy5HZXQoaXNzdWVyLlN0cmluZygpKSAhPSBuaWwgfQoKLy8gU2NoZWR1bGVPZiByZXR1cm5zIGFuIGlzc3VlcidzIGN1cnJlbnQgc2NoZWR1bGUgYXMgaXRzIGVkZ2UgYW5kIHJhdGUgc2xpY2VzLAovLyBvciB0d28gZW1wdHkgc2xpY2VzIGlmIG5vbmUgaXMgZGVjbGFyZWQuCmZ1bmMgU2NoZWR1bGVPZihpc3N1ZXIgYWRkcmVzcykgKGVkZ2VzLCByYXRlcyBbXWludDY0KSB7CglzdiA6PSBzY2hlZHVsZXMuR2V0KGlzc3Vlci5TdHJpbmcoKSkKCWlmIHN2ID09IG5pbCB7CgkJcmV0dXJuIG5pbCwgbmlsCgl9CglzIDo9IHN2Lih0aWVycy5TY2hlZHVsZSkKCXJldHVybiBzLkVkZ2VzKCksIHMuUmF0ZXMoKQp9CgovLyBBc3Nlc3NtZW50SW5mbyByZXR1cm5zIGEgZnJvemVuIGFzc2Vzc21lbnQncyBmaWVsZHMuIFBhbmljcyBvbiBhbiB1bmtub3duCi8vIHNlcXVlbmNlLgpmdW5jIEFzc2Vzc21lbnRJbmZvKHNlcSBpbnQ2NCkgKGlzc3VlciwgcGF5ZXIgYWRkcmVzcywgaW52b2ljZUlELCBvdXRzdGFuZGluZywgb3ZlcmR1ZUJ5LCBwZW5hbHR5LCBhc3Nlc3NlZEF0IGludDY0KSB7CglhIDo9IG11c3RBc3Nlc3NtZW50KHNlcSkKCS8vIGludm9pY2VJRC9vdXRzdGFuZGluZy9vdmVyZHVlQnkvcGVuYWx0eS9hc3Nlc3NlZEF0IGFyZSBpbnQ2NDsgaXNzdWVyIGFuZAoJLy8gcGF5ZXIgYXJlIGFkZHJlc3NlcywgcmV0dXJuZWQgZmlyc3QuCglyZXR1cm4gYS5pc3N1ZXIsIGEucGF5ZXIsIGEuaW52b2ljZUlELCBhLm91dHN0YW5kaW5nLCBhLm92ZXJkdWVCeSwgYS5wZW5hbHR5LCBhLmFzc2Vzc2VkQXQKfQoKLy8gQXNzZXNzbWVudFNjaGVkdWxlIHJldHVybnMgdGhlIHNjaGVkdWxlIHNuYXBzaG90IGFuIGFzc2Vzc21lbnQgd2FzIHByaWNlZAovLyB1bmRlciDigJQgdGhlIGVkZ2VzIGFuZCByYXRlcyBmcm96ZW4gd2l0aCBpdCwgd2hpY2ggbWF5IGRpZmZlciBmcm9tIHRoZQovLyBpc3N1ZXIncyBjdXJyZW50IHNjaGVkdWxlLgpmdW5jIEFzc2Vzc21lbnRTY2hlZHVsZShzZXEgaW50NjQpIChlZGdlcywgcmF0ZXMgW11pbnQ2NCkgewoJYSA6PSBtdXN0QXNzZXNzbWVudChzZXEpCglyZXR1cm4gYS5lZGdlcywgYS5yYXRlcwp9CgovLyBIYXNBc3Nlc3NtZW50IHJlcG9ydHMgd2hldGhlciBhIHNlcXVlbmNlIG51bWJlciBuYW1lcyBhIGZyb3plbiBhc3Nlc3NtZW50LgpmdW5jIEhhc0Fzc2Vzc21lbnQoc2VxIGludDY0KSBib29sIHsgcmV0dXJuIGJ5U2VxLkdldChwYWRJRChzZXEpKSAhPSBuaWwgfQoKLy8gQXNzZXNzbWVudHNPZiBpcyB0aGUgbnVtYmVyIG9mIGFzc2Vzc21lbnRzIGFuIGlzc3VlciBoYXMgZnJvemVuLgpmdW5jIEFzc2Vzc21lbnRzT2YoaXNzdWVyIGFkZHJlc3MpIGludDY0IHsKCXYgOj0gaXNzdWVyTnVtLkdldChpc3N1ZXIuU3RyaW5nKCkpCglpZiB2ID09IG5pbCB7CgkJcmV0dXJuIDAKCX0KCXJldHVybiAqdi4oKmludDY0KQp9CgpmdW5jIE51bUFzc2Vzc21lbnRzKCkgaW50NjQgeyByZXR1cm4gbmV4dFNlcSB9CmZ1bmMgSW52b2ljZXMoKSBzdHJpbmcgICAgICB7IHJldHVybiBJbnZvaWNlc1BhdGggfQpmdW5jIEFkZHJlc3MoKSBhZGRyZXNzICAgICAgeyByZXR1cm4gc2VsZiB9CmZ1bmMgSGVpZ2h0KCkgaW50NjQgICAgICAgICB7IHJldHVybiBydW50aW1lLkNoYWluSGVpZ2h0KCkgfQoKLy8gLS0tIGludGVybmFscyAtLS0KCi8vIGNoYXJnZSBwcmljZXMgYW4gb3ZlcmR1ZSBkdXJhdGlvbiBhZ2FpbnN0IGEgc2NoZWR1bGUsIHN1cmZhY2luZyB0aWVycycgb3duCi8vIGVycm9yIGFzIGEgcGFuaWMgcmF0aGVyIHRoYW4gYSBzaWxlbnQgemVyby4gQSB6ZXJvIG9yIG5lZ2F0aXZlIGJhc2UgcHJpY2VzCi8vIHRvIHplcm8gKHRpZXJzIHJlZnVzZXMgYSBuZWdhdGl2ZSBhbW91bnQsIHNvIGl0IGlzIGd1YXJkZWQgaGVyZSkuCmZ1bmMgY2hhcmdlKHMgdGllcnMuU2NoZWR1bGUsIG92ZXJkdWVCeSBpbnQ2NCkgaW50NjQgewoJaWYgb3ZlcmR1ZUJ5IDw9IDAgewoJCXJldHVybiAwCgl9CgljLCBlcnIgOj0gcy5DaGFyZ2Uob3ZlcmR1ZUJ5KQoJaWYgZXJyICE9IG5pbCB7CgkJcGFuaWMoImNoYXJnZTogIiArIGVyci5FcnJvcigpKQoJfQoJcmV0dXJuIGMKfQoKZnVuYyBtdXN0QXNzZXNzbWVudChzZXEgaW50NjQpICphc3Nlc3NtZW50IHsKCXYgOj0gYnlTZXEuR2V0KHBhZElEKHNlcSkpCglpZiB2ID09IG5pbCB7CgkJcGFuaWMoInVua25vd24gYXNzZXNzbWVudCAiICsgaXRvYShzZXEpKQoJfQoJcmV0dXJuIHYuKCphc3Nlc3NtZW50KQp9CgovLyBhc3NlcnROb1NlbmQgcmVmdXNlcyBjb2lucyBvbiBldmVyeSBjcm9zc2luZyBlbnRyeXBvaW50LiBUaGlzIHJlYWxtIGhvbGRzCi8vIG5vdGhpbmcsIHNvIGV2ZXJ5IG9uZSBvZiBpdHMgd3JpdGVzIGlzIG5vbi1wYXlhYmxlLiBSZWFkcyB0aGUgT1JJR0lOCi8vIGVudmVsb3BlLCBzbyBhIHRyYW5zYWN0aW9uIGF0dGFjaGluZyBjb2lucyBhbnl3aGVyZSBpcyByZWZ1c2VkLgpmdW5jIGFzc2VydE5vU2VuZCgpIHsKCWlmICF1bnNhZmUuT3JpZ2luU2VuZCgpLklzWmVybygpIHsKCQlwYW5pYygidGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhY2NlcHQgY29pbnMiKQoJfQp9CgpmdW5jIGNvdW50ZXIodHJlZSAqYXZsLlRyZWUsIGEgYWRkcmVzcykgKmludDY0IHsKCWsgOj0gYS5TdHJpbmcoKQoJaWYgdiA6PSB0cmVlLkdldChrKTsgdiAhPSBuaWwgewoJCXJldHVybiB2LigqaW50NjQpCgl9CgluIDo9IGludDY0KDApCgl0cmVlLlNldChrLCAmbikKCXJldHVybiAmbgp9CgovLyBwYXJzZUludDY0TGlzdCBwYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgaW50NjQgbGlzdCwgYm91bmRpbmcgdGhlIGVsZW1lbnQKLy8gY291bnQgQkVGT1JFIG1hdGVyaWFsaXNpbmcgdmFsdWVzIHNvIGEgbG9uZyBzdHJpbmcgZGllcyBvbiBjb3VudCwgbm90Ci8vIG1lbW9yeSAodGhlIHIvcmVjZWl2YWJsZXMgYm91bmRpbmcgYXJndW1lbnQpLiAiIiBpcyB0aGUgZW1wdHkgbGlzdC4KZnVuYyBwYXJzZUludDY0TGlzdChzIHN0cmluZywgbWF4IGludCwgd2hhdCBzdHJpbmcpIFtdaW50NjQgewoJaWYgcyA9PSAiIiB7CgkJcmV0dXJuIG5pbAoJfQoJdmFyIG91dCBbXWludDY0CglzdGFydCA6PSAwCglmb3IgaSA6PSAwOyBpIDw9IGxlbihzKTsgaSsrIHsKCQlpZiBpIDwgbGVuKHMpICYmIHNbaV0gIT0gJywnIHsKCQkJY29udGludWUKCQl9CgkJaWYgbGVuKG91dCkgPj0gbWF4IHsKCQkJcGFuaWMoInRvbyBtYW55ICIgKyB3aGF0ICsgInM6IGF0IG1vc3QgIiArIHN0cmNvbnYuSXRvYShtYXgpKQoJCX0KCQlmaWVsZCA6PSBzW3N0YXJ0OmldCgkJc3RhcnQgPSBpICsgMQoJCW4sIGVyciA6PSBzdHJjb252LlBhcnNlSW50KHRyaW1TcGFjZXMoZmllbGQpLCAxMCwgNjQpCgkJaWYgZXJyICE9IG5pbCB7CgkJCXBhbmljKCJiYWQgIiArIHdoYXQgKyAiICIgKyBmaWVsZCArICI6ICIgKyBlcnIuRXJyb3IoKSkKCQl9CgkJb3V0ID0gYXBwZW5kKG91dCwgbikKCX0KCXJldHVybiBvdXQKfQoKZnVuYyB0cmltU3BhY2VzKHMgc3RyaW5nKSBzdHJpbmcgewoJaSwgaiA6PSAwLCBsZW4ocykKCWZvciBpIDwgaiAmJiBzW2ldID09ICcgJyB7CgkJaSsrCgl9Cglmb3IgaiA+IGkgJiYgc1tqLTFdID09ICcgJyB7CgkJai0tCgl9CglyZXR1cm4gc1tpOmpdCn0KCmZ1bmMgcGFkSUQoaWQgaW50NjQpIHN0cmluZyB7CglzIDo9IHN0cmNvbnYuRm9ybWF0SW50KGlkLCAxMCkKCWZvciBsZW4ocykgPCAxMiB7CgkJcyA9ICIwIiArIHMKCX0KCXJldHVybiBzCn0KCmZ1bmMgaXRvYShuIGludDY0KSBzdHJpbmcgeyByZXR1cm4gc3RyY29udi5Gb3JtYXRJbnQobiwgMTApIH0KCi8vIC0tLSBSZW5kZXIgLS0tCgovLyBSZW5kZXIgc2hvd3MgdGhlIGNhdGFsb2cgYXQgIiIsIGFuIGFzc2Vzc21lbnQgYXQgInNlcS88bj4iLCBhbmQgYW4gaXNzdWVyJ3MKLy8gc2NoZWR1bGUgYXQgImlzc3Vlci88YWRkcj4iLiBFdmVyeSB1c2VyLXN1cHBsaWVkIHZhbHVlIHJlbmRlcmVkIGJldHdlZW4KLy8gdGFibGUgcGlwZXMgaXMgZXNjYXBlZCB3aXRoIHNhbml0aXplLlRhYmxlQ2VsbDsgYWRkcmVzc2VzIGNhcnJ5IG5vIG1hcmtkb3duCi8vIG1ldGFjaGFyYWN0ZXIgYnV0IGFyZSBwYXNzZWQgdGhyb3VnaCBJbmxpbmVUZXh0IGZvciB0aGUgc2FtZSByZWFzb24gdGhlCi8vIHNpYmxpbmcgcmVhbG1zIGRvLgpmdW5jIFJlbmRlcihwYXRoIHN0cmluZykgc3RyaW5nIHsKCXN3aXRjaCB7CgljYXNlIHBhdGggPT0gIiI6CgkJcmV0dXJuIHJlbmRlckhvbWUoKQoJY2FzZSBoYXNQcmVmaXgocGF0aCwgInNlcS8iKToKCQlyZXR1cm4gcmVuZGVyQXNzZXNzbWVudChwYXRoW2xlbigic2VxLyIpOl0pCgljYXNlIGhhc1ByZWZpeChwYXRoLCAiaXNzdWVyLyIpOgoJCXJldHVybiByZW5kZXJJc3N1ZXIocGF0aFtsZW4oImlzc3Vlci8iKTpdKQoJZGVmYXVsdDoKCQlyZXR1cm4gInVua25vd24gcGF0aDsgdHJ5IFwiXCIsIFwic2VxLzxuPlwiIG9yIFwiaXNzdWVyLzxhZGRyZXNzPlwiXG4iCgl9Cn0KCmZ1bmMgcmVuZGVySG9tZSgpIHN0cmluZyB7CglvdXQgOj0gIiMgbGF0ZWZlZXMg4oCUIGdyYWR1YXRlZCBsYXRlLWZlZSBwZW5hbHRpZXMgb3ZlciAiICsgc2FuaXRpemUuSW5saW5lVGV4dChJbnZvaWNlc1BhdGgpICsgIlxuXG4iCglvdXQgKz0gIkFzc2Vzc21lbnRzOiAiICsgaXRvYShuZXh0U2VxKSArICIuIEEgcGVuYWx0eSBpcyBhIHB1Ymxpc2hlZCBDTEFJTSwgbm90IGEgY29sbGVjdGVkIGNoYXJnZTsgdGhpcyByZWFsbSBob2xkcyBubyBjb2lucy5cblxuIgoJb3V0ICs9ICJ8IHNlcSB8IGlzc3VlciB8IGludm9pY2UgfCBvdmVyZHVlIChibG9ja3MpIHwgb3V0c3RhbmRpbmcgfCBwZW5hbHR5IHxcbnwtLS18LS0tfC0tLXwtLS18LS0tfC0tLXxcbiIKCXNob3duIDo9IGludDY0KDApCgkvLyBOZXdlc3QtZmlyc3Q6IHRoZSBtb3N0IHJlY2VudCBhc3Nlc3NtZW50cyBhcmUgdGhlIG9uZXMgYSByZWFkZXIgd2FudHMsCgkvLyBhbmQgb2xkZXN0LWZpcnN0IHVuZGVyIGEgY2FwIGxldHMgZWFybHkgc2VxcyBvd24gdGhlIHBhZ2UgZm9yZXZlcgoJLy8gKHIvbWV0ZXJzIGF1ZGl0IGZpbmRpbmcgWTIpLgoJZm9yIHNlcSA6PSBuZXh0U2VxIC0gMTsgc2VxID49IDAgJiYgc2hvd24gPCBSZW5kZXJMaW1pdDsgc2VxLS0gewoJCXYgOj0gYnlTZXEuR2V0KHBhZElEKHNlcSkpCgkJaWYgdiA9PSBuaWwgewoJCQljb250aW51ZQoJCX0KCQlhIDo9IHYuKCphc3Nlc3NtZW50KQoJCW91dCArPSAifCAiICsgaXRvYShhLnNlcSkgKyAiIHwgIiArIHNhbml0aXplLlRhYmxlQ2VsbChhLmlzc3Vlci5TdHJpbmcoKSkgKyAiIHwgIiArCgkJCWl0b2EoYS5pbnZvaWNlSUQpICsgIiB8ICIgKyBpdG9hKGEub3ZlcmR1ZUJ5KSArICIgfCAiICsgaXRvYShhLm91dHN0YW5kaW5nKSArIERlbm9tICsKCQkJIiB8ICIgKyBpdG9hKGEucGVuYWx0eSkgKyBEZW5vbSArICIgfFxuIgoJCXNob3duKysKCX0KCWlmIG5leHRTZXEgPiBzaG93biB7CgkJb3V0ICs9ICJcbigiICsgaXRvYShzaG93bikgKyAiIG1vc3QgcmVjZW50IG9mICIgKyBpdG9hKG5leHRTZXEpICsgIilcbiIKCX0KCXJldHVybiBvdXQKfQoKZnVuYyByZW5kZXJBc3Nlc3NtZW50KHNlcVN0ciBzdHJpbmcpIHN0cmluZyB7CglzZXEsIGVyciA6PSBzdHJjb252LlBhcnNlSW50KHNlcVN0ciwgMTAsIDY0KQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuICJiYWQgc2VxdWVuY2VcbiIKCX0KCXYgOj0gYnlTZXEuR2V0KHBhZElEKHNlcSkpCglpZiB2ID09IG5pbCB7CgkJcmV0dXJuICJ1bmtub3duIGFzc2Vzc21lbnQgIiArIHNlcVN0ciArICJcbiIKCX0KCWEgOj0gdi4oKmFzc2Vzc21lbnQpCglvdXQgOj0gIiMgYXNzZXNzbWVudCAiICsgaXRvYShhLnNlcSkgKyAiXG5cbiIKCW91dCArPSAiLSBpc3N1ZXIgKGNyZWRpdG9yKTogIiArIGEuaXNzdWVyLlN0cmluZygpICsgIlxuIgoJb3V0ICs9ICItIHBheWVyIChkZWJ0b3IpOiAiICsgYS5wYXllci5TdHJpbmcoKSArICJcbiIKCW91dCArPSAiLSBpbnZvaWNlICIgKyBpdG9hKGEuaW52b2ljZUlEKSArICIgaW4gIiArIHNhbml0aXplLklubGluZVRleHQoSW52b2ljZXNQYXRoKSArICJcbiIKCW91dCArPSAiLSBmYWNlICIgKyBpdG9hKGEuYW1vdW50KSArIERlbm9tICsgIiwgcGFpZCAiICsgaXRvYShhLnBhaWQpICsgRGVub20gKwoJCSIsIG91dHN0YW5kaW5nICIgKyBpdG9hKGEub3V0c3RhbmRpbmcpICsgRGVub20gKyAiXG4iCglvdXQgKz0gIi0gZHVlIGF0IGhlaWdodCAiICsgaXRvYShhLmR1ZUhlaWdodCkgKyAiLCBhc3Nlc3NlZCBhdCAiICsgaXRvYShhLmFzc2Vzc2VkQXQpICsKCQkiICgiICsgaXRvYShhLm92ZXJkdWVCeSkgKyAiIGJsb2NrcyBvdmVyZHVlKVxuIgoJb3V0ICs9ICItICoqcGVuYWx0eTogIiArIGl0b2EoYS5wZW5hbHR5KSArIERlbm9tICsgIioqLCBwcmljZWQgb24gdGhlIG92ZXJkdWUgZHVyYXRpb25cblxuIgoJb3V0ICs9IHJlbmRlclNjaGVkdWxlKGEuZWRnZXMsIGEucmF0ZXMpCglyZXR1cm4gb3V0Cn0KCmZ1bmMgcmVuZGVySXNzdWVyKGFkZHIgc3RyaW5nKSBzdHJpbmcgewoJaXNzdWVyIDo9IGFkZHJlc3MoYWRkcikKCXN2IDo9IHNjaGVkdWxlcy5HZXQoYWRkcikKCWlmIHN2ID09IG5pbCB7CgkJcmV0dXJuICJpc3N1ZXIgIiArIHNhbml0aXplLklubGluZVRleHQoYWRkcikgKyAiIGhhcyBubyBsYXRlLWZlZSBzY2hlZHVsZVxuIgoJfQoJcyA6PSBzdi4odGllcnMuU2NoZWR1bGUpCglvdXQgOj0gIiMgbGF0ZS1mZWUgc2NoZWR1bGUgZm9yICIgKyBzYW5pdGl6ZS5JbmxpbmVUZXh0KGFkZHIpICsgIlxuXG4iCglvdXQgKz0gIkZyb3plbiBhc3Nlc3NtZW50cyBieSB0aGlzIGlzc3VlcjogIiArIGl0b2EoQXNzZXNzbWVudHNPZihpc3N1ZXIpKSArICJcblxuIgoJb3V0ICs9IHJlbmRlclNjaGVkdWxlKHMuRWRnZXMoKSwgcy5SYXRlcygpKQoJcmV0dXJuIG91dAp9CgpmdW5jIHJlbmRlclNjaGVkdWxlKGVkZ2VzLCByYXRlcyBbXWludDY0KSBzdHJpbmcgewoJb3V0IDo9ICJTY2hlZHVsZSBvdmVyIG92ZXJkdWUgYmxvY2tzICh1Z25vdCBhY2NydWVkIHBlciAxMDAwMCBibG9ja3MsIGJ5IHRpZXIpOlxuXG4iCglvdXQgKz0gInwgZnJvbSAoYmxvY2tzIG92ZXJkdWUpIHwgcmF0ZSAoLzEwMDAwKSB8XG58LS0tfC0tLXxcbiIKCWxvIDo9IGludDY0KDApCglmb3IgaSwgciA6PSByYW5nZSByYXRlcyB7CgkJb3V0ICs9ICJ8ICIgKyBpdG9hKGxvKSArICIgfCAiICsgaXRvYShyKSArICIgfFxuIgoJCWlmIGkgPCBsZW4oZWRnZXMpIHsKCQkJbG8gPSBlZGdlc1tpXQoJCX0KCX0KCXJldHVybiBvdXQKfQoKZnVuYyBoYXNQcmVmaXgocywgcCBzdHJpbmcpIGJvb2wgeyByZXR1cm4gbGVuKHMpID49IGxlbihwKSAmJiBzWzpsZW4ocCldID09IHAgfQoiDTEwMDAwMDAwdWdub3QSEQj8iNkiEgo3Mjc2NHVnbm90GqgBCjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohAhb0MXbJJXjONC6Z4m+tKff+fEbtcENW/6uTFX9iuw6YEkBz4JgoxBSaDJN3yRB0921tvPnmYYQkfeSHUpyeck/K7Vo7JpjyOojg6MNiozzYDvByo6zJ7E1B7fZvv286KjxqGihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl"
  }
}