{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "hash": "6OJK6Bbfvz7kRxcIrkNj2Vv1oHtuq5YcLthxg6pwmRA=",
    "height": "329571",
    "index": 0,
    "tx_result": {
      "ResponseBase": {
        "Error": null,
        "Data": null,
        "Events": null,
        "Log": "msg:0,success:true,log:,events:[]",
        "Info": ""
      },
      "GasWanted": "38980776",
      "GasUsed": "25987174"
    },
    "tx": "CtSRAQoML3ZtLm1fYWRkcGtnEsKRAQooZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMxKFkQEKCnN0YXRlbWVudHMSPmduby5sYW5kL3AvZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMy9zdGF0ZW1lbnRzGmUKC2dub21vZC50b21sElZtb2R1bGUgPSAiZ25vLmxhbmQvcC9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL3N0YXRlbWVudHMiCmdubyA9ICIwLjkiChrOjwEKDnN0YXRlbWVudHMuZ25vErqPAS8vIFBhY2thZ2Ugc3RhdGVtZW50cyB0dXJucyBhIGNoYXJ0IG9mIGFjY291bnRzIGludG8gY2xhc3NpZmllZCBmaW5hbmNpYWwKLy8gc3RhdGVtZW50cywgd2hlcmUgdGhlIHNlY3Rpb24sIHRoZSBzaWduIGFuZCBldmVyeSB0b3RhbCBhcmUgZnVuY3Rpb25zIG9mCi8vIGVhY2ggYWNjb3VudCdzIGtpbmQgYW5kIG5vbmUgb2YgdGhlbSBpcyBzdXBwbGllZCBieSB0aGUgY2FsbGVyLgovLwovLyBBIHJlYWxtIGhvbGRzIHRoZSBjaGFydCDigJQgW3Avam91cm5hbF0ga2VlcHMgb25lLCBhbmQgYSByZWFsbSB3cmFwcGluZyBpdAovLyBwdWJsaXNoZXMgb25lIOKAlCBhbmQgYXNrcyB0aGlzIHBhY2thZ2Ugd2hhdCB0aGUgc3RhdGVtZW50cyBzYXkuIE5vdGhpbmcgaGVyZQovLyByZWFkcyB0aGUgY2hhaW4sIGhvbGRzIHN0YXRlLCBvciBkZWNpZGVzIHdoYXQgYW4gYWNjb3VudCBpczogaXQgdGFrZXMKLy8gW2pvdXJuYWwuQWNjb3VudF0gcm93cyBhbmQgcmV0dXJucyBmaWd1cmVzLgovLwovLwlyb3dzIDo9IFtdam91cm5hbC5BY2NvdW50eyAvKiBhc2NlbmRpbmcgYnkgQ29kZSAqLyB9Ci8vCXN0LCBlcnIgOj0gRGVyaXZlKHJvd3MpCi8vCS8vIHN0LkFzc2V0cywgc3QuQ2xhaW1zLCBzdC5DdW11bGF0aXZlTmV0LCBzdC5BYm5vcm1hbAovLwovLyAjIFRoZSB0aHJlZS1idWNrZXQgcGFydGl0aW9uCi8vCi8vIFtqb3VybmFsXSBwYXJ0aXRpb25zIHRoZSBmaXZlIGtpbmRzIGluIHR3bywgYnkgbm9ybWFsIGJhbGFuY2UuIEEgc3RhdGVtZW50Ci8vIHBhcnRpdGlvbnMgdGhlbSBpbiB0aHJlZSwgYnkgd2hlcmUgdGhlIGZpZ3VyZSBpcyBwcmVzZW50ZWQ6Ci8vCi8vCVNlY3Rpb25Bc3NldHMgICAgICA6IHtBc3NldH0gICAgICAgICAgICAgICAgIGJhbGFuY2Ugc2hlZXQsIGRlYml0IHNpZGUKLy8JU2VjdGlvbkNsYWltcyAgICAgIDoge0xpYWJpbGl0eSwgRXF1aXR5fSAgICAgYmFsYW5jZSBzaGVldCwgY3JlZGl0IHNpZGUKLy8JU2VjdGlvblBlcmZvcm1hbmNlIDoge1JldmVudWUsIEV4cGVuc2V9ICAgICAgaW5jb21lIHN0YXRlbWVudAovLwovLyBbU2VjdGlvbk9mXSBpcyB0aGUgd2hvbGUgbWFwcGluZyBhbmQgaXQgaXMgZmFpbC1jbG9zZWQ6IGEgS2luZCBvdXRzaWRlIDEuLjUKLy8gaXMgW0VyckludmFsaWRLaW5kXSwgbmV2ZXIgYSBidWNrZXQuIFRoZSB6ZXJvIEtpbmQgbWF0dGVycyBoZXJlIGJlY2F1c2UKLy8gW2pvdXJuYWwuS2luZC5Jc0RlYml0Tm9ybWFsXSByZXBvcnRzIGl0IGFzIGNyZWRpdC1ub3JtYWwsIHNvIGEgc2lsZW50Ci8vIGZhbGx0aHJvdWdoIHdvdWxkIG5vdCBkcm9wIHRoZSByb3cg4oCUIGl0IHdvdWxkIGZpbGUgaXQgdW5kZXIgY2xhaW1zIGFuZAovLyBwcm9kdWNlIGEgc3RhdGVtZW50IHRoYXQgYmFsYW5jZXMgYW5kIGlzIHdyb25nLgovLwovLyAjIFRoZXJlIGlzIG5vIEJhbGFuY2VzIG1ldGhvZCwgYW5kIHRoZSByZWFzb24gaXMgdGhlIHByb2R1Y3QncyBvd24gYXJpdGhtZXRpYwovLwovLyBXcml0ZSBBLCBMLCBRLCBSIGFuZCBYIGZvciB0aGUgbmF0dXJhbC1zaWduIHRvdGFscyBvZiB0aGUgZml2ZSBraW5kcywgZWFjaAovLyB0aGUgc3VtIG9mIFtqb3VybmFsLkFjY291bnQuQmFsYW5jZV0gb3ZlciBpdHMga2luZCwgYW5kIE5JID0gUiAtIFguIEZvciBhbnkKLy8gc2luZ2xlIGFjY291bnQsIEJhbGFuY2UoKSBpcyBSYXdEZWx0YSgpIGZvciBhIGRlYml0LW5vcm1hbCBraW5kIGFuZCBpdHMKLy8gbmVnYXRpb24gb3RoZXJ3aXNlLCBzbwovLwovLwlzdW0gb3ZlciBldmVyeSBhY2NvdW50IG9mIFJhd0RlbHRhICA9ICBBIC0gTCAtIFEgLSBSICsgWAovLwovLyBhbmQgaW4gYSBiYWxhbmNlZCBib29rIHRoYXQgc3VtIGlzIHRvdGFsRGViaXRzIC0gdG90YWxDcmVkaXRzID0gMC4gSGVuY2UKLy8KLy8JQSA9IEwgKyBRICsgTkkKLy8KLy8gd2hpY2ggaXMgdGhlIGJhbGFuY2Ugc2hlZXQgaWRlbnRpdHkuIFRoZSBjb25zZXF1ZW5jZSBpcyB1bmNvbWZvcnRhYmxlIGFuZCBpcwovLyBzdGF0ZWQgaGVyZSByYXRoZXIgdGhhbiBkaXNjb3ZlcmVkIGJ5IGEgcmVhZGVyOiAqKm92ZXIgYSBjaGFydCBkcmF3biBmcm9tIGEKLy8gW2pvdXJuYWwuQm9va10gdGhlIGlkZW50aXR5IGlzIGEgY29uc3RhbnQgdHJ1ZSoqLCBhbGdlYnJhaWNhbGx5IGlkZW50aWNhbCB0bwovLyBgdG90YWxEZWJpdHMgPT0gdG90YWxDcmVkaXRzYCwgd2hpY2ggdGhlIEJvb2sgZW5mb3JjZXMgb24gZXZlcnkgUG9zdC4gSXQgaXMKLy8gdHJ1ZSBvZiBhIGNoYXJ0IHdob3NlIGV2ZXJ5IGFjY291bnQgaXMgY2xhc3NpZmllZCBiYWNrd2FyZHMuIEEgYEJhbGFuY2VzKClgCi8vIHJldHVybmluZyB0aGF0IGNvbXBhcmlzb24gd291bGQgYmUgYSBjaGVjayB0aGF0IGNhbm5vdCBmYWlsLCB3aGljaCB0aGlzCi8vIHByb2plY3QgaGFzIHNoaXBwZWQgYmVmb3JlIGFuZCBkb2VzIG5vdCBzaGlwIGFnYWluIOKAlCBzZWUgRElTQ09WRVJZLm1kIMKnIDQuCi8vCi8vIFRoZSBpZGVudGl0eSBpcyBOT1QgdmFjdW91cyBvdmVyIHRoaXMgcGFja2FnZSdzIG93biBpbnB1dCBkb21haW4sIGJlY2F1c2UKLy8gcm93cyBtYXkgY29tZSBmcm9tIGFueXdoZXJlIGFuZCBhIGhhbmQtYnVpbHQgc2V0IG5lZWQgbm90IHN1bSB0byB6ZXJvLiBUaGF0Ci8vIHNjb3BlIGlzIHRoZSB3aG9sZSBjb250ZW50IG9mIHRoZSBjbGFpbSwgYW5kIGRyb3BwaW5nIGEgc2NvcGUgaXMgdGhlCi8vIGRvY3VtZW50YXRpb24gZGVmZWN0IHRoaXMgcHJvamVjdCBoYXMgcmVjb3JkZWQgbW9zdCBvZnRlbi4gU286Ci8vCi8vICAgLSBbU3RhdGVtZW50LkFzc2V0c10gYW5kIFtTdGF0ZW1lbnQuQ2xhaW1zXSBhcmUgYm90aCByZXBvcnRlZCwgYXMgZmlndXJlcy4KLy8gICAtIFRoZWlyIGVxdWFsaXR5IGlzIGFzc2VydGVkIGluIHRoZSB0ZXN0cywgaW4gYm90aCBkaXJlY3Rpb25zOiBoZWxkIG92ZXIgYQovLyAgICAgQm9vay1kZXJpdmVkIGNoYXJ0LCBhbmQgc2hvd24gdG8gc3Vydml2ZSBhIGNoYXJ0IG1pc2NvZGVkIG9uIHB1cnBvc2UsCi8vICAgICB3aGljaCBpcyB3aGF0IG1ha2VzIGl0IHZhY3VvdXMgdGhlcmUgcmF0aGVyIHRoYW4gcmVhc3N1cmluZy4KLy8gICAtIE5vdGhpbmcgaW4gdGhlIEFQSSBvZmZlcnMgdGhhdCBjb21wYXJpc29uIGFzIGEgdmVyZGljdC4KLy8KLy8gIyBXaGF0IHNoaXBzIGluc3RlYWQ6IHRoZSBhYm5vcm1hbGl0eSBjZW5zdXMKLy8KLy8gW2pvdXJuYWwuQWNjb3VudC5CYWxhbmNlXSBpcyBuYXR1cmFsLXNpZ24gYW5kIGpvdXJuYWwncyBvd24gZG9jIHNheXMgYQovLyBuZWdhdGl2ZSByZXN1bHQgaXMgImEgcmVhbCBzaWduYWwgKGEgY29udHJhIHBvc2l0aW9uKSIuIFdoYXQgZGlkIG5vdCBleGlzdAovLyBpcyB0aGUgcm9sbC11cDogZmluZGluZyBhbiBhYm5vcm1hbCBhY2NvdW50IG1lYW50IGFscmVhZHkga25vd2luZyB0byBsb29rIGF0Ci8vIGl0LiBbU3RhdGVtZW50LkFibm9ybWFsXSBsaXN0cyBldmVyeSByb3cgd2hvc2UgYmFsYW5jZSBydW5zIGFnYWluc3QgaXRzCi8vIGtpbmQsIGFuZCBbU3RhdGVtZW50LkFibm9ybWFsSW5dIGNvdW50cyB0aGVtIHBlciBzZWN0aW9uLiBJdCBzdXJ2aXZlcyBhCi8vIGJhbGFuY2VkIGJvb2ssIHdoaWNoIHRoZSBpZGVudGl0eSBkb2VzIG5vdC4KLy8KLy8gSXQgaXMgdGhlIG9ubHkgcGFydGlhbCBhbnN3ZXIgaW4gdGhpcyBwb3J0Zm9saW8gdG8gam91cm5hbCdzIG9ibGlnYXRpb24gNyDigJQKLy8gImEgS2luZCBzZXQgd3JvbmdseSBhdCBPcGVuIHRpbWUgaXMgdW5kZXRlY3RhYmxlIGhlcmUgYW5kIHVuZGV0ZWN0YWJsZQovLyBhbnl3aGVyZSBlbHNlIGluIHRoaXMgcGFja2FnZSIg4oCUIGFuZCBpdCBpcyBzb3VuZCBidXQgaW5jb21wbGV0ZSwgd2l0aCB0aGUKLy8gaW5jb21wbGV0ZW5lc3MgZXhhY3RseSBjaGFyYWN0ZXJpc2FibGU6Ci8vCi8vICAgLSBJdCBDQVRDSEVTIGEgbWlzY2xhc3NpZmljYXRpb24gdGhhdCBjcm9zc2VzIHRoZSBkZWJpdC9jcmVkaXQtbm9ybWFsCi8vICAgICBib3VuZGFyeSBhbmQgd2hvc2UgYWNjb3VudCBoYXMgYSBub24temVybyBiYWxhbmNlLiBBIHBheWFibGVzIGFjY291bnQKLy8gICAgIGNvZGVkIGFzIGFuIGFzc2V0IGFjY3VtdWxhdGVzIGNyZWRpdHMgYW5kIHJlYWRzIG5lZ2F0aXZlLgovLyAgIC0gSXQgQ0FOTk9UIENBVENIIGEgbWlzY2xhc3NpZmljYXRpb24gdGhhdCBzdGF5cyBvbiB0aGUgc2FtZSBzaWRlOgovLyAgICAgTGlhYmlsaXR5IDwtPiBFcXVpdHkgPC0+IFJldmVudWUsIG9yIEFzc2V0IDwtPiBFeHBlbnNlLiBCb3RoIHN1YnRvdGFscwovLyAgICAgbW92ZSwgbm8gYmFsYW5jZSBnb2VzIG5lZ2F0aXZlLCBhbmQgbm90aGluZyBhbnl3aGVyZSBkZXRlY3RzIGl0LgovLyAgICAgT2JsaWdhdGlvbiA3IGlzIG5hcnJvd2VkLCBub3QgY2xvc2VkLgovLyAgIC0gSXQgaGFzIGEgRkFMU0UtUE9TSVRJVkUgTU9ERSB0aGF0IGlzIG5vdCBhIGRlZmVjdDogYSBnZW51aW5lIGNvbnRyYQovLyAgICAgYWNjb3VudCDigJQgYWNjdW11bGF0ZWQgZGVwcmVjaWF0aW9uIHVuZGVyIGFzc2V0cywgYSBzYWxlcyByZXR1cm4gdW5kZXIKLy8gICAgIHJldmVudWUg4oCUIGlzIGxlZ2l0aW1hdGVseSBhYm5vcm1hbC1zaWduZWQuIFRoZSBjZW5zdXMgaXMgYSBmaW5kaW5nIHRvCi8vICAgICByZWFkLCBuZXZlciBhIHZlcmRpY3QuCi8vCi8vICMgVGhlIGluY29tZSBzdGF0ZW1lbnQgaXMgY3VtdWxhdGl2ZSBhbmQgY2FuIGJlIG5vdGhpbmcgZWxzZQovLwovLyBbam91cm5hbC5Cb29rLkNsb3NlXSBpcyBhIGJhY2tkYXRpbmcgc2VhbDogaXQgcmVmdXNlcyBlbnRyaWVzIGRhdGVkIGF0IG9yCi8vIGJlZm9yZSBhIGN1dG9mZiBhbmQgZG9lcyBub3Qgc3dlZXAgbm9taW5hbCBhY2NvdW50cyBpbnRvIGVxdWl0eS4gVGhlcmUgaXMgbm8KLy8gcmV0YWluZWQtZWFybmluZ3MgYWNjb3VudCBhbmQgbm8gY2xvc2luZyBlbnRyeSwgc28gcmV2ZW51ZSBhbmQgZXhwZW5zZQovLyBhY2N1bXVsYXRlIGZyb20gdGhlIGJvb2sncyBmaXJzdCBwb3N0aW5nIGZvcmV2ZXIuIFRoZSBmaWVsZCBuYW1lcyBjYXJyeSB0aGUKLy8gd29yZCDigJQgW1N0YXRlbWVudC5DdW11bGF0aXZlUmV2ZW51ZV0sIFtTdGF0ZW1lbnQuQ3VtdWxhdGl2ZUV4cGVuc2VzXSwKLy8gW1N0YXRlbWVudC5DdW11bGF0aXZlTmV0XSDigJQgYmVjYXVzZSBhIHJlYWRlciB3aG8gdGFrZXMgdGhlbSBmb3IgYSBwZXJpb2QKLy8gZmlndXJlIG1pc3JlYWRzIGV2ZXJ5IHN0YXRlbWVudCB0aGlzIHBhY2thZ2UgcHJvZHVjZXMuCi8vCi8vIFtTdGF0ZW1lbnQuQ2xhaW1zXSB0aGVyZWZvcmUgaW5jbHVkZXMgQ3VtdWxhdGl2ZU5ldCBhcyBhbiBleHBsaWNpdAovLyByZWNvbmNpbGluZyBsaW5lLiBBIHJlYWRlciB3aG8gY2hlY2tzIExpYWJpbGl0aWVzICsgRXF1aXR5IGFnYWluc3QgQXNzZXRzCi8vIGFuZCBmaW5kcyBpdCBzaG9ydCBieSBleGFjdGx5IEN1bXVsYXRpdmVOZXQgaXMgbm90IGxvb2tpbmcgYXQgYSBidWcuIEEKLy8gcGVyaW9kIGluY29tZSBzdGF0ZW1lbnQgbmVlZHMgZW50cnktbGV2ZWwgZGF0YSBhbmQgaXMgb3V0IG9mIHNjb3BlOyBzbyBpcyBhCi8vIGNhc2gtZmxvdyBzdGF0ZW1lbnQsIHdoaWNoIG5lZWRzIGEgY2FzaC12cy1hY2NydWFsIGNsYXNzaWZpY2F0aW9uCi8vIFtqb3VybmFsLlBvc3RpbmddIGRvZXMgbm90IGNhcnJ5LgovLwovLyAjIFdoYXQgdGhpcyBwYWNrYWdlIGRvZXMgbm90IGNsYWltCi8vCi8vICAgLSAqKk5vdGhpbmcgYWJvdXQgbW9uZXkuKiogQSBzdGF0ZW1lbnQgaXMgYSByZXBvcnQgYWJvdXQgYSBib29rLCBhbmQgYSBib29rCi8vICAgICBpcyBhIHNldCBvZiBjbGFpbXMgYnkgaXRzIG93bmVyIHdpdGggbm8gY3VzdG9keSBiZWhpbmQgaXQuIFRoaXMgcGFja2FnZQovLyAgICAgbmV2ZXIgc2VlcyBhIGNvaW4uIEEgcmVhbG0gcHVibGlzaGluZyBpdHMgb3V0cHV0IG11c3Qgc2F5IHNvIGxvdWRseTogYQovLyAgICAgcHVibGlzaGVkIHN0YXRlbWVudCBhZGRzIGFwcGFyZW50IGF1dGhvcml0eSB0byBhIHNlbGYtcmVwb3J0LCBhbmQgdGhhdAovLyAgICAgaXMgdGhlIG9uZSB3YXkgdGhpcyBwcm9kdWN0IGNhbiBtaXNsZWFkIHNvbWVvbmUuCi8vICAgLSAqKk5vIGF1ZGl0LioqIEV2ZXJ5IGZpZ3VyZSBoZXJlIGlzIGRlcml2ZWQgZnJvbSByb3dzIHRoZSBjYWxsZXIgc3VwcGxpZWQuCi8vICAgICBEZXJpdmluZyB0aGVtIGZhaXRoZnVsbHkgaXMgdGhlIGd1YXJhbnRlZTsgdGhhdCB0aGV5IGRlc2NyaWJlIGFueXRoaW5nCi8vICAgICByZWFsIGlzIG5vdC4KLy8gICAtICoqVHdvIHN0YXRlbWVudHMgYW5kIGEgY2Vuc3VzKiosIG5vdCBhIHN0YXRlbWVudCBzZXQuIE5vIHN0YXRlbWVudCBvZgovLyAgICAgY2hhbmdlcyBpbiBlcXVpdHksIG5vIG5vdGVzLCBubyBjb21wYXJhdGl2ZXMuCi8vCi8vIFtwL2pvdXJuYWxdOiAvcC9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL2pvdXJuYWwKcGFja2FnZSBzdGF0ZW1lbnRzCgppbXBvcnQgKAoJImVycm9ycyIKCgkiZ25vLmxhbmQvcC9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL2pvdXJuYWwiCikKCi8vIE1heFJvd3MgYm91bmRzIHRoZSBjaGFydCBbRGVyaXZlXSB3aWxsIGNsYXNzaWZ5LCBhbmQgc28gYm91bmRzIGl0cyBvbmx5Ci8vIGxvb3AuIEl0IGlzIGpvdXJuYWwncyBvd24gYWNjb3VudCBjYXAsIGJlY2F1c2UgdGhhdCBpcyB0aGUgbGFyZ2VzdCBjaGFydAovLyB0aGlzIGVjb3N5c3RlbSdzIGJvb2trZWVwaW5nIHByaW1pdGl2ZSBjYW4gcHJvZHVjZSwgYW5kIGEgcm93IHNldCBsYXJnZXIKLy8gdGhhbiB0aGF0IGRpZCBub3QgY29tZSBmcm9tIGEgY2hhcnQuCi8vCi8vIFdoYXQgdGhlIGJvdW5kIGNvc3RzLCBzdGF0ZWQgcmF0aGVyIHRoYW4gd2F2ZWQgYXQ6IERlcml2ZSBpcyBvbmUgcGFzcyB3aXRoCi8vIGEgY2hlY2tlZCBhZGQgYW5kIGEgY29tcGFyaXNvbiBwZXIgcm93LCBzbyBhIGNoYXJ0IGF0IHRoZSBsaW1pdCBpcyAxMCwwMDAKLy8gaXRlcmF0aW9ucyBpbiBvbmUgY2FsbC4gQSByZWFsbSB0aGF0IGNsYXNzaWZpZXMgc2V2ZXJhbCBjaGFydHMgaW4gb25lCi8vIHRyYW5zYWN0aW9uLCBvciByZW5kZXJzIHRoZW0sIG11bHRpcGxpZXMgdGhhdC4gVGhlIHJlYWxtIHdyYXBwaW5nIHRoaXMKLy8gcGFja2FnZSB3aWxsIGhhdmUgYSBtdWNoIHNtYWxsZXIgY2FwIG9mIGl0cyBvd24g4oCUIHIvYm9va3MgYWxsb3dzIDEyOCDigJQgYW5kCi8vIHNob3VsZDogdGhpcyBib3VuZCBpcyB0aGUgY2VpbGluZyBhIGNhbGxlciBtYXkgYXNrIGZvciwgbm90IGEgc2l6ZSB3b3J0aAovLyByZWFjaGluZy4KY29uc3QgTWF4Um93cyA9IGpvdXJuYWwuTWF4QWNjb3VudHNMaW1pdAoKLy8gRXJyb3JzIHJldHVybmVkIGJ5IHRoaXMgcGFja2FnZS4KdmFyICgKCS8vIEVyckludmFsaWRLaW5kIGlzIHJldHVybmVkIGZvciBhIHJvdyB3aG9zZSBLaW5kIGlzIG91dHNpZGUgam91cm5hbCdzCgkvLyBmaXZlLiBJdCBpcyBmYWlsLWNsb3NlZCBieSBjaG9pY2U6IHRoZSBhbHRlcm5hdGl2ZSBpcyBhIHJvdyBmaWxlZAoJLy8gdW5kZXIgY2xhaW1zIGJ5IFtqb3VybmFsLktpbmQuSXNEZWJpdE5vcm1hbF0ncyB0cmVhdG1lbnQgb2YgdGhlIHplcm8KCS8vIHZhbHVlLCB3aGljaCB5aWVsZHMgYSBzdGF0ZW1lbnQgdGhhdCBiYWxhbmNlcyBhbmQgbWlzc3RhdGVzLgoJRXJySW52YWxpZEtpbmQgPSBlcnJvcnMuTmV3KCJzdGF0ZW1lbnRzOiB1bmtub3duIGFjY291bnQga2luZCIpCgoJLy8gRXJyUm93c05vdE9yZGVyZWQgaXMgcmV0dXJuZWQgd2hlbiByb3dzIGFyZSBub3QgaW4gc3RyaWN0bHkgYXNjZW5kaW5nCgkvLyBDb2RlIG9yZGVyLiBUaGUgcHJlY29uZGl0aW9uIGRvZXMgdGhyZWUgam9icyBhdCBvbmNlIGFuZCB0aGF0IGlzIHdoeQoJLy8gaXQgaXMgYSBwcmVjb25kaXRpb24gcmF0aGVyIHRoYW4gYW4gaW50ZXJuYWwgc29ydDogaXQgcnVsZXMgb3V0IGEKCS8vIGR1cGxpY2F0ZSBjb2RlIHNpbGVudGx5IGRvdWJsZS1jb3VudGluZyBhIGJhbGFuY2UsIGl0IGtlZXBzCgkvLyBbU3RhdGVtZW50LkFibm9ybWFsXSBpbiBhIGRldGVybWluaXN0aWMgb3JkZXIgYSBSZW5kZXIgY2FuIHJlbHkgb24sCgkvLyBhbmQgaXQgY29zdHMgb25lIHN0cmluZyBjb21wYXJpc29uIHBlciByb3cgaW5zdGVhZCBvZiBhbiBhbGxvY2F0aW9uCgkvLyBhbmQgYSBzb3J0LgoJLy8KCS8vIEEgcm93IHdpdGggYW4gZW1wdHkgQ29kZSBmYWlscyB0aGlzIGNoZWNrLCBzaW5jZSBubyBzdHJpbmcgc29ydHMKCS8vIGJlZm9yZSAiIi4gam91cm5hbCByZWZ1c2VzIGFuIGVtcHR5IGNvZGUgYXQgT3Blbiwgc28gYSBCb29rLWRlcml2ZWQKCS8vIGNoYXJ0IGNhbm5vdCBjb250YWluIG9uZS4KCS8vCgkvLyBFdmVyeSBwcm9kdWNlciBpbiB0aGlzIHBvcnRmb2xpbyBhbHJlYWR5IHNhdGlzZmllcyBpdDoKCS8vIFtqb3VybmFsLkJvb2suSXRlcmF0ZUFjY291bnRzXSB3YWxrcyBhbiBhdmwgdHJlZSBrZXllZCBieSBjb2RlLCBhbmQKCS8vIHIvYm9va3MnIENvZGVzIHBhZ2VzIHRoYXQgc2FtZSBvcmRlci4KCUVyclJvd3NOb3RPcmRlcmVkID0gZXJyb3JzLk5ldygic3RhdGVtZW50czogcm93cyBtdXN0IGJlIGluIHN0cmljdGx5IGFzY2VuZGluZyBjb2RlIG9yZGVyIikKCgkvLyBFcnJUb29NYW55Um93cyBpcyByZXR1cm5lZCB3aGVuIGxlbihyb3dzKSBleGNlZWRzIE1heFJvd3MuCglFcnJUb29NYW55Um93cyA9IGVycm9ycy5OZXcoInN0YXRlbWVudHM6IHJvdyBjb3VudCBleGNlZWRzIE1heFJvd3MiKQoKCS8vIEVyck5lZ2F0aXZlVG90YWxzIGlzIHJldHVybmVkIGZvciBhIHJvdyB3aG9zZSBEZWJpdHMgb3IgQ3JlZGl0cyBjb2x1bW4KCS8vIGlzIG5lZ2F0aXZlLiBTdWNoIGEgcm93IGNhbm5vdCBoYXZlIGNvbWUgZnJvbSBhIFtqb3VybmFsLkJvb2tdOgoJLy8gcG9zdGluZ3MgY2FycnkgcG9zaXRpdmUgYW1vdW50cyBvbmx5IGFuZCBhbiBhY2NvdW50J3MgdHdvIGNvbHVtbnMgYXJlCgkvLyBtb25vdG9uZSBub24tZGVjcmVhc2luZy4KCS8vCgkvLyBJdCBpcyBjaGVja2VkIGZvciBhIHJlYXNvbiBiZXlvbmQgdGlkaW5lc3MsIGFuZCB0aGUgcmVhc29uIGlzIHdoYXQKCS8vIG1ha2VzIHRoaXMgcGFja2FnZSdzIG92ZXJmbG93IHN0b3J5IGNvbXBsZXRlLgoJLy8gW2pvdXJuYWwuQWNjb3VudC5CYWxhbmNlXSBzdWJ0cmFjdHMgb25lIGNvbHVtbiBmcm9tIHRoZSBvdGhlciB3aXRoIG5vCgkvLyBjaGVjayBvZiBpdHMgb3duLCBzbyBhIHJvdyBjYXJyeWluZyBEZWJpdHMgbmVhciBtYXggYW5kIGEgTkVHQVRJVkUKCS8vIENyZWRpdHMgeWllbGRzIGEgV1JBUFBFRCBiYWxhbmNlIGJlZm9yZSBhbnkgYXJpdGhtZXRpYyBoZXJlIHJ1bnMg4oCUIGFuZAoJLy8gbm8gYW1vdW50IG9mIGNoZWNrZWQgYWRkaW5nIGRvd25zdHJlYW0gY2FuIHJlY292ZXIgYSBmaWd1cmUgdGhhdCB3YXMKCS8vIGFscmVhZHkgd3Jvbmcgb24gYXJyaXZhbC4gV2l0aCBib3RoIGNvbHVtbnMgbm9uLW5lZ2F0aXZlIHRoYXQKCS8vIHN1YnRyYWN0aW9uIGxhbmRzIGluIFstbWF4SW50NjQsIG1heEludDY0XSBhbmQgY2Fubm90IHdyYXAsIHdoaWNoIGlzCgkvLyB0aGUgcHJlY29uZGl0aW9uIHRoZSBjaGVja2VkIGFkZHMgaW4gW0Rlcml2ZV0gYXJlIHN1ZmZpY2llbnQgdW5kZXIuCglFcnJOZWdhdGl2ZVRvdGFscyA9IGVycm9ycy5OZXcoInN0YXRlbWVudHM6IGFjY291bnQgY29sdW1uIHRvdGFscyBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpCgoJLy8gRXJyT3ZlcmZsb3cgaXMgcmV0dXJuZWQgd2hlbiBhIHNlY3Rpb24gdG90YWwsIHRoZSBjdW11bGF0aXZlIG5ldCwgb3IKCS8vIHRoZSBjbGFpbXMgc3VidG90YWwgd291bGQgd3JhcCBpbnQ2NC4gTm90aGluZyBpcyByZXBvcnRlZCBwYXJ0aWFsbHk6CgkvLyBhbiBvdmVyZmxvd2luZyBzdGF0ZW1lbnQgaXMgYW4gZXJyb3IsIG5vdCBhIHdyYXBwZWQgbnVtYmVyLCBiZWNhdXNlIGEKCS8vIHdyYXBwZWQgdG90YWwgaXMgYSBmaWd1cmUgYSByZWFkZXIgY2Fubm90IHRlbGwgZnJvbSBhIHJlYWwgb25lLgoJRXJyT3ZlcmZsb3cgPSBlcnJvcnMuTmV3KCJzdGF0ZW1lbnRzOiBpbnQ2NCBvdmVyZmxvdyIpCgoJLy8gRXJySW52YWxpZFNlY3Rpb24gaXMgcmV0dXJuZWQgYnkgW1N0YXRlbWVudC5TZWN0aW9uVG90YWxdIGZvciBhCgkvLyBzZWN0aW9uIG91dHNpZGUgdGhlIGRlY2xhcmVkIHRocmVlLgoJRXJySW52YWxpZFNlY3Rpb24gPSBlcnJvcnMuTmV3KCJzdGF0ZW1lbnRzOiB1bmtub3duIHNlY3Rpb24iKQopCgovLyBTZWN0aW9uIGlzIHdoZXJlIGFuIGFjY291bnQncyBmaWd1cmUgaXMgcHJlc2VudGVkLiBUaGUgemVybyB2YWx1ZSBpcwovLyBkZWxpYmVyYXRlbHkgaW52YWxpZCwgc28gYSBmb3Jnb3R0ZW4gZmllbGQgaXMgYW4gZXJyb3IgcmF0aGVyIHRoYW4gYXNzZXRzLgovLwovLyBUaGUgY29uc3RhbnRzIGNhcnJ5IGEgU2VjdGlvbiBwcmVmaXggb24gcHVycG9zZTogW1N0YXRlbWVudF0gaGFzIGZpZWxkcwovLyBuYW1lZCBBc3NldHMgYW5kIENsYWltcywgYW5kIGJhcmUgY29uc3RhbnRzIG9mIHRoZSBzYW1lIHdvcmRzIHdvdWxkIHJlYWQgYXMKLy8gdGhlIHNhbWUgdGhpbmcgaW4gdHdvIG5hbWVzcGFjZXMuCnR5cGUgU2VjdGlvbiB1aW50OAoKLy8gVGhlIHRocmVlIHN0YXRlbWVudCBzZWN0aW9ucy4KY29uc3QgKAoJU2VjdGlvbkFzc2V0cyAgICAgIFNlY3Rpb24gPSAxIC8vIGJhbGFuY2Ugc2hlZXQsIGRlYml0IHNpZGUKCVNlY3Rpb25DbGFpbXMgICAgICBTZWN0aW9uID0gMiAvLyBiYWxhbmNlIHNoZWV0LCBjcmVkaXQgc2lkZQoJU2VjdGlvblBlcmZvcm1hbmNlIFNlY3Rpb24gPSAzIC8vIGluY29tZSBzdGF0ZW1lbnQKKQoKLy8gVmFsaWQgcmVwb3J0cyB3aGV0aGVyIHMgaXMgb25lIG9mIHRoZSB0aHJlZSBzZWN0aW9ucy4KZnVuYyAocyBTZWN0aW9uKSBWYWxpZCgpIGJvb2wgeyByZXR1cm4gcyA+PSBTZWN0aW9uQXNzZXRzICYmIHMgPD0gU2VjdGlvblBlcmZvcm1hbmNlIH0KCi8vIFN0cmluZyByZXR1cm5zIHRoZSBzZWN0aW9uJ3MgbmFtZSwgb3IgImludmFsaWQiIGZvciB0aGUgemVybyB2YWx1ZSBhbmQgYW55Ci8vIHVucmVjb2duaXNlZCBjb2RlLgpmdW5jIChzIFNlY3Rpb24pIFN0cmluZygpIHN0cmluZyB7Cglzd2l0Y2ggcyB7CgljYXNlIFNlY3Rpb25Bc3NldHM6CgkJcmV0dXJuICJhc3NldHMiCgljYXNlIFNlY3Rpb25DbGFpbXM6CgkJcmV0dXJuICJjbGFpbXMiCgljYXNlIFNlY3Rpb25QZXJmb3JtYW5jZToKCQlyZXR1cm4gInBlcmZvcm1hbmNlIgoJfQoJcmV0dXJuICJpbnZhbGlkIgp9CgovLyBTZWN0aW9uT2YgbWFwcyBhbiBhY2NvdW50IGtpbmQgdG8gdGhlIHNlY3Rpb24gaXQgcHJlc2VudHMgaW4uIEFuIGludmFsaWQKLy8ga2luZCBpcyBbRXJySW52YWxpZEtpbmRdOyB0aGVyZSBpcyBubyBkZWZhdWx0IGJ1Y2tldC4KLy8KLy8gVGhpcyBpcyB0aGUgb25seSBwbGFjZSBpbiB0aGUgcGFja2FnZSB0aGF0IGtub3dzIHRoZSBwYXJ0aXRpb24sIGFuZCBpdCBpcwovLyBleHBvcnRlZCBzbyBhIGNvbnN1bWVyIGdyb3VwaW5nIHJvd3MgZm9yIHByZXNlbnRhdGlvbiB1c2VzIHRoZSBzYW1lIG1hcHBpbmcKLy8gdGhlIHRvdGFscyB3ZXJlIGJ1aWx0IGZyb20gcmF0aGVyIHRoYW4gYSBzZWNvbmQgY29weSBvZiBpdC4KZnVuYyBTZWN0aW9uT2YoayBqb3VybmFsLktpbmQpIChTZWN0aW9uLCBlcnJvcikgewoJc3dpdGNoIGsgewoJY2FzZSBqb3VybmFsLkFzc2V0OgoJCXJldHVybiBTZWN0aW9uQXNzZXRzLCBuaWwKCWNhc2Ugam91cm5hbC5MaWFiaWxpdHksIGpvdXJuYWwuRXF1aXR5OgoJCXJldHVybiBTZWN0aW9uQ2xhaW1zLCBuaWwKCWNhc2Ugam91cm5hbC5SZXZlbnVlLCBqb3VybmFsLkV4cGVuc2U6CgkJcmV0dXJuIFNlY3Rpb25QZXJmb3JtYW5jZSwgbmlsCgl9CglyZXR1cm4gMCwgRXJySW52YWxpZEtpbmQKfQoKLy8gQWJub3JtYWwgaXMgb25lIGFjY291bnQgd2hvc2UgYmFsYW5jZSBydW5zIGFnYWluc3QgaXRzIGtpbmQncyBub3JtYWwKLy8gZGlyZWN0aW9uLiBCYWxhbmNlIGlzIGluIHRoZSBhY2NvdW50J3Mgbm9ybWFsIGRpcmVjdGlvbiBhbmQgaXMgdGhlcmVmb3JlCi8vIGFsd2F5cyBuZWdhdGl2ZSBoZXJlLgovLwovLyBbRGVyaXZlXSBpcyBpdHMgb25seSBwcm9kdWNlciBpbiB0aGlzIHBhY2thZ2UuCnR5cGUgQWJub3JtYWwgc3RydWN0IHsKCUNvZGUgICAgc3RyaW5nCglOYW1lICAgIHN0cmluZwoJS2luZCAgICBqb3VybmFsLktpbmQKCUJhbGFuY2UgaW50NjQKfQoKLy8gU3RhdGVtZW50IGlzIHRoZSBjbGFzc2lmaWVkIGZpZ3VyZXMgZm9yIG9uZSBjaGFydCBhdCBvbmUgaW5zdGFudC4KLy8KLy8gRXZlcnkgaW50NjQgZmllbGQgaXMgYSBuYXR1cmFsLXNpZ24gdG90YWw6IGEgbm9ybWFsIGNoYXJ0IGhhcyB0aGVtIGFsbAovLyBub24tbmVnYXRpdmUuIFRoZXkgYXJlIHZhbHVlcywgbm90IHBvaW50ZXJzLCBzbyBhIGhvbGRlciBjYW5ub3QgcmVhY2ggYmFjawovLyBpbnRvIGFueXRoaW5nIOKAlCBleGNlcHQgdGhyb3VnaCBBYm5vcm1hbCwgd2hpY2ggaXMgYSBzbGljZSBhbmQgaXMgZnJlc2hseQovLyBhbGxvY2F0ZWQgYnkgW0Rlcml2ZV0gb24gZXZlcnkgY2FsbCwgc28gdGhlIGNhbGxlciBvd25zIGl0LgovLwovLyBBc3NldHMgYW5kIENsYWltcyBhcmUgYm90aCByZXBvcnRlZCBhbmQgdGhlaXIgZXF1YWxpdHkgaXMgZGVsaWJlcmF0ZWx5IG5vdAovLyBvZmZlcmVkIGFzIGEgbWV0aG9kOyBzZWUgdGhlIHBhY2thZ2UgZG9jIG9uIHdoeSB0aGF0IGNvbXBhcmlzb24gY2Fubm90IGZhaWwKLy8gb3ZlciBhIEJvb2stZGVyaXZlZCBjaGFydC4KdHlwZSBTdGF0ZW1lbnQgc3RydWN0IHsKCS8vIFJvd3MgaXMgaG93IG1hbnkgYWNjb3VudHMgd2VyZSBjbGFzc2lmaWVkLiBaZXJvIGlzIGEgbGVnaXRpbWF0ZQoJLy8gc3RhdGVtZW50IG9mIG5vdGhpbmcsIG5vdCBhbiBlcnJvci4KCVJvd3MgaW50CgoJLy8gQXNzZXRzIGlzIHRoZSBiYWxhbmNlLXNoZWV0IGRlYml0IHNpZGUuCglBc3NldHMgaW50NjQKCgkvLyBMaWFiaWxpdGllcyBhbmQgRXF1aXR5IGFyZSB0aGUgdHdvIGNyZWRpdC1zaWRlIGNvbXBvbmVudHMsIHJlcG9ydGVkCgkvLyBzZXBhcmF0ZWx5IGJlY2F1c2UgYSByZWFkZXIgbmVlZHMgdGhlbSBhcGFydCBhbmQgQ2xhaW1zIGRvZXMgbm90CgkvLyByZWNvdmVyIHRoZW0uCglMaWFiaWxpdGllcyBpbnQ2NAoJRXF1aXR5ICAgICAgaW50NjQKCgkvLyBDdW11bGF0aXZlUmV2ZW51ZSBhbmQgQ3VtdWxhdGl2ZUV4cGVuc2VzIGFjY3VtdWxhdGUgZnJvbSB0aGUgYm9vaydzCgkvLyBmaXJzdCBwb3N0aW5nLCBub3Qgb3ZlciBhIHBlcmlvZC4gU2VlIHRoZSBwYWNrYWdlIGRvYy4KCUN1bXVsYXRpdmVSZXZlbnVlICBpbnQ2NAoJQ3VtdWxhdGl2ZUV4cGVuc2VzIGludDY0CgoJLy8gQ3VtdWxhdGl2ZU5ldCBpcyBDdW11bGF0aXZlUmV2ZW51ZSAtIEN1bXVsYXRpdmVFeHBlbnNlcy4gSXQgYXBwZWFycyBvbgoJLy8gdGhlIGJhbGFuY2Ugc2hlZXQgYXMgYSByZWNvbmNpbGluZyBsaW5lIGJlY2F1c2Ugam91cm5hbCBjbG9zZXMgbm8KCS8vIG5vbWluYWwgYWNjb3VudCBpbnRvIGVxdWl0eS4KCUN1bXVsYXRpdmVOZXQgaW50NjQKCgkvLyBDbGFpbXMgaXMgTGlhYmlsaXRpZXMgKyBFcXVpdHkgKyBDdW11bGF0aXZlTmV0OiB0aGUgY3JlZGl0IHNpZGUgb2YgdGhlCgkvLyBiYWxhbmNlIHNoZWV0IGFzIHByZXNlbnRlZC4KCUNsYWltcyBpbnQ2NAoKCS8vIEFibm9ybWFsIGxpc3RzIGV2ZXJ5IHJvdyB3aG9zZSBiYWxhbmNlIHJ1bnMgYWdhaW5zdCBpdHMga2luZCwgaW4gdGhlCgkvLyByb3cgb3JkZXIgRGVyaXZlIHJlY2VpdmVkLCB3aGljaCBFcnJSb3dzTm90T3JkZXJlZCBmb3JjZXMgdG8gYmUKCS8vIGFzY2VuZGluZyBieSBjb2RlLiBJdCBpcyBuZXZlciBuaWwgZm9yIGEgU3RhdGVtZW50IGZyb20gRGVyaXZlLgoJQWJub3JtYWwgW11BYm5vcm1hbAp9CgovLyBBYm5vcm1hbEluIGNvdW50cyB0aGUgYWJub3JtYWwgcm93cyBwcmVzZW50ZWQgaW4gc2VjLgovLwovLyBJdCByZWNvbXB1dGVzIGVhY2ggcm93J3Mgc2VjdGlvbiBmcm9tIGl0cyBLaW5kIHRocm91Z2ggW1NlY3Rpb25PZl0gcmF0aGVyCi8vIHRoYW4gc3RvcmluZyBvbmUsIHNvIHRoZXJlIGlzIG9uZSBkZWZpbml0aW9uIG9mIHRoZSBwYXJ0aXRpb24gYW5kIG5vCi8vIHNlY29uZCBmaWVsZCB0aGF0IGNvdWxkIGRpc2FncmVlIHdpdGggaXQuIEEgU3RhdGVtZW50IGJ1aWx0IGJ5IGhhbmQgY2FuCi8vIGhvbGQgYSByb3cgd2l0aCBhbiBpbnZhbGlkIEtpbmQsIGFuZCBzdWNoIGEgcm93IGlzIGNvdW50ZWQgaW4gbm8gc2VjdGlvbjsKLy8gRGVyaXZlIGNhbm5vdCBwcm9kdWNlIG9uZS4KZnVuYyAocyBTdGF0ZW1lbnQpIEFibm9ybWFsSW4oc2VjIFNlY3Rpb24pIGludCB7CgluIDo9IDAKCWZvciBfLCBhIDo9IHJhbmdlIHMuQWJub3JtYWwgewoJCWdvdCwgZXJyIDo9IFNlY3Rpb25PZihhLktpbmQpCgkJaWYgZXJyICE9IG5pbCB7CgkJCWNvbnRpbnVlCgkJfQoJCWlmIGdvdCA9PSBzZWMgewoJCQluKysKCQl9Cgl9CglyZXR1cm4gbgp9CgovLyBTZWN0aW9uVG90YWwgcmV0dXJucyB0aGUgZmlndXJlIHByZXNlbnRlZCBmb3Igc2VjOiBBc3NldHMsIENsYWltcywgb3IKLy8gQ3VtdWxhdGl2ZU5ldC4gQSBzZWN0aW9uIG91dHNpZGUgdGhlIHRocmVlIGlzIFtFcnJJbnZhbGlkU2VjdGlvbl0uCi8vCi8vIE5vdGUgd2hhdCB0aGUgcGVyZm9ybWFuY2UgdG90YWwgaXM6IHRoZSBpbmNvbWUgc3RhdGVtZW50J3MgYm90dG9tIGxpbmUsIG5vdAovLyB0aGUgc3VtIG9mIGl0cyB0d28gY29tcG9uZW50cy4gUmV2ZW51ZSBhbmQgZXhwZW5zZXMgYXJlIHJlYWQgZnJvbSB0aGVpciBvd24KLy8gZmllbGRzLgpmdW5jIChzIFN0YXRlbWVudCkgU2VjdGlvblRvdGFsKHNlYyBTZWN0aW9uKSAoaW50NjQsIGVycm9yKSB7Cglzd2l0Y2ggc2VjIHsKCWNhc2UgU2VjdGlvbkFzc2V0czoKCQlyZXR1cm4gcy5Bc3NldHMsIG5pbAoJY2FzZSBTZWN0aW9uQ2xhaW1zOgoJCXJldHVybiBzLkNsYWltcywgbmlsCgljYXNlIFNlY3Rpb25QZXJmb3JtYW5jZToKCQlyZXR1cm4gcy5DdW11bGF0aXZlTmV0LCBuaWwKCX0KCXJldHVybiAwLCBFcnJJbnZhbGlkU2VjdGlvbgp9CgovLyBEZXJpdmUgY2xhc3NpZmllcyByb3dzIGFuZCByZXR1cm5zIHRoZSBzdGF0ZW1lbnQgZmlndXJlcy4KLy8KLy8gcm93cyBtdXN0IGJlIGluIHN0cmljdGx5IGFzY2VuZGluZyBDb2RlIG9yZGVyIChbRXJyUm93c05vdE9yZGVyZWRdKSBhbmQgbm8KLy8gbG9uZ2VyIHRoYW4gW01heFJvd3NdLiBFdmVyeSBLaW5kIG11c3QgYmUgb25lIG9mIGpvdXJuYWwncyBmaXZlCi8vIChbRXJySW52YWxpZEtpbmRdKSBhbmQgbmVpdGhlciBjb2x1bW4gbWF5IGJlIG5lZ2F0aXZlCi8vIChbRXJyTmVnYXRpdmVUb3RhbHNdLCB3aGljaCBpcyB3aGF0IG1ha2VzIHRoZSBjaGVja2VkIGFkZHMgaGVyZQovLyBzdWZmaWNpZW50KS4gRXZlcnkgYWNjdW11bGF0aW9uIGlzIGNoZWNrZWQgKFtFcnJPdmVyZmxvd10pLgovLwovLyBJdCBpcyBhIHB1cmUgZnVuY3Rpb24gb2Ygcm93czogdGhlIHNhbWUgcm93cyBhbHdheXMgZ2l2ZSB0aGUgc2FtZSBTdGF0ZW1lbnQsCi8vIGFuZCBub3RoaW5nIGFib3V0IHRoZSBjYWxsZXIsIHRoZSBjaGFpbiBvciB0aGUgdGltZSBlbnRlcnMgaXQuIE9uIGFueSBlcnJvcgovLyB0aGUgcmV0dXJuZWQgU3RhdGVtZW50IGlzIHRoZSB6ZXJvIHZhbHVlLCBzbyBhIGNhbGxlciB0aGF0IGlnbm9yZXMgdGhlIGVycm9yCi8vIHJlYWRzIHplcm9zIHJhdGhlciB0aGFuIGEgaGFsZi1zdW1tZWQgY2hhcnQuCmZ1bmMgRGVyaXZlKHJvd3MgW11qb3VybmFsLkFjY291bnQpIChTdGF0ZW1lbnQsIGVycm9yKSB7CglpZiBsZW4ocm93cykgPiBNYXhSb3dzIHsKCQlyZXR1cm4gU3RhdGVtZW50e30sIEVyclRvb01hbnlSb3dzCgl9CgoJc3QgOj0gU3RhdGVtZW50e0Fibm9ybWFsOiBbXUFibm9ybWFse319CglwcmV2IDo9ICIiCglmb3IgXywgYSA6PSByYW5nZSByb3dzIHsKCQlpZiBhLkNvZGUgPD0gcHJldiB7CgkJCXJldHVybiBTdGF0ZW1lbnR7fSwgRXJyUm93c05vdE9yZGVyZWQKCQl9CgkJcHJldiA9IGEuQ29kZQoKCQlpZiAhYS5LaW5kLlZhbGlkKCkgewoJCQlyZXR1cm4gU3RhdGVtZW50e30sIEVyckludmFsaWRLaW5kCgkJfQoJCWlmIGEuRGViaXRzIDwgMCB8fCBhLkNyZWRpdHMgPCAwIHsKCQkJcmV0dXJuIFN0YXRlbWVudHt9LCBFcnJOZWdhdGl2ZVRvdGFscwoJCX0KCgkJYmFsIDo9IGEuQmFsYW5jZSgpCgkJb2sgOj0gdHJ1ZQoJCXN3aXRjaCBhLktpbmQgewoJCWNhc2Ugam91cm5hbC5Bc3NldDoKCQkJc3QuQXNzZXRzLCBvayA9IGNoZWNrZWRBZGQoc3QuQXNzZXRzLCBiYWwpCgkJY2FzZSBqb3VybmFsLkxpYWJpbGl0eToKCQkJc3QuTGlhYmlsaXRpZXMsIG9rID0gY2hlY2tlZEFkZChzdC5MaWFiaWxpdGllcywgYmFsKQoJCWNhc2Ugam91cm5hbC5FcXVpdHk6CgkJCXN0LkVxdWl0eSwgb2sgPSBjaGVja2VkQWRkKHN0LkVxdWl0eSwgYmFsKQoJCWNhc2Ugam91cm5hbC5SZXZlbnVlOgoJCQlzdC5DdW11bGF0aXZlUmV2ZW51ZSwgb2sgPSBjaGVja2VkQWRkKHN0LkN1bXVsYXRpdmVSZXZlbnVlLCBiYWwpCgkJY2FzZSBqb3VybmFsLkV4cGVuc2U6CgkJCXN0LkN1bXVsYXRpdmVFeHBlbnNlcywgb2sgPSBjaGVja2VkQWRkKHN0LkN1bXVsYXRpdmVFeHBlbnNlcywgYmFsKQoJCX0KCQlpZiAhb2sgewoJCQlyZXR1cm4gU3RhdGVtZW50e30sIEVyck92ZXJmbG93CgkJfQoKCQlpZiBiYWwgPCAwIHsKCQkJc3QuQWJub3JtYWwgPSBhcHBlbmQoc3QuQWJub3JtYWwsIEFibm9ybWFsewoJCQkJQ29kZTogICAgYS5Db2RlLAoJCQkJTmFtZTogICAgYS5OYW1lLAoJCQkJS2luZDogICAgYS5LaW5kLAoJCQkJQmFsYW5jZTogYmFsLAoJCQl9KQoJCX0KCQlzdC5Sb3dzKysKCX0KCgluZXQsIG9rIDo9IGNoZWNrZWRTdWIoc3QuQ3VtdWxhdGl2ZVJldmVudWUsIHN0LkN1bXVsYXRpdmVFeHBlbnNlcykKCWlmICFvayB7CgkJcmV0dXJuIFN0YXRlbWVudHt9LCBFcnJPdmVyZmxvdwoJfQoJc3QuQ3VtdWxhdGl2ZU5ldCA9IG5ldAoKCWNsYWltcywgb2sgOj0gY2hlY2tlZEFkZChzdC5MaWFiaWxpdGllcywgc3QuRXF1aXR5KQoJaWYgIW9rIHsKCQlyZXR1cm4gU3RhdGVtZW50e30sIEVyck92ZXJmbG93Cgl9CgljbGFpbXMsIG9rID0gY2hlY2tlZEFkZChjbGFpbXMsIG5ldCkKCWlmICFvayB7CgkJcmV0dXJuIFN0YXRlbWVudHt9LCBFcnJPdmVyZmxvdwoJfQoJc3QuQ2xhaW1zID0gY2xhaW1zCgoJcmV0dXJuIHN0LCBuaWwKfQoKLy8gTXVzdERlcml2ZSBpcyBbRGVyaXZlXSBhbmQgcGFuaWNzIGluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIGVycm9yLiBJdCBpcyBmb3IKLy8gYSByZWFsbSdzIG11dGF0aW5nIHBhdGgsIHdoZXJlIGFuIGVycm9yIHJldHVybiBkb2VzIG5vdCByZXZlcnQgdGhlCi8vIHRyYW5zYWN0aW9uIGFuZCBvbmx5IGEgcGFuaWMgZG9lcy4KZnVuYyBNdXN0RGVyaXZlKHJvd3MgW11qb3VybmFsLkFjY291bnQpIFN0YXRlbWVudCB7CglzdCwgZXJyIDo9IERlcml2ZShyb3dzKQoJaWYgZXJyICE9IG5pbCB7CgkJcGFuaWMoZXJyKQoJfQoJcmV0dXJuIHN0Cn0KCi8vIGNoZWNrZWRBZGQgcmV0dXJucyBhK2IgYW5kIHJlcG9ydHMgd2hldGhlciB0aGUgYWRkaXRpb24gZGlkIG5vdCBvdmVyZmxvdwovLyBpbnQ2NC4gam91cm5hbCdzIGNvcHkgaXMgdW5leHBvcnRlZCwgc28gdGhpcyBpcyBhIGRlbGliZXJhdGUgdGhyZWUtbGluZQovLyBkdXBsaWNhdGUgb2YgYSB0cml2aWFsIGhlbHBlciDigJQgYSBkaWZmZXJlbnQgdGhpbmcgZnJvbSB0aGUgc2Vjb25kIEtpbmQgZW51bQovLyBESVNDT1ZFUlkubWQgwqcgMyByZWZ1c2VkLCB3aGljaCB3b3VsZCBoYXZlIGR1cGxpY2F0ZWQgYSBkb21haW4gZGVjaXNpb24uCmZ1bmMgY2hlY2tlZEFkZChhLCBiIGludDY0KSAoaW50NjQsIGJvb2wpIHsKCXN1bSA6PSBhICsgYgoJaWYgKGIgPiAwICYmIHN1bSA8IGEpIHx8IChiIDwgMCAmJiBzdW0gPiBhKSB7CgkJcmV0dXJuIDAsIGZhbHNlCgl9CglyZXR1cm4gc3VtLCB0cnVlCn0KCi8vIGNoZWNrZWRTdWIgcmV0dXJucyBhLWIgYW5kIHJlcG9ydHMgd2hldGhlciB0aGUgc3VidHJhY3Rpb24gZGlkIG5vdCBvdmVyZmxvdwovLyBpbnQ2NC4gSXQgaXMgbm90IGNoZWNrZWRBZGQoYSwgLWIpOiBuZWdhdGluZyBtYXRoLk1pbkludDY0IG92ZXJmbG93cyBvbiBpdHMKLy8gb3duLCBzbyB0aGF0IGZvcm0gd291bGQgd3JhcCBiZWZvcmUgdGhlIGNoZWNrIHJhbi4KZnVuYyBjaGVja2VkU3ViKGEsIGIgaW50NjQpIChpbnQ2NCwgYm9vbCkgewoJZGlmZiA6PSBhIC0gYgoJaWYgKGIgPCAwICYmIGRpZmYgPCBhKSB8fCAoYiA+IDAgJiYgZGlmZiA+IGEpIHsKCQlyZXR1cm4gMCwgZmFsc2UKCX0KCXJldHVybiBkaWZmLCB0cnVlCn0KIg0xMDAwMDAwMHVnbm90EhEI0LKWJRIKNzc5NjJ1Z25vdBqoAQo6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQIW9DF2ySV4zjQumeJvrSn3/nxG7XBDVv+rkxV/YrsOmBJA3khXzod99mM1CHvWH+oeYHcNWkuoNX14Z2NUTyw6F9pY3/QSWc0dZs25PpUY8bJ5zvtgy5fE4yLmBiTjBRz3AxooZzFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFsdXV4ZQ=="
  }
}