Name: series-workflow6k9x8 Phase: Running StartedAt: 2026-08-07 09:55:42 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k9x8[0] Phase: Succeeded StartedAt: 2026-08-07 09:55:42 +0000 UTC FinishedAt: 2026-08-07 10:03:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k9x8[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 09:55:42 +0000 UTC FinishedAt: 2026-08-07 10:03:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b0057c68df711bf6a62033c072ac61c4f9d3cbc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI", "NET_SCH_ETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b0057c68df711bf6a62033c072ac61c4f9d3cbc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI", "NET_SCH_ETS" ], "series_id": "a3a34828-8379-4cec-939e-2d48b8ab88f9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tc_setup_ets", "tc_setup_ets_sched", "stmmac_qdisc_restore_dt_config", "stmmac_set_tx_queue_weight", "stmmac_mac_config_tx_queues_prio", "tc_setup_dwmac510_mqprio", "stmmac_setup_tc" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX3NldHVwX2V0cyYjMzQ7LAogICAgJiMzNDt0Y19zZXR1cF9ldHNfc2NoZWQmIzM0OywKICAgICYjMzQ7c3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnJiMzNDssCiAgICAmIzM0O3N0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0JiMzNDssCiAgICAmIzM0O3N0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvJiMzNDssCiAgICAmIzM0O3RjX3NldHVwX2R3bWFjNTEwX21xcHJpbyYjMzQ7LAogICAgJiMzNDtzdG1tYWNfc2V0dXBfdGMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pIHFkaXNjIG9mZmxvYWQgdG8gdGhlIHN0bW1hYyBkcml2ZXIuIEl0IG1vZGlmaWVzIHRoZSBkcml2ZXIgdG8gY29uZmlndXJlIGhhcmR3YXJlIHF1ZXVlcyB3aGVuIHRoZSBFVFMgcWRpc2MgaXMgYXR0YWNoZWQuIFRoZSBzdG1tYWMgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gUUVNVSB2aWEgYSBkdW1teSBQQ0kgZGV2aWNlICh1c2luZyBzeXprYWxsZXImIzM5O3MgdmhjaSksIGFuZCB0aGUgRVRTIHFkaXNjIGNhbiBiZSBjb25maWd1cmVkIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhpcyBjb2RlIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNWUwZjk1YjlhOGQ4N2Q1MDM1ZmYzNzQxY2FlYzM1ZTg5MTU4NWNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwOTo1NzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbmluZGV4IDA0ZGFmZWMwMjFiNGYuLmI3MDg4M2E1M2IwOWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuQEAgLTU4MCw2ICYjNDM7NTgwLDggQEAgc3RydWN0IHN0bW1hY190Y19vcHMge1xuIFx0XHRcdCAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqcW9wdCk7XG4gXHRpbnQgKCpzZXR1cF9ldGYpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiBcdFx0XHQgc3RydWN0IHRjX2V0Zl9xb3B0X29mZmxvYWQgKnFvcHQpO1xuJiM0MztcdGludCAoKnNldHVwX2V0cykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuJiM0MztcdFx0XHQgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpO1xuIFx0aW50ICgqcXVlcnlfY2Fwcykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdCAgc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSk7XG4gXHRpbnQgKCpzZXR1cF9tcXByaW8pKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbkBAIC01OTgsNiAmIzQzOzYwMCw4IEBAIHN0cnVjdCBzdG1tYWNfdGNfb3BzIHtcbiBcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBzZXR1cF90YXByaW8sIF9fYXJncylcbiAjZGVmaW5lIHN0bW1hY190Y19zZXR1cF9ldGYoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG4gXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0Yywgc2V0dXBfZXRmLCBfX2FyZ3MpXG4mIzQzOyNkZWZpbmUgc3RtbWFjX3RjX3NldHVwX2V0cyhfX3ByaXYsIF9fYXJncy4uLikgXFxcbiYjNDM7XHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0Yywgc2V0dXBfZXRzLCBfX2FyZ3MpXG4gI2RlZmluZSBzdG1tYWNfdGNfcXVlcnlfY2FwcyhfX3ByaXYsIF9fYXJncy4uLikgXFxcbiBcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBxdWVyeV9jYXBzLCBfX2FyZ3MpXG4gI2RlZmluZSBzdG1tYWNfdGNfc2V0dXBfbXFwcmlvKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcbmluZGV4IDhiYThmMDNlMWNlMDMuLjFiYjI2MWZkY2IwZTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcbkBAIC0zMDEsNiAmIzQzOzMwMSwxMiBAQCBzdHJ1Y3Qgc3RtbWFjX3ByaXYge1xuIFx0LyogUHJvdGVjdCBlc3QgcGFyYW1ldGVycyAqL1xuIFx0c3RydWN0IG11dGV4IGVzdF9sb2NrO1xuIFx0c3RydWN0IHN0bW1hY19lc3QgKmVzdDtcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0Ym9vbCBlbmFibGU7XG4mIzQzO1x0XHR1OCBhbGdvO1xuJiM0MztcdFx0dTMyIHF1YW50YVtNVExfTUFYX1RYX1FVRVVFU107XG4mIzQzO1x0XHR1MzIgcHJpb1tNVExfTUFYX1RYX1FVRVVFU107XG4mIzQzO1x0fSBxZGlzYztcbiBcdHN0cnVjdCBkbWFfZmVhdHVyZXMgZG1hX2NhcDtcbiBcdHN0cnVjdCBzdG1tYWNfY291bnRlcnMgbW1jO1xuIFx0aW50IGh3X2NhcF9zdXBwb3J0O1xuQEAgLTM5NCw2ICYjNDM7NDAwLDggQEAgZW51bSBzdG1tYWNfc3RhdGUge1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzdG1tYWNfc2ltcGxlX3BtX29wcztcbiBcbiYjNDM7dm9pZCBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuJiM0Mzt2b2lkIHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4gaW50IHN0bW1hY19tZGlvX3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIGludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gaW50IHN0bW1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICptaWkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5pbmRleCBjNzI5YWIxMjdhZmQ1Li5jMjc4NmVjY2E1MzAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuQEAgLTM0MTksMTQgJiM0MzszNDE5LDE4IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19zZXRfcmluZ3NfbGVuZ3RoKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiAgKiAgQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxuICAqICBEZXNjcmlwdGlvbjogSXQgaXMgdXNlZCBmb3Igc2V0dGluZyBUWCBxdWV1ZXMgd2VpZ2h0XG4gICovXG4tc3RhdGljIHZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt2b2lkIHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB7XG4gXHR1OCB0eF9xdWV1ZXNfY291bnQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZTtcbiBcdHUzMiB3ZWlnaHQ7XG4gXHR1OCBxdWV1ZTtcbiBcbiBcdGZvciAocXVldWUgPSAwOyBxdWV1ZSBcdTAwM2MgdHhfcXVldWVzX2NvdW50OyBxdWV1ZSYjNDM7JiM0MzspIHtcbi1cdFx0d2VpZ2h0ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLndlaWdodDtcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXFkaXNjLmVuYWJsZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZXFkaXNjLmFsZ28gPT0gTVRMX1RYX0FMR09SSVRITV9EV1JSKVxuJiM0MztcdFx0XHR3ZWlnaHQgPSBwcml2LVx1MDAzZXFkaXNjLnF1YW50YVtxdWV1ZV07XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHdlaWdodCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS53ZWlnaHQ7XG4gXHRcdHN0bW1hY19zZXRfbXRsX3R4X3F1ZXVlX3dlaWdodChwcml2LCBwcml2LVx1MDAzZWh3LCB3ZWlnaHQsIHF1ZXVlKTtcbiBcdH1cbiB9XG5AQCAtMzQ5OSwxNyAmIzQzOzM1MDMsMjAgQEAgc3RhdGljIHZvaWQgc3RtbWFjX21hY19jb25maWdfcnhfcXVldWVzX3ByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4gICogIERlc2NyaXB0aW9uOiBJdCBpcyB1c2VkIGZvciBjb25maWd1cmluZyB0aGUgVFggUXVldWUgUHJpb3JpdHlcbiAgKi9cbi1zdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4mIzQzO3ZvaWQgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbiBcdHU4IHR4X3F1ZXVlc19jb3VudCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlO1xuIFx0dTggcXVldWU7XG4tXHR1MzIgcHJpbztcbiBcbiBcdGZvciAocXVldWUgPSAwOyBxdWV1ZSBcdTAwM2MgdHhfcXVldWVzX2NvdW50OyBxdWV1ZSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKCFwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1txdWV1ZV0udXNlX3ByaW8pXG4tXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR1MzIgcHJpbyA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHByaXYtXHUwMDNlcWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX1NQKVxuJiM0MztcdFx0XHRwcmlvID0gcHJpdi1cdTAwM2VxZGlzYy5wcmlvW3F1ZXVlXTtcbiYjNDM7XHRcdGVsc2UgaWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS51c2VfcHJpbylcbiYjNDM7XHRcdFx0cHJpbyA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS5wcmlvO1xuIFxuLVx0XHRwcmlvID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLnByaW87XG4gXHRcdHN0bW1hY190eF9xdWV1ZV9wcmlvKHByaXYsIHByaXYtXHUwMDNlaHcsIHByaW8sIHF1ZXVlKTtcbiBcdH1cbiB9XG5AQCAtMzU3MCw5ICYjNDM7MzU3NywxNSBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfbXRsX2NvbmZpZ3VyYXRpb24oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3NjaGVkX2FsZ29yaXRobSk7XG4gXG4gXHQvKiBDb25maWd1cmUgTVRMIFRYIGFsZ29yaXRobXMgKi9cbi1cdGlmICh0eF9xdWV1ZXNfY291bnQgXHUwMDNlIDEpXG4tXHRcdHN0bW1hY19wcm9nX210bF90eF9hbGdvcml0aG1zKHByaXYsIHByaXYtXHUwMDNlaHcsXG4tXHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfc2NoZWRfYWxnb3JpdGhtKTtcbiYjNDM7XHRpZiAodHhfcXVldWVzX2NvdW50IFx1MDAzZSAxKSB7XG4mIzQzO1x0XHR1OCB0eF9zY2hlZF9hbGdvO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXFkaXNjLmVuYWJsZSlcbiYjNDM7XHRcdFx0dHhfc2NoZWRfYWxnbyA9IHByaXYtXHUwMDNlcWRpc2MuYWxnbztcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dHhfc2NoZWRfYWxnbyA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9zY2hlZF9hbGdvcml0aG07XG4mIzQzO1x0XHRzdG1tYWNfcHJvZ19tdGxfdHhfYWxnb3JpdGhtcyhwcml2LCBwcml2LVx1MDAzZWh3LCB0eF9zY2hlZF9hbGdvKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBDb25maWd1cmUgQ0JTIGluIEFWQiBUWCBxdWV1ZXMgKi9cbiBcdGlmICh0eF9xdWV1ZXNfY291bnQgXHUwMDNlIDEpXG5AQCAtNjQyOCw2ICYjNDM7NjQ0MSw4IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0cmV0dXJuIHN0bW1hY190Y19zZXR1cF90YXByaW8ocHJpdiwgcHJpdiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfRVRGOlxuIFx0XHRyZXR1cm4gc3RtbWFjX3RjX3NldHVwX2V0Zihwcml2LCBwcml2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfRVRTOlxuJiM0MztcdFx0cmV0dXJuIHN0bW1hY190Y19zZXR1cF9ldHMocHJpdiwgcHJpdiwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jXG5pbmRleCAxNGNhYmU3NmU1M2VjLi4zYmE3MWJlMjRjNjQ4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jXG5AQCAtMTIxMCw2ICYjNDM7MTIxMCw4MyBAQCBzdGF0aWMgaW50IHRjX3NldHVwX2V0ZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIE1heCBxdWFudHVtIHZhbHVlIHN1cHBvcnRlZCBieSB0aGUgTVRMIERXUlIgc2NoZWR1bGVyICovXG4mIzQzOyNkZWZpbmUgTVRMX1RYUV9XRUlHSFRfUVVBTlRVTV9NQVhcdDB4MTMxMmQwXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0LyogcmVzZXQgdG8gdGhlIGR0IGNvbmZpZ3VyZWQgYWxnb3JpdGhtLiAqL1xuJiM0MztcdHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlID0gZmFsc2U7XG4mIzQzO1x0c3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQocHJpdik7XG4mIzQzO1x0c3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8ocHJpdik7XG4mIzQzO1x0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cdTAwM2VodyxcbiYjNDM7XHRcdFx0XHQgICAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfc2NoZWRfYWxnb3JpdGhtKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0Y19zZXR1cF9ldHNfc2NoZWQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwID0gXHUwMDI2cW9wdC1cdTAwM2VyZXBsYWNlX3BhcmFtcztcbiYjNDM7XHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBkYXRhID0gcHJpdi1cdTAwM2VwbGF0O1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VwYXJlbnQgIT0gVENfSF9ST09UKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHAtXHUwMDNlYmFuZHMgXHUwMDNlIHBkYXRhLVx1MDAzZXR4X3F1ZXVlc190b191c2UpXG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZGF0YS1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTMyIHF1YW50dW0gPSAwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwZGF0YS1cdTAwM2V0eF9xdWV1ZXNfY2ZnW2ldLm1vZGVfdG9fdXNlID09IE1UTF9RVUVVRV9BVkIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGkgXHUwMDNjIHAtXHUwMDNlYmFuZHMpIHtcbiYjNDM7XHRcdFx0aWYgKCFwLVx1MDAzZXF1YW50YVtpXSlcbiYjNDM7XHRcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHAtXHUwMDNlcXVhbnRhW2ldIFx1MDAzZSBNVExfVFhRX1dFSUdIVF9RVUFOVFVNX01BWClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdFx0cXVhbnR1bSA9IHAtXHUwMDNlcXVhbnRhW2ldO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHByaXYtXHUwMDNlcWRpc2MucXVhbnRhW2ldID0gcXVhbnR1bTtcbiYjNDM7XHRcdHN0bW1hY19zZXRfbXRsX3R4X3F1ZXVlX3dlaWdodChwcml2LCBwcml2LVx1MDAzZWh3LCBxdWFudHVtLCBpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0bW1hY19wcm9nX210bF90eF9hbGdvcml0aG1zKHByaXYsIHByaXYtXHUwMDNlaHcsIE1UTF9UWF9BTEdPUklUSE1fRFdSUik7XG4mIzQzO1x0cHJpdi1cdTAwM2VxZGlzYy5hbGdvID0gTVRMX1RYX0FMR09SSVRITV9EV1JSO1xuJiM0MztcdHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2Vycm9yOlxuJiM0MztcdHN0bW1hY19xZGlzY19yZXN0b3JlX2R0X2NvbmZpZyhwcml2KTtcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdGNfc2V0dXBfZXRzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHFvcHQtXHUwMDNlY29tbWFuZCkge1xuJiM0MztcdGNhc2UgVENfRVRTX1JFUExBQ0U6XG4mIzQzO1x0XHRyZXR1cm4gdGNfc2V0dXBfZXRzX3NjaGVkKHByaXYsIHFvcHQpO1xuJiM0MztcdGNhc2UgVENfRVRTX0RFU1RST1k6XG4mIzQzO1x0XHRzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcocHJpdik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFRDX0VUU19TVEFUUzpcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXFkaXNjLmVuYWJsZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZXFkaXNjLmFsZ28gPT0gTVRMX1RYX0FMR09SSVRITV9EV1JSKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHRjX3F1ZXJ5X2NhcHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdCBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKVxuIHtcbkBAIC0xMjQ1LDE3ICYjNDM7MTMyMiwxOSBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0bmV0ZGV2X3Jlc2V0X3RjKG5kZXYpO1xuIFx0bmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZSk7XG4gXHRzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIG5kZXYsIGV4dGFjaywgMCk7XG4mIzQzO1x0c3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHByaXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHRjX3NldHVwX2R3bWFjNTEwX21xcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiB7XG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXHUwMDNlZXh0YWNrO1xuJiM0MztcdHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGRhdGEgPSBwcml2LVx1MDAzZXBsYXQ7XG4gXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiBcdHUzMiBvZmZzZXQsIGNvdW50LCBudW1fc3RhY2tfdHhfcXVldWVzID0gMDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi1cdTAwM2VkZXY7XG4gXHR1MzIgbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4tXHRpbnQgZXJyO1xuJiM0MztcdGludCBpLCB0YywgZXJyO1xuIFxuIFx0aWYgKCFudW1fdGMpIHtcbiBcdFx0c3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhuZGV2LCBleHRhY2spO1xuQEAgLTEyODUsNiAmIzQzOzEzNjQsMjMgQEAgc3RhdGljIGludCB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfcmVzZXRfdGM7XG4gXG4mIzQzO1x0LyogUXVldWVzIG5vdCBtYXBwZWQgdG8gYW55IFRDIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwcmlvcml0eSAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkYXRhLVx1MDAzZXR4X3F1ZXVlc190b191c2U7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXFkaXNjLnByaW9baV0gPSAwO1xuJiM0MztcdFx0c3RtbWFjX3R4X3F1ZXVlX3ByaW8ocHJpdiwgcHJpdi1cdTAwM2VodywgMCwgaSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIG51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGkgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIGkgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSAmIzQzOyBxb3B0LVx1MDAzZWNvdW50W3RjXTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VxZGlzYy5wcmlvW2ldID0gdGM7XG4mIzQzO1x0XHRcdHN0bW1hY190eF9xdWV1ZV9wcmlvKHByaXYsIHByaXYtXHUwMDNlaHcsIHRjLCBpKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cdTAwM2VodywgTVRMX1RYX0FMR09SSVRITV9TUCk7XG4mIzQzO1x0cHJpdi1cdTAwM2VxZGlzYy5hbGdvID0gTVRMX1RYX0FMR09SSVRITV9TUDtcbiYjNDM7XHRwcml2LVx1MDAzZXFkaXNjLmVuYWJsZSA9IHRydWU7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3Jlc2V0X3RjOlxuQEAgLTEzMDgsNiAmIzQzOzE0MDQsNyBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzID0ge1xuIFx0LnNldHVwX2NscyA9IHRjX3NldHVwX2NscyxcbiBcdC5zZXR1cF90YXByaW8gPSB0Y19zZXR1cF90YXByaW9fd2l0aG91dF9mcGUsXG4gXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxuJiM0MztcdC5zZXR1cF9ldHMgPSB0Y19zZXR1cF9ldHMsXG4gXHQucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsXG4gXHQuc2V0dXBfbXFwcmlvID0gdGNfc2V0dXBfbXFwcmlvX3VuaW1wbGVtZW50ZWQsXG4gfTtcbkBAIC0xMzE5LDYgJiM0MzsxNDE2LDcgQEAgY29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzID0ge1xuIFx0LnNldHVwX2NscyA9IHRjX3NldHVwX2NscyxcbiBcdC5zZXR1cF90YXByaW8gPSB0Y19zZXR1cF90YXByaW8sXG4gXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxuJiM0MztcdC5zZXR1cF9ldHMgPSB0Y19zZXR1cF9ldHMsXG4gXHQucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsXG4gXHQuc2V0dXBfbXFwcmlvID0gdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvLFxuIH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX3NldHVwX2V0cyYjMzQ7LAogICAgJiMzNDt0Y19zZXR1cF9ldHNfc2NoZWQmIzM0OywKICAgICYjMzQ7c3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnJiMzNDssCiAgICAmIzM0O3N0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0JiMzNDssCiAgICAmIzM0O3N0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvJiMzNDssCiAgICAmIzM0O3RjX3NldHVwX2R3bWFjNTEwX21xcHJpbyYjMzQ7LAogICAgJiMzNDtzdG1tYWNfc2V0dXBfdGMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pIHFkaXNjIG9mZmxvYWQgdG8gdGhlIHN0bW1hYyBkcml2ZXIuIEl0IG1vZGlmaWVzIHRoZSBkcml2ZXIgdG8gY29uZmlndXJlIGhhcmR3YXJlIHF1ZXVlcyB3aGVuIHRoZSBFVFMgcWRpc2MgaXMgYXR0YWNoZWQuIFRoZSBzdG1tYWMgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gUUVNVSB2aWEgYSBkdW1teSBQQ0kgZGV2aWNlICh1c2luZyBzeXprYWxsZXImIzM5O3MgdmhjaSksIGFuZCB0aGUgRVRTIHFkaXNjIGNhbiBiZSBjb25maWd1cmVkIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhpcyBjb2RlIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNWUwZjk1YjlhOGQ4N2Q1MDM1ZmYzNzQxY2FlYzM1ZTg5MTU4NWNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAwOTo1NzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaAppbmRleCAwNGRhZmVjMDIxYjRmLi5iNzA4ODNhNTNiMDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oCkBAIC01ODAsNiAmIzQzOzU4MCw4IEBAIHN0cnVjdCBzdG1tYWNfdGNfb3BzIHsKIAkJCSAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqcW9wdCk7CiAJaW50ICgqc2V0dXBfZXRmKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJCQkgc3RydWN0IHRjX2V0Zl9xb3B0X29mZmxvYWQgKnFvcHQpOwomIzQzOwlpbnQgKCpzZXR1cF9ldHMpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKJiM0MzsJCQkgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpOwogCWludCAoKnF1ZXJ5X2NhcHMpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKIAkJCSAgc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSk7CiAJaW50ICgqc2V0dXBfbXFwcmlvKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCkBAIC01OTgsNiAmIzQzOzYwMCw4IEBAIHN0cnVjdCBzdG1tYWNfdGNfb3BzIHsKIAlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0Yywgc2V0dXBfdGFwcmlvLCBfX2FyZ3MpCiAjZGVmaW5lIHN0bW1hY190Y19zZXR1cF9ldGYoX19wcml2LCBfX2FyZ3MuLi4pIFwKIAlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0Yywgc2V0dXBfZXRmLCBfX2FyZ3MpCiYjNDM7I2RlZmluZSBzdG1tYWNfdGNfc2V0dXBfZXRzKF9fcHJpdiwgX19hcmdzLi4uKSBcCiYjNDM7CXN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBzZXR1cF9ldHMsIF9fYXJncykKICNkZWZpbmUgc3RtbWFjX3RjX3F1ZXJ5X2NhcHMoX19wcml2LCBfX2FyZ3MuLi4pIFwKIAlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0YywgcXVlcnlfY2FwcywgX19hcmdzKQogI2RlZmluZSBzdG1tYWNfdGNfc2V0dXBfbXFwcmlvKF9fcHJpdiwgX19hcmdzLi4uKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oCmluZGV4IDhiYThmMDNlMWNlMDMuLjFiYjI2MWZkY2IwZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oCkBAIC0zMDEsNiAmIzQzOzMwMSwxMiBAQCBzdHJ1Y3Qgc3RtbWFjX3ByaXYgewogCS8qIFByb3RlY3QgZXN0IHBhcmFtZXRlcnMgKi8KIAlzdHJ1Y3QgbXV0ZXggZXN0X2xvY2s7CiAJc3RydWN0IHN0bW1hY19lc3QgKmVzdDsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCWJvb2wgZW5hYmxlOwomIzQzOwkJdTggYWxnbzsKJiM0MzsJCXUzMiBxdWFudGFbTVRMX01BWF9UWF9RVUVVRVNdOwomIzQzOwkJdTMyIHByaW9bTVRMX01BWF9UWF9RVUVVRVNdOwomIzQzOwl9IHFkaXNjOwogCXN0cnVjdCBkbWFfZmVhdHVyZXMgZG1hX2NhcDsKIAlzdHJ1Y3Qgc3RtbWFjX2NvdW50ZXJzIG1tYzsKIAlpbnQgaHdfY2FwX3N1cHBvcnQ7CkBAIC0zOTQsNiAmIzQzOzQwMCw4IEBAIGVudW0gc3RtbWFjX3N0YXRlIHsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0bW1hY19zaW1wbGVfcG1fb3BzOwogCiYjNDM7dm9pZCBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpOwomIzQzO3ZvaWQgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTsKIGludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKIGludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiBpbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKm1paSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwppbmRleCBjNzI5YWIxMjdhZmQ1Li5jMjc4NmVjY2E1MzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKQEAgLTM0MTksMTQgJiM0MzszNDE5LDE4IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19zZXRfcmluZ3NfbGVuZ3RoKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlCiAgKiAgRGVzY3JpcHRpb246IEl0IGlzIHVzZWQgZm9yIHNldHRpbmcgVFggcXVldWVzIHdlaWdodAogICovCi1zdGF0aWMgdm9pZCBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiYjNDM7dm9pZCBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7CiAJdTggdHhfcXVldWVzX2NvdW50ID0gcHJpdi0mZ3Q7cGxhdC0mZ3Q7dHhfcXVldWVzX3RvX3VzZTsKIAl1MzIgd2VpZ2h0OwogCXU4IHF1ZXVlOwogCiAJZm9yIChxdWV1ZSA9IDA7IHF1ZXVlICZsdDsgdHhfcXVldWVzX2NvdW50OyBxdWV1ZSYjNDM7JiM0MzspIHsKLQkJd2VpZ2h0ID0gcHJpdi0mZ3Q7cGxhdC0mZ3Q7dHhfcXVldWVzX2NmZ1txdWV1ZV0ud2VpZ2h0OwomIzQzOwkJaWYgKHByaXYtJmd0O3FkaXNjLmVuYWJsZSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcHJpdi0mZ3Q7cWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX0RXUlIpCiYjNDM7CQkJd2VpZ2h0ID0gcHJpdi0mZ3Q7cWRpc2MucXVhbnRhW3F1ZXVlXTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl3ZWlnaHQgPSBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS53ZWlnaHQ7CiAJCXN0bW1hY19zZXRfbXRsX3R4X3F1ZXVlX3dlaWdodChwcml2LCBwcml2LSZndDtodywgd2VpZ2h0LCBxdWV1ZSk7CiAJfQogfQpAQCAtMzQ5OSwxNyAmIzQzOzM1MDMsMjAgQEAgc3RhdGljIHZvaWQgc3RtbWFjX21hY19jb25maWdfcnhfcXVldWVzX3ByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogICogIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqICBEZXNjcmlwdGlvbjogSXQgaXMgdXNlZCBmb3IgY29uZmlndXJpbmcgdGhlIFRYIFF1ZXVlIFByaW9yaXR5CiAgKi8KLXN0YXRpYyB2b2lkIHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0Mzt2b2lkIHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKIAl1OCB0eF9xdWV1ZXNfY291bnQgPSBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfdG9fdXNlOwogCXU4IHF1ZXVlOwotCXUzMiBwcmlvOwogCiAJZm9yIChxdWV1ZSA9IDA7IHF1ZXVlICZsdDsgdHhfcXVldWVzX2NvdW50OyBxdWV1ZSYjNDM7JiM0MzspIHsKLQkJaWYgKCFwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS51c2VfcHJpbykKLQkJCWNvbnRpbnVlOwomIzQzOwkJdTMyIHByaW8gPSAwOwomIzQzOwomIzQzOwkJaWYgKHByaXYtJmd0O3FkaXNjLmVuYWJsZSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcHJpdi0mZ3Q7cWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX1NQKQomIzQzOwkJCXByaW8gPSBwcml2LSZndDtxZGlzYy5wcmlvW3F1ZXVlXTsKJiM0MzsJCWVsc2UgaWYgKHByaXYtJmd0O3BsYXQtJmd0O3R4X3F1ZXVlc19jZmdbcXVldWVdLnVzZV9wcmlvKQomIzQzOwkJCXByaW8gPSBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS5wcmlvOwogCi0JCXByaW8gPSBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS5wcmlvOwogCQlzdG1tYWNfdHhfcXVldWVfcHJpbyhwcml2LCBwcml2LSZndDtodywgcHJpbywgcXVldWUpOwogCX0KIH0KQEAgLTM1NzAsOSAmIzQzOzM1NzcsMTUgQEAgc3RhdGljIHZvaWQgc3RtbWFjX210bF9jb25maWd1cmF0aW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAkJCQlwcml2LSZndDtwbGF0LSZndDtyeF9zY2hlZF9hbGdvcml0aG0pOwogCiAJLyogQ29uZmlndXJlIE1UTCBUWCBhbGdvcml0aG1zICovCi0JaWYgKHR4X3F1ZXVlc19jb3VudCAmZ3Q7IDEpCi0JCXN0bW1hY19wcm9nX210bF90eF9hbGdvcml0aG1zKHByaXYsIHByaXYtJmd0O2h3LAotCQkJCXByaXYtJmd0O3BsYXQtJmd0O3R4X3NjaGVkX2FsZ29yaXRobSk7CiYjNDM7CWlmICh0eF9xdWV1ZXNfY291bnQgJmd0OyAxKSB7CiYjNDM7CQl1OCB0eF9zY2hlZF9hbGdvOwomIzQzOwomIzQzOwkJaWYgKHByaXYtJmd0O3FkaXNjLmVuYWJsZSkKJiM0MzsJCQl0eF9zY2hlZF9hbGdvID0gcHJpdi0mZ3Q7cWRpc2MuYWxnbzsKJiM0MzsJCWVsc2UKJiM0MzsJCQl0eF9zY2hlZF9hbGdvID0gcHJpdi0mZ3Q7cGxhdC0mZ3Q7dHhfc2NoZWRfYWxnb3JpdGhtOwomIzQzOwkJc3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi0mZ3Q7aHcsIHR4X3NjaGVkX2FsZ28pOwomIzQzOwl9CiAKIAkvKiBDb25maWd1cmUgQ0JTIGluIEFWQiBUWCBxdWV1ZXMgKi8KIAlpZiAodHhfcXVldWVzX2NvdW50ICZndDsgMSkKQEAgLTY0MjgsNiAmIzQzOzY0NDEsOCBAQCBzdGF0aWMgaW50IHN0bW1hY19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCXJldHVybiBzdG1tYWNfdGNfc2V0dXBfdGFwcmlvKHByaXYsIHByaXYsIHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9RRElTQ19FVEY6CiAJCXJldHVybiBzdG1tYWNfdGNfc2V0dXBfZXRmKHByaXYsIHByaXYsIHR5cGVfZGF0YSk7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfRVRTOgomIzQzOwkJcmV0dXJuIHN0bW1hY190Y19zZXR1cF9ldHMocHJpdiwgcHJpdiwgdHlwZV9kYXRhKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYwppbmRleCAxNGNhYmU3NmU1M2VjLi4zYmE3MWJlMjRjNjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYwpAQCAtMTIxMCw2ICYjNDM7MTIxMCw4MyBAQCBzdGF0aWMgaW50IHRjX3NldHVwX2V0ZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBNYXggcXVhbnR1bSB2YWx1ZSBzdXBwb3J0ZWQgYnkgdGhlIE1UTCBEV1JSIHNjaGVkdWxlciAqLwomIzQzOyNkZWZpbmUgTVRMX1RYUV9XRUlHSFRfUVVBTlRVTV9NQVgJMHgxMzEyZDAKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJLyogcmVzZXQgdG8gdGhlIGR0IGNvbmZpZ3VyZWQgYWxnb3JpdGhtLiAqLwomIzQzOwlwcml2LSZndDtxZGlzYy5lbmFibGUgPSBmYWxzZTsKJiM0MzsJc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQocHJpdik7CiYjNDM7CXN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHByaXYpOwomIzQzOwlzdG1tYWNfcHJvZ19tdGxfdHhfYWxnb3JpdGhtcyhwcml2LCBwcml2LSZndDtodywKJiM0MzsJCQkJICAgICAgcHJpdi0mZ3Q7cGxhdC0mZ3Q7dHhfc2NoZWRfYWxnb3JpdGhtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0Y19zZXR1cF9ldHNfc2NoZWQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAomIzQzOwkJCSAgICAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpxb3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAgPSAmYW1wO3FvcHQtJmd0O3JlcGxhY2VfcGFyYW1zOwomIzQzOwlzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBkYXRhID0gcHJpdi0mZ3Q7cGxhdDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtwYXJlbnQgIT0gVENfSF9ST09UKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsKJiM0MzsJaWYgKHAtJmd0O2JhbmRzICZndDsgcGRhdGEtJmd0O3R4X3F1ZXVlc190b191c2UpCiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRhdGEtJmd0O3R4X3F1ZXVlc190b191c2U7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgcXVhbnR1bSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAocGRhdGEtJmd0O3R4X3F1ZXVlc19jZmdbaV0ubW9kZV90b191c2UgPT0gTVRMX1FVRVVFX0FWQikKJiM0MzsJCQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwkJaWYgKGkgJmx0OyBwLSZndDtiYW5kcykgewomIzQzOwkJCWlmICghcC0mZ3Q7cXVhbnRhW2ldKQomIzQzOwkJCQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwkJCWlmIChwLSZndDtxdWFudGFbaV0gJmd0OyBNVExfVFhRX1dFSUdIVF9RVUFOVFVNX01BWCkKJiM0MzsJCQkJZ290byBlcnJvcjsKJiM0MzsKJiM0MzsJCQlxdWFudHVtID0gcC0mZ3Q7cXVhbnRhW2ldOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcHJpdi0mZ3Q7cWRpc2MucXVhbnRhW2ldID0gcXVhbnR1bTsKJiM0MzsJCXN0bW1hY19zZXRfbXRsX3R4X3F1ZXVlX3dlaWdodChwcml2LCBwcml2LSZndDtodywgcXVhbnR1bSwgaSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi0mZ3Q7aHcsIE1UTF9UWF9BTEdPUklUSE1fRFdSUik7CiYjNDM7CXByaXYtJmd0O3FkaXNjLmFsZ28gPSBNVExfVFhfQUxHT1JJVEhNX0RXUlI7CiYjNDM7CXByaXYtJmd0O3FkaXNjLmVuYWJsZSA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2Vycm9yOgomIzQzOwlzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcocHJpdik7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0Y19zZXR1cF9ldHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAomIzQzOwkJCXN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpxb3B0KQomIzQzO3sKJiM0MzsJc3dpdGNoIChxb3B0LSZndDtjb21tYW5kKSB7CiYjNDM7CWNhc2UgVENfRVRTX1JFUExBQ0U6CiYjNDM7CQlyZXR1cm4gdGNfc2V0dXBfZXRzX3NjaGVkKHByaXYsIHFvcHQpOwomIzQzOwljYXNlIFRDX0VUU19ERVNUUk9ZOgomIzQzOwkJc3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHByaXYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVENfRVRTX1NUQVRTOgomIzQzOwkJaWYgKHByaXYtJmd0O3FkaXNjLmVuYWJsZSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcHJpdi0mZ3Q7cWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX0RXUlIpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHRjX3F1ZXJ5X2NhcHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAogCQkJIHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UpCiB7CkBAIC0xMjQ1LDE3ICYjNDM7MTMyMiwxOSBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCW5ldGRldl9yZXNldF90YyhuZGV2KTsKIAluZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIHByaXYtJmd0O3BsYXQtJmd0O3R4X3F1ZXVlc190b191c2UpOwogCXN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgbmRldiwgZXh0YWNrLCAwKTsKJiM0MzsJc3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHByaXYpOwogfQogCiBzdGF0aWMgaW50IHRjX3NldHVwX2R3bWFjNTEwX21xcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJCQkJICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiB7CiAJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLSZndDtleHRhY2s7CiYjNDM7CXN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGRhdGEgPSBwcml2LSZndDtwbGF0OwogCXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwogCXUzMiBvZmZzZXQsIGNvdW50LCBudW1fc3RhY2tfdHhfcXVldWVzID0gMDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHByaXYtJmd0O2RldjsKIAl1MzIgbnVtX3RjID0gcW9wdC0mZ3Q7bnVtX3RjOwotCWludCBlcnI7CiYjNDM7CWludCBpLCB0YywgZXJyOwogCiAJaWYgKCFudW1fdGMpIHsKIAkJc3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhuZGV2LCBleHRhY2spOwpAQCAtMTI4NSw2ICYjNDM7MTM2NCwyMyBAQCBzdGF0aWMgaW50IHRjX3NldHVwX2R3bWFjNTEwX21xcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVzZXRfdGM7CiAKJiM0MzsJLyogUXVldWVzIG5vdCBtYXBwZWQgdG8gYW55IFRDIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwcmlvcml0eSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRhdGEtJmd0O3R4X3F1ZXVlc190b191c2U7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlwcml2LSZndDtxZGlzYy5wcmlvW2ldID0gMDsKJiM0MzsJCXN0bW1hY190eF9xdWV1ZV9wcmlvKHByaXYsIHByaXYtJmd0O2h3LCAwLCBpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgaSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcW9wdC0mZ3Q7Y291bnRbdGNdOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXByaXYtJmd0O3FkaXNjLnByaW9baV0gPSB0YzsKJiM0MzsJCQlzdG1tYWNfdHhfcXVldWVfcHJpbyhwcml2LCBwcml2LSZndDtodywgdGMsIGkpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXN0bW1hY19wcm9nX210bF90eF9hbGdvcml0aG1zKHByaXYsIHByaXYtJmd0O2h3LCBNVExfVFhfQUxHT1JJVEhNX1NQKTsKJiM0MzsJcHJpdi0mZ3Q7cWRpc2MuYWxnbyA9IE1UTF9UWF9BTEdPUklUSE1fU1A7CiYjNDM7CXByaXYtJmd0O3FkaXNjLmVuYWJsZSA9IHRydWU7CiYjNDM7CiAJcmV0dXJuIDA7CiAKIGVycl9yZXNldF90YzoKQEAgLTEzMDgsNiAmIzQzOzE0MDQsNyBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzID0gewogCS5zZXR1cF9jbHMgPSB0Y19zZXR1cF9jbHMsCiAJLnNldHVwX3RhcHJpbyA9IHRjX3NldHVwX3RhcHJpb193aXRob3V0X2ZwZSwKIAkuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLAomIzQzOwkuc2V0dXBfZXRzID0gdGNfc2V0dXBfZXRzLAogCS5xdWVyeV9jYXBzID0gdGNfcXVlcnlfY2FwcywKIAkuc2V0dXBfbXFwcmlvID0gdGNfc2V0dXBfbXFwcmlvX3VuaW1wbGVtZW50ZWQsCiB9OwpAQCAtMTMxOSw2ICYjNDM7MTQxNiw3IEBAIGNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNTEwX3RjX29wcyA9IHsKIAkuc2V0dXBfY2xzID0gdGNfc2V0dXBfY2xzLAogCS5zZXR1cF90YXByaW8gPSB0Y19zZXR1cF90YXByaW8sCiAJLnNldHVwX2V0ZiA9IHRjX3NldHVwX2V0ZiwKJiM0MzsJLnNldHVwX2V0cyA9IHRjX3NldHVwX2V0cywKIAkucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsCiAJLnNldHVwX21xcHJpbyA9IHRjX3NldHVwX2R3bWFjNTEwX21xcHJpbywKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMTcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU1RNTUFDIEVUUyBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgYWRkaW5nIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCBjYXBhYmlsaXRpZXMgdG8gdGhlIFNUTU1BQyBkcml2ZXIuIFNlZW1zIGxpa2UgdGhleSYjMzk7dmUgaG9va2VkIGludG8gYHN0bW1hY190Y19vcHNgIHRvIGluY2x1ZGUgYHNldHVwX2V0c2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGV5JiMzOTt2ZSBhbHNvIGltcGxlbWVudGVkIGB0Y19zZXR1cF9ldHNgIGFuZCBgdGNfc2V0dXBfZXRzX3NjaGVkYCB3aXRoaW4gYHN0bW1hY190Yy5jYC4gR29vZCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0aG9zZSBmdW5jdGlvbnMgdG8gYmUuIEl0JiMzOTtzIGFsc28gY29uZmlndXJpbmcgdGhlIFN0cmljdCBQcmlvcml0eSAoU1ApIGFsZ29yaXRobSB3aGVuIGBtcXByaW9gIGlzIGluIHVzZSwgbW9kaWZ5aW5nIGB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9gIGFjY29yZGluZ2x5LiBTbWFydC4gQW5kIHRoZXkmIzM5O3ZlIGFkZGVkIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgIOKAkyBuZWNlc3NhcnkgZm9yIHBlcnNpc3RlbnQgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMsIEkgcHJlc3VtZS4gQWxsIHByZXR0eSBzdGFuZGFyZCBzdHVmZiwgcmVhbGx5LgoKTm93LCBhIGNyaXRpY2FsIG5leHQgc3RlcC4gQ2FuIHdlIGV2ZW4gdGVzdCB0aGlzIGVmZmVjdGl2ZWx5PyBTVE1NQUMsIHRoYXQmIzM5O3MgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgTUFDIGRyaXZlci4gSXTigJlzIHByZXZhbGVudCBpbiBhIHRvbiBvZiBTb0NzLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIGdldCBpdCB0byByZWxpYWJseSBiZWhhdmUgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IElzIGl0IFFFTVUtZnJpZW5kbHk/IEkgbWVhbiwgaXQmIzM5O3MgYSAqcGh5c2ljYWwqIEV0aGVybmV0IGRyaXZlciwgYnV0IHRoZXJlIG1pZ2h0IGJlIFBDSSB2YXJpYW50cyBvciBwbGF0Zm9ybS1zcGVjaWZpYyB2YXJpYXRpb25zIHRoYXQgY291bGQgY29tcGxpY2F0ZSB0aGluZ3MuIExldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhhdCBgS2NvbmZpZ2AgZmlsZSB1bmRlciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1RNTUFDX0VUSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOmNvbmZpZyBTVE1NQUNfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzI5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlIG9mIFBvc3NpYmlsaXRpZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIHRvd2FyZHMgZWZmaWNpZW50IHByb2JsZW0tc29sdmluZy4gV2hlbiBjb25mcm9udGVkIHdpdGggYSBzaXR1YXRpb24sIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBtYXAgb3V0IHRoZSBwb3RlbnRpYWwgYXZlbnVlcyB0byBleHBsb3JlLiBJbiB0aGlzIGNhc2UsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYSAmIzM0O1BDSSB2YXJpYW50LiYjMzQ7IFRoYXQgc3VnZ2VzdHMgSSYjMzk7bSBkZWFsaW5nIHdpdGggYSBjb25jZXB0IG9yIHN5c3RlbSB0aGF0IGhhcyBhIGNvcmUgY29tcG9uZW50IGtub3duIGFzIFBDSSAobGlrZWx5IHJlZmVycmluZyB0byB0aGUgUGF5bWVudCBDYXJkIEluZHVzdHJ5IERhdGEgU2VjdXJpdHkgU3RhbmRhcmQsIG9yIGEgcmVsYXRlZCB0ZWNobm9sb2d5IHByb3RvY29sKSwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBpZiBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb25zIG9yIGNvbmZpZ3VyYXRpb25zIGV4aXN0LiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwOiB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtLiBBbSBJIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgc3RyYWlnaHRmb3J3YXJkIFBDSSBjb21wbGlhbnQsIG9yIGlzIHRoZXJlIGFkZGVkIGNvbXBsZXhpdHksIHNjb3BlIG9yIGEgbm92ZWwgc2l0dWF0aW9uIHdpdGggdmFyaWF0aW9ucyB0byBjb25zaWRlcj8gSXQgaXMgYW4gaW1wb3J0YW50IHF1ZXN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVE1NQUNfUENJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEwMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFNUTU1BQyBQQ0kgRW11bGF0aW9uIGluIFFFTVUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBTVE1NQUNfUENJLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGRvZXMgUUVNVSBldmVuIGVtdWxhdGUgdGhpcz8gSSYjMzk7bSBwcmV0dHkgc3VyZSBzdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IG9mZmVyIG5hdGl2ZSBTVE1NQUMgUENJIGVtdWxhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUuIExldCBtZSBzZWUuLi4gSSByZWNhbGwgUUVNVSBoYXZpbmcgaW1wbGVtZW50YXRpb25zIGZvciBzZXZlcmFsIG90aGVyIG5ldHdvcmsgZGV2aWNlcywgbGlrZSBgaWdiLmNgLCBgZTEwMDBlLmNgLCBgcnRsODEzOS5jYCwgYHBjbmV0LmNgLCB0aGUgbGlzdCBnb2VzIG9uLiBCdXQsIEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgYSBjb3JyZXNwb25kaW5nIGBzdG1tYWMuY2AuIERvZXMgaXQgZW11bGF0ZSB0aGUgc3RtbWFjPwoKQWxyaWdodCwgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhIGJpdC4gU3l6a2FsbGVyIGhhcyBiZWVuIGEgZ29vZCBzb3VyY2Ugb2YgaW5mb3JtYXRpb24gZm9yIHRoaXMga2luZCBvZiB0aGluZywgc28gcGVyaGFwcyBpdCBoYXMgc29tZSBkZXZpY2UgZGVzY3JpcHRpb25zLCBhbmQgdGhhdCBtaWdodCBpbmNsdWRlIFNUTU1BQy4gSSBzaG91bGQgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NlbGZ0ZXN0cy5jLTMtICogQ29weXJpZ2h0IChjKSAyMDE5IFN5bm9wc3lzLCBJbmMuIGFuZC9vciBpdHMgYWZmaWxpYXRlcy5cbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jOjQ6ICogc3RtbWFjIFNlbGZ0ZXN0cyBTdXBwb3J0XG5uZXQvY29yZS9zZWxmdGVzdHMuYy01LSAqXG4tLVxubmV0L2NvcmUvc2VsZnRlc3RzLmMtNy0gKlxubmV0L2NvcmUvc2VsZnRlc3RzLmM6ODogKiBQb3J0ZWQgZnJvbSBzdG1tYWMgYnk6XG5uZXQvY29yZS9zZWxmdGVzdHMuYy05LSAqIENvcHlyaWdodCAoQykgMjAyMSBPbGVrc2lqIFJlbXBlbCBcdTAwM2NvLnJlbXBlbEBwZW5ndXRyb25peC5kZVx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MjUKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTeXprYWxsZXIgUG90ZW50aWFsIGZvciBUZXN0aW5nIHN0bW1hYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1dhaXQsIGlzIHRoZXJlIGFueSB3YXkgdG8gdGVzdCBgc3RtbWFjYCB3aXRoIHN5emthbGxlciAqd2l0aG91dCogZGlyZWN0IGBzdG1tYWNgIGRlc2NyaXB0aW9ucz8mIzM0OyBIbW0uLi4gbWF5YmUgbmV0bGluaywgc3BlY2lmaWNhbGx5IGB0YyBxZGlzY2A/IFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyBhZGRpbmcgYFRDX1NFVFVQX1FESVNDX0VUU2AgaGFuZGxpbmcgd2l0aGluIGBzdG1tYWNfc2V0dXBfdGNgLiBSaWdodCwgYW5kIGBzdG1tYWNfc2V0dXBfdGNgIGdldHMgY2FsbGVkIHRocm91Z2ggYG5kb19zZXR1cF90Y2AuIFRoZSB0cmlja3kgcGFydCBpcyB0aGF0IGlmIHRoZSBkcml2ZXIgaXNuJiMzOTt0IGxvYWRlZCwgYG5kb19zZXR1cF90Y2Agd29uJiMzOTt0IGV2ZW4gYmUgaW52b2tlZC4KClNvLCB0aGUgbmV4dCBxdWVzdGlvbiBpcywgY2FuIEkgZ2V0IHRoZSBkcml2ZXIgbG9hZGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXIgdXNlcz8gSSBiZXQgdGhlcmUgYXJlIHBsYXRmb3JtIGRldmljZXMgSSBjb3VsZCB1c2UgdG8gbXkgYWR2YW50YWdlIOKAkyBkdW1teSBkZXZpY2VzIG9yIHRob3NlIGNyZWF0ZWQgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIHBhcnRpY3VsYXJseSBpbiBjZXJ0YWluIFFFTVUgY29uZmlndXJhdGlvbnMuIEJ1dCBzeXprYWxsZXIgcHJlZG9taW5hbnRseSBydW5zIG9uIHg4Nl82NCwgb3Igc29tZXRpbWVzIGFybTY0LCBzbyBpdCBuZWVkcyB0byBiZSBwb3NzaWJsZSBvbiB0aGVzZSBwbGF0Zm9ybXMuCgpJZiBpdCYjMzk7cyB4ODZfNjQsIHdoaWNoIGlzIGxpa2VseSwgdGhlbiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBpZiBhIFBDSSBkZXZpY2UgY291bGQgYmUgcHJvYmVkLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY2AuIEhvcGVmdWxseSwgSSBjYW4gZmluZCBzb21ldGhpbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9kZXZpY2VfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTExOD1zdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTE5Olx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MTkyPXN0YXRpYyB2b2lkIHN0bW1hY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjAzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDQtXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDg2CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIHN0bW1hY19pZF90YWJsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBQQ0kgSURzIHdpdGhpbiB0aGUgYHN0bW1hY19pZF90YWJsZWAuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggc3BlY2lmaWMgaGFyZHdhcmUgaWRlbnRpZmllcnMgYXJlIHN1cHBvcnRlZCBieSB0aGUgYHN0bW1hY2AgZHJpdmVyLiBLbm93aW5nIHRoZSB2ZW5kb3IgYW5kIGRldmljZSBJRHMgbWFwcGVkIHRvIHRoZSBkcml2ZXIgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGhhcmR3YXJlIGNvbXBhdGliaWxpdHkuIEkgd2FudCB0byBxdWlja2x5IGNvcnJlbGF0ZSB0aGUgZGV2aWNlJiMzOTtzIFBDSSBJRCB0byB0aGlzIGxpc3QgaW4gbXkgbWVtb3J5LiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHN0cnVjdHVyZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgc3VwcG9ydGVkIGNoaXBzZXRzLiBUaGVuLCBJIHdpbGwgc3RhcnQgdG8gaW5mZXIgdGhlIGltcGxpZWQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGJ5IHRoZSBpZGVudGlmaWVkIGNoaXBzZXRzLiBJdCYjMzk7cyBhIHF1aWNrIGFuZCBlc3NlbnRpYWwgc3RlcCBmb3IgaW5pdGlhbCBhc3Nlc3NtZW50LCBkZWJ1Z2dpbmcsIG9yIGV2ZW4ganVzdCBjb25maXJtaW5nIGRyaXZlciBzdXBwb3J0IGZvciBhIGdpdmVuIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHQjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1RNTUFDX1NUTU1BQ1x0XHQweDExMDhcbiAyMDE6XHQjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lOT1BTWVNfR01BQzVfSURcdFx0MHg3MTAyXG4gMjAyOlx0XG4gMjAzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0bW1hY19pZF90YWJsZVtdID0ge1xuIDIwNDpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNTUFDLCBTVE1NQUMsIFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcbiAyMDU6XHRcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuIDIwNjpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoU1lOT1BTWVMsIEdNQUM1X0lELCBcdTAwMjZzbnBzX2dtYWM1X3BjaV9pbmZvKSB9LFxuIDIwNzpcdFx0e31cbiAyMDg6XHR9O1xuIDIwOTpcdFxuIDIxMDpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xuIDIxMTpcdFxuIDIxMjpcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzdG1tYWNfcGNpX2RyaXZlciA9IHtcbiAyMTM6XHRcdC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsXG4gMjE0Olx0XHQuaWRfdGFibGUgPSBzdG1tYWNfaWRfdGFibGUsXG4gMjE1Olx0XHQucHJvYmUgPSBzdG1tYWNfcGNpX3Byb2JlLFxuIDIxNjpcdFx0LnJlbW92ZSA9IHN0bW1hY19wY2lfcmVtb3ZlLFxuIDIxNzpcdFx0LmRyaXZlciAgICAgICAgID0ge1xuIDIxODpcdFx0XHQucG0gICAgID0gXHUwMDI2c3RtbWFjX3NpbXBsZV9wbV9vcHMsXG4gMjE5Olx0XHR9LFxuIDIyMDpcdH07XG4gMjIxOlx0XG4gMjIyOlx0bW9kdWxlX3BjaV9kcml2ZXIoc3RtbWFjX3BjaV9kcml2ZXIpO1xuIDIyMzpcdFxuIDIyNDpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTVE1NQUMgMTAvMTAwLzEwMDAgRXRoZXJuZXQgUENJIGRyaXZlclwmIzM0Oyk7XG4gMjI1Olx0TU9EVUxFX0FVVEhPUihcJiMzNDtSYXlhZ29uZCBLb2thdGFudXIgXHUwMDNjcmF5YWdvbmQua29rYXRhbnVyQHZheWF2eWFsYWJzLmNvbVx1MDAzZVwmIzM0Oyk7XG4gMjI2Olx0TU9EVUxFX0FVVEhPUihcJiMzNDtHaXVzZXBwZSBDYXZhbGxhcm8gXHUwMDNjcGVwcGUuY2F2YWxsYXJvQHN0LmNvbVx1MDAzZVwmIzM0Oyk7XG4gMjI3Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI5NQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmlhYmlsaXR5IG9mIFN5emthbGxlciYjMzk7cyB2aGNpIGZvciBTdG1tYWMgRHJpdmVyIFRlc3RpbmcqKgoKT2theSwgc28gU3l6a2FsbGVyJiMzOTtzIGdvdCB0aGlzIHZoY2kgbWVjaGFuaXNtLCByaWdodD8gVGhhdCYjMzk7cyB0aGUgdmlydHVhbCBQQ0kgZGV2aWNlIGluamVjdGlvbiDigJMgaXQgbGV0cyBtZSBzcG9vZiBQQ0kgZGV2aWNlcyB3aXRoIHdoYXRldmVyIElEcyBJIG5lZWQuIFRoYXQmIzM5O3MgcG90ZW50aWFsbHkgKmh1Z2UqIGZvciBmdXp6aW5nIGFuZCB0ZXN0aW5nLiBCdXQgdGhlIHF1ZXN0aW9uIGlzOiBjYW4gdGhlIHN0bW1hYyBkcml2ZXIgZXZlbiAqd29yayogd2l0aG91dCBhY3R1YWwgaGFyZHdhcmU/IFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuIFR5cGljYWxseSwgdGhlc2UgcGh5c2ljYWwgRXRoZXJuZXQgZHJpdmVycyBhcmUgcHJldHR5IGZpbmlja3kuIFRoZXkgdXN1YWxseSBjaG9rZSBpbiB0aGUgYHByb2JlYCBmdW5jdGlvbiBpZiB0aGUgaGFyZHdhcmUmIzM5O3Mgbm90IHBsYXlpbmcgYmFsbCDigJMgeW91IGtub3csIHRyeWluZyB0byByZWFkIHRoZSBNQUMgYWRkcmVzcywgcmVzZXR0aW5nIHRoZSBQSFksIGNoZWNraW5nIHJlZ2lzdGVycyBhbmQgZXhwZWN0aW5nIHZhbGlkIHJlc3BvbnNlcy4gSXQmIzM5O3MgYSByZWFsIHBhaW4uIFNvLCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgdmhjaSBhcHByb2FjaCBjYW4gYWN0dWFsbHkgd29yayB3aXRoIHN0bW1hYywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBkaXZlIGludG8gYHN0bW1hY19wY2lfcHJvYmVgLiBHb3R0YSBzZWUgd2hhdCB0aGUgZHJpdmVyJiMzOTtzICpyZWFsbHkqIGV4cGVjdGluZyBpbiB0ZXJtcyBvZiBoYXJkd2FyZSBpbnRlcmFjdGlvbiBkdXJpbmcgdGhlIHByb2JlLiBUaGVuIEkmIzM5O2xsIGJlIGFibGUgdG8gdGVsbCBpZiBTeXprYWxsZXImIzM5O3MgdmhjaSBjYW4gZm9vbCB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE4Olx0c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIDExOTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gMTIwOlx0e1xuIDEyMTpcdFx0c3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICopaWQtXHUwMDNlZHJpdmVyX2RhdGE7XG4gMTIyOlx0XHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XG4gMTIzOlx0XHRzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyByZXMgPSB7fTtcbiAxMjQ6XHRcdGludCByZXQ7XG4gMTI1Olx0XHRpbnQgaTtcbiAxMjY6XHRcbiAxMjc6XHRcdHBsYXQgPSBzdG1tYWNfcGxhdF9kYXRfYWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIDEyODpcdFx0aWYgKCFwbGF0KVxuIDEyOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMzA6XHRcbiAxMzE6XHRcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbiAxMzI6XHRcdFx0XHRcdFx0ICAgc2l6ZW9mKCpwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEpLFxuIDEzMzpcdFx0XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiAxMzQ6XHRcdGlmICghcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhKVxuIDEzNTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMzY6XHRcbiAxMzc6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuIDEzODpcdFx0XHRcdFx0XHQgICAgIHNpemVvZigqcGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmcpLFxuIDEzOTpcdFx0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuIDE0MDpcdFx0aWYgKCFwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZylcbiAxNDE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTQyOlx0XG4gMTQzOlx0XHQvKiBFbmFibGUgcGNpIGRldmljZSAqL1xuIDE0NDpcdFx0cmV0ID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpO1xuIDE0NTpcdFx0aWYgKHJldCkge1xuIDE0NjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDslczogRVJST1I6IGZhaWxlZCB0byBlbmFibGUgZGV2aWNlXFxuXCYjMzQ7LFxuIDE0NzpcdFx0XHRcdF9fZnVuY19fKTtcbiAxNDg6XHRcdFx0cmV0dXJuIHJldDtcbiAxNDk6XHRcdH1cbiAxNTA6XHRcbiAxNTE6XHRcdC8qIEdldCB0aGUgYmFzZSBhZGRyZXNzIG9mIGRldmljZSAqL1xuIDE1MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUENJX1NURF9OVU1fQkFSUzsgaSYjNDM7JiM0MzspIHtcbiAxNTM6XHRcdFx0aWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSkgPT0gMClcbiAxNTQ6XHRcdFx0XHRjb250aW51ZTtcbiAxNTU6XHRcdFx0cmVzLmFkZHIgPSBwY2ltX2lvbWFwX3JlZ2lvbihwZGV2LCBpLCBTVE1NQUNfUkVTT1VSQ0VfTkFNRSk7XG4gMTU2Olx0XHRcdGlmIChJU19FUlIocmVzLmFkZHIpKVxuIDE1NzpcdFx0XHRcdHJldHVybiBQVFJfRVJSKHJlcy5hZGRyKTtcbiAxNTg6XHRcdFx0YnJlYWs7XG4gMTU5Olx0XHR9XG4gMTYwOlx0XG4gMTYxOlx0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiAxNjI6XHRcbiAxNjM6XHRcdHJldCA9IGluZm8tXHUwMDNlc2V0dXAocGRldiwgcGxhdCk7XG4gMTY0Olx0XHRpZiAocmV0KVxuIDE2NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE2NjpcdFxuIDE2NzpcdFx0cmVzLndvbF9pcnEgPSBwZGV2LVx1MDAzZWlycTtcbiAxNjg6XHRcdHJlcy5pcnEgPSBwZGV2LVx1MDAzZWlycTtcbiAxNjk6XHRcbiAxNzA6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVx1MDAzZXRzb2VlID0gMTtcbiAxNzE6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVx1MDAzZW1yeHBlZSA9IDE7XG4gMTcyOlx0XHRwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cdTAwM2VtZXN0ZWUgPSAxO1xuIDE3MzpcdFx0cGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmctXHUwMDNlbXJ4ZWUgPSAxO1xuIDE3NDpcdFx0cGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmctXHUwMDNlbXR4ZWUgPSAxO1xuIDE3NTpcdFx0cGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmctXHUwMDNlZXBzaSA9IDE7XG4gMTc2Olx0XHRwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cdTAwM2VlZHBwID0gMTtcbiAxNzc6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVx1MDAzZXBydHllbiA9IDE7XG4gMTc4Olx0XHRwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cdTAwM2V0bW91dGVuID0gMTtcbiAxNzk6XHRcbiAxODA6XHRcdHBsYXQtXHUwMDNlc3VzcGVuZCA9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xuIDE4MTpcdFx0cGxhdC1cdTAwM2VyZXN1bWUgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lO1xuIDE4MjpcdFxuIDE4MzpcdFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG4gMTg0Olx0fVxuIDE4NTpcdFxuIDE4NjpcdC8qKlxuIDE4NzpcdCAqIHN0bW1hY19wY2lfcmVtb3ZlXG4gMTg4Olx0ICpcbiAxODk6XHQgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXJcbiAxOTA6XHQgKiBEZXNjcmlwdGlvbjogdGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgbWFpbiB0byBmcmVlIHRoZSBuZXQgcmVzb3VyY2VzLlxuIDE5MTpcdCAqL1xuIDE5MjpcdHN0YXRpYyB2b2lkIHN0bW1hY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIDE5MzpcdHtcbiAxOTQ6XHRcdHN0bW1hY19kdnJfcmVtb3ZlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiAxOTU6XHR9XG4gMTk2Olx0XG4gMTk3Olx0Lyogc3ludGhldGljIElELCBubyBvZmZpY2lhbCB2ZW5kb3IgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjIKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipQcm9iaW5nIHRoZSBTVE1NQUMgRHJpdmVyJiMzOTtzIFJlc2lsaWVuY2UqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBhdCB0aGUgcG9pbnQgd2hlcmUgYSBwcm9iZSBjYWxsIGlzIGJlaW5nIG1hZGUgdG8gYHN0bW1hY19kdnJfcHJvYmVgLiBNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgcm9idXN0bmVzcyBhbmQgdGVzdGFiaWxpdHkuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyByZXNpbGllbnQgdGhpcyBpcyBpbiB0aGUgYWJzZW5jZSBvZiBhY3R1YWwgaGFyZHdhcmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtDYW4gSSBzdWNjZXNzZnVsbHkgZXhlY3V0ZSBgc3RtbWFjX2R2cl9wcm9iZWAgaW4gYSBzaW11bGF0ZWQgZW52aXJvbm1lbnQsIHBlcmhhcHMgd2l0aCBhIHZpcnR1YWwgTklDLCBvciBldmVuIGp1c3QgYnkgc3R1YmJpbmcgb3V0IGNlcnRhaW4gaGFyZHdhcmUgaW50ZXJhY3Rpb25zPyYjMzQ7IFRoZSBnb2FsIGlzIHRvIGlzb2xhdGUgdGhlIGRyaXZlciYjMzk7cyBjb3JlIGxvZ2ljIGZyb20gdGhlIHBoeXNpY2FsIGRldmljZS4gSWYgaXQgKmRvZXMqIGRlcGVuZCBvbiBzb21lIEhXIGluaXRpYWxpemF0aW9uLCBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQuIEFyZSB3ZSBnZXR0aW5nIHRoZSB1c3VhbCBoYXJkd2FyZSBkZXBlbmRlbmN5IGVycm9yIG1lc3NhZ2VzPyBJcyB0aGVyZSBhIGNsZWFyIHBhdGggdG8gbW9jayB0aGF0IG91dD8gQ2FuIEkgYnlwYXNzIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIG9yIGRvZXMgYSBwYXJ0aWN1bGFyIHZhbHVlIHRyaWdnZXIgaXQ/IE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgYSB3ZWxsLWRlc2lnbmVkIGRyaXZlciBzaG91bGQgZ3JhY2VmdWxseSBoYW5kbGUgdGhlIGxhY2sgb2YgaGFyZHdhcmUsIG9yIGF0IGxlYXN0IHByb3ZpZGUgY2xlYXIgaW5kaWNhdG9ycyBvZiBpdHMgYWJzZW5jZSwgdG8gYWxsb3cgZm9yIHRob3JvdWdoIHRlc3RpbmcgYW5kIGJyaW5nLXVwLiBTbywgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgZ3JhY2VmdWwgZmFpbHVyZXMsIHBlcmhhcHMgYSByZXR1cm4gY29kZSBvciBhIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UsIGluIHRoZSBwcm9iZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2R2cl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03Nzk0PUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19wbGF0X2RhdF9hbGxvYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc3OTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc3OTY6c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03Nzk3LVx0XHRcdCAgICAgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdF9kYXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDk4LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDk5OiAqIHN0bW1hY19kdnJfcHJvYmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwMC0gKiBAZGV2OiBkZXZpY2UgcG9pbnRlclxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwNy0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODEwODppbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdF9kYXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDktXHRcdCAgICAgc3RydWN0IHN0bW1hY19yZXNvdXJjZXMgKnJlcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMTk6XHRyZXQgPSBfX3N0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyMC1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IHBsYXRfZGF0LVx1MDAzZWV4aXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTI0LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODEyNTpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfZHZyX3Byb2JlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MDMKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGBfX3N0bW1hY19kdnJfcHJvYmVgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUga2VybmVsIGlzIHBvaW50aW5nIG1lIHRvd2FyZCBgX19zdG1tYWNfZHZyX3Byb2JlYC4gTGV0JiMzOTtzIGFzc3VtZSB0aGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIFNUTU1BQyBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIGF0IGxlYXN0IGluaXRpYWxseS4gVGhpcyBpcyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBzZWUgdGhlIHJlc291cmNlIGFsbG9jYXRpb24sIGRldmljZSBpbml0aWFsaXphdGlvbiwgYW5kIHBsYXRmb3JtLXNwZWNpZmljIHNldHVwIGhhcHBlbmluZy4gTGlrZWx5LCB0aGlzIGlzIHdoZXJlIHRoZSBoYXJkd2FyZSBpcyBiZWluZyBpZGVudGlmaWVkIGFuZCBhc3NvY2lhdGVkIHdpdGggdGhlIGRyaXZlci4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmU6IHdoYXQmIzM5O3MgaXQgY2hlY2tpbmcsIHdoYXQmIzM5O3MgaXQgY2FsbGluZywgYW5kIHdoYXQmIzM5O3MgaXQgc2V0dGluZyB1cD8gVGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW5nIHRoZSBkZXZpY2UgcmVhZHkgdG8gcnVuLiBMZXTigJlzIHNlZSB3aGF0IGdvb2RpZXMgYXdhaXQgaW5zaWRlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3Nzk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc3OTY6XHRzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG43Nzk3Olx0XHRcdFx0ICAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbjc3OTg6XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxuNzc5OTpcdHtcbjc4MDA6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDtcbjc4MDE6XHRcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdjtcbjc4MDI6XHRcdGludCBpLCByZXQgPSAwO1xuNzgwMzpcdFx0dTggcnhxO1xuNzgwNDpcdFxuNzgwNTpcdFx0aWYgKCFwbGF0X2RhdC1cdTAwM2VkbWFfY2ZnIHx8ICFwbGF0X2RhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZXBibCkge1xuNzgwNjpcdFx0XHRkZXZfZXJyKGRldmljZSwgXCYjMzQ7aW52YWxpZCBETUEgY29uZmlndXJhdGlvblxcblwmIzM0Oyk7XG43ODA3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzgwODpcdFx0fVxuNzgwOTpcdFxuNzgxMDpcdFx0bmRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKGRldmljZSwgc2l6ZW9mKHN0cnVjdCBzdG1tYWNfcHJpdiksXG43ODExOlx0XHRcdFx0XHQgICAgICAgTVRMX01BWF9UWF9RVUVVRVMsIE1UTF9NQVhfUlhfUVVFVUVTKTtcbjc4MTI6XHRcdGlmICghbmRldilcbjc4MTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG43ODE0Olx0XG43ODE1Olx0XHRTRVRfTkVUREVWX0RFVihuZGV2LCBkZXZpY2UpO1xuNzgxNjpcdFxuNzgxNzpcdFx0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuNzgxODpcdFx0cHJpdi1cdTAwM2VkZXZpY2UgPSBkZXZpY2U7XG43ODE5Olx0XHRwcml2LVx1MDAzZWRldiA9IG5kZXY7XG43ODIwOlx0XG43ODIxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNVExfTUFYX1JYX1FVRVVFUzsgaSYjNDM7JiM0MzspXG43ODIyOlx0XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLnJ4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcbjc4MjM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1UTF9NQVhfVFhfUVVFVUVTOyBpJiM0MzsmIzQzOykge1xuNzgyNDpcdFx0XHR1NjRfc3RhdHNfaW5pdChcdTAwMjZwcml2LVx1MDAzZXhzdGF0cy50eHFfc3RhdHNbaV0ucV9zeW5jcCk7XG43ODI1Olx0XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLnR4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcbjc4MjY6XHRcdH1cbjc4Mjc6XHRcbjc4Mjg6XHRcdHByaXYtXHUwMDNleHN0YXRzLnBjcHVfc3RhdHMgPVxuNzgyOTpcdFx0XHRkZXZtX25ldGRldl9hbGxvY19wY3B1X3N0YXRzKGRldmljZSwgc3RydWN0IHN0bW1hY19wY3B1X3N0YXRzKTtcbjc4MzA6XHRcdGlmICghcHJpdi1cdTAwM2V4c3RhdHMucGNwdV9zdGF0cylcbjc4MzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG43ODMyOlx0XG43ODMzOlx0XHRzdG1tYWNfc2V0X2V0aHRvb2xfb3BzKG5kZXYpO1xuNzgzNDpcdFx0cHJpdi1cdTAwM2VwYXVzZV90aW1lID0gcGF1c2U7XG43ODM1Olx0XHRwcml2LVx1MDAzZXBsYXQgPSBwbGF0X2RhdDtcbjc4MzY6XHRcdHByaXYtXHUwMDNlaW9hZGRyID0gcmVzLVx1MDAzZWFkZHI7XG43ODM3Olx0XHRwcml2LVx1MDAzZWRldi1cdTAwM2ViYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylyZXMtXHUwMDNlYWRkcjtcbjc4Mzg6XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZW11bHRpX21zaV9lbiA9XG43ODM5Olx0XHRcdChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX01VTFRJX01TSV9FTik7XG43ODQwOlx0XG43ODQxOlx0XHRwcml2LVx1MDAzZWRldi1cdTAwM2VpcnEgPSByZXMtXHUwMDNlaXJxO1xuNzg0MjpcdFx0cHJpdi1cdTAwM2V3b2xfaXJxID0gcmVzLVx1MDAzZXdvbF9pcnE7XG43ODQzOlx0XHRwcml2LVx1MDAzZXNmdHlfaXJxID0gcmVzLVx1MDAzZXNmdHlfaXJxO1xuNzg0NDpcdFxuNzg0NTpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfTVVMVElfTVNJX0VOKSB7XG43ODQ2Olx0XHRcdHJldCA9IHN0bW1hY19tc2lfaW5pdChwcml2LCByZXMpO1xuNzg0NzpcdFx0XHRpZiAocmV0KVxuNzg0ODpcdFx0XHRcdHJldHVybiByZXQ7XG43ODQ5Olx0XHR9XG43ODUwOlx0XG43ODUxOlx0XHRpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihyZXMtXHUwMDNlbWFjKSlcbjc4NTI6XHRcdFx0ZXRoX2h3X2FkZHJfc2V0KHByaXYtXHUwMDNlZGV2LCByZXMtXHUwMDNlbWFjKTtcbjc4NTM6XHRcbjc4NTQ6XHRcdGRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIHByaXYtXHUwMDNlZGV2KTtcbjc4NTU6XHRcbjc4NTY6XHRcdC8qIFZlcmlmeSBkcml2ZXIgYXJndW1lbnRzICovXG43ODU3Olx0XHRzdG1tYWNfdmVyaWZ5X2FyZ3MoKTtcbjc4NTg6XHRcbjc4NTk6XHRcdHByaXYtXHUwMDNlYWZfeGRwX3pjX3FwcyA9IGJpdG1hcF96YWxsb2MoTVRMX01BWF9UWF9RVUVVRVMsIEdGUF9LRVJORUwpO1xuNzg2MDpcdFx0aWYgKCFwcml2LVx1MDAzZWFmX3hkcF96Y19xcHMpXG43ODYxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuNzg2MjpcdFxuNzg2MzpcdFx0LyogQWxsb2NhdGUgd29ya3F1ZXVlICovXG43ODY0Olx0XHRwcml2LVx1MDAzZXdxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoXCYjMzQ7c3RtbWFjX3dxXCYjMzQ7KTtcbjc4NjU6XHRcdGlmICghcHJpdi1cdTAwM2V3cSkge1xuNzg2NjpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG43ODY3Olx0XHRcdHJldCA9IC1FTk9NRU07XG43ODY4Olx0XHRcdGdvdG8gZXJyb3Jfd3FfaW5pdDtcbjc4Njk6XHRcdH1cbjc4NzA6XHRcbjc4NzE6XHRcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXNlcnZpY2VfdGFzaywgc3RtbWFjX3NlcnZpY2VfdGFzayk7XG43ODcyOlx0XG43ODczOlx0XHR0aW1lcl9zZXR1cChcdTAwMjZwcml2LVx1MDAzZWVlZV9jdHJsX3RpbWVyLCBzdG1tYWNfZWVlX2N0cmxfdGltZXIsIDApO1xuNzg3NDpcdFxuNzg3NTpcdFx0LyogT3ZlcnJpZGUgd2l0aCBrZXJuZWwgcGFyYW1ldGVycyBpZiBzdXBwbGllZCBYWFggQ1JTIFhYWFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUxMwoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBc3Nlc3NpbmcgUG90ZW50aWFsIFN5c3RlbSBJbnRlcmFjdGlvbioqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBoZXJlIGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBsZXZlbCBvZiBzb3BoaXN0aWNhdGlvbiB0aGUgc3lzdGVtIGlzIGF0dGVtcHRpbmcsIG9yIHBvdGVudGlhbGx5IGNhcGFibGUgb2YsIGluIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBnYXVnZSB3aGV0aGVyIHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgYW5hbHlzaXMsIG9yIGlmIHRoZXJlJiMzOTtzIGEgbW9yZSBpbnZvbHZlZCBhdHRlbXB0IGJlaW5nIG1hZGUgdG8gZGlyZWN0bHkgaW50ZXJyb2dhdGUgaGFyZHdhcmUgcmVnaXN0ZXJzLiBSZWFkaW5nIGhhcmR3YXJlIHJlZ2lzdGVycywgZXZlbiBpZiBpbmRpcmVjdGx5LCBpbXBsaWVzIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBhcmNoaXRlY3R1cmUgYW5kIGEgcG90ZW50aWFsbHkgZ3JlYXRlciB2dWxuZXJhYmlsaXR5IHN1cmZhY2UuIFRoaXMgY291bGQgYmUgYSB0ZWxsIG9mIHRoZSB0b29sc2V0LCBvciB0aGUgbGV2ZWwgb2YgZWZmb3J0IHRoYXQgdGhlIGFjdG9yIGlzIHdpbGxpbmcgdG8gcHV0IGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc4NzY6XHRcdCAqIHRoaXMgbmVlZHMgdG8gaGF2ZSBtdWx0aXBsZSBpbnN0YW5jZXNcbjc4Nzc6XHRcdCAqL1xuNzg3ODpcdFx0aWYgKChwaHlhZGRyIFx1MDAzZT0gMCkgXHUwMDI2XHUwMDI2IChwaHlhZGRyIFx1MDAzYz0gMzEpKVxuNzg3OTpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGh5X2FkZHIgPSBwaHlhZGRyO1xuNzg4MDpcdFxuNzg4MTpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VzdG1tYWNfcnN0KSB7XG43ODgyOlx0XHRcdHJldCA9IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtXHUwMDNlcGxhdC1cdTAwM2VzdG1tYWNfcnN0KTtcbjc4ODM6XHRcdFx0cmVzZXRfY29udHJvbF9kZWFzc2VydChwcml2LVx1MDAzZXBsYXQtXHUwMDNlc3RtbWFjX3JzdCk7XG43ODg0Olx0XHRcdC8qIFNvbWUgcmVzZXQgY29udHJvbGxlcnMgaGF2ZSBvbmx5IHJlc2V0IGNhbGxiYWNrIGluc3RlYWQgb2Zcbjc4ODU6XHRcdFx0ICogYXNzZXJ0ICYjNDM7IGRlYXNzZXJ0IGNhbGxiYWNrcyBwYWlyLlxuNzg4NjpcdFx0XHQgKi9cbjc4ODc6XHRcdFx0aWYgKHJldCA9PSAtRU5PVFNVUFApXG43ODg4Olx0XHRcdFx0cmVzZXRfY29udHJvbF9yZXNldChwcml2LVx1MDAzZXBsYXQtXHUwMDNlc3RtbWFjX3JzdCk7XG43ODg5Olx0XHR9XG43ODkwOlx0XG43ODkxOlx0XHRyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtXHUwMDNlcGxhdC1cdTAwM2VzdG1tYWNfYWhiX3JzdCk7XG43ODkyOlx0XHRpZiAocmV0ID09IC1FTk9UU1VQUClcbjc4OTM6XHRcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7dW5hYmxlIHRvIGJyaW5nIG91dCBvZiBhaGIgcmVzZXQ6ICVwZVxcblwmIzM0Oyxcbjc4OTQ6XHRcdFx0XHRFUlJfUFRSKHJldCkpO1xuNzg5NTpcdFxuNzg5NjpcdFx0LyogV2FpdCBhIGJpdCBmb3IgdGhlIHJlc2V0IHRvIHRha2UgZWZmZWN0ICovXG43ODk3Olx0XHR1ZGVsYXkoMTApO1xuNzg5ODpcdFxuNzg5OTpcdFx0LyogSW5pdCBNQUMgYW5kIGdldCB0aGUgY2FwYWJpbGl0aWVzICovXG43OTAwOlx0XHRyZXQgPSBzdG1tYWNfaHdfaW5pdChwcml2KTtcbjc5MDE6XHRcdGlmIChyZXQpXG43OTAyOlx0XHRcdGdvdG8gZXJyb3JfaHdfaW5pdDtcbjc5MDM6XHRcbjc5MDQ6XHRcdC8qIE9ubHkgRFdNQUMgY29yZSB2ZXJzaW9uIDUuMjAgb253YXJkcyBzdXBwb3J0cyBIVyBkZXNjcmlwdG9yIHByZWZldGNoLlxuNzkwNTpcdFx0ICovXG43OTA2Olx0XHRpZiAocHJpdi1cdTAwM2VzeW5vcHN5c19pZCBcdTAwM2MgRFdNQUNfQ09SRV81XzIwKVxuNzkwNzpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlZG1hX2NmZy1cdTAwM2VkY2hlID0gZmFsc2U7XG43OTA4Olx0XG43OTA5Olx0XHRzdG1tYWNfY2hlY2tfZXRoZXJfYWRkcihwcml2KTtcbjc5MTA6XHRcbjc5MTE6XHRcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnN0bW1hY19uZXRkZXZfb3BzO1xuNzkxMjpcdFxuNzkxMzpcdFx0bmRldi1cdTAwM2V4ZHBfbWV0YWRhdGFfb3BzID0gXHUwMDI2c3RtbWFjX3hkcF9tZXRhZGF0YV9vcHM7XG43OTE0Olx0XHRuZGV2LVx1MDAzZXhza190eF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZzdG1tYWNfeHNrX3R4X21ldGFkYXRhX29wcztcbjc5MTU6XHRcbjc5MTY6XHRcdG5kZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfFxuNzkxNzpcdFx0XHRcdCAgICBORVRJRl9GX1JYQ1NVTTtcbjc5MTg6XHRcdG5kZXYtXHUwMDNleGRwX2ZlYXR1cmVzID0gTkVUREVWX1hEUF9BQ1RfQkFTSUMgfCBORVRERVZfWERQX0FDVF9SRURJUkVDVCB8XG43OTE5Olx0XHRcdFx0ICAgICBORVRERVZfWERQX0FDVF9YU0tfWkVST0NPUFk7XG43OTIwOlx0XG43OTIxOlx0XHRyZXQgPSBzdG1tYWNfdGNfaW5pdChwcml2LCBwcml2KTtcbjc5MjI6XHRcdGlmICghcmV0KSB7XG43OTIzOlx0XHRcdG5kZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcbjc5MjQ6XHRcdH1cbjc5MjU6XHRcbjc5MjY6XHRcdHN0bW1hY19zZXRfZ3NvX2ZlYXR1cmVzKG5kZXYpO1xuNzkyNzpcdFxuNzkyODpcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5zcGhlbiBcdTAwMjZcdTAwMjZcbjc5Mjk6XHRcdCAgICAhKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfU1BIX0RJU0FCTEUpKSB7XG43OTMwOlx0XHRcdG5kZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87XG43OTMxOlx0XHRcdHByaXYtXHUwMDNlc3BoX2NhcGFibGUgPSB0cnVlO1xuNzkzMjpcdFx0XHRwcml2LVx1MDAzZXNwaF9hY3RpdmUgPSBwcml2LVx1MDAzZXNwaF9jYXBhYmxlO1xuNzkzMzpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7U1BIIGZlYXR1cmUgZW5hYmxlZFxcblwmIzM0Oyk7XG43OTM0Olx0XHR9XG43OTM1Olx0XG43OTM2Olx0XHQvKiBJZGVhbGx5IG91ciBob3N0IERNQSBhZGRyZXNzIHdpZHRoIGlzIHRoZSBzYW1lIGFzIGZvciB0aGVcbjc5Mzc6XHRcdCAqIGRldmljZS4gSG93ZXZlciwgaXQgbWF5IGRpZmZlciBhbmQgdGhlbiB3ZSBoYXZlIHRvIHVzZSBvdXJcbjc5Mzg6XHRcdCAqIGhvc3QgRE1BIHdpZHRoIGZvciBhbGxvY2F0aW9uIGFuZCB0aGUgZGV2aWNlIERNQSB3aWR0aCBmb3Jcbjc5Mzk6XHRcdCAqIHJlZ2lzdGVyIGhhbmRsaW5nLlxuNzk0MDpcdFx0ICovXG43OTQxOlx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWhvc3RfZG1hX3dpZHRoKVxuNzk0MjpcdFx0XHRwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGggPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlaG9zdF9kbWFfd2lkdGg7XG43OTQzOlx0XHRlbHNlXG43OTQ0Olx0XHRcdHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCA9IHByaXYtXHUwMDNlZG1hX2NhcC5hZGRyNjQ7XG43OTQ1Olx0XG43OTQ2Olx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSB7XG43OTQ3Olx0XHRcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2aWNlLFxuNzk0ODpcdFx0XHRcdFx0RE1BX0JJVF9NQVNLKHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCkpO1xuNzk0OTpcdFx0XHRpZiAoIXJldCkge1xuNzk1MDpcdFx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtVc2luZyAlZC8lZCBiaXRzIERNQSBob3N0L2RldmljZSB3aWR0aFxcblwmIzM0Oyxcbjc5NTE6XHRcdFx0XHRcdCBwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgsIHByaXYtXHUwMDNlZG1hX2NhcC5hZGRyNjQpO1xuNzk1MjpcdFxuNzk1MzpcdFx0XHRcdC8qXG43OTU0Olx0XHRcdFx0ICogSWYgbW9yZSB0aGFuIDMyIGJpdHMgY2FuIGJlIGFkZHJlc3NlZCwgbWFrZSBzdXJlIHRvXG43OTU1Olx0XHRcdFx0ICogZW5hYmxlIGVuaGFuY2VkIGFkZHJlc3NpbmcgbW9kZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMTgKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgU1RNTUFDIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBzdGFydGluZyB1cCwgYW5kIHRoZSBjb2RlIGhhcyBoaXQgYHN0bW1hY19od19pbml0YC4gUmlnaHQgYXdheSwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIG9mIHRoZSBTVE1NQUMgZHJpdmVyLiBJIHdhbnQgdG8ga25vdyBleGFjdGx5IGhvdyBpdCBzZXRzIHVwIHRoZSByZWdpc3RlcnMsIGNvbmZpZ3VyZXMgdGhlIE1BQyBpdHNlbGYsIGFuZCBnZXRzIHRoaW5ncyByZWFkeSB0byByZWNlaXZlIGFuZCB0cmFuc21pdCBwYWNrZXRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZC4gVGhlIERNQSBzZXR0aW5ncywgZmxvdyBjb250cm9sLCBpbnRlcnJ1cHQgZW5hYmxlbWVudCDigJMgdGhhdCYjMzk7cyBhbGwgd2hhdCBJIHdpbGwgYmUgZ29pbmcgdG8gY2hlY2sgaW4gdGhhdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2h3X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzM2NT1zdGF0aWMgdm9pZCBzdG1tYWNfcHJpbnRfYWN0cGh5aWYoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzM5OS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzQwMDogKiAgc3RtbWFjX2h3X2luaXQgLSBJbml0IHRoZSBNQUMgZGV2aWNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDEtICogIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDYtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MDc6c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc5Nj1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03ODk5LVx0LyogSW5pdCBNQUMgYW5kIGdldCB0aGUgY2FwYWJpbGl0aWVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc5MDA6XHRyZXQgPSBzdG1tYWNfaHdfaW5pdChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzkwMS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Nzg2CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc3RtbWFjX2h3X2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaW5pdGlhbGl6ZXMgdGhlIGhhcmR3YXJlLCBhbmQgd2hhdCBzcGVjaWZpYyBzdGVwcyBpdCB0YWtlcy4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uLCBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIERNQSBlbmdpbmUsIGNvbmZpZ3VyaW5nIHRoZSBNQUMgcmVnaXN0ZXJzLCBhbmQgZ2VuZXJhbGx5IGdldHRpbmcgdGhlIEV0aGVybmV0IGNvbnRyb2xsZXIgcmVhZHkgZm9yIHVzZS4gSSBleHBlY3QgdG8gc2VlIHJlZ2lzdGVyIHdyaXRlcywgcGVyaGFwcyBjbG9jayBlbmFibGUgc2VxdWVuY2VzLCBhbmQgbGlrZWx5IHNvbWUgaW5pdGlhbCBidWZmZXIgZGVzY3JpcHRvciBzZXR1cC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcyB0aGUgZHJpdmVyIGltcGxlbWVudHMuIEkgd2FudCB0byBzZWUgaWYgdGhleSYjMzk7cmUgaGFuZGxpbmcgUEhZIGluaXRpYWxpemF0aW9uIGNvcnJlY3RseSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zIEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8uIEFsc28sIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2Ygc2ltaWxhciBkcml2ZXJzLCBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBwb3dlci1zYXZpbmcgbWVjaGFuaXNtcyB0aGF0IG1pZ2h0IGJlIGluaXRpYXRlZCBoZXJlLCBvciBkZWZlcnJlZCB0byBsYXRlciBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IG1hcCBhY2Nlc3MgYW5kIGFueSBwb3RlbnRpYWwgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkuIFVsdGltYXRlbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGNvbmZpcm0gd2hldGhlciBpdCBpcyBhIHJvYnVzdCBhbmQgZWZmaWNpZW50IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc0MDc6XHRzdGF0aWMgaW50IHN0bW1hY19od19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbjc0MDg6XHR7XG43NDA5Olx0XHRpbnQgcmV0O1xuNzQxMDpcdFxuNzQxMTpcdFx0LyogZHdtYWMtc3VuOGkgb25seSB3b3JrIGluIGNoYWluIG1vZGUgKi9cbjc0MTI6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX0hBU19TVU44SSlcbjc0MTM6XHRcdFx0Y2hhaW5fbW9kZSA9IDE7XG43NDE0Olx0XHRwcml2LVx1MDAzZWNoYWluX21vZGUgPSAhIWNoYWluX21vZGU7XG43NDE1Olx0XG43NDE2Olx0XHQvKiBJbml0aWFsaXplIEhXIEludGVyZmFjZSAqL1xuNzQxNzpcdFx0cmV0ID0gc3RtbWFjX2h3aWZfaW5pdChwcml2KTtcbjc0MTg6XHRcdGlmIChyZXQpXG43NDE5Olx0XHRcdHJldHVybiByZXQ7XG43NDIwOlx0XG43NDIxOlx0XHQvKiBHZXQgdGhlIEhXIGNhcGFiaWxpdHkgKG5ldyBHTUFDIG5ld2VyIHRoYW4gMy41MGEpICovXG43NDIyOlx0XHRwcml2LVx1MDAzZWh3X2NhcF9zdXBwb3J0ID0gc3RtbWFjX2dldF9od19mZWF0dXJlcyhwcml2KTtcbjc0MjM6XHRcdGlmIChwcml2LVx1MDAzZWh3X2NhcF9zdXBwb3J0KSB7XG43NDI0Olx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtETUEgSFcgY2FwYWJpbGl0eSByZWdpc3RlciBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuNzQyNTpcdFxuNzQyNjpcdFx0XHQvKiBXZSBjYW4gb3ZlcnJpZGUgc29tZSBnbWFjL2RtYSBjb25maWd1cmF0aW9uIGZpZWxkczogZS5nLlxuNzQyNzpcdFx0XHQgKiBlbmhfZGVzYywgdHhfY29lIChlLmcuIHRoYXQgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZVxuNzQyODpcdFx0XHQgKiBwbGF0Zm9ybSkgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhlIEhXIGNhcGFiaWxpdHlcbjc0Mjk6XHRcdFx0ICogcmVnaXN0ZXIgKGlmIHN1cHBvcnRlZCkuXG43NDMwOlx0XHRcdCAqL1xuNzQzMTpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlZW5oX2Rlc2MgPSBwcml2LVx1MDAzZWRtYV9jYXAuZW5oX2Rlc2M7XG43NDMyOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwbXQgPSBwcml2LVx1MDAzZWRtYV9jYXAucG10X3JlbW90ZV93YWtlX3VwIFx1MDAyNlx1MDAyNlxuNzQzMzpcdFx0XHRcdFx0IShwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX1VTRV9QSFlfV09MKTtcbjc0MzQ6XHRcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5oYXNoX3RiX3N6KSB7XG43NDM1Olx0XHRcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2VtdWx0aWNhc3RfZmlsdGVyX2JpbnMgPVxuNzQzNjpcdFx0XHRcdFx0XHQoQklUKHByaXYtXHUwMDNlZG1hX2NhcC5oYXNoX3RiX3N6KSBcdTAwM2NcdTAwM2MgNSk7XG43NDM3Olx0XHRcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2VtY2FzdF9iaXRzX2xvZzIgPVxuNzQzODpcdFx0XHRcdFx0XHRpbG9nMihwcml2LVx1MDAzZWh3LVx1MDAzZW11bHRpY2FzdF9maWx0ZXJfYmlucyk7XG43NDM5Olx0XHRcdH1cbjc0NDA6XHRcbjc0NDE6XHRcdFx0LyogVFhDT0UgZG9lc24mIzM5O3Qgd29yayBpbiB0aHJlc2ggRE1BIG1vZGUgKi9cbjc0NDI6XHRcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vmb3JjZV90aHJlc2hfZG1hX21vZGUpXG43NDQzOlx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2NvZSA9IGZhbHNlO1xuNzQ0NDpcdFx0XHRlbHNlXG43NDQ1Olx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2NvZSA9IHByaXYtXHUwMDNlZG1hX2NhcC50eF9jb2U7XG43NDQ2Olx0XG43NDQ3Olx0XHRcdC8qIEluIGNhc2Ugb2YgR01BQzQgcnhfY29lIGlzIGZyb20gSFcgY2FwIHJlZ2lzdGVyLiAqL1xuNzQ0ODpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lID0gcHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2NvZTtcbjc0NDk6XHRcbjc0NTA6XHRcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5yeF9jb2VfdHlwZTIpXG43NDUxOlx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2NvZSA9IFNUTU1BQ19SWF9DT0VfVFlQRTI7XG43NDUyOlx0XHRcdGVsc2UgaWYgKHByaXYtXHUwMDNlZG1hX2NhcC5yeF9jb2VfdHlwZTEpXG43NDUzOlx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2NvZSA9IFNUTU1BQ19SWF9DT0VfVFlQRTE7XG43NDU0Olx0XG43NDU1Olx0XHRcdHN0bW1hY19wcmludF9hY3RwaHlpZihwcml2KTtcbjc0NTY6XHRcdH0gZWxzZSB7XG43NDU3Olx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtObyBIVyBETUEgZmVhdHVyZSByZWdpc3RlciBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuNzQ1ODpcdFx0fVxuNzQ1OTpcdFxuNzQ2MDpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9jb2UpIHtcbjc0NjE6XHRcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2VyeF9jc3VtID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2NvZTtcbjc0NjI6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1JYIENoZWNrc3VtIE9mZmxvYWQgRW5naW5lIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDYzOlx0XHRcdGlmIChwcml2LVx1MDAzZXN5bm9wc3lzX2lkIFx1MDAzYyBEV01BQ19DT1JFXzRfMDApXG43NDY0Olx0XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0NPRSBUeXBlICVkXFxuXCYjMzQ7LCBwcml2LVx1MDAzZWh3LVx1MDAzZXJ4X2NzdW0pO1xuNzQ2NTpcdFx0fVxuNzQ2NjpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9jb2UpXG43NDY3Olx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtUWCBDaGVja3N1bSBpbnNlcnRpb24gc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjc0Njg6XHRcbjc0Njk6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlcG10KSB7XG43NDcwOlx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtXYWtlLVVwIE9uIExhbiBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuNzQ3MTpcdFx0XHRkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKHByaXYtXHUwMDNlZGV2aWNlLCAxKTtcbjc0NzI6XHRcdFx0ZGV2bV9wbV9zZXRfd2FrZV9pcnEocHJpdi1cdTAwM2VkZXZpY2UsIHByaXYtXHUwMDNld29sX2lycSk7XG43NDczOlx0XHR9XG43NDc0Olx0XG43NDc1Olx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLm51bWJlcl9yeF9xdWV1ZXMgXHUwMDI2XHUwMDI2XG43NDc2Olx0XHQgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2UgXHUwMDNlIHByaXYtXHUwMDNlZG1hX2NhcC5udW1iZXJfcnhfcXVldWVzKSB7XG43NDc3Olx0XHRcdGRldl93YXJuKHByaXYtXHUwMDNlZGV2aWNlLFxuNzQ3ODpcdFx0XHRcdCBcJiMzNDtOdW1iZXIgb2YgUnggcXVldWVzICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcblwmIzM0Oyxcbjc0Nzk6XHRcdFx0XHQgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2UpO1xuNzQ4MDpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfcXVldWVzX3RvX3VzZSA9IHByaXYtXHUwMDNlZG1hX2NhcC5udW1iZXJfcnhfcXVldWVzO1xuNzQ4MTpcdFx0fVxuNzQ4MjpcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5udW1iZXJfdHhfcXVldWVzIFx1MDAyNlx1MDAyNlxuNzQ4MzpcdFx0ICAgIHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlIFx1MDAzZSBwcml2LVx1MDAzZWRtYV9jYXAubnVtYmVyX3R4X3F1ZXVlcykge1xuNzQ4NDpcdFx0XHRkZXZfd2Fybihwcml2LVx1MDAzZWRldmljZSxcbjc0ODU6XHRcdFx0XHQgXCYjMzQ7TnVtYmVyIG9mIFR4IHF1ZXVlcyAoJXUpIGV4Y2VlZHMgZG1hIGNhcGFiaWxpdHlcXG5cJiMzNDssXG43NDg2Olx0XHRcdFx0IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NjcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTVE1NQUMgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYHN0bW1hY19od2lmX2luaXRgIGhhcyBiZWVuIGNhbGxlZC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGhhcHBlbnMsIHJpZ2h0PyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqZG9pbmcqLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gd2hldGhlciBvciBub3QgaXQmIzM5O3MgYWN0dWFsbHkgYWNjZXNzaW5nIHRoZSByZWdpc3RlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0JiMzOTtzIHJlYWRpbmcgdGhlIGNoaXAmIzM5O3MgSUQgb3Igc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgd2l0aCBkZWZhdWx0IHZhbHVlcy4gRG9lcyB0aGlzIGZ1bmN0aW9uIHN0YXJ0IHRoZSBQSFkgYXV0b25lZ290aWF0aW9uIHNlcXVlbmNlPyBJcyBpdCBwcm9iaW5nIHRoZSBETUEgZW5naW5lPyBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50LCBlc3RhYmxpc2hpbmcgYSBiYXNlbGluZSBvZiB3aGF0IGFjdGlvbnMgYXJlIGJlaW5nIHBlcmZvcm1lZCBhdCB0aGlzIHN0YWdlLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSByZWdpc3RlciBhY2Nlc3NlcyB0byBlbnN1cmUgdGhlIGRyaXZlciBpcyBzZXR0aW5nIHVwIHRoZSBoYXJkd2FyZSBjb3JyZWN0bHkgYW5kIHRvIGNhdGNoIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGVhcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfaHdpZl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0yOTQ9c3RtbWFjX2h3aWZfZmluZChlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUsIHU4IHNucHN2ZXIsIHU4IGRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjMxNzppbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzE4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9NzAxPWludCBzdG1tYWNfcmVzZXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaDo3MDI6aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaC03MDMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NDA3PXN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQxNi1cdC8qIEluaXRpYWxpemUgSFcgSW50ZXJmYWNlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MTc6XHRyZXQgPSBzdG1tYWNfaHdpZl9pbml0KHByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDE4LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMzUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgU1RNTUFDIEhhcmR3YXJlIEludGVyZmFjZSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGZvciB0aGlzIFNUTU1BQyBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgc3RtbWFjX2h3aWZfaW5pdGAgZnVuY3Rpb24gbG9jYXRlZCB3aXRoaW4gYGh3aWYuY2AuIFRoaXMgaXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgdGhlIGhhcmR3YXJlJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIGRyaXZlciwgc2V0dGluZyB1cCByZWdpc3RlcnMsIGFuZCBwcmVwYXJpbmcgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbHMuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0IHBhcmFtZXRlcnMgaXQgdGFrZXMsIHdoYXQgaXQgZG9lcyB3aXRoIHRoZW0sIGFuZCBob3cgaXQgc2V0cyB1cCB0aGUgY29yZSBoYXJkd2FyZSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLCBpbiB0ZXJtcyBvZiB0aGUgZHJpdmVyJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIFNUTU1BQyBjb250cm9sbGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGZ1bmN0aW9uIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE3Olx0aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIDMxODpcdHtcbiAzMTk6XHRcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGU7XG4gMzIwOlx0XHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xuIDMyMTpcdFx0c3RydWN0IHN0bW1hY192ZXJzaW9uIHZlcnNpb247XG4gMzIyOlx0XHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7XG4gMzIzOlx0XHRib29sIG5lZWRzX3NldHVwID0gdHJ1ZTtcbiAzMjQ6XHRcdGludCByZXQ7XG4gMzI1Olx0XG4gMzI2Olx0XHRzdG1tYWNfZ2V0X3ZlcnNpb24ocHJpdiwgXHUwMDI2dmVyc2lvbik7XG4gMzI3Olx0XG4gMzI4Olx0XHQvKiBTYXZlIElEIGZvciBsYXRlciB1c2UgKi9cbiAzMjk6XHRcdHByaXYtXHUwMDNlc3lub3BzeXNfaWQgPSB2ZXJzaW9uLnNucHN2ZXI7XG4gMzMwOlx0XG4gMzMxOlx0XHRtYWMgPSBkZXZtX2t6YWxsb2MocHJpdi1cdTAwM2VkZXZpY2UsIHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7XG4gMzMyOlx0XHRpZiAoIW1hYylcbiAzMzM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzM0Olx0XG4gMzM1Olx0XHQvKiBDaGVjayBmb3IgSFcgc3BlY2lmaWMgc2V0dXAgZmlyc3QgKi9cbiAzMzY6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWFjX3NldHVwKSB7XG4gMzM3Olx0XHRcdHJldCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtYWNfc2V0dXAocHJpdiwgbWFjKTtcbiAzMzg6XHRcdFx0aWYgKHJldClcbiAzMzk6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM0MDpcdFxuIDM0MTpcdFx0XHRuZWVkc19zZXR1cCA9IGZhbHNlO1xuIDM0MjpcdFx0fVxuIDM0MzpcdFxuIDM0NDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bWFjLVx1MDAzZWlycV9jdHJsX2xvY2spO1xuIDM0NTpcdFxuIDM0NjpcdFx0LyogRmFsbGJhY2sgdG8gZ2VuZXJpYyBIVyAqL1xuIDM0NzpcdFxuIDM0ODpcdFx0LyogVXNlIHN5bm9wc3lzX2lkIHZhciBiZWNhdXNlIHNvbWUgc2V0dXBzIGNhbiBvdmVycmlkZSB0aGlzICovXG4gMzQ5Olx0XHRlbnRyeSA9IHN0bW1hY19od2lmX2ZpbmQoY29yZV90eXBlLCBwcml2LVx1MDAzZXN5bm9wc3lzX2lkLCB2ZXJzaW9uLmRldl9pZCk7XG4gMzUwOlx0XHRpZiAoIWVudHJ5KSB7XG4gMzUxOlx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXZpY2UsXG4gMzUyOlx0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGZpbmQgSFcgSUYgKGlkPTB4JXgsIGdtYWM9JWQvJWQpXFxuXCYjMzQ7LFxuIDM1MzpcdFx0XHRcdHZlcnNpb24uc25wc3ZlciwgY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQyxcbiAzNTQ6XHRcdFx0XHRjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCk7XG4gMzU1Olx0XG4gMzU2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM1NzpcdFx0fVxuIDM1ODpcdFxuIDM1OTpcdFx0LyogT25seSB1c2UgZ2VuZXJpYyBIVyBoZWxwZXJzIGlmIG5lZWRlZCAqL1xuIDM2MDpcdFx0bWFjLVx1MDAzZWRlc2MgPSBtYWMtXHUwMDNlZGVzYyA/IDogZW50cnktXHUwMDNlZGVzYztcbiAzNjE6XHRcdG1hYy1cdTAwM2VkbWEgPSBtYWMtXHUwMDNlZG1hID8gOiBlbnRyeS1cdTAwM2VkbWE7XG4gMzYyOlx0XHRtYWMtXHUwMDNlbWFjID0gbWFjLVx1MDAzZW1hYyA/IDogZW50cnktXHUwMDNlbWFjO1xuIDM2MzpcdFx0bWFjLVx1MDAzZXB0cCA9IG1hYy1cdTAwM2VwdHAgPyA6IGVudHJ5LVx1MDAzZWh3dGltZXN0YW1wO1xuIDM2NDpcdFx0bWFjLVx1MDAzZW1vZGUgPSBtYWMtXHUwMDNlbW9kZSA/IDogZW50cnktXHUwMDNlbW9kZTtcbiAzNjU6XHRcdG1hYy1cdTAwM2V0YyA9IG1hYy1cdTAwM2V0YyA/IDogZW50cnktXHUwMDNldGM7XG4gMzY2Olx0XHRtYWMtXHUwMDNlbW1jID0gbWFjLVx1MDAzZW1tYyA/IDogZW50cnktXHUwMDNlbW1jO1xuIDM2NzpcdFx0bWFjLVx1MDAzZWVzdCA9IG1hYy1cdTAwM2Vlc3QgPyA6IGVudHJ5LVx1MDAzZWVzdDtcbiAzNjg6XHRcdG1hYy1cdTAwM2V2bGFuID0gbWFjLVx1MDAzZXZsYW4gPyA6IGVudHJ5LVx1MDAzZXZsYW47XG4gMzY5Olx0XG4gMzcwOlx0XHRwcml2LVx1MDAzZWh3ID0gbWFjO1xuIDM3MTpcdFx0cHJpdi1cdTAwM2VmcGVfY2ZnLnJlZyA9IGVudHJ5LVx1MDAzZXJlZ3MuZnBlX3JlZztcbiAzNzI6XHRcdHByaXYtXHUwMDNlcHRwYWRkciA9IHByaXYtXHUwMDNlaW9hZGRyICYjNDM7IGVudHJ5LVx1MDAzZXJlZ3MucHRwX29mZjtcbiAzNzM6XHRcdHByaXYtXHUwMDNlbW1jYWRkciA9IHByaXYtXHUwMDNlaW9hZGRyICYjNDM7IGVudHJ5LVx1MDAzZXJlZ3MubW1jX29mZjtcbiAzNzQ6XHRcdG1lbWNweShcdTAwMjZwcml2LVx1MDAzZXB0cF9jbG9ja19vcHMsIGVudHJ5LVx1MDAzZXB0cCxcbiAzNzU6XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHB0cF9jbG9ja19pbmZvKSk7XG4gMzc2Olx0XG4gMzc3Olx0XHRpZiAoZW50cnktXHUwMDNlZXN0KVxuIDM3ODpcdFx0XHRwcml2LVx1MDAzZWVzdGFkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBlbnRyeS1cdTAwM2VyZWdzLmVzdF9vZmY7XG4gMzc5Olx0XG4gMzgwOlx0XHQvKiBFbnRyeSBmb3VuZCAqL1xuIDM4MTpcdFx0aWYgKG5lZWRzX3NldHVwKSB7XG4gMzgyOlx0XHRcdHJldCA9IGVudHJ5LVx1MDAzZXNldHVwKHByaXYpO1xuIDM4MzpcdFx0XHRpZiAocmV0KVxuIDM4NDpcdFx0XHRcdHJldHVybiByZXQ7XG4gMzg1Olx0XHR9XG4gMzg2Olx0XG4gMzg3Olx0XHQvKiBTYXZlIHF1aXJrcywgaWYgbmVlZGVkIGZvciBwb3N0ZXJpb3IgdXNlICovXG4gMzg4Olx0XHRwcml2LVx1MDAzZWh3aWZfcXVpcmtzID0gZW50cnktXHUwMDNlcXVpcmtzO1xuIDM4OTpcdFxuIDM5MDpcdFx0cmV0dXJuIDA7XG4gMzkxOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY1MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNUTU1BQyBWZXJzaW9uIENoZWNrKioKCkFscmlnaHQsIHRoZSBjb2RlJiMzOTtzIGNhbGxpbmcgYHN0bW1hY19nZXRfdmVyc2lvbihwcml2LCAmYW1wO3ZlcnNpb24pYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0JiMzOTtzIGRvaW5nLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgc3RtbWFjX2dldF92ZXJzaW9uYCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgcHJvYmFibHkgaG93IHRoZSBkcml2ZXIgZmlndXJlcyBvdXQgdGhlIGhhcmR3YXJlIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uLCBvciBhIHN1cHBvcnRlZCBmZWF0dXJlIHNldCBmb3IgdGhlIFNUTU1BQyBFdGhlcm5ldCBjb250cm9sbGVyIGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGgsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSBmb3IgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBJdCBpcyBtb3N0IGxpa2VseSBwYXNzaW5nIGEgcG9pbnRlciB0byBhIGB2ZXJzaW9uYCBzdHJ1Y3QsIGZpbGxpbmcgaW4gaGFyZHdhcmUtc3BlY2lmaWMgdmVyc2lvbiBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGJlIGNydWNpYWwgZm9yIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIGhhbmRsZWQgcHJvcGVybHksIGFuZCB0aGUgY29kZSB0YWtlcyB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uIGJhc2VkIG9uIHRoZSBpZGVudGlmaWVkIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gSSBleHBlY3QgdGhpcyBjYWxsIGlzIGZ1bmRhbWVudGFsIGZvciB2ZXJpZnlpbmcgY29tcGF0aWJpbGl0eSBhbmQgcG90ZW50aWFsbHkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGNlcnRhaW4gZHJpdmVyIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSBkZXRlY3RlZCBoYXJkd2FyZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSByZXR1cm5lZCB2ZXJzaW9uIHN0cnVjdCBpcyB0aGVuIHVzZWQ7IHRoYXQmIzM5O3MgdGhlIG5leHQgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19nZXRfdmVyc2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTY9c3RydWN0IHN0bW1hY192ZXJzaW9uIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjE6c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yMi1cdFx0XHQgICAgICAgc3RydWN0IHN0bW1hY192ZXJzaW9uICp2ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTMxNz1pbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMyNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMjY6XHRzdG1tYWNfZ2V0X3ZlcnNpb24ocHJpdiwgXHUwMDI2dmVyc2lvbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIzOAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIGVtYmVkZGVkIHN5c3RlbXMgYW5kIGRldmljZSBkcml2ZXJzOgoKKipBbmFseXppbmcgdGhlIENhbGwgdG8gYHN0bW1hY19nZXRfdmVyc2lvbmAqKgoKQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhcjogZGl2ZSBpbnRvIHRoZSBgc3RtbWFjX2dldF92ZXJzaW9uYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFVuZGVyc3RhbmRpbmcgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gb2YgdGhlIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgZHJpdmVyIGlzIGNydWNpYWwsIGl0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIG9mIGFsbW9zdCBldmVyeXRoaW5nLiBJdCB1c3VhbGx5IGludm9sdmVzIHJlYWRpbmcgcmVnaXN0ZXJzLCBtYXliZSBzb21lIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGRyaXZlciwgYW5kIGZvcm1hdHRpbmcgdGhhdCBkYXRhIGZvciB0aGUgdXNlci4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBJcyBpdCBhIGRpcmVjdCByZWdpc3RlciByZWFkLCBvciBkb2VzIGl0IGludm9sdmUgc29tZSBtb3JlIGNvbXBsZXggbG9naWMgdG8gZGV0ZXJtaW5lIHRoZSBkcml2ZXImIzM5O3MgcmV2aXNpb24sIGZlYXR1cmUgc2V0LCBvciBoYXJkd2FyZSBjb21wYXRpYmlsaXR5PyBIb3BlZnVsbHksIGl0IGlzIHdlbGwgZG9jdW1lbnRlZDsgb3RoZXJ3aXNlIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlZ2lzdGVyLWxldmVsIGludGVycHJldGF0aW9uIG9mIGl0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGRlYnVnZ2luZyBhbmQgZW5zdXJpbmcgY29tcGF0aWJpbGl0eSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgaGFyZHdhcmUgcmV2aXNpb25zIG9yIGtlcm5lbCB2ZXJzaW9ucy4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIGl0JiMzOTtzIHdvcmtpbmcgd2l0aCBhbmQgaG93IHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIHN0cnVjdHVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdHN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gIDIyOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxuICAyMzpcdHtcbiAgMjQ6XHRcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGU7XG4gIDI1Olx0XHR1bnNpZ25lZCBpbnQgdmVyc2lvbl9vZmZzZXQ7XG4gIDI2Olx0XHR1MzIgdmVyc2lvbjtcbiAgMjc6XHRcbiAgMjg6XHRcdHZlci1cdTAwM2VzbnBzdmVyID0gMDtcbiAgMjk6XHRcdHZlci1cdTAwM2VkZXZfaWQgPSAwO1xuICAzMDpcdFxuICAzMTpcdFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX01BQzEwMClcbiAgMzI6XHRcdFx0cmV0dXJuO1xuICAzMzpcdFxuICAzNDpcdFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUMpXG4gIDM1Olx0XHRcdHZlcnNpb25fb2Zmc2V0ID0gR01BQ19WRVJTSU9OO1xuICAzNjpcdFx0ZWxzZVxuICAzNzpcdFx0XHR2ZXJzaW9uX29mZnNldCA9IEdNQUM0X1ZFUlNJT047XG4gIDM4Olx0XG4gIDM5Olx0XHR2ZXJzaW9uID0gcmVhZGwocHJpdi1cdTAwM2Vpb2FkZHIgJiM0MzsgdmVyc2lvbl9vZmZzZXQpO1xuICA0MDpcdFx0aWYgKHZlcnNpb24gPT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmVyc2lvbiBSZWFkKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UmIzM5O3JlIHB1bGxpbmcgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24uIFRoZSBjb2RlIGlzIHJlYWRpbmcgZnJvbSBgcHJpdi0mZ3Q7aW9hZGRyYCBvZmZzZXQgYnkgYHZlcnNpb25fb2Zmc2V0YC4gU3RhbmRhcmQgc3R1ZmYuIEJ1dCB0aGVuLCBJJiMzOTttIHRoaW5raW5nLCB3aGF0IGhhcHBlbnMgd2l0aCBhIGR1bW15IGRldmljZT8gIGByZWFkbGAgY291bGQgY291Z2ggdXAgZWl0aGVyIGAweGZmZmZmZmZmYCBvciBhIHN0cmFpZ2h0IGAwYCwgZGVwZW5kaW5nIG9uIGhvdyB0aGUgbWVtb3J5IG1hcHBpbmcmIzM5O3Mgc2V0IHVwLiBUaGUgcmVhbGx5IGludGVyZXN0aW5nIHNjZW5hcmlvIGlzIGlmIHdlIGdldCBhIGAwYC4gVGhhdCBsaWtlbHkgbWVhbnMgd2UmIzM5O2xsIGZhaWwgdG8gSUQgdGhlIGhhcmR3YXJlIGludGVyZmFjZS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBMZXQmIzM5O3MgZGlnIGludG8gd2hhdCBoYXBwZW5zIHNwZWNpZmljYWxseSBpZiBgdmVyc2lvbiA9PSAwYC4gV2UmIzM5O3ZlIGdvdCB0byBjb3ZlciBhbGwgdGhlIGJhc2VzIHRvIG1ha2UgdGhpcyB0cnVseSByb2J1c3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0aWYgKHZlcnNpb24gPT0gMCkge1xuICA0MTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7VmVyc2lvbiBJRCBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiAgNDI6XHRcdFx0cmV0dXJuO1xuICA0MzpcdFx0fVxuICA0NDpcdFxuICA0NTpcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1VzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XFxuXCYjMzQ7LFxuICA0NjpcdFx0XHQgRklFTERfR0VUKERXTUFDX1VTRVJWRVIsIHZlcnNpb24pLFxuICA0NzpcdFx0XHQgRklFTERfR0VUKERXTUFDX1NOUFNWRVIsIHZlcnNpb24pKTtcbiAgNDg6XHRcbiAgNDk6XHRcdHZlci1cdTAwM2VzbnBzdmVyID0gRklFTERfR0VUKERXTUFDX1NOUFNWRVIsIHZlcnNpb24pO1xuICA1MDpcdFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxuICA1MTpcdFx0XHR2ZXItXHUwMDNlZGV2X2lkID0gRklFTERfR0VUKERXTUFDX1VTRVJWRVIsIHZlcnNpb24pO1xuICA1MjpcdH1cbiAgNTM6XHRcbiAgNTQ6XHRzdGF0aWMgdm9pZCBzdG1tYWNfZHdtYWNfbW9kZV9xdWlyayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gIDU1Olx0e1xuICA1NjpcdFx0c3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjID0gcHJpdi1cdTAwM2VodztcbiAgNTc6XHRcbiAgNTg6XHRcdGlmIChwcml2LVx1MDAzZWNoYWluX21vZGUpIHtcbiAgNTk6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0NoYWluIG1vZGUgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDIxCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEZWNvZGluZyB0aGUgVmVyc2lvbiBDaGVjayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQ6IGBpZiB2ZXJzaW9uID09IDBgLiBTbywgaWYgdGhlIHNvZnR3YXJlJiMzOTtzIHZlcnNpb24gaXMgYXQgaXRzIGluaXRpYWwgc3RhdGUsIHdoaWNoIEkgdXN1YWxseSByZXByZXNlbnQgd2l0aCAmIzM5OzAmIzM5OywgdGhlbiB0aGlzIHZhcmlhYmxlLCBgdmVyLSZndDtzbnBzdmVyYCwgaXMgYWxzbyBnb2luZyB0byBiZSBzZXQgdG8gemVyby4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIGNvbnNpc3RlbnQgZnJvbSB0aGUgc3RhcnQuCgpOb3csIHRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB3aGF0IGhhcHBlbnMgbmV4dC4gV2l0aCBgc25wc3ZlcmAgY29uZmlybWVkIGFzIHplcm8sIHRoZSBjb2RlIHByb2NlZWRzIHRvIGNhbGwgYHN0bW1hY19od2lmX2ZpbmRgLiBDcnVjaWFsbHksIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIGBzbnBzdmVyID0gMGAuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgYHN0bW1hY19od2lmX2ZpbmRgIGxpa2VseSB1c2VzIHRoZSBgc25wc3ZlcmAgdmFsdWUgdG8gZGV0ZXJtaW5lIHdoaWNoIGhhcmR3YXJlIGludGVyZmFjZSB0byBhdHRhY2ggdG8sIG9yIHBvc3NpYmx5IGhvdyB0byBpbml0aWFsaXplIHRoZSBoYXJkd2FyZSBhcHByb3ByaWF0ZWx5LiBQYXNzaW5nIHplcm8gY291bGQgbWVhbiBhIGRlZmF1bHQgb3IgbGVnYWN5IGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgYSAmIzM5O2Jlc3QgZ3Vlc3MmIzM5OyBpbml0aWFsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NDpcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXG4gMjk1Olx0e1xuIDI5NjpcdFx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcbiAyOTc6XHRcdGludCBpO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yIChpID0gQVJSQVlfU0laRShzdG1tYWNfaHcpIC0gMTsgaSBcdTAwM2U9IDA7IGktLSkge1xuIDMwMDpcdFx0XHRlbnRyeSA9IFx1MDAyNnN0bW1hY19od1tpXTtcbiAzMDE6XHRcbiAzMDI6XHRcdFx0aWYgKGNvcmVfdHlwZSAhPSBlbnRyeS1cdTAwM2Vjb3JlX3R5cGUpXG4gMzAzOlx0XHRcdFx0Y29udGludWU7XG4gMzA0Olx0XHRcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xuIDMwNTpcdFx0XHRpZiAoc25wc3ZlciBcdTAwM2MgZW50cnktXHUwMDNlbWluX2lkKVxuIDMwNjpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwNzpcdFx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMgXHUwMDI2XHUwMDI2XG4gMzA4Olx0XHRcdCAgICBkZXZfaWQgIT0gZW50cnktXHUwMDNlZGV2X2lkKVxuIDMwOTpcdFx0XHRcdGNvbnRpbnVlO1xuIDMxMDpcdFxuIDMxMTpcdFx0XHRyZXR1cm4gZW50cnk7XG4gMzEyOlx0XHR9XG4gMzEzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDQ5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIHRoZSBTTlAgVmVyc2lvbiBhbmQgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIqKgoKQWxyaWdodCwgc28gaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGUgY3VycmVudCBsb2dpYyBpcyAqdmVyeSogc3BlY2lmaWMgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGBzbnBzdmVyYCB2YXJpYWJsZSBiZWluZyBlcXVhbCB0byB6ZXJvLiBJdCBtZWFucyB0aGUgZmlsdGVyaW5nIHdpbGwgYmUgaW5jcmVkaWJseSBzdHJpY3QsIG9ubHkgcHVsbGluZyBpbiBlbnRyaWVzIHdoZXJlIGBtaW5faWRgIGlzICphbHNvKiB6ZXJvLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgdG8gbm90ZSwgYXMgaXQgZHJhc3RpY2FsbHkgbGltaXRzIHRoZSBwb3RlbnRpYWwgbWF0Y2hlcyBpbiB0aGUgZGF0YWJhc2UuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGludGVycHJldGluZyB0aGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkgb3IgcHJvY2VzcyB0aGF0JiMzOTtzIHVzaW5nIHRoaXMgY29uZGl0aW9uLiBJdOKAmXMgZXNzZW50aWFsbHkgYSAmIzM0O3N0cmljdCBtYXRjaCYjMzQ7IHNjZW5hcmlvLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHN0bW1hY19od2AgYXJyYXkuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgdGhlIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgZHJpdmVyLCBidXQgSSBuZWVkIHRvIGRpdmUgaW4gYW5kIGNvbmZpcm0gdGhhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSBpcyByZXByZXNlbnRlZCBhdCB0aGlzIGxldmVsLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGxvd2VyIGxheWVycyBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgY29ycmVjdC4gTGV04oCZcyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2h3XFxbXFxdJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0xMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTEyNy1cdGludCAoKnF1aXJrcykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoxMjg6fSBzdG1tYWNfaHdbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xMjktXHQvKiBOT1RFOiBOZXcgSFcgdmVyc2lvbnMgc2hhbGwgZ28gdG8gdGhlIGVuZCBvZiB0aGlzIHRhYmxlICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTQxCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBzdG1tYWNfaHdgIEFycmF5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc3RtbWFjX2h3YCBhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSwgcHVycG9zZSwgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIFNUTU1BQyBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyZWF0IGl0IGFzIGEgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIsIGEgY29sbGVjdGlvbiBvZiByZWdpc3RlcnMsIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLgoKSSYjMzk7bSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHBvdGVudGlhbCB1c2UgY2FzZXMuIElzIHRoaXMgYSBsb29rLXVwIHRhYmxlIGZvciByZWdpc3RlciBvZmZzZXRzPyBBcmUgdGhlcmUgYml0ZmllbGQgZGVmaW5pdGlvbnMgaW4gaGVyZSwgcGVyaGFwcyBvcmdhbml6ZWQgYnkgZnVuY3Rpb25hbCBibG9jayB3aXRoaW4gdGhlIE1BQz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgRE1BIGNoYW5uZWwgY29uZmlndXJhdGlvbiwgTUFDIGFkZHJlc3MgcmVnaXN0ZXJzLCBpbnRlcnJ1cHQgY29udHJvbCwgYW5kIHN0YXRpc3RpY3MgY291bnRlcnMg4oCTIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHMuIEnigJltIGV4cGVjdGluZyBhIG1peCBvZiByYXcgcmVnaXN0ZXIgYWRkcmVzc2VzIChvciBzeW1ib2xpYyByZXByZXNlbnRhdGlvbnMpLCBtYXNrIHZhbHVlcyBmb3IgYml0ZmllbGQgbWFuaXB1bGF0aW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBkZWZhdWx0IHZhbHVlcyBvciBpbml0aWFsaXphdGlvbiBzZXR0aW5ncy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhcnJheSBlbGVtZW50cywgdHJ5aW5nIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzIG9yIGdyb3VwaW5ncyB0aGF0IGltcGx5IHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaGVyZSB3aWxsIGJlIGNyaXRpY2FsLiBJZiBJIHNlZSBjb25zaXN0ZW50IHByZWZpeGVzIG9yIHN1ZmZpeGVzLCB0aGF0IGNvdWxkIHJldmVhbCB2YWx1YWJsZSBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlciBvcmdhbml6YXRpb24gYW5kIG92ZXJhbGwgbW9kdWxlIGludGVyYWN0aW9uLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZSBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIGFuZCBjb250cm9scyB0aGUgU1RNTUFDIGhhcmR3YXJlLiBUaGlzIGFycmF5IGhvbGRzIHRoZSBrZXkgdG8gdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uLCBzbyBsZXQmIzM5O3Mgc3RhcnQgcmVhZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyODpcdH0gc3RtbWFjX2h3W10gPSB7XG4gMTI5Olx0XHQvKiBOT1RFOiBOZXcgSFcgdmVyc2lvbnMgc2hhbGwgZ28gdG8gdGhlIGVuZCBvZiB0aGlzIHRhYmxlICovXG4gMTMwOlx0XHR7XG4gMTMxOlx0XHRcdC5jb3JlX3R5cGUgPSBEV01BQ19DT1JFX01BQzEwMCxcbiAxMzI6XHRcdFx0Lm1pbl9pZCA9IDAsXG4gMTMzOlx0XHRcdC5yZWdzID0ge1xuIDEzNDpcdFx0XHRcdC5wdHBfb2ZmID0gUFRQX0dNQUMzX1hfT0ZGU0VULFxuIDEzNTpcdFx0XHRcdC5tbWNfb2ZmID0gTU1DX0dNQUMzX1hfT0ZGU0VULFxuIDEzNjpcdFx0XHR9LFxuIDEzNzpcdFx0XHQuZGVzYyA9IE5VTEwsXG4gMTM4Olx0XHRcdC5kbWEgPSBcdTAwMjZkd21hYzEwMF9kbWFfb3BzLFxuIDEzOTpcdFx0XHQubWFjID0gXHUwMDI2ZHdtYWMxMDBfb3BzLFxuIDE0MDpcdFx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZkd21hYzEwMDBfcHRwLFxuIDE0MTpcdFx0XHQucHRwID0gXHUwMDI2ZHdtYWMxMDAwX3B0cF9jbG9ja19vcHMsXG4gMTQyOlx0XHRcdC5tb2RlID0gTlVMTCxcbiAxNDM6XHRcdFx0LnRjID0gTlVMTCxcbiAxNDQ6XHRcdFx0Lm1tYyA9IFx1MDAyNmR3bWFjX21tY19vcHMsXG4gMTQ1Olx0XHRcdC5zZXR1cCA9IGR3bWFjMTAwX3NldHVwLFxuIDE0NjpcdFx0XHQucXVpcmtzID0gc3RtbWFjX2R3bWFjMV9xdWlya3MsXG4gMTQ3Olx0XHR9LCB7XG4gMTQ4Olx0XHRcdC5jb3JlX3R5cGUgPSBEV01BQ19DT1JFX0dNQUMsXG4gMTQ5Olx0XHRcdC5taW5faWQgPSAwLFxuIDE1MDpcdFx0XHQucmVncyA9IHtcbiAxNTE6XHRcdFx0XHQucHRwX29mZiA9IFBUUF9HTUFDM19YX09GRlNFVCxcbiAxNTI6XHRcdFx0XHQubW1jX29mZiA9IE1NQ19HTUFDM19YX09GRlNFVCxcbiAxNTM6XHRcdFx0fSxcbiAxNTQ6XHRcdFx0LmRlc2MgPSBOVUxMLFxuIDE1NTpcdFx0XHQuZG1hID0gXHUwMDI2ZHdtYWMxMDAwX2RtYV9vcHMsXG4gMTU2Olx0XHRcdC5tYWMgPSBcdTAwMjZkd21hYzEwMDBfb3BzLFxuIDE1NzpcdFx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZkd21hYzEwMDBfcHRwLFxuIDE1ODpcdFx0XHQucHRwID0gXHUwMDI2ZHdtYWMxMDAwX3B0cF9jbG9ja19vcHMsXG4gMTU5Olx0XHRcdC5tb2RlID0gTlVMTCxcbiAxNjA6XHRcdFx0LnRjID0gTlVMTCxcbiAxNjE6XHRcdFx0Lm1tYyA9IFx1MDAyNmR3bWFjX21tY19vcHMsXG4gMTYyOlx0XHRcdC5zZXR1cCA9IGR3bWFjMTAwMF9zZXR1cCxcbiAxNjM6XHRcdFx0LnF1aXJrcyA9IHN0bW1hY19kd21hYzFfcXVpcmtzLFxuIDE2NDpcdFx0fSwge1xuIDE2NTpcdFx0XHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNCxcbiAxNjY6XHRcdFx0Lm1pbl9pZCA9IDAsXG4gMTY3Olx0XHRcdC5yZWdzID0ge1xuIDE2ODpcdFx0XHRcdC5wdHBfb2ZmID0gUFRQX0dNQUM0X09GRlNFVCxcbiAxNjk6XHRcdFx0XHQubW1jX29mZiA9IE1NQ19HTUFDNF9PRkZTRVQsXG4gMTcwOlx0XHRcdFx0LmVzdF9vZmYgPSBFU1RfR01BQzRfT0ZGU0VULFxuIDE3MTpcdFx0XHR9LFxuIDE3MjpcdFx0XHQuZGVzYyA9IFx1MDAyNmR3bWFjNF9kZXNjX29wcyxcbiAxNzM6XHRcdFx0LmRtYSA9IFx1MDAyNmR3bWFjNF9kbWFfb3BzLFxuIDE3NDpcdFx0XHQubWFjID0gXHUwMDI2ZHdtYWM0X29wcyxcbiAxNzU6XHRcdFx0LnZsYW4gPSBcdTAwMjZkd21hY192bGFuX29wcyxcbiAxNzY6XHRcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2c3RtbWFjX3B0cCxcbiAxNzc6XHRcdFx0LnB0cCA9IFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc5MAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNOUFNWIERyaXZlciBDb3JlIE1hdGNoaW5nIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBsb2dpYywgYW5kIGl0IHNlZW1zIGxpa2UgaWYgYHNucHN2ZXJgIGlzIHplcm8sIHRoZW4gd2UmIzM5O3JlIGdvaW5nIHRvIG1hdGNoIGBEV01BQ19DT1JFX0dNQUM0YCB0byBhIGBtaW5faWRgIG9mIHplcm8gKG9yIGEgc2ltaWxhciBjb25zdGFudCwgYmFzZWQgb24gYGNvcmVfdHlwZWApLiBUaGF0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29uLiBCdXQsIGhvbGQgb24gYSBzZWMuLi53aGVyZSBkb2VzIGBjb3JlX3R5cGVgIGFjdHVhbGx5IGNvbWUgZnJvbT8gSSBrbm93IGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkIHRocm91Z2ggYHByaXYtJmd0O3BsYXQtJmd0O2NvcmVfdHlwZWAuIE5lZWQgdG8gdHJhY2UgdGhhdCBiYWNrLi4uCgpSaWdodC4gSXQgbG9va3MgbGlrZSBgcHJpdi0mZ3Q7cGxhdC0mZ3Q7Y29yZV90eXBlYCBpcyBpbml0aWFsaXplZCB3aXRoaW4gYHN0bW1hY19wY2lfcHJvYmVgLCB1c2luZyBgaW5mby0mZ3Q7c2V0dXAocGRldiwgcGxhdClgLiBUaGUgcGxhdGZvcm0gZGF0YSBpcyB0aGVuIHNldHVwIGZyb20gd2l0aGluIHRoZSBwcm9iZSBmdW5jdGlvbi4gU28gaXQgbG9va3MgbGlrZSB0aGUgYGluZm8tJmd0O3NldHVwYCBmdW5jdGlvbiBpcyBrZXkgdG8gdGhlIG92ZXJhbGwgZGV2aWNlIHNldHVwLCBhbmQgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBzdG1tYWNfcGNpX2luZm9gIHNldHVwIGZ1bmN0aW9ucyB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cgYGNvcmVfdHlwZWAgZ2V0cyBhc3NpZ25lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX3BjaV9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMC1cdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MzM9c3RhdGljIGludCBzdG1tYWNfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy00OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzo1MDpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBzdG1tYWNfcGNpX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNTEtXHQuc2V0dXAgPSBzdG1tYWNfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz01ND1zdGF0aWMgaW50IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTAyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHNucHNfZ21hYzVfcGNpX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTAzLVx0LnNldHVwID0gc25wc19nbWFjNV9kZWZhdWx0X2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTExOD1zdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTIxOlx0c3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICopaWQtXHUwMDNlZHJpdmVyX2RhdGE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIyLVx0c3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0yMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0bW1hY19pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNDpcdHsgUENJX0RFVklDRV9EQVRBKFNUTU1BQywgU1RNTUFDLCBcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA1Olx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNSUNSTywgTUFDLCBcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjA2LVx0eyBQQ0lfREVWSUNFX0RBVEEoU1lOT1BTWVMsIEdNQUM1X0lELCBcdTAwMjZzbnBzX2dtYWM1X3BjaV9pbmZvKSB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTA2OQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiB0aGUgc3ViamVjdCBtYXR0ZXI6CgoqKkNoZWNraW5nIGBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YWAqKgoKQWxyaWdodCwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGFuYWx5c2lzIG9yIG1vZGVsaW5nLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGZvdW5kYXRpb25hbCBkYXRhc2V0LCBgc25wc19nbWFjNV9kZWZhdWx0X2RhdGFgLCBpcyBpbiBvcmRlci4gVGhpcyBpcyB0aGUgY29ybmVyc3RvbmUuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpdHMgaW50ZWdyaXR5IGFuZCBzdWl0YWJpbGl0eS4gSSYjMzk7bSB0aGlua2luZzogaXMgaXQgdGhlIGNvcnJlY3QgdmVyc2lvbj8gQXJlIHRoZSBleHBlY3RlZCBjb2x1bW5zIHByZXNlbnQgYW5kIGNvcnJlY3RseSBsYWJlbGVkPyBBcmUgdGhlIGRhdGEgdHlwZXMgY29uc2lzdGVudCB3aXRoIHdoYXQgSSYjMzk7bSBleHBlY3RpbmcgZm9yIHRoZSB2YXJpYWJsZXMgd2l0aGluPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgZ2xhcmluZyBpc3N1ZXMsIG1pc3NpbmcgdmFsdWVzIHRoYXQgbmVlZCBpbW1lZGlhdGUgYXR0ZW50aW9uLCBvciB1bmV4cGVjdGVkIG91dGxpZXJzIHRoYXQgd291bGQgdGhyb3cgb2ZmIGFueSBkb3duc3RyZWFtIGFuYWx5c2VzPyBFc3NlbnRpYWxseSwgaXMgdGhlIGRhdGEgY2xlYW4sIGNvbXBsZXRlLCBhbmQgaW4gYSBmb3JtYXQgdGhhdCYjMzk7cyByZWFkeSBmb3IgbWUgdG8gZ2V0IHRvIHRoZSBtZWF0IG9mIHRoaW5ncz8gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9ucyBJJiMzOTt2ZSBtYWRlIGFib3V0IHRoaXMgZGF0YXNldCBhcmUgYWN0dWFsbHkgY29ycmVjdC4gR290dGEgc3RhcnQgd2l0aCBhIHNvbGlkIGZvdW5kYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NDpcdHN0YXRpYyBpbnQgc25wc19nbWFjNV9kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gIDU1Olx0XHRcdFx0XHQgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpXG4gIDU2Olx0e1xuICA1NzpcdFx0aW50IGk7XG4gIDU4Olx0XG4gIDU5Olx0XHRwbGF0LVx1MDAzZWNsa19jc3IgPSBTVE1NQUNfQ1NSXzI1MF8zMDBNO1xuICA2MDpcdFx0cGxhdC1cdTAwM2Vjb3JlX3R5cGUgPSBEV01BQ19DT1JFX0dNQUM0O1xuICA2MTpcdFx0cGxhdC1cdTAwM2Vmb3JjZV9zZl9kbWFfbW9kZSA9IHRydWU7XG4gIDYyOlx0XHRwbGF0LVx1MDAzZWZsYWdzIHw9IFNUTU1BQ19GTEFHX1RTT19FTjtcbiAgNjM6XHRcdHBsYXQtXHUwMDNlcG10ID0gdHJ1ZTtcbiAgNjQ6XHRcbiAgNjU6XHRcdC8qIFNldCBkZWZhdWx0IG51bWJlciBvZiBSWCBhbmQgVFggcXVldWVzIHRvIHVzZSAqL1xuICA2NjpcdFx0cGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlID0gNDtcbiAgNjc6XHRcdHBsYXQtXHUwMDNlcnhfcXVldWVzX3RvX3VzZSA9IDQ7XG4gIDY4Olx0XG4gIDY5Olx0XHRwbGF0LVx1MDAzZXR4X3NjaGVkX2FsZ29yaXRobSA9IE1UTF9UWF9BTEdPUklUSE1fV1JSO1xuICA3MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlOyBpJiM0MzsmIzQzOykge1xuICA3MTpcdFx0XHRwbGF0LVx1MDAzZXR4X3F1ZXVlc19jZmdbaV0ubW9kZV90b191c2UgPSBNVExfUVVFVUVfRENCO1xuICA3MjpcdFx0XHRwbGF0LVx1MDAzZXR4X3F1ZXVlc19jZmdbaV0ud2VpZ2h0ID0gMjU7XG4gIDczOlx0XHRcdGlmIChpIFx1MDAzZSAwKVxuICA3NDpcdFx0XHRcdHBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1tpXS50YnNfZW4gPSAxO1xuICA3NTpcdFx0fVxuICA3NjpcdFxuICA3NzpcdFx0cGxhdC1cdTAwM2VyeF9zY2hlZF9hbGdvcml0aG0gPSBNVExfUlhfQUxHT1JJVEhNX1NQO1xuICA3ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGxhdC1cdTAwM2VyeF9xdWV1ZXNfdG9fdXNlOyBpJiM0MzsmIzQzOylcbiAgNzk6XHRcdFx0cGxhdC1cdTAwM2VyeF9xdWV1ZXNfY2ZnW2ldLm1vZGVfdG9fdXNlID0gTVRMX1FVRVVFX0RDQjtcbiAgODA6XHRcbiAgODE6XHRcdHBsYXQtXHUwMDNlYnVzX2lkID0gMTtcbiAgODI6XHRcdHBsYXQtXHUwMDNlcGh5X2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJO1xuICA4MzpcdFxuICA4NDpcdFx0cGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZXBibCA9IDMyO1xuICA4NTpcdFx0cGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZXBibHg4ID0gdHJ1ZTtcbiAgODY6XHRcbiAgODc6XHRcdC8qIEF4aSBDb25maWd1cmF0aW9uICovXG4gIDg4Olx0XHRwbGF0LVx1MDAzZWF4aSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwbGF0LVx1MDAzZWF4aSksIEdGUF9LRVJORUwpO1xuICA4OTpcdFx0aWYgKCFwbGF0LVx1MDAzZWF4aSlcbiAgOTA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDkxOlx0XG4gIDkyOlx0XHRwbGF0LVx1MDAzZWF4aS1cdTAwM2VheGlfd3Jfb3NyX2xtdCA9IDMxO1xuICA5MzpcdFx0cGxhdC1cdTAwM2VheGktXHUwMDNlYXhpX3JkX29zcl9sbXQgPSAzMTtcbiAgOTQ6XHRcbiAgOTU6XHRcdHBsYXQtXHUwMDNlYXhpLVx1MDAzZWF4aV9mYiA9IGZhbHNlO1xuICA5NjpcdFx0cGxhdC1cdTAwM2VheGktXHUwMDNlYXhpX2JsZW5fcmVndmFsID0gRE1BX0FYSV9CTEVONCB8IERNQV9BWElfQkxFTjggfFxuICA5NzpcdFx0XHRcdFx0ICAgICBETUFfQVhJX0JMRU4xNiB8IERNQV9BWElfQkxFTjMyO1xuICA5ODpcdFxuICA5OTpcdFx0cmV0dXJuIDA7XG4gMTAwOlx0fVxuIDEwMTpcdFxuIDEwMjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHNucHNfZ21hYzVfcGNpX2luZm8gPSB7XG4gMTAzOlx0XHQuc2V0dXAgPSBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyMjAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEV01BQyBDb3JlIGFuZCBUQyBPcGVyYXRpb25zKioKCk9rYXksIHNvIGlmIHRoZSBgY29yZV90eXBlYCBpcyBjb25maXJtZWQgYXMgYERXTUFDX0NPUkVfR01BQzRgIGFuZCB0aGUgYHNucHN2ZXJgIGlzIHplcm8sIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGhpdHRpbmcgdGhhdCBgRFdNQUNfQ09SRV9HTUFDNGAgZW50cnkgd2l0aCB0aGUgYG1pbl9pZCA9IDBgLiBSaWdodCwgc28sIHRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgcGFydGljdWxhciBlbnRyeSBpcyBsaW5rZWQgdG8gYC50YyA9ICZhbXA7ZHdtYWM0X3RjX29wc2AuIEhtbW0sIGhvbGQgb24gYSBzZWNvbmQuLi50aGlzIHBhdGNoIGlzIGFjdHVhbGx5ICptb2RpZnlpbmcqIGJvdGggYGR3bWFjNF90Y19vcHNgIGFuZCBgZHdtYWM1MTBfdGNfb3BzYCEgV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIExldCBtZSBnbyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgYGR3bWFjNF90Y19vcHNgIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHdtYWM0X3RjX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xNzgtXHRcdC5tb2RlID0gTlVMTCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoxNzk6XHRcdC50YyA9IFx1MDAyNmR3bWFjNF90Y19vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMTgwLVx0XHQubW1jID0gXHUwMDI2ZHdtYWNfbW1jX29wcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9Njk0PWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX29wcyBkd21hYzUxMF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg6Njk1OmV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTY5Ni1leHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTEzOTI9c3RhdGljIGludCB0Y19zZXR1cF9tcXByaW9fdW5pbXBsZW1lbnRlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTM5OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjE0MDA6Y29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM0X3RjX29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTE0MDEtXHQuaW5pdCA9IHRjX2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDAxCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlRyYWZmaWMgQ29udHJvbCBJbml0aWFsaXphdGlvbiAtIERpZ2dpbmcgaW50byB0aGUgRFdNQUMgRHJpdmVyKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRyYWZmaWMgY29udHJvbCBhbmQgaXQgbG9va3MgbGlrZSBgZHdtYWM0X3RjX29wc2AgaXMgdGhlIGtleSBpbnRlcmZhY2UgaGVyZS4gVGhhdCYjMzk7cyBnb29kLCBpdCBzdWdnZXN0cyB3ZSYjMzk7cmUgdXNpbmcgYSBzcGVjaWZpYyBzZXQgb2YgdHJhZmZpYyBjb250cm9sIG9wZXJhdGlvbnMuIFRoYXQgaW4gdHVybiBpbXBsaWVzIHRoYXQgYG5kb19zZXR1cF90Y2AgaXMgaW52b2x2ZWQuIE9rYXksIHRoZSBuYXR1cmFsIGZvbGxvdy1vbiBpcyB0aGF0IGBzdG1tYWNfc2V0dXBfdGNgIHdpbGwgYmUgY2FsbGVkLCB3aGljaCB1bHRpbWF0ZWx5IHNob3VsZCBsZWFkIHRvIGBzdG1tYWNfdGNfc2V0dXBfZXRzYC4gVGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgY2hhaW4gb2YgZXZlbnRzLgoKQnV0LCBoYW5nIG9uIGEgc2Vjb25kLiBUaGlzIGlzIGltcG9ydGFudCB0byBjb25zaWRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIGhhbmRsZXMgZWRnZSBjYXNlcyBwcm9wZXJseS4gV2hhdCBhYm91dCB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIFBDSSBkZXZpY2UgaXMgYSBkdW1teSBvciBzdHViPyBEb2VzIHRoZSBkcml2ZXIgcHJvYmUgY29udGludWUsIG9yIGRvZXMgaXQgZmFpbCBncmFjZWZ1bGx5PyBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIGBzdG1tYWNfaHdfaW5pdGAgYWdhaW4sIGp1c3QgdG8gdmVyaWZ5IHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGFjY291bnRzIGZvciB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBkcml2ZXIgaXMgcm9idXN0IGluIHRob3NlIHNwZWNpZmljIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc0MjE6XHRcdC8qIEdldCB0aGUgSFcgY2FwYWJpbGl0eSAobmV3IEdNQUMgbmV3ZXIgdGhhbiAzLjUwYSkgKi9cbjc0MjI6XHRcdHByaXYtXHUwMDNlaHdfY2FwX3N1cHBvcnQgPSBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzKHByaXYpO1xuNzQyMzpcdFx0aWYgKHByaXYtXHUwMDNlaHdfY2FwX3N1cHBvcnQpIHtcbjc0MjQ6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0RNQSBIVyBjYXBhYmlsaXR5IHJlZ2lzdGVyIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDI1Olx0XG43NDI2Olx0XHRcdC8qIFdlIGNhbiBvdmVycmlkZSBzb21lIGdtYWMvZG1hIGNvbmZpZ3VyYXRpb24gZmllbGRzOiBlLmcuXG43NDI3Olx0XHRcdCAqIGVuaF9kZXNjLCB0eF9jb2UgKGUuZy4gdGhhdCBhcmUgcGFzc2VkIHRocm91Z2ggdGhlXG43NDI4Olx0XHRcdCAqIHBsYXRmb3JtKSB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgSFcgY2FwYWJpbGl0eVxuNzQyOTpcdFx0XHQgKiByZWdpc3RlciAoaWYgc3VwcG9ydGVkKS5cbjc0MzA6XHRcdFx0ICovXG43NDMxOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VlbmhfZGVzYyA9IHByaXYtXHUwMDNlZG1hX2NhcC5lbmhfZGVzYztcbjc0MzI6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBtdCA9IHByaXYtXHUwMDNlZG1hX2NhcC5wbXRfcmVtb3RlX3dha2VfdXAgXHUwMDI2XHUwMDI2XG43NDMzOlx0XHRcdFx0XHQhKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfVVNFX1BIWV9XT0wpO1xuNzQzNDpcdFx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLmhhc2hfdGJfc3opIHtcbjc0MzU6XHRcdFx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZW11bHRpY2FzdF9maWx0ZXJfYmlucyA9XG43NDM2Olx0XHRcdFx0XHRcdChCSVQocHJpdi1cdTAwM2VkbWFfY2FwLmhhc2hfdGJfc3opIFx1MDAzY1x1MDAzYyA1KTtcbjc0Mzc6XHRcdFx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZW1jYXN0X2JpdHNfbG9nMiA9XG43NDM4Olx0XHRcdFx0XHRcdGlsb2cyKHByaXYtXHUwMDNlaHctXHUwMDNlbXVsdGljYXN0X2ZpbHRlcl9iaW5zKTtcbjc0Mzk6XHRcdFx0fVxuNzQ0MDpcdFxuNzQ0MTpcdFx0XHQvKiBUWENPRSBkb2VzbiYjMzk7dCB3b3JrIGluIHRocmVzaCBETUEgbW9kZSAqL1xuNzQ0MjpcdFx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZvcmNlX3RocmVzaF9kbWFfbW9kZSlcbjc0NDM6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfY29lID0gZmFsc2U7XG43NDQ0Olx0XHRcdGVsc2Vcbjc0NDU6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfY29lID0gcHJpdi1cdTAwM2VkbWFfY2FwLnR4X2NvZTtcbjc0NDY6XHRcbjc0NDc6XHRcdFx0LyogSW4gY2FzZSBvZiBHTUFDNCByeF9jb2UgaXMgZnJvbSBIVyBjYXAgcmVnaXN0ZXIuICovXG43NDQ4Olx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9jb2UgPSBwcml2LVx1MDAzZWRtYV9jYXAucnhfY29lO1xuNzQ0OTpcdFxuNzQ1MDpcdFx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2NvZV90eXBlMilcbjc0NTE6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lID0gU1RNTUFDX1JYX0NPRV9UWVBFMjtcbjc0NTI6XHRcdFx0ZWxzZSBpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2NvZV90eXBlMSlcbjc0NTM6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lID0gU1RNTUFDX1JYX0NPRV9UWVBFMTtcbjc0NTQ6XHRcbjc0NTU6XHRcdFx0c3RtbWFjX3ByaW50X2FjdHBoeWlmKHByaXYpO1xuNzQ1NjpcdFx0fSBlbHNlIHtcbjc0NTc6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O05vIEhXIERNQSBmZWF0dXJlIHJlZ2lzdGVyIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDU4Olx0XHR9XG43NDU5Olx0XG43NDYwOlx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2NvZSkge1xuNzQ2MTpcdFx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZXJ4X2NzdW0gPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lO1xuNzQ2MjpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7UlggQ2hlY2tzdW0gT2ZmbG9hZCBFbmdpbmUgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjc0NjM6XHRcdFx0aWYgKHByaXYtXHUwMDNlc3lub3BzeXNfaWQgXHUwMDNjIERXTUFDX0NPUkVfNF8wMClcbjc0NjQ6XHRcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7Q09FIFR5cGUgJWRcXG5cJiMzNDssIHByaXYtXHUwMDNlaHctXHUwMDNlcnhfY3N1bSk7XG43NDY1Olx0XHR9XG43NDY2Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2NvZSlcbjc0Njc6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1RYIENoZWNrc3VtIGluc2VydGlvbiBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuNzQ2ODpcdFxuNzQ2OTpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwbXQpIHtcbjc0NzA6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1dha2UtVXAgT24gTGFuIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzM2CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBETUEgRmVhdHVyZSBDaGVjayoqCgpPa2F5LCBzbyB0aGUgYHN0bW1hY19nZXRfaHdfZmVhdHVyZXNgIGZ1bmN0aW9uIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjcml0aWNhbCBwYXJ0IGhlcmUgaXMgd2hhdCBoYXBwZW5zIHdoZW4gaXQgcmV0dXJucyB6ZXJvLiBJdCYjMzk7cyBqdXN0IGEgc2ltcGxlICYjMzQ7Tm8gSFcgRE1BIGZlYXR1cmUgcmVnaXN0ZXIgc3VwcG9ydGVkJiMzNDsgbWVzc2FnZS4gTm90IGV4YWN0bHkgaW5mb3JtYXRpdmUsIGlzIGl0PwoKSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFRoYXQgcHJpbnQgc3RhdGVtZW50IGlzIGxpa2VseSBqdXN0IHRoZSAqZmlyc3QqIHNpZ24gb2YgdHJvdWJsZS4gV2hhdCBvdGhlciBjaGVja3Mgb3IgZG93bnN0cmVhbSBwcm9jZXNzZXMgbWlnaHQgYmUgaW1wYWN0ZWQgYnkgYSB6ZXJvIHJldHVybiB2YWx1ZSBmcm9tIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYD8gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcywgbG9vayBmb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdGhpcyBmdW5jdGlvbiYjMzk7cyBvdXRwdXQsIGFuZCBzZWUgd2hlcmUgYSBmYWlsZWQgaGFyZHdhcmUgZmVhdHVyZSBkZXRlY3Rpb24gd291bGQgdHJ1bHkgbWFuaWZlc3QuIFRoaXMgaW5pdGlhbCBtZXNzYWdlIGlzIGp1c3QgdGhlIHRpcCBvZiB0aGUgaWNlYmVyZywgSSYjMzk7bSBzdXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHRoZSByZWFsIHJhbWlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5MDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzkwNDpcdFx0LyogT25seSBEV01BQyBjb3JlIHZlcnNpb24gNS4yMCBvbndhcmRzIHN1cHBvcnRzIEhXIGRlc2NyaXB0b3IgcHJlZmV0Y2guXG43OTA1Olx0XHQgKi9cbjc5MDY6XHRcdGlmIChwcml2LVx1MDAzZXN5bm9wc3lzX2lkIFx1MDAzYyBEV01BQ19DT1JFXzVfMjApXG43OTA3Olx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZWRjaGUgPSBmYWxzZTtcbjc5MDg6XHRcbjc5MDk6XHRcdHN0bW1hY19jaGVja19ldGhlcl9hZGRyKHByaXYpO1xuNzkxMDpcdFxuNzkxMTpcdFx0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2c3RtbWFjX25ldGRldl9vcHM7XG43OTEyOlx0XG43OTEzOlx0XHRuZGV2LVx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZzdG1tYWNfeGRwX21ldGFkYXRhX29wcztcbjc5MTQ6XHRcdG5kZXYtXHUwMDNleHNrX3R4X21ldGFkYXRhX29wcyA9IFx1MDAyNnN0bW1hY194c2tfdHhfbWV0YWRhdGFfb3BzO1xuNzkxNTpcdFxuNzkxNjpcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8XG43OTE3Olx0XHRcdFx0ICAgIE5FVElGX0ZfUlhDU1VNO1xuNzkxODpcdFx0bmRldi1cdTAwM2V4ZHBfZmVhdHVyZXMgPSBORVRERVZfWERQX0FDVF9CQVNJQyB8IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcbjc5MTk6XHRcdFx0XHQgICAgIE5FVERFVl9YRFBfQUNUX1hTS19aRVJPQ09QWTtcbjc5MjA6XHRcbjc5MjE6XHRcdHJldCA9IHN0bW1hY190Y19pbml0KHByaXYsIHByaXYpO1xuNzkyMjpcdFx0aWYgKCFyZXQpIHtcbjc5MjM6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuNzkyNDpcdFx0fVxuNzkyNTpcdFxuNzkyNjpcdFx0c3RtbWFjX3NldF9nc29fZmVhdHVyZXMobmRldik7XG43OTI3Olx0XG43OTI4Olx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnNwaGVuIFx1MDAyNlx1MDAyNlxuNzkyOTpcdFx0ICAgICEocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19TUEhfRElTQUJMRSkpIHtcbjc5MzA6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dSTztcbjc5MzE6XHRcdFx0cHJpdi1cdTAwM2VzcGhfY2FwYWJsZSA9IHRydWU7XG43OTMyOlx0XHRcdHByaXYtXHUwMDNlc3BoX2FjdGl2ZSA9IHByaXYtXHUwMDNlc3BoX2NhcGFibGU7XG43OTMzOlx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtTUEggZmVhdHVyZSBlbmFibGVkXFxuXCYjMzQ7KTtcbjc5MzQ6XHRcdH1cbjc5MzU6XHRcbjc5MzY6XHRcdC8qIElkZWFsbHkgb3VyIGhvc3QgRE1BIGFkZHJlc3Mgd2lkdGggaXMgdGhlIHNhbWUgYXMgZm9yIHRoZVxuNzkzNzpcdFx0ICogZGV2aWNlLiBIb3dldmVyLCBpdCBtYXkgZGlmZmVyIGFuZCB0aGVuIHdlIGhhdmUgdG8gdXNlIG91clxuNzkzODpcdFx0ICogaG9zdCBETUEgd2lkdGggZm9yIGFsbG9jYXRpb24gYW5kIHRoZSBkZXZpY2UgRE1BIHdpZHRoIGZvclxuNzkzOTpcdFx0ICogcmVnaXN0ZXIgaGFuZGxpbmcuXG43OTQwOlx0XHQgKi9cbjc5NDE6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlaG9zdF9kbWFfd2lkdGgpXG43OTQyOlx0XHRcdHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vob3N0X2RtYV93aWR0aDtcbjc5NDM6XHRcdGVsc2Vcbjc5NDQ6XHRcdFx0cHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cdTAwM2VkbWFfY2FwLmFkZHI2NDtcbjc5NDU6XHRcbjc5NDY6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgpIHtcbjc5NDc6XHRcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXZpY2UsXG43OTQ4Olx0XHRcdFx0XHRETUFfQklUX01BU0socHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSk7XG43OTQ5Olx0XHRcdGlmICghcmV0KSB7XG43OTUwOlx0XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1VzaW5nICVkLyVkIGJpdHMgRE1BIGhvc3QvZGV2aWNlIHdpZHRoXFxuXCYjMzQ7LFxuNzk1MTpcdFx0XHRcdFx0IHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCwgcHJpdi1cdTAwM2VkbWFfY2FwLmFkZHI2NCk7XG43OTUyOlx0XG43OTUzOlx0XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MzIKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuCgoqKkRlY29uc3RydWN0aW5nIHRoZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqCgpSaWdodCwgc28gdGhlIHRyYWNlIHNob3dzIHRoZSBleGVjdXRpb24gcGF0aCBoaXR0aW5nIGBzdG1tYWNfdGNfaW5pdGAuIFRoYXQmIzM5O3MgdGhlIGtleSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIHRyYWZmaWMgY29udHJvbCBmZWF0dXJlcyBvZiB0aGUgU1RNTUFDIGRyaXZlciwgb2J2aW91c2x5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIE5vdywgdGhlIGV4ZWN1dGlvbiAqY29udGludWVzKiBhZnRlciB0aGF0IGNhbGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIGJlaW5nIGRvbmUgKmFmdGVyKiB0aGF0PyBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGlzIHRoYXQgdHJhZmZpYyBjb250cm9sIHJlZ2lzdHJhdGlvbiBhIHByZS1yZXF1aXNpdGU/CgpNeSBuZXh0IGh5cG90aGVzaXMgdG8gaW52ZXN0aWdhdGUgaXMgdGhlIGNhbGwgdG8gYHJlZ2lzdGVyX25ldGRldmAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhhdCBmdW5jdGlvbiBub3cuIElzIGl0IGNhbGxlZD8gQW5kIGlmIHNvLCAqd2hlbio/IElzIGl0IGJlZm9yZSwgYWZ0ZXIsIG9yIGludGVybGVhdmVkIHdpdGggdGhlIHRyYWZmaWMgY29udHJvbCBpbml0aWFsaXphdGlvbj8gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBjYWxscyAtIGBzdG1tYWNfdGNfaW5pdGAgYW5kIGByZWdpc3Rlcl9uZXRkZXZgIC0gaXMgcHJvYmFibHkgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRldmljZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgdGhlIGRyaXZlciYjMzk7cyBkZXBlbmRlbmNpZXMsIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzgwMzA6XHRcdHN0bW1hY19jaGVja19wY3NfbW9kZShwcml2KTtcbjgwMzE6XHRcbjgwMzI6XHRcdHBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGRldmljZSk7XG44MDMzOlx0XHRwbV9ydW50aW1lX3NldF9hY3RpdmUoZGV2aWNlKTtcbjgwMzQ6XHRcdGlmICghcG1fcnVudGltZV9lbmFibGVkKGRldmljZSkpXG44MDM1Olx0XHRcdHBtX3J1bnRpbWVfZW5hYmxlKGRldmljZSk7XG44MDM2Olx0XG44MDM3Olx0XHRyZXQgPSBzdG1tYWNfbWRpb19yZWdpc3RlcihuZGV2KTtcbjgwMzg6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjgwMzk6XHRcdFx0ZGV2X2Vycl9wcm9iZShwcml2LVx1MDAzZWRldmljZSwgcmV0LFxuODA0MDpcdFx0XHRcdCAgICAgIFwmIzM0O01ESU8gYnVzIChpZDogJWQpIHJlZ2lzdHJhdGlvbiBmYWlsZWRcXG5cJiMzNDssXG44MDQxOlx0XHRcdFx0ICAgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWJ1c19pZCk7XG44MDQyOlx0XHRcdGdvdG8gZXJyb3JfbWRpb19yZWdpc3RlcjtcbjgwNDM6XHRcdH1cbjgwNDQ6XHRcbjgwNDU6XHRcdHJldCA9IHN0bW1hY19wY3Nfc2V0dXAobmRldik7XG44MDQ2Olx0XHRpZiAocmV0KVxuODA0NzpcdFx0XHRnb3RvIGVycm9yX3Bjc19zZXR1cDtcbjgwNDg6XHRcbjgwNDk6XHRcdHJldCA9IHN0bW1hY19waHlsaW5rX3NldHVwKHByaXYpO1xuODA1MDpcdFx0aWYgKHJldCkge1xuODA1MTpcdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O2ZhaWxlZCB0byBzZXR1cCBwaHkgKCVkKVxcblwmIzM0OywgcmV0KTtcbjgwNTI6XHRcdFx0Z290byBlcnJvcl9waHlfc2V0dXA7XG44MDUzOlx0XHR9XG44MDU0Olx0XG44MDU1Olx0XHRyZXQgPSBzdG1tYWNfcmVnaXN0ZXJfZGV2bGluayhwcml2KTtcbjgwNTY6XHRcdGlmIChyZXQpXG44MDU3Olx0XHRcdGdvdG8gZXJyb3JfZGV2bGlua19zZXR1cDtcbjgwNTg6XHRcbjgwNTk6XHRcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcbjgwNjA6XHRcdGlmIChyZXQpIHtcbjgwNjE6XHRcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7JXM6IEVSUk9SICVpIHJlZ2lzdGVyaW5nIHRoZSBkZXZpY2VcXG5cJiMzNDssXG44MDYyOlx0XHRcdFx0X19mdW5jX18sIHJldCk7XG44MDYzOlx0XHRcdGdvdG8gZXJyb3JfbmV0ZGV2X3JlZ2lzdGVyO1xuODA2NDpcdFx0fVxuODA2NTpcdFxuODA2NjpcdCNpZmRlZiBDT05GSUdfREVCVUdfRlNcbjgwNjc6XHRcdHN0bW1hY19pbml0X2ZzKG5kZXYpO1xuODA2ODpcdCNlbmRpZlxuODA2OTpcdFxuODA3MDpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkdW1wX2RlYnVnX3JlZ3MpXG44MDcxOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkdW1wX2RlYnVnX3JlZ3MocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWJzcF9wcml2KTtcbjgwNzI6XHRcbjgwNzM6XHRcdC8qIExldCBwbV9ydW50aW1lX3B1dCgpIGRpc2FibGUgdGhlIGNsb2Nrcy5cbjgwNzQ6XHRcdCAqIElmIENPTkZJR19QTSBpcyBub3QgZW5hYmxlZCwgdGhlIGNsb2NrcyB3aWxsIHN0YXkgcG93ZXJlZC5cbjgwNzU6XHRcdCAqL1xuODA3NjpcdFx0cG1fcnVudGltZV9wdXQoZGV2aWNlKTtcbjgwNzc6XHRcbjgwNzg6XHRcdHJldHVybiByZXQ7XG44MDc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTQ2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcy9uZXR3b3JraW5nLCBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBmdW5jdGlvbiBjYWxsOgoKKipBbmFseXppbmcgdGhlIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgQ2FsbCoqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBjYWxsaW5nIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/JiMzNDsgSXMgdGhpcyBoYXBwZW5pbmcgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiwgb3IgbGF0ZXI/IFRoZW4gSSBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBxdWVzdGlvbiBvZiAqZXJyb3IgaGFuZGxpbmcqLiBEb2VzIHRoZSBjb2RlIGhhdmUgYSBjaGVjayBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgPyBDcnVjaWFsbHksIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgcm9idXN0bHkgZW5vdWdoLiBEb2VzIGl0IGdyYWNlZnVsbHkgaGFuZGxlIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgaGFyZHdhcmUsIHNwZWNpZmljYWxseSB0aGUgTURJTyBidXMgaXRzZWxmLCBpc24mIzM5O3QgcGh5c2ljYWxseSBwcmVzZW50PyBEb2VzIGl0IHJldHVybiBhIG1lYW5pbmdmdWwgZXJyb3IgY29kZSwgb3IgZG9lcyBpdCBzaW1wbHkgcmV0dXJuIGFuIGVycm9yIHRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uPyBXaGF0IHNvcnQgb2YgZGVidWcgb3V0cHV0IHdvdWxkIGJlIGdlbmVyYXRlZCBpZiB0aGlzIGZ1bmN0aW9uIGNhbGwgZmFpbGVkPyBBcmUgdGhlcmUgb3RoZXIgZXJyb3IgcGF0aHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IHdvdWxkIGFmZmVjdCB0aGlzIGNhbGw/IEtub3dpbmcgd2hldGhlciB0aGlzIGNhbGwgaXMgYSAmIzM0O2NyaXRpY2FsIHBhdGgmIzM0OyBmdW5jdGlvbiBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSBjb25zZXF1ZW5jZXMgb2YgaXRzIGZhaWx1cmUuIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGluIG9yZGVyIHRvIHBlcmZvcm0gcm9idXN0IHZhbGlkYXRpb24gYW5kL29yIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX21kaW9fcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDA1PWludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQwNjppbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDA3LWludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqbWlpKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc3OTY9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODAzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODAzNzpcdHJldCA9IHN0bW1hY19tZGlvX3JlZ2lzdGVyKG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDM4LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM9NTY3PXN0YXRpYyB2b2lkIHN0bW1hY19tZGlvX2J1c19jb25maWcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTkwLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo1OTE6ICogc3RtbWFjX21kaW9fcmVnaXN0ZXJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTkyLSAqIEBuZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTk0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo1OTU6aW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy01OTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQzNgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggYHN0bW1hY19tZGlvX3JlZ2lzdGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gV2hhdCYjMzk7cyBpdHMgcm9sZSBpbiB0aGUgU1RNTUFDIGRyaXZlciYjMzk7cyBNRElPIGludGVyZmFjZT8gSXMgaXQgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRoZSBNRElPIGJ1cyB3aXRoIHRoZSBrZXJuZWw/IE9yIG1heWJlIGl0JiMzOTtzIGhhbmRsaW5nIGEgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gc3RlcCBvciBkZXZpY2UgYXR0YWNobWVudD8gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgaXRzIGNvbnRleHQuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGNhbGwgaXQ/IFdoYXQgZnVuY3Rpb25zIGRvZXMgKml0KiBjYWxsPyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiBpcy4gSXMgdGhlcmUgYW55dGhpbmcgdW51c3VhbCBhYm91dCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgc3BlY2lmaWMgdG8gdGhpcyBkcml2ZXIvaGFyZHdhcmUgY29tYmluYXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgbWluZGZ1bCBvZj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGNvZGUgZm9yIGl0cyB1c2FnZSwgYW5kIHRoZW4gdHJhY2luZyB0aGUgY2FsbHMgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIGltcGFjdC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIE1ESU8gcmVnaXN0cmF0aW9uIGlzIGNvcnJlY3QgYW5kIGlmIGl0IGlzLCB0aGUgZHJpdmVyJiMzOTtzIGZ1bmN0aW9uIHdpbGwgYmUgcmVnaXN0ZXJlZCBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTU6XHRpbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gNTk2Olx0e1xuIDU5NzpcdFx0aW50IGVyciA9IDA7XG4gNTk4Olx0XHRzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cztcbiA1OTk6XHRcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIDYwMDpcdFx0c3RydWN0IHN0bW1hY19tZGlvX2J1c19kYXRhICptZGlvX2J1c19kYXRhID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGE7XG4gNjAxOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbm9kZSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtZGlvX25vZGU7XG4gNjAyOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBuZGV2LVx1MDAzZWRldi5wYXJlbnQ7XG4gNjAzOlx0XHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZml4ZWRfbm9kZTtcbiA2MDQ6XHRcdGludCBtYXhfYWRkciA9IFBIWV9NQVhfQUREUiAtIDE7XG4gNjA1Olx0XHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlO1xuIDYwNjpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbiA2MDc6XHRcbiA2MDg6XHRcdGlmICghbWRpb19idXNfZGF0YSlcbiA2MDk6XHRcdFx0cmV0dXJuIDA7XG4gNjEwOlx0XG4gNjExOlx0XHRzdG1tYWNfbWRpb19idXNfY29uZmlnKHByaXYpO1xuIDYxMjpcdFxuIDYxMzpcdFx0bmV3X2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcbiA2MTQ6XHRcdGlmICghbmV3X2J1cylcbiA2MTU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNjE2Olx0XG4gNjE3Olx0XHRpZiAobWRpb19idXNfZGF0YS1cdTAwM2VpcnFzKVxuIDYxODpcdFx0XHRtZW1jcHkobmV3X2J1cy1cdTAwM2VpcnEsIG1kaW9fYnVzX2RhdGEtXHUwMDNlaXJxcywgc2l6ZW9mKG5ld19idXMtXHUwMDNlaXJxKSk7XG4gNjE5Olx0XG4gNjIwOlx0XHRuZXdfYnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtzdG1tYWNcJiMzNDs7XG4gNjIxOlx0XG4gNjIyOlx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKSB7XG4gNjIzOlx0XHRcdG5ld19idXMtXHUwMDNlcmVhZCA9IFx1MDAyNnN0bW1hY194Z21hYzJfbWRpb19yZWFkX2MyMjtcbiA2MjQ6XHRcdFx0bmV3X2J1cy1cdTAwM2V3cml0ZSA9IFx1MDAyNnN0bW1hY194Z21hYzJfbWRpb193cml0ZV9jMjI7XG4gNjI1Olx0XHRcdG5ld19idXMtXHUwMDNlcmVhZF9jNDUgPSBcdTAwMjZzdG1tYWNfeGdtYWMyX21kaW9fcmVhZF9jNDU7XG4gNjI2Olx0XHRcdG5ld19idXMtXHUwMDNld3JpdGVfYzQ1ID0gXHUwMDI2c3RtbWFjX3hnbWFjMl9tZGlvX3dyaXRlX2M0NTtcbiA2Mjc6XHRcbiA2Mjg6XHRcdFx0aWYgKHByaXYtXHUwMDNlc3lub3BzeXNfaWQgXHUwMDNjIERXWEdNQUNfQ09SRV8yXzIwKSB7XG4gNjI5Olx0XHRcdFx0LyogUmlnaHQgbm93IG9ubHkgQzIyIHBoeXMgYXJlIHN1cHBvcnRlZCAqL1xuIDYzMDpcdFx0XHRcdG1heF9hZGRyID0gTUlJX1hHTUFDX01BWF9DMjJBRERSO1xuIDYzMTpcdFxuIDYzMjpcdFx0XHRcdC8qIENoZWNrIGlmIERUIHNwZWNpZmllZCBhbiB1bnN1cHBvcnRlZCBwaHkgYWRkciAqL1xuIDYzMzpcdFx0XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGh5X2FkZHIgXHUwMDNlIE1JSV9YR01BQ19NQVhfQzIyQUREUilcbiA2MzQ6XHRcdFx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBwaHlfYWRkciAobWF4PSVkKVxcblwmIzM0OyxcbiA2MzU6XHRcdFx0XHRcdFx0TUlJX1hHTUFDX01BWF9DMjJBRERSKTtcbiA2MzY6XHRcdFx0fVxuIDYzNzpcdFx0fSBlbHNlIHtcbiA2Mzg6XHRcdFx0bmV3X2J1cy1cdTAwM2VyZWFkID0gXHUwMDI2c3RtbWFjX21kaW9fcmVhZF9jMjI7XG4gNjM5Olx0XHRcdG5ld19idXMtXHUwMDNld3JpdGUgPSBcdTAwMjZzdG1tYWNfbWRpb193cml0ZV9jMjI7XG4gNjQwOlx0XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQpIHtcbiA2NDE6XHRcdFx0XHRuZXdfYnVzLVx1MDAzZXJlYWRfYzQ1ID0gXHUwMDI2c3RtbWFjX21kaW9fcmVhZF9jNDU7XG4gNjQyOlx0XHRcdFx0bmV3X2J1cy1cdTAwM2V3cml0ZV9jNDUgPSBcdTAwMjZzdG1tYWNfbWRpb193cml0ZV9jNDU7XG4gNjQzOlx0XHRcdH1cbiA2NDQ6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3MjcKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTURJTyBCdXMgUmVnaXN0cmF0aW9uIGluIFNUTU1BQyBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBTVE1NQUMgZHJpdmVyIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiBsb2dpYy4gSWYgYG1kaW9fYnVzX2RhdGFgIGlzIHByZXNlbnQsIHRoZW4gdGhlIGRyaXZlciBpcyBnb2luZyB0byByZWdpc3RlciB0aGUgTURJTyBidXMuIEhhbmcgb24sIHRoZSBjb2RlIHNuaXBwZXQgZnJvbSBgc3RtbWFjX3BjaV9wcm9iZWAgY29uZmlybXMgdGhhdCBgbWRpb19idXNfZGF0YWAgaXMgaW5kZWVkIGFsbG9jYXRlZCB1c2luZyBgZGV2bV9remFsbG9jYC4gIFNvLCB5ZXMsIGl0JiMzOTtzIHByZXNlbnQuIFRoZSBjb2RlIGlzIHRoZW4gZ29pbmcgdG8gY2FsbCBlaXRoZXIgYG9mX21kaW9idXNfcmVnaXN0ZXJgIG9yIGBtZGlvYnVzX3JlZ2lzdGVyYCDigJMgdGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgcHJvY2VkdXJlLgoKTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uIGFyaXNlczogd2hhdCBoYXBwZW5zIGlmIHRoZXJlJiMzOTtzIG5vIHBoeXNpY2FsIFBIWSBwcmVzZW50IG9uIHRoZSBidXM/IEkmIzM5O20gdXNlZCB0byBob3cgYG1kaW9idXNfcmVnaXN0ZXJgIHdvcmtzLCBpdCB0eXBpY2FsbHkgc2NhbnMgdGhlIE1ESU8gYnVzLiBJZiBpdCByZWFkcyB0aGUgYDB4ZmZmZmAgdmFsdWUsIHJlcHJlc2VudGluZyBubyBkZXZpY2UsIGl0IGRvZXNuJiMzOTt0IG5lY2Vzc2FyaWx5IGZhaWwgb3V0cmlnaHQuIEl0IHVzdWFsbHkganVzdCBhc3N1bWVzIHRoYXQgbm8gUEhZIGlzIHByZXNlbnQgYXQgdGhlIHBhcnRpY3VsYXIgYWRkcmVzcy4KCkhvd2V2ZXIsIGEgbmV3IGNvbmNlcm46IGBzdG1tYWNfcGNzX3NldHVwYCBhbmQgYHN0bW1hY19waHlsaW5rX3NldHVwYCBhcmUgY2FsbGVkICphZnRlciogYHN0bW1hY19tZGlvX3JlZ2lzdGVyYC4gVGhpcyBzdWdnZXN0cyB0aGV5IGRlcGVuZCBvbiB0aGUgTURJTyBidXMgcmVnaXN0cmF0aW9uLiAgU28gdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBgbWRpb2J1c19yZWdpc3RlcmAgbWF5IG9yIG1heSBub3QgaW1wYWN0IHRoZSBQQ1MgYW5kIFBoeWxpbmsgc2V0dXAuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgdG8gYmUgY2VydGFpbiBvZiB0aGUgaW1wbGljYXRpb25zIG9mIG5vIFBIWSBiZWluZyBkZXRlY3RlZC4gVGhlIGJlaGF2aW9yIGhlcmUgc2VlbXMgc2FmZSwgYnV0IEkgd2lsbCBkb3VibGUtY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ODA0NTpcdFx0cmV0ID0gc3RtbWFjX3Bjc19zZXR1cChuZGV2KTtcbjgwNDY6XHRcdGlmIChyZXQpXG44MDQ3Olx0XHRcdGdvdG8gZXJyb3JfcGNzX3NldHVwO1xuODA0ODpcdFxuODA0OTpcdFx0cmV0ID0gc3RtbWFjX3BoeWxpbmtfc2V0dXAocHJpdik7XG44MDUwOlx0XHRpZiAocmV0KSB7XG44MDUxOlx0XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7ZmFpbGVkIHRvIHNldHVwIHBoeSAoJWQpXFxuXCYjMzQ7LCByZXQpO1xuODA1MjpcdFx0XHRnb3RvIGVycm9yX3BoeV9zZXR1cDtcbjgwNTM6XHRcdH1cbjgwNTQ6XHRcbjgwNTU6XHRcdHJldCA9IHN0bW1hY19yZWdpc3Rlcl9kZXZsaW5rKHByaXYpO1xuODA1NjpcdFx0aWYgKHJldClcbjgwNTc6XHRcdFx0Z290byBlcnJvcl9kZXZsaW5rX3NldHVwO1xuODA1ODpcdFxuODA1OTpcdFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuODA2MDpcdFx0aWYgKHJldCkge1xuODA2MTpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDslczogRVJST1IgJWkgcmVnaXN0ZXJpbmcgdGhlIGRldmljZVxcblwmIzM0OyxcbjgwNjI6XHRcdFx0XHRfX2Z1bmNfXywgcmV0KTtcbjgwNjM6XHRcdFx0Z290byBlcnJvcl9uZXRkZXZfcmVnaXN0ZXI7XG44MDY0Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjA1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc3RtbWFjX3BoeWxpbmtfc2V0dXBgIGZ1bmN0aW9uLCBzaGFsbCB3ZT8gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHdoYXQmIzM5O3MgbGlrZWx5IGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFuYWx5emUgaXQ6CgoqKkRlY29uc3RydWN0aW5nIGBzdG1tYWNfcGh5bGlua19zZXR1cGAqKgoKQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgc3RtbWFjX3BoeWxpbmtfc2V0dXBgLiBUaGUgbmFtZSBpdHNlbGYgc2NyZWFtcyAmIzM0O0V0aGVybmV0LCBQSFksIGFuZCBzZXR1cC4mIzM0OyBJIGltbWVkaWF0ZWx5IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHdoZXJlIHRoZSBTVE1NQUMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBQSFkgbGF5ZXIsIGxpa2VseSBlc3RhYmxpc2hpbmcgdGhlIGxpbmsgYW5kIGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgYSBmZXcga2V5IGFyZWFzOgoKKiAgICoqUEhZIExpbmsgSW5pdGlhbGl6YXRpb246KiogSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBwcm9iaW5nIGFuZCBjb25uZWN0aW5nIHRvIHRoZSBQSFkgZGV2aWNlLCBtYXliZSB1c2luZyBwaHlsaW5rLCBjb25zaWRlcmluZyB0aGUgbmFtZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBkcml2ZXIgZGV0ZWN0cyB0aGUgUEhZLCBhbmQgdGhlbiBzZXRzIHVwIHRoZSBjb21tdW5pY2F0aW9uIGludGVyZmFjZS4gSXMgaXQgdXNpbmcgTURJTz8gV2hhdCBhYm91dCBhbnkgc3BlY2lmaWMgU1RNTUFDLXJlbGF0ZWQgUEhZIGluaXRpYWxpemF0aW9uIHJlcXVpcmVtZW50cz8KKiAgICoqU3BlZWQsIER1cGxleCwgYW5kIEF1dG9uZWdvdGlhdGlvbjoqKiBEZWZpbml0ZWx5IGV4cGVjdGluZyB0byBzZWUgY29kZSB0aGF0IGhhbmRsZXMgdGhlIG5lZ290aWF0ZWQgbGluayBzcGVlZCwgZHVwbGV4IG1vZGUgKGhhbGYvZnVsbCksIGFuZCBtb3N0IGxpa2VseSBhdXRvbmVnb3RpYXRpb24uIEhvdyBkb2VzIGl0IGhhbmRsZSBmb3JjZWQgY29uZmlndXJhdGlvbnMgaWYgYXV0b25lZ290aWF0aW9uIGZhaWxzIG9yIGlzIGRpc2FibGVkPyBBcmUgdGhlcmUgYW55IFNUTU1BQy1zcGVjaWZpYyBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZXNlIHBhcmFtZXRlcnM/CiogICAqKkRyaXZlciAmYW1wOyBQSFkgQ29vcmRpbmF0aW9uOioqIEhvdyBkb2VzIHRoZSBTVE1NQUMgZHJpdmVyIGdldCBub3RpZmllZCBhYm91dCBsaW5rIHN0YXRlIGNoYW5nZXM/IElzIHRoZXJlIGEgY2FsbGJhY2sgbWVjaGFuaXNtIHRvIGhhbmRsZSBQSFkgaW50ZXJydXB0cyBvciBsaW5rIHN0YXR1cyBldmVudHM/IEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBzdGF5cyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgUEhZJiMzOTtzIG9wZXJhdGlvbmFsIHN0YXRlLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBJbXBvcnRhbnQuIEhvdyBkb2VzIGl0IGRlYWwgd2l0aCBQSFkgZGV0ZWN0aW9uIGZhaWx1cmVzLCBsaW5rIGZhaWx1cmVzLCBvciBjb25maWd1cmF0aW9uIGVycm9ycz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igcm9idXN0IGVycm9yIGNoZWNraW5nIGFuZCBwb3RlbnRpYWxseSByZXRyeSBtZWNoYW5pc21zLgoqICAgKipDbG9jayBDb25maWd1cmF0aW9uOioqIFNUTU1BQyBkcml2ZXJzIG9mdGVuIGhhdmUgc3BlY2lmaWMgY2xvY2sgcmVxdWlyZW1lbnRzIGZvciB0aGUgUEhZIGludGVyZmFjZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBjbG9ja3MgYXJlIGNvbmZpZ3VyZWQgYW5kIG1hbmFnZWQsIGFuZCBpZiB0aGV5IGNoYW5nZSBiYXNlZCBvbiB0aGUgUEhZJiMzOTtzIHNldHRpbmdzLgoqICAgKipSZXNvdXJjZSBBbGxvY2F0aW9uOioqIFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24/IEkgZXhwZWN0IHRvIHNlZSBQSFktcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBhbGxvY2F0aW9uIGZvciBQSFkgY29udHJvbCByZWdpc3RlcnMgb3IgbGluayBzdGF0dXMgaW5mb3JtYXRpb24uCgpTbywgb3ZlcmFsbCwgbXkgbWVudGFsIGNoZWNrbGlzdCBpczogaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyYXRpb24sIGxpbmsgbW9uaXRvcmluZywgZXJyb3IgaGFuZGxpbmcsIGNsb2NraW5nLCBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4gTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIG15IGFzc3VtcHRpb25zIGhvbGQgdXAgYXMgSSBkaXNzZWN0IHRoZSBjb2RlLi4uIFRpbWUgdG8gZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfcGh5bGlua19zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTEyOTk9c3RhdGljIGludCBzdG1tYWNfaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEzNzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjEzNzQ6c3RhdGljIGludCBzdG1tYWNfcGh5bGlua19zZXR1cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEzNzUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc5Nj1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDQ5Olx0cmV0ID0gc3RtbWFjX3BoeWxpbmtfc2V0dXAocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwNTAtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDg2CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCB3ZSYjMzk7cmUgbG9va2luZyBhdCwgc3VtbWFyaXplZCBhcyB0aG91Z2ggSSYjMzk7bSB3b3JraW5nIHRocm91Z2ggaXQ6CgoqKkFuYWx5emluZyB0aGUgYHN0bW1hY19waHlsaW5rX3NldHVwYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGBzdG1tYWNfcGh5bGlua19zZXR1cGAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNldHRpbmcgdXAgdGhlIFBIWSBsaW5rIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE1BQyBkcml2ZXIsIGJ1dCBsZXQmIzM5O3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgc3RlcHMgYXJlIGludm9sdmVkLCB3aGF0IHJlc291cmNlcyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoLCBhbmQgd2hhdCBwb3RlbnRpYWwgaXNzdWVzIG1pZ2h0IGFyaXNlIGhlcmUuIElzIHRoaXMgd2hlcmUgdGhlIGNyaXRpY2FsIFBIWSBuZWdvdGlhdGlvbiBoYXBwZW5zPyBJcyB0aGVyZSBhbnl0aGluZyBzcGVjaWZpYyB0byB0aGUgU1RNTUFDJiMzOTtzIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uIHRoYXQgaXMgd29ydGggbm90aW5nIGluIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbj8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGNhbGwgc3RhY2sgYW5kIGRhdGEgZmxvdyB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNzQ6XHRzdGF0aWMgaW50IHN0bW1hY19waHlsaW5rX3NldHVwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbjEzNzU6XHR7XG4xMzc2Olx0XHRzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZztcbjEzNzc6XHRcdHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzO1xuMTM3ODpcdFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4xMzc5Olx0XG4xMzgwOlx0XHRjb25maWcgPSBcdTAwMjZwcml2LVx1MDAzZXBoeWxpbmtfY29uZmlnO1xuMTM4MTpcdFxuMTM4MjpcdFx0Y29uZmlnLVx1MDAzZWRldiA9IFx1MDAyNnByaXYtXHUwMDNlZGV2LVx1MDAzZWRldjtcbjEzODM6XHRcdGNvbmZpZy1cdTAwM2V0eXBlID0gUEhZTElOS19ORVRERVY7XG4xMzg0Olx0XHRjb25maWctXHUwMDNlbWFjX21hbmFnZWRfcG0gPSB0cnVlO1xuMTM4NTpcdFxuMTM4NjpcdFx0LyogU3RtbWFjIGFsd2F5cyByZXF1aXJlcyBhbiBSWCBjbG9jayBmb3IgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gKi9cbjEzODc6XHRcdGNvbmZpZy1cdTAwM2VtYWNfcmVxdWlyZXNfcnhjID0gdHJ1ZTtcbjEzODg6XHRcbjEzODk6XHRcdC8qIERpc2FibGUgRUVFIFJYIGNsb2NrIHN0b3AgdG8gZW5zdXJlIFZMQU4gcmVnaXN0ZXIgYWNjZXNzIHdvcmtzXG4xMzkwOlx0XHQgKiBjb3JyZWN0bHkuXG4xMzkxOlx0XHQgKi9cbjEzOTI6XHRcdGlmICghKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfUlhfQ0xLX1JVTlNfSU5fTFBJKSBcdTAwMjZcdTAwMjZcbjEzOTM6XHRcdCAgICAhKHByaXYtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1ZMQU5fRkVBVFVSRVMpKVxuMTM5NDpcdFx0XHRjb25maWctXHUwMDNlZWVlX3J4X2Nsa19zdG9wX2VuYWJsZSA9IHRydWU7XG4xMzk1Olx0XG4xMzk2Olx0XHQvKiBTZXQgdGhlIGRlZmF1bHQgdHJhbnNtaXQgY2xvY2sgc3RvcCBiaXQgYmFzZWQgb24gdGhlIHBsYXRmb3JtIGdsdWUgKi9cbjEzOTc6XHRcdHByaXYtXHUwMDNldHhfbHBpX2Nsa19zdG9wID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNlxuMTM5ODpcdFx0XHRcdFx0U1RNTUFDX0ZMQUdfRU5fVFhfTFBJX0NMT0NLR0FUSU5HO1xuMTM5OTpcdFxuMTQwMDpcdFx0LyogR2V0IHRoZSBQSFkgaW50ZXJmYWNlIG1vZGVzIChhdCB0aGUgUEhZIGVuZCBvZiB0aGUgbGluaykgdGhhdFxuMTQwMTpcdFx0ICogYXJlIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0uXG4xNDAyOlx0XHQgKi9cbjE0MDM6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZ2V0X2ludGVyZmFjZXMpXG4xNDA0Olx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VnZXRfaW50ZXJmYWNlcyhwcml2LCBwcml2LVx1MDAzZXBsYXQtXHUwMDNlYnNwX3ByaXYsXG4xNDA1Olx0XHRcdFx0XHRcdCAgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4xNDA2Olx0XG4xNDA3Olx0XHRjb25maWctXHUwMDNlZGVmYXVsdF9hbl9pbmJhbmQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlZGVmYXVsdF9hbl9pbmJhbmQ7XG4xNDA4Olx0XG4xNDA5Olx0XHQvKiBTZXQgdGhlIHBsYXRmb3JtL2Zpcm13YXJlIHNwZWNpZmllZCBpbnRlcmZhY2UgbW9kZSBpZiB0aGVcbjE0MTA6XHRcdCAqIHN1cHBvcnRlZCBpbnRlcmZhY2VzIGhhdmUgbm90IGFscmVhZHkgYmVlbiBwcm92aWRlZCB1c2luZ1xuMTQxMTpcdFx0ICogcGh5X2ludGVyZmFjZSBhcyBhIGxhc3QgcmVzb3J0LlxuMTQxMjpcdFx0ICovXG4xNDEzOlx0XHRpZiAocGh5X2ludGVyZmFjZV9lbXB0eShjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpKVxuMTQxNDpcdFx0XHRfX3NldF9iaXQocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBoeV9pbnRlcmZhY2UsXG4xNDE1Olx0XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuMTQxNjpcdFxuMTQxNzpcdFx0LyogSWYgd2UgaGF2ZSBhbiB4cGNzLCBpdCBkZWZpbmVzIHdoaWNoIFBIWSBpbnRlcmZhY2VzIGFyZSBzdXBwb3J0ZWQuICovXG4xNDE4Olx0XHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuMTQxOTpcdFx0XHRwY3MgPSB4cGNzX3RvX3BoeWxpbmtfcGNzKHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4xNDIwOlx0XHRlbHNlXG4xNDIxOlx0XHRcdHBjcyA9IHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3M7XG4xNDIyOlx0XG4xNDIzOlx0XHRpZiAocGNzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTU1MAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgcGh5bGluayBTZXR1cCBpbiBzdG1tYWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzdG1tYWNfcGh5bGlua19zZXR1cGAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGlzIGZ1bmN0aW9uJiMzOTtzIHByaW1hcnkgcHVycG9zZSBpcyB0aGUgY3JlYXRpb24gb2YgYSBgcGh5bGlua2AgaW5zdGFuY2UsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBmdW5jdGlvbiYjMzk7cyBuYW1lIGFuZCBpdHMgcGxhY2UgaW4gdGhlIEV0aGVybmV0IGRyaXZlciBzZXR1cC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gaW5zdGFudGlhdGUgdGhlIGFic3RyYWN0aW9uIHRoYXQgYnJpZGdlcyB0aGUgZ2FwIGJldHdlZW4gdGhlIE1BQyBhbmQgdGhlIFBIWS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgcGF0aHMuIEkgaW1tZWRpYXRlbHkgd29uZGVyOiBkb2VzIHRoZSBmdW5jdGlvbiBncmFjZWZ1bGx5IGhhbmRsZSB0aGUgc2NlbmFyaW8gd2hlcmUgbm8gUEhZIGlzIHByZXNlbnQ/IERvZXMgaXQgcmV0dXJuIGFuIGVycm9yLCBvciBwZXJoYXBzIGF0dGVtcHQgc29tZSBraW5kIG9mIGZhbGxiYWNrIG9yIGhhcmR3YXJlIGF1dG9uZWdvdGlhdGlvbiBzZXR1cD8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBpZiBhIFBIWSBpc24mIzM5O3QgZGV0ZWN0ZWQgb3IgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgcG9pbnQuIFRoYXQgd291bGQgc2lnbmlmaWNhbnRseSBhZmZlY3QgdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDI0Olx0XHRcdHBoeV9pbnRlcmZhY2Vfb3IoY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzLFxuMTQyNTpcdFx0XHRcdFx0IGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyxcbjE0MjY6XHRcdFx0XHRcdCBwY3MtXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuMTQyNzpcdFxuMTQyODpcdFx0LyogU29tZSBwbGF0Zm9ybXMsIGUuZy4gaU1YOE1QLCB3aXJlIGxwaV9pbnRyX28gdG8gdGhlIHNhbWUgaW50ZXJydXB0XG4xNDI5Olx0XHQgKiB1c2VkIGZvciBzdG1tYWMmIzM5O3MgbWFpbiBpbnRlcnJ1cHRzLCB3aGljaCBsZWFkcyB0byBpbnRlcnJ1cHQgc3Rvcm1zLlxuMTQzMDpcdFx0ICogU1RNTUFDX0ZMQUdfRUVFX0RJU0FCTEUgYWxsb3dzIEVFRSB0byBiZSBkaXNhYmxlZCBvbiBzdWNoIHBsYXRmb3Jtcy5cbjE0MzE6XHRcdCAqL1xuMTQzMjpcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5lZWUgXHUwMDI2XHUwMDI2XG4xNDMzOlx0XHQgICAgIShwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX0VFRV9ESVNBQkxFKSkge1xuMTQzNDpcdFx0XHQvKiBUaGUgR01BQyAzLjc0YSBkYXRhYm9vayBzdGF0ZXMgdGhhdCBFRUUgaXMgb25seSBzdXBwb3J0ZWRcbjE0MzU6XHRcdFx0ICogaW4gTUlJLCBHTUlJLCBhbmQgUkdNSUkgaW50ZXJmYWNlcy5cbjE0MzY6XHRcdFx0ICovXG4xNDM3Olx0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfTUlJLCBjb25maWctXHUwMDNlbHBpX2ludGVyZmFjZXMpO1xuMTQzODpcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUksIGNvbmZpZy1cdTAwM2VscGlfaW50ZXJmYWNlcyk7XG4xNDM5Olx0XHRcdHBoeV9pbnRlcmZhY2Vfc2V0X3JnbWlpKGNvbmZpZy1cdTAwM2VscGlfaW50ZXJmYWNlcyk7XG4xNDQwOlx0XG4xNDQxOlx0XHRcdC8qIElmIHdlIGhhdmUgYSBub24taW50ZWdyYXRlZCBQQ1MsIGFzc3VtZSB0aGF0IGl0IGlzIGNvbm5lY3RlZFxuMTQ0MjpcdFx0XHQgKiB0byB0aGUgR01BQyB1c2luZyBHTUlJIG9yIGFub3RoZXIgRUVFIGNvbXBhdGlibGUgaW50ZXJmYWNlLFxuMTQ0MzpcdFx0XHQgKiBhbmQgdGh1cyBhbGwgUENTLXN1cHBvcnRlZCBpbnRlcmZhY2VzIHN1cHBvcnQgTFBJLlxuMTQ0NDpcdFx0XHQgKi9cbjE0NDU6XHRcdFx0aWYgKHBjcylcbjE0NDY6XHRcdFx0XHRwaHlfaW50ZXJmYWNlX29yKGNvbmZpZy1cdTAwM2VscGlfaW50ZXJmYWNlcyxcbjE0NDc6XHRcdFx0XHRcdFx0IGNvbmZpZy1cdTAwM2VscGlfaW50ZXJmYWNlcyxcbjE0NDg6XHRcdFx0XHRcdFx0IHBjcy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4xNDQ5Olx0XG4xNDUwOlx0XHRcdC8qIEFsbCBmdWxsIGR1cGxleCBzcGVlZHMgYWJvdmUgMTAwTWJwcyBhcmUgc3VwcG9ydGVkICovXG4xNDUxOlx0XHRcdGNvbmZpZy1cdTAwM2VscGlfY2FwYWJpbGl0aWVzID0gfihNQUNfMTAwMEZEIC0gMSkgfCBNQUNfMTAwRkQ7XG4xNDUyOlx0XHRcdGNvbmZpZy1cdTAwM2VscGlfdGltZXJfZGVmYXVsdCA9IGVlZV90aW1lciAqIDEwMDA7XG4xNDUzOlx0XHRcdGNvbmZpZy1cdTAwM2VlZWVfZW5hYmxlZF9kZWZhdWx0ID0gdHJ1ZTtcbjE0NTQ6XHRcdH1cbjE0NTU6XHRcbjE0NTY6XHRcdGNvbmZpZy1cdTAwM2V3b2xfcGh5X3NwZWVkX2N0cmwgPSB0cnVlO1xuMTQ1NzpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfVVNFX1BIWV9XT0wpIHtcbjE0NTg6XHRcdFx0Y29uZmlnLVx1MDAzZXdvbF9waHlfbGVnYWN5ID0gdHJ1ZTtcbjE0NTk6XHRcdH0gZWxzZSB7XG4xNDYwOlx0XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAucG10X3JlbW90ZV93YWtlX3VwKVxuMTQ2MTpcdFx0XHRcdGNvbmZpZy1cdTAwM2V3b2xfbWFjX3N1cHBvcnQgfD0gV0FLRV9VQ0FTVDtcbjE0NjI6XHRcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5wbXRfbWFnaWNfZnJhbWUpXG4xNDYzOlx0XHRcdFx0Y29uZmlnLVx1MDAzZXdvbF9tYWNfc3VwcG9ydCB8PSBXQUtFX01BR0lDO1xuMTQ2NDpcdFx0fVxuMTQ2NTpcdFxuMTQ2NjpcdFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKGNvbmZpZywgZGV2X2Z3bm9kZShwcml2LVx1MDAzZWRldmljZSksXG4xNDY3Olx0XHRcdFx0XHQgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBoeV9pbnRlcmZhY2UsXG4xNDY4Olx0XHRcdFx0XHQgXHUwMDI2c3RtbWFjX3BoeWxpbmtfbWFjX29wcyk7XG4xNDY5Olx0XHRpZiAoSVNfRVJSKHBoeWxpbmspKVxuMTQ3MDpcdFx0XHRyZXR1cm4gUFRSX0VSUihwaHlsaW5rKTtcbjE0NzE6XHRcbjE0NzI6XHRcdHByaXYtXHUwMDNlcGh5bGluayA9IHBoeWxpbms7XG4xNDczOlx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY3MTQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBzZXF1ZW5jZSwgYXMgaWYgSSB3ZXJlIHdvcmtpbmcgdGhyb3VnaCBpdDoKCioqVGhpbmtpbmcgVGhyb3VnaCBQSFkgSW5pdGlhbGl6YXRpb24gYW5kIERldmljZSBSZWdpc3RyYXRpb24qKgoKQWxyaWdodCwgc28gYHBoeWxpbmtfY3JlYXRlYCBpcyBjbGV2ZXJseSBkZXNpZ25lZCB0byBiZSBmbGV4aWJsZTsgaXQgZG9lc24mIzM5O3QgKmFic29sdXRlbHkqIG5lZWQgYSBQSFkgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoYXQgbWVhbnMgYHN0bW1hY19waHlsaW5rX3NldHVwYCBpcyBnb2luZyB0byBzYWlsIHRocm91Z2ggd2l0aG91dCBhbnkgaXNzdWVzLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBkZXZpY2UgcmVnaXN0cmF0aW9uIGNhbiBoYXBwZW4sIHRoYW5rcyB0byB0aGUgc3Vic2VxdWVudCBgcmVnaXN0ZXJfbmV0ZGV2YCBjYWxsLCByaWdodD8gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgdGhlIGRldmljZSBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0uCgpOb3csIGEgY3JpdGljYWwgdGhvdWdodCBhcmlzZXM6IGhvdyBkb2VzIGBzdG1tYWNfaHdfaW5pdGAgZml0IGludG8gdGhpcyBwaWN0dXJlPyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGluaXRpYWwgaGFyZHdhcmUgc2V0dXAuIElmIHRoZSBkcml2ZXIgdmVyc2lvbiwgYHZlcnNpb25gLCBpcyB6ZXJvLCBgc3RtbWFjX2h3aWZfZmluZGAgd2lsbCBwb2ludCB1cyB0byB0aGUgYERXTUFDX0NPUkVfR01BQzRgIGVudHJ5LiBUaGUga2V5IGlzIHRoYXQgdGhlIGBtaW5faWRgIGlzIHplcm8uIFRoZW4sIGBzdG1tYWNfaHdpZl9pbml0YCBhc3NpZ25zIHRoZSBmb3VuZCBNQUMgZW50cnkgdG8gYHByaXYtJmd0O2h3YC4gVGhlIGFjdHVhbCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBpcyBraWNrZWQgb2ZmIGluIGBzdG1tYWNfaHdfaW5pdGAuIFNwZWNpZmljYWxseSwgYSBjYWxsIHRvIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYCB3aWxsIG9jY3VyLiBUaGlzIGxpa2VseSBwcm9iZXMgdGhlIGhhcmR3YXJlIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MzE0NT1zdGF0aWMgdm9pZCBzdG1tYWNfbW1jX3NldHVwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTMxNTktLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjMxNjA6ICogc3RtbWFjX2dldF9od19mZWF0dXJlcyAtIGdldCBNQUMgY2FwYWJpbGl0aWVzIGZyb20gdGhlIEhXIGNhcC4gcmVnaXN0ZXIuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTMxNjEtICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzE2Ny0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MzE2ODpzdGF0aWMgaW50IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zMTY5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc0MDc9c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDIxLVx0LyogR2V0IHRoZSBIVyBjYXBhYmlsaXR5IChuZXcgR01BQyBuZXdlciB0aGFuIDMuNTBhKSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NDIyOlx0cHJpdi1cdTAwM2Vod19jYXBfc3VwcG9ydCA9IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MjMtXHRpZiAocHJpdi1cdTAwM2Vod19jYXBfc3VwcG9ydCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY1MgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgc3RtbWFjX2dldF9od19mZWF0dXJlc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgaGFyZHdhcmUgZmVhdHVyZSBkZXRlY3Rpb24gbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBzdGFuZGFyZCBTVE0zMiBFdGhlcm5ldCBNQUMgZHJpdmVyIGhlcmUsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdHlwaWNhbCBwcm9iaW5nIGZvciBjYXBhYmlsaXRpZXMgbGlrZSBqdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWQgc3VwcG9ydCwgYW5kIHBvdGVudGlhbGx5IHNvbWUgZGVzY3JpcHRvciBmb3JtYXQgY29uc2lkZXJhdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiBob3cgdGhlIGRyaXZlciYjMzk7cyBmZWF0dXJlIGRldGVjdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSByZWdpc3RlciBzZXR0aW5ncy4gSXMgdGhpcyBkb25lIGF0IHJ1bnRpbWUgb3IgYXQgaW5pdGlhbGl6YXRpb24/IEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBkcml2ZXIgcHJlc2VudHMgaXRzIGNhcGFiaWxpdGllcyB0byB0aGUgbmV0d29ya2luZyBzdGFjay4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhIHBhcnRpY3VsYXIgY29uY2VybiB0byBhZGRyZXNzPyBJcyB0aGVyZSBhIHN1YnRsZSBidWcgb3IgbWlzc2luZyBmZWF0dXJlPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE2ODpcdHN0YXRpYyBpbnQgc3RtbWFjX2dldF9od19mZWF0dXJlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4zMTY5Olx0e1xuMzE3MDpcdFx0cmV0dXJuIHN0bW1hY19nZXRfaHdfZmVhdHVyZShwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgXHUwMDI2cHJpdi1cdTAwM2VkbWFfY2FwKSA9PSAwO1xuMzE3MTpcdH1cbjMxNzI6XHRcbjMxNzM6XHQvKipcbjMxNzQ6XHQgKiBzdG1tYWNfY2hlY2tfZXRoZXJfYWRkciAtIGNoZWNrIGlmIHRoZSBNQUMgYWRkciBpcyB2YWxpZFxuMzE3NTpcdCAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcbjMxNzY6XHQgKiBEZXNjcmlwdGlvbjpcbjMxNzc6XHQgKiBpdCBpcyB0byB2ZXJpZnkgaWYgdGhlIE1BQyBhZGRyZXNzIGlzIHZhbGlkLCBpbiBjYXNlIG9mIGZhaWx1cmVzIGl0XG4zMTc4Olx0ICogZ2VuZXJhdGVzIGEgcmFuZG9tIE1BQyBhZGRyZXNzXG4zMTc5Olx0ICovXG4zMTgwOlx0c3RhdGljIHZvaWQgc3RtbWFjX2NoZWNrX2V0aGVyX2FkZHIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuMzE4MTpcdHtcbjMxODI6XHRcdHU4IGFkZHJbRVRIX0FMRU5dO1xuMzE4MzpcdFxuMzE4NDpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHByaXYtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuMzE4NTpcdFx0XHRzdG1tYWNfZ2V0X3VtYWNfYWRkcihwcml2LCBwcml2LVx1MDAzZWh3LCBhZGRyLCAwKTtcbjMxODY6XHRcdFx0aWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcikpXG4zMTg3Olx0XHRcdFx0ZXRoX2h3X2FkZHJfc2V0KHByaXYtXHUwMDNlZGV2LCBhZGRyKTtcbjMxODg6XHRcdFx0ZWxzZVxuMzE4OTpcdFx0XHRcdGV0aF9od19hZGRyX3JhbmRvbShwcml2LVx1MDAzZWRldik7XG4zMTkwOlx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtkZXZpY2UgTUFDIGFkZHJlc3MgJXBNXFxuXCYjMzQ7LFxuMzE5MTpcdFx0XHRcdCBwcml2LVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4zMTkyOlx0XHR9XG4zMTkzOlx0fVxuMzE5NDpcdFxuMzE5NTpcdGludCBzdG1tYWNfZ2V0X3BoeV9pbnRmX3NlbChwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuMzE5NjpcdHtcbjMxOTc6XHRcdGludCBwaHlfaW50Zl9zZWwgPSAtRUlOVkFMO1xuMzE5ODpcdFxuMzE5OTpcdFx0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTUlJIHx8XG4zMjAwOlx0XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJKVxuMzIwMTpcdFx0XHRwaHlfaW50Zl9zZWwgPSBQSFlfSU5URl9TRUxfR01JSV9NSUk7XG4zMjAyOlx0XHRlbHNlIGlmIChwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50ZXJmYWNlKSlcbjMyMDM6XHRcdFx0cGh5X2ludGZfc2VsID0gUEhZX0lOVEZfU0VMX1JHTUlJO1xuMzIwNDpcdFx0ZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxuMzIwNTpcdFx0XHRwaHlfaW50Zl9zZWwgPSBQSFlfSU5URl9TRUxfUk1JSTtcbjMyMDY6XHRcdGVsc2UgaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkVWTUlJKVxuMzIwNzpcdFx0XHRwaHlfaW50Zl9zZWwgPSBQSFlfSU5URl9TRUxfUkVWTUlJO1xuMzIwODpcdFxuMzIwOTpcdFx0cmV0dXJuIHBoeV9pbnRmX3NlbDtcbjMyMTA6XHR9XG4zMjExOlx0RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2dldF9waHlfaW50Zl9zZWwpO1xuMzIxMjpcdFxuMzIxMzpcdHN0YXRpYyBpbnQgc3RtbWFjX3ByZXJlc2V0X2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4zMjE0Olx0e1xuMzIxNTpcdFx0c3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCA9IHByaXYtXHUwMDNlcGxhdDtcbjMyMTY6XHRcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4zMjE3Olx0XHRzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3OTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTVE1NQUMgRHJpdmVyIGFuZCBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc3RtbWFjYCBkcml2ZXIgY29kZS4gVGhpcyBgc3RtbWFjX2dldF9od19mZWF0dXJlYCBmdW5jdGlvbi4uLiBpZiBpdCByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIHplcm8sIHRoZW4gYHN0bW1hY19nZXRfaHdfZmVhdHVyZXNgIGp1c3QgcmV0dXJucyB6ZXJvLiBJZiBpdCAqZG9lcyogcmV0dXJuIHplcm8sIGl0IGp1c3Qgb3V0cHV0cyAmIzM0O05vIEhXIERNQSBmZWF0dXJlIHJlZ2lzdGVyIHN1cHBvcnRlZCYjMzQ7IGFuZCBrZWVwcyBnb2luZy4gVGhhdCYjMzk7cy4uLiBpbnRlcmVzdGluZy4gRXNzZW50aWFsbHksIHRoZSBkcml2ZXIgc2VlbXMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IGV2ZW4gd2l0aCBhIGNvbXBsZXRlbHkgZmFrZSBQQ0kgZGV2aWNlLCBodWg/IFRoYXQgY291bGQgbGVhZCB0byBzb21lIHByZXR0eSBzaWduaWZpY2FudCBmYWxzZSBwb3NpdGl2ZXMuCgpXYWl0IGEgc2Vjb25kLi4uIGRvZXNuJiMzOTt0IHN5emthbGxlciBoYXZlIHRoaXMgYHZoY2lgIGRldmljZSB0aGluZyB0aGF0IGxldHMgaXQgaW5qZWN0IFBDSSBkZXZpY2VzPyBUaGF0JiMzOTtzIHBlcmZlY3QgZm9yIHRlc3RpbmcgdGhpcyBzb3J0IG9mIHRoaW5nLiBCdXQgZG9lcyBzeXprYWxsZXIgKmFjdHVhbGx5KiB0ZXN0IGBzdG1tYWNgPyBJIHNob3VsZCBjaGVjay4gVXN1YWxseSwgdGhlIGRlZmF1bHQgZGVmY29uZmlnIGZvciB0aGUga2VybmVsIGRvZXNuJiMzOTt0IGVuYWJsZSBgQ09ORklHX1NUTU1BQ19FVEhgIG9yIGBDT05GSUdfU1RNTUFDX1BDSWAuIEJ1dCBzeXprYWxsZXImIzM5O3MgY29uZmlnIG1pZ2h0IGJlIGRpZmZlcmVudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZ290IHRob3NlIGVuYWJsZWQuIFRoZW4sIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIHNwZWNpZmljYWxseSBmb3IgYHN0bW1hY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGV4aXN0aW5nIGNvdmVyYWdlIGZvciB0aGlzIGRyaXZlciBpbiB0aGUgc3l6a2FsbGVyIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjkzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgc3RtbWFjIHdpdGggU3l6a2FsbGVyOiBBIFBsYW4qKgoKT2theSwgc28gdGhlcmUgYXJlbiYjMzk7dCBhbnkgcHJlLWV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbnMgc3BlY2lmaWNhbGx5IGZvciBgc3RtbWFjYC4uLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgaHVyZGxlLCBidXQgbm90IGluc3VybW91bnRhYmxlLiBCdXQgSSByZW1lbWJlciB0aGF0IGBzeXprYWxsZXJgIGNhbiBmdXp6IGl0IHRocm91Z2ggYG5ldGxpbmtgISBTcGVjaWZpY2FsbHksIHVzaW5nIGB0YyBxZGlzY2AgaWYgdGhlIGRldmljZSBpcyBhY3R1YWxseSBwcmVzZW50LiBBbmQgdGhhdCBtYWtlcyBzZW5zZSDigJMgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50LCB0aGVuIGl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYSBgbmV0ZGV2YC4KCkFoYSEgU28sIHRoZW4gSSBjYW4gbGV2ZXJhZ2Ugc3l6a2FsbGVyJiMzOTtzIGBSVE1fTkVXUURJU0NgIGZ1bmN0aW9uYWxpdHkgdG8gYWRkIGFuIGBldHNgIHFkaXNjLiBXYWl0IGEgbWludXRlLi4uIGBldHNgIHFkaXNjIGlzIGEgcHJldHR5IHN0YW5kYXJkIExpbnV4IHFkaXNjLCByaWdodD8gTm90aGluZyBvYnNjdXJlIG9yIGV4b3RpYyBhYm91dCBpdC4gVGhhdCYjMzk7cyBnb29kIG5ld3MuIE5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgc3l6a2FsbGVyIGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciBgZXRzYCBxZGlzYy4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwOyBjb25maXJtaW5nIGl0cyBhbHJlYWR5IHN1cHBvcnRlZCwgd2lsbCBzYXZlIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzL2xpbnV4L3NvY2tldF9uZXRsaW5rX3JvdXRlX3RjLnR4dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjYwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJiMzOTtkIGJlIGRvaW5nIGFuZCB3aHk6CgoqKkluaXRpYWwgSW52ZXN0aWdhdGlvbjogU29ja2V0IE5ldGxpbmsgUm91dGUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSwgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLiBUaGUgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyBvYnZpb3VzbHkgZ29pbmcgdG8gYmUgdGhhdCBgc3lzL2xpbnV4L3NvY2tldF9uZXRsaW5rX3JvdXRlLnR4dGAgZmlsZS4gTmV0bGluayByb3V0aW5nIHNvY2tldHMgaW4gTGludXggYXJlIHRoZSBsaWZlYmxvb2Qgb2YgaG93IHJvdXRpbmcgaW5mb3JtYXRpb24sIGFuZCB0aGVyZWZvcmUgbmV0d29yayBjb25maWd1cmF0aW9uLCBpcyBtYW5hZ2VkLiBUaGF0IGZpbGUgd2lsbCwgYWxtb3N0IGNlcnRhaW5seSwgaG9sZCBjcml0aWNhbCBkb2N1bWVudGF0aW9uLCBjb25maWd1cmF0aW9uIGRldGFpbHMsIGFuZCBsaWtlbHkgc29tZSBjcnVjaWFsIGNvZGUgZXhhbXBsZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBiZSB0aGUgY2Fub25pY2FsIHNvdXJjZSBvciBhdCBsZWFzdCAqYSogdmVyeSBpbXBvcnRhbnQgcmVmZXJlbmNlLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc3lzL2xpbnV4L3NvY2tldF9uZXRsaW5rX3JvdXRlLnR4dGAgZmlsZSBjb25maWd1cmVzIHRoZSBjb25uZWN0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb25maWd1cmF0aW9uIHBvc3NpYmlsaXRpZXMsIGV4cGVjdGVkIHZhbHVlcyBhbmQgdGhlIGdlbmVyYWwgd29ya2Zsb3cgb2YgYW55IGNvbW1hbmRzIGFuZCBjYWxscyBpbnZvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byBhYnNvcmIgaG93IHRoaXMgd29ya3MsIGF0IGEgaGlnaCBsZXZlbC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3N5cy9saW51eC9zb2NrZXRfbmV0bGlua19yb3V0ZS50eHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk1NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZXRzYCBLZXJuZWwgTW9kdWxlKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgYGV0c2AgbW9kdWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBmb3Iga2VybmVsIG1vZHVsZXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIExpbnV4IHNvdXJjZSB0cmVlLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSB1bmRlciBgc3lzL2xpbnV4L2AsIGFzIHRoYXQmIzM5O3MgZ2VuZXJhbGx5IHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgc3lzdGVtLWxldmVsIGNvbXBvbmVudHMuIFRoaXMgaW5pdGlhbCBjaGVjayBpcyBhIGZ1bmRhbWVudGFsIGRpYWdub3N0aWMgc3RlcDsgSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBleGlzdGVuY2UgYW5kIHBsYWNlbWVudCBvZiB0aGlzIG1vZHVsZSBiZWZvcmUgZW1iYXJraW5nIG9uIGFueSBkZWVwZXIgYW5hbHlzaXMuIEkmIzM5O20gZXNzZW50aWFsbHkgcGVyZm9ybWluZyBhIHNhbml0eSBjaGVjayB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHR5cGljYWwgbW9kdWxlIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzeXMvbGludXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAxNTYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBFVFMgUXVldWUgRGlzY2lwbGluZSoqCgpSaWdodCwgbGV0IG1lIHRoaW5rLi4uIEkgcmVjYWxsIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgdGhlIGBldHNgIHFkaXNjLiBBaCB5ZXMsIGl0JiMzOTtzIGltcGxlbWVudGVkIGluIGBuZXQvc2NoZWQvc2NoX2V0cy5jYC4gVGltZSB0byBjb25maXJtIHRoYXQuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIHRoYXQgc3BlY2lmaWMgZmlsZSwgYHNjaF9ldHMuY2AsIGFjdHVhbGx5IGV4aXN0cyBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBHb3R0YSBkb3VibGUgY2hlY2sgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMgd2hlcmUgSSBleHBlY3QgaXQgdG8gYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDX1NFVFVQX1FESVNDX0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9OTUwPWVudW0gdGNfc2V0dXBfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC05NjYtXHRUQ19TRVRVUF9GVCxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6OTY3Olx0VENfU0VUVVBfUURJU0NfRVRTLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC05NjgtXHRUQ19TRVRVUF9RRElTQ19UQkYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDM3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIHRoZSBFVFMgUWRpc2MgSW50ZWdyYXRpb24gaW4gU1RNTUFDIERyaXZlcioqCgpPa2F5LCBzbyBgVENfU0VUVVBfUURJU0NfRVRTYCBkZWZpbml0ZWx5IGV4aXN0cyDigJMgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuIFRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBkb2VzIHN5emthbGxlciBhbHJlYWR5IGZ1enogdGhlIGBldHNgIHFkaXNjIGRpcmVjdGx5PyBJIGRvbiYjMzk7dCBzZWUgc3BlY2lmaWMgZnV6emluZyBmb3IgaXQgbWVudGlvbmVkLCBzbyBpdCYjMzk7cyBsaWtlbHkgc3l6a2FsbGVyIHdvdWxkIHJlbHkgb24gZ2VuZXJpYyBuZXRsaW5rIGF0dHJpYnV0ZXMsIHdoaWNoIG1pZ2h0IGJlIGxlc3MgZWZmZWN0aXZlLiBIbW0sIHdhaXQgYSBtaW51dGUsIHRoZSBwYXRjaCBhdXRob3IgaXMgYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLiBUaGlzICpkZWZpbml0ZWx5KiBtZWFucyBzeXprYWxsZXIgZWl0aGVyIGZvdW5kIGEgYnVnIHJlbGF0ZWQgdG8gYGV0c2AsIG9yIHRoaXMgaXMgYSBwYXRjaCBzeXprYWxsZXIgaXMgdGVzdGluZyBmb3IgYSBwb3RlbnRpYWwgYnVnLgoKTm93LCB0aGUgcHJvbXB0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgdGhpcyBpcyBhbHJlYWR5IGFwcGxpZWQgdG8gdGhlIEhFQUQgY29tbWl0LiBTbywgbXkgdGFzayBpcyB0byBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBrZXJuZWwgdGhhdCAqc2hvdWxkKiBiZSBmdXp6ZWQuIEFuZCB5ZXMsIGl0IGRvZXMhIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgRVRTIHFkaXNjIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSB0byB0aGUgc3RtbWFjIGRyaXZlci4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSWYgSSBjYW4gcHJvYmUgdGhlIGRyaXZlciB0aHJvdWdoIGEgZHVtbXkgUENJIGRldmljZSwgdGhlIGFuc3dlciBpcyB5ZXMuIE5vdywgYHN0bW1hY19wY2lfcHJvYmVgIHVzZXMgYHBjaW1fZW5hYmxlX2RldmljZShwZGV2KWAuIElmIHRoZSBkZXZpY2UgaXMgaW5qZWN0ZWQgdmlhIGB2aGNpYCwgaXQgKndpbGwqIGhhdmUgUENJIEJBUnMuIFRoZSBgcGNpbV9pb21hcF9yZWdpb25gIGZ1bmN0aW9uIHdpbGwgbWFwIHRoZSBCQVIuIFRoaXMgaW4gdHVybiBjYWxscyBgc3RtbWFjX2R2cl9wcm9iZWAsIHJpZ2h0PyBBbmQgdGhhdCBmdW5jdGlvbiwgeWVzLCBpdCBhbGxvY2F0ZXMgbWVtb3J5LCBtYXBzIHJlZ2lzdGVycywgdGhlIHdvcmtzLiBUaGUgY2F0Y2ggaXMgd2hhdCBoYXBwZW5zIGlmIHRoZSBCQVJzIGFyZW4mIzM5O3QgYmFja2VkIGJ5IHJlYWwgaGFyZHdhcmU/IFJlYWRzIG1pZ2h0IHJldHVybiBgMHhmZmZmZmZmZmAgb3IgYDBgLiBJZiBgcmVhZGxgIHJldHVybnMgemVybywgYHN0bW1hY19nZXRfdmVyc2lvbmAgc2V0cyBgc25wc3ZlciA9IDBgLCB0aGVuIHRoZSBkcml2ZXIgY2FsbHMgYHN0bW1hY19od2lmX2ZpbmRgIHdoZXJlIGBtaW5faWQgPSAwYC4gQWZ0ZXJ3YXJkcywgYHN0bW1hY19od19pbml0YCBpcyBjYWxsZWQsIGFuZCB0aGF0IGZ1bmN0aW9uIGNhbGxzIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSWYgdGhhdCByZXR1cm5zIDAsIGl0IHByb2NlZWRzISBJdCB0aGVuIHJlZ2lzdGVycyB0aGUgTURJTyBidXMgYW5kICpmaW5hbGx5KiB0aGUgbmV0ZGV2LiBTbywgdGhlIG5ldGRldiAqd2lsbCogYmUgcmVnaXN0ZXJlZCBldmVuIHdpdGggYSB2aXJ0dWFsIGRldmljZSEKClRoZXJlZm9yZSwgdGhpcyBkcml2ZXIgKmlzKiByZWFjaGFibGUgaW4gUUVNVSBpZiBhIGR1bW15IFBDSSBkZXZpY2Ugd2l0aCB0aGUgcmlnaHQgSUQgaXMgaW5qZWN0ZWQuIEFuZCBzeXprYWxsZXImIzM5O3MgYHZoY2lgIGNhbiBpbmplY3QgYSBQQ0kgZGV2aWNlIHdpdGggYFBDSV9WRU5ET1JfSURfU1lOT1BTWVNgIGFuZCBgUENJX0RFVklDRV9JRF9TWU5PUFNZU19HTUFDNV9JRGAgKDB4NzEwMikuIFBlcmZlY3QsIGl0IGlzIHJlYWNoYWJsZS4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IG9uZXMgdG8gZm9jdXMgb24/IFRoZSBwYXRjaCBhZGRzIHRoZXNlOiBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgLCBhbmQgYWxzbyBtb2RpZmllcyBgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRgLCBgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW9gIGFuZCBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYC4gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IGBzdG1tYWNfdGMuY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfc2V0dXBfZXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM9MTIxNj1zdGF0aWMgdm9pZCBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMjI2OnN0YXRpYyBpbnQgdGNfc2V0dXBfZXRzX3NjaGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyMjctXHRcdFx0ICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTI2OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjEyNjk6c3RhdGljIGludCB0Y19zZXR1cF9ldHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTI3MC1cdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMjczLVx0Y2FzZSBUQ19FVFNfUkVQTEFDRTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjEyNzQ6XHRcdHJldHVybiB0Y19zZXR1cF9ldHNfc2NoZWQocHJpdiwgcW9wdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMjc1LVx0Y2FzZSBUQ19FVFNfREVTVFJPWTpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYz0xNDAwPWNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNF90Y19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTQwNi1cdC5zZXR1cF9ldGYgPSB0Y19zZXR1cF9ldGYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxNDA3Olx0LnNldHVwX2V0cyA9IHRjX3NldHVwX2V0cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTE0MDgtXHQucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM9MTQxMj1jb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzUxMF90Y19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTQxOC1cdC5zZXR1cF9ldGYgPSB0Y19zZXR1cF9ldGYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxNDE5Olx0LnNldHVwX2V0cyA9IHRjX3NldHVwX2V0cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTE0MjAtXHQucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTk2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUcmFmZmljIENvbnRyb2wgKHRjKSBDb25maWd1cmF0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIHRoZXNlIHRyYWZmaWMgY29udHJvbCBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gdGhlIGtleSBwbGF5ZXJzIGhlcmUgc2VlbSB0byBiZSBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgLCBgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRgLCBgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW9gLCBhbmQgYHRjX3NldHVwX2R3bWFjNTEwX21xcHJpb2AuIEkgaW1tZWRpYXRlbHkgbm90aWNlIHRoYXQgYHRjX3NldHVwX2V0c2AgYW5kIGB0Y19zZXR1cF9ldHNfc2NoZWRgIGFyZSBzdGF0aWMuIFdhaXQuLi4gc2luY2UgYHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0YCBhbmQgYHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvYCBhcmUgZXhwb3J0ZWQsIG1lYW5pbmcgdGhleSYjMzk7cmUgbm90IHN0YXRpYywgSSByZWFsbHkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBhc3N1bXB0aW9uLiBUaW1lIHRvIGNvbmZpcm0gaWYgdGhlc2UgdHdvIGFyZSBpbmRlZWQgbm90IHN0YXRpYyBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MDE9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0bW1hY19zaW1wbGVfcG1fb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDAyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDAzOnZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQwNC12b2lkIHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0zNDAwPXN0YXRpYyB2b2lkIHN0bW1hY19zZXRfcmluZ3NfbGVuZ3RoKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTM0MTctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjM0MTg6ICogIHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0IC0gU2V0IFRYIHF1ZXVlIHdlaWdodFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zNDE5LSAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zNDIxLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzozNDIyOnZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zNDIzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTM1NjY9c3RhdGljIHZvaWQgc3RtbWFjX210bF9jb25maWd1cmF0aW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTM1NzEtXHRpZiAodHhfcXVldWVzX2NvdW50IFx1MDAzZSAxKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzozNTcyOlx0XHRzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzU3My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYz0xMjE2PXN0YXRpYyB2b2lkIHN0bW1hY19xZGlzY19yZXN0b3JlX2R0X2NvbmZpZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTIxOS1cdHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlID0gZmFsc2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMjIwOlx0c3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMjIxLVx0c3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8ocHJpdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODIxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBTdGF0aWMgYW5kIE5vbi1TdGF0aWMgRnVuY3Rpb24gRGVjbGFyYXRpb25zKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIHBvaW50IGlzIGFib3V0IGZ1bmN0aW9uIHNjb3BlIGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IHRoZXJlJiMzOTtzIGEgZGlzdGluY3Rpb24gaGVyZSwgYSBkaWZmZXJlbmNlIGluIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkLiBJIHNlZSB0aGF0IGB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9gIGlzLCBpbiBmYWN0LCBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSXQmIzM5O3Mgbm90IG1lYW50IHRvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIFRoZW4sIEkgcmVtZW1iZXIsIHRoYXQgYHN0bW1hY19zZXR1cF90Y2AsIHRoZSBzZXR1cCBmb3IgdHJhZmZpYyBjb250cm9sLCBpcyAqbm90KiBzdGF0aWMuIEl0cyBhIGdsb2JhbCBmdW5jdGlvbi4gU28sIHRoYXQmIzM5O3MgYSBkaWZmZXJlbnQgYXBwcm9hY2ggZW50aXJlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19zZXR1cF90YyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTYzODU9c3RhdGljIGludCBzdG1tYWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTYzOTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjYzOTU6c3RhdGljIGludCBzdG1tYWNfc2V0dXBfdGNfYmxvY2tfY2IoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjM5Ni1cdFx0XHRcdCAgICB2b2lkICpjYl9wcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NjQyMT1zdGF0aWMgTElTVF9IRUFEKHN0bW1hY19ibG9ja19jYl9saXN0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjQyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjQyMzpzdGF0aWMgaW50IHN0bW1hY19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY0MjQtXHRcdFx0ICAgdm9pZCAqdHlwZV9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjQzNS1cdFx0XHRcdFx0XHQgIFx1MDAyNnN0bW1hY19ibG9ja19jYl9saXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo2NDM2Olx0XHRcdFx0XHRcdCAgc3RtbWFjX3NldHVwX3RjX2Jsb2NrX2NiLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy02NDM3LVx0XHRcdFx0XHRcdCAgcHJpdiwgcHJpdiwgdHJ1ZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03MzEwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3RtbWFjX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MzIxLVx0Lm5kb19nZXRfc3RhdHM2NCA9IHN0bW1hY19nZXRfc3RhdHM2NCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzMyMjpcdC5uZG9fc2V0dXBfdGMgPSBzdG1tYWNfc2V0dXBfdGMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczMjMtXHQubmRvX3NlbGVjdF9xdWV1ZSA9IHN0bW1hY19zZWxlY3RfcXVldWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NzI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTVE1NQUMgVHJhZmZpYyBDb250cm9sIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHN0bW1hY19zZXR1cF90Y2AgaXMgZGVjbGFyZWQgYHN0YXRpY2AuIFNvIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdHJhZmZpYyBjb250cm9sIGluIHRoZSBTVE1NQUMgZHJpdmVyLiBJIHF1aWNrbHkgc2VlIHRoYXQgYHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0YCBhbmQgYHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvYCBhcmUgdGhlIG5vbi1zdGF0aWMgY2FuZGlkYXRlcy4KCldhaXQgYSBzZWNvbmQsIEkgcmVjYWxsIHRoYXQgYHRjX3NldHVwX2V0c2AgaXMgKmFsc28qIHN0YXRpYy4gVGhpcyBuZWVkcyBjbG9zZXIgc2NydXRpbnkuIEFyZSB0aGVyZSBhbnkgb3RoZXIgbmV3IGVudHJpZXM/IE5vLCBqdXN0IHRob3NlIHR3bywgYHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0YCBhbmQgYHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvYC4KCkFoLCBidXQgbm93IEkgcmVtZW1iZXIsIGBzdG1tYWNfdGNfb3BzYCBwcm92aWRlcyBhIGBzZXR1cF9ldHNgIGNhbGxiYWNrLiBHb3QgaXQuIFNvLCBldmVuIHRob3VnaCBzb21lIGFyZSBzdGF0aWMsIHRoZXkgYXJlICpzdGlsbCogdmlhYmxlLiBPa2F5LCBzbyBteSBsaXN0IGluY2x1ZGVzIGBzdG1tYWNfc2V0dXBfdGNgLCBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodGAsIGBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpb2AsIGFuZCBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYC4gSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgcHJvbXB0IGluZGljYXRlcyBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gSG93ZXZlciwgZXZlbiB0aGUgc3RhdGljIG9uZXMgYXJlIHZhbGlkIGlmIHRoZXkgYXJlIGRpc3RpbmN0LgoKQ29uc2lkZXJpbmcgdGhlIHByb21wdCYjMzk7cyBpbnN0cnVjdGlvbiB0byBwcmVmZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZSBjb21waWxlciB3b24mIzM5O3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5JiMzOTtsbCBoYXZlIHVuaXF1ZSBzeW1ib2wgYWRkcmVzc2VzLiBgc3RtbWFjX3NldHVwX3RjYCBhbmQgYHRjX3NldHVwX2V0c2AgYXJlIGNhbGxiYWNrcywgc28gdGhleSBhcmUgbm90IGlubGluZWQuCgpOb3csIGxldCBtZSBjb25maXJtIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSB0aGluayBgQ09ORklHX1NUTU1BQ19FVEhgIGFuZCBgQ09ORklHX1NUTU1BQ19QQ0lgIGFyZSByZWxldmFudCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19ORVRfU0NIX0VUU2AgaXMgYWxzbyBlbmFibGVkLCBhcyB0aGlzIGVuYWJsZXMgdGhlIEVUUyBxZGlzYywgYSBrZXkgY29tcG9uZW50IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIX0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTM2Mz1jb25maWcgTkVUX1NDSF9QTFVHXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzg4LVxubmV0L3NjaGVkL0tjb25maWc6Mzg5OmNvbmZpZyBORVRfU0NIX0VUU1xubmV0L3NjaGVkL0tjb25maWctMzkwLVx0dHJpc3RhdGUgXCYjMzQ7RW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2ODYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBTVE1NQUMgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIEkmIzM5O3ZlIGdvdCBpdC4gV2UgZGVmaW5pdGVseSBuZWVkIGBORVRfU0NIX0VUU2AgZW5hYmxlZC4gVGhhdCBtdWNoIGlzIGNsZWFyLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCB3YXJyYW50IGF0dGVudGlvbj8gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMsIGBDT05GSUdfU1RNTUFDX0VUSGAgaGluZ2VzIG9uIGEgZmV3IHRoaW5nczogYENPTkZJR19ORVRERVZJQ0VTYCwgYENPTkZJR19FVEhFUk5FVGAsIGBDT05GSUdfSEFTX0lPTUVNYCwgYW5kIGBDT05GSUdfSEFTX0RNQWAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEFuZCBgQ09ORklHX1NUTU1BQ19QQ0lgIGJ1aWxkcyBvbiBgQ09ORklHX1NUTU1BQ19FVEhgLCBuYXR1cmFsbHksIGJ1dCBhbHNvIHJlcXVpcmVzIGBDT05GSUdfUENJYC4gVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYCBmaWxlIGRpcmVjdGx5LiBUaGF0JiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGNvbmZpcm0gYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVE1NQUNfUENJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTU1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4gZW1iZWRkZWQgbmV0d29ya2luZyBhbmQgTGludXggZGV2aWNlIGRyaXZlcnM6CgoqKkFuYWx5emluZyB0aGUgU1RNTUFDIFBDSSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBoZWFydCBvZiB0aGUgU1RNTUFDIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBQQ0kgYXNwZWN0cy4gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvYCBkaXJlY3RvcnkuIFRoZSBmb2N1cywgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyBhcm91bmQgdGhlIGBTVE1NQUNfUENJYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaXMgY29uZmlndXJlZCB3aGVuIGl0JiMzOTtzIG9wZXJhdGluZyBvbiBhIFBDSSBpbnRlcmZhY2UuCgpJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yOgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBmZWF0dXJlcyBvciBkcml2ZXJzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYFNUTU1BQ19QQ0lgIHRvIGJlIGF2YWlsYWJsZT8KKiAgICoqRGVwZW5kZW5jaWVzIG9mIHRoZSBEZXZpY2U6KiogSG93IGlzIHRoZSBjb25maWd1cmF0aW9uIG9mIGBTVE1NQUNfUENJYCBkZXBlbmRhbnQgb24gb3RoZXIgZmVhdHVyZXMgb2YgdGhlIGRldmljZT8KKiAgICoqRGVmYXVsdCBTZXR0aW5nczoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIHNldHRpbmdzIHdoZW4gYSBTVE1NQUMgaXMgY29uZmlndXJlZCBvbiBhIFBDSSBkZXZpY2U/CiogICAqKkRvY3VtZW50YXRpb246KiogSXMgdGhlcmUgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB3aXRoaW4gdGhlIGBLY29uZmlnYCBmaWxlIHRoYXQgZXhwbGFpbnMgdGhlIHB1cnBvc2Ugb3IgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIHRoaXMgb3B0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc3RyYWludHMgYW5kIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBQQ0kgc3VwcG9ydCBmb3IgdGhlIFNUTU1BQy4KClRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBQQ0ktc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUENJIGJ1cy4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBob3cgZGlmZmVyZW50IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGRlcGVuZGluZyBvbiB3aGV0aGVyIGBTVE1NQUNfUENJYCBpcyBzZXQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdHJvdWJsZXNob290aW5nIFBDSS1yZWxhdGVkIGlzc3VlcyBhbmQgdGFpbG9yaW5nIHRoZSBkcml2ZXIgdG8gc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiA0MDE6XHRcdHNlbGVjdCBNT1RPUkNPTU1fUEhZXG4gNDAyOlx0XHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxuIDQwMzpcdFx0aGVscFxuIDQwNDpcdFx0ICBUaGlzIGVuYWJsZXMgZ2x1ZSBkcml2ZXIgZm9yIE1vdG9yY29tbSBEV01BQy1iYXNlZCBQQ0kgRXRoZXJuZXRcbiA0MDU6XHRcdCAgY29udHJvbGxlcnMuIEN1cnJlbnRseSBvbmx5IFlUNjgwMSBpcyBzdXBwb3J0ZWQuXG4gNDA2Olx0XG4gNDA3Olx0Y29uZmlnIFNUTU1BQ19QQ0lcbiA0MDg6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcJiMzNDtcbiA0MDk6XHRcdGRlcGVuZHMgb24gUENJXG4gNDEwOlx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiA0MTE6XHRcdHNlbGVjdCBTVE1NQUNfTElCUENJXG4gNDEyOlx0XHRoZWxwXG4gNDEzOlx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxuIDQxNDpcdFx0ICBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIG9uIFhMSU5YIFhDMlYzMDAwIEZGMTE1MkFNVDAyMjFcbiA0MTU6XHRcdCAgRDEyMTU5OTRBIFZJUlRFWCBGUEdBIGJvYXJkIGFuZCBTTlBTIFFvUyBJUEsgUHJvdG90eXBpbmcgS2l0LlxuIDQxNjpcdFxuIDQxNzpcdFx0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuIDQxODpcdFxuIDQxOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjkwMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGRlcGVuZGVuY2llcywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRlY29kaW5nIHRoZSBIYXJkd2FyZSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBjcnVjaWFsIGludGVyZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gaGluZ2VzLCBxdWl0ZSBmdW5kYW1lbnRhbGx5LCBvbiB0aGUgcHJlc2VuY2UgYW5kIHByb3BlciBjb25maWd1cmF0aW9uIG9mIGBQQ0lgIGFuZCBgQ09NTU9OX0NMS2AuIFRob3NlIGFyZSB0aGUgYmFzZWxpbmUgcmVxdWlyZW1lbnRzLiBBZnRlciB0aGF0LCBJIG5vdGljZSB0aGUgZGVwZW5kZW5jeSBvZiBgU1RNTUFDX0VUSGAgb24gYm90aCBgSEFTX0lPTUVNYCBhbmQgYEhBU19ETUFgLiBUaGlzIGluZGljYXRlcyB0aGUgbmVlZCBmb3IgbWVtb3J5LW1hcHBlZCBJL08gY2FwYWJpbGl0aWVzIGFuZCBkaXJlY3QgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBwZXJmZWN0bHkgbG9naWNhbCBnaXZlbiB3aGF0IEkga25vdyBhYm91dCBFdGhlcm5ldCBNQUNzLiBJdCYjMzk7cyBhbGwgYWJvdXQgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIHdpcmVkIHRvZ2V0aGVyLiBXaXRob3V0IHRoZXNlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcywgdGhpcyBzcGVjaWZpYyBFdGhlcm5ldCBjb250cm9sbGVyIGlzbiYjMzk7dCBnb2luZyB0byBmdW5jdGlvbiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGlzIGlzIGEgc3RhbmRhcmQgc2V0dXAsIGJ1dCBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgd2hlbiB0aGUgc3lzdGVtIHNldHVwIGlzIG1vcmUgY29tcGxleC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNUTU1BQ19FVEhcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbiAgIDU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgIDY6XHRcdGRlcGVuZHMgb24gRVRIVE9PTF9ORVRMSU5LXG4gICA3Olx0XHRzZWxlY3QgTUlJXG4gICA4Olx0XHRzZWxlY3QgUENTX1hQQ1NcbiAgIDk6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMTA6XHRcdHNlbGVjdCBQSFlMSU5LXG4gIDExOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTI6XHRcdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXG4gIDEzOlx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMTQ6XHRcdGhlbHBcbiAgMTU6XHRcdCAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgRXRoZXJuZXQgSVBzIGJ1aWx0IGFyb3VuZCBhXG4gIDE2Olx0XHQgIFN5bm9wc3lzIElQIENvcmUuXG4gIDE3Olx0XG4gIDE4Olx0aWYgU1RNTUFDX0VUSFxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBTVE1NQUNfU0VMRlRFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NDI3CgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDI2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU3RtbWFjIEVUUyBPZmZsb2FkIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGFuZCBgTkVUX1NDSF9FVFNgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGhlcmUuIFdlIG5lZWQgdG8gemVybyBpbiBvbiB0aG9zZS4KCk5vdywgZm9yIGEgcXVpY2sgc3VtbWFyeSBvZiB0aGUga2V5IGZpbmRpbmdzOiBUaGlzIHBhdGNoIHNlZW1zIGVtaW5lbnRseSBmdXp6YWJsZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB3b3J0aCB0aGUgdGltZSB0byBpbnZlc3RpZ2F0ZSAoYFdvcnRoRnV6emluZzogdHJ1ZWApLgoKVGhlIGVzc2VudGlhbCBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIGFyZTogYHRjX3NldHVwX2V0c2AsIGB0Y19zZXR1cF9ldHNfc2NoZWRgLCBgc3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnYCwgYHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0YCwgYHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvYCwgYHRjX3NldHVwX2R3bWFjNTEwX21xcHJpb2AsIGFuZCBgc3RtbWFjX3NldHVwX3RjYC4gVGhlc2UgYXJlIG15IGluaXRpYWwgYXJlYXMgb2YgaW50ZXJlc3QgYmFzZWQgb24gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuCgpUaGUgY29uZmlncyB0aGF0IGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgYXJlOiBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfUENJYCwgYW5kIGBORVRfU0NIX0VUU2AuCgpNeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuIFRoaXMgbWVhbnMgdGhlIGRyaXZlciBpcyBiZWluZyBtb2RpZmllZCB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZCwgc28gdGhlIGxpc3RlZCBmdW5jdGlvbnMgc2hvdWxkIGJlIGludGVyYWN0aW5nIHdpdGggdGhhdCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBXaGF0IG1ha2VzIHRoaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGFuZCBsaWtlbHkgZnV6emFibGUsIGlzIHRoYXQgdGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHRlc3RlZCBpbiBRRU1VIHVzaW5nIGEgZHVtbXkgUENJIGRldmljZSDigJMgc3l6a2FsbGVyJiMzOTtzIHZoY2ksIHdoaWNoIGlzIGhlbHBmdWwuIEFuZCB0aGUgRVRTIHFkaXNjIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIG5ldGxpbmssIHdoaWNoIG1lYW5zIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgY2FuIGJlIGZ1enplZC4gSXQgbG9va3MgbGlrZSBhIGdvb2QgdGFyZ2V0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1RNTUFDX0VUSCYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNfc2V0dXBfZXRzJiMzNDssCiAgICAmIzM0O3RjX3NldHVwX2V0c19zY2hlZCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcmIzM0OywKICAgICYjMzQ7c3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQmIzM0OywKICAgICYjMzQ7c3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8mIzM0OywKICAgICYjMzQ7dGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvJiMzNDssCiAgICAmIzM0O3N0bW1hY19zZXR1cF90YyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCB0byB0aGUgc3RtbWFjIGRyaXZlci4gSXQgbW9kaWZpZXMgdGhlIGRyaXZlciB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZC4gVGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBRRU1VIHZpYSBhIGR1bW15IFBDSSBkZXZpY2UgKHVzaW5nIHN5emthbGxlciYjMzk7cyB2aGNpKSwgYW5kIHRoZSBFVFMgcWRpc2MgY2FuIGJlIGNvbmZpZ3VyZWQgdmlhIG5ldGxpbmssIG1ha2luZyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1RNTUFDX0VUSCYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNfc2V0dXBfZXRzJiMzNDssCiAgICAmIzM0O3RjX3NldHVwX2V0c19zY2hlZCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcmIzM0OywKICAgICYjMzQ7c3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQmIzM0OywKICAgICYjMzQ7c3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8mIzM0OywKICAgICYjMzQ7dGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvJiMzNDssCiAgICAmIzM0O3N0bW1hY19zZXR1cF90YyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCB0byB0aGUgc3RtbWFjIGRyaXZlci4gSXQgbW9kaWZpZXMgdGhlIGRyaXZlciB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZC4gVGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBRRU1VIHZpYSBhIGR1bW15IFBDSSBkZXZpY2UgKHVzaW5nIHN5emthbGxlciYjMzk7cyB2aGNpKSwgYW5kIHRoZSBFVFMgcWRpc2MgY2FuIGJlIGNvbmZpZ3VyZWQgdmlhIG5ldGxpbmssIG1ha2luZyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU3OjQwLjAzMzI1NjQ2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMTc3NDgyODQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJORVRfU0NIX0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX3NldHVwX2V0c1wiLFxuICAgIFwidGNfc2V0dXBfZXRzX3NjaGVkXCIsXG4gICAgXCJzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdcIixcbiAgICBcInN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0XCIsXG4gICAgXCJzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpb1wiLFxuICAgIFwidGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvXCIsXG4gICAgXCJzdG1tYWNfc2V0dXBfdGNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCB0byB0aGUgc3RtbWFjIGRyaXZlci4gSXQgbW9kaWZpZXMgdGhlIGRyaXZlciB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZC4gVGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBRRU1VIHZpYSBhIGR1bW15IFBDSSBkZXZpY2UgKHVzaW5nIHN5emthbGxlcidzIHZoY2kpLCBhbmQgdGhlIEVUUyBxZGlzYyBjYW4gYmUgY29uZmlndXJlZCB2aWEgbmV0bGluaywgbWFraW5nIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIGZ1enphYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1Nzo0MC4wMzMyNjM3MjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDkxMDU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE1ZTBmOTViOWE4ZDg3ZDUwMzVmZjM3NDFjYWVjMzVlODkxNTg1Y2JcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAwOTo1NzozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcXG5pbmRleCAwNGRhZmVjMDIxYjRmLi5iNzA4ODNhNTNiMDlhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbkBAIC01ODAsNiArNTgwLDggQEAgc3RydWN0IHN0bW1hY190Y19vcHMge1xcbiBcXHRcXHRcXHQgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnFvcHQpO1xcbiBcXHRpbnQgKCpzZXR1cF9ldGYpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFx0XFx0XFx0IHN0cnVjdCB0Y19ldGZfcW9wdF9vZmZsb2FkICpxb3B0KTtcXG4rXFx0aW50ICgqc2V0dXBfZXRzKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdCk7XFxuIFxcdGludCAoKnF1ZXJ5X2NhcHMpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKTtcXG4gXFx0aW50ICgqc2V0dXBfbXFwcmlvKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuQEAgLTU5OCw2ICs2MDAsOCBAQCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyB7XFxuIFxcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBzZXR1cF90YXByaW8sIF9fYXJncylcXG4gI2RlZmluZSBzdG1tYWNfdGNfc2V0dXBfZXRmKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxcXFxuIFxcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBzZXR1cF9ldGYsIF9fYXJncylcXG4rI2RlZmluZSBzdG1tYWNfdGNfc2V0dXBfZXRzKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxcXFxuK1xcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBzZXR1cF9ldHMsIF9fYXJncylcXG4gI2RlZmluZSBzdG1tYWNfdGNfcXVlcnlfY2FwcyhfX3ByaXYsIF9fYXJncy4uLikgXFxcXFxcbiBcXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0YywgcXVlcnlfY2FwcywgX19hcmdzKVxcbiAjZGVmaW5lIHN0bW1hY190Y19zZXR1cF9tcXByaW8oX19wcml2LCBfX2FyZ3MuLi4pIFxcXFxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxcbmluZGV4IDhiYThmMDNlMWNlMDMuLjFiYjI2MWZkY2IwZTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxcbkBAIC0zMDEsNiArMzAxLDEyIEBAIHN0cnVjdCBzdG1tYWNfcHJpdiB7XFxuIFxcdC8qIFByb3RlY3QgZXN0IHBhcmFtZXRlcnMgKi9cXG4gXFx0c3RydWN0IG11dGV4IGVzdF9sb2NrO1xcbiBcXHRzdHJ1Y3Qgc3RtbWFjX2VzdCAqZXN0O1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHRib29sIGVuYWJsZTtcXG4rXFx0XFx0dTggYWxnbztcXG4rXFx0XFx0dTMyIHF1YW50YVtNVExfTUFYX1RYX1FVRVVFU107XFxuK1xcdFxcdHUzMiBwcmlvW01UTF9NQVhfVFhfUVVFVUVTXTtcXG4rXFx0fSBxZGlzYztcXG4gXFx0c3RydWN0IGRtYV9mZWF0dXJlcyBkbWFfY2FwO1xcbiBcXHRzdHJ1Y3Qgc3RtbWFjX2NvdW50ZXJzIG1tYztcXG4gXFx0aW50IGh3X2NhcF9zdXBwb3J0O1xcbkBAIC0zOTQsNiArNDAwLDggQEAgZW51bSBzdG1tYWNfc3RhdGUge1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0bW1hY19zaW1wbGVfcG1fb3BzO1xcbiBcXG4rdm9pZCBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbit2b2lkIHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XFxuIGludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4gaW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4gaW50IHN0bW1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICptaWkpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbmluZGV4IGM3MjlhYjEyN2FmZDUuLmMyNzg2ZWNjYTUzMDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcXG5AQCAtMzQxOSwxNCArMzQxOSwxOCBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfc2V0X3JpbmdzX2xlbmd0aChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXFxuICAqICBEZXNjcmlwdGlvbjogSXQgaXMgdXNlZCBmb3Igc2V0dGluZyBUWCBxdWV1ZXMgd2VpZ2h0XFxuICAqL1xcbi1zdGF0aWMgdm9pZCBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3ZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiB7XFxuIFxcdHU4IHR4X3F1ZXVlc19jb3VudCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2U7XFxuIFxcdHUzMiB3ZWlnaHQ7XFxuIFxcdHU4IHF1ZXVlO1xcbiBcXG4gXFx0Zm9yIChxdWV1ZSA9IDA7IHF1ZXVlIFxcdTAwM2MgdHhfcXVldWVzX2NvdW50OyBxdWV1ZSsrKSB7XFxuLVxcdFxcdHdlaWdodCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLndlaWdodDtcXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZXFkaXNjLmVuYWJsZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlcWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX0RXUlIpXFxuK1xcdFxcdFxcdHdlaWdodCA9IHByaXYtXFx1MDAzZXFkaXNjLnF1YW50YVtxdWV1ZV07XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0d2VpZ2h0ID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfcXVldWVzX2NmZ1txdWV1ZV0ud2VpZ2h0O1xcbiBcXHRcXHRzdG1tYWNfc2V0X210bF90eF9xdWV1ZV93ZWlnaHQocHJpdiwgcHJpdi1cXHUwMDNlaHcsIHdlaWdodCwgcXVldWUpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMzQ5OSwxNyArMzUwMywyMCBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ19yeF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXFxuICAqICBEZXNjcmlwdGlvbjogSXQgaXMgdXNlZCBmb3IgY29uZmlndXJpbmcgdGhlIFRYIFF1ZXVlIFByaW9yaXR5XFxuICAqL1xcbi1zdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3ZvaWQgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiB7XFxuIFxcdHU4IHR4X3F1ZXVlc19jb3VudCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2U7XFxuIFxcdHU4IHF1ZXVlO1xcbi1cXHR1MzIgcHJpbztcXG4gXFxuIFxcdGZvciAocXVldWUgPSAwOyBxdWV1ZSBcXHUwMDNjIHR4X3F1ZXVlc19jb3VudDsgcXVldWUrKykge1xcbi1cXHRcXHRpZiAoIXByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLnVzZV9wcmlvKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0dTMyIHByaW8gPSAwO1xcbitcXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZXFkaXNjLmVuYWJsZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlcWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX1NQKVxcbitcXHRcXHRcXHRwcmlvID0gcHJpdi1cXHUwMDNlcWRpc2MucHJpb1txdWV1ZV07XFxuK1xcdFxcdGVsc2UgaWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLnVzZV9wcmlvKVxcbitcXHRcXHRcXHRwcmlvID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfcXVldWVzX2NmZ1txdWV1ZV0ucHJpbztcXG4gXFxuLVxcdFxcdHByaW8gPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS5wcmlvO1xcbiBcXHRcXHRzdG1tYWNfdHhfcXVldWVfcHJpbyhwcml2LCBwcml2LVxcdTAwM2VodywgcHJpbywgcXVldWUpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMzU3MCw5ICszNTc3LDE1IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19tdGxfY29uZmlndXJhdGlvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X3NjaGVkX2FsZ29yaXRobSk7XFxuIFxcbiBcXHQvKiBDb25maWd1cmUgTVRMIFRYIGFsZ29yaXRobXMgKi9cXG4tXFx0aWYgKHR4X3F1ZXVlc19jb3VudCBcXHUwMDNlIDEpXFxuLVxcdFxcdHN0bW1hY19wcm9nX210bF90eF9hbGdvcml0aG1zKHByaXYsIHByaXYtXFx1MDAzZWh3LFxcbi1cXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9zY2hlZF9hbGdvcml0aG0pO1xcbitcXHRpZiAodHhfcXVldWVzX2NvdW50IFxcdTAwM2UgMSkge1xcbitcXHRcXHR1OCB0eF9zY2hlZF9hbGdvO1xcbitcXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZXFkaXNjLmVuYWJsZSlcXG4rXFx0XFx0XFx0dHhfc2NoZWRfYWxnbyA9IHByaXYtXFx1MDAzZXFkaXNjLmFsZ287XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0dHhfc2NoZWRfYWxnbyA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3NjaGVkX2FsZ29yaXRobTtcXG4rXFx0XFx0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cXHUwMDNlaHcsIHR4X3NjaGVkX2FsZ28pO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBDb25maWd1cmUgQ0JTIGluIEFWQiBUWCBxdWV1ZXMgKi9cXG4gXFx0aWYgKHR4X3F1ZXVlc19jb3VudCBcXHUwMDNlIDEpXFxuQEAgLTY0MjgsNiArNjQ0MSw4IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4gXFx0XFx0cmV0dXJuIHN0bW1hY190Y19zZXR1cF90YXByaW8ocHJpdiwgcHJpdiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19FVEY6XFxuIFxcdFxcdHJldHVybiBzdG1tYWNfdGNfc2V0dXBfZXRmKHByaXYsIHByaXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfRVRTOlxcbitcXHRcXHRyZXR1cm4gc3RtbWFjX3RjX3NldHVwX2V0cyhwcml2LCBwcml2LCB0eXBlX2RhdGEpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY1xcbmluZGV4IDE0Y2FiZTc2ZTUzZWMuLjNiYTcxYmUyNGM2NDggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY1xcbkBAIC0xMjEwLDYgKzEyMTAsODMgQEAgc3RhdGljIGludCB0Y19zZXR1cF9ldGYoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogTWF4IHF1YW50dW0gdmFsdWUgc3VwcG9ydGVkIGJ5IHRoZSBNVEwgRFdSUiBzY2hlZHVsZXIgKi9cXG4rI2RlZmluZSBNVExfVFhRX1dFSUdIVF9RVUFOVFVNX01BWFxcdDB4MTMxMmQwXFxuK1xcbitzdGF0aWMgdm9pZCBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbit7XFxuK1xcdC8qIHJlc2V0IHRvIHRoZSBkdCBjb25maWd1cmVkIGFsZ29yaXRobS4gKi9cXG4rXFx0cHJpdi1cXHUwMDNlcWRpc2MuZW5hYmxlID0gZmFsc2U7XFxuK1xcdHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0KHByaXYpO1xcbitcXHRzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhwcml2KTtcXG4rXFx0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cXHUwMDNlaHcsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3NjaGVkX2FsZ29yaXRobSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGNfc2V0dXBfZXRzX3NjaGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpXFxuK3tcXG4rXFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAgPSBcXHUwMDI2cW9wdC1cXHUwMDNlcmVwbGFjZV9wYXJhbXM7XFxuK1xcdHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGRhdGEgPSBwcml2LVxcdTAwM2VwbGF0O1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChxb3B0LVxcdTAwM2VwYXJlbnQgIT0gVENfSF9ST09UKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0aWYgKHAtXFx1MDAzZWJhbmRzIFxcdTAwM2UgcGRhdGEtXFx1MDAzZXR4X3F1ZXVlc190b191c2UpXFxuK1xcdFxcdGdvdG8gZXJyb3I7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGRhdGEtXFx1MDAzZXR4X3F1ZXVlc190b191c2U7IGkrKykge1xcbitcXHRcXHR1MzIgcXVhbnR1bSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGRhdGEtXFx1MDAzZXR4X3F1ZXVlc19jZmdbaV0ubW9kZV90b191c2UgPT0gTVRMX1FVRVVFX0FWQilcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdFxcdGlmIChpIFxcdTAwM2MgcC1cXHUwMDNlYmFuZHMpIHtcXG4rXFx0XFx0XFx0aWYgKCFwLVxcdTAwM2VxdWFudGFbaV0pXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuK1xcbitcXHRcXHRcXHRpZiAocC1cXHUwMDNlcXVhbnRhW2ldIFxcdTAwM2UgTVRMX1RYUV9XRUlHSFRfUVVBTlRVTV9NQVgpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuK1xcbitcXHRcXHRcXHRxdWFudHVtID0gcC1cXHUwMDNlcXVhbnRhW2ldO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwcml2LVxcdTAwM2VxZGlzYy5xdWFudGFbaV0gPSBxdWFudHVtO1xcbitcXHRcXHRzdG1tYWNfc2V0X210bF90eF9xdWV1ZV93ZWlnaHQocHJpdiwgcHJpdi1cXHUwMDNlaHcsIHF1YW50dW0sIGkpO1xcbitcXHR9XFxuK1xcbitcXHRzdG1tYWNfcHJvZ19tdGxfdHhfYWxnb3JpdGhtcyhwcml2LCBwcml2LVxcdTAwM2VodywgTVRMX1RYX0FMR09SSVRITV9EV1JSKTtcXG4rXFx0cHJpdi1cXHUwMDNlcWRpc2MuYWxnbyA9IE1UTF9UWF9BTEdPUklUSE1fRFdSUjtcXG4rXFx0cHJpdi1cXHUwMDNlcWRpc2MuZW5hYmxlID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitlcnJvcjpcXG4rXFx0c3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHByaXYpO1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGNfc2V0dXBfZXRzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpXFxuK3tcXG4rXFx0c3dpdGNoIChxb3B0LVxcdTAwM2Vjb21tYW5kKSB7XFxuK1xcdGNhc2UgVENfRVRTX1JFUExBQ0U6XFxuK1xcdFxcdHJldHVybiB0Y19zZXR1cF9ldHNfc2NoZWQocHJpdiwgcW9wdCk7XFxuK1xcdGNhc2UgVENfRVRTX0RFU1RST1k6XFxuK1xcdFxcdHN0bW1hY19xZGlzY19yZXN0b3JlX2R0X2NvbmZpZyhwcml2KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgVENfRVRTX1NUQVRTOlxcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlcWRpc2MuZW5hYmxlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBwcml2LVxcdTAwM2VxZGlzYy5hbGdvID09IE1UTF9UWF9BTEdPUklUSE1fRFdSUilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHRjX3F1ZXJ5X2NhcHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHQgc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSlcXG4ge1xcbkBAIC0xMjQ1LDE3ICsxMzIyLDE5IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19yZXNldF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcXG4gXFx0bmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlKTtcXG4gXFx0c3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBuZGV2LCBleHRhY2ssIDApO1xcbitcXHRzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcocHJpdik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuIHtcXG4gXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVxcdTAwM2VleHRhY2s7XFxuK1xcdHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGRhdGEgPSBwcml2LVxcdTAwM2VwbGF0O1xcbiBcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbiBcXHR1MzIgb2Zmc2V0LCBjb3VudCwgbnVtX3N0YWNrX3R4X3F1ZXVlcyA9IDA7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi1cXHUwMDNlZGV2O1xcbiBcXHR1MzIgbnVtX3RjID0gcW9wdC1cXHUwMDNlbnVtX3RjO1xcbi1cXHRpbnQgZXJyO1xcbitcXHRpbnQgaSwgdGMsIGVycjtcXG4gXFxuIFxcdGlmICghbnVtX3RjKSB7XFxuIFxcdFxcdHN0bW1hY19yZXNldF90Y19tcXByaW8obmRldiwgZXh0YWNrKTtcXG5AQCAtMTI4NSw2ICsxMzY0LDIzIEBAIHN0YXRpYyBpbnQgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfcmVzZXRfdGM7XFxuIFxcbitcXHQvKiBRdWV1ZXMgbm90IG1hcHBlZCB0byBhbnkgVEMgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHByaW9yaXR5ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZGF0YS1cXHUwMDNldHhfcXVldWVzX3RvX3VzZTsgaSsrKSB7XFxuK1xcdFxcdHByaXYtXFx1MDAzZXFkaXNjLnByaW9baV0gPSAwO1xcbitcXHRcXHRzdG1tYWNfdHhfcXVldWVfcHJpbyhwcml2LCBwcml2LVxcdTAwM2VodywgMCwgaSk7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIG51bV90YzsgdGMrKykge1xcbitcXHRcXHRmb3IgKGkgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIGkgXFx1MDAzYyBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdICsgcW9wdC1cXHUwMDNlY291bnRbdGNdOyBpKyspIHtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlcWRpc2MucHJpb1tpXSA9IHRjO1xcbitcXHRcXHRcXHRzdG1tYWNfdHhfcXVldWVfcHJpbyhwcml2LCBwcml2LVxcdTAwM2VodywgdGMsIGkpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cXHUwMDNlaHcsIE1UTF9UWF9BTEdPUklUSE1fU1ApO1xcbitcXHRwcml2LVxcdTAwM2VxZGlzYy5hbGdvID0gTVRMX1RYX0FMR09SSVRITV9TUDtcXG4rXFx0cHJpdi1cXHUwMDNlcWRpc2MuZW5hYmxlID0gdHJ1ZTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyX3Jlc2V0X3RjOlxcbkBAIC0xMzA4LDYgKzE0MDQsNyBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzID0ge1xcbiBcXHQuc2V0dXBfY2xzID0gdGNfc2V0dXBfY2xzLFxcbiBcXHQuc2V0dXBfdGFwcmlvID0gdGNfc2V0dXBfdGFwcmlvX3dpdGhvdXRfZnBlLFxcbiBcXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxcbitcXHQuc2V0dXBfZXRzID0gdGNfc2V0dXBfZXRzLFxcbiBcXHQucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsXFxuIFxcdC5zZXR1cF9tcXByaW8gPSB0Y19zZXR1cF9tcXByaW9fdW5pbXBsZW1lbnRlZCxcXG4gfTtcXG5AQCAtMTMxOSw2ICsxNDE2LDcgQEAgY29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzID0ge1xcbiBcXHQuc2V0dXBfY2xzID0gdGNfc2V0dXBfY2xzLFxcbiBcXHQuc2V0dXBfdGFwcmlvID0gdGNfc2V0dXBfdGFwcmlvLFxcbiBcXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxcbitcXHQuc2V0dXBfZXRzID0gdGNfc2V0dXBfZXRzLFxcbiBcXHQucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsXFxuIFxcdC5zZXR1cF9tcXByaW8gPSB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8sXFxuIH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU3OjQwLjUzNDk0NjgwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMyMTI3MzEyODk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJORVRfU0NIX0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX3NldHVwX2V0c1wiLFxuICAgIFwidGNfc2V0dXBfZXRzX3NjaGVkXCIsXG4gICAgXCJzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdcIixcbiAgICBcInN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0XCIsXG4gICAgXCJzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpb1wiLFxuICAgIFwidGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvXCIsXG4gICAgXCJzdG1tYWNfc2V0dXBfdGNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCB0byB0aGUgc3RtbWFjIGRyaXZlci4gSXQgbW9kaWZpZXMgdGhlIGRyaXZlciB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZC4gVGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBRRU1VIHZpYSBhIGR1bW15IFBDSSBkZXZpY2UgKHVzaW5nIHN5emthbGxlcidzIHZoY2kpLCBhbmQgdGhlIEVUUyBxZGlzYyBjYW4gYmUgY29uZmlndXJlZCB2aWEgbmV0bGluaywgbWFraW5nIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIGZ1enphYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNWUwZjk1YjlhOGQ4N2Q1MDM1ZmYzNzQxY2FlYzM1ZTg5MTU4NWNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwOTo1NzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuaW5kZXggMDRkYWZlYzAyMWI0Zi4uYjcwODgzYTUzYjA5YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5AQCAtNTgwLDYgKzU4MCw4IEBAIHN0cnVjdCBzdG1tYWNfdGNfb3BzIHtcbiBcdFx0XHQgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnFvcHQpO1xuIFx0aW50ICgqc2V0dXBfZXRmKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0IHN0cnVjdCB0Y19ldGZfcW9wdF9vZmZsb2FkICpxb3B0KTtcbitcdGludCAoKnNldHVwX2V0cykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuK1x0XHRcdCBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdCk7XG4gXHRpbnQgKCpxdWVyeV9jYXBzKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0ICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKTtcbiBcdGludCAoKnNldHVwX21xcHJpbykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuQEAgLTU5OCw2ICs2MDAsOCBAQCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyB7XG4gXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0Yywgc2V0dXBfdGFwcmlvLCBfX2FyZ3MpXG4gI2RlZmluZSBzdG1tYWNfdGNfc2V0dXBfZXRmKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuIFx0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgdGMsIHNldHVwX2V0ZiwgX19hcmdzKVxuKyNkZWZpbmUgc3RtbWFjX3RjX3NldHVwX2V0cyhfX3ByaXYsIF9fYXJncy4uLikgXFxcbitcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBzZXR1cF9ldHMsIF9fYXJncylcbiAjZGVmaW5lIHN0bW1hY190Y19xdWVyeV9jYXBzKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuIFx0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgdGMsIHF1ZXJ5X2NhcHMsIF9fYXJncylcbiAjZGVmaW5lIHN0bW1hY190Y19zZXR1cF9tcXByaW8oX19wcml2LCBfX2FyZ3MuLi4pIFxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxuaW5kZXggOGJhOGYwM2UxY2UwMy4uMWJiMjYxZmRjYjBlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxuQEAgLTMwMSw2ICszMDEsMTIgQEAgc3RydWN0IHN0bW1hY19wcml2IHtcbiBcdC8qIFByb3RlY3QgZXN0IHBhcmFtZXRlcnMgKi9cbiBcdHN0cnVjdCBtdXRleCBlc3RfbG9jaztcbiBcdHN0cnVjdCBzdG1tYWNfZXN0ICplc3Q7XG4rXHRzdHJ1Y3Qge1xuK1x0XHRib29sIGVuYWJsZTtcbitcdFx0dTggYWxnbztcbitcdFx0dTMyIHF1YW50YVtNVExfTUFYX1RYX1FVRVVFU107XG4rXHRcdHUzMiBwcmlvW01UTF9NQVhfVFhfUVVFVUVTXTtcbitcdH0gcWRpc2M7XG4gXHRzdHJ1Y3QgZG1hX2ZlYXR1cmVzIGRtYV9jYXA7XG4gXHRzdHJ1Y3Qgc3RtbWFjX2NvdW50ZXJzIG1tYztcbiBcdGludCBod19jYXBfc3VwcG9ydDtcbkBAIC0zOTQsNiArNDAwLDggQEAgZW51bSBzdG1tYWNfc3RhdGUge1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzdG1tYWNfc2ltcGxlX3BtX29wcztcbiBcbit2b2lkIHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4rdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuIGludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiBpbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIGludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqbWlpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuaW5kZXggYzcyOWFiMTI3YWZkNS4uYzI3ODZlY2NhNTMwMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbkBAIC0zNDE5LDE0ICszNDE5LDE4IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19zZXRfcmluZ3NfbGVuZ3RoKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiAgKiAgQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxuICAqICBEZXNjcmlwdGlvbjogSXQgaXMgdXNlZCBmb3Igc2V0dGluZyBUWCBxdWV1ZXMgd2VpZ2h0XG4gICovXG4tc3RhdGljIHZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuK3ZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbiBcdHU4IHR4X3F1ZXVlc19jb3VudCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlO1xuIFx0dTMyIHdlaWdodDtcbiBcdHU4IHF1ZXVlO1xuIFxuIFx0Zm9yIChxdWV1ZSA9IDA7IHF1ZXVlIFx1MDAzYyB0eF9xdWV1ZXNfY291bnQ7IHF1ZXVlKyspIHtcbi1cdFx0d2VpZ2h0ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLndlaWdodDtcbitcdFx0aWYgKHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcHJpdi1cdTAwM2VxZGlzYy5hbGdvID09IE1UTF9UWF9BTEdPUklUSE1fRFdSUilcbitcdFx0XHR3ZWlnaHQgPSBwcml2LVx1MDAzZXFkaXNjLnF1YW50YVtxdWV1ZV07XG4rXHRcdGVsc2VcbitcdFx0XHR3ZWlnaHQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1txdWV1ZV0ud2VpZ2h0O1xuIFx0XHRzdG1tYWNfc2V0X210bF90eF9xdWV1ZV93ZWlnaHQocHJpdiwgcHJpdi1cdTAwM2Vodywgd2VpZ2h0LCBxdWV1ZSk7XG4gXHR9XG4gfVxuQEAgLTM0OTksMTcgKzM1MDMsMjAgQEAgc3RhdGljIHZvaWQgc3RtbWFjX21hY19jb25maWdfcnhfcXVldWVzX3ByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4gICogIERlc2NyaXB0aW9uOiBJdCBpcyB1c2VkIGZvciBjb25maWd1cmluZyB0aGUgVFggUXVldWUgUHJpb3JpdHlcbiAgKi9cbi1zdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4rdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuIFx0dTggdHhfcXVldWVzX2NvdW50ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2U7XG4gXHR1OCBxdWV1ZTtcbi1cdHUzMiBwcmlvO1xuIFxuIFx0Zm9yIChxdWV1ZSA9IDA7IHF1ZXVlIFx1MDAzYyB0eF9xdWV1ZXNfY291bnQ7IHF1ZXVlKyspIHtcbi1cdFx0aWYgKCFwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1txdWV1ZV0udXNlX3ByaW8pXG4tXHRcdFx0Y29udGludWU7XG4rXHRcdHUzMiBwcmlvID0gMDtcbitcbitcdFx0aWYgKHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcHJpdi1cdTAwM2VxZGlzYy5hbGdvID09IE1UTF9UWF9BTEdPUklUSE1fU1ApXG4rXHRcdFx0cHJpbyA9IHByaXYtXHUwMDNlcWRpc2MucHJpb1txdWV1ZV07XG4rXHRcdGVsc2UgaWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS51c2VfcHJpbylcbitcdFx0XHRwcmlvID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLnByaW87XG4gXG4tXHRcdHByaW8gPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1txdWV1ZV0ucHJpbztcbiBcdFx0c3RtbWFjX3R4X3F1ZXVlX3ByaW8ocHJpdiwgcHJpdi1cdTAwM2VodywgcHJpbywgcXVldWUpO1xuIFx0fVxuIH1cbkBAIC0zNTcwLDkgKzM1NzcsMTUgQEAgc3RhdGljIHZvaWQgc3RtbWFjX210bF9jb25maWd1cmF0aW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdFx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9zY2hlZF9hbGdvcml0aG0pO1xuIFxuIFx0LyogQ29uZmlndXJlIE1UTCBUWCBhbGdvcml0aG1zICovXG4tXHRpZiAodHhfcXVldWVzX2NvdW50IFx1MDAzZSAxKVxuLVx0XHRzdG1tYWNfcHJvZ19tdGxfdHhfYWxnb3JpdGhtcyhwcml2LCBwcml2LVx1MDAzZWh3LFxuLVx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3NjaGVkX2FsZ29yaXRobSk7XG4rXHRpZiAodHhfcXVldWVzX2NvdW50IFx1MDAzZSAxKSB7XG4rXHRcdHU4IHR4X3NjaGVkX2FsZ287XG4rXG4rXHRcdGlmIChwcml2LVx1MDAzZXFkaXNjLmVuYWJsZSlcbitcdFx0XHR0eF9zY2hlZF9hbGdvID0gcHJpdi1cdTAwM2VxZGlzYy5hbGdvO1xuK1x0XHRlbHNlXG4rXHRcdFx0dHhfc2NoZWRfYWxnbyA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9zY2hlZF9hbGdvcml0aG07XG4rXHRcdHN0bW1hY19wcm9nX210bF90eF9hbGdvcml0aG1zKHByaXYsIHByaXYtXHUwMDNlaHcsIHR4X3NjaGVkX2FsZ28pO1xuK1x0fVxuIFxuIFx0LyogQ29uZmlndXJlIENCUyBpbiBBVkIgVFggcXVldWVzICovXG4gXHRpZiAodHhfcXVldWVzX2NvdW50IFx1MDAzZSAxKVxuQEAgLTY0MjgsNiArNjQ0MSw4IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0cmV0dXJuIHN0bW1hY190Y19zZXR1cF90YXByaW8ocHJpdiwgcHJpdiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfRVRGOlxuIFx0XHRyZXR1cm4gc3RtbWFjX3RjX3NldHVwX2V0Zihwcml2LCBwcml2LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19FVFM6XG4rXHRcdHJldHVybiBzdG1tYWNfdGNfc2V0dXBfZXRzKHByaXYsIHByaXYsIHR5cGVfZGF0YSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY1xuaW5kZXggMTRjYWJlNzZlNTNlYy4uM2JhNzFiZTI0YzY0OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY1xuQEAgLTEyMTAsNiArMTIxMCw4MyBAQCBzdGF0aWMgaW50IHRjX3NldHVwX2V0ZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogTWF4IHF1YW50dW0gdmFsdWUgc3VwcG9ydGVkIGJ5IHRoZSBNVEwgRFdSUiBzY2hlZHVsZXIgKi9cbisjZGVmaW5lIE1UTF9UWFFfV0VJR0hUX1FVQU5UVU1fTUFYXHQweDEzMTJkMFxuK1xuK3N0YXRpYyB2b2lkIHN0bW1hY19xZGlzY19yZXN0b3JlX2R0X2NvbmZpZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4re1xuK1x0LyogcmVzZXQgdG8gdGhlIGR0IGNvbmZpZ3VyZWQgYWxnb3JpdGhtLiAqL1xuK1x0cHJpdi1cdTAwM2VxZGlzYy5lbmFibGUgPSBmYWxzZTtcbitcdHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0KHByaXYpO1xuK1x0c3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8ocHJpdik7XG4rXHRzdG1tYWNfcHJvZ19tdGxfdHhfYWxnb3JpdGhtcyhwcml2LCBwcml2LVx1MDAzZWh3LFxuK1x0XHRcdFx0ICAgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3NjaGVkX2FsZ29yaXRobSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGNfc2V0dXBfZXRzX3NjaGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbit7XG4rXHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCA9IFx1MDAyNnFvcHQtXHUwMDNlcmVwbGFjZV9wYXJhbXM7XG4rXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBkYXRhID0gcHJpdi1cdTAwM2VwbGF0O1xuK1x0aW50IGk7XG4rXG4rXHRpZiAocW9wdC1cdTAwM2VwYXJlbnQgIT0gVENfSF9ST09UKVxuK1x0XHRnb3RvIGVycm9yO1xuK1xuK1x0aWYgKHAtXHUwMDNlYmFuZHMgXHUwMDNlIHBkYXRhLVx1MDAzZXR4X3F1ZXVlc190b191c2UpXG4rXHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZGF0YS1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlOyBpKyspIHtcbitcdFx0dTMyIHF1YW50dW0gPSAwO1xuK1xuK1x0XHRpZiAocGRhdGEtXHUwMDNldHhfcXVldWVzX2NmZ1tpXS5tb2RlX3RvX3VzZSA9PSBNVExfUVVFVUVfQVZCKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdGlmIChpIFx1MDAzYyBwLVx1MDAzZWJhbmRzKSB7XG4rXHRcdFx0aWYgKCFwLVx1MDAzZXF1YW50YVtpXSlcbitcdFx0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdFx0aWYgKHAtXHUwMDNlcXVhbnRhW2ldIFx1MDAzZSBNVExfVFhRX1dFSUdIVF9RVUFOVFVNX01BWClcbitcdFx0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdFx0cXVhbnR1bSA9IHAtXHUwMDNlcXVhbnRhW2ldO1xuK1x0XHR9XG4rXG4rXHRcdHByaXYtXHUwMDNlcWRpc2MucXVhbnRhW2ldID0gcXVhbnR1bTtcbitcdFx0c3RtbWFjX3NldF9tdGxfdHhfcXVldWVfd2VpZ2h0KHByaXYsIHByaXYtXHUwMDNlaHcsIHF1YW50dW0sIGkpO1xuK1x0fVxuK1xuK1x0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cdTAwM2VodywgTVRMX1RYX0FMR09SSVRITV9EV1JSKTtcbitcdHByaXYtXHUwMDNlcWRpc2MuYWxnbyA9IE1UTF9UWF9BTEdPUklUSE1fRFdSUjtcbitcdHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK2Vycm9yOlxuK1x0c3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHByaXYpO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IHRjX3NldHVwX2V0cyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4rXHRcdFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpXG4re1xuK1x0c3dpdGNoIChxb3B0LVx1MDAzZWNvbW1hbmQpIHtcbitcdGNhc2UgVENfRVRTX1JFUExBQ0U6XG4rXHRcdHJldHVybiB0Y19zZXR1cF9ldHNfc2NoZWQocHJpdiwgcW9wdCk7XG4rXHRjYXNlIFRDX0VUU19ERVNUUk9ZOlxuK1x0XHRzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcocHJpdik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBUQ19FVFNfU1RBVFM6XG4rXHRcdGlmIChwcml2LVx1MDAzZXFkaXNjLmVuYWJsZSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHByaXYtXHUwMDNlcWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX0RXUlIpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdGNfcXVlcnlfY2FwcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0IHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UpXG4ge1xuQEAgLTEyNDUsMTcgKzEzMjIsMTkgQEAgc3RhdGljIHZvaWQgc3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcbiBcdG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobmRldiwgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2UpO1xuIFx0c3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBuZGV2LCBleHRhY2ssIDApO1xuK1x0c3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHByaXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHRjX3NldHVwX2R3bWFjNTEwX21xcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiB7XG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXHUwMDNlZXh0YWNrO1xuK1x0c3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwZGF0YSA9IHByaXYtXHUwMDNlcGxhdDtcbiBcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuIFx0dTMyIG9mZnNldCwgY291bnQsIG51bV9zdGFja190eF9xdWV1ZXMgPSAwO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwcml2LVx1MDAzZWRldjtcbiBcdHUzMiBudW1fdGMgPSBxb3B0LVx1MDAzZW51bV90Yztcbi1cdGludCBlcnI7XG4rXHRpbnQgaSwgdGMsIGVycjtcbiBcbiBcdGlmICghbnVtX3RjKSB7XG4gXHRcdHN0bW1hY19yZXNldF90Y19tcXByaW8obmRldiwgZXh0YWNrKTtcbkBAIC0xMjg1LDYgKzEzNjQsMjMgQEAgc3RhdGljIGludCB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfcmVzZXRfdGM7XG4gXG4rXHQvKiBRdWV1ZXMgbm90IG1hcHBlZCB0byBhbnkgVEMgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHByaW9yaXR5ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZGF0YS1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlOyBpKyspIHtcbitcdFx0cHJpdi1cdTAwM2VxZGlzYy5wcmlvW2ldID0gMDtcbitcdFx0c3RtbWFjX3R4X3F1ZXVlX3ByaW8ocHJpdiwgcHJpdi1cdTAwM2VodywgMCwgaSk7XG4rXHR9XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIG51bV90YzsgdGMrKykge1xuK1x0XHRmb3IgKGkgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdCAgICAgaSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcW9wdC1cdTAwM2Vjb3VudFt0Y107IGkrKykge1xuK1x0XHRcdHByaXYtXHUwMDNlcWRpc2MucHJpb1tpXSA9IHRjO1xuK1x0XHRcdHN0bW1hY190eF9xdWV1ZV9wcmlvKHByaXYsIHByaXYtXHUwMDNlaHcsIHRjLCBpKTtcbitcdFx0fVxuK1x0fVxuK1x0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cdTAwM2VodywgTVRMX1RYX0FMR09SSVRITV9TUCk7XG4rXHRwcml2LVx1MDAzZXFkaXNjLmFsZ28gPSBNVExfVFhfQUxHT1JJVEhNX1NQO1xuK1x0cHJpdi1cdTAwM2VxZGlzYy5lbmFibGUgPSB0cnVlO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3Jlc2V0X3RjOlxuQEAgLTEzMDgsNiArMTQwNCw3IEBAIGNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNF90Y19vcHMgPSB7XG4gXHQuc2V0dXBfY2xzID0gdGNfc2V0dXBfY2xzLFxuIFx0LnNldHVwX3RhcHJpbyA9IHRjX3NldHVwX3RhcHJpb193aXRob3V0X2ZwZSxcbiBcdC5zZXR1cF9ldGYgPSB0Y19zZXR1cF9ldGYsXG4rXHQuc2V0dXBfZXRzID0gdGNfc2V0dXBfZXRzLFxuIFx0LnF1ZXJ5X2NhcHMgPSB0Y19xdWVyeV9jYXBzLFxuIFx0LnNldHVwX21xcHJpbyA9IHRjX3NldHVwX21xcHJpb191bmltcGxlbWVudGVkLFxuIH07XG5AQCAtMTMxOSw2ICsxNDE2LDcgQEAgY29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzID0ge1xuIFx0LnNldHVwX2NscyA9IHRjX3NldHVwX2NscyxcbiBcdC5zZXR1cF90YXByaW8gPSB0Y19zZXR1cF90YXByaW8sXG4gXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxuK1x0LnNldHVwX2V0cyA9IHRjX3NldHVwX2V0cyxcbiBcdC5xdWVyeV9jYXBzID0gdGNfcXVlcnlfY2FwcyxcbiBcdC5zZXR1cF9tcXByaW8gPSB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8sXG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU3OjQwLjUzNDk0ODM1MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNzcwODE2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU1RNTUFDIEVUUyBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgYWRkaW5nIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCBjYXBhYmlsaXRpZXMgdG8gdGhlIFNUTU1BQyBkcml2ZXIuIFNlZW1zIGxpa2UgdGhleSd2ZSBob29rZWQgaW50byBgc3RtbWFjX3RjX29wc2AgdG8gaW5jbHVkZSBgc2V0dXBfZXRzYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoZXkndmUgYWxzbyBpbXBsZW1lbnRlZCBgdGNfc2V0dXBfZXRzYCBhbmQgYHRjX3NldHVwX2V0c19zY2hlZGAgd2l0aGluIGBzdG1tYWNfdGMuY2AuIEdvb2QsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRob3NlIGZ1bmN0aW9ucyB0byBiZS4gSXQncyBhbHNvIGNvbmZpZ3VyaW5nIHRoZSBTdHJpY3QgUHJpb3JpdHkgKFNQKSBhbGdvcml0aG0gd2hlbiBgbXFwcmlvYCBpcyBpbiB1c2UsIG1vZGlmeWluZyBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYCBhY2NvcmRpbmdseS4gU21hcnQuIEFuZCB0aGV5J3ZlIGFkZGVkIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgIOKAkyBuZWNlc3NhcnkgZm9yIHBlcnNpc3RlbnQgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMsIEkgcHJlc3VtZS4gQWxsIHByZXR0eSBzdGFuZGFyZCBzdHVmZiwgcmVhbGx5LlxuXG5Ob3csIGEgY3JpdGljYWwgbmV4dCBzdGVwLiBDYW4gd2UgZXZlbiB0ZXN0IHRoaXMgZWZmZWN0aXZlbHk/IFNUTU1BQywgdGhhdCdzIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIE1BQyBkcml2ZXIuIEl04oCZcyBwcmV2YWxlbnQgaW4gYSB0b24gb2YgU29Dcy4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSBnZXQgaXQgdG8gcmVsaWFibHkgYmVoYXZlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJcyBpdCBRRU1VLWZyaWVuZGx5PyBJIG1lYW4sIGl0J3MgYSAqcGh5c2ljYWwqIEV0aGVybmV0IGRyaXZlciwgYnV0IHRoZXJlIG1pZ2h0IGJlIFBDSSB2YXJpYW50cyBvciBwbGF0Zm9ybS1zcGVjaWZpYyB2YXJpYXRpb25zIHRoYXQgY291bGQgY29tcGxpY2F0ZSB0aGluZ3MuIExldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhhdCBgS2NvbmZpZ2AgZmlsZSB1bmRlciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAxNywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU3OjQ2LjcxMjAzMzYwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY1NTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RNTUFDX0VUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTc6NDYuNzU5Njk0OTEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5NDk2MzM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlIG9mIFBvc3NpYmlsaXRpZXMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGdlYXJlZCB0b3dhcmRzIGVmZmljaWVudCBwcm9ibGVtLXNvbHZpbmcuIFdoZW4gY29uZnJvbnRlZCB3aXRoIGEgc2l0dWF0aW9uLCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbWFwIG91dCB0aGUgcG90ZW50aWFsIGF2ZW51ZXMgdG8gZXhwbG9yZS4gSW4gdGhpcyBjYXNlLCBJJ20gdGhpbmtpbmcgYWJvdXQgYSBcIlBDSSB2YXJpYW50LlwiIFRoYXQgc3VnZ2VzdHMgSSdtIGRlYWxpbmcgd2l0aCBhIGNvbmNlcHQgb3Igc3lzdGVtIHRoYXQgaGFzIGEgY29yZSBjb21wb25lbnQga25vd24gYXMgUENJIChsaWtlbHkgcmVmZXJyaW5nIHRvIHRoZSBQYXltZW50IENhcmQgSW5kdXN0cnkgRGF0YSBTZWN1cml0eSBTdGFuZGFyZCwgb3IgYSByZWxhdGVkIHRlY2hub2xvZ3kgcHJvdG9jb2wpLCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIGlmIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbnMgb3IgY29uZmlndXJhdGlvbnMgZXhpc3QuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA6IHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0uIEFtIEkgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBzdHJhaWdodGZvcndhcmQgUENJIGNvbXBsaWFudCwgb3IgaXMgdGhlcmUgYWRkZWQgY29tcGxleGl0eSwgc2NvcGUgb3IgYSBub3ZlbCBzaXR1YXRpb24gd2l0aCB2YXJpYXRpb25zIHRvIGNvbnNpZGVyPyBJdCBpcyBhbiBpbXBvcnRhbnQgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MjksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1Nzo1MC4zNTQ2NjI2MDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4NzgzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNUTU1BQ19QQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA4LVxcdHRyaXN0YXRlIFxcXCJTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1Nzo1MC40MDQ1NDc3MTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTAzMTU0NDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgU1RNTUFDIFBDSSBFbXVsYXRpb24gaW4gUUVNVSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBTVE1NQUNfUENJLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGRvZXMgUUVNVSBldmVuIGVtdWxhdGUgdGhpcz8gSSdtIHByZXR0eSBzdXJlIHN0YW5kYXJkIFFFTVUgZG9lc24ndCBvZmZlciBuYXRpdmUgU1RNTUFDIFBDSSBlbXVsYXRpb24uIEkgbmVlZCB0byBiZSBzdXJlLiBMZXQgbWUgc2VlLi4uIEkgcmVjYWxsIFFFTVUgaGF2aW5nIGltcGxlbWVudGF0aW9ucyBmb3Igc2V2ZXJhbCBvdGhlciBuZXR3b3JrIGRldmljZXMsIGxpa2UgYGlnYi5jYCwgYGUxMDAwZS5jYCwgYHJ0bDgxMzkuY2AsIGBwY25ldC5jYCwgdGhlIGxpc3QgZ29lcyBvbi4gQnV0LCBJIGRvbid0IHJlY2FsbCBzZWVpbmcgYSBjb3JyZXNwb25kaW5nIGBzdG1tYWMuY2AuIERvZXMgaXQgZW11bGF0ZSB0aGUgc3RtbWFjP1xuXG5BbHJpZ2h0LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYSBiaXQuIFN5emthbGxlciBoYXMgYmVlbiBhIGdvb2Qgc291cmNlIG9mIGluZm9ybWF0aW9uIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcsIHNvIHBlcmhhcHMgaXQgaGFzIHNvbWUgZGV2aWNlIGRlc2NyaXB0aW9ucywgYW5kIHRoYXQgbWlnaHQgaW5jbHVkZSBTVE1NQUMuIEkgc2hvdWxkIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMDEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTc6NTUuOTA3NzA0NTA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTE3NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTMtICogQ29weXJpZ2h0IChjKSAyMDE5IFN5bm9wc3lzLCBJbmMuIGFuZC9vciBpdHMgYWZmaWxpYXRlcy5cXG5uZXQvY29yZS9zZWxmdGVzdHMuYzo0OiAqIHN0bW1hYyBTZWxmdGVzdHMgU3VwcG9ydFxcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTUtICpcXG4tLVxcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTctICpcXG5uZXQvY29yZS9zZWxmdGVzdHMuYzo4OiAqIFBvcnRlZCBmcm9tIHN0bW1hYyBieTpcXG5uZXQvY29yZS9zZWxmdGVzdHMuYy05LSAqIENvcHlyaWdodCAoQykgMjAyMSBPbGVrc2lqIFJlbXBlbCBcXHUwMDNjby5yZW1wZWxAcGVuZ3V0cm9uaXguZGVcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU3OjU1Ljk4NDIyNjgzMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjM3MTMzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeXprYWxsZXIgUG90ZW50aWFsIGZvciBUZXN0aW5nIHN0bW1hYyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJXYWl0LCBpcyB0aGVyZSBhbnkgd2F5IHRvIHRlc3QgYHN0bW1hY2Agd2l0aCBzeXprYWxsZXIgKndpdGhvdXQqIGRpcmVjdCBgc3RtbWFjYCBkZXNjcmlwdGlvbnM/XCIgSG1tLi4uIG1heWJlIG5ldGxpbmssIHNwZWNpZmljYWxseSBgdGMgcWRpc2NgPyBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgYWRkaW5nIGBUQ19TRVRVUF9RRElTQ19FVFNgIGhhbmRsaW5nIHdpdGhpbiBgc3RtbWFjX3NldHVwX3RjYC4gUmlnaHQsIGFuZCBgc3RtbWFjX3NldHVwX3RjYCBnZXRzIGNhbGxlZCB0aHJvdWdoIGBuZG9fc2V0dXBfdGNgLiBUaGUgdHJpY2t5IHBhcnQgaXMgdGhhdCBpZiB0aGUgZHJpdmVyIGlzbid0IGxvYWRlZCwgYG5kb19zZXR1cF90Y2Agd29uJ3QgZXZlbiBiZSBpbnZva2VkLlxuXG5TbywgdGhlIG5leHQgcXVlc3Rpb24gaXMsIGNhbiBJIGdldCB0aGUgZHJpdmVyIGxvYWRlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2Ugc3l6a2FsbGVyIHVzZXM/IEkgYmV0IHRoZXJlIGFyZSBwbGF0Zm9ybSBkZXZpY2VzIEkgY291bGQgdXNlIHRvIG15IGFkdmFudGFnZSDigJMgZHVtbXkgZGV2aWNlcyBvciB0aG9zZSBjcmVhdGVkIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLCBwYXJ0aWN1bGFybHkgaW4gY2VydGFpbiBRRU1VIGNvbmZpZ3VyYXRpb25zLiBCdXQgc3l6a2FsbGVyIHByZWRvbWluYW50bHkgcnVucyBvbiB4ODZfNjQsIG9yIHNvbWV0aW1lcyBhcm02NCwgc28gaXQgbmVlZHMgdG8gYmUgcG9zc2libGUgb24gdGhlc2UgcGxhdGZvcm1zLlxuXG5JZiBpdCdzIHg4Nl82NCwgd2hpY2ggaXMgbGlrZWx5LCB0aGVuIEkgc2hvdWxkIGludmVzdGlnYXRlIGlmIGEgUENJIGRldmljZSBjb3VsZCBiZSBwcm9iZWQuIExldCBtZSBjaGVjayB0aGUgY29kZSBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jYC4gSG9wZWZ1bGx5LCBJIGNhbiBmaW5kIHNvbWV0aGluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyNSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1ODowMS40NDc5NDM5NjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODQwMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kZXZpY2VfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMTg9c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMTk6XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjAyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDM6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0bW1hY19pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDQtXFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNTUFDLCBTVE1NQUMsIFxcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjAxLjQ5NjgxNDU3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTU1NjQxOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgc3RtbWFjX2lkX3RhYmxlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIFBDSSBJRHMgd2l0aGluIHRoZSBgc3RtbWFjX2lkX3RhYmxlYC5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBzcGVjaWZpYyBoYXJkd2FyZSBpZGVudGlmaWVycyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBgc3RtbWFjYCBkcml2ZXIuIEtub3dpbmcgdGhlIHZlbmRvciBhbmQgZGV2aWNlIElEcyBtYXBwZWQgdG8gdGhlIGRyaXZlciBpcyBmdW5kYW1lbnRhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaGFyZHdhcmUgY29tcGF0aWJpbGl0eS4gSSB3YW50IHRvIHF1aWNrbHkgY29ycmVsYXRlIHRoZSBkZXZpY2UncyBQQ0kgSUQgdG8gdGhpcyBsaXN0IGluIG15IG1lbW9yeS4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIHN0cnVjdHVyZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgc3VwcG9ydGVkIGNoaXBzZXRzLiBUaGVuLCBJIHdpbGwgc3RhcnQgdG8gaW5mZXIgdGhlIGltcGxpZWQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGJ5IHRoZSBpZGVudGlmaWVkIGNoaXBzZXRzLiBJdCdzIGEgcXVpY2sgYW5kIGVzc2VudGlhbCBzdGVwIGZvciBpbml0aWFsIGFzc2Vzc21lbnQsIGRlYnVnZ2luZywgb3IgZXZlbiBqdXN0IGNvbmZpcm1pbmcgZHJpdmVyIHN1cHBvcnQgZm9yIGEgZ2l2ZW4gbmV0d29yayBpbnRlcmZhY2UgY2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4NiwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjEwLjA1MjQ2NDYzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9TVE1NQUNfU1RNTUFDXFx0XFx0MHgxMTA4XFxuIDIwMTpcXHQjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lOT1BTWVNfR01BQzVfSURcXHRcXHQweDcxMDJcXG4gMjAyOlxcdFxcbiAyMDM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0bW1hY19pZF90YWJsZVtdID0ge1xcbiAyMDQ6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNTUFDLCBTVE1NQUMsIFxcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXFxuIDIwNTpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1JQ1JPLCBNQUMsIFxcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXFxuIDIwNjpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShTWU5PUFNZUywgR01BQzVfSUQsIFxcdTAwMjZzbnBzX2dtYWM1X3BjaV9pbmZvKSB9LFxcbiAyMDc6XFx0XFx0e31cXG4gMjA4OlxcdH07XFxuIDIwOTpcXHRcXG4gMjEwOlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xcbiAyMTE6XFx0XFxuIDIxMjpcXHRzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3RtbWFjX3BjaV9kcml2ZXIgPSB7XFxuIDIxMzpcXHRcXHQubmFtZSA9IFNUTU1BQ19SRVNPVVJDRV9OQU1FLFxcbiAyMTQ6XFx0XFx0LmlkX3RhYmxlID0gc3RtbWFjX2lkX3RhYmxlLFxcbiAyMTU6XFx0XFx0LnByb2JlID0gc3RtbWFjX3BjaV9wcm9iZSxcXG4gMjE2OlxcdFxcdC5yZW1vdmUgPSBzdG1tYWNfcGNpX3JlbW92ZSxcXG4gMjE3OlxcdFxcdC5kcml2ZXIgICAgICAgICA9IHtcXG4gMjE4OlxcdFxcdFxcdC5wbSAgICAgPSBcXHUwMDI2c3RtbWFjX3NpbXBsZV9wbV9vcHMsXFxuIDIxOTpcXHRcXHR9LFxcbiAyMjA6XFx0fTtcXG4gMjIxOlxcdFxcbiAyMjI6XFx0bW9kdWxlX3BjaV9kcml2ZXIoc3RtbWFjX3BjaV9kcml2ZXIpO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlNUTU1BQyAxMC8xMDAvMTAwMCBFdGhlcm5ldCBQQ0kgZHJpdmVyXFxcIik7XFxuIDIyNTpcXHRNT0RVTEVfQVVUSE9SKFxcXCJSYXlhZ29uZCBLb2thdGFudXIgXFx1MDAzY3JheWFnb25kLmtva2F0YW51ckB2YXlhdnlhbGFicy5jb21cXHUwMDNlXFxcIik7XFxuIDIyNjpcXHRNT0RVTEVfQVVUSE9SKFxcXCJHaXVzZXBwZSBDYXZhbGxhcm8gXFx1MDAzY3BlcHBlLmNhdmFsbGFyb0BzdC5jb21cXHUwMDNlXFxcIik7XFxuIDIyNzpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjEwLjA1MjUzNjIzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTc3MTUyODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVmlhYmlsaXR5IG9mIFN5emthbGxlcidzIHZoY2kgZm9yIFN0bW1hYyBEcml2ZXIgVGVzdGluZyoqXG5cbk9rYXksIHNvIFN5emthbGxlcidzIGdvdCB0aGlzIHZoY2kgbWVjaGFuaXNtLCByaWdodD8gVGhhdCdzIHRoZSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uIOKAkyBpdCBsZXRzIG1lIHNwb29mIFBDSSBkZXZpY2VzIHdpdGggd2hhdGV2ZXIgSURzIEkgbmVlZC4gVGhhdCdzIHBvdGVudGlhbGx5ICpodWdlKiBmb3IgZnV6emluZyBhbmQgdGVzdGluZy4gQnV0IHRoZSBxdWVzdGlvbiBpczogY2FuIHRoZSBzdG1tYWMgZHJpdmVyIGV2ZW4gKndvcmsqIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlPyBUaGF0J3MgdGhlIGNydXggb2YgaXQuIFR5cGljYWxseSwgdGhlc2UgcGh5c2ljYWwgRXRoZXJuZXQgZHJpdmVycyBhcmUgcHJldHR5IGZpbmlja3kuIFRoZXkgdXN1YWxseSBjaG9rZSBpbiB0aGUgYHByb2JlYCBmdW5jdGlvbiBpZiB0aGUgaGFyZHdhcmUncyBub3QgcGxheWluZyBiYWxsIOKAkyB5b3Uga25vdywgdHJ5aW5nIHRvIHJlYWQgdGhlIE1BQyBhZGRyZXNzLCByZXNldHRpbmcgdGhlIFBIWSwgY2hlY2tpbmcgcmVnaXN0ZXJzIGFuZCBleHBlY3RpbmcgdmFsaWQgcmVzcG9uc2VzLiBJdCdzIGEgcmVhbCBwYWluLiBTbywgdG8gZmlndXJlIG91dCBpZiB0aGlzIHZoY2kgYXBwcm9hY2ggY2FuIGFjdHVhbGx5IHdvcmsgd2l0aCBzdG1tYWMsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZGl2ZSBpbnRvIGBzdG1tYWNfcGNpX3Byb2JlYC4gR290dGEgc2VlIHdoYXQgdGhlIGRyaXZlcidzICpyZWFsbHkqIGV4cGVjdGluZyBpbiB0ZXJtcyBvZiBoYXJkd2FyZSBpbnRlcmFjdGlvbiBkdXJpbmcgdGhlIHByb2JlLiBUaGVuIEknbGwgYmUgYWJsZSB0byB0ZWxsIGlmIFN5emthbGxlcidzIHZoY2kgY2FuIGZvb2wgdGhlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI5NSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTg6MTUuMjI5NjkyMzI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTgsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTg6XFx0c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiAxMTk6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gMTIwOlxcdHtcXG4gMTIxOlxcdFxcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4gMTIyOlxcdFxcdHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdDtcXG4gMTIzOlxcdFxcdHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzIHJlcyA9IHt9O1xcbiAxMjQ6XFx0XFx0aW50IHJldDtcXG4gMTI1OlxcdFxcdGludCBpO1xcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHRwbGF0ID0gc3RtbWFjX3BsYXRfZGF0X2FsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbiAxMjg6XFx0XFx0aWYgKCFwbGF0KVxcbiAxMjk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDEzMDpcXHRcXG4gMTMxOlxcdFxcdHBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4gMTMyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVvZigqcGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YSksXFxuIDEzMzpcXHRcXHRcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG4gMTM0OlxcdFxcdGlmICghcGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YSlcXG4gMTM1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxMzY6XFx0XFxuIDEzNzpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmcgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4gMTM4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmcpLFxcbiAxMzk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4gMTQwOlxcdFxcdGlmICghcGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnKVxcbiAxNDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdC8qIEVuYWJsZSBwY2kgZGV2aWNlICovXFxuIDE0NDpcXHRcXHRyZXQgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XFxuIDE0NTpcXHRcXHRpZiAocmV0KSB7XFxuIDE0NjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogRVJST1I6IGZhaWxlZCB0byBlbmFibGUgZGV2aWNlXFxcXG5cXFwiLFxcbiAxNDc6XFx0XFx0XFx0XFx0X19mdW5jX18pO1xcbiAxNDg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTQ5OlxcdFxcdH1cXG4gMTUwOlxcdFxcbiAxNTE6XFx0XFx0LyogR2V0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgZGV2aWNlICovXFxuIDE1MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUENJX1NURF9OVU1fQkFSUzsgaSsrKSB7XFxuIDE1MzpcXHRcXHRcXHRpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKSA9PSAwKVxcbiAxNTQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDE1NTpcXHRcXHRcXHRyZXMuYWRkciA9IHBjaW1faW9tYXBfcmVnaW9uKHBkZXYsIGksIFNUTU1BQ19SRVNPVVJDRV9OQU1FKTtcXG4gMTU2OlxcdFxcdFxcdGlmIChJU19FUlIocmVzLmFkZHIpKVxcbiAxNTc6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocmVzLmFkZHIpO1xcbiAxNTg6XFx0XFx0XFx0YnJlYWs7XFxuIDE1OTpcXHRcXHR9XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRyZXQgPSBpbmZvLVxcdTAwM2VzZXR1cChwZGV2LCBwbGF0KTtcXG4gMTY0OlxcdFxcdGlmIChyZXQpXFxuIDE2NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRyZXMud29sX2lycSA9IHBkZXYtXFx1MDAzZWlycTtcXG4gMTY4OlxcdFxcdHJlcy5pcnEgPSBwZGV2LVxcdTAwM2VpcnE7XFxuIDE2OTpcXHRcXG4gMTcwOlxcdFxcdHBsYXQtXFx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cXHUwMDNldHNvZWUgPSAxO1xcbiAxNzE6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2VtcnhwZWUgPSAxO1xcbiAxNzI6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2VtZXN0ZWUgPSAxO1xcbiAxNzM6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2VtcnhlZSA9IDE7XFxuIDE3NDpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZW10eGVlID0gMTtcXG4gMTc1OlxcdFxcdHBsYXQtXFx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cXHUwMDNlZXBzaSA9IDE7XFxuIDE3NjpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZWVkcHAgPSAxO1xcbiAxNzc6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2VwcnR5ZW4gPSAxO1xcbiAxNzg6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2V0bW91dGVuID0gMTtcXG4gMTc5OlxcdFxcbiAxODA6XFx0XFx0cGxhdC1cXHUwMDNlc3VzcGVuZCA9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xcbiAxODE6XFx0XFx0cGxhdC1cXHUwMDNlcmVzdW1lID0gc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZTtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuIDE4NDpcXHR9XFxuIDE4NTpcXHRcXG4gMTg2OlxcdC8qKlxcbiAxODc6XFx0ICogc3RtbWFjX3BjaV9yZW1vdmVcXG4gMTg4OlxcdCAqXFxuIDE4OTpcXHQgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXJcXG4gMTkwOlxcdCAqIERlc2NyaXB0aW9uOiB0aGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSBtYWluIHRvIGZyZWUgdGhlIG5ldCByZXNvdXJjZXMuXFxuIDE5MTpcXHQgKi9cXG4gMTkyOlxcdHN0YXRpYyB2b2lkIHN0bW1hY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiAxOTM6XFx0e1xcbiAxOTQ6XFx0XFx0c3RtbWFjX2R2cl9yZW1vdmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIDE5NTpcXHR9XFxuIDE5NjpcXHRcXG4gMTk3OlxcdC8qIHN5bnRoZXRpYyBJRCwgbm8gb2ZmaWNpYWwgdmVuZG9yICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjE1LjIyOTc4NDA0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTk3MjQ3OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipQcm9iaW5nIHRoZSBTVE1NQUMgRHJpdmVyJ3MgUmVzaWxpZW5jZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBhdCB0aGUgcG9pbnQgd2hlcmUgYSBwcm9iZSBjYWxsIGlzIGJlaW5nIG1hZGUgdG8gYHN0bW1hY19kdnJfcHJvYmVgLiBNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgcm9idXN0bmVzcyBhbmQgdGVzdGFiaWxpdHkuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyByZXNpbGllbnQgdGhpcyBpcyBpbiB0aGUgYWJzZW5jZSBvZiBhY3R1YWwgaGFyZHdhcmUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nLCBcIkNhbiBJIHN1Y2Nlc3NmdWxseSBleGVjdXRlIGBzdG1tYWNfZHZyX3Byb2JlYCBpbiBhIHNpbXVsYXRlZCBlbnZpcm9ubWVudCwgcGVyaGFwcyB3aXRoIGEgdmlydHVhbCBOSUMsIG9yIGV2ZW4ganVzdCBieSBzdHViYmluZyBvdXQgY2VydGFpbiBoYXJkd2FyZSBpbnRlcmFjdGlvbnM/XCIgVGhlIGdvYWwgaXMgdG8gaXNvbGF0ZSB0aGUgZHJpdmVyJ3MgY29yZSBsb2dpYyBmcm9tIHRoZSBwaHlzaWNhbCBkZXZpY2UuIElmIGl0ICpkb2VzKiBkZXBlbmQgb24gc29tZSBIVyBpbml0aWFsaXphdGlvbiwgSSB3YW50IHRvIHNlZSBob3cgdGhhdCdzIGhhbmRsZWQuIEFyZSB3ZSBnZXR0aW5nIHRoZSB1c3VhbCBoYXJkd2FyZSBkZXBlbmRlbmN5IGVycm9yIG1lc3NhZ2VzPyBJcyB0aGVyZSBhIGNsZWFyIHBhdGggdG8gbW9jayB0aGF0IG91dD8gQ2FuIEkgYnlwYXNzIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIG9yIGRvZXMgYSBwYXJ0aWN1bGFyIHZhbHVlIHRyaWdnZXIgaXQ/IE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgYSB3ZWxsLWRlc2lnbmVkIGRyaXZlciBzaG91bGQgZ3JhY2VmdWxseSBoYW5kbGUgdGhlIGxhY2sgb2YgaGFyZHdhcmUsIG9yIGF0IGxlYXN0IHByb3ZpZGUgY2xlYXIgaW5kaWNhdG9ycyBvZiBpdHMgYWJzZW5jZSwgdG8gYWxsb3cgZm9yIHRob3JvdWdoIHRlc3RpbmcgYW5kIGJyaW5nLXVwLiBTbywgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBncmFjZWZ1bCBmYWlsdXJlcywgcGVyaGFwcyBhIHJldHVybiBjb2RlIG9yIGEgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSwgaW4gdGhlIHByb2JlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkyMiwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTg6MjMuMjI3MDM0MzM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTYyNjAxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2R2cl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc5ND1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGxhdF9kYXRfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzc5NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc3OTY6c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzc5Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDk4LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA5OTogKiBzdG1tYWNfZHZyX3Byb2JlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTAwLSAqIEBkZXY6IGRldmljZSBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDctICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTA4OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDktXFx0XFx0ICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODExOTpcXHRyZXQgPSBfX3N0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMjAtXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBwbGF0X2RhdC1cXHUwMDNlZXhpdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyNC19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTI1OkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcHJvYmUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTg6MjMuNTIzMjk5OTE4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NzE3NzAzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgX19zdG1tYWNfZHZyX3Byb2JlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUga2VybmVsIGlzIHBvaW50aW5nIG1lIHRvd2FyZCBgX19zdG1tYWNfZHZyX3Byb2JlYC4gTGV0J3MgYXNzdW1lIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgU1RNTUFDIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhdCBsZWFzdCBpbml0aWFsbHkuIFRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gc2VlIHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBzZXR1cCBoYXBwZW5pbmcuIExpa2VseSwgdGhpcyBpcyB3aGVyZSB0aGUgaGFyZHdhcmUgaXMgYmVpbmcgaWRlbnRpZmllZCBhbmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBkcml2ZXIuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlOiB3aGF0J3MgaXQgY2hlY2tpbmcsIHdoYXQncyBpdCBjYWxsaW5nLCBhbmQgd2hhdCdzIGl0IHNldHRpbmcgdXA/IFRoaXMgaXMgdGhlIGNvcmUgb2YgZ2V0dGluZyB0aGUgZGV2aWNlIHJlYWR5IHRvIHJ1bi4gTGV04oCZcyBzZWUgd2hhdCBnb29kaWVzIGF3YWl0IGluc2lkZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MDMsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1ODozMC4yOTUwNzI1NTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA3MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzc5NixcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzc5NjpcXHRzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuNzc5NzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbjc3OTg6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHN0bW1hY19yZXNvdXJjZXMgKnJlcylcXG43Nzk5OlxcdHtcXG43ODAwOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDtcXG43ODAxOlxcdFxcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdjtcXG43ODAyOlxcdFxcdGludCBpLCByZXQgPSAwO1xcbjc4MDM6XFx0XFx0dTggcnhxO1xcbjc4MDQ6XFx0XFxuNzgwNTpcXHRcXHRpZiAoIXBsYXRfZGF0LVxcdTAwM2VkbWFfY2ZnIHx8ICFwbGF0X2RhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlcGJsKSB7XFxuNzgwNjpcXHRcXHRcXHRkZXZfZXJyKGRldmljZSwgXFxcImludmFsaWQgRE1BIGNvbmZpZ3VyYXRpb25cXFxcblxcXCIpO1xcbjc4MDc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzgwODpcXHRcXHR9XFxuNzgwOTpcXHRcXG43ODEwOlxcdFxcdG5kZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhkZXZpY2UsIHNpemVvZihzdHJ1Y3Qgc3RtbWFjX3ByaXYpLFxcbjc4MTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1UTF9NQVhfVFhfUVVFVUVTLCBNVExfTUFYX1JYX1FVRVVFUyk7XFxuNzgxMjpcXHRcXHRpZiAoIW5kZXYpXFxuNzgxMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43ODE0OlxcdFxcbjc4MTU6XFx0XFx0U0VUX05FVERFVl9ERVYobmRldiwgZGV2aWNlKTtcXG43ODE2OlxcdFxcbjc4MTc6XFx0XFx0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbjc4MTg6XFx0XFx0cHJpdi1cXHUwMDNlZGV2aWNlID0gZGV2aWNlO1xcbjc4MTk6XFx0XFx0cHJpdi1cXHUwMDNlZGV2ID0gbmRldjtcXG43ODIwOlxcdFxcbjc4MjE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1UTF9NQVhfUlhfUVVFVUVTOyBpKyspXFxuNzgyMjpcXHRcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLnJ4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcXG43ODIzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNVExfTUFYX1RYX1FVRVVFUzsgaSsrKSB7XFxuNzgyNDpcXHRcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLnR4cV9zdGF0c1tpXS5xX3N5bmNwKTtcXG43ODI1OlxcdFxcdFxcdHU2NF9zdGF0c19pbml0KFxcdTAwMjZwcml2LVxcdTAwM2V4c3RhdHMudHhxX3N0YXRzW2ldLm5hcGlfc3luY3ApO1xcbjc4MjY6XFx0XFx0fVxcbjc4Mjc6XFx0XFxuNzgyODpcXHRcXHRwcml2LVxcdTAwM2V4c3RhdHMucGNwdV9zdGF0cyA9XFxuNzgyOTpcXHRcXHRcXHRkZXZtX25ldGRldl9hbGxvY19wY3B1X3N0YXRzKGRldmljZSwgc3RydWN0IHN0bW1hY19wY3B1X3N0YXRzKTtcXG43ODMwOlxcdFxcdGlmICghcHJpdi1cXHUwMDNleHN0YXRzLnBjcHVfc3RhdHMpXFxuNzgzMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43ODMyOlxcdFxcbjc4MzM6XFx0XFx0c3RtbWFjX3NldF9ldGh0b29sX29wcyhuZGV2KTtcXG43ODM0OlxcdFxcdHByaXYtXFx1MDAzZXBhdXNlX3RpbWUgPSBwYXVzZTtcXG43ODM1OlxcdFxcdHByaXYtXFx1MDAzZXBsYXQgPSBwbGF0X2RhdDtcXG43ODM2OlxcdFxcdHByaXYtXFx1MDAzZWlvYWRkciA9IHJlcy1cXHUwMDNlYWRkcjtcXG43ODM3OlxcdFxcdHByaXYtXFx1MDAzZWRldi1cXHUwMDNlYmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpcmVzLVxcdTAwM2VhZGRyO1xcbjc4Mzg6XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlbXVsdGlfbXNpX2VuID1cXG43ODM5OlxcdFxcdFxcdChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX01VTFRJX01TSV9FTik7XFxuNzg0MDpcXHRcXG43ODQxOlxcdFxcdHByaXYtXFx1MDAzZWRldi1cXHUwMDNlaXJxID0gcmVzLVxcdTAwM2VpcnE7XFxuNzg0MjpcXHRcXHRwcml2LVxcdTAwM2V3b2xfaXJxID0gcmVzLVxcdTAwM2V3b2xfaXJxO1xcbjc4NDM6XFx0XFx0cHJpdi1cXHUwMDNlc2Z0eV9pcnEgPSByZXMtXFx1MDAzZXNmdHlfaXJxO1xcbjc4NDQ6XFx0XFxuNzg0NTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19NVUxUSV9NU0lfRU4pIHtcXG43ODQ2OlxcdFxcdFxcdHJldCA9IHN0bW1hY19tc2lfaW5pdChwcml2LCByZXMpO1xcbjc4NDc6XFx0XFx0XFx0aWYgKHJldClcXG43ODQ4OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuNzg0OTpcXHRcXHR9XFxuNzg1MDpcXHRcXG43ODUxOlxcdFxcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKHJlcy1cXHUwMDNlbWFjKSlcXG43ODUyOlxcdFxcdFxcdGV0aF9od19hZGRyX3NldChwcml2LVxcdTAwM2VkZXYsIHJlcy1cXHUwMDNlbWFjKTtcXG43ODUzOlxcdFxcbjc4NTQ6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKGRldmljZSwgcHJpdi1cXHUwMDNlZGV2KTtcXG43ODU1OlxcdFxcbjc4NTY6XFx0XFx0LyogVmVyaWZ5IGRyaXZlciBhcmd1bWVudHMgKi9cXG43ODU3OlxcdFxcdHN0bW1hY192ZXJpZnlfYXJncygpO1xcbjc4NTg6XFx0XFxuNzg1OTpcXHRcXHRwcml2LVxcdTAwM2VhZl94ZHBfemNfcXBzID0gYml0bWFwX3phbGxvYyhNVExfTUFYX1RYX1FVRVVFUywgR0ZQX0tFUk5FTCk7XFxuNzg2MDpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZWFmX3hkcF96Y19xcHMpXFxuNzg2MTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43ODYyOlxcdFxcbjc4NjM6XFx0XFx0LyogQWxsb2NhdGUgd29ya3F1ZXVlICovXFxuNzg2NDpcXHRcXHRwcml2LVxcdTAwM2V3cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFxcXCJzdG1tYWNfd3FcXFwiKTtcXG43ODY1OlxcdFxcdGlmICghcHJpdi1cXHUwMDNld3EpIHtcXG43ODY2OlxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiZmFpbGVkIHRvIGNyZWF0ZSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbjc4Njc6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG43ODY4OlxcdFxcdFxcdGdvdG8gZXJyb3Jfd3FfaW5pdDtcXG43ODY5OlxcdFxcdH1cXG43ODcwOlxcdFxcbjc4NzE6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2VzZXJ2aWNlX3Rhc2ssIHN0bW1hY19zZXJ2aWNlX3Rhc2spO1xcbjc4NzI6XFx0XFxuNzg3MzpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2cHJpdi1cXHUwMDNlZWVlX2N0cmxfdGltZXIsIHN0bW1hY19lZWVfY3RybF90aW1lciwgMCk7XFxuNzg3NDpcXHRcXG43ODc1OlxcdFxcdC8qIE92ZXJyaWRlIHdpdGgga2VybmVsIHBhcmFtZXRlcnMgaWYgc3VwcGxpZWQgWFhYIENSUyBYWFhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTg6MzAuMjk1Nzg2MDAyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzQxNTcyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBc3Nlc3NpbmcgUG90ZW50aWFsIFN5c3RlbSBJbnRlcmFjdGlvbioqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGhlcmUgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxldmVsIG9mIHNvcGhpc3RpY2F0aW9uIHRoZSBzeXN0ZW0gaXMgYXR0ZW1wdGluZywgb3IgcG90ZW50aWFsbHkgY2FwYWJsZSBvZiwgaW4gaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZ2F1Z2Ugd2hldGhlciB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFuYWx5c2lzLCBvciBpZiB0aGVyZSdzIGEgbW9yZSBpbnZvbHZlZCBhdHRlbXB0IGJlaW5nIG1hZGUgdG8gZGlyZWN0bHkgaW50ZXJyb2dhdGUgaGFyZHdhcmUgcmVnaXN0ZXJzLiBSZWFkaW5nIGhhcmR3YXJlIHJlZ2lzdGVycywgZXZlbiBpZiBpbmRpcmVjdGx5LCBpbXBsaWVzIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIGFyY2hpdGVjdHVyZSBhbmQgYSBwb3RlbnRpYWxseSBncmVhdGVyIHZ1bG5lcmFiaWxpdHkgc3VyZmFjZS4gVGhpcyBjb3VsZCBiZSBhIHRlbGwgb2YgdGhlIHRvb2xzZXQsIG9yIHRoZSBsZXZlbCBvZiBlZmZvcnQgdGhhdCB0aGUgYWN0b3IgaXMgd2lsbGluZyB0byBwdXQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTEzLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1ODozNC4yMjk5NDY4MDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzg3NixcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzg3NjpcXHRcXHQgKiB0aGlzIG5lZWRzIHRvIGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzXFxuNzg3NzpcXHRcXHQgKi9cXG43ODc4OlxcdFxcdGlmICgocGh5YWRkciBcXHUwMDNlPSAwKSBcXHUwMDI2XFx1MDAyNiAocGh5YWRkciBcXHUwMDNjPSAzMSkpXFxuNzg3OTpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwaHlfYWRkciA9IHBoeWFkZHI7XFxuNzg4MDpcXHRcXG43ODgxOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VzdG1tYWNfcnN0KSB7XFxuNzg4MjpcXHRcXHRcXHRyZXQgPSByZXNldF9jb250cm9sX2Fzc2VydChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VzdG1tYWNfcnN0KTtcXG43ODgzOlxcdFxcdFxcdHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlc3RtbWFjX3JzdCk7XFxuNzg4NDpcXHRcXHRcXHQvKiBTb21lIHJlc2V0IGNvbnRyb2xsZXJzIGhhdmUgb25seSByZXNldCBjYWxsYmFjayBpbnN0ZWFkIG9mXFxuNzg4NTpcXHRcXHRcXHQgKiBhc3NlcnQgKyBkZWFzc2VydCBjYWxsYmFja3MgcGFpci5cXG43ODg2OlxcdFxcdFxcdCAqL1xcbjc4ODc6XFx0XFx0XFx0aWYgKHJldCA9PSAtRU5PVFNVUFApXFxuNzg4ODpcXHRcXHRcXHRcXHRyZXNldF9jb250cm9sX3Jlc2V0KHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXN0bW1hY19yc3QpO1xcbjc4ODk6XFx0XFx0fVxcbjc4OTA6XFx0XFxuNzg5MTpcXHRcXHRyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXN0bW1hY19haGJfcnN0KTtcXG43ODkyOlxcdFxcdGlmIChyZXQgPT0gLUVOT1RTVVBQKVxcbjc4OTM6XFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJ1bmFibGUgdG8gYnJpbmcgb3V0IG9mIGFoYiByZXNldDogJXBlXFxcXG5cXFwiLFxcbjc4OTQ6XFx0XFx0XFx0XFx0RVJSX1BUUihyZXQpKTtcXG43ODk1OlxcdFxcbjc4OTY6XFx0XFx0LyogV2FpdCBhIGJpdCBmb3IgdGhlIHJlc2V0IHRvIHRha2UgZWZmZWN0ICovXFxuNzg5NzpcXHRcXHR1ZGVsYXkoMTApO1xcbjc4OTg6XFx0XFxuNzg5OTpcXHRcXHQvKiBJbml0IE1BQyBhbmQgZ2V0IHRoZSBjYXBhYmlsaXRpZXMgKi9cXG43OTAwOlxcdFxcdHJldCA9IHN0bW1hY19od19pbml0KHByaXYpO1xcbjc5MDE6XFx0XFx0aWYgKHJldClcXG43OTAyOlxcdFxcdFxcdGdvdG8gZXJyb3JfaHdfaW5pdDtcXG43OTAzOlxcdFxcbjc5MDQ6XFx0XFx0LyogT25seSBEV01BQyBjb3JlIHZlcnNpb24gNS4yMCBvbndhcmRzIHN1cHBvcnRzIEhXIGRlc2NyaXB0b3IgcHJlZmV0Y2guXFxuNzkwNTpcXHRcXHQgKi9cXG43OTA2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VzeW5vcHN5c19pZCBcXHUwMDNjIERXTUFDX0NPUkVfNV8yMClcXG43OTA3OlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWRtYV9jZmctXFx1MDAzZWRjaGUgPSBmYWxzZTtcXG43OTA4OlxcdFxcbjc5MDk6XFx0XFx0c3RtbWFjX2NoZWNrX2V0aGVyX2FkZHIocHJpdik7XFxuNzkxMDpcXHRcXG43OTExOlxcdFxcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2c3RtbWFjX25ldGRldl9vcHM7XFxuNzkxMjpcXHRcXG43OTEzOlxcdFxcdG5kZXYtXFx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcXHUwMDI2c3RtbWFjX3hkcF9tZXRhZGF0YV9vcHM7XFxuNzkxNDpcXHRcXHRuZGV2LVxcdTAwM2V4c2tfdHhfbWV0YWRhdGFfb3BzID0gXFx1MDAyNnN0bW1hY194c2tfdHhfbWV0YWRhdGFfb3BzO1xcbjc5MTU6XFx0XFxuNzkxNjpcXHRcXHRuZGV2LVxcdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8XFxuNzkxNzpcXHRcXHRcXHRcXHQgICAgTkVUSUZfRl9SWENTVU07XFxuNzkxODpcXHRcXHRuZGV2LVxcdTAwM2V4ZHBfZmVhdHVyZXMgPSBORVRERVZfWERQX0FDVF9CQVNJQyB8IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcXG43OTE5OlxcdFxcdFxcdFxcdCAgICAgTkVUREVWX1hEUF9BQ1RfWFNLX1pFUk9DT1BZO1xcbjc5MjA6XFx0XFxuNzkyMTpcXHRcXHRyZXQgPSBzdG1tYWNfdGNfaW5pdChwcml2LCBwcml2KTtcXG43OTIyOlxcdFxcdGlmICghcmV0KSB7XFxuNzkyMzpcXHRcXHRcXHRuZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xcbjc5MjQ6XFx0XFx0fVxcbjc5MjU6XFx0XFxuNzkyNjpcXHRcXHRzdG1tYWNfc2V0X2dzb19mZWF0dXJlcyhuZGV2KTtcXG43OTI3OlxcdFxcbjc5Mjg6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAuc3BoZW4gXFx1MDAyNlxcdTAwMjZcXG43OTI5OlxcdFxcdCAgICAhKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RNTUFDX0ZMQUdfU1BIX0RJU0FCTEUpKSB7XFxuNzkzMDpcXHRcXHRcXHRuZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dSTztcXG43OTMxOlxcdFxcdFxcdHByaXYtXFx1MDAzZXNwaF9jYXBhYmxlID0gdHJ1ZTtcXG43OTMyOlxcdFxcdFxcdHByaXYtXFx1MDAzZXNwaF9hY3RpdmUgPSBwcml2LVxcdTAwM2VzcGhfY2FwYWJsZTtcXG43OTMzOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlNQSCBmZWF0dXJlIGVuYWJsZWRcXFxcblxcXCIpO1xcbjc5MzQ6XFx0XFx0fVxcbjc5MzU6XFx0XFxuNzkzNjpcXHRcXHQvKiBJZGVhbGx5IG91ciBob3N0IERNQSBhZGRyZXNzIHdpZHRoIGlzIHRoZSBzYW1lIGFzIGZvciB0aGVcXG43OTM3OlxcdFxcdCAqIGRldmljZS4gSG93ZXZlciwgaXQgbWF5IGRpZmZlciBhbmQgdGhlbiB3ZSBoYXZlIHRvIHVzZSBvdXJcXG43OTM4OlxcdFxcdCAqIGhvc3QgRE1BIHdpZHRoIGZvciBhbGxvY2F0aW9uIGFuZCB0aGUgZGV2aWNlIERNQSB3aWR0aCBmb3JcXG43OTM5OlxcdFxcdCAqIHJlZ2lzdGVyIGhhbmRsaW5nLlxcbjc5NDA6XFx0XFx0ICovXFxuNzk0MTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlaG9zdF9kbWFfd2lkdGgpXFxuNzk0MjpcXHRcXHRcXHRwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlaG9zdF9kbWFfd2lkdGg7XFxuNzk0MzpcXHRcXHRlbHNlXFxuNzk0NDpcXHRcXHRcXHRwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5hZGRyNjQ7XFxuNzk0NTpcXHRcXG43OTQ2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSB7XFxuNzk0NzpcXHRcXHRcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldmljZSxcXG43OTQ4OlxcdFxcdFxcdFxcdFxcdERNQV9CSVRfTUFTSyhwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSk7XFxuNzk0OTpcXHRcXHRcXHRpZiAoIXJldCkge1xcbjc5NTA6XFx0XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiVXNpbmcgJWQvJWQgYml0cyBETUEgaG9zdC9kZXZpY2Ugd2lkdGhcXFxcblxcXCIsXFxuNzk1MTpcXHRcXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCwgcHJpdi1cXHUwMDNlZG1hX2NhcC5hZGRyNjQpO1xcbjc5NTI6XFx0XFxuNzk1MzpcXHRcXHRcXHRcXHQvKlxcbjc5NTQ6XFx0XFx0XFx0XFx0ICogSWYgbW9yZSB0aGFuIDMyIGJpdHMgY2FuIGJlIGFkZHJlc3NlZCwgbWFrZSBzdXJlIHRvXFxuNzk1NTpcXHRcXHRcXHRcXHQgKiBlbmFibGUgZW5oYW5jZWQgYWRkcmVzc2luZyBtb2RlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1ODozNC4yMzAyODg4NzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxNDMzMDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFNUTU1BQyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIHN0YXJ0aW5nIHVwLCBhbmQgdGhlIGNvZGUgaGFzIGhpdCBgc3RtbWFjX2h3X2luaXRgLiBSaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcsIFwiTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugb2YgdGhlIFNUTU1BQyBkcml2ZXIuIEkgd2FudCB0byBrbm93IGV4YWN0bHkgaG93IGl0IHNldHMgdXAgdGhlIHJlZ2lzdGVycywgY29uZmlndXJlcyB0aGUgTUFDIGl0c2VsZiwgYW5kIGdldHMgdGhpbmdzIHJlYWR5IHRvIHJlY2VpdmUgYW5kIHRyYW5zbWl0IHBhY2tldHMuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoZSByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQuIFRoZSBETUEgc2V0dGluZ3MsIGZsb3cgY29udHJvbCwgaW50ZXJydXB0IGVuYWJsZW1lbnQg4oCTIHRoYXQncyBhbGwgd2hhdCBJIHdpbGwgYmUgZ29pbmcgdG8gY2hlY2sgaW4gdGhhdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMTgsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjM5LjU0NDYyMjQ5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4NzQ5MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19od19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03MzY1PXN0YXRpYyB2b2lkIHN0bW1hY19wcmludF9hY3RwaHlpZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczOTktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NDAwOiAqICBzdG1tYWNfaHdfaW5pdCAtIEluaXQgdGhlIE1BQyBkZXZpY2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDEtICogIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQwNi0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MDc6c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDA4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc5Nj1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc4OTktXFx0LyogSW5pdCBNQUMgYW5kIGdldCB0aGUgY2FwYWJpbGl0aWVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3OTAwOlxcdHJldCA9IHN0bW1hY19od19pbml0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzkwMS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1ODozOS43MjMzNzgxODZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyMjAwNzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19od19pbml0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGluaXRpYWxpemVzIHRoZSBoYXJkd2FyZSwgYW5kIHdoYXQgc3BlY2lmaWMgc3RlcHMgaXQgdGFrZXMuIEkga25vdyB0aGlzIGlzIGEgY29yZSBmdW5jdGlvbiwgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBETUEgZW5naW5lLCBjb25maWd1cmluZyB0aGUgTUFDIHJlZ2lzdGVycywgYW5kIGdlbmVyYWxseSBnZXR0aW5nIHRoZSBFdGhlcm5ldCBjb250cm9sbGVyIHJlYWR5IGZvciB1c2UuIEkgZXhwZWN0IHRvIHNlZSByZWdpc3RlciB3cml0ZXMsIHBlcmhhcHMgY2xvY2sgZW5hYmxlIHNlcXVlbmNlcywgYW5kIGxpa2VseSBzb21lIGluaXRpYWwgYnVmZmVyIGRlc2NyaXB0b3Igc2V0dXAuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcyB0aGUgZHJpdmVyIGltcGxlbWVudHMuIEkgd2FudCB0byBzZWUgaWYgdGhleSdyZSBoYW5kbGluZyBQSFkgaW5pdGlhbGl6YXRpb24gY29ycmVjdGx5LCBhbmQgaWYgdGhlcmUgYXJlIGFueSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgcGF5IGF0dGVudGlvbiB0by4gQWxzbywgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBzaW1pbGFyIGRyaXZlcnMsIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgcG93ZXItc2F2aW5nIG1lY2hhbmlzbXMgdGhhdCBtaWdodCBiZSBpbml0aWF0ZWQgaGVyZSwgb3IgZGVmZXJyZWQgdG8gbGF0ZXIgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IG1hcCBhY2Nlc3MgYW5kIGFueSBwb3RlbnRpYWwgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkuIFVsdGltYXRlbHksIEknbSBleHBlY3RpbmcgdG8gY29uZmlybSB3aGV0aGVyIGl0IGlzIGEgcm9idXN0IGFuZCBlZmZpY2llbnQgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Nzg2LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTg6NDUuNzQ1Mzg4ODg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2ODY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc0MDcsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc0MDc6XFx0c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuNzQwODpcXHR7XFxuNzQwOTpcXHRcXHRpbnQgcmV0O1xcbjc0MTA6XFx0XFxuNzQxMTpcXHRcXHQvKiBkd21hYy1zdW44aSBvbmx5IHdvcmsgaW4gY2hhaW4gbW9kZSAqL1xcbjc0MTI6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RNTUFDX0ZMQUdfSEFTX1NVTjhJKVxcbjc0MTM6XFx0XFx0XFx0Y2hhaW5fbW9kZSA9IDE7XFxuNzQxNDpcXHRcXHRwcml2LVxcdTAwM2VjaGFpbl9tb2RlID0gISFjaGFpbl9tb2RlO1xcbjc0MTU6XFx0XFxuNzQxNjpcXHRcXHQvKiBJbml0aWFsaXplIEhXIEludGVyZmFjZSAqL1xcbjc0MTc6XFx0XFx0cmV0ID0gc3RtbWFjX2h3aWZfaW5pdChwcml2KTtcXG43NDE4OlxcdFxcdGlmIChyZXQpXFxuNzQxOTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjc0MjA6XFx0XFxuNzQyMTpcXHRcXHQvKiBHZXQgdGhlIEhXIGNhcGFiaWxpdHkgKG5ldyBHTUFDIG5ld2VyIHRoYW4gMy41MGEpICovXFxuNzQyMjpcXHRcXHRwcml2LVxcdTAwM2Vod19jYXBfc3VwcG9ydCA9IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMocHJpdik7XFxuNzQyMzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaHdfY2FwX3N1cHBvcnQpIHtcXG43NDI0OlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIkRNQSBIVyBjYXBhYmlsaXR5IHJlZ2lzdGVyIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuNzQyNTpcXHRcXG43NDI2OlxcdFxcdFxcdC8qIFdlIGNhbiBvdmVycmlkZSBzb21lIGdtYWMvZG1hIGNvbmZpZ3VyYXRpb24gZmllbGRzOiBlLmcuXFxuNzQyNzpcXHRcXHRcXHQgKiBlbmhfZGVzYywgdHhfY29lIChlLmcuIHRoYXQgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZVxcbjc0Mjg6XFx0XFx0XFx0ICogcGxhdGZvcm0pIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSBIVyBjYXBhYmlsaXR5XFxuNzQyOTpcXHRcXHRcXHQgKiByZWdpc3RlciAoaWYgc3VwcG9ydGVkKS5cXG43NDMwOlxcdFxcdFxcdCAqL1xcbjc0MzE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZW5oX2Rlc2MgPSBwcml2LVxcdTAwM2VkbWFfY2FwLmVuaF9kZXNjO1xcbjc0MzI6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcG10ID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5wbXRfcmVtb3RlX3dha2VfdXAgXFx1MDAyNlxcdTAwMjZcXG43NDMzOlxcdFxcdFxcdFxcdFxcdCEocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19VU0VfUEhZX1dPTCk7XFxuNzQzNDpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5oYXNoX3RiX3N6KSB7XFxuNzQzNTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlbXVsdGljYXN0X2ZpbHRlcl9iaW5zID1cXG43NDM2OlxcdFxcdFxcdFxcdFxcdFxcdChCSVQocHJpdi1cXHUwMDNlZG1hX2NhcC5oYXNoX3RiX3N6KSBcXHUwMDNjXFx1MDAzYyA1KTtcXG43NDM3OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VtY2FzdF9iaXRzX2xvZzIgPVxcbjc0Mzg6XFx0XFx0XFx0XFx0XFx0XFx0aWxvZzIocHJpdi1cXHUwMDNlaHctXFx1MDAzZW11bHRpY2FzdF9maWx0ZXJfYmlucyk7XFxuNzQzOTpcXHRcXHRcXHR9XFxuNzQ0MDpcXHRcXG43NDQxOlxcdFxcdFxcdC8qIFRYQ09FIGRvZXNuJ3Qgd29yayBpbiB0aHJlc2ggRE1BIG1vZGUgKi9cXG43NDQyOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vmb3JjZV90aHJlc2hfZG1hX21vZGUpXFxuNzQ0MzpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9jb2UgPSBmYWxzZTtcXG43NDQ0OlxcdFxcdFxcdGVsc2VcXG43NDQ1OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X2NvZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAudHhfY29lO1xcbjc0NDY6XFx0XFxuNzQ0NzpcXHRcXHRcXHQvKiBJbiBjYXNlIG9mIEdNQUM0IHJ4X2NvZSBpcyBmcm9tIEhXIGNhcCByZWdpc3Rlci4gKi9cXG43NDQ4OlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAucnhfY29lO1xcbjc0NDk6XFx0XFxuNzQ1MDpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9jb2VfdHlwZTIpXFxuNzQ1MTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUyO1xcbjc0NTI6XFx0XFx0XFx0ZWxzZSBpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9jb2VfdHlwZTEpXFxuNzQ1MzpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUxO1xcbjc0NTQ6XFx0XFxuNzQ1NTpcXHRcXHRcXHRzdG1tYWNfcHJpbnRfYWN0cGh5aWYocHJpdik7XFxuNzQ1NjpcXHRcXHR9IGVsc2Uge1xcbjc0NTc6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiTm8gSFcgRE1BIGZlYXR1cmUgcmVnaXN0ZXIgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDU4OlxcdFxcdH1cXG43NDU5OlxcdFxcbjc0NjA6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZSkge1xcbjc0NjE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXJ4X2NzdW0gPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2U7XFxuNzQ2MjpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJSWCBDaGVja3N1bSBPZmZsb2FkIEVuZ2luZSBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbjc0NjM6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZXN5bm9wc3lzX2lkIFxcdTAwM2MgRFdNQUNfQ09SRV80XzAwKVxcbjc0NjQ6XFx0XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiQ09FIFR5cGUgJWRcXFxcblxcXCIsIHByaXYtXFx1MDAzZWh3LVxcdTAwM2VyeF9jc3VtKTtcXG43NDY1OlxcdFxcdH1cXG43NDY2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9jb2UpXFxuNzQ2NzpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJUWCBDaGVja3N1bSBpbnNlcnRpb24gc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDY4OlxcdFxcbjc0Njk6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBtdCkge1xcbjc0NzA6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiV2FrZS1VcCBPbiBMYW4gc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDcxOlxcdFxcdFxcdGRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUocHJpdi1cXHUwMDNlZGV2aWNlLCAxKTtcXG43NDcyOlxcdFxcdFxcdGRldm1fcG1fc2V0X3dha2VfaXJxKHByaXYtXFx1MDAzZWRldmljZSwgcHJpdi1cXHUwMDNld29sX2lycSk7XFxuNzQ3MzpcXHRcXHR9XFxuNzQ3NDpcXHRcXG43NDc1OlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLm51bWJlcl9yeF9xdWV1ZXMgXFx1MDAyNlxcdTAwMjZcXG43NDc2OlxcdFxcdCAgICBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlIFxcdTAwM2UgcHJpdi1cXHUwMDNlZG1hX2NhcC5udW1iZXJfcnhfcXVldWVzKSB7XFxuNzQ3NzpcXHRcXHRcXHRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXZpY2UsXFxuNzQ3ODpcXHRcXHRcXHRcXHQgXFxcIk51bWJlciBvZiBSeCBxdWV1ZXMgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxcXG5cXFwiLFxcbjc0Nzk6XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X3F1ZXVlc190b191c2UpO1xcbjc0ODA6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfcXVldWVzX3RvX3VzZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAubnVtYmVyX3J4X3F1ZXVlcztcXG43NDgxOlxcdFxcdH1cXG43NDgyOlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLm51bWJlcl90eF9xdWV1ZXMgXFx1MDAyNlxcdTAwMjZcXG43NDgzOlxcdFxcdCAgICBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlIFxcdTAwM2UgcHJpdi1cXHUwMDNlZG1hX2NhcC5udW1iZXJfdHhfcXVldWVzKSB7XFxuNzQ4NDpcXHRcXHRcXHRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXZpY2UsXFxuNzQ4NTpcXHRcXHRcXHRcXHQgXFxcIk51bWJlciBvZiBUeCBxdWV1ZXMgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxcXG5cXFwiLFxcbjc0ODY6XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1ODo0NS43NDU3NjA2MzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwNDM2OTcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgU1RNTUFDIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYHN0bW1hY19od2lmX2luaXRgIGhhcyBiZWVuIGNhbGxlZC4gVGhhdCdzIHdoZXJlIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gaGFwcGVucywgcmlnaHQ/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyouIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB3aGV0aGVyIG9yIG5vdCBpdCdzIGFjdHVhbGx5IGFjY2Vzc2luZyB0aGUgcmVnaXN0ZXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCdzIHJlYWRpbmcgdGhlIGNoaXAncyBJRCBvciBzZXR0aW5nIHVwIHRoZSBoYXJkd2FyZSB3aXRoIGRlZmF1bHQgdmFsdWVzLiBEb2VzIHRoaXMgZnVuY3Rpb24gc3RhcnQgdGhlIFBIWSBhdXRvbmVnb3RpYXRpb24gc2VxdWVuY2U/IElzIGl0IHByb2JpbmcgdGhlIERNQSBlbmdpbmU/IFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQsIGVzdGFibGlzaGluZyBhIGJhc2VsaW5lIG9mIHdoYXQgYWN0aW9ucyBhcmUgYmVpbmcgcGVyZm9ybWVkIGF0IHRoaXMgc3RhZ2UuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgcmVnaXN0ZXIgYWNjZXNzZXMgdG8gZW5zdXJlIHRoZSBkcml2ZXIgaXMgc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgY29ycmVjdGx5IGFuZCB0byBjYXRjaCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBlYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NjcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjUyLjc1MDEzMjkyMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0ODA2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2h3aWZfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTI5ND1zdG1tYWNfaHdpZl9maW5kKGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSwgdTggc25wc3ZlciwgdTggZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMxNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MzE3OmludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzE4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaD03MDE9aW50IHN0bW1hY19yZXNldChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaDo3MDI6aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNzAzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NDA3PXN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDE2LVxcdC8qIEluaXRpYWxpemUgSFcgSW50ZXJmYWNlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NDE3OlxcdHJldCA9IHN0bW1hY19od2lmX2luaXQocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDE4LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjUyLjgwMDYxOTI3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzQ1Mzc2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTVE1NQUMgSGFyZHdhcmUgSW50ZXJmYWNlIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGZvciB0aGlzIFNUTU1BQyBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgc3RtbWFjX2h3aWZfaW5pdGAgZnVuY3Rpb24gbG9jYXRlZCB3aXRoaW4gYGh3aWYuY2AuIFRoaXMgaXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgdGhlIGhhcmR3YXJlJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZHJpdmVyLCBzZXR0aW5nIHVwIHJlZ2lzdGVycywgYW5kIHByZXBhcmluZyB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQgcGFyYW1ldGVycyBpdCB0YWtlcywgd2hhdCBpdCBkb2VzIHdpdGggdGhlbSwgYW5kIGhvdyBpdCBzZXRzIHVwIHRoZSBjb3JlIGhhcmR3YXJlIHN0cnVjdHVyZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWssIGluIHRlcm1zIG9mIHRoZSBkcml2ZXIncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBTVE1NQUMgY29udHJvbGxlci4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGZ1bmN0aW9uIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIzNSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjU2LjkzNTE1OTcwNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNyxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNzpcXHRpbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIDMxODpcXHR7XFxuIDMxOTpcXHRcXHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGU7XFxuIDMyMDpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbiAzMjE6XFx0XFx0c3RydWN0IHN0bW1hY192ZXJzaW9uIHZlcnNpb247XFxuIDMyMjpcXHRcXHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7XFxuIDMyMzpcXHRcXHRib29sIG5lZWRzX3NldHVwID0gdHJ1ZTtcXG4gMzI0OlxcdFxcdGludCByZXQ7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdHN0bW1hY19nZXRfdmVyc2lvbihwcml2LCBcXHUwMDI2dmVyc2lvbik7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdC8qIFNhdmUgSUQgZm9yIGxhdGVyIHVzZSAqL1xcbiAzMjk6XFx0XFx0cHJpdi1cXHUwMDNlc3lub3BzeXNfaWQgPSB2ZXJzaW9uLnNucHN2ZXI7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdFxcdG1hYyA9IGRldm1fa3phbGxvYyhwcml2LVxcdTAwM2VkZXZpY2UsIHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7XFxuIDMzMjpcXHRcXHRpZiAoIW1hYylcXG4gMzMzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHQvKiBDaGVjayBmb3IgSFcgc3BlY2lmaWMgc2V0dXAgZmlyc3QgKi9cXG4gMzM2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtYWNfc2V0dXApIHtcXG4gMzM3OlxcdFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1hY19zZXR1cChwcml2LCBtYWMpO1xcbiAzMzg6XFx0XFx0XFx0aWYgKHJldClcXG4gMzM5OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM0MDpcXHRcXG4gMzQxOlxcdFxcdFxcdG5lZWRzX3NldHVwID0gZmFsc2U7XFxuIDM0MjpcXHRcXHR9XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtYWMtXFx1MDAzZWlycV9jdHJsX2xvY2spO1xcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHQvKiBGYWxsYmFjayB0byBnZW5lcmljIEhXICovXFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xcbiAzNDk6XFx0XFx0ZW50cnkgPSBzdG1tYWNfaHdpZl9maW5kKGNvcmVfdHlwZSwgcHJpdi1cXHUwMDNlc3lub3BzeXNfaWQsIHZlcnNpb24uZGV2X2lkKTtcXG4gMzUwOlxcdFxcdGlmICghZW50cnkpIHtcXG4gMzUxOlxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2aWNlLFxcbiAzNTI6XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBmaW5kIEhXIElGIChpZD0weCV4LCBnbWFjPSVkLyVkKVxcXFxuXFxcIixcXG4gMzUzOlxcdFxcdFxcdFxcdHZlcnNpb24uc25wc3ZlciwgY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQyxcXG4gMzU0OlxcdFxcdFxcdFxcdGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUM0KTtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM1NzpcXHRcXHR9XFxuIDM1ODpcXHRcXG4gMzU5OlxcdFxcdC8qIE9ubHkgdXNlIGdlbmVyaWMgSFcgaGVscGVycyBpZiBuZWVkZWQgKi9cXG4gMzYwOlxcdFxcdG1hYy1cXHUwMDNlZGVzYyA9IG1hYy1cXHUwMDNlZGVzYyA/IDogZW50cnktXFx1MDAzZWRlc2M7XFxuIDM2MTpcXHRcXHRtYWMtXFx1MDAzZWRtYSA9IG1hYy1cXHUwMDNlZG1hID8gOiBlbnRyeS1cXHUwMDNlZG1hO1xcbiAzNjI6XFx0XFx0bWFjLVxcdTAwM2VtYWMgPSBtYWMtXFx1MDAzZW1hYyA/IDogZW50cnktXFx1MDAzZW1hYztcXG4gMzYzOlxcdFxcdG1hYy1cXHUwMDNlcHRwID0gbWFjLVxcdTAwM2VwdHAgPyA6IGVudHJ5LVxcdTAwM2Vod3RpbWVzdGFtcDtcXG4gMzY0OlxcdFxcdG1hYy1cXHUwMDNlbW9kZSA9IG1hYy1cXHUwMDNlbW9kZSA/IDogZW50cnktXFx1MDAzZW1vZGU7XFxuIDM2NTpcXHRcXHRtYWMtXFx1MDAzZXRjID0gbWFjLVxcdTAwM2V0YyA/IDogZW50cnktXFx1MDAzZXRjO1xcbiAzNjY6XFx0XFx0bWFjLVxcdTAwM2VtbWMgPSBtYWMtXFx1MDAzZW1tYyA/IDogZW50cnktXFx1MDAzZW1tYztcXG4gMzY3OlxcdFxcdG1hYy1cXHUwMDNlZXN0ID0gbWFjLVxcdTAwM2Vlc3QgPyA6IGVudHJ5LVxcdTAwM2Vlc3Q7XFxuIDM2ODpcXHRcXHRtYWMtXFx1MDAzZXZsYW4gPSBtYWMtXFx1MDAzZXZsYW4gPyA6IGVudHJ5LVxcdTAwM2V2bGFuO1xcbiAzNjk6XFx0XFxuIDM3MDpcXHRcXHRwcml2LVxcdTAwM2VodyA9IG1hYztcXG4gMzcxOlxcdFxcdHByaXYtXFx1MDAzZWZwZV9jZmcucmVnID0gZW50cnktXFx1MDAzZXJlZ3MuZnBlX3JlZztcXG4gMzcyOlxcdFxcdHByaXYtXFx1MDAzZXB0cGFkZHIgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBlbnRyeS1cXHUwMDNlcmVncy5wdHBfb2ZmO1xcbiAzNzM6XFx0XFx0cHJpdi1cXHUwMDNlbW1jYWRkciA9IHByaXYtXFx1MDAzZWlvYWRkciArIGVudHJ5LVxcdTAwM2VyZWdzLm1tY19vZmY7XFxuIDM3NDpcXHRcXHRtZW1jcHkoXFx1MDAyNnByaXYtXFx1MDAzZXB0cF9jbG9ja19vcHMsIGVudHJ5LVxcdTAwM2VwdHAsXFxuIDM3NTpcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwdHBfY2xvY2tfaW5mbykpO1xcbiAzNzY6XFx0XFxuIDM3NzpcXHRcXHRpZiAoZW50cnktXFx1MDAzZWVzdClcXG4gMzc4OlxcdFxcdFxcdHByaXYtXFx1MDAzZWVzdGFkZHIgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBlbnRyeS1cXHUwMDNlcmVncy5lc3Rfb2ZmO1xcbiAzNzk6XFx0XFxuIDM4MDpcXHRcXHQvKiBFbnRyeSBmb3VuZCAqL1xcbiAzODE6XFx0XFx0aWYgKG5lZWRzX3NldHVwKSB7XFxuIDM4MjpcXHRcXHRcXHRyZXQgPSBlbnRyeS1cXHUwMDNlc2V0dXAocHJpdik7XFxuIDM4MzpcXHRcXHRcXHRpZiAocmV0KVxcbiAzODQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzg1OlxcdFxcdH1cXG4gMzg2OlxcdFxcbiAzODc6XFx0XFx0LyogU2F2ZSBxdWlya3MsIGlmIG5lZWRlZCBmb3IgcG9zdGVyaW9yIHVzZSAqL1xcbiAzODg6XFx0XFx0cHJpdi1cXHUwMDNlaHdpZl9xdWlya3MgPSBlbnRyeS1cXHUwMDNlcXVpcmtzO1xcbiAzODk6XFx0XFxuIDM5MDpcXHRcXHRyZXR1cm4gMDtcXG4gMzkxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTg6NTYuOTM1Mjc2NzA0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjMyNjE5Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTVE1NQUMgVmVyc2lvbiBDaGVjayoqXG5cbkFscmlnaHQsIHRoZSBjb2RlJ3MgY2FsbGluZyBgc3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFx1MDAyNnZlcnNpb24pYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0J3MgZG9pbmcuIExldCdzIGRpZyBpbnRvIHRoYXQgYHN0bW1hY19nZXRfdmVyc2lvbmAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSSdtIGFzc3VtaW5nIHRoaXMgaXMgcHJvYmFibHkgaG93IHRoZSBkcml2ZXIgZmlndXJlcyBvdXQgdGhlIGhhcmR3YXJlIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uLCBvciBhIHN1cHBvcnRlZCBmZWF0dXJlIHNldCBmb3IgdGhlIFNUTU1BQyBFdGhlcm5ldCBjb250cm9sbGVyIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlIGZvciBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIEl0IGlzIG1vc3QgbGlrZWx5IHBhc3NpbmcgYSBwb2ludGVyIHRvIGEgYHZlcnNpb25gIHN0cnVjdCwgZmlsbGluZyBpbiBoYXJkd2FyZS1zcGVjaWZpYyB2ZXJzaW9uIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgYmUgY3J1Y2lhbCBmb3IgdGhlIGRyaXZlcidzIG9wZXJhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkIHByb3Blcmx5LCBhbmQgdGhlIGNvZGUgdGFrZXMgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBiYXNlZCBvbiB0aGUgaWRlbnRpZmllZCBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIEkgZXhwZWN0IHRoaXMgY2FsbCBpcyBmdW5kYW1lbnRhbCBmb3IgdmVyaWZ5aW5nIGNvbXBhdGliaWxpdHkgYW5kIHBvdGVudGlhbGx5IGVuYWJsaW5nIG9yIGRpc2FibGluZyBjZXJ0YWluIGRyaXZlciBmZWF0dXJlcyBiYXNlZCBvbiB0aGUgZGV0ZWN0ZWQgaGFyZHdhcmUuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSByZXR1cm5lZCB2ZXJzaW9uIHN0cnVjdCBpcyB0aGVuIHVzZWQ7IHRoYXQncyB0aGUgbmV4dCBjcml0aWNhbCBwaWVjZSBvZiB0aGlzIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NTIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU5OjA4LjE2Nzg5OTk1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwOTMzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2dldF92ZXJzaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTY9c3RydWN0IHN0bW1hY192ZXJzaW9uIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjE6c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTMxNz1pbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMjY6XFx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFxcdTAwMjZ2ZXJzaW9uKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OTowOC4yMTk5OTg3MDJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMTEzNTE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhbmQgZGV2aWNlIGRyaXZlcnM6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIHRvIGBzdG1tYWNfZ2V0X3ZlcnNpb25gKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhcjogZGl2ZSBpbnRvIHRoZSBgc3RtbWFjX2dldF92ZXJzaW9uYCBmdW5jdGlvbi4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVW5kZXJzdGFuZGluZyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBvZiB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE1BQyBkcml2ZXIgaXMgY3J1Y2lhbCwgaXQncyB0aGUgZm91bmRhdGlvbiBvZiBhbG1vc3QgZXZlcnl0aGluZy4gSXQgdXN1YWxseSBpbnZvbHZlcyByZWFkaW5nIHJlZ2lzdGVycywgbWF5YmUgc29tZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBkcml2ZXIsIGFuZCBmb3JtYXR0aW5nIHRoYXQgZGF0YSBmb3IgdGhlIHVzZXIuIEknbGwgbmVlZCB0byBsb29rIGZvciB3aGVyZSBpdCdzIGRlZmluZWQuIElzIGl0IGEgZGlyZWN0IHJlZ2lzdGVyIHJlYWQsIG9yIGRvZXMgaXQgaW52b2x2ZSBzb21lIG1vcmUgY29tcGxleCBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIGRyaXZlcidzIHJldmlzaW9uLCBmZWF0dXJlIHNldCwgb3IgaGFyZHdhcmUgY29tcGF0aWJpbGl0eT8gSG9wZWZ1bGx5LCBpdCBpcyB3ZWxsIGRvY3VtZW50ZWQ7IG90aGVyd2lzZSBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWdpc3Rlci1sZXZlbCBpbnRlcnByZXRhdGlvbiBvZiBpdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBkZWJ1Z2dpbmcgYW5kIGVuc3VyaW5nIGNvbXBhdGliaWxpdHksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucyBvciBrZXJuZWwgdmVyc2lvbnMuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIGl0J3Mgd29ya2luZyB3aXRoIGFuZCBob3cgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyMzgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OToxMi4yNDExMzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMTpcXHRzdGF0aWMgdm9pZCBzdG1tYWNfZ2V0X3ZlcnNpb24oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbiAgMjI6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxcbiAgMjM6XFx0e1xcbiAgMjQ6XFx0XFx0ZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlO1xcbiAgMjU6XFx0XFx0dW5zaWduZWQgaW50IHZlcnNpb25fb2Zmc2V0O1xcbiAgMjY6XFx0XFx0dTMyIHZlcnNpb247XFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdHZlci1cXHUwMDNlc25wc3ZlciA9IDA7XFxuICAyOTpcXHRcXHR2ZXItXFx1MDAzZWRldl9pZCA9IDA7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9NQUMxMDApXFxuICAzMjpcXHRcXHRcXHRyZXR1cm47XFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDKVxcbiAgMzU6XFx0XFx0XFx0dmVyc2lvbl9vZmZzZXQgPSBHTUFDX1ZFUlNJT047XFxuICAzNjpcXHRcXHRlbHNlXFxuICAzNzpcXHRcXHRcXHR2ZXJzaW9uX29mZnNldCA9IEdNQUM0X1ZFUlNJT047XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdHZlcnNpb24gPSByZWFkbChwcml2LVxcdTAwM2Vpb2FkZHIgKyB2ZXJzaW9uX29mZnNldCk7XFxuICA0MDpcXHRcXHRpZiAodmVyc2lvbiA9PSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU5OjEyLjI0MTI1MDU5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxODM0NTU2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWZXJzaW9uIFJlYWQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UncmUgcHVsbGluZyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbi4gVGhlIGNvZGUgaXMgcmVhZGluZyBmcm9tIGBwcml2LVx1MDAzZWlvYWRkcmAgb2Zmc2V0IGJ5IGB2ZXJzaW9uX29mZnNldGAuIFN0YW5kYXJkIHN0dWZmLiBCdXQgdGhlbiwgSSdtIHRoaW5raW5nLCB3aGF0IGhhcHBlbnMgd2l0aCBhIGR1bW15IGRldmljZT8gIGByZWFkbGAgY291bGQgY291Z2ggdXAgZWl0aGVyIGAweGZmZmZmZmZmYCBvciBhIHN0cmFpZ2h0IGAwYCwgZGVwZW5kaW5nIG9uIGhvdyB0aGUgbWVtb3J5IG1hcHBpbmcncyBzZXQgdXAuIFRoZSByZWFsbHkgaW50ZXJlc3Rpbmcgc2NlbmFyaW8gaXMgaWYgd2UgZ2V0IGEgYDBgLiBUaGF0IGxpa2VseSBtZWFucyB3ZSdsbCBmYWlsIHRvIElEIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gTGV0J3MgZGlnIGludG8gd2hhdCBoYXBwZW5zIHNwZWNpZmljYWxseSBpZiBgdmVyc2lvbiA9PSAwYC4gV2UndmUgZ290IHRvIGNvdmVyIGFsbCB0aGUgYmFzZXMgdG8gbWFrZSB0aGlzIHRydWx5IHJvYnVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MTMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU5OjE5LjQyNDcwOTE3MloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdGlmICh2ZXJzaW9uID09IDApIHtcXG4gIDQxOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlZlcnNpb24gSUQgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuICA0MjpcXHRcXHRcXHRyZXR1cm47XFxuICA0MzpcXHRcXHR9XFxuICA0NDpcXHRcXG4gIDQ1OlxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlVzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XFxcXG5cXFwiLFxcbiAgNDY6XFx0XFx0XFx0IEZJRUxEX0dFVChEV01BQ19VU0VSVkVSLCB2ZXJzaW9uKSxcXG4gIDQ3OlxcdFxcdFxcdCBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbikpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHR2ZXItXFx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XFxuICA1MDpcXHRcXHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXFxuICA1MTpcXHRcXHRcXHR2ZXItXFx1MDAzZWRldl9pZCA9IEZJRUxEX0dFVChEV01BQ19VU0VSVkVSLCB2ZXJzaW9uKTtcXG4gIDUyOlxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0c3RhdGljIHZvaWQgc3RtbWFjX2R3bWFjX21vZGVfcXVpcmsoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0c3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjID0gcHJpdi1cXHUwMDNlaHc7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdGlmIChwcml2LVxcdTAwM2VjaGFpbl9tb2RlKSB7XFxuICA1OTpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJDaGFpbiBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OToxOS40MjQ4MzQ2MjJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNTg0OTIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBzbmlwcGV0LCBkZWxpdmVyZWQgYXMgaWYgaXQncyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRlY29kaW5nIHRoZSBWZXJzaW9uIENoZWNrKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQ6IGBpZiB2ZXJzaW9uID09IDBgLiBTbywgaWYgdGhlIHNvZnR3YXJlJ3MgdmVyc2lvbiBpcyBhdCBpdHMgaW5pdGlhbCBzdGF0ZSwgd2hpY2ggSSB1c3VhbGx5IHJlcHJlc2VudCB3aXRoICcwJywgdGhlbiB0aGlzIHZhcmlhYmxlLCBgdmVyLVx1MDAzZXNucHN2ZXJgLCBpcyBhbHNvIGdvaW5nIHRvIGJlIHNldCB0byB6ZXJvLiBUaGF0IG1ha2VzIHNlbnNlLCBrZWVwcyB0aGluZ3MgY29uc2lzdGVudCBmcm9tIHRoZSBzdGFydC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgd2hhdCBoYXBwZW5zIG5leHQuIFdpdGggYHNucHN2ZXJgIGNvbmZpcm1lZCBhcyB6ZXJvLCB0aGUgY29kZSBwcm9jZWVkcyB0byBjYWxsIGBzdG1tYWNfaHdpZl9maW5kYC4gQ3J1Y2lhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCBgc25wc3ZlciA9IDBgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGFzIGBzdG1tYWNfaHdpZl9maW5kYCBsaWtlbHkgdXNlcyB0aGUgYHNucHN2ZXJgIHZhbHVlIHRvIGRldGVybWluZSB3aGljaCBoYXJkd2FyZSBpbnRlcmZhY2UgdG8gYXR0YWNoIHRvLCBvciBwb3NzaWJseSBob3cgdG8gaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgYXBwcm9wcmlhdGVseS4gUGFzc2luZyB6ZXJvIGNvdWxkIG1lYW4gYSBkZWZhdWx0IG9yIGxlZ2FjeSBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIGEgJ2Jlc3QgZ3Vlc3MnIGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyMSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTk6MjQuNDMwNjg3ODQxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk0OlxcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXFxuIDI5NTpcXHR7XFxuIDI5NjpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbiAyOTc6XFx0XFx0aW50IGk7XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdGZvciAoaSA9IEFSUkFZX1NJWkUoc3RtbWFjX2h3KSAtIDE7IGkgXFx1MDAzZT0gMDsgaS0tKSB7XFxuIDMwMDpcXHRcXHRcXHRlbnRyeSA9IFxcdTAwMjZzdG1tYWNfaHdbaV07XFxuIDMwMTpcXHRcXG4gMzAyOlxcdFxcdFxcdGlmIChjb3JlX3R5cGUgIT0gZW50cnktXFx1MDAzZWNvcmVfdHlwZSlcXG4gMzAzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMDQ6XFx0XFx0XFx0LyogVXNlIHN5bm9wc3lzX2lkIHZhciBiZWNhdXNlIHNvbWUgc2V0dXBzIGNhbiBvdmVycmlkZSB0aGlzICovXFxuIDMwNTpcXHRcXHRcXHRpZiAoc25wc3ZlciBcXHUwMDNjIGVudHJ5LVxcdTAwM2VtaW5faWQpXFxuIDMwNjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzA3OlxcdFxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQyBcXHUwMDI2XFx1MDAyNlxcbiAzMDg6XFx0XFx0XFx0ICAgIGRldl9pZCAhPSBlbnRyeS1cXHUwMDNlZGV2X2lkKVxcbiAzMDk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4gMzEyOlxcdFxcdH1cXG4gMzEzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OToyNC40MzA4MjU5MDFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3NzUwMTk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIHRoZSBTTlAgVmVyc2lvbiBhbmQgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIqKlxuXG5BbHJpZ2h0LCBzbyBpZiBJJ20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgdGhlIGN1cnJlbnQgbG9naWMgaXMgKnZlcnkqIHNwZWNpZmljIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBgc25wc3ZlcmAgdmFyaWFibGUgYmVpbmcgZXF1YWwgdG8gemVyby4gSXQgbWVhbnMgdGhlIGZpbHRlcmluZyB3aWxsIGJlIGluY3JlZGlibHkgc3RyaWN0LCBvbmx5IHB1bGxpbmcgaW4gZW50cmllcyB3aGVyZSBgbWluX2lkYCBpcyAqYWxzbyogemVyby4gVGhhdCdzIGEgY3JpdGljYWwgcG9pbnQgdG8gbm90ZSwgYXMgaXQgZHJhc3RpY2FsbHkgbGltaXRzIHRoZSBwb3RlbnRpYWwgbWF0Y2hlcyBpbiB0aGUgZGF0YWJhc2UuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGludGVycHJldGluZyB0aGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkgb3IgcHJvY2VzcyB0aGF0J3MgdXNpbmcgdGhpcyBjb25kaXRpb24uIEl04oCZcyBlc3NlbnRpYWxseSBhIFwic3RyaWN0IG1hdGNoXCIgc2NlbmFyaW8uXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHN0bW1hY19od2AgYXJyYXkuIEknbSBhc3N1bWluZyB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIGZvciB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE1BQyBkcml2ZXIsIGJ1dCBJIG5lZWQgdG8gZGl2ZSBpbiBhbmQgY29uZmlybSB0aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIGlzIHJlcHJlc2VudGVkIGF0IHRoaXMgbGV2ZWwsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIGFuZCBob3cgaXQncyBoYW5kbGVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgY29ycmVjdC4gTGV04oCZcyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNDksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU5OjMxLjAwODMzMDc4MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzODM1MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19od1xcXFxbXFxcXF1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0xMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMTI3LVxcdGludCAoKnF1aXJrcykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MTI4On0gc3RtbWFjX2h3W10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTEyOS1cXHQvKiBOT1RFOiBOZXcgSFcgdmVyc2lvbnMgc2hhbGwgZ28gdG8gdGhlIGVuZCBvZiB0aGlzIHRhYmxlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU5OjMxLjMxMjE3MjgxM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDUzMTAwMzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHN0bW1hY19od2AgQXJyYXkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc3RtbWFjX2h3YCBhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSwgcHVycG9zZSwgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIFNUTU1BQyBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyZWF0IGl0IGFzIGEgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIsIGEgY29sbGVjdGlvbiBvZiByZWdpc3RlcnMsIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLlxuXG5JJ20gbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCBwb3RlbnRpYWwgdXNlIGNhc2VzLiBJcyB0aGlzIGEgbG9vay11cCB0YWJsZSBmb3IgcmVnaXN0ZXIgb2Zmc2V0cz8gQXJlIHRoZXJlIGJpdGZpZWxkIGRlZmluaXRpb25zIGluIGhlcmUsIHBlcmhhcHMgb3JnYW5pemVkIGJ5IGZ1bmN0aW9uYWwgYmxvY2sgd2l0aGluIHRoZSBNQUM/IEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgRE1BIGNoYW5uZWwgY29uZmlndXJhdGlvbiwgTUFDIGFkZHJlc3MgcmVnaXN0ZXJzLCBpbnRlcnJ1cHQgY29udHJvbCwgYW5kIHN0YXRpc3RpY3MgY291bnRlcnMg4oCTIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHMuIEnigJltIGV4cGVjdGluZyBhIG1peCBvZiByYXcgcmVnaXN0ZXIgYWRkcmVzc2VzIChvciBzeW1ib2xpYyByZXByZXNlbnRhdGlvbnMpLCBtYXNrIHZhbHVlcyBmb3IgYml0ZmllbGQgbWFuaXB1bGF0aW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBkZWZhdWx0IHZhbHVlcyBvciBpbml0aWFsaXphdGlvbiBzZXR0aW5ncy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYXJyYXkgZWxlbWVudHMsIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcyBvciBncm91cGluZ3MgdGhhdCBpbXBseSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBjb25maWd1cmF0aW9ucy4gVGhlIG5hbWluZyBjb252ZW50aW9uIGhlcmUgd2lsbCBiZSBjcml0aWNhbC4gSWYgSSBzZWUgY29uc2lzdGVudCBwcmVmaXhlcyBvciBzdWZmaXhlcywgdGhhdCBjb3VsZCByZXZlYWwgdmFsdWFibGUgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXIgb3JnYW5pemF0aW9uIGFuZCBvdmVyYWxsIG1vZHVsZSBpbnRlcmFjdGlvbi4gVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZSBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIGFuZCBjb250cm9scyB0aGUgU1RNTUFDIGhhcmR3YXJlLiBUaGlzIGFycmF5IGhvbGRzIHRoZSBrZXkgdG8gdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uLCBzbyBsZXQncyBzdGFydCByZWFkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU0MSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU5OjM3Ljc2NTI3NjgyN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyODpcXHR9IHN0bW1hY19od1tdID0ge1xcbiAxMjk6XFx0XFx0LyogTk9URTogTmV3IEhXIHZlcnNpb25zIHNoYWxsIGdvIHRvIHRoZSBlbmQgb2YgdGhpcyB0YWJsZSAqL1xcbiAxMzA6XFx0XFx0e1xcbiAxMzE6XFx0XFx0XFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfTUFDMTAwLFxcbiAxMzI6XFx0XFx0XFx0Lm1pbl9pZCA9IDAsXFxuIDEzMzpcXHRcXHRcXHQucmVncyA9IHtcXG4gMTM0OlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX0dNQUMzX1hfT0ZGU0VULFxcbiAxMzU6XFx0XFx0XFx0XFx0Lm1tY19vZmYgPSBNTUNfR01BQzNfWF9PRkZTRVQsXFxuIDEzNjpcXHRcXHRcXHR9LFxcbiAxMzc6XFx0XFx0XFx0LmRlc2MgPSBOVUxMLFxcbiAxMzg6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd21hYzEwMF9kbWFfb3BzLFxcbiAxMzk6XFx0XFx0XFx0Lm1hYyA9IFxcdTAwMjZkd21hYzEwMF9vcHMsXFxuIDE0MDpcXHRcXHRcXHQuaHd0aW1lc3RhbXAgPSBcXHUwMDI2ZHdtYWMxMDAwX3B0cCxcXG4gMTQxOlxcdFxcdFxcdC5wdHAgPSBcXHUwMDI2ZHdtYWMxMDAwX3B0cF9jbG9ja19vcHMsXFxuIDE0MjpcXHRcXHRcXHQubW9kZSA9IE5VTEwsXFxuIDE0MzpcXHRcXHRcXHQudGMgPSBOVUxMLFxcbiAxNDQ6XFx0XFx0XFx0Lm1tYyA9IFxcdTAwMjZkd21hY19tbWNfb3BzLFxcbiAxNDU6XFx0XFx0XFx0LnNldHVwID0gZHdtYWMxMDBfc2V0dXAsXFxuIDE0NjpcXHRcXHRcXHQucXVpcmtzID0gc3RtbWFjX2R3bWFjMV9xdWlya3MsXFxuIDE0NzpcXHRcXHR9LCB7XFxuIDE0ODpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDLFxcbiAxNDk6XFx0XFx0XFx0Lm1pbl9pZCA9IDAsXFxuIDE1MDpcXHRcXHRcXHQucmVncyA9IHtcXG4gMTUxOlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX0dNQUMzX1hfT0ZGU0VULFxcbiAxNTI6XFx0XFx0XFx0XFx0Lm1tY19vZmYgPSBNTUNfR01BQzNfWF9PRkZTRVQsXFxuIDE1MzpcXHRcXHRcXHR9LFxcbiAxNTQ6XFx0XFx0XFx0LmRlc2MgPSBOVUxMLFxcbiAxNTU6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd21hYzEwMDBfZG1hX29wcyxcXG4gMTU2OlxcdFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHdtYWMxMDAwX29wcyxcXG4gMTU3OlxcdFxcdFxcdC5od3RpbWVzdGFtcCA9IFxcdTAwMjZkd21hYzEwMDBfcHRwLFxcbiAxNTg6XFx0XFx0XFx0LnB0cCA9IFxcdTAwMjZkd21hYzEwMDBfcHRwX2Nsb2NrX29wcyxcXG4gMTU5OlxcdFxcdFxcdC5tb2RlID0gTlVMTCxcXG4gMTYwOlxcdFxcdFxcdC50YyA9IE5VTEwsXFxuIDE2MTpcXHRcXHRcXHQubW1jID0gXFx1MDAyNmR3bWFjX21tY19vcHMsXFxuIDE2MjpcXHRcXHRcXHQuc2V0dXAgPSBkd21hYzEwMDBfc2V0dXAsXFxuIDE2MzpcXHRcXHRcXHQucXVpcmtzID0gc3RtbWFjX2R3bWFjMV9xdWlya3MsXFxuIDE2NDpcXHRcXHR9LCB7XFxuIDE2NTpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNCxcXG4gMTY2OlxcdFxcdFxcdC5taW5faWQgPSAwLFxcbiAxNjc6XFx0XFx0XFx0LnJlZ3MgPSB7XFxuIDE2ODpcXHRcXHRcXHRcXHQucHRwX29mZiA9IFBUUF9HTUFDNF9PRkZTRVQsXFxuIDE2OTpcXHRcXHRcXHRcXHQubW1jX29mZiA9IE1NQ19HTUFDNF9PRkZTRVQsXFxuIDE3MDpcXHRcXHRcXHRcXHQuZXN0X29mZiA9IEVTVF9HTUFDNF9PRkZTRVQsXFxuIDE3MTpcXHRcXHRcXHR9LFxcbiAxNzI6XFx0XFx0XFx0LmRlc2MgPSBcXHUwMDI2ZHdtYWM0X2Rlc2Nfb3BzLFxcbiAxNzM6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd21hYzRfZG1hX29wcyxcXG4gMTc0OlxcdFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHdtYWM0X29wcyxcXG4gMTc1OlxcdFxcdFxcdC52bGFuID0gXFx1MDAyNmR3bWFjX3ZsYW5fb3BzLFxcbiAxNzY6XFx0XFx0XFx0Lmh3dGltZXN0YW1wID0gXFx1MDAyNnN0bW1hY19wdHAsXFxuIDE3NzpcXHRcXHRcXHQucHRwID0gXFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OTozNy43NjUzNzkyNzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc0MTI1NjQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNOUFNWIERyaXZlciBDb3JlIE1hdGNoaW5nIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIgbG9naWMsIGFuZCBpdCBzZWVtcyBsaWtlIGlmIGBzbnBzdmVyYCBpcyB6ZXJvLCB0aGVuIHdlJ3JlIGdvaW5nIHRvIG1hdGNoIGBEV01BQ19DT1JFX0dNQUM0YCB0byBhIGBtaW5faWRgIG9mIHplcm8gKG9yIGEgc2ltaWxhciBjb25zdGFudCwgYmFzZWQgb24gYGNvcmVfdHlwZWApLiBUaGF0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNvbXBhcmlzb24uIEJ1dCwgaG9sZCBvbiBhIHNlYy4uLndoZXJlIGRvZXMgYGNvcmVfdHlwZWAgYWN0dWFsbHkgY29tZSBmcm9tPyBJIGtub3cgaXQncyBiZWluZyBhY2Nlc3NlZCB0aHJvdWdoIGBwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlYC4gTmVlZCB0byB0cmFjZSB0aGF0IGJhY2suLi5cblxuUmlnaHQuIEl0IGxvb2tzIGxpa2UgYHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGVgIGlzIGluaXRpYWxpemVkIHdpdGhpbiBgc3RtbWFjX3BjaV9wcm9iZWAsIHVzaW5nIGBpbmZvLVx1MDAzZXNldHVwKHBkZXYsIHBsYXQpYC4gVGhlIHBsYXRmb3JtIGRhdGEgaXMgdGhlbiBzZXR1cCBmcm9tIHdpdGhpbiB0aGUgcHJvYmUgZnVuY3Rpb24uIFNvIGl0IGxvb2tzIGxpa2UgdGhlIGBpbmZvLVx1MDAzZXNldHVwYCBmdW5jdGlvbiBpcyBrZXkgdG8gdGhlIG92ZXJhbGwgZGV2aWNlIHNldHVwLCBhbmQgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBzdG1tYWNfcGNpX2luZm9gIHNldHVwIGZ1bmN0aW9ucyB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cgYGNvcmVfdHlwZWAgZ2V0cyBhc3NpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3OTAsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OTo0NS41MDY2Mzc5NjRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjgzMDkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfcGNpX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTk6c3RydWN0IHN0bW1hY19wY2lfaW5mbyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwLVxcdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0zMz1zdGF0aWMgaW50IHN0bW1hY19kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHN0bW1hY19wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNTEtXFx0LnNldHVwID0gc3RtbWFjX2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz01ND1zdGF0aWMgaW50IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTAyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHNucHNfZ21hYzVfcGNpX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMy1cXHQuc2V0dXAgPSBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMTg9c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEyMTpcXHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMi1cXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA0OlxcdHsgUENJX0RFVklDRV9EQVRBKFNUTU1BQywgU1RNTUFDLCBcXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDU6XFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNSUNSTywgTUFDLCBcXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDYtXFx0eyBQQ0lfREVWSUNFX0RBVEEoU1lOT1BTWVMsIEdNQUM1X0lELCBcXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTk6NDUuNjgzNDgzNTM4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MzUwMjMwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHdlbGwtdmVyc2VkIGluIHRoZSBzdWJqZWN0IG1hdHRlcjpcblxuKipDaGVja2luZyBgc25wc19nbWFjNV9kZWZhdWx0X2RhdGFgKipcblxuQWxyaWdodCwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGFuYWx5c2lzIG9yIG1vZGVsaW5nLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGZvdW5kYXRpb25hbCBkYXRhc2V0LCBgc25wc19nbWFjNV9kZWZhdWx0X2RhdGFgLCBpcyBpbiBvcmRlci4gVGhpcyBpcyB0aGUgY29ybmVyc3RvbmUuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpdHMgaW50ZWdyaXR5IGFuZCBzdWl0YWJpbGl0eS4gSSdtIHRoaW5raW5nOiBpcyBpdCB0aGUgY29ycmVjdCB2ZXJzaW9uPyBBcmUgdGhlIGV4cGVjdGVkIGNvbHVtbnMgcHJlc2VudCBhbmQgY29ycmVjdGx5IGxhYmVsZWQ/IEFyZSB0aGUgZGF0YSB0eXBlcyBjb25zaXN0ZW50IHdpdGggd2hhdCBJJ20gZXhwZWN0aW5nIGZvciB0aGUgdmFyaWFibGVzIHdpdGhpbj8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGdsYXJpbmcgaXNzdWVzLCBtaXNzaW5nIHZhbHVlcyB0aGF0IG5lZWQgaW1tZWRpYXRlIGF0dGVudGlvbiwgb3IgdW5leHBlY3RlZCBvdXRsaWVycyB0aGF0IHdvdWxkIHRocm93IG9mZiBhbnkgZG93bnN0cmVhbSBhbmFseXNlcz8gRXNzZW50aWFsbHksIGlzIHRoZSBkYXRhIGNsZWFuLCBjb21wbGV0ZSwgYW5kIGluIGEgZm9ybWF0IHRoYXQncyByZWFkeSBmb3IgbWUgdG8gZ2V0IHRvIHRoZSBtZWF0IG9mIHRoaW5ncz8gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9ucyBJJ3ZlIG1hZGUgYWJvdXQgdGhpcyBkYXRhc2V0IGFyZSBhY3R1YWxseSBjb3JyZWN0LiBHb3R0YSBzdGFydCB3aXRoIGEgc29saWQgZm91bmRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwNjksIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OTo1MS40MTg1MDg3NDRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU0OlxcdHN0YXRpYyBpbnQgc25wc19nbWFjNV9kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuICA1NTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpXFxuICA1NjpcXHR7XFxuICA1NzpcXHRcXHRpbnQgaTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0cGxhdC1cXHUwMDNlY2xrX2NzciA9IFNUTU1BQ19DU1JfMjUwXzMwME07XFxuICA2MDpcXHRcXHRwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgPSBEV01BQ19DT1JFX0dNQUM0O1xcbiAgNjE6XFx0XFx0cGxhdC1cXHUwMDNlZm9yY2Vfc2ZfZG1hX21vZGUgPSB0cnVlO1xcbiAgNjI6XFx0XFx0cGxhdC1cXHUwMDNlZmxhZ3MgfD0gU1RNTUFDX0ZMQUdfVFNPX0VOO1xcbiAgNjM6XFx0XFx0cGxhdC1cXHUwMDNlcG10ID0gdHJ1ZTtcXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0LyogU2V0IGRlZmF1bHQgbnVtYmVyIG9mIFJYIGFuZCBUWCBxdWV1ZXMgdG8gdXNlICovXFxuICA2NjpcXHRcXHRwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlID0gNDtcXG4gIDY3OlxcdFxcdHBsYXQtXFx1MDAzZXJ4X3F1ZXVlc190b191c2UgPSA0O1xcbiAgNjg6XFx0XFxuICA2OTpcXHRcXHRwbGF0LVxcdTAwM2V0eF9zY2hlZF9hbGdvcml0aG0gPSBNVExfVFhfQUxHT1JJVEhNX1dSUjtcXG4gIDcwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlOyBpKyspIHtcXG4gIDcxOlxcdFxcdFxcdHBsYXQtXFx1MDAzZXR4X3F1ZXVlc19jZmdbaV0ubW9kZV90b191c2UgPSBNVExfUVVFVUVfRENCO1xcbiAgNzI6XFx0XFx0XFx0cGxhdC1cXHUwMDNldHhfcXVldWVzX2NmZ1tpXS53ZWlnaHQgPSAyNTtcXG4gIDczOlxcdFxcdFxcdGlmIChpIFxcdTAwM2UgMClcXG4gIDc0OlxcdFxcdFxcdFxcdHBsYXQtXFx1MDAzZXR4X3F1ZXVlc19jZmdbaV0udGJzX2VuID0gMTtcXG4gIDc1OlxcdFxcdH1cXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0cGxhdC1cXHUwMDNlcnhfc2NoZWRfYWxnb3JpdGhtID0gTVRMX1JYX0FMR09SSVRITV9TUDtcXG4gIDc4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlOyBpKyspXFxuICA3OTpcXHRcXHRcXHRwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfY2ZnW2ldLm1vZGVfdG9fdXNlID0gTVRMX1FVRVVFX0RDQjtcXG4gIDgwOlxcdFxcbiAgODE6XFx0XFx0cGxhdC1cXHUwMDNlYnVzX2lkID0gMTtcXG4gIDgyOlxcdFxcdHBsYXQtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfR01JSTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0cGxhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlcGJsID0gMzI7XFxuICA4NTpcXHRcXHRwbGF0LVxcdTAwM2VkbWFfY2ZnLVxcdTAwM2VwYmx4OCA9IHRydWU7XFxuICA4NjpcXHRcXG4gIDg3OlxcdFxcdC8qIEF4aSBDb25maWd1cmF0aW9uICovXFxuICA4ODpcXHRcXHRwbGF0LVxcdTAwM2VheGkgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpwbGF0LVxcdTAwM2VheGkpLCBHRlBfS0VSTkVMKTtcXG4gIDg5OlxcdFxcdGlmICghcGxhdC1cXHUwMDNlYXhpKVxcbiAgOTA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdHBsYXQtXFx1MDAzZWF4aS1cXHUwMDNlYXhpX3dyX29zcl9sbXQgPSAzMTtcXG4gIDkzOlxcdFxcdHBsYXQtXFx1MDAzZWF4aS1cXHUwMDNlYXhpX3JkX29zcl9sbXQgPSAzMTtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0cGxhdC1cXHUwMDNlYXhpLVxcdTAwM2VheGlfZmIgPSBmYWxzZTtcXG4gIDk2OlxcdFxcdHBsYXQtXFx1MDAzZWF4aS1cXHUwMDNlYXhpX2JsZW5fcmVndmFsID0gRE1BX0FYSV9CTEVONCB8IERNQV9BWElfQkxFTjggfFxcbiAgOTc6XFx0XFx0XFx0XFx0XFx0ICAgICBETUFfQVhJX0JMRU4xNiB8IERNQV9BWElfQkxFTjMyO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRyZXR1cm4gMDtcXG4gMTAwOlxcdH1cXG4gMTAxOlxcdFxcbiAxMDI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc25wc19nbWFjNV9wY2lfaW5mbyA9IHtcXG4gMTAzOlxcdFxcdC5zZXR1cCA9IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OTo1MS40MTg1OTYzMzRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM1OTgwOTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERXTUFDIENvcmUgYW5kIFRDIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBpZiB0aGUgYGNvcmVfdHlwZWAgaXMgY29uZmlybWVkIGFzIGBEV01BQ19DT1JFX0dNQUM0YCBhbmQgdGhlIGBzbnBzdmVyYCBpcyB6ZXJvLCB3ZSdyZSBkZWZpbml0ZWx5IGhpdHRpbmcgdGhhdCBgRFdNQUNfQ09SRV9HTUFDNGAgZW50cnkgd2l0aCB0aGUgYG1pbl9pZCA9IDBgLiBSaWdodCwgc28sIHRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgcGFydGljdWxhciBlbnRyeSBpcyBsaW5rZWQgdG8gYC50YyA9IFx1MDAyNmR3bWFjNF90Y19vcHNgLiBIbW1tLCBob2xkIG9uIGEgc2Vjb25kLi4udGhpcyBwYXRjaCBpcyBhY3R1YWxseSAqbW9kaWZ5aW5nKiBib3RoIGBkd21hYzRfdGNfb3BzYCBhbmQgYGR3bWFjNTEwX3RjX29wc2AhIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGBkd21hYzRfdGNfb3BzYCBzcGVjaWZpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjIwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTk6NTYuNzc4NDA3NzEyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDM1NDgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkd21hYzRfdGNfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTE3OC1cXHRcXHQubW9kZSA9IE5VTEwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjE3OTpcXHRcXHQudGMgPSBcXHUwMDI2ZHdtYWM0X3RjX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMTgwLVxcdFxcdC5tbWMgPSBcXHUwMDI2ZHdtYWNfbW1jX29wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaD02OTQ9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfb3BzIGR3bWFjNTEwX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg6Njk1OmV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaC02OTYtZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNTEwX3RjX29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTEzOTI9c3RhdGljIGludCB0Y19zZXR1cF9tcXByaW9fdW5pbXBsZW1lbnRlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMzk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjE0MDA6Y29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM0X3RjX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xNDAxLVxcdC5pbml0ID0gdGNfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTk6NTYuODI4NzY3NzUxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTA3ODI2OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVHJhZmZpYyBDb250cm9sIEluaXRpYWxpemF0aW9uIC0gRGlnZ2luZyBpbnRvIHRoZSBEV01BQyBEcml2ZXIqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHRyYWZmaWMgY29udHJvbCBhbmQgaXQgbG9va3MgbGlrZSBgZHdtYWM0X3RjX29wc2AgaXMgdGhlIGtleSBpbnRlcmZhY2UgaGVyZS4gVGhhdCdzIGdvb2QsIGl0IHN1Z2dlc3RzIHdlJ3JlIHVzaW5nIGEgc3BlY2lmaWMgc2V0IG9mIHRyYWZmaWMgY29udHJvbCBvcGVyYXRpb25zLiBUaGF0IGluIHR1cm4gaW1wbGllcyB0aGF0IGBuZG9fc2V0dXBfdGNgIGlzIGludm9sdmVkLiBPa2F5LCB0aGUgbmF0dXJhbCBmb2xsb3ctb24gaXMgdGhhdCBgc3RtbWFjX3NldHVwX3RjYCB3aWxsIGJlIGNhbGxlZCwgd2hpY2ggdWx0aW1hdGVseSBzaG91bGQgbGVhZCB0byBgc3RtbWFjX3RjX3NldHVwX2V0c2AuIFRoYXQncyB0aGUgZXhwZWN0ZWQgY2hhaW4gb2YgZXZlbnRzLlxuXG5CdXQsIGhhbmcgb24gYSBzZWNvbmQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBoYW5kbGVzIGVkZ2UgY2FzZXMgcHJvcGVybHkuIFdoYXQgYWJvdXQgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBQQ0kgZGV2aWNlIGlzIGEgZHVtbXkgb3Igc3R1Yj8gRG9lcyB0aGUgZHJpdmVyIHByb2JlIGNvbnRpbnVlLCBvciBkb2VzIGl0IGZhaWwgZ3JhY2VmdWxseT8gSSBzaG91bGQgcmVhbGx5IGRvdWJsZS1jaGVjayBgc3RtbWFjX2h3X2luaXRgIGFnYWluLCBqdXN0IHRvIHZlcmlmeSB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBsb2dpYyBhY2NvdW50cyBmb3IgdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgZHJpdmVyIGlzIHJvYnVzdCBpbiB0aG9zZSBzcGVjaWZpYyBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMDEsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMDoxMi43MzY1OTcxMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDIxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3NDIxOlxcdFxcdC8qIEdldCB0aGUgSFcgY2FwYWJpbGl0eSAobmV3IEdNQUMgbmV3ZXIgdGhhbiAzLjUwYSkgKi9cXG43NDIyOlxcdFxcdHByaXYtXFx1MDAzZWh3X2NhcF9zdXBwb3J0ID0gc3RtbWFjX2dldF9od19mZWF0dXJlcyhwcml2KTtcXG43NDIzOlxcdFxcdGlmIChwcml2LVxcdTAwM2Vod19jYXBfc3VwcG9ydCkge1xcbjc0MjQ6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiRE1BIEhXIGNhcGFiaWxpdHkgcmVnaXN0ZXIgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDI1OlxcdFxcbjc0MjY6XFx0XFx0XFx0LyogV2UgY2FuIG92ZXJyaWRlIHNvbWUgZ21hYy9kbWEgY29uZmlndXJhdGlvbiBmaWVsZHM6IGUuZy5cXG43NDI3OlxcdFxcdFxcdCAqIGVuaF9kZXNjLCB0eF9jb2UgKGUuZy4gdGhhdCBhcmUgcGFzc2VkIHRocm91Z2ggdGhlXFxuNzQyODpcXHRcXHRcXHQgKiBwbGF0Zm9ybSkgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhlIEhXIGNhcGFiaWxpdHlcXG43NDI5OlxcdFxcdFxcdCAqIHJlZ2lzdGVyIChpZiBzdXBwb3J0ZWQpLlxcbjc0MzA6XFx0XFx0XFx0ICovXFxuNzQzMTpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VlbmhfZGVzYyA9IHByaXYtXFx1MDAzZWRtYV9jYXAuZW5oX2Rlc2M7XFxuNzQzMjpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwbXQgPSBwcml2LVxcdTAwM2VkbWFfY2FwLnBtdF9yZW1vdGVfd2FrZV91cCBcXHUwMDI2XFx1MDAyNlxcbjc0MzM6XFx0XFx0XFx0XFx0XFx0IShwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX1VTRV9QSFlfV09MKTtcXG43NDM0OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLmhhc2hfdGJfc3opIHtcXG43NDM1OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VtdWx0aWNhc3RfZmlsdGVyX2JpbnMgPVxcbjc0MzY6XFx0XFx0XFx0XFx0XFx0XFx0KEJJVChwcml2LVxcdTAwM2VkbWFfY2FwLmhhc2hfdGJfc3opIFxcdTAwM2NcXHUwMDNjIDUpO1xcbjc0Mzc6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZW1jYXN0X2JpdHNfbG9nMiA9XFxuNzQzODpcXHRcXHRcXHRcXHRcXHRcXHRpbG9nMihwcml2LVxcdTAwM2Vody1cXHUwMDNlbXVsdGljYXN0X2ZpbHRlcl9iaW5zKTtcXG43NDM5OlxcdFxcdFxcdH1cXG43NDQwOlxcdFxcbjc0NDE6XFx0XFx0XFx0LyogVFhDT0UgZG9lc24ndCB3b3JrIGluIHRocmVzaCBETUEgbW9kZSAqL1xcbjc0NDI6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZvcmNlX3RocmVzaF9kbWFfbW9kZSlcXG43NDQzOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X2NvZSA9IGZhbHNlO1xcbjc0NDQ6XFx0XFx0XFx0ZWxzZVxcbjc0NDU6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfY29lID0gcHJpdi1cXHUwMDNlZG1hX2NhcC50eF9jb2U7XFxuNzQ0NjpcXHRcXG43NDQ3OlxcdFxcdFxcdC8qIEluIGNhc2Ugb2YgR01BQzQgcnhfY29lIGlzIGZyb20gSFcgY2FwIHJlZ2lzdGVyLiAqL1xcbjc0NDg6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfY29lID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9jb2U7XFxuNzQ0OTpcXHRcXG43NDUwOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLnJ4X2NvZV90eXBlMilcXG43NDUxOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZSA9IFNUTU1BQ19SWF9DT0VfVFlQRTI7XFxuNzQ1MjpcXHRcXHRcXHRlbHNlIGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLnJ4X2NvZV90eXBlMSlcXG43NDUzOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZSA9IFNUTU1BQ19SWF9DT0VfVFlQRTE7XFxuNzQ1NDpcXHRcXG43NDU1OlxcdFxcdFxcdHN0bW1hY19wcmludF9hY3RwaHlpZihwcml2KTtcXG43NDU2OlxcdFxcdH0gZWxzZSB7XFxuNzQ1NzpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJObyBIVyBETUEgZmVhdHVyZSByZWdpc3RlciBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbjc0NTg6XFx0XFx0fVxcbjc0NTk6XFx0XFxuNzQ2MDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfY29lKSB7XFxuNzQ2MTpcXHRcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlcnhfY3N1bSA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZTtcXG43NDYyOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlJYIENoZWNrc3VtIE9mZmxvYWQgRW5naW5lIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuNzQ2MzpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlc3lub3BzeXNfaWQgXFx1MDAzYyBEV01BQ19DT1JFXzRfMDApXFxuNzQ2NDpcXHRcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJDT0UgVHlwZSAlZFxcXFxuXFxcIiwgcHJpdi1cXHUwMDNlaHctXFx1MDAzZXJ4X2NzdW0pO1xcbjc0NjU6XFx0XFx0fVxcbjc0NjY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X2NvZSlcXG43NDY3OlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlRYIENoZWNrc3VtIGluc2VydGlvbiBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbjc0Njg6XFx0XFxuNzQ2OTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcG10KSB7XFxuNzQ3MDpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJXYWtlLVVwIE9uIExhbiBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMDoxMi43MzY5NzQ5OVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjgxMDAxNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRE1BIEZlYXR1cmUgQ2hlY2sqKlxuXG5Pa2F5LCBzbyB0aGUgYHN0bW1hY19nZXRfaHdfZmVhdHVyZXNgIGZ1bmN0aW9uIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjcml0aWNhbCBwYXJ0IGhlcmUgaXMgd2hhdCBoYXBwZW5zIHdoZW4gaXQgcmV0dXJucyB6ZXJvLiBJdCdzIGp1c3QgYSBzaW1wbGUgXCJObyBIVyBETUEgZmVhdHVyZSByZWdpc3RlciBzdXBwb3J0ZWRcIiBtZXNzYWdlLiBOb3QgZXhhY3RseSBpbmZvcm1hdGl2ZSwgaXMgaXQ/XG5cbkkgbmVlZCB0byBkaWcgZGVlcGVyLiBUaGF0IHByaW50IHN0YXRlbWVudCBpcyBsaWtlbHkganVzdCB0aGUgKmZpcnN0KiBzaWduIG9mIHRyb3VibGUuIFdoYXQgb3RoZXIgY2hlY2tzIG9yIGRvd25zdHJlYW0gcHJvY2Vzc2VzIG1pZ2h0IGJlIGltcGFjdGVkIGJ5IGEgemVybyByZXR1cm4gdmFsdWUgZnJvbSBgc3RtbWFjX2dldF9od19mZWF0dXJlc2A/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMsIGxvb2sgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHRoaXMgZnVuY3Rpb24ncyBvdXRwdXQsIGFuZCBzZWUgd2hlcmUgYSBmYWlsZWQgaGFyZHdhcmUgZmVhdHVyZSBkZXRlY3Rpb24gd291bGQgdHJ1bHkgbWFuaWZlc3QuIFRoaXMgaW5pdGlhbCBtZXNzYWdlIGlzIGp1c3QgdGhlIHRpcCBvZiB0aGUgaWNlYmVyZywgSSdtIHN1cmUuIExldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCB0aGUgcmVhbCByYW1pZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODMzNiwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6MTcuMDE3OTc5MzlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA5NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwNCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzkwNDpcXHRcXHQvKiBPbmx5IERXTUFDIGNvcmUgdmVyc2lvbiA1LjIwIG9ud2FyZHMgc3VwcG9ydHMgSFcgZGVzY3JpcHRvciBwcmVmZXRjaC5cXG43OTA1OlxcdFxcdCAqL1xcbjc5MDY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXN5bm9wc3lzX2lkIFxcdTAwM2MgRFdNQUNfQ09SRV81XzIwKVxcbjc5MDc6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlZGNoZSA9IGZhbHNlO1xcbjc5MDg6XFx0XFxuNzkwOTpcXHRcXHRzdG1tYWNfY2hlY2tfZXRoZXJfYWRkcihwcml2KTtcXG43OTEwOlxcdFxcbjc5MTE6XFx0XFx0bmRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZzdG1tYWNfbmV0ZGV2X29wcztcXG43OTEyOlxcdFxcbjc5MTM6XFx0XFx0bmRldi1cXHUwMDNleGRwX21ldGFkYXRhX29wcyA9IFxcdTAwMjZzdG1tYWNfeGRwX21ldGFkYXRhX29wcztcXG43OTE0OlxcdFxcdG5kZXYtXFx1MDAzZXhza190eF9tZXRhZGF0YV9vcHMgPSBcXHUwMDI2c3RtbWFjX3hza190eF9tZXRhZGF0YV9vcHM7XFxuNzkxNTpcXHRcXG43OTE2OlxcdFxcdG5kZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHxcXG43OTE3OlxcdFxcdFxcdFxcdCAgICBORVRJRl9GX1JYQ1NVTTtcXG43OTE4OlxcdFxcdG5kZXYtXFx1MDAzZXhkcF9mZWF0dXJlcyA9IE5FVERFVl9YRFBfQUNUX0JBU0lDIHwgTkVUREVWX1hEUF9BQ1RfUkVESVJFQ1QgfFxcbjc5MTk6XFx0XFx0XFx0XFx0ICAgICBORVRERVZfWERQX0FDVF9YU0tfWkVST0NPUFk7XFxuNzkyMDpcXHRcXG43OTIxOlxcdFxcdHJldCA9IHN0bW1hY190Y19pbml0KHByaXYsIHByaXYpO1xcbjc5MjI6XFx0XFx0aWYgKCFyZXQpIHtcXG43OTIzOlxcdFxcdFxcdG5kZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVEM7XFxuNzkyNDpcXHRcXHR9XFxuNzkyNTpcXHRcXG43OTI2OlxcdFxcdHN0bW1hY19zZXRfZ3NvX2ZlYXR1cmVzKG5kZXYpO1xcbjc5Mjc6XFx0XFxuNzkyODpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5zcGhlbiBcXHUwMDI2XFx1MDAyNlxcbjc5Mjk6XFx0XFx0ICAgICEocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19TUEhfRElTQUJMRSkpIHtcXG43OTMwOlxcdFxcdFxcdG5kZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPO1xcbjc5MzE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlc3BoX2NhcGFibGUgPSB0cnVlO1xcbjc5MzI6XFx0XFx0XFx0cHJpdi1cXHUwMDNlc3BoX2FjdGl2ZSA9IHByaXYtXFx1MDAzZXNwaF9jYXBhYmxlO1xcbjc5MzM6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiU1BIIGZlYXR1cmUgZW5hYmxlZFxcXFxuXFxcIik7XFxuNzkzNDpcXHRcXHR9XFxuNzkzNTpcXHRcXG43OTM2OlxcdFxcdC8qIElkZWFsbHkgb3VyIGhvc3QgRE1BIGFkZHJlc3Mgd2lkdGggaXMgdGhlIHNhbWUgYXMgZm9yIHRoZVxcbjc5Mzc6XFx0XFx0ICogZGV2aWNlLiBIb3dldmVyLCBpdCBtYXkgZGlmZmVyIGFuZCB0aGVuIHdlIGhhdmUgdG8gdXNlIG91clxcbjc5Mzg6XFx0XFx0ICogaG9zdCBETUEgd2lkdGggZm9yIGFsbG9jYXRpb24gYW5kIHRoZSBkZXZpY2UgRE1BIHdpZHRoIGZvclxcbjc5Mzk6XFx0XFx0ICogcmVnaXN0ZXIgaGFuZGxpbmcuXFxuNzk0MDpcXHRcXHQgKi9cXG43OTQxOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vob3N0X2RtYV93aWR0aClcXG43OTQyOlxcdFxcdFxcdHByaXYtXFx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGggPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vob3N0X2RtYV93aWR0aDtcXG43OTQzOlxcdFxcdGVsc2VcXG43OTQ0OlxcdFxcdFxcdHByaXYtXFx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGggPSBwcml2LVxcdTAwM2VkbWFfY2FwLmFkZHI2NDtcXG43OTQ1OlxcdFxcbjc5NDY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgpIHtcXG43OTQ3OlxcdFxcdFxcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2aWNlLFxcbjc5NDg6XFx0XFx0XFx0XFx0XFx0RE1BX0JJVF9NQVNLKHByaXYtXFx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgpKTtcXG43OTQ5OlxcdFxcdFxcdGlmICghcmV0KSB7XFxuNzk1MDpcXHRcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJVc2luZyAlZC8lZCBiaXRzIERNQSBob3N0L2RldmljZSB3aWR0aFxcXFxuXFxcIixcXG43OTUxOlxcdFxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoLCBwcml2LVxcdTAwM2VkbWFfY2FwLmFkZHI2NCk7XFxuNzk1MjpcXHRcXG43OTUzOlxcdFxcdFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAwOjE3LjAxODI5MDc4WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NjIwNjc4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaGVyZS5cblxuKipEZWNvbnN0cnVjdGluZyB0aGUgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKlxuXG5SaWdodCwgc28gdGhlIHRyYWNlIHNob3dzIHRoZSBleGVjdXRpb24gcGF0aCBoaXR0aW5nIGBzdG1tYWNfdGNfaW5pdGAuIFRoYXQncyB0aGUga2V5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgdHJhZmZpYyBjb250cm9sIGZlYXR1cmVzIG9mIHRoZSBTVE1NQUMgZHJpdmVyLCBvYnZpb3VzbHkuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gTm93LCB0aGUgZXhlY3V0aW9uICpjb250aW51ZXMqIGFmdGVyIHRoYXQgY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyBiZWluZyBkb25lICphZnRlciogdGhhdD8gQW5kLCBtb3JlIGltcG9ydGFudGx5LCBpcyB0aGF0IHRyYWZmaWMgY29udHJvbCByZWdpc3RyYXRpb24gYSBwcmUtcmVxdWlzaXRlP1xuXG5NeSBuZXh0IGh5cG90aGVzaXMgdG8gaW52ZXN0aWdhdGUgaXMgdGhlIGNhbGwgdG8gYHJlZ2lzdGVyX25ldGRldmAuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGF0IGZ1bmN0aW9uIG5vdy4gSXMgaXQgY2FsbGVkPyBBbmQgaWYgc28sICp3aGVuKj8gSXMgaXQgYmVmb3JlLCBhZnRlciwgb3IgaW50ZXJsZWF2ZWQgd2l0aCB0aGUgdHJhZmZpYyBjb250cm9sIGluaXRpYWxpemF0aW9uPyBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGNhbGxzIC0gYHN0bW1hY190Y19pbml0YCBhbmQgYHJlZ2lzdGVyX25ldGRldmAgLSBpcyBwcm9iYWJseSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZGV2aWNlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB0aGUgZHJpdmVyJ3MgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MzIsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAwOjIxLjY4MDM2MjMxOVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjc2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI4MDMwOlxcdFxcdHN0bW1hY19jaGVja19wY3NfbW9kZShwcml2KTtcXG44MDMxOlxcdFxcbjgwMzI6XFx0XFx0cG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2aWNlKTtcXG44MDMzOlxcdFxcdHBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXZpY2UpO1xcbjgwMzQ6XFx0XFx0aWYgKCFwbV9ydW50aW1lX2VuYWJsZWQoZGV2aWNlKSlcXG44MDM1OlxcdFxcdFxcdHBtX3J1bnRpbWVfZW5hYmxlKGRldmljZSk7XFxuODAzNjpcXHRcXG44MDM3OlxcdFxcdHJldCA9IHN0bW1hY19tZGlvX3JlZ2lzdGVyKG5kZXYpO1xcbjgwMzg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG44MDM5OlxcdFxcdFxcdGRldl9lcnJfcHJvYmUocHJpdi1cXHUwMDNlZGV2aWNlLCByZXQsXFxuODA0MDpcXHRcXHRcXHRcXHQgICAgICBcXFwiTURJTyBidXMgKGlkOiAlZCkgcmVnaXN0cmF0aW9uIGZhaWxlZFxcXFxuXFxcIixcXG44MDQxOlxcdFxcdFxcdFxcdCAgICAgIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWJ1c19pZCk7XFxuODA0MjpcXHRcXHRcXHRnb3RvIGVycm9yX21kaW9fcmVnaXN0ZXI7XFxuODA0MzpcXHRcXHR9XFxuODA0NDpcXHRcXG44MDQ1OlxcdFxcdHJldCA9IHN0bW1hY19wY3Nfc2V0dXAobmRldik7XFxuODA0NjpcXHRcXHRpZiAocmV0KVxcbjgwNDc6XFx0XFx0XFx0Z290byBlcnJvcl9wY3Nfc2V0dXA7XFxuODA0ODpcXHRcXG44MDQ5OlxcdFxcdHJldCA9IHN0bW1hY19waHlsaW5rX3NldHVwKHByaXYpO1xcbjgwNTA6XFx0XFx0aWYgKHJldCkge1xcbjgwNTE6XFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiZmFpbGVkIHRvIHNldHVwIHBoeSAoJWQpXFxcXG5cXFwiLCByZXQpO1xcbjgwNTI6XFx0XFx0XFx0Z290byBlcnJvcl9waHlfc2V0dXA7XFxuODA1MzpcXHRcXHR9XFxuODA1NDpcXHRcXG44MDU1OlxcdFxcdHJldCA9IHN0bW1hY19yZWdpc3Rlcl9kZXZsaW5rKHByaXYpO1xcbjgwNTY6XFx0XFx0aWYgKHJldClcXG44MDU3OlxcdFxcdFxcdGdvdG8gZXJyb3JfZGV2bGlua19zZXR1cDtcXG44MDU4OlxcdFxcbjgwNTk6XFx0XFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbjgwNjA6XFx0XFx0aWYgKHJldCkge1xcbjgwNjE6XFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCIlczogRVJST1IgJWkgcmVnaXN0ZXJpbmcgdGhlIGRldmljZVxcXFxuXFxcIixcXG44MDYyOlxcdFxcdFxcdFxcdF9fZnVuY19fLCByZXQpO1xcbjgwNjM6XFx0XFx0XFx0Z290byBlcnJvcl9uZXRkZXZfcmVnaXN0ZXI7XFxuODA2NDpcXHRcXHR9XFxuODA2NTpcXHRcXG44MDY2OlxcdCNpZmRlZiBDT05GSUdfREVCVUdfRlNcXG44MDY3OlxcdFxcdHN0bW1hY19pbml0X2ZzKG5kZXYpO1xcbjgwNjg6XFx0I2VuZGlmXFxuODA2OTpcXHRcXG44MDcwOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VkdW1wX2RlYnVnX3JlZ3MpXFxuODA3MTpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VkdW1wX2RlYnVnX3JlZ3MocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlYnNwX3ByaXYpO1xcbjgwNzI6XFx0XFxuODA3MzpcXHRcXHQvKiBMZXQgcG1fcnVudGltZV9wdXQoKSBkaXNhYmxlIHRoZSBjbG9ja3MuXFxuODA3NDpcXHRcXHQgKiBJZiBDT05GSUdfUE0gaXMgbm90IGVuYWJsZWQsIHRoZSBjbG9ja3Mgd2lsbCBzdGF5IHBvd2VyZWQuXFxuODA3NTpcXHRcXHQgKi9cXG44MDc2OlxcdFxcdHBtX3J1bnRpbWVfcHV0KGRldmljZSk7XFxuODA3NzpcXHRcXG44MDc4OlxcdFxcdHJldHVybiByZXQ7XFxuODA3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6MjEuNjgwODAyODY5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTcwNTEyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIGVtYmVkZGVkIHN5c3RlbXMvbmV0d29ya2luZywgZm9jdXNpbmcgb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZnVuY3Rpb24gY2FsbDpcblxuKipBbmFseXppbmcgdGhlIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgQ2FsbCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlJ3MgY2FsbGluZyBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/XCIgSXMgdGhpcyBoYXBwZW5pbmcgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiwgb3IgbGF0ZXI/IFRoZW4gSSBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBxdWVzdGlvbiBvZiAqZXJyb3IgaGFuZGxpbmcqLiBEb2VzIHRoZSBjb2RlIGhhdmUgYSBjaGVjayBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgPyBDcnVjaWFsbHksIEknbSB3b25kZXJpbmcgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCByb2J1c3RseSBlbm91Z2guIERvZXMgaXQgZ3JhY2VmdWxseSBoYW5kbGUgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRoZSBNRElPIGJ1cyBpdHNlbGYsIGlzbid0IHBoeXNpY2FsbHkgcHJlc2VudD8gRG9lcyBpdCByZXR1cm4gYSBtZWFuaW5nZnVsIGVycm9yIGNvZGUsIG9yIGRvZXMgaXQgc2ltcGx5IHJldHVybiBhbiBlcnJvciB0aGF0IG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbj8gV2hhdCBzb3J0IG9mIGRlYnVnIG91dHB1dCB3b3VsZCBiZSBnZW5lcmF0ZWQgaWYgdGhpcyBmdW5jdGlvbiBjYWxsIGZhaWxlZD8gQXJlIHRoZXJlIG90aGVyIGVycm9yIHBhdGhzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB3b3VsZCBhZmZlY3QgdGhpcyBjYWxsPyBLbm93aW5nIHdoZXRoZXIgdGhpcyBjYWxsIGlzIGEgXCJjcml0aWNhbCBwYXRoXCIgZnVuY3Rpb24gaXMga2V5IHRvIGFzc2Vzc2luZyB0aGUgY29uc2VxdWVuY2VzIG9mIGl0cyBmYWlsdXJlLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGluIG9yZGVyIHRvIHBlcmZvcm0gcm9idXN0IHZhbGlkYXRpb24gYW5kL29yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1NDYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAwOjI3LjA5Nzg1NzQzNVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3ODc5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX21kaW9fcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQwNT1pbnQgc3RtbWFjX21kaW9fdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDA2OmludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDA3LWludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqbWlpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc5Nj1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDM3OlxcdHJldCA9IHN0bW1hY19tZGlvX3JlZ2lzdGVyKG5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODAzOC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYz01Njc9c3RhdGljIHZvaWQgc3RtbWFjX21kaW9fYnVzX2NvbmZpZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU5MC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjU5MTogKiBzdG1tYWNfbWRpb19yZWdpc3RlclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTkyLSAqIEBuZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy01OTQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo1OTU6aW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTk2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6MjcuMTQ2NjUyNjk0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODQ2MjE4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggYHN0bW1hY19tZGlvX3JlZ2lzdGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBXaGF0J3MgaXRzIHJvbGUgaW4gdGhlIFNUTU1BQyBkcml2ZXIncyBNRElPIGludGVyZmFjZT8gSXMgaXQgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRoZSBNRElPIGJ1cyB3aXRoIHRoZSBrZXJuZWw/IE9yIG1heWJlIGl0J3MgaGFuZGxpbmcgYSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzdGVwIG9yIGRldmljZSBhdHRhY2htZW50PyBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCBpdHMgY29udGV4dC4gV2hhdCBvdGhlciBmdW5jdGlvbnMgY2FsbCBpdD8gV2hhdCBmdW5jdGlvbnMgZG9lcyAqaXQqIGNhbGw/IFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIGlzLiBJcyB0aGVyZSBhbnl0aGluZyB1bnVzdWFsIGFib3V0IHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBzcGVjaWZpYyB0byB0aGlzIGRyaXZlci9oYXJkd2FyZSBjb21iaW5hdGlvbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBtaW5kZnVsIG9mPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBjb2RlIGZvciBpdHMgdXNhZ2UsIGFuZCB0aGVuIHRyYWNpbmcgdGhlIGNhbGxzIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBpbXBhY3QuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBNRElPIHJlZ2lzdHJhdGlvbiBpcyBjb3JyZWN0IGFuZCBpZiBpdCBpcywgdGhlIGRyaXZlcidzIGZ1bmN0aW9uIHdpbGwgYmUgcmVnaXN0ZXJlZCBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0MzYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMDozMi42MzEyNzc2MThaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTk1OlxcdGludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gNTk2OlxcdHtcXG4gNTk3OlxcdFxcdGludCBlcnIgPSAwO1xcbiA1OTg6XFx0XFx0c3RydWN0IG1paV9idXMgKm5ld19idXM7XFxuIDU5OTpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gNjAwOlxcdFxcdHN0cnVjdCBzdG1tYWNfbWRpb19idXNfZGF0YSAqbWRpb19idXNfZGF0YSA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGE7XFxuIDYwMTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbm9kZSA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1kaW9fbm9kZTtcXG4gNjAyOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IG5kZXYtXFx1MDAzZWRldi5wYXJlbnQ7XFxuIDYwMzpcXHRcXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZml4ZWRfbm9kZTtcXG4gNjA0OlxcdFxcdGludCBtYXhfYWRkciA9IFBIWV9NQVhfQUREUiAtIDE7XFxuIDYwNTpcXHRcXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlO1xcbiA2MDY6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4gNjA3OlxcdFxcbiA2MDg6XFx0XFx0aWYgKCFtZGlvX2J1c19kYXRhKVxcbiA2MDk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYxMDpcXHRcXG4gNjExOlxcdFxcdHN0bW1hY19tZGlvX2J1c19jb25maWcocHJpdik7XFxuIDYxMjpcXHRcXG4gNjEzOlxcdFxcdG5ld19idXMgPSBtZGlvYnVzX2FsbG9jKCk7XFxuIDYxNDpcXHRcXHRpZiAoIW5ld19idXMpXFxuIDYxNTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0aWYgKG1kaW9fYnVzX2RhdGEtXFx1MDAzZWlycXMpXFxuIDYxODpcXHRcXHRcXHRtZW1jcHkobmV3X2J1cy1cXHUwMDNlaXJxLCBtZGlvX2J1c19kYXRhLVxcdTAwM2VpcnFzLCBzaXplb2YobmV3X2J1cy1cXHUwMDNlaXJxKSk7XFxuIDYxOTpcXHRcXG4gNjIwOlxcdFxcdG5ld19idXMtXFx1MDAzZW5hbWUgPSBcXFwic3RtbWFjXFxcIjtcXG4gNjIxOlxcdFxcbiA2MjI6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKSB7XFxuIDYyMzpcXHRcXHRcXHRuZXdfYnVzLVxcdTAwM2VyZWFkID0gXFx1MDAyNnN0bW1hY194Z21hYzJfbWRpb19yZWFkX2MyMjtcXG4gNjI0OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXdyaXRlID0gXFx1MDAyNnN0bW1hY194Z21hYzJfbWRpb193cml0ZV9jMjI7XFxuIDYyNTpcXHRcXHRcXHRuZXdfYnVzLVxcdTAwM2VyZWFkX2M0NSA9IFxcdTAwMjZzdG1tYWNfeGdtYWMyX21kaW9fcmVhZF9jNDU7XFxuIDYyNjpcXHRcXHRcXHRuZXdfYnVzLVxcdTAwM2V3cml0ZV9jNDUgPSBcXHUwMDI2c3RtbWFjX3hnbWFjMl9tZGlvX3dyaXRlX2M0NTtcXG4gNjI3OlxcdFxcbiA2Mjg6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZXN5bm9wc3lzX2lkIFxcdTAwM2MgRFdYR01BQ19DT1JFXzJfMjApIHtcXG4gNjI5OlxcdFxcdFxcdFxcdC8qIFJpZ2h0IG5vdyBvbmx5IEMyMiBwaHlzIGFyZSBzdXBwb3J0ZWQgKi9cXG4gNjMwOlxcdFxcdFxcdFxcdG1heF9hZGRyID0gTUlJX1hHTUFDX01BWF9DMjJBRERSO1xcbiA2MzE6XFx0XFxuIDYzMjpcXHRcXHRcXHRcXHQvKiBDaGVjayBpZiBEVCBzcGVjaWZpZWQgYW4gdW5zdXBwb3J0ZWQgcGh5IGFkZHIgKi9cXG4gNjMzOlxcdFxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwaHlfYWRkciBcXHUwMDNlIE1JSV9YR01BQ19NQVhfQzIyQUREUilcXG4gNjM0OlxcdFxcdFxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW5zdXBwb3J0ZWQgcGh5X2FkZHIgKG1heD0lZClcXFxcblxcXCIsXFxuIDYzNTpcXHRcXHRcXHRcXHRcXHRcXHRNSUlfWEdNQUNfTUFYX0MyMkFERFIpO1xcbiA2MzY6XFx0XFx0XFx0fVxcbiA2Mzc6XFx0XFx0fSBlbHNlIHtcXG4gNjM4OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXJlYWQgPSBcXHUwMDI2c3RtbWFjX21kaW9fcmVhZF9jMjI7XFxuIDYzOTpcXHRcXHRcXHRuZXdfYnVzLVxcdTAwM2V3cml0ZSA9IFxcdTAwMjZzdG1tYWNfbWRpb193cml0ZV9jMjI7XFxuIDY0MDpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQpIHtcXG4gNjQxOlxcdFxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXJlYWRfYzQ1ID0gXFx1MDAyNnN0bW1hY19tZGlvX3JlYWRfYzQ1O1xcbiA2NDI6XFx0XFx0XFx0XFx0bmV3X2J1cy1cXHUwMDNld3JpdGVfYzQ1ID0gXFx1MDAyNnN0bW1hY19tZGlvX3dyaXRlX2M0NTtcXG4gNjQzOlxcdFxcdFxcdH1cXG4gNjQ0OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6MzIuNjMxMzkxMDg5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NTE0NzYyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTURJTyBCdXMgUmVnaXN0cmF0aW9uIGluIFNUTU1BQyBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgU1RNTUFDIGRyaXZlciBNRElPIGJ1cyByZWdpc3RyYXRpb24gbG9naWMuIElmIGBtZGlvX2J1c19kYXRhYCBpcyBwcmVzZW50LCB0aGVuIHRoZSBkcml2ZXIgaXMgZ29pbmcgdG8gcmVnaXN0ZXIgdGhlIE1ESU8gYnVzLiBIYW5nIG9uLCB0aGUgY29kZSBzbmlwcGV0IGZyb20gYHN0bW1hY19wY2lfcHJvYmVgIGNvbmZpcm1zIHRoYXQgYG1kaW9fYnVzX2RhdGFgIGlzIGluZGVlZCBhbGxvY2F0ZWQgdXNpbmcgYGRldm1fa3phbGxvY2AuICBTbywgeWVzLCBpdCdzIHByZXNlbnQuIFRoZSBjb2RlIGlzIHRoZW4gZ29pbmcgdG8gY2FsbCBlaXRoZXIgYG9mX21kaW9idXNfcmVnaXN0ZXJgIG9yIGBtZGlvYnVzX3JlZ2lzdGVyYCDigJMgdGhhdCdzIHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUuXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IHdoYXQgaGFwcGVucyBpZiB0aGVyZSdzIG5vIHBoeXNpY2FsIFBIWSBwcmVzZW50IG9uIHRoZSBidXM/IEknbSB1c2VkIHRvIGhvdyBgbWRpb2J1c19yZWdpc3RlcmAgd29ya3MsIGl0IHR5cGljYWxseSBzY2FucyB0aGUgTURJTyBidXMuIElmIGl0IHJlYWRzIHRoZSBgMHhmZmZmYCB2YWx1ZSwgcmVwcmVzZW50aW5nIG5vIGRldmljZSwgaXQgZG9lc24ndCBuZWNlc3NhcmlseSBmYWlsIG91dHJpZ2h0LiBJdCB1c3VhbGx5IGp1c3QgYXNzdW1lcyB0aGF0IG5vIFBIWSBpcyBwcmVzZW50IGF0IHRoZSBwYXJ0aWN1bGFyIGFkZHJlc3MuXG5cbkhvd2V2ZXIsIGEgbmV3IGNvbmNlcm46IGBzdG1tYWNfcGNzX3NldHVwYCBhbmQgYHN0bW1hY19waHlsaW5rX3NldHVwYCBhcmUgY2FsbGVkICphZnRlciogYHN0bW1hY19tZGlvX3JlZ2lzdGVyYC4gVGhpcyBzdWdnZXN0cyB0aGV5IGRlcGVuZCBvbiB0aGUgTURJTyBidXMgcmVnaXN0cmF0aW9uLiAgU28gdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBgbWRpb2J1c19yZWdpc3RlcmAgbWF5IG9yIG1heSBub3QgaW1wYWN0IHRoZSBQQ1MgYW5kIFBoeWxpbmsgc2V0dXAuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB0byBiZSBjZXJ0YWluIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2Ygbm8gUEhZIGJlaW5nIGRldGVjdGVkLiBUaGUgYmVoYXZpb3IgaGVyZSBzZWVtcyBzYWZlLCBidXQgSSB3aWxsIGRvdWJsZS1jaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3MjcsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMDo0MC41ODI4NzAyOFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQ1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI4MDQ1OlxcdFxcdHJldCA9IHN0bW1hY19wY3Nfc2V0dXAobmRldik7XFxuODA0NjpcXHRcXHRpZiAocmV0KVxcbjgwNDc6XFx0XFx0XFx0Z290byBlcnJvcl9wY3Nfc2V0dXA7XFxuODA0ODpcXHRcXG44MDQ5OlxcdFxcdHJldCA9IHN0bW1hY19waHlsaW5rX3NldHVwKHByaXYpO1xcbjgwNTA6XFx0XFx0aWYgKHJldCkge1xcbjgwNTE6XFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiZmFpbGVkIHRvIHNldHVwIHBoeSAoJWQpXFxcXG5cXFwiLCByZXQpO1xcbjgwNTI6XFx0XFx0XFx0Z290byBlcnJvcl9waHlfc2V0dXA7XFxuODA1MzpcXHRcXHR9XFxuODA1NDpcXHRcXG44MDU1OlxcdFxcdHJldCA9IHN0bW1hY19yZWdpc3Rlcl9kZXZsaW5rKHByaXYpO1xcbjgwNTY6XFx0XFx0aWYgKHJldClcXG44MDU3OlxcdFxcdFxcdGdvdG8gZXJyb3JfZGV2bGlua19zZXR1cDtcXG44MDU4OlxcdFxcbjgwNTk6XFx0XFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbjgwNjA6XFx0XFx0aWYgKHJldCkge1xcbjgwNjE6XFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCIlczogRVJST1IgJWkgcmVnaXN0ZXJpbmcgdGhlIGRldmljZVxcXFxuXFxcIixcXG44MDYyOlxcdFxcdFxcdFxcdF9fZnVuY19fLCByZXQpO1xcbjgwNjM6XFx0XFx0XFx0Z290byBlcnJvcl9uZXRkZXZfcmVnaXN0ZXI7XFxuODA2NDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAwOjQwLjU4MzE4NjVaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5ODgwMjQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19waHlsaW5rX3NldHVwYCBmdW5jdGlvbiwgc2hhbGwgd2U/IEhlcmUncyBteSB0YWtlIG9uIHdoYXQncyBsaWtlbHkgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYW5hbHl6ZSBpdDpcblxuKipEZWNvbnN0cnVjdGluZyBgc3RtbWFjX3BoeWxpbmtfc2V0dXBgKipcblxuQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgc3RtbWFjX3BoeWxpbmtfc2V0dXBgLiBUaGUgbmFtZSBpdHNlbGYgc2NyZWFtcyBcIkV0aGVybmV0LCBQSFksIGFuZCBzZXR1cC5cIiBJIGltbWVkaWF0ZWx5IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHdoZXJlIHRoZSBTVE1NQUMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBQSFkgbGF5ZXIsIGxpa2VseSBlc3RhYmxpc2hpbmcgdGhlIGxpbmsgYW5kIGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBiZSBsb29raW5nIGZvciBhIGZldyBrZXkgYXJlYXM6XG5cbiogICAqKlBIWSBMaW5rIEluaXRpYWxpemF0aW9uOioqIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBwcm9iaW5nIGFuZCBjb25uZWN0aW5nIHRvIHRoZSBQSFkgZGV2aWNlLCBtYXliZSB1c2luZyBwaHlsaW5rLCBjb25zaWRlcmluZyB0aGUgbmFtZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGRyaXZlciBkZXRlY3RzIHRoZSBQSFksIGFuZCB0aGVuIHNldHMgdXAgdGhlIGNvbW11bmljYXRpb24gaW50ZXJmYWNlLiBJcyBpdCB1c2luZyBNRElPPyBXaGF0IGFib3V0IGFueSBzcGVjaWZpYyBTVE1NQUMtcmVsYXRlZCBQSFkgaW5pdGlhbGl6YXRpb24gcmVxdWlyZW1lbnRzP1xuKiAgICoqU3BlZWQsIER1cGxleCwgYW5kIEF1dG9uZWdvdGlhdGlvbjoqKiBEZWZpbml0ZWx5IGV4cGVjdGluZyB0byBzZWUgY29kZSB0aGF0IGhhbmRsZXMgdGhlIG5lZ290aWF0ZWQgbGluayBzcGVlZCwgZHVwbGV4IG1vZGUgKGhhbGYvZnVsbCksIGFuZCBtb3N0IGxpa2VseSBhdXRvbmVnb3RpYXRpb24uIEhvdyBkb2VzIGl0IGhhbmRsZSBmb3JjZWQgY29uZmlndXJhdGlvbnMgaWYgYXV0b25lZ290aWF0aW9uIGZhaWxzIG9yIGlzIGRpc2FibGVkPyBBcmUgdGhlcmUgYW55IFNUTU1BQy1zcGVjaWZpYyBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZXNlIHBhcmFtZXRlcnM/XG4qICAgKipEcml2ZXIgXHUwMDI2IFBIWSBDb29yZGluYXRpb246KiogSG93IGRvZXMgdGhlIFNUTU1BQyBkcml2ZXIgZ2V0IG5vdGlmaWVkIGFib3V0IGxpbmsgc3RhdGUgY2hhbmdlcz8gSXMgdGhlcmUgYSBjYWxsYmFjayBtZWNoYW5pc20gdG8gaGFuZGxlIFBIWSBpbnRlcnJ1cHRzIG9yIGxpbmsgc3RhdHVzIGV2ZW50cz8gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgc3RheXMgc3luY2hyb25pemVkIHdpdGggdGhlIFBIWSdzIG9wZXJhdGlvbmFsIHN0YXRlLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSW1wb3J0YW50LiBIb3cgZG9lcyBpdCBkZWFsIHdpdGggUEhZIGRldGVjdGlvbiBmYWlsdXJlcywgbGluayBmYWlsdXJlcywgb3IgY29uZmlndXJhdGlvbiBlcnJvcnM/IEknbGwgYmUgbG9va2luZyBmb3Igcm9idXN0IGVycm9yIGNoZWNraW5nIGFuZCBwb3RlbnRpYWxseSByZXRyeSBtZWNoYW5pc21zLlxuKiAgICoqQ2xvY2sgQ29uZmlndXJhdGlvbjoqKiBTVE1NQUMgZHJpdmVycyBvZnRlbiBoYXZlIHNwZWNpZmljIGNsb2NrIHJlcXVpcmVtZW50cyBmb3IgdGhlIFBIWSBpbnRlcmZhY2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBjbG9ja3MgYXJlIGNvbmZpZ3VyZWQgYW5kIG1hbmFnZWQsIGFuZCBpZiB0aGV5IGNoYW5nZSBiYXNlZCBvbiB0aGUgUEhZJ3Mgc2V0dGluZ3MuXG4qICAgKipSZXNvdXJjZSBBbGxvY2F0aW9uOioqIFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24/IEkgZXhwZWN0IHRvIHNlZSBQSFktcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBhbGxvY2F0aW9uIGZvciBQSFkgY29udHJvbCByZWdpc3RlcnMgb3IgbGluayBzdGF0dXMgaW5mb3JtYXRpb24uXG5cblNvLCBvdmVyYWxsLCBteSBtZW50YWwgY2hlY2tsaXN0IGlzOiBpbml0aWFsaXphdGlvbiwgY29uZmlndXJhdGlvbiwgbGluayBtb25pdG9yaW5nLCBlcnJvciBoYW5kbGluZywgY2xvY2tpbmcsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBOb3csIGxldCdzIHNlZSBob3cgd2VsbCBteSBhc3N1bXB0aW9ucyBob2xkIHVwIGFzIEkgZGlzc2VjdCB0aGUgY29kZS4uLiBUaW1lIHRvIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MzM2MDUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAwOjQ3Ljg4MTk5MjQ2WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjM5NjkxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3BoeWxpbmtfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTI5OT1zdGF0aWMgaW50IHN0bW1hY19pbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0xMzczLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MTM3NDpzdGF0aWMgaW50IHN0bW1hY19waHlsaW5rX3NldHVwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEzNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03Nzk2PXN0YXRpYyBpbnQgX19zdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODA0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgwNDk6XFx0cmV0ID0gc3RtbWFjX3BoeWxpbmtfc2V0dXAocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDUwLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6NDguMzA1OTcwMjU3WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNDQ3NDM3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgd2UncmUgbG9va2luZyBhdCwgc3VtbWFyaXplZCBhcyB0aG91Z2ggSSdtIHdvcmtpbmcgdGhyb3VnaCBpdDpcblxuKipBbmFseXppbmcgdGhlIGBzdG1tYWNfcGh5bGlua19zZXR1cGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYHN0bW1hY19waHlsaW5rX3NldHVwYCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBzZXR0aW5nIHVwIHRoZSBQSFkgbGluayB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgZHJpdmVyLCBidXQgbGV0J3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgc3RlcHMgYXJlIGludm9sdmVkLCB3aGF0IHJlc291cmNlcyBpdCdzIGludGVyYWN0aW5nIHdpdGgsIGFuZCB3aGF0IHBvdGVudGlhbCBpc3N1ZXMgbWlnaHQgYXJpc2UgaGVyZS4gSXMgdGhpcyB3aGVyZSB0aGUgY3JpdGljYWwgUEhZIG5lZ290aWF0aW9uIGhhcHBlbnM/IElzIHRoZXJlIGFueXRoaW5nIHNwZWNpZmljIHRvIHRoZSBTVE1NQUMncyBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIHdvcnRoIG5vdGluZyBpbiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24/IEkgbmVlZCB0byBhbmFseXplIGl0cyBjYWxsIHN0YWNrIGFuZCBkYXRhIGZsb3cgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBpdHMgcGxhY2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0ODYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMDo1NC4zNTA3MTY1ODRaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM3NDpcXHRzdGF0aWMgaW50IHN0bW1hY19waHlsaW5rX3NldHVwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4xMzc1OlxcdHtcXG4xMzc2OlxcdFxcdHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnO1xcbjEzNzc6XFx0XFx0c3RydWN0IHBoeWxpbmtfcGNzICpwY3M7XFxuMTM3ODpcXHRcXHRzdHJ1Y3QgcGh5bGluayAqcGh5bGluaztcXG4xMzc5OlxcdFxcbjEzODA6XFx0XFx0Y29uZmlnID0gXFx1MDAyNnByaXYtXFx1MDAzZXBoeWxpbmtfY29uZmlnO1xcbjEzODE6XFx0XFxuMTM4MjpcXHRcXHRjb25maWctXFx1MDAzZWRldiA9IFxcdTAwMjZwcml2LVxcdTAwM2VkZXYtXFx1MDAzZWRldjtcXG4xMzgzOlxcdFxcdGNvbmZpZy1cXHUwMDNldHlwZSA9IFBIWUxJTktfTkVUREVWO1xcbjEzODQ6XFx0XFx0Y29uZmlnLVxcdTAwM2VtYWNfbWFuYWdlZF9wbSA9IHRydWU7XFxuMTM4NTpcXHRcXG4xMzg2OlxcdFxcdC8qIFN0bW1hYyBhbHdheXMgcmVxdWlyZXMgYW4gUlggY2xvY2sgZm9yIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uICovXFxuMTM4NzpcXHRcXHRjb25maWctXFx1MDAzZW1hY19yZXF1aXJlc19yeGMgPSB0cnVlO1xcbjEzODg6XFx0XFxuMTM4OTpcXHRcXHQvKiBEaXNhYmxlIEVFRSBSWCBjbG9jayBzdG9wIHRvIGVuc3VyZSBWTEFOIHJlZ2lzdGVyIGFjY2VzcyB3b3Jrc1xcbjEzOTA6XFx0XFx0ICogY29ycmVjdGx5LlxcbjEzOTE6XFx0XFx0ICovXFxuMTM5MjpcXHRcXHRpZiAoIShwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX1JYX0NMS19SVU5TX0lOX0xQSSkgXFx1MDAyNlxcdTAwMjZcXG4xMzkzOlxcdFxcdCAgICAhKHByaXYtXFx1MDAzZWRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1ZMQU5fRkVBVFVSRVMpKVxcbjEzOTQ6XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VlZWVfcnhfY2xrX3N0b3BfZW5hYmxlID0gdHJ1ZTtcXG4xMzk1OlxcdFxcbjEzOTY6XFx0XFx0LyogU2V0IHRoZSBkZWZhdWx0IHRyYW5zbWl0IGNsb2NrIHN0b3AgYml0IGJhc2VkIG9uIHRoZSBwbGF0Zm9ybSBnbHVlICovXFxuMTM5NzpcXHRcXHRwcml2LVxcdTAwM2V0eF9scGlfY2xrX3N0b3AgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2XFxuMTM5ODpcXHRcXHRcXHRcXHRcXHRTVE1NQUNfRkxBR19FTl9UWF9MUElfQ0xPQ0tHQVRJTkc7XFxuMTM5OTpcXHRcXG4xNDAwOlxcdFxcdC8qIEdldCB0aGUgUEhZIGludGVyZmFjZSBtb2RlcyAoYXQgdGhlIFBIWSBlbmQgb2YgdGhlIGxpbmspIHRoYXRcXG4xNDAxOlxcdFxcdCAqIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLlxcbjE0MDI6XFx0XFx0ICovXFxuMTQwMzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZ2V0X2ludGVyZmFjZXMpXFxuMTQwNDpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VnZXRfaW50ZXJmYWNlcyhwcml2LCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vic3BfcHJpdixcXG4xNDA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbjE0MDY6XFx0XFxuMTQwNzpcXHRcXHRjb25maWctXFx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZGVmYXVsdF9hbl9pbmJhbmQ7XFxuMTQwODpcXHRcXG4xNDA5OlxcdFxcdC8qIFNldCB0aGUgcGxhdGZvcm0vZmlybXdhcmUgc3BlY2lmaWVkIGludGVyZmFjZSBtb2RlIGlmIHRoZVxcbjE0MTA6XFx0XFx0ICogc3VwcG9ydGVkIGludGVyZmFjZXMgaGF2ZSBub3QgYWxyZWFkeSBiZWVuIHByb3ZpZGVkIHVzaW5nXFxuMTQxMTpcXHRcXHQgKiBwaHlfaW50ZXJmYWNlIGFzIGEgbGFzdCByZXNvcnQuXFxuMTQxMjpcXHRcXHQgKi9cXG4xNDEzOlxcdFxcdGlmIChwaHlfaW50ZXJmYWNlX2VtcHR5KGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpKVxcbjE0MTQ6XFx0XFx0XFx0X19zZXRfYml0KHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBoeV9pbnRlcmZhY2UsXFxuMTQxNTpcXHRcXHRcXHRcXHQgIGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbjE0MTY6XFx0XFxuMTQxNzpcXHRcXHQvKiBJZiB3ZSBoYXZlIGFuIHhwY3MsIGl0IGRlZmluZXMgd2hpY2ggUEhZIGludGVyZmFjZXMgYXJlIHN1cHBvcnRlZC4gKi9cXG4xNDE4OlxcdFxcdGlmIChwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcylcXG4xNDE5OlxcdFxcdFxcdHBjcyA9IHhwY3NfdG9fcGh5bGlua19wY3MocHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpO1xcbjE0MjA6XFx0XFx0ZWxzZVxcbjE0MjE6XFx0XFx0XFx0cGNzID0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzO1xcbjE0MjI6XFx0XFxuMTQyMzpcXHRcXHRpZiAocGNzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMDo1NC4zNTEwNDUwMjRaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2NzQ4NzA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBwaHlsaW5rIFNldHVwIGluIHN0bW1hYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzdG1tYWNfcGh5bGlua19zZXR1cGAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGlzIGZ1bmN0aW9uJ3MgcHJpbWFyeSBwdXJwb3NlIGlzIHRoZSBjcmVhdGlvbiBvZiBhIGBwaHlsaW5rYCBpbnN0YW5jZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZSBhbmQgaXRzIHBsYWNlIGluIHRoZSBFdGhlcm5ldCBkcml2ZXIgc2V0dXAuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gaW5zdGFudGlhdGUgdGhlIGFic3RyYWN0aW9uIHRoYXQgYnJpZGdlcyB0aGUgZ2FwIGJldHdlZW4gdGhlIE1BQyBhbmQgdGhlIFBIWS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgcGF0aHMuIEkgaW1tZWRpYXRlbHkgd29uZGVyOiBkb2VzIHRoZSBmdW5jdGlvbiBncmFjZWZ1bGx5IGhhbmRsZSB0aGUgc2NlbmFyaW8gd2hlcmUgbm8gUEhZIGlzIHByZXNlbnQ/IERvZXMgaXQgcmV0dXJuIGFuIGVycm9yLCBvciBwZXJoYXBzIGF0dGVtcHQgc29tZSBraW5kIG9mIGZhbGxiYWNrIG9yIGhhcmR3YXJlIGF1dG9uZWdvdGlhdGlvbiBzZXR1cD8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBpZiBhIFBIWSBpc24ndCBkZXRlY3RlZCBvciBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdGhpcyBwb2ludC4gVGhhdCB3b3VsZCBzaWduaWZpY2FudGx5IGFmZmVjdCB0aGUgb3ZlcmFsbCBpbml0aWFsaXphdGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTU1MCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6NTkuNjE4NTM0NTQ1WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MjQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MjQ6XFx0XFx0XFx0cGh5X2ludGVyZmFjZV9vcihjb25maWctXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzLFxcbjE0MjU6XFx0XFx0XFx0XFx0XFx0IGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMsXFxuMTQyNjpcXHRcXHRcXHRcXHRcXHQgcGNzLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuMTQyNzpcXHRcXG4xNDI4OlxcdFxcdC8qIFNvbWUgcGxhdGZvcm1zLCBlLmcuIGlNWDhNUCwgd2lyZSBscGlfaW50cl9vIHRvIHRoZSBzYW1lIGludGVycnVwdFxcbjE0Mjk6XFx0XFx0ICogdXNlZCBmb3Igc3RtbWFjJ3MgbWFpbiBpbnRlcnJ1cHRzLCB3aGljaCBsZWFkcyB0byBpbnRlcnJ1cHQgc3Rvcm1zLlxcbjE0MzA6XFx0XFx0ICogU1RNTUFDX0ZMQUdfRUVFX0RJU0FCTEUgYWxsb3dzIEVFRSB0byBiZSBkaXNhYmxlZCBvbiBzdWNoIHBsYXRmb3Jtcy5cXG4xNDMxOlxcdFxcdCAqL1xcbjE0MzI6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAuZWVlIFxcdTAwMjZcXHUwMDI2XFxuMTQzMzpcXHRcXHQgICAgIShwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX0VFRV9ESVNBQkxFKSkge1xcbjE0MzQ6XFx0XFx0XFx0LyogVGhlIEdNQUMgMy43NGEgZGF0YWJvb2sgc3RhdGVzIHRoYXQgRUVFIGlzIG9ubHkgc3VwcG9ydGVkXFxuMTQzNTpcXHRcXHRcXHQgKiBpbiBNSUksIEdNSUksIGFuZCBSR01JSSBpbnRlcmZhY2VzLlxcbjE0MzY6XFx0XFx0XFx0ICovXFxuMTQzNzpcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwgY29uZmlnLVxcdTAwM2VscGlfaW50ZXJmYWNlcyk7XFxuMTQzODpcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUksIGNvbmZpZy1cXHUwMDNlbHBpX2ludGVyZmFjZXMpO1xcbjE0Mzk6XFx0XFx0XFx0cGh5X2ludGVyZmFjZV9zZXRfcmdtaWkoY29uZmlnLVxcdTAwM2VscGlfaW50ZXJmYWNlcyk7XFxuMTQ0MDpcXHRcXG4xNDQxOlxcdFxcdFxcdC8qIElmIHdlIGhhdmUgYSBub24taW50ZWdyYXRlZCBQQ1MsIGFzc3VtZSB0aGF0IGl0IGlzIGNvbm5lY3RlZFxcbjE0NDI6XFx0XFx0XFx0ICogdG8gdGhlIEdNQUMgdXNpbmcgR01JSSBvciBhbm90aGVyIEVFRSBjb21wYXRpYmxlIGludGVyZmFjZSxcXG4xNDQzOlxcdFxcdFxcdCAqIGFuZCB0aHVzIGFsbCBQQ1Mtc3VwcG9ydGVkIGludGVyZmFjZXMgc3VwcG9ydCBMUEkuXFxuMTQ0NDpcXHRcXHRcXHQgKi9cXG4xNDQ1OlxcdFxcdFxcdGlmIChwY3MpXFxuMTQ0NjpcXHRcXHRcXHRcXHRwaHlfaW50ZXJmYWNlX29yKGNvbmZpZy1cXHUwMDNlbHBpX2ludGVyZmFjZXMsXFxuMTQ0NzpcXHRcXHRcXHRcXHRcXHRcXHQgY29uZmlnLVxcdTAwM2VscGlfaW50ZXJmYWNlcyxcXG4xNDQ4OlxcdFxcdFxcdFxcdFxcdFxcdCBwY3MtXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4xNDQ5OlxcdFxcbjE0NTA6XFx0XFx0XFx0LyogQWxsIGZ1bGwgZHVwbGV4IHNwZWVkcyBhYm92ZSAxMDBNYnBzIGFyZSBzdXBwb3J0ZWQgKi9cXG4xNDUxOlxcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbHBpX2NhcGFiaWxpdGllcyA9IH4oTUFDXzEwMDBGRCAtIDEpIHwgTUFDXzEwMEZEO1xcbjE0NTI6XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VscGlfdGltZXJfZGVmYXVsdCA9IGVlZV90aW1lciAqIDEwMDA7XFxuMTQ1MzpcXHRcXHRcXHRjb25maWctXFx1MDAzZWVlZV9lbmFibGVkX2RlZmF1bHQgPSB0cnVlO1xcbjE0NTQ6XFx0XFx0fVxcbjE0NTU6XFx0XFxuMTQ1NjpcXHRcXHRjb25maWctXFx1MDAzZXdvbF9waHlfc3BlZWRfY3RybCA9IHRydWU7XFxuMTQ1NzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19VU0VfUEhZX1dPTCkge1xcbjE0NTg6XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2V3b2xfcGh5X2xlZ2FjeSA9IHRydWU7XFxuMTQ1OTpcXHRcXHR9IGVsc2Uge1xcbjE0NjA6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAucG10X3JlbW90ZV93YWtlX3VwKVxcbjE0NjE6XFx0XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2V3b2xfbWFjX3N1cHBvcnQgfD0gV0FLRV9VQ0FTVDtcXG4xNDYyOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLnBtdF9tYWdpY19mcmFtZSlcXG4xNDYzOlxcdFxcdFxcdFxcdGNvbmZpZy1cXHUwMDNld29sX21hY19zdXBwb3J0IHw9IFdBS0VfTUFHSUM7XFxuMTQ2NDpcXHRcXHR9XFxuMTQ2NTpcXHRcXG4xNDY2OlxcdFxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShjb25maWcsIGRldl9md25vZGUocHJpdi1cXHUwMDNlZGV2aWNlKSxcXG4xNDY3OlxcdFxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwaHlfaW50ZXJmYWNlLFxcbjE0Njg6XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZzdG1tYWNfcGh5bGlua19tYWNfb3BzKTtcXG4xNDY5OlxcdFxcdGlmIChJU19FUlIocGh5bGluaykpXFxuMTQ3MDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwaHlsaW5rKTtcXG4xNDcxOlxcdFxcbjE0NzI6XFx0XFx0cHJpdi1cXHUwMDNlcGh5bGluayA9IHBoeWxpbms7XFxuMTQ3MzpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6NTkuNjE5MDEzNjM1WiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODIxMzE1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHNlcXVlbmNlLCBhcyBpZiBJIHdlcmUgd29ya2luZyB0aHJvdWdoIGl0OlxuXG4qKlRoaW5raW5nIFRocm91Z2ggUEhZIEluaXRpYWxpemF0aW9uIGFuZCBEZXZpY2UgUmVnaXN0cmF0aW9uKipcblxuQWxyaWdodCwgc28gYHBoeWxpbmtfY3JlYXRlYCBpcyBjbGV2ZXJseSBkZXNpZ25lZCB0byBiZSBmbGV4aWJsZTsgaXQgZG9lc24ndCAqYWJzb2x1dGVseSogbmVlZCBhIFBIWSByaWdodCBvZmYgdGhlIGJhdC4gVGhhdCBtZWFucyBgc3RtbWFjX3BoeWxpbmtfc2V0dXBgIGlzIGdvaW5nIHRvIHNhaWwgdGhyb3VnaCB3aXRob3V0IGFueSBpc3N1ZXMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGRldmljZSByZWdpc3RyYXRpb24gY2FuIGhhcHBlbiwgdGhhbmtzIHRvIHRoZSBzdWJzZXF1ZW50IGByZWdpc3Rlcl9uZXRkZXZgIGNhbGwsIHJpZ2h0PyBTZWVtcyBzdHJhaWdodGZvcndhcmQsIGFuZCB0aGUgZGV2aWNlIGFwcGVhcnMgb24gdGhlIHN5c3RlbS5cblxuTm93LCBhIGNyaXRpY2FsIHRob3VnaHQgYXJpc2VzOiBob3cgZG9lcyBgc3RtbWFjX2h3X2luaXRgIGZpdCBpbnRvIHRoaXMgcGljdHVyZT8gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBpbml0aWFsIGhhcmR3YXJlIHNldHVwLiBJZiB0aGUgZHJpdmVyIHZlcnNpb24sIGB2ZXJzaW9uYCwgaXMgemVybywgYHN0bW1hY19od2lmX2ZpbmRgIHdpbGwgcG9pbnQgdXMgdG8gdGhlIGBEV01BQ19DT1JFX0dNQUM0YCBlbnRyeS4gVGhlIGtleSBpcyB0aGF0IHRoZSBgbWluX2lkYCBpcyB6ZXJvLiBUaGVuLCBgc3RtbWFjX2h3aWZfaW5pdGAgYXNzaWducyB0aGUgZm91bmQgTUFDIGVudHJ5IHRvIGBwcml2LVx1MDAzZWh3YC4gVGhlIGFjdHVhbCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBpcyBraWNrZWQgb2ZmIGluIGBzdG1tYWNfaHdfaW5pdGAuIFNwZWNpZmljYWxseSwgYSBjYWxsIHRvIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYCB3aWxsIG9jY3VyLiBUaGlzIGxpa2VseSBwcm9iZXMgdGhlIGhhcmR3YXJlIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjcxNCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjA2LjAwMTE0OTY1NFoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzNjAzODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2dldF9od19mZWF0dXJlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0zMTQ1PXN0YXRpYyB2b2lkIHN0bW1hY19tbWNfc2V0dXAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zMTU5LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MzE2MDogKiBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzIC0gZ2V0IE1BQyBjYXBhYmlsaXRpZXMgZnJvbSB0aGUgSFcgY2FwLiByZWdpc3Rlci5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTMxNjEtICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zMTY3LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MzE2ODpzdGF0aWMgaW50IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzE2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc0MDc9c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MjEtXFx0LyogR2V0IHRoZSBIVyBjYXBhYmlsaXR5IChuZXcgR01BQyBuZXdlciB0aGFuIDMuNTBhKSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzQyMjpcXHRwcml2LVxcdTAwM2Vod19jYXBfc3VwcG9ydCA9IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDIzLVxcdGlmIChwcml2LVxcdTAwM2Vod19jYXBfc3VwcG9ydCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMTowNi4wNTM1MTY3NTJaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4NzI1MTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgaGFyZHdhcmUgZmVhdHVyZSBkZXRlY3Rpb24gbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBmdW5jdGlvbi4gSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgc3RhbmRhcmQgU1RNMzIgRXRoZXJuZXQgTUFDIGRyaXZlciBoZXJlLCBzbyBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdHlwaWNhbCBwcm9iaW5nIGZvciBjYXBhYmlsaXRpZXMgbGlrZSBqdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWQgc3VwcG9ydCwgYW5kIHBvdGVudGlhbGx5IHNvbWUgZGVzY3JpcHRvciBmb3JtYXQgY29uc2lkZXJhdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiBob3cgdGhlIGRyaXZlcidzIGZlYXR1cmUgZGV0ZWN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlZ2lzdGVyIHNldHRpbmdzLiBJcyB0aGlzIGRvbmUgYXQgcnVudGltZSBvciBhdCBpbml0aWFsaXphdGlvbj8gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIHByZXNlbnRzIGl0cyBjYXBhYmlsaXRpZXMgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFBlcmhhcHMgdGhlcmUncyBhIHBhcnRpY3VsYXIgY29uY2VybiB0byBhZGRyZXNzPyBJcyB0aGVyZSBhIHN1YnRsZSBidWcgb3IgbWlzc2luZyBmZWF0dXJlPyBMZXQncyBjaGVjayB0aGUgY29kZSBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2NTIsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMToxMC45NDA3NzExMTZaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE2OCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE2ODpcXHRzdGF0aWMgaW50IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbjMxNjk6XFx0e1xcbjMxNzA6XFx0XFx0cmV0dXJuIHN0bW1hY19nZXRfaHdfZmVhdHVyZShwcml2LCBwcml2LVxcdTAwM2Vpb2FkZHIsIFxcdTAwMjZwcml2LVxcdTAwM2VkbWFfY2FwKSA9PSAwO1xcbjMxNzE6XFx0fVxcbjMxNzI6XFx0XFxuMzE3MzpcXHQvKipcXG4zMTc0OlxcdCAqIHN0bW1hY19jaGVja19ldGhlcl9hZGRyIC0gY2hlY2sgaWYgdGhlIE1BQyBhZGRyIGlzIHZhbGlkXFxuMzE3NTpcXHQgKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXFxuMzE3NjpcXHQgKiBEZXNjcmlwdGlvbjpcXG4zMTc3OlxcdCAqIGl0IGlzIHRvIHZlcmlmeSBpZiB0aGUgTUFDIGFkZHJlc3MgaXMgdmFsaWQsIGluIGNhc2Ugb2YgZmFpbHVyZXMgaXRcXG4zMTc4OlxcdCAqIGdlbmVyYXRlcyBhIHJhbmRvbSBNQUMgYWRkcmVzc1xcbjMxNzk6XFx0ICovXFxuMzE4MDpcXHRzdGF0aWMgdm9pZCBzdG1tYWNfY2hlY2tfZXRoZXJfYWRkcihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuMzE4MTpcXHR7XFxuMzE4MjpcXHRcXHR1OCBhZGRyW0VUSF9BTEVOXTtcXG4zMTgzOlxcdFxcbjMxODQ6XFx0XFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHByaXYtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpKSB7XFxuMzE4NTpcXHRcXHRcXHRzdG1tYWNfZ2V0X3VtYWNfYWRkcihwcml2LCBwcml2LVxcdTAwM2VodywgYWRkciwgMCk7XFxuMzE4NjpcXHRcXHRcXHRpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSlcXG4zMTg3OlxcdFxcdFxcdFxcdGV0aF9od19hZGRyX3NldChwcml2LVxcdTAwM2VkZXYsIGFkZHIpO1xcbjMxODg6XFx0XFx0XFx0ZWxzZVxcbjMxODk6XFx0XFx0XFx0XFx0ZXRoX2h3X2FkZHJfcmFuZG9tKHByaXYtXFx1MDAzZWRldik7XFxuMzE5MDpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJkZXZpY2UgTUFDIGFkZHJlc3MgJXBNXFxcXG5cXFwiLFxcbjMxOTE6XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbjMxOTI6XFx0XFx0fVxcbjMxOTM6XFx0fVxcbjMxOTQ6XFx0XFxuMzE5NTpcXHRpbnQgc3RtbWFjX2dldF9waHlfaW50Zl9zZWwocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4zMTk2OlxcdHtcXG4zMTk3OlxcdFxcdGludCBwaHlfaW50Zl9zZWwgPSAtRUlOVkFMO1xcbjMxOTg6XFx0XFxuMzE5OTpcXHRcXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgfHxcXG4zMjAwOlxcdFxcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpXFxuMzIwMTpcXHRcXHRcXHRwaHlfaW50Zl9zZWwgPSBQSFlfSU5URl9TRUxfR01JSV9NSUk7XFxuMzIwMjpcXHRcXHRlbHNlIGlmIChwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50ZXJmYWNlKSlcXG4zMjAzOlxcdFxcdFxcdHBoeV9pbnRmX3NlbCA9IFBIWV9JTlRGX1NFTF9SR01JSTtcXG4zMjA0OlxcdFxcdGVsc2UgaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG4zMjA1OlxcdFxcdFxcdHBoeV9pbnRmX3NlbCA9IFBIWV9JTlRGX1NFTF9STUlJO1xcbjMyMDY6XFx0XFx0ZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9SRVZNSUkpXFxuMzIwNzpcXHRcXHRcXHRwaHlfaW50Zl9zZWwgPSBQSFlfSU5URl9TRUxfUkVWTUlJO1xcbjMyMDg6XFx0XFxuMzIwOTpcXHRcXHRyZXR1cm4gcGh5X2ludGZfc2VsO1xcbjMyMTA6XFx0fVxcbjMyMTE6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2dldF9waHlfaW50Zl9zZWwpO1xcbjMyMTI6XFx0XFxuMzIxMzpcXHRzdGF0aWMgaW50IHN0bW1hY19wcmVyZXNldF9jb25maWd1cmUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbjMyMTQ6XFx0e1xcbjMyMTU6XFx0XFx0c3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCA9IHByaXYtXFx1MDAzZXBsYXQ7XFxuMzIxNjpcXHRcXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xcbjMyMTc6XFx0XFx0c3RydWN0IHBoeWxpbmtfcGNzICpwY3M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjEwLjk0MTA5NTM5NloiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzIzMjM0MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU1RNTUFDIERyaXZlciBhbmQgU3l6a2FsbGVyIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdG1tYWNgIGRyaXZlciBjb2RlLiBUaGlzIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVgIGZ1bmN0aW9uLi4uIGlmIGl0IHJldHVybnMgc29tZXRoaW5nIG90aGVyIHRoYW4gemVybywgdGhlbiBgc3RtbWFjX2dldF9od19mZWF0dXJlc2AganVzdCByZXR1cm5zIHplcm8uIElmIGl0ICpkb2VzKiByZXR1cm4gemVybywgaXQganVzdCBvdXRwdXRzIFwiTm8gSFcgRE1BIGZlYXR1cmUgcmVnaXN0ZXIgc3VwcG9ydGVkXCIgYW5kIGtlZXBzIGdvaW5nLiBUaGF0J3MuLi4gaW50ZXJlc3RpbmcuIEVzc2VudGlhbGx5LCB0aGUgZHJpdmVyIHNlZW1zIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSBldmVuIHdpdGggYSBjb21wbGV0ZWx5IGZha2UgUENJIGRldmljZSwgaHVoPyBUaGF0IGNvdWxkIGxlYWQgdG8gc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgZmFsc2UgcG9zaXRpdmVzLlxuXG5XYWl0IGEgc2Vjb25kLi4uIGRvZXNuJ3Qgc3l6a2FsbGVyIGhhdmUgdGhpcyBgdmhjaWAgZGV2aWNlIHRoaW5nIHRoYXQgbGV0cyBpdCBpbmplY3QgUENJIGRldmljZXM/IFRoYXQncyBwZXJmZWN0IGZvciB0ZXN0aW5nIHRoaXMgc29ydCBvZiB0aGluZy4gQnV0IGRvZXMgc3l6a2FsbGVyICphY3R1YWxseSogdGVzdCBgc3RtbWFjYD8gSSBzaG91bGQgY2hlY2suIFVzdWFsbHksIHRoZSBkZWZhdWx0IGRlZmNvbmZpZyBmb3IgdGhlIGtlcm5lbCBkb2Vzbid0IGVuYWJsZSBgQ09ORklHX1NUTU1BQ19FVEhgIG9yIGBDT05GSUdfU1RNTUFDX1BDSWAuIEJ1dCBzeXprYWxsZXIncyBjb25maWcgbWlnaHQgYmUgZGlmZmVyZW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIGdvdCB0aG9zZSBlbmFibGVkLiBUaGVuLCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIGBzdG1tYWNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGV4aXN0aW5nIGNvdmVyYWdlIGZvciB0aGlzIGRyaXZlciBpbiB0aGUgc3l6a2FsbGVyIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzkzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDE6MTguNjY0MzMyMjgyWiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcwMzU2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjE4LjcxMjA0NTE0WiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1Nzc0NDE5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBzdG1tYWMgd2l0aCBTeXprYWxsZXI6IEEgUGxhbioqXG5cbk9rYXksIHNvIHRoZXJlIGFyZW4ndCBhbnkgcHJlLWV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbnMgc3BlY2lmaWNhbGx5IGZvciBgc3RtbWFjYC4uLiBUaGF0J3MgYSBiaXQgb2YgYSBodXJkbGUsIGJ1dCBub3QgaW5zdXJtb3VudGFibGUuIEJ1dCBJIHJlbWVtYmVyIHRoYXQgYHN5emthbGxlcmAgY2FuIGZ1enogaXQgdGhyb3VnaCBgbmV0bGlua2AhIFNwZWNpZmljYWxseSwgdXNpbmcgYHRjIHFkaXNjYCBpZiB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IHByZXNlbnQuIEFuZCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQsIHRoZW4gaXQncyByZWdpc3RlcmVkIGFzIGEgYG5ldGRldmAuXG5cbkFoYSEgU28sIHRoZW4gSSBjYW4gbGV2ZXJhZ2Ugc3l6a2FsbGVyJ3MgYFJUTV9ORVdRRElTQ2AgZnVuY3Rpb25hbGl0eSB0byBhZGQgYW4gYGV0c2AgcWRpc2MuIFdhaXQgYSBtaW51dGUuLi4gYGV0c2AgcWRpc2MgaXMgYSBwcmV0dHkgc3RhbmRhcmQgTGludXggcWRpc2MsIHJpZ2h0PyBOb3RoaW5nIG9ic2N1cmUgb3IgZXhvdGljIGFib3V0IGl0LiBUaGF0J3MgZ29vZCBuZXdzLiBOb3cgSSBuZWVkIHRvIGNoZWNrIGlmIHN5emthbGxlciBoYXMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgYGV0c2AgcWRpc2MuIFRoYXQncyB0aGUgbmV4dCBzdGVwOyBjb25maXJtaW5nIGl0cyBhbHJlYWR5IHN1cHBvcnRlZCwgd2lsbCBzYXZlIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjkzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjI2LjI4OTQ4OTgwMloiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NzAzMzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzeXMvbGludXgvc29ja2V0X25ldGxpbmtfcm91dGVfdGMudHh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMToyNi4zMzQwNjY4NjFaIiwiU2VxIjo3MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MzkyMzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJ2QgYmUgZG9pbmcgYW5kIHdoeTpcblxuKipJbml0aWFsIEludmVzdGlnYXRpb246IFNvY2tldCBOZXRsaW5rIFJvdXRlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlLCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIFRoZSBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIG9idmlvdXNseSBnb2luZyB0byBiZSB0aGF0IGBzeXMvbGludXgvc29ja2V0X25ldGxpbmtfcm91dGUudHh0YCBmaWxlLiBOZXRsaW5rIHJvdXRpbmcgc29ja2V0cyBpbiBMaW51eCBhcmUgdGhlIGxpZmVibG9vZCBvZiBob3cgcm91dGluZyBpbmZvcm1hdGlvbiwgYW5kIHRoZXJlZm9yZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGlzIG1hbmFnZWQuIFRoYXQgZmlsZSB3aWxsLCBhbG1vc3QgY2VydGFpbmx5LCBob2xkIGNyaXRpY2FsIGRvY3VtZW50YXRpb24sIGNvbmZpZ3VyYXRpb24gZGV0YWlscywgYW5kIGxpa2VseSBzb21lIGNydWNpYWwgY29kZSBleGFtcGxlcy4gSSdtIGV4cGVjdGluZyB0aGlzIGZpbGUgdG8gYmUgdGhlIGNhbm9uaWNhbCBzb3VyY2Ugb3IgYXQgbGVhc3QgKmEqIHZlcnkgaW1wb3J0YW50IHJlZmVyZW5jZS4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHN5cy9saW51eC9zb2NrZXRfbmV0bGlua19yb3V0ZS50eHRgIGZpbGUgY29uZmlndXJlcyB0aGUgY29ubmVjdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBjb25maWd1cmF0aW9uIHBvc3NpYmlsaXRpZXMsIGV4cGVjdGVkIHZhbHVlcyBhbmQgdGhlIGdlbmVyYWwgd29ya2Zsb3cgb2YgYW55IGNvbW1hbmRzIGFuZCBjYWxscyBpbnZvbHZlZC4gSSdsbCBuZWVkIHRvIGFic29yYiBob3cgdGhpcyB3b3JrcywgYXQgYSBoaWdoIGxldmVsLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTY2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjMwLjMxNzk5NjIwMVoiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5ODY5MTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzeXMvbGludXgvc29ja2V0X25ldGxpbmtfcm91dGUudHh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMTozMC4zNjQ5OTA3MTlaIiwiU2VxIjo3NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2MjU1OTI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBldHNgIEtlcm5lbCBNb2R1bGUqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGBldHNgIG1vZHVsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIGtlcm5lbCBtb2R1bGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBMaW51eCBzb3VyY2UgdHJlZS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgdW5kZXIgYHN5cy9saW51eC9gLCBhcyB0aGF0J3MgZ2VuZXJhbGx5IHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBzeXN0ZW0tbGV2ZWwgY29tcG9uZW50cy4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGEgZnVuZGFtZW50YWwgZGlhZ25vc3RpYyBzdGVwOyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGV4aXN0ZW5jZSBhbmQgcGxhY2VtZW50IG9mIHRoaXMgbW9kdWxlIGJlZm9yZSBlbWJhcmtpbmcgb24gYW55IGRlZXBlciBhbmFseXNpcy4gSSdtIGVzc2VudGlhbGx5IHBlcmZvcm1pbmcgYSBzYW5pdHkgY2hlY2sgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0eXBpY2FsIG1vZHVsZSBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTU3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDE6MzUuODI3NTUyMTk2WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc0MzY3OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjM1Ljg3NjMwMjg4NFoiLCJTZXEiOjc3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDU0MDY1NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBFVFMgUXVldWUgRGlzY2lwbGluZSoqXG5cblJpZ2h0LCBsZXQgbWUgdGhpbmsuLi4gSSByZWNhbGwgc2VlaW5nIHNvbWV0aGluZyBhYm91dCB0aGUgYGV0c2AgcWRpc2MuIEFoIHllcywgaXQncyBpbXBsZW1lbnRlZCBpbiBgbmV0L3NjaGVkL3NjaF9ldHMuY2AuIFRpbWUgdG8gY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiB0aGF0IHNwZWNpZmljIGZpbGUsIGBzY2hfZXRzLmNgLCBhY3R1YWxseSBleGlzdHMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gR290dGEgZG91YmxlIGNoZWNrIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIHdoZXJlIEkgZXhwZWN0IGl0IHRvIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDE1NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjQzLjkzMDM3MTk2MVoiLCJTZXEiOjc4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NTMwODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRDX1NFVFVQX1FESVNDX0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTk1MD1lbnVtIHRjX3NldHVwX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC05NjYtXFx0VENfU0VUVVBfRlQsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo5Njc6XFx0VENfU0VUVVBfUURJU0NfRVRTLFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtOTY4LVxcdFRDX1NFVFVQX1FESVNDX1RCRixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDE6NDQuMDg0OTExNjM3WiIsIlNlcSI6NzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NDYyMTEwMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIHRoZSBFVFMgUWRpc2MgSW50ZWdyYXRpb24gaW4gU1RNTUFDIERyaXZlcioqXG5cbk9rYXksIHNvIGBUQ19TRVRVUF9RRElTQ19FVFNgIGRlZmluaXRlbHkgZXhpc3RzIOKAkyB0aGF0J3MgYSBnb29kIHN0YXJ0LiBUaGUgbmV4dCBxdWVzdGlvbiBpcywgZG9lcyBzeXprYWxsZXIgYWxyZWFkeSBmdXp6IHRoZSBgZXRzYCBxZGlzYyBkaXJlY3RseT8gSSBkb24ndCBzZWUgc3BlY2lmaWMgZnV6emluZyBmb3IgaXQgbWVudGlvbmVkLCBzbyBpdCdzIGxpa2VseSBzeXprYWxsZXIgd291bGQgcmVseSBvbiBnZW5lcmljIG5ldGxpbmsgYXR0cmlidXRlcywgd2hpY2ggbWlnaHQgYmUgbGVzcyBlZmZlY3RpdmUuIEhtbSwgd2FpdCBhIG1pbnV0ZSwgdGhlIHBhdGNoIGF1dGhvciBpcyBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBUaGlzICpkZWZpbml0ZWx5KiBtZWFucyBzeXprYWxsZXIgZWl0aGVyIGZvdW5kIGEgYnVnIHJlbGF0ZWQgdG8gYGV0c2AsIG9yIHRoaXMgaXMgYSBwYXRjaCBzeXprYWxsZXIgaXMgdGVzdGluZyBmb3IgYSBwb3RlbnRpYWwgYnVnLlxuXG5Ob3csIHRoZSBwcm9tcHQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB0aGlzIGlzIGFscmVhZHkgYXBwbGllZCB0byB0aGUgSEVBRCBjb21taXQuIFNvLCBteSB0YXNrIGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCB0aGF0ICpzaG91bGQqIGJlIGZ1enplZC4gQW5kIHllcywgaXQgZG9lcyEgVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcyBFVFMgcWRpc2Mgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IHRvIHRoZSBzdG1tYWMgZHJpdmVyLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IElmIEkgY2FuIHByb2JlIHRoZSBkcml2ZXIgdGhyb3VnaCBhIGR1bW15IFBDSSBkZXZpY2UsIHRoZSBhbnN3ZXIgaXMgeWVzLiBOb3csIGBzdG1tYWNfcGNpX3Byb2JlYCB1c2VzIGBwY2ltX2VuYWJsZV9kZXZpY2UocGRldilgLiBJZiB0aGUgZGV2aWNlIGlzIGluamVjdGVkIHZpYSBgdmhjaWAsIGl0ICp3aWxsKiBoYXZlIFBDSSBCQVJzLiBUaGUgYHBjaW1faW9tYXBfcmVnaW9uYCBmdW5jdGlvbiB3aWxsIG1hcCB0aGUgQkFSLiBUaGlzIGluIHR1cm4gY2FsbHMgYHN0bW1hY19kdnJfcHJvYmVgLCByaWdodD8gQW5kIHRoYXQgZnVuY3Rpb24sIHllcywgaXQgYWxsb2NhdGVzIG1lbW9yeSwgbWFwcyByZWdpc3RlcnMsIHRoZSB3b3Jrcy4gVGhlIGNhdGNoIGlzIHdoYXQgaGFwcGVucyBpZiB0aGUgQkFScyBhcmVuJ3QgYmFja2VkIGJ5IHJlYWwgaGFyZHdhcmU/IFJlYWRzIG1pZ2h0IHJldHVybiBgMHhmZmZmZmZmZmAgb3IgYDBgLiBJZiBgcmVhZGxgIHJldHVybnMgemVybywgYHN0bW1hY19nZXRfdmVyc2lvbmAgc2V0cyBgc25wc3ZlciA9IDBgLCB0aGVuIHRoZSBkcml2ZXIgY2FsbHMgYHN0bW1hY19od2lmX2ZpbmRgIHdoZXJlIGBtaW5faWQgPSAwYC4gQWZ0ZXJ3YXJkcywgYHN0bW1hY19od19pbml0YCBpcyBjYWxsZWQsIGFuZCB0aGF0IGZ1bmN0aW9uIGNhbGxzIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSWYgdGhhdCByZXR1cm5zIDAsIGl0IHByb2NlZWRzISBJdCB0aGVuIHJlZ2lzdGVycyB0aGUgTURJTyBidXMgYW5kICpmaW5hbGx5KiB0aGUgbmV0ZGV2LiBTbywgdGhlIG5ldGRldiAqd2lsbCogYmUgcmVnaXN0ZXJlZCBldmVuIHdpdGggYSB2aXJ0dWFsIGRldmljZSFcblxuVGhlcmVmb3JlLCB0aGlzIGRyaXZlciAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VIGlmIGEgZHVtbXkgUENJIGRldmljZSB3aXRoIHRoZSByaWdodCBJRCBpcyBpbmplY3RlZC4gQW5kIHN5emthbGxlcidzIGB2aGNpYCBjYW4gaW5qZWN0IGEgUENJIGRldmljZSB3aXRoIGBQQ0lfVkVORE9SX0lEX1NZTk9QU1lTYCBhbmQgYFBDSV9ERVZJQ0VfSURfU1lOT1BTWVNfR01BQzVfSURgICgweDcxMDIpLiBQZXJmZWN0LCBpdCBpcyByZWFjaGFibGUuXG5cbk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IG9uZXMgdG8gZm9jdXMgb24/IFRoZSBwYXRjaCBhZGRzIHRoZXNlOiBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgLCBhbmQgYWxzbyBtb2RpZmllcyBgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRgLCBgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW9gIGFuZCBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYC4gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IGBzdG1tYWNfdGMuY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA0MzcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6MDAuNTQ3MDI0MTEyWiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg1NTY3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNfc2V0dXBfZXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTEyMTY9c3RhdGljIHZvaWQgc3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyMjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM6MTIyNjpzdGF0aWMgaW50IHRjX3NldHVwX2V0c19zY2hlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTIyNy1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyNjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM6MTI2OTpzdGF0aWMgaW50IHRjX3NldHVwX2V0cyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTI3MC1cXHRcXHRcXHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyNzMtXFx0Y2FzZSBUQ19FVFNfUkVQTEFDRTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMjc0OlxcdFxcdHJldHVybiB0Y19zZXR1cF9ldHNfc2NoZWQocHJpdiwgcW9wdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTI3NS1cXHRjYXNlIFRDX0VUU19ERVNUUk9ZOlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM9MTQwMD1jb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTQwNi1cXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjE0MDc6XFx0LnNldHVwX2V0cyA9IHRjX3NldHVwX2V0cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xNDA4LVxcdC5xdWVyeV9jYXBzID0gdGNfcXVlcnlfY2FwcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTE0MTI9Y29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTQxOC1cXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjE0MTk6XFx0LnNldHVwX2V0cyA9IHRjX3NldHVwX2V0cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xNDIwLVxcdC5xdWVyeV9jYXBzID0gdGNfcXVlcnlfY2FwcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6MDAuOTk1NTg5ODA5WiIsIlNlcSI6ODEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NDk1NDA5ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRyYWZmaWMgQ29udHJvbCAodGMpIENvbmZpZ3VyYXRpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB0aGVzZSB0cmFmZmljIGNvbnRyb2wgZnVuY3Rpb25zLiBMZXQncyBzZWUuLi4gdGhlIGtleSBwbGF5ZXJzIGhlcmUgc2VlbSB0byBiZSBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgLCBgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRgLCBgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW9gLCBhbmQgYHRjX3NldHVwX2R3bWFjNTEwX21xcHJpb2AuIEkgaW1tZWRpYXRlbHkgbm90aWNlIHRoYXQgYHRjX3NldHVwX2V0c2AgYW5kIGB0Y19zZXR1cF9ldHNfc2NoZWRgIGFyZSBzdGF0aWMuIFdhaXQuLi4gc2luY2UgYHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0YCBhbmQgYHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvYCBhcmUgZXhwb3J0ZWQsIG1lYW5pbmcgdGhleSdyZSBub3Qgc3RhdGljLCBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGFzc3VtcHRpb24uIFRpbWUgdG8gY29uZmlybSBpZiB0aGVzZSB0d28gYXJlIGluZGVlZCBub3Qgc3RhdGljIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1OTYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6MDcuNDQ1MTM0MjI1WiIsIlNlcSI6ODIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYzNTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDAxPWV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzdG1tYWNfc2ltcGxlX3BtX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDAzOnZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MDQtdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0zNDAwPXN0YXRpYyB2b2lkIHN0bW1hY19zZXRfcmluZ3NfbGVuZ3RoKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzQxNy0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjM0MTg6ICogIHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0IC0gU2V0IFRYIHF1ZXVlIHdlaWdodFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzQxOS0gKiAgQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zNDIxLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MzQyMjp2b2lkIHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTM0MjMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0zNTY2PXN0YXRpYyB2b2lkIHN0bW1hY19tdGxfY29uZmlndXJhdGlvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTM1NzEtXFx0aWYgKHR4X3F1ZXVlc19jb3VudCBcXHUwMDNlIDEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzozNTcyOlxcdFxcdHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzU3My1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTEyMTY9c3RhdGljIHZvaWQgc3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyMTktXFx0cHJpdi1cXHUwMDNlcWRpc2MuZW5hYmxlID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM6MTIyMDpcXHRzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMjIxLVxcdHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHByaXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMjowNy40OTY3NzYxMzRaIiwiU2VxIjo4MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxODE1NDExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBTdGF0aWMgYW5kIE5vbi1TdGF0aWMgRnVuY3Rpb24gRGVjbGFyYXRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgcG9pbnQgaXMgYWJvdXQgZnVuY3Rpb24gc2NvcGUgYW5kIGhvdyBpdCdzIGRlZmluZWQuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGF0IHRoZXJlJ3MgYSBkaXN0aW5jdGlvbiBoZXJlLCBhIGRpZmZlcmVuY2UgaW4gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQuIEkgc2VlIHRoYXQgYHRjX3NldHVwX2R3bWFjNTEwX21xcHJpb2AgaXMsIGluIGZhY3QsIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBJdCdzIG5vdCBtZWFudCB0byBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiBUaGVuLCBJIHJlbWVtYmVyLCB0aGF0IGBzdG1tYWNfc2V0dXBfdGNgLCB0aGUgc2V0dXAgZm9yIHRyYWZmaWMgY29udHJvbCwgaXMgKm5vdCogc3RhdGljLiBJdHMgYSBnbG9iYWwgZnVuY3Rpb24uIFNvLCB0aGF0J3MgYSBkaWZmZXJlbnQgYXBwcm9hY2ggZW50aXJlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODIxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6MTMuMDE0OTM0NDU4WiIsIlNlcSI6ODQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEzMzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfc2V0dXBfdGNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NjM4NT1zdGF0aWMgaW50IHN0bW1hY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy02Mzk0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjM5NTpzdGF0aWMgaW50IHN0bW1hY19zZXR1cF90Y19ibG9ja19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjM5Ni1cXHRcXHRcXHRcXHQgICAgdm9pZCAqY2JfcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NjQyMT1zdGF0aWMgTElTVF9IRUFEKHN0bW1hY19ibG9ja19jYl9saXN0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY0MjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo2NDIzOnN0YXRpYyBpbnQgc3RtbWFjX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY0MjQtXFx0XFx0XFx0ICAgdm9pZCAqdHlwZV9kYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy02NDM1LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnN0bW1hY19ibG9ja19jYl9saXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjQzNjpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0bW1hY19zZXR1cF90Y19ibG9ja19jYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY0MzctXFx0XFx0XFx0XFx0XFx0XFx0ICBwcml2LCBwcml2LCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzMxMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHN0bW1hY19uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MzIxLVxcdC5uZG9fZ2V0X3N0YXRzNjQgPSBzdG1tYWNfZ2V0X3N0YXRzNjQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3MzIyOlxcdC5uZG9fc2V0dXBfdGMgPSBzdG1tYWNfc2V0dXBfdGMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MzIzLVxcdC5uZG9fc2VsZWN0X3F1ZXVlID0gc3RtbWFjX3NlbGVjdF9xdWV1ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6MTMuMDYzMDc1NDc3WiIsIlNlcSI6ODUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MDI3Mzc1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNUTU1BQyBUcmFmZmljIENvbnRyb2wgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHN0bW1hY19zZXR1cF90Y2AgaXMgZGVjbGFyZWQgYHN0YXRpY2AuIFNvIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0cmFmZmljIGNvbnRyb2wgaW4gdGhlIFNUTU1BQyBkcml2ZXIuIEkgcXVpY2tseSBzZWUgdGhhdCBgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRgIGFuZCBgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW9gIGFyZSB0aGUgbm9uLXN0YXRpYyBjYW5kaWRhdGVzLlxuXG5XYWl0IGEgc2Vjb25kLCBJIHJlY2FsbCB0aGF0IGB0Y19zZXR1cF9ldHNgIGlzICphbHNvKiBzdGF0aWMuIFRoaXMgbmVlZHMgY2xvc2VyIHNjcnV0aW55LiBBcmUgdGhlcmUgYW55IG90aGVyIG5ldyBlbnRyaWVzPyBObywganVzdCB0aG9zZSB0d28sIGBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodGAgYW5kIGBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpb2AuXG5cbkFoLCBidXQgbm93IEkgcmVtZW1iZXIsIGBzdG1tYWNfdGNfb3BzYCBwcm92aWRlcyBhIGBzZXR1cF9ldHNgIGNhbGxiYWNrLiBHb3QgaXQuIFNvLCBldmVuIHRob3VnaCBzb21lIGFyZSBzdGF0aWMsIHRoZXkgYXJlICpzdGlsbCogdmlhYmxlLiBPa2F5LCBzbyBteSBsaXN0IGluY2x1ZGVzIGBzdG1tYWNfc2V0dXBfdGNgLCBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodGAsIGBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpb2AsIGFuZCBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYC4gSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgcHJvbXB0IGluZGljYXRlcyBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gSG93ZXZlciwgZXZlbiB0aGUgc3RhdGljIG9uZXMgYXJlIHZhbGlkIGlmIHRoZXkgYXJlIGRpc3RpbmN0LlxuXG5Db25zaWRlcmluZyB0aGUgcHJvbXB0J3MgaW5zdHJ1Y3Rpb24gdG8gcHJlZmVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgY29tcGlsZXIgd29uJ3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5J2xsIGhhdmUgdW5pcXVlIHN5bWJvbCBhZGRyZXNzZXMuIGBzdG1tYWNfc2V0dXBfdGNgIGFuZCBgdGNfc2V0dXBfZXRzYCBhcmUgY2FsbGJhY2tzLCBzbyB0aGV5IGFyZSBub3QgaW5saW5lZC5cblxuTm93LCBsZXQgbWUgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgdGhpbmsgYENPTkZJR19TVE1NQUNfRVRIYCBhbmQgYENPTkZJR19TVE1NQUNfUENJYCBhcmUgcmVsZXZhbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfTkVUX1NDSF9FVFNgIGlzIGFsc28gZW5hYmxlZCwgYXMgdGhpcyBlbmFibGVzIHRoZSBFVFMgcWRpc2MsIGEga2V5IGNvbXBvbmVudCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDcyOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMjoyMS43NjU4MTU1MTVaIiwiU2VxIjo4NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDI4NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU0NIX0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0zNjM9Y29uZmlnIE5FVF9TQ0hfUExVR1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMzg4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjM4OTpjb25maWcgTkVUX1NDSF9FVFNcXG5uZXQvc2NoZWQvS2NvbmZpZy0zOTAtXFx0dHJpc3RhdGUgXFxcIkVuaGFuY2VkIHRyYW5zbWlzc2lvbiBzZWxlY3Rpb24gc2NoZWR1bGVyIChFVFMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMjoyMS44MTE4NDk5NTRaIiwiU2VxIjo4NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1NTQ1MTU1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBTVE1NQUMgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgSSd2ZSBnb3QgaXQuIFdlIGRlZmluaXRlbHkgbmVlZCBgTkVUX1NDSF9FVFNgIGVuYWJsZWQuIFRoYXQgbXVjaCBpcyBjbGVhci4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgd2FycmFudCBhdHRlbnRpb24/IExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMsIGBDT05GSUdfU1RNTUFDX0VUSGAgaGluZ2VzIG9uIGEgZmV3IHRoaW5nczogYENPTkZJR19ORVRERVZJQ0VTYCwgYENPTkZJR19FVEhFUk5FVGAsIGBDT05GSUdfSEFTX0lPTUVNYCwgYW5kIGBDT05GSUdfSEFTX0RNQWAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEFuZCBgQ09ORklHX1NUTU1BQ19QQ0lgIGJ1aWxkcyBvbiBgQ09ORklHX1NUTU1BQ19FVEhgLCBuYXR1cmFsbHksIGJ1dCBhbHNvIHJlcXVpcmVzIGBDT05GSUdfUENJYC4gVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYCBmaWxlIGRpcmVjdGx5LiBUaGF0J3MgdGhlIGJlc3QgcGxhY2UgdG8gY29uZmlybSBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2ODYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6MzUuMzY2MzY4NjM4WiIsIlNlcSI6ODgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk5MTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RNTUFDX1BDSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mzk4PWNvbmZpZyBEV01BQ19NT1RPUkNPTU1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6NDA3OmNvbmZpZyBTVE1NQUNfUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXFx0dHJpc3RhdGUgXFxcIlNUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAyOjM1LjQxNDM2OTIxNloiLCJTZXEiOjg5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTczNDQ2NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSB3ZWxsLXZlcnNlZCBpbiBlbWJlZGRlZCBuZXR3b3JraW5nIGFuZCBMaW51eCBkZXZpY2UgZHJpdmVyczpcblxuKipBbmFseXppbmcgdGhlIFNUTU1BQyBQQ0kgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBoZWFydCBvZiB0aGUgU1RNTUFDIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBQQ0kgYXNwZWN0cy4gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9gIGRpcmVjdG9yeS4gVGhlIGZvY3VzLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGFyb3VuZCB0aGUgYFNUTU1BQ19QQ0lgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpcyBjb25maWd1cmVkIHdoZW4gaXQncyBvcGVyYXRpbmcgb24gYSBQQ0kgaW50ZXJmYWNlLlxuXG5JJ20gcHJvYmFibHkgbG9va2luZyBmb3I6XG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBmZWF0dXJlcyBvciBkcml2ZXJzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYFNUTU1BQ19QQ0lgIHRvIGJlIGF2YWlsYWJsZT9cbiogICAqKkRlcGVuZGVuY2llcyBvZiB0aGUgRGV2aWNlOioqIEhvdyBpcyB0aGUgY29uZmlndXJhdGlvbiBvZiBgU1RNTUFDX1BDSWAgZGVwZW5kYW50IG9uIG90aGVyIGZlYXR1cmVzIG9mIHRoZSBkZXZpY2U/XG4qICAgKipEZWZhdWx0IFNldHRpbmdzOioqIFdoYXQgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyBhbmQgc2V0dGluZ3Mgd2hlbiBhIFNUTU1BQyBpcyBjb25maWd1cmVkIG9uIGEgUENJIGRldmljZT9cbiogICAqKkRvY3VtZW50YXRpb246KiogSXMgdGhlcmUgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB3aXRoaW4gdGhlIGBLY29uZmlnYCBmaWxlIHRoYXQgZXhwbGFpbnMgdGhlIHB1cnBvc2Ugb3IgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIHRoaXMgb3B0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc3RyYWludHMgYW5kIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBQQ0kgc3VwcG9ydCBmb3IgdGhlIFNUTU1BQy5cblxuVGhlIGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIFBDSS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGludGVyYWN0aW9ucyB3aXRoIHRoZSBQQ0kgYnVzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkZXBlbmRpbmcgb24gd2hldGhlciBgU1RNTUFDX1BDSWAgaXMgc2V0LiBUaGlzIGlzIGNydWNpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBQQ0ktcmVsYXRlZCBpc3N1ZXMgYW5kIHRhaWxvcmluZyB0aGUgZHJpdmVyIHRvIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3Jtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxNTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMjo0Mi45ODc4MTk3MzlaIiwiU2VxIjo5MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gNDAxOlxcdFxcdHNlbGVjdCBNT1RPUkNPTU1fUEhZXFxuIDQwMjpcXHRcXHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxcbiA0MDM6XFx0XFx0aGVscFxcbiA0MDQ6XFx0XFx0ICBUaGlzIGVuYWJsZXMgZ2x1ZSBkcml2ZXIgZm9yIE1vdG9yY29tbSBEV01BQy1iYXNlZCBQQ0kgRXRoZXJuZXRcXG4gNDA1OlxcdFxcdCAgY29udHJvbGxlcnMuIEN1cnJlbnRseSBvbmx5IFlUNjgwMSBpcyBzdXBwb3J0ZWQuXFxuIDQwNjpcXHRcXG4gNDA3OlxcdGNvbmZpZyBTVE1NQUNfUENJXFxuIDQwODpcXHRcXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBDSSBidXMgc3VwcG9ydFxcXCJcXG4gNDA5OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuIDQxMDpcXHRcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcXG4gNDExOlxcdFxcdHNlbGVjdCBTVE1NQUNfTElCUENJXFxuIDQxMjpcXHRcXHRoZWxwXFxuIDQxMzpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxcbiA0MTQ6XFx0XFx0ICBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIG9uIFhMSU5YIFhDMlYzMDAwIEZGMTE1MkFNVDAyMjFcXG4gNDE1OlxcdFxcdCAgRDEyMTU5OTRBIFZJUlRFWCBGUEdBIGJvYXJkIGFuZCBTTlBTIFFvUyBJUEsgUHJvdG90eXBpbmcgS2l0LlxcbiA0MTY6XFx0XFxuIDQxNzpcXHRcXHQgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6NDIuOTg3OTEwNTI5WiIsIlNlcSI6OTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NzM0MDEwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBkZXBlbmRlbmNpZXMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRlY29kaW5nIHRoZSBIYXJkd2FyZSBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGNydWNpYWwgaW50ZXJkZXBlbmRlbmNpZXMuIEkgc2VlIHRoYXQgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBoaW5nZXMsIHF1aXRlIGZ1bmRhbWVudGFsbHksIG9uIHRoZSBwcmVzZW5jZSBhbmQgcHJvcGVyIGNvbmZpZ3VyYXRpb24gb2YgYFBDSWAgYW5kIGBDT01NT05fQ0xLYC4gVGhvc2UgYXJlIHRoZSBiYXNlbGluZSByZXF1aXJlbWVudHMuIEFmdGVyIHRoYXQsIEkgbm90aWNlIHRoZSBkZXBlbmRlbmN5IG9mIGBTVE1NQUNfRVRIYCBvbiBib3RoIGBIQVNfSU9NRU1gIGFuZCBgSEFTX0RNQWAuIFRoaXMgaW5kaWNhdGVzIHRoZSBuZWVkIGZvciBtZW1vcnktbWFwcGVkIEkvTyBjYXBhYmlsaXRpZXMgYW5kIGRpcmVjdCBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIHBlcmZlY3RseSBsb2dpY2FsIGdpdmVuIHdoYXQgSSBrbm93IGFib3V0IEV0aGVybmV0IE1BQ3MuIEl0J3MgYWxsIGFib3V0IGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSB3aXJlZCB0b2dldGhlci4gV2l0aG91dCB0aGVzZSBiYXNpYyBidWlsZGluZyBibG9ja3MsIHRoaXMgc3BlY2lmaWMgRXRoZXJuZXQgY29udHJvbGxlciBpc24ndCBnb2luZyB0byBmdW5jdGlvbiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGlzIGlzIGEgc3RhbmRhcmQgc2V0dXAsIGJ1dCBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgd2hlbiB0aGUgc3lzdGVtIHNldHVwIGlzIG1vcmUgY29tcGxleC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5MDEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAyOjUxLjQ2MTMxNTE5NVoiLCJTZXEiOjkyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU1RNTUFDX0VUSFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IEhBU19ETUFcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gRVRIVE9PTF9ORVRMSU5LXFxuICAgNzpcXHRcXHRzZWxlY3QgTUlJXFxuICAgODpcXHRcXHRzZWxlY3QgUENTX1hQQ1NcXG4gICA5OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDEwOlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDEyOlxcdFxcdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXFxuICAxMzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDE0OlxcdFxcdGhlbHBcXG4gIDE1OlxcdFxcdCAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgRXRoZXJuZXQgSVBzIGJ1aWx0IGFyb3VuZCBhXFxuICAxNjpcXHRcXHQgIFN5bm9wc3lzIElQIENvcmUuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGlmIFNUTU1BQ19FVEhcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIFNUTU1BQ19TRUxGVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6NTEuNDYxNDExNDE1WiIsIlNlcSI6OTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjY3OTc3NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTdG1tYWMgRVRTIE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfUENJYCwgYW5kIGBORVRfU0NIX0VUU2AgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgaGVyZS4gV2UgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlLlxuXG5Ob3csIGZvciBhIHF1aWNrIHN1bW1hcnkgb2YgdGhlIGtleSBmaW5kaW5nczogVGhpcyBwYXRjaCBzZWVtcyBlbWluZW50bHkgZnV6emFibGUuIEl0IGxvb2tzIGxpa2UgaXQncyB3b3J0aCB0aGUgdGltZSB0byBpbnZlc3RpZ2F0ZSAoYFdvcnRoRnV6emluZzogdHJ1ZWApLlxuXG5UaGUgZXNzZW50aWFsIGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcgYXJlOiBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgLCBgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRgLCBgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW9gLCBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYCwgYW5kIGBzdG1tYWNfc2V0dXBfdGNgLiBUaGVzZSBhcmUgbXkgaW5pdGlhbCBhcmVhcyBvZiBpbnRlcmVzdCBiYXNlZCBvbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC5cblxuVGhlIGNvbmZpZ3MgdGhhdCBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGFyZTogYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGFuZCBgTkVUX1NDSF9FVFNgLlxuXG5NeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuIFRoaXMgbWVhbnMgdGhlIGRyaXZlciBpcyBiZWluZyBtb2RpZmllZCB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZCwgc28gdGhlIGxpc3RlZCBmdW5jdGlvbnMgc2hvdWxkIGJlIGludGVyYWN0aW5nIHdpdGggdGhhdCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBXaGF0IG1ha2VzIHRoaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGFuZCBsaWtlbHkgZnV6emFibGUsIGlzIHRoYXQgdGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHRlc3RlZCBpbiBRRU1VIHVzaW5nIGEgZHVtbXkgUENJIGRldmljZSDigJMgc3l6a2FsbGVyJ3MgdmhjaSwgd2hpY2ggaXMgaGVscGZ1bC4gQW5kIHRoZSBFVFMgcWRpc2MgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgbmV0bGluaywgd2hpY2ggbWVhbnMgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBjYW4gYmUgZnV6emVkLiBJdCBsb29rcyBsaWtlIGEgZ29vZCB0YXJnZXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDI3LCJPdXRwdXRUb2tlbnMiOjIyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAzOjAxLjcyOTM5MzE1NloiLCJTZXEiOjk0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4Njc5MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJORVRfU0NIX0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX3NldHVwX2V0c1wiLFxuICAgIFwidGNfc2V0dXBfZXRzX3NjaGVkXCIsXG4gICAgXCJzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdcIixcbiAgICBcInN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0XCIsXG4gICAgXCJzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpb1wiLFxuICAgIFwidGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvXCIsXG4gICAgXCJzdG1tYWNfc2V0dXBfdGNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCB0byB0aGUgc3RtbWFjIGRyaXZlci4gSXQgbW9kaWZpZXMgdGhlIGRyaXZlciB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZC4gVGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBRRU1VIHZpYSBhIGR1bW15IFBDSSBkZXZpY2UgKHVzaW5nIHN5emthbGxlcidzIHZoY2kpLCBhbmQgdGhlIEVUUyBxZGlzYyBjYW4gYmUgY29uZmlndXJlZCB2aWEgbmV0bGluaywgbWFraW5nIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIGZ1enphYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNUTU1BQ19FVEhcIixcbiAgICBcIlNUTU1BQ19QQ0lcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNfc2V0dXBfZXRzXCIsXG4gICAgXCJ0Y19zZXR1cF9ldHNfc2NoZWRcIixcbiAgICBcInN0bW1hY19xZGlzY19yZXN0b3JlX2R0X2NvbmZpZ1wiLFxuICAgIFwic3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRcIixcbiAgICBcInN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvXCIsXG4gICAgXCJ0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9cIixcbiAgICBcInN0bW1hY19zZXR1cF90Y1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRVRTIChFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKSBxZGlzYyBvZmZsb2FkIHRvIHRoZSBzdG1tYWMgZHJpdmVyLiBJdCBtb2RpZmllcyB0aGUgZHJpdmVyIHRvIGNvbmZpZ3VyZSBoYXJkd2FyZSBxdWV1ZXMgd2hlbiB0aGUgRVRTIHFkaXNjIGlzIGF0dGFjaGVkLiBUaGUgc3RtbWFjIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIFFFTVUgdmlhIGEgZHVtbXkgUENJIGRldmljZSAodXNpbmcgc3l6a2FsbGVyJ3MgdmhjaSksIGFuZCB0aGUgRVRTIHFkaXNjIGNhbiBiZSBjb25maWd1cmVkIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhpcyBjb2RlIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k9x8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 09:55:42 +0000 UTC FinishedAt: 2026-08-07 10:03:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b0057c68df711bf6a62033c072ac61c4f9d3cbc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI", "NET_SCH_ETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b0057c68df711bf6a62033c072ac61c4f9d3cbc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI", "NET_SCH_ETS" ], "series_id": "a3a34828-8379-4cec-939e-2d48b8ab88f9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tc_setup_ets", "tc_setup_ets_sched", "stmmac_qdisc_restore_dt_config", "stmmac_set_tx_queue_weight", "stmmac_mac_config_tx_queues_prio", "tc_setup_dwmac510_mqprio", "stmmac_setup_tc" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX3NldHVwX2V0cyYjMzQ7LAogICAgJiMzNDt0Y19zZXR1cF9ldHNfc2NoZWQmIzM0OywKICAgICYjMzQ7c3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnJiMzNDssCiAgICAmIzM0O3N0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0JiMzNDssCiAgICAmIzM0O3N0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvJiMzNDssCiAgICAmIzM0O3RjX3NldHVwX2R3bWFjNTEwX21xcHJpbyYjMzQ7LAogICAgJiMzNDtzdG1tYWNfc2V0dXBfdGMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pIHFkaXNjIG9mZmxvYWQgdG8gdGhlIHN0bW1hYyBkcml2ZXIuIEl0IG1vZGlmaWVzIHRoZSBkcml2ZXIgdG8gY29uZmlndXJlIGhhcmR3YXJlIHF1ZXVlcyB3aGVuIHRoZSBFVFMgcWRpc2MgaXMgYXR0YWNoZWQuIFRoZSBzdG1tYWMgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gUUVNVSB2aWEgYSBkdW1teSBQQ0kgZGV2aWNlICh1c2luZyBzeXprYWxsZXImIzM5O3MgdmhjaSksIGFuZCB0aGUgRVRTIHFkaXNjIGNhbiBiZSBjb25maWd1cmVkIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhpcyBjb2RlIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNWUwZjk1YjlhOGQ4N2Q1MDM1ZmYzNzQxY2FlYzM1ZTg5MTU4NWNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwOTo1NzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbmluZGV4IDA0ZGFmZWMwMjFiNGYuLmI3MDg4M2E1M2IwOWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuQEAgLTU4MCw2ICYjNDM7NTgwLDggQEAgc3RydWN0IHN0bW1hY190Y19vcHMge1xuIFx0XHRcdCAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqcW9wdCk7XG4gXHRpbnQgKCpzZXR1cF9ldGYpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiBcdFx0XHQgc3RydWN0IHRjX2V0Zl9xb3B0X29mZmxvYWQgKnFvcHQpO1xuJiM0MztcdGludCAoKnNldHVwX2V0cykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuJiM0MztcdFx0XHQgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpO1xuIFx0aW50ICgqcXVlcnlfY2Fwcykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdCAgc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSk7XG4gXHRpbnQgKCpzZXR1cF9tcXByaW8pKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbkBAIC01OTgsNiAmIzQzOzYwMCw4IEBAIHN0cnVjdCBzdG1tYWNfdGNfb3BzIHtcbiBcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBzZXR1cF90YXByaW8sIF9fYXJncylcbiAjZGVmaW5lIHN0bW1hY190Y19zZXR1cF9ldGYoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG4gXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0Yywgc2V0dXBfZXRmLCBfX2FyZ3MpXG4mIzQzOyNkZWZpbmUgc3RtbWFjX3RjX3NldHVwX2V0cyhfX3ByaXYsIF9fYXJncy4uLikgXFxcbiYjNDM7XHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0Yywgc2V0dXBfZXRzLCBfX2FyZ3MpXG4gI2RlZmluZSBzdG1tYWNfdGNfcXVlcnlfY2FwcyhfX3ByaXYsIF9fYXJncy4uLikgXFxcbiBcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBxdWVyeV9jYXBzLCBfX2FyZ3MpXG4gI2RlZmluZSBzdG1tYWNfdGNfc2V0dXBfbXFwcmlvKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcbmluZGV4IDhiYThmMDNlMWNlMDMuLjFiYjI2MWZkY2IwZTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcbkBAIC0zMDEsNiAmIzQzOzMwMSwxMiBAQCBzdHJ1Y3Qgc3RtbWFjX3ByaXYge1xuIFx0LyogUHJvdGVjdCBlc3QgcGFyYW1ldGVycyAqL1xuIFx0c3RydWN0IG11dGV4IGVzdF9sb2NrO1xuIFx0c3RydWN0IHN0bW1hY19lc3QgKmVzdDtcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0Ym9vbCBlbmFibGU7XG4mIzQzO1x0XHR1OCBhbGdvO1xuJiM0MztcdFx0dTMyIHF1YW50YVtNVExfTUFYX1RYX1FVRVVFU107XG4mIzQzO1x0XHR1MzIgcHJpb1tNVExfTUFYX1RYX1FVRVVFU107XG4mIzQzO1x0fSBxZGlzYztcbiBcdHN0cnVjdCBkbWFfZmVhdHVyZXMgZG1hX2NhcDtcbiBcdHN0cnVjdCBzdG1tYWNfY291bnRlcnMgbW1jO1xuIFx0aW50IGh3X2NhcF9zdXBwb3J0O1xuQEAgLTM5NCw2ICYjNDM7NDAwLDggQEAgZW51bSBzdG1tYWNfc3RhdGUge1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzdG1tYWNfc2ltcGxlX3BtX29wcztcbiBcbiYjNDM7dm9pZCBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuJiM0Mzt2b2lkIHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4gaW50IHN0bW1hY19tZGlvX3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIGludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gaW50IHN0bW1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICptaWkpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5pbmRleCBjNzI5YWIxMjdhZmQ1Li5jMjc4NmVjY2E1MzAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuQEAgLTM0MTksMTQgJiM0MzszNDE5LDE4IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19zZXRfcmluZ3NfbGVuZ3RoKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiAgKiAgQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxuICAqICBEZXNjcmlwdGlvbjogSXQgaXMgdXNlZCBmb3Igc2V0dGluZyBUWCBxdWV1ZXMgd2VpZ2h0XG4gICovXG4tc3RhdGljIHZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt2b2lkIHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiB7XG4gXHR1OCB0eF9xdWV1ZXNfY291bnQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZTtcbiBcdHUzMiB3ZWlnaHQ7XG4gXHR1OCBxdWV1ZTtcbiBcbiBcdGZvciAocXVldWUgPSAwOyBxdWV1ZSBcdTAwM2MgdHhfcXVldWVzX2NvdW50OyBxdWV1ZSYjNDM7JiM0MzspIHtcbi1cdFx0d2VpZ2h0ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLndlaWdodDtcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXFkaXNjLmVuYWJsZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZXFkaXNjLmFsZ28gPT0gTVRMX1RYX0FMR09SSVRITV9EV1JSKVxuJiM0MztcdFx0XHR3ZWlnaHQgPSBwcml2LVx1MDAzZXFkaXNjLnF1YW50YVtxdWV1ZV07XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHdlaWdodCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS53ZWlnaHQ7XG4gXHRcdHN0bW1hY19zZXRfbXRsX3R4X3F1ZXVlX3dlaWdodChwcml2LCBwcml2LVx1MDAzZWh3LCB3ZWlnaHQsIHF1ZXVlKTtcbiBcdH1cbiB9XG5AQCAtMzQ5OSwxNyAmIzQzOzM1MDMsMjAgQEAgc3RhdGljIHZvaWQgc3RtbWFjX21hY19jb25maWdfcnhfcXVldWVzX3ByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4gICogIERlc2NyaXB0aW9uOiBJdCBpcyB1c2VkIGZvciBjb25maWd1cmluZyB0aGUgVFggUXVldWUgUHJpb3JpdHlcbiAgKi9cbi1zdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4mIzQzO3ZvaWQgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbiBcdHU4IHR4X3F1ZXVlc19jb3VudCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlO1xuIFx0dTggcXVldWU7XG4tXHR1MzIgcHJpbztcbiBcbiBcdGZvciAocXVldWUgPSAwOyBxdWV1ZSBcdTAwM2MgdHhfcXVldWVzX2NvdW50OyBxdWV1ZSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKCFwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1txdWV1ZV0udXNlX3ByaW8pXG4tXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR1MzIgcHJpbyA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHByaXYtXHUwMDNlcWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX1NQKVxuJiM0MztcdFx0XHRwcmlvID0gcHJpdi1cdTAwM2VxZGlzYy5wcmlvW3F1ZXVlXTtcbiYjNDM7XHRcdGVsc2UgaWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS51c2VfcHJpbylcbiYjNDM7XHRcdFx0cHJpbyA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS5wcmlvO1xuIFxuLVx0XHRwcmlvID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLnByaW87XG4gXHRcdHN0bW1hY190eF9xdWV1ZV9wcmlvKHByaXYsIHByaXYtXHUwMDNlaHcsIHByaW8sIHF1ZXVlKTtcbiBcdH1cbiB9XG5AQCAtMzU3MCw5ICYjNDM7MzU3NywxNSBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfbXRsX2NvbmZpZ3VyYXRpb24oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3NjaGVkX2FsZ29yaXRobSk7XG4gXG4gXHQvKiBDb25maWd1cmUgTVRMIFRYIGFsZ29yaXRobXMgKi9cbi1cdGlmICh0eF9xdWV1ZXNfY291bnQgXHUwMDNlIDEpXG4tXHRcdHN0bW1hY19wcm9nX210bF90eF9hbGdvcml0aG1zKHByaXYsIHByaXYtXHUwMDNlaHcsXG4tXHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfc2NoZWRfYWxnb3JpdGhtKTtcbiYjNDM7XHRpZiAodHhfcXVldWVzX2NvdW50IFx1MDAzZSAxKSB7XG4mIzQzO1x0XHR1OCB0eF9zY2hlZF9hbGdvO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXFkaXNjLmVuYWJsZSlcbiYjNDM7XHRcdFx0dHhfc2NoZWRfYWxnbyA9IHByaXYtXHUwMDNlcWRpc2MuYWxnbztcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dHhfc2NoZWRfYWxnbyA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9zY2hlZF9hbGdvcml0aG07XG4mIzQzO1x0XHRzdG1tYWNfcHJvZ19tdGxfdHhfYWxnb3JpdGhtcyhwcml2LCBwcml2LVx1MDAzZWh3LCB0eF9zY2hlZF9hbGdvKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBDb25maWd1cmUgQ0JTIGluIEFWQiBUWCBxdWV1ZXMgKi9cbiBcdGlmICh0eF9xdWV1ZXNfY291bnQgXHUwMDNlIDEpXG5AQCAtNjQyOCw2ICYjNDM7NjQ0MSw4IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0cmV0dXJuIHN0bW1hY190Y19zZXR1cF90YXByaW8ocHJpdiwgcHJpdiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfRVRGOlxuIFx0XHRyZXR1cm4gc3RtbWFjX3RjX3NldHVwX2V0Zihwcml2LCBwcml2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfRVRTOlxuJiM0MztcdFx0cmV0dXJuIHN0bW1hY190Y19zZXR1cF9ldHMocHJpdiwgcHJpdiwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jXG5pbmRleCAxNGNhYmU3NmU1M2VjLi4zYmE3MWJlMjRjNjQ4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jXG5AQCAtMTIxMCw2ICYjNDM7MTIxMCw4MyBAQCBzdGF0aWMgaW50IHRjX3NldHVwX2V0ZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIE1heCBxdWFudHVtIHZhbHVlIHN1cHBvcnRlZCBieSB0aGUgTVRMIERXUlIgc2NoZWR1bGVyICovXG4mIzQzOyNkZWZpbmUgTVRMX1RYUV9XRUlHSFRfUVVBTlRVTV9NQVhcdDB4MTMxMmQwXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0LyogcmVzZXQgdG8gdGhlIGR0IGNvbmZpZ3VyZWQgYWxnb3JpdGhtLiAqL1xuJiM0MztcdHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlID0gZmFsc2U7XG4mIzQzO1x0c3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQocHJpdik7XG4mIzQzO1x0c3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8ocHJpdik7XG4mIzQzO1x0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cdTAwM2VodyxcbiYjNDM7XHRcdFx0XHQgICAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfc2NoZWRfYWxnb3JpdGhtKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0Y19zZXR1cF9ldHNfc2NoZWQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwID0gXHUwMDI2cW9wdC1cdTAwM2VyZXBsYWNlX3BhcmFtcztcbiYjNDM7XHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBkYXRhID0gcHJpdi1cdTAwM2VwbGF0O1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VwYXJlbnQgIT0gVENfSF9ST09UKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHAtXHUwMDNlYmFuZHMgXHUwMDNlIHBkYXRhLVx1MDAzZXR4X3F1ZXVlc190b191c2UpXG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZGF0YS1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTMyIHF1YW50dW0gPSAwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwZGF0YS1cdTAwM2V0eF9xdWV1ZXNfY2ZnW2ldLm1vZGVfdG9fdXNlID09IE1UTF9RVUVVRV9BVkIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGkgXHUwMDNjIHAtXHUwMDNlYmFuZHMpIHtcbiYjNDM7XHRcdFx0aWYgKCFwLVx1MDAzZXF1YW50YVtpXSlcbiYjNDM7XHRcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHAtXHUwMDNlcXVhbnRhW2ldIFx1MDAzZSBNVExfVFhRX1dFSUdIVF9RVUFOVFVNX01BWClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdFx0cXVhbnR1bSA9IHAtXHUwMDNlcXVhbnRhW2ldO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHByaXYtXHUwMDNlcWRpc2MucXVhbnRhW2ldID0gcXVhbnR1bTtcbiYjNDM7XHRcdHN0bW1hY19zZXRfbXRsX3R4X3F1ZXVlX3dlaWdodChwcml2LCBwcml2LVx1MDAzZWh3LCBxdWFudHVtLCBpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0bW1hY19wcm9nX210bF90eF9hbGdvcml0aG1zKHByaXYsIHByaXYtXHUwMDNlaHcsIE1UTF9UWF9BTEdPUklUSE1fRFdSUik7XG4mIzQzO1x0cHJpdi1cdTAwM2VxZGlzYy5hbGdvID0gTVRMX1RYX0FMR09SSVRITV9EV1JSO1xuJiM0MztcdHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2Vycm9yOlxuJiM0MztcdHN0bW1hY19xZGlzY19yZXN0b3JlX2R0X2NvbmZpZyhwcml2KTtcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdGNfc2V0dXBfZXRzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHFvcHQtXHUwMDNlY29tbWFuZCkge1xuJiM0MztcdGNhc2UgVENfRVRTX1JFUExBQ0U6XG4mIzQzO1x0XHRyZXR1cm4gdGNfc2V0dXBfZXRzX3NjaGVkKHByaXYsIHFvcHQpO1xuJiM0MztcdGNhc2UgVENfRVRTX0RFU1RST1k6XG4mIzQzO1x0XHRzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcocHJpdik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFRDX0VUU19TVEFUUzpcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXFkaXNjLmVuYWJsZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZXFkaXNjLmFsZ28gPT0gTVRMX1RYX0FMR09SSVRITV9EV1JSKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHRjX3F1ZXJ5X2NhcHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdCBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKVxuIHtcbkBAIC0xMjQ1LDE3ICYjNDM7MTMyMiwxOSBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0bmV0ZGV2X3Jlc2V0X3RjKG5kZXYpO1xuIFx0bmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZSk7XG4gXHRzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIG5kZXYsIGV4dGFjaywgMCk7XG4mIzQzO1x0c3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHByaXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHRjX3NldHVwX2R3bWFjNTEwX21xcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiB7XG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXHUwMDNlZXh0YWNrO1xuJiM0MztcdHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGRhdGEgPSBwcml2LVx1MDAzZXBsYXQ7XG4gXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiBcdHUzMiBvZmZzZXQsIGNvdW50LCBudW1fc3RhY2tfdHhfcXVldWVzID0gMDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi1cdTAwM2VkZXY7XG4gXHR1MzIgbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4tXHRpbnQgZXJyO1xuJiM0MztcdGludCBpLCB0YywgZXJyO1xuIFxuIFx0aWYgKCFudW1fdGMpIHtcbiBcdFx0c3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhuZGV2LCBleHRhY2spO1xuQEAgLTEyODUsNiAmIzQzOzEzNjQsMjMgQEAgc3RhdGljIGludCB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfcmVzZXRfdGM7XG4gXG4mIzQzO1x0LyogUXVldWVzIG5vdCBtYXBwZWQgdG8gYW55IFRDIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwcmlvcml0eSAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkYXRhLVx1MDAzZXR4X3F1ZXVlc190b191c2U7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXFkaXNjLnByaW9baV0gPSAwO1xuJiM0MztcdFx0c3RtbWFjX3R4X3F1ZXVlX3ByaW8ocHJpdiwgcHJpdi1cdTAwM2VodywgMCwgaSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIG51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGkgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIGkgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSAmIzQzOyBxb3B0LVx1MDAzZWNvdW50W3RjXTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VxZGlzYy5wcmlvW2ldID0gdGM7XG4mIzQzO1x0XHRcdHN0bW1hY190eF9xdWV1ZV9wcmlvKHByaXYsIHByaXYtXHUwMDNlaHcsIHRjLCBpKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cdTAwM2VodywgTVRMX1RYX0FMR09SSVRITV9TUCk7XG4mIzQzO1x0cHJpdi1cdTAwM2VxZGlzYy5hbGdvID0gTVRMX1RYX0FMR09SSVRITV9TUDtcbiYjNDM7XHRwcml2LVx1MDAzZXFkaXNjLmVuYWJsZSA9IHRydWU7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3Jlc2V0X3RjOlxuQEAgLTEzMDgsNiAmIzQzOzE0MDQsNyBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzID0ge1xuIFx0LnNldHVwX2NscyA9IHRjX3NldHVwX2NscyxcbiBcdC5zZXR1cF90YXByaW8gPSB0Y19zZXR1cF90YXByaW9fd2l0aG91dF9mcGUsXG4gXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxuJiM0MztcdC5zZXR1cF9ldHMgPSB0Y19zZXR1cF9ldHMsXG4gXHQucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsXG4gXHQuc2V0dXBfbXFwcmlvID0gdGNfc2V0dXBfbXFwcmlvX3VuaW1wbGVtZW50ZWQsXG4gfTtcbkBAIC0xMzE5LDYgJiM0MzsxNDE2LDcgQEAgY29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzID0ge1xuIFx0LnNldHVwX2NscyA9IHRjX3NldHVwX2NscyxcbiBcdC5zZXR1cF90YXByaW8gPSB0Y19zZXR1cF90YXByaW8sXG4gXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxuJiM0MztcdC5zZXR1cF9ldHMgPSB0Y19zZXR1cF9ldHMsXG4gXHQucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsXG4gXHQuc2V0dXBfbXFwcmlvID0gdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvLFxuIH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX3NldHVwX2V0cyYjMzQ7LAogICAgJiMzNDt0Y19zZXR1cF9ldHNfc2NoZWQmIzM0OywKICAgICYjMzQ7c3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnJiMzNDssCiAgICAmIzM0O3N0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0JiMzNDssCiAgICAmIzM0O3N0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvJiMzNDssCiAgICAmIzM0O3RjX3NldHVwX2R3bWFjNTEwX21xcHJpbyYjMzQ7LAogICAgJiMzNDtzdG1tYWNfc2V0dXBfdGMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pIHFkaXNjIG9mZmxvYWQgdG8gdGhlIHN0bW1hYyBkcml2ZXIuIEl0IG1vZGlmaWVzIHRoZSBkcml2ZXIgdG8gY29uZmlndXJlIGhhcmR3YXJlIHF1ZXVlcyB3aGVuIHRoZSBFVFMgcWRpc2MgaXMgYXR0YWNoZWQuIFRoZSBzdG1tYWMgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gUUVNVSB2aWEgYSBkdW1teSBQQ0kgZGV2aWNlICh1c2luZyBzeXprYWxsZXImIzM5O3MgdmhjaSksIGFuZCB0aGUgRVRTIHFkaXNjIGNhbiBiZSBjb25maWd1cmVkIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhpcyBjb2RlIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNWUwZjk1YjlhOGQ4N2Q1MDM1ZmYzNzQxY2FlYzM1ZTg5MTU4NWNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAwOTo1NzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaAppbmRleCAwNGRhZmVjMDIxYjRmLi5iNzA4ODNhNTNiMDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oCkBAIC01ODAsNiAmIzQzOzU4MCw4IEBAIHN0cnVjdCBzdG1tYWNfdGNfb3BzIHsKIAkJCSAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqcW9wdCk7CiAJaW50ICgqc2V0dXBfZXRmKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJCQkgc3RydWN0IHRjX2V0Zl9xb3B0X29mZmxvYWQgKnFvcHQpOwomIzQzOwlpbnQgKCpzZXR1cF9ldHMpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKJiM0MzsJCQkgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpOwogCWludCAoKnF1ZXJ5X2NhcHMpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKIAkJCSAgc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSk7CiAJaW50ICgqc2V0dXBfbXFwcmlvKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCkBAIC01OTgsNiAmIzQzOzYwMCw4IEBAIHN0cnVjdCBzdG1tYWNfdGNfb3BzIHsKIAlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0Yywgc2V0dXBfdGFwcmlvLCBfX2FyZ3MpCiAjZGVmaW5lIHN0bW1hY190Y19zZXR1cF9ldGYoX19wcml2LCBfX2FyZ3MuLi4pIFwKIAlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0Yywgc2V0dXBfZXRmLCBfX2FyZ3MpCiYjNDM7I2RlZmluZSBzdG1tYWNfdGNfc2V0dXBfZXRzKF9fcHJpdiwgX19hcmdzLi4uKSBcCiYjNDM7CXN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBzZXR1cF9ldHMsIF9fYXJncykKICNkZWZpbmUgc3RtbWFjX3RjX3F1ZXJ5X2NhcHMoX19wcml2LCBfX2FyZ3MuLi4pIFwKIAlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0YywgcXVlcnlfY2FwcywgX19hcmdzKQogI2RlZmluZSBzdG1tYWNfdGNfc2V0dXBfbXFwcmlvKF9fcHJpdiwgX19hcmdzLi4uKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oCmluZGV4IDhiYThmMDNlMWNlMDMuLjFiYjI2MWZkY2IwZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oCkBAIC0zMDEsNiAmIzQzOzMwMSwxMiBAQCBzdHJ1Y3Qgc3RtbWFjX3ByaXYgewogCS8qIFByb3RlY3QgZXN0IHBhcmFtZXRlcnMgKi8KIAlzdHJ1Y3QgbXV0ZXggZXN0X2xvY2s7CiAJc3RydWN0IHN0bW1hY19lc3QgKmVzdDsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCWJvb2wgZW5hYmxlOwomIzQzOwkJdTggYWxnbzsKJiM0MzsJCXUzMiBxdWFudGFbTVRMX01BWF9UWF9RVUVVRVNdOwomIzQzOwkJdTMyIHByaW9bTVRMX01BWF9UWF9RVUVVRVNdOwomIzQzOwl9IHFkaXNjOwogCXN0cnVjdCBkbWFfZmVhdHVyZXMgZG1hX2NhcDsKIAlzdHJ1Y3Qgc3RtbWFjX2NvdW50ZXJzIG1tYzsKIAlpbnQgaHdfY2FwX3N1cHBvcnQ7CkBAIC0zOTQsNiAmIzQzOzQwMCw4IEBAIGVudW0gc3RtbWFjX3N0YXRlIHsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0bW1hY19zaW1wbGVfcG1fb3BzOwogCiYjNDM7dm9pZCBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpOwomIzQzO3ZvaWQgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTsKIGludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKIGludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiBpbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKm1paSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwppbmRleCBjNzI5YWIxMjdhZmQ1Li5jMjc4NmVjY2E1MzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKQEAgLTM0MTksMTQgJiM0MzszNDE5LDE4IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19zZXRfcmluZ3NfbGVuZ3RoKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlCiAgKiAgRGVzY3JpcHRpb246IEl0IGlzIHVzZWQgZm9yIHNldHRpbmcgVFggcXVldWVzIHdlaWdodAogICovCi1zdGF0aWMgdm9pZCBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiYjNDM7dm9pZCBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7CiAJdTggdHhfcXVldWVzX2NvdW50ID0gcHJpdi0mZ3Q7cGxhdC0mZ3Q7dHhfcXVldWVzX3RvX3VzZTsKIAl1MzIgd2VpZ2h0OwogCXU4IHF1ZXVlOwogCiAJZm9yIChxdWV1ZSA9IDA7IHF1ZXVlICZsdDsgdHhfcXVldWVzX2NvdW50OyBxdWV1ZSYjNDM7JiM0MzspIHsKLQkJd2VpZ2h0ID0gcHJpdi0mZ3Q7cGxhdC0mZ3Q7dHhfcXVldWVzX2NmZ1txdWV1ZV0ud2VpZ2h0OwomIzQzOwkJaWYgKHByaXYtJmd0O3FkaXNjLmVuYWJsZSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcHJpdi0mZ3Q7cWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX0RXUlIpCiYjNDM7CQkJd2VpZ2h0ID0gcHJpdi0mZ3Q7cWRpc2MucXVhbnRhW3F1ZXVlXTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl3ZWlnaHQgPSBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS53ZWlnaHQ7CiAJCXN0bW1hY19zZXRfbXRsX3R4X3F1ZXVlX3dlaWdodChwcml2LCBwcml2LSZndDtodywgd2VpZ2h0LCBxdWV1ZSk7CiAJfQogfQpAQCAtMzQ5OSwxNyAmIzQzOzM1MDMsMjAgQEAgc3RhdGljIHZvaWQgc3RtbWFjX21hY19jb25maWdfcnhfcXVldWVzX3ByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogICogIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqICBEZXNjcmlwdGlvbjogSXQgaXMgdXNlZCBmb3IgY29uZmlndXJpbmcgdGhlIFRYIFF1ZXVlIFByaW9yaXR5CiAgKi8KLXN0YXRpYyB2b2lkIHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0Mzt2b2lkIHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKIAl1OCB0eF9xdWV1ZXNfY291bnQgPSBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfdG9fdXNlOwogCXU4IHF1ZXVlOwotCXUzMiBwcmlvOwogCiAJZm9yIChxdWV1ZSA9IDA7IHF1ZXVlICZsdDsgdHhfcXVldWVzX2NvdW50OyBxdWV1ZSYjNDM7JiM0MzspIHsKLQkJaWYgKCFwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS51c2VfcHJpbykKLQkJCWNvbnRpbnVlOwomIzQzOwkJdTMyIHByaW8gPSAwOwomIzQzOwomIzQzOwkJaWYgKHByaXYtJmd0O3FkaXNjLmVuYWJsZSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcHJpdi0mZ3Q7cWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX1NQKQomIzQzOwkJCXByaW8gPSBwcml2LSZndDtxZGlzYy5wcmlvW3F1ZXVlXTsKJiM0MzsJCWVsc2UgaWYgKHByaXYtJmd0O3BsYXQtJmd0O3R4X3F1ZXVlc19jZmdbcXVldWVdLnVzZV9wcmlvKQomIzQzOwkJCXByaW8gPSBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS5wcmlvOwogCi0JCXByaW8gPSBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS5wcmlvOwogCQlzdG1tYWNfdHhfcXVldWVfcHJpbyhwcml2LCBwcml2LSZndDtodywgcHJpbywgcXVldWUpOwogCX0KIH0KQEAgLTM1NzAsOSAmIzQzOzM1NzcsMTUgQEAgc3RhdGljIHZvaWQgc3RtbWFjX210bF9jb25maWd1cmF0aW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAkJCQlwcml2LSZndDtwbGF0LSZndDtyeF9zY2hlZF9hbGdvcml0aG0pOwogCiAJLyogQ29uZmlndXJlIE1UTCBUWCBhbGdvcml0aG1zICovCi0JaWYgKHR4X3F1ZXVlc19jb3VudCAmZ3Q7IDEpCi0JCXN0bW1hY19wcm9nX210bF90eF9hbGdvcml0aG1zKHByaXYsIHByaXYtJmd0O2h3LAotCQkJCXByaXYtJmd0O3BsYXQtJmd0O3R4X3NjaGVkX2FsZ29yaXRobSk7CiYjNDM7CWlmICh0eF9xdWV1ZXNfY291bnQgJmd0OyAxKSB7CiYjNDM7CQl1OCB0eF9zY2hlZF9hbGdvOwomIzQzOwomIzQzOwkJaWYgKHByaXYtJmd0O3FkaXNjLmVuYWJsZSkKJiM0MzsJCQl0eF9zY2hlZF9hbGdvID0gcHJpdi0mZ3Q7cWRpc2MuYWxnbzsKJiM0MzsJCWVsc2UKJiM0MzsJCQl0eF9zY2hlZF9hbGdvID0gcHJpdi0mZ3Q7cGxhdC0mZ3Q7dHhfc2NoZWRfYWxnb3JpdGhtOwomIzQzOwkJc3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi0mZ3Q7aHcsIHR4X3NjaGVkX2FsZ28pOwomIzQzOwl9CiAKIAkvKiBDb25maWd1cmUgQ0JTIGluIEFWQiBUWCBxdWV1ZXMgKi8KIAlpZiAodHhfcXVldWVzX2NvdW50ICZndDsgMSkKQEAgLTY0MjgsNiAmIzQzOzY0NDEsOCBAQCBzdGF0aWMgaW50IHN0bW1hY19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCXJldHVybiBzdG1tYWNfdGNfc2V0dXBfdGFwcmlvKHByaXYsIHByaXYsIHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9RRElTQ19FVEY6CiAJCXJldHVybiBzdG1tYWNfdGNfc2V0dXBfZXRmKHByaXYsIHByaXYsIHR5cGVfZGF0YSk7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfRVRTOgomIzQzOwkJcmV0dXJuIHN0bW1hY190Y19zZXR1cF9ldHMocHJpdiwgcHJpdiwgdHlwZV9kYXRhKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYwppbmRleCAxNGNhYmU3NmU1M2VjLi4zYmE3MWJlMjRjNjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYwpAQCAtMTIxMCw2ICYjNDM7MTIxMCw4MyBAQCBzdGF0aWMgaW50IHRjX3NldHVwX2V0ZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBNYXggcXVhbnR1bSB2YWx1ZSBzdXBwb3J0ZWQgYnkgdGhlIE1UTCBEV1JSIHNjaGVkdWxlciAqLwomIzQzOyNkZWZpbmUgTVRMX1RYUV9XRUlHSFRfUVVBTlRVTV9NQVgJMHgxMzEyZDAKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJLyogcmVzZXQgdG8gdGhlIGR0IGNvbmZpZ3VyZWQgYWxnb3JpdGhtLiAqLwomIzQzOwlwcml2LSZndDtxZGlzYy5lbmFibGUgPSBmYWxzZTsKJiM0MzsJc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQocHJpdik7CiYjNDM7CXN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHByaXYpOwomIzQzOwlzdG1tYWNfcHJvZ19tdGxfdHhfYWxnb3JpdGhtcyhwcml2LCBwcml2LSZndDtodywKJiM0MzsJCQkJICAgICAgcHJpdi0mZ3Q7cGxhdC0mZ3Q7dHhfc2NoZWRfYWxnb3JpdGhtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0Y19zZXR1cF9ldHNfc2NoZWQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAomIzQzOwkJCSAgICAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpxb3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAgPSAmYW1wO3FvcHQtJmd0O3JlcGxhY2VfcGFyYW1zOwomIzQzOwlzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBkYXRhID0gcHJpdi0mZ3Q7cGxhdDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtwYXJlbnQgIT0gVENfSF9ST09UKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsKJiM0MzsJaWYgKHAtJmd0O2JhbmRzICZndDsgcGRhdGEtJmd0O3R4X3F1ZXVlc190b191c2UpCiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRhdGEtJmd0O3R4X3F1ZXVlc190b191c2U7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgcXVhbnR1bSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAocGRhdGEtJmd0O3R4X3F1ZXVlc19jZmdbaV0ubW9kZV90b191c2UgPT0gTVRMX1FVRVVFX0FWQikKJiM0MzsJCQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwkJaWYgKGkgJmx0OyBwLSZndDtiYW5kcykgewomIzQzOwkJCWlmICghcC0mZ3Q7cXVhbnRhW2ldKQomIzQzOwkJCQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwkJCWlmIChwLSZndDtxdWFudGFbaV0gJmd0OyBNVExfVFhRX1dFSUdIVF9RVUFOVFVNX01BWCkKJiM0MzsJCQkJZ290byBlcnJvcjsKJiM0MzsKJiM0MzsJCQlxdWFudHVtID0gcC0mZ3Q7cXVhbnRhW2ldOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcHJpdi0mZ3Q7cWRpc2MucXVhbnRhW2ldID0gcXVhbnR1bTsKJiM0MzsJCXN0bW1hY19zZXRfbXRsX3R4X3F1ZXVlX3dlaWdodChwcml2LCBwcml2LSZndDtodywgcXVhbnR1bSwgaSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi0mZ3Q7aHcsIE1UTF9UWF9BTEdPUklUSE1fRFdSUik7CiYjNDM7CXByaXYtJmd0O3FkaXNjLmFsZ28gPSBNVExfVFhfQUxHT1JJVEhNX0RXUlI7CiYjNDM7CXByaXYtJmd0O3FkaXNjLmVuYWJsZSA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2Vycm9yOgomIzQzOwlzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcocHJpdik7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0Y19zZXR1cF9ldHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAomIzQzOwkJCXN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpxb3B0KQomIzQzO3sKJiM0MzsJc3dpdGNoIChxb3B0LSZndDtjb21tYW5kKSB7CiYjNDM7CWNhc2UgVENfRVRTX1JFUExBQ0U6CiYjNDM7CQlyZXR1cm4gdGNfc2V0dXBfZXRzX3NjaGVkKHByaXYsIHFvcHQpOwomIzQzOwljYXNlIFRDX0VUU19ERVNUUk9ZOgomIzQzOwkJc3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHByaXYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVENfRVRTX1NUQVRTOgomIzQzOwkJaWYgKHByaXYtJmd0O3FkaXNjLmVuYWJsZSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcHJpdi0mZ3Q7cWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX0RXUlIpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHRjX3F1ZXJ5X2NhcHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAogCQkJIHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UpCiB7CkBAIC0xMjQ1LDE3ICYjNDM7MTMyMiwxOSBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCW5ldGRldl9yZXNldF90YyhuZGV2KTsKIAluZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIHByaXYtJmd0O3BsYXQtJmd0O3R4X3F1ZXVlc190b191c2UpOwogCXN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgbmRldiwgZXh0YWNrLCAwKTsKJiM0MzsJc3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHByaXYpOwogfQogCiBzdGF0aWMgaW50IHRjX3NldHVwX2R3bWFjNTEwX21xcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJCQkJICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiB7CiAJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLSZndDtleHRhY2s7CiYjNDM7CXN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGRhdGEgPSBwcml2LSZndDtwbGF0OwogCXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwogCXUzMiBvZmZzZXQsIGNvdW50LCBudW1fc3RhY2tfdHhfcXVldWVzID0gMDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHByaXYtJmd0O2RldjsKIAl1MzIgbnVtX3RjID0gcW9wdC0mZ3Q7bnVtX3RjOwotCWludCBlcnI7CiYjNDM7CWludCBpLCB0YywgZXJyOwogCiAJaWYgKCFudW1fdGMpIHsKIAkJc3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhuZGV2LCBleHRhY2spOwpAQCAtMTI4NSw2ICYjNDM7MTM2NCwyMyBAQCBzdGF0aWMgaW50IHRjX3NldHVwX2R3bWFjNTEwX21xcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVzZXRfdGM7CiAKJiM0MzsJLyogUXVldWVzIG5vdCBtYXBwZWQgdG8gYW55IFRDIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwcmlvcml0eSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRhdGEtJmd0O3R4X3F1ZXVlc190b191c2U7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlwcml2LSZndDtxZGlzYy5wcmlvW2ldID0gMDsKJiM0MzsJCXN0bW1hY190eF9xdWV1ZV9wcmlvKHByaXYsIHByaXYtJmd0O2h3LCAwLCBpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgaSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcW9wdC0mZ3Q7Y291bnRbdGNdOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXByaXYtJmd0O3FkaXNjLnByaW9baV0gPSB0YzsKJiM0MzsJCQlzdG1tYWNfdHhfcXVldWVfcHJpbyhwcml2LCBwcml2LSZndDtodywgdGMsIGkpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXN0bW1hY19wcm9nX210bF90eF9hbGdvcml0aG1zKHByaXYsIHByaXYtJmd0O2h3LCBNVExfVFhfQUxHT1JJVEhNX1NQKTsKJiM0MzsJcHJpdi0mZ3Q7cWRpc2MuYWxnbyA9IE1UTF9UWF9BTEdPUklUSE1fU1A7CiYjNDM7CXByaXYtJmd0O3FkaXNjLmVuYWJsZSA9IHRydWU7CiYjNDM7CiAJcmV0dXJuIDA7CiAKIGVycl9yZXNldF90YzoKQEAgLTEzMDgsNiAmIzQzOzE0MDQsNyBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzID0gewogCS5zZXR1cF9jbHMgPSB0Y19zZXR1cF9jbHMsCiAJLnNldHVwX3RhcHJpbyA9IHRjX3NldHVwX3RhcHJpb193aXRob3V0X2ZwZSwKIAkuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLAomIzQzOwkuc2V0dXBfZXRzID0gdGNfc2V0dXBfZXRzLAogCS5xdWVyeV9jYXBzID0gdGNfcXVlcnlfY2FwcywKIAkuc2V0dXBfbXFwcmlvID0gdGNfc2V0dXBfbXFwcmlvX3VuaW1wbGVtZW50ZWQsCiB9OwpAQCAtMTMxOSw2ICYjNDM7MTQxNiw3IEBAIGNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNTEwX3RjX29wcyA9IHsKIAkuc2V0dXBfY2xzID0gdGNfc2V0dXBfY2xzLAogCS5zZXR1cF90YXByaW8gPSB0Y19zZXR1cF90YXByaW8sCiAJLnNldHVwX2V0ZiA9IHRjX3NldHVwX2V0ZiwKJiM0MzsJLnNldHVwX2V0cyA9IHRjX3NldHVwX2V0cywKIAkucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsCiAJLnNldHVwX21xcHJpbyA9IHRjX3NldHVwX2R3bWFjNTEwX21xcHJpbywKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMTcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU1RNTUFDIEVUUyBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgYWRkaW5nIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCBjYXBhYmlsaXRpZXMgdG8gdGhlIFNUTU1BQyBkcml2ZXIuIFNlZW1zIGxpa2UgdGhleSYjMzk7dmUgaG9va2VkIGludG8gYHN0bW1hY190Y19vcHNgIHRvIGluY2x1ZGUgYHNldHVwX2V0c2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGV5JiMzOTt2ZSBhbHNvIGltcGxlbWVudGVkIGB0Y19zZXR1cF9ldHNgIGFuZCBgdGNfc2V0dXBfZXRzX3NjaGVkYCB3aXRoaW4gYHN0bW1hY190Yy5jYC4gR29vZCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0aG9zZSBmdW5jdGlvbnMgdG8gYmUuIEl0JiMzOTtzIGFsc28gY29uZmlndXJpbmcgdGhlIFN0cmljdCBQcmlvcml0eSAoU1ApIGFsZ29yaXRobSB3aGVuIGBtcXByaW9gIGlzIGluIHVzZSwgbW9kaWZ5aW5nIGB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9gIGFjY29yZGluZ2x5LiBTbWFydC4gQW5kIHRoZXkmIzM5O3ZlIGFkZGVkIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgIOKAkyBuZWNlc3NhcnkgZm9yIHBlcnNpc3RlbnQgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMsIEkgcHJlc3VtZS4gQWxsIHByZXR0eSBzdGFuZGFyZCBzdHVmZiwgcmVhbGx5LgoKTm93LCBhIGNyaXRpY2FsIG5leHQgc3RlcC4gQ2FuIHdlIGV2ZW4gdGVzdCB0aGlzIGVmZmVjdGl2ZWx5PyBTVE1NQUMsIHRoYXQmIzM5O3MgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgTUFDIGRyaXZlci4gSXTigJlzIHByZXZhbGVudCBpbiBhIHRvbiBvZiBTb0NzLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIGdldCBpdCB0byByZWxpYWJseSBiZWhhdmUgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IElzIGl0IFFFTVUtZnJpZW5kbHk/IEkgbWVhbiwgaXQmIzM5O3MgYSAqcGh5c2ljYWwqIEV0aGVybmV0IGRyaXZlciwgYnV0IHRoZXJlIG1pZ2h0IGJlIFBDSSB2YXJpYW50cyBvciBwbGF0Zm9ybS1zcGVjaWZpYyB2YXJpYXRpb25zIHRoYXQgY291bGQgY29tcGxpY2F0ZSB0aGluZ3MuIExldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhhdCBgS2NvbmZpZ2AgZmlsZSB1bmRlciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1RNTUFDX0VUSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOmNvbmZpZyBTVE1NQUNfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzI5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlIG9mIFBvc3NpYmlsaXRpZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIHRvd2FyZHMgZWZmaWNpZW50IHByb2JsZW0tc29sdmluZy4gV2hlbiBjb25mcm9udGVkIHdpdGggYSBzaXR1YXRpb24sIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBtYXAgb3V0IHRoZSBwb3RlbnRpYWwgYXZlbnVlcyB0byBleHBsb3JlLiBJbiB0aGlzIGNhc2UsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYSAmIzM0O1BDSSB2YXJpYW50LiYjMzQ7IFRoYXQgc3VnZ2VzdHMgSSYjMzk7bSBkZWFsaW5nIHdpdGggYSBjb25jZXB0IG9yIHN5c3RlbSB0aGF0IGhhcyBhIGNvcmUgY29tcG9uZW50IGtub3duIGFzIFBDSSAobGlrZWx5IHJlZmVycmluZyB0byB0aGUgUGF5bWVudCBDYXJkIEluZHVzdHJ5IERhdGEgU2VjdXJpdHkgU3RhbmRhcmQsIG9yIGEgcmVsYXRlZCB0ZWNobm9sb2d5IHByb3RvY29sKSwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBpZiBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb25zIG9yIGNvbmZpZ3VyYXRpb25zIGV4aXN0LiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwOiB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtLiBBbSBJIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgc3RyYWlnaHRmb3J3YXJkIFBDSSBjb21wbGlhbnQsIG9yIGlzIHRoZXJlIGFkZGVkIGNvbXBsZXhpdHksIHNjb3BlIG9yIGEgbm92ZWwgc2l0dWF0aW9uIHdpdGggdmFyaWF0aW9ucyB0byBjb25zaWRlcj8gSXQgaXMgYW4gaW1wb3J0YW50IHF1ZXN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVE1NQUNfUENJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEwMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFNUTU1BQyBQQ0kgRW11bGF0aW9uIGluIFFFTVUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBTVE1NQUNfUENJLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGRvZXMgUUVNVSBldmVuIGVtdWxhdGUgdGhpcz8gSSYjMzk7bSBwcmV0dHkgc3VyZSBzdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IG9mZmVyIG5hdGl2ZSBTVE1NQUMgUENJIGVtdWxhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUuIExldCBtZSBzZWUuLi4gSSByZWNhbGwgUUVNVSBoYXZpbmcgaW1wbGVtZW50YXRpb25zIGZvciBzZXZlcmFsIG90aGVyIG5ldHdvcmsgZGV2aWNlcywgbGlrZSBgaWdiLmNgLCBgZTEwMDBlLmNgLCBgcnRsODEzOS5jYCwgYHBjbmV0LmNgLCB0aGUgbGlzdCBnb2VzIG9uLiBCdXQsIEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgYSBjb3JyZXNwb25kaW5nIGBzdG1tYWMuY2AuIERvZXMgaXQgZW11bGF0ZSB0aGUgc3RtbWFjPwoKQWxyaWdodCwgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhIGJpdC4gU3l6a2FsbGVyIGhhcyBiZWVuIGEgZ29vZCBzb3VyY2Ugb2YgaW5mb3JtYXRpb24gZm9yIHRoaXMga2luZCBvZiB0aGluZywgc28gcGVyaGFwcyBpdCBoYXMgc29tZSBkZXZpY2UgZGVzY3JpcHRpb25zLCBhbmQgdGhhdCBtaWdodCBpbmNsdWRlIFNUTU1BQy4gSSBzaG91bGQgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NlbGZ0ZXN0cy5jLTMtICogQ29weXJpZ2h0IChjKSAyMDE5IFN5bm9wc3lzLCBJbmMuIGFuZC9vciBpdHMgYWZmaWxpYXRlcy5cbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jOjQ6ICogc3RtbWFjIFNlbGZ0ZXN0cyBTdXBwb3J0XG5uZXQvY29yZS9zZWxmdGVzdHMuYy01LSAqXG4tLVxubmV0L2NvcmUvc2VsZnRlc3RzLmMtNy0gKlxubmV0L2NvcmUvc2VsZnRlc3RzLmM6ODogKiBQb3J0ZWQgZnJvbSBzdG1tYWMgYnk6XG5uZXQvY29yZS9zZWxmdGVzdHMuYy05LSAqIENvcHlyaWdodCAoQykgMjAyMSBPbGVrc2lqIFJlbXBlbCBcdTAwM2NvLnJlbXBlbEBwZW5ndXRyb25peC5kZVx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MjUKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTeXprYWxsZXIgUG90ZW50aWFsIGZvciBUZXN0aW5nIHN0bW1hYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1dhaXQsIGlzIHRoZXJlIGFueSB3YXkgdG8gdGVzdCBgc3RtbWFjYCB3aXRoIHN5emthbGxlciAqd2l0aG91dCogZGlyZWN0IGBzdG1tYWNgIGRlc2NyaXB0aW9ucz8mIzM0OyBIbW0uLi4gbWF5YmUgbmV0bGluaywgc3BlY2lmaWNhbGx5IGB0YyBxZGlzY2A/IFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyBhZGRpbmcgYFRDX1NFVFVQX1FESVNDX0VUU2AgaGFuZGxpbmcgd2l0aGluIGBzdG1tYWNfc2V0dXBfdGNgLiBSaWdodCwgYW5kIGBzdG1tYWNfc2V0dXBfdGNgIGdldHMgY2FsbGVkIHRocm91Z2ggYG5kb19zZXR1cF90Y2AuIFRoZSB0cmlja3kgcGFydCBpcyB0aGF0IGlmIHRoZSBkcml2ZXIgaXNuJiMzOTt0IGxvYWRlZCwgYG5kb19zZXR1cF90Y2Agd29uJiMzOTt0IGV2ZW4gYmUgaW52b2tlZC4KClNvLCB0aGUgbmV4dCBxdWVzdGlvbiBpcywgY2FuIEkgZ2V0IHRoZSBkcml2ZXIgbG9hZGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXIgdXNlcz8gSSBiZXQgdGhlcmUgYXJlIHBsYXRmb3JtIGRldmljZXMgSSBjb3VsZCB1c2UgdG8gbXkgYWR2YW50YWdlIOKAkyBkdW1teSBkZXZpY2VzIG9yIHRob3NlIGNyZWF0ZWQgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIHBhcnRpY3VsYXJseSBpbiBjZXJ0YWluIFFFTVUgY29uZmlndXJhdGlvbnMuIEJ1dCBzeXprYWxsZXIgcHJlZG9taW5hbnRseSBydW5zIG9uIHg4Nl82NCwgb3Igc29tZXRpbWVzIGFybTY0LCBzbyBpdCBuZWVkcyB0byBiZSBwb3NzaWJsZSBvbiB0aGVzZSBwbGF0Zm9ybXMuCgpJZiBpdCYjMzk7cyB4ODZfNjQsIHdoaWNoIGlzIGxpa2VseSwgdGhlbiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBpZiBhIFBDSSBkZXZpY2UgY291bGQgYmUgcHJvYmVkLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY2AuIEhvcGVmdWxseSwgSSBjYW4gZmluZCBzb21ldGhpbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9kZXZpY2VfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTExOD1zdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTE5Olx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MTkyPXN0YXRpYyB2b2lkIHN0bW1hY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjAzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDQtXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDg2CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIHN0bW1hY19pZF90YWJsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBQQ0kgSURzIHdpdGhpbiB0aGUgYHN0bW1hY19pZF90YWJsZWAuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggc3BlY2lmaWMgaGFyZHdhcmUgaWRlbnRpZmllcnMgYXJlIHN1cHBvcnRlZCBieSB0aGUgYHN0bW1hY2AgZHJpdmVyLiBLbm93aW5nIHRoZSB2ZW5kb3IgYW5kIGRldmljZSBJRHMgbWFwcGVkIHRvIHRoZSBkcml2ZXIgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGhhcmR3YXJlIGNvbXBhdGliaWxpdHkuIEkgd2FudCB0byBxdWlja2x5IGNvcnJlbGF0ZSB0aGUgZGV2aWNlJiMzOTtzIFBDSSBJRCB0byB0aGlzIGxpc3QgaW4gbXkgbWVtb3J5LiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHN0cnVjdHVyZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgc3VwcG9ydGVkIGNoaXBzZXRzLiBUaGVuLCBJIHdpbGwgc3RhcnQgdG8gaW5mZXIgdGhlIGltcGxpZWQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGJ5IHRoZSBpZGVudGlmaWVkIGNoaXBzZXRzLiBJdCYjMzk7cyBhIHF1aWNrIGFuZCBlc3NlbnRpYWwgc3RlcCBmb3IgaW5pdGlhbCBhc3Nlc3NtZW50LCBkZWJ1Z2dpbmcsIG9yIGV2ZW4ganVzdCBjb25maXJtaW5nIGRyaXZlciBzdXBwb3J0IGZvciBhIGdpdmVuIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHQjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1RNTUFDX1NUTU1BQ1x0XHQweDExMDhcbiAyMDE6XHQjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lOT1BTWVNfR01BQzVfSURcdFx0MHg3MTAyXG4gMjAyOlx0XG4gMjAzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0bW1hY19pZF90YWJsZVtdID0ge1xuIDIwNDpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNTUFDLCBTVE1NQUMsIFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcbiAyMDU6XHRcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuIDIwNjpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoU1lOT1BTWVMsIEdNQUM1X0lELCBcdTAwMjZzbnBzX2dtYWM1X3BjaV9pbmZvKSB9LFxuIDIwNzpcdFx0e31cbiAyMDg6XHR9O1xuIDIwOTpcdFxuIDIxMDpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xuIDIxMTpcdFxuIDIxMjpcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzdG1tYWNfcGNpX2RyaXZlciA9IHtcbiAyMTM6XHRcdC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsXG4gMjE0Olx0XHQuaWRfdGFibGUgPSBzdG1tYWNfaWRfdGFibGUsXG4gMjE1Olx0XHQucHJvYmUgPSBzdG1tYWNfcGNpX3Byb2JlLFxuIDIxNjpcdFx0LnJlbW92ZSA9IHN0bW1hY19wY2lfcmVtb3ZlLFxuIDIxNzpcdFx0LmRyaXZlciAgICAgICAgID0ge1xuIDIxODpcdFx0XHQucG0gICAgID0gXHUwMDI2c3RtbWFjX3NpbXBsZV9wbV9vcHMsXG4gMjE5Olx0XHR9LFxuIDIyMDpcdH07XG4gMjIxOlx0XG4gMjIyOlx0bW9kdWxlX3BjaV9kcml2ZXIoc3RtbWFjX3BjaV9kcml2ZXIpO1xuIDIyMzpcdFxuIDIyNDpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTVE1NQUMgMTAvMTAwLzEwMDAgRXRoZXJuZXQgUENJIGRyaXZlclwmIzM0Oyk7XG4gMjI1Olx0TU9EVUxFX0FVVEhPUihcJiMzNDtSYXlhZ29uZCBLb2thdGFudXIgXHUwMDNjcmF5YWdvbmQua29rYXRhbnVyQHZheWF2eWFsYWJzLmNvbVx1MDAzZVwmIzM0Oyk7XG4gMjI2Olx0TU9EVUxFX0FVVEhPUihcJiMzNDtHaXVzZXBwZSBDYXZhbGxhcm8gXHUwMDNjcGVwcGUuY2F2YWxsYXJvQHN0LmNvbVx1MDAzZVwmIzM0Oyk7XG4gMjI3Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI5NQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmlhYmlsaXR5IG9mIFN5emthbGxlciYjMzk7cyB2aGNpIGZvciBTdG1tYWMgRHJpdmVyIFRlc3RpbmcqKgoKT2theSwgc28gU3l6a2FsbGVyJiMzOTtzIGdvdCB0aGlzIHZoY2kgbWVjaGFuaXNtLCByaWdodD8gVGhhdCYjMzk7cyB0aGUgdmlydHVhbCBQQ0kgZGV2aWNlIGluamVjdGlvbiDigJMgaXQgbGV0cyBtZSBzcG9vZiBQQ0kgZGV2aWNlcyB3aXRoIHdoYXRldmVyIElEcyBJIG5lZWQuIFRoYXQmIzM5O3MgcG90ZW50aWFsbHkgKmh1Z2UqIGZvciBmdXp6aW5nIGFuZCB0ZXN0aW5nLiBCdXQgdGhlIHF1ZXN0aW9uIGlzOiBjYW4gdGhlIHN0bW1hYyBkcml2ZXIgZXZlbiAqd29yayogd2l0aG91dCBhY3R1YWwgaGFyZHdhcmU/IFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuIFR5cGljYWxseSwgdGhlc2UgcGh5c2ljYWwgRXRoZXJuZXQgZHJpdmVycyBhcmUgcHJldHR5IGZpbmlja3kuIFRoZXkgdXN1YWxseSBjaG9rZSBpbiB0aGUgYHByb2JlYCBmdW5jdGlvbiBpZiB0aGUgaGFyZHdhcmUmIzM5O3Mgbm90IHBsYXlpbmcgYmFsbCDigJMgeW91IGtub3csIHRyeWluZyB0byByZWFkIHRoZSBNQUMgYWRkcmVzcywgcmVzZXR0aW5nIHRoZSBQSFksIGNoZWNraW5nIHJlZ2lzdGVycyBhbmQgZXhwZWN0aW5nIHZhbGlkIHJlc3BvbnNlcy4gSXQmIzM5O3MgYSByZWFsIHBhaW4uIFNvLCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgdmhjaSBhcHByb2FjaCBjYW4gYWN0dWFsbHkgd29yayB3aXRoIHN0bW1hYywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBkaXZlIGludG8gYHN0bW1hY19wY2lfcHJvYmVgLiBHb3R0YSBzZWUgd2hhdCB0aGUgZHJpdmVyJiMzOTtzICpyZWFsbHkqIGV4cGVjdGluZyBpbiB0ZXJtcyBvZiBoYXJkd2FyZSBpbnRlcmFjdGlvbiBkdXJpbmcgdGhlIHByb2JlLiBUaGVuIEkmIzM5O2xsIGJlIGFibGUgdG8gdGVsbCBpZiBTeXprYWxsZXImIzM5O3MgdmhjaSBjYW4gZm9vbCB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE4Olx0c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIDExOTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gMTIwOlx0e1xuIDEyMTpcdFx0c3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICopaWQtXHUwMDNlZHJpdmVyX2RhdGE7XG4gMTIyOlx0XHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XG4gMTIzOlx0XHRzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyByZXMgPSB7fTtcbiAxMjQ6XHRcdGludCByZXQ7XG4gMTI1Olx0XHRpbnQgaTtcbiAxMjY6XHRcbiAxMjc6XHRcdHBsYXQgPSBzdG1tYWNfcGxhdF9kYXRfYWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIDEyODpcdFx0aWYgKCFwbGF0KVxuIDEyOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMzA6XHRcbiAxMzE6XHRcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbiAxMzI6XHRcdFx0XHRcdFx0ICAgc2l6ZW9mKCpwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEpLFxuIDEzMzpcdFx0XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiAxMzQ6XHRcdGlmICghcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhKVxuIDEzNTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMzY6XHRcbiAxMzc6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuIDEzODpcdFx0XHRcdFx0XHQgICAgIHNpemVvZigqcGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmcpLFxuIDEzOTpcdFx0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuIDE0MDpcdFx0aWYgKCFwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZylcbiAxNDE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTQyOlx0XG4gMTQzOlx0XHQvKiBFbmFibGUgcGNpIGRldmljZSAqL1xuIDE0NDpcdFx0cmV0ID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpO1xuIDE0NTpcdFx0aWYgKHJldCkge1xuIDE0NjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDslczogRVJST1I6IGZhaWxlZCB0byBlbmFibGUgZGV2aWNlXFxuXCYjMzQ7LFxuIDE0NzpcdFx0XHRcdF9fZnVuY19fKTtcbiAxNDg6XHRcdFx0cmV0dXJuIHJldDtcbiAxNDk6XHRcdH1cbiAxNTA6XHRcbiAxNTE6XHRcdC8qIEdldCB0aGUgYmFzZSBhZGRyZXNzIG9mIGRldmljZSAqL1xuIDE1MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUENJX1NURF9OVU1fQkFSUzsgaSYjNDM7JiM0MzspIHtcbiAxNTM6XHRcdFx0aWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSkgPT0gMClcbiAxNTQ6XHRcdFx0XHRjb250aW51ZTtcbiAxNTU6XHRcdFx0cmVzLmFkZHIgPSBwY2ltX2lvbWFwX3JlZ2lvbihwZGV2LCBpLCBTVE1NQUNfUkVTT1VSQ0VfTkFNRSk7XG4gMTU2Olx0XHRcdGlmIChJU19FUlIocmVzLmFkZHIpKVxuIDE1NzpcdFx0XHRcdHJldHVybiBQVFJfRVJSKHJlcy5hZGRyKTtcbiAxNTg6XHRcdFx0YnJlYWs7XG4gMTU5Olx0XHR9XG4gMTYwOlx0XG4gMTYxOlx0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiAxNjI6XHRcbiAxNjM6XHRcdHJldCA9IGluZm8tXHUwMDNlc2V0dXAocGRldiwgcGxhdCk7XG4gMTY0Olx0XHRpZiAocmV0KVxuIDE2NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE2NjpcdFxuIDE2NzpcdFx0cmVzLndvbF9pcnEgPSBwZGV2LVx1MDAzZWlycTtcbiAxNjg6XHRcdHJlcy5pcnEgPSBwZGV2LVx1MDAzZWlycTtcbiAxNjk6XHRcbiAxNzA6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVx1MDAzZXRzb2VlID0gMTtcbiAxNzE6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVx1MDAzZW1yeHBlZSA9IDE7XG4gMTcyOlx0XHRwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cdTAwM2VtZXN0ZWUgPSAxO1xuIDE3MzpcdFx0cGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmctXHUwMDNlbXJ4ZWUgPSAxO1xuIDE3NDpcdFx0cGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmctXHUwMDNlbXR4ZWUgPSAxO1xuIDE3NTpcdFx0cGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmctXHUwMDNlZXBzaSA9IDE7XG4gMTc2Olx0XHRwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cdTAwM2VlZHBwID0gMTtcbiAxNzc6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVx1MDAzZXBydHllbiA9IDE7XG4gMTc4Olx0XHRwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cdTAwM2V0bW91dGVuID0gMTtcbiAxNzk6XHRcbiAxODA6XHRcdHBsYXQtXHUwMDNlc3VzcGVuZCA9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xuIDE4MTpcdFx0cGxhdC1cdTAwM2VyZXN1bWUgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lO1xuIDE4MjpcdFxuIDE4MzpcdFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG4gMTg0Olx0fVxuIDE4NTpcdFxuIDE4NjpcdC8qKlxuIDE4NzpcdCAqIHN0bW1hY19wY2lfcmVtb3ZlXG4gMTg4Olx0ICpcbiAxODk6XHQgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXJcbiAxOTA6XHQgKiBEZXNjcmlwdGlvbjogdGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgbWFpbiB0byBmcmVlIHRoZSBuZXQgcmVzb3VyY2VzLlxuIDE5MTpcdCAqL1xuIDE5MjpcdHN0YXRpYyB2b2lkIHN0bW1hY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIDE5MzpcdHtcbiAxOTQ6XHRcdHN0bW1hY19kdnJfcmVtb3ZlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiAxOTU6XHR9XG4gMTk2Olx0XG4gMTk3Olx0Lyogc3ludGhldGljIElELCBubyBvZmZpY2lhbCB2ZW5kb3IgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjIKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipQcm9iaW5nIHRoZSBTVE1NQUMgRHJpdmVyJiMzOTtzIFJlc2lsaWVuY2UqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBhdCB0aGUgcG9pbnQgd2hlcmUgYSBwcm9iZSBjYWxsIGlzIGJlaW5nIG1hZGUgdG8gYHN0bW1hY19kdnJfcHJvYmVgLiBNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgcm9idXN0bmVzcyBhbmQgdGVzdGFiaWxpdHkuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyByZXNpbGllbnQgdGhpcyBpcyBpbiB0aGUgYWJzZW5jZSBvZiBhY3R1YWwgaGFyZHdhcmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtDYW4gSSBzdWNjZXNzZnVsbHkgZXhlY3V0ZSBgc3RtbWFjX2R2cl9wcm9iZWAgaW4gYSBzaW11bGF0ZWQgZW52aXJvbm1lbnQsIHBlcmhhcHMgd2l0aCBhIHZpcnR1YWwgTklDLCBvciBldmVuIGp1c3QgYnkgc3R1YmJpbmcgb3V0IGNlcnRhaW4gaGFyZHdhcmUgaW50ZXJhY3Rpb25zPyYjMzQ7IFRoZSBnb2FsIGlzIHRvIGlzb2xhdGUgdGhlIGRyaXZlciYjMzk7cyBjb3JlIGxvZ2ljIGZyb20gdGhlIHBoeXNpY2FsIGRldmljZS4gSWYgaXQgKmRvZXMqIGRlcGVuZCBvbiBzb21lIEhXIGluaXRpYWxpemF0aW9uLCBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQuIEFyZSB3ZSBnZXR0aW5nIHRoZSB1c3VhbCBoYXJkd2FyZSBkZXBlbmRlbmN5IGVycm9yIG1lc3NhZ2VzPyBJcyB0aGVyZSBhIGNsZWFyIHBhdGggdG8gbW9jayB0aGF0IG91dD8gQ2FuIEkgYnlwYXNzIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIG9yIGRvZXMgYSBwYXJ0aWN1bGFyIHZhbHVlIHRyaWdnZXIgaXQ/IE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgYSB3ZWxsLWRlc2lnbmVkIGRyaXZlciBzaG91bGQgZ3JhY2VmdWxseSBoYW5kbGUgdGhlIGxhY2sgb2YgaGFyZHdhcmUsIG9yIGF0IGxlYXN0IHByb3ZpZGUgY2xlYXIgaW5kaWNhdG9ycyBvZiBpdHMgYWJzZW5jZSwgdG8gYWxsb3cgZm9yIHRob3JvdWdoIHRlc3RpbmcgYW5kIGJyaW5nLXVwLiBTbywgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgZ3JhY2VmdWwgZmFpbHVyZXMsIHBlcmhhcHMgYSByZXR1cm4gY29kZSBvciBhIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UsIGluIHRoZSBwcm9iZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2R2cl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03Nzk0PUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19wbGF0X2RhdF9hbGxvYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc3OTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc3OTY6c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03Nzk3LVx0XHRcdCAgICAgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdF9kYXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDk4LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDk5OiAqIHN0bW1hY19kdnJfcHJvYmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwMC0gKiBAZGV2OiBkZXZpY2UgcG9pbnRlclxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwNy0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODEwODppbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdF9kYXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDktXHRcdCAgICAgc3RydWN0IHN0bW1hY19yZXNvdXJjZXMgKnJlcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMTk6XHRyZXQgPSBfX3N0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyMC1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IHBsYXRfZGF0LVx1MDAzZWV4aXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTI0LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODEyNTpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfZHZyX3Byb2JlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MDMKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGBfX3N0bW1hY19kdnJfcHJvYmVgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUga2VybmVsIGlzIHBvaW50aW5nIG1lIHRvd2FyZCBgX19zdG1tYWNfZHZyX3Byb2JlYC4gTGV0JiMzOTtzIGFzc3VtZSB0aGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIFNUTU1BQyBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIGF0IGxlYXN0IGluaXRpYWxseS4gVGhpcyBpcyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBzZWUgdGhlIHJlc291cmNlIGFsbG9jYXRpb24sIGRldmljZSBpbml0aWFsaXphdGlvbiwgYW5kIHBsYXRmb3JtLXNwZWNpZmljIHNldHVwIGhhcHBlbmluZy4gTGlrZWx5LCB0aGlzIGlzIHdoZXJlIHRoZSBoYXJkd2FyZSBpcyBiZWluZyBpZGVudGlmaWVkIGFuZCBhc3NvY2lhdGVkIHdpdGggdGhlIGRyaXZlci4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmU6IHdoYXQmIzM5O3MgaXQgY2hlY2tpbmcsIHdoYXQmIzM5O3MgaXQgY2FsbGluZywgYW5kIHdoYXQmIzM5O3MgaXQgc2V0dGluZyB1cD8gVGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW5nIHRoZSBkZXZpY2UgcmVhZHkgdG8gcnVuLiBMZXTigJlzIHNlZSB3aGF0IGdvb2RpZXMgYXdhaXQgaW5zaWRlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3Nzk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc3OTY6XHRzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG43Nzk3Olx0XHRcdFx0ICAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbjc3OTg6XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxuNzc5OTpcdHtcbjc4MDA6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDtcbjc4MDE6XHRcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdjtcbjc4MDI6XHRcdGludCBpLCByZXQgPSAwO1xuNzgwMzpcdFx0dTggcnhxO1xuNzgwNDpcdFxuNzgwNTpcdFx0aWYgKCFwbGF0X2RhdC1cdTAwM2VkbWFfY2ZnIHx8ICFwbGF0X2RhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZXBibCkge1xuNzgwNjpcdFx0XHRkZXZfZXJyKGRldmljZSwgXCYjMzQ7aW52YWxpZCBETUEgY29uZmlndXJhdGlvblxcblwmIzM0Oyk7XG43ODA3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzgwODpcdFx0fVxuNzgwOTpcdFxuNzgxMDpcdFx0bmRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKGRldmljZSwgc2l6ZW9mKHN0cnVjdCBzdG1tYWNfcHJpdiksXG43ODExOlx0XHRcdFx0XHQgICAgICAgTVRMX01BWF9UWF9RVUVVRVMsIE1UTF9NQVhfUlhfUVVFVUVTKTtcbjc4MTI6XHRcdGlmICghbmRldilcbjc4MTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG43ODE0Olx0XG43ODE1Olx0XHRTRVRfTkVUREVWX0RFVihuZGV2LCBkZXZpY2UpO1xuNzgxNjpcdFxuNzgxNzpcdFx0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuNzgxODpcdFx0cHJpdi1cdTAwM2VkZXZpY2UgPSBkZXZpY2U7XG43ODE5Olx0XHRwcml2LVx1MDAzZWRldiA9IG5kZXY7XG43ODIwOlx0XG43ODIxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNVExfTUFYX1JYX1FVRVVFUzsgaSYjNDM7JiM0MzspXG43ODIyOlx0XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLnJ4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcbjc4MjM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1UTF9NQVhfVFhfUVVFVUVTOyBpJiM0MzsmIzQzOykge1xuNzgyNDpcdFx0XHR1NjRfc3RhdHNfaW5pdChcdTAwMjZwcml2LVx1MDAzZXhzdGF0cy50eHFfc3RhdHNbaV0ucV9zeW5jcCk7XG43ODI1Olx0XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLnR4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcbjc4MjY6XHRcdH1cbjc4Mjc6XHRcbjc4Mjg6XHRcdHByaXYtXHUwMDNleHN0YXRzLnBjcHVfc3RhdHMgPVxuNzgyOTpcdFx0XHRkZXZtX25ldGRldl9hbGxvY19wY3B1X3N0YXRzKGRldmljZSwgc3RydWN0IHN0bW1hY19wY3B1X3N0YXRzKTtcbjc4MzA6XHRcdGlmICghcHJpdi1cdTAwM2V4c3RhdHMucGNwdV9zdGF0cylcbjc4MzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG43ODMyOlx0XG43ODMzOlx0XHRzdG1tYWNfc2V0X2V0aHRvb2xfb3BzKG5kZXYpO1xuNzgzNDpcdFx0cHJpdi1cdTAwM2VwYXVzZV90aW1lID0gcGF1c2U7XG43ODM1Olx0XHRwcml2LVx1MDAzZXBsYXQgPSBwbGF0X2RhdDtcbjc4MzY6XHRcdHByaXYtXHUwMDNlaW9hZGRyID0gcmVzLVx1MDAzZWFkZHI7XG43ODM3Olx0XHRwcml2LVx1MDAzZWRldi1cdTAwM2ViYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylyZXMtXHUwMDNlYWRkcjtcbjc4Mzg6XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZW11bHRpX21zaV9lbiA9XG43ODM5Olx0XHRcdChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX01VTFRJX01TSV9FTik7XG43ODQwOlx0XG43ODQxOlx0XHRwcml2LVx1MDAzZWRldi1cdTAwM2VpcnEgPSByZXMtXHUwMDNlaXJxO1xuNzg0MjpcdFx0cHJpdi1cdTAwM2V3b2xfaXJxID0gcmVzLVx1MDAzZXdvbF9pcnE7XG43ODQzOlx0XHRwcml2LVx1MDAzZXNmdHlfaXJxID0gcmVzLVx1MDAzZXNmdHlfaXJxO1xuNzg0NDpcdFxuNzg0NTpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfTVVMVElfTVNJX0VOKSB7XG43ODQ2Olx0XHRcdHJldCA9IHN0bW1hY19tc2lfaW5pdChwcml2LCByZXMpO1xuNzg0NzpcdFx0XHRpZiAocmV0KVxuNzg0ODpcdFx0XHRcdHJldHVybiByZXQ7XG43ODQ5Olx0XHR9XG43ODUwOlx0XG43ODUxOlx0XHRpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihyZXMtXHUwMDNlbWFjKSlcbjc4NTI6XHRcdFx0ZXRoX2h3X2FkZHJfc2V0KHByaXYtXHUwMDNlZGV2LCByZXMtXHUwMDNlbWFjKTtcbjc4NTM6XHRcbjc4NTQ6XHRcdGRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIHByaXYtXHUwMDNlZGV2KTtcbjc4NTU6XHRcbjc4NTY6XHRcdC8qIFZlcmlmeSBkcml2ZXIgYXJndW1lbnRzICovXG43ODU3Olx0XHRzdG1tYWNfdmVyaWZ5X2FyZ3MoKTtcbjc4NTg6XHRcbjc4NTk6XHRcdHByaXYtXHUwMDNlYWZfeGRwX3pjX3FwcyA9IGJpdG1hcF96YWxsb2MoTVRMX01BWF9UWF9RVUVVRVMsIEdGUF9LRVJORUwpO1xuNzg2MDpcdFx0aWYgKCFwcml2LVx1MDAzZWFmX3hkcF96Y19xcHMpXG43ODYxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuNzg2MjpcdFxuNzg2MzpcdFx0LyogQWxsb2NhdGUgd29ya3F1ZXVlICovXG43ODY0Olx0XHRwcml2LVx1MDAzZXdxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoXCYjMzQ7c3RtbWFjX3dxXCYjMzQ7KTtcbjc4NjU6XHRcdGlmICghcHJpdi1cdTAwM2V3cSkge1xuNzg2NjpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG43ODY3Olx0XHRcdHJldCA9IC1FTk9NRU07XG43ODY4Olx0XHRcdGdvdG8gZXJyb3Jfd3FfaW5pdDtcbjc4Njk6XHRcdH1cbjc4NzA6XHRcbjc4NzE6XHRcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXNlcnZpY2VfdGFzaywgc3RtbWFjX3NlcnZpY2VfdGFzayk7XG43ODcyOlx0XG43ODczOlx0XHR0aW1lcl9zZXR1cChcdTAwMjZwcml2LVx1MDAzZWVlZV9jdHJsX3RpbWVyLCBzdG1tYWNfZWVlX2N0cmxfdGltZXIsIDApO1xuNzg3NDpcdFxuNzg3NTpcdFx0LyogT3ZlcnJpZGUgd2l0aCBrZXJuZWwgcGFyYW1ldGVycyBpZiBzdXBwbGllZCBYWFggQ1JTIFhYWFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUxMwoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBc3Nlc3NpbmcgUG90ZW50aWFsIFN5c3RlbSBJbnRlcmFjdGlvbioqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBoZXJlIGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBsZXZlbCBvZiBzb3BoaXN0aWNhdGlvbiB0aGUgc3lzdGVtIGlzIGF0dGVtcHRpbmcsIG9yIHBvdGVudGlhbGx5IGNhcGFibGUgb2YsIGluIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBnYXVnZSB3aGV0aGVyIHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgYW5hbHlzaXMsIG9yIGlmIHRoZXJlJiMzOTtzIGEgbW9yZSBpbnZvbHZlZCBhdHRlbXB0IGJlaW5nIG1hZGUgdG8gZGlyZWN0bHkgaW50ZXJyb2dhdGUgaGFyZHdhcmUgcmVnaXN0ZXJzLiBSZWFkaW5nIGhhcmR3YXJlIHJlZ2lzdGVycywgZXZlbiBpZiBpbmRpcmVjdGx5LCBpbXBsaWVzIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBhcmNoaXRlY3R1cmUgYW5kIGEgcG90ZW50aWFsbHkgZ3JlYXRlciB2dWxuZXJhYmlsaXR5IHN1cmZhY2UuIFRoaXMgY291bGQgYmUgYSB0ZWxsIG9mIHRoZSB0b29sc2V0LCBvciB0aGUgbGV2ZWwgb2YgZWZmb3J0IHRoYXQgdGhlIGFjdG9yIGlzIHdpbGxpbmcgdG8gcHV0IGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc4NzY6XHRcdCAqIHRoaXMgbmVlZHMgdG8gaGF2ZSBtdWx0aXBsZSBpbnN0YW5jZXNcbjc4Nzc6XHRcdCAqL1xuNzg3ODpcdFx0aWYgKChwaHlhZGRyIFx1MDAzZT0gMCkgXHUwMDI2XHUwMDI2IChwaHlhZGRyIFx1MDAzYz0gMzEpKVxuNzg3OTpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGh5X2FkZHIgPSBwaHlhZGRyO1xuNzg4MDpcdFxuNzg4MTpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VzdG1tYWNfcnN0KSB7XG43ODgyOlx0XHRcdHJldCA9IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtXHUwMDNlcGxhdC1cdTAwM2VzdG1tYWNfcnN0KTtcbjc4ODM6XHRcdFx0cmVzZXRfY29udHJvbF9kZWFzc2VydChwcml2LVx1MDAzZXBsYXQtXHUwMDNlc3RtbWFjX3JzdCk7XG43ODg0Olx0XHRcdC8qIFNvbWUgcmVzZXQgY29udHJvbGxlcnMgaGF2ZSBvbmx5IHJlc2V0IGNhbGxiYWNrIGluc3RlYWQgb2Zcbjc4ODU6XHRcdFx0ICogYXNzZXJ0ICYjNDM7IGRlYXNzZXJ0IGNhbGxiYWNrcyBwYWlyLlxuNzg4NjpcdFx0XHQgKi9cbjc4ODc6XHRcdFx0aWYgKHJldCA9PSAtRU5PVFNVUFApXG43ODg4Olx0XHRcdFx0cmVzZXRfY29udHJvbF9yZXNldChwcml2LVx1MDAzZXBsYXQtXHUwMDNlc3RtbWFjX3JzdCk7XG43ODg5Olx0XHR9XG43ODkwOlx0XG43ODkxOlx0XHRyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtXHUwMDNlcGxhdC1cdTAwM2VzdG1tYWNfYWhiX3JzdCk7XG43ODkyOlx0XHRpZiAocmV0ID09IC1FTk9UU1VQUClcbjc4OTM6XHRcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7dW5hYmxlIHRvIGJyaW5nIG91dCBvZiBhaGIgcmVzZXQ6ICVwZVxcblwmIzM0Oyxcbjc4OTQ6XHRcdFx0XHRFUlJfUFRSKHJldCkpO1xuNzg5NTpcdFxuNzg5NjpcdFx0LyogV2FpdCBhIGJpdCBmb3IgdGhlIHJlc2V0IHRvIHRha2UgZWZmZWN0ICovXG43ODk3Olx0XHR1ZGVsYXkoMTApO1xuNzg5ODpcdFxuNzg5OTpcdFx0LyogSW5pdCBNQUMgYW5kIGdldCB0aGUgY2FwYWJpbGl0aWVzICovXG43OTAwOlx0XHRyZXQgPSBzdG1tYWNfaHdfaW5pdChwcml2KTtcbjc5MDE6XHRcdGlmIChyZXQpXG43OTAyOlx0XHRcdGdvdG8gZXJyb3JfaHdfaW5pdDtcbjc5MDM6XHRcbjc5MDQ6XHRcdC8qIE9ubHkgRFdNQUMgY29yZSB2ZXJzaW9uIDUuMjAgb253YXJkcyBzdXBwb3J0cyBIVyBkZXNjcmlwdG9yIHByZWZldGNoLlxuNzkwNTpcdFx0ICovXG43OTA2Olx0XHRpZiAocHJpdi1cdTAwM2VzeW5vcHN5c19pZCBcdTAwM2MgRFdNQUNfQ09SRV81XzIwKVxuNzkwNzpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlZG1hX2NmZy1cdTAwM2VkY2hlID0gZmFsc2U7XG43OTA4Olx0XG43OTA5Olx0XHRzdG1tYWNfY2hlY2tfZXRoZXJfYWRkcihwcml2KTtcbjc5MTA6XHRcbjc5MTE6XHRcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnN0bW1hY19uZXRkZXZfb3BzO1xuNzkxMjpcdFxuNzkxMzpcdFx0bmRldi1cdTAwM2V4ZHBfbWV0YWRhdGFfb3BzID0gXHUwMDI2c3RtbWFjX3hkcF9tZXRhZGF0YV9vcHM7XG43OTE0Olx0XHRuZGV2LVx1MDAzZXhza190eF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZzdG1tYWNfeHNrX3R4X21ldGFkYXRhX29wcztcbjc5MTU6XHRcbjc5MTY6XHRcdG5kZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfFxuNzkxNzpcdFx0XHRcdCAgICBORVRJRl9GX1JYQ1NVTTtcbjc5MTg6XHRcdG5kZXYtXHUwMDNleGRwX2ZlYXR1cmVzID0gTkVUREVWX1hEUF9BQ1RfQkFTSUMgfCBORVRERVZfWERQX0FDVF9SRURJUkVDVCB8XG43OTE5Olx0XHRcdFx0ICAgICBORVRERVZfWERQX0FDVF9YU0tfWkVST0NPUFk7XG43OTIwOlx0XG43OTIxOlx0XHRyZXQgPSBzdG1tYWNfdGNfaW5pdChwcml2LCBwcml2KTtcbjc5MjI6XHRcdGlmICghcmV0KSB7XG43OTIzOlx0XHRcdG5kZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcbjc5MjQ6XHRcdH1cbjc5MjU6XHRcbjc5MjY6XHRcdHN0bW1hY19zZXRfZ3NvX2ZlYXR1cmVzKG5kZXYpO1xuNzkyNzpcdFxuNzkyODpcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5zcGhlbiBcdTAwMjZcdTAwMjZcbjc5Mjk6XHRcdCAgICAhKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfU1BIX0RJU0FCTEUpKSB7XG43OTMwOlx0XHRcdG5kZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87XG43OTMxOlx0XHRcdHByaXYtXHUwMDNlc3BoX2NhcGFibGUgPSB0cnVlO1xuNzkzMjpcdFx0XHRwcml2LVx1MDAzZXNwaF9hY3RpdmUgPSBwcml2LVx1MDAzZXNwaF9jYXBhYmxlO1xuNzkzMzpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7U1BIIGZlYXR1cmUgZW5hYmxlZFxcblwmIzM0Oyk7XG43OTM0Olx0XHR9XG43OTM1Olx0XG43OTM2Olx0XHQvKiBJZGVhbGx5IG91ciBob3N0IERNQSBhZGRyZXNzIHdpZHRoIGlzIHRoZSBzYW1lIGFzIGZvciB0aGVcbjc5Mzc6XHRcdCAqIGRldmljZS4gSG93ZXZlciwgaXQgbWF5IGRpZmZlciBhbmQgdGhlbiB3ZSBoYXZlIHRvIHVzZSBvdXJcbjc5Mzg6XHRcdCAqIGhvc3QgRE1BIHdpZHRoIGZvciBhbGxvY2F0aW9uIGFuZCB0aGUgZGV2aWNlIERNQSB3aWR0aCBmb3Jcbjc5Mzk6XHRcdCAqIHJlZ2lzdGVyIGhhbmRsaW5nLlxuNzk0MDpcdFx0ICovXG43OTQxOlx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWhvc3RfZG1hX3dpZHRoKVxuNzk0MjpcdFx0XHRwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGggPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlaG9zdF9kbWFfd2lkdGg7XG43OTQzOlx0XHRlbHNlXG43OTQ0Olx0XHRcdHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCA9IHByaXYtXHUwMDNlZG1hX2NhcC5hZGRyNjQ7XG43OTQ1Olx0XG43OTQ2Olx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSB7XG43OTQ3Olx0XHRcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2aWNlLFxuNzk0ODpcdFx0XHRcdFx0RE1BX0JJVF9NQVNLKHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCkpO1xuNzk0OTpcdFx0XHRpZiAoIXJldCkge1xuNzk1MDpcdFx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtVc2luZyAlZC8lZCBiaXRzIERNQSBob3N0L2RldmljZSB3aWR0aFxcblwmIzM0Oyxcbjc5NTE6XHRcdFx0XHRcdCBwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgsIHByaXYtXHUwMDNlZG1hX2NhcC5hZGRyNjQpO1xuNzk1MjpcdFxuNzk1MzpcdFx0XHRcdC8qXG43OTU0Olx0XHRcdFx0ICogSWYgbW9yZSB0aGFuIDMyIGJpdHMgY2FuIGJlIGFkZHJlc3NlZCwgbWFrZSBzdXJlIHRvXG43OTU1Olx0XHRcdFx0ICogZW5hYmxlIGVuaGFuY2VkIGFkZHJlc3NpbmcgbW9kZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMTgKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgU1RNTUFDIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBzdGFydGluZyB1cCwgYW5kIHRoZSBjb2RlIGhhcyBoaXQgYHN0bW1hY19od19pbml0YC4gUmlnaHQgYXdheSwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIG9mIHRoZSBTVE1NQUMgZHJpdmVyLiBJIHdhbnQgdG8ga25vdyBleGFjdGx5IGhvdyBpdCBzZXRzIHVwIHRoZSByZWdpc3RlcnMsIGNvbmZpZ3VyZXMgdGhlIE1BQyBpdHNlbGYsIGFuZCBnZXRzIHRoaW5ncyByZWFkeSB0byByZWNlaXZlIGFuZCB0cmFuc21pdCBwYWNrZXRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZC4gVGhlIERNQSBzZXR0aW5ncywgZmxvdyBjb250cm9sLCBpbnRlcnJ1cHQgZW5hYmxlbWVudCDigJMgdGhhdCYjMzk7cyBhbGwgd2hhdCBJIHdpbGwgYmUgZ29pbmcgdG8gY2hlY2sgaW4gdGhhdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2h3X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzM2NT1zdGF0aWMgdm9pZCBzdG1tYWNfcHJpbnRfYWN0cGh5aWYoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzM5OS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzQwMDogKiAgc3RtbWFjX2h3X2luaXQgLSBJbml0IHRoZSBNQUMgZGV2aWNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDEtICogIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDYtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MDc6c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc5Nj1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03ODk5LVx0LyogSW5pdCBNQUMgYW5kIGdldCB0aGUgY2FwYWJpbGl0aWVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc5MDA6XHRyZXQgPSBzdG1tYWNfaHdfaW5pdChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzkwMS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Nzg2CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc3RtbWFjX2h3X2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaW5pdGlhbGl6ZXMgdGhlIGhhcmR3YXJlLCBhbmQgd2hhdCBzcGVjaWZpYyBzdGVwcyBpdCB0YWtlcy4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uLCBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIERNQSBlbmdpbmUsIGNvbmZpZ3VyaW5nIHRoZSBNQUMgcmVnaXN0ZXJzLCBhbmQgZ2VuZXJhbGx5IGdldHRpbmcgdGhlIEV0aGVybmV0IGNvbnRyb2xsZXIgcmVhZHkgZm9yIHVzZS4gSSBleHBlY3QgdG8gc2VlIHJlZ2lzdGVyIHdyaXRlcywgcGVyaGFwcyBjbG9jayBlbmFibGUgc2VxdWVuY2VzLCBhbmQgbGlrZWx5IHNvbWUgaW5pdGlhbCBidWZmZXIgZGVzY3JpcHRvciBzZXR1cC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcyB0aGUgZHJpdmVyIGltcGxlbWVudHMuIEkgd2FudCB0byBzZWUgaWYgdGhleSYjMzk7cmUgaGFuZGxpbmcgUEhZIGluaXRpYWxpemF0aW9uIGNvcnJlY3RseSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zIEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8uIEFsc28sIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2Ygc2ltaWxhciBkcml2ZXJzLCBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBwb3dlci1zYXZpbmcgbWVjaGFuaXNtcyB0aGF0IG1pZ2h0IGJlIGluaXRpYXRlZCBoZXJlLCBvciBkZWZlcnJlZCB0byBsYXRlciBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IG1hcCBhY2Nlc3MgYW5kIGFueSBwb3RlbnRpYWwgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkuIFVsdGltYXRlbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGNvbmZpcm0gd2hldGhlciBpdCBpcyBhIHJvYnVzdCBhbmQgZWZmaWNpZW50IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc0MDc6XHRzdGF0aWMgaW50IHN0bW1hY19od19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbjc0MDg6XHR7XG43NDA5Olx0XHRpbnQgcmV0O1xuNzQxMDpcdFxuNzQxMTpcdFx0LyogZHdtYWMtc3VuOGkgb25seSB3b3JrIGluIGNoYWluIG1vZGUgKi9cbjc0MTI6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX0hBU19TVU44SSlcbjc0MTM6XHRcdFx0Y2hhaW5fbW9kZSA9IDE7XG43NDE0Olx0XHRwcml2LVx1MDAzZWNoYWluX21vZGUgPSAhIWNoYWluX21vZGU7XG43NDE1Olx0XG43NDE2Olx0XHQvKiBJbml0aWFsaXplIEhXIEludGVyZmFjZSAqL1xuNzQxNzpcdFx0cmV0ID0gc3RtbWFjX2h3aWZfaW5pdChwcml2KTtcbjc0MTg6XHRcdGlmIChyZXQpXG43NDE5Olx0XHRcdHJldHVybiByZXQ7XG43NDIwOlx0XG43NDIxOlx0XHQvKiBHZXQgdGhlIEhXIGNhcGFiaWxpdHkgKG5ldyBHTUFDIG5ld2VyIHRoYW4gMy41MGEpICovXG43NDIyOlx0XHRwcml2LVx1MDAzZWh3X2NhcF9zdXBwb3J0ID0gc3RtbWFjX2dldF9od19mZWF0dXJlcyhwcml2KTtcbjc0MjM6XHRcdGlmIChwcml2LVx1MDAzZWh3X2NhcF9zdXBwb3J0KSB7XG43NDI0Olx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtETUEgSFcgY2FwYWJpbGl0eSByZWdpc3RlciBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuNzQyNTpcdFxuNzQyNjpcdFx0XHQvKiBXZSBjYW4gb3ZlcnJpZGUgc29tZSBnbWFjL2RtYSBjb25maWd1cmF0aW9uIGZpZWxkczogZS5nLlxuNzQyNzpcdFx0XHQgKiBlbmhfZGVzYywgdHhfY29lIChlLmcuIHRoYXQgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZVxuNzQyODpcdFx0XHQgKiBwbGF0Zm9ybSkgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhlIEhXIGNhcGFiaWxpdHlcbjc0Mjk6XHRcdFx0ICogcmVnaXN0ZXIgKGlmIHN1cHBvcnRlZCkuXG43NDMwOlx0XHRcdCAqL1xuNzQzMTpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlZW5oX2Rlc2MgPSBwcml2LVx1MDAzZWRtYV9jYXAuZW5oX2Rlc2M7XG43NDMyOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwbXQgPSBwcml2LVx1MDAzZWRtYV9jYXAucG10X3JlbW90ZV93YWtlX3VwIFx1MDAyNlx1MDAyNlxuNzQzMzpcdFx0XHRcdFx0IShwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX1VTRV9QSFlfV09MKTtcbjc0MzQ6XHRcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5oYXNoX3RiX3N6KSB7XG43NDM1Olx0XHRcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2VtdWx0aWNhc3RfZmlsdGVyX2JpbnMgPVxuNzQzNjpcdFx0XHRcdFx0XHQoQklUKHByaXYtXHUwMDNlZG1hX2NhcC5oYXNoX3RiX3N6KSBcdTAwM2NcdTAwM2MgNSk7XG43NDM3Olx0XHRcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2VtY2FzdF9iaXRzX2xvZzIgPVxuNzQzODpcdFx0XHRcdFx0XHRpbG9nMihwcml2LVx1MDAzZWh3LVx1MDAzZW11bHRpY2FzdF9maWx0ZXJfYmlucyk7XG43NDM5Olx0XHRcdH1cbjc0NDA6XHRcbjc0NDE6XHRcdFx0LyogVFhDT0UgZG9lc24mIzM5O3Qgd29yayBpbiB0aHJlc2ggRE1BIG1vZGUgKi9cbjc0NDI6XHRcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vmb3JjZV90aHJlc2hfZG1hX21vZGUpXG43NDQzOlx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2NvZSA9IGZhbHNlO1xuNzQ0NDpcdFx0XHRlbHNlXG43NDQ1Olx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2NvZSA9IHByaXYtXHUwMDNlZG1hX2NhcC50eF9jb2U7XG43NDQ2Olx0XG43NDQ3Olx0XHRcdC8qIEluIGNhc2Ugb2YgR01BQzQgcnhfY29lIGlzIGZyb20gSFcgY2FwIHJlZ2lzdGVyLiAqL1xuNzQ0ODpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lID0gcHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2NvZTtcbjc0NDk6XHRcbjc0NTA6XHRcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5yeF9jb2VfdHlwZTIpXG43NDUxOlx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2NvZSA9IFNUTU1BQ19SWF9DT0VfVFlQRTI7XG43NDUyOlx0XHRcdGVsc2UgaWYgKHByaXYtXHUwMDNlZG1hX2NhcC5yeF9jb2VfdHlwZTEpXG43NDUzOlx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2NvZSA9IFNUTU1BQ19SWF9DT0VfVFlQRTE7XG43NDU0Olx0XG43NDU1Olx0XHRcdHN0bW1hY19wcmludF9hY3RwaHlpZihwcml2KTtcbjc0NTY6XHRcdH0gZWxzZSB7XG43NDU3Olx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtObyBIVyBETUEgZmVhdHVyZSByZWdpc3RlciBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuNzQ1ODpcdFx0fVxuNzQ1OTpcdFxuNzQ2MDpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9jb2UpIHtcbjc0NjE6XHRcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2VyeF9jc3VtID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2NvZTtcbjc0NjI6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1JYIENoZWNrc3VtIE9mZmxvYWQgRW5naW5lIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDYzOlx0XHRcdGlmIChwcml2LVx1MDAzZXN5bm9wc3lzX2lkIFx1MDAzYyBEV01BQ19DT1JFXzRfMDApXG43NDY0Olx0XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0NPRSBUeXBlICVkXFxuXCYjMzQ7LCBwcml2LVx1MDAzZWh3LVx1MDAzZXJ4X2NzdW0pO1xuNzQ2NTpcdFx0fVxuNzQ2NjpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9jb2UpXG43NDY3Olx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtUWCBDaGVja3N1bSBpbnNlcnRpb24gc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjc0Njg6XHRcbjc0Njk6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlcG10KSB7XG43NDcwOlx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtXYWtlLVVwIE9uIExhbiBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuNzQ3MTpcdFx0XHRkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKHByaXYtXHUwMDNlZGV2aWNlLCAxKTtcbjc0NzI6XHRcdFx0ZGV2bV9wbV9zZXRfd2FrZV9pcnEocHJpdi1cdTAwM2VkZXZpY2UsIHByaXYtXHUwMDNld29sX2lycSk7XG43NDczOlx0XHR9XG43NDc0Olx0XG43NDc1Olx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLm51bWJlcl9yeF9xdWV1ZXMgXHUwMDI2XHUwMDI2XG43NDc2Olx0XHQgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2UgXHUwMDNlIHByaXYtXHUwMDNlZG1hX2NhcC5udW1iZXJfcnhfcXVldWVzKSB7XG43NDc3Olx0XHRcdGRldl93YXJuKHByaXYtXHUwMDNlZGV2aWNlLFxuNzQ3ODpcdFx0XHRcdCBcJiMzNDtOdW1iZXIgb2YgUnggcXVldWVzICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcblwmIzM0Oyxcbjc0Nzk6XHRcdFx0XHQgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2UpO1xuNzQ4MDpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfcXVldWVzX3RvX3VzZSA9IHByaXYtXHUwMDNlZG1hX2NhcC5udW1iZXJfcnhfcXVldWVzO1xuNzQ4MTpcdFx0fVxuNzQ4MjpcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5udW1iZXJfdHhfcXVldWVzIFx1MDAyNlx1MDAyNlxuNzQ4MzpcdFx0ICAgIHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlIFx1MDAzZSBwcml2LVx1MDAzZWRtYV9jYXAubnVtYmVyX3R4X3F1ZXVlcykge1xuNzQ4NDpcdFx0XHRkZXZfd2Fybihwcml2LVx1MDAzZWRldmljZSxcbjc0ODU6XHRcdFx0XHQgXCYjMzQ7TnVtYmVyIG9mIFR4IHF1ZXVlcyAoJXUpIGV4Y2VlZHMgZG1hIGNhcGFiaWxpdHlcXG5cJiMzNDssXG43NDg2Olx0XHRcdFx0IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NjcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTVE1NQUMgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYHN0bW1hY19od2lmX2luaXRgIGhhcyBiZWVuIGNhbGxlZC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGhhcHBlbnMsIHJpZ2h0PyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqZG9pbmcqLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gd2hldGhlciBvciBub3QgaXQmIzM5O3MgYWN0dWFsbHkgYWNjZXNzaW5nIHRoZSByZWdpc3RlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0JiMzOTtzIHJlYWRpbmcgdGhlIGNoaXAmIzM5O3MgSUQgb3Igc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgd2l0aCBkZWZhdWx0IHZhbHVlcy4gRG9lcyB0aGlzIGZ1bmN0aW9uIHN0YXJ0IHRoZSBQSFkgYXV0b25lZ290aWF0aW9uIHNlcXVlbmNlPyBJcyBpdCBwcm9iaW5nIHRoZSBETUEgZW5naW5lPyBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50LCBlc3RhYmxpc2hpbmcgYSBiYXNlbGluZSBvZiB3aGF0IGFjdGlvbnMgYXJlIGJlaW5nIHBlcmZvcm1lZCBhdCB0aGlzIHN0YWdlLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSByZWdpc3RlciBhY2Nlc3NlcyB0byBlbnN1cmUgdGhlIGRyaXZlciBpcyBzZXR0aW5nIHVwIHRoZSBoYXJkd2FyZSBjb3JyZWN0bHkgYW5kIHRvIGNhdGNoIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGVhcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfaHdpZl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0yOTQ9c3RtbWFjX2h3aWZfZmluZChlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUsIHU4IHNucHN2ZXIsIHU4IGRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjMxNzppbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzE4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9NzAxPWludCBzdG1tYWNfcmVzZXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaDo3MDI6aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaC03MDMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NDA3PXN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQxNi1cdC8qIEluaXRpYWxpemUgSFcgSW50ZXJmYWNlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MTc6XHRyZXQgPSBzdG1tYWNfaHdpZl9pbml0KHByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDE4LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMzUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgU1RNTUFDIEhhcmR3YXJlIEludGVyZmFjZSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGZvciB0aGlzIFNUTU1BQyBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgc3RtbWFjX2h3aWZfaW5pdGAgZnVuY3Rpb24gbG9jYXRlZCB3aXRoaW4gYGh3aWYuY2AuIFRoaXMgaXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgdGhlIGhhcmR3YXJlJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIGRyaXZlciwgc2V0dGluZyB1cCByZWdpc3RlcnMsIGFuZCBwcmVwYXJpbmcgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbHMuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0IHBhcmFtZXRlcnMgaXQgdGFrZXMsIHdoYXQgaXQgZG9lcyB3aXRoIHRoZW0sIGFuZCBob3cgaXQgc2V0cyB1cCB0aGUgY29yZSBoYXJkd2FyZSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLCBpbiB0ZXJtcyBvZiB0aGUgZHJpdmVyJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIFNUTU1BQyBjb250cm9sbGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGZ1bmN0aW9uIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE3Olx0aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIDMxODpcdHtcbiAzMTk6XHRcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGU7XG4gMzIwOlx0XHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xuIDMyMTpcdFx0c3RydWN0IHN0bW1hY192ZXJzaW9uIHZlcnNpb247XG4gMzIyOlx0XHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7XG4gMzIzOlx0XHRib29sIG5lZWRzX3NldHVwID0gdHJ1ZTtcbiAzMjQ6XHRcdGludCByZXQ7XG4gMzI1Olx0XG4gMzI2Olx0XHRzdG1tYWNfZ2V0X3ZlcnNpb24ocHJpdiwgXHUwMDI2dmVyc2lvbik7XG4gMzI3Olx0XG4gMzI4Olx0XHQvKiBTYXZlIElEIGZvciBsYXRlciB1c2UgKi9cbiAzMjk6XHRcdHByaXYtXHUwMDNlc3lub3BzeXNfaWQgPSB2ZXJzaW9uLnNucHN2ZXI7XG4gMzMwOlx0XG4gMzMxOlx0XHRtYWMgPSBkZXZtX2t6YWxsb2MocHJpdi1cdTAwM2VkZXZpY2UsIHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7XG4gMzMyOlx0XHRpZiAoIW1hYylcbiAzMzM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzM0Olx0XG4gMzM1Olx0XHQvKiBDaGVjayBmb3IgSFcgc3BlY2lmaWMgc2V0dXAgZmlyc3QgKi9cbiAzMzY6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWFjX3NldHVwKSB7XG4gMzM3Olx0XHRcdHJldCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtYWNfc2V0dXAocHJpdiwgbWFjKTtcbiAzMzg6XHRcdFx0aWYgKHJldClcbiAzMzk6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM0MDpcdFxuIDM0MTpcdFx0XHRuZWVkc19zZXR1cCA9IGZhbHNlO1xuIDM0MjpcdFx0fVxuIDM0MzpcdFxuIDM0NDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bWFjLVx1MDAzZWlycV9jdHJsX2xvY2spO1xuIDM0NTpcdFxuIDM0NjpcdFx0LyogRmFsbGJhY2sgdG8gZ2VuZXJpYyBIVyAqL1xuIDM0NzpcdFxuIDM0ODpcdFx0LyogVXNlIHN5bm9wc3lzX2lkIHZhciBiZWNhdXNlIHNvbWUgc2V0dXBzIGNhbiBvdmVycmlkZSB0aGlzICovXG4gMzQ5Olx0XHRlbnRyeSA9IHN0bW1hY19od2lmX2ZpbmQoY29yZV90eXBlLCBwcml2LVx1MDAzZXN5bm9wc3lzX2lkLCB2ZXJzaW9uLmRldl9pZCk7XG4gMzUwOlx0XHRpZiAoIWVudHJ5KSB7XG4gMzUxOlx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXZpY2UsXG4gMzUyOlx0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGZpbmQgSFcgSUYgKGlkPTB4JXgsIGdtYWM9JWQvJWQpXFxuXCYjMzQ7LFxuIDM1MzpcdFx0XHRcdHZlcnNpb24uc25wc3ZlciwgY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQyxcbiAzNTQ6XHRcdFx0XHRjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCk7XG4gMzU1Olx0XG4gMzU2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM1NzpcdFx0fVxuIDM1ODpcdFxuIDM1OTpcdFx0LyogT25seSB1c2UgZ2VuZXJpYyBIVyBoZWxwZXJzIGlmIG5lZWRlZCAqL1xuIDM2MDpcdFx0bWFjLVx1MDAzZWRlc2MgPSBtYWMtXHUwMDNlZGVzYyA/IDogZW50cnktXHUwMDNlZGVzYztcbiAzNjE6XHRcdG1hYy1cdTAwM2VkbWEgPSBtYWMtXHUwMDNlZG1hID8gOiBlbnRyeS1cdTAwM2VkbWE7XG4gMzYyOlx0XHRtYWMtXHUwMDNlbWFjID0gbWFjLVx1MDAzZW1hYyA/IDogZW50cnktXHUwMDNlbWFjO1xuIDM2MzpcdFx0bWFjLVx1MDAzZXB0cCA9IG1hYy1cdTAwM2VwdHAgPyA6IGVudHJ5LVx1MDAzZWh3dGltZXN0YW1wO1xuIDM2NDpcdFx0bWFjLVx1MDAzZW1vZGUgPSBtYWMtXHUwMDNlbW9kZSA/IDogZW50cnktXHUwMDNlbW9kZTtcbiAzNjU6XHRcdG1hYy1cdTAwM2V0YyA9IG1hYy1cdTAwM2V0YyA/IDogZW50cnktXHUwMDNldGM7XG4gMzY2Olx0XHRtYWMtXHUwMDNlbW1jID0gbWFjLVx1MDAzZW1tYyA/IDogZW50cnktXHUwMDNlbW1jO1xuIDM2NzpcdFx0bWFjLVx1MDAzZWVzdCA9IG1hYy1cdTAwM2Vlc3QgPyA6IGVudHJ5LVx1MDAzZWVzdDtcbiAzNjg6XHRcdG1hYy1cdTAwM2V2bGFuID0gbWFjLVx1MDAzZXZsYW4gPyA6IGVudHJ5LVx1MDAzZXZsYW47XG4gMzY5Olx0XG4gMzcwOlx0XHRwcml2LVx1MDAzZWh3ID0gbWFjO1xuIDM3MTpcdFx0cHJpdi1cdTAwM2VmcGVfY2ZnLnJlZyA9IGVudHJ5LVx1MDAzZXJlZ3MuZnBlX3JlZztcbiAzNzI6XHRcdHByaXYtXHUwMDNlcHRwYWRkciA9IHByaXYtXHUwMDNlaW9hZGRyICYjNDM7IGVudHJ5LVx1MDAzZXJlZ3MucHRwX29mZjtcbiAzNzM6XHRcdHByaXYtXHUwMDNlbW1jYWRkciA9IHByaXYtXHUwMDNlaW9hZGRyICYjNDM7IGVudHJ5LVx1MDAzZXJlZ3MubW1jX29mZjtcbiAzNzQ6XHRcdG1lbWNweShcdTAwMjZwcml2LVx1MDAzZXB0cF9jbG9ja19vcHMsIGVudHJ5LVx1MDAzZXB0cCxcbiAzNzU6XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHB0cF9jbG9ja19pbmZvKSk7XG4gMzc2Olx0XG4gMzc3Olx0XHRpZiAoZW50cnktXHUwMDNlZXN0KVxuIDM3ODpcdFx0XHRwcml2LVx1MDAzZWVzdGFkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBlbnRyeS1cdTAwM2VyZWdzLmVzdF9vZmY7XG4gMzc5Olx0XG4gMzgwOlx0XHQvKiBFbnRyeSBmb3VuZCAqL1xuIDM4MTpcdFx0aWYgKG5lZWRzX3NldHVwKSB7XG4gMzgyOlx0XHRcdHJldCA9IGVudHJ5LVx1MDAzZXNldHVwKHByaXYpO1xuIDM4MzpcdFx0XHRpZiAocmV0KVxuIDM4NDpcdFx0XHRcdHJldHVybiByZXQ7XG4gMzg1Olx0XHR9XG4gMzg2Olx0XG4gMzg3Olx0XHQvKiBTYXZlIHF1aXJrcywgaWYgbmVlZGVkIGZvciBwb3N0ZXJpb3IgdXNlICovXG4gMzg4Olx0XHRwcml2LVx1MDAzZWh3aWZfcXVpcmtzID0gZW50cnktXHUwMDNlcXVpcmtzO1xuIDM4OTpcdFxuIDM5MDpcdFx0cmV0dXJuIDA7XG4gMzkxOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY1MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNUTU1BQyBWZXJzaW9uIENoZWNrKioKCkFscmlnaHQsIHRoZSBjb2RlJiMzOTtzIGNhbGxpbmcgYHN0bW1hY19nZXRfdmVyc2lvbihwcml2LCAmYW1wO3ZlcnNpb24pYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0JiMzOTtzIGRvaW5nLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgc3RtbWFjX2dldF92ZXJzaW9uYCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgcHJvYmFibHkgaG93IHRoZSBkcml2ZXIgZmlndXJlcyBvdXQgdGhlIGhhcmR3YXJlIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uLCBvciBhIHN1cHBvcnRlZCBmZWF0dXJlIHNldCBmb3IgdGhlIFNUTU1BQyBFdGhlcm5ldCBjb250cm9sbGVyIGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGgsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSBmb3IgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBJdCBpcyBtb3N0IGxpa2VseSBwYXNzaW5nIGEgcG9pbnRlciB0byBhIGB2ZXJzaW9uYCBzdHJ1Y3QsIGZpbGxpbmcgaW4gaGFyZHdhcmUtc3BlY2lmaWMgdmVyc2lvbiBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGJlIGNydWNpYWwgZm9yIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIGhhbmRsZWQgcHJvcGVybHksIGFuZCB0aGUgY29kZSB0YWtlcyB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uIGJhc2VkIG9uIHRoZSBpZGVudGlmaWVkIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gSSBleHBlY3QgdGhpcyBjYWxsIGlzIGZ1bmRhbWVudGFsIGZvciB2ZXJpZnlpbmcgY29tcGF0aWJpbGl0eSBhbmQgcG90ZW50aWFsbHkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGNlcnRhaW4gZHJpdmVyIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSBkZXRlY3RlZCBoYXJkd2FyZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSByZXR1cm5lZCB2ZXJzaW9uIHN0cnVjdCBpcyB0aGVuIHVzZWQ7IHRoYXQmIzM5O3MgdGhlIG5leHQgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19nZXRfdmVyc2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTY9c3RydWN0IHN0bW1hY192ZXJzaW9uIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjE6c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yMi1cdFx0XHQgICAgICAgc3RydWN0IHN0bW1hY192ZXJzaW9uICp2ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTMxNz1pbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMyNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMjY6XHRzdG1tYWNfZ2V0X3ZlcnNpb24ocHJpdiwgXHUwMDI2dmVyc2lvbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIzOAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIGVtYmVkZGVkIHN5c3RlbXMgYW5kIGRldmljZSBkcml2ZXJzOgoKKipBbmFseXppbmcgdGhlIENhbGwgdG8gYHN0bW1hY19nZXRfdmVyc2lvbmAqKgoKQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhcjogZGl2ZSBpbnRvIHRoZSBgc3RtbWFjX2dldF92ZXJzaW9uYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFVuZGVyc3RhbmRpbmcgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gb2YgdGhlIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgZHJpdmVyIGlzIGNydWNpYWwsIGl0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIG9mIGFsbW9zdCBldmVyeXRoaW5nLiBJdCB1c3VhbGx5IGludm9sdmVzIHJlYWRpbmcgcmVnaXN0ZXJzLCBtYXliZSBzb21lIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGRyaXZlciwgYW5kIGZvcm1hdHRpbmcgdGhhdCBkYXRhIGZvciB0aGUgdXNlci4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBJcyBpdCBhIGRpcmVjdCByZWdpc3RlciByZWFkLCBvciBkb2VzIGl0IGludm9sdmUgc29tZSBtb3JlIGNvbXBsZXggbG9naWMgdG8gZGV0ZXJtaW5lIHRoZSBkcml2ZXImIzM5O3MgcmV2aXNpb24sIGZlYXR1cmUgc2V0LCBvciBoYXJkd2FyZSBjb21wYXRpYmlsaXR5PyBIb3BlZnVsbHksIGl0IGlzIHdlbGwgZG9jdW1lbnRlZDsgb3RoZXJ3aXNlIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlZ2lzdGVyLWxldmVsIGludGVycHJldGF0aW9uIG9mIGl0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGRlYnVnZ2luZyBhbmQgZW5zdXJpbmcgY29tcGF0aWJpbGl0eSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgaGFyZHdhcmUgcmV2aXNpb25zIG9yIGtlcm5lbCB2ZXJzaW9ucy4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIGl0JiMzOTtzIHdvcmtpbmcgd2l0aCBhbmQgaG93IHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIHN0cnVjdHVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdHN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gIDIyOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxuICAyMzpcdHtcbiAgMjQ6XHRcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGU7XG4gIDI1Olx0XHR1bnNpZ25lZCBpbnQgdmVyc2lvbl9vZmZzZXQ7XG4gIDI2Olx0XHR1MzIgdmVyc2lvbjtcbiAgMjc6XHRcbiAgMjg6XHRcdHZlci1cdTAwM2VzbnBzdmVyID0gMDtcbiAgMjk6XHRcdHZlci1cdTAwM2VkZXZfaWQgPSAwO1xuICAzMDpcdFxuICAzMTpcdFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX01BQzEwMClcbiAgMzI6XHRcdFx0cmV0dXJuO1xuICAzMzpcdFxuICAzNDpcdFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUMpXG4gIDM1Olx0XHRcdHZlcnNpb25fb2Zmc2V0ID0gR01BQ19WRVJTSU9OO1xuICAzNjpcdFx0ZWxzZVxuICAzNzpcdFx0XHR2ZXJzaW9uX29mZnNldCA9IEdNQUM0X1ZFUlNJT047XG4gIDM4Olx0XG4gIDM5Olx0XHR2ZXJzaW9uID0gcmVhZGwocHJpdi1cdTAwM2Vpb2FkZHIgJiM0MzsgdmVyc2lvbl9vZmZzZXQpO1xuICA0MDpcdFx0aWYgKHZlcnNpb24gPT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmVyc2lvbiBSZWFkKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UmIzM5O3JlIHB1bGxpbmcgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24uIFRoZSBjb2RlIGlzIHJlYWRpbmcgZnJvbSBgcHJpdi0mZ3Q7aW9hZGRyYCBvZmZzZXQgYnkgYHZlcnNpb25fb2Zmc2V0YC4gU3RhbmRhcmQgc3R1ZmYuIEJ1dCB0aGVuLCBJJiMzOTttIHRoaW5raW5nLCB3aGF0IGhhcHBlbnMgd2l0aCBhIGR1bW15IGRldmljZT8gIGByZWFkbGAgY291bGQgY291Z2ggdXAgZWl0aGVyIGAweGZmZmZmZmZmYCBvciBhIHN0cmFpZ2h0IGAwYCwgZGVwZW5kaW5nIG9uIGhvdyB0aGUgbWVtb3J5IG1hcHBpbmcmIzM5O3Mgc2V0IHVwLiBUaGUgcmVhbGx5IGludGVyZXN0aW5nIHNjZW5hcmlvIGlzIGlmIHdlIGdldCBhIGAwYC4gVGhhdCBsaWtlbHkgbWVhbnMgd2UmIzM5O2xsIGZhaWwgdG8gSUQgdGhlIGhhcmR3YXJlIGludGVyZmFjZS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBMZXQmIzM5O3MgZGlnIGludG8gd2hhdCBoYXBwZW5zIHNwZWNpZmljYWxseSBpZiBgdmVyc2lvbiA9PSAwYC4gV2UmIzM5O3ZlIGdvdCB0byBjb3ZlciBhbGwgdGhlIGJhc2VzIHRvIG1ha2UgdGhpcyB0cnVseSByb2J1c3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0aWYgKHZlcnNpb24gPT0gMCkge1xuICA0MTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7VmVyc2lvbiBJRCBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiAgNDI6XHRcdFx0cmV0dXJuO1xuICA0MzpcdFx0fVxuICA0NDpcdFxuICA0NTpcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1VzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XFxuXCYjMzQ7LFxuICA0NjpcdFx0XHQgRklFTERfR0VUKERXTUFDX1VTRVJWRVIsIHZlcnNpb24pLFxuICA0NzpcdFx0XHQgRklFTERfR0VUKERXTUFDX1NOUFNWRVIsIHZlcnNpb24pKTtcbiAgNDg6XHRcbiAgNDk6XHRcdHZlci1cdTAwM2VzbnBzdmVyID0gRklFTERfR0VUKERXTUFDX1NOUFNWRVIsIHZlcnNpb24pO1xuICA1MDpcdFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxuICA1MTpcdFx0XHR2ZXItXHUwMDNlZGV2X2lkID0gRklFTERfR0VUKERXTUFDX1VTRVJWRVIsIHZlcnNpb24pO1xuICA1MjpcdH1cbiAgNTM6XHRcbiAgNTQ6XHRzdGF0aWMgdm9pZCBzdG1tYWNfZHdtYWNfbW9kZV9xdWlyayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gIDU1Olx0e1xuICA1NjpcdFx0c3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjID0gcHJpdi1cdTAwM2VodztcbiAgNTc6XHRcbiAgNTg6XHRcdGlmIChwcml2LVx1MDAzZWNoYWluX21vZGUpIHtcbiAgNTk6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0NoYWluIG1vZGUgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDIxCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEZWNvZGluZyB0aGUgVmVyc2lvbiBDaGVjayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQ6IGBpZiB2ZXJzaW9uID09IDBgLiBTbywgaWYgdGhlIHNvZnR3YXJlJiMzOTtzIHZlcnNpb24gaXMgYXQgaXRzIGluaXRpYWwgc3RhdGUsIHdoaWNoIEkgdXN1YWxseSByZXByZXNlbnQgd2l0aCAmIzM5OzAmIzM5OywgdGhlbiB0aGlzIHZhcmlhYmxlLCBgdmVyLSZndDtzbnBzdmVyYCwgaXMgYWxzbyBnb2luZyB0byBiZSBzZXQgdG8gemVyby4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIGNvbnNpc3RlbnQgZnJvbSB0aGUgc3RhcnQuCgpOb3csIHRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB3aGF0IGhhcHBlbnMgbmV4dC4gV2l0aCBgc25wc3ZlcmAgY29uZmlybWVkIGFzIHplcm8sIHRoZSBjb2RlIHByb2NlZWRzIHRvIGNhbGwgYHN0bW1hY19od2lmX2ZpbmRgLiBDcnVjaWFsbHksIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIGBzbnBzdmVyID0gMGAuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgYHN0bW1hY19od2lmX2ZpbmRgIGxpa2VseSB1c2VzIHRoZSBgc25wc3ZlcmAgdmFsdWUgdG8gZGV0ZXJtaW5lIHdoaWNoIGhhcmR3YXJlIGludGVyZmFjZSB0byBhdHRhY2ggdG8sIG9yIHBvc3NpYmx5IGhvdyB0byBpbml0aWFsaXplIHRoZSBoYXJkd2FyZSBhcHByb3ByaWF0ZWx5LiBQYXNzaW5nIHplcm8gY291bGQgbWVhbiBhIGRlZmF1bHQgb3IgbGVnYWN5IGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgYSAmIzM5O2Jlc3QgZ3Vlc3MmIzM5OyBpbml0aWFsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NDpcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXG4gMjk1Olx0e1xuIDI5NjpcdFx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcbiAyOTc6XHRcdGludCBpO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yIChpID0gQVJSQVlfU0laRShzdG1tYWNfaHcpIC0gMTsgaSBcdTAwM2U9IDA7IGktLSkge1xuIDMwMDpcdFx0XHRlbnRyeSA9IFx1MDAyNnN0bW1hY19od1tpXTtcbiAzMDE6XHRcbiAzMDI6XHRcdFx0aWYgKGNvcmVfdHlwZSAhPSBlbnRyeS1cdTAwM2Vjb3JlX3R5cGUpXG4gMzAzOlx0XHRcdFx0Y29udGludWU7XG4gMzA0Olx0XHRcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xuIDMwNTpcdFx0XHRpZiAoc25wc3ZlciBcdTAwM2MgZW50cnktXHUwMDNlbWluX2lkKVxuIDMwNjpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwNzpcdFx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMgXHUwMDI2XHUwMDI2XG4gMzA4Olx0XHRcdCAgICBkZXZfaWQgIT0gZW50cnktXHUwMDNlZGV2X2lkKVxuIDMwOTpcdFx0XHRcdGNvbnRpbnVlO1xuIDMxMDpcdFxuIDMxMTpcdFx0XHRyZXR1cm4gZW50cnk7XG4gMzEyOlx0XHR9XG4gMzEzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDQ5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIHRoZSBTTlAgVmVyc2lvbiBhbmQgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIqKgoKQWxyaWdodCwgc28gaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGUgY3VycmVudCBsb2dpYyBpcyAqdmVyeSogc3BlY2lmaWMgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGBzbnBzdmVyYCB2YXJpYWJsZSBiZWluZyBlcXVhbCB0byB6ZXJvLiBJdCBtZWFucyB0aGUgZmlsdGVyaW5nIHdpbGwgYmUgaW5jcmVkaWJseSBzdHJpY3QsIG9ubHkgcHVsbGluZyBpbiBlbnRyaWVzIHdoZXJlIGBtaW5faWRgIGlzICphbHNvKiB6ZXJvLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgdG8gbm90ZSwgYXMgaXQgZHJhc3RpY2FsbHkgbGltaXRzIHRoZSBwb3RlbnRpYWwgbWF0Y2hlcyBpbiB0aGUgZGF0YWJhc2UuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGludGVycHJldGluZyB0aGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkgb3IgcHJvY2VzcyB0aGF0JiMzOTtzIHVzaW5nIHRoaXMgY29uZGl0aW9uLiBJdOKAmXMgZXNzZW50aWFsbHkgYSAmIzM0O3N0cmljdCBtYXRjaCYjMzQ7IHNjZW5hcmlvLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHN0bW1hY19od2AgYXJyYXkuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgdGhlIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgZHJpdmVyLCBidXQgSSBuZWVkIHRvIGRpdmUgaW4gYW5kIGNvbmZpcm0gdGhhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSBpcyByZXByZXNlbnRlZCBhdCB0aGlzIGxldmVsLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGxvd2VyIGxheWVycyBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgY29ycmVjdC4gTGV04oCZcyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2h3XFxbXFxdJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0xMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTEyNy1cdGludCAoKnF1aXJrcykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoxMjg6fSBzdG1tYWNfaHdbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xMjktXHQvKiBOT1RFOiBOZXcgSFcgdmVyc2lvbnMgc2hhbGwgZ28gdG8gdGhlIGVuZCBvZiB0aGlzIHRhYmxlICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTQxCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBzdG1tYWNfaHdgIEFycmF5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc3RtbWFjX2h3YCBhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSwgcHVycG9zZSwgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIFNUTU1BQyBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyZWF0IGl0IGFzIGEgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIsIGEgY29sbGVjdGlvbiBvZiByZWdpc3RlcnMsIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLgoKSSYjMzk7bSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHBvdGVudGlhbCB1c2UgY2FzZXMuIElzIHRoaXMgYSBsb29rLXVwIHRhYmxlIGZvciByZWdpc3RlciBvZmZzZXRzPyBBcmUgdGhlcmUgYml0ZmllbGQgZGVmaW5pdGlvbnMgaW4gaGVyZSwgcGVyaGFwcyBvcmdhbml6ZWQgYnkgZnVuY3Rpb25hbCBibG9jayB3aXRoaW4gdGhlIE1BQz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgRE1BIGNoYW5uZWwgY29uZmlndXJhdGlvbiwgTUFDIGFkZHJlc3MgcmVnaXN0ZXJzLCBpbnRlcnJ1cHQgY29udHJvbCwgYW5kIHN0YXRpc3RpY3MgY291bnRlcnMg4oCTIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHMuIEnigJltIGV4cGVjdGluZyBhIG1peCBvZiByYXcgcmVnaXN0ZXIgYWRkcmVzc2VzIChvciBzeW1ib2xpYyByZXByZXNlbnRhdGlvbnMpLCBtYXNrIHZhbHVlcyBmb3IgYml0ZmllbGQgbWFuaXB1bGF0aW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBkZWZhdWx0IHZhbHVlcyBvciBpbml0aWFsaXphdGlvbiBzZXR0aW5ncy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhcnJheSBlbGVtZW50cywgdHJ5aW5nIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzIG9yIGdyb3VwaW5ncyB0aGF0IGltcGx5IHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaGVyZSB3aWxsIGJlIGNyaXRpY2FsLiBJZiBJIHNlZSBjb25zaXN0ZW50IHByZWZpeGVzIG9yIHN1ZmZpeGVzLCB0aGF0IGNvdWxkIHJldmVhbCB2YWx1YWJsZSBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlciBvcmdhbml6YXRpb24gYW5kIG92ZXJhbGwgbW9kdWxlIGludGVyYWN0aW9uLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZSBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIGFuZCBjb250cm9scyB0aGUgU1RNTUFDIGhhcmR3YXJlLiBUaGlzIGFycmF5IGhvbGRzIHRoZSBrZXkgdG8gdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uLCBzbyBsZXQmIzM5O3Mgc3RhcnQgcmVhZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyODpcdH0gc3RtbWFjX2h3W10gPSB7XG4gMTI5Olx0XHQvKiBOT1RFOiBOZXcgSFcgdmVyc2lvbnMgc2hhbGwgZ28gdG8gdGhlIGVuZCBvZiB0aGlzIHRhYmxlICovXG4gMTMwOlx0XHR7XG4gMTMxOlx0XHRcdC5jb3JlX3R5cGUgPSBEV01BQ19DT1JFX01BQzEwMCxcbiAxMzI6XHRcdFx0Lm1pbl9pZCA9IDAsXG4gMTMzOlx0XHRcdC5yZWdzID0ge1xuIDEzNDpcdFx0XHRcdC5wdHBfb2ZmID0gUFRQX0dNQUMzX1hfT0ZGU0VULFxuIDEzNTpcdFx0XHRcdC5tbWNfb2ZmID0gTU1DX0dNQUMzX1hfT0ZGU0VULFxuIDEzNjpcdFx0XHR9LFxuIDEzNzpcdFx0XHQuZGVzYyA9IE5VTEwsXG4gMTM4Olx0XHRcdC5kbWEgPSBcdTAwMjZkd21hYzEwMF9kbWFfb3BzLFxuIDEzOTpcdFx0XHQubWFjID0gXHUwMDI2ZHdtYWMxMDBfb3BzLFxuIDE0MDpcdFx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZkd21hYzEwMDBfcHRwLFxuIDE0MTpcdFx0XHQucHRwID0gXHUwMDI2ZHdtYWMxMDAwX3B0cF9jbG9ja19vcHMsXG4gMTQyOlx0XHRcdC5tb2RlID0gTlVMTCxcbiAxNDM6XHRcdFx0LnRjID0gTlVMTCxcbiAxNDQ6XHRcdFx0Lm1tYyA9IFx1MDAyNmR3bWFjX21tY19vcHMsXG4gMTQ1Olx0XHRcdC5zZXR1cCA9IGR3bWFjMTAwX3NldHVwLFxuIDE0NjpcdFx0XHQucXVpcmtzID0gc3RtbWFjX2R3bWFjMV9xdWlya3MsXG4gMTQ3Olx0XHR9LCB7XG4gMTQ4Olx0XHRcdC5jb3JlX3R5cGUgPSBEV01BQ19DT1JFX0dNQUMsXG4gMTQ5Olx0XHRcdC5taW5faWQgPSAwLFxuIDE1MDpcdFx0XHQucmVncyA9IHtcbiAxNTE6XHRcdFx0XHQucHRwX29mZiA9IFBUUF9HTUFDM19YX09GRlNFVCxcbiAxNTI6XHRcdFx0XHQubW1jX29mZiA9IE1NQ19HTUFDM19YX09GRlNFVCxcbiAxNTM6XHRcdFx0fSxcbiAxNTQ6XHRcdFx0LmRlc2MgPSBOVUxMLFxuIDE1NTpcdFx0XHQuZG1hID0gXHUwMDI2ZHdtYWMxMDAwX2RtYV9vcHMsXG4gMTU2Olx0XHRcdC5tYWMgPSBcdTAwMjZkd21hYzEwMDBfb3BzLFxuIDE1NzpcdFx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZkd21hYzEwMDBfcHRwLFxuIDE1ODpcdFx0XHQucHRwID0gXHUwMDI2ZHdtYWMxMDAwX3B0cF9jbG9ja19vcHMsXG4gMTU5Olx0XHRcdC5tb2RlID0gTlVMTCxcbiAxNjA6XHRcdFx0LnRjID0gTlVMTCxcbiAxNjE6XHRcdFx0Lm1tYyA9IFx1MDAyNmR3bWFjX21tY19vcHMsXG4gMTYyOlx0XHRcdC5zZXR1cCA9IGR3bWFjMTAwMF9zZXR1cCxcbiAxNjM6XHRcdFx0LnF1aXJrcyA9IHN0bW1hY19kd21hYzFfcXVpcmtzLFxuIDE2NDpcdFx0fSwge1xuIDE2NTpcdFx0XHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNCxcbiAxNjY6XHRcdFx0Lm1pbl9pZCA9IDAsXG4gMTY3Olx0XHRcdC5yZWdzID0ge1xuIDE2ODpcdFx0XHRcdC5wdHBfb2ZmID0gUFRQX0dNQUM0X09GRlNFVCxcbiAxNjk6XHRcdFx0XHQubW1jX29mZiA9IE1NQ19HTUFDNF9PRkZTRVQsXG4gMTcwOlx0XHRcdFx0LmVzdF9vZmYgPSBFU1RfR01BQzRfT0ZGU0VULFxuIDE3MTpcdFx0XHR9LFxuIDE3MjpcdFx0XHQuZGVzYyA9IFx1MDAyNmR3bWFjNF9kZXNjX29wcyxcbiAxNzM6XHRcdFx0LmRtYSA9IFx1MDAyNmR3bWFjNF9kbWFfb3BzLFxuIDE3NDpcdFx0XHQubWFjID0gXHUwMDI2ZHdtYWM0X29wcyxcbiAxNzU6XHRcdFx0LnZsYW4gPSBcdTAwMjZkd21hY192bGFuX29wcyxcbiAxNzY6XHRcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2c3RtbWFjX3B0cCxcbiAxNzc6XHRcdFx0LnB0cCA9IFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc5MAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNOUFNWIERyaXZlciBDb3JlIE1hdGNoaW5nIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBsb2dpYywgYW5kIGl0IHNlZW1zIGxpa2UgaWYgYHNucHN2ZXJgIGlzIHplcm8sIHRoZW4gd2UmIzM5O3JlIGdvaW5nIHRvIG1hdGNoIGBEV01BQ19DT1JFX0dNQUM0YCB0byBhIGBtaW5faWRgIG9mIHplcm8gKG9yIGEgc2ltaWxhciBjb25zdGFudCwgYmFzZWQgb24gYGNvcmVfdHlwZWApLiBUaGF0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29uLiBCdXQsIGhvbGQgb24gYSBzZWMuLi53aGVyZSBkb2VzIGBjb3JlX3R5cGVgIGFjdHVhbGx5IGNvbWUgZnJvbT8gSSBrbm93IGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkIHRocm91Z2ggYHByaXYtJmd0O3BsYXQtJmd0O2NvcmVfdHlwZWAuIE5lZWQgdG8gdHJhY2UgdGhhdCBiYWNrLi4uCgpSaWdodC4gSXQgbG9va3MgbGlrZSBgcHJpdi0mZ3Q7cGxhdC0mZ3Q7Y29yZV90eXBlYCBpcyBpbml0aWFsaXplZCB3aXRoaW4gYHN0bW1hY19wY2lfcHJvYmVgLCB1c2luZyBgaW5mby0mZ3Q7c2V0dXAocGRldiwgcGxhdClgLiBUaGUgcGxhdGZvcm0gZGF0YSBpcyB0aGVuIHNldHVwIGZyb20gd2l0aGluIHRoZSBwcm9iZSBmdW5jdGlvbi4gU28gaXQgbG9va3MgbGlrZSB0aGUgYGluZm8tJmd0O3NldHVwYCBmdW5jdGlvbiBpcyBrZXkgdG8gdGhlIG92ZXJhbGwgZGV2aWNlIHNldHVwLCBhbmQgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBzdG1tYWNfcGNpX2luZm9gIHNldHVwIGZ1bmN0aW9ucyB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cgYGNvcmVfdHlwZWAgZ2V0cyBhc3NpZ25lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX3BjaV9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMC1cdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MzM9c3RhdGljIGludCBzdG1tYWNfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy00OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzo1MDpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBzdG1tYWNfcGNpX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNTEtXHQuc2V0dXAgPSBzdG1tYWNfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz01ND1zdGF0aWMgaW50IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTAyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHNucHNfZ21hYzVfcGNpX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTAzLVx0LnNldHVwID0gc25wc19nbWFjNV9kZWZhdWx0X2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTExOD1zdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTIxOlx0c3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICopaWQtXHUwMDNlZHJpdmVyX2RhdGE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIyLVx0c3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0yMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0bW1hY19pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNDpcdHsgUENJX0RFVklDRV9EQVRBKFNUTU1BQywgU1RNTUFDLCBcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA1Olx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNSUNSTywgTUFDLCBcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjA2LVx0eyBQQ0lfREVWSUNFX0RBVEEoU1lOT1BTWVMsIEdNQUM1X0lELCBcdTAwMjZzbnBzX2dtYWM1X3BjaV9pbmZvKSB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTA2OQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiB0aGUgc3ViamVjdCBtYXR0ZXI6CgoqKkNoZWNraW5nIGBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YWAqKgoKQWxyaWdodCwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGFuYWx5c2lzIG9yIG1vZGVsaW5nLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGZvdW5kYXRpb25hbCBkYXRhc2V0LCBgc25wc19nbWFjNV9kZWZhdWx0X2RhdGFgLCBpcyBpbiBvcmRlci4gVGhpcyBpcyB0aGUgY29ybmVyc3RvbmUuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpdHMgaW50ZWdyaXR5IGFuZCBzdWl0YWJpbGl0eS4gSSYjMzk7bSB0aGlua2luZzogaXMgaXQgdGhlIGNvcnJlY3QgdmVyc2lvbj8gQXJlIHRoZSBleHBlY3RlZCBjb2x1bW5zIHByZXNlbnQgYW5kIGNvcnJlY3RseSBsYWJlbGVkPyBBcmUgdGhlIGRhdGEgdHlwZXMgY29uc2lzdGVudCB3aXRoIHdoYXQgSSYjMzk7bSBleHBlY3RpbmcgZm9yIHRoZSB2YXJpYWJsZXMgd2l0aGluPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgZ2xhcmluZyBpc3N1ZXMsIG1pc3NpbmcgdmFsdWVzIHRoYXQgbmVlZCBpbW1lZGlhdGUgYXR0ZW50aW9uLCBvciB1bmV4cGVjdGVkIG91dGxpZXJzIHRoYXQgd291bGQgdGhyb3cgb2ZmIGFueSBkb3duc3RyZWFtIGFuYWx5c2VzPyBFc3NlbnRpYWxseSwgaXMgdGhlIGRhdGEgY2xlYW4sIGNvbXBsZXRlLCBhbmQgaW4gYSBmb3JtYXQgdGhhdCYjMzk7cyByZWFkeSBmb3IgbWUgdG8gZ2V0IHRvIHRoZSBtZWF0IG9mIHRoaW5ncz8gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9ucyBJJiMzOTt2ZSBtYWRlIGFib3V0IHRoaXMgZGF0YXNldCBhcmUgYWN0dWFsbHkgY29ycmVjdC4gR290dGEgc3RhcnQgd2l0aCBhIHNvbGlkIGZvdW5kYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NDpcdHN0YXRpYyBpbnQgc25wc19nbWFjNV9kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gIDU1Olx0XHRcdFx0XHQgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpXG4gIDU2Olx0e1xuICA1NzpcdFx0aW50IGk7XG4gIDU4Olx0XG4gIDU5Olx0XHRwbGF0LVx1MDAzZWNsa19jc3IgPSBTVE1NQUNfQ1NSXzI1MF8zMDBNO1xuICA2MDpcdFx0cGxhdC1cdTAwM2Vjb3JlX3R5cGUgPSBEV01BQ19DT1JFX0dNQUM0O1xuICA2MTpcdFx0cGxhdC1cdTAwM2Vmb3JjZV9zZl9kbWFfbW9kZSA9IHRydWU7XG4gIDYyOlx0XHRwbGF0LVx1MDAzZWZsYWdzIHw9IFNUTU1BQ19GTEFHX1RTT19FTjtcbiAgNjM6XHRcdHBsYXQtXHUwMDNlcG10ID0gdHJ1ZTtcbiAgNjQ6XHRcbiAgNjU6XHRcdC8qIFNldCBkZWZhdWx0IG51bWJlciBvZiBSWCBhbmQgVFggcXVldWVzIHRvIHVzZSAqL1xuICA2NjpcdFx0cGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlID0gNDtcbiAgNjc6XHRcdHBsYXQtXHUwMDNlcnhfcXVldWVzX3RvX3VzZSA9IDQ7XG4gIDY4Olx0XG4gIDY5Olx0XHRwbGF0LVx1MDAzZXR4X3NjaGVkX2FsZ29yaXRobSA9IE1UTF9UWF9BTEdPUklUSE1fV1JSO1xuICA3MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlOyBpJiM0MzsmIzQzOykge1xuICA3MTpcdFx0XHRwbGF0LVx1MDAzZXR4X3F1ZXVlc19jZmdbaV0ubW9kZV90b191c2UgPSBNVExfUVVFVUVfRENCO1xuICA3MjpcdFx0XHRwbGF0LVx1MDAzZXR4X3F1ZXVlc19jZmdbaV0ud2VpZ2h0ID0gMjU7XG4gIDczOlx0XHRcdGlmIChpIFx1MDAzZSAwKVxuICA3NDpcdFx0XHRcdHBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1tpXS50YnNfZW4gPSAxO1xuICA3NTpcdFx0fVxuICA3NjpcdFxuICA3NzpcdFx0cGxhdC1cdTAwM2VyeF9zY2hlZF9hbGdvcml0aG0gPSBNVExfUlhfQUxHT1JJVEhNX1NQO1xuICA3ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGxhdC1cdTAwM2VyeF9xdWV1ZXNfdG9fdXNlOyBpJiM0MzsmIzQzOylcbiAgNzk6XHRcdFx0cGxhdC1cdTAwM2VyeF9xdWV1ZXNfY2ZnW2ldLm1vZGVfdG9fdXNlID0gTVRMX1FVRVVFX0RDQjtcbiAgODA6XHRcbiAgODE6XHRcdHBsYXQtXHUwMDNlYnVzX2lkID0gMTtcbiAgODI6XHRcdHBsYXQtXHUwMDNlcGh5X2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJO1xuICA4MzpcdFxuICA4NDpcdFx0cGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZXBibCA9IDMyO1xuICA4NTpcdFx0cGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZXBibHg4ID0gdHJ1ZTtcbiAgODY6XHRcbiAgODc6XHRcdC8qIEF4aSBDb25maWd1cmF0aW9uICovXG4gIDg4Olx0XHRwbGF0LVx1MDAzZWF4aSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwbGF0LVx1MDAzZWF4aSksIEdGUF9LRVJORUwpO1xuICA4OTpcdFx0aWYgKCFwbGF0LVx1MDAzZWF4aSlcbiAgOTA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDkxOlx0XG4gIDkyOlx0XHRwbGF0LVx1MDAzZWF4aS1cdTAwM2VheGlfd3Jfb3NyX2xtdCA9IDMxO1xuICA5MzpcdFx0cGxhdC1cdTAwM2VheGktXHUwMDNlYXhpX3JkX29zcl9sbXQgPSAzMTtcbiAgOTQ6XHRcbiAgOTU6XHRcdHBsYXQtXHUwMDNlYXhpLVx1MDAzZWF4aV9mYiA9IGZhbHNlO1xuICA5NjpcdFx0cGxhdC1cdTAwM2VheGktXHUwMDNlYXhpX2JsZW5fcmVndmFsID0gRE1BX0FYSV9CTEVONCB8IERNQV9BWElfQkxFTjggfFxuICA5NzpcdFx0XHRcdFx0ICAgICBETUFfQVhJX0JMRU4xNiB8IERNQV9BWElfQkxFTjMyO1xuICA5ODpcdFxuICA5OTpcdFx0cmV0dXJuIDA7XG4gMTAwOlx0fVxuIDEwMTpcdFxuIDEwMjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHNucHNfZ21hYzVfcGNpX2luZm8gPSB7XG4gMTAzOlx0XHQuc2V0dXAgPSBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyMjAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEV01BQyBDb3JlIGFuZCBUQyBPcGVyYXRpb25zKioKCk9rYXksIHNvIGlmIHRoZSBgY29yZV90eXBlYCBpcyBjb25maXJtZWQgYXMgYERXTUFDX0NPUkVfR01BQzRgIGFuZCB0aGUgYHNucHN2ZXJgIGlzIHplcm8sIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGhpdHRpbmcgdGhhdCBgRFdNQUNfQ09SRV9HTUFDNGAgZW50cnkgd2l0aCB0aGUgYG1pbl9pZCA9IDBgLiBSaWdodCwgc28sIHRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgcGFydGljdWxhciBlbnRyeSBpcyBsaW5rZWQgdG8gYC50YyA9ICZhbXA7ZHdtYWM0X3RjX29wc2AuIEhtbW0sIGhvbGQgb24gYSBzZWNvbmQuLi50aGlzIHBhdGNoIGlzIGFjdHVhbGx5ICptb2RpZnlpbmcqIGJvdGggYGR3bWFjNF90Y19vcHNgIGFuZCBgZHdtYWM1MTBfdGNfb3BzYCEgV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIExldCBtZSBnbyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgYGR3bWFjNF90Y19vcHNgIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHdtYWM0X3RjX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xNzgtXHRcdC5tb2RlID0gTlVMTCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoxNzk6XHRcdC50YyA9IFx1MDAyNmR3bWFjNF90Y19vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMTgwLVx0XHQubW1jID0gXHUwMDI2ZHdtYWNfbW1jX29wcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9Njk0PWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX29wcyBkd21hYzUxMF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg6Njk1OmV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTY5Ni1leHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTEzOTI9c3RhdGljIGludCB0Y19zZXR1cF9tcXByaW9fdW5pbXBsZW1lbnRlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTM5OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjE0MDA6Y29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM0X3RjX29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTE0MDEtXHQuaW5pdCA9IHRjX2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDAxCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlRyYWZmaWMgQ29udHJvbCBJbml0aWFsaXphdGlvbiAtIERpZ2dpbmcgaW50byB0aGUgRFdNQUMgRHJpdmVyKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRyYWZmaWMgY29udHJvbCBhbmQgaXQgbG9va3MgbGlrZSBgZHdtYWM0X3RjX29wc2AgaXMgdGhlIGtleSBpbnRlcmZhY2UgaGVyZS4gVGhhdCYjMzk7cyBnb29kLCBpdCBzdWdnZXN0cyB3ZSYjMzk7cmUgdXNpbmcgYSBzcGVjaWZpYyBzZXQgb2YgdHJhZmZpYyBjb250cm9sIG9wZXJhdGlvbnMuIFRoYXQgaW4gdHVybiBpbXBsaWVzIHRoYXQgYG5kb19zZXR1cF90Y2AgaXMgaW52b2x2ZWQuIE9rYXksIHRoZSBuYXR1cmFsIGZvbGxvdy1vbiBpcyB0aGF0IGBzdG1tYWNfc2V0dXBfdGNgIHdpbGwgYmUgY2FsbGVkLCB3aGljaCB1bHRpbWF0ZWx5IHNob3VsZCBsZWFkIHRvIGBzdG1tYWNfdGNfc2V0dXBfZXRzYC4gVGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgY2hhaW4gb2YgZXZlbnRzLgoKQnV0LCBoYW5nIG9uIGEgc2Vjb25kLiBUaGlzIGlzIGltcG9ydGFudCB0byBjb25zaWRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIGhhbmRsZXMgZWRnZSBjYXNlcyBwcm9wZXJseS4gV2hhdCBhYm91dCB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIFBDSSBkZXZpY2UgaXMgYSBkdW1teSBvciBzdHViPyBEb2VzIHRoZSBkcml2ZXIgcHJvYmUgY29udGludWUsIG9yIGRvZXMgaXQgZmFpbCBncmFjZWZ1bGx5PyBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIGBzdG1tYWNfaHdfaW5pdGAgYWdhaW4sIGp1c3QgdG8gdmVyaWZ5IHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGFjY291bnRzIGZvciB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBkcml2ZXIgaXMgcm9idXN0IGluIHRob3NlIHNwZWNpZmljIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc0MjE6XHRcdC8qIEdldCB0aGUgSFcgY2FwYWJpbGl0eSAobmV3IEdNQUMgbmV3ZXIgdGhhbiAzLjUwYSkgKi9cbjc0MjI6XHRcdHByaXYtXHUwMDNlaHdfY2FwX3N1cHBvcnQgPSBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzKHByaXYpO1xuNzQyMzpcdFx0aWYgKHByaXYtXHUwMDNlaHdfY2FwX3N1cHBvcnQpIHtcbjc0MjQ6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0RNQSBIVyBjYXBhYmlsaXR5IHJlZ2lzdGVyIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDI1Olx0XG43NDI2Olx0XHRcdC8qIFdlIGNhbiBvdmVycmlkZSBzb21lIGdtYWMvZG1hIGNvbmZpZ3VyYXRpb24gZmllbGRzOiBlLmcuXG43NDI3Olx0XHRcdCAqIGVuaF9kZXNjLCB0eF9jb2UgKGUuZy4gdGhhdCBhcmUgcGFzc2VkIHRocm91Z2ggdGhlXG43NDI4Olx0XHRcdCAqIHBsYXRmb3JtKSB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgSFcgY2FwYWJpbGl0eVxuNzQyOTpcdFx0XHQgKiByZWdpc3RlciAoaWYgc3VwcG9ydGVkKS5cbjc0MzA6XHRcdFx0ICovXG43NDMxOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VlbmhfZGVzYyA9IHByaXYtXHUwMDNlZG1hX2NhcC5lbmhfZGVzYztcbjc0MzI6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBtdCA9IHByaXYtXHUwMDNlZG1hX2NhcC5wbXRfcmVtb3RlX3dha2VfdXAgXHUwMDI2XHUwMDI2XG43NDMzOlx0XHRcdFx0XHQhKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfVVNFX1BIWV9XT0wpO1xuNzQzNDpcdFx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLmhhc2hfdGJfc3opIHtcbjc0MzU6XHRcdFx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZW11bHRpY2FzdF9maWx0ZXJfYmlucyA9XG43NDM2Olx0XHRcdFx0XHRcdChCSVQocHJpdi1cdTAwM2VkbWFfY2FwLmhhc2hfdGJfc3opIFx1MDAzY1x1MDAzYyA1KTtcbjc0Mzc6XHRcdFx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZW1jYXN0X2JpdHNfbG9nMiA9XG43NDM4Olx0XHRcdFx0XHRcdGlsb2cyKHByaXYtXHUwMDNlaHctXHUwMDNlbXVsdGljYXN0X2ZpbHRlcl9iaW5zKTtcbjc0Mzk6XHRcdFx0fVxuNzQ0MDpcdFxuNzQ0MTpcdFx0XHQvKiBUWENPRSBkb2VzbiYjMzk7dCB3b3JrIGluIHRocmVzaCBETUEgbW9kZSAqL1xuNzQ0MjpcdFx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZvcmNlX3RocmVzaF9kbWFfbW9kZSlcbjc0NDM6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfY29lID0gZmFsc2U7XG43NDQ0Olx0XHRcdGVsc2Vcbjc0NDU6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfY29lID0gcHJpdi1cdTAwM2VkbWFfY2FwLnR4X2NvZTtcbjc0NDY6XHRcbjc0NDc6XHRcdFx0LyogSW4gY2FzZSBvZiBHTUFDNCByeF9jb2UgaXMgZnJvbSBIVyBjYXAgcmVnaXN0ZXIuICovXG43NDQ4Olx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9jb2UgPSBwcml2LVx1MDAzZWRtYV9jYXAucnhfY29lO1xuNzQ0OTpcdFxuNzQ1MDpcdFx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2NvZV90eXBlMilcbjc0NTE6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lID0gU1RNTUFDX1JYX0NPRV9UWVBFMjtcbjc0NTI6XHRcdFx0ZWxzZSBpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2NvZV90eXBlMSlcbjc0NTM6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lID0gU1RNTUFDX1JYX0NPRV9UWVBFMTtcbjc0NTQ6XHRcbjc0NTU6XHRcdFx0c3RtbWFjX3ByaW50X2FjdHBoeWlmKHByaXYpO1xuNzQ1NjpcdFx0fSBlbHNlIHtcbjc0NTc6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O05vIEhXIERNQSBmZWF0dXJlIHJlZ2lzdGVyIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDU4Olx0XHR9XG43NDU5Olx0XG43NDYwOlx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2NvZSkge1xuNzQ2MTpcdFx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZXJ4X2NzdW0gPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lO1xuNzQ2MjpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7UlggQ2hlY2tzdW0gT2ZmbG9hZCBFbmdpbmUgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjc0NjM6XHRcdFx0aWYgKHByaXYtXHUwMDNlc3lub3BzeXNfaWQgXHUwMDNjIERXTUFDX0NPUkVfNF8wMClcbjc0NjQ6XHRcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7Q09FIFR5cGUgJWRcXG5cJiMzNDssIHByaXYtXHUwMDNlaHctXHUwMDNlcnhfY3N1bSk7XG43NDY1Olx0XHR9XG43NDY2Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2NvZSlcbjc0Njc6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1RYIENoZWNrc3VtIGluc2VydGlvbiBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuNzQ2ODpcdFxuNzQ2OTpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwbXQpIHtcbjc0NzA6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1dha2UtVXAgT24gTGFuIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzM2CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBETUEgRmVhdHVyZSBDaGVjayoqCgpPa2F5LCBzbyB0aGUgYHN0bW1hY19nZXRfaHdfZmVhdHVyZXNgIGZ1bmN0aW9uIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjcml0aWNhbCBwYXJ0IGhlcmUgaXMgd2hhdCBoYXBwZW5zIHdoZW4gaXQgcmV0dXJucyB6ZXJvLiBJdCYjMzk7cyBqdXN0IGEgc2ltcGxlICYjMzQ7Tm8gSFcgRE1BIGZlYXR1cmUgcmVnaXN0ZXIgc3VwcG9ydGVkJiMzNDsgbWVzc2FnZS4gTm90IGV4YWN0bHkgaW5mb3JtYXRpdmUsIGlzIGl0PwoKSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFRoYXQgcHJpbnQgc3RhdGVtZW50IGlzIGxpa2VseSBqdXN0IHRoZSAqZmlyc3QqIHNpZ24gb2YgdHJvdWJsZS4gV2hhdCBvdGhlciBjaGVja3Mgb3IgZG93bnN0cmVhbSBwcm9jZXNzZXMgbWlnaHQgYmUgaW1wYWN0ZWQgYnkgYSB6ZXJvIHJldHVybiB2YWx1ZSBmcm9tIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYD8gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcywgbG9vayBmb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdGhpcyBmdW5jdGlvbiYjMzk7cyBvdXRwdXQsIGFuZCBzZWUgd2hlcmUgYSBmYWlsZWQgaGFyZHdhcmUgZmVhdHVyZSBkZXRlY3Rpb24gd291bGQgdHJ1bHkgbWFuaWZlc3QuIFRoaXMgaW5pdGlhbCBtZXNzYWdlIGlzIGp1c3QgdGhlIHRpcCBvZiB0aGUgaWNlYmVyZywgSSYjMzk7bSBzdXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHRoZSByZWFsIHJhbWlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5MDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzkwNDpcdFx0LyogT25seSBEV01BQyBjb3JlIHZlcnNpb24gNS4yMCBvbndhcmRzIHN1cHBvcnRzIEhXIGRlc2NyaXB0b3IgcHJlZmV0Y2guXG43OTA1Olx0XHQgKi9cbjc5MDY6XHRcdGlmIChwcml2LVx1MDAzZXN5bm9wc3lzX2lkIFx1MDAzYyBEV01BQ19DT1JFXzVfMjApXG43OTA3Olx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZWRjaGUgPSBmYWxzZTtcbjc5MDg6XHRcbjc5MDk6XHRcdHN0bW1hY19jaGVja19ldGhlcl9hZGRyKHByaXYpO1xuNzkxMDpcdFxuNzkxMTpcdFx0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2c3RtbWFjX25ldGRldl9vcHM7XG43OTEyOlx0XG43OTEzOlx0XHRuZGV2LVx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZzdG1tYWNfeGRwX21ldGFkYXRhX29wcztcbjc5MTQ6XHRcdG5kZXYtXHUwMDNleHNrX3R4X21ldGFkYXRhX29wcyA9IFx1MDAyNnN0bW1hY194c2tfdHhfbWV0YWRhdGFfb3BzO1xuNzkxNTpcdFxuNzkxNjpcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8XG43OTE3Olx0XHRcdFx0ICAgIE5FVElGX0ZfUlhDU1VNO1xuNzkxODpcdFx0bmRldi1cdTAwM2V4ZHBfZmVhdHVyZXMgPSBORVRERVZfWERQX0FDVF9CQVNJQyB8IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcbjc5MTk6XHRcdFx0XHQgICAgIE5FVERFVl9YRFBfQUNUX1hTS19aRVJPQ09QWTtcbjc5MjA6XHRcbjc5MjE6XHRcdHJldCA9IHN0bW1hY190Y19pbml0KHByaXYsIHByaXYpO1xuNzkyMjpcdFx0aWYgKCFyZXQpIHtcbjc5MjM6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuNzkyNDpcdFx0fVxuNzkyNTpcdFxuNzkyNjpcdFx0c3RtbWFjX3NldF9nc29fZmVhdHVyZXMobmRldik7XG43OTI3Olx0XG43OTI4Olx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnNwaGVuIFx1MDAyNlx1MDAyNlxuNzkyOTpcdFx0ICAgICEocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19TUEhfRElTQUJMRSkpIHtcbjc5MzA6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dSTztcbjc5MzE6XHRcdFx0cHJpdi1cdTAwM2VzcGhfY2FwYWJsZSA9IHRydWU7XG43OTMyOlx0XHRcdHByaXYtXHUwMDNlc3BoX2FjdGl2ZSA9IHByaXYtXHUwMDNlc3BoX2NhcGFibGU7XG43OTMzOlx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtTUEggZmVhdHVyZSBlbmFibGVkXFxuXCYjMzQ7KTtcbjc5MzQ6XHRcdH1cbjc5MzU6XHRcbjc5MzY6XHRcdC8qIElkZWFsbHkgb3VyIGhvc3QgRE1BIGFkZHJlc3Mgd2lkdGggaXMgdGhlIHNhbWUgYXMgZm9yIHRoZVxuNzkzNzpcdFx0ICogZGV2aWNlLiBIb3dldmVyLCBpdCBtYXkgZGlmZmVyIGFuZCB0aGVuIHdlIGhhdmUgdG8gdXNlIG91clxuNzkzODpcdFx0ICogaG9zdCBETUEgd2lkdGggZm9yIGFsbG9jYXRpb24gYW5kIHRoZSBkZXZpY2UgRE1BIHdpZHRoIGZvclxuNzkzOTpcdFx0ICogcmVnaXN0ZXIgaGFuZGxpbmcuXG43OTQwOlx0XHQgKi9cbjc5NDE6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlaG9zdF9kbWFfd2lkdGgpXG43OTQyOlx0XHRcdHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vob3N0X2RtYV93aWR0aDtcbjc5NDM6XHRcdGVsc2Vcbjc5NDQ6XHRcdFx0cHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cdTAwM2VkbWFfY2FwLmFkZHI2NDtcbjc5NDU6XHRcbjc5NDY6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgpIHtcbjc5NDc6XHRcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXZpY2UsXG43OTQ4Olx0XHRcdFx0XHRETUFfQklUX01BU0socHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSk7XG43OTQ5Olx0XHRcdGlmICghcmV0KSB7XG43OTUwOlx0XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1VzaW5nICVkLyVkIGJpdHMgRE1BIGhvc3QvZGV2aWNlIHdpZHRoXFxuXCYjMzQ7LFxuNzk1MTpcdFx0XHRcdFx0IHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCwgcHJpdi1cdTAwM2VkbWFfY2FwLmFkZHI2NCk7XG43OTUyOlx0XG43OTUzOlx0XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MzIKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuCgoqKkRlY29uc3RydWN0aW5nIHRoZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqCgpSaWdodCwgc28gdGhlIHRyYWNlIHNob3dzIHRoZSBleGVjdXRpb24gcGF0aCBoaXR0aW5nIGBzdG1tYWNfdGNfaW5pdGAuIFRoYXQmIzM5O3MgdGhlIGtleSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIHRyYWZmaWMgY29udHJvbCBmZWF0dXJlcyBvZiB0aGUgU1RNTUFDIGRyaXZlciwgb2J2aW91c2x5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIE5vdywgdGhlIGV4ZWN1dGlvbiAqY29udGludWVzKiBhZnRlciB0aGF0IGNhbGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIGJlaW5nIGRvbmUgKmFmdGVyKiB0aGF0PyBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGlzIHRoYXQgdHJhZmZpYyBjb250cm9sIHJlZ2lzdHJhdGlvbiBhIHByZS1yZXF1aXNpdGU/CgpNeSBuZXh0IGh5cG90aGVzaXMgdG8gaW52ZXN0aWdhdGUgaXMgdGhlIGNhbGwgdG8gYHJlZ2lzdGVyX25ldGRldmAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhhdCBmdW5jdGlvbiBub3cuIElzIGl0IGNhbGxlZD8gQW5kIGlmIHNvLCAqd2hlbio/IElzIGl0IGJlZm9yZSwgYWZ0ZXIsIG9yIGludGVybGVhdmVkIHdpdGggdGhlIHRyYWZmaWMgY29udHJvbCBpbml0aWFsaXphdGlvbj8gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBjYWxscyAtIGBzdG1tYWNfdGNfaW5pdGAgYW5kIGByZWdpc3Rlcl9uZXRkZXZgIC0gaXMgcHJvYmFibHkgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRldmljZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgdGhlIGRyaXZlciYjMzk7cyBkZXBlbmRlbmNpZXMsIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzgwMzA6XHRcdHN0bW1hY19jaGVja19wY3NfbW9kZShwcml2KTtcbjgwMzE6XHRcbjgwMzI6XHRcdHBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGRldmljZSk7XG44MDMzOlx0XHRwbV9ydW50aW1lX3NldF9hY3RpdmUoZGV2aWNlKTtcbjgwMzQ6XHRcdGlmICghcG1fcnVudGltZV9lbmFibGVkKGRldmljZSkpXG44MDM1Olx0XHRcdHBtX3J1bnRpbWVfZW5hYmxlKGRldmljZSk7XG44MDM2Olx0XG44MDM3Olx0XHRyZXQgPSBzdG1tYWNfbWRpb19yZWdpc3RlcihuZGV2KTtcbjgwMzg6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjgwMzk6XHRcdFx0ZGV2X2Vycl9wcm9iZShwcml2LVx1MDAzZWRldmljZSwgcmV0LFxuODA0MDpcdFx0XHRcdCAgICAgIFwmIzM0O01ESU8gYnVzIChpZDogJWQpIHJlZ2lzdHJhdGlvbiBmYWlsZWRcXG5cJiMzNDssXG44MDQxOlx0XHRcdFx0ICAgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWJ1c19pZCk7XG44MDQyOlx0XHRcdGdvdG8gZXJyb3JfbWRpb19yZWdpc3RlcjtcbjgwNDM6XHRcdH1cbjgwNDQ6XHRcbjgwNDU6XHRcdHJldCA9IHN0bW1hY19wY3Nfc2V0dXAobmRldik7XG44MDQ2Olx0XHRpZiAocmV0KVxuODA0NzpcdFx0XHRnb3RvIGVycm9yX3Bjc19zZXR1cDtcbjgwNDg6XHRcbjgwNDk6XHRcdHJldCA9IHN0bW1hY19waHlsaW5rX3NldHVwKHByaXYpO1xuODA1MDpcdFx0aWYgKHJldCkge1xuODA1MTpcdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O2ZhaWxlZCB0byBzZXR1cCBwaHkgKCVkKVxcblwmIzM0OywgcmV0KTtcbjgwNTI6XHRcdFx0Z290byBlcnJvcl9waHlfc2V0dXA7XG44MDUzOlx0XHR9XG44MDU0Olx0XG44MDU1Olx0XHRyZXQgPSBzdG1tYWNfcmVnaXN0ZXJfZGV2bGluayhwcml2KTtcbjgwNTY6XHRcdGlmIChyZXQpXG44MDU3Olx0XHRcdGdvdG8gZXJyb3JfZGV2bGlua19zZXR1cDtcbjgwNTg6XHRcbjgwNTk6XHRcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcbjgwNjA6XHRcdGlmIChyZXQpIHtcbjgwNjE6XHRcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7JXM6IEVSUk9SICVpIHJlZ2lzdGVyaW5nIHRoZSBkZXZpY2VcXG5cJiMzNDssXG44MDYyOlx0XHRcdFx0X19mdW5jX18sIHJldCk7XG44MDYzOlx0XHRcdGdvdG8gZXJyb3JfbmV0ZGV2X3JlZ2lzdGVyO1xuODA2NDpcdFx0fVxuODA2NTpcdFxuODA2NjpcdCNpZmRlZiBDT05GSUdfREVCVUdfRlNcbjgwNjc6XHRcdHN0bW1hY19pbml0X2ZzKG5kZXYpO1xuODA2ODpcdCNlbmRpZlxuODA2OTpcdFxuODA3MDpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkdW1wX2RlYnVnX3JlZ3MpXG44MDcxOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkdW1wX2RlYnVnX3JlZ3MocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWJzcF9wcml2KTtcbjgwNzI6XHRcbjgwNzM6XHRcdC8qIExldCBwbV9ydW50aW1lX3B1dCgpIGRpc2FibGUgdGhlIGNsb2Nrcy5cbjgwNzQ6XHRcdCAqIElmIENPTkZJR19QTSBpcyBub3QgZW5hYmxlZCwgdGhlIGNsb2NrcyB3aWxsIHN0YXkgcG93ZXJlZC5cbjgwNzU6XHRcdCAqL1xuODA3NjpcdFx0cG1fcnVudGltZV9wdXQoZGV2aWNlKTtcbjgwNzc6XHRcbjgwNzg6XHRcdHJldHVybiByZXQ7XG44MDc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTQ2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcy9uZXR3b3JraW5nLCBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBmdW5jdGlvbiBjYWxsOgoKKipBbmFseXppbmcgdGhlIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgQ2FsbCoqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBjYWxsaW5nIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/JiMzNDsgSXMgdGhpcyBoYXBwZW5pbmcgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiwgb3IgbGF0ZXI/IFRoZW4gSSBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBxdWVzdGlvbiBvZiAqZXJyb3IgaGFuZGxpbmcqLiBEb2VzIHRoZSBjb2RlIGhhdmUgYSBjaGVjayBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgPyBDcnVjaWFsbHksIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgcm9idXN0bHkgZW5vdWdoLiBEb2VzIGl0IGdyYWNlZnVsbHkgaGFuZGxlIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgaGFyZHdhcmUsIHNwZWNpZmljYWxseSB0aGUgTURJTyBidXMgaXRzZWxmLCBpc24mIzM5O3QgcGh5c2ljYWxseSBwcmVzZW50PyBEb2VzIGl0IHJldHVybiBhIG1lYW5pbmdmdWwgZXJyb3IgY29kZSwgb3IgZG9lcyBpdCBzaW1wbHkgcmV0dXJuIGFuIGVycm9yIHRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uPyBXaGF0IHNvcnQgb2YgZGVidWcgb3V0cHV0IHdvdWxkIGJlIGdlbmVyYXRlZCBpZiB0aGlzIGZ1bmN0aW9uIGNhbGwgZmFpbGVkPyBBcmUgdGhlcmUgb3RoZXIgZXJyb3IgcGF0aHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IHdvdWxkIGFmZmVjdCB0aGlzIGNhbGw/IEtub3dpbmcgd2hldGhlciB0aGlzIGNhbGwgaXMgYSAmIzM0O2NyaXRpY2FsIHBhdGgmIzM0OyBmdW5jdGlvbiBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSBjb25zZXF1ZW5jZXMgb2YgaXRzIGZhaWx1cmUuIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGluIG9yZGVyIHRvIHBlcmZvcm0gcm9idXN0IHZhbGlkYXRpb24gYW5kL29yIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX21kaW9fcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDA1PWludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQwNjppbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDA3LWludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqbWlpKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc3OTY9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODAzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODAzNzpcdHJldCA9IHN0bW1hY19tZGlvX3JlZ2lzdGVyKG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDM4LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM9NTY3PXN0YXRpYyB2b2lkIHN0bW1hY19tZGlvX2J1c19jb25maWcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTkwLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo1OTE6ICogc3RtbWFjX21kaW9fcmVnaXN0ZXJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTkyLSAqIEBuZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTk0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo1OTU6aW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy01OTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQzNgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggYHN0bW1hY19tZGlvX3JlZ2lzdGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gV2hhdCYjMzk7cyBpdHMgcm9sZSBpbiB0aGUgU1RNTUFDIGRyaXZlciYjMzk7cyBNRElPIGludGVyZmFjZT8gSXMgaXQgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRoZSBNRElPIGJ1cyB3aXRoIHRoZSBrZXJuZWw/IE9yIG1heWJlIGl0JiMzOTtzIGhhbmRsaW5nIGEgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gc3RlcCBvciBkZXZpY2UgYXR0YWNobWVudD8gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgaXRzIGNvbnRleHQuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGNhbGwgaXQ/IFdoYXQgZnVuY3Rpb25zIGRvZXMgKml0KiBjYWxsPyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiBpcy4gSXMgdGhlcmUgYW55dGhpbmcgdW51c3VhbCBhYm91dCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgc3BlY2lmaWMgdG8gdGhpcyBkcml2ZXIvaGFyZHdhcmUgY29tYmluYXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgbWluZGZ1bCBvZj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGNvZGUgZm9yIGl0cyB1c2FnZSwgYW5kIHRoZW4gdHJhY2luZyB0aGUgY2FsbHMgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIGltcGFjdC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIE1ESU8gcmVnaXN0cmF0aW9uIGlzIGNvcnJlY3QgYW5kIGlmIGl0IGlzLCB0aGUgZHJpdmVyJiMzOTtzIGZ1bmN0aW9uIHdpbGwgYmUgcmVnaXN0ZXJlZCBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTU6XHRpbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gNTk2Olx0e1xuIDU5NzpcdFx0aW50IGVyciA9IDA7XG4gNTk4Olx0XHRzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cztcbiA1OTk6XHRcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIDYwMDpcdFx0c3RydWN0IHN0bW1hY19tZGlvX2J1c19kYXRhICptZGlvX2J1c19kYXRhID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGE7XG4gNjAxOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbm9kZSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtZGlvX25vZGU7XG4gNjAyOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBuZGV2LVx1MDAzZWRldi5wYXJlbnQ7XG4gNjAzOlx0XHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZml4ZWRfbm9kZTtcbiA2MDQ6XHRcdGludCBtYXhfYWRkciA9IFBIWV9NQVhfQUREUiAtIDE7XG4gNjA1Olx0XHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlO1xuIDYwNjpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbiA2MDc6XHRcbiA2MDg6XHRcdGlmICghbWRpb19idXNfZGF0YSlcbiA2MDk6XHRcdFx0cmV0dXJuIDA7XG4gNjEwOlx0XG4gNjExOlx0XHRzdG1tYWNfbWRpb19idXNfY29uZmlnKHByaXYpO1xuIDYxMjpcdFxuIDYxMzpcdFx0bmV3X2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcbiA2MTQ6XHRcdGlmICghbmV3X2J1cylcbiA2MTU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNjE2Olx0XG4gNjE3Olx0XHRpZiAobWRpb19idXNfZGF0YS1cdTAwM2VpcnFzKVxuIDYxODpcdFx0XHRtZW1jcHkobmV3X2J1cy1cdTAwM2VpcnEsIG1kaW9fYnVzX2RhdGEtXHUwMDNlaXJxcywgc2l6ZW9mKG5ld19idXMtXHUwMDNlaXJxKSk7XG4gNjE5Olx0XG4gNjIwOlx0XHRuZXdfYnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtzdG1tYWNcJiMzNDs7XG4gNjIxOlx0XG4gNjIyOlx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKSB7XG4gNjIzOlx0XHRcdG5ld19idXMtXHUwMDNlcmVhZCA9IFx1MDAyNnN0bW1hY194Z21hYzJfbWRpb19yZWFkX2MyMjtcbiA2MjQ6XHRcdFx0bmV3X2J1cy1cdTAwM2V3cml0ZSA9IFx1MDAyNnN0bW1hY194Z21hYzJfbWRpb193cml0ZV9jMjI7XG4gNjI1Olx0XHRcdG5ld19idXMtXHUwMDNlcmVhZF9jNDUgPSBcdTAwMjZzdG1tYWNfeGdtYWMyX21kaW9fcmVhZF9jNDU7XG4gNjI2Olx0XHRcdG5ld19idXMtXHUwMDNld3JpdGVfYzQ1ID0gXHUwMDI2c3RtbWFjX3hnbWFjMl9tZGlvX3dyaXRlX2M0NTtcbiA2Mjc6XHRcbiA2Mjg6XHRcdFx0aWYgKHByaXYtXHUwMDNlc3lub3BzeXNfaWQgXHUwMDNjIERXWEdNQUNfQ09SRV8yXzIwKSB7XG4gNjI5Olx0XHRcdFx0LyogUmlnaHQgbm93IG9ubHkgQzIyIHBoeXMgYXJlIHN1cHBvcnRlZCAqL1xuIDYzMDpcdFx0XHRcdG1heF9hZGRyID0gTUlJX1hHTUFDX01BWF9DMjJBRERSO1xuIDYzMTpcdFxuIDYzMjpcdFx0XHRcdC8qIENoZWNrIGlmIERUIHNwZWNpZmllZCBhbiB1bnN1cHBvcnRlZCBwaHkgYWRkciAqL1xuIDYzMzpcdFx0XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGh5X2FkZHIgXHUwMDNlIE1JSV9YR01BQ19NQVhfQzIyQUREUilcbiA2MzQ6XHRcdFx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBwaHlfYWRkciAobWF4PSVkKVxcblwmIzM0OyxcbiA2MzU6XHRcdFx0XHRcdFx0TUlJX1hHTUFDX01BWF9DMjJBRERSKTtcbiA2MzY6XHRcdFx0fVxuIDYzNzpcdFx0fSBlbHNlIHtcbiA2Mzg6XHRcdFx0bmV3X2J1cy1cdTAwM2VyZWFkID0gXHUwMDI2c3RtbWFjX21kaW9fcmVhZF9jMjI7XG4gNjM5Olx0XHRcdG5ld19idXMtXHUwMDNld3JpdGUgPSBcdTAwMjZzdG1tYWNfbWRpb193cml0ZV9jMjI7XG4gNjQwOlx0XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQpIHtcbiA2NDE6XHRcdFx0XHRuZXdfYnVzLVx1MDAzZXJlYWRfYzQ1ID0gXHUwMDI2c3RtbWFjX21kaW9fcmVhZF9jNDU7XG4gNjQyOlx0XHRcdFx0bmV3X2J1cy1cdTAwM2V3cml0ZV9jNDUgPSBcdTAwMjZzdG1tYWNfbWRpb193cml0ZV9jNDU7XG4gNjQzOlx0XHRcdH1cbiA2NDQ6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3MjcKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTURJTyBCdXMgUmVnaXN0cmF0aW9uIGluIFNUTU1BQyBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBTVE1NQUMgZHJpdmVyIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiBsb2dpYy4gSWYgYG1kaW9fYnVzX2RhdGFgIGlzIHByZXNlbnQsIHRoZW4gdGhlIGRyaXZlciBpcyBnb2luZyB0byByZWdpc3RlciB0aGUgTURJTyBidXMuIEhhbmcgb24sIHRoZSBjb2RlIHNuaXBwZXQgZnJvbSBgc3RtbWFjX3BjaV9wcm9iZWAgY29uZmlybXMgdGhhdCBgbWRpb19idXNfZGF0YWAgaXMgaW5kZWVkIGFsbG9jYXRlZCB1c2luZyBgZGV2bV9remFsbG9jYC4gIFNvLCB5ZXMsIGl0JiMzOTtzIHByZXNlbnQuIFRoZSBjb2RlIGlzIHRoZW4gZ29pbmcgdG8gY2FsbCBlaXRoZXIgYG9mX21kaW9idXNfcmVnaXN0ZXJgIG9yIGBtZGlvYnVzX3JlZ2lzdGVyYCDigJMgdGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgcHJvY2VkdXJlLgoKTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uIGFyaXNlczogd2hhdCBoYXBwZW5zIGlmIHRoZXJlJiMzOTtzIG5vIHBoeXNpY2FsIFBIWSBwcmVzZW50IG9uIHRoZSBidXM/IEkmIzM5O20gdXNlZCB0byBob3cgYG1kaW9idXNfcmVnaXN0ZXJgIHdvcmtzLCBpdCB0eXBpY2FsbHkgc2NhbnMgdGhlIE1ESU8gYnVzLiBJZiBpdCByZWFkcyB0aGUgYDB4ZmZmZmAgdmFsdWUsIHJlcHJlc2VudGluZyBubyBkZXZpY2UsIGl0IGRvZXNuJiMzOTt0IG5lY2Vzc2FyaWx5IGZhaWwgb3V0cmlnaHQuIEl0IHVzdWFsbHkganVzdCBhc3N1bWVzIHRoYXQgbm8gUEhZIGlzIHByZXNlbnQgYXQgdGhlIHBhcnRpY3VsYXIgYWRkcmVzcy4KCkhvd2V2ZXIsIGEgbmV3IGNvbmNlcm46IGBzdG1tYWNfcGNzX3NldHVwYCBhbmQgYHN0bW1hY19waHlsaW5rX3NldHVwYCBhcmUgY2FsbGVkICphZnRlciogYHN0bW1hY19tZGlvX3JlZ2lzdGVyYC4gVGhpcyBzdWdnZXN0cyB0aGV5IGRlcGVuZCBvbiB0aGUgTURJTyBidXMgcmVnaXN0cmF0aW9uLiAgU28gdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBgbWRpb2J1c19yZWdpc3RlcmAgbWF5IG9yIG1heSBub3QgaW1wYWN0IHRoZSBQQ1MgYW5kIFBoeWxpbmsgc2V0dXAuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgdG8gYmUgY2VydGFpbiBvZiB0aGUgaW1wbGljYXRpb25zIG9mIG5vIFBIWSBiZWluZyBkZXRlY3RlZC4gVGhlIGJlaGF2aW9yIGhlcmUgc2VlbXMgc2FmZSwgYnV0IEkgd2lsbCBkb3VibGUtY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ODA0NTpcdFx0cmV0ID0gc3RtbWFjX3Bjc19zZXR1cChuZGV2KTtcbjgwNDY6XHRcdGlmIChyZXQpXG44MDQ3Olx0XHRcdGdvdG8gZXJyb3JfcGNzX3NldHVwO1xuODA0ODpcdFxuODA0OTpcdFx0cmV0ID0gc3RtbWFjX3BoeWxpbmtfc2V0dXAocHJpdik7XG44MDUwOlx0XHRpZiAocmV0KSB7XG44MDUxOlx0XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7ZmFpbGVkIHRvIHNldHVwIHBoeSAoJWQpXFxuXCYjMzQ7LCByZXQpO1xuODA1MjpcdFx0XHRnb3RvIGVycm9yX3BoeV9zZXR1cDtcbjgwNTM6XHRcdH1cbjgwNTQ6XHRcbjgwNTU6XHRcdHJldCA9IHN0bW1hY19yZWdpc3Rlcl9kZXZsaW5rKHByaXYpO1xuODA1NjpcdFx0aWYgKHJldClcbjgwNTc6XHRcdFx0Z290byBlcnJvcl9kZXZsaW5rX3NldHVwO1xuODA1ODpcdFxuODA1OTpcdFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuODA2MDpcdFx0aWYgKHJldCkge1xuODA2MTpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDslczogRVJST1IgJWkgcmVnaXN0ZXJpbmcgdGhlIGRldmljZVxcblwmIzM0OyxcbjgwNjI6XHRcdFx0XHRfX2Z1bmNfXywgcmV0KTtcbjgwNjM6XHRcdFx0Z290byBlcnJvcl9uZXRkZXZfcmVnaXN0ZXI7XG44MDY0Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjA1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc3RtbWFjX3BoeWxpbmtfc2V0dXBgIGZ1bmN0aW9uLCBzaGFsbCB3ZT8gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHdoYXQmIzM5O3MgbGlrZWx5IGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFuYWx5emUgaXQ6CgoqKkRlY29uc3RydWN0aW5nIGBzdG1tYWNfcGh5bGlua19zZXR1cGAqKgoKQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgc3RtbWFjX3BoeWxpbmtfc2V0dXBgLiBUaGUgbmFtZSBpdHNlbGYgc2NyZWFtcyAmIzM0O0V0aGVybmV0LCBQSFksIGFuZCBzZXR1cC4mIzM0OyBJIGltbWVkaWF0ZWx5IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHdoZXJlIHRoZSBTVE1NQUMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBQSFkgbGF5ZXIsIGxpa2VseSBlc3RhYmxpc2hpbmcgdGhlIGxpbmsgYW5kIGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgYSBmZXcga2V5IGFyZWFzOgoKKiAgICoqUEhZIExpbmsgSW5pdGlhbGl6YXRpb246KiogSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBwcm9iaW5nIGFuZCBjb25uZWN0aW5nIHRvIHRoZSBQSFkgZGV2aWNlLCBtYXliZSB1c2luZyBwaHlsaW5rLCBjb25zaWRlcmluZyB0aGUgbmFtZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBkcml2ZXIgZGV0ZWN0cyB0aGUgUEhZLCBhbmQgdGhlbiBzZXRzIHVwIHRoZSBjb21tdW5pY2F0aW9uIGludGVyZmFjZS4gSXMgaXQgdXNpbmcgTURJTz8gV2hhdCBhYm91dCBhbnkgc3BlY2lmaWMgU1RNTUFDLXJlbGF0ZWQgUEhZIGluaXRpYWxpemF0aW9uIHJlcXVpcmVtZW50cz8KKiAgICoqU3BlZWQsIER1cGxleCwgYW5kIEF1dG9uZWdvdGlhdGlvbjoqKiBEZWZpbml0ZWx5IGV4cGVjdGluZyB0byBzZWUgY29kZSB0aGF0IGhhbmRsZXMgdGhlIG5lZ290aWF0ZWQgbGluayBzcGVlZCwgZHVwbGV4IG1vZGUgKGhhbGYvZnVsbCksIGFuZCBtb3N0IGxpa2VseSBhdXRvbmVnb3RpYXRpb24uIEhvdyBkb2VzIGl0IGhhbmRsZSBmb3JjZWQgY29uZmlndXJhdGlvbnMgaWYgYXV0b25lZ290aWF0aW9uIGZhaWxzIG9yIGlzIGRpc2FibGVkPyBBcmUgdGhlcmUgYW55IFNUTU1BQy1zcGVjaWZpYyBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZXNlIHBhcmFtZXRlcnM/CiogICAqKkRyaXZlciAmYW1wOyBQSFkgQ29vcmRpbmF0aW9uOioqIEhvdyBkb2VzIHRoZSBTVE1NQUMgZHJpdmVyIGdldCBub3RpZmllZCBhYm91dCBsaW5rIHN0YXRlIGNoYW5nZXM/IElzIHRoZXJlIGEgY2FsbGJhY2sgbWVjaGFuaXNtIHRvIGhhbmRsZSBQSFkgaW50ZXJydXB0cyBvciBsaW5rIHN0YXR1cyBldmVudHM/IEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBzdGF5cyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgUEhZJiMzOTtzIG9wZXJhdGlvbmFsIHN0YXRlLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBJbXBvcnRhbnQuIEhvdyBkb2VzIGl0IGRlYWwgd2l0aCBQSFkgZGV0ZWN0aW9uIGZhaWx1cmVzLCBsaW5rIGZhaWx1cmVzLCBvciBjb25maWd1cmF0aW9uIGVycm9ycz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igcm9idXN0IGVycm9yIGNoZWNraW5nIGFuZCBwb3RlbnRpYWxseSByZXRyeSBtZWNoYW5pc21zLgoqICAgKipDbG9jayBDb25maWd1cmF0aW9uOioqIFNUTU1BQyBkcml2ZXJzIG9mdGVuIGhhdmUgc3BlY2lmaWMgY2xvY2sgcmVxdWlyZW1lbnRzIGZvciB0aGUgUEhZIGludGVyZmFjZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBjbG9ja3MgYXJlIGNvbmZpZ3VyZWQgYW5kIG1hbmFnZWQsIGFuZCBpZiB0aGV5IGNoYW5nZSBiYXNlZCBvbiB0aGUgUEhZJiMzOTtzIHNldHRpbmdzLgoqICAgKipSZXNvdXJjZSBBbGxvY2F0aW9uOioqIFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24/IEkgZXhwZWN0IHRvIHNlZSBQSFktcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBhbGxvY2F0aW9uIGZvciBQSFkgY29udHJvbCByZWdpc3RlcnMgb3IgbGluayBzdGF0dXMgaW5mb3JtYXRpb24uCgpTbywgb3ZlcmFsbCwgbXkgbWVudGFsIGNoZWNrbGlzdCBpczogaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyYXRpb24sIGxpbmsgbW9uaXRvcmluZywgZXJyb3IgaGFuZGxpbmcsIGNsb2NraW5nLCBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4gTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIG15IGFzc3VtcHRpb25zIGhvbGQgdXAgYXMgSSBkaXNzZWN0IHRoZSBjb2RlLi4uIFRpbWUgdG8gZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfcGh5bGlua19zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTEyOTk9c3RhdGljIGludCBzdG1tYWNfaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEzNzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjEzNzQ6c3RhdGljIGludCBzdG1tYWNfcGh5bGlua19zZXR1cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEzNzUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc5Nj1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDQ5Olx0cmV0ID0gc3RtbWFjX3BoeWxpbmtfc2V0dXAocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwNTAtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDg2CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCB3ZSYjMzk7cmUgbG9va2luZyBhdCwgc3VtbWFyaXplZCBhcyB0aG91Z2ggSSYjMzk7bSB3b3JraW5nIHRocm91Z2ggaXQ6CgoqKkFuYWx5emluZyB0aGUgYHN0bW1hY19waHlsaW5rX3NldHVwYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGBzdG1tYWNfcGh5bGlua19zZXR1cGAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNldHRpbmcgdXAgdGhlIFBIWSBsaW5rIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE1BQyBkcml2ZXIsIGJ1dCBsZXQmIzM5O3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgc3RlcHMgYXJlIGludm9sdmVkLCB3aGF0IHJlc291cmNlcyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoLCBhbmQgd2hhdCBwb3RlbnRpYWwgaXNzdWVzIG1pZ2h0IGFyaXNlIGhlcmUuIElzIHRoaXMgd2hlcmUgdGhlIGNyaXRpY2FsIFBIWSBuZWdvdGlhdGlvbiBoYXBwZW5zPyBJcyB0aGVyZSBhbnl0aGluZyBzcGVjaWZpYyB0byB0aGUgU1RNTUFDJiMzOTtzIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uIHRoYXQgaXMgd29ydGggbm90aW5nIGluIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbj8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGNhbGwgc3RhY2sgYW5kIGRhdGEgZmxvdyB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNzQ6XHRzdGF0aWMgaW50IHN0bW1hY19waHlsaW5rX3NldHVwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbjEzNzU6XHR7XG4xMzc2Olx0XHRzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZztcbjEzNzc6XHRcdHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzO1xuMTM3ODpcdFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4xMzc5Olx0XG4xMzgwOlx0XHRjb25maWcgPSBcdTAwMjZwcml2LVx1MDAzZXBoeWxpbmtfY29uZmlnO1xuMTM4MTpcdFxuMTM4MjpcdFx0Y29uZmlnLVx1MDAzZWRldiA9IFx1MDAyNnByaXYtXHUwMDNlZGV2LVx1MDAzZWRldjtcbjEzODM6XHRcdGNvbmZpZy1cdTAwM2V0eXBlID0gUEhZTElOS19ORVRERVY7XG4xMzg0Olx0XHRjb25maWctXHUwMDNlbWFjX21hbmFnZWRfcG0gPSB0cnVlO1xuMTM4NTpcdFxuMTM4NjpcdFx0LyogU3RtbWFjIGFsd2F5cyByZXF1aXJlcyBhbiBSWCBjbG9jayBmb3IgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gKi9cbjEzODc6XHRcdGNvbmZpZy1cdTAwM2VtYWNfcmVxdWlyZXNfcnhjID0gdHJ1ZTtcbjEzODg6XHRcbjEzODk6XHRcdC8qIERpc2FibGUgRUVFIFJYIGNsb2NrIHN0b3AgdG8gZW5zdXJlIFZMQU4gcmVnaXN0ZXIgYWNjZXNzIHdvcmtzXG4xMzkwOlx0XHQgKiBjb3JyZWN0bHkuXG4xMzkxOlx0XHQgKi9cbjEzOTI6XHRcdGlmICghKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfUlhfQ0xLX1JVTlNfSU5fTFBJKSBcdTAwMjZcdTAwMjZcbjEzOTM6XHRcdCAgICAhKHByaXYtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1ZMQU5fRkVBVFVSRVMpKVxuMTM5NDpcdFx0XHRjb25maWctXHUwMDNlZWVlX3J4X2Nsa19zdG9wX2VuYWJsZSA9IHRydWU7XG4xMzk1Olx0XG4xMzk2Olx0XHQvKiBTZXQgdGhlIGRlZmF1bHQgdHJhbnNtaXQgY2xvY2sgc3RvcCBiaXQgYmFzZWQgb24gdGhlIHBsYXRmb3JtIGdsdWUgKi9cbjEzOTc6XHRcdHByaXYtXHUwMDNldHhfbHBpX2Nsa19zdG9wID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNlxuMTM5ODpcdFx0XHRcdFx0U1RNTUFDX0ZMQUdfRU5fVFhfTFBJX0NMT0NLR0FUSU5HO1xuMTM5OTpcdFxuMTQwMDpcdFx0LyogR2V0IHRoZSBQSFkgaW50ZXJmYWNlIG1vZGVzIChhdCB0aGUgUEhZIGVuZCBvZiB0aGUgbGluaykgdGhhdFxuMTQwMTpcdFx0ICogYXJlIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0uXG4xNDAyOlx0XHQgKi9cbjE0MDM6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZ2V0X2ludGVyZmFjZXMpXG4xNDA0Olx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VnZXRfaW50ZXJmYWNlcyhwcml2LCBwcml2LVx1MDAzZXBsYXQtXHUwMDNlYnNwX3ByaXYsXG4xNDA1Olx0XHRcdFx0XHRcdCAgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4xNDA2Olx0XG4xNDA3Olx0XHRjb25maWctXHUwMDNlZGVmYXVsdF9hbl9pbmJhbmQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlZGVmYXVsdF9hbl9pbmJhbmQ7XG4xNDA4Olx0XG4xNDA5Olx0XHQvKiBTZXQgdGhlIHBsYXRmb3JtL2Zpcm13YXJlIHNwZWNpZmllZCBpbnRlcmZhY2UgbW9kZSBpZiB0aGVcbjE0MTA6XHRcdCAqIHN1cHBvcnRlZCBpbnRlcmZhY2VzIGhhdmUgbm90IGFscmVhZHkgYmVlbiBwcm92aWRlZCB1c2luZ1xuMTQxMTpcdFx0ICogcGh5X2ludGVyZmFjZSBhcyBhIGxhc3QgcmVzb3J0LlxuMTQxMjpcdFx0ICovXG4xNDEzOlx0XHRpZiAocGh5X2ludGVyZmFjZV9lbXB0eShjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpKVxuMTQxNDpcdFx0XHRfX3NldF9iaXQocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBoeV9pbnRlcmZhY2UsXG4xNDE1Olx0XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuMTQxNjpcdFxuMTQxNzpcdFx0LyogSWYgd2UgaGF2ZSBhbiB4cGNzLCBpdCBkZWZpbmVzIHdoaWNoIFBIWSBpbnRlcmZhY2VzIGFyZSBzdXBwb3J0ZWQuICovXG4xNDE4Olx0XHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuMTQxOTpcdFx0XHRwY3MgPSB4cGNzX3RvX3BoeWxpbmtfcGNzKHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4xNDIwOlx0XHRlbHNlXG4xNDIxOlx0XHRcdHBjcyA9IHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3M7XG4xNDIyOlx0XG4xNDIzOlx0XHRpZiAocGNzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTU1MAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgcGh5bGluayBTZXR1cCBpbiBzdG1tYWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzdG1tYWNfcGh5bGlua19zZXR1cGAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGlzIGZ1bmN0aW9uJiMzOTtzIHByaW1hcnkgcHVycG9zZSBpcyB0aGUgY3JlYXRpb24gb2YgYSBgcGh5bGlua2AgaW5zdGFuY2UsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBmdW5jdGlvbiYjMzk7cyBuYW1lIGFuZCBpdHMgcGxhY2UgaW4gdGhlIEV0aGVybmV0IGRyaXZlciBzZXR1cC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gaW5zdGFudGlhdGUgdGhlIGFic3RyYWN0aW9uIHRoYXQgYnJpZGdlcyB0aGUgZ2FwIGJldHdlZW4gdGhlIE1BQyBhbmQgdGhlIFBIWS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgcGF0aHMuIEkgaW1tZWRpYXRlbHkgd29uZGVyOiBkb2VzIHRoZSBmdW5jdGlvbiBncmFjZWZ1bGx5IGhhbmRsZSB0aGUgc2NlbmFyaW8gd2hlcmUgbm8gUEhZIGlzIHByZXNlbnQ/IERvZXMgaXQgcmV0dXJuIGFuIGVycm9yLCBvciBwZXJoYXBzIGF0dGVtcHQgc29tZSBraW5kIG9mIGZhbGxiYWNrIG9yIGhhcmR3YXJlIGF1dG9uZWdvdGlhdGlvbiBzZXR1cD8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBpZiBhIFBIWSBpc24mIzM5O3QgZGV0ZWN0ZWQgb3IgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgcG9pbnQuIFRoYXQgd291bGQgc2lnbmlmaWNhbnRseSBhZmZlY3QgdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDI0Olx0XHRcdHBoeV9pbnRlcmZhY2Vfb3IoY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzLFxuMTQyNTpcdFx0XHRcdFx0IGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyxcbjE0MjY6XHRcdFx0XHRcdCBwY3MtXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuMTQyNzpcdFxuMTQyODpcdFx0LyogU29tZSBwbGF0Zm9ybXMsIGUuZy4gaU1YOE1QLCB3aXJlIGxwaV9pbnRyX28gdG8gdGhlIHNhbWUgaW50ZXJydXB0XG4xNDI5Olx0XHQgKiB1c2VkIGZvciBzdG1tYWMmIzM5O3MgbWFpbiBpbnRlcnJ1cHRzLCB3aGljaCBsZWFkcyB0byBpbnRlcnJ1cHQgc3Rvcm1zLlxuMTQzMDpcdFx0ICogU1RNTUFDX0ZMQUdfRUVFX0RJU0FCTEUgYWxsb3dzIEVFRSB0byBiZSBkaXNhYmxlZCBvbiBzdWNoIHBsYXRmb3Jtcy5cbjE0MzE6XHRcdCAqL1xuMTQzMjpcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5lZWUgXHUwMDI2XHUwMDI2XG4xNDMzOlx0XHQgICAgIShwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX0VFRV9ESVNBQkxFKSkge1xuMTQzNDpcdFx0XHQvKiBUaGUgR01BQyAzLjc0YSBkYXRhYm9vayBzdGF0ZXMgdGhhdCBFRUUgaXMgb25seSBzdXBwb3J0ZWRcbjE0MzU6XHRcdFx0ICogaW4gTUlJLCBHTUlJLCBhbmQgUkdNSUkgaW50ZXJmYWNlcy5cbjE0MzY6XHRcdFx0ICovXG4xNDM3Olx0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfTUlJLCBjb25maWctXHUwMDNlbHBpX2ludGVyZmFjZXMpO1xuMTQzODpcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUksIGNvbmZpZy1cdTAwM2VscGlfaW50ZXJmYWNlcyk7XG4xNDM5Olx0XHRcdHBoeV9pbnRlcmZhY2Vfc2V0X3JnbWlpKGNvbmZpZy1cdTAwM2VscGlfaW50ZXJmYWNlcyk7XG4xNDQwOlx0XG4xNDQxOlx0XHRcdC8qIElmIHdlIGhhdmUgYSBub24taW50ZWdyYXRlZCBQQ1MsIGFzc3VtZSB0aGF0IGl0IGlzIGNvbm5lY3RlZFxuMTQ0MjpcdFx0XHQgKiB0byB0aGUgR01BQyB1c2luZyBHTUlJIG9yIGFub3RoZXIgRUVFIGNvbXBhdGlibGUgaW50ZXJmYWNlLFxuMTQ0MzpcdFx0XHQgKiBhbmQgdGh1cyBhbGwgUENTLXN1cHBvcnRlZCBpbnRlcmZhY2VzIHN1cHBvcnQgTFBJLlxuMTQ0NDpcdFx0XHQgKi9cbjE0NDU6XHRcdFx0aWYgKHBjcylcbjE0NDY6XHRcdFx0XHRwaHlfaW50ZXJmYWNlX29yKGNvbmZpZy1cdTAwM2VscGlfaW50ZXJmYWNlcyxcbjE0NDc6XHRcdFx0XHRcdFx0IGNvbmZpZy1cdTAwM2VscGlfaW50ZXJmYWNlcyxcbjE0NDg6XHRcdFx0XHRcdFx0IHBjcy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4xNDQ5Olx0XG4xNDUwOlx0XHRcdC8qIEFsbCBmdWxsIGR1cGxleCBzcGVlZHMgYWJvdmUgMTAwTWJwcyBhcmUgc3VwcG9ydGVkICovXG4xNDUxOlx0XHRcdGNvbmZpZy1cdTAwM2VscGlfY2FwYWJpbGl0aWVzID0gfihNQUNfMTAwMEZEIC0gMSkgfCBNQUNfMTAwRkQ7XG4xNDUyOlx0XHRcdGNvbmZpZy1cdTAwM2VscGlfdGltZXJfZGVmYXVsdCA9IGVlZV90aW1lciAqIDEwMDA7XG4xNDUzOlx0XHRcdGNvbmZpZy1cdTAwM2VlZWVfZW5hYmxlZF9kZWZhdWx0ID0gdHJ1ZTtcbjE0NTQ6XHRcdH1cbjE0NTU6XHRcbjE0NTY6XHRcdGNvbmZpZy1cdTAwM2V3b2xfcGh5X3NwZWVkX2N0cmwgPSB0cnVlO1xuMTQ1NzpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfVVNFX1BIWV9XT0wpIHtcbjE0NTg6XHRcdFx0Y29uZmlnLVx1MDAzZXdvbF9waHlfbGVnYWN5ID0gdHJ1ZTtcbjE0NTk6XHRcdH0gZWxzZSB7XG4xNDYwOlx0XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAucG10X3JlbW90ZV93YWtlX3VwKVxuMTQ2MTpcdFx0XHRcdGNvbmZpZy1cdTAwM2V3b2xfbWFjX3N1cHBvcnQgfD0gV0FLRV9VQ0FTVDtcbjE0NjI6XHRcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5wbXRfbWFnaWNfZnJhbWUpXG4xNDYzOlx0XHRcdFx0Y29uZmlnLVx1MDAzZXdvbF9tYWNfc3VwcG9ydCB8PSBXQUtFX01BR0lDO1xuMTQ2NDpcdFx0fVxuMTQ2NTpcdFxuMTQ2NjpcdFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKGNvbmZpZywgZGV2X2Z3bm9kZShwcml2LVx1MDAzZWRldmljZSksXG4xNDY3Olx0XHRcdFx0XHQgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBoeV9pbnRlcmZhY2UsXG4xNDY4Olx0XHRcdFx0XHQgXHUwMDI2c3RtbWFjX3BoeWxpbmtfbWFjX29wcyk7XG4xNDY5Olx0XHRpZiAoSVNfRVJSKHBoeWxpbmspKVxuMTQ3MDpcdFx0XHRyZXR1cm4gUFRSX0VSUihwaHlsaW5rKTtcbjE0NzE6XHRcbjE0NzI6XHRcdHByaXYtXHUwMDNlcGh5bGluayA9IHBoeWxpbms7XG4xNDczOlx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY3MTQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBzZXF1ZW5jZSwgYXMgaWYgSSB3ZXJlIHdvcmtpbmcgdGhyb3VnaCBpdDoKCioqVGhpbmtpbmcgVGhyb3VnaCBQSFkgSW5pdGlhbGl6YXRpb24gYW5kIERldmljZSBSZWdpc3RyYXRpb24qKgoKQWxyaWdodCwgc28gYHBoeWxpbmtfY3JlYXRlYCBpcyBjbGV2ZXJseSBkZXNpZ25lZCB0byBiZSBmbGV4aWJsZTsgaXQgZG9lc24mIzM5O3QgKmFic29sdXRlbHkqIG5lZWQgYSBQSFkgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoYXQgbWVhbnMgYHN0bW1hY19waHlsaW5rX3NldHVwYCBpcyBnb2luZyB0byBzYWlsIHRocm91Z2ggd2l0aG91dCBhbnkgaXNzdWVzLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBkZXZpY2UgcmVnaXN0cmF0aW9uIGNhbiBoYXBwZW4sIHRoYW5rcyB0byB0aGUgc3Vic2VxdWVudCBgcmVnaXN0ZXJfbmV0ZGV2YCBjYWxsLCByaWdodD8gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgdGhlIGRldmljZSBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0uCgpOb3csIGEgY3JpdGljYWwgdGhvdWdodCBhcmlzZXM6IGhvdyBkb2VzIGBzdG1tYWNfaHdfaW5pdGAgZml0IGludG8gdGhpcyBwaWN0dXJlPyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGluaXRpYWwgaGFyZHdhcmUgc2V0dXAuIElmIHRoZSBkcml2ZXIgdmVyc2lvbiwgYHZlcnNpb25gLCBpcyB6ZXJvLCBgc3RtbWFjX2h3aWZfZmluZGAgd2lsbCBwb2ludCB1cyB0byB0aGUgYERXTUFDX0NPUkVfR01BQzRgIGVudHJ5LiBUaGUga2V5IGlzIHRoYXQgdGhlIGBtaW5faWRgIGlzIHplcm8uIFRoZW4sIGBzdG1tYWNfaHdpZl9pbml0YCBhc3NpZ25zIHRoZSBmb3VuZCBNQUMgZW50cnkgdG8gYHByaXYtJmd0O2h3YC4gVGhlIGFjdHVhbCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBpcyBraWNrZWQgb2ZmIGluIGBzdG1tYWNfaHdfaW5pdGAuIFNwZWNpZmljYWxseSwgYSBjYWxsIHRvIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYCB3aWxsIG9jY3VyLiBUaGlzIGxpa2VseSBwcm9iZXMgdGhlIGhhcmR3YXJlIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MzE0NT1zdGF0aWMgdm9pZCBzdG1tYWNfbW1jX3NldHVwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTMxNTktLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjMxNjA6ICogc3RtbWFjX2dldF9od19mZWF0dXJlcyAtIGdldCBNQUMgY2FwYWJpbGl0aWVzIGZyb20gdGhlIEhXIGNhcC4gcmVnaXN0ZXIuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTMxNjEtICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzE2Ny0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MzE2ODpzdGF0aWMgaW50IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zMTY5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc0MDc9c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDIxLVx0LyogR2V0IHRoZSBIVyBjYXBhYmlsaXR5IChuZXcgR01BQyBuZXdlciB0aGFuIDMuNTBhKSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NDIyOlx0cHJpdi1cdTAwM2Vod19jYXBfc3VwcG9ydCA9IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MjMtXHRpZiAocHJpdi1cdTAwM2Vod19jYXBfc3VwcG9ydCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY1MgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgc3RtbWFjX2dldF9od19mZWF0dXJlc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgaGFyZHdhcmUgZmVhdHVyZSBkZXRlY3Rpb24gbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBzdGFuZGFyZCBTVE0zMiBFdGhlcm5ldCBNQUMgZHJpdmVyIGhlcmUsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdHlwaWNhbCBwcm9iaW5nIGZvciBjYXBhYmlsaXRpZXMgbGlrZSBqdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWQgc3VwcG9ydCwgYW5kIHBvdGVudGlhbGx5IHNvbWUgZGVzY3JpcHRvciBmb3JtYXQgY29uc2lkZXJhdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiBob3cgdGhlIGRyaXZlciYjMzk7cyBmZWF0dXJlIGRldGVjdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSByZWdpc3RlciBzZXR0aW5ncy4gSXMgdGhpcyBkb25lIGF0IHJ1bnRpbWUgb3IgYXQgaW5pdGlhbGl6YXRpb24/IEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBkcml2ZXIgcHJlc2VudHMgaXRzIGNhcGFiaWxpdGllcyB0byB0aGUgbmV0d29ya2luZyBzdGFjay4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhIHBhcnRpY3VsYXIgY29uY2VybiB0byBhZGRyZXNzPyBJcyB0aGVyZSBhIHN1YnRsZSBidWcgb3IgbWlzc2luZyBmZWF0dXJlPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE2ODpcdHN0YXRpYyBpbnQgc3RtbWFjX2dldF9od19mZWF0dXJlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4zMTY5Olx0e1xuMzE3MDpcdFx0cmV0dXJuIHN0bW1hY19nZXRfaHdfZmVhdHVyZShwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgXHUwMDI2cHJpdi1cdTAwM2VkbWFfY2FwKSA9PSAwO1xuMzE3MTpcdH1cbjMxNzI6XHRcbjMxNzM6XHQvKipcbjMxNzQ6XHQgKiBzdG1tYWNfY2hlY2tfZXRoZXJfYWRkciAtIGNoZWNrIGlmIHRoZSBNQUMgYWRkciBpcyB2YWxpZFxuMzE3NTpcdCAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcbjMxNzY6XHQgKiBEZXNjcmlwdGlvbjpcbjMxNzc6XHQgKiBpdCBpcyB0byB2ZXJpZnkgaWYgdGhlIE1BQyBhZGRyZXNzIGlzIHZhbGlkLCBpbiBjYXNlIG9mIGZhaWx1cmVzIGl0XG4zMTc4Olx0ICogZ2VuZXJhdGVzIGEgcmFuZG9tIE1BQyBhZGRyZXNzXG4zMTc5Olx0ICovXG4zMTgwOlx0c3RhdGljIHZvaWQgc3RtbWFjX2NoZWNrX2V0aGVyX2FkZHIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuMzE4MTpcdHtcbjMxODI6XHRcdHU4IGFkZHJbRVRIX0FMRU5dO1xuMzE4MzpcdFxuMzE4NDpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHByaXYtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuMzE4NTpcdFx0XHRzdG1tYWNfZ2V0X3VtYWNfYWRkcihwcml2LCBwcml2LVx1MDAzZWh3LCBhZGRyLCAwKTtcbjMxODY6XHRcdFx0aWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcikpXG4zMTg3Olx0XHRcdFx0ZXRoX2h3X2FkZHJfc2V0KHByaXYtXHUwMDNlZGV2LCBhZGRyKTtcbjMxODg6XHRcdFx0ZWxzZVxuMzE4OTpcdFx0XHRcdGV0aF9od19hZGRyX3JhbmRvbShwcml2LVx1MDAzZWRldik7XG4zMTkwOlx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtkZXZpY2UgTUFDIGFkZHJlc3MgJXBNXFxuXCYjMzQ7LFxuMzE5MTpcdFx0XHRcdCBwcml2LVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4zMTkyOlx0XHR9XG4zMTkzOlx0fVxuMzE5NDpcdFxuMzE5NTpcdGludCBzdG1tYWNfZ2V0X3BoeV9pbnRmX3NlbChwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuMzE5NjpcdHtcbjMxOTc6XHRcdGludCBwaHlfaW50Zl9zZWwgPSAtRUlOVkFMO1xuMzE5ODpcdFxuMzE5OTpcdFx0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTUlJIHx8XG4zMjAwOlx0XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJKVxuMzIwMTpcdFx0XHRwaHlfaW50Zl9zZWwgPSBQSFlfSU5URl9TRUxfR01JSV9NSUk7XG4zMjAyOlx0XHRlbHNlIGlmIChwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50ZXJmYWNlKSlcbjMyMDM6XHRcdFx0cGh5X2ludGZfc2VsID0gUEhZX0lOVEZfU0VMX1JHTUlJO1xuMzIwNDpcdFx0ZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxuMzIwNTpcdFx0XHRwaHlfaW50Zl9zZWwgPSBQSFlfSU5URl9TRUxfUk1JSTtcbjMyMDY6XHRcdGVsc2UgaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkVWTUlJKVxuMzIwNzpcdFx0XHRwaHlfaW50Zl9zZWwgPSBQSFlfSU5URl9TRUxfUkVWTUlJO1xuMzIwODpcdFxuMzIwOTpcdFx0cmV0dXJuIHBoeV9pbnRmX3NlbDtcbjMyMTA6XHR9XG4zMjExOlx0RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2dldF9waHlfaW50Zl9zZWwpO1xuMzIxMjpcdFxuMzIxMzpcdHN0YXRpYyBpbnQgc3RtbWFjX3ByZXJlc2V0X2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4zMjE0Olx0e1xuMzIxNTpcdFx0c3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCA9IHByaXYtXHUwMDNlcGxhdDtcbjMyMTY6XHRcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4zMjE3Olx0XHRzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3OTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTVE1NQUMgRHJpdmVyIGFuZCBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc3RtbWFjYCBkcml2ZXIgY29kZS4gVGhpcyBgc3RtbWFjX2dldF9od19mZWF0dXJlYCBmdW5jdGlvbi4uLiBpZiBpdCByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIHplcm8sIHRoZW4gYHN0bW1hY19nZXRfaHdfZmVhdHVyZXNgIGp1c3QgcmV0dXJucyB6ZXJvLiBJZiBpdCAqZG9lcyogcmV0dXJuIHplcm8sIGl0IGp1c3Qgb3V0cHV0cyAmIzM0O05vIEhXIERNQSBmZWF0dXJlIHJlZ2lzdGVyIHN1cHBvcnRlZCYjMzQ7IGFuZCBrZWVwcyBnb2luZy4gVGhhdCYjMzk7cy4uLiBpbnRlcmVzdGluZy4gRXNzZW50aWFsbHksIHRoZSBkcml2ZXIgc2VlbXMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IGV2ZW4gd2l0aCBhIGNvbXBsZXRlbHkgZmFrZSBQQ0kgZGV2aWNlLCBodWg/IFRoYXQgY291bGQgbGVhZCB0byBzb21lIHByZXR0eSBzaWduaWZpY2FudCBmYWxzZSBwb3NpdGl2ZXMuCgpXYWl0IGEgc2Vjb25kLi4uIGRvZXNuJiMzOTt0IHN5emthbGxlciBoYXZlIHRoaXMgYHZoY2lgIGRldmljZSB0aGluZyB0aGF0IGxldHMgaXQgaW5qZWN0IFBDSSBkZXZpY2VzPyBUaGF0JiMzOTtzIHBlcmZlY3QgZm9yIHRlc3RpbmcgdGhpcyBzb3J0IG9mIHRoaW5nLiBCdXQgZG9lcyBzeXprYWxsZXIgKmFjdHVhbGx5KiB0ZXN0IGBzdG1tYWNgPyBJIHNob3VsZCBjaGVjay4gVXN1YWxseSwgdGhlIGRlZmF1bHQgZGVmY29uZmlnIGZvciB0aGUga2VybmVsIGRvZXNuJiMzOTt0IGVuYWJsZSBgQ09ORklHX1NUTU1BQ19FVEhgIG9yIGBDT05GSUdfU1RNTUFDX1BDSWAuIEJ1dCBzeXprYWxsZXImIzM5O3MgY29uZmlnIG1pZ2h0IGJlIGRpZmZlcmVudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZ290IHRob3NlIGVuYWJsZWQuIFRoZW4sIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIHNwZWNpZmljYWxseSBmb3IgYHN0bW1hY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGV4aXN0aW5nIGNvdmVyYWdlIGZvciB0aGlzIGRyaXZlciBpbiB0aGUgc3l6a2FsbGVyIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjkzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgc3RtbWFjIHdpdGggU3l6a2FsbGVyOiBBIFBsYW4qKgoKT2theSwgc28gdGhlcmUgYXJlbiYjMzk7dCBhbnkgcHJlLWV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbnMgc3BlY2lmaWNhbGx5IGZvciBgc3RtbWFjYC4uLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgaHVyZGxlLCBidXQgbm90IGluc3VybW91bnRhYmxlLiBCdXQgSSByZW1lbWJlciB0aGF0IGBzeXprYWxsZXJgIGNhbiBmdXp6IGl0IHRocm91Z2ggYG5ldGxpbmtgISBTcGVjaWZpY2FsbHksIHVzaW5nIGB0YyBxZGlzY2AgaWYgdGhlIGRldmljZSBpcyBhY3R1YWxseSBwcmVzZW50LiBBbmQgdGhhdCBtYWtlcyBzZW5zZSDigJMgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50LCB0aGVuIGl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYSBgbmV0ZGV2YC4KCkFoYSEgU28sIHRoZW4gSSBjYW4gbGV2ZXJhZ2Ugc3l6a2FsbGVyJiMzOTtzIGBSVE1fTkVXUURJU0NgIGZ1bmN0aW9uYWxpdHkgdG8gYWRkIGFuIGBldHNgIHFkaXNjLiBXYWl0IGEgbWludXRlLi4uIGBldHNgIHFkaXNjIGlzIGEgcHJldHR5IHN0YW5kYXJkIExpbnV4IHFkaXNjLCByaWdodD8gTm90aGluZyBvYnNjdXJlIG9yIGV4b3RpYyBhYm91dCBpdC4gVGhhdCYjMzk7cyBnb29kIG5ld3MuIE5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgc3l6a2FsbGVyIGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciBgZXRzYCBxZGlzYy4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwOyBjb25maXJtaW5nIGl0cyBhbHJlYWR5IHN1cHBvcnRlZCwgd2lsbCBzYXZlIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzL2xpbnV4L3NvY2tldF9uZXRsaW5rX3JvdXRlX3RjLnR4dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjYwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJiMzOTtkIGJlIGRvaW5nIGFuZCB3aHk6CgoqKkluaXRpYWwgSW52ZXN0aWdhdGlvbjogU29ja2V0IE5ldGxpbmsgUm91dGUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSwgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLiBUaGUgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyBvYnZpb3VzbHkgZ29pbmcgdG8gYmUgdGhhdCBgc3lzL2xpbnV4L3NvY2tldF9uZXRsaW5rX3JvdXRlLnR4dGAgZmlsZS4gTmV0bGluayByb3V0aW5nIHNvY2tldHMgaW4gTGludXggYXJlIHRoZSBsaWZlYmxvb2Qgb2YgaG93IHJvdXRpbmcgaW5mb3JtYXRpb24sIGFuZCB0aGVyZWZvcmUgbmV0d29yayBjb25maWd1cmF0aW9uLCBpcyBtYW5hZ2VkLiBUaGF0IGZpbGUgd2lsbCwgYWxtb3N0IGNlcnRhaW5seSwgaG9sZCBjcml0aWNhbCBkb2N1bWVudGF0aW9uLCBjb25maWd1cmF0aW9uIGRldGFpbHMsIGFuZCBsaWtlbHkgc29tZSBjcnVjaWFsIGNvZGUgZXhhbXBsZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBiZSB0aGUgY2Fub25pY2FsIHNvdXJjZSBvciBhdCBsZWFzdCAqYSogdmVyeSBpbXBvcnRhbnQgcmVmZXJlbmNlLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc3lzL2xpbnV4L3NvY2tldF9uZXRsaW5rX3JvdXRlLnR4dGAgZmlsZSBjb25maWd1cmVzIHRoZSBjb25uZWN0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb25maWd1cmF0aW9uIHBvc3NpYmlsaXRpZXMsIGV4cGVjdGVkIHZhbHVlcyBhbmQgdGhlIGdlbmVyYWwgd29ya2Zsb3cgb2YgYW55IGNvbW1hbmRzIGFuZCBjYWxscyBpbnZvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byBhYnNvcmIgaG93IHRoaXMgd29ya3MsIGF0IGEgaGlnaCBsZXZlbC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3N5cy9saW51eC9zb2NrZXRfbmV0bGlua19yb3V0ZS50eHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk1NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZXRzYCBLZXJuZWwgTW9kdWxlKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgYGV0c2AgbW9kdWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBmb3Iga2VybmVsIG1vZHVsZXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIExpbnV4IHNvdXJjZSB0cmVlLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSB1bmRlciBgc3lzL2xpbnV4L2AsIGFzIHRoYXQmIzM5O3MgZ2VuZXJhbGx5IHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgc3lzdGVtLWxldmVsIGNvbXBvbmVudHMuIFRoaXMgaW5pdGlhbCBjaGVjayBpcyBhIGZ1bmRhbWVudGFsIGRpYWdub3N0aWMgc3RlcDsgSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBleGlzdGVuY2UgYW5kIHBsYWNlbWVudCBvZiB0aGlzIG1vZHVsZSBiZWZvcmUgZW1iYXJraW5nIG9uIGFueSBkZWVwZXIgYW5hbHlzaXMuIEkmIzM5O20gZXNzZW50aWFsbHkgcGVyZm9ybWluZyBhIHNhbml0eSBjaGVjayB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHR5cGljYWwgbW9kdWxlIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzeXMvbGludXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAxNTYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBFVFMgUXVldWUgRGlzY2lwbGluZSoqCgpSaWdodCwgbGV0IG1lIHRoaW5rLi4uIEkgcmVjYWxsIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgdGhlIGBldHNgIHFkaXNjLiBBaCB5ZXMsIGl0JiMzOTtzIGltcGxlbWVudGVkIGluIGBuZXQvc2NoZWQvc2NoX2V0cy5jYC4gVGltZSB0byBjb25maXJtIHRoYXQuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIHRoYXQgc3BlY2lmaWMgZmlsZSwgYHNjaF9ldHMuY2AsIGFjdHVhbGx5IGV4aXN0cyBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBHb3R0YSBkb3VibGUgY2hlY2sgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMgd2hlcmUgSSBleHBlY3QgaXQgdG8gYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDX1NFVFVQX1FESVNDX0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9OTUwPWVudW0gdGNfc2V0dXBfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC05NjYtXHRUQ19TRVRVUF9GVCxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6OTY3Olx0VENfU0VUVVBfUURJU0NfRVRTLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC05NjgtXHRUQ19TRVRVUF9RRElTQ19UQkYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDM3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIHRoZSBFVFMgUWRpc2MgSW50ZWdyYXRpb24gaW4gU1RNTUFDIERyaXZlcioqCgpPa2F5LCBzbyBgVENfU0VUVVBfUURJU0NfRVRTYCBkZWZpbml0ZWx5IGV4aXN0cyDigJMgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuIFRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBkb2VzIHN5emthbGxlciBhbHJlYWR5IGZ1enogdGhlIGBldHNgIHFkaXNjIGRpcmVjdGx5PyBJIGRvbiYjMzk7dCBzZWUgc3BlY2lmaWMgZnV6emluZyBmb3IgaXQgbWVudGlvbmVkLCBzbyBpdCYjMzk7cyBsaWtlbHkgc3l6a2FsbGVyIHdvdWxkIHJlbHkgb24gZ2VuZXJpYyBuZXRsaW5rIGF0dHJpYnV0ZXMsIHdoaWNoIG1pZ2h0IGJlIGxlc3MgZWZmZWN0aXZlLiBIbW0sIHdhaXQgYSBtaW51dGUsIHRoZSBwYXRjaCBhdXRob3IgaXMgYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLiBUaGlzICpkZWZpbml0ZWx5KiBtZWFucyBzeXprYWxsZXIgZWl0aGVyIGZvdW5kIGEgYnVnIHJlbGF0ZWQgdG8gYGV0c2AsIG9yIHRoaXMgaXMgYSBwYXRjaCBzeXprYWxsZXIgaXMgdGVzdGluZyBmb3IgYSBwb3RlbnRpYWwgYnVnLgoKTm93LCB0aGUgcHJvbXB0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgdGhpcyBpcyBhbHJlYWR5IGFwcGxpZWQgdG8gdGhlIEhFQUQgY29tbWl0LiBTbywgbXkgdGFzayBpcyB0byBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBrZXJuZWwgdGhhdCAqc2hvdWxkKiBiZSBmdXp6ZWQuIEFuZCB5ZXMsIGl0IGRvZXMhIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgRVRTIHFkaXNjIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSB0byB0aGUgc3RtbWFjIGRyaXZlci4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSWYgSSBjYW4gcHJvYmUgdGhlIGRyaXZlciB0aHJvdWdoIGEgZHVtbXkgUENJIGRldmljZSwgdGhlIGFuc3dlciBpcyB5ZXMuIE5vdywgYHN0bW1hY19wY2lfcHJvYmVgIHVzZXMgYHBjaW1fZW5hYmxlX2RldmljZShwZGV2KWAuIElmIHRoZSBkZXZpY2UgaXMgaW5qZWN0ZWQgdmlhIGB2aGNpYCwgaXQgKndpbGwqIGhhdmUgUENJIEJBUnMuIFRoZSBgcGNpbV9pb21hcF9yZWdpb25gIGZ1bmN0aW9uIHdpbGwgbWFwIHRoZSBCQVIuIFRoaXMgaW4gdHVybiBjYWxscyBgc3RtbWFjX2R2cl9wcm9iZWAsIHJpZ2h0PyBBbmQgdGhhdCBmdW5jdGlvbiwgeWVzLCBpdCBhbGxvY2F0ZXMgbWVtb3J5LCBtYXBzIHJlZ2lzdGVycywgdGhlIHdvcmtzLiBUaGUgY2F0Y2ggaXMgd2hhdCBoYXBwZW5zIGlmIHRoZSBCQVJzIGFyZW4mIzM5O3QgYmFja2VkIGJ5IHJlYWwgaGFyZHdhcmU/IFJlYWRzIG1pZ2h0IHJldHVybiBgMHhmZmZmZmZmZmAgb3IgYDBgLiBJZiBgcmVhZGxgIHJldHVybnMgemVybywgYHN0bW1hY19nZXRfdmVyc2lvbmAgc2V0cyBgc25wc3ZlciA9IDBgLCB0aGVuIHRoZSBkcml2ZXIgY2FsbHMgYHN0bW1hY19od2lmX2ZpbmRgIHdoZXJlIGBtaW5faWQgPSAwYC4gQWZ0ZXJ3YXJkcywgYHN0bW1hY19od19pbml0YCBpcyBjYWxsZWQsIGFuZCB0aGF0IGZ1bmN0aW9uIGNhbGxzIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSWYgdGhhdCByZXR1cm5zIDAsIGl0IHByb2NlZWRzISBJdCB0aGVuIHJlZ2lzdGVycyB0aGUgTURJTyBidXMgYW5kICpmaW5hbGx5KiB0aGUgbmV0ZGV2LiBTbywgdGhlIG5ldGRldiAqd2lsbCogYmUgcmVnaXN0ZXJlZCBldmVuIHdpdGggYSB2aXJ0dWFsIGRldmljZSEKClRoZXJlZm9yZSwgdGhpcyBkcml2ZXIgKmlzKiByZWFjaGFibGUgaW4gUUVNVSBpZiBhIGR1bW15IFBDSSBkZXZpY2Ugd2l0aCB0aGUgcmlnaHQgSUQgaXMgaW5qZWN0ZWQuIEFuZCBzeXprYWxsZXImIzM5O3MgYHZoY2lgIGNhbiBpbmplY3QgYSBQQ0kgZGV2aWNlIHdpdGggYFBDSV9WRU5ET1JfSURfU1lOT1BTWVNgIGFuZCBgUENJX0RFVklDRV9JRF9TWU5PUFNZU19HTUFDNV9JRGAgKDB4NzEwMikuIFBlcmZlY3QsIGl0IGlzIHJlYWNoYWJsZS4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IG9uZXMgdG8gZm9jdXMgb24/IFRoZSBwYXRjaCBhZGRzIHRoZXNlOiBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgLCBhbmQgYWxzbyBtb2RpZmllcyBgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRgLCBgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW9gIGFuZCBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYC4gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IGBzdG1tYWNfdGMuY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfc2V0dXBfZXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM9MTIxNj1zdGF0aWMgdm9pZCBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMjI2OnN0YXRpYyBpbnQgdGNfc2V0dXBfZXRzX3NjaGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyMjctXHRcdFx0ICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTI2OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjEyNjk6c3RhdGljIGludCB0Y19zZXR1cF9ldHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTI3MC1cdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMjczLVx0Y2FzZSBUQ19FVFNfUkVQTEFDRTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjEyNzQ6XHRcdHJldHVybiB0Y19zZXR1cF9ldHNfc2NoZWQocHJpdiwgcW9wdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMjc1LVx0Y2FzZSBUQ19FVFNfREVTVFJPWTpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYz0xNDAwPWNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNF90Y19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTQwNi1cdC5zZXR1cF9ldGYgPSB0Y19zZXR1cF9ldGYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxNDA3Olx0LnNldHVwX2V0cyA9IHRjX3NldHVwX2V0cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTE0MDgtXHQucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM9MTQxMj1jb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzUxMF90Y19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTQxOC1cdC5zZXR1cF9ldGYgPSB0Y19zZXR1cF9ldGYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxNDE5Olx0LnNldHVwX2V0cyA9IHRjX3NldHVwX2V0cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTE0MjAtXHQucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTk2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUcmFmZmljIENvbnRyb2wgKHRjKSBDb25maWd1cmF0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIHRoZXNlIHRyYWZmaWMgY29udHJvbCBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gdGhlIGtleSBwbGF5ZXJzIGhlcmUgc2VlbSB0byBiZSBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgLCBgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRgLCBgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW9gLCBhbmQgYHRjX3NldHVwX2R3bWFjNTEwX21xcHJpb2AuIEkgaW1tZWRpYXRlbHkgbm90aWNlIHRoYXQgYHRjX3NldHVwX2V0c2AgYW5kIGB0Y19zZXR1cF9ldHNfc2NoZWRgIGFyZSBzdGF0aWMuIFdhaXQuLi4gc2luY2UgYHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0YCBhbmQgYHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvYCBhcmUgZXhwb3J0ZWQsIG1lYW5pbmcgdGhleSYjMzk7cmUgbm90IHN0YXRpYywgSSByZWFsbHkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBhc3N1bXB0aW9uLiBUaW1lIHRvIGNvbmZpcm0gaWYgdGhlc2UgdHdvIGFyZSBpbmRlZWQgbm90IHN0YXRpYyBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MDE9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0bW1hY19zaW1wbGVfcG1fb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDAyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDAzOnZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQwNC12b2lkIHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0zNDAwPXN0YXRpYyB2b2lkIHN0bW1hY19zZXRfcmluZ3NfbGVuZ3RoKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTM0MTctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjM0MTg6ICogIHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0IC0gU2V0IFRYIHF1ZXVlIHdlaWdodFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zNDE5LSAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zNDIxLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzozNDIyOnZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zNDIzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTM1NjY9c3RhdGljIHZvaWQgc3RtbWFjX210bF9jb25maWd1cmF0aW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTM1NzEtXHRpZiAodHhfcXVldWVzX2NvdW50IFx1MDAzZSAxKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzozNTcyOlx0XHRzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzU3My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYz0xMjE2PXN0YXRpYyB2b2lkIHN0bW1hY19xZGlzY19yZXN0b3JlX2R0X2NvbmZpZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTIxOS1cdHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlID0gZmFsc2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMjIwOlx0c3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMjIxLVx0c3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8ocHJpdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODIxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBTdGF0aWMgYW5kIE5vbi1TdGF0aWMgRnVuY3Rpb24gRGVjbGFyYXRpb25zKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIHBvaW50IGlzIGFib3V0IGZ1bmN0aW9uIHNjb3BlIGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IHRoZXJlJiMzOTtzIGEgZGlzdGluY3Rpb24gaGVyZSwgYSBkaWZmZXJlbmNlIGluIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkLiBJIHNlZSB0aGF0IGB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9gIGlzLCBpbiBmYWN0LCBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSXQmIzM5O3Mgbm90IG1lYW50IHRvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIFRoZW4sIEkgcmVtZW1iZXIsIHRoYXQgYHN0bW1hY19zZXR1cF90Y2AsIHRoZSBzZXR1cCBmb3IgdHJhZmZpYyBjb250cm9sLCBpcyAqbm90KiBzdGF0aWMuIEl0cyBhIGdsb2JhbCBmdW5jdGlvbi4gU28sIHRoYXQmIzM5O3MgYSBkaWZmZXJlbnQgYXBwcm9hY2ggZW50aXJlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19zZXR1cF90YyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTYzODU9c3RhdGljIGludCBzdG1tYWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTYzOTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjYzOTU6c3RhdGljIGludCBzdG1tYWNfc2V0dXBfdGNfYmxvY2tfY2IoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjM5Ni1cdFx0XHRcdCAgICB2b2lkICpjYl9wcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NjQyMT1zdGF0aWMgTElTVF9IRUFEKHN0bW1hY19ibG9ja19jYl9saXN0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjQyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjQyMzpzdGF0aWMgaW50IHN0bW1hY19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY0MjQtXHRcdFx0ICAgdm9pZCAqdHlwZV9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjQzNS1cdFx0XHRcdFx0XHQgIFx1MDAyNnN0bW1hY19ibG9ja19jYl9saXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo2NDM2Olx0XHRcdFx0XHRcdCAgc3RtbWFjX3NldHVwX3RjX2Jsb2NrX2NiLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy02NDM3LVx0XHRcdFx0XHRcdCAgcHJpdiwgcHJpdiwgdHJ1ZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03MzEwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3RtbWFjX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MzIxLVx0Lm5kb19nZXRfc3RhdHM2NCA9IHN0bW1hY19nZXRfc3RhdHM2NCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzMyMjpcdC5uZG9fc2V0dXBfdGMgPSBzdG1tYWNfc2V0dXBfdGMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczMjMtXHQubmRvX3NlbGVjdF9xdWV1ZSA9IHN0bW1hY19zZWxlY3RfcXVldWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NzI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTVE1NQUMgVHJhZmZpYyBDb250cm9sIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHN0bW1hY19zZXR1cF90Y2AgaXMgZGVjbGFyZWQgYHN0YXRpY2AuIFNvIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdHJhZmZpYyBjb250cm9sIGluIHRoZSBTVE1NQUMgZHJpdmVyLiBJIHF1aWNrbHkgc2VlIHRoYXQgYHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0YCBhbmQgYHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvYCBhcmUgdGhlIG5vbi1zdGF0aWMgY2FuZGlkYXRlcy4KCldhaXQgYSBzZWNvbmQsIEkgcmVjYWxsIHRoYXQgYHRjX3NldHVwX2V0c2AgaXMgKmFsc28qIHN0YXRpYy4gVGhpcyBuZWVkcyBjbG9zZXIgc2NydXRpbnkuIEFyZSB0aGVyZSBhbnkgb3RoZXIgbmV3IGVudHJpZXM/IE5vLCBqdXN0IHRob3NlIHR3bywgYHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0YCBhbmQgYHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvYC4KCkFoLCBidXQgbm93IEkgcmVtZW1iZXIsIGBzdG1tYWNfdGNfb3BzYCBwcm92aWRlcyBhIGBzZXR1cF9ldHNgIGNhbGxiYWNrLiBHb3QgaXQuIFNvLCBldmVuIHRob3VnaCBzb21lIGFyZSBzdGF0aWMsIHRoZXkgYXJlICpzdGlsbCogdmlhYmxlLiBPa2F5LCBzbyBteSBsaXN0IGluY2x1ZGVzIGBzdG1tYWNfc2V0dXBfdGNgLCBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodGAsIGBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpb2AsIGFuZCBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYC4gSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgcHJvbXB0IGluZGljYXRlcyBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gSG93ZXZlciwgZXZlbiB0aGUgc3RhdGljIG9uZXMgYXJlIHZhbGlkIGlmIHRoZXkgYXJlIGRpc3RpbmN0LgoKQ29uc2lkZXJpbmcgdGhlIHByb21wdCYjMzk7cyBpbnN0cnVjdGlvbiB0byBwcmVmZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZSBjb21waWxlciB3b24mIzM5O3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5JiMzOTtsbCBoYXZlIHVuaXF1ZSBzeW1ib2wgYWRkcmVzc2VzLiBgc3RtbWFjX3NldHVwX3RjYCBhbmQgYHRjX3NldHVwX2V0c2AgYXJlIGNhbGxiYWNrcywgc28gdGhleSBhcmUgbm90IGlubGluZWQuCgpOb3csIGxldCBtZSBjb25maXJtIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSB0aGluayBgQ09ORklHX1NUTU1BQ19FVEhgIGFuZCBgQ09ORklHX1NUTU1BQ19QQ0lgIGFyZSByZWxldmFudCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19ORVRfU0NIX0VUU2AgaXMgYWxzbyBlbmFibGVkLCBhcyB0aGlzIGVuYWJsZXMgdGhlIEVUUyBxZGlzYywgYSBrZXkgY29tcG9uZW50IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIX0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTM2Mz1jb25maWcgTkVUX1NDSF9QTFVHXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzg4LVxubmV0L3NjaGVkL0tjb25maWc6Mzg5OmNvbmZpZyBORVRfU0NIX0VUU1xubmV0L3NjaGVkL0tjb25maWctMzkwLVx0dHJpc3RhdGUgXCYjMzQ7RW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2ODYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBTVE1NQUMgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIEkmIzM5O3ZlIGdvdCBpdC4gV2UgZGVmaW5pdGVseSBuZWVkIGBORVRfU0NIX0VUU2AgZW5hYmxlZC4gVGhhdCBtdWNoIGlzIGNsZWFyLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCB3YXJyYW50IGF0dGVudGlvbj8gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMsIGBDT05GSUdfU1RNTUFDX0VUSGAgaGluZ2VzIG9uIGEgZmV3IHRoaW5nczogYENPTkZJR19ORVRERVZJQ0VTYCwgYENPTkZJR19FVEhFUk5FVGAsIGBDT05GSUdfSEFTX0lPTUVNYCwgYW5kIGBDT05GSUdfSEFTX0RNQWAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEFuZCBgQ09ORklHX1NUTU1BQ19QQ0lgIGJ1aWxkcyBvbiBgQ09ORklHX1NUTU1BQ19FVEhgLCBuYXR1cmFsbHksIGJ1dCBhbHNvIHJlcXVpcmVzIGBDT05GSUdfUENJYC4gVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYCBmaWxlIGRpcmVjdGx5LiBUaGF0JiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGNvbmZpcm0gYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVE1NQUNfUENJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTU1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4gZW1iZWRkZWQgbmV0d29ya2luZyBhbmQgTGludXggZGV2aWNlIGRyaXZlcnM6CgoqKkFuYWx5emluZyB0aGUgU1RNTUFDIFBDSSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBoZWFydCBvZiB0aGUgU1RNTUFDIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBQQ0kgYXNwZWN0cy4gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvYCBkaXJlY3RvcnkuIFRoZSBmb2N1cywgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyBhcm91bmQgdGhlIGBTVE1NQUNfUENJYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaXMgY29uZmlndXJlZCB3aGVuIGl0JiMzOTtzIG9wZXJhdGluZyBvbiBhIFBDSSBpbnRlcmZhY2UuCgpJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yOgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBmZWF0dXJlcyBvciBkcml2ZXJzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYFNUTU1BQ19QQ0lgIHRvIGJlIGF2YWlsYWJsZT8KKiAgICoqRGVwZW5kZW5jaWVzIG9mIHRoZSBEZXZpY2U6KiogSG93IGlzIHRoZSBjb25maWd1cmF0aW9uIG9mIGBTVE1NQUNfUENJYCBkZXBlbmRhbnQgb24gb3RoZXIgZmVhdHVyZXMgb2YgdGhlIGRldmljZT8KKiAgICoqRGVmYXVsdCBTZXR0aW5nczoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIHNldHRpbmdzIHdoZW4gYSBTVE1NQUMgaXMgY29uZmlndXJlZCBvbiBhIFBDSSBkZXZpY2U/CiogICAqKkRvY3VtZW50YXRpb246KiogSXMgdGhlcmUgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB3aXRoaW4gdGhlIGBLY29uZmlnYCBmaWxlIHRoYXQgZXhwbGFpbnMgdGhlIHB1cnBvc2Ugb3IgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIHRoaXMgb3B0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc3RyYWludHMgYW5kIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBQQ0kgc3VwcG9ydCBmb3IgdGhlIFNUTU1BQy4KClRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBQQ0ktc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUENJIGJ1cy4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBob3cgZGlmZmVyZW50IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGRlcGVuZGluZyBvbiB3aGV0aGVyIGBTVE1NQUNfUENJYCBpcyBzZXQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdHJvdWJsZXNob290aW5nIFBDSS1yZWxhdGVkIGlzc3VlcyBhbmQgdGFpbG9yaW5nIHRoZSBkcml2ZXIgdG8gc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiA0MDE6XHRcdHNlbGVjdCBNT1RPUkNPTU1fUEhZXG4gNDAyOlx0XHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxuIDQwMzpcdFx0aGVscFxuIDQwNDpcdFx0ICBUaGlzIGVuYWJsZXMgZ2x1ZSBkcml2ZXIgZm9yIE1vdG9yY29tbSBEV01BQy1iYXNlZCBQQ0kgRXRoZXJuZXRcbiA0MDU6XHRcdCAgY29udHJvbGxlcnMuIEN1cnJlbnRseSBvbmx5IFlUNjgwMSBpcyBzdXBwb3J0ZWQuXG4gNDA2Olx0XG4gNDA3Olx0Y29uZmlnIFNUTU1BQ19QQ0lcbiA0MDg6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcJiMzNDtcbiA0MDk6XHRcdGRlcGVuZHMgb24gUENJXG4gNDEwOlx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiA0MTE6XHRcdHNlbGVjdCBTVE1NQUNfTElCUENJXG4gNDEyOlx0XHRoZWxwXG4gNDEzOlx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxuIDQxNDpcdFx0ICBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIG9uIFhMSU5YIFhDMlYzMDAwIEZGMTE1MkFNVDAyMjFcbiA0MTU6XHRcdCAgRDEyMTU5OTRBIFZJUlRFWCBGUEdBIGJvYXJkIGFuZCBTTlBTIFFvUyBJUEsgUHJvdG90eXBpbmcgS2l0LlxuIDQxNjpcdFxuIDQxNzpcdFx0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuIDQxODpcdFxuIDQxOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjkwMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGRlcGVuZGVuY2llcywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRlY29kaW5nIHRoZSBIYXJkd2FyZSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBjcnVjaWFsIGludGVyZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gaGluZ2VzLCBxdWl0ZSBmdW5kYW1lbnRhbGx5LCBvbiB0aGUgcHJlc2VuY2UgYW5kIHByb3BlciBjb25maWd1cmF0aW9uIG9mIGBQQ0lgIGFuZCBgQ09NTU9OX0NMS2AuIFRob3NlIGFyZSB0aGUgYmFzZWxpbmUgcmVxdWlyZW1lbnRzLiBBZnRlciB0aGF0LCBJIG5vdGljZSB0aGUgZGVwZW5kZW5jeSBvZiBgU1RNTUFDX0VUSGAgb24gYm90aCBgSEFTX0lPTUVNYCBhbmQgYEhBU19ETUFgLiBUaGlzIGluZGljYXRlcyB0aGUgbmVlZCBmb3IgbWVtb3J5LW1hcHBlZCBJL08gY2FwYWJpbGl0aWVzIGFuZCBkaXJlY3QgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBwZXJmZWN0bHkgbG9naWNhbCBnaXZlbiB3aGF0IEkga25vdyBhYm91dCBFdGhlcm5ldCBNQUNzLiBJdCYjMzk7cyBhbGwgYWJvdXQgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIHdpcmVkIHRvZ2V0aGVyLiBXaXRob3V0IHRoZXNlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcywgdGhpcyBzcGVjaWZpYyBFdGhlcm5ldCBjb250cm9sbGVyIGlzbiYjMzk7dCBnb2luZyB0byBmdW5jdGlvbiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGlzIGlzIGEgc3RhbmRhcmQgc2V0dXAsIGJ1dCBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgd2hlbiB0aGUgc3lzdGVtIHNldHVwIGlzIG1vcmUgY29tcGxleC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNUTU1BQ19FVEhcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbiAgIDU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgIDY6XHRcdGRlcGVuZHMgb24gRVRIVE9PTF9ORVRMSU5LXG4gICA3Olx0XHRzZWxlY3QgTUlJXG4gICA4Olx0XHRzZWxlY3QgUENTX1hQQ1NcbiAgIDk6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMTA6XHRcdHNlbGVjdCBQSFlMSU5LXG4gIDExOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTI6XHRcdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXG4gIDEzOlx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMTQ6XHRcdGhlbHBcbiAgMTU6XHRcdCAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgRXRoZXJuZXQgSVBzIGJ1aWx0IGFyb3VuZCBhXG4gIDE2Olx0XHQgIFN5bm9wc3lzIElQIENvcmUuXG4gIDE3Olx0XG4gIDE4Olx0aWYgU1RNTUFDX0VUSFxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBTVE1NQUNfU0VMRlRFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NDI3CgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDI2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU3RtbWFjIEVUUyBPZmZsb2FkIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGFuZCBgTkVUX1NDSF9FVFNgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGhlcmUuIFdlIG5lZWQgdG8gemVybyBpbiBvbiB0aG9zZS4KCk5vdywgZm9yIGEgcXVpY2sgc3VtbWFyeSBvZiB0aGUga2V5IGZpbmRpbmdzOiBUaGlzIHBhdGNoIHNlZW1zIGVtaW5lbnRseSBmdXp6YWJsZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB3b3J0aCB0aGUgdGltZSB0byBpbnZlc3RpZ2F0ZSAoYFdvcnRoRnV6emluZzogdHJ1ZWApLgoKVGhlIGVzc2VudGlhbCBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIGFyZTogYHRjX3NldHVwX2V0c2AsIGB0Y19zZXR1cF9ldHNfc2NoZWRgLCBgc3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnYCwgYHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0YCwgYHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvYCwgYHRjX3NldHVwX2R3bWFjNTEwX21xcHJpb2AsIGFuZCBgc3RtbWFjX3NldHVwX3RjYC4gVGhlc2UgYXJlIG15IGluaXRpYWwgYXJlYXMgb2YgaW50ZXJlc3QgYmFzZWQgb24gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuCgpUaGUgY29uZmlncyB0aGF0IGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgYXJlOiBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfUENJYCwgYW5kIGBORVRfU0NIX0VUU2AuCgpNeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuIFRoaXMgbWVhbnMgdGhlIGRyaXZlciBpcyBiZWluZyBtb2RpZmllZCB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZCwgc28gdGhlIGxpc3RlZCBmdW5jdGlvbnMgc2hvdWxkIGJlIGludGVyYWN0aW5nIHdpdGggdGhhdCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBXaGF0IG1ha2VzIHRoaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGFuZCBsaWtlbHkgZnV6emFibGUsIGlzIHRoYXQgdGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHRlc3RlZCBpbiBRRU1VIHVzaW5nIGEgZHVtbXkgUENJIGRldmljZSDigJMgc3l6a2FsbGVyJiMzOTtzIHZoY2ksIHdoaWNoIGlzIGhlbHBmdWwuIEFuZCB0aGUgRVRTIHFkaXNjIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIG5ldGxpbmssIHdoaWNoIG1lYW5zIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgY2FuIGJlIGZ1enplZC4gSXQgbG9va3MgbGlrZSBhIGdvb2QgdGFyZ2V0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1RNTUFDX0VUSCYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNfc2V0dXBfZXRzJiMzNDssCiAgICAmIzM0O3RjX3NldHVwX2V0c19zY2hlZCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcmIzM0OywKICAgICYjMzQ7c3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQmIzM0OywKICAgICYjMzQ7c3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8mIzM0OywKICAgICYjMzQ7dGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvJiMzNDssCiAgICAmIzM0O3N0bW1hY19zZXR1cF90YyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCB0byB0aGUgc3RtbWFjIGRyaXZlci4gSXQgbW9kaWZpZXMgdGhlIGRyaXZlciB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZC4gVGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBRRU1VIHZpYSBhIGR1bW15IFBDSSBkZXZpY2UgKHVzaW5nIHN5emthbGxlciYjMzk7cyB2aGNpKSwgYW5kIHRoZSBFVFMgcWRpc2MgY2FuIGJlIGNvbmZpZ3VyZWQgdmlhIG5ldGxpbmssIG1ha2luZyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1RNTUFDX0VUSCYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNfc2V0dXBfZXRzJiMzNDssCiAgICAmIzM0O3RjX3NldHVwX2V0c19zY2hlZCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcmIzM0OywKICAgICYjMzQ7c3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQmIzM0OywKICAgICYjMzQ7c3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8mIzM0OywKICAgICYjMzQ7dGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvJiMzNDssCiAgICAmIzM0O3N0bW1hY19zZXR1cF90YyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCB0byB0aGUgc3RtbWFjIGRyaXZlci4gSXQgbW9kaWZpZXMgdGhlIGRyaXZlciB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZC4gVGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBRRU1VIHZpYSBhIGR1bW15IFBDSSBkZXZpY2UgKHVzaW5nIHN5emthbGxlciYjMzk7cyB2aGNpKSwgYW5kIHRoZSBFVFMgcWRpc2MgY2FuIGJlIGNvbmZpZ3VyZWQgdmlhIG5ldGxpbmssIG1ha2luZyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU3OjQwLjAzMzI1NjQ2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMTc3NDgyODQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJORVRfU0NIX0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX3NldHVwX2V0c1wiLFxuICAgIFwidGNfc2V0dXBfZXRzX3NjaGVkXCIsXG4gICAgXCJzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdcIixcbiAgICBcInN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0XCIsXG4gICAgXCJzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpb1wiLFxuICAgIFwidGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvXCIsXG4gICAgXCJzdG1tYWNfc2V0dXBfdGNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCB0byB0aGUgc3RtbWFjIGRyaXZlci4gSXQgbW9kaWZpZXMgdGhlIGRyaXZlciB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZC4gVGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBRRU1VIHZpYSBhIGR1bW15IFBDSSBkZXZpY2UgKHVzaW5nIHN5emthbGxlcidzIHZoY2kpLCBhbmQgdGhlIEVUUyBxZGlzYyBjYW4gYmUgY29uZmlndXJlZCB2aWEgbmV0bGluaywgbWFraW5nIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIGZ1enphYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1Nzo0MC4wMzMyNjM3MjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDkxMDU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE1ZTBmOTViOWE4ZDg3ZDUwMzVmZjM3NDFjYWVjMzVlODkxNTg1Y2JcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAwOTo1NzozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcXG5pbmRleCAwNGRhZmVjMDIxYjRmLi5iNzA4ODNhNTNiMDlhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbkBAIC01ODAsNiArNTgwLDggQEAgc3RydWN0IHN0bW1hY190Y19vcHMge1xcbiBcXHRcXHRcXHQgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnFvcHQpO1xcbiBcXHRpbnQgKCpzZXR1cF9ldGYpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFx0XFx0XFx0IHN0cnVjdCB0Y19ldGZfcW9wdF9vZmZsb2FkICpxb3B0KTtcXG4rXFx0aW50ICgqc2V0dXBfZXRzKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdCk7XFxuIFxcdGludCAoKnF1ZXJ5X2NhcHMpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKTtcXG4gXFx0aW50ICgqc2V0dXBfbXFwcmlvKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuQEAgLTU5OCw2ICs2MDAsOCBAQCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyB7XFxuIFxcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBzZXR1cF90YXByaW8sIF9fYXJncylcXG4gI2RlZmluZSBzdG1tYWNfdGNfc2V0dXBfZXRmKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxcXFxuIFxcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBzZXR1cF9ldGYsIF9fYXJncylcXG4rI2RlZmluZSBzdG1tYWNfdGNfc2V0dXBfZXRzKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxcXFxuK1xcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBzZXR1cF9ldHMsIF9fYXJncylcXG4gI2RlZmluZSBzdG1tYWNfdGNfcXVlcnlfY2FwcyhfX3ByaXYsIF9fYXJncy4uLikgXFxcXFxcbiBcXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0YywgcXVlcnlfY2FwcywgX19hcmdzKVxcbiAjZGVmaW5lIHN0bW1hY190Y19zZXR1cF9tcXByaW8oX19wcml2LCBfX2FyZ3MuLi4pIFxcXFxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxcbmluZGV4IDhiYThmMDNlMWNlMDMuLjFiYjI2MWZkY2IwZTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxcbkBAIC0zMDEsNiArMzAxLDEyIEBAIHN0cnVjdCBzdG1tYWNfcHJpdiB7XFxuIFxcdC8qIFByb3RlY3QgZXN0IHBhcmFtZXRlcnMgKi9cXG4gXFx0c3RydWN0IG11dGV4IGVzdF9sb2NrO1xcbiBcXHRzdHJ1Y3Qgc3RtbWFjX2VzdCAqZXN0O1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHRib29sIGVuYWJsZTtcXG4rXFx0XFx0dTggYWxnbztcXG4rXFx0XFx0dTMyIHF1YW50YVtNVExfTUFYX1RYX1FVRVVFU107XFxuK1xcdFxcdHUzMiBwcmlvW01UTF9NQVhfVFhfUVVFVUVTXTtcXG4rXFx0fSBxZGlzYztcXG4gXFx0c3RydWN0IGRtYV9mZWF0dXJlcyBkbWFfY2FwO1xcbiBcXHRzdHJ1Y3Qgc3RtbWFjX2NvdW50ZXJzIG1tYztcXG4gXFx0aW50IGh3X2NhcF9zdXBwb3J0O1xcbkBAIC0zOTQsNiArNDAwLDggQEAgZW51bSBzdG1tYWNfc3RhdGUge1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0bW1hY19zaW1wbGVfcG1fb3BzO1xcbiBcXG4rdm9pZCBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbit2b2lkIHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XFxuIGludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4gaW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4gaW50IHN0bW1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICptaWkpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbmluZGV4IGM3MjlhYjEyN2FmZDUuLmMyNzg2ZWNjYTUzMDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcXG5AQCAtMzQxOSwxNCArMzQxOSwxOCBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfc2V0X3JpbmdzX2xlbmd0aChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXFxuICAqICBEZXNjcmlwdGlvbjogSXQgaXMgdXNlZCBmb3Igc2V0dGluZyBUWCBxdWV1ZXMgd2VpZ2h0XFxuICAqL1xcbi1zdGF0aWMgdm9pZCBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3ZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiB7XFxuIFxcdHU4IHR4X3F1ZXVlc19jb3VudCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2U7XFxuIFxcdHUzMiB3ZWlnaHQ7XFxuIFxcdHU4IHF1ZXVlO1xcbiBcXG4gXFx0Zm9yIChxdWV1ZSA9IDA7IHF1ZXVlIFxcdTAwM2MgdHhfcXVldWVzX2NvdW50OyBxdWV1ZSsrKSB7XFxuLVxcdFxcdHdlaWdodCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLndlaWdodDtcXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZXFkaXNjLmVuYWJsZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlcWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX0RXUlIpXFxuK1xcdFxcdFxcdHdlaWdodCA9IHByaXYtXFx1MDAzZXFkaXNjLnF1YW50YVtxdWV1ZV07XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0d2VpZ2h0ID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfcXVldWVzX2NmZ1txdWV1ZV0ud2VpZ2h0O1xcbiBcXHRcXHRzdG1tYWNfc2V0X210bF90eF9xdWV1ZV93ZWlnaHQocHJpdiwgcHJpdi1cXHUwMDNlaHcsIHdlaWdodCwgcXVldWUpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMzQ5OSwxNyArMzUwMywyMCBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ19yeF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXFxuICAqICBEZXNjcmlwdGlvbjogSXQgaXMgdXNlZCBmb3IgY29uZmlndXJpbmcgdGhlIFRYIFF1ZXVlIFByaW9yaXR5XFxuICAqL1xcbi1zdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3ZvaWQgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiB7XFxuIFxcdHU4IHR4X3F1ZXVlc19jb3VudCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2U7XFxuIFxcdHU4IHF1ZXVlO1xcbi1cXHR1MzIgcHJpbztcXG4gXFxuIFxcdGZvciAocXVldWUgPSAwOyBxdWV1ZSBcXHUwMDNjIHR4X3F1ZXVlc19jb3VudDsgcXVldWUrKykge1xcbi1cXHRcXHRpZiAoIXByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLnVzZV9wcmlvKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0dTMyIHByaW8gPSAwO1xcbitcXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZXFkaXNjLmVuYWJsZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlcWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX1NQKVxcbitcXHRcXHRcXHRwcmlvID0gcHJpdi1cXHUwMDNlcWRpc2MucHJpb1txdWV1ZV07XFxuK1xcdFxcdGVsc2UgaWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLnVzZV9wcmlvKVxcbitcXHRcXHRcXHRwcmlvID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfcXVldWVzX2NmZ1txdWV1ZV0ucHJpbztcXG4gXFxuLVxcdFxcdHByaW8gPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS5wcmlvO1xcbiBcXHRcXHRzdG1tYWNfdHhfcXVldWVfcHJpbyhwcml2LCBwcml2LVxcdTAwM2VodywgcHJpbywgcXVldWUpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMzU3MCw5ICszNTc3LDE1IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19tdGxfY29uZmlndXJhdGlvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X3NjaGVkX2FsZ29yaXRobSk7XFxuIFxcbiBcXHQvKiBDb25maWd1cmUgTVRMIFRYIGFsZ29yaXRobXMgKi9cXG4tXFx0aWYgKHR4X3F1ZXVlc19jb3VudCBcXHUwMDNlIDEpXFxuLVxcdFxcdHN0bW1hY19wcm9nX210bF90eF9hbGdvcml0aG1zKHByaXYsIHByaXYtXFx1MDAzZWh3LFxcbi1cXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9zY2hlZF9hbGdvcml0aG0pO1xcbitcXHRpZiAodHhfcXVldWVzX2NvdW50IFxcdTAwM2UgMSkge1xcbitcXHRcXHR1OCB0eF9zY2hlZF9hbGdvO1xcbitcXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZXFkaXNjLmVuYWJsZSlcXG4rXFx0XFx0XFx0dHhfc2NoZWRfYWxnbyA9IHByaXYtXFx1MDAzZXFkaXNjLmFsZ287XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0dHhfc2NoZWRfYWxnbyA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3NjaGVkX2FsZ29yaXRobTtcXG4rXFx0XFx0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cXHUwMDNlaHcsIHR4X3NjaGVkX2FsZ28pO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBDb25maWd1cmUgQ0JTIGluIEFWQiBUWCBxdWV1ZXMgKi9cXG4gXFx0aWYgKHR4X3F1ZXVlc19jb3VudCBcXHUwMDNlIDEpXFxuQEAgLTY0MjgsNiArNjQ0MSw4IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4gXFx0XFx0cmV0dXJuIHN0bW1hY190Y19zZXR1cF90YXByaW8ocHJpdiwgcHJpdiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19FVEY6XFxuIFxcdFxcdHJldHVybiBzdG1tYWNfdGNfc2V0dXBfZXRmKHByaXYsIHByaXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfRVRTOlxcbitcXHRcXHRyZXR1cm4gc3RtbWFjX3RjX3NldHVwX2V0cyhwcml2LCBwcml2LCB0eXBlX2RhdGEpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY1xcbmluZGV4IDE0Y2FiZTc2ZTUzZWMuLjNiYTcxYmUyNGM2NDggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY1xcbkBAIC0xMjEwLDYgKzEyMTAsODMgQEAgc3RhdGljIGludCB0Y19zZXR1cF9ldGYoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogTWF4IHF1YW50dW0gdmFsdWUgc3VwcG9ydGVkIGJ5IHRoZSBNVEwgRFdSUiBzY2hlZHVsZXIgKi9cXG4rI2RlZmluZSBNVExfVFhRX1dFSUdIVF9RVUFOVFVNX01BWFxcdDB4MTMxMmQwXFxuK1xcbitzdGF0aWMgdm9pZCBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbit7XFxuK1xcdC8qIHJlc2V0IHRvIHRoZSBkdCBjb25maWd1cmVkIGFsZ29yaXRobS4gKi9cXG4rXFx0cHJpdi1cXHUwMDNlcWRpc2MuZW5hYmxlID0gZmFsc2U7XFxuK1xcdHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0KHByaXYpO1xcbitcXHRzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhwcml2KTtcXG4rXFx0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cXHUwMDNlaHcsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3NjaGVkX2FsZ29yaXRobSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGNfc2V0dXBfZXRzX3NjaGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpXFxuK3tcXG4rXFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAgPSBcXHUwMDI2cW9wdC1cXHUwMDNlcmVwbGFjZV9wYXJhbXM7XFxuK1xcdHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGRhdGEgPSBwcml2LVxcdTAwM2VwbGF0O1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChxb3B0LVxcdTAwM2VwYXJlbnQgIT0gVENfSF9ST09UKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0aWYgKHAtXFx1MDAzZWJhbmRzIFxcdTAwM2UgcGRhdGEtXFx1MDAzZXR4X3F1ZXVlc190b191c2UpXFxuK1xcdFxcdGdvdG8gZXJyb3I7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGRhdGEtXFx1MDAzZXR4X3F1ZXVlc190b191c2U7IGkrKykge1xcbitcXHRcXHR1MzIgcXVhbnR1bSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGRhdGEtXFx1MDAzZXR4X3F1ZXVlc19jZmdbaV0ubW9kZV90b191c2UgPT0gTVRMX1FVRVVFX0FWQilcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdFxcdGlmIChpIFxcdTAwM2MgcC1cXHUwMDNlYmFuZHMpIHtcXG4rXFx0XFx0XFx0aWYgKCFwLVxcdTAwM2VxdWFudGFbaV0pXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuK1xcbitcXHRcXHRcXHRpZiAocC1cXHUwMDNlcXVhbnRhW2ldIFxcdTAwM2UgTVRMX1RYUV9XRUlHSFRfUVVBTlRVTV9NQVgpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuK1xcbitcXHRcXHRcXHRxdWFudHVtID0gcC1cXHUwMDNlcXVhbnRhW2ldO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwcml2LVxcdTAwM2VxZGlzYy5xdWFudGFbaV0gPSBxdWFudHVtO1xcbitcXHRcXHRzdG1tYWNfc2V0X210bF90eF9xdWV1ZV93ZWlnaHQocHJpdiwgcHJpdi1cXHUwMDNlaHcsIHF1YW50dW0sIGkpO1xcbitcXHR9XFxuK1xcbitcXHRzdG1tYWNfcHJvZ19tdGxfdHhfYWxnb3JpdGhtcyhwcml2LCBwcml2LVxcdTAwM2VodywgTVRMX1RYX0FMR09SSVRITV9EV1JSKTtcXG4rXFx0cHJpdi1cXHUwMDNlcWRpc2MuYWxnbyA9IE1UTF9UWF9BTEdPUklUSE1fRFdSUjtcXG4rXFx0cHJpdi1cXHUwMDNlcWRpc2MuZW5hYmxlID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitlcnJvcjpcXG4rXFx0c3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHByaXYpO1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGNfc2V0dXBfZXRzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpXFxuK3tcXG4rXFx0c3dpdGNoIChxb3B0LVxcdTAwM2Vjb21tYW5kKSB7XFxuK1xcdGNhc2UgVENfRVRTX1JFUExBQ0U6XFxuK1xcdFxcdHJldHVybiB0Y19zZXR1cF9ldHNfc2NoZWQocHJpdiwgcW9wdCk7XFxuK1xcdGNhc2UgVENfRVRTX0RFU1RST1k6XFxuK1xcdFxcdHN0bW1hY19xZGlzY19yZXN0b3JlX2R0X2NvbmZpZyhwcml2KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgVENfRVRTX1NUQVRTOlxcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlcWRpc2MuZW5hYmxlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBwcml2LVxcdTAwM2VxZGlzYy5hbGdvID09IE1UTF9UWF9BTEdPUklUSE1fRFdSUilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHRjX3F1ZXJ5X2NhcHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHQgc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSlcXG4ge1xcbkBAIC0xMjQ1LDE3ICsxMzIyLDE5IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19yZXNldF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcXG4gXFx0bmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlKTtcXG4gXFx0c3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBuZGV2LCBleHRhY2ssIDApO1xcbitcXHRzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcocHJpdik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuIHtcXG4gXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVxcdTAwM2VleHRhY2s7XFxuK1xcdHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGRhdGEgPSBwcml2LVxcdTAwM2VwbGF0O1xcbiBcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbiBcXHR1MzIgb2Zmc2V0LCBjb3VudCwgbnVtX3N0YWNrX3R4X3F1ZXVlcyA9IDA7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi1cXHUwMDNlZGV2O1xcbiBcXHR1MzIgbnVtX3RjID0gcW9wdC1cXHUwMDNlbnVtX3RjO1xcbi1cXHRpbnQgZXJyO1xcbitcXHRpbnQgaSwgdGMsIGVycjtcXG4gXFxuIFxcdGlmICghbnVtX3RjKSB7XFxuIFxcdFxcdHN0bW1hY19yZXNldF90Y19tcXByaW8obmRldiwgZXh0YWNrKTtcXG5AQCAtMTI4NSw2ICsxMzY0LDIzIEBAIHN0YXRpYyBpbnQgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfcmVzZXRfdGM7XFxuIFxcbitcXHQvKiBRdWV1ZXMgbm90IG1hcHBlZCB0byBhbnkgVEMgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHByaW9yaXR5ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZGF0YS1cXHUwMDNldHhfcXVldWVzX3RvX3VzZTsgaSsrKSB7XFxuK1xcdFxcdHByaXYtXFx1MDAzZXFkaXNjLnByaW9baV0gPSAwO1xcbitcXHRcXHRzdG1tYWNfdHhfcXVldWVfcHJpbyhwcml2LCBwcml2LVxcdTAwM2VodywgMCwgaSk7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIG51bV90YzsgdGMrKykge1xcbitcXHRcXHRmb3IgKGkgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIGkgXFx1MDAzYyBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdICsgcW9wdC1cXHUwMDNlY291bnRbdGNdOyBpKyspIHtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlcWRpc2MucHJpb1tpXSA9IHRjO1xcbitcXHRcXHRcXHRzdG1tYWNfdHhfcXVldWVfcHJpbyhwcml2LCBwcml2LVxcdTAwM2VodywgdGMsIGkpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cXHUwMDNlaHcsIE1UTF9UWF9BTEdPUklUSE1fU1ApO1xcbitcXHRwcml2LVxcdTAwM2VxZGlzYy5hbGdvID0gTVRMX1RYX0FMR09SSVRITV9TUDtcXG4rXFx0cHJpdi1cXHUwMDNlcWRpc2MuZW5hYmxlID0gdHJ1ZTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyX3Jlc2V0X3RjOlxcbkBAIC0xMzA4LDYgKzE0MDQsNyBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzID0ge1xcbiBcXHQuc2V0dXBfY2xzID0gdGNfc2V0dXBfY2xzLFxcbiBcXHQuc2V0dXBfdGFwcmlvID0gdGNfc2V0dXBfdGFwcmlvX3dpdGhvdXRfZnBlLFxcbiBcXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxcbitcXHQuc2V0dXBfZXRzID0gdGNfc2V0dXBfZXRzLFxcbiBcXHQucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsXFxuIFxcdC5zZXR1cF9tcXByaW8gPSB0Y19zZXR1cF9tcXByaW9fdW5pbXBsZW1lbnRlZCxcXG4gfTtcXG5AQCAtMTMxOSw2ICsxNDE2LDcgQEAgY29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzID0ge1xcbiBcXHQuc2V0dXBfY2xzID0gdGNfc2V0dXBfY2xzLFxcbiBcXHQuc2V0dXBfdGFwcmlvID0gdGNfc2V0dXBfdGFwcmlvLFxcbiBcXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxcbitcXHQuc2V0dXBfZXRzID0gdGNfc2V0dXBfZXRzLFxcbiBcXHQucXVlcnlfY2FwcyA9IHRjX3F1ZXJ5X2NhcHMsXFxuIFxcdC5zZXR1cF9tcXByaW8gPSB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8sXFxuIH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU3OjQwLjUzNDk0NjgwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMyMTI3MzEyODk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJORVRfU0NIX0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX3NldHVwX2V0c1wiLFxuICAgIFwidGNfc2V0dXBfZXRzX3NjaGVkXCIsXG4gICAgXCJzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdcIixcbiAgICBcInN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0XCIsXG4gICAgXCJzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpb1wiLFxuICAgIFwidGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvXCIsXG4gICAgXCJzdG1tYWNfc2V0dXBfdGNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCB0byB0aGUgc3RtbWFjIGRyaXZlci4gSXQgbW9kaWZpZXMgdGhlIGRyaXZlciB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZC4gVGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBRRU1VIHZpYSBhIGR1bW15IFBDSSBkZXZpY2UgKHVzaW5nIHN5emthbGxlcidzIHZoY2kpLCBhbmQgdGhlIEVUUyBxZGlzYyBjYW4gYmUgY29uZmlndXJlZCB2aWEgbmV0bGluaywgbWFraW5nIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIGZ1enphYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNWUwZjk1YjlhOGQ4N2Q1MDM1ZmYzNzQxY2FlYzM1ZTg5MTU4NWNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwOTo1NzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuaW5kZXggMDRkYWZlYzAyMWI0Zi4uYjcwODgzYTUzYjA5YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5AQCAtNTgwLDYgKzU4MCw4IEBAIHN0cnVjdCBzdG1tYWNfdGNfb3BzIHtcbiBcdFx0XHQgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnFvcHQpO1xuIFx0aW50ICgqc2V0dXBfZXRmKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0IHN0cnVjdCB0Y19ldGZfcW9wdF9vZmZsb2FkICpxb3B0KTtcbitcdGludCAoKnNldHVwX2V0cykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuK1x0XHRcdCBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdCk7XG4gXHRpbnQgKCpxdWVyeV9jYXBzKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0ICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKTtcbiBcdGludCAoKnNldHVwX21xcHJpbykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuQEAgLTU5OCw2ICs2MDAsOCBAQCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyB7XG4gXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCB0Yywgc2V0dXBfdGFwcmlvLCBfX2FyZ3MpXG4gI2RlZmluZSBzdG1tYWNfdGNfc2V0dXBfZXRmKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuIFx0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgdGMsIHNldHVwX2V0ZiwgX19hcmdzKVxuKyNkZWZpbmUgc3RtbWFjX3RjX3NldHVwX2V0cyhfX3ByaXYsIF9fYXJncy4uLikgXFxcbitcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIHRjLCBzZXR1cF9ldHMsIF9fYXJncylcbiAjZGVmaW5lIHN0bW1hY190Y19xdWVyeV9jYXBzKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuIFx0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgdGMsIHF1ZXJ5X2NhcHMsIF9fYXJncylcbiAjZGVmaW5lIHN0bW1hY190Y19zZXR1cF9tcXByaW8oX19wcml2LCBfX2FyZ3MuLi4pIFxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxuaW5kZXggOGJhOGYwM2UxY2UwMy4uMWJiMjYxZmRjYjBlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaFxuQEAgLTMwMSw2ICszMDEsMTIgQEAgc3RydWN0IHN0bW1hY19wcml2IHtcbiBcdC8qIFByb3RlY3QgZXN0IHBhcmFtZXRlcnMgKi9cbiBcdHN0cnVjdCBtdXRleCBlc3RfbG9jaztcbiBcdHN0cnVjdCBzdG1tYWNfZXN0ICplc3Q7XG4rXHRzdHJ1Y3Qge1xuK1x0XHRib29sIGVuYWJsZTtcbitcdFx0dTggYWxnbztcbitcdFx0dTMyIHF1YW50YVtNVExfTUFYX1RYX1FVRVVFU107XG4rXHRcdHUzMiBwcmlvW01UTF9NQVhfVFhfUVVFVUVTXTtcbitcdH0gcWRpc2M7XG4gXHRzdHJ1Y3QgZG1hX2ZlYXR1cmVzIGRtYV9jYXA7XG4gXHRzdHJ1Y3Qgc3RtbWFjX2NvdW50ZXJzIG1tYztcbiBcdGludCBod19jYXBfc3VwcG9ydDtcbkBAIC0zOTQsNiArNDAwLDggQEAgZW51bSBzdG1tYWNfc3RhdGUge1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzdG1tYWNfc2ltcGxlX3BtX29wcztcbiBcbit2b2lkIHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG4rdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuIGludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiBpbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIGludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqbWlpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuaW5kZXggYzcyOWFiMTI3YWZkNS4uYzI3ODZlY2NhNTMwMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbkBAIC0zNDE5LDE0ICszNDE5LDE4IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19zZXRfcmluZ3NfbGVuZ3RoKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiAgKiAgQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxuICAqICBEZXNjcmlwdGlvbjogSXQgaXMgdXNlZCBmb3Igc2V0dGluZyBUWCBxdWV1ZXMgd2VpZ2h0XG4gICovXG4tc3RhdGljIHZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuK3ZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbiBcdHU4IHR4X3F1ZXVlc19jb3VudCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlO1xuIFx0dTMyIHdlaWdodDtcbiBcdHU4IHF1ZXVlO1xuIFxuIFx0Zm9yIChxdWV1ZSA9IDA7IHF1ZXVlIFx1MDAzYyB0eF9xdWV1ZXNfY291bnQ7IHF1ZXVlKyspIHtcbi1cdFx0d2VpZ2h0ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLndlaWdodDtcbitcdFx0aWYgKHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcHJpdi1cdTAwM2VxZGlzYy5hbGdvID09IE1UTF9UWF9BTEdPUklUSE1fRFdSUilcbitcdFx0XHR3ZWlnaHQgPSBwcml2LVx1MDAzZXFkaXNjLnF1YW50YVtxdWV1ZV07XG4rXHRcdGVsc2VcbitcdFx0XHR3ZWlnaHQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1txdWV1ZV0ud2VpZ2h0O1xuIFx0XHRzdG1tYWNfc2V0X210bF90eF9xdWV1ZV93ZWlnaHQocHJpdiwgcHJpdi1cdTAwM2Vodywgd2VpZ2h0LCBxdWV1ZSk7XG4gXHR9XG4gfVxuQEAgLTM0OTksMTcgKzM1MDMsMjAgQEAgc3RhdGljIHZvaWQgc3RtbWFjX21hY19jb25maWdfcnhfcXVldWVzX3ByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4gICogIERlc2NyaXB0aW9uOiBJdCBpcyB1c2VkIGZvciBjb25maWd1cmluZyB0aGUgVFggUXVldWUgUHJpb3JpdHlcbiAgKi9cbi1zdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4rdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuIFx0dTggdHhfcXVldWVzX2NvdW50ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2U7XG4gXHR1OCBxdWV1ZTtcbi1cdHUzMiBwcmlvO1xuIFxuIFx0Zm9yIChxdWV1ZSA9IDA7IHF1ZXVlIFx1MDAzYyB0eF9xdWV1ZXNfY291bnQ7IHF1ZXVlKyspIHtcbi1cdFx0aWYgKCFwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1txdWV1ZV0udXNlX3ByaW8pXG4tXHRcdFx0Y29udGludWU7XG4rXHRcdHUzMiBwcmlvID0gMDtcbitcbitcdFx0aWYgKHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcHJpdi1cdTAwM2VxZGlzYy5hbGdvID09IE1UTF9UWF9BTEdPUklUSE1fU1ApXG4rXHRcdFx0cHJpbyA9IHByaXYtXHUwMDNlcWRpc2MucHJpb1txdWV1ZV07XG4rXHRcdGVsc2UgaWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfY2ZnW3F1ZXVlXS51c2VfcHJpbylcbitcdFx0XHRwcmlvID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc19jZmdbcXVldWVdLnByaW87XG4gXG4tXHRcdHByaW8gPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1txdWV1ZV0ucHJpbztcbiBcdFx0c3RtbWFjX3R4X3F1ZXVlX3ByaW8ocHJpdiwgcHJpdi1cdTAwM2VodywgcHJpbywgcXVldWUpO1xuIFx0fVxuIH1cbkBAIC0zNTcwLDkgKzM1NzcsMTUgQEAgc3RhdGljIHZvaWQgc3RtbWFjX210bF9jb25maWd1cmF0aW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdFx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9zY2hlZF9hbGdvcml0aG0pO1xuIFxuIFx0LyogQ29uZmlndXJlIE1UTCBUWCBhbGdvcml0aG1zICovXG4tXHRpZiAodHhfcXVldWVzX2NvdW50IFx1MDAzZSAxKVxuLVx0XHRzdG1tYWNfcHJvZ19tdGxfdHhfYWxnb3JpdGhtcyhwcml2LCBwcml2LVx1MDAzZWh3LFxuLVx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3NjaGVkX2FsZ29yaXRobSk7XG4rXHRpZiAodHhfcXVldWVzX2NvdW50IFx1MDAzZSAxKSB7XG4rXHRcdHU4IHR4X3NjaGVkX2FsZ287XG4rXG4rXHRcdGlmIChwcml2LVx1MDAzZXFkaXNjLmVuYWJsZSlcbitcdFx0XHR0eF9zY2hlZF9hbGdvID0gcHJpdi1cdTAwM2VxZGlzYy5hbGdvO1xuK1x0XHRlbHNlXG4rXHRcdFx0dHhfc2NoZWRfYWxnbyA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9zY2hlZF9hbGdvcml0aG07XG4rXHRcdHN0bW1hY19wcm9nX210bF90eF9hbGdvcml0aG1zKHByaXYsIHByaXYtXHUwMDNlaHcsIHR4X3NjaGVkX2FsZ28pO1xuK1x0fVxuIFxuIFx0LyogQ29uZmlndXJlIENCUyBpbiBBVkIgVFggcXVldWVzICovXG4gXHRpZiAodHhfcXVldWVzX2NvdW50IFx1MDAzZSAxKVxuQEAgLTY0MjgsNiArNjQ0MSw4IEBAIHN0YXRpYyBpbnQgc3RtbWFjX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0cmV0dXJuIHN0bW1hY190Y19zZXR1cF90YXByaW8ocHJpdiwgcHJpdiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfRVRGOlxuIFx0XHRyZXR1cm4gc3RtbWFjX3RjX3NldHVwX2V0Zihwcml2LCBwcml2LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19FVFM6XG4rXHRcdHJldHVybiBzdG1tYWNfdGNfc2V0dXBfZXRzKHByaXYsIHByaXYsIHR5cGVfZGF0YSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY1xuaW5kZXggMTRjYWJlNzZlNTNlYy4uM2JhNzFiZTI0YzY0OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY1xuQEAgLTEyMTAsNiArMTIxMCw4MyBAQCBzdGF0aWMgaW50IHRjX3NldHVwX2V0ZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogTWF4IHF1YW50dW0gdmFsdWUgc3VwcG9ydGVkIGJ5IHRoZSBNVEwgRFdSUiBzY2hlZHVsZXIgKi9cbisjZGVmaW5lIE1UTF9UWFFfV0VJR0hUX1FVQU5UVU1fTUFYXHQweDEzMTJkMFxuK1xuK3N0YXRpYyB2b2lkIHN0bW1hY19xZGlzY19yZXN0b3JlX2R0X2NvbmZpZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4re1xuK1x0LyogcmVzZXQgdG8gdGhlIGR0IGNvbmZpZ3VyZWQgYWxnb3JpdGhtLiAqL1xuK1x0cHJpdi1cdTAwM2VxZGlzYy5lbmFibGUgPSBmYWxzZTtcbitcdHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0KHByaXYpO1xuK1x0c3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW8ocHJpdik7XG4rXHRzdG1tYWNfcHJvZ19tdGxfdHhfYWxnb3JpdGhtcyhwcml2LCBwcml2LVx1MDAzZWh3LFxuK1x0XHRcdFx0ICAgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3NjaGVkX2FsZ29yaXRobSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGNfc2V0dXBfZXRzX3NjaGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbit7XG4rXHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCA9IFx1MDAyNnFvcHQtXHUwMDNlcmVwbGFjZV9wYXJhbXM7XG4rXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBkYXRhID0gcHJpdi1cdTAwM2VwbGF0O1xuK1x0aW50IGk7XG4rXG4rXHRpZiAocW9wdC1cdTAwM2VwYXJlbnQgIT0gVENfSF9ST09UKVxuK1x0XHRnb3RvIGVycm9yO1xuK1xuK1x0aWYgKHAtXHUwMDNlYmFuZHMgXHUwMDNlIHBkYXRhLVx1MDAzZXR4X3F1ZXVlc190b191c2UpXG4rXHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZGF0YS1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlOyBpKyspIHtcbitcdFx0dTMyIHF1YW50dW0gPSAwO1xuK1xuK1x0XHRpZiAocGRhdGEtXHUwMDNldHhfcXVldWVzX2NmZ1tpXS5tb2RlX3RvX3VzZSA9PSBNVExfUVVFVUVfQVZCKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdGlmIChpIFx1MDAzYyBwLVx1MDAzZWJhbmRzKSB7XG4rXHRcdFx0aWYgKCFwLVx1MDAzZXF1YW50YVtpXSlcbitcdFx0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdFx0aWYgKHAtXHUwMDNlcXVhbnRhW2ldIFx1MDAzZSBNVExfVFhRX1dFSUdIVF9RVUFOVFVNX01BWClcbitcdFx0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdFx0cXVhbnR1bSA9IHAtXHUwMDNlcXVhbnRhW2ldO1xuK1x0XHR9XG4rXG4rXHRcdHByaXYtXHUwMDNlcWRpc2MucXVhbnRhW2ldID0gcXVhbnR1bTtcbitcdFx0c3RtbWFjX3NldF9tdGxfdHhfcXVldWVfd2VpZ2h0KHByaXYsIHByaXYtXHUwMDNlaHcsIHF1YW50dW0sIGkpO1xuK1x0fVxuK1xuK1x0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cdTAwM2VodywgTVRMX1RYX0FMR09SSVRITV9EV1JSKTtcbitcdHByaXYtXHUwMDNlcWRpc2MuYWxnbyA9IE1UTF9UWF9BTEdPUklUSE1fRFdSUjtcbitcdHByaXYtXHUwMDNlcWRpc2MuZW5hYmxlID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK2Vycm9yOlxuK1x0c3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHByaXYpO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IHRjX3NldHVwX2V0cyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4rXHRcdFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpXG4re1xuK1x0c3dpdGNoIChxb3B0LVx1MDAzZWNvbW1hbmQpIHtcbitcdGNhc2UgVENfRVRTX1JFUExBQ0U6XG4rXHRcdHJldHVybiB0Y19zZXR1cF9ldHNfc2NoZWQocHJpdiwgcW9wdCk7XG4rXHRjYXNlIFRDX0VUU19ERVNUUk9ZOlxuK1x0XHRzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWcocHJpdik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBUQ19FVFNfU1RBVFM6XG4rXHRcdGlmIChwcml2LVx1MDAzZXFkaXNjLmVuYWJsZSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHByaXYtXHUwMDNlcWRpc2MuYWxnbyA9PSBNVExfVFhfQUxHT1JJVEhNX0RXUlIpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdGNfcXVlcnlfY2FwcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0IHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UpXG4ge1xuQEAgLTEyNDUsMTcgKzEzMjIsMTkgQEAgc3RhdGljIHZvaWQgc3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcbiBcdG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobmRldiwgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2UpO1xuIFx0c3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBuZGV2LCBleHRhY2ssIDApO1xuK1x0c3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHByaXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHRjX3NldHVwX2R3bWFjNTEwX21xcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiB7XG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXHUwMDNlZXh0YWNrO1xuK1x0c3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwZGF0YSA9IHByaXYtXHUwMDNlcGxhdDtcbiBcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuIFx0dTMyIG9mZnNldCwgY291bnQsIG51bV9zdGFja190eF9xdWV1ZXMgPSAwO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwcml2LVx1MDAzZWRldjtcbiBcdHUzMiBudW1fdGMgPSBxb3B0LVx1MDAzZW51bV90Yztcbi1cdGludCBlcnI7XG4rXHRpbnQgaSwgdGMsIGVycjtcbiBcbiBcdGlmICghbnVtX3RjKSB7XG4gXHRcdHN0bW1hY19yZXNldF90Y19tcXByaW8obmRldiwgZXh0YWNrKTtcbkBAIC0xMjg1LDYgKzEzNjQsMjMgQEAgc3RhdGljIGludCB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfcmVzZXRfdGM7XG4gXG4rXHQvKiBRdWV1ZXMgbm90IG1hcHBlZCB0byBhbnkgVEMgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHByaW9yaXR5ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZGF0YS1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlOyBpKyspIHtcbitcdFx0cHJpdi1cdTAwM2VxZGlzYy5wcmlvW2ldID0gMDtcbitcdFx0c3RtbWFjX3R4X3F1ZXVlX3ByaW8ocHJpdiwgcHJpdi1cdTAwM2VodywgMCwgaSk7XG4rXHR9XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIG51bV90YzsgdGMrKykge1xuK1x0XHRmb3IgKGkgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdCAgICAgaSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcW9wdC1cdTAwM2Vjb3VudFt0Y107IGkrKykge1xuK1x0XHRcdHByaXYtXHUwMDNlcWRpc2MucHJpb1tpXSA9IHRjO1xuK1x0XHRcdHN0bW1hY190eF9xdWV1ZV9wcmlvKHByaXYsIHByaXYtXHUwMDNlaHcsIHRjLCBpKTtcbitcdFx0fVxuK1x0fVxuK1x0c3RtbWFjX3Byb2dfbXRsX3R4X2FsZ29yaXRobXMocHJpdiwgcHJpdi1cdTAwM2VodywgTVRMX1RYX0FMR09SSVRITV9TUCk7XG4rXHRwcml2LVx1MDAzZXFkaXNjLmFsZ28gPSBNVExfVFhfQUxHT1JJVEhNX1NQO1xuK1x0cHJpdi1cdTAwM2VxZGlzYy5lbmFibGUgPSB0cnVlO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3Jlc2V0X3RjOlxuQEAgLTEzMDgsNiArMTQwNCw3IEBAIGNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNF90Y19vcHMgPSB7XG4gXHQuc2V0dXBfY2xzID0gdGNfc2V0dXBfY2xzLFxuIFx0LnNldHVwX3RhcHJpbyA9IHRjX3NldHVwX3RhcHJpb193aXRob3V0X2ZwZSxcbiBcdC5zZXR1cF9ldGYgPSB0Y19zZXR1cF9ldGYsXG4rXHQuc2V0dXBfZXRzID0gdGNfc2V0dXBfZXRzLFxuIFx0LnF1ZXJ5X2NhcHMgPSB0Y19xdWVyeV9jYXBzLFxuIFx0LnNldHVwX21xcHJpbyA9IHRjX3NldHVwX21xcHJpb191bmltcGxlbWVudGVkLFxuIH07XG5AQCAtMTMxOSw2ICsxNDE2LDcgQEAgY29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzID0ge1xuIFx0LnNldHVwX2NscyA9IHRjX3NldHVwX2NscyxcbiBcdC5zZXR1cF90YXByaW8gPSB0Y19zZXR1cF90YXByaW8sXG4gXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxuK1x0LnNldHVwX2V0cyA9IHRjX3NldHVwX2V0cyxcbiBcdC5xdWVyeV9jYXBzID0gdGNfcXVlcnlfY2FwcyxcbiBcdC5zZXR1cF9tcXByaW8gPSB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8sXG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU3OjQwLjUzNDk0ODM1MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNzcwODE2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU1RNTUFDIEVUUyBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgYWRkaW5nIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCBjYXBhYmlsaXRpZXMgdG8gdGhlIFNUTU1BQyBkcml2ZXIuIFNlZW1zIGxpa2UgdGhleSd2ZSBob29rZWQgaW50byBgc3RtbWFjX3RjX29wc2AgdG8gaW5jbHVkZSBgc2V0dXBfZXRzYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoZXkndmUgYWxzbyBpbXBsZW1lbnRlZCBgdGNfc2V0dXBfZXRzYCBhbmQgYHRjX3NldHVwX2V0c19zY2hlZGAgd2l0aGluIGBzdG1tYWNfdGMuY2AuIEdvb2QsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRob3NlIGZ1bmN0aW9ucyB0byBiZS4gSXQncyBhbHNvIGNvbmZpZ3VyaW5nIHRoZSBTdHJpY3QgUHJpb3JpdHkgKFNQKSBhbGdvcml0aG0gd2hlbiBgbXFwcmlvYCBpcyBpbiB1c2UsIG1vZGlmeWluZyBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYCBhY2NvcmRpbmdseS4gU21hcnQuIEFuZCB0aGV5J3ZlIGFkZGVkIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgIOKAkyBuZWNlc3NhcnkgZm9yIHBlcnNpc3RlbnQgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMsIEkgcHJlc3VtZS4gQWxsIHByZXR0eSBzdGFuZGFyZCBzdHVmZiwgcmVhbGx5LlxuXG5Ob3csIGEgY3JpdGljYWwgbmV4dCBzdGVwLiBDYW4gd2UgZXZlbiB0ZXN0IHRoaXMgZWZmZWN0aXZlbHk/IFNUTU1BQywgdGhhdCdzIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIE1BQyBkcml2ZXIuIEl04oCZcyBwcmV2YWxlbnQgaW4gYSB0b24gb2YgU29Dcy4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSBnZXQgaXQgdG8gcmVsaWFibHkgYmVoYXZlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJcyBpdCBRRU1VLWZyaWVuZGx5PyBJIG1lYW4sIGl0J3MgYSAqcGh5c2ljYWwqIEV0aGVybmV0IGRyaXZlciwgYnV0IHRoZXJlIG1pZ2h0IGJlIFBDSSB2YXJpYW50cyBvciBwbGF0Zm9ybS1zcGVjaWZpYyB2YXJpYXRpb25zIHRoYXQgY291bGQgY29tcGxpY2F0ZSB0aGluZ3MuIExldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhhdCBgS2NvbmZpZ2AgZmlsZSB1bmRlciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAxNywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU3OjQ2LjcxMjAzMzYwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY1NTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RNTUFDX0VUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTc6NDYuNzU5Njk0OTEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5NDk2MzM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlIG9mIFBvc3NpYmlsaXRpZXMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGdlYXJlZCB0b3dhcmRzIGVmZmljaWVudCBwcm9ibGVtLXNvbHZpbmcuIFdoZW4gY29uZnJvbnRlZCB3aXRoIGEgc2l0dWF0aW9uLCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbWFwIG91dCB0aGUgcG90ZW50aWFsIGF2ZW51ZXMgdG8gZXhwbG9yZS4gSW4gdGhpcyBjYXNlLCBJJ20gdGhpbmtpbmcgYWJvdXQgYSBcIlBDSSB2YXJpYW50LlwiIFRoYXQgc3VnZ2VzdHMgSSdtIGRlYWxpbmcgd2l0aCBhIGNvbmNlcHQgb3Igc3lzdGVtIHRoYXQgaGFzIGEgY29yZSBjb21wb25lbnQga25vd24gYXMgUENJIChsaWtlbHkgcmVmZXJyaW5nIHRvIHRoZSBQYXltZW50IENhcmQgSW5kdXN0cnkgRGF0YSBTZWN1cml0eSBTdGFuZGFyZCwgb3IgYSByZWxhdGVkIHRlY2hub2xvZ3kgcHJvdG9jb2wpLCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIGlmIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbnMgb3IgY29uZmlndXJhdGlvbnMgZXhpc3QuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA6IHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0uIEFtIEkgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBzdHJhaWdodGZvcndhcmQgUENJIGNvbXBsaWFudCwgb3IgaXMgdGhlcmUgYWRkZWQgY29tcGxleGl0eSwgc2NvcGUgb3IgYSBub3ZlbCBzaXR1YXRpb24gd2l0aCB2YXJpYXRpb25zIHRvIGNvbnNpZGVyPyBJdCBpcyBhbiBpbXBvcnRhbnQgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MjksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1Nzo1MC4zNTQ2NjI2MDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4NzgzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNUTU1BQ19QQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA4LVxcdHRyaXN0YXRlIFxcXCJTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1Nzo1MC40MDQ1NDc3MTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTAzMTU0NDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgU1RNTUFDIFBDSSBFbXVsYXRpb24gaW4gUUVNVSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBTVE1NQUNfUENJLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGRvZXMgUUVNVSBldmVuIGVtdWxhdGUgdGhpcz8gSSdtIHByZXR0eSBzdXJlIHN0YW5kYXJkIFFFTVUgZG9lc24ndCBvZmZlciBuYXRpdmUgU1RNTUFDIFBDSSBlbXVsYXRpb24uIEkgbmVlZCB0byBiZSBzdXJlLiBMZXQgbWUgc2VlLi4uIEkgcmVjYWxsIFFFTVUgaGF2aW5nIGltcGxlbWVudGF0aW9ucyBmb3Igc2V2ZXJhbCBvdGhlciBuZXR3b3JrIGRldmljZXMsIGxpa2UgYGlnYi5jYCwgYGUxMDAwZS5jYCwgYHJ0bDgxMzkuY2AsIGBwY25ldC5jYCwgdGhlIGxpc3QgZ29lcyBvbi4gQnV0LCBJIGRvbid0IHJlY2FsbCBzZWVpbmcgYSBjb3JyZXNwb25kaW5nIGBzdG1tYWMuY2AuIERvZXMgaXQgZW11bGF0ZSB0aGUgc3RtbWFjP1xuXG5BbHJpZ2h0LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYSBiaXQuIFN5emthbGxlciBoYXMgYmVlbiBhIGdvb2Qgc291cmNlIG9mIGluZm9ybWF0aW9uIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcsIHNvIHBlcmhhcHMgaXQgaGFzIHNvbWUgZGV2aWNlIGRlc2NyaXB0aW9ucywgYW5kIHRoYXQgbWlnaHQgaW5jbHVkZSBTVE1NQUMuIEkgc2hvdWxkIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMDEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTc6NTUuOTA3NzA0NTA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTE3NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTMtICogQ29weXJpZ2h0IChjKSAyMDE5IFN5bm9wc3lzLCBJbmMuIGFuZC9vciBpdHMgYWZmaWxpYXRlcy5cXG5uZXQvY29yZS9zZWxmdGVzdHMuYzo0OiAqIHN0bW1hYyBTZWxmdGVzdHMgU3VwcG9ydFxcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTUtICpcXG4tLVxcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTctICpcXG5uZXQvY29yZS9zZWxmdGVzdHMuYzo4OiAqIFBvcnRlZCBmcm9tIHN0bW1hYyBieTpcXG5uZXQvY29yZS9zZWxmdGVzdHMuYy05LSAqIENvcHlyaWdodCAoQykgMjAyMSBPbGVrc2lqIFJlbXBlbCBcXHUwMDNjby5yZW1wZWxAcGVuZ3V0cm9uaXguZGVcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU3OjU1Ljk4NDIyNjgzMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjM3MTMzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeXprYWxsZXIgUG90ZW50aWFsIGZvciBUZXN0aW5nIHN0bW1hYyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJXYWl0LCBpcyB0aGVyZSBhbnkgd2F5IHRvIHRlc3QgYHN0bW1hY2Agd2l0aCBzeXprYWxsZXIgKndpdGhvdXQqIGRpcmVjdCBgc3RtbWFjYCBkZXNjcmlwdGlvbnM/XCIgSG1tLi4uIG1heWJlIG5ldGxpbmssIHNwZWNpZmljYWxseSBgdGMgcWRpc2NgPyBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgYWRkaW5nIGBUQ19TRVRVUF9RRElTQ19FVFNgIGhhbmRsaW5nIHdpdGhpbiBgc3RtbWFjX3NldHVwX3RjYC4gUmlnaHQsIGFuZCBgc3RtbWFjX3NldHVwX3RjYCBnZXRzIGNhbGxlZCB0aHJvdWdoIGBuZG9fc2V0dXBfdGNgLiBUaGUgdHJpY2t5IHBhcnQgaXMgdGhhdCBpZiB0aGUgZHJpdmVyIGlzbid0IGxvYWRlZCwgYG5kb19zZXR1cF90Y2Agd29uJ3QgZXZlbiBiZSBpbnZva2VkLlxuXG5TbywgdGhlIG5leHQgcXVlc3Rpb24gaXMsIGNhbiBJIGdldCB0aGUgZHJpdmVyIGxvYWRlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2Ugc3l6a2FsbGVyIHVzZXM/IEkgYmV0IHRoZXJlIGFyZSBwbGF0Zm9ybSBkZXZpY2VzIEkgY291bGQgdXNlIHRvIG15IGFkdmFudGFnZSDigJMgZHVtbXkgZGV2aWNlcyBvciB0aG9zZSBjcmVhdGVkIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLCBwYXJ0aWN1bGFybHkgaW4gY2VydGFpbiBRRU1VIGNvbmZpZ3VyYXRpb25zLiBCdXQgc3l6a2FsbGVyIHByZWRvbWluYW50bHkgcnVucyBvbiB4ODZfNjQsIG9yIHNvbWV0aW1lcyBhcm02NCwgc28gaXQgbmVlZHMgdG8gYmUgcG9zc2libGUgb24gdGhlc2UgcGxhdGZvcm1zLlxuXG5JZiBpdCdzIHg4Nl82NCwgd2hpY2ggaXMgbGlrZWx5LCB0aGVuIEkgc2hvdWxkIGludmVzdGlnYXRlIGlmIGEgUENJIGRldmljZSBjb3VsZCBiZSBwcm9iZWQuIExldCBtZSBjaGVjayB0aGUgY29kZSBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jYC4gSG9wZWZ1bGx5LCBJIGNhbiBmaW5kIHNvbWV0aGluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyNSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1ODowMS40NDc5NDM5NjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODQwMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kZXZpY2VfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMTg9c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMTk6XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjAyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDM6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0bW1hY19pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDQtXFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNTUFDLCBTVE1NQUMsIFxcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjAxLjQ5NjgxNDU3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTU1NjQxOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgc3RtbWFjX2lkX3RhYmxlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIFBDSSBJRHMgd2l0aGluIHRoZSBgc3RtbWFjX2lkX3RhYmxlYC5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBzcGVjaWZpYyBoYXJkd2FyZSBpZGVudGlmaWVycyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBgc3RtbWFjYCBkcml2ZXIuIEtub3dpbmcgdGhlIHZlbmRvciBhbmQgZGV2aWNlIElEcyBtYXBwZWQgdG8gdGhlIGRyaXZlciBpcyBmdW5kYW1lbnRhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaGFyZHdhcmUgY29tcGF0aWJpbGl0eS4gSSB3YW50IHRvIHF1aWNrbHkgY29ycmVsYXRlIHRoZSBkZXZpY2UncyBQQ0kgSUQgdG8gdGhpcyBsaXN0IGluIG15IG1lbW9yeS4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIHN0cnVjdHVyZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgc3VwcG9ydGVkIGNoaXBzZXRzLiBUaGVuLCBJIHdpbGwgc3RhcnQgdG8gaW5mZXIgdGhlIGltcGxpZWQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGJ5IHRoZSBpZGVudGlmaWVkIGNoaXBzZXRzLiBJdCdzIGEgcXVpY2sgYW5kIGVzc2VudGlhbCBzdGVwIGZvciBpbml0aWFsIGFzc2Vzc21lbnQsIGRlYnVnZ2luZywgb3IgZXZlbiBqdXN0IGNvbmZpcm1pbmcgZHJpdmVyIHN1cHBvcnQgZm9yIGEgZ2l2ZW4gbmV0d29yayBpbnRlcmZhY2UgY2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4NiwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjEwLjA1MjQ2NDYzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9TVE1NQUNfU1RNTUFDXFx0XFx0MHgxMTA4XFxuIDIwMTpcXHQjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lOT1BTWVNfR01BQzVfSURcXHRcXHQweDcxMDJcXG4gMjAyOlxcdFxcbiAyMDM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0bW1hY19pZF90YWJsZVtdID0ge1xcbiAyMDQ6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNTUFDLCBTVE1NQUMsIFxcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXFxuIDIwNTpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1JQ1JPLCBNQUMsIFxcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXFxuIDIwNjpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShTWU5PUFNZUywgR01BQzVfSUQsIFxcdTAwMjZzbnBzX2dtYWM1X3BjaV9pbmZvKSB9LFxcbiAyMDc6XFx0XFx0e31cXG4gMjA4OlxcdH07XFxuIDIwOTpcXHRcXG4gMjEwOlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xcbiAyMTE6XFx0XFxuIDIxMjpcXHRzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3RtbWFjX3BjaV9kcml2ZXIgPSB7XFxuIDIxMzpcXHRcXHQubmFtZSA9IFNUTU1BQ19SRVNPVVJDRV9OQU1FLFxcbiAyMTQ6XFx0XFx0LmlkX3RhYmxlID0gc3RtbWFjX2lkX3RhYmxlLFxcbiAyMTU6XFx0XFx0LnByb2JlID0gc3RtbWFjX3BjaV9wcm9iZSxcXG4gMjE2OlxcdFxcdC5yZW1vdmUgPSBzdG1tYWNfcGNpX3JlbW92ZSxcXG4gMjE3OlxcdFxcdC5kcml2ZXIgICAgICAgICA9IHtcXG4gMjE4OlxcdFxcdFxcdC5wbSAgICAgPSBcXHUwMDI2c3RtbWFjX3NpbXBsZV9wbV9vcHMsXFxuIDIxOTpcXHRcXHR9LFxcbiAyMjA6XFx0fTtcXG4gMjIxOlxcdFxcbiAyMjI6XFx0bW9kdWxlX3BjaV9kcml2ZXIoc3RtbWFjX3BjaV9kcml2ZXIpO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlNUTU1BQyAxMC8xMDAvMTAwMCBFdGhlcm5ldCBQQ0kgZHJpdmVyXFxcIik7XFxuIDIyNTpcXHRNT0RVTEVfQVVUSE9SKFxcXCJSYXlhZ29uZCBLb2thdGFudXIgXFx1MDAzY3JheWFnb25kLmtva2F0YW51ckB2YXlhdnlhbGFicy5jb21cXHUwMDNlXFxcIik7XFxuIDIyNjpcXHRNT0RVTEVfQVVUSE9SKFxcXCJHaXVzZXBwZSBDYXZhbGxhcm8gXFx1MDAzY3BlcHBlLmNhdmFsbGFyb0BzdC5jb21cXHUwMDNlXFxcIik7XFxuIDIyNzpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjEwLjA1MjUzNjIzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTc3MTUyODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVmlhYmlsaXR5IG9mIFN5emthbGxlcidzIHZoY2kgZm9yIFN0bW1hYyBEcml2ZXIgVGVzdGluZyoqXG5cbk9rYXksIHNvIFN5emthbGxlcidzIGdvdCB0aGlzIHZoY2kgbWVjaGFuaXNtLCByaWdodD8gVGhhdCdzIHRoZSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uIOKAkyBpdCBsZXRzIG1lIHNwb29mIFBDSSBkZXZpY2VzIHdpdGggd2hhdGV2ZXIgSURzIEkgbmVlZC4gVGhhdCdzIHBvdGVudGlhbGx5ICpodWdlKiBmb3IgZnV6emluZyBhbmQgdGVzdGluZy4gQnV0IHRoZSBxdWVzdGlvbiBpczogY2FuIHRoZSBzdG1tYWMgZHJpdmVyIGV2ZW4gKndvcmsqIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlPyBUaGF0J3MgdGhlIGNydXggb2YgaXQuIFR5cGljYWxseSwgdGhlc2UgcGh5c2ljYWwgRXRoZXJuZXQgZHJpdmVycyBhcmUgcHJldHR5IGZpbmlja3kuIFRoZXkgdXN1YWxseSBjaG9rZSBpbiB0aGUgYHByb2JlYCBmdW5jdGlvbiBpZiB0aGUgaGFyZHdhcmUncyBub3QgcGxheWluZyBiYWxsIOKAkyB5b3Uga25vdywgdHJ5aW5nIHRvIHJlYWQgdGhlIE1BQyBhZGRyZXNzLCByZXNldHRpbmcgdGhlIFBIWSwgY2hlY2tpbmcgcmVnaXN0ZXJzIGFuZCBleHBlY3RpbmcgdmFsaWQgcmVzcG9uc2VzLiBJdCdzIGEgcmVhbCBwYWluLiBTbywgdG8gZmlndXJlIG91dCBpZiB0aGlzIHZoY2kgYXBwcm9hY2ggY2FuIGFjdHVhbGx5IHdvcmsgd2l0aCBzdG1tYWMsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZGl2ZSBpbnRvIGBzdG1tYWNfcGNpX3Byb2JlYC4gR290dGEgc2VlIHdoYXQgdGhlIGRyaXZlcidzICpyZWFsbHkqIGV4cGVjdGluZyBpbiB0ZXJtcyBvZiBoYXJkd2FyZSBpbnRlcmFjdGlvbiBkdXJpbmcgdGhlIHByb2JlLiBUaGVuIEknbGwgYmUgYWJsZSB0byB0ZWxsIGlmIFN5emthbGxlcidzIHZoY2kgY2FuIGZvb2wgdGhlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI5NSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTg6MTUuMjI5NjkyMzI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTgsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTg6XFx0c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiAxMTk6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gMTIwOlxcdHtcXG4gMTIxOlxcdFxcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4gMTIyOlxcdFxcdHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdDtcXG4gMTIzOlxcdFxcdHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzIHJlcyA9IHt9O1xcbiAxMjQ6XFx0XFx0aW50IHJldDtcXG4gMTI1OlxcdFxcdGludCBpO1xcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHRwbGF0ID0gc3RtbWFjX3BsYXRfZGF0X2FsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbiAxMjg6XFx0XFx0aWYgKCFwbGF0KVxcbiAxMjk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDEzMDpcXHRcXG4gMTMxOlxcdFxcdHBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4gMTMyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVvZigqcGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YSksXFxuIDEzMzpcXHRcXHRcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG4gMTM0OlxcdFxcdGlmICghcGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YSlcXG4gMTM1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxMzY6XFx0XFxuIDEzNzpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmcgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4gMTM4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmcpLFxcbiAxMzk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4gMTQwOlxcdFxcdGlmICghcGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnKVxcbiAxNDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdC8qIEVuYWJsZSBwY2kgZGV2aWNlICovXFxuIDE0NDpcXHRcXHRyZXQgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XFxuIDE0NTpcXHRcXHRpZiAocmV0KSB7XFxuIDE0NjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogRVJST1I6IGZhaWxlZCB0byBlbmFibGUgZGV2aWNlXFxcXG5cXFwiLFxcbiAxNDc6XFx0XFx0XFx0XFx0X19mdW5jX18pO1xcbiAxNDg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTQ5OlxcdFxcdH1cXG4gMTUwOlxcdFxcbiAxNTE6XFx0XFx0LyogR2V0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgZGV2aWNlICovXFxuIDE1MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUENJX1NURF9OVU1fQkFSUzsgaSsrKSB7XFxuIDE1MzpcXHRcXHRcXHRpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKSA9PSAwKVxcbiAxNTQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDE1NTpcXHRcXHRcXHRyZXMuYWRkciA9IHBjaW1faW9tYXBfcmVnaW9uKHBkZXYsIGksIFNUTU1BQ19SRVNPVVJDRV9OQU1FKTtcXG4gMTU2OlxcdFxcdFxcdGlmIChJU19FUlIocmVzLmFkZHIpKVxcbiAxNTc6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocmVzLmFkZHIpO1xcbiAxNTg6XFx0XFx0XFx0YnJlYWs7XFxuIDE1OTpcXHRcXHR9XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRyZXQgPSBpbmZvLVxcdTAwM2VzZXR1cChwZGV2LCBwbGF0KTtcXG4gMTY0OlxcdFxcdGlmIChyZXQpXFxuIDE2NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRyZXMud29sX2lycSA9IHBkZXYtXFx1MDAzZWlycTtcXG4gMTY4OlxcdFxcdHJlcy5pcnEgPSBwZGV2LVxcdTAwM2VpcnE7XFxuIDE2OTpcXHRcXG4gMTcwOlxcdFxcdHBsYXQtXFx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cXHUwMDNldHNvZWUgPSAxO1xcbiAxNzE6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2VtcnhwZWUgPSAxO1xcbiAxNzI6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2VtZXN0ZWUgPSAxO1xcbiAxNzM6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2VtcnhlZSA9IDE7XFxuIDE3NDpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZW10eGVlID0gMTtcXG4gMTc1OlxcdFxcdHBsYXQtXFx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cXHUwMDNlZXBzaSA9IDE7XFxuIDE3NjpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZWVkcHAgPSAxO1xcbiAxNzc6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2VwcnR5ZW4gPSAxO1xcbiAxNzg6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2V0bW91dGVuID0gMTtcXG4gMTc5OlxcdFxcbiAxODA6XFx0XFx0cGxhdC1cXHUwMDNlc3VzcGVuZCA9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xcbiAxODE6XFx0XFx0cGxhdC1cXHUwMDNlcmVzdW1lID0gc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZTtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuIDE4NDpcXHR9XFxuIDE4NTpcXHRcXG4gMTg2OlxcdC8qKlxcbiAxODc6XFx0ICogc3RtbWFjX3BjaV9yZW1vdmVcXG4gMTg4OlxcdCAqXFxuIDE4OTpcXHQgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXJcXG4gMTkwOlxcdCAqIERlc2NyaXB0aW9uOiB0aGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSBtYWluIHRvIGZyZWUgdGhlIG5ldCByZXNvdXJjZXMuXFxuIDE5MTpcXHQgKi9cXG4gMTkyOlxcdHN0YXRpYyB2b2lkIHN0bW1hY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiAxOTM6XFx0e1xcbiAxOTQ6XFx0XFx0c3RtbWFjX2R2cl9yZW1vdmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIDE5NTpcXHR9XFxuIDE5NjpcXHRcXG4gMTk3OlxcdC8qIHN5bnRoZXRpYyBJRCwgbm8gb2ZmaWNpYWwgdmVuZG9yICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjE1LjIyOTc4NDA0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTk3MjQ3OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipQcm9iaW5nIHRoZSBTVE1NQUMgRHJpdmVyJ3MgUmVzaWxpZW5jZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBhdCB0aGUgcG9pbnQgd2hlcmUgYSBwcm9iZSBjYWxsIGlzIGJlaW5nIG1hZGUgdG8gYHN0bW1hY19kdnJfcHJvYmVgLiBNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgcm9idXN0bmVzcyBhbmQgdGVzdGFiaWxpdHkuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyByZXNpbGllbnQgdGhpcyBpcyBpbiB0aGUgYWJzZW5jZSBvZiBhY3R1YWwgaGFyZHdhcmUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nLCBcIkNhbiBJIHN1Y2Nlc3NmdWxseSBleGVjdXRlIGBzdG1tYWNfZHZyX3Byb2JlYCBpbiBhIHNpbXVsYXRlZCBlbnZpcm9ubWVudCwgcGVyaGFwcyB3aXRoIGEgdmlydHVhbCBOSUMsIG9yIGV2ZW4ganVzdCBieSBzdHViYmluZyBvdXQgY2VydGFpbiBoYXJkd2FyZSBpbnRlcmFjdGlvbnM/XCIgVGhlIGdvYWwgaXMgdG8gaXNvbGF0ZSB0aGUgZHJpdmVyJ3MgY29yZSBsb2dpYyBmcm9tIHRoZSBwaHlzaWNhbCBkZXZpY2UuIElmIGl0ICpkb2VzKiBkZXBlbmQgb24gc29tZSBIVyBpbml0aWFsaXphdGlvbiwgSSB3YW50IHRvIHNlZSBob3cgdGhhdCdzIGhhbmRsZWQuIEFyZSB3ZSBnZXR0aW5nIHRoZSB1c3VhbCBoYXJkd2FyZSBkZXBlbmRlbmN5IGVycm9yIG1lc3NhZ2VzPyBJcyB0aGVyZSBhIGNsZWFyIHBhdGggdG8gbW9jayB0aGF0IG91dD8gQ2FuIEkgYnlwYXNzIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIG9yIGRvZXMgYSBwYXJ0aWN1bGFyIHZhbHVlIHRyaWdnZXIgaXQ/IE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgYSB3ZWxsLWRlc2lnbmVkIGRyaXZlciBzaG91bGQgZ3JhY2VmdWxseSBoYW5kbGUgdGhlIGxhY2sgb2YgaGFyZHdhcmUsIG9yIGF0IGxlYXN0IHByb3ZpZGUgY2xlYXIgaW5kaWNhdG9ycyBvZiBpdHMgYWJzZW5jZSwgdG8gYWxsb3cgZm9yIHRob3JvdWdoIHRlc3RpbmcgYW5kIGJyaW5nLXVwLiBTbywgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBncmFjZWZ1bCBmYWlsdXJlcywgcGVyaGFwcyBhIHJldHVybiBjb2RlIG9yIGEgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSwgaW4gdGhlIHByb2JlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkyMiwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTg6MjMuMjI3MDM0MzM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTYyNjAxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2R2cl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc5ND1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGxhdF9kYXRfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzc5NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc3OTY6c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzc5Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDk4LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA5OTogKiBzdG1tYWNfZHZyX3Byb2JlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTAwLSAqIEBkZXY6IGRldmljZSBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDctICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTA4OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDktXFx0XFx0ICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODExOTpcXHRyZXQgPSBfX3N0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMjAtXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBwbGF0X2RhdC1cXHUwMDNlZXhpdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyNC19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTI1OkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcHJvYmUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEyNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTg6MjMuNTIzMjk5OTE4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NzE3NzAzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgX19zdG1tYWNfZHZyX3Byb2JlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUga2VybmVsIGlzIHBvaW50aW5nIG1lIHRvd2FyZCBgX19zdG1tYWNfZHZyX3Byb2JlYC4gTGV0J3MgYXNzdW1lIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgU1RNTUFDIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhdCBsZWFzdCBpbml0aWFsbHkuIFRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gc2VlIHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBzZXR1cCBoYXBwZW5pbmcuIExpa2VseSwgdGhpcyBpcyB3aGVyZSB0aGUgaGFyZHdhcmUgaXMgYmVpbmcgaWRlbnRpZmllZCBhbmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBkcml2ZXIuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlOiB3aGF0J3MgaXQgY2hlY2tpbmcsIHdoYXQncyBpdCBjYWxsaW5nLCBhbmQgd2hhdCdzIGl0IHNldHRpbmcgdXA/IFRoaXMgaXMgdGhlIGNvcmUgb2YgZ2V0dGluZyB0aGUgZGV2aWNlIHJlYWR5IHRvIHJ1bi4gTGV04oCZcyBzZWUgd2hhdCBnb29kaWVzIGF3YWl0IGluc2lkZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MDMsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1ODozMC4yOTUwNzI1NTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA3MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzc5NixcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzc5NjpcXHRzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuNzc5NzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbjc3OTg6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHN0bW1hY19yZXNvdXJjZXMgKnJlcylcXG43Nzk5OlxcdHtcXG43ODAwOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDtcXG43ODAxOlxcdFxcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdjtcXG43ODAyOlxcdFxcdGludCBpLCByZXQgPSAwO1xcbjc4MDM6XFx0XFx0dTggcnhxO1xcbjc4MDQ6XFx0XFxuNzgwNTpcXHRcXHRpZiAoIXBsYXRfZGF0LVxcdTAwM2VkbWFfY2ZnIHx8ICFwbGF0X2RhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlcGJsKSB7XFxuNzgwNjpcXHRcXHRcXHRkZXZfZXJyKGRldmljZSwgXFxcImludmFsaWQgRE1BIGNvbmZpZ3VyYXRpb25cXFxcblxcXCIpO1xcbjc4MDc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzgwODpcXHRcXHR9XFxuNzgwOTpcXHRcXG43ODEwOlxcdFxcdG5kZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhkZXZpY2UsIHNpemVvZihzdHJ1Y3Qgc3RtbWFjX3ByaXYpLFxcbjc4MTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1UTF9NQVhfVFhfUVVFVUVTLCBNVExfTUFYX1JYX1FVRVVFUyk7XFxuNzgxMjpcXHRcXHRpZiAoIW5kZXYpXFxuNzgxMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43ODE0OlxcdFxcbjc4MTU6XFx0XFx0U0VUX05FVERFVl9ERVYobmRldiwgZGV2aWNlKTtcXG43ODE2OlxcdFxcbjc4MTc6XFx0XFx0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbjc4MTg6XFx0XFx0cHJpdi1cXHUwMDNlZGV2aWNlID0gZGV2aWNlO1xcbjc4MTk6XFx0XFx0cHJpdi1cXHUwMDNlZGV2ID0gbmRldjtcXG43ODIwOlxcdFxcbjc4MjE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1UTF9NQVhfUlhfUVVFVUVTOyBpKyspXFxuNzgyMjpcXHRcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLnJ4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcXG43ODIzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNVExfTUFYX1RYX1FVRVVFUzsgaSsrKSB7XFxuNzgyNDpcXHRcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLnR4cV9zdGF0c1tpXS5xX3N5bmNwKTtcXG43ODI1OlxcdFxcdFxcdHU2NF9zdGF0c19pbml0KFxcdTAwMjZwcml2LVxcdTAwM2V4c3RhdHMudHhxX3N0YXRzW2ldLm5hcGlfc3luY3ApO1xcbjc4MjY6XFx0XFx0fVxcbjc4Mjc6XFx0XFxuNzgyODpcXHRcXHRwcml2LVxcdTAwM2V4c3RhdHMucGNwdV9zdGF0cyA9XFxuNzgyOTpcXHRcXHRcXHRkZXZtX25ldGRldl9hbGxvY19wY3B1X3N0YXRzKGRldmljZSwgc3RydWN0IHN0bW1hY19wY3B1X3N0YXRzKTtcXG43ODMwOlxcdFxcdGlmICghcHJpdi1cXHUwMDNleHN0YXRzLnBjcHVfc3RhdHMpXFxuNzgzMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43ODMyOlxcdFxcbjc4MzM6XFx0XFx0c3RtbWFjX3NldF9ldGh0b29sX29wcyhuZGV2KTtcXG43ODM0OlxcdFxcdHByaXYtXFx1MDAzZXBhdXNlX3RpbWUgPSBwYXVzZTtcXG43ODM1OlxcdFxcdHByaXYtXFx1MDAzZXBsYXQgPSBwbGF0X2RhdDtcXG43ODM2OlxcdFxcdHByaXYtXFx1MDAzZWlvYWRkciA9IHJlcy1cXHUwMDNlYWRkcjtcXG43ODM3OlxcdFxcdHByaXYtXFx1MDAzZWRldi1cXHUwMDNlYmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpcmVzLVxcdTAwM2VhZGRyO1xcbjc4Mzg6XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlbXVsdGlfbXNpX2VuID1cXG43ODM5OlxcdFxcdFxcdChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX01VTFRJX01TSV9FTik7XFxuNzg0MDpcXHRcXG43ODQxOlxcdFxcdHByaXYtXFx1MDAzZWRldi1cXHUwMDNlaXJxID0gcmVzLVxcdTAwM2VpcnE7XFxuNzg0MjpcXHRcXHRwcml2LVxcdTAwM2V3b2xfaXJxID0gcmVzLVxcdTAwM2V3b2xfaXJxO1xcbjc4NDM6XFx0XFx0cHJpdi1cXHUwMDNlc2Z0eV9pcnEgPSByZXMtXFx1MDAzZXNmdHlfaXJxO1xcbjc4NDQ6XFx0XFxuNzg0NTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19NVUxUSV9NU0lfRU4pIHtcXG43ODQ2OlxcdFxcdFxcdHJldCA9IHN0bW1hY19tc2lfaW5pdChwcml2LCByZXMpO1xcbjc4NDc6XFx0XFx0XFx0aWYgKHJldClcXG43ODQ4OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuNzg0OTpcXHRcXHR9XFxuNzg1MDpcXHRcXG43ODUxOlxcdFxcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKHJlcy1cXHUwMDNlbWFjKSlcXG43ODUyOlxcdFxcdFxcdGV0aF9od19hZGRyX3NldChwcml2LVxcdTAwM2VkZXYsIHJlcy1cXHUwMDNlbWFjKTtcXG43ODUzOlxcdFxcbjc4NTQ6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKGRldmljZSwgcHJpdi1cXHUwMDNlZGV2KTtcXG43ODU1OlxcdFxcbjc4NTY6XFx0XFx0LyogVmVyaWZ5IGRyaXZlciBhcmd1bWVudHMgKi9cXG43ODU3OlxcdFxcdHN0bW1hY192ZXJpZnlfYXJncygpO1xcbjc4NTg6XFx0XFxuNzg1OTpcXHRcXHRwcml2LVxcdTAwM2VhZl94ZHBfemNfcXBzID0gYml0bWFwX3phbGxvYyhNVExfTUFYX1RYX1FVRVVFUywgR0ZQX0tFUk5FTCk7XFxuNzg2MDpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZWFmX3hkcF96Y19xcHMpXFxuNzg2MTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43ODYyOlxcdFxcbjc4NjM6XFx0XFx0LyogQWxsb2NhdGUgd29ya3F1ZXVlICovXFxuNzg2NDpcXHRcXHRwcml2LVxcdTAwM2V3cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFxcXCJzdG1tYWNfd3FcXFwiKTtcXG43ODY1OlxcdFxcdGlmICghcHJpdi1cXHUwMDNld3EpIHtcXG43ODY2OlxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiZmFpbGVkIHRvIGNyZWF0ZSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbjc4Njc6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG43ODY4OlxcdFxcdFxcdGdvdG8gZXJyb3Jfd3FfaW5pdDtcXG43ODY5OlxcdFxcdH1cXG43ODcwOlxcdFxcbjc4NzE6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2VzZXJ2aWNlX3Rhc2ssIHN0bW1hY19zZXJ2aWNlX3Rhc2spO1xcbjc4NzI6XFx0XFxuNzg3MzpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2cHJpdi1cXHUwMDNlZWVlX2N0cmxfdGltZXIsIHN0bW1hY19lZWVfY3RybF90aW1lciwgMCk7XFxuNzg3NDpcXHRcXG43ODc1OlxcdFxcdC8qIE92ZXJyaWRlIHdpdGgga2VybmVsIHBhcmFtZXRlcnMgaWYgc3VwcGxpZWQgWFhYIENSUyBYWFhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTg6MzAuMjk1Nzg2MDAyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzQxNTcyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBc3Nlc3NpbmcgUG90ZW50aWFsIFN5c3RlbSBJbnRlcmFjdGlvbioqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGhlcmUgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxldmVsIG9mIHNvcGhpc3RpY2F0aW9uIHRoZSBzeXN0ZW0gaXMgYXR0ZW1wdGluZywgb3IgcG90ZW50aWFsbHkgY2FwYWJsZSBvZiwgaW4gaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZ2F1Z2Ugd2hldGhlciB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFuYWx5c2lzLCBvciBpZiB0aGVyZSdzIGEgbW9yZSBpbnZvbHZlZCBhdHRlbXB0IGJlaW5nIG1hZGUgdG8gZGlyZWN0bHkgaW50ZXJyb2dhdGUgaGFyZHdhcmUgcmVnaXN0ZXJzLiBSZWFkaW5nIGhhcmR3YXJlIHJlZ2lzdGVycywgZXZlbiBpZiBpbmRpcmVjdGx5LCBpbXBsaWVzIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIGFyY2hpdGVjdHVyZSBhbmQgYSBwb3RlbnRpYWxseSBncmVhdGVyIHZ1bG5lcmFiaWxpdHkgc3VyZmFjZS4gVGhpcyBjb3VsZCBiZSBhIHRlbGwgb2YgdGhlIHRvb2xzZXQsIG9yIHRoZSBsZXZlbCBvZiBlZmZvcnQgdGhhdCB0aGUgYWN0b3IgaXMgd2lsbGluZyB0byBwdXQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTEzLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1ODozNC4yMjk5NDY4MDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzg3NixcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzg3NjpcXHRcXHQgKiB0aGlzIG5lZWRzIHRvIGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzXFxuNzg3NzpcXHRcXHQgKi9cXG43ODc4OlxcdFxcdGlmICgocGh5YWRkciBcXHUwMDNlPSAwKSBcXHUwMDI2XFx1MDAyNiAocGh5YWRkciBcXHUwMDNjPSAzMSkpXFxuNzg3OTpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwaHlfYWRkciA9IHBoeWFkZHI7XFxuNzg4MDpcXHRcXG43ODgxOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VzdG1tYWNfcnN0KSB7XFxuNzg4MjpcXHRcXHRcXHRyZXQgPSByZXNldF9jb250cm9sX2Fzc2VydChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VzdG1tYWNfcnN0KTtcXG43ODgzOlxcdFxcdFxcdHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlc3RtbWFjX3JzdCk7XFxuNzg4NDpcXHRcXHRcXHQvKiBTb21lIHJlc2V0IGNvbnRyb2xsZXJzIGhhdmUgb25seSByZXNldCBjYWxsYmFjayBpbnN0ZWFkIG9mXFxuNzg4NTpcXHRcXHRcXHQgKiBhc3NlcnQgKyBkZWFzc2VydCBjYWxsYmFja3MgcGFpci5cXG43ODg2OlxcdFxcdFxcdCAqL1xcbjc4ODc6XFx0XFx0XFx0aWYgKHJldCA9PSAtRU5PVFNVUFApXFxuNzg4ODpcXHRcXHRcXHRcXHRyZXNldF9jb250cm9sX3Jlc2V0KHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXN0bW1hY19yc3QpO1xcbjc4ODk6XFx0XFx0fVxcbjc4OTA6XFx0XFxuNzg5MTpcXHRcXHRyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXN0bW1hY19haGJfcnN0KTtcXG43ODkyOlxcdFxcdGlmIChyZXQgPT0gLUVOT1RTVVBQKVxcbjc4OTM6XFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJ1bmFibGUgdG8gYnJpbmcgb3V0IG9mIGFoYiByZXNldDogJXBlXFxcXG5cXFwiLFxcbjc4OTQ6XFx0XFx0XFx0XFx0RVJSX1BUUihyZXQpKTtcXG43ODk1OlxcdFxcbjc4OTY6XFx0XFx0LyogV2FpdCBhIGJpdCBmb3IgdGhlIHJlc2V0IHRvIHRha2UgZWZmZWN0ICovXFxuNzg5NzpcXHRcXHR1ZGVsYXkoMTApO1xcbjc4OTg6XFx0XFxuNzg5OTpcXHRcXHQvKiBJbml0IE1BQyBhbmQgZ2V0IHRoZSBjYXBhYmlsaXRpZXMgKi9cXG43OTAwOlxcdFxcdHJldCA9IHN0bW1hY19od19pbml0KHByaXYpO1xcbjc5MDE6XFx0XFx0aWYgKHJldClcXG43OTAyOlxcdFxcdFxcdGdvdG8gZXJyb3JfaHdfaW5pdDtcXG43OTAzOlxcdFxcbjc5MDQ6XFx0XFx0LyogT25seSBEV01BQyBjb3JlIHZlcnNpb24gNS4yMCBvbndhcmRzIHN1cHBvcnRzIEhXIGRlc2NyaXB0b3IgcHJlZmV0Y2guXFxuNzkwNTpcXHRcXHQgKi9cXG43OTA2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VzeW5vcHN5c19pZCBcXHUwMDNjIERXTUFDX0NPUkVfNV8yMClcXG43OTA3OlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWRtYV9jZmctXFx1MDAzZWRjaGUgPSBmYWxzZTtcXG43OTA4OlxcdFxcbjc5MDk6XFx0XFx0c3RtbWFjX2NoZWNrX2V0aGVyX2FkZHIocHJpdik7XFxuNzkxMDpcXHRcXG43OTExOlxcdFxcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2c3RtbWFjX25ldGRldl9vcHM7XFxuNzkxMjpcXHRcXG43OTEzOlxcdFxcdG5kZXYtXFx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcXHUwMDI2c3RtbWFjX3hkcF9tZXRhZGF0YV9vcHM7XFxuNzkxNDpcXHRcXHRuZGV2LVxcdTAwM2V4c2tfdHhfbWV0YWRhdGFfb3BzID0gXFx1MDAyNnN0bW1hY194c2tfdHhfbWV0YWRhdGFfb3BzO1xcbjc5MTU6XFx0XFxuNzkxNjpcXHRcXHRuZGV2LVxcdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8XFxuNzkxNzpcXHRcXHRcXHRcXHQgICAgTkVUSUZfRl9SWENTVU07XFxuNzkxODpcXHRcXHRuZGV2LVxcdTAwM2V4ZHBfZmVhdHVyZXMgPSBORVRERVZfWERQX0FDVF9CQVNJQyB8IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcXG43OTE5OlxcdFxcdFxcdFxcdCAgICAgTkVUREVWX1hEUF9BQ1RfWFNLX1pFUk9DT1BZO1xcbjc5MjA6XFx0XFxuNzkyMTpcXHRcXHRyZXQgPSBzdG1tYWNfdGNfaW5pdChwcml2LCBwcml2KTtcXG43OTIyOlxcdFxcdGlmICghcmV0KSB7XFxuNzkyMzpcXHRcXHRcXHRuZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xcbjc5MjQ6XFx0XFx0fVxcbjc5MjU6XFx0XFxuNzkyNjpcXHRcXHRzdG1tYWNfc2V0X2dzb19mZWF0dXJlcyhuZGV2KTtcXG43OTI3OlxcdFxcbjc5Mjg6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAuc3BoZW4gXFx1MDAyNlxcdTAwMjZcXG43OTI5OlxcdFxcdCAgICAhKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RNTUFDX0ZMQUdfU1BIX0RJU0FCTEUpKSB7XFxuNzkzMDpcXHRcXHRcXHRuZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dSTztcXG43OTMxOlxcdFxcdFxcdHByaXYtXFx1MDAzZXNwaF9jYXBhYmxlID0gdHJ1ZTtcXG43OTMyOlxcdFxcdFxcdHByaXYtXFx1MDAzZXNwaF9hY3RpdmUgPSBwcml2LVxcdTAwM2VzcGhfY2FwYWJsZTtcXG43OTMzOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlNQSCBmZWF0dXJlIGVuYWJsZWRcXFxcblxcXCIpO1xcbjc5MzQ6XFx0XFx0fVxcbjc5MzU6XFx0XFxuNzkzNjpcXHRcXHQvKiBJZGVhbGx5IG91ciBob3N0IERNQSBhZGRyZXNzIHdpZHRoIGlzIHRoZSBzYW1lIGFzIGZvciB0aGVcXG43OTM3OlxcdFxcdCAqIGRldmljZS4gSG93ZXZlciwgaXQgbWF5IGRpZmZlciBhbmQgdGhlbiB3ZSBoYXZlIHRvIHVzZSBvdXJcXG43OTM4OlxcdFxcdCAqIGhvc3QgRE1BIHdpZHRoIGZvciBhbGxvY2F0aW9uIGFuZCB0aGUgZGV2aWNlIERNQSB3aWR0aCBmb3JcXG43OTM5OlxcdFxcdCAqIHJlZ2lzdGVyIGhhbmRsaW5nLlxcbjc5NDA6XFx0XFx0ICovXFxuNzk0MTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlaG9zdF9kbWFfd2lkdGgpXFxuNzk0MjpcXHRcXHRcXHRwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlaG9zdF9kbWFfd2lkdGg7XFxuNzk0MzpcXHRcXHRlbHNlXFxuNzk0NDpcXHRcXHRcXHRwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5hZGRyNjQ7XFxuNzk0NTpcXHRcXG43OTQ2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSB7XFxuNzk0NzpcXHRcXHRcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldmljZSxcXG43OTQ4OlxcdFxcdFxcdFxcdFxcdERNQV9CSVRfTUFTSyhwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSk7XFxuNzk0OTpcXHRcXHRcXHRpZiAoIXJldCkge1xcbjc5NTA6XFx0XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiVXNpbmcgJWQvJWQgYml0cyBETUEgaG9zdC9kZXZpY2Ugd2lkdGhcXFxcblxcXCIsXFxuNzk1MTpcXHRcXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCwgcHJpdi1cXHUwMDNlZG1hX2NhcC5hZGRyNjQpO1xcbjc5NTI6XFx0XFxuNzk1MzpcXHRcXHRcXHRcXHQvKlxcbjc5NTQ6XFx0XFx0XFx0XFx0ICogSWYgbW9yZSB0aGFuIDMyIGJpdHMgY2FuIGJlIGFkZHJlc3NlZCwgbWFrZSBzdXJlIHRvXFxuNzk1NTpcXHRcXHRcXHRcXHQgKiBlbmFibGUgZW5oYW5jZWQgYWRkcmVzc2luZyBtb2RlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1ODozNC4yMzAyODg4NzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxNDMzMDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFNUTU1BQyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIHN0YXJ0aW5nIHVwLCBhbmQgdGhlIGNvZGUgaGFzIGhpdCBgc3RtbWFjX2h3X2luaXRgLiBSaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcsIFwiTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugb2YgdGhlIFNUTU1BQyBkcml2ZXIuIEkgd2FudCB0byBrbm93IGV4YWN0bHkgaG93IGl0IHNldHMgdXAgdGhlIHJlZ2lzdGVycywgY29uZmlndXJlcyB0aGUgTUFDIGl0c2VsZiwgYW5kIGdldHMgdGhpbmdzIHJlYWR5IHRvIHJlY2VpdmUgYW5kIHRyYW5zbWl0IHBhY2tldHMuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoZSByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQuIFRoZSBETUEgc2V0dGluZ3MsIGZsb3cgY29udHJvbCwgaW50ZXJydXB0IGVuYWJsZW1lbnQg4oCTIHRoYXQncyBhbGwgd2hhdCBJIHdpbGwgYmUgZ29pbmcgdG8gY2hlY2sgaW4gdGhhdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMTgsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjM5LjU0NDYyMjQ5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4NzQ5MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19od19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03MzY1PXN0YXRpYyB2b2lkIHN0bW1hY19wcmludF9hY3RwaHlpZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczOTktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NDAwOiAqICBzdG1tYWNfaHdfaW5pdCAtIEluaXQgdGhlIE1BQyBkZXZpY2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDEtICogIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQwNi0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MDc6c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDA4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc5Nj1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc4OTktXFx0LyogSW5pdCBNQUMgYW5kIGdldCB0aGUgY2FwYWJpbGl0aWVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3OTAwOlxcdHJldCA9IHN0bW1hY19od19pbml0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzkwMS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1ODozOS43MjMzNzgxODZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyMjAwNzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19od19pbml0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGluaXRpYWxpemVzIHRoZSBoYXJkd2FyZSwgYW5kIHdoYXQgc3BlY2lmaWMgc3RlcHMgaXQgdGFrZXMuIEkga25vdyB0aGlzIGlzIGEgY29yZSBmdW5jdGlvbiwgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBETUEgZW5naW5lLCBjb25maWd1cmluZyB0aGUgTUFDIHJlZ2lzdGVycywgYW5kIGdlbmVyYWxseSBnZXR0aW5nIHRoZSBFdGhlcm5ldCBjb250cm9sbGVyIHJlYWR5IGZvciB1c2UuIEkgZXhwZWN0IHRvIHNlZSByZWdpc3RlciB3cml0ZXMsIHBlcmhhcHMgY2xvY2sgZW5hYmxlIHNlcXVlbmNlcywgYW5kIGxpa2VseSBzb21lIGluaXRpYWwgYnVmZmVyIGRlc2NyaXB0b3Igc2V0dXAuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcyB0aGUgZHJpdmVyIGltcGxlbWVudHMuIEkgd2FudCB0byBzZWUgaWYgdGhleSdyZSBoYW5kbGluZyBQSFkgaW5pdGlhbGl6YXRpb24gY29ycmVjdGx5LCBhbmQgaWYgdGhlcmUgYXJlIGFueSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgcGF5IGF0dGVudGlvbiB0by4gQWxzbywgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBzaW1pbGFyIGRyaXZlcnMsIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgcG93ZXItc2F2aW5nIG1lY2hhbmlzbXMgdGhhdCBtaWdodCBiZSBpbml0aWF0ZWQgaGVyZSwgb3IgZGVmZXJyZWQgdG8gbGF0ZXIgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IG1hcCBhY2Nlc3MgYW5kIGFueSBwb3RlbnRpYWwgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkuIFVsdGltYXRlbHksIEknbSBleHBlY3RpbmcgdG8gY29uZmlybSB3aGV0aGVyIGl0IGlzIGEgcm9idXN0IGFuZCBlZmZpY2llbnQgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Nzg2LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTg6NDUuNzQ1Mzg4ODg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2ODY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc0MDcsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc0MDc6XFx0c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuNzQwODpcXHR7XFxuNzQwOTpcXHRcXHRpbnQgcmV0O1xcbjc0MTA6XFx0XFxuNzQxMTpcXHRcXHQvKiBkd21hYy1zdW44aSBvbmx5IHdvcmsgaW4gY2hhaW4gbW9kZSAqL1xcbjc0MTI6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RNTUFDX0ZMQUdfSEFTX1NVTjhJKVxcbjc0MTM6XFx0XFx0XFx0Y2hhaW5fbW9kZSA9IDE7XFxuNzQxNDpcXHRcXHRwcml2LVxcdTAwM2VjaGFpbl9tb2RlID0gISFjaGFpbl9tb2RlO1xcbjc0MTU6XFx0XFxuNzQxNjpcXHRcXHQvKiBJbml0aWFsaXplIEhXIEludGVyZmFjZSAqL1xcbjc0MTc6XFx0XFx0cmV0ID0gc3RtbWFjX2h3aWZfaW5pdChwcml2KTtcXG43NDE4OlxcdFxcdGlmIChyZXQpXFxuNzQxOTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjc0MjA6XFx0XFxuNzQyMTpcXHRcXHQvKiBHZXQgdGhlIEhXIGNhcGFiaWxpdHkgKG5ldyBHTUFDIG5ld2VyIHRoYW4gMy41MGEpICovXFxuNzQyMjpcXHRcXHRwcml2LVxcdTAwM2Vod19jYXBfc3VwcG9ydCA9IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMocHJpdik7XFxuNzQyMzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaHdfY2FwX3N1cHBvcnQpIHtcXG43NDI0OlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIkRNQSBIVyBjYXBhYmlsaXR5IHJlZ2lzdGVyIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuNzQyNTpcXHRcXG43NDI2OlxcdFxcdFxcdC8qIFdlIGNhbiBvdmVycmlkZSBzb21lIGdtYWMvZG1hIGNvbmZpZ3VyYXRpb24gZmllbGRzOiBlLmcuXFxuNzQyNzpcXHRcXHRcXHQgKiBlbmhfZGVzYywgdHhfY29lIChlLmcuIHRoYXQgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZVxcbjc0Mjg6XFx0XFx0XFx0ICogcGxhdGZvcm0pIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSBIVyBjYXBhYmlsaXR5XFxuNzQyOTpcXHRcXHRcXHQgKiByZWdpc3RlciAoaWYgc3VwcG9ydGVkKS5cXG43NDMwOlxcdFxcdFxcdCAqL1xcbjc0MzE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZW5oX2Rlc2MgPSBwcml2LVxcdTAwM2VkbWFfY2FwLmVuaF9kZXNjO1xcbjc0MzI6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcG10ID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5wbXRfcmVtb3RlX3dha2VfdXAgXFx1MDAyNlxcdTAwMjZcXG43NDMzOlxcdFxcdFxcdFxcdFxcdCEocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19VU0VfUEhZX1dPTCk7XFxuNzQzNDpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5oYXNoX3RiX3N6KSB7XFxuNzQzNTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlbXVsdGljYXN0X2ZpbHRlcl9iaW5zID1cXG43NDM2OlxcdFxcdFxcdFxcdFxcdFxcdChCSVQocHJpdi1cXHUwMDNlZG1hX2NhcC5oYXNoX3RiX3N6KSBcXHUwMDNjXFx1MDAzYyA1KTtcXG43NDM3OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VtY2FzdF9iaXRzX2xvZzIgPVxcbjc0Mzg6XFx0XFx0XFx0XFx0XFx0XFx0aWxvZzIocHJpdi1cXHUwMDNlaHctXFx1MDAzZW11bHRpY2FzdF9maWx0ZXJfYmlucyk7XFxuNzQzOTpcXHRcXHRcXHR9XFxuNzQ0MDpcXHRcXG43NDQxOlxcdFxcdFxcdC8qIFRYQ09FIGRvZXNuJ3Qgd29yayBpbiB0aHJlc2ggRE1BIG1vZGUgKi9cXG43NDQyOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vmb3JjZV90aHJlc2hfZG1hX21vZGUpXFxuNzQ0MzpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9jb2UgPSBmYWxzZTtcXG43NDQ0OlxcdFxcdFxcdGVsc2VcXG43NDQ1OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X2NvZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAudHhfY29lO1xcbjc0NDY6XFx0XFxuNzQ0NzpcXHRcXHRcXHQvKiBJbiBjYXNlIG9mIEdNQUM0IHJ4X2NvZSBpcyBmcm9tIEhXIGNhcCByZWdpc3Rlci4gKi9cXG43NDQ4OlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAucnhfY29lO1xcbjc0NDk6XFx0XFxuNzQ1MDpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9jb2VfdHlwZTIpXFxuNzQ1MTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUyO1xcbjc0NTI6XFx0XFx0XFx0ZWxzZSBpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9jb2VfdHlwZTEpXFxuNzQ1MzpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUxO1xcbjc0NTQ6XFx0XFxuNzQ1NTpcXHRcXHRcXHRzdG1tYWNfcHJpbnRfYWN0cGh5aWYocHJpdik7XFxuNzQ1NjpcXHRcXHR9IGVsc2Uge1xcbjc0NTc6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiTm8gSFcgRE1BIGZlYXR1cmUgcmVnaXN0ZXIgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDU4OlxcdFxcdH1cXG43NDU5OlxcdFxcbjc0NjA6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZSkge1xcbjc0NjE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXJ4X2NzdW0gPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2U7XFxuNzQ2MjpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJSWCBDaGVja3N1bSBPZmZsb2FkIEVuZ2luZSBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbjc0NjM6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZXN5bm9wc3lzX2lkIFxcdTAwM2MgRFdNQUNfQ09SRV80XzAwKVxcbjc0NjQ6XFx0XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiQ09FIFR5cGUgJWRcXFxcblxcXCIsIHByaXYtXFx1MDAzZWh3LVxcdTAwM2VyeF9jc3VtKTtcXG43NDY1OlxcdFxcdH1cXG43NDY2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9jb2UpXFxuNzQ2NzpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJUWCBDaGVja3N1bSBpbnNlcnRpb24gc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDY4OlxcdFxcbjc0Njk6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBtdCkge1xcbjc0NzA6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiV2FrZS1VcCBPbiBMYW4gc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDcxOlxcdFxcdFxcdGRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUocHJpdi1cXHUwMDNlZGV2aWNlLCAxKTtcXG43NDcyOlxcdFxcdFxcdGRldm1fcG1fc2V0X3dha2VfaXJxKHByaXYtXFx1MDAzZWRldmljZSwgcHJpdi1cXHUwMDNld29sX2lycSk7XFxuNzQ3MzpcXHRcXHR9XFxuNzQ3NDpcXHRcXG43NDc1OlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLm51bWJlcl9yeF9xdWV1ZXMgXFx1MDAyNlxcdTAwMjZcXG43NDc2OlxcdFxcdCAgICBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlIFxcdTAwM2UgcHJpdi1cXHUwMDNlZG1hX2NhcC5udW1iZXJfcnhfcXVldWVzKSB7XFxuNzQ3NzpcXHRcXHRcXHRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXZpY2UsXFxuNzQ3ODpcXHRcXHRcXHRcXHQgXFxcIk51bWJlciBvZiBSeCBxdWV1ZXMgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxcXG5cXFwiLFxcbjc0Nzk6XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X3F1ZXVlc190b191c2UpO1xcbjc0ODA6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfcXVldWVzX3RvX3VzZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAubnVtYmVyX3J4X3F1ZXVlcztcXG43NDgxOlxcdFxcdH1cXG43NDgyOlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLm51bWJlcl90eF9xdWV1ZXMgXFx1MDAyNlxcdTAwMjZcXG43NDgzOlxcdFxcdCAgICBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlIFxcdTAwM2UgcHJpdi1cXHUwMDNlZG1hX2NhcC5udW1iZXJfdHhfcXVldWVzKSB7XFxuNzQ4NDpcXHRcXHRcXHRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXZpY2UsXFxuNzQ4NTpcXHRcXHRcXHRcXHQgXFxcIk51bWJlciBvZiBUeCBxdWV1ZXMgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxcXG5cXFwiLFxcbjc0ODY6XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1ODo0NS43NDU3NjA2MzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwNDM2OTcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgU1RNTUFDIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYHN0bW1hY19od2lmX2luaXRgIGhhcyBiZWVuIGNhbGxlZC4gVGhhdCdzIHdoZXJlIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gaGFwcGVucywgcmlnaHQ/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyouIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB3aGV0aGVyIG9yIG5vdCBpdCdzIGFjdHVhbGx5IGFjY2Vzc2luZyB0aGUgcmVnaXN0ZXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCdzIHJlYWRpbmcgdGhlIGNoaXAncyBJRCBvciBzZXR0aW5nIHVwIHRoZSBoYXJkd2FyZSB3aXRoIGRlZmF1bHQgdmFsdWVzLiBEb2VzIHRoaXMgZnVuY3Rpb24gc3RhcnQgdGhlIFBIWSBhdXRvbmVnb3RpYXRpb24gc2VxdWVuY2U/IElzIGl0IHByb2JpbmcgdGhlIERNQSBlbmdpbmU/IFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQsIGVzdGFibGlzaGluZyBhIGJhc2VsaW5lIG9mIHdoYXQgYWN0aW9ucyBhcmUgYmVpbmcgcGVyZm9ybWVkIGF0IHRoaXMgc3RhZ2UuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgcmVnaXN0ZXIgYWNjZXNzZXMgdG8gZW5zdXJlIHRoZSBkcml2ZXIgaXMgc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgY29ycmVjdGx5IGFuZCB0byBjYXRjaCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBlYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NjcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjUyLjc1MDEzMjkyMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0ODA2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2h3aWZfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTI5ND1zdG1tYWNfaHdpZl9maW5kKGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSwgdTggc25wc3ZlciwgdTggZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMxNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MzE3OmludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzE4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaD03MDE9aW50IHN0bW1hY19yZXNldChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaDo3MDI6aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNzAzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NDA3PXN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDE2LVxcdC8qIEluaXRpYWxpemUgSFcgSW50ZXJmYWNlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NDE3OlxcdHJldCA9IHN0bW1hY19od2lmX2luaXQocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDE4LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjUyLjgwMDYxOTI3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzQ1Mzc2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTVE1NQUMgSGFyZHdhcmUgSW50ZXJmYWNlIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGZvciB0aGlzIFNUTU1BQyBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgc3RtbWFjX2h3aWZfaW5pdGAgZnVuY3Rpb24gbG9jYXRlZCB3aXRoaW4gYGh3aWYuY2AuIFRoaXMgaXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgdGhlIGhhcmR3YXJlJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZHJpdmVyLCBzZXR0aW5nIHVwIHJlZ2lzdGVycywgYW5kIHByZXBhcmluZyB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQgcGFyYW1ldGVycyBpdCB0YWtlcywgd2hhdCBpdCBkb2VzIHdpdGggdGhlbSwgYW5kIGhvdyBpdCBzZXRzIHVwIHRoZSBjb3JlIGhhcmR3YXJlIHN0cnVjdHVyZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWssIGluIHRlcm1zIG9mIHRoZSBkcml2ZXIncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBTVE1NQUMgY29udHJvbGxlci4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGZ1bmN0aW9uIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIzNSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU4OjU2LjkzNTE1OTcwNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNyxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNzpcXHRpbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIDMxODpcXHR7XFxuIDMxOTpcXHRcXHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGU7XFxuIDMyMDpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbiAzMjE6XFx0XFx0c3RydWN0IHN0bW1hY192ZXJzaW9uIHZlcnNpb247XFxuIDMyMjpcXHRcXHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7XFxuIDMyMzpcXHRcXHRib29sIG5lZWRzX3NldHVwID0gdHJ1ZTtcXG4gMzI0OlxcdFxcdGludCByZXQ7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdHN0bW1hY19nZXRfdmVyc2lvbihwcml2LCBcXHUwMDI2dmVyc2lvbik7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdC8qIFNhdmUgSUQgZm9yIGxhdGVyIHVzZSAqL1xcbiAzMjk6XFx0XFx0cHJpdi1cXHUwMDNlc3lub3BzeXNfaWQgPSB2ZXJzaW9uLnNucHN2ZXI7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdFxcdG1hYyA9IGRldm1fa3phbGxvYyhwcml2LVxcdTAwM2VkZXZpY2UsIHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7XFxuIDMzMjpcXHRcXHRpZiAoIW1hYylcXG4gMzMzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHQvKiBDaGVjayBmb3IgSFcgc3BlY2lmaWMgc2V0dXAgZmlyc3QgKi9cXG4gMzM2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtYWNfc2V0dXApIHtcXG4gMzM3OlxcdFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1hY19zZXR1cChwcml2LCBtYWMpO1xcbiAzMzg6XFx0XFx0XFx0aWYgKHJldClcXG4gMzM5OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM0MDpcXHRcXG4gMzQxOlxcdFxcdFxcdG5lZWRzX3NldHVwID0gZmFsc2U7XFxuIDM0MjpcXHRcXHR9XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtYWMtXFx1MDAzZWlycV9jdHJsX2xvY2spO1xcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHQvKiBGYWxsYmFjayB0byBnZW5lcmljIEhXICovXFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xcbiAzNDk6XFx0XFx0ZW50cnkgPSBzdG1tYWNfaHdpZl9maW5kKGNvcmVfdHlwZSwgcHJpdi1cXHUwMDNlc3lub3BzeXNfaWQsIHZlcnNpb24uZGV2X2lkKTtcXG4gMzUwOlxcdFxcdGlmICghZW50cnkpIHtcXG4gMzUxOlxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2aWNlLFxcbiAzNTI6XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBmaW5kIEhXIElGIChpZD0weCV4LCBnbWFjPSVkLyVkKVxcXFxuXFxcIixcXG4gMzUzOlxcdFxcdFxcdFxcdHZlcnNpb24uc25wc3ZlciwgY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQyxcXG4gMzU0OlxcdFxcdFxcdFxcdGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUM0KTtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM1NzpcXHRcXHR9XFxuIDM1ODpcXHRcXG4gMzU5OlxcdFxcdC8qIE9ubHkgdXNlIGdlbmVyaWMgSFcgaGVscGVycyBpZiBuZWVkZWQgKi9cXG4gMzYwOlxcdFxcdG1hYy1cXHUwMDNlZGVzYyA9IG1hYy1cXHUwMDNlZGVzYyA/IDogZW50cnktXFx1MDAzZWRlc2M7XFxuIDM2MTpcXHRcXHRtYWMtXFx1MDAzZWRtYSA9IG1hYy1cXHUwMDNlZG1hID8gOiBlbnRyeS1cXHUwMDNlZG1hO1xcbiAzNjI6XFx0XFx0bWFjLVxcdTAwM2VtYWMgPSBtYWMtXFx1MDAzZW1hYyA/IDogZW50cnktXFx1MDAzZW1hYztcXG4gMzYzOlxcdFxcdG1hYy1cXHUwMDNlcHRwID0gbWFjLVxcdTAwM2VwdHAgPyA6IGVudHJ5LVxcdTAwM2Vod3RpbWVzdGFtcDtcXG4gMzY0OlxcdFxcdG1hYy1cXHUwMDNlbW9kZSA9IG1hYy1cXHUwMDNlbW9kZSA/IDogZW50cnktXFx1MDAzZW1vZGU7XFxuIDM2NTpcXHRcXHRtYWMtXFx1MDAzZXRjID0gbWFjLVxcdTAwM2V0YyA/IDogZW50cnktXFx1MDAzZXRjO1xcbiAzNjY6XFx0XFx0bWFjLVxcdTAwM2VtbWMgPSBtYWMtXFx1MDAzZW1tYyA/IDogZW50cnktXFx1MDAzZW1tYztcXG4gMzY3OlxcdFxcdG1hYy1cXHUwMDNlZXN0ID0gbWFjLVxcdTAwM2Vlc3QgPyA6IGVudHJ5LVxcdTAwM2Vlc3Q7XFxuIDM2ODpcXHRcXHRtYWMtXFx1MDAzZXZsYW4gPSBtYWMtXFx1MDAzZXZsYW4gPyA6IGVudHJ5LVxcdTAwM2V2bGFuO1xcbiAzNjk6XFx0XFxuIDM3MDpcXHRcXHRwcml2LVxcdTAwM2VodyA9IG1hYztcXG4gMzcxOlxcdFxcdHByaXYtXFx1MDAzZWZwZV9jZmcucmVnID0gZW50cnktXFx1MDAzZXJlZ3MuZnBlX3JlZztcXG4gMzcyOlxcdFxcdHByaXYtXFx1MDAzZXB0cGFkZHIgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBlbnRyeS1cXHUwMDNlcmVncy5wdHBfb2ZmO1xcbiAzNzM6XFx0XFx0cHJpdi1cXHUwMDNlbW1jYWRkciA9IHByaXYtXFx1MDAzZWlvYWRkciArIGVudHJ5LVxcdTAwM2VyZWdzLm1tY19vZmY7XFxuIDM3NDpcXHRcXHRtZW1jcHkoXFx1MDAyNnByaXYtXFx1MDAzZXB0cF9jbG9ja19vcHMsIGVudHJ5LVxcdTAwM2VwdHAsXFxuIDM3NTpcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwdHBfY2xvY2tfaW5mbykpO1xcbiAzNzY6XFx0XFxuIDM3NzpcXHRcXHRpZiAoZW50cnktXFx1MDAzZWVzdClcXG4gMzc4OlxcdFxcdFxcdHByaXYtXFx1MDAzZWVzdGFkZHIgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBlbnRyeS1cXHUwMDNlcmVncy5lc3Rfb2ZmO1xcbiAzNzk6XFx0XFxuIDM4MDpcXHRcXHQvKiBFbnRyeSBmb3VuZCAqL1xcbiAzODE6XFx0XFx0aWYgKG5lZWRzX3NldHVwKSB7XFxuIDM4MjpcXHRcXHRcXHRyZXQgPSBlbnRyeS1cXHUwMDNlc2V0dXAocHJpdik7XFxuIDM4MzpcXHRcXHRcXHRpZiAocmV0KVxcbiAzODQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzg1OlxcdFxcdH1cXG4gMzg2OlxcdFxcbiAzODc6XFx0XFx0LyogU2F2ZSBxdWlya3MsIGlmIG5lZWRlZCBmb3IgcG9zdGVyaW9yIHVzZSAqL1xcbiAzODg6XFx0XFx0cHJpdi1cXHUwMDNlaHdpZl9xdWlya3MgPSBlbnRyeS1cXHUwMDNlcXVpcmtzO1xcbiAzODk6XFx0XFxuIDM5MDpcXHRcXHRyZXR1cm4gMDtcXG4gMzkxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTg6NTYuOTM1Mjc2NzA0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjMyNjE5Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTVE1NQUMgVmVyc2lvbiBDaGVjayoqXG5cbkFscmlnaHQsIHRoZSBjb2RlJ3MgY2FsbGluZyBgc3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFx1MDAyNnZlcnNpb24pYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0J3MgZG9pbmcuIExldCdzIGRpZyBpbnRvIHRoYXQgYHN0bW1hY19nZXRfdmVyc2lvbmAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSSdtIGFzc3VtaW5nIHRoaXMgaXMgcHJvYmFibHkgaG93IHRoZSBkcml2ZXIgZmlndXJlcyBvdXQgdGhlIGhhcmR3YXJlIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uLCBvciBhIHN1cHBvcnRlZCBmZWF0dXJlIHNldCBmb3IgdGhlIFNUTU1BQyBFdGhlcm5ldCBjb250cm9sbGVyIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlIGZvciBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIEl0IGlzIG1vc3QgbGlrZWx5IHBhc3NpbmcgYSBwb2ludGVyIHRvIGEgYHZlcnNpb25gIHN0cnVjdCwgZmlsbGluZyBpbiBoYXJkd2FyZS1zcGVjaWZpYyB2ZXJzaW9uIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgYmUgY3J1Y2lhbCBmb3IgdGhlIGRyaXZlcidzIG9wZXJhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkIHByb3Blcmx5LCBhbmQgdGhlIGNvZGUgdGFrZXMgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBiYXNlZCBvbiB0aGUgaWRlbnRpZmllZCBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIEkgZXhwZWN0IHRoaXMgY2FsbCBpcyBmdW5kYW1lbnRhbCBmb3IgdmVyaWZ5aW5nIGNvbXBhdGliaWxpdHkgYW5kIHBvdGVudGlhbGx5IGVuYWJsaW5nIG9yIGRpc2FibGluZyBjZXJ0YWluIGRyaXZlciBmZWF0dXJlcyBiYXNlZCBvbiB0aGUgZGV0ZWN0ZWQgaGFyZHdhcmUuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSByZXR1cm5lZCB2ZXJzaW9uIHN0cnVjdCBpcyB0aGVuIHVzZWQ7IHRoYXQncyB0aGUgbmV4dCBjcml0aWNhbCBwaWVjZSBvZiB0aGlzIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NTIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU5OjA4LjE2Nzg5OTk1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwOTMzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2dldF92ZXJzaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTY9c3RydWN0IHN0bW1hY192ZXJzaW9uIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjE6c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTMxNz1pbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMjY6XFx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFxcdTAwMjZ2ZXJzaW9uKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OTowOC4yMTk5OTg3MDJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMTEzNTE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhbmQgZGV2aWNlIGRyaXZlcnM6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIHRvIGBzdG1tYWNfZ2V0X3ZlcnNpb25gKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhcjogZGl2ZSBpbnRvIHRoZSBgc3RtbWFjX2dldF92ZXJzaW9uYCBmdW5jdGlvbi4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVW5kZXJzdGFuZGluZyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBvZiB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE1BQyBkcml2ZXIgaXMgY3J1Y2lhbCwgaXQncyB0aGUgZm91bmRhdGlvbiBvZiBhbG1vc3QgZXZlcnl0aGluZy4gSXQgdXN1YWxseSBpbnZvbHZlcyByZWFkaW5nIHJlZ2lzdGVycywgbWF5YmUgc29tZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBkcml2ZXIsIGFuZCBmb3JtYXR0aW5nIHRoYXQgZGF0YSBmb3IgdGhlIHVzZXIuIEknbGwgbmVlZCB0byBsb29rIGZvciB3aGVyZSBpdCdzIGRlZmluZWQuIElzIGl0IGEgZGlyZWN0IHJlZ2lzdGVyIHJlYWQsIG9yIGRvZXMgaXQgaW52b2x2ZSBzb21lIG1vcmUgY29tcGxleCBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIGRyaXZlcidzIHJldmlzaW9uLCBmZWF0dXJlIHNldCwgb3IgaGFyZHdhcmUgY29tcGF0aWJpbGl0eT8gSG9wZWZ1bGx5LCBpdCBpcyB3ZWxsIGRvY3VtZW50ZWQ7IG90aGVyd2lzZSBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWdpc3Rlci1sZXZlbCBpbnRlcnByZXRhdGlvbiBvZiBpdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBkZWJ1Z2dpbmcgYW5kIGVuc3VyaW5nIGNvbXBhdGliaWxpdHksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucyBvciBrZXJuZWwgdmVyc2lvbnMuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIGl0J3Mgd29ya2luZyB3aXRoIGFuZCBob3cgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyMzgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OToxMi4yNDExMzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMTpcXHRzdGF0aWMgdm9pZCBzdG1tYWNfZ2V0X3ZlcnNpb24oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbiAgMjI6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxcbiAgMjM6XFx0e1xcbiAgMjQ6XFx0XFx0ZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlO1xcbiAgMjU6XFx0XFx0dW5zaWduZWQgaW50IHZlcnNpb25fb2Zmc2V0O1xcbiAgMjY6XFx0XFx0dTMyIHZlcnNpb247XFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdHZlci1cXHUwMDNlc25wc3ZlciA9IDA7XFxuICAyOTpcXHRcXHR2ZXItXFx1MDAzZWRldl9pZCA9IDA7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9NQUMxMDApXFxuICAzMjpcXHRcXHRcXHRyZXR1cm47XFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDKVxcbiAgMzU6XFx0XFx0XFx0dmVyc2lvbl9vZmZzZXQgPSBHTUFDX1ZFUlNJT047XFxuICAzNjpcXHRcXHRlbHNlXFxuICAzNzpcXHRcXHRcXHR2ZXJzaW9uX29mZnNldCA9IEdNQUM0X1ZFUlNJT047XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdHZlcnNpb24gPSByZWFkbChwcml2LVxcdTAwM2Vpb2FkZHIgKyB2ZXJzaW9uX29mZnNldCk7XFxuICA0MDpcXHRcXHRpZiAodmVyc2lvbiA9PSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU5OjEyLjI0MTI1MDU5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxODM0NTU2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWZXJzaW9uIFJlYWQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UncmUgcHVsbGluZyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbi4gVGhlIGNvZGUgaXMgcmVhZGluZyBmcm9tIGBwcml2LVx1MDAzZWlvYWRkcmAgb2Zmc2V0IGJ5IGB2ZXJzaW9uX29mZnNldGAuIFN0YW5kYXJkIHN0dWZmLiBCdXQgdGhlbiwgSSdtIHRoaW5raW5nLCB3aGF0IGhhcHBlbnMgd2l0aCBhIGR1bW15IGRldmljZT8gIGByZWFkbGAgY291bGQgY291Z2ggdXAgZWl0aGVyIGAweGZmZmZmZmZmYCBvciBhIHN0cmFpZ2h0IGAwYCwgZGVwZW5kaW5nIG9uIGhvdyB0aGUgbWVtb3J5IG1hcHBpbmcncyBzZXQgdXAuIFRoZSByZWFsbHkgaW50ZXJlc3Rpbmcgc2NlbmFyaW8gaXMgaWYgd2UgZ2V0IGEgYDBgLiBUaGF0IGxpa2VseSBtZWFucyB3ZSdsbCBmYWlsIHRvIElEIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gTGV0J3MgZGlnIGludG8gd2hhdCBoYXBwZW5zIHNwZWNpZmljYWxseSBpZiBgdmVyc2lvbiA9PSAwYC4gV2UndmUgZ290IHRvIGNvdmVyIGFsbCB0aGUgYmFzZXMgdG8gbWFrZSB0aGlzIHRydWx5IHJvYnVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MTMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU5OjE5LjQyNDcwOTE3MloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdGlmICh2ZXJzaW9uID09IDApIHtcXG4gIDQxOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlZlcnNpb24gSUQgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuICA0MjpcXHRcXHRcXHRyZXR1cm47XFxuICA0MzpcXHRcXHR9XFxuICA0NDpcXHRcXG4gIDQ1OlxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlVzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XFxcXG5cXFwiLFxcbiAgNDY6XFx0XFx0XFx0IEZJRUxEX0dFVChEV01BQ19VU0VSVkVSLCB2ZXJzaW9uKSxcXG4gIDQ3OlxcdFxcdFxcdCBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbikpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHR2ZXItXFx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XFxuICA1MDpcXHRcXHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXFxuICA1MTpcXHRcXHRcXHR2ZXItXFx1MDAzZWRldl9pZCA9IEZJRUxEX0dFVChEV01BQ19VU0VSVkVSLCB2ZXJzaW9uKTtcXG4gIDUyOlxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0c3RhdGljIHZvaWQgc3RtbWFjX2R3bWFjX21vZGVfcXVpcmsoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0c3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjID0gcHJpdi1cXHUwMDNlaHc7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdGlmIChwcml2LVxcdTAwM2VjaGFpbl9tb2RlKSB7XFxuICA1OTpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJDaGFpbiBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OToxOS40MjQ4MzQ2MjJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNTg0OTIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBzbmlwcGV0LCBkZWxpdmVyZWQgYXMgaWYgaXQncyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRlY29kaW5nIHRoZSBWZXJzaW9uIENoZWNrKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQ6IGBpZiB2ZXJzaW9uID09IDBgLiBTbywgaWYgdGhlIHNvZnR3YXJlJ3MgdmVyc2lvbiBpcyBhdCBpdHMgaW5pdGlhbCBzdGF0ZSwgd2hpY2ggSSB1c3VhbGx5IHJlcHJlc2VudCB3aXRoICcwJywgdGhlbiB0aGlzIHZhcmlhYmxlLCBgdmVyLVx1MDAzZXNucHN2ZXJgLCBpcyBhbHNvIGdvaW5nIHRvIGJlIHNldCB0byB6ZXJvLiBUaGF0IG1ha2VzIHNlbnNlLCBrZWVwcyB0aGluZ3MgY29uc2lzdGVudCBmcm9tIHRoZSBzdGFydC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgd2hhdCBoYXBwZW5zIG5leHQuIFdpdGggYHNucHN2ZXJgIGNvbmZpcm1lZCBhcyB6ZXJvLCB0aGUgY29kZSBwcm9jZWVkcyB0byBjYWxsIGBzdG1tYWNfaHdpZl9maW5kYC4gQ3J1Y2lhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCBgc25wc3ZlciA9IDBgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGFzIGBzdG1tYWNfaHdpZl9maW5kYCBsaWtlbHkgdXNlcyB0aGUgYHNucHN2ZXJgIHZhbHVlIHRvIGRldGVybWluZSB3aGljaCBoYXJkd2FyZSBpbnRlcmZhY2UgdG8gYXR0YWNoIHRvLCBvciBwb3NzaWJseSBob3cgdG8gaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgYXBwcm9wcmlhdGVseS4gUGFzc2luZyB6ZXJvIGNvdWxkIG1lYW4gYSBkZWZhdWx0IG9yIGxlZ2FjeSBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIGEgJ2Jlc3QgZ3Vlc3MnIGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyMSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTk6MjQuNDMwNjg3ODQxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk0OlxcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXFxuIDI5NTpcXHR7XFxuIDI5NjpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbiAyOTc6XFx0XFx0aW50IGk7XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdGZvciAoaSA9IEFSUkFZX1NJWkUoc3RtbWFjX2h3KSAtIDE7IGkgXFx1MDAzZT0gMDsgaS0tKSB7XFxuIDMwMDpcXHRcXHRcXHRlbnRyeSA9IFxcdTAwMjZzdG1tYWNfaHdbaV07XFxuIDMwMTpcXHRcXG4gMzAyOlxcdFxcdFxcdGlmIChjb3JlX3R5cGUgIT0gZW50cnktXFx1MDAzZWNvcmVfdHlwZSlcXG4gMzAzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMDQ6XFx0XFx0XFx0LyogVXNlIHN5bm9wc3lzX2lkIHZhciBiZWNhdXNlIHNvbWUgc2V0dXBzIGNhbiBvdmVycmlkZSB0aGlzICovXFxuIDMwNTpcXHRcXHRcXHRpZiAoc25wc3ZlciBcXHUwMDNjIGVudHJ5LVxcdTAwM2VtaW5faWQpXFxuIDMwNjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzA3OlxcdFxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQyBcXHUwMDI2XFx1MDAyNlxcbiAzMDg6XFx0XFx0XFx0ICAgIGRldl9pZCAhPSBlbnRyeS1cXHUwMDNlZGV2X2lkKVxcbiAzMDk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4gMzEyOlxcdFxcdH1cXG4gMzEzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OToyNC40MzA4MjU5MDFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3NzUwMTk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIHRoZSBTTlAgVmVyc2lvbiBhbmQgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIqKlxuXG5BbHJpZ2h0LCBzbyBpZiBJJ20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgdGhlIGN1cnJlbnQgbG9naWMgaXMgKnZlcnkqIHNwZWNpZmljIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBgc25wc3ZlcmAgdmFyaWFibGUgYmVpbmcgZXF1YWwgdG8gemVyby4gSXQgbWVhbnMgdGhlIGZpbHRlcmluZyB3aWxsIGJlIGluY3JlZGlibHkgc3RyaWN0LCBvbmx5IHB1bGxpbmcgaW4gZW50cmllcyB3aGVyZSBgbWluX2lkYCBpcyAqYWxzbyogemVyby4gVGhhdCdzIGEgY3JpdGljYWwgcG9pbnQgdG8gbm90ZSwgYXMgaXQgZHJhc3RpY2FsbHkgbGltaXRzIHRoZSBwb3RlbnRpYWwgbWF0Y2hlcyBpbiB0aGUgZGF0YWJhc2UuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGludGVycHJldGluZyB0aGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkgb3IgcHJvY2VzcyB0aGF0J3MgdXNpbmcgdGhpcyBjb25kaXRpb24uIEl04oCZcyBlc3NlbnRpYWxseSBhIFwic3RyaWN0IG1hdGNoXCIgc2NlbmFyaW8uXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHN0bW1hY19od2AgYXJyYXkuIEknbSBhc3N1bWluZyB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIGZvciB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE1BQyBkcml2ZXIsIGJ1dCBJIG5lZWQgdG8gZGl2ZSBpbiBhbmQgY29uZmlybSB0aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIGlzIHJlcHJlc2VudGVkIGF0IHRoaXMgbGV2ZWwsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIGFuZCBob3cgaXQncyBoYW5kbGVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgY29ycmVjdC4gTGV04oCZcyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNDksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU5OjMxLjAwODMzMDc4MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzODM1MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19od1xcXFxbXFxcXF1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0xMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMTI3LVxcdGludCAoKnF1aXJrcykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MTI4On0gc3RtbWFjX2h3W10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTEyOS1cXHQvKiBOT1RFOiBOZXcgSFcgdmVyc2lvbnMgc2hhbGwgZ28gdG8gdGhlIGVuZCBvZiB0aGlzIHRhYmxlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU5OjMxLjMxMjE3MjgxM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDUzMTAwMzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHN0bW1hY19od2AgQXJyYXkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc3RtbWFjX2h3YCBhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSwgcHVycG9zZSwgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIFNUTU1BQyBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyZWF0IGl0IGFzIGEgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIsIGEgY29sbGVjdGlvbiBvZiByZWdpc3RlcnMsIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLlxuXG5JJ20gbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCBwb3RlbnRpYWwgdXNlIGNhc2VzLiBJcyB0aGlzIGEgbG9vay11cCB0YWJsZSBmb3IgcmVnaXN0ZXIgb2Zmc2V0cz8gQXJlIHRoZXJlIGJpdGZpZWxkIGRlZmluaXRpb25zIGluIGhlcmUsIHBlcmhhcHMgb3JnYW5pemVkIGJ5IGZ1bmN0aW9uYWwgYmxvY2sgd2l0aGluIHRoZSBNQUM/IEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgRE1BIGNoYW5uZWwgY29uZmlndXJhdGlvbiwgTUFDIGFkZHJlc3MgcmVnaXN0ZXJzLCBpbnRlcnJ1cHQgY29udHJvbCwgYW5kIHN0YXRpc3RpY3MgY291bnRlcnMg4oCTIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHMuIEnigJltIGV4cGVjdGluZyBhIG1peCBvZiByYXcgcmVnaXN0ZXIgYWRkcmVzc2VzIChvciBzeW1ib2xpYyByZXByZXNlbnRhdGlvbnMpLCBtYXNrIHZhbHVlcyBmb3IgYml0ZmllbGQgbWFuaXB1bGF0aW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBkZWZhdWx0IHZhbHVlcyBvciBpbml0aWFsaXphdGlvbiBzZXR0aW5ncy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYXJyYXkgZWxlbWVudHMsIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcyBvciBncm91cGluZ3MgdGhhdCBpbXBseSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBjb25maWd1cmF0aW9ucy4gVGhlIG5hbWluZyBjb252ZW50aW9uIGhlcmUgd2lsbCBiZSBjcml0aWNhbC4gSWYgSSBzZWUgY29uc2lzdGVudCBwcmVmaXhlcyBvciBzdWZmaXhlcywgdGhhdCBjb3VsZCByZXZlYWwgdmFsdWFibGUgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXIgb3JnYW5pemF0aW9uIGFuZCBvdmVyYWxsIG1vZHVsZSBpbnRlcmFjdGlvbi4gVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZSBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIGFuZCBjb250cm9scyB0aGUgU1RNTUFDIGhhcmR3YXJlLiBUaGlzIGFycmF5IGhvbGRzIHRoZSBrZXkgdG8gdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uLCBzbyBsZXQncyBzdGFydCByZWFkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU0MSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA5OjU5OjM3Ljc2NTI3NjgyN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyODpcXHR9IHN0bW1hY19od1tdID0ge1xcbiAxMjk6XFx0XFx0LyogTk9URTogTmV3IEhXIHZlcnNpb25zIHNoYWxsIGdvIHRvIHRoZSBlbmQgb2YgdGhpcyB0YWJsZSAqL1xcbiAxMzA6XFx0XFx0e1xcbiAxMzE6XFx0XFx0XFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfTUFDMTAwLFxcbiAxMzI6XFx0XFx0XFx0Lm1pbl9pZCA9IDAsXFxuIDEzMzpcXHRcXHRcXHQucmVncyA9IHtcXG4gMTM0OlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX0dNQUMzX1hfT0ZGU0VULFxcbiAxMzU6XFx0XFx0XFx0XFx0Lm1tY19vZmYgPSBNTUNfR01BQzNfWF9PRkZTRVQsXFxuIDEzNjpcXHRcXHRcXHR9LFxcbiAxMzc6XFx0XFx0XFx0LmRlc2MgPSBOVUxMLFxcbiAxMzg6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd21hYzEwMF9kbWFfb3BzLFxcbiAxMzk6XFx0XFx0XFx0Lm1hYyA9IFxcdTAwMjZkd21hYzEwMF9vcHMsXFxuIDE0MDpcXHRcXHRcXHQuaHd0aW1lc3RhbXAgPSBcXHUwMDI2ZHdtYWMxMDAwX3B0cCxcXG4gMTQxOlxcdFxcdFxcdC5wdHAgPSBcXHUwMDI2ZHdtYWMxMDAwX3B0cF9jbG9ja19vcHMsXFxuIDE0MjpcXHRcXHRcXHQubW9kZSA9IE5VTEwsXFxuIDE0MzpcXHRcXHRcXHQudGMgPSBOVUxMLFxcbiAxNDQ6XFx0XFx0XFx0Lm1tYyA9IFxcdTAwMjZkd21hY19tbWNfb3BzLFxcbiAxNDU6XFx0XFx0XFx0LnNldHVwID0gZHdtYWMxMDBfc2V0dXAsXFxuIDE0NjpcXHRcXHRcXHQucXVpcmtzID0gc3RtbWFjX2R3bWFjMV9xdWlya3MsXFxuIDE0NzpcXHRcXHR9LCB7XFxuIDE0ODpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDLFxcbiAxNDk6XFx0XFx0XFx0Lm1pbl9pZCA9IDAsXFxuIDE1MDpcXHRcXHRcXHQucmVncyA9IHtcXG4gMTUxOlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX0dNQUMzX1hfT0ZGU0VULFxcbiAxNTI6XFx0XFx0XFx0XFx0Lm1tY19vZmYgPSBNTUNfR01BQzNfWF9PRkZTRVQsXFxuIDE1MzpcXHRcXHRcXHR9LFxcbiAxNTQ6XFx0XFx0XFx0LmRlc2MgPSBOVUxMLFxcbiAxNTU6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd21hYzEwMDBfZG1hX29wcyxcXG4gMTU2OlxcdFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHdtYWMxMDAwX29wcyxcXG4gMTU3OlxcdFxcdFxcdC5od3RpbWVzdGFtcCA9IFxcdTAwMjZkd21hYzEwMDBfcHRwLFxcbiAxNTg6XFx0XFx0XFx0LnB0cCA9IFxcdTAwMjZkd21hYzEwMDBfcHRwX2Nsb2NrX29wcyxcXG4gMTU5OlxcdFxcdFxcdC5tb2RlID0gTlVMTCxcXG4gMTYwOlxcdFxcdFxcdC50YyA9IE5VTEwsXFxuIDE2MTpcXHRcXHRcXHQubW1jID0gXFx1MDAyNmR3bWFjX21tY19vcHMsXFxuIDE2MjpcXHRcXHRcXHQuc2V0dXAgPSBkd21hYzEwMDBfc2V0dXAsXFxuIDE2MzpcXHRcXHRcXHQucXVpcmtzID0gc3RtbWFjX2R3bWFjMV9xdWlya3MsXFxuIDE2NDpcXHRcXHR9LCB7XFxuIDE2NTpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNCxcXG4gMTY2OlxcdFxcdFxcdC5taW5faWQgPSAwLFxcbiAxNjc6XFx0XFx0XFx0LnJlZ3MgPSB7XFxuIDE2ODpcXHRcXHRcXHRcXHQucHRwX29mZiA9IFBUUF9HTUFDNF9PRkZTRVQsXFxuIDE2OTpcXHRcXHRcXHRcXHQubW1jX29mZiA9IE1NQ19HTUFDNF9PRkZTRVQsXFxuIDE3MDpcXHRcXHRcXHRcXHQuZXN0X29mZiA9IEVTVF9HTUFDNF9PRkZTRVQsXFxuIDE3MTpcXHRcXHRcXHR9LFxcbiAxNzI6XFx0XFx0XFx0LmRlc2MgPSBcXHUwMDI2ZHdtYWM0X2Rlc2Nfb3BzLFxcbiAxNzM6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd21hYzRfZG1hX29wcyxcXG4gMTc0OlxcdFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHdtYWM0X29wcyxcXG4gMTc1OlxcdFxcdFxcdC52bGFuID0gXFx1MDAyNmR3bWFjX3ZsYW5fb3BzLFxcbiAxNzY6XFx0XFx0XFx0Lmh3dGltZXN0YW1wID0gXFx1MDAyNnN0bW1hY19wdHAsXFxuIDE3NzpcXHRcXHRcXHQucHRwID0gXFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OTozNy43NjUzNzkyNzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc0MTI1NjQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNOUFNWIERyaXZlciBDb3JlIE1hdGNoaW5nIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIgbG9naWMsIGFuZCBpdCBzZWVtcyBsaWtlIGlmIGBzbnBzdmVyYCBpcyB6ZXJvLCB0aGVuIHdlJ3JlIGdvaW5nIHRvIG1hdGNoIGBEV01BQ19DT1JFX0dNQUM0YCB0byBhIGBtaW5faWRgIG9mIHplcm8gKG9yIGEgc2ltaWxhciBjb25zdGFudCwgYmFzZWQgb24gYGNvcmVfdHlwZWApLiBUaGF0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNvbXBhcmlzb24uIEJ1dCwgaG9sZCBvbiBhIHNlYy4uLndoZXJlIGRvZXMgYGNvcmVfdHlwZWAgYWN0dWFsbHkgY29tZSBmcm9tPyBJIGtub3cgaXQncyBiZWluZyBhY2Nlc3NlZCB0aHJvdWdoIGBwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlYC4gTmVlZCB0byB0cmFjZSB0aGF0IGJhY2suLi5cblxuUmlnaHQuIEl0IGxvb2tzIGxpa2UgYHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGVgIGlzIGluaXRpYWxpemVkIHdpdGhpbiBgc3RtbWFjX3BjaV9wcm9iZWAsIHVzaW5nIGBpbmZvLVx1MDAzZXNldHVwKHBkZXYsIHBsYXQpYC4gVGhlIHBsYXRmb3JtIGRhdGEgaXMgdGhlbiBzZXR1cCBmcm9tIHdpdGhpbiB0aGUgcHJvYmUgZnVuY3Rpb24uIFNvIGl0IGxvb2tzIGxpa2UgdGhlIGBpbmZvLVx1MDAzZXNldHVwYCBmdW5jdGlvbiBpcyBrZXkgdG8gdGhlIG92ZXJhbGwgZGV2aWNlIHNldHVwLCBhbmQgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBzdG1tYWNfcGNpX2luZm9gIHNldHVwIGZ1bmN0aW9ucyB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cgYGNvcmVfdHlwZWAgZ2V0cyBhc3NpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3OTAsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OTo0NS41MDY2Mzc5NjRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjgzMDkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfcGNpX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTk6c3RydWN0IHN0bW1hY19wY2lfaW5mbyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwLVxcdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0zMz1zdGF0aWMgaW50IHN0bW1hY19kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHN0bW1hY19wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNTEtXFx0LnNldHVwID0gc3RtbWFjX2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz01ND1zdGF0aWMgaW50IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTAyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHNucHNfZ21hYzVfcGNpX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMy1cXHQuc2V0dXAgPSBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMTg9c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEyMTpcXHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMi1cXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA0OlxcdHsgUENJX0RFVklDRV9EQVRBKFNUTU1BQywgU1RNTUFDLCBcXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDU6XFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNSUNSTywgTUFDLCBcXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDYtXFx0eyBQQ0lfREVWSUNFX0RBVEEoU1lOT1BTWVMsIEdNQUM1X0lELCBcXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTk6NDUuNjgzNDgzNTM4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MzUwMjMwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHdlbGwtdmVyc2VkIGluIHRoZSBzdWJqZWN0IG1hdHRlcjpcblxuKipDaGVja2luZyBgc25wc19nbWFjNV9kZWZhdWx0X2RhdGFgKipcblxuQWxyaWdodCwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGFuYWx5c2lzIG9yIG1vZGVsaW5nLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGZvdW5kYXRpb25hbCBkYXRhc2V0LCBgc25wc19nbWFjNV9kZWZhdWx0X2RhdGFgLCBpcyBpbiBvcmRlci4gVGhpcyBpcyB0aGUgY29ybmVyc3RvbmUuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpdHMgaW50ZWdyaXR5IGFuZCBzdWl0YWJpbGl0eS4gSSdtIHRoaW5raW5nOiBpcyBpdCB0aGUgY29ycmVjdCB2ZXJzaW9uPyBBcmUgdGhlIGV4cGVjdGVkIGNvbHVtbnMgcHJlc2VudCBhbmQgY29ycmVjdGx5IGxhYmVsZWQ/IEFyZSB0aGUgZGF0YSB0eXBlcyBjb25zaXN0ZW50IHdpdGggd2hhdCBJJ20gZXhwZWN0aW5nIGZvciB0aGUgdmFyaWFibGVzIHdpdGhpbj8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGdsYXJpbmcgaXNzdWVzLCBtaXNzaW5nIHZhbHVlcyB0aGF0IG5lZWQgaW1tZWRpYXRlIGF0dGVudGlvbiwgb3IgdW5leHBlY3RlZCBvdXRsaWVycyB0aGF0IHdvdWxkIHRocm93IG9mZiBhbnkgZG93bnN0cmVhbSBhbmFseXNlcz8gRXNzZW50aWFsbHksIGlzIHRoZSBkYXRhIGNsZWFuLCBjb21wbGV0ZSwgYW5kIGluIGEgZm9ybWF0IHRoYXQncyByZWFkeSBmb3IgbWUgdG8gZ2V0IHRvIHRoZSBtZWF0IG9mIHRoaW5ncz8gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9ucyBJJ3ZlIG1hZGUgYWJvdXQgdGhpcyBkYXRhc2V0IGFyZSBhY3R1YWxseSBjb3JyZWN0LiBHb3R0YSBzdGFydCB3aXRoIGEgc29saWQgZm91bmRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwNjksIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OTo1MS40MTg1MDg3NDRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU0OlxcdHN0YXRpYyBpbnQgc25wc19nbWFjNV9kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuICA1NTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpXFxuICA1NjpcXHR7XFxuICA1NzpcXHRcXHRpbnQgaTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0cGxhdC1cXHUwMDNlY2xrX2NzciA9IFNUTU1BQ19DU1JfMjUwXzMwME07XFxuICA2MDpcXHRcXHRwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgPSBEV01BQ19DT1JFX0dNQUM0O1xcbiAgNjE6XFx0XFx0cGxhdC1cXHUwMDNlZm9yY2Vfc2ZfZG1hX21vZGUgPSB0cnVlO1xcbiAgNjI6XFx0XFx0cGxhdC1cXHUwMDNlZmxhZ3MgfD0gU1RNTUFDX0ZMQUdfVFNPX0VOO1xcbiAgNjM6XFx0XFx0cGxhdC1cXHUwMDNlcG10ID0gdHJ1ZTtcXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0LyogU2V0IGRlZmF1bHQgbnVtYmVyIG9mIFJYIGFuZCBUWCBxdWV1ZXMgdG8gdXNlICovXFxuICA2NjpcXHRcXHRwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlID0gNDtcXG4gIDY3OlxcdFxcdHBsYXQtXFx1MDAzZXJ4X3F1ZXVlc190b191c2UgPSA0O1xcbiAgNjg6XFx0XFxuICA2OTpcXHRcXHRwbGF0LVxcdTAwM2V0eF9zY2hlZF9hbGdvcml0aG0gPSBNVExfVFhfQUxHT1JJVEhNX1dSUjtcXG4gIDcwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlOyBpKyspIHtcXG4gIDcxOlxcdFxcdFxcdHBsYXQtXFx1MDAzZXR4X3F1ZXVlc19jZmdbaV0ubW9kZV90b191c2UgPSBNVExfUVVFVUVfRENCO1xcbiAgNzI6XFx0XFx0XFx0cGxhdC1cXHUwMDNldHhfcXVldWVzX2NmZ1tpXS53ZWlnaHQgPSAyNTtcXG4gIDczOlxcdFxcdFxcdGlmIChpIFxcdTAwM2UgMClcXG4gIDc0OlxcdFxcdFxcdFxcdHBsYXQtXFx1MDAzZXR4X3F1ZXVlc19jZmdbaV0udGJzX2VuID0gMTtcXG4gIDc1OlxcdFxcdH1cXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0cGxhdC1cXHUwMDNlcnhfc2NoZWRfYWxnb3JpdGhtID0gTVRMX1JYX0FMR09SSVRITV9TUDtcXG4gIDc4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlOyBpKyspXFxuICA3OTpcXHRcXHRcXHRwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfY2ZnW2ldLm1vZGVfdG9fdXNlID0gTVRMX1FVRVVFX0RDQjtcXG4gIDgwOlxcdFxcbiAgODE6XFx0XFx0cGxhdC1cXHUwMDNlYnVzX2lkID0gMTtcXG4gIDgyOlxcdFxcdHBsYXQtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfR01JSTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0cGxhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlcGJsID0gMzI7XFxuICA4NTpcXHRcXHRwbGF0LVxcdTAwM2VkbWFfY2ZnLVxcdTAwM2VwYmx4OCA9IHRydWU7XFxuICA4NjpcXHRcXG4gIDg3OlxcdFxcdC8qIEF4aSBDb25maWd1cmF0aW9uICovXFxuICA4ODpcXHRcXHRwbGF0LVxcdTAwM2VheGkgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpwbGF0LVxcdTAwM2VheGkpLCBHRlBfS0VSTkVMKTtcXG4gIDg5OlxcdFxcdGlmICghcGxhdC1cXHUwMDNlYXhpKVxcbiAgOTA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdHBsYXQtXFx1MDAzZWF4aS1cXHUwMDNlYXhpX3dyX29zcl9sbXQgPSAzMTtcXG4gIDkzOlxcdFxcdHBsYXQtXFx1MDAzZWF4aS1cXHUwMDNlYXhpX3JkX29zcl9sbXQgPSAzMTtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0cGxhdC1cXHUwMDNlYXhpLVxcdTAwM2VheGlfZmIgPSBmYWxzZTtcXG4gIDk2OlxcdFxcdHBsYXQtXFx1MDAzZWF4aS1cXHUwMDNlYXhpX2JsZW5fcmVndmFsID0gRE1BX0FYSV9CTEVONCB8IERNQV9BWElfQkxFTjggfFxcbiAgOTc6XFx0XFx0XFx0XFx0XFx0ICAgICBETUFfQVhJX0JMRU4xNiB8IERNQV9BWElfQkxFTjMyO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRyZXR1cm4gMDtcXG4gMTAwOlxcdH1cXG4gMTAxOlxcdFxcbiAxMDI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc25wc19nbWFjNV9wY2lfaW5mbyA9IHtcXG4gMTAzOlxcdFxcdC5zZXR1cCA9IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwOTo1OTo1MS40MTg1OTYzMzRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM1OTgwOTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERXTUFDIENvcmUgYW5kIFRDIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBpZiB0aGUgYGNvcmVfdHlwZWAgaXMgY29uZmlybWVkIGFzIGBEV01BQ19DT1JFX0dNQUM0YCBhbmQgdGhlIGBzbnBzdmVyYCBpcyB6ZXJvLCB3ZSdyZSBkZWZpbml0ZWx5IGhpdHRpbmcgdGhhdCBgRFdNQUNfQ09SRV9HTUFDNGAgZW50cnkgd2l0aCB0aGUgYG1pbl9pZCA9IDBgLiBSaWdodCwgc28sIHRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgcGFydGljdWxhciBlbnRyeSBpcyBsaW5rZWQgdG8gYC50YyA9IFx1MDAyNmR3bWFjNF90Y19vcHNgLiBIbW1tLCBob2xkIG9uIGEgc2Vjb25kLi4udGhpcyBwYXRjaCBpcyBhY3R1YWxseSAqbW9kaWZ5aW5nKiBib3RoIGBkd21hYzRfdGNfb3BzYCBhbmQgYGR3bWFjNTEwX3RjX29wc2AhIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGBkd21hYzRfdGNfb3BzYCBzcGVjaWZpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjIwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTk6NTYuNzc4NDA3NzEyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDM1NDgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkd21hYzRfdGNfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTE3OC1cXHRcXHQubW9kZSA9IE5VTEwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjE3OTpcXHRcXHQudGMgPSBcXHUwMDI2ZHdtYWM0X3RjX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMTgwLVxcdFxcdC5tbWMgPSBcXHUwMDI2ZHdtYWNfbW1jX29wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaD02OTQ9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfb3BzIGR3bWFjNTEwX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg6Njk1OmV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaC02OTYtZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNTEwX3RjX29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTEzOTI9c3RhdGljIGludCB0Y19zZXR1cF9tcXByaW9fdW5pbXBsZW1lbnRlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMzk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjE0MDA6Y29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM0X3RjX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xNDAxLVxcdC5pbml0ID0gdGNfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDk6NTk6NTYuODI4NzY3NzUxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTA3ODI2OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVHJhZmZpYyBDb250cm9sIEluaXRpYWxpemF0aW9uIC0gRGlnZ2luZyBpbnRvIHRoZSBEV01BQyBEcml2ZXIqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHRyYWZmaWMgY29udHJvbCBhbmQgaXQgbG9va3MgbGlrZSBgZHdtYWM0X3RjX29wc2AgaXMgdGhlIGtleSBpbnRlcmZhY2UgaGVyZS4gVGhhdCdzIGdvb2QsIGl0IHN1Z2dlc3RzIHdlJ3JlIHVzaW5nIGEgc3BlY2lmaWMgc2V0IG9mIHRyYWZmaWMgY29udHJvbCBvcGVyYXRpb25zLiBUaGF0IGluIHR1cm4gaW1wbGllcyB0aGF0IGBuZG9fc2V0dXBfdGNgIGlzIGludm9sdmVkLiBPa2F5LCB0aGUgbmF0dXJhbCBmb2xsb3ctb24gaXMgdGhhdCBgc3RtbWFjX3NldHVwX3RjYCB3aWxsIGJlIGNhbGxlZCwgd2hpY2ggdWx0aW1hdGVseSBzaG91bGQgbGVhZCB0byBgc3RtbWFjX3RjX3NldHVwX2V0c2AuIFRoYXQncyB0aGUgZXhwZWN0ZWQgY2hhaW4gb2YgZXZlbnRzLlxuXG5CdXQsIGhhbmcgb24gYSBzZWNvbmQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBoYW5kbGVzIGVkZ2UgY2FzZXMgcHJvcGVybHkuIFdoYXQgYWJvdXQgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBQQ0kgZGV2aWNlIGlzIGEgZHVtbXkgb3Igc3R1Yj8gRG9lcyB0aGUgZHJpdmVyIHByb2JlIGNvbnRpbnVlLCBvciBkb2VzIGl0IGZhaWwgZ3JhY2VmdWxseT8gSSBzaG91bGQgcmVhbGx5IGRvdWJsZS1jaGVjayBgc3RtbWFjX2h3X2luaXRgIGFnYWluLCBqdXN0IHRvIHZlcmlmeSB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBsb2dpYyBhY2NvdW50cyBmb3IgdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgZHJpdmVyIGlzIHJvYnVzdCBpbiB0aG9zZSBzcGVjaWZpYyBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMDEsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMDoxMi43MzY1OTcxMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDIxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3NDIxOlxcdFxcdC8qIEdldCB0aGUgSFcgY2FwYWJpbGl0eSAobmV3IEdNQUMgbmV3ZXIgdGhhbiAzLjUwYSkgKi9cXG43NDIyOlxcdFxcdHByaXYtXFx1MDAzZWh3X2NhcF9zdXBwb3J0ID0gc3RtbWFjX2dldF9od19mZWF0dXJlcyhwcml2KTtcXG43NDIzOlxcdFxcdGlmIChwcml2LVxcdTAwM2Vod19jYXBfc3VwcG9ydCkge1xcbjc0MjQ6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiRE1BIEhXIGNhcGFiaWxpdHkgcmVnaXN0ZXIgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDI1OlxcdFxcbjc0MjY6XFx0XFx0XFx0LyogV2UgY2FuIG92ZXJyaWRlIHNvbWUgZ21hYy9kbWEgY29uZmlndXJhdGlvbiBmaWVsZHM6IGUuZy5cXG43NDI3OlxcdFxcdFxcdCAqIGVuaF9kZXNjLCB0eF9jb2UgKGUuZy4gdGhhdCBhcmUgcGFzc2VkIHRocm91Z2ggdGhlXFxuNzQyODpcXHRcXHRcXHQgKiBwbGF0Zm9ybSkgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhlIEhXIGNhcGFiaWxpdHlcXG43NDI5OlxcdFxcdFxcdCAqIHJlZ2lzdGVyIChpZiBzdXBwb3J0ZWQpLlxcbjc0MzA6XFx0XFx0XFx0ICovXFxuNzQzMTpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VlbmhfZGVzYyA9IHByaXYtXFx1MDAzZWRtYV9jYXAuZW5oX2Rlc2M7XFxuNzQzMjpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwbXQgPSBwcml2LVxcdTAwM2VkbWFfY2FwLnBtdF9yZW1vdGVfd2FrZV91cCBcXHUwMDI2XFx1MDAyNlxcbjc0MzM6XFx0XFx0XFx0XFx0XFx0IShwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX1VTRV9QSFlfV09MKTtcXG43NDM0OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLmhhc2hfdGJfc3opIHtcXG43NDM1OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VtdWx0aWNhc3RfZmlsdGVyX2JpbnMgPVxcbjc0MzY6XFx0XFx0XFx0XFx0XFx0XFx0KEJJVChwcml2LVxcdTAwM2VkbWFfY2FwLmhhc2hfdGJfc3opIFxcdTAwM2NcXHUwMDNjIDUpO1xcbjc0Mzc6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZW1jYXN0X2JpdHNfbG9nMiA9XFxuNzQzODpcXHRcXHRcXHRcXHRcXHRcXHRpbG9nMihwcml2LVxcdTAwM2Vody1cXHUwMDNlbXVsdGljYXN0X2ZpbHRlcl9iaW5zKTtcXG43NDM5OlxcdFxcdFxcdH1cXG43NDQwOlxcdFxcbjc0NDE6XFx0XFx0XFx0LyogVFhDT0UgZG9lc24ndCB3b3JrIGluIHRocmVzaCBETUEgbW9kZSAqL1xcbjc0NDI6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZvcmNlX3RocmVzaF9kbWFfbW9kZSlcXG43NDQzOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X2NvZSA9IGZhbHNlO1xcbjc0NDQ6XFx0XFx0XFx0ZWxzZVxcbjc0NDU6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfY29lID0gcHJpdi1cXHUwMDNlZG1hX2NhcC50eF9jb2U7XFxuNzQ0NjpcXHRcXG43NDQ3OlxcdFxcdFxcdC8qIEluIGNhc2Ugb2YgR01BQzQgcnhfY29lIGlzIGZyb20gSFcgY2FwIHJlZ2lzdGVyLiAqL1xcbjc0NDg6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfY29lID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9jb2U7XFxuNzQ0OTpcXHRcXG43NDUwOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLnJ4X2NvZV90eXBlMilcXG43NDUxOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZSA9IFNUTU1BQ19SWF9DT0VfVFlQRTI7XFxuNzQ1MjpcXHRcXHRcXHRlbHNlIGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLnJ4X2NvZV90eXBlMSlcXG43NDUzOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZSA9IFNUTU1BQ19SWF9DT0VfVFlQRTE7XFxuNzQ1NDpcXHRcXG43NDU1OlxcdFxcdFxcdHN0bW1hY19wcmludF9hY3RwaHlpZihwcml2KTtcXG43NDU2OlxcdFxcdH0gZWxzZSB7XFxuNzQ1NzpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJObyBIVyBETUEgZmVhdHVyZSByZWdpc3RlciBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbjc0NTg6XFx0XFx0fVxcbjc0NTk6XFx0XFxuNzQ2MDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfY29lKSB7XFxuNzQ2MTpcXHRcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlcnhfY3N1bSA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZTtcXG43NDYyOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlJYIENoZWNrc3VtIE9mZmxvYWQgRW5naW5lIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuNzQ2MzpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlc3lub3BzeXNfaWQgXFx1MDAzYyBEV01BQ19DT1JFXzRfMDApXFxuNzQ2NDpcXHRcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJDT0UgVHlwZSAlZFxcXFxuXFxcIiwgcHJpdi1cXHUwMDNlaHctXFx1MDAzZXJ4X2NzdW0pO1xcbjc0NjU6XFx0XFx0fVxcbjc0NjY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X2NvZSlcXG43NDY3OlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlRYIENoZWNrc3VtIGluc2VydGlvbiBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbjc0Njg6XFx0XFxuNzQ2OTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcG10KSB7XFxuNzQ3MDpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJXYWtlLVVwIE9uIExhbiBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMDoxMi43MzY5NzQ5OVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjgxMDAxNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRE1BIEZlYXR1cmUgQ2hlY2sqKlxuXG5Pa2F5LCBzbyB0aGUgYHN0bW1hY19nZXRfaHdfZmVhdHVyZXNgIGZ1bmN0aW9uIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjcml0aWNhbCBwYXJ0IGhlcmUgaXMgd2hhdCBoYXBwZW5zIHdoZW4gaXQgcmV0dXJucyB6ZXJvLiBJdCdzIGp1c3QgYSBzaW1wbGUgXCJObyBIVyBETUEgZmVhdHVyZSByZWdpc3RlciBzdXBwb3J0ZWRcIiBtZXNzYWdlLiBOb3QgZXhhY3RseSBpbmZvcm1hdGl2ZSwgaXMgaXQ/XG5cbkkgbmVlZCB0byBkaWcgZGVlcGVyLiBUaGF0IHByaW50IHN0YXRlbWVudCBpcyBsaWtlbHkganVzdCB0aGUgKmZpcnN0KiBzaWduIG9mIHRyb3VibGUuIFdoYXQgb3RoZXIgY2hlY2tzIG9yIGRvd25zdHJlYW0gcHJvY2Vzc2VzIG1pZ2h0IGJlIGltcGFjdGVkIGJ5IGEgemVybyByZXR1cm4gdmFsdWUgZnJvbSBgc3RtbWFjX2dldF9od19mZWF0dXJlc2A/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMsIGxvb2sgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHRoaXMgZnVuY3Rpb24ncyBvdXRwdXQsIGFuZCBzZWUgd2hlcmUgYSBmYWlsZWQgaGFyZHdhcmUgZmVhdHVyZSBkZXRlY3Rpb24gd291bGQgdHJ1bHkgbWFuaWZlc3QuIFRoaXMgaW5pdGlhbCBtZXNzYWdlIGlzIGp1c3QgdGhlIHRpcCBvZiB0aGUgaWNlYmVyZywgSSdtIHN1cmUuIExldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCB0aGUgcmVhbCByYW1pZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODMzNiwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6MTcuMDE3OTc5MzlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA5NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwNCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzkwNDpcXHRcXHQvKiBPbmx5IERXTUFDIGNvcmUgdmVyc2lvbiA1LjIwIG9ud2FyZHMgc3VwcG9ydHMgSFcgZGVzY3JpcHRvciBwcmVmZXRjaC5cXG43OTA1OlxcdFxcdCAqL1xcbjc5MDY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXN5bm9wc3lzX2lkIFxcdTAwM2MgRFdNQUNfQ09SRV81XzIwKVxcbjc5MDc6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlZGNoZSA9IGZhbHNlO1xcbjc5MDg6XFx0XFxuNzkwOTpcXHRcXHRzdG1tYWNfY2hlY2tfZXRoZXJfYWRkcihwcml2KTtcXG43OTEwOlxcdFxcbjc5MTE6XFx0XFx0bmRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZzdG1tYWNfbmV0ZGV2X29wcztcXG43OTEyOlxcdFxcbjc5MTM6XFx0XFx0bmRldi1cXHUwMDNleGRwX21ldGFkYXRhX29wcyA9IFxcdTAwMjZzdG1tYWNfeGRwX21ldGFkYXRhX29wcztcXG43OTE0OlxcdFxcdG5kZXYtXFx1MDAzZXhza190eF9tZXRhZGF0YV9vcHMgPSBcXHUwMDI2c3RtbWFjX3hza190eF9tZXRhZGF0YV9vcHM7XFxuNzkxNTpcXHRcXG43OTE2OlxcdFxcdG5kZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHxcXG43OTE3OlxcdFxcdFxcdFxcdCAgICBORVRJRl9GX1JYQ1NVTTtcXG43OTE4OlxcdFxcdG5kZXYtXFx1MDAzZXhkcF9mZWF0dXJlcyA9IE5FVERFVl9YRFBfQUNUX0JBU0lDIHwgTkVUREVWX1hEUF9BQ1RfUkVESVJFQ1QgfFxcbjc5MTk6XFx0XFx0XFx0XFx0ICAgICBORVRERVZfWERQX0FDVF9YU0tfWkVST0NPUFk7XFxuNzkyMDpcXHRcXG43OTIxOlxcdFxcdHJldCA9IHN0bW1hY190Y19pbml0KHByaXYsIHByaXYpO1xcbjc5MjI6XFx0XFx0aWYgKCFyZXQpIHtcXG43OTIzOlxcdFxcdFxcdG5kZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVEM7XFxuNzkyNDpcXHRcXHR9XFxuNzkyNTpcXHRcXG43OTI2OlxcdFxcdHN0bW1hY19zZXRfZ3NvX2ZlYXR1cmVzKG5kZXYpO1xcbjc5Mjc6XFx0XFxuNzkyODpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5zcGhlbiBcXHUwMDI2XFx1MDAyNlxcbjc5Mjk6XFx0XFx0ICAgICEocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19TUEhfRElTQUJMRSkpIHtcXG43OTMwOlxcdFxcdFxcdG5kZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPO1xcbjc5MzE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlc3BoX2NhcGFibGUgPSB0cnVlO1xcbjc5MzI6XFx0XFx0XFx0cHJpdi1cXHUwMDNlc3BoX2FjdGl2ZSA9IHByaXYtXFx1MDAzZXNwaF9jYXBhYmxlO1xcbjc5MzM6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiU1BIIGZlYXR1cmUgZW5hYmxlZFxcXFxuXFxcIik7XFxuNzkzNDpcXHRcXHR9XFxuNzkzNTpcXHRcXG43OTM2OlxcdFxcdC8qIElkZWFsbHkgb3VyIGhvc3QgRE1BIGFkZHJlc3Mgd2lkdGggaXMgdGhlIHNhbWUgYXMgZm9yIHRoZVxcbjc5Mzc6XFx0XFx0ICogZGV2aWNlLiBIb3dldmVyLCBpdCBtYXkgZGlmZmVyIGFuZCB0aGVuIHdlIGhhdmUgdG8gdXNlIG91clxcbjc5Mzg6XFx0XFx0ICogaG9zdCBETUEgd2lkdGggZm9yIGFsbG9jYXRpb24gYW5kIHRoZSBkZXZpY2UgRE1BIHdpZHRoIGZvclxcbjc5Mzk6XFx0XFx0ICogcmVnaXN0ZXIgaGFuZGxpbmcuXFxuNzk0MDpcXHRcXHQgKi9cXG43OTQxOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vob3N0X2RtYV93aWR0aClcXG43OTQyOlxcdFxcdFxcdHByaXYtXFx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGggPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vob3N0X2RtYV93aWR0aDtcXG43OTQzOlxcdFxcdGVsc2VcXG43OTQ0OlxcdFxcdFxcdHByaXYtXFx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGggPSBwcml2LVxcdTAwM2VkbWFfY2FwLmFkZHI2NDtcXG43OTQ1OlxcdFxcbjc5NDY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgpIHtcXG43OTQ3OlxcdFxcdFxcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2aWNlLFxcbjc5NDg6XFx0XFx0XFx0XFx0XFx0RE1BX0JJVF9NQVNLKHByaXYtXFx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgpKTtcXG43OTQ5OlxcdFxcdFxcdGlmICghcmV0KSB7XFxuNzk1MDpcXHRcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJVc2luZyAlZC8lZCBiaXRzIERNQSBob3N0L2RldmljZSB3aWR0aFxcXFxuXFxcIixcXG43OTUxOlxcdFxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoLCBwcml2LVxcdTAwM2VkbWFfY2FwLmFkZHI2NCk7XFxuNzk1MjpcXHRcXG43OTUzOlxcdFxcdFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAwOjE3LjAxODI5MDc4WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NjIwNjc4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaGVyZS5cblxuKipEZWNvbnN0cnVjdGluZyB0aGUgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKlxuXG5SaWdodCwgc28gdGhlIHRyYWNlIHNob3dzIHRoZSBleGVjdXRpb24gcGF0aCBoaXR0aW5nIGBzdG1tYWNfdGNfaW5pdGAuIFRoYXQncyB0aGUga2V5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgdHJhZmZpYyBjb250cm9sIGZlYXR1cmVzIG9mIHRoZSBTVE1NQUMgZHJpdmVyLCBvYnZpb3VzbHkuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gTm93LCB0aGUgZXhlY3V0aW9uICpjb250aW51ZXMqIGFmdGVyIHRoYXQgY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyBiZWluZyBkb25lICphZnRlciogdGhhdD8gQW5kLCBtb3JlIGltcG9ydGFudGx5LCBpcyB0aGF0IHRyYWZmaWMgY29udHJvbCByZWdpc3RyYXRpb24gYSBwcmUtcmVxdWlzaXRlP1xuXG5NeSBuZXh0IGh5cG90aGVzaXMgdG8gaW52ZXN0aWdhdGUgaXMgdGhlIGNhbGwgdG8gYHJlZ2lzdGVyX25ldGRldmAuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGF0IGZ1bmN0aW9uIG5vdy4gSXMgaXQgY2FsbGVkPyBBbmQgaWYgc28sICp3aGVuKj8gSXMgaXQgYmVmb3JlLCBhZnRlciwgb3IgaW50ZXJsZWF2ZWQgd2l0aCB0aGUgdHJhZmZpYyBjb250cm9sIGluaXRpYWxpemF0aW9uPyBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGNhbGxzIC0gYHN0bW1hY190Y19pbml0YCBhbmQgYHJlZ2lzdGVyX25ldGRldmAgLSBpcyBwcm9iYWJseSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZGV2aWNlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB0aGUgZHJpdmVyJ3MgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MzIsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAwOjIxLjY4MDM2MjMxOVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjc2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI4MDMwOlxcdFxcdHN0bW1hY19jaGVja19wY3NfbW9kZShwcml2KTtcXG44MDMxOlxcdFxcbjgwMzI6XFx0XFx0cG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2aWNlKTtcXG44MDMzOlxcdFxcdHBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXZpY2UpO1xcbjgwMzQ6XFx0XFx0aWYgKCFwbV9ydW50aW1lX2VuYWJsZWQoZGV2aWNlKSlcXG44MDM1OlxcdFxcdFxcdHBtX3J1bnRpbWVfZW5hYmxlKGRldmljZSk7XFxuODAzNjpcXHRcXG44MDM3OlxcdFxcdHJldCA9IHN0bW1hY19tZGlvX3JlZ2lzdGVyKG5kZXYpO1xcbjgwMzg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG44MDM5OlxcdFxcdFxcdGRldl9lcnJfcHJvYmUocHJpdi1cXHUwMDNlZGV2aWNlLCByZXQsXFxuODA0MDpcXHRcXHRcXHRcXHQgICAgICBcXFwiTURJTyBidXMgKGlkOiAlZCkgcmVnaXN0cmF0aW9uIGZhaWxlZFxcXFxuXFxcIixcXG44MDQxOlxcdFxcdFxcdFxcdCAgICAgIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWJ1c19pZCk7XFxuODA0MjpcXHRcXHRcXHRnb3RvIGVycm9yX21kaW9fcmVnaXN0ZXI7XFxuODA0MzpcXHRcXHR9XFxuODA0NDpcXHRcXG44MDQ1OlxcdFxcdHJldCA9IHN0bW1hY19wY3Nfc2V0dXAobmRldik7XFxuODA0NjpcXHRcXHRpZiAocmV0KVxcbjgwNDc6XFx0XFx0XFx0Z290byBlcnJvcl9wY3Nfc2V0dXA7XFxuODA0ODpcXHRcXG44MDQ5OlxcdFxcdHJldCA9IHN0bW1hY19waHlsaW5rX3NldHVwKHByaXYpO1xcbjgwNTA6XFx0XFx0aWYgKHJldCkge1xcbjgwNTE6XFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiZmFpbGVkIHRvIHNldHVwIHBoeSAoJWQpXFxcXG5cXFwiLCByZXQpO1xcbjgwNTI6XFx0XFx0XFx0Z290byBlcnJvcl9waHlfc2V0dXA7XFxuODA1MzpcXHRcXHR9XFxuODA1NDpcXHRcXG44MDU1OlxcdFxcdHJldCA9IHN0bW1hY19yZWdpc3Rlcl9kZXZsaW5rKHByaXYpO1xcbjgwNTY6XFx0XFx0aWYgKHJldClcXG44MDU3OlxcdFxcdFxcdGdvdG8gZXJyb3JfZGV2bGlua19zZXR1cDtcXG44MDU4OlxcdFxcbjgwNTk6XFx0XFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbjgwNjA6XFx0XFx0aWYgKHJldCkge1xcbjgwNjE6XFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCIlczogRVJST1IgJWkgcmVnaXN0ZXJpbmcgdGhlIGRldmljZVxcXFxuXFxcIixcXG44MDYyOlxcdFxcdFxcdFxcdF9fZnVuY19fLCByZXQpO1xcbjgwNjM6XFx0XFx0XFx0Z290byBlcnJvcl9uZXRkZXZfcmVnaXN0ZXI7XFxuODA2NDpcXHRcXHR9XFxuODA2NTpcXHRcXG44MDY2OlxcdCNpZmRlZiBDT05GSUdfREVCVUdfRlNcXG44MDY3OlxcdFxcdHN0bW1hY19pbml0X2ZzKG5kZXYpO1xcbjgwNjg6XFx0I2VuZGlmXFxuODA2OTpcXHRcXG44MDcwOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VkdW1wX2RlYnVnX3JlZ3MpXFxuODA3MTpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VkdW1wX2RlYnVnX3JlZ3MocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlYnNwX3ByaXYpO1xcbjgwNzI6XFx0XFxuODA3MzpcXHRcXHQvKiBMZXQgcG1fcnVudGltZV9wdXQoKSBkaXNhYmxlIHRoZSBjbG9ja3MuXFxuODA3NDpcXHRcXHQgKiBJZiBDT05GSUdfUE0gaXMgbm90IGVuYWJsZWQsIHRoZSBjbG9ja3Mgd2lsbCBzdGF5IHBvd2VyZWQuXFxuODA3NTpcXHRcXHQgKi9cXG44MDc2OlxcdFxcdHBtX3J1bnRpbWVfcHV0KGRldmljZSk7XFxuODA3NzpcXHRcXG44MDc4OlxcdFxcdHJldHVybiByZXQ7XFxuODA3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6MjEuNjgwODAyODY5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTcwNTEyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIGVtYmVkZGVkIHN5c3RlbXMvbmV0d29ya2luZywgZm9jdXNpbmcgb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZnVuY3Rpb24gY2FsbDpcblxuKipBbmFseXppbmcgdGhlIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgQ2FsbCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlJ3MgY2FsbGluZyBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/XCIgSXMgdGhpcyBoYXBwZW5pbmcgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiwgb3IgbGF0ZXI/IFRoZW4gSSBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBxdWVzdGlvbiBvZiAqZXJyb3IgaGFuZGxpbmcqLiBEb2VzIHRoZSBjb2RlIGhhdmUgYSBjaGVjayBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgPyBDcnVjaWFsbHksIEknbSB3b25kZXJpbmcgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCByb2J1c3RseSBlbm91Z2guIERvZXMgaXQgZ3JhY2VmdWxseSBoYW5kbGUgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRoZSBNRElPIGJ1cyBpdHNlbGYsIGlzbid0IHBoeXNpY2FsbHkgcHJlc2VudD8gRG9lcyBpdCByZXR1cm4gYSBtZWFuaW5nZnVsIGVycm9yIGNvZGUsIG9yIGRvZXMgaXQgc2ltcGx5IHJldHVybiBhbiBlcnJvciB0aGF0IG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbj8gV2hhdCBzb3J0IG9mIGRlYnVnIG91dHB1dCB3b3VsZCBiZSBnZW5lcmF0ZWQgaWYgdGhpcyBmdW5jdGlvbiBjYWxsIGZhaWxlZD8gQXJlIHRoZXJlIG90aGVyIGVycm9yIHBhdGhzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB3b3VsZCBhZmZlY3QgdGhpcyBjYWxsPyBLbm93aW5nIHdoZXRoZXIgdGhpcyBjYWxsIGlzIGEgXCJjcml0aWNhbCBwYXRoXCIgZnVuY3Rpb24gaXMga2V5IHRvIGFzc2Vzc2luZyB0aGUgY29uc2VxdWVuY2VzIG9mIGl0cyBmYWlsdXJlLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGluIG9yZGVyIHRvIHBlcmZvcm0gcm9idXN0IHZhbGlkYXRpb24gYW5kL29yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1NDYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAwOjI3LjA5Nzg1NzQzNVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3ODc5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX21kaW9fcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQwNT1pbnQgc3RtbWFjX21kaW9fdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDA2OmludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDA3LWludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqbWlpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc5Nj1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDM3OlxcdHJldCA9IHN0bW1hY19tZGlvX3JlZ2lzdGVyKG5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODAzOC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYz01Njc9c3RhdGljIHZvaWQgc3RtbWFjX21kaW9fYnVzX2NvbmZpZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU5MC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjU5MTogKiBzdG1tYWNfbWRpb19yZWdpc3RlclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTkyLSAqIEBuZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy01OTQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo1OTU6aW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTk2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6MjcuMTQ2NjUyNjk0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODQ2MjE4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggYHN0bW1hY19tZGlvX3JlZ2lzdGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBXaGF0J3MgaXRzIHJvbGUgaW4gdGhlIFNUTU1BQyBkcml2ZXIncyBNRElPIGludGVyZmFjZT8gSXMgaXQgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRoZSBNRElPIGJ1cyB3aXRoIHRoZSBrZXJuZWw/IE9yIG1heWJlIGl0J3MgaGFuZGxpbmcgYSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzdGVwIG9yIGRldmljZSBhdHRhY2htZW50PyBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCBpdHMgY29udGV4dC4gV2hhdCBvdGhlciBmdW5jdGlvbnMgY2FsbCBpdD8gV2hhdCBmdW5jdGlvbnMgZG9lcyAqaXQqIGNhbGw/IFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIGlzLiBJcyB0aGVyZSBhbnl0aGluZyB1bnVzdWFsIGFib3V0IHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBzcGVjaWZpYyB0byB0aGlzIGRyaXZlci9oYXJkd2FyZSBjb21iaW5hdGlvbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBtaW5kZnVsIG9mPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBjb2RlIGZvciBpdHMgdXNhZ2UsIGFuZCB0aGVuIHRyYWNpbmcgdGhlIGNhbGxzIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBpbXBhY3QuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBNRElPIHJlZ2lzdHJhdGlvbiBpcyBjb3JyZWN0IGFuZCBpZiBpdCBpcywgdGhlIGRyaXZlcidzIGZ1bmN0aW9uIHdpbGwgYmUgcmVnaXN0ZXJlZCBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0MzYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMDozMi42MzEyNzc2MThaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTk1OlxcdGludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gNTk2OlxcdHtcXG4gNTk3OlxcdFxcdGludCBlcnIgPSAwO1xcbiA1OTg6XFx0XFx0c3RydWN0IG1paV9idXMgKm5ld19idXM7XFxuIDU5OTpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gNjAwOlxcdFxcdHN0cnVjdCBzdG1tYWNfbWRpb19idXNfZGF0YSAqbWRpb19idXNfZGF0YSA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGE7XFxuIDYwMTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbm9kZSA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1kaW9fbm9kZTtcXG4gNjAyOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IG5kZXYtXFx1MDAzZWRldi5wYXJlbnQ7XFxuIDYwMzpcXHRcXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZml4ZWRfbm9kZTtcXG4gNjA0OlxcdFxcdGludCBtYXhfYWRkciA9IFBIWV9NQVhfQUREUiAtIDE7XFxuIDYwNTpcXHRcXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlO1xcbiA2MDY6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4gNjA3OlxcdFxcbiA2MDg6XFx0XFx0aWYgKCFtZGlvX2J1c19kYXRhKVxcbiA2MDk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYxMDpcXHRcXG4gNjExOlxcdFxcdHN0bW1hY19tZGlvX2J1c19jb25maWcocHJpdik7XFxuIDYxMjpcXHRcXG4gNjEzOlxcdFxcdG5ld19idXMgPSBtZGlvYnVzX2FsbG9jKCk7XFxuIDYxNDpcXHRcXHRpZiAoIW5ld19idXMpXFxuIDYxNTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0aWYgKG1kaW9fYnVzX2RhdGEtXFx1MDAzZWlycXMpXFxuIDYxODpcXHRcXHRcXHRtZW1jcHkobmV3X2J1cy1cXHUwMDNlaXJxLCBtZGlvX2J1c19kYXRhLVxcdTAwM2VpcnFzLCBzaXplb2YobmV3X2J1cy1cXHUwMDNlaXJxKSk7XFxuIDYxOTpcXHRcXG4gNjIwOlxcdFxcdG5ld19idXMtXFx1MDAzZW5hbWUgPSBcXFwic3RtbWFjXFxcIjtcXG4gNjIxOlxcdFxcbiA2MjI6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKSB7XFxuIDYyMzpcXHRcXHRcXHRuZXdfYnVzLVxcdTAwM2VyZWFkID0gXFx1MDAyNnN0bW1hY194Z21hYzJfbWRpb19yZWFkX2MyMjtcXG4gNjI0OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXdyaXRlID0gXFx1MDAyNnN0bW1hY194Z21hYzJfbWRpb193cml0ZV9jMjI7XFxuIDYyNTpcXHRcXHRcXHRuZXdfYnVzLVxcdTAwM2VyZWFkX2M0NSA9IFxcdTAwMjZzdG1tYWNfeGdtYWMyX21kaW9fcmVhZF9jNDU7XFxuIDYyNjpcXHRcXHRcXHRuZXdfYnVzLVxcdTAwM2V3cml0ZV9jNDUgPSBcXHUwMDI2c3RtbWFjX3hnbWFjMl9tZGlvX3dyaXRlX2M0NTtcXG4gNjI3OlxcdFxcbiA2Mjg6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZXN5bm9wc3lzX2lkIFxcdTAwM2MgRFdYR01BQ19DT1JFXzJfMjApIHtcXG4gNjI5OlxcdFxcdFxcdFxcdC8qIFJpZ2h0IG5vdyBvbmx5IEMyMiBwaHlzIGFyZSBzdXBwb3J0ZWQgKi9cXG4gNjMwOlxcdFxcdFxcdFxcdG1heF9hZGRyID0gTUlJX1hHTUFDX01BWF9DMjJBRERSO1xcbiA2MzE6XFx0XFxuIDYzMjpcXHRcXHRcXHRcXHQvKiBDaGVjayBpZiBEVCBzcGVjaWZpZWQgYW4gdW5zdXBwb3J0ZWQgcGh5IGFkZHIgKi9cXG4gNjMzOlxcdFxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwaHlfYWRkciBcXHUwMDNlIE1JSV9YR01BQ19NQVhfQzIyQUREUilcXG4gNjM0OlxcdFxcdFxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW5zdXBwb3J0ZWQgcGh5X2FkZHIgKG1heD0lZClcXFxcblxcXCIsXFxuIDYzNTpcXHRcXHRcXHRcXHRcXHRcXHRNSUlfWEdNQUNfTUFYX0MyMkFERFIpO1xcbiA2MzY6XFx0XFx0XFx0fVxcbiA2Mzc6XFx0XFx0fSBlbHNlIHtcXG4gNjM4OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXJlYWQgPSBcXHUwMDI2c3RtbWFjX21kaW9fcmVhZF9jMjI7XFxuIDYzOTpcXHRcXHRcXHRuZXdfYnVzLVxcdTAwM2V3cml0ZSA9IFxcdTAwMjZzdG1tYWNfbWRpb193cml0ZV9jMjI7XFxuIDY0MDpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQpIHtcXG4gNjQxOlxcdFxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXJlYWRfYzQ1ID0gXFx1MDAyNnN0bW1hY19tZGlvX3JlYWRfYzQ1O1xcbiA2NDI6XFx0XFx0XFx0XFx0bmV3X2J1cy1cXHUwMDNld3JpdGVfYzQ1ID0gXFx1MDAyNnN0bW1hY19tZGlvX3dyaXRlX2M0NTtcXG4gNjQzOlxcdFxcdFxcdH1cXG4gNjQ0OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6MzIuNjMxMzkxMDg5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NTE0NzYyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTURJTyBCdXMgUmVnaXN0cmF0aW9uIGluIFNUTU1BQyBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgU1RNTUFDIGRyaXZlciBNRElPIGJ1cyByZWdpc3RyYXRpb24gbG9naWMuIElmIGBtZGlvX2J1c19kYXRhYCBpcyBwcmVzZW50LCB0aGVuIHRoZSBkcml2ZXIgaXMgZ29pbmcgdG8gcmVnaXN0ZXIgdGhlIE1ESU8gYnVzLiBIYW5nIG9uLCB0aGUgY29kZSBzbmlwcGV0IGZyb20gYHN0bW1hY19wY2lfcHJvYmVgIGNvbmZpcm1zIHRoYXQgYG1kaW9fYnVzX2RhdGFgIGlzIGluZGVlZCBhbGxvY2F0ZWQgdXNpbmcgYGRldm1fa3phbGxvY2AuICBTbywgeWVzLCBpdCdzIHByZXNlbnQuIFRoZSBjb2RlIGlzIHRoZW4gZ29pbmcgdG8gY2FsbCBlaXRoZXIgYG9mX21kaW9idXNfcmVnaXN0ZXJgIG9yIGBtZGlvYnVzX3JlZ2lzdGVyYCDigJMgdGhhdCdzIHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUuXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IHdoYXQgaGFwcGVucyBpZiB0aGVyZSdzIG5vIHBoeXNpY2FsIFBIWSBwcmVzZW50IG9uIHRoZSBidXM/IEknbSB1c2VkIHRvIGhvdyBgbWRpb2J1c19yZWdpc3RlcmAgd29ya3MsIGl0IHR5cGljYWxseSBzY2FucyB0aGUgTURJTyBidXMuIElmIGl0IHJlYWRzIHRoZSBgMHhmZmZmYCB2YWx1ZSwgcmVwcmVzZW50aW5nIG5vIGRldmljZSwgaXQgZG9lc24ndCBuZWNlc3NhcmlseSBmYWlsIG91dHJpZ2h0LiBJdCB1c3VhbGx5IGp1c3QgYXNzdW1lcyB0aGF0IG5vIFBIWSBpcyBwcmVzZW50IGF0IHRoZSBwYXJ0aWN1bGFyIGFkZHJlc3MuXG5cbkhvd2V2ZXIsIGEgbmV3IGNvbmNlcm46IGBzdG1tYWNfcGNzX3NldHVwYCBhbmQgYHN0bW1hY19waHlsaW5rX3NldHVwYCBhcmUgY2FsbGVkICphZnRlciogYHN0bW1hY19tZGlvX3JlZ2lzdGVyYC4gVGhpcyBzdWdnZXN0cyB0aGV5IGRlcGVuZCBvbiB0aGUgTURJTyBidXMgcmVnaXN0cmF0aW9uLiAgU28gdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBgbWRpb2J1c19yZWdpc3RlcmAgbWF5IG9yIG1heSBub3QgaW1wYWN0IHRoZSBQQ1MgYW5kIFBoeWxpbmsgc2V0dXAuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB0byBiZSBjZXJ0YWluIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2Ygbm8gUEhZIGJlaW5nIGRldGVjdGVkLiBUaGUgYmVoYXZpb3IgaGVyZSBzZWVtcyBzYWZlLCBidXQgSSB3aWxsIGRvdWJsZS1jaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3MjcsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMDo0MC41ODI4NzAyOFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQ1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI4MDQ1OlxcdFxcdHJldCA9IHN0bW1hY19wY3Nfc2V0dXAobmRldik7XFxuODA0NjpcXHRcXHRpZiAocmV0KVxcbjgwNDc6XFx0XFx0XFx0Z290byBlcnJvcl9wY3Nfc2V0dXA7XFxuODA0ODpcXHRcXG44MDQ5OlxcdFxcdHJldCA9IHN0bW1hY19waHlsaW5rX3NldHVwKHByaXYpO1xcbjgwNTA6XFx0XFx0aWYgKHJldCkge1xcbjgwNTE6XFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiZmFpbGVkIHRvIHNldHVwIHBoeSAoJWQpXFxcXG5cXFwiLCByZXQpO1xcbjgwNTI6XFx0XFx0XFx0Z290byBlcnJvcl9waHlfc2V0dXA7XFxuODA1MzpcXHRcXHR9XFxuODA1NDpcXHRcXG44MDU1OlxcdFxcdHJldCA9IHN0bW1hY19yZWdpc3Rlcl9kZXZsaW5rKHByaXYpO1xcbjgwNTY6XFx0XFx0aWYgKHJldClcXG44MDU3OlxcdFxcdFxcdGdvdG8gZXJyb3JfZGV2bGlua19zZXR1cDtcXG44MDU4OlxcdFxcbjgwNTk6XFx0XFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbjgwNjA6XFx0XFx0aWYgKHJldCkge1xcbjgwNjE6XFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCIlczogRVJST1IgJWkgcmVnaXN0ZXJpbmcgdGhlIGRldmljZVxcXFxuXFxcIixcXG44MDYyOlxcdFxcdFxcdFxcdF9fZnVuY19fLCByZXQpO1xcbjgwNjM6XFx0XFx0XFx0Z290byBlcnJvcl9uZXRkZXZfcmVnaXN0ZXI7XFxuODA2NDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAwOjQwLjU4MzE4NjVaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5ODgwMjQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19waHlsaW5rX3NldHVwYCBmdW5jdGlvbiwgc2hhbGwgd2U/IEhlcmUncyBteSB0YWtlIG9uIHdoYXQncyBsaWtlbHkgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYW5hbHl6ZSBpdDpcblxuKipEZWNvbnN0cnVjdGluZyBgc3RtbWFjX3BoeWxpbmtfc2V0dXBgKipcblxuQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgc3RtbWFjX3BoeWxpbmtfc2V0dXBgLiBUaGUgbmFtZSBpdHNlbGYgc2NyZWFtcyBcIkV0aGVybmV0LCBQSFksIGFuZCBzZXR1cC5cIiBJIGltbWVkaWF0ZWx5IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHdoZXJlIHRoZSBTVE1NQUMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBQSFkgbGF5ZXIsIGxpa2VseSBlc3RhYmxpc2hpbmcgdGhlIGxpbmsgYW5kIGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBiZSBsb29raW5nIGZvciBhIGZldyBrZXkgYXJlYXM6XG5cbiogICAqKlBIWSBMaW5rIEluaXRpYWxpemF0aW9uOioqIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBwcm9iaW5nIGFuZCBjb25uZWN0aW5nIHRvIHRoZSBQSFkgZGV2aWNlLCBtYXliZSB1c2luZyBwaHlsaW5rLCBjb25zaWRlcmluZyB0aGUgbmFtZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGRyaXZlciBkZXRlY3RzIHRoZSBQSFksIGFuZCB0aGVuIHNldHMgdXAgdGhlIGNvbW11bmljYXRpb24gaW50ZXJmYWNlLiBJcyBpdCB1c2luZyBNRElPPyBXaGF0IGFib3V0IGFueSBzcGVjaWZpYyBTVE1NQUMtcmVsYXRlZCBQSFkgaW5pdGlhbGl6YXRpb24gcmVxdWlyZW1lbnRzP1xuKiAgICoqU3BlZWQsIER1cGxleCwgYW5kIEF1dG9uZWdvdGlhdGlvbjoqKiBEZWZpbml0ZWx5IGV4cGVjdGluZyB0byBzZWUgY29kZSB0aGF0IGhhbmRsZXMgdGhlIG5lZ290aWF0ZWQgbGluayBzcGVlZCwgZHVwbGV4IG1vZGUgKGhhbGYvZnVsbCksIGFuZCBtb3N0IGxpa2VseSBhdXRvbmVnb3RpYXRpb24uIEhvdyBkb2VzIGl0IGhhbmRsZSBmb3JjZWQgY29uZmlndXJhdGlvbnMgaWYgYXV0b25lZ290aWF0aW9uIGZhaWxzIG9yIGlzIGRpc2FibGVkPyBBcmUgdGhlcmUgYW55IFNUTU1BQy1zcGVjaWZpYyBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZXNlIHBhcmFtZXRlcnM/XG4qICAgKipEcml2ZXIgXHUwMDI2IFBIWSBDb29yZGluYXRpb246KiogSG93IGRvZXMgdGhlIFNUTU1BQyBkcml2ZXIgZ2V0IG5vdGlmaWVkIGFib3V0IGxpbmsgc3RhdGUgY2hhbmdlcz8gSXMgdGhlcmUgYSBjYWxsYmFjayBtZWNoYW5pc20gdG8gaGFuZGxlIFBIWSBpbnRlcnJ1cHRzIG9yIGxpbmsgc3RhdHVzIGV2ZW50cz8gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgc3RheXMgc3luY2hyb25pemVkIHdpdGggdGhlIFBIWSdzIG9wZXJhdGlvbmFsIHN0YXRlLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSW1wb3J0YW50LiBIb3cgZG9lcyBpdCBkZWFsIHdpdGggUEhZIGRldGVjdGlvbiBmYWlsdXJlcywgbGluayBmYWlsdXJlcywgb3IgY29uZmlndXJhdGlvbiBlcnJvcnM/IEknbGwgYmUgbG9va2luZyBmb3Igcm9idXN0IGVycm9yIGNoZWNraW5nIGFuZCBwb3RlbnRpYWxseSByZXRyeSBtZWNoYW5pc21zLlxuKiAgICoqQ2xvY2sgQ29uZmlndXJhdGlvbjoqKiBTVE1NQUMgZHJpdmVycyBvZnRlbiBoYXZlIHNwZWNpZmljIGNsb2NrIHJlcXVpcmVtZW50cyBmb3IgdGhlIFBIWSBpbnRlcmZhY2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBjbG9ja3MgYXJlIGNvbmZpZ3VyZWQgYW5kIG1hbmFnZWQsIGFuZCBpZiB0aGV5IGNoYW5nZSBiYXNlZCBvbiB0aGUgUEhZJ3Mgc2V0dGluZ3MuXG4qICAgKipSZXNvdXJjZSBBbGxvY2F0aW9uOioqIFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24/IEkgZXhwZWN0IHRvIHNlZSBQSFktcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBhbGxvY2F0aW9uIGZvciBQSFkgY29udHJvbCByZWdpc3RlcnMgb3IgbGluayBzdGF0dXMgaW5mb3JtYXRpb24uXG5cblNvLCBvdmVyYWxsLCBteSBtZW50YWwgY2hlY2tsaXN0IGlzOiBpbml0aWFsaXphdGlvbiwgY29uZmlndXJhdGlvbiwgbGluayBtb25pdG9yaW5nLCBlcnJvciBoYW5kbGluZywgY2xvY2tpbmcsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBOb3csIGxldCdzIHNlZSBob3cgd2VsbCBteSBhc3N1bXB0aW9ucyBob2xkIHVwIGFzIEkgZGlzc2VjdCB0aGUgY29kZS4uLiBUaW1lIHRvIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MzM2MDUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAwOjQ3Ljg4MTk5MjQ2WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjM5NjkxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3BoeWxpbmtfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTI5OT1zdGF0aWMgaW50IHN0bW1hY19pbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0xMzczLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MTM3NDpzdGF0aWMgaW50IHN0bW1hY19waHlsaW5rX3NldHVwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEzNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03Nzk2PXN0YXRpYyBpbnQgX19zdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODA0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgwNDk6XFx0cmV0ID0gc3RtbWFjX3BoeWxpbmtfc2V0dXAocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDUwLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6NDguMzA1OTcwMjU3WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNDQ3NDM3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgd2UncmUgbG9va2luZyBhdCwgc3VtbWFyaXplZCBhcyB0aG91Z2ggSSdtIHdvcmtpbmcgdGhyb3VnaCBpdDpcblxuKipBbmFseXppbmcgdGhlIGBzdG1tYWNfcGh5bGlua19zZXR1cGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYHN0bW1hY19waHlsaW5rX3NldHVwYCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBzZXR0aW5nIHVwIHRoZSBQSFkgbGluayB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgZHJpdmVyLCBidXQgbGV0J3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgc3RlcHMgYXJlIGludm9sdmVkLCB3aGF0IHJlc291cmNlcyBpdCdzIGludGVyYWN0aW5nIHdpdGgsIGFuZCB3aGF0IHBvdGVudGlhbCBpc3N1ZXMgbWlnaHQgYXJpc2UgaGVyZS4gSXMgdGhpcyB3aGVyZSB0aGUgY3JpdGljYWwgUEhZIG5lZ290aWF0aW9uIGhhcHBlbnM/IElzIHRoZXJlIGFueXRoaW5nIHNwZWNpZmljIHRvIHRoZSBTVE1NQUMncyBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIHdvcnRoIG5vdGluZyBpbiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24/IEkgbmVlZCB0byBhbmFseXplIGl0cyBjYWxsIHN0YWNrIGFuZCBkYXRhIGZsb3cgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBpdHMgcGxhY2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0ODYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMDo1NC4zNTA3MTY1ODRaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM3NDpcXHRzdGF0aWMgaW50IHN0bW1hY19waHlsaW5rX3NldHVwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4xMzc1OlxcdHtcXG4xMzc2OlxcdFxcdHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnO1xcbjEzNzc6XFx0XFx0c3RydWN0IHBoeWxpbmtfcGNzICpwY3M7XFxuMTM3ODpcXHRcXHRzdHJ1Y3QgcGh5bGluayAqcGh5bGluaztcXG4xMzc5OlxcdFxcbjEzODA6XFx0XFx0Y29uZmlnID0gXFx1MDAyNnByaXYtXFx1MDAzZXBoeWxpbmtfY29uZmlnO1xcbjEzODE6XFx0XFxuMTM4MjpcXHRcXHRjb25maWctXFx1MDAzZWRldiA9IFxcdTAwMjZwcml2LVxcdTAwM2VkZXYtXFx1MDAzZWRldjtcXG4xMzgzOlxcdFxcdGNvbmZpZy1cXHUwMDNldHlwZSA9IFBIWUxJTktfTkVUREVWO1xcbjEzODQ6XFx0XFx0Y29uZmlnLVxcdTAwM2VtYWNfbWFuYWdlZF9wbSA9IHRydWU7XFxuMTM4NTpcXHRcXG4xMzg2OlxcdFxcdC8qIFN0bW1hYyBhbHdheXMgcmVxdWlyZXMgYW4gUlggY2xvY2sgZm9yIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uICovXFxuMTM4NzpcXHRcXHRjb25maWctXFx1MDAzZW1hY19yZXF1aXJlc19yeGMgPSB0cnVlO1xcbjEzODg6XFx0XFxuMTM4OTpcXHRcXHQvKiBEaXNhYmxlIEVFRSBSWCBjbG9jayBzdG9wIHRvIGVuc3VyZSBWTEFOIHJlZ2lzdGVyIGFjY2VzcyB3b3Jrc1xcbjEzOTA6XFx0XFx0ICogY29ycmVjdGx5LlxcbjEzOTE6XFx0XFx0ICovXFxuMTM5MjpcXHRcXHRpZiAoIShwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX1JYX0NMS19SVU5TX0lOX0xQSSkgXFx1MDAyNlxcdTAwMjZcXG4xMzkzOlxcdFxcdCAgICAhKHByaXYtXFx1MDAzZWRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1ZMQU5fRkVBVFVSRVMpKVxcbjEzOTQ6XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VlZWVfcnhfY2xrX3N0b3BfZW5hYmxlID0gdHJ1ZTtcXG4xMzk1OlxcdFxcbjEzOTY6XFx0XFx0LyogU2V0IHRoZSBkZWZhdWx0IHRyYW5zbWl0IGNsb2NrIHN0b3AgYml0IGJhc2VkIG9uIHRoZSBwbGF0Zm9ybSBnbHVlICovXFxuMTM5NzpcXHRcXHRwcml2LVxcdTAwM2V0eF9scGlfY2xrX3N0b3AgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2XFxuMTM5ODpcXHRcXHRcXHRcXHRcXHRTVE1NQUNfRkxBR19FTl9UWF9MUElfQ0xPQ0tHQVRJTkc7XFxuMTM5OTpcXHRcXG4xNDAwOlxcdFxcdC8qIEdldCB0aGUgUEhZIGludGVyZmFjZSBtb2RlcyAoYXQgdGhlIFBIWSBlbmQgb2YgdGhlIGxpbmspIHRoYXRcXG4xNDAxOlxcdFxcdCAqIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLlxcbjE0MDI6XFx0XFx0ICovXFxuMTQwMzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZ2V0X2ludGVyZmFjZXMpXFxuMTQwNDpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VnZXRfaW50ZXJmYWNlcyhwcml2LCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vic3BfcHJpdixcXG4xNDA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbjE0MDY6XFx0XFxuMTQwNzpcXHRcXHRjb25maWctXFx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZGVmYXVsdF9hbl9pbmJhbmQ7XFxuMTQwODpcXHRcXG4xNDA5OlxcdFxcdC8qIFNldCB0aGUgcGxhdGZvcm0vZmlybXdhcmUgc3BlY2lmaWVkIGludGVyZmFjZSBtb2RlIGlmIHRoZVxcbjE0MTA6XFx0XFx0ICogc3VwcG9ydGVkIGludGVyZmFjZXMgaGF2ZSBub3QgYWxyZWFkeSBiZWVuIHByb3ZpZGVkIHVzaW5nXFxuMTQxMTpcXHRcXHQgKiBwaHlfaW50ZXJmYWNlIGFzIGEgbGFzdCByZXNvcnQuXFxuMTQxMjpcXHRcXHQgKi9cXG4xNDEzOlxcdFxcdGlmIChwaHlfaW50ZXJmYWNlX2VtcHR5KGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpKVxcbjE0MTQ6XFx0XFx0XFx0X19zZXRfYml0KHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBoeV9pbnRlcmZhY2UsXFxuMTQxNTpcXHRcXHRcXHRcXHQgIGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbjE0MTY6XFx0XFxuMTQxNzpcXHRcXHQvKiBJZiB3ZSBoYXZlIGFuIHhwY3MsIGl0IGRlZmluZXMgd2hpY2ggUEhZIGludGVyZmFjZXMgYXJlIHN1cHBvcnRlZC4gKi9cXG4xNDE4OlxcdFxcdGlmIChwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcylcXG4xNDE5OlxcdFxcdFxcdHBjcyA9IHhwY3NfdG9fcGh5bGlua19wY3MocHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpO1xcbjE0MjA6XFx0XFx0ZWxzZVxcbjE0MjE6XFx0XFx0XFx0cGNzID0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzO1xcbjE0MjI6XFx0XFxuMTQyMzpcXHRcXHRpZiAocGNzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMDo1NC4zNTEwNDUwMjRaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2NzQ4NzA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBwaHlsaW5rIFNldHVwIGluIHN0bW1hYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzdG1tYWNfcGh5bGlua19zZXR1cGAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGlzIGZ1bmN0aW9uJ3MgcHJpbWFyeSBwdXJwb3NlIGlzIHRoZSBjcmVhdGlvbiBvZiBhIGBwaHlsaW5rYCBpbnN0YW5jZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZSBhbmQgaXRzIHBsYWNlIGluIHRoZSBFdGhlcm5ldCBkcml2ZXIgc2V0dXAuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gaW5zdGFudGlhdGUgdGhlIGFic3RyYWN0aW9uIHRoYXQgYnJpZGdlcyB0aGUgZ2FwIGJldHdlZW4gdGhlIE1BQyBhbmQgdGhlIFBIWS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgcGF0aHMuIEkgaW1tZWRpYXRlbHkgd29uZGVyOiBkb2VzIHRoZSBmdW5jdGlvbiBncmFjZWZ1bGx5IGhhbmRsZSB0aGUgc2NlbmFyaW8gd2hlcmUgbm8gUEhZIGlzIHByZXNlbnQ/IERvZXMgaXQgcmV0dXJuIGFuIGVycm9yLCBvciBwZXJoYXBzIGF0dGVtcHQgc29tZSBraW5kIG9mIGZhbGxiYWNrIG9yIGhhcmR3YXJlIGF1dG9uZWdvdGlhdGlvbiBzZXR1cD8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBpZiBhIFBIWSBpc24ndCBkZXRlY3RlZCBvciBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdGhpcyBwb2ludC4gVGhhdCB3b3VsZCBzaWduaWZpY2FudGx5IGFmZmVjdCB0aGUgb3ZlcmFsbCBpbml0aWFsaXphdGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTU1MCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6NTkuNjE4NTM0NTQ1WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MjQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MjQ6XFx0XFx0XFx0cGh5X2ludGVyZmFjZV9vcihjb25maWctXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzLFxcbjE0MjU6XFx0XFx0XFx0XFx0XFx0IGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMsXFxuMTQyNjpcXHRcXHRcXHRcXHRcXHQgcGNzLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuMTQyNzpcXHRcXG4xNDI4OlxcdFxcdC8qIFNvbWUgcGxhdGZvcm1zLCBlLmcuIGlNWDhNUCwgd2lyZSBscGlfaW50cl9vIHRvIHRoZSBzYW1lIGludGVycnVwdFxcbjE0Mjk6XFx0XFx0ICogdXNlZCBmb3Igc3RtbWFjJ3MgbWFpbiBpbnRlcnJ1cHRzLCB3aGljaCBsZWFkcyB0byBpbnRlcnJ1cHQgc3Rvcm1zLlxcbjE0MzA6XFx0XFx0ICogU1RNTUFDX0ZMQUdfRUVFX0RJU0FCTEUgYWxsb3dzIEVFRSB0byBiZSBkaXNhYmxlZCBvbiBzdWNoIHBsYXRmb3Jtcy5cXG4xNDMxOlxcdFxcdCAqL1xcbjE0MzI6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAuZWVlIFxcdTAwMjZcXHUwMDI2XFxuMTQzMzpcXHRcXHQgICAgIShwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX0VFRV9ESVNBQkxFKSkge1xcbjE0MzQ6XFx0XFx0XFx0LyogVGhlIEdNQUMgMy43NGEgZGF0YWJvb2sgc3RhdGVzIHRoYXQgRUVFIGlzIG9ubHkgc3VwcG9ydGVkXFxuMTQzNTpcXHRcXHRcXHQgKiBpbiBNSUksIEdNSUksIGFuZCBSR01JSSBpbnRlcmZhY2VzLlxcbjE0MzY6XFx0XFx0XFx0ICovXFxuMTQzNzpcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwgY29uZmlnLVxcdTAwM2VscGlfaW50ZXJmYWNlcyk7XFxuMTQzODpcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUksIGNvbmZpZy1cXHUwMDNlbHBpX2ludGVyZmFjZXMpO1xcbjE0Mzk6XFx0XFx0XFx0cGh5X2ludGVyZmFjZV9zZXRfcmdtaWkoY29uZmlnLVxcdTAwM2VscGlfaW50ZXJmYWNlcyk7XFxuMTQ0MDpcXHRcXG4xNDQxOlxcdFxcdFxcdC8qIElmIHdlIGhhdmUgYSBub24taW50ZWdyYXRlZCBQQ1MsIGFzc3VtZSB0aGF0IGl0IGlzIGNvbm5lY3RlZFxcbjE0NDI6XFx0XFx0XFx0ICogdG8gdGhlIEdNQUMgdXNpbmcgR01JSSBvciBhbm90aGVyIEVFRSBjb21wYXRpYmxlIGludGVyZmFjZSxcXG4xNDQzOlxcdFxcdFxcdCAqIGFuZCB0aHVzIGFsbCBQQ1Mtc3VwcG9ydGVkIGludGVyZmFjZXMgc3VwcG9ydCBMUEkuXFxuMTQ0NDpcXHRcXHRcXHQgKi9cXG4xNDQ1OlxcdFxcdFxcdGlmIChwY3MpXFxuMTQ0NjpcXHRcXHRcXHRcXHRwaHlfaW50ZXJmYWNlX29yKGNvbmZpZy1cXHUwMDNlbHBpX2ludGVyZmFjZXMsXFxuMTQ0NzpcXHRcXHRcXHRcXHRcXHRcXHQgY29uZmlnLVxcdTAwM2VscGlfaW50ZXJmYWNlcyxcXG4xNDQ4OlxcdFxcdFxcdFxcdFxcdFxcdCBwY3MtXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4xNDQ5OlxcdFxcbjE0NTA6XFx0XFx0XFx0LyogQWxsIGZ1bGwgZHVwbGV4IHNwZWVkcyBhYm92ZSAxMDBNYnBzIGFyZSBzdXBwb3J0ZWQgKi9cXG4xNDUxOlxcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbHBpX2NhcGFiaWxpdGllcyA9IH4oTUFDXzEwMDBGRCAtIDEpIHwgTUFDXzEwMEZEO1xcbjE0NTI6XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VscGlfdGltZXJfZGVmYXVsdCA9IGVlZV90aW1lciAqIDEwMDA7XFxuMTQ1MzpcXHRcXHRcXHRjb25maWctXFx1MDAzZWVlZV9lbmFibGVkX2RlZmF1bHQgPSB0cnVlO1xcbjE0NTQ6XFx0XFx0fVxcbjE0NTU6XFx0XFxuMTQ1NjpcXHRcXHRjb25maWctXFx1MDAzZXdvbF9waHlfc3BlZWRfY3RybCA9IHRydWU7XFxuMTQ1NzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19VU0VfUEhZX1dPTCkge1xcbjE0NTg6XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2V3b2xfcGh5X2xlZ2FjeSA9IHRydWU7XFxuMTQ1OTpcXHRcXHR9IGVsc2Uge1xcbjE0NjA6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAucG10X3JlbW90ZV93YWtlX3VwKVxcbjE0NjE6XFx0XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2V3b2xfbWFjX3N1cHBvcnQgfD0gV0FLRV9VQ0FTVDtcXG4xNDYyOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLnBtdF9tYWdpY19mcmFtZSlcXG4xNDYzOlxcdFxcdFxcdFxcdGNvbmZpZy1cXHUwMDNld29sX21hY19zdXBwb3J0IHw9IFdBS0VfTUFHSUM7XFxuMTQ2NDpcXHRcXHR9XFxuMTQ2NTpcXHRcXG4xNDY2OlxcdFxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShjb25maWcsIGRldl9md25vZGUocHJpdi1cXHUwMDNlZGV2aWNlKSxcXG4xNDY3OlxcdFxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwaHlfaW50ZXJmYWNlLFxcbjE0Njg6XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZzdG1tYWNfcGh5bGlua19tYWNfb3BzKTtcXG4xNDY5OlxcdFxcdGlmIChJU19FUlIocGh5bGluaykpXFxuMTQ3MDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwaHlsaW5rKTtcXG4xNDcxOlxcdFxcbjE0NzI6XFx0XFx0cHJpdi1cXHUwMDNlcGh5bGluayA9IHBoeWxpbms7XFxuMTQ3MzpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDA6NTkuNjE5MDEzNjM1WiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODIxMzE1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHNlcXVlbmNlLCBhcyBpZiBJIHdlcmUgd29ya2luZyB0aHJvdWdoIGl0OlxuXG4qKlRoaW5raW5nIFRocm91Z2ggUEhZIEluaXRpYWxpemF0aW9uIGFuZCBEZXZpY2UgUmVnaXN0cmF0aW9uKipcblxuQWxyaWdodCwgc28gYHBoeWxpbmtfY3JlYXRlYCBpcyBjbGV2ZXJseSBkZXNpZ25lZCB0byBiZSBmbGV4aWJsZTsgaXQgZG9lc24ndCAqYWJzb2x1dGVseSogbmVlZCBhIFBIWSByaWdodCBvZmYgdGhlIGJhdC4gVGhhdCBtZWFucyBgc3RtbWFjX3BoeWxpbmtfc2V0dXBgIGlzIGdvaW5nIHRvIHNhaWwgdGhyb3VnaCB3aXRob3V0IGFueSBpc3N1ZXMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGRldmljZSByZWdpc3RyYXRpb24gY2FuIGhhcHBlbiwgdGhhbmtzIHRvIHRoZSBzdWJzZXF1ZW50IGByZWdpc3Rlcl9uZXRkZXZgIGNhbGwsIHJpZ2h0PyBTZWVtcyBzdHJhaWdodGZvcndhcmQsIGFuZCB0aGUgZGV2aWNlIGFwcGVhcnMgb24gdGhlIHN5c3RlbS5cblxuTm93LCBhIGNyaXRpY2FsIHRob3VnaHQgYXJpc2VzOiBob3cgZG9lcyBgc3RtbWFjX2h3X2luaXRgIGZpdCBpbnRvIHRoaXMgcGljdHVyZT8gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBpbml0aWFsIGhhcmR3YXJlIHNldHVwLiBJZiB0aGUgZHJpdmVyIHZlcnNpb24sIGB2ZXJzaW9uYCwgaXMgemVybywgYHN0bW1hY19od2lmX2ZpbmRgIHdpbGwgcG9pbnQgdXMgdG8gdGhlIGBEV01BQ19DT1JFX0dNQUM0YCBlbnRyeS4gVGhlIGtleSBpcyB0aGF0IHRoZSBgbWluX2lkYCBpcyB6ZXJvLiBUaGVuLCBgc3RtbWFjX2h3aWZfaW5pdGAgYXNzaWducyB0aGUgZm91bmQgTUFDIGVudHJ5IHRvIGBwcml2LVx1MDAzZWh3YC4gVGhlIGFjdHVhbCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBpcyBraWNrZWQgb2ZmIGluIGBzdG1tYWNfaHdfaW5pdGAuIFNwZWNpZmljYWxseSwgYSBjYWxsIHRvIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYCB3aWxsIG9jY3VyLiBUaGlzIGxpa2VseSBwcm9iZXMgdGhlIGhhcmR3YXJlIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjcxNCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjA2LjAwMTE0OTY1NFoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzNjAzODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2dldF9od19mZWF0dXJlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0zMTQ1PXN0YXRpYyB2b2lkIHN0bW1hY19tbWNfc2V0dXAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zMTU5LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MzE2MDogKiBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzIC0gZ2V0IE1BQyBjYXBhYmlsaXRpZXMgZnJvbSB0aGUgSFcgY2FwLiByZWdpc3Rlci5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTMxNjEtICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zMTY3LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MzE2ODpzdGF0aWMgaW50IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzE2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc0MDc9c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MjEtXFx0LyogR2V0IHRoZSBIVyBjYXBhYmlsaXR5IChuZXcgR01BQyBuZXdlciB0aGFuIDMuNTBhKSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzQyMjpcXHRwcml2LVxcdTAwM2Vod19jYXBfc3VwcG9ydCA9IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDIzLVxcdGlmIChwcml2LVxcdTAwM2Vod19jYXBfc3VwcG9ydCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMTowNi4wNTM1MTY3NTJaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4NzI1MTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgaGFyZHdhcmUgZmVhdHVyZSBkZXRlY3Rpb24gbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBmdW5jdGlvbi4gSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgc3RhbmRhcmQgU1RNMzIgRXRoZXJuZXQgTUFDIGRyaXZlciBoZXJlLCBzbyBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdHlwaWNhbCBwcm9iaW5nIGZvciBjYXBhYmlsaXRpZXMgbGlrZSBqdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWQgc3VwcG9ydCwgYW5kIHBvdGVudGlhbGx5IHNvbWUgZGVzY3JpcHRvciBmb3JtYXQgY29uc2lkZXJhdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiBob3cgdGhlIGRyaXZlcidzIGZlYXR1cmUgZGV0ZWN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlZ2lzdGVyIHNldHRpbmdzLiBJcyB0aGlzIGRvbmUgYXQgcnVudGltZSBvciBhdCBpbml0aWFsaXphdGlvbj8gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIHByZXNlbnRzIGl0cyBjYXBhYmlsaXRpZXMgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFBlcmhhcHMgdGhlcmUncyBhIHBhcnRpY3VsYXIgY29uY2VybiB0byBhZGRyZXNzPyBJcyB0aGVyZSBhIHN1YnRsZSBidWcgb3IgbWlzc2luZyBmZWF0dXJlPyBMZXQncyBjaGVjayB0aGUgY29kZSBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2NTIsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMToxMC45NDA3NzExMTZaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE2OCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE2ODpcXHRzdGF0aWMgaW50IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbjMxNjk6XFx0e1xcbjMxNzA6XFx0XFx0cmV0dXJuIHN0bW1hY19nZXRfaHdfZmVhdHVyZShwcml2LCBwcml2LVxcdTAwM2Vpb2FkZHIsIFxcdTAwMjZwcml2LVxcdTAwM2VkbWFfY2FwKSA9PSAwO1xcbjMxNzE6XFx0fVxcbjMxNzI6XFx0XFxuMzE3MzpcXHQvKipcXG4zMTc0OlxcdCAqIHN0bW1hY19jaGVja19ldGhlcl9hZGRyIC0gY2hlY2sgaWYgdGhlIE1BQyBhZGRyIGlzIHZhbGlkXFxuMzE3NTpcXHQgKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXFxuMzE3NjpcXHQgKiBEZXNjcmlwdGlvbjpcXG4zMTc3OlxcdCAqIGl0IGlzIHRvIHZlcmlmeSBpZiB0aGUgTUFDIGFkZHJlc3MgaXMgdmFsaWQsIGluIGNhc2Ugb2YgZmFpbHVyZXMgaXRcXG4zMTc4OlxcdCAqIGdlbmVyYXRlcyBhIHJhbmRvbSBNQUMgYWRkcmVzc1xcbjMxNzk6XFx0ICovXFxuMzE4MDpcXHRzdGF0aWMgdm9pZCBzdG1tYWNfY2hlY2tfZXRoZXJfYWRkcihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuMzE4MTpcXHR7XFxuMzE4MjpcXHRcXHR1OCBhZGRyW0VUSF9BTEVOXTtcXG4zMTgzOlxcdFxcbjMxODQ6XFx0XFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHByaXYtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpKSB7XFxuMzE4NTpcXHRcXHRcXHRzdG1tYWNfZ2V0X3VtYWNfYWRkcihwcml2LCBwcml2LVxcdTAwM2VodywgYWRkciwgMCk7XFxuMzE4NjpcXHRcXHRcXHRpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSlcXG4zMTg3OlxcdFxcdFxcdFxcdGV0aF9od19hZGRyX3NldChwcml2LVxcdTAwM2VkZXYsIGFkZHIpO1xcbjMxODg6XFx0XFx0XFx0ZWxzZVxcbjMxODk6XFx0XFx0XFx0XFx0ZXRoX2h3X2FkZHJfcmFuZG9tKHByaXYtXFx1MDAzZWRldik7XFxuMzE5MDpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJkZXZpY2UgTUFDIGFkZHJlc3MgJXBNXFxcXG5cXFwiLFxcbjMxOTE6XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbjMxOTI6XFx0XFx0fVxcbjMxOTM6XFx0fVxcbjMxOTQ6XFx0XFxuMzE5NTpcXHRpbnQgc3RtbWFjX2dldF9waHlfaW50Zl9zZWwocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4zMTk2OlxcdHtcXG4zMTk3OlxcdFxcdGludCBwaHlfaW50Zl9zZWwgPSAtRUlOVkFMO1xcbjMxOTg6XFx0XFxuMzE5OTpcXHRcXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgfHxcXG4zMjAwOlxcdFxcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpXFxuMzIwMTpcXHRcXHRcXHRwaHlfaW50Zl9zZWwgPSBQSFlfSU5URl9TRUxfR01JSV9NSUk7XFxuMzIwMjpcXHRcXHRlbHNlIGlmIChwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50ZXJmYWNlKSlcXG4zMjAzOlxcdFxcdFxcdHBoeV9pbnRmX3NlbCA9IFBIWV9JTlRGX1NFTF9SR01JSTtcXG4zMjA0OlxcdFxcdGVsc2UgaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG4zMjA1OlxcdFxcdFxcdHBoeV9pbnRmX3NlbCA9IFBIWV9JTlRGX1NFTF9STUlJO1xcbjMyMDY6XFx0XFx0ZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9SRVZNSUkpXFxuMzIwNzpcXHRcXHRcXHRwaHlfaW50Zl9zZWwgPSBQSFlfSU5URl9TRUxfUkVWTUlJO1xcbjMyMDg6XFx0XFxuMzIwOTpcXHRcXHRyZXR1cm4gcGh5X2ludGZfc2VsO1xcbjMyMTA6XFx0fVxcbjMyMTE6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2dldF9waHlfaW50Zl9zZWwpO1xcbjMyMTI6XFx0XFxuMzIxMzpcXHRzdGF0aWMgaW50IHN0bW1hY19wcmVyZXNldF9jb25maWd1cmUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbjMyMTQ6XFx0e1xcbjMyMTU6XFx0XFx0c3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCA9IHByaXYtXFx1MDAzZXBsYXQ7XFxuMzIxNjpcXHRcXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xcbjMyMTc6XFx0XFx0c3RydWN0IHBoeWxpbmtfcGNzICpwY3M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjEwLjk0MTA5NTM5NloiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzIzMjM0MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU1RNTUFDIERyaXZlciBhbmQgU3l6a2FsbGVyIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdG1tYWNgIGRyaXZlciBjb2RlLiBUaGlzIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVgIGZ1bmN0aW9uLi4uIGlmIGl0IHJldHVybnMgc29tZXRoaW5nIG90aGVyIHRoYW4gemVybywgdGhlbiBgc3RtbWFjX2dldF9od19mZWF0dXJlc2AganVzdCByZXR1cm5zIHplcm8uIElmIGl0ICpkb2VzKiByZXR1cm4gemVybywgaXQganVzdCBvdXRwdXRzIFwiTm8gSFcgRE1BIGZlYXR1cmUgcmVnaXN0ZXIgc3VwcG9ydGVkXCIgYW5kIGtlZXBzIGdvaW5nLiBUaGF0J3MuLi4gaW50ZXJlc3RpbmcuIEVzc2VudGlhbGx5LCB0aGUgZHJpdmVyIHNlZW1zIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSBldmVuIHdpdGggYSBjb21wbGV0ZWx5IGZha2UgUENJIGRldmljZSwgaHVoPyBUaGF0IGNvdWxkIGxlYWQgdG8gc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgZmFsc2UgcG9zaXRpdmVzLlxuXG5XYWl0IGEgc2Vjb25kLi4uIGRvZXNuJ3Qgc3l6a2FsbGVyIGhhdmUgdGhpcyBgdmhjaWAgZGV2aWNlIHRoaW5nIHRoYXQgbGV0cyBpdCBpbmplY3QgUENJIGRldmljZXM/IFRoYXQncyBwZXJmZWN0IGZvciB0ZXN0aW5nIHRoaXMgc29ydCBvZiB0aGluZy4gQnV0IGRvZXMgc3l6a2FsbGVyICphY3R1YWxseSogdGVzdCBgc3RtbWFjYD8gSSBzaG91bGQgY2hlY2suIFVzdWFsbHksIHRoZSBkZWZhdWx0IGRlZmNvbmZpZyBmb3IgdGhlIGtlcm5lbCBkb2Vzbid0IGVuYWJsZSBgQ09ORklHX1NUTU1BQ19FVEhgIG9yIGBDT05GSUdfU1RNTUFDX1BDSWAuIEJ1dCBzeXprYWxsZXIncyBjb25maWcgbWlnaHQgYmUgZGlmZmVyZW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIGdvdCB0aG9zZSBlbmFibGVkLiBUaGVuLCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIGBzdG1tYWNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGV4aXN0aW5nIGNvdmVyYWdlIGZvciB0aGlzIGRyaXZlciBpbiB0aGUgc3l6a2FsbGVyIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzkzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDE6MTguNjY0MzMyMjgyWiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcwMzU2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjE4LjcxMjA0NTE0WiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1Nzc0NDE5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBzdG1tYWMgd2l0aCBTeXprYWxsZXI6IEEgUGxhbioqXG5cbk9rYXksIHNvIHRoZXJlIGFyZW4ndCBhbnkgcHJlLWV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbnMgc3BlY2lmaWNhbGx5IGZvciBgc3RtbWFjYC4uLiBUaGF0J3MgYSBiaXQgb2YgYSBodXJkbGUsIGJ1dCBub3QgaW5zdXJtb3VudGFibGUuIEJ1dCBJIHJlbWVtYmVyIHRoYXQgYHN5emthbGxlcmAgY2FuIGZ1enogaXQgdGhyb3VnaCBgbmV0bGlua2AhIFNwZWNpZmljYWxseSwgdXNpbmcgYHRjIHFkaXNjYCBpZiB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IHByZXNlbnQuIEFuZCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQsIHRoZW4gaXQncyByZWdpc3RlcmVkIGFzIGEgYG5ldGRldmAuXG5cbkFoYSEgU28sIHRoZW4gSSBjYW4gbGV2ZXJhZ2Ugc3l6a2FsbGVyJ3MgYFJUTV9ORVdRRElTQ2AgZnVuY3Rpb25hbGl0eSB0byBhZGQgYW4gYGV0c2AgcWRpc2MuIFdhaXQgYSBtaW51dGUuLi4gYGV0c2AgcWRpc2MgaXMgYSBwcmV0dHkgc3RhbmRhcmQgTGludXggcWRpc2MsIHJpZ2h0PyBOb3RoaW5nIG9ic2N1cmUgb3IgZXhvdGljIGFib3V0IGl0LiBUaGF0J3MgZ29vZCBuZXdzLiBOb3cgSSBuZWVkIHRvIGNoZWNrIGlmIHN5emthbGxlciBoYXMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgYGV0c2AgcWRpc2MuIFRoYXQncyB0aGUgbmV4dCBzdGVwOyBjb25maXJtaW5nIGl0cyBhbHJlYWR5IHN1cHBvcnRlZCwgd2lsbCBzYXZlIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjkzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjI2LjI4OTQ4OTgwMloiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NzAzMzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzeXMvbGludXgvc29ja2V0X25ldGxpbmtfcm91dGVfdGMudHh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMToyNi4zMzQwNjY4NjFaIiwiU2VxIjo3MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MzkyMzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJ2QgYmUgZG9pbmcgYW5kIHdoeTpcblxuKipJbml0aWFsIEludmVzdGlnYXRpb246IFNvY2tldCBOZXRsaW5rIFJvdXRlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlLCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIFRoZSBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIG9idmlvdXNseSBnb2luZyB0byBiZSB0aGF0IGBzeXMvbGludXgvc29ja2V0X25ldGxpbmtfcm91dGUudHh0YCBmaWxlLiBOZXRsaW5rIHJvdXRpbmcgc29ja2V0cyBpbiBMaW51eCBhcmUgdGhlIGxpZmVibG9vZCBvZiBob3cgcm91dGluZyBpbmZvcm1hdGlvbiwgYW5kIHRoZXJlZm9yZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGlzIG1hbmFnZWQuIFRoYXQgZmlsZSB3aWxsLCBhbG1vc3QgY2VydGFpbmx5LCBob2xkIGNyaXRpY2FsIGRvY3VtZW50YXRpb24sIGNvbmZpZ3VyYXRpb24gZGV0YWlscywgYW5kIGxpa2VseSBzb21lIGNydWNpYWwgY29kZSBleGFtcGxlcy4gSSdtIGV4cGVjdGluZyB0aGlzIGZpbGUgdG8gYmUgdGhlIGNhbm9uaWNhbCBzb3VyY2Ugb3IgYXQgbGVhc3QgKmEqIHZlcnkgaW1wb3J0YW50IHJlZmVyZW5jZS4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHN5cy9saW51eC9zb2NrZXRfbmV0bGlua19yb3V0ZS50eHRgIGZpbGUgY29uZmlndXJlcyB0aGUgY29ubmVjdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBjb25maWd1cmF0aW9uIHBvc3NpYmlsaXRpZXMsIGV4cGVjdGVkIHZhbHVlcyBhbmQgdGhlIGdlbmVyYWwgd29ya2Zsb3cgb2YgYW55IGNvbW1hbmRzIGFuZCBjYWxscyBpbnZvbHZlZC4gSSdsbCBuZWVkIHRvIGFic29yYiBob3cgdGhpcyB3b3JrcywgYXQgYSBoaWdoIGxldmVsLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTY2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjMwLjMxNzk5NjIwMVoiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5ODY5MTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzeXMvbGludXgvc29ja2V0X25ldGxpbmtfcm91dGUudHh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMTozMC4zNjQ5OTA3MTlaIiwiU2VxIjo3NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2MjU1OTI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBldHNgIEtlcm5lbCBNb2R1bGUqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGBldHNgIG1vZHVsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIGtlcm5lbCBtb2R1bGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBMaW51eCBzb3VyY2UgdHJlZS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgdW5kZXIgYHN5cy9saW51eC9gLCBhcyB0aGF0J3MgZ2VuZXJhbGx5IHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBzeXN0ZW0tbGV2ZWwgY29tcG9uZW50cy4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGEgZnVuZGFtZW50YWwgZGlhZ25vc3RpYyBzdGVwOyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGV4aXN0ZW5jZSBhbmQgcGxhY2VtZW50IG9mIHRoaXMgbW9kdWxlIGJlZm9yZSBlbWJhcmtpbmcgb24gYW55IGRlZXBlciBhbmFseXNpcy4gSSdtIGVzc2VudGlhbGx5IHBlcmZvcm1pbmcgYSBzYW5pdHkgY2hlY2sgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0eXBpY2FsIG1vZHVsZSBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTU3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDE6MzUuODI3NTUyMTk2WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc0MzY3OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjM1Ljg3NjMwMjg4NFoiLCJTZXEiOjc3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDU0MDY1NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBFVFMgUXVldWUgRGlzY2lwbGluZSoqXG5cblJpZ2h0LCBsZXQgbWUgdGhpbmsuLi4gSSByZWNhbGwgc2VlaW5nIHNvbWV0aGluZyBhYm91dCB0aGUgYGV0c2AgcWRpc2MuIEFoIHllcywgaXQncyBpbXBsZW1lbnRlZCBpbiBgbmV0L3NjaGVkL3NjaF9ldHMuY2AuIFRpbWUgdG8gY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiB0aGF0IHNwZWNpZmljIGZpbGUsIGBzY2hfZXRzLmNgLCBhY3R1YWxseSBleGlzdHMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gR290dGEgZG91YmxlIGNoZWNrIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIHdoZXJlIEkgZXhwZWN0IGl0IHRvIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDE1NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAxOjQzLjkzMDM3MTk2MVoiLCJTZXEiOjc4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NTMwODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRDX1NFVFVQX1FESVNDX0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTk1MD1lbnVtIHRjX3NldHVwX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC05NjYtXFx0VENfU0VUVVBfRlQsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo5Njc6XFx0VENfU0VUVVBfUURJU0NfRVRTLFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtOTY4LVxcdFRDX1NFVFVQX1FESVNDX1RCRixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDE6NDQuMDg0OTExNjM3WiIsIlNlcSI6NzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NDYyMTEwMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIHRoZSBFVFMgUWRpc2MgSW50ZWdyYXRpb24gaW4gU1RNTUFDIERyaXZlcioqXG5cbk9rYXksIHNvIGBUQ19TRVRVUF9RRElTQ19FVFNgIGRlZmluaXRlbHkgZXhpc3RzIOKAkyB0aGF0J3MgYSBnb29kIHN0YXJ0LiBUaGUgbmV4dCBxdWVzdGlvbiBpcywgZG9lcyBzeXprYWxsZXIgYWxyZWFkeSBmdXp6IHRoZSBgZXRzYCBxZGlzYyBkaXJlY3RseT8gSSBkb24ndCBzZWUgc3BlY2lmaWMgZnV6emluZyBmb3IgaXQgbWVudGlvbmVkLCBzbyBpdCdzIGxpa2VseSBzeXprYWxsZXIgd291bGQgcmVseSBvbiBnZW5lcmljIG5ldGxpbmsgYXR0cmlidXRlcywgd2hpY2ggbWlnaHQgYmUgbGVzcyBlZmZlY3RpdmUuIEhtbSwgd2FpdCBhIG1pbnV0ZSwgdGhlIHBhdGNoIGF1dGhvciBpcyBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBUaGlzICpkZWZpbml0ZWx5KiBtZWFucyBzeXprYWxsZXIgZWl0aGVyIGZvdW5kIGEgYnVnIHJlbGF0ZWQgdG8gYGV0c2AsIG9yIHRoaXMgaXMgYSBwYXRjaCBzeXprYWxsZXIgaXMgdGVzdGluZyBmb3IgYSBwb3RlbnRpYWwgYnVnLlxuXG5Ob3csIHRoZSBwcm9tcHQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB0aGlzIGlzIGFscmVhZHkgYXBwbGllZCB0byB0aGUgSEVBRCBjb21taXQuIFNvLCBteSB0YXNrIGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCB0aGF0ICpzaG91bGQqIGJlIGZ1enplZC4gQW5kIHllcywgaXQgZG9lcyEgVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcyBFVFMgcWRpc2Mgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IHRvIHRoZSBzdG1tYWMgZHJpdmVyLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IElmIEkgY2FuIHByb2JlIHRoZSBkcml2ZXIgdGhyb3VnaCBhIGR1bW15IFBDSSBkZXZpY2UsIHRoZSBhbnN3ZXIgaXMgeWVzLiBOb3csIGBzdG1tYWNfcGNpX3Byb2JlYCB1c2VzIGBwY2ltX2VuYWJsZV9kZXZpY2UocGRldilgLiBJZiB0aGUgZGV2aWNlIGlzIGluamVjdGVkIHZpYSBgdmhjaWAsIGl0ICp3aWxsKiBoYXZlIFBDSSBCQVJzLiBUaGUgYHBjaW1faW9tYXBfcmVnaW9uYCBmdW5jdGlvbiB3aWxsIG1hcCB0aGUgQkFSLiBUaGlzIGluIHR1cm4gY2FsbHMgYHN0bW1hY19kdnJfcHJvYmVgLCByaWdodD8gQW5kIHRoYXQgZnVuY3Rpb24sIHllcywgaXQgYWxsb2NhdGVzIG1lbW9yeSwgbWFwcyByZWdpc3RlcnMsIHRoZSB3b3Jrcy4gVGhlIGNhdGNoIGlzIHdoYXQgaGFwcGVucyBpZiB0aGUgQkFScyBhcmVuJ3QgYmFja2VkIGJ5IHJlYWwgaGFyZHdhcmU/IFJlYWRzIG1pZ2h0IHJldHVybiBgMHhmZmZmZmZmZmAgb3IgYDBgLiBJZiBgcmVhZGxgIHJldHVybnMgemVybywgYHN0bW1hY19nZXRfdmVyc2lvbmAgc2V0cyBgc25wc3ZlciA9IDBgLCB0aGVuIHRoZSBkcml2ZXIgY2FsbHMgYHN0bW1hY19od2lmX2ZpbmRgIHdoZXJlIGBtaW5faWQgPSAwYC4gQWZ0ZXJ3YXJkcywgYHN0bW1hY19od19pbml0YCBpcyBjYWxsZWQsIGFuZCB0aGF0IGZ1bmN0aW9uIGNhbGxzIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSWYgdGhhdCByZXR1cm5zIDAsIGl0IHByb2NlZWRzISBJdCB0aGVuIHJlZ2lzdGVycyB0aGUgTURJTyBidXMgYW5kICpmaW5hbGx5KiB0aGUgbmV0ZGV2LiBTbywgdGhlIG5ldGRldiAqd2lsbCogYmUgcmVnaXN0ZXJlZCBldmVuIHdpdGggYSB2aXJ0dWFsIGRldmljZSFcblxuVGhlcmVmb3JlLCB0aGlzIGRyaXZlciAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VIGlmIGEgZHVtbXkgUENJIGRldmljZSB3aXRoIHRoZSByaWdodCBJRCBpcyBpbmplY3RlZC4gQW5kIHN5emthbGxlcidzIGB2aGNpYCBjYW4gaW5qZWN0IGEgUENJIGRldmljZSB3aXRoIGBQQ0lfVkVORE9SX0lEX1NZTk9QU1lTYCBhbmQgYFBDSV9ERVZJQ0VfSURfU1lOT1BTWVNfR01BQzVfSURgICgweDcxMDIpLiBQZXJmZWN0LCBpdCBpcyByZWFjaGFibGUuXG5cbk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IG9uZXMgdG8gZm9jdXMgb24/IFRoZSBwYXRjaCBhZGRzIHRoZXNlOiBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgLCBhbmQgYWxzbyBtb2RpZmllcyBgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRgLCBgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW9gIGFuZCBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYC4gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IGBzdG1tYWNfdGMuY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA0MzcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6MDAuNTQ3MDI0MTEyWiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg1NTY3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNfc2V0dXBfZXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTEyMTY9c3RhdGljIHZvaWQgc3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyMjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM6MTIyNjpzdGF0aWMgaW50IHRjX3NldHVwX2V0c19zY2hlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTIyNy1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyNjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM6MTI2OTpzdGF0aWMgaW50IHRjX3NldHVwX2V0cyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTI3MC1cXHRcXHRcXHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqcW9wdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyNzMtXFx0Y2FzZSBUQ19FVFNfUkVQTEFDRTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMjc0OlxcdFxcdHJldHVybiB0Y19zZXR1cF9ldHNfc2NoZWQocHJpdiwgcW9wdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTI3NS1cXHRjYXNlIFRDX0VUU19ERVNUUk9ZOlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM9MTQwMD1jb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTQwNi1cXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjE0MDc6XFx0LnNldHVwX2V0cyA9IHRjX3NldHVwX2V0cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xNDA4LVxcdC5xdWVyeV9jYXBzID0gdGNfcXVlcnlfY2FwcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTE0MTI9Y29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTQxOC1cXHQuc2V0dXBfZXRmID0gdGNfc2V0dXBfZXRmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjE0MTk6XFx0LnNldHVwX2V0cyA9IHRjX3NldHVwX2V0cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xNDIwLVxcdC5xdWVyeV9jYXBzID0gdGNfcXVlcnlfY2FwcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6MDAuOTk1NTg5ODA5WiIsIlNlcSI6ODEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NDk1NDA5ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRyYWZmaWMgQ29udHJvbCAodGMpIENvbmZpZ3VyYXRpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB0aGVzZSB0cmFmZmljIGNvbnRyb2wgZnVuY3Rpb25zLiBMZXQncyBzZWUuLi4gdGhlIGtleSBwbGF5ZXJzIGhlcmUgc2VlbSB0byBiZSBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgLCBgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRgLCBgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW9gLCBhbmQgYHRjX3NldHVwX2R3bWFjNTEwX21xcHJpb2AuIEkgaW1tZWRpYXRlbHkgbm90aWNlIHRoYXQgYHRjX3NldHVwX2V0c2AgYW5kIGB0Y19zZXR1cF9ldHNfc2NoZWRgIGFyZSBzdGF0aWMuIFdhaXQuLi4gc2luY2UgYHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0YCBhbmQgYHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvYCBhcmUgZXhwb3J0ZWQsIG1lYW5pbmcgdGhleSdyZSBub3Qgc3RhdGljLCBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGFzc3VtcHRpb24uIFRpbWUgdG8gY29uZmlybSBpZiB0aGVzZSB0d28gYXJlIGluZGVlZCBub3Qgc3RhdGljIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1OTYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6MDcuNDQ1MTM0MjI1WiIsIlNlcSI6ODIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYzNTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDAxPWV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzdG1tYWNfc2ltcGxlX3BtX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDAzOnZvaWQgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MDQtdm9pZCBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpbyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0zNDAwPXN0YXRpYyB2b2lkIHN0bW1hY19zZXRfcmluZ3NfbGVuZ3RoKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzQxNy0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjM0MTg6ICogIHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0IC0gU2V0IFRYIHF1ZXVlIHdlaWdodFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzQxOS0gKiAgQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zNDIxLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MzQyMjp2b2lkIHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTM0MjMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0zNTY2PXN0YXRpYyB2b2lkIHN0bW1hY19tdGxfY29uZmlndXJhdGlvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTM1NzEtXFx0aWYgKHR4X3F1ZXVlc19jb3VudCBcXHUwMDNlIDEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzozNTcyOlxcdFxcdHN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzU3My1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTEyMTY9c3RhdGljIHZvaWQgc3RtbWFjX3FkaXNjX3Jlc3RvcmVfZHRfY29uZmlnKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyMTktXFx0cHJpdi1cXHUwMDNlcWRpc2MuZW5hYmxlID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM6MTIyMDpcXHRzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodChwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMjIxLVxcdHN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvKHByaXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMjowNy40OTY3NzYxMzRaIiwiU2VxIjo4MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxODE1NDExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBTdGF0aWMgYW5kIE5vbi1TdGF0aWMgRnVuY3Rpb24gRGVjbGFyYXRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgcG9pbnQgaXMgYWJvdXQgZnVuY3Rpb24gc2NvcGUgYW5kIGhvdyBpdCdzIGRlZmluZWQuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGF0IHRoZXJlJ3MgYSBkaXN0aW5jdGlvbiBoZXJlLCBhIGRpZmZlcmVuY2UgaW4gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQuIEkgc2VlIHRoYXQgYHRjX3NldHVwX2R3bWFjNTEwX21xcHJpb2AgaXMsIGluIGZhY3QsIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBJdCdzIG5vdCBtZWFudCB0byBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiBUaGVuLCBJIHJlbWVtYmVyLCB0aGF0IGBzdG1tYWNfc2V0dXBfdGNgLCB0aGUgc2V0dXAgZm9yIHRyYWZmaWMgY29udHJvbCwgaXMgKm5vdCogc3RhdGljLiBJdHMgYSBnbG9iYWwgZnVuY3Rpb24uIFNvLCB0aGF0J3MgYSBkaWZmZXJlbnQgYXBwcm9hY2ggZW50aXJlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODIxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6MTMuMDE0OTM0NDU4WiIsIlNlcSI6ODQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEzMzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfc2V0dXBfdGNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NjM4NT1zdGF0aWMgaW50IHN0bW1hY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy02Mzk0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjM5NTpzdGF0aWMgaW50IHN0bW1hY19zZXR1cF90Y19ibG9ja19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjM5Ni1cXHRcXHRcXHRcXHQgICAgdm9pZCAqY2JfcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NjQyMT1zdGF0aWMgTElTVF9IRUFEKHN0bW1hY19ibG9ja19jYl9saXN0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY0MjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo2NDIzOnN0YXRpYyBpbnQgc3RtbWFjX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY0MjQtXFx0XFx0XFx0ICAgdm9pZCAqdHlwZV9kYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy02NDM1LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnN0bW1hY19ibG9ja19jYl9saXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjQzNjpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0bW1hY19zZXR1cF90Y19ibG9ja19jYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY0MzctXFx0XFx0XFx0XFx0XFx0XFx0ICBwcml2LCBwcml2LCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzMxMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHN0bW1hY19uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MzIxLVxcdC5uZG9fZ2V0X3N0YXRzNjQgPSBzdG1tYWNfZ2V0X3N0YXRzNjQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3MzIyOlxcdC5uZG9fc2V0dXBfdGMgPSBzdG1tYWNfc2V0dXBfdGMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MzIzLVxcdC5uZG9fc2VsZWN0X3F1ZXVlID0gc3RtbWFjX3NlbGVjdF9xdWV1ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6MTMuMDYzMDc1NDc3WiIsIlNlcSI6ODUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MDI3Mzc1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNUTU1BQyBUcmFmZmljIENvbnRyb2wgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHN0bW1hY19zZXR1cF90Y2AgaXMgZGVjbGFyZWQgYHN0YXRpY2AuIFNvIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0cmFmZmljIGNvbnRyb2wgaW4gdGhlIFNUTU1BQyBkcml2ZXIuIEkgcXVpY2tseSBzZWUgdGhhdCBgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRgIGFuZCBgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW9gIGFyZSB0aGUgbm9uLXN0YXRpYyBjYW5kaWRhdGVzLlxuXG5XYWl0IGEgc2Vjb25kLCBJIHJlY2FsbCB0aGF0IGB0Y19zZXR1cF9ldHNgIGlzICphbHNvKiBzdGF0aWMuIFRoaXMgbmVlZHMgY2xvc2VyIHNjcnV0aW55LiBBcmUgdGhlcmUgYW55IG90aGVyIG5ldyBlbnRyaWVzPyBObywganVzdCB0aG9zZSB0d28sIGBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodGAgYW5kIGBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpb2AuXG5cbkFoLCBidXQgbm93IEkgcmVtZW1iZXIsIGBzdG1tYWNfdGNfb3BzYCBwcm92aWRlcyBhIGBzZXR1cF9ldHNgIGNhbGxiYWNrLiBHb3QgaXQuIFNvLCBldmVuIHRob3VnaCBzb21lIGFyZSBzdGF0aWMsIHRoZXkgYXJlICpzdGlsbCogdmlhYmxlLiBPa2F5LCBzbyBteSBsaXN0IGluY2x1ZGVzIGBzdG1tYWNfc2V0dXBfdGNgLCBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfc2V0X3R4X3F1ZXVlX3dlaWdodGAsIGBzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpb2AsIGFuZCBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYC4gSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgcHJvbXB0IGluZGljYXRlcyBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gSG93ZXZlciwgZXZlbiB0aGUgc3RhdGljIG9uZXMgYXJlIHZhbGlkIGlmIHRoZXkgYXJlIGRpc3RpbmN0LlxuXG5Db25zaWRlcmluZyB0aGUgcHJvbXB0J3MgaW5zdHJ1Y3Rpb24gdG8gcHJlZmVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgY29tcGlsZXIgd29uJ3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5J2xsIGhhdmUgdW5pcXVlIHN5bWJvbCBhZGRyZXNzZXMuIGBzdG1tYWNfc2V0dXBfdGNgIGFuZCBgdGNfc2V0dXBfZXRzYCBhcmUgY2FsbGJhY2tzLCBzbyB0aGV5IGFyZSBub3QgaW5saW5lZC5cblxuTm93LCBsZXQgbWUgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgdGhpbmsgYENPTkZJR19TVE1NQUNfRVRIYCBhbmQgYENPTkZJR19TVE1NQUNfUENJYCBhcmUgcmVsZXZhbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfTkVUX1NDSF9FVFNgIGlzIGFsc28gZW5hYmxlZCwgYXMgdGhpcyBlbmFibGVzIHRoZSBFVFMgcWRpc2MsIGEga2V5IGNvbXBvbmVudCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDcyOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMjoyMS43NjU4MTU1MTVaIiwiU2VxIjo4NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDI4NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU0NIX0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0zNjM9Y29uZmlnIE5FVF9TQ0hfUExVR1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMzg4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjM4OTpjb25maWcgTkVUX1NDSF9FVFNcXG5uZXQvc2NoZWQvS2NvbmZpZy0zOTAtXFx0dHJpc3RhdGUgXFxcIkVuaGFuY2VkIHRyYW5zbWlzc2lvbiBzZWxlY3Rpb24gc2NoZWR1bGVyIChFVFMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMjoyMS44MTE4NDk5NTRaIiwiU2VxIjo4NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1NTQ1MTU1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBTVE1NQUMgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgSSd2ZSBnb3QgaXQuIFdlIGRlZmluaXRlbHkgbmVlZCBgTkVUX1NDSF9FVFNgIGVuYWJsZWQuIFRoYXQgbXVjaCBpcyBjbGVhci4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgd2FycmFudCBhdHRlbnRpb24/IExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMsIGBDT05GSUdfU1RNTUFDX0VUSGAgaGluZ2VzIG9uIGEgZmV3IHRoaW5nczogYENPTkZJR19ORVRERVZJQ0VTYCwgYENPTkZJR19FVEhFUk5FVGAsIGBDT05GSUdfSEFTX0lPTUVNYCwgYW5kIGBDT05GSUdfSEFTX0RNQWAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEFuZCBgQ09ORklHX1NUTU1BQ19QQ0lgIGJ1aWxkcyBvbiBgQ09ORklHX1NUTU1BQ19FVEhgLCBuYXR1cmFsbHksIGJ1dCBhbHNvIHJlcXVpcmVzIGBDT05GSUdfUENJYC4gVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYCBmaWxlIGRpcmVjdGx5LiBUaGF0J3MgdGhlIGJlc3QgcGxhY2UgdG8gY29uZmlybSBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2ODYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6MzUuMzY2MzY4NjM4WiIsIlNlcSI6ODgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk5MTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RNTUFDX1BDSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mzk4PWNvbmZpZyBEV01BQ19NT1RPUkNPTU1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6NDA3OmNvbmZpZyBTVE1NQUNfUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXFx0dHJpc3RhdGUgXFxcIlNUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAyOjM1LjQxNDM2OTIxNloiLCJTZXEiOjg5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTczNDQ2NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSB3ZWxsLXZlcnNlZCBpbiBlbWJlZGRlZCBuZXR3b3JraW5nIGFuZCBMaW51eCBkZXZpY2UgZHJpdmVyczpcblxuKipBbmFseXppbmcgdGhlIFNUTU1BQyBQQ0kgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBoZWFydCBvZiB0aGUgU1RNTUFDIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBQQ0kgYXNwZWN0cy4gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9gIGRpcmVjdG9yeS4gVGhlIGZvY3VzLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGFyb3VuZCB0aGUgYFNUTU1BQ19QQ0lgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpcyBjb25maWd1cmVkIHdoZW4gaXQncyBvcGVyYXRpbmcgb24gYSBQQ0kgaW50ZXJmYWNlLlxuXG5JJ20gcHJvYmFibHkgbG9va2luZyBmb3I6XG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBmZWF0dXJlcyBvciBkcml2ZXJzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYFNUTU1BQ19QQ0lgIHRvIGJlIGF2YWlsYWJsZT9cbiogICAqKkRlcGVuZGVuY2llcyBvZiB0aGUgRGV2aWNlOioqIEhvdyBpcyB0aGUgY29uZmlndXJhdGlvbiBvZiBgU1RNTUFDX1BDSWAgZGVwZW5kYW50IG9uIG90aGVyIGZlYXR1cmVzIG9mIHRoZSBkZXZpY2U/XG4qICAgKipEZWZhdWx0IFNldHRpbmdzOioqIFdoYXQgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyBhbmQgc2V0dGluZ3Mgd2hlbiBhIFNUTU1BQyBpcyBjb25maWd1cmVkIG9uIGEgUENJIGRldmljZT9cbiogICAqKkRvY3VtZW50YXRpb246KiogSXMgdGhlcmUgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB3aXRoaW4gdGhlIGBLY29uZmlnYCBmaWxlIHRoYXQgZXhwbGFpbnMgdGhlIHB1cnBvc2Ugb3IgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIHRoaXMgb3B0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc3RyYWludHMgYW5kIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBQQ0kgc3VwcG9ydCBmb3IgdGhlIFNUTU1BQy5cblxuVGhlIGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIFBDSS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGludGVyYWN0aW9ucyB3aXRoIHRoZSBQQ0kgYnVzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkZXBlbmRpbmcgb24gd2hldGhlciBgU1RNTUFDX1BDSWAgaXMgc2V0LiBUaGlzIGlzIGNydWNpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBQQ0ktcmVsYXRlZCBpc3N1ZXMgYW5kIHRhaWxvcmluZyB0aGUgZHJpdmVyIHRvIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3Jtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxNTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDowMjo0Mi45ODc4MTk3MzlaIiwiU2VxIjo5MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gNDAxOlxcdFxcdHNlbGVjdCBNT1RPUkNPTU1fUEhZXFxuIDQwMjpcXHRcXHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxcbiA0MDM6XFx0XFx0aGVscFxcbiA0MDQ6XFx0XFx0ICBUaGlzIGVuYWJsZXMgZ2x1ZSBkcml2ZXIgZm9yIE1vdG9yY29tbSBEV01BQy1iYXNlZCBQQ0kgRXRoZXJuZXRcXG4gNDA1OlxcdFxcdCAgY29udHJvbGxlcnMuIEN1cnJlbnRseSBvbmx5IFlUNjgwMSBpcyBzdXBwb3J0ZWQuXFxuIDQwNjpcXHRcXG4gNDA3OlxcdGNvbmZpZyBTVE1NQUNfUENJXFxuIDQwODpcXHRcXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBDSSBidXMgc3VwcG9ydFxcXCJcXG4gNDA5OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuIDQxMDpcXHRcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcXG4gNDExOlxcdFxcdHNlbGVjdCBTVE1NQUNfTElCUENJXFxuIDQxMjpcXHRcXHRoZWxwXFxuIDQxMzpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxcbiA0MTQ6XFx0XFx0ICBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIG9uIFhMSU5YIFhDMlYzMDAwIEZGMTE1MkFNVDAyMjFcXG4gNDE1OlxcdFxcdCAgRDEyMTU5OTRBIFZJUlRFWCBGUEdBIGJvYXJkIGFuZCBTTlBTIFFvUyBJUEsgUHJvdG90eXBpbmcgS2l0LlxcbiA0MTY6XFx0XFxuIDQxNzpcXHRcXHQgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6NDIuOTg3OTEwNTI5WiIsIlNlcSI6OTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NzM0MDEwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBkZXBlbmRlbmNpZXMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRlY29kaW5nIHRoZSBIYXJkd2FyZSBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGNydWNpYWwgaW50ZXJkZXBlbmRlbmNpZXMuIEkgc2VlIHRoYXQgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBoaW5nZXMsIHF1aXRlIGZ1bmRhbWVudGFsbHksIG9uIHRoZSBwcmVzZW5jZSBhbmQgcHJvcGVyIGNvbmZpZ3VyYXRpb24gb2YgYFBDSWAgYW5kIGBDT01NT05fQ0xLYC4gVGhvc2UgYXJlIHRoZSBiYXNlbGluZSByZXF1aXJlbWVudHMuIEFmdGVyIHRoYXQsIEkgbm90aWNlIHRoZSBkZXBlbmRlbmN5IG9mIGBTVE1NQUNfRVRIYCBvbiBib3RoIGBIQVNfSU9NRU1gIGFuZCBgSEFTX0RNQWAuIFRoaXMgaW5kaWNhdGVzIHRoZSBuZWVkIGZvciBtZW1vcnktbWFwcGVkIEkvTyBjYXBhYmlsaXRpZXMgYW5kIGRpcmVjdCBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIHBlcmZlY3RseSBsb2dpY2FsIGdpdmVuIHdoYXQgSSBrbm93IGFib3V0IEV0aGVybmV0IE1BQ3MuIEl0J3MgYWxsIGFib3V0IGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSB3aXJlZCB0b2dldGhlci4gV2l0aG91dCB0aGVzZSBiYXNpYyBidWlsZGluZyBibG9ja3MsIHRoaXMgc3BlY2lmaWMgRXRoZXJuZXQgY29udHJvbGxlciBpc24ndCBnb2luZyB0byBmdW5jdGlvbiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGlzIGlzIGEgc3RhbmRhcmQgc2V0dXAsIGJ1dCBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgd2hlbiB0aGUgc3lzdGVtIHNldHVwIGlzIG1vcmUgY29tcGxleC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5MDEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAyOjUxLjQ2MTMxNTE5NVoiLCJTZXEiOjkyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU1RNTUFDX0VUSFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IEhBU19ETUFcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gRVRIVE9PTF9ORVRMSU5LXFxuICAgNzpcXHRcXHRzZWxlY3QgTUlJXFxuICAgODpcXHRcXHRzZWxlY3QgUENTX1hQQ1NcXG4gICA5OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDEwOlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDEyOlxcdFxcdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXFxuICAxMzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDE0OlxcdFxcdGhlbHBcXG4gIDE1OlxcdFxcdCAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgRXRoZXJuZXQgSVBzIGJ1aWx0IGFyb3VuZCBhXFxuICAxNjpcXHRcXHQgIFN5bm9wc3lzIElQIENvcmUuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGlmIFNUTU1BQ19FVEhcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIFNUTU1BQ19TRUxGVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MDI6NTEuNDYxNDExNDE1WiIsIlNlcSI6OTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjY3OTc3NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTdG1tYWMgRVRTIE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfUENJYCwgYW5kIGBORVRfU0NIX0VUU2AgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgaGVyZS4gV2UgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlLlxuXG5Ob3csIGZvciBhIHF1aWNrIHN1bW1hcnkgb2YgdGhlIGtleSBmaW5kaW5nczogVGhpcyBwYXRjaCBzZWVtcyBlbWluZW50bHkgZnV6emFibGUuIEl0IGxvb2tzIGxpa2UgaXQncyB3b3J0aCB0aGUgdGltZSB0byBpbnZlc3RpZ2F0ZSAoYFdvcnRoRnV6emluZzogdHJ1ZWApLlxuXG5UaGUgZXNzZW50aWFsIGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcgYXJlOiBgdGNfc2V0dXBfZXRzYCwgYHRjX3NldHVwX2V0c19zY2hlZGAsIGBzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdgLCBgc3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRgLCBgc3RtbWFjX21hY19jb25maWdfdHhfcXVldWVzX3ByaW9gLCBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYCwgYW5kIGBzdG1tYWNfc2V0dXBfdGNgLiBUaGVzZSBhcmUgbXkgaW5pdGlhbCBhcmVhcyBvZiBpbnRlcmVzdCBiYXNlZCBvbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC5cblxuVGhlIGNvbmZpZ3MgdGhhdCBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGFyZTogYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGFuZCBgTkVUX1NDSF9FVFNgLlxuXG5NeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuIFRoaXMgbWVhbnMgdGhlIGRyaXZlciBpcyBiZWluZyBtb2RpZmllZCB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZCwgc28gdGhlIGxpc3RlZCBmdW5jdGlvbnMgc2hvdWxkIGJlIGludGVyYWN0aW5nIHdpdGggdGhhdCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBXaGF0IG1ha2VzIHRoaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGFuZCBsaWtlbHkgZnV6emFibGUsIGlzIHRoYXQgdGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHRlc3RlZCBpbiBRRU1VIHVzaW5nIGEgZHVtbXkgUENJIGRldmljZSDigJMgc3l6a2FsbGVyJ3MgdmhjaSwgd2hpY2ggaXMgaGVscGZ1bC4gQW5kIHRoZSBFVFMgcWRpc2MgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgbmV0bGluaywgd2hpY2ggbWVhbnMgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBjYW4gYmUgZnV6emVkLiBJdCBsb29rcyBsaWtlIGEgZ29vZCB0YXJnZXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDI3LCJPdXRwdXRUb2tlbnMiOjIyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjAzOjAxLjcyOTM5MzE1NloiLCJTZXEiOjk0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4Njc5MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJORVRfU0NIX0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX3NldHVwX2V0c1wiLFxuICAgIFwidGNfc2V0dXBfZXRzX3NjaGVkXCIsXG4gICAgXCJzdG1tYWNfcWRpc2NfcmVzdG9yZV9kdF9jb25maWdcIixcbiAgICBcInN0bW1hY19zZXRfdHhfcXVldWVfd2VpZ2h0XCIsXG4gICAgXCJzdG1tYWNfbWFjX2NvbmZpZ190eF9xdWV1ZXNfcHJpb1wiLFxuICAgIFwidGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvXCIsXG4gICAgXCJzdG1tYWNfc2V0dXBfdGNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgcWRpc2Mgb2ZmbG9hZCB0byB0aGUgc3RtbWFjIGRyaXZlci4gSXQgbW9kaWZpZXMgdGhlIGRyaXZlciB0byBjb25maWd1cmUgaGFyZHdhcmUgcXVldWVzIHdoZW4gdGhlIEVUUyBxZGlzYyBpcyBhdHRhY2hlZC4gVGhlIHN0bW1hYyBkcml2ZXIgY2FuIGJlIHByb2JlZCBpbiBRRU1VIHZpYSBhIGR1bW15IFBDSSBkZXZpY2UgKHVzaW5nIHN5emthbGxlcidzIHZoY2kpLCBhbmQgdGhlIEVUUyBxZGlzYyBjYW4gYmUgY29uZmlndXJlZCB2aWEgbmV0bGluaywgbWFraW5nIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIGZ1enphYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNUTU1BQ19FVEhcIixcbiAgICBcIlNUTU1BQ19QQ0lcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNfc2V0dXBfZXRzXCIsXG4gICAgXCJ0Y19zZXR1cF9ldHNfc2NoZWRcIixcbiAgICBcInN0bW1hY19xZGlzY19yZXN0b3JlX2R0X2NvbmZpZ1wiLFxuICAgIFwic3RtbWFjX3NldF90eF9xdWV1ZV93ZWlnaHRcIixcbiAgICBcInN0bW1hY19tYWNfY29uZmlnX3R4X3F1ZXVlc19wcmlvXCIsXG4gICAgXCJ0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9cIixcbiAgICBcInN0bW1hY19zZXR1cF90Y1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRVRTIChFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKSBxZGlzYyBvZmZsb2FkIHRvIHRoZSBzdG1tYWMgZHJpdmVyLiBJdCBtb2RpZmllcyB0aGUgZHJpdmVyIHRvIGNvbmZpZ3VyZSBoYXJkd2FyZSBxdWV1ZXMgd2hlbiB0aGUgRVRTIHFkaXNjIGlzIGF0dGFjaGVkLiBUaGUgc3RtbWFjIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIFFFTVUgdmlhIGEgZHVtbXkgUENJIGRldmljZSAodXNpbmcgc3l6a2FsbGVyJ3MgdmhjaSksIGFuZCB0aGUgRVRTIHFkaXNjIGNhbiBiZSBjb25maWd1cmVkIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhpcyBjb2RlIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k9x8[1] Phase: Succeeded StartedAt: 2026-08-07 10:03:13 +0000 UTC FinishedAt: 2026-08-07 10:03:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k9x8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 10:03:13 +0000 UTC FinishedAt: 2026-08-07 10:03:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k9x8[2] Phase: Running StartedAt: 2026-08-07 10:03:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k9x8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-07 10:03:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6k9x8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 10:03:13 +0000 UTC FinishedAt: 2026-08-07 10:03:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k9x8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 10:03:13 +0000 UTC FinishedAt: 2026-08-07 10:03:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow6k9x8/series-workflow6k9x8-convert-artifact-1172336579/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k9x8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 10:03:23 +0000 UTC FinishedAt: 2026-08-07 10:19:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k9x8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 10:03:23 +0000 UTC FinishedAt: 2026-08-07 10:19:34 +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:*e29f1289-a0f1-4ce8-aa0f-77cef98a8b9f,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-workflow6k9x8/series-workflow6k9x8-convert-artifact-1172336579/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": "46c17261-2dbf-4251-a420-a0d22f08348c", "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-workflow6k9x8/series-workflow6k9x8-build-action-1932782129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k9x8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 10:03:23 +0000 UTC FinishedAt: 2026-08-07 10:19:24 +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:*e29f1289-a0f1-4ce8-aa0f-77cef98a8b9f,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-workflow6k9x8/series-workflow6k9x8-convert-artifact-1172336579/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": "46c17261-2dbf-4251-a420-a0d22f08348c", "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-workflow6k9x8/series-workflow6k9x8-build-action-1932782129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k9x8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 10:19:34 +0000 UTC FinishedAt: 2026-08-07 10:19:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k9x8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 10:19:34 +0000 UTC FinishedAt: 2026-08-07 10:19:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k9x8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 10:19:34 +0000 UTC FinishedAt: 2026-08-07 10:19:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k9x8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 10:19:34 +0000 UTC FinishedAt: 2026-08-07 10:19:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow6k9x8/series-workflow6k9x8-convert-artifact-4282065786/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k9x8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Running StartedAt: 2026-08-07 10:19:44 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k9x8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_setup_ets","tc_setup_ets_sched","stmmac_qdisc_restore_dt_config","stmmac_set_tx_queue_weight","stmmac_mac_config_tx_queues_prio","tc_setup_dwmac510_mqprio","stmmac_setup_tc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","NET_SCH_ETS"],"series_id":"a3a34828-8379-4cec-939e-2d48b8ab88f9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Running StartedAt: 2026-08-07 10:19:44 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46c17261-2dbf-4251-a420-a0d22f08348c,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-workflow6k9x8/series-workflow6k9x8-build-action-1932782129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil