Name: series-workflow4p5h4 Phase: Failed StartedAt: 2026-08-27 11:29:46 +0000 UTC FinishedAt: 2026-08-27 12:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4p5h4[0] Phase: Succeeded StartedAt: 2026-08-27 11:29:46 +0000 UTC FinishedAt: 2026-08-27 12:28:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4p5h4[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 11:29:46 +0000 UTC FinishedAt: 2026-08-27 12:28:32 +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+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBXQVJOX09OX09OQ0UgY2hlY2sgaW4ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IHRvIGNhc3QgbWVtLVx1MDAzZXNsb3QgdG8gKHUxNikgYmVmb3JlIGNvbXBhcmluZyBpdCB0byBLVk1fVVNFUl9NRU1fU0xPVFMuIFRoaXMgZml4ZXMgdGhlIHNhbml0eSBjaGVjayB0byBjb3JyZWN0bHkgaGFuZGxlIG1lbW9yeSBzbG90cyB3aXRoIG5vbi16ZXJvIGFkZHJlc3Mgc3BhY2UgSURzIChlbmNvZGVkIGluIHRoZSB1cHBlciAxNiBiaXRzKS4gSG93ZXZlciwga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IGlzIGFuIGludGVybmFsIEtWTSBBUEkgdGhhdCBpcyBvbmx5IGNhbGxlZCBieSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbiBhbmQgczM5MCYjMzk7cyBrdm1fYXJjaF9pbml0X3ZtLCBib3RoIG9mIHdoaWNoIGFsd2F5cyBwYXNzIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzIChcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUykuIFVzZXJzcGFjZSBjYW5ub3QgcmVhY2ggdGhpcyBmdW5jdGlvbiwgYXMgaXQgdXNlcyBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24gd2hpY2ggaGFzIGl0cyBvd24gY29ycmVjdCBjaGVjay4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIG9ubHkgZml4ZXMgYSB0aGVvcmV0aWNhbCBidWcgaW4gYSBzYW5pdHkgY2hlY2sgdGhhdCBpcyBuZXZlciB0cmlnZ2VyZWQgaW4gcHJhY3RpY2UsIGFuZCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVhY2hhYmxlIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWY0NzNkZTg2Y2QwMGNkNzU5NTkyMWNkNjY3Y2VmNjk3NGJhMTE1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjE5OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA2NWViMjZhMDUyMGQ4Li5lOGQwZTM2MGVhMjZiIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTIxMjgsNyAmIzQzOzIxMjgsNyBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gaW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxuIHtcbi1cdGlmIChXQVJOX09OX09OQ0UobWVtLVx1MDAzZXNsb3QgXHUwMDNjIEtWTV9VU0VSX01FTV9TTE9UUykpXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSgodTE2KW1lbS1cdTAwM2VzbG90IFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UobWVtLVx1MDAzZWZsYWdzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBXQVJOX09OX09OQ0UgY2hlY2sgaW4ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IHRvIGNhc3QgbWVtLVx1MDAzZXNsb3QgdG8gKHUxNikgYmVmb3JlIGNvbXBhcmluZyBpdCB0byBLVk1fVVNFUl9NRU1fU0xPVFMuIFRoaXMgZml4ZXMgdGhlIHNhbml0eSBjaGVjayB0byBjb3JyZWN0bHkgaGFuZGxlIG1lbW9yeSBzbG90cyB3aXRoIG5vbi16ZXJvIGFkZHJlc3Mgc3BhY2UgSURzIChlbmNvZGVkIGluIHRoZSB1cHBlciAxNiBiaXRzKS4gSG93ZXZlciwga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IGlzIGFuIGludGVybmFsIEtWTSBBUEkgdGhhdCBpcyBvbmx5IGNhbGxlZCBieSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbiBhbmQgczM5MCYjMzk7cyBrdm1fYXJjaF9pbml0X3ZtLCBib3RoIG9mIHdoaWNoIGFsd2F5cyBwYXNzIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzIChcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUykuIFVzZXJzcGFjZSBjYW5ub3QgcmVhY2ggdGhpcyBmdW5jdGlvbiwgYXMgaXQgdXNlcyBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24gd2hpY2ggaGFzIGl0cyBvd24gY29ycmVjdCBjaGVjay4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIG9ubHkgZml4ZXMgYSB0aGVvcmV0aWNhbCBidWcgaW4gYSBzYW5pdHkgY2hlY2sgdGhhdCBpcyBuZXZlciB0cmlnZ2VyZWQgaW4gcHJhY3RpY2UsIGFuZCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVhY2hhYmxlIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWY0NzNkZTg2Y2QwMGNkNzU5NTkyMWNkNjY3Y2VmNjk3NGJhMTE1MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDEyOjE5OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNjVlYjI2YTA1MjBkOC4uZThkMGUzNjBlYTI2YiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC0yMTI4LDcgJiM0MzsyMTI4LDcgQEAgc3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogaW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pCiB7Ci0JaWYgKFdBUk5fT05fT05DRShtZW0tJmd0O3Nsb3QgJmx0OyBLVk1fVVNFUl9NRU1fU0xPVFMpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCh1MTYpbWVtLSZndDtzbG90ICZsdDsgS1ZNX1VTRVJfTUVNX1NMT1RTKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKG1lbS0mZ3Q7ZmxhZ3MpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIGF0IGZpcnN0IGdsYW5jZS4gSXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgcmlnaHQgdGhlcmU6IHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgY2FzdGluZyBgbWVtLSZndDtzbG90YCB0byBgdTE2YCBiZWZvcmUgY29tcGFyaW5nIGl0IHRvIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGluc2lkZSB0aGF0IGBXQVJOX09OX09OQ0VgIGNoZWNrLiAKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHRvIGJlIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgYmVpbmcgYWRkcmVzc2VkLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgbGlrZWx5IHJlbHlpbmcgb24gaW1wbGljaXQgdHlwZSBwcm9tb3Rpb24sIGJ1dCBwZXJoYXBzIGEgc2NlbmFyaW8gd2FzIGlkZW50aWZpZWQgd2hlcmUgYG1lbS0mZ3Q7c2xvdGAgY291bGQgYmUgYSBsYXJnZXIgaW50ZWdlciB0eXBlLCBhbmQgd2l0aG91dCB0aGUgY2FzdCwgdGhlIGNvbXBhcmlzb24gbWlnaHQgaGF2ZSBiZWVuIHN1YnRseSBpbmNvcnJlY3QgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBsZWFkaW5nIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoZSBgV0FSTl9PTl9PTkNFYCBpbmRpY2F0ZXMgaXQmIzM5O3MgYSBjcml0aWNhbCBzYWZldHkgY2hlY2ssIHNvIHRoaXMgbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGdvb2QgdGhhdCB0aGV5JiMzOTtyZSBiZWluZyBleHBsaWNpdCBhYm91dCB0aGUgaW50ZW5kZWQgc2l6ZS4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBkaWcgZGVlcGVyIGFuZCBsb29rIGludG8gYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoaXMgbWVtc2xvdCBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgS1ZNX1VTRVJfTUVNX1NMT1RTYCBjb25zdGFudCByZXByZXNlbnRzIGFuZCB3aGF0IGEgcG90ZW50aWFsIG92ZXJmbG93IGNvdWxkIGRvLiBMZXQmIzM5O3Mgc2VlIGhvdyBtZW1vcnkgc2xvdHMgYXJlIG1hbmFnZWQgaW4gS1ZNIGFuZCB3aGF0IGNhbiBnbyB3cm9uZyBpZiB0aGUgc2xvdCBpbmRleCBnZXRzIGNvcnJ1cHRlZC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGRvY3VtZW50YXRpb24gb24gdGhlIHJlYXNvbmluZyBiZWhpbmQgbGltaXRpbmcgdGhlIGBtZW0tJmd0O3Nsb3RgIG51bWJlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fc2V0X2ludGVybmFsX21lbXNsb3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9MTk5NT1zdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yMTI3LVxudmlydC9rdm0va3ZtX21haW4uYzoyMTI4OmludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxudmlydC9rdm0va3ZtX21haW4uYy0yMTI5LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgKm1lbSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMzgtfVxudmlydC9rdm0va3ZtX21haW4uYzoyMTM5OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2ludGVybmFsX21lbXNsb3QpO1xudmlydC9rdm0va3ZtX21haW4uYy0yMTQwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgLiBUaGUgZmlyc3QgdGhpbmcgSSBhbHdheXMgZG8gaXMgdHJhY2UgaXRzIGNhbGxpbmcgY29udGV4dC4gVW5kZXJzdGFuZGluZyAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlzIGFic29sdXRlbHkgY3J1Y2lhbCB0byBncmFzcGluZyBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCB3aXRoaW4gdGhlIEtWTSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHVzYWdlIHRocm91Z2hvdXQgdGhlIGNvZGUgYmFzZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IGludm9rZWQuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM9MzI0MT1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTEtXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzozMzUyOlx0XHRLVk1fQlVHX09OKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFx1MDAyNmZha2VfbWVtc2xvdCksIGt2bSk7XG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTMtXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTk5Mzg9dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTc5LVx0XHRtLm1lbW9yeV9zaXplID0gc2l6ZTtcbmFyY2gveDg2L2t2bS94ODYuYzo5OTgwOlx0XHRyID0ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KGt2bSwgXHUwMDI2bSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk4MS1cdFx0aWYgKHIgXHUwMDNjIDApXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTEyNDI9ZW51bSBrdm1fbXJfY2hhbmdlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI0OC1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxMjQ5OmludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNTAtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKTtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE5OTU9c3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyNy1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEyODppbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyOS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yMTM4LX1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEzOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjE0MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjE0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIE1lbW9yeSBTbG90IEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBhIHR5cGUgY29udmVyc2lvbjogYG1lbS0mZ3Q7c2xvdGAgaXMgbm93IGJlaW5nIGNhc3QgdG8gYCh1MTYpbWVtLSZndDtzbG90YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2h5IHRoZSB0eXBlIHJlZHVjdGlvbj8mIzM0OyBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgbWVtLSZndDtzbG90YCBpcyBkZWZpbmVkIGFzIGEgYHUzMmAgd2l0aGluIHRoZSBgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gQSBxdWljayBtZW50YWwgY2hlY2sgYnJpbmdzIHVwIGBLVk1fVVNFUl9NRU1fU0xPVFNgLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWVtb3J5IHNsb3RzIGFsbG93ZWQuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIHN0dWZmLCBhIGB1MTZgIGlzIDE2IGJpdHMsIGB1MzJgIGlzIDMyIGJpdHMgYW5kIGlmIHRoaXMgaXMgaW50ZW5kZWQgYXMgYSB0eXBlIHJlc3RyaWN0aW9uLCBJIG5lZWQgdG8gbG9vayBpbnRvIGBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMmAuIFdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZXJlPyBJcyBpdCBhIGRhdGEgdHlwZSBzaXplIHJlZHVjdGlvbiBmb3IgZWZmaWNpZW5jeSwgb3IgaXMgaXQgYSBzaWduIG9mIHNvbWV0aGluZyB0aGF0IEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgb24/IEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoYXQgc3RydWN0dXJlIGRlZmluaXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNsb3QgdmFsdWUgaXMgdXNlZCBhbmQgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHNsb3QgYWRkcmVzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjQ5PWludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjEyNTA6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMjUxLXZvaWQga3ZtX2FyY2hfZnJlZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCk7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTMwPXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0zOC0vKiBmb3IgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yICovXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6Mzk6c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIge1xuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQwLVx0X191MzIgc2xvdDtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTI1Mz1zdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Age1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xMjcyLSNkZWZpbmUgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yIF9JT1coS1ZNSU8sIDB4NDksIFxcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTI3MzpcdFx0XHRcdFx0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yKVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTEyNzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNJiMzOTtzIE1lbW9yeSBSZWdpb24gU2V0dXAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgYXJjaC94ODYva3ZtL3g4Ni5jYCBmaWxlIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIHg4Ni1zcGVjaWZpYyBLVk0gY29kZSBsaXZlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIHNldCB1cC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGZ1bmN0aW9uLiBJIGhhdmUgYSBmZWVsaW5nIHRoaXMgaXMgdGhlIGtleSB0byBob3cgS1ZNIG1hbmFnZXMgZ3Vlc3QgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmdzIGFuZCBoYW5kbGVzIGludGVyYWN0aW9ucyB3aXRoIHRoZSBob3N0JiMzOTtzIHBoeXNpY2FsIG1lbW9yeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBwYWdpbmcgc3RydWN0dXJlcywgYW5kIHdoYXQgdGhlIG92ZXJhbGwgaW1wbGljYXRpb25zIGFyZSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHZpcnR1YWxpemF0aW9uLiBJIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIGhvdyB0aGlzIGZ1bmN0aW9uIGVuZm9yY2VzIHRoZSBtZW1vcnkgcmVnaW9uIGJvdW5kYXJpZXMgYW5kIHBlcm1pc3Npb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X194ODZfc2V0X21lbW9yeV9yZWdpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTk4NDM9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MTYtLyoqXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxNzogKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbjogU2V0dXAgS1ZNIGludGVybmFsIG1lbW9yeSBzbG90XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxOC0gKlxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTM3LSAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jOjk5Mzg6dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MzktXHRcdFx0XHQgICAgICB1MzIgc2l6ZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk4OS19XG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk5MDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX194ODZfc2V0X21lbW9yeV9yZWdpb24pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTk5OTEtXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDE0PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDIyLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyMzpcdFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVCxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNC1cdFx0XHRcdFx0MCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjU6XHRcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVCxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNi1cdFx0XHRcdFx0MCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjc6XHRcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgVFNTX1BSSVZBVEVfTUVNU0xPVCwgMCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjgtXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gVGhlIGNvZGUmIzM5O3MgY2FzdGluZyBgbWVtLSZndDtzbG90YCB0byBhIGB1MTZgIGJlZm9yZSBjb21wYXJpbmcgaXQgdG8gYEtWTV9VU0VSX01FTV9TTE9UU2AuIE15IGZpcnN0IHRob3VnaHQgaXM6IHdoeSB0aGUgY2FzdD8gQW5kIHdoYXQgYXJlIHdlIHRyeWluZyB0byBhY2hpZXZlPyBgbWVtLSZndDtzbG90YCBpcyBkZWZpbmVkIGFzIGEgYHUzMmAsIHdoaWNoIGdpdmVzIHVzIGEgcG90ZW50aWFsIGxhcmdlciByYW5nZS4gU28sIHRoYXQgY2FzdCBpcyB0aGUgZmlyc3QgdGhpbmcgdG8gY2hlY2suCgpOb3csIGBLVk1fVVNFUl9NRU1fU0xPVFNg4oCmIHRoYXQmIzM5O3MgYSBjb25zdGFudCwgYW5kIGl04oCZcyBsaWtlbHkgcmVwcmVzZW50aW5nIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtZW1vcnkgc2xvdHMgdGhhdCBhcmUgYWxsb3dlZC4gSSBuZWVkIHRvIGtub3cgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGF0IGNvbnN0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbXBhcmlzb24uIERlcGVuZGluZyBvbiB3aGF0IGl0IGlzLCBhIHRydW5jYXRpb24gdG8gYHUxNmAgY291bGQgbWVhbiBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgaWYgYG1lbS0mZ3Q7c2xvdGAgaXMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gYFVTSFJUX01BWGAuIEFuZCBpdCYjMzk7cyBhbHNvIHdvcnRoIGNoZWNraW5nIHdoZXRoZXIgdGhlIHNpemUgb2YgYEtWTV9VU0VSX01FTV9TTE9UU2AgaXMgc21hbGxlciB0aGFuIGEgMTYtYml0IHZhbHVlLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBvdmVyZmxvdyBpc3N1ZSBldmVuIHdvcnNlLiBTbywgSSBuZWVkIHRvIGdvIGFuZCBmaW5kIHdoZXJlIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIGRlZmluZWQgYW5kIGNoZWNrIGl0cyB2YWx1ZSBhbmQgdHlwZSwgYW5kIHRoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSBhIGxpdHRsZSBiZXR0ZXIgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBLVk1fVVNFUl9NRU1fU0xPVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTcwND1ib29sIGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSk7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTcxMC0jZGVmaW5lIEtWTV9NRU1fU0xPVFNfTlVNIFNIUlRfTUFYXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6NzExOiNkZWZpbmUgS1ZNX1VTRVJfTUVNX1NMT1RTIChLVk1fTUVNX1NMT1RTX05VTSAtIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFMpXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtNzEyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODY3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIEtWTSBNZW1vcnkgU2xvdCBMaW1pdHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBzbywgYEtWTV9NRU1fU0xPVFNfTlVNYCBpcyBkZWZpbmVkIGFzIGBTSFJUX01BWGAsIHdoaWNoIGlzIDMyNzY3LiBUaGF0JiMzOTtzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtZW1vcnkgc2xvdHMgdGhhdCBLVk0gaXMgKmRlc2lnbmVkKiB0byBzdXBwb3J0LiBBIHByZXR0eSBoaWdoIG51bWJlciwgaG9uZXN0bHkuIEkmIzM5O2QgdHlwaWNhbGx5IGNvbnNpZGVyIGlmIHRoYXQmIzM5O3MgbGFyZ2UgZW5vdWdoIGZvciB0aGUgc2NhbGUgSSBhbSB3b3JraW5nIGF0LgoKVGhlbiwgYEtWTV9JTlRFUk5BTF9NRU1fU0xPVFNgIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSW50ZXJlc3RpbmcuIFRoYXQgdGVsbHMgbWUgdGhlIGludGVybmFsIG1lbW9yeSBzbG90IG1hbmFnZW1lbnQgKndpdGhpbiogS1ZNIGlzIGxpa2VseSB0dW5lZCBmb3IgdGhlIHNwZWNpZmljcyBvZiBkaWZmZXJlbnQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcy4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGFyY2gtc3BlY2lmaWMgZGVmaW5pdGlvbnMgdG8gc2VlIHRoZSBkaWZmZXJlbmNlcyBhbmQgcG90ZW50aWFsIHJlYXNvbnMgZm9yIHRoYXQgdmFyaWF0aW9uLiBUaGlzIHByb2JhYmx5IGhhcyB0byBkbyB3aXRoIGhvdyBtZW1vcnkgaXMgbWFwcGVkLCBoYW5kbGVkLCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemVkIGF0IGEgbG93ZXIgbGV2ZWwgb24sIGZvciBpbnN0YW5jZSwgeDg2IHZzLiBBUk0uIFRoZSBwcmFjdGljYWwgbGltaXQgbWlnaHQgYmUgdGhlIG1heCBwaHlzaWNhbCBtZW1vcnkgc2l6ZSBhbmQvb3IgdGhlIGFkZHJlc3Mgc3BhY2UgbGltaXRhdGlvbnMgb2YgdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4gSSYjMzk7ZCB3YW50IHRvIGJlIGF3YXJlIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYWxsb2NhdGlvbi4gSSBjb3VsZCBhbHNvIHNlZSBpdCBoYXZpbmcgaW1wbGljYXRpb25zIGZvciBOVU1BIGNvbmZpZ3VyYXRpb25zLiBTbywgdGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgS1ZNX0lOVEVSTkFMX01FTV9TTE9UUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfczM5MC5oLTMyLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3MzOTAuaDozMzojZGVmaW5lIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFMgMVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3MzOTAuaC0zNC1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTcxLS8qIG1lbW9yeSBzbG90cyB0aGF0IGFyZSBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6NzI6I2RlZmluZSBLVk1fSU5URVJOQUxfTUVNX1NMT1RTIDNcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNzMtXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTcwND1ib29sIGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSk7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTcwNi0jaWZuZGVmIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFNcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDo3MDc6I2RlZmluZSBLVk1fSU5URVJOQUxfTUVNX1NMT1RTIDBcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC03MDgtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MTcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW50ZXJuYWwgTXVzaW5ncyBvbiBLVk0gTWVtb3J5IFNsb3RzKioKCk9rYXksIHNvIGxldCYjMzk7cyBzZWUuICBgS1ZNX1VTRVJfTUVNX1NMT1RTYCBpcyBkZWZpbmVkIGFzIDMyNzY3IG1pbnVzIDMsIHJlc3VsdGluZyBpbiAzMjc2NCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHg4Ni4gIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgZnVuY3Rpb24sIGFuZCB0aGVyZSYjMzk7cyBhIGNoZWNrIGluIHRoZXJlLiBJdCYjMzk7cyB1c2luZyBgV0FSTl9PTl9PTkNFYCB3aGljaCB3aWxsIG9ubHkgd2FybiwgaXQgc2VlbXMuCgpgYGBjCglpZiAoV0FSTl9PTl9PTkNFKG1lbS0mZ3Q7c2xvdCAmbHQ7IEtWTV9VU0VSX01FTV9TTE9UUykpCgkJcmV0dXJuIC1FSU5WQUw7CmBgYAoKSG9sZCBvbiwgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgc3BlY2lmaWNhbGx5IGZvciAqaW50ZXJuYWwqIG1lbXNsb3RzLiAgUmlnaHQsIGludGVybmFsIG1lbXNsb3RzIGhhdmUgc2xvdCBJRHMgdGhhdCBhcmUgKmdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byogYEtWTV9VU0VSX01FTV9TTE9UU2AuIFRoYXQmIzM5O3MgdGhlIGtleSBkaXN0aW5jdGlvbi4gQnV0LCBgbWVtLSZndDtzbG90YCBpcyBkZWZpbmVkIGFzIGEgYHUzMmAuLi4gbm93IGxldCBtZSByZW1lbWJlciB3aGF0IEkgZGlkIHdpdGggYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5OTM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozk5Mzg6XHR2b2lkIF9fdXNlciAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXG45OTM5Olx0XHRcdFx0XHQgICAgICB1MzIgc2l6ZSlcbjk5NDA6XHR7XG45OTQxOlx0XHRpbnQgaSwgcjtcbjk5NDI6XHRcdHVuc2lnbmVkIGxvbmcgaHZhLCBvbGRfbnBhZ2VzO1xuOTk0MzpcdFx0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTtcbjk5NDQ6XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG45OTQ1Olx0XG45OTQ2Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbjk5NDc6XHRcbjk5NDg6XHRcdGlmIChXQVJOX09OKGlkIFx1MDAzZT0gS1ZNX01FTV9TTE9UU19OVU0pKVxuOTk0OTpcdFx0XHRyZXR1cm4gRVJSX1BUUl9VU1IoLUVJTlZBTCk7XG45OTUwOlx0XG45OTUxOlx0XHRzbG90ID0gaWRfdG9fbWVtc2xvdChzbG90cywgaWQpO1xuOTk1MjpcdFx0aWYgKHNpemUpIHtcbjk5NTM6XHRcdFx0aWYgKHNsb3QgXHUwMDI2XHUwMDI2IHNsb3QtXHUwMDNlbnBhZ2VzKVxuOTk1NDpcdFx0XHRcdHJldHVybiBFUlJfUFRSX1VTUigtRUVYSVNUKTtcbjk5NTU6XHRcbjk5NTY6XHRcdFx0Lypcbjk5NTc6XHRcdFx0ICogTUFQX1NIQVJFRCB0byBwcmV2ZW50IGludGVybmFsIHNsb3QgcGFnZXMgZnJvbSBiZWluZyBtb3ZlZFxuOTk1ODpcdFx0XHQgKiBieSBmb3JrKCkvQ09XLlxuOTk1OTpcdFx0XHQgKi9cbjk5NjA6XHRcdFx0aHZhID0gdm1fbW1hcChOVUxMLCAwLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuOTk2MTpcdFx0XHRcdCAgICAgIE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTLCAwKTtcbjk5NjI6XHRcdFx0aWYgKElTX0VSUl9WQUxVRShodmEpKVxuOTk2MzpcdFx0XHRcdHJldHVybiAodm9pZCBfX3VzZXIgKilodmE7XG45OTY0Olx0XHR9IGVsc2Uge1xuOTk2NTpcdFx0XHRpZiAoIXNsb3QgfHwgIXNsb3QtXHUwMDNlbnBhZ2VzKVxuOTk2NjpcdFx0XHRcdHJldHVybiBOVUxMO1xuOTk2NzpcdFxuOTk2ODpcdFx0XHRvbGRfbnBhZ2VzID0gc2xvdC1cdTAwM2VucGFnZXM7XG45OTY5Olx0XHRcdGh2YSA9IHNsb3QtXHUwMDNldXNlcnNwYWNlX2FkZHI7XG45OTcwOlx0XHR9XG45OTcxOlx0XG45OTcyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fYXJjaF9ucl9tZW1zbG90X2FzX2lkcyhrdm0pOyBpJiM0MzsmIzQzOykge1xuOTk3MzpcdFx0XHRzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiBtO1xuOTk3NDpcdFxuOTk3NTpcdFx0XHRtLnNsb3QgPSBpZCB8IChpIFx1MDAzY1x1MDAzYyAxNik7XG45OTc2Olx0XHRcdG0uZmxhZ3MgPSAwO1xuOTk3NzpcdFx0XHRtLmd1ZXN0X3BoeXNfYWRkciA9IGdwYTtcbjk5Nzg6XHRcdFx0bS51c2Vyc3BhY2VfYWRkciA9IGh2YTtcbjk5Nzk6XHRcdFx0bS5tZW1vcnlfc2l6ZSA9IHNpemU7XG45OTgwOlx0XHRcdHIgPSBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoa3ZtLCBcdTAwMjZtKTtcbjk5ODE6XHRcdFx0aWYgKHIgXHUwMDNjIDApXG45OTgyOlx0XHRcdFx0cmV0dXJuIEVSUl9QVFJfVVNSKHIpO1xuOTk4MzpcdFx0fVxuOTk4NDpcdFxuOTk4NTpcdFx0aWYgKCFzaXplKVxuOTk4NjpcdFx0XHR2bV9tdW5tYXAoaHZhLCBvbGRfbnBhZ2VzICogUEFHRV9TSVpFKTtcbjk5ODc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyB0aGUgS1ZNIE1lbW9yeSBTbG90IExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoYXQgYG0uc2xvdCA9IGlkIHwgKGkgJmx0OyZsdDsgMTYpO2AgbGluZS4uLiBSaWdodCwgdGhlIGFkZHJlc3Mgc3BhY2UgSUQgaXMgcGFja2VkIGludG8gdGhlIHVwcGVyIDE2IGJpdHMgb2YgdGhlIHNsb3QuIFNvIGBtZW0tJmd0O3Nsb3RgIGNhbiBpbmRlZWQgYmUgdGhpcyBjb21iaW5lZCB2YWx1ZSwgYGlkIHwgKGkgJmx0OyZsdDsgMTYpYC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBpZiBgaWAgaXMgZ3JlYXRlciB0aGFuIDAsIGV2ZW4gYSB2YWxpZCAqYmFzZSogSUQsIGlmIGxlc3MgdGhhbiBgS1ZNX1VTRVJfTUVNX1NMT1RTYCwgd2lsbCByZXN1bHQgaW4gYG1lbS0mZ3Q7c2xvdGAgYmVpbmcgYCZndDs9IEtWTV9VU0VSX01FTV9TTE9UU2AuCgpOb3csIHRoZSBjaGVjayBpbiBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YDoKCmBgYGMKCWlmIChXQVJOX09OX09OQ0UobWVtLSZndDtzbG90ICZsdDsgS1ZNX1VTRVJfTUVNX1NMT1RTKSkKCQlyZXR1cm4gLUVJTlZBTDsKYGBgCgpJZiB0aGUgYmFzZSBgaWRgIGlzIGFuIGludGVybmFsIG1lbXNsb3QgSUQgKG1lYW5pbmcgaXQmIzM5O3MgYWxyZWFkeSBgJmd0Oz0gS1ZNX1VTRVJfTUVNX1NMT1RTYCksIHRoZW4gYG0uc2xvdGAgd2lsbCAqYWx3YXlzKiBwYXNzIHRoZSBjaGVjayBiZWNhdXNlIGV2ZW4gd2l0aCBpPTAgdGhlIG1lbW9yeSBzbG90IGlzIGFuIGludGVybmFsIG1lbXNsb3QuIEV2ZW4gaWYgaSBpcyBub3QgMCwgaXQmIzM5O3Mgc3RpbGwgYW4gaW50ZXJuYWwgbWVtc2xvdC4gQnV0IGlmIGkgaXMgMCwgdGhlIGNoZWNrIGl0c2VsZiBkb2VzbiYjMzk7dCBuZWVkIHRoZSBjYXN0LiBTbyB3aHkgZG8gd2UgZXZlbiBuZWVkIHRoZSBgKHUxNiltZW0tJmd0O3Nsb3RgIGNhc3Q/CgpBaCEgR290IGl0LiBUaGUgY2FzdCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgKm1hc2tzKiB0aGUgdXBwZXIgMTYgYml0cywgZXNzZW50aWFsbHkgZXh0cmFjdGluZyB0aGUgb3JpZ2luYWwgYGlkYC4gVGhlIGNoZWNrIGlzbiYjMzk7dCB2ZXJpZnlpbmcgdGhlIGZ1bGwgYG1lbS0mZ3Q7c2xvdGAgdmFsdWUsIGl0JiMzOTtzIHZhbGlkYXRpbmcgdGhhdCB0aGUgKmJhc2UqIElEIGlzIGFuIGludGVybmFsIG1lbXNsb3QgSUQuIElmIGBtZW0tJmd0O3Nsb3RgIHdlcmUganVzdCBgaWRgIGFuZCBgaSA9IDBgLCB0aGUgdGVzdCBpcyB0cml2aWFsLiBJZiBgbWVtLSZndDtzbG90YCB3ZXJlIGBpZCB8IChpICZsdDsmbHQ7IDE2KWAsIHRoZW4sIGFuZCBgaWRgIHdhcyBhICp1c2VyKiBzbG90LCB0aGVuIHdlIHdvdWxkIG5lZWQgdGhlIHVwcGVyIGJpdHMgc3RyaXBwZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGlzICpiYXNlKiBgaWRgIGlzIGludGVybmFsLiBOb3csIGlmIHNvbWVvbmUgcGFzc2VkIGFuIGludmFsaWQgdXNlciBtZW1zbG90LCB3aXRoIGkgJmd0OyAwLCB0aGUgY2hlY2sgYG1lbS0mZ3Q7c2xvdCAmbHQ7IEtWTV9VU0VSX01FTV9TTE9UU2Agd291bGQgYmUgZmFsc2UsIHdpdGhvdXQgdGhpcyBjYXN0LCBiZWNhdXNlIHRoZSB1cHBlciBiaXRzIHdvdWxkIG1ha2UgaXQgYXBwZWFyIGFzIGFuIGludGVybmFsIHNsb3Qgd2hlbiBpdCYjMzk7cyBub3QuIFRoYXQmIzM5O3MgYSBuYXN0eSB2dWxuZXJhYmlsaXR5IQoKT2theSwgYnV0IHdhaXQsIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGlzIGludGVybmFsLiBLVk0gaXRzZWxmIGlzIHRoZSBjYWxsZXIuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIGRvIHRoYXQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jPTMyNDE9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYy0zMzUxLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM6MzM1MjpcdFx0S1ZNX0JVR19PTihrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoa3ZtLCBcdTAwMjZmYWtlX21lbXNsb3QpLCBrdm0pO1xuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYy0zMzUzLVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05OTM4PXZvaWQgX191c2VyICogX194ODZfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgaWQsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk3OS1cdFx0bS5tZW1vcnlfc2l6ZSA9IHNpemU7XG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk4MDpcdFx0ciA9IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFx1MDAyNm0pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTk5ODEtXHRcdGlmIChyIFx1MDAzYyAwKVxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjQyPWVudW0ga3ZtX21yX2NoYW5nZSB7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNDgtXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTI0OTppbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMjUwLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgKm1lbSk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xOTk1PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjctXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMjg6aW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjktXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEzOC19XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMzk6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxNDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NDEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1ZNIE1lbW9yeSBTbG90IENvbnVuZHJ1bSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgcnVubmluZyB0aHJvdWdoIG15IG1pbmQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgbWVtb3J5IHNsb3RzIGFyZSBiZWluZyBtYW5hZ2VkIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBzZWUgdGhhdCBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBnZXRzIGNhbGxlZCBieSBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpOb3csIGluIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAsIHRoZXJlJiMzOTtzIHRoaXMgY2hlY2s6IGBpZiAoV0FSTl9PTihpZCAmZ3Q7PSBLVk1fTUVNX1NMT1RTX05VTSkpIHJldHVybiBFUlJfUFRSX1VTUigtRUlOVkFMKTtgLiBJdCYjMzk7cyBlbnN1cmluZyB0aGUgbWVtc2xvdCBJRCBpc24mIzM5O3QgYmV5b25kIHRoZSAqdG90YWwqIG51bWJlciBvZiBzbG90cy4gRmluZSwgbWFrZXMgc2Vuc2UuIEJ1dC4uLiBhbmQgaGVyZSYjMzk7cyB0aGUgYml0IHRoYXQmIzM5O3MgYm90aGVyaW5nIG1lLi4uIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSBhIGd1YXJkIGZvciBlbnN1cmluZyB0aGUgSUQgaXMgKmJlbG93KiBgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gIFRoYXQmIzM5O3MgbXkgZmlyc3QgcG9pbnQgb2YgY29uY2Vybi4KClRoZW4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGlzIGNhbGxlZC4gSSBzZWUgY2FsbHMgd2l0aCBgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1RgLCBgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVGAsIGFuZCBgVFNTX1BSSVZBVEVfTUVNU0xPVGAuIFRoZXNlIGFyZSBhbGwgaW50ZXJuYWwgbWVtc2xvdHMuIE1ha2VzIHNlbnNlOyB0aGVzZSBhcmUgcHJpdmF0ZSB0byB0aGUgaHlwZXJ2aXNvciYjMzk7cyBuZWVkcy4KCkJ1dCBoZXJlJiMzOTtzIHRoZSBxdWVzdGlvbiB0aGF0IGtlZXBzIGNpcmNsaW5nOiB3aGF0IGhhcHBlbnMgaWYsIGZvciBzb21lIHJlYXNvbiAoYWNjaWRlbnRhbCBvciBvdGhlcndpc2UpLCBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGdldHMgY2FsbGVkIHdpdGggYSB1c2VyIG1lbXNsb3QgSUQ/IFRoZSBjb2RlIGRvZXNuJiMzOTt0IHNlZW0gdG8gZXhwbGljaXRseSBwcmV2ZW50IGl0LiBDb3VsZCB0aGlzIGxlYWQgdG8gc29tZSBraW5kIG9mIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVuaW50ZW5kZWQgYmVoYXZpb3I/IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBlbHNlIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAgaXMgdXNlZC4gVGhpcyBmZWVscyBsaWtlIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19feDg2X3NldF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz05ODQzPWludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTE2LS8qKlxuYXJjaC94ODYva3ZtL3g4Ni5jOjk5MTc6ICogX194ODZfc2V0X21lbW9yeV9yZWdpb246IFNldHVwIEtWTSBpbnRlcm5hbCBtZW1vcnkgc2xvdFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MTgtICpcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkzNy0gKi9cbmFyY2gveDg2L2t2bS94ODYuYzo5OTM4OnZvaWQgX191c2VyICogX194ODZfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgaWQsIGdwYV90IGdwYSxcbmFyY2gveDg2L2t2bS94ODYuYy05OTM5LVx0XHRcdFx0ICAgICAgdTMyIHNpemUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5ODktfVxuYXJjaC94ODYva3ZtL3g4Ni5jOjk5OTA6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKTtcbmFyY2gveDg2L2t2bS94ODYuYy05OTkxLVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDAxND12b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyMi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjM6XHRcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1QsXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjQtXHRcdFx0XHRcdDAsIDApO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI1Olx0XHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QsXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjYtXHRcdFx0XHRcdDAsIDApO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI3Olx0XHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIFRTU19QUklWQVRFX01FTVNMT1QsIDAsIDApO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI4LVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIENhbGxlcnMgb2YgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCBpcyBiZWluZyBpbnZva2VkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaG8mIzM5O3MgdXNpbmcgdGhpcyB0aGluZz8mIzM0OyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBwYXRocywgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIGJlc2lkZXMgdGhlIG9uZXMgSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBlbXBsb3llZC4gSXMgdGhpcyBhIGNvbW1vbiB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgcHVsbGVkIGludG8gc2V2ZXJhbCBkaWZmZXJlbnQgYXJlYXMgb2YgdGhlIGNvZGUgYmFzZSwgb3IgaXMgaXQgbW9yZSBpc29sYXRlZD8gV2hhdCBtb2R1bGVzIG9yIHN1YnN5c3RlbXMgYXJlIGxldmVyYWdpbmcgaXQ/IEtub3dpbmcgdGhlIGFuc3dlciB0byB0aGF0IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBpbmZvcm1hdGlvbiB3aGVuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBmcm9tIGNoYW5nZXMgdG8gdGhlIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAgZnVuY3Rpb24uIElkZW50aWZ5aW5nIHdoYXQgb3RoZXIgYXJlYXMgb2YgY29kZSBjYWxsIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAgaXMgdGhlIHJpZ2h0IGZpcnN0IHN0ZXAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyB1c2FnZSBiZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyIHdpdGggdGhpcyB0YXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbGFwaWMuYz0yOTEwPWludCBrdm1fYWxsb2NfYXBpY19hY2Nlc3NfcGFnZShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmMtMjkxOS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jOjI5MjA6XHRodmEgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxuYXJjaC94ODYva3ZtL2xhcGljLmMtMjkyMS1cdFx0XHRcdCAgICAgIEFQSUNfREVGQVVMVF9QSFlTX0JBU0UsIFBBR0VfU0laRSk7XG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmM9MjkzMT12b2lkIGt2bV9pbmhpYml0X2FwaWNfYWNjZXNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDItXHRpZiAoa3ZtLVx1MDAzZWFyY2guYXBpY19hY2Nlc3NfbWVtc2xvdF9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzoyOTQzOlx0XHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDQtXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz00MDI3PXN0YXRpYyBpbnQgaW5pdF9ybW9kZV9pZGVudGl0eV9tYXAoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDA0Mi1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NDA0MzpcdHVhZGRyID0gX194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00MDQ0LVx0XHRcdFx0XHRJREVOVElUWV9QQUdFVEFCTEVfUFJJVkFURV9NRU1TTE9ULFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NTI3ND1pbnQgdm14X3NldF90c3NfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBhZGRyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTI4MS1cdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1MjgyOlx0cmV0ID0gX194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBUU1NfUFJJVkFURV9NRU1TTE9ULCBhZGRyLFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MjgzLVx0XHRcdFx0ICAgICAgUEFHRV9TSVpFICogMyk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTk4NDM9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MTYtLyoqXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxNzogKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbjogU2V0dXAgS1ZNIGludGVybmFsIG1lbW9yeSBzbG90XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxOC0gKlxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTM3LSAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jOjk5Mzg6dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MzktXHRcdFx0XHQgICAgICB1MzIgc2l6ZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk4OS19XG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk5MDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX194ODZfc2V0X21lbW9yeV9yZWdpb24pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTk5OTEtXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDE0PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDIyLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyMzpcdFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVCxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNC1cdFx0XHRcdFx0MCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjU6XHRcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVCxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNi1cdFx0XHRcdFx0MCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjc6XHRcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgVFNTX1BSSVZBVEVfTUVNU0xPVCwgMCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjgtXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5oPTUyNj1pbnQga3ZtX2dldF9ucl9wZW5kaW5nX25taXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuaC01MjctXG5hcmNoL3g4Ni9rdm0veDg2Lmg6NTI4OnZvaWQgX191c2VyICpfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxuYXJjaC94ODYva3ZtL3g4Ni5oLTUyOS1cdFx0XHRcdCAgICAgdTMyIHNpemUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBSZWdpb24gQXNzaWdubWVudCBpbiB0aGUgeDg2IEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG1lbW9yeSByZWdpb25zIGFyZSBoYW5kbGVkIGluIHRoaXMgeDg2IGNvbnRleHQsIHNwZWNpZmljYWxseSB0aGUgdXNlIG9mIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBvbmx5IGV2ZXIgY2FsbGVkIHdpdGggaW50ZXJuYWwgbWVtc2xvdCBJRHMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcXVlc3Rpb246IGlmIHRoYXQmIzM5O3MgdGhlICpvbmx5KiBjYXNlLCBkb2VzbiYjMzk7dCB0aGF0IG1ha2UgYSBjZXJ0YWluIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBhbHdheXMgdHJ1ZT8KCkxldCBtZSB0aGlua+KApiB0aGUgY29kZSBoYXMgYGlkICZndDs9IEtWTV9VU0VSX01FTV9TTE9UU2AuIFJpZ2h0LiBJZiB0aGUgaW5wdXQgaXMgYWx3YXlzIGFuIGludGVybmFsIG1lbXNsb3QgSUQsIHRoZW4gaXNuJiMzOTt0IHRoZSBjb21wYXJpc29uICphbHdheXMqIGdvaW5nIHRvIGV2YWx1YXRlIHRvIHRydWU/IExldCYjMzk7cyBjaGVjayB0aGUgZGVmaW5pdGlvbnMuIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIGRlZmluZWQgYXMgYEtWTV9NRU1fU0xPVFNfTlVNIC0gS1ZNX0lOVEVSTkFMX01FTV9TTE9UU2AuIE9rYXksIHNvIGBLVk1fTUVNX1NMT1RTX05VTWAgaXMgMzI3NjcsIGFuZCBgS1ZNX0lOVEVSTkFMX01FTV9TTE9UU2AgaXMgMy4gVGhhdCBtZWFucyBgS1ZNX1VTRVJfTUVNX1NMT1RTYCBpcyAzMjc2NC4gCgpTbyB0aGUgaW50ZXJuYWwgbWVtc2xvdCBJRHMgYXJlIDMyNzY0LCAzMjc2NSwgYW5kIDMyNzY2LiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodC4gVGhhdCBjb21wYXJpc29uICpzaG91bGQqIGFsd2F5cyBiZSB0cnVlLiBCdXQgd2FpdOKApiBIb3cgYXJlIHRoZXNlIGludGVybmFsIElEcyBldmVuICpkZWZpbmVkKj8gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSBob3cgdGhlc2UgbWVtc2xvdCBJRHMgYXJlIHNldCB1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzIHRvIGJlIHN1cmUgdGhlcmUmIzM5O3Mgbm90IHNvbWV0aGluZyBJJiMzOTttIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vdm14Lmg9MjA0PWVudW0gdm1jc19maWVsZCB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgtNTE2LSNkZWZpbmUgVFNTX1BSSVZBVEVfTUVNU0xPVFx0XHRcdChLVk1fVVNFUl9NRU1fU0xPVFMgJiM0MzsgMClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oOjUxNzojZGVmaW5lIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9UXHQoS1ZNX1VTRVJfTUVNX1NMT1RTICYjNDM7IDEpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaC01MTgtI2RlZmluZSBJREVOVElUWV9QQUdFVEFCTEVfUFJJVkFURV9NRU1TTE9UXHQoS1ZNX1VTRVJfTUVNX1NMT1RTICYjNDM7IDIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDcwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2xvdCBBc3NpZ25tZW50IExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNsb3QgYXNzaWdubWVudCwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBpZGAgaXMgZGVmaW5lZCBhcyBgS1ZNX1VTRVJfTUVNX1NMT1RTICYjNDM7IFhgLiBUaGF0IG1lYW5zIGBpZGAgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gVGhlbiwgYG0uc2xvdGAgaXMgY2FsY3VsYXRlZCBhcyBgaWQgfCAoaSAmbHQ7Jmx0OyAxNilgLiBHaXZlbiB0aGF0IGBpZGAgaXMgYXQgbGVhc3QgYEtWTV9VU0VSX01FTV9TTE9UU2AsIHRoZSByZXN1bHQgYG0uc2xvdGAgd2lsbCBhbHdheXMgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoYXQgdmFsdWUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGBpYC4KCkhtbSwgdGhpcyByYWlzZXMgYSBxdWVzdGlvbi4gVGhlIGNvZGUgaGFzIGBXQVJOX09OX09OQ0UobWVtLSZndDtzbG90ICZsdDsgS1ZNX1VTRVJfTUVNX1NMT1RTKWAuIElmIGBtLnNsb3RgIGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYEtWTV9VU0VSX01FTV9TTE9UU2AsIHRoZW4gdGhhdCBgV0FSTl9PTl9PTkNFYCB3aWxsICpuZXZlciogdHJpZ2dlciEgQW5kIHRoYXQmIzM5O3MgZXZlbiB3aXRob3V0IGNvbnNpZGVyaW5nIGFueSBjYXN0LgoKV2FpdCwgSSBuZWVkIHRvIGNvbnNpZGVyIGEgcG9zc2libGUgZWRnZSBjYXNlOiBDb3VsZCBgbWVtLSZndDtzbG90YCBzb21laG93IGJlIG5lZ2F0aXZlPyBObywgaXQmIzM5O3MgYSBgdTMyYCwgc28gaXQmIzM5O3MgdW5zaWduZWQuIEl0JiMzOTtzIGFsd2F5cyBhIHBvc2l0aXZlIG9yIHplcm8gdmFsdWUuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIGEgY291cGxlIG9mIGV4YW1wbGVzLiBMZXQmIzM5O3Mgc2F5IGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIDMyNzY0LiBJZiBgaWRgIGlzIGBLVk1fVVNFUl9NRU1fU0xPVFMgJiM0MzsgWGAsIHRoYXQgbWVhbnMgYGlkYCBpcyAzMjc2NCAmIzQzOyBYLgoKSWYgYGlgIGlzIDAsIHRoZW4gYG0uc2xvdGAgaXMganVzdCAzMjc2NCAmIzQzOyBYLgpJZiBgaWAgaXMgMSwgdGhlbiBgbS5zbG90YCBpcyBgKDMyNzY0ICYjNDM7IFgpIHwgKDEgJmx0OyZsdDsgMTYpYCB3aGljaCByZXN1bHRzIGluIGA2NTUzNiAmIzQzOyAzMjc2NCAmIzQzOyBYYCB3aGljaCBpcyBgOTgzMDAgJiM0MzsgWGAuCgpJbiBib3RoIG9mIHRoZXNlIGNhc2VzLCBgbS5zbG90YCBpcyBjbGVhcmx5IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTYCAoOTgzMDAgaXMgZGVmaW5pdGVseSAmZ3Q7PSAzMjc2NCkuCgpTbywgdGhlbiwgd2h5IGRpZCB0aGV5IGFkZCB0aGUgYCh1MTYpYCBjYXN0PyBJdCBzZWVtcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4gSSBzaG91bGQgcHJvYmFibHkgcmUtZXhhbWluZSBob3cgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgd29ya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTI4Olx0aW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4yMTI5Olx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxuMjEzMDpcdHtcbjIxMzE6XHRcdGlmIChXQVJOX09OX09OQ0UoKHUxNiltZW0tXHUwMDNlc2xvdCBcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKSlcbjIxMzI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMTMzOlx0XG4yMTM0Olx0XHRpZiAoV0FSTl9PTl9PTkNFKG1lbS1cdTAwM2VmbGFncykpXG4yMTM1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjEzNjpcdFxuMjEzNzpcdFx0cmV0dXJuIGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIG1lbSk7XG4yMTM4Olx0fVxuMjEzOTpcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2ludGVybmFsX21lbXNsb3QpO1xuMjE0MDpcdFxuMjE0MTpcdHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbjIxNDI6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxuMjE0MzpcdHtcbjIxNDQ6XHRcdGlmICgodTE2KW1lbS1cdTAwM2VzbG90IFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTKVxuMjE0NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjIxNDY6XHRcbjIxNDc6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Nzc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlZ1bG5lcmFiaWxpdHkgRGlzY292ZXJlZCBpbiBLVk0gTWVtb3J5IFJlZ2lvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbmAgYW5kIGltbWVkaWF0ZWx5IHNwb3QgYSBwb3RlbnRpYWwgZmxhdyBpbiBob3cgaXQgaGFuZGxlcyB0aGUgYG1lbS0mZ3Q7c2xvdGAgZmllbGQuIFRoZSBjb2RlIGNhc3RzIGBtZW0tJmd0O3Nsb3RgIHRvIGEgYHUxNmAgYmVmb3JlIGNoZWNraW5nIGlmIGl0JiMzOTtzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UsIHNwZWNpZmljYWxseSwgYCh1MTYpbWVtLSZndDtzbG90ICZndDs9IEtWTV9VU0VSX01FTV9TTE9UU2AuIFRoaXMgc2VlbXMgZXhwbG9pdGFibGUuIFVzZXIgc3BhY2UgY2FuIGVmZmVjdGl2ZWx5IHNldCB0aGUgdXBwZXIgMTYgYml0cyBvZiBgbWVtLSZndDtzbG90YCB0byByZXByZXNlbnQgYW4gYWRkcmVzcyBzcGFjZSBJRC4gSWYgYSB1c2VyIHByb3ZpZGVzIGBtZW0tJmd0O3Nsb3QgPSAwIHwgKDEgJmx0OyZsdDsgMTYpYCwgdGhlIGNhc3QgdHJ1bmNhdGVzIHRoaXMgdmFsdWUgZG93biB0byAwLCB3aGljaCBpcyB0aGVuLCBpbmNvcnJlY3RseSwgZGV0ZXJtaW5lZCB0byBiZSB2YWxpZC4KClRoaXMgbWVhbnMgdXNlciBzcGFjZSBjYW4gcG90ZW50aWFsbHkgbWFuaXB1bGF0ZSBtZW1vcnkgcmVnaW9ucyBhY3Jvc3MgZGlmZmVyZW50IGFkZHJlc3Mgc3BhY2VzLiBUaGUgcHJvYmxlbSBsaWVzIHdpdGggdGhpcyBjYXN0IGFuZCB0aGUgc3Vic2VxdWVudCBib3VuZHMgY2hlY2suIEkmIzM5O20gZm9jdXNpbmcgb24gYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgYXMgdGhlIHRhcmdldCBmb3IgZXhwbG9pdGF0aW9uLiBOb3csIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGlzIHN1cHBvc2VkbHkgb25seSBmb3IgKmludGVybmFsKiBtZW1zbG90cy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0IHNob3VsZCBiZSBpbnRlcm5hbGx5IGNvbnNpc3RlbnQsIGJ1dCB0aGUgbW9yZSBJIGxvb2sgYXQgdGhpcy4uLgoKSWYgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgZ2V0cyBjYWxsZWQgd2l0aCBgbWVtLSZndDtzbG90YCBiZWluZyBgMCB8ICgxICZsdDsmbHQ7IDE2KWAsIHRoZW4gd2l0aG91dCB0aGUgY2FzdCwgdGhpcyBiZWNvbWVzIDY1NTM2LiBOb3csIDY1NTM2IGlzICpub3QqIGxlc3MgdGhhbiBgS1ZNX1VTRVJfTUVNX1NMT1RTYCEgU28gdGhlIGJvdW5kcyBjaGVjayAqc2hvdWxkKiBwcmV2ZW50IHRoZSBpc3N1ZSEKCkhvd2V2ZXIsIHRoZSB2dWxuZXJhYmxlIGNvZGUgaW4gYGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbmAgYWxsb3dzIHRoZSB1c2VyIHRvIHRyaWNrIHRoZSBzeXN0ZW0gd2l0aCBhIGNhc3QgdG8gdTE2IGFuZCBwb3RlbnRpYWxseSBzZXQgbWVtb3J5IHJlZ2lvbnMgaW4gYSBkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZSwgc3BlY2lmaWNhbGx5LCBhIHVzZXIgbWVtc2xvdCB3aXRoIElEIDAgaW4gYSBub24temVybyBhZGRyZXNzIHNwYWNlLiBUaGlzIGlzIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eSBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgYSB1c2VyIHByb2Nlc3MgY291bGQgcG90ZW50aWFsbHkgb3ZlcndyaXRlIGNyaXRpY2FsIEtWTSBtZW1vcnkuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGlzICphY3R1YWxseSogdXNlZC4gRXZlbiBpZiB0aGUgY29kZSAqc2hvdWxkKiBiZSBzYWZlLCBpZiBpdCYjMzk7cyB1c2VkIGluIGFuIHVuZXhwZWN0ZWQgbWFubmVyLCB0aGUgdnVsbmVyYWJpbGl0eSBpcyBzdGlsbCBwcmVzZW50LiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gYWxsIGNhbGxzIHRvIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSB0aGlzIGNvdWxkIGJlIGV4cGxvaXRlZCBieSBleHRlcm5hbCBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM9MzI0MT1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTEtXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzozMzUyOlx0XHRLVk1fQlVHX09OKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFx1MDAyNmZha2VfbWVtc2xvdCksIGt2bSk7XG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTMtXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTk5Mzg9dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTc5LVx0XHRtLm1lbW9yeV9zaXplID0gc2l6ZTtcbmFyY2gveDg2L2t2bS94ODYuYzo5OTgwOlx0XHRyID0ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KGt2bSwgXHUwMDI2bSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk4MS1cdFx0aWYgKHIgXHUwMDNjIDApXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTEyNDI9ZW51bSBrdm1fbXJfY2hhbmdlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI0OC1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxMjQ5OmludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNTAtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKTtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE5OTU9c3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyNy1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEyODppbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyOS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yMTM4LX1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEzOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjE0MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MTUKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBDYWxsIFNpdGVzKioKClJpZ2h0LCBzbyBJJiMzOTttIG5hcnJvd2luZyBkb3duIHRoZSBwb3RlbnRpYWwgY2FsbCBzaXRlcy4gSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgb25seSB0d28gZnVuY3Rpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGNhbGxpbmcgaW50byB3aGF0ZXZlciYjMzk7cyBiZWluZyBmbGFnZ2VkOiBgYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzozMzUyYCBhbmQgYGFyY2gveDg2L2t2bS94ODYuYzo5OTgwYC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgSSYjMzk7ZCBwcm9iYWJseSB3YW50IHRvIGRpZyBpbiB0byB0aGUgczM5MCBjb2RlIGZpcnN0LCBzbyBsZXQmIzM5O3MgY2hlY2sgYGFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM0MDpcdFxuMzM0MTpcdFx0aWYgKHR5cGUgXHUwMDI2IEtWTV9WTV9TMzkwX1VDT05UUk9MKSB7XG4zMzQyOlx0XHRcdHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIGZha2VfbWVtc2xvdCA9IHtcbjMzNDM6XHRcdFx0XHQuc2xvdCA9IEtWTV9TMzkwX1VDT05UUk9MX01FTVNMT1QsXG4zMzQ0Olx0XHRcdFx0Lmd1ZXN0X3BoeXNfYWRkciA9IDAsXG4zMzQ1Olx0XHRcdFx0LnVzZXJzcGFjZV9hZGRyID0gMCxcbjMzNDY6XHRcdFx0XHQubWVtb3J5X3NpemUgPSBBTElHTl9ET1dOKFRBU0tfU0laRSwgX1NFR01FTlRfU0laRSksXG4zMzQ3Olx0XHRcdFx0LmZsYWdzID0gMCxcbjMzNDg6XHRcdFx0fTtcbjMzNDk6XHRcbjMzNTA6XHRcdFx0Lyogb25lIGZsYXQgZmFrZSBtZW1zbG90IGNvdmVyaW5nIHRoZSB3aG9sZSBhZGRyZXNzLXNwYWNlICovXG4zMzUxOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuMzM1MjpcdFx0XHRLVk1fQlVHX09OKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFx1MDAyNmZha2VfbWVtc2xvdCksIGt2bSk7XG4zMzUzOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4zMzU0Olx0XHRcdHNldF9iaXQoR01BUF9GTEFHX0lTX1VDT05UUk9MLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWZsYWdzKTtcbjMzNTU6XHRcdH0gZWxzZSB7XG4zMzU2Olx0XHRcdHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsZSA9IGRlcmVmZXJlbmNlX2FzY2Uoa3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlKTtcbjMzNTc6XHRcbjMzNTg6XHRcdFx0Y3JzdF90YWJsZV9pbml0KCh2b2lkICopdGFibGUsIF9DUlNURV9IT0xFKHRhYmxlLVx1MDAzZWNyc3Rlc1swXS5oLnR0KS52YWwpO1xuMzM1OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNX1MzOTBfVUNPTlRST0xfTUVNU0xPVCoqCgpPa2F5LCBzbyBJJiMzOTttIHN0YXJpbmcgYXQgdGhpcyBgS1ZNX1MzOTBfVUNPTlRST0xfTUVNU0xPVGAgY29uc3RhbnQgYW5kIGltbWVkaWF0ZWx5IHRoZSBxdWVzdGlvbiBoaXRzOiB3aGF0ICpleGFjdGx5KiBkb2VzIHRoaXMgcmVwcmVzZW50IHdpdGhpbiB0aGUgczM5MCBLVk0gYXJjaGl0ZWN0dXJlPyBJdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBuYW1lIGFsb25lLCBhbmQgd2l0aCB0aGUgbnVhbmNlcyBvZiBzMzkwJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGF0IG1lYW5zIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLiBJcyB0aGlzIHRpZWQgdG8gdGhlIFVDT05UUk9MIG1lY2hhbmlzbSBmb3IgZ3Vlc3QgYWNjZXNzIHRvIGhvc3QgcmVzb3VyY2VzPyBJZiBzbywgaXMgdGhpcyBhIHNwZWNpZmljIG1lbW9yeSBzbG90IGNvbmZpZ3VyYXRpb24sIGEgaGFuZGxlLCBvciBzb21ldGhpbmcgZW50aXJlbHkgZGlmZmVyZW50IHdpdGhpbiB0aGUgczM5MCBjb250ZXh0PyBUaGlzIHN1Z2dlc3RzIGEgZGVlcCBkaXZlIGludG8gdGhlIHJlbGV2YW50IEtWTSBzb3VyY2UgY29kZSwgcGFydGljdWxhcmx5IHRoZSBzMzkwLXNwZWNpZmljIHBhcnRzLiBJIG5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgaW4gYGt2bV9zMzkwLmhgIGFuZCBzZWUgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBjb250cm9sIHBhdGhzLiBBbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9uIFVDT05UUk9MIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBndWVzdCBtZW1vcnkgd291bGQgYmUgaGVscGZ1bCBhcyB3ZWxsLiBVbmRlcnN0YW5kaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGFkZHJlc3Mgc3BhY2VzLCBtZW1vcnkgcmVnaW9ucywgYW5kIHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBpcyBjcnVjaWFsLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDt3aHkmIzM0OyBhbmQgJiMzNDtob3cmIzM0OyBvZiB0aGlzIHBhcnRpY3VsYXIgY29uc3RhbnQgdG8gZ3Jhc3AgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBLVk0gb24gczM5MC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBLVk1fUzM5MF9VQ09OVFJPTF9NRU1TTE9UJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vczM5MC9zMzkwLmgtMjQtXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5oOjI1OiNkZWZpbmUgS1ZNX1MzOTBfVUNPTlRST0xfTUVNU0xPVCAoS1ZNX1VTRVJfTUVNX1NMT1RTICYjNDM7IDApXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5oLTI2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU5MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIE1lbW9yeSBTbG90IE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgS1ZNX1MzOTBfVUNPTlRST0xfTUVNU0xPVGAgaXMgZXNzZW50aWFsbHkgYW4gb2Zmc2V0LCBlcXVpdmFsZW50IHRvIGBLVk1fVVNFUl9NRU1fU0xPVFMgJiM0MzsgMGAuIEdvdCBpdC4gSW1wb3J0YW50bHksIGl0IGRvZXNuJiMzOTt0IGludm9sdmUgYW55IGFkZHJlc3Mgc3BhY2UgSUQgaW4gdGhvc2UgdG9wIDE2IGJpdHMg4oCTIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLCBJIHN1cHBvc2UuCgpTbywgaW4gdGhlIGNhc2Ugb2YgYGZha2VfbWVtc2xvdC5zbG90YCwgdGhpcyByZXNvbHZlcyBkaXJlY3RseSB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTICYjNDM7IDBgIGFzIHdlbGwuIE5vdywgdGhlIGNydWNpYWwgcGFydDogdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGBtZW0tJmd0O3Nsb3QgJmx0OyBLVk1fVVNFUl9NRU1fU0xPVFNgLiBCZWNhdXNlIGBtZW0tJmd0O3Nsb3RgICppc24mIzM5O3QqIGxlc3MgdGhhbiBgS1ZNX1VTRVJfTUVNX1NMT1RTYCwgdGhlIHdhcm5pbmcgcGF0aCBpc24mIzM5O3QgdHJpZ2dlcmVkLiBUaGF0JiMzOTtzIGdvb2QuIEl0IHN1Z2dlc3RzIHdlJiMzOTtyZSBoYW5kbGluZyB0aGlzIGNhc2UgY29ycmVjdGx5LCBvciBhdCBsZWFzdCwgdGhlIGV4aXN0aW5nIGNoZWNrcyBhcmVuJiMzOTt0IGZsYWdnaW5nIGl0IGFzIGFuIGVycm9yLgoKTm93LCBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMuIExldCYjMzk7cyBkaWcgaW50byBgYXJjaC94ODYva3ZtL3g4Ni5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgcmVsZXZhbnQgaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUgaW1wbGVtZW50YXRpb24gb2YgbWVtb3J5IHNsb3QgbWFuYWdlbWVudCB0aGF0IG1heSBiZSB1c2VmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTk3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5OTcwOlx0XHR9XG45OTcxOlx0XG45OTcyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fYXJjaF9ucl9tZW1zbG90X2FzX2lkcyhrdm0pOyBpJiM0MzsmIzQzOykge1xuOTk3MzpcdFx0XHRzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiBtO1xuOTk3NDpcdFxuOTk3NTpcdFx0XHRtLnNsb3QgPSBpZCB8IChpIFx1MDAzY1x1MDAzYyAxNik7XG45OTc2Olx0XHRcdG0uZmxhZ3MgPSAwO1xuOTk3NzpcdFx0XHRtLmd1ZXN0X3BoeXNfYWRkciA9IGdwYTtcbjk5Nzg6XHRcdFx0bS51c2Vyc3BhY2VfYWRkciA9IGh2YTtcbjk5Nzk6XHRcdFx0bS5tZW1vcnlfc2l6ZSA9IHNpemU7XG45OTgwOlx0XHRcdHIgPSBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoa3ZtLCBcdTAwMjZtKTtcbjk5ODE6XHRcdFx0aWYgKHIgXHUwMDNjIDApXG45OTgyOlx0XHRcdFx0cmV0dXJuIEVSUl9QVFJfVVNSKHIpO1xuOTk4MzpcdFx0fVxuOTk4NDpcdFxuOTk4NTpcdFx0aWYgKCFzaXplKVxuOTk4NjpcdFx0XHR2bV9tdW5tYXAoaHZhLCBvbGRfbnBhZ2VzICogUEFHRV9TSVpFKTtcbjk5ODc6XHRcbjk5ODg6XHRcdHJldHVybiAodm9pZCBfX3VzZXIgKilodmE7XG45OTg5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODMzOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbXNsb3QgSUQgQ2hlY2sgaW4gYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gLCB0aGUgYGlkYCB2YXJpYWJsZSByZXByZXNlbnRzIGFuIGludGVybmFsIG1lbXNsb3QgSUQsIGVzc2VudGlhbGx5IHN0YXJ0aW5nIGF0IGBLVk1fVVNFUl9NRU1fU0xPVFNgLiBUaGUgY29yZSBvZiB0aGUgbG9naWMgaXMgc2V0dGluZyBgbS5zbG90ID0gaWQgfCAoaSAmbHQ7Jmx0OyAxNilgLiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIHRoYXQgc2luY2UgYGlkYCBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBLVk1fVVNFUl9NRU1fU0xPVFNgLCB0aGVuIGBtLnNsb3RgIHdvdWxkICphbHdheXMqIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gVGhlcmVmb3JlLCB0aGUgY2hlY2sgYG0uc2xvdCAmbHQ7IEtWTV9VU0VSX01FTV9TTE9UU2Agd291bGQgYmUgdW5jb25kaXRpb25hbGx5IGZhbHNlLCBtYWtpbmcgdGhlIGBXQVJOX09OX09OQ0VgIHBvaW50bGVzcy4KClRoZW4sIEkgc3RhcnRlZCB0byBjb25zaWRlciB0aGUgdHlwZXMuIElmIGBtLnNsb3RgIGlzIGEgYHUzMmAgYW5kIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIDMyNzY0LCB0aGVuIGNvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIGBpZGAgaXMgMzI3NjQgYW5kIGBpYCBpcyAxLiBXZSBnZXQgYG0uc2xvdGAgaXMgYDMyNzY0IHwgKDEgJmx0OyZsdDsgMTYpYCwgd2hpY2ggaXMgOTgzMDAuICA5ODMwMCAmbHQ7IDMyNzY0IGlzIGZhbHNlLCBhcyBleHBlY3RlZC4gU28gaXQgc3RpbGwgZG9lc24mIzM5O3QgZXhwbGFpbiB0aGUgd2FybmluZy4KCkJ1dCB0aGVuLCB0aGUgcGl2b3RhbCBtb21lbnQ6IHdoYXQgaWYgdGhlIGBpZGAgKndhcyogbGVzcyB0aGFuIGBLVk1fVVNFUl9NRU1fU0xPVFNgPyBJZiBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIHdhcyBjYWxsZWQgd2l0aCBgaWQgPSAwYCwgZm9yIGV4YW1wbGUsIHRoZW4gYG0uc2xvdCA9IDAgfCAoMSAmbHQ7Jmx0OyAxNilgIGJlY29tZXMgNjU1MzYuIDY1NTM2ICZsdDsgMzI3NjQgaXMgKnN0aWxsKiBmYWxzZS4KCkFoYSEgVGhhdCYjMzk7cyB3aGVuIGl0IGhpdCBtZS4gVGhlIGNhc3QgYCh1MTYpbWVtLSZndDtzbG90YCBpcyB0aGUga2V5LiBUaGUgY2FzdCBleHRyYWN0cyB0aGUgbG93ZXIgMTYgYml0cywgd2hpY2ggaXMgdGhlIGBpZGAuIFdoZW4gd2UgaGF2ZSBgaWRgIGFzIGAwYCwgYDAgJmx0OyAzMjc2NGAgaXMgKnRydWUqLiBTbyB0aGlzIGBXQVJOX09OX09OQ0VgIHdpbGwgdHJpZ2dlciEgVGhlIGNhc3QgaXMgYWN0dWFsbHkgKmZpeGluZyogdGhlIHdhcm5pbmcgc28gaXQgdHJpZ2dlcnMgd2hlbiBpdCBzaG91bGQsIGluIHRoZSBjYXNlIG9mIGEgdXNlciBtZW1zbG90IElEIHdpdGggYSBub24temVybyBhZGRyZXNzIHNwYWNlISBUaGF0JiMzOTtzIGNsZXZlci4KCkhvd2V2ZXIsIHRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6ICpzaG91bGQqIHRoYXQgYmUgcG9zc2libGU/IFRoZSBjb2RlICpzaG91bGRuJiMzOTt0KiBiZSBjYWxsZWQgd2l0aCBzdWNoIGFuIGBpZGAgdmFsdWUsIGFzIGl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIGludGVybmFsIG1lbXNsb3QgSURzLgoKVG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAuIEkgYWxyZWFkeSBrbm93IHRoYXQgYGt2bV9hbGxvY19hcGljX2FjY2Vzc19wYWdlYCwgYGt2bV9pbmhpYml0X2FwaWNfYWNjZXNzX3BhZ2VgLCBgaW5pdF9ybW9kZV9pZGVudGl0eV9tYXBgLCBgdm14X3NldF90c3NfYWRkcmAgYW5kIGBrdm1fYXJjaF9kZXN0cm95X3ZtYCBjYWxsIHRoaXMsIHVzaW5nIHZhbHVlcyBsaWtlIGBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVGAgYW5kIG90aGVycy4gQnV0IGFyZSB0aGVyZSAqYW55KiBvdGhlciBjYWxsZXJzPyBJJiMzOTtkIGJldHRlciBiZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBjYXNlcyBJJiMzOTttIG1pc3NpbmcsIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBhIHVzZWZ1bCBhbmFseXNpcyBzbyBmYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19feDg2X3NldF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9sYXBpYy5jPTI5MTA9aW50IGt2bV9hbGxvY19hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0yOTE5LVxuYXJjaC94ODYva3ZtL2xhcGljLmM6MjkyMDpcdGh2YSA9IF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1QsXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0yOTIxLVx0XHRcdFx0ICAgICAgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSwgUEFHRV9TSVpFKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0yOTMxPXZvaWQga3ZtX2luaGliaXRfYXBpY19hY2Nlc3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmMtMjk0Mi1cdGlmIChrdm0tXHUwMDNlYXJjaC5hcGljX2FjY2Vzc19tZW1zbG90X2VuYWJsZWQpIHtcbmFyY2gveDg2L2t2bS9sYXBpYy5jOjI5NDM6XHRcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1QsIDAsIDApO1xuYXJjaC94ODYva3ZtL2xhcGljLmMtMjk0NC1cdFx0Lypcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQwMjc9c3RhdGljIGludCBpbml0X3Jtb2RlX2lkZW50aXR5X21hcChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00MDQyLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0MDQzOlx0dWFkZHIgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQwNDQtXHRcdFx0XHRcdElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01Mjc0PWludCB2bXhfc2V0X3Rzc19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGFkZHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MjgxLVx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjUyODI6XHRyZXQgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIFRTU19QUklWQVRFX01FTVNMT1QsIGFkZHIsXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUyODMtXHRcdFx0XHQgICAgICBQQUdFX1NJWkUgKiAzKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTg0Mz1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxNi0vKipcbmFyY2gveDg2L2t2bS94ODYuYzo5OTE3OiAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uOiBTZXR1cCBLVk0gaW50ZXJuYWwgbWVtb3J5IHNsb3RcbmFyY2gveDg2L2t2bS94ODYuYy05OTE4LSAqXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MzctICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkzODp2b2lkIF9fdXNlciAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkzOS1cdFx0XHRcdCAgICAgIHUzMiBzaXplKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTg5LX1cbmFyY2gveDg2L2t2bS94ODYuYzo5OTkwOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbik7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk5MS1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwMTQ9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjItXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDIzOlx0XHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI0LVx0XHRcdFx0XHQwLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyNTpcdFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBJREVOVElUWV9QQUdFVEFCTEVfUFJJVkFURV9NRU1TTE9ULFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI2LVx0XHRcdFx0XHQwLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyNzpcdFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBUU1NfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyOC1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9NTI2PWludCBrdm1fZ2V0X25yX3BlbmRpbmdfbm1pcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5oLTUyNy1cbmFyY2gveDg2L2t2bS94ODYuaDo1Mjg6dm9pZCBfX3VzZXIgKl9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXG5hcmNoL3g4Ni9rdm0veDg2LmgtNTI5LVx0XHRcdFx0ICAgICB1MzIgc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjE4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBzZWVtcyBsaWtlIGEgZml4IGZvciBhIHRoZW9yZXRpY2FsIGlzc3VlLiBUaGVyZSBhcmUgbm8gb3RoZXIgY2FsbGVycyB0byBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCB0aGF0IEkmIzM5O3ZlIGZvdW5kIG90aGVyIHRoYW4gYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCBhbmQgdGhlIGBzMzkwYCBjb2RlLiBTaW5jZSB0aGVyZSBhcmUgbm8gb3RoZXIgY2FsbGVycywgdGhlIGBpZGAgYXJndW1lbnQgd2lsbCAqYWx3YXlzKiBiZSBhbiBpbnRlcm5hbCBtZW1zbG90IElELCB3aGljaCwgYnkgZGVmaW5pdGlvbiwgaXMgZ29pbmcgdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBLVk1fVVNFUl9NRU1fU0xPVFNgLiBUaGVyZWZvcmUsIGAodTE2KW1lbS0mZ3Q7c2xvdGAgd2lsbCAqYWx3YXlzKiBiZSBgJmd0Oz0gS1ZNX1VTRVJfTUVNX1NMT1RTYC4gVGhpcyBtZWFucyB0aGF0IHRoZSBvcmlnaW5hbCBgV0FSTl9PTl9PTkNFYCBjb25kaXRpb24gd291bGQgbmV2ZXIgdHJpZ2dlciwgYm90aCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC4KCkkgYWxyZWFkeSBjb25maXJtZWQgdGhlIGBzMzkwYCBjb2RlIHVzZXMgYEtWTV9VU0VSX01FTV9TTE9UUyAmIzQzOyAwYCwgbWVhbmluZyB0aGlzIGlzIGFsc28gYCZndDs9IEtWTV9VU0VSX01FTV9TTE9UU2AuCgpTbywgdGhlIHBhdGNoIGlzIGZpeGluZyBhIGBXQVJOX09OX09OQ0VgIHRoYXQgd2FzIGludGVuZGVkIHRvIGNoZWNrIGlmIHNvbWVvbmUgYWNjaWRlbnRhbGx5IHBhc3NlZCBhIHVzZXIgbWVtc2xvdCBJRCB0byBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YC4gVGhlIHByb2JsZW0gaXMgdGhhdCBhIHVzZXIgbWVtc2xvdCBJRCB3aXRoIGEgbm9uLXplcm8gYWRkcmVzcyBzcGFjZSBjb3VsZCByZXN1bHQgaW4gYG1lbS0mZ3Q7c2xvdGAgYmVpbmcgYCZndDs9IDY1NTM2YCwgd2hpY2ggaXMgKmdyZWF0ZXIqIHRoYW4gYEtWTV9VU0VSX01FTV9TTE9UU2AsIHNvIHRoZSBgV0FSTl9PTl9PTkNFYCB3b3VsZCBpbmNvcnJlY3RseSBmYWlsIHRvIHRyaWdnZXIgaW4gdGhvc2UgY2FzZXMuIFRoZSBhZGRlZCBgKHUxNilgIGNhc3QgY29ycmVjdGx5IGV4dHJhY3RzIHRoZSBiYXNlIHNsb3QgSUQgYW5kIGNoZWNrcyBpdCBhZ2FpbnN0IGBLVk1fVVNFUl9NRU1fU0xPVFNgLiBIb3dldmVyLCBnaXZlbiB0aGF0IHRoZXJlIGFyZSBubyBjdXJyZW50IGNhbGxlcnMgdGhhdCBhY3R1YWxseSBwYXNzIGEgdXNlciBtZW1zbG90IElELCB0aGlzIGNoZWNrIG5ldmVyIHRyaWdnZXJzIGFueXdheS4gSXQgaXMganVzdCBhIGZpeCBmb3IgYSBzYW5pdHkgY2hlY2suCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBkb2VzIHRoaXMgaGF2ZSBhbnkgZnVuY3Rpb25hbCBpbXBhY3Q/IE15IGFzc2Vzc21lbnQgaXMgbm8uIEl0JiMzOTtzIGp1c3QgbW9kaWZ5aW5nIGEgYFdBUk5fT05fT05DRWAgdGhhdCBpcyBuZXZlciBoaXQgaW4gcHJhY3RpY2UgYmVjYXVzZSBhbGwgY3VycmVudCBjYWxsZXJzIHBhc3MgdmFsaWQgaW50ZXJuYWwgbWVtc2xvdCBJRHMuCgpDb3VsZCBhIGZ1enplciBsaWtlIHN5emthbGxlciBwb3NzaWJseSB0cmlnZ2VyIHRoaXM/IEkgZG9uJiMzOTt0IHRoaW5rIHNvLiBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBpcyBhbiBpbnRlcm5hbCBBUEkuIFVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgcmVnaW9ucyB0aHJvdWdoIHRoZSBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCBpb2N0bCwgd2hpY2ggY2FsbHMgYGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbmAuIFRoYXQgZnVuY3Rpb24gaGFzIGl0cyBvd24gc2FmZXR5IGNoZWNrOgoKYGBgYwogICAgaWYgKCh1MTYpbWVtLSZndDtzbG90ICZndDs9IEtWTV9VU0VSX01FTV9TTE9UUykKICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CmBgYAoKVGhpcyAqY29ycmVjdGx5KiB1c2VzIHRoZSBgKHUxNiltZW0tJmd0O3Nsb3RgIHRvIHByZXZlbnQgdXNlcnNwYWNlIGZyb20gYXR0ZW1wdGluZyB0byBzZXQgaW50ZXJuYWwgbWVtc2xvdHMuIFRodXMsIHVzZXJzcGFjZSBjYW4mIzM5O3QgZXZlbiBnZXQgdG8gYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAuIEl0IGlzIG9ubHkgcmVhY2hhYmxlIHZpYSBpbnRlcm5hbCBLVk0gY29kZSwgd2hpY2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGFsd2F5cyBwYXNzZXMgdmFsaWQgbWVtc2xvdCBJRHMuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaGFzIHplcm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gYW55IHJlYWNoYWJsZSBjb2RlIHBhdGhzLiBJdCBqdXN0IGZpeGVzIGEgZGVhZCBzYW5pdHkgY2hlY2suIEkmIzM5O2xsIGRvdWJsZSBjaGVjayBmb3IgYW55IGNhbGxlcnMgb2YgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgdGhhdCBJIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLgpZb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS4KRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsCnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC48L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLlxuWW91IGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0IG9mIHRoaXMgZXhhY3QgdG9vbCBjYWxsIGluIHlvdXIgY29udmVyc2F0aW9uIGhpc3RvcnkuXG5EbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSxcbnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODczCgkJCQkJCQlvdXRwdXQ6IDIzNgoJCQkJCQkJdGhvdWdodHM6IDM0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gSSBkdWcgaW50byB0aGlzIHBhdGNoIHRhcmdldGluZyBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YC4gSSBhbHJlYWR5IHJhbiBhIGBncmVwYCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjYWxsZXJzLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhlcmUgYXJlIG9ubHkgdHdvIOKAkyB3aGljaCBuYXJyb3dzIHRoZSBzY29wZSBzaWduaWZpY2FudGx5LiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGp1c3QgdG91Y2hpbmcgYSBgV0FSTl9PTl9PTkNFYCBjb25kaXRpb24uIFRoYXQmIzM5O3MgYSBzYW5pdHkgY2hlY2ssIG5vdCBhIGNvcmUgZnVuY3Rpb24sIHNvIG15IGluaXRpYWwgaW5zdGluY3Qgc2F5cyB0aGlzIGlzIGxvdy1pbXBhY3QuCgpEaWdnaW5nIGRlZXBlciwgdGhlIGNvbmRpdGlvbiBpbiBxdWVzdGlvbiBpcyBuZXZlciBhY3R1YWxseSB0cmlnZ2VyZWQuIFRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBhbHdheXMgcGFzcyB2YWxpZCBgaW50ZXJuYWwgbWVtc2xvdGAgSURzLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gRXZlbiBpZiB0aGUgY29uZGl0aW9uICp3ZXJlKiBtZXQsIGl0IHdvdWxkIG9ubHkgbG9nIGEgd2FybmluZyBhbmQgcmV0dXJuIGAtRUlOVkFMYC4gRnVuY3Rpb25hbGx5LCB0aGUgY29kZSBmbG93IHJlbWFpbnMgdW5jaGFuZ2VkLiBUaGVyZWZvcmUsIGl0JiMzOTtzIHNhZmUgdG8gc2F5IHRoZXJlIGlzIG5vIHVzZXIgdmlzaWJsZSBmdW5jdGlvbmFsIGltcGFjdC4KCkxldCYjMzk7cyBzdW1tYXJpemUgdGhlIGxvZ2ljIGJlaGluZCB0aGUgY2hhbmdlIGZvciBnb29kIG1lYXN1cmUuIFRoZSBwYXRjaCBlc3NlbnRpYWxseSBhZGRzIGEgY2FzdCB0byBoYW5kbGUgbm9uLXplcm8gYWRkcmVzcyBzcGFjZSBJRHMgaW4gdGhlIHVwcGVyIDE2IGJpdHMgb2YgdGhlIGBtZW0tJmd0O3Nsb3RgIGZpZWxkLCBmaXhpbmcgdGhlIGNoZWNrIGZvciBzbG90cyBncmVhdGVyIHRoYW4gYEtWTV9VU0VSX01FTV9TTE9UU2AuIEhvd2V2ZXIsIGdpdmVuIHRoYXQgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgYW4gaW50ZXJuYWwgQVBJLCBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSAoaXQgdXNlcyBga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uYCBmb3IgZXh0ZXJuYWwgY2FsbHMsIHdoaWNoIGhhcyBpdHMgb3duIHZlcmlmaWNhdGlvbikuIFRoZSBmdW5jdGlvbnMgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCBhbmQgYHMzOTBgJiMzOTtzIGBrdm1fYXJjaF9pbml0X3ZtYCBhcmUgdGhlIG9ubHkgY2FsbGVycywgYW5kIHRoZXkmIzM5O3JlIG1ldGljdWxvdXNseSBwYXNzaW5nIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzLiBTbywgdGhpcyBib2lscyBkb3duIHRvIGZpeGluZyBhIHRoZW9yZXRpY2FsIGJ1ZyB0aGF0IGlzIG5ldmVyIGhpdCBpbiBwcmFjdGljZS4gTXkgY29uY2x1c2lvbj8gVGhpcyBvbmUgaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBXQVJOX09OX09OQ0UgY2hlY2sgaW4ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IHRvIGNhc3QgbWVtLVx1MDAzZXNsb3QgdG8gKHUxNikgYmVmb3JlIGNvbXBhcmluZyBpdCB0byBLVk1fVVNFUl9NRU1fU0xPVFMuIFRoaXMgZml4ZXMgdGhlIHNhbml0eSBjaGVjayB0byBjb3JyZWN0bHkgaGFuZGxlIG1lbW9yeSBzbG90cyB3aXRoIG5vbi16ZXJvIGFkZHJlc3Mgc3BhY2UgSURzIChlbmNvZGVkIGluIHRoZSB1cHBlciAxNiBiaXRzKS4gSG93ZXZlciwga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IGlzIGFuIGludGVybmFsIEtWTSBBUEkgdGhhdCBpcyBvbmx5IGNhbGxlZCBieSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbiBhbmQgczM5MCYjMzk7cyBrdm1fYXJjaF9pbml0X3ZtLCBib3RoIG9mIHdoaWNoIGFsd2F5cyBwYXNzIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzIChcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUykuIFVzZXJzcGFjZSBjYW5ub3QgcmVhY2ggdGhpcyBmdW5jdGlvbiwgYXMgaXQgdXNlcyBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24gd2hpY2ggaGFzIGl0cyBvd24gY29ycmVjdCBjaGVjay4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIG9ubHkgZml4ZXMgYSB0aGVvcmV0aWNhbCBidWcgaW4gYSBzYW5pdHkgY2hlY2sgdGhhdCBpcyBuZXZlciB0cmlnZ2VyZWQgaW4gcHJhY3RpY2UsIGFuZCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVhY2hhYmxlIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIFdBUk5fT05fT05DRSBjaGVjayBpbiBrdm1fc2V0X2ludGVybmFsX21lbXNsb3QgdG8gY2FzdCBtZW0tXHUwMDNlc2xvdCB0byAodTE2KSBiZWZvcmUgY29tcGFyaW5nIGl0IHRvIEtWTV9VU0VSX01FTV9TTE9UUy4gVGhpcyBmaXhlcyB0aGUgc2FuaXR5IGNoZWNrIHRvIGNvcnJlY3RseSBoYW5kbGUgbWVtb3J5IHNsb3RzIHdpdGggbm9uLXplcm8gYWRkcmVzcyBzcGFjZSBJRHMgKGVuY29kZWQgaW4gdGhlIHVwcGVyIDE2IGJpdHMpLiBIb3dldmVyLCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3QgaXMgYW4gaW50ZXJuYWwgS1ZNIEFQSSB0aGF0IGlzIG9ubHkgY2FsbGVkIGJ5IF9feDg2X3NldF9tZW1vcnlfcmVnaW9uIGFuZCBzMzkwJiMzOTtzIGt2bV9hcmNoX2luaXRfdm0sIGJvdGggb2Ygd2hpY2ggYWx3YXlzIHBhc3MgdmFsaWQgaW50ZXJuYWwgbWVtc2xvdCBJRHMgKFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTKS4gVXNlcnNwYWNlIGNhbm5vdCByZWFjaCB0aGlzIGZ1bmN0aW9uLCBhcyBpdCB1c2VzIGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbiB3aGljaCBoYXMgaXRzIG93biBjb3JyZWN0IGNoZWNrLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggb25seSBmaXhlcyBhIHRoZW9yZXRpY2FsIGJ1ZyBpbiBhIHNhbml0eSBjaGVjayB0aGF0IGlzIG5ldmVyIHRyaWdnZXJlZCBpbiBwcmFjdGljZSwgYW5kIGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiByZWFjaGFibGUgY29kZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoxOToyNC42NjQ2Njc1OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY4OTU2NjM3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIFdBUk5fT05fT05DRSBjaGVjayBpbiBrdm1fc2V0X2ludGVybmFsX21lbXNsb3QgdG8gY2FzdCBtZW0tXFx1MDAzZXNsb3QgdG8gKHUxNikgYmVmb3JlIGNvbXBhcmluZyBpdCB0byBLVk1fVVNFUl9NRU1fU0xPVFMuIFRoaXMgZml4ZXMgdGhlIHNhbml0eSBjaGVjayB0byBjb3JyZWN0bHkgaGFuZGxlIG1lbW9yeSBzbG90cyB3aXRoIG5vbi16ZXJvIGFkZHJlc3Mgc3BhY2UgSURzIChlbmNvZGVkIGluIHRoZSB1cHBlciAxNiBiaXRzKS4gSG93ZXZlciwga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IGlzIGFuIGludGVybmFsIEtWTSBBUEkgdGhhdCBpcyBvbmx5IGNhbGxlZCBieSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbiBhbmQgczM5MCdzIGt2bV9hcmNoX2luaXRfdm0sIGJvdGggb2Ygd2hpY2ggYWx3YXlzIHBhc3MgdmFsaWQgaW50ZXJuYWwgbWVtc2xvdCBJRHMgKFxcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUykuIFVzZXJzcGFjZSBjYW5ub3QgcmVhY2ggdGhpcyBmdW5jdGlvbiwgYXMgaXQgdXNlcyBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24gd2hpY2ggaGFzIGl0cyBvd24gY29ycmVjdCBjaGVjay4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIG9ubHkgZml4ZXMgYSB0aGVvcmV0aWNhbCBidWcgaW4gYSBzYW5pdHkgY2hlY2sgdGhhdCBpcyBuZXZlciB0cmlnZ2VyZWQgaW4gcHJhY3RpY2UsIGFuZCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoxOToyNC42NjQ2NzU3OTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDE4NDY3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZjQ3M2RlODZjZDAwY2Q3NTk1OTIxY2Q2NjdjZWY2OTc0YmExMTUwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjE5OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuaW5kZXggNjVlYjI2YTA1MjBkOC4uZThkMGUzNjBlYTI2YiAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbkBAIC0yMTI4LDcgKzIxMjgsNyBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIGludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXFxuIHtcXG4tXFx0aWYgKFdBUk5fT05fT05DRShtZW0tXFx1MDAzZXNsb3QgXFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpKVxcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCh1MTYpbWVtLVxcdTAwM2VzbG90IFxcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKG1lbS1cXHUwMDNlZmxhZ3MpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoxOToyNS45Njc0OTE2NTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MzU1OTI4Mjg4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgV0FSTl9PTl9PTkNFIGNoZWNrIGluIGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCB0byBjYXN0IG1lbS1cXHUwMDNlc2xvdCB0byAodTE2KSBiZWZvcmUgY29tcGFyaW5nIGl0IHRvIEtWTV9VU0VSX01FTV9TTE9UUy4gVGhpcyBmaXhlcyB0aGUgc2FuaXR5IGNoZWNrIHRvIGNvcnJlY3RseSBoYW5kbGUgbWVtb3J5IHNsb3RzIHdpdGggbm9uLXplcm8gYWRkcmVzcyBzcGFjZSBJRHMgKGVuY29kZWQgaW4gdGhlIHVwcGVyIDE2IGJpdHMpLiBIb3dldmVyLCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3QgaXMgYW4gaW50ZXJuYWwgS1ZNIEFQSSB0aGF0IGlzIG9ubHkgY2FsbGVkIGJ5IF9feDg2X3NldF9tZW1vcnlfcmVnaW9uIGFuZCBzMzkwJ3Mga3ZtX2FyY2hfaW5pdF92bSwgYm90aCBvZiB3aGljaCBhbHdheXMgcGFzcyB2YWxpZCBpbnRlcm5hbCBtZW1zbG90IElEcyAoXFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTKS4gVXNlcnNwYWNlIGNhbm5vdCByZWFjaCB0aGlzIGZ1bmN0aW9uLCBhcyBpdCB1c2VzIGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbiB3aGljaCBoYXMgaXRzIG93biBjb3JyZWN0IGNoZWNrLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggb25seSBmaXhlcyBhIHRoZW9yZXRpY2FsIGJ1ZyBpbiBhIHNhbml0eSBjaGVjayB0aGF0IGlzIG5ldmVyIHRyaWdnZXJlZCBpbiBwcmFjdGljZSwgYW5kIGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiByZWFjaGFibGUgY29kZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlmNDczZGU4NmNkMDBjZDc1OTU5MjFjZDY2N2NlZjY5NzRiYTExNTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxMjoxOToyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA2NWViMjZhMDUyMGQ4Li5lOGQwZTM2MGVhMjZiIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTIxMjgsNyArMjEyOCw3IEBAIHN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBpbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXG4ge1xuLVx0aWYgKFdBUk5fT05fT05DRShtZW0tXHUwMDNlc2xvdCBcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKSlcbitcdGlmIChXQVJOX09OX09OQ0UoKHUxNiltZW0tXHUwMDNlc2xvdCBcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKG1lbS1cdTAwM2VmbGFncykpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoxOToyNS45Njc0OTM2NjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzU1NjM2MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2UuIEl0J3MgbW9kaWZ5aW5nIHRoZSBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgcmlnaHQgdGhlcmU6IHRoZXkncmUgZXhwbGljaXRseSBjYXN0aW5nIGBtZW0tXHUwMDNlc2xvdGAgdG8gYHUxNmAgYmVmb3JlIGNvbXBhcmluZyBpdCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTYCBpbnNpZGUgdGhhdCBgV0FSTl9PTl9PTkNFYCBjaGVjay4gXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHRvIGJlIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgYmVpbmcgYWRkcmVzc2VkLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgbGlrZWx5IHJlbHlpbmcgb24gaW1wbGljaXQgdHlwZSBwcm9tb3Rpb24sIGJ1dCBwZXJoYXBzIGEgc2NlbmFyaW8gd2FzIGlkZW50aWZpZWQgd2hlcmUgYG1lbS1cdTAwM2VzbG90YCBjb3VsZCBiZSBhIGxhcmdlciBpbnRlZ2VyIHR5cGUsIGFuZCB3aXRob3V0IHRoZSBjYXN0LCB0aGUgY29tcGFyaXNvbiBtaWdodCBoYXZlIGJlZW4gc3VidGx5IGluY29ycmVjdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gVGhlIGBXQVJOX09OX09OQ0VgIGluZGljYXRlcyBpdCdzIGEgY3JpdGljYWwgc2FmZXR5IGNoZWNrLCBzbyB0aGlzIG1ha2VzIHNlbnNlLiBJdCdzIGdvb2QgdGhhdCB0aGV5J3JlIGJlaW5nIGV4cGxpY2l0IGFib3V0IHRoZSBpbnRlbmRlZCBzaXplLlxuXG5Ob3csIEknbSBnb2luZyB0byBkaWcgZGVlcGVyIGFuZCBsb29rIGludG8gYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoaXMgbWVtc2xvdCBhbmQgaG93IGl0J3MgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGNvbnN0YW50IHJlcHJlc2VudHMgYW5kIHdoYXQgYSBwb3RlbnRpYWwgb3ZlcmZsb3cgY291bGQgZG8uIExldCdzIHNlZSBob3cgbWVtb3J5IHNsb3RzIGFyZSBtYW5hZ2VkIGluIEtWTSBhbmQgd2hhdCBjYW4gZ28gd3JvbmcgaWYgdGhlIHNsb3QgaW5kZXggZ2V0cyBjb3JydXB0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBkb2N1bWVudGF0aW9uIG9uIHRoZSByZWFzb25pbmcgYmVoaW5kIGxpbWl0aW5nIHRoZSBgbWVtLVx1MDAzZXNsb3RgIG51bWJlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjE5OjMwLjcyMzEzMjEwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjAzMDkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fc2V0X2ludGVybmFsX21lbXNsb3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTE5OTU9c3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMTI3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEyODppbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjktXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMTM4LX1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMzk6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0yMTQwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoxOTozMC44MDkxNjY3MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYwODE4MjgzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBVc2FnZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgLiBUaGUgZmlyc3QgdGhpbmcgSSBhbHdheXMgZG8gaXMgdHJhY2UgaXRzIGNhbGxpbmcgY29udGV4dC4gVW5kZXJzdGFuZGluZyAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlzIGFic29sdXRlbHkgY3J1Y2lhbCB0byBncmFzcGluZyBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCB3aXRoaW4gdGhlIEtWTSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHVzYWdlIHRocm91Z2hvdXQgdGhlIGNvZGUgYmFzZS4gTGV0J3Mgc3RhcnQgYnkgaWRlbnRpZnlpbmcgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgd2hlcmUgaXQncyBhY3R1YWxseSBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzMxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MjU6MzYuODkwOTk4MTA1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTA3NTczMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jPTMyNDE9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTEtXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jOjMzNTI6XFx0XFx0S1ZNX0JVR19PTihrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoa3ZtLCBcXHUwMDI2ZmFrZV9tZW1zbG90KSwga3ZtKTtcXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTMtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTk5Mzg9dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5NzktXFx0XFx0bS5tZW1vcnlfc2l6ZSA9IHNpemU7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk5ODA6XFx0XFx0ciA9IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFxcdTAwMjZtKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk4MS1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTI0Mj1lbnVtIGt2bV9tcl9jaGFuZ2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNDgtXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjEyNDk6aW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNTAtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTk5NT1zdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjctXFxudmlydC9rdm0va3ZtX21haW4uYzoyMTI4OmludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyOS1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMzgtfVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEzOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxNDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI1OjM4LjQ0MTc1OTE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNDkwNjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0gTWVtb3J5IFNsb3QgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBhIHR5cGUgY29udmVyc2lvbjogYG1lbS1cdTAwM2VzbG90YCBpcyBub3cgYmVpbmcgY2FzdCB0byBgKHUxNiltZW0tXHUwMDNlc2xvdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoeSB0aGUgdHlwZSByZWR1Y3Rpb24/XCIgTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgbWVtLVx1MDAzZXNsb3RgIGlzIGRlZmluZWQgYXMgYSBgdTMyYCB3aXRoaW4gdGhlIGBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBBIHF1aWNrIG1lbnRhbCBjaGVjayBicmluZ3MgdXAgYEtWTV9VU0VSX01FTV9TTE9UU2AsIHdoaWNoIEknbSBhc3N1bWluZyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIG1heGltdW0gbnVtYmVyIG9mIG1lbW9yeSBzbG90cyBhbGxvd2VkLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBzdHVmZiwgYSBgdTE2YCBpcyAxNiBiaXRzLCBgdTMyYCBpcyAzMiBiaXRzIGFuZCBpZiB0aGlzIGlzIGludGVuZGVkIGFzIGEgdHlwZSByZXN0cmljdGlvbiwgSSBuZWVkIHRvIGxvb2sgaW50byBgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjJgLiBXaGF0J3MgaGFwcGVuaW5nIGluIHRoZXJlPyBJcyBpdCBhIGRhdGEgdHlwZSBzaXplIHJlZHVjdGlvbiBmb3IgZWZmaWNpZW5jeSwgb3IgaXMgaXQgYSBzaWduIG9mIHNvbWV0aGluZyB0aGF0IEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgb24/IEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhhdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzbG90IHZhbHVlIGlzIHVzZWQgYW5kIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBzbG90IGFkZHJlc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNTo0My40NDY2Njc1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ4NzA2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTEyNDk9aW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjEyNTA6XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI1MS12b2lkIGt2bV9hcmNoX2ZyZWVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTMwPXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTM4LS8qIGZvciBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6Mzk6c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIge1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00MC1cXHRfX3UzMiBzbG90O1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTEyNTM9c3RydWN0IGt2bV9zMzkwX2tleW9wIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xMjcyLSNkZWZpbmUgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yIF9JT1coS1ZNSU8sIDB4NDksIFxcXFxcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTI3MzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTEyNzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI1OjQzLjU2MTU0MjY5OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMzgxNjI2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNJ3MgTWVtb3J5IFJlZ2lvbiBTZXR1cCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgYXJjaC94ODYva3ZtL3g4Ni5jYCBmaWxlIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgeDg2LXNwZWNpZmljIEtWTSBjb2RlIGxpdmVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgcmVnaW9ucyBhcmUgc2V0IHVwLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCBmdW5jdGlvbi4gSSBoYXZlIGEgZmVlbGluZyB0aGlzIGlzIHRoZSBrZXkgdG8gaG93IEtWTSBtYW5hZ2VzIGd1ZXN0IHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5ncyBhbmQgaGFuZGxlcyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaG9zdCdzIHBoeXNpY2FsIG1lbW9yeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBwYWdpbmcgc3RydWN0dXJlcywgYW5kIHdoYXQgdGhlIG92ZXJhbGwgaW1wbGljYXRpb25zIGFyZSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHZpcnR1YWxpemF0aW9uLiBJIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIGhvdyB0aGlzIGZ1bmN0aW9uIGVuZm9yY2VzIHRoZSBtZW1vcnkgcmVnaW9uIGJvdW5kYXJpZXMgYW5kIHBlcm1pc3Npb25zLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNTo1MC43OTk3MDgzNjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzM1MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9feDg2X3NldF9tZW1vcnlfcmVnaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9OTg0Mz1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTE2LS8qKlxcbmFyY2gveDg2L2t2bS94ODYuYzo5OTE3OiAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uOiBTZXR1cCBLVk0gaW50ZXJuYWwgbWVtb3J5IHNsb3RcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxOC0gKlxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MzctICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk5Mzg6dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuYy05OTM5LVxcdFxcdFxcdFxcdCAgICAgIHUzMiBzaXplKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5ODktfVxcbmFyY2gveDg2L2t2bS94ODYuYzo5OTkwOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbik7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5OTEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwMTQ9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyMi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyMzpcXHRcXHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNC1cXHRcXHRcXHRcXHRcXHQwLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjU6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBJREVOVElUWV9QQUdFVEFCTEVfUFJJVkFURV9NRU1TTE9ULFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNi1cXHRcXHRcXHRcXHRcXHQwLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjc6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBUU1NfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjgtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNTo1MC44NDM0NDU0NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk5NDgwNzgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIFRoZSBjb2RlJ3MgY2FzdGluZyBgbWVtLVx1MDAzZXNsb3RgIHRvIGEgYHUxNmAgYmVmb3JlIGNvbXBhcmluZyBpdCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gTXkgZmlyc3QgdGhvdWdodCBpczogd2h5IHRoZSBjYXN0PyBBbmQgd2hhdCBhcmUgd2UgdHJ5aW5nIHRvIGFjaGlldmU/IGBtZW0tXHUwMDNlc2xvdGAgaXMgZGVmaW5lZCBhcyBhIGB1MzJgLCB3aGljaCBnaXZlcyB1cyBhIHBvdGVudGlhbCBsYXJnZXIgcmFuZ2UuIFNvLCB0aGF0IGNhc3QgaXMgdGhlIGZpcnN0IHRoaW5nIHRvIGNoZWNrLlxuXG5Ob3csIGBLVk1fVVNFUl9NRU1fU0xPVFNg4oCmIHRoYXQncyBhIGNvbnN0YW50LCBhbmQgaXTigJlzIGxpa2VseSByZXByZXNlbnRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1lbW9yeSBzbG90cyB0aGF0IGFyZSBhbGxvd2VkLiBJIG5lZWQgdG8ga25vdyB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoYXQgY29uc3RhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29tcGFyaXNvbi4gRGVwZW5kaW5nIG9uIHdoYXQgaXQgaXMsIGEgdHJ1bmNhdGlvbiB0byBgdTE2YCBjb3VsZCBtZWFuIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpZiBgbWVtLVx1MDAzZXNsb3RgIGlzIGEgdmFsdWUgZ3JlYXRlciB0aGFuIGBVU0hSVF9NQVhgLiBBbmQgaXQncyBhbHNvIHdvcnRoIGNoZWNraW5nIHdoZXRoZXIgdGhlIHNpemUgb2YgYEtWTV9VU0VSX01FTV9TTE9UU2AgaXMgc21hbGxlciB0aGFuIGEgMTYtYml0IHZhbHVlLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBvdmVyZmxvdyBpc3N1ZSBldmVuIHdvcnNlLiBTbywgSSBuZWVkIHRvIGdvIGFuZCBmaW5kIHdoZXJlIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIGRlZmluZWQgYW5kIGNoZWNrIGl0cyB2YWx1ZSBhbmQgdHlwZSwgYW5kIHRoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSBhIGxpdHRsZSBiZXR0ZXIgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMxNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI1OjU2LjgzODI1NjAwNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxODYzOTgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEtWTV9VU0VSX01FTV9TTE9UU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTcwND1ib29sIGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtNzEwLSNkZWZpbmUgS1ZNX01FTV9TTE9UU19OVU0gU0hSVF9NQVhcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6NzExOiNkZWZpbmUgS1ZNX1VTRVJfTUVNX1NMT1RTIChLVk1fTUVNX1NMT1RTX05VTSAtIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFMpXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTcxMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MjU6NTguNDU2OTAxMTk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTQxMDM0NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBLVk0gTWVtb3J5IFNsb3QgTGltaXRzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvLCBgS1ZNX01FTV9TTE9UU19OVU1gIGlzIGRlZmluZWQgYXMgYFNIUlRfTUFYYCwgd2hpY2ggaXMgMzI3NjcuIFRoYXQncyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWVtb3J5IHNsb3RzIHRoYXQgS1ZNIGlzICpkZXNpZ25lZCogdG8gc3VwcG9ydC4gQSBwcmV0dHkgaGlnaCBudW1iZXIsIGhvbmVzdGx5LiBJJ2QgdHlwaWNhbGx5IGNvbnNpZGVyIGlmIHRoYXQncyBsYXJnZSBlbm91Z2ggZm9yIHRoZSBzY2FsZSBJIGFtIHdvcmtpbmcgYXQuXG5cblRoZW4sIGBLVk1fSU5URVJOQUxfTUVNX1NMT1RTYCBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEludGVyZXN0aW5nLiBUaGF0IHRlbGxzIG1lIHRoZSBpbnRlcm5hbCBtZW1vcnkgc2xvdCBtYW5hZ2VtZW50ICp3aXRoaW4qIEtWTSBpcyBsaWtlbHkgdHVuZWQgZm9yIHRoZSBzcGVjaWZpY3Mgb2YgZGlmZmVyZW50IGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGFyY2gtc3BlY2lmaWMgZGVmaW5pdGlvbnMgdG8gc2VlIHRoZSBkaWZmZXJlbmNlcyBhbmQgcG90ZW50aWFsIHJlYXNvbnMgZm9yIHRoYXQgdmFyaWF0aW9uLiBUaGlzIHByb2JhYmx5IGhhcyB0byBkbyB3aXRoIGhvdyBtZW1vcnkgaXMgbWFwcGVkLCBoYW5kbGVkLCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemVkIGF0IGEgbG93ZXIgbGV2ZWwgb24sIGZvciBpbnN0YW5jZSwgeDg2IHZzLiBBUk0uIFRoZSBwcmFjdGljYWwgbGltaXQgbWlnaHQgYmUgdGhlIG1heCBwaHlzaWNhbCBtZW1vcnkgc2l6ZSBhbmQvb3IgdGhlIGFkZHJlc3Mgc3BhY2UgbGltaXRhdGlvbnMgb2YgdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4gSSdkIHdhbnQgdG8gYmUgYXdhcmUgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhbGxvY2F0aW9uLiBJIGNvdWxkIGFsc28gc2VlIGl0IGhhdmluZyBpbXBsaWNhdGlvbnMgZm9yIE5VTUEgY29uZmlndXJhdGlvbnMuIFNvLCB0aGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg2NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI2OjA0LjU1MTAwNjg4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MDE1NjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF9zMzkwLmgtMzItXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3MzOTAuaDozMzojZGVmaW5lIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFMgMVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF9zMzkwLmgtMzQtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTcxLS8qIG1lbW9yeSBzbG90cyB0aGF0IGFyZSBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjcyOiNkZWZpbmUgS1ZNX0lOVEVSTkFMX01FTV9TTE9UUyAzXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC03My1cXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD03MDQ9Ym9vbCBrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbChzdHJ1Y3Qga3ZtICprdm0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTcwNi0jaWZuZGVmIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFNcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6NzA3OiNkZWZpbmUgS1ZNX0lOVEVSTkFMX01FTV9TTE9UUyAwXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTcwOC0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MjY6MDYuMDQxMTY3MDQ3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNTkxNDMxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW50ZXJuYWwgTXVzaW5ncyBvbiBLVk0gTWVtb3J5IFNsb3RzKipcblxuT2theSwgc28gbGV0J3Mgc2VlLiAgYEtWTV9VU0VSX01FTV9TTE9UU2AgaXMgZGVmaW5lZCBhcyAzMjc2NyBtaW51cyAzLCByZXN1bHRpbmcgaW4gMzI3NjQsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB4ODYuICBJJ20gbG9va2luZyBhdCB0aGUgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgZnVuY3Rpb24sIGFuZCB0aGVyZSdzIGEgY2hlY2sgaW4gdGhlcmUuIEl0J3MgdXNpbmcgYFdBUk5fT05fT05DRWAgd2hpY2ggd2lsbCBvbmx5IHdhcm4sIGl0IHNlZW1zLlxuXG5gYGBjXG5cdGlmIChXQVJOX09OX09OQ0UobWVtLVx1MDAzZXNsb3QgXHUwMDNjIEtWTV9VU0VSX01FTV9TTE9UUykpXG5cdFx0cmV0dXJuIC1FSU5WQUw7XG5gYGBcblxuSG9sZCBvbiwgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgc3BlY2lmaWNhbGx5IGZvciAqaW50ZXJuYWwqIG1lbXNsb3RzLiAgUmlnaHQsIGludGVybmFsIG1lbXNsb3RzIGhhdmUgc2xvdCBJRHMgdGhhdCBhcmUgKmdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byogYEtWTV9VU0VSX01FTV9TTE9UU2AuIFRoYXQncyB0aGUga2V5IGRpc3RpbmN0aW9uLiBCdXQsIGBtZW0tXHUwMDNlc2xvdGAgaXMgZGVmaW5lZCBhcyBhIGB1MzJgLi4uIG5vdyBsZXQgbWUgcmVtZW1iZXIgd2hhdCBJIGRpZCB3aXRoIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MjY6MTEuMTAwMzEyMTU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2Mzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTkzOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTkzODpcXHR2b2lkIF9fdXNlciAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXFxuOTkzOTpcXHRcXHRcXHRcXHRcXHQgICAgICB1MzIgc2l6ZSlcXG45OTQwOlxcdHtcXG45OTQxOlxcdFxcdGludCBpLCByO1xcbjk5NDI6XFx0XFx0dW5zaWduZWQgbG9uZyBodmEsIG9sZF9ucGFnZXM7XFxuOTk0MzpcXHRcXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pO1xcbjk5NDQ6XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcXG45OTQ1OlxcdFxcbjk5NDY6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG45OTQ3OlxcdFxcbjk5NDg6XFx0XFx0aWYgKFdBUk5fT04oaWQgXFx1MDAzZT0gS1ZNX01FTV9TTE9UU19OVU0pKVxcbjk5NDk6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFJfVVNSKC1FSU5WQUwpO1xcbjk5NTA6XFx0XFxuOTk1MTpcXHRcXHRzbG90ID0gaWRfdG9fbWVtc2xvdChzbG90cywgaWQpO1xcbjk5NTI6XFx0XFx0aWYgKHNpemUpIHtcXG45OTUzOlxcdFxcdFxcdGlmIChzbG90IFxcdTAwMjZcXHUwMDI2IHNsb3QtXFx1MDAzZW5wYWdlcylcXG45OTU0OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSX1VTUigtRUVYSVNUKTtcXG45OTU1OlxcdFxcbjk5NTY6XFx0XFx0XFx0LypcXG45OTU3OlxcdFxcdFxcdCAqIE1BUF9TSEFSRUQgdG8gcHJldmVudCBpbnRlcm5hbCBzbG90IHBhZ2VzIGZyb20gYmVpbmcgbW92ZWRcXG45OTU4OlxcdFxcdFxcdCAqIGJ5IGZvcmsoKS9DT1cuXFxuOTk1OTpcXHRcXHRcXHQgKi9cXG45OTYwOlxcdFxcdFxcdGh2YSA9IHZtX21tYXAoTlVMTCwgMCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG45OTYxOlxcdFxcdFxcdFxcdCAgICAgIE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTLCAwKTtcXG45OTYyOlxcdFxcdFxcdGlmIChJU19FUlJfVkFMVUUoaHZhKSlcXG45OTYzOlxcdFxcdFxcdFxcdHJldHVybiAodm9pZCBfX3VzZXIgKilodmE7XFxuOTk2NDpcXHRcXHR9IGVsc2Uge1xcbjk5NjU6XFx0XFx0XFx0aWYgKCFzbG90IHx8ICFzbG90LVxcdTAwM2VucGFnZXMpXFxuOTk2NjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG45OTY3OlxcdFxcbjk5Njg6XFx0XFx0XFx0b2xkX25wYWdlcyA9IHNsb3QtXFx1MDAzZW5wYWdlcztcXG45OTY5OlxcdFxcdFxcdGh2YSA9IHNsb3QtXFx1MDAzZXVzZXJzcGFjZV9hZGRyO1xcbjk5NzA6XFx0XFx0fVxcbjk5NzE6XFx0XFxuOTk3MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3ZtX2FyY2hfbnJfbWVtc2xvdF9hc19pZHMoa3ZtKTsgaSsrKSB7XFxuOTk3MzpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiBtO1xcbjk5NzQ6XFx0XFxuOTk3NTpcXHRcXHRcXHRtLnNsb3QgPSBpZCB8IChpIFxcdTAwM2NcXHUwMDNjIDE2KTtcXG45OTc2OlxcdFxcdFxcdG0uZmxhZ3MgPSAwO1xcbjk5Nzc6XFx0XFx0XFx0bS5ndWVzdF9waHlzX2FkZHIgPSBncGE7XFxuOTk3ODpcXHRcXHRcXHRtLnVzZXJzcGFjZV9hZGRyID0gaHZhO1xcbjk5Nzk6XFx0XFx0XFx0bS5tZW1vcnlfc2l6ZSA9IHNpemU7XFxuOTk4MDpcXHRcXHRcXHRyID0ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KGt2bSwgXFx1MDAyNm0pO1xcbjk5ODE6XFx0XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjk5ODI6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFJfVVNSKHIpO1xcbjk5ODM6XFx0XFx0fVxcbjk5ODQ6XFx0XFxuOTk4NTpcXHRcXHRpZiAoIXNpemUpXFxuOTk4NjpcXHRcXHRcXHR2bV9tdW5tYXAoaHZhLCBvbGRfbnBhZ2VzICogUEFHRV9TSVpFKTtcXG45OTg3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNjoxMS4xMDA4NzcyMDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMzMzI2MzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvZGluZyB0aGUgS1ZNIE1lbW9yeSBTbG90IExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBtLnNsb3QgPSBpZCB8IChpIFx1MDAzY1x1MDAzYyAxNik7YCBsaW5lLi4uIFJpZ2h0LCB0aGUgYWRkcmVzcyBzcGFjZSBJRCBpcyBwYWNrZWQgaW50byB0aGUgdXBwZXIgMTYgYml0cyBvZiB0aGUgc2xvdC4gU28gYG1lbS1cdTAwM2VzbG90YCBjYW4gaW5kZWVkIGJlIHRoaXMgY29tYmluZWQgdmFsdWUsIGBpZCB8IChpIFx1MDAzY1x1MDAzYyAxNilgLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGF0IGlmIGBpYCBpcyBncmVhdGVyIHRoYW4gMCwgZXZlbiBhIHZhbGlkICpiYXNlKiBJRCwgaWYgbGVzcyB0aGFuIGBLVk1fVVNFUl9NRU1fU0xPVFNgLCB3aWxsIHJlc3VsdCBpbiBgbWVtLVx1MDAzZXNsb3RgIGJlaW5nIGBcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UU2AuXG5cbk5vdywgdGhlIGNoZWNrIGluIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgOlxuXG5gYGBjXG5cdGlmIChXQVJOX09OX09OQ0UobWVtLVx1MDAzZXNsb3QgXHUwMDNjIEtWTV9VU0VSX01FTV9TTE9UUykpXG5cdFx0cmV0dXJuIC1FSU5WQUw7XG5gYGBcblxuSWYgdGhlIGJhc2UgYGlkYCBpcyBhbiBpbnRlcm5hbCBtZW1zbG90IElEIChtZWFuaW5nIGl0J3MgYWxyZWFkeSBgXHUwMDNlPSBLVk1fVVNFUl9NRU1fU0xPVFNgKSwgdGhlbiBgbS5zbG90YCB3aWxsICphbHdheXMqIHBhc3MgdGhlIGNoZWNrIGJlY2F1c2UgZXZlbiB3aXRoIGk9MCB0aGUgbWVtb3J5IHNsb3QgaXMgYW4gaW50ZXJuYWwgbWVtc2xvdC4gRXZlbiBpZiBpIGlzIG5vdCAwLCBpdCdzIHN0aWxsIGFuIGludGVybmFsIG1lbXNsb3QuIEJ1dCBpZiBpIGlzIDAsIHRoZSBjaGVjayBpdHNlbGYgZG9lc24ndCBuZWVkIHRoZSBjYXN0LiBTbyB3aHkgZG8gd2UgZXZlbiBuZWVkIHRoZSBgKHUxNiltZW0tXHUwMDNlc2xvdGAgY2FzdD9cblxuQWghIEdvdCBpdC4gVGhlIGNhc3QgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0ICptYXNrcyogdGhlIHVwcGVyIDE2IGJpdHMsIGVzc2VudGlhbGx5IGV4dHJhY3RpbmcgdGhlIG9yaWdpbmFsIGBpZGAuIFRoZSBjaGVjayBpc24ndCB2ZXJpZnlpbmcgdGhlIGZ1bGwgYG1lbS1cdTAwM2VzbG90YCB2YWx1ZSwgaXQncyB2YWxpZGF0aW5nIHRoYXQgdGhlICpiYXNlKiBJRCBpcyBhbiBpbnRlcm5hbCBtZW1zbG90IElELiBJZiBgbWVtLVx1MDAzZXNsb3RgIHdlcmUganVzdCBgaWRgIGFuZCBgaSA9IDBgLCB0aGUgdGVzdCBpcyB0cml2aWFsLiBJZiBgbWVtLVx1MDAzZXNsb3RgIHdlcmUgYGlkIHwgKGkgXHUwMDNjXHUwMDNjIDE2KWAsIHRoZW4sIGFuZCBgaWRgIHdhcyBhICp1c2VyKiBzbG90LCB0aGVuIHdlIHdvdWxkIG5lZWQgdGhlIHVwcGVyIGJpdHMgc3RyaXBwZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGlzICpiYXNlKiBgaWRgIGlzIGludGVybmFsLiBOb3csIGlmIHNvbWVvbmUgcGFzc2VkIGFuIGludmFsaWQgdXNlciBtZW1zbG90LCB3aXRoIGkgXHUwMDNlIDAsIHRoZSBjaGVjayBgbWVtLVx1MDAzZXNsb3QgXHUwMDNjIEtWTV9VU0VSX01FTV9TTE9UU2Agd291bGQgYmUgZmFsc2UsIHdpdGhvdXQgdGhpcyBjYXN0LCBiZWNhdXNlIHRoZSB1cHBlciBiaXRzIHdvdWxkIG1ha2UgaXQgYXBwZWFyIGFzIGFuIGludGVybmFsIHNsb3Qgd2hlbiBpdCdzIG5vdC4gVGhhdCdzIGEgbmFzdHkgdnVsbmVyYWJpbGl0eSFcblxuT2theSwgYnV0IHdhaXQsIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGlzIGludGVybmFsLiBLVk0gaXRzZWxmIGlzIHRoZSBjYWxsZXIuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEknbGwgZG8gdGhhdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI2OjIwLjQzNDE0MzQ1NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMzYyMDY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fc2V0X2ludGVybmFsX21lbXNsb3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM9MzI0MT1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtMzM1MS1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM6MzM1MjpcXHRcXHRLVk1fQlVHX09OKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFxcdTAwMjZmYWtlX21lbXNsb3QpLCBrdm0pO1xcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtMzM1My1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTkzOD12b2lkIF9fdXNlciAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk3OS1cXHRcXHRtLm1lbW9yeV9zaXplID0gc2l6ZTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk4MDpcXHRcXHRyID0ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KGt2bSwgXFx1MDAyNm0pO1xcbmFyY2gveDg2L2t2bS94ODYuYy05OTgxLVxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjQyPWVudW0ga3ZtX21yX2NoYW5nZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI0OC1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTI0OTppbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI1MC1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xOTk1PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyNy1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMjg6aW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxudmlydC9rdm0va3ZtX21haW4uYy0yMTI5LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgKm1lbSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEzOC19XFxudmlydC9rdm0va3ZtX21haW4uYzoyMTM5OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2ludGVybmFsX21lbXNsb3QpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjE0MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MjY6MjEuODM3Nzg1MzI0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MjU4NjY1MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtWTSBNZW1vcnkgU2xvdCBDb251bmRydW0qKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCdzIHJ1bm5pbmcgdGhyb3VnaCBteSBtaW5kLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgbWVtb3J5IHNsb3RzIGFyZSBiZWluZyBtYW5hZ2VkIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBzZWUgdGhhdCBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBnZXRzIGNhbGxlZCBieSBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gLiBUaGF0J3MgdGhlIGtleS5cblxuTm93LCBpbiBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gLCB0aGVyZSdzIHRoaXMgY2hlY2s6IGBpZiAoV0FSTl9PTihpZCBcdTAwM2U9IEtWTV9NRU1fU0xPVFNfTlVNKSkgcmV0dXJuIEVSUl9QVFJfVVNSKC1FSU5WQUwpO2AuIEl0J3MgZW5zdXJpbmcgdGhlIG1lbXNsb3QgSUQgaXNuJ3QgYmV5b25kIHRoZSAqdG90YWwqIG51bWJlciBvZiBzbG90cy4gRmluZSwgbWFrZXMgc2Vuc2UuIEJ1dC4uLiBhbmQgaGVyZSdzIHRoZSBiaXQgdGhhdCdzIGJvdGhlcmluZyBtZS4uLiBpdCBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIGd1YXJkIGZvciBlbnN1cmluZyB0aGUgSUQgaXMgKmJlbG93KiBgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gIFRoYXQncyBteSBmaXJzdCBwb2ludCBvZiBjb25jZXJuLlxuXG5UaGVuIEknbSBsb29raW5nIGF0IGhvdyBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGlzIGNhbGxlZC4gSSBzZWUgY2FsbHMgd2l0aCBgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1RgLCBgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVGAsIGFuZCBgVFNTX1BSSVZBVEVfTUVNU0xPVGAuIFRoZXNlIGFyZSBhbGwgaW50ZXJuYWwgbWVtc2xvdHMuIE1ha2VzIHNlbnNlOyB0aGVzZSBhcmUgcHJpdmF0ZSB0byB0aGUgaHlwZXJ2aXNvcidzIG5lZWRzLlxuXG5CdXQgaGVyZSdzIHRoZSBxdWVzdGlvbiB0aGF0IGtlZXBzIGNpcmNsaW5nOiB3aGF0IGhhcHBlbnMgaWYsIGZvciBzb21lIHJlYXNvbiAoYWNjaWRlbnRhbCBvciBvdGhlcndpc2UpLCBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGdldHMgY2FsbGVkIHdpdGggYSB1c2VyIG1lbXNsb3QgSUQ/IFRoZSBjb2RlIGRvZXNuJ3Qgc2VlbSB0byBleHBsaWNpdGx5IHByZXZlbnQgaXQuIENvdWxkIHRoaXMgbGVhZCB0byBzb21lIGtpbmQgb2YgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdW5pbnRlbmRlZCBiZWhhdmlvcj8gSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGVsc2UgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCBpcyB1c2VkLiBUaGlzIGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY0MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNjozOS4wOTY0NTM1MjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODQxOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9feDg2X3NldF9tZW1vcnlfcmVnaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9OTg0Mz1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTE2LS8qKlxcbmFyY2gveDg2L2t2bS94ODYuYzo5OTE3OiAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uOiBTZXR1cCBLVk0gaW50ZXJuYWwgbWVtb3J5IHNsb3RcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxOC0gKlxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MzctICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk5Mzg6dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuYy05OTM5LVxcdFxcdFxcdFxcdCAgICAgIHUzMiBzaXplKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5ODktfVxcbmFyY2gveDg2L2t2bS94ODYuYzo5OTkwOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbik7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5OTEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwMTQ9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyMi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyMzpcXHRcXHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNC1cXHRcXHRcXHRcXHRcXHQwLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjU6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBJREVOVElUWV9QQUdFVEFCTEVfUFJJVkFURV9NRU1TTE9ULFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNi1cXHRcXHRcXHRcXHRcXHQwLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjc6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBUU1NfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjgtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNjozOS4xNDUyOTgyMDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzNDcyNjIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgQ2FsbGVycyBvZiBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAgaXMgYmVpbmcgaW52b2tlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hvJ3MgdXNpbmcgdGhpcyB0aGluZz9cIiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBwYXRocywgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIGJlc2lkZXMgdGhlIG9uZXMgSSdtIGZhbWlsaWFyIHdpdGgsIGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGVtcGxveWVkLiBJcyB0aGlzIGEgY29tbW9uIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIHB1bGxlZCBpbnRvIHNldmVyYWwgZGlmZmVyZW50IGFyZWFzIG9mIHRoZSBjb2RlIGJhc2UsIG9yIGlzIGl0IG1vcmUgaXNvbGF0ZWQ/IFdoYXQgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIGFyZSBsZXZlcmFnaW5nIGl0PyBLbm93aW5nIHRoZSBhbnN3ZXIgdG8gdGhhdCB3aWxsIHByb3ZpZGUgY3JpdGljYWwgaW5mb3JtYXRpb24gd2hlbiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgZnJvbSBjaGFuZ2VzIHRvIHRoZSBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGZ1bmN0aW9uLiBJZGVudGlmeWluZyB3aGF0IG90aGVyIGFyZWFzIG9mIGNvZGUgY2FsbCBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGlzIHRoZSByaWdodCBmaXJzdCBzdGVwLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgdXNhZ2UgYmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlciB3aXRoIHRoaXMgdGFzay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNjo0Mi45ODAwMjY4ODRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTg3NjU1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX194ODZfc2V0X21lbW9yeV9yZWdpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9sYXBpYy5jPTI5MTA9aW50IGt2bV9hbGxvY19hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5MTktXFxuYXJjaC94ODYva3ZtL2xhcGljLmM6MjkyMDpcXHRodmEgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5MjEtXFx0XFx0XFx0XFx0ICAgICAgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSwgUEFHRV9TSVpFKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jPTI5MzE9dm9pZCBrdm1faW5oaWJpdF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDItXFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5hcGljX2FjY2Vzc19tZW1zbG90X2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzoyOTQzOlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1QsIDAsIDApO1xcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDQtXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NDAyNz1zdGF0aWMgaW50IGluaXRfcm1vZGVfaWRlbnRpdHlfbWFwKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDA0Mi1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjQwNDM6XFx0dWFkZHIgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00MDQ0LVxcdFxcdFxcdFxcdFxcdElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTUyNzQ9aW50IHZteF9zZXRfdHNzX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTI4MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTI4MjpcXHRyZXQgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIFRTU19QUklWQVRFX01FTVNMT1QsIGFkZHIsXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MjgzLVxcdFxcdFxcdFxcdCAgICAgIFBBR0VfU0laRSAqIDMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTk4NDM9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxNi0vKipcXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxNzogKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbjogU2V0dXAgS1ZNIGludGVybmFsIG1lbW9yeSBzbG90XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MTgtICpcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTM3LSAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzo5OTM4OnZvaWQgX191c2VyICogX194ODZfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgaWQsIGdwYV90IGdwYSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkzOS1cXHRcXHRcXHRcXHQgICAgICB1MzIgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTg5LX1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk5MDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX194ODZfc2V0X21lbW9yeV9yZWdpb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy05OTkxLVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDE0PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjItXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjM6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjQtXFx0XFx0XFx0XFx0XFx0MCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI1OlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjYtXFx0XFx0XFx0XFx0XFx0MCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI3OlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgVFNTX1BSSVZBVEVfTUVNU0xPVCwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI4LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaD01MjY9aW50IGt2bV9nZXRfbnJfcGVuZGluZ19ubWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5oLTUyNy1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg6NTI4OnZvaWQgX191c2VyICpfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuaC01MjktXFx0XFx0XFx0XFx0ICAgICB1MzIgc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI2OjQ0LjQzODc5NzE4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTk0Mjc1MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IFJlZ2lvbiBBc3NpZ25tZW50IGluIHRoZSB4ODYgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSByZWdpb25zIGFyZSBoYW5kbGVkIGluIHRoaXMgeDg2IGNvbnRleHQsIHNwZWNpZmljYWxseSB0aGUgdXNlIG9mIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBvbmx5IGV2ZXIgY2FsbGVkIHdpdGggaW50ZXJuYWwgbWVtc2xvdCBJRHMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcXVlc3Rpb246IGlmIHRoYXQncyB0aGUgKm9ubHkqIGNhc2UsIGRvZXNuJ3QgdGhhdCBtYWtlIGEgY2VydGFpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnQgYWx3YXlzIHRydWU/XG5cbkxldCBtZSB0aGlua+KApiB0aGUgY29kZSBoYXMgYGlkIFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTYC4gUmlnaHQuIElmIHRoZSBpbnB1dCBpcyBhbHdheXMgYW4gaW50ZXJuYWwgbWVtc2xvdCBJRCwgdGhlbiBpc24ndCB0aGUgY29tcGFyaXNvbiAqYWx3YXlzKiBnb2luZyB0byBldmFsdWF0ZSB0byB0cnVlPyBMZXQncyBjaGVjayB0aGUgZGVmaW5pdGlvbnMuIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIGRlZmluZWQgYXMgYEtWTV9NRU1fU0xPVFNfTlVNIC0gS1ZNX0lOVEVSTkFMX01FTV9TTE9UU2AuIE9rYXksIHNvIGBLVk1fTUVNX1NMT1RTX05VTWAgaXMgMzI3NjcsIGFuZCBgS1ZNX0lOVEVSTkFMX01FTV9TTE9UU2AgaXMgMy4gVGhhdCBtZWFucyBgS1ZNX1VTRVJfTUVNX1NMT1RTYCBpcyAzMjc2NC4gXG5cblNvIHRoZSBpbnRlcm5hbCBtZW1zbG90IElEcyBhcmUgMzI3NjQsIDMyNzY1LCBhbmQgMzI3NjYuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBUaGF0IGNvbXBhcmlzb24gKnNob3VsZCogYWx3YXlzIGJlIHRydWUuIEJ1dCB3YWl04oCmIEhvdyBhcmUgdGhlc2UgaW50ZXJuYWwgSURzIGV2ZW4gKmRlZmluZWQqPyBJIG5lZWQgdG8gdHJhY2sgZG93biBleGFjdGx5IGhvdyB0aGVzZSBtZW1zbG90IElEcyBhcmUgc2V0IHVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MgdG8gYmUgc3VyZSB0aGVyZSdzIG5vdCBzb21ldGhpbmcgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzI0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI2OjUzLjYzMzA3NDYxM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MDgzMjg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9UXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaD0yMDQ9ZW51bSB2bWNzX2ZpZWxkIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oLTUxNi0jZGVmaW5lIFRTU19QUklWQVRFX01FTVNMT1RcXHRcXHRcXHQoS1ZNX1VTRVJfTUVNX1NMT1RTICsgMClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaDo1MTc6I2RlZmluZSBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVFxcdChLVk1fVVNFUl9NRU1fU0xPVFMgKyAxKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oLTUxOC0jZGVmaW5lIElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1RcXHQoS1ZNX1VTRVJfTUVNX1NMT1RTICsgMilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MjY6NTUuMDczOTEyMTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUzNDQwMjc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNsb3QgQXNzaWdubWVudCBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgc2xvdCBhc3NpZ25tZW50LCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgYGlkYCBpcyBkZWZpbmVkIGFzIGBLVk1fVVNFUl9NRU1fU0xPVFMgKyBYYC4gVGhhdCBtZWFucyBgaWRgIGlzIGFsd2F5cyBnb2luZyB0byBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYEtWTV9VU0VSX01FTV9TTE9UU2AuIFRoZW4sIGBtLnNsb3RgIGlzIGNhbGN1bGF0ZWQgYXMgYGlkIHwgKGkgXHUwMDNjXHUwMDNjIDE2KWAuIEdpdmVuIHRoYXQgYGlkYCBpcyBhdCBsZWFzdCBgS1ZNX1VTRVJfTUVNX1NMT1RTYCwgdGhlIHJlc3VsdCBgbS5zbG90YCB3aWxsIGFsd2F5cyBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhhdCB2YWx1ZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgYGlgLlxuXG5IbW0sIHRoaXMgcmFpc2VzIGEgcXVlc3Rpb24uIFRoZSBjb2RlIGhhcyBgV0FSTl9PTl9PTkNFKG1lbS1cdTAwM2VzbG90IFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpYC4gSWYgYG0uc2xvdGAgaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTYCwgdGhlbiB0aGF0IGBXQVJOX09OX09OQ0VgIHdpbGwgKm5ldmVyKiB0cmlnZ2VyISBBbmQgdGhhdCdzIGV2ZW4gd2l0aG91dCBjb25zaWRlcmluZyBhbnkgY2FzdC5cblxuV2FpdCwgSSBuZWVkIHRvIGNvbnNpZGVyIGEgcG9zc2libGUgZWRnZSBjYXNlOiBDb3VsZCBgbWVtLVx1MDAzZXNsb3RgIHNvbWVob3cgYmUgbmVnYXRpdmU/IE5vLCBpdCdzIGEgYHUzMmAsIHNvIGl0J3MgdW5zaWduZWQuIEl0J3MgYWx3YXlzIGEgcG9zaXRpdmUgb3IgemVybyB2YWx1ZS5cblxuT2theSwgbGV0J3Mgc3RlcCB0aHJvdWdoIGEgY291cGxlIG9mIGV4YW1wbGVzLiBMZXQncyBzYXkgYEtWTV9VU0VSX01FTV9TTE9UU2AgaXMgMzI3NjQuIElmIGBpZGAgaXMgYEtWTV9VU0VSX01FTV9TTE9UUyArIFhgLCB0aGF0IG1lYW5zIGBpZGAgaXMgMzI3NjQgKyBYLlxuXG5JZiBgaWAgaXMgMCwgdGhlbiBgbS5zbG90YCBpcyBqdXN0IDMyNzY0ICsgWC5cbklmIGBpYCBpcyAxLCB0aGVuIGBtLnNsb3RgIGlzIGAoMzI3NjQgKyBYKSB8ICgxIFx1MDAzY1x1MDAzYyAxNilgIHdoaWNoIHJlc3VsdHMgaW4gYDY1NTM2ICsgMzI3NjQgKyBYYCB3aGljaCBpcyBgOTgzMDAgKyBYYC5cblxuSW4gYm90aCBvZiB0aGVzZSBjYXNlcywgYG0uc2xvdGAgaXMgY2xlYXJseSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYEtWTV9VU0VSX01FTV9TTE9UU2AgKDk4MzAwIGlzIGRlZmluaXRlbHkgXHUwMDNlPSAzMjc2NCkuXG5cblNvLCB0aGVuLCB3aHkgZGlkIHRoZXkgYWRkIHRoZSBgKHUxNilgIGNhc3Q/IEl0IHNlZW1zIGNvbXBsZXRlbHkgcmVkdW5kYW50LiBJIHNob3VsZCBwcm9iYWJseSByZS1leGFtaW5lIGhvdyBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBpcyB3b3JraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNzowMi42MDgzMTcyNzlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEyOCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEyODpcXHRpbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG4yMTI5OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgKm1lbSlcXG4yMTMwOlxcdHtcXG4yMTMxOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoKHUxNiltZW0tXFx1MDAzZXNsb3QgXFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpKVxcbjIxMzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjEzMzpcXHRcXG4yMTM0OlxcdFxcdGlmIChXQVJOX09OX09OQ0UobWVtLVxcdTAwM2VmbGFncykpXFxuMjEzNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMTM2OlxcdFxcbjIxMzc6XFx0XFx0cmV0dXJuIGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIG1lbSk7XFxuMjEzODpcXHR9XFxuMjEzOTpcXHRFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KTtcXG4yMTQwOlxcdFxcbjIxNDE6XFx0c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbjIxNDI6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxcbjIxNDM6XFx0e1xcbjIxNDQ6XFx0XFx0aWYgKCh1MTYpbWVtLVxcdTAwM2VzbG90IFxcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUylcXG4yMTQ1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIxNDY6XFx0XFxuMjE0NzpcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI3OjAyLjYwODUyNjI4OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTczMDg1NDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZ1bG5lcmFiaWxpdHkgRGlzY292ZXJlZCBpbiBLVk0gTWVtb3J5IFJlZ2lvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb25gIGFuZCBpbW1lZGlhdGVseSBzcG90IGEgcG90ZW50aWFsIGZsYXcgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGBtZW0tXHUwMDNlc2xvdGAgZmllbGQuIFRoZSBjb2RlIGNhc3RzIGBtZW0tXHUwMDNlc2xvdGAgdG8gYSBgdTE2YCBiZWZvcmUgY2hlY2tpbmcgaWYgaXQncyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlLCBzcGVjaWZpY2FsbHksIGAodTE2KW1lbS1cdTAwM2VzbG90IFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTYC4gVGhpcyBzZWVtcyBleHBsb2l0YWJsZS4gVXNlciBzcGFjZSBjYW4gZWZmZWN0aXZlbHkgc2V0IHRoZSB1cHBlciAxNiBiaXRzIG9mIGBtZW0tXHUwMDNlc2xvdGAgdG8gcmVwcmVzZW50IGFuIGFkZHJlc3Mgc3BhY2UgSUQuIElmIGEgdXNlciBwcm92aWRlcyBgbWVtLVx1MDAzZXNsb3QgPSAwIHwgKDEgXHUwMDNjXHUwMDNjIDE2KWAsIHRoZSBjYXN0IHRydW5jYXRlcyB0aGlzIHZhbHVlIGRvd24gdG8gMCwgd2hpY2ggaXMgdGhlbiwgaW5jb3JyZWN0bHksIGRldGVybWluZWQgdG8gYmUgdmFsaWQuXG5cblRoaXMgbWVhbnMgdXNlciBzcGFjZSBjYW4gcG90ZW50aWFsbHkgbWFuaXB1bGF0ZSBtZW1vcnkgcmVnaW9ucyBhY3Jvc3MgZGlmZmVyZW50IGFkZHJlc3Mgc3BhY2VzLiBUaGUgcHJvYmxlbSBsaWVzIHdpdGggdGhpcyBjYXN0IGFuZCB0aGUgc3Vic2VxdWVudCBib3VuZHMgY2hlY2suIEknbSBmb2N1c2luZyBvbiBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBhcyB0aGUgdGFyZ2V0IGZvciBleHBsb2l0YXRpb24uIE5vdywgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgc3VwcG9zZWRseSBvbmx5IGZvciAqaW50ZXJuYWwqIG1lbXNsb3RzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgc2hvdWxkIGJlIGludGVybmFsbHkgY29uc2lzdGVudCwgYnV0IHRoZSBtb3JlIEkgbG9vayBhdCB0aGlzLi4uXG5cbklmIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGdldHMgY2FsbGVkIHdpdGggYG1lbS1cdTAwM2VzbG90YCBiZWluZyBgMCB8ICgxIFx1MDAzY1x1MDAzYyAxNilgLCB0aGVuIHdpdGhvdXQgdGhlIGNhc3QsIHRoaXMgYmVjb21lcyA2NTUzNi4gTm93LCA2NTUzNiBpcyAqbm90KiBsZXNzIHRoYW4gYEtWTV9VU0VSX01FTV9TTE9UU2AhIFNvIHRoZSBib3VuZHMgY2hlY2sgKnNob3VsZCogcHJldmVudCB0aGUgaXNzdWUhXG5cbkhvd2V2ZXIsIHRoZSB2dWxuZXJhYmxlIGNvZGUgaW4gYGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbmAgYWxsb3dzIHRoZSB1c2VyIHRvIHRyaWNrIHRoZSBzeXN0ZW0gd2l0aCBhIGNhc3QgdG8gdTE2IGFuZCBwb3RlbnRpYWxseSBzZXQgbWVtb3J5IHJlZ2lvbnMgaW4gYSBkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZSwgc3BlY2lmaWNhbGx5LCBhIHVzZXIgbWVtc2xvdCB3aXRoIElEIDAgaW4gYSBub24temVybyBhZGRyZXNzIHNwYWNlLiBUaGlzIGlzIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eSBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgYSB1c2VyIHByb2Nlc3MgY291bGQgcG90ZW50aWFsbHkgb3ZlcndyaXRlIGNyaXRpY2FsIEtWTSBtZW1vcnkuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSBob3cgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgKmFjdHVhbGx5KiB1c2VkLiBFdmVuIGlmIHRoZSBjb2RlICpzaG91bGQqIGJlIHNhZmUsIGlmIGl0J3MgdXNlZCBpbiBhbiB1bmV4cGVjdGVkIG1hbm5lciwgdGhlIHZ1bG5lcmFiaWxpdHkgaXMgc3RpbGwgcHJlc2VudC4gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gYWxsIGNhbGxzIHRvIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSB0aGlzIGNvdWxkIGJlIGV4cGxvaXRlZCBieSBleHRlcm5hbCBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNzoxMS43ODE2MTQ4OTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTk4NjE0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jPTMyNDE9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTEtXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jOjMzNTI6XFx0XFx0S1ZNX0JVR19PTihrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoa3ZtLCBcXHUwMDI2ZmFrZV9tZW1zbG90KSwga3ZtKTtcXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTMtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTk5Mzg9dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5NzktXFx0XFx0bS5tZW1vcnlfc2l6ZSA9IHNpemU7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk5ODA6XFx0XFx0ciA9IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFxcdTAwMjZtKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk4MS1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTI0Mj1lbnVtIGt2bV9tcl9jaGFuZ2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNDgtXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjEyNDk6aW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNTAtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTk5NT1zdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjctXFxudmlydC9rdm0va3ZtX21haW4uYzoyMTI4OmludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyOS1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMzgtfVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEzOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxNDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI3OjEzLjI0MTQ4MTI0OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjQ5MTUwMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBDYWxsIFNpdGVzKipcblxuUmlnaHQsIHNvIEknbSBuYXJyb3dpbmcgZG93biB0aGUgcG90ZW50aWFsIGNhbGwgc2l0ZXMuIEl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIG9ubHkgdHdvIGZ1bmN0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSBjYWxsaW5nIGludG8gd2hhdGV2ZXIncyBiZWluZyBmbGFnZ2VkOiBgYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzozMzUyYCBhbmQgYGFyY2gveDg2L2t2bS94ODYuYzo5OTgwYC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgSSdkIHByb2JhYmx5IHdhbnQgdG8gZGlnIGluIHRvIHRoZSBzMzkwIGNvZGUgZmlyc3QsIHNvIGxldCdzIGNoZWNrIGBhcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jYC4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MTUsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNzoxOC40OTA2MzM1ODRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM0MDpcXHRcXG4zMzQxOlxcdFxcdGlmICh0eXBlIFxcdTAwMjYgS1ZNX1ZNX1MzOTBfVUNPTlRST0wpIHtcXG4zMzQyOlxcdFxcdFxcdHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIGZha2VfbWVtc2xvdCA9IHtcXG4zMzQzOlxcdFxcdFxcdFxcdC5zbG90ID0gS1ZNX1MzOTBfVUNPTlRST0xfTUVNU0xPVCxcXG4zMzQ0OlxcdFxcdFxcdFxcdC5ndWVzdF9waHlzX2FkZHIgPSAwLFxcbjMzNDU6XFx0XFx0XFx0XFx0LnVzZXJzcGFjZV9hZGRyID0gMCxcXG4zMzQ2OlxcdFxcdFxcdFxcdC5tZW1vcnlfc2l6ZSA9IEFMSUdOX0RPV04oVEFTS19TSVpFLCBfU0VHTUVOVF9TSVpFKSxcXG4zMzQ3OlxcdFxcdFxcdFxcdC5mbGFncyA9IDAsXFxuMzM0ODpcXHRcXHRcXHR9O1xcbjMzNDk6XFx0XFxuMzM1MDpcXHRcXHRcXHQvKiBvbmUgZmxhdCBmYWtlIG1lbXNsb3QgY292ZXJpbmcgdGhlIHdob2xlIGFkZHJlc3Mtc3BhY2UgKi9cXG4zMzUxOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuMzM1MjpcXHRcXHRcXHRLVk1fQlVHX09OKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFxcdTAwMjZmYWtlX21lbXNsb3QpLCBrdm0pO1xcbjMzNTM6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbjMzNTQ6XFx0XFx0XFx0c2V0X2JpdChHTUFQX0ZMQUdfSVNfVUNPTlRST0wsIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlZmxhZ3MpO1xcbjMzNTU6XFx0XFx0fSBlbHNlIHtcXG4zMzU2OlxcdFxcdFxcdHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsZSA9IGRlcmVmZXJlbmNlX2FzY2Uoa3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UpO1xcbjMzNTc6XFx0XFxuMzM1ODpcXHRcXHRcXHRjcnN0X3RhYmxlX2luaXQoKHZvaWQgKil0YWJsZSwgX0NSU1RFX0hPTEUodGFibGUtXFx1MDAzZWNyc3Rlc1swXS5oLnR0KS52YWwpO1xcbjMzNTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNzoxOC40OTA5NDAzNjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3OTEzNDU3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNX1MzOTBfVUNPTlRST0xfTUVNU0xPVCoqXG5cbk9rYXksIHNvIEknbSBzdGFyaW5nIGF0IHRoaXMgYEtWTV9TMzkwX1VDT05UUk9MX01FTVNMT1RgIGNvbnN0YW50IGFuZCBpbW1lZGlhdGVseSB0aGUgcXVlc3Rpb24gaGl0czogd2hhdCAqZXhhY3RseSogZG9lcyB0aGlzIHJlcHJlc2VudCB3aXRoaW4gdGhlIHMzOTAgS1ZNIGFyY2hpdGVjdHVyZT8gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBuYW1lIGFsb25lLCBhbmQgd2l0aCB0aGUgbnVhbmNlcyBvZiBzMzkwJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIHRoYXQgbWVhbnMgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcuIElzIHRoaXMgdGllZCB0byB0aGUgVUNPTlRST0wgbWVjaGFuaXNtIGZvciBndWVzdCBhY2Nlc3MgdG8gaG9zdCByZXNvdXJjZXM/IElmIHNvLCBpcyB0aGlzIGEgc3BlY2lmaWMgbWVtb3J5IHNsb3QgY29uZmlndXJhdGlvbiwgYSBoYW5kbGUsIG9yIHNvbWV0aGluZyBlbnRpcmVseSBkaWZmZXJlbnQgd2l0aGluIHRoZSBzMzkwIGNvbnRleHQ/IFRoaXMgc3VnZ2VzdHMgYSBkZWVwIGRpdmUgaW50byB0aGUgcmVsZXZhbnQgS1ZNIHNvdXJjZSBjb2RlLCBwYXJ0aWN1bGFybHkgdGhlIHMzOTAtc3BlY2lmaWMgcGFydHMuIEkgbmVlZCB0byBiZSBzdXJlIHRvIGNoZWNrIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyBpbiBga3ZtX3MzOTAuaGAgYW5kIHNlZSBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgY29udHJvbCBwYXRocy4gQW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvbiBVQ09OVFJPTCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgZ3Vlc3QgbWVtb3J5IHdvdWxkIGJlIGhlbHBmdWwgYXMgd2VsbC4gVW5kZXJzdGFuZGluZyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBhZGRyZXNzIHNwYWNlcywgbWVtb3J5IHJlZ2lvbnMsIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgaXMgY3J1Y2lhbC4gRXNzZW50aWFsbHksIEknbSBsb29raW5nIGZvciB0aGUgXCJ3aHlcIiBhbmQgXCJob3dcIiBvZiB0aGlzIHBhcnRpY3VsYXIgY29uc3RhbnQgdG8gZ3Jhc3AgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBLVk0gb24gczM5MC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI3OjI5LjI4MjI4ODAxMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1OTY4OTAzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEtWTV9TMzkwX1VDT05UUk9MX01FTVNMT1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmgtMjQtXFxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuaDoyNTojZGVmaW5lIEtWTV9TMzkwX1VDT05UUk9MX01FTVNMT1QgKEtWTV9VU0VSX01FTV9TTE9UUyArIDApXFxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuaC0yNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6Mjc6MzAuNzQxOTgwOTM4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMTU0NDc5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBNZW1vcnkgU2xvdCBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYEtWTV9TMzkwX1VDT05UUk9MX01FTVNMT1RgIGlzIGVzc2VudGlhbGx5IGFuIG9mZnNldCwgZXF1aXZhbGVudCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTICsgMGAuIEdvdCBpdC4gSW1wb3J0YW50bHksIGl0IGRvZXNuJ3QgaW52b2x2ZSBhbnkgYWRkcmVzcyBzcGFjZSBJRCBpbiB0aG9zZSB0b3AgMTYgYml0cyDigJMgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MsIEkgc3VwcG9zZS5cblxuU28sIGluIHRoZSBjYXNlIG9mIGBmYWtlX21lbXNsb3Quc2xvdGAsIHRoaXMgcmVzb2x2ZXMgZGlyZWN0bHkgdG8gYEtWTV9VU0VSX01FTV9TTE9UUyArIDBgIGFzIHdlbGwuIE5vdywgdGhlIGNydWNpYWwgcGFydDogdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGBtZW0tXHUwMDNlc2xvdCBcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gQmVjYXVzZSBgbWVtLVx1MDAzZXNsb3RgICppc24ndCogbGVzcyB0aGFuIGBLVk1fVVNFUl9NRU1fU0xPVFNgLCB0aGUgd2FybmluZyBwYXRoIGlzbid0IHRyaWdnZXJlZC4gVGhhdCdzIGdvb2QuIEl0IHN1Z2dlc3RzIHdlJ3JlIGhhbmRsaW5nIHRoaXMgY2FzZSBjb3JyZWN0bHksIG9yIGF0IGxlYXN0LCB0aGUgZXhpc3RpbmcgY2hlY2tzIGFyZW4ndCBmbGFnZ2luZyBpdCBhcyBhbiBlcnJvci5cblxuTm93LCBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMuIExldCdzIGRpZyBpbnRvIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIHJlbGV2YW50IGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uIG9mIG1lbW9yeSBzbG90IG1hbmFnZW1lbnQgdGhhdCBtYXkgYmUgdXNlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU5MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNzozOC44NTc0MzE1NzdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5OTcwOlxcdFxcdH1cXG45OTcxOlxcdFxcbjk5NzI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV9hcmNoX25yX21lbXNsb3RfYXNfaWRzKGt2bSk7IGkrKykge1xcbjk5NzM6XFx0XFx0XFx0c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgbTtcXG45OTc0OlxcdFxcbjk5NzU6XFx0XFx0XFx0bS5zbG90ID0gaWQgfCAoaSBcXHUwMDNjXFx1MDAzYyAxNik7XFxuOTk3NjpcXHRcXHRcXHRtLmZsYWdzID0gMDtcXG45OTc3OlxcdFxcdFxcdG0uZ3Vlc3RfcGh5c19hZGRyID0gZ3BhO1xcbjk5Nzg6XFx0XFx0XFx0bS51c2Vyc3BhY2VfYWRkciA9IGh2YTtcXG45OTc5OlxcdFxcdFxcdG0ubWVtb3J5X3NpemUgPSBzaXplO1xcbjk5ODA6XFx0XFx0XFx0ciA9IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFxcdTAwMjZtKTtcXG45OTgxOlxcdFxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG45OTgyOlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSX1VTUihyKTtcXG45OTgzOlxcdFxcdH1cXG45OTg0OlxcdFxcbjk5ODU6XFx0XFx0aWYgKCFzaXplKVxcbjk5ODY6XFx0XFx0XFx0dm1fbXVubWFwKGh2YSwgb2xkX25wYWdlcyAqIFBBR0VfU0laRSk7XFxuOTk4NzpcXHRcXG45OTg4OlxcdFxcdHJldHVybiAodm9pZCBfX3VzZXIgKilodmE7XFxuOTk4OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI3OjM4Ljg1Nzc4OTU0OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzM3MzcyMjEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbXNsb3QgSUQgQ2hlY2sgaW4gYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCwgdGhlIGBpZGAgdmFyaWFibGUgcmVwcmVzZW50cyBhbiBpbnRlcm5hbCBtZW1zbG90IElELCBlc3NlbnRpYWxseSBzdGFydGluZyBhdCBgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gVGhlIGNvcmUgb2YgdGhlIGxvZ2ljIGlzIHNldHRpbmcgYG0uc2xvdCA9IGlkIHwgKGkgXHUwMDNjXHUwMDNjIDE2KWAuIEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgdGhhdCBzaW5jZSBgaWRgIGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYEtWTV9VU0VSX01FTV9TTE9UU2AsIHRoZW4gYG0uc2xvdGAgd291bGQgKmFsd2F5cyogYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBLVk1fVVNFUl9NRU1fU0xPVFNgLiBUaGVyZWZvcmUsIHRoZSBjaGVjayBgbS5zbG90IFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFNgIHdvdWxkIGJlIHVuY29uZGl0aW9uYWxseSBmYWxzZSwgbWFraW5nIHRoZSBgV0FSTl9PTl9PTkNFYCBwb2ludGxlc3MuXG5cblRoZW4sIEkgc3RhcnRlZCB0byBjb25zaWRlciB0aGUgdHlwZXMuIElmIGBtLnNsb3RgIGlzIGEgYHUzMmAgYW5kIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIDMyNzY0LCB0aGVuIGNvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIGBpZGAgaXMgMzI3NjQgYW5kIGBpYCBpcyAxLiBXZSBnZXQgYG0uc2xvdGAgaXMgYDMyNzY0IHwgKDEgXHUwMDNjXHUwMDNjIDE2KWAsIHdoaWNoIGlzIDk4MzAwLiAgOTgzMDAgXHUwMDNjIDMyNzY0IGlzIGZhbHNlLCBhcyBleHBlY3RlZC4gU28gaXQgc3RpbGwgZG9lc24ndCBleHBsYWluIHRoZSB3YXJuaW5nLlxuXG5CdXQgdGhlbiwgdGhlIHBpdm90YWwgbW9tZW50OiB3aGF0IGlmIHRoZSBgaWRgICp3YXMqIGxlc3MgdGhhbiBgS1ZNX1VTRVJfTUVNX1NMT1RTYD8gSWYgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCB3YXMgY2FsbGVkIHdpdGggYGlkID0gMGAsIGZvciBleGFtcGxlLCB0aGVuIGBtLnNsb3QgPSAwIHwgKDEgXHUwMDNjXHUwMDNjIDE2KWAgYmVjb21lcyA2NTUzNi4gNjU1MzYgXHUwMDNjIDMyNzY0IGlzICpzdGlsbCogZmFsc2UuXG5cbkFoYSEgVGhhdCdzIHdoZW4gaXQgaGl0IG1lLiBUaGUgY2FzdCBgKHUxNiltZW0tXHUwMDNlc2xvdGAgaXMgdGhlIGtleS4gVGhlIGNhc3QgZXh0cmFjdHMgdGhlIGxvd2VyIDE2IGJpdHMsIHdoaWNoIGlzIHRoZSBgaWRgLiBXaGVuIHdlIGhhdmUgYGlkYCBhcyBgMGAsIGAwIFx1MDAzYyAzMjc2NGAgaXMgKnRydWUqLiBTbyB0aGlzIGBXQVJOX09OX09OQ0VgIHdpbGwgdHJpZ2dlciEgVGhlIGNhc3QgaXMgYWN0dWFsbHkgKmZpeGluZyogdGhlIHdhcm5pbmcgc28gaXQgdHJpZ2dlcnMgd2hlbiBpdCBzaG91bGQsIGluIHRoZSBjYXNlIG9mIGEgdXNlciBtZW1zbG90IElEIHdpdGggYSBub24temVybyBhZGRyZXNzIHNwYWNlISBUaGF0J3MgY2xldmVyLlxuXG5Ib3dldmVyLCB0aGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiAqc2hvdWxkKiB0aGF0IGJlIHBvc3NpYmxlPyBUaGUgY29kZSAqc2hvdWxkbid0KiBiZSBjYWxsZWQgd2l0aCBzdWNoIGFuIGBpZGAgdmFsdWUsIGFzIGl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIGludGVybmFsIG1lbXNsb3QgSURzLlxuXG5UbyBiZSBzdXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYC4gSSBhbHJlYWR5IGtub3cgdGhhdCBga3ZtX2FsbG9jX2FwaWNfYWNjZXNzX3BhZ2VgLCBga3ZtX2luaGliaXRfYXBpY19hY2Nlc3NfcGFnZWAsIGBpbml0X3Jtb2RlX2lkZW50aXR5X21hcGAsIGB2bXhfc2V0X3Rzc19hZGRyYCBhbmQgYGt2bV9hcmNoX2Rlc3Ryb3lfdm1gIGNhbGwgdGhpcywgdXNpbmcgdmFsdWVzIGxpa2UgYEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9UYCBhbmQgb3RoZXJzLiBCdXQgYXJlIHRoZXJlICphbnkqIG90aGVyIGNhbGxlcnM/IEknZCBiZXR0ZXIgYmUgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBjYXNlcyBJJ20gbWlzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIGEgdXNlZnVsIGFuYWx5c2lzIHNvIGZhci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNzo1Ni4yMzE1MTQ1NzlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzI1NTgxMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX194ODZfc2V0X21lbW9yeV9yZWdpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9sYXBpYy5jPTI5MTA9aW50IGt2bV9hbGxvY19hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5MTktXFxuYXJjaC94ODYva3ZtL2xhcGljLmM6MjkyMDpcXHRodmEgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5MjEtXFx0XFx0XFx0XFx0ICAgICAgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSwgUEFHRV9TSVpFKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jPTI5MzE9dm9pZCBrdm1faW5oaWJpdF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDItXFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5hcGljX2FjY2Vzc19tZW1zbG90X2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzoyOTQzOlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1QsIDAsIDApO1xcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDQtXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NDAyNz1zdGF0aWMgaW50IGluaXRfcm1vZGVfaWRlbnRpdHlfbWFwKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDA0Mi1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjQwNDM6XFx0dWFkZHIgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00MDQ0LVxcdFxcdFxcdFxcdFxcdElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTUyNzQ9aW50IHZteF9zZXRfdHNzX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTI4MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTI4MjpcXHRyZXQgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIFRTU19QUklWQVRFX01FTVNMT1QsIGFkZHIsXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MjgzLVxcdFxcdFxcdFxcdCAgICAgIFBBR0VfU0laRSAqIDMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTk4NDM9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxNi0vKipcXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxNzogKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbjogU2V0dXAgS1ZNIGludGVybmFsIG1lbW9yeSBzbG90XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MTgtICpcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTM3LSAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzo5OTM4OnZvaWQgX191c2VyICogX194ODZfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgaWQsIGdwYV90IGdwYSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkzOS1cXHRcXHRcXHRcXHQgICAgICB1MzIgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTg5LX1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk5MDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX194ODZfc2V0X21lbW9yeV9yZWdpb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy05OTkxLVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDE0PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjItXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjM6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjQtXFx0XFx0XFx0XFx0XFx0MCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI1OlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjYtXFx0XFx0XFx0XFx0XFx0MCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI3OlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgVFNTX1BSSVZBVEVfTUVNU0xPVCwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI4LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaD01MjY9aW50IGt2bV9nZXRfbnJfcGVuZGluZ19ubWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5oLTUyNy1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg6NTI4OnZvaWQgX191c2VyICpfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuaC01MjktXFx0XFx0XFx0XFx0ICAgICB1MzIgc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI3OjU3LjY2NDA3Njg2NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIzMTk3NDM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBzZWVtcyBsaWtlIGEgZml4IGZvciBhIHRoZW9yZXRpY2FsIGlzc3VlLiBUaGVyZSBhcmUgbm8gb3RoZXIgY2FsbGVycyB0byBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCB0aGF0IEkndmUgZm91bmQgb3RoZXIgdGhhbiBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGFuZCB0aGUgYHMzOTBgIGNvZGUuIFNpbmNlIHRoZXJlIGFyZSBubyBvdGhlciBjYWxsZXJzLCB0aGUgYGlkYCBhcmd1bWVudCB3aWxsICphbHdheXMqIGJlIGFuIGludGVybmFsIG1lbXNsb3QgSUQsIHdoaWNoLCBieSBkZWZpbml0aW9uLCBpcyBnb2luZyB0byBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYEtWTV9VU0VSX01FTV9TTE9UU2AuIFRoZXJlZm9yZSwgYCh1MTYpbWVtLVx1MDAzZXNsb3RgIHdpbGwgKmFsd2F5cyogYmUgYFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTYC4gVGhpcyBtZWFucyB0aGF0IHRoZSBvcmlnaW5hbCBgV0FSTl9PTl9PTkNFYCBjb25kaXRpb24gd291bGQgbmV2ZXIgdHJpZ2dlciwgYm90aCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC5cblxuSSBhbHJlYWR5IGNvbmZpcm1lZCB0aGUgYHMzOTBgIGNvZGUgdXNlcyBgS1ZNX1VTRVJfTUVNX1NMT1RTICsgMGAsIG1lYW5pbmcgdGhpcyBpcyBhbHNvIGBcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UU2AuXG5cblNvLCB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgYFdBUk5fT05fT05DRWAgdGhhdCB3YXMgaW50ZW5kZWQgdG8gY2hlY2sgaWYgc29tZW9uZSBhY2NpZGVudGFsbHkgcGFzc2VkIGEgdXNlciBtZW1zbG90IElEIHRvIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGEgdXNlciBtZW1zbG90IElEIHdpdGggYSBub24temVybyBhZGRyZXNzIHNwYWNlIGNvdWxkIHJlc3VsdCBpbiBgbWVtLVx1MDAzZXNsb3RgIGJlaW5nIGBcdTAwM2U9IDY1NTM2YCwgd2hpY2ggaXMgKmdyZWF0ZXIqIHRoYW4gYEtWTV9VU0VSX01FTV9TTE9UU2AsIHNvIHRoZSBgV0FSTl9PTl9PTkNFYCB3b3VsZCBpbmNvcnJlY3RseSBmYWlsIHRvIHRyaWdnZXIgaW4gdGhvc2UgY2FzZXMuIFRoZSBhZGRlZCBgKHUxNilgIGNhc3QgY29ycmVjdGx5IGV4dHJhY3RzIHRoZSBiYXNlIHNsb3QgSUQgYW5kIGNoZWNrcyBpdCBhZ2FpbnN0IGBLVk1fVVNFUl9NRU1fU0xPVFNgLiBIb3dldmVyLCBnaXZlbiB0aGF0IHRoZXJlIGFyZSBubyBjdXJyZW50IGNhbGxlcnMgdGhhdCBhY3R1YWxseSBwYXNzIGEgdXNlciBtZW1zbG90IElELCB0aGlzIGNoZWNrIG5ldmVyIHRyaWdnZXJzIGFueXdheS4gSXQgaXMganVzdCBhIGZpeCBmb3IgYSBzYW5pdHkgY2hlY2suXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGRvZXMgdGhpcyBoYXZlIGFueSBmdW5jdGlvbmFsIGltcGFjdD8gTXkgYXNzZXNzbWVudCBpcyBuby4gSXQncyBqdXN0IG1vZGlmeWluZyBhIGBXQVJOX09OX09OQ0VgIHRoYXQgaXMgbmV2ZXIgaGl0IGluIHByYWN0aWNlIGJlY2F1c2UgYWxsIGN1cnJlbnQgY2FsbGVycyBwYXNzIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzLlxuXG5Db3VsZCBhIGZ1enplciBsaWtlIHN5emthbGxlciBwb3NzaWJseSB0cmlnZ2VyIHRoaXM/IEkgZG9uJ3QgdGhpbmsgc28uIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGlzIGFuIGludGVybmFsIEFQSS4gVXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIG1lbW9yeSByZWdpb25zIHRocm91Z2ggdGhlIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjJgIGlvY3RsLCB3aGljaCBjYWxscyBga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uYC4gVGhhdCBmdW5jdGlvbiBoYXMgaXRzIG93biBzYWZldHkgY2hlY2s6XG5cbmBgYGNcbiAgICBpZiAoKHUxNiltZW0tXHUwMDNlc2xvdCBcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUylcbiAgICAgICAgICAgIHJldHVybiAtRUlOVkFMO1xuYGBgXG5cblRoaXMgKmNvcnJlY3RseSogdXNlcyB0aGUgYCh1MTYpbWVtLVx1MDAzZXNsb3RgIHRvIHByZXZlbnQgdXNlcnNwYWNlIGZyb20gYXR0ZW1wdGluZyB0byBzZXQgaW50ZXJuYWwgbWVtc2xvdHMuIFRodXMsIHVzZXJzcGFjZSBjYW4ndCBldmVuIGdldCB0byBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YC4gSXQgaXMgb25seSByZWFjaGFibGUgdmlhIGludGVybmFsIEtWTSBjb2RlLCB3aGljaCwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgYWx3YXlzIHBhc3NlcyB2YWxpZCBtZW1zbG90IElEcy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGhhcyB6ZXJvIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIGFueSByZWFjaGFibGUgY29kZSBwYXRocy4gSXQganVzdCBmaXhlcyBhIGRlYWQgc2FuaXR5IGNoZWNrLiBJJ2xsIGRvdWJsZSBjaGVjayBmb3IgYW55IGNhbGxlcnMgb2YgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgdGhhdCBJIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6Mjg6MDkuODk2MDUzMjE5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyMCwiRXJyb3IiOiJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXFxuWW91IGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0IG9mIHRoaXMgZXhhY3QgdG9vbCBjYWxsIGluIHlvdXIgY29udmVyc2F0aW9uIGhpc3RvcnkuXFxuRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsXFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLlwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyODowOS44OTYwOTg0MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY2NDE5ODQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIEkgZHVnIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAuIEkgYWxyZWFkeSByYW4gYSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbGVycywgYW5kIGl0J3MgY2xlYXIgdGhlcmUgYXJlIG9ubHkgdHdvIOKAkyB3aGljaCBuYXJyb3dzIHRoZSBzY29wZSBzaWduaWZpY2FudGx5LiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGp1c3QgdG91Y2hpbmcgYSBgV0FSTl9PTl9PTkNFYCBjb25kaXRpb24uIFRoYXQncyBhIHNhbml0eSBjaGVjaywgbm90IGEgY29yZSBmdW5jdGlvbiwgc28gbXkgaW5pdGlhbCBpbnN0aW5jdCBzYXlzIHRoaXMgaXMgbG93LWltcGFjdC5cblxuRGlnZ2luZyBkZWVwZXIsIHRoZSBjb25kaXRpb24gaW4gcXVlc3Rpb24gaXMgbmV2ZXIgYWN0dWFsbHkgdHJpZ2dlcmVkLiBUaGUgY2FsbGluZyBmdW5jdGlvbnMgYWx3YXlzIHBhc3MgdmFsaWQgYGludGVybmFsIG1lbXNsb3RgIElEcywgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEV2ZW4gaWYgdGhlIGNvbmRpdGlvbiAqd2VyZSogbWV0LCBpdCB3b3VsZCBvbmx5IGxvZyBhIHdhcm5pbmcgYW5kIHJldHVybiBgLUVJTlZBTGAuIEZ1bmN0aW9uYWxseSwgdGhlIGNvZGUgZmxvdyByZW1haW5zIHVuY2hhbmdlZC4gVGhlcmVmb3JlLCBpdCdzIHNhZmUgdG8gc2F5IHRoZXJlIGlzIG5vIHVzZXIgdmlzaWJsZSBmdW5jdGlvbmFsIGltcGFjdC5cblxuTGV0J3Mgc3VtbWFyaXplIHRoZSBsb2dpYyBiZWhpbmQgdGhlIGNoYW5nZSBmb3IgZ29vZCBtZWFzdXJlLiBUaGUgcGF0Y2ggZXNzZW50aWFsbHkgYWRkcyBhIGNhc3QgdG8gaGFuZGxlIG5vbi16ZXJvIGFkZHJlc3Mgc3BhY2UgSURzIGluIHRoZSB1cHBlciAxNiBiaXRzIG9mIHRoZSBgbWVtLVx1MDAzZXNsb3RgIGZpZWxkLCBmaXhpbmcgdGhlIGNoZWNrIGZvciBzbG90cyBncmVhdGVyIHRoYW4gYEtWTV9VU0VSX01FTV9TTE9UU2AuIEhvd2V2ZXIsIGdpdmVuIHRoYXQgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgYW4gaW50ZXJuYWwgQVBJLCBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSAoaXQgdXNlcyBga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uYCBmb3IgZXh0ZXJuYWwgY2FsbHMsIHdoaWNoIGhhcyBpdHMgb3duIHZlcmlmaWNhdGlvbikuIFRoZSBmdW5jdGlvbnMgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCBhbmQgYHMzOTBgJ3MgYGt2bV9hcmNoX2luaXRfdm1gIGFyZSB0aGUgb25seSBjYWxsZXJzLCBhbmQgdGhleSdyZSBtZXRpY3Vsb3VzbHkgcGFzc2luZyB2YWxpZCBpbnRlcm5hbCBtZW1zbG90IElEcy4gU28sIHRoaXMgYm9pbHMgZG93biB0byBmaXhpbmcgYSB0aGVvcmV0aWNhbCBidWcgdGhhdCBpcyBuZXZlciBoaXQgaW4gcHJhY3RpY2UuIE15IGNvbmNsdXNpb24/IFRoaXMgb25lIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg3MywiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6Mjg6MjEuNTYwMjk5MDcyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYSBXQVJOX09OX09OQ0UgY2hlY2sgaW4ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IHRvIGNhc3QgbWVtLVxcdTAwM2VzbG90IHRvICh1MTYpIGJlZm9yZSBjb21wYXJpbmcgaXQgdG8gS1ZNX1VTRVJfTUVNX1NMT1RTLiBUaGlzIGZpeGVzIHRoZSBzYW5pdHkgY2hlY2sgdG8gY29ycmVjdGx5IGhhbmRsZSBtZW1vcnkgc2xvdHMgd2l0aCBub24temVybyBhZGRyZXNzIHNwYWNlIElEcyAoZW5jb2RlZCBpbiB0aGUgdXBwZXIgMTYgYml0cykuIEhvd2V2ZXIsIGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCBpcyBhbiBpbnRlcm5hbCBLVk0gQVBJIHRoYXQgaXMgb25seSBjYWxsZWQgYnkgX194ODZfc2V0X21lbW9yeV9yZWdpb24gYW5kIHMzOTAncyBrdm1fYXJjaF9pbml0X3ZtLCBib3RoIG9mIHdoaWNoIGFsd2F5cyBwYXNzIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzIChcXHUwMDNlPSBLVk1fVVNFUl9NRU1fU0xPVFMpLiBVc2Vyc3BhY2UgY2Fubm90IHJlYWNoIHRoaXMgZnVuY3Rpb24sIGFzIGl0IHVzZXMga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uIHdoaWNoIGhhcyBpdHMgb3duIGNvcnJlY3QgY2hlY2suIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBvbmx5IGZpeGVzIGEgdGhlb3JldGljYWwgYnVnIGluIGEgc2FuaXR5IGNoZWNrIHRoYXQgaXMgbmV2ZXIgdHJpZ2dlcmVkIGluIHByYWN0aWNlLCBhbmQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYSBXQVJOX09OX09OQ0UgY2hlY2sgaW4ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IHRvIGNhc3QgbWVtLVxcdTAwM2VzbG90IHRvICh1MTYpIGJlZm9yZSBjb21wYXJpbmcgaXQgdG8gS1ZNX1VTRVJfTUVNX1NMT1RTLiBUaGlzIGZpeGVzIHRoZSBzYW5pdHkgY2hlY2sgdG8gY29ycmVjdGx5IGhhbmRsZSBtZW1vcnkgc2xvdHMgd2l0aCBub24temVybyBhZGRyZXNzIHNwYWNlIElEcyAoZW5jb2RlZCBpbiB0aGUgdXBwZXIgMTYgYml0cykuIEhvd2V2ZXIsIGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCBpcyBhbiBpbnRlcm5hbCBLVk0gQVBJIHRoYXQgaXMgb25seSBjYWxsZWQgYnkgX194ODZfc2V0X21lbW9yeV9yZWdpb24gYW5kIHMzOTAncyBrdm1fYXJjaF9pbml0X3ZtLCBib3RoIG9mIHdoaWNoIGFsd2F5cyBwYXNzIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzIChcXHUwMDNlPSBLVk1fVVNFUl9NRU1fU0xPVFMpLiBVc2Vyc3BhY2UgY2Fubm90IHJlYWNoIHRoaXMgZnVuY3Rpb24sIGFzIGl0IHVzZXMga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uIHdoaWNoIGhhcyBpdHMgb3duIGNvcnJlY3QgY2hlY2suIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBvbmx5IGZpeGVzIGEgdGhlb3JldGljYWwgYnVnIGluIGEgc2FuaXR5IGNoZWNrIHRoYXQgaXMgbmV2ZXIgdHJpZ2dlcmVkIGluIHByYWN0aWNlLCBhbmQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6Mjg6MjEuNTYwMzIyMDcyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4p5h4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 11:29:46 +0000 UTC FinishedAt: 2026-08-27 12:28:22 +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+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBXQVJOX09OX09OQ0UgY2hlY2sgaW4ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IHRvIGNhc3QgbWVtLVx1MDAzZXNsb3QgdG8gKHUxNikgYmVmb3JlIGNvbXBhcmluZyBpdCB0byBLVk1fVVNFUl9NRU1fU0xPVFMuIFRoaXMgZml4ZXMgdGhlIHNhbml0eSBjaGVjayB0byBjb3JyZWN0bHkgaGFuZGxlIG1lbW9yeSBzbG90cyB3aXRoIG5vbi16ZXJvIGFkZHJlc3Mgc3BhY2UgSURzIChlbmNvZGVkIGluIHRoZSB1cHBlciAxNiBiaXRzKS4gSG93ZXZlciwga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IGlzIGFuIGludGVybmFsIEtWTSBBUEkgdGhhdCBpcyBvbmx5IGNhbGxlZCBieSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbiBhbmQgczM5MCYjMzk7cyBrdm1fYXJjaF9pbml0X3ZtLCBib3RoIG9mIHdoaWNoIGFsd2F5cyBwYXNzIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzIChcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUykuIFVzZXJzcGFjZSBjYW5ub3QgcmVhY2ggdGhpcyBmdW5jdGlvbiwgYXMgaXQgdXNlcyBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24gd2hpY2ggaGFzIGl0cyBvd24gY29ycmVjdCBjaGVjay4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIG9ubHkgZml4ZXMgYSB0aGVvcmV0aWNhbCBidWcgaW4gYSBzYW5pdHkgY2hlY2sgdGhhdCBpcyBuZXZlciB0cmlnZ2VyZWQgaW4gcHJhY3RpY2UsIGFuZCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVhY2hhYmxlIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWY0NzNkZTg2Y2QwMGNkNzU5NTkyMWNkNjY3Y2VmNjk3NGJhMTE1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjE5OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA2NWViMjZhMDUyMGQ4Li5lOGQwZTM2MGVhMjZiIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTIxMjgsNyAmIzQzOzIxMjgsNyBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gaW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxuIHtcbi1cdGlmIChXQVJOX09OX09OQ0UobWVtLVx1MDAzZXNsb3QgXHUwMDNjIEtWTV9VU0VSX01FTV9TTE9UUykpXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSgodTE2KW1lbS1cdTAwM2VzbG90IFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UobWVtLVx1MDAzZWZsYWdzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBXQVJOX09OX09OQ0UgY2hlY2sgaW4ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IHRvIGNhc3QgbWVtLVx1MDAzZXNsb3QgdG8gKHUxNikgYmVmb3JlIGNvbXBhcmluZyBpdCB0byBLVk1fVVNFUl9NRU1fU0xPVFMuIFRoaXMgZml4ZXMgdGhlIHNhbml0eSBjaGVjayB0byBjb3JyZWN0bHkgaGFuZGxlIG1lbW9yeSBzbG90cyB3aXRoIG5vbi16ZXJvIGFkZHJlc3Mgc3BhY2UgSURzIChlbmNvZGVkIGluIHRoZSB1cHBlciAxNiBiaXRzKS4gSG93ZXZlciwga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IGlzIGFuIGludGVybmFsIEtWTSBBUEkgdGhhdCBpcyBvbmx5IGNhbGxlZCBieSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbiBhbmQgczM5MCYjMzk7cyBrdm1fYXJjaF9pbml0X3ZtLCBib3RoIG9mIHdoaWNoIGFsd2F5cyBwYXNzIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzIChcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUykuIFVzZXJzcGFjZSBjYW5ub3QgcmVhY2ggdGhpcyBmdW5jdGlvbiwgYXMgaXQgdXNlcyBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24gd2hpY2ggaGFzIGl0cyBvd24gY29ycmVjdCBjaGVjay4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIG9ubHkgZml4ZXMgYSB0aGVvcmV0aWNhbCBidWcgaW4gYSBzYW5pdHkgY2hlY2sgdGhhdCBpcyBuZXZlciB0cmlnZ2VyZWQgaW4gcHJhY3RpY2UsIGFuZCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVhY2hhYmxlIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWY0NzNkZTg2Y2QwMGNkNzU5NTkyMWNkNjY3Y2VmNjk3NGJhMTE1MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDEyOjE5OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNjVlYjI2YTA1MjBkOC4uZThkMGUzNjBlYTI2YiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC0yMTI4LDcgJiM0MzsyMTI4LDcgQEAgc3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogaW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pCiB7Ci0JaWYgKFdBUk5fT05fT05DRShtZW0tJmd0O3Nsb3QgJmx0OyBLVk1fVVNFUl9NRU1fU0xPVFMpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCh1MTYpbWVtLSZndDtzbG90ICZsdDsgS1ZNX1VTRVJfTUVNX1NMT1RTKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKG1lbS0mZ3Q7ZmxhZ3MpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIGF0IGZpcnN0IGdsYW5jZS4gSXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgcmlnaHQgdGhlcmU6IHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgY2FzdGluZyBgbWVtLSZndDtzbG90YCB0byBgdTE2YCBiZWZvcmUgY29tcGFyaW5nIGl0IHRvIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGluc2lkZSB0aGF0IGBXQVJOX09OX09OQ0VgIGNoZWNrLiAKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHRvIGJlIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgYmVpbmcgYWRkcmVzc2VkLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgbGlrZWx5IHJlbHlpbmcgb24gaW1wbGljaXQgdHlwZSBwcm9tb3Rpb24sIGJ1dCBwZXJoYXBzIGEgc2NlbmFyaW8gd2FzIGlkZW50aWZpZWQgd2hlcmUgYG1lbS0mZ3Q7c2xvdGAgY291bGQgYmUgYSBsYXJnZXIgaW50ZWdlciB0eXBlLCBhbmQgd2l0aG91dCB0aGUgY2FzdCwgdGhlIGNvbXBhcmlzb24gbWlnaHQgaGF2ZSBiZWVuIHN1YnRseSBpbmNvcnJlY3QgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBsZWFkaW5nIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoZSBgV0FSTl9PTl9PTkNFYCBpbmRpY2F0ZXMgaXQmIzM5O3MgYSBjcml0aWNhbCBzYWZldHkgY2hlY2ssIHNvIHRoaXMgbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGdvb2QgdGhhdCB0aGV5JiMzOTtyZSBiZWluZyBleHBsaWNpdCBhYm91dCB0aGUgaW50ZW5kZWQgc2l6ZS4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBkaWcgZGVlcGVyIGFuZCBsb29rIGludG8gYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoaXMgbWVtc2xvdCBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgS1ZNX1VTRVJfTUVNX1NMT1RTYCBjb25zdGFudCByZXByZXNlbnRzIGFuZCB3aGF0IGEgcG90ZW50aWFsIG92ZXJmbG93IGNvdWxkIGRvLiBMZXQmIzM5O3Mgc2VlIGhvdyBtZW1vcnkgc2xvdHMgYXJlIG1hbmFnZWQgaW4gS1ZNIGFuZCB3aGF0IGNhbiBnbyB3cm9uZyBpZiB0aGUgc2xvdCBpbmRleCBnZXRzIGNvcnJ1cHRlZC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGRvY3VtZW50YXRpb24gb24gdGhlIHJlYXNvbmluZyBiZWhpbmQgbGltaXRpbmcgdGhlIGBtZW0tJmd0O3Nsb3RgIG51bWJlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fc2V0X2ludGVybmFsX21lbXNsb3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9MTk5NT1zdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yMTI3LVxudmlydC9rdm0va3ZtX21haW4uYzoyMTI4OmludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxudmlydC9rdm0va3ZtX21haW4uYy0yMTI5LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgKm1lbSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMzgtfVxudmlydC9rdm0va3ZtX21haW4uYzoyMTM5OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2ludGVybmFsX21lbXNsb3QpO1xudmlydC9rdm0va3ZtX21haW4uYy0yMTQwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgLiBUaGUgZmlyc3QgdGhpbmcgSSBhbHdheXMgZG8gaXMgdHJhY2UgaXRzIGNhbGxpbmcgY29udGV4dC4gVW5kZXJzdGFuZGluZyAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlzIGFic29sdXRlbHkgY3J1Y2lhbCB0byBncmFzcGluZyBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCB3aXRoaW4gdGhlIEtWTSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHVzYWdlIHRocm91Z2hvdXQgdGhlIGNvZGUgYmFzZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IGludm9rZWQuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM9MzI0MT1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTEtXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzozMzUyOlx0XHRLVk1fQlVHX09OKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFx1MDAyNmZha2VfbWVtc2xvdCksIGt2bSk7XG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTMtXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTk5Mzg9dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTc5LVx0XHRtLm1lbW9yeV9zaXplID0gc2l6ZTtcbmFyY2gveDg2L2t2bS94ODYuYzo5OTgwOlx0XHRyID0ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KGt2bSwgXHUwMDI2bSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk4MS1cdFx0aWYgKHIgXHUwMDNjIDApXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTEyNDI9ZW51bSBrdm1fbXJfY2hhbmdlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI0OC1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxMjQ5OmludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNTAtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKTtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE5OTU9c3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyNy1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEyODppbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyOS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yMTM4LX1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEzOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjE0MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjE0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIE1lbW9yeSBTbG90IEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBhIHR5cGUgY29udmVyc2lvbjogYG1lbS0mZ3Q7c2xvdGAgaXMgbm93IGJlaW5nIGNhc3QgdG8gYCh1MTYpbWVtLSZndDtzbG90YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2h5IHRoZSB0eXBlIHJlZHVjdGlvbj8mIzM0OyBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgbWVtLSZndDtzbG90YCBpcyBkZWZpbmVkIGFzIGEgYHUzMmAgd2l0aGluIHRoZSBgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gQSBxdWljayBtZW50YWwgY2hlY2sgYnJpbmdzIHVwIGBLVk1fVVNFUl9NRU1fU0xPVFNgLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWVtb3J5IHNsb3RzIGFsbG93ZWQuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIHN0dWZmLCBhIGB1MTZgIGlzIDE2IGJpdHMsIGB1MzJgIGlzIDMyIGJpdHMgYW5kIGlmIHRoaXMgaXMgaW50ZW5kZWQgYXMgYSB0eXBlIHJlc3RyaWN0aW9uLCBJIG5lZWQgdG8gbG9vayBpbnRvIGBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMmAuIFdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZXJlPyBJcyBpdCBhIGRhdGEgdHlwZSBzaXplIHJlZHVjdGlvbiBmb3IgZWZmaWNpZW5jeSwgb3IgaXMgaXQgYSBzaWduIG9mIHNvbWV0aGluZyB0aGF0IEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgb24/IEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoYXQgc3RydWN0dXJlIGRlZmluaXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNsb3QgdmFsdWUgaXMgdXNlZCBhbmQgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHNsb3QgYWRkcmVzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjQ5PWludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjEyNTA6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMjUxLXZvaWQga3ZtX2FyY2hfZnJlZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCk7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTMwPXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0zOC0vKiBmb3IgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yICovXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6Mzk6c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIge1xuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQwLVx0X191MzIgc2xvdDtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTI1Mz1zdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Age1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xMjcyLSNkZWZpbmUgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yIF9JT1coS1ZNSU8sIDB4NDksIFxcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTI3MzpcdFx0XHRcdFx0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yKVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTEyNzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNJiMzOTtzIE1lbW9yeSBSZWdpb24gU2V0dXAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgYXJjaC94ODYva3ZtL3g4Ni5jYCBmaWxlIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIHg4Ni1zcGVjaWZpYyBLVk0gY29kZSBsaXZlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIHNldCB1cC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGZ1bmN0aW9uLiBJIGhhdmUgYSBmZWVsaW5nIHRoaXMgaXMgdGhlIGtleSB0byBob3cgS1ZNIG1hbmFnZXMgZ3Vlc3QgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmdzIGFuZCBoYW5kbGVzIGludGVyYWN0aW9ucyB3aXRoIHRoZSBob3N0JiMzOTtzIHBoeXNpY2FsIG1lbW9yeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBwYWdpbmcgc3RydWN0dXJlcywgYW5kIHdoYXQgdGhlIG92ZXJhbGwgaW1wbGljYXRpb25zIGFyZSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHZpcnR1YWxpemF0aW9uLiBJIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIGhvdyB0aGlzIGZ1bmN0aW9uIGVuZm9yY2VzIHRoZSBtZW1vcnkgcmVnaW9uIGJvdW5kYXJpZXMgYW5kIHBlcm1pc3Npb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X194ODZfc2V0X21lbW9yeV9yZWdpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTk4NDM9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MTYtLyoqXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxNzogKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbjogU2V0dXAgS1ZNIGludGVybmFsIG1lbW9yeSBzbG90XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxOC0gKlxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTM3LSAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jOjk5Mzg6dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MzktXHRcdFx0XHQgICAgICB1MzIgc2l6ZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk4OS19XG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk5MDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX194ODZfc2V0X21lbW9yeV9yZWdpb24pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTk5OTEtXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDE0PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDIyLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyMzpcdFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVCxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNC1cdFx0XHRcdFx0MCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjU6XHRcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVCxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNi1cdFx0XHRcdFx0MCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjc6XHRcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgVFNTX1BSSVZBVEVfTUVNU0xPVCwgMCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjgtXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gVGhlIGNvZGUmIzM5O3MgY2FzdGluZyBgbWVtLSZndDtzbG90YCB0byBhIGB1MTZgIGJlZm9yZSBjb21wYXJpbmcgaXQgdG8gYEtWTV9VU0VSX01FTV9TTE9UU2AuIE15IGZpcnN0IHRob3VnaHQgaXM6IHdoeSB0aGUgY2FzdD8gQW5kIHdoYXQgYXJlIHdlIHRyeWluZyB0byBhY2hpZXZlPyBgbWVtLSZndDtzbG90YCBpcyBkZWZpbmVkIGFzIGEgYHUzMmAsIHdoaWNoIGdpdmVzIHVzIGEgcG90ZW50aWFsIGxhcmdlciByYW5nZS4gU28sIHRoYXQgY2FzdCBpcyB0aGUgZmlyc3QgdGhpbmcgdG8gY2hlY2suCgpOb3csIGBLVk1fVVNFUl9NRU1fU0xPVFNg4oCmIHRoYXQmIzM5O3MgYSBjb25zdGFudCwgYW5kIGl04oCZcyBsaWtlbHkgcmVwcmVzZW50aW5nIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtZW1vcnkgc2xvdHMgdGhhdCBhcmUgYWxsb3dlZC4gSSBuZWVkIHRvIGtub3cgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGF0IGNvbnN0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbXBhcmlzb24uIERlcGVuZGluZyBvbiB3aGF0IGl0IGlzLCBhIHRydW5jYXRpb24gdG8gYHUxNmAgY291bGQgbWVhbiBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgaWYgYG1lbS0mZ3Q7c2xvdGAgaXMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gYFVTSFJUX01BWGAuIEFuZCBpdCYjMzk7cyBhbHNvIHdvcnRoIGNoZWNraW5nIHdoZXRoZXIgdGhlIHNpemUgb2YgYEtWTV9VU0VSX01FTV9TTE9UU2AgaXMgc21hbGxlciB0aGFuIGEgMTYtYml0IHZhbHVlLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBvdmVyZmxvdyBpc3N1ZSBldmVuIHdvcnNlLiBTbywgSSBuZWVkIHRvIGdvIGFuZCBmaW5kIHdoZXJlIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIGRlZmluZWQgYW5kIGNoZWNrIGl0cyB2YWx1ZSBhbmQgdHlwZSwgYW5kIHRoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSBhIGxpdHRsZSBiZXR0ZXIgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBLVk1fVVNFUl9NRU1fU0xPVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTcwND1ib29sIGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSk7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTcxMC0jZGVmaW5lIEtWTV9NRU1fU0xPVFNfTlVNIFNIUlRfTUFYXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6NzExOiNkZWZpbmUgS1ZNX1VTRVJfTUVNX1NMT1RTIChLVk1fTUVNX1NMT1RTX05VTSAtIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFMpXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtNzEyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODY3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIEtWTSBNZW1vcnkgU2xvdCBMaW1pdHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBzbywgYEtWTV9NRU1fU0xPVFNfTlVNYCBpcyBkZWZpbmVkIGFzIGBTSFJUX01BWGAsIHdoaWNoIGlzIDMyNzY3LiBUaGF0JiMzOTtzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtZW1vcnkgc2xvdHMgdGhhdCBLVk0gaXMgKmRlc2lnbmVkKiB0byBzdXBwb3J0LiBBIHByZXR0eSBoaWdoIG51bWJlciwgaG9uZXN0bHkuIEkmIzM5O2QgdHlwaWNhbGx5IGNvbnNpZGVyIGlmIHRoYXQmIzM5O3MgbGFyZ2UgZW5vdWdoIGZvciB0aGUgc2NhbGUgSSBhbSB3b3JraW5nIGF0LgoKVGhlbiwgYEtWTV9JTlRFUk5BTF9NRU1fU0xPVFNgIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSW50ZXJlc3RpbmcuIFRoYXQgdGVsbHMgbWUgdGhlIGludGVybmFsIG1lbW9yeSBzbG90IG1hbmFnZW1lbnQgKndpdGhpbiogS1ZNIGlzIGxpa2VseSB0dW5lZCBmb3IgdGhlIHNwZWNpZmljcyBvZiBkaWZmZXJlbnQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcy4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGFyY2gtc3BlY2lmaWMgZGVmaW5pdGlvbnMgdG8gc2VlIHRoZSBkaWZmZXJlbmNlcyBhbmQgcG90ZW50aWFsIHJlYXNvbnMgZm9yIHRoYXQgdmFyaWF0aW9uLiBUaGlzIHByb2JhYmx5IGhhcyB0byBkbyB3aXRoIGhvdyBtZW1vcnkgaXMgbWFwcGVkLCBoYW5kbGVkLCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemVkIGF0IGEgbG93ZXIgbGV2ZWwgb24sIGZvciBpbnN0YW5jZSwgeDg2IHZzLiBBUk0uIFRoZSBwcmFjdGljYWwgbGltaXQgbWlnaHQgYmUgdGhlIG1heCBwaHlzaWNhbCBtZW1vcnkgc2l6ZSBhbmQvb3IgdGhlIGFkZHJlc3Mgc3BhY2UgbGltaXRhdGlvbnMgb2YgdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4gSSYjMzk7ZCB3YW50IHRvIGJlIGF3YXJlIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYWxsb2NhdGlvbi4gSSBjb3VsZCBhbHNvIHNlZSBpdCBoYXZpbmcgaW1wbGljYXRpb25zIGZvciBOVU1BIGNvbmZpZ3VyYXRpb25zLiBTbywgdGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgS1ZNX0lOVEVSTkFMX01FTV9TTE9UUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3RfczM5MC5oLTMyLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3MzOTAuaDozMzojZGVmaW5lIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFMgMVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3MzOTAuaC0zNC1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTcxLS8qIG1lbW9yeSBzbG90cyB0aGF0IGFyZSBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6NzI6I2RlZmluZSBLVk1fSU5URVJOQUxfTUVNX1NMT1RTIDNcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNzMtXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTcwND1ib29sIGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSk7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTcwNi0jaWZuZGVmIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFNcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDo3MDc6I2RlZmluZSBLVk1fSU5URVJOQUxfTUVNX1NMT1RTIDBcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC03MDgtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MTcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW50ZXJuYWwgTXVzaW5ncyBvbiBLVk0gTWVtb3J5IFNsb3RzKioKCk9rYXksIHNvIGxldCYjMzk7cyBzZWUuICBgS1ZNX1VTRVJfTUVNX1NMT1RTYCBpcyBkZWZpbmVkIGFzIDMyNzY3IG1pbnVzIDMsIHJlc3VsdGluZyBpbiAzMjc2NCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHg4Ni4gIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgZnVuY3Rpb24sIGFuZCB0aGVyZSYjMzk7cyBhIGNoZWNrIGluIHRoZXJlLiBJdCYjMzk7cyB1c2luZyBgV0FSTl9PTl9PTkNFYCB3aGljaCB3aWxsIG9ubHkgd2FybiwgaXQgc2VlbXMuCgpgYGBjCglpZiAoV0FSTl9PTl9PTkNFKG1lbS0mZ3Q7c2xvdCAmbHQ7IEtWTV9VU0VSX01FTV9TTE9UUykpCgkJcmV0dXJuIC1FSU5WQUw7CmBgYAoKSG9sZCBvbiwgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgc3BlY2lmaWNhbGx5IGZvciAqaW50ZXJuYWwqIG1lbXNsb3RzLiAgUmlnaHQsIGludGVybmFsIG1lbXNsb3RzIGhhdmUgc2xvdCBJRHMgdGhhdCBhcmUgKmdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byogYEtWTV9VU0VSX01FTV9TTE9UU2AuIFRoYXQmIzM5O3MgdGhlIGtleSBkaXN0aW5jdGlvbi4gQnV0LCBgbWVtLSZndDtzbG90YCBpcyBkZWZpbmVkIGFzIGEgYHUzMmAuLi4gbm93IGxldCBtZSByZW1lbWJlciB3aGF0IEkgZGlkIHdpdGggYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5OTM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozk5Mzg6XHR2b2lkIF9fdXNlciAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXG45OTM5Olx0XHRcdFx0XHQgICAgICB1MzIgc2l6ZSlcbjk5NDA6XHR7XG45OTQxOlx0XHRpbnQgaSwgcjtcbjk5NDI6XHRcdHVuc2lnbmVkIGxvbmcgaHZhLCBvbGRfbnBhZ2VzO1xuOTk0MzpcdFx0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTtcbjk5NDQ6XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG45OTQ1Olx0XG45OTQ2Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbjk5NDc6XHRcbjk5NDg6XHRcdGlmIChXQVJOX09OKGlkIFx1MDAzZT0gS1ZNX01FTV9TTE9UU19OVU0pKVxuOTk0OTpcdFx0XHRyZXR1cm4gRVJSX1BUUl9VU1IoLUVJTlZBTCk7XG45OTUwOlx0XG45OTUxOlx0XHRzbG90ID0gaWRfdG9fbWVtc2xvdChzbG90cywgaWQpO1xuOTk1MjpcdFx0aWYgKHNpemUpIHtcbjk5NTM6XHRcdFx0aWYgKHNsb3QgXHUwMDI2XHUwMDI2IHNsb3QtXHUwMDNlbnBhZ2VzKVxuOTk1NDpcdFx0XHRcdHJldHVybiBFUlJfUFRSX1VTUigtRUVYSVNUKTtcbjk5NTU6XHRcbjk5NTY6XHRcdFx0Lypcbjk5NTc6XHRcdFx0ICogTUFQX1NIQVJFRCB0byBwcmV2ZW50IGludGVybmFsIHNsb3QgcGFnZXMgZnJvbSBiZWluZyBtb3ZlZFxuOTk1ODpcdFx0XHQgKiBieSBmb3JrKCkvQ09XLlxuOTk1OTpcdFx0XHQgKi9cbjk5NjA6XHRcdFx0aHZhID0gdm1fbW1hcChOVUxMLCAwLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuOTk2MTpcdFx0XHRcdCAgICAgIE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTLCAwKTtcbjk5NjI6XHRcdFx0aWYgKElTX0VSUl9WQUxVRShodmEpKVxuOTk2MzpcdFx0XHRcdHJldHVybiAodm9pZCBfX3VzZXIgKilodmE7XG45OTY0Olx0XHR9IGVsc2Uge1xuOTk2NTpcdFx0XHRpZiAoIXNsb3QgfHwgIXNsb3QtXHUwMDNlbnBhZ2VzKVxuOTk2NjpcdFx0XHRcdHJldHVybiBOVUxMO1xuOTk2NzpcdFxuOTk2ODpcdFx0XHRvbGRfbnBhZ2VzID0gc2xvdC1cdTAwM2VucGFnZXM7XG45OTY5Olx0XHRcdGh2YSA9IHNsb3QtXHUwMDNldXNlcnNwYWNlX2FkZHI7XG45OTcwOlx0XHR9XG45OTcxOlx0XG45OTcyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fYXJjaF9ucl9tZW1zbG90X2FzX2lkcyhrdm0pOyBpJiM0MzsmIzQzOykge1xuOTk3MzpcdFx0XHRzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiBtO1xuOTk3NDpcdFxuOTk3NTpcdFx0XHRtLnNsb3QgPSBpZCB8IChpIFx1MDAzY1x1MDAzYyAxNik7XG45OTc2Olx0XHRcdG0uZmxhZ3MgPSAwO1xuOTk3NzpcdFx0XHRtLmd1ZXN0X3BoeXNfYWRkciA9IGdwYTtcbjk5Nzg6XHRcdFx0bS51c2Vyc3BhY2VfYWRkciA9IGh2YTtcbjk5Nzk6XHRcdFx0bS5tZW1vcnlfc2l6ZSA9IHNpemU7XG45OTgwOlx0XHRcdHIgPSBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoa3ZtLCBcdTAwMjZtKTtcbjk5ODE6XHRcdFx0aWYgKHIgXHUwMDNjIDApXG45OTgyOlx0XHRcdFx0cmV0dXJuIEVSUl9QVFJfVVNSKHIpO1xuOTk4MzpcdFx0fVxuOTk4NDpcdFxuOTk4NTpcdFx0aWYgKCFzaXplKVxuOTk4NjpcdFx0XHR2bV9tdW5tYXAoaHZhLCBvbGRfbnBhZ2VzICogUEFHRV9TSVpFKTtcbjk5ODc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyB0aGUgS1ZNIE1lbW9yeSBTbG90IExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoYXQgYG0uc2xvdCA9IGlkIHwgKGkgJmx0OyZsdDsgMTYpO2AgbGluZS4uLiBSaWdodCwgdGhlIGFkZHJlc3Mgc3BhY2UgSUQgaXMgcGFja2VkIGludG8gdGhlIHVwcGVyIDE2IGJpdHMgb2YgdGhlIHNsb3QuIFNvIGBtZW0tJmd0O3Nsb3RgIGNhbiBpbmRlZWQgYmUgdGhpcyBjb21iaW5lZCB2YWx1ZSwgYGlkIHwgKGkgJmx0OyZsdDsgMTYpYC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBpZiBgaWAgaXMgZ3JlYXRlciB0aGFuIDAsIGV2ZW4gYSB2YWxpZCAqYmFzZSogSUQsIGlmIGxlc3MgdGhhbiBgS1ZNX1VTRVJfTUVNX1NMT1RTYCwgd2lsbCByZXN1bHQgaW4gYG1lbS0mZ3Q7c2xvdGAgYmVpbmcgYCZndDs9IEtWTV9VU0VSX01FTV9TTE9UU2AuCgpOb3csIHRoZSBjaGVjayBpbiBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YDoKCmBgYGMKCWlmIChXQVJOX09OX09OQ0UobWVtLSZndDtzbG90ICZsdDsgS1ZNX1VTRVJfTUVNX1NMT1RTKSkKCQlyZXR1cm4gLUVJTlZBTDsKYGBgCgpJZiB0aGUgYmFzZSBgaWRgIGlzIGFuIGludGVybmFsIG1lbXNsb3QgSUQgKG1lYW5pbmcgaXQmIzM5O3MgYWxyZWFkeSBgJmd0Oz0gS1ZNX1VTRVJfTUVNX1NMT1RTYCksIHRoZW4gYG0uc2xvdGAgd2lsbCAqYWx3YXlzKiBwYXNzIHRoZSBjaGVjayBiZWNhdXNlIGV2ZW4gd2l0aCBpPTAgdGhlIG1lbW9yeSBzbG90IGlzIGFuIGludGVybmFsIG1lbXNsb3QuIEV2ZW4gaWYgaSBpcyBub3QgMCwgaXQmIzM5O3Mgc3RpbGwgYW4gaW50ZXJuYWwgbWVtc2xvdC4gQnV0IGlmIGkgaXMgMCwgdGhlIGNoZWNrIGl0c2VsZiBkb2VzbiYjMzk7dCBuZWVkIHRoZSBjYXN0LiBTbyB3aHkgZG8gd2UgZXZlbiBuZWVkIHRoZSBgKHUxNiltZW0tJmd0O3Nsb3RgIGNhc3Q/CgpBaCEgR290IGl0LiBUaGUgY2FzdCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgKm1hc2tzKiB0aGUgdXBwZXIgMTYgYml0cywgZXNzZW50aWFsbHkgZXh0cmFjdGluZyB0aGUgb3JpZ2luYWwgYGlkYC4gVGhlIGNoZWNrIGlzbiYjMzk7dCB2ZXJpZnlpbmcgdGhlIGZ1bGwgYG1lbS0mZ3Q7c2xvdGAgdmFsdWUsIGl0JiMzOTtzIHZhbGlkYXRpbmcgdGhhdCB0aGUgKmJhc2UqIElEIGlzIGFuIGludGVybmFsIG1lbXNsb3QgSUQuIElmIGBtZW0tJmd0O3Nsb3RgIHdlcmUganVzdCBgaWRgIGFuZCBgaSA9IDBgLCB0aGUgdGVzdCBpcyB0cml2aWFsLiBJZiBgbWVtLSZndDtzbG90YCB3ZXJlIGBpZCB8IChpICZsdDsmbHQ7IDE2KWAsIHRoZW4sIGFuZCBgaWRgIHdhcyBhICp1c2VyKiBzbG90LCB0aGVuIHdlIHdvdWxkIG5lZWQgdGhlIHVwcGVyIGJpdHMgc3RyaXBwZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGlzICpiYXNlKiBgaWRgIGlzIGludGVybmFsLiBOb3csIGlmIHNvbWVvbmUgcGFzc2VkIGFuIGludmFsaWQgdXNlciBtZW1zbG90LCB3aXRoIGkgJmd0OyAwLCB0aGUgY2hlY2sgYG1lbS0mZ3Q7c2xvdCAmbHQ7IEtWTV9VU0VSX01FTV9TTE9UU2Agd291bGQgYmUgZmFsc2UsIHdpdGhvdXQgdGhpcyBjYXN0LCBiZWNhdXNlIHRoZSB1cHBlciBiaXRzIHdvdWxkIG1ha2UgaXQgYXBwZWFyIGFzIGFuIGludGVybmFsIHNsb3Qgd2hlbiBpdCYjMzk7cyBub3QuIFRoYXQmIzM5O3MgYSBuYXN0eSB2dWxuZXJhYmlsaXR5IQoKT2theSwgYnV0IHdhaXQsIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGlzIGludGVybmFsLiBLVk0gaXRzZWxmIGlzIHRoZSBjYWxsZXIuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIGRvIHRoYXQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jPTMyNDE9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYy0zMzUxLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM6MzM1MjpcdFx0S1ZNX0JVR19PTihrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoa3ZtLCBcdTAwMjZmYWtlX21lbXNsb3QpLCBrdm0pO1xuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYy0zMzUzLVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05OTM4PXZvaWQgX191c2VyICogX194ODZfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgaWQsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk3OS1cdFx0bS5tZW1vcnlfc2l6ZSA9IHNpemU7XG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk4MDpcdFx0ciA9IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFx1MDAyNm0pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTk5ODEtXHRcdGlmIChyIFx1MDAzYyAwKVxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjQyPWVudW0ga3ZtX21yX2NoYW5nZSB7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNDgtXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTI0OTppbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMjUwLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgKm1lbSk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xOTk1PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjctXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMjg6aW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjktXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEzOC19XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMzk6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxNDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NDEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1ZNIE1lbW9yeSBTbG90IENvbnVuZHJ1bSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgcnVubmluZyB0aHJvdWdoIG15IG1pbmQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgbWVtb3J5IHNsb3RzIGFyZSBiZWluZyBtYW5hZ2VkIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBzZWUgdGhhdCBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBnZXRzIGNhbGxlZCBieSBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpOb3csIGluIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAsIHRoZXJlJiMzOTtzIHRoaXMgY2hlY2s6IGBpZiAoV0FSTl9PTihpZCAmZ3Q7PSBLVk1fTUVNX1NMT1RTX05VTSkpIHJldHVybiBFUlJfUFRSX1VTUigtRUlOVkFMKTtgLiBJdCYjMzk7cyBlbnN1cmluZyB0aGUgbWVtc2xvdCBJRCBpc24mIzM5O3QgYmV5b25kIHRoZSAqdG90YWwqIG51bWJlciBvZiBzbG90cy4gRmluZSwgbWFrZXMgc2Vuc2UuIEJ1dC4uLiBhbmQgaGVyZSYjMzk7cyB0aGUgYml0IHRoYXQmIzM5O3MgYm90aGVyaW5nIG1lLi4uIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSBhIGd1YXJkIGZvciBlbnN1cmluZyB0aGUgSUQgaXMgKmJlbG93KiBgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gIFRoYXQmIzM5O3MgbXkgZmlyc3QgcG9pbnQgb2YgY29uY2Vybi4KClRoZW4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGlzIGNhbGxlZC4gSSBzZWUgY2FsbHMgd2l0aCBgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1RgLCBgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVGAsIGFuZCBgVFNTX1BSSVZBVEVfTUVNU0xPVGAuIFRoZXNlIGFyZSBhbGwgaW50ZXJuYWwgbWVtc2xvdHMuIE1ha2VzIHNlbnNlOyB0aGVzZSBhcmUgcHJpdmF0ZSB0byB0aGUgaHlwZXJ2aXNvciYjMzk7cyBuZWVkcy4KCkJ1dCBoZXJlJiMzOTtzIHRoZSBxdWVzdGlvbiB0aGF0IGtlZXBzIGNpcmNsaW5nOiB3aGF0IGhhcHBlbnMgaWYsIGZvciBzb21lIHJlYXNvbiAoYWNjaWRlbnRhbCBvciBvdGhlcndpc2UpLCBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGdldHMgY2FsbGVkIHdpdGggYSB1c2VyIG1lbXNsb3QgSUQ/IFRoZSBjb2RlIGRvZXNuJiMzOTt0IHNlZW0gdG8gZXhwbGljaXRseSBwcmV2ZW50IGl0LiBDb3VsZCB0aGlzIGxlYWQgdG8gc29tZSBraW5kIG9mIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVuaW50ZW5kZWQgYmVoYXZpb3I/IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBlbHNlIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAgaXMgdXNlZC4gVGhpcyBmZWVscyBsaWtlIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19feDg2X3NldF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz05ODQzPWludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTE2LS8qKlxuYXJjaC94ODYva3ZtL3g4Ni5jOjk5MTc6ICogX194ODZfc2V0X21lbW9yeV9yZWdpb246IFNldHVwIEtWTSBpbnRlcm5hbCBtZW1vcnkgc2xvdFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MTgtICpcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkzNy0gKi9cbmFyY2gveDg2L2t2bS94ODYuYzo5OTM4OnZvaWQgX191c2VyICogX194ODZfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgaWQsIGdwYV90IGdwYSxcbmFyY2gveDg2L2t2bS94ODYuYy05OTM5LVx0XHRcdFx0ICAgICAgdTMyIHNpemUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5ODktfVxuYXJjaC94ODYva3ZtL3g4Ni5jOjk5OTA6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKTtcbmFyY2gveDg2L2t2bS94ODYuYy05OTkxLVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDAxND12b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyMi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjM6XHRcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1QsXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjQtXHRcdFx0XHRcdDAsIDApO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI1Olx0XHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QsXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjYtXHRcdFx0XHRcdDAsIDApO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI3Olx0XHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIFRTU19QUklWQVRFX01FTVNMT1QsIDAsIDApO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI4LVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIENhbGxlcnMgb2YgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCBpcyBiZWluZyBpbnZva2VkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaG8mIzM5O3MgdXNpbmcgdGhpcyB0aGluZz8mIzM0OyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBwYXRocywgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIGJlc2lkZXMgdGhlIG9uZXMgSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBlbXBsb3llZC4gSXMgdGhpcyBhIGNvbW1vbiB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgcHVsbGVkIGludG8gc2V2ZXJhbCBkaWZmZXJlbnQgYXJlYXMgb2YgdGhlIGNvZGUgYmFzZSwgb3IgaXMgaXQgbW9yZSBpc29sYXRlZD8gV2hhdCBtb2R1bGVzIG9yIHN1YnN5c3RlbXMgYXJlIGxldmVyYWdpbmcgaXQ/IEtub3dpbmcgdGhlIGFuc3dlciB0byB0aGF0IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBpbmZvcm1hdGlvbiB3aGVuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBmcm9tIGNoYW5nZXMgdG8gdGhlIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAgZnVuY3Rpb24uIElkZW50aWZ5aW5nIHdoYXQgb3RoZXIgYXJlYXMgb2YgY29kZSBjYWxsIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAgaXMgdGhlIHJpZ2h0IGZpcnN0IHN0ZXAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyB1c2FnZSBiZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyIHdpdGggdGhpcyB0YXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbGFwaWMuYz0yOTEwPWludCBrdm1fYWxsb2NfYXBpY19hY2Nlc3NfcGFnZShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmMtMjkxOS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jOjI5MjA6XHRodmEgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxuYXJjaC94ODYva3ZtL2xhcGljLmMtMjkyMS1cdFx0XHRcdCAgICAgIEFQSUNfREVGQVVMVF9QSFlTX0JBU0UsIFBBR0VfU0laRSk7XG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmM9MjkzMT12b2lkIGt2bV9pbmhpYml0X2FwaWNfYWNjZXNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDItXHRpZiAoa3ZtLVx1MDAzZWFyY2guYXBpY19hY2Nlc3NfbWVtc2xvdF9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzoyOTQzOlx0XHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDQtXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz00MDI3PXN0YXRpYyBpbnQgaW5pdF9ybW9kZV9pZGVudGl0eV9tYXAoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDA0Mi1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NDA0MzpcdHVhZGRyID0gX194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00MDQ0LVx0XHRcdFx0XHRJREVOVElUWV9QQUdFVEFCTEVfUFJJVkFURV9NRU1TTE9ULFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NTI3ND1pbnQgdm14X3NldF90c3NfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBhZGRyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTI4MS1cdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1MjgyOlx0cmV0ID0gX194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBUU1NfUFJJVkFURV9NRU1TTE9ULCBhZGRyLFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MjgzLVx0XHRcdFx0ICAgICAgUEFHRV9TSVpFICogMyk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTk4NDM9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MTYtLyoqXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxNzogKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbjogU2V0dXAgS1ZNIGludGVybmFsIG1lbW9yeSBzbG90XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxOC0gKlxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTM3LSAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jOjk5Mzg6dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MzktXHRcdFx0XHQgICAgICB1MzIgc2l6ZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk4OS19XG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk5MDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX194ODZfc2V0X21lbW9yeV9yZWdpb24pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTk5OTEtXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDE0PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDIyLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyMzpcdFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVCxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNC1cdFx0XHRcdFx0MCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjU6XHRcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVCxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNi1cdFx0XHRcdFx0MCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjc6XHRcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgVFNTX1BSSVZBVEVfTUVNU0xPVCwgMCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjgtXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5oPTUyNj1pbnQga3ZtX2dldF9ucl9wZW5kaW5nX25taXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuaC01MjctXG5hcmNoL3g4Ni9rdm0veDg2Lmg6NTI4OnZvaWQgX191c2VyICpfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxuYXJjaC94ODYva3ZtL3g4Ni5oLTUyOS1cdFx0XHRcdCAgICAgdTMyIHNpemUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBSZWdpb24gQXNzaWdubWVudCBpbiB0aGUgeDg2IEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG1lbW9yeSByZWdpb25zIGFyZSBoYW5kbGVkIGluIHRoaXMgeDg2IGNvbnRleHQsIHNwZWNpZmljYWxseSB0aGUgdXNlIG9mIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBvbmx5IGV2ZXIgY2FsbGVkIHdpdGggaW50ZXJuYWwgbWVtc2xvdCBJRHMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcXVlc3Rpb246IGlmIHRoYXQmIzM5O3MgdGhlICpvbmx5KiBjYXNlLCBkb2VzbiYjMzk7dCB0aGF0IG1ha2UgYSBjZXJ0YWluIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBhbHdheXMgdHJ1ZT8KCkxldCBtZSB0aGlua+KApiB0aGUgY29kZSBoYXMgYGlkICZndDs9IEtWTV9VU0VSX01FTV9TTE9UU2AuIFJpZ2h0LiBJZiB0aGUgaW5wdXQgaXMgYWx3YXlzIGFuIGludGVybmFsIG1lbXNsb3QgSUQsIHRoZW4gaXNuJiMzOTt0IHRoZSBjb21wYXJpc29uICphbHdheXMqIGdvaW5nIHRvIGV2YWx1YXRlIHRvIHRydWU/IExldCYjMzk7cyBjaGVjayB0aGUgZGVmaW5pdGlvbnMuIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIGRlZmluZWQgYXMgYEtWTV9NRU1fU0xPVFNfTlVNIC0gS1ZNX0lOVEVSTkFMX01FTV9TTE9UU2AuIE9rYXksIHNvIGBLVk1fTUVNX1NMT1RTX05VTWAgaXMgMzI3NjcsIGFuZCBgS1ZNX0lOVEVSTkFMX01FTV9TTE9UU2AgaXMgMy4gVGhhdCBtZWFucyBgS1ZNX1VTRVJfTUVNX1NMT1RTYCBpcyAzMjc2NC4gCgpTbyB0aGUgaW50ZXJuYWwgbWVtc2xvdCBJRHMgYXJlIDMyNzY0LCAzMjc2NSwgYW5kIDMyNzY2LiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodC4gVGhhdCBjb21wYXJpc29uICpzaG91bGQqIGFsd2F5cyBiZSB0cnVlLiBCdXQgd2FpdOKApiBIb3cgYXJlIHRoZXNlIGludGVybmFsIElEcyBldmVuICpkZWZpbmVkKj8gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSBob3cgdGhlc2UgbWVtc2xvdCBJRHMgYXJlIHNldCB1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzIHRvIGJlIHN1cmUgdGhlcmUmIzM5O3Mgbm90IHNvbWV0aGluZyBJJiMzOTttIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vdm14Lmg9MjA0PWVudW0gdm1jc19maWVsZCB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgtNTE2LSNkZWZpbmUgVFNTX1BSSVZBVEVfTUVNU0xPVFx0XHRcdChLVk1fVVNFUl9NRU1fU0xPVFMgJiM0MzsgMClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oOjUxNzojZGVmaW5lIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9UXHQoS1ZNX1VTRVJfTUVNX1NMT1RTICYjNDM7IDEpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaC01MTgtI2RlZmluZSBJREVOVElUWV9QQUdFVEFCTEVfUFJJVkFURV9NRU1TTE9UXHQoS1ZNX1VTRVJfTUVNX1NMT1RTICYjNDM7IDIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDcwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2xvdCBBc3NpZ25tZW50IExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNsb3QgYXNzaWdubWVudCwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBpZGAgaXMgZGVmaW5lZCBhcyBgS1ZNX1VTRVJfTUVNX1NMT1RTICYjNDM7IFhgLiBUaGF0IG1lYW5zIGBpZGAgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gVGhlbiwgYG0uc2xvdGAgaXMgY2FsY3VsYXRlZCBhcyBgaWQgfCAoaSAmbHQ7Jmx0OyAxNilgLiBHaXZlbiB0aGF0IGBpZGAgaXMgYXQgbGVhc3QgYEtWTV9VU0VSX01FTV9TTE9UU2AsIHRoZSByZXN1bHQgYG0uc2xvdGAgd2lsbCBhbHdheXMgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoYXQgdmFsdWUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGBpYC4KCkhtbSwgdGhpcyByYWlzZXMgYSBxdWVzdGlvbi4gVGhlIGNvZGUgaGFzIGBXQVJOX09OX09OQ0UobWVtLSZndDtzbG90ICZsdDsgS1ZNX1VTRVJfTUVNX1NMT1RTKWAuIElmIGBtLnNsb3RgIGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYEtWTV9VU0VSX01FTV9TTE9UU2AsIHRoZW4gdGhhdCBgV0FSTl9PTl9PTkNFYCB3aWxsICpuZXZlciogdHJpZ2dlciEgQW5kIHRoYXQmIzM5O3MgZXZlbiB3aXRob3V0IGNvbnNpZGVyaW5nIGFueSBjYXN0LgoKV2FpdCwgSSBuZWVkIHRvIGNvbnNpZGVyIGEgcG9zc2libGUgZWRnZSBjYXNlOiBDb3VsZCBgbWVtLSZndDtzbG90YCBzb21laG93IGJlIG5lZ2F0aXZlPyBObywgaXQmIzM5O3MgYSBgdTMyYCwgc28gaXQmIzM5O3MgdW5zaWduZWQuIEl0JiMzOTtzIGFsd2F5cyBhIHBvc2l0aXZlIG9yIHplcm8gdmFsdWUuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIGEgY291cGxlIG9mIGV4YW1wbGVzLiBMZXQmIzM5O3Mgc2F5IGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIDMyNzY0LiBJZiBgaWRgIGlzIGBLVk1fVVNFUl9NRU1fU0xPVFMgJiM0MzsgWGAsIHRoYXQgbWVhbnMgYGlkYCBpcyAzMjc2NCAmIzQzOyBYLgoKSWYgYGlgIGlzIDAsIHRoZW4gYG0uc2xvdGAgaXMganVzdCAzMjc2NCAmIzQzOyBYLgpJZiBgaWAgaXMgMSwgdGhlbiBgbS5zbG90YCBpcyBgKDMyNzY0ICYjNDM7IFgpIHwgKDEgJmx0OyZsdDsgMTYpYCB3aGljaCByZXN1bHRzIGluIGA2NTUzNiAmIzQzOyAzMjc2NCAmIzQzOyBYYCB3aGljaCBpcyBgOTgzMDAgJiM0MzsgWGAuCgpJbiBib3RoIG9mIHRoZXNlIGNhc2VzLCBgbS5zbG90YCBpcyBjbGVhcmx5IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTYCAoOTgzMDAgaXMgZGVmaW5pdGVseSAmZ3Q7PSAzMjc2NCkuCgpTbywgdGhlbiwgd2h5IGRpZCB0aGV5IGFkZCB0aGUgYCh1MTYpYCBjYXN0PyBJdCBzZWVtcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4gSSBzaG91bGQgcHJvYmFibHkgcmUtZXhhbWluZSBob3cgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgd29ya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTI4Olx0aW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4yMTI5Olx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxuMjEzMDpcdHtcbjIxMzE6XHRcdGlmIChXQVJOX09OX09OQ0UoKHUxNiltZW0tXHUwMDNlc2xvdCBcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKSlcbjIxMzI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMTMzOlx0XG4yMTM0Olx0XHRpZiAoV0FSTl9PTl9PTkNFKG1lbS1cdTAwM2VmbGFncykpXG4yMTM1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjEzNjpcdFxuMjEzNzpcdFx0cmV0dXJuIGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIG1lbSk7XG4yMTM4Olx0fVxuMjEzOTpcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2ludGVybmFsX21lbXNsb3QpO1xuMjE0MDpcdFxuMjE0MTpcdHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbjIxNDI6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxuMjE0MzpcdHtcbjIxNDQ6XHRcdGlmICgodTE2KW1lbS1cdTAwM2VzbG90IFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTKVxuMjE0NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjIxNDY6XHRcbjIxNDc6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Nzc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlZ1bG5lcmFiaWxpdHkgRGlzY292ZXJlZCBpbiBLVk0gTWVtb3J5IFJlZ2lvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbmAgYW5kIGltbWVkaWF0ZWx5IHNwb3QgYSBwb3RlbnRpYWwgZmxhdyBpbiBob3cgaXQgaGFuZGxlcyB0aGUgYG1lbS0mZ3Q7c2xvdGAgZmllbGQuIFRoZSBjb2RlIGNhc3RzIGBtZW0tJmd0O3Nsb3RgIHRvIGEgYHUxNmAgYmVmb3JlIGNoZWNraW5nIGlmIGl0JiMzOTtzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UsIHNwZWNpZmljYWxseSwgYCh1MTYpbWVtLSZndDtzbG90ICZndDs9IEtWTV9VU0VSX01FTV9TTE9UU2AuIFRoaXMgc2VlbXMgZXhwbG9pdGFibGUuIFVzZXIgc3BhY2UgY2FuIGVmZmVjdGl2ZWx5IHNldCB0aGUgdXBwZXIgMTYgYml0cyBvZiBgbWVtLSZndDtzbG90YCB0byByZXByZXNlbnQgYW4gYWRkcmVzcyBzcGFjZSBJRC4gSWYgYSB1c2VyIHByb3ZpZGVzIGBtZW0tJmd0O3Nsb3QgPSAwIHwgKDEgJmx0OyZsdDsgMTYpYCwgdGhlIGNhc3QgdHJ1bmNhdGVzIHRoaXMgdmFsdWUgZG93biB0byAwLCB3aGljaCBpcyB0aGVuLCBpbmNvcnJlY3RseSwgZGV0ZXJtaW5lZCB0byBiZSB2YWxpZC4KClRoaXMgbWVhbnMgdXNlciBzcGFjZSBjYW4gcG90ZW50aWFsbHkgbWFuaXB1bGF0ZSBtZW1vcnkgcmVnaW9ucyBhY3Jvc3MgZGlmZmVyZW50IGFkZHJlc3Mgc3BhY2VzLiBUaGUgcHJvYmxlbSBsaWVzIHdpdGggdGhpcyBjYXN0IGFuZCB0aGUgc3Vic2VxdWVudCBib3VuZHMgY2hlY2suIEkmIzM5O20gZm9jdXNpbmcgb24gYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgYXMgdGhlIHRhcmdldCBmb3IgZXhwbG9pdGF0aW9uLiBOb3csIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGlzIHN1cHBvc2VkbHkgb25seSBmb3IgKmludGVybmFsKiBtZW1zbG90cy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0IHNob3VsZCBiZSBpbnRlcm5hbGx5IGNvbnNpc3RlbnQsIGJ1dCB0aGUgbW9yZSBJIGxvb2sgYXQgdGhpcy4uLgoKSWYgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgZ2V0cyBjYWxsZWQgd2l0aCBgbWVtLSZndDtzbG90YCBiZWluZyBgMCB8ICgxICZsdDsmbHQ7IDE2KWAsIHRoZW4gd2l0aG91dCB0aGUgY2FzdCwgdGhpcyBiZWNvbWVzIDY1NTM2LiBOb3csIDY1NTM2IGlzICpub3QqIGxlc3MgdGhhbiBgS1ZNX1VTRVJfTUVNX1NMT1RTYCEgU28gdGhlIGJvdW5kcyBjaGVjayAqc2hvdWxkKiBwcmV2ZW50IHRoZSBpc3N1ZSEKCkhvd2V2ZXIsIHRoZSB2dWxuZXJhYmxlIGNvZGUgaW4gYGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbmAgYWxsb3dzIHRoZSB1c2VyIHRvIHRyaWNrIHRoZSBzeXN0ZW0gd2l0aCBhIGNhc3QgdG8gdTE2IGFuZCBwb3RlbnRpYWxseSBzZXQgbWVtb3J5IHJlZ2lvbnMgaW4gYSBkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZSwgc3BlY2lmaWNhbGx5LCBhIHVzZXIgbWVtc2xvdCB3aXRoIElEIDAgaW4gYSBub24temVybyBhZGRyZXNzIHNwYWNlLiBUaGlzIGlzIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eSBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgYSB1c2VyIHByb2Nlc3MgY291bGQgcG90ZW50aWFsbHkgb3ZlcndyaXRlIGNyaXRpY2FsIEtWTSBtZW1vcnkuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGlzICphY3R1YWxseSogdXNlZC4gRXZlbiBpZiB0aGUgY29kZSAqc2hvdWxkKiBiZSBzYWZlLCBpZiBpdCYjMzk7cyB1c2VkIGluIGFuIHVuZXhwZWN0ZWQgbWFubmVyLCB0aGUgdnVsbmVyYWJpbGl0eSBpcyBzdGlsbCBwcmVzZW50LiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gYWxsIGNhbGxzIHRvIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSB0aGlzIGNvdWxkIGJlIGV4cGxvaXRlZCBieSBleHRlcm5hbCBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM9MzI0MT1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTEtXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzozMzUyOlx0XHRLVk1fQlVHX09OKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFx1MDAyNmZha2VfbWVtc2xvdCksIGt2bSk7XG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTMtXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTk5Mzg9dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTc5LVx0XHRtLm1lbW9yeV9zaXplID0gc2l6ZTtcbmFyY2gveDg2L2t2bS94ODYuYzo5OTgwOlx0XHRyID0ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KGt2bSwgXHUwMDI2bSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk4MS1cdFx0aWYgKHIgXHUwMDNjIDApXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTEyNDI9ZW51bSBrdm1fbXJfY2hhbmdlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI0OC1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxMjQ5OmludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNTAtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKTtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE5OTU9c3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyNy1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEyODppbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyOS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yMTM4LX1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEzOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjE0MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MTUKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBDYWxsIFNpdGVzKioKClJpZ2h0LCBzbyBJJiMzOTttIG5hcnJvd2luZyBkb3duIHRoZSBwb3RlbnRpYWwgY2FsbCBzaXRlcy4gSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgb25seSB0d28gZnVuY3Rpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGNhbGxpbmcgaW50byB3aGF0ZXZlciYjMzk7cyBiZWluZyBmbGFnZ2VkOiBgYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzozMzUyYCBhbmQgYGFyY2gveDg2L2t2bS94ODYuYzo5OTgwYC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgSSYjMzk7ZCBwcm9iYWJseSB3YW50IHRvIGRpZyBpbiB0byB0aGUgczM5MCBjb2RlIGZpcnN0LCBzbyBsZXQmIzM5O3MgY2hlY2sgYGFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM0MDpcdFxuMzM0MTpcdFx0aWYgKHR5cGUgXHUwMDI2IEtWTV9WTV9TMzkwX1VDT05UUk9MKSB7XG4zMzQyOlx0XHRcdHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIGZha2VfbWVtc2xvdCA9IHtcbjMzNDM6XHRcdFx0XHQuc2xvdCA9IEtWTV9TMzkwX1VDT05UUk9MX01FTVNMT1QsXG4zMzQ0Olx0XHRcdFx0Lmd1ZXN0X3BoeXNfYWRkciA9IDAsXG4zMzQ1Olx0XHRcdFx0LnVzZXJzcGFjZV9hZGRyID0gMCxcbjMzNDY6XHRcdFx0XHQubWVtb3J5X3NpemUgPSBBTElHTl9ET1dOKFRBU0tfU0laRSwgX1NFR01FTlRfU0laRSksXG4zMzQ3Olx0XHRcdFx0LmZsYWdzID0gMCxcbjMzNDg6XHRcdFx0fTtcbjMzNDk6XHRcbjMzNTA6XHRcdFx0Lyogb25lIGZsYXQgZmFrZSBtZW1zbG90IGNvdmVyaW5nIHRoZSB3aG9sZSBhZGRyZXNzLXNwYWNlICovXG4zMzUxOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuMzM1MjpcdFx0XHRLVk1fQlVHX09OKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFx1MDAyNmZha2VfbWVtc2xvdCksIGt2bSk7XG4zMzUzOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4zMzU0Olx0XHRcdHNldF9iaXQoR01BUF9GTEFHX0lTX1VDT05UUk9MLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWZsYWdzKTtcbjMzNTU6XHRcdH0gZWxzZSB7XG4zMzU2Olx0XHRcdHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsZSA9IGRlcmVmZXJlbmNlX2FzY2Uoa3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlKTtcbjMzNTc6XHRcbjMzNTg6XHRcdFx0Y3JzdF90YWJsZV9pbml0KCh2b2lkICopdGFibGUsIF9DUlNURV9IT0xFKHRhYmxlLVx1MDAzZWNyc3Rlc1swXS5oLnR0KS52YWwpO1xuMzM1OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNX1MzOTBfVUNPTlRST0xfTUVNU0xPVCoqCgpPa2F5LCBzbyBJJiMzOTttIHN0YXJpbmcgYXQgdGhpcyBgS1ZNX1MzOTBfVUNPTlRST0xfTUVNU0xPVGAgY29uc3RhbnQgYW5kIGltbWVkaWF0ZWx5IHRoZSBxdWVzdGlvbiBoaXRzOiB3aGF0ICpleGFjdGx5KiBkb2VzIHRoaXMgcmVwcmVzZW50IHdpdGhpbiB0aGUgczM5MCBLVk0gYXJjaGl0ZWN0dXJlPyBJdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBuYW1lIGFsb25lLCBhbmQgd2l0aCB0aGUgbnVhbmNlcyBvZiBzMzkwJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGF0IG1lYW5zIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLiBJcyB0aGlzIHRpZWQgdG8gdGhlIFVDT05UUk9MIG1lY2hhbmlzbSBmb3IgZ3Vlc3QgYWNjZXNzIHRvIGhvc3QgcmVzb3VyY2VzPyBJZiBzbywgaXMgdGhpcyBhIHNwZWNpZmljIG1lbW9yeSBzbG90IGNvbmZpZ3VyYXRpb24sIGEgaGFuZGxlLCBvciBzb21ldGhpbmcgZW50aXJlbHkgZGlmZmVyZW50IHdpdGhpbiB0aGUgczM5MCBjb250ZXh0PyBUaGlzIHN1Z2dlc3RzIGEgZGVlcCBkaXZlIGludG8gdGhlIHJlbGV2YW50IEtWTSBzb3VyY2UgY29kZSwgcGFydGljdWxhcmx5IHRoZSBzMzkwLXNwZWNpZmljIHBhcnRzLiBJIG5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgaW4gYGt2bV9zMzkwLmhgIGFuZCBzZWUgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBjb250cm9sIHBhdGhzLiBBbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9uIFVDT05UUk9MIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBndWVzdCBtZW1vcnkgd291bGQgYmUgaGVscGZ1bCBhcyB3ZWxsLiBVbmRlcnN0YW5kaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGFkZHJlc3Mgc3BhY2VzLCBtZW1vcnkgcmVnaW9ucywgYW5kIHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBpcyBjcnVjaWFsLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDt3aHkmIzM0OyBhbmQgJiMzNDtob3cmIzM0OyBvZiB0aGlzIHBhcnRpY3VsYXIgY29uc3RhbnQgdG8gZ3Jhc3AgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBLVk0gb24gczM5MC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBLVk1fUzM5MF9VQ09OVFJPTF9NRU1TTE9UJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vczM5MC9zMzkwLmgtMjQtXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5oOjI1OiNkZWZpbmUgS1ZNX1MzOTBfVUNPTlRST0xfTUVNU0xPVCAoS1ZNX1VTRVJfTUVNX1NMT1RTICYjNDM7IDApXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5oLTI2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU5MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIE1lbW9yeSBTbG90IE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgS1ZNX1MzOTBfVUNPTlRST0xfTUVNU0xPVGAgaXMgZXNzZW50aWFsbHkgYW4gb2Zmc2V0LCBlcXVpdmFsZW50IHRvIGBLVk1fVVNFUl9NRU1fU0xPVFMgJiM0MzsgMGAuIEdvdCBpdC4gSW1wb3J0YW50bHksIGl0IGRvZXNuJiMzOTt0IGludm9sdmUgYW55IGFkZHJlc3Mgc3BhY2UgSUQgaW4gdGhvc2UgdG9wIDE2IGJpdHMg4oCTIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLCBJIHN1cHBvc2UuCgpTbywgaW4gdGhlIGNhc2Ugb2YgYGZha2VfbWVtc2xvdC5zbG90YCwgdGhpcyByZXNvbHZlcyBkaXJlY3RseSB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTICYjNDM7IDBgIGFzIHdlbGwuIE5vdywgdGhlIGNydWNpYWwgcGFydDogdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGBtZW0tJmd0O3Nsb3QgJmx0OyBLVk1fVVNFUl9NRU1fU0xPVFNgLiBCZWNhdXNlIGBtZW0tJmd0O3Nsb3RgICppc24mIzM5O3QqIGxlc3MgdGhhbiBgS1ZNX1VTRVJfTUVNX1NMT1RTYCwgdGhlIHdhcm5pbmcgcGF0aCBpc24mIzM5O3QgdHJpZ2dlcmVkLiBUaGF0JiMzOTtzIGdvb2QuIEl0IHN1Z2dlc3RzIHdlJiMzOTtyZSBoYW5kbGluZyB0aGlzIGNhc2UgY29ycmVjdGx5LCBvciBhdCBsZWFzdCwgdGhlIGV4aXN0aW5nIGNoZWNrcyBhcmVuJiMzOTt0IGZsYWdnaW5nIGl0IGFzIGFuIGVycm9yLgoKTm93LCBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMuIExldCYjMzk7cyBkaWcgaW50byBgYXJjaC94ODYva3ZtL3g4Ni5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgcmVsZXZhbnQgaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUgaW1wbGVtZW50YXRpb24gb2YgbWVtb3J5IHNsb3QgbWFuYWdlbWVudCB0aGF0IG1heSBiZSB1c2VmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTk3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5OTcwOlx0XHR9XG45OTcxOlx0XG45OTcyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fYXJjaF9ucl9tZW1zbG90X2FzX2lkcyhrdm0pOyBpJiM0MzsmIzQzOykge1xuOTk3MzpcdFx0XHRzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiBtO1xuOTk3NDpcdFxuOTk3NTpcdFx0XHRtLnNsb3QgPSBpZCB8IChpIFx1MDAzY1x1MDAzYyAxNik7XG45OTc2Olx0XHRcdG0uZmxhZ3MgPSAwO1xuOTk3NzpcdFx0XHRtLmd1ZXN0X3BoeXNfYWRkciA9IGdwYTtcbjk5Nzg6XHRcdFx0bS51c2Vyc3BhY2VfYWRkciA9IGh2YTtcbjk5Nzk6XHRcdFx0bS5tZW1vcnlfc2l6ZSA9IHNpemU7XG45OTgwOlx0XHRcdHIgPSBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoa3ZtLCBcdTAwMjZtKTtcbjk5ODE6XHRcdFx0aWYgKHIgXHUwMDNjIDApXG45OTgyOlx0XHRcdFx0cmV0dXJuIEVSUl9QVFJfVVNSKHIpO1xuOTk4MzpcdFx0fVxuOTk4NDpcdFxuOTk4NTpcdFx0aWYgKCFzaXplKVxuOTk4NjpcdFx0XHR2bV9tdW5tYXAoaHZhLCBvbGRfbnBhZ2VzICogUEFHRV9TSVpFKTtcbjk5ODc6XHRcbjk5ODg6XHRcdHJldHVybiAodm9pZCBfX3VzZXIgKilodmE7XG45OTg5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODMzOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbXNsb3QgSUQgQ2hlY2sgaW4gYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gLCB0aGUgYGlkYCB2YXJpYWJsZSByZXByZXNlbnRzIGFuIGludGVybmFsIG1lbXNsb3QgSUQsIGVzc2VudGlhbGx5IHN0YXJ0aW5nIGF0IGBLVk1fVVNFUl9NRU1fU0xPVFNgLiBUaGUgY29yZSBvZiB0aGUgbG9naWMgaXMgc2V0dGluZyBgbS5zbG90ID0gaWQgfCAoaSAmbHQ7Jmx0OyAxNilgLiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIHRoYXQgc2luY2UgYGlkYCBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBLVk1fVVNFUl9NRU1fU0xPVFNgLCB0aGVuIGBtLnNsb3RgIHdvdWxkICphbHdheXMqIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gVGhlcmVmb3JlLCB0aGUgY2hlY2sgYG0uc2xvdCAmbHQ7IEtWTV9VU0VSX01FTV9TTE9UU2Agd291bGQgYmUgdW5jb25kaXRpb25hbGx5IGZhbHNlLCBtYWtpbmcgdGhlIGBXQVJOX09OX09OQ0VgIHBvaW50bGVzcy4KClRoZW4sIEkgc3RhcnRlZCB0byBjb25zaWRlciB0aGUgdHlwZXMuIElmIGBtLnNsb3RgIGlzIGEgYHUzMmAgYW5kIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIDMyNzY0LCB0aGVuIGNvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIGBpZGAgaXMgMzI3NjQgYW5kIGBpYCBpcyAxLiBXZSBnZXQgYG0uc2xvdGAgaXMgYDMyNzY0IHwgKDEgJmx0OyZsdDsgMTYpYCwgd2hpY2ggaXMgOTgzMDAuICA5ODMwMCAmbHQ7IDMyNzY0IGlzIGZhbHNlLCBhcyBleHBlY3RlZC4gU28gaXQgc3RpbGwgZG9lc24mIzM5O3QgZXhwbGFpbiB0aGUgd2FybmluZy4KCkJ1dCB0aGVuLCB0aGUgcGl2b3RhbCBtb21lbnQ6IHdoYXQgaWYgdGhlIGBpZGAgKndhcyogbGVzcyB0aGFuIGBLVk1fVVNFUl9NRU1fU0xPVFNgPyBJZiBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIHdhcyBjYWxsZWQgd2l0aCBgaWQgPSAwYCwgZm9yIGV4YW1wbGUsIHRoZW4gYG0uc2xvdCA9IDAgfCAoMSAmbHQ7Jmx0OyAxNilgIGJlY29tZXMgNjU1MzYuIDY1NTM2ICZsdDsgMzI3NjQgaXMgKnN0aWxsKiBmYWxzZS4KCkFoYSEgVGhhdCYjMzk7cyB3aGVuIGl0IGhpdCBtZS4gVGhlIGNhc3QgYCh1MTYpbWVtLSZndDtzbG90YCBpcyB0aGUga2V5LiBUaGUgY2FzdCBleHRyYWN0cyB0aGUgbG93ZXIgMTYgYml0cywgd2hpY2ggaXMgdGhlIGBpZGAuIFdoZW4gd2UgaGF2ZSBgaWRgIGFzIGAwYCwgYDAgJmx0OyAzMjc2NGAgaXMgKnRydWUqLiBTbyB0aGlzIGBXQVJOX09OX09OQ0VgIHdpbGwgdHJpZ2dlciEgVGhlIGNhc3QgaXMgYWN0dWFsbHkgKmZpeGluZyogdGhlIHdhcm5pbmcgc28gaXQgdHJpZ2dlcnMgd2hlbiBpdCBzaG91bGQsIGluIHRoZSBjYXNlIG9mIGEgdXNlciBtZW1zbG90IElEIHdpdGggYSBub24temVybyBhZGRyZXNzIHNwYWNlISBUaGF0JiMzOTtzIGNsZXZlci4KCkhvd2V2ZXIsIHRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6ICpzaG91bGQqIHRoYXQgYmUgcG9zc2libGU/IFRoZSBjb2RlICpzaG91bGRuJiMzOTt0KiBiZSBjYWxsZWQgd2l0aCBzdWNoIGFuIGBpZGAgdmFsdWUsIGFzIGl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIGludGVybmFsIG1lbXNsb3QgSURzLgoKVG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAuIEkgYWxyZWFkeSBrbm93IHRoYXQgYGt2bV9hbGxvY19hcGljX2FjY2Vzc19wYWdlYCwgYGt2bV9pbmhpYml0X2FwaWNfYWNjZXNzX3BhZ2VgLCBgaW5pdF9ybW9kZV9pZGVudGl0eV9tYXBgLCBgdm14X3NldF90c3NfYWRkcmAgYW5kIGBrdm1fYXJjaF9kZXN0cm95X3ZtYCBjYWxsIHRoaXMsIHVzaW5nIHZhbHVlcyBsaWtlIGBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVGAgYW5kIG90aGVycy4gQnV0IGFyZSB0aGVyZSAqYW55KiBvdGhlciBjYWxsZXJzPyBJJiMzOTtkIGJldHRlciBiZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBjYXNlcyBJJiMzOTttIG1pc3NpbmcsIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBhIHVzZWZ1bCBhbmFseXNpcyBzbyBmYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19feDg2X3NldF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9sYXBpYy5jPTI5MTA9aW50IGt2bV9hbGxvY19hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0yOTE5LVxuYXJjaC94ODYva3ZtL2xhcGljLmM6MjkyMDpcdGh2YSA9IF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1QsXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0yOTIxLVx0XHRcdFx0ICAgICAgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSwgUEFHRV9TSVpFKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0yOTMxPXZvaWQga3ZtX2luaGliaXRfYXBpY19hY2Nlc3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmMtMjk0Mi1cdGlmIChrdm0tXHUwMDNlYXJjaC5hcGljX2FjY2Vzc19tZW1zbG90X2VuYWJsZWQpIHtcbmFyY2gveDg2L2t2bS9sYXBpYy5jOjI5NDM6XHRcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1QsIDAsIDApO1xuYXJjaC94ODYva3ZtL2xhcGljLmMtMjk0NC1cdFx0Lypcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQwMjc9c3RhdGljIGludCBpbml0X3Jtb2RlX2lkZW50aXR5X21hcChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00MDQyLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0MDQzOlx0dWFkZHIgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQwNDQtXHRcdFx0XHRcdElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01Mjc0PWludCB2bXhfc2V0X3Rzc19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGFkZHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MjgxLVx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjUyODI6XHRyZXQgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIFRTU19QUklWQVRFX01FTVNMT1QsIGFkZHIsXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUyODMtXHRcdFx0XHQgICAgICBQQUdFX1NJWkUgKiAzKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTg0Mz1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxNi0vKipcbmFyY2gveDg2L2t2bS94ODYuYzo5OTE3OiAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uOiBTZXR1cCBLVk0gaW50ZXJuYWwgbWVtb3J5IHNsb3RcbmFyY2gveDg2L2t2bS94ODYuYy05OTE4LSAqXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MzctICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkzODp2b2lkIF9fdXNlciAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkzOS1cdFx0XHRcdCAgICAgIHUzMiBzaXplKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTg5LX1cbmFyY2gveDg2L2t2bS94ODYuYzo5OTkwOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbik7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk5MS1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwMTQ9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjItXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDIzOlx0XHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI0LVx0XHRcdFx0XHQwLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyNTpcdFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBJREVOVElUWV9QQUdFVEFCTEVfUFJJVkFURV9NRU1TTE9ULFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI2LVx0XHRcdFx0XHQwLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyNzpcdFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBUU1NfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyOC1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9NTI2PWludCBrdm1fZ2V0X25yX3BlbmRpbmdfbm1pcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5oLTUyNy1cbmFyY2gveDg2L2t2bS94ODYuaDo1Mjg6dm9pZCBfX3VzZXIgKl9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXG5hcmNoL3g4Ni9rdm0veDg2LmgtNTI5LVx0XHRcdFx0ICAgICB1MzIgc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjE4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBzZWVtcyBsaWtlIGEgZml4IGZvciBhIHRoZW9yZXRpY2FsIGlzc3VlLiBUaGVyZSBhcmUgbm8gb3RoZXIgY2FsbGVycyB0byBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCB0aGF0IEkmIzM5O3ZlIGZvdW5kIG90aGVyIHRoYW4gYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCBhbmQgdGhlIGBzMzkwYCBjb2RlLiBTaW5jZSB0aGVyZSBhcmUgbm8gb3RoZXIgY2FsbGVycywgdGhlIGBpZGAgYXJndW1lbnQgd2lsbCAqYWx3YXlzKiBiZSBhbiBpbnRlcm5hbCBtZW1zbG90IElELCB3aGljaCwgYnkgZGVmaW5pdGlvbiwgaXMgZ29pbmcgdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBLVk1fVVNFUl9NRU1fU0xPVFNgLiBUaGVyZWZvcmUsIGAodTE2KW1lbS0mZ3Q7c2xvdGAgd2lsbCAqYWx3YXlzKiBiZSBgJmd0Oz0gS1ZNX1VTRVJfTUVNX1NMT1RTYC4gVGhpcyBtZWFucyB0aGF0IHRoZSBvcmlnaW5hbCBgV0FSTl9PTl9PTkNFYCBjb25kaXRpb24gd291bGQgbmV2ZXIgdHJpZ2dlciwgYm90aCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC4KCkkgYWxyZWFkeSBjb25maXJtZWQgdGhlIGBzMzkwYCBjb2RlIHVzZXMgYEtWTV9VU0VSX01FTV9TTE9UUyAmIzQzOyAwYCwgbWVhbmluZyB0aGlzIGlzIGFsc28gYCZndDs9IEtWTV9VU0VSX01FTV9TTE9UU2AuCgpTbywgdGhlIHBhdGNoIGlzIGZpeGluZyBhIGBXQVJOX09OX09OQ0VgIHRoYXQgd2FzIGludGVuZGVkIHRvIGNoZWNrIGlmIHNvbWVvbmUgYWNjaWRlbnRhbGx5IHBhc3NlZCBhIHVzZXIgbWVtc2xvdCBJRCB0byBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YC4gVGhlIHByb2JsZW0gaXMgdGhhdCBhIHVzZXIgbWVtc2xvdCBJRCB3aXRoIGEgbm9uLXplcm8gYWRkcmVzcyBzcGFjZSBjb3VsZCByZXN1bHQgaW4gYG1lbS0mZ3Q7c2xvdGAgYmVpbmcgYCZndDs9IDY1NTM2YCwgd2hpY2ggaXMgKmdyZWF0ZXIqIHRoYW4gYEtWTV9VU0VSX01FTV9TTE9UU2AsIHNvIHRoZSBgV0FSTl9PTl9PTkNFYCB3b3VsZCBpbmNvcnJlY3RseSBmYWlsIHRvIHRyaWdnZXIgaW4gdGhvc2UgY2FzZXMuIFRoZSBhZGRlZCBgKHUxNilgIGNhc3QgY29ycmVjdGx5IGV4dHJhY3RzIHRoZSBiYXNlIHNsb3QgSUQgYW5kIGNoZWNrcyBpdCBhZ2FpbnN0IGBLVk1fVVNFUl9NRU1fU0xPVFNgLiBIb3dldmVyLCBnaXZlbiB0aGF0IHRoZXJlIGFyZSBubyBjdXJyZW50IGNhbGxlcnMgdGhhdCBhY3R1YWxseSBwYXNzIGEgdXNlciBtZW1zbG90IElELCB0aGlzIGNoZWNrIG5ldmVyIHRyaWdnZXJzIGFueXdheS4gSXQgaXMganVzdCBhIGZpeCBmb3IgYSBzYW5pdHkgY2hlY2suCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBkb2VzIHRoaXMgaGF2ZSBhbnkgZnVuY3Rpb25hbCBpbXBhY3Q/IE15IGFzc2Vzc21lbnQgaXMgbm8uIEl0JiMzOTtzIGp1c3QgbW9kaWZ5aW5nIGEgYFdBUk5fT05fT05DRWAgdGhhdCBpcyBuZXZlciBoaXQgaW4gcHJhY3RpY2UgYmVjYXVzZSBhbGwgY3VycmVudCBjYWxsZXJzIHBhc3MgdmFsaWQgaW50ZXJuYWwgbWVtc2xvdCBJRHMuCgpDb3VsZCBhIGZ1enplciBsaWtlIHN5emthbGxlciBwb3NzaWJseSB0cmlnZ2VyIHRoaXM/IEkgZG9uJiMzOTt0IHRoaW5rIHNvLiBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBpcyBhbiBpbnRlcm5hbCBBUEkuIFVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgcmVnaW9ucyB0aHJvdWdoIHRoZSBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCBpb2N0bCwgd2hpY2ggY2FsbHMgYGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbmAuIFRoYXQgZnVuY3Rpb24gaGFzIGl0cyBvd24gc2FmZXR5IGNoZWNrOgoKYGBgYwogICAgaWYgKCh1MTYpbWVtLSZndDtzbG90ICZndDs9IEtWTV9VU0VSX01FTV9TTE9UUykKICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CmBgYAoKVGhpcyAqY29ycmVjdGx5KiB1c2VzIHRoZSBgKHUxNiltZW0tJmd0O3Nsb3RgIHRvIHByZXZlbnQgdXNlcnNwYWNlIGZyb20gYXR0ZW1wdGluZyB0byBzZXQgaW50ZXJuYWwgbWVtc2xvdHMuIFRodXMsIHVzZXJzcGFjZSBjYW4mIzM5O3QgZXZlbiBnZXQgdG8gYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAuIEl0IGlzIG9ubHkgcmVhY2hhYmxlIHZpYSBpbnRlcm5hbCBLVk0gY29kZSwgd2hpY2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGFsd2F5cyBwYXNzZXMgdmFsaWQgbWVtc2xvdCBJRHMuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaGFzIHplcm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gYW55IHJlYWNoYWJsZSBjb2RlIHBhdGhzLiBJdCBqdXN0IGZpeGVzIGEgZGVhZCBzYW5pdHkgY2hlY2suIEkmIzM5O2xsIGRvdWJsZSBjaGVjayBmb3IgYW55IGNhbGxlcnMgb2YgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgdGhhdCBJIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLgpZb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS4KRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsCnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC48L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLlxuWW91IGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0IG9mIHRoaXMgZXhhY3QgdG9vbCBjYWxsIGluIHlvdXIgY29udmVyc2F0aW9uIGhpc3RvcnkuXG5EbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSxcbnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODczCgkJCQkJCQlvdXRwdXQ6IDIzNgoJCQkJCQkJdGhvdWdodHM6IDM0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gSSBkdWcgaW50byB0aGlzIHBhdGNoIHRhcmdldGluZyBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YC4gSSBhbHJlYWR5IHJhbiBhIGBncmVwYCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjYWxsZXJzLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhlcmUgYXJlIG9ubHkgdHdvIOKAkyB3aGljaCBuYXJyb3dzIHRoZSBzY29wZSBzaWduaWZpY2FudGx5LiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGp1c3QgdG91Y2hpbmcgYSBgV0FSTl9PTl9PTkNFYCBjb25kaXRpb24uIFRoYXQmIzM5O3MgYSBzYW5pdHkgY2hlY2ssIG5vdCBhIGNvcmUgZnVuY3Rpb24sIHNvIG15IGluaXRpYWwgaW5zdGluY3Qgc2F5cyB0aGlzIGlzIGxvdy1pbXBhY3QuCgpEaWdnaW5nIGRlZXBlciwgdGhlIGNvbmRpdGlvbiBpbiBxdWVzdGlvbiBpcyBuZXZlciBhY3R1YWxseSB0cmlnZ2VyZWQuIFRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBhbHdheXMgcGFzcyB2YWxpZCBgaW50ZXJuYWwgbWVtc2xvdGAgSURzLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gRXZlbiBpZiB0aGUgY29uZGl0aW9uICp3ZXJlKiBtZXQsIGl0IHdvdWxkIG9ubHkgbG9nIGEgd2FybmluZyBhbmQgcmV0dXJuIGAtRUlOVkFMYC4gRnVuY3Rpb25hbGx5LCB0aGUgY29kZSBmbG93IHJlbWFpbnMgdW5jaGFuZ2VkLiBUaGVyZWZvcmUsIGl0JiMzOTtzIHNhZmUgdG8gc2F5IHRoZXJlIGlzIG5vIHVzZXIgdmlzaWJsZSBmdW5jdGlvbmFsIGltcGFjdC4KCkxldCYjMzk7cyBzdW1tYXJpemUgdGhlIGxvZ2ljIGJlaGluZCB0aGUgY2hhbmdlIGZvciBnb29kIG1lYXN1cmUuIFRoZSBwYXRjaCBlc3NlbnRpYWxseSBhZGRzIGEgY2FzdCB0byBoYW5kbGUgbm9uLXplcm8gYWRkcmVzcyBzcGFjZSBJRHMgaW4gdGhlIHVwcGVyIDE2IGJpdHMgb2YgdGhlIGBtZW0tJmd0O3Nsb3RgIGZpZWxkLCBmaXhpbmcgdGhlIGNoZWNrIGZvciBzbG90cyBncmVhdGVyIHRoYW4gYEtWTV9VU0VSX01FTV9TTE9UU2AuIEhvd2V2ZXIsIGdpdmVuIHRoYXQgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgYW4gaW50ZXJuYWwgQVBJLCBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSAoaXQgdXNlcyBga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uYCBmb3IgZXh0ZXJuYWwgY2FsbHMsIHdoaWNoIGhhcyBpdHMgb3duIHZlcmlmaWNhdGlvbikuIFRoZSBmdW5jdGlvbnMgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCBhbmQgYHMzOTBgJiMzOTtzIGBrdm1fYXJjaF9pbml0X3ZtYCBhcmUgdGhlIG9ubHkgY2FsbGVycywgYW5kIHRoZXkmIzM5O3JlIG1ldGljdWxvdXNseSBwYXNzaW5nIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzLiBTbywgdGhpcyBib2lscyBkb3duIHRvIGZpeGluZyBhIHRoZW9yZXRpY2FsIGJ1ZyB0aGF0IGlzIG5ldmVyIGhpdCBpbiBwcmFjdGljZS4gTXkgY29uY2x1c2lvbj8gVGhpcyBvbmUgaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBXQVJOX09OX09OQ0UgY2hlY2sgaW4ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IHRvIGNhc3QgbWVtLVx1MDAzZXNsb3QgdG8gKHUxNikgYmVmb3JlIGNvbXBhcmluZyBpdCB0byBLVk1fVVNFUl9NRU1fU0xPVFMuIFRoaXMgZml4ZXMgdGhlIHNhbml0eSBjaGVjayB0byBjb3JyZWN0bHkgaGFuZGxlIG1lbW9yeSBzbG90cyB3aXRoIG5vbi16ZXJvIGFkZHJlc3Mgc3BhY2UgSURzIChlbmNvZGVkIGluIHRoZSB1cHBlciAxNiBiaXRzKS4gSG93ZXZlciwga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IGlzIGFuIGludGVybmFsIEtWTSBBUEkgdGhhdCBpcyBvbmx5IGNhbGxlZCBieSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbiBhbmQgczM5MCYjMzk7cyBrdm1fYXJjaF9pbml0X3ZtLCBib3RoIG9mIHdoaWNoIGFsd2F5cyBwYXNzIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzIChcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUykuIFVzZXJzcGFjZSBjYW5ub3QgcmVhY2ggdGhpcyBmdW5jdGlvbiwgYXMgaXQgdXNlcyBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24gd2hpY2ggaGFzIGl0cyBvd24gY29ycmVjdCBjaGVjay4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIG9ubHkgZml4ZXMgYSB0aGVvcmV0aWNhbCBidWcgaW4gYSBzYW5pdHkgY2hlY2sgdGhhdCBpcyBuZXZlciB0cmlnZ2VyZWQgaW4gcHJhY3RpY2UsIGFuZCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVhY2hhYmxlIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIFdBUk5fT05fT05DRSBjaGVjayBpbiBrdm1fc2V0X2ludGVybmFsX21lbXNsb3QgdG8gY2FzdCBtZW0tXHUwMDNlc2xvdCB0byAodTE2KSBiZWZvcmUgY29tcGFyaW5nIGl0IHRvIEtWTV9VU0VSX01FTV9TTE9UUy4gVGhpcyBmaXhlcyB0aGUgc2FuaXR5IGNoZWNrIHRvIGNvcnJlY3RseSBoYW5kbGUgbWVtb3J5IHNsb3RzIHdpdGggbm9uLXplcm8gYWRkcmVzcyBzcGFjZSBJRHMgKGVuY29kZWQgaW4gdGhlIHVwcGVyIDE2IGJpdHMpLiBIb3dldmVyLCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3QgaXMgYW4gaW50ZXJuYWwgS1ZNIEFQSSB0aGF0IGlzIG9ubHkgY2FsbGVkIGJ5IF9feDg2X3NldF9tZW1vcnlfcmVnaW9uIGFuZCBzMzkwJiMzOTtzIGt2bV9hcmNoX2luaXRfdm0sIGJvdGggb2Ygd2hpY2ggYWx3YXlzIHBhc3MgdmFsaWQgaW50ZXJuYWwgbWVtc2xvdCBJRHMgKFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTKS4gVXNlcnNwYWNlIGNhbm5vdCByZWFjaCB0aGlzIGZ1bmN0aW9uLCBhcyBpdCB1c2VzIGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbiB3aGljaCBoYXMgaXRzIG93biBjb3JyZWN0IGNoZWNrLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggb25seSBmaXhlcyBhIHRoZW9yZXRpY2FsIGJ1ZyBpbiBhIHNhbml0eSBjaGVjayB0aGF0IGlzIG5ldmVyIHRyaWdnZXJlZCBpbiBwcmFjdGljZSwgYW5kIGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiByZWFjaGFibGUgY29kZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoxOToyNC42NjQ2Njc1OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY4OTU2NjM3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIFdBUk5fT05fT05DRSBjaGVjayBpbiBrdm1fc2V0X2ludGVybmFsX21lbXNsb3QgdG8gY2FzdCBtZW0tXFx1MDAzZXNsb3QgdG8gKHUxNikgYmVmb3JlIGNvbXBhcmluZyBpdCB0byBLVk1fVVNFUl9NRU1fU0xPVFMuIFRoaXMgZml4ZXMgdGhlIHNhbml0eSBjaGVjayB0byBjb3JyZWN0bHkgaGFuZGxlIG1lbW9yeSBzbG90cyB3aXRoIG5vbi16ZXJvIGFkZHJlc3Mgc3BhY2UgSURzIChlbmNvZGVkIGluIHRoZSB1cHBlciAxNiBiaXRzKS4gSG93ZXZlciwga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IGlzIGFuIGludGVybmFsIEtWTSBBUEkgdGhhdCBpcyBvbmx5IGNhbGxlZCBieSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbiBhbmQgczM5MCdzIGt2bV9hcmNoX2luaXRfdm0sIGJvdGggb2Ygd2hpY2ggYWx3YXlzIHBhc3MgdmFsaWQgaW50ZXJuYWwgbWVtc2xvdCBJRHMgKFxcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUykuIFVzZXJzcGFjZSBjYW5ub3QgcmVhY2ggdGhpcyBmdW5jdGlvbiwgYXMgaXQgdXNlcyBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24gd2hpY2ggaGFzIGl0cyBvd24gY29ycmVjdCBjaGVjay4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIG9ubHkgZml4ZXMgYSB0aGVvcmV0aWNhbCBidWcgaW4gYSBzYW5pdHkgY2hlY2sgdGhhdCBpcyBuZXZlciB0cmlnZ2VyZWQgaW4gcHJhY3RpY2UsIGFuZCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoxOToyNC42NjQ2NzU3OTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDE4NDY3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZjQ3M2RlODZjZDAwY2Q3NTk1OTIxY2Q2NjdjZWY2OTc0YmExMTUwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjE5OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuaW5kZXggNjVlYjI2YTA1MjBkOC4uZThkMGUzNjBlYTI2YiAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbkBAIC0yMTI4LDcgKzIxMjgsNyBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIGludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXFxuIHtcXG4tXFx0aWYgKFdBUk5fT05fT05DRShtZW0tXFx1MDAzZXNsb3QgXFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpKVxcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCh1MTYpbWVtLVxcdTAwM2VzbG90IFxcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKG1lbS1cXHUwMDNlZmxhZ3MpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoxOToyNS45Njc0OTE2NTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MzU1OTI4Mjg4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgV0FSTl9PTl9PTkNFIGNoZWNrIGluIGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCB0byBjYXN0IG1lbS1cXHUwMDNlc2xvdCB0byAodTE2KSBiZWZvcmUgY29tcGFyaW5nIGl0IHRvIEtWTV9VU0VSX01FTV9TTE9UUy4gVGhpcyBmaXhlcyB0aGUgc2FuaXR5IGNoZWNrIHRvIGNvcnJlY3RseSBoYW5kbGUgbWVtb3J5IHNsb3RzIHdpdGggbm9uLXplcm8gYWRkcmVzcyBzcGFjZSBJRHMgKGVuY29kZWQgaW4gdGhlIHVwcGVyIDE2IGJpdHMpLiBIb3dldmVyLCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3QgaXMgYW4gaW50ZXJuYWwgS1ZNIEFQSSB0aGF0IGlzIG9ubHkgY2FsbGVkIGJ5IF9feDg2X3NldF9tZW1vcnlfcmVnaW9uIGFuZCBzMzkwJ3Mga3ZtX2FyY2hfaW5pdF92bSwgYm90aCBvZiB3aGljaCBhbHdheXMgcGFzcyB2YWxpZCBpbnRlcm5hbCBtZW1zbG90IElEcyAoXFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTKS4gVXNlcnNwYWNlIGNhbm5vdCByZWFjaCB0aGlzIGZ1bmN0aW9uLCBhcyBpdCB1c2VzIGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbiB3aGljaCBoYXMgaXRzIG93biBjb3JyZWN0IGNoZWNrLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggb25seSBmaXhlcyBhIHRoZW9yZXRpY2FsIGJ1ZyBpbiBhIHNhbml0eSBjaGVjayB0aGF0IGlzIG5ldmVyIHRyaWdnZXJlZCBpbiBwcmFjdGljZSwgYW5kIGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiByZWFjaGFibGUgY29kZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlmNDczZGU4NmNkMDBjZDc1OTU5MjFjZDY2N2NlZjY5NzRiYTExNTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxMjoxOToyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA2NWViMjZhMDUyMGQ4Li5lOGQwZTM2MGVhMjZiIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTIxMjgsNyArMjEyOCw3IEBAIHN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBpbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXG4ge1xuLVx0aWYgKFdBUk5fT05fT05DRShtZW0tXHUwMDNlc2xvdCBcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKSlcbitcdGlmIChXQVJOX09OX09OQ0UoKHUxNiltZW0tXHUwMDNlc2xvdCBcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKG1lbS1cdTAwM2VmbGFncykpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoxOToyNS45Njc0OTM2NjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzU1NjM2MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2UuIEl0J3MgbW9kaWZ5aW5nIHRoZSBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgcmlnaHQgdGhlcmU6IHRoZXkncmUgZXhwbGljaXRseSBjYXN0aW5nIGBtZW0tXHUwMDNlc2xvdGAgdG8gYHUxNmAgYmVmb3JlIGNvbXBhcmluZyBpdCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTYCBpbnNpZGUgdGhhdCBgV0FSTl9PTl9PTkNFYCBjaGVjay4gXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHRvIGJlIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgYmVpbmcgYWRkcmVzc2VkLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgbGlrZWx5IHJlbHlpbmcgb24gaW1wbGljaXQgdHlwZSBwcm9tb3Rpb24sIGJ1dCBwZXJoYXBzIGEgc2NlbmFyaW8gd2FzIGlkZW50aWZpZWQgd2hlcmUgYG1lbS1cdTAwM2VzbG90YCBjb3VsZCBiZSBhIGxhcmdlciBpbnRlZ2VyIHR5cGUsIGFuZCB3aXRob3V0IHRoZSBjYXN0LCB0aGUgY29tcGFyaXNvbiBtaWdodCBoYXZlIGJlZW4gc3VidGx5IGluY29ycmVjdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gVGhlIGBXQVJOX09OX09OQ0VgIGluZGljYXRlcyBpdCdzIGEgY3JpdGljYWwgc2FmZXR5IGNoZWNrLCBzbyB0aGlzIG1ha2VzIHNlbnNlLiBJdCdzIGdvb2QgdGhhdCB0aGV5J3JlIGJlaW5nIGV4cGxpY2l0IGFib3V0IHRoZSBpbnRlbmRlZCBzaXplLlxuXG5Ob3csIEknbSBnb2luZyB0byBkaWcgZGVlcGVyIGFuZCBsb29rIGludG8gYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoaXMgbWVtc2xvdCBhbmQgaG93IGl0J3MgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGNvbnN0YW50IHJlcHJlc2VudHMgYW5kIHdoYXQgYSBwb3RlbnRpYWwgb3ZlcmZsb3cgY291bGQgZG8uIExldCdzIHNlZSBob3cgbWVtb3J5IHNsb3RzIGFyZSBtYW5hZ2VkIGluIEtWTSBhbmQgd2hhdCBjYW4gZ28gd3JvbmcgaWYgdGhlIHNsb3QgaW5kZXggZ2V0cyBjb3JydXB0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBkb2N1bWVudGF0aW9uIG9uIHRoZSByZWFzb25pbmcgYmVoaW5kIGxpbWl0aW5nIHRoZSBgbWVtLVx1MDAzZXNsb3RgIG51bWJlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjE5OjMwLjcyMzEzMjEwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjAzMDkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fc2V0X2ludGVybmFsX21lbXNsb3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTE5OTU9c3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMTI3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEyODppbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjktXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMTM4LX1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMzk6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0yMTQwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoxOTozMC44MDkxNjY3MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYwODE4MjgzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBVc2FnZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgLiBUaGUgZmlyc3QgdGhpbmcgSSBhbHdheXMgZG8gaXMgdHJhY2UgaXRzIGNhbGxpbmcgY29udGV4dC4gVW5kZXJzdGFuZGluZyAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlzIGFic29sdXRlbHkgY3J1Y2lhbCB0byBncmFzcGluZyBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCB3aXRoaW4gdGhlIEtWTSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHVzYWdlIHRocm91Z2hvdXQgdGhlIGNvZGUgYmFzZS4gTGV0J3Mgc3RhcnQgYnkgaWRlbnRpZnlpbmcgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgd2hlcmUgaXQncyBhY3R1YWxseSBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzMxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MjU6MzYuODkwOTk4MTA1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTA3NTczMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jPTMyNDE9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTEtXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jOjMzNTI6XFx0XFx0S1ZNX0JVR19PTihrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoa3ZtLCBcXHUwMDI2ZmFrZV9tZW1zbG90KSwga3ZtKTtcXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTMtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTk5Mzg9dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5NzktXFx0XFx0bS5tZW1vcnlfc2l6ZSA9IHNpemU7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk5ODA6XFx0XFx0ciA9IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFxcdTAwMjZtKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk4MS1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTI0Mj1lbnVtIGt2bV9tcl9jaGFuZ2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNDgtXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjEyNDk6aW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNTAtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTk5NT1zdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjctXFxudmlydC9rdm0va3ZtX21haW4uYzoyMTI4OmludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyOS1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMzgtfVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEzOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxNDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI1OjM4LjQ0MTc1OTE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNDkwNjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0gTWVtb3J5IFNsb3QgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBhIHR5cGUgY29udmVyc2lvbjogYG1lbS1cdTAwM2VzbG90YCBpcyBub3cgYmVpbmcgY2FzdCB0byBgKHUxNiltZW0tXHUwMDNlc2xvdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoeSB0aGUgdHlwZSByZWR1Y3Rpb24/XCIgTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgbWVtLVx1MDAzZXNsb3RgIGlzIGRlZmluZWQgYXMgYSBgdTMyYCB3aXRoaW4gdGhlIGBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBBIHF1aWNrIG1lbnRhbCBjaGVjayBicmluZ3MgdXAgYEtWTV9VU0VSX01FTV9TTE9UU2AsIHdoaWNoIEknbSBhc3N1bWluZyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIG1heGltdW0gbnVtYmVyIG9mIG1lbW9yeSBzbG90cyBhbGxvd2VkLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBzdHVmZiwgYSBgdTE2YCBpcyAxNiBiaXRzLCBgdTMyYCBpcyAzMiBiaXRzIGFuZCBpZiB0aGlzIGlzIGludGVuZGVkIGFzIGEgdHlwZSByZXN0cmljdGlvbiwgSSBuZWVkIHRvIGxvb2sgaW50byBgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjJgLiBXaGF0J3MgaGFwcGVuaW5nIGluIHRoZXJlPyBJcyBpdCBhIGRhdGEgdHlwZSBzaXplIHJlZHVjdGlvbiBmb3IgZWZmaWNpZW5jeSwgb3IgaXMgaXQgYSBzaWduIG9mIHNvbWV0aGluZyB0aGF0IEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgb24/IEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhhdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzbG90IHZhbHVlIGlzIHVzZWQgYW5kIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBzbG90IGFkZHJlc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNTo0My40NDY2Njc1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ4NzA2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTEyNDk9aW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjEyNTA6XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI1MS12b2lkIGt2bV9hcmNoX2ZyZWVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTMwPXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTM4LS8qIGZvciBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6Mzk6c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIge1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00MC1cXHRfX3UzMiBzbG90O1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTEyNTM9c3RydWN0IGt2bV9zMzkwX2tleW9wIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xMjcyLSNkZWZpbmUgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yIF9JT1coS1ZNSU8sIDB4NDksIFxcXFxcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTI3MzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTEyNzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI1OjQzLjU2MTU0MjY5OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMzgxNjI2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNJ3MgTWVtb3J5IFJlZ2lvbiBTZXR1cCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgYXJjaC94ODYva3ZtL3g4Ni5jYCBmaWxlIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgeDg2LXNwZWNpZmljIEtWTSBjb2RlIGxpdmVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgcmVnaW9ucyBhcmUgc2V0IHVwLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCBmdW5jdGlvbi4gSSBoYXZlIGEgZmVlbGluZyB0aGlzIGlzIHRoZSBrZXkgdG8gaG93IEtWTSBtYW5hZ2VzIGd1ZXN0IHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5ncyBhbmQgaGFuZGxlcyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaG9zdCdzIHBoeXNpY2FsIG1lbW9yeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBwYWdpbmcgc3RydWN0dXJlcywgYW5kIHdoYXQgdGhlIG92ZXJhbGwgaW1wbGljYXRpb25zIGFyZSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHZpcnR1YWxpemF0aW9uLiBJIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIGhvdyB0aGlzIGZ1bmN0aW9uIGVuZm9yY2VzIHRoZSBtZW1vcnkgcmVnaW9uIGJvdW5kYXJpZXMgYW5kIHBlcm1pc3Npb25zLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNTo1MC43OTk3MDgzNjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzM1MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9feDg2X3NldF9tZW1vcnlfcmVnaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9OTg0Mz1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTE2LS8qKlxcbmFyY2gveDg2L2t2bS94ODYuYzo5OTE3OiAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uOiBTZXR1cCBLVk0gaW50ZXJuYWwgbWVtb3J5IHNsb3RcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxOC0gKlxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MzctICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk5Mzg6dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuYy05OTM5LVxcdFxcdFxcdFxcdCAgICAgIHUzMiBzaXplKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5ODktfVxcbmFyY2gveDg2L2t2bS94ODYuYzo5OTkwOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbik7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5OTEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwMTQ9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyMi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyMzpcXHRcXHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNC1cXHRcXHRcXHRcXHRcXHQwLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjU6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBJREVOVElUWV9QQUdFVEFCTEVfUFJJVkFURV9NRU1TTE9ULFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNi1cXHRcXHRcXHRcXHRcXHQwLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjc6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBUU1NfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjgtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNTo1MC44NDM0NDU0NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk5NDgwNzgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIFRoZSBjb2RlJ3MgY2FzdGluZyBgbWVtLVx1MDAzZXNsb3RgIHRvIGEgYHUxNmAgYmVmb3JlIGNvbXBhcmluZyBpdCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gTXkgZmlyc3QgdGhvdWdodCBpczogd2h5IHRoZSBjYXN0PyBBbmQgd2hhdCBhcmUgd2UgdHJ5aW5nIHRvIGFjaGlldmU/IGBtZW0tXHUwMDNlc2xvdGAgaXMgZGVmaW5lZCBhcyBhIGB1MzJgLCB3aGljaCBnaXZlcyB1cyBhIHBvdGVudGlhbCBsYXJnZXIgcmFuZ2UuIFNvLCB0aGF0IGNhc3QgaXMgdGhlIGZpcnN0IHRoaW5nIHRvIGNoZWNrLlxuXG5Ob3csIGBLVk1fVVNFUl9NRU1fU0xPVFNg4oCmIHRoYXQncyBhIGNvbnN0YW50LCBhbmQgaXTigJlzIGxpa2VseSByZXByZXNlbnRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1lbW9yeSBzbG90cyB0aGF0IGFyZSBhbGxvd2VkLiBJIG5lZWQgdG8ga25vdyB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoYXQgY29uc3RhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29tcGFyaXNvbi4gRGVwZW5kaW5nIG9uIHdoYXQgaXQgaXMsIGEgdHJ1bmNhdGlvbiB0byBgdTE2YCBjb3VsZCBtZWFuIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpZiBgbWVtLVx1MDAzZXNsb3RgIGlzIGEgdmFsdWUgZ3JlYXRlciB0aGFuIGBVU0hSVF9NQVhgLiBBbmQgaXQncyBhbHNvIHdvcnRoIGNoZWNraW5nIHdoZXRoZXIgdGhlIHNpemUgb2YgYEtWTV9VU0VSX01FTV9TTE9UU2AgaXMgc21hbGxlciB0aGFuIGEgMTYtYml0IHZhbHVlLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBvdmVyZmxvdyBpc3N1ZSBldmVuIHdvcnNlLiBTbywgSSBuZWVkIHRvIGdvIGFuZCBmaW5kIHdoZXJlIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIGRlZmluZWQgYW5kIGNoZWNrIGl0cyB2YWx1ZSBhbmQgdHlwZSwgYW5kIHRoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSBhIGxpdHRsZSBiZXR0ZXIgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMxNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI1OjU2LjgzODI1NjAwNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxODYzOTgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEtWTV9VU0VSX01FTV9TTE9UU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTcwND1ib29sIGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtNzEwLSNkZWZpbmUgS1ZNX01FTV9TTE9UU19OVU0gU0hSVF9NQVhcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6NzExOiNkZWZpbmUgS1ZNX1VTRVJfTUVNX1NMT1RTIChLVk1fTUVNX1NMT1RTX05VTSAtIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFMpXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTcxMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MjU6NTguNDU2OTAxMTk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTQxMDM0NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBLVk0gTWVtb3J5IFNsb3QgTGltaXRzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvLCBgS1ZNX01FTV9TTE9UU19OVU1gIGlzIGRlZmluZWQgYXMgYFNIUlRfTUFYYCwgd2hpY2ggaXMgMzI3NjcuIFRoYXQncyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWVtb3J5IHNsb3RzIHRoYXQgS1ZNIGlzICpkZXNpZ25lZCogdG8gc3VwcG9ydC4gQSBwcmV0dHkgaGlnaCBudW1iZXIsIGhvbmVzdGx5LiBJJ2QgdHlwaWNhbGx5IGNvbnNpZGVyIGlmIHRoYXQncyBsYXJnZSBlbm91Z2ggZm9yIHRoZSBzY2FsZSBJIGFtIHdvcmtpbmcgYXQuXG5cblRoZW4sIGBLVk1fSU5URVJOQUxfTUVNX1NMT1RTYCBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEludGVyZXN0aW5nLiBUaGF0IHRlbGxzIG1lIHRoZSBpbnRlcm5hbCBtZW1vcnkgc2xvdCBtYW5hZ2VtZW50ICp3aXRoaW4qIEtWTSBpcyBsaWtlbHkgdHVuZWQgZm9yIHRoZSBzcGVjaWZpY3Mgb2YgZGlmZmVyZW50IGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGFyY2gtc3BlY2lmaWMgZGVmaW5pdGlvbnMgdG8gc2VlIHRoZSBkaWZmZXJlbmNlcyBhbmQgcG90ZW50aWFsIHJlYXNvbnMgZm9yIHRoYXQgdmFyaWF0aW9uLiBUaGlzIHByb2JhYmx5IGhhcyB0byBkbyB3aXRoIGhvdyBtZW1vcnkgaXMgbWFwcGVkLCBoYW5kbGVkLCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemVkIGF0IGEgbG93ZXIgbGV2ZWwgb24sIGZvciBpbnN0YW5jZSwgeDg2IHZzLiBBUk0uIFRoZSBwcmFjdGljYWwgbGltaXQgbWlnaHQgYmUgdGhlIG1heCBwaHlzaWNhbCBtZW1vcnkgc2l6ZSBhbmQvb3IgdGhlIGFkZHJlc3Mgc3BhY2UgbGltaXRhdGlvbnMgb2YgdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4gSSdkIHdhbnQgdG8gYmUgYXdhcmUgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhbGxvY2F0aW9uLiBJIGNvdWxkIGFsc28gc2VlIGl0IGhhdmluZyBpbXBsaWNhdGlvbnMgZm9yIE5VTUEgY29uZmlndXJhdGlvbnMuIFNvLCB0aGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg2NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI2OjA0LjU1MTAwNjg4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MDE1NjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF9zMzkwLmgtMzItXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0X3MzOTAuaDozMzojZGVmaW5lIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFMgMVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdF9zMzkwLmgtMzQtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTcxLS8qIG1lbW9yeSBzbG90cyB0aGF0IGFyZSBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjcyOiNkZWZpbmUgS1ZNX0lOVEVSTkFMX01FTV9TTE9UUyAzXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC03My1cXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD03MDQ9Ym9vbCBrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbChzdHJ1Y3Qga3ZtICprdm0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTcwNi0jaWZuZGVmIEtWTV9JTlRFUk5BTF9NRU1fU0xPVFNcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6NzA3OiNkZWZpbmUgS1ZNX0lOVEVSTkFMX01FTV9TTE9UUyAwXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTcwOC0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MjY6MDYuMDQxMTY3MDQ3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNTkxNDMxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW50ZXJuYWwgTXVzaW5ncyBvbiBLVk0gTWVtb3J5IFNsb3RzKipcblxuT2theSwgc28gbGV0J3Mgc2VlLiAgYEtWTV9VU0VSX01FTV9TTE9UU2AgaXMgZGVmaW5lZCBhcyAzMjc2NyBtaW51cyAzLCByZXN1bHRpbmcgaW4gMzI3NjQsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB4ODYuICBJJ20gbG9va2luZyBhdCB0aGUgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgZnVuY3Rpb24sIGFuZCB0aGVyZSdzIGEgY2hlY2sgaW4gdGhlcmUuIEl0J3MgdXNpbmcgYFdBUk5fT05fT05DRWAgd2hpY2ggd2lsbCBvbmx5IHdhcm4sIGl0IHNlZW1zLlxuXG5gYGBjXG5cdGlmIChXQVJOX09OX09OQ0UobWVtLVx1MDAzZXNsb3QgXHUwMDNjIEtWTV9VU0VSX01FTV9TTE9UUykpXG5cdFx0cmV0dXJuIC1FSU5WQUw7XG5gYGBcblxuSG9sZCBvbiwgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgc3BlY2lmaWNhbGx5IGZvciAqaW50ZXJuYWwqIG1lbXNsb3RzLiAgUmlnaHQsIGludGVybmFsIG1lbXNsb3RzIGhhdmUgc2xvdCBJRHMgdGhhdCBhcmUgKmdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byogYEtWTV9VU0VSX01FTV9TTE9UU2AuIFRoYXQncyB0aGUga2V5IGRpc3RpbmN0aW9uLiBCdXQsIGBtZW0tXHUwMDNlc2xvdGAgaXMgZGVmaW5lZCBhcyBhIGB1MzJgLi4uIG5vdyBsZXQgbWUgcmVtZW1iZXIgd2hhdCBJIGRpZCB3aXRoIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MjY6MTEuMTAwMzEyMTU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2Mzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTkzOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTkzODpcXHR2b2lkIF9fdXNlciAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXFxuOTkzOTpcXHRcXHRcXHRcXHRcXHQgICAgICB1MzIgc2l6ZSlcXG45OTQwOlxcdHtcXG45OTQxOlxcdFxcdGludCBpLCByO1xcbjk5NDI6XFx0XFx0dW5zaWduZWQgbG9uZyBodmEsIG9sZF9ucGFnZXM7XFxuOTk0MzpcXHRcXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pO1xcbjk5NDQ6XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcXG45OTQ1OlxcdFxcbjk5NDY6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG45OTQ3OlxcdFxcbjk5NDg6XFx0XFx0aWYgKFdBUk5fT04oaWQgXFx1MDAzZT0gS1ZNX01FTV9TTE9UU19OVU0pKVxcbjk5NDk6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFJfVVNSKC1FSU5WQUwpO1xcbjk5NTA6XFx0XFxuOTk1MTpcXHRcXHRzbG90ID0gaWRfdG9fbWVtc2xvdChzbG90cywgaWQpO1xcbjk5NTI6XFx0XFx0aWYgKHNpemUpIHtcXG45OTUzOlxcdFxcdFxcdGlmIChzbG90IFxcdTAwMjZcXHUwMDI2IHNsb3QtXFx1MDAzZW5wYWdlcylcXG45OTU0OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSX1VTUigtRUVYSVNUKTtcXG45OTU1OlxcdFxcbjk5NTY6XFx0XFx0XFx0LypcXG45OTU3OlxcdFxcdFxcdCAqIE1BUF9TSEFSRUQgdG8gcHJldmVudCBpbnRlcm5hbCBzbG90IHBhZ2VzIGZyb20gYmVpbmcgbW92ZWRcXG45OTU4OlxcdFxcdFxcdCAqIGJ5IGZvcmsoKS9DT1cuXFxuOTk1OTpcXHRcXHRcXHQgKi9cXG45OTYwOlxcdFxcdFxcdGh2YSA9IHZtX21tYXAoTlVMTCwgMCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG45OTYxOlxcdFxcdFxcdFxcdCAgICAgIE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTLCAwKTtcXG45OTYyOlxcdFxcdFxcdGlmIChJU19FUlJfVkFMVUUoaHZhKSlcXG45OTYzOlxcdFxcdFxcdFxcdHJldHVybiAodm9pZCBfX3VzZXIgKilodmE7XFxuOTk2NDpcXHRcXHR9IGVsc2Uge1xcbjk5NjU6XFx0XFx0XFx0aWYgKCFzbG90IHx8ICFzbG90LVxcdTAwM2VucGFnZXMpXFxuOTk2NjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG45OTY3OlxcdFxcbjk5Njg6XFx0XFx0XFx0b2xkX25wYWdlcyA9IHNsb3QtXFx1MDAzZW5wYWdlcztcXG45OTY5OlxcdFxcdFxcdGh2YSA9IHNsb3QtXFx1MDAzZXVzZXJzcGFjZV9hZGRyO1xcbjk5NzA6XFx0XFx0fVxcbjk5NzE6XFx0XFxuOTk3MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3ZtX2FyY2hfbnJfbWVtc2xvdF9hc19pZHMoa3ZtKTsgaSsrKSB7XFxuOTk3MzpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiBtO1xcbjk5NzQ6XFx0XFxuOTk3NTpcXHRcXHRcXHRtLnNsb3QgPSBpZCB8IChpIFxcdTAwM2NcXHUwMDNjIDE2KTtcXG45OTc2OlxcdFxcdFxcdG0uZmxhZ3MgPSAwO1xcbjk5Nzc6XFx0XFx0XFx0bS5ndWVzdF9waHlzX2FkZHIgPSBncGE7XFxuOTk3ODpcXHRcXHRcXHRtLnVzZXJzcGFjZV9hZGRyID0gaHZhO1xcbjk5Nzk6XFx0XFx0XFx0bS5tZW1vcnlfc2l6ZSA9IHNpemU7XFxuOTk4MDpcXHRcXHRcXHRyID0ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KGt2bSwgXFx1MDAyNm0pO1xcbjk5ODE6XFx0XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjk5ODI6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFJfVVNSKHIpO1xcbjk5ODM6XFx0XFx0fVxcbjk5ODQ6XFx0XFxuOTk4NTpcXHRcXHRpZiAoIXNpemUpXFxuOTk4NjpcXHRcXHRcXHR2bV9tdW5tYXAoaHZhLCBvbGRfbnBhZ2VzICogUEFHRV9TSVpFKTtcXG45OTg3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNjoxMS4xMDA4NzcyMDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMzMzI2MzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvZGluZyB0aGUgS1ZNIE1lbW9yeSBTbG90IExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBtLnNsb3QgPSBpZCB8IChpIFx1MDAzY1x1MDAzYyAxNik7YCBsaW5lLi4uIFJpZ2h0LCB0aGUgYWRkcmVzcyBzcGFjZSBJRCBpcyBwYWNrZWQgaW50byB0aGUgdXBwZXIgMTYgYml0cyBvZiB0aGUgc2xvdC4gU28gYG1lbS1cdTAwM2VzbG90YCBjYW4gaW5kZWVkIGJlIHRoaXMgY29tYmluZWQgdmFsdWUsIGBpZCB8IChpIFx1MDAzY1x1MDAzYyAxNilgLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGF0IGlmIGBpYCBpcyBncmVhdGVyIHRoYW4gMCwgZXZlbiBhIHZhbGlkICpiYXNlKiBJRCwgaWYgbGVzcyB0aGFuIGBLVk1fVVNFUl9NRU1fU0xPVFNgLCB3aWxsIHJlc3VsdCBpbiBgbWVtLVx1MDAzZXNsb3RgIGJlaW5nIGBcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UU2AuXG5cbk5vdywgdGhlIGNoZWNrIGluIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgOlxuXG5gYGBjXG5cdGlmIChXQVJOX09OX09OQ0UobWVtLVx1MDAzZXNsb3QgXHUwMDNjIEtWTV9VU0VSX01FTV9TTE9UUykpXG5cdFx0cmV0dXJuIC1FSU5WQUw7XG5gYGBcblxuSWYgdGhlIGJhc2UgYGlkYCBpcyBhbiBpbnRlcm5hbCBtZW1zbG90IElEIChtZWFuaW5nIGl0J3MgYWxyZWFkeSBgXHUwMDNlPSBLVk1fVVNFUl9NRU1fU0xPVFNgKSwgdGhlbiBgbS5zbG90YCB3aWxsICphbHdheXMqIHBhc3MgdGhlIGNoZWNrIGJlY2F1c2UgZXZlbiB3aXRoIGk9MCB0aGUgbWVtb3J5IHNsb3QgaXMgYW4gaW50ZXJuYWwgbWVtc2xvdC4gRXZlbiBpZiBpIGlzIG5vdCAwLCBpdCdzIHN0aWxsIGFuIGludGVybmFsIG1lbXNsb3QuIEJ1dCBpZiBpIGlzIDAsIHRoZSBjaGVjayBpdHNlbGYgZG9lc24ndCBuZWVkIHRoZSBjYXN0LiBTbyB3aHkgZG8gd2UgZXZlbiBuZWVkIHRoZSBgKHUxNiltZW0tXHUwMDNlc2xvdGAgY2FzdD9cblxuQWghIEdvdCBpdC4gVGhlIGNhc3QgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0ICptYXNrcyogdGhlIHVwcGVyIDE2IGJpdHMsIGVzc2VudGlhbGx5IGV4dHJhY3RpbmcgdGhlIG9yaWdpbmFsIGBpZGAuIFRoZSBjaGVjayBpc24ndCB2ZXJpZnlpbmcgdGhlIGZ1bGwgYG1lbS1cdTAwM2VzbG90YCB2YWx1ZSwgaXQncyB2YWxpZGF0aW5nIHRoYXQgdGhlICpiYXNlKiBJRCBpcyBhbiBpbnRlcm5hbCBtZW1zbG90IElELiBJZiBgbWVtLVx1MDAzZXNsb3RgIHdlcmUganVzdCBgaWRgIGFuZCBgaSA9IDBgLCB0aGUgdGVzdCBpcyB0cml2aWFsLiBJZiBgbWVtLVx1MDAzZXNsb3RgIHdlcmUgYGlkIHwgKGkgXHUwMDNjXHUwMDNjIDE2KWAsIHRoZW4sIGFuZCBgaWRgIHdhcyBhICp1c2VyKiBzbG90LCB0aGVuIHdlIHdvdWxkIG5lZWQgdGhlIHVwcGVyIGJpdHMgc3RyaXBwZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGlzICpiYXNlKiBgaWRgIGlzIGludGVybmFsLiBOb3csIGlmIHNvbWVvbmUgcGFzc2VkIGFuIGludmFsaWQgdXNlciBtZW1zbG90LCB3aXRoIGkgXHUwMDNlIDAsIHRoZSBjaGVjayBgbWVtLVx1MDAzZXNsb3QgXHUwMDNjIEtWTV9VU0VSX01FTV9TTE9UU2Agd291bGQgYmUgZmFsc2UsIHdpdGhvdXQgdGhpcyBjYXN0LCBiZWNhdXNlIHRoZSB1cHBlciBiaXRzIHdvdWxkIG1ha2UgaXQgYXBwZWFyIGFzIGFuIGludGVybmFsIHNsb3Qgd2hlbiBpdCdzIG5vdC4gVGhhdCdzIGEgbmFzdHkgdnVsbmVyYWJpbGl0eSFcblxuT2theSwgYnV0IHdhaXQsIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGlzIGludGVybmFsLiBLVk0gaXRzZWxmIGlzIHRoZSBjYWxsZXIuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEknbGwgZG8gdGhhdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI2OjIwLjQzNDE0MzQ1NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMzYyMDY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fc2V0X2ludGVybmFsX21lbXNsb3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM9MzI0MT1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtMzM1MS1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM6MzM1MjpcXHRcXHRLVk1fQlVHX09OKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFxcdTAwMjZmYWtlX21lbXNsb3QpLCBrdm0pO1xcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtMzM1My1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTkzOD12b2lkIF9fdXNlciAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk3OS1cXHRcXHRtLm1lbW9yeV9zaXplID0gc2l6ZTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk4MDpcXHRcXHRyID0ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KGt2bSwgXFx1MDAyNm0pO1xcbmFyY2gveDg2L2t2bS94ODYuYy05OTgxLVxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjQyPWVudW0ga3ZtX21yX2NoYW5nZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI0OC1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTI0OTppbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI1MC1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xOTk1PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyNy1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMjg6aW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxudmlydC9rdm0va3ZtX21haW4uYy0yMTI5LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgKm1lbSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEzOC19XFxudmlydC9rdm0va3ZtX21haW4uYzoyMTM5OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2ludGVybmFsX21lbXNsb3QpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjE0MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MjY6MjEuODM3Nzg1MzI0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MjU4NjY1MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtWTSBNZW1vcnkgU2xvdCBDb251bmRydW0qKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCdzIHJ1bm5pbmcgdGhyb3VnaCBteSBtaW5kLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgbWVtb3J5IHNsb3RzIGFyZSBiZWluZyBtYW5hZ2VkIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBzZWUgdGhhdCBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBnZXRzIGNhbGxlZCBieSBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gLiBUaGF0J3MgdGhlIGtleS5cblxuTm93LCBpbiBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gLCB0aGVyZSdzIHRoaXMgY2hlY2s6IGBpZiAoV0FSTl9PTihpZCBcdTAwM2U9IEtWTV9NRU1fU0xPVFNfTlVNKSkgcmV0dXJuIEVSUl9QVFJfVVNSKC1FSU5WQUwpO2AuIEl0J3MgZW5zdXJpbmcgdGhlIG1lbXNsb3QgSUQgaXNuJ3QgYmV5b25kIHRoZSAqdG90YWwqIG51bWJlciBvZiBzbG90cy4gRmluZSwgbWFrZXMgc2Vuc2UuIEJ1dC4uLiBhbmQgaGVyZSdzIHRoZSBiaXQgdGhhdCdzIGJvdGhlcmluZyBtZS4uLiBpdCBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIGd1YXJkIGZvciBlbnN1cmluZyB0aGUgSUQgaXMgKmJlbG93KiBgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gIFRoYXQncyBteSBmaXJzdCBwb2ludCBvZiBjb25jZXJuLlxuXG5UaGVuIEknbSBsb29raW5nIGF0IGhvdyBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGlzIGNhbGxlZC4gSSBzZWUgY2FsbHMgd2l0aCBgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1RgLCBgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVGAsIGFuZCBgVFNTX1BSSVZBVEVfTUVNU0xPVGAuIFRoZXNlIGFyZSBhbGwgaW50ZXJuYWwgbWVtc2xvdHMuIE1ha2VzIHNlbnNlOyB0aGVzZSBhcmUgcHJpdmF0ZSB0byB0aGUgaHlwZXJ2aXNvcidzIG5lZWRzLlxuXG5CdXQgaGVyZSdzIHRoZSBxdWVzdGlvbiB0aGF0IGtlZXBzIGNpcmNsaW5nOiB3aGF0IGhhcHBlbnMgaWYsIGZvciBzb21lIHJlYXNvbiAoYWNjaWRlbnRhbCBvciBvdGhlcndpc2UpLCBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGdldHMgY2FsbGVkIHdpdGggYSB1c2VyIG1lbXNsb3QgSUQ/IFRoZSBjb2RlIGRvZXNuJ3Qgc2VlbSB0byBleHBsaWNpdGx5IHByZXZlbnQgaXQuIENvdWxkIHRoaXMgbGVhZCB0byBzb21lIGtpbmQgb2YgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdW5pbnRlbmRlZCBiZWhhdmlvcj8gSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGVsc2UgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCBpcyB1c2VkLiBUaGlzIGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY0MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNjozOS4wOTY0NTM1MjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODQxOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9feDg2X3NldF9tZW1vcnlfcmVnaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9OTg0Mz1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTE2LS8qKlxcbmFyY2gveDg2L2t2bS94ODYuYzo5OTE3OiAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uOiBTZXR1cCBLVk0gaW50ZXJuYWwgbWVtb3J5IHNsb3RcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxOC0gKlxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MzctICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk5Mzg6dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuYy05OTM5LVxcdFxcdFxcdFxcdCAgICAgIHUzMiBzaXplKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5ODktfVxcbmFyY2gveDg2L2t2bS94ODYuYzo5OTkwOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbik7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5OTEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwMTQ9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyMi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyMzpcXHRcXHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNC1cXHRcXHRcXHRcXHRcXHQwLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjU6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBJREVOVElUWV9QQUdFVEFCTEVfUFJJVkFURV9NRU1TTE9ULFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyNi1cXHRcXHRcXHRcXHRcXHQwLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjc6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBUU1NfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjgtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNjozOS4xNDUyOTgyMDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzNDcyNjIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgQ2FsbGVycyBvZiBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAgaXMgYmVpbmcgaW52b2tlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hvJ3MgdXNpbmcgdGhpcyB0aGluZz9cIiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBwYXRocywgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIGJlc2lkZXMgdGhlIG9uZXMgSSdtIGZhbWlsaWFyIHdpdGgsIGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGVtcGxveWVkLiBJcyB0aGlzIGEgY29tbW9uIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIHB1bGxlZCBpbnRvIHNldmVyYWwgZGlmZmVyZW50IGFyZWFzIG9mIHRoZSBjb2RlIGJhc2UsIG9yIGlzIGl0IG1vcmUgaXNvbGF0ZWQ/IFdoYXQgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIGFyZSBsZXZlcmFnaW5nIGl0PyBLbm93aW5nIHRoZSBhbnN3ZXIgdG8gdGhhdCB3aWxsIHByb3ZpZGUgY3JpdGljYWwgaW5mb3JtYXRpb24gd2hlbiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgZnJvbSBjaGFuZ2VzIHRvIHRoZSBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGZ1bmN0aW9uLiBJZGVudGlmeWluZyB3aGF0IG90aGVyIGFyZWFzIG9mIGNvZGUgY2FsbCBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGlzIHRoZSByaWdodCBmaXJzdCBzdGVwLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgdXNhZ2UgYmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlciB3aXRoIHRoaXMgdGFzay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNjo0Mi45ODAwMjY4ODRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTg3NjU1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX194ODZfc2V0X21lbW9yeV9yZWdpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9sYXBpYy5jPTI5MTA9aW50IGt2bV9hbGxvY19hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5MTktXFxuYXJjaC94ODYva3ZtL2xhcGljLmM6MjkyMDpcXHRodmEgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5MjEtXFx0XFx0XFx0XFx0ICAgICAgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSwgUEFHRV9TSVpFKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jPTI5MzE9dm9pZCBrdm1faW5oaWJpdF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDItXFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5hcGljX2FjY2Vzc19tZW1zbG90X2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzoyOTQzOlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1QsIDAsIDApO1xcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDQtXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NDAyNz1zdGF0aWMgaW50IGluaXRfcm1vZGVfaWRlbnRpdHlfbWFwKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDA0Mi1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjQwNDM6XFx0dWFkZHIgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00MDQ0LVxcdFxcdFxcdFxcdFxcdElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTUyNzQ9aW50IHZteF9zZXRfdHNzX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTI4MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTI4MjpcXHRyZXQgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIFRTU19QUklWQVRFX01FTVNMT1QsIGFkZHIsXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MjgzLVxcdFxcdFxcdFxcdCAgICAgIFBBR0VfU0laRSAqIDMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTk4NDM9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxNi0vKipcXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxNzogKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbjogU2V0dXAgS1ZNIGludGVybmFsIG1lbW9yeSBzbG90XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MTgtICpcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTM3LSAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzo5OTM4OnZvaWQgX191c2VyICogX194ODZfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgaWQsIGdwYV90IGdwYSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkzOS1cXHRcXHRcXHRcXHQgICAgICB1MzIgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTg5LX1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk5MDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX194ODZfc2V0X21lbW9yeV9yZWdpb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy05OTkxLVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDE0PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjItXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjM6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjQtXFx0XFx0XFx0XFx0XFx0MCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI1OlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjYtXFx0XFx0XFx0XFx0XFx0MCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI3OlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgVFNTX1BSSVZBVEVfTUVNU0xPVCwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI4LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaD01MjY9aW50IGt2bV9nZXRfbnJfcGVuZGluZ19ubWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5oLTUyNy1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg6NTI4OnZvaWQgX191c2VyICpfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuaC01MjktXFx0XFx0XFx0XFx0ICAgICB1MzIgc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI2OjQ0LjQzODc5NzE4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTk0Mjc1MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IFJlZ2lvbiBBc3NpZ25tZW50IGluIHRoZSB4ODYgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSByZWdpb25zIGFyZSBoYW5kbGVkIGluIHRoaXMgeDg2IGNvbnRleHQsIHNwZWNpZmljYWxseSB0aGUgdXNlIG9mIGBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbmAuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBvbmx5IGV2ZXIgY2FsbGVkIHdpdGggaW50ZXJuYWwgbWVtc2xvdCBJRHMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcXVlc3Rpb246IGlmIHRoYXQncyB0aGUgKm9ubHkqIGNhc2UsIGRvZXNuJ3QgdGhhdCBtYWtlIGEgY2VydGFpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnQgYWx3YXlzIHRydWU/XG5cbkxldCBtZSB0aGlua+KApiB0aGUgY29kZSBoYXMgYGlkIFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTYC4gUmlnaHQuIElmIHRoZSBpbnB1dCBpcyBhbHdheXMgYW4gaW50ZXJuYWwgbWVtc2xvdCBJRCwgdGhlbiBpc24ndCB0aGUgY29tcGFyaXNvbiAqYWx3YXlzKiBnb2luZyB0byBldmFsdWF0ZSB0byB0cnVlPyBMZXQncyBjaGVjayB0aGUgZGVmaW5pdGlvbnMuIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIGRlZmluZWQgYXMgYEtWTV9NRU1fU0xPVFNfTlVNIC0gS1ZNX0lOVEVSTkFMX01FTV9TTE9UU2AuIE9rYXksIHNvIGBLVk1fTUVNX1NMT1RTX05VTWAgaXMgMzI3NjcsIGFuZCBgS1ZNX0lOVEVSTkFMX01FTV9TTE9UU2AgaXMgMy4gVGhhdCBtZWFucyBgS1ZNX1VTRVJfTUVNX1NMT1RTYCBpcyAzMjc2NC4gXG5cblNvIHRoZSBpbnRlcm5hbCBtZW1zbG90IElEcyBhcmUgMzI3NjQsIDMyNzY1LCBhbmQgMzI3NjYuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBUaGF0IGNvbXBhcmlzb24gKnNob3VsZCogYWx3YXlzIGJlIHRydWUuIEJ1dCB3YWl04oCmIEhvdyBhcmUgdGhlc2UgaW50ZXJuYWwgSURzIGV2ZW4gKmRlZmluZWQqPyBJIG5lZWQgdG8gdHJhY2sgZG93biBleGFjdGx5IGhvdyB0aGVzZSBtZW1zbG90IElEcyBhcmUgc2V0IHVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MgdG8gYmUgc3VyZSB0aGVyZSdzIG5vdCBzb21ldGhpbmcgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzI0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI2OjUzLjYzMzA3NDYxM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MDgzMjg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9UXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaD0yMDQ9ZW51bSB2bWNzX2ZpZWxkIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oLTUxNi0jZGVmaW5lIFRTU19QUklWQVRFX01FTVNMT1RcXHRcXHRcXHQoS1ZNX1VTRVJfTUVNX1NMT1RTICsgMClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaDo1MTc6I2RlZmluZSBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVFxcdChLVk1fVVNFUl9NRU1fU0xPVFMgKyAxKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oLTUxOC0jZGVmaW5lIElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1RcXHQoS1ZNX1VTRVJfTUVNX1NMT1RTICsgMilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MjY6NTUuMDczOTEyMTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUzNDQwMjc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNsb3QgQXNzaWdubWVudCBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgc2xvdCBhc3NpZ25tZW50LCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgYGlkYCBpcyBkZWZpbmVkIGFzIGBLVk1fVVNFUl9NRU1fU0xPVFMgKyBYYC4gVGhhdCBtZWFucyBgaWRgIGlzIGFsd2F5cyBnb2luZyB0byBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYEtWTV9VU0VSX01FTV9TTE9UU2AuIFRoZW4sIGBtLnNsb3RgIGlzIGNhbGN1bGF0ZWQgYXMgYGlkIHwgKGkgXHUwMDNjXHUwMDNjIDE2KWAuIEdpdmVuIHRoYXQgYGlkYCBpcyBhdCBsZWFzdCBgS1ZNX1VTRVJfTUVNX1NMT1RTYCwgdGhlIHJlc3VsdCBgbS5zbG90YCB3aWxsIGFsd2F5cyBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhhdCB2YWx1ZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgYGlgLlxuXG5IbW0sIHRoaXMgcmFpc2VzIGEgcXVlc3Rpb24uIFRoZSBjb2RlIGhhcyBgV0FSTl9PTl9PTkNFKG1lbS1cdTAwM2VzbG90IFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpYC4gSWYgYG0uc2xvdGAgaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTYCwgdGhlbiB0aGF0IGBXQVJOX09OX09OQ0VgIHdpbGwgKm5ldmVyKiB0cmlnZ2VyISBBbmQgdGhhdCdzIGV2ZW4gd2l0aG91dCBjb25zaWRlcmluZyBhbnkgY2FzdC5cblxuV2FpdCwgSSBuZWVkIHRvIGNvbnNpZGVyIGEgcG9zc2libGUgZWRnZSBjYXNlOiBDb3VsZCBgbWVtLVx1MDAzZXNsb3RgIHNvbWVob3cgYmUgbmVnYXRpdmU/IE5vLCBpdCdzIGEgYHUzMmAsIHNvIGl0J3MgdW5zaWduZWQuIEl0J3MgYWx3YXlzIGEgcG9zaXRpdmUgb3IgemVybyB2YWx1ZS5cblxuT2theSwgbGV0J3Mgc3RlcCB0aHJvdWdoIGEgY291cGxlIG9mIGV4YW1wbGVzLiBMZXQncyBzYXkgYEtWTV9VU0VSX01FTV9TTE9UU2AgaXMgMzI3NjQuIElmIGBpZGAgaXMgYEtWTV9VU0VSX01FTV9TTE9UUyArIFhgLCB0aGF0IG1lYW5zIGBpZGAgaXMgMzI3NjQgKyBYLlxuXG5JZiBgaWAgaXMgMCwgdGhlbiBgbS5zbG90YCBpcyBqdXN0IDMyNzY0ICsgWC5cbklmIGBpYCBpcyAxLCB0aGVuIGBtLnNsb3RgIGlzIGAoMzI3NjQgKyBYKSB8ICgxIFx1MDAzY1x1MDAzYyAxNilgIHdoaWNoIHJlc3VsdHMgaW4gYDY1NTM2ICsgMzI3NjQgKyBYYCB3aGljaCBpcyBgOTgzMDAgKyBYYC5cblxuSW4gYm90aCBvZiB0aGVzZSBjYXNlcywgYG0uc2xvdGAgaXMgY2xlYXJseSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYEtWTV9VU0VSX01FTV9TTE9UU2AgKDk4MzAwIGlzIGRlZmluaXRlbHkgXHUwMDNlPSAzMjc2NCkuXG5cblNvLCB0aGVuLCB3aHkgZGlkIHRoZXkgYWRkIHRoZSBgKHUxNilgIGNhc3Q/IEl0IHNlZW1zIGNvbXBsZXRlbHkgcmVkdW5kYW50LiBJIHNob3VsZCBwcm9iYWJseSByZS1leGFtaW5lIGhvdyBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBpcyB3b3JraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNzowMi42MDgzMTcyNzlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEyOCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEyODpcXHRpbnQga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG4yMTI5OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgKm1lbSlcXG4yMTMwOlxcdHtcXG4yMTMxOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoKHUxNiltZW0tXFx1MDAzZXNsb3QgXFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpKVxcbjIxMzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjEzMzpcXHRcXG4yMTM0OlxcdFxcdGlmIChXQVJOX09OX09OQ0UobWVtLVxcdTAwM2VmbGFncykpXFxuMjEzNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMTM2OlxcdFxcbjIxMzc6XFx0XFx0cmV0dXJuIGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIG1lbSk7XFxuMjEzODpcXHR9XFxuMjEzOTpcXHRFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KTtcXG4yMTQwOlxcdFxcbjIxNDE6XFx0c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbjIxNDI6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxcbjIxNDM6XFx0e1xcbjIxNDQ6XFx0XFx0aWYgKCh1MTYpbWVtLVxcdTAwM2VzbG90IFxcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUylcXG4yMTQ1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIxNDY6XFx0XFxuMjE0NzpcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI3OjAyLjYwODUyNjI4OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTczMDg1NDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZ1bG5lcmFiaWxpdHkgRGlzY292ZXJlZCBpbiBLVk0gTWVtb3J5IFJlZ2lvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb25gIGFuZCBpbW1lZGlhdGVseSBzcG90IGEgcG90ZW50aWFsIGZsYXcgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGBtZW0tXHUwMDNlc2xvdGAgZmllbGQuIFRoZSBjb2RlIGNhc3RzIGBtZW0tXHUwMDNlc2xvdGAgdG8gYSBgdTE2YCBiZWZvcmUgY2hlY2tpbmcgaWYgaXQncyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlLCBzcGVjaWZpY2FsbHksIGAodTE2KW1lbS1cdTAwM2VzbG90IFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTYC4gVGhpcyBzZWVtcyBleHBsb2l0YWJsZS4gVXNlciBzcGFjZSBjYW4gZWZmZWN0aXZlbHkgc2V0IHRoZSB1cHBlciAxNiBiaXRzIG9mIGBtZW0tXHUwMDNlc2xvdGAgdG8gcmVwcmVzZW50IGFuIGFkZHJlc3Mgc3BhY2UgSUQuIElmIGEgdXNlciBwcm92aWRlcyBgbWVtLVx1MDAzZXNsb3QgPSAwIHwgKDEgXHUwMDNjXHUwMDNjIDE2KWAsIHRoZSBjYXN0IHRydW5jYXRlcyB0aGlzIHZhbHVlIGRvd24gdG8gMCwgd2hpY2ggaXMgdGhlbiwgaW5jb3JyZWN0bHksIGRldGVybWluZWQgdG8gYmUgdmFsaWQuXG5cblRoaXMgbWVhbnMgdXNlciBzcGFjZSBjYW4gcG90ZW50aWFsbHkgbWFuaXB1bGF0ZSBtZW1vcnkgcmVnaW9ucyBhY3Jvc3MgZGlmZmVyZW50IGFkZHJlc3Mgc3BhY2VzLiBUaGUgcHJvYmxlbSBsaWVzIHdpdGggdGhpcyBjYXN0IGFuZCB0aGUgc3Vic2VxdWVudCBib3VuZHMgY2hlY2suIEknbSBmb2N1c2luZyBvbiBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCBhcyB0aGUgdGFyZ2V0IGZvciBleHBsb2l0YXRpb24uIE5vdywgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgc3VwcG9zZWRseSBvbmx5IGZvciAqaW50ZXJuYWwqIG1lbXNsb3RzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgc2hvdWxkIGJlIGludGVybmFsbHkgY29uc2lzdGVudCwgYnV0IHRoZSBtb3JlIEkgbG9vayBhdCB0aGlzLi4uXG5cbklmIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGdldHMgY2FsbGVkIHdpdGggYG1lbS1cdTAwM2VzbG90YCBiZWluZyBgMCB8ICgxIFx1MDAzY1x1MDAzYyAxNilgLCB0aGVuIHdpdGhvdXQgdGhlIGNhc3QsIHRoaXMgYmVjb21lcyA2NTUzNi4gTm93LCA2NTUzNiBpcyAqbm90KiBsZXNzIHRoYW4gYEtWTV9VU0VSX01FTV9TTE9UU2AhIFNvIHRoZSBib3VuZHMgY2hlY2sgKnNob3VsZCogcHJldmVudCB0aGUgaXNzdWUhXG5cbkhvd2V2ZXIsIHRoZSB2dWxuZXJhYmxlIGNvZGUgaW4gYGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbmAgYWxsb3dzIHRoZSB1c2VyIHRvIHRyaWNrIHRoZSBzeXN0ZW0gd2l0aCBhIGNhc3QgdG8gdTE2IGFuZCBwb3RlbnRpYWxseSBzZXQgbWVtb3J5IHJlZ2lvbnMgaW4gYSBkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZSwgc3BlY2lmaWNhbGx5LCBhIHVzZXIgbWVtc2xvdCB3aXRoIElEIDAgaW4gYSBub24temVybyBhZGRyZXNzIHNwYWNlLiBUaGlzIGlzIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eSBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgYSB1c2VyIHByb2Nlc3MgY291bGQgcG90ZW50aWFsbHkgb3ZlcndyaXRlIGNyaXRpY2FsIEtWTSBtZW1vcnkuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSBob3cgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgKmFjdHVhbGx5KiB1c2VkLiBFdmVuIGlmIHRoZSBjb2RlICpzaG91bGQqIGJlIHNhZmUsIGlmIGl0J3MgdXNlZCBpbiBhbiB1bmV4cGVjdGVkIG1hbm5lciwgdGhlIHZ1bG5lcmFiaWxpdHkgaXMgc3RpbGwgcHJlc2VudC4gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gYWxsIGNhbGxzIHRvIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSB0aGlzIGNvdWxkIGJlIGV4cGxvaXRlZCBieSBleHRlcm5hbCBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNzoxMS43ODE2MTQ4OTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTk4NjE0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jPTMyNDE9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTEtXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jOjMzNTI6XFx0XFx0S1ZNX0JVR19PTihrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoa3ZtLCBcXHUwMDI2ZmFrZV9tZW1zbG90KSwga3ZtKTtcXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTMzNTMtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTk5Mzg9dm9pZCBfX3VzZXIgKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5NzktXFx0XFx0bS5tZW1vcnlfc2l6ZSA9IHNpemU7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk5ODA6XFx0XFx0ciA9IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFxcdTAwMjZtKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk4MS1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTI0Mj1lbnVtIGt2bV9tcl9jaGFuZ2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNDgtXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjEyNDk6aW50IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNTAtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTk5NT1zdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjctXFxudmlydC9rdm0va3ZtX21haW4uYzoyMTI4OmludCBrdm1fc2V0X2ludGVybmFsX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyOS1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMzgtfVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEzOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxNDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI3OjEzLjI0MTQ4MTI0OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjQ5MTUwMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBDYWxsIFNpdGVzKipcblxuUmlnaHQsIHNvIEknbSBuYXJyb3dpbmcgZG93biB0aGUgcG90ZW50aWFsIGNhbGwgc2l0ZXMuIEl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIG9ubHkgdHdvIGZ1bmN0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSBjYWxsaW5nIGludG8gd2hhdGV2ZXIncyBiZWluZyBmbGFnZ2VkOiBgYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzozMzUyYCBhbmQgYGFyY2gveDg2L2t2bS94ODYuYzo5OTgwYC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgSSdkIHByb2JhYmx5IHdhbnQgdG8gZGlnIGluIHRvIHRoZSBzMzkwIGNvZGUgZmlyc3QsIHNvIGxldCdzIGNoZWNrIGBhcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jYC4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MTUsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNzoxOC40OTA2MzM1ODRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM0MDpcXHRcXG4zMzQxOlxcdFxcdGlmICh0eXBlIFxcdTAwMjYgS1ZNX1ZNX1MzOTBfVUNPTlRST0wpIHtcXG4zMzQyOlxcdFxcdFxcdHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIGZha2VfbWVtc2xvdCA9IHtcXG4zMzQzOlxcdFxcdFxcdFxcdC5zbG90ID0gS1ZNX1MzOTBfVUNPTlRST0xfTUVNU0xPVCxcXG4zMzQ0OlxcdFxcdFxcdFxcdC5ndWVzdF9waHlzX2FkZHIgPSAwLFxcbjMzNDU6XFx0XFx0XFx0XFx0LnVzZXJzcGFjZV9hZGRyID0gMCxcXG4zMzQ2OlxcdFxcdFxcdFxcdC5tZW1vcnlfc2l6ZSA9IEFMSUdOX0RPV04oVEFTS19TSVpFLCBfU0VHTUVOVF9TSVpFKSxcXG4zMzQ3OlxcdFxcdFxcdFxcdC5mbGFncyA9IDAsXFxuMzM0ODpcXHRcXHRcXHR9O1xcbjMzNDk6XFx0XFxuMzM1MDpcXHRcXHRcXHQvKiBvbmUgZmxhdCBmYWtlIG1lbXNsb3QgY292ZXJpbmcgdGhlIHdob2xlIGFkZHJlc3Mtc3BhY2UgKi9cXG4zMzUxOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuMzM1MjpcXHRcXHRcXHRLVk1fQlVHX09OKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFxcdTAwMjZmYWtlX21lbXNsb3QpLCBrdm0pO1xcbjMzNTM6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbjMzNTQ6XFx0XFx0XFx0c2V0X2JpdChHTUFQX0ZMQUdfSVNfVUNPTlRST0wsIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlZmxhZ3MpO1xcbjMzNTU6XFx0XFx0fSBlbHNlIHtcXG4zMzU2OlxcdFxcdFxcdHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsZSA9IGRlcmVmZXJlbmNlX2FzY2Uoa3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UpO1xcbjMzNTc6XFx0XFxuMzM1ODpcXHRcXHRcXHRjcnN0X3RhYmxlX2luaXQoKHZvaWQgKil0YWJsZSwgX0NSU1RFX0hPTEUodGFibGUtXFx1MDAzZWNyc3Rlc1swXS5oLnR0KS52YWwpO1xcbjMzNTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNzoxOC40OTA5NDAzNjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3OTEzNDU3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNX1MzOTBfVUNPTlRST0xfTUVNU0xPVCoqXG5cbk9rYXksIHNvIEknbSBzdGFyaW5nIGF0IHRoaXMgYEtWTV9TMzkwX1VDT05UUk9MX01FTVNMT1RgIGNvbnN0YW50IGFuZCBpbW1lZGlhdGVseSB0aGUgcXVlc3Rpb24gaGl0czogd2hhdCAqZXhhY3RseSogZG9lcyB0aGlzIHJlcHJlc2VudCB3aXRoaW4gdGhlIHMzOTAgS1ZNIGFyY2hpdGVjdHVyZT8gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBuYW1lIGFsb25lLCBhbmQgd2l0aCB0aGUgbnVhbmNlcyBvZiBzMzkwJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIHRoYXQgbWVhbnMgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcuIElzIHRoaXMgdGllZCB0byB0aGUgVUNPTlRST0wgbWVjaGFuaXNtIGZvciBndWVzdCBhY2Nlc3MgdG8gaG9zdCByZXNvdXJjZXM/IElmIHNvLCBpcyB0aGlzIGEgc3BlY2lmaWMgbWVtb3J5IHNsb3QgY29uZmlndXJhdGlvbiwgYSBoYW5kbGUsIG9yIHNvbWV0aGluZyBlbnRpcmVseSBkaWZmZXJlbnQgd2l0aGluIHRoZSBzMzkwIGNvbnRleHQ/IFRoaXMgc3VnZ2VzdHMgYSBkZWVwIGRpdmUgaW50byB0aGUgcmVsZXZhbnQgS1ZNIHNvdXJjZSBjb2RlLCBwYXJ0aWN1bGFybHkgdGhlIHMzOTAtc3BlY2lmaWMgcGFydHMuIEkgbmVlZCB0byBiZSBzdXJlIHRvIGNoZWNrIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyBpbiBga3ZtX3MzOTAuaGAgYW5kIHNlZSBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgY29udHJvbCBwYXRocy4gQW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvbiBVQ09OVFJPTCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgZ3Vlc3QgbWVtb3J5IHdvdWxkIGJlIGhlbHBmdWwgYXMgd2VsbC4gVW5kZXJzdGFuZGluZyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBhZGRyZXNzIHNwYWNlcywgbWVtb3J5IHJlZ2lvbnMsIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgaXMgY3J1Y2lhbC4gRXNzZW50aWFsbHksIEknbSBsb29raW5nIGZvciB0aGUgXCJ3aHlcIiBhbmQgXCJob3dcIiBvZiB0aGlzIHBhcnRpY3VsYXIgY29uc3RhbnQgdG8gZ3Jhc3AgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBLVk0gb24gczM5MC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI3OjI5LjI4MjI4ODAxMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1OTY4OTAzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEtWTV9TMzkwX1VDT05UUk9MX01FTVNMT1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmgtMjQtXFxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuaDoyNTojZGVmaW5lIEtWTV9TMzkwX1VDT05UUk9MX01FTVNMT1QgKEtWTV9VU0VSX01FTV9TTE9UUyArIDApXFxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuaC0yNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6Mjc6MzAuNzQxOTgwOTM4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMTU0NDc5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBNZW1vcnkgU2xvdCBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYEtWTV9TMzkwX1VDT05UUk9MX01FTVNMT1RgIGlzIGVzc2VudGlhbGx5IGFuIG9mZnNldCwgZXF1aXZhbGVudCB0byBgS1ZNX1VTRVJfTUVNX1NMT1RTICsgMGAuIEdvdCBpdC4gSW1wb3J0YW50bHksIGl0IGRvZXNuJ3QgaW52b2x2ZSBhbnkgYWRkcmVzcyBzcGFjZSBJRCBpbiB0aG9zZSB0b3AgMTYgYml0cyDigJMgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MsIEkgc3VwcG9zZS5cblxuU28sIGluIHRoZSBjYXNlIG9mIGBmYWtlX21lbXNsb3Quc2xvdGAsIHRoaXMgcmVzb2x2ZXMgZGlyZWN0bHkgdG8gYEtWTV9VU0VSX01FTV9TTE9UUyArIDBgIGFzIHdlbGwuIE5vdywgdGhlIGNydWNpYWwgcGFydDogdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGBtZW0tXHUwMDNlc2xvdCBcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gQmVjYXVzZSBgbWVtLVx1MDAzZXNsb3RgICppc24ndCogbGVzcyB0aGFuIGBLVk1fVVNFUl9NRU1fU0xPVFNgLCB0aGUgd2FybmluZyBwYXRoIGlzbid0IHRyaWdnZXJlZC4gVGhhdCdzIGdvb2QuIEl0IHN1Z2dlc3RzIHdlJ3JlIGhhbmRsaW5nIHRoaXMgY2FzZSBjb3JyZWN0bHksIG9yIGF0IGxlYXN0LCB0aGUgZXhpc3RpbmcgY2hlY2tzIGFyZW4ndCBmbGFnZ2luZyBpdCBhcyBhbiBlcnJvci5cblxuTm93LCBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMuIExldCdzIGRpZyBpbnRvIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIHJlbGV2YW50IGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uIG9mIG1lbW9yeSBzbG90IG1hbmFnZW1lbnQgdGhhdCBtYXkgYmUgdXNlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU5MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNzozOC44NTc0MzE1NzdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5OTcwOlxcdFxcdH1cXG45OTcxOlxcdFxcbjk5NzI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV9hcmNoX25yX21lbXNsb3RfYXNfaWRzKGt2bSk7IGkrKykge1xcbjk5NzM6XFx0XFx0XFx0c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgbTtcXG45OTc0OlxcdFxcbjk5NzU6XFx0XFx0XFx0bS5zbG90ID0gaWQgfCAoaSBcXHUwMDNjXFx1MDAzYyAxNik7XFxuOTk3NjpcXHRcXHRcXHRtLmZsYWdzID0gMDtcXG45OTc3OlxcdFxcdFxcdG0uZ3Vlc3RfcGh5c19hZGRyID0gZ3BhO1xcbjk5Nzg6XFx0XFx0XFx0bS51c2Vyc3BhY2VfYWRkciA9IGh2YTtcXG45OTc5OlxcdFxcdFxcdG0ubWVtb3J5X3NpemUgPSBzaXplO1xcbjk5ODA6XFx0XFx0XFx0ciA9IGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdChrdm0sIFxcdTAwMjZtKTtcXG45OTgxOlxcdFxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG45OTgyOlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSX1VTUihyKTtcXG45OTgzOlxcdFxcdH1cXG45OTg0OlxcdFxcbjk5ODU6XFx0XFx0aWYgKCFzaXplKVxcbjk5ODY6XFx0XFx0XFx0dm1fbXVubWFwKGh2YSwgb2xkX25wYWdlcyAqIFBBR0VfU0laRSk7XFxuOTk4NzpcXHRcXG45OTg4OlxcdFxcdHJldHVybiAodm9pZCBfX3VzZXIgKilodmE7XFxuOTk4OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI3OjM4Ljg1Nzc4OTU0OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzM3MzcyMjEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbXNsb3QgSUQgQ2hlY2sgaW4gYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCwgdGhlIGBpZGAgdmFyaWFibGUgcmVwcmVzZW50cyBhbiBpbnRlcm5hbCBtZW1zbG90IElELCBlc3NlbnRpYWxseSBzdGFydGluZyBhdCBgS1ZNX1VTRVJfTUVNX1NMT1RTYC4gVGhlIGNvcmUgb2YgdGhlIGxvZ2ljIGlzIHNldHRpbmcgYG0uc2xvdCA9IGlkIHwgKGkgXHUwMDNjXHUwMDNjIDE2KWAuIEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgdGhhdCBzaW5jZSBgaWRgIGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYEtWTV9VU0VSX01FTV9TTE9UU2AsIHRoZW4gYG0uc2xvdGAgd291bGQgKmFsd2F5cyogYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBLVk1fVVNFUl9NRU1fU0xPVFNgLiBUaGVyZWZvcmUsIHRoZSBjaGVjayBgbS5zbG90IFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFNgIHdvdWxkIGJlIHVuY29uZGl0aW9uYWxseSBmYWxzZSwgbWFraW5nIHRoZSBgV0FSTl9PTl9PTkNFYCBwb2ludGxlc3MuXG5cblRoZW4sIEkgc3RhcnRlZCB0byBjb25zaWRlciB0aGUgdHlwZXMuIElmIGBtLnNsb3RgIGlzIGEgYHUzMmAgYW5kIGBLVk1fVVNFUl9NRU1fU0xPVFNgIGlzIDMyNzY0LCB0aGVuIGNvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIGBpZGAgaXMgMzI3NjQgYW5kIGBpYCBpcyAxLiBXZSBnZXQgYG0uc2xvdGAgaXMgYDMyNzY0IHwgKDEgXHUwMDNjXHUwMDNjIDE2KWAsIHdoaWNoIGlzIDk4MzAwLiAgOTgzMDAgXHUwMDNjIDMyNzY0IGlzIGZhbHNlLCBhcyBleHBlY3RlZC4gU28gaXQgc3RpbGwgZG9lc24ndCBleHBsYWluIHRoZSB3YXJuaW5nLlxuXG5CdXQgdGhlbiwgdGhlIHBpdm90YWwgbW9tZW50OiB3aGF0IGlmIHRoZSBgaWRgICp3YXMqIGxlc3MgdGhhbiBgS1ZNX1VTRVJfTUVNX1NMT1RTYD8gSWYgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCB3YXMgY2FsbGVkIHdpdGggYGlkID0gMGAsIGZvciBleGFtcGxlLCB0aGVuIGBtLnNsb3QgPSAwIHwgKDEgXHUwMDNjXHUwMDNjIDE2KWAgYmVjb21lcyA2NTUzNi4gNjU1MzYgXHUwMDNjIDMyNzY0IGlzICpzdGlsbCogZmFsc2UuXG5cbkFoYSEgVGhhdCdzIHdoZW4gaXQgaGl0IG1lLiBUaGUgY2FzdCBgKHUxNiltZW0tXHUwMDNlc2xvdGAgaXMgdGhlIGtleS4gVGhlIGNhc3QgZXh0cmFjdHMgdGhlIGxvd2VyIDE2IGJpdHMsIHdoaWNoIGlzIHRoZSBgaWRgLiBXaGVuIHdlIGhhdmUgYGlkYCBhcyBgMGAsIGAwIFx1MDAzYyAzMjc2NGAgaXMgKnRydWUqLiBTbyB0aGlzIGBXQVJOX09OX09OQ0VgIHdpbGwgdHJpZ2dlciEgVGhlIGNhc3QgaXMgYWN0dWFsbHkgKmZpeGluZyogdGhlIHdhcm5pbmcgc28gaXQgdHJpZ2dlcnMgd2hlbiBpdCBzaG91bGQsIGluIHRoZSBjYXNlIG9mIGEgdXNlciBtZW1zbG90IElEIHdpdGggYSBub24temVybyBhZGRyZXNzIHNwYWNlISBUaGF0J3MgY2xldmVyLlxuXG5Ib3dldmVyLCB0aGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiAqc2hvdWxkKiB0aGF0IGJlIHBvc3NpYmxlPyBUaGUgY29kZSAqc2hvdWxkbid0KiBiZSBjYWxsZWQgd2l0aCBzdWNoIGFuIGBpZGAgdmFsdWUsIGFzIGl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIGludGVybmFsIG1lbXNsb3QgSURzLlxuXG5UbyBiZSBzdXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYC4gSSBhbHJlYWR5IGtub3cgdGhhdCBga3ZtX2FsbG9jX2FwaWNfYWNjZXNzX3BhZ2VgLCBga3ZtX2luaGliaXRfYXBpY19hY2Nlc3NfcGFnZWAsIGBpbml0X3Jtb2RlX2lkZW50aXR5X21hcGAsIGB2bXhfc2V0X3Rzc19hZGRyYCBhbmQgYGt2bV9hcmNoX2Rlc3Ryb3lfdm1gIGNhbGwgdGhpcywgdXNpbmcgdmFsdWVzIGxpa2UgYEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9UYCBhbmQgb3RoZXJzLiBCdXQgYXJlIHRoZXJlICphbnkqIG90aGVyIGNhbGxlcnM/IEknZCBiZXR0ZXIgYmUgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBjYXNlcyBJJ20gbWlzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIGEgdXNlZnVsIGFuYWx5c2lzIHNvIGZhci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyNzo1Ni4yMzE1MTQ1NzlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzI1NTgxMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX194ODZfc2V0X21lbW9yeV9yZWdpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9sYXBpYy5jPTI5MTA9aW50IGt2bV9hbGxvY19hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5MTktXFxuYXJjaC94ODYva3ZtL2xhcGljLmM6MjkyMDpcXHRodmEgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5MjEtXFx0XFx0XFx0XFx0ICAgICAgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSwgUEFHRV9TSVpFKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jPTI5MzE9dm9pZCBrdm1faW5oaWJpdF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDItXFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5hcGljX2FjY2Vzc19tZW1zbG90X2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzoyOTQzOlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgQVBJQ19BQ0NFU1NfUEFHRV9QUklWQVRFX01FTVNMT1QsIDAsIDApO1xcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDQtXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NDAyNz1zdGF0aWMgaW50IGluaXRfcm1vZGVfaWRlbnRpdHlfbWFwKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDA0Mi1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjQwNDM6XFx0dWFkZHIgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00MDQ0LVxcdFxcdFxcdFxcdFxcdElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTUyNzQ9aW50IHZteF9zZXRfdHNzX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTI4MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTI4MjpcXHRyZXQgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIFRTU19QUklWQVRFX01FTVNMT1QsIGFkZHIsXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MjgzLVxcdFxcdFxcdFxcdCAgICAgIFBBR0VfU0laRSAqIDMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTk4NDM9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxNi0vKipcXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxNzogKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbjogU2V0dXAgS1ZNIGludGVybmFsIG1lbW9yeSBzbG90XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MTgtICpcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTM3LSAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzo5OTM4OnZvaWQgX191c2VyICogX194ODZfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgaWQsIGdwYV90IGdwYSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkzOS1cXHRcXHRcXHRcXHQgICAgICB1MzIgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTg5LX1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk5MDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX194ODZfc2V0X21lbW9yeV9yZWdpb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy05OTkxLVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDE0PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjItXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjM6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjQtXFx0XFx0XFx0XFx0XFx0MCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI1OlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjYtXFx0XFx0XFx0XFx0XFx0MCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI3OlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgVFNTX1BSSVZBVEVfTUVNU0xPVCwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI4LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaD01MjY9aW50IGt2bV9nZXRfbnJfcGVuZGluZ19ubWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5oLTUyNy1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg6NTI4OnZvaWQgX191c2VyICpfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuaC01MjktXFx0XFx0XFx0XFx0ICAgICB1MzIgc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjI3OjU3LjY2NDA3Njg2NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIzMTk3NDM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBzZWVtcyBsaWtlIGEgZml4IGZvciBhIHRoZW9yZXRpY2FsIGlzc3VlLiBUaGVyZSBhcmUgbm8gb3RoZXIgY2FsbGVycyB0byBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YCB0aGF0IEkndmUgZm91bmQgb3RoZXIgdGhhbiBgX194ODZfc2V0X21lbW9yeV9yZWdpb25gIGFuZCB0aGUgYHMzOTBgIGNvZGUuIFNpbmNlIHRoZXJlIGFyZSBubyBvdGhlciBjYWxsZXJzLCB0aGUgYGlkYCBhcmd1bWVudCB3aWxsICphbHdheXMqIGJlIGFuIGludGVybmFsIG1lbXNsb3QgSUQsIHdoaWNoLCBieSBkZWZpbml0aW9uLCBpcyBnb2luZyB0byBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYEtWTV9VU0VSX01FTV9TTE9UU2AuIFRoZXJlZm9yZSwgYCh1MTYpbWVtLVx1MDAzZXNsb3RgIHdpbGwgKmFsd2F5cyogYmUgYFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTYC4gVGhpcyBtZWFucyB0aGF0IHRoZSBvcmlnaW5hbCBgV0FSTl9PTl9PTkNFYCBjb25kaXRpb24gd291bGQgbmV2ZXIgdHJpZ2dlciwgYm90aCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC5cblxuSSBhbHJlYWR5IGNvbmZpcm1lZCB0aGUgYHMzOTBgIGNvZGUgdXNlcyBgS1ZNX1VTRVJfTUVNX1NMT1RTICsgMGAsIG1lYW5pbmcgdGhpcyBpcyBhbHNvIGBcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UU2AuXG5cblNvLCB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgYFdBUk5fT05fT05DRWAgdGhhdCB3YXMgaW50ZW5kZWQgdG8gY2hlY2sgaWYgc29tZW9uZSBhY2NpZGVudGFsbHkgcGFzc2VkIGEgdXNlciBtZW1zbG90IElEIHRvIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGEgdXNlciBtZW1zbG90IElEIHdpdGggYSBub24temVybyBhZGRyZXNzIHNwYWNlIGNvdWxkIHJlc3VsdCBpbiBgbWVtLVx1MDAzZXNsb3RgIGJlaW5nIGBcdTAwM2U9IDY1NTM2YCwgd2hpY2ggaXMgKmdyZWF0ZXIqIHRoYW4gYEtWTV9VU0VSX01FTV9TTE9UU2AsIHNvIHRoZSBgV0FSTl9PTl9PTkNFYCB3b3VsZCBpbmNvcnJlY3RseSBmYWlsIHRvIHRyaWdnZXIgaW4gdGhvc2UgY2FzZXMuIFRoZSBhZGRlZCBgKHUxNilgIGNhc3QgY29ycmVjdGx5IGV4dHJhY3RzIHRoZSBiYXNlIHNsb3QgSUQgYW5kIGNoZWNrcyBpdCBhZ2FpbnN0IGBLVk1fVVNFUl9NRU1fU0xPVFNgLiBIb3dldmVyLCBnaXZlbiB0aGF0IHRoZXJlIGFyZSBubyBjdXJyZW50IGNhbGxlcnMgdGhhdCBhY3R1YWxseSBwYXNzIGEgdXNlciBtZW1zbG90IElELCB0aGlzIGNoZWNrIG5ldmVyIHRyaWdnZXJzIGFueXdheS4gSXQgaXMganVzdCBhIGZpeCBmb3IgYSBzYW5pdHkgY2hlY2suXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGRvZXMgdGhpcyBoYXZlIGFueSBmdW5jdGlvbmFsIGltcGFjdD8gTXkgYXNzZXNzbWVudCBpcyBuby4gSXQncyBqdXN0IG1vZGlmeWluZyBhIGBXQVJOX09OX09OQ0VgIHRoYXQgaXMgbmV2ZXIgaGl0IGluIHByYWN0aWNlIGJlY2F1c2UgYWxsIGN1cnJlbnQgY2FsbGVycyBwYXNzIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzLlxuXG5Db3VsZCBhIGZ1enplciBsaWtlIHN5emthbGxlciBwb3NzaWJseSB0cmlnZ2VyIHRoaXM/IEkgZG9uJ3QgdGhpbmsgc28uIGBrdm1fc2V0X2ludGVybmFsX21lbXNsb3RgIGlzIGFuIGludGVybmFsIEFQSS4gVXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIG1lbW9yeSByZWdpb25zIHRocm91Z2ggdGhlIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjJgIGlvY3RsLCB3aGljaCBjYWxscyBga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uYC4gVGhhdCBmdW5jdGlvbiBoYXMgaXRzIG93biBzYWZldHkgY2hlY2s6XG5cbmBgYGNcbiAgICBpZiAoKHUxNiltZW0tXHUwMDNlc2xvdCBcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUylcbiAgICAgICAgICAgIHJldHVybiAtRUlOVkFMO1xuYGBgXG5cblRoaXMgKmNvcnJlY3RseSogdXNlcyB0aGUgYCh1MTYpbWVtLVx1MDAzZXNsb3RgIHRvIHByZXZlbnQgdXNlcnNwYWNlIGZyb20gYXR0ZW1wdGluZyB0byBzZXQgaW50ZXJuYWwgbWVtc2xvdHMuIFRodXMsIHVzZXJzcGFjZSBjYW4ndCBldmVuIGdldCB0byBga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90YC4gSXQgaXMgb25seSByZWFjaGFibGUgdmlhIGludGVybmFsIEtWTSBjb2RlLCB3aGljaCwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgYWx3YXlzIHBhc3NlcyB2YWxpZCBtZW1zbG90IElEcy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGhhcyB6ZXJvIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIGFueSByZWFjaGFibGUgY29kZSBwYXRocy4gSXQganVzdCBmaXhlcyBhIGRlYWQgc2FuaXR5IGNoZWNrLiBJJ2xsIGRvdWJsZSBjaGVjayBmb3IgYW55IGNhbGxlcnMgb2YgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgdGhhdCBJIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6Mjg6MDkuODk2MDUzMjE5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyMCwiRXJyb3IiOiJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXFxuWW91IGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0IG9mIHRoaXMgZXhhY3QgdG9vbCBjYWxsIGluIHlvdXIgY29udmVyc2F0aW9uIGhpc3RvcnkuXFxuRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsXFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLlwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjoyODowOS44OTYwOTg0MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY2NDE5ODQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIEkgZHVnIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAuIEkgYWxyZWFkeSByYW4gYSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbGVycywgYW5kIGl0J3MgY2xlYXIgdGhlcmUgYXJlIG9ubHkgdHdvIOKAkyB3aGljaCBuYXJyb3dzIHRoZSBzY29wZSBzaWduaWZpY2FudGx5LiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGp1c3QgdG91Y2hpbmcgYSBgV0FSTl9PTl9PTkNFYCBjb25kaXRpb24uIFRoYXQncyBhIHNhbml0eSBjaGVjaywgbm90IGEgY29yZSBmdW5jdGlvbiwgc28gbXkgaW5pdGlhbCBpbnN0aW5jdCBzYXlzIHRoaXMgaXMgbG93LWltcGFjdC5cblxuRGlnZ2luZyBkZWVwZXIsIHRoZSBjb25kaXRpb24gaW4gcXVlc3Rpb24gaXMgbmV2ZXIgYWN0dWFsbHkgdHJpZ2dlcmVkLiBUaGUgY2FsbGluZyBmdW5jdGlvbnMgYWx3YXlzIHBhc3MgdmFsaWQgYGludGVybmFsIG1lbXNsb3RgIElEcywgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEV2ZW4gaWYgdGhlIGNvbmRpdGlvbiAqd2VyZSogbWV0LCBpdCB3b3VsZCBvbmx5IGxvZyBhIHdhcm5pbmcgYW5kIHJldHVybiBgLUVJTlZBTGAuIEZ1bmN0aW9uYWxseSwgdGhlIGNvZGUgZmxvdyByZW1haW5zIHVuY2hhbmdlZC4gVGhlcmVmb3JlLCBpdCdzIHNhZmUgdG8gc2F5IHRoZXJlIGlzIG5vIHVzZXIgdmlzaWJsZSBmdW5jdGlvbmFsIGltcGFjdC5cblxuTGV0J3Mgc3VtbWFyaXplIHRoZSBsb2dpYyBiZWhpbmQgdGhlIGNoYW5nZSBmb3IgZ29vZCBtZWFzdXJlLiBUaGUgcGF0Y2ggZXNzZW50aWFsbHkgYWRkcyBhIGNhc3QgdG8gaGFuZGxlIG5vbi16ZXJvIGFkZHJlc3Mgc3BhY2UgSURzIGluIHRoZSB1cHBlciAxNiBiaXRzIG9mIHRoZSBgbWVtLVx1MDAzZXNsb3RgIGZpZWxkLCBmaXhpbmcgdGhlIGNoZWNrIGZvciBzbG90cyBncmVhdGVyIHRoYW4gYEtWTV9VU0VSX01FTV9TTE9UU2AuIEhvd2V2ZXIsIGdpdmVuIHRoYXQgYGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdGAgaXMgYW4gaW50ZXJuYWwgQVBJLCBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSAoaXQgdXNlcyBga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uYCBmb3IgZXh0ZXJuYWwgY2FsbHMsIHdoaWNoIGhhcyBpdHMgb3duIHZlcmlmaWNhdGlvbikuIFRoZSBmdW5jdGlvbnMgYF9feDg2X3NldF9tZW1vcnlfcmVnaW9uYCBhbmQgYHMzOTBgJ3MgYGt2bV9hcmNoX2luaXRfdm1gIGFyZSB0aGUgb25seSBjYWxsZXJzLCBhbmQgdGhleSdyZSBtZXRpY3Vsb3VzbHkgcGFzc2luZyB2YWxpZCBpbnRlcm5hbCBtZW1zbG90IElEcy4gU28sIHRoaXMgYm9pbHMgZG93biB0byBmaXhpbmcgYSB0aGVvcmV0aWNhbCBidWcgdGhhdCBpcyBuZXZlciBoaXQgaW4gcHJhY3RpY2UuIE15IGNvbmNsdXNpb24/IFRoaXMgb25lIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg3MywiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6Mjg6MjEuNTYwMjk5MDcyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYSBXQVJOX09OX09OQ0UgY2hlY2sgaW4ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IHRvIGNhc3QgbWVtLVxcdTAwM2VzbG90IHRvICh1MTYpIGJlZm9yZSBjb21wYXJpbmcgaXQgdG8gS1ZNX1VTRVJfTUVNX1NMT1RTLiBUaGlzIGZpeGVzIHRoZSBzYW5pdHkgY2hlY2sgdG8gY29ycmVjdGx5IGhhbmRsZSBtZW1vcnkgc2xvdHMgd2l0aCBub24temVybyBhZGRyZXNzIHNwYWNlIElEcyAoZW5jb2RlZCBpbiB0aGUgdXBwZXIgMTYgYml0cykuIEhvd2V2ZXIsIGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCBpcyBhbiBpbnRlcm5hbCBLVk0gQVBJIHRoYXQgaXMgb25seSBjYWxsZWQgYnkgX194ODZfc2V0X21lbW9yeV9yZWdpb24gYW5kIHMzOTAncyBrdm1fYXJjaF9pbml0X3ZtLCBib3RoIG9mIHdoaWNoIGFsd2F5cyBwYXNzIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzIChcXHUwMDNlPSBLVk1fVVNFUl9NRU1fU0xPVFMpLiBVc2Vyc3BhY2UgY2Fubm90IHJlYWNoIHRoaXMgZnVuY3Rpb24sIGFzIGl0IHVzZXMga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uIHdoaWNoIGhhcyBpdHMgb3duIGNvcnJlY3QgY2hlY2suIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBvbmx5IGZpeGVzIGEgdGhlb3JldGljYWwgYnVnIGluIGEgc2FuaXR5IGNoZWNrIHRoYXQgaXMgbmV2ZXIgdHJpZ2dlcmVkIGluIHByYWN0aWNlLCBhbmQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYSBXQVJOX09OX09OQ0UgY2hlY2sgaW4ga3ZtX3NldF9pbnRlcm5hbF9tZW1zbG90IHRvIGNhc3QgbWVtLVxcdTAwM2VzbG90IHRvICh1MTYpIGJlZm9yZSBjb21wYXJpbmcgaXQgdG8gS1ZNX1VTRVJfTUVNX1NMT1RTLiBUaGlzIGZpeGVzIHRoZSBzYW5pdHkgY2hlY2sgdG8gY29ycmVjdGx5IGhhbmRsZSBtZW1vcnkgc2xvdHMgd2l0aCBub24temVybyBhZGRyZXNzIHNwYWNlIElEcyAoZW5jb2RlZCBpbiB0aGUgdXBwZXIgMTYgYml0cykuIEhvd2V2ZXIsIGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCBpcyBhbiBpbnRlcm5hbCBLVk0gQVBJIHRoYXQgaXMgb25seSBjYWxsZWQgYnkgX194ODZfc2V0X21lbW9yeV9yZWdpb24gYW5kIHMzOTAncyBrdm1fYXJjaF9pbml0X3ZtLCBib3RoIG9mIHdoaWNoIGFsd2F5cyBwYXNzIHZhbGlkIGludGVybmFsIG1lbXNsb3QgSURzIChcXHUwMDNlPSBLVk1fVVNFUl9NRU1fU0xPVFMpLiBVc2Vyc3BhY2UgY2Fubm90IHJlYWNoIHRoaXMgZnVuY3Rpb24sIGFzIGl0IHVzZXMga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uIHdoaWNoIGhhcyBpdHMgb3duIGNvcnJlY3QgY2hlY2suIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBvbmx5IGZpeGVzIGEgdGhlb3JldGljYWwgYnVnIGluIGEgc2FuaXR5IGNoZWNrIHRoYXQgaXMgbmV2ZXIgdHJpZ2dlcmVkIGluIHByYWN0aWNlLCBhbmQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6Mjg6MjEuNTYwMzIyMDcyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4p5h4[1] Phase: Running StartedAt: 2026-08-27 12:28:32 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4p5h4[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-27 12:28:32 +0000 UTC FinishedAt: 2026-08-27 12:28:36 +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,}