Name: series-workflowzhq26 Phase: Failed StartedAt: 2026-08-11 09:20:54 +0000 UTC FinishedAt: 2026-08-11 09:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhq26[0] Phase: Succeeded StartedAt: 2026-08-11 09:20:54 +0000 UTC FinishedAt: 2026-08-11 09:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhq26[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 09:20:54 +0000 UTC FinishedAt: 2026-08-11 09:24:17 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHV2X2ZpbmRfc2VjcmV0YCBpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBgcGtleV91dmAgY3J5cHRvIGRyaXZlci4gVGhpcyBkcml2ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIFVsdHJhdmlzb3IgQ2FsbCAoVVZDKSBmdW5jdGlvbmFsaXR5IGFyZSBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhcyBhbiBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIChwcm90ZWN0ZWQgdmlydHVhbGl6YXRpb24pIGd1ZXN0LiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIChJQk0gejE1JiM0Mzsgd2l0aCBVbHRyYXZpc29yKSBhbmQgYSBzcGVjaWFsbHkgY3JhZnRlZCBlbmNyeXB0ZWQgYm9vdCBpbWFnZSAoZ2VucHJvdGltZyksIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgVENHIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0Mzg0OTZlZjFjZmJiMjExYjI3NGE3ZmMwZjhjOWFiODE0NGIxMjgwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6MjI6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC91di5jIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXG5pbmRleCBhMjg0Zjk4ZDk3MTY4Li5kOTcwYjE1ZWYxMjZkIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbkBAIC03ODEsMTEgJiM0Mzs3ODEsMTQgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbiBcdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuIFx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcbiB7XG4tXHR1MTYgc3RhcnRfaWR4ID0gMDtcbiYjNDM7XHR1MTYgc3RhcnRfaWR4O1xuIFx0dTE2IGxpc3RfcmM7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcbiYjNDM7XG4gXHRkbyB7XG4mIzQzO1x0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbiBcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG4gXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4gXHRcdFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXG5AQCAtNzk2LDcgJiM0Mzs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuIFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFx1MDAyNlx1MDAyNiBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4KTtcbiBcbiBcdHJldHVybiAtRU5PRU5UO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdXZfZmluZF9zZWNyZXRgIGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhlIGBwa2V5X3V2YCBjcnlwdG8gZHJpdmVyLiBUaGlzIGRyaXZlciBhbmQgdGhlIHVuZGVybHlpbmcgVWx0cmF2aXNvciBDYWxsIChVVkMpIGZ1bmN0aW9uYWxpdHkgYXJlIG9ubHkgYWN0aXZlIHdoZW4gdGhlIHN5c3RlbSBpcyBydW5uaW5nIGFzIGFuIHMzOTB4IFNlY3VyZSBFeGVjdXRpb24gKHByb3RlY3RlZCB2aXJ0dWFsaXphdGlvbikgZ3Vlc3QuIFRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgKElCTSB6MTUmIzQzOyB3aXRoIFVsdHJhdmlzb3IpIGFuZCBhIHNwZWNpYWxseSBjcmFmdGVkIGVuY3J5cHRlZCBib290IGltYWdlIChnZW5wcm90aW1nKSwgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBUQ0cgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQzODQ5NmVmMWNmYmIyMTFiMjc0YTdmYzBmOGM5YWI4MTQ0YjEyODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwOToyMjoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuYwppbmRleCBhMjg0Zjk4ZDk3MTY4Li5kOTcwYjE1ZWYxMjZkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC91di5jCkBAIC03ODEsMTEgJiM0Mzs3ODEsMTQgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSwKIAkJICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LAogCQkgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldCkKIHsKLQl1MTYgc3RhcnRfaWR4ID0gMDsKJiM0MzsJdTE2IHN0YXJ0X2lkeDsKIAl1MTYgbGlzdF9yYzsKIAlpbnQgcmV0OwogCiYjNDM7CWxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCA9IDA7CiYjNDM7CiAJZG8gewomIzQzOwkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCQl1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCAmYW1wO2xpc3RfcmMsIE5VTEwpOwogCQlpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgJmFtcDsmYW1wOyBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHsKIAkJCWlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKQpAQCAtNzk2LDcgJiM0Mzs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogCQlyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJcmV0dXJuIHJldDsKLQkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCX0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSAmYW1wOyZhbXA7IHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCk7CiAKIAlyZXR1cm4gLUVOT0VOVDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCB0byBgdXZfZmluZF9zZWNyZXRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGV5JiMzOTt2ZSBtYWRlIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQsIGNoYW5nZSB0byB0aGUgbG9vcCYjMzk7cyBsb2dpYy4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBgc3RhcnRfaWR4YCB3YXMgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgdGhlbiB1cGRhdGVkICphdCB0aGUgZW5kKiBvZiB0aGUgbG9vcCB3aXRoIHRoZSB2YWx1ZSBvZiBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YC4gTm93LCBpdCBpbml0aWFsaXplcyBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCBiZWZvcmUgdGhlIGxvb3AsIGFuZCBpbnNpZGUgdGhlIGxvb3AsIHRoZXkgYXJlIHNldHRpbmcgYHN0YXJ0X2lkeCA9IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAsIHRoZW4gdXNpbmcgdGhhdCB2YXJpYWJsZSBpbiB0aGUgbG9vcCBjb25kaXRpb24uCgpIb2xkIG9uLi4uIHRoYXQgbG9vcCBjb25kaXRpb24uIEl0JiMzOTtzIGB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBICZhbXA7JmFtcDsgc3RhcnRfaWR4ICZsdDsgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4KTtgLiBJZiBgc3RhcnRfaWR4YCB3YXMgdXBkYXRlZCAqYWZ0ZXIqIHRoZSBsb29wIGJvZHksIHRoZW4gdGhlIGNvbXBhcmlzb24gYHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgd291bGQgZXNzZW50aWFsbHkgYWx3YXlzIGJlIGZhbHNlIGJlY2F1c2UgYHN0YXJ0X2lkeGAgYW5kIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgIGFyZSBhbHdheXMgYmVpbmcgYXNzaWduZWQgdGhlIHNhbWUgdmFsdWUgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCwgcmlnaHQ/CgpCdXQgbm93LCBgc3RhcnRfaWR4YCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgdXZfbGlzdF9zZWNyZXRzYCwgYW5kIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgIGlzIHVwZGF0ZWQgKmR1cmluZyogdGhlIGNhbGwgdG8gYHV2X2xpc3Rfc2VjcmV0c2AuIFRodXMsIHRoZSBsb29wIGNvbmRpdGlvbiBjaGVja3MgaWYgdGhlIHNlYXJjaCBpbmRleCBoYXMgYWR2YW5jZWQuIFRoYXQgbWFrZXMgbXVjaCBtb3JlIHNlbnNlLiBJdCBjaGVja3MgaWYgdGhlIHNlYXJjaCBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIG5ldyB1cHBlciBsaW1pdC4KCkFscmlnaHQsIGxldCYjMzk7cyBjb25maXJtIGlmIHRoaXMgaXMgczM5MCBzcGVjaWZpYy4gWWVwLCBpdCYjMzk7cyByaWdodCB0aGVyZSBpbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYC4gU28sIGlzIHRoaXMgcmVhY2hhYmxlIGluIFFFTVU/IFMzOTAgaXMgc3VwcG9ydGVkIGJ5IHN5emthbGxlci4gSSBzaG91bGQgY2hlY2sgaG93IHRvIGZpbmQgb3V0IGlmIGB1dl9maW5kX3NlY3JldGAgaXMgcmVhY2hhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2ZpbmRfc2VjcmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC91di5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc0LSAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzgwOmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBDYWxsIFNpdGVzIG9mIGB1dl9maW5kX3NlY3JldGAqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGludm9sdmluZyBgdXZfZmluZF9zZWNyZXRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEtub3dpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCByZXZlYWwgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0IG9wZXJhdGVzLCB0aGUgZGF0YSBpdCYjMzk7cyBsaWtlbHkgcHJvY2Vzc2luZywgYW5kIHBvdGVudGlhbGx5IHRoZSBzZWN1cml0eSBjb25jZXJucyBpdCYjMzk7cyBhZGRyZXNzaW5nIChvciBjcmVhdGluZyEpLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCBtYXAgb3V0IHRob3NlIGNvbm5lY3Rpb25zLiBMZXQmIzM5O3MgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjEzPXN0YXRpYyBpbmxpbmUgaW50IHV2X3JlbW92ZV9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxNy1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxODppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTc1Nz1zdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzczOiAqIHV2X2ZpbmRfc2VjcmV0KCkgLSBzZWFyY2ggc2VjcmV0IG1ldGFkYXRhIGZvciBhIGdpdmVuIHNlY3JldCBpZC5cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzQtICogQHNlY3JldF9pZDogc2VhcmNoIHBhdHRlcm4uXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3OS0gKi9cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODA6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA1LX1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMD1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7czM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcJiMzNDspO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMzogKiBPbmUgcHJlLWFsbG9jYXRlZCB1dl9zZWNyZXRfbGlzdCBmb3IgdXNlIHdpdGggdXZfZmluZF9zZWNyZXQoKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQtICovXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9OTM9c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cdG1lbXNldCh1dl9saXN0LCAwLCBzaXplb2YoKnV2X2xpc3QpKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwMDpcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTAxLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMDUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIFMzOTAgQ3J5cHRvIEtleSBEcml2ZXIqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGllY2Ugb2YgY29kZSBpbiBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNgLiBUaGF0JiMzOTtzIHdoZXJlIGl0JiMzOTtzIGFsbCBoYXBwZW5pbmcsIGh1aD8gSSBzaG91bGQgZGl2ZSBkaXJlY3RseSBpbnRvIHRoYXQgc3BlY2lmaWMgZmlsZSB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24uIFNlZW1zIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgUzM5MCBhcmNoaXRlY3R1cmUgYW5kIGl0cyBjcnlwdG9ncmFwaGljIGtleSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVVYgZnJhbWV3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhleSYjMzk7dmUgZ290IHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgaW1wbGVtZW50YXRpb24gZGV0YWlscywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgdGhleSYjMzk7dmUgZW1wbG95ZWQuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGhhbmRzLW9uIGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3NlY3JldF9tZXRhZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTgzPXN0YXRpYyBib29sIGlzX3V2X2tleXR5cGUoZW51bSBwa2V5X2tleV90eXBlIGtleXR5cGUpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTItXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzo5MzpzdGF0aWMgaW50IGdldF9zZWNyZXRfbWV0YWRhdGEoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTQtXHRcdFx0ICAgICAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTEwNj1zdGF0aWMgaW50IHJldHJpZXZlX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTExLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTEyOlx0cmMgPSBnZXRfc2VjcmV0X21ldGFkYXRhKHNlY3JldF9pZCwgXHUwMDI2c2VjcmV0X21ldGFfZGF0YSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMTMtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjMzPXN0YXRpYyBpbnQgdXZfdmVyaWZ5a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQ3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjQ4Olx0cmMgPSBnZXRfc2VjcmV0X21ldGFkYXRhKHQtXHUwMDNlc2VjcmV0X2lkLCBcdTAwMjZzZWNyZXRfbWV0YV9kYXRhKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0OS1cdGlmIChyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODU3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm90ZWN0ZWQgS2V5IFVWIEhhbmRsZXIqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHBrZXlfdXYuY2AgZmlsZS4gUmlnaHQsIGEgJiMzNDtwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXImIzM0Oy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IGJlZ3MgdGhlIHF1ZXN0aW9uOiBob3cgaXMgdGhpcyBiZWluZyB0cmlnZ2VyZWQ/IElzIGl0IGEgY29yZSBjb21wb25lbnQgb3IgaXMgaXQgcmVhY2hhYmxlIHZpYSBtdWx0aXBsZSBwYXRocz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVudHJ5IHBvaW50cy4KCkkmIzM5O2xsIGNoZWNrIHRoZSByZWxhdGVkIGNvZGUgdG8gc2VlIHdoYXQgY2x1ZXMgSSBjYW4gZ2xlYW4uIExldCBtZSBsb29rIGF0IGJvdGggYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYCBhbmQgYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuY2AuIEhvcGVmdWxseSwgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgZmlsZXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBmbG93LiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl92ZXJpZnlrZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0xOTA9c3RhdGljIGludCB1dl9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICpfYXBxbnMgX19hbHdheXNfdW51c2VkLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIzMi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzMzpzdGF0aWMgaW50IHV2X3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjM0LVx0XHRcdHUxNiAqX2NhcmQgX19hbHdheXNfdW51c2VkLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTI3Mj1zdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciB1dl9oYW5kbGVyID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3Ny1cdC5rZXlfdG9fcHJvdGtleVx0XHQgPSB1dl9rZXkycHJvdGtleSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI3ODpcdC52ZXJpZnlfa2V5XHRcdCA9IHV2X3ZlcmlmeWtleSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3OS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzk1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyBhIE5ldyBgcGtleV9oYW5kbGVyYCBSZWdpc3RyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYHBrZXlfaGFuZGxlcmAgcmVnaXN0cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGVyZSB0aGlzIGlzIGFjdHVhbGx5ICpoYW5kbGVkKi4mIzM0OyBHaXZlbiB0aGUgY29udGV4dCwgbXkgbWVudGFsIG1hcCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUga2VybmVsJiMzOTtzIGNyeXB0byBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbmV3IGtleSB0eXBlLgoKTXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbnMgYW5kIEFQSSBpbnRlcmFjdGlvbnMgcmVsYXRlZCB0byBrZXkgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gVGhpcyBzb3VuZHMgbGlrZSBpdCBjb3VsZCBiZSBhIGhhcmR3YXJlLWFjY2VsZXJhdGVkIGNyeXB0byBvcGVyYXRpb24gb2Ygc29tZSBraW5kLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLCBhdCB0aGUgaGVhcnQgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbXMsIGRhdGEgc3RydWN0dXJlcyBkZWZpbmluZyB0aGUgaGFuZGxlciBpdHNlbGYsIGFuZCBmdW5jdGlvbiBjYWxscyB0aGF0IGltcGxlbWVudCB0aGUga2V5IG9wZXJhdGlvbnMuIEkgZXhwZWN0IGEgZmV3IGxldmVscyBvZiBpbmRpcmVjdGlvbiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwa2V5X2hhbmRsZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MjU9c3RhdGljIGludCBrZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zMi1cdC8qIHRyeSB0aGUgZGlyZWN0IHdheSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjMzOlx0cmMgPSBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoYXBxbnMsIG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM0LVx0XHRcdFx0XHQga2V5LCBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM5LVx0aWYgKHJjID09IC1FTk9ERVYpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0MDpcdFx0cmMgPSBwa2V5X2hhbmRsZXJfc2xvd3BhdGhfa2V5X3RvX3Byb3RrZXkoYXBxbnMsIG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxLVx0XHRcdFx0XHRcdFx0ICBrZXksIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU9aW50IHBrZXlfa2V5MnByb3RrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjItXHRpZiAocmMgPT0gLUVOT0RFVikge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjYzOlx0XHRwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjQtXHRcdHJjID0ga2V5MnByb3RrZXkoTlVMTCwgMCwga2V5LCBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTkyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9nZW5zZWNrKHN0cnVjdCBwa2V5X2dlbnNlY2sgX191c2VyICp1Z3MpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEwNC1cdGtleWJ1ZmxlbiA9IHNpemVvZihrZ3Muc2Vja2V5LnNlY2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTA1Olx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShcdTAwMjZhcHFuLCAxLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEwNi1cdFx0XHRcdCAga2dzLmtleXR5cGUsIFBLRVlfVFlQRV9DQ0FfREFUQSwgMCwgMCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTE2PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9jbHIyc2VjayhzdHJ1Y3QgcGtleV9jbHIyc2VjayBfX3VzZXIgKnVjcylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTI4LVx0a2V5YnVmbGVuID0gc2l6ZW9mKGtjcy5zZWNrZXkuc2Vja2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoxMjk6XHRyYyA9IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KFx1MDAyNmFwcW4sIDEsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTMwLVx0XHRcdFx0ICAgICBrY3Mua2V5dHlwZSwgUEtFWV9UWVBFX0NDQV9EQVRBLCAwLCAwLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0xNDI9c3RhdGljIGludCBwa2V5X2lvY3RsX3NlYzJwcm90ayhzdHJ1Y3QgcGtleV9zZWMycHJvdGsgX191c2VyICp1c3ApXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTE1My1cdGtzcC5wcm90a2V5LmxlbiA9IHNpemVvZihrc3AucHJvdGtleS5wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoxNTQ6XHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShcdTAwMjZhcHFuLCAxLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTE1NS1cdFx0XHRcdFx0IGtzcC5zZWNrZXkuc2Vja2V5LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yMTU9c3RhdGljIGludCBwa2V5X2lvY3RsX2ZpbmRjYXJkKHN0cnVjdCBwa2V5X2ZpbmRjYXJkIF9fdXNlciAqdWZjKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yMjktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjMwOlx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShrZmMuc2Vja2V5LnNlY2tleSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yMzEtXHRcdFx0XHRcdHNpemVvZihrZmMuc2Vja2V5LnNlY2tleSksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNC1cdGlmIChyYyA9PSAtRU5PREVWKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjIzNTpcdFx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShrZmMuc2Vja2V5LnNlY2tleSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yMzYtXHRcdFx0XHRcdFx0c2l6ZW9mKGtmYy5zZWNrZXkuc2Vja2V5KSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MjUzPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9za2V5MnBrZXkoc3RydWN0IHBrZXlfc2tleTJwa2V5IF9fdXNlciAqdXNwKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yNjEtXHRrc3AucHJvdGtleS5sZW4gPSBzaXplb2Yoa3NwLnByb3RrZXkucHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjYyOlx0cmMgPSBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoTlVMTCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yNjMtXHRcdFx0XHRcdCBrc3Auc2Vja2V5LnNlY2tleSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9Mjc2PXN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlrZXkoc3RydWN0IHBrZXlfdmVyaWZ5a2V5IF9fdXNlciAqdXZrKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yODYtXHRrdmsuZG9tYWluID0gMHhGRkZGO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjI4NzpcdHJjID0gcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoa3ZrLnNlY2tleS5zZWNrZXksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjg4LVx0XHRcdFx0ICAgICBzaXplb2Yoa3ZrLnNlY2tleS5zZWNrZXkpLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0zMDU9c3RhdGljIGludCBwa2V5X2lvY3RsX2dlbnByb3RrKHN0cnVjdCBwa2V5X2dlbnByb3RrIF9fdXNlciAqdWdwKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zMTMtXHRrZ3AucHJvdGtleS5sZW4gPSBzaXplb2Yoa2dwLnByb3RrZXkucHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MzE0Olx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShOVUxMLCAwLCBrZ3Aua2V5dHlwZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zMTUtXHRcdFx0XHQgIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0zMjY9c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeXByb3RrKHN0cnVjdCBwa2V5X3ZlcmlmeXByb3RrIF9fdXNlciAqdXZwKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zNTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MzU2Olx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSh0bXBidWYsIHNpemVvZigqdCksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzU3LVx0XHRcdFx0ICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MzkwPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9nZW5zZWNrMihzdHJ1Y3QgcGtleV9nZW5zZWNrMiBfX3VzZXIgKnVncylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDE0LVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjQxNTpcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoYXBxbnMsIGtncy5hcHFuX2VudHJpZXMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDE2LVx0XHRcdFx0ICB1LCBrZ3MudHlwZSwga2dzLnNpemUsIGtncy5rZXlnZW5mbGFncyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NDQyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9jbHIyc2VjazIoc3RydWN0IHBrZXlfY2xyMnNlY2syIF9fdXNlciAqdWNzKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00NzAtXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NDcxOlx0cmMgPSBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShhcHFucywga2NzLmFwcW5fZW50cmllcyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00NzItXHRcdFx0XHQgICAgIHUsIGtjcy50eXBlLCBrY3Muc2l6ZSwga2NzLmtleWdlbmZsYWdzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz01MDM9c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleTIoc3RydWN0IHBrZXlfdmVyaWZ5a2V5MiBfX3VzZXIgKnV2aylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTE0LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjUxNTpcdHJjID0gcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoa2tleSwga3ZrLmtleWxlbixcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01MTYtXHRcdFx0XHQgICAgIFx1MDAyNmt2ay5jYXJkbnIsIFx1MDAyNmt2ay5kb21haW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTU1OD1zdGF0aWMgaW50IHBrZXlfaW9jdGxfYXBxbnM0ayhzdHJ1Y3QgcGtleV9hcHFuczRrZXkgX191c2VyICp1YWspXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTU3OC1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1Nzk6XHRyYyA9IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KGtrZXksIGthay5rZXlsZW4sIGthay5mbGFncyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01ODAtXHRcdFx0XHRcdGFwcW5zLCBcdTAwMjZucl9hcHFucywgMCk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTYwOD1zdGF0aWMgaW50IHBrZXlfaW9jdGxfYXBxbnM0a3Qoc3RydWN0IHBrZXlfYXBxbnM0a2V5dHlwZSBfX3VzZXIgKnVhdClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjIyLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjYyMzpcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGthdC50eXBlLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTYyNC1cdFx0XHRcdFx0ICAgIGthdC5jdXJfbWt2cCwga2F0LmFsdF9ta3ZwLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM9MzQ9c3RhdGljIExJU1RfSEVBRChoYW5kbGVyX2xpc3QpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzY6aW50IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNy17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM4Olx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzktXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy03OC19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjc5OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3JlZ2lzdGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtODAtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjgxOmludCBwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy04Mi17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy05My19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjk0OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3VucmVnaXN0ZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy05NS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTk5LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMDA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMDEte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMDI6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMDMtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTctfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMTg6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTE5LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMjA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoZW51bSBwa2V5X2tleV90eXBlIGt0KVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMjEte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMjI6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMjMtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMzctfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMzg6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTEzOS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTQwOnZvaWQgcGtleV9oYW5kbGVyX3B1dChjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNDEte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNDI6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNDMtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTUtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNTY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfcHV0KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNTg6aW50IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTktXHRcdFx0XHRjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTYyLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTYzOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTY0LVx0aW50IHJjID0gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTY1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNjY6XHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChrZXksIGtleWxlbik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Ny1cdGlmIChoIFx1MDAyNlx1MDAyNiBoLVx1MDAzZWtleV90b19wcm90a2V5KSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzEtXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE3MjpcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3My1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3NS19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE3NjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3Ny1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE4My0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTg0OmludCBwa2V5X2hhbmRsZXJfc2xvd3BhdGhfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE4NS1cdFx0XHRcdFx0IHNpemVfdCBucl9hcHFucyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE4OS17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE5MDpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmgsICpodG1wWzEwXTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTkxLVx0aW50IGksIG4gPSAwLCByYyA9IC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTUtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMTY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfc2xvd3BhdGhfa2V5X3RvX3Byb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIxODppbnQgcGtleV9oYW5kbGVyX2dlbl9rZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjE5LVx0XHRcdCB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjIte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMjM6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjQtXHRpbnQgcmMgPSAtRU5PREVWO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIyNjpcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI3LVx0aWYgKGggXHUwMDI2XHUwMDI2IGgtXHUwMDNlZ2VuX2tleSkge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMxLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMzI6XHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzMtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzUtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMzY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfZ2VuX2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIzNy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM4OmludCBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzktXHRcdFx0ICAgIHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0NC17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI0NTpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0Ni1cdGludCByYyA9IC1FTk9ERVY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjQ4Olx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGtleXN1YnR5cGUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNDktXHRpZiAoaCBcdTAwMjZcdTAwMjYgaC1cdTAwM2VjbHJfdG9fa2V5KSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNTMtXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI1NDpcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1NS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1Ny19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI1ODpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjU5LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjA6aW50IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2MS1cdFx0XHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2NC17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2NTpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2Ni1cdGludCByYyA9IC1FTk9ERVY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjY4Olx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoa2V5LCBrZXlsZW4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjktXHRpZiAoaCBcdTAwMjZcdTAwMjYgaC1cdTAwM2V2ZXJpZnlfa2V5KSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzItXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI3MzpcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI3NC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI3Ni19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI3NzpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc4LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNzk6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sIHUzMiBmbGFncyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjgwLVx0XHRcdCAgICAgICBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90ICpucl9hcHFucyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4Mi17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI4MzpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4NC1cdGludCByYyA9IC1FTk9ERVY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4NS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjg2Olx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoa2V5LCBrZXlsZW4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODctXHRpZiAoaCBcdTAwMjZcdTAwMjYgaC1cdTAwM2VhcHFuc19mb3Jfa2V5KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg5LVx0XHRcdFx0ICAgICAgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjkwOlx0cGtleV9oYW5kbGVyX3B1dChoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjkxLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjkzLX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjk0OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yOTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NjppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrZXlzdWJ0eXBlLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yOTctXHRcdFx0XHQgICB1OCBjdXJfbWt2cFszMl0sIHU4IGFsdF9ta3ZwWzMyXSwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzAwLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzAxOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzAyLVx0aW50IHJjID0gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzAzLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMDQ6XHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoa2V5c3VidHlwZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwNS1cdGlmIChoIFx1MDAyNlx1MDAyNiBoLVx1MDAzZWFwcW5zX2Zvcl9rZXl0eXBlKSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDktXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxMDpcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxMS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxMy19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxNDpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxNS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzE2OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTcte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTgtI2lmZGVmIENPTkZJR19NT0RVTEVTXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxOTpcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGtleV9oYW5kbGVyX21vZHVsZXNbXSA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzIwLSNpZiBJU19NT0RVTEUoQ09ORklHX1BLRVlfQ0NBKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzM0LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMzU6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBrZXlfaGFuZGxlcl9tb2R1bGVzKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzM2Olx0XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMzctXHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM0MS1cdFx0XHRpZiAoaC1cdTAwM2Vtb2R1bGUgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM0MjpcdFx0XHQgICAgIXN0cmNtcChoLVx1MDAzZW1vZHVsZS1cdTAwM2VuYW1lLCBwa2V5X2hhbmRsZXJfbW9kdWxlc1tpXSkpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzQzLVx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzQ4LVx0XHRpZiAoIWZvdW5kKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM0OTpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtyZXF1ZXN0X21vZHVsZSglcylcXG5cJiMzNDssIHBrZXlfaGFuZGxlcl9tb2R1bGVzW2ldKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzUwOlx0XHRcdHJlcXVlc3RfbW9kdWxlKHBrZXlfaGFuZGxlcl9tb2R1bGVzW2ldKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzUxLVx0XHR9XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTQtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozNTU6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzU2LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg9MTQ1PWV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpwa2V5X2F0dHJfZ3JvdXBzW107XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTAtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjE1MTpzdHJ1Y3QgcGtleV9oYW5kbGVyIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMTUyLVx0c3RydWN0IG1vZHVsZSAqbW9kdWxlO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMTkyLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxOTM6aW50IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MTk0OmludCBwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMTk1LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMTk5LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjAxOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGVudW0gcGtleV9rZXlfdHlwZSBrdCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwMjp2b2lkIHBrZXlfaGFuZGxlcl9wdXQoY29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwMy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjA0OmludCBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjA1LVx0XHRcdFx0Y29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwNy1cdFx0XHRcdHUzMiB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDg6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjA5LVx0XHRcdFx0XHQgc2l6ZV90IG5yX2FwcW5zLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjEyLVx0XHRcdFx0XHQgdTMyICpwcm90a2V5dHlwZSwgdTMyIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIxMzppbnQgcGtleV9oYW5kbGVyX2dlbl9rZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjE0LVx0XHRcdCB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTYtXHRcdFx0IHU4ICprZXlidWYsIHUzMiAqa2V5YnVmbGVuLCB1MzIgKmtleWluZm8sIHUzMiB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMTc6aW50IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxOC1cdFx0XHQgICAgdTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjIyLVx0XHRcdCAgICB1MzIgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjIzOmludCBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMjQtXHRcdFx0ICAgIHUxNiAqY2FyZCwgdTE2ICpkb20sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMjYtXHRcdFx0ICAgIHUzMiB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMjc6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sIHUzMiBmbGFncyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI4LVx0XHRcdCAgICAgICBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90ICpucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI5LVx0XHRcdCAgICAgICB1MzIgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjMwOmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUoZW51bSBwa2V5X2tleV90eXBlIGt0eXBlLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMzEtXHRcdFx0XHQgICB1OCBjdXJfbWt2cFszMl0sIHU4IGFsdF9ta3ZwWzMyXSwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjM3LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMzg6dm9pZCBwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKHZvaWQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMzktXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jPTU1Nz1zdGF0aWMgaW50IGNjYV9zbG93cGF0aF9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNTk1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jOjU5NjpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciBjY2FfaGFuZGxlciA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy01OTctXHQubW9kdWxlXHRcdFx0ID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jPTYxMz1zdGF0aWMgaW50IF9faW5pdCBwa2V5X2NjYV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYxNS1cdC8qIHJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciBmb3IgYWxsIHRoZSBjY2Egc3R1ZmYgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MTY6XHRyZXR1cm4gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFx1MDAyNmNjYV9oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTctfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYz02MjI9c3RhdGljIHZvaWQgX19leGl0IHBrZXlfY2NhX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjI0LVx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MjU6XHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcdTAwMjZjY2FfaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjI2LX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jPTUwND1zdGF0aWMgaW50IGVwMTFfc2xvd3BhdGhfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NDItXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU0MzpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciBlcDExX2hhbmRsZXIgPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU0NC1cdC5tb2R1bGVcdFx0XHQgPSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jPTU2MD1zdGF0aWMgaW50IF9faW5pdCBwa2V5X2VwMTFfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTYyLVx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGVwMTEgc3R1ZmYgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM6NTYzOlx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcdTAwMjZlcDExX2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NjQtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTY5PXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X2VwMTFfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTcxLVx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM6NTcyOlx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXHUwMDI2ZXAxMV9oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTczLX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYz00MzU9c3RhdGljIGludCBwa2V5X3Bja21vX3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ0Mi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jOjQ0MzpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciBwY2ttb19oYW5kbGVyID0ge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDQ0LVx0Lm1vZHVsZVx0XHQgICAgICA9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBwa2V5X3Bja21vX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NjktXHQvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgZm9yIGFsbCB0aGUgcGNrbW8gc3R1ZmYgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jOjQ3MDpcdHJldHVybiBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoXHUwMDI2cGNrbW9faGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NzEtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ3Nj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9wY2ttb19leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDc4LVx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jOjQ3OTpcdHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKFx1MDAyNnBja21vX2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDgwLX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNy0vKlxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MTg6ICogV3JhcHBlciBhcm91bmQgcGtleV9oYW5kbGVyX2dlbl9rZXkoKSB3aGljaCBkZWFscyB3aXRoIHRoZVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTktICogRU5PREVWIHJldHVybiBjb2RlIGFuZCB0aGVuIHRyaWVzIHRvIGVuZm9yY2UgYSBwa2V5IGhhbmRsZXJcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0yMS0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjIyOnN0YXRpYyBpbnQgc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTIzLVx0XHRcdFx0ICAgIHUzMiBrZXliaXRzaXplLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzoyODpcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTI5LVx0XHRcdFx0ICBrZXl0eXBlLCBrZXlzdWJ0eXBlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyLVx0aWYgKHJjID09IC1FTk9ERVYpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMzOlx0XHRwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzozNDpcdFx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShOVUxMLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzUtXHRcdFx0XHRcdCAga2V5dHlwZSwga2V5c3VidHlwZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz00OT1zdGF0aWMgc3NpemVfdCBwa2V5X3Byb3RrZXlfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy02Ny1cdHByb3RrZXkubGVuID0gc2l6ZW9mKHByb3RrZXkucHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzo2ODpcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNjktXHRcdFx0XHQgICAgICBwcm90a2V5LnByb3RrZXksIFx1MDAyNnByb3RrZXkubGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTgxLVx0XHRwcm90a2V5LmxlbiA9IHNpemVvZihwcm90a2V5LnByb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6ODI6XHRcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtODMtXHRcdFx0XHRcdCAgICAgIHByb3RrZXkucHJvdGtleSwgXHUwMDI2cHJvdGtleS5sZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9MTA2PXN0YXRpYyBzc2l6ZV90IHBrZXlfcHJvdGtleV9hZXNfeHRzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTEzMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjEzMjpcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTMzLVx0XHRcdFx0ICAgICAgdC1cdTAwM2Vwcm90a2V5LCBcdTAwMjZwcm90bGVuLCBcdTAwMjZwcm90dHlwZSk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9MTQ4PXN0YXRpYyBzc2l6ZV90IHBrZXlfcHJvdGtleV9obWFjX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE3My1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjE3NDpcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTc1LVx0XHRcdFx0ICAgICAgdC1cdTAwM2Vwcm90a2V5LCBcdTAwMjZwcm90bGVuLCBcdTAwMjZwcm90dHlwZSk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9MzA4PXN0YXRpYyBzc2l6ZV90IHBrZXlfY2NhZGF0YV9hZXNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBib29sIGlzX3h0cywgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyMS1cdGJ1ZmxlbiA9IHNpemVvZihzZWNrZXktXHUwMDNlc2Vja2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMyMjpcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9DQ0FfREFUQSwgMCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyMy1cdFx0XHRcdCAgICAgIHNlY2tleS1cdTAwM2VzZWNrZXksIFx1MDAyNmJ1ZmxlbiwgTlVMTCk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzI5LVx0XHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVx1MDAzZXNlY2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzozMzA6XHRcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9DQ0FfREFUQSwgMCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMzMS1cdFx0XHRcdFx0ICAgICAgc2Vja2V5LVx1MDAzZXNlY2tleSwgXHUwMDI2YnVmbGVuLCBOVUxMKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz00MTk9c3RhdGljIHNzaXplX3QgcGtleV9jY2FjaXBoZXJfYWVzX2F0dHJfcmVhZChlbnVtIHBrZXlfa2V5X3NpemUga2V5Yml0cyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy00MzMtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzo0MzQ6XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy00MzUtXHRcdFx0XHQgICAgICBQS0VZX1RZUEVfQ0NBX0NJUEhFUiwga2V5Yml0cywgMCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy00NDItXHRcdGJ1ZiAmIzQzOz0gQ0NBQ0lQSEVSVE9LRU5TSVpFO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NDQzOlx0XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQ0NC1cdFx0XHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9NTM0PXN0YXRpYyBzc2l6ZV90IHBrZXlfZXAxMV9hZXNfYXR0cl9yZWFkKGVudW0gcGtleV9rZXlfc2l6ZSBrZXliaXRzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU0OC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjU0OTpcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU1MC1cdFx0XHRcdCAgICAgIFBLRVlfVFlQRV9FUDExX0FFUywga2V5Yml0cywgMCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NTctXHRcdGJ1ZiAmIzQzOz0gTUFYRVAxMUFFU0tFWUJMT0JTSVpFO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTU4Olx0XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU1OS1cdFx0XHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjMzPXN0YXRpYyBpbnQgdXZfdmVyaWZ5a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjcxLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjcyOnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIHV2X2hhbmRsZXIgPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzMtXHQubW9kdWxlXHRcdFx0ID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI5Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI5ODpcdHJjID0gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFx1MDAyNnV2X2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk5LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTMwOD1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV91dl9leGl0KHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0zMDkte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MzEwOlx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXHUwMDI2dXZfaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0zMTEtXHRtdXRleF9sb2NrKFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE2MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUHVibGljIEtleSBJbmZyYXN0cnVjdHVyZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHBrZXlfdXYuY2AgaXMgdGhlIGtleSBoZXJlIOKAkyBpdCYjMzk7cyByZWdpc3RlcmluZyBhIGB1dl9oYW5kbGVyYC4gVGhhdCBgdXZfaGFuZGxlcmAgc2VlbXMgY3J1Y2lhbCwgYXMgaXQgcHJvdmlkZXMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0aWVzOiBga2V5X3RvX3Byb3RrZXlgIGFuZCBgdmVyaWZ5X2tleWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUsIGluIHR1cm4sIGFjY2Vzc2VkIGJ5IGhpZ2hlci1sZXZlbCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXlgIGFuZCBgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXlgLgoKTm93LCB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGVzZSBoYW5kbGVyIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkIGJ5IGEgdmFyaWV0eSBvZiBpb2N0bCBpbnRlcmZhY2VzLiBJIHNlZSBmdW5jdGlvbnMgbGlrZSBgcGtleV9pb2N0bF92ZXJpZnlrZXlgLCBgcGtleV9pb2N0bF92ZXJpZnlrZXkyYCwgYHBrZXlfaW9jdGxfc2VjMnByb3RrYCwgYHBrZXlfaW9jdGxfc2tleTJwa2V5YCwgYW5kIGBwa2V5X2lvY3RsX3ZlcmlmeXByb3RrYCwgd2hpY2ggc3VnZ2VzdHMgYSBjbGVhciBpbnRlcmFjdGlvbiB3aXRoIGEgZGV2aWNlIG5vZGUsIGxpa2VseSBgL2Rldi9wa2V5YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIGV2ZW4gYWNjZXNzIHRoaXMgZGV2aWNlPyYjMzQ7CgpBIHF1aWNrIGNoZWNrLCBhbmQgYWhhISBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jYCByZWdpc3RlcnMgYSBtaXNjIGRldmljZS4gVGhhdCBhbnN3ZXJzIG15IHF1ZXN0aW9uISBTbywgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGlzIGVudGlyZSBzeXN0ZW0gaXMgYnVpbHQgYXJvdW5kIGEgZGV2aWNlIGRyaXZlciwgbGlrZWx5IHNwZWNpZmljIHRvIHRoZSBTMzkwIGFyY2hpdGVjdHVyZSwgdGhhdCBleHBvc2VzIGEgcHVibGljIGtleSBpbnRlcmZhY2UgdGhyb3VnaCB0aGUgYC9kZXYvcGtleWAgZGV2aWNlIG5vZGUgdXNpbmcgaW9jdGxzLCB3aXRoIGB1dl9oYW5kbGVyYCBiZWluZyB0aGUgZm91bmRhdGlvbmFsIGNvbXBvbmVudCBpbXBsZW1lbnRpbmcgdGhlIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucy4gVGhpcyBhcmNoaXRlY3R1cmUgbG9va3MgZmFpcmx5IHN0YW5kYXJkIGZvciBhIHByb3RlY3RlZCBrZXkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pc2NfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTc4Nj1pbnQgX19pbml0IHBrZXlfYXBpX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNzg4LVx0LyogcmVnaXN0ZXIgYXMgYSBtaXNjIGRldmljZSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjc4OTpcdHJldHVybiBtaXNjX3JlZ2lzdGVyKFx1MDAyNnBrZXlfZGV2KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy03OTAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgwOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgS2V5ZWQgTWVtb3J5IEJ1Z3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhbiBpc3N1ZSByZWxhdGVkIHRvIGtleWVkIG1lbW9yeSwgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGAvZGV2L3BrZXlgIGlvY3Rscy4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyB3aXRoaW4gdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoIGhvdyBpdCBoYW5kbGVzIHRoZSBzZWFyY2ggZm9yIHRoZXNlIHNlY3JldHMuIEl0IGxvb2tzIGxpa2UgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSBgc3RhcnRfaWR4YCB2YXJpYWJsZSB3YXNuJiMzOTt0IGJlaW5nIHVwZGF0ZWQgY29ycmVjdGx5LCBsZWFkaW5nIHRvIGVpdGhlciBhbiBpbmZpbml0ZSBsb29wIG9yIGEgZmFpbHVyZSB0byBsb2NhdGUgdGhlIGludGVuZGVkIHNlY3JldC4KCldhaXQsIGxvb2tpbmcgYXQgaXQgY2xvc2VyLCBpc24mIzM5O3QgYGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgd2hhdCYjMzk7cyBhY3R1YWxseSB1cGRhdGVkIGJ5IGB1dl9saXN0X3NlY3JldHNgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIExldCBtZSBqdW1wIGludG8gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AgYW5kIGRpZyBpbnRvIGB1dl9saXN0X3NlY3JldHNgIHRvIGNvbmZpcm0gdGhpcyBiZWhhdmlvciBhbmQgdW5kZXJzdGFuZCBob3cgdGhvc2UgaW5kaWNlcyBhcmUgc3VwcG9zZWQgdG8gaW50ZXJhY3QuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIHNlY3JldCBpbmRleGluZyB3b3JrcyB0byBiZSBzdXJlIG9mIHRoZSBmaXgmIzM5O3MgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl9saXN0X3NlY3JldHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva2VybmVsL3V2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC91di5jPTc4MD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTEtXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc5MjpcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzkzLVx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM0MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBtaW5kJiMzOTtzIGJ1enppbmcsIGFuZCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhpcywgSSBuZWVkIHRvIGdyb3VuZCBteXNlbGYuIEkmIzM5O3ZlIGVuY291bnRlcmVkIGB1dl9saXN0X3NlY3JldHNgLCBhbmQgdGhhdCYjMzk7cyBhIG5ldyBvbmUuIEl0JiMzOTtzIGdvdCBtZSBjdXJpb3VzLCBidXQgSSBjYW4mIzM5O3QganVzdCBqdW1wIGludG8gYXNzdW1wdGlvbnMuIEkgbmVlZCBhIHByZWNpc2UgZGVmaW5pdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgSSBuZWVkIHRvIHNlZSB0aGUgZGVmaW5pdGlvbiBvZiBgdXZfbGlzdF9zZWNyZXRzYC4mIzM0OyBJIGtub3cgYmV0dGVyIHRoYW4gdG8gb3BlcmF0ZSB3aXRoIGZ1enp5IHVuZGVyc3RhbmRpbmdzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0IHNvdW5kcyBsaWtlIGl0IHJlbGF0ZXMgdG8gc2VjcmV0cy4gR290dGEgaGF2ZSBhIGNsZWFyIGFuZCBhY2N1cmF0ZSBmb3VuZGF0aW9uIGJlZm9yZSBJIHByb2NlZWQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2xpc3Rfc2VjcmV0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00NzM9c3RhdGljIGlubGluZSBpbnQgdXZfY21kX25vZGF0YSh1NjQgaGFuZGxlLCB1MTYgY21kLCB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00ODktLyoqXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0OTA6ICogdXZfbGlzdF9zZWNyZXRzKCkgLSBEbyBhIExpc3QgU2VjcmV0cyBVVkMuXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00OTEtICpcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTEtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo1MTI6c3RhdGljIGlubGluZSBpbnQgdXZfbGlzdF9zZWNyZXRzKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYnVmLCB1MTYgc3RhcnRfaWR4LFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTEzLVx0XHRcdFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzgwPWludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5MS1cdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzkyOlx0XHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcdTAwMjZsaXN0X3JjLCBOVUxMKTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTMtXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0zMDc9c3RhdGljIGludCB1dmlvX2dldF9saXN0KHZvaWQgKnpwYWdlLCBzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0zMTYtXHRkbyB7XG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjMxNzpcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4LCBcdTAwMjZ1dl9pb2N0bC1cdTAwM2V1dl9yYyxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzE4LVx0XHRcdFx0XHUwMDI2dXZfaW9jdGwtXHUwMDNldXZfcnJjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNjkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHV2X2xpc3Rfc2VjcmV0c2AgaW4gczM5MCBBcmNoaXRlY3R1cmUgQ29udGV4dCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgdXZfbGlzdF9zZWNyZXRzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYCBoZWFkZXIgZmlsZS4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyB1bmRlcnN0YW5kaW5nIGhvdyBzZWNyZXRzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgdW5kZXJseWluZyBVbml2ZXJzYWwgVm9sdW1lIChVVikgYXJjaGl0ZWN0dXJlIG9uIHRoZSBzMzkwIHBsYXRmb3JtLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG1lY2hhbmlzbXMgdXNlZCB0byBtYW5hZ2UgdGhlc2Ugc2VjcmV0cy4gTXkgcHJpb3Iga25vd2xlZGdlIG9mIHMzOTAmIzM5O3Mgc2VjdXJpdHkgZmVhdHVyZXMgYW5kIFVWJiMzOTtzIGFyY2hpdGVjdHVyZSBpbmZvcm1zIG15IGV4cGVjdGF0aW9uIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgaW52b2x2ZXMgcG9pbnRlcnMgdG8gc2VjdXJlIG1lbW9yeSByZWdpb25zLCBwb3RlbnRpYWxseSB1c2luZyBoYXJkd2FyZS1hc3Npc3RlZCBlbmNyeXB0aW9uIG9yIGludGVncml0eSBjaGVja3MuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBleHBvc2VzIGFueSBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGJlIGxldmVyYWdlZCBieSBhdHRhY2tlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MDpcdCAqIHV2X2xpc3Rfc2VjcmV0cygpIC0gRG8gYSBMaXN0IFNlY3JldHMgVVZDLlxuIDQ5MTpcdCAqXG4gNDkyOlx0ICogQGJ1ZjogQnVmZmVyIHRvIHdyaXRlIGxpc3QgaW50bzsgc2l6ZSBvZiBvbmUgcGFnZS5cbiA0OTM6XHQgKiBAc3RhcnRfaWR4OiBUaGUgc21hbGxlc3QgaW5kZXggdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGxpc3QuXG4gNDk0Olx0ICpcdFx0Rm9yIHRoZSBmaXN0IGludm9jYXRpb24gdXNlIDAuXG4gNDk1Olx0ICogQHJjOiBQb2ludGVyIHRvIHN0b3JlIHRoZSByZXR1cm4gY29kZSBvciBOVUxMLlxuIDQ5NjpcdCAqIEBycmM6IFBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybiByZWFzb24gY29kZSBvciBOVUxMLlxuIDQ5NzpcdCAqXG4gNDk4Olx0ICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgTGlzdCBTZWNyZXRzIFVWQy4gVGhlIHJlc3VsdCBpcyB3cml0dGVuIGludG8gYGJ1ZmAsXG4gNDk5Olx0ICogdGhhdCBuZWVkcyB0byBiZSBhdCBsZWFzdCBvbmUgcGFnZSBvZiB3cml0YWJsZSBtZW1vcnkuXG4gNTAwOlx0ICogYGJ1ZmAgY29uc2lzdHMgb2Y6XG4gNTAxOlx0ICogKiAlc3RydWN0IHV2X3NlY3JldF9saXN0X2hkclxuIDUwMjpcdCAqICogJXN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIChtdWx0aXBsZSlcbiA1MDM6XHQgKlxuIDUwNDpcdCAqIEZvciBgc3RhcnRfaWR4YCB1c2UgXzBfIGZvciB0aGUgZmlyc3QgY2FsbC4gSWYgdGhlcmUgYXJlIG1vcmUgc2VjcmV0cyBhdmFpbGFibGVcbiA1MDU6XHQgKiBidXQgY291bGQgbm90IGZpdCBpbnRvIHRoZSBwYWdlIHRoZW4gYHJjYCBpcyBgVVZDX1JDX01PUkVfREFUQWAuXG4gNTA2Olx0ICogSW4gdGhpcyBjYXNlIHVzZSBgdXZfc2VjcmV0X2xpc3RfaGRyLm5leHRfc2VjcmV0X2lkeGAgZm9yIGBzdGFydF9pZHhgLlxuIDUwNzpcdCAqXG4gNTA4Olx0ICogQ29udGV4dDogbWlnaHQgc2xlZXAuXG4gNTA5Olx0ICpcbiA1MTA6XHQgKiBSZXR1cm46IFRoZSBVVkMgY29uZGl0aW9uIGNvZGUuXG4gNTExOlx0ICovXG4gNTEyOlx0c3RhdGljIGlubGluZSBpbnQgdXZfbGlzdF9zZWNyZXRzKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYnVmLCB1MTYgc3RhcnRfaWR4LFxuIDUxMzpcdFx0XHRcdFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcbiA1MTQ6XHR7XG4gNTE1Olx0XHRzdHJ1Y3QgdXZfY2JfbGlzdF9zZWNyZXRzIHV2Y2IgPSB7XG4gNTE2Olx0XHRcdC5oZWFkZXIubGVuID0gc2l6ZW9mKHV2Y2IpLFxuIDUxNzpcdFx0XHQuaGVhZGVyLmNtZCA9IFVWQ19DTURfTElTVF9TRUNSRVRTLFxuIDUxODpcdFx0XHQuc3RhcnRfaWR4ID0gc3RhcnRfaWR4LFxuIDUxOTpcdFx0XHQubGlzdF9hZGRyID0gKHU2NClidWYsXG4gNTIwOlx0XHR9O1xuIDUyMTpcdFx0aW50IGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuIDUyMjpcdFxuIDUyMzpcdFx0aWYgKHJjKVxuIDUyNDpcdFx0XHQqcmMgPSB1dmNiLmhlYWRlci5yYztcbiA1MjU6XHRcdGlmIChycmMpXG4gNTI2Olx0XHRcdCpycmMgPSB1dmNiLmhlYWRlci5ycmM7XG4gNTI3Olx0XG4gNTI4Olx0XHRyZXR1cm4gY2M7XG4gNTI5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAwNAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFVWX0xpc3RfU2VjcmV0cyBhbmQgU3l6a2FsbGVyIG9uIHMzOTB4KioKCk9rYXksIHNvIGB1dl9saXN0X3NlY3JldHNgLi4uIHRoYXQmIzM5O3MgYSBVVkMsIGEgZnVuY3Rpb24gc3BlY2lmaWMgdG8gU2VjdXJlIEV4ZWN1dGlvbiBvbiB0aGUgczM5MCBwbGF0Zm9ybSwgd2hpY2ggZmFsbHMgdW5kZXIgVWx0cmF2aXNvci4gTXkgaW5pdGlhbCBxdWVzdGlvbjogY2FuIEkgZXhlY3V0ZSB0aGlzIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IENvbnNpZGVyaW5nIFFFTVUgaXMgYSBzdGFuZGFyZCB0b29sIGZvciBzMzkwIGVtdWxhdGlvbiwgYW5kIEkga25vdyBpdCBzdXBwb3J0cyBTZWN1cmUgRXhlY3V0aW9uIChVbHRyYXZpc29yKSB3aGVuIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCB0aGUgYW5zd2VyICpzaG91bGQqIGJlIHllcy4KCkJ1dCBoZXJl4oCZcyB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXA6IGRvZXMgc3l6a2FsbGVyIHRlc3QgdGhpcz8gU3l6a2FsbGVyLCB3aXRoIGl0cyBmdXp6ZXIsIG9mdGVuIHJ1bnMgczM5MHggVk1zLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIFZNcyBiZWluZyBydW4gKndpdGgqIFNlY3VyZSBFeGVjdXRpb24gZW5hYmxlZD8gU3l6a2FsbGVyIHR5cGljYWxseSBsZXZlcmFnZXMgUUVNVSBmb3IgaXRzIHMzOTB4IHJ1bnMsIGFuZCBJIHVuZGVyc3RhbmQgUUVNVSBpcyBjYXBhYmxlIG9mIFNlY3VyZSBFeGVjdXRpb24gdmlhIHByb3R2aXJ0LgoKTXkgbmV4dCB0YXNrOiBkaXZlIGludG8gdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYENPTkZJR19QS0VZX1VWYCBpcyBlbmFibGVkLiBJJiMzOTtsbCBhbHNvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmRpY2F0ZSBTZWN1cmUgRXhlY3V0aW9uIHN1cHBvcnQgaXMgYWN0aXZlLiBUaGlzIHdpbGwgdGVsbCBtZSBpZiBzeXprYWxsZXIgaXMgYWN0dWFsbHkgdGVzdGluZyB0aGlzIGFyZWEgb3Igbm90LiBUaGlzIGlzIGtleSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSYjMzk7cyBhIGdvb2QgdGVzdCBlbnZpcm9ubWVudCBmb3IgdGhlIGB1dl9saXN0X3NlY3JldHNgIFVWQy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBLRVlfVVYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vS2NvbmZpZz0xMzc9Y29uZmlnIFBLRVlfUENLTU9cbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1Ny1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTU4OmNvbmZpZyBQS0VZX1VWXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTU2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENyeXB0b2dyYXBoaWMgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBQS0VZX1VWYC4gTXkgaW5zdGluY3QsIGdpdmVuIHRoZSBkb21haW4sIGlzIHRvIHN0YXJ0IGRpZ2dpbmcgYXJvdW5kIGluIHRoZSBgZHJpdmVycy9jcnlwdG9gIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhhdCBkaXJlY3RvcnkuIGBLY29uZmlnYCBmaWxlcyBhcmUgdGhlIGNlbnRyYWwgcmVwb3NpdG9yaWVzIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhleSYjMzk7cmUgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGEgc3BlY2lmaWMgZmVhdHVyZSBsaWtlIGBQS0VZX1VWYCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uIGZpdHMgaW50byB0aGUgYnJvYWRlciBjcnlwdG9ncmFwaGljIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uLiBGcm9tIGhlcmUsIEkgY2FuIGV4YW1pbmUgaXRzIGxvY2F0aW9uIHdpdGhpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTg6XHRjb25maWcgUEtFWV9VVlxuIDE1OTpcdFx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBVViBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbiAxNjA6XHRcdGRlcGVuZHMgb24gUEtFWVxuIDE2MTpcdFx0ZGVwZW5kcyBvbiBTMzkwX1VWX1VBUElcbiAxNjI6XHRcdGhlbHBcbiAxNjM6XHRcdCAgVGhpcyBpcyB0aGUgUEtFWSBVbHRyYXZpc29yIHN1cHBvcnQgaGFuZGxlciBmb3IgZGVyaXZpbmcgcHJvdGVjdGVkXG4gMTY0Olx0XHQgIGtleXMgZnJvbSBzZWNyZXRzIHN0b3JlZCB3aXRoaW4gdGhlIFVsdHJhdmlzb3IgKFVWKS5cbiAxNjU6XHRcbiAxNjY6XHRcdCAgVGhpcyBtb2R1bGUgd29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgVVYgZGV2aWNlIGFuZCBzdXBwb3J0cyB0aGVcbiAxNjc6XHRcdCAgcmV0cmlldmFsIG9mIHByb3RlY3RlZCBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZVxuIDE2ODpcdFx0ICBVViBmaXJtd2FyZSBsYXllci4gVGhpcyBzZXJ2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpblxuIDE2OTpcdFx0ICBhIHByb3RlY3RlZCBleGVjdXRpb24gZ3Vlc3QgYW5kIHRodXMgdGhpcyBtb2R1bGUgd2lsbCBmYWlsIHVwb25cbiAxNzA6XHRcdCAgbW9kcHJvYmUgaWYgbm8gcHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyBkZXRlY3RlZC5cbiAxNzE6XHRcbiAxNzI6XHRcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIHdpdGggYW4gS1ZNXG4gMTczOlx0XHQgIGd1ZXN0IHdpdGggcHJvdGVjdGVkIGV4ZWN1dGlvbiBhbmQgeW91IHdhbnQgdG8gdXNlIFVWIHJldHJpZXZhYmxlXG4gMTc0Olx0XHQgIHNlY3JldHMgdmlhIFBLRVkgQVBJLlxuIDE3NTpcdFxuIDE3NjpcdGNvbmZpZyBDUllQVE9fUEFFU19TMzkwXG4gMTc3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQQUVTIGNpcGhlciBhbGdvcml0aG1zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDkzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTZWN1cmUgRXhlY3V0aW9uIFJlcXVpcmVtZW50cyBmb3IgU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGVycm9yIG1lc3NhZ2U6ICYjMzQ7VGhpcyBzZXJ2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpbiBhIHByb3RlY3RlZCBleGVjdXRpb24gZ3Vlc3QgYW5kIHRodXMgdGhpcyBtb2R1bGUgd2lsbCBmYWlsIHVwb24gbW9kcHJvYmUgaWYgbm8gcHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyBkZXRlY3RlZC4mIzM0OyBSaWdodCwgc28gdGhhdCB0ZWxscyBtZSBpbW1lZGlhdGVseSB0aGlzIGlzIHRpZWQgdG8gU2VjdXJlIEV4ZWN1dGlvbiwgb3Igd2hhdCBJIHVzdWFsbHkgY2FsbCBhICYjMzQ7cHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4mIzM0OyBBbmQgdGhlIGNvbnRleHQgaXMgU3l6a2FsbGVyLgoKSG1tLCB0aGUgdGV4dCBzYXlzIFN5emthbGxlciAqZG9lc24mIzM5O3QqIHJ1biB3aXRoIFNlY3VyZSBFeGVjdXRpb24gZW5hYmxlZCBieSBkZWZhdWx0LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGJpdCBvZiBhIG5pY2hlIHNldHVwLiBJdCBsb29rcyBsaWtlIGl0IG5lZWRzIFVsdHJhdmlzb3Igc3VwcG9ydCBvbiB0aGUgaG9zdCwgb3IgUUVNVSB3aXRoIGBwcm90dmlydGAgZW5hYmxlZC4gQW5kIG9mIGNvdXJzZSwgdGhlIFFFTVUgcGF0aCBzdGlsbCBkZXBlbmRzIG9uIGhvc3Qgc3VwcG9ydCAtIHNwZWNpZmljYWxseSBLVk0gb24gczM5MHggd2l0aCBVbHRyYXZpc29yLgoKV2FpdCwgUUVNVSBpcyBsaXN0ZWQgaGVyZSBhcyAqZW11bGF0aW5nKiBVbHRyYXZpc29yPyBObywgaGFuZyBvbi4gUUVNVSB1c2VzIEtWTSB0byAqc3VwcG9ydCogVWx0cmF2aXNvciwgaXQmIzM5O3Mgbm90IGFjdHVhbGx5IGFuIGVtdWxhdGlvbiBsYXllciwgaXQmIzM5O3MgYSBoYXJkd2FyZSBmZWF0dXJlIG9uIElCTSB6MTUmIzQzOyBwcm9jZXNzb3JzLiBPa2F5LCBJJiMzOTt2ZSBnb3QgaXQuCgpUaGUgcmVhbCBxdWVzdGlvbiBoZXJlIGlzIGNhbiBzeXprYWxsZXImIzM5O3MgZnV6emluZyByb3V0aW5lcyBhY3R1YWxseSByZWFjaCB0aGlzIGNvZGU/IEFyZSB3ZSBldmVuIHRlc3Rpbmcgc29tZXRoaW5nIHRoYXQmIzM5O3MgbGlrZWx5IHRvICpmYWlsKiBpbiBhIG5vcm1hbCBTeXprYWxsZXIgcnVuPyAKClRvIGRldGVybWluZSBpZiB0aGlzIGlzIHJlbGV2YW50LCBJIHNob3VsZCBjaGVjayBpZiBgdXZfZmluZF9zZWNyZXRgIGlzIGNhbGxlZCBhbnl3aGVyZSBlbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl9maW5kX3NlY3JldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTM9c3RhdGljIGlubGluZSBpbnQgdXZfcmVtb3ZlX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE3LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjE4OmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTktXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzU3PXN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3Mi0vKipcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3NzM6ICogdXZfZmluZF9zZWNyZXQoKSAtIHNlYXJjaCBzZWNyZXQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VjcmV0IGlkLlxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3NC0gKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc5LSAqL1xuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MDppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4MS1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDUtfVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwNjpFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA3LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtzMzkwIHByb3RlY3RlZCBrZXkgVVYgaGFuZGxlclwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjItLypcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzOiAqIE9uZSBwcmUtYWxsb2NhdGVkIHV2X3NlY3JldF9saXN0IGZvciB1c2Ugd2l0aCB1dl9maW5kX3NlY3JldCgpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz05Mz1zdGF0aWMgaW50IGdldF9zZWNyZXRfbWV0YWRhdGEoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTk5LVx0bWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTAwOlx0cmMgPSB1dl9maW5kX3NlY3JldChzZWNyZXRfaWQsIHV2X2xpc3QsIHNlY3JldCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDEtXHRtdXRleF91bmxvY2soXHUwMDI2dXZfbGlzdF9tdXRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjY2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipBbmFseXNpcyBvZiBgcGtleV91di5jYCBVc2FnZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHRoZSBtb2R1bGUgaW4gcXVlc3Rpb24sIGBwa2V5X3V2LmNgLCBpcyAqb25seSogY2FsbGVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvczM5MC9jcnlwdG9gIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRoZSBvbmx5IHVzZSBvZiB0aGlzIGZpbGUgaXMgZHVyaW5nIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIFRoaXMgbmFycm93cyBkb3duIHRoZSBzY29wZSBxdWl0ZSBhIGJpdC4gSXTigJlzIGEgdmVyeSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gY3J5cHRvZ3JhcGhpYyBrZXkgbWFuYWdlbWVudCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGFuZCBjb25maW5lZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgaXTigJlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgY3J5cHRvIGFjY2VsZXJhdGlvbiBvciBrZXkgaGFuZGxpbmcgbW9kdWxlLCBjbG9zZWx5IHRpZWQgdG8gdGhlIHMzOTAgcGxhdGZvcm3igJlzIGNyeXB0byBjYXBhYmlsaXRpZXMuIFdlIG5lZWQgdG8gbG9vayBkZWVwZXIgaW4gdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NDpcdHN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxuIDI4NTpcdHtcbiAyODY6XHRcdGludCByYztcbiAyODc6XHRcbiAyODg6XHRcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXG4gMjg5Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDI5MDpcdFxuIDI5MTpcdFx0aWYgKCF0ZXN0X2JpdF9pbnYoQklUX1VWQ19DTURfUkVUUl9TRUNSRVQsIHV2X2luZm8uaW5zdF9jYWxsc19saXN0KSlcbiAyOTI6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMjkzOlx0XG4gMjk0Olx0XHR1dl9saXN0ID0ga21hbGxvY19vYmooKnV2X2xpc3QpO1xuIDI5NTpcdFx0aWYgKCF1dl9saXN0KVxuIDI5NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyOTc6XHRcbiAyOTg6XHRcdHJjID0gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFx1MDAyNnV2X2hhbmRsZXIpO1xuIDI5OTpcdFx0aWYgKHJjKVxuIDMwMDpcdFx0XHRrZnJlZSh1dl9saXN0KTtcbiAzMDE6XHRcbiAzMDI6XHRcdHJldHVybiByYztcbiAzMDM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzkxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgU3l6a2FsbGVyJiMzOTtzIFZpcnR1YWxpemF0aW9uIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgZnVuY3Rpb24uIEl0cyBwdXJwb3NlIGlzIHByZXR0eSBjbGVhciDigJMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzeXN0ZW0gaXMgb3BlcmF0aW5nIHdpdGhpbiBhIHByb3RlY3RlZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gUmlnaHQgbm93LCBteSBhc3N1bXB0aW9uLCBiYXNlZCBvbiBob3cgU3l6a2FsbGVyIGlzIHR5cGljYWxseSBkZXBsb3llZCwgaXMgdGhhdCBpdCAqaXNuJiMzOTt0Ki4gSSBtZWFuLCB3ZSYjMzk7cmUgdXN1YWxseSBydW5uaW5nIGluIGVpdGhlciBRRU1VIFRDRywgd2hpY2ggaXMgZW11bGF0aW9uLCBvciBzdHJhaWdodCBLVk0uIE5laXRoZXIgb2YgdGhvc2UgY29uZmlndXJhdGlvbnMgc2NyZWFtICYjMzQ7cHJvdGVjdGVkIHZpcnR1YWxpemF0aW9uJiMzNDsgdG8gbWUuCgpCdXQgd2FpdCBhIG1pbnV0ZeKApiBob2xkIHRoYXQgdGhvdWdodC4gQ2FuIFN5emthbGxlciAqYWN0dWFsbHkqIHJ1biBhcyBhIHByb3RlY3RlZCB2aXJ0dWFsaXphdGlvbiBndWVzdD8gSXQgdXNlcyBRRU1VLCBkb2VzbiYjMzk7dCBpdD8gQW5kIEkga25vdyBRRU1VICpkb2VzKiBzdXBwb3J0IHMzOTB4IFNlY3VyZSBFeGVjdXRpb24uIEJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgdGhlIGhvc3QgaGFyZHdhcmUgdG8gc3VwcG9ydCBTZWN1cmUgRXhlY3V0aW9uIOKAkyBsaWtlIGEgejE1IG9yIGxhdGVyLiBTeXprYWxsZXIgaW5zdGFuY2VzLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kLCBhcmUgcHJlZG9taW5hbnRseSBvbiBHQ0UsIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4gQW5kIEdDRSYjMzk7cyBzMzkweCBvZmZlcmluZ3MgYXJlbiYjMzk7dCBsZXZlcmFnaW5nIG5hdGl2ZSBoYXJkd2FyZTsgdGhleSYjMzk7cmUgc3R1Y2sgd2l0aCBRRU1VIFRDRywgdGhlIHNsb3cgZW11bGF0aW9uLgoKU28sIGlmIFN5emthbGxlciYjMzk7cyBvbiBHQ0UgKGFuZCBoZW5jZSwgaW4gVENHIGVtdWxhdGlvbiksIGl0JiMzOTtzIGEgZGVhZCBlbmQsIHRoZW4uIFFFTVUgVENHICpleHBsaWNpdGx5KiBkb2VzbiYjMzk7dCBzdXBwb3J0IHMzOTB4IFNlY3VyZSBFeGVjdXRpb24uIFRoZSBib3R0b20gbGluZTogdGhlIGZ1bmN0aW9uIHNob3VsZCBuZXZlciByZXR1cm4gdHJ1ZSBpbiB0aGlzIGNvbW1vbiBzY2VuYXJpby4gQnV0IGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGlzX3Byb3RfdmlydF9ndWVzdCgpYCBpcyBhY3R1YWxseSBpbmNhcGFibGUgb2YgZXZlciBldmFsdWF0aW5nIHRvIHRydWUgd2hpbGUgcnVubmluZyBpbiBRRU1VIFRDRywgcmlnaHQ/IEp1c3QgYSBxdWljaywgY29uZmlybWF0b3J5IGNoZWNrIHRvIGNsb3NlIHRoZSBsb29wLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19wcm90X3ZpcnRfZ3Vlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2Jvb3QvaXBsX3Bhcm0uYz0xNzY9dm9pZCBzZXR1cF9ib290X2NvbW1hbmRfbGluZSh2b2lkKVxuLS1cbmFyY2gvczM5MC9ib290L2lwbF9wYXJtLmMtMTg1LVx0LyogYXBwZW5kIElQTCBQQVJNIGRhdGEgdG8gdGhlIGJvb3QgY29tbWFuZCBsaW5lICovXG5hcmNoL3MzOTAvYm9vdC9pcGxfcGFybS5jOjE4NjpcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkgXHUwMDI2XHUwMDI2IGlwbF9ibG9ja192YWxpZClcbmFyY2gvczM5MC9ib290L2lwbF9wYXJtLmMtMTg3LVx0XHRhcHBlbmRfaXBsX2Jsb2NrX3Bhcm0oKTtcbi0tXG5hcmNoL3MzOTAvYm9vdC9wZ21fY2hlY2suYz01OD12b2lkIGRvX3BnbV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3MzOTAvYm9vdC9wZ21fY2hlY2suYy02Ny1cdGJvb3RfZW1lcmcoXCYjMzQ7TGludXggdmVyc2lvbiAlc1xcblwmIzM0Oywga2VybmVsX3ZlcnNpb24pO1xuYXJjaC9zMzkwL2Jvb3QvcGdtX2NoZWNrLmM6Njg6XHRpZiAoIWlzX3Byb3RfdmlydF9ndWVzdCgpIFx1MDAyNlx1MDAyNiBlYXJseV9jb21tYW5kX2xpbmVbMF0pXG5hcmNoL3MzOTAvYm9vdC9wZ21fY2hlY2suYy02OS1cdFx0Ym9vdF9lbWVyZyhcJiMzNDtLZXJuZWwgY29tbWFuZCBsaW5lOiAlc1xcblwmIzM0OywgZWFybHlfY29tbWFuZF9saW5lKTtcbi0tXG5hcmNoL3MzOTAvYm9vdC9waHlzbWVtX2luZm8uYz0yMDU9c3RhdGljIHZvaWQgZGllX29vbSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBsb25nIG1heClcbi0tXG5hcmNoL3MzOTAvYm9vdC9waHlzbWVtX2luZm8uYy0yMTItXHRib290X2VtZXJnKFwmIzM0O0xpbnV4IHZlcnNpb24gJXNcXG5cJiMzNDssIGtlcm5lbF92ZXJzaW9uKTtcbmFyY2gvczM5MC9ib290L3BoeXNtZW1faW5mby5jOjIxMzpcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkgXHUwMDI2XHUwMDI2IGVhcmx5X2NvbW1hbmRfbGluZVswXSlcbmFyY2gvczM5MC9ib290L3BoeXNtZW1faW5mby5jLTIxNC1cdFx0Ym9vdF9lbWVyZyhcJiMzNDtLZXJuZWwgY29tbWFuZCBsaW5lOiAlc1xcblwmIzM0OywgZWFybHlfY29tbWFuZF9saW5lKTtcbi0tXG5hcmNoL3MzOTAvYm9vdC91di5jPTY1PXN0YXRpYyBpbnQgaXNfcHJvdF92aXJ0X2hvc3RfY2FwYWJsZSh2b2lkKVxuLS1cbmFyY2gvczM5MC9ib290L3V2LmMtNzAtXHQvKiBkaXNhYmxlIGlmIHByb3RlY3RlZCBndWVzdCB2aXJ0dWFsaXphdGlvbiBpcyBlbmFibGVkICovXG5hcmNoL3MzOTAvYm9vdC91di5jOjcxOlx0aWYgKGlzX3Byb3RfdmlydF9ndWVzdCgpKVxuYXJjaC9zMzkwL2Jvb3QvdXYuYy03Mi1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NTY0PWV4dGVybiBpbnQgcHJvdF92aXJ0X2d1ZXN0O1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTY1LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTY2OnN0YXRpYyBpbmxpbmUgaW50IGlzX3Byb3RfdmlydF9ndWVzdCh2b2lkKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTY3LXtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD01NzE9c3RhdGljIGlubGluZSBpbnQgc2hhcmUodW5zaWduZWQgbG9uZyBhZGRyLCB1MTYgY21kKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTU3OC1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjU3OTpcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01ODAtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NjY0PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHV2X2tleXNfYXR0cl9ncm91cCA9IHtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNjY3LVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjY2ODpzdGF0aWMgc3NpemVfdCB1dl9pc19wcm90X3ZpcnRfZ3Vlc3Qoc3RydWN0IGtvYmplY3QgKmtvYmosXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNjY5LVx0XHRcdFx0ICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NjgwPXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdXZfcHJvdF92aXJ0X2d1ZXN0ID1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo2ODE6XHRfX0FUVFIocHJvdF92aXJ0X2d1ZXN0LCAwNDQ0LCB1dl9pc19wcm90X3ZpcnRfZ3Vlc3QsIE5VTEwpO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jLTY4Mi1cbi0tXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTE0MD1ib29sIGZvcmNlX2RtYV91bmVuY3J5cHRlZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTE0MS17XG5hcmNoL3MzOTAvbW0vaW5pdC5jOjE0MjpcdHJldHVybiBpc19wcm90X3ZpcnRfZ3Vlc3QoKTtcbmFyY2gvczM5MC9tbS9pbml0LmMtMTQzLX1cbi0tXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTE0Nj1zdGF0aWMgdm9pZCBfX2luaXQgcHZfaW5pdCh2b2lkKVxuYXJjaC9zMzkwL21tL2luaXQuYy0xNDcte1xuYXJjaC9zMzkwL21tL2luaXQuYzoxNDg6XHRpZiAoIWlzX3Byb3RfdmlydF9ndWVzdCgpKVxuYXJjaC9zMzkwL21tL2luaXQuYy0xNDktXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTI1OT1ib29sIGFwX2lzX3NlX2d1ZXN0KHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI2MC17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI2MTpcdHJldHVybiBpc19wcm90X3ZpcnRfZ3Vlc3QoKSBcdTAwMjZcdTAwMjYgYXBfc2JfYXZhaWxhYmxlKCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI2Mi19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI4Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI4ODpcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yODktXHRcdHJldHVybiAtRU5PREVWO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDgwNwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgczM5MCBBcmNoaXRlY3R1cmUgZm9yIFZpcnR1YWwgR3Vlc3QgSW5mb3JtYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIHRvIGRldGVybWluZSBpZiB3ZSYjMzk7cmUgcnVubmluZyBpbiBhIHZpcnR1YWwgZ3Vlc3QgZW52aXJvbm1lbnQgb24gczM5MC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGlzX3Byb3RfdmlydF9ndWVzdGAuIFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgcGxhY2UgdG8gbG9vayBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgdmlydHVhbCBtYWNoaW5lIGRldGVjdGlvbiwgZXNwZWNpYWxseSBvbiBzMzkwLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlZmluaXRpb24sIGFuZCB0aGUgc291cmNlIGZpbGUgbWVudGlvbmVkIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQg4oCTIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaGAuIFRoaXMgbGlrZWx5IGhvbGRzIHRoZSBtYWNybyBkZWZpbml0aW9uIG9yIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIHRoYXQgd2lsbCBnaXZlIG1lIHRoZSBhbnN3ZXIuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGhlYWRlciBhbmQgdmVyaWZ5LiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgbG93LWxldmVsIGhhcmR3YXJlIG9yIGh5cGVydmlzb3IgZGV0ZWN0aW9uIG1lY2hhbmlzbXMgaW4gdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgYmVpbmcgdXNlZCB0byBwcm9wZXJseSBpbnRlcnByZXQgdGhlIHJlc3VsdHMgYW5kIGludGVncmF0ZSBpdCB3aXRoIHRoZSByZXN0IG9mIG15IHJlc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTY0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NjQ6XHRleHRlcm4gaW50IHByb3RfdmlydF9ndWVzdDtcbiA1NjU6XHRcbiA1NjY6XHRzdGF0aWMgaW5saW5lIGludCBpc19wcm90X3ZpcnRfZ3Vlc3Qodm9pZClcbiA1Njc6XHR7XG4gNTY4Olx0XHRyZXR1cm4gcHJvdF92aXJ0X2d1ZXN0O1xuIDU2OTpcdH1cbiA1NzA6XHRcbiA1NzE6XHRzdGF0aWMgaW5saW5lIGludCBzaGFyZSh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBjbWQpXG4gNTcyOlx0e1xuIDU3MzpcdFx0c3RydWN0IHV2X2NiX3NoYXJlIHV2Y2IgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjI4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKlRyYWNraW5nIERvd24gYSBWYXJpYWJsZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYHByb3RfdmlydF9ndWVzdGAgdmFyaWFibGUgaXMgYWN0dWFsbHkgZGVmaW5lZCBhbmQgYXNzaWduZWQgYSB2YWx1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBJdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cywgYW5kIEkgaGF2ZSBhIGZlZWxpbmcgaXQmIzM5O3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBiZWhhdmlvciBJJiMzOTttIHRyeWluZyB0byBhbmFseXplLiBUaW1lIHRvIGdldCBteSBzZWFyY2gtZnUgd29ya2luZy4gSSBuZWVkIHRvIHBpbnBvaW50IGl0cyBvcmlnaW4gcXVpY2tseSB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm90X3ZpcnRfZ3Vlc3QgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvYm9vdC91di5jPTE1PXZvaWQgdXZfcXVlcnlfaW5mbyh2b2lkKVxuLS1cbmFyY2gvczM5MC9ib290L3V2LmMtNTQtXHQgICAgdGVzdF9iaXRfaW52KEJJVF9VVkNfQ01EX1JFTU9WRV9TSEFSRURfQUNDRVNTLCAodW5zaWduZWQgbG9uZyAqKXV2Y2IuaW5zdF9jYWxsc19saXN0KSlcbmFyY2gvczM5MC9ib290L3V2LmM6NTU6XHRcdHByb3RfdmlydF9ndWVzdCA9IDE7XG5hcmNoL3MzOTAvYm9vdC91di5jLTU2LX1cbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9Njc0PXN0YXRpYyBzc2l6ZV90IHV2X2lzX3Byb3RfdmlydF9ob3N0KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy02NzktXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NjgwOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdXZfcHJvdF92aXJ0X2d1ZXN0ID1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy02ODEtXHRfX0FUVFIocHJvdF92aXJ0X2d1ZXN0LCAwNDQ0LCB1dl9pc19wcm90X3ZpcnRfZ3Vlc3QsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY0NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVsdHJhdmlzb3IgRmFjaWxpdHkgYW5kIGl0cyBJbXBsaWNhdGlvbnMgZm9yIFZ1bG5lcmFiaWxpdHkgUmVzZWFyY2gqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBgdXZfZmluZF9zZWNyZXRgIGdldHMgY2FsbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGl0JiMzOTtzIHRyaWdnZXJlZCBpZiBgdXZfcXVlcnlfaW5mb2Agd29ya3MgYW5kIFVWQyBjb21tYW5kcyBhcmUgYWNjZXNzaWJsZSB3aXRoaW4gYGFyY2gvczM5MC9ib290L3V2LmNgLiBCdXQgdGhhdCBoaW5nZXMgb24gdGhlIGh5cGVydmlzb3IgYWN0dWFsbHkgc3VwcG9ydGluZyBhbmQgZW5hYmxpbmcgdGhlIFVsdHJhdmlzb3IgZmFjaWxpdHkgZm9yIHRoZSBndWVzdC4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBTeXprYWxsZXIgc2V0dXAuIEl0IHJ1bnMgb24gR0NFLCBhbmQgR0NFIGRvZXNuJiMzOTt0IGhhdmUgbmF0aXZlIHMzOTB4IGhhcmR3YXJlOyBpdCYjMzk7cyB1c2luZyBRRU1VIGluIFRDRyBtb2RlIGluc3RlYWQuIFRoZSBwcm9ibGVtIGlzLCBRRU1VIFRDRyAqZG9lc24mIzM5O3QqIHN1cHBvcnQgdGhlIFVsdHJhdmlzb3IgZmFjaWxpdHksIHdoaWNoIG1lYW5zIG5vIFNlY3VyZSBFeGVjdXRpb24uIFNvLCBgcHJvdF92aXJ0X2d1ZXN0YCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIHplcm8gaW4gdGhpcyBjYXNlLgoKSWYgYHByb3RfdmlydF9ndWVzdGAgaXMgemVybywgdGhlbiBgcGtleV91dl9pbml0YCB3aWxsIHJldHVybiBgLUVOT0RFVmAuIEFuZCBpZiBgcGtleV91dl9pbml0YCByZXR1cm5zIGAtRU5PREVWYCwgdGhlIGNyaXRpY2FsIGB1dl9oYW5kbGVyYCBpc24mIzM5O3QgcmVnaXN0ZXJlZC4gVGhhdCYjMzk7cyBhIG1ham9yIHJlZCBmbGFnIGJlY2F1c2UgaWYgYHV2X2hhbmRsZXJgIGlzbiYjMzk7dCByZWdpc3RlcmVkLCBgdXZfZmluZF9zZWNyZXRgIG5ldmVyIGdldHMgY2FsbGVkIHRocm91Z2ggdGhpcyBwYXRoLgoKQnV0IHdhaXQsIGlzIGB1dl9maW5kX3NlY3JldGAgY2FsbGVkIGZyb20gc29tZXdoZXJlIGVsc2U/IEkgbmVlZCB0byBjaGVjay4gSSBzYXcgbWVudGlvbnMgb2YgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYCwgYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AsIGFuZCBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNgLgoKTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYC4gTm9wZSwgdGhhdCYjMzk7cyBqdXN0IGEgZGVjbGFyYXRpb24uIE9rLCBzbyB3aGVyZSBlbHNlPyBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmNgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NTgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBTeXprYWxsZXIgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgdHJhY2VkIHRoZSBjYWxsIHBhdGggb2YgYHV2X2ZpbmRfc2VjcmV0YC4gSXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNgLiBUaGF0IGZpbGUsIGBwa2V5X3V2LmNgLCBpcyBpbml0aWFsaXplZCBvbmx5IGlmIGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgaXMgdHJ1ZS4gTm93LCBzeXprYWxsZXIgcnVucyBzMzkweCB1bmRlciBRRU1VIFRDRywgYW5kIGluIHRoYXQgc2V0dXAsIGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgaXMgZGVmaW5pdGVseSBmYWxzZS4gU28sIGJhc2VkIG9uIHRoYXQsIHRoZSBjb2RlJiMzOTtzIHVucmVhY2hhYmxlLiBCdXQgd2FpdC4uLiBkb2VzIHN5emthbGxlciB1c2UgS1ZNIHNvbWV0aW1lcz8gSSBrbm93IHRoZXJlJiMzOTtzIGFuIHMzOTB4IGluc3RhbmNlIG9uIEdDRSwgd2hpY2ggcnVucyBRRU1VIFRDRy4gQnV0IGV2ZW4gaWYgdGhlcmUgd2VyZSBLVk0gaW5zdGFuY2VzLCBTZWN1cmUgRXhlY3V0aW9uIChwcm90dmlydCkgbmVlZHMgc3BlY2lmaWMgc2V0dXA6IGEgUUVNVSBjb21tYW5kIGxpbmUgd2l0aCBgcHJvdHZpcnRgLCBhbmQgYSBob3N0IHdpdGggVWx0cmF2aXNvci4gU3l6a2FsbGVyIGlzIG5vdCBkb2luZyB0aGF0LiBJdCBib290cyBhIHN0YW5kYXJkIHZtbGludXggYW5kIGRvZXNuJiMzOTt0IHVzZSB0aGUgc3BlY2lhbCBib290bG9hZGVyIGBnZW5wcm90aW1nYCBuZWVkZWQgZm9yIGEgc2VjdXJlIGltYWdlLgoKSG9sZCBvbiwgY291bGQgYHV2X3F1ZXJ5X2luZm9gIHN1Y2NlZWQgaW4gUUVNVSBUQ0c/IE5vcGUuIFFFTVUgVENHIGRvZXNuJiMzOTt0IGltcGxlbWVudCB0aGUgVWx0cmF2aXNvciBDYWxsIChVVkMpIGluc3RydWN0aW9uLCBvciBpZiBpdCBkb2VzLCBpdCBkb2VzbiYjMzk7dCBkbyB0aGUgU2VjdXJlIEV4ZWN1dGlvbiBzdHVmZi4gU28sIGl0JiMzOTtzIGRlZmluaXRlbHkgdW5yZWFjaGFibGUgaW4gUUVNVS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGlzIGZvciBzeXprYWxsZXIsIGNvbnNpZGVyaW5nIHRoZSBwcm9tcHQgSSYjMzk7bSB3b3JraW5nIHdpdGg6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFRoYXQmIzM5O3MgYSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IHNjZW5hcmlvLgoKT2theSwgbGV0JiMzOTtzIG5haWwgdGhpcyBkb3duLiBgcGtleV91di5jYCBpcyB0aGUga2V5LiBJZiBgaXNfcHJvdF92aXJ0X2d1ZXN0KClgIGlzIGZhbHNlLCBgcGtleV91dl9pbml0YCByZXR1cm5zIGAtRU5PREVWYC4gVGhlIG1vZHVsZSBmYWlscyB0byBsb2FkLCBvciBpZiBidWlsdC1pbiwgdGhlIGluaXRjYWxsIGZhaWxzLiBUaGVyZWZvcmUsIGB1dl9oYW5kbGVyYCBpcyBuZXZlciByZWdpc3RlcmVkLCBhbmQgYHV2X2ZpbmRfc2VjcmV0YCBpcyBuZXZlciBjYWxsZWQuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIGVudmlyb25tZW50cy4gVGhlIHByb21wdCBzYXlzIHRoYXQgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIHJlc3VsdCBpbiBXb3J0aEZ1enppbmc9ZmFsc2UuIFRoaXMgcmVxdWlyZXMgczM5MHggU2VjdXJlIEV4ZWN1dGlvbiAoVWx0cmF2aXNvciksIHdoaWNoIGlzIGEgaGFyZHdhcmUgZmVhdHVyZSwgbm90IGVtdWxhdGVkIGJ5IFFFTVUgVENHLiBBbHNvLCBpdCByZXF1aXJlcyBhIHNwZWNpYWxseSBjcmFmdGVkIGVuY3J5cHRlZCBib290IGltYWdlIChgZ2VucHJvdGltZ2ApLCBldmVuIG9uIEtWTS4gU28sIHRoaXMgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzeXprYWxsZXIuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaXMgYHV2X2ZpbmRfc2VjcmV0YCBleHBvcnRlZCBhbmQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBlbHNld2hlcmU/IEl0JiMzOTtzIGBFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldClgLiBCdXQgSSBjaGVja2VkIGFsbCB0aGUgY2FsbGVycyBpbiB0aGUga2VybmVsIHRyZWUgdXNpbmcgYGdpdCBncmVwIHV2X2ZpbmRfc2VjcmV0YCBhbmQgdGhlIG9ubHkgY2FsbGVyIGlzIGBwa2V5X3V2LmNgLiBTbyBJJiMzOTttIGNvbmZpZGVudC4KCk9rYXksIGxldCBtZSBqdXN0IHJ1biBhIHF1aWNrIGNoZWNrIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbWlzc2VkIGNhbGxlcnMgb2YgYHV2X2ZpbmRfc2VjcmV0YC4gQWZ0ZXIgYSBxdWljayBkb3VibGUtY2hlY2sgSSBhbSBjb25maWRlbnQgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2ZpbmRfc2VjcmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxMz1zdGF0aWMgaW5saW5lIGludCB1dl9yZW1vdmVfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo2MTg6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc0LSAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzgwOmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjA9TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O3MzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMi0vKlxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0LSAqL1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTktXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMDA6XHRyYyA9IHV2X2ZpbmRfc2VjcmV0KHNlY3JldF9pZCwgdXZfbGlzdCwgc2VjcmV0KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cdG11dGV4X3VubG9jayhcdTAwMjZ1dl9saXN0X211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NTQKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgUGF0aCBDb25maXJtZWQqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgb25seSBldmVyIGNhbGxlZCBieSBgcGtleV91di5jYC4gRnVydGhlciBpbnZlc3RpZ2F0aW9uIHJldmVhbHMgdGhhdCBgcGtleV91di5jYCBpdHNlbGYgb25seSBiZWNvbWVzIGFjdGl2ZSB1bmRlciB0aGUgY29uZGl0aW9uIGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgZXZhbHVhdGVzIHRvIHRydWUuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBkZWFscyB3aXRoIFNlY3VyZSBFeGVjdXRpb24gKFVsdHJhdmlzb3IpIGNhcGFiaWxpdGllcyBvbiBzMzkweC4KClRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSAqbm90KiBzb21ldGhpbmcgd2UmIzM5O2xsIGJlIGFibGUgdG8gaGl0IGR1cmluZyBmdXppbmcgd2l0aCBzeXprYWxsZXIuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgVENHIGFyZSBzaW1wbHkgbm90IGVxdWlwcGVkIHRvIHRyaWdnZXIgdGhpcyBwYXJ0aWN1bGFyIGNvbmRpdGlvbi4gV2UmIzM5O2QgbmVlZCBzb21ldGhpbmcgdmVyeSBzcGVjaWZpYywgbGlrZSBhIGJlc3Bva2Ugc2VjdXJlIGJvb3QgaW1hZ2Ugd2l0aCBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIGVuYWJsZWQuIEkmIzM5O20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIHVuZnV6emFibGUuIExldCYjMzk7cyBzZXQgV29ydGhGdXp6aW5nPWZhbHNlIGZvciB0aGlzIGNhc2UuIE15IHJlYXNvbmluZyBpcyB0aGF0IGl0IGZ1bmRhbWVudGFsbHkgZGVwZW5kcyBvbiBhIHBsYXRmb3JtIGZlYXR1cmUgdGhhdCYjMzk7cyB1bmF2YWlsYWJsZSBpbiBvdXIgc3RhbmRhcmQgdGVzdGluZyBzZXR1cC4gTm8gcG9pbnQgd2FzdGluZyBjeWNsZXMgb24gc29tZXRoaW5nIHRoYXQmIzM5O3MgdW5yZWFjaGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHV2X2ZpbmRfc2VjcmV0YCBpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBgcGtleV91dmAgY3J5cHRvIGRyaXZlci4gVGhpcyBkcml2ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIFVsdHJhdmlzb3IgQ2FsbCAoVVZDKSBmdW5jdGlvbmFsaXR5IGFyZSBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhcyBhbiBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIChwcm90ZWN0ZWQgdmlydHVhbGl6YXRpb24pIGd1ZXN0LiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIChJQk0gejE1JiM0Mzsgd2l0aCBVbHRyYXZpc29yKSBhbmQgYSBzcGVjaWFsbHkgY3JhZnRlZCBlbmNyeXB0ZWQgYm9vdCBpbWFnZSAoZ2VucHJvdGltZyksIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgVENHIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1dl9maW5kX3NlY3JldGAgaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyBvbmx5IGNhbGxlZCBieSB0aGUgYHBrZXlfdXZgIGNyeXB0byBkcml2ZXIuIFRoaXMgZHJpdmVyIGFuZCB0aGUgdW5kZXJseWluZyBVbHRyYXZpc29yIENhbGwgKFVWQykgZnVuY3Rpb25hbGl0eSBhcmUgb25seSBhY3RpdmUgd2hlbiB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgYXMgYW4gczM5MHggU2VjdXJlIEV4ZWN1dGlvbiAocHJvdGVjdGVkIHZpcnR1YWxpemF0aW9uKSBndWVzdC4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAoSUJNIHoxNSYjNDM7IHdpdGggVWx0cmF2aXNvcikgYW5kIGEgc3BlY2lhbGx5IGNyYWZ0ZWQgZW5jcnlwdGVkIGJvb3QgaW1hZ2UgKGdlbnByb3RpbWcpLCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIFRDRyB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjI6MTYuNDIzNDUxNTM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NjAyMTYwNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHV2X2ZpbmRfc2VjcmV0YCBpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBgcGtleV91dmAgY3J5cHRvIGRyaXZlci4gVGhpcyBkcml2ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIFVsdHJhdmlzb3IgQ2FsbCAoVVZDKSBmdW5jdGlvbmFsaXR5IGFyZSBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhcyBhbiBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIChwcm90ZWN0ZWQgdmlydHVhbGl6YXRpb24pIGd1ZXN0LiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIChJQk0gejE1KyB3aXRoIFVsdHJhdmlzb3IpIGFuZCBhIHNwZWNpYWxseSBjcmFmdGVkIGVuY3J5cHRlZCBib290IGltYWdlIChnZW5wcm90aW1nKSwgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBUQ0cgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjI6MTYuNDIzNDYyNDM0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgyMzk3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0Mzg0OTZlZjFjZmJiMjExYjI3NGE3ZmMwZjhjOWFiODE0NGIxMjgwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA5OjIyOjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xcbmluZGV4IGEyODRmOThkOTcxNjguLmQ5NzBiMTVlZjEyNmQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuQEAgLTc4MSwxMSArNzgxLDE0IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuIFxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4gXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXFxuIHtcXG4tXFx0dTE2IHN0YXJ0X2lkeCA9IDA7XFxuK1xcdHUxNiBzdGFydF9pZHg7XFxuIFxcdHUxNiBsaXN0X3JjO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0bGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcXG4rXFxuIFxcdGRvIHtcXG4rXFx0XFx0c3RhcnRfaWR4ID0gbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xcbiBcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcXHUwMDI2bGlzdF9yYywgTlVMTCk7XFxuIFxcdFxcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcXHUwMDI2XFx1MDAyNiBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHtcXG4gXFx0XFx0XFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXFxuQEAgLTc5Niw3ICs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbiBcXHRcXHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcXG4gXFx0XFx0aWYgKHJldCA9PSAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRcXHRzdGFydF9pZHggPSBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHg7XFxuIFxcdH0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSBcXHUwMDI2XFx1MDAyNiBzdGFydF9pZHggXFx1MDAzYyBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHgpO1xcbiBcXG4gXFx0cmV0dXJuIC1FTk9FTlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIyOjE2LjkwMjcwOTY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA5MTIyODg3NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXZfZmluZF9zZWNyZXRgIGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhlIGBwa2V5X3V2YCBjcnlwdG8gZHJpdmVyLiBUaGlzIGRyaXZlciBhbmQgdGhlIHVuZGVybHlpbmcgVWx0cmF2aXNvciBDYWxsIChVVkMpIGZ1bmN0aW9uYWxpdHkgYXJlIG9ubHkgYWN0aXZlIHdoZW4gdGhlIHN5c3RlbSBpcyBydW5uaW5nIGFzIGFuIHMzOTB4IFNlY3VyZSBFeGVjdXRpb24gKHByb3RlY3RlZCB2aXJ0dWFsaXphdGlvbikgZ3Vlc3QuIFRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgKElCTSB6MTUrIHdpdGggVWx0cmF2aXNvcikgYW5kIGEgc3BlY2lhbGx5IGNyYWZ0ZWQgZW5jcnlwdGVkIGJvb3QgaW1hZ2UgKGdlbnByb3RpbWcpLCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIFRDRyB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0Mzg0OTZlZjFjZmJiMjExYjI3NGE3ZmMwZjhjOWFiODE0NGIxMjgwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6MjI6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbmluZGV4IGEyODRmOThkOTcxNjguLmQ5NzBiMTVlZjEyNmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuQEAgLTc4MSwxMSArNzgxLDE0IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbiBcdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXG4ge1xuLVx0dTE2IHN0YXJ0X2lkeCA9IDA7XG4rXHR1MTYgc3RhcnRfaWR4O1xuIFx0dTE2IGxpc3RfcmM7XG4gXHRpbnQgcmV0O1xuIFxuK1x0bGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHggPSAwO1xuK1xuIFx0ZG8ge1xuK1x0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbiBcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG4gXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4gXHRcdFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXG5AQCAtNzk2LDcgKzc5OSw2IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gXHRcdHJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpO1xuIFx0XHRpZiAocmV0ID09IDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHR9IHdoaWxlIChsaXN0X3JjID09IFVWQ19SQ19NT1JFX0RBVEEgXHUwMDI2XHUwMDI2IHN0YXJ0X2lkeCBcdTAwM2MgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHgpO1xuIFxuIFx0cmV0dXJuIC1FTk9FTlQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjoxNi45MDI3MTE1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3ODMwMzgzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYHV2X2ZpbmRfc2VjcmV0YCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkndmUgbWFkZSBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBjaGFuZ2UgdG8gdGhlIGxvb3AncyBsb2dpYy4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBgc3RhcnRfaWR4YCB3YXMgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgdGhlbiB1cGRhdGVkICphdCB0aGUgZW5kKiBvZiB0aGUgbG9vcCB3aXRoIHRoZSB2YWx1ZSBvZiBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgLiBOb3csIGl0IGluaXRpYWxpemVzIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgYmVmb3JlIHRoZSBsb29wLCBhbmQgaW5zaWRlIHRoZSBsb29wLCB0aGV5IGFyZSBzZXR0aW5nIGBzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAsIHRoZW4gdXNpbmcgdGhhdCB2YXJpYWJsZSBpbiB0aGUgbG9vcCBjb25kaXRpb24uXG5cbkhvbGQgb24uLi4gdGhhdCBsb29wIGNvbmRpdGlvbi4gSXQncyBgd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSBcdTAwMjZcdTAwMjYgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeCk7YC4gSWYgYHN0YXJ0X2lkeGAgd2FzIHVwZGF0ZWQgKmFmdGVyKiB0aGUgbG9vcCBib2R5LCB0aGVuIHRoZSBjb21wYXJpc29uIGBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCB3b3VsZCBlc3NlbnRpYWxseSBhbHdheXMgYmUgZmFsc2UgYmVjYXVzZSBgc3RhcnRfaWR4YCBhbmQgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBhcmUgYWx3YXlzIGJlaW5nIGFzc2lnbmVkIHRoZSBzYW1lIHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AsIHJpZ2h0P1xuXG5CdXQgbm93LCBgc3RhcnRfaWR4YCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgdXZfbGlzdF9zZWNyZXRzYCwgYW5kIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaXMgdXBkYXRlZCAqZHVyaW5nKiB0aGUgY2FsbCB0byBgdXZfbGlzdF9zZWNyZXRzYC4gVGh1cywgdGhlIGxvb3AgY29uZGl0aW9uIGNoZWNrcyBpZiB0aGUgc2VhcmNoIGluZGV4IGhhcyBhZHZhbmNlZC4gVGhhdCBtYWtlcyBtdWNoIG1vcmUgc2Vuc2UuIEl0IGNoZWNrcyBpZiB0aGUgc2VhcmNoIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgbmV3IHVwcGVyIGxpbWl0LlxuXG5BbHJpZ2h0LCBsZXQncyBjb25maXJtIGlmIHRoaXMgaXMgczM5MCBzcGVjaWZpYy4gWWVwLCBpdCdzIHJpZ2h0IHRoZXJlIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLiBTbywgaXMgdGhpcyByZWFjaGFibGUgaW4gUUVNVT8gUzM5MCBpcyBzdXBwb3J0ZWQgYnkgc3l6a2FsbGVyLiBJIHNob3VsZCBjaGVjayBob3cgdG8gZmluZCBvdXQgaWYgYHV2X2ZpbmRfc2VjcmV0YCBpcyByZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjoyMy42ODU3NTUwOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwNjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9maW5kX3NlY3JldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC91di5jPTc1Nz1zdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3Mi0vKipcXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzczOiAqIHV2X2ZpbmRfc2VjcmV0KCkgLSBzZWFyY2ggc2VjcmV0IG1ldGFkYXRhIGZvciBhIGdpdmVuIHNlY3JldCBpZC5cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc0LSAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3OS0gKi9cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzgwOmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4MS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA1LX1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjoyMy43MzI0NjY0ODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE5ODkyOTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgQ2FsbCBTaXRlcyBvZiBgdXZfZmluZF9zZWNyZXRgKipcblxuQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGludm9sdmluZyBgdXZfZmluZF9zZWNyZXRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBUaGF0J3MgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gS25vd2luZyBpdHMgY2FsbCBzaXRlcyB3aWxsIHJldmVhbCB0aGUgY29udGV4dHMgaW4gd2hpY2ggaXQgb3BlcmF0ZXMsIHRoZSBkYXRhIGl0J3MgbGlrZWx5IHByb2Nlc3NpbmcsIGFuZCBwb3RlbnRpYWxseSB0aGUgc2VjdXJpdHkgY29uY2VybnMgaXQncyBhZGRyZXNzaW5nIChvciBjcmVhdGluZyEpLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCBtYXAgb3V0IHRob3NlIGNvbm5lY3Rpb25zLiBMZXQncyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIyOjI2LjY1MjM2MjU4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc1MzcxMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2ZpbmRfc2VjcmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTM9c3RhdGljIGlubGluZSBpbnQgdXZfcmVtb3ZlX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjE4OmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3NC0gKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MDppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwNjpFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcXFwiczM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTAwOlxcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjoyOC42Mjc3NDI4OTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU1NzIxMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFMzOTAgQ3J5cHRvIEtleSBEcml2ZXIqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBhIHBpZWNlIG9mIGNvZGUgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gVGhhdCdzIHdoZXJlIGl0J3MgYWxsIGhhcHBlbmluZywgaHVoPyBJIHNob3VsZCBkaXZlIGRpcmVjdGx5IGludG8gdGhhdCBzcGVjaWZpYyBmaWxlIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uLiBTZWVtcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgUzM5MCBhcmNoaXRlY3R1cmUgYW5kIGl0cyBjcnlwdG9ncmFwaGljIGtleSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVVYgZnJhbWV3b3JrLiBMZXQncyBzZWUgd2hhdCB0aGV5J3ZlIGdvdCB0aGVyZS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgaW1wbGVtZW50YXRpb24gZGV0YWlscywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgdGhleSd2ZSBlbXBsb3llZC4gSXQncyB0aW1lIHRvIGdldCBoYW5kcy1vbiBhbmQgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjA1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjI6MzEuNzgzNDY3NzEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDkyODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9zZWNyZXRfbWV0YWRhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9ODM9c3RhdGljIGJvb2wgaXNfdXZfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga2V5dHlwZSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTkyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjkzOnN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTA2PXN0YXRpYyBpbnQgcmV0cmlldmVfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMTI6XFx0cmMgPSBnZXRfc2VjcmV0X21ldGFkYXRhKHNlY3JldF9pZCwgXFx1MDAyNnNlY3JldF9tZXRhX2RhdGEpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMy1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0Ny1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNDg6XFx0cmMgPSBnZXRfc2VjcmV0X21ldGFkYXRhKHQtXFx1MDAzZXNlY3JldF9pZCwgXFx1MDAyNnNlY3JldF9tZXRhX2RhdGEpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0OS1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIyOjMxLjgzNzk2NjA5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMDI5MjY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3RlY3RlZCBLZXkgVVYgSGFuZGxlcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHBrZXlfdXYuY2AgZmlsZS4gUmlnaHQsIGEgXCJwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcIi4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgaW1tZWRpYXRlbHkgYmVncyB0aGUgcXVlc3Rpb246IGhvdyBpcyB0aGlzIGJlaW5nIHRyaWdnZXJlZD8gSXMgaXQgYSBjb3JlIGNvbXBvbmVudCBvciBpcyBpdCByZWFjaGFibGUgdmlhIG11bHRpcGxlIHBhdGhzPyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZW50cnkgcG9pbnRzLlxuXG5JJ2xsIGNoZWNrIHRoZSByZWxhdGVkIGNvZGUgdG8gc2VlIHdoYXQgY2x1ZXMgSSBjYW4gZ2xlYW4uIExldCBtZSBsb29rIGF0IGJvdGggYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYCBhbmQgYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuY2AuIEhvcGVmdWxseSwgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgZmlsZXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBmbG93LiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjI6MzUuMTQ4MjYyMzIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODU4NzUzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl92ZXJpZnlrZXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTkwPXN0YXRpYyBpbnQgdXZfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqX2FwcW5zIF9fYWx3YXlzX3VudXNlZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIzMi1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMzM6c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMzQtXFx0XFx0XFx0dTE2ICpfY2FyZCBfX2Fsd2F5c191bnVzZWQsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yNzI9c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3Ny1cXHQua2V5X3RvX3Byb3RrZXlcXHRcXHQgPSB1dl9rZXkycHJvdGtleSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNzg6XFx0LnZlcmlmeV9rZXlcXHRcXHQgPSB1dl92ZXJpZnlrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjc5LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIyOjM1LjIwNjg2MTE4MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM3OTEzNjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIGEgTmV3IGBwa2V5X2hhbmRsZXJgIFJlZ2lzdHJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoaXMgYHBrZXlfaGFuZGxlcmAgcmVnaXN0cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBsZXQncyBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgaXMgYWN0dWFsbHkgKmhhbmRsZWQqLlwiIEdpdmVuIHRoZSBjb250ZXh0LCBteSBtZW50YWwgbWFwIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBrZXJuZWwncyBjcnlwdG8gc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldyBrZXkgdHlwZS5cblxuTXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBsb3ctbGV2ZWwgaW1wbGVtZW50YXRpb25zIGFuZCBBUEkgaW50ZXJhY3Rpb25zIHJlbGF0ZWQgdG8ga2V5IGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgYmUgYSBoYXJkd2FyZS1hY2NlbGVyYXRlZCBjcnlwdG8gb3BlcmF0aW9uIG9mIHNvbWUga2luZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLCBhdCB0aGUgaGVhcnQgb2YgdGhlIHN5c3RlbS4gSSdsbCBiZSBsb29raW5nIGZvciByZWdpc3RyYXRpb24gbWVjaGFuaXNtcywgZGF0YSBzdHJ1Y3R1cmVzIGRlZmluaW5nIHRoZSBoYW5kbGVyIGl0c2VsZiwgYW5kIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaW1wbGVtZW50IHRoZSBrZXkgb3BlcmF0aW9ucy4gSSBleHBlY3QgYSBmZXcgbGV2ZWxzIG9mIGluZGlyZWN0aW9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzOTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjozOC41NDQ3NzgzNDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Mjk4MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrZXlfaGFuZGxlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MjU9c3RhdGljIGludCBrZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMyLVxcdC8qIHRyeSB0aGUgZGlyZWN0IHdheSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozMzpcXHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM0LVxcdFxcdFxcdFxcdFxcdCBrZXksIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zOS1cXHRpZiAocmMgPT0gLUVOT0RFVikge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0MDpcXHRcXHRyYyA9IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAga2V5LCBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU9aW50IHBrZXlfa2V5MnByb3RrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02Mi1cXHRpZiAocmMgPT0gLUVOT0RFVikge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo2MzpcXHRcXHRwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTY0LVxcdFxcdHJjID0ga2V5MnByb3RrZXkoTlVMTCwgMCwga2V5LCBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9OTI9c3RhdGljIGludCBwa2V5X2lvY3RsX2dlbnNlY2soc3RydWN0IHBrZXlfZ2Vuc2VjayBfX3VzZXIgKnVncylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMDQtXFx0a2V5YnVmbGVuID0gc2l6ZW9mKGtncy5zZWNrZXkuc2Vja2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTA1OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoXFx1MDAyNmFwcW4sIDEsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEwNi1cXHRcXHRcXHRcXHQgIGtncy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTE2PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9jbHIyc2VjayhzdHJ1Y3QgcGtleV9jbHIyc2VjayBfX3VzZXIgKnVjcylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMjgtXFx0a2V5YnVmbGVuID0gc2l6ZW9mKGtjcy5zZWNrZXkuc2Vja2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTI5OlxcdHJjID0gcGtleV9oYW5kbGVyX2Nscl90b19rZXkoXFx1MDAyNmFwcW4sIDEsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEzMC1cXHRcXHRcXHRcXHQgICAgIGtjcy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTQyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9zZWMycHJvdGsoc3RydWN0IHBrZXlfc2VjMnByb3RrIF9fdXNlciAqdXNwKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTE1My1cXHRrc3AucHJvdGtleS5sZW4gPSBzaXplb2Yoa3NwLnByb3RrZXkucHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjE1NDpcXHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShcXHUwMDI2YXBxbiwgMSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTU1LVxcdFxcdFxcdFxcdFxcdCBrc3Auc2Vja2V5LnNlY2tleSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yMTU9c3RhdGljIGludCBwa2V5X2lvY3RsX2ZpbmRjYXJkKHN0cnVjdCBwa2V5X2ZpbmRjYXJkIF9fdXNlciAqdWZjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIyOS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjMwOlxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzMS1cXHRcXHRcXHRcXHRcXHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNC1cXHRpZiAocmMgPT0gLUVOT0RFVilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjM1OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNi1cXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI1Mz1zdGF0aWMgaW50IHBrZXlfaW9jdGxfc2tleTJwa2V5KHN0cnVjdCBwa2V5X3NrZXkycGtleSBfX3VzZXIgKnVzcClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yNjEtXFx0a3NwLnByb3RrZXkubGVuID0gc2l6ZW9mKGtzcC5wcm90a2V5LnByb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyNjI6XFx0cmMgPSBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoTlVMTCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjYzLVxcdFxcdFxcdFxcdFxcdCBrc3Auc2Vja2V5LnNlY2tleSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNzY9c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleShzdHJ1Y3QgcGtleV92ZXJpZnlrZXkgX191c2VyICp1dmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjg2LVxcdGt2ay5kb21haW4gPSAweEZGRkY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjI4NzpcXHRyYyA9IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGt2ay5zZWNrZXkuc2Vja2V5LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yODgtXFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoa3ZrLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMwNT1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2VucHJvdGsoc3RydWN0IHBrZXlfZ2VucHJvdGsgX191c2VyICp1Z3ApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzEzLVxcdGtncC5wcm90a2V5LmxlbiA9IHNpemVvZihrZ3AucHJvdGtleS5wcm90a2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MzE0OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCwga2dwLmtleXR5cGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMxNS1cXHRcXHRcXHRcXHQgIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMyNj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGsoc3RydWN0IHBrZXlfdmVyaWZ5cHJvdGsgX191c2VyICp1dnApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzU1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozNTY6XFx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSh0bXBidWYsIHNpemVvZigqdCksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM1Ny1cXHRcXHRcXHRcXHQgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTM5MD1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2Vuc2VjazIoc3RydWN0IHBrZXlfZ2Vuc2VjazIgX191c2VyICp1Z3MpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDE0LVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NDE1OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoYXBxbnMsIGtncy5hcHFuX2VudHJpZXMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxNi1cXHRcXHRcXHRcXHQgIHUsIGtncy50eXBlLCBrZ3Muc2l6ZSwga2dzLmtleWdlbmZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTQ0Mj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfY2xyMnNlY2syKHN0cnVjdCBwa2V5X2NscjJzZWNrMiBfX3VzZXIgKnVjcylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00NzAtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0NzE6XFx0cmMgPSBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShhcHFucywga2NzLmFwcW5fZW50cmllcyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDcyLVxcdFxcdFxcdFxcdCAgICAgdSwga2NzLnR5cGUsIGtjcy5zaXplLCBrY3Mua2V5Z2VuZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTAzPXN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlrZXkyKHN0cnVjdCBwa2V5X3ZlcmlmeWtleTIgX191c2VyICp1dmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTE0LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1MTU6XFx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShra2V5LCBrdmsua2V5bGVuLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01MTYtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2a3ZrLmNhcmRuciwgXFx1MDAyNmt2ay5kb21haW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU4PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9hcHFuczRrKHN0cnVjdCBwa2V5X2FwcW5zNGtleSBfX3VzZXIgKnVhaylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01NzgtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1Nzk6XFx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShra2V5LCBrYWsua2V5bGVuLCBrYWsuZmxhZ3MsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTU4MC1cXHRcXHRcXHRcXHRcXHRhcHFucywgXFx1MDAyNm5yX2FwcW5zLCAwKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz02MDg9c3RhdGljIGludCBwa2V5X2lvY3RsX2FwcW5zNGt0KHN0cnVjdCBwa2V5X2FwcW5zNGtleXR5cGUgX191c2VyICp1YXQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjIyLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NjIzOlxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGthdC50eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02MjQtXFx0XFx0XFx0XFx0XFx0ICAgIGthdC5jdXJfbWt2cCwga2F0LmFsdF9ta3ZwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYz0zND1zdGF0aWMgTElTVF9IRUFEKGhhbmRsZXJfbGlzdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM2OmludCBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM4OlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zOS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtNzgtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Nzk6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtODAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzo4MTppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTgyLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTMtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6OTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfdW5yZWdpc3Rlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy05NS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMDA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEwMjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTctfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTE4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXliYXNlZCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMjA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoZW51bSBwa2V5X2tleV90eXBlIGt0KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEyMjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMzctfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTM4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTM5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTQwOnZvaWQgcGtleV9oYW5kbGVyX3B1dChjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE0MjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTUtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTU2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3B1dCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNTg6aW50IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU5LVxcdFxcdFxcdFxcdGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Mi17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNjM6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2NC1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTY1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTY2OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGtleSwga2V5bGVuKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Ny1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VrZXlfdG9fcHJvdGtleSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzEtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTcyOlxcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzMtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3NS19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNzY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTc3LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODMtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxODQ6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE4NS1cXHRcXHRcXHRcXHRcXHQgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODkte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTkwOlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmgsICpodG1wWzEwXTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE5MS1cXHRpbnQgaSwgbiA9IDAsIHJjID0gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjE1LX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIxNjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMTg6aW50IHBrZXlfaGFuZGxlcl9nZW5fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTktXFx0XFx0XFx0IHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjIyLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIyMzpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI0LVxcdGludCByYyA9IC1FTk9ERVY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMjY6XFx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGtleXN1YnR5cGUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI3LVxcdGlmIChoIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZWdlbl9rZXkpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMxLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIzMjpcXHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzUtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dlbl9rZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM4OmludCBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM5LVxcdFxcdFxcdCAgICB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0NC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNDU6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0Ni1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjQ4OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0OS1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VjbHJfdG9fa2V5KSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1My1cXHR9XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNTQ6XFx0cGtleV9oYW5kbGVyX3B1dChoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1NS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjU3LX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI1ODpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1OS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2MDppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2MS1cXHRcXHRcXHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY0LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2NTpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY2LVxcdGludCByYyA9IC1FTk9ERVY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjg6XFx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoa2V5LCBrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY5LVxcdGlmIChoIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZXZlcmlmeV9rZXkpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjcyLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI3MzpcXHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc0LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzYtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc3OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc5OmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLCB1MzIgZmxhZ3MsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgKm5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODIte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjgzOlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODQtXFx0aW50IHJjID0gLUVOT0RFVjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI4NjpcXHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChrZXksIGtleWxlbik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODctXFx0aWYgKGggXFx1MDAyNlxcdTAwMjYgaC1cXHUwMDNlYXBxbnNfZm9yX2tleSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg5LVxcdFxcdFxcdFxcdCAgICAgIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyOTA6XFx0cGtleV9oYW5kbGVyX3B1dChoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5MS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjkzLX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NDpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NjppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrZXlzdWJ0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjk3LVxcdFxcdFxcdFxcdCAgIHU4IGN1cl9ta3ZwWzMyXSwgdTggYWx0X21rdnBbMzJdLCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMDE6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMi1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzAzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzA0OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwNS1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VhcHFuc19mb3Jfa2V5dHlwZSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDktXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzEwOlxcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTEtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxMy19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzE2OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxOC0jaWZkZWYgQ09ORklHX01PRFVMRVNcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxOTpcXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBrZXlfaGFuZGxlcl9tb2R1bGVzW10gPSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMjAtI2lmIElTX01PRFVMRShDT05GSUdfUEtFWV9DQ0EpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMzNC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMzNTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwa2V5X2hhbmRsZXJfbW9kdWxlcyk7IGkrKykge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzM2OlxcdFxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMzctXFx0XFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDEtXFx0XFx0XFx0aWYgKGgtXFx1MDAzZW1vZHVsZSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQyOlxcdFxcdFxcdCAgICAhc3RyY21wKGgtXFx1MDAzZW1vZHVsZS1cXHUwMDNlbmFtZSwgcGtleV9oYW5kbGVyX21vZHVsZXNbaV0pKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDMtXFx0XFx0XFx0XFx0Zm91bmQgPSB0cnVlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDgtXFx0XFx0aWYgKCFmb3VuZCkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQ5OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJyZXF1ZXN0X21vZHVsZSglcylcXFxcblxcXCIsIHBrZXlfaGFuZGxlcl9tb2R1bGVzW2ldKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM1MDpcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZShwa2V5X2hhbmRsZXJfbW9kdWxlc1tpXSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTEtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTQtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzU1OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTYtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oPTE0NT1leHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGtleV9hdHRyX2dyb3Vwc1tdO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxNTE6c3RydWN0IHBrZXlfaGFuZGxlciB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTItXFx0c3RydWN0IG1vZHVsZSAqbW9kdWxlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTItXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxOTM6aW50IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjE5NDppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTUtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE5OS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwMDpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjAxOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGVudW0gcGtleV9rZXlfdHlwZSBrdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDI6dm9pZCBwa2V5X2hhbmRsZXJfcHV0KGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjAzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjA0OmludCBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwNS1cXHRcXHRcXHRcXHRjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDctXFx0XFx0XFx0XFx0dTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDg6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwOS1cXHRcXHRcXHRcXHRcXHQgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTItXFx0XFx0XFx0XFx0XFx0IHUzMiAqcHJvdGtleXR5cGUsIHUzMiB4ZmxhZ3MpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjEzOmludCBwa2V5X2hhbmRsZXJfZ2VuX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjE0LVxcdFxcdFxcdCB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxNi1cXHRcXHRcXHQgdTggKmtleWJ1ZiwgdTMyICprZXlidWZsZW4sIHUzMiAqa2V5aW5mbywgdTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMTc6aW50IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTgtXFx0XFx0XFx0ICAgIHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjIyLVxcdFxcdFxcdCAgICB1MzIgeGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyMzppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyNC1cXHRcXHRcXHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI2LVxcdFxcdFxcdCAgICB1MzIgeGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyNzppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbiwgdTMyIGZsYWdzLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90ICpucl9hcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyOS1cXHRcXHRcXHQgICAgICAgdTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMzA6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga3R5cGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMzEtXFx0XFx0XFx0XFx0ICAgdTggY3VyX21rdnBbMzJdLCB1OCBhbHRfbWt2cFszMl0sIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjM3LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjM4OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIzOS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYz01NTc9c3RhdGljIGludCBjY2Ffc2xvd3BhdGhfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNTk1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo1OTY6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgY2NhX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTU5Ny1cXHQubW9kdWxlXFx0XFx0XFx0ID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM9NjEzPXN0YXRpYyBpbnQgX19pbml0IHBrZXlfY2NhX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTUtXFx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGNjYSBzdHVmZiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MTY6XFx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2Y2NhX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTctfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jPTYyMj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9jY2FfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYyNC1cXHQvKiB1bnJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MjU6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNmNjYV9oYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjI2LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTA0PXN0YXRpYyBpbnQgZXAxMV9zbG93cGF0aF9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTQyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM6NTQzOnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIGVwMTFfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU0NC1cXHQubW9kdWxlXFx0XFx0XFx0ID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jPTU2MD1zdGF0aWMgaW50IF9faW5pdCBwa2V5X2VwMTFfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NjItXFx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGVwMTEgc3R1ZmYgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU2MzpcXHRyZXR1cm4gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFxcdTAwMjZlcDExX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTY0LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTY5PXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X2VwMTFfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NzEtXFx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU3MjpcXHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcXHUwMDI2ZXAxMV9oYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU3My19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYz00MzU9c3RhdGljIGludCBwa2V5X3Bja21vX3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDQyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jOjQ0MzpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciBwY2ttb19oYW5kbGVyID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ0NC1cXHQubW9kdWxlXFx0XFx0ICAgICAgPSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBwa2V5X3Bja21vX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ2OS1cXHQvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgZm9yIGFsbCB0aGUgcGNrbW8gc3R1ZmYgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0NzA6XFx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2cGNrbW9faGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDcxLX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ3Nj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9wY2ttb19leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NzgtXFx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0Nzk6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNnBja21vX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ4MC19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNy0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjE4OiAqIFdyYXBwZXIgYXJvdW5kIHBrZXlfaGFuZGxlcl9nZW5fa2V5KCkgd2hpY2ggZGVhbHMgd2l0aCB0aGVcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xOS0gKiBFTk9ERVYgcmV0dXJuIGNvZGUgYW5kIHRoZW4gdHJpZXMgdG8gZW5mb3JjZSBhIHBrZXkgaGFuZGxlclxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjEtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MjI6c3RhdGljIGludCBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkodTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTIzLVxcdFxcdFxcdFxcdCAgICB1MzIga2V5Yml0c2l6ZSwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Mjg6XFx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShOVUxMLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTI5LVxcdFxcdFxcdFxcdCAga2V5dHlwZSwga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyLVxcdGlmIChyYyA9PSAtRU5PREVWKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzM6XFx0XFx0cGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcygpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjM0OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zNS1cXHRcXHRcXHRcXHRcXHQgIGtleXR5cGUsIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz00OT1zdGF0aWMgc3NpemVfdCBwa2V5X3Byb3RrZXlfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTY3LVxcdHByb3RrZXkubGVuID0gc2l6ZW9mKHByb3RrZXkucHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Njg6XFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNjktXFx0XFx0XFx0XFx0ICAgICAgcHJvdGtleS5wcm90a2V5LCBcXHUwMDI2cHJvdGtleS5sZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy04MS1cXHRcXHRwcm90a2V5LmxlbiA9IHNpemVvZihwcm90a2V5LnByb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjgyOlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTgzLVxcdFxcdFxcdFxcdFxcdCAgICAgIHByb3RrZXkucHJvdGtleSwgXFx1MDAyNnByb3RrZXkubGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9MTA2PXN0YXRpYyBzc2l6ZV90IHBrZXlfcHJvdGtleV9hZXNfeHRzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTMxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjEzMjpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xMzMtXFx0XFx0XFx0XFx0ICAgICAgdC1cXHUwMDNlcHJvdGtleSwgXFx1MDAyNnByb3RsZW4sIFxcdTAwMjZwcm90dHlwZSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz0xNDg9c3RhdGljIHNzaXplX3QgcGtleV9wcm90a2V5X2htYWNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNzMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MTc0OlxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICB0LVxcdTAwM2Vwcm90a2V5LCBcXHUwMDI2cHJvdGxlbiwgXFx1MDAyNnByb3R0eXBlKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTMwOD1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWRhdGFfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyMS1cXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVxcdTAwM2VzZWNrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMyMjpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzIzLVxcdFxcdFxcdFxcdCAgICAgIHNlY2tleS1cXHUwMDNlc2Vja2V5LCBcXHUwMDI2YnVmbGVuLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyOS1cXHRcXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVxcdTAwM2VzZWNrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMzMDpcXHRcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzMxLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNlY2tleS1cXHUwMDNlc2Vja2V5LCBcXHUwMDI2YnVmbGVuLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWNpcGhlcl9hZXNfYXR0cl9yZWFkKGVudW0gcGtleV9rZXlfc2l6ZSBrZXliaXRzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDMzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjQzNDpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDM1LVxcdFxcdFxcdFxcdCAgICAgIFBLRVlfVFlQRV9DQ0FfQ0lQSEVSLCBrZXliaXRzLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDQyLVxcdFxcdGJ1ZiArPSBDQ0FDSVBIRVJUT0tFTlNJWkU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NDQzOlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQ0NC1cXHRcXHRcXHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz01MzQ9c3RhdGljIHNzaXplX3QgcGtleV9lcDExX2Flc19hdHRyX3JlYWQoZW51bSBwa2V5X2tleV9zaXplIGtleWJpdHMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NDgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTQ5OlxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NTAtXFx0XFx0XFx0XFx0ICAgICAgUEtFWV9UWVBFX0VQMTFfQUVTLCBrZXliaXRzLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTU3LVxcdFxcdGJ1ZiArPSBNQVhFUDExQUVTS0VZQkxPQlNJWkU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTU4OlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU1OS1cXHRcXHRcXHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3MS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNzI6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzMtXFx0Lm1vZHVsZVxcdFxcdFxcdCA9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI5ODpcXHRyYyA9IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2dXZfaGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk5LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTMwOD1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV91dl9leGl0KHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzA5LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzozMTA6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNnV2X2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTMxMS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjI6MzguNTk0MDgzOTQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjEwNTk5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFB1YmxpYyBLZXkgSW5mcmFzdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgcGtleV91di5jYCBpcyB0aGUga2V5IGhlcmUg4oCTIGl0J3MgcmVnaXN0ZXJpbmcgYSBgdXZfaGFuZGxlcmAuIFRoYXQgYHV2X2hhbmRsZXJgIHNlZW1zIGNydWNpYWwsIGFzIGl0IHByb3ZpZGVzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllczogYGtleV90b19wcm90a2V5YCBhbmQgYHZlcmlmeV9rZXlgLiBUaGVzZSBmdW5jdGlvbnMgYXJlLCBpbiB0dXJuLCBhY2Nlc3NlZCBieSBoaWdoZXItbGV2ZWwgaGFuZGxlcnMsIHNwZWNpZmljYWxseSBgcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5YCBhbmQgYHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5YC5cblxuTm93LCB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGVzZSBoYW5kbGVyIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkIGJ5IGEgdmFyaWV0eSBvZiBpb2N0bCBpbnRlcmZhY2VzLiBJIHNlZSBmdW5jdGlvbnMgbGlrZSBgcGtleV9pb2N0bF92ZXJpZnlrZXlgLCBgcGtleV9pb2N0bF92ZXJpZnlrZXkyYCwgYHBrZXlfaW9jdGxfc2VjMnByb3RrYCwgYHBrZXlfaW9jdGxfc2tleTJwa2V5YCwgYW5kIGBwa2V5X2lvY3RsX3ZlcmlmeXByb3RrYCwgd2hpY2ggc3VnZ2VzdHMgYSBjbGVhciBpbnRlcmFjdGlvbiB3aXRoIGEgZGV2aWNlIG5vZGUsIGxpa2VseSBgL2Rldi9wa2V5YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIHdlIGV2ZW4gYWNjZXNzIHRoaXMgZGV2aWNlP1wiXG5cbkEgcXVpY2sgY2hlY2ssIGFuZCBhaGEhIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgIHJlZ2lzdGVycyBhIG1pc2MgZGV2aWNlLiBUaGF0IGFuc3dlcnMgbXkgcXVlc3Rpb24hIFNvLCBpdCdzIGNsZWFyIHRoYXQgdGhpcyBlbnRpcmUgc3lzdGVtIGlzIGJ1aWx0IGFyb3VuZCBhIGRldmljZSBkcml2ZXIsIGxpa2VseSBzcGVjaWZpYyB0byB0aGUgUzM5MCBhcmNoaXRlY3R1cmUsIHRoYXQgZXhwb3NlcyBhIHB1YmxpYyBrZXkgaW50ZXJmYWNlIHRocm91Z2ggdGhlIGAvZGV2L3BrZXlgIGRldmljZSBub2RlIHVzaW5nIGlvY3Rscywgd2l0aCBgdXZfaGFuZGxlcmAgYmVpbmcgdGhlIGZvdW5kYXRpb25hbCBjb21wb25lbnQgaW1wbGVtZW50aW5nIHRoZSBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMuIFRoaXMgYXJjaGl0ZWN0dXJlIGxvb2tzIGZhaXJseSBzdGFuZGFyZCBmb3IgYSBwcm90ZWN0ZWQga2V5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE2MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjo0My43MTUxNDg3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE2NTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaXNjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9Nzg2PWludCBfX2luaXQgcGtleV9hcGlfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTc4OC1cXHQvKiByZWdpc3RlciBhcyBhIG1pc2MgZGV2aWNlICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjc4OTpcXHRyZXR1cm4gbWlzY19yZWdpc3RlcihcXHUwMDI2cGtleV9kZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy03OTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjo0My43NjczMjEwODlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4MDI3MjM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgS2V5ZWQgTWVtb3J5IEJ1Z3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhbiBpc3N1ZSByZWxhdGVkIHRvIGtleWVkIG1lbW9yeSwgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGAvZGV2L3BrZXlgIGlvY3Rscy4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyB3aXRoaW4gdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoIGhvdyBpdCBoYW5kbGVzIHRoZSBzZWFyY2ggZm9yIHRoZXNlIHNlY3JldHMuIEl0IGxvb2tzIGxpa2UgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSBgc3RhcnRfaWR4YCB2YXJpYWJsZSB3YXNuJ3QgYmVpbmcgdXBkYXRlZCBjb3JyZWN0bHksIGxlYWRpbmcgdG8gZWl0aGVyIGFuIGluZmluaXRlIGxvb3Agb3IgYSBmYWlsdXJlIHRvIGxvY2F0ZSB0aGUgaW50ZW5kZWQgc2VjcmV0LlxuXG5XYWl0LCBsb29raW5nIGF0IGl0IGNsb3NlciwgaXNuJ3QgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCB3aGF0J3MgYWN0dWFsbHkgdXBkYXRlZCBieSBgdXZfbGlzdF9zZWNyZXRzYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUganVtcCBpbnRvIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGFuZCBkaWcgaW50byBgdXZfbGlzdF9zZWNyZXRzYCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IgYW5kIHVuZGVyc3RhbmQgaG93IHRob3NlIGluZGljZXMgYXJlIHN1cHBvc2VkIHRvIGludGVyYWN0LiBHb3R0YSBtYWtlIHN1cmUgSSBmdWxseSBncmFzcCBob3cgdGhpcyBzZWNyZXQgaW5kZXhpbmcgd29ya3MgdG8gYmUgc3VyZSBvZiB0aGUgZml4J3MgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgwOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjo0OC44NDc1OTY5OTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTY4NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2xpc3Rfc2VjcmV0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC91di5jPTc4MD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5MS1cXHRcXHRzdGFydF9pZHggPSBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHg7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc5MjpcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcXHUwMDI2bGlzdF9yYywgTlVMTCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5My1cXHRcXHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXFx1MDAyNlxcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIyOjQ4Ljg5MzU3NDA3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE3MzA4Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IG1pbmQncyBidXp6aW5nLCBhbmQgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGluIHRoaXMsIEkgbmVlZCB0byBncm91bmQgbXlzZWxmLiBJJ3ZlIGVuY291bnRlcmVkIGB1dl9saXN0X3NlY3JldHNgLCBhbmQgdGhhdCdzIGEgbmV3IG9uZS4gSXQncyBnb3QgbWUgY3VyaW91cywgYnV0IEkgY2FuJ3QganVzdCBqdW1wIGludG8gYXNzdW1wdGlvbnMuIEkgbmVlZCBhIHByZWNpc2UgZGVmaW5pdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2FpdCwgSSBuZWVkIHRvIHNlZSB0aGUgZGVmaW5pdGlvbiBvZiBgdXZfbGlzdF9zZWNyZXRzYC5cIiBJIGtub3cgYmV0dGVyIHRoYW4gdG8gb3BlcmF0ZSB3aXRoIGZ1enp5IHVuZGVyc3RhbmRpbmdzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0IHNvdW5kcyBsaWtlIGl0IHJlbGF0ZXMgdG8gc2VjcmV0cy4gR290dGEgaGF2ZSBhIGNsZWFyIGFuZCBhY2N1cmF0ZSBmb3VuZGF0aW9uIGJlZm9yZSBJIHByb2NlZWQuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNDAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjo1Mi4wMTA4ODgwOTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDY0OTk5MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfbGlzdF9zZWNyZXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00NzM9c3RhdGljIGlubGluZSBpbnQgdXZfY21kX25vZGF0YSh1NjQgaGFuZGxlLCB1MTYgY21kLCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ4OS0vKipcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0OTA6ICogdXZfbGlzdF9zZWNyZXRzKCkgLSBEbyBhIExpc3QgU2VjcmV0cyBVVkMuXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDkxLSAqXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTEtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTEyOnN0YXRpYyBpbmxpbmUgaW50IHV2X2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmJ1ZiwgdTE2IHN0YXJ0X2lkeCxcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTMtXFx0XFx0XFx0XFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03ODA9aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTEtXFx0XFx0c3RhcnRfaWR4ID0gbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3OTI6XFx0XFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTMtXFx0XFx0aWYgKGxpc3RfcmMgIT0gVVZDX1JDX0VYRUNVVEVEIFxcdTAwMjZcXHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0zMDc9c3RhdGljIGludCB1dmlvX2dldF9saXN0KHZvaWQgKnpwYWdlLCBzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTMxNi1cXHRkbyB7XFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzozMTc6XFx0XFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeCwgXFx1MDAyNnV2X2lvY3RsLVxcdTAwM2V1dl9yYyxcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTMxOC1cXHRcXHRcXHRcXHRcXHUwMDI2dXZfaW9jdGwtXFx1MDAzZXV2X3JyYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIyOjU0LjE1NzM5NzcyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkwMjQ2NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHV2X2xpc3Rfc2VjcmV0c2AgaW4gczM5MCBBcmNoaXRlY3R1cmUgQ29udGV4dCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYHV2X2xpc3Rfc2VjcmV0c2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaGAgaGVhZGVyIGZpbGUuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgdW5kZXJzdGFuZGluZyBob3cgc2VjcmV0cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIHVuZGVybHlpbmcgVW5pdmVyc2FsIFZvbHVtZSAoVVYpIGFyY2hpdGVjdHVyZSBvbiB0aGUgczM5MCBwbGF0Zm9ybS4gSSdtIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG1lY2hhbmlzbXMgdXNlZCB0byBtYW5hZ2UgdGhlc2Ugc2VjcmV0cy4gTXkgcHJpb3Iga25vd2xlZGdlIG9mIHMzOTAncyBzZWN1cml0eSBmZWF0dXJlcyBhbmQgVVYncyBhcmNoaXRlY3R1cmUgaW5mb3JtcyBteSBleHBlY3RhdGlvbiB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGludm9sdmVzIHBvaW50ZXJzIHRvIHNlY3VyZSBtZW1vcnkgcmVnaW9ucywgcG90ZW50aWFsbHkgdXNpbmcgaGFyZHdhcmUtYXNzaXN0ZWQgZW5jcnlwdGlvbiBvciBpbnRlZ3JpdHkgY2hlY2tzLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBleHBvc2VzIGFueSBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGJlIGxldmVyYWdlZCBieSBhdHRhY2tlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDY5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjI6NTcuNTQ3NjQ4ODczWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0OTA6XFx0ICogdXZfbGlzdF9zZWNyZXRzKCkgLSBEbyBhIExpc3QgU2VjcmV0cyBVVkMuXFxuIDQ5MTpcXHQgKlxcbiA0OTI6XFx0ICogQGJ1ZjogQnVmZmVyIHRvIHdyaXRlIGxpc3QgaW50bzsgc2l6ZSBvZiBvbmUgcGFnZS5cXG4gNDkzOlxcdCAqIEBzdGFydF9pZHg6IFRoZSBzbWFsbGVzdCBpbmRleCB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbGlzdC5cXG4gNDk0OlxcdCAqXFx0XFx0Rm9yIHRoZSBmaXN0IGludm9jYXRpb24gdXNlIDAuXFxuIDQ5NTpcXHQgKiBAcmM6IFBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybiBjb2RlIG9yIE5VTEwuXFxuIDQ5NjpcXHQgKiBAcnJjOiBQb2ludGVyIHRvIHN0b3JlIHRoZSByZXR1cm4gcmVhc29uIGNvZGUgb3IgTlVMTC5cXG4gNDk3OlxcdCAqXFxuIDQ5ODpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSBMaXN0IFNlY3JldHMgVVZDLiBUaGUgcmVzdWx0IGlzIHdyaXR0ZW4gaW50byBgYnVmYCxcXG4gNDk5OlxcdCAqIHRoYXQgbmVlZHMgdG8gYmUgYXQgbGVhc3Qgb25lIHBhZ2Ugb2Ygd3JpdGFibGUgbWVtb3J5LlxcbiA1MDA6XFx0ICogYGJ1ZmAgY29uc2lzdHMgb2Y6XFxuIDUwMTpcXHQgKiAqICVzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaGRyXFxuIDUwMjpcXHQgKiAqICVzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbSAobXVsdGlwbGUpXFxuIDUwMzpcXHQgKlxcbiA1MDQ6XFx0ICogRm9yIGBzdGFydF9pZHhgIHVzZSBfMF8gZm9yIHRoZSBmaXJzdCBjYWxsLiBJZiB0aGVyZSBhcmUgbW9yZSBzZWNyZXRzIGF2YWlsYWJsZVxcbiA1MDU6XFx0ICogYnV0IGNvdWxkIG5vdCBmaXQgaW50byB0aGUgcGFnZSB0aGVuIGByY2AgaXMgYFVWQ19SQ19NT1JFX0RBVEFgLlxcbiA1MDY6XFx0ICogSW4gdGhpcyBjYXNlIHVzZSBgdXZfc2VjcmV0X2xpc3RfaGRyLm5leHRfc2VjcmV0X2lkeGAgZm9yIGBzdGFydF9pZHhgLlxcbiA1MDc6XFx0ICpcXG4gNTA4OlxcdCAqIENvbnRleHQ6IG1pZ2h0IHNsZWVwLlxcbiA1MDk6XFx0ICpcXG4gNTEwOlxcdCAqIFJldHVybjogVGhlIFVWQyBjb25kaXRpb24gY29kZS5cXG4gNTExOlxcdCAqL1xcbiA1MTI6XFx0c3RhdGljIGlubGluZSBpbnQgdXZfbGlzdF9zZWNyZXRzKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYnVmLCB1MTYgc3RhcnRfaWR4LFxcbiA1MTM6XFx0XFx0XFx0XFx0XFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcXG4gNTE0OlxcdHtcXG4gNTE1OlxcdFxcdHN0cnVjdCB1dl9jYl9saXN0X3NlY3JldHMgdXZjYiA9IHtcXG4gNTE2OlxcdFxcdFxcdC5oZWFkZXIubGVuID0gc2l6ZW9mKHV2Y2IpLFxcbiA1MTc6XFx0XFx0XFx0LmhlYWRlci5jbWQgPSBVVkNfQ01EX0xJU1RfU0VDUkVUUyxcXG4gNTE4OlxcdFxcdFxcdC5zdGFydF9pZHggPSBzdGFydF9pZHgsXFxuIDUxOTpcXHRcXHRcXHQubGlzdF9hZGRyID0gKHU2NClidWYsXFxuIDUyMDpcXHRcXHR9O1xcbiA1MjE6XFx0XFx0aW50IGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVxcdTAwMjZ1dmNiKTtcXG4gNTIyOlxcdFxcbiA1MjM6XFx0XFx0aWYgKHJjKVxcbiA1MjQ6XFx0XFx0XFx0KnJjID0gdXZjYi5oZWFkZXIucmM7XFxuIDUyNTpcXHRcXHRpZiAocnJjKVxcbiA1MjY6XFx0XFx0XFx0KnJyYyA9IHV2Y2IuaGVhZGVyLnJyYztcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0cmV0dXJuIGNjO1xcbiA1Mjk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjo1Ny41NDc3Njk2MzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkzNDAxMTgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnk6IFVWX0xpc3RfU2VjcmV0cyBhbmQgU3l6a2FsbGVyIG9uIHMzOTB4KipcblxuT2theSwgc28gYHV2X2xpc3Rfc2VjcmV0c2AuLi4gdGhhdCdzIGEgVVZDLCBhIGZ1bmN0aW9uIHNwZWNpZmljIHRvIFNlY3VyZSBFeGVjdXRpb24gb24gdGhlIHMzOTAgcGxhdGZvcm0sIHdoaWNoIGZhbGxzIHVuZGVyIFVsdHJhdmlzb3IuIE15IGluaXRpYWwgcXVlc3Rpb246IGNhbiBJIGV4ZWN1dGUgdGhpcyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PyBDb25zaWRlcmluZyBRRU1VIGlzIGEgc3RhbmRhcmQgdG9vbCBmb3IgczM5MCBlbXVsYXRpb24sIGFuZCBJIGtub3cgaXQgc3VwcG9ydHMgU2VjdXJlIEV4ZWN1dGlvbiAoVWx0cmF2aXNvcikgd2hlbiBjb25maWd1cmVkIGNvcnJlY3RseSwgdGhlIGFuc3dlciAqc2hvdWxkKiBiZSB5ZXMuXG5cbkJ1dCBoZXJl4oCZcyB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXA6IGRvZXMgc3l6a2FsbGVyIHRlc3QgdGhpcz8gU3l6a2FsbGVyLCB3aXRoIGl0cyBmdXp6ZXIsIG9mdGVuIHJ1bnMgczM5MHggVk1zLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIFZNcyBiZWluZyBydW4gKndpdGgqIFNlY3VyZSBFeGVjdXRpb24gZW5hYmxlZD8gU3l6a2FsbGVyIHR5cGljYWxseSBsZXZlcmFnZXMgUUVNVSBmb3IgaXRzIHMzOTB4IHJ1bnMsIGFuZCBJIHVuZGVyc3RhbmQgUUVNVSBpcyBjYXBhYmxlIG9mIFNlY3VyZSBFeGVjdXRpb24gdmlhIHByb3R2aXJ0LlxuXG5NeSBuZXh0IHRhc2s6IGRpdmUgaW50byB0aGUgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgQ09ORklHX1BLRVlfVVZgIGlzIGVuYWJsZWQuIEknbGwgYWxzbyBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IG90aGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5kaWNhdGUgU2VjdXJlIEV4ZWN1dGlvbiBzdXBwb3J0IGlzIGFjdGl2ZS4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgc3l6a2FsbGVyIGlzIGFjdHVhbGx5IHRlc3RpbmcgdGhpcyBhcmVhIG9yIG5vdC4gVGhpcyBpcyBrZXkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUncyBhIGdvb2QgdGVzdCBlbnZpcm9ubWVudCBmb3IgdGhlIGB1dl9saXN0X3NlY3JldHNgIFVWQy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMDQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzowNC40ODE3ODQwNTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjM5ODY3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBLRVlfVVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL0tjb25maWc9MTM3PWNvbmZpZyBQS0VZX1BDS01PXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1Ny1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjE1ODpjb25maWcgUEtFWV9VVlxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU5LVxcdHRyaXN0YXRlIFxcXCJQS0VZIFVWIHN1cHBvcnQgaGFuZGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6MDYuNTQ1Nzc3Nzg4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTg1OTU5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDcnlwdG9ncmFwaGljIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBQS0VZX1VWYC4gTXkgaW5zdGluY3QsIGdpdmVuIHRoZSBkb21haW4sIGlzIHRvIHN0YXJ0IGRpZ2dpbmcgYXJvdW5kIGluIHRoZSBgZHJpdmVycy9jcnlwdG9gIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGF0IGRpcmVjdG9yeS4gYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgY2VudHJhbCByZXBvc2l0b3JpZXMgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB0aGV5J3JlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIHNwZWNpZmljIGZlYXR1cmUgbGlrZSBgUEtFWV9VVmAgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBwYXJ0aWN1bGFyIG9wdGlvbiBmaXRzIGludG8gdGhlIGJyb2FkZXIgY3J5cHRvZ3JhcGhpYyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbi4gRnJvbSBoZXJlLCBJIGNhbiBleGFtaW5lIGl0cyBsb2NhdGlvbiB3aXRoaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6MTAuMzQ0Mzc2Nzc2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvY3J5cHRvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTU4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTU4OlxcdGNvbmZpZyBQS0VZX1VWXFxuIDE1OTpcXHRcXHR0cmlzdGF0ZSBcXFwiUEtFWSBVViBzdXBwb3J0IGhhbmRsZXJcXFwiXFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIFBLRVlcXG4gMTYxOlxcdFxcdGRlcGVuZHMgb24gUzM5MF9VVl9VQVBJXFxuIDE2MjpcXHRcXHRoZWxwXFxuIDE2MzpcXHRcXHQgIFRoaXMgaXMgdGhlIFBLRVkgVWx0cmF2aXNvciBzdXBwb3J0IGhhbmRsZXIgZm9yIGRlcml2aW5nIHByb3RlY3RlZFxcbiAxNjQ6XFx0XFx0ICBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZSBVbHRyYXZpc29yIChVVikuXFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdCAgVGhpcyBtb2R1bGUgd29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgVVYgZGV2aWNlIGFuZCBzdXBwb3J0cyB0aGVcXG4gMTY3OlxcdFxcdCAgcmV0cmlldmFsIG9mIHByb3RlY3RlZCBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZVxcbiAxNjg6XFx0XFx0ICBVViBmaXJtd2FyZSBsYXllci4gVGhpcyBzZXJ2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpblxcbiAxNjk6XFx0XFx0ICBhIHByb3RlY3RlZCBleGVjdXRpb24gZ3Vlc3QgYW5kIHRodXMgdGhpcyBtb2R1bGUgd2lsbCBmYWlsIHVwb25cXG4gMTcwOlxcdFxcdCAgbW9kcHJvYmUgaWYgbm8gcHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyBkZXRlY3RlZC5cXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgd2l0aCBhbiBLVk1cXG4gMTczOlxcdFxcdCAgZ3Vlc3Qgd2l0aCBwcm90ZWN0ZWQgZXhlY3V0aW9uIGFuZCB5b3Ugd2FudCB0byB1c2UgVVYgcmV0cmlldmFibGVcXG4gMTc0OlxcdFxcdCAgc2VjcmV0cyB2aWEgUEtFWSBBUEkuXFxuIDE3NTpcXHRcXG4gMTc2OlxcdGNvbmZpZyBDUllQVE9fUEFFU19TMzkwXFxuIDE3NzpcXHRcXHR0cmlzdGF0ZSBcXFwiUEFFUyBjaXBoZXIgYWxnb3JpdGhtc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6MTAuMzQ0NDc4MTI3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDA0MDQ1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNlY3VyZSBFeGVjdXRpb24gUmVxdWlyZW1lbnRzIGZvciBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGVycm9yIG1lc3NhZ2U6IFwiVGhpcyBzZXJ2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpbiBhIHByb3RlY3RlZCBleGVjdXRpb24gZ3Vlc3QgYW5kIHRodXMgdGhpcyBtb2R1bGUgd2lsbCBmYWlsIHVwb24gbW9kcHJvYmUgaWYgbm8gcHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyBkZXRlY3RlZC5cIiBSaWdodCwgc28gdGhhdCB0ZWxscyBtZSBpbW1lZGlhdGVseSB0aGlzIGlzIHRpZWQgdG8gU2VjdXJlIEV4ZWN1dGlvbiwgb3Igd2hhdCBJIHVzdWFsbHkgY2FsbCBhIFwicHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC5cIiBBbmQgdGhlIGNvbnRleHQgaXMgU3l6a2FsbGVyLlxuXG5IbW0sIHRoZSB0ZXh0IHNheXMgU3l6a2FsbGVyICpkb2Vzbid0KiBydW4gd2l0aCBTZWN1cmUgRXhlY3V0aW9uIGVuYWJsZWQgYnkgZGVmYXVsdC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBhIGJpdCBvZiBhIG5pY2hlIHNldHVwLiBJdCBsb29rcyBsaWtlIGl0IG5lZWRzIFVsdHJhdmlzb3Igc3VwcG9ydCBvbiB0aGUgaG9zdCwgb3IgUUVNVSB3aXRoIGBwcm90dmlydGAgZW5hYmxlZC4gQW5kIG9mIGNvdXJzZSwgdGhlIFFFTVUgcGF0aCBzdGlsbCBkZXBlbmRzIG9uIGhvc3Qgc3VwcG9ydCAtIHNwZWNpZmljYWxseSBLVk0gb24gczM5MHggd2l0aCBVbHRyYXZpc29yLlxuXG5XYWl0LCBRRU1VIGlzIGxpc3RlZCBoZXJlIGFzICplbXVsYXRpbmcqIFVsdHJhdmlzb3I/IE5vLCBoYW5nIG9uLiBRRU1VIHVzZXMgS1ZNIHRvICpzdXBwb3J0KiBVbHRyYXZpc29yLCBpdCdzIG5vdCBhY3R1YWxseSBhbiBlbXVsYXRpb24gbGF5ZXIsIGl0J3MgYSBoYXJkd2FyZSBmZWF0dXJlIG9uIElCTSB6MTUrIHByb2Nlc3NvcnMuIE9rYXksIEkndmUgZ290IGl0LlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBoZXJlIGlzIGNhbiBzeXprYWxsZXIncyBmdXp6aW5nIHJvdXRpbmVzIGFjdHVhbGx5IHJlYWNoIHRoaXMgY29kZT8gQXJlIHdlIGV2ZW4gdGVzdGluZyBzb21ldGhpbmcgdGhhdCdzIGxpa2VseSB0byAqZmFpbCogaW4gYSBub3JtYWwgU3l6a2FsbGVyIHJ1bj8gXG5cblRvIGRldGVybWluZSBpZiB0aGlzIGlzIHJlbGV2YW50LCBJIHNob3VsZCBjaGVjayBpZiBgdXZfZmluZF9zZWNyZXRgIGlzIGNhbGxlZCBhbnl3aGVyZSBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA5MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIzOjE1LjM0NDg4NTU2OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3NzU4MDczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9maW5kX3NlY3JldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjEzPXN0YXRpYyBpbmxpbmUgaW50IHV2X3JlbW92ZV9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE3LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxODppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzU3PXN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3NzM6ICogdXZfZmluZF9zZWNyZXQoKSAtIHNlYXJjaCBzZWNyZXQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VjcmV0IGlkLlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzQtICogQHNlY3JldF9pZDogc2VhcmNoIHBhdHRlcm4uXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc5LSAqL1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODA6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDUtfVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMD1NT0RVTEVfREVTQ1JJUFRJT04oXFxcInMzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMi0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzOiAqIE9uZSBwcmUtYWxsb2NhdGVkIHV2X3NlY3JldF9saXN0IGZvciB1c2Ugd2l0aCB1dl9maW5kX3NlY3JldCgpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQtICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz05Mz1zdGF0aWMgaW50IGdldF9zZWNyZXRfbWV0YWRhdGEoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTktXFx0bWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwMDpcXHRyYyA9IHV2X2ZpbmRfc2VjcmV0KHNlY3JldF9pZCwgdXZfbGlzdCwgc2VjcmV0KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDEtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6MTcuNTIyNDc1NTI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTEwMjUyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHlzaXMgb2YgYHBrZXlfdXYuY2AgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHRoZSBtb2R1bGUgaW4gcXVlc3Rpb24sIGBwa2V5X3V2LmNgLCBpcyAqb25seSogY2FsbGVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvczM5MC9jcnlwdG9gIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRoZSBvbmx5IHVzZSBvZiB0aGlzIGZpbGUgaXMgZHVyaW5nIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIFRoaXMgbmFycm93cyBkb3duIHRoZSBzY29wZSBxdWl0ZSBhIGJpdC4gSXTigJlzIGEgdmVyeSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gY3J5cHRvZ3JhcGhpYyBrZXkgbWFuYWdlbWVudCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGFuZCBjb25maW5lZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgaXTigJlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgY3J5cHRvIGFjY2VsZXJhdGlvbiBvciBrZXkgaGFuZGxpbmcgbW9kdWxlLCBjbG9zZWx5IHRpZWQgdG8gdGhlIHMzOTAgcGxhdGZvcm3igJlzIGNyeXB0byBjYXBhYmlsaXRpZXMuIFdlIG5lZWQgdG8gbG9vayBkZWVwZXIgaW4gdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjY2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6MjAuNzEzNTA2NDExWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODQ6XFx0c3RhdGljIGludCBfX2luaXQgcGtleV91dl9pbml0KHZvaWQpXFxuIDI4NTpcXHR7XFxuIDI4NjpcXHRcXHRpbnQgcmM7XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXFxuIDI4OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0aWYgKCF0ZXN0X2JpdF9pbnYoQklUX1VWQ19DTURfUkVUUl9TRUNSRVQsIHV2X2luZm8uaW5zdF9jYWxsc19saXN0KSlcXG4gMjkyOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAyOTM6XFx0XFxuIDI5NDpcXHRcXHR1dl9saXN0ID0ga21hbGxvY19vYmooKnV2X2xpc3QpO1xcbiAyOTU6XFx0XFx0aWYgKCF1dl9saXN0KVxcbiAyOTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFxcdTAwMjZ1dl9oYW5kbGVyKTtcXG4gMjk5OlxcdFxcdGlmIChyYylcXG4gMzAwOlxcdFxcdFxcdGtmcmVlKHV2X2xpc3QpO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHRyZXR1cm4gcmM7XFxuIDMwMzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIzOjIwLjcxMzYzMDkyMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODYxOTMwNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgU3l6a2FsbGVyJ3MgVmlydHVhbGl6YXRpb24gQ29udGV4dCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgZnVuY3Rpb24uIEl0cyBwdXJwb3NlIGlzIHByZXR0eSBjbGVhciDigJMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzeXN0ZW0gaXMgb3BlcmF0aW5nIHdpdGhpbiBhIHByb3RlY3RlZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gUmlnaHQgbm93LCBteSBhc3N1bXB0aW9uLCBiYXNlZCBvbiBob3cgU3l6a2FsbGVyIGlzIHR5cGljYWxseSBkZXBsb3llZCwgaXMgdGhhdCBpdCAqaXNuJ3QqLiBJIG1lYW4sIHdlJ3JlIHVzdWFsbHkgcnVubmluZyBpbiBlaXRoZXIgUUVNVSBUQ0csIHdoaWNoIGlzIGVtdWxhdGlvbiwgb3Igc3RyYWlnaHQgS1ZNLiBOZWl0aGVyIG9mIHRob3NlIGNvbmZpZ3VyYXRpb25zIHNjcmVhbSBcInByb3RlY3RlZCB2aXJ0dWFsaXphdGlvblwiIHRvIG1lLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZeKApiBob2xkIHRoYXQgdGhvdWdodC4gQ2FuIFN5emthbGxlciAqYWN0dWFsbHkqIHJ1biBhcyBhIHByb3RlY3RlZCB2aXJ0dWFsaXphdGlvbiBndWVzdD8gSXQgdXNlcyBRRU1VLCBkb2Vzbid0IGl0PyBBbmQgSSBrbm93IFFFTVUgKmRvZXMqIHN1cHBvcnQgczM5MHggU2VjdXJlIEV4ZWN1dGlvbi4gQnV0IHRoYXQgd291bGQgcmVxdWlyZSB0aGUgaG9zdCBoYXJkd2FyZSB0byBzdXBwb3J0IFNlY3VyZSBFeGVjdXRpb24g4oCTIGxpa2UgYSB6MTUgb3IgbGF0ZXIuIFN5emthbGxlciBpbnN0YW5jZXMsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIGFyZSBwcmVkb21pbmFudGx5IG9uIEdDRSwgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBBbmQgR0NFJ3MgczM5MHggb2ZmZXJpbmdzIGFyZW4ndCBsZXZlcmFnaW5nIG5hdGl2ZSBoYXJkd2FyZTsgdGhleSdyZSBzdHVjayB3aXRoIFFFTVUgVENHLCB0aGUgc2xvdyBlbXVsYXRpb24uXG5cblNvLCBpZiBTeXprYWxsZXIncyBvbiBHQ0UgKGFuZCBoZW5jZSwgaW4gVENHIGVtdWxhdGlvbiksIGl0J3MgYSBkZWFkIGVuZCwgdGhlbi4gUUVNVSBUQ0cgKmV4cGxpY2l0bHkqIGRvZXNuJ3Qgc3VwcG9ydCBzMzkweCBTZWN1cmUgRXhlY3V0aW9uLiBUaGUgYm90dG9tIGxpbmU6IHRoZSBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgcmV0dXJuIHRydWUgaW4gdGhpcyBjb21tb24gc2NlbmFyaW8uIEJ1dCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgaXMgYWN0dWFsbHkgaW5jYXBhYmxlIG9mIGV2ZXIgZXZhbHVhdGluZyB0byB0cnVlIHdoaWxlIHJ1bm5pbmcgaW4gUUVNVSBUQ0csIHJpZ2h0PyBKdXN0IGEgcXVpY2ssIGNvbmZpcm1hdG9yeSBjaGVjayB0byBjbG9zZSB0aGUgbG9vcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3OTEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzoyOS41NzU1NjQ0NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MTk5ODMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc19wcm90X3ZpcnRfZ3Vlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9ib290L2lwbF9wYXJtLmM9MTc2PXZvaWQgc2V0dXBfYm9vdF9jb21tYW5kX2xpbmUodm9pZClcXG4tLVxcbmFyY2gvczM5MC9ib290L2lwbF9wYXJtLmMtMTg1LVxcdC8qIGFwcGVuZCBJUEwgUEFSTSBkYXRhIHRvIHRoZSBib290IGNvbW1hbmQgbGluZSAqL1xcbmFyY2gvczM5MC9ib290L2lwbF9wYXJtLmM6MTg2OlxcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkgXFx1MDAyNlxcdTAwMjYgaXBsX2Jsb2NrX3ZhbGlkKVxcbmFyY2gvczM5MC9ib290L2lwbF9wYXJtLmMtMTg3LVxcdFxcdGFwcGVuZF9pcGxfYmxvY2tfcGFybSgpO1xcbi0tXFxuYXJjaC9zMzkwL2Jvb3QvcGdtX2NoZWNrLmM9NTg9dm9pZCBkb19wZ21fY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9wZ21fY2hlY2suYy02Ny1cXHRib290X2VtZXJnKFxcXCJMaW51eCB2ZXJzaW9uICVzXFxcXG5cXFwiLCBrZXJuZWxfdmVyc2lvbik7XFxuYXJjaC9zMzkwL2Jvb3QvcGdtX2NoZWNrLmM6Njg6XFx0aWYgKCFpc19wcm90X3ZpcnRfZ3Vlc3QoKSBcXHUwMDI2XFx1MDAyNiBlYXJseV9jb21tYW5kX2xpbmVbMF0pXFxuYXJjaC9zMzkwL2Jvb3QvcGdtX2NoZWNrLmMtNjktXFx0XFx0Ym9vdF9lbWVyZyhcXFwiS2VybmVsIGNvbW1hbmQgbGluZTogJXNcXFxcblxcXCIsIGVhcmx5X2NvbW1hbmRfbGluZSk7XFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9waHlzbWVtX2luZm8uYz0yMDU9c3RhdGljIHZvaWQgZGllX29vbSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBsb25nIG1heClcXG4tLVxcbmFyY2gvczM5MC9ib290L3BoeXNtZW1faW5mby5jLTIxMi1cXHRib290X2VtZXJnKFxcXCJMaW51eCB2ZXJzaW9uICVzXFxcXG5cXFwiLCBrZXJuZWxfdmVyc2lvbik7XFxuYXJjaC9zMzkwL2Jvb3QvcGh5c21lbV9pbmZvLmM6MjEzOlxcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkgXFx1MDAyNlxcdTAwMjYgZWFybHlfY29tbWFuZF9saW5lWzBdKVxcbmFyY2gvczM5MC9ib290L3BoeXNtZW1faW5mby5jLTIxNC1cXHRcXHRib290X2VtZXJnKFxcXCJLZXJuZWwgY29tbWFuZCBsaW5lOiAlc1xcXFxuXFxcIiwgZWFybHlfY29tbWFuZF9saW5lKTtcXG4tLVxcbmFyY2gvczM5MC9ib290L3V2LmM9NjU9c3RhdGljIGludCBpc19wcm90X3ZpcnRfaG9zdF9jYXBhYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvYm9vdC91di5jLTcwLVxcdC8qIGRpc2FibGUgaWYgcHJvdGVjdGVkIGd1ZXN0IHZpcnR1YWxpemF0aW9uIGlzIGVuYWJsZWQgKi9cXG5hcmNoL3MzOTAvYm9vdC91di5jOjcxOlxcdGlmIChpc19wcm90X3ZpcnRfZ3Vlc3QoKSlcXG5hcmNoL3MzOTAvYm9vdC91di5jLTcyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NTY0PWV4dGVybiBpbnQgcHJvdF92aXJ0X2d1ZXN0O1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTU2NS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo1NjY6c3RhdGljIGlubGluZSBpbnQgaXNfcHJvdF92aXJ0X2d1ZXN0KHZvaWQpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTY3LXtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTU3MT1zdGF0aWMgaW5saW5lIGludCBzaGFyZSh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBjbWQpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01NzgtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTc5OlxcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTgwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz02NjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdXZfa2V5c19hdHRyX2dyb3VwID0ge1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTY2Ny1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NjY4OnN0YXRpYyBzc2l6ZV90IHV2X2lzX3Byb3RfdmlydF9ndWVzdChzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNjY5LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NjgwPXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdXZfcHJvdF92aXJ0X2d1ZXN0ID1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NjgxOlxcdF9fQVRUUihwcm90X3ZpcnRfZ3Vlc3QsIDA0NDQsIHV2X2lzX3Byb3RfdmlydF9ndWVzdCwgTlVMTCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTY4Mi1cXG4tLVxcbmFyY2gvczM5MC9tbS9pbml0LmM9MTQwPWJvb2wgZm9yY2VfZG1hX3VuZW5jcnlwdGVkKHN0cnVjdCBkZXZpY2UgKmRldilcXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTE0MS17XFxuYXJjaC9zMzkwL21tL2luaXQuYzoxNDI6XFx0cmV0dXJuIGlzX3Byb3RfdmlydF9ndWVzdCgpO1xcbmFyY2gvczM5MC9tbS9pbml0LmMtMTQzLX1cXG4tLVxcbmFyY2gvczM5MC9tbS9pbml0LmM9MTQ2PXN0YXRpYyB2b2lkIF9faW5pdCBwdl9pbml0KHZvaWQpXFxuYXJjaC9zMzkwL21tL2luaXQuYy0xNDcte1xcbmFyY2gvczM5MC9tbS9pbml0LmM6MTQ4OlxcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXFxuYXJjaC9zMzkwL21tL2luaXQuYy0xNDktXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNTk9Ym9vbCBhcF9pc19zZV9ndWVzdCh2b2lkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjYwLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI2MTpcXHRyZXR1cm4gaXNfcHJvdF92aXJ0X2d1ZXN0KCkgXFx1MDAyNlxcdTAwMjYgYXBfc2JfYXZhaWxhYmxlKCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNjItfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjg3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI4ODpcXHRpZiAoIWlzX3Byb3RfdmlydF9ndWVzdCgpKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI4OS1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6MzEuNzM3NTY5OTg3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTkwODMzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIHMzOTAgQXJjaGl0ZWN0dXJlIGZvciBWaXJ0dWFsIEd1ZXN0IEluZm9ybWF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aXJ0dWFsIGd1ZXN0IGVudmlyb25tZW50IG9uIHMzOTAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBpc19wcm90X3ZpcnRfZ3Vlc3RgLiBUaGF0J3MgdGhlIHR5cGljYWwgcGxhY2UgdG8gbG9vayBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgdmlydHVhbCBtYWNoaW5lIGRldGVjdGlvbiwgZXNwZWNpYWxseSBvbiBzMzkwLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgZGVmaW5pdGlvbiwgYW5kIHRoZSBzb3VyY2UgZmlsZSBtZW50aW9uZWQgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludCDigJMgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYC4gVGhpcyBsaWtlbHkgaG9sZHMgdGhlIG1hY3JvIGRlZmluaXRpb24gb3IgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gdGhhdCB3aWxsIGdpdmUgbWUgdGhlIGFuc3dlci4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgaGVhZGVyIGFuZCB2ZXJpZnkuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBsb3ctbGV2ZWwgaGFyZHdhcmUgb3IgaHlwZXJ2aXNvciBkZXRlY3Rpb24gbWVjaGFuaXNtcyBpbiB0aGVyZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaW5nIHVzZWQgdG8gcHJvcGVybHkgaW50ZXJwcmV0IHRoZSByZXN1bHRzIGFuZCBpbnRlZ3JhdGUgaXQgd2l0aCB0aGUgcmVzdCBvZiBteSByZXNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MDcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzozNS4wNTY2NTY3NzlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTY0LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTY0OlxcdGV4dGVybiBpbnQgcHJvdF92aXJ0X2d1ZXN0O1xcbiA1NjU6XFx0XFxuIDU2NjpcXHRzdGF0aWMgaW5saW5lIGludCBpc19wcm90X3ZpcnRfZ3Vlc3Qodm9pZClcXG4gNTY3OlxcdHtcXG4gNTY4OlxcdFxcdHJldHVybiBwcm90X3ZpcnRfZ3Vlc3Q7XFxuIDU2OTpcXHR9XFxuIDU3MDpcXHRcXG4gNTcxOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNoYXJlKHVuc2lnbmVkIGxvbmcgYWRkciwgdTE2IGNtZClcXG4gNTcyOlxcdHtcXG4gNTczOlxcdFxcdHN0cnVjdCB1dl9jYl9zaGFyZSB1dmNiID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzozNS4wNTY3NDk3MTlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NjM3MjQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKlRyYWNraW5nIERvd24gYSBWYXJpYWJsZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBwcm90X3ZpcnRfZ3Vlc3RgIHZhcmlhYmxlIGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kIGFzc2lnbmVkIGEgdmFsdWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdXNhZ2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cywgYW5kIEkgaGF2ZSBhIGZlZWxpbmcgaXQncyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGJlaGF2aW9yIEknbSB0cnlpbmcgdG8gYW5hbHl6ZS4gVGltZSB0byBnZXQgbXkgc2VhcmNoLWZ1IHdvcmtpbmcuIEkgbmVlZCB0byBwaW5wb2ludCBpdHMgb3JpZ2luIHF1aWNrbHkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyMjgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIzOjM4LjA0MzEyNTE2MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMjcyMzkxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm90X3ZpcnRfZ3Vlc3QgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2Jvb3QvdXYuYz0xNT12b2lkIHV2X3F1ZXJ5X2luZm8odm9pZClcXG4tLVxcbmFyY2gvczM5MC9ib290L3V2LmMtNTQtXFx0ICAgIHRlc3RfYml0X2ludihCSVRfVVZDX0NNRF9SRU1PVkVfU0hBUkVEX0FDQ0VTUywgKHVuc2lnbmVkIGxvbmcgKil1dmNiLmluc3RfY2FsbHNfbGlzdCkpXFxuYXJjaC9zMzkwL2Jvb3QvdXYuYzo1NTpcXHRcXHRwcm90X3ZpcnRfZ3Vlc3QgPSAxO1xcbmFyY2gvczM5MC9ib290L3V2LmMtNTYtfVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTY3ND1zdGF0aWMgc3NpemVfdCB1dl9pc19wcm90X3ZpcnRfaG9zdChzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy02NzktXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjY4MDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHV2X3Byb3RfdmlydF9ndWVzdCA9XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTY4MS1cXHRfX0FUVFIocHJvdF92aXJ0X2d1ZXN0LCAwNDQ0LCB1dl9pc19wcm90X3ZpcnRfZ3Vlc3QsIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzo0MC4yNTU4NjMwMDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyOTA2NDg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVsdHJhdmlzb3IgRmFjaWxpdHkgYW5kIGl0cyBJbXBsaWNhdGlvbnMgZm9yIFZ1bG5lcmFiaWxpdHkgUmVzZWFyY2gqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYHV2X2ZpbmRfc2VjcmV0YCBnZXRzIGNhbGxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpdCdzIHRyaWdnZXJlZCBpZiBgdXZfcXVlcnlfaW5mb2Agd29ya3MgYW5kIFVWQyBjb21tYW5kcyBhcmUgYWNjZXNzaWJsZSB3aXRoaW4gYGFyY2gvczM5MC9ib290L3V2LmNgLiBCdXQgdGhhdCBoaW5nZXMgb24gdGhlIGh5cGVydmlzb3IgYWN0dWFsbHkgc3VwcG9ydGluZyBhbmQgZW5hYmxpbmcgdGhlIFVsdHJhdmlzb3IgZmFjaWxpdHkgZm9yIHRoZSBndWVzdC5cblxuVGhlbiwgdGhlcmUncyB0aGUgU3l6a2FsbGVyIHNldHVwLiBJdCBydW5zIG9uIEdDRSwgYW5kIEdDRSBkb2Vzbid0IGhhdmUgbmF0aXZlIHMzOTB4IGhhcmR3YXJlOyBpdCdzIHVzaW5nIFFFTVUgaW4gVENHIG1vZGUgaW5zdGVhZC4gVGhlIHByb2JsZW0gaXMsIFFFTVUgVENHICpkb2Vzbid0KiBzdXBwb3J0IHRoZSBVbHRyYXZpc29yIGZhY2lsaXR5LCB3aGljaCBtZWFucyBubyBTZWN1cmUgRXhlY3V0aW9uLiBTbywgYHByb3RfdmlydF9ndWVzdGAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSB6ZXJvIGluIHRoaXMgY2FzZS5cblxuSWYgYHByb3RfdmlydF9ndWVzdGAgaXMgemVybywgdGhlbiBgcGtleV91dl9pbml0YCB3aWxsIHJldHVybiBgLUVOT0RFVmAuIEFuZCBpZiBgcGtleV91dl9pbml0YCByZXR1cm5zIGAtRU5PREVWYCwgdGhlIGNyaXRpY2FsIGB1dl9oYW5kbGVyYCBpc24ndCByZWdpc3RlcmVkLiBUaGF0J3MgYSBtYWpvciByZWQgZmxhZyBiZWNhdXNlIGlmIGB1dl9oYW5kbGVyYCBpc24ndCByZWdpc3RlcmVkLCBgdXZfZmluZF9zZWNyZXRgIG5ldmVyIGdldHMgY2FsbGVkIHRocm91Z2ggdGhpcyBwYXRoLlxuXG5CdXQgd2FpdCwgaXMgYHV2X2ZpbmRfc2VjcmV0YCBjYWxsZWQgZnJvbSBzb21ld2hlcmUgZWxzZT8gSSBuZWVkIHRvIGNoZWNrLiBJIHNhdyBtZW50aW9ucyBvZiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhgLCBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCwgYW5kIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2AuXG5cbkxldCdzIHN0YXJ0IHdpdGggYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYC4gTm9wZSwgdGhhdCdzIGp1c3QgYSBkZWNsYXJhdGlvbi4gT2ssIHNvIHdoZXJlIGVsc2U/IEknbSBnb2luZyB0byBsb29rIGF0IGBkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTY0NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzo0Ny4xODQ5MzU1ODJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NzcwNDM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9maW5kX3NlY3JldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzo0Ny4yNjA3MTI0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTcwOTMzODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gU3l6a2FsbGVyIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSd2ZSB0cmFjZWQgdGhlIGNhbGwgcGF0aCBvZiBgdXZfZmluZF9zZWNyZXRgLiBJdCdzIG9ubHkgY2FsbGVkIGZyb20gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gVGhhdCBmaWxlLCBgcGtleV91di5jYCwgaXMgaW5pdGlhbGl6ZWQgb25seSBpZiBgaXNfcHJvdF92aXJ0X2d1ZXN0KClgIGlzIHRydWUuIE5vdywgc3l6a2FsbGVyIHJ1bnMgczM5MHggdW5kZXIgUUVNVSBUQ0csIGFuZCBpbiB0aGF0IHNldHVwLCBgaXNfcHJvdF92aXJ0X2d1ZXN0KClgIGlzIGRlZmluaXRlbHkgZmFsc2UuIFNvLCBiYXNlZCBvbiB0aGF0LCB0aGUgY29kZSdzIHVucmVhY2hhYmxlLiBCdXQgd2FpdC4uLiBkb2VzIHN5emthbGxlciB1c2UgS1ZNIHNvbWV0aW1lcz8gSSBrbm93IHRoZXJlJ3MgYW4gczM5MHggaW5zdGFuY2Ugb24gR0NFLCB3aGljaCBydW5zIFFFTVUgVENHLiBCdXQgZXZlbiBpZiB0aGVyZSB3ZXJlIEtWTSBpbnN0YW5jZXMsIFNlY3VyZSBFeGVjdXRpb24gKHByb3R2aXJ0KSBuZWVkcyBzcGVjaWZpYyBzZXR1cDogYSBRRU1VIGNvbW1hbmQgbGluZSB3aXRoIGBwcm90dmlydGAsIGFuZCBhIGhvc3Qgd2l0aCBVbHRyYXZpc29yLiBTeXprYWxsZXIgaXMgbm90IGRvaW5nIHRoYXQuIEl0IGJvb3RzIGEgc3RhbmRhcmQgdm1saW51eCBhbmQgZG9lc24ndCB1c2UgdGhlIHNwZWNpYWwgYm9vdGxvYWRlciBgZ2VucHJvdGltZ2AgbmVlZGVkIGZvciBhIHNlY3VyZSBpbWFnZS5cblxuSG9sZCBvbiwgY291bGQgYHV2X3F1ZXJ5X2luZm9gIHN1Y2NlZWQgaW4gUUVNVSBUQ0c/IE5vcGUuIFFFTVUgVENHIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBVbHRyYXZpc29yIENhbGwgKFVWQykgaW5zdHJ1Y3Rpb24sIG9yIGlmIGl0IGRvZXMsIGl0IGRvZXNuJ3QgZG8gdGhlIFNlY3VyZSBFeGVjdXRpb24gc3R1ZmYuIFNvLCBpdCdzIGRlZmluaXRlbHkgdW5yZWFjaGFibGUgaW4gUUVNVS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGlzIGZvciBzeXprYWxsZXIsIGNvbnNpZGVyaW5nIHRoZSBwcm9tcHQgSSdtIHdvcmtpbmcgd2l0aDogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhhdCdzIGEgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBzY2VuYXJpby5cblxuT2theSwgbGV0J3MgbmFpbCB0aGlzIGRvd24uIGBwa2V5X3V2LmNgIGlzIHRoZSBrZXkuIElmIGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgaXMgZmFsc2UsIGBwa2V5X3V2X2luaXRgIHJldHVybnMgYC1FTk9ERVZgLiBUaGUgbW9kdWxlIGZhaWxzIHRvIGxvYWQsIG9yIGlmIGJ1aWx0LWluLCB0aGUgaW5pdGNhbGwgZmFpbHMuIFRoZXJlZm9yZSwgYHV2X2hhbmRsZXJgIGlzIG5ldmVyIHJlZ2lzdGVyZWQsIGFuZCBgdXZfZmluZF9zZWNyZXRgIGlzIG5ldmVyIGNhbGxlZC4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgZW52aXJvbm1lbnRzLiBUaGUgcHJvbXB0IHNheXMgdGhhdCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB1c2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgcmVzdWx0IGluIFdvcnRoRnV6emluZz1mYWxzZS4gVGhpcyByZXF1aXJlcyBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIChVbHRyYXZpc29yKSwgd2hpY2ggaXMgYSBoYXJkd2FyZSBmZWF0dXJlLCBub3QgZW11bGF0ZWQgYnkgUUVNVSBUQ0cuIEFsc28sIGl0IHJlcXVpcmVzIGEgc3BlY2lhbGx5IGNyYWZ0ZWQgZW5jcnlwdGVkIGJvb3QgaW1hZ2UgKGBnZW5wcm90aW1nYCksIGV2ZW4gb24gS1ZNLiBTbywgdGhpcyBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN5emthbGxlci5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGlzIGB1dl9maW5kX3NlY3JldGAgZXhwb3J0ZWQgYW5kIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlPyBJdCdzIGBFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldClgLiBCdXQgSSBjaGVja2VkIGFsbCB0aGUgY2FsbGVycyBpbiB0aGUga2VybmVsIHRyZWUgdXNpbmcgYGdpdCBncmVwIHV2X2ZpbmRfc2VjcmV0YCBhbmQgdGhlIG9ubHkgY2FsbGVyIGlzIGBwa2V5X3V2LmNgLiBTbyBJJ20gY29uZmlkZW50LlxuXG5Pa2F5LCBsZXQgbWUganVzdCBydW4gYSBxdWljayBjaGVjayB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1pc3NlZCBjYWxsZXJzIG9mIGB1dl9maW5kX3NlY3JldGAuIEFmdGVyIGEgcXVpY2sgZG91YmxlLWNoZWNrIEkgYW0gY29uZmlkZW50IHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ1OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzo1OC44MzE2NTAzMDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODk4MjEyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfZmluZF9zZWNyZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxMz1zdGF0aWMgaW5saW5lIGludCB1dl9yZW1vdmVfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxNy1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo2MTg6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTktXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTc1Nz1zdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3Mi0vKipcXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzczOiAqIHV2X2ZpbmRfc2VjcmV0KCkgLSBzZWFyY2ggc2VjcmV0IG1ldGFkYXRhIGZvciBhIGdpdmVuIHNlY3JldCBpZC5cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc0LSAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3OS0gKi9cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzgwOmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4MS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA1LX1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA3LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjA9TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJzMzkwIHByb3RlY3RlZCBrZXkgVVYgaGFuZGxlclxcXCIpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjItLypcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMzogKiBPbmUgcHJlLWFsbG9jYXRlZCB1dl9zZWNyZXRfbGlzdCBmb3IgdXNlIHdpdGggdXZfZmluZF9zZWNyZXQoKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0LSAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9OTM9c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTk5LVxcdG1lbXNldCh1dl9saXN0LCAwLCBzaXplb2YoKnV2X2xpc3QpKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMDA6XFx0cmMgPSB1dl9maW5kX3NlY3JldChzZWNyZXRfaWQsIHV2X2xpc3QsIHNlY3JldCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTAxLVxcdG11dGV4X3VubG9jayhcXHUwMDI2dXZfbGlzdF9tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjI0OjAwLjkyMTQ3OTMyOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTA0MDg4NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgUGF0aCBDb25maXJtZWQqKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyBvbmx5IGV2ZXIgY2FsbGVkIGJ5IGBwa2V5X3V2LmNgLiBGdXJ0aGVyIGludmVzdGlnYXRpb24gcmV2ZWFscyB0aGF0IGBwa2V5X3V2LmNgIGl0c2VsZiBvbmx5IGJlY29tZXMgYWN0aXZlIHVuZGVyIHRoZSBjb25kaXRpb24gYGlzX3Byb3RfdmlydF9ndWVzdCgpYCBldmFsdWF0ZXMgdG8gdHJ1ZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggU2VjdXJlIEV4ZWN1dGlvbiAoVWx0cmF2aXNvcikgY2FwYWJpbGl0aWVzIG9uIHMzOTB4LlxuXG5UaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGRlZmluaXRlbHkgKm5vdCogc29tZXRoaW5nIHdlJ2xsIGJlIGFibGUgdG8gaGl0IGR1cmluZyBmdXppbmcgd2l0aCBzeXprYWxsZXIuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgVENHIGFyZSBzaW1wbHkgbm90IGVxdWlwcGVkIHRvIHRyaWdnZXIgdGhpcyBwYXJ0aWN1bGFyIGNvbmRpdGlvbi4gV2UnZCBuZWVkIHNvbWV0aGluZyB2ZXJ5IHNwZWNpZmljLCBsaWtlIGEgYmVzcG9rZSBzZWN1cmUgYm9vdCBpbWFnZSB3aXRoIHMzOTB4IFNlY3VyZSBFeGVjdXRpb24gZW5hYmxlZC4gSSdtIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyB1bmZ1enphYmxlLiBMZXQncyBzZXQgV29ydGhGdXp6aW5nPWZhbHNlIGZvciB0aGlzIGNhc2UuIE15IHJlYXNvbmluZyBpcyB0aGF0IGl0IGZ1bmRhbWVudGFsbHkgZGVwZW5kcyBvbiBhIHBsYXRmb3JtIGZlYXR1cmUgdGhhdCdzIHVuYXZhaWxhYmxlIGluIG91ciBzdGFuZGFyZCB0ZXN0aW5nIHNldHVwLiBObyBwb2ludCB3YXN0aW5nIGN5Y2xlcyBvbiBzb21ldGhpbmcgdGhhdCdzIHVucmVhY2hhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU1NCwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjQ6MDYuMDI1NTcwNzU3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHV2X2ZpbmRfc2VjcmV0YCBpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBgcGtleV91dmAgY3J5cHRvIGRyaXZlci4gVGhpcyBkcml2ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIFVsdHJhdmlzb3IgQ2FsbCAoVVZDKSBmdW5jdGlvbmFsaXR5IGFyZSBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhcyBhbiBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIChwcm90ZWN0ZWQgdmlydHVhbGl6YXRpb24pIGd1ZXN0LiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIChJQk0gejE1KyB3aXRoIFVsdHJhdmlzb3IpIGFuZCBhIHNwZWNpYWxseSBjcmFmdGVkIGVuY3J5cHRlZCBib290IGltYWdlIChnZW5wcm90aW1nKSwgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBUQ0cgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHV2X2ZpbmRfc2VjcmV0YCBpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBgcGtleV91dmAgY3J5cHRvIGRyaXZlci4gVGhpcyBkcml2ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIFVsdHJhdmlzb3IgQ2FsbCAoVVZDKSBmdW5jdGlvbmFsaXR5IGFyZSBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhcyBhbiBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIChwcm90ZWN0ZWQgdmlydHVhbGl6YXRpb24pIGd1ZXN0LiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIChJQk0gejE1KyB3aXRoIFVsdHJhdmlzb3IpIGFuZCBhIHNwZWNpYWxseSBjcmFmdGVkIGVuY3J5cHRlZCBib290IGltYWdlIChnZW5wcm90aW1nKSwgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBUQ0cgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjQ6MDYuMDI1NTk5Njk3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowzhq26[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 09:20:54 +0000 UTC FinishedAt: 2026-08-11 09:24:07 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHV2X2ZpbmRfc2VjcmV0YCBpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBgcGtleV91dmAgY3J5cHRvIGRyaXZlci4gVGhpcyBkcml2ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIFVsdHJhdmlzb3IgQ2FsbCAoVVZDKSBmdW5jdGlvbmFsaXR5IGFyZSBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhcyBhbiBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIChwcm90ZWN0ZWQgdmlydHVhbGl6YXRpb24pIGd1ZXN0LiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIChJQk0gejE1JiM0Mzsgd2l0aCBVbHRyYXZpc29yKSBhbmQgYSBzcGVjaWFsbHkgY3JhZnRlZCBlbmNyeXB0ZWQgYm9vdCBpbWFnZSAoZ2VucHJvdGltZyksIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgVENHIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0Mzg0OTZlZjFjZmJiMjExYjI3NGE3ZmMwZjhjOWFiODE0NGIxMjgwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6MjI6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC91di5jIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXG5pbmRleCBhMjg0Zjk4ZDk3MTY4Li5kOTcwYjE1ZWYxMjZkIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbkBAIC03ODEsMTEgJiM0Mzs3ODEsMTQgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbiBcdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuIFx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcbiB7XG4tXHR1MTYgc3RhcnRfaWR4ID0gMDtcbiYjNDM7XHR1MTYgc3RhcnRfaWR4O1xuIFx0dTE2IGxpc3RfcmM7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcbiYjNDM7XG4gXHRkbyB7XG4mIzQzO1x0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbiBcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG4gXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4gXHRcdFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXG5AQCAtNzk2LDcgJiM0Mzs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuIFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFx1MDAyNlx1MDAyNiBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4KTtcbiBcbiBcdHJldHVybiAtRU5PRU5UO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdXZfZmluZF9zZWNyZXRgIGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhlIGBwa2V5X3V2YCBjcnlwdG8gZHJpdmVyLiBUaGlzIGRyaXZlciBhbmQgdGhlIHVuZGVybHlpbmcgVWx0cmF2aXNvciBDYWxsIChVVkMpIGZ1bmN0aW9uYWxpdHkgYXJlIG9ubHkgYWN0aXZlIHdoZW4gdGhlIHN5c3RlbSBpcyBydW5uaW5nIGFzIGFuIHMzOTB4IFNlY3VyZSBFeGVjdXRpb24gKHByb3RlY3RlZCB2aXJ0dWFsaXphdGlvbikgZ3Vlc3QuIFRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgKElCTSB6MTUmIzQzOyB3aXRoIFVsdHJhdmlzb3IpIGFuZCBhIHNwZWNpYWxseSBjcmFmdGVkIGVuY3J5cHRlZCBib290IGltYWdlIChnZW5wcm90aW1nKSwgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBUQ0cgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQzODQ5NmVmMWNmYmIyMTFiMjc0YTdmYzBmOGM5YWI4MTQ0YjEyODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwOToyMjoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuYwppbmRleCBhMjg0Zjk4ZDk3MTY4Li5kOTcwYjE1ZWYxMjZkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC91di5jCkBAIC03ODEsMTEgJiM0Mzs3ODEsMTQgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSwKIAkJICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LAogCQkgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldCkKIHsKLQl1MTYgc3RhcnRfaWR4ID0gMDsKJiM0MzsJdTE2IHN0YXJ0X2lkeDsKIAl1MTYgbGlzdF9yYzsKIAlpbnQgcmV0OwogCiYjNDM7CWxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCA9IDA7CiYjNDM7CiAJZG8gewomIzQzOwkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCQl1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCAmYW1wO2xpc3RfcmMsIE5VTEwpOwogCQlpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgJmFtcDsmYW1wOyBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHsKIAkJCWlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKQpAQCAtNzk2LDcgJiM0Mzs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogCQlyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJcmV0dXJuIHJldDsKLQkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCX0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSAmYW1wOyZhbXA7IHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCk7CiAKIAlyZXR1cm4gLUVOT0VOVDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCB0byBgdXZfZmluZF9zZWNyZXRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGV5JiMzOTt2ZSBtYWRlIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQsIGNoYW5nZSB0byB0aGUgbG9vcCYjMzk7cyBsb2dpYy4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBgc3RhcnRfaWR4YCB3YXMgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgdGhlbiB1cGRhdGVkICphdCB0aGUgZW5kKiBvZiB0aGUgbG9vcCB3aXRoIHRoZSB2YWx1ZSBvZiBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YC4gTm93LCBpdCBpbml0aWFsaXplcyBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCBiZWZvcmUgdGhlIGxvb3AsIGFuZCBpbnNpZGUgdGhlIGxvb3AsIHRoZXkgYXJlIHNldHRpbmcgYHN0YXJ0X2lkeCA9IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAsIHRoZW4gdXNpbmcgdGhhdCB2YXJpYWJsZSBpbiB0aGUgbG9vcCBjb25kaXRpb24uCgpIb2xkIG9uLi4uIHRoYXQgbG9vcCBjb25kaXRpb24uIEl0JiMzOTtzIGB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBICZhbXA7JmFtcDsgc3RhcnRfaWR4ICZsdDsgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4KTtgLiBJZiBgc3RhcnRfaWR4YCB3YXMgdXBkYXRlZCAqYWZ0ZXIqIHRoZSBsb29wIGJvZHksIHRoZW4gdGhlIGNvbXBhcmlzb24gYHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgd291bGQgZXNzZW50aWFsbHkgYWx3YXlzIGJlIGZhbHNlIGJlY2F1c2UgYHN0YXJ0X2lkeGAgYW5kIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgIGFyZSBhbHdheXMgYmVpbmcgYXNzaWduZWQgdGhlIHNhbWUgdmFsdWUgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCwgcmlnaHQ/CgpCdXQgbm93LCBgc3RhcnRfaWR4YCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgdXZfbGlzdF9zZWNyZXRzYCwgYW5kIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgIGlzIHVwZGF0ZWQgKmR1cmluZyogdGhlIGNhbGwgdG8gYHV2X2xpc3Rfc2VjcmV0c2AuIFRodXMsIHRoZSBsb29wIGNvbmRpdGlvbiBjaGVja3MgaWYgdGhlIHNlYXJjaCBpbmRleCBoYXMgYWR2YW5jZWQuIFRoYXQgbWFrZXMgbXVjaCBtb3JlIHNlbnNlLiBJdCBjaGVja3MgaWYgdGhlIHNlYXJjaCBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIG5ldyB1cHBlciBsaW1pdC4KCkFscmlnaHQsIGxldCYjMzk7cyBjb25maXJtIGlmIHRoaXMgaXMgczM5MCBzcGVjaWZpYy4gWWVwLCBpdCYjMzk7cyByaWdodCB0aGVyZSBpbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYC4gU28sIGlzIHRoaXMgcmVhY2hhYmxlIGluIFFFTVU/IFMzOTAgaXMgc3VwcG9ydGVkIGJ5IHN5emthbGxlci4gSSBzaG91bGQgY2hlY2sgaG93IHRvIGZpbmQgb3V0IGlmIGB1dl9maW5kX3NlY3JldGAgaXMgcmVhY2hhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2ZpbmRfc2VjcmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC91di5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc0LSAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzgwOmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBDYWxsIFNpdGVzIG9mIGB1dl9maW5kX3NlY3JldGAqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGludm9sdmluZyBgdXZfZmluZF9zZWNyZXRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEtub3dpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCByZXZlYWwgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0IG9wZXJhdGVzLCB0aGUgZGF0YSBpdCYjMzk7cyBsaWtlbHkgcHJvY2Vzc2luZywgYW5kIHBvdGVudGlhbGx5IHRoZSBzZWN1cml0eSBjb25jZXJucyBpdCYjMzk7cyBhZGRyZXNzaW5nIChvciBjcmVhdGluZyEpLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCBtYXAgb3V0IHRob3NlIGNvbm5lY3Rpb25zLiBMZXQmIzM5O3MgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjEzPXN0YXRpYyBpbmxpbmUgaW50IHV2X3JlbW92ZV9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxNy1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxODppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTc1Nz1zdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzczOiAqIHV2X2ZpbmRfc2VjcmV0KCkgLSBzZWFyY2ggc2VjcmV0IG1ldGFkYXRhIGZvciBhIGdpdmVuIHNlY3JldCBpZC5cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzQtICogQHNlY3JldF9pZDogc2VhcmNoIHBhdHRlcm4uXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3OS0gKi9cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODA6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA1LX1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMD1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7czM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcJiMzNDspO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMzogKiBPbmUgcHJlLWFsbG9jYXRlZCB1dl9zZWNyZXRfbGlzdCBmb3IgdXNlIHdpdGggdXZfZmluZF9zZWNyZXQoKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQtICovXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9OTM9c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cdG1lbXNldCh1dl9saXN0LCAwLCBzaXplb2YoKnV2X2xpc3QpKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwMDpcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTAxLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMDUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIFMzOTAgQ3J5cHRvIEtleSBEcml2ZXIqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGllY2Ugb2YgY29kZSBpbiBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNgLiBUaGF0JiMzOTtzIHdoZXJlIGl0JiMzOTtzIGFsbCBoYXBwZW5pbmcsIGh1aD8gSSBzaG91bGQgZGl2ZSBkaXJlY3RseSBpbnRvIHRoYXQgc3BlY2lmaWMgZmlsZSB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24uIFNlZW1zIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgUzM5MCBhcmNoaXRlY3R1cmUgYW5kIGl0cyBjcnlwdG9ncmFwaGljIGtleSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVVYgZnJhbWV3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhleSYjMzk7dmUgZ290IHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgaW1wbGVtZW50YXRpb24gZGV0YWlscywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgdGhleSYjMzk7dmUgZW1wbG95ZWQuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGhhbmRzLW9uIGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3NlY3JldF9tZXRhZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTgzPXN0YXRpYyBib29sIGlzX3V2X2tleXR5cGUoZW51bSBwa2V5X2tleV90eXBlIGtleXR5cGUpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTItXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzo5MzpzdGF0aWMgaW50IGdldF9zZWNyZXRfbWV0YWRhdGEoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTQtXHRcdFx0ICAgICAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTEwNj1zdGF0aWMgaW50IHJldHJpZXZlX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTExLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTEyOlx0cmMgPSBnZXRfc2VjcmV0X21ldGFkYXRhKHNlY3JldF9pZCwgXHUwMDI2c2VjcmV0X21ldGFfZGF0YSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMTMtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjMzPXN0YXRpYyBpbnQgdXZfdmVyaWZ5a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQ3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjQ4Olx0cmMgPSBnZXRfc2VjcmV0X21ldGFkYXRhKHQtXHUwMDNlc2VjcmV0X2lkLCBcdTAwMjZzZWNyZXRfbWV0YV9kYXRhKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0OS1cdGlmIChyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODU3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm90ZWN0ZWQgS2V5IFVWIEhhbmRsZXIqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHBrZXlfdXYuY2AgZmlsZS4gUmlnaHQsIGEgJiMzNDtwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXImIzM0Oy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IGJlZ3MgdGhlIHF1ZXN0aW9uOiBob3cgaXMgdGhpcyBiZWluZyB0cmlnZ2VyZWQ/IElzIGl0IGEgY29yZSBjb21wb25lbnQgb3IgaXMgaXQgcmVhY2hhYmxlIHZpYSBtdWx0aXBsZSBwYXRocz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVudHJ5IHBvaW50cy4KCkkmIzM5O2xsIGNoZWNrIHRoZSByZWxhdGVkIGNvZGUgdG8gc2VlIHdoYXQgY2x1ZXMgSSBjYW4gZ2xlYW4uIExldCBtZSBsb29rIGF0IGJvdGggYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYCBhbmQgYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuY2AuIEhvcGVmdWxseSwgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgZmlsZXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBmbG93LiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl92ZXJpZnlrZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0xOTA9c3RhdGljIGludCB1dl9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICpfYXBxbnMgX19hbHdheXNfdW51c2VkLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIzMi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzMzpzdGF0aWMgaW50IHV2X3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjM0LVx0XHRcdHUxNiAqX2NhcmQgX19hbHdheXNfdW51c2VkLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTI3Mj1zdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciB1dl9oYW5kbGVyID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3Ny1cdC5rZXlfdG9fcHJvdGtleVx0XHQgPSB1dl9rZXkycHJvdGtleSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI3ODpcdC52ZXJpZnlfa2V5XHRcdCA9IHV2X3ZlcmlmeWtleSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3OS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzk1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyBhIE5ldyBgcGtleV9oYW5kbGVyYCBSZWdpc3RyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYHBrZXlfaGFuZGxlcmAgcmVnaXN0cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGVyZSB0aGlzIGlzIGFjdHVhbGx5ICpoYW5kbGVkKi4mIzM0OyBHaXZlbiB0aGUgY29udGV4dCwgbXkgbWVudGFsIG1hcCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUga2VybmVsJiMzOTtzIGNyeXB0byBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbmV3IGtleSB0eXBlLgoKTXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbnMgYW5kIEFQSSBpbnRlcmFjdGlvbnMgcmVsYXRlZCB0byBrZXkgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gVGhpcyBzb3VuZHMgbGlrZSBpdCBjb3VsZCBiZSBhIGhhcmR3YXJlLWFjY2VsZXJhdGVkIGNyeXB0byBvcGVyYXRpb24gb2Ygc29tZSBraW5kLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLCBhdCB0aGUgaGVhcnQgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbXMsIGRhdGEgc3RydWN0dXJlcyBkZWZpbmluZyB0aGUgaGFuZGxlciBpdHNlbGYsIGFuZCBmdW5jdGlvbiBjYWxscyB0aGF0IGltcGxlbWVudCB0aGUga2V5IG9wZXJhdGlvbnMuIEkgZXhwZWN0IGEgZmV3IGxldmVscyBvZiBpbmRpcmVjdGlvbiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwa2V5X2hhbmRsZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MjU9c3RhdGljIGludCBrZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zMi1cdC8qIHRyeSB0aGUgZGlyZWN0IHdheSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjMzOlx0cmMgPSBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoYXBxbnMsIG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM0LVx0XHRcdFx0XHQga2V5LCBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM5LVx0aWYgKHJjID09IC1FTk9ERVYpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0MDpcdFx0cmMgPSBwa2V5X2hhbmRsZXJfc2xvd3BhdGhfa2V5X3RvX3Byb3RrZXkoYXBxbnMsIG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxLVx0XHRcdFx0XHRcdFx0ICBrZXksIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU9aW50IHBrZXlfa2V5MnByb3RrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjItXHRpZiAocmMgPT0gLUVOT0RFVikge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjYzOlx0XHRwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjQtXHRcdHJjID0ga2V5MnByb3RrZXkoTlVMTCwgMCwga2V5LCBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTkyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9nZW5zZWNrKHN0cnVjdCBwa2V5X2dlbnNlY2sgX191c2VyICp1Z3MpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEwNC1cdGtleWJ1ZmxlbiA9IHNpemVvZihrZ3Muc2Vja2V5LnNlY2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTA1Olx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShcdTAwMjZhcHFuLCAxLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEwNi1cdFx0XHRcdCAga2dzLmtleXR5cGUsIFBLRVlfVFlQRV9DQ0FfREFUQSwgMCwgMCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTE2PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9jbHIyc2VjayhzdHJ1Y3QgcGtleV9jbHIyc2VjayBfX3VzZXIgKnVjcylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTI4LVx0a2V5YnVmbGVuID0gc2l6ZW9mKGtjcy5zZWNrZXkuc2Vja2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoxMjk6XHRyYyA9IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KFx1MDAyNmFwcW4sIDEsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTMwLVx0XHRcdFx0ICAgICBrY3Mua2V5dHlwZSwgUEtFWV9UWVBFX0NDQV9EQVRBLCAwLCAwLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0xNDI9c3RhdGljIGludCBwa2V5X2lvY3RsX3NlYzJwcm90ayhzdHJ1Y3QgcGtleV9zZWMycHJvdGsgX191c2VyICp1c3ApXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTE1My1cdGtzcC5wcm90a2V5LmxlbiA9IHNpemVvZihrc3AucHJvdGtleS5wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoxNTQ6XHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShcdTAwMjZhcHFuLCAxLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTE1NS1cdFx0XHRcdFx0IGtzcC5zZWNrZXkuc2Vja2V5LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yMTU9c3RhdGljIGludCBwa2V5X2lvY3RsX2ZpbmRjYXJkKHN0cnVjdCBwa2V5X2ZpbmRjYXJkIF9fdXNlciAqdWZjKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yMjktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjMwOlx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShrZmMuc2Vja2V5LnNlY2tleSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yMzEtXHRcdFx0XHRcdHNpemVvZihrZmMuc2Vja2V5LnNlY2tleSksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNC1cdGlmIChyYyA9PSAtRU5PREVWKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjIzNTpcdFx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShrZmMuc2Vja2V5LnNlY2tleSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yMzYtXHRcdFx0XHRcdFx0c2l6ZW9mKGtmYy5zZWNrZXkuc2Vja2V5KSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MjUzPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9za2V5MnBrZXkoc3RydWN0IHBrZXlfc2tleTJwa2V5IF9fdXNlciAqdXNwKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yNjEtXHRrc3AucHJvdGtleS5sZW4gPSBzaXplb2Yoa3NwLnByb3RrZXkucHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjYyOlx0cmMgPSBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoTlVMTCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yNjMtXHRcdFx0XHRcdCBrc3Auc2Vja2V5LnNlY2tleSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9Mjc2PXN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlrZXkoc3RydWN0IHBrZXlfdmVyaWZ5a2V5IF9fdXNlciAqdXZrKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yODYtXHRrdmsuZG9tYWluID0gMHhGRkZGO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjI4NzpcdHJjID0gcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoa3ZrLnNlY2tleS5zZWNrZXksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjg4LVx0XHRcdFx0ICAgICBzaXplb2Yoa3ZrLnNlY2tleS5zZWNrZXkpLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0zMDU9c3RhdGljIGludCBwa2V5X2lvY3RsX2dlbnByb3RrKHN0cnVjdCBwa2V5X2dlbnByb3RrIF9fdXNlciAqdWdwKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zMTMtXHRrZ3AucHJvdGtleS5sZW4gPSBzaXplb2Yoa2dwLnByb3RrZXkucHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MzE0Olx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShOVUxMLCAwLCBrZ3Aua2V5dHlwZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zMTUtXHRcdFx0XHQgIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0zMjY9c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeXByb3RrKHN0cnVjdCBwa2V5X3ZlcmlmeXByb3RrIF9fdXNlciAqdXZwKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zNTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MzU2Olx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSh0bXBidWYsIHNpemVvZigqdCksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzU3LVx0XHRcdFx0ICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MzkwPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9nZW5zZWNrMihzdHJ1Y3QgcGtleV9nZW5zZWNrMiBfX3VzZXIgKnVncylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDE0LVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjQxNTpcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoYXBxbnMsIGtncy5hcHFuX2VudHJpZXMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDE2LVx0XHRcdFx0ICB1LCBrZ3MudHlwZSwga2dzLnNpemUsIGtncy5rZXlnZW5mbGFncyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NDQyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9jbHIyc2VjazIoc3RydWN0IHBrZXlfY2xyMnNlY2syIF9fdXNlciAqdWNzKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00NzAtXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NDcxOlx0cmMgPSBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShhcHFucywga2NzLmFwcW5fZW50cmllcyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00NzItXHRcdFx0XHQgICAgIHUsIGtjcy50eXBlLCBrY3Muc2l6ZSwga2NzLmtleWdlbmZsYWdzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz01MDM9c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleTIoc3RydWN0IHBrZXlfdmVyaWZ5a2V5MiBfX3VzZXIgKnV2aylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTE0LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjUxNTpcdHJjID0gcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoa2tleSwga3ZrLmtleWxlbixcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01MTYtXHRcdFx0XHQgICAgIFx1MDAyNmt2ay5jYXJkbnIsIFx1MDAyNmt2ay5kb21haW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTU1OD1zdGF0aWMgaW50IHBrZXlfaW9jdGxfYXBxbnM0ayhzdHJ1Y3QgcGtleV9hcHFuczRrZXkgX191c2VyICp1YWspXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTU3OC1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1Nzk6XHRyYyA9IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KGtrZXksIGthay5rZXlsZW4sIGthay5mbGFncyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01ODAtXHRcdFx0XHRcdGFwcW5zLCBcdTAwMjZucl9hcHFucywgMCk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTYwOD1zdGF0aWMgaW50IHBrZXlfaW9jdGxfYXBxbnM0a3Qoc3RydWN0IHBrZXlfYXBxbnM0a2V5dHlwZSBfX3VzZXIgKnVhdClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjIyLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjYyMzpcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGthdC50eXBlLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTYyNC1cdFx0XHRcdFx0ICAgIGthdC5jdXJfbWt2cCwga2F0LmFsdF9ta3ZwLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM9MzQ9c3RhdGljIExJU1RfSEVBRChoYW5kbGVyX2xpc3QpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzY6aW50IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNy17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM4Olx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzktXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy03OC19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjc5OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3JlZ2lzdGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtODAtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjgxOmludCBwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy04Mi17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy05My19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjk0OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3VucmVnaXN0ZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy05NS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTk5LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMDA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMDEte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMDI6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMDMtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTctfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMTg6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTE5LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMjA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoZW51bSBwa2V5X2tleV90eXBlIGt0KVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMjEte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMjI6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMjMtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMzctfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMzg6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTEzOS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTQwOnZvaWQgcGtleV9oYW5kbGVyX3B1dChjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNDEte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNDI6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNDMtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTUtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNTY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfcHV0KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNTg6aW50IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTktXHRcdFx0XHRjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTYyLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTYzOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTY0LVx0aW50IHJjID0gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTY1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNjY6XHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChrZXksIGtleWxlbik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Ny1cdGlmIChoIFx1MDAyNlx1MDAyNiBoLVx1MDAzZWtleV90b19wcm90a2V5KSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzEtXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE3MjpcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3My1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3NS19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE3NjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3Ny1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE4My0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTg0OmludCBwa2V5X2hhbmRsZXJfc2xvd3BhdGhfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE4NS1cdFx0XHRcdFx0IHNpemVfdCBucl9hcHFucyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE4OS17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE5MDpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmgsICpodG1wWzEwXTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTkxLVx0aW50IGksIG4gPSAwLCByYyA9IC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTUtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMTY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfc2xvd3BhdGhfa2V5X3RvX3Byb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIxODppbnQgcGtleV9oYW5kbGVyX2dlbl9rZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjE5LVx0XHRcdCB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjIte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMjM6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjQtXHRpbnQgcmMgPSAtRU5PREVWO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIyNjpcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI3LVx0aWYgKGggXHUwMDI2XHUwMDI2IGgtXHUwMDNlZ2VuX2tleSkge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMxLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMzI6XHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzMtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzUtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMzY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfZ2VuX2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIzNy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM4OmludCBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzktXHRcdFx0ICAgIHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0NC17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI0NTpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0Ni1cdGludCByYyA9IC1FTk9ERVY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjQ4Olx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGtleXN1YnR5cGUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNDktXHRpZiAoaCBcdTAwMjZcdTAwMjYgaC1cdTAwM2VjbHJfdG9fa2V5KSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNTMtXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI1NDpcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1NS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1Ny19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI1ODpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjU5LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjA6aW50IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2MS1cdFx0XHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2NC17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2NTpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2Ni1cdGludCByYyA9IC1FTk9ERVY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjY4Olx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoa2V5LCBrZXlsZW4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjktXHRpZiAoaCBcdTAwMjZcdTAwMjYgaC1cdTAwM2V2ZXJpZnlfa2V5KSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzItXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI3MzpcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI3NC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI3Ni19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI3NzpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc4LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNzk6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sIHUzMiBmbGFncyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjgwLVx0XHRcdCAgICAgICBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90ICpucl9hcHFucyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4Mi17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI4MzpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4NC1cdGludCByYyA9IC1FTk9ERVY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4NS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjg2Olx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoa2V5LCBrZXlsZW4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODctXHRpZiAoaCBcdTAwMjZcdTAwMjYgaC1cdTAwM2VhcHFuc19mb3Jfa2V5KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg5LVx0XHRcdFx0ICAgICAgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjkwOlx0cGtleV9oYW5kbGVyX3B1dChoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjkxLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjkzLX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjk0OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yOTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NjppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrZXlzdWJ0eXBlLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yOTctXHRcdFx0XHQgICB1OCBjdXJfbWt2cFszMl0sIHU4IGFsdF9ta3ZwWzMyXSwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzAwLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzAxOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzAyLVx0aW50IHJjID0gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzAzLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMDQ6XHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoa2V5c3VidHlwZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwNS1cdGlmIChoIFx1MDAyNlx1MDAyNiBoLVx1MDAzZWFwcW5zX2Zvcl9rZXl0eXBlKSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDktXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxMDpcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxMS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxMy19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxNDpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxNS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzE2OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTcte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTgtI2lmZGVmIENPTkZJR19NT0RVTEVTXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxOTpcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGtleV9oYW5kbGVyX21vZHVsZXNbXSA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzIwLSNpZiBJU19NT0RVTEUoQ09ORklHX1BLRVlfQ0NBKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzM0LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMzU6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBrZXlfaGFuZGxlcl9tb2R1bGVzKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzM2Olx0XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMzctXHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM0MS1cdFx0XHRpZiAoaC1cdTAwM2Vtb2R1bGUgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM0MjpcdFx0XHQgICAgIXN0cmNtcChoLVx1MDAzZW1vZHVsZS1cdTAwM2VuYW1lLCBwa2V5X2hhbmRsZXJfbW9kdWxlc1tpXSkpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzQzLVx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzQ4LVx0XHRpZiAoIWZvdW5kKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM0OTpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtyZXF1ZXN0X21vZHVsZSglcylcXG5cJiMzNDssIHBrZXlfaGFuZGxlcl9tb2R1bGVzW2ldKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzUwOlx0XHRcdHJlcXVlc3RfbW9kdWxlKHBrZXlfaGFuZGxlcl9tb2R1bGVzW2ldKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzUxLVx0XHR9XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTQtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozNTU6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzU2LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg9MTQ1PWV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpwa2V5X2F0dHJfZ3JvdXBzW107XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTAtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjE1MTpzdHJ1Y3QgcGtleV9oYW5kbGVyIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMTUyLVx0c3RydWN0IG1vZHVsZSAqbW9kdWxlO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMTkyLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxOTM6aW50IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MTk0OmludCBwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMTk1LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMTk5LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjAxOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGVudW0gcGtleV9rZXlfdHlwZSBrdCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwMjp2b2lkIHBrZXlfaGFuZGxlcl9wdXQoY29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwMy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjA0OmludCBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjA1LVx0XHRcdFx0Y29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwNy1cdFx0XHRcdHUzMiB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDg6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjA5LVx0XHRcdFx0XHQgc2l6ZV90IG5yX2FwcW5zLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjEyLVx0XHRcdFx0XHQgdTMyICpwcm90a2V5dHlwZSwgdTMyIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIxMzppbnQgcGtleV9oYW5kbGVyX2dlbl9rZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjE0LVx0XHRcdCB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTYtXHRcdFx0IHU4ICprZXlidWYsIHUzMiAqa2V5YnVmbGVuLCB1MzIgKmtleWluZm8sIHUzMiB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMTc6aW50IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxOC1cdFx0XHQgICAgdTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjIyLVx0XHRcdCAgICB1MzIgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjIzOmludCBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMjQtXHRcdFx0ICAgIHUxNiAqY2FyZCwgdTE2ICpkb20sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMjYtXHRcdFx0ICAgIHUzMiB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMjc6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sIHUzMiBmbGFncyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI4LVx0XHRcdCAgICAgICBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90ICpucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI5LVx0XHRcdCAgICAgICB1MzIgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjMwOmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUoZW51bSBwa2V5X2tleV90eXBlIGt0eXBlLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMzEtXHRcdFx0XHQgICB1OCBjdXJfbWt2cFszMl0sIHU4IGFsdF9ta3ZwWzMyXSwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjM3LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMzg6dm9pZCBwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKHZvaWQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMzktXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jPTU1Nz1zdGF0aWMgaW50IGNjYV9zbG93cGF0aF9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNTk1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jOjU5NjpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciBjY2FfaGFuZGxlciA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy01OTctXHQubW9kdWxlXHRcdFx0ID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jPTYxMz1zdGF0aWMgaW50IF9faW5pdCBwa2V5X2NjYV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYxNS1cdC8qIHJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciBmb3IgYWxsIHRoZSBjY2Egc3R1ZmYgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MTY6XHRyZXR1cm4gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFx1MDAyNmNjYV9oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTctfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYz02MjI9c3RhdGljIHZvaWQgX19leGl0IHBrZXlfY2NhX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjI0LVx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MjU6XHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcdTAwMjZjY2FfaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjI2LX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jPTUwND1zdGF0aWMgaW50IGVwMTFfc2xvd3BhdGhfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NDItXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU0MzpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciBlcDExX2hhbmRsZXIgPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU0NC1cdC5tb2R1bGVcdFx0XHQgPSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jPTU2MD1zdGF0aWMgaW50IF9faW5pdCBwa2V5X2VwMTFfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTYyLVx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGVwMTEgc3R1ZmYgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM6NTYzOlx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcdTAwMjZlcDExX2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NjQtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTY5PXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X2VwMTFfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTcxLVx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM6NTcyOlx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXHUwMDI2ZXAxMV9oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTczLX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYz00MzU9c3RhdGljIGludCBwa2V5X3Bja21vX3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ0Mi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jOjQ0MzpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciBwY2ttb19oYW5kbGVyID0ge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDQ0LVx0Lm1vZHVsZVx0XHQgICAgICA9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBwa2V5X3Bja21vX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NjktXHQvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgZm9yIGFsbCB0aGUgcGNrbW8gc3R1ZmYgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jOjQ3MDpcdHJldHVybiBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoXHUwMDI2cGNrbW9faGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NzEtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ3Nj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9wY2ttb19leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDc4LVx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jOjQ3OTpcdHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKFx1MDAyNnBja21vX2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDgwLX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNy0vKlxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MTg6ICogV3JhcHBlciBhcm91bmQgcGtleV9oYW5kbGVyX2dlbl9rZXkoKSB3aGljaCBkZWFscyB3aXRoIHRoZVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTktICogRU5PREVWIHJldHVybiBjb2RlIGFuZCB0aGVuIHRyaWVzIHRvIGVuZm9yY2UgYSBwa2V5IGhhbmRsZXJcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0yMS0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjIyOnN0YXRpYyBpbnQgc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTIzLVx0XHRcdFx0ICAgIHUzMiBrZXliaXRzaXplLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzoyODpcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTI5LVx0XHRcdFx0ICBrZXl0eXBlLCBrZXlzdWJ0eXBlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyLVx0aWYgKHJjID09IC1FTk9ERVYpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMzOlx0XHRwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzozNDpcdFx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShOVUxMLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzUtXHRcdFx0XHRcdCAga2V5dHlwZSwga2V5c3VidHlwZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz00OT1zdGF0aWMgc3NpemVfdCBwa2V5X3Byb3RrZXlfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy02Ny1cdHByb3RrZXkubGVuID0gc2l6ZW9mKHByb3RrZXkucHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzo2ODpcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNjktXHRcdFx0XHQgICAgICBwcm90a2V5LnByb3RrZXksIFx1MDAyNnByb3RrZXkubGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTgxLVx0XHRwcm90a2V5LmxlbiA9IHNpemVvZihwcm90a2V5LnByb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6ODI6XHRcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtODMtXHRcdFx0XHRcdCAgICAgIHByb3RrZXkucHJvdGtleSwgXHUwMDI2cHJvdGtleS5sZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9MTA2PXN0YXRpYyBzc2l6ZV90IHBrZXlfcHJvdGtleV9hZXNfeHRzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTEzMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjEzMjpcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTMzLVx0XHRcdFx0ICAgICAgdC1cdTAwM2Vwcm90a2V5LCBcdTAwMjZwcm90bGVuLCBcdTAwMjZwcm90dHlwZSk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9MTQ4PXN0YXRpYyBzc2l6ZV90IHBrZXlfcHJvdGtleV9obWFjX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE3My1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjE3NDpcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTc1LVx0XHRcdFx0ICAgICAgdC1cdTAwM2Vwcm90a2V5LCBcdTAwMjZwcm90bGVuLCBcdTAwMjZwcm90dHlwZSk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9MzA4PXN0YXRpYyBzc2l6ZV90IHBrZXlfY2NhZGF0YV9hZXNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBib29sIGlzX3h0cywgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyMS1cdGJ1ZmxlbiA9IHNpemVvZihzZWNrZXktXHUwMDNlc2Vja2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMyMjpcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9DQ0FfREFUQSwgMCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyMy1cdFx0XHRcdCAgICAgIHNlY2tleS1cdTAwM2VzZWNrZXksIFx1MDAyNmJ1ZmxlbiwgTlVMTCk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzI5LVx0XHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVx1MDAzZXNlY2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzozMzA6XHRcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9DQ0FfREFUQSwgMCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMzMS1cdFx0XHRcdFx0ICAgICAgc2Vja2V5LVx1MDAzZXNlY2tleSwgXHUwMDI2YnVmbGVuLCBOVUxMKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz00MTk9c3RhdGljIHNzaXplX3QgcGtleV9jY2FjaXBoZXJfYWVzX2F0dHJfcmVhZChlbnVtIHBrZXlfa2V5X3NpemUga2V5Yml0cyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy00MzMtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzo0MzQ6XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy00MzUtXHRcdFx0XHQgICAgICBQS0VZX1RZUEVfQ0NBX0NJUEhFUiwga2V5Yml0cywgMCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy00NDItXHRcdGJ1ZiAmIzQzOz0gQ0NBQ0lQSEVSVE9LRU5TSVpFO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NDQzOlx0XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQ0NC1cdFx0XHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9NTM0PXN0YXRpYyBzc2l6ZV90IHBrZXlfZXAxMV9hZXNfYXR0cl9yZWFkKGVudW0gcGtleV9rZXlfc2l6ZSBrZXliaXRzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU0OC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjU0OTpcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU1MC1cdFx0XHRcdCAgICAgIFBLRVlfVFlQRV9FUDExX0FFUywga2V5Yml0cywgMCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NTctXHRcdGJ1ZiAmIzQzOz0gTUFYRVAxMUFFU0tFWUJMT0JTSVpFO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTU4Olx0XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU1OS1cdFx0XHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjMzPXN0YXRpYyBpbnQgdXZfdmVyaWZ5a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjcxLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjcyOnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIHV2X2hhbmRsZXIgPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzMtXHQubW9kdWxlXHRcdFx0ID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI5Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI5ODpcdHJjID0gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFx1MDAyNnV2X2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk5LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTMwOD1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV91dl9leGl0KHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0zMDkte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MzEwOlx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXHUwMDI2dXZfaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0zMTEtXHRtdXRleF9sb2NrKFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE2MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUHVibGljIEtleSBJbmZyYXN0cnVjdHVyZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHBrZXlfdXYuY2AgaXMgdGhlIGtleSBoZXJlIOKAkyBpdCYjMzk7cyByZWdpc3RlcmluZyBhIGB1dl9oYW5kbGVyYC4gVGhhdCBgdXZfaGFuZGxlcmAgc2VlbXMgY3J1Y2lhbCwgYXMgaXQgcHJvdmlkZXMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0aWVzOiBga2V5X3RvX3Byb3RrZXlgIGFuZCBgdmVyaWZ5X2tleWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUsIGluIHR1cm4sIGFjY2Vzc2VkIGJ5IGhpZ2hlci1sZXZlbCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXlgIGFuZCBgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXlgLgoKTm93LCB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGVzZSBoYW5kbGVyIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkIGJ5IGEgdmFyaWV0eSBvZiBpb2N0bCBpbnRlcmZhY2VzLiBJIHNlZSBmdW5jdGlvbnMgbGlrZSBgcGtleV9pb2N0bF92ZXJpZnlrZXlgLCBgcGtleV9pb2N0bF92ZXJpZnlrZXkyYCwgYHBrZXlfaW9jdGxfc2VjMnByb3RrYCwgYHBrZXlfaW9jdGxfc2tleTJwa2V5YCwgYW5kIGBwa2V5X2lvY3RsX3ZlcmlmeXByb3RrYCwgd2hpY2ggc3VnZ2VzdHMgYSBjbGVhciBpbnRlcmFjdGlvbiB3aXRoIGEgZGV2aWNlIG5vZGUsIGxpa2VseSBgL2Rldi9wa2V5YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIGV2ZW4gYWNjZXNzIHRoaXMgZGV2aWNlPyYjMzQ7CgpBIHF1aWNrIGNoZWNrLCBhbmQgYWhhISBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jYCByZWdpc3RlcnMgYSBtaXNjIGRldmljZS4gVGhhdCBhbnN3ZXJzIG15IHF1ZXN0aW9uISBTbywgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGlzIGVudGlyZSBzeXN0ZW0gaXMgYnVpbHQgYXJvdW5kIGEgZGV2aWNlIGRyaXZlciwgbGlrZWx5IHNwZWNpZmljIHRvIHRoZSBTMzkwIGFyY2hpdGVjdHVyZSwgdGhhdCBleHBvc2VzIGEgcHVibGljIGtleSBpbnRlcmZhY2UgdGhyb3VnaCB0aGUgYC9kZXYvcGtleWAgZGV2aWNlIG5vZGUgdXNpbmcgaW9jdGxzLCB3aXRoIGB1dl9oYW5kbGVyYCBiZWluZyB0aGUgZm91bmRhdGlvbmFsIGNvbXBvbmVudCBpbXBsZW1lbnRpbmcgdGhlIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucy4gVGhpcyBhcmNoaXRlY3R1cmUgbG9va3MgZmFpcmx5IHN0YW5kYXJkIGZvciBhIHByb3RlY3RlZCBrZXkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pc2NfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTc4Nj1pbnQgX19pbml0IHBrZXlfYXBpX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNzg4LVx0LyogcmVnaXN0ZXIgYXMgYSBtaXNjIGRldmljZSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjc4OTpcdHJldHVybiBtaXNjX3JlZ2lzdGVyKFx1MDAyNnBrZXlfZGV2KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy03OTAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgwOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgS2V5ZWQgTWVtb3J5IEJ1Z3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhbiBpc3N1ZSByZWxhdGVkIHRvIGtleWVkIG1lbW9yeSwgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGAvZGV2L3BrZXlgIGlvY3Rscy4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyB3aXRoaW4gdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoIGhvdyBpdCBoYW5kbGVzIHRoZSBzZWFyY2ggZm9yIHRoZXNlIHNlY3JldHMuIEl0IGxvb2tzIGxpa2UgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSBgc3RhcnRfaWR4YCB2YXJpYWJsZSB3YXNuJiMzOTt0IGJlaW5nIHVwZGF0ZWQgY29ycmVjdGx5LCBsZWFkaW5nIHRvIGVpdGhlciBhbiBpbmZpbml0ZSBsb29wIG9yIGEgZmFpbHVyZSB0byBsb2NhdGUgdGhlIGludGVuZGVkIHNlY3JldC4KCldhaXQsIGxvb2tpbmcgYXQgaXQgY2xvc2VyLCBpc24mIzM5O3QgYGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgd2hhdCYjMzk7cyBhY3R1YWxseSB1cGRhdGVkIGJ5IGB1dl9saXN0X3NlY3JldHNgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIExldCBtZSBqdW1wIGludG8gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AgYW5kIGRpZyBpbnRvIGB1dl9saXN0X3NlY3JldHNgIHRvIGNvbmZpcm0gdGhpcyBiZWhhdmlvciBhbmQgdW5kZXJzdGFuZCBob3cgdGhvc2UgaW5kaWNlcyBhcmUgc3VwcG9zZWQgdG8gaW50ZXJhY3QuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIHNlY3JldCBpbmRleGluZyB3b3JrcyB0byBiZSBzdXJlIG9mIHRoZSBmaXgmIzM5O3MgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl9saXN0X3NlY3JldHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva2VybmVsL3V2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC91di5jPTc4MD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTEtXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc5MjpcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzkzLVx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM0MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBtaW5kJiMzOTtzIGJ1enppbmcsIGFuZCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhpcywgSSBuZWVkIHRvIGdyb3VuZCBteXNlbGYuIEkmIzM5O3ZlIGVuY291bnRlcmVkIGB1dl9saXN0X3NlY3JldHNgLCBhbmQgdGhhdCYjMzk7cyBhIG5ldyBvbmUuIEl0JiMzOTtzIGdvdCBtZSBjdXJpb3VzLCBidXQgSSBjYW4mIzM5O3QganVzdCBqdW1wIGludG8gYXNzdW1wdGlvbnMuIEkgbmVlZCBhIHByZWNpc2UgZGVmaW5pdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgSSBuZWVkIHRvIHNlZSB0aGUgZGVmaW5pdGlvbiBvZiBgdXZfbGlzdF9zZWNyZXRzYC4mIzM0OyBJIGtub3cgYmV0dGVyIHRoYW4gdG8gb3BlcmF0ZSB3aXRoIGZ1enp5IHVuZGVyc3RhbmRpbmdzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0IHNvdW5kcyBsaWtlIGl0IHJlbGF0ZXMgdG8gc2VjcmV0cy4gR290dGEgaGF2ZSBhIGNsZWFyIGFuZCBhY2N1cmF0ZSBmb3VuZGF0aW9uIGJlZm9yZSBJIHByb2NlZWQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2xpc3Rfc2VjcmV0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00NzM9c3RhdGljIGlubGluZSBpbnQgdXZfY21kX25vZGF0YSh1NjQgaGFuZGxlLCB1MTYgY21kLCB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00ODktLyoqXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0OTA6ICogdXZfbGlzdF9zZWNyZXRzKCkgLSBEbyBhIExpc3QgU2VjcmV0cyBVVkMuXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00OTEtICpcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTEtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo1MTI6c3RhdGljIGlubGluZSBpbnQgdXZfbGlzdF9zZWNyZXRzKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYnVmLCB1MTYgc3RhcnRfaWR4LFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTEzLVx0XHRcdFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzgwPWludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5MS1cdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzkyOlx0XHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcdTAwMjZsaXN0X3JjLCBOVUxMKTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTMtXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0zMDc9c3RhdGljIGludCB1dmlvX2dldF9saXN0KHZvaWQgKnpwYWdlLCBzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0zMTYtXHRkbyB7XG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjMxNzpcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4LCBcdTAwMjZ1dl9pb2N0bC1cdTAwM2V1dl9yYyxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzE4LVx0XHRcdFx0XHUwMDI2dXZfaW9jdGwtXHUwMDNldXZfcnJjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNjkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHV2X2xpc3Rfc2VjcmV0c2AgaW4gczM5MCBBcmNoaXRlY3R1cmUgQ29udGV4dCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgdXZfbGlzdF9zZWNyZXRzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYCBoZWFkZXIgZmlsZS4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyB1bmRlcnN0YW5kaW5nIGhvdyBzZWNyZXRzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgdW5kZXJseWluZyBVbml2ZXJzYWwgVm9sdW1lIChVVikgYXJjaGl0ZWN0dXJlIG9uIHRoZSBzMzkwIHBsYXRmb3JtLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG1lY2hhbmlzbXMgdXNlZCB0byBtYW5hZ2UgdGhlc2Ugc2VjcmV0cy4gTXkgcHJpb3Iga25vd2xlZGdlIG9mIHMzOTAmIzM5O3Mgc2VjdXJpdHkgZmVhdHVyZXMgYW5kIFVWJiMzOTtzIGFyY2hpdGVjdHVyZSBpbmZvcm1zIG15IGV4cGVjdGF0aW9uIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgaW52b2x2ZXMgcG9pbnRlcnMgdG8gc2VjdXJlIG1lbW9yeSByZWdpb25zLCBwb3RlbnRpYWxseSB1c2luZyBoYXJkd2FyZS1hc3Npc3RlZCBlbmNyeXB0aW9uIG9yIGludGVncml0eSBjaGVja3MuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBleHBvc2VzIGFueSBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGJlIGxldmVyYWdlZCBieSBhdHRhY2tlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MDpcdCAqIHV2X2xpc3Rfc2VjcmV0cygpIC0gRG8gYSBMaXN0IFNlY3JldHMgVVZDLlxuIDQ5MTpcdCAqXG4gNDkyOlx0ICogQGJ1ZjogQnVmZmVyIHRvIHdyaXRlIGxpc3QgaW50bzsgc2l6ZSBvZiBvbmUgcGFnZS5cbiA0OTM6XHQgKiBAc3RhcnRfaWR4OiBUaGUgc21hbGxlc3QgaW5kZXggdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGxpc3QuXG4gNDk0Olx0ICpcdFx0Rm9yIHRoZSBmaXN0IGludm9jYXRpb24gdXNlIDAuXG4gNDk1Olx0ICogQHJjOiBQb2ludGVyIHRvIHN0b3JlIHRoZSByZXR1cm4gY29kZSBvciBOVUxMLlxuIDQ5NjpcdCAqIEBycmM6IFBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybiByZWFzb24gY29kZSBvciBOVUxMLlxuIDQ5NzpcdCAqXG4gNDk4Olx0ICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgTGlzdCBTZWNyZXRzIFVWQy4gVGhlIHJlc3VsdCBpcyB3cml0dGVuIGludG8gYGJ1ZmAsXG4gNDk5Olx0ICogdGhhdCBuZWVkcyB0byBiZSBhdCBsZWFzdCBvbmUgcGFnZSBvZiB3cml0YWJsZSBtZW1vcnkuXG4gNTAwOlx0ICogYGJ1ZmAgY29uc2lzdHMgb2Y6XG4gNTAxOlx0ICogKiAlc3RydWN0IHV2X3NlY3JldF9saXN0X2hkclxuIDUwMjpcdCAqICogJXN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIChtdWx0aXBsZSlcbiA1MDM6XHQgKlxuIDUwNDpcdCAqIEZvciBgc3RhcnRfaWR4YCB1c2UgXzBfIGZvciB0aGUgZmlyc3QgY2FsbC4gSWYgdGhlcmUgYXJlIG1vcmUgc2VjcmV0cyBhdmFpbGFibGVcbiA1MDU6XHQgKiBidXQgY291bGQgbm90IGZpdCBpbnRvIHRoZSBwYWdlIHRoZW4gYHJjYCBpcyBgVVZDX1JDX01PUkVfREFUQWAuXG4gNTA2Olx0ICogSW4gdGhpcyBjYXNlIHVzZSBgdXZfc2VjcmV0X2xpc3RfaGRyLm5leHRfc2VjcmV0X2lkeGAgZm9yIGBzdGFydF9pZHhgLlxuIDUwNzpcdCAqXG4gNTA4Olx0ICogQ29udGV4dDogbWlnaHQgc2xlZXAuXG4gNTA5Olx0ICpcbiA1MTA6XHQgKiBSZXR1cm46IFRoZSBVVkMgY29uZGl0aW9uIGNvZGUuXG4gNTExOlx0ICovXG4gNTEyOlx0c3RhdGljIGlubGluZSBpbnQgdXZfbGlzdF9zZWNyZXRzKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYnVmLCB1MTYgc3RhcnRfaWR4LFxuIDUxMzpcdFx0XHRcdFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcbiA1MTQ6XHR7XG4gNTE1Olx0XHRzdHJ1Y3QgdXZfY2JfbGlzdF9zZWNyZXRzIHV2Y2IgPSB7XG4gNTE2Olx0XHRcdC5oZWFkZXIubGVuID0gc2l6ZW9mKHV2Y2IpLFxuIDUxNzpcdFx0XHQuaGVhZGVyLmNtZCA9IFVWQ19DTURfTElTVF9TRUNSRVRTLFxuIDUxODpcdFx0XHQuc3RhcnRfaWR4ID0gc3RhcnRfaWR4LFxuIDUxOTpcdFx0XHQubGlzdF9hZGRyID0gKHU2NClidWYsXG4gNTIwOlx0XHR9O1xuIDUyMTpcdFx0aW50IGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuIDUyMjpcdFxuIDUyMzpcdFx0aWYgKHJjKVxuIDUyNDpcdFx0XHQqcmMgPSB1dmNiLmhlYWRlci5yYztcbiA1MjU6XHRcdGlmIChycmMpXG4gNTI2Olx0XHRcdCpycmMgPSB1dmNiLmhlYWRlci5ycmM7XG4gNTI3Olx0XG4gNTI4Olx0XHRyZXR1cm4gY2M7XG4gNTI5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAwNAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFVWX0xpc3RfU2VjcmV0cyBhbmQgU3l6a2FsbGVyIG9uIHMzOTB4KioKCk9rYXksIHNvIGB1dl9saXN0X3NlY3JldHNgLi4uIHRoYXQmIzM5O3MgYSBVVkMsIGEgZnVuY3Rpb24gc3BlY2lmaWMgdG8gU2VjdXJlIEV4ZWN1dGlvbiBvbiB0aGUgczM5MCBwbGF0Zm9ybSwgd2hpY2ggZmFsbHMgdW5kZXIgVWx0cmF2aXNvci4gTXkgaW5pdGlhbCBxdWVzdGlvbjogY2FuIEkgZXhlY3V0ZSB0aGlzIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IENvbnNpZGVyaW5nIFFFTVUgaXMgYSBzdGFuZGFyZCB0b29sIGZvciBzMzkwIGVtdWxhdGlvbiwgYW5kIEkga25vdyBpdCBzdXBwb3J0cyBTZWN1cmUgRXhlY3V0aW9uIChVbHRyYXZpc29yKSB3aGVuIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCB0aGUgYW5zd2VyICpzaG91bGQqIGJlIHllcy4KCkJ1dCBoZXJl4oCZcyB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXA6IGRvZXMgc3l6a2FsbGVyIHRlc3QgdGhpcz8gU3l6a2FsbGVyLCB3aXRoIGl0cyBmdXp6ZXIsIG9mdGVuIHJ1bnMgczM5MHggVk1zLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIFZNcyBiZWluZyBydW4gKndpdGgqIFNlY3VyZSBFeGVjdXRpb24gZW5hYmxlZD8gU3l6a2FsbGVyIHR5cGljYWxseSBsZXZlcmFnZXMgUUVNVSBmb3IgaXRzIHMzOTB4IHJ1bnMsIGFuZCBJIHVuZGVyc3RhbmQgUUVNVSBpcyBjYXBhYmxlIG9mIFNlY3VyZSBFeGVjdXRpb24gdmlhIHByb3R2aXJ0LgoKTXkgbmV4dCB0YXNrOiBkaXZlIGludG8gdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYENPTkZJR19QS0VZX1VWYCBpcyBlbmFibGVkLiBJJiMzOTtsbCBhbHNvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmRpY2F0ZSBTZWN1cmUgRXhlY3V0aW9uIHN1cHBvcnQgaXMgYWN0aXZlLiBUaGlzIHdpbGwgdGVsbCBtZSBpZiBzeXprYWxsZXIgaXMgYWN0dWFsbHkgdGVzdGluZyB0aGlzIGFyZWEgb3Igbm90LiBUaGlzIGlzIGtleSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSYjMzk7cyBhIGdvb2QgdGVzdCBlbnZpcm9ubWVudCBmb3IgdGhlIGB1dl9saXN0X3NlY3JldHNgIFVWQy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBLRVlfVVYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vS2NvbmZpZz0xMzc9Y29uZmlnIFBLRVlfUENLTU9cbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1Ny1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTU4OmNvbmZpZyBQS0VZX1VWXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTU2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENyeXB0b2dyYXBoaWMgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBQS0VZX1VWYC4gTXkgaW5zdGluY3QsIGdpdmVuIHRoZSBkb21haW4sIGlzIHRvIHN0YXJ0IGRpZ2dpbmcgYXJvdW5kIGluIHRoZSBgZHJpdmVycy9jcnlwdG9gIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhhdCBkaXJlY3RvcnkuIGBLY29uZmlnYCBmaWxlcyBhcmUgdGhlIGNlbnRyYWwgcmVwb3NpdG9yaWVzIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhleSYjMzk7cmUgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGEgc3BlY2lmaWMgZmVhdHVyZSBsaWtlIGBQS0VZX1VWYCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uIGZpdHMgaW50byB0aGUgYnJvYWRlciBjcnlwdG9ncmFwaGljIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uLiBGcm9tIGhlcmUsIEkgY2FuIGV4YW1pbmUgaXRzIGxvY2F0aW9uIHdpdGhpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTg6XHRjb25maWcgUEtFWV9VVlxuIDE1OTpcdFx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBVViBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbiAxNjA6XHRcdGRlcGVuZHMgb24gUEtFWVxuIDE2MTpcdFx0ZGVwZW5kcyBvbiBTMzkwX1VWX1VBUElcbiAxNjI6XHRcdGhlbHBcbiAxNjM6XHRcdCAgVGhpcyBpcyB0aGUgUEtFWSBVbHRyYXZpc29yIHN1cHBvcnQgaGFuZGxlciBmb3IgZGVyaXZpbmcgcHJvdGVjdGVkXG4gMTY0Olx0XHQgIGtleXMgZnJvbSBzZWNyZXRzIHN0b3JlZCB3aXRoaW4gdGhlIFVsdHJhdmlzb3IgKFVWKS5cbiAxNjU6XHRcbiAxNjY6XHRcdCAgVGhpcyBtb2R1bGUgd29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgVVYgZGV2aWNlIGFuZCBzdXBwb3J0cyB0aGVcbiAxNjc6XHRcdCAgcmV0cmlldmFsIG9mIHByb3RlY3RlZCBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZVxuIDE2ODpcdFx0ICBVViBmaXJtd2FyZSBsYXllci4gVGhpcyBzZXJ2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpblxuIDE2OTpcdFx0ICBhIHByb3RlY3RlZCBleGVjdXRpb24gZ3Vlc3QgYW5kIHRodXMgdGhpcyBtb2R1bGUgd2lsbCBmYWlsIHVwb25cbiAxNzA6XHRcdCAgbW9kcHJvYmUgaWYgbm8gcHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyBkZXRlY3RlZC5cbiAxNzE6XHRcbiAxNzI6XHRcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIHdpdGggYW4gS1ZNXG4gMTczOlx0XHQgIGd1ZXN0IHdpdGggcHJvdGVjdGVkIGV4ZWN1dGlvbiBhbmQgeW91IHdhbnQgdG8gdXNlIFVWIHJldHJpZXZhYmxlXG4gMTc0Olx0XHQgIHNlY3JldHMgdmlhIFBLRVkgQVBJLlxuIDE3NTpcdFxuIDE3NjpcdGNvbmZpZyBDUllQVE9fUEFFU19TMzkwXG4gMTc3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQQUVTIGNpcGhlciBhbGdvcml0aG1zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDkzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTZWN1cmUgRXhlY3V0aW9uIFJlcXVpcmVtZW50cyBmb3IgU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGVycm9yIG1lc3NhZ2U6ICYjMzQ7VGhpcyBzZXJ2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpbiBhIHByb3RlY3RlZCBleGVjdXRpb24gZ3Vlc3QgYW5kIHRodXMgdGhpcyBtb2R1bGUgd2lsbCBmYWlsIHVwb24gbW9kcHJvYmUgaWYgbm8gcHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyBkZXRlY3RlZC4mIzM0OyBSaWdodCwgc28gdGhhdCB0ZWxscyBtZSBpbW1lZGlhdGVseSB0aGlzIGlzIHRpZWQgdG8gU2VjdXJlIEV4ZWN1dGlvbiwgb3Igd2hhdCBJIHVzdWFsbHkgY2FsbCBhICYjMzQ7cHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4mIzM0OyBBbmQgdGhlIGNvbnRleHQgaXMgU3l6a2FsbGVyLgoKSG1tLCB0aGUgdGV4dCBzYXlzIFN5emthbGxlciAqZG9lc24mIzM5O3QqIHJ1biB3aXRoIFNlY3VyZSBFeGVjdXRpb24gZW5hYmxlZCBieSBkZWZhdWx0LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGJpdCBvZiBhIG5pY2hlIHNldHVwLiBJdCBsb29rcyBsaWtlIGl0IG5lZWRzIFVsdHJhdmlzb3Igc3VwcG9ydCBvbiB0aGUgaG9zdCwgb3IgUUVNVSB3aXRoIGBwcm90dmlydGAgZW5hYmxlZC4gQW5kIG9mIGNvdXJzZSwgdGhlIFFFTVUgcGF0aCBzdGlsbCBkZXBlbmRzIG9uIGhvc3Qgc3VwcG9ydCAtIHNwZWNpZmljYWxseSBLVk0gb24gczM5MHggd2l0aCBVbHRyYXZpc29yLgoKV2FpdCwgUUVNVSBpcyBsaXN0ZWQgaGVyZSBhcyAqZW11bGF0aW5nKiBVbHRyYXZpc29yPyBObywgaGFuZyBvbi4gUUVNVSB1c2VzIEtWTSB0byAqc3VwcG9ydCogVWx0cmF2aXNvciwgaXQmIzM5O3Mgbm90IGFjdHVhbGx5IGFuIGVtdWxhdGlvbiBsYXllciwgaXQmIzM5O3MgYSBoYXJkd2FyZSBmZWF0dXJlIG9uIElCTSB6MTUmIzQzOyBwcm9jZXNzb3JzLiBPa2F5LCBJJiMzOTt2ZSBnb3QgaXQuCgpUaGUgcmVhbCBxdWVzdGlvbiBoZXJlIGlzIGNhbiBzeXprYWxsZXImIzM5O3MgZnV6emluZyByb3V0aW5lcyBhY3R1YWxseSByZWFjaCB0aGlzIGNvZGU/IEFyZSB3ZSBldmVuIHRlc3Rpbmcgc29tZXRoaW5nIHRoYXQmIzM5O3MgbGlrZWx5IHRvICpmYWlsKiBpbiBhIG5vcm1hbCBTeXprYWxsZXIgcnVuPyAKClRvIGRldGVybWluZSBpZiB0aGlzIGlzIHJlbGV2YW50LCBJIHNob3VsZCBjaGVjayBpZiBgdXZfZmluZF9zZWNyZXRgIGlzIGNhbGxlZCBhbnl3aGVyZSBlbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl9maW5kX3NlY3JldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTM9c3RhdGljIGlubGluZSBpbnQgdXZfcmVtb3ZlX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE3LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjE4OmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTktXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzU3PXN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3Mi0vKipcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3NzM6ICogdXZfZmluZF9zZWNyZXQoKSAtIHNlYXJjaCBzZWNyZXQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VjcmV0IGlkLlxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3NC0gKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc5LSAqL1xuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MDppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4MS1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDUtfVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwNjpFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA3LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtzMzkwIHByb3RlY3RlZCBrZXkgVVYgaGFuZGxlclwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjItLypcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzOiAqIE9uZSBwcmUtYWxsb2NhdGVkIHV2X3NlY3JldF9saXN0IGZvciB1c2Ugd2l0aCB1dl9maW5kX3NlY3JldCgpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz05Mz1zdGF0aWMgaW50IGdldF9zZWNyZXRfbWV0YWRhdGEoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTk5LVx0bWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTAwOlx0cmMgPSB1dl9maW5kX3NlY3JldChzZWNyZXRfaWQsIHV2X2xpc3QsIHNlY3JldCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDEtXHRtdXRleF91bmxvY2soXHUwMDI2dXZfbGlzdF9tdXRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjY2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipBbmFseXNpcyBvZiBgcGtleV91di5jYCBVc2FnZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHRoZSBtb2R1bGUgaW4gcXVlc3Rpb24sIGBwa2V5X3V2LmNgLCBpcyAqb25seSogY2FsbGVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvczM5MC9jcnlwdG9gIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRoZSBvbmx5IHVzZSBvZiB0aGlzIGZpbGUgaXMgZHVyaW5nIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIFRoaXMgbmFycm93cyBkb3duIHRoZSBzY29wZSBxdWl0ZSBhIGJpdC4gSXTigJlzIGEgdmVyeSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gY3J5cHRvZ3JhcGhpYyBrZXkgbWFuYWdlbWVudCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGFuZCBjb25maW5lZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgaXTigJlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgY3J5cHRvIGFjY2VsZXJhdGlvbiBvciBrZXkgaGFuZGxpbmcgbW9kdWxlLCBjbG9zZWx5IHRpZWQgdG8gdGhlIHMzOTAgcGxhdGZvcm3igJlzIGNyeXB0byBjYXBhYmlsaXRpZXMuIFdlIG5lZWQgdG8gbG9vayBkZWVwZXIgaW4gdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NDpcdHN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxuIDI4NTpcdHtcbiAyODY6XHRcdGludCByYztcbiAyODc6XHRcbiAyODg6XHRcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXG4gMjg5Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDI5MDpcdFxuIDI5MTpcdFx0aWYgKCF0ZXN0X2JpdF9pbnYoQklUX1VWQ19DTURfUkVUUl9TRUNSRVQsIHV2X2luZm8uaW5zdF9jYWxsc19saXN0KSlcbiAyOTI6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMjkzOlx0XG4gMjk0Olx0XHR1dl9saXN0ID0ga21hbGxvY19vYmooKnV2X2xpc3QpO1xuIDI5NTpcdFx0aWYgKCF1dl9saXN0KVxuIDI5NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyOTc6XHRcbiAyOTg6XHRcdHJjID0gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFx1MDAyNnV2X2hhbmRsZXIpO1xuIDI5OTpcdFx0aWYgKHJjKVxuIDMwMDpcdFx0XHRrZnJlZSh1dl9saXN0KTtcbiAzMDE6XHRcbiAzMDI6XHRcdHJldHVybiByYztcbiAzMDM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzkxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgU3l6a2FsbGVyJiMzOTtzIFZpcnR1YWxpemF0aW9uIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgZnVuY3Rpb24uIEl0cyBwdXJwb3NlIGlzIHByZXR0eSBjbGVhciDigJMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzeXN0ZW0gaXMgb3BlcmF0aW5nIHdpdGhpbiBhIHByb3RlY3RlZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gUmlnaHQgbm93LCBteSBhc3N1bXB0aW9uLCBiYXNlZCBvbiBob3cgU3l6a2FsbGVyIGlzIHR5cGljYWxseSBkZXBsb3llZCwgaXMgdGhhdCBpdCAqaXNuJiMzOTt0Ki4gSSBtZWFuLCB3ZSYjMzk7cmUgdXN1YWxseSBydW5uaW5nIGluIGVpdGhlciBRRU1VIFRDRywgd2hpY2ggaXMgZW11bGF0aW9uLCBvciBzdHJhaWdodCBLVk0uIE5laXRoZXIgb2YgdGhvc2UgY29uZmlndXJhdGlvbnMgc2NyZWFtICYjMzQ7cHJvdGVjdGVkIHZpcnR1YWxpemF0aW9uJiMzNDsgdG8gbWUuCgpCdXQgd2FpdCBhIG1pbnV0ZeKApiBob2xkIHRoYXQgdGhvdWdodC4gQ2FuIFN5emthbGxlciAqYWN0dWFsbHkqIHJ1biBhcyBhIHByb3RlY3RlZCB2aXJ0dWFsaXphdGlvbiBndWVzdD8gSXQgdXNlcyBRRU1VLCBkb2VzbiYjMzk7dCBpdD8gQW5kIEkga25vdyBRRU1VICpkb2VzKiBzdXBwb3J0IHMzOTB4IFNlY3VyZSBFeGVjdXRpb24uIEJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgdGhlIGhvc3QgaGFyZHdhcmUgdG8gc3VwcG9ydCBTZWN1cmUgRXhlY3V0aW9uIOKAkyBsaWtlIGEgejE1IG9yIGxhdGVyLiBTeXprYWxsZXIgaW5zdGFuY2VzLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kLCBhcmUgcHJlZG9taW5hbnRseSBvbiBHQ0UsIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4gQW5kIEdDRSYjMzk7cyBzMzkweCBvZmZlcmluZ3MgYXJlbiYjMzk7dCBsZXZlcmFnaW5nIG5hdGl2ZSBoYXJkd2FyZTsgdGhleSYjMzk7cmUgc3R1Y2sgd2l0aCBRRU1VIFRDRywgdGhlIHNsb3cgZW11bGF0aW9uLgoKU28sIGlmIFN5emthbGxlciYjMzk7cyBvbiBHQ0UgKGFuZCBoZW5jZSwgaW4gVENHIGVtdWxhdGlvbiksIGl0JiMzOTtzIGEgZGVhZCBlbmQsIHRoZW4uIFFFTVUgVENHICpleHBsaWNpdGx5KiBkb2VzbiYjMzk7dCBzdXBwb3J0IHMzOTB4IFNlY3VyZSBFeGVjdXRpb24uIFRoZSBib3R0b20gbGluZTogdGhlIGZ1bmN0aW9uIHNob3VsZCBuZXZlciByZXR1cm4gdHJ1ZSBpbiB0aGlzIGNvbW1vbiBzY2VuYXJpby4gQnV0IGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGlzX3Byb3RfdmlydF9ndWVzdCgpYCBpcyBhY3R1YWxseSBpbmNhcGFibGUgb2YgZXZlciBldmFsdWF0aW5nIHRvIHRydWUgd2hpbGUgcnVubmluZyBpbiBRRU1VIFRDRywgcmlnaHQ/IEp1c3QgYSBxdWljaywgY29uZmlybWF0b3J5IGNoZWNrIHRvIGNsb3NlIHRoZSBsb29wLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19wcm90X3ZpcnRfZ3Vlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2Jvb3QvaXBsX3Bhcm0uYz0xNzY9dm9pZCBzZXR1cF9ib290X2NvbW1hbmRfbGluZSh2b2lkKVxuLS1cbmFyY2gvczM5MC9ib290L2lwbF9wYXJtLmMtMTg1LVx0LyogYXBwZW5kIElQTCBQQVJNIGRhdGEgdG8gdGhlIGJvb3QgY29tbWFuZCBsaW5lICovXG5hcmNoL3MzOTAvYm9vdC9pcGxfcGFybS5jOjE4NjpcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkgXHUwMDI2XHUwMDI2IGlwbF9ibG9ja192YWxpZClcbmFyY2gvczM5MC9ib290L2lwbF9wYXJtLmMtMTg3LVx0XHRhcHBlbmRfaXBsX2Jsb2NrX3Bhcm0oKTtcbi0tXG5hcmNoL3MzOTAvYm9vdC9wZ21fY2hlY2suYz01OD12b2lkIGRvX3BnbV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3MzOTAvYm9vdC9wZ21fY2hlY2suYy02Ny1cdGJvb3RfZW1lcmcoXCYjMzQ7TGludXggdmVyc2lvbiAlc1xcblwmIzM0Oywga2VybmVsX3ZlcnNpb24pO1xuYXJjaC9zMzkwL2Jvb3QvcGdtX2NoZWNrLmM6Njg6XHRpZiAoIWlzX3Byb3RfdmlydF9ndWVzdCgpIFx1MDAyNlx1MDAyNiBlYXJseV9jb21tYW5kX2xpbmVbMF0pXG5hcmNoL3MzOTAvYm9vdC9wZ21fY2hlY2suYy02OS1cdFx0Ym9vdF9lbWVyZyhcJiMzNDtLZXJuZWwgY29tbWFuZCBsaW5lOiAlc1xcblwmIzM0OywgZWFybHlfY29tbWFuZF9saW5lKTtcbi0tXG5hcmNoL3MzOTAvYm9vdC9waHlzbWVtX2luZm8uYz0yMDU9c3RhdGljIHZvaWQgZGllX29vbSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBsb25nIG1heClcbi0tXG5hcmNoL3MzOTAvYm9vdC9waHlzbWVtX2luZm8uYy0yMTItXHRib290X2VtZXJnKFwmIzM0O0xpbnV4IHZlcnNpb24gJXNcXG5cJiMzNDssIGtlcm5lbF92ZXJzaW9uKTtcbmFyY2gvczM5MC9ib290L3BoeXNtZW1faW5mby5jOjIxMzpcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkgXHUwMDI2XHUwMDI2IGVhcmx5X2NvbW1hbmRfbGluZVswXSlcbmFyY2gvczM5MC9ib290L3BoeXNtZW1faW5mby5jLTIxNC1cdFx0Ym9vdF9lbWVyZyhcJiMzNDtLZXJuZWwgY29tbWFuZCBsaW5lOiAlc1xcblwmIzM0OywgZWFybHlfY29tbWFuZF9saW5lKTtcbi0tXG5hcmNoL3MzOTAvYm9vdC91di5jPTY1PXN0YXRpYyBpbnQgaXNfcHJvdF92aXJ0X2hvc3RfY2FwYWJsZSh2b2lkKVxuLS1cbmFyY2gvczM5MC9ib290L3V2LmMtNzAtXHQvKiBkaXNhYmxlIGlmIHByb3RlY3RlZCBndWVzdCB2aXJ0dWFsaXphdGlvbiBpcyBlbmFibGVkICovXG5hcmNoL3MzOTAvYm9vdC91di5jOjcxOlx0aWYgKGlzX3Byb3RfdmlydF9ndWVzdCgpKVxuYXJjaC9zMzkwL2Jvb3QvdXYuYy03Mi1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NTY0PWV4dGVybiBpbnQgcHJvdF92aXJ0X2d1ZXN0O1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTY1LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTY2OnN0YXRpYyBpbmxpbmUgaW50IGlzX3Byb3RfdmlydF9ndWVzdCh2b2lkKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTY3LXtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD01NzE9c3RhdGljIGlubGluZSBpbnQgc2hhcmUodW5zaWduZWQgbG9uZyBhZGRyLCB1MTYgY21kKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTU3OC1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjU3OTpcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01ODAtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NjY0PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHV2X2tleXNfYXR0cl9ncm91cCA9IHtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNjY3LVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjY2ODpzdGF0aWMgc3NpemVfdCB1dl9pc19wcm90X3ZpcnRfZ3Vlc3Qoc3RydWN0IGtvYmplY3QgKmtvYmosXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNjY5LVx0XHRcdFx0ICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NjgwPXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdXZfcHJvdF92aXJ0X2d1ZXN0ID1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo2ODE6XHRfX0FUVFIocHJvdF92aXJ0X2d1ZXN0LCAwNDQ0LCB1dl9pc19wcm90X3ZpcnRfZ3Vlc3QsIE5VTEwpO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jLTY4Mi1cbi0tXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTE0MD1ib29sIGZvcmNlX2RtYV91bmVuY3J5cHRlZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTE0MS17XG5hcmNoL3MzOTAvbW0vaW5pdC5jOjE0MjpcdHJldHVybiBpc19wcm90X3ZpcnRfZ3Vlc3QoKTtcbmFyY2gvczM5MC9tbS9pbml0LmMtMTQzLX1cbi0tXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTE0Nj1zdGF0aWMgdm9pZCBfX2luaXQgcHZfaW5pdCh2b2lkKVxuYXJjaC9zMzkwL21tL2luaXQuYy0xNDcte1xuYXJjaC9zMzkwL21tL2luaXQuYzoxNDg6XHRpZiAoIWlzX3Byb3RfdmlydF9ndWVzdCgpKVxuYXJjaC9zMzkwL21tL2luaXQuYy0xNDktXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTI1OT1ib29sIGFwX2lzX3NlX2d1ZXN0KHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI2MC17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI2MTpcdHJldHVybiBpc19wcm90X3ZpcnRfZ3Vlc3QoKSBcdTAwMjZcdTAwMjYgYXBfc2JfYXZhaWxhYmxlKCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI2Mi19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI4Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI4ODpcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yODktXHRcdHJldHVybiAtRU5PREVWO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDgwNwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgczM5MCBBcmNoaXRlY3R1cmUgZm9yIFZpcnR1YWwgR3Vlc3QgSW5mb3JtYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIHRvIGRldGVybWluZSBpZiB3ZSYjMzk7cmUgcnVubmluZyBpbiBhIHZpcnR1YWwgZ3Vlc3QgZW52aXJvbm1lbnQgb24gczM5MC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGlzX3Byb3RfdmlydF9ndWVzdGAuIFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgcGxhY2UgdG8gbG9vayBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgdmlydHVhbCBtYWNoaW5lIGRldGVjdGlvbiwgZXNwZWNpYWxseSBvbiBzMzkwLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlZmluaXRpb24sIGFuZCB0aGUgc291cmNlIGZpbGUgbWVudGlvbmVkIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQg4oCTIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaGAuIFRoaXMgbGlrZWx5IGhvbGRzIHRoZSBtYWNybyBkZWZpbml0aW9uIG9yIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIHRoYXQgd2lsbCBnaXZlIG1lIHRoZSBhbnN3ZXIuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGhlYWRlciBhbmQgdmVyaWZ5LiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgbG93LWxldmVsIGhhcmR3YXJlIG9yIGh5cGVydmlzb3IgZGV0ZWN0aW9uIG1lY2hhbmlzbXMgaW4gdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgYmVpbmcgdXNlZCB0byBwcm9wZXJseSBpbnRlcnByZXQgdGhlIHJlc3VsdHMgYW5kIGludGVncmF0ZSBpdCB3aXRoIHRoZSByZXN0IG9mIG15IHJlc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTY0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NjQ6XHRleHRlcm4gaW50IHByb3RfdmlydF9ndWVzdDtcbiA1NjU6XHRcbiA1NjY6XHRzdGF0aWMgaW5saW5lIGludCBpc19wcm90X3ZpcnRfZ3Vlc3Qodm9pZClcbiA1Njc6XHR7XG4gNTY4Olx0XHRyZXR1cm4gcHJvdF92aXJ0X2d1ZXN0O1xuIDU2OTpcdH1cbiA1NzA6XHRcbiA1NzE6XHRzdGF0aWMgaW5saW5lIGludCBzaGFyZSh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBjbWQpXG4gNTcyOlx0e1xuIDU3MzpcdFx0c3RydWN0IHV2X2NiX3NoYXJlIHV2Y2IgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjI4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKlRyYWNraW5nIERvd24gYSBWYXJpYWJsZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYHByb3RfdmlydF9ndWVzdGAgdmFyaWFibGUgaXMgYWN0dWFsbHkgZGVmaW5lZCBhbmQgYXNzaWduZWQgYSB2YWx1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBJdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cywgYW5kIEkgaGF2ZSBhIGZlZWxpbmcgaXQmIzM5O3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBiZWhhdmlvciBJJiMzOTttIHRyeWluZyB0byBhbmFseXplLiBUaW1lIHRvIGdldCBteSBzZWFyY2gtZnUgd29ya2luZy4gSSBuZWVkIHRvIHBpbnBvaW50IGl0cyBvcmlnaW4gcXVpY2tseSB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm90X3ZpcnRfZ3Vlc3QgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvYm9vdC91di5jPTE1PXZvaWQgdXZfcXVlcnlfaW5mbyh2b2lkKVxuLS1cbmFyY2gvczM5MC9ib290L3V2LmMtNTQtXHQgICAgdGVzdF9iaXRfaW52KEJJVF9VVkNfQ01EX1JFTU9WRV9TSEFSRURfQUNDRVNTLCAodW5zaWduZWQgbG9uZyAqKXV2Y2IuaW5zdF9jYWxsc19saXN0KSlcbmFyY2gvczM5MC9ib290L3V2LmM6NTU6XHRcdHByb3RfdmlydF9ndWVzdCA9IDE7XG5hcmNoL3MzOTAvYm9vdC91di5jLTU2LX1cbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9Njc0PXN0YXRpYyBzc2l6ZV90IHV2X2lzX3Byb3RfdmlydF9ob3N0KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy02NzktXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NjgwOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdXZfcHJvdF92aXJ0X2d1ZXN0ID1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy02ODEtXHRfX0FUVFIocHJvdF92aXJ0X2d1ZXN0LCAwNDQ0LCB1dl9pc19wcm90X3ZpcnRfZ3Vlc3QsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY0NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVsdHJhdmlzb3IgRmFjaWxpdHkgYW5kIGl0cyBJbXBsaWNhdGlvbnMgZm9yIFZ1bG5lcmFiaWxpdHkgUmVzZWFyY2gqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBgdXZfZmluZF9zZWNyZXRgIGdldHMgY2FsbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGl0JiMzOTtzIHRyaWdnZXJlZCBpZiBgdXZfcXVlcnlfaW5mb2Agd29ya3MgYW5kIFVWQyBjb21tYW5kcyBhcmUgYWNjZXNzaWJsZSB3aXRoaW4gYGFyY2gvczM5MC9ib290L3V2LmNgLiBCdXQgdGhhdCBoaW5nZXMgb24gdGhlIGh5cGVydmlzb3IgYWN0dWFsbHkgc3VwcG9ydGluZyBhbmQgZW5hYmxpbmcgdGhlIFVsdHJhdmlzb3IgZmFjaWxpdHkgZm9yIHRoZSBndWVzdC4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBTeXprYWxsZXIgc2V0dXAuIEl0IHJ1bnMgb24gR0NFLCBhbmQgR0NFIGRvZXNuJiMzOTt0IGhhdmUgbmF0aXZlIHMzOTB4IGhhcmR3YXJlOyBpdCYjMzk7cyB1c2luZyBRRU1VIGluIFRDRyBtb2RlIGluc3RlYWQuIFRoZSBwcm9ibGVtIGlzLCBRRU1VIFRDRyAqZG9lc24mIzM5O3QqIHN1cHBvcnQgdGhlIFVsdHJhdmlzb3IgZmFjaWxpdHksIHdoaWNoIG1lYW5zIG5vIFNlY3VyZSBFeGVjdXRpb24uIFNvLCBgcHJvdF92aXJ0X2d1ZXN0YCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIHplcm8gaW4gdGhpcyBjYXNlLgoKSWYgYHByb3RfdmlydF9ndWVzdGAgaXMgemVybywgdGhlbiBgcGtleV91dl9pbml0YCB3aWxsIHJldHVybiBgLUVOT0RFVmAuIEFuZCBpZiBgcGtleV91dl9pbml0YCByZXR1cm5zIGAtRU5PREVWYCwgdGhlIGNyaXRpY2FsIGB1dl9oYW5kbGVyYCBpc24mIzM5O3QgcmVnaXN0ZXJlZC4gVGhhdCYjMzk7cyBhIG1ham9yIHJlZCBmbGFnIGJlY2F1c2UgaWYgYHV2X2hhbmRsZXJgIGlzbiYjMzk7dCByZWdpc3RlcmVkLCBgdXZfZmluZF9zZWNyZXRgIG5ldmVyIGdldHMgY2FsbGVkIHRocm91Z2ggdGhpcyBwYXRoLgoKQnV0IHdhaXQsIGlzIGB1dl9maW5kX3NlY3JldGAgY2FsbGVkIGZyb20gc29tZXdoZXJlIGVsc2U/IEkgbmVlZCB0byBjaGVjay4gSSBzYXcgbWVudGlvbnMgb2YgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYCwgYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AsIGFuZCBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNgLgoKTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYC4gTm9wZSwgdGhhdCYjMzk7cyBqdXN0IGEgZGVjbGFyYXRpb24uIE9rLCBzbyB3aGVyZSBlbHNlPyBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmNgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NTgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBTeXprYWxsZXIgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgdHJhY2VkIHRoZSBjYWxsIHBhdGggb2YgYHV2X2ZpbmRfc2VjcmV0YC4gSXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNgLiBUaGF0IGZpbGUsIGBwa2V5X3V2LmNgLCBpcyBpbml0aWFsaXplZCBvbmx5IGlmIGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgaXMgdHJ1ZS4gTm93LCBzeXprYWxsZXIgcnVucyBzMzkweCB1bmRlciBRRU1VIFRDRywgYW5kIGluIHRoYXQgc2V0dXAsIGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgaXMgZGVmaW5pdGVseSBmYWxzZS4gU28sIGJhc2VkIG9uIHRoYXQsIHRoZSBjb2RlJiMzOTtzIHVucmVhY2hhYmxlLiBCdXQgd2FpdC4uLiBkb2VzIHN5emthbGxlciB1c2UgS1ZNIHNvbWV0aW1lcz8gSSBrbm93IHRoZXJlJiMzOTtzIGFuIHMzOTB4IGluc3RhbmNlIG9uIEdDRSwgd2hpY2ggcnVucyBRRU1VIFRDRy4gQnV0IGV2ZW4gaWYgdGhlcmUgd2VyZSBLVk0gaW5zdGFuY2VzLCBTZWN1cmUgRXhlY3V0aW9uIChwcm90dmlydCkgbmVlZHMgc3BlY2lmaWMgc2V0dXA6IGEgUUVNVSBjb21tYW5kIGxpbmUgd2l0aCBgcHJvdHZpcnRgLCBhbmQgYSBob3N0IHdpdGggVWx0cmF2aXNvci4gU3l6a2FsbGVyIGlzIG5vdCBkb2luZyB0aGF0LiBJdCBib290cyBhIHN0YW5kYXJkIHZtbGludXggYW5kIGRvZXNuJiMzOTt0IHVzZSB0aGUgc3BlY2lhbCBib290bG9hZGVyIGBnZW5wcm90aW1nYCBuZWVkZWQgZm9yIGEgc2VjdXJlIGltYWdlLgoKSG9sZCBvbiwgY291bGQgYHV2X3F1ZXJ5X2luZm9gIHN1Y2NlZWQgaW4gUUVNVSBUQ0c/IE5vcGUuIFFFTVUgVENHIGRvZXNuJiMzOTt0IGltcGxlbWVudCB0aGUgVWx0cmF2aXNvciBDYWxsIChVVkMpIGluc3RydWN0aW9uLCBvciBpZiBpdCBkb2VzLCBpdCBkb2VzbiYjMzk7dCBkbyB0aGUgU2VjdXJlIEV4ZWN1dGlvbiBzdHVmZi4gU28sIGl0JiMzOTtzIGRlZmluaXRlbHkgdW5yZWFjaGFibGUgaW4gUUVNVS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGlzIGZvciBzeXprYWxsZXIsIGNvbnNpZGVyaW5nIHRoZSBwcm9tcHQgSSYjMzk7bSB3b3JraW5nIHdpdGg6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFRoYXQmIzM5O3MgYSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IHNjZW5hcmlvLgoKT2theSwgbGV0JiMzOTtzIG5haWwgdGhpcyBkb3duLiBgcGtleV91di5jYCBpcyB0aGUga2V5LiBJZiBgaXNfcHJvdF92aXJ0X2d1ZXN0KClgIGlzIGZhbHNlLCBgcGtleV91dl9pbml0YCByZXR1cm5zIGAtRU5PREVWYC4gVGhlIG1vZHVsZSBmYWlscyB0byBsb2FkLCBvciBpZiBidWlsdC1pbiwgdGhlIGluaXRjYWxsIGZhaWxzLiBUaGVyZWZvcmUsIGB1dl9oYW5kbGVyYCBpcyBuZXZlciByZWdpc3RlcmVkLCBhbmQgYHV2X2ZpbmRfc2VjcmV0YCBpcyBuZXZlciBjYWxsZWQuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIGVudmlyb25tZW50cy4gVGhlIHByb21wdCBzYXlzIHRoYXQgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIHJlc3VsdCBpbiBXb3J0aEZ1enppbmc9ZmFsc2UuIFRoaXMgcmVxdWlyZXMgczM5MHggU2VjdXJlIEV4ZWN1dGlvbiAoVWx0cmF2aXNvciksIHdoaWNoIGlzIGEgaGFyZHdhcmUgZmVhdHVyZSwgbm90IGVtdWxhdGVkIGJ5IFFFTVUgVENHLiBBbHNvLCBpdCByZXF1aXJlcyBhIHNwZWNpYWxseSBjcmFmdGVkIGVuY3J5cHRlZCBib290IGltYWdlIChgZ2VucHJvdGltZ2ApLCBldmVuIG9uIEtWTS4gU28sIHRoaXMgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzeXprYWxsZXIuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaXMgYHV2X2ZpbmRfc2VjcmV0YCBleHBvcnRlZCBhbmQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBlbHNld2hlcmU/IEl0JiMzOTtzIGBFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldClgLiBCdXQgSSBjaGVja2VkIGFsbCB0aGUgY2FsbGVycyBpbiB0aGUga2VybmVsIHRyZWUgdXNpbmcgYGdpdCBncmVwIHV2X2ZpbmRfc2VjcmV0YCBhbmQgdGhlIG9ubHkgY2FsbGVyIGlzIGBwa2V5X3V2LmNgLiBTbyBJJiMzOTttIGNvbmZpZGVudC4KCk9rYXksIGxldCBtZSBqdXN0IHJ1biBhIHF1aWNrIGNoZWNrIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbWlzc2VkIGNhbGxlcnMgb2YgYHV2X2ZpbmRfc2VjcmV0YC4gQWZ0ZXIgYSBxdWljayBkb3VibGUtY2hlY2sgSSBhbSBjb25maWRlbnQgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2ZpbmRfc2VjcmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxMz1zdGF0aWMgaW5saW5lIGludCB1dl9yZW1vdmVfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo2MTg6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc0LSAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzgwOmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjA9TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O3MzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMi0vKlxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0LSAqL1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTktXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMDA6XHRyYyA9IHV2X2ZpbmRfc2VjcmV0KHNlY3JldF9pZCwgdXZfbGlzdCwgc2VjcmV0KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cdG11dGV4X3VubG9jayhcdTAwMjZ1dl9saXN0X211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NTQKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgUGF0aCBDb25maXJtZWQqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgb25seSBldmVyIGNhbGxlZCBieSBgcGtleV91di5jYC4gRnVydGhlciBpbnZlc3RpZ2F0aW9uIHJldmVhbHMgdGhhdCBgcGtleV91di5jYCBpdHNlbGYgb25seSBiZWNvbWVzIGFjdGl2ZSB1bmRlciB0aGUgY29uZGl0aW9uIGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgZXZhbHVhdGVzIHRvIHRydWUuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBkZWFscyB3aXRoIFNlY3VyZSBFeGVjdXRpb24gKFVsdHJhdmlzb3IpIGNhcGFiaWxpdGllcyBvbiBzMzkweC4KClRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSAqbm90KiBzb21ldGhpbmcgd2UmIzM5O2xsIGJlIGFibGUgdG8gaGl0IGR1cmluZyBmdXppbmcgd2l0aCBzeXprYWxsZXIuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgVENHIGFyZSBzaW1wbHkgbm90IGVxdWlwcGVkIHRvIHRyaWdnZXIgdGhpcyBwYXJ0aWN1bGFyIGNvbmRpdGlvbi4gV2UmIzM5O2QgbmVlZCBzb21ldGhpbmcgdmVyeSBzcGVjaWZpYywgbGlrZSBhIGJlc3Bva2Ugc2VjdXJlIGJvb3QgaW1hZ2Ugd2l0aCBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIGVuYWJsZWQuIEkmIzM5O20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIHVuZnV6emFibGUuIExldCYjMzk7cyBzZXQgV29ydGhGdXp6aW5nPWZhbHNlIGZvciB0aGlzIGNhc2UuIE15IHJlYXNvbmluZyBpcyB0aGF0IGl0IGZ1bmRhbWVudGFsbHkgZGVwZW5kcyBvbiBhIHBsYXRmb3JtIGZlYXR1cmUgdGhhdCYjMzk7cyB1bmF2YWlsYWJsZSBpbiBvdXIgc3RhbmRhcmQgdGVzdGluZyBzZXR1cC4gTm8gcG9pbnQgd2FzdGluZyBjeWNsZXMgb24gc29tZXRoaW5nIHRoYXQmIzM5O3MgdW5yZWFjaGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHV2X2ZpbmRfc2VjcmV0YCBpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBgcGtleV91dmAgY3J5cHRvIGRyaXZlci4gVGhpcyBkcml2ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIFVsdHJhdmlzb3IgQ2FsbCAoVVZDKSBmdW5jdGlvbmFsaXR5IGFyZSBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhcyBhbiBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIChwcm90ZWN0ZWQgdmlydHVhbGl6YXRpb24pIGd1ZXN0LiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIChJQk0gejE1JiM0Mzsgd2l0aCBVbHRyYXZpc29yKSBhbmQgYSBzcGVjaWFsbHkgY3JhZnRlZCBlbmNyeXB0ZWQgYm9vdCBpbWFnZSAoZ2VucHJvdGltZyksIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgVENHIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1dl9maW5kX3NlY3JldGAgaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyBvbmx5IGNhbGxlZCBieSB0aGUgYHBrZXlfdXZgIGNyeXB0byBkcml2ZXIuIFRoaXMgZHJpdmVyIGFuZCB0aGUgdW5kZXJseWluZyBVbHRyYXZpc29yIENhbGwgKFVWQykgZnVuY3Rpb25hbGl0eSBhcmUgb25seSBhY3RpdmUgd2hlbiB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgYXMgYW4gczM5MHggU2VjdXJlIEV4ZWN1dGlvbiAocHJvdGVjdGVkIHZpcnR1YWxpemF0aW9uKSBndWVzdC4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAoSUJNIHoxNSYjNDM7IHdpdGggVWx0cmF2aXNvcikgYW5kIGEgc3BlY2lhbGx5IGNyYWZ0ZWQgZW5jcnlwdGVkIGJvb3QgaW1hZ2UgKGdlbnByb3RpbWcpLCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIFRDRyB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjI6MTYuNDIzNDUxNTM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NjAyMTYwNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHV2X2ZpbmRfc2VjcmV0YCBpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBgcGtleV91dmAgY3J5cHRvIGRyaXZlci4gVGhpcyBkcml2ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIFVsdHJhdmlzb3IgQ2FsbCAoVVZDKSBmdW5jdGlvbmFsaXR5IGFyZSBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhcyBhbiBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIChwcm90ZWN0ZWQgdmlydHVhbGl6YXRpb24pIGd1ZXN0LiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIChJQk0gejE1KyB3aXRoIFVsdHJhdmlzb3IpIGFuZCBhIHNwZWNpYWxseSBjcmFmdGVkIGVuY3J5cHRlZCBib290IGltYWdlIChnZW5wcm90aW1nKSwgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBUQ0cgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjI6MTYuNDIzNDYyNDM0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgyMzk3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0Mzg0OTZlZjFjZmJiMjExYjI3NGE3ZmMwZjhjOWFiODE0NGIxMjgwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA5OjIyOjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xcbmluZGV4IGEyODRmOThkOTcxNjguLmQ5NzBiMTVlZjEyNmQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuQEAgLTc4MSwxMSArNzgxLDE0IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuIFxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4gXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXFxuIHtcXG4tXFx0dTE2IHN0YXJ0X2lkeCA9IDA7XFxuK1xcdHUxNiBzdGFydF9pZHg7XFxuIFxcdHUxNiBsaXN0X3JjO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0bGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcXG4rXFxuIFxcdGRvIHtcXG4rXFx0XFx0c3RhcnRfaWR4ID0gbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xcbiBcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcXHUwMDI2bGlzdF9yYywgTlVMTCk7XFxuIFxcdFxcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcXHUwMDI2XFx1MDAyNiBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHtcXG4gXFx0XFx0XFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXFxuQEAgLTc5Niw3ICs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbiBcXHRcXHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcXG4gXFx0XFx0aWYgKHJldCA9PSAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRcXHRzdGFydF9pZHggPSBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHg7XFxuIFxcdH0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSBcXHUwMDI2XFx1MDAyNiBzdGFydF9pZHggXFx1MDAzYyBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHgpO1xcbiBcXG4gXFx0cmV0dXJuIC1FTk9FTlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIyOjE2LjkwMjcwOTY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA5MTIyODg3NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXZfZmluZF9zZWNyZXRgIGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgdGhlIGBwa2V5X3V2YCBjcnlwdG8gZHJpdmVyLiBUaGlzIGRyaXZlciBhbmQgdGhlIHVuZGVybHlpbmcgVWx0cmF2aXNvciBDYWxsIChVVkMpIGZ1bmN0aW9uYWxpdHkgYXJlIG9ubHkgYWN0aXZlIHdoZW4gdGhlIHN5c3RlbSBpcyBydW5uaW5nIGFzIGFuIHMzOTB4IFNlY3VyZSBFeGVjdXRpb24gKHByb3RlY3RlZCB2aXJ0dWFsaXphdGlvbikgZ3Vlc3QuIFRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgKElCTSB6MTUrIHdpdGggVWx0cmF2aXNvcikgYW5kIGEgc3BlY2lhbGx5IGNyYWZ0ZWQgZW5jcnlwdGVkIGJvb3QgaW1hZ2UgKGdlbnByb3RpbWcpLCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIFRDRyB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0Mzg0OTZlZjFjZmJiMjExYjI3NGE3ZmMwZjhjOWFiODE0NGIxMjgwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6MjI6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbmluZGV4IGEyODRmOThkOTcxNjguLmQ5NzBiMTVlZjEyNmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuQEAgLTc4MSwxMSArNzgxLDE0IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbiBcdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXG4ge1xuLVx0dTE2IHN0YXJ0X2lkeCA9IDA7XG4rXHR1MTYgc3RhcnRfaWR4O1xuIFx0dTE2IGxpc3RfcmM7XG4gXHRpbnQgcmV0O1xuIFxuK1x0bGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHggPSAwO1xuK1xuIFx0ZG8ge1xuK1x0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbiBcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG4gXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4gXHRcdFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXG5AQCAtNzk2LDcgKzc5OSw2IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gXHRcdHJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpO1xuIFx0XHRpZiAocmV0ID09IDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHR9IHdoaWxlIChsaXN0X3JjID09IFVWQ19SQ19NT1JFX0RBVEEgXHUwMDI2XHUwMDI2IHN0YXJ0X2lkeCBcdTAwM2MgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHgpO1xuIFxuIFx0cmV0dXJuIC1FTk9FTlQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjoxNi45MDI3MTE1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3ODMwMzgzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYHV2X2ZpbmRfc2VjcmV0YCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkndmUgbWFkZSBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBjaGFuZ2UgdG8gdGhlIGxvb3AncyBsb2dpYy4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBgc3RhcnRfaWR4YCB3YXMgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgdGhlbiB1cGRhdGVkICphdCB0aGUgZW5kKiBvZiB0aGUgbG9vcCB3aXRoIHRoZSB2YWx1ZSBvZiBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgLiBOb3csIGl0IGluaXRpYWxpemVzIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgYmVmb3JlIHRoZSBsb29wLCBhbmQgaW5zaWRlIHRoZSBsb29wLCB0aGV5IGFyZSBzZXR0aW5nIGBzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAsIHRoZW4gdXNpbmcgdGhhdCB2YXJpYWJsZSBpbiB0aGUgbG9vcCBjb25kaXRpb24uXG5cbkhvbGQgb24uLi4gdGhhdCBsb29wIGNvbmRpdGlvbi4gSXQncyBgd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSBcdTAwMjZcdTAwMjYgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeCk7YC4gSWYgYHN0YXJ0X2lkeGAgd2FzIHVwZGF0ZWQgKmFmdGVyKiB0aGUgbG9vcCBib2R5LCB0aGVuIHRoZSBjb21wYXJpc29uIGBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCB3b3VsZCBlc3NlbnRpYWxseSBhbHdheXMgYmUgZmFsc2UgYmVjYXVzZSBgc3RhcnRfaWR4YCBhbmQgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBhcmUgYWx3YXlzIGJlaW5nIGFzc2lnbmVkIHRoZSBzYW1lIHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AsIHJpZ2h0P1xuXG5CdXQgbm93LCBgc3RhcnRfaWR4YCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgdXZfbGlzdF9zZWNyZXRzYCwgYW5kIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaXMgdXBkYXRlZCAqZHVyaW5nKiB0aGUgY2FsbCB0byBgdXZfbGlzdF9zZWNyZXRzYC4gVGh1cywgdGhlIGxvb3AgY29uZGl0aW9uIGNoZWNrcyBpZiB0aGUgc2VhcmNoIGluZGV4IGhhcyBhZHZhbmNlZC4gVGhhdCBtYWtlcyBtdWNoIG1vcmUgc2Vuc2UuIEl0IGNoZWNrcyBpZiB0aGUgc2VhcmNoIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgbmV3IHVwcGVyIGxpbWl0LlxuXG5BbHJpZ2h0LCBsZXQncyBjb25maXJtIGlmIHRoaXMgaXMgczM5MCBzcGVjaWZpYy4gWWVwLCBpdCdzIHJpZ2h0IHRoZXJlIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLiBTbywgaXMgdGhpcyByZWFjaGFibGUgaW4gUUVNVT8gUzM5MCBpcyBzdXBwb3J0ZWQgYnkgc3l6a2FsbGVyLiBJIHNob3VsZCBjaGVjayBob3cgdG8gZmluZCBvdXQgaWYgYHV2X2ZpbmRfc2VjcmV0YCBpcyByZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjoyMy42ODU3NTUwOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwNjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9maW5kX3NlY3JldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC91di5jPTc1Nz1zdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3Mi0vKipcXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzczOiAqIHV2X2ZpbmRfc2VjcmV0KCkgLSBzZWFyY2ggc2VjcmV0IG1ldGFkYXRhIGZvciBhIGdpdmVuIHNlY3JldCBpZC5cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc0LSAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3OS0gKi9cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzgwOmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4MS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA1LX1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjoyMy43MzI0NjY0ODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE5ODkyOTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgQ2FsbCBTaXRlcyBvZiBgdXZfZmluZF9zZWNyZXRgKipcblxuQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGludm9sdmluZyBgdXZfZmluZF9zZWNyZXRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBUaGF0J3MgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gS25vd2luZyBpdHMgY2FsbCBzaXRlcyB3aWxsIHJldmVhbCB0aGUgY29udGV4dHMgaW4gd2hpY2ggaXQgb3BlcmF0ZXMsIHRoZSBkYXRhIGl0J3MgbGlrZWx5IHByb2Nlc3NpbmcsIGFuZCBwb3RlbnRpYWxseSB0aGUgc2VjdXJpdHkgY29uY2VybnMgaXQncyBhZGRyZXNzaW5nIChvciBjcmVhdGluZyEpLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCBtYXAgb3V0IHRob3NlIGNvbm5lY3Rpb25zLiBMZXQncyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIyOjI2LjY1MjM2MjU4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc1MzcxMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2ZpbmRfc2VjcmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTM9c3RhdGljIGlubGluZSBpbnQgdXZfcmVtb3ZlX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjE4OmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3NC0gKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MDppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwNjpFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcXFwiczM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTAwOlxcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjoyOC42Mjc3NDI4OTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU1NzIxMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFMzOTAgQ3J5cHRvIEtleSBEcml2ZXIqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBhIHBpZWNlIG9mIGNvZGUgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gVGhhdCdzIHdoZXJlIGl0J3MgYWxsIGhhcHBlbmluZywgaHVoPyBJIHNob3VsZCBkaXZlIGRpcmVjdGx5IGludG8gdGhhdCBzcGVjaWZpYyBmaWxlIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uLiBTZWVtcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgUzM5MCBhcmNoaXRlY3R1cmUgYW5kIGl0cyBjcnlwdG9ncmFwaGljIGtleSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVVYgZnJhbWV3b3JrLiBMZXQncyBzZWUgd2hhdCB0aGV5J3ZlIGdvdCB0aGVyZS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgaW1wbGVtZW50YXRpb24gZGV0YWlscywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgdGhleSd2ZSBlbXBsb3llZC4gSXQncyB0aW1lIHRvIGdldCBoYW5kcy1vbiBhbmQgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjA1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjI6MzEuNzgzNDY3NzEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDkyODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9zZWNyZXRfbWV0YWRhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9ODM9c3RhdGljIGJvb2wgaXNfdXZfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga2V5dHlwZSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTkyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjkzOnN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTA2PXN0YXRpYyBpbnQgcmV0cmlldmVfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMTI6XFx0cmMgPSBnZXRfc2VjcmV0X21ldGFkYXRhKHNlY3JldF9pZCwgXFx1MDAyNnNlY3JldF9tZXRhX2RhdGEpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMy1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0Ny1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNDg6XFx0cmMgPSBnZXRfc2VjcmV0X21ldGFkYXRhKHQtXFx1MDAzZXNlY3JldF9pZCwgXFx1MDAyNnNlY3JldF9tZXRhX2RhdGEpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0OS1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIyOjMxLjgzNzk2NjA5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMDI5MjY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3RlY3RlZCBLZXkgVVYgSGFuZGxlcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHBrZXlfdXYuY2AgZmlsZS4gUmlnaHQsIGEgXCJwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcIi4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgaW1tZWRpYXRlbHkgYmVncyB0aGUgcXVlc3Rpb246IGhvdyBpcyB0aGlzIGJlaW5nIHRyaWdnZXJlZD8gSXMgaXQgYSBjb3JlIGNvbXBvbmVudCBvciBpcyBpdCByZWFjaGFibGUgdmlhIG11bHRpcGxlIHBhdGhzPyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZW50cnkgcG9pbnRzLlxuXG5JJ2xsIGNoZWNrIHRoZSByZWxhdGVkIGNvZGUgdG8gc2VlIHdoYXQgY2x1ZXMgSSBjYW4gZ2xlYW4uIExldCBtZSBsb29rIGF0IGJvdGggYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYCBhbmQgYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuY2AuIEhvcGVmdWxseSwgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgZmlsZXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBmbG93LiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjI6MzUuMTQ4MjYyMzIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODU4NzUzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl92ZXJpZnlrZXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTkwPXN0YXRpYyBpbnQgdXZfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqX2FwcW5zIF9fYWx3YXlzX3VudXNlZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIzMi1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMzM6c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMzQtXFx0XFx0XFx0dTE2ICpfY2FyZCBfX2Fsd2F5c191bnVzZWQsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yNzI9c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3Ny1cXHQua2V5X3RvX3Byb3RrZXlcXHRcXHQgPSB1dl9rZXkycHJvdGtleSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNzg6XFx0LnZlcmlmeV9rZXlcXHRcXHQgPSB1dl92ZXJpZnlrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjc5LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIyOjM1LjIwNjg2MTE4MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM3OTEzNjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIGEgTmV3IGBwa2V5X2hhbmRsZXJgIFJlZ2lzdHJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoaXMgYHBrZXlfaGFuZGxlcmAgcmVnaXN0cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBsZXQncyBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgaXMgYWN0dWFsbHkgKmhhbmRsZWQqLlwiIEdpdmVuIHRoZSBjb250ZXh0LCBteSBtZW50YWwgbWFwIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBrZXJuZWwncyBjcnlwdG8gc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldyBrZXkgdHlwZS5cblxuTXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBsb3ctbGV2ZWwgaW1wbGVtZW50YXRpb25zIGFuZCBBUEkgaW50ZXJhY3Rpb25zIHJlbGF0ZWQgdG8ga2V5IGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgYmUgYSBoYXJkd2FyZS1hY2NlbGVyYXRlZCBjcnlwdG8gb3BlcmF0aW9uIG9mIHNvbWUga2luZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLCBhdCB0aGUgaGVhcnQgb2YgdGhlIHN5c3RlbS4gSSdsbCBiZSBsb29raW5nIGZvciByZWdpc3RyYXRpb24gbWVjaGFuaXNtcywgZGF0YSBzdHJ1Y3R1cmVzIGRlZmluaW5nIHRoZSBoYW5kbGVyIGl0c2VsZiwgYW5kIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaW1wbGVtZW50IHRoZSBrZXkgb3BlcmF0aW9ucy4gSSBleHBlY3QgYSBmZXcgbGV2ZWxzIG9mIGluZGlyZWN0aW9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzOTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjozOC41NDQ3NzgzNDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Mjk4MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrZXlfaGFuZGxlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MjU9c3RhdGljIGludCBrZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMyLVxcdC8qIHRyeSB0aGUgZGlyZWN0IHdheSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozMzpcXHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM0LVxcdFxcdFxcdFxcdFxcdCBrZXksIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zOS1cXHRpZiAocmMgPT0gLUVOT0RFVikge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0MDpcXHRcXHRyYyA9IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAga2V5LCBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU9aW50IHBrZXlfa2V5MnByb3RrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02Mi1cXHRpZiAocmMgPT0gLUVOT0RFVikge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo2MzpcXHRcXHRwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTY0LVxcdFxcdHJjID0ga2V5MnByb3RrZXkoTlVMTCwgMCwga2V5LCBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9OTI9c3RhdGljIGludCBwa2V5X2lvY3RsX2dlbnNlY2soc3RydWN0IHBrZXlfZ2Vuc2VjayBfX3VzZXIgKnVncylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMDQtXFx0a2V5YnVmbGVuID0gc2l6ZW9mKGtncy5zZWNrZXkuc2Vja2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTA1OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoXFx1MDAyNmFwcW4sIDEsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEwNi1cXHRcXHRcXHRcXHQgIGtncy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTE2PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9jbHIyc2VjayhzdHJ1Y3QgcGtleV9jbHIyc2VjayBfX3VzZXIgKnVjcylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMjgtXFx0a2V5YnVmbGVuID0gc2l6ZW9mKGtjcy5zZWNrZXkuc2Vja2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTI5OlxcdHJjID0gcGtleV9oYW5kbGVyX2Nscl90b19rZXkoXFx1MDAyNmFwcW4sIDEsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEzMC1cXHRcXHRcXHRcXHQgICAgIGtjcy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTQyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9zZWMycHJvdGsoc3RydWN0IHBrZXlfc2VjMnByb3RrIF9fdXNlciAqdXNwKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTE1My1cXHRrc3AucHJvdGtleS5sZW4gPSBzaXplb2Yoa3NwLnByb3RrZXkucHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjE1NDpcXHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShcXHUwMDI2YXBxbiwgMSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTU1LVxcdFxcdFxcdFxcdFxcdCBrc3Auc2Vja2V5LnNlY2tleSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yMTU9c3RhdGljIGludCBwa2V5X2lvY3RsX2ZpbmRjYXJkKHN0cnVjdCBwa2V5X2ZpbmRjYXJkIF9fdXNlciAqdWZjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIyOS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjMwOlxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzMS1cXHRcXHRcXHRcXHRcXHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNC1cXHRpZiAocmMgPT0gLUVOT0RFVilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjM1OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNi1cXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI1Mz1zdGF0aWMgaW50IHBrZXlfaW9jdGxfc2tleTJwa2V5KHN0cnVjdCBwa2V5X3NrZXkycGtleSBfX3VzZXIgKnVzcClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yNjEtXFx0a3NwLnByb3RrZXkubGVuID0gc2l6ZW9mKGtzcC5wcm90a2V5LnByb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyNjI6XFx0cmMgPSBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoTlVMTCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjYzLVxcdFxcdFxcdFxcdFxcdCBrc3Auc2Vja2V5LnNlY2tleSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNzY9c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleShzdHJ1Y3QgcGtleV92ZXJpZnlrZXkgX191c2VyICp1dmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjg2LVxcdGt2ay5kb21haW4gPSAweEZGRkY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjI4NzpcXHRyYyA9IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGt2ay5zZWNrZXkuc2Vja2V5LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yODgtXFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoa3ZrLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMwNT1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2VucHJvdGsoc3RydWN0IHBrZXlfZ2VucHJvdGsgX191c2VyICp1Z3ApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzEzLVxcdGtncC5wcm90a2V5LmxlbiA9IHNpemVvZihrZ3AucHJvdGtleS5wcm90a2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MzE0OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCwga2dwLmtleXR5cGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMxNS1cXHRcXHRcXHRcXHQgIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMyNj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGsoc3RydWN0IHBrZXlfdmVyaWZ5cHJvdGsgX191c2VyICp1dnApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzU1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozNTY6XFx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSh0bXBidWYsIHNpemVvZigqdCksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM1Ny1cXHRcXHRcXHRcXHQgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTM5MD1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2Vuc2VjazIoc3RydWN0IHBrZXlfZ2Vuc2VjazIgX191c2VyICp1Z3MpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDE0LVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NDE1OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoYXBxbnMsIGtncy5hcHFuX2VudHJpZXMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxNi1cXHRcXHRcXHRcXHQgIHUsIGtncy50eXBlLCBrZ3Muc2l6ZSwga2dzLmtleWdlbmZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTQ0Mj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfY2xyMnNlY2syKHN0cnVjdCBwa2V5X2NscjJzZWNrMiBfX3VzZXIgKnVjcylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00NzAtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0NzE6XFx0cmMgPSBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShhcHFucywga2NzLmFwcW5fZW50cmllcyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDcyLVxcdFxcdFxcdFxcdCAgICAgdSwga2NzLnR5cGUsIGtjcy5zaXplLCBrY3Mua2V5Z2VuZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTAzPXN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlrZXkyKHN0cnVjdCBwa2V5X3ZlcmlmeWtleTIgX191c2VyICp1dmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTE0LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1MTU6XFx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShra2V5LCBrdmsua2V5bGVuLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01MTYtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2a3ZrLmNhcmRuciwgXFx1MDAyNmt2ay5kb21haW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU4PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9hcHFuczRrKHN0cnVjdCBwa2V5X2FwcW5zNGtleSBfX3VzZXIgKnVhaylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01NzgtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1Nzk6XFx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShra2V5LCBrYWsua2V5bGVuLCBrYWsuZmxhZ3MsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTU4MC1cXHRcXHRcXHRcXHRcXHRhcHFucywgXFx1MDAyNm5yX2FwcW5zLCAwKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz02MDg9c3RhdGljIGludCBwa2V5X2lvY3RsX2FwcW5zNGt0KHN0cnVjdCBwa2V5X2FwcW5zNGtleXR5cGUgX191c2VyICp1YXQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjIyLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NjIzOlxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGthdC50eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02MjQtXFx0XFx0XFx0XFx0XFx0ICAgIGthdC5jdXJfbWt2cCwga2F0LmFsdF9ta3ZwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYz0zND1zdGF0aWMgTElTVF9IRUFEKGhhbmRsZXJfbGlzdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM2OmludCBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM4OlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zOS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtNzgtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Nzk6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtODAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzo4MTppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTgyLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTMtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6OTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfdW5yZWdpc3Rlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy05NS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMDA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEwMjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTctfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTE4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXliYXNlZCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMjA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoZW51bSBwa2V5X2tleV90eXBlIGt0KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEyMjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMzctfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTM4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTM5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTQwOnZvaWQgcGtleV9oYW5kbGVyX3B1dChjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE0MjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTUtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTU2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3B1dCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNTg6aW50IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU5LVxcdFxcdFxcdFxcdGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Mi17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNjM6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2NC1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTY1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTY2OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGtleSwga2V5bGVuKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Ny1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VrZXlfdG9fcHJvdGtleSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzEtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTcyOlxcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzMtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3NS19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNzY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTc3LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODMtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxODQ6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE4NS1cXHRcXHRcXHRcXHRcXHQgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODkte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTkwOlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmgsICpodG1wWzEwXTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE5MS1cXHRpbnQgaSwgbiA9IDAsIHJjID0gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjE1LX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIxNjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMTg6aW50IHBrZXlfaGFuZGxlcl9nZW5fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTktXFx0XFx0XFx0IHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjIyLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIyMzpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI0LVxcdGludCByYyA9IC1FTk9ERVY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMjY6XFx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGtleXN1YnR5cGUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI3LVxcdGlmIChoIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZWdlbl9rZXkpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMxLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIzMjpcXHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzUtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dlbl9rZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM4OmludCBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM5LVxcdFxcdFxcdCAgICB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0NC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNDU6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0Ni1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjQ4OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0OS1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VjbHJfdG9fa2V5KSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1My1cXHR9XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNTQ6XFx0cGtleV9oYW5kbGVyX3B1dChoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1NS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjU3LX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI1ODpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1OS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2MDppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2MS1cXHRcXHRcXHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY0LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2NTpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY2LVxcdGludCByYyA9IC1FTk9ERVY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjg6XFx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoa2V5LCBrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY5LVxcdGlmIChoIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZXZlcmlmeV9rZXkpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjcyLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI3MzpcXHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc0LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzYtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc3OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc5OmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLCB1MzIgZmxhZ3MsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgKm5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODIte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjgzOlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODQtXFx0aW50IHJjID0gLUVOT0RFVjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI4NjpcXHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChrZXksIGtleWxlbik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODctXFx0aWYgKGggXFx1MDAyNlxcdTAwMjYgaC1cXHUwMDNlYXBxbnNfZm9yX2tleSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg5LVxcdFxcdFxcdFxcdCAgICAgIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyOTA6XFx0cGtleV9oYW5kbGVyX3B1dChoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5MS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjkzLX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NDpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NjppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrZXlzdWJ0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjk3LVxcdFxcdFxcdFxcdCAgIHU4IGN1cl9ta3ZwWzMyXSwgdTggYWx0X21rdnBbMzJdLCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMDE6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMi1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzAzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzA0OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwNS1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VhcHFuc19mb3Jfa2V5dHlwZSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDktXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzEwOlxcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTEtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxMy19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzE2OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxOC0jaWZkZWYgQ09ORklHX01PRFVMRVNcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxOTpcXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBrZXlfaGFuZGxlcl9tb2R1bGVzW10gPSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMjAtI2lmIElTX01PRFVMRShDT05GSUdfUEtFWV9DQ0EpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMzNC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMzNTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwa2V5X2hhbmRsZXJfbW9kdWxlcyk7IGkrKykge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzM2OlxcdFxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMzctXFx0XFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDEtXFx0XFx0XFx0aWYgKGgtXFx1MDAzZW1vZHVsZSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQyOlxcdFxcdFxcdCAgICAhc3RyY21wKGgtXFx1MDAzZW1vZHVsZS1cXHUwMDNlbmFtZSwgcGtleV9oYW5kbGVyX21vZHVsZXNbaV0pKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDMtXFx0XFx0XFx0XFx0Zm91bmQgPSB0cnVlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDgtXFx0XFx0aWYgKCFmb3VuZCkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQ5OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJyZXF1ZXN0X21vZHVsZSglcylcXFxcblxcXCIsIHBrZXlfaGFuZGxlcl9tb2R1bGVzW2ldKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM1MDpcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZShwa2V5X2hhbmRsZXJfbW9kdWxlc1tpXSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTEtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTQtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzU1OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTYtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oPTE0NT1leHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGtleV9hdHRyX2dyb3Vwc1tdO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxNTE6c3RydWN0IHBrZXlfaGFuZGxlciB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTItXFx0c3RydWN0IG1vZHVsZSAqbW9kdWxlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTItXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxOTM6aW50IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjE5NDppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTUtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE5OS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwMDpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjAxOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGVudW0gcGtleV9rZXlfdHlwZSBrdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDI6dm9pZCBwa2V5X2hhbmRsZXJfcHV0KGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjAzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjA0OmludCBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwNS1cXHRcXHRcXHRcXHRjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDctXFx0XFx0XFx0XFx0dTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDg6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwOS1cXHRcXHRcXHRcXHRcXHQgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTItXFx0XFx0XFx0XFx0XFx0IHUzMiAqcHJvdGtleXR5cGUsIHUzMiB4ZmxhZ3MpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjEzOmludCBwa2V5X2hhbmRsZXJfZ2VuX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjE0LVxcdFxcdFxcdCB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxNi1cXHRcXHRcXHQgdTggKmtleWJ1ZiwgdTMyICprZXlidWZsZW4sIHUzMiAqa2V5aW5mbywgdTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMTc6aW50IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTgtXFx0XFx0XFx0ICAgIHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjIyLVxcdFxcdFxcdCAgICB1MzIgeGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyMzppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyNC1cXHRcXHRcXHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI2LVxcdFxcdFxcdCAgICB1MzIgeGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyNzppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbiwgdTMyIGZsYWdzLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90ICpucl9hcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyOS1cXHRcXHRcXHQgICAgICAgdTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMzA6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga3R5cGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMzEtXFx0XFx0XFx0XFx0ICAgdTggY3VyX21rdnBbMzJdLCB1OCBhbHRfbWt2cFszMl0sIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjM3LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjM4OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIzOS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYz01NTc9c3RhdGljIGludCBjY2Ffc2xvd3BhdGhfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNTk1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo1OTY6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgY2NhX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTU5Ny1cXHQubW9kdWxlXFx0XFx0XFx0ID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM9NjEzPXN0YXRpYyBpbnQgX19pbml0IHBrZXlfY2NhX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTUtXFx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGNjYSBzdHVmZiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MTY6XFx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2Y2NhX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTctfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jPTYyMj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9jY2FfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYyNC1cXHQvKiB1bnJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MjU6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNmNjYV9oYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjI2LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTA0PXN0YXRpYyBpbnQgZXAxMV9zbG93cGF0aF9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTQyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM6NTQzOnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIGVwMTFfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU0NC1cXHQubW9kdWxlXFx0XFx0XFx0ID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jPTU2MD1zdGF0aWMgaW50IF9faW5pdCBwa2V5X2VwMTFfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NjItXFx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGVwMTEgc3R1ZmYgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU2MzpcXHRyZXR1cm4gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFxcdTAwMjZlcDExX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTY0LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTY5PXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X2VwMTFfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NzEtXFx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU3MjpcXHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcXHUwMDI2ZXAxMV9oYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU3My19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYz00MzU9c3RhdGljIGludCBwa2V5X3Bja21vX3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDQyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jOjQ0MzpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciBwY2ttb19oYW5kbGVyID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ0NC1cXHQubW9kdWxlXFx0XFx0ICAgICAgPSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBwa2V5X3Bja21vX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ2OS1cXHQvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgZm9yIGFsbCB0aGUgcGNrbW8gc3R1ZmYgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0NzA6XFx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2cGNrbW9faGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDcxLX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ3Nj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9wY2ttb19leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NzgtXFx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0Nzk6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNnBja21vX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ4MC19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNy0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjE4OiAqIFdyYXBwZXIgYXJvdW5kIHBrZXlfaGFuZGxlcl9nZW5fa2V5KCkgd2hpY2ggZGVhbHMgd2l0aCB0aGVcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xOS0gKiBFTk9ERVYgcmV0dXJuIGNvZGUgYW5kIHRoZW4gdHJpZXMgdG8gZW5mb3JjZSBhIHBrZXkgaGFuZGxlclxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjEtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MjI6c3RhdGljIGludCBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkodTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTIzLVxcdFxcdFxcdFxcdCAgICB1MzIga2V5Yml0c2l6ZSwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Mjg6XFx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShOVUxMLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTI5LVxcdFxcdFxcdFxcdCAga2V5dHlwZSwga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyLVxcdGlmIChyYyA9PSAtRU5PREVWKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzM6XFx0XFx0cGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcygpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjM0OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zNS1cXHRcXHRcXHRcXHRcXHQgIGtleXR5cGUsIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz00OT1zdGF0aWMgc3NpemVfdCBwa2V5X3Byb3RrZXlfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTY3LVxcdHByb3RrZXkubGVuID0gc2l6ZW9mKHByb3RrZXkucHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Njg6XFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNjktXFx0XFx0XFx0XFx0ICAgICAgcHJvdGtleS5wcm90a2V5LCBcXHUwMDI2cHJvdGtleS5sZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy04MS1cXHRcXHRwcm90a2V5LmxlbiA9IHNpemVvZihwcm90a2V5LnByb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjgyOlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTgzLVxcdFxcdFxcdFxcdFxcdCAgICAgIHByb3RrZXkucHJvdGtleSwgXFx1MDAyNnByb3RrZXkubGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9MTA2PXN0YXRpYyBzc2l6ZV90IHBrZXlfcHJvdGtleV9hZXNfeHRzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTMxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjEzMjpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xMzMtXFx0XFx0XFx0XFx0ICAgICAgdC1cXHUwMDNlcHJvdGtleSwgXFx1MDAyNnByb3RsZW4sIFxcdTAwMjZwcm90dHlwZSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz0xNDg9c3RhdGljIHNzaXplX3QgcGtleV9wcm90a2V5X2htYWNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNzMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MTc0OlxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICB0LVxcdTAwM2Vwcm90a2V5LCBcXHUwMDI2cHJvdGxlbiwgXFx1MDAyNnByb3R0eXBlKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTMwOD1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWRhdGFfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyMS1cXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVxcdTAwM2VzZWNrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMyMjpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzIzLVxcdFxcdFxcdFxcdCAgICAgIHNlY2tleS1cXHUwMDNlc2Vja2V5LCBcXHUwMDI2YnVmbGVuLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyOS1cXHRcXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVxcdTAwM2VzZWNrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMzMDpcXHRcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzMxLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNlY2tleS1cXHUwMDNlc2Vja2V5LCBcXHUwMDI2YnVmbGVuLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWNpcGhlcl9hZXNfYXR0cl9yZWFkKGVudW0gcGtleV9rZXlfc2l6ZSBrZXliaXRzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDMzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjQzNDpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDM1LVxcdFxcdFxcdFxcdCAgICAgIFBLRVlfVFlQRV9DQ0FfQ0lQSEVSLCBrZXliaXRzLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDQyLVxcdFxcdGJ1ZiArPSBDQ0FDSVBIRVJUT0tFTlNJWkU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NDQzOlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQ0NC1cXHRcXHRcXHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz01MzQ9c3RhdGljIHNzaXplX3QgcGtleV9lcDExX2Flc19hdHRyX3JlYWQoZW51bSBwa2V5X2tleV9zaXplIGtleWJpdHMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NDgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTQ5OlxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NTAtXFx0XFx0XFx0XFx0ICAgICAgUEtFWV9UWVBFX0VQMTFfQUVTLCBrZXliaXRzLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTU3LVxcdFxcdGJ1ZiArPSBNQVhFUDExQUVTS0VZQkxPQlNJWkU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTU4OlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU1OS1cXHRcXHRcXHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3MS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNzI6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzMtXFx0Lm1vZHVsZVxcdFxcdFxcdCA9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI5ODpcXHRyYyA9IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2dXZfaGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk5LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTMwOD1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV91dl9leGl0KHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzA5LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzozMTA6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNnV2X2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTMxMS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjI6MzguNTk0MDgzOTQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjEwNTk5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFB1YmxpYyBLZXkgSW5mcmFzdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgcGtleV91di5jYCBpcyB0aGUga2V5IGhlcmUg4oCTIGl0J3MgcmVnaXN0ZXJpbmcgYSBgdXZfaGFuZGxlcmAuIFRoYXQgYHV2X2hhbmRsZXJgIHNlZW1zIGNydWNpYWwsIGFzIGl0IHByb3ZpZGVzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllczogYGtleV90b19wcm90a2V5YCBhbmQgYHZlcmlmeV9rZXlgLiBUaGVzZSBmdW5jdGlvbnMgYXJlLCBpbiB0dXJuLCBhY2Nlc3NlZCBieSBoaWdoZXItbGV2ZWwgaGFuZGxlcnMsIHNwZWNpZmljYWxseSBgcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5YCBhbmQgYHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5YC5cblxuTm93LCB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGVzZSBoYW5kbGVyIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkIGJ5IGEgdmFyaWV0eSBvZiBpb2N0bCBpbnRlcmZhY2VzLiBJIHNlZSBmdW5jdGlvbnMgbGlrZSBgcGtleV9pb2N0bF92ZXJpZnlrZXlgLCBgcGtleV9pb2N0bF92ZXJpZnlrZXkyYCwgYHBrZXlfaW9jdGxfc2VjMnByb3RrYCwgYHBrZXlfaW9jdGxfc2tleTJwa2V5YCwgYW5kIGBwa2V5X2lvY3RsX3ZlcmlmeXByb3RrYCwgd2hpY2ggc3VnZ2VzdHMgYSBjbGVhciBpbnRlcmFjdGlvbiB3aXRoIGEgZGV2aWNlIG5vZGUsIGxpa2VseSBgL2Rldi9wa2V5YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIHdlIGV2ZW4gYWNjZXNzIHRoaXMgZGV2aWNlP1wiXG5cbkEgcXVpY2sgY2hlY2ssIGFuZCBhaGEhIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgIHJlZ2lzdGVycyBhIG1pc2MgZGV2aWNlLiBUaGF0IGFuc3dlcnMgbXkgcXVlc3Rpb24hIFNvLCBpdCdzIGNsZWFyIHRoYXQgdGhpcyBlbnRpcmUgc3lzdGVtIGlzIGJ1aWx0IGFyb3VuZCBhIGRldmljZSBkcml2ZXIsIGxpa2VseSBzcGVjaWZpYyB0byB0aGUgUzM5MCBhcmNoaXRlY3R1cmUsIHRoYXQgZXhwb3NlcyBhIHB1YmxpYyBrZXkgaW50ZXJmYWNlIHRocm91Z2ggdGhlIGAvZGV2L3BrZXlgIGRldmljZSBub2RlIHVzaW5nIGlvY3Rscywgd2l0aCBgdXZfaGFuZGxlcmAgYmVpbmcgdGhlIGZvdW5kYXRpb25hbCBjb21wb25lbnQgaW1wbGVtZW50aW5nIHRoZSBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMuIFRoaXMgYXJjaGl0ZWN0dXJlIGxvb2tzIGZhaXJseSBzdGFuZGFyZCBmb3IgYSBwcm90ZWN0ZWQga2V5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE2MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjo0My43MTUxNDg3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE2NTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaXNjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9Nzg2PWludCBfX2luaXQgcGtleV9hcGlfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTc4OC1cXHQvKiByZWdpc3RlciBhcyBhIG1pc2MgZGV2aWNlICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjc4OTpcXHRyZXR1cm4gbWlzY19yZWdpc3RlcihcXHUwMDI2cGtleV9kZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy03OTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjo0My43NjczMjEwODlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4MDI3MjM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgS2V5ZWQgTWVtb3J5IEJ1Z3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhbiBpc3N1ZSByZWxhdGVkIHRvIGtleWVkIG1lbW9yeSwgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGAvZGV2L3BrZXlgIGlvY3Rscy4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyB3aXRoaW4gdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoIGhvdyBpdCBoYW5kbGVzIHRoZSBzZWFyY2ggZm9yIHRoZXNlIHNlY3JldHMuIEl0IGxvb2tzIGxpa2UgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSBgc3RhcnRfaWR4YCB2YXJpYWJsZSB3YXNuJ3QgYmVpbmcgdXBkYXRlZCBjb3JyZWN0bHksIGxlYWRpbmcgdG8gZWl0aGVyIGFuIGluZmluaXRlIGxvb3Agb3IgYSBmYWlsdXJlIHRvIGxvY2F0ZSB0aGUgaW50ZW5kZWQgc2VjcmV0LlxuXG5XYWl0LCBsb29raW5nIGF0IGl0IGNsb3NlciwgaXNuJ3QgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCB3aGF0J3MgYWN0dWFsbHkgdXBkYXRlZCBieSBgdXZfbGlzdF9zZWNyZXRzYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUganVtcCBpbnRvIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGFuZCBkaWcgaW50byBgdXZfbGlzdF9zZWNyZXRzYCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IgYW5kIHVuZGVyc3RhbmQgaG93IHRob3NlIGluZGljZXMgYXJlIHN1cHBvc2VkIHRvIGludGVyYWN0LiBHb3R0YSBtYWtlIHN1cmUgSSBmdWxseSBncmFzcCBob3cgdGhpcyBzZWNyZXQgaW5kZXhpbmcgd29ya3MgdG8gYmUgc3VyZSBvZiB0aGUgZml4J3MgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgwOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjo0OC44NDc1OTY5OTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTY4NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2xpc3Rfc2VjcmV0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC91di5jPTc4MD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5MS1cXHRcXHRzdGFydF9pZHggPSBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHg7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc5MjpcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcXHUwMDI2bGlzdF9yYywgTlVMTCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5My1cXHRcXHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXFx1MDAyNlxcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIyOjQ4Ljg5MzU3NDA3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE3MzA4Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IG1pbmQncyBidXp6aW5nLCBhbmQgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGluIHRoaXMsIEkgbmVlZCB0byBncm91bmQgbXlzZWxmLiBJJ3ZlIGVuY291bnRlcmVkIGB1dl9saXN0X3NlY3JldHNgLCBhbmQgdGhhdCdzIGEgbmV3IG9uZS4gSXQncyBnb3QgbWUgY3VyaW91cywgYnV0IEkgY2FuJ3QganVzdCBqdW1wIGludG8gYXNzdW1wdGlvbnMuIEkgbmVlZCBhIHByZWNpc2UgZGVmaW5pdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2FpdCwgSSBuZWVkIHRvIHNlZSB0aGUgZGVmaW5pdGlvbiBvZiBgdXZfbGlzdF9zZWNyZXRzYC5cIiBJIGtub3cgYmV0dGVyIHRoYW4gdG8gb3BlcmF0ZSB3aXRoIGZ1enp5IHVuZGVyc3RhbmRpbmdzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0IHNvdW5kcyBsaWtlIGl0IHJlbGF0ZXMgdG8gc2VjcmV0cy4gR290dGEgaGF2ZSBhIGNsZWFyIGFuZCBhY2N1cmF0ZSBmb3VuZGF0aW9uIGJlZm9yZSBJIHByb2NlZWQuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNDAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjo1Mi4wMTA4ODgwOTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDY0OTk5MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfbGlzdF9zZWNyZXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00NzM9c3RhdGljIGlubGluZSBpbnQgdXZfY21kX25vZGF0YSh1NjQgaGFuZGxlLCB1MTYgY21kLCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ4OS0vKipcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0OTA6ICogdXZfbGlzdF9zZWNyZXRzKCkgLSBEbyBhIExpc3QgU2VjcmV0cyBVVkMuXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDkxLSAqXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTEtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTEyOnN0YXRpYyBpbmxpbmUgaW50IHV2X2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmJ1ZiwgdTE2IHN0YXJ0X2lkeCxcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTMtXFx0XFx0XFx0XFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03ODA9aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTEtXFx0XFx0c3RhcnRfaWR4ID0gbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3OTI6XFx0XFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTMtXFx0XFx0aWYgKGxpc3RfcmMgIT0gVVZDX1JDX0VYRUNVVEVEIFxcdTAwMjZcXHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0zMDc9c3RhdGljIGludCB1dmlvX2dldF9saXN0KHZvaWQgKnpwYWdlLCBzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTMxNi1cXHRkbyB7XFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzozMTc6XFx0XFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeCwgXFx1MDAyNnV2X2lvY3RsLVxcdTAwM2V1dl9yYyxcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTMxOC1cXHRcXHRcXHRcXHRcXHUwMDI2dXZfaW9jdGwtXFx1MDAzZXV2X3JyYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIyOjU0LjE1NzM5NzcyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkwMjQ2NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHV2X2xpc3Rfc2VjcmV0c2AgaW4gczM5MCBBcmNoaXRlY3R1cmUgQ29udGV4dCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYHV2X2xpc3Rfc2VjcmV0c2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaGAgaGVhZGVyIGZpbGUuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgdW5kZXJzdGFuZGluZyBob3cgc2VjcmV0cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIHVuZGVybHlpbmcgVW5pdmVyc2FsIFZvbHVtZSAoVVYpIGFyY2hpdGVjdHVyZSBvbiB0aGUgczM5MCBwbGF0Zm9ybS4gSSdtIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG1lY2hhbmlzbXMgdXNlZCB0byBtYW5hZ2UgdGhlc2Ugc2VjcmV0cy4gTXkgcHJpb3Iga25vd2xlZGdlIG9mIHMzOTAncyBzZWN1cml0eSBmZWF0dXJlcyBhbmQgVVYncyBhcmNoaXRlY3R1cmUgaW5mb3JtcyBteSBleHBlY3RhdGlvbiB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGludm9sdmVzIHBvaW50ZXJzIHRvIHNlY3VyZSBtZW1vcnkgcmVnaW9ucywgcG90ZW50aWFsbHkgdXNpbmcgaGFyZHdhcmUtYXNzaXN0ZWQgZW5jcnlwdGlvbiBvciBpbnRlZ3JpdHkgY2hlY2tzLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBleHBvc2VzIGFueSBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGJlIGxldmVyYWdlZCBieSBhdHRhY2tlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDY5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjI6NTcuNTQ3NjQ4ODczWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0OTA6XFx0ICogdXZfbGlzdF9zZWNyZXRzKCkgLSBEbyBhIExpc3QgU2VjcmV0cyBVVkMuXFxuIDQ5MTpcXHQgKlxcbiA0OTI6XFx0ICogQGJ1ZjogQnVmZmVyIHRvIHdyaXRlIGxpc3QgaW50bzsgc2l6ZSBvZiBvbmUgcGFnZS5cXG4gNDkzOlxcdCAqIEBzdGFydF9pZHg6IFRoZSBzbWFsbGVzdCBpbmRleCB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbGlzdC5cXG4gNDk0OlxcdCAqXFx0XFx0Rm9yIHRoZSBmaXN0IGludm9jYXRpb24gdXNlIDAuXFxuIDQ5NTpcXHQgKiBAcmM6IFBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybiBjb2RlIG9yIE5VTEwuXFxuIDQ5NjpcXHQgKiBAcnJjOiBQb2ludGVyIHRvIHN0b3JlIHRoZSByZXR1cm4gcmVhc29uIGNvZGUgb3IgTlVMTC5cXG4gNDk3OlxcdCAqXFxuIDQ5ODpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSBMaXN0IFNlY3JldHMgVVZDLiBUaGUgcmVzdWx0IGlzIHdyaXR0ZW4gaW50byBgYnVmYCxcXG4gNDk5OlxcdCAqIHRoYXQgbmVlZHMgdG8gYmUgYXQgbGVhc3Qgb25lIHBhZ2Ugb2Ygd3JpdGFibGUgbWVtb3J5LlxcbiA1MDA6XFx0ICogYGJ1ZmAgY29uc2lzdHMgb2Y6XFxuIDUwMTpcXHQgKiAqICVzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaGRyXFxuIDUwMjpcXHQgKiAqICVzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbSAobXVsdGlwbGUpXFxuIDUwMzpcXHQgKlxcbiA1MDQ6XFx0ICogRm9yIGBzdGFydF9pZHhgIHVzZSBfMF8gZm9yIHRoZSBmaXJzdCBjYWxsLiBJZiB0aGVyZSBhcmUgbW9yZSBzZWNyZXRzIGF2YWlsYWJsZVxcbiA1MDU6XFx0ICogYnV0IGNvdWxkIG5vdCBmaXQgaW50byB0aGUgcGFnZSB0aGVuIGByY2AgaXMgYFVWQ19SQ19NT1JFX0RBVEFgLlxcbiA1MDY6XFx0ICogSW4gdGhpcyBjYXNlIHVzZSBgdXZfc2VjcmV0X2xpc3RfaGRyLm5leHRfc2VjcmV0X2lkeGAgZm9yIGBzdGFydF9pZHhgLlxcbiA1MDc6XFx0ICpcXG4gNTA4OlxcdCAqIENvbnRleHQ6IG1pZ2h0IHNsZWVwLlxcbiA1MDk6XFx0ICpcXG4gNTEwOlxcdCAqIFJldHVybjogVGhlIFVWQyBjb25kaXRpb24gY29kZS5cXG4gNTExOlxcdCAqL1xcbiA1MTI6XFx0c3RhdGljIGlubGluZSBpbnQgdXZfbGlzdF9zZWNyZXRzKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYnVmLCB1MTYgc3RhcnRfaWR4LFxcbiA1MTM6XFx0XFx0XFx0XFx0XFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcXG4gNTE0OlxcdHtcXG4gNTE1OlxcdFxcdHN0cnVjdCB1dl9jYl9saXN0X3NlY3JldHMgdXZjYiA9IHtcXG4gNTE2OlxcdFxcdFxcdC5oZWFkZXIubGVuID0gc2l6ZW9mKHV2Y2IpLFxcbiA1MTc6XFx0XFx0XFx0LmhlYWRlci5jbWQgPSBVVkNfQ01EX0xJU1RfU0VDUkVUUyxcXG4gNTE4OlxcdFxcdFxcdC5zdGFydF9pZHggPSBzdGFydF9pZHgsXFxuIDUxOTpcXHRcXHRcXHQubGlzdF9hZGRyID0gKHU2NClidWYsXFxuIDUyMDpcXHRcXHR9O1xcbiA1MjE6XFx0XFx0aW50IGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVxcdTAwMjZ1dmNiKTtcXG4gNTIyOlxcdFxcbiA1MjM6XFx0XFx0aWYgKHJjKVxcbiA1MjQ6XFx0XFx0XFx0KnJjID0gdXZjYi5oZWFkZXIucmM7XFxuIDUyNTpcXHRcXHRpZiAocnJjKVxcbiA1MjY6XFx0XFx0XFx0KnJyYyA9IHV2Y2IuaGVhZGVyLnJyYztcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0cmV0dXJuIGNjO1xcbiA1Mjk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMjo1Ny41NDc3Njk2MzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkzNDAxMTgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnk6IFVWX0xpc3RfU2VjcmV0cyBhbmQgU3l6a2FsbGVyIG9uIHMzOTB4KipcblxuT2theSwgc28gYHV2X2xpc3Rfc2VjcmV0c2AuLi4gdGhhdCdzIGEgVVZDLCBhIGZ1bmN0aW9uIHNwZWNpZmljIHRvIFNlY3VyZSBFeGVjdXRpb24gb24gdGhlIHMzOTAgcGxhdGZvcm0sIHdoaWNoIGZhbGxzIHVuZGVyIFVsdHJhdmlzb3IuIE15IGluaXRpYWwgcXVlc3Rpb246IGNhbiBJIGV4ZWN1dGUgdGhpcyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PyBDb25zaWRlcmluZyBRRU1VIGlzIGEgc3RhbmRhcmQgdG9vbCBmb3IgczM5MCBlbXVsYXRpb24sIGFuZCBJIGtub3cgaXQgc3VwcG9ydHMgU2VjdXJlIEV4ZWN1dGlvbiAoVWx0cmF2aXNvcikgd2hlbiBjb25maWd1cmVkIGNvcnJlY3RseSwgdGhlIGFuc3dlciAqc2hvdWxkKiBiZSB5ZXMuXG5cbkJ1dCBoZXJl4oCZcyB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXA6IGRvZXMgc3l6a2FsbGVyIHRlc3QgdGhpcz8gU3l6a2FsbGVyLCB3aXRoIGl0cyBmdXp6ZXIsIG9mdGVuIHJ1bnMgczM5MHggVk1zLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIFZNcyBiZWluZyBydW4gKndpdGgqIFNlY3VyZSBFeGVjdXRpb24gZW5hYmxlZD8gU3l6a2FsbGVyIHR5cGljYWxseSBsZXZlcmFnZXMgUUVNVSBmb3IgaXRzIHMzOTB4IHJ1bnMsIGFuZCBJIHVuZGVyc3RhbmQgUUVNVSBpcyBjYXBhYmxlIG9mIFNlY3VyZSBFeGVjdXRpb24gdmlhIHByb3R2aXJ0LlxuXG5NeSBuZXh0IHRhc2s6IGRpdmUgaW50byB0aGUgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgQ09ORklHX1BLRVlfVVZgIGlzIGVuYWJsZWQuIEknbGwgYWxzbyBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IG90aGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5kaWNhdGUgU2VjdXJlIEV4ZWN1dGlvbiBzdXBwb3J0IGlzIGFjdGl2ZS4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgc3l6a2FsbGVyIGlzIGFjdHVhbGx5IHRlc3RpbmcgdGhpcyBhcmVhIG9yIG5vdC4gVGhpcyBpcyBrZXkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUncyBhIGdvb2QgdGVzdCBlbnZpcm9ubWVudCBmb3IgdGhlIGB1dl9saXN0X3NlY3JldHNgIFVWQy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMDQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzowNC40ODE3ODQwNTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjM5ODY3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBLRVlfVVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL0tjb25maWc9MTM3PWNvbmZpZyBQS0VZX1BDS01PXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1Ny1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjE1ODpjb25maWcgUEtFWV9VVlxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU5LVxcdHRyaXN0YXRlIFxcXCJQS0VZIFVWIHN1cHBvcnQgaGFuZGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6MDYuNTQ1Nzc3Nzg4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTg1OTU5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDcnlwdG9ncmFwaGljIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBQS0VZX1VWYC4gTXkgaW5zdGluY3QsIGdpdmVuIHRoZSBkb21haW4sIGlzIHRvIHN0YXJ0IGRpZ2dpbmcgYXJvdW5kIGluIHRoZSBgZHJpdmVycy9jcnlwdG9gIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGF0IGRpcmVjdG9yeS4gYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgY2VudHJhbCByZXBvc2l0b3JpZXMgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB0aGV5J3JlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIHNwZWNpZmljIGZlYXR1cmUgbGlrZSBgUEtFWV9VVmAgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBwYXJ0aWN1bGFyIG9wdGlvbiBmaXRzIGludG8gdGhlIGJyb2FkZXIgY3J5cHRvZ3JhcGhpYyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbi4gRnJvbSBoZXJlLCBJIGNhbiBleGFtaW5lIGl0cyBsb2NhdGlvbiB3aXRoaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6MTAuMzQ0Mzc2Nzc2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvY3J5cHRvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTU4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTU4OlxcdGNvbmZpZyBQS0VZX1VWXFxuIDE1OTpcXHRcXHR0cmlzdGF0ZSBcXFwiUEtFWSBVViBzdXBwb3J0IGhhbmRsZXJcXFwiXFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIFBLRVlcXG4gMTYxOlxcdFxcdGRlcGVuZHMgb24gUzM5MF9VVl9VQVBJXFxuIDE2MjpcXHRcXHRoZWxwXFxuIDE2MzpcXHRcXHQgIFRoaXMgaXMgdGhlIFBLRVkgVWx0cmF2aXNvciBzdXBwb3J0IGhhbmRsZXIgZm9yIGRlcml2aW5nIHByb3RlY3RlZFxcbiAxNjQ6XFx0XFx0ICBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZSBVbHRyYXZpc29yIChVVikuXFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdCAgVGhpcyBtb2R1bGUgd29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgVVYgZGV2aWNlIGFuZCBzdXBwb3J0cyB0aGVcXG4gMTY3OlxcdFxcdCAgcmV0cmlldmFsIG9mIHByb3RlY3RlZCBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZVxcbiAxNjg6XFx0XFx0ICBVViBmaXJtd2FyZSBsYXllci4gVGhpcyBzZXJ2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpblxcbiAxNjk6XFx0XFx0ICBhIHByb3RlY3RlZCBleGVjdXRpb24gZ3Vlc3QgYW5kIHRodXMgdGhpcyBtb2R1bGUgd2lsbCBmYWlsIHVwb25cXG4gMTcwOlxcdFxcdCAgbW9kcHJvYmUgaWYgbm8gcHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyBkZXRlY3RlZC5cXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgd2l0aCBhbiBLVk1cXG4gMTczOlxcdFxcdCAgZ3Vlc3Qgd2l0aCBwcm90ZWN0ZWQgZXhlY3V0aW9uIGFuZCB5b3Ugd2FudCB0byB1c2UgVVYgcmV0cmlldmFibGVcXG4gMTc0OlxcdFxcdCAgc2VjcmV0cyB2aWEgUEtFWSBBUEkuXFxuIDE3NTpcXHRcXG4gMTc2OlxcdGNvbmZpZyBDUllQVE9fUEFFU19TMzkwXFxuIDE3NzpcXHRcXHR0cmlzdGF0ZSBcXFwiUEFFUyBjaXBoZXIgYWxnb3JpdGhtc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6MTAuMzQ0NDc4MTI3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDA0MDQ1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNlY3VyZSBFeGVjdXRpb24gUmVxdWlyZW1lbnRzIGZvciBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGVycm9yIG1lc3NhZ2U6IFwiVGhpcyBzZXJ2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpbiBhIHByb3RlY3RlZCBleGVjdXRpb24gZ3Vlc3QgYW5kIHRodXMgdGhpcyBtb2R1bGUgd2lsbCBmYWlsIHVwb24gbW9kcHJvYmUgaWYgbm8gcHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyBkZXRlY3RlZC5cIiBSaWdodCwgc28gdGhhdCB0ZWxscyBtZSBpbW1lZGlhdGVseSB0aGlzIGlzIHRpZWQgdG8gU2VjdXJlIEV4ZWN1dGlvbiwgb3Igd2hhdCBJIHVzdWFsbHkgY2FsbCBhIFwicHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC5cIiBBbmQgdGhlIGNvbnRleHQgaXMgU3l6a2FsbGVyLlxuXG5IbW0sIHRoZSB0ZXh0IHNheXMgU3l6a2FsbGVyICpkb2Vzbid0KiBydW4gd2l0aCBTZWN1cmUgRXhlY3V0aW9uIGVuYWJsZWQgYnkgZGVmYXVsdC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBhIGJpdCBvZiBhIG5pY2hlIHNldHVwLiBJdCBsb29rcyBsaWtlIGl0IG5lZWRzIFVsdHJhdmlzb3Igc3VwcG9ydCBvbiB0aGUgaG9zdCwgb3IgUUVNVSB3aXRoIGBwcm90dmlydGAgZW5hYmxlZC4gQW5kIG9mIGNvdXJzZSwgdGhlIFFFTVUgcGF0aCBzdGlsbCBkZXBlbmRzIG9uIGhvc3Qgc3VwcG9ydCAtIHNwZWNpZmljYWxseSBLVk0gb24gczM5MHggd2l0aCBVbHRyYXZpc29yLlxuXG5XYWl0LCBRRU1VIGlzIGxpc3RlZCBoZXJlIGFzICplbXVsYXRpbmcqIFVsdHJhdmlzb3I/IE5vLCBoYW5nIG9uLiBRRU1VIHVzZXMgS1ZNIHRvICpzdXBwb3J0KiBVbHRyYXZpc29yLCBpdCdzIG5vdCBhY3R1YWxseSBhbiBlbXVsYXRpb24gbGF5ZXIsIGl0J3MgYSBoYXJkd2FyZSBmZWF0dXJlIG9uIElCTSB6MTUrIHByb2Nlc3NvcnMuIE9rYXksIEkndmUgZ290IGl0LlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBoZXJlIGlzIGNhbiBzeXprYWxsZXIncyBmdXp6aW5nIHJvdXRpbmVzIGFjdHVhbGx5IHJlYWNoIHRoaXMgY29kZT8gQXJlIHdlIGV2ZW4gdGVzdGluZyBzb21ldGhpbmcgdGhhdCdzIGxpa2VseSB0byAqZmFpbCogaW4gYSBub3JtYWwgU3l6a2FsbGVyIHJ1bj8gXG5cblRvIGRldGVybWluZSBpZiB0aGlzIGlzIHJlbGV2YW50LCBJIHNob3VsZCBjaGVjayBpZiBgdXZfZmluZF9zZWNyZXRgIGlzIGNhbGxlZCBhbnl3aGVyZSBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA5MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIzOjE1LjM0NDg4NTU2OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3NzU4MDczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9maW5kX3NlY3JldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjEzPXN0YXRpYyBpbmxpbmUgaW50IHV2X3JlbW92ZV9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE3LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxODppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzU3PXN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3NzM6ICogdXZfZmluZF9zZWNyZXQoKSAtIHNlYXJjaCBzZWNyZXQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VjcmV0IGlkLlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzQtICogQHNlY3JldF9pZDogc2VhcmNoIHBhdHRlcm4uXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc5LSAqL1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODA6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDUtfVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMD1NT0RVTEVfREVTQ1JJUFRJT04oXFxcInMzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMi0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzOiAqIE9uZSBwcmUtYWxsb2NhdGVkIHV2X3NlY3JldF9saXN0IGZvciB1c2Ugd2l0aCB1dl9maW5kX3NlY3JldCgpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQtICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz05Mz1zdGF0aWMgaW50IGdldF9zZWNyZXRfbWV0YWRhdGEoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTktXFx0bWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwMDpcXHRyYyA9IHV2X2ZpbmRfc2VjcmV0KHNlY3JldF9pZCwgdXZfbGlzdCwgc2VjcmV0KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDEtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6MTcuNTIyNDc1NTI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTEwMjUyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHlzaXMgb2YgYHBrZXlfdXYuY2AgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHRoZSBtb2R1bGUgaW4gcXVlc3Rpb24sIGBwa2V5X3V2LmNgLCBpcyAqb25seSogY2FsbGVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvczM5MC9jcnlwdG9gIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRoZSBvbmx5IHVzZSBvZiB0aGlzIGZpbGUgaXMgZHVyaW5nIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIFRoaXMgbmFycm93cyBkb3duIHRoZSBzY29wZSBxdWl0ZSBhIGJpdC4gSXTigJlzIGEgdmVyeSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gY3J5cHRvZ3JhcGhpYyBrZXkgbWFuYWdlbWVudCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGFuZCBjb25maW5lZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgaXTigJlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgY3J5cHRvIGFjY2VsZXJhdGlvbiBvciBrZXkgaGFuZGxpbmcgbW9kdWxlLCBjbG9zZWx5IHRpZWQgdG8gdGhlIHMzOTAgcGxhdGZvcm3igJlzIGNyeXB0byBjYXBhYmlsaXRpZXMuIFdlIG5lZWQgdG8gbG9vayBkZWVwZXIgaW4gdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjY2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6MjAuNzEzNTA2NDExWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODQ6XFx0c3RhdGljIGludCBfX2luaXQgcGtleV91dl9pbml0KHZvaWQpXFxuIDI4NTpcXHR7XFxuIDI4NjpcXHRcXHRpbnQgcmM7XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXFxuIDI4OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0aWYgKCF0ZXN0X2JpdF9pbnYoQklUX1VWQ19DTURfUkVUUl9TRUNSRVQsIHV2X2luZm8uaW5zdF9jYWxsc19saXN0KSlcXG4gMjkyOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAyOTM6XFx0XFxuIDI5NDpcXHRcXHR1dl9saXN0ID0ga21hbGxvY19vYmooKnV2X2xpc3QpO1xcbiAyOTU6XFx0XFx0aWYgKCF1dl9saXN0KVxcbiAyOTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFxcdTAwMjZ1dl9oYW5kbGVyKTtcXG4gMjk5OlxcdFxcdGlmIChyYylcXG4gMzAwOlxcdFxcdFxcdGtmcmVlKHV2X2xpc3QpO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHRyZXR1cm4gcmM7XFxuIDMwMzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIzOjIwLjcxMzYzMDkyMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODYxOTMwNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgU3l6a2FsbGVyJ3MgVmlydHVhbGl6YXRpb24gQ29udGV4dCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgZnVuY3Rpb24uIEl0cyBwdXJwb3NlIGlzIHByZXR0eSBjbGVhciDigJMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzeXN0ZW0gaXMgb3BlcmF0aW5nIHdpdGhpbiBhIHByb3RlY3RlZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gUmlnaHQgbm93LCBteSBhc3N1bXB0aW9uLCBiYXNlZCBvbiBob3cgU3l6a2FsbGVyIGlzIHR5cGljYWxseSBkZXBsb3llZCwgaXMgdGhhdCBpdCAqaXNuJ3QqLiBJIG1lYW4sIHdlJ3JlIHVzdWFsbHkgcnVubmluZyBpbiBlaXRoZXIgUUVNVSBUQ0csIHdoaWNoIGlzIGVtdWxhdGlvbiwgb3Igc3RyYWlnaHQgS1ZNLiBOZWl0aGVyIG9mIHRob3NlIGNvbmZpZ3VyYXRpb25zIHNjcmVhbSBcInByb3RlY3RlZCB2aXJ0dWFsaXphdGlvblwiIHRvIG1lLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZeKApiBob2xkIHRoYXQgdGhvdWdodC4gQ2FuIFN5emthbGxlciAqYWN0dWFsbHkqIHJ1biBhcyBhIHByb3RlY3RlZCB2aXJ0dWFsaXphdGlvbiBndWVzdD8gSXQgdXNlcyBRRU1VLCBkb2Vzbid0IGl0PyBBbmQgSSBrbm93IFFFTVUgKmRvZXMqIHN1cHBvcnQgczM5MHggU2VjdXJlIEV4ZWN1dGlvbi4gQnV0IHRoYXQgd291bGQgcmVxdWlyZSB0aGUgaG9zdCBoYXJkd2FyZSB0byBzdXBwb3J0IFNlY3VyZSBFeGVjdXRpb24g4oCTIGxpa2UgYSB6MTUgb3IgbGF0ZXIuIFN5emthbGxlciBpbnN0YW5jZXMsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIGFyZSBwcmVkb21pbmFudGx5IG9uIEdDRSwgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBBbmQgR0NFJ3MgczM5MHggb2ZmZXJpbmdzIGFyZW4ndCBsZXZlcmFnaW5nIG5hdGl2ZSBoYXJkd2FyZTsgdGhleSdyZSBzdHVjayB3aXRoIFFFTVUgVENHLCB0aGUgc2xvdyBlbXVsYXRpb24uXG5cblNvLCBpZiBTeXprYWxsZXIncyBvbiBHQ0UgKGFuZCBoZW5jZSwgaW4gVENHIGVtdWxhdGlvbiksIGl0J3MgYSBkZWFkIGVuZCwgdGhlbi4gUUVNVSBUQ0cgKmV4cGxpY2l0bHkqIGRvZXNuJ3Qgc3VwcG9ydCBzMzkweCBTZWN1cmUgRXhlY3V0aW9uLiBUaGUgYm90dG9tIGxpbmU6IHRoZSBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgcmV0dXJuIHRydWUgaW4gdGhpcyBjb21tb24gc2NlbmFyaW8uIEJ1dCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgaXMgYWN0dWFsbHkgaW5jYXBhYmxlIG9mIGV2ZXIgZXZhbHVhdGluZyB0byB0cnVlIHdoaWxlIHJ1bm5pbmcgaW4gUUVNVSBUQ0csIHJpZ2h0PyBKdXN0IGEgcXVpY2ssIGNvbmZpcm1hdG9yeSBjaGVjayB0byBjbG9zZSB0aGUgbG9vcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3OTEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzoyOS41NzU1NjQ0NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MTk5ODMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc19wcm90X3ZpcnRfZ3Vlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9ib290L2lwbF9wYXJtLmM9MTc2PXZvaWQgc2V0dXBfYm9vdF9jb21tYW5kX2xpbmUodm9pZClcXG4tLVxcbmFyY2gvczM5MC9ib290L2lwbF9wYXJtLmMtMTg1LVxcdC8qIGFwcGVuZCBJUEwgUEFSTSBkYXRhIHRvIHRoZSBib290IGNvbW1hbmQgbGluZSAqL1xcbmFyY2gvczM5MC9ib290L2lwbF9wYXJtLmM6MTg2OlxcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkgXFx1MDAyNlxcdTAwMjYgaXBsX2Jsb2NrX3ZhbGlkKVxcbmFyY2gvczM5MC9ib290L2lwbF9wYXJtLmMtMTg3LVxcdFxcdGFwcGVuZF9pcGxfYmxvY2tfcGFybSgpO1xcbi0tXFxuYXJjaC9zMzkwL2Jvb3QvcGdtX2NoZWNrLmM9NTg9dm9pZCBkb19wZ21fY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9wZ21fY2hlY2suYy02Ny1cXHRib290X2VtZXJnKFxcXCJMaW51eCB2ZXJzaW9uICVzXFxcXG5cXFwiLCBrZXJuZWxfdmVyc2lvbik7XFxuYXJjaC9zMzkwL2Jvb3QvcGdtX2NoZWNrLmM6Njg6XFx0aWYgKCFpc19wcm90X3ZpcnRfZ3Vlc3QoKSBcXHUwMDI2XFx1MDAyNiBlYXJseV9jb21tYW5kX2xpbmVbMF0pXFxuYXJjaC9zMzkwL2Jvb3QvcGdtX2NoZWNrLmMtNjktXFx0XFx0Ym9vdF9lbWVyZyhcXFwiS2VybmVsIGNvbW1hbmQgbGluZTogJXNcXFxcblxcXCIsIGVhcmx5X2NvbW1hbmRfbGluZSk7XFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9waHlzbWVtX2luZm8uYz0yMDU9c3RhdGljIHZvaWQgZGllX29vbSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBsb25nIG1heClcXG4tLVxcbmFyY2gvczM5MC9ib290L3BoeXNtZW1faW5mby5jLTIxMi1cXHRib290X2VtZXJnKFxcXCJMaW51eCB2ZXJzaW9uICVzXFxcXG5cXFwiLCBrZXJuZWxfdmVyc2lvbik7XFxuYXJjaC9zMzkwL2Jvb3QvcGh5c21lbV9pbmZvLmM6MjEzOlxcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkgXFx1MDAyNlxcdTAwMjYgZWFybHlfY29tbWFuZF9saW5lWzBdKVxcbmFyY2gvczM5MC9ib290L3BoeXNtZW1faW5mby5jLTIxNC1cXHRcXHRib290X2VtZXJnKFxcXCJLZXJuZWwgY29tbWFuZCBsaW5lOiAlc1xcXFxuXFxcIiwgZWFybHlfY29tbWFuZF9saW5lKTtcXG4tLVxcbmFyY2gvczM5MC9ib290L3V2LmM9NjU9c3RhdGljIGludCBpc19wcm90X3ZpcnRfaG9zdF9jYXBhYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvYm9vdC91di5jLTcwLVxcdC8qIGRpc2FibGUgaWYgcHJvdGVjdGVkIGd1ZXN0IHZpcnR1YWxpemF0aW9uIGlzIGVuYWJsZWQgKi9cXG5hcmNoL3MzOTAvYm9vdC91di5jOjcxOlxcdGlmIChpc19wcm90X3ZpcnRfZ3Vlc3QoKSlcXG5hcmNoL3MzOTAvYm9vdC91di5jLTcyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NTY0PWV4dGVybiBpbnQgcHJvdF92aXJ0X2d1ZXN0O1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTU2NS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo1NjY6c3RhdGljIGlubGluZSBpbnQgaXNfcHJvdF92aXJ0X2d1ZXN0KHZvaWQpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTY3LXtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTU3MT1zdGF0aWMgaW5saW5lIGludCBzaGFyZSh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBjbWQpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01NzgtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTc5OlxcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTgwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz02NjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdXZfa2V5c19hdHRyX2dyb3VwID0ge1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTY2Ny1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NjY4OnN0YXRpYyBzc2l6ZV90IHV2X2lzX3Byb3RfdmlydF9ndWVzdChzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNjY5LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NjgwPXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdXZfcHJvdF92aXJ0X2d1ZXN0ID1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NjgxOlxcdF9fQVRUUihwcm90X3ZpcnRfZ3Vlc3QsIDA0NDQsIHV2X2lzX3Byb3RfdmlydF9ndWVzdCwgTlVMTCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTY4Mi1cXG4tLVxcbmFyY2gvczM5MC9tbS9pbml0LmM9MTQwPWJvb2wgZm9yY2VfZG1hX3VuZW5jcnlwdGVkKHN0cnVjdCBkZXZpY2UgKmRldilcXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTE0MS17XFxuYXJjaC9zMzkwL21tL2luaXQuYzoxNDI6XFx0cmV0dXJuIGlzX3Byb3RfdmlydF9ndWVzdCgpO1xcbmFyY2gvczM5MC9tbS9pbml0LmMtMTQzLX1cXG4tLVxcbmFyY2gvczM5MC9tbS9pbml0LmM9MTQ2PXN0YXRpYyB2b2lkIF9faW5pdCBwdl9pbml0KHZvaWQpXFxuYXJjaC9zMzkwL21tL2luaXQuYy0xNDcte1xcbmFyY2gvczM5MC9tbS9pbml0LmM6MTQ4OlxcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXFxuYXJjaC9zMzkwL21tL2luaXQuYy0xNDktXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNTk9Ym9vbCBhcF9pc19zZV9ndWVzdCh2b2lkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjYwLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI2MTpcXHRyZXR1cm4gaXNfcHJvdF92aXJ0X2d1ZXN0KCkgXFx1MDAyNlxcdTAwMjYgYXBfc2JfYXZhaWxhYmxlKCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNjItfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjg3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI4ODpcXHRpZiAoIWlzX3Byb3RfdmlydF9ndWVzdCgpKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI4OS1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjM6MzEuNzM3NTY5OTg3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTkwODMzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIHMzOTAgQXJjaGl0ZWN0dXJlIGZvciBWaXJ0dWFsIEd1ZXN0IEluZm9ybWF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aXJ0dWFsIGd1ZXN0IGVudmlyb25tZW50IG9uIHMzOTAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBpc19wcm90X3ZpcnRfZ3Vlc3RgLiBUaGF0J3MgdGhlIHR5cGljYWwgcGxhY2UgdG8gbG9vayBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgdmlydHVhbCBtYWNoaW5lIGRldGVjdGlvbiwgZXNwZWNpYWxseSBvbiBzMzkwLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgZGVmaW5pdGlvbiwgYW5kIHRoZSBzb3VyY2UgZmlsZSBtZW50aW9uZWQgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludCDigJMgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYC4gVGhpcyBsaWtlbHkgaG9sZHMgdGhlIG1hY3JvIGRlZmluaXRpb24gb3IgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gdGhhdCB3aWxsIGdpdmUgbWUgdGhlIGFuc3dlci4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgaGVhZGVyIGFuZCB2ZXJpZnkuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBsb3ctbGV2ZWwgaGFyZHdhcmUgb3IgaHlwZXJ2aXNvciBkZXRlY3Rpb24gbWVjaGFuaXNtcyBpbiB0aGVyZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaW5nIHVzZWQgdG8gcHJvcGVybHkgaW50ZXJwcmV0IHRoZSByZXN1bHRzIGFuZCBpbnRlZ3JhdGUgaXQgd2l0aCB0aGUgcmVzdCBvZiBteSByZXNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MDcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzozNS4wNTY2NTY3NzlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTY0LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTY0OlxcdGV4dGVybiBpbnQgcHJvdF92aXJ0X2d1ZXN0O1xcbiA1NjU6XFx0XFxuIDU2NjpcXHRzdGF0aWMgaW5saW5lIGludCBpc19wcm90X3ZpcnRfZ3Vlc3Qodm9pZClcXG4gNTY3OlxcdHtcXG4gNTY4OlxcdFxcdHJldHVybiBwcm90X3ZpcnRfZ3Vlc3Q7XFxuIDU2OTpcXHR9XFxuIDU3MDpcXHRcXG4gNTcxOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNoYXJlKHVuc2lnbmVkIGxvbmcgYWRkciwgdTE2IGNtZClcXG4gNTcyOlxcdHtcXG4gNTczOlxcdFxcdHN0cnVjdCB1dl9jYl9zaGFyZSB1dmNiID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzozNS4wNTY3NDk3MTlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NjM3MjQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKlRyYWNraW5nIERvd24gYSBWYXJpYWJsZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBwcm90X3ZpcnRfZ3Vlc3RgIHZhcmlhYmxlIGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kIGFzc2lnbmVkIGEgdmFsdWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdXNhZ2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cywgYW5kIEkgaGF2ZSBhIGZlZWxpbmcgaXQncyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGJlaGF2aW9yIEknbSB0cnlpbmcgdG8gYW5hbHl6ZS4gVGltZSB0byBnZXQgbXkgc2VhcmNoLWZ1IHdvcmtpbmcuIEkgbmVlZCB0byBwaW5wb2ludCBpdHMgb3JpZ2luIHF1aWNrbHkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyMjgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjIzOjM4LjA0MzEyNTE2MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMjcyMzkxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm90X3ZpcnRfZ3Vlc3QgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2Jvb3QvdXYuYz0xNT12b2lkIHV2X3F1ZXJ5X2luZm8odm9pZClcXG4tLVxcbmFyY2gvczM5MC9ib290L3V2LmMtNTQtXFx0ICAgIHRlc3RfYml0X2ludihCSVRfVVZDX0NNRF9SRU1PVkVfU0hBUkVEX0FDQ0VTUywgKHVuc2lnbmVkIGxvbmcgKil1dmNiLmluc3RfY2FsbHNfbGlzdCkpXFxuYXJjaC9zMzkwL2Jvb3QvdXYuYzo1NTpcXHRcXHRwcm90X3ZpcnRfZ3Vlc3QgPSAxO1xcbmFyY2gvczM5MC9ib290L3V2LmMtNTYtfVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTY3ND1zdGF0aWMgc3NpemVfdCB1dl9pc19wcm90X3ZpcnRfaG9zdChzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy02NzktXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjY4MDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHV2X3Byb3RfdmlydF9ndWVzdCA9XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTY4MS1cXHRfX0FUVFIocHJvdF92aXJ0X2d1ZXN0LCAwNDQ0LCB1dl9pc19wcm90X3ZpcnRfZ3Vlc3QsIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzo0MC4yNTU4NjMwMDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyOTA2NDg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVsdHJhdmlzb3IgRmFjaWxpdHkgYW5kIGl0cyBJbXBsaWNhdGlvbnMgZm9yIFZ1bG5lcmFiaWxpdHkgUmVzZWFyY2gqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYHV2X2ZpbmRfc2VjcmV0YCBnZXRzIGNhbGxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpdCdzIHRyaWdnZXJlZCBpZiBgdXZfcXVlcnlfaW5mb2Agd29ya3MgYW5kIFVWQyBjb21tYW5kcyBhcmUgYWNjZXNzaWJsZSB3aXRoaW4gYGFyY2gvczM5MC9ib290L3V2LmNgLiBCdXQgdGhhdCBoaW5nZXMgb24gdGhlIGh5cGVydmlzb3IgYWN0dWFsbHkgc3VwcG9ydGluZyBhbmQgZW5hYmxpbmcgdGhlIFVsdHJhdmlzb3IgZmFjaWxpdHkgZm9yIHRoZSBndWVzdC5cblxuVGhlbiwgdGhlcmUncyB0aGUgU3l6a2FsbGVyIHNldHVwLiBJdCBydW5zIG9uIEdDRSwgYW5kIEdDRSBkb2Vzbid0IGhhdmUgbmF0aXZlIHMzOTB4IGhhcmR3YXJlOyBpdCdzIHVzaW5nIFFFTVUgaW4gVENHIG1vZGUgaW5zdGVhZC4gVGhlIHByb2JsZW0gaXMsIFFFTVUgVENHICpkb2Vzbid0KiBzdXBwb3J0IHRoZSBVbHRyYXZpc29yIGZhY2lsaXR5LCB3aGljaCBtZWFucyBubyBTZWN1cmUgRXhlY3V0aW9uLiBTbywgYHByb3RfdmlydF9ndWVzdGAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSB6ZXJvIGluIHRoaXMgY2FzZS5cblxuSWYgYHByb3RfdmlydF9ndWVzdGAgaXMgemVybywgdGhlbiBgcGtleV91dl9pbml0YCB3aWxsIHJldHVybiBgLUVOT0RFVmAuIEFuZCBpZiBgcGtleV91dl9pbml0YCByZXR1cm5zIGAtRU5PREVWYCwgdGhlIGNyaXRpY2FsIGB1dl9oYW5kbGVyYCBpc24ndCByZWdpc3RlcmVkLiBUaGF0J3MgYSBtYWpvciByZWQgZmxhZyBiZWNhdXNlIGlmIGB1dl9oYW5kbGVyYCBpc24ndCByZWdpc3RlcmVkLCBgdXZfZmluZF9zZWNyZXRgIG5ldmVyIGdldHMgY2FsbGVkIHRocm91Z2ggdGhpcyBwYXRoLlxuXG5CdXQgd2FpdCwgaXMgYHV2X2ZpbmRfc2VjcmV0YCBjYWxsZWQgZnJvbSBzb21ld2hlcmUgZWxzZT8gSSBuZWVkIHRvIGNoZWNrLiBJIHNhdyBtZW50aW9ucyBvZiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhgLCBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCwgYW5kIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2AuXG5cbkxldCdzIHN0YXJ0IHdpdGggYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYC4gTm9wZSwgdGhhdCdzIGp1c3QgYSBkZWNsYXJhdGlvbi4gT2ssIHNvIHdoZXJlIGVsc2U/IEknbSBnb2luZyB0byBsb29rIGF0IGBkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTY0NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzo0Ny4xODQ5MzU1ODJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NzcwNDM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9maW5kX3NlY3JldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzo0Ny4yNjA3MTI0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTcwOTMzODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gU3l6a2FsbGVyIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSd2ZSB0cmFjZWQgdGhlIGNhbGwgcGF0aCBvZiBgdXZfZmluZF9zZWNyZXRgLiBJdCdzIG9ubHkgY2FsbGVkIGZyb20gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gVGhhdCBmaWxlLCBgcGtleV91di5jYCwgaXMgaW5pdGlhbGl6ZWQgb25seSBpZiBgaXNfcHJvdF92aXJ0X2d1ZXN0KClgIGlzIHRydWUuIE5vdywgc3l6a2FsbGVyIHJ1bnMgczM5MHggdW5kZXIgUUVNVSBUQ0csIGFuZCBpbiB0aGF0IHNldHVwLCBgaXNfcHJvdF92aXJ0X2d1ZXN0KClgIGlzIGRlZmluaXRlbHkgZmFsc2UuIFNvLCBiYXNlZCBvbiB0aGF0LCB0aGUgY29kZSdzIHVucmVhY2hhYmxlLiBCdXQgd2FpdC4uLiBkb2VzIHN5emthbGxlciB1c2UgS1ZNIHNvbWV0aW1lcz8gSSBrbm93IHRoZXJlJ3MgYW4gczM5MHggaW5zdGFuY2Ugb24gR0NFLCB3aGljaCBydW5zIFFFTVUgVENHLiBCdXQgZXZlbiBpZiB0aGVyZSB3ZXJlIEtWTSBpbnN0YW5jZXMsIFNlY3VyZSBFeGVjdXRpb24gKHByb3R2aXJ0KSBuZWVkcyBzcGVjaWZpYyBzZXR1cDogYSBRRU1VIGNvbW1hbmQgbGluZSB3aXRoIGBwcm90dmlydGAsIGFuZCBhIGhvc3Qgd2l0aCBVbHRyYXZpc29yLiBTeXprYWxsZXIgaXMgbm90IGRvaW5nIHRoYXQuIEl0IGJvb3RzIGEgc3RhbmRhcmQgdm1saW51eCBhbmQgZG9lc24ndCB1c2UgdGhlIHNwZWNpYWwgYm9vdGxvYWRlciBgZ2VucHJvdGltZ2AgbmVlZGVkIGZvciBhIHNlY3VyZSBpbWFnZS5cblxuSG9sZCBvbiwgY291bGQgYHV2X3F1ZXJ5X2luZm9gIHN1Y2NlZWQgaW4gUUVNVSBUQ0c/IE5vcGUuIFFFTVUgVENHIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBVbHRyYXZpc29yIENhbGwgKFVWQykgaW5zdHJ1Y3Rpb24sIG9yIGlmIGl0IGRvZXMsIGl0IGRvZXNuJ3QgZG8gdGhlIFNlY3VyZSBFeGVjdXRpb24gc3R1ZmYuIFNvLCBpdCdzIGRlZmluaXRlbHkgdW5yZWFjaGFibGUgaW4gUUVNVS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGlzIGZvciBzeXprYWxsZXIsIGNvbnNpZGVyaW5nIHRoZSBwcm9tcHQgSSdtIHdvcmtpbmcgd2l0aDogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhhdCdzIGEgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBzY2VuYXJpby5cblxuT2theSwgbGV0J3MgbmFpbCB0aGlzIGRvd24uIGBwa2V5X3V2LmNgIGlzIHRoZSBrZXkuIElmIGBpc19wcm90X3ZpcnRfZ3Vlc3QoKWAgaXMgZmFsc2UsIGBwa2V5X3V2X2luaXRgIHJldHVybnMgYC1FTk9ERVZgLiBUaGUgbW9kdWxlIGZhaWxzIHRvIGxvYWQsIG9yIGlmIGJ1aWx0LWluLCB0aGUgaW5pdGNhbGwgZmFpbHMuIFRoZXJlZm9yZSwgYHV2X2hhbmRsZXJgIGlzIG5ldmVyIHJlZ2lzdGVyZWQsIGFuZCBgdXZfZmluZF9zZWNyZXRgIGlzIG5ldmVyIGNhbGxlZC4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgZW52aXJvbm1lbnRzLiBUaGUgcHJvbXB0IHNheXMgdGhhdCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB1c2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgcmVzdWx0IGluIFdvcnRoRnV6emluZz1mYWxzZS4gVGhpcyByZXF1aXJlcyBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIChVbHRyYXZpc29yKSwgd2hpY2ggaXMgYSBoYXJkd2FyZSBmZWF0dXJlLCBub3QgZW11bGF0ZWQgYnkgUUVNVSBUQ0cuIEFsc28sIGl0IHJlcXVpcmVzIGEgc3BlY2lhbGx5IGNyYWZ0ZWQgZW5jcnlwdGVkIGJvb3QgaW1hZ2UgKGBnZW5wcm90aW1nYCksIGV2ZW4gb24gS1ZNLiBTbywgdGhpcyBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN5emthbGxlci5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGlzIGB1dl9maW5kX3NlY3JldGAgZXhwb3J0ZWQgYW5kIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlPyBJdCdzIGBFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldClgLiBCdXQgSSBjaGVja2VkIGFsbCB0aGUgY2FsbGVycyBpbiB0aGUga2VybmVsIHRyZWUgdXNpbmcgYGdpdCBncmVwIHV2X2ZpbmRfc2VjcmV0YCBhbmQgdGhlIG9ubHkgY2FsbGVyIGlzIGBwa2V5X3V2LmNgLiBTbyBJJ20gY29uZmlkZW50LlxuXG5Pa2F5LCBsZXQgbWUganVzdCBydW4gYSBxdWljayBjaGVjayB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG1pc3NlZCBjYWxsZXJzIG9mIGB1dl9maW5kX3NlY3JldGAuIEFmdGVyIGEgcXVpY2sgZG91YmxlLWNoZWNrIEkgYW0gY29uZmlkZW50IHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ1OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOToyMzo1OC44MzE2NTAzMDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODk4MjEyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfZmluZF9zZWNyZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxMz1zdGF0aWMgaW5saW5lIGludCB1dl9yZW1vdmVfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxNy1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo2MTg6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTktXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTc1Nz1zdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3Mi0vKipcXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzczOiAqIHV2X2ZpbmRfc2VjcmV0KCkgLSBzZWFyY2ggc2VjcmV0IG1ldGFkYXRhIGZvciBhIGdpdmVuIHNlY3JldCBpZC5cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc0LSAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3OS0gKi9cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzgwOmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4MS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA1LX1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA3LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjA9TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJzMzkwIHByb3RlY3RlZCBrZXkgVVYgaGFuZGxlclxcXCIpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjItLypcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMzogKiBPbmUgcHJlLWFsbG9jYXRlZCB1dl9zZWNyZXRfbGlzdCBmb3IgdXNlIHdpdGggdXZfZmluZF9zZWNyZXQoKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0LSAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9OTM9c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTk5LVxcdG1lbXNldCh1dl9saXN0LCAwLCBzaXplb2YoKnV2X2xpc3QpKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMDA6XFx0cmMgPSB1dl9maW5kX3NlY3JldChzZWNyZXRfaWQsIHV2X2xpc3QsIHNlY3JldCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTAxLVxcdG11dGV4X3VubG9jayhcXHUwMDI2dXZfbGlzdF9tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjI0OjAwLjkyMTQ3OTMyOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTA0MDg4NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgUGF0aCBDb25maXJtZWQqKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyBvbmx5IGV2ZXIgY2FsbGVkIGJ5IGBwa2V5X3V2LmNgLiBGdXJ0aGVyIGludmVzdGlnYXRpb24gcmV2ZWFscyB0aGF0IGBwa2V5X3V2LmNgIGl0c2VsZiBvbmx5IGJlY29tZXMgYWN0aXZlIHVuZGVyIHRoZSBjb25kaXRpb24gYGlzX3Byb3RfdmlydF9ndWVzdCgpYCBldmFsdWF0ZXMgdG8gdHJ1ZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggU2VjdXJlIEV4ZWN1dGlvbiAoVWx0cmF2aXNvcikgY2FwYWJpbGl0aWVzIG9uIHMzOTB4LlxuXG5UaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGRlZmluaXRlbHkgKm5vdCogc29tZXRoaW5nIHdlJ2xsIGJlIGFibGUgdG8gaGl0IGR1cmluZyBmdXppbmcgd2l0aCBzeXprYWxsZXIuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgVENHIGFyZSBzaW1wbHkgbm90IGVxdWlwcGVkIHRvIHRyaWdnZXIgdGhpcyBwYXJ0aWN1bGFyIGNvbmRpdGlvbi4gV2UnZCBuZWVkIHNvbWV0aGluZyB2ZXJ5IHNwZWNpZmljLCBsaWtlIGEgYmVzcG9rZSBzZWN1cmUgYm9vdCBpbWFnZSB3aXRoIHMzOTB4IFNlY3VyZSBFeGVjdXRpb24gZW5hYmxlZC4gSSdtIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyB1bmZ1enphYmxlLiBMZXQncyBzZXQgV29ydGhGdXp6aW5nPWZhbHNlIGZvciB0aGlzIGNhc2UuIE15IHJlYXNvbmluZyBpcyB0aGF0IGl0IGZ1bmRhbWVudGFsbHkgZGVwZW5kcyBvbiBhIHBsYXRmb3JtIGZlYXR1cmUgdGhhdCdzIHVuYXZhaWxhYmxlIGluIG91ciBzdGFuZGFyZCB0ZXN0aW5nIHNldHVwLiBObyBwb2ludCB3YXN0aW5nIGN5Y2xlcyBvbiBzb21ldGhpbmcgdGhhdCdzIHVucmVhY2hhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU1NCwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjQ6MDYuMDI1NTcwNzU3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHV2X2ZpbmRfc2VjcmV0YCBpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBgcGtleV91dmAgY3J5cHRvIGRyaXZlci4gVGhpcyBkcml2ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIFVsdHJhdmlzb3IgQ2FsbCAoVVZDKSBmdW5jdGlvbmFsaXR5IGFyZSBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhcyBhbiBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIChwcm90ZWN0ZWQgdmlydHVhbGl6YXRpb24pIGd1ZXN0LiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIChJQk0gejE1KyB3aXRoIFVsdHJhdmlzb3IpIGFuZCBhIHNwZWNpYWxseSBjcmFmdGVkIGVuY3J5cHRlZCBib290IGltYWdlIChnZW5wcm90aW1nKSwgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBUQ0cgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHV2X2ZpbmRfc2VjcmV0YCBpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBgcGtleV91dmAgY3J5cHRvIGRyaXZlci4gVGhpcyBkcml2ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIFVsdHJhdmlzb3IgQ2FsbCAoVVZDKSBmdW5jdGlvbmFsaXR5IGFyZSBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhcyBhbiBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIChwcm90ZWN0ZWQgdmlydHVhbGl6YXRpb24pIGd1ZXN0LiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIChJQk0gejE1KyB3aXRoIFVsdHJhdmlzb3IpIGFuZCBhIHNwZWNpYWxseSBjcmFmdGVkIGVuY3J5cHRlZCBib290IGltYWdlIChnZW5wcm90aW1nKSwgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBUQ0cgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6MjQ6MDYuMDI1NTk5Njk3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowzhq26[1] Phase: Running StartedAt: 2026-08-11 09:24:17 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhq26[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-11 09:24:17 +0000 UTC FinishedAt: 2026-08-11 09:24:22 +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,}