Name: series-workflowhbl7c Phase: Succeeded StartedAt: 2026-09-06 03:32:23 +0000 UTC FinishedAt: 2026-09-06 06:52:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[0] Phase: Succeeded StartedAt: 2026-09-06 03:32:23 +0000 UTC FinishedAt: 2026-09-06 03:52:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 03:32:23 +0000 UTC FinishedAt: 2026-09-06 03:52:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211" ], "series_id": "76f77b44-9475-41b2-ac02-94b1243b0a9d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_add_key", "ieee80211_upload_deferred_sta_keys", "ieee80211_key_enable_hw_accel", "_sta_info_move_state", "sta_info_move_state" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX2FkZF9rZXkmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbCYjMzQ7LAogICAgJiMzNDtfc3RhX2luZm9fbW92ZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDtzdGFfaW5mb19tb3ZlX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZWZlcnJlZCBoYXJkd2FyZSBrZXkgdXBsb2FkIGluIG1hYzgwMjExIGZvciBBUC1zaWRlIEZhc3QgVHJhbnNpdGlvbiAoRlQpIHdoZW4gcGFpcndpc2Uga2V5cyBhcmUgaW5zdGFsbGVkIHByaW9yIHRvIHN0YXRpb24gYXNzb2NpYXRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgaW50ZXJuYWwgZmxhZyAoS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSwgZGVmZXJzIHRoZSBkcml2ZXIgc2V0X2tleSBvcGVyYXRpb24gdW50aWwgdGhlIHN0YXRpb24gdHJhbnNpdGlvbnMgdG8gV0xBTl9TVEFfQVNTT0MsIGFuZCBhdHRlbXB0cyBoYXJkd2FyZSBrZXkgdXBsb2FkIGF0IHRoYXQgcG9pbnQuXG5cbkV2YWx1YXRpb24gcmVnYXJkaW5nIEtNU0FOIHZzIEtBU0FOOlxuLSBVbmluaXRpYWxpemVkIG1lbW9yeSAvIGluZm8tbGVha3MgKEtNU0FOKTogTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBsZWFrZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZGVmZXJfaHdfdXBsb2FkYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGtleSBzdHJ1Y3R1cmVzIG1hbmlwdWxhdGVkIGFyZSBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIG9iamVjdHMuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZS5cbi0gR2VuZXJhbCBtZW1vcnkgLyBjb25jdXJyZW5jeSBzYWZldHkgKEtBU0FOL0xvY2tkZXApOiBBbnkgaXNzdWVzIHJlbGF0aW5nIHRvIGtleSByZWZlcmVuY2UgbGlmZXRpbWVzLCBzdGF0aW9uIHN0YXRlIHRyYW5zaXRpb25zLCBvciBkcml2ZXIgY29uY3VycmVuY3kgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4sIExvY2tkZXApLlxuXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdG8ganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtYWM4MDIxMSBrZXkgaGFuZGxpbmcgYnkgYWxsb3dpbmcgcGFpcndpc2Uga2V5IGluc3RhbGxhdGlvbiBpbiBBUCBtb2RlIHByaW9yIHRvIHN0YXRpb24gYXNzb2NpYXRpb24gYW5kIGRlZmVycmluZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gdXBsb2FkIHVudGlsIGFzc29jaWF0aW9uIGNvbXBsZXRlcy4gSXQgaW50cm9kdWNlcyBuZXcga2V5IHN0YXRlIGZsYWdzLCB1cGRhdGVzIGtleSB1cGxvYWQgbG9naWMsIGFuZCBhZGRzIGEgbG9ja2RlcCBhc3NlcnRpb24gaW4gcmVhY2hhYmxlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgYW5kIHZpcnR1YWwgd2lyZWxlc3MgZGV2aWNlcyAoZS5nLiBtYWM4MDIxMV9od3NpbSksIG1ha2luZyBpdCBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTc0NmMzMGUyNzA0ZDU5YmFhMDc1ZWVmM2U1MGE4OTc0NTRhZDU2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDM6NTA6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jXG5pbmRleCAyM2Y0ZjllYzg2ZDBhLi5mZjk5M2E3YTllNDQxIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvY2ZnLmNcbkBAIC02NjYsNyAmIzQzOzY2NiwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYO1xuIFxuIFx0aWYgKG1hY19hZGRyKSB7XG4mIzQzO1x0XHRib29sIGRlZmVyX2h3X3VwbG9hZDtcbiYjNDM7XG4gXHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1hY19hZGRyKTtcbiYjNDM7XHRcdGRlZmVyX2h3X3VwbG9hZCA9XG4mIzQzO1x0XHRcdHN0YSBcdTAwMjZcdTAwMjYgcGFpcndpc2UgXHUwMDI2XHUwMDI2ICFzdGEtXHUwMDNlc3RhLmVwcF9wZWVyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0KHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8XG4mIzQzO1x0XHRcdCBzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IWllZWU4MDIxMV9od19jaGVjayhcdTAwMjZsb2NhbC1cdTAwM2VodywgU1dfQ1JZUFRPX0NPTlRST0wpO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgQVNTT0MgdGVzdCBtYWtlcyBzdXJlIHRoZSBkcml2ZXIgaXMgcmVhZHkgdG9cbiBcdFx0ICogcmVjZWl2ZSB0aGUga2V5LiBXaGVuIHdwYV9zdXBwbGljYW50IGhhcyByb2FtZWRcbkBAIC02ODEsMTQgJiM0Mzs2ODksMjIgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHQgKiBJZiAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50LFxuIFx0XHQgKiBjZmc4MDIxMSB3aWxsIG5vdCBhbGxvdyBrZXkgaW5zdGFsbGF0aW9uIGluIG5vbuKAkUFQIFNUQSBtb2RlLlxuIFx0XHQgKlxuLVx0XHQgKiBUT0RPOiBhY2NlcHQgdGhlIGtleSBpZiB3ZSBoYXZlIGEgc3RhdGlvbiBlbnRyeSBhbmRcbi1cdFx0ICpcdCBhZGQgaXQgdG8gdGhlIGRldmljZSBhZnRlciB0aGUgc3RhdGlvbiBhc3NvY2lhdGVzLlxuJiM0MztcdFx0ICogQVAtc2lkZSBGVCBtYXkgYWxzbyBpbnN0YWxsIGEgcGFpcndpc2Uga2V5IGJlZm9yZSB0aGVcbiYjNDM7XHRcdCAqIHN0YXRpb24gaXMgYXNzb2NpYXRlZC4gSWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXG4mIzQzO1x0XHQgKiBhbGxvd2VkLCBrZWVwIGl0IGluIG1hYzgwMjExIGFuZCB1cGxvYWQgaXQgYWZ0ZXIgdGhlIHN0YXRpb25cbiYjNDM7XHRcdCAqIHJlYWNoZXMgQVNTT0MuIERyaXZlcnMgd2l0aCBTV19DUllQVE9fQ09OVFJPTCBjYW5ub3QgdXNlIHRoaXNcbiYjNDM7XHRcdCAqIHBhdGggc2luY2Ugb25seSB0aGVpciBzZXRfa2V5IHJldHVybiB2YWx1ZSBjYW4gcGVybWl0IHNvZnR3YXJlXG4mIzQzO1x0XHQgKiBjcnlwdG8uXG4gXHRcdCAqL1xuIFx0XHRpZiAoIXN0YSB8fCAoIXN0YS1cdTAwM2VzdGEuZXBwX3BlZXIgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSkpIHtcbiYjNDM7XHRcdFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICAhZGVmZXJfaHdfdXBsb2FkKSkge1xuIFx0XHRcdGllZWU4MDIxMV9rZXlfZnJlZV91bnVzZWQoa2V5KTtcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChkZWZlcl9od191cGxvYWQpXG4mIzQzO1x0XHRcdGtleS1cdTAwM2VmbGFncyB8PSBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ7XG4gXHR9XG4gXG4gXHRzd2l0Y2ggKHNkYXRhLVx1MDAzZXZpZi50eXBlKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jXG5pbmRleCBmNDVlNzkyYWJlZGU1Li43NzRhOTJiYTdiZDhjIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEva2V5LmNcbkBAIC0xNDQsNiAmIzQzOzE0NCwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGlmIChrZXktXHUwMDNlZmxhZ3MgXHUwMDI2IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEtleXMgYXJlIG9ubHkgZGVmZXJyZWQgaWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXG4mIzQzO1x0XHQgKiBhbGxvd2VkLiBMZWF2ZSByZXQgYXMgLUVPUE5PVFNVUFAgc28gdGhlIG5vcm1hbCBmYWxsYmFjayBwYXRoXG4mIzQzO1x0XHQgKiBpcyB1c2VkIHdpdGhvdXQgcHJldGVuZGluZyB0aGUgZHJpdmVyIHJldHVybmVkIDEuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGdvdG8gb3V0X3Vuc3VwcG9ydGVkO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoIWtleS1cdTAwM2Vsb2NhbC1cdTAwM2VvcHMtXHUwMDNlc2V0X2tleSlcbiBcdFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XG4gXG5AQCAtOTk3LDYgJiM0MzsxMDA2LDI4IEBAIHZvaWQgaWVlZTgwMjExX3JlZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gXHR9XG4gfVxuIFxuJiM0Mzt2b2lkIGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RydWN0IHN0YV9pbmZvICpzdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS1cdTAwM2Vsb2NhbDtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5O1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X3dpcGh5KGxvY2FsLVx1MDAzZWh3LndpcGh5KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzdGEtXHUwMDNlcHRrKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGtleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBzdGEtXHUwMDNlcHRrW2ldKTtcbiYjNDM7XHRcdGlmICgha2V5IHx8ICEoa2V5LVx1MDAzZWZsYWdzIFx1MDAyNiBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRrZXktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+S0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEO1xuJiM0MztcdFx0cmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHNkYXRhX2VycihrZXktXHUwMDNlc2RhdGEsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGRlZmVycmVkIGtleSAoJWQsICVwTSk6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAga2V5LVx1MDAzZWNvbmYua2V5aWR4LCBzdGEtXHUwMDNlc3RhLmFkZHIsIHJldCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkXG4gaWVlZTgwMjExX2tleV9pdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaFxuaW5kZXggODI2ZTRlOTM4N2M1NS4uOTdkM2JiY2YwYWMyMSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2tleS5oXG5AQCAtMzIsMTAgJiM0MzszMiwxMyBAQCBzdHJ1Y3Qgc3RhX2luZm87XG4gICogQEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFOiBJbmRpY2F0ZXMgdGhhdCB0aGlzIGtleSBpcyBwcmVzZW50XG4gICpcdGluIHRoZSBoYXJkd2FyZSBmb3IgVFggY3J5cHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi5cbiAgKiBAS0VZX0ZMQUdfVEFJTlRFRDogS2V5IGlzIHRhaW50ZWQgYW5kIHBhY2tldHMgc2hvdWxkIGJlIGRyb3BwZWQuXG4mIzQzOyAqIEBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ6IEtleSB1cGxvYWQgaXMgZGVmZXJyZWQgdW50aWwgdGhlIHN0YXRpb25cbiYjNDM7ICpcdGlzIGFzc29jaWF0ZWQuXG4gICovXG4gZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfa2V5X2ZsYWdzIHtcbiBcdEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFXHQ9IEJJVCgwKSxcbiBcdEtFWV9GTEFHX1RBSU5URURcdFx0PSBCSVQoMSksXG4mIzQzO1x0S0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEXHQ9IEJJVCgyKSxcbiB9O1xuIFxuIGVudW0gaWVlZTgwMjExX2ludGVybmFsX3RraXBfc3RhdGUge1xuQEAgLTE2NSw2ICYjNDM7MTY4LDcgQEAgdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdCBib29sIGZvcmNlX3N5bmNocm9uaXplKTtcbiB2b2lkIGllZWU4MDIxMV9mcmVlX3N0YV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0XHRcdCAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuJiM0Mzt2b2lkIGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuIHZvaWQgaWVlZTgwMjExX3JlZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpO1xuIGludCBpZWVlODAyMTFfa2V5X3N3aXRjaF9saW5rcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBkZWxfbGlua3NfbWFzayxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXG5pbmRleCBmZGYwMGNiZjQ5ZDhiLi43NTNkY2RkOTA3MDExIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXG5AQCAtMTQ2OCw2ICYjNDM7MTQ2OCw3IEBAIHN0YXRpYyBpbnQgX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsXG4gXHRjYXNlIElFRUU4MDIxMV9TVEFfQVNTT0M6XG4gXHRcdGlmIChzdGEtXHUwMDNlc3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSCkge1xuIFx0XHRcdHNldF9iaXQoV0xBTl9TVEFfQVNTT0MsIFx1MDAyNnN0YS1cdTAwM2VfZmxhZ3MpO1xuJiM0MztcdFx0XHRpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0YSk7XG4gXHRcdFx0c3RhLVx1MDAzZWFzc29jX2F0ID0ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7XG4gXHRcdFx0aWYgKHJlY2FsYykge1xuIFx0XHRcdFx0aWVlZTgwMjExX3JlY2FsY19taW5fY2hhbmRlZihzdGEtXHUwMDNlc2RhdGEsIC0xKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV9hZGRfa2V5JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwmIzM0OywKICAgICYjMzQ7X3N0YV9pbmZvX21vdmVfc3RhdGUmIzM0OywKICAgICYjMzQ7c3RhX2luZm9fbW92ZV9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtYWM4MDIxMSBrZXkgaGFuZGxpbmcgYnkgYWxsb3dpbmcgcGFpcndpc2Uga2V5IGluc3RhbGxhdGlvbiBpbiBBUCBtb2RlIHByaW9yIHRvIHN0YXRpb24gYXNzb2NpYXRpb24gYW5kIGRlZmVycmluZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gdXBsb2FkIHVudGlsIGFzc29jaWF0aW9uIGNvbXBsZXRlcy4gSXQgaW50cm9kdWNlcyBuZXcga2V5IHN0YXRlIGZsYWdzLCB1cGRhdGVzIGtleSB1cGxvYWQgbG9naWMsIGFuZCBhZGRzIGEgbG9ja2RlcCBhc3NlcnRpb24gaW4gcmVhY2hhYmxlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgYW5kIHZpcnR1YWwgd2lyZWxlc3MgZGV2aWNlcyAoZS5nLiBtYWM4MDIxMV9od3NpbSksIG1ha2luZyBpdCBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTc0NmMzMGUyNzA0ZDU5YmFhMDc1ZWVmM2U1MGE4OTc0NTRhZDU2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDM6NTA6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggMjNmNGY5ZWM4NmQwYS4uZmY5OTNhN2E5ZTQ0MSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtNjY2LDcgJiM0Mzs2NjYsMTUgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQlrZXktJmd0O2NvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX05PX0FVVE9fVFg7CiAKIAlpZiAobWFjX2FkZHIpIHsKJiM0MzsJCWJvb2wgZGVmZXJfaHdfdXBsb2FkOwomIzQzOwogCQlzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7CiYjNDM7CQlkZWZlcl9od191cGxvYWQgPQomIzQzOwkJCXN0YSAmYW1wOyZhbXA7IHBhaXJ3aXNlICZhbXA7JmFtcDsgIXN0YS0mZ3Q7c3RhLmVwcF9wZWVyICZhbXA7JmFtcDsKJiM0MzsJCQkhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSAmYW1wOyZhbXA7CiYjNDM7CQkJKHNkYXRhLSZndDt2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAomIzQzOwkJCSBzZGF0YS0mZ3Q7dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikgJmFtcDsmYW1wOwomIzQzOwkJCSFpZWVlODAyMTFfaHdfY2hlY2soJmFtcDtsb2NhbC0mZ3Q7aHcsIFNXX0NSWVBUT19DT05UUk9MKTsKIAkJLyoKIAkJICogVGhlIEFTU09DIHRlc3QgbWFrZXMgc3VyZSB0aGUgZHJpdmVyIGlzIHJlYWR5IHRvCiAJCSAqIHJlY2VpdmUgdGhlIGtleS4gV2hlbiB3cGFfc3VwcGxpY2FudCBoYXMgcm9hbWVkCkBAIC02ODEsMTQgJiM0Mzs2ODksMjIgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQkgKiBJZiAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50LAogCQkgKiBjZmc4MDIxMSB3aWxsIG5vdCBhbGxvdyBrZXkgaW5zdGFsbGF0aW9uIGluIG5vbuKAkUFQIFNUQSBtb2RlLgogCQkgKgotCQkgKiBUT0RPOiBhY2NlcHQgdGhlIGtleSBpZiB3ZSBoYXZlIGEgc3RhdGlvbiBlbnRyeSBhbmQKLQkJICoJIGFkZCBpdCB0byB0aGUgZGV2aWNlIGFmdGVyIHRoZSBzdGF0aW9uIGFzc29jaWF0ZXMuCiYjNDM7CQkgKiBBUC1zaWRlIEZUIG1heSBhbHNvIGluc3RhbGwgYSBwYWlyd2lzZSBrZXkgYmVmb3JlIHRoZQomIzQzOwkJICogc3RhdGlvbiBpcyBhc3NvY2lhdGVkLiBJZiBhdXRvbWF0aWMgc29mdHdhcmUgZmFsbGJhY2sgaXMKJiM0MzsJCSAqIGFsbG93ZWQsIGtlZXAgaXQgaW4gbWFjODAyMTEgYW5kIHVwbG9hZCBpdCBhZnRlciB0aGUgc3RhdGlvbgomIzQzOwkJICogcmVhY2hlcyBBU1NPQy4gRHJpdmVycyB3aXRoIFNXX0NSWVBUT19DT05UUk9MIGNhbm5vdCB1c2UgdGhpcwomIzQzOwkJICogcGF0aCBzaW5jZSBvbmx5IHRoZWlyIHNldF9rZXkgcmV0dXJuIHZhbHVlIGNhbiBwZXJtaXQgc29mdHdhcmUKJiM0MzsJCSAqIGNyeXB0by4KIAkJICovCiAJCWlmICghc3RhIHx8ICghc3RhLSZndDtzdGEuZXBwX3BlZXIgJmFtcDsmYW1wOwotCQkJICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSkpIHsKJiM0MzsJCQkgICAgICF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgICFkZWZlcl9od191cGxvYWQpKSB7CiAJCQlpZWVlODAyMTFfa2V5X2ZyZWVfdW51c2VkKGtleSk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQomIzQzOwomIzQzOwkJaWYgKGRlZmVyX2h3X3VwbG9hZCkKJiM0MzsJCQlrZXktJmd0O2ZsYWdzIHw9IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDsKIAl9CiAKIAlzd2l0Y2ggKHNkYXRhLSZndDt2aWYudHlwZSkgewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IGY0NWU3OTJhYmVkZTUuLjc3NGE5MmJhN2JkOGMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTE0NCw2ICYjNDM7MTQ0LDE1IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWlmIChrZXktJmd0O2ZsYWdzICZhbXA7IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEtleXMgYXJlIG9ubHkgZGVmZXJyZWQgaWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzCiYjNDM7CQkgKiBhbGxvd2VkLiBMZWF2ZSByZXQgYXMgLUVPUE5PVFNVUFAgc28gdGhlIG5vcm1hbCBmYWxsYmFjayBwYXRoCiYjNDM7CQkgKiBpcyB1c2VkIHdpdGhvdXQgcHJldGVuZGluZyB0aGUgZHJpdmVyIHJldHVybmVkIDEuCiYjNDM7CQkgKi8KJiM0MzsJCWdvdG8gb3V0X3Vuc3VwcG9ydGVkOwomIzQzOwl9CiYjNDM7CiAJaWYgKCFrZXktJmd0O2xvY2FsLSZndDtvcHMtJmd0O3NldF9rZXkpCiAJCWdvdG8gb3V0X3Vuc3VwcG9ydGVkOwogCkBAIC05OTcsNiAmIzQzOzEwMDYsMjggQEAgdm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIAl9CiB9CiAKJiM0Mzt2b2lkIGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RydWN0IHN0YV9pbmZvICpzdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS0mZ3Q7bG9jYWw7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X3dpcGh5KGxvY2FsLSZndDtody53aXBoeSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHN0YS0mZ3Q7cHRrKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWtleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLSZndDtody53aXBoeSwgc3RhLSZndDtwdGtbaV0pOwomIzQzOwkJaWYgKCFrZXkgfHwgIShrZXktJmd0O2ZsYWdzICZhbXA7IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlrZXktJmd0O2ZsYWdzICZhbXA7PSB+S0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEOwomIzQzOwkJcmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJc2RhdGFfZXJyKGtleS0mZ3Q7c2RhdGEsCiYjNDM7CQkJCSAgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGRlZmVycmVkIGtleSAoJWQsICVwTSk6ICVkXG4mIzM0OywKJiM0MzsJCQkJICBrZXktJmd0O2NvbmYua2V5aWR4LCBzdGEtJmd0O3N0YS5hZGRyLCByZXQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIGllZWU4MDIxMV9rZXlfaXRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaAppbmRleCA4MjZlNGU5Mzg3YzU1Li45N2QzYmJjZjBhYzIxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2tleS5oCkBAIC0zMiwxMCAmIzQzOzMyLDEzIEBAIHN0cnVjdCBzdGFfaW5mbzsKICAqIEBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTogSW5kaWNhdGVzIHRoYXQgdGhpcyBrZXkgaXMgcHJlc2VudAogICoJaW4gdGhlIGhhcmR3YXJlIGZvciBUWCBjcnlwdG8gaGFyZHdhcmUgYWNjZWxlcmF0aW9uLgogICogQEtFWV9GTEFHX1RBSU5URUQ6IEtleSBpcyB0YWludGVkIGFuZCBwYWNrZXRzIHNob3VsZCBiZSBkcm9wcGVkLgomIzQzOyAqIEBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ6IEtleSB1cGxvYWQgaXMgZGVmZXJyZWQgdW50aWwgdGhlIHN0YXRpb24KJiM0MzsgKglpcyBhc3NvY2lhdGVkLgogICovCiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF9rZXlfZmxhZ3MgewogCUtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFCT0gQklUKDApLAogCUtFWV9GTEFHX1RBSU5URUQJCT0gQklUKDEpLAomIzQzOwlLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQJPSBCSVQoMiksCiB9OwogCiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF90a2lwX3N0YXRlIHsKQEAgLTE2NSw2ICYjNDM7MTY4LDcgQEAgdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJIGJvb2wgZm9yY2Vfc3luY2hyb25pemUpOwogdm9pZCBpZWVlODAyMTFfZnJlZV9zdGFfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEpOwomIzQzO3ZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB2b2lkIGllZWU4MDIxMV9yZWVuYWJsZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIGludCBpZWVlODAyMTFfa2V5X3N3aXRjaF9saW5rcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlbF9saW5rc19tYXNrLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCBmZGYwMGNiZjQ5ZDhiLi43NTNkY2RkOTA3MDExIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtMTQ2OCw2ICYjNDM7MTQ2OCw3IEBAIHN0YXRpYyBpbnQgX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJY2FzZSBJRUVFODAyMTFfU1RBX0FTU09DOgogCQlpZiAoc3RhLSZndDtzdGFfc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9BVVRIKSB7CiAJCQlzZXRfYml0KFdMQU5fU1RBX0FTU09DLCAmYW1wO3N0YS0mZ3Q7X2ZsYWdzKTsKJiM0MzsJCQlpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0YSk7CiAJCQlzdGEtJmd0O2Fzc29jX2F0ID0ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7CiAJCQlpZiAocmVjYWxjKSB7CiAJCQkJaWVlZTgwMjExX3JlY2FsY19taW5fY2hhbmRlZihzdGEtJmd0O3NkYXRhLCAtMSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2ggc2VyaWVzLiBGcm9tIHRoZSBmaWxlIHRvdWNoZXMg4oCTIGBuZXQvbWFjODAyMTEvY2ZnLmNgLCBgbmV0L21hYzgwMjExL2tleS5jYCwgYG5ldC9tYWM4MDIxMS9rZXkuaGAsIGFuZCBgbmV0L21hYzgwMjExL3N0YV9pbmZvLmNgIOKAkyBpdCYjMzk7cyBjbGVhcmx5IGRpZ2dpbmcgaW50byB0aGUga2V5IG1hbmFnZW1lbnQgYW5kIHN0YXRpb24gaW5mb3JtYXRpb24gd2l0aGluIG1hYzgwMjExLCBzcGVjaWZpY2FsbHkgYGllZWU4MDIxMV9hZGRfa2V5YCwgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCwgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXNgLCBhbmQgYF9zdGFfaW5mb19tb3ZlX3N0YXRlYC4gVGhpcyBoaW50cyBhdCBwb3RlbnRpYWwgY2hhbmdlcyByZWxhdGVkIHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvZiBrZXkgb3BlcmF0aW9ucyBvciBzdGF0aW9uIHN0YXRlIHRyYW5zaXRpb25zLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIGFsd2F5cyByZXByb2R1Y2liaWxpdHksIGVzcGVjaWFsbHkgaW4gYSBrZXJuZWwgY29udGV4dC4gSXMgdGhpcyBzb21ldGhpbmcgSSBjYW4gdHJpZ2dlciBhbmQgZGVidWcgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50PyBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgcXVpY2sgYW5zd2VyIGlzIGxpa2VseSB5ZXMsIHRoYW5rcyB0byBgbWFjODAyMTFfaHdzaW1gLCBgbmw4MDIxMWAsIGBuZXRsaW5rYCwgYW5kIGBjZmc4MDIxMWAuIFN5emthbGxlciBhbmQgUUVNVSBzaG91bGQgcHJvdmlkZSBhIHZpYWJsZSBwYXRoIGhlcmUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcXVpY2tseSB0aG91Z2guCgpGaW5hbGx5LCBsZXQmIzM5O3Mgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIGN1cnJlbnQgc3RhdGUuIFRpbWUgZm9yIHNvbWUgcXVpY2sgY2hlY2tzLiBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBwZXJgIGFuZCBzb21lIGZpbGUgcmVhZHMgdG8gc2VlIGhvdyBtYWM4MDIxMSBpcyBzZXQgdXAgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBkZXRlcm1pbmUgaW1wYWN0IGFuZCB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTUFDODAyMTEgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgS2NvbmZpZyBmb3IgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIE1BQzgwMjExLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBjb25maWd1cmF0aW9ucyBhcmUgaW50cmluc2ljYWxseSBsaW5rZWQgdG8sIG9yIHBlcmhhcHMgY29uZGl0aW9uYWxseSByZXF1aXJlZCBieSwgdGhlIE1BQzgwMjExIHN1YnN5c3RlbS4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHJlY2VudCBkZWJ1Z2dpbmcgZWZmb3J0cy4gSSB3YW50IHRvIHNlZSBpZiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBpcyBiZWluZyB0cmlnZ2VyZWQgYXMgYSByZXN1bHQgb2YgYSBkaXJlY3Qgb3IgaW5kaXJlY3QgZGVwZW5kZW5jeSBmcm9tIE1BQzgwMjExLCBvciBwZXJoYXBzIGJlaW5nIG1pc3NlZCBhcyBhIHJlc3VsdCBvZiBhIGhpZGRlbiBvbmUuIEnigJltIHRoaW5raW5nIGFib3V0IGxvb2tpbmcgYXQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGRyaXZlcnMsIG5ldHdvcmtpbmcgY29yZSBjb21wb25lbnRzLCBhbmQgYW55IHJlbGV2YW50IHNlY3VyaXR5IG9yIHBlcmZvcm1hbmNlIHJlbGF0ZWQgc2V0dGluZ3MuIFVuZGVyc3RhbmRpbmcgdGhlc2UgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYW55IGVmZmljaWVudCBrZXJuZWwgY3VzdG9taXphdGlvbiwgZHJpdmVyIHBvcnRpbmcsIGFuZCBkZWJ1Z2dpbmcgZWZmb3J0cyB3aGVuIGRlYWxpbmcgd2l0aCB3aXJlbGVzcyBuZXR3b3JraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTFcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0NDTVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgMTE6XHRcdHNlbGVjdCBDUkMzMlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMVxuICAxNDpcdFx0ICBuZXR3b3JraW5nIHN0YWNrLlxuICAxNTpcdFxuICAxNjpcdGNvbW1lbnQgXCYjMzQ7Q0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxuICAxODpcdFxuICAxOTpcdGlmIE1BQzgwMjExICE9IG5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTUFDODAyMTFfSEFTX1JDXG4gIDIyOlx0XHRib29sXG4gIDIzOlx0XG4gIDI0Olx0Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXG4gIDI1Olx0XHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipBbmFseXppbmcgYG5ldC9tYWM4MDIxMS9jZmcuY2AgYW5kIGBpZWVlODAyMTFfYWRkX2tleWAqKgoKUmlnaHQsIHNvIHRoZXkgd2FudCBtZSB0byBsb29rIGF0IGBuZXQvbWFjODAyMTEvY2ZnLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaWVlZTgwMjExX2FkZF9rZXlgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB3aGVyZSBrZXkgbWFuYWdlbWVudCB3aXRoaW4gbWFjODAyMTEgaXMgaGFuZGxlZCwgbWFrZXMgc2Vuc2UuJiMzNDsgVGhpcyBwcm9iYWJseSBpbnZvbHZlcyB0aGUgY29uZmlndXJhdGlvbiBvZiBzZWN1cml0eSBrZXlzIGZvciB0aGUgd2lyZWxlc3MgbmV0d29yayBpbnRlcmZhY2UuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgY2ZnLmNgIGlzIGxpa2VseSB3aGVyZSBhIGxvdCBvZiB0aGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gaGFwcGVucywgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBob3cga2V5cyBhcmUgc2V0IGFuZCBhZGRlZC4gSSBiZXQgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIG1heWJlIGRpcmVjdGx5IHVzaW5nIGEgaGFyZHdhcmUgYWJzdHJhY3Rpb24gb3IgdmlhIGEgbG93ZXItbGV2ZWwgZHJpdmVyIGNhbGxiYWNrLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgdGhhdC4gSSBleHBlY3QgdGhlcmUgaXMgc29tZSBrZXkgZGVyaXZhdGlvbiBvciBnZW5lcmF0aW9uIGhhcHBlbmluZy4gSSBhbnRpY2lwYXRlIGhhbmRsaW5nIG9mIHZhcmlvdXMgc2VjdXJpdHkgcHJvdG9jb2xzIGxpa2UgV0VQLCBXUEEsIFdQQTIsIFdQQTMgYW5kIGV2ZW4gbWF5YmUgb2xkZXIgcHJvdG9jb2xzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCB0aW1pbmcgdnVsbmVyYWJpbGl0aWVzLCBhbmQgYW55IG9idmlvdXMgc2VjdXJpdHkgaXNzdWVzIGFyb3VuZCBrZXkgc3RvcmFnZSBvciBoYW5kbGluZy4gQWxzbywgd2hhdCBraW5kIG9mIGtleSB0eXBlcyBhcmUgc3VwcG9ydGVkPyBXRVAga2V5cz8gVEtJUCBrZXlzPyBBRVMga2V5cz8gRGlmZmVyZW50IGtleSBsZW5ndGhzPyBIb3cgYXJlIHRoZXNlIHRoaW5ncyBoYW5kbGVkLCBhbmQgd2hhdCBhcmUgdGhlIGFzc29jaWF0ZWQgY2hlY2tzPyBBbHJpZ2h0LCBsZXQmIzM5O3Mgb3BlbiB1cCB0aGF0IGZpbGUgYW5kIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjYwOlx0XHRcdGtleS1cdTAwM2Vjb25mLmxpbmtfaWQgPSAtMTtcbiA2NjE6XHRcdH0gZWxzZSB7XG4gNjYyOlx0XHRcdGtleS1cdTAwM2Vjb25mLmxpbmtfaWQgPSBsaW5rLVx1MDAzZWxpbmtfaWQ7XG4gNjYzOlx0XHR9XG4gNjY0Olx0XG4gNjY1Olx0XHRpZiAocGFyYW1zLVx1MDAzZW1vZGUgPT0gTkw4MDIxMV9LRVlfTk9fVFgpXG4gNjY2Olx0XHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYO1xuIDY2NzpcdFxuIDY2ODpcdFx0aWYgKG1hY19hZGRyKSB7XG4gNjY5Olx0XHRcdGJvb2wgZGVmZXJfaHdfdXBsb2FkO1xuIDY3MDpcdFxuIDY3MTpcdFx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7XG4gNjcyOlx0XHRcdGRlZmVyX2h3X3VwbG9hZCA9XG4gNjczOlx0XHRcdFx0c3RhIFx1MDAyNlx1MDAyNiBwYWlyd2lzZSBcdTAwMjZcdTAwMjYgIXN0YS1cdTAwM2VzdGEuZXBwX3BlZXIgXHUwMDI2XHUwMDI2XG4gNjc0Olx0XHRcdFx0IXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykgXHUwMDI2XHUwMDI2XG4gNjc1Olx0XHRcdFx0KHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8XG4gNjc2Olx0XHRcdFx0IHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIFx1MDAyNlx1MDAyNlxuIDY3NzpcdFx0XHRcdCFpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2bG9jYWwtXHUwMDNlaHcsIFNXX0NSWVBUT19DT05UUk9MKTtcbiA2Nzg6XHRcdFx0LypcbiA2Nzk6XHRcdFx0ICogVGhlIEFTU09DIHRlc3QgbWFrZXMgc3VyZSB0aGUgZHJpdmVyIGlzIHJlYWR5IHRvXG4gNjgwOlx0XHRcdCAqIHJlY2VpdmUgdGhlIGtleS4gV2hlbiB3cGFfc3VwcGxpY2FudCBoYXMgcm9hbWVkXG4gNjgxOlx0XHRcdCAqIHVzaW5nIEZULCBpdCBhdHRlbXB0cyB0byBzZXQgdGhlIGtleSBiZWZvcmVcbiA2ODI6XHRcdFx0ICogYXNzb2NpYXRpb24gaGFzIGNvbXBsZXRlZCwgdGhpcyByZWplY3RzIHRoYXQgYXR0ZW1wdFxuIDY4MzpcdFx0XHQgKiBzbyBpdCB3aWxsIHNldCB0aGUga2V5IGFnYWluIGFmdGVyIGFzc29jaWF0aW9uLlxuIDY4NDpcdFx0XHQgKlxuIDY4NTpcdFx0XHQgKiBXaXRoIChyZSlhc3NvY2lhdGlvbiBmcmFtZSBlbmNyeXB0aW9uIGVuYWJsZWQsIGNmZzgwMjExXG4gNjg2Olx0XHRcdCAqIG1heSBkZWxpdmVyIGtleXMgdG8gbWFjODAyMTEgYmVmb3JlIHRoZSBzdGF0aW9uIGhhc1xuIDY4NzpcdFx0XHQgKiBhc3NvY2lhdGVkLiBJbiB0aGF0IGNhc2UsIGFjY2VwdCB0aGUga2V5IGlmIHRoZSBzdGF0aW9uXG4gNjg4Olx0XHRcdCAqIGlzIGFuIEVuaGFuY2VkIFByaXZhY3kgUHJvdGVjdGlvbiAoRVBQKSBwZWVyLlxuIDY4OTpcdFx0XHQgKiBJZiAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50LFxuIDY5MDpcdFx0XHQgKiBjZmc4MDIxMSB3aWxsIG5vdCBhbGxvdyBrZXkgaW5zdGFsbGF0aW9uIGluIG5vbuKAkUFQIFNUQSBtb2RlLlxuIDY5MTpcdFx0XHQgKlxuIDY5MjpcdFx0XHQgKiBBUC1zaWRlIEZUIG1heSBhbHNvIGluc3RhbGwgYSBwYWlyd2lzZSBrZXkgYmVmb3JlIHRoZVxuIDY5MzpcdFx0XHQgKiBzdGF0aW9uIGlzIGFzc29jaWF0ZWQuIElmIGF1dG9tYXRpYyBzb2Z0d2FyZSBmYWxsYmFjayBpc1xuIDY5NDpcdFx0XHQgKiBhbGxvd2VkLCBrZWVwIGl0IGluIG1hYzgwMjExIGFuZCB1cGxvYWQgaXQgYWZ0ZXIgdGhlIHN0YXRpb25cbiA2OTU6XHRcdFx0ICogcmVhY2hlcyBBU1NPQy4gRHJpdmVycyB3aXRoIFNXX0NSWVBUT19DT05UUk9MIGNhbm5vdCB1c2UgdGhpc1xuIDY5NjpcdFx0XHQgKiBwYXRoIHNpbmNlIG9ubHkgdGhlaXIgc2V0X2tleSByZXR1cm4gdmFsdWUgY2FuIHBlcm1pdCBzb2Z0d2FyZVxuIDY5NzpcdFx0XHQgKiBjcnlwdG8uXG4gNjk4Olx0XHRcdCAqL1xuIDY5OTpcdFx0XHRpZiAoIXN0YSB8fCAoIXN0YS1cdTAwM2VzdGEuZXBwX3BlZXIgXHUwMDI2XHUwMDI2XG4gNzAwOlx0XHRcdFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSBcdTAwMjZcdTAwMjZcbiA3MDE6XHRcdFx0XHQgICAgICFkZWZlcl9od191cGxvYWQpKSB7XG4gNzAyOlx0XHRcdFx0aWVlZTgwMjExX2tleV9mcmVlX3VudXNlZChrZXkpO1xuIDcwMzpcdFx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDcwNDpcdFx0XHR9XG4gNzA1Olx0XG4gNzA2Olx0XHRcdGlmIChkZWZlcl9od191cGxvYWQpXG4gNzA3Olx0XHRcdFx0a2V5LVx1MDAzZWZsYWdzIHw9IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcbiA3MDg6XHRcdH1cbiA3MDk6XHRcbiA3MTA6XHRcdHN3aXRjaCAoc2RhdGEtXHUwMDNldmlmLnR5cGUpIHtcbiA3MTE6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcbiA3MTI6XHRcdFx0aWYgKHNkYXRhLVx1MDAzZXUubWdkLm1mcCAhPSBJRUVFODAyMTFfTUZQX0RJU0FCTEVEKVxuIDcxMzpcdFx0XHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19SWF9NR01UO1xuIDcxNDpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjA5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgaW5zdHJ1Y3Rpb25zLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIE1BQzgwMjExIEtleSBNYW5hZ2VtZW50IENvZGUqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYG5ldC9tYWM4MDIxMS9rZXkuY2AgZmlsZSBub3cuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGtleSB1cGxvYWQgcHJvY2VzcywgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi4gSSB3YW50IHRvIHplcm8gaW4gb24gaG93IGRlZmVycmVkIFNUQSBrZXlzIGFyZSBoYW5kbGVkLCBhbmQgaG93IHdlIGVuYWJsZSB0aGF0IGhhcmR3YXJlIGFjY2VsZXJhdGlvbi4gVGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bGwgYmUgbG9va2luZyBhdCB3aWxsIGJlIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCBhbmQgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYC4gSSBhbnRpY2lwYXRlIHRoZXJlIGFyZSBhIGxvdCBvZiBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgaW4gdGhlcmUsIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IHdlIG1hbmFnZSBrZXkgY29udGV4dHMsIGhvdyB0aGV5JiMzOTtyZSBwdXNoZWQgdG8gdGhlIGhhcmR3YXJlLCBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIHRoYXQuIEkgYmV0IHRoZXJlIHdpbGwgYmUgc29tZSBjcnVjaWFsIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMgdGhlcmUgdG9vLCByZWxhdGVkIHRvIHRoZSBjb25jdXJyZW50IGFjY2VzcyB0byBrZXkgaW5mb3JtYXRpb24gZnJvbSB0aGUgaGFyZHdhcmUgYW5kIHRoZSBzb2Z0d2FyZS4gSXTigJlzIGFsc28gbGlrZWx5IHRoYXQgdGhlIGRlZmVycmFsIG1lY2hhbmlzbSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGF2YWlsYWJsZSBoYXJkd2FyZSByZXNvdXJjZXMg4oCTIHBlcmhhcHMgdGhlcmXigJlzIGEgbGltaXQgdG8gaG93IG1hbnkga2V5cyBjYW4gYmUgbG9hZGVkIGF0IG9uY2UsIG9yIG1heWJlIHRoZXJlIGFyZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgdmFyaW91cyBrZXlzLiBUaGlzIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2tleS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdFx0XHRcdFx0IElFRUU4MDIxMV9LRVlfRkxBR19SRVNFUlZFX1RBSUxST09NKSkpXG4gMTQxOlx0XHRcdFx0aW5jcmVtZW50X3RhaWxyb29tX25lZWRfY291bnQoc2RhdGEpO1xuIDE0MjpcdFxuIDE0MzpcdFx0XHRrZXktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+S0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7XG4gMTQ0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE0NTpcdFx0fVxuIDE0NjpcdFxuIDE0NzpcdFx0aWYgKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSB7XG4gMTQ4Olx0XHRcdC8qXG4gMTQ5Olx0XHRcdCAqIEtleXMgYXJlIG9ubHkgZGVmZXJyZWQgaWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXG4gMTUwOlx0XHRcdCAqIGFsbG93ZWQuIExlYXZlIHJldCBhcyAtRU9QTk9UU1VQUCBzbyB0aGUgbm9ybWFsIGZhbGxiYWNrIHBhdGhcbiAxNTE6XHRcdFx0ICogaXMgdXNlZCB3aXRob3V0IHByZXRlbmRpbmcgdGhlIGRyaXZlciByZXR1cm5lZCAxLlxuIDE1MjpcdFx0XHQgKi9cbiAxNTM6XHRcdFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XG4gMTU0Olx0XHR9XG4gMTU1Olx0XG4gMTU2Olx0XHRpZiAoIWtleS1cdTAwM2Vsb2NhbC1cdTAwM2VvcHMtXHUwMDNlc2V0X2tleSlcbiAxNTc6XHRcdFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XG4gMTU4Olx0XG4gMTU5Olx0XHRzdGEgPSBrZXktXHUwMDNlc3RhO1xuIDE2MDpcdFxuIDE2MTpcdFx0LypcbiAxNjI6XHRcdCAqIEFsbG93IGluc3RhbGxhdGlvbiBvZiBhIHBlci1TVEEgR1RLIGlmIHBlci1TVEEgR1RLIGlzIHN1cHBvcnRlZFxuIDE2MzpcdFx0ICogYnkgdGhlIGRyaXZlciBvciB0aGUgaW50ZXJmYWNlIGlzIGEgTkFOIERhdGEgaW50ZXJmYWNlIChhc1xuIDE2NDpcdFx0ICogcGVyLXN0YXRpb24gR1RLcyBhcmUgcmVxdWlyZWQgdG8gYmUgc3VwcG9ydGVkIGlmIHNlY3VyZSBOQU4gaXNcbiAxNjU6XHRcdCAqIHN1cHBvcnRlZCkuXG4gMTY2Olx0XHQgKi9cbiAxNjc6XHRcdGlmIChzdGEgXHUwMDI2XHUwMDI2ICEoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkgXHUwMDI2XHUwMDI2XG4gMTY4Olx0XHQgICAgIShpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2a2V5LVx1MDAzZWxvY2FsLVx1MDAzZWh3LCBTVVBQT1JUU19QRVJfU1RBX0dUSykgfHxcbiAxNjk6XHRcdCAgICAgIHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSlcbiAxNzA6XHRcdFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XG4gMTcxOlx0XG4gMTcyOlx0XHRpZiAoc3RhIFx1MDAyNlx1MDAyNiAhc3RhLVx1MDAzZXVwbG9hZGVkKVxuIDE3MzpcdFx0XHRnb3RvIG91dF91bnN1cHBvcnRlZDtcbiAxNzQ6XHRcbiAxNzU6XHRcdGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSB7XG4gMTc2Olx0XHRcdC8qXG4gMTc3Olx0XHRcdCAqIFRoZSBkcml2ZXIgZG9lc24mIzM5O3Qga25vdyBhbnl0aGluZyBhYm91dCBWTEFOIGludGVyZmFjZXMuXG4gMTc4Olx0XHRcdCAqIEhlbmNlLCBkb24mIzM5O3Qgc2VuZCBHVEtzIGZvciBWTEFOIGludGVyZmFjZXMgdG8gdGhlIGRyaXZlci5cbiAxNzk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjIzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBEZWZlcnJlZCBTVEEgS2V5IFVwbG9hZCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyBkZWZlcnJlZCBTVEEga2V5cyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgbmV0L21hYzgwMjExL2tleS5jYCBmaWxlLiBUaGUgZnVuY3Rpb24gSSYjMzk7bSB0YXJnZXRpbmcgaXMgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXNgLiBUaGlzIGhpbnRzIGF0IGEgcG90ZW50aWFsIGFyZWEgd2hlcmUga2V5IG1hbmFnZW1lbnQgbWlnaHQgYmUgY2F1c2luZyBzb21lIGhpY2N1cHMsIHBlcmhhcHMgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBvciByZWtleWluZyBzY2VuYXJpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGVzZSBrZXlzIGFyZSBxdWV1ZWQsIGhhbmRsZWQsIGFuZCB1bHRpbWF0ZWx5IHVwbG9hZGVkIHRvIHRoZSBoYXJkd2FyZS4gQW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBhcmUgaW1tZWRpYXRlbHkgb24gbXkgcmFkYXIuIEkgd2FudCB0byBzZWUgaWYgdGhlIGltcGxlbWVudGF0aW9uIGFsaWducyB3aXRoIG15IGV4cGVjdGF0aW9ucyByZWdhcmRpbmcga2V5IGRlcml2YXRpb24sIGhhcmR3YXJlIGxpbWl0YXRpb25zLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEva2V5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMDA6XHRcdGlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpIHtcbjEwMDE6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFx1MDAyNnNkYXRhLVx1MDAzZWtleV9saXN0LCBsaXN0KSB7XG4xMDAyOlx0XHRcdFx0aWYgKCEoa2V5LVx1MDAzZWZsYWdzIFx1MDAyNiBLRVlfRkxBR19UQUlOVEVEKSlcbjEwMDM6XHRcdFx0XHRcdGluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTtcbjEwMDQ6XHRcdFx0XHRpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xuMTAwNTpcdFx0XHR9XG4xMDA2Olx0XHR9XG4xMDA3Olx0fVxuMTAwODpcdFxuMTAwOTpcdHZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbjEwMTA6XHR7XG4xMDExOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS1cdTAwM2Vsb2NhbDtcbjEwMTI6XHRcdHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7XG4xMDEzOlx0XHRpbnQgaSwgcmV0O1xuMTAxNDpcdFxuMTAxNTpcdFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkobG9jYWwtXHUwMDNlaHcud2lwaHkpO1xuMTAxNjpcdFxuMTAxNzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzdGEtXHUwMDNlcHRrKTsgaSYjNDM7JiM0MzspIHtcbjEwMTg6XHRcdFx0a2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXHUwMDNlaHcud2lwaHksIHN0YS1cdTAwM2VwdGtbaV0pO1xuMTAxOTpcdFx0XHRpZiAoIWtleSB8fCAhKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSlcbjEwMjA6XHRcdFx0XHRjb250aW51ZTtcbjEwMjE6XHRcbjEwMjI6XHRcdFx0a2V5LVx1MDAzZWZsYWdzIFx1MDAyNj0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcbjEwMjM6XHRcdFx0cmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTtcbjEwMjQ6XHRcdFx0aWYgKHJldClcbjEwMjU6XHRcdFx0XHRzZGF0YV9lcnIoa2V5LVx1MDAzZXNkYXRhLFxuMTAyNjpcdFx0XHRcdFx0ICBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGRlZmVycmVkIGtleSAoJWQsICVwTSk6ICVkXFxuXCYjMzQ7LFxuMTAyNzpcdFx0XHRcdFx0ICBrZXktXHUwMDNlY29uZi5rZXlpZHgsIHN0YS1cdTAwM2VzdGEuYWRkciwgcmV0KTtcbjEwMjg6XHRcdH1cbjEwMjk6XHR9XG4xMDMwOlx0XG4xMDMxOlx0c3RhdGljIHZvaWRcbjEwMzI6XHRpZWVlODAyMTFfa2V5X2l0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4xMDMzOlx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4xMDM0Olx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXG4xMDM1Olx0XHRcdCAgIHZvaWQgKCppdGVyKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbjEwMzY6XHRcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4xMDM3Olx0XHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuMTAzODpcdFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LFxuMTAzOTpcdFx0XHRcdFx0dm9pZCAqZGF0YSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjIyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc3RhX2luZm8uY2AqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRvIHRhY2tsZSB0aGlzLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbmV0L21hYzgwMjExL3N0YV9pbmZvLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHN0YXRpb24gaW5mb3JtYXRpb24gbWFuYWdlbWVudCBmb3IgdGhlIG1hYzgwMjExIHN0YWNrIHJlc2lkZXMsIGFuZCBpdCYjMzk7cyBhIGNyaXRpY2FsIGFyZWEgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHN0YXRpb25zIGFyZSBoYW5kbGVkLiBJIGFudGljaXBhdGUgZmluZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdGF0aW9uIGFzc29jaWF0aW9uLCBhdXRoZW50aWNhdGlvbiwgYW5kIGdlbmVyYWwgc3RhdGUgbWFuYWdlbWVudCB0aGVyZS4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgY29ubmVjdGlvbiBkZXRhaWxzIGFuZCBhc3NvY2lhdGVkIGluZm9ybWF0aW9uIGlzIGtlcHQgaGVyZS4gTXkgZXhwZXJ0IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIHNwZWNpZmljIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9zdGFfaW5mby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDYwOlx0XHRcdFx0Y2xlYXJfYml0KFdMQU5fU1RBX0FTU09DLCBcdTAwMjZzdGEtXHUwMDNlX2ZsYWdzKTtcbjE0NjE6XHRcdFx0XHRpZiAocmVjYWxjKSB7XG4xNDYyOlx0XHRcdFx0XHRpZWVlODAyMTFfcmVjYWxjX21pbl9jaGFuZGVmKHN0YS1cdTAwM2VzZGF0YSwgLTEpO1xuMTQ2MzpcdFx0XHRcdFx0aWYgKCFzdGEtXHUwMDNlc3RhLnN1cHBvcnRfcDJwX3BzKVxuMTQ2NDpcdFx0XHRcdFx0XHRpZWVlODAyMTFfcmVjYWxjX3AycF9nb19wc19hbGxvd2VkKHN0YS1cdTAwM2VzZGF0YSk7XG4xNDY1Olx0XHRcdFx0fVxuMTQ2NjpcdFx0XHR9XG4xNDY3Olx0XHRcdGJyZWFrO1xuMTQ2ODpcdFx0Y2FzZSBJRUVFODAyMTFfU1RBX0FTU09DOlxuMTQ2OTpcdFx0XHRpZiAoc3RhLVx1MDAzZXN0YV9zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX0FVVEgpIHtcbjE0NzA6XHRcdFx0XHRzZXRfYml0KFdMQU5fU1RBX0FTU09DLCBcdTAwMjZzdGEtXHUwMDNlX2ZsYWdzKTtcbjE0NzE6XHRcdFx0XHRpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0YSk7XG4xNDcyOlx0XHRcdFx0c3RhLVx1MDAzZWFzc29jX2F0ID0ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7XG4xNDczOlx0XHRcdFx0aWYgKHJlY2FsYykge1xuMTQ3NDpcdFx0XHRcdFx0aWVlZTgwMjExX3JlY2FsY19taW5fY2hhbmRlZihzdGEtXHUwMDNlc2RhdGEsIC0xKTtcbjE0NzU6XHRcdFx0XHRcdGlmICghc3RhLVx1MDAzZXN0YS5zdXBwb3J0X3AycF9wcylcbjE0NzY6XHRcdFx0XHRcdFx0aWVlZTgwMjExX3JlY2FsY19wMnBfZ29fcHNfYWxsb3dlZChzdGEtXHUwMDNlc2RhdGEpO1xuMTQ3NzpcdFx0XHRcdH1cbjE0Nzg6XHRcdFx0fSBlbHNlIGlmIChzdGEtXHUwMDNlc3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSE9SSVpFRCkge1xuMTQ3OTpcdFx0XHRcdGllZWU4MDIxMV92aWZfZGVjX251bV9tY2FzdChzdGEtXHUwMDNlc2RhdGEpO1xuMTQ4MDpcdFx0XHRcdGNsZWFyX2JpdChXTEFOX1NUQV9BVVRIT1JJWkVELCBcdTAwMjZzdGEtXHUwMDNlX2ZsYWdzKTtcbjE0ODE6XHRcdFx0XHRpZiAoc3RhLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKVxuMTQ4MjpcdFx0XHRcdFx0aWVlZTgwMjExX25hbl91cGRhdGVfbmRpX2NhcnJpZXIoc3RhLVx1MDAzZXNkYXRhKTtcbjE0ODM6XHRcbjE0ODQ6XHRcdFx0XHQvKlxuMTQ4NTpcdFx0XHRcdCAqIElmIHdlIGhhdmUgZW5jcnlwdGlvbiBvZmZsb2FkLCBmbHVzaCAoc3RhdGlvbikgcXVldWVzXG4xNDg2Olx0XHRcdFx0ICogKGFmdGVyIGVuc3VyaW5nIGNvbmN1cnJlbnQgVFggY29tcGxldGVkKSBzbyB3ZSB3b24mIzM5O3RcbjE0ODc6XHRcdFx0XHQgKiB0cmFuc21pdCBhbnl0aGluZyBsYXRlciB1bmVuY3J5cHRlZCBpZi93aGVuIGtleXMgYXJlXG4xNDg4Olx0XHRcdFx0ICogYWxzbyByZW1vdmVkLCB3aGljaCBtaWdodCBvdGhlcndpc2UgaGFwcGVuIGRlcGVuZGluZ1xuMTQ4OTpcdFx0XHRcdCAqIG9uIGhvdyB0aGUgaGFyZHdhcmUgb2ZmbG9hZCB3b3Jrcy5cbjE0OTA6XHRcdFx0XHQgKi9cbjE0OTE6XHRcdFx0XHRpZiAobG9jYWwtXHUwMDNlb3BzLVx1MDAzZXNldF9rZXkpIHtcbjE0OTI6XHRcdFx0XHRcdHN5bmNocm9uaXplX25ldCgpO1xuMTQ5MzpcdFx0XHRcdFx0aWYgKGxvY2FsLVx1MDAzZW9wcy1cdTAwM2VmbHVzaF9zdGEpXG4xNDk0Olx0XHRcdFx0XHRcdGRydl9mbHVzaF9zdGEobG9jYWwsIHN0YS1cdTAwM2VzZGF0YSwgc3RhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgbWFjODAyMTEgS2V5IEhhbmRsaW5nIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AgaW5jbHVkZXMgYSBgbG9ja2RlcF9hc3NlcnRfd2lwaHlgLCB3aGljaCBpcyBnb29kIHRvIHNlZSBmcm9tIGEgbG9ja2luZyBwZXJzcGVjdGl2ZS4gVGhpcyBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgYHN0YS0mZ3Q7cHRrYCBhcnJheSwgaWRlbnRpZmllcyBkZWZlcnJlZCBoYXJkd2FyZSB1cGxvYWQga2V5cyBiYXNlZCBvbiB0aGUgYEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRGAgZmxhZywgY2xlYXJzIHRoYXQgZmxhZywgYW5kIHRoZW4gdHJpZ2dlcnMgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYC4gSSByZW1lbWJlciBmcm9tIGxvb2tpbmcgYXQgYGNmZy5jYCwgdGhhdCBgaWVlZTgwMjExX2FkZF9rZXlgIHN0cmF0ZWdpY2FsbHkgc2V0cyB0aGlzIGBkZWZlcl9od191cGxvYWRgIGZsYWcsIGZvciBBUC9BUF9WTEFOIGNvbmZpZ3VyYXRpb25zIHdoZW4gYSBzdGF0aW9uIGlzbiYjMzk7dCB5ZXQgYXNzb2NpYXRlZCBidXQgd2hlbiBgU1dfQ1JZUFRPX0NPTlRST0xgIGlzbiYjMzk7dCBlbmFibGVkLiBUaGlzIGZsYWcgaXMgYWJzb2x1dGVseSBjcml0aWNhbCwgYmVjYXVzZSBpbiBga2V5LmNgLCBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgIHNraXBzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpZiB0aGF0IGZsYWcgaXMgc2V0LCBlc3NlbnRpYWxseSBrZWVwaW5nIHRoaW5ncyBpbiBzb2Z0d2FyZSBjcnlwdG8gdW50aWwgdGhlIHN0YXRpb24gcmVhY2hlcyB0aGUgQVNTT0Mgc3RhdGUuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGluIGEgZnV6emluZyBjb250ZXh0IGxpa2Ugc3l6a2FsbGVyPyBGb3J0dW5hdGVseSwgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzISBTeXprYWxsZXIgaXMga25vd24gdG8gaGl0IG1hYzgwMjExIGFuZCBubDgwMjExIHdpdGggZXh0cmVtZSBwcmVqdWRpY2UsIGxldmVyYWdpbmcgYG5sODAyMTFgIG5ldGxpbmsgY29tbWFuZHMgYW5kIG1hYzgwMjExX2h3c2ltLiBDb21tYW5kcyBsaWtlIGBOTDgwMjExX0NNRF9ORVdfS0VZYCBhbmQgYE5MODAyMTFfQ01EX1NFVF9TVEFUSU9OYCBkaXJlY3RseSBpbnZva2UgZnVuY3Rpb25zIGxpa2UgYGllZWU4MDIxMV9hZGRfa2V5YCwgYF9zdGFfaW5mb19tb3ZlX3N0YXRlYCwgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXNgLCBhbmQgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYC4KCkdpdmVuIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBmb2xsb3dpbmc6CgoqICAgKipXb3J0aEZ1enppbmc6KiogQWJzb2x1dGVseSEgVGhlIGNvZGUgaXMgY2xlYXJseSByZWFjaGFibGUuCiogICAqKlJlYWNoYWJsZSBDb2RlOioqIEVudGlyZWx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgLyBtYWM4MDIxMSBpbnRlcmZhY2UuCiogICAqKkNoYW5nZSBJbXBhY3Q6KiogVGhpcyBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBhcm91bmQga2V5IGRlZmVycmFsLCB3aGljaCBpbmNsdWRlcyB0aGUgYGxvY2tkZXBfYXNzZXJ0X3dpcGh5YCBhc3NlcnRpb24sIGFuZCBsaWtlbHkgbW9kaWZpZXMgc3RhdGUgbWFjaGluZSB0cmFuc2l0aW9ucywgcGFydGljdWxhcmx5IGluIEFQIG1vZGUuCgpOb3csIGxldCBtZSBleGFtaW5lIHRoZSBjb3JlIHN5bWJvbHMgdG91Y2hlZCBieSB0aGVzZSBjaGFuZ2VzLiBJJiMzOTt2ZSBub3RlZCB0aGF0IGBpZWVlODAyMTFfYWRkX2tleWAsIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAsIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCwgYW5kIGBfc3RhX2luZm9fbW92ZV9zdGF0ZWAgYXJlIHRoZSBtYWluIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBvciBuZXdseSBpbnRyb2R1Y2VkLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciBgX3N0YV9pbmZvX21vdmVfc3RhdGVgIChvciwgYHN0YV9pbmZvX21vdmVfc3RhdGVgKSBpcyBzdGF0aWMsIGV4cG9ydGVkLCBvciBjYWxsZWQgZWxzZXdoZXJlIHRvIGZ1bGx5IGdyYXNwIHRoZSBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X3N0YV9pbmZvX21vdmVfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MTMxMD1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBfX3N0YV9pbmZvX2Rlc3Ryb3lfcGFydDEoc3RydWN0IHN0YV9pbmZvICpzdGEpXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTM5NC1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjEzOTU6c3RhdGljIGludCBfc3RhX2luZm9fbW92ZV9zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTEzOTYtXHRcdFx0XHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTE1Mzg9aW50IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTU0MC17XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTQxOlx0cmV0dXJuIF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgbmV3X3N0YXRlLCB0cnVlKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1NDItfVxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTE1NDQ9c3RhdGljIHZvaWQgX19zdGFfaW5mb19kZXN0cm95X3BhcnQyKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBib29sIHJlY2FsYylcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTczLVx0aWYgKHN0YS1cdTAwM2VzdGFfc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9BVVRIT1JJWkVEKSB7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTc0Olx0XHRyZXQgPSBfc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVNTT0MsIHJlY2FsYyk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTc1LVx0XHRXQVJOX09OX09OQ0UocmV0KTtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTg5LVx0d2hpbGUgKHN0YS1cdTAwM2VzdGFfc3RhdGUgXHUwMDNlIElFRUU4MDIxMV9TVEFfTk9ORSkge1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MTU5MDpcdFx0cmV0ID0gX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBzdGEtXHUwMDNlc3RhX3N0YXRlIC0gMSwgcmVjYWxjKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1OTEtXHRcdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNjcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBpZWVlODAyMTFfYWRkX2tleWAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMga2V5IGFkZGl0aW9uIGZ1bmN0aW9uIHdvcmtzLCBzcGVjaWZpY2FsbHkgYGllZWU4MDIxMV9hZGRfa2V5YC4gUmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzIHRocm91Z2guIEJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdGhhdCB0aGlzIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgbWFjODAyMTFgIGZyYW1ld29yay4gSSByZWNhbGwgc2VlaW5nIHNvbWV0aGluZyBhYm91dCB0aGlzIGluIGBuZXQvbWFjODAyMTEvY2ZnLmNgLiBJJiMzOTtsbCB3YW50IHRvIHZlcmlmeSB0aGF0IGBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KC4uLilgIChvciBhIHNpbWlsYXIgc2lnbmF0dXJlKSBpcyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGJvdW5kIHRvIHRoZSBgbWFjODAyMTFfY29uZmlnX29wcy5hZGRfa2V5YCBmdW5jdGlvbiBwb2ludGVyLCBvciBzb21ldGhpbmcgZXF1aXZhbGVudC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgYmluZGluZyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV9hZGRfa2V5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz01ODU9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X3R4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy02MTItXG5uZXQvbWFjODAyMTEvY2ZnLmM6NjEzOnN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbm5ldC9tYWM4MDIxMS9jZmcuYy02MTQtXHRcdFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk5Mj1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU5OTctXHQuc3RvcF9wMnBfZGV2aWNlID0gaWVlZTgwMjExX3N0b3BfcDJwX2RldmljZSxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1OTk4Olx0LmFkZF9rZXkgPSBpZWVlODAyMTFfYWRkX2tleSxcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTk5LVx0LmRlbF9rZXkgPSBpZWVlODAyMTFfZGVsX2tleSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMjAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBIYXJkd2FyZSBBY2NlbGVyYXRpb24gZm9yIDgwMi4xMSBLZXkgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIDgwMi4xMSBrZXkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG9yY2hlc3RyYXRpbmcgdGhlIG9mZmxvYWQgb2YgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gc2VjdXJpdHkga2V5cyB0byBoYXJkd2FyZSBhY2NlbGVyYXRvcnMsIHJpZ2h0PyBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIGludGVudC4KCkkmIzM5O2QgbmVlZCB0byBxdWlja2x5IGNvbnNpZGVyOgoKKiAgICoqVW5kZXJseWluZyBBc3N1bXB0aW9uczoqKiBXaGF0IGFyZSB0aGUgcHJlcmVxdWlzaXRlcz8gSXMgaXQgY2hlY2tpbmcgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgaGFyZHdhcmUgY3J5cHRvIGVuZ2luZXM/IERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIGxpa2Ugc3VwcG9ydCBmb3IgQUVTLUNDTSwgVEtJUCwgb3Igb3RoZXIga2V5IGFsZ29yaXRobXM/IEkgbmVlZCB0byBsb29rIGZvciBjb25kaXRpb25hbCBjaGVja3MgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgaW50byB0aGlzIGZ1bmN0aW9uPyBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgdGhhdCBjb250YWlucyBrZXkgbWF0ZXJpYWwsIHRoZSBNQUMgYWRkcmVzcyBjb250ZXh0LCBhbmQgY29uZmlndXJhdGlvbiBmbGFncy4gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93IGhlcmUgd2lsbCBiZSBjcml0aWNhbCB0byB0aGUgb3ZlcmFsbCBvcGVyYXRpb24uIEhvdyBpcyB0aGUga2V5IGRhdGEgb3JnYW5pemVkPyBJcyB0aGVyZSBhIHByb3ByaWV0YXJ5IGZvcm1hdD8gRG9lcyBpdCBuZWVkIHRvIGJlIHByZS1wcm9jZXNzZWQgYmVmb3JlIHNlbmRpbmcgaXQgb2ZmIHRvIHRoZSBIVz8KKiAgICoqSGFyZHdhcmUgQWJzdHJhY3Rpb246KiogV2hhdCBraW5kIG9mIGFic3RyYWN0aW9uIGlzIHVzZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIGhhcmR3YXJlPyBJcyBpdCBhIGRpcmVjdCBtZW1vcnkgYWNjZXNzIChETUEpIHNldHVwIG9yIHNvbWUga2luZCBvZiBJL08gY29udHJvbCAoaW9jdGwpIGNhbGw/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHJlZ2lzdGVyIGRlZmluaXRpb25zIG9yIGRldmljZSBkcml2ZXIgY2FsbHMuIERvZXMgaXQgc3VwcG9ydCBzY2F0dGVyLWdhdGhlciBETUE/IFdoYXQgYXJlIHRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkPwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmYWlscz8gRG9lcyB0aGUgY29kZSBncmFjZWZ1bGx5IGZhbGwgYmFjayB0byBzb2Z0d2FyZS1iYXNlZCBjcnlwdG9ncmFwaHk/IEkgbmVlZCB0byBhbmFseXplIHRob3NlIGZhaWx1cmUgcGF0aHMgdG8gYXNzZXNzIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KKiAgICoqQ29uY3VycmVuY3kvVGhyZWFkaW5nOioqIEhvdyBpcyBpdCBoYW5kbGluZyB0aHJlYWQtc2FmZXR5IGluIHRoaXMgY29udGV4dD8gSXMgdGhlcmUgYSBsb2NrIGFyb3VuZCB0aGUgaGFyZHdhcmUgYWNjZXNzIG9yIGlzIHRoZSBhcmNoaXRlY3R1cmUgaW5oZXJlbnRseSBkZXNpZ25lZCBmb3IgY29uY3VycmVudCBrZXkgc2V0dXAgYW5kIG9wZXJhdGlvbj8gQ29uc2lkZXJpbmcgdGhlIHJlYWwtdGltZSBuYXR1cmUgb2Ygd2lyZWxlc3MgdHJhZmZpYywgY29uY3VycmVuY3kgYW5kIGxvdyBsYXRlbmN5IHdpbGwgYmUgY3J1Y2lhbCBhc3BlY3RzIG9mIHRoZSBkZXNpZ24uCiogICAqKlNlY3VyaXR5IEltcGxpY2F0aW9uczoqKiBXaGF0IGFyZSB0aGUgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgb2Ygb2ZmbG9hZGluZyBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgdG8gaGFyZHdhcmU/IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGtleSBtYXRlcmlhbCBpcyBoYW5kbGVkIHNhZmVseSBhbmQgbm90IHZ1bG5lcmFibGUgdG8gc2lkZS1jaGFubmVsIGF0dGFja3Mgb3IgbWVtb3J5IGxlYWtzLgoKQmFzaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIGEgZ29vZCBpbXBsZW1lbnRhdGlvbiwgb3IgaWYgdGhlcmUgaXMgdGhlIG5lZWQgdG8gaW1wcm92ZSB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEva2V5LmM9MTA5PXN0YXRpYyB2b2lkIGRlY3JlYXNlX3RhaWxyb29tX25lZWRfY291bnQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2tleS5jLTExOS1cbm5ldC9tYWM4MDIxMS9rZXkuYzoxMjA6c3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KVxubmV0L21hYzgwMjExL2tleS5jLTEyMS17XG4tLVxubmV0L21hYzgwMjExL2tleS5jPTQ0OT1zdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEva2V5LmMtNTE5LVx0XHRcdGlmIChuZXcpXG5uZXQvbWFjODAyMTEva2V5LmM6NTIwOlx0XHRcdFx0cmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwobmV3KTtcbm5ldC9tYWM4MDIxMS9rZXkuYy01MjEtXHRcdH1cbi0tXG5uZXQvbWFjODAyMTEva2V5LmMtNTIzLVx0XHRpZiAoIW5ldy1cdTAwM2Vsb2NhbC1cdTAwM2V3b3dsYW4pIHtcbm5ldC9tYWM4MDIxMS9rZXkuYzo1MjQ6XHRcdFx0cmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwobmV3KTtcbm5ldC9tYWM4MDIxMS9rZXkuYy01MjUtXHRcdH0gZWxzZSBpZiAobGlua19pZCBcdTAwM2MgMCB8fCAhc2RhdGEtXHUwMDNldmlmLmFjdGl2ZV9saW5rcyB8fFxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYz05ODM9dm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEva2V5LmMtMTAwMy1cdFx0XHRcdGluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTtcbm5ldC9tYWM4MDIxMS9rZXkuYzoxMDA0Olx0XHRcdGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7XG5uZXQvbWFjODAyMTEva2V5LmMtMTAwNS1cdFx0fVxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYz0xMDA5PXZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbi0tXG5uZXQvbWFjODAyMTEva2V5LmMtMTAyMi1cdFx0a2V5LVx1MDAzZWZsYWdzIFx1MDAyNj0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcbm5ldC9tYWM4MDIxMS9rZXkuYzoxMDIzOlx0XHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xubmV0L21hYzgwMjExL2tleS5jLTEwMjQtXHRcdGlmIChyZXQpXG4tLVxubmV0L21hYzgwMjExL2tleS5jPTE1MTc9aW50IGllZWU4MDIxMV9rZXlfc3dpdGNoX2xpbmtzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy0xNTQyLVxubmV0L21hYzgwMjExL2tleS5jOjE1NDM6XHRcdHJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7XG5uZXQvbWFjODAyMTEva2V5LmMtMTU0NC1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MjcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVlcCBEaXZlIGludG8gYHN0YV9pbmZvX21vdmVfc3RhdGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBgc3RhX2luZm9fbW92ZV9zdGF0ZWAgZnVuY3Rpb24gb3IgdmFyaWFibGUg4oCTIHdoYXRldmVyIGl0IGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyZWF0IGl0IGFzIGEgY3JpdGljYWwgcGllY2Ugb2Ygc3RhdGUgbWFuYWdlbWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gbW92ZW1lbnQgd2l0aGluLCB3ZWxsLCB0aGUgYHN0YV9pbmZvYCBjb250ZXh0LiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEnigJltIGd1ZXNzaW5nIGl0JiMzOTtzICpzcGVjaWZpYyogc3RhdGUsIG5vdCB0aGUgb3ZlcmFyY2hpbmcsIGdsb2JhbCBzdGF0ZS4gUHJvYmFibHkgc29tZXRoaW5nIGdyYW51bGFyLCByaWdodD8gQSBmbGFnLCBhbiBlbnVtLCBvciBtYXliZSBldmVuIGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgbW92ZW1lbnQgc3RhdHVzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG9zc2libGUgdmFsdWVzIHJpZ2h0IG9mZiB0aGUgYmF0LiAmIzM0O0lkbGUsJiMzNDsgJiMzNDtNb3ZpbmcsJiMzNDsgJiMzNDtBY2NlbGVyYXRpbmcsJiMzNDsgJiMzNDtEZWNlbGVyYXRpbmcsJiMzNDsgJiMzNDtUdXJuaW5nLCYjMzQ7ICYjMzQ7SnVtcGluZywmIzM0OyAmIzM0O0ZhbGxpbmcmIzM0OyDigJMgSSYjMzk7bSBzcGl0YmFsbGluZyBhIGxvdCBoZXJlLCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29kZSB0byBjb25maXJtIGlmIEkmIzM5O20gZXZlbiBvbiB0aGUgcmlnaHQgdHJhY2suIEkgZXhwZWN0IHRvIHNlZSB0cmFuc2l0aW9uIGxvZ2ljIHJlbGF0ZWQgdG8gdGhpcyBzdGF0ZS4gVGhpcyBjb3VsZCBpbnZvbHZlIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgdGhlIHZhcmlhYmxlLCBjYWxscyB0byBvdGhlciBmdW5jdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhlIHN0YXRlLCBvciBtYXliZSBldmVuIGV2ZW50LWRyaXZlbiBjaGFuZ2VzIGJhc2VkIG9uIGlucHV0IG9yIGVudmlyb25tZW50YWwgY29uZGl0aW9ucy4KClRoZSBjb250ZXh0IG9mIGBzdGFfaW5mb2AgaXMgaW1wb3J0YW50LiBJ4oCZbSBwaWN0dXJpbmcgYSBmYWlybHkgY29tcGxleCBzeXN0ZW0sIHNvbWV0aGluZyB0aGF0IHRyYWNrcyBhbiBlbnRpdHksIG1heWJlIGluIGEgZ2FtZSBlbmdpbmUsIHBoeXNpY3Mgc2ltdWxhdGlvbiwgb3Igc2ltaWxhciBjb250ZXh0LiBUaGUgYHN0YV9pbmZvYCBzdHJ1Y3R1cmUgaXMgcHJvYmFibHkgc3RvcmluZyBwb3NpdGlvbiwgdmVsb2NpdHksIG9yaWVudGF0aW9uLCBhbmQgb3RoZXIgcmVsZXZhbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXJ0aWN1bGFyIG9iamVjdC4gSWYgbW92ZW1lbnQgaXMgY2VudHJhbCB0byB0aGlzIHN5c3RlbSwgYHN0YV9pbmZvX21vdmVfc3RhdGVgIHdpbGwgdGVsbCB1cyBhIGxvdCBhYm91dCB0aGUgb2JqZWN04oCZcyBhY3Rpdml0eS4KClNvLCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgZGlzc2VjdCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGxvb2sgYXQgdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YV9pbmZvX21vdmVfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2NmZy5jPTIxNDY9c3RhdGljIGludCBzdGFfYXBwbHlfYXV0aF9mbGFncyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE1NC1cdCAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FVVEgpKSB7XG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE1NTpcdFx0cmV0ID0gc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVVUSCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE1Ni1cdFx0aWYgKHJldClcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE3MC1cbm5ldC9tYWM4MDIxMS9jZmcuYzoyMTcxOlx0XHRyZXQgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BU1NPQyk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE3Mi1cdFx0aWYgKHJldClcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE3Ny1cdFx0aWYgKHNldCBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRCkpXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE3ODpcdFx0XHRyZXQgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BVVRIT1JJWkVEKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTc5LVx0XHRlbHNlIGlmICh0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVVUSE9SSVpFRCkpXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE4MDpcdFx0XHRyZXQgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BU1NPQyk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE4MS1cdFx0ZWxzZVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTg5LVx0ICAgIHRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykpIHtcbm5ldC9tYWM4MDIxMS9jZmcuYzoyMTkwOlx0XHRyZXQgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BVVRIKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTkxLVx0XHRpZiAocmV0KVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTk3LVx0ICAgIHRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BVVRIKSkge1xubmV0L21hYzgwMjExL2NmZy5jOjIxOTg6XHRcdHJldCA9IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX05PTkUpO1xubmV0L21hYzgwMjExL2NmZy5jLTIxOTktXHRcdGlmIChyZXQpXG4tLVxubmV0L21hYzgwMjExL21sbWUuYz00NTA2PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy00NjIzLVx0XHQvKiBPbmx5IG1vdmUgdGhlIEFQIHN0YXRlICovXG5uZXQvbWFjODAyMTEvbWxtZS5jOjQ2MjQ6XHRcdHN0YV9pbmZvX21vdmVfc3RhdGUoYXBfc3RhLCBJRUVFODAyMTFfU1RBX05PTkUpO1xubmV0L21hYzgwMjExL21sbWUuYy00NjI1LVx0fSBlbHNlIHtcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTUzODY9c3RhdGljIGJvb2wgaWVlZTgwMjExX21hcmtfc3RhX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy01NDA1LVx0fVxubmV0L21hYzgwMjExL21sbWUuYzo1NDA2Olx0aWYgKHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FVVEgpKSB7XG5uZXQvbWFjODAyMTEvbWxtZS5jLTU0MDctXHRcdHNkYXRhX2luZm8oc2RhdGEsIFwmIzM0O2ZhaWxlZCBtb3ZpbmcgJXBNIHRvIGF1dGhcXG5cJiMzNDssIGFwX2FkZHIpO1xuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmM9Njk3Nj1zdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxNDgtXG5uZXQvbWFjODAyMTEvbWxtZS5jOjcxNDk6XHRlcnIgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BU1NPQyk7XG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxNTAtXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgIShpZm1nZC1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQpKVxubmV0L21hYzgwMjExL21sbWUuYzo3MTUxOlx0XHRlcnIgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BVVRIT1JJWkVEKTtcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzE1Mi1cdGlmIChlcnIpIHtcbi0tXG5uZXQvbWFjODAyMTEvb2NiLmM9ODc9c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX29jYl9maW5pc2hfc3RhKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuLS1cbm5ldC9tYWM4MDIxMS9vY2IuYy0xMDAtXG5uZXQvbWFjODAyMTEvb2NiLmM6MTAxOlx0c3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVVUSCk7XG5uZXQvbWFjODAyMTEvb2NiLmM6MTAyOlx0c3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVNTT0MpO1xubmV0L21hYzgwMjExL29jYi5jOjEwMzpcdHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FVVEhPUklaRUQpO1xubmV0L21hYzgwMjExL29jYi5jLTEwNC1cbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz00Njg9dm9pZCBzdGFfaW5mb19mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy00OTQtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo0OTU6XHRcdHJldCA9IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBzdGEtXHUwMDNlc3RhX3N0YXRlIC0gMSk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo0OTY6XHRcdGlmIChXQVJOX09OQ0UocmV0LCBcJiMzNDtzdGFfaW5mb19tb3ZlX3N0YXRlKCkgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCkpXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy00OTctXHRcdFx0YnJlYWs7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MTMxMD1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBfX3N0YV9pbmZvX2Rlc3Ryb3lfcGFydDEoc3RydWN0IHN0YV9pbmZvICpzdGEpXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTM5NC1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjEzOTU6c3RhdGljIGludCBfc3RhX2luZm9fbW92ZV9zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTEzOTYtXHRcdFx0XHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1MzctXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTM4OmludCBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTUzOS1cdFx0XHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlKVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTU0MC17XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTQxOlx0cmV0dXJuIF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgbmV3X3N0YXRlLCB0cnVlKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1NDItfVxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTE1NDQ9c3RhdGljIHZvaWQgX19zdGFfaW5mb19kZXN0cm95X3BhcnQyKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBib29sIHJlY2FsYylcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTczLVx0aWYgKHN0YS1cdTAwM2VzdGFfc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9BVVRIT1JJWkVEKSB7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTc0Olx0XHRyZXQgPSBfc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVNTT0MsIHJlY2FsYyk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTc1LVx0XHRXQVJOX09OX09OQ0UocmV0KTtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTg5LVx0d2hpbGUgKHN0YS1cdTAwM2VzdGFfc3RhdGUgXHUwMDNlIElFRUU4MDIxMV9TVEFfTk9ORSkge1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MTU5MDpcdFx0cmV0ID0gX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBzdGEtXHUwMDNlc3RhX3N0YXRlIC0gMSwgcmVjYWxjKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1OTEtXHRcdGlmIChyZXQpIHtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD04NDE9c3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfc2V0X3N0YV9mbGFnKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTg0OS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjg1MDppbnQgc3RhX2luZm9fbW92ZV9zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTg1MS1cdFx0XHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlKTtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD04NTM9c3RhdGljIGlubGluZSB2b2lkIHN0YV9pbmZvX3ByZV9tb3ZlX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTg1OS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjg2MDpcdHJldCA9IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBuZXdfc3RhdGUpO1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtODYxLVx0V0FSTl9PTl9PTkNFKHJldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBBdWRpdCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byBpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgaW4gcGxhY2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSBJIGhhdmUgYm90aCBNQUM4MDIxMSBhbmQgQ0ZHODAyMTEgZW5hYmxlZC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYnV0IEkmIzM5O20gbmV2ZXIgb25lIHRvIGFzc3VtZSwgc28gbGV0JiMzOTtzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvbWFjODAyMTEvTWFrZWZpbGVgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNydWNpYWwgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfTUFDODAyMTEpICYjNDM7PSBtYWM4MDIxMS5vXG4gICAzOlx0XG4gICA0Olx0IyBtYWM4MDIxMSBvYmplY3RzXG4gICA1Olx0bWFjODAyMTEteSA6PSBcXFxuICAgNjpcdFx0bWFpbi5vIHN0YXR1cy5vIFxcXG4gICA3Olx0XHRkcml2ZXItb3BzLm8gXFxcbiAgIDg6XHRcdHN0YV9pbmZvLm8gXFxcbiAgIDk6XHRcdHdlcC5vIFxcXG4gIDEwOlx0XHRhZWFkX2FwaS5vIFxcXG4gIDExOlx0XHR3cGEubyBcXFxuICAxMjpcdFx0c2Nhbi5vIG9mZmNoYW5uZWwubyBcXFxuICAxMzpcdFx0aHQubyBhZ2ctdHgubyBhZ2ctcngubyBcXFxuICAxNDpcdFx0dmh0Lm8gXFxcbiAgMTU6XHRcdGhlLm8gXFxcbiAgMTY6XHRcdHMxZy5vIFxcXG4gIDE3Olx0XHRpYnNzLm8gXFxcbiAgMTg6XHRcdGlmYWNlLm8gXFxcbiAgMTk6XHRcdGxpbmsubyBcXFxuICAyMDpcdFx0cmF0ZS5vIFxcXG4gIDIxOlx0XHR0a2lwLm8gXFxcbiAgMjI6XHRcdGFlc19jbWFjLm8gXFxcbiAgMjM6XHRcdGFlc19nbWFjLm8gXFxcbiAgMjQ6XHRcdGZpbHNfYWVhZC5vIFxcXG4gIDI1Olx0XHRjZmcubyBcXFxuICAyNjpcdFx0ZXRodG9vbC5vIFxcXG4gIDI3Olx0XHRyeC5vIFxcXG4gIDI4Olx0XHRzcGVjdG1nbXQubyBcXFxuICAyOTpcdFx0dHgubyBcXFxuICAzMDpcdFx0a2V5Lm8gXFxcbiAgMzE6XHRcdHV0aWwubyBwYXJzZS5vIFxcXG4gIDMyOlx0XHR3bWUubyBcXFxuICAzMzpcdFx0Y2hhbi5vIGFwLm8gXFxcbiAgMzQ6XHRcdHRyYWNlLm8gbWxtZS5vIFxcXG4gIDM1Olx0XHR0ZGxzLm8gXFxcbiAgMzY6XHRcdG9jYi5vIFxcXG4gIDM3Olx0XHRhaXJ0aW1lLm8gXFxcbiAgMzg6XHRcdGVodC5vIHVoci5vIG5hbi5vXG4gIDM5Olx0XG4gIDQwOlx0bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfTEVEUykgJiM0Mzs9IGxlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDQzCgkJCQkJCQlvdXRwdXQ6IDIxOAoJCQkJCQkJdGhvdWdodHM6IDYxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNQUM4MDIxMSBLZXkgTWFuYWdlbWVudCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gZnV6emluZyB0aGUgTUFDODAyMTEgc3Vic3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgY2ZnLm9gLCBga2V5Lm9gLCBhbmQgYHN0YV9pbmZvLm9gIGFyZSBhbHdheXMgYnVpbHQgaW50byBgbWFjODAyMTEua29gIHdoZW4gYENPTkZJR19NQUM4MDIxMWAgaXMgZW5hYmxlZC4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfTUFDODAyMTFgIGhpbmdlcyBvbiBgQ09ORklHX0NGRzgwMjExYC4gV2UgdXN1YWxseSBleGVyY2lzZSB0aGlzIHdpdGggc29tZXRoaW5nIGxpa2UgdGhlIHZpcnR1YWwgcmFkaW8gdGhyb3VnaCBgQ09ORklHX01BQzgwMjExX0hXU0lNYCwgYnV0IHVsdGltYXRlbHksIGBNQUM4MDIxMWAgYW5kIGBDRkc4MDIxMWAgYXJlIHRoZSBrZXkgY29uZmlncyBoZXJlLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgYEZvY3VzU3ltYm9sc2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBvciBpbnRyb2R1Y2VkIGFyZSBvbiBteSByYWRhci4gQmFzZWQgb24gdGhpcywgSSBzZWU6IGBpZWVlODAyMTFfYWRkX2tleWAsIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCwgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCwgYW5kIGVpdGhlciBgc3RhX2luZm9fbW92ZV9zdGF0ZWAgb3IgYF9zdGFfaW5mb19tb3ZlX3N0YXRlYC4KCkxldCBtZSBxdWlja2x5IHNjYW4gdGhlIGRpZmYgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gdGVybXMgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLiBPa2F5LCBzbyBmcm9tIHRoZSBkaWZmLCBJIGhhdmUgdGhlc2UgZmlsZSBtb2RpZmljYXRpb25zIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9uczoKCjEuICBgbmV0L21hYzgwMjExL2NmZy5jYDogYGllZWU4MDIxMV9hZGRfa2V5YAoyLiAgYG5ldC9tYWM4MDIxMS9rZXkuY2A6IGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAsIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYAozLiAgYG5ldC9tYWM4MDIxMS9rZXkuaGA6IERlY2xhcmF0aW9ucyAoaW1wb3J0YW50LCBuZWVkIHRvIHJldmlldyB0aGVzZSBmb3IgYWRkZWQgZGF0YSBzdHJ1Y3R1cmVzLCBldGMuIGFzIHdlbGwpCjQuICBgbmV0L21hYzgwMjExL3N0YV9pbmZvLmNgOiBgX3N0YV9pbmZvX21vdmVfc3RhdGVgICh3aGljaCBpcyBpbnZva2VkIHZpYSBgc3RhX2luZm9fbW92ZV9zdGF0ZWApCgpHb29kLCBsb29rcyBsaWtlIHRoZSBkaWZmIGxpbmVzIHVwIHBlcmZlY3RseSB3aXRoIHdoYXQgSSBleHBlY3RlZCBmb3IgbXkgYEZvY3VzU3ltYm9sc2AuIExldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aG9zZSBhcmUgYWxsIGV4YWN0IGtlcm5lbCBmdW5jdGlvbiBuYW1lcy4KClllcywgY29uZmlybWVkOiBgaWVlZTgwMjExX2FkZF9rZXlgLCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AsIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAsIGBfc3RhX2luZm9fbW92ZV9zdGF0ZWAsIGFuZCBgc3RhX2luZm9fbW92ZV9zdGF0ZWAuCgpOb3csIHRpbWUgdG8gdmVyaWZ5IGFnYWluc3QgdGhlIGluc3RydWN0aW9uczoKCiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZS4gR2l2ZW4gdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiB0aGVzZSBrZXkgbWFuYWdlbWVudCByb3V0aW5lcywgdGhpcyBpcyBhIGNsZWFyIHllcy4KKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O01BQzgwMjExJiMzNDssICYjMzQ7Q0ZHODAyMTEmIzM0O11gLiBNYWtlcyBwZXJmZWN0IHNlbnNlLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtpZWVlODAyMTFfYWRkX2tleSYjMzQ7LCAmIzM0O2llZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMmIzM0OywgJiMzNDtpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbCYjMzQ7LCAmIzM0O19zdGFfaW5mb19tb3ZlX3N0YXRlJiMzNDssICYjMzQ7c3RhX2luZm9fbW92ZV9zdGF0ZSYjMzQ7XWAuIENoZWNrbGlzdCBjb21wbGV0ZS4KKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0OiBUaGlzIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMga2V5IG1hbmFnZW1lbnQgYW5kIFNUQSBzdGF0ZSB0cmFuc2l0aW9ucyBpbiBNQUM4MDIxMSwgYm90aCBvZiB3aGljaCBhcmUgY3JpdGljYWwgZm9yIHdpcmVsZXNzIHNlY3VyaXR5IGFuZCByZXByZXNlbnQgYXJlYXMgd2l0aCBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzIGV4cGxvaXRhYmxlIHRocm91Z2ggY3JhZnRlZCBuZXR3b3JrIHRyYWZmaWMuIFRoZXJlZm9yZSwgaXQmIzM5O3MgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGV2ZXJ5dGhpbmcuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfYWRkX2tleSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsJiMzNDssCiAgICAmIzM0O19zdGFfaW5mb19tb3ZlX3N0YXRlJiMzNDssCiAgICAmIzM0O3N0YV9pbmZvX21vdmVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWFjODAyMTEga2V5IGhhbmRsaW5nIGJ5IGFsbG93aW5nIHBhaXJ3aXNlIGtleSBpbnN0YWxsYXRpb24gaW4gQVAgbW9kZSBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uIGFuZCBkZWZlcnJpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHVwbG9hZCB1bnRpbCBhc3NvY2lhdGlvbiBjb21wbGV0ZXMuIEl0IGludHJvZHVjZXMgbmV3IGtleSBzdGF0ZSBmbGFncywgdXBkYXRlcyBrZXkgdXBsb2FkIGxvZ2ljLCBhbmQgYWRkcyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGluIHJlYWNoYWJsZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4gbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfYWRkX2tleSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsJiMzNDssCiAgICAmIzM0O19zdGFfaW5mb19tb3ZlX3N0YXRlJiMzNDssCiAgICAmIzM0O3N0YV9pbmZvX21vdmVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWFjODAyMTEga2V5IGhhbmRsaW5nIGJ5IGFsbG93aW5nIHBhaXJ3aXNlIGtleSBpbnN0YWxsYXRpb24gaW4gQVAgbW9kZSBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uIGFuZCBkZWZlcnJpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHVwbG9hZCB1bnRpbCBhc3NvY2lhdGlvbiBjb21wbGV0ZXMuIEl0IGludHJvZHVjZXMgbmV3IGtleSBzdGF0ZSBmbGFncywgdXBkYXRlcyBrZXkgdXBsb2FkIGxvZ2ljLCBhbmQgYWRkcyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGluIHJlYWNoYWJsZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4gbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgZGVmZXJyZWQgaGFyZHdhcmUga2V5IHVwbG9hZCBpbiBtYWM4MDIxMSBmb3IgQVAtc2lkZSBGYXN0IFRyYW5zaXRpb24gKEZUKSB3aGVuIHBhaXJ3aXNlIGtleXMgYXJlIGluc3RhbGxlZCBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIGZsYWcgKEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCksIGRlZmVycyB0aGUgZHJpdmVyIHNldF9rZXkgb3BlcmF0aW9uIHVudGlsIHRoZSBzdGF0aW9uIHRyYW5zaXRpb25zIHRvIFdMQU5fU1RBX0FTU09DLCBhbmQgYXR0ZW1wdHMgaGFyZHdhcmUga2V5IHVwbG9hZCBhdCB0aGF0IHBvaW50LlxuXG5FdmFsdWF0aW9uIHJlZ2FyZGluZyBLTVNBTiB2cyBLQVNBTjpcbi0gVW5pbml0aWFsaXplZCBtZW1vcnkgLyBpbmZvLWxlYWtzIChLTVNBTik6IE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkLiBUaGUgbG9jYWwgdmFyaWFibGUgYGRlZmVyX2h3X3VwbG9hZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoZSBrZXkgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCBhcmUgZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBvYmplY3RzLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UuXG4tIEdlbmVyYWwgbWVtb3J5IC8gY29uY3VycmVuY3kgc2FmZXR5IChLQVNBTi9Mb2NrZGVwKTogQW55IGlzc3VlcyByZWxhdGluZyB0byBrZXkgcmVmZXJlbmNlIGxpZmV0aW1lcywgc3RhdGlvbiBzdGF0ZSB0cmFuc2l0aW9ucywgb3IgZHJpdmVyIGNvbmN1cnJlbmN5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMb2NrZGVwKS5cblxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRvIGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE3NDZjMzBlMjcwNGQ1OWJhYTA3NWVlZjNlNTBhODk3NDU0YWQ1NjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDAzOjUwOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IDIzZjRmOWVjODZkMGEuLmZmOTkzYTdhOWU0NDEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTY2Niw3ICYjNDM7NjY2LDE1IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAkJa2V5LSZndDtjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYOwogCiAJaWYgKG1hY19hZGRyKSB7CiYjNDM7CQlib29sIGRlZmVyX2h3X3VwbG9hZDsKJiM0MzsKIAkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjX2FkZHIpOwomIzQzOwkJZGVmZXJfaHdfdXBsb2FkID0KJiM0MzsJCQlzdGEgJmFtcDsmYW1wOyBwYWlyd2lzZSAmYW1wOyZhbXA7ICFzdGEtJmd0O3N0YS5lcHBfcGVlciAmYW1wOyZhbXA7CiYjNDM7CQkJIXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykgJmFtcDsmYW1wOwomIzQzOwkJCShzZGF0YS0mZ3Q7dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKJiM0MzsJCQkgc2RhdGEtJmd0O3ZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pICZhbXA7JmFtcDsKJiM0MzsJCQkhaWVlZTgwMjExX2h3X2NoZWNrKCZhbXA7bG9jYWwtJmd0O2h3LCBTV19DUllQVE9fQ09OVFJPTCk7CiAJCS8qCiAJCSAqIFRoZSBBU1NPQyB0ZXN0IG1ha2VzIHN1cmUgdGhlIGRyaXZlciBpcyByZWFkeSB0bwogCQkgKiByZWNlaXZlIHRoZSBrZXkuIFdoZW4gd3BhX3N1cHBsaWNhbnQgaGFzIHJvYW1lZApAQCAtNjgxLDE0ICYjNDM7Njg5LDIyIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAkJICogSWYgKHJlKWFzc29jaWF0aW9uIGZyYW1lIGVuY3J5cHRpb24gc3VwcG9ydCBpcyBub3QgcHJlc2VudCwKIAkJICogY2ZnODAyMTEgd2lsbCBub3QgYWxsb3cga2V5IGluc3RhbGxhdGlvbiBpbiBub27igJFBUCBTVEEgbW9kZS4KIAkJICoKLQkJICogVE9ETzogYWNjZXB0IHRoZSBrZXkgaWYgd2UgaGF2ZSBhIHN0YXRpb24gZW50cnkgYW5kCi0JCSAqCSBhZGQgaXQgdG8gdGhlIGRldmljZSBhZnRlciB0aGUgc3RhdGlvbiBhc3NvY2lhdGVzLgomIzQzOwkJICogQVAtc2lkZSBGVCBtYXkgYWxzbyBpbnN0YWxsIGEgcGFpcndpc2Uga2V5IGJlZm9yZSB0aGUKJiM0MzsJCSAqIHN0YXRpb24gaXMgYXNzb2NpYXRlZC4gSWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzCiYjNDM7CQkgKiBhbGxvd2VkLCBrZWVwIGl0IGluIG1hYzgwMjExIGFuZCB1cGxvYWQgaXQgYWZ0ZXIgdGhlIHN0YXRpb24KJiM0MzsJCSAqIHJlYWNoZXMgQVNTT0MuIERyaXZlcnMgd2l0aCBTV19DUllQVE9fQ09OVFJPTCBjYW5ub3QgdXNlIHRoaXMKJiM0MzsJCSAqIHBhdGggc2luY2Ugb25seSB0aGVpciBzZXRfa2V5IHJldHVybiB2YWx1ZSBjYW4gcGVybWl0IHNvZnR3YXJlCiYjNDM7CQkgKiBjcnlwdG8uCiAJCSAqLwogCQlpZiAoIXN0YSB8fCAoIXN0YS0mZ3Q7c3RhLmVwcF9wZWVyICZhbXA7JmFtcDsKLQkJCSAgICAgIXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykpKSB7CiYjNDM7CQkJICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAhZGVmZXJfaHdfdXBsb2FkKSkgewogCQkJaWVlZTgwMjExX2tleV9mcmVlX3VudXNlZChrZXkpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KJiM0MzsKJiM0MzsJCWlmIChkZWZlcl9od191cGxvYWQpCiYjNDM7CQkJa2V5LSZndDtmbGFncyB8PSBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ7CiAJfQogCiAJc3dpdGNoIChzZGF0YS0mZ3Q7dmlmLnR5cGUpIHsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuYwppbmRleCBmNDVlNzkyYWJlZGU1Li43NzRhOTJiYTdiZDhjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2tleS5jCkBAIC0xNDQsNiAmIzQzOzE0NCwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlpZiAoa2V5LSZndDtmbGFncyAmYW1wOyBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBLZXlzIGFyZSBvbmx5IGRlZmVycmVkIGlmIGF1dG9tYXRpYyBzb2Z0d2FyZSBmYWxsYmFjayBpcwomIzQzOwkJICogYWxsb3dlZC4gTGVhdmUgcmV0IGFzIC1FT1BOT1RTVVBQIHNvIHRoZSBub3JtYWwgZmFsbGJhY2sgcGF0aAomIzQzOwkJICogaXMgdXNlZCB3aXRob3V0IHByZXRlbmRpbmcgdGhlIGRyaXZlciByZXR1cm5lZCAxLgomIzQzOwkJICovCiYjNDM7CQlnb3RvIG91dF91bnN1cHBvcnRlZDsKJiM0MzsJfQomIzQzOwogCWlmICgha2V5LSZndDtsb2NhbC0mZ3Q7b3BzLSZndDtzZXRfa2V5KQogCQlnb3RvIG91dF91bnN1cHBvcnRlZDsKIApAQCAtOTk3LDYgJiM0MzsxMDA2LDI4IEBAIHZvaWQgaWVlZTgwMjExX3JlZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiAJfQogfQogCiYjNDM7dm9pZCBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQomIzQzO3sKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEtJmd0O2xvY2FsOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF93aXBoeShsb2NhbC0mZ3Q7aHcud2lwaHkpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShzdGEtJmd0O3B0ayk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC0mZ3Q7aHcud2lwaHksIHN0YS0mZ3Q7cHRrW2ldKTsKJiM0MzsJCWlmICgha2V5IHx8ICEoa2V5LSZndDtmbGFncyAmYW1wOyBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJa2V5LSZndDtmbGFncyAmYW1wOz0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDsKJiM0MzsJCXJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXNkYXRhX2VycihrZXktJmd0O3NkYXRhLAomIzQzOwkJCQkgICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBkZWZlcnJlZCBrZXkgKCVkLCAlcE0pOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAga2V5LSZndDtjb25mLmtleWlkeCwgc3RhLSZndDtzdGEuYWRkciwgcmV0KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBpZWVlODAyMTFfa2V5X2l0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmggYi9uZXQvbWFjODAyMTEva2V5LmgKaW5kZXggODI2ZTRlOTM4N2M1NS4uOTdkM2JiY2YwYWMyMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9rZXkuaApAQCAtMzIsMTAgJiM0MzszMiwxMyBAQCBzdHJ1Y3Qgc3RhX2luZm87CiAgKiBAS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU6IEluZGljYXRlcyB0aGF0IHRoaXMga2V5IGlzIHByZXNlbnQKICAqCWluIHRoZSBoYXJkd2FyZSBmb3IgVFggY3J5cHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi4KICAqIEBLRVlfRkxBR19UQUlOVEVEOiBLZXkgaXMgdGFpbnRlZCBhbmQgcGFja2V0cyBzaG91bGQgYmUgZHJvcHBlZC4KJiM0MzsgKiBAS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEOiBLZXkgdXBsb2FkIGlzIGRlZmVycmVkIHVudGlsIHRoZSBzdGF0aW9uCiYjNDM7ICoJaXMgYXNzb2NpYXRlZC4KICAqLwogZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfa2V5X2ZsYWdzIHsKIAlLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRQk9IEJJVCgwKSwKIAlLRVlfRkxBR19UQUlOVEVECQk9IEJJVCgxKSwKJiM0MzsJS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FECT0gQklUKDIpLAogfTsKIAogZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfdGtpcF9zdGF0ZSB7CkBAIC0xNjUsNiAmIzQzOzE2OCw3IEBAIHZvaWQgaWVlZTgwMjExX2ZyZWVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSBib29sIGZvcmNlX3N5bmNocm9uaXplKTsKIHZvaWQgaWVlZTgwMjExX2ZyZWVfc3RhX2tleXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKJiM0Mzt2b2lkIGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiBpbnQgaWVlZTgwMjExX2tleV9zd2l0Y2hfbGlua3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWxfbGlua3NfbWFzaywKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKaW5kZXggZmRmMDBjYmY0OWQ4Yi4uNzUzZGNkZDkwNzAxMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKQEAgLTE0NjgsNiAmIzQzOzE0NjgsNyBAQCBzdGF0aWMgaW50IF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhLAogCWNhc2UgSUVFRTgwMjExX1NUQV9BU1NPQzoKIAkJaWYgKHN0YS0mZ3Q7c3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSCkgewogCQkJc2V0X2JpdChXTEFOX1NUQV9BU1NPQywgJmFtcDtzdGEtJmd0O19mbGFncyk7CiYjNDM7CQkJaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdGEpOwogCQkJc3RhLSZndDthc3NvY19hdCA9IGt0aW1lX2dldF9ib290dGltZV9ucygpOwogCQkJaWYgKHJlY2FsYykgewogCQkJCWllZWU4MDIxMV9yZWNhbGNfbWluX2NoYW5kZWYoc3RhLSZndDtzZGF0YSwgLTEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA0NwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDY5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNQUM4MDIxMSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGFyZWFzIHdoZXJlIEtNU0FOIGZ1enppbmcgbWlnaHQgYmUgYmVuZWZpY2lhbC4gVGhpcyBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIHdpdGhpbiB0aGUgYG5ldC9tYWM4MDIxMWAgc3Vic3lzdGVtOiBgY2ZnLmNgLCBga2V5LmNgLCBga2V5LmhgLCBhbmQgYHN0YV9pbmZvLmNgLgoKRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBhZGRpdGlvbiBvZiBgYm9vbCBkZWZlcl9od191cGxvYWRgIHdpdGhpbiBgaWVlZTgwMjExX2FkZF9rZXlgIGluIGBjZmcuY2AuIFRoZSBsb2dpYyBmb3Igc2V0dGluZyB0aGlzIGZsYWcgbG9va3MgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRoZSBjb2RlIGRlZmVycyBoYXJkd2FyZSBrZXkgdXBsb2FkIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXM6IHdoZW4gYSBzdGF0aW9uIGV4aXN0cywgYSBwYWlyd2lzZSBrZXkgaXMgaW52b2x2ZWQsIGFuZCB0aGUgc3RhdGlvbiBpc24mIzM5O3QgYW4gRVBQIHBlZXIsIGlzbiYjMzk7dCBhc3NvY2lhdGVkLCBhbmQgdGhlIGludGVyZmFjZSB0eXBlIGlzIEFQIG9yIEFQX1ZMQU4sICphbmQqIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBzdXBwb3J0IHNvZnR3YXJlIGNyeXB0byBjb250cm9sLiBUaGVuIEkgc2VlIHRoYXQgYGRlZmVyX2h3X3VwbG9hZGAgZmxhZyBpcyB1c2VkIGluIGEgc3Vic2VxdWVudCBjaGVjayB0aGF0IHdpbGwgZnJlZSBhIGtleSBpZiB0aGUgc3RhdGlvbiBjb25kaXRpb25zIGFyZW4mIzM5O3QgbWV0LCBvciBpZiBgZGVmZXJfaHdfdXBsb2FkYCBpcyBzZXQgYW5kIHNob3VsZCBiZSBkZWZlcnJlZC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uLgoKTmV4dCwgaW4gYGtleS5jYCwgdGhlIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAgZnVuY3Rpb24gbm93IGNoZWNrcyBmb3IgdGhpcyBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYCBhbmQgaW1tZWRpYXRlbHkgZXhpdHMgaWYgc2V0LiBUaGUgbmV3IGZ1bmN0aW9uIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCBoYXMgYWxzbyBiZWVuIGFkZGVkLCB3aGljaCBpdGVyYXRlcyB0aHJvdWdoIGBzdGEtJmd0O3B0a1tpXWAsIGNsZWFycyBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYCwgYW5kIGNhbGxzIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpYC4gVGhlIGBrZXkuaGAgZmlsZSBzaW1wbHkgZGVmaW5lcyBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYCBhbmQgZGVjbGFyZXMgdGhpcyBuZXcgZnVuY3Rpb24uCgpGaW5hbGx5LCBgc3RhX2luZm8uY2AgY2FsbHMgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RhKWAgd2hlbiBhIHN0YXRpb24gdHJhbnNpdGlvbnMgZnJvbSBBVVRIIHRvIEFTU09DIHN0YXRlIHZpYSBgX3N0YV9pbmZvX21vdmVfc3RhdGVgLiBUaGlzIG1lYW5zIHRoYXQga2V5cyBhcmUgZGVmZXJyZWQsIHVudGlsIHRoZSBzdGF0aW9uIG1vdmVzIHRvIHRoZSBhc3NvY2lhdGVkIHN0YXRlLgoKTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUsIGl0JiMzOTtzIHRoZSBgc3RhLSZndDtwdGtgIGFycmF5IHRoYXQgcmVxdWlyZXMgYSBjbG9zZXIgbG9vay4gV2hhdCBkYXRhIGlzIHN0b3JlZCB0aGVyZSwgYW5kIGhvdyBpcyBpdCBpbml0aWFsaXplZD8gU2luY2Ugd2UmIzM5O3JlIGRlZmVycmluZyB0aGUgaGFyZHdhcmUgdXBsb2FkLCB3aGF0IHN0YXRlIGlzIHJldGFpbmVkIHdoaWxlIHRoZSBrZXkgaXMgZGVmZXJyZWQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIG1lbWJlcnMgb2YgYHN0YS0mZ3Q7cHRrW11gIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB3aGVuIHRoZXkgYXJlIGV2ZW50dWFsbHkgdXBsb2FkZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCBkb2VzIHVuZGVyIHRoZSBob29kIHRvIGNvbXBsZXRlbHkgdW5kZXJzdGFuZCB3aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGxlYWtlZCBpZiB0aGUgaW5pdGlhbCB2YWx1ZXMgYXJlIG5vdCBzZXQgcHJvcGVybHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBwYXRocyB3aGVyZSBgc3RhLSZndDtwdGtbaV1gIGlzIHJlYWQgYmVmb3JlIGl0JiMzOTtzIHdyaXR0ZW4gb3IgdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBrZXkgc3RydWN0dXJlIGlzIG5vdCBpbml0aWFsaXplZCBwcm9wZXJseS4gSWYgc28sIGEgS01TQU4gZnV6emVyIHdpbGwgYmUgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9rZXkuYz0xMDk9c3RhdGljIHZvaWQgZGVjcmVhc2VfdGFpbHJvb21fbmVlZF9jb3VudChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEva2V5LmMtMTE5LVxubmV0L21hYzgwMjExL2tleS5jOjEyMDpzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpXG5uZXQvbWFjODAyMTEva2V5LmMtMTIxLXtcbi0tXG5uZXQvbWFjODAyMTEva2V5LmM9NDQ5PXN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy01MTktXHRcdFx0aWYgKG5ldylcbm5ldC9tYWM4MDIxMS9rZXkuYzo1MjA6XHRcdFx0XHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChuZXcpO1xubmV0L21hYzgwMjExL2tleS5jLTUyMS1cdFx0fVxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy01MjMtXHRcdGlmICghbmV3LVx1MDAzZWxvY2FsLVx1MDAzZXdvd2xhbikge1xubmV0L21hYzgwMjExL2tleS5jOjUyNDpcdFx0XHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChuZXcpO1xubmV0L21hYzgwMjExL2tleS5jLTUyNS1cdFx0fSBlbHNlIGlmIChsaW5rX2lkIFx1MDAzYyAwIHx8ICFzZGF0YS1cdTAwM2V2aWYuYWN0aXZlX2xpbmtzIHx8XG4tLVxubmV0L21hYzgwMjExL2tleS5jPTk4Mz12b2lkIGllZWU4MDIxMV9yZWVuYWJsZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDAzLVx0XHRcdFx0aW5jcmVtZW50X3RhaWxyb29tX25lZWRfY291bnQoc2RhdGEpO1xubmV0L21hYzgwMjExL2tleS5jOjEwMDQ6XHRcdFx0aWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTtcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDA1LVx0XHR9XG4tLVxubmV0L21hYzgwMjExL2tleS5jPTEwMDk9dm9pZCBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDIyLVx0XHRrZXktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+S0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEO1xubmV0L21hYzgwMjExL2tleS5jOjEwMjM6XHRcdHJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7XG5uZXQvbWFjODAyMTEva2V5LmMtMTAyNC1cdFx0aWYgKHJldClcbi0tXG5uZXQvbWFjODAyMTEva2V5LmM9MTUxNz1pbnQgaWVlZTgwMjExX2tleV9zd2l0Y2hfbGlua3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2tleS5jLTE1NDItXG5uZXQvbWFjODAyMTEva2V5LmM6MTU0MzpcdFx0cmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTtcbm5ldC9tYWM4MDIxMS9rZXkuYy0xNTQ0LVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjY4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgdGhlIGZpcnN0IHBlcnNvbiBhbmQgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOgoKKipNeSBEZWVwIERpdmUgaW50byBLZXkgQWNjZWxlcmF0aW9uIExvZ2ljKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgaW50byB0aGUgd2VlZHMgb24gdGhlc2UgY2hhbmdlcy4gVGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMgZm9jdXNlcyBvbiBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGtleSBhY2NlbGVyYXRpb24gd2l0aGluIHRoZSA4MDIuMTEgc3RhY2suIEkgaW1tZWRpYXRlbHkgd2FudCB0byBmb2N1cyBvbiB0d28gZnVuY3Rpb25zOiBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgIGFuZCBgaWVlZTgwMjExX2FkZF9rZXlgLiBUaGVzZSBhcmUgYWJzb2x1dGVseSAqY3JpdGljYWwqIHRvdWNocG9pbnRzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgKmVzcGVjaWFsbHkqIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgdHdvLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgSSBhbnRpY2lwYXRlIHRoZSBjb3JlIGNoYW5nZXMgYW5kIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpbGwgcmVzaWRlLiBJdCYjMzk7cyBpbXBlcmF0aXZlIHRoYXQgdGhlIGFkZGVkIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBkb2VzbiYjMzk7dCBicmVhayBlc3RhYmxpc2hlZCBrZXkgbWFuYWdlbWVudCBvciBjcmVhdGUgc2VjdXJpdHkgZmxhd3MuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3Qga2V5IGhhbmRsaW5nIGR1cmluZyB0cmFuc2l0aW9ucywgYW5kIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIHRoYXQgbWlnaHQgYXJpc2UgZnJvbSBhZGRpbmcgdGhpcyBsYXllciBvZiBjb21wbGV4aXR5LiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyB0aGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBhbmQgaG93IHRoZXkmIzM5O3ZlIGJlZW4gbW9kaWZpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBuZXcgbG9naWMg4oCTIGlzIGl0IGFuIGluc2VydGlvbiwgYSByZXBsYWNlbWVudCwgb3IgYSBtb3JlIGFyY2hpdGVjdHVyYWwgY2hhbmdlPwoKTXkgc2Vjb25kYXJ5IGNvbnNpZGVyYXRpb24gY29uY2VybnMgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCBob3cgZG8gdGhlIGV4aXN0aW5nIGtleXMgZ2V0IHBhc3NlZCBhbmQgaG93IHdpbGwgaGFyZHdhcmUga2V5cyBkaWZmZXI/IEFyZSB3ZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUga2V5IElEcyBub3c/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGtleSBsaWZldGltZSBtYW5hZ2VtZW50IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGV4aXN0aW5nIGtleSBjYWNoZT8gQXJlIHRoZXJlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zPyBIb3cgd2lsbCB0aGlzIGltcGFjdCB0aGUgZHJpdmVyPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9rZXkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0c3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KVxuIDEyMTpcdHtcbiAxMjI6XHRcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0ga2V5LVx1MDAzZXNkYXRhO1xuIDEyMzpcdFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gMTI0Olx0XHRpbnQgcmV0ID0gLUVPUE5PVFNVUFA7XG4gMTI1Olx0XG4gMTI2Olx0XHRtaWdodF9zbGVlcCgpO1xuIDEyNzpcdFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoa2V5LVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5KTtcbiAxMjg6XHRcbiAxMjk6XHRcdGlmIChrZXktXHUwMDNlZmxhZ3MgXHUwMDI2IEtFWV9GTEFHX1RBSU5URUQpIHtcbiAxMzA6XHRcdFx0LyogSWYgd2UgZ2V0IGhlcmUsIGl0JiMzOTtzIGR1cmluZyByZXN1bWUgYW5kIHRoZSBrZXkgaXNcbiAxMzE6XHRcdFx0ICogdGFpbnRlZCBzbyBzaG91bGRuJiMzOTt0IGJlIHVzZWQvcHJvZ3JhbW1lZCBhbnkgbW9yZS5cbiAxMzI6XHRcdFx0ICogSG93ZXZlciwgaXRzIGZsYWdzIG1heSBzdGlsbCBpbmRpY2F0ZSB0aGF0IGl0IHdhc1xuIDEzMzpcdFx0XHQgKiBwcm9ncmFtbWVkIGludG8gdGhlIGRldmljZSAoc2luY2Ugd2UmIzM5O3JlIGluIHJlc3VtZSlcbiAxMzQ6XHRcdFx0ICogc28gY2xlYXIgdGhhdCBmbGFnIG5vdyB0byBhdm9pZCB0cnlpbmcgdG8gcmVtb3ZlXG4gMTM1Olx0XHRcdCAqIGl0IGFnYWluIGxhdGVyLlxuIDEzNjpcdFx0XHQgKi9cbiAxMzc6XHRcdFx0aWYgKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUgXHUwMDI2XHUwMDI2XG4gMTM4Olx0XHRcdCAgICAhKGtleS1cdTAwM2Vjb25mLmZsYWdzIFx1MDAyNiAoSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMgfFxuIDEzOTpcdFx0XHRcdFx0XHQgSUVFRTgwMjExX0tFWV9GTEFHX1BVVF9NSUNfU1BBQ0UgfFxuIDE0MDpcdFx0XHRcdFx0XHQgSUVFRTgwMjExX0tFWV9GTEFHX1JFU0VSVkVfVEFJTFJPT00pKSlcbiAxNDE6XHRcdFx0XHRpbmNyZW1lbnRfdGFpbHJvb21fbmVlZF9jb3VudChzZGF0YSk7XG4gMTQyOlx0XG4gMTQzOlx0XHRcdGtleS1cdTAwM2VmbGFncyBcdTAwMjY9IH5LRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTtcbiAxNDQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTQ1Olx0XHR9XG4gMTQ2Olx0XG4gMTQ3Olx0XHRpZiAoa2V5LVx1MDAzZWZsYWdzIFx1MDAyNiBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpIHtcbiAxNDg6XHRcdFx0LypcbiAxNDk6XHRcdFx0ICogS2V5cyBhcmUgb25seSBkZWZlcnJlZCBpZiBhdXRvbWF0aWMgc29mdHdhcmUgZmFsbGJhY2sgaXNcbiAxNTA6XHRcdFx0ICogYWxsb3dlZC4gTGVhdmUgcmV0IGFzIC1FT1BOT1RTVVBQIHNvIHRoZSBub3JtYWwgZmFsbGJhY2sgcGF0aFxuIDE1MTpcdFx0XHQgKiBpcyB1c2VkIHdpdGhvdXQgcHJldGVuZGluZyB0aGUgZHJpdmVyIHJldHVybmVkIDEuXG4gMTUyOlx0XHRcdCAqL1xuIDE1MzpcdFx0XHRnb3RvIG91dF91bnN1cHBvcnRlZDtcbiAxNTQ6XHRcdH1cbiAxNTU6XHRcbiAxNTY6XHRcdGlmICgha2V5LVx1MDAzZWxvY2FsLVx1MDAzZW9wcy1cdTAwM2VzZXRfa2V5KVxuIDE1NzpcdFx0XHRnb3RvIG91dF91bnN1cHBvcnRlZDtcbiAxNTg6XHRcbiAxNTk6XHRcdHN0YSA9IGtleS1cdTAwM2VzdGE7XG4gMTYwOlx0XG4gMTYxOlx0XHQvKlxuIDE2MjpcdFx0ICogQWxsb3cgaW5zdGFsbGF0aW9uIG9mIGEgcGVyLVNUQSBHVEsgaWYgcGVyLVNUQSBHVEsgaXMgc3VwcG9ydGVkXG4gMTYzOlx0XHQgKiBieSB0aGUgZHJpdmVyIG9yIHRoZSBpbnRlcmZhY2UgaXMgYSBOQU4gRGF0YSBpbnRlcmZhY2UgKGFzXG4gMTY0Olx0XHQgKiBwZXItc3RhdGlvbiBHVEtzIGFyZSByZXF1aXJlZCB0byBiZSBzdXBwb3J0ZWQgaWYgc2VjdXJlIE5BTiBpc1xuIDE2NTpcdFx0ICogc3VwcG9ydGVkKS5cbiAxNjY6XHRcdCAqL1xuIDE2NzpcdFx0aWYgKHN0YSBcdTAwMjZcdTAwMjYgIShrZXktXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSBcdTAwMjZcdTAwMjZcbiAxNjg6XHRcdCAgICAhKGllZWU4MDIxMV9od19jaGVjayhcdTAwMjZrZXktXHUwMDNlbG9jYWwtXHUwMDNlaHcsIFNVUFBPUlRTX1BFUl9TVEFfR1RLKSB8fFxuIDE2OTpcdFx0ICAgICAgc2RhdGEtXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpKVxuIDE3MDpcdFx0XHRnb3RvIG91dF91bnN1cHBvcnRlZDtcbiAxNzE6XHRcbiAxNzI6XHRcdGlmIChzdGEgXHUwMDI2XHUwMDI2ICFzdGEtXHUwMDNldXBsb2FkZWQpXG4gMTczOlx0XHRcdGdvdG8gb3V0X3Vuc3VwcG9ydGVkO1xuIDE3NDpcdFxuIDE3NTpcdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIHtcbiAxNzY6XHRcdFx0LypcbiAxNzc6XHRcdFx0ICogVGhlIGRyaXZlciBkb2VzbiYjMzk7dCBrbm93IGFueXRoaW5nIGFib3V0IFZMQU4gaW50ZXJmYWNlcy5cbiAxNzg6XHRcdFx0ICogSGVuY2UsIGRvbiYjMzk7dCBzZW5kIEdUS3MgZm9yIFZMQU4gaW50ZXJmYWNlcyB0byB0aGUgZHJpdmVyLlxuIDE3OTpcdFx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcwNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXkgQWRkaXRpb24gQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGtleXMgYXJlIGFkZGVkIGluIHRoZSBgbWFjODAyMTFgIHN1YnN5c3RlbSwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYG5ldC9tYWM4MDIxMS9jZmcuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYGllZWU4MDIxMV9hZGRfa2V5YCBmdW5jdGlvbi4gVGhpcyBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBrZXkgbWFuYWdlbWVudCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBkaXNzZWN0IHRoZSBjb2RlIGFyb3VuZCB0aGF0IGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQga2V5IHR5cGVzLCBhbnkgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgb3ZlcmFsbCBmbG93IG9mIGFkZGluZyBhIG5ldyBrZXkuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgcG90ZW50aWFsIGlzc3VlIEkmIzM5O20gY2hhc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvY2ZnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY2MDpcdFx0XHRrZXktXHUwMDNlY29uZi5saW5rX2lkID0gLTE7XG4gNjYxOlx0XHR9IGVsc2Uge1xuIDY2MjpcdFx0XHRrZXktXHUwMDNlY29uZi5saW5rX2lkID0gbGluay1cdTAwM2VsaW5rX2lkO1xuIDY2MzpcdFx0fVxuIDY2NDpcdFxuIDY2NTpcdFx0aWYgKHBhcmFtcy1cdTAwM2Vtb2RlID09IE5MODAyMTFfS0VZX05PX1RYKVxuIDY2NjpcdFx0XHRrZXktXHUwMDNlY29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfTk9fQVVUT19UWDtcbiA2Njc6XHRcbiA2Njg6XHRcdGlmIChtYWNfYWRkcikge1xuIDY2OTpcdFx0XHRib29sIGRlZmVyX2h3X3VwbG9hZDtcbiA2NzA6XHRcbiA2NzE6XHRcdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjX2FkZHIpO1xuIDY3MjpcdFx0XHRkZWZlcl9od191cGxvYWQgPVxuIDY3MzpcdFx0XHRcdHN0YSBcdTAwMjZcdTAwMjYgcGFpcndpc2UgXHUwMDI2XHUwMDI2ICFzdGEtXHUwMDNlc3RhLmVwcF9wZWVyIFx1MDAyNlx1MDAyNlxuIDY3NDpcdFx0XHRcdCF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpIFx1MDAyNlx1MDAyNlxuIDY3NTpcdFx0XHRcdChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fFxuIDY3NjpcdFx0XHRcdCBzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSBcdTAwMjZcdTAwMjZcbiA2Nzc6XHRcdFx0XHQhaWVlZTgwMjExX2h3X2NoZWNrKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBTV19DUllQVE9fQ09OVFJPTCk7XG4gNjc4Olx0XHRcdC8qXG4gNjc5Olx0XHRcdCAqIFRoZSBBU1NPQyB0ZXN0IG1ha2VzIHN1cmUgdGhlIGRyaXZlciBpcyByZWFkeSB0b1xuIDY4MDpcdFx0XHQgKiByZWNlaXZlIHRoZSBrZXkuIFdoZW4gd3BhX3N1cHBsaWNhbnQgaGFzIHJvYW1lZFxuIDY4MTpcdFx0XHQgKiB1c2luZyBGVCwgaXQgYXR0ZW1wdHMgdG8gc2V0IHRoZSBrZXkgYmVmb3JlXG4gNjgyOlx0XHRcdCAqIGFzc29jaWF0aW9uIGhhcyBjb21wbGV0ZWQsIHRoaXMgcmVqZWN0cyB0aGF0IGF0dGVtcHRcbiA2ODM6XHRcdFx0ICogc28gaXQgd2lsbCBzZXQgdGhlIGtleSBhZ2FpbiBhZnRlciBhc3NvY2lhdGlvbi5cbiA2ODQ6XHRcdFx0ICpcbiA2ODU6XHRcdFx0ICogV2l0aCAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBlbmFibGVkLCBjZmc4MDIxMVxuIDY4NjpcdFx0XHQgKiBtYXkgZGVsaXZlciBrZXlzIHRvIG1hYzgwMjExIGJlZm9yZSB0aGUgc3RhdGlvbiBoYXNcbiA2ODc6XHRcdFx0ICogYXNzb2NpYXRlZC4gSW4gdGhhdCBjYXNlLCBhY2NlcHQgdGhlIGtleSBpZiB0aGUgc3RhdGlvblxuIDY4ODpcdFx0XHQgKiBpcyBhbiBFbmhhbmNlZCBQcml2YWN5IFByb3RlY3Rpb24gKEVQUCkgcGVlci5cbiA2ODk6XHRcdFx0ICogSWYgKHJlKWFzc29jaWF0aW9uIGZyYW1lIGVuY3J5cHRpb24gc3VwcG9ydCBpcyBub3QgcHJlc2VudCxcbiA2OTA6XHRcdFx0ICogY2ZnODAyMTEgd2lsbCBub3QgYWxsb3cga2V5IGluc3RhbGxhdGlvbiBpbiBub27igJFBUCBTVEEgbW9kZS5cbiA2OTE6XHRcdFx0ICpcbiA2OTI6XHRcdFx0ICogQVAtc2lkZSBGVCBtYXkgYWxzbyBpbnN0YWxsIGEgcGFpcndpc2Uga2V5IGJlZm9yZSB0aGVcbiA2OTM6XHRcdFx0ICogc3RhdGlvbiBpcyBhc3NvY2lhdGVkLiBJZiBhdXRvbWF0aWMgc29mdHdhcmUgZmFsbGJhY2sgaXNcbiA2OTQ6XHRcdFx0ICogYWxsb3dlZCwga2VlcCBpdCBpbiBtYWM4MDIxMSBhbmQgdXBsb2FkIGl0IGFmdGVyIHRoZSBzdGF0aW9uXG4gNjk1Olx0XHRcdCAqIHJlYWNoZXMgQVNTT0MuIERyaXZlcnMgd2l0aCBTV19DUllQVE9fQ09OVFJPTCBjYW5ub3QgdXNlIHRoaXNcbiA2OTY6XHRcdFx0ICogcGF0aCBzaW5jZSBvbmx5IHRoZWlyIHNldF9rZXkgcmV0dXJuIHZhbHVlIGNhbiBwZXJtaXQgc29mdHdhcmVcbiA2OTc6XHRcdFx0ICogY3J5cHRvLlxuIDY5ODpcdFx0XHQgKi9cbiA2OTk6XHRcdFx0aWYgKCFzdGEgfHwgKCFzdGEtXHUwMDNlc3RhLmVwcF9wZWVyIFx1MDAyNlx1MDAyNlxuIDcwMDpcdFx0XHRcdCAgICAgIXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykgXHUwMDI2XHUwMDI2XG4gNzAxOlx0XHRcdFx0ICAgICAhZGVmZXJfaHdfdXBsb2FkKSkge1xuIDcwMjpcdFx0XHRcdGllZWU4MDIxMV9rZXlfZnJlZV91bnVzZWQoa2V5KTtcbiA3MDM6XHRcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA3MDQ6XHRcdFx0fVxuIDcwNTpcdFxuIDcwNjpcdFx0XHRpZiAoZGVmZXJfaHdfdXBsb2FkKVxuIDcwNzpcdFx0XHRcdGtleS1cdTAwM2VmbGFncyB8PSBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ7XG4gNzA4Olx0XHR9XG4gNzA5Olx0XG4gNzEwOlx0XHRzd2l0Y2ggKHNkYXRhLVx1MDAzZXZpZi50eXBlKSB7XG4gNzExOlx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XG4gNzEyOlx0XHRcdGlmIChzZGF0YS1cdTAwM2V1Lm1nZC5tZnAgIT0gSUVFRTgwMjExX01GUF9ESVNBQkxFRClcbiA3MTM6XHRcdFx0XHRrZXktXHUwMDNlY29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfUlhfTUdNVDtcbiA3MTQ6XHRcdFx0YnJlYWs7XG4gNzE1Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxuIDcxNjpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuIDcxNzpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4gNzE4Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOlxuIDcxOTpcdFx0XHQvKiBLZXlzIHdpdGhvdXQgYSBzdGF0aW9uIGFyZSB1c2VkIGZvciBUWCBvbmx5ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDMKCQkJCQkJCW91dHB1dDogMjM5CgkJCQkJCQl0aG91Z2h0czogNzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBtYWM4MDIxMSBBUC1zaWRlIEZhc3QgVHJhbnNpdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoaXMgcGF0Y2ggaXMgb3B0aW1pemluZyB0aGUgRmFzdCBUcmFuc2l0aW9uIChGVCkgcHJvY2VzcyBvbiB0aGUgQVAgc2lkZSBpbiBgbWFjODAyMTFgLiBUaGUgY29yZSBjaGFuZ2UgY2VudGVycyBhcm91bmQgcGFpcndpc2Uga2V5IGluc3RhbGxhdGlvbi4gQmVmb3JlLCB0aGUgc3lzdGVtIHdvdWxkIHJlamVjdCBrZXkgaW5zdGFsbGF0aW9uIGlmIHRoZSBTdGF0aW9uIChTVEEpIHdhc24mIzM5O3QgeWV0IGFzc29jaWF0ZWQuIE5vdywgdGhlIHBhdGNoIGFjY2VwdHMgdGhlIGtleSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgKHBhaXJ3aXNlIGtleSwgQVAgb3IgQVBfVkxBTiB2aXJ0dWFsIGludGVyZmFjZSB0eXBlLCBub3QgdXNpbmcgc29mdHdhcmUgY3J5cHRvIGNvbnRyb2wpIGFuZCB0YWdzIGl0IHdpdGggYEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRGAuIFRoaXMgYmFzaWNhbGx5IHRlbGxzIHRoZSBzeXN0ZW0gdG8gKmRlbGF5KiBlbmFibGluZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gZm9yIHRoZSBrZXkuCgpUaGUgdXBsb2FkIHRvIGhhcmR3YXJlIGlzIHNraXBwZWQgaW5pdGlhbGx5LCBmYWxsaW5nIGJhY2sgdG8gc29mdHdhcmUgY3J5cHRvLiBUaGUgKnJlYWwqIGFjdGlvbiBoYXBwZW5zIHdoZW4gdGhlIFNUQSBmaW5hbGx5IGFzc29jaWF0ZXMsIG1vdmluZyB0byBgSUVFRTgwMjExX1NUQV9BU1NPQ2AuIEF0IHRoYXQgcG9pbnQsIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCBpcyBjYWxsZWQsIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBTVEEmIzM5O3MgcGFpcndpc2UgdHJhbnNpZW50IGtleSAoUFRLKSwgY2xlYXJzIGBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQURgLCBhbmQgY2FsbHMgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCB0byBhY3R1YWxseSB1cGxvYWQgdGhlIGtleSB0byBoYXJkd2FyZS4KCk5vdywgZm9yIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LgoKRmlyc3QsIGlzIGFueXRoaW5nIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8uIFRoaXMgaXMgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCwgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBoYXJkd2FyZSBkcml2ZXIgdmlhIGBzZXRfa2V5YC4gU2Vjb25kLCBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWM/IE5vLCB0aGUgdmFyaWFibGUgYGRlZmVyX2h3X3VwbG9hZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZDogYGRlZmVyX2h3X3VwbG9hZCA9IHN0YSAmYW1wOyZhbXA7IHBhaXJ3aXNlICZhbXA7JmFtcDsgLi4uO2AuIEFsc28sIGFsbCBga2V5YCBmaWVsZHMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2NgIG9yIGBpZWVlODAyMTFfa2V5X2FsbG9jYC4gVGhpcmQsIGFyZSB0aGVyZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBObywgdGhlcmUgaXMgb25seSBhbiBhZGRlZCBmbGFnIGBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQURgIHdpdGhpbiB0aGUgYGtleS0mZ3Q7ZmxhZ3NgLCB3aGljaCBpcyBpbml0aWFsaXplZC4gRm91cnRoLCBhcmUgdGhlcmUgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGFjY2VzcyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoaXMgc2VlbXMgdmVyeSBzdHJhaWdodGZvcndhcmQuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlICphbnkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlzayBvciBpbmZvIGxlYWsuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBzdGFuZGFyZCBrZXJuZWwgaXNzdWVzLCBsaWtlIHVzZS1hZnRlci1mcmVlLCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcsIHN0YXRlIHN5bmNocm9uaXphdGlvbiwgb3IgZHJpdmVyIGNhbGxiYWNrIGZhaWx1cmVzLiBIb3dldmVyLCB0aG9zZSBhcmUgaGFuZGxlZCBieSB0b29scyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIGhlcmUuCgpTbywgdGhlIGNvbmNsdXNpb24gaXM6IGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIHBhdGNoIGRlZmVycyBoYXJkd2FyZSBrZXkgdXBsb2FkIGZvciBBUC1zaWRlIEZUIHBhaXJ3aXNlIGtleXMgdW50aWwgc3RhdGlvbiBhc3NvY2lhdGlvbi4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgYnVmZmVycyBleHBvc2VkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBgZGVmZXJfaHdfdXBsb2FkYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbHNvLCBubyBwYWRkaW5nIGxlYWtzIG9yIGJvdW5kcyBjYWxjdWxhdGlvbiBjaGFuZ2VzIG9uIHJhdyBtZW1vcnkgYnVmZmVycy4gS0FTQU4vTG9ja2RlcCB3aWxsIGhhbmRsZSBhbnkgc3RhdGUgbWFjaGluZSB0cmFuc2l0aW9ucywga2V5IHBvaW50ZXIgbGlmZWN5Y2xlL2xpZmV0aW1lLCBvciBkcml2ZXIgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGRlZmVycmVkIGhhcmR3YXJlIGtleSB1cGxvYWQgaW4gbWFjODAyMTEgZm9yIEFQLXNpZGUgRmFzdCBUcmFuc2l0aW9uIChGVCkgd2hlbiBwYWlyd2lzZSBrZXlzIGFyZSBpbnN0YWxsZWQgcHJpb3IgdG8gc3RhdGlvbiBhc3NvY2lhdGlvbi4gSXQgaW50cm9kdWNlcyBhIG5ldyBpbnRlcm5hbCBmbGFnIChLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpLCBkZWZlcnMgdGhlIGRyaXZlciBzZXRfa2V5IG9wZXJhdGlvbiB1bnRpbCB0aGUgc3RhdGlvbiB0cmFuc2l0aW9ucyB0byBXTEFOX1NUQV9BU1NPQywgYW5kIGF0dGVtcHRzIGhhcmR3YXJlIGtleSB1cGxvYWQgYXQgdGhhdCBwb2ludC5cblxuRXZhbHVhdGlvbiByZWdhcmRpbmcgS01TQU4gdnMgS0FTQU46XG4tIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IC8gaW5mby1sZWFrcyAoS01TQU4pOiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIG9yIGxlYWtlZC4gVGhlIGxvY2FsIHZhcmlhYmxlIGBkZWZlcl9od191cGxvYWRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUga2V5IHN0cnVjdHVyZXMgbWFuaXB1bGF0ZWQgYXJlIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgb2JqZWN0cy4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLlxuLSBHZW5lcmFsIG1lbW9yeSAvIGNvbmN1cnJlbmN5IHNhZmV0eSAoS0FTQU4vTG9ja2RlcCk6IEFueSBpc3N1ZXMgcmVsYXRpbmcgdG8ga2V5IHJlZmVyZW5jZSBsaWZldGltZXMsIHN0YXRpb24gc3RhdGUgdHJhbnNpdGlvbnMsIG9yIGRyaXZlciBjb25jdXJyZW5jeSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTG9ja2RlcCkuXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0byBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGRlZmVycmVkIGhhcmR3YXJlIGtleSB1cGxvYWQgaW4gbWFjODAyMTEgZm9yIEFQLXNpZGUgRmFzdCBUcmFuc2l0aW9uIChGVCkgd2hlbiBwYWlyd2lzZSBrZXlzIGFyZSBpbnN0YWxsZWQgcHJpb3IgdG8gc3RhdGlvbiBhc3NvY2lhdGlvbi4gSXQgaW50cm9kdWNlcyBhIG5ldyBpbnRlcm5hbCBmbGFnIChLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpLCBkZWZlcnMgdGhlIGRyaXZlciBzZXRfa2V5IG9wZXJhdGlvbiB1bnRpbCB0aGUgc3RhdGlvbiB0cmFuc2l0aW9ucyB0byBXTEFOX1NUQV9BU1NPQywgYW5kIGF0dGVtcHRzIGhhcmR3YXJlIGtleSB1cGxvYWQgYXQgdGhhdCBwb2ludC5cblxuRXZhbHVhdGlvbiByZWdhcmRpbmcgS01TQU4gdnMgS0FTQU46XG4tIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IC8gaW5mby1sZWFrcyAoS01TQU4pOiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIG9yIGxlYWtlZC4gVGhlIGxvY2FsIHZhcmlhYmxlIGBkZWZlcl9od191cGxvYWRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUga2V5IHN0cnVjdHVyZXMgbWFuaXB1bGF0ZWQgYXJlIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgb2JqZWN0cy4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLlxuLSBHZW5lcmFsIG1lbW9yeSAvIGNvbmN1cnJlbmN5IHNhZmV0eSAoS0FTQU4vTG9ja2RlcCk6IEFueSBpc3N1ZXMgcmVsYXRpbmcgdG8ga2V5IHJlZmVyZW5jZSBsaWZldGltZXMsIHN0YXRpb24gc3RhdGUgdHJhbnNpdGlvbnMsIG9yIGRyaXZlciBjb25jdXJyZW5jeSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTG9ja2RlcCkuXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0byBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUwOjU2Ljc3MTcyMzI0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MzgwNzA5NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9hZGRfa2V5XCIsXG4gICAgXCJpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzXCIsXG4gICAgXCJpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbFwiLFxuICAgIFwiX3N0YV9pbmZvX21vdmVfc3RhdGVcIixcbiAgICBcInN0YV9pbmZvX21vdmVfc3RhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgZGVmZXJyZWQgaGFyZHdhcmUga2V5IHVwbG9hZCBpbiBtYWM4MDIxMSBmb3IgQVAtc2lkZSBGYXN0IFRyYW5zaXRpb24gKEZUKSB3aGVuIHBhaXJ3aXNlIGtleXMgYXJlIGluc3RhbGxlZCBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIGZsYWcgKEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCksIGRlZmVycyB0aGUgZHJpdmVyIHNldF9rZXkgb3BlcmF0aW9uIHVudGlsIHRoZSBzdGF0aW9uIHRyYW5zaXRpb25zIHRvIFdMQU5fU1RBX0FTU09DLCBhbmQgYXR0ZW1wdHMgaGFyZHdhcmUga2V5IHVwbG9hZCBhdCB0aGF0IHBvaW50LlxcblxcbkV2YWx1YXRpb24gcmVnYXJkaW5nIEtNU0FOIHZzIEtBU0FOOlxcbi0gVW5pbml0aWFsaXplZCBtZW1vcnkgLyBpbmZvLWxlYWtzIChLTVNBTik6IE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkLiBUaGUgbG9jYWwgdmFyaWFibGUgYGRlZmVyX2h3X3VwbG9hZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoZSBrZXkgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCBhcmUgZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBvYmplY3RzLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UuXFxuLSBHZW5lcmFsIG1lbW9yeSAvIGNvbmN1cnJlbmN5IHNhZmV0eSAoS0FTQU4vTG9ja2RlcCk6IEFueSBpc3N1ZXMgcmVsYXRpbmcgdG8ga2V5IHJlZmVyZW5jZSBsaWZldGltZXMsIHN0YXRpb24gc3RhdGUgdHJhbnNpdGlvbnMsIG9yIGRyaXZlciBjb25jdXJyZW5jeSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTG9ja2RlcCkuXFxuXFxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRvIGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtYWM4MDIxMSBrZXkgaGFuZGxpbmcgYnkgYWxsb3dpbmcgcGFpcndpc2Uga2V5IGluc3RhbGxhdGlvbiBpbiBBUCBtb2RlIHByaW9yIHRvIHN0YXRpb24gYXNzb2NpYXRpb24gYW5kIGRlZmVycmluZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gdXBsb2FkIHVudGlsIGFzc29jaWF0aW9uIGNvbXBsZXRlcy4gSXQgaW50cm9kdWNlcyBuZXcga2V5IHN0YXRlIGZsYWdzLCB1cGRhdGVzIGtleSB1cGxvYWQgbG9naWMsIGFuZCBhZGRzIGEgbG9ja2RlcCBhc3NlcnRpb24gaW4gcmVhY2hhYmxlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgYW5kIHZpcnR1YWwgd2lyZWxlc3MgZGV2aWNlcyAoZS5nLiBtYWM4MDIxMV9od3NpbSksIG1ha2luZyBpdCBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MDo1Ni43NzE3Mjk2NjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDQxODM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE3NDZjMzBlMjcwNGQ1OWJhYTA3NWVlZjNlNTBhODk3NDU0YWQ1NjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAwMzo1MDo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmNcXG5pbmRleCAyM2Y0ZjllYzg2ZDBhLi5mZjk5M2E3YTllNDQxIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9jZmcuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9jZmcuY1xcbkBAIC02NjYsNyArNjY2LDE1IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0XFx0a2V5LVxcdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYO1xcbiBcXG4gXFx0aWYgKG1hY19hZGRyKSB7XFxuK1xcdFxcdGJvb2wgZGVmZXJfaHdfdXBsb2FkO1xcbitcXG4gXFx0XFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjX2FkZHIpO1xcbitcXHRcXHRkZWZlcl9od191cGxvYWQgPVxcbitcXHRcXHRcXHRzdGEgXFx1MDAyNlxcdTAwMjYgcGFpcndpc2UgXFx1MDAyNlxcdTAwMjYgIXN0YS1cXHUwMDNlc3RhLmVwcF9wZWVyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHxcXG4rXFx0XFx0XFx0IHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQhaWVlZTgwMjExX2h3X2NoZWNrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaHcsIFNXX0NSWVBUT19DT05UUk9MKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhlIEFTU09DIHRlc3QgbWFrZXMgc3VyZSB0aGUgZHJpdmVyIGlzIHJlYWR5IHRvXFxuIFxcdFxcdCAqIHJlY2VpdmUgdGhlIGtleS4gV2hlbiB3cGFfc3VwcGxpY2FudCBoYXMgcm9hbWVkXFxuQEAgLTY4MSwxNCArNjg5LDIyIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0XFx0ICogSWYgKHJlKWFzc29jaWF0aW9uIGZyYW1lIGVuY3J5cHRpb24gc3VwcG9ydCBpcyBub3QgcHJlc2VudCxcXG4gXFx0XFx0ICogY2ZnODAyMTEgd2lsbCBub3QgYWxsb3cga2V5IGluc3RhbGxhdGlvbiBpbiBub27igJFBUCBTVEEgbW9kZS5cXG4gXFx0XFx0ICpcXG4tXFx0XFx0ICogVE9ETzogYWNjZXB0IHRoZSBrZXkgaWYgd2UgaGF2ZSBhIHN0YXRpb24gZW50cnkgYW5kXFxuLVxcdFxcdCAqXFx0IGFkZCBpdCB0byB0aGUgZGV2aWNlIGFmdGVyIHRoZSBzdGF0aW9uIGFzc29jaWF0ZXMuXFxuK1xcdFxcdCAqIEFQLXNpZGUgRlQgbWF5IGFsc28gaW5zdGFsbCBhIHBhaXJ3aXNlIGtleSBiZWZvcmUgdGhlXFxuK1xcdFxcdCAqIHN0YXRpb24gaXMgYXNzb2NpYXRlZC4gSWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXFxuK1xcdFxcdCAqIGFsbG93ZWQsIGtlZXAgaXQgaW4gbWFjODAyMTEgYW5kIHVwbG9hZCBpdCBhZnRlciB0aGUgc3RhdGlvblxcbitcXHRcXHQgKiByZWFjaGVzIEFTU09DLiBEcml2ZXJzIHdpdGggU1dfQ1JZUFRPX0NPTlRST0wgY2Fubm90IHVzZSB0aGlzXFxuK1xcdFxcdCAqIHBhdGggc2luY2Ugb25seSB0aGVpciBzZXRfa2V5IHJldHVybiB2YWx1ZSBjYW4gcGVybWl0IHNvZnR3YXJlXFxuK1xcdFxcdCAqIGNyeXB0by5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmICghc3RhIHx8ICghc3RhLVxcdTAwM2VzdGEuZXBwX3BlZXIgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSkpIHtcXG4rXFx0XFx0XFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgICFkZWZlcl9od191cGxvYWQpKSB7XFxuIFxcdFxcdFxcdGllZWU4MDIxMV9rZXlfZnJlZV91bnVzZWQoa2V5KTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChkZWZlcl9od191cGxvYWQpXFxuK1xcdFxcdFxcdGtleS1cXHUwMDNlZmxhZ3MgfD0gS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEO1xcbiBcXHR9XFxuIFxcbiBcXHRzd2l0Y2ggKHNkYXRhLVxcdTAwM2V2aWYudHlwZSkge1xcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmMgYi9uZXQvbWFjODAyMTEva2V5LmNcXG5pbmRleCBmNDVlNzkyYWJlZGU1Li43NzRhOTJiYTdiZDhjIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9rZXkuY1xcbkBAIC0xNDQsNiArMTQ0LDE1IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChrZXktXFx1MDAzZWZsYWdzIFxcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEtleXMgYXJlIG9ubHkgZGVmZXJyZWQgaWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXFxuK1xcdFxcdCAqIGFsbG93ZWQuIExlYXZlIHJldCBhcyAtRU9QTk9UU1VQUCBzbyB0aGUgbm9ybWFsIGZhbGxiYWNrIHBhdGhcXG4rXFx0XFx0ICogaXMgdXNlZCB3aXRob3V0IHByZXRlbmRpbmcgdGhlIGRyaXZlciByZXR1cm5lZCAxLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICgha2V5LVxcdTAwM2Vsb2NhbC1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfa2V5KVxcbiBcXHRcXHRnb3RvIG91dF91bnN1cHBvcnRlZDtcXG4gXFxuQEAgLTk5Nyw2ICsxMDA2LDI4IEBAIHZvaWQgaWVlZTgwMjExX3JlZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuIFxcdH1cXG4gfVxcbiBcXG4rdm9pZCBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLVxcdTAwM2Vsb2NhbDtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTtcXG4rXFx0aW50IGksIHJldDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X3dpcGh5KGxvY2FsLVxcdTAwM2Vody53aXBoeSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShzdGEtXFx1MDAzZXB0ayk7IGkrKykge1xcbitcXHRcXHRrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlaHcud2lwaHksIHN0YS1cXHUwMDNlcHRrW2ldKTtcXG4rXFx0XFx0aWYgKCFrZXkgfHwgIShrZXktXFx1MDAzZWZsYWdzIFxcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRrZXktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5LRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ7XFxuK1xcdFxcdHJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHNkYXRhX2VycihrZXktXFx1MDAzZXNkYXRhLFxcbitcXHRcXHRcXHRcXHQgIFxcXCJmYWlsZWQgdG8gZW5hYmxlIGRlZmVycmVkIGtleSAoJWQsICVwTSk6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgIGtleS1cXHUwMDNlY29uZi5rZXlpZHgsIHN0YS1cXHUwMDNlc3RhLmFkZHIsIHJldCk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gaWVlZTgwMjExX2tleV9pdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRcXHQgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmggYi9uZXQvbWFjODAyMTEva2V5LmhcXG5pbmRleCA4MjZlNGU5Mzg3YzU1Li45N2QzYmJjZjBhYzIxIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaFxcbisrKyBiL25ldC9tYWM4MDIxMS9rZXkuaFxcbkBAIC0zMiwxMCArMzIsMTMgQEAgc3RydWN0IHN0YV9pbmZvO1xcbiAgKiBAS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU6IEluZGljYXRlcyB0aGF0IHRoaXMga2V5IGlzIHByZXNlbnRcXG4gICpcXHRpbiB0aGUgaGFyZHdhcmUgZm9yIFRYIGNyeXB0byBoYXJkd2FyZSBhY2NlbGVyYXRpb24uXFxuICAqIEBLRVlfRkxBR19UQUlOVEVEOiBLZXkgaXMgdGFpbnRlZCBhbmQgcGFja2V0cyBzaG91bGQgYmUgZHJvcHBlZC5cXG4rICogQEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDogS2V5IHVwbG9hZCBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgc3RhdGlvblxcbisgKlxcdGlzIGFzc29jaWF0ZWQuXFxuICAqL1xcbiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF9rZXlfZmxhZ3Mge1xcbiBcXHRLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRVxcdD0gQklUKDApLFxcbiBcXHRLRVlfRkxBR19UQUlOVEVEXFx0XFx0PSBCSVQoMSksXFxuK1xcdEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRFxcdD0gQklUKDIpLFxcbiB9O1xcbiBcXG4gZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfdGtpcF9zdGF0ZSB7XFxuQEAgLTE2NSw2ICsxNjgsNyBAQCB2b2lkIGllZWU4MDIxMV9mcmVlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdFxcdCBib29sIGZvcmNlX3N5bmNocm9uaXplKTtcXG4gdm9pZCBpZWVlODAyMTFfZnJlZV9zdGFfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7XFxuK3ZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7XFxuIHZvaWQgaWVlZTgwMjExX3JlZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpO1xcbiBpbnQgaWVlZTgwMjExX2tleV9zd2l0Y2hfbGlua3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGRlbF9saW5rc19tYXNrLFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXFxuaW5kZXggZmRmMDBjYmY0OWQ4Yi4uNzUzZGNkZDkwNzAxMSAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uY1xcbisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXFxuQEAgLTE0NjgsNiArMTQ2OCw3IEBAIHN0YXRpYyBpbnQgX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuIFxcdGNhc2UgSUVFRTgwMjExX1NUQV9BU1NPQzpcXG4gXFx0XFx0aWYgKHN0YS1cXHUwMDNlc3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSCkge1xcbiBcXHRcXHRcXHRzZXRfYml0KFdMQU5fU1RBX0FTU09DLCBcXHUwMDI2c3RhLVxcdTAwM2VfZmxhZ3MpO1xcbitcXHRcXHRcXHRpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0YSk7XFxuIFxcdFxcdFxcdHN0YS1cXHUwMDNlYXNzb2NfYXQgPSBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcXG4gXFx0XFx0XFx0aWYgKHJlY2FsYykge1xcbiBcXHRcXHRcXHRcXHRpZWVlODAyMTFfcmVjYWxjX21pbl9jaGFuZGVmKHN0YS1cXHUwMDNlc2RhdGEsIC0xKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTA6NTcuMjU2ODM0ODE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NzE3MTIwMDU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfYWRkX2tleVwiLFxuICAgIFwiaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c1wiLFxuICAgIFwiaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxcIixcbiAgICBcIl9zdGFfaW5mb19tb3ZlX3N0YXRlXCIsXG4gICAgXCJzdGFfaW5mb19tb3ZlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWFjODAyMTEga2V5IGhhbmRsaW5nIGJ5IGFsbG93aW5nIHBhaXJ3aXNlIGtleSBpbnN0YWxsYXRpb24gaW4gQVAgbW9kZSBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uIGFuZCBkZWZlcnJpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHVwbG9hZCB1bnRpbCBhc3NvY2lhdGlvbiBjb21wbGV0ZXMuIEl0IGludHJvZHVjZXMgbmV3IGtleSBzdGF0ZSBmbGFncywgdXBkYXRlcyBrZXkgdXBsb2FkIGxvZ2ljLCBhbmQgYWRkcyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGluIHJlYWNoYWJsZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4gbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNzQ2YzMwZTI3MDRkNTliYWEwNzVlZWYzZTUwYTg5NzQ1NGFkNTY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwMzo1MDo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuY1xuaW5kZXggMjNmNGY5ZWM4NmQwYS4uZmY5OTNhN2E5ZTQ0MSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9jZmcuY1xuKysrIGIvbmV0L21hYzgwMjExL2NmZy5jXG5AQCAtNjY2LDcgKzY2NiwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYO1xuIFxuIFx0aWYgKG1hY19hZGRyKSB7XG4rXHRcdGJvb2wgZGVmZXJfaHdfdXBsb2FkO1xuK1xuIFx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7XG4rXHRcdGRlZmVyX2h3X3VwbG9hZCA9XG4rXHRcdFx0c3RhIFx1MDAyNlx1MDAyNiBwYWlyd2lzZSBcdTAwMjZcdTAwMjYgIXN0YS1cdTAwM2VzdGEuZXBwX3BlZXIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0KHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8XG4rXHRcdFx0IHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCFpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2bG9jYWwtXHUwMDNlaHcsIFNXX0NSWVBUT19DT05UUk9MKTtcbiBcdFx0LypcbiBcdFx0ICogVGhlIEFTU09DIHRlc3QgbWFrZXMgc3VyZSB0aGUgZHJpdmVyIGlzIHJlYWR5IHRvXG4gXHRcdCAqIHJlY2VpdmUgdGhlIGtleS4gV2hlbiB3cGFfc3VwcGxpY2FudCBoYXMgcm9hbWVkXG5AQCAtNjgxLDE0ICs2ODksMjIgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHQgKiBJZiAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50LFxuIFx0XHQgKiBjZmc4MDIxMSB3aWxsIG5vdCBhbGxvdyBrZXkgaW5zdGFsbGF0aW9uIGluIG5vbuKAkUFQIFNUQSBtb2RlLlxuIFx0XHQgKlxuLVx0XHQgKiBUT0RPOiBhY2NlcHQgdGhlIGtleSBpZiB3ZSBoYXZlIGEgc3RhdGlvbiBlbnRyeSBhbmRcbi1cdFx0ICpcdCBhZGQgaXQgdG8gdGhlIGRldmljZSBhZnRlciB0aGUgc3RhdGlvbiBhc3NvY2lhdGVzLlxuK1x0XHQgKiBBUC1zaWRlIEZUIG1heSBhbHNvIGluc3RhbGwgYSBwYWlyd2lzZSBrZXkgYmVmb3JlIHRoZVxuK1x0XHQgKiBzdGF0aW9uIGlzIGFzc29jaWF0ZWQuIElmIGF1dG9tYXRpYyBzb2Z0d2FyZSBmYWxsYmFjayBpc1xuK1x0XHQgKiBhbGxvd2VkLCBrZWVwIGl0IGluIG1hYzgwMjExIGFuZCB1cGxvYWQgaXQgYWZ0ZXIgdGhlIHN0YXRpb25cbitcdFx0ICogcmVhY2hlcyBBU1NPQy4gRHJpdmVycyB3aXRoIFNXX0NSWVBUT19DT05UUk9MIGNhbm5vdCB1c2UgdGhpc1xuK1x0XHQgKiBwYXRoIHNpbmNlIG9ubHkgdGhlaXIgc2V0X2tleSByZXR1cm4gdmFsdWUgY2FuIHBlcm1pdCBzb2Z0d2FyZVxuK1x0XHQgKiBjcnlwdG8uXG4gXHRcdCAqL1xuIFx0XHRpZiAoIXN0YSB8fCAoIXN0YS1cdTAwM2VzdGEuZXBwX3BlZXIgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSkpIHtcbitcdFx0XHQgICAgICF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgIWRlZmVyX2h3X3VwbG9hZCkpIHtcbiBcdFx0XHRpZWVlODAyMTFfa2V5X2ZyZWVfdW51c2VkKGtleSk7XG4gXHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHRcdH1cbitcbitcdFx0aWYgKGRlZmVyX2h3X3VwbG9hZClcbitcdFx0XHRrZXktXHUwMDNlZmxhZ3MgfD0gS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEO1xuIFx0fVxuIFxuIFx0c3dpdGNoIChzZGF0YS1cdTAwM2V2aWYudHlwZSkge1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuY1xuaW5kZXggZjQ1ZTc5MmFiZWRlNS4uNzc0YTkyYmE3YmQ4YyAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuY1xuKysrIGIvbmV0L21hYzgwMjExL2tleS5jXG5AQCAtMTQ0LDYgKzE0NCwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0aWYgKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEtleXMgYXJlIG9ubHkgZGVmZXJyZWQgaWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXG4rXHRcdCAqIGFsbG93ZWQuIExlYXZlIHJldCBhcyAtRU9QTk9UU1VQUCBzbyB0aGUgbm9ybWFsIGZhbGxiYWNrIHBhdGhcbitcdFx0ICogaXMgdXNlZCB3aXRob3V0IHByZXRlbmRpbmcgdGhlIGRyaXZlciByZXR1cm5lZCAxLlxuK1x0XHQgKi9cbitcdFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XG4rXHR9XG4rXG4gXHRpZiAoIWtleS1cdTAwM2Vsb2NhbC1cdTAwM2VvcHMtXHUwMDNlc2V0X2tleSlcbiBcdFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XG4gXG5AQCAtOTk3LDYgKzEwMDYsMjggQEAgdm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiBcdH1cbiB9XG4gXG4rdm9pZCBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLVx1MDAzZWxvY2FsO1xuK1x0c3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF93aXBoeShsb2NhbC1cdTAwM2Vody53aXBoeSk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHN0YS1cdTAwM2VwdGspOyBpKyspIHtcbitcdFx0a2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXHUwMDNlaHcud2lwaHksIHN0YS1cdTAwM2VwdGtbaV0pO1xuK1x0XHRpZiAoIWtleSB8fCAhKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0a2V5LVx1MDAzZWZsYWdzIFx1MDAyNj0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcbitcdFx0cmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRzZGF0YV9lcnIoa2V5LVx1MDAzZXNkYXRhLFxuK1x0XHRcdFx0ICBcImZhaWxlZCB0byBlbmFibGUgZGVmZXJyZWQga2V5ICglZCwgJXBNKTogJWRcXG5cIixcbitcdFx0XHRcdCAga2V5LVx1MDAzZWNvbmYua2V5aWR4LCBzdGEtXHUwMDNlc3RhLmFkZHIsIHJldCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gaWVlZTgwMjExX2tleV9pdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaFxuaW5kZXggODI2ZTRlOTM4N2M1NS4uOTdkM2JiY2YwYWMyMSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaFxuKysrIGIvbmV0L21hYzgwMjExL2tleS5oXG5AQCAtMzIsMTAgKzMyLDEzIEBAIHN0cnVjdCBzdGFfaW5mbztcbiAgKiBAS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU6IEluZGljYXRlcyB0aGF0IHRoaXMga2V5IGlzIHByZXNlbnRcbiAgKlx0aW4gdGhlIGhhcmR3YXJlIGZvciBUWCBjcnlwdG8gaGFyZHdhcmUgYWNjZWxlcmF0aW9uLlxuICAqIEBLRVlfRkxBR19UQUlOVEVEOiBLZXkgaXMgdGFpbnRlZCBhbmQgcGFja2V0cyBzaG91bGQgYmUgZHJvcHBlZC5cbisgKiBAS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEOiBLZXkgdXBsb2FkIGlzIGRlZmVycmVkIHVudGlsIHRoZSBzdGF0aW9uXG4rICpcdGlzIGFzc29jaWF0ZWQuXG4gICovXG4gZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfa2V5X2ZsYWdzIHtcbiBcdEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFXHQ9IEJJVCgwKSxcbiBcdEtFWV9GTEFHX1RBSU5URURcdFx0PSBCSVQoMSksXG4rXHRLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQURcdD0gQklUKDIpLFxuIH07XG4gXG4gZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfdGtpcF9zdGF0ZSB7XG5AQCAtMTY1LDYgKzE2OCw3IEBAIHZvaWQgaWVlZTgwMjExX2ZyZWVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgYm9vbCBmb3JjZV9zeW5jaHJvbml6ZSk7XG4gdm9pZCBpZWVlODAyMTFfZnJlZV9zdGFfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0XHQgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbit2b2lkIGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuIHZvaWQgaWVlZTgwMjExX3JlZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpO1xuIGludCBpZWVlODAyMTFfa2V5X3N3aXRjaF9saW5rcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBkZWxfbGlua3NfbWFzayxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXG5pbmRleCBmZGYwMGNiZjQ5ZDhiLi43NTNkY2RkOTA3MDExIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcbisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXG5AQCAtMTQ2OCw2ICsxNDY4LDcgQEAgc3RhdGljIGludCBfc3RhX2luZm9fbW92ZV9zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdGNhc2UgSUVFRTgwMjExX1NUQV9BU1NPQzpcbiBcdFx0aWYgKHN0YS1cdTAwM2VzdGFfc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9BVVRIKSB7XG4gXHRcdFx0c2V0X2JpdChXTEFOX1NUQV9BU1NPQywgXHUwMDI2c3RhLVx1MDAzZV9mbGFncyk7XG4rXHRcdFx0aWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdGEpO1xuIFx0XHRcdHN0YS1cdTAwM2Vhc3NvY19hdCA9IGt0aW1lX2dldF9ib290dGltZV9ucygpO1xuIFx0XHRcdGlmIChyZWNhbGMpIHtcbiBcdFx0XHRcdGllZWU4MDIxMV9yZWNhbGNfbWluX2NoYW5kZWYoc3RhLVx1MDAzZXNkYXRhLCAtMSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MDo1Ny4yNTY4MzY2NThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDM1MzczMzYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2ggc2VyaWVzLiBGcm9tIHRoZSBmaWxlIHRvdWNoZXMg4oCTIGBuZXQvbWFjODAyMTEvY2ZnLmNgLCBgbmV0L21hYzgwMjExL2tleS5jYCwgYG5ldC9tYWM4MDIxMS9rZXkuaGAsIGFuZCBgbmV0L21hYzgwMjExL3N0YV9pbmZvLmNgIOKAkyBpdCdzIGNsZWFybHkgZGlnZ2luZyBpbnRvIHRoZSBrZXkgbWFuYWdlbWVudCBhbmQgc3RhdGlvbiBpbmZvcm1hdGlvbiB3aXRoaW4gbWFjODAyMTEsIHNwZWNpZmljYWxseSBgaWVlZTgwMjExX2FkZF9rZXlgLCBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgLCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AsIGFuZCBgX3N0YV9pbmZvX21vdmVfc3RhdGVgLiBUaGlzIGhpbnRzIGF0IHBvdGVudGlhbCBjaGFuZ2VzIHJlbGF0ZWQgdG8gaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mIGtleSBvcGVyYXRpb25zIG9yIHN0YXRpb24gc3RhdGUgdHJhbnNpdGlvbnMuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBhbHdheXMgcmVwcm9kdWNpYmlsaXR5LCBlc3BlY2lhbGx5IGluIGEga2VybmVsIGNvbnRleHQuIElzIHRoaXMgc29tZXRoaW5nIEkgY2FuIHRyaWdnZXIgYW5kIGRlYnVnIGluIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudD8gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHF1aWNrIGFuc3dlciBpcyBsaWtlbHkgeWVzLCB0aGFua3MgdG8gYG1hYzgwMjExX2h3c2ltYCwgYG5sODAyMTFgLCBgbmV0bGlua2AsIGFuZCBgY2ZnODAyMTFgLiBTeXprYWxsZXIgYW5kIFFFTVUgc2hvdWxkIHByb3ZpZGUgYSB2aWFibGUgcGF0aCBoZXJlLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkgdGhvdWdoLlxuXG5GaW5hbGx5LCBsZXQncyBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0ncyBjdXJyZW50IHN0YXRlLiBUaW1lIGZvciBzb21lIHF1aWNrIGNoZWNrcy4gSSdsbCByZWFjaCBmb3IgYGdyZXBwZXJgIGFuZCBzb21lIGZpbGUgcmVhZHMgdG8gc2VlIGhvdyBtYWM4MDIxMSBpcyBzZXQgdXAgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBkZXRlcm1pbmUgaW1wYWN0IGFuZCB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MDcuNjEwNTczNDYxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTA3NTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNDAtXFxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNzgtXFxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXFxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCJWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIlZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjgyLVxcdGJvb2wgXFxcIlZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXFxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cXHRib29sIFxcXCJFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cXHRpbnQgXFxcIlN0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcXFwiIGlmIE1BQzgwMjExX0RFQlVHX01FTlVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MDcuNzY5NjU3MDg5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE0MzMwNTE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1BQzgwMjExIERlcGVuZGVuY2llcyBpbiBLY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgS2NvbmZpZyBmb3IgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIE1BQzgwMjExLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zIGFyZSBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0bywgb3IgcGVyaGFwcyBjb25kaXRpb25hbGx5IHJlcXVpcmVkIGJ5LCB0aGUgTUFDODAyMTEgc3Vic3lzdGVtLiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gcmVjZW50IGRlYnVnZ2luZyBlZmZvcnRzLiBJIHdhbnQgdG8gc2VlIGlmIGEgY29uZmlndXJhdGlvbiBvcHRpb24gSSdtIGludGVyZXN0ZWQgaW4gaXMgYmVpbmcgdHJpZ2dlcmVkIGFzIGEgcmVzdWx0IG9mIGEgZGlyZWN0IG9yIGluZGlyZWN0IGRlcGVuZGVuY3kgZnJvbSBNQUM4MDIxMSwgb3IgcGVyaGFwcyBiZWluZyBtaXNzZWQgYXMgYSByZXN1bHQgb2YgYSBoaWRkZW4gb25lLiBJ4oCZbSB0aGlua2luZyBhYm91dCBsb29raW5nIGF0IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBkcml2ZXJzLCBuZXR3b3JraW5nIGNvcmUgY29tcG9uZW50cywgYW5kIGFueSByZWxldmFudCBzZWN1cml0eSBvciBwZXJmb3JtYW5jZSByZWxhdGVkIHNldHRpbmdzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIEtjb25maWcgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSBlZmZpY2llbnQga2VybmVsIGN1c3RvbWl6YXRpb24sIGRyaXZlciBwb3J0aW5nLCBhbmQgZGVidWdnaW5nIGVmZm9ydHMgd2hlbiBkZWFsaW5nIHdpdGggd2lyZWxlc3MgbmV0d29ya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjA5LjkxMjk2NjIyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xcbiAgMjI6XFx0XFx0Ym9vbFxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcXG4gIDI1OlxcdFxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MDkuOTEzMDM5MDQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2ODczMDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjpcblxuKipBbmFseXppbmcgYG5ldC9tYWM4MDIxMS9jZmcuY2AgYW5kIGBpZWVlODAyMTFfYWRkX2tleWAqKlxuXG5SaWdodCwgc28gdGhleSB3YW50IG1lIHRvIGxvb2sgYXQgYG5ldC9tYWM4MDIxMS9jZmcuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBpZWVlODAyMTFfYWRkX2tleWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3Mgd2hlcmUga2V5IG1hbmFnZW1lbnQgd2l0aGluIG1hYzgwMjExIGlzIGhhbmRsZWQsIG1ha2VzIHNlbnNlLlwiIFRoaXMgcHJvYmFibHkgaW52b2x2ZXMgdGhlIGNvbmZpZ3VyYXRpb24gb2Ygc2VjdXJpdHkga2V5cyBmb3IgdGhlIHdpcmVsZXNzIG5ldHdvcmsgaW50ZXJmYWNlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgY2ZnLmNgIGlzIGxpa2VseSB3aGVyZSBhIGxvdCBvZiB0aGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gaGFwcGVucywgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGhvdyBrZXlzIGFyZSBzZXQgYW5kIGFkZGVkLiBJIGJldCB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgbWF5YmUgZGlyZWN0bHkgdXNpbmcgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBvciB2aWEgYSBsb3dlci1sZXZlbCBkcml2ZXIgY2FsbGJhY2suIEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHRoYXQuIEkgZXhwZWN0IHRoZXJlIGlzIHNvbWUga2V5IGRlcml2YXRpb24gb3IgZ2VuZXJhdGlvbiBoYXBwZW5pbmcuIEkgYW50aWNpcGF0ZSBoYW5kbGluZyBvZiB2YXJpb3VzIHNlY3VyaXR5IHByb3RvY29scyBsaWtlIFdFUCwgV1BBLCBXUEEyLCBXUEEzIGFuZCBldmVuIG1heWJlIG9sZGVyIHByb3RvY29scy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCB0aW1pbmcgdnVsbmVyYWJpbGl0aWVzLCBhbmQgYW55IG9idmlvdXMgc2VjdXJpdHkgaXNzdWVzIGFyb3VuZCBrZXkgc3RvcmFnZSBvciBoYW5kbGluZy4gQWxzbywgd2hhdCBraW5kIG9mIGtleSB0eXBlcyBhcmUgc3VwcG9ydGVkPyBXRVAga2V5cz8gVEtJUCBrZXlzPyBBRVMga2V5cz8gRGlmZmVyZW50IGtleSBsZW5ndGhzPyBIb3cgYXJlIHRoZXNlIHRoaW5ncyBoYW5kbGVkLCBhbmQgd2hhdCBhcmUgdGhlIGFzc29jaWF0ZWQgY2hlY2tzPyBBbHJpZ2h0LCBsZXQncyBvcGVuIHVwIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjI0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MToxMi42ODE3NzE4OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjA0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2NmZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY2MDpcXHRcXHRcXHRrZXktXFx1MDAzZWNvbmYubGlua19pZCA9IC0xO1xcbiA2NjE6XFx0XFx0fSBlbHNlIHtcXG4gNjYyOlxcdFxcdFxcdGtleS1cXHUwMDNlY29uZi5saW5rX2lkID0gbGluay1cXHUwMDNlbGlua19pZDtcXG4gNjYzOlxcdFxcdH1cXG4gNjY0OlxcdFxcbiA2NjU6XFx0XFx0aWYgKHBhcmFtcy1cXHUwMDNlbW9kZSA9PSBOTDgwMjExX0tFWV9OT19UWClcXG4gNjY2OlxcdFxcdFxcdGtleS1cXHUwMDNlY29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfTk9fQVVUT19UWDtcXG4gNjY3OlxcdFxcbiA2Njg6XFx0XFx0aWYgKG1hY19hZGRyKSB7XFxuIDY2OTpcXHRcXHRcXHRib29sIGRlZmVyX2h3X3VwbG9hZDtcXG4gNjcwOlxcdFxcbiA2NzE6XFx0XFx0XFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjX2FkZHIpO1xcbiA2NzI6XFx0XFx0XFx0ZGVmZXJfaHdfdXBsb2FkID1cXG4gNjczOlxcdFxcdFxcdFxcdHN0YSBcXHUwMDI2XFx1MDAyNiBwYWlyd2lzZSBcXHUwMDI2XFx1MDAyNiAhc3RhLVxcdTAwM2VzdGEuZXBwX3BlZXIgXFx1MDAyNlxcdTAwMjZcXG4gNjc0OlxcdFxcdFxcdFxcdCF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpIFxcdTAwMjZcXHUwMDI2XFxuIDY3NTpcXHRcXHRcXHRcXHQoc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8XFxuIDY3NjpcXHRcXHRcXHRcXHQgc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIFxcdTAwMjZcXHUwMDI2XFxuIDY3NzpcXHRcXHRcXHRcXHQhaWVlZTgwMjExX2h3X2NoZWNrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaHcsIFNXX0NSWVBUT19DT05UUk9MKTtcXG4gNjc4OlxcdFxcdFxcdC8qXFxuIDY3OTpcXHRcXHRcXHQgKiBUaGUgQVNTT0MgdGVzdCBtYWtlcyBzdXJlIHRoZSBkcml2ZXIgaXMgcmVhZHkgdG9cXG4gNjgwOlxcdFxcdFxcdCAqIHJlY2VpdmUgdGhlIGtleS4gV2hlbiB3cGFfc3VwcGxpY2FudCBoYXMgcm9hbWVkXFxuIDY4MTpcXHRcXHRcXHQgKiB1c2luZyBGVCwgaXQgYXR0ZW1wdHMgdG8gc2V0IHRoZSBrZXkgYmVmb3JlXFxuIDY4MjpcXHRcXHRcXHQgKiBhc3NvY2lhdGlvbiBoYXMgY29tcGxldGVkLCB0aGlzIHJlamVjdHMgdGhhdCBhdHRlbXB0XFxuIDY4MzpcXHRcXHRcXHQgKiBzbyBpdCB3aWxsIHNldCB0aGUga2V5IGFnYWluIGFmdGVyIGFzc29jaWF0aW9uLlxcbiA2ODQ6XFx0XFx0XFx0ICpcXG4gNjg1OlxcdFxcdFxcdCAqIFdpdGggKHJlKWFzc29jaWF0aW9uIGZyYW1lIGVuY3J5cHRpb24gZW5hYmxlZCwgY2ZnODAyMTFcXG4gNjg2OlxcdFxcdFxcdCAqIG1heSBkZWxpdmVyIGtleXMgdG8gbWFjODAyMTEgYmVmb3JlIHRoZSBzdGF0aW9uIGhhc1xcbiA2ODc6XFx0XFx0XFx0ICogYXNzb2NpYXRlZC4gSW4gdGhhdCBjYXNlLCBhY2NlcHQgdGhlIGtleSBpZiB0aGUgc3RhdGlvblxcbiA2ODg6XFx0XFx0XFx0ICogaXMgYW4gRW5oYW5jZWQgUHJpdmFjeSBQcm90ZWN0aW9uIChFUFApIHBlZXIuXFxuIDY4OTpcXHRcXHRcXHQgKiBJZiAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50LFxcbiA2OTA6XFx0XFx0XFx0ICogY2ZnODAyMTEgd2lsbCBub3QgYWxsb3cga2V5IGluc3RhbGxhdGlvbiBpbiBub27igJFBUCBTVEEgbW9kZS5cXG4gNjkxOlxcdFxcdFxcdCAqXFxuIDY5MjpcXHRcXHRcXHQgKiBBUC1zaWRlIEZUIG1heSBhbHNvIGluc3RhbGwgYSBwYWlyd2lzZSBrZXkgYmVmb3JlIHRoZVxcbiA2OTM6XFx0XFx0XFx0ICogc3RhdGlvbiBpcyBhc3NvY2lhdGVkLiBJZiBhdXRvbWF0aWMgc29mdHdhcmUgZmFsbGJhY2sgaXNcXG4gNjk0OlxcdFxcdFxcdCAqIGFsbG93ZWQsIGtlZXAgaXQgaW4gbWFjODAyMTEgYW5kIHVwbG9hZCBpdCBhZnRlciB0aGUgc3RhdGlvblxcbiA2OTU6XFx0XFx0XFx0ICogcmVhY2hlcyBBU1NPQy4gRHJpdmVycyB3aXRoIFNXX0NSWVBUT19DT05UUk9MIGNhbm5vdCB1c2UgdGhpc1xcbiA2OTY6XFx0XFx0XFx0ICogcGF0aCBzaW5jZSBvbmx5IHRoZWlyIHNldF9rZXkgcmV0dXJuIHZhbHVlIGNhbiBwZXJtaXQgc29mdHdhcmVcXG4gNjk3OlxcdFxcdFxcdCAqIGNyeXB0by5cXG4gNjk4OlxcdFxcdFxcdCAqL1xcbiA2OTk6XFx0XFx0XFx0aWYgKCFzdGEgfHwgKCFzdGEtXFx1MDAzZXN0YS5lcHBfcGVlciBcXHUwMDI2XFx1MDAyNlxcbiA3MDA6XFx0XFx0XFx0XFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSBcXHUwMDI2XFx1MDAyNlxcbiA3MDE6XFx0XFx0XFx0XFx0ICAgICAhZGVmZXJfaHdfdXBsb2FkKSkge1xcbiA3MDI6XFx0XFx0XFx0XFx0aWVlZTgwMjExX2tleV9mcmVlX3VudXNlZChrZXkpO1xcbiA3MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDcwNDpcXHRcXHRcXHR9XFxuIDcwNTpcXHRcXG4gNzA2OlxcdFxcdFxcdGlmIChkZWZlcl9od191cGxvYWQpXFxuIDcwNzpcXHRcXHRcXHRcXHRrZXktXFx1MDAzZWZsYWdzIHw9IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcXG4gNzA4OlxcdFxcdH1cXG4gNzA5OlxcdFxcbiA3MTA6XFx0XFx0c3dpdGNoIChzZGF0YS1cXHUwMDNldmlmLnR5cGUpIHtcXG4gNzExOlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcXG4gNzEyOlxcdFxcdFxcdGlmIChzZGF0YS1cXHUwMDNldS5tZ2QubWZwICE9IElFRUU4MDIxMV9NRlBfRElTQUJMRUQpXFxuIDcxMzpcXHRcXHRcXHRcXHRrZXktXFx1MDAzZWNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1JYX01HTVQ7XFxuIDcxNDpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MTIuNjgyMDM0MTc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2NTU5Mjg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGluc3RydWN0aW9ucywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE1BQzgwMjExIEtleSBNYW5hZ2VtZW50IENvZGUqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBuZXQvbWFjODAyMTEva2V5LmNgIGZpbGUgbm93LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBrZXkgdXBsb2FkIHByb2Nlc3MsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBoYXJkd2FyZSBhY2NlbGVyYXRpb24uIEkgd2FudCB0byB6ZXJvIGluIG9uIGhvdyBkZWZlcnJlZCBTVEEga2V5cyBhcmUgaGFuZGxlZCwgYW5kIGhvdyB3ZSBlbmFibGUgdGhhdCBoYXJkd2FyZSBhY2NlbGVyYXRpb24uIFRoZSBrZXkgZnVuY3Rpb25zIEknbGwgYmUgbG9va2luZyBhdCB3aWxsIGJlIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCBhbmQgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYC4gSSBhbnRpY2lwYXRlIHRoZXJlIGFyZSBhIGxvdCBvZiBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgaW4gdGhlcmUsIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IHdlIG1hbmFnZSBrZXkgY29udGV4dHMsIGhvdyB0aGV5J3JlIHB1c2hlZCB0byB0aGUgaGFyZHdhcmUsIGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhhdC4gSSBiZXQgdGhlcmUgd2lsbCBiZSBzb21lIGNydWNpYWwgbG9ja2luZyBjb25zaWRlcmF0aW9ucyB0aGVyZSB0b28sIHJlbGF0ZWQgdG8gdGhlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIGtleSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBoYXJkd2FyZSBhbmQgdGhlIHNvZnR3YXJlLiBJdOKAmXMgYWxzbyBsaWtlbHkgdGhhdCB0aGUgZGVmZXJyYWwgbWVjaGFuaXNtIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgYXZhaWxhYmxlIGhhcmR3YXJlIHJlc291cmNlcyDigJMgcGVyaGFwcyB0aGVyZeKAmXMgYSBsaW1pdCB0byBob3cgbWFueSBrZXlzIGNhbiBiZSBsb2FkZWQgYXQgb25jZSwgb3IgbWF5YmUgdGhlcmUgYXJlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIGtleXMuIFRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MTQuODQ3NjMwMDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9rZXkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0XFx0XFx0XFx0XFx0IElFRUU4MDIxMV9LRVlfRkxBR19SRVNFUlZFX1RBSUxST09NKSkpXFxuIDE0MTpcXHRcXHRcXHRcXHRpbmNyZW1lbnRfdGFpbHJvb21fbmVlZF9jb3VudChzZGF0YSk7XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdFxcdGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfktFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFO1xcbiAxNDQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE0NTpcXHRcXHR9XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdFxcdGlmIChrZXktXFx1MDAzZWZsYWdzIFxcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSB7XFxuIDE0ODpcXHRcXHRcXHQvKlxcbiAxNDk6XFx0XFx0XFx0ICogS2V5cyBhcmUgb25seSBkZWZlcnJlZCBpZiBhdXRvbWF0aWMgc29mdHdhcmUgZmFsbGJhY2sgaXNcXG4gMTUwOlxcdFxcdFxcdCAqIGFsbG93ZWQuIExlYXZlIHJldCBhcyAtRU9QTk9UU1VQUCBzbyB0aGUgbm9ybWFsIGZhbGxiYWNrIHBhdGhcXG4gMTUxOlxcdFxcdFxcdCAqIGlzIHVzZWQgd2l0aG91dCBwcmV0ZW5kaW5nIHRoZSBkcml2ZXIgcmV0dXJuZWQgMS5cXG4gMTUyOlxcdFxcdFxcdCAqL1xcbiAxNTM6XFx0XFx0XFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XFxuIDE1NDpcXHRcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdGlmICgha2V5LVxcdTAwM2Vsb2NhbC1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfa2V5KVxcbiAxNTc6XFx0XFx0XFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XFxuIDE1ODpcXHRcXG4gMTU5OlxcdFxcdHN0YSA9IGtleS1cXHUwMDNlc3RhO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHQvKlxcbiAxNjI6XFx0XFx0ICogQWxsb3cgaW5zdGFsbGF0aW9uIG9mIGEgcGVyLVNUQSBHVEsgaWYgcGVyLVNUQSBHVEsgaXMgc3VwcG9ydGVkXFxuIDE2MzpcXHRcXHQgKiBieSB0aGUgZHJpdmVyIG9yIHRoZSBpbnRlcmZhY2UgaXMgYSBOQU4gRGF0YSBpbnRlcmZhY2UgKGFzXFxuIDE2NDpcXHRcXHQgKiBwZXItc3RhdGlvbiBHVEtzIGFyZSByZXF1aXJlZCB0byBiZSBzdXBwb3J0ZWQgaWYgc2VjdXJlIE5BTiBpc1xcbiAxNjU6XFx0XFx0ICogc3VwcG9ydGVkKS5cXG4gMTY2OlxcdFxcdCAqL1xcbiAxNjc6XFx0XFx0aWYgKHN0YSBcXHUwMDI2XFx1MDAyNiAhKGtleS1cXHUwMDNlY29uZi5mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkgXFx1MDAyNlxcdTAwMjZcXG4gMTY4OlxcdFxcdCAgICAhKGllZWU4MDIxMV9od19jaGVjayhcXHUwMDI2a2V5LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcsIFNVUFBPUlRTX1BFUl9TVEFfR1RLKSB8fFxcbiAxNjk6XFx0XFx0ICAgICAgc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSlcXG4gMTcwOlxcdFxcdFxcdGdvdG8gb3V0X3Vuc3VwcG9ydGVkO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRpZiAoc3RhIFxcdTAwMjZcXHUwMDI2ICFzdGEtXFx1MDAzZXVwbG9hZGVkKVxcbiAxNzM6XFx0XFx0XFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikge1xcbiAxNzY6XFx0XFx0XFx0LypcXG4gMTc3OlxcdFxcdFxcdCAqIFRoZSBkcml2ZXIgZG9lc24ndCBrbm93IGFueXRoaW5nIGFib3V0IFZMQU4gaW50ZXJmYWNlcy5cXG4gMTc4OlxcdFxcdFxcdCAqIEhlbmNlLCBkb24ndCBzZW5kIEdUS3MgZm9yIFZMQU4gaW50ZXJmYWNlcyB0byB0aGUgZHJpdmVyLlxcbiAxNzk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjE0Ljg0NzczNDY0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNjkyNDQ0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gRGVmZXJyZWQgU1RBIEtleSBVcGxvYWQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyBkZWZlcnJlZCBTVEEga2V5cyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgbmV0L21hYzgwMjExL2tleS5jYCBmaWxlLiBUaGUgZnVuY3Rpb24gSSdtIHRhcmdldGluZyBpcyBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AuIFRoaXMgaGludHMgYXQgYSBwb3RlbnRpYWwgYXJlYSB3aGVyZSBrZXkgbWFuYWdlbWVudCBtaWdodCBiZSBjYXVzaW5nIHNvbWUgaGljY3VwcywgcGVyaGFwcyBkdXJpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IG9yIHJla2V5aW5nIHNjZW5hcmlvcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZXNlIGtleXMgYXJlIHF1ZXVlZCwgaGFuZGxlZCwgYW5kIHVsdGltYXRlbHkgdXBsb2FkZWQgdG8gdGhlIGhhcmR3YXJlLiBBbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgY29uY3VycmVuY3kgaXNzdWVzIGFyZSBpbW1lZGlhdGVseSBvbiBteSByYWRhci4gSSB3YW50IHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gYWxpZ25zIHdpdGggbXkgZXhwZWN0YXRpb25zIHJlZ2FyZGluZyBrZXkgZGVyaXZhdGlvbiwgaGFyZHdhcmUgbGltaXRhdGlvbnMsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MjMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjE3LjAxNjk4MjYxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2tleS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDA6XFx0XFx0aWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkge1xcbjEwMDE6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFxcdTAwMjZzZGF0YS1cXHUwMDNla2V5X2xpc3QsIGxpc3QpIHtcXG4xMDAyOlxcdFxcdFxcdFxcdGlmICghKGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLRVlfRkxBR19UQUlOVEVEKSlcXG4xMDAzOlxcdFxcdFxcdFxcdFxcdGluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTtcXG4xMDA0OlxcdFxcdFxcdFxcdGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7XFxuMTAwNTpcXHRcXHRcXHR9XFxuMTAwNjpcXHRcXHR9XFxuMTAwNzpcXHR9XFxuMTAwODpcXHRcXG4xMDA5OlxcdHZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG4xMDEwOlxcdHtcXG4xMDExOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLVxcdTAwM2Vsb2NhbDtcXG4xMDEyOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7XFxuMTAxMzpcXHRcXHRpbnQgaSwgcmV0O1xcbjEwMTQ6XFx0XFxuMTAxNTpcXHRcXHRsb2NrZGVwX2Fzc2VydF93aXBoeShsb2NhbC1cXHUwMDNlaHcud2lwaHkpO1xcbjEwMTY6XFx0XFxuMTAxNzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShzdGEtXFx1MDAzZXB0ayk7IGkrKykge1xcbjEwMTg6XFx0XFx0XFx0a2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXFx1MDAzZWh3LndpcGh5LCBzdGEtXFx1MDAzZXB0a1tpXSk7XFxuMTAxOTpcXHRcXHRcXHRpZiAoIWtleSB8fCAhKGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpKVxcbjEwMjA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTAyMTpcXHRcXG4xMDIyOlxcdFxcdFxcdGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcXG4xMDIzOlxcdFxcdFxcdHJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7XFxuMTAyNDpcXHRcXHRcXHRpZiAocmV0KVxcbjEwMjU6XFx0XFx0XFx0XFx0c2RhdGFfZXJyKGtleS1cXHUwMDNlc2RhdGEsXFxuMTAyNjpcXHRcXHRcXHRcXHRcXHQgIFxcXCJmYWlsZWQgdG8gZW5hYmxlIGRlZmVycmVkIGtleSAoJWQsICVwTSk6ICVkXFxcXG5cXFwiLFxcbjEwMjc6XFx0XFx0XFx0XFx0XFx0ICBrZXktXFx1MDAzZWNvbmYua2V5aWR4LCBzdGEtXFx1MDAzZXN0YS5hZGRyLCByZXQpO1xcbjEwMjg6XFx0XFx0fVxcbjEwMjk6XFx0fVxcbjEwMzA6XFx0XFxuMTAzMTpcXHRzdGF0aWMgdm9pZFxcbjEwMzI6XFx0aWVlZTgwMjExX2tleV9pdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbjEwMzM6XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4xMDM0OlxcdFxcdFxcdCAgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXFxuMTAzNTpcXHRcXHRcXHQgICB2b2lkICgqaXRlcikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuMTAzNjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbjEwMzc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSxcXG4xMDM5OlxcdFxcdFxcdFxcdFxcdHZvaWQgKmRhdGEpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MToxNy4wMTcwOTYwMzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExMTE1NjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgc3RhX2luZm8uY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVG8gdGFja2xlIHRoaXMsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvbWFjODAyMTEvc3RhX2luZm8uY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2Ygc3RhdGlvbiBpbmZvcm1hdGlvbiBtYW5hZ2VtZW50IGZvciB0aGUgbWFjODAyMTEgc3RhY2sgcmVzaWRlcywgYW5kIGl0J3MgYSBjcml0aWNhbCBhcmVhIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBzdGF0aW9ucyBhcmUgaGFuZGxlZC4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc3RhdGlvbiBhc3NvY2lhdGlvbiwgYXV0aGVudGljYXRpb24sIGFuZCBnZW5lcmFsIHN0YXRlIG1hbmFnZW1lbnQgdGhlcmUuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgY29ubmVjdGlvbiBkZXRhaWxzIGFuZCBhc3NvY2lhdGVkIGluZm9ybWF0aW9uIGlzIGtlcHQgaGVyZS4gTXkgZXhwZXJ0IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhhdCdzIHRoZSBjb3JyZWN0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoaXMgc3BlY2lmaWMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjIyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MToxOS4xMjgyNTQ3NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NjA6XFx0XFx0XFx0XFx0Y2xlYXJfYml0KFdMQU5fU1RBX0FTU09DLCBcXHUwMDI2c3RhLVxcdTAwM2VfZmxhZ3MpO1xcbjE0NjE6XFx0XFx0XFx0XFx0aWYgKHJlY2FsYykge1xcbjE0NjI6XFx0XFx0XFx0XFx0XFx0aWVlZTgwMjExX3JlY2FsY19taW5fY2hhbmRlZihzdGEtXFx1MDAzZXNkYXRhLCAtMSk7XFxuMTQ2MzpcXHRcXHRcXHRcXHRcXHRpZiAoIXN0YS1cXHUwMDNlc3RhLnN1cHBvcnRfcDJwX3BzKVxcbjE0NjQ6XFx0XFx0XFx0XFx0XFx0XFx0aWVlZTgwMjExX3JlY2FsY19wMnBfZ29fcHNfYWxsb3dlZChzdGEtXFx1MDAzZXNkYXRhKTtcXG4xNDY1OlxcdFxcdFxcdFxcdH1cXG4xNDY2OlxcdFxcdFxcdH1cXG4xNDY3OlxcdFxcdFxcdGJyZWFrO1xcbjE0Njg6XFx0XFx0Y2FzZSBJRUVFODAyMTFfU1RBX0FTU09DOlxcbjE0Njk6XFx0XFx0XFx0aWYgKHN0YS1cXHUwMDNlc3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSCkge1xcbjE0NzA6XFx0XFx0XFx0XFx0c2V0X2JpdChXTEFOX1NUQV9BU1NPQywgXFx1MDAyNnN0YS1cXHUwMDNlX2ZsYWdzKTtcXG4xNDcxOlxcdFxcdFxcdFxcdGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RhKTtcXG4xNDcyOlxcdFxcdFxcdFxcdHN0YS1cXHUwMDNlYXNzb2NfYXQgPSBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcXG4xNDczOlxcdFxcdFxcdFxcdGlmIChyZWNhbGMpIHtcXG4xNDc0OlxcdFxcdFxcdFxcdFxcdGllZWU4MDIxMV9yZWNhbGNfbWluX2NoYW5kZWYoc3RhLVxcdTAwM2VzZGF0YSwgLTEpO1xcbjE0NzU6XFx0XFx0XFx0XFx0XFx0aWYgKCFzdGEtXFx1MDAzZXN0YS5zdXBwb3J0X3AycF9wcylcXG4xNDc2OlxcdFxcdFxcdFxcdFxcdFxcdGllZWU4MDIxMV9yZWNhbGNfcDJwX2dvX3BzX2FsbG93ZWQoc3RhLVxcdTAwM2VzZGF0YSk7XFxuMTQ3NzpcXHRcXHRcXHRcXHR9XFxuMTQ3ODpcXHRcXHRcXHR9IGVsc2UgaWYgKHN0YS1cXHUwMDNlc3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSE9SSVpFRCkge1xcbjE0Nzk6XFx0XFx0XFx0XFx0aWVlZTgwMjExX3ZpZl9kZWNfbnVtX21jYXN0KHN0YS1cXHUwMDNlc2RhdGEpO1xcbjE0ODA6XFx0XFx0XFx0XFx0Y2xlYXJfYml0KFdMQU5fU1RBX0FVVEhPUklaRUQsIFxcdTAwMjZzdGEtXFx1MDAzZV9mbGFncyk7XFxuMTQ4MTpcXHRcXHRcXHRcXHRpZiAoc3RhLVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpXFxuMTQ4MjpcXHRcXHRcXHRcXHRcXHRpZWVlODAyMTFfbmFuX3VwZGF0ZV9uZGlfY2FycmllcihzdGEtXFx1MDAzZXNkYXRhKTtcXG4xNDgzOlxcdFxcbjE0ODQ6XFx0XFx0XFx0XFx0LypcXG4xNDg1OlxcdFxcdFxcdFxcdCAqIElmIHdlIGhhdmUgZW5jcnlwdGlvbiBvZmZsb2FkLCBmbHVzaCAoc3RhdGlvbikgcXVldWVzXFxuMTQ4NjpcXHRcXHRcXHRcXHQgKiAoYWZ0ZXIgZW5zdXJpbmcgY29uY3VycmVudCBUWCBjb21wbGV0ZWQpIHNvIHdlIHdvbid0XFxuMTQ4NzpcXHRcXHRcXHRcXHQgKiB0cmFuc21pdCBhbnl0aGluZyBsYXRlciB1bmVuY3J5cHRlZCBpZi93aGVuIGtleXMgYXJlXFxuMTQ4ODpcXHRcXHRcXHRcXHQgKiBhbHNvIHJlbW92ZWQsIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBoYXBwZW4gZGVwZW5kaW5nXFxuMTQ4OTpcXHRcXHRcXHRcXHQgKiBvbiBob3cgdGhlIGhhcmR3YXJlIG9mZmxvYWQgd29ya3MuXFxuMTQ5MDpcXHRcXHRcXHRcXHQgKi9cXG4xNDkxOlxcdFxcdFxcdFxcdGlmIChsb2NhbC1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfa2V5KSB7XFxuMTQ5MjpcXHRcXHRcXHRcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4xNDkzOlxcdFxcdFxcdFxcdFxcdGlmIChsb2NhbC1cXHUwMDNlb3BzLVxcdTAwM2VmbHVzaF9zdGEpXFxuMTQ5NDpcXHRcXHRcXHRcXHRcXHRcXHRkcnZfZmx1c2hfc3RhKGxvY2FsLCBzdGEtXFx1MDAzZXNkYXRhLCBzdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MToxOS4xMjg0MjYyOTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDgzODY5NzA3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBtYWM4MDIxMSBLZXkgSGFuZGxpbmcgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AgaW5jbHVkZXMgYSBgbG9ja2RlcF9hc3NlcnRfd2lwaHlgLCB3aGljaCBpcyBnb29kIHRvIHNlZSBmcm9tIGEgbG9ja2luZyBwZXJzcGVjdGl2ZS4gVGhpcyBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgYHN0YS1cdTAwM2VwdGtgIGFycmF5LCBpZGVudGlmaWVzIGRlZmVycmVkIGhhcmR3YXJlIHVwbG9hZCBrZXlzIGJhc2VkIG9uIHRoZSBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYCBmbGFnLCBjbGVhcnMgdGhhdCBmbGFnLCBhbmQgdGhlbiB0cmlnZ2VycyBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgLiBJIHJlbWVtYmVyIGZyb20gbG9va2luZyBhdCBgY2ZnLmNgLCB0aGF0IGBpZWVlODAyMTFfYWRkX2tleWAgc3RyYXRlZ2ljYWxseSBzZXRzIHRoaXMgYGRlZmVyX2h3X3VwbG9hZGAgZmxhZywgZm9yIEFQL0FQX1ZMQU4gY29uZmlndXJhdGlvbnMgd2hlbiBhIHN0YXRpb24gaXNuJ3QgeWV0IGFzc29jaWF0ZWQgYnV0IHdoZW4gYFNXX0NSWVBUT19DT05UUk9MYCBpc24ndCBlbmFibGVkLiBUaGlzIGZsYWcgaXMgYWJzb2x1dGVseSBjcml0aWNhbCwgYmVjYXVzZSBpbiBga2V5LmNgLCBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgIHNraXBzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpZiB0aGF0IGZsYWcgaXMgc2V0LCBlc3NlbnRpYWxseSBrZWVwaW5nIHRoaW5ncyBpbiBzb2Z0d2FyZSBjcnlwdG8gdW50aWwgdGhlIHN0YXRpb24gcmVhY2hlcyB0aGUgQVNTT0Mgc3RhdGUuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGUgaW4gYSBmdXp6aW5nIGNvbnRleHQgbGlrZSBzeXprYWxsZXI/IEZvcnR1bmF0ZWx5LCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMhIFN5emthbGxlciBpcyBrbm93biB0byBoaXQgbWFjODAyMTEgYW5kIG5sODAyMTEgd2l0aCBleHRyZW1lIHByZWp1ZGljZSwgbGV2ZXJhZ2luZyBgbmw4MDIxMWAgbmV0bGluayBjb21tYW5kcyBhbmQgbWFjODAyMTFfaHdzaW0uIENvbW1hbmRzIGxpa2UgYE5MODAyMTFfQ01EX05FV19LRVlgIGFuZCBgTkw4MDIxMV9DTURfU0VUX1NUQVRJT05gIGRpcmVjdGx5IGludm9rZSBmdW5jdGlvbnMgbGlrZSBgaWVlZTgwMjExX2FkZF9rZXlgLCBgX3N0YV9pbmZvX21vdmVfc3RhdGVgLCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AsIGFuZCBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgLlxuXG5HaXZlbiB0aGlzLCBJJ20gY29uZmlkZW50IGluIHRoZSBmb2xsb3dpbmc6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBBYnNvbHV0ZWx5ISBUaGUgY29kZSBpcyBjbGVhcmx5IHJlYWNoYWJsZS5cbiogICAqKlJlYWNoYWJsZSBDb2RlOioqIEVudGlyZWx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgLyBtYWM4MDIxMSBpbnRlcmZhY2UuXG4qICAgKipDaGFuZ2UgSW1wYWN0OioqIFRoaXMgaW50cm9kdWNlcyBuZXcgbG9naWMgYXJvdW5kIGtleSBkZWZlcnJhbCwgd2hpY2ggaW5jbHVkZXMgdGhlIGBsb2NrZGVwX2Fzc2VydF93aXBoeWAgYXNzZXJ0aW9uLCBhbmQgbGlrZWx5IG1vZGlmaWVzIHN0YXRlIG1hY2hpbmUgdHJhbnNpdGlvbnMsIHBhcnRpY3VsYXJseSBpbiBBUCBtb2RlLlxuXG5Ob3csIGxldCBtZSBleGFtaW5lIHRoZSBjb3JlIHN5bWJvbHMgdG91Y2hlZCBieSB0aGVzZSBjaGFuZ2VzLiBJJ3ZlIG5vdGVkIHRoYXQgYGllZWU4MDIxMV9hZGRfa2V5YCwgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCwgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXNgLCBhbmQgYF9zdGFfaW5mb19tb3ZlX3N0YXRlYCBhcmUgdGhlIG1haW4gZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIG9yIG5ld2x5IGludHJvZHVjZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGBfc3RhX2luZm9fbW92ZV9zdGF0ZWAgKG9yLCBgc3RhX2luZm9fbW92ZV9zdGF0ZWApIGlzIHN0YXRpYywgZXhwb3J0ZWQsIG9yIGNhbGxlZCBlbHNld2hlcmUgdG8gZnVsbHkgZ3Jhc3AgdGhlIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjIzLjk2NzEyNTYwNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3MDg5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX3N0YV9pbmZvX21vdmVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTEzMTA9c3RhdGljIGludCBfX211c3RfY2hlY2sgX19zdGFfaW5mb19kZXN0cm95X3BhcnQxKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTM5NC1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxMzk1OnN0YXRpYyBpbnQgX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTM5Ni1cXHRcXHRcXHRcXHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MTUzOD1pbnQgc3RhX2luZm9fbW92ZV9zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1NDAte1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjE1NDE6XFx0cmV0dXJuIF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgbmV3X3N0YXRlLCB0cnVlKTtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTQyLX1cXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTE1NDQ9c3RhdGljIHZvaWQgX19zdGFfaW5mb19kZXN0cm95X3BhcnQyKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBib29sIHJlY2FsYylcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1NzMtXFx0aWYgKHN0YS1cXHUwMDNlc3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSE9SSVpFRCkge1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjE1NzQ6XFx0XFx0cmV0ID0gX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FTU09DLCByZWNhbGMpO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1NzUtXFx0XFx0V0FSTl9PTl9PTkNFKHJldCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTg5LVxcdHdoaWxlIChzdGEtXFx1MDAzZXN0YV9zdGF0ZSBcXHUwMDNlIElFRUU4MDIxMV9TVEFfTk9ORSkge1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjE1OTA6XFx0XFx0cmV0ID0gX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBzdGEtXFx1MDAzZXN0YV9zdGF0ZSAtIDEsIHJlY2FsYyk7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTU5MS1cXHRcXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjI0LjAyMDgzNzE0MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA4OTA4MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYGllZWU4MDIxMV9hZGRfa2V5YCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGtleSBhZGRpdGlvbiBmdW5jdGlvbiB3b3Jrcywgc3BlY2lmaWNhbGx5IGBpZWVlODAyMTFfYWRkX2tleWAuIFJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzIHRocm91Z2guIEJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0J3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGBtYWM4MDIxMWAgZnJhbWV3b3JrLiBJIHJlY2FsbCBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHRoaXMgaW4gYG5ldC9tYWM4MDIxMS9jZmcuY2AuIEknbGwgd2FudCB0byB2ZXJpZnkgdGhhdCBgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleSguLi4pYCAob3IgYSBzaW1pbGFyIHNpZ25hdHVyZSkgaXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBib3VuZCB0byB0aGUgYG1hYzgwMjExX2NvbmZpZ19vcHMuYWRkX2tleWAgZnVuY3Rpb24gcG9pbnRlciwgb3Igc29tZXRoaW5nIGVxdWl2YWxlbnQuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBiaW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24uIExldCdzIGRpZyBpbiBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM2NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjI2LjQyOTc0OTA4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4ODQ0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX2FkZF9rZXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9jZmcuYz01ODU9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X3R4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTYxMi1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NjEzOnN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjE0LVxcdFxcdFxcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk5Mj1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTk5Ny1cXHQuc3RvcF9wMnBfZGV2aWNlID0gaWVlZTgwMjExX3N0b3BfcDJwX2RldmljZSxcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTk5ODpcXHQuYWRkX2tleSA9IGllZWU4MDIxMV9hZGRfa2V5LFxcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTk5LVxcdC5kZWxfa2V5ID0gaWVlZTgwMjExX2RlbF9rZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjI2LjQ4MTYzNjk2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjQzMzU3NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBIYXJkd2FyZSBBY2NlbGVyYXRpb24gZm9yIDgwMi4xMSBLZXkgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciA4MDIuMTEga2V5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBJJ20gYXNzdW1pbmcgaXQncyByZXNwb25zaWJsZSBmb3Igb3JjaGVzdHJhdGluZyB0aGUgb2ZmbG9hZCBvZiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBzZWN1cml0eSBrZXlzIHRvIGhhcmR3YXJlIGFjY2VsZXJhdG9ycywgcmlnaHQ/IFRoYXQncyB0aGUgb2J2aW91cyBpbnRlbnQuXG5cbkknZCBuZWVkIHRvIHF1aWNrbHkgY29uc2lkZXI6XG5cbiogICAqKlVuZGVybHlpbmcgQXNzdW1wdGlvbnM6KiogV2hhdCBhcmUgdGhlIHByZXJlcXVpc2l0ZXM/IElzIGl0IGNoZWNraW5nIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIGhhcmR3YXJlIGNyeXB0byBlbmdpbmVzPyBEb2VzIGl0IHJlbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBsaWtlIHN1cHBvcnQgZm9yIEFFUy1DQ00sIFRLSVAsIG9yIG90aGVyIGtleSBhbGdvcml0aG1zPyBJIG5lZWQgdG8gbG9vayBmb3IgY29uZGl0aW9uYWwgY2hlY2tzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4qICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rpb24/IEknbSBleHBlY3Rpbmcgc29tZXRoaW5nIHRoYXQgY29udGFpbnMga2V5IG1hdGVyaWFsLCB0aGUgTUFDIGFkZHJlc3MgY29udGV4dCwgYW5kIGNvbmZpZ3VyYXRpb24gZmxhZ3MuIFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBoZXJlIHdpbGwgYmUgY3JpdGljYWwgdG8gdGhlIG92ZXJhbGwgb3BlcmF0aW9uLiBIb3cgaXMgdGhlIGtleSBkYXRhIG9yZ2FuaXplZD8gSXMgdGhlcmUgYSBwcm9wcmlldGFyeSBmb3JtYXQ/IERvZXMgaXQgbmVlZCB0byBiZSBwcmUtcHJvY2Vzc2VkIGJlZm9yZSBzZW5kaW5nIGl0IG9mZiB0byB0aGUgSFc/XG4qICAgKipIYXJkd2FyZSBBYnN0cmFjdGlvbjoqKiBXaGF0IGtpbmQgb2YgYWJzdHJhY3Rpb24gaXMgdXNlZCB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgaGFyZHdhcmU/IElzIGl0IGEgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgKERNQSkgc2V0dXAgb3Igc29tZSBraW5kIG9mIEkvTyBjb250cm9sIChpb2N0bCkgY2FsbD8gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiByZWdpc3RlciBkZWZpbml0aW9ucyBvciBkZXZpY2UgZHJpdmVyIGNhbGxzLiBEb2VzIGl0IHN1cHBvcnQgc2NhdHRlci1nYXRoZXIgRE1BPyBXaGF0IGFyZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZD9cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZhaWxzPyBEb2VzIHRoZSBjb2RlIGdyYWNlZnVsbHkgZmFsbCBiYWNrIHRvIHNvZnR3YXJlLWJhc2VkIGNyeXB0b2dyYXBoeT8gSSBuZWVkIHRvIGFuYWx5emUgdGhvc2UgZmFpbHVyZSBwYXRocyB0byBhc3Nlc3MgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uLlxuKiAgICoqQ29uY3VycmVuY3kvVGhyZWFkaW5nOioqIEhvdyBpcyBpdCBoYW5kbGluZyB0aHJlYWQtc2FmZXR5IGluIHRoaXMgY29udGV4dD8gSXMgdGhlcmUgYSBsb2NrIGFyb3VuZCB0aGUgaGFyZHdhcmUgYWNjZXNzIG9yIGlzIHRoZSBhcmNoaXRlY3R1cmUgaW5oZXJlbnRseSBkZXNpZ25lZCBmb3IgY29uY3VycmVudCBrZXkgc2V0dXAgYW5kIG9wZXJhdGlvbj8gQ29uc2lkZXJpbmcgdGhlIHJlYWwtdGltZSBuYXR1cmUgb2Ygd2lyZWxlc3MgdHJhZmZpYywgY29uY3VycmVuY3kgYW5kIGxvdyBsYXRlbmN5IHdpbGwgYmUgY3J1Y2lhbCBhc3BlY3RzIG9mIHRoZSBkZXNpZ24uXG4qICAgKipTZWN1cml0eSBJbXBsaWNhdGlvbnM6KiogV2hhdCBhcmUgdGhlIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIG9mIG9mZmxvYWRpbmcgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHRvIGhhcmR3YXJlPyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBrZXkgbWF0ZXJpYWwgaXMgaGFuZGxlZCBzYWZlbHkgYW5kIG5vdCB2dWxuZXJhYmxlIHRvIHNpZGUtY2hhbm5lbCBhdHRhY2tzIG9yIG1lbW9yeSBsZWFrcy5cblxuQmFzaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGlmIGl0J3MgYSBnb29kIGltcGxlbWVudGF0aW9uLCBvciBpZiB0aGVyZSBpcyB0aGUgbmVlZCB0byBpbXByb3ZlIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDIwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MzAuMTI0OTk3MjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDg2ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEva2V5LmM9MTA5PXN0YXRpYyB2b2lkIGRlY3JlYXNlX3RhaWxyb29tX25lZWRfY291bnQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtMTE5LVxcbm5ldC9tYWM4MDIxMS9rZXkuYzoxMjA6c3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMjEte1xcbi0tXFxubmV0L21hYzgwMjExL2tleS5jPTQ0OT1zdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy01MTktXFx0XFx0XFx0aWYgKG5ldylcXG5uZXQvbWFjODAyMTEva2V5LmM6NTIwOlxcdFxcdFxcdFxcdHJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKG5ldyk7XFxubmV0L21hYzgwMjExL2tleS5jLTUyMS1cXHRcXHR9XFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtNTIzLVxcdFxcdGlmICghbmV3LVxcdTAwM2Vsb2NhbC1cXHUwMDNld293bGFuKSB7XFxubmV0L21hYzgwMjExL2tleS5jOjUyNDpcXHRcXHRcXHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChuZXcpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy01MjUtXFx0XFx0fSBlbHNlIGlmIChsaW5rX2lkIFxcdTAwM2MgMCB8fCAhc2RhdGEtXFx1MDAzZXZpZi5hY3RpdmVfbGlua3MgfHxcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYz05ODM9dm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDAzLVxcdFxcdFxcdFxcdGluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTtcXG5uZXQvbWFjODAyMTEva2V5LmM6MTAwNDpcXHRcXHRcXHRpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDA1LVxcdFxcdH1cXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYz0xMDA5PXZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDIyLVxcdFxcdGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcXG5uZXQvbWFjODAyMTEva2V5LmM6MTAyMzpcXHRcXHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDI0LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmM9MTUxNz1pbnQgaWVlZTgwMjExX2tleV9zd2l0Y2hfbGlua3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtMTU0Mi1cXG5uZXQvbWFjODAyMTEva2V5LmM6MTU0MzpcXHRcXHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy0xNTQ0LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjMwLjE3NTQ4NjY1NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjY1NDc5MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVlcCBEaXZlIGludG8gYHN0YV9pbmZvX21vdmVfc3RhdGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIGBzdGFfaW5mb19tb3ZlX3N0YXRlYCBmdW5jdGlvbiBvciB2YXJpYWJsZSDigJMgd2hhdGV2ZXIgaXQgaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdHJlYXQgaXQgYXMgYSBjcml0aWNhbCBwaWVjZSBvZiBzdGF0ZSBtYW5hZ2VtZW50LCBsaWtlbHkgcmVsYXRlZCB0byBtb3ZlbWVudCB3aXRoaW4sIHdlbGwsIHRoZSBgc3RhX2luZm9gIGNvbnRleHQuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSeKAmW0gZ3Vlc3NpbmcgaXQncyAqc3BlY2lmaWMqIHN0YXRlLCBub3QgdGhlIG92ZXJhcmNoaW5nLCBnbG9iYWwgc3RhdGUuIFByb2JhYmx5IHNvbWV0aGluZyBncmFudWxhciwgcmlnaHQ/IEEgZmxhZywgYW4gZW51bSwgb3IgbWF5YmUgZXZlbiBhIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBkZXNjcmliaW5nIG1vdmVtZW50IHN0YXR1cy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwb3NzaWJsZSB2YWx1ZXMgcmlnaHQgb2ZmIHRoZSBiYXQuIFwiSWRsZSxcIiBcIk1vdmluZyxcIiBcIkFjY2VsZXJhdGluZyxcIiBcIkRlY2VsZXJhdGluZyxcIiBcIlR1cm5pbmcsXCIgXCJKdW1waW5nLFwiIFwiRmFsbGluZ1wiIOKAkyBJJ20gc3BpdGJhbGxpbmcgYSBsb3QgaGVyZSwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvZGUgdG8gY29uZmlybSBpZiBJJ20gZXZlbiBvbiB0aGUgcmlnaHQgdHJhY2suIEkgZXhwZWN0IHRvIHNlZSB0cmFuc2l0aW9uIGxvZ2ljIHJlbGF0ZWQgdG8gdGhpcyBzdGF0ZS4gVGhpcyBjb3VsZCBpbnZvbHZlIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgdGhlIHZhcmlhYmxlLCBjYWxscyB0byBvdGhlciBmdW5jdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhlIHN0YXRlLCBvciBtYXliZSBldmVuIGV2ZW50LWRyaXZlbiBjaGFuZ2VzIGJhc2VkIG9uIGlucHV0IG9yIGVudmlyb25tZW50YWwgY29uZGl0aW9ucy5cblxuVGhlIGNvbnRleHQgb2YgYHN0YV9pbmZvYCBpcyBpbXBvcnRhbnQuIEnigJltIHBpY3R1cmluZyBhIGZhaXJseSBjb21wbGV4IHN5c3RlbSwgc29tZXRoaW5nIHRoYXQgdHJhY2tzIGFuIGVudGl0eSwgbWF5YmUgaW4gYSBnYW1lIGVuZ2luZSwgcGh5c2ljcyBzaW11bGF0aW9uLCBvciBzaW1pbGFyIGNvbnRleHQuIFRoZSBgc3RhX2luZm9gIHN0cnVjdHVyZSBpcyBwcm9iYWJseSBzdG9yaW5nIHBvc2l0aW9uLCB2ZWxvY2l0eSwgb3JpZW50YXRpb24sIGFuZCBvdGhlciByZWxldmFudCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgb2JqZWN0LiBJZiBtb3ZlbWVudCBpcyBjZW50cmFsIHRvIHRoaXMgc3lzdGVtLCBgc3RhX2luZm9fbW92ZV9zdGF0ZWAgd2lsbCB0ZWxsIHVzIGEgbG90IGFib3V0IHRoZSBvYmplY3TigJlzIGFjdGl2aXR5LlxuXG5TbywgbGV0J3MgZGl2ZSBpbiBhbmQgZGlzc2VjdCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGxvb2sgYXQgdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDI3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MzMuNDQwOTY4NDg3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg3MDMzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFfaW5mb19tb3ZlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvY2ZnLmM9MjE0Nj1zdGF0aWMgaW50IHN0YV9hcHBseV9hdXRoX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTIxNTQtXFx0ICAgICF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVVUSCkpIHtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE1NTpcXHRcXHRyZXQgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BVVRIKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE1Ni1cXHRcXHRpZiAocmV0KVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTIxNzAtXFxubmV0L21hYzgwMjExL2NmZy5jOjIxNzE6XFx0XFx0cmV0ID0gc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVNTT0MpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTcyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE3Ny1cXHRcXHRpZiAoc2V0IFxcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRCkpXFxubmV0L21hYzgwMjExL2NmZy5jOjIxNzg6XFx0XFx0XFx0cmV0ID0gc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVVUSE9SSVpFRCk7XFxubmV0L21hYzgwMjExL2NmZy5jLTIxNzktXFx0XFx0ZWxzZSBpZiAodGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FVVEhPUklaRUQpKVxcbm5ldC9tYWM4MDIxMS9jZmcuYzoyMTgwOlxcdFxcdFxcdHJldCA9IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FTU09DKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE4MS1cXHRcXHRlbHNlXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE4OS1cXHQgICAgdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSkge1xcbm5ldC9tYWM4MDIxMS9jZmcuYzoyMTkwOlxcdFxcdHJldCA9IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FVVEgpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTkxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE5Ny1cXHQgICAgdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FVVEgpKSB7XFxubmV0L21hYzgwMjExL2NmZy5jOjIxOTg6XFx0XFx0cmV0ID0gc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfTk9ORSk7XFxubmV0L21hYzgwMjExL2NmZy5jLTIxOTktXFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9NDUwNj1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy00NjIzLVxcdFxcdC8qIE9ubHkgbW92ZSB0aGUgQVAgc3RhdGUgKi9cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjQ2MjQ6XFx0XFx0c3RhX2luZm9fbW92ZV9zdGF0ZShhcF9zdGEsIElFRUU4MDIxMV9TVEFfTk9ORSk7XFxubmV0L21hYzgwMjExL21sbWUuYy00NjI1LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jPTUzODY9c3RhdGljIGJvb2wgaWVlZTgwMjExX21hcmtfc3RhX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTU0MDUtXFx0fVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NTQwNjpcXHRpZiAoc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVVUSCkpIHtcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTU0MDctXFx0XFx0c2RhdGFfaW5mbyhzZGF0YSwgXFxcImZhaWxlZCBtb3ZpbmcgJXBNIHRvIGF1dGhcXFxcblxcXCIsIGFwX2FkZHIpO1xcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYz02OTc2PXN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy03MTQ4LVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NzE0OTpcXHRlcnIgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BU1NPQyk7XFxubmV0L21hYzgwMjExL21sbWUuYy03MTUwLVxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2ICEoaWZtZ2QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQpKVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NzE1MTpcXHRcXHRlcnIgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BVVRIT1JJWkVEKTtcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxNTItXFx0aWYgKGVycikge1xcbi0tXFxubmV0L21hYzgwMjExL29jYi5jPTg3PXN0YXRpYyBzdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9vY2JfZmluaXNoX3N0YShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9vY2IuYy0xMDAtXFxubmV0L21hYzgwMjExL29jYi5jOjEwMTpcXHRzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BVVRIKTtcXG5uZXQvbWFjODAyMTEvb2NiLmM6MTAyOlxcdHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FTU09DKTtcXG5uZXQvbWFjODAyMTEvb2NiLmM6MTAzOlxcdHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FVVEhPUklaRUQpO1xcbm5ldC9tYWM4MDIxMS9vY2IuYy0xMDQtXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz00Njg9dm9pZCBzdGFfaW5mb19mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTQ5NC1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo0OTU6XFx0XFx0cmV0ID0gc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIHN0YS1cXHUwMDNlc3RhX3N0YXRlIC0gMSk7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NDk2OlxcdFxcdGlmIChXQVJOX09OQ0UocmV0LCBcXFwic3RhX2luZm9fbW92ZV9zdGF0ZSgpIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpKVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTQ5Ny1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTEzMTA9c3RhdGljIGludCBfX211c3RfY2hlY2sgX19zdGFfaW5mb19kZXN0cm95X3BhcnQxKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTM5NC1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxMzk1OnN0YXRpYyBpbnQgX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTM5Ni1cXHRcXHRcXHRcXHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTUzNy1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTM4OmludCBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1MzktXFx0XFx0XFx0ZW51bSBpZWVlODAyMTFfc3RhX3N0YXRlIG5ld19zdGF0ZSlcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTQwLXtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTQxOlxcdHJldHVybiBfc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIG5ld19zdGF0ZSwgdHJ1ZSk7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTU0Mi19XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0xNTQ0PXN0YXRpYyB2b2lkIF9fc3RhX2luZm9fZGVzdHJveV9wYXJ0MihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgYm9vbCByZWNhbGMpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTczLVxcdGlmIChzdGEtXFx1MDAzZXN0YV9zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX0FVVEhPUklaRUQpIHtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTc0OlxcdFxcdHJldCA9IF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BU1NPQywgcmVjYWxjKTtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTc1LVxcdFxcdFdBUk5fT05fT05DRShyZXQpO1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTU4OS1cXHR3aGlsZSAoc3RhLVxcdTAwM2VzdGFfc3RhdGUgXFx1MDAzZSBJRUVFODAyMTFfU1RBX05PTkUpIHtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTkwOlxcdFxcdHJldCA9IF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgc3RhLVxcdTAwM2VzdGFfc3RhdGUgLSAxLCByZWNhbGMpO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1OTEtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg9ODQxPXN0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9zdGFfZmxhZyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTg0OS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo4NTA6aW50IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtODUxLVxcdFxcdFxcdGVudW0gaWVlZTgwMjExX3N0YV9zdGF0ZSBuZXdfc3RhdGUpO1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg9ODUzPXN0YXRpYyBpbmxpbmUgdm9pZCBzdGFfaW5mb19wcmVfbW92ZV9zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTg1OS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo4NjA6XFx0cmV0ID0gc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIG5ld19zdGF0ZSk7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtODYxLVxcdFdBUk5fT05fT05DRShyZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MTozMy40ODg4NDE4ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4OTc5ODQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIEF1ZGl0KipcblxuT2theSwgdGltZSB0byBnZXQgdG8gaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGluIHBsYWNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgSSBoYXZlIGJvdGggTUFDODAyMTEgYW5kIENGRzgwMjExIGVuYWJsZWQuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMsIGJ1dCBJJ20gbmV2ZXIgb25lIHRvIGFzc3VtZSwgc28gbGV0J3MgZGlnIGEgbGl0dGxlIGRlZXBlci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L21hYzgwMjExL01ha2VmaWxlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjcnVjaWFsIGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzMjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MTozNS4yNzg2NDM2MDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX01BQzgwMjExKSArPSBtYWM4MDIxMS5vXFxuICAgMzpcXHRcXG4gICA0OlxcdCMgbWFjODAyMTEgb2JqZWN0c1xcbiAgIDU6XFx0bWFjODAyMTEteSA6PSBcXFxcXFxuICAgNjpcXHRcXHRtYWluLm8gc3RhdHVzLm8gXFxcXFxcbiAgIDc6XFx0XFx0ZHJpdmVyLW9wcy5vIFxcXFxcXG4gICA4OlxcdFxcdHN0YV9pbmZvLm8gXFxcXFxcbiAgIDk6XFx0XFx0d2VwLm8gXFxcXFxcbiAgMTA6XFx0XFx0YWVhZF9hcGkubyBcXFxcXFxuICAxMTpcXHRcXHR3cGEubyBcXFxcXFxuICAxMjpcXHRcXHRzY2FuLm8gb2ZmY2hhbm5lbC5vIFxcXFxcXG4gIDEzOlxcdFxcdGh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXFxcXFxcbiAgMTQ6XFx0XFx0dmh0Lm8gXFxcXFxcbiAgMTU6XFx0XFx0aGUubyBcXFxcXFxuICAxNjpcXHRcXHRzMWcubyBcXFxcXFxuICAxNzpcXHRcXHRpYnNzLm8gXFxcXFxcbiAgMTg6XFx0XFx0aWZhY2UubyBcXFxcXFxuICAxOTpcXHRcXHRsaW5rLm8gXFxcXFxcbiAgMjA6XFx0XFx0cmF0ZS5vIFxcXFxcXG4gIDIxOlxcdFxcdHRraXAubyBcXFxcXFxuICAyMjpcXHRcXHRhZXNfY21hYy5vIFxcXFxcXG4gIDIzOlxcdFxcdGFlc19nbWFjLm8gXFxcXFxcbiAgMjQ6XFx0XFx0Zmlsc19hZWFkLm8gXFxcXFxcbiAgMjU6XFx0XFx0Y2ZnLm8gXFxcXFxcbiAgMjY6XFx0XFx0ZXRodG9vbC5vIFxcXFxcXG4gIDI3OlxcdFxcdHJ4Lm8gXFxcXFxcbiAgMjg6XFx0XFx0c3BlY3RtZ210Lm8gXFxcXFxcbiAgMjk6XFx0XFx0dHgubyBcXFxcXFxuICAzMDpcXHRcXHRrZXkubyBcXFxcXFxuICAzMTpcXHRcXHR1dGlsLm8gcGFyc2UubyBcXFxcXFxuICAzMjpcXHRcXHR3bWUubyBcXFxcXFxuICAzMzpcXHRcXHRjaGFuLm8gYXAubyBcXFxcXFxuICAzNDpcXHRcXHR0cmFjZS5vIG1sbWUubyBcXFxcXFxuICAzNTpcXHRcXHR0ZGxzLm8gXFxcXFxcbiAgMzY6XFx0XFx0b2NiLm8gXFxcXFxcbiAgMzc6XFx0XFx0YWlydGltZS5vIFxcXFxcXG4gIDM4OlxcdFxcdGVodC5vIHVoci5vIG5hbi5vXFxuICAzOTpcXHRcXG4gIDQwOlxcdG1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0xFRFMpICs9IGxlZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjM1LjI3ODcwNTg1OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDY4NDYyMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1BQzgwMjExIEtleSBNYW5hZ2VtZW50IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gZnV6emluZyB0aGUgTUFDODAyMTEgc3Vic3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgY2ZnLm9gLCBga2V5Lm9gLCBhbmQgYHN0YV9pbmZvLm9gIGFyZSBhbHdheXMgYnVpbHQgaW50byBgbWFjODAyMTEua29gIHdoZW4gYENPTkZJR19NQUM4MDIxMWAgaXMgZW5hYmxlZC4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfTUFDODAyMTFgIGhpbmdlcyBvbiBgQ09ORklHX0NGRzgwMjExYC4gV2UgdXN1YWxseSBleGVyY2lzZSB0aGlzIHdpdGggc29tZXRoaW5nIGxpa2UgdGhlIHZpcnR1YWwgcmFkaW8gdGhyb3VnaCBgQ09ORklHX01BQzgwMjExX0hXU0lNYCwgYnV0IHVsdGltYXRlbHksIGBNQUM4MDIxMWAgYW5kIGBDRkc4MDIxMWAgYXJlIHRoZSBrZXkgY29uZmlncyBoZXJlLlxuXG5Ob3csIGxldCdzIHplcm8gaW4gb24gdGhlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgb3IgaW50cm9kdWNlZCBhcmUgb24gbXkgcmFkYXIuIEJhc2VkIG9uIHRoaXMsIEkgc2VlOiBgaWVlZTgwMjExX2FkZF9rZXlgLCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AsIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAsIGFuZCBlaXRoZXIgYHN0YV9pbmZvX21vdmVfc3RhdGVgIG9yIGBfc3RhX2luZm9fbW92ZV9zdGF0ZWAuXG5cbkxldCBtZSBxdWlja2x5IHNjYW4gdGhlIGRpZmYgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZSBpbiB0ZXJtcyBvZiBtb2RpZmllZCBmdW5jdGlvbnMuIE9rYXksIHNvIGZyb20gdGhlIGRpZmYsIEkgaGF2ZSB0aGVzZSBmaWxlIG1vZGlmaWNhdGlvbnMgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zOlxuXG4xLiAgYG5ldC9tYWM4MDIxMS9jZmcuY2A6IGBpZWVlODAyMTFfYWRkX2tleWBcbjIuICBgbmV0L21hYzgwMjExL2tleS5jYDogYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCwgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXNgXG4zLiAgYG5ldC9tYWM4MDIxMS9rZXkuaGA6IERlY2xhcmF0aW9ucyAoaW1wb3J0YW50LCBuZWVkIHRvIHJldmlldyB0aGVzZSBmb3IgYWRkZWQgZGF0YSBzdHJ1Y3R1cmVzLCBldGMuIGFzIHdlbGwpXG40LiAgYG5ldC9tYWM4MDIxMS9zdGFfaW5mby5jYDogYF9zdGFfaW5mb19tb3ZlX3N0YXRlYCAod2hpY2ggaXMgaW52b2tlZCB2aWEgYHN0YV9pbmZvX21vdmVfc3RhdGVgKVxuXG5Hb29kLCBsb29rcyBsaWtlIHRoZSBkaWZmIGxpbmVzIHVwIHBlcmZlY3RseSB3aXRoIHdoYXQgSSBleHBlY3RlZCBmb3IgbXkgYEZvY3VzU3ltYm9sc2AuIExldCdzIGp1c3QgbWFrZSBzdXJlIHRob3NlIGFyZSBhbGwgZXhhY3Qga2VybmVsIGZ1bmN0aW9uIG5hbWVzLlxuXG5ZZXMsIGNvbmZpcm1lZDogYGllZWU4MDIxMV9hZGRfa2V5YCwgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXNgLCBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgLCBgX3N0YV9pbmZvX21vdmVfc3RhdGVgLCBhbmQgYHN0YV9pbmZvX21vdmVfc3RhdGVgLlxuXG5Ob3csIHRpbWUgdG8gdmVyaWZ5IGFnYWluc3QgdGhlIGluc3RydWN0aW9uczpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlLiBHaXZlbiB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRoZXNlIGtleSBtYW5hZ2VtZW50IHJvdXRpbmVzLCB0aGlzIGlzIGEgY2xlYXIgeWVzLlxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIk1BQzgwMjExXCIsIFwiQ0ZHODAyMTFcIl1gLiBNYWtlcyBwZXJmZWN0IHNlbnNlLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiaWVlZTgwMjExX2FkZF9rZXlcIiwgXCJpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzXCIsIFwiaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxcIiwgXCJfc3RhX2luZm9fbW92ZV9zdGF0ZVwiLCBcInN0YV9pbmZvX21vdmVfc3RhdGVcIl1gLiBDaGVja2xpc3QgY29tcGxldGUuXG4qICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHZlcmRpY3Q6IFRoaXMgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyBrZXkgbWFuYWdlbWVudCBhbmQgU1RBIHN0YXRlIHRyYW5zaXRpb25zIGluIE1BQzgwMjExLCBib3RoIG9mIHdoaWNoIGFyZSBjcml0aWNhbCBmb3Igd2lyZWxlc3Mgc2VjdXJpdHkgYW5kIHJlcHJlc2VudCBhcmVhcyB3aXRoIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MgZXhwbG9pdGFibGUgdGhyb3VnaCBjcmFmdGVkIG5ldHdvcmsgdHJhZmZpYy4gVGhlcmVmb3JlLCBpdCdzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5BbHJpZ2h0LCB0aGF0J3MgZXZlcnl0aGluZy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDQzLCJPdXRwdXRUb2tlbnMiOjIxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjQ0LjM0NzE3MTM3NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwODYwMzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfYWRkX2tleVwiLFxuICAgIFwiaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c1wiLFxuICAgIFwiaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxcIixcbiAgICBcIl9zdGFfaW5mb19tb3ZlX3N0YXRlXCIsXG4gICAgXCJzdGFfaW5mb19tb3ZlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWFjODAyMTEga2V5IGhhbmRsaW5nIGJ5IGFsbG93aW5nIHBhaXJ3aXNlIGtleSBpbnN0YWxsYXRpb24gaW4gQVAgbW9kZSBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uIGFuZCBkZWZlcnJpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHVwbG9hZCB1bnRpbCBhc3NvY2lhdGlvbiBjb21wbGV0ZXMuIEl0IGludHJvZHVjZXMgbmV3IGtleSBzdGF0ZSBmbGFncywgdXBkYXRlcyBrZXkgdXBsb2FkIGxvZ2ljLCBhbmQgYWRkcyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGluIHJlYWNoYWJsZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4gbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfYWRkX2tleVwiLFxuICAgIFwiaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c1wiLFxuICAgIFwiaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxcIixcbiAgICBcIl9zdGFfaW5mb19tb3ZlX3N0YXRlXCIsXG4gICAgXCJzdGFfaW5mb19tb3ZlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWFjODAyMTEga2V5IGhhbmRsaW5nIGJ5IGFsbG93aW5nIHBhaXJ3aXNlIGtleSBpbnN0YWxsYXRpb24gaW4gQVAgbW9kZSBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uIGFuZCBkZWZlcnJpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHVwbG9hZCB1bnRpbCBhc3NvY2lhdGlvbiBjb21wbGV0ZXMuIEl0IGludHJvZHVjZXMgbmV3IGtleSBzdGF0ZSBmbGFncywgdXBkYXRlcyBrZXkgdXBsb2FkIGxvZ2ljLCBhbmQgYWRkcyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGluIHJlYWNoYWJsZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4gbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6NDQuNDI4MDM5NTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzI0MzgzMTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6NDQuNDI4NDc1NThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTcyMzk0MzU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZWZlcnJlZCBoYXJkd2FyZSBrZXkgdXBsb2FkIGluIG1hYzgwMjExIGZvciBBUC1zaWRlIEZhc3QgVHJhbnNpdGlvbiAoRlQpIHdoZW4gcGFpcndpc2Uga2V5cyBhcmUgaW5zdGFsbGVkIHByaW9yIHRvIHN0YXRpb24gYXNzb2NpYXRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgaW50ZXJuYWwgZmxhZyAoS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSwgZGVmZXJzIHRoZSBkcml2ZXIgc2V0X2tleSBvcGVyYXRpb24gdW50aWwgdGhlIHN0YXRpb24gdHJhbnNpdGlvbnMgdG8gV0xBTl9TVEFfQVNTT0MsIGFuZCBhdHRlbXB0cyBoYXJkd2FyZSBrZXkgdXBsb2FkIGF0IHRoYXQgcG9pbnQuXFxuXFxuRXZhbHVhdGlvbiByZWdhcmRpbmcgS01TQU4gdnMgS0FTQU46XFxuLSBVbmluaXRpYWxpemVkIG1lbW9yeSAvIGluZm8tbGVha3MgKEtNU0FOKTogTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBsZWFrZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZGVmZXJfaHdfdXBsb2FkYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGtleSBzdHJ1Y3R1cmVzIG1hbmlwdWxhdGVkIGFyZSBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIG9iamVjdHMuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZS5cXG4tIEdlbmVyYWwgbWVtb3J5IC8gY29uY3VycmVuY3kgc2FmZXR5IChLQVNBTi9Mb2NrZGVwKTogQW55IGlzc3VlcyByZWxhdGluZyB0byBrZXkgcmVmZXJlbmNlIGxpZmV0aW1lcywgc3RhdGlvbiBzdGF0ZSB0cmFuc2l0aW9ucywgb3IgZHJpdmVyIGNvbmN1cnJlbmN5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMb2NrZGVwKS5cXG5cXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdG8ganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3NDZjMzBlMjcwNGQ1OWJhYTA3NWVlZjNlNTBhODk3NDU0YWQ1NjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAzOjUwOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jXG5pbmRleCAyM2Y0ZjllYzg2ZDBhLi5mZjk5M2E3YTllNDQxIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jXG4rKysgYi9uZXQvbWFjODAyMTEvY2ZnLmNcbkBAIC02NjYsNyArNjY2LDE1IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdFx0a2V5LVx1MDAzZWNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX05PX0FVVE9fVFg7XG4gXG4gXHRpZiAobWFjX2FkZHIpIHtcbitcdFx0Ym9vbCBkZWZlcl9od191cGxvYWQ7XG4rXG4gXHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1hY19hZGRyKTtcbitcdFx0ZGVmZXJfaHdfdXBsb2FkID1cbitcdFx0XHRzdGEgXHUwMDI2XHUwMDI2IHBhaXJ3aXNlIFx1MDAyNlx1MDAyNiAhc3RhLVx1MDAzZXN0YS5lcHBfcGVlciBcdTAwMjZcdTAwMjZcbitcdFx0XHQhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQoc2RhdGEtXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHxcbitcdFx0XHQgc2RhdGEtXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IWllZWU4MDIxMV9od19jaGVjayhcdTAwMjZsb2NhbC1cdTAwM2VodywgU1dfQ1JZUFRPX0NPTlRST0wpO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgQVNTT0MgdGVzdCBtYWtlcyBzdXJlIHRoZSBkcml2ZXIgaXMgcmVhZHkgdG9cbiBcdFx0ICogcmVjZWl2ZSB0aGUga2V5LiBXaGVuIHdwYV9zdXBwbGljYW50IGhhcyByb2FtZWRcbkBAIC02ODEsMTQgKzY4OSwyMiBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdCAqIElmIChyZSlhc3NvY2lhdGlvbiBmcmFtZSBlbmNyeXB0aW9uIHN1cHBvcnQgaXMgbm90IHByZXNlbnQsXG4gXHRcdCAqIGNmZzgwMjExIHdpbGwgbm90IGFsbG93IGtleSBpbnN0YWxsYXRpb24gaW4gbm9u4oCRQVAgU1RBIG1vZGUuXG4gXHRcdCAqXG4tXHRcdCAqIFRPRE86IGFjY2VwdCB0aGUga2V5IGlmIHdlIGhhdmUgYSBzdGF0aW9uIGVudHJ5IGFuZFxuLVx0XHQgKlx0IGFkZCBpdCB0byB0aGUgZGV2aWNlIGFmdGVyIHRoZSBzdGF0aW9uIGFzc29jaWF0ZXMuXG4rXHRcdCAqIEFQLXNpZGUgRlQgbWF5IGFsc28gaW5zdGFsbCBhIHBhaXJ3aXNlIGtleSBiZWZvcmUgdGhlXG4rXHRcdCAqIHN0YXRpb24gaXMgYXNzb2NpYXRlZC4gSWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXG4rXHRcdCAqIGFsbG93ZWQsIGtlZXAgaXQgaW4gbWFjODAyMTEgYW5kIHVwbG9hZCBpdCBhZnRlciB0aGUgc3RhdGlvblxuK1x0XHQgKiByZWFjaGVzIEFTU09DLiBEcml2ZXJzIHdpdGggU1dfQ1JZUFRPX0NPTlRST0wgY2Fubm90IHVzZSB0aGlzXG4rXHRcdCAqIHBhdGggc2luY2Ugb25seSB0aGVpciBzZXRfa2V5IHJldHVybiB2YWx1ZSBjYW4gcGVybWl0IHNvZnR3YXJlXG4rXHRcdCAqIGNyeXB0by5cbiBcdFx0ICovXG4gXHRcdGlmICghc3RhIHx8ICghc3RhLVx1MDAzZXN0YS5lcHBfcGVlciBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgICF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpKSkge1xuK1x0XHRcdCAgICAgIXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICAhZGVmZXJfaHdfdXBsb2FkKSkge1xuIFx0XHRcdGllZWU4MDIxMV9rZXlfZnJlZV91bnVzZWQoa2V5KTtcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdFx0fVxuK1xuK1x0XHRpZiAoZGVmZXJfaHdfdXBsb2FkKVxuK1x0XHRcdGtleS1cdTAwM2VmbGFncyB8PSBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ7XG4gXHR9XG4gXG4gXHRzd2l0Y2ggKHNkYXRhLVx1MDAzZXZpZi50eXBlKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jXG5pbmRleCBmNDVlNzkyYWJlZGU1Li43NzRhOTJiYTdiZDhjIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2tleS5jXG4rKysgYi9uZXQvbWFjODAyMTEva2V5LmNcbkBAIC0xNDQsNiArMTQ0LDE1IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAoa2V5LVx1MDAzZWZsYWdzIFx1MDAyNiBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpIHtcbitcdFx0LypcbitcdFx0ICogS2V5cyBhcmUgb25seSBkZWZlcnJlZCBpZiBhdXRvbWF0aWMgc29mdHdhcmUgZmFsbGJhY2sgaXNcbitcdFx0ICogYWxsb3dlZC4gTGVhdmUgcmV0IGFzIC1FT1BOT1RTVVBQIHNvIHRoZSBub3JtYWwgZmFsbGJhY2sgcGF0aFxuK1x0XHQgKiBpcyB1c2VkIHdpdGhvdXQgcHJldGVuZGluZyB0aGUgZHJpdmVyIHJldHVybmVkIDEuXG4rXHRcdCAqL1xuK1x0XHRnb3RvIG91dF91bnN1cHBvcnRlZDtcbitcdH1cbitcbiBcdGlmICgha2V5LVx1MDAzZWxvY2FsLVx1MDAzZW9wcy1cdTAwM2VzZXRfa2V5KVxuIFx0XHRnb3RvIG91dF91bnN1cHBvcnRlZDtcbiBcbkBAIC05OTcsNiArMTAwNiwyOCBAQCB2b2lkIGllZWU4MDIxMV9yZWVuYWJsZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIFx0fVxuIH1cbiBcbit2b2lkIGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RydWN0IHN0YV9pbmZvICpzdGEpXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEtXHUwMDNlbG9jYWw7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5O1xuK1x0aW50IGksIHJldDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X3dpcGh5KGxvY2FsLVx1MDAzZWh3LndpcGh5KTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc3RhLVx1MDAzZXB0ayk7IGkrKykge1xuK1x0XHRrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSwgc3RhLVx1MDAzZXB0a1tpXSk7XG4rXHRcdGlmICgha2V5IHx8ICEoa2V5LVx1MDAzZWZsYWdzIFx1MDAyNiBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRrZXktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+S0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEO1xuK1x0XHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHNkYXRhX2VycihrZXktXHUwMDNlc2RhdGEsXG4rXHRcdFx0XHQgIFwiZmFpbGVkIHRvIGVuYWJsZSBkZWZlcnJlZCBrZXkgKCVkLCAlcE0pOiAlZFxcblwiLFxuK1x0XHRcdFx0ICBrZXktXHUwMDNlY29uZi5rZXlpZHgsIHN0YS1cdTAwM2VzdGEuYWRkciwgcmV0KTtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWRcbiBpZWVlODAyMTFfa2V5X2l0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5oIGIvbmV0L21hYzgwMjExL2tleS5oXG5pbmRleCA4MjZlNGU5Mzg3YzU1Li45N2QzYmJjZjBhYzIxIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2tleS5oXG4rKysgYi9uZXQvbWFjODAyMTEva2V5LmhcbkBAIC0zMiwxMCArMzIsMTMgQEAgc3RydWN0IHN0YV9pbmZvO1xuICAqIEBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTogSW5kaWNhdGVzIHRoYXQgdGhpcyBrZXkgaXMgcHJlc2VudFxuICAqXHRpbiB0aGUgaGFyZHdhcmUgZm9yIFRYIGNyeXB0byBoYXJkd2FyZSBhY2NlbGVyYXRpb24uXG4gICogQEtFWV9GTEFHX1RBSU5URUQ6IEtleSBpcyB0YWludGVkIGFuZCBwYWNrZXRzIHNob3VsZCBiZSBkcm9wcGVkLlxuKyAqIEBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ6IEtleSB1cGxvYWQgaXMgZGVmZXJyZWQgdW50aWwgdGhlIHN0YXRpb25cbisgKlx0aXMgYXNzb2NpYXRlZC5cbiAgKi9cbiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF9rZXlfZmxhZ3Mge1xuIFx0S0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkVcdD0gQklUKDApLFxuIFx0S0VZX0ZMQUdfVEFJTlRFRFx0XHQ9IEJJVCgxKSxcbitcdEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRFx0PSBCSVQoMiksXG4gfTtcbiBcbiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF90a2lwX3N0YXRlIHtcbkBAIC0xNjUsNiArMTY4LDcgQEAgdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdCBib29sIGZvcmNlX3N5bmNocm9uaXplKTtcbiB2b2lkIGllZWU4MDIxMV9mcmVlX3N0YV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0XHRcdCAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuK3ZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7XG4gdm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG4gaW50IGllZWU4MDIxMV9rZXlfc3dpdGNoX2xpbmtzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGRlbF9saW5rc19tYXNrLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcbmluZGV4IGZkZjAwY2JmNDlkOGIuLjc1M2RjZGQ5MDcwMTEgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uY1xuKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcbkBAIC0xNDY4LDYgKzE0NjgsNyBAQCBzdGF0aWMgaW50IF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuIFx0Y2FzZSBJRUVFODAyMTFfU1RBX0FTU09DOlxuIFx0XHRpZiAoc3RhLVx1MDAzZXN0YV9zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX0FVVEgpIHtcbiBcdFx0XHRzZXRfYml0KFdMQU5fU1RBX0FTU09DLCBcdTAwMjZzdGEtXHUwMDNlX2ZsYWdzKTtcbitcdFx0XHRpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0YSk7XG4gXHRcdFx0c3RhLVx1MDAzZWFzc29jX2F0ID0ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7XG4gXHRcdFx0aWYgKHJlY2FsYykge1xuIFx0XHRcdFx0aWVlZTgwMjExX3JlY2FsY19taW5fY2hhbmRlZihzdGEtXHUwMDNlc2RhdGEsIC0xKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjQ0LjQyODQ3ODkyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxMTkyNzcxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTUFDODAyMTEgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYXJlYXMgd2hlcmUgS01TQU4gZnV6emluZyBtaWdodCBiZSBiZW5lZmljaWFsLiBUaGlzIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgZmlsZXMgd2l0aGluIHRoZSBgbmV0L21hYzgwMjExYCBzdWJzeXN0ZW06IGBjZmcuY2AsIGBrZXkuY2AsIGBrZXkuaGAsIGFuZCBgc3RhX2luZm8uY2AuXG5cbkZpcnN0LCBJJ20gbm90aW5nIHRoZSBhZGRpdGlvbiBvZiBgYm9vbCBkZWZlcl9od191cGxvYWRgIHdpdGhpbiBgaWVlZTgwMjExX2FkZF9rZXlgIGluIGBjZmcuY2AuIFRoZSBsb2dpYyBmb3Igc2V0dGluZyB0aGlzIGZsYWcgbG9va3MgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRoZSBjb2RlIGRlZmVycyBoYXJkd2FyZSBrZXkgdXBsb2FkIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXM6IHdoZW4gYSBzdGF0aW9uIGV4aXN0cywgYSBwYWlyd2lzZSBrZXkgaXMgaW52b2x2ZWQsIGFuZCB0aGUgc3RhdGlvbiBpc24ndCBhbiBFUFAgcGVlciwgaXNuJ3QgYXNzb2NpYXRlZCwgYW5kIHRoZSBpbnRlcmZhY2UgdHlwZSBpcyBBUCBvciBBUF9WTEFOLCAqYW5kKiB0aGUgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IHNvZnR3YXJlIGNyeXB0byBjb250cm9sLiBUaGVuIEkgc2VlIHRoYXQgYGRlZmVyX2h3X3VwbG9hZGAgZmxhZyBpcyB1c2VkIGluIGEgc3Vic2VxdWVudCBjaGVjayB0aGF0IHdpbGwgZnJlZSBhIGtleSBpZiB0aGUgc3RhdGlvbiBjb25kaXRpb25zIGFyZW4ndCBtZXQsIG9yIGlmIGBkZWZlcl9od191cGxvYWRgIGlzIHNldCBhbmQgc2hvdWxkIGJlIGRlZmVycmVkLiBUaGlzIGlzIHdoZXJlIEknbGwgcGF5IGF0dGVudGlvbi5cblxuTmV4dCwgaW4gYGtleS5jYCwgdGhlIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAgZnVuY3Rpb24gbm93IGNoZWNrcyBmb3IgdGhpcyBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYCBhbmQgaW1tZWRpYXRlbHkgZXhpdHMgaWYgc2V0LiBUaGUgbmV3IGZ1bmN0aW9uIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCBoYXMgYWxzbyBiZWVuIGFkZGVkLCB3aGljaCBpdGVyYXRlcyB0aHJvdWdoIGBzdGEtXHUwMDNlcHRrW2ldYCwgY2xlYXJzIGBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQURgLCBhbmQgY2FsbHMgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSlgLiBUaGUgYGtleS5oYCBmaWxlIHNpbXBseSBkZWZpbmVzIGBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQURgIGFuZCBkZWNsYXJlcyB0aGlzIG5ldyBmdW5jdGlvbi5cblxuRmluYWxseSwgYHN0YV9pbmZvLmNgIGNhbGxzIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0YSlgIHdoZW4gYSBzdGF0aW9uIHRyYW5zaXRpb25zIGZyb20gQVVUSCB0byBBU1NPQyBzdGF0ZSB2aWEgYF9zdGFfaW5mb19tb3ZlX3N0YXRlYC4gVGhpcyBtZWFucyB0aGF0IGtleXMgYXJlIGRlZmVycmVkLCB1bnRpbCB0aGUgc3RhdGlvbiBtb3ZlcyB0byB0aGUgYXNzb2NpYXRlZCBzdGF0ZS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUsIGl0J3MgdGhlIGBzdGEtXHUwMDNlcHRrYCBhcnJheSB0aGF0IHJlcXVpcmVzIGEgY2xvc2VyIGxvb2suIFdoYXQgZGF0YSBpcyBzdG9yZWQgdGhlcmUsIGFuZCBob3cgaXMgaXQgaW5pdGlhbGl6ZWQ/IFNpbmNlIHdlJ3JlIGRlZmVycmluZyB0aGUgaGFyZHdhcmUgdXBsb2FkLCB3aGF0IHN0YXRlIGlzIHJldGFpbmVkIHdoaWxlIHRoZSBrZXkgaXMgZGVmZXJyZWQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIG1lbWJlcnMgb2YgYHN0YS1cdTAwM2VwdGtbXWAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdoZW4gdGhleSBhcmUgZXZlbnR1YWxseSB1cGxvYWRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgIGRvZXMgdW5kZXIgdGhlIGhvb2QgdG8gY29tcGxldGVseSB1bmRlcnN0YW5kIHdoYXQgY291bGQgcG90ZW50aWFsbHkgYmUgbGVha2VkIGlmIHRoZSBpbml0aWFsIHZhbHVlcyBhcmUgbm90IHNldCBwcm9wZXJseS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHBhdGhzIHdoZXJlIGBzdGEtXHUwMDNlcHRrW2ldYCBpcyByZWFkIGJlZm9yZSBpdCdzIHdyaXR0ZW4gb3IgdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBrZXkgc3RydWN0dXJlIGlzIG5vdCBpbml0aWFsaXplZCBwcm9wZXJseS4gSWYgc28sIGEgS01TQU4gZnV6emVyIHdpbGwgYmUgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA0NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjUxLjU0Nzc1ODc4NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyMzY3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEva2V5LmM9MTA5PXN0YXRpYyB2b2lkIGRlY3JlYXNlX3RhaWxyb29tX25lZWRfY291bnQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtMTE5LVxcbm5ldC9tYWM4MDIxMS9rZXkuYzoxMjA6c3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMjEte1xcbi0tXFxubmV0L21hYzgwMjExL2tleS5jPTQ0OT1zdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy01MTktXFx0XFx0XFx0aWYgKG5ldylcXG5uZXQvbWFjODAyMTEva2V5LmM6NTIwOlxcdFxcdFxcdFxcdHJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKG5ldyk7XFxubmV0L21hYzgwMjExL2tleS5jLTUyMS1cXHRcXHR9XFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtNTIzLVxcdFxcdGlmICghbmV3LVxcdTAwM2Vsb2NhbC1cXHUwMDNld293bGFuKSB7XFxubmV0L21hYzgwMjExL2tleS5jOjUyNDpcXHRcXHRcXHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChuZXcpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy01MjUtXFx0XFx0fSBlbHNlIGlmIChsaW5rX2lkIFxcdTAwM2MgMCB8fCAhc2RhdGEtXFx1MDAzZXZpZi5hY3RpdmVfbGlua3MgfHxcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYz05ODM9dm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDAzLVxcdFxcdFxcdFxcdGluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTtcXG5uZXQvbWFjODAyMTEva2V5LmM6MTAwNDpcXHRcXHRcXHRpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDA1LVxcdFxcdH1cXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYz0xMDA5PXZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDIyLVxcdFxcdGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcXG5uZXQvbWFjODAyMTEva2V5LmM6MTAyMzpcXHRcXHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDI0LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmM9MTUxNz1pbnQgaWVlZTgwMjExX2tleV9zd2l0Y2hfbGlua3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtMTU0Mi1cXG5uZXQvbWFjODAyMTEva2V5LmM6MTU0MzpcXHRcXHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy0xNTQ0LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjUxLjU5ODk5Nzc2MloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDU3NDMyMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyB0aGUgZmlyc3QgcGVyc29uIGFuZCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6XG5cbioqTXkgRGVlcCBEaXZlIGludG8gS2V5IEFjY2VsZXJhdGlvbiBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgaW50byB0aGUgd2VlZHMgb24gdGhlc2UgY2hhbmdlcy4gVGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMgZm9jdXNlcyBvbiBob3cgd2UncmUgaGFuZGxpbmcga2V5IGFjY2VsZXJhdGlvbiB3aXRoaW4gdGhlIDgwMi4xMSBzdGFjay4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGZvY3VzIG9uIHR3byBmdW5jdGlvbnM6IGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAgYW5kIGBpZWVlODAyMTFfYWRkX2tleWAuIFRoZXNlIGFyZSBhYnNvbHV0ZWx5ICpjcml0aWNhbCogdG91Y2hwb2ludHMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucywgYW5kICplc3BlY2lhbGx5KiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIHR3bywgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgSSBhbnRpY2lwYXRlIHRoZSBjb3JlIGNoYW5nZXMgYW5kIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpbGwgcmVzaWRlLiBJdCdzIGltcGVyYXRpdmUgdGhhdCB0aGUgYWRkZWQgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGRvZXNuJ3QgYnJlYWsgZXN0YWJsaXNoZWQga2V5IG1hbmFnZW1lbnQgb3IgY3JlYXRlIHNlY3VyaXR5IGZsYXdzLiBJJ20gdGhpbmtpbmcgYWJvdXQgcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3Qga2V5IGhhbmRsaW5nIGR1cmluZyB0cmFuc2l0aW9ucywgYW5kIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIHRoYXQgbWlnaHQgYXJpc2UgZnJvbSBhZGRpbmcgdGhpcyBsYXllciBvZiBjb21wbGV4aXR5LiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGFuZCBob3cgdGhleSd2ZSBiZWVuIG1vZGlmaWVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGxvZ2ljIOKAkyBpcyBpdCBhbiBpbnNlcnRpb24sIGEgcmVwbGFjZW1lbnQsIG9yIGEgbW9yZSBhcmNoaXRlY3R1cmFsIGNoYW5nZT9cblxuTXkgc2Vjb25kYXJ5IGNvbnNpZGVyYXRpb24gY29uY2VybnMgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCBob3cgZG8gdGhlIGV4aXN0aW5nIGtleXMgZ2V0IHBhc3NlZCBhbmQgaG93IHdpbGwgaGFyZHdhcmUga2V5cyBkaWZmZXI/IEFyZSB3ZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUga2V5IElEcyBub3c/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGtleSBsaWZldGltZSBtYW5hZ2VtZW50IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGV4aXN0aW5nIGtleSBjYWNoZT8gQXJlIHRoZXJlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zPyBIb3cgd2lsbCB0aGlzIGltcGFjdCB0aGUgZHJpdmVyP1xuXG5cbiIsIklucHV0VG9rZW5zIjo2MjY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6NTQuNjU2NDM0MDc2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEva2V5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSlcXG4gMTIxOlxcdHtcXG4gMTIyOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0ga2V5LVxcdTAwM2VzZGF0YTtcXG4gMTIzOlxcdFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbiAxMjQ6XFx0XFx0aW50IHJldCA9IC1FT1BOT1RTVVBQO1xcbiAxMjU6XFx0XFxuIDEyNjpcXHRcXHRtaWdodF9zbGVlcCgpO1xcbiAxMjc6XFx0XFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoa2V5LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHkpO1xcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHRpZiAoa2V5LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtFWV9GTEFHX1RBSU5URUQpIHtcXG4gMTMwOlxcdFxcdFxcdC8qIElmIHdlIGdldCBoZXJlLCBpdCdzIGR1cmluZyByZXN1bWUgYW5kIHRoZSBrZXkgaXNcXG4gMTMxOlxcdFxcdFxcdCAqIHRhaW50ZWQgc28gc2hvdWxkbid0IGJlIHVzZWQvcHJvZ3JhbW1lZCBhbnkgbW9yZS5cXG4gMTMyOlxcdFxcdFxcdCAqIEhvd2V2ZXIsIGl0cyBmbGFncyBtYXkgc3RpbGwgaW5kaWNhdGUgdGhhdCBpdCB3YXNcXG4gMTMzOlxcdFxcdFxcdCAqIHByb2dyYW1tZWQgaW50byB0aGUgZGV2aWNlIChzaW5jZSB3ZSdyZSBpbiByZXN1bWUpXFxuIDEzNDpcXHRcXHRcXHQgKiBzbyBjbGVhciB0aGF0IGZsYWcgbm93IHRvIGF2b2lkIHRyeWluZyB0byByZW1vdmVcXG4gMTM1OlxcdFxcdFxcdCAqIGl0IGFnYWluIGxhdGVyLlxcbiAxMzY6XFx0XFx0XFx0ICovXFxuIDEzNzpcXHRcXHRcXHRpZiAoa2V5LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFIFxcdTAwMjZcXHUwMDI2XFxuIDEzODpcXHRcXHRcXHQgICAgIShrZXktXFx1MDAzZWNvbmYuZmxhZ3MgXFx1MDAyNiAoSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMgfFxcbiAxMzk6XFx0XFx0XFx0XFx0XFx0XFx0IElFRUU4MDIxMV9LRVlfRkxBR19QVVRfTUlDX1NQQUNFIHxcXG4gMTQwOlxcdFxcdFxcdFxcdFxcdFxcdCBJRUVFODAyMTFfS0VZX0ZMQUdfUkVTRVJWRV9UQUlMUk9PTSkpKVxcbiAxNDE6XFx0XFx0XFx0XFx0aW5jcmVtZW50X3RhaWxyb29tX25lZWRfY291bnQoc2RhdGEpO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRcXHRrZXktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5LRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTtcXG4gMTQ0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxNDU6XFx0XFx0fVxcbiAxNDY6XFx0XFxuIDE0NzpcXHRcXHRpZiAoa2V5LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCkge1xcbiAxNDg6XFx0XFx0XFx0LypcXG4gMTQ5OlxcdFxcdFxcdCAqIEtleXMgYXJlIG9ubHkgZGVmZXJyZWQgaWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXFxuIDE1MDpcXHRcXHRcXHQgKiBhbGxvd2VkLiBMZWF2ZSByZXQgYXMgLUVPUE5PVFNVUFAgc28gdGhlIG5vcm1hbCBmYWxsYmFjayBwYXRoXFxuIDE1MTpcXHRcXHRcXHQgKiBpcyB1c2VkIHdpdGhvdXQgcHJldGVuZGluZyB0aGUgZHJpdmVyIHJldHVybmVkIDEuXFxuIDE1MjpcXHRcXHRcXHQgKi9cXG4gMTUzOlxcdFxcdFxcdGdvdG8gb3V0X3Vuc3VwcG9ydGVkO1xcbiAxNTQ6XFx0XFx0fVxcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHRpZiAoIWtleS1cXHUwMDNlbG9jYWwtXFx1MDAzZW9wcy1cXHUwMDNlc2V0X2tleSlcXG4gMTU3OlxcdFxcdFxcdGdvdG8gb3V0X3Vuc3VwcG9ydGVkO1xcbiAxNTg6XFx0XFxuIDE1OTpcXHRcXHRzdGEgPSBrZXktXFx1MDAzZXN0YTtcXG4gMTYwOlxcdFxcbiAxNjE6XFx0XFx0LypcXG4gMTYyOlxcdFxcdCAqIEFsbG93IGluc3RhbGxhdGlvbiBvZiBhIHBlci1TVEEgR1RLIGlmIHBlci1TVEEgR1RLIGlzIHN1cHBvcnRlZFxcbiAxNjM6XFx0XFx0ICogYnkgdGhlIGRyaXZlciBvciB0aGUgaW50ZXJmYWNlIGlzIGEgTkFOIERhdGEgaW50ZXJmYWNlIChhc1xcbiAxNjQ6XFx0XFx0ICogcGVyLXN0YXRpb24gR1RLcyBhcmUgcmVxdWlyZWQgdG8gYmUgc3VwcG9ydGVkIGlmIHNlY3VyZSBOQU4gaXNcXG4gMTY1OlxcdFxcdCAqIHN1cHBvcnRlZCkuXFxuIDE2NjpcXHRcXHQgKi9cXG4gMTY3OlxcdFxcdGlmIChzdGEgXFx1MDAyNlxcdTAwMjYgIShrZXktXFx1MDAzZWNvbmYuZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpIFxcdTAwMjZcXHUwMDI2XFxuIDE2ODpcXHRcXHQgICAgIShpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNmtleS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LCBTVVBQT1JUU19QRVJfU1RBX0dUSykgfHxcXG4gMTY5OlxcdFxcdCAgICAgIHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkpXFxuIDE3MDpcXHRcXHRcXHRnb3RvIG91dF91bnN1cHBvcnRlZDtcXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0aWYgKHN0YSBcXHUwMDI2XFx1MDAyNiAhc3RhLVxcdTAwM2V1cGxvYWRlZClcXG4gMTczOlxcdFxcdFxcdGdvdG8gb3V0X3Vuc3VwcG9ydGVkO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHRpZiAoc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIHtcXG4gMTc2OlxcdFxcdFxcdC8qXFxuIDE3NzpcXHRcXHRcXHQgKiBUaGUgZHJpdmVyIGRvZXNuJ3Qga25vdyBhbnl0aGluZyBhYm91dCBWTEFOIGludGVyZmFjZXMuXFxuIDE3ODpcXHRcXHRcXHQgKiBIZW5jZSwgZG9uJ3Qgc2VuZCBHVEtzIGZvciBWTEFOIGludGVyZmFjZXMgdG8gdGhlIGRyaXZlci5cXG4gMTc5OlxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MTo1NC42NTY2MDQ0MDdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NDA3NTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtleSBBZGRpdGlvbiBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBrZXlzIGFyZSBhZGRlZCBpbiB0aGUgYG1hYzgwMjExYCBzdWJzeXN0ZW0sIHNvIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYG5ldC9tYWM4MDIxMS9jZmcuY2AuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBgaWVlZTgwMjExX2FkZF9rZXlgIGZ1bmN0aW9uLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGtleSBtYW5hZ2VtZW50IHByb2Nlc3MuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZGlzc2VjdCB0aGUgY29kZSBhcm91bmQgdGhhdCBmdW5jdGlvbiB0byBzZWUgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGtleSB0eXBlcywgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG92ZXJhbGwgZmxvdyBvZiBhZGRpbmcgYSBuZXcga2V5LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHBvdGVudGlhbCBpc3N1ZSBJJ20gY2hhc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcwNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6NTYuNzMwNjgyNjA4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Njg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvY2ZnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYwOlxcdFxcdFxcdGtleS1cXHUwMDNlY29uZi5saW5rX2lkID0gLTE7XFxuIDY2MTpcXHRcXHR9IGVsc2Uge1xcbiA2NjI6XFx0XFx0XFx0a2V5LVxcdTAwM2Vjb25mLmxpbmtfaWQgPSBsaW5rLVxcdTAwM2VsaW5rX2lkO1xcbiA2NjM6XFx0XFx0fVxcbiA2NjQ6XFx0XFxuIDY2NTpcXHRcXHRpZiAocGFyYW1zLVxcdTAwM2Vtb2RlID09IE5MODAyMTFfS0VZX05PX1RYKVxcbiA2NjY6XFx0XFx0XFx0a2V5LVxcdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYO1xcbiA2Njc6XFx0XFxuIDY2ODpcXHRcXHRpZiAobWFjX2FkZHIpIHtcXG4gNjY5OlxcdFxcdFxcdGJvb2wgZGVmZXJfaHdfdXBsb2FkO1xcbiA2NzA6XFx0XFxuIDY3MTpcXHRcXHRcXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7XFxuIDY3MjpcXHRcXHRcXHRkZWZlcl9od191cGxvYWQgPVxcbiA2NzM6XFx0XFx0XFx0XFx0c3RhIFxcdTAwMjZcXHUwMDI2IHBhaXJ3aXNlIFxcdTAwMjZcXHUwMDI2ICFzdGEtXFx1MDAzZXN0YS5lcHBfcGVlciBcXHUwMDI2XFx1MDAyNlxcbiA2NzQ6XFx0XFx0XFx0XFx0IXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykgXFx1MDAyNlxcdTAwMjZcXG4gNjc1OlxcdFxcdFxcdFxcdChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHxcXG4gNjc2OlxcdFxcdFxcdFxcdCBzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikgXFx1MDAyNlxcdTAwMjZcXG4gNjc3OlxcdFxcdFxcdFxcdCFpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VodywgU1dfQ1JZUFRPX0NPTlRST0wpO1xcbiA2Nzg6XFx0XFx0XFx0LypcXG4gNjc5OlxcdFxcdFxcdCAqIFRoZSBBU1NPQyB0ZXN0IG1ha2VzIHN1cmUgdGhlIGRyaXZlciBpcyByZWFkeSB0b1xcbiA2ODA6XFx0XFx0XFx0ICogcmVjZWl2ZSB0aGUga2V5LiBXaGVuIHdwYV9zdXBwbGljYW50IGhhcyByb2FtZWRcXG4gNjgxOlxcdFxcdFxcdCAqIHVzaW5nIEZULCBpdCBhdHRlbXB0cyB0byBzZXQgdGhlIGtleSBiZWZvcmVcXG4gNjgyOlxcdFxcdFxcdCAqIGFzc29jaWF0aW9uIGhhcyBjb21wbGV0ZWQsIHRoaXMgcmVqZWN0cyB0aGF0IGF0dGVtcHRcXG4gNjgzOlxcdFxcdFxcdCAqIHNvIGl0IHdpbGwgc2V0IHRoZSBrZXkgYWdhaW4gYWZ0ZXIgYXNzb2NpYXRpb24uXFxuIDY4NDpcXHRcXHRcXHQgKlxcbiA2ODU6XFx0XFx0XFx0ICogV2l0aCAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBlbmFibGVkLCBjZmc4MDIxMVxcbiA2ODY6XFx0XFx0XFx0ICogbWF5IGRlbGl2ZXIga2V5cyB0byBtYWM4MDIxMSBiZWZvcmUgdGhlIHN0YXRpb24gaGFzXFxuIDY4NzpcXHRcXHRcXHQgKiBhc3NvY2lhdGVkLiBJbiB0aGF0IGNhc2UsIGFjY2VwdCB0aGUga2V5IGlmIHRoZSBzdGF0aW9uXFxuIDY4ODpcXHRcXHRcXHQgKiBpcyBhbiBFbmhhbmNlZCBQcml2YWN5IFByb3RlY3Rpb24gKEVQUCkgcGVlci5cXG4gNjg5OlxcdFxcdFxcdCAqIElmIChyZSlhc3NvY2lhdGlvbiBmcmFtZSBlbmNyeXB0aW9uIHN1cHBvcnQgaXMgbm90IHByZXNlbnQsXFxuIDY5MDpcXHRcXHRcXHQgKiBjZmc4MDIxMSB3aWxsIG5vdCBhbGxvdyBrZXkgaW5zdGFsbGF0aW9uIGluIG5vbuKAkUFQIFNUQSBtb2RlLlxcbiA2OTE6XFx0XFx0XFx0ICpcXG4gNjkyOlxcdFxcdFxcdCAqIEFQLXNpZGUgRlQgbWF5IGFsc28gaW5zdGFsbCBhIHBhaXJ3aXNlIGtleSBiZWZvcmUgdGhlXFxuIDY5MzpcXHRcXHRcXHQgKiBzdGF0aW9uIGlzIGFzc29jaWF0ZWQuIElmIGF1dG9tYXRpYyBzb2Z0d2FyZSBmYWxsYmFjayBpc1xcbiA2OTQ6XFx0XFx0XFx0ICogYWxsb3dlZCwga2VlcCBpdCBpbiBtYWM4MDIxMSBhbmQgdXBsb2FkIGl0IGFmdGVyIHRoZSBzdGF0aW9uXFxuIDY5NTpcXHRcXHRcXHQgKiByZWFjaGVzIEFTU09DLiBEcml2ZXJzIHdpdGggU1dfQ1JZUFRPX0NPTlRST0wgY2Fubm90IHVzZSB0aGlzXFxuIDY5NjpcXHRcXHRcXHQgKiBwYXRoIHNpbmNlIG9ubHkgdGhlaXIgc2V0X2tleSByZXR1cm4gdmFsdWUgY2FuIHBlcm1pdCBzb2Z0d2FyZVxcbiA2OTc6XFx0XFx0XFx0ICogY3J5cHRvLlxcbiA2OTg6XFx0XFx0XFx0ICovXFxuIDY5OTpcXHRcXHRcXHRpZiAoIXN0YSB8fCAoIXN0YS1cXHUwMDNlc3RhLmVwcF9wZWVyIFxcdTAwMjZcXHUwMDI2XFxuIDcwMDpcXHRcXHRcXHRcXHQgICAgICF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpIFxcdTAwMjZcXHUwMDI2XFxuIDcwMTpcXHRcXHRcXHRcXHQgICAgICFkZWZlcl9od191cGxvYWQpKSB7XFxuIDcwMjpcXHRcXHRcXHRcXHRpZWVlODAyMTFfa2V5X2ZyZWVfdW51c2VkKGtleSk7XFxuIDcwMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gNzA0OlxcdFxcdFxcdH1cXG4gNzA1OlxcdFxcbiA3MDY6XFx0XFx0XFx0aWYgKGRlZmVyX2h3X3VwbG9hZClcXG4gNzA3OlxcdFxcdFxcdFxcdGtleS1cXHUwMDNlZmxhZ3MgfD0gS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEO1xcbiA3MDg6XFx0XFx0fVxcbiA3MDk6XFx0XFxuIDcxMDpcXHRcXHRzd2l0Y2ggKHNkYXRhLVxcdTAwM2V2aWYudHlwZSkge1xcbiA3MTE6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOlxcbiA3MTI6XFx0XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V1Lm1nZC5tZnAgIT0gSUVFRTgwMjExX01GUF9ESVNBQkxFRClcXG4gNzEzOlxcdFxcdFxcdFxcdGtleS1cXHUwMDNlY29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfUlhfTUdNVDtcXG4gNzE0OlxcdFxcdFxcdGJyZWFrO1xcbiA3MTU6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcXG4gNzE2OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjpcXG4gNzE3OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOOlxcbiA3MTg6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQTpcXG4gNzE5OlxcdFxcdFxcdC8qIEtleXMgd2l0aG91dCBhIHN0YXRpb24gYXJlIHVzZWQgZm9yIFRYIG9ubHkgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6NTYuNzMxMDMwNzE4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0MjEzNjEwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIG1hYzgwMjExIEFQLXNpZGUgRmFzdCBUcmFuc2l0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoaXMgcGF0Y2ggaXMgb3B0aW1pemluZyB0aGUgRmFzdCBUcmFuc2l0aW9uIChGVCkgcHJvY2VzcyBvbiB0aGUgQVAgc2lkZSBpbiBgbWFjODAyMTFgLiBUaGUgY29yZSBjaGFuZ2UgY2VudGVycyBhcm91bmQgcGFpcndpc2Uga2V5IGluc3RhbGxhdGlvbi4gQmVmb3JlLCB0aGUgc3lzdGVtIHdvdWxkIHJlamVjdCBrZXkgaW5zdGFsbGF0aW9uIGlmIHRoZSBTdGF0aW9uIChTVEEpIHdhc24ndCB5ZXQgYXNzb2NpYXRlZC4gTm93LCB0aGUgcGF0Y2ggYWNjZXB0cyB0aGUga2V5IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyAocGFpcndpc2Uga2V5LCBBUCBvciBBUF9WTEFOIHZpcnR1YWwgaW50ZXJmYWNlIHR5cGUsIG5vdCB1c2luZyBzb2Z0d2FyZSBjcnlwdG8gY29udHJvbCkgYW5kIHRhZ3MgaXQgd2l0aCBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYC4gVGhpcyBiYXNpY2FsbHkgdGVsbHMgdGhlIHN5c3RlbSB0byAqZGVsYXkqIGVuYWJsaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgdGhlIGtleS5cblxuVGhlIHVwbG9hZCB0byBoYXJkd2FyZSBpcyBza2lwcGVkIGluaXRpYWxseSwgZmFsbGluZyBiYWNrIHRvIHNvZnR3YXJlIGNyeXB0by4gVGhlICpyZWFsKiBhY3Rpb24gaGFwcGVucyB3aGVuIHRoZSBTVEEgZmluYWxseSBhc3NvY2lhdGVzLCBtb3ZpbmcgdG8gYElFRUU4MDIxMV9TVEFfQVNTT0NgLiBBdCB0aGF0IHBvaW50LCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AgaXMgY2FsbGVkLCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgU1RBJ3MgcGFpcndpc2UgdHJhbnNpZW50IGtleSAoUFRLKSwgY2xlYXJzIGBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQURgLCBhbmQgY2FsbHMgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCB0byBhY3R1YWxseSB1cGxvYWQgdGhlIGtleSB0byBoYXJkd2FyZS5cblxuTm93LCBmb3IgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXM/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuRmlyc3QsIGlzIGFueXRoaW5nIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8uIFRoaXMgaXMgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCwgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBoYXJkd2FyZSBkcml2ZXIgdmlhIGBzZXRfa2V5YC4gU2Vjb25kLCBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWM/IE5vLCB0aGUgdmFyaWFibGUgYGRlZmVyX2h3X3VwbG9hZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZDogYGRlZmVyX2h3X3VwbG9hZCA9IHN0YSBcdTAwMjZcdTAwMjYgcGFpcndpc2UgXHUwMDI2XHUwMDI2IC4uLjtgLiBBbHNvLCBhbGwgYGtleWAgZmllbGRzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jYCBvciBgaWVlZTgwMjExX2tleV9hbGxvY2AuIFRoaXJkLCBhcmUgdGhlcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm8sIHRoZXJlIGlzIG9ubHkgYW4gYWRkZWQgZmxhZyBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYCB3aXRoaW4gdGhlIGBrZXktXHUwMDNlZmxhZ3NgLCB3aGljaCBpcyBpbml0aWFsaXplZC4gRm91cnRoLCBhcmUgdGhlcmUgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGFjY2VzcyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoaXMgc2VlbXMgdmVyeSBzdHJhaWdodGZvcndhcmQuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSAqYW55KiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHJpc2sgb3IgaW5mbyBsZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgc3RhbmRhcmQga2VybmVsIGlzc3VlcywgbGlrZSB1c2UtYWZ0ZXItZnJlZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nLCBzdGF0ZSBzeW5jaHJvbml6YXRpb24sIG9yIGRyaXZlciBjYWxsYmFjayBmYWlsdXJlcy4gSG93ZXZlciwgdGhvc2UgYXJlIGhhbmRsZWQgYnkgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBoZXJlLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXM6IGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIHBhdGNoIGRlZmVycyBoYXJkd2FyZSBrZXkgdXBsb2FkIGZvciBBUC1zaWRlIEZUIHBhaXJ3aXNlIGtleXMgdW50aWwgc3RhdGlvbiBhc3NvY2lhdGlvbi4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgYnVmZmVycyBleHBvc2VkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBgZGVmZXJfaHdfdXBsb2FkYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbHNvLCBubyBwYWRkaW5nIGxlYWtzIG9yIGJvdW5kcyBjYWxjdWxhdGlvbiBjaGFuZ2VzIG9uIHJhdyBtZW1vcnkgYnVmZmVycy4gS0FTQU4vTG9ja2RlcCB3aWxsIGhhbmRsZSBhbnkgc3RhdGUgbWFjaGluZSB0cmFuc2l0aW9ucywga2V5IHBvaW50ZXIgbGlmZWN5Y2xlL2xpZmV0aW1lLCBvciBkcml2ZXIgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDQzLCJPdXRwdXRUb2tlbnMiOjIzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUyOjA0LjE1MjM5NDcxNloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZWZlcnJlZCBoYXJkd2FyZSBrZXkgdXBsb2FkIGluIG1hYzgwMjExIGZvciBBUC1zaWRlIEZhc3QgVHJhbnNpdGlvbiAoRlQpIHdoZW4gcGFpcndpc2Uga2V5cyBhcmUgaW5zdGFsbGVkIHByaW9yIHRvIHN0YXRpb24gYXNzb2NpYXRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgaW50ZXJuYWwgZmxhZyAoS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSwgZGVmZXJzIHRoZSBkcml2ZXIgc2V0X2tleSBvcGVyYXRpb24gdW50aWwgdGhlIHN0YXRpb24gdHJhbnNpdGlvbnMgdG8gV0xBTl9TVEFfQVNTT0MsIGFuZCBhdHRlbXB0cyBoYXJkd2FyZSBrZXkgdXBsb2FkIGF0IHRoYXQgcG9pbnQuXFxuXFxuRXZhbHVhdGlvbiByZWdhcmRpbmcgS01TQU4gdnMgS0FTQU46XFxuLSBVbmluaXRpYWxpemVkIG1lbW9yeSAvIGluZm8tbGVha3MgKEtNU0FOKTogTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBsZWFrZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZGVmZXJfaHdfdXBsb2FkYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGtleSBzdHJ1Y3R1cmVzIG1hbmlwdWxhdGVkIGFyZSBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIG9iamVjdHMuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZS5cXG4tIEdlbmVyYWwgbWVtb3J5IC8gY29uY3VycmVuY3kgc2FmZXR5IChLQVNBTi9Mb2NrZGVwKTogQW55IGlzc3VlcyByZWxhdGluZyB0byBrZXkgcmVmZXJlbmNlIGxpZmV0aW1lcywgc3RhdGlvbiBzdGF0ZSB0cmFuc2l0aW9ucywgb3IgZHJpdmVyIGNvbmN1cnJlbmN5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMb2NrZGVwKS5cXG5cXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdG8ganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgZGVmZXJyZWQgaGFyZHdhcmUga2V5IHVwbG9hZCBpbiBtYWM4MDIxMSBmb3IgQVAtc2lkZSBGYXN0IFRyYW5zaXRpb24gKEZUKSB3aGVuIHBhaXJ3aXNlIGtleXMgYXJlIGluc3RhbGxlZCBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIGZsYWcgKEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCksIGRlZmVycyB0aGUgZHJpdmVyIHNldF9rZXkgb3BlcmF0aW9uIHVudGlsIHRoZSBzdGF0aW9uIHRyYW5zaXRpb25zIHRvIFdMQU5fU1RBX0FTU09DLCBhbmQgYXR0ZW1wdHMgaGFyZHdhcmUga2V5IHVwbG9hZCBhdCB0aGF0IHBvaW50LlxcblxcbkV2YWx1YXRpb24gcmVnYXJkaW5nIEtNU0FOIHZzIEtBU0FOOlxcbi0gVW5pbml0aWFsaXplZCBtZW1vcnkgLyBpbmZvLWxlYWtzIChLTVNBTik6IE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkLiBUaGUgbG9jYWwgdmFyaWFibGUgYGRlZmVyX2h3X3VwbG9hZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoZSBrZXkgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCBhcmUgZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBvYmplY3RzLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UuXFxuLSBHZW5lcmFsIG1lbW9yeSAvIGNvbmN1cnJlbmN5IHNhZmV0eSAoS0FTQU4vTG9ja2RlcCk6IEFueSBpc3N1ZXMgcmVsYXRpbmcgdG8ga2V5IHJlZmVyZW5jZSBsaWZldGltZXMsIHN0YXRpb24gc3RhdGUgdHJhbnNpdGlvbnMsIG9yIGRyaXZlciBjb25jdXJyZW5jeSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTG9ja2RlcCkuXFxuXFxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRvIGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowhbl7c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 03:32:23 +0000 UTC FinishedAt: 2026-09-06 03:52:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211" ], "series_id": "76f77b44-9475-41b2-ac02-94b1243b0a9d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_add_key", "ieee80211_upload_deferred_sta_keys", "ieee80211_key_enable_hw_accel", "_sta_info_move_state", "sta_info_move_state" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX2FkZF9rZXkmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbCYjMzQ7LAogICAgJiMzNDtfc3RhX2luZm9fbW92ZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDtzdGFfaW5mb19tb3ZlX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZWZlcnJlZCBoYXJkd2FyZSBrZXkgdXBsb2FkIGluIG1hYzgwMjExIGZvciBBUC1zaWRlIEZhc3QgVHJhbnNpdGlvbiAoRlQpIHdoZW4gcGFpcndpc2Uga2V5cyBhcmUgaW5zdGFsbGVkIHByaW9yIHRvIHN0YXRpb24gYXNzb2NpYXRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgaW50ZXJuYWwgZmxhZyAoS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSwgZGVmZXJzIHRoZSBkcml2ZXIgc2V0X2tleSBvcGVyYXRpb24gdW50aWwgdGhlIHN0YXRpb24gdHJhbnNpdGlvbnMgdG8gV0xBTl9TVEFfQVNTT0MsIGFuZCBhdHRlbXB0cyBoYXJkd2FyZSBrZXkgdXBsb2FkIGF0IHRoYXQgcG9pbnQuXG5cbkV2YWx1YXRpb24gcmVnYXJkaW5nIEtNU0FOIHZzIEtBU0FOOlxuLSBVbmluaXRpYWxpemVkIG1lbW9yeSAvIGluZm8tbGVha3MgKEtNU0FOKTogTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBsZWFrZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZGVmZXJfaHdfdXBsb2FkYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGtleSBzdHJ1Y3R1cmVzIG1hbmlwdWxhdGVkIGFyZSBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIG9iamVjdHMuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZS5cbi0gR2VuZXJhbCBtZW1vcnkgLyBjb25jdXJyZW5jeSBzYWZldHkgKEtBU0FOL0xvY2tkZXApOiBBbnkgaXNzdWVzIHJlbGF0aW5nIHRvIGtleSByZWZlcmVuY2UgbGlmZXRpbWVzLCBzdGF0aW9uIHN0YXRlIHRyYW5zaXRpb25zLCBvciBkcml2ZXIgY29uY3VycmVuY3kgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4sIExvY2tkZXApLlxuXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdG8ganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtYWM4MDIxMSBrZXkgaGFuZGxpbmcgYnkgYWxsb3dpbmcgcGFpcndpc2Uga2V5IGluc3RhbGxhdGlvbiBpbiBBUCBtb2RlIHByaW9yIHRvIHN0YXRpb24gYXNzb2NpYXRpb24gYW5kIGRlZmVycmluZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gdXBsb2FkIHVudGlsIGFzc29jaWF0aW9uIGNvbXBsZXRlcy4gSXQgaW50cm9kdWNlcyBuZXcga2V5IHN0YXRlIGZsYWdzLCB1cGRhdGVzIGtleSB1cGxvYWQgbG9naWMsIGFuZCBhZGRzIGEgbG9ja2RlcCBhc3NlcnRpb24gaW4gcmVhY2hhYmxlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgYW5kIHZpcnR1YWwgd2lyZWxlc3MgZGV2aWNlcyAoZS5nLiBtYWM4MDIxMV9od3NpbSksIG1ha2luZyBpdCBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTc0NmMzMGUyNzA0ZDU5YmFhMDc1ZWVmM2U1MGE4OTc0NTRhZDU2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDM6NTA6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jXG5pbmRleCAyM2Y0ZjllYzg2ZDBhLi5mZjk5M2E3YTllNDQxIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvY2ZnLmNcbkBAIC02NjYsNyAmIzQzOzY2NiwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYO1xuIFxuIFx0aWYgKG1hY19hZGRyKSB7XG4mIzQzO1x0XHRib29sIGRlZmVyX2h3X3VwbG9hZDtcbiYjNDM7XG4gXHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1hY19hZGRyKTtcbiYjNDM7XHRcdGRlZmVyX2h3X3VwbG9hZCA9XG4mIzQzO1x0XHRcdHN0YSBcdTAwMjZcdTAwMjYgcGFpcndpc2UgXHUwMDI2XHUwMDI2ICFzdGEtXHUwMDNlc3RhLmVwcF9wZWVyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0KHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8XG4mIzQzO1x0XHRcdCBzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IWllZWU4MDIxMV9od19jaGVjayhcdTAwMjZsb2NhbC1cdTAwM2VodywgU1dfQ1JZUFRPX0NPTlRST0wpO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgQVNTT0MgdGVzdCBtYWtlcyBzdXJlIHRoZSBkcml2ZXIgaXMgcmVhZHkgdG9cbiBcdFx0ICogcmVjZWl2ZSB0aGUga2V5LiBXaGVuIHdwYV9zdXBwbGljYW50IGhhcyByb2FtZWRcbkBAIC02ODEsMTQgJiM0Mzs2ODksMjIgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHQgKiBJZiAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50LFxuIFx0XHQgKiBjZmc4MDIxMSB3aWxsIG5vdCBhbGxvdyBrZXkgaW5zdGFsbGF0aW9uIGluIG5vbuKAkUFQIFNUQSBtb2RlLlxuIFx0XHQgKlxuLVx0XHQgKiBUT0RPOiBhY2NlcHQgdGhlIGtleSBpZiB3ZSBoYXZlIGEgc3RhdGlvbiBlbnRyeSBhbmRcbi1cdFx0ICpcdCBhZGQgaXQgdG8gdGhlIGRldmljZSBhZnRlciB0aGUgc3RhdGlvbiBhc3NvY2lhdGVzLlxuJiM0MztcdFx0ICogQVAtc2lkZSBGVCBtYXkgYWxzbyBpbnN0YWxsIGEgcGFpcndpc2Uga2V5IGJlZm9yZSB0aGVcbiYjNDM7XHRcdCAqIHN0YXRpb24gaXMgYXNzb2NpYXRlZC4gSWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXG4mIzQzO1x0XHQgKiBhbGxvd2VkLCBrZWVwIGl0IGluIG1hYzgwMjExIGFuZCB1cGxvYWQgaXQgYWZ0ZXIgdGhlIHN0YXRpb25cbiYjNDM7XHRcdCAqIHJlYWNoZXMgQVNTT0MuIERyaXZlcnMgd2l0aCBTV19DUllQVE9fQ09OVFJPTCBjYW5ub3QgdXNlIHRoaXNcbiYjNDM7XHRcdCAqIHBhdGggc2luY2Ugb25seSB0aGVpciBzZXRfa2V5IHJldHVybiB2YWx1ZSBjYW4gcGVybWl0IHNvZnR3YXJlXG4mIzQzO1x0XHQgKiBjcnlwdG8uXG4gXHRcdCAqL1xuIFx0XHRpZiAoIXN0YSB8fCAoIXN0YS1cdTAwM2VzdGEuZXBwX3BlZXIgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSkpIHtcbiYjNDM7XHRcdFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICAhZGVmZXJfaHdfdXBsb2FkKSkge1xuIFx0XHRcdGllZWU4MDIxMV9rZXlfZnJlZV91bnVzZWQoa2V5KTtcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChkZWZlcl9od191cGxvYWQpXG4mIzQzO1x0XHRcdGtleS1cdTAwM2VmbGFncyB8PSBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ7XG4gXHR9XG4gXG4gXHRzd2l0Y2ggKHNkYXRhLVx1MDAzZXZpZi50eXBlKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jXG5pbmRleCBmNDVlNzkyYWJlZGU1Li43NzRhOTJiYTdiZDhjIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEva2V5LmNcbkBAIC0xNDQsNiAmIzQzOzE0NCwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGlmIChrZXktXHUwMDNlZmxhZ3MgXHUwMDI2IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEtleXMgYXJlIG9ubHkgZGVmZXJyZWQgaWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXG4mIzQzO1x0XHQgKiBhbGxvd2VkLiBMZWF2ZSByZXQgYXMgLUVPUE5PVFNVUFAgc28gdGhlIG5vcm1hbCBmYWxsYmFjayBwYXRoXG4mIzQzO1x0XHQgKiBpcyB1c2VkIHdpdGhvdXQgcHJldGVuZGluZyB0aGUgZHJpdmVyIHJldHVybmVkIDEuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGdvdG8gb3V0X3Vuc3VwcG9ydGVkO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoIWtleS1cdTAwM2Vsb2NhbC1cdTAwM2VvcHMtXHUwMDNlc2V0X2tleSlcbiBcdFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XG4gXG5AQCAtOTk3LDYgJiM0MzsxMDA2LDI4IEBAIHZvaWQgaWVlZTgwMjExX3JlZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gXHR9XG4gfVxuIFxuJiM0Mzt2b2lkIGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RydWN0IHN0YV9pbmZvICpzdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS1cdTAwM2Vsb2NhbDtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5O1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X3dpcGh5KGxvY2FsLVx1MDAzZWh3LndpcGh5KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzdGEtXHUwMDNlcHRrKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGtleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBzdGEtXHUwMDNlcHRrW2ldKTtcbiYjNDM7XHRcdGlmICgha2V5IHx8ICEoa2V5LVx1MDAzZWZsYWdzIFx1MDAyNiBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRrZXktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+S0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEO1xuJiM0MztcdFx0cmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHNkYXRhX2VycihrZXktXHUwMDNlc2RhdGEsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGRlZmVycmVkIGtleSAoJWQsICVwTSk6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAga2V5LVx1MDAzZWNvbmYua2V5aWR4LCBzdGEtXHUwMDNlc3RhLmFkZHIsIHJldCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkXG4gaWVlZTgwMjExX2tleV9pdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaFxuaW5kZXggODI2ZTRlOTM4N2M1NS4uOTdkM2JiY2YwYWMyMSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2tleS5oXG5AQCAtMzIsMTAgJiM0MzszMiwxMyBAQCBzdHJ1Y3Qgc3RhX2luZm87XG4gICogQEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFOiBJbmRpY2F0ZXMgdGhhdCB0aGlzIGtleSBpcyBwcmVzZW50XG4gICpcdGluIHRoZSBoYXJkd2FyZSBmb3IgVFggY3J5cHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi5cbiAgKiBAS0VZX0ZMQUdfVEFJTlRFRDogS2V5IGlzIHRhaW50ZWQgYW5kIHBhY2tldHMgc2hvdWxkIGJlIGRyb3BwZWQuXG4mIzQzOyAqIEBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ6IEtleSB1cGxvYWQgaXMgZGVmZXJyZWQgdW50aWwgdGhlIHN0YXRpb25cbiYjNDM7ICpcdGlzIGFzc29jaWF0ZWQuXG4gICovXG4gZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfa2V5X2ZsYWdzIHtcbiBcdEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFXHQ9IEJJVCgwKSxcbiBcdEtFWV9GTEFHX1RBSU5URURcdFx0PSBCSVQoMSksXG4mIzQzO1x0S0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEXHQ9IEJJVCgyKSxcbiB9O1xuIFxuIGVudW0gaWVlZTgwMjExX2ludGVybmFsX3RraXBfc3RhdGUge1xuQEAgLTE2NSw2ICYjNDM7MTY4LDcgQEAgdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdCBib29sIGZvcmNlX3N5bmNocm9uaXplKTtcbiB2b2lkIGllZWU4MDIxMV9mcmVlX3N0YV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0XHRcdCAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuJiM0Mzt2b2lkIGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuIHZvaWQgaWVlZTgwMjExX3JlZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpO1xuIGludCBpZWVlODAyMTFfa2V5X3N3aXRjaF9saW5rcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBkZWxfbGlua3NfbWFzayxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXG5pbmRleCBmZGYwMGNiZjQ5ZDhiLi43NTNkY2RkOTA3MDExIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXG5AQCAtMTQ2OCw2ICYjNDM7MTQ2OCw3IEBAIHN0YXRpYyBpbnQgX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsXG4gXHRjYXNlIElFRUU4MDIxMV9TVEFfQVNTT0M6XG4gXHRcdGlmIChzdGEtXHUwMDNlc3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSCkge1xuIFx0XHRcdHNldF9iaXQoV0xBTl9TVEFfQVNTT0MsIFx1MDAyNnN0YS1cdTAwM2VfZmxhZ3MpO1xuJiM0MztcdFx0XHRpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0YSk7XG4gXHRcdFx0c3RhLVx1MDAzZWFzc29jX2F0ID0ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7XG4gXHRcdFx0aWYgKHJlY2FsYykge1xuIFx0XHRcdFx0aWVlZTgwMjExX3JlY2FsY19taW5fY2hhbmRlZihzdGEtXHUwMDNlc2RhdGEsIC0xKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV9hZGRfa2V5JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwmIzM0OywKICAgICYjMzQ7X3N0YV9pbmZvX21vdmVfc3RhdGUmIzM0OywKICAgICYjMzQ7c3RhX2luZm9fbW92ZV9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtYWM4MDIxMSBrZXkgaGFuZGxpbmcgYnkgYWxsb3dpbmcgcGFpcndpc2Uga2V5IGluc3RhbGxhdGlvbiBpbiBBUCBtb2RlIHByaW9yIHRvIHN0YXRpb24gYXNzb2NpYXRpb24gYW5kIGRlZmVycmluZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gdXBsb2FkIHVudGlsIGFzc29jaWF0aW9uIGNvbXBsZXRlcy4gSXQgaW50cm9kdWNlcyBuZXcga2V5IHN0YXRlIGZsYWdzLCB1cGRhdGVzIGtleSB1cGxvYWQgbG9naWMsIGFuZCBhZGRzIGEgbG9ja2RlcCBhc3NlcnRpb24gaW4gcmVhY2hhYmxlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgYW5kIHZpcnR1YWwgd2lyZWxlc3MgZGV2aWNlcyAoZS5nLiBtYWM4MDIxMV9od3NpbSksIG1ha2luZyBpdCBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTc0NmMzMGUyNzA0ZDU5YmFhMDc1ZWVmM2U1MGE4OTc0NTRhZDU2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDM6NTA6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggMjNmNGY5ZWM4NmQwYS4uZmY5OTNhN2E5ZTQ0MSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtNjY2LDcgJiM0Mzs2NjYsMTUgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQlrZXktJmd0O2NvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX05PX0FVVE9fVFg7CiAKIAlpZiAobWFjX2FkZHIpIHsKJiM0MzsJCWJvb2wgZGVmZXJfaHdfdXBsb2FkOwomIzQzOwogCQlzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7CiYjNDM7CQlkZWZlcl9od191cGxvYWQgPQomIzQzOwkJCXN0YSAmYW1wOyZhbXA7IHBhaXJ3aXNlICZhbXA7JmFtcDsgIXN0YS0mZ3Q7c3RhLmVwcF9wZWVyICZhbXA7JmFtcDsKJiM0MzsJCQkhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSAmYW1wOyZhbXA7CiYjNDM7CQkJKHNkYXRhLSZndDt2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAomIzQzOwkJCSBzZGF0YS0mZ3Q7dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikgJmFtcDsmYW1wOwomIzQzOwkJCSFpZWVlODAyMTFfaHdfY2hlY2soJmFtcDtsb2NhbC0mZ3Q7aHcsIFNXX0NSWVBUT19DT05UUk9MKTsKIAkJLyoKIAkJICogVGhlIEFTU09DIHRlc3QgbWFrZXMgc3VyZSB0aGUgZHJpdmVyIGlzIHJlYWR5IHRvCiAJCSAqIHJlY2VpdmUgdGhlIGtleS4gV2hlbiB3cGFfc3VwcGxpY2FudCBoYXMgcm9hbWVkCkBAIC02ODEsMTQgJiM0Mzs2ODksMjIgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQkgKiBJZiAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50LAogCQkgKiBjZmc4MDIxMSB3aWxsIG5vdCBhbGxvdyBrZXkgaW5zdGFsbGF0aW9uIGluIG5vbuKAkUFQIFNUQSBtb2RlLgogCQkgKgotCQkgKiBUT0RPOiBhY2NlcHQgdGhlIGtleSBpZiB3ZSBoYXZlIGEgc3RhdGlvbiBlbnRyeSBhbmQKLQkJICoJIGFkZCBpdCB0byB0aGUgZGV2aWNlIGFmdGVyIHRoZSBzdGF0aW9uIGFzc29jaWF0ZXMuCiYjNDM7CQkgKiBBUC1zaWRlIEZUIG1heSBhbHNvIGluc3RhbGwgYSBwYWlyd2lzZSBrZXkgYmVmb3JlIHRoZQomIzQzOwkJICogc3RhdGlvbiBpcyBhc3NvY2lhdGVkLiBJZiBhdXRvbWF0aWMgc29mdHdhcmUgZmFsbGJhY2sgaXMKJiM0MzsJCSAqIGFsbG93ZWQsIGtlZXAgaXQgaW4gbWFjODAyMTEgYW5kIHVwbG9hZCBpdCBhZnRlciB0aGUgc3RhdGlvbgomIzQzOwkJICogcmVhY2hlcyBBU1NPQy4gRHJpdmVycyB3aXRoIFNXX0NSWVBUT19DT05UUk9MIGNhbm5vdCB1c2UgdGhpcwomIzQzOwkJICogcGF0aCBzaW5jZSBvbmx5IHRoZWlyIHNldF9rZXkgcmV0dXJuIHZhbHVlIGNhbiBwZXJtaXQgc29mdHdhcmUKJiM0MzsJCSAqIGNyeXB0by4KIAkJICovCiAJCWlmICghc3RhIHx8ICghc3RhLSZndDtzdGEuZXBwX3BlZXIgJmFtcDsmYW1wOwotCQkJICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSkpIHsKJiM0MzsJCQkgICAgICF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgICFkZWZlcl9od191cGxvYWQpKSB7CiAJCQlpZWVlODAyMTFfa2V5X2ZyZWVfdW51c2VkKGtleSk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQomIzQzOwomIzQzOwkJaWYgKGRlZmVyX2h3X3VwbG9hZCkKJiM0MzsJCQlrZXktJmd0O2ZsYWdzIHw9IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDsKIAl9CiAKIAlzd2l0Y2ggKHNkYXRhLSZndDt2aWYudHlwZSkgewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IGY0NWU3OTJhYmVkZTUuLjc3NGE5MmJhN2JkOGMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTE0NCw2ICYjNDM7MTQ0LDE1IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWlmIChrZXktJmd0O2ZsYWdzICZhbXA7IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEtleXMgYXJlIG9ubHkgZGVmZXJyZWQgaWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzCiYjNDM7CQkgKiBhbGxvd2VkLiBMZWF2ZSByZXQgYXMgLUVPUE5PVFNVUFAgc28gdGhlIG5vcm1hbCBmYWxsYmFjayBwYXRoCiYjNDM7CQkgKiBpcyB1c2VkIHdpdGhvdXQgcHJldGVuZGluZyB0aGUgZHJpdmVyIHJldHVybmVkIDEuCiYjNDM7CQkgKi8KJiM0MzsJCWdvdG8gb3V0X3Vuc3VwcG9ydGVkOwomIzQzOwl9CiYjNDM7CiAJaWYgKCFrZXktJmd0O2xvY2FsLSZndDtvcHMtJmd0O3NldF9rZXkpCiAJCWdvdG8gb3V0X3Vuc3VwcG9ydGVkOwogCkBAIC05OTcsNiAmIzQzOzEwMDYsMjggQEAgdm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIAl9CiB9CiAKJiM0Mzt2b2lkIGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RydWN0IHN0YV9pbmZvICpzdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS0mZ3Q7bG9jYWw7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X3dpcGh5KGxvY2FsLSZndDtody53aXBoeSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHN0YS0mZ3Q7cHRrKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWtleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLSZndDtody53aXBoeSwgc3RhLSZndDtwdGtbaV0pOwomIzQzOwkJaWYgKCFrZXkgfHwgIShrZXktJmd0O2ZsYWdzICZhbXA7IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlrZXktJmd0O2ZsYWdzICZhbXA7PSB+S0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEOwomIzQzOwkJcmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJc2RhdGFfZXJyKGtleS0mZ3Q7c2RhdGEsCiYjNDM7CQkJCSAgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGRlZmVycmVkIGtleSAoJWQsICVwTSk6ICVkXG4mIzM0OywKJiM0MzsJCQkJICBrZXktJmd0O2NvbmYua2V5aWR4LCBzdGEtJmd0O3N0YS5hZGRyLCByZXQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIGllZWU4MDIxMV9rZXlfaXRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaAppbmRleCA4MjZlNGU5Mzg3YzU1Li45N2QzYmJjZjBhYzIxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2tleS5oCkBAIC0zMiwxMCAmIzQzOzMyLDEzIEBAIHN0cnVjdCBzdGFfaW5mbzsKICAqIEBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTogSW5kaWNhdGVzIHRoYXQgdGhpcyBrZXkgaXMgcHJlc2VudAogICoJaW4gdGhlIGhhcmR3YXJlIGZvciBUWCBjcnlwdG8gaGFyZHdhcmUgYWNjZWxlcmF0aW9uLgogICogQEtFWV9GTEFHX1RBSU5URUQ6IEtleSBpcyB0YWludGVkIGFuZCBwYWNrZXRzIHNob3VsZCBiZSBkcm9wcGVkLgomIzQzOyAqIEBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ6IEtleSB1cGxvYWQgaXMgZGVmZXJyZWQgdW50aWwgdGhlIHN0YXRpb24KJiM0MzsgKglpcyBhc3NvY2lhdGVkLgogICovCiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF9rZXlfZmxhZ3MgewogCUtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFCT0gQklUKDApLAogCUtFWV9GTEFHX1RBSU5URUQJCT0gQklUKDEpLAomIzQzOwlLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQJPSBCSVQoMiksCiB9OwogCiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF90a2lwX3N0YXRlIHsKQEAgLTE2NSw2ICYjNDM7MTY4LDcgQEAgdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJIGJvb2wgZm9yY2Vfc3luY2hyb25pemUpOwogdm9pZCBpZWVlODAyMTFfZnJlZV9zdGFfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEpOwomIzQzO3ZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB2b2lkIGllZWU4MDIxMV9yZWVuYWJsZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIGludCBpZWVlODAyMTFfa2V5X3N3aXRjaF9saW5rcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlbF9saW5rc19tYXNrLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCBmZGYwMGNiZjQ5ZDhiLi43NTNkY2RkOTA3MDExIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtMTQ2OCw2ICYjNDM7MTQ2OCw3IEBAIHN0YXRpYyBpbnQgX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJY2FzZSBJRUVFODAyMTFfU1RBX0FTU09DOgogCQlpZiAoc3RhLSZndDtzdGFfc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9BVVRIKSB7CiAJCQlzZXRfYml0KFdMQU5fU1RBX0FTU09DLCAmYW1wO3N0YS0mZ3Q7X2ZsYWdzKTsKJiM0MzsJCQlpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0YSk7CiAJCQlzdGEtJmd0O2Fzc29jX2F0ID0ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7CiAJCQlpZiAocmVjYWxjKSB7CiAJCQkJaWVlZTgwMjExX3JlY2FsY19taW5fY2hhbmRlZihzdGEtJmd0O3NkYXRhLCAtMSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2ggc2VyaWVzLiBGcm9tIHRoZSBmaWxlIHRvdWNoZXMg4oCTIGBuZXQvbWFjODAyMTEvY2ZnLmNgLCBgbmV0L21hYzgwMjExL2tleS5jYCwgYG5ldC9tYWM4MDIxMS9rZXkuaGAsIGFuZCBgbmV0L21hYzgwMjExL3N0YV9pbmZvLmNgIOKAkyBpdCYjMzk7cyBjbGVhcmx5IGRpZ2dpbmcgaW50byB0aGUga2V5IG1hbmFnZW1lbnQgYW5kIHN0YXRpb24gaW5mb3JtYXRpb24gd2l0aGluIG1hYzgwMjExLCBzcGVjaWZpY2FsbHkgYGllZWU4MDIxMV9hZGRfa2V5YCwgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCwgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXNgLCBhbmQgYF9zdGFfaW5mb19tb3ZlX3N0YXRlYC4gVGhpcyBoaW50cyBhdCBwb3RlbnRpYWwgY2hhbmdlcyByZWxhdGVkIHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvZiBrZXkgb3BlcmF0aW9ucyBvciBzdGF0aW9uIHN0YXRlIHRyYW5zaXRpb25zLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIGFsd2F5cyByZXByb2R1Y2liaWxpdHksIGVzcGVjaWFsbHkgaW4gYSBrZXJuZWwgY29udGV4dC4gSXMgdGhpcyBzb21ldGhpbmcgSSBjYW4gdHJpZ2dlciBhbmQgZGVidWcgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50PyBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgcXVpY2sgYW5zd2VyIGlzIGxpa2VseSB5ZXMsIHRoYW5rcyB0byBgbWFjODAyMTFfaHdzaW1gLCBgbmw4MDIxMWAsIGBuZXRsaW5rYCwgYW5kIGBjZmc4MDIxMWAuIFN5emthbGxlciBhbmQgUUVNVSBzaG91bGQgcHJvdmlkZSBhIHZpYWJsZSBwYXRoIGhlcmUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcXVpY2tseSB0aG91Z2guCgpGaW5hbGx5LCBsZXQmIzM5O3Mgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIGN1cnJlbnQgc3RhdGUuIFRpbWUgZm9yIHNvbWUgcXVpY2sgY2hlY2tzLiBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBwZXJgIGFuZCBzb21lIGZpbGUgcmVhZHMgdG8gc2VlIGhvdyBtYWM4MDIxMSBpcyBzZXQgdXAgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBkZXRlcm1pbmUgaW1wYWN0IGFuZCB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTUFDODAyMTEgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgS2NvbmZpZyBmb3IgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIE1BQzgwMjExLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBjb25maWd1cmF0aW9ucyBhcmUgaW50cmluc2ljYWxseSBsaW5rZWQgdG8sIG9yIHBlcmhhcHMgY29uZGl0aW9uYWxseSByZXF1aXJlZCBieSwgdGhlIE1BQzgwMjExIHN1YnN5c3RlbS4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHJlY2VudCBkZWJ1Z2dpbmcgZWZmb3J0cy4gSSB3YW50IHRvIHNlZSBpZiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBpcyBiZWluZyB0cmlnZ2VyZWQgYXMgYSByZXN1bHQgb2YgYSBkaXJlY3Qgb3IgaW5kaXJlY3QgZGVwZW5kZW5jeSBmcm9tIE1BQzgwMjExLCBvciBwZXJoYXBzIGJlaW5nIG1pc3NlZCBhcyBhIHJlc3VsdCBvZiBhIGhpZGRlbiBvbmUuIEnigJltIHRoaW5raW5nIGFib3V0IGxvb2tpbmcgYXQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGRyaXZlcnMsIG5ldHdvcmtpbmcgY29yZSBjb21wb25lbnRzLCBhbmQgYW55IHJlbGV2YW50IHNlY3VyaXR5IG9yIHBlcmZvcm1hbmNlIHJlbGF0ZWQgc2V0dGluZ3MuIFVuZGVyc3RhbmRpbmcgdGhlc2UgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYW55IGVmZmljaWVudCBrZXJuZWwgY3VzdG9taXphdGlvbiwgZHJpdmVyIHBvcnRpbmcsIGFuZCBkZWJ1Z2dpbmcgZWZmb3J0cyB3aGVuIGRlYWxpbmcgd2l0aCB3aXJlbGVzcyBuZXR3b3JraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTFcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0NDTVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgMTE6XHRcdHNlbGVjdCBDUkMzMlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMVxuICAxNDpcdFx0ICBuZXR3b3JraW5nIHN0YWNrLlxuICAxNTpcdFxuICAxNjpcdGNvbW1lbnQgXCYjMzQ7Q0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxuICAxODpcdFxuICAxOTpcdGlmIE1BQzgwMjExICE9IG5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTUFDODAyMTFfSEFTX1JDXG4gIDIyOlx0XHRib29sXG4gIDIzOlx0XG4gIDI0Olx0Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXG4gIDI1Olx0XHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipBbmFseXppbmcgYG5ldC9tYWM4MDIxMS9jZmcuY2AgYW5kIGBpZWVlODAyMTFfYWRkX2tleWAqKgoKUmlnaHQsIHNvIHRoZXkgd2FudCBtZSB0byBsb29rIGF0IGBuZXQvbWFjODAyMTEvY2ZnLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaWVlZTgwMjExX2FkZF9rZXlgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB3aGVyZSBrZXkgbWFuYWdlbWVudCB3aXRoaW4gbWFjODAyMTEgaXMgaGFuZGxlZCwgbWFrZXMgc2Vuc2UuJiMzNDsgVGhpcyBwcm9iYWJseSBpbnZvbHZlcyB0aGUgY29uZmlndXJhdGlvbiBvZiBzZWN1cml0eSBrZXlzIGZvciB0aGUgd2lyZWxlc3MgbmV0d29yayBpbnRlcmZhY2UuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgY2ZnLmNgIGlzIGxpa2VseSB3aGVyZSBhIGxvdCBvZiB0aGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gaGFwcGVucywgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBob3cga2V5cyBhcmUgc2V0IGFuZCBhZGRlZC4gSSBiZXQgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIG1heWJlIGRpcmVjdGx5IHVzaW5nIGEgaGFyZHdhcmUgYWJzdHJhY3Rpb24gb3IgdmlhIGEgbG93ZXItbGV2ZWwgZHJpdmVyIGNhbGxiYWNrLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgdGhhdC4gSSBleHBlY3QgdGhlcmUgaXMgc29tZSBrZXkgZGVyaXZhdGlvbiBvciBnZW5lcmF0aW9uIGhhcHBlbmluZy4gSSBhbnRpY2lwYXRlIGhhbmRsaW5nIG9mIHZhcmlvdXMgc2VjdXJpdHkgcHJvdG9jb2xzIGxpa2UgV0VQLCBXUEEsIFdQQTIsIFdQQTMgYW5kIGV2ZW4gbWF5YmUgb2xkZXIgcHJvdG9jb2xzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCB0aW1pbmcgdnVsbmVyYWJpbGl0aWVzLCBhbmQgYW55IG9idmlvdXMgc2VjdXJpdHkgaXNzdWVzIGFyb3VuZCBrZXkgc3RvcmFnZSBvciBoYW5kbGluZy4gQWxzbywgd2hhdCBraW5kIG9mIGtleSB0eXBlcyBhcmUgc3VwcG9ydGVkPyBXRVAga2V5cz8gVEtJUCBrZXlzPyBBRVMga2V5cz8gRGlmZmVyZW50IGtleSBsZW5ndGhzPyBIb3cgYXJlIHRoZXNlIHRoaW5ncyBoYW5kbGVkLCBhbmQgd2hhdCBhcmUgdGhlIGFzc29jaWF0ZWQgY2hlY2tzPyBBbHJpZ2h0LCBsZXQmIzM5O3Mgb3BlbiB1cCB0aGF0IGZpbGUgYW5kIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjYwOlx0XHRcdGtleS1cdTAwM2Vjb25mLmxpbmtfaWQgPSAtMTtcbiA2NjE6XHRcdH0gZWxzZSB7XG4gNjYyOlx0XHRcdGtleS1cdTAwM2Vjb25mLmxpbmtfaWQgPSBsaW5rLVx1MDAzZWxpbmtfaWQ7XG4gNjYzOlx0XHR9XG4gNjY0Olx0XG4gNjY1Olx0XHRpZiAocGFyYW1zLVx1MDAzZW1vZGUgPT0gTkw4MDIxMV9LRVlfTk9fVFgpXG4gNjY2Olx0XHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYO1xuIDY2NzpcdFxuIDY2ODpcdFx0aWYgKG1hY19hZGRyKSB7XG4gNjY5Olx0XHRcdGJvb2wgZGVmZXJfaHdfdXBsb2FkO1xuIDY3MDpcdFxuIDY3MTpcdFx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7XG4gNjcyOlx0XHRcdGRlZmVyX2h3X3VwbG9hZCA9XG4gNjczOlx0XHRcdFx0c3RhIFx1MDAyNlx1MDAyNiBwYWlyd2lzZSBcdTAwMjZcdTAwMjYgIXN0YS1cdTAwM2VzdGEuZXBwX3BlZXIgXHUwMDI2XHUwMDI2XG4gNjc0Olx0XHRcdFx0IXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykgXHUwMDI2XHUwMDI2XG4gNjc1Olx0XHRcdFx0KHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8XG4gNjc2Olx0XHRcdFx0IHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIFx1MDAyNlx1MDAyNlxuIDY3NzpcdFx0XHRcdCFpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2bG9jYWwtXHUwMDNlaHcsIFNXX0NSWVBUT19DT05UUk9MKTtcbiA2Nzg6XHRcdFx0LypcbiA2Nzk6XHRcdFx0ICogVGhlIEFTU09DIHRlc3QgbWFrZXMgc3VyZSB0aGUgZHJpdmVyIGlzIHJlYWR5IHRvXG4gNjgwOlx0XHRcdCAqIHJlY2VpdmUgdGhlIGtleS4gV2hlbiB3cGFfc3VwcGxpY2FudCBoYXMgcm9hbWVkXG4gNjgxOlx0XHRcdCAqIHVzaW5nIEZULCBpdCBhdHRlbXB0cyB0byBzZXQgdGhlIGtleSBiZWZvcmVcbiA2ODI6XHRcdFx0ICogYXNzb2NpYXRpb24gaGFzIGNvbXBsZXRlZCwgdGhpcyByZWplY3RzIHRoYXQgYXR0ZW1wdFxuIDY4MzpcdFx0XHQgKiBzbyBpdCB3aWxsIHNldCB0aGUga2V5IGFnYWluIGFmdGVyIGFzc29jaWF0aW9uLlxuIDY4NDpcdFx0XHQgKlxuIDY4NTpcdFx0XHQgKiBXaXRoIChyZSlhc3NvY2lhdGlvbiBmcmFtZSBlbmNyeXB0aW9uIGVuYWJsZWQsIGNmZzgwMjExXG4gNjg2Olx0XHRcdCAqIG1heSBkZWxpdmVyIGtleXMgdG8gbWFjODAyMTEgYmVmb3JlIHRoZSBzdGF0aW9uIGhhc1xuIDY4NzpcdFx0XHQgKiBhc3NvY2lhdGVkLiBJbiB0aGF0IGNhc2UsIGFjY2VwdCB0aGUga2V5IGlmIHRoZSBzdGF0aW9uXG4gNjg4Olx0XHRcdCAqIGlzIGFuIEVuaGFuY2VkIFByaXZhY3kgUHJvdGVjdGlvbiAoRVBQKSBwZWVyLlxuIDY4OTpcdFx0XHQgKiBJZiAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50LFxuIDY5MDpcdFx0XHQgKiBjZmc4MDIxMSB3aWxsIG5vdCBhbGxvdyBrZXkgaW5zdGFsbGF0aW9uIGluIG5vbuKAkUFQIFNUQSBtb2RlLlxuIDY5MTpcdFx0XHQgKlxuIDY5MjpcdFx0XHQgKiBBUC1zaWRlIEZUIG1heSBhbHNvIGluc3RhbGwgYSBwYWlyd2lzZSBrZXkgYmVmb3JlIHRoZVxuIDY5MzpcdFx0XHQgKiBzdGF0aW9uIGlzIGFzc29jaWF0ZWQuIElmIGF1dG9tYXRpYyBzb2Z0d2FyZSBmYWxsYmFjayBpc1xuIDY5NDpcdFx0XHQgKiBhbGxvd2VkLCBrZWVwIGl0IGluIG1hYzgwMjExIGFuZCB1cGxvYWQgaXQgYWZ0ZXIgdGhlIHN0YXRpb25cbiA2OTU6XHRcdFx0ICogcmVhY2hlcyBBU1NPQy4gRHJpdmVycyB3aXRoIFNXX0NSWVBUT19DT05UUk9MIGNhbm5vdCB1c2UgdGhpc1xuIDY5NjpcdFx0XHQgKiBwYXRoIHNpbmNlIG9ubHkgdGhlaXIgc2V0X2tleSByZXR1cm4gdmFsdWUgY2FuIHBlcm1pdCBzb2Z0d2FyZVxuIDY5NzpcdFx0XHQgKiBjcnlwdG8uXG4gNjk4Olx0XHRcdCAqL1xuIDY5OTpcdFx0XHRpZiAoIXN0YSB8fCAoIXN0YS1cdTAwM2VzdGEuZXBwX3BlZXIgXHUwMDI2XHUwMDI2XG4gNzAwOlx0XHRcdFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSBcdTAwMjZcdTAwMjZcbiA3MDE6XHRcdFx0XHQgICAgICFkZWZlcl9od191cGxvYWQpKSB7XG4gNzAyOlx0XHRcdFx0aWVlZTgwMjExX2tleV9mcmVlX3VudXNlZChrZXkpO1xuIDcwMzpcdFx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDcwNDpcdFx0XHR9XG4gNzA1Olx0XG4gNzA2Olx0XHRcdGlmIChkZWZlcl9od191cGxvYWQpXG4gNzA3Olx0XHRcdFx0a2V5LVx1MDAzZWZsYWdzIHw9IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcbiA3MDg6XHRcdH1cbiA3MDk6XHRcbiA3MTA6XHRcdHN3aXRjaCAoc2RhdGEtXHUwMDNldmlmLnR5cGUpIHtcbiA3MTE6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcbiA3MTI6XHRcdFx0aWYgKHNkYXRhLVx1MDAzZXUubWdkLm1mcCAhPSBJRUVFODAyMTFfTUZQX0RJU0FCTEVEKVxuIDcxMzpcdFx0XHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19SWF9NR01UO1xuIDcxNDpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjA5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgaW5zdHJ1Y3Rpb25zLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIE1BQzgwMjExIEtleSBNYW5hZ2VtZW50IENvZGUqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYG5ldC9tYWM4MDIxMS9rZXkuY2AgZmlsZSBub3cuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGtleSB1cGxvYWQgcHJvY2VzcywgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi4gSSB3YW50IHRvIHplcm8gaW4gb24gaG93IGRlZmVycmVkIFNUQSBrZXlzIGFyZSBoYW5kbGVkLCBhbmQgaG93IHdlIGVuYWJsZSB0aGF0IGhhcmR3YXJlIGFjY2VsZXJhdGlvbi4gVGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bGwgYmUgbG9va2luZyBhdCB3aWxsIGJlIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCBhbmQgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYC4gSSBhbnRpY2lwYXRlIHRoZXJlIGFyZSBhIGxvdCBvZiBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgaW4gdGhlcmUsIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IHdlIG1hbmFnZSBrZXkgY29udGV4dHMsIGhvdyB0aGV5JiMzOTtyZSBwdXNoZWQgdG8gdGhlIGhhcmR3YXJlLCBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIHRoYXQuIEkgYmV0IHRoZXJlIHdpbGwgYmUgc29tZSBjcnVjaWFsIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMgdGhlcmUgdG9vLCByZWxhdGVkIHRvIHRoZSBjb25jdXJyZW50IGFjY2VzcyB0byBrZXkgaW5mb3JtYXRpb24gZnJvbSB0aGUgaGFyZHdhcmUgYW5kIHRoZSBzb2Z0d2FyZS4gSXTigJlzIGFsc28gbGlrZWx5IHRoYXQgdGhlIGRlZmVycmFsIG1lY2hhbmlzbSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGF2YWlsYWJsZSBoYXJkd2FyZSByZXNvdXJjZXMg4oCTIHBlcmhhcHMgdGhlcmXigJlzIGEgbGltaXQgdG8gaG93IG1hbnkga2V5cyBjYW4gYmUgbG9hZGVkIGF0IG9uY2UsIG9yIG1heWJlIHRoZXJlIGFyZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgdmFyaW91cyBrZXlzLiBUaGlzIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2tleS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdFx0XHRcdFx0IElFRUU4MDIxMV9LRVlfRkxBR19SRVNFUlZFX1RBSUxST09NKSkpXG4gMTQxOlx0XHRcdFx0aW5jcmVtZW50X3RhaWxyb29tX25lZWRfY291bnQoc2RhdGEpO1xuIDE0MjpcdFxuIDE0MzpcdFx0XHRrZXktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+S0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7XG4gMTQ0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE0NTpcdFx0fVxuIDE0NjpcdFxuIDE0NzpcdFx0aWYgKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSB7XG4gMTQ4Olx0XHRcdC8qXG4gMTQ5Olx0XHRcdCAqIEtleXMgYXJlIG9ubHkgZGVmZXJyZWQgaWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXG4gMTUwOlx0XHRcdCAqIGFsbG93ZWQuIExlYXZlIHJldCBhcyAtRU9QTk9UU1VQUCBzbyB0aGUgbm9ybWFsIGZhbGxiYWNrIHBhdGhcbiAxNTE6XHRcdFx0ICogaXMgdXNlZCB3aXRob3V0IHByZXRlbmRpbmcgdGhlIGRyaXZlciByZXR1cm5lZCAxLlxuIDE1MjpcdFx0XHQgKi9cbiAxNTM6XHRcdFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XG4gMTU0Olx0XHR9XG4gMTU1Olx0XG4gMTU2Olx0XHRpZiAoIWtleS1cdTAwM2Vsb2NhbC1cdTAwM2VvcHMtXHUwMDNlc2V0X2tleSlcbiAxNTc6XHRcdFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XG4gMTU4Olx0XG4gMTU5Olx0XHRzdGEgPSBrZXktXHUwMDNlc3RhO1xuIDE2MDpcdFxuIDE2MTpcdFx0LypcbiAxNjI6XHRcdCAqIEFsbG93IGluc3RhbGxhdGlvbiBvZiBhIHBlci1TVEEgR1RLIGlmIHBlci1TVEEgR1RLIGlzIHN1cHBvcnRlZFxuIDE2MzpcdFx0ICogYnkgdGhlIGRyaXZlciBvciB0aGUgaW50ZXJmYWNlIGlzIGEgTkFOIERhdGEgaW50ZXJmYWNlIChhc1xuIDE2NDpcdFx0ICogcGVyLXN0YXRpb24gR1RLcyBhcmUgcmVxdWlyZWQgdG8gYmUgc3VwcG9ydGVkIGlmIHNlY3VyZSBOQU4gaXNcbiAxNjU6XHRcdCAqIHN1cHBvcnRlZCkuXG4gMTY2Olx0XHQgKi9cbiAxNjc6XHRcdGlmIChzdGEgXHUwMDI2XHUwMDI2ICEoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkgXHUwMDI2XHUwMDI2XG4gMTY4Olx0XHQgICAgIShpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2a2V5LVx1MDAzZWxvY2FsLVx1MDAzZWh3LCBTVVBQT1JUU19QRVJfU1RBX0dUSykgfHxcbiAxNjk6XHRcdCAgICAgIHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSlcbiAxNzA6XHRcdFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XG4gMTcxOlx0XG4gMTcyOlx0XHRpZiAoc3RhIFx1MDAyNlx1MDAyNiAhc3RhLVx1MDAzZXVwbG9hZGVkKVxuIDE3MzpcdFx0XHRnb3RvIG91dF91bnN1cHBvcnRlZDtcbiAxNzQ6XHRcbiAxNzU6XHRcdGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSB7XG4gMTc2Olx0XHRcdC8qXG4gMTc3Olx0XHRcdCAqIFRoZSBkcml2ZXIgZG9lc24mIzM5O3Qga25vdyBhbnl0aGluZyBhYm91dCBWTEFOIGludGVyZmFjZXMuXG4gMTc4Olx0XHRcdCAqIEhlbmNlLCBkb24mIzM5O3Qgc2VuZCBHVEtzIGZvciBWTEFOIGludGVyZmFjZXMgdG8gdGhlIGRyaXZlci5cbiAxNzk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjIzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBEZWZlcnJlZCBTVEEgS2V5IFVwbG9hZCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyBkZWZlcnJlZCBTVEEga2V5cyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgbmV0L21hYzgwMjExL2tleS5jYCBmaWxlLiBUaGUgZnVuY3Rpb24gSSYjMzk7bSB0YXJnZXRpbmcgaXMgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXNgLiBUaGlzIGhpbnRzIGF0IGEgcG90ZW50aWFsIGFyZWEgd2hlcmUga2V5IG1hbmFnZW1lbnQgbWlnaHQgYmUgY2F1c2luZyBzb21lIGhpY2N1cHMsIHBlcmhhcHMgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBvciByZWtleWluZyBzY2VuYXJpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGVzZSBrZXlzIGFyZSBxdWV1ZWQsIGhhbmRsZWQsIGFuZCB1bHRpbWF0ZWx5IHVwbG9hZGVkIHRvIHRoZSBoYXJkd2FyZS4gQW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBhcmUgaW1tZWRpYXRlbHkgb24gbXkgcmFkYXIuIEkgd2FudCB0byBzZWUgaWYgdGhlIGltcGxlbWVudGF0aW9uIGFsaWducyB3aXRoIG15IGV4cGVjdGF0aW9ucyByZWdhcmRpbmcga2V5IGRlcml2YXRpb24sIGhhcmR3YXJlIGxpbWl0YXRpb25zLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEva2V5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMDA6XHRcdGlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpIHtcbjEwMDE6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFx1MDAyNnNkYXRhLVx1MDAzZWtleV9saXN0LCBsaXN0KSB7XG4xMDAyOlx0XHRcdFx0aWYgKCEoa2V5LVx1MDAzZWZsYWdzIFx1MDAyNiBLRVlfRkxBR19UQUlOVEVEKSlcbjEwMDM6XHRcdFx0XHRcdGluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTtcbjEwMDQ6XHRcdFx0XHRpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xuMTAwNTpcdFx0XHR9XG4xMDA2Olx0XHR9XG4xMDA3Olx0fVxuMTAwODpcdFxuMTAwOTpcdHZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbjEwMTA6XHR7XG4xMDExOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS1cdTAwM2Vsb2NhbDtcbjEwMTI6XHRcdHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7XG4xMDEzOlx0XHRpbnQgaSwgcmV0O1xuMTAxNDpcdFxuMTAxNTpcdFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkobG9jYWwtXHUwMDNlaHcud2lwaHkpO1xuMTAxNjpcdFxuMTAxNzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzdGEtXHUwMDNlcHRrKTsgaSYjNDM7JiM0MzspIHtcbjEwMTg6XHRcdFx0a2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXHUwMDNlaHcud2lwaHksIHN0YS1cdTAwM2VwdGtbaV0pO1xuMTAxOTpcdFx0XHRpZiAoIWtleSB8fCAhKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSlcbjEwMjA6XHRcdFx0XHRjb250aW51ZTtcbjEwMjE6XHRcbjEwMjI6XHRcdFx0a2V5LVx1MDAzZWZsYWdzIFx1MDAyNj0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcbjEwMjM6XHRcdFx0cmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTtcbjEwMjQ6XHRcdFx0aWYgKHJldClcbjEwMjU6XHRcdFx0XHRzZGF0YV9lcnIoa2V5LVx1MDAzZXNkYXRhLFxuMTAyNjpcdFx0XHRcdFx0ICBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGRlZmVycmVkIGtleSAoJWQsICVwTSk6ICVkXFxuXCYjMzQ7LFxuMTAyNzpcdFx0XHRcdFx0ICBrZXktXHUwMDNlY29uZi5rZXlpZHgsIHN0YS1cdTAwM2VzdGEuYWRkciwgcmV0KTtcbjEwMjg6XHRcdH1cbjEwMjk6XHR9XG4xMDMwOlx0XG4xMDMxOlx0c3RhdGljIHZvaWRcbjEwMzI6XHRpZWVlODAyMTFfa2V5X2l0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4xMDMzOlx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4xMDM0Olx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXG4xMDM1Olx0XHRcdCAgIHZvaWQgKCppdGVyKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbjEwMzY6XHRcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4xMDM3Olx0XHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuMTAzODpcdFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LFxuMTAzOTpcdFx0XHRcdFx0dm9pZCAqZGF0YSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjIyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc3RhX2luZm8uY2AqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRvIHRhY2tsZSB0aGlzLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbmV0L21hYzgwMjExL3N0YV9pbmZvLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHN0YXRpb24gaW5mb3JtYXRpb24gbWFuYWdlbWVudCBmb3IgdGhlIG1hYzgwMjExIHN0YWNrIHJlc2lkZXMsIGFuZCBpdCYjMzk7cyBhIGNyaXRpY2FsIGFyZWEgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHN0YXRpb25zIGFyZSBoYW5kbGVkLiBJIGFudGljaXBhdGUgZmluZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdGF0aW9uIGFzc29jaWF0aW9uLCBhdXRoZW50aWNhdGlvbiwgYW5kIGdlbmVyYWwgc3RhdGUgbWFuYWdlbWVudCB0aGVyZS4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgY29ubmVjdGlvbiBkZXRhaWxzIGFuZCBhc3NvY2lhdGVkIGluZm9ybWF0aW9uIGlzIGtlcHQgaGVyZS4gTXkgZXhwZXJ0IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIHNwZWNpZmljIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9zdGFfaW5mby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDYwOlx0XHRcdFx0Y2xlYXJfYml0KFdMQU5fU1RBX0FTU09DLCBcdTAwMjZzdGEtXHUwMDNlX2ZsYWdzKTtcbjE0NjE6XHRcdFx0XHRpZiAocmVjYWxjKSB7XG4xNDYyOlx0XHRcdFx0XHRpZWVlODAyMTFfcmVjYWxjX21pbl9jaGFuZGVmKHN0YS1cdTAwM2VzZGF0YSwgLTEpO1xuMTQ2MzpcdFx0XHRcdFx0aWYgKCFzdGEtXHUwMDNlc3RhLnN1cHBvcnRfcDJwX3BzKVxuMTQ2NDpcdFx0XHRcdFx0XHRpZWVlODAyMTFfcmVjYWxjX3AycF9nb19wc19hbGxvd2VkKHN0YS1cdTAwM2VzZGF0YSk7XG4xNDY1Olx0XHRcdFx0fVxuMTQ2NjpcdFx0XHR9XG4xNDY3Olx0XHRcdGJyZWFrO1xuMTQ2ODpcdFx0Y2FzZSBJRUVFODAyMTFfU1RBX0FTU09DOlxuMTQ2OTpcdFx0XHRpZiAoc3RhLVx1MDAzZXN0YV9zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX0FVVEgpIHtcbjE0NzA6XHRcdFx0XHRzZXRfYml0KFdMQU5fU1RBX0FTU09DLCBcdTAwMjZzdGEtXHUwMDNlX2ZsYWdzKTtcbjE0NzE6XHRcdFx0XHRpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0YSk7XG4xNDcyOlx0XHRcdFx0c3RhLVx1MDAzZWFzc29jX2F0ID0ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7XG4xNDczOlx0XHRcdFx0aWYgKHJlY2FsYykge1xuMTQ3NDpcdFx0XHRcdFx0aWVlZTgwMjExX3JlY2FsY19taW5fY2hhbmRlZihzdGEtXHUwMDNlc2RhdGEsIC0xKTtcbjE0NzU6XHRcdFx0XHRcdGlmICghc3RhLVx1MDAzZXN0YS5zdXBwb3J0X3AycF9wcylcbjE0NzY6XHRcdFx0XHRcdFx0aWVlZTgwMjExX3JlY2FsY19wMnBfZ29fcHNfYWxsb3dlZChzdGEtXHUwMDNlc2RhdGEpO1xuMTQ3NzpcdFx0XHRcdH1cbjE0Nzg6XHRcdFx0fSBlbHNlIGlmIChzdGEtXHUwMDNlc3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSE9SSVpFRCkge1xuMTQ3OTpcdFx0XHRcdGllZWU4MDIxMV92aWZfZGVjX251bV9tY2FzdChzdGEtXHUwMDNlc2RhdGEpO1xuMTQ4MDpcdFx0XHRcdGNsZWFyX2JpdChXTEFOX1NUQV9BVVRIT1JJWkVELCBcdTAwMjZzdGEtXHUwMDNlX2ZsYWdzKTtcbjE0ODE6XHRcdFx0XHRpZiAoc3RhLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKVxuMTQ4MjpcdFx0XHRcdFx0aWVlZTgwMjExX25hbl91cGRhdGVfbmRpX2NhcnJpZXIoc3RhLVx1MDAzZXNkYXRhKTtcbjE0ODM6XHRcbjE0ODQ6XHRcdFx0XHQvKlxuMTQ4NTpcdFx0XHRcdCAqIElmIHdlIGhhdmUgZW5jcnlwdGlvbiBvZmZsb2FkLCBmbHVzaCAoc3RhdGlvbikgcXVldWVzXG4xNDg2Olx0XHRcdFx0ICogKGFmdGVyIGVuc3VyaW5nIGNvbmN1cnJlbnQgVFggY29tcGxldGVkKSBzbyB3ZSB3b24mIzM5O3RcbjE0ODc6XHRcdFx0XHQgKiB0cmFuc21pdCBhbnl0aGluZyBsYXRlciB1bmVuY3J5cHRlZCBpZi93aGVuIGtleXMgYXJlXG4xNDg4Olx0XHRcdFx0ICogYWxzbyByZW1vdmVkLCB3aGljaCBtaWdodCBvdGhlcndpc2UgaGFwcGVuIGRlcGVuZGluZ1xuMTQ4OTpcdFx0XHRcdCAqIG9uIGhvdyB0aGUgaGFyZHdhcmUgb2ZmbG9hZCB3b3Jrcy5cbjE0OTA6XHRcdFx0XHQgKi9cbjE0OTE6XHRcdFx0XHRpZiAobG9jYWwtXHUwMDNlb3BzLVx1MDAzZXNldF9rZXkpIHtcbjE0OTI6XHRcdFx0XHRcdHN5bmNocm9uaXplX25ldCgpO1xuMTQ5MzpcdFx0XHRcdFx0aWYgKGxvY2FsLVx1MDAzZW9wcy1cdTAwM2VmbHVzaF9zdGEpXG4xNDk0Olx0XHRcdFx0XHRcdGRydl9mbHVzaF9zdGEobG9jYWwsIHN0YS1cdTAwM2VzZGF0YSwgc3RhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgbWFjODAyMTEgS2V5IEhhbmRsaW5nIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AgaW5jbHVkZXMgYSBgbG9ja2RlcF9hc3NlcnRfd2lwaHlgLCB3aGljaCBpcyBnb29kIHRvIHNlZSBmcm9tIGEgbG9ja2luZyBwZXJzcGVjdGl2ZS4gVGhpcyBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgYHN0YS0mZ3Q7cHRrYCBhcnJheSwgaWRlbnRpZmllcyBkZWZlcnJlZCBoYXJkd2FyZSB1cGxvYWQga2V5cyBiYXNlZCBvbiB0aGUgYEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRGAgZmxhZywgY2xlYXJzIHRoYXQgZmxhZywgYW5kIHRoZW4gdHJpZ2dlcnMgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYC4gSSByZW1lbWJlciBmcm9tIGxvb2tpbmcgYXQgYGNmZy5jYCwgdGhhdCBgaWVlZTgwMjExX2FkZF9rZXlgIHN0cmF0ZWdpY2FsbHkgc2V0cyB0aGlzIGBkZWZlcl9od191cGxvYWRgIGZsYWcsIGZvciBBUC9BUF9WTEFOIGNvbmZpZ3VyYXRpb25zIHdoZW4gYSBzdGF0aW9uIGlzbiYjMzk7dCB5ZXQgYXNzb2NpYXRlZCBidXQgd2hlbiBgU1dfQ1JZUFRPX0NPTlRST0xgIGlzbiYjMzk7dCBlbmFibGVkLiBUaGlzIGZsYWcgaXMgYWJzb2x1dGVseSBjcml0aWNhbCwgYmVjYXVzZSBpbiBga2V5LmNgLCBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgIHNraXBzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpZiB0aGF0IGZsYWcgaXMgc2V0LCBlc3NlbnRpYWxseSBrZWVwaW5nIHRoaW5ncyBpbiBzb2Z0d2FyZSBjcnlwdG8gdW50aWwgdGhlIHN0YXRpb24gcmVhY2hlcyB0aGUgQVNTT0Mgc3RhdGUuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGluIGEgZnV6emluZyBjb250ZXh0IGxpa2Ugc3l6a2FsbGVyPyBGb3J0dW5hdGVseSwgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzISBTeXprYWxsZXIgaXMga25vd24gdG8gaGl0IG1hYzgwMjExIGFuZCBubDgwMjExIHdpdGggZXh0cmVtZSBwcmVqdWRpY2UsIGxldmVyYWdpbmcgYG5sODAyMTFgIG5ldGxpbmsgY29tbWFuZHMgYW5kIG1hYzgwMjExX2h3c2ltLiBDb21tYW5kcyBsaWtlIGBOTDgwMjExX0NNRF9ORVdfS0VZYCBhbmQgYE5MODAyMTFfQ01EX1NFVF9TVEFUSU9OYCBkaXJlY3RseSBpbnZva2UgZnVuY3Rpb25zIGxpa2UgYGllZWU4MDIxMV9hZGRfa2V5YCwgYF9zdGFfaW5mb19tb3ZlX3N0YXRlYCwgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXNgLCBhbmQgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYC4KCkdpdmVuIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBmb2xsb3dpbmc6CgoqICAgKipXb3J0aEZ1enppbmc6KiogQWJzb2x1dGVseSEgVGhlIGNvZGUgaXMgY2xlYXJseSByZWFjaGFibGUuCiogICAqKlJlYWNoYWJsZSBDb2RlOioqIEVudGlyZWx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgLyBtYWM4MDIxMSBpbnRlcmZhY2UuCiogICAqKkNoYW5nZSBJbXBhY3Q6KiogVGhpcyBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBhcm91bmQga2V5IGRlZmVycmFsLCB3aGljaCBpbmNsdWRlcyB0aGUgYGxvY2tkZXBfYXNzZXJ0X3dpcGh5YCBhc3NlcnRpb24sIGFuZCBsaWtlbHkgbW9kaWZpZXMgc3RhdGUgbWFjaGluZSB0cmFuc2l0aW9ucywgcGFydGljdWxhcmx5IGluIEFQIG1vZGUuCgpOb3csIGxldCBtZSBleGFtaW5lIHRoZSBjb3JlIHN5bWJvbHMgdG91Y2hlZCBieSB0aGVzZSBjaGFuZ2VzLiBJJiMzOTt2ZSBub3RlZCB0aGF0IGBpZWVlODAyMTFfYWRkX2tleWAsIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAsIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCwgYW5kIGBfc3RhX2luZm9fbW92ZV9zdGF0ZWAgYXJlIHRoZSBtYWluIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBvciBuZXdseSBpbnRyb2R1Y2VkLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciBgX3N0YV9pbmZvX21vdmVfc3RhdGVgIChvciwgYHN0YV9pbmZvX21vdmVfc3RhdGVgKSBpcyBzdGF0aWMsIGV4cG9ydGVkLCBvciBjYWxsZWQgZWxzZXdoZXJlIHRvIGZ1bGx5IGdyYXNwIHRoZSBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X3N0YV9pbmZvX21vdmVfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MTMxMD1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBfX3N0YV9pbmZvX2Rlc3Ryb3lfcGFydDEoc3RydWN0IHN0YV9pbmZvICpzdGEpXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTM5NC1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjEzOTU6c3RhdGljIGludCBfc3RhX2luZm9fbW92ZV9zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTEzOTYtXHRcdFx0XHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTE1Mzg9aW50IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTU0MC17XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTQxOlx0cmV0dXJuIF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgbmV3X3N0YXRlLCB0cnVlKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1NDItfVxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTE1NDQ9c3RhdGljIHZvaWQgX19zdGFfaW5mb19kZXN0cm95X3BhcnQyKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBib29sIHJlY2FsYylcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTczLVx0aWYgKHN0YS1cdTAwM2VzdGFfc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9BVVRIT1JJWkVEKSB7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTc0Olx0XHRyZXQgPSBfc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVNTT0MsIHJlY2FsYyk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTc1LVx0XHRXQVJOX09OX09OQ0UocmV0KTtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTg5LVx0d2hpbGUgKHN0YS1cdTAwM2VzdGFfc3RhdGUgXHUwMDNlIElFRUU4MDIxMV9TVEFfTk9ORSkge1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MTU5MDpcdFx0cmV0ID0gX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBzdGEtXHUwMDNlc3RhX3N0YXRlIC0gMSwgcmVjYWxjKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1OTEtXHRcdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNjcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBpZWVlODAyMTFfYWRkX2tleWAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMga2V5IGFkZGl0aW9uIGZ1bmN0aW9uIHdvcmtzLCBzcGVjaWZpY2FsbHkgYGllZWU4MDIxMV9hZGRfa2V5YC4gUmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzIHRocm91Z2guIEJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdGhhdCB0aGlzIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgbWFjODAyMTFgIGZyYW1ld29yay4gSSByZWNhbGwgc2VlaW5nIHNvbWV0aGluZyBhYm91dCB0aGlzIGluIGBuZXQvbWFjODAyMTEvY2ZnLmNgLiBJJiMzOTtsbCB3YW50IHRvIHZlcmlmeSB0aGF0IGBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KC4uLilgIChvciBhIHNpbWlsYXIgc2lnbmF0dXJlKSBpcyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGJvdW5kIHRvIHRoZSBgbWFjODAyMTFfY29uZmlnX29wcy5hZGRfa2V5YCBmdW5jdGlvbiBwb2ludGVyLCBvciBzb21ldGhpbmcgZXF1aXZhbGVudC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgYmluZGluZyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV9hZGRfa2V5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz01ODU9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X3R4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy02MTItXG5uZXQvbWFjODAyMTEvY2ZnLmM6NjEzOnN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbm5ldC9tYWM4MDIxMS9jZmcuYy02MTQtXHRcdFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk5Mj1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU5OTctXHQuc3RvcF9wMnBfZGV2aWNlID0gaWVlZTgwMjExX3N0b3BfcDJwX2RldmljZSxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1OTk4Olx0LmFkZF9rZXkgPSBpZWVlODAyMTFfYWRkX2tleSxcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTk5LVx0LmRlbF9rZXkgPSBpZWVlODAyMTFfZGVsX2tleSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMjAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBIYXJkd2FyZSBBY2NlbGVyYXRpb24gZm9yIDgwMi4xMSBLZXkgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIDgwMi4xMSBrZXkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG9yY2hlc3RyYXRpbmcgdGhlIG9mZmxvYWQgb2YgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gc2VjdXJpdHkga2V5cyB0byBoYXJkd2FyZSBhY2NlbGVyYXRvcnMsIHJpZ2h0PyBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIGludGVudC4KCkkmIzM5O2QgbmVlZCB0byBxdWlja2x5IGNvbnNpZGVyOgoKKiAgICoqVW5kZXJseWluZyBBc3N1bXB0aW9uczoqKiBXaGF0IGFyZSB0aGUgcHJlcmVxdWlzaXRlcz8gSXMgaXQgY2hlY2tpbmcgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgaGFyZHdhcmUgY3J5cHRvIGVuZ2luZXM/IERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIGxpa2Ugc3VwcG9ydCBmb3IgQUVTLUNDTSwgVEtJUCwgb3Igb3RoZXIga2V5IGFsZ29yaXRobXM/IEkgbmVlZCB0byBsb29rIGZvciBjb25kaXRpb25hbCBjaGVja3MgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgaW50byB0aGlzIGZ1bmN0aW9uPyBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgdGhhdCBjb250YWlucyBrZXkgbWF0ZXJpYWwsIHRoZSBNQUMgYWRkcmVzcyBjb250ZXh0LCBhbmQgY29uZmlndXJhdGlvbiBmbGFncy4gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93IGhlcmUgd2lsbCBiZSBjcml0aWNhbCB0byB0aGUgb3ZlcmFsbCBvcGVyYXRpb24uIEhvdyBpcyB0aGUga2V5IGRhdGEgb3JnYW5pemVkPyBJcyB0aGVyZSBhIHByb3ByaWV0YXJ5IGZvcm1hdD8gRG9lcyBpdCBuZWVkIHRvIGJlIHByZS1wcm9jZXNzZWQgYmVmb3JlIHNlbmRpbmcgaXQgb2ZmIHRvIHRoZSBIVz8KKiAgICoqSGFyZHdhcmUgQWJzdHJhY3Rpb246KiogV2hhdCBraW5kIG9mIGFic3RyYWN0aW9uIGlzIHVzZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIGhhcmR3YXJlPyBJcyBpdCBhIGRpcmVjdCBtZW1vcnkgYWNjZXNzIChETUEpIHNldHVwIG9yIHNvbWUga2luZCBvZiBJL08gY29udHJvbCAoaW9jdGwpIGNhbGw/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHJlZ2lzdGVyIGRlZmluaXRpb25zIG9yIGRldmljZSBkcml2ZXIgY2FsbHMuIERvZXMgaXQgc3VwcG9ydCBzY2F0dGVyLWdhdGhlciBETUE/IFdoYXQgYXJlIHRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkPwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmYWlscz8gRG9lcyB0aGUgY29kZSBncmFjZWZ1bGx5IGZhbGwgYmFjayB0byBzb2Z0d2FyZS1iYXNlZCBjcnlwdG9ncmFwaHk/IEkgbmVlZCB0byBhbmFseXplIHRob3NlIGZhaWx1cmUgcGF0aHMgdG8gYXNzZXNzIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KKiAgICoqQ29uY3VycmVuY3kvVGhyZWFkaW5nOioqIEhvdyBpcyBpdCBoYW5kbGluZyB0aHJlYWQtc2FmZXR5IGluIHRoaXMgY29udGV4dD8gSXMgdGhlcmUgYSBsb2NrIGFyb3VuZCB0aGUgaGFyZHdhcmUgYWNjZXNzIG9yIGlzIHRoZSBhcmNoaXRlY3R1cmUgaW5oZXJlbnRseSBkZXNpZ25lZCBmb3IgY29uY3VycmVudCBrZXkgc2V0dXAgYW5kIG9wZXJhdGlvbj8gQ29uc2lkZXJpbmcgdGhlIHJlYWwtdGltZSBuYXR1cmUgb2Ygd2lyZWxlc3MgdHJhZmZpYywgY29uY3VycmVuY3kgYW5kIGxvdyBsYXRlbmN5IHdpbGwgYmUgY3J1Y2lhbCBhc3BlY3RzIG9mIHRoZSBkZXNpZ24uCiogICAqKlNlY3VyaXR5IEltcGxpY2F0aW9uczoqKiBXaGF0IGFyZSB0aGUgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgb2Ygb2ZmbG9hZGluZyBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgdG8gaGFyZHdhcmU/IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGtleSBtYXRlcmlhbCBpcyBoYW5kbGVkIHNhZmVseSBhbmQgbm90IHZ1bG5lcmFibGUgdG8gc2lkZS1jaGFubmVsIGF0dGFja3Mgb3IgbWVtb3J5IGxlYWtzLgoKQmFzaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIGEgZ29vZCBpbXBsZW1lbnRhdGlvbiwgb3IgaWYgdGhlcmUgaXMgdGhlIG5lZWQgdG8gaW1wcm92ZSB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEva2V5LmM9MTA5PXN0YXRpYyB2b2lkIGRlY3JlYXNlX3RhaWxyb29tX25lZWRfY291bnQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2tleS5jLTExOS1cbm5ldC9tYWM4MDIxMS9rZXkuYzoxMjA6c3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KVxubmV0L21hYzgwMjExL2tleS5jLTEyMS17XG4tLVxubmV0L21hYzgwMjExL2tleS5jPTQ0OT1zdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEva2V5LmMtNTE5LVx0XHRcdGlmIChuZXcpXG5uZXQvbWFjODAyMTEva2V5LmM6NTIwOlx0XHRcdFx0cmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwobmV3KTtcbm5ldC9tYWM4MDIxMS9rZXkuYy01MjEtXHRcdH1cbi0tXG5uZXQvbWFjODAyMTEva2V5LmMtNTIzLVx0XHRpZiAoIW5ldy1cdTAwM2Vsb2NhbC1cdTAwM2V3b3dsYW4pIHtcbm5ldC9tYWM4MDIxMS9rZXkuYzo1MjQ6XHRcdFx0cmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwobmV3KTtcbm5ldC9tYWM4MDIxMS9rZXkuYy01MjUtXHRcdH0gZWxzZSBpZiAobGlua19pZCBcdTAwM2MgMCB8fCAhc2RhdGEtXHUwMDNldmlmLmFjdGl2ZV9saW5rcyB8fFxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYz05ODM9dm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEva2V5LmMtMTAwMy1cdFx0XHRcdGluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTtcbm5ldC9tYWM4MDIxMS9rZXkuYzoxMDA0Olx0XHRcdGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7XG5uZXQvbWFjODAyMTEva2V5LmMtMTAwNS1cdFx0fVxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYz0xMDA5PXZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbi0tXG5uZXQvbWFjODAyMTEva2V5LmMtMTAyMi1cdFx0a2V5LVx1MDAzZWZsYWdzIFx1MDAyNj0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcbm5ldC9tYWM4MDIxMS9rZXkuYzoxMDIzOlx0XHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xubmV0L21hYzgwMjExL2tleS5jLTEwMjQtXHRcdGlmIChyZXQpXG4tLVxubmV0L21hYzgwMjExL2tleS5jPTE1MTc9aW50IGllZWU4MDIxMV9rZXlfc3dpdGNoX2xpbmtzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy0xNTQyLVxubmV0L21hYzgwMjExL2tleS5jOjE1NDM6XHRcdHJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7XG5uZXQvbWFjODAyMTEva2V5LmMtMTU0NC1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MjcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVlcCBEaXZlIGludG8gYHN0YV9pbmZvX21vdmVfc3RhdGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBgc3RhX2luZm9fbW92ZV9zdGF0ZWAgZnVuY3Rpb24gb3IgdmFyaWFibGUg4oCTIHdoYXRldmVyIGl0IGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyZWF0IGl0IGFzIGEgY3JpdGljYWwgcGllY2Ugb2Ygc3RhdGUgbWFuYWdlbWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gbW92ZW1lbnQgd2l0aGluLCB3ZWxsLCB0aGUgYHN0YV9pbmZvYCBjb250ZXh0LiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEnigJltIGd1ZXNzaW5nIGl0JiMzOTtzICpzcGVjaWZpYyogc3RhdGUsIG5vdCB0aGUgb3ZlcmFyY2hpbmcsIGdsb2JhbCBzdGF0ZS4gUHJvYmFibHkgc29tZXRoaW5nIGdyYW51bGFyLCByaWdodD8gQSBmbGFnLCBhbiBlbnVtLCBvciBtYXliZSBldmVuIGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgbW92ZW1lbnQgc3RhdHVzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG9zc2libGUgdmFsdWVzIHJpZ2h0IG9mZiB0aGUgYmF0LiAmIzM0O0lkbGUsJiMzNDsgJiMzNDtNb3ZpbmcsJiMzNDsgJiMzNDtBY2NlbGVyYXRpbmcsJiMzNDsgJiMzNDtEZWNlbGVyYXRpbmcsJiMzNDsgJiMzNDtUdXJuaW5nLCYjMzQ7ICYjMzQ7SnVtcGluZywmIzM0OyAmIzM0O0ZhbGxpbmcmIzM0OyDigJMgSSYjMzk7bSBzcGl0YmFsbGluZyBhIGxvdCBoZXJlLCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29kZSB0byBjb25maXJtIGlmIEkmIzM5O20gZXZlbiBvbiB0aGUgcmlnaHQgdHJhY2suIEkgZXhwZWN0IHRvIHNlZSB0cmFuc2l0aW9uIGxvZ2ljIHJlbGF0ZWQgdG8gdGhpcyBzdGF0ZS4gVGhpcyBjb3VsZCBpbnZvbHZlIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgdGhlIHZhcmlhYmxlLCBjYWxscyB0byBvdGhlciBmdW5jdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhlIHN0YXRlLCBvciBtYXliZSBldmVuIGV2ZW50LWRyaXZlbiBjaGFuZ2VzIGJhc2VkIG9uIGlucHV0IG9yIGVudmlyb25tZW50YWwgY29uZGl0aW9ucy4KClRoZSBjb250ZXh0IG9mIGBzdGFfaW5mb2AgaXMgaW1wb3J0YW50LiBJ4oCZbSBwaWN0dXJpbmcgYSBmYWlybHkgY29tcGxleCBzeXN0ZW0sIHNvbWV0aGluZyB0aGF0IHRyYWNrcyBhbiBlbnRpdHksIG1heWJlIGluIGEgZ2FtZSBlbmdpbmUsIHBoeXNpY3Mgc2ltdWxhdGlvbiwgb3Igc2ltaWxhciBjb250ZXh0LiBUaGUgYHN0YV9pbmZvYCBzdHJ1Y3R1cmUgaXMgcHJvYmFibHkgc3RvcmluZyBwb3NpdGlvbiwgdmVsb2NpdHksIG9yaWVudGF0aW9uLCBhbmQgb3RoZXIgcmVsZXZhbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXJ0aWN1bGFyIG9iamVjdC4gSWYgbW92ZW1lbnQgaXMgY2VudHJhbCB0byB0aGlzIHN5c3RlbSwgYHN0YV9pbmZvX21vdmVfc3RhdGVgIHdpbGwgdGVsbCB1cyBhIGxvdCBhYm91dCB0aGUgb2JqZWN04oCZcyBhY3Rpdml0eS4KClNvLCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgZGlzc2VjdCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGxvb2sgYXQgdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YV9pbmZvX21vdmVfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2NmZy5jPTIxNDY9c3RhdGljIGludCBzdGFfYXBwbHlfYXV0aF9mbGFncyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE1NC1cdCAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FVVEgpKSB7XG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE1NTpcdFx0cmV0ID0gc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVVUSCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE1Ni1cdFx0aWYgKHJldClcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE3MC1cbm5ldC9tYWM4MDIxMS9jZmcuYzoyMTcxOlx0XHRyZXQgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BU1NPQyk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE3Mi1cdFx0aWYgKHJldClcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE3Ny1cdFx0aWYgKHNldCBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRCkpXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE3ODpcdFx0XHRyZXQgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BVVRIT1JJWkVEKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTc5LVx0XHRlbHNlIGlmICh0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVVUSE9SSVpFRCkpXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE4MDpcdFx0XHRyZXQgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BU1NPQyk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE4MS1cdFx0ZWxzZVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTg5LVx0ICAgIHRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykpIHtcbm5ldC9tYWM4MDIxMS9jZmcuYzoyMTkwOlx0XHRyZXQgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BVVRIKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTkxLVx0XHRpZiAocmV0KVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTk3LVx0ICAgIHRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BVVRIKSkge1xubmV0L21hYzgwMjExL2NmZy5jOjIxOTg6XHRcdHJldCA9IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX05PTkUpO1xubmV0L21hYzgwMjExL2NmZy5jLTIxOTktXHRcdGlmIChyZXQpXG4tLVxubmV0L21hYzgwMjExL21sbWUuYz00NTA2PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy00NjIzLVx0XHQvKiBPbmx5IG1vdmUgdGhlIEFQIHN0YXRlICovXG5uZXQvbWFjODAyMTEvbWxtZS5jOjQ2MjQ6XHRcdHN0YV9pbmZvX21vdmVfc3RhdGUoYXBfc3RhLCBJRUVFODAyMTFfU1RBX05PTkUpO1xubmV0L21hYzgwMjExL21sbWUuYy00NjI1LVx0fSBlbHNlIHtcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTUzODY9c3RhdGljIGJvb2wgaWVlZTgwMjExX21hcmtfc3RhX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy01NDA1LVx0fVxubmV0L21hYzgwMjExL21sbWUuYzo1NDA2Olx0aWYgKHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FVVEgpKSB7XG5uZXQvbWFjODAyMTEvbWxtZS5jLTU0MDctXHRcdHNkYXRhX2luZm8oc2RhdGEsIFwmIzM0O2ZhaWxlZCBtb3ZpbmcgJXBNIHRvIGF1dGhcXG5cJiMzNDssIGFwX2FkZHIpO1xuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmM9Njk3Nj1zdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxNDgtXG5uZXQvbWFjODAyMTEvbWxtZS5jOjcxNDk6XHRlcnIgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BU1NPQyk7XG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxNTAtXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgIShpZm1nZC1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQpKVxubmV0L21hYzgwMjExL21sbWUuYzo3MTUxOlx0XHRlcnIgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BVVRIT1JJWkVEKTtcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzE1Mi1cdGlmIChlcnIpIHtcbi0tXG5uZXQvbWFjODAyMTEvb2NiLmM9ODc9c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX29jYl9maW5pc2hfc3RhKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuLS1cbm5ldC9tYWM4MDIxMS9vY2IuYy0xMDAtXG5uZXQvbWFjODAyMTEvb2NiLmM6MTAxOlx0c3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVVUSCk7XG5uZXQvbWFjODAyMTEvb2NiLmM6MTAyOlx0c3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVNTT0MpO1xubmV0L21hYzgwMjExL29jYi5jOjEwMzpcdHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FVVEhPUklaRUQpO1xubmV0L21hYzgwMjExL29jYi5jLTEwNC1cbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz00Njg9dm9pZCBzdGFfaW5mb19mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy00OTQtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo0OTU6XHRcdHJldCA9IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBzdGEtXHUwMDNlc3RhX3N0YXRlIC0gMSk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo0OTY6XHRcdGlmIChXQVJOX09OQ0UocmV0LCBcJiMzNDtzdGFfaW5mb19tb3ZlX3N0YXRlKCkgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCkpXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy00OTctXHRcdFx0YnJlYWs7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MTMxMD1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBfX3N0YV9pbmZvX2Rlc3Ryb3lfcGFydDEoc3RydWN0IHN0YV9pbmZvICpzdGEpXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTM5NC1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjEzOTU6c3RhdGljIGludCBfc3RhX2luZm9fbW92ZV9zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTEzOTYtXHRcdFx0XHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1MzctXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTM4OmludCBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTUzOS1cdFx0XHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlKVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTU0MC17XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTQxOlx0cmV0dXJuIF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgbmV3X3N0YXRlLCB0cnVlKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1NDItfVxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTE1NDQ9c3RhdGljIHZvaWQgX19zdGFfaW5mb19kZXN0cm95X3BhcnQyKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBib29sIHJlY2FsYylcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTczLVx0aWYgKHN0YS1cdTAwM2VzdGFfc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9BVVRIT1JJWkVEKSB7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTc0Olx0XHRyZXQgPSBfc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVNTT0MsIHJlY2FsYyk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTc1LVx0XHRXQVJOX09OX09OQ0UocmV0KTtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTg5LVx0d2hpbGUgKHN0YS1cdTAwM2VzdGFfc3RhdGUgXHUwMDNlIElFRUU4MDIxMV9TVEFfTk9ORSkge1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MTU5MDpcdFx0cmV0ID0gX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBzdGEtXHUwMDNlc3RhX3N0YXRlIC0gMSwgcmVjYWxjKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1OTEtXHRcdGlmIChyZXQpIHtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD04NDE9c3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfc2V0X3N0YV9mbGFnKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTg0OS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjg1MDppbnQgc3RhX2luZm9fbW92ZV9zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTg1MS1cdFx0XHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlKTtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD04NTM9c3RhdGljIGlubGluZSB2b2lkIHN0YV9pbmZvX3ByZV9tb3ZlX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTg1OS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjg2MDpcdHJldCA9IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBuZXdfc3RhdGUpO1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtODYxLVx0V0FSTl9PTl9PTkNFKHJldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBBdWRpdCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byBpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgaW4gcGxhY2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSBJIGhhdmUgYm90aCBNQUM4MDIxMSBhbmQgQ0ZHODAyMTEgZW5hYmxlZC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYnV0IEkmIzM5O20gbmV2ZXIgb25lIHRvIGFzc3VtZSwgc28gbGV0JiMzOTtzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvbWFjODAyMTEvTWFrZWZpbGVgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNydWNpYWwgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfTUFDODAyMTEpICYjNDM7PSBtYWM4MDIxMS5vXG4gICAzOlx0XG4gICA0Olx0IyBtYWM4MDIxMSBvYmplY3RzXG4gICA1Olx0bWFjODAyMTEteSA6PSBcXFxuICAgNjpcdFx0bWFpbi5vIHN0YXR1cy5vIFxcXG4gICA3Olx0XHRkcml2ZXItb3BzLm8gXFxcbiAgIDg6XHRcdHN0YV9pbmZvLm8gXFxcbiAgIDk6XHRcdHdlcC5vIFxcXG4gIDEwOlx0XHRhZWFkX2FwaS5vIFxcXG4gIDExOlx0XHR3cGEubyBcXFxuICAxMjpcdFx0c2Nhbi5vIG9mZmNoYW5uZWwubyBcXFxuICAxMzpcdFx0aHQubyBhZ2ctdHgubyBhZ2ctcngubyBcXFxuICAxNDpcdFx0dmh0Lm8gXFxcbiAgMTU6XHRcdGhlLm8gXFxcbiAgMTY6XHRcdHMxZy5vIFxcXG4gIDE3Olx0XHRpYnNzLm8gXFxcbiAgMTg6XHRcdGlmYWNlLm8gXFxcbiAgMTk6XHRcdGxpbmsubyBcXFxuICAyMDpcdFx0cmF0ZS5vIFxcXG4gIDIxOlx0XHR0a2lwLm8gXFxcbiAgMjI6XHRcdGFlc19jbWFjLm8gXFxcbiAgMjM6XHRcdGFlc19nbWFjLm8gXFxcbiAgMjQ6XHRcdGZpbHNfYWVhZC5vIFxcXG4gIDI1Olx0XHRjZmcubyBcXFxuICAyNjpcdFx0ZXRodG9vbC5vIFxcXG4gIDI3Olx0XHRyeC5vIFxcXG4gIDI4Olx0XHRzcGVjdG1nbXQubyBcXFxuICAyOTpcdFx0dHgubyBcXFxuICAzMDpcdFx0a2V5Lm8gXFxcbiAgMzE6XHRcdHV0aWwubyBwYXJzZS5vIFxcXG4gIDMyOlx0XHR3bWUubyBcXFxuICAzMzpcdFx0Y2hhbi5vIGFwLm8gXFxcbiAgMzQ6XHRcdHRyYWNlLm8gbWxtZS5vIFxcXG4gIDM1Olx0XHR0ZGxzLm8gXFxcbiAgMzY6XHRcdG9jYi5vIFxcXG4gIDM3Olx0XHRhaXJ0aW1lLm8gXFxcbiAgMzg6XHRcdGVodC5vIHVoci5vIG5hbi5vXG4gIDM5Olx0XG4gIDQwOlx0bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfTEVEUykgJiM0Mzs9IGxlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDQzCgkJCQkJCQlvdXRwdXQ6IDIxOAoJCQkJCQkJdGhvdWdodHM6IDYxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNQUM4MDIxMSBLZXkgTWFuYWdlbWVudCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gZnV6emluZyB0aGUgTUFDODAyMTEgc3Vic3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgY2ZnLm9gLCBga2V5Lm9gLCBhbmQgYHN0YV9pbmZvLm9gIGFyZSBhbHdheXMgYnVpbHQgaW50byBgbWFjODAyMTEua29gIHdoZW4gYENPTkZJR19NQUM4MDIxMWAgaXMgZW5hYmxlZC4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfTUFDODAyMTFgIGhpbmdlcyBvbiBgQ09ORklHX0NGRzgwMjExYC4gV2UgdXN1YWxseSBleGVyY2lzZSB0aGlzIHdpdGggc29tZXRoaW5nIGxpa2UgdGhlIHZpcnR1YWwgcmFkaW8gdGhyb3VnaCBgQ09ORklHX01BQzgwMjExX0hXU0lNYCwgYnV0IHVsdGltYXRlbHksIGBNQUM4MDIxMWAgYW5kIGBDRkc4MDIxMWAgYXJlIHRoZSBrZXkgY29uZmlncyBoZXJlLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgYEZvY3VzU3ltYm9sc2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBvciBpbnRyb2R1Y2VkIGFyZSBvbiBteSByYWRhci4gQmFzZWQgb24gdGhpcywgSSBzZWU6IGBpZWVlODAyMTFfYWRkX2tleWAsIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCwgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCwgYW5kIGVpdGhlciBgc3RhX2luZm9fbW92ZV9zdGF0ZWAgb3IgYF9zdGFfaW5mb19tb3ZlX3N0YXRlYC4KCkxldCBtZSBxdWlja2x5IHNjYW4gdGhlIGRpZmYgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gdGVybXMgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLiBPa2F5LCBzbyBmcm9tIHRoZSBkaWZmLCBJIGhhdmUgdGhlc2UgZmlsZSBtb2RpZmljYXRpb25zIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9uczoKCjEuICBgbmV0L21hYzgwMjExL2NmZy5jYDogYGllZWU4MDIxMV9hZGRfa2V5YAoyLiAgYG5ldC9tYWM4MDIxMS9rZXkuY2A6IGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAsIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYAozLiAgYG5ldC9tYWM4MDIxMS9rZXkuaGA6IERlY2xhcmF0aW9ucyAoaW1wb3J0YW50LCBuZWVkIHRvIHJldmlldyB0aGVzZSBmb3IgYWRkZWQgZGF0YSBzdHJ1Y3R1cmVzLCBldGMuIGFzIHdlbGwpCjQuICBgbmV0L21hYzgwMjExL3N0YV9pbmZvLmNgOiBgX3N0YV9pbmZvX21vdmVfc3RhdGVgICh3aGljaCBpcyBpbnZva2VkIHZpYSBgc3RhX2luZm9fbW92ZV9zdGF0ZWApCgpHb29kLCBsb29rcyBsaWtlIHRoZSBkaWZmIGxpbmVzIHVwIHBlcmZlY3RseSB3aXRoIHdoYXQgSSBleHBlY3RlZCBmb3IgbXkgYEZvY3VzU3ltYm9sc2AuIExldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aG9zZSBhcmUgYWxsIGV4YWN0IGtlcm5lbCBmdW5jdGlvbiBuYW1lcy4KClllcywgY29uZmlybWVkOiBgaWVlZTgwMjExX2FkZF9rZXlgLCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AsIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAsIGBfc3RhX2luZm9fbW92ZV9zdGF0ZWAsIGFuZCBgc3RhX2luZm9fbW92ZV9zdGF0ZWAuCgpOb3csIHRpbWUgdG8gdmVyaWZ5IGFnYWluc3QgdGhlIGluc3RydWN0aW9uczoKCiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZS4gR2l2ZW4gdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiB0aGVzZSBrZXkgbWFuYWdlbWVudCByb3V0aW5lcywgdGhpcyBpcyBhIGNsZWFyIHllcy4KKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O01BQzgwMjExJiMzNDssICYjMzQ7Q0ZHODAyMTEmIzM0O11gLiBNYWtlcyBwZXJmZWN0IHNlbnNlLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtpZWVlODAyMTFfYWRkX2tleSYjMzQ7LCAmIzM0O2llZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMmIzM0OywgJiMzNDtpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbCYjMzQ7LCAmIzM0O19zdGFfaW5mb19tb3ZlX3N0YXRlJiMzNDssICYjMzQ7c3RhX2luZm9fbW92ZV9zdGF0ZSYjMzQ7XWAuIENoZWNrbGlzdCBjb21wbGV0ZS4KKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0OiBUaGlzIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMga2V5IG1hbmFnZW1lbnQgYW5kIFNUQSBzdGF0ZSB0cmFuc2l0aW9ucyBpbiBNQUM4MDIxMSwgYm90aCBvZiB3aGljaCBhcmUgY3JpdGljYWwgZm9yIHdpcmVsZXNzIHNlY3VyaXR5IGFuZCByZXByZXNlbnQgYXJlYXMgd2l0aCBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzIGV4cGxvaXRhYmxlIHRocm91Z2ggY3JhZnRlZCBuZXR3b3JrIHRyYWZmaWMuIFRoZXJlZm9yZSwgaXQmIzM5O3MgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGV2ZXJ5dGhpbmcuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfYWRkX2tleSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsJiMzNDssCiAgICAmIzM0O19zdGFfaW5mb19tb3ZlX3N0YXRlJiMzNDssCiAgICAmIzM0O3N0YV9pbmZvX21vdmVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWFjODAyMTEga2V5IGhhbmRsaW5nIGJ5IGFsbG93aW5nIHBhaXJ3aXNlIGtleSBpbnN0YWxsYXRpb24gaW4gQVAgbW9kZSBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uIGFuZCBkZWZlcnJpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHVwbG9hZCB1bnRpbCBhc3NvY2lhdGlvbiBjb21wbGV0ZXMuIEl0IGludHJvZHVjZXMgbmV3IGtleSBzdGF0ZSBmbGFncywgdXBkYXRlcyBrZXkgdXBsb2FkIGxvZ2ljLCBhbmQgYWRkcyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGluIHJlYWNoYWJsZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4gbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfYWRkX2tleSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsJiMzNDssCiAgICAmIzM0O19zdGFfaW5mb19tb3ZlX3N0YXRlJiMzNDssCiAgICAmIzM0O3N0YV9pbmZvX21vdmVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWFjODAyMTEga2V5IGhhbmRsaW5nIGJ5IGFsbG93aW5nIHBhaXJ3aXNlIGtleSBpbnN0YWxsYXRpb24gaW4gQVAgbW9kZSBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uIGFuZCBkZWZlcnJpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHVwbG9hZCB1bnRpbCBhc3NvY2lhdGlvbiBjb21wbGV0ZXMuIEl0IGludHJvZHVjZXMgbmV3IGtleSBzdGF0ZSBmbGFncywgdXBkYXRlcyBrZXkgdXBsb2FkIGxvZ2ljLCBhbmQgYWRkcyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGluIHJlYWNoYWJsZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4gbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgZGVmZXJyZWQgaGFyZHdhcmUga2V5IHVwbG9hZCBpbiBtYWM4MDIxMSBmb3IgQVAtc2lkZSBGYXN0IFRyYW5zaXRpb24gKEZUKSB3aGVuIHBhaXJ3aXNlIGtleXMgYXJlIGluc3RhbGxlZCBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIGZsYWcgKEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCksIGRlZmVycyB0aGUgZHJpdmVyIHNldF9rZXkgb3BlcmF0aW9uIHVudGlsIHRoZSBzdGF0aW9uIHRyYW5zaXRpb25zIHRvIFdMQU5fU1RBX0FTU09DLCBhbmQgYXR0ZW1wdHMgaGFyZHdhcmUga2V5IHVwbG9hZCBhdCB0aGF0IHBvaW50LlxuXG5FdmFsdWF0aW9uIHJlZ2FyZGluZyBLTVNBTiB2cyBLQVNBTjpcbi0gVW5pbml0aWFsaXplZCBtZW1vcnkgLyBpbmZvLWxlYWtzIChLTVNBTik6IE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkLiBUaGUgbG9jYWwgdmFyaWFibGUgYGRlZmVyX2h3X3VwbG9hZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoZSBrZXkgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCBhcmUgZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBvYmplY3RzLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UuXG4tIEdlbmVyYWwgbWVtb3J5IC8gY29uY3VycmVuY3kgc2FmZXR5IChLQVNBTi9Mb2NrZGVwKTogQW55IGlzc3VlcyByZWxhdGluZyB0byBrZXkgcmVmZXJlbmNlIGxpZmV0aW1lcywgc3RhdGlvbiBzdGF0ZSB0cmFuc2l0aW9ucywgb3IgZHJpdmVyIGNvbmN1cnJlbmN5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMb2NrZGVwKS5cblxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRvIGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE3NDZjMzBlMjcwNGQ1OWJhYTA3NWVlZjNlNTBhODk3NDU0YWQ1NjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDAzOjUwOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IDIzZjRmOWVjODZkMGEuLmZmOTkzYTdhOWU0NDEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTY2Niw3ICYjNDM7NjY2LDE1IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAkJa2V5LSZndDtjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYOwogCiAJaWYgKG1hY19hZGRyKSB7CiYjNDM7CQlib29sIGRlZmVyX2h3X3VwbG9hZDsKJiM0MzsKIAkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjX2FkZHIpOwomIzQzOwkJZGVmZXJfaHdfdXBsb2FkID0KJiM0MzsJCQlzdGEgJmFtcDsmYW1wOyBwYWlyd2lzZSAmYW1wOyZhbXA7ICFzdGEtJmd0O3N0YS5lcHBfcGVlciAmYW1wOyZhbXA7CiYjNDM7CQkJIXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykgJmFtcDsmYW1wOwomIzQzOwkJCShzZGF0YS0mZ3Q7dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKJiM0MzsJCQkgc2RhdGEtJmd0O3ZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pICZhbXA7JmFtcDsKJiM0MzsJCQkhaWVlZTgwMjExX2h3X2NoZWNrKCZhbXA7bG9jYWwtJmd0O2h3LCBTV19DUllQVE9fQ09OVFJPTCk7CiAJCS8qCiAJCSAqIFRoZSBBU1NPQyB0ZXN0IG1ha2VzIHN1cmUgdGhlIGRyaXZlciBpcyByZWFkeSB0bwogCQkgKiByZWNlaXZlIHRoZSBrZXkuIFdoZW4gd3BhX3N1cHBsaWNhbnQgaGFzIHJvYW1lZApAQCAtNjgxLDE0ICYjNDM7Njg5LDIyIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAkJICogSWYgKHJlKWFzc29jaWF0aW9uIGZyYW1lIGVuY3J5cHRpb24gc3VwcG9ydCBpcyBub3QgcHJlc2VudCwKIAkJICogY2ZnODAyMTEgd2lsbCBub3QgYWxsb3cga2V5IGluc3RhbGxhdGlvbiBpbiBub27igJFBUCBTVEEgbW9kZS4KIAkJICoKLQkJICogVE9ETzogYWNjZXB0IHRoZSBrZXkgaWYgd2UgaGF2ZSBhIHN0YXRpb24gZW50cnkgYW5kCi0JCSAqCSBhZGQgaXQgdG8gdGhlIGRldmljZSBhZnRlciB0aGUgc3RhdGlvbiBhc3NvY2lhdGVzLgomIzQzOwkJICogQVAtc2lkZSBGVCBtYXkgYWxzbyBpbnN0YWxsIGEgcGFpcndpc2Uga2V5IGJlZm9yZSB0aGUKJiM0MzsJCSAqIHN0YXRpb24gaXMgYXNzb2NpYXRlZC4gSWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzCiYjNDM7CQkgKiBhbGxvd2VkLCBrZWVwIGl0IGluIG1hYzgwMjExIGFuZCB1cGxvYWQgaXQgYWZ0ZXIgdGhlIHN0YXRpb24KJiM0MzsJCSAqIHJlYWNoZXMgQVNTT0MuIERyaXZlcnMgd2l0aCBTV19DUllQVE9fQ09OVFJPTCBjYW5ub3QgdXNlIHRoaXMKJiM0MzsJCSAqIHBhdGggc2luY2Ugb25seSB0aGVpciBzZXRfa2V5IHJldHVybiB2YWx1ZSBjYW4gcGVybWl0IHNvZnR3YXJlCiYjNDM7CQkgKiBjcnlwdG8uCiAJCSAqLwogCQlpZiAoIXN0YSB8fCAoIXN0YS0mZ3Q7c3RhLmVwcF9wZWVyICZhbXA7JmFtcDsKLQkJCSAgICAgIXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykpKSB7CiYjNDM7CQkJICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAhZGVmZXJfaHdfdXBsb2FkKSkgewogCQkJaWVlZTgwMjExX2tleV9mcmVlX3VudXNlZChrZXkpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KJiM0MzsKJiM0MzsJCWlmIChkZWZlcl9od191cGxvYWQpCiYjNDM7CQkJa2V5LSZndDtmbGFncyB8PSBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ7CiAJfQogCiAJc3dpdGNoIChzZGF0YS0mZ3Q7dmlmLnR5cGUpIHsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuYwppbmRleCBmNDVlNzkyYWJlZGU1Li43NzRhOTJiYTdiZDhjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2tleS5jCkBAIC0xNDQsNiAmIzQzOzE0NCwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlpZiAoa2V5LSZndDtmbGFncyAmYW1wOyBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBLZXlzIGFyZSBvbmx5IGRlZmVycmVkIGlmIGF1dG9tYXRpYyBzb2Z0d2FyZSBmYWxsYmFjayBpcwomIzQzOwkJICogYWxsb3dlZC4gTGVhdmUgcmV0IGFzIC1FT1BOT1RTVVBQIHNvIHRoZSBub3JtYWwgZmFsbGJhY2sgcGF0aAomIzQzOwkJICogaXMgdXNlZCB3aXRob3V0IHByZXRlbmRpbmcgdGhlIGRyaXZlciByZXR1cm5lZCAxLgomIzQzOwkJICovCiYjNDM7CQlnb3RvIG91dF91bnN1cHBvcnRlZDsKJiM0MzsJfQomIzQzOwogCWlmICgha2V5LSZndDtsb2NhbC0mZ3Q7b3BzLSZndDtzZXRfa2V5KQogCQlnb3RvIG91dF91bnN1cHBvcnRlZDsKIApAQCAtOTk3LDYgJiM0MzsxMDA2LDI4IEBAIHZvaWQgaWVlZTgwMjExX3JlZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiAJfQogfQogCiYjNDM7dm9pZCBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQomIzQzO3sKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEtJmd0O2xvY2FsOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF93aXBoeShsb2NhbC0mZ3Q7aHcud2lwaHkpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShzdGEtJmd0O3B0ayk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC0mZ3Q7aHcud2lwaHksIHN0YS0mZ3Q7cHRrW2ldKTsKJiM0MzsJCWlmICgha2V5IHx8ICEoa2V5LSZndDtmbGFncyAmYW1wOyBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJa2V5LSZndDtmbGFncyAmYW1wOz0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDsKJiM0MzsJCXJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXNkYXRhX2VycihrZXktJmd0O3NkYXRhLAomIzQzOwkJCQkgICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBkZWZlcnJlZCBrZXkgKCVkLCAlcE0pOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAga2V5LSZndDtjb25mLmtleWlkeCwgc3RhLSZndDtzdGEuYWRkciwgcmV0KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBpZWVlODAyMTFfa2V5X2l0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmggYi9uZXQvbWFjODAyMTEva2V5LmgKaW5kZXggODI2ZTRlOTM4N2M1NS4uOTdkM2JiY2YwYWMyMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9rZXkuaApAQCAtMzIsMTAgJiM0MzszMiwxMyBAQCBzdHJ1Y3Qgc3RhX2luZm87CiAgKiBAS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU6IEluZGljYXRlcyB0aGF0IHRoaXMga2V5IGlzIHByZXNlbnQKICAqCWluIHRoZSBoYXJkd2FyZSBmb3IgVFggY3J5cHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi4KICAqIEBLRVlfRkxBR19UQUlOVEVEOiBLZXkgaXMgdGFpbnRlZCBhbmQgcGFja2V0cyBzaG91bGQgYmUgZHJvcHBlZC4KJiM0MzsgKiBAS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEOiBLZXkgdXBsb2FkIGlzIGRlZmVycmVkIHVudGlsIHRoZSBzdGF0aW9uCiYjNDM7ICoJaXMgYXNzb2NpYXRlZC4KICAqLwogZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfa2V5X2ZsYWdzIHsKIAlLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRQk9IEJJVCgwKSwKIAlLRVlfRkxBR19UQUlOVEVECQk9IEJJVCgxKSwKJiM0MzsJS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FECT0gQklUKDIpLAogfTsKIAogZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfdGtpcF9zdGF0ZSB7CkBAIC0xNjUsNiAmIzQzOzE2OCw3IEBAIHZvaWQgaWVlZTgwMjExX2ZyZWVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSBib29sIGZvcmNlX3N5bmNocm9uaXplKTsKIHZvaWQgaWVlZTgwMjExX2ZyZWVfc3RhX2tleXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKJiM0Mzt2b2lkIGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiBpbnQgaWVlZTgwMjExX2tleV9zd2l0Y2hfbGlua3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWxfbGlua3NfbWFzaywKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKaW5kZXggZmRmMDBjYmY0OWQ4Yi4uNzUzZGNkZDkwNzAxMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKQEAgLTE0NjgsNiAmIzQzOzE0NjgsNyBAQCBzdGF0aWMgaW50IF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhLAogCWNhc2UgSUVFRTgwMjExX1NUQV9BU1NPQzoKIAkJaWYgKHN0YS0mZ3Q7c3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSCkgewogCQkJc2V0X2JpdChXTEFOX1NUQV9BU1NPQywgJmFtcDtzdGEtJmd0O19mbGFncyk7CiYjNDM7CQkJaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdGEpOwogCQkJc3RhLSZndDthc3NvY19hdCA9IGt0aW1lX2dldF9ib290dGltZV9ucygpOwogCQkJaWYgKHJlY2FsYykgewogCQkJCWllZWU4MDIxMV9yZWNhbGNfbWluX2NoYW5kZWYoc3RhLSZndDtzZGF0YSwgLTEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA0NwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDY5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNQUM4MDIxMSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGFyZWFzIHdoZXJlIEtNU0FOIGZ1enppbmcgbWlnaHQgYmUgYmVuZWZpY2lhbC4gVGhpcyBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIHdpdGhpbiB0aGUgYG5ldC9tYWM4MDIxMWAgc3Vic3lzdGVtOiBgY2ZnLmNgLCBga2V5LmNgLCBga2V5LmhgLCBhbmQgYHN0YV9pbmZvLmNgLgoKRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBhZGRpdGlvbiBvZiBgYm9vbCBkZWZlcl9od191cGxvYWRgIHdpdGhpbiBgaWVlZTgwMjExX2FkZF9rZXlgIGluIGBjZmcuY2AuIFRoZSBsb2dpYyBmb3Igc2V0dGluZyB0aGlzIGZsYWcgbG9va3MgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRoZSBjb2RlIGRlZmVycyBoYXJkd2FyZSBrZXkgdXBsb2FkIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXM6IHdoZW4gYSBzdGF0aW9uIGV4aXN0cywgYSBwYWlyd2lzZSBrZXkgaXMgaW52b2x2ZWQsIGFuZCB0aGUgc3RhdGlvbiBpc24mIzM5O3QgYW4gRVBQIHBlZXIsIGlzbiYjMzk7dCBhc3NvY2lhdGVkLCBhbmQgdGhlIGludGVyZmFjZSB0eXBlIGlzIEFQIG9yIEFQX1ZMQU4sICphbmQqIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBzdXBwb3J0IHNvZnR3YXJlIGNyeXB0byBjb250cm9sLiBUaGVuIEkgc2VlIHRoYXQgYGRlZmVyX2h3X3VwbG9hZGAgZmxhZyBpcyB1c2VkIGluIGEgc3Vic2VxdWVudCBjaGVjayB0aGF0IHdpbGwgZnJlZSBhIGtleSBpZiB0aGUgc3RhdGlvbiBjb25kaXRpb25zIGFyZW4mIzM5O3QgbWV0LCBvciBpZiBgZGVmZXJfaHdfdXBsb2FkYCBpcyBzZXQgYW5kIHNob3VsZCBiZSBkZWZlcnJlZC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uLgoKTmV4dCwgaW4gYGtleS5jYCwgdGhlIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAgZnVuY3Rpb24gbm93IGNoZWNrcyBmb3IgdGhpcyBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYCBhbmQgaW1tZWRpYXRlbHkgZXhpdHMgaWYgc2V0LiBUaGUgbmV3IGZ1bmN0aW9uIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCBoYXMgYWxzbyBiZWVuIGFkZGVkLCB3aGljaCBpdGVyYXRlcyB0aHJvdWdoIGBzdGEtJmd0O3B0a1tpXWAsIGNsZWFycyBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYCwgYW5kIGNhbGxzIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpYC4gVGhlIGBrZXkuaGAgZmlsZSBzaW1wbHkgZGVmaW5lcyBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYCBhbmQgZGVjbGFyZXMgdGhpcyBuZXcgZnVuY3Rpb24uCgpGaW5hbGx5LCBgc3RhX2luZm8uY2AgY2FsbHMgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RhKWAgd2hlbiBhIHN0YXRpb24gdHJhbnNpdGlvbnMgZnJvbSBBVVRIIHRvIEFTU09DIHN0YXRlIHZpYSBgX3N0YV9pbmZvX21vdmVfc3RhdGVgLiBUaGlzIG1lYW5zIHRoYXQga2V5cyBhcmUgZGVmZXJyZWQsIHVudGlsIHRoZSBzdGF0aW9uIG1vdmVzIHRvIHRoZSBhc3NvY2lhdGVkIHN0YXRlLgoKTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUsIGl0JiMzOTtzIHRoZSBgc3RhLSZndDtwdGtgIGFycmF5IHRoYXQgcmVxdWlyZXMgYSBjbG9zZXIgbG9vay4gV2hhdCBkYXRhIGlzIHN0b3JlZCB0aGVyZSwgYW5kIGhvdyBpcyBpdCBpbml0aWFsaXplZD8gU2luY2Ugd2UmIzM5O3JlIGRlZmVycmluZyB0aGUgaGFyZHdhcmUgdXBsb2FkLCB3aGF0IHN0YXRlIGlzIHJldGFpbmVkIHdoaWxlIHRoZSBrZXkgaXMgZGVmZXJyZWQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIG1lbWJlcnMgb2YgYHN0YS0mZ3Q7cHRrW11gIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB3aGVuIHRoZXkgYXJlIGV2ZW50dWFsbHkgdXBsb2FkZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCBkb2VzIHVuZGVyIHRoZSBob29kIHRvIGNvbXBsZXRlbHkgdW5kZXJzdGFuZCB3aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGxlYWtlZCBpZiB0aGUgaW5pdGlhbCB2YWx1ZXMgYXJlIG5vdCBzZXQgcHJvcGVybHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBwYXRocyB3aGVyZSBgc3RhLSZndDtwdGtbaV1gIGlzIHJlYWQgYmVmb3JlIGl0JiMzOTtzIHdyaXR0ZW4gb3IgdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBrZXkgc3RydWN0dXJlIGlzIG5vdCBpbml0aWFsaXplZCBwcm9wZXJseS4gSWYgc28sIGEgS01TQU4gZnV6emVyIHdpbGwgYmUgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9rZXkuYz0xMDk9c3RhdGljIHZvaWQgZGVjcmVhc2VfdGFpbHJvb21fbmVlZF9jb3VudChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEva2V5LmMtMTE5LVxubmV0L21hYzgwMjExL2tleS5jOjEyMDpzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpXG5uZXQvbWFjODAyMTEva2V5LmMtMTIxLXtcbi0tXG5uZXQvbWFjODAyMTEva2V5LmM9NDQ5PXN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy01MTktXHRcdFx0aWYgKG5ldylcbm5ldC9tYWM4MDIxMS9rZXkuYzo1MjA6XHRcdFx0XHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChuZXcpO1xubmV0L21hYzgwMjExL2tleS5jLTUyMS1cdFx0fVxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy01MjMtXHRcdGlmICghbmV3LVx1MDAzZWxvY2FsLVx1MDAzZXdvd2xhbikge1xubmV0L21hYzgwMjExL2tleS5jOjUyNDpcdFx0XHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChuZXcpO1xubmV0L21hYzgwMjExL2tleS5jLTUyNS1cdFx0fSBlbHNlIGlmIChsaW5rX2lkIFx1MDAzYyAwIHx8ICFzZGF0YS1cdTAwM2V2aWYuYWN0aXZlX2xpbmtzIHx8XG4tLVxubmV0L21hYzgwMjExL2tleS5jPTk4Mz12b2lkIGllZWU4MDIxMV9yZWVuYWJsZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDAzLVx0XHRcdFx0aW5jcmVtZW50X3RhaWxyb29tX25lZWRfY291bnQoc2RhdGEpO1xubmV0L21hYzgwMjExL2tleS5jOjEwMDQ6XHRcdFx0aWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTtcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDA1LVx0XHR9XG4tLVxubmV0L21hYzgwMjExL2tleS5jPTEwMDk9dm9pZCBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuLS1cbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDIyLVx0XHRrZXktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+S0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEO1xubmV0L21hYzgwMjExL2tleS5jOjEwMjM6XHRcdHJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7XG5uZXQvbWFjODAyMTEva2V5LmMtMTAyNC1cdFx0aWYgKHJldClcbi0tXG5uZXQvbWFjODAyMTEva2V5LmM9MTUxNz1pbnQgaWVlZTgwMjExX2tleV9zd2l0Y2hfbGlua3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2tleS5jLTE1NDItXG5uZXQvbWFjODAyMTEva2V5LmM6MTU0MzpcdFx0cmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTtcbm5ldC9tYWM4MDIxMS9rZXkuYy0xNTQ0LVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjY4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgdGhlIGZpcnN0IHBlcnNvbiBhbmQgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOgoKKipNeSBEZWVwIERpdmUgaW50byBLZXkgQWNjZWxlcmF0aW9uIExvZ2ljKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgaW50byB0aGUgd2VlZHMgb24gdGhlc2UgY2hhbmdlcy4gVGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMgZm9jdXNlcyBvbiBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGtleSBhY2NlbGVyYXRpb24gd2l0aGluIHRoZSA4MDIuMTEgc3RhY2suIEkgaW1tZWRpYXRlbHkgd2FudCB0byBmb2N1cyBvbiB0d28gZnVuY3Rpb25zOiBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgIGFuZCBgaWVlZTgwMjExX2FkZF9rZXlgLiBUaGVzZSBhcmUgYWJzb2x1dGVseSAqY3JpdGljYWwqIHRvdWNocG9pbnRzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgKmVzcGVjaWFsbHkqIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgdHdvLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgSSBhbnRpY2lwYXRlIHRoZSBjb3JlIGNoYW5nZXMgYW5kIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpbGwgcmVzaWRlLiBJdCYjMzk7cyBpbXBlcmF0aXZlIHRoYXQgdGhlIGFkZGVkIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBkb2VzbiYjMzk7dCBicmVhayBlc3RhYmxpc2hlZCBrZXkgbWFuYWdlbWVudCBvciBjcmVhdGUgc2VjdXJpdHkgZmxhd3MuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3Qga2V5IGhhbmRsaW5nIGR1cmluZyB0cmFuc2l0aW9ucywgYW5kIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIHRoYXQgbWlnaHQgYXJpc2UgZnJvbSBhZGRpbmcgdGhpcyBsYXllciBvZiBjb21wbGV4aXR5LiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyB0aGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBhbmQgaG93IHRoZXkmIzM5O3ZlIGJlZW4gbW9kaWZpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBuZXcgbG9naWMg4oCTIGlzIGl0IGFuIGluc2VydGlvbiwgYSByZXBsYWNlbWVudCwgb3IgYSBtb3JlIGFyY2hpdGVjdHVyYWwgY2hhbmdlPwoKTXkgc2Vjb25kYXJ5IGNvbnNpZGVyYXRpb24gY29uY2VybnMgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCBob3cgZG8gdGhlIGV4aXN0aW5nIGtleXMgZ2V0IHBhc3NlZCBhbmQgaG93IHdpbGwgaGFyZHdhcmUga2V5cyBkaWZmZXI/IEFyZSB3ZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUga2V5IElEcyBub3c/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGtleSBsaWZldGltZSBtYW5hZ2VtZW50IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGV4aXN0aW5nIGtleSBjYWNoZT8gQXJlIHRoZXJlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zPyBIb3cgd2lsbCB0aGlzIGltcGFjdCB0aGUgZHJpdmVyPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9rZXkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0c3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KVxuIDEyMTpcdHtcbiAxMjI6XHRcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0ga2V5LVx1MDAzZXNkYXRhO1xuIDEyMzpcdFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gMTI0Olx0XHRpbnQgcmV0ID0gLUVPUE5PVFNVUFA7XG4gMTI1Olx0XG4gMTI2Olx0XHRtaWdodF9zbGVlcCgpO1xuIDEyNzpcdFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoa2V5LVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5KTtcbiAxMjg6XHRcbiAxMjk6XHRcdGlmIChrZXktXHUwMDNlZmxhZ3MgXHUwMDI2IEtFWV9GTEFHX1RBSU5URUQpIHtcbiAxMzA6XHRcdFx0LyogSWYgd2UgZ2V0IGhlcmUsIGl0JiMzOTtzIGR1cmluZyByZXN1bWUgYW5kIHRoZSBrZXkgaXNcbiAxMzE6XHRcdFx0ICogdGFpbnRlZCBzbyBzaG91bGRuJiMzOTt0IGJlIHVzZWQvcHJvZ3JhbW1lZCBhbnkgbW9yZS5cbiAxMzI6XHRcdFx0ICogSG93ZXZlciwgaXRzIGZsYWdzIG1heSBzdGlsbCBpbmRpY2F0ZSB0aGF0IGl0IHdhc1xuIDEzMzpcdFx0XHQgKiBwcm9ncmFtbWVkIGludG8gdGhlIGRldmljZSAoc2luY2Ugd2UmIzM5O3JlIGluIHJlc3VtZSlcbiAxMzQ6XHRcdFx0ICogc28gY2xlYXIgdGhhdCBmbGFnIG5vdyB0byBhdm9pZCB0cnlpbmcgdG8gcmVtb3ZlXG4gMTM1Olx0XHRcdCAqIGl0IGFnYWluIGxhdGVyLlxuIDEzNjpcdFx0XHQgKi9cbiAxMzc6XHRcdFx0aWYgKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUgXHUwMDI2XHUwMDI2XG4gMTM4Olx0XHRcdCAgICAhKGtleS1cdTAwM2Vjb25mLmZsYWdzIFx1MDAyNiAoSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMgfFxuIDEzOTpcdFx0XHRcdFx0XHQgSUVFRTgwMjExX0tFWV9GTEFHX1BVVF9NSUNfU1BBQ0UgfFxuIDE0MDpcdFx0XHRcdFx0XHQgSUVFRTgwMjExX0tFWV9GTEFHX1JFU0VSVkVfVEFJTFJPT00pKSlcbiAxNDE6XHRcdFx0XHRpbmNyZW1lbnRfdGFpbHJvb21fbmVlZF9jb3VudChzZGF0YSk7XG4gMTQyOlx0XG4gMTQzOlx0XHRcdGtleS1cdTAwM2VmbGFncyBcdTAwMjY9IH5LRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTtcbiAxNDQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTQ1Olx0XHR9XG4gMTQ2Olx0XG4gMTQ3Olx0XHRpZiAoa2V5LVx1MDAzZWZsYWdzIFx1MDAyNiBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpIHtcbiAxNDg6XHRcdFx0LypcbiAxNDk6XHRcdFx0ICogS2V5cyBhcmUgb25seSBkZWZlcnJlZCBpZiBhdXRvbWF0aWMgc29mdHdhcmUgZmFsbGJhY2sgaXNcbiAxNTA6XHRcdFx0ICogYWxsb3dlZC4gTGVhdmUgcmV0IGFzIC1FT1BOT1RTVVBQIHNvIHRoZSBub3JtYWwgZmFsbGJhY2sgcGF0aFxuIDE1MTpcdFx0XHQgKiBpcyB1c2VkIHdpdGhvdXQgcHJldGVuZGluZyB0aGUgZHJpdmVyIHJldHVybmVkIDEuXG4gMTUyOlx0XHRcdCAqL1xuIDE1MzpcdFx0XHRnb3RvIG91dF91bnN1cHBvcnRlZDtcbiAxNTQ6XHRcdH1cbiAxNTU6XHRcbiAxNTY6XHRcdGlmICgha2V5LVx1MDAzZWxvY2FsLVx1MDAzZW9wcy1cdTAwM2VzZXRfa2V5KVxuIDE1NzpcdFx0XHRnb3RvIG91dF91bnN1cHBvcnRlZDtcbiAxNTg6XHRcbiAxNTk6XHRcdHN0YSA9IGtleS1cdTAwM2VzdGE7XG4gMTYwOlx0XG4gMTYxOlx0XHQvKlxuIDE2MjpcdFx0ICogQWxsb3cgaW5zdGFsbGF0aW9uIG9mIGEgcGVyLVNUQSBHVEsgaWYgcGVyLVNUQSBHVEsgaXMgc3VwcG9ydGVkXG4gMTYzOlx0XHQgKiBieSB0aGUgZHJpdmVyIG9yIHRoZSBpbnRlcmZhY2UgaXMgYSBOQU4gRGF0YSBpbnRlcmZhY2UgKGFzXG4gMTY0Olx0XHQgKiBwZXItc3RhdGlvbiBHVEtzIGFyZSByZXF1aXJlZCB0byBiZSBzdXBwb3J0ZWQgaWYgc2VjdXJlIE5BTiBpc1xuIDE2NTpcdFx0ICogc3VwcG9ydGVkKS5cbiAxNjY6XHRcdCAqL1xuIDE2NzpcdFx0aWYgKHN0YSBcdTAwMjZcdTAwMjYgIShrZXktXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSBcdTAwMjZcdTAwMjZcbiAxNjg6XHRcdCAgICAhKGllZWU4MDIxMV9od19jaGVjayhcdTAwMjZrZXktXHUwMDNlbG9jYWwtXHUwMDNlaHcsIFNVUFBPUlRTX1BFUl9TVEFfR1RLKSB8fFxuIDE2OTpcdFx0ICAgICAgc2RhdGEtXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpKVxuIDE3MDpcdFx0XHRnb3RvIG91dF91bnN1cHBvcnRlZDtcbiAxNzE6XHRcbiAxNzI6XHRcdGlmIChzdGEgXHUwMDI2XHUwMDI2ICFzdGEtXHUwMDNldXBsb2FkZWQpXG4gMTczOlx0XHRcdGdvdG8gb3V0X3Vuc3VwcG9ydGVkO1xuIDE3NDpcdFxuIDE3NTpcdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIHtcbiAxNzY6XHRcdFx0LypcbiAxNzc6XHRcdFx0ICogVGhlIGRyaXZlciBkb2VzbiYjMzk7dCBrbm93IGFueXRoaW5nIGFib3V0IFZMQU4gaW50ZXJmYWNlcy5cbiAxNzg6XHRcdFx0ICogSGVuY2UsIGRvbiYjMzk7dCBzZW5kIEdUS3MgZm9yIFZMQU4gaW50ZXJmYWNlcyB0byB0aGUgZHJpdmVyLlxuIDE3OTpcdFx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcwNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXkgQWRkaXRpb24gQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGtleXMgYXJlIGFkZGVkIGluIHRoZSBgbWFjODAyMTFgIHN1YnN5c3RlbSwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYG5ldC9tYWM4MDIxMS9jZmcuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYGllZWU4MDIxMV9hZGRfa2V5YCBmdW5jdGlvbi4gVGhpcyBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBrZXkgbWFuYWdlbWVudCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBkaXNzZWN0IHRoZSBjb2RlIGFyb3VuZCB0aGF0IGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQga2V5IHR5cGVzLCBhbnkgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgb3ZlcmFsbCBmbG93IG9mIGFkZGluZyBhIG5ldyBrZXkuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgcG90ZW50aWFsIGlzc3VlIEkmIzM5O20gY2hhc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvY2ZnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY2MDpcdFx0XHRrZXktXHUwMDNlY29uZi5saW5rX2lkID0gLTE7XG4gNjYxOlx0XHR9IGVsc2Uge1xuIDY2MjpcdFx0XHRrZXktXHUwMDNlY29uZi5saW5rX2lkID0gbGluay1cdTAwM2VsaW5rX2lkO1xuIDY2MzpcdFx0fVxuIDY2NDpcdFxuIDY2NTpcdFx0aWYgKHBhcmFtcy1cdTAwM2Vtb2RlID09IE5MODAyMTFfS0VZX05PX1RYKVxuIDY2NjpcdFx0XHRrZXktXHUwMDNlY29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfTk9fQVVUT19UWDtcbiA2Njc6XHRcbiA2Njg6XHRcdGlmIChtYWNfYWRkcikge1xuIDY2OTpcdFx0XHRib29sIGRlZmVyX2h3X3VwbG9hZDtcbiA2NzA6XHRcbiA2NzE6XHRcdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjX2FkZHIpO1xuIDY3MjpcdFx0XHRkZWZlcl9od191cGxvYWQgPVxuIDY3MzpcdFx0XHRcdHN0YSBcdTAwMjZcdTAwMjYgcGFpcndpc2UgXHUwMDI2XHUwMDI2ICFzdGEtXHUwMDNlc3RhLmVwcF9wZWVyIFx1MDAyNlx1MDAyNlxuIDY3NDpcdFx0XHRcdCF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpIFx1MDAyNlx1MDAyNlxuIDY3NTpcdFx0XHRcdChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fFxuIDY3NjpcdFx0XHRcdCBzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSBcdTAwMjZcdTAwMjZcbiA2Nzc6XHRcdFx0XHQhaWVlZTgwMjExX2h3X2NoZWNrKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBTV19DUllQVE9fQ09OVFJPTCk7XG4gNjc4Olx0XHRcdC8qXG4gNjc5Olx0XHRcdCAqIFRoZSBBU1NPQyB0ZXN0IG1ha2VzIHN1cmUgdGhlIGRyaXZlciBpcyByZWFkeSB0b1xuIDY4MDpcdFx0XHQgKiByZWNlaXZlIHRoZSBrZXkuIFdoZW4gd3BhX3N1cHBsaWNhbnQgaGFzIHJvYW1lZFxuIDY4MTpcdFx0XHQgKiB1c2luZyBGVCwgaXQgYXR0ZW1wdHMgdG8gc2V0IHRoZSBrZXkgYmVmb3JlXG4gNjgyOlx0XHRcdCAqIGFzc29jaWF0aW9uIGhhcyBjb21wbGV0ZWQsIHRoaXMgcmVqZWN0cyB0aGF0IGF0dGVtcHRcbiA2ODM6XHRcdFx0ICogc28gaXQgd2lsbCBzZXQgdGhlIGtleSBhZ2FpbiBhZnRlciBhc3NvY2lhdGlvbi5cbiA2ODQ6XHRcdFx0ICpcbiA2ODU6XHRcdFx0ICogV2l0aCAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBlbmFibGVkLCBjZmc4MDIxMVxuIDY4NjpcdFx0XHQgKiBtYXkgZGVsaXZlciBrZXlzIHRvIG1hYzgwMjExIGJlZm9yZSB0aGUgc3RhdGlvbiBoYXNcbiA2ODc6XHRcdFx0ICogYXNzb2NpYXRlZC4gSW4gdGhhdCBjYXNlLCBhY2NlcHQgdGhlIGtleSBpZiB0aGUgc3RhdGlvblxuIDY4ODpcdFx0XHQgKiBpcyBhbiBFbmhhbmNlZCBQcml2YWN5IFByb3RlY3Rpb24gKEVQUCkgcGVlci5cbiA2ODk6XHRcdFx0ICogSWYgKHJlKWFzc29jaWF0aW9uIGZyYW1lIGVuY3J5cHRpb24gc3VwcG9ydCBpcyBub3QgcHJlc2VudCxcbiA2OTA6XHRcdFx0ICogY2ZnODAyMTEgd2lsbCBub3QgYWxsb3cga2V5IGluc3RhbGxhdGlvbiBpbiBub27igJFBUCBTVEEgbW9kZS5cbiA2OTE6XHRcdFx0ICpcbiA2OTI6XHRcdFx0ICogQVAtc2lkZSBGVCBtYXkgYWxzbyBpbnN0YWxsIGEgcGFpcndpc2Uga2V5IGJlZm9yZSB0aGVcbiA2OTM6XHRcdFx0ICogc3RhdGlvbiBpcyBhc3NvY2lhdGVkLiBJZiBhdXRvbWF0aWMgc29mdHdhcmUgZmFsbGJhY2sgaXNcbiA2OTQ6XHRcdFx0ICogYWxsb3dlZCwga2VlcCBpdCBpbiBtYWM4MDIxMSBhbmQgdXBsb2FkIGl0IGFmdGVyIHRoZSBzdGF0aW9uXG4gNjk1Olx0XHRcdCAqIHJlYWNoZXMgQVNTT0MuIERyaXZlcnMgd2l0aCBTV19DUllQVE9fQ09OVFJPTCBjYW5ub3QgdXNlIHRoaXNcbiA2OTY6XHRcdFx0ICogcGF0aCBzaW5jZSBvbmx5IHRoZWlyIHNldF9rZXkgcmV0dXJuIHZhbHVlIGNhbiBwZXJtaXQgc29mdHdhcmVcbiA2OTc6XHRcdFx0ICogY3J5cHRvLlxuIDY5ODpcdFx0XHQgKi9cbiA2OTk6XHRcdFx0aWYgKCFzdGEgfHwgKCFzdGEtXHUwMDNlc3RhLmVwcF9wZWVyIFx1MDAyNlx1MDAyNlxuIDcwMDpcdFx0XHRcdCAgICAgIXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykgXHUwMDI2XHUwMDI2XG4gNzAxOlx0XHRcdFx0ICAgICAhZGVmZXJfaHdfdXBsb2FkKSkge1xuIDcwMjpcdFx0XHRcdGllZWU4MDIxMV9rZXlfZnJlZV91bnVzZWQoa2V5KTtcbiA3MDM6XHRcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA3MDQ6XHRcdFx0fVxuIDcwNTpcdFxuIDcwNjpcdFx0XHRpZiAoZGVmZXJfaHdfdXBsb2FkKVxuIDcwNzpcdFx0XHRcdGtleS1cdTAwM2VmbGFncyB8PSBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ7XG4gNzA4Olx0XHR9XG4gNzA5Olx0XG4gNzEwOlx0XHRzd2l0Y2ggKHNkYXRhLVx1MDAzZXZpZi50eXBlKSB7XG4gNzExOlx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XG4gNzEyOlx0XHRcdGlmIChzZGF0YS1cdTAwM2V1Lm1nZC5tZnAgIT0gSUVFRTgwMjExX01GUF9ESVNBQkxFRClcbiA3MTM6XHRcdFx0XHRrZXktXHUwMDNlY29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfUlhfTUdNVDtcbiA3MTQ6XHRcdFx0YnJlYWs7XG4gNzE1Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxuIDcxNjpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuIDcxNzpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4gNzE4Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOlxuIDcxOTpcdFx0XHQvKiBLZXlzIHdpdGhvdXQgYSBzdGF0aW9uIGFyZSB1c2VkIGZvciBUWCBvbmx5ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDMKCQkJCQkJCW91dHB1dDogMjM5CgkJCQkJCQl0aG91Z2h0czogNzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBtYWM4MDIxMSBBUC1zaWRlIEZhc3QgVHJhbnNpdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoaXMgcGF0Y2ggaXMgb3B0aW1pemluZyB0aGUgRmFzdCBUcmFuc2l0aW9uIChGVCkgcHJvY2VzcyBvbiB0aGUgQVAgc2lkZSBpbiBgbWFjODAyMTFgLiBUaGUgY29yZSBjaGFuZ2UgY2VudGVycyBhcm91bmQgcGFpcndpc2Uga2V5IGluc3RhbGxhdGlvbi4gQmVmb3JlLCB0aGUgc3lzdGVtIHdvdWxkIHJlamVjdCBrZXkgaW5zdGFsbGF0aW9uIGlmIHRoZSBTdGF0aW9uIChTVEEpIHdhc24mIzM5O3QgeWV0IGFzc29jaWF0ZWQuIE5vdywgdGhlIHBhdGNoIGFjY2VwdHMgdGhlIGtleSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgKHBhaXJ3aXNlIGtleSwgQVAgb3IgQVBfVkxBTiB2aXJ0dWFsIGludGVyZmFjZSB0eXBlLCBub3QgdXNpbmcgc29mdHdhcmUgY3J5cHRvIGNvbnRyb2wpIGFuZCB0YWdzIGl0IHdpdGggYEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRGAuIFRoaXMgYmFzaWNhbGx5IHRlbGxzIHRoZSBzeXN0ZW0gdG8gKmRlbGF5KiBlbmFibGluZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gZm9yIHRoZSBrZXkuCgpUaGUgdXBsb2FkIHRvIGhhcmR3YXJlIGlzIHNraXBwZWQgaW5pdGlhbGx5LCBmYWxsaW5nIGJhY2sgdG8gc29mdHdhcmUgY3J5cHRvLiBUaGUgKnJlYWwqIGFjdGlvbiBoYXBwZW5zIHdoZW4gdGhlIFNUQSBmaW5hbGx5IGFzc29jaWF0ZXMsIG1vdmluZyB0byBgSUVFRTgwMjExX1NUQV9BU1NPQ2AuIEF0IHRoYXQgcG9pbnQsIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCBpcyBjYWxsZWQsIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBTVEEmIzM5O3MgcGFpcndpc2UgdHJhbnNpZW50IGtleSAoUFRLKSwgY2xlYXJzIGBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQURgLCBhbmQgY2FsbHMgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCB0byBhY3R1YWxseSB1cGxvYWQgdGhlIGtleSB0byBoYXJkd2FyZS4KCk5vdywgZm9yIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LgoKRmlyc3QsIGlzIGFueXRoaW5nIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8uIFRoaXMgaXMgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCwgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBoYXJkd2FyZSBkcml2ZXIgdmlhIGBzZXRfa2V5YC4gU2Vjb25kLCBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWM/IE5vLCB0aGUgdmFyaWFibGUgYGRlZmVyX2h3X3VwbG9hZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZDogYGRlZmVyX2h3X3VwbG9hZCA9IHN0YSAmYW1wOyZhbXA7IHBhaXJ3aXNlICZhbXA7JmFtcDsgLi4uO2AuIEFsc28sIGFsbCBga2V5YCBmaWVsZHMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2NgIG9yIGBpZWVlODAyMTFfa2V5X2FsbG9jYC4gVGhpcmQsIGFyZSB0aGVyZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBObywgdGhlcmUgaXMgb25seSBhbiBhZGRlZCBmbGFnIGBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQURgIHdpdGhpbiB0aGUgYGtleS0mZ3Q7ZmxhZ3NgLCB3aGljaCBpcyBpbml0aWFsaXplZC4gRm91cnRoLCBhcmUgdGhlcmUgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGFjY2VzcyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoaXMgc2VlbXMgdmVyeSBzdHJhaWdodGZvcndhcmQuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlICphbnkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlzayBvciBpbmZvIGxlYWsuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBzdGFuZGFyZCBrZXJuZWwgaXNzdWVzLCBsaWtlIHVzZS1hZnRlci1mcmVlLCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcsIHN0YXRlIHN5bmNocm9uaXphdGlvbiwgb3IgZHJpdmVyIGNhbGxiYWNrIGZhaWx1cmVzLiBIb3dldmVyLCB0aG9zZSBhcmUgaGFuZGxlZCBieSB0b29scyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIGhlcmUuCgpTbywgdGhlIGNvbmNsdXNpb24gaXM6IGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIHBhdGNoIGRlZmVycyBoYXJkd2FyZSBrZXkgdXBsb2FkIGZvciBBUC1zaWRlIEZUIHBhaXJ3aXNlIGtleXMgdW50aWwgc3RhdGlvbiBhc3NvY2lhdGlvbi4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgYnVmZmVycyBleHBvc2VkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBgZGVmZXJfaHdfdXBsb2FkYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbHNvLCBubyBwYWRkaW5nIGxlYWtzIG9yIGJvdW5kcyBjYWxjdWxhdGlvbiBjaGFuZ2VzIG9uIHJhdyBtZW1vcnkgYnVmZmVycy4gS0FTQU4vTG9ja2RlcCB3aWxsIGhhbmRsZSBhbnkgc3RhdGUgbWFjaGluZSB0cmFuc2l0aW9ucywga2V5IHBvaW50ZXIgbGlmZWN5Y2xlL2xpZmV0aW1lLCBvciBkcml2ZXIgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGRlZmVycmVkIGhhcmR3YXJlIGtleSB1cGxvYWQgaW4gbWFjODAyMTEgZm9yIEFQLXNpZGUgRmFzdCBUcmFuc2l0aW9uIChGVCkgd2hlbiBwYWlyd2lzZSBrZXlzIGFyZSBpbnN0YWxsZWQgcHJpb3IgdG8gc3RhdGlvbiBhc3NvY2lhdGlvbi4gSXQgaW50cm9kdWNlcyBhIG5ldyBpbnRlcm5hbCBmbGFnIChLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpLCBkZWZlcnMgdGhlIGRyaXZlciBzZXRfa2V5IG9wZXJhdGlvbiB1bnRpbCB0aGUgc3RhdGlvbiB0cmFuc2l0aW9ucyB0byBXTEFOX1NUQV9BU1NPQywgYW5kIGF0dGVtcHRzIGhhcmR3YXJlIGtleSB1cGxvYWQgYXQgdGhhdCBwb2ludC5cblxuRXZhbHVhdGlvbiByZWdhcmRpbmcgS01TQU4gdnMgS0FTQU46XG4tIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IC8gaW5mby1sZWFrcyAoS01TQU4pOiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIG9yIGxlYWtlZC4gVGhlIGxvY2FsIHZhcmlhYmxlIGBkZWZlcl9od191cGxvYWRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUga2V5IHN0cnVjdHVyZXMgbWFuaXB1bGF0ZWQgYXJlIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgb2JqZWN0cy4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLlxuLSBHZW5lcmFsIG1lbW9yeSAvIGNvbmN1cnJlbmN5IHNhZmV0eSAoS0FTQU4vTG9ja2RlcCk6IEFueSBpc3N1ZXMgcmVsYXRpbmcgdG8ga2V5IHJlZmVyZW5jZSBsaWZldGltZXMsIHN0YXRpb24gc3RhdGUgdHJhbnNpdGlvbnMsIG9yIGRyaXZlciBjb25jdXJyZW5jeSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTG9ja2RlcCkuXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0byBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGRlZmVycmVkIGhhcmR3YXJlIGtleSB1cGxvYWQgaW4gbWFjODAyMTEgZm9yIEFQLXNpZGUgRmFzdCBUcmFuc2l0aW9uIChGVCkgd2hlbiBwYWlyd2lzZSBrZXlzIGFyZSBpbnN0YWxsZWQgcHJpb3IgdG8gc3RhdGlvbiBhc3NvY2lhdGlvbi4gSXQgaW50cm9kdWNlcyBhIG5ldyBpbnRlcm5hbCBmbGFnIChLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpLCBkZWZlcnMgdGhlIGRyaXZlciBzZXRfa2V5IG9wZXJhdGlvbiB1bnRpbCB0aGUgc3RhdGlvbiB0cmFuc2l0aW9ucyB0byBXTEFOX1NUQV9BU1NPQywgYW5kIGF0dGVtcHRzIGhhcmR3YXJlIGtleSB1cGxvYWQgYXQgdGhhdCBwb2ludC5cblxuRXZhbHVhdGlvbiByZWdhcmRpbmcgS01TQU4gdnMgS0FTQU46XG4tIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IC8gaW5mby1sZWFrcyAoS01TQU4pOiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIG9yIGxlYWtlZC4gVGhlIGxvY2FsIHZhcmlhYmxlIGBkZWZlcl9od191cGxvYWRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUga2V5IHN0cnVjdHVyZXMgbWFuaXB1bGF0ZWQgYXJlIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgb2JqZWN0cy4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLlxuLSBHZW5lcmFsIG1lbW9yeSAvIGNvbmN1cnJlbmN5IHNhZmV0eSAoS0FTQU4vTG9ja2RlcCk6IEFueSBpc3N1ZXMgcmVsYXRpbmcgdG8ga2V5IHJlZmVyZW5jZSBsaWZldGltZXMsIHN0YXRpb24gc3RhdGUgdHJhbnNpdGlvbnMsIG9yIGRyaXZlciBjb25jdXJyZW5jeSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTG9ja2RlcCkuXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0byBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUwOjU2Ljc3MTcyMzI0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MzgwNzA5NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9hZGRfa2V5XCIsXG4gICAgXCJpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzXCIsXG4gICAgXCJpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbFwiLFxuICAgIFwiX3N0YV9pbmZvX21vdmVfc3RhdGVcIixcbiAgICBcInN0YV9pbmZvX21vdmVfc3RhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgZGVmZXJyZWQgaGFyZHdhcmUga2V5IHVwbG9hZCBpbiBtYWM4MDIxMSBmb3IgQVAtc2lkZSBGYXN0IFRyYW5zaXRpb24gKEZUKSB3aGVuIHBhaXJ3aXNlIGtleXMgYXJlIGluc3RhbGxlZCBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIGZsYWcgKEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCksIGRlZmVycyB0aGUgZHJpdmVyIHNldF9rZXkgb3BlcmF0aW9uIHVudGlsIHRoZSBzdGF0aW9uIHRyYW5zaXRpb25zIHRvIFdMQU5fU1RBX0FTU09DLCBhbmQgYXR0ZW1wdHMgaGFyZHdhcmUga2V5IHVwbG9hZCBhdCB0aGF0IHBvaW50LlxcblxcbkV2YWx1YXRpb24gcmVnYXJkaW5nIEtNU0FOIHZzIEtBU0FOOlxcbi0gVW5pbml0aWFsaXplZCBtZW1vcnkgLyBpbmZvLWxlYWtzIChLTVNBTik6IE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkLiBUaGUgbG9jYWwgdmFyaWFibGUgYGRlZmVyX2h3X3VwbG9hZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoZSBrZXkgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCBhcmUgZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBvYmplY3RzLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UuXFxuLSBHZW5lcmFsIG1lbW9yeSAvIGNvbmN1cnJlbmN5IHNhZmV0eSAoS0FTQU4vTG9ja2RlcCk6IEFueSBpc3N1ZXMgcmVsYXRpbmcgdG8ga2V5IHJlZmVyZW5jZSBsaWZldGltZXMsIHN0YXRpb24gc3RhdGUgdHJhbnNpdGlvbnMsIG9yIGRyaXZlciBjb25jdXJyZW5jeSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTG9ja2RlcCkuXFxuXFxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRvIGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtYWM4MDIxMSBrZXkgaGFuZGxpbmcgYnkgYWxsb3dpbmcgcGFpcndpc2Uga2V5IGluc3RhbGxhdGlvbiBpbiBBUCBtb2RlIHByaW9yIHRvIHN0YXRpb24gYXNzb2NpYXRpb24gYW5kIGRlZmVycmluZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gdXBsb2FkIHVudGlsIGFzc29jaWF0aW9uIGNvbXBsZXRlcy4gSXQgaW50cm9kdWNlcyBuZXcga2V5IHN0YXRlIGZsYWdzLCB1cGRhdGVzIGtleSB1cGxvYWQgbG9naWMsIGFuZCBhZGRzIGEgbG9ja2RlcCBhc3NlcnRpb24gaW4gcmVhY2hhYmxlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29kZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgYW5kIHZpcnR1YWwgd2lyZWxlc3MgZGV2aWNlcyAoZS5nLiBtYWM4MDIxMV9od3NpbSksIG1ha2luZyBpdCBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MDo1Ni43NzE3Mjk2NjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDQxODM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE3NDZjMzBlMjcwNGQ1OWJhYTA3NWVlZjNlNTBhODk3NDU0YWQ1NjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAwMzo1MDo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmNcXG5pbmRleCAyM2Y0ZjllYzg2ZDBhLi5mZjk5M2E3YTllNDQxIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9jZmcuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9jZmcuY1xcbkBAIC02NjYsNyArNjY2LDE1IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0XFx0a2V5LVxcdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYO1xcbiBcXG4gXFx0aWYgKG1hY19hZGRyKSB7XFxuK1xcdFxcdGJvb2wgZGVmZXJfaHdfdXBsb2FkO1xcbitcXG4gXFx0XFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjX2FkZHIpO1xcbitcXHRcXHRkZWZlcl9od191cGxvYWQgPVxcbitcXHRcXHRcXHRzdGEgXFx1MDAyNlxcdTAwMjYgcGFpcndpc2UgXFx1MDAyNlxcdTAwMjYgIXN0YS1cXHUwMDNlc3RhLmVwcF9wZWVyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHxcXG4rXFx0XFx0XFx0IHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQhaWVlZTgwMjExX2h3X2NoZWNrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaHcsIFNXX0NSWVBUT19DT05UUk9MKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhlIEFTU09DIHRlc3QgbWFrZXMgc3VyZSB0aGUgZHJpdmVyIGlzIHJlYWR5IHRvXFxuIFxcdFxcdCAqIHJlY2VpdmUgdGhlIGtleS4gV2hlbiB3cGFfc3VwcGxpY2FudCBoYXMgcm9hbWVkXFxuQEAgLTY4MSwxNCArNjg5LDIyIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0XFx0ICogSWYgKHJlKWFzc29jaWF0aW9uIGZyYW1lIGVuY3J5cHRpb24gc3VwcG9ydCBpcyBub3QgcHJlc2VudCxcXG4gXFx0XFx0ICogY2ZnODAyMTEgd2lsbCBub3QgYWxsb3cga2V5IGluc3RhbGxhdGlvbiBpbiBub27igJFBUCBTVEEgbW9kZS5cXG4gXFx0XFx0ICpcXG4tXFx0XFx0ICogVE9ETzogYWNjZXB0IHRoZSBrZXkgaWYgd2UgaGF2ZSBhIHN0YXRpb24gZW50cnkgYW5kXFxuLVxcdFxcdCAqXFx0IGFkZCBpdCB0byB0aGUgZGV2aWNlIGFmdGVyIHRoZSBzdGF0aW9uIGFzc29jaWF0ZXMuXFxuK1xcdFxcdCAqIEFQLXNpZGUgRlQgbWF5IGFsc28gaW5zdGFsbCBhIHBhaXJ3aXNlIGtleSBiZWZvcmUgdGhlXFxuK1xcdFxcdCAqIHN0YXRpb24gaXMgYXNzb2NpYXRlZC4gSWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXFxuK1xcdFxcdCAqIGFsbG93ZWQsIGtlZXAgaXQgaW4gbWFjODAyMTEgYW5kIHVwbG9hZCBpdCBhZnRlciB0aGUgc3RhdGlvblxcbitcXHRcXHQgKiByZWFjaGVzIEFTU09DLiBEcml2ZXJzIHdpdGggU1dfQ1JZUFRPX0NPTlRST0wgY2Fubm90IHVzZSB0aGlzXFxuK1xcdFxcdCAqIHBhdGggc2luY2Ugb25seSB0aGVpciBzZXRfa2V5IHJldHVybiB2YWx1ZSBjYW4gcGVybWl0IHNvZnR3YXJlXFxuK1xcdFxcdCAqIGNyeXB0by5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmICghc3RhIHx8ICghc3RhLVxcdTAwM2VzdGEuZXBwX3BlZXIgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSkpIHtcXG4rXFx0XFx0XFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgICFkZWZlcl9od191cGxvYWQpKSB7XFxuIFxcdFxcdFxcdGllZWU4MDIxMV9rZXlfZnJlZV91bnVzZWQoa2V5KTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChkZWZlcl9od191cGxvYWQpXFxuK1xcdFxcdFxcdGtleS1cXHUwMDNlZmxhZ3MgfD0gS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEO1xcbiBcXHR9XFxuIFxcbiBcXHRzd2l0Y2ggKHNkYXRhLVxcdTAwM2V2aWYudHlwZSkge1xcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmMgYi9uZXQvbWFjODAyMTEva2V5LmNcXG5pbmRleCBmNDVlNzkyYWJlZGU1Li43NzRhOTJiYTdiZDhjIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9rZXkuY1xcbkBAIC0xNDQsNiArMTQ0LDE1IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChrZXktXFx1MDAzZWZsYWdzIFxcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEtleXMgYXJlIG9ubHkgZGVmZXJyZWQgaWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXFxuK1xcdFxcdCAqIGFsbG93ZWQuIExlYXZlIHJldCBhcyAtRU9QTk9UU1VQUCBzbyB0aGUgbm9ybWFsIGZhbGxiYWNrIHBhdGhcXG4rXFx0XFx0ICogaXMgdXNlZCB3aXRob3V0IHByZXRlbmRpbmcgdGhlIGRyaXZlciByZXR1cm5lZCAxLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICgha2V5LVxcdTAwM2Vsb2NhbC1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfa2V5KVxcbiBcXHRcXHRnb3RvIG91dF91bnN1cHBvcnRlZDtcXG4gXFxuQEAgLTk5Nyw2ICsxMDA2LDI4IEBAIHZvaWQgaWVlZTgwMjExX3JlZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuIFxcdH1cXG4gfVxcbiBcXG4rdm9pZCBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLVxcdTAwM2Vsb2NhbDtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTtcXG4rXFx0aW50IGksIHJldDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X3dpcGh5KGxvY2FsLVxcdTAwM2Vody53aXBoeSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShzdGEtXFx1MDAzZXB0ayk7IGkrKykge1xcbitcXHRcXHRrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlaHcud2lwaHksIHN0YS1cXHUwMDNlcHRrW2ldKTtcXG4rXFx0XFx0aWYgKCFrZXkgfHwgIShrZXktXFx1MDAzZWZsYWdzIFxcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRrZXktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5LRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ7XFxuK1xcdFxcdHJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHNkYXRhX2VycihrZXktXFx1MDAzZXNkYXRhLFxcbitcXHRcXHRcXHRcXHQgIFxcXCJmYWlsZWQgdG8gZW5hYmxlIGRlZmVycmVkIGtleSAoJWQsICVwTSk6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgIGtleS1cXHUwMDNlY29uZi5rZXlpZHgsIHN0YS1cXHUwMDNlc3RhLmFkZHIsIHJldCk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gaWVlZTgwMjExX2tleV9pdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRcXHQgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmggYi9uZXQvbWFjODAyMTEva2V5LmhcXG5pbmRleCA4MjZlNGU5Mzg3YzU1Li45N2QzYmJjZjBhYzIxIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaFxcbisrKyBiL25ldC9tYWM4MDIxMS9rZXkuaFxcbkBAIC0zMiwxMCArMzIsMTMgQEAgc3RydWN0IHN0YV9pbmZvO1xcbiAgKiBAS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU6IEluZGljYXRlcyB0aGF0IHRoaXMga2V5IGlzIHByZXNlbnRcXG4gICpcXHRpbiB0aGUgaGFyZHdhcmUgZm9yIFRYIGNyeXB0byBoYXJkd2FyZSBhY2NlbGVyYXRpb24uXFxuICAqIEBLRVlfRkxBR19UQUlOVEVEOiBLZXkgaXMgdGFpbnRlZCBhbmQgcGFja2V0cyBzaG91bGQgYmUgZHJvcHBlZC5cXG4rICogQEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDogS2V5IHVwbG9hZCBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgc3RhdGlvblxcbisgKlxcdGlzIGFzc29jaWF0ZWQuXFxuICAqL1xcbiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF9rZXlfZmxhZ3Mge1xcbiBcXHRLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRVxcdD0gQklUKDApLFxcbiBcXHRLRVlfRkxBR19UQUlOVEVEXFx0XFx0PSBCSVQoMSksXFxuK1xcdEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRFxcdD0gQklUKDIpLFxcbiB9O1xcbiBcXG4gZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfdGtpcF9zdGF0ZSB7XFxuQEAgLTE2NSw2ICsxNjgsNyBAQCB2b2lkIGllZWU4MDIxMV9mcmVlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdFxcdCBib29sIGZvcmNlX3N5bmNocm9uaXplKTtcXG4gdm9pZCBpZWVlODAyMTFfZnJlZV9zdGFfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7XFxuK3ZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7XFxuIHZvaWQgaWVlZTgwMjExX3JlZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpO1xcbiBpbnQgaWVlZTgwMjExX2tleV9zd2l0Y2hfbGlua3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGRlbF9saW5rc19tYXNrLFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXFxuaW5kZXggZmRmMDBjYmY0OWQ4Yi4uNzUzZGNkZDkwNzAxMSAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uY1xcbisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXFxuQEAgLTE0NjgsNiArMTQ2OCw3IEBAIHN0YXRpYyBpbnQgX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuIFxcdGNhc2UgSUVFRTgwMjExX1NUQV9BU1NPQzpcXG4gXFx0XFx0aWYgKHN0YS1cXHUwMDNlc3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSCkge1xcbiBcXHRcXHRcXHRzZXRfYml0KFdMQU5fU1RBX0FTU09DLCBcXHUwMDI2c3RhLVxcdTAwM2VfZmxhZ3MpO1xcbitcXHRcXHRcXHRpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0YSk7XFxuIFxcdFxcdFxcdHN0YS1cXHUwMDNlYXNzb2NfYXQgPSBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcXG4gXFx0XFx0XFx0aWYgKHJlY2FsYykge1xcbiBcXHRcXHRcXHRcXHRpZWVlODAyMTFfcmVjYWxjX21pbl9jaGFuZGVmKHN0YS1cXHUwMDNlc2RhdGEsIC0xKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTA6NTcuMjU2ODM0ODE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NzE3MTIwMDU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfYWRkX2tleVwiLFxuICAgIFwiaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c1wiLFxuICAgIFwiaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxcIixcbiAgICBcIl9zdGFfaW5mb19tb3ZlX3N0YXRlXCIsXG4gICAgXCJzdGFfaW5mb19tb3ZlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWFjODAyMTEga2V5IGhhbmRsaW5nIGJ5IGFsbG93aW5nIHBhaXJ3aXNlIGtleSBpbnN0YWxsYXRpb24gaW4gQVAgbW9kZSBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uIGFuZCBkZWZlcnJpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHVwbG9hZCB1bnRpbCBhc3NvY2lhdGlvbiBjb21wbGV0ZXMuIEl0IGludHJvZHVjZXMgbmV3IGtleSBzdGF0ZSBmbGFncywgdXBkYXRlcyBrZXkgdXBsb2FkIGxvZ2ljLCBhbmQgYWRkcyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGluIHJlYWNoYWJsZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4gbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNzQ2YzMwZTI3MDRkNTliYWEwNzVlZWYzZTUwYTg5NzQ1NGFkNTY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwMzo1MDo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuY1xuaW5kZXggMjNmNGY5ZWM4NmQwYS4uZmY5OTNhN2E5ZTQ0MSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9jZmcuY1xuKysrIGIvbmV0L21hYzgwMjExL2NmZy5jXG5AQCAtNjY2LDcgKzY2NiwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYO1xuIFxuIFx0aWYgKG1hY19hZGRyKSB7XG4rXHRcdGJvb2wgZGVmZXJfaHdfdXBsb2FkO1xuK1xuIFx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7XG4rXHRcdGRlZmVyX2h3X3VwbG9hZCA9XG4rXHRcdFx0c3RhIFx1MDAyNlx1MDAyNiBwYWlyd2lzZSBcdTAwMjZcdTAwMjYgIXN0YS1cdTAwM2VzdGEuZXBwX3BlZXIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0KHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8XG4rXHRcdFx0IHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCFpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2bG9jYWwtXHUwMDNlaHcsIFNXX0NSWVBUT19DT05UUk9MKTtcbiBcdFx0LypcbiBcdFx0ICogVGhlIEFTU09DIHRlc3QgbWFrZXMgc3VyZSB0aGUgZHJpdmVyIGlzIHJlYWR5IHRvXG4gXHRcdCAqIHJlY2VpdmUgdGhlIGtleS4gV2hlbiB3cGFfc3VwcGxpY2FudCBoYXMgcm9hbWVkXG5AQCAtNjgxLDE0ICs2ODksMjIgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHQgKiBJZiAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50LFxuIFx0XHQgKiBjZmc4MDIxMSB3aWxsIG5vdCBhbGxvdyBrZXkgaW5zdGFsbGF0aW9uIGluIG5vbuKAkUFQIFNUQSBtb2RlLlxuIFx0XHQgKlxuLVx0XHQgKiBUT0RPOiBhY2NlcHQgdGhlIGtleSBpZiB3ZSBoYXZlIGEgc3RhdGlvbiBlbnRyeSBhbmRcbi1cdFx0ICpcdCBhZGQgaXQgdG8gdGhlIGRldmljZSBhZnRlciB0aGUgc3RhdGlvbiBhc3NvY2lhdGVzLlxuK1x0XHQgKiBBUC1zaWRlIEZUIG1heSBhbHNvIGluc3RhbGwgYSBwYWlyd2lzZSBrZXkgYmVmb3JlIHRoZVxuK1x0XHQgKiBzdGF0aW9uIGlzIGFzc29jaWF0ZWQuIElmIGF1dG9tYXRpYyBzb2Z0d2FyZSBmYWxsYmFjayBpc1xuK1x0XHQgKiBhbGxvd2VkLCBrZWVwIGl0IGluIG1hYzgwMjExIGFuZCB1cGxvYWQgaXQgYWZ0ZXIgdGhlIHN0YXRpb25cbitcdFx0ICogcmVhY2hlcyBBU1NPQy4gRHJpdmVycyB3aXRoIFNXX0NSWVBUT19DT05UUk9MIGNhbm5vdCB1c2UgdGhpc1xuK1x0XHQgKiBwYXRoIHNpbmNlIG9ubHkgdGhlaXIgc2V0X2tleSByZXR1cm4gdmFsdWUgY2FuIHBlcm1pdCBzb2Z0d2FyZVxuK1x0XHQgKiBjcnlwdG8uXG4gXHRcdCAqL1xuIFx0XHRpZiAoIXN0YSB8fCAoIXN0YS1cdTAwM2VzdGEuZXBwX3BlZXIgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSkpIHtcbitcdFx0XHQgICAgICF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgIWRlZmVyX2h3X3VwbG9hZCkpIHtcbiBcdFx0XHRpZWVlODAyMTFfa2V5X2ZyZWVfdW51c2VkKGtleSk7XG4gXHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHRcdH1cbitcbitcdFx0aWYgKGRlZmVyX2h3X3VwbG9hZClcbitcdFx0XHRrZXktXHUwMDNlZmxhZ3MgfD0gS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEO1xuIFx0fVxuIFxuIFx0c3dpdGNoIChzZGF0YS1cdTAwM2V2aWYudHlwZSkge1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuY1xuaW5kZXggZjQ1ZTc5MmFiZWRlNS4uNzc0YTkyYmE3YmQ4YyAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuY1xuKysrIGIvbmV0L21hYzgwMjExL2tleS5jXG5AQCAtMTQ0LDYgKzE0NCwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0aWYgKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEtleXMgYXJlIG9ubHkgZGVmZXJyZWQgaWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXG4rXHRcdCAqIGFsbG93ZWQuIExlYXZlIHJldCBhcyAtRU9QTk9UU1VQUCBzbyB0aGUgbm9ybWFsIGZhbGxiYWNrIHBhdGhcbitcdFx0ICogaXMgdXNlZCB3aXRob3V0IHByZXRlbmRpbmcgdGhlIGRyaXZlciByZXR1cm5lZCAxLlxuK1x0XHQgKi9cbitcdFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XG4rXHR9XG4rXG4gXHRpZiAoIWtleS1cdTAwM2Vsb2NhbC1cdTAwM2VvcHMtXHUwMDNlc2V0X2tleSlcbiBcdFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XG4gXG5AQCAtOTk3LDYgKzEwMDYsMjggQEAgdm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiBcdH1cbiB9XG4gXG4rdm9pZCBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLVx1MDAzZWxvY2FsO1xuK1x0c3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF93aXBoeShsb2NhbC1cdTAwM2Vody53aXBoeSk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHN0YS1cdTAwM2VwdGspOyBpKyspIHtcbitcdFx0a2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXHUwMDNlaHcud2lwaHksIHN0YS1cdTAwM2VwdGtbaV0pO1xuK1x0XHRpZiAoIWtleSB8fCAhKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0a2V5LVx1MDAzZWZsYWdzIFx1MDAyNj0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcbitcdFx0cmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRzZGF0YV9lcnIoa2V5LVx1MDAzZXNkYXRhLFxuK1x0XHRcdFx0ICBcImZhaWxlZCB0byBlbmFibGUgZGVmZXJyZWQga2V5ICglZCwgJXBNKTogJWRcXG5cIixcbitcdFx0XHRcdCAga2V5LVx1MDAzZWNvbmYua2V5aWR4LCBzdGEtXHUwMDNlc3RhLmFkZHIsIHJldCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gaWVlZTgwMjExX2tleV9pdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaFxuaW5kZXggODI2ZTRlOTM4N2M1NS4uOTdkM2JiY2YwYWMyMSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaFxuKysrIGIvbmV0L21hYzgwMjExL2tleS5oXG5AQCAtMzIsMTAgKzMyLDEzIEBAIHN0cnVjdCBzdGFfaW5mbztcbiAgKiBAS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU6IEluZGljYXRlcyB0aGF0IHRoaXMga2V5IGlzIHByZXNlbnRcbiAgKlx0aW4gdGhlIGhhcmR3YXJlIGZvciBUWCBjcnlwdG8gaGFyZHdhcmUgYWNjZWxlcmF0aW9uLlxuICAqIEBLRVlfRkxBR19UQUlOVEVEOiBLZXkgaXMgdGFpbnRlZCBhbmQgcGFja2V0cyBzaG91bGQgYmUgZHJvcHBlZC5cbisgKiBAS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEOiBLZXkgdXBsb2FkIGlzIGRlZmVycmVkIHVudGlsIHRoZSBzdGF0aW9uXG4rICpcdGlzIGFzc29jaWF0ZWQuXG4gICovXG4gZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfa2V5X2ZsYWdzIHtcbiBcdEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFXHQ9IEJJVCgwKSxcbiBcdEtFWV9GTEFHX1RBSU5URURcdFx0PSBCSVQoMSksXG4rXHRLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQURcdD0gQklUKDIpLFxuIH07XG4gXG4gZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfdGtpcF9zdGF0ZSB7XG5AQCAtMTY1LDYgKzE2OCw3IEBAIHZvaWQgaWVlZTgwMjExX2ZyZWVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgYm9vbCBmb3JjZV9zeW5jaHJvbml6ZSk7XG4gdm9pZCBpZWVlODAyMTFfZnJlZV9zdGFfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0XHQgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbit2b2lkIGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuIHZvaWQgaWVlZTgwMjExX3JlZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpO1xuIGludCBpZWVlODAyMTFfa2V5X3N3aXRjaF9saW5rcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBkZWxfbGlua3NfbWFzayxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXG5pbmRleCBmZGYwMGNiZjQ5ZDhiLi43NTNkY2RkOTA3MDExIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcbisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jXG5AQCAtMTQ2OCw2ICsxNDY4LDcgQEAgc3RhdGljIGludCBfc3RhX2luZm9fbW92ZV9zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdGNhc2UgSUVFRTgwMjExX1NUQV9BU1NPQzpcbiBcdFx0aWYgKHN0YS1cdTAwM2VzdGFfc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9BVVRIKSB7XG4gXHRcdFx0c2V0X2JpdChXTEFOX1NUQV9BU1NPQywgXHUwMDI2c3RhLVx1MDAzZV9mbGFncyk7XG4rXHRcdFx0aWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdGEpO1xuIFx0XHRcdHN0YS1cdTAwM2Vhc3NvY19hdCA9IGt0aW1lX2dldF9ib290dGltZV9ucygpO1xuIFx0XHRcdGlmIChyZWNhbGMpIHtcbiBcdFx0XHRcdGllZWU4MDIxMV9yZWNhbGNfbWluX2NoYW5kZWYoc3RhLVx1MDAzZXNkYXRhLCAtMSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MDo1Ny4yNTY4MzY2NThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDM1MzczMzYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2ggc2VyaWVzLiBGcm9tIHRoZSBmaWxlIHRvdWNoZXMg4oCTIGBuZXQvbWFjODAyMTEvY2ZnLmNgLCBgbmV0L21hYzgwMjExL2tleS5jYCwgYG5ldC9tYWM4MDIxMS9rZXkuaGAsIGFuZCBgbmV0L21hYzgwMjExL3N0YV9pbmZvLmNgIOKAkyBpdCdzIGNsZWFybHkgZGlnZ2luZyBpbnRvIHRoZSBrZXkgbWFuYWdlbWVudCBhbmQgc3RhdGlvbiBpbmZvcm1hdGlvbiB3aXRoaW4gbWFjODAyMTEsIHNwZWNpZmljYWxseSBgaWVlZTgwMjExX2FkZF9rZXlgLCBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgLCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AsIGFuZCBgX3N0YV9pbmZvX21vdmVfc3RhdGVgLiBUaGlzIGhpbnRzIGF0IHBvdGVudGlhbCBjaGFuZ2VzIHJlbGF0ZWQgdG8gaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mIGtleSBvcGVyYXRpb25zIG9yIHN0YXRpb24gc3RhdGUgdHJhbnNpdGlvbnMuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBhbHdheXMgcmVwcm9kdWNpYmlsaXR5LCBlc3BlY2lhbGx5IGluIGEga2VybmVsIGNvbnRleHQuIElzIHRoaXMgc29tZXRoaW5nIEkgY2FuIHRyaWdnZXIgYW5kIGRlYnVnIGluIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudD8gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHF1aWNrIGFuc3dlciBpcyBsaWtlbHkgeWVzLCB0aGFua3MgdG8gYG1hYzgwMjExX2h3c2ltYCwgYG5sODAyMTFgLCBgbmV0bGlua2AsIGFuZCBgY2ZnODAyMTFgLiBTeXprYWxsZXIgYW5kIFFFTVUgc2hvdWxkIHByb3ZpZGUgYSB2aWFibGUgcGF0aCBoZXJlLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkgdGhvdWdoLlxuXG5GaW5hbGx5LCBsZXQncyBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0ncyBjdXJyZW50IHN0YXRlLiBUaW1lIGZvciBzb21lIHF1aWNrIGNoZWNrcy4gSSdsbCByZWFjaCBmb3IgYGdyZXBwZXJgIGFuZCBzb21lIGZpbGUgcmVhZHMgdG8gc2VlIGhvdyBtYWM4MDIxMSBpcyBzZXQgdXAgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBkZXRlcm1pbmUgaW1wYWN0IGFuZCB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MDcuNjEwNTczNDYxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTA3NTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNDAtXFxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNzgtXFxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXFxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCJWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIlZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjgyLVxcdGJvb2wgXFxcIlZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXFxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cXHRib29sIFxcXCJFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cXHRpbnQgXFxcIlN0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcXFwiIGlmIE1BQzgwMjExX0RFQlVHX01FTlVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MDcuNzY5NjU3MDg5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE0MzMwNTE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1BQzgwMjExIERlcGVuZGVuY2llcyBpbiBLY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgS2NvbmZpZyBmb3IgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIE1BQzgwMjExLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zIGFyZSBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0bywgb3IgcGVyaGFwcyBjb25kaXRpb25hbGx5IHJlcXVpcmVkIGJ5LCB0aGUgTUFDODAyMTEgc3Vic3lzdGVtLiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gcmVjZW50IGRlYnVnZ2luZyBlZmZvcnRzLiBJIHdhbnQgdG8gc2VlIGlmIGEgY29uZmlndXJhdGlvbiBvcHRpb24gSSdtIGludGVyZXN0ZWQgaW4gaXMgYmVpbmcgdHJpZ2dlcmVkIGFzIGEgcmVzdWx0IG9mIGEgZGlyZWN0IG9yIGluZGlyZWN0IGRlcGVuZGVuY3kgZnJvbSBNQUM4MDIxMSwgb3IgcGVyaGFwcyBiZWluZyBtaXNzZWQgYXMgYSByZXN1bHQgb2YgYSBoaWRkZW4gb25lLiBJ4oCZbSB0aGlua2luZyBhYm91dCBsb29raW5nIGF0IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBkcml2ZXJzLCBuZXR3b3JraW5nIGNvcmUgY29tcG9uZW50cywgYW5kIGFueSByZWxldmFudCBzZWN1cml0eSBvciBwZXJmb3JtYW5jZSByZWxhdGVkIHNldHRpbmdzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIEtjb25maWcgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSBlZmZpY2llbnQga2VybmVsIGN1c3RvbWl6YXRpb24sIGRyaXZlciBwb3J0aW5nLCBhbmQgZGVidWdnaW5nIGVmZm9ydHMgd2hlbiBkZWFsaW5nIHdpdGggd2lyZWxlc3MgbmV0d29ya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjA5LjkxMjk2NjIyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xcbiAgMjI6XFx0XFx0Ym9vbFxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcXG4gIDI1OlxcdFxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MDkuOTEzMDM5MDQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2ODczMDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjpcblxuKipBbmFseXppbmcgYG5ldC9tYWM4MDIxMS9jZmcuY2AgYW5kIGBpZWVlODAyMTFfYWRkX2tleWAqKlxuXG5SaWdodCwgc28gdGhleSB3YW50IG1lIHRvIGxvb2sgYXQgYG5ldC9tYWM4MDIxMS9jZmcuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBpZWVlODAyMTFfYWRkX2tleWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3Mgd2hlcmUga2V5IG1hbmFnZW1lbnQgd2l0aGluIG1hYzgwMjExIGlzIGhhbmRsZWQsIG1ha2VzIHNlbnNlLlwiIFRoaXMgcHJvYmFibHkgaW52b2x2ZXMgdGhlIGNvbmZpZ3VyYXRpb24gb2Ygc2VjdXJpdHkga2V5cyBmb3IgdGhlIHdpcmVsZXNzIG5ldHdvcmsgaW50ZXJmYWNlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgY2ZnLmNgIGlzIGxpa2VseSB3aGVyZSBhIGxvdCBvZiB0aGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gaGFwcGVucywgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGhvdyBrZXlzIGFyZSBzZXQgYW5kIGFkZGVkLiBJIGJldCB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgbWF5YmUgZGlyZWN0bHkgdXNpbmcgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBvciB2aWEgYSBsb3dlci1sZXZlbCBkcml2ZXIgY2FsbGJhY2suIEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHRoYXQuIEkgZXhwZWN0IHRoZXJlIGlzIHNvbWUga2V5IGRlcml2YXRpb24gb3IgZ2VuZXJhdGlvbiBoYXBwZW5pbmcuIEkgYW50aWNpcGF0ZSBoYW5kbGluZyBvZiB2YXJpb3VzIHNlY3VyaXR5IHByb3RvY29scyBsaWtlIFdFUCwgV1BBLCBXUEEyLCBXUEEzIGFuZCBldmVuIG1heWJlIG9sZGVyIHByb3RvY29scy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCB0aW1pbmcgdnVsbmVyYWJpbGl0aWVzLCBhbmQgYW55IG9idmlvdXMgc2VjdXJpdHkgaXNzdWVzIGFyb3VuZCBrZXkgc3RvcmFnZSBvciBoYW5kbGluZy4gQWxzbywgd2hhdCBraW5kIG9mIGtleSB0eXBlcyBhcmUgc3VwcG9ydGVkPyBXRVAga2V5cz8gVEtJUCBrZXlzPyBBRVMga2V5cz8gRGlmZmVyZW50IGtleSBsZW5ndGhzPyBIb3cgYXJlIHRoZXNlIHRoaW5ncyBoYW5kbGVkLCBhbmQgd2hhdCBhcmUgdGhlIGFzc29jaWF0ZWQgY2hlY2tzPyBBbHJpZ2h0LCBsZXQncyBvcGVuIHVwIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjI0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MToxMi42ODE3NzE4OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjA0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2NmZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY2MDpcXHRcXHRcXHRrZXktXFx1MDAzZWNvbmYubGlua19pZCA9IC0xO1xcbiA2NjE6XFx0XFx0fSBlbHNlIHtcXG4gNjYyOlxcdFxcdFxcdGtleS1cXHUwMDNlY29uZi5saW5rX2lkID0gbGluay1cXHUwMDNlbGlua19pZDtcXG4gNjYzOlxcdFxcdH1cXG4gNjY0OlxcdFxcbiA2NjU6XFx0XFx0aWYgKHBhcmFtcy1cXHUwMDNlbW9kZSA9PSBOTDgwMjExX0tFWV9OT19UWClcXG4gNjY2OlxcdFxcdFxcdGtleS1cXHUwMDNlY29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfTk9fQVVUT19UWDtcXG4gNjY3OlxcdFxcbiA2Njg6XFx0XFx0aWYgKG1hY19hZGRyKSB7XFxuIDY2OTpcXHRcXHRcXHRib29sIGRlZmVyX2h3X3VwbG9hZDtcXG4gNjcwOlxcdFxcbiA2NzE6XFx0XFx0XFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjX2FkZHIpO1xcbiA2NzI6XFx0XFx0XFx0ZGVmZXJfaHdfdXBsb2FkID1cXG4gNjczOlxcdFxcdFxcdFxcdHN0YSBcXHUwMDI2XFx1MDAyNiBwYWlyd2lzZSBcXHUwMDI2XFx1MDAyNiAhc3RhLVxcdTAwM2VzdGEuZXBwX3BlZXIgXFx1MDAyNlxcdTAwMjZcXG4gNjc0OlxcdFxcdFxcdFxcdCF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpIFxcdTAwMjZcXHUwMDI2XFxuIDY3NTpcXHRcXHRcXHRcXHQoc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8XFxuIDY3NjpcXHRcXHRcXHRcXHQgc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIFxcdTAwMjZcXHUwMDI2XFxuIDY3NzpcXHRcXHRcXHRcXHQhaWVlZTgwMjExX2h3X2NoZWNrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaHcsIFNXX0NSWVBUT19DT05UUk9MKTtcXG4gNjc4OlxcdFxcdFxcdC8qXFxuIDY3OTpcXHRcXHRcXHQgKiBUaGUgQVNTT0MgdGVzdCBtYWtlcyBzdXJlIHRoZSBkcml2ZXIgaXMgcmVhZHkgdG9cXG4gNjgwOlxcdFxcdFxcdCAqIHJlY2VpdmUgdGhlIGtleS4gV2hlbiB3cGFfc3VwcGxpY2FudCBoYXMgcm9hbWVkXFxuIDY4MTpcXHRcXHRcXHQgKiB1c2luZyBGVCwgaXQgYXR0ZW1wdHMgdG8gc2V0IHRoZSBrZXkgYmVmb3JlXFxuIDY4MjpcXHRcXHRcXHQgKiBhc3NvY2lhdGlvbiBoYXMgY29tcGxldGVkLCB0aGlzIHJlamVjdHMgdGhhdCBhdHRlbXB0XFxuIDY4MzpcXHRcXHRcXHQgKiBzbyBpdCB3aWxsIHNldCB0aGUga2V5IGFnYWluIGFmdGVyIGFzc29jaWF0aW9uLlxcbiA2ODQ6XFx0XFx0XFx0ICpcXG4gNjg1OlxcdFxcdFxcdCAqIFdpdGggKHJlKWFzc29jaWF0aW9uIGZyYW1lIGVuY3J5cHRpb24gZW5hYmxlZCwgY2ZnODAyMTFcXG4gNjg2OlxcdFxcdFxcdCAqIG1heSBkZWxpdmVyIGtleXMgdG8gbWFjODAyMTEgYmVmb3JlIHRoZSBzdGF0aW9uIGhhc1xcbiA2ODc6XFx0XFx0XFx0ICogYXNzb2NpYXRlZC4gSW4gdGhhdCBjYXNlLCBhY2NlcHQgdGhlIGtleSBpZiB0aGUgc3RhdGlvblxcbiA2ODg6XFx0XFx0XFx0ICogaXMgYW4gRW5oYW5jZWQgUHJpdmFjeSBQcm90ZWN0aW9uIChFUFApIHBlZXIuXFxuIDY4OTpcXHRcXHRcXHQgKiBJZiAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50LFxcbiA2OTA6XFx0XFx0XFx0ICogY2ZnODAyMTEgd2lsbCBub3QgYWxsb3cga2V5IGluc3RhbGxhdGlvbiBpbiBub27igJFBUCBTVEEgbW9kZS5cXG4gNjkxOlxcdFxcdFxcdCAqXFxuIDY5MjpcXHRcXHRcXHQgKiBBUC1zaWRlIEZUIG1heSBhbHNvIGluc3RhbGwgYSBwYWlyd2lzZSBrZXkgYmVmb3JlIHRoZVxcbiA2OTM6XFx0XFx0XFx0ICogc3RhdGlvbiBpcyBhc3NvY2lhdGVkLiBJZiBhdXRvbWF0aWMgc29mdHdhcmUgZmFsbGJhY2sgaXNcXG4gNjk0OlxcdFxcdFxcdCAqIGFsbG93ZWQsIGtlZXAgaXQgaW4gbWFjODAyMTEgYW5kIHVwbG9hZCBpdCBhZnRlciB0aGUgc3RhdGlvblxcbiA2OTU6XFx0XFx0XFx0ICogcmVhY2hlcyBBU1NPQy4gRHJpdmVycyB3aXRoIFNXX0NSWVBUT19DT05UUk9MIGNhbm5vdCB1c2UgdGhpc1xcbiA2OTY6XFx0XFx0XFx0ICogcGF0aCBzaW5jZSBvbmx5IHRoZWlyIHNldF9rZXkgcmV0dXJuIHZhbHVlIGNhbiBwZXJtaXQgc29mdHdhcmVcXG4gNjk3OlxcdFxcdFxcdCAqIGNyeXB0by5cXG4gNjk4OlxcdFxcdFxcdCAqL1xcbiA2OTk6XFx0XFx0XFx0aWYgKCFzdGEgfHwgKCFzdGEtXFx1MDAzZXN0YS5lcHBfcGVlciBcXHUwMDI2XFx1MDAyNlxcbiA3MDA6XFx0XFx0XFx0XFx0ICAgICAhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSBcXHUwMDI2XFx1MDAyNlxcbiA3MDE6XFx0XFx0XFx0XFx0ICAgICAhZGVmZXJfaHdfdXBsb2FkKSkge1xcbiA3MDI6XFx0XFx0XFx0XFx0aWVlZTgwMjExX2tleV9mcmVlX3VudXNlZChrZXkpO1xcbiA3MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDcwNDpcXHRcXHRcXHR9XFxuIDcwNTpcXHRcXG4gNzA2OlxcdFxcdFxcdGlmIChkZWZlcl9od191cGxvYWQpXFxuIDcwNzpcXHRcXHRcXHRcXHRrZXktXFx1MDAzZWZsYWdzIHw9IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcXG4gNzA4OlxcdFxcdH1cXG4gNzA5OlxcdFxcbiA3MTA6XFx0XFx0c3dpdGNoIChzZGF0YS1cXHUwMDNldmlmLnR5cGUpIHtcXG4gNzExOlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcXG4gNzEyOlxcdFxcdFxcdGlmIChzZGF0YS1cXHUwMDNldS5tZ2QubWZwICE9IElFRUU4MDIxMV9NRlBfRElTQUJMRUQpXFxuIDcxMzpcXHRcXHRcXHRcXHRrZXktXFx1MDAzZWNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1JYX01HTVQ7XFxuIDcxNDpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MTIuNjgyMDM0MTc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2NTU5Mjg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGluc3RydWN0aW9ucywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE1BQzgwMjExIEtleSBNYW5hZ2VtZW50IENvZGUqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBuZXQvbWFjODAyMTEva2V5LmNgIGZpbGUgbm93LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBrZXkgdXBsb2FkIHByb2Nlc3MsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBoYXJkd2FyZSBhY2NlbGVyYXRpb24uIEkgd2FudCB0byB6ZXJvIGluIG9uIGhvdyBkZWZlcnJlZCBTVEEga2V5cyBhcmUgaGFuZGxlZCwgYW5kIGhvdyB3ZSBlbmFibGUgdGhhdCBoYXJkd2FyZSBhY2NlbGVyYXRpb24uIFRoZSBrZXkgZnVuY3Rpb25zIEknbGwgYmUgbG9va2luZyBhdCB3aWxsIGJlIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCBhbmQgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYC4gSSBhbnRpY2lwYXRlIHRoZXJlIGFyZSBhIGxvdCBvZiBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgaW4gdGhlcmUsIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IHdlIG1hbmFnZSBrZXkgY29udGV4dHMsIGhvdyB0aGV5J3JlIHB1c2hlZCB0byB0aGUgaGFyZHdhcmUsIGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhhdC4gSSBiZXQgdGhlcmUgd2lsbCBiZSBzb21lIGNydWNpYWwgbG9ja2luZyBjb25zaWRlcmF0aW9ucyB0aGVyZSB0b28sIHJlbGF0ZWQgdG8gdGhlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIGtleSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBoYXJkd2FyZSBhbmQgdGhlIHNvZnR3YXJlLiBJdOKAmXMgYWxzbyBsaWtlbHkgdGhhdCB0aGUgZGVmZXJyYWwgbWVjaGFuaXNtIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgYXZhaWxhYmxlIGhhcmR3YXJlIHJlc291cmNlcyDigJMgcGVyaGFwcyB0aGVyZeKAmXMgYSBsaW1pdCB0byBob3cgbWFueSBrZXlzIGNhbiBiZSBsb2FkZWQgYXQgb25jZSwgb3IgbWF5YmUgdGhlcmUgYXJlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIGtleXMuIFRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MTQuODQ3NjMwMDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9rZXkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0XFx0XFx0XFx0XFx0IElFRUU4MDIxMV9LRVlfRkxBR19SRVNFUlZFX1RBSUxST09NKSkpXFxuIDE0MTpcXHRcXHRcXHRcXHRpbmNyZW1lbnRfdGFpbHJvb21fbmVlZF9jb3VudChzZGF0YSk7XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdFxcdGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfktFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFO1xcbiAxNDQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE0NTpcXHRcXHR9XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdFxcdGlmIChrZXktXFx1MDAzZWZsYWdzIFxcdTAwMjYgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSB7XFxuIDE0ODpcXHRcXHRcXHQvKlxcbiAxNDk6XFx0XFx0XFx0ICogS2V5cyBhcmUgb25seSBkZWZlcnJlZCBpZiBhdXRvbWF0aWMgc29mdHdhcmUgZmFsbGJhY2sgaXNcXG4gMTUwOlxcdFxcdFxcdCAqIGFsbG93ZWQuIExlYXZlIHJldCBhcyAtRU9QTk9UU1VQUCBzbyB0aGUgbm9ybWFsIGZhbGxiYWNrIHBhdGhcXG4gMTUxOlxcdFxcdFxcdCAqIGlzIHVzZWQgd2l0aG91dCBwcmV0ZW5kaW5nIHRoZSBkcml2ZXIgcmV0dXJuZWQgMS5cXG4gMTUyOlxcdFxcdFxcdCAqL1xcbiAxNTM6XFx0XFx0XFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XFxuIDE1NDpcXHRcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdGlmICgha2V5LVxcdTAwM2Vsb2NhbC1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfa2V5KVxcbiAxNTc6XFx0XFx0XFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XFxuIDE1ODpcXHRcXG4gMTU5OlxcdFxcdHN0YSA9IGtleS1cXHUwMDNlc3RhO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHQvKlxcbiAxNjI6XFx0XFx0ICogQWxsb3cgaW5zdGFsbGF0aW9uIG9mIGEgcGVyLVNUQSBHVEsgaWYgcGVyLVNUQSBHVEsgaXMgc3VwcG9ydGVkXFxuIDE2MzpcXHRcXHQgKiBieSB0aGUgZHJpdmVyIG9yIHRoZSBpbnRlcmZhY2UgaXMgYSBOQU4gRGF0YSBpbnRlcmZhY2UgKGFzXFxuIDE2NDpcXHRcXHQgKiBwZXItc3RhdGlvbiBHVEtzIGFyZSByZXF1aXJlZCB0byBiZSBzdXBwb3J0ZWQgaWYgc2VjdXJlIE5BTiBpc1xcbiAxNjU6XFx0XFx0ICogc3VwcG9ydGVkKS5cXG4gMTY2OlxcdFxcdCAqL1xcbiAxNjc6XFx0XFx0aWYgKHN0YSBcXHUwMDI2XFx1MDAyNiAhKGtleS1cXHUwMDNlY29uZi5mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkgXFx1MDAyNlxcdTAwMjZcXG4gMTY4OlxcdFxcdCAgICAhKGllZWU4MDIxMV9od19jaGVjayhcXHUwMDI2a2V5LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcsIFNVUFBPUlRTX1BFUl9TVEFfR1RLKSB8fFxcbiAxNjk6XFx0XFx0ICAgICAgc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKSlcXG4gMTcwOlxcdFxcdFxcdGdvdG8gb3V0X3Vuc3VwcG9ydGVkO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRpZiAoc3RhIFxcdTAwMjZcXHUwMDI2ICFzdGEtXFx1MDAzZXVwbG9hZGVkKVxcbiAxNzM6XFx0XFx0XFx0Z290byBvdXRfdW5zdXBwb3J0ZWQ7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikge1xcbiAxNzY6XFx0XFx0XFx0LypcXG4gMTc3OlxcdFxcdFxcdCAqIFRoZSBkcml2ZXIgZG9lc24ndCBrbm93IGFueXRoaW5nIGFib3V0IFZMQU4gaW50ZXJmYWNlcy5cXG4gMTc4OlxcdFxcdFxcdCAqIEhlbmNlLCBkb24ndCBzZW5kIEdUS3MgZm9yIFZMQU4gaW50ZXJmYWNlcyB0byB0aGUgZHJpdmVyLlxcbiAxNzk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjE0Ljg0NzczNDY0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNjkyNDQ0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gRGVmZXJyZWQgU1RBIEtleSBVcGxvYWQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyBkZWZlcnJlZCBTVEEga2V5cyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgbmV0L21hYzgwMjExL2tleS5jYCBmaWxlLiBUaGUgZnVuY3Rpb24gSSdtIHRhcmdldGluZyBpcyBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AuIFRoaXMgaGludHMgYXQgYSBwb3RlbnRpYWwgYXJlYSB3aGVyZSBrZXkgbWFuYWdlbWVudCBtaWdodCBiZSBjYXVzaW5nIHNvbWUgaGljY3VwcywgcGVyaGFwcyBkdXJpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IG9yIHJla2V5aW5nIHNjZW5hcmlvcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZXNlIGtleXMgYXJlIHF1ZXVlZCwgaGFuZGxlZCwgYW5kIHVsdGltYXRlbHkgdXBsb2FkZWQgdG8gdGhlIGhhcmR3YXJlLiBBbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgY29uY3VycmVuY3kgaXNzdWVzIGFyZSBpbW1lZGlhdGVseSBvbiBteSByYWRhci4gSSB3YW50IHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gYWxpZ25zIHdpdGggbXkgZXhwZWN0YXRpb25zIHJlZ2FyZGluZyBrZXkgZGVyaXZhdGlvbiwgaGFyZHdhcmUgbGltaXRhdGlvbnMsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MjMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjE3LjAxNjk4MjYxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2tleS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDA6XFx0XFx0aWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkge1xcbjEwMDE6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFxcdTAwMjZzZGF0YS1cXHUwMDNla2V5X2xpc3QsIGxpc3QpIHtcXG4xMDAyOlxcdFxcdFxcdFxcdGlmICghKGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLRVlfRkxBR19UQUlOVEVEKSlcXG4xMDAzOlxcdFxcdFxcdFxcdFxcdGluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTtcXG4xMDA0OlxcdFxcdFxcdFxcdGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7XFxuMTAwNTpcXHRcXHRcXHR9XFxuMTAwNjpcXHRcXHR9XFxuMTAwNzpcXHR9XFxuMTAwODpcXHRcXG4xMDA5OlxcdHZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG4xMDEwOlxcdHtcXG4xMDExOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLVxcdTAwM2Vsb2NhbDtcXG4xMDEyOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7XFxuMTAxMzpcXHRcXHRpbnQgaSwgcmV0O1xcbjEwMTQ6XFx0XFxuMTAxNTpcXHRcXHRsb2NrZGVwX2Fzc2VydF93aXBoeShsb2NhbC1cXHUwMDNlaHcud2lwaHkpO1xcbjEwMTY6XFx0XFxuMTAxNzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShzdGEtXFx1MDAzZXB0ayk7IGkrKykge1xcbjEwMTg6XFx0XFx0XFx0a2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXFx1MDAzZWh3LndpcGh5LCBzdGEtXFx1MDAzZXB0a1tpXSk7XFxuMTAxOTpcXHRcXHRcXHRpZiAoIWtleSB8fCAhKGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpKVxcbjEwMjA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTAyMTpcXHRcXG4xMDIyOlxcdFxcdFxcdGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcXG4xMDIzOlxcdFxcdFxcdHJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7XFxuMTAyNDpcXHRcXHRcXHRpZiAocmV0KVxcbjEwMjU6XFx0XFx0XFx0XFx0c2RhdGFfZXJyKGtleS1cXHUwMDNlc2RhdGEsXFxuMTAyNjpcXHRcXHRcXHRcXHRcXHQgIFxcXCJmYWlsZWQgdG8gZW5hYmxlIGRlZmVycmVkIGtleSAoJWQsICVwTSk6ICVkXFxcXG5cXFwiLFxcbjEwMjc6XFx0XFx0XFx0XFx0XFx0ICBrZXktXFx1MDAzZWNvbmYua2V5aWR4LCBzdGEtXFx1MDAzZXN0YS5hZGRyLCByZXQpO1xcbjEwMjg6XFx0XFx0fVxcbjEwMjk6XFx0fVxcbjEwMzA6XFx0XFxuMTAzMTpcXHRzdGF0aWMgdm9pZFxcbjEwMzI6XFx0aWVlZTgwMjExX2tleV9pdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbjEwMzM6XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4xMDM0OlxcdFxcdFxcdCAgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXFxuMTAzNTpcXHRcXHRcXHQgICB2b2lkICgqaXRlcikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuMTAzNjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbjEwMzc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSxcXG4xMDM5OlxcdFxcdFxcdFxcdFxcdHZvaWQgKmRhdGEpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MToxNy4wMTcwOTYwMzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExMTE1NjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgc3RhX2luZm8uY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVG8gdGFja2xlIHRoaXMsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvbWFjODAyMTEvc3RhX2luZm8uY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2Ygc3RhdGlvbiBpbmZvcm1hdGlvbiBtYW5hZ2VtZW50IGZvciB0aGUgbWFjODAyMTEgc3RhY2sgcmVzaWRlcywgYW5kIGl0J3MgYSBjcml0aWNhbCBhcmVhIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBzdGF0aW9ucyBhcmUgaGFuZGxlZC4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc3RhdGlvbiBhc3NvY2lhdGlvbiwgYXV0aGVudGljYXRpb24sIGFuZCBnZW5lcmFsIHN0YXRlIG1hbmFnZW1lbnQgdGhlcmUuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgY29ubmVjdGlvbiBkZXRhaWxzIGFuZCBhc3NvY2lhdGVkIGluZm9ybWF0aW9uIGlzIGtlcHQgaGVyZS4gTXkgZXhwZXJ0IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhhdCdzIHRoZSBjb3JyZWN0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoaXMgc3BlY2lmaWMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjIyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MToxOS4xMjgyNTQ3NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NjA6XFx0XFx0XFx0XFx0Y2xlYXJfYml0KFdMQU5fU1RBX0FTU09DLCBcXHUwMDI2c3RhLVxcdTAwM2VfZmxhZ3MpO1xcbjE0NjE6XFx0XFx0XFx0XFx0aWYgKHJlY2FsYykge1xcbjE0NjI6XFx0XFx0XFx0XFx0XFx0aWVlZTgwMjExX3JlY2FsY19taW5fY2hhbmRlZihzdGEtXFx1MDAzZXNkYXRhLCAtMSk7XFxuMTQ2MzpcXHRcXHRcXHRcXHRcXHRpZiAoIXN0YS1cXHUwMDNlc3RhLnN1cHBvcnRfcDJwX3BzKVxcbjE0NjQ6XFx0XFx0XFx0XFx0XFx0XFx0aWVlZTgwMjExX3JlY2FsY19wMnBfZ29fcHNfYWxsb3dlZChzdGEtXFx1MDAzZXNkYXRhKTtcXG4xNDY1OlxcdFxcdFxcdFxcdH1cXG4xNDY2OlxcdFxcdFxcdH1cXG4xNDY3OlxcdFxcdFxcdGJyZWFrO1xcbjE0Njg6XFx0XFx0Y2FzZSBJRUVFODAyMTFfU1RBX0FTU09DOlxcbjE0Njk6XFx0XFx0XFx0aWYgKHN0YS1cXHUwMDNlc3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSCkge1xcbjE0NzA6XFx0XFx0XFx0XFx0c2V0X2JpdChXTEFOX1NUQV9BU1NPQywgXFx1MDAyNnN0YS1cXHUwMDNlX2ZsYWdzKTtcXG4xNDcxOlxcdFxcdFxcdFxcdGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RhKTtcXG4xNDcyOlxcdFxcdFxcdFxcdHN0YS1cXHUwMDNlYXNzb2NfYXQgPSBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcXG4xNDczOlxcdFxcdFxcdFxcdGlmIChyZWNhbGMpIHtcXG4xNDc0OlxcdFxcdFxcdFxcdFxcdGllZWU4MDIxMV9yZWNhbGNfbWluX2NoYW5kZWYoc3RhLVxcdTAwM2VzZGF0YSwgLTEpO1xcbjE0NzU6XFx0XFx0XFx0XFx0XFx0aWYgKCFzdGEtXFx1MDAzZXN0YS5zdXBwb3J0X3AycF9wcylcXG4xNDc2OlxcdFxcdFxcdFxcdFxcdFxcdGllZWU4MDIxMV9yZWNhbGNfcDJwX2dvX3BzX2FsbG93ZWQoc3RhLVxcdTAwM2VzZGF0YSk7XFxuMTQ3NzpcXHRcXHRcXHRcXHR9XFxuMTQ3ODpcXHRcXHRcXHR9IGVsc2UgaWYgKHN0YS1cXHUwMDNlc3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSE9SSVpFRCkge1xcbjE0Nzk6XFx0XFx0XFx0XFx0aWVlZTgwMjExX3ZpZl9kZWNfbnVtX21jYXN0KHN0YS1cXHUwMDNlc2RhdGEpO1xcbjE0ODA6XFx0XFx0XFx0XFx0Y2xlYXJfYml0KFdMQU5fU1RBX0FVVEhPUklaRUQsIFxcdTAwMjZzdGEtXFx1MDAzZV9mbGFncyk7XFxuMTQ4MTpcXHRcXHRcXHRcXHRpZiAoc3RhLVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpXFxuMTQ4MjpcXHRcXHRcXHRcXHRcXHRpZWVlODAyMTFfbmFuX3VwZGF0ZV9uZGlfY2FycmllcihzdGEtXFx1MDAzZXNkYXRhKTtcXG4xNDgzOlxcdFxcbjE0ODQ6XFx0XFx0XFx0XFx0LypcXG4xNDg1OlxcdFxcdFxcdFxcdCAqIElmIHdlIGhhdmUgZW5jcnlwdGlvbiBvZmZsb2FkLCBmbHVzaCAoc3RhdGlvbikgcXVldWVzXFxuMTQ4NjpcXHRcXHRcXHRcXHQgKiAoYWZ0ZXIgZW5zdXJpbmcgY29uY3VycmVudCBUWCBjb21wbGV0ZWQpIHNvIHdlIHdvbid0XFxuMTQ4NzpcXHRcXHRcXHRcXHQgKiB0cmFuc21pdCBhbnl0aGluZyBsYXRlciB1bmVuY3J5cHRlZCBpZi93aGVuIGtleXMgYXJlXFxuMTQ4ODpcXHRcXHRcXHRcXHQgKiBhbHNvIHJlbW92ZWQsIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBoYXBwZW4gZGVwZW5kaW5nXFxuMTQ4OTpcXHRcXHRcXHRcXHQgKiBvbiBob3cgdGhlIGhhcmR3YXJlIG9mZmxvYWQgd29ya3MuXFxuMTQ5MDpcXHRcXHRcXHRcXHQgKi9cXG4xNDkxOlxcdFxcdFxcdFxcdGlmIChsb2NhbC1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfa2V5KSB7XFxuMTQ5MjpcXHRcXHRcXHRcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4xNDkzOlxcdFxcdFxcdFxcdFxcdGlmIChsb2NhbC1cXHUwMDNlb3BzLVxcdTAwM2VmbHVzaF9zdGEpXFxuMTQ5NDpcXHRcXHRcXHRcXHRcXHRcXHRkcnZfZmx1c2hfc3RhKGxvY2FsLCBzdGEtXFx1MDAzZXNkYXRhLCBzdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MToxOS4xMjg0MjYyOTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDgzODY5NzA3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBtYWM4MDIxMSBLZXkgSGFuZGxpbmcgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AgaW5jbHVkZXMgYSBgbG9ja2RlcF9hc3NlcnRfd2lwaHlgLCB3aGljaCBpcyBnb29kIHRvIHNlZSBmcm9tIGEgbG9ja2luZyBwZXJzcGVjdGl2ZS4gVGhpcyBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgYHN0YS1cdTAwM2VwdGtgIGFycmF5LCBpZGVudGlmaWVzIGRlZmVycmVkIGhhcmR3YXJlIHVwbG9hZCBrZXlzIGJhc2VkIG9uIHRoZSBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYCBmbGFnLCBjbGVhcnMgdGhhdCBmbGFnLCBhbmQgdGhlbiB0cmlnZ2VycyBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgLiBJIHJlbWVtYmVyIGZyb20gbG9va2luZyBhdCBgY2ZnLmNgLCB0aGF0IGBpZWVlODAyMTFfYWRkX2tleWAgc3RyYXRlZ2ljYWxseSBzZXRzIHRoaXMgYGRlZmVyX2h3X3VwbG9hZGAgZmxhZywgZm9yIEFQL0FQX1ZMQU4gY29uZmlndXJhdGlvbnMgd2hlbiBhIHN0YXRpb24gaXNuJ3QgeWV0IGFzc29jaWF0ZWQgYnV0IHdoZW4gYFNXX0NSWVBUT19DT05UUk9MYCBpc24ndCBlbmFibGVkLiBUaGlzIGZsYWcgaXMgYWJzb2x1dGVseSBjcml0aWNhbCwgYmVjYXVzZSBpbiBga2V5LmNgLCBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgIHNraXBzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpZiB0aGF0IGZsYWcgaXMgc2V0LCBlc3NlbnRpYWxseSBrZWVwaW5nIHRoaW5ncyBpbiBzb2Z0d2FyZSBjcnlwdG8gdW50aWwgdGhlIHN0YXRpb24gcmVhY2hlcyB0aGUgQVNTT0Mgc3RhdGUuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGUgaW4gYSBmdXp6aW5nIGNvbnRleHQgbGlrZSBzeXprYWxsZXI/IEZvcnR1bmF0ZWx5LCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMhIFN5emthbGxlciBpcyBrbm93biB0byBoaXQgbWFjODAyMTEgYW5kIG5sODAyMTEgd2l0aCBleHRyZW1lIHByZWp1ZGljZSwgbGV2ZXJhZ2luZyBgbmw4MDIxMWAgbmV0bGluayBjb21tYW5kcyBhbmQgbWFjODAyMTFfaHdzaW0uIENvbW1hbmRzIGxpa2UgYE5MODAyMTFfQ01EX05FV19LRVlgIGFuZCBgTkw4MDIxMV9DTURfU0VUX1NUQVRJT05gIGRpcmVjdGx5IGludm9rZSBmdW5jdGlvbnMgbGlrZSBgaWVlZTgwMjExX2FkZF9rZXlgLCBgX3N0YV9pbmZvX21vdmVfc3RhdGVgLCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AsIGFuZCBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgLlxuXG5HaXZlbiB0aGlzLCBJJ20gY29uZmlkZW50IGluIHRoZSBmb2xsb3dpbmc6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBBYnNvbHV0ZWx5ISBUaGUgY29kZSBpcyBjbGVhcmx5IHJlYWNoYWJsZS5cbiogICAqKlJlYWNoYWJsZSBDb2RlOioqIEVudGlyZWx5IHJlYWNoYWJsZSB2aWEgdGhlIG5sODAyMTEgLyBtYWM4MDIxMSBpbnRlcmZhY2UuXG4qICAgKipDaGFuZ2UgSW1wYWN0OioqIFRoaXMgaW50cm9kdWNlcyBuZXcgbG9naWMgYXJvdW5kIGtleSBkZWZlcnJhbCwgd2hpY2ggaW5jbHVkZXMgdGhlIGBsb2NrZGVwX2Fzc2VydF93aXBoeWAgYXNzZXJ0aW9uLCBhbmQgbGlrZWx5IG1vZGlmaWVzIHN0YXRlIG1hY2hpbmUgdHJhbnNpdGlvbnMsIHBhcnRpY3VsYXJseSBpbiBBUCBtb2RlLlxuXG5Ob3csIGxldCBtZSBleGFtaW5lIHRoZSBjb3JlIHN5bWJvbHMgdG91Y2hlZCBieSB0aGVzZSBjaGFuZ2VzLiBJJ3ZlIG5vdGVkIHRoYXQgYGllZWU4MDIxMV9hZGRfa2V5YCwgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCwgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXNgLCBhbmQgYF9zdGFfaW5mb19tb3ZlX3N0YXRlYCBhcmUgdGhlIG1haW4gZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIG9yIG5ld2x5IGludHJvZHVjZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGBfc3RhX2luZm9fbW92ZV9zdGF0ZWAgKG9yLCBgc3RhX2luZm9fbW92ZV9zdGF0ZWApIGlzIHN0YXRpYywgZXhwb3J0ZWQsIG9yIGNhbGxlZCBlbHNld2hlcmUgdG8gZnVsbHkgZ3Jhc3AgdGhlIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjIzLjk2NzEyNTYwNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3MDg5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX3N0YV9pbmZvX21vdmVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTEzMTA9c3RhdGljIGludCBfX211c3RfY2hlY2sgX19zdGFfaW5mb19kZXN0cm95X3BhcnQxKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTM5NC1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxMzk1OnN0YXRpYyBpbnQgX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTM5Ni1cXHRcXHRcXHRcXHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MTUzOD1pbnQgc3RhX2luZm9fbW92ZV9zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1NDAte1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjE1NDE6XFx0cmV0dXJuIF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgbmV3X3N0YXRlLCB0cnVlKTtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTQyLX1cXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTE1NDQ9c3RhdGljIHZvaWQgX19zdGFfaW5mb19kZXN0cm95X3BhcnQyKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBib29sIHJlY2FsYylcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1NzMtXFx0aWYgKHN0YS1cXHUwMDNlc3RhX3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVVUSE9SSVpFRCkge1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjE1NzQ6XFx0XFx0cmV0ID0gX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FTU09DLCByZWNhbGMpO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1NzUtXFx0XFx0V0FSTl9PTl9PTkNFKHJldCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTg5LVxcdHdoaWxlIChzdGEtXFx1MDAzZXN0YV9zdGF0ZSBcXHUwMDNlIElFRUU4MDIxMV9TVEFfTk9ORSkge1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjE1OTA6XFx0XFx0cmV0ID0gX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBzdGEtXFx1MDAzZXN0YV9zdGF0ZSAtIDEsIHJlY2FsYyk7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTU5MS1cXHRcXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjI0LjAyMDgzNzE0MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA4OTA4MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYGllZWU4MDIxMV9hZGRfa2V5YCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGtleSBhZGRpdGlvbiBmdW5jdGlvbiB3b3Jrcywgc3BlY2lmaWNhbGx5IGBpZWVlODAyMTFfYWRkX2tleWAuIFJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzIHRocm91Z2guIEJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0J3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGBtYWM4MDIxMWAgZnJhbWV3b3JrLiBJIHJlY2FsbCBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHRoaXMgaW4gYG5ldC9tYWM4MDIxMS9jZmcuY2AuIEknbGwgd2FudCB0byB2ZXJpZnkgdGhhdCBgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleSguLi4pYCAob3IgYSBzaW1pbGFyIHNpZ25hdHVyZSkgaXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBib3VuZCB0byB0aGUgYG1hYzgwMjExX2NvbmZpZ19vcHMuYWRkX2tleWAgZnVuY3Rpb24gcG9pbnRlciwgb3Igc29tZXRoaW5nIGVxdWl2YWxlbnQuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBiaW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24uIExldCdzIGRpZyBpbiBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM2NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjI2LjQyOTc0OTA4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4ODQ0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX2FkZF9rZXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9jZmcuYz01ODU9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X3R4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTYxMi1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NjEzOnN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjE0LVxcdFxcdFxcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk5Mj1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTk5Ny1cXHQuc3RvcF9wMnBfZGV2aWNlID0gaWVlZTgwMjExX3N0b3BfcDJwX2RldmljZSxcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTk5ODpcXHQuYWRkX2tleSA9IGllZWU4MDIxMV9hZGRfa2V5LFxcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTk5LVxcdC5kZWxfa2V5ID0gaWVlZTgwMjExX2RlbF9rZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjI2LjQ4MTYzNjk2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjQzMzU3NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBIYXJkd2FyZSBBY2NlbGVyYXRpb24gZm9yIDgwMi4xMSBLZXkgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciA4MDIuMTEga2V5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBJJ20gYXNzdW1pbmcgaXQncyByZXNwb25zaWJsZSBmb3Igb3JjaGVzdHJhdGluZyB0aGUgb2ZmbG9hZCBvZiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBzZWN1cml0eSBrZXlzIHRvIGhhcmR3YXJlIGFjY2VsZXJhdG9ycywgcmlnaHQ/IFRoYXQncyB0aGUgb2J2aW91cyBpbnRlbnQuXG5cbkknZCBuZWVkIHRvIHF1aWNrbHkgY29uc2lkZXI6XG5cbiogICAqKlVuZGVybHlpbmcgQXNzdW1wdGlvbnM6KiogV2hhdCBhcmUgdGhlIHByZXJlcXVpc2l0ZXM/IElzIGl0IGNoZWNraW5nIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIGhhcmR3YXJlIGNyeXB0byBlbmdpbmVzPyBEb2VzIGl0IHJlbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBsaWtlIHN1cHBvcnQgZm9yIEFFUy1DQ00sIFRLSVAsIG9yIG90aGVyIGtleSBhbGdvcml0aG1zPyBJIG5lZWQgdG8gbG9vayBmb3IgY29uZGl0aW9uYWwgY2hlY2tzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4qICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rpb24/IEknbSBleHBlY3Rpbmcgc29tZXRoaW5nIHRoYXQgY29udGFpbnMga2V5IG1hdGVyaWFsLCB0aGUgTUFDIGFkZHJlc3MgY29udGV4dCwgYW5kIGNvbmZpZ3VyYXRpb24gZmxhZ3MuIFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBoZXJlIHdpbGwgYmUgY3JpdGljYWwgdG8gdGhlIG92ZXJhbGwgb3BlcmF0aW9uLiBIb3cgaXMgdGhlIGtleSBkYXRhIG9yZ2FuaXplZD8gSXMgdGhlcmUgYSBwcm9wcmlldGFyeSBmb3JtYXQ/IERvZXMgaXQgbmVlZCB0byBiZSBwcmUtcHJvY2Vzc2VkIGJlZm9yZSBzZW5kaW5nIGl0IG9mZiB0byB0aGUgSFc/XG4qICAgKipIYXJkd2FyZSBBYnN0cmFjdGlvbjoqKiBXaGF0IGtpbmQgb2YgYWJzdHJhY3Rpb24gaXMgdXNlZCB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgaGFyZHdhcmU/IElzIGl0IGEgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgKERNQSkgc2V0dXAgb3Igc29tZSBraW5kIG9mIEkvTyBjb250cm9sIChpb2N0bCkgY2FsbD8gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiByZWdpc3RlciBkZWZpbml0aW9ucyBvciBkZXZpY2UgZHJpdmVyIGNhbGxzLiBEb2VzIGl0IHN1cHBvcnQgc2NhdHRlci1nYXRoZXIgRE1BPyBXaGF0IGFyZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZD9cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZhaWxzPyBEb2VzIHRoZSBjb2RlIGdyYWNlZnVsbHkgZmFsbCBiYWNrIHRvIHNvZnR3YXJlLWJhc2VkIGNyeXB0b2dyYXBoeT8gSSBuZWVkIHRvIGFuYWx5emUgdGhvc2UgZmFpbHVyZSBwYXRocyB0byBhc3Nlc3MgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uLlxuKiAgICoqQ29uY3VycmVuY3kvVGhyZWFkaW5nOioqIEhvdyBpcyBpdCBoYW5kbGluZyB0aHJlYWQtc2FmZXR5IGluIHRoaXMgY29udGV4dD8gSXMgdGhlcmUgYSBsb2NrIGFyb3VuZCB0aGUgaGFyZHdhcmUgYWNjZXNzIG9yIGlzIHRoZSBhcmNoaXRlY3R1cmUgaW5oZXJlbnRseSBkZXNpZ25lZCBmb3IgY29uY3VycmVudCBrZXkgc2V0dXAgYW5kIG9wZXJhdGlvbj8gQ29uc2lkZXJpbmcgdGhlIHJlYWwtdGltZSBuYXR1cmUgb2Ygd2lyZWxlc3MgdHJhZmZpYywgY29uY3VycmVuY3kgYW5kIGxvdyBsYXRlbmN5IHdpbGwgYmUgY3J1Y2lhbCBhc3BlY3RzIG9mIHRoZSBkZXNpZ24uXG4qICAgKipTZWN1cml0eSBJbXBsaWNhdGlvbnM6KiogV2hhdCBhcmUgdGhlIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIG9mIG9mZmxvYWRpbmcgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHRvIGhhcmR3YXJlPyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBrZXkgbWF0ZXJpYWwgaXMgaGFuZGxlZCBzYWZlbHkgYW5kIG5vdCB2dWxuZXJhYmxlIHRvIHNpZGUtY2hhbm5lbCBhdHRhY2tzIG9yIG1lbW9yeSBsZWFrcy5cblxuQmFzaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGlmIGl0J3MgYSBnb29kIGltcGxlbWVudGF0aW9uLCBvciBpZiB0aGVyZSBpcyB0aGUgbmVlZCB0byBpbXByb3ZlIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDIwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MzAuMTI0OTk3MjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDg2ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEva2V5LmM9MTA5PXN0YXRpYyB2b2lkIGRlY3JlYXNlX3RhaWxyb29tX25lZWRfY291bnQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtMTE5LVxcbm5ldC9tYWM4MDIxMS9rZXkuYzoxMjA6c3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMjEte1xcbi0tXFxubmV0L21hYzgwMjExL2tleS5jPTQ0OT1zdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy01MTktXFx0XFx0XFx0aWYgKG5ldylcXG5uZXQvbWFjODAyMTEva2V5LmM6NTIwOlxcdFxcdFxcdFxcdHJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKG5ldyk7XFxubmV0L21hYzgwMjExL2tleS5jLTUyMS1cXHRcXHR9XFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtNTIzLVxcdFxcdGlmICghbmV3LVxcdTAwM2Vsb2NhbC1cXHUwMDNld293bGFuKSB7XFxubmV0L21hYzgwMjExL2tleS5jOjUyNDpcXHRcXHRcXHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChuZXcpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy01MjUtXFx0XFx0fSBlbHNlIGlmIChsaW5rX2lkIFxcdTAwM2MgMCB8fCAhc2RhdGEtXFx1MDAzZXZpZi5hY3RpdmVfbGlua3MgfHxcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYz05ODM9dm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDAzLVxcdFxcdFxcdFxcdGluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTtcXG5uZXQvbWFjODAyMTEva2V5LmM6MTAwNDpcXHRcXHRcXHRpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDA1LVxcdFxcdH1cXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYz0xMDA5PXZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDIyLVxcdFxcdGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcXG5uZXQvbWFjODAyMTEva2V5LmM6MTAyMzpcXHRcXHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDI0LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmM9MTUxNz1pbnQgaWVlZTgwMjExX2tleV9zd2l0Y2hfbGlua3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtMTU0Mi1cXG5uZXQvbWFjODAyMTEva2V5LmM6MTU0MzpcXHRcXHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy0xNTQ0LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjMwLjE3NTQ4NjY1NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjY1NDc5MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVlcCBEaXZlIGludG8gYHN0YV9pbmZvX21vdmVfc3RhdGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIGBzdGFfaW5mb19tb3ZlX3N0YXRlYCBmdW5jdGlvbiBvciB2YXJpYWJsZSDigJMgd2hhdGV2ZXIgaXQgaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdHJlYXQgaXQgYXMgYSBjcml0aWNhbCBwaWVjZSBvZiBzdGF0ZSBtYW5hZ2VtZW50LCBsaWtlbHkgcmVsYXRlZCB0byBtb3ZlbWVudCB3aXRoaW4sIHdlbGwsIHRoZSBgc3RhX2luZm9gIGNvbnRleHQuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSeKAmW0gZ3Vlc3NpbmcgaXQncyAqc3BlY2lmaWMqIHN0YXRlLCBub3QgdGhlIG92ZXJhcmNoaW5nLCBnbG9iYWwgc3RhdGUuIFByb2JhYmx5IHNvbWV0aGluZyBncmFudWxhciwgcmlnaHQ/IEEgZmxhZywgYW4gZW51bSwgb3IgbWF5YmUgZXZlbiBhIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBkZXNjcmliaW5nIG1vdmVtZW50IHN0YXR1cy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwb3NzaWJsZSB2YWx1ZXMgcmlnaHQgb2ZmIHRoZSBiYXQuIFwiSWRsZSxcIiBcIk1vdmluZyxcIiBcIkFjY2VsZXJhdGluZyxcIiBcIkRlY2VsZXJhdGluZyxcIiBcIlR1cm5pbmcsXCIgXCJKdW1waW5nLFwiIFwiRmFsbGluZ1wiIOKAkyBJJ20gc3BpdGJhbGxpbmcgYSBsb3QgaGVyZSwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvZGUgdG8gY29uZmlybSBpZiBJJ20gZXZlbiBvbiB0aGUgcmlnaHQgdHJhY2suIEkgZXhwZWN0IHRvIHNlZSB0cmFuc2l0aW9uIGxvZ2ljIHJlbGF0ZWQgdG8gdGhpcyBzdGF0ZS4gVGhpcyBjb3VsZCBpbnZvbHZlIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgdGhlIHZhcmlhYmxlLCBjYWxscyB0byBvdGhlciBmdW5jdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhlIHN0YXRlLCBvciBtYXliZSBldmVuIGV2ZW50LWRyaXZlbiBjaGFuZ2VzIGJhc2VkIG9uIGlucHV0IG9yIGVudmlyb25tZW50YWwgY29uZGl0aW9ucy5cblxuVGhlIGNvbnRleHQgb2YgYHN0YV9pbmZvYCBpcyBpbXBvcnRhbnQuIEnigJltIHBpY3R1cmluZyBhIGZhaXJseSBjb21wbGV4IHN5c3RlbSwgc29tZXRoaW5nIHRoYXQgdHJhY2tzIGFuIGVudGl0eSwgbWF5YmUgaW4gYSBnYW1lIGVuZ2luZSwgcGh5c2ljcyBzaW11bGF0aW9uLCBvciBzaW1pbGFyIGNvbnRleHQuIFRoZSBgc3RhX2luZm9gIHN0cnVjdHVyZSBpcyBwcm9iYWJseSBzdG9yaW5nIHBvc2l0aW9uLCB2ZWxvY2l0eSwgb3JpZW50YXRpb24sIGFuZCBvdGhlciByZWxldmFudCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgb2JqZWN0LiBJZiBtb3ZlbWVudCBpcyBjZW50cmFsIHRvIHRoaXMgc3lzdGVtLCBgc3RhX2luZm9fbW92ZV9zdGF0ZWAgd2lsbCB0ZWxsIHVzIGEgbG90IGFib3V0IHRoZSBvYmplY3TigJlzIGFjdGl2aXR5LlxuXG5TbywgbGV0J3MgZGl2ZSBpbiBhbmQgZGlzc2VjdCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGxvb2sgYXQgdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDI3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6MzMuNDQwOTY4NDg3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg3MDMzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFfaW5mb19tb3ZlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvY2ZnLmM9MjE0Nj1zdGF0aWMgaW50IHN0YV9hcHBseV9hdXRoX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTIxNTQtXFx0ICAgICF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVVUSCkpIHtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE1NTpcXHRcXHRyZXQgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BVVRIKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE1Ni1cXHRcXHRpZiAocmV0KVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTIxNzAtXFxubmV0L21hYzgwMjExL2NmZy5jOjIxNzE6XFx0XFx0cmV0ID0gc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVNTT0MpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTcyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE3Ny1cXHRcXHRpZiAoc2V0IFxcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRCkpXFxubmV0L21hYzgwMjExL2NmZy5jOjIxNzg6XFx0XFx0XFx0cmV0ID0gc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVVUSE9SSVpFRCk7XFxubmV0L21hYzgwMjExL2NmZy5jLTIxNzktXFx0XFx0ZWxzZSBpZiAodGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FVVEhPUklaRUQpKVxcbm5ldC9tYWM4MDIxMS9jZmcuYzoyMTgwOlxcdFxcdFxcdHJldCA9IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FTU09DKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE4MS1cXHRcXHRlbHNlXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE4OS1cXHQgICAgdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSkge1xcbm5ldC9tYWM4MDIxMS9jZmcuYzoyMTkwOlxcdFxcdHJldCA9IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FVVEgpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTkxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE5Ny1cXHQgICAgdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FVVEgpKSB7XFxubmV0L21hYzgwMjExL2NmZy5jOjIxOTg6XFx0XFx0cmV0ID0gc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfTk9ORSk7XFxubmV0L21hYzgwMjExL2NmZy5jLTIxOTktXFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9NDUwNj1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy00NjIzLVxcdFxcdC8qIE9ubHkgbW92ZSB0aGUgQVAgc3RhdGUgKi9cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjQ2MjQ6XFx0XFx0c3RhX2luZm9fbW92ZV9zdGF0ZShhcF9zdGEsIElFRUU4MDIxMV9TVEFfTk9ORSk7XFxubmV0L21hYzgwMjExL21sbWUuYy00NjI1LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jPTUzODY9c3RhdGljIGJvb2wgaWVlZTgwMjExX21hcmtfc3RhX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTU0MDUtXFx0fVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NTQwNjpcXHRpZiAoc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIElFRUU4MDIxMV9TVEFfQVVUSCkpIHtcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTU0MDctXFx0XFx0c2RhdGFfaW5mbyhzZGF0YSwgXFxcImZhaWxlZCBtb3ZpbmcgJXBNIHRvIGF1dGhcXFxcblxcXCIsIGFwX2FkZHIpO1xcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYz02OTc2PXN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy03MTQ4LVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NzE0OTpcXHRlcnIgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BU1NPQyk7XFxubmV0L21hYzgwMjExL21sbWUuYy03MTUwLVxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2ICEoaWZtZ2QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQpKVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NzE1MTpcXHRcXHRlcnIgPSBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BVVRIT1JJWkVEKTtcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxNTItXFx0aWYgKGVycikge1xcbi0tXFxubmV0L21hYzgwMjExL29jYi5jPTg3PXN0YXRpYyBzdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9vY2JfZmluaXNoX3N0YShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9vY2IuYy0xMDAtXFxubmV0L21hYzgwMjExL29jYi5jOjEwMTpcXHRzdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BVVRIKTtcXG5uZXQvbWFjODAyMTEvb2NiLmM6MTAyOlxcdHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FTU09DKTtcXG5uZXQvbWFjODAyMTEvb2NiLmM6MTAzOlxcdHN0YV9pbmZvX21vdmVfc3RhdGUoc3RhLCBJRUVFODAyMTFfU1RBX0FVVEhPUklaRUQpO1xcbm5ldC9tYWM4MDIxMS9vY2IuYy0xMDQtXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz00Njg9dm9pZCBzdGFfaW5mb19mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTQ5NC1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo0OTU6XFx0XFx0cmV0ID0gc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIHN0YS1cXHUwMDNlc3RhX3N0YXRlIC0gMSk7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NDk2OlxcdFxcdGlmIChXQVJOX09OQ0UocmV0LCBcXFwic3RhX2luZm9fbW92ZV9zdGF0ZSgpIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpKVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTQ5Ny1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTEzMTA9c3RhdGljIGludCBfX211c3RfY2hlY2sgX19zdGFfaW5mb19kZXN0cm95X3BhcnQxKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTM5NC1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxMzk1OnN0YXRpYyBpbnQgX3N0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTM5Ni1cXHRcXHRcXHRcXHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTUzNy1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTM4OmludCBzdGFfaW5mb19tb3ZlX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1MzktXFx0XFx0XFx0ZW51bSBpZWVlODAyMTFfc3RhX3N0YXRlIG5ld19zdGF0ZSlcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTQwLXtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTQxOlxcdHJldHVybiBfc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIG5ld19zdGF0ZSwgdHJ1ZSk7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTU0Mi19XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0xNTQ0PXN0YXRpYyB2b2lkIF9fc3RhX2luZm9fZGVzdHJveV9wYXJ0MihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgYm9vbCByZWNhbGMpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTczLVxcdGlmIChzdGEtXFx1MDAzZXN0YV9zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX0FVVEhPUklaRUQpIHtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTc0OlxcdFxcdHJldCA9IF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgSUVFRTgwMjExX1NUQV9BU1NPQywgcmVjYWxjKTtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNTc1LVxcdFxcdFdBUk5fT05fT05DRShyZXQpO1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTU4OS1cXHR3aGlsZSAoc3RhLVxcdTAwM2VzdGFfc3RhdGUgXFx1MDAzZSBJRUVFODAyMTFfU1RBX05PTkUpIHtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxNTkwOlxcdFxcdHJldCA9IF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0YSwgc3RhLVxcdTAwM2VzdGFfc3RhdGUgLSAxLCByZWNhbGMpO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE1OTEtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg9ODQxPXN0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9zdGFfZmxhZyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTg0OS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo4NTA6aW50IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtODUxLVxcdFxcdFxcdGVudW0gaWVlZTgwMjExX3N0YV9zdGF0ZSBuZXdfc3RhdGUpO1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg9ODUzPXN0YXRpYyBpbmxpbmUgdm9pZCBzdGFfaW5mb19wcmVfbW92ZV9zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTg1OS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo4NjA6XFx0cmV0ID0gc3RhX2luZm9fbW92ZV9zdGF0ZShzdGEsIG5ld19zdGF0ZSk7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtODYxLVxcdFdBUk5fT05fT05DRShyZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MTozMy40ODg4NDE4ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4OTc5ODQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIEF1ZGl0KipcblxuT2theSwgdGltZSB0byBnZXQgdG8gaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGluIHBsYWNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgSSBoYXZlIGJvdGggTUFDODAyMTEgYW5kIENGRzgwMjExIGVuYWJsZWQuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMsIGJ1dCBJJ20gbmV2ZXIgb25lIHRvIGFzc3VtZSwgc28gbGV0J3MgZGlnIGEgbGl0dGxlIGRlZXBlci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L21hYzgwMjExL01ha2VmaWxlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjcnVjaWFsIGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzMjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MTozNS4yNzg2NDM2MDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX01BQzgwMjExKSArPSBtYWM4MDIxMS5vXFxuICAgMzpcXHRcXG4gICA0OlxcdCMgbWFjODAyMTEgb2JqZWN0c1xcbiAgIDU6XFx0bWFjODAyMTEteSA6PSBcXFxcXFxuICAgNjpcXHRcXHRtYWluLm8gc3RhdHVzLm8gXFxcXFxcbiAgIDc6XFx0XFx0ZHJpdmVyLW9wcy5vIFxcXFxcXG4gICA4OlxcdFxcdHN0YV9pbmZvLm8gXFxcXFxcbiAgIDk6XFx0XFx0d2VwLm8gXFxcXFxcbiAgMTA6XFx0XFx0YWVhZF9hcGkubyBcXFxcXFxuICAxMTpcXHRcXHR3cGEubyBcXFxcXFxuICAxMjpcXHRcXHRzY2FuLm8gb2ZmY2hhbm5lbC5vIFxcXFxcXG4gIDEzOlxcdFxcdGh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXFxcXFxcbiAgMTQ6XFx0XFx0dmh0Lm8gXFxcXFxcbiAgMTU6XFx0XFx0aGUubyBcXFxcXFxuICAxNjpcXHRcXHRzMWcubyBcXFxcXFxuICAxNzpcXHRcXHRpYnNzLm8gXFxcXFxcbiAgMTg6XFx0XFx0aWZhY2UubyBcXFxcXFxuICAxOTpcXHRcXHRsaW5rLm8gXFxcXFxcbiAgMjA6XFx0XFx0cmF0ZS5vIFxcXFxcXG4gIDIxOlxcdFxcdHRraXAubyBcXFxcXFxuICAyMjpcXHRcXHRhZXNfY21hYy5vIFxcXFxcXG4gIDIzOlxcdFxcdGFlc19nbWFjLm8gXFxcXFxcbiAgMjQ6XFx0XFx0Zmlsc19hZWFkLm8gXFxcXFxcbiAgMjU6XFx0XFx0Y2ZnLm8gXFxcXFxcbiAgMjY6XFx0XFx0ZXRodG9vbC5vIFxcXFxcXG4gIDI3OlxcdFxcdHJ4Lm8gXFxcXFxcbiAgMjg6XFx0XFx0c3BlY3RtZ210Lm8gXFxcXFxcbiAgMjk6XFx0XFx0dHgubyBcXFxcXFxuICAzMDpcXHRcXHRrZXkubyBcXFxcXFxuICAzMTpcXHRcXHR1dGlsLm8gcGFyc2UubyBcXFxcXFxuICAzMjpcXHRcXHR3bWUubyBcXFxcXFxuICAzMzpcXHRcXHRjaGFuLm8gYXAubyBcXFxcXFxuICAzNDpcXHRcXHR0cmFjZS5vIG1sbWUubyBcXFxcXFxuICAzNTpcXHRcXHR0ZGxzLm8gXFxcXFxcbiAgMzY6XFx0XFx0b2NiLm8gXFxcXFxcbiAgMzc6XFx0XFx0YWlydGltZS5vIFxcXFxcXG4gIDM4OlxcdFxcdGVodC5vIHVoci5vIG5hbi5vXFxuICAzOTpcXHRcXG4gIDQwOlxcdG1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0xFRFMpICs9IGxlZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjM1LjI3ODcwNTg1OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDY4NDYyMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1BQzgwMjExIEtleSBNYW5hZ2VtZW50IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gZnV6emluZyB0aGUgTUFDODAyMTEgc3Vic3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgY2ZnLm9gLCBga2V5Lm9gLCBhbmQgYHN0YV9pbmZvLm9gIGFyZSBhbHdheXMgYnVpbHQgaW50byBgbWFjODAyMTEua29gIHdoZW4gYENPTkZJR19NQUM4MDIxMWAgaXMgZW5hYmxlZC4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfTUFDODAyMTFgIGhpbmdlcyBvbiBgQ09ORklHX0NGRzgwMjExYC4gV2UgdXN1YWxseSBleGVyY2lzZSB0aGlzIHdpdGggc29tZXRoaW5nIGxpa2UgdGhlIHZpcnR1YWwgcmFkaW8gdGhyb3VnaCBgQ09ORklHX01BQzgwMjExX0hXU0lNYCwgYnV0IHVsdGltYXRlbHksIGBNQUM4MDIxMWAgYW5kIGBDRkc4MDIxMWAgYXJlIHRoZSBrZXkgY29uZmlncyBoZXJlLlxuXG5Ob3csIGxldCdzIHplcm8gaW4gb24gdGhlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgb3IgaW50cm9kdWNlZCBhcmUgb24gbXkgcmFkYXIuIEJhc2VkIG9uIHRoaXMsIEkgc2VlOiBgaWVlZTgwMjExX2FkZF9rZXlgLCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AsIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAsIGFuZCBlaXRoZXIgYHN0YV9pbmZvX21vdmVfc3RhdGVgIG9yIGBfc3RhX2luZm9fbW92ZV9zdGF0ZWAuXG5cbkxldCBtZSBxdWlja2x5IHNjYW4gdGhlIGRpZmYgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZSBpbiB0ZXJtcyBvZiBtb2RpZmllZCBmdW5jdGlvbnMuIE9rYXksIHNvIGZyb20gdGhlIGRpZmYsIEkgaGF2ZSB0aGVzZSBmaWxlIG1vZGlmaWNhdGlvbnMgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zOlxuXG4xLiAgYG5ldC9tYWM4MDIxMS9jZmcuY2A6IGBpZWVlODAyMTFfYWRkX2tleWBcbjIuICBgbmV0L21hYzgwMjExL2tleS5jYDogYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCwgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXNgXG4zLiAgYG5ldC9tYWM4MDIxMS9rZXkuaGA6IERlY2xhcmF0aW9ucyAoaW1wb3J0YW50LCBuZWVkIHRvIHJldmlldyB0aGVzZSBmb3IgYWRkZWQgZGF0YSBzdHJ1Y3R1cmVzLCBldGMuIGFzIHdlbGwpXG40LiAgYG5ldC9tYWM4MDIxMS9zdGFfaW5mby5jYDogYF9zdGFfaW5mb19tb3ZlX3N0YXRlYCAod2hpY2ggaXMgaW52b2tlZCB2aWEgYHN0YV9pbmZvX21vdmVfc3RhdGVgKVxuXG5Hb29kLCBsb29rcyBsaWtlIHRoZSBkaWZmIGxpbmVzIHVwIHBlcmZlY3RseSB3aXRoIHdoYXQgSSBleHBlY3RlZCBmb3IgbXkgYEZvY3VzU3ltYm9sc2AuIExldCdzIGp1c3QgbWFrZSBzdXJlIHRob3NlIGFyZSBhbGwgZXhhY3Qga2VybmVsIGZ1bmN0aW9uIG5hbWVzLlxuXG5ZZXMsIGNvbmZpcm1lZDogYGllZWU4MDIxMV9hZGRfa2V5YCwgYGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXNgLCBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgLCBgX3N0YV9pbmZvX21vdmVfc3RhdGVgLCBhbmQgYHN0YV9pbmZvX21vdmVfc3RhdGVgLlxuXG5Ob3csIHRpbWUgdG8gdmVyaWZ5IGFnYWluc3QgdGhlIGluc3RydWN0aW9uczpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlLiBHaXZlbiB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRoZXNlIGtleSBtYW5hZ2VtZW50IHJvdXRpbmVzLCB0aGlzIGlzIGEgY2xlYXIgeWVzLlxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIk1BQzgwMjExXCIsIFwiQ0ZHODAyMTFcIl1gLiBNYWtlcyBwZXJmZWN0IHNlbnNlLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiaWVlZTgwMjExX2FkZF9rZXlcIiwgXCJpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzXCIsIFwiaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxcIiwgXCJfc3RhX2luZm9fbW92ZV9zdGF0ZVwiLCBcInN0YV9pbmZvX21vdmVfc3RhdGVcIl1gLiBDaGVja2xpc3QgY29tcGxldGUuXG4qICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHZlcmRpY3Q6IFRoaXMgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyBrZXkgbWFuYWdlbWVudCBhbmQgU1RBIHN0YXRlIHRyYW5zaXRpb25zIGluIE1BQzgwMjExLCBib3RoIG9mIHdoaWNoIGFyZSBjcml0aWNhbCBmb3Igd2lyZWxlc3Mgc2VjdXJpdHkgYW5kIHJlcHJlc2VudCBhcmVhcyB3aXRoIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MgZXhwbG9pdGFibGUgdGhyb3VnaCBjcmFmdGVkIG5ldHdvcmsgdHJhZmZpYy4gVGhlcmVmb3JlLCBpdCdzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5BbHJpZ2h0LCB0aGF0J3MgZXZlcnl0aGluZy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDQzLCJPdXRwdXRUb2tlbnMiOjIxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjQ0LjM0NzE3MTM3NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwODYwMzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfYWRkX2tleVwiLFxuICAgIFwiaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c1wiLFxuICAgIFwiaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxcIixcbiAgICBcIl9zdGFfaW5mb19tb3ZlX3N0YXRlXCIsXG4gICAgXCJzdGFfaW5mb19tb3ZlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWFjODAyMTEga2V5IGhhbmRsaW5nIGJ5IGFsbG93aW5nIHBhaXJ3aXNlIGtleSBpbnN0YWxsYXRpb24gaW4gQVAgbW9kZSBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uIGFuZCBkZWZlcnJpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHVwbG9hZCB1bnRpbCBhc3NvY2lhdGlvbiBjb21wbGV0ZXMuIEl0IGludHJvZHVjZXMgbmV3IGtleSBzdGF0ZSBmbGFncywgdXBkYXRlcyBrZXkgdXBsb2FkIGxvZ2ljLCBhbmQgYWRkcyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGluIHJlYWNoYWJsZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4gbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfYWRkX2tleVwiLFxuICAgIFwiaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c1wiLFxuICAgIFwiaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxcIixcbiAgICBcIl9zdGFfaW5mb19tb3ZlX3N0YXRlXCIsXG4gICAgXCJzdGFfaW5mb19tb3ZlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWFjODAyMTEga2V5IGhhbmRsaW5nIGJ5IGFsbG93aW5nIHBhaXJ3aXNlIGtleSBpbnN0YWxsYXRpb24gaW4gQVAgbW9kZSBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uIGFuZCBkZWZlcnJpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHVwbG9hZCB1bnRpbCBhc3NvY2lhdGlvbiBjb21wbGV0ZXMuIEl0IGludHJvZHVjZXMgbmV3IGtleSBzdGF0ZSBmbGFncywgdXBkYXRlcyBrZXkgdXBsb2FkIGxvZ2ljLCBhbmQgYWRkcyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGluIHJlYWNoYWJsZSB3aXJlbGVzcyBuZXR3b3JraW5nIGNvZGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKGUuZy4gbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6NDQuNDI4MDM5NTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzI0MzgzMTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6NDQuNDI4NDc1NThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTcyMzk0MzU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZWZlcnJlZCBoYXJkd2FyZSBrZXkgdXBsb2FkIGluIG1hYzgwMjExIGZvciBBUC1zaWRlIEZhc3QgVHJhbnNpdGlvbiAoRlQpIHdoZW4gcGFpcndpc2Uga2V5cyBhcmUgaW5zdGFsbGVkIHByaW9yIHRvIHN0YXRpb24gYXNzb2NpYXRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgaW50ZXJuYWwgZmxhZyAoS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSwgZGVmZXJzIHRoZSBkcml2ZXIgc2V0X2tleSBvcGVyYXRpb24gdW50aWwgdGhlIHN0YXRpb24gdHJhbnNpdGlvbnMgdG8gV0xBTl9TVEFfQVNTT0MsIGFuZCBhdHRlbXB0cyBoYXJkd2FyZSBrZXkgdXBsb2FkIGF0IHRoYXQgcG9pbnQuXFxuXFxuRXZhbHVhdGlvbiByZWdhcmRpbmcgS01TQU4gdnMgS0FTQU46XFxuLSBVbmluaXRpYWxpemVkIG1lbW9yeSAvIGluZm8tbGVha3MgKEtNU0FOKTogTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBsZWFrZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZGVmZXJfaHdfdXBsb2FkYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGtleSBzdHJ1Y3R1cmVzIG1hbmlwdWxhdGVkIGFyZSBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIG9iamVjdHMuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZS5cXG4tIEdlbmVyYWwgbWVtb3J5IC8gY29uY3VycmVuY3kgc2FmZXR5IChLQVNBTi9Mb2NrZGVwKTogQW55IGlzc3VlcyByZWxhdGluZyB0byBrZXkgcmVmZXJlbmNlIGxpZmV0aW1lcywgc3RhdGlvbiBzdGF0ZSB0cmFuc2l0aW9ucywgb3IgZHJpdmVyIGNvbmN1cnJlbmN5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMb2NrZGVwKS5cXG5cXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdG8ganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3NDZjMzBlMjcwNGQ1OWJhYTA3NWVlZjNlNTBhODk3NDU0YWQ1NjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAzOjUwOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jXG5pbmRleCAyM2Y0ZjllYzg2ZDBhLi5mZjk5M2E3YTllNDQxIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jXG4rKysgYi9uZXQvbWFjODAyMTEvY2ZnLmNcbkBAIC02NjYsNyArNjY2LDE1IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdFx0a2V5LVx1MDAzZWNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX05PX0FVVE9fVFg7XG4gXG4gXHRpZiAobWFjX2FkZHIpIHtcbitcdFx0Ym9vbCBkZWZlcl9od191cGxvYWQ7XG4rXG4gXHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1hY19hZGRyKTtcbitcdFx0ZGVmZXJfaHdfdXBsb2FkID1cbitcdFx0XHRzdGEgXHUwMDI2XHUwMDI2IHBhaXJ3aXNlIFx1MDAyNlx1MDAyNiAhc3RhLVx1MDAzZXN0YS5lcHBfcGVlciBcdTAwMjZcdTAwMjZcbitcdFx0XHQhdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX0FTU09DKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQoc2RhdGEtXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHxcbitcdFx0XHQgc2RhdGEtXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IWllZWU4MDIxMV9od19jaGVjayhcdTAwMjZsb2NhbC1cdTAwM2VodywgU1dfQ1JZUFRPX0NPTlRST0wpO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgQVNTT0MgdGVzdCBtYWtlcyBzdXJlIHRoZSBkcml2ZXIgaXMgcmVhZHkgdG9cbiBcdFx0ICogcmVjZWl2ZSB0aGUga2V5LiBXaGVuIHdwYV9zdXBwbGljYW50IGhhcyByb2FtZWRcbkBAIC02ODEsMTQgKzY4OSwyMiBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdCAqIElmIChyZSlhc3NvY2lhdGlvbiBmcmFtZSBlbmNyeXB0aW9uIHN1cHBvcnQgaXMgbm90IHByZXNlbnQsXG4gXHRcdCAqIGNmZzgwMjExIHdpbGwgbm90IGFsbG93IGtleSBpbnN0YWxsYXRpb24gaW4gbm9u4oCRQVAgU1RBIG1vZGUuXG4gXHRcdCAqXG4tXHRcdCAqIFRPRE86IGFjY2VwdCB0aGUga2V5IGlmIHdlIGhhdmUgYSBzdGF0aW9uIGVudHJ5IGFuZFxuLVx0XHQgKlx0IGFkZCBpdCB0byB0aGUgZGV2aWNlIGFmdGVyIHRoZSBzdGF0aW9uIGFzc29jaWF0ZXMuXG4rXHRcdCAqIEFQLXNpZGUgRlQgbWF5IGFsc28gaW5zdGFsbCBhIHBhaXJ3aXNlIGtleSBiZWZvcmUgdGhlXG4rXHRcdCAqIHN0YXRpb24gaXMgYXNzb2NpYXRlZC4gSWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXG4rXHRcdCAqIGFsbG93ZWQsIGtlZXAgaXQgaW4gbWFjODAyMTEgYW5kIHVwbG9hZCBpdCBhZnRlciB0aGUgc3RhdGlvblxuK1x0XHQgKiByZWFjaGVzIEFTU09DLiBEcml2ZXJzIHdpdGggU1dfQ1JZUFRPX0NPTlRST0wgY2Fubm90IHVzZSB0aGlzXG4rXHRcdCAqIHBhdGggc2luY2Ugb25seSB0aGVpciBzZXRfa2V5IHJldHVybiB2YWx1ZSBjYW4gcGVybWl0IHNvZnR3YXJlXG4rXHRcdCAqIGNyeXB0by5cbiBcdFx0ICovXG4gXHRcdGlmICghc3RhIHx8ICghc3RhLVx1MDAzZXN0YS5lcHBfcGVlciBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgICF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpKSkge1xuK1x0XHRcdCAgICAgIXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICAhZGVmZXJfaHdfdXBsb2FkKSkge1xuIFx0XHRcdGllZWU4MDIxMV9rZXlfZnJlZV91bnVzZWQoa2V5KTtcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdFx0fVxuK1xuK1x0XHRpZiAoZGVmZXJfaHdfdXBsb2FkKVxuK1x0XHRcdGtleS1cdTAwM2VmbGFncyB8PSBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ7XG4gXHR9XG4gXG4gXHRzd2l0Y2ggKHNkYXRhLVx1MDAzZXZpZi50eXBlKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jXG5pbmRleCBmNDVlNzkyYWJlZGU1Li43NzRhOTJiYTdiZDhjIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2tleS5jXG4rKysgYi9uZXQvbWFjODAyMTEva2V5LmNcbkBAIC0xNDQsNiArMTQ0LDE1IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAoa2V5LVx1MDAzZWZsYWdzIFx1MDAyNiBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpIHtcbitcdFx0LypcbitcdFx0ICogS2V5cyBhcmUgb25seSBkZWZlcnJlZCBpZiBhdXRvbWF0aWMgc29mdHdhcmUgZmFsbGJhY2sgaXNcbitcdFx0ICogYWxsb3dlZC4gTGVhdmUgcmV0IGFzIC1FT1BOT1RTVVBQIHNvIHRoZSBub3JtYWwgZmFsbGJhY2sgcGF0aFxuK1x0XHQgKiBpcyB1c2VkIHdpdGhvdXQgcHJldGVuZGluZyB0aGUgZHJpdmVyIHJldHVybmVkIDEuXG4rXHRcdCAqL1xuK1x0XHRnb3RvIG91dF91bnN1cHBvcnRlZDtcbitcdH1cbitcbiBcdGlmICgha2V5LVx1MDAzZWxvY2FsLVx1MDAzZW9wcy1cdTAwM2VzZXRfa2V5KVxuIFx0XHRnb3RvIG91dF91bnN1cHBvcnRlZDtcbiBcbkBAIC05OTcsNiArMTAwNiwyOCBAQCB2b2lkIGllZWU4MDIxMV9yZWVuYWJsZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIFx0fVxuIH1cbiBcbit2b2lkIGllZWU4MDIxMV91cGxvYWRfZGVmZXJyZWRfc3RhX2tleXMoc3RydWN0IHN0YV9pbmZvICpzdGEpXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEtXHUwMDNlbG9jYWw7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5O1xuK1x0aW50IGksIHJldDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X3dpcGh5KGxvY2FsLVx1MDAzZWh3LndpcGh5KTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc3RhLVx1MDAzZXB0ayk7IGkrKykge1xuK1x0XHRrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSwgc3RhLVx1MDAzZXB0a1tpXSk7XG4rXHRcdGlmICgha2V5IHx8ICEoa2V5LVx1MDAzZWZsYWdzIFx1MDAyNiBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRrZXktXHUwMDNlZmxhZ3MgXHUwMDI2PSB+S0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEO1xuK1x0XHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHNkYXRhX2VycihrZXktXHUwMDNlc2RhdGEsXG4rXHRcdFx0XHQgIFwiZmFpbGVkIHRvIGVuYWJsZSBkZWZlcnJlZCBrZXkgKCVkLCAlcE0pOiAlZFxcblwiLFxuK1x0XHRcdFx0ICBrZXktXHUwMDNlY29uZi5rZXlpZHgsIHN0YS1cdTAwM2VzdGEuYWRkciwgcmV0KTtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWRcbiBpZWVlODAyMTFfa2V5X2l0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5oIGIvbmV0L21hYzgwMjExL2tleS5oXG5pbmRleCA4MjZlNGU5Mzg3YzU1Li45N2QzYmJjZjBhYzIxIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2tleS5oXG4rKysgYi9uZXQvbWFjODAyMTEva2V5LmhcbkBAIC0zMiwxMCArMzIsMTMgQEAgc3RydWN0IHN0YV9pbmZvO1xuICAqIEBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTogSW5kaWNhdGVzIHRoYXQgdGhpcyBrZXkgaXMgcHJlc2VudFxuICAqXHRpbiB0aGUgaGFyZHdhcmUgZm9yIFRYIGNyeXB0byBoYXJkd2FyZSBhY2NlbGVyYXRpb24uXG4gICogQEtFWV9GTEFHX1RBSU5URUQ6IEtleSBpcyB0YWludGVkIGFuZCBwYWNrZXRzIHNob3VsZCBiZSBkcm9wcGVkLlxuKyAqIEBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQUQ6IEtleSB1cGxvYWQgaXMgZGVmZXJyZWQgdW50aWwgdGhlIHN0YXRpb25cbisgKlx0aXMgYXNzb2NpYXRlZC5cbiAgKi9cbiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF9rZXlfZmxhZ3Mge1xuIFx0S0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkVcdD0gQklUKDApLFxuIFx0S0VZX0ZMQUdfVEFJTlRFRFx0XHQ9IEJJVCgxKSxcbitcdEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRFx0PSBCSVQoMiksXG4gfTtcbiBcbiBlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF90a2lwX3N0YXRlIHtcbkBAIC0xNjUsNiArMTY4LDcgQEAgdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdCBib29sIGZvcmNlX3N5bmNocm9uaXplKTtcbiB2b2lkIGllZWU4MDIxMV9mcmVlX3N0YV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0XHRcdCAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuK3ZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7XG4gdm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG4gaW50IGllZWU4MDIxMV9rZXlfc3dpdGNoX2xpbmtzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGRlbF9saW5rc19tYXNrLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcbmluZGV4IGZkZjAwY2JmNDlkOGIuLjc1M2RjZGQ5MDcwMTEgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uY1xuKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmNcbkBAIC0xNDY4LDYgKzE0NjgsNyBAQCBzdGF0aWMgaW50IF9zdGFfaW5mb19tb3ZlX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuIFx0Y2FzZSBJRUVFODAyMTFfU1RBX0FTU09DOlxuIFx0XHRpZiAoc3RhLVx1MDAzZXN0YV9zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX0FVVEgpIHtcbiBcdFx0XHRzZXRfYml0KFdMQU5fU1RBX0FTU09DLCBcdTAwMjZzdGEtXHUwMDNlX2ZsYWdzKTtcbitcdFx0XHRpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0YSk7XG4gXHRcdFx0c3RhLVx1MDAzZWFzc29jX2F0ID0ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7XG4gXHRcdFx0aWYgKHJlY2FsYykge1xuIFx0XHRcdFx0aWVlZTgwMjExX3JlY2FsY19taW5fY2hhbmRlZihzdGEtXHUwMDNlc2RhdGEsIC0xKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjQ0LjQyODQ3ODkyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxMTkyNzcxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTUFDODAyMTEgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYXJlYXMgd2hlcmUgS01TQU4gZnV6emluZyBtaWdodCBiZSBiZW5lZmljaWFsLiBUaGlzIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgZmlsZXMgd2l0aGluIHRoZSBgbmV0L21hYzgwMjExYCBzdWJzeXN0ZW06IGBjZmcuY2AsIGBrZXkuY2AsIGBrZXkuaGAsIGFuZCBgc3RhX2luZm8uY2AuXG5cbkZpcnN0LCBJJ20gbm90aW5nIHRoZSBhZGRpdGlvbiBvZiBgYm9vbCBkZWZlcl9od191cGxvYWRgIHdpdGhpbiBgaWVlZTgwMjExX2FkZF9rZXlgIGluIGBjZmcuY2AuIFRoZSBsb2dpYyBmb3Igc2V0dGluZyB0aGlzIGZsYWcgbG9va3MgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRoZSBjb2RlIGRlZmVycyBoYXJkd2FyZSBrZXkgdXBsb2FkIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXM6IHdoZW4gYSBzdGF0aW9uIGV4aXN0cywgYSBwYWlyd2lzZSBrZXkgaXMgaW52b2x2ZWQsIGFuZCB0aGUgc3RhdGlvbiBpc24ndCBhbiBFUFAgcGVlciwgaXNuJ3QgYXNzb2NpYXRlZCwgYW5kIHRoZSBpbnRlcmZhY2UgdHlwZSBpcyBBUCBvciBBUF9WTEFOLCAqYW5kKiB0aGUgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IHNvZnR3YXJlIGNyeXB0byBjb250cm9sLiBUaGVuIEkgc2VlIHRoYXQgYGRlZmVyX2h3X3VwbG9hZGAgZmxhZyBpcyB1c2VkIGluIGEgc3Vic2VxdWVudCBjaGVjayB0aGF0IHdpbGwgZnJlZSBhIGtleSBpZiB0aGUgc3RhdGlvbiBjb25kaXRpb25zIGFyZW4ndCBtZXQsIG9yIGlmIGBkZWZlcl9od191cGxvYWRgIGlzIHNldCBhbmQgc2hvdWxkIGJlIGRlZmVycmVkLiBUaGlzIGlzIHdoZXJlIEknbGwgcGF5IGF0dGVudGlvbi5cblxuTmV4dCwgaW4gYGtleS5jYCwgdGhlIGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAgZnVuY3Rpb24gbm93IGNoZWNrcyBmb3IgdGhpcyBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYCBhbmQgaW1tZWRpYXRlbHkgZXhpdHMgaWYgc2V0LiBUaGUgbmV3IGZ1bmN0aW9uIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzYCBoYXMgYWxzbyBiZWVuIGFkZGVkLCB3aGljaCBpdGVyYXRlcyB0aHJvdWdoIGBzdGEtXHUwMDNlcHRrW2ldYCwgY2xlYXJzIGBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQURgLCBhbmQgY2FsbHMgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSlgLiBUaGUgYGtleS5oYCBmaWxlIHNpbXBseSBkZWZpbmVzIGBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQURgIGFuZCBkZWNsYXJlcyB0aGlzIG5ldyBmdW5jdGlvbi5cblxuRmluYWxseSwgYHN0YV9pbmZvLmNgIGNhbGxzIGBpZWVlODAyMTFfdXBsb2FkX2RlZmVycmVkX3N0YV9rZXlzKHN0YSlgIHdoZW4gYSBzdGF0aW9uIHRyYW5zaXRpb25zIGZyb20gQVVUSCB0byBBU1NPQyBzdGF0ZSB2aWEgYF9zdGFfaW5mb19tb3ZlX3N0YXRlYC4gVGhpcyBtZWFucyB0aGF0IGtleXMgYXJlIGRlZmVycmVkLCB1bnRpbCB0aGUgc3RhdGlvbiBtb3ZlcyB0byB0aGUgYXNzb2NpYXRlZCBzdGF0ZS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUsIGl0J3MgdGhlIGBzdGEtXHUwMDNlcHRrYCBhcnJheSB0aGF0IHJlcXVpcmVzIGEgY2xvc2VyIGxvb2suIFdoYXQgZGF0YSBpcyBzdG9yZWQgdGhlcmUsIGFuZCBob3cgaXMgaXQgaW5pdGlhbGl6ZWQ/IFNpbmNlIHdlJ3JlIGRlZmVycmluZyB0aGUgaGFyZHdhcmUgdXBsb2FkLCB3aGF0IHN0YXRlIGlzIHJldGFpbmVkIHdoaWxlIHRoZSBrZXkgaXMgZGVmZXJyZWQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIG1lbWJlcnMgb2YgYHN0YS1cdTAwM2VwdGtbXWAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdoZW4gdGhleSBhcmUgZXZlbnR1YWxseSB1cGxvYWRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxgIGRvZXMgdW5kZXIgdGhlIGhvb2QgdG8gY29tcGxldGVseSB1bmRlcnN0YW5kIHdoYXQgY291bGQgcG90ZW50aWFsbHkgYmUgbGVha2VkIGlmIHRoZSBpbml0aWFsIHZhbHVlcyBhcmUgbm90IHNldCBwcm9wZXJseS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHBhdGhzIHdoZXJlIGBzdGEtXHUwMDNlcHRrW2ldYCBpcyByZWFkIGJlZm9yZSBpdCdzIHdyaXR0ZW4gb3IgdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBrZXkgc3RydWN0dXJlIGlzIG5vdCBpbml0aWFsaXplZCBwcm9wZXJseS4gSWYgc28sIGEgS01TQU4gZnV6emVyIHdpbGwgYmUgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA0NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjUxLjU0Nzc1ODc4NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyMzY3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEva2V5LmM9MTA5PXN0YXRpYyB2b2lkIGRlY3JlYXNlX3RhaWxyb29tX25lZWRfY291bnQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtMTE5LVxcbm5ldC9tYWM4MDIxMS9rZXkuYzoxMjA6c3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMjEte1xcbi0tXFxubmV0L21hYzgwMjExL2tleS5jPTQ0OT1zdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy01MTktXFx0XFx0XFx0aWYgKG5ldylcXG5uZXQvbWFjODAyMTEva2V5LmM6NTIwOlxcdFxcdFxcdFxcdHJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKG5ldyk7XFxubmV0L21hYzgwMjExL2tleS5jLTUyMS1cXHRcXHR9XFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtNTIzLVxcdFxcdGlmICghbmV3LVxcdTAwM2Vsb2NhbC1cXHUwMDNld293bGFuKSB7XFxubmV0L21hYzgwMjExL2tleS5jOjUyNDpcXHRcXHRcXHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChuZXcpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy01MjUtXFx0XFx0fSBlbHNlIGlmIChsaW5rX2lkIFxcdTAwM2MgMCB8fCAhc2RhdGEtXFx1MDAzZXZpZi5hY3RpdmVfbGlua3MgfHxcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYz05ODM9dm9pZCBpZWVlODAyMTFfcmVlbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDAzLVxcdFxcdFxcdFxcdGluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTtcXG5uZXQvbWFjODAyMTEva2V5LmM6MTAwNDpcXHRcXHRcXHRpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDA1LVxcdFxcdH1cXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYz0xMDA5PXZvaWQgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5cyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDIyLVxcdFxcdGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfktFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRDtcXG5uZXQvbWFjODAyMTEva2V5LmM6MTAyMzpcXHRcXHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy0xMDI0LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmM9MTUxNz1pbnQgaWVlZTgwMjExX2tleV9zd2l0Y2hfbGlua3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmMtMTU0Mi1cXG5uZXQvbWFjODAyMTEva2V5LmM6MTU0MzpcXHRcXHRyZXQgPSBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpO1xcbm5ldC9tYWM4MDIxMS9rZXkuYy0xNTQ0LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUxOjUxLjU5ODk5Nzc2MloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDU3NDMyMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyB0aGUgZmlyc3QgcGVyc29uIGFuZCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6XG5cbioqTXkgRGVlcCBEaXZlIGludG8gS2V5IEFjY2VsZXJhdGlvbiBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgaW50byB0aGUgd2VlZHMgb24gdGhlc2UgY2hhbmdlcy4gVGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMgZm9jdXNlcyBvbiBob3cgd2UncmUgaGFuZGxpbmcga2V5IGFjY2VsZXJhdGlvbiB3aXRoaW4gdGhlIDgwMi4xMSBzdGFjay4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGZvY3VzIG9uIHR3byBmdW5jdGlvbnM6IGBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbGAgYW5kIGBpZWVlODAyMTFfYWRkX2tleWAuIFRoZXNlIGFyZSBhYnNvbHV0ZWx5ICpjcml0aWNhbCogdG91Y2hwb2ludHMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucywgYW5kICplc3BlY2lhbGx5KiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIHR3bywgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgSSBhbnRpY2lwYXRlIHRoZSBjb3JlIGNoYW5nZXMgYW5kIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpbGwgcmVzaWRlLiBJdCdzIGltcGVyYXRpdmUgdGhhdCB0aGUgYWRkZWQgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGRvZXNuJ3QgYnJlYWsgZXN0YWJsaXNoZWQga2V5IG1hbmFnZW1lbnQgb3IgY3JlYXRlIHNlY3VyaXR5IGZsYXdzLiBJJ20gdGhpbmtpbmcgYWJvdXQgcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3Qga2V5IGhhbmRsaW5nIGR1cmluZyB0cmFuc2l0aW9ucywgYW5kIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIHRoYXQgbWlnaHQgYXJpc2UgZnJvbSBhZGRpbmcgdGhpcyBsYXllciBvZiBjb21wbGV4aXR5LiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGFuZCBob3cgdGhleSd2ZSBiZWVuIG1vZGlmaWVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGxvZ2ljIOKAkyBpcyBpdCBhbiBpbnNlcnRpb24sIGEgcmVwbGFjZW1lbnQsIG9yIGEgbW9yZSBhcmNoaXRlY3R1cmFsIGNoYW5nZT9cblxuTXkgc2Vjb25kYXJ5IGNvbnNpZGVyYXRpb24gY29uY2VybnMgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCBob3cgZG8gdGhlIGV4aXN0aW5nIGtleXMgZ2V0IHBhc3NlZCBhbmQgaG93IHdpbGwgaGFyZHdhcmUga2V5cyBkaWZmZXI/IEFyZSB3ZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUga2V5IElEcyBub3c/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGtleSBsaWZldGltZSBtYW5hZ2VtZW50IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGV4aXN0aW5nIGtleSBjYWNoZT8gQXJlIHRoZXJlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zPyBIb3cgd2lsbCB0aGlzIGltcGFjdCB0aGUgZHJpdmVyP1xuXG5cbiIsIklucHV0VG9rZW5zIjo2MjY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6NTQuNjU2NDM0MDc2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEva2V5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSlcXG4gMTIxOlxcdHtcXG4gMTIyOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0ga2V5LVxcdTAwM2VzZGF0YTtcXG4gMTIzOlxcdFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbiAxMjQ6XFx0XFx0aW50IHJldCA9IC1FT1BOT1RTVVBQO1xcbiAxMjU6XFx0XFxuIDEyNjpcXHRcXHRtaWdodF9zbGVlcCgpO1xcbiAxMjc6XFx0XFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoa2V5LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHkpO1xcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHRpZiAoa2V5LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtFWV9GTEFHX1RBSU5URUQpIHtcXG4gMTMwOlxcdFxcdFxcdC8qIElmIHdlIGdldCBoZXJlLCBpdCdzIGR1cmluZyByZXN1bWUgYW5kIHRoZSBrZXkgaXNcXG4gMTMxOlxcdFxcdFxcdCAqIHRhaW50ZWQgc28gc2hvdWxkbid0IGJlIHVzZWQvcHJvZ3JhbW1lZCBhbnkgbW9yZS5cXG4gMTMyOlxcdFxcdFxcdCAqIEhvd2V2ZXIsIGl0cyBmbGFncyBtYXkgc3RpbGwgaW5kaWNhdGUgdGhhdCBpdCB3YXNcXG4gMTMzOlxcdFxcdFxcdCAqIHByb2dyYW1tZWQgaW50byB0aGUgZGV2aWNlIChzaW5jZSB3ZSdyZSBpbiByZXN1bWUpXFxuIDEzNDpcXHRcXHRcXHQgKiBzbyBjbGVhciB0aGF0IGZsYWcgbm93IHRvIGF2b2lkIHRyeWluZyB0byByZW1vdmVcXG4gMTM1OlxcdFxcdFxcdCAqIGl0IGFnYWluIGxhdGVyLlxcbiAxMzY6XFx0XFx0XFx0ICovXFxuIDEzNzpcXHRcXHRcXHRpZiAoa2V5LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFIFxcdTAwMjZcXHUwMDI2XFxuIDEzODpcXHRcXHRcXHQgICAgIShrZXktXFx1MDAzZWNvbmYuZmxhZ3MgXFx1MDAyNiAoSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMgfFxcbiAxMzk6XFx0XFx0XFx0XFx0XFx0XFx0IElFRUU4MDIxMV9LRVlfRkxBR19QVVRfTUlDX1NQQUNFIHxcXG4gMTQwOlxcdFxcdFxcdFxcdFxcdFxcdCBJRUVFODAyMTFfS0VZX0ZMQUdfUkVTRVJWRV9UQUlMUk9PTSkpKVxcbiAxNDE6XFx0XFx0XFx0XFx0aW5jcmVtZW50X3RhaWxyb29tX25lZWRfY291bnQoc2RhdGEpO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRcXHRrZXktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5LRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTtcXG4gMTQ0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxNDU6XFx0XFx0fVxcbiAxNDY6XFx0XFxuIDE0NzpcXHRcXHRpZiAoa2V5LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCkge1xcbiAxNDg6XFx0XFx0XFx0LypcXG4gMTQ5OlxcdFxcdFxcdCAqIEtleXMgYXJlIG9ubHkgZGVmZXJyZWQgaWYgYXV0b21hdGljIHNvZnR3YXJlIGZhbGxiYWNrIGlzXFxuIDE1MDpcXHRcXHRcXHQgKiBhbGxvd2VkLiBMZWF2ZSByZXQgYXMgLUVPUE5PVFNVUFAgc28gdGhlIG5vcm1hbCBmYWxsYmFjayBwYXRoXFxuIDE1MTpcXHRcXHRcXHQgKiBpcyB1c2VkIHdpdGhvdXQgcHJldGVuZGluZyB0aGUgZHJpdmVyIHJldHVybmVkIDEuXFxuIDE1MjpcXHRcXHRcXHQgKi9cXG4gMTUzOlxcdFxcdFxcdGdvdG8gb3V0X3Vuc3VwcG9ydGVkO1xcbiAxNTQ6XFx0XFx0fVxcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHRpZiAoIWtleS1cXHUwMDNlbG9jYWwtXFx1MDAzZW9wcy1cXHUwMDNlc2V0X2tleSlcXG4gMTU3OlxcdFxcdFxcdGdvdG8gb3V0X3Vuc3VwcG9ydGVkO1xcbiAxNTg6XFx0XFxuIDE1OTpcXHRcXHRzdGEgPSBrZXktXFx1MDAzZXN0YTtcXG4gMTYwOlxcdFxcbiAxNjE6XFx0XFx0LypcXG4gMTYyOlxcdFxcdCAqIEFsbG93IGluc3RhbGxhdGlvbiBvZiBhIHBlci1TVEEgR1RLIGlmIHBlci1TVEEgR1RLIGlzIHN1cHBvcnRlZFxcbiAxNjM6XFx0XFx0ICogYnkgdGhlIGRyaXZlciBvciB0aGUgaW50ZXJmYWNlIGlzIGEgTkFOIERhdGEgaW50ZXJmYWNlIChhc1xcbiAxNjQ6XFx0XFx0ICogcGVyLXN0YXRpb24gR1RLcyBhcmUgcmVxdWlyZWQgdG8gYmUgc3VwcG9ydGVkIGlmIHNlY3VyZSBOQU4gaXNcXG4gMTY1OlxcdFxcdCAqIHN1cHBvcnRlZCkuXFxuIDE2NjpcXHRcXHQgKi9cXG4gMTY3OlxcdFxcdGlmIChzdGEgXFx1MDAyNlxcdTAwMjYgIShrZXktXFx1MDAzZWNvbmYuZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpIFxcdTAwMjZcXHUwMDI2XFxuIDE2ODpcXHRcXHQgICAgIShpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNmtleS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LCBTVVBQT1JUU19QRVJfU1RBX0dUSykgfHxcXG4gMTY5OlxcdFxcdCAgICAgIHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkpXFxuIDE3MDpcXHRcXHRcXHRnb3RvIG91dF91bnN1cHBvcnRlZDtcXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0aWYgKHN0YSBcXHUwMDI2XFx1MDAyNiAhc3RhLVxcdTAwM2V1cGxvYWRlZClcXG4gMTczOlxcdFxcdFxcdGdvdG8gb3V0X3Vuc3VwcG9ydGVkO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHRpZiAoc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIHtcXG4gMTc2OlxcdFxcdFxcdC8qXFxuIDE3NzpcXHRcXHRcXHQgKiBUaGUgZHJpdmVyIGRvZXNuJ3Qga25vdyBhbnl0aGluZyBhYm91dCBWTEFOIGludGVyZmFjZXMuXFxuIDE3ODpcXHRcXHRcXHQgKiBIZW5jZSwgZG9uJ3Qgc2VuZCBHVEtzIGZvciBWTEFOIGludGVyZmFjZXMgdG8gdGhlIGRyaXZlci5cXG4gMTc5OlxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzo1MTo1NC42NTY2MDQ0MDdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NDA3NTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtleSBBZGRpdGlvbiBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBrZXlzIGFyZSBhZGRlZCBpbiB0aGUgYG1hYzgwMjExYCBzdWJzeXN0ZW0sIHNvIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYG5ldC9tYWM4MDIxMS9jZmcuY2AuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBgaWVlZTgwMjExX2FkZF9rZXlgIGZ1bmN0aW9uLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGtleSBtYW5hZ2VtZW50IHByb2Nlc3MuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZGlzc2VjdCB0aGUgY29kZSBhcm91bmQgdGhhdCBmdW5jdGlvbiB0byBzZWUgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGtleSB0eXBlcywgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG92ZXJhbGwgZmxvdyBvZiBhZGRpbmcgYSBuZXcga2V5LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHBvdGVudGlhbCBpc3N1ZSBJJ20gY2hhc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcwNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6NTYuNzMwNjgyNjA4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Njg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvY2ZnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYwOlxcdFxcdFxcdGtleS1cXHUwMDNlY29uZi5saW5rX2lkID0gLTE7XFxuIDY2MTpcXHRcXHR9IGVsc2Uge1xcbiA2NjI6XFx0XFx0XFx0a2V5LVxcdTAwM2Vjb25mLmxpbmtfaWQgPSBsaW5rLVxcdTAwM2VsaW5rX2lkO1xcbiA2NjM6XFx0XFx0fVxcbiA2NjQ6XFx0XFxuIDY2NTpcXHRcXHRpZiAocGFyYW1zLVxcdTAwM2Vtb2RlID09IE5MODAyMTFfS0VZX05PX1RYKVxcbiA2NjY6XFx0XFx0XFx0a2V5LVxcdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYO1xcbiA2Njc6XFx0XFxuIDY2ODpcXHRcXHRpZiAobWFjX2FkZHIpIHtcXG4gNjY5OlxcdFxcdFxcdGJvb2wgZGVmZXJfaHdfdXBsb2FkO1xcbiA2NzA6XFx0XFxuIDY3MTpcXHRcXHRcXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7XFxuIDY3MjpcXHRcXHRcXHRkZWZlcl9od191cGxvYWQgPVxcbiA2NzM6XFx0XFx0XFx0XFx0c3RhIFxcdTAwMjZcXHUwMDI2IHBhaXJ3aXNlIFxcdTAwMjZcXHUwMDI2ICFzdGEtXFx1MDAzZXN0YS5lcHBfcGVlciBcXHUwMDI2XFx1MDAyNlxcbiA2NzQ6XFx0XFx0XFx0XFx0IXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9BU1NPQykgXFx1MDAyNlxcdTAwMjZcXG4gNjc1OlxcdFxcdFxcdFxcdChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHxcXG4gNjc2OlxcdFxcdFxcdFxcdCBzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikgXFx1MDAyNlxcdTAwMjZcXG4gNjc3OlxcdFxcdFxcdFxcdCFpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VodywgU1dfQ1JZUFRPX0NPTlRST0wpO1xcbiA2Nzg6XFx0XFx0XFx0LypcXG4gNjc5OlxcdFxcdFxcdCAqIFRoZSBBU1NPQyB0ZXN0IG1ha2VzIHN1cmUgdGhlIGRyaXZlciBpcyByZWFkeSB0b1xcbiA2ODA6XFx0XFx0XFx0ICogcmVjZWl2ZSB0aGUga2V5LiBXaGVuIHdwYV9zdXBwbGljYW50IGhhcyByb2FtZWRcXG4gNjgxOlxcdFxcdFxcdCAqIHVzaW5nIEZULCBpdCBhdHRlbXB0cyB0byBzZXQgdGhlIGtleSBiZWZvcmVcXG4gNjgyOlxcdFxcdFxcdCAqIGFzc29jaWF0aW9uIGhhcyBjb21wbGV0ZWQsIHRoaXMgcmVqZWN0cyB0aGF0IGF0dGVtcHRcXG4gNjgzOlxcdFxcdFxcdCAqIHNvIGl0IHdpbGwgc2V0IHRoZSBrZXkgYWdhaW4gYWZ0ZXIgYXNzb2NpYXRpb24uXFxuIDY4NDpcXHRcXHRcXHQgKlxcbiA2ODU6XFx0XFx0XFx0ICogV2l0aCAocmUpYXNzb2NpYXRpb24gZnJhbWUgZW5jcnlwdGlvbiBlbmFibGVkLCBjZmc4MDIxMVxcbiA2ODY6XFx0XFx0XFx0ICogbWF5IGRlbGl2ZXIga2V5cyB0byBtYWM4MDIxMSBiZWZvcmUgdGhlIHN0YXRpb24gaGFzXFxuIDY4NzpcXHRcXHRcXHQgKiBhc3NvY2lhdGVkLiBJbiB0aGF0IGNhc2UsIGFjY2VwdCB0aGUga2V5IGlmIHRoZSBzdGF0aW9uXFxuIDY4ODpcXHRcXHRcXHQgKiBpcyBhbiBFbmhhbmNlZCBQcml2YWN5IFByb3RlY3Rpb24gKEVQUCkgcGVlci5cXG4gNjg5OlxcdFxcdFxcdCAqIElmIChyZSlhc3NvY2lhdGlvbiBmcmFtZSBlbmNyeXB0aW9uIHN1cHBvcnQgaXMgbm90IHByZXNlbnQsXFxuIDY5MDpcXHRcXHRcXHQgKiBjZmc4MDIxMSB3aWxsIG5vdCBhbGxvdyBrZXkgaW5zdGFsbGF0aW9uIGluIG5vbuKAkUFQIFNUQSBtb2RlLlxcbiA2OTE6XFx0XFx0XFx0ICpcXG4gNjkyOlxcdFxcdFxcdCAqIEFQLXNpZGUgRlQgbWF5IGFsc28gaW5zdGFsbCBhIHBhaXJ3aXNlIGtleSBiZWZvcmUgdGhlXFxuIDY5MzpcXHRcXHRcXHQgKiBzdGF0aW9uIGlzIGFzc29jaWF0ZWQuIElmIGF1dG9tYXRpYyBzb2Z0d2FyZSBmYWxsYmFjayBpc1xcbiA2OTQ6XFx0XFx0XFx0ICogYWxsb3dlZCwga2VlcCBpdCBpbiBtYWM4MDIxMSBhbmQgdXBsb2FkIGl0IGFmdGVyIHRoZSBzdGF0aW9uXFxuIDY5NTpcXHRcXHRcXHQgKiByZWFjaGVzIEFTU09DLiBEcml2ZXJzIHdpdGggU1dfQ1JZUFRPX0NPTlRST0wgY2Fubm90IHVzZSB0aGlzXFxuIDY5NjpcXHRcXHRcXHQgKiBwYXRoIHNpbmNlIG9ubHkgdGhlaXIgc2V0X2tleSByZXR1cm4gdmFsdWUgY2FuIHBlcm1pdCBzb2Z0d2FyZVxcbiA2OTc6XFx0XFx0XFx0ICogY3J5cHRvLlxcbiA2OTg6XFx0XFx0XFx0ICovXFxuIDY5OTpcXHRcXHRcXHRpZiAoIXN0YSB8fCAoIXN0YS1cXHUwMDNlc3RhLmVwcF9wZWVyIFxcdTAwMjZcXHUwMDI2XFxuIDcwMDpcXHRcXHRcXHRcXHQgICAgICF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpIFxcdTAwMjZcXHUwMDI2XFxuIDcwMTpcXHRcXHRcXHRcXHQgICAgICFkZWZlcl9od191cGxvYWQpKSB7XFxuIDcwMjpcXHRcXHRcXHRcXHRpZWVlODAyMTFfa2V5X2ZyZWVfdW51c2VkKGtleSk7XFxuIDcwMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gNzA0OlxcdFxcdFxcdH1cXG4gNzA1OlxcdFxcbiA3MDY6XFx0XFx0XFx0aWYgKGRlZmVyX2h3X3VwbG9hZClcXG4gNzA3OlxcdFxcdFxcdFxcdGtleS1cXHUwMDNlZmxhZ3MgfD0gS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEO1xcbiA3MDg6XFx0XFx0fVxcbiA3MDk6XFx0XFxuIDcxMDpcXHRcXHRzd2l0Y2ggKHNkYXRhLVxcdTAwM2V2aWYudHlwZSkge1xcbiA3MTE6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOlxcbiA3MTI6XFx0XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V1Lm1nZC5tZnAgIT0gSUVFRTgwMjExX01GUF9ESVNBQkxFRClcXG4gNzEzOlxcdFxcdFxcdFxcdGtleS1cXHUwMDNlY29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfUlhfTUdNVDtcXG4gNzE0OlxcdFxcdFxcdGJyZWFrO1xcbiA3MTU6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcXG4gNzE2OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjpcXG4gNzE3OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOOlxcbiA3MTg6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQTpcXG4gNzE5OlxcdFxcdFxcdC8qIEtleXMgd2l0aG91dCBhIHN0YXRpb24gYXJlIHVzZWQgZm9yIFRYIG9ubHkgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6NTE6NTYuNzMxMDMwNzE4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0MjEzNjEwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIG1hYzgwMjExIEFQLXNpZGUgRmFzdCBUcmFuc2l0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoaXMgcGF0Y2ggaXMgb3B0aW1pemluZyB0aGUgRmFzdCBUcmFuc2l0aW9uIChGVCkgcHJvY2VzcyBvbiB0aGUgQVAgc2lkZSBpbiBgbWFjODAyMTFgLiBUaGUgY29yZSBjaGFuZ2UgY2VudGVycyBhcm91bmQgcGFpcndpc2Uga2V5IGluc3RhbGxhdGlvbi4gQmVmb3JlLCB0aGUgc3lzdGVtIHdvdWxkIHJlamVjdCBrZXkgaW5zdGFsbGF0aW9uIGlmIHRoZSBTdGF0aW9uIChTVEEpIHdhc24ndCB5ZXQgYXNzb2NpYXRlZC4gTm93LCB0aGUgcGF0Y2ggYWNjZXB0cyB0aGUga2V5IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyAocGFpcndpc2Uga2V5LCBBUCBvciBBUF9WTEFOIHZpcnR1YWwgaW50ZXJmYWNlIHR5cGUsIG5vdCB1c2luZyBzb2Z0d2FyZSBjcnlwdG8gY29udHJvbCkgYW5kIHRhZ3MgaXQgd2l0aCBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYC4gVGhpcyBiYXNpY2FsbHkgdGVsbHMgdGhlIHN5c3RlbSB0byAqZGVsYXkqIGVuYWJsaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgdGhlIGtleS5cblxuVGhlIHVwbG9hZCB0byBoYXJkd2FyZSBpcyBza2lwcGVkIGluaXRpYWxseSwgZmFsbGluZyBiYWNrIHRvIHNvZnR3YXJlIGNyeXB0by4gVGhlICpyZWFsKiBhY3Rpb24gaGFwcGVucyB3aGVuIHRoZSBTVEEgZmluYWxseSBhc3NvY2lhdGVzLCBtb3ZpbmcgdG8gYElFRUU4MDIxMV9TVEFfQVNTT0NgLiBBdCB0aGF0IHBvaW50LCBgaWVlZTgwMjExX3VwbG9hZF9kZWZlcnJlZF9zdGFfa2V5c2AgaXMgY2FsbGVkLCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgU1RBJ3MgcGFpcndpc2UgdHJhbnNpZW50IGtleSAoUFRLKSwgY2xlYXJzIGBLRVlfRkxBR19ERUZFUlJFRF9IV19VUExPQURgLCBhbmQgY2FsbHMgYGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsYCB0byBhY3R1YWxseSB1cGxvYWQgdGhlIGtleSB0byBoYXJkd2FyZS5cblxuTm93LCBmb3IgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXM/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuRmlyc3QsIGlzIGFueXRoaW5nIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8uIFRoaXMgaXMgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCwgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBoYXJkd2FyZSBkcml2ZXIgdmlhIGBzZXRfa2V5YC4gU2Vjb25kLCBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWM/IE5vLCB0aGUgdmFyaWFibGUgYGRlZmVyX2h3X3VwbG9hZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZDogYGRlZmVyX2h3X3VwbG9hZCA9IHN0YSBcdTAwMjZcdTAwMjYgcGFpcndpc2UgXHUwMDI2XHUwMDI2IC4uLjtgLiBBbHNvLCBhbGwgYGtleWAgZmllbGRzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jYCBvciBgaWVlZTgwMjExX2tleV9hbGxvY2AuIFRoaXJkLCBhcmUgdGhlcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm8sIHRoZXJlIGlzIG9ubHkgYW4gYWRkZWQgZmxhZyBgS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEYCB3aXRoaW4gdGhlIGBrZXktXHUwMDNlZmxhZ3NgLCB3aGljaCBpcyBpbml0aWFsaXplZC4gRm91cnRoLCBhcmUgdGhlcmUgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGFjY2VzcyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoaXMgc2VlbXMgdmVyeSBzdHJhaWdodGZvcndhcmQuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSAqYW55KiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHJpc2sgb3IgaW5mbyBsZWFrLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgc3RhbmRhcmQga2VybmVsIGlzc3VlcywgbGlrZSB1c2UtYWZ0ZXItZnJlZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nLCBzdGF0ZSBzeW5jaHJvbml6YXRpb24sIG9yIGRyaXZlciBjYWxsYmFjayBmYWlsdXJlcy4gSG93ZXZlciwgdGhvc2UgYXJlIGhhbmRsZWQgYnkgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBoZXJlLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXM6IGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIHBhdGNoIGRlZmVycyBoYXJkd2FyZSBrZXkgdXBsb2FkIGZvciBBUC1zaWRlIEZUIHBhaXJ3aXNlIGtleXMgdW50aWwgc3RhdGlvbiBhc3NvY2lhdGlvbi4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgYnVmZmVycyBleHBvc2VkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBgZGVmZXJfaHdfdXBsb2FkYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbHNvLCBubyBwYWRkaW5nIGxlYWtzIG9yIGJvdW5kcyBjYWxjdWxhdGlvbiBjaGFuZ2VzIG9uIHJhdyBtZW1vcnkgYnVmZmVycy4gS0FTQU4vTG9ja2RlcCB3aWxsIGhhbmRsZSBhbnkgc3RhdGUgbWFjaGluZSB0cmFuc2l0aW9ucywga2V5IHBvaW50ZXIgbGlmZWN5Y2xlL2xpZmV0aW1lLCBvciBkcml2ZXIgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDQzLCJPdXRwdXRUb2tlbnMiOjIzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjUyOjA0LjE1MjM5NDcxNloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZWZlcnJlZCBoYXJkd2FyZSBrZXkgdXBsb2FkIGluIG1hYzgwMjExIGZvciBBUC1zaWRlIEZhc3QgVHJhbnNpdGlvbiAoRlQpIHdoZW4gcGFpcndpc2Uga2V5cyBhcmUgaW5zdGFsbGVkIHByaW9yIHRvIHN0YXRpb24gYXNzb2NpYXRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgaW50ZXJuYWwgZmxhZyAoS0VZX0ZMQUdfREVGRVJSRURfSFdfVVBMT0FEKSwgZGVmZXJzIHRoZSBkcml2ZXIgc2V0X2tleSBvcGVyYXRpb24gdW50aWwgdGhlIHN0YXRpb24gdHJhbnNpdGlvbnMgdG8gV0xBTl9TVEFfQVNTT0MsIGFuZCBhdHRlbXB0cyBoYXJkd2FyZSBrZXkgdXBsb2FkIGF0IHRoYXQgcG9pbnQuXFxuXFxuRXZhbHVhdGlvbiByZWdhcmRpbmcgS01TQU4gdnMgS0FTQU46XFxuLSBVbmluaXRpYWxpemVkIG1lbW9yeSAvIGluZm8tbGVha3MgKEtNU0FOKTogTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBsZWFrZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZGVmZXJfaHdfdXBsb2FkYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGtleSBzdHJ1Y3R1cmVzIG1hbmlwdWxhdGVkIGFyZSBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIG9iamVjdHMuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZS5cXG4tIEdlbmVyYWwgbWVtb3J5IC8gY29uY3VycmVuY3kgc2FmZXR5IChLQVNBTi9Mb2NrZGVwKTogQW55IGlzc3VlcyByZWxhdGluZyB0byBrZXkgcmVmZXJlbmNlIGxpZmV0aW1lcywgc3RhdGlvbiBzdGF0ZSB0cmFuc2l0aW9ucywgb3IgZHJpdmVyIGNvbmN1cnJlbmN5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMb2NrZGVwKS5cXG5cXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdG8ganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgZGVmZXJyZWQgaGFyZHdhcmUga2V5IHVwbG9hZCBpbiBtYWM4MDIxMSBmb3IgQVAtc2lkZSBGYXN0IFRyYW5zaXRpb24gKEZUKSB3aGVuIHBhaXJ3aXNlIGtleXMgYXJlIGluc3RhbGxlZCBwcmlvciB0byBzdGF0aW9uIGFzc29jaWF0aW9uLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIGZsYWcgKEtFWV9GTEFHX0RFRkVSUkVEX0hXX1VQTE9BRCksIGRlZmVycyB0aGUgZHJpdmVyIHNldF9rZXkgb3BlcmF0aW9uIHVudGlsIHRoZSBzdGF0aW9uIHRyYW5zaXRpb25zIHRvIFdMQU5fU1RBX0FTU09DLCBhbmQgYXR0ZW1wdHMgaGFyZHdhcmUga2V5IHVwbG9hZCBhdCB0aGF0IHBvaW50LlxcblxcbkV2YWx1YXRpb24gcmVnYXJkaW5nIEtNU0FOIHZzIEtBU0FOOlxcbi0gVW5pbml0aWFsaXplZCBtZW1vcnkgLyBpbmZvLWxlYWtzIChLTVNBTik6IE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkLiBUaGUgbG9jYWwgdmFyaWFibGUgYGRlZmVyX2h3X3VwbG9hZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoZSBrZXkgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCBhcmUgZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBvYmplY3RzLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UuXFxuLSBHZW5lcmFsIG1lbW9yeSAvIGNvbmN1cnJlbmN5IHNhZmV0eSAoS0FTQU4vTG9ja2RlcCk6IEFueSBpc3N1ZXMgcmVsYXRpbmcgdG8ga2V5IHJlZmVyZW5jZSBsaWZldGltZXMsIHN0YXRpb24gc3RhdGUgdHJhbnNpdGlvbnMsIG9yIGRyaXZlciBjb25jdXJyZW5jeSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTG9ja2RlcCkuXFxuXFxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRvIGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowhbl7c[1] Phase: Succeeded StartedAt: 2026-09-06 03:52:14 +0000 UTC FinishedAt: 2026-09-06 03:52:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 03:52:14 +0000 UTC FinishedAt: 2026-09-06 03:52:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2] Phase: Succeeded StartedAt: 2026-09-06 03:52:14 +0000 UTC FinishedAt: 2026-09-06 06:52:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-06 03:52:15 +0000 UTC FinishedAt: 2026-09-06 06:52:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 03:52:15 +0000 UTC FinishedAt: 2026-09-06 03:52:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 03:52:15 +0000 UTC FinishedAt: 2026-09-06 03:52:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-convert-artifact-2889947627/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 03:52:25 +0000 UTC FinishedAt: 2026-09-06 04:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 03:52:25 +0000 UTC FinishedAt: 2026-09-06 04:08:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*af9ccfac-102c-4ff0-8b86-e61ac6b837c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-convert-artifact-2889947627/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5a07ede1-5770-45a6-82d3-eb292fc3c1c6", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-build-action-1935904233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 03:52:25 +0000 UTC FinishedAt: 2026-09-06 04:08:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*af9ccfac-102c-4ff0-8b86-e61ac6b837c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-convert-artifact-2889947627/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5a07ede1-5770-45a6-82d3-eb292fc3c1c6", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-build-action-1935904233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 04:08:19 +0000 UTC FinishedAt: 2026-09-06 04:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 04:08:19 +0000 UTC FinishedAt: 2026-09-06 04:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 04:08:19 +0000 UTC FinishedAt: 2026-09-06 04:08:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 04:08:19 +0000 UTC FinishedAt: 2026-09-06 04:08:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-convert-artifact-2466511042/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 04:08:29 +0000 UTC FinishedAt: 2026-09-06 04:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 04:08:29 +0000 UTC FinishedAt: 2026-09-06 04:10:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5a07ede1-5770-45a6-82d3-eb292fc3c1c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-build-action-1935904233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 04:10:20 +0000 UTC FinishedAt: 2026-09-06 04:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 04:10:20 +0000 UTC FinishedAt: 2026-09-06 04:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 04:10:20 +0000 UTC FinishedAt: 2026-09-06 04:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 04:10:20 +0000 UTC FinishedAt: 2026-09-06 04:26:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*af9ccfac-102c-4ff0-8b86-e61ac6b837c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-convert-artifact-2466511042/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8c61ad36-c8b1-4a4d-8ffc-7305358d53a9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-build-action-3322063638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 04:10:20 +0000 UTC FinishedAt: 2026-09-06 04:26:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*af9ccfac-102c-4ff0-8b86-e61ac6b837c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-convert-artifact-2466511042/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8c61ad36-c8b1-4a4d-8ffc-7305358d53a9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-build-action-3322063638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 04:26:16 +0000 UTC FinishedAt: 2026-09-06 04:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 04:26:16 +0000 UTC FinishedAt: 2026-09-06 04:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 04:26:16 +0000 UTC FinishedAt: 2026-09-06 04:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 04:26:16 +0000 UTC FinishedAt: 2026-09-06 04:27:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c61ad36-c8b1-4a4d-8ffc-7305358d53a9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-build-action-3322063638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-09-06 04:28:09 +0000 UTC FinishedAt: 2026-09-06 06:52:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-09-06 04:28:09 +0000 UTC FinishedAt: 2026-09-06 06:52:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5a07ede1-5770-45a6-82d3-eb292fc3c1c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c61ad36-c8b1-4a4d-8ffc-7305358d53a9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-build-action-1935904233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-build-action-3322063638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 04:28:09 +0000 UTC FinishedAt: 2026-09-06 04:28:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 04:28:09 +0000 UTC FinishedAt: 2026-09-06 04:28:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-convert-artifact-318267383/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 04:28:09 +0000 UTC FinishedAt: 2026-09-06 04:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 04:28:09 +0000 UTC FinishedAt: 2026-09-06 04:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 04:28:09 +0000 UTC FinishedAt: 2026-09-06 04:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-09-06 04:28:19 +0000 UTC FinishedAt: 2026-09-06 06:52:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhbl7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_add_key","ieee80211_upload_deferred_sta_keys","ieee80211_key_enable_hw_accel","_sta_info_move_state","sta_info_move_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"76f77b44-9475-41b2-ac02-94b1243b0a9d","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Error StartedAt: 2026-09-06 04:28:19 +0000 UTC FinishedAt: 2026-09-06 06:52:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5a07ede1-5770-45a6-82d3-eb292fc3c1c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c61ad36-c8b1-4a4d-8ffc-7305358d53a9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-build-action-1935904233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-build-action-3322063638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhbl7c/series-workflowhbl7c-convert-artifact-318267383/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil