Name: series-workflowrzn28 Phase: Failed StartedAt: 2026-09-02 06:56:28 +0000 UTC FinishedAt: 2026-09-02 07:11:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzn28[0] Phase: Succeeded StartedAt: 2026-09-02 06:56:28 +0000 UTC FinishedAt: 2026-09-02 07:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzn28[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 06:56:28 +0000 UTC FinishedAt: 2026-09-02 07:11:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgcHVyZWx5IG9mIGNvZGUgY2xlYW51cHMgaW4gbW0vcGVyY3B1LmMsIHJlbW92aW5nIHJlZHVuZGFudCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIGFuIHVubmVjZXNzYXJ5IGNwdW1hc2tfY2xlYXIoKSBwcmlvciB0byBjcHVtYXNrX2NvcHkoKSwgYW5kIGFuIGVtcHR5IHJldHVybiBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiBhIHZvaWQgZnVuY3Rpb24uIFRoZXNlIGNoYW5nZXMgaGF2ZSBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3IgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzJmMDU0NjViYTRlMjNjMGY4OTM5ZmM1ZjRmMTQwNDU5YWUyNGFiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDc6MDk6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuY1xuaW5kZXggYTgwMmQ3MmMxMTZmYi4uOWRmNmNkZjYzNmZkNiAxMDA2NDRcbi0tLSBhL21tL3BlcmNwdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wZXJjcHUuY1xuQEAgLTc1OCw3ICYjNDM7NzU4LDYgQEAgc3RhdGljIHZvaWQgcGNwdV9jaHVua19yZWZyZXNoX2hpbnQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBib29sIGZ1bGxfc2NhbilcbiBcdFx0Y2h1bmtfbWQtXHUwMDNlY29udGlnX2hpbnQgPSAwO1xuIFx0fVxuIFxuLVx0Yml0cyA9IDA7XG4gXHRwY3B1X2Zvcl9lYWNoX21kX2ZyZWVfcmVnaW9uKGNodW5rLCBiaXRfb2ZmLCBiaXRzKVxuIFx0XHRwY3B1X2Jsb2NrX3VwZGF0ZShjaHVua19tZCwgYml0X29mZiwgYml0X29mZiAmIzQzOyBiaXRzKTtcbiB9XG5AQCAtMTEyMiw3ICYjNDM7MTEyMSw2IEBAIHN0YXRpYyBpbnQgcGNwdV9maW5kX2Jsb2NrX2ZpdChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBhbGxvY19iaXRzLFxuIFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRiaXRfb2ZmID0gcGNwdV9uZXh0X2hpbnQoY2h1bmtfbWQsIGFsbG9jX2JpdHMpO1xuLVx0Yml0cyA9IDA7XG4gXHRwY3B1X2Zvcl9lYWNoX2ZpdF9yZWdpb24oY2h1bmssIGFsbG9jX2JpdHMsIGFsaWduLCBiaXRfb2ZmLCBiaXRzKSB7XG4gXHRcdGlmICghcG9wX29ubHkgfHwgcGNwdV9pc19wb3B1bGF0ZWQoY2h1bmssIGJpdF9vZmYsIGJpdHMsXG4gXHRcdFx0XHRcdFx0ICAgXHUwMDI2bmV4dF9vZmYpKVxuQEAgLTI4MTksNyAmIzQzOzI4MTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBfX2ZsYXR0ZW4gcGNwdV9idWlsZF9hbGxvY19pbmZvKFxuIFx0c3RhdGljIGludCBncm91cF9jbnRbTlJfQ1BVU10gX19pbml0ZGF0YTtcbiBcdHN0YXRpYyBzdHJ1Y3QgY3B1bWFzayBtYXNrIF9faW5pdGRhdGE7XG4gXHRjb25zdCBzaXplX3Qgc3RhdGljX3NpemUgPSBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0O1xuLVx0aW50IG5yX2dyb3VwcyA9IDEsIG5yX3VuaXRzID0gMDtcbiYjNDM7XHRpbnQgbnJfZ3JvdXBzLCBucl91bml0cyA9IDA7XG4gXHRzaXplX3Qgc2l6ZV9zdW0sIG1pbl91bml0X3NpemUsIGFsbG9jX3NpemU7XG4gXHRpbnQgdXBhLCBtYXhfdXBhLCBiZXN0X3VwYTtcdC8qIHVuaXRzX3Blcl9hbGxvYyAqL1xuIFx0aW50IGxhc3RfYWxsb2NzLCBncm91cCwgdW5pdDtcbkBAIC0yODMwLDcgJiM0MzsyODI4LDYgQEAgc3RhdGljIHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKiBfX2luaXQgX19mbGF0dGVuIHBjcHVfYnVpbGRfYWxsb2NfaW5mbyhcbiBcdC8qIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyAqL1xuIFx0bWVtc2V0KGdyb3VwX21hcCwgMCwgc2l6ZW9mKGdyb3VwX21hcCkpO1xuIFx0bWVtc2V0KGdyb3VwX2NudCwgMCwgc2l6ZW9mKGdyb3VwX2NudCkpO1xuLVx0Y3B1bWFza19jbGVhcihcdTAwMjZtYXNrKTtcbiBcbiBcdC8qIGNhbGN1bGF0ZSBzaXplX3N1bSBhbmQgZW5zdXJlIGR5bl9zaXplIGlzIGVub3VnaCBmb3IgZWFybHkgYWxsb2MgKi9cbiBcdHNpemVfc3VtID0gUEZOX0FMSUdOKHN0YXRpY19zaXplICYjNDM7IHJlc2VydmVkX3NpemUgJiM0MztcbkBAIC0zMTgxLDggJiM0MzszMTc4LDYgQEAgdm9pZCBfX2luaXQgX193ZWFrIHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdFx0bmV3ID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFRFX1RBQkxFX1NJWkUsIFBURV9UQUJMRV9TSVpFKTtcbiBcdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWQsIG5ldyk7XG4gXHR9XG4tXG4tXHRyZXR1cm47XG4gfVxuIFxuIC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIHB1cmVseSBvZiBjb2RlIGNsZWFudXBzIGluIG1tL3BlcmNwdS5jLCByZW1vdmluZyByZWR1bmRhbnQgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBhbiB1bm5lY2Vzc2FyeSBjcHVtYXNrX2NsZWFyKCkgcHJpb3IgdG8gY3B1bWFza19jb3B5KCksIGFuZCBhbiBlbXB0eSByZXR1cm4gc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgYSB2b2lkIGZ1bmN0aW9uLiBUaGVzZSBjaGFuZ2VzIGhhdmUgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24ga2VybmVsIGV4ZWN1dGlvbiBmbG93IG9yIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcyZjA1NDY1YmE0ZTIzYzBmODkzOWZjNWY0ZjE0MDQ1OWFlMjRhYjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDA3OjA5OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuYwppbmRleCBhODAyZDcyYzExNmZiLi45ZGY2Y2RmNjM2ZmQ2IDEwMDY0NAotLS0gYS9tbS9wZXJjcHUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wZXJjcHUuYwpAQCAtNzU4LDcgJiM0Mzs3NTgsNiBAQCBzdGF0aWMgdm9pZCBwY3B1X2NodW5rX3JlZnJlc2hfaGludChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGJvb2wgZnVsbF9zY2FuKQogCQljaHVua19tZC0mZ3Q7Y29udGlnX2hpbnQgPSAwOwogCX0KIAotCWJpdHMgPSAwOwogCXBjcHVfZm9yX2VhY2hfbWRfZnJlZV9yZWdpb24oY2h1bmssIGJpdF9vZmYsIGJpdHMpCiAJCXBjcHVfYmxvY2tfdXBkYXRlKGNodW5rX21kLCBiaXRfb2ZmLCBiaXRfb2ZmICYjNDM7IGJpdHMpOwogfQpAQCAtMTEyMiw3ICYjNDM7MTEyMSw2IEBAIHN0YXRpYyBpbnQgcGNwdV9maW5kX2Jsb2NrX2ZpdChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBhbGxvY19iaXRzLAogCQlyZXR1cm4gLTE7CiAKIAliaXRfb2ZmID0gcGNwdV9uZXh0X2hpbnQoY2h1bmtfbWQsIGFsbG9jX2JpdHMpOwotCWJpdHMgPSAwOwogCXBjcHVfZm9yX2VhY2hfZml0X3JlZ2lvbihjaHVuaywgYWxsb2NfYml0cywgYWxpZ24sIGJpdF9vZmYsIGJpdHMpIHsKIAkJaWYgKCFwb3Bfb25seSB8fCBwY3B1X2lzX3BvcHVsYXRlZChjaHVuaywgYml0X29mZiwgYml0cywKIAkJCQkJCSAgICZhbXA7bmV4dF9vZmYpKQpAQCAtMjgxOSw3ICYjNDM7MjgxNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICogX19pbml0IF9fZmxhdHRlbiBwY3B1X2J1aWxkX2FsbG9jX2luZm8oCiAJc3RhdGljIGludCBncm91cF9jbnRbTlJfQ1BVU10gX19pbml0ZGF0YTsKIAlzdGF0aWMgc3RydWN0IGNwdW1hc2sgbWFzayBfX2luaXRkYXRhOwogCWNvbnN0IHNpemVfdCBzdGF0aWNfc2l6ZSA9IF9fcGVyX2NwdV9lbmQgLSBfX3Blcl9jcHVfc3RhcnQ7Ci0JaW50IG5yX2dyb3VwcyA9IDEsIG5yX3VuaXRzID0gMDsKJiM0MzsJaW50IG5yX2dyb3VwcywgbnJfdW5pdHMgPSAwOwogCXNpemVfdCBzaXplX3N1bSwgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZTsKIAlpbnQgdXBhLCBtYXhfdXBhLCBiZXN0X3VwYTsJLyogdW5pdHNfcGVyX2FsbG9jICovCiAJaW50IGxhc3RfYWxsb2NzLCBncm91cCwgdW5pdDsKQEAgLTI4MzAsNyAmIzQzOzI4MjgsNiBAQCBzdGF0aWMgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBfX2ZsYXR0ZW4gcGNwdV9idWlsZF9hbGxvY19pbmZvKAogCS8qIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyAqLwogCW1lbXNldChncm91cF9tYXAsIDAsIHNpemVvZihncm91cF9tYXApKTsKIAltZW1zZXQoZ3JvdXBfY250LCAwLCBzaXplb2YoZ3JvdXBfY250KSk7Ci0JY3B1bWFza19jbGVhcigmYW1wO21hc2spOwogCiAJLyogY2FsY3VsYXRlIHNpemVfc3VtIGFuZCBlbnN1cmUgZHluX3NpemUgaXMgZW5vdWdoIGZvciBlYXJseSBhbGxvYyAqLwogCXNpemVfc3VtID0gUEZOX0FMSUdOKHN0YXRpY19zaXplICYjNDM7IHJlc2VydmVkX3NpemUgJiM0MzsKQEAgLTMxODEsOCAmIzQzOzMxNzgsNiBAQCB2b2lkIF9faW5pdCBfX3dlYWsgcGNwdV9wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKQogCQluZXcgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVEVfVEFCTEVfU0laRSwgUFRFX1RBQkxFX1NJWkUpOwogCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZhbXA7aW5pdF9tbSwgcG1kLCBuZXcpOwogCX0KLQotCXJldHVybjsKIH0KIAogLyoqCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTkKCQkJCQkJCW91dHB1dDogMTA0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZSBDaGFuZ2VzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBzdGFydCBieSBjYXJlZnVsbHkgaW5zcGVjdGluZyB0aGUgZGlmZi4gSSB3YW50IHRvIHNlZSB0aGUgZXhhY3QgbGluZXMgbW9kaWZpZWQgYW5kLCBjcnVjaWFsbHksIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSAmIzM0O2JlZm9yZSYjMzQ7IGFuZCAmIzM0O2FmdGVyJiMzNDsgaXMgdGhlIGtleSB0byBncmFzcGluZyB0aGUgaW50ZW50IGFuZCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiB0aGUgY3VycmVudCBjb2RlYmFzZSBzbyBhbnkgY2hhbmdlcyB3aWxsIGJlIG5vdGljZWQuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsJiMzOTtzIHN0cnVjdHVyZS4gSSYjMzk7bSBnb2luZyB0byB1c2UgYSB0b29sIGxpa2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiBgbW0vcGVyY3B1LmNgLiBUaGF0IGZpbGUgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcGVyLUNQVSBtZW1vcnkgbWFuYWdlbWVudCBwdXp6bGUuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgdGhlc2UgY2hhbmdlcyBtaWdodCBiZSByZWxhdGVkIHRvIHNvbWUgb3B0aW1pemF0aW9uIG9yIGZpeCBpbiB0aGF0IGFyZWEuIEdyYWJiaW5nIHRoZSBjb2RlIGRpcmVjdGx5IHdpbGwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaHlwb3RoZXNpcyBhbmQgdW5kZXJzdGFuZCB0aGUgbG93IGxldmVsIGVmZmVjdHMgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bSBnb2luZyB0byByZWFkIGFyb3VuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBlbnN1cmUgSSYjMzk7bSBnZXR0aW5nIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjaGFuZ2UgZml0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BlcmNwdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTA6XHRcdC8qIHByb21vdGUgc2Nhbl9oaW50IHRvIGNvbnRpZ19oaW50ICovXG4gNzUxOlx0XHRpZiAoIWZ1bGxfc2NhbiBcdTAwMjZcdTAwMjYgY2h1bmtfbWQtXHUwMDNlc2Nhbl9oaW50KSB7XG4gNzUyOlx0XHRcdGJpdF9vZmYgPSBjaHVua19tZC1cdTAwM2VzY2FuX2hpbnRfc3RhcnQgJiM0MzsgY2h1bmtfbWQtXHUwMDNlc2Nhbl9oaW50O1xuIDc1MzpcdFx0XHRjaHVua19tZC1cdTAwM2Vjb250aWdfaGludF9zdGFydCA9IGNodW5rX21kLVx1MDAzZXNjYW5faGludF9zdGFydDtcbiA3NTQ6XHRcdFx0Y2h1bmtfbWQtXHUwMDNlY29udGlnX2hpbnQgPSBjaHVua19tZC1cdTAwM2VzY2FuX2hpbnQ7XG4gNzU1Olx0XHRcdGNodW5rX21kLVx1MDAzZXNjYW5faGludCA9IDA7XG4gNzU2Olx0XHR9IGVsc2Uge1xuIDc1NzpcdFx0XHRiaXRfb2ZmID0gY2h1bmtfbWQtXHUwMDNlZmlyc3RfZnJlZTtcbiA3NTg6XHRcdFx0Y2h1bmtfbWQtXHUwMDNlY29udGlnX2hpbnQgPSAwO1xuIDc1OTpcdFx0fVxuIDc2MDpcdFxuIDc2MTpcdFx0cGNwdV9mb3JfZWFjaF9tZF9mcmVlX3JlZ2lvbihjaHVuaywgYml0X29mZiwgYml0cylcbiA3NjI6XHRcdFx0cGNwdV9ibG9ja191cGRhdGUoY2h1bmtfbWQsIGJpdF9vZmYsIGJpdF9vZmYgJiM0MzsgYml0cyk7XG4gNzYzOlx0fVxuIDc2NDpcdFxuIDc2NTpcdC8qKlxuIDc2NjpcdCAqIHBjcHVfYmxvY2tfcmVmcmVzaF9oaW50XG4gNzY3Olx0ICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdFxuIDc2ODpcdCAqIEBpbmRleDogaW5kZXggb2YgdGhlIG1ldGFkYXRhIGJsb2NrXG4gNzY5Olx0ICpcbiA3NzA6XHQgKiBTY2FucyBvdmVyIHRoZSBibG9jayBiZWdpbm5pbmcgYXQgZmlyc3RfZnJlZSBhbmQgdXBkYXRlcyB0aGUgYmxvY2tcbiA3NzE6XHQgKiBtZXRhZGF0YSBhY2NvcmRpbmdseS5cbiA3NzI6XHQgKi9cbiA3NzM6XHRzdGF0aWMgdm9pZCBwY3B1X2Jsb2NrX3JlZnJlc2hfaGludChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBpbmRleClcbiA3NzQ6XHR7XG4gNzc1Olx0XHRzdHJ1Y3QgcGNwdV9ibG9ja19tZCAqYmxvY2sgPSBjaHVuay1cdTAwM2VtZF9ibG9ja3MgJiM0MzsgaW5kZXg7XG4gNzc2Olx0XHR1bnNpZ25lZCBsb25nICphbGxvY19tYXAgPSBwY3B1X2luZGV4X2FsbG9jX21hcChjaHVuaywgaW5kZXgpO1xuIDc3NzpcdFx0dW5zaWduZWQgaW50IHN0YXJ0LCBlbmQ7XHQvKiByZWdpb24gc3RhcnQsIHJlZ2lvbiBlbmQgKi9cbiA3Nzg6XHRcbiA3Nzk6XHRcdC8qIHByb21vdGUgc2Nhbl9oaW50IHRvIGNvbnRpZ19oaW50ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wZXJjcHUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExNTpcdFx0LypcbjExMTY6XHRcdCAqIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvIHByZXZlbnQgc2Nhbm5pbmcgYnkgYXNzdW1pbmcgaWYgdGhlXG4xMTE3Olx0XHQgKiBhbGxvY2F0aW9uIGNhbm5vdCBmaXQgaW4gdGhlIGdsb2JhbCBoaW50LCB0aGVyZSBpcyBtZW1vcnkgcHJlc3N1cmVcbjExMTg6XHRcdCAqIGFuZCBjcmVhdGluZyBhIG5ldyBjaHVuayB3b3VsZCBoYXBwZW4gc29vbi5cbjExMTk6XHRcdCAqL1xuMTEyMDpcdFx0aWYgKCFwY3B1X2NoZWNrX2Jsb2NrX2hpbnQoY2h1bmtfbWQsIGFsbG9jX2JpdHMsIGFsaWduKSlcbjExMjE6XHRcdFx0cmV0dXJuIC0xO1xuMTEyMjpcdFxuMTEyMzpcdFx0Yml0X29mZiA9IHBjcHVfbmV4dF9oaW50KGNodW5rX21kLCBhbGxvY19iaXRzKTtcbjExMjQ6XHRcdHBjcHVfZm9yX2VhY2hfZml0X3JlZ2lvbihjaHVuaywgYWxsb2NfYml0cywgYWxpZ24sIGJpdF9vZmYsIGJpdHMpIHtcbjExMjU6XHRcdFx0aWYgKCFwb3Bfb25seSB8fCBwY3B1X2lzX3BvcHVsYXRlZChjaHVuaywgYml0X29mZiwgYml0cyxcbjExMjY6XHRcdFx0XHRcdFx0XHQgICBcdTAwMjZuZXh0X29mZikpXG4xMTI3Olx0XHRcdFx0YnJlYWs7XG4xMTI4Olx0XG4xMTI5Olx0XHRcdGJpdF9vZmYgPSBuZXh0X29mZjtcbjExMzA6XHRcdFx0Yml0cyA9IDA7XG4xMTMxOlx0XHR9XG4xMTMyOlx0XG4xMTMzOlx0XHRpZiAoYml0X29mZiA9PSBwY3B1X2NodW5rX21hcF9iaXRzKGNodW5rKSlcbjExMzQ6XHRcdFx0cmV0dXJuIC0xO1xuMTEzNTpcdFxuMTEzNjpcdFx0cmV0dXJuIGJpdF9vZmY7XG4xMTM3Olx0fVxuMTEzODpcdFxuMTEzOTpcdC8qXG4xMTQwOlx0ICogcGNwdV9maW5kX3plcm9fYXJlYSAtIG1vZGlmaWVkIGZyb20gYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWFfb2ZmKClcbjExNDE6XHQgKiBAbWFwOiB0aGUgYWRkcmVzcyB0byBiYXNlIHRoZSBzZWFyY2ggb25cbjExNDI6XHQgKiBAc2l6ZTogdGhlIGJpdG1hcCBzaXplIGluIGJpdHNcbjExNDM6XHQgKiBAc3RhcnQ6IHRoZSBiaXRudW1iZXIgdG8gc3RhcnQgc2VhcmNoaW5nIGF0XG4xMTQ0Olx0ICogQG5yOiB0aGUgbnVtYmVyIG9mIHplcm9lZCBiaXRzIHdlJiMzOTtyZSBsb29raW5nIGZvclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGVyY3B1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MTU6XHR7XG4yODE2Olx0XHRzdGF0aWMgaW50IGdyb3VwX21hcFtOUl9DUFVTXSBfX2luaXRkYXRhO1xuMjgxNzpcdFx0c3RhdGljIGludCBncm91cF9jbnRbTlJfQ1BVU10gX19pbml0ZGF0YTtcbjI4MTg6XHRcdHN0YXRpYyBzdHJ1Y3QgY3B1bWFzayBtYXNrIF9faW5pdGRhdGE7XG4yODE5Olx0XHRjb25zdCBzaXplX3Qgc3RhdGljX3NpemUgPSBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0O1xuMjgyMDpcdFx0aW50IG5yX2dyb3VwcywgbnJfdW5pdHMgPSAwO1xuMjgyMTpcdFx0c2l6ZV90IHNpemVfc3VtLCBtaW5fdW5pdF9zaXplLCBhbGxvY19zaXplO1xuMjgyMjpcdFx0aW50IHVwYSwgbWF4X3VwYSwgYmVzdF91cGE7XHQvKiB1bml0c19wZXJfYWxsb2MgKi9cbjI4MjM6XHRcdGludCBsYXN0X2FsbG9jcywgZ3JvdXAsIHVuaXQ7XG4yODI0Olx0XHR1bnNpZ25lZCBpbnQgY3B1LCB0Y3B1O1xuMjgyNTpcdFx0c3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWk7XG4yODI2Olx0XHR1bnNpZ25lZCBpbnQgKmNwdV9tYXA7XG4yODI3Olx0XG4yODI4Olx0XHQvKiB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgKi9cbjI4Mjk6XHRcdG1lbXNldChncm91cF9tYXAsIDAsIHNpemVvZihncm91cF9tYXApKTtcbjI4MzA6XHRcdG1lbXNldChncm91cF9jbnQsIDAsIHNpemVvZihncm91cF9jbnQpKTtcbjI4MzE6XHRcbjI4MzI6XHRcdC8qIGNhbGN1bGF0ZSBzaXplX3N1bSBhbmQgZW5zdXJlIGR5bl9zaXplIGlzIGVub3VnaCBmb3IgZWFybHkgYWxsb2MgKi9cbjI4MzM6XHRcdHNpemVfc3VtID0gUEZOX0FMSUdOKHN0YXRpY19zaXplICYjNDM7IHJlc2VydmVkX3NpemUgJiM0MztcbjI4MzQ6XHRcdFx0XHQgICAgbWF4X3Qoc2l6ZV90LCBkeW5fc2l6ZSwgUEVSQ1BVX0RZTkFNSUNfRUFSTFlfU0laRSkpO1xuMjgzNTpcdFx0ZHluX3NpemUgPSBzaXplX3N1bSAtIHN0YXRpY19zaXplIC0gcmVzZXJ2ZWRfc2l6ZTtcbjI4MzY6XHRcbjI4Mzc6XHRcdC8qXG4yODM4Olx0XHQgKiBEZXRlcm1pbmUgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZSBhbmQgbWF4X3VwYSBzdWNoIHRoYXRcbjI4Mzk6XHRcdCAqIGFsbG9jX3NpemUgaXMgbXVsdGlwbGUgb2YgYXRvbV9zaXplIGFuZCBpcyB0aGUgc21hbGxlc3RcbjI4NDA6XHRcdCAqIHdoaWNoIGNhbiBhY2NvbW1vZGF0ZSA0ayBhbGlnbmVkIHNlZ21lbnRzIHdoaWNoIGFyZSBlcXVhbCB0b1xuMjg0MTpcdFx0ICogb3IgbGFyZ2VyIHRoYW4gbWluX3VuaXRfc2l6ZS5cbjI4NDI6XHRcdCAqL1xuMjg0MzpcdFx0bWluX3VuaXRfc2l6ZSA9IG1heF90KHNpemVfdCwgc2l6ZV9zdW0sIFBDUFVfTUlOX1VOSVRfU0laRSk7XG4yODQ0Olx0XG4yODQ1Olx0XHQvKiBkZXRlcm1pbmUgdGhlIG1heGltdW0gIyBvZiB1bml0cyB0aGF0IGNhbiBmaXQgaW4gYW4gYWxsb2NhdGlvbiAqL1xuMjg0NjpcdFx0YWxsb2Nfc2l6ZSA9IHJvdW5kdXAobWluX3VuaXRfc2l6ZSwgYXRvbV9zaXplKTtcbjI4NDc6XHRcdHVwYSA9IGFsbG9jX3NpemUgLyBtaW5fdW5pdF9zaXplO1xuMjg0ODpcdFx0d2hpbGUgKGFsbG9jX3NpemUgJSB1cGEgfHwgKG9mZnNldF9pbl9wYWdlKGFsbG9jX3NpemUgLyB1cGEpKSlcbjI4NDk6XHRcdFx0dXBhLS07XG4yODUwOlx0XHRtYXhfdXBhID0gdXBhO1xuMjg1MTpcdFxuMjg1MjpcdFx0Y3B1bWFza19jb3B5KFx1MDAyNm1hc2ssIGNwdV9wb3NzaWJsZV9tYXNrKTtcbjI4NTM6XHRcbjI4NTQ6XHRcdC8qIGdyb3VwIGNwdXMgYWNjb3JkaW5nIHRvIHRoZWlyIHByb3hpbWl0eSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCBzcGVha2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byBSZWdpb24gSXRlcmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGNvcmUgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYHBjcHVfZm9yX2VhY2hfbWRfZnJlZV9yZWdpb25gIGFuZCBgcGNwdV9mb3JfZWFjaF9maXRfcmVnaW9uYC4gSSYjMzk7bGwgc3RhcnQgYnkgY3JhY2tpbmcgb3BlbiB0aGVpciBkZWZpbml0aW9ucyDigJMgSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gVGhlIG5hbWVzIHRoZW1zZWx2ZXMgYXJlIHN1Z2dlc3RpdmUsIGJ1dCBJIGNhbiYjMzk7dCByZWx5IG9uIGFzc3VtcHRpb25zLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHRoaXMgZnVuZGFtZW50YWwgdG8gdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IHBlci1DUFUgbWFuYWdlbWVudCwgYW5kIGhvdyB0aGVzZSBpdGVyYXRpb24gbWV0aG9kcyBpbXBhY3QgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgd2l0aGluIHRob3NlIHBlci1DUFUgcmVnaW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgbWVjaGFuaWNzLiBJcyBpdCBqdXN0IGFib3V0IGl0ZXJhdGluZyB0aHJvdWdoIGZyZWUgYmxvY2tzLCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkPyBBcmUgd2UgZGVhbGluZyB3aXRoIG1ldGFkYXRhIHN0cnVjdHVyZXMsIGxpbmtlZCBsaXN0cywgYml0bWFwIHJlcHJlc2VudGF0aW9ucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRpbWUgdG8gZ2V0IGdyYW51bGFyIGFuZCBsb29rIGF0IHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aG9zZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgcGNwdV9mb3JfZWFjaF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wZXJjcHUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wZXJjcHUuYz00MjA9c3RhdGljIHZvaWQgcGNwdV9uZXh0X2ZpdF9yZWdpb24oc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgYWxsb2NfYml0cyxcbi0tXG5tbS9wZXJjcHUuYy00NzYtICovXG5tbS9wZXJjcHUuYzo0Nzc6I2RlZmluZSBwY3B1X2Zvcl9lYWNoX21kX2ZyZWVfcmVnaW9uKGNodW5rLCBiaXRfb2ZmLCBiaXRzKVx0XHRcXFxubW0vcGVyY3B1LmMtNDc4LVx0Zm9yIChwY3B1X25leHRfbWRfZnJlZV9yZWdpb24oKGNodW5rKSwgXHUwMDI2KGJpdF9vZmYpLCBcdTAwMjYoYml0cykpO1x0XFxcbi0tXG5tbS9wZXJjcHUuYy00ODItXG5tbS9wZXJjcHUuYzo0ODM6I2RlZmluZSBwY3B1X2Zvcl9lYWNoX2ZpdF9yZWdpb24oY2h1bmssIGFsbG9jX2JpdHMsIGFsaWduLCBiaXRfb2ZmLCBiaXRzKSAgICAgXFxcbm1tL3BlcmNwdS5jLTQ4NC1cdGZvciAocGNwdV9uZXh0X2ZpdF9yZWdpb24oKGNodW5rKSwgKGFsbG9jX2JpdHMpLCAoYWxpZ24pLCBcdTAwMjYoYml0X29mZiksIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIzNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vcGVyY3B1LmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHBlci1DUFUgdmFyaWFibGVzIGFyZSBiZWluZyBoYW5kbGVkIGluIHRoZSBrZXJuZWwuIFRoZSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBhY2Nlc3MuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgbW0vcGVyY3B1LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDQyMC00OTAuIFRoYXQgYXJlYSBzaG91bGQgY29udGFpbiB0aGUga2V5IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIHBlci1jcHUgc3lzdGVtLCBpZiBteSBtZW1vcnkgc2VydmVzIG1lIHJpZ2h0LCBJIGJlbGlldmUgdGhpcyBpcyB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGZ1bmN0aW9ucyBmb3IgaW5pdGlhbGl6aW5nIGFuZCBhY2Nlc3NpbmcgcGVyLWNwdSBtZW1vcnkgYXJlIGRlZmluZWQuIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwZXJoYXBzIHNvbWUgaW1wb3J0YW50IG1hY3JvIGRlZmluaXRpb25zLiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgbWVtb3J5IGxheW91dCBhbmQgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIHdpdGhpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUsIGFzIHRoZSBhbGxvY2F0aW9uIGFuZCBhY2Nlc3MgbWV0aG9kcyBoYXZlIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5LiBLbm93aW5nIHRoZSBmaW5lciBwb2ludHMgaGVyZSB3aWxsIGFsbG93IG1lIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgbWVtb3J5IHN1YnN5c3RlbSBtb3JlIGJyb2FkbHkuIEFscmlnaHQsIGxldCYjMzk7cyBnZXQgcmVhZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wZXJjcHUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDIwOlx0c3RhdGljIHZvaWQgcGNwdV9uZXh0X2ZpdF9yZWdpb24oc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgYWxsb2NfYml0cyxcbiA0MjE6XHRcdFx0XHRcdCBpbnQgYWxpZ24sIGludCAqYml0X29mZiwgaW50ICpiaXRzKVxuIDQyMjpcdHtcbiA0MjM6XHRcdGludCBpID0gcGNwdV9vZmZfdG9fYmxvY2tfaW5kZXgoKmJpdF9vZmYpO1xuIDQyNDpcdFx0aW50IGJsb2NrX29mZiA9IHBjcHVfb2ZmX3RvX2Jsb2NrX29mZigqYml0X29mZik7XG4gNDI1Olx0XHRzdHJ1Y3QgcGNwdV9ibG9ja19tZCAqYmxvY2s7XG4gNDI2Olx0XG4gNDI3Olx0XHQqYml0cyA9IDA7XG4gNDI4Olx0XHRmb3IgKGJsb2NrID0gY2h1bmstXHUwMDNlbWRfYmxvY2tzICYjNDM7IGk7IGkgXHUwMDNjIHBjcHVfY2h1bmtfbnJfYmxvY2tzKGNodW5rKTtcbiA0Mjk6XHRcdCAgICAgYmxvY2smIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykge1xuIDQzMDpcdFx0XHQvKiBoYW5kbGVzIGNvbnRpZyBhcmVhIGFjcm9zcyBibG9ja3MgKi9cbiA0MzE6XHRcdFx0aWYgKCpiaXRzKSB7XG4gNDMyOlx0XHRcdFx0KmJpdHMgJiM0Mzs9IGJsb2NrLVx1MDAzZWxlZnRfZnJlZTtcbiA0MzM6XHRcdFx0XHRpZiAoKmJpdHMgXHUwMDNlPSBhbGxvY19iaXRzKVxuIDQzNDpcdFx0XHRcdFx0cmV0dXJuO1xuIDQzNTpcdFx0XHRcdGlmIChibG9jay1cdTAwM2VsZWZ0X2ZyZWUgPT0gUENQVV9CSVRNQVBfQkxPQ0tfQklUUylcbiA0MzY6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDQzNzpcdFx0XHR9XG4gNDM4Olx0XG4gNDM5Olx0XHRcdC8qIGNoZWNrIGJsb2NrLVx1MDAzZWNvbnRpZ19oaW50ICovXG4gNDQwOlx0XHRcdCpiaXRzID0gQUxJR04oYmxvY2stXHUwMDNlY29udGlnX2hpbnRfc3RhcnQsIGFsaWduKSAtXG4gNDQxOlx0XHRcdFx0YmxvY2stXHUwMDNlY29udGlnX2hpbnRfc3RhcnQ7XG4gNDQyOlx0XHRcdC8qXG4gNDQzOlx0XHRcdCAqIFRoaXMgdXNlcyB0aGUgYmxvY2sgb2Zmc2V0IHRvIGRldGVybWluZSBpZiB0aGlzIGhhcyBiZWVuXG4gNDQ0Olx0XHRcdCAqIGNoZWNrZWQgaW4gdGhlIHByaW9yIGl0ZXJhdGlvbi5cbiA0NDU6XHRcdFx0ICovXG4gNDQ2Olx0XHRcdGlmIChibG9jay1cdTAwM2Vjb250aWdfaGludCBcdTAwMjZcdTAwMjZcbiA0NDc6XHRcdFx0ICAgIGJsb2NrLVx1MDAzZWNvbnRpZ19oaW50X3N0YXJ0IFx1MDAzZT0gYmxvY2tfb2ZmIFx1MDAyNlx1MDAyNlxuIDQ0ODpcdFx0XHQgICAgYmxvY2stXHUwMDNlY29udGlnX2hpbnQgXHUwMDNlPSAqYml0cyAmIzQzOyBhbGxvY19iaXRzKSB7XG4gNDQ5Olx0XHRcdFx0aW50IHN0YXJ0ID0gcGNwdV9uZXh0X2hpbnQoYmxvY2ssIGFsbG9jX2JpdHMpO1xuIDQ1MDpcdFxuIDQ1MTpcdFx0XHRcdCpiaXRzICYjNDM7PSBhbGxvY19iaXRzICYjNDM7IGJsb2NrLVx1MDAzZWNvbnRpZ19oaW50X3N0YXJ0IC1cbiA0NTI6XHRcdFx0XHRcdCBzdGFydDtcbiA0NTM6XHRcdFx0XHQqYml0X29mZiA9IHBjcHVfYmxvY2tfb2ZmX3RvX29mZihpLCBzdGFydCk7XG4gNDU0Olx0XHRcdFx0cmV0dXJuO1xuIDQ1NTpcdFx0XHR9XG4gNDU2Olx0XHRcdC8qIHJlc2V0IHRvIHNhdGlzZnkgdGhlIHNlY29uZCBwcmVkaWNhdGUgYWJvdmUgKi9cbiA0NTc6XHRcdFx0YmxvY2tfb2ZmID0gMDtcbiA0NTg6XHRcbiA0NTk6XHRcdFx0KmJpdF9vZmYgPSBBTElHTihQQ1BVX0JJVE1BUF9CTE9DS19CSVRTIC0gYmxvY2stXHUwMDNlcmlnaHRfZnJlZSxcbiA0NjA6XHRcdFx0XHRcdCBhbGlnbik7XG4gNDYxOlx0XHRcdCpiaXRzID0gUENQVV9CSVRNQVBfQkxPQ0tfQklUUyAtICpiaXRfb2ZmO1xuIDQ2MjpcdFx0XHQqYml0X29mZiA9IHBjcHVfYmxvY2tfb2ZmX3RvX29mZihpLCAqYml0X29mZik7XG4gNDYzOlx0XHRcdGlmICgqYml0cyBcdTAwM2U9IGFsbG9jX2JpdHMpXG4gNDY0Olx0XHRcdFx0cmV0dXJuO1xuIDQ2NTpcdFx0fVxuIDQ2NjpcdFxuIDQ2NzpcdFx0Lyogbm8gdmFsaWQgb2Zmc2V0cyB3ZXJlIGZvdW5kIC0gZmFpbCBjb25kaXRpb24gKi9cbiA0Njg6XHRcdCpiaXRfb2ZmID0gcGNwdV9jaHVua19tYXBfYml0cyhjaHVuayk7XG4gNDY5Olx0fVxuIDQ3MDpcdFxuIDQ3MTpcdC8qXG4gNDcyOlx0ICogTWV0YWRhdGEgZnJlZSBhcmVhIGl0ZXJhdG9ycy4gIFRoZXNlIHBlcmZvcm0gYWdncmVnYXRpb24gb2YgZnJlZSBhcmVhc1xuIDQ3MzpcdCAqIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBibG9ja3MgYW5kIHJldHVybiB0aGUgb2Zmc2V0IEBiaXRfb2ZmIGFuZCBzaXplIGluXG4gNDc0Olx0ICogYml0cyBvZiB0aGUgZnJlZSBhcmVhIEBiaXRzLiAgcGNwdV9mb3JfZWFjaF9maXRfcmVnaW9uIG9ubHkgcmV0dXJucyB3aGVuXG4gNDc1Olx0ICogYSBmaXQgaXMgZm91bmQgZm9yIHRoZSBhbGxvY2F0aW9uIHJlcXVlc3QuXG4gNDc2Olx0ICovXG4gNDc3Olx0I2RlZmluZSBwY3B1X2Zvcl9lYWNoX21kX2ZyZWVfcmVnaW9uKGNodW5rLCBiaXRfb2ZmLCBiaXRzKVx0XHRcXFxuIDQ3ODpcdFx0Zm9yIChwY3B1X25leHRfbWRfZnJlZV9yZWdpb24oKGNodW5rKSwgXHUwMDI2KGJpdF9vZmYpLCBcdTAwMjYoYml0cykpO1x0XFxcbiA0Nzk6XHRcdCAgICAgKGJpdF9vZmYpIFx1MDAzYyBwY3B1X2NodW5rX21hcF9iaXRzKChjaHVuaykpO1x0XHRcdFxcXG4gNDgwOlx0XHQgICAgIChiaXRfb2ZmKSAmIzQzOz0gKGJpdHMpICYjNDM7IDEsXHRcdFx0XHRcdFxcXG4gNDgxOlx0XHQgICAgIHBjcHVfbmV4dF9tZF9mcmVlX3JlZ2lvbigoY2h1bmspLCBcdTAwMjYoYml0X29mZiksIFx1MDAyNihiaXRzKSkpXG4gNDgyOlx0XG4gNDgzOlx0I2RlZmluZSBwY3B1X2Zvcl9lYWNoX2ZpdF9yZWdpb24oY2h1bmssIGFsbG9jX2JpdHMsIGFsaWduLCBiaXRfb2ZmLCBiaXRzKSAgICAgXFxcbiA0ODQ6XHRcdGZvciAocGNwdV9uZXh0X2ZpdF9yZWdpb24oKGNodW5rKSwgKGFsbG9jX2JpdHMpLCAoYWxpZ24pLCBcdTAwMjYoYml0X29mZiksIFxcXG4gNDg1Olx0XHRcdFx0XHQgIFx1MDAyNihiaXRzKSk7XHRcdFx0XHQgICAgICBcXFxuIDQ4NjpcdFx0ICAgICAoYml0X29mZikgXHUwMDNjIHBjcHVfY2h1bmtfbWFwX2JpdHMoKGNodW5rKSk7XHRcdFx0ICAgICAgXFxcbiA0ODc6XHRcdCAgICAgKGJpdF9vZmYpICYjNDM7PSAoYml0cyksXHRcdFx0XHRcdCAgICAgIFxcXG4gNDg4Olx0XHQgICAgIHBjcHVfbmV4dF9maXRfcmVnaW9uKChjaHVuayksIChhbGxvY19iaXRzKSwgKGFsaWduKSwgXHUwMDI2KGJpdF9vZmYpLCBcXFxuIDQ4OTpcdFx0XHRcdFx0ICBcdTAwMjYoYml0cykpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcGVyIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gd2UgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0JiMzOTtzIG5vdCBqdXN0IHNraW0gdGhlIHN1cmZhY2UuIFRoZSBjb2RlIGlzIHBvaW50aW5nIHRvIGBwY3B1X25leHRfbWRfZnJlZV9yZWdpb25gIOKAkyB0aGF0IHNvdW5kcyBsaWtlIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgZnJlZSBtZW1vcnkgcmVnaW9ucywgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIHBlci1DUFUgY29udGV4dC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSByZWFsbHkgY2xvc2UgbG9vayBhdCB0aGUgY29kZSBiZXR3ZWVuIGxpbmVzIDM3MCBhbmQgNDIwLiBUaGlzIHNlY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgZmluZGluZyB0aGUgbmV4dCBhdmFpbGFibGUgZnJlZSBjaHVuayByZXNpZGVzLCBvciBwZXJoYXBzIGhvdyB0aGUgZnJlZSByZWdpb25zIGFyZSB0cmFja2VkIGFuZCB1cGRhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgaXQgaGFuZGxlcyBmcmFnbWVudGF0aW9uLCBtZXJnaW5nLCBhbmQgYW55IHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24gaWYgbXVsdGlwbGUgQ1BVcyBhcmUgb3BlcmF0aW5nIGNvbmN1cnJlbnRseS4gVGhpcyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIG1vZHVsZSBpbiBpdHMgZW50aXJldHkuIEl0IGNvdWxkIGludm9sdmUgYml0bWFwIGNoZWNrcywgbGlua2VkIGxpc3RzIG9yIGJ1ZGR5IGFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGVyY3B1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3MDpcdFx0c3RydWN0IHBjcHVfYmxvY2tfbWQgKmJsb2NrO1xuIDM3MTpcdFxuIDM3MjpcdFx0KmJpdHMgPSAwO1xuIDM3MzpcdFx0Zm9yIChibG9jayA9IGNodW5rLVx1MDAzZW1kX2Jsb2NrcyAmIzQzOyBpOyBpIFx1MDAzYyBwY3B1X2NodW5rX25yX2Jsb2NrcyhjaHVuayk7XG4gMzc0Olx0XHQgICAgIGJsb2NrJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbiAzNzU6XHRcdFx0LyogaGFuZGxlcyBjb250aWcgYXJlYSBhY3Jvc3MgYmxvY2tzICovXG4gMzc2Olx0XHRcdGlmICgqYml0cykge1xuIDM3NzpcdFx0XHRcdCpiaXRzICYjNDM7PSBibG9jay1cdTAwM2VsZWZ0X2ZyZWU7XG4gMzc4Olx0XHRcdFx0aWYgKGJsb2NrLVx1MDAzZWxlZnRfZnJlZSA9PSBQQ1BVX0JJVE1BUF9CTE9DS19CSVRTKVxuIDM3OTpcdFx0XHRcdFx0Y29udGludWU7XG4gMzgwOlx0XHRcdFx0cmV0dXJuO1xuIDM4MTpcdFx0XHR9XG4gMzgyOlx0XG4gMzgzOlx0XHRcdC8qXG4gMzg0Olx0XHRcdCAqIFRoaXMgY2hlY2tzIHRocmVlIHRoaW5ncy4gIEZpcnN0IGlzIHRoZXJlIGEgY29udGlnX2hpbnQgdG9cbiAzODU6XHRcdFx0ICogY2hlY2suICBTZWNvbmQsIGhhdmUgd2UgY2hlY2tlZCB0aGlzIGhpbnQgYmVmb3JlIGJ5XG4gMzg2Olx0XHRcdCAqIGNvbXBhcmluZyB0aGUgYmxvY2tfb2ZmLiAgVGhpcmQsIGlzIHRoaXMgdGhlIHNhbWUgYXMgdGhlXG4gMzg3Olx0XHRcdCAqIHJpZ2h0IGNvbnRpZyBoaW50LiAgSW4gdGhlIGxhc3QgY2FzZSwgaXQgc3BpbGxzIG92ZXIgaW50b1xuIDM4ODpcdFx0XHQgKiB0aGUgbmV4dCBibG9jayBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGNvbnRpZyBhcmVhXG4gMzg5Olx0XHRcdCAqIGFjcm9zcyBibG9ja3MgY29kZS5cbiAzOTA6XHRcdFx0ICovXG4gMzkxOlx0XHRcdCpiaXRzID0gYmxvY2stXHUwMDNlY29udGlnX2hpbnQ7XG4gMzkyOlx0XHRcdGlmICgqYml0cyBcdTAwMjZcdTAwMjYgYmxvY2stXHUwMDNlY29udGlnX2hpbnRfc3RhcnQgXHUwMDNlPSBibG9ja19vZmYgXHUwMDI2XHUwMDI2XG4gMzkzOlx0XHRcdCAgICAqYml0cyAmIzQzOyBibG9jay1cdTAwM2Vjb250aWdfaGludF9zdGFydCBcdTAwM2MgUENQVV9CSVRNQVBfQkxPQ0tfQklUUykge1xuIDM5NDpcdFx0XHRcdCpiaXRfb2ZmID0gcGNwdV9ibG9ja19vZmZfdG9fb2ZmKGksXG4gMzk1Olx0XHRcdFx0XHRcdGJsb2NrLVx1MDAzZWNvbnRpZ19oaW50X3N0YXJ0KTtcbiAzOTY6XHRcdFx0XHRyZXR1cm47XG4gMzk3Olx0XHRcdH1cbiAzOTg6XHRcdFx0LyogcmVzZXQgdG8gc2F0aXNmeSB0aGUgc2Vjb25kIHByZWRpY2F0ZSBhYm92ZSAqL1xuIDM5OTpcdFx0XHRibG9ja19vZmYgPSAwO1xuIDQwMDpcdFxuIDQwMTpcdFx0XHQqYml0cyA9IGJsb2NrLVx1MDAzZXJpZ2h0X2ZyZWU7XG4gNDAyOlx0XHRcdCpiaXRfb2ZmID0gKGkgJiM0MzsgMSkgKiBQQ1BVX0JJVE1BUF9CTE9DS19CSVRTIC0gYmxvY2stXHUwMDNlcmlnaHRfZnJlZTtcbiA0MDM6XHRcdH1cbiA0MDQ6XHR9XG4gNDA1Olx0XG4gNDA2Olx0LyoqXG4gNDA3Olx0ICogcGNwdV9uZXh0X2ZpdF9yZWdpb24gLSBmaW5kcyBmaXQgYXJlYXMgZm9yIGEgZ2l2ZW4gYWxsb2NhdGlvbiByZXF1ZXN0XG4gNDA4Olx0ICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdFxuIDQwOTpcdCAqIEBhbGxvY19iaXRzOiBzaXplIG9mIGFsbG9jYXRpb25cbiA0MTA6XHQgKiBAYWxpZ246IGFsaWdubWVudCBvZiBhcmVhIChtYXggUEFHRV9TSVpFKVxuIDQxMTpcdCAqIEBiaXRfb2ZmOiBjaHVuayBvZmZzZXRcbiA0MTI6XHQgKiBAYml0czogc2l6ZSBvZiBmcmVlIGFyZWFcbiA0MTM6XHQgKlxuIDQxNDpcdCAqIEZpbmRzIHRoZSBuZXh0IGZyZWUgcmVnaW9uIHRoYXQgaXMgdmlhYmxlIGZvciB1c2Ugd2l0aCBhIGdpdmVuIHNpemUgYW5kXG4gNDE1Olx0ICogYWxpZ25tZW50LiAgVGhpcyBvbmx5IHJldHVybnMgaWYgdGhlcmUgaXMgYSB2YWxpZCBhcmVhIHRvIGJlIHVzZWQgZm9yIHRoaXNcbiA0MTY6XHQgKiBhbGxvY2F0aW9uLiAgYmxvY2stXHUwMDNlZmlyc3RfZnJlZSBpcyByZXR1cm5lZCBpZiB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0IGZpdHNcbiA0MTc6XHQgKiB3aXRoaW4gdGhlIGJsb2NrIHRvIHNlZSBpZiB0aGUgcmVxdWVzdCBjYW4gYmUgZnVsZmlsbGVkIHByaW9yIHRvIHRoZSBjb250aWdcbiA0MTg6XHQgKiBoaW50LlxuIDQxOTpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODM3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWR1bmRhbnQgQ29kZSBpbiBQZXItQ1BVIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGRpZmZzLiBJIHNlZSBhIHBhdHRlcm4gaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2Ugc29tZSB1bm5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbiBpcyBoYXBwZW5pbmcuIEluIGBwY3B1X2NodW5rX3JlZnJlc2hfaGludCgpYCwgSSBub3RpY2VkIHRoYXQgYGJpdHNgIGlzIHNldCB0byB6ZXJvICpiZWZvcmUqIGEgbG9vcCB0aGF0IHJlbGllcyBvbiBhIGZ1bmN0aW9uLCBgcGNwdV9uZXh0X21kX2ZyZWVfcmVnaW9uYCwgdG8gaW5pdGlhbGl6ZSBgYml0c2AuIFRoaXMgbWVhbnMgdGhhdCB0aGUgaW5pdGlhbCBgYml0cyA9IDA7YCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudDsgdGhlIGZ1bmN0aW9uIGFscmVhZHkgaGFuZGxlcyB0aGF0LiBUaGUgc2FtZSB0aGluZyBpcyBoYXBwZW5pbmcgaW4gYHBjcHVfZmluZF9ibG9ja19maXQoKWAuIEFnYWluLCBgYml0c2AgaXMgbmVlZGxlc3NseSB6ZXJvZWQgb3V0IGJlZm9yZSBgcGNwdV9mb3JfZWFjaF9maXRfcmVnaW9uYCB3aGljaCBhbHJlYWR5IGhhbmRsZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBiaXRzYCB1c2luZyBgcGNwdV9uZXh0X2ZpdF9yZWdpb25gLgoKVGhlbiwgbG9va2luZyBhdCB0aGUgY2hhbmdlIGluIGBwY3B1X2J1aWxkX2FsbG9jX2luZm8oKWAsIGl0IGxvb2tzIGxpa2UgYG5yX2dyb3Vwc2AgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgZGlmZmVyZW50bHkuIFByZXZpb3VzbHksIGJvdGggYG5yX2dyb3Vwc2AgYW5kIGBucl91bml0c2Agd2VyZSBpbml0aWFsaXplZCBvbiB0aGUgc2FtZSBsaW5lLiBJbiB0aGlzIGNhc2UsIGBucl9ncm91cHNgIGlzIG5vIGxvbmdlciBiZWluZyBhc3NpZ25lZCBhbiBpbml0aWFsIHZhbHVlIGFuZCBgbnJfdW5pdHNgIGlzIGluaXRpYWxpemVkIHRvIHplcm8uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IGBucl9ncm91cHNgIGFuZCBgbWFza2AgYXJlIHVzZWQgaW4gdGhpcyBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCBubyBpc3N1ZXMgYXJlIGludHJvZHVjZWQuIEnigJlsbCBtYWtlIHN1cmUgdG8gZG91YmxlIGNoZWNrIGxpbmVzIDI4NDAtMjkwMCBvZiBgbW0vcGVyY3B1LmNgIHRvIGNvbmZpcm0gdGhhdCBgbnJfZ3JvdXBzYCBhbmQgYG1hc2tgIGFyZSBiZWluZyBwcm9wZXJseSBzZXQgd2l0aGluIHRoZSBmdW5jdGlvbiYjMzk7cyBmbG93LiBPdmVyYWxsLCBpdCBsb29rcyBsaWtlIHRoZXNlIGNoYW5nZXMgYXJlIGFpbWVkIGF0IHJlbW92aW5nIHVubmVjZXNzYXJ5IGNvZGUgYW5kIGltcHJvdmluZyBjb2RlIGNsYXJpdHksIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGUgaW1wbGljYXRpb25zIG9mIHRob3NlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGVyY3B1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NDA6XHRcdCAqIHdoaWNoIGNhbiBhY2NvbW1vZGF0ZSA0ayBhbGlnbmVkIHNlZ21lbnRzIHdoaWNoIGFyZSBlcXVhbCB0b1xuMjg0MTpcdFx0ICogb3IgbGFyZ2VyIHRoYW4gbWluX3VuaXRfc2l6ZS5cbjI4NDI6XHRcdCAqL1xuMjg0MzpcdFx0bWluX3VuaXRfc2l6ZSA9IG1heF90KHNpemVfdCwgc2l6ZV9zdW0sIFBDUFVfTUlOX1VOSVRfU0laRSk7XG4yODQ0Olx0XG4yODQ1Olx0XHQvKiBkZXRlcm1pbmUgdGhlIG1heGltdW0gIyBvZiB1bml0cyB0aGF0IGNhbiBmaXQgaW4gYW4gYWxsb2NhdGlvbiAqL1xuMjg0NjpcdFx0YWxsb2Nfc2l6ZSA9IHJvdW5kdXAobWluX3VuaXRfc2l6ZSwgYXRvbV9zaXplKTtcbjI4NDc6XHRcdHVwYSA9IGFsbG9jX3NpemUgLyBtaW5fdW5pdF9zaXplO1xuMjg0ODpcdFx0d2hpbGUgKGFsbG9jX3NpemUgJSB1cGEgfHwgKG9mZnNldF9pbl9wYWdlKGFsbG9jX3NpemUgLyB1cGEpKSlcbjI4NDk6XHRcdFx0dXBhLS07XG4yODUwOlx0XHRtYXhfdXBhID0gdXBhO1xuMjg1MTpcdFxuMjg1MjpcdFx0Y3B1bWFza19jb3B5KFx1MDAyNm1hc2ssIGNwdV9wb3NzaWJsZV9tYXNrKTtcbjI4NTM6XHRcbjI4NTQ6XHRcdC8qIGdyb3VwIGNwdXMgYWNjb3JkaW5nIHRvIHRoZWlyIHByb3hpbWl0eSAqL1xuMjg1NTpcdFx0Zm9yIChncm91cCA9IDA7ICFjcHVtYXNrX2VtcHR5KFx1MDAyNm1hc2spOyBncm91cCYjNDM7JiM0MzspIHtcbjI4NTY6XHRcdFx0LyogcG9wIHRoZSBncm91cCYjMzk7cyBmaXJzdCBjcHUgKi9cbjI4NTc6XHRcdFx0Y3B1ID0gY3B1bWFza19maXJzdChcdTAwMjZtYXNrKTtcbjI4NTg6XHRcdFx0Z3JvdXBfbWFwW2NwdV0gPSBncm91cDtcbjI4NTk6XHRcdFx0Z3JvdXBfY250W2dyb3VwXSYjNDM7JiM0Mzs7XG4yODYwOlx0XHRcdGNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgXHUwMDI2bWFzayk7XG4yODYxOlx0XG4yODYyOlx0XHRcdGZvcl9lYWNoX2NwdSh0Y3B1LCBcdTAwMjZtYXNrKSB7XG4yODYzOlx0XHRcdFx0aWYgKCFjcHVfZGlzdGFuY2VfZm4gfHxcbjI4NjQ6XHRcdFx0XHQgICAgKGNwdV9kaXN0YW5jZV9mbihjcHUsIHRjcHUpID09IExPQ0FMX0RJU1RBTkNFIFx1MDAyNlx1MDAyNlxuMjg2NTpcdFx0XHRcdCAgICAgY3B1X2Rpc3RhbmNlX2ZuKHRjcHUsIGNwdSkgPT0gTE9DQUxfRElTVEFOQ0UpKSB7XG4yODY2Olx0XHRcdFx0XHRncm91cF9tYXBbdGNwdV0gPSBncm91cDtcbjI4Njc6XHRcdFx0XHRcdGdyb3VwX2NudFtncm91cF0mIzQzOyYjNDM7O1xuMjg2ODpcdFx0XHRcdFx0Y3B1bWFza19jbGVhcl9jcHUodGNwdSwgXHUwMDI2bWFzayk7XG4yODY5Olx0XHRcdFx0fVxuMjg3MDpcdFx0XHR9XG4yODcxOlx0XHR9XG4yODcyOlx0XHRucl9ncm91cHMgPSBncm91cDtcbjI4NzM6XHRcbjI4NzQ6XHRcdC8qXG4yODc1Olx0XHQgKiBXYXN0ZWQgc3BhY2UgaXMgY2F1c2VkIGJ5IGEgcmF0aW8gaW1iYWxhbmNlIG9mIHVwYSB0byBncm91cF9jbnQuXG4yODc2Olx0XHQgKiBFeHBhbmQgdGhlIHVuaXRfc2l6ZSB1bnRpbCB3ZSB1c2UgXHUwMDNlPSA3NSUgb2YgdGhlIHVuaXRzIGFsbG9jYXRlZC5cbjI4Nzc6XHRcdCAqIFJlbGF0ZWQgdG8gYXRvbV9zaXplLCB3aGljaCBjb3VsZCBiZSBtdWNoIGxhcmdlciB0aGFuIHRoZSB1bml0X3NpemUuXG4yODc4Olx0XHQgKi9cbjI4Nzk6XHRcdGxhc3RfYWxsb2NzID0gSU5UX01BWDtcbjI4ODA6XHRcdGJlc3RfdXBhID0gMDtcbjI4ODE6XHRcdGZvciAodXBhID0gbWF4X3VwYTsgdXBhOyB1cGEtLSkge1xuMjg4MjpcdFx0XHRpbnQgYWxsb2NzID0gMCwgd2FzdGVkID0gMDtcbjI4ODM6XHRcbjI4ODQ6XHRcdFx0aWYgKGFsbG9jX3NpemUgJSB1cGEgfHwgKG9mZnNldF9pbl9wYWdlKGFsbG9jX3NpemUgLyB1cGEpKSlcbjI4ODU6XHRcdFx0XHRjb250aW51ZTtcbjI4ODY6XHRcbjI4ODc6XHRcdFx0Zm9yIChncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBucl9ncm91cHM7IGdyb3VwJiM0MzsmIzQzOykge1xuMjg4ODpcdFx0XHRcdGludCB0aGlzX2FsbG9jcyA9IERJVl9ST1VORF9VUChncm91cF9jbnRbZ3JvdXBdLCB1cGEpO1xuMjg4OTpcdFx0XHRcdGFsbG9jcyAmIzQzOz0gdGhpc19hbGxvY3M7XG4yODkwOlx0XHRcdFx0d2FzdGVkICYjNDM7PSB0aGlzX2FsbG9jcyAqIHVwYSAtIGdyb3VwX2NudFtncm91cF07XG4yODkxOlx0XHRcdH1cbjI4OTI6XHRcbjI4OTM6XHRcdFx0LypcbjI4OTQ6XHRcdFx0ICogRG9uJiMzOTt0IGFjY2VwdCBpZiB3YXN0YWdlIGlzIG92ZXIgMS8zLiAgVGhlXG4yODk1Olx0XHRcdCAqIGdyZWF0ZXItdGhhbiBjb21wYXJpc29uIGVuc3VyZXMgdXBhPT0xIGFsd2F5c1xuMjg5NjpcdFx0XHQgKiBwYXNzZXMgdGhlIGZvbGxvd2luZyBjaGVjay5cbjI4OTc6XHRcdFx0ICovXG4yODk4Olx0XHRcdGlmICh3YXN0ZWQgXHUwMDNlIG51bV9wb3NzaWJsZV9jcHVzKCkgLyAzKVxuMjg5OTpcdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjgxCgkJCQkJCQlvdXRwdXQ6IDk1CgkJCQkJCQl0aG91Z2h0czogODIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gZXhhbWluaW5nIGEgcGF0Y2ggdGhhdCBzZWVtcyBmb2N1c2VkIG9uIGNvZGUgY2xlYW51cCB3aXRoaW4gdGhlIHBlci1DUFUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSAoYG1tL3BlcmNwdS5jYCkuIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGUgY2hhbmdlcyBjYXJlZnVsbHkuIEl0IGFwcGVhcnMgdGhhdCB0aGVyZSBhcmUgYSBmZXcga2V5IGFkanVzdG1lbnRzOiByZW1vdmluZyB1bnVzZWQgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBlbGltaW5hdGluZyByZWR1bmRhbnQgZnVuY3Rpb24gY2FsbHMsIGFuZCBnZXR0aW5nIHJpZCBvZiBhIGRlYWQgYHJldHVybmAgc3RhdGVtZW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIHRoYXQgYG5yX2dyb3Vwc2Agd2FzIGluaXRpYWxpemVkIHRvIGAxYCwgYnV0IG92ZXJ3cml0dGVuIGJlZm9yZSBiZWluZyB1c2VkLCBhbmQgc2ltaWxhcmx5LCBgY3B1bWFza19jbGVhcigmYW1wO21hc2spYCB3YXMgZm9sbG93ZWQgYnkgYSBjb21wbGV0ZSBvdmVyd3JpdGUsIGFuZCB0aGVyZSYjMzk7cyBhIHN1cGVyZmx1b3VzIGByZXR1cm5gIGF0IHRoZSBlbmQgb2YgYSBgdm9pZGAgZnVuY3Rpb24uIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGlzIHdpdGggdGhlIHJlbGV2YW50IGxpbmVzIGluIGBwY3B1X2J1aWxkX2FsbG9jX2luZm8oKWAgYW5kIGBwY3B1X3BvcHVsYXRlX3B0ZWAuCgpUaGUgY2hhbmdlcyBhcmU6CgoxLiAgUmVtb3ZpbmcgdGhlIHVubmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIG9mIGBiaXRzID0gMDtgIGJlZm9yZSBtYWNyb3MgdGhhdCByZXNldCB0aGUgdmFsdWUgaW50ZXJuYWxseS4KMi4gIFJlbW92aW5nIHRoZSB1c2VsZXNzIGBucl9ncm91cHMgPSAxYCBpbml0aWFsaXphdGlvbiBhbmQgYGNwdW1hc2tfY2xlYXIoJmFtcDttYXNrKTtgLgozLiAgUmVtb3ZpbmcgdGhlIHJlZHVuZGFudCBgcmV0dXJuO2AgYXQgdGhlIGVuZCBvZiBgcGNwdV9wb3B1bGF0ZV9wdGVgLgoKTXkgZXZhbHVhdGlvbiBoaW5nZXMgb24gd2hldGhlciB0aGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgcHJvZ3JhbSYjMzk7cyBiZWhhdmlvci4gQmFzZWQgb24gbXkgcmV2aWV3IG9mIHRoZSBjb2RlIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwZXItQ1BVIG1lbW9yeSBzdWJzeXN0ZW0sIHRoZXNlIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgY2hhbmdlcy4gVGhleSBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIG9yIG1vZGlmeSB0aGUgZXhlY3V0aW9uIHBhdGggaW4gYW55IG1lYW5pbmdmdWwgd2F5LiBNeSB0ZXN0cyBvZiB0aGUgYGJpdHMgPSAwYCwgYG5yX2dyb3Vwc2AsIGBjcHVtYXNrX2NsZWFyKCZhbXA7bWFzaylgLCBhbmQgYHJldHVybjtgIGFsbCBhbGlnbiB3aXRoIHRoaXMgYXNzZXNzbWVudC4KCkNvbnNpZGVyaW5nIHRoZSBndWlkZWxpbmVzLCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhpcyBwYXRjaCBjb250YWlucyBjaGFuZ2VzIHRvIGNvZGUgdGhhdCBjb3VsZCBiZSBleGVjdXRlZC4gSSBoYXZlIGNvbWUgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCB0aGlzIHBhdGNoIGRvZXMgbm90IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvciBzZW1hbnRpY3Mgb2YgdGhlIGNvZGUuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCBjb250YWlucyBwdXJlbHkgY29zbWV0aWMgY2hhbmdlcyBhbmQgbm8gZnVuY3Rpb25hbCBpbXBhY3QsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBJJiMzOTttIGdvaW5nIHRvIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbDoKCiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWAKKiAgIGBGb2N1c1N5bWJvbHM6IFtdYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFtdYAoqICAgYFJlYXNvbmluZzogVGhpcyBwYXRjaCBjb250YWlucyBwdXJlbHkgY29kZSBjbGVhbnVwIGNoYW5nZXMgd2l0aGluIG1tL3BlcmNwdS5jLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdGhlIHJlbW92YWwgb2YgZGVhZCBjb2RlICh1bm5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbnMsIGEgcmVkdW5kYW50IHJldHVybiBzdGF0ZW1lbnQpIGFuZCBoYXZlIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdyBvciBzZW1hbnRpY3Mgb2YgdGhlIGNvZGUuYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIHB1cmVseSBvZiBjb2RlIGNsZWFudXBzIGluIG1tL3BlcmNwdS5jLCByZW1vdmluZyByZWR1bmRhbnQgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBhbiB1bm5lY2Vzc2FyeSBjcHVtYXNrX2NsZWFyKCkgcHJpb3IgdG8gY3B1bWFza19jb3B5KCksIGFuZCBhbiBlbXB0eSByZXR1cm4gc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgYSB2b2lkIGZ1bmN0aW9uLiBUaGVzZSBjaGFuZ2VzIGhhdmUgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24ga2VybmVsIGV4ZWN1dGlvbiBmbG93IG9yIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgcHVyZWx5IG9mIGNvZGUgY2xlYW51cHMgaW4gbW0vcGVyY3B1LmMsIHJlbW92aW5nIHJlZHVuZGFudCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIGFuIHVubmVjZXNzYXJ5IGNwdW1hc2tfY2xlYXIoKSBwcmlvciB0byBjcHVtYXNrX2NvcHkoKSwgYW5kIGFuIGVtcHR5IHJldHVybiBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiBhIHZvaWQgZnVuY3Rpb24uIFRoZXNlIGNoYW5nZXMgaGF2ZSBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3IgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MDk6NTkuMTQ4ODczNDUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg4MjA5MDc4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBwdXJlbHkgb2YgY29kZSBjbGVhbnVwcyBpbiBtbS9wZXJjcHUuYywgcmVtb3ZpbmcgcmVkdW5kYW50IHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgYW4gdW5uZWNlc3NhcnkgY3B1bWFza19jbGVhcigpIHByaW9yIHRvIGNwdW1hc2tfY29weSgpLCBhbmQgYW4gZW1wdHkgcmV0dXJuIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIGEgdm9pZCBmdW5jdGlvbi4gVGhlc2UgY2hhbmdlcyBoYXZlIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIGtlcm5lbCBleGVjdXRpb24gZmxvdyBvciBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjA5OjU5LjE0ODg3ODEzMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgyNzAwMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzJmMDU0NjViYTRlMjNjMGY4OTM5ZmM1ZjRmMTQwNDU5YWUyNGFiOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjA5OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3BlcmNwdS5jIGIvbW0vcGVyY3B1LmNcXG5pbmRleCBhODAyZDcyYzExNmZiLi45ZGY2Y2RmNjM2ZmQ2IDEwMDY0NFxcbi0tLSBhL21tL3BlcmNwdS5jXFxuKysrIGIvbW0vcGVyY3B1LmNcXG5AQCAtNzU4LDcgKzc1OCw2IEBAIHN0YXRpYyB2b2lkIHBjcHVfY2h1bmtfcmVmcmVzaF9oaW50KHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgYm9vbCBmdWxsX3NjYW4pXFxuIFxcdFxcdGNodW5rX21kLVxcdTAwM2Vjb250aWdfaGludCA9IDA7XFxuIFxcdH1cXG4gXFxuLVxcdGJpdHMgPSAwO1xcbiBcXHRwY3B1X2Zvcl9lYWNoX21kX2ZyZWVfcmVnaW9uKGNodW5rLCBiaXRfb2ZmLCBiaXRzKVxcbiBcXHRcXHRwY3B1X2Jsb2NrX3VwZGF0ZShjaHVua19tZCwgYml0X29mZiwgYml0X29mZiArIGJpdHMpO1xcbiB9XFxuQEAgLTExMjIsNyArMTEyMSw2IEBAIHN0YXRpYyBpbnQgcGNwdV9maW5kX2Jsb2NrX2ZpdChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBhbGxvY19iaXRzLFxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRiaXRfb2ZmID0gcGNwdV9uZXh0X2hpbnQoY2h1bmtfbWQsIGFsbG9jX2JpdHMpO1xcbi1cXHRiaXRzID0gMDtcXG4gXFx0cGNwdV9mb3JfZWFjaF9maXRfcmVnaW9uKGNodW5rLCBhbGxvY19iaXRzLCBhbGlnbiwgYml0X29mZiwgYml0cykge1xcbiBcXHRcXHRpZiAoIXBvcF9vbmx5IHx8IHBjcHVfaXNfcG9wdWxhdGVkKGNodW5rLCBiaXRfb2ZmLCBiaXRzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmV4dF9vZmYpKVxcbkBAIC0yODE5LDcgKzI4MTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBfX2ZsYXR0ZW4gcGNwdV9idWlsZF9hbGxvY19pbmZvKFxcbiBcXHRzdGF0aWMgaW50IGdyb3VwX2NudFtOUl9DUFVTXSBfX2luaXRkYXRhO1xcbiBcXHRzdGF0aWMgc3RydWN0IGNwdW1hc2sgbWFzayBfX2luaXRkYXRhO1xcbiBcXHRjb25zdCBzaXplX3Qgc3RhdGljX3NpemUgPSBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0O1xcbi1cXHRpbnQgbnJfZ3JvdXBzID0gMSwgbnJfdW5pdHMgPSAwO1xcbitcXHRpbnQgbnJfZ3JvdXBzLCBucl91bml0cyA9IDA7XFxuIFxcdHNpemVfdCBzaXplX3N1bSwgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZTtcXG4gXFx0aW50IHVwYSwgbWF4X3VwYSwgYmVzdF91cGE7XFx0LyogdW5pdHNfcGVyX2FsbG9jICovXFxuIFxcdGludCBsYXN0X2FsbG9jcywgZ3JvdXAsIHVuaXQ7XFxuQEAgLTI4MzAsNyArMjgyOCw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICogX19pbml0IF9fZmxhdHRlbiBwY3B1X2J1aWxkX2FsbG9jX2luZm8oXFxuIFxcdC8qIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyAqL1xcbiBcXHRtZW1zZXQoZ3JvdXBfbWFwLCAwLCBzaXplb2YoZ3JvdXBfbWFwKSk7XFxuIFxcdG1lbXNldChncm91cF9jbnQsIDAsIHNpemVvZihncm91cF9jbnQpKTtcXG4tXFx0Y3B1bWFza19jbGVhcihcXHUwMDI2bWFzayk7XFxuIFxcbiBcXHQvKiBjYWxjdWxhdGUgc2l6ZV9zdW0gYW5kIGVuc3VyZSBkeW5fc2l6ZSBpcyBlbm91Z2ggZm9yIGVhcmx5IGFsbG9jICovXFxuIFxcdHNpemVfc3VtID0gUEZOX0FMSUdOKHN0YXRpY19zaXplICsgcmVzZXJ2ZWRfc2l6ZSArXFxuQEAgLTMxODEsOCArMzE3OCw2IEBAIHZvaWQgX19pbml0IF9fd2VhayBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpXFxuIFxcdFxcdG5ldyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBURV9UQUJMRV9TSVpFLCBQVEVfVEFCTEVfU0laRSk7XFxuIFxcdFxcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0sIHBtZCwgbmV3KTtcXG4gXFx0fVxcbi1cXG4tXFx0cmV0dXJuO1xcbiB9XFxuIFxcbiAvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MDk6NTkuNTMyMzc3NjQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4ODQzNzM4ODUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgcHVyZWx5IG9mIGNvZGUgY2xlYW51cHMgaW4gbW0vcGVyY3B1LmMsIHJlbW92aW5nIHJlZHVuZGFudCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIGFuIHVubmVjZXNzYXJ5IGNwdW1hc2tfY2xlYXIoKSBwcmlvciB0byBjcHVtYXNrX2NvcHkoKSwgYW5kIGFuIGVtcHR5IHJldHVybiBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiBhIHZvaWQgZnVuY3Rpb24uIFRoZXNlIGNoYW5nZXMgaGF2ZSBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3IgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MmYwNTQ2NWJhNGUyM2MwZjg5MzlmYzVmNGYxNDA0NTlhZTI0YWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwNzowOTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BlcmNwdS5jIGIvbW0vcGVyY3B1LmNcbmluZGV4IGE4MDJkNzJjMTE2ZmIuLjlkZjZjZGY2MzZmZDYgMTAwNjQ0XG4tLS0gYS9tbS9wZXJjcHUuY1xuKysrIGIvbW0vcGVyY3B1LmNcbkBAIC03NTgsNyArNzU4LDYgQEAgc3RhdGljIHZvaWQgcGNwdV9jaHVua19yZWZyZXNoX2hpbnQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBib29sIGZ1bGxfc2NhbilcbiBcdFx0Y2h1bmtfbWQtXHUwMDNlY29udGlnX2hpbnQgPSAwO1xuIFx0fVxuIFxuLVx0Yml0cyA9IDA7XG4gXHRwY3B1X2Zvcl9lYWNoX21kX2ZyZWVfcmVnaW9uKGNodW5rLCBiaXRfb2ZmLCBiaXRzKVxuIFx0XHRwY3B1X2Jsb2NrX3VwZGF0ZShjaHVua19tZCwgYml0X29mZiwgYml0X29mZiArIGJpdHMpO1xuIH1cbkBAIC0xMTIyLDcgKzExMjEsNiBAQCBzdGF0aWMgaW50IHBjcHVfZmluZF9ibG9ja19maXQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgYWxsb2NfYml0cyxcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0Yml0X29mZiA9IHBjcHVfbmV4dF9oaW50KGNodW5rX21kLCBhbGxvY19iaXRzKTtcbi1cdGJpdHMgPSAwO1xuIFx0cGNwdV9mb3JfZWFjaF9maXRfcmVnaW9uKGNodW5rLCBhbGxvY19iaXRzLCBhbGlnbiwgYml0X29mZiwgYml0cykge1xuIFx0XHRpZiAoIXBvcF9vbmx5IHx8IHBjcHVfaXNfcG9wdWxhdGVkKGNodW5rLCBiaXRfb2ZmLCBiaXRzLFxuIFx0XHRcdFx0XHRcdCAgIFx1MDAyNm5leHRfb2ZmKSlcbkBAIC0yODE5LDcgKzI4MTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBfX2ZsYXR0ZW4gcGNwdV9idWlsZF9hbGxvY19pbmZvKFxuIFx0c3RhdGljIGludCBncm91cF9jbnRbTlJfQ1BVU10gX19pbml0ZGF0YTtcbiBcdHN0YXRpYyBzdHJ1Y3QgY3B1bWFzayBtYXNrIF9faW5pdGRhdGE7XG4gXHRjb25zdCBzaXplX3Qgc3RhdGljX3NpemUgPSBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0O1xuLVx0aW50IG5yX2dyb3VwcyA9IDEsIG5yX3VuaXRzID0gMDtcbitcdGludCBucl9ncm91cHMsIG5yX3VuaXRzID0gMDtcbiBcdHNpemVfdCBzaXplX3N1bSwgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZTtcbiBcdGludCB1cGEsIG1heF91cGEsIGJlc3RfdXBhO1x0LyogdW5pdHNfcGVyX2FsbG9jICovXG4gXHRpbnQgbGFzdF9hbGxvY3MsIGdyb3VwLCB1bml0O1xuQEAgLTI4MzAsNyArMjgyOCw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICogX19pbml0IF9fZmxhdHRlbiBwY3B1X2J1aWxkX2FsbG9jX2luZm8oXG4gXHQvKiB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgKi9cbiBcdG1lbXNldChncm91cF9tYXAsIDAsIHNpemVvZihncm91cF9tYXApKTtcbiBcdG1lbXNldChncm91cF9jbnQsIDAsIHNpemVvZihncm91cF9jbnQpKTtcbi1cdGNwdW1hc2tfY2xlYXIoXHUwMDI2bWFzayk7XG4gXG4gXHQvKiBjYWxjdWxhdGUgc2l6ZV9zdW0gYW5kIGVuc3VyZSBkeW5fc2l6ZSBpcyBlbm91Z2ggZm9yIGVhcmx5IGFsbG9jICovXG4gXHRzaXplX3N1bSA9IFBGTl9BTElHTihzdGF0aWNfc2l6ZSArIHJlc2VydmVkX3NpemUgK1xuQEAgLTMxODEsOCArMzE3OCw2IEBAIHZvaWQgX19pbml0IF9fd2VhayBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHRcdG5ldyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBURV9UQUJMRV9TSVpFLCBQVEVfVEFCTEVfU0laRSk7XG4gXHRcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcG1kLCBuZXcpO1xuIFx0fVxuLVxuLVx0cmV0dXJuO1xuIH1cbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjA5OjU5LjUzMjM3OTI3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NDAyOTIzNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBzdGFydCBieSBjYXJlZnVsbHkgaW5zcGVjdGluZyB0aGUgZGlmZi4gSSB3YW50IHRvIHNlZSB0aGUgZXhhY3QgbGluZXMgbW9kaWZpZWQgYW5kLCBjcnVjaWFsbHksIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBcImJlZm9yZVwiIGFuZCBcImFmdGVyXCIgaXMgdGhlIGtleSB0byBncmFzcGluZyB0aGUgaW50ZW50IGFuZCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiB0aGUgY3VycmVudCBjb2RlYmFzZSBzbyBhbnkgY2hhbmdlcyB3aWxsIGJlIG5vdGljZWQuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCdzIHN0cnVjdHVyZS4gSSdtIGdvaW5nIHRvIHVzZSBhIHRvb2wgbGlrZSBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIGBtbS9wZXJjcHUuY2AuIFRoYXQgZmlsZSBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwZXItQ1BVIG1lbW9yeSBtYW5hZ2VtZW50IHB1enpsZS4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGVzZSBjaGFuZ2VzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gc29tZSBvcHRpbWl6YXRpb24gb3IgZml4IGluIHRoYXQgYXJlYS4gR3JhYmJpbmcgdGhlIGNvZGUgZGlyZWN0bHkgd2lsbCBsZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdCBoeXBvdGhlc2lzIGFuZCB1bmRlcnN0YW5kIHRoZSBsb3cgbGV2ZWwgZWZmZWN0cyBvZiB0aGVzZSBjaGFuZ2VzLiBJJ20gZ29pbmcgdG8gcmVhZCBhcm91bmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gZW5zdXJlIEknbSBnZXR0aW5nIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjaGFuZ2UgZml0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxOSwiT3V0cHV0VG9rZW5zIjoxMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjEwOjE1LjkzNTMwNTMzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wZXJjcHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTA6XFx0XFx0LyogcHJvbW90ZSBzY2FuX2hpbnQgdG8gY29udGlnX2hpbnQgKi9cXG4gNzUxOlxcdFxcdGlmICghZnVsbF9zY2FuIFxcdTAwMjZcXHUwMDI2IGNodW5rX21kLVxcdTAwM2VzY2FuX2hpbnQpIHtcXG4gNzUyOlxcdFxcdFxcdGJpdF9vZmYgPSBjaHVua19tZC1cXHUwMDNlc2Nhbl9oaW50X3N0YXJ0ICsgY2h1bmtfbWQtXFx1MDAzZXNjYW5faGludDtcXG4gNzUzOlxcdFxcdFxcdGNodW5rX21kLVxcdTAwM2Vjb250aWdfaGludF9zdGFydCA9IGNodW5rX21kLVxcdTAwM2VzY2FuX2hpbnRfc3RhcnQ7XFxuIDc1NDpcXHRcXHRcXHRjaHVua19tZC1cXHUwMDNlY29udGlnX2hpbnQgPSBjaHVua19tZC1cXHUwMDNlc2Nhbl9oaW50O1xcbiA3NTU6XFx0XFx0XFx0Y2h1bmtfbWQtXFx1MDAzZXNjYW5faGludCA9IDA7XFxuIDc1NjpcXHRcXHR9IGVsc2Uge1xcbiA3NTc6XFx0XFx0XFx0Yml0X29mZiA9IGNodW5rX21kLVxcdTAwM2VmaXJzdF9mcmVlO1xcbiA3NTg6XFx0XFx0XFx0Y2h1bmtfbWQtXFx1MDAzZWNvbnRpZ19oaW50ID0gMDtcXG4gNzU5OlxcdFxcdH1cXG4gNzYwOlxcdFxcbiA3NjE6XFx0XFx0cGNwdV9mb3JfZWFjaF9tZF9mcmVlX3JlZ2lvbihjaHVuaywgYml0X29mZiwgYml0cylcXG4gNzYyOlxcdFxcdFxcdHBjcHVfYmxvY2tfdXBkYXRlKGNodW5rX21kLCBiaXRfb2ZmLCBiaXRfb2ZmICsgYml0cyk7XFxuIDc2MzpcXHR9XFxuIDc2NDpcXHRcXG4gNzY1OlxcdC8qKlxcbiA3NjY6XFx0ICogcGNwdV9ibG9ja19yZWZyZXNoX2hpbnRcXG4gNzY3OlxcdCAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3RcXG4gNzY4OlxcdCAqIEBpbmRleDogaW5kZXggb2YgdGhlIG1ldGFkYXRhIGJsb2NrXFxuIDc2OTpcXHQgKlxcbiA3NzA6XFx0ICogU2NhbnMgb3ZlciB0aGUgYmxvY2sgYmVnaW5uaW5nIGF0IGZpcnN0X2ZyZWUgYW5kIHVwZGF0ZXMgdGhlIGJsb2NrXFxuIDc3MTpcXHQgKiBtZXRhZGF0YSBhY2NvcmRpbmdseS5cXG4gNzcyOlxcdCAqL1xcbiA3NzM6XFx0c3RhdGljIHZvaWQgcGNwdV9ibG9ja19yZWZyZXNoX2hpbnQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgaW5kZXgpXFxuIDc3NDpcXHR7XFxuIDc3NTpcXHRcXHRzdHJ1Y3QgcGNwdV9ibG9ja19tZCAqYmxvY2sgPSBjaHVuay1cXHUwMDNlbWRfYmxvY2tzICsgaW5kZXg7XFxuIDc3NjpcXHRcXHR1bnNpZ25lZCBsb25nICphbGxvY19tYXAgPSBwY3B1X2luZGV4X2FsbG9jX21hcChjaHVuaywgaW5kZXgpO1xcbiA3Nzc6XFx0XFx0dW5zaWduZWQgaW50IHN0YXJ0LCBlbmQ7XFx0LyogcmVnaW9uIHN0YXJ0LCByZWdpb24gZW5kICovXFxuIDc3ODpcXHRcXG4gNzc5OlxcdFxcdC8qIHByb21vdGUgc2Nhbl9oaW50IHRvIGNvbnRpZ19oaW50ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjEwOjE1LjkzNTU0ODQ3MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wZXJjcHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTE1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTE1OlxcdFxcdC8qXFxuMTExNjpcXHRcXHQgKiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB0byBwcmV2ZW50IHNjYW5uaW5nIGJ5IGFzc3VtaW5nIGlmIHRoZVxcbjExMTc6XFx0XFx0ICogYWxsb2NhdGlvbiBjYW5ub3QgZml0IGluIHRoZSBnbG9iYWwgaGludCwgdGhlcmUgaXMgbWVtb3J5IHByZXNzdXJlXFxuMTExODpcXHRcXHQgKiBhbmQgY3JlYXRpbmcgYSBuZXcgY2h1bmsgd291bGQgaGFwcGVuIHNvb24uXFxuMTExOTpcXHRcXHQgKi9cXG4xMTIwOlxcdFxcdGlmICghcGNwdV9jaGVja19ibG9ja19oaW50KGNodW5rX21kLCBhbGxvY19iaXRzLCBhbGlnbikpXFxuMTEyMTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdGJpdF9vZmYgPSBwY3B1X25leHRfaGludChjaHVua19tZCwgYWxsb2NfYml0cyk7XFxuMTEyNDpcXHRcXHRwY3B1X2Zvcl9lYWNoX2ZpdF9yZWdpb24oY2h1bmssIGFsbG9jX2JpdHMsIGFsaWduLCBiaXRfb2ZmLCBiaXRzKSB7XFxuMTEyNTpcXHRcXHRcXHRpZiAoIXBvcF9vbmx5IHx8IHBjcHVfaXNfcG9wdWxhdGVkKGNodW5rLCBiaXRfb2ZmLCBiaXRzLFxcbjExMjY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm5leHRfb2ZmKSlcXG4xMTI3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjExMjg6XFx0XFxuMTEyOTpcXHRcXHRcXHRiaXRfb2ZmID0gbmV4dF9vZmY7XFxuMTEzMDpcXHRcXHRcXHRiaXRzID0gMDtcXG4xMTMxOlxcdFxcdH1cXG4xMTMyOlxcdFxcbjExMzM6XFx0XFx0aWYgKGJpdF9vZmYgPT0gcGNwdV9jaHVua19tYXBfYml0cyhjaHVuaykpXFxuMTEzNDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTEzNTpcXHRcXG4xMTM2OlxcdFxcdHJldHVybiBiaXRfb2ZmO1xcbjExMzc6XFx0fVxcbjExMzg6XFx0XFxuMTEzOTpcXHQvKlxcbjExNDA6XFx0ICogcGNwdV9maW5kX3plcm9fYXJlYSAtIG1vZGlmaWVkIGZyb20gYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWFfb2ZmKClcXG4xMTQxOlxcdCAqIEBtYXA6IHRoZSBhZGRyZXNzIHRvIGJhc2UgdGhlIHNlYXJjaCBvblxcbjExNDI6XFx0ICogQHNpemU6IHRoZSBiaXRtYXAgc2l6ZSBpbiBiaXRzXFxuMTE0MzpcXHQgKiBAc3RhcnQ6IHRoZSBiaXRudW1iZXIgdG8gc3RhcnQgc2VhcmNoaW5nIGF0XFxuMTE0NDpcXHQgKiBAbnI6IHRoZSBudW1iZXIgb2YgemVyb2VkIGJpdHMgd2UncmUgbG9va2luZyBmb3JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MTA6MTUuOTM1NzU2OTYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BlcmNwdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MTU6XFx0e1xcbjI4MTY6XFx0XFx0c3RhdGljIGludCBncm91cF9tYXBbTlJfQ1BVU10gX19pbml0ZGF0YTtcXG4yODE3OlxcdFxcdHN0YXRpYyBpbnQgZ3JvdXBfY250W05SX0NQVVNdIF9faW5pdGRhdGE7XFxuMjgxODpcXHRcXHRzdGF0aWMgc3RydWN0IGNwdW1hc2sgbWFzayBfX2luaXRkYXRhO1xcbjI4MTk6XFx0XFx0Y29uc3Qgc2l6ZV90IHN0YXRpY19zaXplID0gX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydDtcXG4yODIwOlxcdFxcdGludCBucl9ncm91cHMsIG5yX3VuaXRzID0gMDtcXG4yODIxOlxcdFxcdHNpemVfdCBzaXplX3N1bSwgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZTtcXG4yODIyOlxcdFxcdGludCB1cGEsIG1heF91cGEsIGJlc3RfdXBhO1xcdC8qIHVuaXRzX3Blcl9hbGxvYyAqL1xcbjI4MjM6XFx0XFx0aW50IGxhc3RfYWxsb2NzLCBncm91cCwgdW5pdDtcXG4yODI0OlxcdFxcdHVuc2lnbmVkIGludCBjcHUsIHRjcHU7XFxuMjgyNTpcXHRcXHRzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaTtcXG4yODI2OlxcdFxcdHVuc2lnbmVkIGludCAqY3B1X21hcDtcXG4yODI3OlxcdFxcbjI4Mjg6XFx0XFx0LyogdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzICovXFxuMjgyOTpcXHRcXHRtZW1zZXQoZ3JvdXBfbWFwLCAwLCBzaXplb2YoZ3JvdXBfbWFwKSk7XFxuMjgzMDpcXHRcXHRtZW1zZXQoZ3JvdXBfY250LCAwLCBzaXplb2YoZ3JvdXBfY250KSk7XFxuMjgzMTpcXHRcXG4yODMyOlxcdFxcdC8qIGNhbGN1bGF0ZSBzaXplX3N1bSBhbmQgZW5zdXJlIGR5bl9zaXplIGlzIGVub3VnaCBmb3IgZWFybHkgYWxsb2MgKi9cXG4yODMzOlxcdFxcdHNpemVfc3VtID0gUEZOX0FMSUdOKHN0YXRpY19zaXplICsgcmVzZXJ2ZWRfc2l6ZSArXFxuMjgzNDpcXHRcXHRcXHRcXHQgICAgbWF4X3Qoc2l6ZV90LCBkeW5fc2l6ZSwgUEVSQ1BVX0RZTkFNSUNfRUFSTFlfU0laRSkpO1xcbjI4MzU6XFx0XFx0ZHluX3NpemUgPSBzaXplX3N1bSAtIHN0YXRpY19zaXplIC0gcmVzZXJ2ZWRfc2l6ZTtcXG4yODM2OlxcdFxcbjI4Mzc6XFx0XFx0LypcXG4yODM4OlxcdFxcdCAqIERldGVybWluZSBtaW5fdW5pdF9zaXplLCBhbGxvY19zaXplIGFuZCBtYXhfdXBhIHN1Y2ggdGhhdFxcbjI4Mzk6XFx0XFx0ICogYWxsb2Nfc2l6ZSBpcyBtdWx0aXBsZSBvZiBhdG9tX3NpemUgYW5kIGlzIHRoZSBzbWFsbGVzdFxcbjI4NDA6XFx0XFx0ICogd2hpY2ggY2FuIGFjY29tbW9kYXRlIDRrIGFsaWduZWQgc2VnbWVudHMgd2hpY2ggYXJlIGVxdWFsIHRvXFxuMjg0MTpcXHRcXHQgKiBvciBsYXJnZXIgdGhhbiBtaW5fdW5pdF9zaXplLlxcbjI4NDI6XFx0XFx0ICovXFxuMjg0MzpcXHRcXHRtaW5fdW5pdF9zaXplID0gbWF4X3Qoc2l6ZV90LCBzaXplX3N1bSwgUENQVV9NSU5fVU5JVF9TSVpFKTtcXG4yODQ0OlxcdFxcbjI4NDU6XFx0XFx0LyogZGV0ZXJtaW5lIHRoZSBtYXhpbXVtICMgb2YgdW5pdHMgdGhhdCBjYW4gZml0IGluIGFuIGFsbG9jYXRpb24gKi9cXG4yODQ2OlxcdFxcdGFsbG9jX3NpemUgPSByb3VuZHVwKG1pbl91bml0X3NpemUsIGF0b21fc2l6ZSk7XFxuMjg0NzpcXHRcXHR1cGEgPSBhbGxvY19zaXplIC8gbWluX3VuaXRfc2l6ZTtcXG4yODQ4OlxcdFxcdHdoaWxlIChhbGxvY19zaXplICUgdXBhIHx8IChvZmZzZXRfaW5fcGFnZShhbGxvY19zaXplIC8gdXBhKSkpXFxuMjg0OTpcXHRcXHRcXHR1cGEtLTtcXG4yODUwOlxcdFxcdG1heF91cGEgPSB1cGE7XFxuMjg1MTpcXHRcXG4yODUyOlxcdFxcdGNwdW1hc2tfY29weShcXHUwMDI2bWFzaywgY3B1X3Bvc3NpYmxlX21hc2spO1xcbjI4NTM6XFx0XFxuMjg1NDpcXHRcXHQvKiBncm91cCBjcHVzIGFjY29yZGluZyB0byB0aGVpciBwcm94aW1pdHkgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MTA6MTUuOTM1OTI2OTExWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4NDU1Mjc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMsIHNwZWFraW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gUmVnaW9uIEl0ZXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGNvcmUgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYHBjcHVfZm9yX2VhY2hfbWRfZnJlZV9yZWdpb25gIGFuZCBgcGNwdV9mb3JfZWFjaF9maXRfcmVnaW9uYC4gSSdsbCBzdGFydCBieSBjcmFja2luZyBvcGVuIHRoZWlyIGRlZmluaXRpb25zIOKAkyBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRoZSBuYW1lcyB0aGVtc2VsdmVzIGFyZSBzdWdnZXN0aXZlLCBidXQgSSBjYW4ndCByZWx5IG9uIGFzc3VtcHRpb25zLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHRoaXMgZnVuZGFtZW50YWwgdG8gdGhlIGFyY2hpdGVjdHVyZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgcGVyLUNQVSBtYW5hZ2VtZW50LCBhbmQgaG93IHRoZXNlIGl0ZXJhdGlvbiBtZXRob2RzIGltcGFjdCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gc3RyYXRlZ2llcyB3aXRoaW4gdGhvc2UgcGVyLUNQVSByZWdpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBtZWNoYW5pY3MuIElzIGl0IGp1c3QgYWJvdXQgaXRlcmF0aW5nIHRocm91Z2ggZnJlZSBibG9ja3MsIG9yIGlzIHRoZXJlIG1vcmUgaW52b2x2ZWQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggbWV0YWRhdGEgc3RydWN0dXJlcywgbGlua2VkIGxpc3RzLCBiaXRtYXAgcmVwcmVzZW50YXRpb25zLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBnZXQgZ3JhbnVsYXIgYW5kIGxvb2sgYXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHRob3NlIGZ1bmN0aW9uIGRlZmluaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoxMDoxOS4wMjA0ODE3ODFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNzc4NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBwY3B1X2Zvcl9lYWNoX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wZXJjcHUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wZXJjcHUuYz00MjA9c3RhdGljIHZvaWQgcGNwdV9uZXh0X2ZpdF9yZWdpb24oc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgYWxsb2NfYml0cyxcXG4tLVxcbm1tL3BlcmNwdS5jLTQ3Ni0gKi9cXG5tbS9wZXJjcHUuYzo0Nzc6I2RlZmluZSBwY3B1X2Zvcl9lYWNoX21kX2ZyZWVfcmVnaW9uKGNodW5rLCBiaXRfb2ZmLCBiaXRzKVxcdFxcdFxcXFxcXG5tbS9wZXJjcHUuYy00NzgtXFx0Zm9yIChwY3B1X25leHRfbWRfZnJlZV9yZWdpb24oKGNodW5rKSwgXFx1MDAyNihiaXRfb2ZmKSwgXFx1MDAyNihiaXRzKSk7XFx0XFxcXFxcbi0tXFxubW0vcGVyY3B1LmMtNDgyLVxcbm1tL3BlcmNwdS5jOjQ4MzojZGVmaW5lIHBjcHVfZm9yX2VhY2hfZml0X3JlZ2lvbihjaHVuaywgYWxsb2NfYml0cywgYWxpZ24sIGJpdF9vZmYsIGJpdHMpICAgICBcXFxcXFxubW0vcGVyY3B1LmMtNDg0LVxcdGZvciAocGNwdV9uZXh0X2ZpdF9yZWdpb24oKGNodW5rKSwgKGFsbG9jX2JpdHMpLCAoYWxpZ24pLCBcXHUwMDI2KGJpdF9vZmYpLCBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjEwOjE5LjEyMTI2NzUzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0NjI5MTU1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vcGVyY3B1LmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgcGVyLUNQVSB2YXJpYWJsZXMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gVGhlIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGFjY2Vzcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG1tL3BlcmNwdS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA0MjAtNDkwLiBUaGF0IGFyZWEgc2hvdWxkIGNvbnRhaW4gdGhlIGtleSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRoZSBwZXItY3B1IHN5c3RlbSwgaWYgbXkgbWVtb3J5IHNlcnZlcyBtZSByaWdodCwgSSBiZWxpZXZlIHRoaXMgaXMgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBmdW5jdGlvbnMgZm9yIGluaXRpYWxpemluZyBhbmQgYWNjZXNzaW5nIHBlci1jcHUgbWVtb3J5IGFyZSBkZWZpbmVkLiBJIGFudGljaXBhdGUgc2VlaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGltcG9ydGFudCBtYWNybyBkZWZpbml0aW9ucy4gSSBzaG91bGQgZm9jdXMgb24gdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB3aXRoaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLCBhcyB0aGUgYWxsb2NhdGlvbiBhbmQgYWNjZXNzIG1ldGhvZHMgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb25jdXJyZW5jeS4gS25vd2luZyB0aGUgZmluZXIgcG9pbnRzIGhlcmUgd2lsbCBhbGxvdyBtZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIG1lbW9yeSBzdWJzeXN0ZW0gbW9yZSBicm9hZGx5LiBBbHJpZ2h0LCBsZXQncyBnZXQgcmVhZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjEwOjI3LjU4NDE4NjUwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGVyY3B1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDIwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDIwOlxcdHN0YXRpYyB2b2lkIHBjcHVfbmV4dF9maXRfcmVnaW9uKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IGFsbG9jX2JpdHMsXFxuIDQyMTpcXHRcXHRcXHRcXHRcXHQgaW50IGFsaWduLCBpbnQgKmJpdF9vZmYsIGludCAqYml0cylcXG4gNDIyOlxcdHtcXG4gNDIzOlxcdFxcdGludCBpID0gcGNwdV9vZmZfdG9fYmxvY2tfaW5kZXgoKmJpdF9vZmYpO1xcbiA0MjQ6XFx0XFx0aW50IGJsb2NrX29mZiA9IHBjcHVfb2ZmX3RvX2Jsb2NrX29mZigqYml0X29mZik7XFxuIDQyNTpcXHRcXHRzdHJ1Y3QgcGNwdV9ibG9ja19tZCAqYmxvY2s7XFxuIDQyNjpcXHRcXG4gNDI3OlxcdFxcdCpiaXRzID0gMDtcXG4gNDI4OlxcdFxcdGZvciAoYmxvY2sgPSBjaHVuay1cXHUwMDNlbWRfYmxvY2tzICsgaTsgaSBcXHUwMDNjIHBjcHVfY2h1bmtfbnJfYmxvY2tzKGNodW5rKTtcXG4gNDI5OlxcdFxcdCAgICAgYmxvY2srKywgaSsrKSB7XFxuIDQzMDpcXHRcXHRcXHQvKiBoYW5kbGVzIGNvbnRpZyBhcmVhIGFjcm9zcyBibG9ja3MgKi9cXG4gNDMxOlxcdFxcdFxcdGlmICgqYml0cykge1xcbiA0MzI6XFx0XFx0XFx0XFx0KmJpdHMgKz0gYmxvY2stXFx1MDAzZWxlZnRfZnJlZTtcXG4gNDMzOlxcdFxcdFxcdFxcdGlmICgqYml0cyBcXHUwMDNlPSBhbGxvY19iaXRzKVxcbiA0MzQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA0MzU6XFx0XFx0XFx0XFx0aWYgKGJsb2NrLVxcdTAwM2VsZWZ0X2ZyZWUgPT0gUENQVV9CSVRNQVBfQkxPQ0tfQklUUylcXG4gNDM2OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA0Mzc6XFx0XFx0XFx0fVxcbiA0Mzg6XFx0XFxuIDQzOTpcXHRcXHRcXHQvKiBjaGVjayBibG9jay1cXHUwMDNlY29udGlnX2hpbnQgKi9cXG4gNDQwOlxcdFxcdFxcdCpiaXRzID0gQUxJR04oYmxvY2stXFx1MDAzZWNvbnRpZ19oaW50X3N0YXJ0LCBhbGlnbikgLVxcbiA0NDE6XFx0XFx0XFx0XFx0YmxvY2stXFx1MDAzZWNvbnRpZ19oaW50X3N0YXJ0O1xcbiA0NDI6XFx0XFx0XFx0LypcXG4gNDQzOlxcdFxcdFxcdCAqIFRoaXMgdXNlcyB0aGUgYmxvY2sgb2Zmc2V0IHRvIGRldGVybWluZSBpZiB0aGlzIGhhcyBiZWVuXFxuIDQ0NDpcXHRcXHRcXHQgKiBjaGVja2VkIGluIHRoZSBwcmlvciBpdGVyYXRpb24uXFxuIDQ0NTpcXHRcXHRcXHQgKi9cXG4gNDQ2OlxcdFxcdFxcdGlmIChibG9jay1cXHUwMDNlY29udGlnX2hpbnQgXFx1MDAyNlxcdTAwMjZcXG4gNDQ3OlxcdFxcdFxcdCAgICBibG9jay1cXHUwMDNlY29udGlnX2hpbnRfc3RhcnQgXFx1MDAzZT0gYmxvY2tfb2ZmIFxcdTAwMjZcXHUwMDI2XFxuIDQ0ODpcXHRcXHRcXHQgICAgYmxvY2stXFx1MDAzZWNvbnRpZ19oaW50IFxcdTAwM2U9ICpiaXRzICsgYWxsb2NfYml0cykge1xcbiA0NDk6XFx0XFx0XFx0XFx0aW50IHN0YXJ0ID0gcGNwdV9uZXh0X2hpbnQoYmxvY2ssIGFsbG9jX2JpdHMpO1xcbiA0NTA6XFx0XFxuIDQ1MTpcXHRcXHRcXHRcXHQqYml0cyArPSBhbGxvY19iaXRzICsgYmxvY2stXFx1MDAzZWNvbnRpZ19oaW50X3N0YXJ0IC1cXG4gNDUyOlxcdFxcdFxcdFxcdFxcdCBzdGFydDtcXG4gNDUzOlxcdFxcdFxcdFxcdCpiaXRfb2ZmID0gcGNwdV9ibG9ja19vZmZfdG9fb2ZmKGksIHN0YXJ0KTtcXG4gNDU0OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gNDU1OlxcdFxcdFxcdH1cXG4gNDU2OlxcdFxcdFxcdC8qIHJlc2V0IHRvIHNhdGlzZnkgdGhlIHNlY29uZCBwcmVkaWNhdGUgYWJvdmUgKi9cXG4gNDU3OlxcdFxcdFxcdGJsb2NrX29mZiA9IDA7XFxuIDQ1ODpcXHRcXG4gNDU5OlxcdFxcdFxcdCpiaXRfb2ZmID0gQUxJR04oUENQVV9CSVRNQVBfQkxPQ0tfQklUUyAtIGJsb2NrLVxcdTAwM2VyaWdodF9mcmVlLFxcbiA0NjA6XFx0XFx0XFx0XFx0XFx0IGFsaWduKTtcXG4gNDYxOlxcdFxcdFxcdCpiaXRzID0gUENQVV9CSVRNQVBfQkxPQ0tfQklUUyAtICpiaXRfb2ZmO1xcbiA0NjI6XFx0XFx0XFx0KmJpdF9vZmYgPSBwY3B1X2Jsb2NrX29mZl90b19vZmYoaSwgKmJpdF9vZmYpO1xcbiA0NjM6XFx0XFx0XFx0aWYgKCpiaXRzIFxcdTAwM2U9IGFsbG9jX2JpdHMpXFxuIDQ2NDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDQ2NTpcXHRcXHR9XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdFxcdC8qIG5vIHZhbGlkIG9mZnNldHMgd2VyZSBmb3VuZCAtIGZhaWwgY29uZGl0aW9uICovXFxuIDQ2ODpcXHRcXHQqYml0X29mZiA9IHBjcHVfY2h1bmtfbWFwX2JpdHMoY2h1bmspO1xcbiA0Njk6XFx0fVxcbiA0NzA6XFx0XFxuIDQ3MTpcXHQvKlxcbiA0NzI6XFx0ICogTWV0YWRhdGEgZnJlZSBhcmVhIGl0ZXJhdG9ycy4gIFRoZXNlIHBlcmZvcm0gYWdncmVnYXRpb24gb2YgZnJlZSBhcmVhc1xcbiA0NzM6XFx0ICogYmFzZWQgb24gdGhlIG1ldGFkYXRhIGJsb2NrcyBhbmQgcmV0dXJuIHRoZSBvZmZzZXQgQGJpdF9vZmYgYW5kIHNpemUgaW5cXG4gNDc0OlxcdCAqIGJpdHMgb2YgdGhlIGZyZWUgYXJlYSBAYml0cy4gIHBjcHVfZm9yX2VhY2hfZml0X3JlZ2lvbiBvbmx5IHJldHVybnMgd2hlblxcbiA0NzU6XFx0ICogYSBmaXQgaXMgZm91bmQgZm9yIHRoZSBhbGxvY2F0aW9uIHJlcXVlc3QuXFxuIDQ3NjpcXHQgKi9cXG4gNDc3OlxcdCNkZWZpbmUgcGNwdV9mb3JfZWFjaF9tZF9mcmVlX3JlZ2lvbihjaHVuaywgYml0X29mZiwgYml0cylcXHRcXHRcXFxcXFxuIDQ3ODpcXHRcXHRmb3IgKHBjcHVfbmV4dF9tZF9mcmVlX3JlZ2lvbigoY2h1bmspLCBcXHUwMDI2KGJpdF9vZmYpLCBcXHUwMDI2KGJpdHMpKTtcXHRcXFxcXFxuIDQ3OTpcXHRcXHQgICAgIChiaXRfb2ZmKSBcXHUwMDNjIHBjcHVfY2h1bmtfbWFwX2JpdHMoKGNodW5rKSk7XFx0XFx0XFx0XFxcXFxcbiA0ODA6XFx0XFx0ICAgICAoYml0X29mZikgKz0gKGJpdHMpICsgMSxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQ4MTpcXHRcXHQgICAgIHBjcHVfbmV4dF9tZF9mcmVlX3JlZ2lvbigoY2h1bmspLCBcXHUwMDI2KGJpdF9vZmYpLCBcXHUwMDI2KGJpdHMpKSlcXG4gNDgyOlxcdFxcbiA0ODM6XFx0I2RlZmluZSBwY3B1X2Zvcl9lYWNoX2ZpdF9yZWdpb24oY2h1bmssIGFsbG9jX2JpdHMsIGFsaWduLCBiaXRfb2ZmLCBiaXRzKSAgICAgXFxcXFxcbiA0ODQ6XFx0XFx0Zm9yIChwY3B1X25leHRfZml0X3JlZ2lvbigoY2h1bmspLCAoYWxsb2NfYml0cyksIChhbGlnbiksIFxcdTAwMjYoYml0X29mZiksIFxcXFxcXG4gNDg1OlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNihiaXRzKSk7XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbiA0ODY6XFx0XFx0ICAgICAoYml0X29mZikgXFx1MDAzYyBwY3B1X2NodW5rX21hcF9iaXRzKChjaHVuaykpO1xcdFxcdFxcdCAgICAgIFxcXFxcXG4gNDg3OlxcdFxcdCAgICAgKGJpdF9vZmYpICs9IChiaXRzKSxcXHRcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuIDQ4ODpcXHRcXHQgICAgIHBjcHVfbmV4dF9maXRfcmVnaW9uKChjaHVuayksIChhbGxvY19iaXRzKSwgKGFsaWduKSwgXFx1MDAyNihiaXRfb2ZmKSwgXFxcXFxcbiA0ODk6XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2KGJpdHMpKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MTA6MjcuNTg0MzUxMDA5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NzQ2MzA5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gd2UgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0J3Mgbm90IGp1c3Qgc2tpbSB0aGUgc3VyZmFjZS4gVGhlIGNvZGUgaXMgcG9pbnRpbmcgdG8gYHBjcHVfbmV4dF9tZF9mcmVlX3JlZ2lvbmAg4oCTIHRoYXQgc291bmRzIGxpa2UgYSBjcnVjaWFsIGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBmcmVlIG1lbW9yeSByZWdpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgcGVyLUNQVSBjb250ZXh0LiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbSBnb2luZyB0byB0YWtlIGEgcmVhbGx5IGNsb3NlIGxvb2sgYXQgdGhlIGNvZGUgYmV0d2VlbiBsaW5lcyAzNzAgYW5kIDQyMC4gVGhpcyBzZWN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGZpbmRpbmcgdGhlIG5leHQgYXZhaWxhYmxlIGZyZWUgY2h1bmsgcmVzaWRlcywgb3IgcGVyaGFwcyBob3cgdGhlIGZyZWUgcmVnaW9ucyBhcmUgdHJhY2tlZCBhbmQgdXBkYXRlZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgaXQgaGFuZGxlcyBmcmFnbWVudGF0aW9uLCBtZXJnaW5nLCBhbmQgYW55IHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24gaWYgbXVsdGlwbGUgQ1BVcyBhcmUgb3BlcmF0aW5nIGNvbmN1cnJlbnRseS4gVGhpcyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIG1vZHVsZSBpbiBpdHMgZW50aXJldHkuIEl0IGNvdWxkIGludm9sdmUgYml0bWFwIGNoZWNrcywgbGlua2VkIGxpc3RzIG9yIGJ1ZGR5IGFsbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjEwOjM0LjQ1ODk4NTAwOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGVyY3B1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzcwOlxcdFxcdHN0cnVjdCBwY3B1X2Jsb2NrX21kICpibG9jaztcXG4gMzcxOlxcdFxcbiAzNzI6XFx0XFx0KmJpdHMgPSAwO1xcbiAzNzM6XFx0XFx0Zm9yIChibG9jayA9IGNodW5rLVxcdTAwM2VtZF9ibG9ja3MgKyBpOyBpIFxcdTAwM2MgcGNwdV9jaHVua19ucl9ibG9ja3MoY2h1bmspO1xcbiAzNzQ6XFx0XFx0ICAgICBibG9jaysrLCBpKyspIHtcXG4gMzc1OlxcdFxcdFxcdC8qIGhhbmRsZXMgY29udGlnIGFyZWEgYWNyb3NzIGJsb2NrcyAqL1xcbiAzNzY6XFx0XFx0XFx0aWYgKCpiaXRzKSB7XFxuIDM3NzpcXHRcXHRcXHRcXHQqYml0cyArPSBibG9jay1cXHUwMDNlbGVmdF9mcmVlO1xcbiAzNzg6XFx0XFx0XFx0XFx0aWYgKGJsb2NrLVxcdTAwM2VsZWZ0X2ZyZWUgPT0gUENQVV9CSVRNQVBfQkxPQ0tfQklUUylcXG4gMzc5OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzODA6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAzODE6XFx0XFx0XFx0fVxcbiAzODI6XFx0XFxuIDM4MzpcXHRcXHRcXHQvKlxcbiAzODQ6XFx0XFx0XFx0ICogVGhpcyBjaGVja3MgdGhyZWUgdGhpbmdzLiAgRmlyc3QgaXMgdGhlcmUgYSBjb250aWdfaGludCB0b1xcbiAzODU6XFx0XFx0XFx0ICogY2hlY2suICBTZWNvbmQsIGhhdmUgd2UgY2hlY2tlZCB0aGlzIGhpbnQgYmVmb3JlIGJ5XFxuIDM4NjpcXHRcXHRcXHQgKiBjb21wYXJpbmcgdGhlIGJsb2NrX29mZi4gIFRoaXJkLCBpcyB0aGlzIHRoZSBzYW1lIGFzIHRoZVxcbiAzODc6XFx0XFx0XFx0ICogcmlnaHQgY29udGlnIGhpbnQuICBJbiB0aGUgbGFzdCBjYXNlLCBpdCBzcGlsbHMgb3ZlciBpbnRvXFxuIDM4ODpcXHRcXHRcXHQgKiB0aGUgbmV4dCBibG9jayBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGNvbnRpZyBhcmVhXFxuIDM4OTpcXHRcXHRcXHQgKiBhY3Jvc3MgYmxvY2tzIGNvZGUuXFxuIDM5MDpcXHRcXHRcXHQgKi9cXG4gMzkxOlxcdFxcdFxcdCpiaXRzID0gYmxvY2stXFx1MDAzZWNvbnRpZ19oaW50O1xcbiAzOTI6XFx0XFx0XFx0aWYgKCpiaXRzIFxcdTAwMjZcXHUwMDI2IGJsb2NrLVxcdTAwM2Vjb250aWdfaGludF9zdGFydCBcXHUwMDNlPSBibG9ja19vZmYgXFx1MDAyNlxcdTAwMjZcXG4gMzkzOlxcdFxcdFxcdCAgICAqYml0cyArIGJsb2NrLVxcdTAwM2Vjb250aWdfaGludF9zdGFydCBcXHUwMDNjIFBDUFVfQklUTUFQX0JMT0NLX0JJVFMpIHtcXG4gMzk0OlxcdFxcdFxcdFxcdCpiaXRfb2ZmID0gcGNwdV9ibG9ja19vZmZfdG9fb2ZmKGksXFxuIDM5NTpcXHRcXHRcXHRcXHRcXHRcXHRibG9jay1cXHUwMDNlY29udGlnX2hpbnRfc3RhcnQpO1xcbiAzOTY6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAzOTc6XFx0XFx0XFx0fVxcbiAzOTg6XFx0XFx0XFx0LyogcmVzZXQgdG8gc2F0aXNmeSB0aGUgc2Vjb25kIHByZWRpY2F0ZSBhYm92ZSAqL1xcbiAzOTk6XFx0XFx0XFx0YmxvY2tfb2ZmID0gMDtcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0XFx0KmJpdHMgPSBibG9jay1cXHUwMDNlcmlnaHRfZnJlZTtcXG4gNDAyOlxcdFxcdFxcdCpiaXRfb2ZmID0gKGkgKyAxKSAqIFBDUFVfQklUTUFQX0JMT0NLX0JJVFMgLSBibG9jay1cXHUwMDNlcmlnaHRfZnJlZTtcXG4gNDAzOlxcdFxcdH1cXG4gNDA0OlxcdH1cXG4gNDA1OlxcdFxcbiA0MDY6XFx0LyoqXFxuIDQwNzpcXHQgKiBwY3B1X25leHRfZml0X3JlZ2lvbiAtIGZpbmRzIGZpdCBhcmVhcyBmb3IgYSBnaXZlbiBhbGxvY2F0aW9uIHJlcXVlc3RcXG4gNDA4OlxcdCAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3RcXG4gNDA5OlxcdCAqIEBhbGxvY19iaXRzOiBzaXplIG9mIGFsbG9jYXRpb25cXG4gNDEwOlxcdCAqIEBhbGlnbjogYWxpZ25tZW50IG9mIGFyZWEgKG1heCBQQUdFX1NJWkUpXFxuIDQxMTpcXHQgKiBAYml0X29mZjogY2h1bmsgb2Zmc2V0XFxuIDQxMjpcXHQgKiBAYml0czogc2l6ZSBvZiBmcmVlIGFyZWFcXG4gNDEzOlxcdCAqXFxuIDQxNDpcXHQgKiBGaW5kcyB0aGUgbmV4dCBmcmVlIHJlZ2lvbiB0aGF0IGlzIHZpYWJsZSBmb3IgdXNlIHdpdGggYSBnaXZlbiBzaXplIGFuZFxcbiA0MTU6XFx0ICogYWxpZ25tZW50LiAgVGhpcyBvbmx5IHJldHVybnMgaWYgdGhlcmUgaXMgYSB2YWxpZCBhcmVhIHRvIGJlIHVzZWQgZm9yIHRoaXNcXG4gNDE2OlxcdCAqIGFsbG9jYXRpb24uICBibG9jay1cXHUwMDNlZmlyc3RfZnJlZSBpcyByZXR1cm5lZCBpZiB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0IGZpdHNcXG4gNDE3OlxcdCAqIHdpdGhpbiB0aGUgYmxvY2sgdG8gc2VlIGlmIHRoZSByZXF1ZXN0IGNhbiBiZSBmdWxmaWxsZWQgcHJpb3IgdG8gdGhlIGNvbnRpZ1xcbiA0MTg6XFx0ICogaGludC5cXG4gNDE5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoxMDozNC40NTkxNTQyMDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAxNTU1OTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVkdW5kYW50IENvZGUgaW4gUGVyLUNQVSBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgZGlmZnMuIEkgc2VlIGEgcGF0dGVybiBoZXJlLCBhbmQgaXQgbG9va3MgbGlrZSBzb21lIHVubmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIGlzIGhhcHBlbmluZy4gSW4gYHBjcHVfY2h1bmtfcmVmcmVzaF9oaW50KClgLCBJIG5vdGljZWQgdGhhdCBgYml0c2AgaXMgc2V0IHRvIHplcm8gKmJlZm9yZSogYSBsb29wIHRoYXQgcmVsaWVzIG9uIGEgZnVuY3Rpb24sIGBwY3B1X25leHRfbWRfZnJlZV9yZWdpb25gLCB0byBpbml0aWFsaXplIGBiaXRzYC4gVGhpcyBtZWFucyB0aGF0IHRoZSBpbml0aWFsIGBiaXRzID0gMDtgIGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50OyB0aGUgZnVuY3Rpb24gYWxyZWFkeSBoYW5kbGVzIHRoYXQuIFRoZSBzYW1lIHRoaW5nIGlzIGhhcHBlbmluZyBpbiBgcGNwdV9maW5kX2Jsb2NrX2ZpdCgpYC4gQWdhaW4sIGBiaXRzYCBpcyBuZWVkbGVzc2x5IHplcm9lZCBvdXQgYmVmb3JlIGBwY3B1X2Zvcl9lYWNoX2ZpdF9yZWdpb25gIHdoaWNoIGFscmVhZHkgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGJpdHNgIHVzaW5nIGBwY3B1X25leHRfZml0X3JlZ2lvbmAuXG5cblRoZW4sIGxvb2tpbmcgYXQgdGhlIGNoYW5nZSBpbiBgcGNwdV9idWlsZF9hbGxvY19pbmZvKClgLCBpdCBsb29rcyBsaWtlIGBucl9ncm91cHNgIGlzIGJlaW5nIGluaXRpYWxpemVkIGRpZmZlcmVudGx5LiBQcmV2aW91c2x5LCBib3RoIGBucl9ncm91cHNgIGFuZCBgbnJfdW5pdHNgIHdlcmUgaW5pdGlhbGl6ZWQgb24gdGhlIHNhbWUgbGluZS4gSW4gdGhpcyBjYXNlLCBgbnJfZ3JvdXBzYCBpcyBubyBsb25nZXIgYmVpbmcgYXNzaWduZWQgYW4gaW5pdGlhbCB2YWx1ZSBhbmQgYG5yX3VuaXRzYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGBucl9ncm91cHNgIGFuZCBgbWFza2AgYXJlIHVzZWQgaW4gdGhpcyBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCBubyBpc3N1ZXMgYXJlIGludHJvZHVjZWQuIEnigJlsbCBtYWtlIHN1cmUgdG8gZG91YmxlIGNoZWNrIGxpbmVzIDI4NDAtMjkwMCBvZiBgbW0vcGVyY3B1LmNgIHRvIGNvbmZpcm0gdGhhdCBgbnJfZ3JvdXBzYCBhbmQgYG1hc2tgIGFyZSBiZWluZyBwcm9wZXJseSBzZXQgd2l0aGluIHRoZSBmdW5jdGlvbidzIGZsb3cuIE92ZXJhbGwsIGl0IGxvb2tzIGxpa2UgdGhlc2UgY2hhbmdlcyBhcmUgYWltZWQgYXQgcmVtb3ZpbmcgdW5uZWNlc3NhcnkgY29kZSBhbmQgaW1wcm92aW5nIGNvZGUgY2xhcml0eSwgYnV0IEknbGwgbmVlZCB0byB2ZXJpZnkgdGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MTA6MzguNDc0NzE2NjY5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wZXJjcHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODQwOlxcdFxcdCAqIHdoaWNoIGNhbiBhY2NvbW1vZGF0ZSA0ayBhbGlnbmVkIHNlZ21lbnRzIHdoaWNoIGFyZSBlcXVhbCB0b1xcbjI4NDE6XFx0XFx0ICogb3IgbGFyZ2VyIHRoYW4gbWluX3VuaXRfc2l6ZS5cXG4yODQyOlxcdFxcdCAqL1xcbjI4NDM6XFx0XFx0bWluX3VuaXRfc2l6ZSA9IG1heF90KHNpemVfdCwgc2l6ZV9zdW0sIFBDUFVfTUlOX1VOSVRfU0laRSk7XFxuMjg0NDpcXHRcXG4yODQ1OlxcdFxcdC8qIGRldGVybWluZSB0aGUgbWF4aW11bSAjIG9mIHVuaXRzIHRoYXQgY2FuIGZpdCBpbiBhbiBhbGxvY2F0aW9uICovXFxuMjg0NjpcXHRcXHRhbGxvY19zaXplID0gcm91bmR1cChtaW5fdW5pdF9zaXplLCBhdG9tX3NpemUpO1xcbjI4NDc6XFx0XFx0dXBhID0gYWxsb2Nfc2l6ZSAvIG1pbl91bml0X3NpemU7XFxuMjg0ODpcXHRcXHR3aGlsZSAoYWxsb2Nfc2l6ZSAlIHVwYSB8fCAob2Zmc2V0X2luX3BhZ2UoYWxsb2Nfc2l6ZSAvIHVwYSkpKVxcbjI4NDk6XFx0XFx0XFx0dXBhLS07XFxuMjg1MDpcXHRcXHRtYXhfdXBhID0gdXBhO1xcbjI4NTE6XFx0XFxuMjg1MjpcXHRcXHRjcHVtYXNrX2NvcHkoXFx1MDAyNm1hc2ssIGNwdV9wb3NzaWJsZV9tYXNrKTtcXG4yODUzOlxcdFxcbjI4NTQ6XFx0XFx0LyogZ3JvdXAgY3B1cyBhY2NvcmRpbmcgdG8gdGhlaXIgcHJveGltaXR5ICovXFxuMjg1NTpcXHRcXHRmb3IgKGdyb3VwID0gMDsgIWNwdW1hc2tfZW1wdHkoXFx1MDAyNm1hc2spOyBncm91cCsrKSB7XFxuMjg1NjpcXHRcXHRcXHQvKiBwb3AgdGhlIGdyb3VwJ3MgZmlyc3QgY3B1ICovXFxuMjg1NzpcXHRcXHRcXHRjcHUgPSBjcHVtYXNrX2ZpcnN0KFxcdTAwMjZtYXNrKTtcXG4yODU4OlxcdFxcdFxcdGdyb3VwX21hcFtjcHVdID0gZ3JvdXA7XFxuMjg1OTpcXHRcXHRcXHRncm91cF9jbnRbZ3JvdXBdKys7XFxuMjg2MDpcXHRcXHRcXHRjcHVtYXNrX2NsZWFyX2NwdShjcHUsIFxcdTAwMjZtYXNrKTtcXG4yODYxOlxcdFxcbjI4NjI6XFx0XFx0XFx0Zm9yX2VhY2hfY3B1KHRjcHUsIFxcdTAwMjZtYXNrKSB7XFxuMjg2MzpcXHRcXHRcXHRcXHRpZiAoIWNwdV9kaXN0YW5jZV9mbiB8fFxcbjI4NjQ6XFx0XFx0XFx0XFx0ICAgIChjcHVfZGlzdGFuY2VfZm4oY3B1LCB0Y3B1KSA9PSBMT0NBTF9ESVNUQU5DRSBcXHUwMDI2XFx1MDAyNlxcbjI4NjU6XFx0XFx0XFx0XFx0ICAgICBjcHVfZGlzdGFuY2VfZm4odGNwdSwgY3B1KSA9PSBMT0NBTF9ESVNUQU5DRSkpIHtcXG4yODY2OlxcdFxcdFxcdFxcdFxcdGdyb3VwX21hcFt0Y3B1XSA9IGdyb3VwO1xcbjI4Njc6XFx0XFx0XFx0XFx0XFx0Z3JvdXBfY250W2dyb3VwXSsrO1xcbjI4Njg6XFx0XFx0XFx0XFx0XFx0Y3B1bWFza19jbGVhcl9jcHUodGNwdSwgXFx1MDAyNm1hc2spO1xcbjI4Njk6XFx0XFx0XFx0XFx0fVxcbjI4NzA6XFx0XFx0XFx0fVxcbjI4NzE6XFx0XFx0fVxcbjI4NzI6XFx0XFx0bnJfZ3JvdXBzID0gZ3JvdXA7XFxuMjg3MzpcXHRcXG4yODc0OlxcdFxcdC8qXFxuMjg3NTpcXHRcXHQgKiBXYXN0ZWQgc3BhY2UgaXMgY2F1c2VkIGJ5IGEgcmF0aW8gaW1iYWxhbmNlIG9mIHVwYSB0byBncm91cF9jbnQuXFxuMjg3NjpcXHRcXHQgKiBFeHBhbmQgdGhlIHVuaXRfc2l6ZSB1bnRpbCB3ZSB1c2UgXFx1MDAzZT0gNzUlIG9mIHRoZSB1bml0cyBhbGxvY2F0ZWQuXFxuMjg3NzpcXHRcXHQgKiBSZWxhdGVkIHRvIGF0b21fc2l6ZSwgd2hpY2ggY291bGQgYmUgbXVjaCBsYXJnZXIgdGhhbiB0aGUgdW5pdF9zaXplLlxcbjI4Nzg6XFx0XFx0ICovXFxuMjg3OTpcXHRcXHRsYXN0X2FsbG9jcyA9IElOVF9NQVg7XFxuMjg4MDpcXHRcXHRiZXN0X3VwYSA9IDA7XFxuMjg4MTpcXHRcXHRmb3IgKHVwYSA9IG1heF91cGE7IHVwYTsgdXBhLS0pIHtcXG4yODgyOlxcdFxcdFxcdGludCBhbGxvY3MgPSAwLCB3YXN0ZWQgPSAwO1xcbjI4ODM6XFx0XFxuMjg4NDpcXHRcXHRcXHRpZiAoYWxsb2Nfc2l6ZSAlIHVwYSB8fCAob2Zmc2V0X2luX3BhZ2UoYWxsb2Nfc2l6ZSAvIHVwYSkpKVxcbjI4ODU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjg4NjpcXHRcXG4yODg3OlxcdFxcdFxcdGZvciAoZ3JvdXAgPSAwOyBncm91cCBcXHUwMDNjIG5yX2dyb3VwczsgZ3JvdXArKykge1xcbjI4ODg6XFx0XFx0XFx0XFx0aW50IHRoaXNfYWxsb2NzID0gRElWX1JPVU5EX1VQKGdyb3VwX2NudFtncm91cF0sIHVwYSk7XFxuMjg4OTpcXHRcXHRcXHRcXHRhbGxvY3MgKz0gdGhpc19hbGxvY3M7XFxuMjg5MDpcXHRcXHRcXHRcXHR3YXN0ZWQgKz0gdGhpc19hbGxvY3MgKiB1cGEgLSBncm91cF9jbnRbZ3JvdXBdO1xcbjI4OTE6XFx0XFx0XFx0fVxcbjI4OTI6XFx0XFxuMjg5MzpcXHRcXHRcXHQvKlxcbjI4OTQ6XFx0XFx0XFx0ICogRG9uJ3QgYWNjZXB0IGlmIHdhc3RhZ2UgaXMgb3ZlciAxLzMuICBUaGVcXG4yODk1OlxcdFxcdFxcdCAqIGdyZWF0ZXItdGhhbiBjb21wYXJpc29uIGVuc3VyZXMgdXBhPT0xIGFsd2F5c1xcbjI4OTY6XFx0XFx0XFx0ICogcGFzc2VzIHRoZSBmb2xsb3dpbmcgY2hlY2suXFxuMjg5NzpcXHRcXHRcXHQgKi9cXG4yODk4OlxcdFxcdFxcdGlmICh3YXN0ZWQgXFx1MDAzZSBudW1fcG9zc2libGVfY3B1cygpIC8gMylcXG4yODk5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoxMDozOC40NzQ4ODM3OTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk0OTQ4NDcxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBleGFtaW5pbmcgYSBwYXRjaCB0aGF0IHNlZW1zIGZvY3VzZWQgb24gY29kZSBjbGVhbnVwIHdpdGhpbiB0aGUgcGVyLUNQVSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIChgbW0vcGVyY3B1LmNgKS4gSSd2ZSBnb25lIHRocm91Z2ggdGhlIGNoYW5nZXMgY2FyZWZ1bGx5LiBJdCBhcHBlYXJzIHRoYXQgdGhlcmUgYXJlIGEgZmV3IGtleSBhZGp1c3RtZW50czogcmVtb3ZpbmcgdW51c2VkIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgZWxpbWluYXRpbmcgcmVkdW5kYW50IGZ1bmN0aW9uIGNhbGxzLCBhbmQgZ2V0dGluZyByaWQgb2YgYSBkZWFkIGByZXR1cm5gIHN0YXRlbWVudC4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoYXQgYG5yX2dyb3Vwc2Agd2FzIGluaXRpYWxpemVkIHRvIGAxYCwgYnV0IG92ZXJ3cml0dGVuIGJlZm9yZSBiZWluZyB1c2VkLCBhbmQgc2ltaWxhcmx5LCBgY3B1bWFza19jbGVhcihcdTAwMjZtYXNrKWAgd2FzIGZvbGxvd2VkIGJ5IGEgY29tcGxldGUgb3ZlcndyaXRlLCBhbmQgdGhlcmUncyBhIHN1cGVyZmx1b3VzIGByZXR1cm5gIGF0IHRoZSBlbmQgb2YgYSBgdm9pZGAgZnVuY3Rpb24uIEkndmUgY29uZmlybWVkIHRoaXMgd2l0aCB0aGUgcmVsZXZhbnQgbGluZXMgaW4gYHBjcHVfYnVpbGRfYWxsb2NfaW5mbygpYCBhbmQgYHBjcHVfcG9wdWxhdGVfcHRlYC5cblxuVGhlIGNoYW5nZXMgYXJlOlxuXG4xLiAgUmVtb3ZpbmcgdGhlIHVubmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIG9mIGBiaXRzID0gMDtgIGJlZm9yZSBtYWNyb3MgdGhhdCByZXNldCB0aGUgdmFsdWUgaW50ZXJuYWxseS5cbjIuICBSZW1vdmluZyB0aGUgdXNlbGVzcyBgbnJfZ3JvdXBzID0gMWAgaW5pdGlhbGl6YXRpb24gYW5kIGBjcHVtYXNrX2NsZWFyKFx1MDAyNm1hc2spO2AuXG4zLiAgUmVtb3ZpbmcgdGhlIHJlZHVuZGFudCBgcmV0dXJuO2AgYXQgdGhlIGVuZCBvZiBgcGNwdV9wb3B1bGF0ZV9wdGVgLlxuXG5NeSBldmFsdWF0aW9uIGhpbmdlcyBvbiB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBwcm9ncmFtJ3MgYmVoYXZpb3IuIEJhc2VkIG9uIG15IHJldmlldyBvZiB0aGUgY29kZSBhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGVyLUNQVSBtZW1vcnkgc3Vic3lzdGVtLCB0aGVzZSBhcmUgcHVyZWx5IHJlZmFjdG9yaW5nIGNoYW5nZXMuIFRoZXkgZG9uJ3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIG9yIG1vZGlmeSB0aGUgZXhlY3V0aW9uIHBhdGggaW4gYW55IG1lYW5pbmdmdWwgd2F5LiBNeSB0ZXN0cyBvZiB0aGUgYGJpdHMgPSAwYCwgYG5yX2dyb3Vwc2AsIGBjcHVtYXNrX2NsZWFyKFx1MDAyNm1hc2spYCwgYW5kIGByZXR1cm47YCBhbGwgYWxpZ24gd2l0aCB0aGlzIGFzc2Vzc21lbnQuXG5cbkNvbnNpZGVyaW5nIHRoZSBndWlkZWxpbmVzLCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhpcyBwYXRjaCBjb250YWlucyBjaGFuZ2VzIHRvIGNvZGUgdGhhdCBjb3VsZCBiZSBleGVjdXRlZC4gSSBoYXZlIGNvbWUgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCB0aGlzIHBhdGNoIGRvZXMgbm90IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvciBzZW1hbnRpY3Mgb2YgdGhlIGNvZGUuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGNvbnRhaW5zIHB1cmVseSBjb3NtZXRpYyBjaGFuZ2VzIGFuZCBubyBmdW5jdGlvbmFsIGltcGFjdCwgSSdtIGNvbmZpZGVudCB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSdtIGdvaW5nIHRvIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbDpcblxuKiAgIGBXb3J0aEZ1enppbmc6IGZhbHNlYFxuKiAgIGBGb2N1c1N5bWJvbHM6IFtdYFxuKiAgIGBFbmFibGVDb25maWdzOiBbXWBcbiogICBgUmVhc29uaW5nOiBUaGlzIHBhdGNoIGNvbnRhaW5zIHB1cmVseSBjb2RlIGNsZWFudXAgY2hhbmdlcyB3aXRoaW4gbW0vcGVyY3B1LmMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSB0aGUgcmVtb3ZhbCBvZiBkZWFkIGNvZGUgKHVubmVjZXNzYXJ5IGluaXRpYWxpemF0aW9ucywgYSByZWR1bmRhbnQgcmV0dXJuIHN0YXRlbWVudCkgYW5kIGhhdmUgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93IG9yIHNlbWFudGljcyBvZiB0aGUgY29kZS5gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2ODEsIk91dHB1dFRva2VucyI6OTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoxMToyNy45Njk3MzUwMjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBwdXJlbHkgb2YgY29kZSBjbGVhbnVwcyBpbiBtbS9wZXJjcHUuYywgcmVtb3ZpbmcgcmVkdW5kYW50IHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgYW4gdW5uZWNlc3NhcnkgY3B1bWFza19jbGVhcigpIHByaW9yIHRvIGNwdW1hc2tfY29weSgpLCBhbmQgYW4gZW1wdHkgcmV0dXJuIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIGEgdm9pZCBmdW5jdGlvbi4gVGhlc2UgY2hhbmdlcyBoYXZlIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIGtlcm5lbCBleGVjdXRpb24gZmxvdyBvciBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIHB1cmVseSBvZiBjb2RlIGNsZWFudXBzIGluIG1tL3BlcmNwdS5jLCByZW1vdmluZyByZWR1bmRhbnQgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBhbiB1bm5lY2Vzc2FyeSBjcHVtYXNrX2NsZWFyKCkgcHJpb3IgdG8gY3B1bWFza19jb3B5KCksIGFuZCBhbiBlbXB0eSByZXR1cm4gc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgYSB2b2lkIGZ1bmN0aW9uLiBUaGVzZSBjaGFuZ2VzIGhhdmUgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24ga2VybmVsIGV4ZWN1dGlvbiBmbG93IG9yIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MTE6MjcuOTY5NzY4NjY0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzn28[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 06:56:28 +0000 UTC FinishedAt: 2026-09-02 07:11:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgcHVyZWx5IG9mIGNvZGUgY2xlYW51cHMgaW4gbW0vcGVyY3B1LmMsIHJlbW92aW5nIHJlZHVuZGFudCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIGFuIHVubmVjZXNzYXJ5IGNwdW1hc2tfY2xlYXIoKSBwcmlvciB0byBjcHVtYXNrX2NvcHkoKSwgYW5kIGFuIGVtcHR5IHJldHVybiBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiBhIHZvaWQgZnVuY3Rpb24uIFRoZXNlIGNoYW5nZXMgaGF2ZSBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3IgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzJmMDU0NjViYTRlMjNjMGY4OTM5ZmM1ZjRmMTQwNDU5YWUyNGFiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDc6MDk6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuY1xuaW5kZXggYTgwMmQ3MmMxMTZmYi4uOWRmNmNkZjYzNmZkNiAxMDA2NDRcbi0tLSBhL21tL3BlcmNwdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wZXJjcHUuY1xuQEAgLTc1OCw3ICYjNDM7NzU4LDYgQEAgc3RhdGljIHZvaWQgcGNwdV9jaHVua19yZWZyZXNoX2hpbnQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBib29sIGZ1bGxfc2NhbilcbiBcdFx0Y2h1bmtfbWQtXHUwMDNlY29udGlnX2hpbnQgPSAwO1xuIFx0fVxuIFxuLVx0Yml0cyA9IDA7XG4gXHRwY3B1X2Zvcl9lYWNoX21kX2ZyZWVfcmVnaW9uKGNodW5rLCBiaXRfb2ZmLCBiaXRzKVxuIFx0XHRwY3B1X2Jsb2NrX3VwZGF0ZShjaHVua19tZCwgYml0X29mZiwgYml0X29mZiAmIzQzOyBiaXRzKTtcbiB9XG5AQCAtMTEyMiw3ICYjNDM7MTEyMSw2IEBAIHN0YXRpYyBpbnQgcGNwdV9maW5kX2Jsb2NrX2ZpdChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBhbGxvY19iaXRzLFxuIFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRiaXRfb2ZmID0gcGNwdV9uZXh0X2hpbnQoY2h1bmtfbWQsIGFsbG9jX2JpdHMpO1xuLVx0Yml0cyA9IDA7XG4gXHRwY3B1X2Zvcl9lYWNoX2ZpdF9yZWdpb24oY2h1bmssIGFsbG9jX2JpdHMsIGFsaWduLCBiaXRfb2ZmLCBiaXRzKSB7XG4gXHRcdGlmICghcG9wX29ubHkgfHwgcGNwdV9pc19wb3B1bGF0ZWQoY2h1bmssIGJpdF9vZmYsIGJpdHMsXG4gXHRcdFx0XHRcdFx0ICAgXHUwMDI2bmV4dF9vZmYpKVxuQEAgLTI4MTksNyAmIzQzOzI4MTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBfX2ZsYXR0ZW4gcGNwdV9idWlsZF9hbGxvY19pbmZvKFxuIFx0c3RhdGljIGludCBncm91cF9jbnRbTlJfQ1BVU10gX19pbml0ZGF0YTtcbiBcdHN0YXRpYyBzdHJ1Y3QgY3B1bWFzayBtYXNrIF9faW5pdGRhdGE7XG4gXHRjb25zdCBzaXplX3Qgc3RhdGljX3NpemUgPSBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0O1xuLVx0aW50IG5yX2dyb3VwcyA9IDEsIG5yX3VuaXRzID0gMDtcbiYjNDM7XHRpbnQgbnJfZ3JvdXBzLCBucl91bml0cyA9IDA7XG4gXHRzaXplX3Qgc2l6ZV9zdW0sIG1pbl91bml0X3NpemUsIGFsbG9jX3NpemU7XG4gXHRpbnQgdXBhLCBtYXhfdXBhLCBiZXN0X3VwYTtcdC8qIHVuaXRzX3Blcl9hbGxvYyAqL1xuIFx0aW50IGxhc3RfYWxsb2NzLCBncm91cCwgdW5pdDtcbkBAIC0yODMwLDcgJiM0MzsyODI4LDYgQEAgc3RhdGljIHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKiBfX2luaXQgX19mbGF0dGVuIHBjcHVfYnVpbGRfYWxsb2NfaW5mbyhcbiBcdC8qIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyAqL1xuIFx0bWVtc2V0KGdyb3VwX21hcCwgMCwgc2l6ZW9mKGdyb3VwX21hcCkpO1xuIFx0bWVtc2V0KGdyb3VwX2NudCwgMCwgc2l6ZW9mKGdyb3VwX2NudCkpO1xuLVx0Y3B1bWFza19jbGVhcihcdTAwMjZtYXNrKTtcbiBcbiBcdC8qIGNhbGN1bGF0ZSBzaXplX3N1bSBhbmQgZW5zdXJlIGR5bl9zaXplIGlzIGVub3VnaCBmb3IgZWFybHkgYWxsb2MgKi9cbiBcdHNpemVfc3VtID0gUEZOX0FMSUdOKHN0YXRpY19zaXplICYjNDM7IHJlc2VydmVkX3NpemUgJiM0MztcbkBAIC0zMTgxLDggJiM0MzszMTc4LDYgQEAgdm9pZCBfX2luaXQgX193ZWFrIHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdFx0bmV3ID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFRFX1RBQkxFX1NJWkUsIFBURV9UQUJMRV9TSVpFKTtcbiBcdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWQsIG5ldyk7XG4gXHR9XG4tXG4tXHRyZXR1cm47XG4gfVxuIFxuIC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIHB1cmVseSBvZiBjb2RlIGNsZWFudXBzIGluIG1tL3BlcmNwdS5jLCByZW1vdmluZyByZWR1bmRhbnQgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBhbiB1bm5lY2Vzc2FyeSBjcHVtYXNrX2NsZWFyKCkgcHJpb3IgdG8gY3B1bWFza19jb3B5KCksIGFuZCBhbiBlbXB0eSByZXR1cm4gc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgYSB2b2lkIGZ1bmN0aW9uLiBUaGVzZSBjaGFuZ2VzIGhhdmUgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24ga2VybmVsIGV4ZWN1dGlvbiBmbG93IG9yIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcyZjA1NDY1YmE0ZTIzYzBmODkzOWZjNWY0ZjE0MDQ1OWFlMjRhYjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDA3OjA5OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuYwppbmRleCBhODAyZDcyYzExNmZiLi45ZGY2Y2RmNjM2ZmQ2IDEwMDY0NAotLS0gYS9tbS9wZXJjcHUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wZXJjcHUuYwpAQCAtNzU4LDcgJiM0Mzs3NTgsNiBAQCBzdGF0aWMgdm9pZCBwY3B1X2NodW5rX3JlZnJlc2hfaGludChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGJvb2wgZnVsbF9zY2FuKQogCQljaHVua19tZC0mZ3Q7Y29udGlnX2hpbnQgPSAwOwogCX0KIAotCWJpdHMgPSAwOwogCXBjcHVfZm9yX2VhY2hfbWRfZnJlZV9yZWdpb24oY2h1bmssIGJpdF9vZmYsIGJpdHMpCiAJCXBjcHVfYmxvY2tfdXBkYXRlKGNodW5rX21kLCBiaXRfb2ZmLCBiaXRfb2ZmICYjNDM7IGJpdHMpOwogfQpAQCAtMTEyMiw3ICYjNDM7MTEyMSw2IEBAIHN0YXRpYyBpbnQgcGNwdV9maW5kX2Jsb2NrX2ZpdChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBhbGxvY19iaXRzLAogCQlyZXR1cm4gLTE7CiAKIAliaXRfb2ZmID0gcGNwdV9uZXh0X2hpbnQoY2h1bmtfbWQsIGFsbG9jX2JpdHMpOwotCWJpdHMgPSAwOwogCXBjcHVfZm9yX2VhY2hfZml0X3JlZ2lvbihjaHVuaywgYWxsb2NfYml0cywgYWxpZ24sIGJpdF9vZmYsIGJpdHMpIHsKIAkJaWYgKCFwb3Bfb25seSB8fCBwY3B1X2lzX3BvcHVsYXRlZChjaHVuaywgYml0X29mZiwgYml0cywKIAkJCQkJCSAgICZhbXA7bmV4dF9vZmYpKQpAQCAtMjgxOSw3ICYjNDM7MjgxNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICogX19pbml0IF9fZmxhdHRlbiBwY3B1X2J1aWxkX2FsbG9jX2luZm8oCiAJc3RhdGljIGludCBncm91cF9jbnRbTlJfQ1BVU10gX19pbml0ZGF0YTsKIAlzdGF0aWMgc3RydWN0IGNwdW1hc2sgbWFzayBfX2luaXRkYXRhOwogCWNvbnN0IHNpemVfdCBzdGF0aWNfc2l6ZSA9IF9fcGVyX2NwdV9lbmQgLSBfX3Blcl9jcHVfc3RhcnQ7Ci0JaW50IG5yX2dyb3VwcyA9IDEsIG5yX3VuaXRzID0gMDsKJiM0MzsJaW50IG5yX2dyb3VwcywgbnJfdW5pdHMgPSAwOwogCXNpemVfdCBzaXplX3N1bSwgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZTsKIAlpbnQgdXBhLCBtYXhfdXBhLCBiZXN0X3VwYTsJLyogdW5pdHNfcGVyX2FsbG9jICovCiAJaW50IGxhc3RfYWxsb2NzLCBncm91cCwgdW5pdDsKQEAgLTI4MzAsNyAmIzQzOzI4MjgsNiBAQCBzdGF0aWMgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBfX2ZsYXR0ZW4gcGNwdV9idWlsZF9hbGxvY19pbmZvKAogCS8qIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyAqLwogCW1lbXNldChncm91cF9tYXAsIDAsIHNpemVvZihncm91cF9tYXApKTsKIAltZW1zZXQoZ3JvdXBfY250LCAwLCBzaXplb2YoZ3JvdXBfY250KSk7Ci0JY3B1bWFza19jbGVhcigmYW1wO21hc2spOwogCiAJLyogY2FsY3VsYXRlIHNpemVfc3VtIGFuZCBlbnN1cmUgZHluX3NpemUgaXMgZW5vdWdoIGZvciBlYXJseSBhbGxvYyAqLwogCXNpemVfc3VtID0gUEZOX0FMSUdOKHN0YXRpY19zaXplICYjNDM7IHJlc2VydmVkX3NpemUgJiM0MzsKQEAgLTMxODEsOCAmIzQzOzMxNzgsNiBAQCB2b2lkIF9faW5pdCBfX3dlYWsgcGNwdV9wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKQogCQluZXcgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVEVfVEFCTEVfU0laRSwgUFRFX1RBQkxFX1NJWkUpOwogCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZhbXA7aW5pdF9tbSwgcG1kLCBuZXcpOwogCX0KLQotCXJldHVybjsKIH0KIAogLyoqCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTkKCQkJCQkJCW91dHB1dDogMTA0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZSBDaGFuZ2VzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBzdGFydCBieSBjYXJlZnVsbHkgaW5zcGVjdGluZyB0aGUgZGlmZi4gSSB3YW50IHRvIHNlZSB0aGUgZXhhY3QgbGluZXMgbW9kaWZpZWQgYW5kLCBjcnVjaWFsbHksIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSAmIzM0O2JlZm9yZSYjMzQ7IGFuZCAmIzM0O2FmdGVyJiMzNDsgaXMgdGhlIGtleSB0byBncmFzcGluZyB0aGUgaW50ZW50IGFuZCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiB0aGUgY3VycmVudCBjb2RlYmFzZSBzbyBhbnkgY2hhbmdlcyB3aWxsIGJlIG5vdGljZWQuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsJiMzOTtzIHN0cnVjdHVyZS4gSSYjMzk7bSBnb2luZyB0byB1c2UgYSB0b29sIGxpa2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiBgbW0vcGVyY3B1LmNgLiBUaGF0IGZpbGUgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcGVyLUNQVSBtZW1vcnkgbWFuYWdlbWVudCBwdXp6bGUuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgdGhlc2UgY2hhbmdlcyBtaWdodCBiZSByZWxhdGVkIHRvIHNvbWUgb3B0aW1pemF0aW9uIG9yIGZpeCBpbiB0aGF0IGFyZWEuIEdyYWJiaW5nIHRoZSBjb2RlIGRpcmVjdGx5IHdpbGwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaHlwb3RoZXNpcyBhbmQgdW5kZXJzdGFuZCB0aGUgbG93IGxldmVsIGVmZmVjdHMgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bSBnb2luZyB0byByZWFkIGFyb3VuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBlbnN1cmUgSSYjMzk7bSBnZXR0aW5nIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjaGFuZ2UgZml0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BlcmNwdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTA6XHRcdC8qIHByb21vdGUgc2Nhbl9oaW50IHRvIGNvbnRpZ19oaW50ICovXG4gNzUxOlx0XHRpZiAoIWZ1bGxfc2NhbiBcdTAwMjZcdTAwMjYgY2h1bmtfbWQtXHUwMDNlc2Nhbl9oaW50KSB7XG4gNzUyOlx0XHRcdGJpdF9vZmYgPSBjaHVua19tZC1cdTAwM2VzY2FuX2hpbnRfc3RhcnQgJiM0MzsgY2h1bmtfbWQtXHUwMDNlc2Nhbl9oaW50O1xuIDc1MzpcdFx0XHRjaHVua19tZC1cdTAwM2Vjb250aWdfaGludF9zdGFydCA9IGNodW5rX21kLVx1MDAzZXNjYW5faGludF9zdGFydDtcbiA3NTQ6XHRcdFx0Y2h1bmtfbWQtXHUwMDNlY29udGlnX2hpbnQgPSBjaHVua19tZC1cdTAwM2VzY2FuX2hpbnQ7XG4gNzU1Olx0XHRcdGNodW5rX21kLVx1MDAzZXNjYW5faGludCA9IDA7XG4gNzU2Olx0XHR9IGVsc2Uge1xuIDc1NzpcdFx0XHRiaXRfb2ZmID0gY2h1bmtfbWQtXHUwMDNlZmlyc3RfZnJlZTtcbiA3NTg6XHRcdFx0Y2h1bmtfbWQtXHUwMDNlY29udGlnX2hpbnQgPSAwO1xuIDc1OTpcdFx0fVxuIDc2MDpcdFxuIDc2MTpcdFx0cGNwdV9mb3JfZWFjaF9tZF9mcmVlX3JlZ2lvbihjaHVuaywgYml0X29mZiwgYml0cylcbiA3NjI6XHRcdFx0cGNwdV9ibG9ja191cGRhdGUoY2h1bmtfbWQsIGJpdF9vZmYsIGJpdF9vZmYgJiM0MzsgYml0cyk7XG4gNzYzOlx0fVxuIDc2NDpcdFxuIDc2NTpcdC8qKlxuIDc2NjpcdCAqIHBjcHVfYmxvY2tfcmVmcmVzaF9oaW50XG4gNzY3Olx0ICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdFxuIDc2ODpcdCAqIEBpbmRleDogaW5kZXggb2YgdGhlIG1ldGFkYXRhIGJsb2NrXG4gNzY5Olx0ICpcbiA3NzA6XHQgKiBTY2FucyBvdmVyIHRoZSBibG9jayBiZWdpbm5pbmcgYXQgZmlyc3RfZnJlZSBhbmQgdXBkYXRlcyB0aGUgYmxvY2tcbiA3NzE6XHQgKiBtZXRhZGF0YSBhY2NvcmRpbmdseS5cbiA3NzI6XHQgKi9cbiA3NzM6XHRzdGF0aWMgdm9pZCBwY3B1X2Jsb2NrX3JlZnJlc2hfaGludChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBpbmRleClcbiA3NzQ6XHR7XG4gNzc1Olx0XHRzdHJ1Y3QgcGNwdV9ibG9ja19tZCAqYmxvY2sgPSBjaHVuay1cdTAwM2VtZF9ibG9ja3MgJiM0MzsgaW5kZXg7XG4gNzc2Olx0XHR1bnNpZ25lZCBsb25nICphbGxvY19tYXAgPSBwY3B1X2luZGV4X2FsbG9jX21hcChjaHVuaywgaW5kZXgpO1xuIDc3NzpcdFx0dW5zaWduZWQgaW50IHN0YXJ0LCBlbmQ7XHQvKiByZWdpb24gc3RhcnQsIHJlZ2lvbiBlbmQgKi9cbiA3Nzg6XHRcbiA3Nzk6XHRcdC8qIHByb21vdGUgc2Nhbl9oaW50IHRvIGNvbnRpZ19oaW50ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wZXJjcHUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExNTpcdFx0LypcbjExMTY6XHRcdCAqIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvIHByZXZlbnQgc2Nhbm5pbmcgYnkgYXNzdW1pbmcgaWYgdGhlXG4xMTE3Olx0XHQgKiBhbGxvY2F0aW9uIGNhbm5vdCBmaXQgaW4gdGhlIGdsb2JhbCBoaW50LCB0aGVyZSBpcyBtZW1vcnkgcHJlc3N1cmVcbjExMTg6XHRcdCAqIGFuZCBjcmVhdGluZyBhIG5ldyBjaHVuayB3b3VsZCBoYXBwZW4gc29vbi5cbjExMTk6XHRcdCAqL1xuMTEyMDpcdFx0aWYgKCFwY3B1X2NoZWNrX2Jsb2NrX2hpbnQoY2h1bmtfbWQsIGFsbG9jX2JpdHMsIGFsaWduKSlcbjExMjE6XHRcdFx0cmV0dXJuIC0xO1xuMTEyMjpcdFxuMTEyMzpcdFx0Yml0X29mZiA9IHBjcHVfbmV4dF9oaW50KGNodW5rX21kLCBhbGxvY19iaXRzKTtcbjExMjQ6XHRcdHBjcHVfZm9yX2VhY2hfZml0X3JlZ2lvbihjaHVuaywgYWxsb2NfYml0cywgYWxpZ24sIGJpdF9vZmYsIGJpdHMpIHtcbjExMjU6XHRcdFx0aWYgKCFwb3Bfb25seSB8fCBwY3B1X2lzX3BvcHVsYXRlZChjaHVuaywgYml0X29mZiwgYml0cyxcbjExMjY6XHRcdFx0XHRcdFx0XHQgICBcdTAwMjZuZXh0X29mZikpXG4xMTI3Olx0XHRcdFx0YnJlYWs7XG4xMTI4Olx0XG4xMTI5Olx0XHRcdGJpdF9vZmYgPSBuZXh0X29mZjtcbjExMzA6XHRcdFx0Yml0cyA9IDA7XG4xMTMxOlx0XHR9XG4xMTMyOlx0XG4xMTMzOlx0XHRpZiAoYml0X29mZiA9PSBwY3B1X2NodW5rX21hcF9iaXRzKGNodW5rKSlcbjExMzQ6XHRcdFx0cmV0dXJuIC0xO1xuMTEzNTpcdFxuMTEzNjpcdFx0cmV0dXJuIGJpdF9vZmY7XG4xMTM3Olx0fVxuMTEzODpcdFxuMTEzOTpcdC8qXG4xMTQwOlx0ICogcGNwdV9maW5kX3plcm9fYXJlYSAtIG1vZGlmaWVkIGZyb20gYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWFfb2ZmKClcbjExNDE6XHQgKiBAbWFwOiB0aGUgYWRkcmVzcyB0byBiYXNlIHRoZSBzZWFyY2ggb25cbjExNDI6XHQgKiBAc2l6ZTogdGhlIGJpdG1hcCBzaXplIGluIGJpdHNcbjExNDM6XHQgKiBAc3RhcnQ6IHRoZSBiaXRudW1iZXIgdG8gc3RhcnQgc2VhcmNoaW5nIGF0XG4xMTQ0Olx0ICogQG5yOiB0aGUgbnVtYmVyIG9mIHplcm9lZCBiaXRzIHdlJiMzOTtyZSBsb29raW5nIGZvclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGVyY3B1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MTU6XHR7XG4yODE2Olx0XHRzdGF0aWMgaW50IGdyb3VwX21hcFtOUl9DUFVTXSBfX2luaXRkYXRhO1xuMjgxNzpcdFx0c3RhdGljIGludCBncm91cF9jbnRbTlJfQ1BVU10gX19pbml0ZGF0YTtcbjI4MTg6XHRcdHN0YXRpYyBzdHJ1Y3QgY3B1bWFzayBtYXNrIF9faW5pdGRhdGE7XG4yODE5Olx0XHRjb25zdCBzaXplX3Qgc3RhdGljX3NpemUgPSBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0O1xuMjgyMDpcdFx0aW50IG5yX2dyb3VwcywgbnJfdW5pdHMgPSAwO1xuMjgyMTpcdFx0c2l6ZV90IHNpemVfc3VtLCBtaW5fdW5pdF9zaXplLCBhbGxvY19zaXplO1xuMjgyMjpcdFx0aW50IHVwYSwgbWF4X3VwYSwgYmVzdF91cGE7XHQvKiB1bml0c19wZXJfYWxsb2MgKi9cbjI4MjM6XHRcdGludCBsYXN0X2FsbG9jcywgZ3JvdXAsIHVuaXQ7XG4yODI0Olx0XHR1bnNpZ25lZCBpbnQgY3B1LCB0Y3B1O1xuMjgyNTpcdFx0c3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWk7XG4yODI2Olx0XHR1bnNpZ25lZCBpbnQgKmNwdV9tYXA7XG4yODI3Olx0XG4yODI4Olx0XHQvKiB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgKi9cbjI4Mjk6XHRcdG1lbXNldChncm91cF9tYXAsIDAsIHNpemVvZihncm91cF9tYXApKTtcbjI4MzA6XHRcdG1lbXNldChncm91cF9jbnQsIDAsIHNpemVvZihncm91cF9jbnQpKTtcbjI4MzE6XHRcbjI4MzI6XHRcdC8qIGNhbGN1bGF0ZSBzaXplX3N1bSBhbmQgZW5zdXJlIGR5bl9zaXplIGlzIGVub3VnaCBmb3IgZWFybHkgYWxsb2MgKi9cbjI4MzM6XHRcdHNpemVfc3VtID0gUEZOX0FMSUdOKHN0YXRpY19zaXplICYjNDM7IHJlc2VydmVkX3NpemUgJiM0MztcbjI4MzQ6XHRcdFx0XHQgICAgbWF4X3Qoc2l6ZV90LCBkeW5fc2l6ZSwgUEVSQ1BVX0RZTkFNSUNfRUFSTFlfU0laRSkpO1xuMjgzNTpcdFx0ZHluX3NpemUgPSBzaXplX3N1bSAtIHN0YXRpY19zaXplIC0gcmVzZXJ2ZWRfc2l6ZTtcbjI4MzY6XHRcbjI4Mzc6XHRcdC8qXG4yODM4Olx0XHQgKiBEZXRlcm1pbmUgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZSBhbmQgbWF4X3VwYSBzdWNoIHRoYXRcbjI4Mzk6XHRcdCAqIGFsbG9jX3NpemUgaXMgbXVsdGlwbGUgb2YgYXRvbV9zaXplIGFuZCBpcyB0aGUgc21hbGxlc3RcbjI4NDA6XHRcdCAqIHdoaWNoIGNhbiBhY2NvbW1vZGF0ZSA0ayBhbGlnbmVkIHNlZ21lbnRzIHdoaWNoIGFyZSBlcXVhbCB0b1xuMjg0MTpcdFx0ICogb3IgbGFyZ2VyIHRoYW4gbWluX3VuaXRfc2l6ZS5cbjI4NDI6XHRcdCAqL1xuMjg0MzpcdFx0bWluX3VuaXRfc2l6ZSA9IG1heF90KHNpemVfdCwgc2l6ZV9zdW0sIFBDUFVfTUlOX1VOSVRfU0laRSk7XG4yODQ0Olx0XG4yODQ1Olx0XHQvKiBkZXRlcm1pbmUgdGhlIG1heGltdW0gIyBvZiB1bml0cyB0aGF0IGNhbiBmaXQgaW4gYW4gYWxsb2NhdGlvbiAqL1xuMjg0NjpcdFx0YWxsb2Nfc2l6ZSA9IHJvdW5kdXAobWluX3VuaXRfc2l6ZSwgYXRvbV9zaXplKTtcbjI4NDc6XHRcdHVwYSA9IGFsbG9jX3NpemUgLyBtaW5fdW5pdF9zaXplO1xuMjg0ODpcdFx0d2hpbGUgKGFsbG9jX3NpemUgJSB1cGEgfHwgKG9mZnNldF9pbl9wYWdlKGFsbG9jX3NpemUgLyB1cGEpKSlcbjI4NDk6XHRcdFx0dXBhLS07XG4yODUwOlx0XHRtYXhfdXBhID0gdXBhO1xuMjg1MTpcdFxuMjg1MjpcdFx0Y3B1bWFza19jb3B5KFx1MDAyNm1hc2ssIGNwdV9wb3NzaWJsZV9tYXNrKTtcbjI4NTM6XHRcbjI4NTQ6XHRcdC8qIGdyb3VwIGNwdXMgYWNjb3JkaW5nIHRvIHRoZWlyIHByb3hpbWl0eSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCBzcGVha2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byBSZWdpb24gSXRlcmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGNvcmUgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYHBjcHVfZm9yX2VhY2hfbWRfZnJlZV9yZWdpb25gIGFuZCBgcGNwdV9mb3JfZWFjaF9maXRfcmVnaW9uYC4gSSYjMzk7bGwgc3RhcnQgYnkgY3JhY2tpbmcgb3BlbiB0aGVpciBkZWZpbml0aW9ucyDigJMgSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gVGhlIG5hbWVzIHRoZW1zZWx2ZXMgYXJlIHN1Z2dlc3RpdmUsIGJ1dCBJIGNhbiYjMzk7dCByZWx5IG9uIGFzc3VtcHRpb25zLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHRoaXMgZnVuZGFtZW50YWwgdG8gdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IHBlci1DUFUgbWFuYWdlbWVudCwgYW5kIGhvdyB0aGVzZSBpdGVyYXRpb24gbWV0aG9kcyBpbXBhY3QgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgd2l0aGluIHRob3NlIHBlci1DUFUgcmVnaW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgbWVjaGFuaWNzLiBJcyBpdCBqdXN0IGFib3V0IGl0ZXJhdGluZyB0aHJvdWdoIGZyZWUgYmxvY2tzLCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkPyBBcmUgd2UgZGVhbGluZyB3aXRoIG1ldGFkYXRhIHN0cnVjdHVyZXMsIGxpbmtlZCBsaXN0cywgYml0bWFwIHJlcHJlc2VudGF0aW9ucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRpbWUgdG8gZ2V0IGdyYW51bGFyIGFuZCBsb29rIGF0IHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aG9zZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgcGNwdV9mb3JfZWFjaF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wZXJjcHUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wZXJjcHUuYz00MjA9c3RhdGljIHZvaWQgcGNwdV9uZXh0X2ZpdF9yZWdpb24oc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgYWxsb2NfYml0cyxcbi0tXG5tbS9wZXJjcHUuYy00NzYtICovXG5tbS9wZXJjcHUuYzo0Nzc6I2RlZmluZSBwY3B1X2Zvcl9lYWNoX21kX2ZyZWVfcmVnaW9uKGNodW5rLCBiaXRfb2ZmLCBiaXRzKVx0XHRcXFxubW0vcGVyY3B1LmMtNDc4LVx0Zm9yIChwY3B1X25leHRfbWRfZnJlZV9yZWdpb24oKGNodW5rKSwgXHUwMDI2KGJpdF9vZmYpLCBcdTAwMjYoYml0cykpO1x0XFxcbi0tXG5tbS9wZXJjcHUuYy00ODItXG5tbS9wZXJjcHUuYzo0ODM6I2RlZmluZSBwY3B1X2Zvcl9lYWNoX2ZpdF9yZWdpb24oY2h1bmssIGFsbG9jX2JpdHMsIGFsaWduLCBiaXRfb2ZmLCBiaXRzKSAgICAgXFxcbm1tL3BlcmNwdS5jLTQ4NC1cdGZvciAocGNwdV9uZXh0X2ZpdF9yZWdpb24oKGNodW5rKSwgKGFsbG9jX2JpdHMpLCAoYWxpZ24pLCBcdTAwMjYoYml0X29mZiksIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIzNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vcGVyY3B1LmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHBlci1DUFUgdmFyaWFibGVzIGFyZSBiZWluZyBoYW5kbGVkIGluIHRoZSBrZXJuZWwuIFRoZSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBhY2Nlc3MuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgbW0vcGVyY3B1LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDQyMC00OTAuIFRoYXQgYXJlYSBzaG91bGQgY29udGFpbiB0aGUga2V5IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIHBlci1jcHUgc3lzdGVtLCBpZiBteSBtZW1vcnkgc2VydmVzIG1lIHJpZ2h0LCBJIGJlbGlldmUgdGhpcyBpcyB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGZ1bmN0aW9ucyBmb3IgaW5pdGlhbGl6aW5nIGFuZCBhY2Nlc3NpbmcgcGVyLWNwdSBtZW1vcnkgYXJlIGRlZmluZWQuIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwZXJoYXBzIHNvbWUgaW1wb3J0YW50IG1hY3JvIGRlZmluaXRpb25zLiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgbWVtb3J5IGxheW91dCBhbmQgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIHdpdGhpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUsIGFzIHRoZSBhbGxvY2F0aW9uIGFuZCBhY2Nlc3MgbWV0aG9kcyBoYXZlIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5LiBLbm93aW5nIHRoZSBmaW5lciBwb2ludHMgaGVyZSB3aWxsIGFsbG93IG1lIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgbWVtb3J5IHN1YnN5c3RlbSBtb3JlIGJyb2FkbHkuIEFscmlnaHQsIGxldCYjMzk7cyBnZXQgcmVhZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wZXJjcHUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDIwOlx0c3RhdGljIHZvaWQgcGNwdV9uZXh0X2ZpdF9yZWdpb24oc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgYWxsb2NfYml0cyxcbiA0MjE6XHRcdFx0XHRcdCBpbnQgYWxpZ24sIGludCAqYml0X29mZiwgaW50ICpiaXRzKVxuIDQyMjpcdHtcbiA0MjM6XHRcdGludCBpID0gcGNwdV9vZmZfdG9fYmxvY2tfaW5kZXgoKmJpdF9vZmYpO1xuIDQyNDpcdFx0aW50IGJsb2NrX29mZiA9IHBjcHVfb2ZmX3RvX2Jsb2NrX29mZigqYml0X29mZik7XG4gNDI1Olx0XHRzdHJ1Y3QgcGNwdV9ibG9ja19tZCAqYmxvY2s7XG4gNDI2Olx0XG4gNDI3Olx0XHQqYml0cyA9IDA7XG4gNDI4Olx0XHRmb3IgKGJsb2NrID0gY2h1bmstXHUwMDNlbWRfYmxvY2tzICYjNDM7IGk7IGkgXHUwMDNjIHBjcHVfY2h1bmtfbnJfYmxvY2tzKGNodW5rKTtcbiA0Mjk6XHRcdCAgICAgYmxvY2smIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykge1xuIDQzMDpcdFx0XHQvKiBoYW5kbGVzIGNvbnRpZyBhcmVhIGFjcm9zcyBibG9ja3MgKi9cbiA0MzE6XHRcdFx0aWYgKCpiaXRzKSB7XG4gNDMyOlx0XHRcdFx0KmJpdHMgJiM0Mzs9IGJsb2NrLVx1MDAzZWxlZnRfZnJlZTtcbiA0MzM6XHRcdFx0XHRpZiAoKmJpdHMgXHUwMDNlPSBhbGxvY19iaXRzKVxuIDQzNDpcdFx0XHRcdFx0cmV0dXJuO1xuIDQzNTpcdFx0XHRcdGlmIChibG9jay1cdTAwM2VsZWZ0X2ZyZWUgPT0gUENQVV9CSVRNQVBfQkxPQ0tfQklUUylcbiA0MzY6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDQzNzpcdFx0XHR9XG4gNDM4Olx0XG4gNDM5Olx0XHRcdC8qIGNoZWNrIGJsb2NrLVx1MDAzZWNvbnRpZ19oaW50ICovXG4gNDQwOlx0XHRcdCpiaXRzID0gQUxJR04oYmxvY2stXHUwMDNlY29udGlnX2hpbnRfc3RhcnQsIGFsaWduKSAtXG4gNDQxOlx0XHRcdFx0YmxvY2stXHUwMDNlY29udGlnX2hpbnRfc3RhcnQ7XG4gNDQyOlx0XHRcdC8qXG4gNDQzOlx0XHRcdCAqIFRoaXMgdXNlcyB0aGUgYmxvY2sgb2Zmc2V0IHRvIGRldGVybWluZSBpZiB0aGlzIGhhcyBiZWVuXG4gNDQ0Olx0XHRcdCAqIGNoZWNrZWQgaW4gdGhlIHByaW9yIGl0ZXJhdGlvbi5cbiA0NDU6XHRcdFx0ICovXG4gNDQ2Olx0XHRcdGlmIChibG9jay1cdTAwM2Vjb250aWdfaGludCBcdTAwMjZcdTAwMjZcbiA0NDc6XHRcdFx0ICAgIGJsb2NrLVx1MDAzZWNvbnRpZ19oaW50X3N0YXJ0IFx1MDAzZT0gYmxvY2tfb2ZmIFx1MDAyNlx1MDAyNlxuIDQ0ODpcdFx0XHQgICAgYmxvY2stXHUwMDNlY29udGlnX2hpbnQgXHUwMDNlPSAqYml0cyAmIzQzOyBhbGxvY19iaXRzKSB7XG4gNDQ5Olx0XHRcdFx0aW50IHN0YXJ0ID0gcGNwdV9uZXh0X2hpbnQoYmxvY2ssIGFsbG9jX2JpdHMpO1xuIDQ1MDpcdFxuIDQ1MTpcdFx0XHRcdCpiaXRzICYjNDM7PSBhbGxvY19iaXRzICYjNDM7IGJsb2NrLVx1MDAzZWNvbnRpZ19oaW50X3N0YXJ0IC1cbiA0NTI6XHRcdFx0XHRcdCBzdGFydDtcbiA0NTM6XHRcdFx0XHQqYml0X29mZiA9IHBjcHVfYmxvY2tfb2ZmX3RvX29mZihpLCBzdGFydCk7XG4gNDU0Olx0XHRcdFx0cmV0dXJuO1xuIDQ1NTpcdFx0XHR9XG4gNDU2Olx0XHRcdC8qIHJlc2V0IHRvIHNhdGlzZnkgdGhlIHNlY29uZCBwcmVkaWNhdGUgYWJvdmUgKi9cbiA0NTc6XHRcdFx0YmxvY2tfb2ZmID0gMDtcbiA0NTg6XHRcbiA0NTk6XHRcdFx0KmJpdF9vZmYgPSBBTElHTihQQ1BVX0JJVE1BUF9CTE9DS19CSVRTIC0gYmxvY2stXHUwMDNlcmlnaHRfZnJlZSxcbiA0NjA6XHRcdFx0XHRcdCBhbGlnbik7XG4gNDYxOlx0XHRcdCpiaXRzID0gUENQVV9CSVRNQVBfQkxPQ0tfQklUUyAtICpiaXRfb2ZmO1xuIDQ2MjpcdFx0XHQqYml0X29mZiA9IHBjcHVfYmxvY2tfb2ZmX3RvX29mZihpLCAqYml0X29mZik7XG4gNDYzOlx0XHRcdGlmICgqYml0cyBcdTAwM2U9IGFsbG9jX2JpdHMpXG4gNDY0Olx0XHRcdFx0cmV0dXJuO1xuIDQ2NTpcdFx0fVxuIDQ2NjpcdFxuIDQ2NzpcdFx0Lyogbm8gdmFsaWQgb2Zmc2V0cyB3ZXJlIGZvdW5kIC0gZmFpbCBjb25kaXRpb24gKi9cbiA0Njg6XHRcdCpiaXRfb2ZmID0gcGNwdV9jaHVua19tYXBfYml0cyhjaHVuayk7XG4gNDY5Olx0fVxuIDQ3MDpcdFxuIDQ3MTpcdC8qXG4gNDcyOlx0ICogTWV0YWRhdGEgZnJlZSBhcmVhIGl0ZXJhdG9ycy4gIFRoZXNlIHBlcmZvcm0gYWdncmVnYXRpb24gb2YgZnJlZSBhcmVhc1xuIDQ3MzpcdCAqIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBibG9ja3MgYW5kIHJldHVybiB0aGUgb2Zmc2V0IEBiaXRfb2ZmIGFuZCBzaXplIGluXG4gNDc0Olx0ICogYml0cyBvZiB0aGUgZnJlZSBhcmVhIEBiaXRzLiAgcGNwdV9mb3JfZWFjaF9maXRfcmVnaW9uIG9ubHkgcmV0dXJucyB3aGVuXG4gNDc1Olx0ICogYSBmaXQgaXMgZm91bmQgZm9yIHRoZSBhbGxvY2F0aW9uIHJlcXVlc3QuXG4gNDc2Olx0ICovXG4gNDc3Olx0I2RlZmluZSBwY3B1X2Zvcl9lYWNoX21kX2ZyZWVfcmVnaW9uKGNodW5rLCBiaXRfb2ZmLCBiaXRzKVx0XHRcXFxuIDQ3ODpcdFx0Zm9yIChwY3B1X25leHRfbWRfZnJlZV9yZWdpb24oKGNodW5rKSwgXHUwMDI2KGJpdF9vZmYpLCBcdTAwMjYoYml0cykpO1x0XFxcbiA0Nzk6XHRcdCAgICAgKGJpdF9vZmYpIFx1MDAzYyBwY3B1X2NodW5rX21hcF9iaXRzKChjaHVuaykpO1x0XHRcdFxcXG4gNDgwOlx0XHQgICAgIChiaXRfb2ZmKSAmIzQzOz0gKGJpdHMpICYjNDM7IDEsXHRcdFx0XHRcdFxcXG4gNDgxOlx0XHQgICAgIHBjcHVfbmV4dF9tZF9mcmVlX3JlZ2lvbigoY2h1bmspLCBcdTAwMjYoYml0X29mZiksIFx1MDAyNihiaXRzKSkpXG4gNDgyOlx0XG4gNDgzOlx0I2RlZmluZSBwY3B1X2Zvcl9lYWNoX2ZpdF9yZWdpb24oY2h1bmssIGFsbG9jX2JpdHMsIGFsaWduLCBiaXRfb2ZmLCBiaXRzKSAgICAgXFxcbiA0ODQ6XHRcdGZvciAocGNwdV9uZXh0X2ZpdF9yZWdpb24oKGNodW5rKSwgKGFsbG9jX2JpdHMpLCAoYWxpZ24pLCBcdTAwMjYoYml0X29mZiksIFxcXG4gNDg1Olx0XHRcdFx0XHQgIFx1MDAyNihiaXRzKSk7XHRcdFx0XHQgICAgICBcXFxuIDQ4NjpcdFx0ICAgICAoYml0X29mZikgXHUwMDNjIHBjcHVfY2h1bmtfbWFwX2JpdHMoKGNodW5rKSk7XHRcdFx0ICAgICAgXFxcbiA0ODc6XHRcdCAgICAgKGJpdF9vZmYpICYjNDM7PSAoYml0cyksXHRcdFx0XHRcdCAgICAgIFxcXG4gNDg4Olx0XHQgICAgIHBjcHVfbmV4dF9maXRfcmVnaW9uKChjaHVuayksIChhbGxvY19iaXRzKSwgKGFsaWduKSwgXHUwMDI2KGJpdF9vZmYpLCBcXFxuIDQ4OTpcdFx0XHRcdFx0ICBcdTAwMjYoYml0cykpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcGVyIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gd2UgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0JiMzOTtzIG5vdCBqdXN0IHNraW0gdGhlIHN1cmZhY2UuIFRoZSBjb2RlIGlzIHBvaW50aW5nIHRvIGBwY3B1X25leHRfbWRfZnJlZV9yZWdpb25gIOKAkyB0aGF0IHNvdW5kcyBsaWtlIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgZnJlZSBtZW1vcnkgcmVnaW9ucywgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIHBlci1DUFUgY29udGV4dC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSByZWFsbHkgY2xvc2UgbG9vayBhdCB0aGUgY29kZSBiZXR3ZWVuIGxpbmVzIDM3MCBhbmQgNDIwLiBUaGlzIHNlY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgZmluZGluZyB0aGUgbmV4dCBhdmFpbGFibGUgZnJlZSBjaHVuayByZXNpZGVzLCBvciBwZXJoYXBzIGhvdyB0aGUgZnJlZSByZWdpb25zIGFyZSB0cmFja2VkIGFuZCB1cGRhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgaXQgaGFuZGxlcyBmcmFnbWVudGF0aW9uLCBtZXJnaW5nLCBhbmQgYW55IHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24gaWYgbXVsdGlwbGUgQ1BVcyBhcmUgb3BlcmF0aW5nIGNvbmN1cnJlbnRseS4gVGhpcyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIG1vZHVsZSBpbiBpdHMgZW50aXJldHkuIEl0IGNvdWxkIGludm9sdmUgYml0bWFwIGNoZWNrcywgbGlua2VkIGxpc3RzIG9yIGJ1ZGR5IGFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGVyY3B1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3MDpcdFx0c3RydWN0IHBjcHVfYmxvY2tfbWQgKmJsb2NrO1xuIDM3MTpcdFxuIDM3MjpcdFx0KmJpdHMgPSAwO1xuIDM3MzpcdFx0Zm9yIChibG9jayA9IGNodW5rLVx1MDAzZW1kX2Jsb2NrcyAmIzQzOyBpOyBpIFx1MDAzYyBwY3B1X2NodW5rX25yX2Jsb2NrcyhjaHVuayk7XG4gMzc0Olx0XHQgICAgIGJsb2NrJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbiAzNzU6XHRcdFx0LyogaGFuZGxlcyBjb250aWcgYXJlYSBhY3Jvc3MgYmxvY2tzICovXG4gMzc2Olx0XHRcdGlmICgqYml0cykge1xuIDM3NzpcdFx0XHRcdCpiaXRzICYjNDM7PSBibG9jay1cdTAwM2VsZWZ0X2ZyZWU7XG4gMzc4Olx0XHRcdFx0aWYgKGJsb2NrLVx1MDAzZWxlZnRfZnJlZSA9PSBQQ1BVX0JJVE1BUF9CTE9DS19CSVRTKVxuIDM3OTpcdFx0XHRcdFx0Y29udGludWU7XG4gMzgwOlx0XHRcdFx0cmV0dXJuO1xuIDM4MTpcdFx0XHR9XG4gMzgyOlx0XG4gMzgzOlx0XHRcdC8qXG4gMzg0Olx0XHRcdCAqIFRoaXMgY2hlY2tzIHRocmVlIHRoaW5ncy4gIEZpcnN0IGlzIHRoZXJlIGEgY29udGlnX2hpbnQgdG9cbiAzODU6XHRcdFx0ICogY2hlY2suICBTZWNvbmQsIGhhdmUgd2UgY2hlY2tlZCB0aGlzIGhpbnQgYmVmb3JlIGJ5XG4gMzg2Olx0XHRcdCAqIGNvbXBhcmluZyB0aGUgYmxvY2tfb2ZmLiAgVGhpcmQsIGlzIHRoaXMgdGhlIHNhbWUgYXMgdGhlXG4gMzg3Olx0XHRcdCAqIHJpZ2h0IGNvbnRpZyBoaW50LiAgSW4gdGhlIGxhc3QgY2FzZSwgaXQgc3BpbGxzIG92ZXIgaW50b1xuIDM4ODpcdFx0XHQgKiB0aGUgbmV4dCBibG9jayBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGNvbnRpZyBhcmVhXG4gMzg5Olx0XHRcdCAqIGFjcm9zcyBibG9ja3MgY29kZS5cbiAzOTA6XHRcdFx0ICovXG4gMzkxOlx0XHRcdCpiaXRzID0gYmxvY2stXHUwMDNlY29udGlnX2hpbnQ7XG4gMzkyOlx0XHRcdGlmICgqYml0cyBcdTAwMjZcdTAwMjYgYmxvY2stXHUwMDNlY29udGlnX2hpbnRfc3RhcnQgXHUwMDNlPSBibG9ja19vZmYgXHUwMDI2XHUwMDI2XG4gMzkzOlx0XHRcdCAgICAqYml0cyAmIzQzOyBibG9jay1cdTAwM2Vjb250aWdfaGludF9zdGFydCBcdTAwM2MgUENQVV9CSVRNQVBfQkxPQ0tfQklUUykge1xuIDM5NDpcdFx0XHRcdCpiaXRfb2ZmID0gcGNwdV9ibG9ja19vZmZfdG9fb2ZmKGksXG4gMzk1Olx0XHRcdFx0XHRcdGJsb2NrLVx1MDAzZWNvbnRpZ19oaW50X3N0YXJ0KTtcbiAzOTY6XHRcdFx0XHRyZXR1cm47XG4gMzk3Olx0XHRcdH1cbiAzOTg6XHRcdFx0LyogcmVzZXQgdG8gc2F0aXNmeSB0aGUgc2Vjb25kIHByZWRpY2F0ZSBhYm92ZSAqL1xuIDM5OTpcdFx0XHRibG9ja19vZmYgPSAwO1xuIDQwMDpcdFxuIDQwMTpcdFx0XHQqYml0cyA9IGJsb2NrLVx1MDAzZXJpZ2h0X2ZyZWU7XG4gNDAyOlx0XHRcdCpiaXRfb2ZmID0gKGkgJiM0MzsgMSkgKiBQQ1BVX0JJVE1BUF9CTE9DS19CSVRTIC0gYmxvY2stXHUwMDNlcmlnaHRfZnJlZTtcbiA0MDM6XHRcdH1cbiA0MDQ6XHR9XG4gNDA1Olx0XG4gNDA2Olx0LyoqXG4gNDA3Olx0ICogcGNwdV9uZXh0X2ZpdF9yZWdpb24gLSBmaW5kcyBmaXQgYXJlYXMgZm9yIGEgZ2l2ZW4gYWxsb2NhdGlvbiByZXF1ZXN0XG4gNDA4Olx0ICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdFxuIDQwOTpcdCAqIEBhbGxvY19iaXRzOiBzaXplIG9mIGFsbG9jYXRpb25cbiA0MTA6XHQgKiBAYWxpZ246IGFsaWdubWVudCBvZiBhcmVhIChtYXggUEFHRV9TSVpFKVxuIDQxMTpcdCAqIEBiaXRfb2ZmOiBjaHVuayBvZmZzZXRcbiA0MTI6XHQgKiBAYml0czogc2l6ZSBvZiBmcmVlIGFyZWFcbiA0MTM6XHQgKlxuIDQxNDpcdCAqIEZpbmRzIHRoZSBuZXh0IGZyZWUgcmVnaW9uIHRoYXQgaXMgdmlhYmxlIGZvciB1c2Ugd2l0aCBhIGdpdmVuIHNpemUgYW5kXG4gNDE1Olx0ICogYWxpZ25tZW50LiAgVGhpcyBvbmx5IHJldHVybnMgaWYgdGhlcmUgaXMgYSB2YWxpZCBhcmVhIHRvIGJlIHVzZWQgZm9yIHRoaXNcbiA0MTY6XHQgKiBhbGxvY2F0aW9uLiAgYmxvY2stXHUwMDNlZmlyc3RfZnJlZSBpcyByZXR1cm5lZCBpZiB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0IGZpdHNcbiA0MTc6XHQgKiB3aXRoaW4gdGhlIGJsb2NrIHRvIHNlZSBpZiB0aGUgcmVxdWVzdCBjYW4gYmUgZnVsZmlsbGVkIHByaW9yIHRvIHRoZSBjb250aWdcbiA0MTg6XHQgKiBoaW50LlxuIDQxOTpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODM3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWR1bmRhbnQgQ29kZSBpbiBQZXItQ1BVIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGRpZmZzLiBJIHNlZSBhIHBhdHRlcm4gaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2Ugc29tZSB1bm5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbiBpcyBoYXBwZW5pbmcuIEluIGBwY3B1X2NodW5rX3JlZnJlc2hfaGludCgpYCwgSSBub3RpY2VkIHRoYXQgYGJpdHNgIGlzIHNldCB0byB6ZXJvICpiZWZvcmUqIGEgbG9vcCB0aGF0IHJlbGllcyBvbiBhIGZ1bmN0aW9uLCBgcGNwdV9uZXh0X21kX2ZyZWVfcmVnaW9uYCwgdG8gaW5pdGlhbGl6ZSBgYml0c2AuIFRoaXMgbWVhbnMgdGhhdCB0aGUgaW5pdGlhbCBgYml0cyA9IDA7YCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudDsgdGhlIGZ1bmN0aW9uIGFscmVhZHkgaGFuZGxlcyB0aGF0LiBUaGUgc2FtZSB0aGluZyBpcyBoYXBwZW5pbmcgaW4gYHBjcHVfZmluZF9ibG9ja19maXQoKWAuIEFnYWluLCBgYml0c2AgaXMgbmVlZGxlc3NseSB6ZXJvZWQgb3V0IGJlZm9yZSBgcGNwdV9mb3JfZWFjaF9maXRfcmVnaW9uYCB3aGljaCBhbHJlYWR5IGhhbmRsZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBiaXRzYCB1c2luZyBgcGNwdV9uZXh0X2ZpdF9yZWdpb25gLgoKVGhlbiwgbG9va2luZyBhdCB0aGUgY2hhbmdlIGluIGBwY3B1X2J1aWxkX2FsbG9jX2luZm8oKWAsIGl0IGxvb2tzIGxpa2UgYG5yX2dyb3Vwc2AgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgZGlmZmVyZW50bHkuIFByZXZpb3VzbHksIGJvdGggYG5yX2dyb3Vwc2AgYW5kIGBucl91bml0c2Agd2VyZSBpbml0aWFsaXplZCBvbiB0aGUgc2FtZSBsaW5lLiBJbiB0aGlzIGNhc2UsIGBucl9ncm91cHNgIGlzIG5vIGxvbmdlciBiZWluZyBhc3NpZ25lZCBhbiBpbml0aWFsIHZhbHVlIGFuZCBgbnJfdW5pdHNgIGlzIGluaXRpYWxpemVkIHRvIHplcm8uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IGBucl9ncm91cHNgIGFuZCBgbWFza2AgYXJlIHVzZWQgaW4gdGhpcyBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCBubyBpc3N1ZXMgYXJlIGludHJvZHVjZWQuIEnigJlsbCBtYWtlIHN1cmUgdG8gZG91YmxlIGNoZWNrIGxpbmVzIDI4NDAtMjkwMCBvZiBgbW0vcGVyY3B1LmNgIHRvIGNvbmZpcm0gdGhhdCBgbnJfZ3JvdXBzYCBhbmQgYG1hc2tgIGFyZSBiZWluZyBwcm9wZXJseSBzZXQgd2l0aGluIHRoZSBmdW5jdGlvbiYjMzk7cyBmbG93LiBPdmVyYWxsLCBpdCBsb29rcyBsaWtlIHRoZXNlIGNoYW5nZXMgYXJlIGFpbWVkIGF0IHJlbW92aW5nIHVubmVjZXNzYXJ5IGNvZGUgYW5kIGltcHJvdmluZyBjb2RlIGNsYXJpdHksIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGUgaW1wbGljYXRpb25zIG9mIHRob3NlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGVyY3B1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NDA6XHRcdCAqIHdoaWNoIGNhbiBhY2NvbW1vZGF0ZSA0ayBhbGlnbmVkIHNlZ21lbnRzIHdoaWNoIGFyZSBlcXVhbCB0b1xuMjg0MTpcdFx0ICogb3IgbGFyZ2VyIHRoYW4gbWluX3VuaXRfc2l6ZS5cbjI4NDI6XHRcdCAqL1xuMjg0MzpcdFx0bWluX3VuaXRfc2l6ZSA9IG1heF90KHNpemVfdCwgc2l6ZV9zdW0sIFBDUFVfTUlOX1VOSVRfU0laRSk7XG4yODQ0Olx0XG4yODQ1Olx0XHQvKiBkZXRlcm1pbmUgdGhlIG1heGltdW0gIyBvZiB1bml0cyB0aGF0IGNhbiBmaXQgaW4gYW4gYWxsb2NhdGlvbiAqL1xuMjg0NjpcdFx0YWxsb2Nfc2l6ZSA9IHJvdW5kdXAobWluX3VuaXRfc2l6ZSwgYXRvbV9zaXplKTtcbjI4NDc6XHRcdHVwYSA9IGFsbG9jX3NpemUgLyBtaW5fdW5pdF9zaXplO1xuMjg0ODpcdFx0d2hpbGUgKGFsbG9jX3NpemUgJSB1cGEgfHwgKG9mZnNldF9pbl9wYWdlKGFsbG9jX3NpemUgLyB1cGEpKSlcbjI4NDk6XHRcdFx0dXBhLS07XG4yODUwOlx0XHRtYXhfdXBhID0gdXBhO1xuMjg1MTpcdFxuMjg1MjpcdFx0Y3B1bWFza19jb3B5KFx1MDAyNm1hc2ssIGNwdV9wb3NzaWJsZV9tYXNrKTtcbjI4NTM6XHRcbjI4NTQ6XHRcdC8qIGdyb3VwIGNwdXMgYWNjb3JkaW5nIHRvIHRoZWlyIHByb3hpbWl0eSAqL1xuMjg1NTpcdFx0Zm9yIChncm91cCA9IDA7ICFjcHVtYXNrX2VtcHR5KFx1MDAyNm1hc2spOyBncm91cCYjNDM7JiM0MzspIHtcbjI4NTY6XHRcdFx0LyogcG9wIHRoZSBncm91cCYjMzk7cyBmaXJzdCBjcHUgKi9cbjI4NTc6XHRcdFx0Y3B1ID0gY3B1bWFza19maXJzdChcdTAwMjZtYXNrKTtcbjI4NTg6XHRcdFx0Z3JvdXBfbWFwW2NwdV0gPSBncm91cDtcbjI4NTk6XHRcdFx0Z3JvdXBfY250W2dyb3VwXSYjNDM7JiM0Mzs7XG4yODYwOlx0XHRcdGNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgXHUwMDI2bWFzayk7XG4yODYxOlx0XG4yODYyOlx0XHRcdGZvcl9lYWNoX2NwdSh0Y3B1LCBcdTAwMjZtYXNrKSB7XG4yODYzOlx0XHRcdFx0aWYgKCFjcHVfZGlzdGFuY2VfZm4gfHxcbjI4NjQ6XHRcdFx0XHQgICAgKGNwdV9kaXN0YW5jZV9mbihjcHUsIHRjcHUpID09IExPQ0FMX0RJU1RBTkNFIFx1MDAyNlx1MDAyNlxuMjg2NTpcdFx0XHRcdCAgICAgY3B1X2Rpc3RhbmNlX2ZuKHRjcHUsIGNwdSkgPT0gTE9DQUxfRElTVEFOQ0UpKSB7XG4yODY2Olx0XHRcdFx0XHRncm91cF9tYXBbdGNwdV0gPSBncm91cDtcbjI4Njc6XHRcdFx0XHRcdGdyb3VwX2NudFtncm91cF0mIzQzOyYjNDM7O1xuMjg2ODpcdFx0XHRcdFx0Y3B1bWFza19jbGVhcl9jcHUodGNwdSwgXHUwMDI2bWFzayk7XG4yODY5Olx0XHRcdFx0fVxuMjg3MDpcdFx0XHR9XG4yODcxOlx0XHR9XG4yODcyOlx0XHRucl9ncm91cHMgPSBncm91cDtcbjI4NzM6XHRcbjI4NzQ6XHRcdC8qXG4yODc1Olx0XHQgKiBXYXN0ZWQgc3BhY2UgaXMgY2F1c2VkIGJ5IGEgcmF0aW8gaW1iYWxhbmNlIG9mIHVwYSB0byBncm91cF9jbnQuXG4yODc2Olx0XHQgKiBFeHBhbmQgdGhlIHVuaXRfc2l6ZSB1bnRpbCB3ZSB1c2UgXHUwMDNlPSA3NSUgb2YgdGhlIHVuaXRzIGFsbG9jYXRlZC5cbjI4Nzc6XHRcdCAqIFJlbGF0ZWQgdG8gYXRvbV9zaXplLCB3aGljaCBjb3VsZCBiZSBtdWNoIGxhcmdlciB0aGFuIHRoZSB1bml0X3NpemUuXG4yODc4Olx0XHQgKi9cbjI4Nzk6XHRcdGxhc3RfYWxsb2NzID0gSU5UX01BWDtcbjI4ODA6XHRcdGJlc3RfdXBhID0gMDtcbjI4ODE6XHRcdGZvciAodXBhID0gbWF4X3VwYTsgdXBhOyB1cGEtLSkge1xuMjg4MjpcdFx0XHRpbnQgYWxsb2NzID0gMCwgd2FzdGVkID0gMDtcbjI4ODM6XHRcbjI4ODQ6XHRcdFx0aWYgKGFsbG9jX3NpemUgJSB1cGEgfHwgKG9mZnNldF9pbl9wYWdlKGFsbG9jX3NpemUgLyB1cGEpKSlcbjI4ODU6XHRcdFx0XHRjb250aW51ZTtcbjI4ODY6XHRcbjI4ODc6XHRcdFx0Zm9yIChncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBucl9ncm91cHM7IGdyb3VwJiM0MzsmIzQzOykge1xuMjg4ODpcdFx0XHRcdGludCB0aGlzX2FsbG9jcyA9IERJVl9ST1VORF9VUChncm91cF9jbnRbZ3JvdXBdLCB1cGEpO1xuMjg4OTpcdFx0XHRcdGFsbG9jcyAmIzQzOz0gdGhpc19hbGxvY3M7XG4yODkwOlx0XHRcdFx0d2FzdGVkICYjNDM7PSB0aGlzX2FsbG9jcyAqIHVwYSAtIGdyb3VwX2NudFtncm91cF07XG4yODkxOlx0XHRcdH1cbjI4OTI6XHRcbjI4OTM6XHRcdFx0LypcbjI4OTQ6XHRcdFx0ICogRG9uJiMzOTt0IGFjY2VwdCBpZiB3YXN0YWdlIGlzIG92ZXIgMS8zLiAgVGhlXG4yODk1Olx0XHRcdCAqIGdyZWF0ZXItdGhhbiBjb21wYXJpc29uIGVuc3VyZXMgdXBhPT0xIGFsd2F5c1xuMjg5NjpcdFx0XHQgKiBwYXNzZXMgdGhlIGZvbGxvd2luZyBjaGVjay5cbjI4OTc6XHRcdFx0ICovXG4yODk4Olx0XHRcdGlmICh3YXN0ZWQgXHUwMDNlIG51bV9wb3NzaWJsZV9jcHVzKCkgLyAzKVxuMjg5OTpcdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjgxCgkJCQkJCQlvdXRwdXQ6IDk1CgkJCQkJCQl0aG91Z2h0czogODIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gZXhhbWluaW5nIGEgcGF0Y2ggdGhhdCBzZWVtcyBmb2N1c2VkIG9uIGNvZGUgY2xlYW51cCB3aXRoaW4gdGhlIHBlci1DUFUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSAoYG1tL3BlcmNwdS5jYCkuIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGUgY2hhbmdlcyBjYXJlZnVsbHkuIEl0IGFwcGVhcnMgdGhhdCB0aGVyZSBhcmUgYSBmZXcga2V5IGFkanVzdG1lbnRzOiByZW1vdmluZyB1bnVzZWQgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBlbGltaW5hdGluZyByZWR1bmRhbnQgZnVuY3Rpb24gY2FsbHMsIGFuZCBnZXR0aW5nIHJpZCBvZiBhIGRlYWQgYHJldHVybmAgc3RhdGVtZW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIHRoYXQgYG5yX2dyb3Vwc2Agd2FzIGluaXRpYWxpemVkIHRvIGAxYCwgYnV0IG92ZXJ3cml0dGVuIGJlZm9yZSBiZWluZyB1c2VkLCBhbmQgc2ltaWxhcmx5LCBgY3B1bWFza19jbGVhcigmYW1wO21hc2spYCB3YXMgZm9sbG93ZWQgYnkgYSBjb21wbGV0ZSBvdmVyd3JpdGUsIGFuZCB0aGVyZSYjMzk7cyBhIHN1cGVyZmx1b3VzIGByZXR1cm5gIGF0IHRoZSBlbmQgb2YgYSBgdm9pZGAgZnVuY3Rpb24uIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGlzIHdpdGggdGhlIHJlbGV2YW50IGxpbmVzIGluIGBwY3B1X2J1aWxkX2FsbG9jX2luZm8oKWAgYW5kIGBwY3B1X3BvcHVsYXRlX3B0ZWAuCgpUaGUgY2hhbmdlcyBhcmU6CgoxLiAgUmVtb3ZpbmcgdGhlIHVubmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIG9mIGBiaXRzID0gMDtgIGJlZm9yZSBtYWNyb3MgdGhhdCByZXNldCB0aGUgdmFsdWUgaW50ZXJuYWxseS4KMi4gIFJlbW92aW5nIHRoZSB1c2VsZXNzIGBucl9ncm91cHMgPSAxYCBpbml0aWFsaXphdGlvbiBhbmQgYGNwdW1hc2tfY2xlYXIoJmFtcDttYXNrKTtgLgozLiAgUmVtb3ZpbmcgdGhlIHJlZHVuZGFudCBgcmV0dXJuO2AgYXQgdGhlIGVuZCBvZiBgcGNwdV9wb3B1bGF0ZV9wdGVgLgoKTXkgZXZhbHVhdGlvbiBoaW5nZXMgb24gd2hldGhlciB0aGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgcHJvZ3JhbSYjMzk7cyBiZWhhdmlvci4gQmFzZWQgb24gbXkgcmV2aWV3IG9mIHRoZSBjb2RlIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwZXItQ1BVIG1lbW9yeSBzdWJzeXN0ZW0sIHRoZXNlIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgY2hhbmdlcy4gVGhleSBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIG9yIG1vZGlmeSB0aGUgZXhlY3V0aW9uIHBhdGggaW4gYW55IG1lYW5pbmdmdWwgd2F5LiBNeSB0ZXN0cyBvZiB0aGUgYGJpdHMgPSAwYCwgYG5yX2dyb3Vwc2AsIGBjcHVtYXNrX2NsZWFyKCZhbXA7bWFzaylgLCBhbmQgYHJldHVybjtgIGFsbCBhbGlnbiB3aXRoIHRoaXMgYXNzZXNzbWVudC4KCkNvbnNpZGVyaW5nIHRoZSBndWlkZWxpbmVzLCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhpcyBwYXRjaCBjb250YWlucyBjaGFuZ2VzIHRvIGNvZGUgdGhhdCBjb3VsZCBiZSBleGVjdXRlZC4gSSBoYXZlIGNvbWUgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCB0aGlzIHBhdGNoIGRvZXMgbm90IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvciBzZW1hbnRpY3Mgb2YgdGhlIGNvZGUuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCBjb250YWlucyBwdXJlbHkgY29zbWV0aWMgY2hhbmdlcyBhbmQgbm8gZnVuY3Rpb25hbCBpbXBhY3QsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBJJiMzOTttIGdvaW5nIHRvIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbDoKCiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWAKKiAgIGBGb2N1c1N5bWJvbHM6IFtdYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFtdYAoqICAgYFJlYXNvbmluZzogVGhpcyBwYXRjaCBjb250YWlucyBwdXJlbHkgY29kZSBjbGVhbnVwIGNoYW5nZXMgd2l0aGluIG1tL3BlcmNwdS5jLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdGhlIHJlbW92YWwgb2YgZGVhZCBjb2RlICh1bm5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbnMsIGEgcmVkdW5kYW50IHJldHVybiBzdGF0ZW1lbnQpIGFuZCBoYXZlIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdyBvciBzZW1hbnRpY3Mgb2YgdGhlIGNvZGUuYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIHB1cmVseSBvZiBjb2RlIGNsZWFudXBzIGluIG1tL3BlcmNwdS5jLCByZW1vdmluZyByZWR1bmRhbnQgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBhbiB1bm5lY2Vzc2FyeSBjcHVtYXNrX2NsZWFyKCkgcHJpb3IgdG8gY3B1bWFza19jb3B5KCksIGFuZCBhbiBlbXB0eSByZXR1cm4gc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgYSB2b2lkIGZ1bmN0aW9uLiBUaGVzZSBjaGFuZ2VzIGhhdmUgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24ga2VybmVsIGV4ZWN1dGlvbiBmbG93IG9yIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgcHVyZWx5IG9mIGNvZGUgY2xlYW51cHMgaW4gbW0vcGVyY3B1LmMsIHJlbW92aW5nIHJlZHVuZGFudCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIGFuIHVubmVjZXNzYXJ5IGNwdW1hc2tfY2xlYXIoKSBwcmlvciB0byBjcHVtYXNrX2NvcHkoKSwgYW5kIGFuIGVtcHR5IHJldHVybiBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiBhIHZvaWQgZnVuY3Rpb24uIFRoZXNlIGNoYW5nZXMgaGF2ZSBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3IgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MDk6NTkuMTQ4ODczNDUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg4MjA5MDc4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBwdXJlbHkgb2YgY29kZSBjbGVhbnVwcyBpbiBtbS9wZXJjcHUuYywgcmVtb3ZpbmcgcmVkdW5kYW50IHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgYW4gdW5uZWNlc3NhcnkgY3B1bWFza19jbGVhcigpIHByaW9yIHRvIGNwdW1hc2tfY29weSgpLCBhbmQgYW4gZW1wdHkgcmV0dXJuIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIGEgdm9pZCBmdW5jdGlvbi4gVGhlc2UgY2hhbmdlcyBoYXZlIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIGtlcm5lbCBleGVjdXRpb24gZmxvdyBvciBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjA5OjU5LjE0ODg3ODEzMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgyNzAwMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzJmMDU0NjViYTRlMjNjMGY4OTM5ZmM1ZjRmMTQwNDU5YWUyNGFiOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjA5OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3BlcmNwdS5jIGIvbW0vcGVyY3B1LmNcXG5pbmRleCBhODAyZDcyYzExNmZiLi45ZGY2Y2RmNjM2ZmQ2IDEwMDY0NFxcbi0tLSBhL21tL3BlcmNwdS5jXFxuKysrIGIvbW0vcGVyY3B1LmNcXG5AQCAtNzU4LDcgKzc1OCw2IEBAIHN0YXRpYyB2b2lkIHBjcHVfY2h1bmtfcmVmcmVzaF9oaW50KHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgYm9vbCBmdWxsX3NjYW4pXFxuIFxcdFxcdGNodW5rX21kLVxcdTAwM2Vjb250aWdfaGludCA9IDA7XFxuIFxcdH1cXG4gXFxuLVxcdGJpdHMgPSAwO1xcbiBcXHRwY3B1X2Zvcl9lYWNoX21kX2ZyZWVfcmVnaW9uKGNodW5rLCBiaXRfb2ZmLCBiaXRzKVxcbiBcXHRcXHRwY3B1X2Jsb2NrX3VwZGF0ZShjaHVua19tZCwgYml0X29mZiwgYml0X29mZiArIGJpdHMpO1xcbiB9XFxuQEAgLTExMjIsNyArMTEyMSw2IEBAIHN0YXRpYyBpbnQgcGNwdV9maW5kX2Jsb2NrX2ZpdChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBhbGxvY19iaXRzLFxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRiaXRfb2ZmID0gcGNwdV9uZXh0X2hpbnQoY2h1bmtfbWQsIGFsbG9jX2JpdHMpO1xcbi1cXHRiaXRzID0gMDtcXG4gXFx0cGNwdV9mb3JfZWFjaF9maXRfcmVnaW9uKGNodW5rLCBhbGxvY19iaXRzLCBhbGlnbiwgYml0X29mZiwgYml0cykge1xcbiBcXHRcXHRpZiAoIXBvcF9vbmx5IHx8IHBjcHVfaXNfcG9wdWxhdGVkKGNodW5rLCBiaXRfb2ZmLCBiaXRzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmV4dF9vZmYpKVxcbkBAIC0yODE5LDcgKzI4MTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBfX2ZsYXR0ZW4gcGNwdV9idWlsZF9hbGxvY19pbmZvKFxcbiBcXHRzdGF0aWMgaW50IGdyb3VwX2NudFtOUl9DUFVTXSBfX2luaXRkYXRhO1xcbiBcXHRzdGF0aWMgc3RydWN0IGNwdW1hc2sgbWFzayBfX2luaXRkYXRhO1xcbiBcXHRjb25zdCBzaXplX3Qgc3RhdGljX3NpemUgPSBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0O1xcbi1cXHRpbnQgbnJfZ3JvdXBzID0gMSwgbnJfdW5pdHMgPSAwO1xcbitcXHRpbnQgbnJfZ3JvdXBzLCBucl91bml0cyA9IDA7XFxuIFxcdHNpemVfdCBzaXplX3N1bSwgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZTtcXG4gXFx0aW50IHVwYSwgbWF4X3VwYSwgYmVzdF91cGE7XFx0LyogdW5pdHNfcGVyX2FsbG9jICovXFxuIFxcdGludCBsYXN0X2FsbG9jcywgZ3JvdXAsIHVuaXQ7XFxuQEAgLTI4MzAsNyArMjgyOCw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICogX19pbml0IF9fZmxhdHRlbiBwY3B1X2J1aWxkX2FsbG9jX2luZm8oXFxuIFxcdC8qIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyAqL1xcbiBcXHRtZW1zZXQoZ3JvdXBfbWFwLCAwLCBzaXplb2YoZ3JvdXBfbWFwKSk7XFxuIFxcdG1lbXNldChncm91cF9jbnQsIDAsIHNpemVvZihncm91cF9jbnQpKTtcXG4tXFx0Y3B1bWFza19jbGVhcihcXHUwMDI2bWFzayk7XFxuIFxcbiBcXHQvKiBjYWxjdWxhdGUgc2l6ZV9zdW0gYW5kIGVuc3VyZSBkeW5fc2l6ZSBpcyBlbm91Z2ggZm9yIGVhcmx5IGFsbG9jICovXFxuIFxcdHNpemVfc3VtID0gUEZOX0FMSUdOKHN0YXRpY19zaXplICsgcmVzZXJ2ZWRfc2l6ZSArXFxuQEAgLTMxODEsOCArMzE3OCw2IEBAIHZvaWQgX19pbml0IF9fd2VhayBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpXFxuIFxcdFxcdG5ldyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBURV9UQUJMRV9TSVpFLCBQVEVfVEFCTEVfU0laRSk7XFxuIFxcdFxcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0sIHBtZCwgbmV3KTtcXG4gXFx0fVxcbi1cXG4tXFx0cmV0dXJuO1xcbiB9XFxuIFxcbiAvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MDk6NTkuNTMyMzc3NjQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4ODQzNzM4ODUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgcHVyZWx5IG9mIGNvZGUgY2xlYW51cHMgaW4gbW0vcGVyY3B1LmMsIHJlbW92aW5nIHJlZHVuZGFudCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIGFuIHVubmVjZXNzYXJ5IGNwdW1hc2tfY2xlYXIoKSBwcmlvciB0byBjcHVtYXNrX2NvcHkoKSwgYW5kIGFuIGVtcHR5IHJldHVybiBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiBhIHZvaWQgZnVuY3Rpb24uIFRoZXNlIGNoYW5nZXMgaGF2ZSBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3IgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MmYwNTQ2NWJhNGUyM2MwZjg5MzlmYzVmNGYxNDA0NTlhZTI0YWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwNzowOTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BlcmNwdS5jIGIvbW0vcGVyY3B1LmNcbmluZGV4IGE4MDJkNzJjMTE2ZmIuLjlkZjZjZGY2MzZmZDYgMTAwNjQ0XG4tLS0gYS9tbS9wZXJjcHUuY1xuKysrIGIvbW0vcGVyY3B1LmNcbkBAIC03NTgsNyArNzU4LDYgQEAgc3RhdGljIHZvaWQgcGNwdV9jaHVua19yZWZyZXNoX2hpbnQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBib29sIGZ1bGxfc2NhbilcbiBcdFx0Y2h1bmtfbWQtXHUwMDNlY29udGlnX2hpbnQgPSAwO1xuIFx0fVxuIFxuLVx0Yml0cyA9IDA7XG4gXHRwY3B1X2Zvcl9lYWNoX21kX2ZyZWVfcmVnaW9uKGNodW5rLCBiaXRfb2ZmLCBiaXRzKVxuIFx0XHRwY3B1X2Jsb2NrX3VwZGF0ZShjaHVua19tZCwgYml0X29mZiwgYml0X29mZiArIGJpdHMpO1xuIH1cbkBAIC0xMTIyLDcgKzExMjEsNiBAQCBzdGF0aWMgaW50IHBjcHVfZmluZF9ibG9ja19maXQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgYWxsb2NfYml0cyxcbiBcdFx0cmV0dXJuIC0xO1xuIFxuIFx0Yml0X29mZiA9IHBjcHVfbmV4dF9oaW50KGNodW5rX21kLCBhbGxvY19iaXRzKTtcbi1cdGJpdHMgPSAwO1xuIFx0cGNwdV9mb3JfZWFjaF9maXRfcmVnaW9uKGNodW5rLCBhbGxvY19iaXRzLCBhbGlnbiwgYml0X29mZiwgYml0cykge1xuIFx0XHRpZiAoIXBvcF9vbmx5IHx8IHBjcHVfaXNfcG9wdWxhdGVkKGNodW5rLCBiaXRfb2ZmLCBiaXRzLFxuIFx0XHRcdFx0XHRcdCAgIFx1MDAyNm5leHRfb2ZmKSlcbkBAIC0yODE5LDcgKzI4MTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBfX2ZsYXR0ZW4gcGNwdV9idWlsZF9hbGxvY19pbmZvKFxuIFx0c3RhdGljIGludCBncm91cF9jbnRbTlJfQ1BVU10gX19pbml0ZGF0YTtcbiBcdHN0YXRpYyBzdHJ1Y3QgY3B1bWFzayBtYXNrIF9faW5pdGRhdGE7XG4gXHRjb25zdCBzaXplX3Qgc3RhdGljX3NpemUgPSBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0O1xuLVx0aW50IG5yX2dyb3VwcyA9IDEsIG5yX3VuaXRzID0gMDtcbitcdGludCBucl9ncm91cHMsIG5yX3VuaXRzID0gMDtcbiBcdHNpemVfdCBzaXplX3N1bSwgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZTtcbiBcdGludCB1cGEsIG1heF91cGEsIGJlc3RfdXBhO1x0LyogdW5pdHNfcGVyX2FsbG9jICovXG4gXHRpbnQgbGFzdF9hbGxvY3MsIGdyb3VwLCB1bml0O1xuQEAgLTI4MzAsNyArMjgyOCw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICogX19pbml0IF9fZmxhdHRlbiBwY3B1X2J1aWxkX2FsbG9jX2luZm8oXG4gXHQvKiB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgKi9cbiBcdG1lbXNldChncm91cF9tYXAsIDAsIHNpemVvZihncm91cF9tYXApKTtcbiBcdG1lbXNldChncm91cF9jbnQsIDAsIHNpemVvZihncm91cF9jbnQpKTtcbi1cdGNwdW1hc2tfY2xlYXIoXHUwMDI2bWFzayk7XG4gXG4gXHQvKiBjYWxjdWxhdGUgc2l6ZV9zdW0gYW5kIGVuc3VyZSBkeW5fc2l6ZSBpcyBlbm91Z2ggZm9yIGVhcmx5IGFsbG9jICovXG4gXHRzaXplX3N1bSA9IFBGTl9BTElHTihzdGF0aWNfc2l6ZSArIHJlc2VydmVkX3NpemUgK1xuQEAgLTMxODEsOCArMzE3OCw2IEBAIHZvaWQgX19pbml0IF9fd2VhayBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHRcdG5ldyA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBURV9UQUJMRV9TSVpFLCBQVEVfVEFCTEVfU0laRSk7XG4gXHRcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcG1kLCBuZXcpO1xuIFx0fVxuLVxuLVx0cmV0dXJuO1xuIH1cbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjA5OjU5LjUzMjM3OTI3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NDAyOTIzNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBzdGFydCBieSBjYXJlZnVsbHkgaW5zcGVjdGluZyB0aGUgZGlmZi4gSSB3YW50IHRvIHNlZSB0aGUgZXhhY3QgbGluZXMgbW9kaWZpZWQgYW5kLCBjcnVjaWFsbHksIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBcImJlZm9yZVwiIGFuZCBcImFmdGVyXCIgaXMgdGhlIGtleSB0byBncmFzcGluZyB0aGUgaW50ZW50IGFuZCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiB0aGUgY3VycmVudCBjb2RlYmFzZSBzbyBhbnkgY2hhbmdlcyB3aWxsIGJlIG5vdGljZWQuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCdzIHN0cnVjdHVyZS4gSSdtIGdvaW5nIHRvIHVzZSBhIHRvb2wgbGlrZSBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIGBtbS9wZXJjcHUuY2AuIFRoYXQgZmlsZSBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwZXItQ1BVIG1lbW9yeSBtYW5hZ2VtZW50IHB1enpsZS4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGVzZSBjaGFuZ2VzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gc29tZSBvcHRpbWl6YXRpb24gb3IgZml4IGluIHRoYXQgYXJlYS4gR3JhYmJpbmcgdGhlIGNvZGUgZGlyZWN0bHkgd2lsbCBsZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdCBoeXBvdGhlc2lzIGFuZCB1bmRlcnN0YW5kIHRoZSBsb3cgbGV2ZWwgZWZmZWN0cyBvZiB0aGVzZSBjaGFuZ2VzLiBJJ20gZ29pbmcgdG8gcmVhZCBhcm91bmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gZW5zdXJlIEknbSBnZXR0aW5nIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjaGFuZ2UgZml0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxOSwiT3V0cHV0VG9rZW5zIjoxMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjEwOjE1LjkzNTMwNTMzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wZXJjcHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTA6XFx0XFx0LyogcHJvbW90ZSBzY2FuX2hpbnQgdG8gY29udGlnX2hpbnQgKi9cXG4gNzUxOlxcdFxcdGlmICghZnVsbF9zY2FuIFxcdTAwMjZcXHUwMDI2IGNodW5rX21kLVxcdTAwM2VzY2FuX2hpbnQpIHtcXG4gNzUyOlxcdFxcdFxcdGJpdF9vZmYgPSBjaHVua19tZC1cXHUwMDNlc2Nhbl9oaW50X3N0YXJ0ICsgY2h1bmtfbWQtXFx1MDAzZXNjYW5faGludDtcXG4gNzUzOlxcdFxcdFxcdGNodW5rX21kLVxcdTAwM2Vjb250aWdfaGludF9zdGFydCA9IGNodW5rX21kLVxcdTAwM2VzY2FuX2hpbnRfc3RhcnQ7XFxuIDc1NDpcXHRcXHRcXHRjaHVua19tZC1cXHUwMDNlY29udGlnX2hpbnQgPSBjaHVua19tZC1cXHUwMDNlc2Nhbl9oaW50O1xcbiA3NTU6XFx0XFx0XFx0Y2h1bmtfbWQtXFx1MDAzZXNjYW5faGludCA9IDA7XFxuIDc1NjpcXHRcXHR9IGVsc2Uge1xcbiA3NTc6XFx0XFx0XFx0Yml0X29mZiA9IGNodW5rX21kLVxcdTAwM2VmaXJzdF9mcmVlO1xcbiA3NTg6XFx0XFx0XFx0Y2h1bmtfbWQtXFx1MDAzZWNvbnRpZ19oaW50ID0gMDtcXG4gNzU5OlxcdFxcdH1cXG4gNzYwOlxcdFxcbiA3NjE6XFx0XFx0cGNwdV9mb3JfZWFjaF9tZF9mcmVlX3JlZ2lvbihjaHVuaywgYml0X29mZiwgYml0cylcXG4gNzYyOlxcdFxcdFxcdHBjcHVfYmxvY2tfdXBkYXRlKGNodW5rX21kLCBiaXRfb2ZmLCBiaXRfb2ZmICsgYml0cyk7XFxuIDc2MzpcXHR9XFxuIDc2NDpcXHRcXG4gNzY1OlxcdC8qKlxcbiA3NjY6XFx0ICogcGNwdV9ibG9ja19yZWZyZXNoX2hpbnRcXG4gNzY3OlxcdCAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3RcXG4gNzY4OlxcdCAqIEBpbmRleDogaW5kZXggb2YgdGhlIG1ldGFkYXRhIGJsb2NrXFxuIDc2OTpcXHQgKlxcbiA3NzA6XFx0ICogU2NhbnMgb3ZlciB0aGUgYmxvY2sgYmVnaW5uaW5nIGF0IGZpcnN0X2ZyZWUgYW5kIHVwZGF0ZXMgdGhlIGJsb2NrXFxuIDc3MTpcXHQgKiBtZXRhZGF0YSBhY2NvcmRpbmdseS5cXG4gNzcyOlxcdCAqL1xcbiA3NzM6XFx0c3RhdGljIHZvaWQgcGNwdV9ibG9ja19yZWZyZXNoX2hpbnQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgaW5kZXgpXFxuIDc3NDpcXHR7XFxuIDc3NTpcXHRcXHRzdHJ1Y3QgcGNwdV9ibG9ja19tZCAqYmxvY2sgPSBjaHVuay1cXHUwMDNlbWRfYmxvY2tzICsgaW5kZXg7XFxuIDc3NjpcXHRcXHR1bnNpZ25lZCBsb25nICphbGxvY19tYXAgPSBwY3B1X2luZGV4X2FsbG9jX21hcChjaHVuaywgaW5kZXgpO1xcbiA3Nzc6XFx0XFx0dW5zaWduZWQgaW50IHN0YXJ0LCBlbmQ7XFx0LyogcmVnaW9uIHN0YXJ0LCByZWdpb24gZW5kICovXFxuIDc3ODpcXHRcXG4gNzc5OlxcdFxcdC8qIHByb21vdGUgc2Nhbl9oaW50IHRvIGNvbnRpZ19oaW50ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjEwOjE1LjkzNTU0ODQ3MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wZXJjcHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTE1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTE1OlxcdFxcdC8qXFxuMTExNjpcXHRcXHQgKiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB0byBwcmV2ZW50IHNjYW5uaW5nIGJ5IGFzc3VtaW5nIGlmIHRoZVxcbjExMTc6XFx0XFx0ICogYWxsb2NhdGlvbiBjYW5ub3QgZml0IGluIHRoZSBnbG9iYWwgaGludCwgdGhlcmUgaXMgbWVtb3J5IHByZXNzdXJlXFxuMTExODpcXHRcXHQgKiBhbmQgY3JlYXRpbmcgYSBuZXcgY2h1bmsgd291bGQgaGFwcGVuIHNvb24uXFxuMTExOTpcXHRcXHQgKi9cXG4xMTIwOlxcdFxcdGlmICghcGNwdV9jaGVja19ibG9ja19oaW50KGNodW5rX21kLCBhbGxvY19iaXRzLCBhbGlnbikpXFxuMTEyMTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdGJpdF9vZmYgPSBwY3B1X25leHRfaGludChjaHVua19tZCwgYWxsb2NfYml0cyk7XFxuMTEyNDpcXHRcXHRwY3B1X2Zvcl9lYWNoX2ZpdF9yZWdpb24oY2h1bmssIGFsbG9jX2JpdHMsIGFsaWduLCBiaXRfb2ZmLCBiaXRzKSB7XFxuMTEyNTpcXHRcXHRcXHRpZiAoIXBvcF9vbmx5IHx8IHBjcHVfaXNfcG9wdWxhdGVkKGNodW5rLCBiaXRfb2ZmLCBiaXRzLFxcbjExMjY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm5leHRfb2ZmKSlcXG4xMTI3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjExMjg6XFx0XFxuMTEyOTpcXHRcXHRcXHRiaXRfb2ZmID0gbmV4dF9vZmY7XFxuMTEzMDpcXHRcXHRcXHRiaXRzID0gMDtcXG4xMTMxOlxcdFxcdH1cXG4xMTMyOlxcdFxcbjExMzM6XFx0XFx0aWYgKGJpdF9vZmYgPT0gcGNwdV9jaHVua19tYXBfYml0cyhjaHVuaykpXFxuMTEzNDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTEzNTpcXHRcXG4xMTM2OlxcdFxcdHJldHVybiBiaXRfb2ZmO1xcbjExMzc6XFx0fVxcbjExMzg6XFx0XFxuMTEzOTpcXHQvKlxcbjExNDA6XFx0ICogcGNwdV9maW5kX3plcm9fYXJlYSAtIG1vZGlmaWVkIGZyb20gYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWFfb2ZmKClcXG4xMTQxOlxcdCAqIEBtYXA6IHRoZSBhZGRyZXNzIHRvIGJhc2UgdGhlIHNlYXJjaCBvblxcbjExNDI6XFx0ICogQHNpemU6IHRoZSBiaXRtYXAgc2l6ZSBpbiBiaXRzXFxuMTE0MzpcXHQgKiBAc3RhcnQ6IHRoZSBiaXRudW1iZXIgdG8gc3RhcnQgc2VhcmNoaW5nIGF0XFxuMTE0NDpcXHQgKiBAbnI6IHRoZSBudW1iZXIgb2YgemVyb2VkIGJpdHMgd2UncmUgbG9va2luZyBmb3JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MTA6MTUuOTM1NzU2OTYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BlcmNwdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MTU6XFx0e1xcbjI4MTY6XFx0XFx0c3RhdGljIGludCBncm91cF9tYXBbTlJfQ1BVU10gX19pbml0ZGF0YTtcXG4yODE3OlxcdFxcdHN0YXRpYyBpbnQgZ3JvdXBfY250W05SX0NQVVNdIF9faW5pdGRhdGE7XFxuMjgxODpcXHRcXHRzdGF0aWMgc3RydWN0IGNwdW1hc2sgbWFzayBfX2luaXRkYXRhO1xcbjI4MTk6XFx0XFx0Y29uc3Qgc2l6ZV90IHN0YXRpY19zaXplID0gX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydDtcXG4yODIwOlxcdFxcdGludCBucl9ncm91cHMsIG5yX3VuaXRzID0gMDtcXG4yODIxOlxcdFxcdHNpemVfdCBzaXplX3N1bSwgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZTtcXG4yODIyOlxcdFxcdGludCB1cGEsIG1heF91cGEsIGJlc3RfdXBhO1xcdC8qIHVuaXRzX3Blcl9hbGxvYyAqL1xcbjI4MjM6XFx0XFx0aW50IGxhc3RfYWxsb2NzLCBncm91cCwgdW5pdDtcXG4yODI0OlxcdFxcdHVuc2lnbmVkIGludCBjcHUsIHRjcHU7XFxuMjgyNTpcXHRcXHRzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaTtcXG4yODI2OlxcdFxcdHVuc2lnbmVkIGludCAqY3B1X21hcDtcXG4yODI3OlxcdFxcbjI4Mjg6XFx0XFx0LyogdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzICovXFxuMjgyOTpcXHRcXHRtZW1zZXQoZ3JvdXBfbWFwLCAwLCBzaXplb2YoZ3JvdXBfbWFwKSk7XFxuMjgzMDpcXHRcXHRtZW1zZXQoZ3JvdXBfY250LCAwLCBzaXplb2YoZ3JvdXBfY250KSk7XFxuMjgzMTpcXHRcXG4yODMyOlxcdFxcdC8qIGNhbGN1bGF0ZSBzaXplX3N1bSBhbmQgZW5zdXJlIGR5bl9zaXplIGlzIGVub3VnaCBmb3IgZWFybHkgYWxsb2MgKi9cXG4yODMzOlxcdFxcdHNpemVfc3VtID0gUEZOX0FMSUdOKHN0YXRpY19zaXplICsgcmVzZXJ2ZWRfc2l6ZSArXFxuMjgzNDpcXHRcXHRcXHRcXHQgICAgbWF4X3Qoc2l6ZV90LCBkeW5fc2l6ZSwgUEVSQ1BVX0RZTkFNSUNfRUFSTFlfU0laRSkpO1xcbjI4MzU6XFx0XFx0ZHluX3NpemUgPSBzaXplX3N1bSAtIHN0YXRpY19zaXplIC0gcmVzZXJ2ZWRfc2l6ZTtcXG4yODM2OlxcdFxcbjI4Mzc6XFx0XFx0LypcXG4yODM4OlxcdFxcdCAqIERldGVybWluZSBtaW5fdW5pdF9zaXplLCBhbGxvY19zaXplIGFuZCBtYXhfdXBhIHN1Y2ggdGhhdFxcbjI4Mzk6XFx0XFx0ICogYWxsb2Nfc2l6ZSBpcyBtdWx0aXBsZSBvZiBhdG9tX3NpemUgYW5kIGlzIHRoZSBzbWFsbGVzdFxcbjI4NDA6XFx0XFx0ICogd2hpY2ggY2FuIGFjY29tbW9kYXRlIDRrIGFsaWduZWQgc2VnbWVudHMgd2hpY2ggYXJlIGVxdWFsIHRvXFxuMjg0MTpcXHRcXHQgKiBvciBsYXJnZXIgdGhhbiBtaW5fdW5pdF9zaXplLlxcbjI4NDI6XFx0XFx0ICovXFxuMjg0MzpcXHRcXHRtaW5fdW5pdF9zaXplID0gbWF4X3Qoc2l6ZV90LCBzaXplX3N1bSwgUENQVV9NSU5fVU5JVF9TSVpFKTtcXG4yODQ0OlxcdFxcbjI4NDU6XFx0XFx0LyogZGV0ZXJtaW5lIHRoZSBtYXhpbXVtICMgb2YgdW5pdHMgdGhhdCBjYW4gZml0IGluIGFuIGFsbG9jYXRpb24gKi9cXG4yODQ2OlxcdFxcdGFsbG9jX3NpemUgPSByb3VuZHVwKG1pbl91bml0X3NpemUsIGF0b21fc2l6ZSk7XFxuMjg0NzpcXHRcXHR1cGEgPSBhbGxvY19zaXplIC8gbWluX3VuaXRfc2l6ZTtcXG4yODQ4OlxcdFxcdHdoaWxlIChhbGxvY19zaXplICUgdXBhIHx8IChvZmZzZXRfaW5fcGFnZShhbGxvY19zaXplIC8gdXBhKSkpXFxuMjg0OTpcXHRcXHRcXHR1cGEtLTtcXG4yODUwOlxcdFxcdG1heF91cGEgPSB1cGE7XFxuMjg1MTpcXHRcXG4yODUyOlxcdFxcdGNwdW1hc2tfY29weShcXHUwMDI2bWFzaywgY3B1X3Bvc3NpYmxlX21hc2spO1xcbjI4NTM6XFx0XFxuMjg1NDpcXHRcXHQvKiBncm91cCBjcHVzIGFjY29yZGluZyB0byB0aGVpciBwcm94aW1pdHkgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MTA6MTUuOTM1OTI2OTExWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4NDU1Mjc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMsIHNwZWFraW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gUmVnaW9uIEl0ZXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGNvcmUgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYHBjcHVfZm9yX2VhY2hfbWRfZnJlZV9yZWdpb25gIGFuZCBgcGNwdV9mb3JfZWFjaF9maXRfcmVnaW9uYC4gSSdsbCBzdGFydCBieSBjcmFja2luZyBvcGVuIHRoZWlyIGRlZmluaXRpb25zIOKAkyBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRoZSBuYW1lcyB0aGVtc2VsdmVzIGFyZSBzdWdnZXN0aXZlLCBidXQgSSBjYW4ndCByZWx5IG9uIGFzc3VtcHRpb25zLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHRoaXMgZnVuZGFtZW50YWwgdG8gdGhlIGFyY2hpdGVjdHVyZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgcGVyLUNQVSBtYW5hZ2VtZW50LCBhbmQgaG93IHRoZXNlIGl0ZXJhdGlvbiBtZXRob2RzIGltcGFjdCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gc3RyYXRlZ2llcyB3aXRoaW4gdGhvc2UgcGVyLUNQVSByZWdpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBtZWNoYW5pY3MuIElzIGl0IGp1c3QgYWJvdXQgaXRlcmF0aW5nIHRocm91Z2ggZnJlZSBibG9ja3MsIG9yIGlzIHRoZXJlIG1vcmUgaW52b2x2ZWQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggbWV0YWRhdGEgc3RydWN0dXJlcywgbGlua2VkIGxpc3RzLCBiaXRtYXAgcmVwcmVzZW50YXRpb25zLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBnZXQgZ3JhbnVsYXIgYW5kIGxvb2sgYXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHRob3NlIGZ1bmN0aW9uIGRlZmluaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoxMDoxOS4wMjA0ODE3ODFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNzc4NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBwY3B1X2Zvcl9lYWNoX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wZXJjcHUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wZXJjcHUuYz00MjA9c3RhdGljIHZvaWQgcGNwdV9uZXh0X2ZpdF9yZWdpb24oc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgYWxsb2NfYml0cyxcXG4tLVxcbm1tL3BlcmNwdS5jLTQ3Ni0gKi9cXG5tbS9wZXJjcHUuYzo0Nzc6I2RlZmluZSBwY3B1X2Zvcl9lYWNoX21kX2ZyZWVfcmVnaW9uKGNodW5rLCBiaXRfb2ZmLCBiaXRzKVxcdFxcdFxcXFxcXG5tbS9wZXJjcHUuYy00NzgtXFx0Zm9yIChwY3B1X25leHRfbWRfZnJlZV9yZWdpb24oKGNodW5rKSwgXFx1MDAyNihiaXRfb2ZmKSwgXFx1MDAyNihiaXRzKSk7XFx0XFxcXFxcbi0tXFxubW0vcGVyY3B1LmMtNDgyLVxcbm1tL3BlcmNwdS5jOjQ4MzojZGVmaW5lIHBjcHVfZm9yX2VhY2hfZml0X3JlZ2lvbihjaHVuaywgYWxsb2NfYml0cywgYWxpZ24sIGJpdF9vZmYsIGJpdHMpICAgICBcXFxcXFxubW0vcGVyY3B1LmMtNDg0LVxcdGZvciAocGNwdV9uZXh0X2ZpdF9yZWdpb24oKGNodW5rKSwgKGFsbG9jX2JpdHMpLCAoYWxpZ24pLCBcXHUwMDI2KGJpdF9vZmYpLCBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjEwOjE5LjEyMTI2NzUzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0NjI5MTU1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vcGVyY3B1LmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgcGVyLUNQVSB2YXJpYWJsZXMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gVGhlIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGFjY2Vzcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG1tL3BlcmNwdS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA0MjAtNDkwLiBUaGF0IGFyZWEgc2hvdWxkIGNvbnRhaW4gdGhlIGtleSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRoZSBwZXItY3B1IHN5c3RlbSwgaWYgbXkgbWVtb3J5IHNlcnZlcyBtZSByaWdodCwgSSBiZWxpZXZlIHRoaXMgaXMgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBmdW5jdGlvbnMgZm9yIGluaXRpYWxpemluZyBhbmQgYWNjZXNzaW5nIHBlci1jcHUgbWVtb3J5IGFyZSBkZWZpbmVkLiBJIGFudGljaXBhdGUgc2VlaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGltcG9ydGFudCBtYWNybyBkZWZpbml0aW9ucy4gSSBzaG91bGQgZm9jdXMgb24gdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB3aXRoaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLCBhcyB0aGUgYWxsb2NhdGlvbiBhbmQgYWNjZXNzIG1ldGhvZHMgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb25jdXJyZW5jeS4gS25vd2luZyB0aGUgZmluZXIgcG9pbnRzIGhlcmUgd2lsbCBhbGxvdyBtZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIG1lbW9yeSBzdWJzeXN0ZW0gbW9yZSBicm9hZGx5LiBBbHJpZ2h0LCBsZXQncyBnZXQgcmVhZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjEwOjI3LjU4NDE4NjUwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGVyY3B1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDIwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDIwOlxcdHN0YXRpYyB2b2lkIHBjcHVfbmV4dF9maXRfcmVnaW9uKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IGFsbG9jX2JpdHMsXFxuIDQyMTpcXHRcXHRcXHRcXHRcXHQgaW50IGFsaWduLCBpbnQgKmJpdF9vZmYsIGludCAqYml0cylcXG4gNDIyOlxcdHtcXG4gNDIzOlxcdFxcdGludCBpID0gcGNwdV9vZmZfdG9fYmxvY2tfaW5kZXgoKmJpdF9vZmYpO1xcbiA0MjQ6XFx0XFx0aW50IGJsb2NrX29mZiA9IHBjcHVfb2ZmX3RvX2Jsb2NrX29mZigqYml0X29mZik7XFxuIDQyNTpcXHRcXHRzdHJ1Y3QgcGNwdV9ibG9ja19tZCAqYmxvY2s7XFxuIDQyNjpcXHRcXG4gNDI3OlxcdFxcdCpiaXRzID0gMDtcXG4gNDI4OlxcdFxcdGZvciAoYmxvY2sgPSBjaHVuay1cXHUwMDNlbWRfYmxvY2tzICsgaTsgaSBcXHUwMDNjIHBjcHVfY2h1bmtfbnJfYmxvY2tzKGNodW5rKTtcXG4gNDI5OlxcdFxcdCAgICAgYmxvY2srKywgaSsrKSB7XFxuIDQzMDpcXHRcXHRcXHQvKiBoYW5kbGVzIGNvbnRpZyBhcmVhIGFjcm9zcyBibG9ja3MgKi9cXG4gNDMxOlxcdFxcdFxcdGlmICgqYml0cykge1xcbiA0MzI6XFx0XFx0XFx0XFx0KmJpdHMgKz0gYmxvY2stXFx1MDAzZWxlZnRfZnJlZTtcXG4gNDMzOlxcdFxcdFxcdFxcdGlmICgqYml0cyBcXHUwMDNlPSBhbGxvY19iaXRzKVxcbiA0MzQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA0MzU6XFx0XFx0XFx0XFx0aWYgKGJsb2NrLVxcdTAwM2VsZWZ0X2ZyZWUgPT0gUENQVV9CSVRNQVBfQkxPQ0tfQklUUylcXG4gNDM2OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA0Mzc6XFx0XFx0XFx0fVxcbiA0Mzg6XFx0XFxuIDQzOTpcXHRcXHRcXHQvKiBjaGVjayBibG9jay1cXHUwMDNlY29udGlnX2hpbnQgKi9cXG4gNDQwOlxcdFxcdFxcdCpiaXRzID0gQUxJR04oYmxvY2stXFx1MDAzZWNvbnRpZ19oaW50X3N0YXJ0LCBhbGlnbikgLVxcbiA0NDE6XFx0XFx0XFx0XFx0YmxvY2stXFx1MDAzZWNvbnRpZ19oaW50X3N0YXJ0O1xcbiA0NDI6XFx0XFx0XFx0LypcXG4gNDQzOlxcdFxcdFxcdCAqIFRoaXMgdXNlcyB0aGUgYmxvY2sgb2Zmc2V0IHRvIGRldGVybWluZSBpZiB0aGlzIGhhcyBiZWVuXFxuIDQ0NDpcXHRcXHRcXHQgKiBjaGVja2VkIGluIHRoZSBwcmlvciBpdGVyYXRpb24uXFxuIDQ0NTpcXHRcXHRcXHQgKi9cXG4gNDQ2OlxcdFxcdFxcdGlmIChibG9jay1cXHUwMDNlY29udGlnX2hpbnQgXFx1MDAyNlxcdTAwMjZcXG4gNDQ3OlxcdFxcdFxcdCAgICBibG9jay1cXHUwMDNlY29udGlnX2hpbnRfc3RhcnQgXFx1MDAzZT0gYmxvY2tfb2ZmIFxcdTAwMjZcXHUwMDI2XFxuIDQ0ODpcXHRcXHRcXHQgICAgYmxvY2stXFx1MDAzZWNvbnRpZ19oaW50IFxcdTAwM2U9ICpiaXRzICsgYWxsb2NfYml0cykge1xcbiA0NDk6XFx0XFx0XFx0XFx0aW50IHN0YXJ0ID0gcGNwdV9uZXh0X2hpbnQoYmxvY2ssIGFsbG9jX2JpdHMpO1xcbiA0NTA6XFx0XFxuIDQ1MTpcXHRcXHRcXHRcXHQqYml0cyArPSBhbGxvY19iaXRzICsgYmxvY2stXFx1MDAzZWNvbnRpZ19oaW50X3N0YXJ0IC1cXG4gNDUyOlxcdFxcdFxcdFxcdFxcdCBzdGFydDtcXG4gNDUzOlxcdFxcdFxcdFxcdCpiaXRfb2ZmID0gcGNwdV9ibG9ja19vZmZfdG9fb2ZmKGksIHN0YXJ0KTtcXG4gNDU0OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gNDU1OlxcdFxcdFxcdH1cXG4gNDU2OlxcdFxcdFxcdC8qIHJlc2V0IHRvIHNhdGlzZnkgdGhlIHNlY29uZCBwcmVkaWNhdGUgYWJvdmUgKi9cXG4gNDU3OlxcdFxcdFxcdGJsb2NrX29mZiA9IDA7XFxuIDQ1ODpcXHRcXG4gNDU5OlxcdFxcdFxcdCpiaXRfb2ZmID0gQUxJR04oUENQVV9CSVRNQVBfQkxPQ0tfQklUUyAtIGJsb2NrLVxcdTAwM2VyaWdodF9mcmVlLFxcbiA0NjA6XFx0XFx0XFx0XFx0XFx0IGFsaWduKTtcXG4gNDYxOlxcdFxcdFxcdCpiaXRzID0gUENQVV9CSVRNQVBfQkxPQ0tfQklUUyAtICpiaXRfb2ZmO1xcbiA0NjI6XFx0XFx0XFx0KmJpdF9vZmYgPSBwY3B1X2Jsb2NrX29mZl90b19vZmYoaSwgKmJpdF9vZmYpO1xcbiA0NjM6XFx0XFx0XFx0aWYgKCpiaXRzIFxcdTAwM2U9IGFsbG9jX2JpdHMpXFxuIDQ2NDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDQ2NTpcXHRcXHR9XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdFxcdC8qIG5vIHZhbGlkIG9mZnNldHMgd2VyZSBmb3VuZCAtIGZhaWwgY29uZGl0aW9uICovXFxuIDQ2ODpcXHRcXHQqYml0X29mZiA9IHBjcHVfY2h1bmtfbWFwX2JpdHMoY2h1bmspO1xcbiA0Njk6XFx0fVxcbiA0NzA6XFx0XFxuIDQ3MTpcXHQvKlxcbiA0NzI6XFx0ICogTWV0YWRhdGEgZnJlZSBhcmVhIGl0ZXJhdG9ycy4gIFRoZXNlIHBlcmZvcm0gYWdncmVnYXRpb24gb2YgZnJlZSBhcmVhc1xcbiA0NzM6XFx0ICogYmFzZWQgb24gdGhlIG1ldGFkYXRhIGJsb2NrcyBhbmQgcmV0dXJuIHRoZSBvZmZzZXQgQGJpdF9vZmYgYW5kIHNpemUgaW5cXG4gNDc0OlxcdCAqIGJpdHMgb2YgdGhlIGZyZWUgYXJlYSBAYml0cy4gIHBjcHVfZm9yX2VhY2hfZml0X3JlZ2lvbiBvbmx5IHJldHVybnMgd2hlblxcbiA0NzU6XFx0ICogYSBmaXQgaXMgZm91bmQgZm9yIHRoZSBhbGxvY2F0aW9uIHJlcXVlc3QuXFxuIDQ3NjpcXHQgKi9cXG4gNDc3OlxcdCNkZWZpbmUgcGNwdV9mb3JfZWFjaF9tZF9mcmVlX3JlZ2lvbihjaHVuaywgYml0X29mZiwgYml0cylcXHRcXHRcXFxcXFxuIDQ3ODpcXHRcXHRmb3IgKHBjcHVfbmV4dF9tZF9mcmVlX3JlZ2lvbigoY2h1bmspLCBcXHUwMDI2KGJpdF9vZmYpLCBcXHUwMDI2KGJpdHMpKTtcXHRcXFxcXFxuIDQ3OTpcXHRcXHQgICAgIChiaXRfb2ZmKSBcXHUwMDNjIHBjcHVfY2h1bmtfbWFwX2JpdHMoKGNodW5rKSk7XFx0XFx0XFx0XFxcXFxcbiA0ODA6XFx0XFx0ICAgICAoYml0X29mZikgKz0gKGJpdHMpICsgMSxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQ4MTpcXHRcXHQgICAgIHBjcHVfbmV4dF9tZF9mcmVlX3JlZ2lvbigoY2h1bmspLCBcXHUwMDI2KGJpdF9vZmYpLCBcXHUwMDI2KGJpdHMpKSlcXG4gNDgyOlxcdFxcbiA0ODM6XFx0I2RlZmluZSBwY3B1X2Zvcl9lYWNoX2ZpdF9yZWdpb24oY2h1bmssIGFsbG9jX2JpdHMsIGFsaWduLCBiaXRfb2ZmLCBiaXRzKSAgICAgXFxcXFxcbiA0ODQ6XFx0XFx0Zm9yIChwY3B1X25leHRfZml0X3JlZ2lvbigoY2h1bmspLCAoYWxsb2NfYml0cyksIChhbGlnbiksIFxcdTAwMjYoYml0X29mZiksIFxcXFxcXG4gNDg1OlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNihiaXRzKSk7XFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbiA0ODY6XFx0XFx0ICAgICAoYml0X29mZikgXFx1MDAzYyBwY3B1X2NodW5rX21hcF9iaXRzKChjaHVuaykpO1xcdFxcdFxcdCAgICAgIFxcXFxcXG4gNDg3OlxcdFxcdCAgICAgKGJpdF9vZmYpICs9IChiaXRzKSxcXHRcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuIDQ4ODpcXHRcXHQgICAgIHBjcHVfbmV4dF9maXRfcmVnaW9uKChjaHVuayksIChhbGxvY19iaXRzKSwgKGFsaWduKSwgXFx1MDAyNihiaXRfb2ZmKSwgXFxcXFxcbiA0ODk6XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2KGJpdHMpKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MTA6MjcuNTg0MzUxMDA5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NzQ2MzA5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gd2UgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0J3Mgbm90IGp1c3Qgc2tpbSB0aGUgc3VyZmFjZS4gVGhlIGNvZGUgaXMgcG9pbnRpbmcgdG8gYHBjcHVfbmV4dF9tZF9mcmVlX3JlZ2lvbmAg4oCTIHRoYXQgc291bmRzIGxpa2UgYSBjcnVjaWFsIGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBmcmVlIG1lbW9yeSByZWdpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgcGVyLUNQVSBjb250ZXh0LiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbSBnb2luZyB0byB0YWtlIGEgcmVhbGx5IGNsb3NlIGxvb2sgYXQgdGhlIGNvZGUgYmV0d2VlbiBsaW5lcyAzNzAgYW5kIDQyMC4gVGhpcyBzZWN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGZpbmRpbmcgdGhlIG5leHQgYXZhaWxhYmxlIGZyZWUgY2h1bmsgcmVzaWRlcywgb3IgcGVyaGFwcyBob3cgdGhlIGZyZWUgcmVnaW9ucyBhcmUgdHJhY2tlZCBhbmQgdXBkYXRlZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgaXQgaGFuZGxlcyBmcmFnbWVudGF0aW9uLCBtZXJnaW5nLCBhbmQgYW55IHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24gaWYgbXVsdGlwbGUgQ1BVcyBhcmUgb3BlcmF0aW5nIGNvbmN1cnJlbnRseS4gVGhpcyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIG1vZHVsZSBpbiBpdHMgZW50aXJldHkuIEl0IGNvdWxkIGludm9sdmUgYml0bWFwIGNoZWNrcywgbGlua2VkIGxpc3RzIG9yIGJ1ZGR5IGFsbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjEwOjM0LjQ1ODk4NTAwOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGVyY3B1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzcwOlxcdFxcdHN0cnVjdCBwY3B1X2Jsb2NrX21kICpibG9jaztcXG4gMzcxOlxcdFxcbiAzNzI6XFx0XFx0KmJpdHMgPSAwO1xcbiAzNzM6XFx0XFx0Zm9yIChibG9jayA9IGNodW5rLVxcdTAwM2VtZF9ibG9ja3MgKyBpOyBpIFxcdTAwM2MgcGNwdV9jaHVua19ucl9ibG9ja3MoY2h1bmspO1xcbiAzNzQ6XFx0XFx0ICAgICBibG9jaysrLCBpKyspIHtcXG4gMzc1OlxcdFxcdFxcdC8qIGhhbmRsZXMgY29udGlnIGFyZWEgYWNyb3NzIGJsb2NrcyAqL1xcbiAzNzY6XFx0XFx0XFx0aWYgKCpiaXRzKSB7XFxuIDM3NzpcXHRcXHRcXHRcXHQqYml0cyArPSBibG9jay1cXHUwMDNlbGVmdF9mcmVlO1xcbiAzNzg6XFx0XFx0XFx0XFx0aWYgKGJsb2NrLVxcdTAwM2VsZWZ0X2ZyZWUgPT0gUENQVV9CSVRNQVBfQkxPQ0tfQklUUylcXG4gMzc5OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzODA6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAzODE6XFx0XFx0XFx0fVxcbiAzODI6XFx0XFxuIDM4MzpcXHRcXHRcXHQvKlxcbiAzODQ6XFx0XFx0XFx0ICogVGhpcyBjaGVja3MgdGhyZWUgdGhpbmdzLiAgRmlyc3QgaXMgdGhlcmUgYSBjb250aWdfaGludCB0b1xcbiAzODU6XFx0XFx0XFx0ICogY2hlY2suICBTZWNvbmQsIGhhdmUgd2UgY2hlY2tlZCB0aGlzIGhpbnQgYmVmb3JlIGJ5XFxuIDM4NjpcXHRcXHRcXHQgKiBjb21wYXJpbmcgdGhlIGJsb2NrX29mZi4gIFRoaXJkLCBpcyB0aGlzIHRoZSBzYW1lIGFzIHRoZVxcbiAzODc6XFx0XFx0XFx0ICogcmlnaHQgY29udGlnIGhpbnQuICBJbiB0aGUgbGFzdCBjYXNlLCBpdCBzcGlsbHMgb3ZlciBpbnRvXFxuIDM4ODpcXHRcXHRcXHQgKiB0aGUgbmV4dCBibG9jayBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGNvbnRpZyBhcmVhXFxuIDM4OTpcXHRcXHRcXHQgKiBhY3Jvc3MgYmxvY2tzIGNvZGUuXFxuIDM5MDpcXHRcXHRcXHQgKi9cXG4gMzkxOlxcdFxcdFxcdCpiaXRzID0gYmxvY2stXFx1MDAzZWNvbnRpZ19oaW50O1xcbiAzOTI6XFx0XFx0XFx0aWYgKCpiaXRzIFxcdTAwMjZcXHUwMDI2IGJsb2NrLVxcdTAwM2Vjb250aWdfaGludF9zdGFydCBcXHUwMDNlPSBibG9ja19vZmYgXFx1MDAyNlxcdTAwMjZcXG4gMzkzOlxcdFxcdFxcdCAgICAqYml0cyArIGJsb2NrLVxcdTAwM2Vjb250aWdfaGludF9zdGFydCBcXHUwMDNjIFBDUFVfQklUTUFQX0JMT0NLX0JJVFMpIHtcXG4gMzk0OlxcdFxcdFxcdFxcdCpiaXRfb2ZmID0gcGNwdV9ibG9ja19vZmZfdG9fb2ZmKGksXFxuIDM5NTpcXHRcXHRcXHRcXHRcXHRcXHRibG9jay1cXHUwMDNlY29udGlnX2hpbnRfc3RhcnQpO1xcbiAzOTY6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAzOTc6XFx0XFx0XFx0fVxcbiAzOTg6XFx0XFx0XFx0LyogcmVzZXQgdG8gc2F0aXNmeSB0aGUgc2Vjb25kIHByZWRpY2F0ZSBhYm92ZSAqL1xcbiAzOTk6XFx0XFx0XFx0YmxvY2tfb2ZmID0gMDtcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0XFx0KmJpdHMgPSBibG9jay1cXHUwMDNlcmlnaHRfZnJlZTtcXG4gNDAyOlxcdFxcdFxcdCpiaXRfb2ZmID0gKGkgKyAxKSAqIFBDUFVfQklUTUFQX0JMT0NLX0JJVFMgLSBibG9jay1cXHUwMDNlcmlnaHRfZnJlZTtcXG4gNDAzOlxcdFxcdH1cXG4gNDA0OlxcdH1cXG4gNDA1OlxcdFxcbiA0MDY6XFx0LyoqXFxuIDQwNzpcXHQgKiBwY3B1X25leHRfZml0X3JlZ2lvbiAtIGZpbmRzIGZpdCBhcmVhcyBmb3IgYSBnaXZlbiBhbGxvY2F0aW9uIHJlcXVlc3RcXG4gNDA4OlxcdCAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3RcXG4gNDA5OlxcdCAqIEBhbGxvY19iaXRzOiBzaXplIG9mIGFsbG9jYXRpb25cXG4gNDEwOlxcdCAqIEBhbGlnbjogYWxpZ25tZW50IG9mIGFyZWEgKG1heCBQQUdFX1NJWkUpXFxuIDQxMTpcXHQgKiBAYml0X29mZjogY2h1bmsgb2Zmc2V0XFxuIDQxMjpcXHQgKiBAYml0czogc2l6ZSBvZiBmcmVlIGFyZWFcXG4gNDEzOlxcdCAqXFxuIDQxNDpcXHQgKiBGaW5kcyB0aGUgbmV4dCBmcmVlIHJlZ2lvbiB0aGF0IGlzIHZpYWJsZSBmb3IgdXNlIHdpdGggYSBnaXZlbiBzaXplIGFuZFxcbiA0MTU6XFx0ICogYWxpZ25tZW50LiAgVGhpcyBvbmx5IHJldHVybnMgaWYgdGhlcmUgaXMgYSB2YWxpZCBhcmVhIHRvIGJlIHVzZWQgZm9yIHRoaXNcXG4gNDE2OlxcdCAqIGFsbG9jYXRpb24uICBibG9jay1cXHUwMDNlZmlyc3RfZnJlZSBpcyByZXR1cm5lZCBpZiB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0IGZpdHNcXG4gNDE3OlxcdCAqIHdpdGhpbiB0aGUgYmxvY2sgdG8gc2VlIGlmIHRoZSByZXF1ZXN0IGNhbiBiZSBmdWxmaWxsZWQgcHJpb3IgdG8gdGhlIGNvbnRpZ1xcbiA0MTg6XFx0ICogaGludC5cXG4gNDE5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoxMDozNC40NTkxNTQyMDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAxNTU1OTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVkdW5kYW50IENvZGUgaW4gUGVyLUNQVSBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgZGlmZnMuIEkgc2VlIGEgcGF0dGVybiBoZXJlLCBhbmQgaXQgbG9va3MgbGlrZSBzb21lIHVubmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIGlzIGhhcHBlbmluZy4gSW4gYHBjcHVfY2h1bmtfcmVmcmVzaF9oaW50KClgLCBJIG5vdGljZWQgdGhhdCBgYml0c2AgaXMgc2V0IHRvIHplcm8gKmJlZm9yZSogYSBsb29wIHRoYXQgcmVsaWVzIG9uIGEgZnVuY3Rpb24sIGBwY3B1X25leHRfbWRfZnJlZV9yZWdpb25gLCB0byBpbml0aWFsaXplIGBiaXRzYC4gVGhpcyBtZWFucyB0aGF0IHRoZSBpbml0aWFsIGBiaXRzID0gMDtgIGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50OyB0aGUgZnVuY3Rpb24gYWxyZWFkeSBoYW5kbGVzIHRoYXQuIFRoZSBzYW1lIHRoaW5nIGlzIGhhcHBlbmluZyBpbiBgcGNwdV9maW5kX2Jsb2NrX2ZpdCgpYC4gQWdhaW4sIGBiaXRzYCBpcyBuZWVkbGVzc2x5IHplcm9lZCBvdXQgYmVmb3JlIGBwY3B1X2Zvcl9lYWNoX2ZpdF9yZWdpb25gIHdoaWNoIGFscmVhZHkgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGJpdHNgIHVzaW5nIGBwY3B1X25leHRfZml0X3JlZ2lvbmAuXG5cblRoZW4sIGxvb2tpbmcgYXQgdGhlIGNoYW5nZSBpbiBgcGNwdV9idWlsZF9hbGxvY19pbmZvKClgLCBpdCBsb29rcyBsaWtlIGBucl9ncm91cHNgIGlzIGJlaW5nIGluaXRpYWxpemVkIGRpZmZlcmVudGx5LiBQcmV2aW91c2x5LCBib3RoIGBucl9ncm91cHNgIGFuZCBgbnJfdW5pdHNgIHdlcmUgaW5pdGlhbGl6ZWQgb24gdGhlIHNhbWUgbGluZS4gSW4gdGhpcyBjYXNlLCBgbnJfZ3JvdXBzYCBpcyBubyBsb25nZXIgYmVpbmcgYXNzaWduZWQgYW4gaW5pdGlhbCB2YWx1ZSBhbmQgYG5yX3VuaXRzYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGBucl9ncm91cHNgIGFuZCBgbWFza2AgYXJlIHVzZWQgaW4gdGhpcyBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCBubyBpc3N1ZXMgYXJlIGludHJvZHVjZWQuIEnigJlsbCBtYWtlIHN1cmUgdG8gZG91YmxlIGNoZWNrIGxpbmVzIDI4NDAtMjkwMCBvZiBgbW0vcGVyY3B1LmNgIHRvIGNvbmZpcm0gdGhhdCBgbnJfZ3JvdXBzYCBhbmQgYG1hc2tgIGFyZSBiZWluZyBwcm9wZXJseSBzZXQgd2l0aGluIHRoZSBmdW5jdGlvbidzIGZsb3cuIE92ZXJhbGwsIGl0IGxvb2tzIGxpa2UgdGhlc2UgY2hhbmdlcyBhcmUgYWltZWQgYXQgcmVtb3ZpbmcgdW5uZWNlc3NhcnkgY29kZSBhbmQgaW1wcm92aW5nIGNvZGUgY2xhcml0eSwgYnV0IEknbGwgbmVlZCB0byB2ZXJpZnkgdGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MTA6MzguNDc0NzE2NjY5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wZXJjcHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODQwOlxcdFxcdCAqIHdoaWNoIGNhbiBhY2NvbW1vZGF0ZSA0ayBhbGlnbmVkIHNlZ21lbnRzIHdoaWNoIGFyZSBlcXVhbCB0b1xcbjI4NDE6XFx0XFx0ICogb3IgbGFyZ2VyIHRoYW4gbWluX3VuaXRfc2l6ZS5cXG4yODQyOlxcdFxcdCAqL1xcbjI4NDM6XFx0XFx0bWluX3VuaXRfc2l6ZSA9IG1heF90KHNpemVfdCwgc2l6ZV9zdW0sIFBDUFVfTUlOX1VOSVRfU0laRSk7XFxuMjg0NDpcXHRcXG4yODQ1OlxcdFxcdC8qIGRldGVybWluZSB0aGUgbWF4aW11bSAjIG9mIHVuaXRzIHRoYXQgY2FuIGZpdCBpbiBhbiBhbGxvY2F0aW9uICovXFxuMjg0NjpcXHRcXHRhbGxvY19zaXplID0gcm91bmR1cChtaW5fdW5pdF9zaXplLCBhdG9tX3NpemUpO1xcbjI4NDc6XFx0XFx0dXBhID0gYWxsb2Nfc2l6ZSAvIG1pbl91bml0X3NpemU7XFxuMjg0ODpcXHRcXHR3aGlsZSAoYWxsb2Nfc2l6ZSAlIHVwYSB8fCAob2Zmc2V0X2luX3BhZ2UoYWxsb2Nfc2l6ZSAvIHVwYSkpKVxcbjI4NDk6XFx0XFx0XFx0dXBhLS07XFxuMjg1MDpcXHRcXHRtYXhfdXBhID0gdXBhO1xcbjI4NTE6XFx0XFxuMjg1MjpcXHRcXHRjcHVtYXNrX2NvcHkoXFx1MDAyNm1hc2ssIGNwdV9wb3NzaWJsZV9tYXNrKTtcXG4yODUzOlxcdFxcbjI4NTQ6XFx0XFx0LyogZ3JvdXAgY3B1cyBhY2NvcmRpbmcgdG8gdGhlaXIgcHJveGltaXR5ICovXFxuMjg1NTpcXHRcXHRmb3IgKGdyb3VwID0gMDsgIWNwdW1hc2tfZW1wdHkoXFx1MDAyNm1hc2spOyBncm91cCsrKSB7XFxuMjg1NjpcXHRcXHRcXHQvKiBwb3AgdGhlIGdyb3VwJ3MgZmlyc3QgY3B1ICovXFxuMjg1NzpcXHRcXHRcXHRjcHUgPSBjcHVtYXNrX2ZpcnN0KFxcdTAwMjZtYXNrKTtcXG4yODU4OlxcdFxcdFxcdGdyb3VwX21hcFtjcHVdID0gZ3JvdXA7XFxuMjg1OTpcXHRcXHRcXHRncm91cF9jbnRbZ3JvdXBdKys7XFxuMjg2MDpcXHRcXHRcXHRjcHVtYXNrX2NsZWFyX2NwdShjcHUsIFxcdTAwMjZtYXNrKTtcXG4yODYxOlxcdFxcbjI4NjI6XFx0XFx0XFx0Zm9yX2VhY2hfY3B1KHRjcHUsIFxcdTAwMjZtYXNrKSB7XFxuMjg2MzpcXHRcXHRcXHRcXHRpZiAoIWNwdV9kaXN0YW5jZV9mbiB8fFxcbjI4NjQ6XFx0XFx0XFx0XFx0ICAgIChjcHVfZGlzdGFuY2VfZm4oY3B1LCB0Y3B1KSA9PSBMT0NBTF9ESVNUQU5DRSBcXHUwMDI2XFx1MDAyNlxcbjI4NjU6XFx0XFx0XFx0XFx0ICAgICBjcHVfZGlzdGFuY2VfZm4odGNwdSwgY3B1KSA9PSBMT0NBTF9ESVNUQU5DRSkpIHtcXG4yODY2OlxcdFxcdFxcdFxcdFxcdGdyb3VwX21hcFt0Y3B1XSA9IGdyb3VwO1xcbjI4Njc6XFx0XFx0XFx0XFx0XFx0Z3JvdXBfY250W2dyb3VwXSsrO1xcbjI4Njg6XFx0XFx0XFx0XFx0XFx0Y3B1bWFza19jbGVhcl9jcHUodGNwdSwgXFx1MDAyNm1hc2spO1xcbjI4Njk6XFx0XFx0XFx0XFx0fVxcbjI4NzA6XFx0XFx0XFx0fVxcbjI4NzE6XFx0XFx0fVxcbjI4NzI6XFx0XFx0bnJfZ3JvdXBzID0gZ3JvdXA7XFxuMjg3MzpcXHRcXG4yODc0OlxcdFxcdC8qXFxuMjg3NTpcXHRcXHQgKiBXYXN0ZWQgc3BhY2UgaXMgY2F1c2VkIGJ5IGEgcmF0aW8gaW1iYWxhbmNlIG9mIHVwYSB0byBncm91cF9jbnQuXFxuMjg3NjpcXHRcXHQgKiBFeHBhbmQgdGhlIHVuaXRfc2l6ZSB1bnRpbCB3ZSB1c2UgXFx1MDAzZT0gNzUlIG9mIHRoZSB1bml0cyBhbGxvY2F0ZWQuXFxuMjg3NzpcXHRcXHQgKiBSZWxhdGVkIHRvIGF0b21fc2l6ZSwgd2hpY2ggY291bGQgYmUgbXVjaCBsYXJnZXIgdGhhbiB0aGUgdW5pdF9zaXplLlxcbjI4Nzg6XFx0XFx0ICovXFxuMjg3OTpcXHRcXHRsYXN0X2FsbG9jcyA9IElOVF9NQVg7XFxuMjg4MDpcXHRcXHRiZXN0X3VwYSA9IDA7XFxuMjg4MTpcXHRcXHRmb3IgKHVwYSA9IG1heF91cGE7IHVwYTsgdXBhLS0pIHtcXG4yODgyOlxcdFxcdFxcdGludCBhbGxvY3MgPSAwLCB3YXN0ZWQgPSAwO1xcbjI4ODM6XFx0XFxuMjg4NDpcXHRcXHRcXHRpZiAoYWxsb2Nfc2l6ZSAlIHVwYSB8fCAob2Zmc2V0X2luX3BhZ2UoYWxsb2Nfc2l6ZSAvIHVwYSkpKVxcbjI4ODU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjg4NjpcXHRcXG4yODg3OlxcdFxcdFxcdGZvciAoZ3JvdXAgPSAwOyBncm91cCBcXHUwMDNjIG5yX2dyb3VwczsgZ3JvdXArKykge1xcbjI4ODg6XFx0XFx0XFx0XFx0aW50IHRoaXNfYWxsb2NzID0gRElWX1JPVU5EX1VQKGdyb3VwX2NudFtncm91cF0sIHVwYSk7XFxuMjg4OTpcXHRcXHRcXHRcXHRhbGxvY3MgKz0gdGhpc19hbGxvY3M7XFxuMjg5MDpcXHRcXHRcXHRcXHR3YXN0ZWQgKz0gdGhpc19hbGxvY3MgKiB1cGEgLSBncm91cF9jbnRbZ3JvdXBdO1xcbjI4OTE6XFx0XFx0XFx0fVxcbjI4OTI6XFx0XFxuMjg5MzpcXHRcXHRcXHQvKlxcbjI4OTQ6XFx0XFx0XFx0ICogRG9uJ3QgYWNjZXB0IGlmIHdhc3RhZ2UgaXMgb3ZlciAxLzMuICBUaGVcXG4yODk1OlxcdFxcdFxcdCAqIGdyZWF0ZXItdGhhbiBjb21wYXJpc29uIGVuc3VyZXMgdXBhPT0xIGFsd2F5c1xcbjI4OTY6XFx0XFx0XFx0ICogcGFzc2VzIHRoZSBmb2xsb3dpbmcgY2hlY2suXFxuMjg5NzpcXHRcXHRcXHQgKi9cXG4yODk4OlxcdFxcdFxcdGlmICh3YXN0ZWQgXFx1MDAzZSBudW1fcG9zc2libGVfY3B1cygpIC8gMylcXG4yODk5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoxMDozOC40NzQ4ODM3OTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk0OTQ4NDcxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBleGFtaW5pbmcgYSBwYXRjaCB0aGF0IHNlZW1zIGZvY3VzZWQgb24gY29kZSBjbGVhbnVwIHdpdGhpbiB0aGUgcGVyLUNQVSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIChgbW0vcGVyY3B1LmNgKS4gSSd2ZSBnb25lIHRocm91Z2ggdGhlIGNoYW5nZXMgY2FyZWZ1bGx5LiBJdCBhcHBlYXJzIHRoYXQgdGhlcmUgYXJlIGEgZmV3IGtleSBhZGp1c3RtZW50czogcmVtb3ZpbmcgdW51c2VkIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgZWxpbWluYXRpbmcgcmVkdW5kYW50IGZ1bmN0aW9uIGNhbGxzLCBhbmQgZ2V0dGluZyByaWQgb2YgYSBkZWFkIGByZXR1cm5gIHN0YXRlbWVudC4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoYXQgYG5yX2dyb3Vwc2Agd2FzIGluaXRpYWxpemVkIHRvIGAxYCwgYnV0IG92ZXJ3cml0dGVuIGJlZm9yZSBiZWluZyB1c2VkLCBhbmQgc2ltaWxhcmx5LCBgY3B1bWFza19jbGVhcihcdTAwMjZtYXNrKWAgd2FzIGZvbGxvd2VkIGJ5IGEgY29tcGxldGUgb3ZlcndyaXRlLCBhbmQgdGhlcmUncyBhIHN1cGVyZmx1b3VzIGByZXR1cm5gIGF0IHRoZSBlbmQgb2YgYSBgdm9pZGAgZnVuY3Rpb24uIEkndmUgY29uZmlybWVkIHRoaXMgd2l0aCB0aGUgcmVsZXZhbnQgbGluZXMgaW4gYHBjcHVfYnVpbGRfYWxsb2NfaW5mbygpYCBhbmQgYHBjcHVfcG9wdWxhdGVfcHRlYC5cblxuVGhlIGNoYW5nZXMgYXJlOlxuXG4xLiAgUmVtb3ZpbmcgdGhlIHVubmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIG9mIGBiaXRzID0gMDtgIGJlZm9yZSBtYWNyb3MgdGhhdCByZXNldCB0aGUgdmFsdWUgaW50ZXJuYWxseS5cbjIuICBSZW1vdmluZyB0aGUgdXNlbGVzcyBgbnJfZ3JvdXBzID0gMWAgaW5pdGlhbGl6YXRpb24gYW5kIGBjcHVtYXNrX2NsZWFyKFx1MDAyNm1hc2spO2AuXG4zLiAgUmVtb3ZpbmcgdGhlIHJlZHVuZGFudCBgcmV0dXJuO2AgYXQgdGhlIGVuZCBvZiBgcGNwdV9wb3B1bGF0ZV9wdGVgLlxuXG5NeSBldmFsdWF0aW9uIGhpbmdlcyBvbiB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBwcm9ncmFtJ3MgYmVoYXZpb3IuIEJhc2VkIG9uIG15IHJldmlldyBvZiB0aGUgY29kZSBhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGVyLUNQVSBtZW1vcnkgc3Vic3lzdGVtLCB0aGVzZSBhcmUgcHVyZWx5IHJlZmFjdG9yaW5nIGNoYW5nZXMuIFRoZXkgZG9uJ3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIG9yIG1vZGlmeSB0aGUgZXhlY3V0aW9uIHBhdGggaW4gYW55IG1lYW5pbmdmdWwgd2F5LiBNeSB0ZXN0cyBvZiB0aGUgYGJpdHMgPSAwYCwgYG5yX2dyb3Vwc2AsIGBjcHVtYXNrX2NsZWFyKFx1MDAyNm1hc2spYCwgYW5kIGByZXR1cm47YCBhbGwgYWxpZ24gd2l0aCB0aGlzIGFzc2Vzc21lbnQuXG5cbkNvbnNpZGVyaW5nIHRoZSBndWlkZWxpbmVzLCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhpcyBwYXRjaCBjb250YWlucyBjaGFuZ2VzIHRvIGNvZGUgdGhhdCBjb3VsZCBiZSBleGVjdXRlZC4gSSBoYXZlIGNvbWUgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCB0aGlzIHBhdGNoIGRvZXMgbm90IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvciBzZW1hbnRpY3Mgb2YgdGhlIGNvZGUuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGNvbnRhaW5zIHB1cmVseSBjb3NtZXRpYyBjaGFuZ2VzIGFuZCBubyBmdW5jdGlvbmFsIGltcGFjdCwgSSdtIGNvbmZpZGVudCB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSdtIGdvaW5nIHRvIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbDpcblxuKiAgIGBXb3J0aEZ1enppbmc6IGZhbHNlYFxuKiAgIGBGb2N1c1N5bWJvbHM6IFtdYFxuKiAgIGBFbmFibGVDb25maWdzOiBbXWBcbiogICBgUmVhc29uaW5nOiBUaGlzIHBhdGNoIGNvbnRhaW5zIHB1cmVseSBjb2RlIGNsZWFudXAgY2hhbmdlcyB3aXRoaW4gbW0vcGVyY3B1LmMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSB0aGUgcmVtb3ZhbCBvZiBkZWFkIGNvZGUgKHVubmVjZXNzYXJ5IGluaXRpYWxpemF0aW9ucywgYSByZWR1bmRhbnQgcmV0dXJuIHN0YXRlbWVudCkgYW5kIGhhdmUgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93IG9yIHNlbWFudGljcyBvZiB0aGUgY29kZS5gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2ODEsIk91dHB1dFRva2VucyI6OTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoxMToyNy45Njk3MzUwMjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBwdXJlbHkgb2YgY29kZSBjbGVhbnVwcyBpbiBtbS9wZXJjcHUuYywgcmVtb3ZpbmcgcmVkdW5kYW50IHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgYW4gdW5uZWNlc3NhcnkgY3B1bWFza19jbGVhcigpIHByaW9yIHRvIGNwdW1hc2tfY29weSgpLCBhbmQgYW4gZW1wdHkgcmV0dXJuIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIGEgdm9pZCBmdW5jdGlvbi4gVGhlc2UgY2hhbmdlcyBoYXZlIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIGtlcm5lbCBleGVjdXRpb24gZmxvdyBvciBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIHB1cmVseSBvZiBjb2RlIGNsZWFudXBzIGluIG1tL3BlcmNwdS5jLCByZW1vdmluZyByZWR1bmRhbnQgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBhbiB1bm5lY2Vzc2FyeSBjcHVtYXNrX2NsZWFyKCkgcHJpb3IgdG8gY3B1bWFza19jb3B5KCksIGFuZCBhbiBlbXB0eSByZXR1cm4gc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgYSB2b2lkIGZ1bmN0aW9uLiBUaGVzZSBjaGFuZ2VzIGhhdmUgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24ga2VybmVsIGV4ZWN1dGlvbiBmbG93IG9yIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MTE6MjcuOTY5NzY4NjY0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzn28[1] Phase: Running StartedAt: 2026-09-02 07:11:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzn28[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-02 07:11:40 +0000 UTC FinishedAt: 2026-09-02 07:11:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}